#include <EBGradDivFilter.H>
Public Member Functions | |
EBGradDivFilter (const DisjointBoxLayout &a_fineGrids, const DisjointBoxLayout *a_coarGridsPtr, const EBISLayout &a_ebislFine, const EBISLayout *a_ebislCoarPtr, const ProblemDomain &a_domainFine, const RealVect &a_dxFine, const int &a_refRat, const Real &a_lambdaScale=0.125) | |
~EBGradDivFilter () | |
void | filter (LevelData< EBCellFAB > &a_velFine, const LevelData< EBFluxFAB > &a_fluxVelFine, const LevelData< EBCellFAB > *a_velCoar, bool a_lowOrderOneSidedGrad=false, bool a_noExtrapToCovered=false) |
void | gradDiv (LevelData< EBCellFAB > &a_gradDivVel, LevelData< EBCellFAB > &a_velFine, const LevelData< EBFluxFAB > &a_fluxVelFine, const LevelData< EBCellFAB > *a_velCoar, bool a_lowOrderOneSidedGrad=false, bool a_noExtrapToCovered=false) |
Real | getDomainDivergence (const EBCellFAB &a_gradVel, const EBCellFAB &a_vel, const EBFluxFAB &a_fluxVel, const Box &a_grid, const EBISBox &a_ebisBox, const int &a_faceDir, const FaceIndex &a_face, const Side::LoHiSide &a_side) |
void | gradDiv (EBCellFAB &a_gradDivVel, const EBCellFAB &a_gradVel, const EBCellFAB &a_velFine, const EBFluxFAB &a_fluxVelFine, const EBFluxFAB &a_divUFaceCent, const Box &a_gridFine, const EBISBox &a_ebisBoxFine, const DataIndex &a_dit, bool a_multiplyByLambda, bool a_noExtrapToCovered) |
int | getGradComp (int a_velDir, int a_derivDir) |
void | gradVel (EBCellFAB &a_gradVel, const EBCellFAB &a_velFine, const Box &a_gridFine, const EBISBox &a_ebisBoxFine, bool a_lowOrderOneSidedGrad) |
void | faceDivergence (EBFaceFAB &a_divVel, const EBCellFAB &a_gradVel, const EBCellFAB &a_velFine, const EBFluxFAB &a_fluxVelFine, const Box &a_gridFine, const EBISBox &a_ebisBoxFine, const int &a_faceDir) |
void | cellGradient (EBCellFAB &a_gradDivVel, const EBCellFAB &a_gradVel, const EBCellFAB &a_velFine, const EBFluxFAB &a_fluxVelFine, const EBFluxFAB &a_divVel, const Box &a_gridFine, const EBISBox &a_ebisBoxFine, const DataIndex &a_dit, bool a_multiplyByLambda, bool a_noExtrapToCovered) |
Protected Member Functions | |
void | getAreaFracs (Vector< FaceIndex > a_facesLo[SpaceDim], Vector< FaceIndex > a_facesHi[SpaceDim], bool a_hasFacesLo[SpaceDim], bool a_hasFacesHi[SpaceDim], RealVect &a_areaFracLo, RealVect &a_areaFracHi, const VolIndex &a_vof, const EBISBox &a_ebisBox) |
void | fillLambda () |
Protected Attributes | |
DisjointBoxLayout | m_gridsFine |
EBISLayout | m_ebislFine |
const DisjointBoxLayout * | m_gridsCoarPtr |
const EBISLayout * | m_ebislCoarPtr |
ProblemDomain | m_domainCoar |
ProblemDomain | m_domainFine |
int | m_refRat |
bool | m_hasCoarser |
EBTensorCFInterp * | m_tensorCFI |
RealVect | m_dxFine |
LevelData< EBCellFAB > | m_gradVel |
LevelData< EBFluxFAB > | m_faceDivCell |
LevelData< EBFluxFAB > | m_faceDivCent |
LayoutData< BaseIVFAB < VoFStencil > > | m_johanStencil |
LayoutData< BaseIVFAB< bool > > | m_dropOrder |
LayoutData< BaseIVFAB< Real > > | m_distanceAlongLine |
LevelData< EBCellFAB > | m_lambda |
Real | m_lambdaScale |
Private Member Functions | |
EBGradDivFilter () | |
EBGradDivFilter (const EBGradDivFilter &a_input) | |
void | operator= (const EBGradDivFilter &a_input) |
EBGradDivFilter::EBGradDivFilter | ( | const DisjointBoxLayout & | a_fineGrids, | |
const DisjointBoxLayout * | a_coarGridsPtr, | |||
const EBISLayout & | a_ebislFine, | |||
const EBISLayout * | a_ebislCoarPtr, | |||
const ProblemDomain & | a_domainFine, | |||
const RealVect & | a_dxFine, | |||
const int & | a_refRat, | |||
const Real & | a_lambdaScale = 0.125 | |||
) |
Constructor. Send coarse objects as NULL if they do not exist.
EBGradDivFilter::~EBGradDivFilter | ( | ) |
EBGradDivFilter::EBGradDivFilter | ( | ) | [inline, private] |
References MayDay::Error().
EBGradDivFilter::EBGradDivFilter | ( | const EBGradDivFilter & | a_input | ) | [inline, private] |
References MayDay::Error().
void EBGradDivFilter::filter | ( | LevelData< EBCellFAB > & | a_velFine, | |
const LevelData< EBFluxFAB > & | a_fluxVelFine, | |||
const LevelData< EBCellFAB > * | a_velCoar, | |||
bool | a_lowOrderOneSidedGrad = false , |
|||
bool | a_noExtrapToCovered = false | |||
) |
makes vel := vel + lambda*(grad div u). velCoar = NULL if no coarser If lowOrderOneSidedGrad, the one sided differences in the gradient of the velocity are simply 2 point. Otherwise we do the higher-order 3 point difference. Default true here because it seems to add stability.
void EBGradDivFilter::gradDiv | ( | LevelData< EBCellFAB > & | a_gradDivVel, | |
LevelData< EBCellFAB > & | a_velFine, | |||
const LevelData< EBFluxFAB > & | a_fluxVelFine, | |||
const LevelData< EBCellFAB > * | a_velCoar, | |||
bool | a_lowOrderOneSidedGrad = false , |
|||
bool | a_noExtrapToCovered = false | |||
) |
Returns grad(div(u)). Velfine is nonconst because of coarse-fine interpolation and exchange. For convergence tests. NOT pre multiplied by lambda If lowOrderOneSidedGrad, the one sided differences in the gradient of the velocity are simply 2 point. Otherwise we do the higher-order 3 point difference. Default false here because this is used in convergence tests.
Real EBGradDivFilter::getDomainDivergence | ( | const EBCellFAB & | a_gradVel, | |
const EBCellFAB & | a_vel, | |||
const EBFluxFAB & | a_fluxVel, | |||
const Box & | a_grid, | |||
const EBISBox & | a_ebisBox, | |||
const int & | a_faceDir, | |||
const FaceIndex & | a_face, | |||
const Side::LoHiSide & | a_side | |||
) |
void EBGradDivFilter::gradDiv | ( | EBCellFAB & | a_gradDivVel, | |
const EBCellFAB & | a_gradVel, | |||
const EBCellFAB & | a_velFine, | |||
const EBFluxFAB & | a_fluxVelFine, | |||
const EBFluxFAB & | a_divUFaceCent, | |||
const Box & | a_gridFine, | |||
const EBISBox & | a_ebisBoxFine, | |||
const DataIndex & | a_dit, | |||
bool | a_multiplyByLambda, | |||
bool | a_noExtrapToCovered | |||
) |
computes lambda*(grad div u). Does one-side differences at boundary. pre multiplied by lambda if a_multiplyByLambda = true
int EBGradDivFilter::getGradComp | ( | int | a_velDir, | |
int | a_derivDir | |||
) |
Determines which component of spacedim*spacedim fab the velocity gradient of the velocity goes into. velDir is the component of the velocity. derivdir is the compoent of the gradient.
void EBGradDivFilter::gradVel | ( | EBCellFAB & | a_gradVel, | |
const EBCellFAB & | a_velFine, | |||
const Box & | a_gridFine, | |||
const EBISBox & | a_ebisBoxFine, | |||
bool | a_lowOrderOneSidedGrad | |||
) |
computes cell centered gradient of cell centered velocity and puts it into gradvel fab of size spacedim*spacedim. getGradComp determines which component of fab. If lowOrderOneSidedGrad, the one sided differences in the gradient of the velocity are simply 2 point. Otherwise we do the higher-order 3 point difference. Default false here because this is used in convergence tests.
void EBGradDivFilter::faceDivergence | ( | EBFaceFAB & | a_divVel, | |
const EBCellFAB & | a_gradVel, | |||
const EBCellFAB & | a_velFine, | |||
const EBFluxFAB & | a_fluxVelFine, | |||
const Box & | a_gridFine, | |||
const EBISBox & | a_ebisBoxFine, | |||
const int & | a_faceDir | |||
) |
void EBGradDivFilter::cellGradient | ( | EBCellFAB & | a_gradDivVel, | |
const EBCellFAB & | a_gradVel, | |||
const EBCellFAB & | a_velFine, | |||
const EBFluxFAB & | a_fluxVelFine, | |||
const EBFluxFAB & | a_divVel, | |||
const Box & | a_gridFine, | |||
const EBISBox & | a_ebisBoxFine, | |||
const DataIndex & | a_dit, | |||
bool | a_multiplyByLambda, | |||
bool | a_noExtrapToCovered | |||
) |
void EBGradDivFilter::getAreaFracs | ( | Vector< FaceIndex > | a_facesLo[SpaceDim], | |
Vector< FaceIndex > | a_facesHi[SpaceDim], | |||
bool | a_hasFacesLo[SpaceDim], | |||
bool | a_hasFacesHi[SpaceDim], | |||
RealVect & | a_areaFracLo, | |||
RealVect & | a_areaFracHi, | |||
const VolIndex & | a_vof, | |||
const EBISBox & | a_ebisBox | |||
) | [protected] |
void EBGradDivFilter::fillLambda | ( | ) | [protected] |
void EBGradDivFilter::operator= | ( | const EBGradDivFilter & | a_input | ) | [inline, private] |
References MayDay::Error().
DisjointBoxLayout EBGradDivFilter::m_gridsFine [protected] |
EBISLayout EBGradDivFilter::m_ebislFine [protected] |
const DisjointBoxLayout* EBGradDivFilter::m_gridsCoarPtr [protected] |
const EBISLayout* EBGradDivFilter::m_ebislCoarPtr [protected] |
ProblemDomain EBGradDivFilter::m_domainCoar [protected] |
ProblemDomain EBGradDivFilter::m_domainFine [protected] |
int EBGradDivFilter::m_refRat [protected] |
bool EBGradDivFilter::m_hasCoarser [protected] |
EBTensorCFInterp* EBGradDivFilter::m_tensorCFI [protected] |
RealVect EBGradDivFilter::m_dxFine [protected] |
LevelData<EBCellFAB> EBGradDivFilter::m_gradVel [protected] |
LevelData<EBFluxFAB> EBGradDivFilter::m_faceDivCell [protected] |
LevelData<EBFluxFAB> EBGradDivFilter::m_faceDivCent [protected] |
LayoutData<BaseIVFAB<VoFStencil> > EBGradDivFilter::m_johanStencil [protected] |
LayoutData<BaseIVFAB<bool> > EBGradDivFilter::m_dropOrder [protected] |
LayoutData<BaseIVFAB<Real> > EBGradDivFilter::m_distanceAlongLine [protected] |
LevelData<EBCellFAB> EBGradDivFilter::m_lambda [protected] |
Real EBGradDivFilter::m_lambdaScale [protected] |