SpECTRE
v2025.03.17
|
Time dependent coordinate map that keeps the
#include <Skew.hpp>
Public Member Functions | |
Skew (std::string function_of_time_name, const std::array< double, 3 > ¢er, double outer_radius) | |
template<typename T > | |
std::array< tt::remove_cvref_wrap_t< T >, 3 > | operator() (const std::array< T, 3 > &source_coords, double time, const domain::FunctionsOfTimeMap &functions_of_time) const |
std::optional< std::array< double, 3 > > | inverse (const std::array< double, 3 > &target_coords, double time, const domain::FunctionsOfTimeMap &functions_of_time) const |
The inverse function is only callable with doubles because the inverse might fail if called for a point out of range, and it is unclear what should happen if the inverse were to succeed for some points in a DataVector but fail for other points. | |
template<typename T > | |
std::array< tt::remove_cvref_wrap_t< T >, 3 > | frame_velocity (const std::array< T, 3 > &source_coords, double time, const domain::FunctionsOfTimeMap &functions_of_time) const |
template<typename T > | |
tnsr::Ij< tt::remove_cvref_wrap_t< T >, 3, Frame::NoFrame > | jacobian (const std::array< T, 3 > &source_coords, double time, const domain::FunctionsOfTimeMap &functions_of_time) const |
template<typename T > | |
tnsr::Ij< tt::remove_cvref_wrap_t< T >, 3, Frame::NoFrame > | inv_jacobian (const std::array< T, 3 > &source_coords, double time, const domain::FunctionsOfTimeMap &functions_of_time) const |
void | pup (PUP::er &p) |
const std::unordered_set< std::string > & | function_of_time_names () const |
Static Public Member Functions | |
static bool | is_identity () |
Static Public Attributes | |
static constexpr size_t | dim = 3 |
Friends | |
bool | operator== (const Skew &lhs, const Skew &rhs) |
Time dependent coordinate map that keeps the
This coordinate map is only available in 3 dimensions and is intended to be used in the BinaryCompactObject domain.
The Skew coordinate map is given by the mapping
where center
of the skew map (which is different than the origin of the coordinate system), and domain::FunctionsOfTime::FunctionOfTime
s. The actual function of time should have two components; the first corresponds to
outer_radius
, outer_radius
should be set to the envelope radius for the domain::creators::BinaryCompactObject
. The reason that
With that in mind,
When the
A quadratic form was chosen for
To find the inverse, we need to solve a 1D root find for the
We can bound the root by noticing that in
where on each line we just made simple arithmetic operations. We pad each bound by
Taking the time derivative of
Considering the first terms in each equation of
where all components of
The gradient of
The gradient of
The inverse jacobian is computed by numerically inverting the jacobian.