feat(libmeanfield): variadic refactor
also added normaliztion operator
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user