feat(field-support): added field support system, mid migration
currently the barotope and the pressure force operator are migrated to the new support system
This commit is contained in:
@@ -5,9 +5,7 @@ import mean_field;
|
||||
import test_helpers;
|
||||
|
||||
namespace prepared_hydrostatic_displacement_test_utils {
|
||||
mean_field::operators::context::hydrostatic::
|
||||
HydrostaticEquilibriumDependencies
|
||||
make_dependencies() {
|
||||
mean_field::operators::context::hydrostatic::HydrostaticEquilibriumDependencies make_dependencies() {
|
||||
return {
|
||||
.discretization = {.identity = 401, .revision = 2},
|
||||
.enthalpy = {.identity = 409, .revision = 3},
|
||||
@@ -18,8 +16,7 @@ namespace prepared_hydrostatic_displacement_test_utils {
|
||||
};
|
||||
}
|
||||
|
||||
mean_field::operators::context::hydrostatic::HydrostaticEquilibriumStateView
|
||||
make_state(
|
||||
mean_field::operators::context::hydrostatic::HydrostaticEquilibriumStateView make_state(
|
||||
const mfem::Vector &enthalpy,
|
||||
const mfem::Vector &gravityPotential,
|
||||
const mfem::Vector &displacement,
|
||||
@@ -37,18 +34,14 @@ namespace prepared_hydrostatic_displacement_test_utils {
|
||||
const mean_field::fem::FEM &f,
|
||||
const double phase = 0.29
|
||||
) {
|
||||
return gravity_prepared_test_utils::make_deterministic_vector(
|
||||
f.enthalpyFes->GetTrueVSize(), phase
|
||||
);
|
||||
return gravity_prepared_test_utils::make_deterministic_vector(f.enthalpyFes->GetTrueVSize(), phase);
|
||||
}
|
||||
|
||||
mfem::Vector make_gravity_potential(
|
||||
const mean_field::fem::FEM &f,
|
||||
const double phase = 0.47
|
||||
) {
|
||||
return gravity_prepared_test_utils::make_deterministic_vector(
|
||||
f.gravityPotentialFes->GetTrueVSize(), phase
|
||||
);
|
||||
return gravity_prepared_test_utils::make_deterministic_vector(f.gravityPotentialFes->GetTrueVSize(), phase);
|
||||
}
|
||||
|
||||
mfem::Vector make_displacement_direction(
|
||||
@@ -56,11 +49,9 @@ namespace prepared_hydrostatic_displacement_test_utils {
|
||||
const double firstPhase,
|
||||
const double secondPhase
|
||||
) {
|
||||
mfem::Vector direction =
|
||||
gravity_prepared_test_utils::make_displacement(f, firstPhase);
|
||||
mfem::Vector direction = gravity_prepared_test_utils::make_displacement(f, firstPhase);
|
||||
|
||||
const mfem::Vector secondField =
|
||||
gravity_prepared_test_utils::make_displacement(f, secondPhase);
|
||||
const mfem::Vector secondField = gravity_prepared_test_utils::make_displacement(f, secondPhase);
|
||||
|
||||
direction -= secondField;
|
||||
return direction;
|
||||
@@ -103,13 +94,13 @@ namespace prepared_hydrostatic_displacement_test_utils {
|
||||
mfem::Vector residualMinus;
|
||||
|
||||
mean_field::operators::kernels::apply_hydrostatic_equilibrium(
|
||||
f, *f.domainMapperStateless, rotation, enthalpy, gravityPotential,
|
||||
displacementPlus, bernoulliConstant, residualPlus
|
||||
f, *f.domainMapperStateless, rotation, enthalpy, gravityPotential, displacementPlus, bernoulliConstant,
|
||||
residualPlus
|
||||
);
|
||||
|
||||
mean_field::operators::kernels::apply_hydrostatic_equilibrium(
|
||||
f, *f.domainMapperStateless, rotation, enthalpy, gravityPotential,
|
||||
displacementMinus, bernoulliConstant, residualMinus
|
||||
f, *f.domainMapperStateless, rotation, enthalpy, gravityPotential, displacementMinus, bernoulliConstant,
|
||||
residualMinus
|
||||
);
|
||||
|
||||
difference = residualPlus;
|
||||
@@ -122,9 +113,7 @@ namespace prepared_hydrostatic_displacement_test_utils {
|
||||
const mfem::Vector &expected,
|
||||
const MPI_Comm communicator
|
||||
) {
|
||||
return gravity_prepared_test_utils::relative_error(
|
||||
actual, expected, communicator
|
||||
);
|
||||
return gravity_prepared_test_utils::relative_error(actual, expected, communicator);
|
||||
}
|
||||
} // namespace prepared_hydrostatic_displacement_test_utils
|
||||
|
||||
@@ -132,32 +121,26 @@ TEST_CASE(
|
||||
"Prepared Hydrostatic Displacement Jacobian Matches Centered Differences",
|
||||
tags::barotrope &tags::hydro &tags::jacobian &tags::prepared &tags::unit
|
||||
) {
|
||||
auto args = test_utils::setup_args();
|
||||
auto args = test_utils::setup_args();
|
||||
|
||||
mean_field::fem::FEM f =
|
||||
mean_field::fem::setup_fem(args.mesh_file, args, 0);
|
||||
mean_field::fem::FEM f = mean_field::fem::setup_fem(args.mesh_file, args, 0);
|
||||
|
||||
mean_field::operators::PreparedHydrostaticEquilibriumOperator
|
||||
preparedOperator(f, *f.domainMapperStateless);
|
||||
mean_field::operators::PreparedHydrostaticEquilibriumOperator preparedOperator(f, *f.domainMapperStateless);
|
||||
|
||||
const mfem::Vector enthalpy =
|
||||
prepared_hydrostatic_displacement_test_utils::make_enthalpy(f);
|
||||
const mfem::Vector enthalpy = prepared_hydrostatic_displacement_test_utils::make_enthalpy(f);
|
||||
|
||||
const mfem::Vector gravityPotential =
|
||||
prepared_hydrostatic_displacement_test_utils::make_gravity_potential(f);
|
||||
const mfem::Vector gravityPotential = prepared_hydrostatic_displacement_test_utils::make_gravity_potential(f);
|
||||
|
||||
const mfem::Vector displacement =
|
||||
gravity_prepared_test_utils::make_displacement(f, 0.73);
|
||||
const mfem::Vector displacement = gravity_prepared_test_utils::make_displacement(f, 0.73);
|
||||
|
||||
constexpr double bernoulliConstant = 0.39;
|
||||
constexpr double bernoulliConstant = 0.39;
|
||||
|
||||
const mean_field::physics::RigidRotation rotation =
|
||||
prepared_hydrostatic_displacement_test_utils::make_rotation(0.9);
|
||||
|
||||
const auto dependencies =
|
||||
prepared_hydrostatic_displacement_test_utils::make_dependencies();
|
||||
const auto dependencies = prepared_hydrostatic_displacement_test_utils::make_dependencies();
|
||||
|
||||
const auto report = preparedOperator.Prepare(
|
||||
const auto report = preparedOperator.Prepare(
|
||||
prepared_hydrostatic_displacement_test_utils::make_state(
|
||||
enthalpy, gravityPotential, displacement, bernoulliConstant
|
||||
),
|
||||
@@ -165,12 +148,10 @@ TEST_CASE(
|
||||
);
|
||||
|
||||
const mfem::Vector firstVariation =
|
||||
prepared_hydrostatic_displacement_test_utils::
|
||||
make_displacement_direction(f, 1.17, 0.31);
|
||||
prepared_hydrostatic_displacement_test_utils::make_displacement_direction(f, 1.17, 0.31);
|
||||
|
||||
const mfem::Vector secondVariation =
|
||||
prepared_hydrostatic_displacement_test_utils::
|
||||
make_displacement_direction(f, 1.43, 0.58);
|
||||
prepared_hydrostatic_displacement_test_utils::make_displacement_direction(f, 1.43, 0.58);
|
||||
|
||||
mfem::Vector combinedVariation(firstVariation);
|
||||
combinedVariation += secondVariation;
|
||||
@@ -179,51 +160,36 @@ TEST_CASE(
|
||||
mfem::Vector secondAction;
|
||||
mfem::Vector combinedAction;
|
||||
|
||||
preparedOperator.ApplyDisplacementJacobianAction(
|
||||
firstVariation, firstAction
|
||||
);
|
||||
preparedOperator.ApplyDisplacementJacobianAction(firstVariation, firstAction);
|
||||
|
||||
preparedOperator.ApplyDisplacementJacobianAction(
|
||||
secondVariation, secondAction
|
||||
);
|
||||
preparedOperator.ApplyDisplacementJacobianAction(secondVariation, secondAction);
|
||||
|
||||
preparedOperator.ApplyDisplacementJacobianAction(
|
||||
combinedVariation, combinedAction
|
||||
);
|
||||
preparedOperator.ApplyDisplacementJacobianAction(combinedVariation, combinedAction);
|
||||
|
||||
constexpr double finiteDifferenceStep = 1.0e-5;
|
||||
|
||||
mfem::Vector centeredDifference;
|
||||
|
||||
prepared_hydrostatic_displacement_test_utils::
|
||||
centered_displacement_difference(
|
||||
f, rotation, enthalpy, gravityPotential, displacement,
|
||||
firstVariation, bernoulliConstant, finiteDifferenceStep,
|
||||
centeredDifference
|
||||
);
|
||||
prepared_hydrostatic_displacement_test_utils::centered_displacement_difference(
|
||||
f, rotation, enthalpy, gravityPotential, displacement, firstVariation, bernoulliConstant, finiteDifferenceStep,
|
||||
centeredDifference
|
||||
);
|
||||
|
||||
mfem::Vector sumOfActions(firstAction);
|
||||
sumOfActions += secondAction;
|
||||
|
||||
const double centeredDifferenceError =
|
||||
prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
firstAction, centeredDifference, f.mesh->GetComm()
|
||||
);
|
||||
const double centeredDifferenceError = prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
firstAction, centeredDifference, f.mesh->GetComm()
|
||||
);
|
||||
|
||||
const double linearityError =
|
||||
prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
combinedAction, sumOfActions, f.mesh->GetComm()
|
||||
);
|
||||
prepared_hydrostatic_displacement_test_utils::relative_error(combinedAction, sumOfActions, f.mesh->GetComm());
|
||||
|
||||
INFO(
|
||||
"Prepared displacement centered-difference error = "
|
||||
<< centeredDifferenceError
|
||||
);
|
||||
INFO("Prepared displacement centered-difference error = " << centeredDifferenceError);
|
||||
|
||||
INFO("Prepared displacement linearity error = " << linearityError);
|
||||
|
||||
const auto &statistics =
|
||||
preparedOperator.GetDisplacementJacobianStatistics();
|
||||
const auto &statistics = preparedOperator.GetDisplacementJacobianStatistics();
|
||||
|
||||
CHECK(report.preparedDisplacementJacobianData);
|
||||
CHECK(statistics.preparations == 1);
|
||||
@@ -237,32 +203,23 @@ TEST_CASE(
|
||||
"Data",
|
||||
tags::barotrope &tags::hydro &tags::jacobian &tags::prepared &tags::unit
|
||||
) {
|
||||
auto args = test_utils::setup_args();
|
||||
auto args = test_utils::setup_args();
|
||||
|
||||
mean_field::fem::FEM f =
|
||||
mean_field::fem::setup_fem(args.mesh_file, args, 0);
|
||||
mean_field::fem::FEM f = mean_field::fem::setup_fem(args.mesh_file, args, 0);
|
||||
|
||||
mean_field::operators::PreparedHydrostaticEquilibriumOperator
|
||||
preparedOperator(f, *f.domainMapperStateless);
|
||||
mean_field::operators::PreparedHydrostaticEquilibriumOperator preparedOperator(f, *f.domainMapperStateless);
|
||||
|
||||
const mfem::Vector enthalpy =
|
||||
prepared_hydrostatic_displacement_test_utils::make_enthalpy(f, 0.37);
|
||||
const mfem::Vector enthalpy = prepared_hydrostatic_displacement_test_utils::make_enthalpy(f, 0.37);
|
||||
|
||||
const mfem::Vector gravityPotential =
|
||||
prepared_hydrostatic_displacement_test_utils::make_gravity_potential(
|
||||
f, 0.53
|
||||
);
|
||||
const mfem::Vector gravityPotential = prepared_hydrostatic_displacement_test_utils::make_gravity_potential(f, 0.53);
|
||||
|
||||
mfem::Vector displacement =
|
||||
gravity_prepared_test_utils::make_displacement(f, 0.42);
|
||||
mfem::Vector displacement = gravity_prepared_test_utils::make_displacement(f, 0.42);
|
||||
|
||||
constexpr double bernoulliConstant = 0.36;
|
||||
constexpr double bernoulliConstant = 0.36;
|
||||
|
||||
mean_field::physics::RigidRotation rotation =
|
||||
prepared_hydrostatic_displacement_test_utils::make_rotation(0.75);
|
||||
mean_field::physics::RigidRotation rotation = prepared_hydrostatic_displacement_test_utils::make_rotation(0.75);
|
||||
|
||||
auto dependencies =
|
||||
prepared_hydrostatic_displacement_test_utils::make_dependencies();
|
||||
auto dependencies = prepared_hydrostatic_displacement_test_utils::make_dependencies();
|
||||
|
||||
preparedOperator.Prepare(
|
||||
prepared_hydrostatic_displacement_test_utils::make_state(
|
||||
@@ -272,30 +229,21 @@ TEST_CASE(
|
||||
);
|
||||
|
||||
const mfem::Vector displacementVariation =
|
||||
prepared_hydrostatic_displacement_test_utils::
|
||||
make_displacement_direction(f, 1.09, 0.27);
|
||||
prepared_hydrostatic_displacement_test_utils::make_displacement_direction(f, 1.09, 0.27);
|
||||
|
||||
const mfem::Vector secondVariation =
|
||||
prepared_hydrostatic_displacement_test_utils::
|
||||
make_displacement_direction(f, 1.36, 0.64);
|
||||
prepared_hydrostatic_displacement_test_utils::make_displacement_direction(f, 1.36, 0.64);
|
||||
|
||||
mfem::Vector initialAction;
|
||||
mfem::Vector secondDirectionAction;
|
||||
|
||||
preparedOperator.ApplyDisplacementJacobianAction(
|
||||
displacementVariation, initialAction
|
||||
);
|
||||
preparedOperator.ApplyDisplacementJacobianAction(displacementVariation, initialAction);
|
||||
|
||||
preparedOperator.ApplyDisplacementJacobianAction(
|
||||
secondVariation, secondDirectionAction
|
||||
);
|
||||
preparedOperator.ApplyDisplacementJacobianAction(secondVariation, secondDirectionAction);
|
||||
|
||||
CHECK(
|
||||
preparedOperator.GetDisplacementJacobianStatistics().preparations == 1
|
||||
);
|
||||
CHECK(preparedOperator.GetDisplacementJacobianStatistics().preparations == 1);
|
||||
|
||||
rotation =
|
||||
prepared_hydrostatic_displacement_test_utils::make_rotation(1.45);
|
||||
rotation = prepared_hydrostatic_displacement_test_utils::make_rotation(1.45);
|
||||
|
||||
++dependencies.rotation.revision;
|
||||
|
||||
@@ -308,30 +256,24 @@ TEST_CASE(
|
||||
|
||||
mfem::Vector rotationUpdatedAction;
|
||||
|
||||
preparedOperator.ApplyDisplacementJacobianAction(
|
||||
displacementVariation, rotationUpdatedAction
|
||||
);
|
||||
preparedOperator.ApplyDisplacementJacobianAction(displacementVariation, rotationUpdatedAction);
|
||||
|
||||
constexpr double finiteDifferenceStep = 1.0e-5;
|
||||
|
||||
mfem::Vector rotationReference;
|
||||
|
||||
prepared_hydrostatic_displacement_test_utils::
|
||||
centered_displacement_difference(
|
||||
f, rotation, enthalpy, gravityPotential, displacement,
|
||||
displacementVariation, bernoulliConstant, finiteDifferenceStep,
|
||||
rotationReference
|
||||
);
|
||||
prepared_hydrostatic_displacement_test_utils::centered_displacement_difference(
|
||||
f, rotation, enthalpy, gravityPotential, displacement, displacementVariation, bernoulliConstant,
|
||||
finiteDifferenceStep, rotationReference
|
||||
);
|
||||
|
||||
const double rotationReferenceError =
|
||||
prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
rotationUpdatedAction, rotationReference, f.mesh->GetComm()
|
||||
);
|
||||
const double rotationReferenceError = prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
rotationUpdatedAction, rotationReference, f.mesh->GetComm()
|
||||
);
|
||||
|
||||
const double rotationEffect =
|
||||
prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
rotationUpdatedAction, initialAction, f.mesh->GetComm()
|
||||
);
|
||||
const double rotationEffect = prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
rotationUpdatedAction, initialAction, f.mesh->GetComm()
|
||||
);
|
||||
|
||||
CHECK_FALSE(rotationReport.contextReport.preparedGeometryState);
|
||||
CHECK(rotationReport.contextReport.preparedRotationDependencies);
|
||||
@@ -355,54 +297,34 @@ TEST_CASE(
|
||||
|
||||
mfem::Vector geometryUpdatedAction;
|
||||
|
||||
preparedOperator.ApplyDisplacementJacobianAction(
|
||||
displacementVariation, geometryUpdatedAction
|
||||
);
|
||||
preparedOperator.ApplyDisplacementJacobianAction(displacementVariation, geometryUpdatedAction);
|
||||
|
||||
mfem::Vector geometryReference;
|
||||
|
||||
prepared_hydrostatic_displacement_test_utils::
|
||||
centered_displacement_difference(
|
||||
f, rotation, enthalpy, gravityPotential, displacement,
|
||||
displacementVariation, bernoulliConstant, finiteDifferenceStep,
|
||||
geometryReference
|
||||
);
|
||||
|
||||
const double geometryReferenceError =
|
||||
prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
geometryUpdatedAction, geometryReference, f.mesh->GetComm()
|
||||
);
|
||||
|
||||
const double geometryEffect =
|
||||
prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
geometryUpdatedAction, rotationUpdatedAction, f.mesh->GetComm()
|
||||
);
|
||||
|
||||
INFO(
|
||||
"Rotation-updated displacement Jacobian error = "
|
||||
<< rotationReferenceError
|
||||
prepared_hydrostatic_displacement_test_utils::centered_displacement_difference(
|
||||
f, rotation, enthalpy, gravityPotential, displacement, displacementVariation, bernoulliConstant,
|
||||
finiteDifferenceStep, geometryReference
|
||||
);
|
||||
|
||||
INFO(
|
||||
"Displacement Jacobian change after rotation update = "
|
||||
<< rotationEffect
|
||||
const double geometryReferenceError = prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
geometryUpdatedAction, geometryReference, f.mesh->GetComm()
|
||||
);
|
||||
|
||||
INFO(
|
||||
"Geometry-updated displacement Jacobian error = "
|
||||
<< geometryReferenceError
|
||||
const double geometryEffect = prepared_hydrostatic_displacement_test_utils::relative_error(
|
||||
geometryUpdatedAction, rotationUpdatedAction, f.mesh->GetComm()
|
||||
);
|
||||
|
||||
INFO(
|
||||
"Displacement Jacobian change after geometry update = "
|
||||
<< geometryEffect
|
||||
);
|
||||
INFO("Rotation-updated displacement Jacobian error = " << rotationReferenceError);
|
||||
|
||||
const auto &contextStatistics =
|
||||
preparedOperator.GetContextPreparationStatistics();
|
||||
INFO("Displacement Jacobian change after rotation update = " << rotationEffect);
|
||||
|
||||
const auto &displacementStatistics =
|
||||
preparedOperator.GetDisplacementJacobianStatistics();
|
||||
INFO("Geometry-updated displacement Jacobian error = " << geometryReferenceError);
|
||||
|
||||
INFO("Displacement Jacobian change after geometry update = " << geometryEffect);
|
||||
|
||||
const auto &contextStatistics = preparedOperator.GetContextPreparationStatistics();
|
||||
|
||||
const auto &displacementStatistics = preparedOperator.GetDisplacementJacobianStatistics();
|
||||
|
||||
CHECK(geometryReport.contextReport.preparedGeometryState);
|
||||
CHECK(geometryReport.contextReport.preparedRotationDependencies);
|
||||
|
||||
Reference in New Issue
Block a user