mass_normalization.hpp cmath string_view serif/equations/contributions.hpp serif/equations/point.hpp serif/utils/error/errors.hpp src/compile_time_checks/serif/model/barotropic_density.cpp src/compile_time_checks/serif/model/density_primal.cpp src/compile_time_checks/serif/model/execution_validation.cpp src/compile_time_checks/serif/model/normalization.cpp src/compile_time_checks/serif/model/scalar_row.cpp src/compile_time_checks/serif/operators/coordinate_identity_meanfield.cpp src/compile_time_checks/serif/operators/plan.cpp src/compile_time_checks/serif/solver/normalization/plan.cpp src/include/serif/equations/equations.hpp serif::equations::MassNormalization serif serif::equations File containing the mass normalization equation, which enforces a global constraint on the total mass of a system. Emily M. Boudreaux #pragmaonce #include<cmath> #include<string_view> #include"serif/equations/contributions.hpp" #include"serif/equations/point.hpp" #include"serif/utils/error/errors.hpp" namespaceserif::equations{ classMassNormalizationfinal:publicContribution<discretization::forms::Operand<discretization::blocks::barotropic_constant::mass_normalization>>{ public: usingDensity=discretization::blocks::density::mass; usingResidualQuantity=dimensions::Mass; usingDensityValue=discretization::forms::Operand<Density>; usingOperands=utils::types::TypeList<DensityValue>; staticconstexprstd::string_viewname="massnormalization"; explicitMassNormalization(constdoubletarget_mass) :m_target_mass(target_mass){ usingnamespaceutils::errors; serif_ensure<SERiFErrorCode::INVALID_ARGUMENT,std::invalid_argument>(std::isfinite(target_mass)&&target_mass>0.0,"Targetmassmustbefiniteandpositive."); } [[nodiscard]]staticPointLinearization<Operands>evaluate(constEquationPoint<Operands>&point){ PointLinearization<Operands>result; result.residual=point.fields.get<Density>(); result.field_derivatives.get<Density>()=1.0; returnresult; } [[nodiscard]]staticintadditional_order(DensityValue/*orderoperandtype*/,int){ return0; } [[nodiscard]]doubleresidual_offset()const{ return-m_target_mass; } private: doublem_target_mass; }; }//namespaceserif::equations