EBGradDivFilter Class Reference

#include <EBGradDivFilter.H>

Collaboration diagram for EBGradDivFilter:

Collaboration graph
[legend]

List of all members.


Detailed Description

Class to filter out divergence modes by imposing u += lambda * grad div u

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 DisjointBoxLayoutm_gridsCoarPtr
const EBISLayoutm_ebislCoarPtr
ProblemDomain m_domainCoar
ProblemDomain m_domainFine
int m_refRat
bool m_hasCoarser
EBTensorCFInterpm_tensorCFI
RealVect m_dxFine
LevelData< EBCellFABm_gradVel
LevelData< EBFluxFABm_faceDivCell
LevelData< EBFluxFABm_faceDivCent
LayoutData< BaseIVFAB
< VoFStencil > > 
m_johanStencil
LayoutData< BaseIVFAB< bool > > m_dropOrder
LayoutData< BaseIVFAB< Real > > m_distanceAlongLine
LevelData< EBCellFABm_lambda
Real m_lambdaScale

Private Member Functions

 EBGradDivFilter ()
 EBGradDivFilter (const EBGradDivFilter &a_input)
void operator= (const EBGradDivFilter &a_input)

Constructor & Destructor Documentation

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().


Member Function Documentation

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().


Member Data Documentation

int EBGradDivFilter::m_refRat [protected]


The documentation for this class was generated from the following file:

Generated on Tue Apr 14 14:23:17 2009 for Chombo + EB by  doxygen 1.5.5