domain_mapper.hpp cstdint memory mfem/linalg/vector.hpp mfem/linalg/densemat.hpp mfem/fem/eltrans.hpp mfem/fem/intrules.hpp serif/mapping/compactification/kelvin.hpp serif/mapping/context.hpp serif/mapping/data.hpp serif/mapping/variation.hpp serif/utils/user_options/mapping/domain_mapper.hpp src/include/serif/mapping/coefficients.hpp src/include/serif/mapping/evaluator.hpp src/include/serif/operators/backend/mfem/element_evaluation.hpp src/include/serif/operators/backend/mfem/element_preparation.hpp src/include/serif/operators/backend/mfem/volume_data.hpp src/lib/serif/geometry/deformation/backend/mfem/geometry_inspection.cpp src/lib/serif/geometry/deformation/backend/mfem/geometry_step.cpp src/lib/serif/mapping/domain_mapper.cpp serif::mapping::DomainMapper serif serif::mapping #pragmaonce #include<cstdint> #include<memory> #include"mfem/linalg/vector.hpp" #include"mfem/linalg/densemat.hpp" #include"mfem/fem/eltrans.hpp" #include"mfem/fem/intrules.hpp" #include"serif/mapping/compactification/kelvin.hpp" #include"serif/mapping/context.hpp" #include"serif/mapping/data.hpp" #include"serif/mapping/variation.hpp" #include"serif/utils/user_options/mapping/domain_mapper.hpp" namespaceserif::mapping{ classDomainMapper{ public: DomainMapper(constDomainMapper&)=delete; DomainMapper&operator=(constDomainMapper&)=delete; ~DomainMapper()=default; DomainMapper(DomainMapper&&)=default; DomainMapper&operator=(DomainMapper&&)=default; DomainMapper( utils::user_options::DomainMapperOptionsoptions, std::unique_ptr<constcompactification::ExteriorDomainMap>exterior_map ); std::unique_ptr<DomainMapper>clone()const; voidset_geometry_cache_enabled(boolenabled)const; [[nodiscard]]boolis_geometry_cache_enabled()constnoexcept; voidclear_geometry_cache()const; [[nodiscard]]DMGeometryCacheStatisticsget_geometry_cache_statistics()const; [[nodiscard]]constDMFixedMeshGeometry*get_fixed_mesh_geometry(mfem::ElementTransformation&transformation,constmfem::IntegrationPoint&ip)const; [[nodiscard]]MappingStatusevaluate_point( constElementMappingData&element_data, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, MappingPointContext&context )const; [[nodiscard]]MappingStatusevaluate_volume( constElementMappingData&element_data, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, VolumeMappingContext&context, constDMReferenceDisplacementSample*displacement_sample=nullptr )const; [[nodiscard]]MappingStatusevaluate_face( constElementMappingData&element_data, mfem::FaceElementTransformations&transformation, FaceElementSideside, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, FaceMappingContext&context )const; [[nodiscard]]MappingStatusevaluate_point_variation( constElementMappingData&element_data, constElementDisplacementData&direction, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, constMappingPointContext&context, DMWorkspace&workspace, MappingPointVariation&variation )const; [[nodiscard]]MappingStatusevaluate_volume_variation( constElementMappingData&element_data, constElementDisplacementData&direction, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, constVolumeMappingContext&context, DMWorkspace&workspace, VolumeMappingVariation&variation, constDMReferenceDisplacementSample*direction_sample=nullptr )const; [[nodiscard]]MappingStatusevaluate_face_variation( constElementMappingData&element_data, constElementDisplacementData&direction, mfem::FaceElementTransformations&transformation, FaceElementSideside, constmfem::IntegrationPoint&ip, constFaceMappingContext&context, DMWorkspace&workspace, FaceMappingVariation&variation )const; [[nodiscard]]boolis_compactified_element(constmfem::ElementTransformation&transformation)constnoexcept; [[nodiscard]]intget_dimension()constnoexcept; [[nodiscard]]constcompactification::ExteriorDomainMap&get_exterior_map()constnoexcept; private: [[nodiscard]]MappingStatusevaluate_point_impl( constElementMappingData&element_data, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, MappingPointContext&context, constDMFixedMeshGeometry*geometry, constDMReferenceDisplacementSample*displacement_sample=nullptr )const; voidvalidate_element_data( constElementMappingData&element_data )const; voidevaluate_displacement_field( constElementDisplacementData&field, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, mfem::Vector&value, mfem::DenseMatrix&jacobian, constmfem::DenseMatrix*inverse_mesh_jacobian )const; [[nodiscard]]MappingStatusevaluate_compactification_coordinate( constElementCompactificationData&compactification, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, CompactificationPointData&point_data, constmfem::DenseMatrix*inverse_mesh_jacobian )const; [[nodiscard]]MappingStatusevaluate_point_variation_impl( constElementMappingData&element_data, constElementDisplacementData&direction, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, constMappingPointContext&context, DMWorkspace&workspace, MappingPointVariation&variation, constmfem::DenseMatrix*inverse_mesh_jacobian, constDMReferenceDisplacementSample*direction_sample=nullptr )const; //Thesearestaticsincetheydonotuseanyclassmembersorworkspace.Reallythesecouldand //maybeshouldbefreefunctions... [[nodiscard]]staticmfem::ElementTransformation&select_face_element_transformation( constmfem::FaceElementTransformations&transformations, FaceElementSideside ); [[nodiscard]]staticconstmfem::IntegrationPoint&select_face_element_integration_point( constmfem::FaceElementTransformations&transformations, FaceElementSideside ); private: mutablestd::unique_ptr<DMGeometryCache>m_geometryCache; utils::user_options::DomainMapperOptionsm_options; std::unique_ptr<constcompactification::ExteriorDomainMap>m_exterior_map; }; }