module; #include #include #include export module mean_field:operators.prepared_constraint; export import :model.compiled_fixed_mass; export namespace mean_field::operators { template concept PreparedConstraint = requires( std::remove_cvref_t &prepared, const std::remove_cvref_t &constPrepared, const typename std::remove_cvref_t::CompiledConstraintType &constraint, const typename std::remove_cvref_t::Dependencies &dependencies, const typename std::remove_cvref_t::JacobianInput &jacobianInput, typename std::remove_cvref_t::JacobianTransposeOutput transposeOutput, const mfem::Vector &residualDual, mfem::Vector &result ) { typename std::remove_cvref_t::SpecificationType; typename std::remove_cvref_t::CompiledConstraintType; typename std::remove_cvref_t::Dependencies; typename std::remove_cvref_t::Report; typename std::remove_cvref_t::JacobianInput; typename std::remove_cvref_t::JacobianTransposeOutput; requires models::CompiledConstraint::CompiledConstraintType>; { prepared.Prepare(constraint, dependencies) } -> std::same_as::Report>; { constPrepared.BuildResidual(result) } -> std::same_as; { constPrepared.ApplyJacobian(jacobianInput, result) } -> std::same_as; { constPrepared.ApplyJacobianTranspose(residualDual, transposeOutput) } -> std::same_as; { constPrepared.IsPrepared() } noexcept -> std::same_as; }; } // namespace mean_field::operators