SpECTRE
v2024.09.29
|
This holds all options related to the time dependent maps of the binary compact object domains. More...
#include <BinaryCompactObject.hpp>
Classes | |
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 | InitialTime |
The initial time of the functions of time. More... | |
struct | RotationMapOptions |
struct | TranslationMapOptions |
Options for the Translation Map, the outer radius is always set to the outer boundary of the Domain, so there's no option needed for outer boundary. More... | |
Public Types | |
using | maps_list = tmpl::append< tmpl::list< detail::di_map< Identity > >, detail::produce_all_maps< Frame::Grid, Frame::Inertial, Shape, Expansion, Rotation >, detail::produce_all_maps< Frame::Grid, Frame::Distorted, Shape >, detail::produce_all_maps< Frame::Distorted, Frame::Inertial, Expansion, Rotation >, detail::produce_all_maps< Frame::Grid, Frame::Inertial, Shape, RotScaleTrans >, detail::produce_all_maps< Frame::Distorted, Frame::Inertial, RotScaleTrans > > |
template<domain::ObjectLabel Object> | |
using | ShapeMapOptions = domain::creators::time_dependent_options::ShapeMapOptions< not IsCylindrical, Object > |
using | options = tmpl::list< InitialTime, ExpansionMapOptions, RotationMapOptions, TranslationMapOptions, ShapeMapOptions< domain::ObjectLabel::A >, ShapeMapOptions< domain::ObjectLabel::B > > |
using | IncludeDistortedMapType = tmpl::conditional_t< IsCylindrical, bool, std::optional< size_t > > |
Type to pass to grid_to_distorted_map() and grid_to_inertial_map() . More... | |
Public Member Functions | |
TimeDependentMapOptions (double initial_time, std::optional< ExpansionMapOptions > expansion_map_options, std::optional< RotationMapOptions > rotation_map_options, std::optional< TranslationMapOptions > translation_map_options, std::optional< ShapeMapOptions< domain::ObjectLabel::A > > shape_options_A, std::optional< ShapeMapOptions< domain::ObjectLabel::B > > shape_options_B, const Options::Context &context={}) | |
template<bool UseWorldtube = false> | |
std::unordered_map< std::string, std::unique_ptr< domain::FunctionsOfTime::FunctionOfTime > > | create_functions_of_time (const std::unordered_map< std::string, double > &initial_expiration_times) const |
Create the function of time map using the options that were provided to this class. More... | |
void | build_maps (const std::array< std::array< double, 3 >, 2 > &object_centers, const std::optional< std::array< double, 3 > > &cube_A_center, const std::optional< std::array< double, 3 > > &cube_B_center, const std::optional< std::array< double, IsCylindrical ? 2 :3 > > &object_A_radii, const std::optional< std::array< double, IsCylindrical ? 2 :3 > > &object_B_radii, bool object_A_filled, bool object_B_filled, double envelope_radius, double domain_outer_radius) |
Construct the actual maps that will be used. More... | |
bool | has_distorted_frame_options (domain::ObjectLabel object) const |
Check whether options were specified in the constructor for the shape map of this object. | |
template<domain::ObjectLabel Object> | |
MapType< Frame::Distorted, Frame::Inertial > | distorted_to_inertial_map (const IncludeDistortedMapType &include_distorted_map, bool use_rigid_map) const |
This will construct the map from Frame::Distorted to Frame::Inertial More... | |
template<domain::ObjectLabel Object> | |
MapType< Frame::Grid, Frame::Distorted > | grid_to_distorted_map (const IncludeDistortedMapType &include_distorted_map) const |
This will construct the maps from the Frame::Grid to the Frame::Distorted . More... | |
template<domain::ObjectLabel Object> | |
MapType< Frame::Grid, Frame::Inertial > | grid_to_inertial_map (const IncludeDistortedMapType &include_distorted_map, bool use_rigid_map) const |
This will construct the entire map from the Frame::Grid to the Frame::Inertial . More... | |
Static Public Attributes | |
static constexpr Options::String | help |
static const std::string | expansion_name {"Expansion"} |
static const std::string | expansion_outer_boundary_name |
static const std::string | rotation_name {"Rotation"} |
static const std::string | translation_name {"Translation"} |
static const std::array< std::string, 2 > | size_names {{"SizeA", "SizeB"}} |
static const std::array< std::string, 2 > | shape_names |
This holds all options related to the time dependent maps of the binary compact object domains.
Since both domains will have the same (overall) time dependent maps, their options are going to be the same as well. The options won't be exactly the same though, so there is a IsCylindrical
template parameter to distinguish.
This class will create the FunctionsOfTime needed for the binary compact object domains as well as the actual CoordinateMaps themselves
using domain::creators::bco::TimeDependentMapOptions< IsCylindrical >::IncludeDistortedMapType = tmpl::conditional_t<IsCylindrical, bool, std::optional<size_t> > |
Type to pass to grid_to_distorted_map()
and grid_to_inertial_map()
.
If IsCylindrical
is true, pass a bool
for whether to include a shape map or not. If it's false, pass a std::optional<size_t>
. If this has a value, then it includes a shape map. The size_t
represents the relative block number around each object in the BinaryCompactObject domain. It should go from 0 to 11 for the 12 blocks surrounding each object.
void domain::creators::bco::TimeDependentMapOptions< IsCylindrical >::build_maps | ( | const std::array< std::array< double, 3 >, 2 > & | object_centers, |
const std::optional< std::array< double, 3 > > & | cube_A_center, | ||
const std::optional< std::array< double, 3 > > & | cube_B_center, | ||
const std::optional< std::array< double, IsCylindrical ? 2 :3 > > & | object_A_radii, | ||
const std::optional< std::array< double, IsCylindrical ? 2 :3 > > & | object_B_radii, | ||
bool | object_A_filled, | ||
bool | object_B_filled, | ||
double | envelope_radius, | ||
double | domain_outer_radius | ||
) |
Construct the actual maps that will be used.
Currently, this constructs a:
RotScaleTrans<3>
Shape
(with size FunctionOfTime)If the radii for an object are std::nullopt
, this means that a Shape map is not constructed for that object. An identity map will be used instead. This happens when the object is covered by a Cartesian cube, rather than a sphere. If IsCylindrical
is true, only pass two radii for the inner/outer radius of the object sphere. If it is false, pass three radii corresponding to the excision radius, the outer radius of the inner sphere, and the radius of the surrounding cube.
If a shape map is requested and the object is excised, then the shape map will deform the inner excision surface of the object. This deformation either extends to the outer radius of the sphere, or further to the edge of the cube that surrounds the sphere, depending on the TransitionEndsAtCube
option. If the object is filled, then the shape map will deform the outer radius of the sphere that covers the object and the TransitionEndsAtCube
option must be true
.
std::unordered_map< std::string, std::unique_ptr< domain::FunctionsOfTime::FunctionOfTime > > domain::creators::bco::TimeDependentMapOptions< IsCylindrical >::create_functions_of_time | ( | const std::unordered_map< std::string, double > & | initial_expiration_times | ) | const |
Create the function of time map using the options that were provided to this class.
Currently, this will add:
PiecewisePolynomial<2>
FixedSpeedCubic
QuaternionFunctionOfTime<3>
PiecewisePolynomial<3>
PiecewisePolynomial<3>
ShapeA/B: PiecewisePolynomial<2>
When UseWorldtube
is set to true, they are
IntegratedFunctionOfTime
FixedSpeedCubic
IntegratedFunctionOfTime
PiecewisePolynomial<2>
MapType< Frame::Distorted, Frame::Inertial > domain::creators::bco::TimeDependentMapOptions< IsCylindrical >::distorted_to_inertial_map | ( | const IncludeDistortedMapType & | include_distorted_map, |
bool | use_rigid_map | ||
) | const |
This will construct the map from Frame::Distorted
to Frame::Inertial
If we are including a shape map, then this will be a RotScaleTrans
map. If we aren't, this returns a nullptr
.
MapType< Frame::Grid, Frame::Distorted > domain::creators::bco::TimeDependentMapOptions< IsCylindrical >::grid_to_distorted_map | ( | const IncludeDistortedMapType & | include_distorted_map | ) | const |
This will construct the maps from the Frame::Grid
to the Frame::Distorted
.
If we are including a shape map, then this will be a Shape
map (with size FunctionOfTime) for the templated Object
. If we aren't, then this returns a nullptr
.
MapType< Frame::Grid, Frame::Inertial > domain::creators::bco::TimeDependentMapOptions< IsCylindrical >::grid_to_inertial_map | ( | const IncludeDistortedMapType & | include_distorted_map, |
bool | use_rigid_map | ||
) | const |
This will construct the entire map from the Frame::Grid
to the Frame::Inertial
.
If we are including a shape map, then this map will have a composition of a Shape
(with size FunctionOfTime) and RotScaleTrans
map. If not, there will only be a RotScaleTrans
map.
|
inlinestatic |
|
staticconstexpr |
|
inlinestatic |