SpECTRE  v2021.11.01
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  InitialGridPoints
 
struct  InitialRefinement
 
struct  InnerBoundaryCondition
 
struct  OuterBoundaryCondition
 
struct  OuterRadius
 
struct  RadiusA
 
struct  RadiusB
 
struct  TimeDependence
 

Public Types

using maps_list = tmpl::list< domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Interval, CoordinateMaps::Interval, CoordinateMaps::Interval >, CoordinateMaps::CylindricalEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Interval >, CoordinateMaps::CylindricalEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Interval, CoordinateMaps::Interval, CoordinateMaps::Interval >, CoordinateMaps::CylindricalFlatEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Interval >, CoordinateMaps::CylindricalFlatEndcap, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Interval >, CoordinateMaps::CylindricalFlatSide, CoordinateMaps::DiscreteRotation< 3 > >, domain::CoordinateMap< Frame::BlockLogical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Interval >, CoordinateMaps::CylindricalSide, CoordinateMaps::DiscreteRotation< 3 > > >
 
using basic_options = tmpl::list< CenterA, CenterB, RadiusA, RadiusB, OuterRadius, InitialRefinement, InitialGridPoints, TimeDependence >
 
template<typename Metavariables >
using options = tmpl::conditional_t< domain::BoundaryConditions::has_boundary_conditions_base_v< typename Metavariables::system >, tmpl::push_back< basic_options, InnerBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > >, OuterBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > > >, basic_options >
 

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 OuterRadius::type outer_radius, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_grid_points, std::unique_ptr< domain::creators::time_dependence::TimeDependence< 3 > > time_dependence=nullptr, 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< 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, 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< 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 based on cylinders.

Creates a 3D Domain that represents a binary compact object solution. This domain is described briefly in the Appendix of [22], 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 [22] 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 does not have any of these spherical shells: the "EA" and "EB" blocks extend to the excision boundary 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.
  • The Block group called "InnerA" consists of all the EA, and MA blocks. They all border the inner boundary "A".
  • The Block group called "InnerB" consists of all the EB, and MB blocks. They all border the inner 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 >.

◆ functions_of_time()

auto domain::creators::CylindricalBinaryCompactObject::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::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: