domain_mapper.hpp expected memory mfem/linalg/vector.hpp mfem/linalg/densemat.hpp mfem/fem/eltrans.hpp mfem/fem/intrules.hpp serif/backend/mfem/mapping/compactification/kelvin.hpp serif/backend/mfem/mapping/context.hpp serif/backend/mfem/mapping/data.hpp serif/backend/mfem/mapping/variation.hpp serif/utils/user_options/mapping/domain_mapper.hpp src/include/serif/backend/mfem/discretization/resources.hpp src/include/serif/backend/mfem/mapping/evaluator.hpp src/include/serif/backend/mfem/operators/element_preparation.hpp src/include/serif/backend/mfem/operators/geometry_derivatives.hpp src/include/serif/backend/mfem/operators/volume_data.hpp src/include/serif/backend/mfem/serialize/resources.hpp src/include/serif/backend/mfem/solver/admissibility/geometry.hpp src/include/serif/mapping/mapping.hpp src/lib/serif/backend/mfem/geometry/deformation/geometry_step.cpp src/lib/serif/backend/mfem/mapping/domain_mapper.cpp serif::mapping::DomainMapper serif serif::mapping #pragmaonce #include<expected> #include<memory> #include"mfem/linalg/vector.hpp" #include"mfem/linalg/densemat.hpp" #include"mfem/fem/eltrans.hpp" #include"mfem/fem/intrules.hpp" #include"serif/backend/mfem/mapping/compactification/kelvin.hpp" #include"serif/backend/mfem/mapping/context.hpp" #include"serif/backend/mfem/mapping/data.hpp" #include"serif/backend/mfem/mapping/variation.hpp" #include"serif/utils/user_options/mapping/domain_mapper.hpp" namespaceserif::mapping{ [[nodiscard]]std::expected<DMFixedMeshGeometry,MappingStatus>sample_fixed_mesh_geometry( mfem::ElementTransformation&transformation,constmfem::IntegrationPoint&point ); 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 ); [[nodiscard]]MappingStatusevaluate_point( constElementMappingData&element_data, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, MappingPointContext&context )const; [[nodiscard]]MappingStatusevaluate_point( constElementMappingData&element_data, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, MappingPointContext&context, constDMFixedMeshGeometry&fixed_geometry )const; [[nodiscard]]MappingStatusevaluate_volume( constElementMappingData&element_data, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, DMWorkspace&workspace, VolumeMappingContext&context, constDMReferenceDisplacementSample*displacement_sample=nullptr, constDMFixedMeshGeometry*fixed_geometry=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_point_variation( constElementMappingData&element_data, constElementDisplacementData&direction, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, constMappingPointContext&context, DMWorkspace&workspace, MappingPointVariation&variation, 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=nullptr )const; [[nodiscard]]MappingStatusevaluate_volume_direction_variation( constElementMappingData&element_data, constElementDisplacementData&direction, mfem::ElementTransformation&transformation, constmfem::IntegrationPoint&ip, constVolumeMappingContext&context, DMWorkspace&workspace, VolumeMappingVariation&variation, constDMReferenceDisplacementSample&direction_sample, constCompactificationPointData*compactification_sample, constmfem::DenseMatrix&inverse_mesh_jacobian )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]]constutils::user_options::DomainMapperOptions&options()constnoexcept{returnm_options;} [[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_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, constCompactificationPointData*compactification_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: utils::user_options::DomainMapperOptionsm_options; std::unique_ptr<constcompactification::ExteriorDomainMap>m_exterior_map; }; }