SpECTRE  v2025.03.17
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
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 C1, inner radius Rin and outer radius Rout Also consider a sphere with center C2, and radius R2. Also let there be a projection point P.

CylindricalFlatSide 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 the figure above (with coordinates (x,y,z)). The "bottom" of the cylinder z¯=1 is mapped to the interior of the annulus with radii Rin and Rout. Curves of constant (x¯,y¯) are mapped to portions of lines that pass through P. Along each of these curves, z¯=1 is mapped to a point inside the annulus and 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 [33]. 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 zP 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: