SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
serif::mapping::DomainMapper Class Reference

#include <domain_mapper.hpp>

Collaboration diagram for serif::mapping::DomainMapper:
[legend]

Public Member Functions

 DomainMapper (const DomainMapper &)=delete
 
DomainMapper & operator= (const DomainMapper &)=delete
 
 ~DomainMapper ()=default
 
 DomainMapper (DomainMapper &&)=default
 
DomainMapper & operator= (DomainMapper &&)=default
 
 DomainMapper (utils::user_options::DomainMapperOptions options, std::unique_ptr< const compactification::ExteriorDomainMap > exterior_map)
 
MappingStatus evaluate_point (const ElementMappingData &element_data, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, DMWorkspace &workspace, MappingPointContext &context) const
 
MappingStatus evaluate_point (const ElementMappingData &element_data, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, DMWorkspace &workspace, MappingPointContext &context, const DMFixedMeshGeometry &fixed_geometry) const
 Map a point using checked fixed geometry sampled by the caller.
 
MappingStatus evaluate_volume (const ElementMappingData &element_data, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, DMWorkspace &workspace, VolumeMappingContext &context, const DMReferenceDisplacementSample *displacement_sample=nullptr, const DMFixedMeshGeometry *fixed_geometry=nullptr) const
 Map a volume point, optionally reusing fixed geometry owned by the reference graph node.
 
MappingStatus evaluate_face (const ElementMappingData &element_data, mfem::FaceElementTransformations &transformation, FaceElementSide side, const mfem::IntegrationPoint &ip, DMWorkspace &workspace, FaceMappingContext &context) const
 
MappingStatus evaluate_point_variation (const ElementMappingData &element_data, const ElementDisplacementData &direction, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, const MappingPointContext &context, DMWorkspace &workspace, MappingPointVariation &variation) const
 
MappingStatus evaluate_point_variation (const ElementMappingData &element_data, const ElementDisplacementData &direction, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, const MappingPointContext &context, DMWorkspace &workspace, MappingPointVariation &variation, const mfem::DenseMatrix &inverse_mesh_jacobian) const
 Differentiate a point map using its already sampled fixed-mesh inverse Jacobian.
 
MappingStatus evaluate_compactification_coordinate (const ElementCompactificationData &compactification, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, DMWorkspace &workspace, CompactificationPointData &point_data, const mfem::DenseMatrix *inverse_mesh_jacobian=nullptr) const
 Sample the fixed compactification coordinate and its gradient in mesh coordinates.
 
MappingStatus evaluate_volume_direction_variation (const ElementMappingData &element_data, const ElementDisplacementData &direction, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, const VolumeMappingContext &context, DMWorkspace &workspace, VolumeMappingVariation &variation, const DMReferenceDisplacementSample &direction_sample, const CompactificationPointData *compactification_sample, const mfem::DenseMatrix &inverse_mesh_jacobian) const
 Differentiate the physical volume map along one of several directions sharing this point.
 
MappingStatus evaluate_face_variation (const ElementMappingData &element_data, const ElementDisplacementData &direction, mfem::FaceElementTransformations &transformation, FaceElementSide side, const mfem::IntegrationPoint &ip, const FaceMappingContext &context, DMWorkspace &workspace, FaceMappingVariation &variation) const
 
bool is_compactified_element (const mfem::ElementTransformation &transformation) const noexcept
 
int get_dimension () const noexcept
 
const utils::user_options::DomainMapperOptions & options () const noexcept
 Expose the immutable mapping prescription for reproducible reconstruction.
 
const compactification::ExteriorDomainMap & get_exterior_map () const noexcept
 

Private Member Functions

MappingStatus evaluate_point_impl (const ElementMappingData &element_data, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, DMWorkspace &workspace, MappingPointContext &context, const DMFixedMeshGeometry &geometry, const DMReferenceDisplacementSample *displacement_sample=nullptr) const
 
void validate_element_data (const ElementMappingData &element_data) const
 
void evaluate_displacement_field (const ElementDisplacementData &field, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, DMWorkspace &workspace, mfem::Vector &value, mfem::DenseMatrix &jacobian, const mfem::DenseMatrix *inverse_mesh_jacobian) const
 
MappingStatus evaluate_point_variation_impl (const ElementMappingData &element_data, const ElementDisplacementData &direction, mfem::ElementTransformation &transformation, const mfem::IntegrationPoint &ip, const MappingPointContext &context, DMWorkspace &workspace, MappingPointVariation &variation, const mfem::DenseMatrix *inverse_mesh_jacobian, const DMReferenceDisplacementSample *direction_sample=nullptr, const CompactificationPointData *compactification_sample=nullptr) const
 

Static Private Member Functions

static mfem::ElementTransformation & select_face_element_transformation (const mfem::FaceElementTransformations &transformations, FaceElementSide side)
 
static const mfem::IntegrationPoint & select_face_element_integration_point (const mfem::FaceElementTransformations &transformations, FaceElementSide side)
 

Private Attributes

utils::user_options::DomainMapperOptions m_options
 
std::unique_ptr< const compactification::ExteriorDomainMap > m_exterior_map
 

Constructor & Destructor Documentation

◆ DomainMapper() [1/3]

serif::mapping::DomainMapper::DomainMapper ( const DomainMapper & )
delete

◆ ~DomainMapper()

serif::mapping::DomainMapper::~DomainMapper ( )
default

◆ DomainMapper() [2/3]

serif::mapping::DomainMapper::DomainMapper ( DomainMapper && )
default

◆ DomainMapper() [3/3]

serif::mapping::DomainMapper::DomainMapper ( utils::user_options::DomainMapperOptions options,
std::unique_ptr< const compactification::ExteriorDomainMap > exterior_map )

Member Function Documentation

◆ evaluate_compactification_coordinate()

MappingStatus serif::mapping::DomainMapper::evaluate_compactification_coordinate ( const ElementCompactificationData & compactification,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
DMWorkspace & workspace,
CompactificationPointData & point_data,
const mfem::DenseMatrix * inverse_mesh_jacobian = nullptr ) const
nodiscard

Sample the fixed compactification coordinate and its gradient in mesh coordinates.

Parameters
inverse_mesh_jacobianOptional inverse Jacobian from the same element and point.
Note
Reuse this sample for several displacement directions at this point. Refresh it when the compactification coefficients, element, point or reference mesh change.

◆ evaluate_displacement_field()

void serif::mapping::DomainMapper::evaluate_displacement_field ( const ElementDisplacementData & field,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
DMWorkspace & workspace,
mfem::Vector & value,
mfem::DenseMatrix & jacobian,
const mfem::DenseMatrix * inverse_mesh_jacobian ) const
private

◆ evaluate_face()

MappingStatus serif::mapping::DomainMapper::evaluate_face ( const ElementMappingData & element_data,
mfem::FaceElementTransformations & transformation,
FaceElementSide side,
const mfem::IntegrationPoint & ip,
DMWorkspace & workspace,
FaceMappingContext & context ) const
nodiscard

◆ evaluate_face_variation()

MappingStatus serif::mapping::DomainMapper::evaluate_face_variation ( const ElementMappingData & element_data,
const ElementDisplacementData & direction,
mfem::FaceElementTransformations & transformation,
FaceElementSide side,
const mfem::IntegrationPoint & ip,
const FaceMappingContext & context,
DMWorkspace & workspace,
FaceMappingVariation & variation ) const
nodiscard

◆ evaluate_point() [1/2]

MappingStatus serif::mapping::DomainMapper::evaluate_point ( const ElementMappingData & element_data,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
DMWorkspace & workspace,
MappingPointContext & context ) const
nodiscard

◆ evaluate_point() [2/2]

MappingStatus serif::mapping::DomainMapper::evaluate_point ( const ElementMappingData & element_data,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
DMWorkspace & workspace,
MappingPointContext & context,
const DMFixedMeshGeometry & fixed_geometry ) const
nodiscard

Map a point using checked fixed geometry sampled by the caller.

Note
Geometry must come from sample_fixed_mesh_geometry for this exact element, point, and mesh revision. Dimensions, finite values, positive weight and invertibility are checked; identity and freshness remain the caller's responsibility. No sample is retained by the mapper.

◆ evaluate_point_impl()

MappingStatus serif::mapping::DomainMapper::evaluate_point_impl ( const ElementMappingData & element_data,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
DMWorkspace & workspace,
MappingPointContext & context,
const DMFixedMeshGeometry & geometry,
const DMReferenceDisplacementSample * displacement_sample = nullptr ) const
nodiscardprivate

◆ evaluate_point_variation() [1/2]

MappingStatus serif::mapping::DomainMapper::evaluate_point_variation ( const ElementMappingData & element_data,
const ElementDisplacementData & direction,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
const MappingPointContext & context,
DMWorkspace & workspace,
MappingPointVariation & variation ) const
nodiscard

◆ evaluate_point_variation() [2/2]

MappingStatus serif::mapping::DomainMapper::evaluate_point_variation ( const ElementMappingData & element_data,
const ElementDisplacementData & direction,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
const MappingPointContext & context,
DMWorkspace & workspace,
MappingPointVariation & variation,
const mfem::DenseMatrix & inverse_mesh_jacobian ) const
nodiscard

Differentiate a point map using its already sampled fixed-mesh inverse Jacobian.

Note
The inverse must come from the checked fixed geometry for this exact element, point and mesh revision; context must describe the same accepted displacement. Size and finite values are checked. Non-VALUE finite elements retain their original physical-gradient evaluation path. Neither the inverse nor any field sample is retained.

◆ evaluate_point_variation_impl()

MappingStatus serif::mapping::DomainMapper::evaluate_point_variation_impl ( const ElementMappingData & element_data,
const ElementDisplacementData & direction,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
const MappingPointContext & context,
DMWorkspace & workspace,
MappingPointVariation & variation,
const mfem::DenseMatrix * inverse_mesh_jacobian,
const DMReferenceDisplacementSample * direction_sample = nullptr,
const CompactificationPointData * compactification_sample = nullptr ) const
nodiscardprivate

◆ evaluate_volume()

MappingStatus serif::mapping::DomainMapper::evaluate_volume ( const ElementMappingData & element_data,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
DMWorkspace & workspace,
VolumeMappingContext & context,
const DMReferenceDisplacementSample * displacement_sample = nullptr,
const DMFixedMeshGeometry * fixed_geometry = nullptr ) const
nodiscard

Map a volume point, optionally reusing fixed geometry owned by the reference graph node.

Note
Supplied geometry must belong to this element and point at the current mesh revision.

◆ evaluate_volume_direction_variation()

MappingStatus serif::mapping::DomainMapper::evaluate_volume_direction_variation ( const ElementMappingData & element_data,
const ElementDisplacementData & direction,
mfem::ElementTransformation & transformation,
const mfem::IntegrationPoint & ip,
const VolumeMappingContext & context,
DMWorkspace & workspace,
VolumeMappingVariation & variation,
const DMReferenceDisplacementSample & direction_sample,
const CompactificationPointData * compactification_sample,
const mfem::DenseMatrix & inverse_mesh_jacobian ) const
nodiscard

Differentiate the physical volume map along one of several directions sharing this point.

Parameters
direction_sampleThe displacement direction's value and canonical-element gradient at this point.
compactification_sampleMust match this point and the frozen coefficients; it is ignored on interior elements. Its dimension and finite values are checked before use.
inverse_mesh_jacobiancontext.quadrature.J_element_to_physical_inverse times context.mapping.mapping_jacobian, formed once per point by the caller.

◆ get_dimension()

int serif::mapping::DomainMapper::get_dimension ( ) const
nodiscardnoexcept

◆ get_exterior_map()

const compactification::ExteriorDomainMap & serif::mapping::DomainMapper::get_exterior_map ( ) const
nodiscardnoexcept

◆ is_compactified_element()

bool serif::mapping::DomainMapper::is_compactified_element ( const mfem::ElementTransformation & transformation) const
nodiscardnoexcept

◆ operator=() [1/2]

DomainMapper & serif::mapping::DomainMapper::operator= ( const DomainMapper & )
delete

◆ operator=() [2/2]

DomainMapper & serif::mapping::DomainMapper::operator= ( DomainMapper && )
default

◆ options()

const utils::user_options::DomainMapperOptions & serif::mapping::DomainMapper::options ( ) const
inlinenodiscardnoexcept

Expose the immutable mapping prescription for reproducible reconstruction.

◆ select_face_element_integration_point()

const mfem::IntegrationPoint & serif::mapping::DomainMapper::select_face_element_integration_point ( const mfem::FaceElementTransformations & transformations,
FaceElementSide side )
staticnodiscardprivate

◆ select_face_element_transformation()

mfem::ElementTransformation & serif::mapping::DomainMapper::select_face_element_transformation ( const mfem::FaceElementTransformations & transformations,
FaceElementSide side )
staticnodiscardprivate

◆ validate_element_data()

void serif::mapping::DomainMapper::validate_element_data ( const ElementMappingData & element_data) const
private

Member Data Documentation

◆ m_exterior_map

std::unique_ptr<const compactification::ExteriorDomainMap> serif::mapping::DomainMapper::m_exterior_map
private

◆ m_options

utils::user_options::DomainMapperOptions serif::mapping::DomainMapper::m_options
private

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