SpECTRE  v2024.09.29
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 \(C_1\) and \(C_2\), and radii \(R_1\) and \(R_2\). Let sphere 1 be intersected by two planes normal to the \(z\) axis and located at \(z = z_\mathrm{L}\) and \(z = z_\mathrm{U}\), with \(z_\mathrm{L} < z_\mathrm{U}\). 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 \(C_1\), \(C_2\), and \(P\)).

CylindricalSide 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 each panel of the figure above (with coordinates \((x,y,z)\)). The figure shows two different allowed possibilities: \(R_1 > R_2\) and \(R_2 > R_1\). 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 \(\bar{x}^2+\bar{y}^2=1\) is mapped to the portion of sphere 1 that has \(z_\mathrm{L} \leq z \leq z_\mathrm{U}\). Curves of constant \((\bar{z})\) along the vector \((\bar{x},\bar{y})\) are mapped to portions of lines that pass through \(P\). Along each of these curves, \(\bar{x}^2+\bar{y}^2=1\) is mapped to a point on sphere 1 and \(\bar{x}^2+\bar{y}^2=4\) is mapped to a point on sphere 2.

CylindricalSide is described briefly in the Appendix of [32]. 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 \(z_\mathrm{L}\) and \(z_\mathrm{U}\).
  • If sphere 1 is contained in sphere 2:
    • \(C_1^z - 0.95 R_1 \leq z_\mathrm{L}\)
    • \(z_\mathrm{U} \leq C_1^z + 0.95 R_1\)
  • If sphere 2 is contained in sphere 1:
    • \(C_1^z - 0.95 R_1 \leq z_\mathrm{L} \leq C_1^z - 0.2 R_1\)
    • \(C_1^z + 0.2 R_1 \leq z_\mathrm{U} \leq C_1^z + 0.95 R_1\)

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