volume_data.hpp array memory vector mfem/fem/gridfunc.hpp serif/backend/mfem/mapping/domain_mapper.hpp serif/backend/mfem/discretization/term_coefficients.hpp serif/backend/mfem/operators/element_data.hpp serif/backend/mfem/operators/quadrature.hpp serif/backend/mfem/operators/workspace.hpp src/include/serif/backend/mfem/model/discretization.hpp src/include/serif/backend/mfem/operators/volume_inputs.hpp src/include/serif/backend/mfem/operators/volume_stages.hpp src/include/serif/backend/mfem/serialize/options.hpp serif::operators::backend::mfem::volume_keys::Scoped serif::operators::backend::mfem::volume_keys::Scoped::Basis serif::operators::backend::mfem::volume_keys::Scoped::Geometry serif::operators::backend::mfem::volume_keys::Scoped::ReferenceValues serif::operators::backend::mfem::volume_keys::Scoped::PhysicalValues serif::operators::backend::mfem::volume_keys::Scoped::QuadratureLinearization serif::operators::backend::mfem::volume_keys::Scoped::GeometryDerivatives serif::operators::backend::mfem::volume_keys::Scoped::Linearization serif::operators::backend::mfem::volume_keys::Scoped::Bindings serif::operators::backend::mfem::BasisBindings serif::operators::backend::mfem::VolumeDiscretization serif::operators::backend::mfem::VolumeOptions serif::operators::backend::mfem::OperandSamples serif::operators::backend::mfem::ContributionData serif::operators::backend::mfem::VolumeConfiguration serif::operators::backend::mfem::VolumeData serif::operators::backend::mfem::VolumeScratch serif serif::operators serif::operators::backend serif::operators::backend::mfem serif::operators::backend::mfem::volume_keys #pragmaonce #include<array> #include<memory> #include<vector> #include"mfem/fem/gridfunc.hpp" #include"serif/backend/mfem/mapping/domain_mapper.hpp" #include"serif/backend/mfem/discretization/term_coefficients.hpp" #include"serif/backend/mfem/operators/element_data.hpp" #include"serif/backend/mfem/operators/quadrature.hpp" #include"serif/backend/mfem/operators/workspace.hpp" namespaceserif::operators::backend::mfem { usingdiscretization::backend::mfem::ContractionMode; usingdiscretization::backend::mfem::TensorBasisCache; namespacevolume_keys { template<typenameScope> structScoped { template<std::size_tContribution> structBasis { }; template<std::size_tContribution> structGeometry { }; template<std::size_tContribution,typenameOperandT> structReferenceValues { }; template<std::size_tContribution,typenameOperandT> structPhysicalValues { }; template<std::size_tContribution> structQuadratureLinearization { }; template<std::size_tContribution> structGeometryDerivatives{}; structLinearization { }; structBindings { }; }; template<std::size_tContribution> usingBasis=Scoped<void>::Basis<Contribution>; template<std::size_tContribution> usingGeometry=Scoped<void>::Geometry<Contribution>; template<std::size_tContribution,typenameOperandT> usingReferenceValues=Scoped<void>::ReferenceValues<Contribution,OperandT>; template<std::size_tContribution,typenameOperandT> usingPhysicalValues=Scoped<void>::PhysicalValues<Contribution,OperandT>; template<std::size_tContribution> usingQuadratureLinearization=Scoped<void>::QuadratureLinearization<Contribution>; template<std::size_tContribution> usingGeometryDerivatives=Scoped<void>::GeometryDerivatives<Contribution>; usingLinearization=Scoped<void>::Linearization; }//namespacevolume_keys template<std::size_tColumnCount> structBasisBindings { constdiscretization::backend::mfem::DofMap*residual_binding; constdiscretization::backend::mfem::DofMap*displacement_binding; const::mfem::FiniteElementSpace*compactification_space; constmapping::DomainMapper*mapper; longnodes_sequence; std::array<constdiscretization::backend::mfem::DofMap*,ColumnCount>columns; booloperator==(constBasisBindings&)const=default; }; template<typenameTestT,typenameSchemaT> structVolumeDiscretization { usingRowBinding=discretization::backend::mfem::TermBinding<TestT, SchemaT>; usingDisplacementBinding=discretization::backend::mfem::TermBinding<discretization::blocks::displacement::vector, SchemaT>; constRowBinding&residual_binding; constDisplacementBinding&displacement_binding; const::mfem::GridFunction&compactification; constmapping::DomainMapper&mapper; const::mfem::FiniteElementSpace*compactification_space{compactification.FESpace()}; longcompactification_sequence{compactification_space==nullptr?-1:compactification_space->GetSequence()}; }; template<typenameTestT,typenameSchemaT> VolumeDiscretization(constdiscretization::backend::mfem::TermBinding<TestT, SchemaT>&, constdiscretization::backend::mfem::TermBinding<discretization::blocks::displacement::vector, SchemaT>&,const::mfem::GridFunction&, constmapping::DomainMapper&)->VolumeDiscretization<TestT, SchemaT>; structVolumeOptions { discretization::quadrature::Policyquadrature_policy{{}}; ContractionModecontraction_mode{ContractionMode::automatic}; }; template<typenameElementT> usingElementBatch=std::vector<std::shared_ptr<constElementT>>; structOperandSamples { ElementBatch<::mfem::Vector>reference; ElementBatch<::mfem::Vector>physical; }; template<std::size_tOperandCount> structContributionData { ElementBatch<ElementData<OperandCount>>elements; doubleresidual_offset{0.0}; }; template<VolumeEquationEquationT,typenameSchemaT> structVolumeConfiguration { usingDisplacementBinding=typenameVolumeDiscretization<typename EquationT::Test, SchemaT>::DisplacementBinding; std::shared_ptr<constEquationT>equation; VolumeDiscretization<typename EquationT::Test, SchemaT>discretization; VolumeOptionsoptions; }; template<VolumeEquationEquationT,typenameSchemaT> structVolumeData { usingEquation=EquationT; usingSchema=SchemaT; usingPlan=EquationPlan<EquationT>; std::shared_ptr<constVolumeConfiguration<EquationT,SchemaT>>configuration; BasisBindings<Plan::column_count>bindings; std::array<ElementBatch<ElementData<Plan::operand_count>>,std::tuple_size_v<equations::ContributionsOf<EquationT>>>contributions; std::array<ElementBatch<::mfem::DenseMatrix>,std::tuple_size_v<equations::ContributionsOf<EquationT>>>geometry_derivatives; ::mfem::Vectorresidual; }; structVolumeScratch { Workspaceworkspace; TensorBasisCachebasis; }; }//namespaceserif::operators::backend::mfem