IBAMR  IBAMR version 0.19.
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM > Class Template Reference

Class LocallyActiveDataRefineSchedule<DIM> performs the communication operations that refine data to, copy data to, or fill physical boundary data on a destination patch level, where the data may be defined only on some patches (i.e., the patch data is "locally-active"). This class is based on the RefineSchedule<DIM> class. However, it has a reduced set of functionality since it treats locally-active data. For example, this class does not support time interpolation, and there is only one version of the constructor (vs. three for RefineSchedule<DIM>), the schedule cannot be reset, etc. More...

#include <LocallyActiveDataRefineSchedule.h>

Inheritance diagram for SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >:
Inheritance graph
[legend]

Public Member Functions

 LocallyActiveDataRefineSchedule (tbox::Pointer< hier::PatchLevel< DIM > > dst_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > dst_level_mgr, tbox::Pointer< hier::PatchLevel< DIM > > src_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > src_level_mgr, const tbox::Pointer< xfer::RefineClasses< DIM > > refine_classes, tbox::Pointer< xfer::LocallyActiveDataRefineTransactionFactory< DIM > > transaction_factory, xfer::LocallyActiveDataRefinePatchStrategy< DIM > *patch_strategy, bool use_time_interpolation=false)
 Constructor to create a refine schedule that moves data from the interiors of source patch data components on the source level into the interiors and ghost cells of destination patch data components on the destination level. More...
 
 LocallyActiveDataRefineSchedule (tbox::Pointer< hier::PatchLevel< DIM > > dst_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > dst_level_mgr, tbox::Pointer< hier::PatchLevel< DIM > > src_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > src_level_mgr, int next_coarser_level, tbox::Pointer< hier::PatchHierarchy< DIM > > hierarchy, const tbox::Pointer< xfer::RefineClasses< DIM > > refine_classes, tbox::Pointer< xfer::LocallyActiveDataRefineTransactionFactory< DIM > > transaction_factory, xfer::LocallyActiveDataRefinePatchStrategy< DIM > *patch_strategy, bool use_time_interpolation=false)
 Constructor to create a refine schedule that moves data from the interiors of source patch data components on the source level and coarser levels in the patch hierarchy into the interiors and ghost cells of destination patch data components on the destination level. More...
 
virtual ~LocallyActiveDataRefineSchedule ()
 
void fillData (double fill_time, bool do_physical_boundary_fill=true) const
 Execute the stored communication schedule and perform the data movement. More...
 
virtual void printClassData (std::ostream &stream) const
 

Static Public Member Functions

static void setScheduleGenerationMethod (const std::string &method)
 

Private Member Functions

 LocallyActiveDataRefineSchedule (const LocallyActiveDataRefineSchedule &)
 
void operator= (const LocallyActiveDataRefineSchedule &)
 
 LocallyActiveDataRefineSchedule (tbox::Pointer< hier::PatchLevel< DIM > > dst_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > dst_level_mgr, tbox::Pointer< hier::PatchLevel< DIM > > src_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > src_level_mgr, int next_coarser_level, tbox::Pointer< hier::PatchHierarchy< DIM > > hierarchy, const tbox::Pointer< xfer::RefineClasses< DIM > > refine_classes, tbox::Pointer< xfer::LocallyActiveDataRefineTransactionFactory< DIM > > transaction_factory, const tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &la_fill_boxes, xfer::LocallyActiveDataRefinePatchStrategy< DIM > *patch_strategy)
 This private constructor creates a communication schedule that fills the destination level on the specified fill boxes only. More...
 
void finishScheduleConstruction (tbox::Pointer< hier::PatchLevel< DIM > > src_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > src_level_mgr, int next_coarser_level, tbox::Pointer< hier::PatchHierarchy< DIM > > hierarchy, const tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &la_fill_boxes, bool use_time_interpolation)
 Finish the schedule construction by recursing to coarser levels as needed. More...
 
void recursiveFill (double fill_time, bool do_physical_boundary_fill) const
 Recursively fill the destination level with data at the given time. More...
 
void fillPhysicalBoundaries (tbox::Pointer< hier::PatchLevel< DIM > > level, double fill_time) const
 Fill the physical boundaries for each patch on the specified patch level. More...
 
void allocateScratchSpace (tbox::Pointer< hier::PatchLevel< DIM > > level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > level_mgr, double fill_time, hier::LocallyActiveDataPatchLevelManager< DIM > &allocate_mgr) const
 Allocate scratch space on the specified level and return the allocated patch data indices in the allocate manager for later deallocation. More...
 
void copyScratchToDestination (tbox::Pointer< hier::PatchLevel< DIM > > level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > level_mgr) const
 Copy the scratch space into the destination space. More...
 
void refineScratchData () const
 Refine scratch data between coarse and fine patch levels. More...
 
void generateCommunicationSchedule (tbox::Pointer< tbox::Schedule > coarse_priority_schedule, tbox::Pointer< tbox::Schedule > fine_priority_schedule, tbox::Pointer< hier::PatchLevel< DIM > > dst_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > dst_level_mgr, tbox::Pointer< hier::PatchLevel< DIM > > src_level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > src_level_mgr, const tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &la_fill_boxes, tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &la_unfilled_boxes, const bool use_time_interpolation)
 
void allocateDefaultFillBoxes (tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &la_fill_boxes, tbox::Pointer< hier::PatchLevel< DIM > > level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > level_mgr, const hier::IntVector< DIM > &fill_ghost_width)
 Calculate the default fill boxes for the specified patch level. More...
 
hier::IntVector< DIM > getMaxDestinationGhosts () const
 Calculate the maximum ghost cell width of all destination patch data components. More...
 
hier::IntVector< DIM > getMaxScratchGhosts () const
 Calculate the maximum ghost cell width of all scratch patch data components. More...
 
hier::IntVector< DIM > getMaxStencilGhosts () const
 Calculate the maximum ghost cell width required for all stencils. More...
 
void initializeDomainAndGhostInformation (bool recursive_schedule)
 This function is called from each constructor to cache local copies of hierachy information and to compute the necessary scratch data, destination data, and interpolation stencil ghost cell widths used during schedule construction. More...
 
void setRefineItems (const tbox::Pointer< xfer::RefineClasses< DIM > > refine_classes)
 Utility function to set up local copies of patch data source, destination, etc. indices and necessary data interpolation information stored in the refine classes object generated by the refine algorithm. More...
 
void clearRefineItems ()
 Utility function to clear local copies of refine items. More...
 
void initialCheckRefineClassItems () const
 Utility function to check whether scratch data items in collection of refine classes have sufficient ghost cell widths to handle user-defined interpolation operations. More...
 

Private Attributes

tbox::Pointer< xfer::RefineClasses< DIM > > d_refine_classes
 
int d_number_refine_items
 
const xfer::RefineClasses< DIM >::Data ** d_refine_items
 
tbox::Pointer< hier::PatchLevel< DIM > > d_dst_level
 
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > d_dst_level_mgr
 
xfer::LocallyActiveDataRefinePatchStrategy< DIM > * d_refine_patch_strategy
 
tbox::Pointer< xfer::LocallyActiveDataRefineTransactionFactory< DIM > > d_transaction_factory
 
hier::IntVector< DIM > d_max_stencil_gcw
 
hier::IntVector< DIM > d_max_scratch_gcw
 
hier::IntVector< DIM > d_boundary_fill_ghost_width
 
bool d_force_boundary_fill
 
bool d_domain_is_one_box
 
hier::Box< DIM > d_domain_box
 
int d_num_periodic_directions
 
hier::IntVector< DIM > d_periodic_shift
 
tbox::Pointer< tbox::Scheduled_coarse_priority_level_schedule
 
tbox::Pointer< tbox::Scheduled_fine_priority_level_schedule
 
tbox::Pointer< xfer::LocallyActiveDataRefineSchedule< DIM > > d_coarse_schedule
 
tbox::Pointer< hier::PatchLevel< DIM > > d_coarse_level
 
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > d_coarse_level_mgr
 
tbox::Array< intd_coarse_to_fine_mapping
 
tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > d_la_fine_fill_boxes
 
tbox::Array< tbox::Pointer< hier::BoxOverlap< DIM > > > d_overlaps
 
int d_max_fill_boxes
 
hier::BoxArray< DIM > d_src_masks
 
tbox::Pointer< tbox::Timert_fill_data
 
tbox::Pointer< tbox::Timert_gen_comm_sched
 
tbox::Pointer< tbox::Timert_finish_sched_const
 
tbox::Pointer< tbox::Timert_gen_comm_sched_unfilled
 
tbox::Pointer< tbox::Timert_gen_comm_sched_trans
 

Static Private Attributes

static const hier::IntVector< DIM > s_constant_zero_intvector
 
static const hier::IntVector< DIM > s_constant_one_intvector
 
static std::string s_schedule_generation_method
 
static bool s_printing
 

Detailed Description

template<int DIM>
class SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >

Source data is copied into the provided scratch space for temporary processing. The scratch space must contain sufficient ghost cells to accommodate the stencil width of the given interpolation operators and any physical boundary data that must be filled. The scratch data is copied into the destination space at the end of the process. The communication schedule is executed by calling member function fillData().

Each schedule object is typically created by a refine algorithm and represents the communication dependencies for a particular configuration of the AMR hierarchy. The communication schedule is only valid for that particular configuration and must be regenerated when the AMR patch hierarchy changes. However, as long as the patch levels involved in the creation of the schedule remain unchanged, the schedule may be used for multiple communication cycles. For more information about creating refine schedules for locally-active patch data, see the LocallyActiveDataRefineAlgorithm<DIM> header file.

NOTE: Algorithmic variations are available by calling the static method LocallyActiveDataRefineSchedule<DIM>::setScheduleGenerationMethod(), which sets the option for all instances of the class.

See also
xfer::LocallyActiveDataRefineAlgorithm
xfer::LocallyActiveRefinePatchStrategy
xfer::RefineClasses

Constructor & Destructor Documentation

◆ LocallyActiveDataRefineSchedule() [1/4]

template<int DIM>
SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::LocallyActiveDataRefineSchedule ( tbox::Pointer< hier::PatchLevel< DIM > >  dst_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  dst_level_mgr,
tbox::Pointer< hier::PatchLevel< DIM > >  src_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  src_level_mgr,
const tbox::Pointer< xfer::RefineClasses< DIM > >  refine_classes,
tbox::Pointer< xfer::LocallyActiveDataRefineTransactionFactory< DIM > >  transaction_factory,
xfer::LocallyActiveDataRefinePatchStrategy< DIM > *  patch_strategy,
bool  use_time_interpolation = false 
)

Only data on the intersection of the source and destination patch components will be copied. The source and destination patch levels must reside in the same index space. However, the levels do not have to be in the same AMR patch hierarchy. Generally, this constructor is called by a LocallyActiveDataRefineAlgorithm<DIM> object.

Parameters
dst_levelPointer to destination patch level.
dst_level_mgrPointer to destination level data manager; cannot be null.
src_levelPointer to source patch level.
src_level_mgrPointer to source level data manager; cannot be null.
refine_classesPointer to structure containing patch data and operator information. In general, this is constructed by the calling RefineAlgorithm<DIM> object. This pointer cannot be null.
transaction_factoryPointer to a factory object that will create data transactions; cannot be null.
patch_strategyPointer to a refine patch strategy object that provides user-defined physical boundary filling operations. This pointer may be null, in which case no boundary filling operations will occur.
use_time_interpolationOptional boolean flag indicating whether to use time interpolation when setting data on the destination level. Default is no time interpolation.

When assertion checking is active, an unrecoverable assertion will result if a null pointer is passed as described above.

◆ LocallyActiveDataRefineSchedule() [2/4]

template<int DIM>
SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::LocallyActiveDataRefineSchedule ( tbox::Pointer< hier::PatchLevel< DIM > >  dst_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  dst_level_mgr,
tbox::Pointer< hier::PatchLevel< DIM > >  src_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  src_level_mgr,
int  next_coarser_level,
tbox::Pointer< hier::PatchHierarchy< DIM > >  hierarchy,
const tbox::Pointer< xfer::RefineClasses< DIM > >  refine_classes,
tbox::Pointer< xfer::LocallyActiveDataRefineTransactionFactory< DIM > >  transaction_factory,
xfer::LocallyActiveDataRefinePatchStrategy< DIM > *  patch_strategy,
bool  use_time_interpolation = false 
)

Only data on the intersection of the source and destination patch components, where both data are defined, will be copied. If portions of the destination level remain unfilled, then the algorithm recursively fills those unfilled portions from coarser levels in the AMR hierarchy. The source and destination patch levels must reside in the same index space. However, the levels do not have to be in the same AMR patch hierarchy. In general, this constructor is called by a LocallyActiveDataRefineAlgorithm<DIM> object.

Parameters
dst_levelPointer to destination patch level; cannot be null.
dst_level_mgrPointer to destination level data manager; cannot be null.
src_levelPointer to source patch level; must be in same index space as destination level. This pointer may be null, in which case the destination level will be filled only using data interpolated from coarser levels in the AMR hierarchy.
src_level_mgrPointer to source level data manager; may be null only if src_level pointer is null.
next_coarser_levelInteger number of next coarser level in AMR patch hierarchy relative to the destination level. Note that when the destination level has number zero (i.e., the coarsest level), this value should be < 0.
hierarchyPointer to patch hierarchy. This pointer may be null only if the next_coarser_level number is < 0, indicating that there is no level in the hierarchy coarser than the destination level.
refine_classesPointer to structure containing patch data and operator information. In general, this is constructed by the calling LocallyActiveDataRefineAlgorithm<DIM> object. This pointer cannot be null.
transaction_factoryPointer to a factory object that will create data transactions; cannot be null.
patch_strategyPointer to a refine patch strategy object that provides user-defined physical boundary filling operations. This pinter may be null, in which case no boundary filling or user-defined refine operations will occur.
use_time_interpolationOptional boolean flag indicating whether to use time interpolation when setting data on the destination level. Default is no time interpolation.

When assertion checking is active, an unrecoverable assertion will result if a null pointer is passed as described above.

◆ ~LocallyActiveDataRefineSchedule()

Virtual destructor for the schedule releases all internal storage.

◆ LocallyActiveDataRefineSchedule() [3/4]

◆ LocallyActiveDataRefineSchedule() [4/4]

template<int DIM>
SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::LocallyActiveDataRefineSchedule ( tbox::Pointer< hier::PatchLevel< DIM > >  dst_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  dst_level_mgr,
tbox::Pointer< hier::PatchLevel< DIM > >  src_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  src_level_mgr,
int  next_coarser_level,
tbox::Pointer< hier::PatchHierarchy< DIM > >  hierarchy,
const tbox::Pointer< xfer::RefineClasses< DIM > >  refine_classes,
tbox::Pointer< xfer::LocallyActiveDataRefineTransactionFactory< DIM > >  transaction_factory,
const tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &  la_fill_boxes,
xfer::LocallyActiveDataRefinePatchStrategy< DIM > *  patch_strategy 
)
private

This constructor is used by the refine schedule algorithm during the recursive schedule generation process. Internal flags are to reflect that fact.

Member Function Documentation

◆ setScheduleGenerationMethod()

template<int DIM>
static void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::setScheduleGenerationMethod ( const std::string &  method)
static

Static function to set box intersection algorithm to use during schedule construction for all LocallyActiveDataRefineSchedule<DIM> objects. If this method is not called, the default will be used.

Note that the ability to change the method from the default case is disabled currently.

Parameters
methodstring identifying box intersection method. Valid choices are: "BOX_TREE" (default case), "BOX_GRAPH", and "ORIG_NSQUARED". More details can be found below in the comments for the generateSchedule() routine.

If an invalid string is passed, an unrecoverable error will result.

◆ fillData()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::fillData ( double  fill_time,
bool  do_physical_boundary_fill = true 
) const
Parameters
fill_timeDouble time for filling operation.
do_physical_boundary_fillBoolean flag used to bypass the physical boundary data filling operations on the destination level. The default value is true indicating that boundary data will be filled (assuming a non-null refine patch strategy pointer was passed to the createSchedule() function. Note that even when the value is false, boundary routines may be called on levels coarser than the destination level if such data is needed for proper interpolation.

◆ printClassData()

template<int DIM>
virtual void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::printClassData ( std::ostream &  stream) const
virtual

Print the refine schedule data to the specified data stream.

Parameters
streamOutput data stream.

◆ operator=()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::operator= ( const LocallyActiveDataRefineSchedule< DIM > &  )
private

◆ finishScheduleConstruction()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::finishScheduleConstruction ( tbox::Pointer< hier::PatchLevel< DIM > >  src_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  src_level_mgr,
int  next_coarser_level,
tbox::Pointer< hier::PatchHierarchy< DIM > >  hierarchy,
const tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &  la_fill_boxes,
bool  use_time_interpolation 
)
private

◆ recursiveFill()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::recursiveFill ( double  fill_time,
bool  do_physical_boundary_fill 
) const
private
Parameters
fill_timesolution time when the fill takes place
do_physical_boundary_fillBoolean indicating whether to call user-supplied boundary filling routines regardless of whether this is needed based on ghost cell width of destination data components or stencil width of some interpolation operator.

◆ fillPhysicalBoundaries()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::fillPhysicalBoundaries ( tbox::Pointer< hier::PatchLevel< DIM > >  level,
double  fill_time 
) const
private
Parameters
levellevel to fill physical boundaries
fill_timesolution time when the fill takes place

◆ allocateScratchSpace()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::allocateScratchSpace ( tbox::Pointer< hier::PatchLevel< DIM > >  level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  level_mgr,
double  fill_time,
hier::LocallyActiveDataPatchLevelManager< DIM > &  allocate_mgr 
) const
private

◆ copyScratchToDestination()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::copyScratchToDestination ( tbox::Pointer< hier::PatchLevel< DIM > >  level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  level_mgr 
) const
private

If the scratch and destination spaces are the same, then no copying is performed.

◆ refineScratchData()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::refineScratchData ( ) const
private

◆ generateCommunicationSchedule()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::generateCommunicationSchedule ( tbox::Pointer< tbox::Schedule coarse_priority_schedule,
tbox::Pointer< tbox::Schedule fine_priority_schedule,
tbox::Pointer< hier::PatchLevel< DIM > >  dst_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  dst_level_mgr,
tbox::Pointer< hier::PatchLevel< DIM > >  src_level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  src_level_mgr,
const tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &  la_fill_boxes,
tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &  la_unfilled_boxes,
const bool  use_time_interpolation 
)
private

◆ allocateDefaultFillBoxes()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::allocateDefaultFillBoxes ( tbox::Array< xfer::LocallyActiveDataFillBoxSet< DIM > > &  la_fill_boxes,
tbox::Pointer< hier::PatchLevel< DIM > >  level,
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > >  level_mgr,
const hier::IntVector< DIM > &  fill_ghost_width 
)
private

The default fill boxes cover the interiors plus the ghost cells.

◆ getMaxDestinationGhosts()

template<int DIM>
hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::getMaxDestinationGhosts ( ) const
private

◆ getMaxScratchGhosts()

template<int DIM>
hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::getMaxScratchGhosts ( ) const
private

◆ getMaxStencilGhosts()

template<int DIM>
hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::getMaxStencilGhosts ( ) const
private

◆ initializeDomainAndGhostInformation()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::initializeDomainAndGhostInformation ( bool  recursive_schedule)
private

◆ setRefineItems()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::setRefineItems ( const tbox::Pointer< xfer::RefineClasses< DIM > >  refine_classes)
private

An array of refine data items is stored locally here to facilitate interaction with transations.

◆ clearRefineItems()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::clearRefineItems ( )
private

◆ initialCheckRefineClassItems()

template<int DIM>
void SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::initialCheckRefineClassItems ( ) const
private

Although it is redundant if the refine algorithm created the refine classes, the routine xfer::RefineClasses<DIM>::checkRefineItem() is also called.

If any entries are erroneous an assertion is thrown with a descriptive error message and program halts.

Member Data Documentation

◆ s_constant_zero_intvector

template<int DIM>
const hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::s_constant_zero_intvector
staticprivate

Constant int vectors used to avoid recreating these vectors in loops.

◆ s_constant_one_intvector

template<int DIM>
const hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::s_constant_one_intvector
staticprivate

◆ s_schedule_generation_method

template<int DIM>
std::string SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::s_schedule_generation_method
staticprivate

Selects algorithm used to generate communication schedule.

◆ s_printing

template<int DIM>
bool SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::s_printing
staticprivate

◆ d_refine_classes

template<int DIM>
tbox::Pointer< xfer::RefineClasses<DIM> > SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_refine_classes
private

Structures that store refine data items.

◆ d_number_refine_items

template<int DIM>
int SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_number_refine_items
private

◆ d_refine_items

template<int DIM>
const xfer::RefineClasses<DIM>::Data** SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_refine_items
private

◆ d_dst_level

template<int DIM>
tbox::Pointer< hier::PatchLevel<DIM> > SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_dst_level
private

Cached pointer to the destination patch level and data manager.

◆ d_dst_level_mgr

◆ d_refine_patch_strategy

template<int DIM>
xfer::LocallyActiveDataRefinePatchStrategy<DIM>* SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_refine_patch_strategy
private

Object supporting interface to user-defined boundary filling and spatial data interpolation operations.

◆ d_transaction_factory

Factory object used to create data transactions when schedule is constructed.

◆ d_max_stencil_gcw

template<int DIM>
hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_max_stencil_gcw
private

Cached copy of maximum stencil ghost cell widths.

◆ d_max_scratch_gcw

template<int DIM>
hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_max_scratch_gcw
private

Cached copy of maximum scratch ghost cell widths.

◆ d_boundary_fill_ghost_width

template<int DIM>
hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_boundary_fill_ghost_width
private

Width of ghost cell region to fill passed to user supplied physical boundary condition routine.

◆ d_force_boundary_fill

template<int DIM>
bool SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_force_boundary_fill
private

Flag indicating whether user's physical boundary data filling routine should be forced at last step of level filling process.

This flag is true when doing recursive filling, because the ghost data may be needed by finer levels (regardless of whether the user requested ghost boundary filling). This variable is set in the constructors, which knows whether the object is being constructed for recursive filling.

For efficiency, we only force boundary filling when, during object construction, we determine that the ghost cells do exist.

◆ d_domain_is_one_box

template<int DIM>
bool SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_domain_is_one_box
private

Boolean flag indicating whether physical domain is comprised as a single box region.

◆ d_domain_box

template<int DIM>
hier::Box<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_domain_box
private

Cached box describing physical domain when that domain is comprised as a single box region

◆ d_num_periodic_directions

template<int DIM>
int SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_num_periodic_directions
private

Number of non-zero entries in periodic shift vector.

◆ d_periodic_shift

template<int DIM>
hier::IntVector<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_periodic_shift
private

Cached copy of the periodic shift vector.

◆ d_coarse_priority_level_schedule

template<int DIM>
tbox::Pointer<tbox::Schedule> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_coarse_priority_level_schedule
private

Level-to-level communication schedule between the source and destination.

d_coarse_priority_level_schedule handles the situation where coarse data should take precedence at coarse-fine boundaries for data types holding values at patch boundaries but which are considered interior values. d_fine_priority_level_schedule handles the situation where fine data should take precedence.

◆ d_fine_priority_level_schedule

template<int DIM>
tbox::Pointer<tbox::Schedule> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_fine_priority_level_schedule
private

Level-to-level communication schedule between the source and destination.

d_coarse_priority_level_schedule handles the situation where coarse data should take precedence at coarse-fine boundaries for data types holding values at patch boundaries but which are considered interior values. d_fine_priority_level_schedule handles the situation where fine data should take precedence.

◆ d_coarse_schedule

template<int DIM>
tbox::Pointer< xfer::LocallyActiveDataRefineSchedule<DIM> > SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_coarse_schedule
private

Schedule to recursively fill data from the next coarser hierarchy level.

This schedule describes how to fill the coarser level so that the coarse data can be interpolated into the fine fill boxes on the destination. If no coarser data is needed to fill the fill boxes on the destination level, then this pointer is NULL.

◆ d_coarse_level

template<int DIM>
tbox::Pointer< hier::PatchLevel<DIM> > SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_coarse_level
private

Pointer to temporary coarser level necessary to interpolate data into the fill boxes of the destination.

This coarser level is filled by the refine schedule above. If no coarser level data is needed, then this pointer will be NULL. Note that the coarser level may not have the same mapping as the destination level; see the mapping array below.

◆ d_coarse_level_mgr

Coarse level active data manager for treating locally-active data on temporary coarse level. If no coarser level data is needed, then the manager pointer will be NULL.

◆ d_coarse_to_fine_mapping

template<int DIM>
tbox::Array<int> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_coarse_to_fine_mapping
private

The mapping between the patches on the coarser level and the patches on the fine level.

For each destination patch on the fine level, there may be zero or more coarse patches, depending on the fill boxes for the destination patch and also any extending to the physical boundaries required to maintain proper box relationships.

◆ d_la_fine_fill_boxes

template<int DIM>
tbox::Array< xfer::LocallyActiveDataFillBoxSet<DIM> > SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_la_fine_fill_boxes
private

An array of fill boxes used when refining between coarse and fine patches.

This array will have one entry for each local patch on the coarse patch level.

◆ d_overlaps

template<int DIM>
tbox::Array< tbox::Pointer< hier::BoxOverlap<DIM> > > SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_overlaps
private

Arrays for overlaps and source mask boxes used in construction of transactions.

They are declared in the class to make memory management efficient since that function is called many times.

The size of these arrays is controlled by d_max_fill_boxes, which is is set by taking the max over the number of fill boxes for each destination patch to be filled.

◆ d_max_fill_boxes

template<int DIM>
int SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_max_fill_boxes
private

◆ d_src_masks

template<int DIM>
hier::BoxArray<DIM> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::d_src_masks
private

◆ t_fill_data

template<int DIM>
tbox::Pointer<tbox::Timer> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::t_fill_data
private

Timer objects for performance measurement.

◆ t_gen_comm_sched

template<int DIM>
tbox::Pointer<tbox::Timer> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::t_gen_comm_sched
private

◆ t_finish_sched_const

template<int DIM>
tbox::Pointer<tbox::Timer> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::t_finish_sched_const
private

◆ t_gen_comm_sched_unfilled

template<int DIM>
tbox::Pointer<tbox::Timer> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::t_gen_comm_sched_unfilled
private

◆ t_gen_comm_sched_trans

template<int DIM>
tbox::Pointer<tbox::Timer> SAMRAI::xfer::LocallyActiveDataRefineSchedule< DIM >::t_gen_comm_sched_trans
private

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