feat(libmeanfield): variadic refactor

also added normaliztion operator
This commit is contained in:
2026-09-06 10:15:00 -04:00
parent 71423d543f
commit 76818f2f82
63 changed files with 28794 additions and 1119 deletions

View File

@@ -903,6 +903,47 @@ namespace mean_field::operators {
++m_algebraicJacobianStatistics.bernoulliConstantApplications;
}
void PreparedHydrostaticEquilibriumOperator::ApplyRotationAmplitudeJacobianAction(
const double fractionalAngularVelocityVariation,
mfem::Vector &action
) const {
VerifyPrepared();
MFEM_VERIFY(
std::isfinite(fractionalAngularVelocityVariation),
"Prepared hydrostatic rotation-amplitude Jacobian received a non-finite variation."
);
mfem::Vector localAction(m_fem.enthalpyFes->GetVSize());
localAction = 0.0;
mfem::Vector weightedVariation;
mfem::Vector elementAction;
for (const ElementPAData &data : m_elements) {
const int quadraturePointCount = data.quadratureWeights.Size();
MFEM_VERIFY(
data.rotationPotential.Size() == quadraturePointCount,
"Prepared hydrostatic rotation-amplitude Jacobian has stale rotation data."
);
weightedVariation.SetSize(quadraturePointCount);
for (int quadraturePoint = 0; quadraturePoint < quadraturePointCount; ++quadraturePoint) {
weightedVariation(quadraturePoint) =
-2.0 * fractionalAngularVelocityVariation * data.quadratureWeights(quadraturePoint) *
data.rotationPotential(quadraturePoint);
}
elementAction.SetSize(data.enthalpyDofs.Size());
data.enthalpyBasis.MultTranspose(weightedVariation, elementAction);
if (data.enthalpyDofTransformation != nullptr) {
data.enthalpyDofTransformation->TransformDual(elementAction);
}
localAction.AddElementVector(data.enthalpyDofs, elementAction);
}
local_to_true(*m_fem.enthalpyFes, localAction, m_fullEnthalpyAction);
action.SetSize(m_context.GetEnthalpyMap().reduced_size());
m_context.GetEnthalpyMap().gather(m_fullEnthalpyAction, action);
++m_algebraicJacobianStatistics.rotationAmplitudeApplications;
}
void PreparedHydrostaticEquilibriumOperator::ApplyAlgebraicJacobianAction(
const mfem::Vector &enthalpyVariation,
const mfem::Vector &gravityPotentialVariation,