SpECTRE  v2023.01.13
domain::creators::CylindricalBinaryCompactObject Class Reference

A general domain for two compact objects based on cylinders. More...

#include <CylindricalBinaryCompactObject.hpp>

Classes

struct  BoundaryConditions
 
struct  CenterA
 
struct  CenterB
 
struct  ExpansionMap
 
struct  ExpansionMapOptions
 Options for the expansion map. The outer boundary radius of the map is always set to the outer boundary of the Domain, so there is no option here to set the outer boundary radius. More...
 
struct  IncludeInnerSphereA
 
struct  IncludeInnerSphereB
 
struct  IncludeOuterSphere
 
struct  InitialAngularVelocity
 
struct  InitialGridPoints
 
struct  InitialRefinement
 
struct  InitialTime
 The initial time of the functions of time. More...
 
struct  InnerBoundaryCondition
 
struct  OuterBoundaryCondition
 
struct  OuterRadius
 
struct  RadiusA
 
struct  RadiusB
 
struct  RotationMap
 
struct  TimeDependentMaps
 

Public Types

using maps_list = tmpl::list< domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Interval, CoordinateMaps::Interval, CoordinateMaps::Interval >, CoordinateMaps::UniformCylindricalEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Interval >, CoordinateMaps::UniformCylindricalEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Interval, CoordinateMaps::Interval, CoordinateMaps::Interval >, CoordinateMaps::UniformCylindricalFlatEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Interval >, CoordinateMaps::UniformCylindricalFlatEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Interval >, CoordinateMaps::UniformCylindricalSide, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::Grid, Frame::Inertial, domain::CoordinateMaps::TimeDependent::CubicScale< 3 >, domain::CoordinateMaps::TimeDependent::Rotation< 3 > > >
 
using time_independent_options = tmpl::list< CenterA, CenterB, RadiusA, RadiusB, IncludeInnerSphereA, IncludeInnerSphereB, IncludeOuterSphere, OuterRadius, InitialRefinement, InitialGridPoints >
 
using time_dependent_options = tmpl::list< InitialTime, ExpansionMap, InitialAngularVelocity >
 
template<typename Metavariables >
using basic_options = tmpl::conditional_t< domain::creators::detail::enable_time_dependent_maps_v< Metavariables >, tmpl::append< time_dependent_options, time_independent_options >, time_independent_options >
 
template<typename Metavariables >
using options = tmpl::conditional_t< domain::BoundaryConditions::has_boundary_conditions_base_v< typename Metavariables::system >, tmpl::push_back< basic_options< Metavariables >, InnerBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > >, OuterBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > > >, basic_options< Metavariables > >
 

Public Member Functions

 CylindricalBinaryCompactObject (typename CenterA::type center_A, typename CenterB::type center_B, typename RadiusA::type radius_A, typename RadiusB::type radius_B, typename IncludeInnerSphereA::type include_inner_sphere_A, typename IncludeInnerSphereB::type include_inner_sphere_B, typename IncludeOuterSphere::type include_outer_sphere, typename OuterRadius::type outer_radius, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_grid_points, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > inner_boundary_condition=nullptr, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > outer_boundary_condition=nullptr, const Options::Context &context={})
 
 CylindricalBinaryCompactObject (double initial_time, ExpansionMapOptions expansion_map_options, std::array< double, 3 > initial_angular_velocity, typename CenterA::type center_A, typename CenterB::type center_B, typename RadiusA::type radius_A, typename RadiusB::type radius_B, typename IncludeInnerSphereA::type include_inner_sphere_A, typename IncludeInnerSphereB::type include_inner_sphere_B, typename IncludeOuterSphere::type include_outer_sphere, typename OuterRadius::type outer_radius, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_grid_points, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > inner_boundary_condition=nullptr, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > outer_boundary_condition=nullptr, const Options::Context &context={})
 
 CylindricalBinaryCompactObject (const CylindricalBinaryCompactObject &)=delete
 
 CylindricalBinaryCompactObject (CylindricalBinaryCompactObject &&)=default
 
CylindricalBinaryCompactObjectoperator= (const CylindricalBinaryCompactObject &)=delete
 
CylindricalBinaryCompactObjectoperator= (CylindricalBinaryCompactObject &&)=default
 
Domain< 3 > create_domain () const override
 
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...
 
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...
 
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...
 
- 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< 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::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, 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...
 

Static Public Attributes

static constexpr Options::String help
 

Detailed Description

A general domain for two compact objects based on cylinders.

Creates a 3D Domain that represents a binary compact object solution. This domain is described briefly in the Appendix of [26], and is illustrated in Figure 20 of that paper.

In the code and options below, ObjectA and ObjectB refer to the two compact objects. In the grid frame, ObjectA is located to the right of (i.e. a more positive value of the x-coordinate than) ObjectB. The inner edge of the Blocks surrounding each of ObjectA and ObjectB is spherical in grid coordinates; the user must specify the center and radius of this surface for both ObjectA and ObjectB, and the user must specify the outer boundary radius. The outer boundary is a sphere centered at the origin.

Note that Figure 20 of [26] illustrates additional spherical shells inside the "EA" and "EB" blocks, and the caption of Figure 20 indicates that there are additional spherical shells outside the "CA" and "CB" blocks; CylindricalBinaryCompactObject has these extra shells inside "EA" only if the option IncludeInnerSphereA is true, it has the extra shells inside "EB" only if the option IncludeInnerSphereB is true, and it has the extra shells outside "CA" and "CB" only if IncludeOuterSphere is true. If the shells are absent, then the "EA" and "EB" blocks extend to the excision boundaries and the "CA" and "CB" blocks extend to the outer boundary.

The Blocks are named as follows:

  • Each of CAFilledCylinder, EAFilledCylinder, EBFilledCylinder, MAFilledCylinder, MBFilledCylinder, and CBFilledCylinder consists of 5 blocks, named 'Center', 'East', 'North', 'West', and 'South', so an example of a valid block name is 'CAFilledCylinderCenter'.
  • Each of CACylinder, EACylinder, EBCylinder, and CBCylinder consists of 4 blocks, named 'East', 'North', 'West', and 'South', so an example of a valid block name is 'CACylinderEast'.
  • The Block group called "Outer" consists of all the CA and CB blocks. They all border the outer boundary if IncludeOuterSphere is false.
  • If IncludeOuterSphere is true, then there are more blocks named OuterSphereCAFilledCylinder, OuterSphereCBFilledCylinder, OuterSphereCACylinder, and OuterSphereCBCylinder. These are in a Block group called "OuterSphere", and all of these border the outer boundary.
  • The Block group called "InnerA" consists of all the EA, and MA blocks. They all border the inner boundary "A" if IncludeInnerSphereA is false.
  • If IncludeInnerSphereA is true, then there are new blocks InnerSphereEAFilledCylinder, InnerSphereMAFilledCylinder, and InnerSphereEACylinder. These are in a Block group called "InnerSphereA", and all of these border the inner excision boundary "A".
  • The Block group called "InnerB" consists of all the EB, and MB blocks. They all border the inner boundary "B" if IncludeInnerSphereB is false.
  • If IncludeInnerSphereB is true, then there are new blocks InnerSphereEBFilledCylinder, InnerSphereMBFilledCylinder, and InnerSphereEBCylinder. These are in a Block group called "InnerSphereB", and all of these border the inner excision boundary "B".

If \(c_A\) and \(c_B\) are the input parameters center_A and center_B, \(r_A\) and \(r_B\) are the input parameters radius_A and radius_B, and \(R\) is the outer boundary radius, we demand the following restrictions on parameters:

  • \(c_A^0>0\); this is a convention to simplify the code.
  • \(c_B^0<0\); this is a convention to simplify the code.
  • \(|c_A^0|\le|c_B^0|\). We should roughly have \(r_A c_A^0 + r_B c_B^0\) close to zero; that is, for BBHs (where \(r_A\) is roughly twice the mass of the heavier object A, and \(r_B\) is roughly twice the mass of the lighter object B) the center of mass should be roughly at the origin.
  • \(0 < r_B < r_A\)
  • \(R \ge 3(|c_A^0|-|c_B^0|)\); otherwise the blocks will be too compressed near the outer boundary.

Member Function Documentation

◆ block_groups()

std::unordered_map< std::string, std::unordered_set< std::string > > domain::creators::CylindricalBinaryCompactObject::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::CylindricalBinaryCompactObject::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::CylindricalBinaryCompactObject::create_domain ( ) const
overridevirtual

Implements DomainCreator< 3 >.

◆ external_boundary_conditions()

std::vector< DirectionMap< 3, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > > > domain::creators::CylindricalBinaryCompactObject::external_boundary_conditions ( ) const
overridevirtual

The set of external boundary condition for every block in the domain.

Implements DomainCreator< 3 >.

◆ functions_of_time()

auto domain::creators::CylindricalBinaryCompactObject::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>>
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::CylindricalBinaryCompactObject::initial_extents ( ) const
overridevirtual

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::CylindricalBinaryCompactObject::initial_refinement_levels ( ) const
overridevirtual

Obtain the initial refinement levels of the blocks.

Implements DomainCreator< 3 >.

Member Data Documentation

◆ help

constexpr Options::String domain::creators::CylindricalBinaryCompactObject::help
staticconstexpr
Initial value:
{
"The CylindricalBinaryCompactObject domain is a general domain for "
"two compact objects. The user must provide the (grid-frame) "
"centers and radii of the spherical inner edge of the grid surrounding "
"each of the two compact objects A and B."}

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