#include <ExtrapFillPatch.H>
The picture below shows existing ghost cell data in a border around the valid region (including corners). These values are extrapolated to the ghost cells in the outer "flaps." The coordinate direction of extrapolation is a parameter (in this example, it is 0).
+-----+---------------------------------+-----+ | | +-----------------------------+ | | | | | | | | | | | | | | | | | | | | | | | InteriorBox | | | | | | || x | | | | | |/ | | x || | / | | / | | |/| | |/ | | / | | / | | -----------/| | | /| | | / | | | / | | | / | | | / | | | / | | | / | | +-------------/---------------+x| | / +-----+--------------/----------------/-+-----+ / / / / / / / / / / / / ------/------------------------ / / | Ghost cells in outer flaps |/ / | (locations x) are filled by | / | extrapolating from existing | ------------/------------------------ | ghost cells (location %). | | Border of exisiting ghost cells. | |-----------------------------| | Assumed to be filled correctly | | on input. | |-----------------------------------|
Limitation on grid configuration
The picture below shows the ghost cells of grid 1 for extrapolation in direction 0. The cells marked X were filled before extrapolation. The cells marked > are extrapolated to from the first X to their right. The cells marked ? want to be filled from an X to the right, but there isn't any. This algorithm is not defined for such a grid configuration, in which the outline of the level has a "step" of width (in this case 2) less than the extrapolation radius (in this case 4). Using this algorithm with grids that violate this condition may result in undefined behavior.
+ - - - - - - - - - - - + > > > X X X X X X < < < | +-------+ | > > > X| |X < < < | | | | > > > X| |X < < < | | grid 1| | > > > X| |X < < < | | | | > > > X| |X < < < | +---+-------+ | ? ?|^ ^ ^ ^ ^ ^|X < < < + - - - - - - - - - - - + | | | | | grid 0 | | | | | +-----------+
Public Member Functions | |
ExtrapFillPatch () | |
~ExtrapFillPatch () | |
ExtrapFillPatch (const DisjointBoxLayout &a_level_domain, const Box &a_problem_domain, const Interval &a_extrap_interval) | |
ExtrapFillPatch (const DisjointBoxLayout &a_level_domain, const ProblemDomain &a_problem_domain, const Interval &a_extrap_interval) | |
void | define (const DisjointBoxLayout &a_level_domain, const Box &a_problem_domain, const Interval &a_extrap_interval) |
void | define (const DisjointBoxLayout &a_level_domain, const ProblemDomain &a_problem_domain, const Interval &a_extrap_interval) |
bool | isDefined () const |
void | fillExtrap (LevelData< FArrayBox > &a_data, int a_dir, int a_dest_comp, int a_num_comp) |
Protected Attributes | |
bool | m_is_defined |
LayoutData< IntVectSet > | m_lo_extrap [SpaceDim] |
LayoutData< IntVectSet > | m_hi_extrap [SpaceDim] |
Interval | m_extrap_interval |
ExtrapFillPatch::ExtrapFillPatch | ( | ) |
Default constructor. User must subsequently call define().
ExtrapFillPatch::~ExtrapFillPatch | ( | ) |
Destructor.
ExtrapFillPatch::ExtrapFillPatch | ( | const DisjointBoxLayout & | a_level_domain, | |
const Box & | a_problem_domain, | |||
const Interval & | a_extrap_interval | |||
) |
Defining constructor. Constructs a valid ExtrapFillPatch object. Equivalent to default construction followed by define(). It is a fatal error if any grid in a_level_domain has any dimension less than a_extrap_interval.end().
There is also a restriction on grids with "jagged steps" which is described in "Limitation on grid configuration" in the class documentation above (with the ASCII art). It is not checked whether the input domain complies with this restriction. Using this algorithm with grids that violate this condition may result in undefined behavior.
{ Arguments:}\ a_level_domain (not modified): domain of the level. \ a_problem_domain (not modified): problem domain at this level. \ a_extrap_interval (not modified): the interval of ghost cells to fill by extrapolation. \
ExtrapFillPatch::ExtrapFillPatch | ( | const DisjointBoxLayout & | a_level_domain, | |
const ProblemDomain & | a_problem_domain, | |||
const Interval & | a_extrap_interval | |||
) |
Defining constructor. Constructs a valid ExtrapFillPatch object. Equivalent to default construction followed by define(). It is a fatal error if any grid in a_level_domain has any dimension less than a_extrap_interval.end().
There is also a restriction on grids with "jagged steps" which is described in "Limitation on grid configuration" in the class documentation above (with the ASCII art). It is not checked whether the input domain complies with this restriction. Using this algorithm with grids that violate this condition may result in undefined behavior.
{ Arguments:}\ a_level_domain (not modified): domain of the level. \ a_problem_domain (not modified): problem domain at this level. \ a_extrap_interval (not modified): the interval of ghost cells to fill by extrapolation. \
void ExtrapFillPatch::define | ( | const DisjointBoxLayout & | a_level_domain, | |
const Box & | a_problem_domain, | |||
const Interval & | a_extrap_interval | |||
) |
Defines this ExtrapFillPatch. Existing definition is overridden. The user may call define() once and call fillInterp() multiple times with different valid data sets.
It is a fatal error if any grid in a_level_domain has any dimension less than a_extrap_interval.end().
There is also a restriction on grids with "jagged steps" which is described in "Limitation on grid configuration" in the class documentation above (with the ASCII art). It is not checked whether the input domain complies with this restriction. Using this algorithm with grids that violate this condition may result in undefined behavior.
{ Arguments:}\ a_level_domain (not modified): domain of the level. \ a_problem_domain (not modified): problem domain at this level. \ a_extrap_interval (not modified): the interval of ghost cells to fill by extrapolation. \
{ This:}\ ---This object is modified.---
void ExtrapFillPatch::define | ( | const DisjointBoxLayout & | a_level_domain, | |
const ProblemDomain & | a_problem_domain, | |||
const Interval & | a_extrap_interval | |||
) |
Defines this ExtrapFillPatch. Existing definition is overridden. The user may call define() once and call fillInterp() multiple times with different valid data sets.
It is a fatal error if any grid in a_level_domain has any dimension less than a_extrap_interval.end().
There is also a restriction on grids with "jagged steps" which is described in "Limitation on grid configuration" in the class documentation above (with the ASCII art). It is not checked whether the input domain complies with this restriction. Using this algorithm with grids that violate this condition may result in undefined behavior.
{ Arguments:}\ a_level_domain (not modified): domain of the level. \ a_problem_domain (not modified): problem domain at this level. \ a_extrap_interval (not modified): the interval of ghost cells to fill by extrapolation. \
{ This:}\ ---This object is modified.---
bool ExtrapFillPatch::isDefined | ( | ) | const |
Returns true if this object was created with the defining constructor or if define() has called.
{ This:}\ This object is not modified.
void ExtrapFillPatch::fillExtrap | ( | LevelData< FArrayBox > & | a_data, | |
int | a_dir, | |||
int | a_dest_comp, | |||
int | a_num_comp | |||
) |
Fills ghost cells in the outer flaps, by interpolation from data in the inner ghost cells. It is an error to call if not this->isDefined().\
{ Arguments:}\ a_data (modified): data at this level, both the source and destination for extrapolation. \ a_dir (not modified): zero-based coordinate direction of extrapolation. \ a_dest_comp (not modified): the first component for extrapolation. \ a_num_comp (not modified): the number of components to extrapolate. \
{ This:}\ This object is not modified.
bool ExtrapFillPatch::m_is_defined [protected] |
LayoutData<IntVectSet> ExtrapFillPatch::m_lo_extrap[SpaceDim] [protected] |
LayoutData<IntVectSet> ExtrapFillPatch::m_hi_extrap[SpaceDim] [protected] |
Interval ExtrapFillPatch::m_extrap_interval [protected] |