surface_plan.hpp serif/geometry/surface/automatic.hpp serif/model/equilibrium_equations.hpp src/include/serif/model/equilibrium_plan.hpp serif::model::detail::SurfaceFieldHint serif::model::detail::SurfaceFieldHint< Equation, std::void_t< typename Equation::IsobaricSurfaceField > > serif::model::detail::UniqueSurfaceField< utils::dependencies::KeyList<> > serif::model::detail::UniqueSurfaceField< utils::dependencies::KeyList< Field, Others... > > serif::model::detail::PreferredSurfaceField< utils::types::TypeList< Equations... > > serif::model::detail::SelectedSurface serif::model::detail::SelectedSurface< Selection, true > serif::model::detail::SurfacePlan< NoSurfaceCondition, EOS, Fields, Rows, Solved, Equations > serif::model::detail::SurfacePlan< geometry::surface::Isobaric, EOS, Fields, Rows, Solved, Equations > serif serif::model serif::model::detail #pragmaonce #include"serif/geometry/surface/automatic.hpp" #include"serif/model/equilibrium_equations.hpp" namespaceserif::model::detail { template<typenameEquation,typename=void> structSurfaceFieldHint { usingType=utils::dependencies::KeyList<>; }; template<typenameEquation> structSurfaceFieldHint<Equation,std::void_t<typenameEquation::IsobaricSurfaceField>> { usingType=utils::dependencies::KeyList<typename Equation::IsobaricSurfaceField>; }; template<typenameFields> structUniqueSurfaceField; template<> structUniqueSurfaceField<utils::dependencies::KeyList<>> { usingType=void; }; template<typenameField,typename...Others> structUniqueSurfaceField<utils::dependencies::KeyList<Field,Others...>> { static_assert(sizeof...(Others)==0,"TheselectedequationsnameconflictingIsobaricSurfaceFieldtypes.Chooseonephysicalfieldfortheisobariccondition."); usingType=Field; }; template<typenameEquations> structPreferredSurfaceField; template<typename...Equations> structPreferredSurfaceField<utils::types::TypeList<Equations...>>:UniqueSurfaceField<utils::dependencies::CombinedKeyList<typenameSurfaceFieldHint<Equations>::Type...>> { }; template<typenameSelection,boolSupported> structSelectedSurface { usingFormulation=void; usingCoefficients=utils::dependencies::KeyList<>; usingRows=utils::dependencies::KeyList<>; staticconstexprboolsupported=Supported; }; template<typenameSelection> structSelectedSurface<Selection,true> { usingFormulation=typenameSelection::Formulation; usingCoefficients=typenameFormulation::StateTerms; usingRows=utils::dependencies::KeyList<typename Formulation::Test>; staticconstexprboolsupported=true; }; template<typenameCondition,typenameEOS,typenameFields,typenameRows,typenameSolved,typenameEquations> structSurfacePlan; template<typenameEOS,typenameFields,typenameRows,typenameSolved,typenameEquations> structSurfacePlan<NoSurfaceCondition,EOS,Fields,Rows,Solved,Equations>:SelectedSurface<void,false> { staticconstexprboolsupported=true; }; template<typenameEOS,typenameFields,typenameRows,typenameSolved,typenameEquations> structSurfacePlan<geometry::surface::Isobaric,EOS,Fields,Rows,Solved,Equations>:SelectedSurface< geometry::surface::AutomaticPressureSurface<EOS,Fields,Rows,Solved,typenamePreferredSurfaceField<Equations>::Type>, geometry::surface::AutomaticPressureSurfaceCompilable<EOS,Fields,Rows,Solved,typenamePreferredSurfaceField<Equations>::Type>> { }; }