SpECTRE  v2025.03.17
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
domain::CoordinateMaps::CylindricalSide Class Reference

Map from a 3D unit right cylindrical shell to a volume that connects portions of two spherical surfaces. More...

#include <CylindricalSide.hpp>

Public Member Functions

 CylindricalSide (const std::array< double, 3 > &center_one, const std::array< double, 3 > &center_two, const std::array< double, 3 > &proj_center, double radius_one, double radius_two, double z_lower, double z_upper)
 
 CylindricalSide (CylindricalSide &&)=default
 
 CylindricalSide (const CylindricalSide &)=default
 
CylindricalSideoperator= (const CylindricalSide &)=default
 
CylindricalSideoperator= (CylindricalSide &&)=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::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)
 

Static Public Member Functions

static bool is_identity ()
 

Static Public Attributes

static constexpr size_t dim = 3
 

Friends

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

Detailed Description

Map from a 3D unit right cylindrical shell to a volume that connects portions of two spherical surfaces.

2D slice showing mapped (shaded) region.

Details

Consider two spheres with centers C1 and C2, and radii R1 and R2. Let sphere 1 be intersected by two planes normal to the z axis and located at z=zL and z=zU, with zL<zU. Also let there be a projection point P.

Note that Sphere 1 and Sphere 2 are not equivalent, because the mapped portion of Sphere 1 is bounded by planes of constant z but the mapped portion of Sphere 2 is not (except for special choices of C1, C2, and P).

CylindricalSide maps a 3D unit right cylindrical shell (with coordinates (x¯,y¯,z¯) such that 1z¯1 and 1x¯2+y¯24) to the shaded area in each panel of the figure above (with coordinates (x,y,z)). The figure shows two different allowed possibilities: R1>R2 and R2>R1. Note that the two portions of the shaded region in each panel of the figure represent different portions of the same block; each panel of the figure is to be understood as rotated around the z axis. The inner boundary of the cylindrical shell x¯2+y¯2=1 is mapped to the portion of sphere 1 that has zLzzU. Curves of constant (z¯) along the vector (x¯,y¯) are mapped to portions of lines that pass through P. Along each of these curves, x¯2+y¯2=1 is mapped to a point on sphere 1 and x¯2+y¯2=4 is mapped to a point on sphere 2.

CylindricalSide is described briefly in the Appendix of [33]. CylindricalSide is used to construct the blocks labeled 'CA cylinder', 'EA cylinder', 'CB cylinder', 'EE cylinder', and 'EB cylinder' in Figure 20 of that paper. Note that 'CA cylinder', 'CB cylinder', and 'EE cylinder' have Sphere 1 contained in Sphere2, and 'EA cylinder' and 'EB cylinder' have Sphere 2 contained in Sphere 1.

CylindricalSide is implemented using FocallyLiftedMap and FocallyLiftedInnerMaps::Side; see those classes for details.

Restrictions on map parameters.

We demand that:

  • Either Sphere 1 is fully contained inside Sphere 2, or Sphere 2 is fully contained inside Sphere 1.
  • P is contained inside the smaller sphere, and between (or on) the planes defined by zL and zU.
  • If sphere 1 is contained in sphere 2:
    • C1z0.95R1zL
    • zUC1z+0.95R1
  • If sphere 2 is contained in sphere 1:
    • C1z0.95R1zLC1z0.2R1
    • C1z+0.2R1zUC1z+0.95R1

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