SpECTRE  v2024.03.19
domain::CoordinateMaps::CylindricalFlatEndcap Class Reference

Map from 3D unit right cylinder to a volume that connects a portion of a circle to a portion of a spherical surface. More...

#include <CylindricalFlatEndcap.hpp>

Public Member Functions

 CylindricalFlatEndcap (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)
 
 CylindricalFlatEndcap (CylindricalFlatEndcap &&)=default
 
 CylindricalFlatEndcap (const CylindricalFlatEndcap &)=default
 
CylindricalFlatEndcapoperator= (const CylindricalFlatEndcap &)=default
 
CylindricalFlatEndcapoperator= (CylindricalFlatEndcap &&)=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 CylindricalFlatEndcap &lhs, const CylindricalFlatEndcap &rhs)
 

Detailed Description

Map from 3D unit right cylinder to a volume that connects a portion of a circle to a portion of a spherical surface.

A cylinder maps to the shaded region.

Details

Consider a 2D circle in 3D space that is normal to the \(z\) axis and has (3D) center \(C_1\) and radius \(R_1\). Also consider a sphere with center \(C_2\), and radius \(R_2\). Also let there be a projection point \(P\).

CylindricalFlatEndcap maps a 3D unit right cylinder (with coordinates \((\bar{x},\bar{y},\bar{z})\) such that \(-1\leq\bar{z}\leq 1\) and \(\bar{x}^2+\bar{y}^2 \leq 1\)) 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 circle of radius \(R_1\). 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 on the circle and \(\bar{z}=+1\) is mapped to a point on the sphere.

CylindricalFlatEndcap is intended to be composed with Wedge2D maps to construct a portion of a cylindrical domain for a binary system.

CylindricalFlatEndcap is described briefly in the Appendix of [32]. CylindricalFlatEndcap is used to construct the blocks labeled 'MA wedge' and 'MB wedge' in Figure 20 of that paper.

CylindricalFlatEndcap is implemented using FocallyLiftedMap and FocallyLiftedInnerMaps::FlatEndcap; see those classes for details.

Restrictions on map parameters.

The following restrictions are made so that the map is not singular or close to singular. It is possible to construct a valid map without these assumptions, but the assumptions simplify the code and avoid problematic edge cases, and the expected use cases obey these restrictions.

We demand that

  • The plane containing the circle is below (i.e. at a smaller value of \(z\) than) the sphere, by an amount at least 5% of the sphere radius \(R_2\) but not more than 5 times the sphere radius \(R_2\).
  • \(P\) is inside the sphere but not too close to its surface; specifically, we demand that \(|P-C_2|\leq 0.95 R_2\).
  • The ratio \(R_1/R_2\) is between 10 and 1/10, inclusive.
  • The x and y components of \(C_2-C_1\) both have magnitudes smaller than or equal to \(R_1+R_2\).

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