SpECTRE  v2024.04.12
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  IncludeInnerSphereA
 
struct  IncludeInnerSphereB
 
struct  IncludeOuterSphere
 
struct  InitialGridPoints
 
struct  InitialRefinement
 
struct  InnerBoundaryCondition
 
struct  OuterBoundaryCondition
 
struct  OuterRadius
 
struct  RadiusA
 
struct  RadiusB
 
struct  TimeDependentMaps
 
struct  UseEquiangularMap
 

Public Types

using maps_list = tmpl::flatten< 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 > >, bco::TimeDependentMapOptions< true >::maps_list > >
 
template<typename Metavariables >
using options = tmpl::append< tmpl::list< CenterA, CenterB, RadiusA, RadiusB, IncludeInnerSphereA, IncludeInnerSphereB, IncludeOuterSphere, OuterRadius, UseEquiangularMap, InitialRefinement, InitialGridPoints, TimeDependentMaps >, tmpl::conditional_t< domain::BoundaryConditions::has_boundary_conditions_base_v< typename Metavariables::system >, tmpl::list< InnerBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > >, OuterBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > > >, tmpl::list<> > >
 

Public Member Functions

 CylindricalBinaryCompactObject (std::array< double, 3 > center_A, std::array< double, 3 > center_B, double radius_A, double radius_B, bool include_inner_sphere_A, bool include_inner_sphere_B, bool include_outer_sphere, double outer_radius, bool use_equiangular_map, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_grid_points, std::optional< bco::TimeDependentMapOptions< true > > time_dependent_options=std::nullopt, 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::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...
 
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::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::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
 
- Static Public Attributes inherited from DomainCreator< 3 >
static constexpr size_t volume_dim
 

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 [32], 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.

This domain offers some grid anchors. See domain::creators::bco::create_grid_anchors for which ones are offered.

Note that Figure 20 of [32] 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.

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. This class must pass a template parameter of true to domain::creators::bco::TimeDependentMapOptions.

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 >.

◆ grid_anchors()

std::unordered_map< std::string, tnsr::I< double, 3, Frame::Grid > > domain::creators::CylindricalBinaryCompactObject::grid_anchors ( ) const
inlineoverridevirtual

A set of named coordinates in the grid frame, like the center of the domain or the positions of specific objects in a domain.

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: