SpECTRE  v2026.04.01
Loading...
Searching...
No Matches
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
template<typename Metavariables>
using options

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.
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.
std::vector< std::array< size_t, 3 > > initial_extents () const override
 Obtain the initial grid extents of the Elements in each block.
std::vector< std::array< size_t, 3 > > initial_refinement_levels () const override
 Obtain the initial refinement levels of the blocks.
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.
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).
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.
Public Member Functions inherited from DomainCreator< 3 >
DomainCreator< VolumeDim > & operator= (const DomainCreator< VolumeDim > &)=delete

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 [36], 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 [36] 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 Typedef Documentation

◆ options

template<typename Metavariables>
using domain::creators::CylindricalBinaryCompactObject::options
Initial value:
tmpl::append<
tmpl::conditional_t<
domain::BoundaryConditions::has_boundary_conditions_base_v<
typename Metavariables::system>,
tmpl::list<
typename Metavariables::system>>,
typename Metavariables::system>>>,
tmpl::list<>>>
typename detail::get_boundary_conditions_base< T >::type get_boundary_conditions_base
Returns T::boundary_condition_base or a placeholder class.
Definition GetBoundaryConditionsBase.hpp:32
Definition BinaryCompactObject.hpp:422
Definition BinaryCompactObject.hpp:368
Definition BinaryCompactObject.hpp:468
Definition BinaryCompactObject.hpp:442
Definition CylindricalBinaryCompactObject.hpp:190
Definition CylindricalBinaryCompactObject.hpp:195
Definition CylindricalBinaryCompactObject.hpp:210
Definition CylindricalBinaryCompactObject.hpp:215
Definition CylindricalBinaryCompactObject.hpp:220
Definition CylindricalBinaryCompactObject.hpp:200
Definition CylindricalBinaryCompactObject.hpp:205

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

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:
  • src/Domain/Creators/CylindricalBinaryCompactObject.hpp