|
using | maps_list = tmpl::flatten< tmpl::list< domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, Affine3D >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, Equiangular3D >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, Affine3D, Translation >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::DiscreteRotation< 3 >, Affine3D >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, Equiangular3D >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, Equiangular3D, Translation >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::Frustum >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::Wedge< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::Wedge< 3 >, Translation >, bco::TimeDependentMapOptions::maps_list > > |
|
template<typename Metavariables > |
using | time_independent_options = tmpl::append< tmpl::list< ObjectA, ObjectB, EnvelopeRadius, OuterRadius, InitialRefinement, InitialGridPoints, UseEquiangularMap, RadialDistributionEnvelope, RadialDistributionOuterShell, OpeningAngle >, tmpl::conditional_t< domain::BoundaryConditions::has_boundary_conditions_base_v< typename Metavariables::system >, tmpl::list< OuterBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > > >, tmpl::list<> > > |
|
template<typename Metavariables > |
using | options = tmpl::conditional_t< domain::creators::bco::enable_time_dependent_maps_v< Metavariables >, tmpl::push_front< time_independent_options< Metavariables >, TimeDependentMaps >, time_independent_options< Metavariables > > |
|
|
| BinaryCompactObject (typename ObjectA::type object_A, typename ObjectB::type object_B, double envelope_radius, double outer_radius, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_number_of_grid_points, bool use_equiangular_map=true, CoordinateMaps::Distribution radial_distribution_envelope=CoordinateMaps::Distribution::Projective, CoordinateMaps::Distribution radial_distribution_outer_shell=CoordinateMaps::Distribution::Linear, double opening_angle_in_degrees=90.0, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > outer_boundary_condition=nullptr, const Options::Context &context={}) |
|
| BinaryCompactObject (std::optional< bco::TimeDependentMapOptions > time_dependent_options, typename ObjectA::type object_A, typename ObjectB::type object_B, double envelope_radius, double outer_radius, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_number_of_grid_points, bool use_equiangular_map=true, CoordinateMaps::Distribution radial_distribution_envelope=CoordinateMaps::Distribution::Projective, CoordinateMaps::Distribution radial_distribution_outer_shell=CoordinateMaps::Distribution::Linear, double opening_angle_in_degrees=90.0, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > outer_boundary_condition=nullptr, const Options::Context &context={}) |
|
| BinaryCompactObject (const BinaryCompactObject &)=delete |
|
| BinaryCompactObject (BinaryCompactObject &&)=default |
|
BinaryCompactObject & | operator= (const BinaryCompactObject &)=delete |
|
BinaryCompactObject & | operator= (BinaryCompactObject &&)=default |
|
Domain< 3 > | create_domain () const override |
|
std::unordered_map< std::string, tnsr::I< double, 3, Frame::Grid > > | grid_anchors () const override |
| A set of named coordinates in the grid frame, like the center of the domain or the positions of specific objects in a domain. More...
|
|
std::vector< DirectionMap< 3, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > > > | external_boundary_conditions () const override |
| The set of external boundary condition for every block in the domain. More...
|
|
std::vector< std::array< size_t, 3 > > | initial_extents () const override |
| Obtain the initial grid extents of the Elements in each block. More...
|
|
std::vector< std::array< size_t, 3 > > | initial_refinement_levels () const override |
| Obtain the initial refinement levels of the blocks. More...
|
|
std::vector< std::string > | block_names () const override |
| A human-readable name for every block, or empty if the domain creator doesn't support block names (yet). More...
|
|
std::unordered_map< std::string, std::unordered_set< std::string > > | block_groups () const override |
| Labels to refer to groups of blocks. The groups can overlap, and they don't have to cover all blocks in the domain. The groups can be used to refer to multiple blocks at once when specifying input-file options. More...
|
|
auto | functions_of_time (const std::unordered_map< std::string, double > &initial_expiration_times={}) const -> std::unordered_map< std::string, std::unique_ptr< domain::FunctionsOfTime::FunctionOfTime > > override |
| Retrieve the functions of time used for moving meshes. More...
|
|
Public Member Functions inherited from DomainCreator< 3 > |
| DomainCreator (const DomainCreator< VolumeDim > &)=delete |
|
| DomainCreator (DomainCreator< VolumeDim > &&)=default |
|
DomainCreator< VolumeDim > & | operator= (const DomainCreator< VolumeDim > &)=delete |
|
DomainCreator< VolumeDim > & | operator= (DomainCreator< VolumeDim > &&)=default |
|
virtual Domain< VolumeDim > | create_domain () const=0 |
|
virtual std::unordered_map< std::string, tnsr::I< double, VolumeDim, Frame::Grid > > | grid_anchors () const |
| A set of named coordinates in the grid frame, like the center of the domain or the positions of specific objects in a domain. More...
|
|
virtual std::vector< DirectionMap< VolumeDim, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > > > | external_boundary_conditions () const=0 |
| The set of external boundary condition for every block in the domain. More...
|
|
virtual std::vector< std::string > | block_names () const |
| A human-readable name for every block, or empty if the domain creator doesn't support block names (yet). More...
|
|
virtual std::unordered_map< std::string, std::unordered_set< std::string > > | block_groups () const |
| Labels to refer to groups of blocks. The groups can overlap, and they don't have to cover all blocks in the domain. The groups can be used to refer to multiple blocks at once when specifying input-file options. More...
|
|
virtual std::vector< std::array< size_t, VolumeDim > > | initial_extents () const=0 |
| Obtain the initial grid extents of the Elements in each block. More...
|
|
virtual std::vector< std::array< size_t, VolumeDim > > | initial_refinement_levels () const=0 |
| Obtain the initial refinement levels of the blocks. More...
|
|
virtual auto | functions_of_time (const std::unordered_map< std::string, double > &initial_expiration_times={}) const -> std::unordered_map< std::string, std::unique_ptr< domain::FunctionsOfTime::FunctionOfTime > > |
| Retrieve the functions of time used for moving meshes. More...
|
|
A general domain for two compact objects.
A BHNS domain.
Creates a 3D Domain that represents a binary compact object solution. The Domain consists of 4 or 5 nested layers of blocks; these layers are, working from the interior toward the exterior:
- Object A/B interior: (optional) The block at the center of each compact object, if not excised. If present, this block is a cube. If excised, the hole left by its absence is spherical.
- Object A/B shell: The 6 blocks that resolve each individual compact object. This layer has a spherical outer boundary - if the corresponding interior block exists, then the layer is a cube-to-sphere transition; if the interior block is excised, then the layer is a spherical shell.
- Object A/B cube: The 6 blocks that surround each object with a cube. Around each compact object, this layer transitions from a sphere to a cube.
- Envelope: The 10 blocks that transition from the two inner cubes to a sphere centered at the origin.
- Outer shell: The 10 blocks that form an outer shell centered at the origin, consisting of 2 endcap Wedges on the +x and -x axes, and 8 half Wedges along the yz plane. This layer is spherical, so a logarithmic map can optionally be used in this layer. This allows the domain to extend to large radial distances from the compact objects. This layer can be h-refined radially, creating a layer of multiple concentric spherical shells.
- Notes:
- Object A is located to the right of the origin (along the positive x-axis) and Object B is located to the left of the origin.
- This domain offers some grid anchors. See
domain::creators::bco::create_grid_anchors
for which ones are offered.
- "Cutting plane" refers to the plane along which the domain divides into two hemispheres. The cutting plane always intersects the x-axis at the origin.
- The x-coordinate locations of the two objects should be chosen such that the center of mass is located at x=0.
- Alternatively, one can replace the inner shell and cube blocks of each object with a single cartesian cube. This is less efficient, but allows testing of methods only coded on cartesian grids.
- Time dependence:
- When using this domain, the metavariables struct can contain a struct named
domain
that conforms to domain::protocols::Metavariables
. If domain::enable_time_dependent_maps
is either set to false
or not specified in the metavariables, then this domain will be time-independent. If domain::enable_time_dependent_maps
is set to true
, then this domain also includes a time-dependent map, along with additional options (and a corresponding constructor) for initializing the time-dependent map. These options include the InitialTime
which specifies the initial time for the FunctionsOfTime controlling the map. The following time-dependent maps are applied:
- A
CubicScale
expansion and a Rotation
applied to all blocks from the Grid to the Inertial frame. However, if there is a size map in the block (defined below), then the expansion and rotation maps go from the Distorted to the Inertial frame.
- If an object is excised, then the corresponding shell has a
Shape
map. The shape map goes from the Grid to the Distorted frame.
All time dependent maps are optional to specify. To include a map, specify its options. Otherwise specify None
for that map. You can also turn off time dependent maps all together by specifying None
for the TimeDependentMaps
option. See domain::creators::bco::TimeDependentMapOptions
.