concepts.hpp serif/discretization/blocks/fields.hpp src/compile_time_checks/serif/discretization/blocks/fields.cpp src/include/serif/backend/mfem/discretization/quadrature/mfem_static_order.hpp src/include/serif/discretization/blocks/blocks.hpp src/include/serif/discretization/blocks/runtime.hpp src/include/serif/discretization/blocks/traits.hpp src/include/serif/discretization/forms/forms.hpp src/include/serif/discretization/forms/operands.hpp src/include/serif/solver/normalization/metrics.hpp src/include/serif/solver/preconditioner/default_preconditioners.hpp serif serif::discretization serif::discretization::blocks This file defines concepts for blocks in the discretization framework. Emily M. Boudreaux #pragmaonce #include"serif/discretization/blocks/fields.hpp" namespaceserif::discretization::blocks{ template<typenameFieldCandidate> conceptField=std::derived_from<FieldCandidate,field>; template<typenameT> conceptTerm=std::derived_from<std::remove_cvref_t<T>,term_base>&&//atermmustderivefromterm_base requires{typenamestd::remove_cvref_t<T>::field_type;}&&//atermmusthaveafield_typemember Field<typename std::remove_cvref_t<T>::field_type>;//Thatfieldtypemembermustbeavalidfield template<typenameT> conceptHasFunctionalSpace= Term<T>&& requires{ typenamestd::remove_cvref_t<T>::FunctionalSpace; }; template<typenameT> conceptHasSupport= Term<T>&& requires{ typenamestd::remove_cvref_t<T>::Support; }; template<typenameT> conceptHasQuantity= Term<T>&& requires{ typenamestd::remove_cvref_t<T>::Quantity; }; template<typenameT> conceptHasValueBlock= Term<T>&& requires{ typenamestd::remove_cvref_t<T>::value; }; template<typenameT> conceptHasResidualBlock= Term<T>&& requires{ typenamestd::remove_cvref_t<T>::residual; }; template<typenameT> conceptSpatialTerm= Term<T>&& HasFunctionalSpace<T>&& HasSupport<T>; template<typenameT> conceptGlobalScalarTerm=Term<T>&&HasSupport<T>&&!HasFunctionalSpace<T>&&std::derived_from<std::remove_cvref_t<T>,global_scalar>; }