SpECTRE  v2024.04.12
amr Namespace Reference

Items for adaptive mesh refinement. More...

Namespaces

namespace  Actions
 Actions for adaptive mesh refinement
 
namespace  Criteria
 Criteria for deciding how a mesh should be adapted.
 
namespace  Initialization
 Mutators used for initialization of adaptive mesh refinement
 
namespace  OptionTags
 Option tags for AMR polocies.
 
namespace  projectors
 AMR projectors.
 
namespace  protocols
 AMR protocols.
 
namespace  Tags
 Tags for adaptive mesh refinement
 

Classes

struct  Component
 A singleton parallel component to manage adaptive mesh refinement. More...
 
class  Criterion
 Base class for something that determines how an adaptive mesh should be changed. More...
 
struct  Info
 
class  Limits
 The limits on refinement level and resolution for AMR. More...
 
class  Policies
 A set of runtime policies controlling adaptive mesh refinement. More...
 

Enumerations

enum class  Flag {
  Flag::Undefined , Flag::Join , Flag::DecreaseResolution , Flag::DoNothing ,
  Flag::IncreaseResolution , Flag::Split
}
 Flags that represent decisions about mesh refinement. More...
 
enum class  Isotropy { Isotropy::Anisotropic , Isotropy::Isotropic }
 Isotropy of adaptive mesh refinement. More...
 

Functions

std::ostreamoperator<< (std::ostream &os, const Flag &flag)
 Output operator for a Flag.
 
template<size_t VolumeDim>
std::array< size_t, VolumeDim > desired_refinement_levels (const ElementId< VolumeDim > &id, const std::array< Flag, VolumeDim > &flags)
 Computes the desired refinement level of the Element with ElementId id given the desired amr::Flags flags
 
template<size_t VolumeDim>
std::array< size_t, VolumeDim > desired_refinement_levels_of_neighbor (const ElementId< VolumeDim > &neighbor_id, const std::array< Flag, VolumeDim > &neighbor_flags, const OrientationMap< VolumeDim > &orientation)
 Computes the desired refinement level of a neighboring Element with ElementId neighbor_id given its desired amr::Flags neighbor_flags taking into account the OrientationMap orientation of the neighbor. More...
 
template<size_t VolumeDim>
boost::rational< size_t > fraction_of_block_volume (const ElementId< VolumeDim > &element_id)
 Fraction of the logical volume of a block covered by an element. More...
 
template<size_t VolumeDim>
bool has_potential_sibling (const ElementId< VolumeDim > &element_id, const Direction< VolumeDim > &direction)
 Whether or not the Element with element_id can have a sibling in the given direction
 
template<size_t VolumeDim>
ElementId< VolumeDim > id_of_parent (const ElementId< VolumeDim > &element_id, const std::array< Flag, VolumeDim > &flags)
 Returns the ElementId of the parent of the Element with element_id using the refinement flags associated with element_id More...
 
template<size_t VolumeDim>
std::vector< ElementId< VolumeDim > > ids_of_children (const ElementId< VolumeDim > &element_id, const std::array< Flag, VolumeDim > &flags)
 Returns the ElementIds of the children of the Element with element_id using the refinement flags associated with element_id More...
 
template<size_t VolumeDim>
std::deque< ElementId< VolumeDim > > ids_of_joining_neighbors (const Element< VolumeDim > &element, const std::array< Flag, VolumeDim > &flags)
 The ElementIds of the neighbors of element that will join with it given refinement flags More...
 
template<size_t VolumeDim>
bool is_child_that_creates_parent (const ElementId< VolumeDim > &element_id, const std::array< Flag, VolumeDim > &flags)
 Whether or not the Element is the child that should create the parent Element when joining elements. More...
 
template<size_t VolumeDim>
bool prevent_element_from_joining_while_splitting (gsl::not_null< std::array< Flag, VolumeDim > * > flags)
 Prevent an Element from splitting in one dimension, while joining in another. More...
 
template<size_t VolumeDim>
std::ostreamoperator<< (std::ostream &os, const Info< VolumeDim > &info)
 Output operator for an Info.
 
template<size_t VolumeDim>
bool operator== (const Info< VolumeDim > &lhs, const Info< VolumeDim > &rhs)
 
template<size_t VolumeDim>
bool operator!= (const Info< VolumeDim > &lhs, const Info< VolumeDim > &rhs)
 
template<size_t VolumeDim>
std::pair< DirectionMap< VolumeDim, Neighbors< VolumeDim > >, DirectionalIdMap< VolumeDim, Mesh< VolumeDim > > > neighbors_of_child (const Element< VolumeDim > &parent, const Info< VolumeDim > &parent_info, const std::unordered_map< ElementId< VolumeDim >, Info< VolumeDim > > &parent_neighbor_info, const ElementId< VolumeDim > &child_id)
 returns the neighbors and their Meshes of the Element with ElementId child_id, whose parent Element is parent which has Info parent_info and neighbor Info parent_neighbor_info
 
template<size_t VolumeDim>
std::pair< DirectionMap< VolumeDim, Neighbors< VolumeDim > >, DirectionalIdMap< VolumeDim, Mesh< VolumeDim > > > neighbors_of_parent (const ElementId< VolumeDim > &parent_id, const std::vector< std::tuple< const Element< VolumeDim > &, const std::unordered_map< ElementId< VolumeDim >, Info< VolumeDim > > & > > &children_elements_and_neighbor_info)
 returns the neighbors and their Meshes of the Element with ElementId parent_id, that is created from its children_elements_and_neighbor_info
 
template<size_t VolumeDim>
std::unordered_map< ElementId< VolumeDim >, Mesh< VolumeDim > > new_neighbor_ids (const ElementId< VolumeDim > &my_id, const Direction< VolumeDim > &direction, const Neighbors< VolumeDim > &previous_neighbors_in_direction, const std::unordered_map< ElementId< VolumeDim >, Info< VolumeDim > > &previous_neighbors_amr_info)
 returns the ElementId and Mesh of the new neighbors in the given direction of the Element whose ElementId is my_id given the previous_neighbors_in_direction and their amr::Info. More...
 
template<size_t VolumeDim>
bool update_amr_decision (gsl::not_null< std::array< Flag, VolumeDim > * > my_current_amr_flags, const Element< VolumeDim > &element, const ElementId< VolumeDim > &neighbor_id, const std::array< Flag, VolumeDim > &neighbor_amr_flags)
 Updates the AMR decisions my_current_amr_flags of the Element element based on the AMR decisions neighbor_amr_flags of a neighbor Element with ElementId neighbor_id. More...
 
template<typename Metavariables , typename Component >
void register_callbacks ()
 
template<size_t Dim>
void enforce_policies (gsl::not_null< std::array< Flag, Dim > * > amr_decision, const amr::Policies &amr_policies, const ElementId< Dim > &element_id, const Mesh< Dim > &mesh)
 Updates amr_decision so that it satisfies amr_policies. More...
 
std::ostreamoperator<< (std::ostream &os, const Isotropy &isotropy)
 Output operator for isotropy.
 
bool operator== (const Limits &lhs, const Limits &rhs)
 
bool operator!= (const Limits &lhs, const Limits &rhs)
 
bool operator== (const Policies &lhs, const Policies &rhs)
 
bool operator!= (const Policies &lhs, const Policies &rhs)
 

Detailed Description

Items for adaptive mesh refinement.

Function Documentation

◆ enforce_policies()

template<size_t Dim>
void amr::enforce_policies ( gsl::not_null< std::array< Flag, Dim > * >  amr_decision,
const amr::Policies amr_policies,
const ElementId< Dim > &  element_id,
const Mesh< Dim > &  mesh 
)

Updates amr_decision so that it satisfies amr_policies.

Details

  • If amr_policies.isotropy() is Isotropic, the Flags are changed to all be the same as the maximum priority flag
  • If any Flag would cause the refinement levels or resolution to violate their bounds, the Flag is changed to DoNothing. Note that the minimum resolution is Basis and Quadrature dependent, so may be higher than the given amr_policies.refinement_limits().minimum_resolution()