SpECTRE  v2024.09.29
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
BinaryTrajectories Class Reference

Class to compute post-Newtonian trajectories. More...

#include <BinaryTrajectories.hpp>

Public Member Functions

 BinaryTrajectories (double initial_separation, const std::array< double, 3 > &center_of_mass_velocity=std::array< double, 3 >{{0.0, 0.0, 0.0}}, bool newtonian=false)
 
 BinaryTrajectories (BinaryTrajectories &&)=default
 
BinaryTrajectoriesoperator= (BinaryTrajectories &&)=default
 
 BinaryTrajectories (const BinaryTrajectories &)=default
 
BinaryTrajectoriesoperator= (const BinaryTrajectories &)=default
 
template<typename DataType >
DataType separation (const DataType &time) const
 Gives separation as function of time.
 
template<typename DataType >
DataType orbital_frequency (const DataType &time) const
 Gives orbital frequency f as a function of time calculated from Kepler's third law f21a3 where a is calculated from separation.
 
template<typename DataType >
DataType angular_velocity (const DataType &time) const
 Gives the angular velocity of the objects as a function of time. Calculated by ω(t)=dθ(t)dt where θ(t)=f(t)t. More...
 
template<typename DataType >
std::array< tnsr::I< DataType, 3 >, 2 > positions (const DataType &time) const
 Gives the positions of the two objects as a function of time.
 
template<typename DataType >
std::array< tnsr::I< DataType, 3 >, 2 > positions_no_expansion (const DataType &time) const
 Same as positions, except the separation remains constant (equal to the initial separation). More...
 

Detailed Description

Class to compute post-Newtonian trajectories.

Details

Computes the leading post-Newtonian trajectories x1i(t) and x2i(t) for an equal-mass binary with a total mass of 1. Currently, this class implements the leading-order terms of the integral of Eq. (226) and the square root of Eq. (228) of :

(1)r(t)=(r04645t)1/4,(2)Ω(t)=r3/2(t).

In terms of these functions, the positions of objects 1 and 2 are

(3)x1(t)=r(t)2cos[Ω(t)t]+vxt,(4)y1(t)=r(t)2sin[Ω(t)t],+vyt(5)x2(t)=r(t)2cos[Ω(t)t],+vxt(6)y2(t)=r(t)2sin[Ω(t)t],+vyt(7)z1(t)=z2(t)=vzt.

These trajectories are useful for, e.g., testing a horizon-tracking control system.

Note
The trajectories could be generalized to higher post-Newtonian order if needed.
Note
If the newtonian argument is true, then this will just give Kepler's third law

Member Function Documentation

◆ angular_velocity()

template<typename DataType >
DataType BinaryTrajectories::angular_velocity ( const DataType &  time) const

Gives the angular velocity of the objects as a function of time. Calculated by ω(t)=dθ(t)dt where θ(t)=f(t)t.

Note
For the newtonian case, orbital_frequency and angular_velocity give the same result because the orbital frequency is independent of time.

◆ positions_no_expansion()

template<typename DataType >
std::array< tnsr::I< DataType, 3 >, 2 > BinaryTrajectories::positions_no_expansion ( const DataType &  time) const

Same as positions, except the separation remains constant (equal to the initial separation).

Note
This is useful for testing the rotation control system by itself, because we want the frequency to vary, but the separation to remain the same. This way, we don't have to worry about expansion effects.

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