|
SpECTRE
v2026.04.01
|
The CoordinateMap for the Element from the Logical frame to the TargetFrame More...
#include <ElementMap.hpp>
Public Types | |
| using | source_frame = Frame::ElementLogical |
| using | target_frame = TargetFrame |
Public Member Functions | |
| ElementMap (const ElementId< Dim > &element_id, std::unique_ptr< domain::CoordinateMapBase< Frame::BlockLogical, TargetFrame, Dim > > block_map) | |
| ElementMap (const ElementId< Dim > &element_id, const Block< Dim > &block) | |
| Construct from an element_id within the block. The (affine) ElementLogical to BlockLogical map is determined by the element_id. The BlockLogical to TargetFrame map is determined by the block: | |
| const domain::CoordinateMapBase< Frame::BlockLogical, TargetFrame, Dim > & | block_map () const |
| template<typename T> | |
| tnsr::I< T, Dim, TargetFrame > | operator() (const tnsr::I< T, Dim, Frame::ElementLogical > &source_point, const double time=std::numeric_limits< double >::signaling_NaN(), const domain::FunctionsOfTimeMap &functions_of_time={}) const |
| template<typename T> | |
| tnsr::I< T, Dim, Frame::ElementLogical > | inverse (tnsr::I< T, Dim, TargetFrame > target_point, const double time=std::numeric_limits< double >::signaling_NaN(), const domain::FunctionsOfTimeMap &functions_of_time={}) const |
| template<typename T> | |
| InverseJacobian< T, Dim, Frame::ElementLogical, TargetFrame > | inv_jacobian (const tnsr::I< T, Dim, Frame::ElementLogical > &source_point, const double time=std::numeric_limits< double >::signaling_NaN(), const domain::FunctionsOfTimeMap &functions_of_time={}) const |
| template<typename T> | |
| Jacobian< T, Dim, Frame::ElementLogical, TargetFrame > | jacobian (const tnsr::I< T, Dim, Frame::ElementLogical > &source_point, const double time=std::numeric_limits< double >::signaling_NaN(), const domain::FunctionsOfTimeMap &functions_of_time={}) const |
| template<typename T> | |
| InverseHessian< T, Dim, Frame::ElementLogical, TargetFrame > | inv_hessian (const tnsr::I< T, Dim, Frame::ElementLogical > &source_point, const double time=std::numeric_limits< double >::signaling_NaN(), const domain::FunctionsOfTimeMap &functions_of_time={}) const |
| The inverse Hessian of the element map. | |
| void | pup (PUP::er &p) |
Static Public Attributes | |
| static constexpr size_t | dim = Dim |
The CoordinateMap for the Element from the Logical frame to the TargetFrame
An ElementMap takes a CoordinateMap for a Block and an ElementId as input, and then "prepends" the correct affine map to the CoordinateMap so that the map corresponds to the coordinate map for the Element rather than the Block. This allows DomainCreators to only specify the maps for the Blocks without worrying about how the domain may be decomposed beyond that.
| ElementMap< Dim, TargetFrame >::ElementMap | ( | const ElementId< Dim > & | element_id, |
| const Block< Dim > & | block ) |
Construct from an element_id within the block. The (affine) ElementLogical to BlockLogical map is determined by the element_id. The BlockLogical to TargetFrame map is determined by the block:
|
inline |
The inverse Hessian of the element map.
Let \( \xi^i \) be the element logical coordinates, \( x^i \) be the block logical coordinates, and \( y^i \) be the inertial coordinates. The element map maps \( \xi^i \rightarrow x^i \rightarrow y^i \). Thus, the inverse Hessian is
\[\frac{\partial^2\xi^i}{\partial y^j \partial y^k} = \frac{\partial}{\partial y^j}\frac{\partial x^l}{\partial y^k} \frac{\partial \xi^i}{\partial x^l}} = \frac{\partial^2 x^l}{\partial y^j \partial y^k} \frac{\partial \xi^i}{\partial x^l} \]
where we have used the fact
\[\frac{\partial^2 \xi^i}{\partial x^l \partial x^n} = 0. \]