SpECTRE
v2023.01.13

Map from 3D unit right cylindrical shell to a volume that connects a portion of an annulus to a portion of a spherical surface. More...
#include <CylindricalFlatSide.hpp>
Public Member Functions  
CylindricalFlatSide (const std::array< double, 3 > ¢er_one, const std::array< double, 3 > ¢er_two, const std::array< double, 3 > &proj_center, const double inner_radius, const double outer_radius, const double radius_two)  
CylindricalFlatSide (CylindricalFlatSide &&)=default  
CylindricalFlatSide (const CylindricalFlatSide &)=default  
CylindricalFlatSide &  operator= (const CylindricalFlatSide &)=default 
CylindricalFlatSide &  operator= (CylindricalFlatSide &&)=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 
template<typename T >  
tnsr::Ij< tt::remove_cvref_wrap_t< T >, 3, Frame::NoFrame >  jacobian (const std::array< T, 3 > &source_coords) const 
template<typename T >  
tnsr::Ij< tt::remove_cvref_wrap_t< T >, 3, Frame::NoFrame >  inv_jacobian (const std::array< T, 3 > &source_coords) const 
void  pup (PUP::er &p) 
Static Public Member Functions  
static bool  is_identity () 
Static Public Attributes  
static constexpr size_t  dim = 3 
Friends  
bool  operator== (const CylindricalFlatSide &lhs, const CylindricalFlatSide &rhs) 
Map from 3D unit right cylindrical shell to a volume that connects a portion of an annulus to a portion of a spherical surface.
Consider a 2D annulus in 3D space that is normal to the \(z\) axis and has (3D) center \(C_1\), inner radius \(R_\mathrm{in}\) and outer radius \(R_\mathrm{out}\) Also consider a sphere with center \(C_2\), and radius \(R_2\). Also let there be a projection point \(P\).
CylindricalFlatSide maps a 3D unit right cylindrical shell (with coordinates \((\bar{x},\bar{y},\bar{z})\) such that \(1\leq\bar{z}\leq 1\) and \(1 \leq \bar{x}^2+\bar{y}^2 \leq 4\)) to the shaded area in the figure above (with coordinates \((x,y,z)\)). The "bottom" of the cylinder \(\bar{z}=1\) is mapped to the interior of the annulus with radii \(R_\mathrm{in}\) and \(R_\mathrm{out}\). Curves of constant \((\bar{x},\bar{y})\) are mapped to portions of lines that pass through \(P\). Along each of these curves, \(\bar{z}=1\) is mapped to a point inside the annulus and \(\bar{z}=+1\) is mapped to a point on the sphere.
CylindricalFlatSide is intended to be composed with Wedge2D maps to construct a portion of a cylindrical domain for a binary system.
CylindricalFlatSide is described briefly in the Appendix of [27]. CylindricalFlatSide is used to construct the blocks labeled 'ME cylinder' in Figure 20 of that paper.
CylindricalFlatSide is implemented using FocallyLiftedMap
and FocallyLiftedInnerMaps::FlatSide
; see those classes for details.
We demand that:
It is possible to construct a valid map without these assumptions, but some of these assumptions simplify the code and others eliminate edge cases where Jacobians become large or small.