SpECTRE  v2024.12.16
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
domain::CoordinateMaps::SpecialMobius Class Reference

Redistributes gridpoints within the unit sphere. More...

#include <SpecialMobius.hpp>

Public Member Functions

 SpecialMobius (double mu)
 
 SpecialMobius (SpecialMobius &&)=default
 
 SpecialMobius (const SpecialMobius &)=default
 
SpecialMobiusoperator= (const SpecialMobius &)=default
 
SpecialMobiusoperator= (SpecialMobius &&)=default
 
template<typename T >
std::array< tt::remove_cvref_wrap_t< T >, 3 > operator() (const std::array< T, 3 > &source_coords) const
 
std::optional< std::array< double, 3 > > inverse (const std::array< double, 3 > &target_coords) const
 Returns std::nullopt for target_coords outside the unit sphere. 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 >
tnsr::Ij< tt::remove_cvref_wrap_t< T >, 3, Frame::NoFramejacobian (const std::array< T, 3 > &source_coords) const
 
template<typename T >
tnsr::Ij< tt::remove_cvref_wrap_t< T >, 3, Frame::NoFrameinv_jacobian (const std::array< T, 3 > &source_coords) const
 
void pup (PUP::er &p)
 
bool is_identity () const
 

Static Public Attributes

static constexpr size_t dim = 3
 

Friends

bool operator== (const SpecialMobius &lhs, const SpecialMobius &rhs)
 

Detailed Description

Redistributes gridpoints within the unit sphere.

A sphere with a `mu` of 0.25.

Details

A special case of the conformal Mobius transformation that maps the unit ball to itself. This map depends on a single parameter, mu =μ, which is the x-coordinate of the preimage of the origin under this map. This map has the fixed points x=1 and x=1. The map is singular for μ=1 but we have found that this map is accurate up to 12 decimal places for values of μ up to 0.96.

We define the auxiliary variables

r:=x2+y2+z2

and

λ:=112xμ+μ2r2

The map corresponding to this transformation in cartesian coordinates is then given by:

x(x,y,z)=λ[x(1+μ2)μ(1+r2)y(1μ2)z(1μ2)]

The inverse map is the same as the forward map with μ replaced by μ.

This map is intended to be used only inside the unit sphere. A point inside the unit sphere maps to another point inside the unit sphere. The map can have undesirable behavior at certain points outside the unit sphere: The map is singular at (x,y,z)=(1/μ,0,0) (which is outside the unit sphere since |μ|<1). Moreover, a point on the x-axis arbitrarily close to the singularity maps to an arbitrarily large value on the ±x-axis, where the sign depends on which side of the singularity the point is on.

A general Mobius transformation is a function on the complex plane, and takes the form f(z)=az+bcz+d, where z,a,b,c,dC, and adbc0.

The special case used in this map is the function f(z)=zμ1zμ. This has the desired properties:

  • The unit disk in the complex plane is mapped to itself.
  • The x-axis is mapped to itself.
  • f(μ)=0.

The three-dimensional version of this map is obtained by rotating the disk in the plane about the x-axis.

This map is useful for performing transformations along the x-axis that preserve the unit disk. A concrete example of this is in the BBH domain, where two BBHs with a center-of-mass at x= μ can be shifted such that the new center of mass is now located at x=0. Additionally, the spherical shape of the outer wave-zone is preserved and, as a mobius map, the spherical coordinate shapes of the black holes is also preserved.


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