SpECTRE  v2024.09.29
domain::CoordinateMaps::CylindricalFlatSide Class Reference

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 > &center_one, const std::array< double, 3 > &center_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
 
CylindricalFlatSideoperator= (const CylindricalFlatSide &)=default
 
CylindricalFlatSideoperator= (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::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 CylindricalFlatSide &lhs, const CylindricalFlatSide &rhs)
 

Detailed Description

Map from 3D unit right cylindrical shell to a volume that connects a portion of an annulus to a portion of a spherical surface.

A cylinder maps to the shaded region.

Details

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 [32]. 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.

Restrictions on map parameters.

We demand that:

  • The sphere is at a larger value of \(z\) (plus 5 percent of the sphere radius) than the plane containing the annulus.
  • The projection point \(z_\mathrm{P}\) is inside the sphere and more than 15 percent away from the boundary of the sphere.
  • The center of the annulus is contained in the circle that results from projecting the sphere into the \(xy\) plane.
  • The outer radius of the annulus is larger than 5 percent of the distance between the center of the annulus and the projection point.
  • The inner radius of the annulus is less than 95 percent of the outer radius, larger than 5 percent of the outer radius, and larger than one percent of the distance between the center of the annulus and the projection point. The last condition means that the angle subtended by the inner radius with respect to the projection point is not too small.

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.


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