physical_coordinates.hpp concepts type_traits serif/solver/normalization/plan.hpp src/compile_time_checks/serif/solver/normalization/plan.cpp src/include/serif/model/normalization/plan.hpp src/include/serif/solver/normalization/normalization.hpp serif serif::solver serif::solver::normalization serif::solver::normalization::detail #pragmaonce #include<concepts> #include<type_traits> #include"serif/solver/normalization/plan.hpp" namespaceserif::solver::normalization { namespacedetail { template<typenameCoordinateT> [[nodiscard]]constevalautodefault_metric() { usingTerm=typenamedecltype(metric_term<CoordinateT>())::type; ifconstexpr(discretization::blocks::SpatialTerm<Term>) { returnstd::type_identity<ReferenceVolumeMetric<Term>>{}; } elseifconstexpr(discretization::blocks::GlobalScalarTerm<Term>) { returnstd::type_identity<UnitMetric>{}; } else { returnstd::type_identity<void>{}; } } } template<discretization::blocks::HasQuantityTermT> requires(!std::same_as<typenamedecltype(detail::default_metric<TermT>())::type,void>) usingPhysicalValueRule=utils::dependencies::Binding<TermT,PhysicalRieszCoordinate<typenameTermT::Quantity,typenamedecltype(detail::default_metric<TermT>())::type>>; template<typenameEquationT> requiresrequires { typenameEquationT::ResidualQuantity; }&&(!std::same_as<typenamedecltype(detail::default_metric<EquationT>())::type,void>) usingPhysicalResidualRule=utils::dependencies::Binding<EquationT,PhysicalRieszCoordinate<typenameEquationT::ResidualQuantity,typenamedecltype(detail::default_metric<EquationT>())::type>>; }