SpECTRE  v2021.11.01
domain::creators::BinaryCompactObject Class Reference

A general domain for two compact objects. More...

#include <BinaryCompactObject.hpp>

Classes

struct  AsymptoticVelocityOuterBoundary
 The asymptotic radial velocity of the outer boundary. More...
 
struct  DecayTimescaleOuterBoundaryVelocity
 The timescale for how fast the outer boundary velocity approaches its asymptotic value. More...
 
struct  EnvelopingCube
 
struct  Excision
 Options for an excision region in the domain. More...
 
struct  ExpansionFunctionOfTimeName
 The name of the function of time to be added to the DataBox for the expansion map. More...
 
struct  ExpansionMap
 
struct  ExpansionMapOuterBoundary
 The outer boundary or pivot point of the domain::CoordinateMaps::TimeDependent::CubicScale map. More...
 
struct  FrustumSphericity
 
struct  InitialAngularVelocity
 The angular velocity of the rotation. More...
 
struct  InitialExpansion
 The initial value of the expansion factor. More...
 
struct  InitialExpansionVelocity
 The velocity of the expansion factor. More...
 
struct  InitialExpirationDeltaT
 The initial time interval for updates of the functions of time. More...
 
struct  InitialGridPoints
 
struct  InitialRefinement
 
struct  InitialRotationAngle
 The initial value of the rotation angle. More...
 
struct  InitialSizeMapAccelerations
 Initial accelerations for functions of time for size maps for objects A,B. More...
 
struct  InitialSizeMapValues
 Initial values for functions of time for size maps for objects A,B. More...
 
struct  InitialSizeMapVelocities
 Initial velocities for functions of time for size maps for objects A,B. More...
 
struct  InitialTime
 The initial time of the functions of time. More...
 
struct  Object
 Options for one of the two objects in the binary domain. More...
 
struct  ObjectA
 
struct  ObjectB
 
struct  OuterBoundaryCondition
 
struct  OuterRadius
 
struct  OuterShell
 
struct  RadialDistributionOuterShell
 
struct  RadiusEnvelopingCube
 
struct  RadiusEnvelopingSphere
 
struct  RotationAboutZAxisFunctionOfTimeName
 The name of the function of time to be added to the added to the DataBox for the rotation-about-the-z-axis map. More...
 
struct  RotationAboutZAxisMap
 
struct  SizeMap
 
struct  SizeMapFunctionOfTimeNames
 The names of the functions of times to be added to the added to the DataBox for the size map. More...
 
struct  TimeDependentMaps
 
struct  UseProjectiveMap
 

Public Types

using maps_list = tmpl::list< domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Affine, CoordinateMaps::Affine, CoordinateMaps::Affine > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Equiangular, CoordinateMaps::Equiangular, CoordinateMaps::Equiangular > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Affine, CoordinateMaps::Affine, CoordinateMaps::Affine >, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Affine, CoordinateMaps::Identity< 2 > > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::DiscreteRotation< 3 >, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Affine, CoordinateMaps::Affine, CoordinateMaps::Affine > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Equiangular, CoordinateMaps::Equiangular, CoordinateMaps::Equiangular > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Equiangular, CoordinateMaps::Equiangular, CoordinateMaps::Equiangular >, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Affine, CoordinateMaps::Identity< 2 > > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::Frustum >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::Wedge< 3 > >, domain::CoordinateMap< Frame::Grid, Frame::Inertial, domain::CoordinateMaps::TimeDependent::CubicScale< 3 >, domain::CoordinateMaps::TimeDependent::ProductOf2Maps< domain::CoordinateMaps::TimeDependent::Rotation< 2 >, domain::CoordinateMaps::Identity< 1 > > >, domain::CoordinateMap< Frame::Grid, Frame::Inertial, domain::CoordinateMaps::TimeDependent::SphericalCompression< false >, domain::CoordinateMaps::TimeDependent::CubicScale< 3 >, domain::CoordinateMaps::TimeDependent::ProductOf2Maps< domain::CoordinateMaps::TimeDependent::Rotation< 2 >, domain::CoordinateMaps::Identity< 1 > > > >
 
template<typename Metavariables >
using time_independent_options = tmpl::append< tmpl::list< ObjectA, ObjectB, RadiusEnvelopingCube, OuterRadius, InitialRefinement, InitialGridPoints, UseProjectiveMap, FrustumSphericity, RadiusEnvelopingSphere, RadialDistributionOuterShell >, 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<> > >
 
using time_dependent_options = tmpl::list< InitialTime, InitialExpirationDeltaT, ExpansionMapOuterBoundary, InitialExpansion, InitialExpansionVelocity, ExpansionFunctionOfTimeName, AsymptoticVelocityOuterBoundary, DecayTimescaleOuterBoundaryVelocity, InitialRotationAngle, InitialAngularVelocity, RotationAboutZAxisFunctionOfTimeName, InitialSizeMapValues, InitialSizeMapVelocities, InitialSizeMapAccelerations, SizeMapFunctionOfTimeNames >
 
template<typename Metavariables >
using options = tmpl::conditional_t< BinaryCompactObject_detail::enable_time_dependent_maps_v< Metavariables >, tmpl::append< time_dependent_options, time_independent_options< Metavariables > >, time_independent_options< Metavariables > >
 

Public Member Functions

 BinaryCompactObject (Object object_A, Object object_B, double radius_enveloping_cube, double outer_radius_domain, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_number_of_grid_points, bool use_projective_map=true, double frustum_sphericity=0.0, const std::optional< double > &radius_enveloping_sphere=std::nullopt, CoordinateMaps::Distribution radial_distribution_outer_shell=CoordinateMaps::Distribution::Linear, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > outer_boundary_condition=nullptr, const Options::Context &context={})
 
 BinaryCompactObject (double initial_time, std::optional< double > initial_expiration_delta_t, double expansion_map_outer_boundary, double initial_expansion, double initial_expansion_velocity, std::string expansion_function_of_time_name, double asymptotic_velocity_outer_boundary, double decay_timescale_outer_boundary_velocity, double initial_rotation_angle, double initial_angular_velocity, std::string rotation_about_z_axis_function_of_time_name, std::array< double, 2 > initial_size_map_values, std::array< double, 2 > initial_size_map_velocities, std::array< double, 2 > initial_size_map_accelerations, std::array< std::string, 2 > size_map_function_of_time_names, Object object_A, Object object_B, double radius_enveloping_cube, double outer_radius_domain, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_number_of_grid_points, bool use_projective_map=true, double frustum_sphericity=0.0, const std::optional< double > &radius_enveloping_sphere=std::nullopt, CoordinateMaps::Distribution radial_distribution_outer_shell=CoordinateMaps::Distribution::Linear, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > outer_boundary_condition=nullptr, const Options::Context &context={})
 
 BinaryCompactObject (const BinaryCompactObject &)=delete
 
 BinaryCompactObject (BinaryCompactObject &&)=default
 
BinaryCompactObjectoperator= (const BinaryCompactObject &)=delete
 
BinaryCompactObjectoperator= (BinaryCompactObject &&)=default
 
Domain< 3 > create_domain () const override
 
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::stringblock_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, 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::vector< std::stringblock_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, std::unique_ptr< domain::FunctionsOfTime::FunctionOfTime > >
 Retrieve the functions of time used for moving meshes. More...
 

Static Public Attributes

static constexpr Options::String help
 

Detailed Description

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, 5, or 6 nested layers of blocks; these layers are, working from the interior toward the exterior:

  • 0: (optionally) 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.
  • 1: The blocks that resolve each individual compact object. This layer has a spherical outer boundary - if the corresponding layer-0 block exists, then the layer is a cube-to-sphere transition; if the layer-0 block is excised, then the layer is a spherical shell.
  • 2: The blocks that surround each object with a cube. Around each compact object, this layer transitions from a sphere to a cube.
  • 3: The blocks that surround each cube with a half-cube. At this layer, the two compact objects are enclosed in a single cube-shaped grid.
  • 4: The 10 blocks that form the first outer shell. This layer transitions back to spherical. The gridpoints are distributed linearly with respect to radius.
  • 5: The 10 blocks that form a second outer shell. 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.

In the code and options below, ObjectA and ObjectB refer to the two compact objects, and by extension, also refer to the layers that immediately surround each compact object. Note that ObjectA is located to the left of the origin (along the negative x-axis) and ObjectB is located to the right of the origin. enveloping cube refers to the outer surface of Layer 3. outer sphere is the radius of the spherical outer boundary, which is the outer boundary of Layer 5. The enveloping cube and outer sphere are both centered at the origin. cutting plane refers to the plane along which the domain divides into two hemispheres. In the final coordinates, the cutting plane always intersects the x-axis at the origin.

Note
The x-coordinate locations of the ObjectA and ObjectB should be chosen such that the center of mass is located at x=0.
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 InitialTime and InitialExpirationDeltaT, which specify the initial time and the initial updating time interval, respectively, for the FunctionsOfTime controlling the map. The time-dependent map itself consists of a composition of a CubicScale expansion map and a Rotation map about the z axis everywhere except possibly in layer 1; in that case, if ObjectA or ObjectB is excised, then the time-dependent map in the corresponding blocks in layer 1 is a composition of a SphericalCompression size map, a CubicScale expansion map, and a Rotation map about the z axis.

Member Function Documentation

◆ block_groups()

std::unordered_map< std::string, std::unordered_set< std::string > > domain::creators::BinaryCompactObject::block_groups ( ) const
inlineoverridevirtual

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.

Reimplemented from DomainCreator< 3 >.

◆ block_names()

std::vector< std::string > domain::creators::BinaryCompactObject::block_names ( ) const
inlineoverridevirtual

A human-readable name for every block, or empty if the domain creator doesn't support block names (yet).

Reimplemented from DomainCreator< 3 >.

◆ create_domain()

Domain< 3 > domain::creators::BinaryCompactObject::create_domain ( ) const
overridevirtual

Implements DomainCreator< 3 >.

◆ functions_of_time()

auto domain::creators::BinaryCompactObject::functions_of_time ( ) const -> std::unordered_map< std::string, std::unique_ptr<domain::FunctionsOfTime::FunctionOfTime>>
overridevirtual

Retrieve the functions of time used for moving meshes.

Reimplemented from DomainCreator< 3 >.

◆ initial_extents()

std::vector< std::array< size_t, 3 > > domain::creators::BinaryCompactObject::initial_extents ( ) const
inlineoverridevirtual

Obtain the initial grid extents of the Elements in each block.

Implements DomainCreator< 3 >.

◆ initial_refinement_levels()

std::vector< std::array< size_t, 3 > > domain::creators::BinaryCompactObject::initial_refinement_levels ( ) const
inlineoverridevirtual

Obtain the initial refinement levels of the blocks.

Implements DomainCreator< 3 >.


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