perf(jacobian-action): major updates to jacobian action application by removing redudant quadrature work. ~5x increase in speed
This commit is contained in:
37
libmeanfield/interface/operators/prepared_constraint.cppm
Normal file
37
libmeanfield/interface/operators/prepared_constraint.cppm
Normal file
@@ -0,0 +1,37 @@
|
||||
module;
|
||||
|
||||
#include <concepts>
|
||||
#include <type_traits>
|
||||
|
||||
#include <mfem.hpp>
|
||||
|
||||
export module mean_field:operators.prepared_constraint;
|
||||
|
||||
export import :model.compiled_fixed_mass;
|
||||
|
||||
export namespace mean_field::operators {
|
||||
template <typename Candidate>
|
||||
concept PreparedConstraint = requires(
|
||||
std::remove_cvref_t<Candidate> &prepared,
|
||||
const std::remove_cvref_t<Candidate> &constPrepared,
|
||||
const typename std::remove_cvref_t<Candidate>::CompiledConstraintType &constraint,
|
||||
const typename std::remove_cvref_t<Candidate>::Dependencies &dependencies,
|
||||
const typename std::remove_cvref_t<Candidate>::JacobianInput &jacobianInput,
|
||||
typename std::remove_cvref_t<Candidate>::JacobianTransposeOutput transposeOutput,
|
||||
const mfem::Vector &residualDual,
|
||||
mfem::Vector &result
|
||||
) {
|
||||
typename std::remove_cvref_t<Candidate>::SpecificationType;
|
||||
typename std::remove_cvref_t<Candidate>::CompiledConstraintType;
|
||||
typename std::remove_cvref_t<Candidate>::Dependencies;
|
||||
typename std::remove_cvref_t<Candidate>::Report;
|
||||
typename std::remove_cvref_t<Candidate>::JacobianInput;
|
||||
typename std::remove_cvref_t<Candidate>::JacobianTransposeOutput;
|
||||
requires models::CompiledConstraint<typename std::remove_cvref_t<Candidate>::CompiledConstraintType>;
|
||||
{ prepared.Prepare(constraint, dependencies) } -> std::same_as<typename std::remove_cvref_t<Candidate>::Report>;
|
||||
{ constPrepared.BuildResidual(result) } -> std::same_as<void>;
|
||||
{ constPrepared.ApplyJacobian(jacobianInput, result) } -> std::same_as<void>;
|
||||
{ constPrepared.ApplyJacobianTranspose(residualDual, transposeOutput) } -> std::same_as<void>;
|
||||
{ constPrepared.IsPrepared() } noexcept -> std::same_as<bool>;
|
||||
};
|
||||
} // namespace mean_field::operators
|
||||
Reference in New Issue
Block a user