equilibrium_plan.hpp serif/model/equilibrium_equations.hpp serif/model/plan.hpp serif/model/detail/surface_plan.hpp serif/operators/concepts.hpp serif/equations/surface_potential.hpp serif/equations/primal_gravity.hpp src/include/serif/backend/mfem/model/binding.hpp src/include/serif/backend/mfem/model/finite_elements.hpp src/include/serif/backend/mfem/model/graph.hpp src/include/serif/model/execution_validation.hpp src/include/serif/model/model.hpp src/include/serif/model/normalization/plan.hpp serif::model::detail::ShapePlan< NoShapeForce > serif::model::detail::ShapePlan< equations::SurfacePotentialBalance > serif::model::EquilibriumPlan serif serif::model serif::model::detail #pragmaonce #include"serif/model/equilibrium_equations.hpp" #include"serif/model/plan.hpp" #include"serif/model/detail/surface_plan.hpp" #include"serif/operators/concepts.hpp" #include"serif/equations/surface_potential.hpp" #include"serif/equations/primal_gravity.hpp" namespaceserif::model { namespacedetail { template<typenameShape> structShapePlan; template<> structShapePlan<NoShapeForce> { usingCoefficients=utils::dependencies::KeyList<>; usingValues=utils::dependencies::KeyList<>; usingRows=utils::dependencies::KeyList<>; }; template<> structShapePlan<equations::SurfacePotentialBalance> { usingCoefficients=typenameOperandTerms<equations::SurfacePotentialBalance::Operands>::Type; usingValues=utils::dependencies::KeyList<discretization::blocks::surface_deformation::coefficients>; usingRows=utils::dependencies::KeyList<discretization::blocks::surface_deformation::shape_equilibrium>; }; } template<typenameEOS,EquilibriumEquationDescriptionDescription,utils::dependencies::IsKeyListPrescribed=utils::dependencies::KeyList<>, utils::dependencies::IsKeyListAdditionalFields=utils::dependencies::KeyList<>> structEquilibriumPlanfinal { staticconstexprboolhas_shape=!std::same_as<typenameDescription::ShapeForce,NoShapeForce>; staticconstexprboolhas_surface=!std::same_as<typenameDescription::SurfaceCondition,NoSurfaceCondition>; staticconstexprboolhas_primal_gravity=[]<typename...Equations>(utils::types::TypeList<Equations...>){ return(std::same_as<Equations,equations::PrimalPoissonBalance>||...); }(typenameDescription::InteriorEquations::Equations{}); usingInterior=detail::InteriorPlan<typename Description::InteriorEquations>; usingShape=detail::ShapePlan<typename Description::ShapeForce>; usingResidualEquations=typenameInterior::EquationsList; usingAvailableFields=utils::dependencies::CombinedKeyList<typename Interior::Coefficients, typename Shape::Coefficients, AdditionalFields>; usingSolvedFields=typenamedetail::RemoveKeys<AvailableFields, Prescribed>::Type; usingResiduals=utils::dependencies::CombinedKeyList<typename Interior::Rows, typename Shape::Rows>; usingSurface=detail::SurfacePlan<typename Description::SurfaceCondition, EOS, AvailableFields, Residuals, SolvedFields, typename Interior::EquationsList>; usingCoefficients=utils::dependencies::CombinedKeyList<typename Interior::Coefficients, typename Shape::Coefficients, typename Surface::Coefficients>; static_assert(!has_shape||!utils::dependencies::ContainsKey<discretization::blocks::surface_deformation::coefficients, Prescribed>, "PrescribegeometrybyselectingNoShapeForceandsupplyingadisplacementfield.Anactiveshape-forceequationusesindependentsolvedsurfacecoordinates."); usingValues=utils::dependencies::CombinedKeyList<typename detail::RemoveKeys<Coefficients, Prescribed>::Type,typenameShape::Values>; //Geometryissuppliedseparatelyevenwhennoequationsolvesfortheshape. usingPhysicalInputs=utils::dependencies::CombinedKeyList<Coefficients, Values, utils::dependencies::KeyList<discretization::blocks::surface_deformation::coefficients>>; usingInactiveRows=std::conditional_t<has_shape,utils::dependencies::KeyList<>,utils::dependencies::KeyList<discretization::blocks::surface_deformation::shape_equilibrium>>; usingLayout=discretization::blocks::SystemLayout<Values, Residuals>; }; }