feat(support): continued migration to new field dof support system
mass normaliztion, gravity, displacement, and hydrostatic equilibrium are now migrated
This commit is contained in:
@@ -114,6 +114,15 @@ namespace mean_field::operators {
|
||||
"PreparedMassNormalizationOperator received a mapper with the "
|
||||
"wrong dimension."
|
||||
);
|
||||
|
||||
MFEM_VERIFY(
|
||||
m_gravityContext.GetDensityMap().full_size() == m_fem.densityFes->GetTrueVSize() &&
|
||||
m_gravityContext.GetDisplacementMap().full_size() == m_fem.displacementFes->GetTrueVSize(),
|
||||
"PreparedMassNormalizationOperator received incompatible shared FieldDof maps."
|
||||
);
|
||||
|
||||
m_densityVariationTrue.SetSize(m_gravityContext.GetDensityMap().full_size());
|
||||
m_displacementVariationTrue.SetSize(m_gravityContext.GetDisplacementMap().full_size());
|
||||
}
|
||||
|
||||
PreparedMassNormalizationReport PreparedMassNormalizationOperator::Prepare(
|
||||
@@ -167,12 +176,12 @@ namespace mean_field::operators {
|
||||
}
|
||||
|
||||
if (refreshGeometry) {
|
||||
RefreshGeometry(m_gravityContext.GetGeometryContext().GetDisplacement());
|
||||
RefreshGeometry(m_gravityContext.GetGeometryContext().GetDisplacementTrue());
|
||||
report.refreshedGeometry = true;
|
||||
}
|
||||
|
||||
if (refreshDensity) {
|
||||
RefreshDensity(m_gravityContext.GetDensity());
|
||||
RefreshDensity(m_gravityContext.GetDensityTrue());
|
||||
report.refreshedDensity = true;
|
||||
}
|
||||
|
||||
@@ -476,8 +485,16 @@ namespace mean_field::operators {
|
||||
mfem::Vector &action
|
||||
) const {
|
||||
VerifyPrepared();
|
||||
|
||||
MFEM_VERIFY(
|
||||
densityVariation.Size() == m_gravityContext.GetDensityMap().reduced_size(),
|
||||
"Mass-normalization density action received a supported vector with the wrong size."
|
||||
);
|
||||
validate_finite_vector(densityVariation, "Mass-normalization density action received a non-finite value.");
|
||||
m_gravityContext.GetDensityMap().scatter(densityVariation, m_densityVariationTrue);
|
||||
|
||||
action.SetSize(1);
|
||||
action(0) = GlobalSum(EvaluateDensityActionLocal(densityVariation));
|
||||
action(0) = GlobalSum(EvaluateDensityActionLocal(m_densityVariationTrue));
|
||||
++m_actionStatistics.densityApplications;
|
||||
}
|
||||
|
||||
@@ -486,8 +503,18 @@ namespace mean_field::operators {
|
||||
mfem::Vector &action
|
||||
) const {
|
||||
VerifyPrepared();
|
||||
|
||||
MFEM_VERIFY(
|
||||
displacementVariation.Size() == m_gravityContext.GetDisplacementMap().reduced_size(),
|
||||
"Mass-normalization displacement action received a supported vector with the wrong size."
|
||||
);
|
||||
validate_finite_vector(
|
||||
displacementVariation, "Mass-normalization displacement action received a non-finite value."
|
||||
);
|
||||
m_gravityContext.GetDisplacementMap().scatter(displacementVariation, m_displacementVariationTrue);
|
||||
|
||||
action.SetSize(1);
|
||||
action(0) = GlobalSum(EvaluateDisplacementActionLocal(displacementVariation));
|
||||
action(0) = GlobalSum(EvaluateDisplacementActionLocal(m_displacementVariationTrue));
|
||||
++m_actionStatistics.displacementApplications;
|
||||
}
|
||||
|
||||
@@ -498,8 +525,25 @@ namespace mean_field::operators {
|
||||
) const {
|
||||
VerifyPrepared();
|
||||
|
||||
MFEM_VERIFY(
|
||||
densityVariation.Size() == m_gravityContext.GetDensityMap().reduced_size(),
|
||||
"Mass-normalization complete action received a supported density vector with the wrong size."
|
||||
);
|
||||
MFEM_VERIFY(
|
||||
displacementVariation.Size() == m_gravityContext.GetDisplacementMap().reduced_size(),
|
||||
"Mass-normalization complete action received a supported displacement vector with the wrong size."
|
||||
);
|
||||
validate_finite_vector(densityVariation, "Mass-normalization complete action received a non-finite density.");
|
||||
validate_finite_vector(
|
||||
displacementVariation, "Mass-normalization complete action received a non-finite displacement."
|
||||
);
|
||||
|
||||
m_gravityContext.GetDensityMap().scatter(densityVariation, m_densityVariationTrue);
|
||||
m_gravityContext.GetDisplacementMap().scatter(displacementVariation, m_displacementVariationTrue);
|
||||
|
||||
const double localAction =
|
||||
EvaluateDensityActionLocal(densityVariation) + EvaluateDisplacementActionLocal(displacementVariation);
|
||||
EvaluateDensityActionLocal(m_densityVariationTrue) +
|
||||
EvaluateDisplacementActionLocal(m_displacementVariationTrue);
|
||||
|
||||
action.SetSize(1);
|
||||
action(0) = GlobalSum(localAction);
|
||||
@@ -607,18 +651,25 @@ namespace mean_field::operators {
|
||||
constexpr auto massResidual =
|
||||
utils::blocks::get_residual_block<Form>(utils::blocks::barotropic_constant_field.mass_normalization_term);
|
||||
|
||||
using DomainSchema = utils::domain::CoreEnvelopeVacuumDomainSchema;
|
||||
|
||||
const auto &gravityContext = m_preparedOperator.GetGravityContext();
|
||||
|
||||
const field::FieldDofMap enthalpyMap =
|
||||
field::make_field_dof_map<field::Enthalpy, DomainSchema>(*f.enthalpyFes);
|
||||
|
||||
MFEM_VERIFY(
|
||||
m_layout.size(densityValue) == f.densityFes->GetTrueVSize() &&
|
||||
m_layout.size(displacementValue) == f.displacementFes->GetTrueVSize() &&
|
||||
m_layout.size(gravityGradientValue) == f.gravityFluxFes->GetTrueVSize() &&
|
||||
m_layout.size(gravityPotentialValue) == f.gravityPotentialFes->GetTrueVSize() &&
|
||||
m_layout.size(enthalpyValue) == f.enthalpyFes->GetTrueVSize() &&
|
||||
m_layout.size(densityValue) == gravityContext.GetDensityMap().reduced_size() &&
|
||||
m_layout.size(displacementValue) == gravityContext.GetDisplacementMap().reduced_size() &&
|
||||
m_layout.size(gravityGradientValue) == gravityContext.GetGravityGradientMap().reduced_size() &&
|
||||
m_layout.size(gravityPotentialValue) == gravityContext.GetGravityPotentialMap().reduced_size() &&
|
||||
m_layout.size(enthalpyValue) == enthalpyMap.reduced_size() &&
|
||||
m_layout.size(barotropicConstantValue) == 1 &&
|
||||
m_layout.size(gravityGradientResidual) == f.gravityFluxFes->GetTrueVSize() &&
|
||||
m_layout.size(gravityPotentialResidual) == f.gravityPotentialFes->GetTrueVSize() &&
|
||||
m_layout.size(densityResidual) == f.densityFes->GetTrueVSize() &&
|
||||
m_layout.size(displacementResidual) == f.displacementFes->GetTrueVSize() &&
|
||||
m_layout.size(enthalpyResidual) == f.enthalpyFes->GetTrueVSize() && m_layout.size(massResidual) == 1,
|
||||
m_layout.size(gravityGradientResidual) == gravityContext.GetGravityGradientMap().reduced_size() &&
|
||||
m_layout.size(gravityPotentialResidual) == gravityContext.GetGravityPotentialMap().reduced_size() &&
|
||||
m_layout.size(densityResidual) == gravityContext.GetDensityMap().reduced_size() &&
|
||||
m_layout.size(displacementResidual) == gravityContext.GetDisplacementMap().reduced_size() &&
|
||||
m_layout.size(enthalpyResidual) == enthalpyMap.reduced_size() && m_layout.size(massResidual) == 1,
|
||||
"Prepared mass-normalization MFEM adapter received incompatible "
|
||||
"barotropic block sizes."
|
||||
);
|
||||
@@ -665,4 +716,4 @@ namespace mean_field::operators {
|
||||
const MassNormalizationLayout &PreparedMassNormalizationJacobianOperator::GetLayout() const noexcept {
|
||||
return m_layout;
|
||||
}
|
||||
} // namespace mean_field::operators
|
||||
} // namespace mean_field::operators
|
||||
|
||||
Reference in New Issue
Block a user