SpECTRE  v2024.04.12
Xcts::AnalyticData::Binary< IsolatedObjectBase, IsolatedObjectClasses > Class Template Reference

Binary compact-object data in general relativity, constructed from superpositions of two isolated objects. More...

#include <Binary.hpp>

Classes

struct  AngularVelocity
 
struct  Expansion
 
struct  FalloffWidths
 
struct  LinearVelocity
 
struct  ObjectLeft
 
struct  ObjectRight
 
struct  XCoords
 

Public Types

using options = tmpl::list< XCoords, ObjectLeft, ObjectRight, AngularVelocity, Expansion, LinearVelocity, FalloffWidths >
 

Public Member Functions

 Binary (const Binary &)=delete
 
Binaryoperator= (const Binary &)=delete
 
 Binary (Binary &&)=default
 
Binaryoperator= (Binary &&)=default
 
 Binary (const std::array< double, 2 > xcoords, std::unique_ptr< IsolatedObjectBase > object_left, std::unique_ptr< IsolatedObjectBase > object_right, const double angular_velocity, const double expansion, const std::array< double, 3 > linear_velocity, const std::optional< std::array< double, 2 > > falloff_widths, const Options::Context &context={})
 
 Binary (CkMigrateMessage *m)
 
 WRAPPED_PUPable_decl_template (Binary)
 
template<typename DataType , typename... RequestedTags>
tuples::TaggedTuple< RequestedTags... > variables (const tnsr::I< DataType, 3, Frame::Inertial > &x, tmpl::list< RequestedTags... >) const
 
template<typename... RequestedTags>
tuples::TaggedTuple< RequestedTags... > variables (const tnsr::I< DataVector, 3, Frame::Inertial > &x, const Mesh< 3 > &mesh, const InverseJacobian< DataVector, 3, Frame::ElementLogical, Frame::Inertial > &inv_jacobian, tmpl::list< RequestedTags... >) const
 
void pup (PUP::er &p) override
 
const std::array< double, 2 > & x_coords () const
 Coordinates of the objects, ascending left to right.
 
const std::array< std::unique_ptr< IsolatedObjectBase >, 2 > & superposed_objects () const
 The two objects. First entry is the left object, second entry is the right object.
 
double angular_velocity () const
 
double expansion () const
 
const std::array< double, 3 > & linear_velocity () const
 
const std::optional< std::array< double, 2 > > & falloff_widths () const
 

Static Public Attributes

static constexpr Options::String help
 

Detailed Description

template<typename IsolatedObjectBase, typename IsolatedObjectClasses>
class Xcts::AnalyticData::Binary< IsolatedObjectBase, IsolatedObjectClasses >

Binary compact-object data in general relativity, constructed from superpositions of two isolated objects.

This class implements background data for the XCTS equations describing two objects in a quasi-equilibrium orbit, i.e. with \(\bar{u}=0\) and \(\partial_t K=0\). Both objects can be chosen from the list of IsolatedObjectRegistrars, e.g. they can be black-hole or neutron-star solutions in different coordinates. Most quantities are constructed by superposing the two isolated solutions (see e.g. Eq. (8-9) in [184] or Eq. (45-46) in [121]):

\begin{align} \bar{\gamma}_{ij} &= f_{ij} + \sum_{\alpha=1}^2 e^{-r_\alpha^2 / w_\alpha^2}\left(\gamma^\alpha_{ij} - f_{ij}\right) \\ K &= \sum_{\alpha=1}^2 e^{-r_\alpha^2 / w_\alpha^2}K^\alpha \end{align}

where \(\gamma^\alpha_{ij}\) and \(K^\alpha\) denote the spatial metric and extrinsic-curvature trace of the two individual solutions, \(r_\alpha\) is the Euclidean coordinate-distance from the center of each object and \(w_\alpha\) are parameters describing the falloff widths of Gaussian window functions. The window functions facilitate that the influence of either of the two objects at the position of the other is strongly damped, and they also avoid logarithmic scaling of the solution at large distances where we would typically employ an inverse-radial coordinate map and asymptotically-flat boundary conditions. The falloff-widths are chosen in terms of the Newtonian Lagrange points of the two objects in [184] and [121], and they are input parameters in this implementation. The falloff can be disabled by passing std::nullopt to the constructor, or None in the input file.

Matter sources
Matter sources are superposed without the window functions. The analytic matter sources are of limited use anyway, because in a binary setting they don't take the gravitational influence of the other body into account. Therefore, the matter sources should typically be solved-for alongside the gravity sector to impose conditions such as hydrostatic equilibrium. For scenarios where we just want to superpose the isolated matter solutions and compute the resulting gravity, the matter sources are simply added.
Orbital motion
The remaining quantities that this class implements relate to the orbital motion of the two objects. To obtain initial data in "co-rotating" coordinates where the two objects are initially at rest we prescribe the background shift

\begin{equation} \beta^i_\mathrm{background} = (-\Omega y, \Omega x, 0) + \dot{a}_0 x^i + v^i_0 \end{equation}

where \(\Omega\) is the angular-velocity parameter and \(\dot{a}_0\) is an expansion parameter. Both control the eccentricity of the orbit. The parameter \(v^i_0\) is a constant velocity that can be used to control the linear momentum of the system (see Eq. (28) in [141]).

Member Data Documentation

◆ help

template<typename IsolatedObjectBase , typename IsolatedObjectClasses >
constexpr Options::String Xcts::AnalyticData::Binary< IsolatedObjectBase, IsolatedObjectClasses >::help
staticconstexpr
Initial value:
=
"Binary compact-object data in general relativity, constructed from "
"superpositions of two isolated objects."

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