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:
@@ -10,18 +10,19 @@ namespace gravity_context = operators::context::gravity_field;
|
||||
|
||||
TEST_CASE(
|
||||
"Gravity Field Linearization Context Applies Selective Invalidation",
|
||||
tags::integration &tags::gravity &tags::contexts
|
||||
tags::gravity_context
|
||||
) {
|
||||
auto args = test_utils::setup_args();
|
||||
fem::FEM f = fem::setup_fem(args.mesh_file, args, 0);
|
||||
|
||||
gravity_context::GravityFieldLinearizationContext context(f, *f.domainMapperStateless);
|
||||
|
||||
mfem::Vector density = prepared_test::make_deterministic_vector(f.densityFes->GetTrueVSize(), 0.11);
|
||||
mfem::Vector displacement = prepared_test::make_displacement(f, 0.0);
|
||||
mfem::Vector gravity_gradient = prepared_test::make_deterministic_vector(f.gravityFluxFes->GetTrueVSize(), 0.37);
|
||||
mfem::Vector density = prepared_test::make_deterministic_vector(context.GetDensityMap().reduced_size(), 0.11);
|
||||
mfem::Vector displacement = context.GetDisplacementMap().gather(prepared_test::make_displacement(f, 0.0));
|
||||
mfem::Vector gravity_gradient =
|
||||
prepared_test::make_deterministic_vector(context.GetGravityGradientMap().reduced_size(), 0.37);
|
||||
mfem::Vector gravity_potential =
|
||||
prepared_test::make_deterministic_vector(f.gravityPotentialFes->GetTrueVSize(), 0.63);
|
||||
prepared_test::make_deterministic_vector(context.GetGravityPotentialMap().reduced_size(), 0.63);
|
||||
|
||||
gravity_context::GravityFieldRevisions revisions;
|
||||
|
||||
@@ -72,7 +73,7 @@ TEST_CASE(
|
||||
CHECK(density_report.updated_density);
|
||||
CHECK_FALSE(density_report.updated_gravity_gradient);
|
||||
CHECK_FALSE(density_report.geometry.DidAnyWork());
|
||||
CHECK(context.GetDensity()(0) == density(0));
|
||||
CHECK(context.GetDensityTrue()(context.GetDensityMap().true_dof(0)) == density(0));
|
||||
|
||||
gravity_gradient(0) -= 0.4;
|
||||
++revisions.gravity_gradient.value;
|
||||
@@ -82,9 +83,9 @@ TEST_CASE(
|
||||
CHECK_FALSE(gradient_report.updated_density);
|
||||
CHECK(gradient_report.updated_gravity_gradient);
|
||||
CHECK_FALSE(gradient_report.geometry.DidAnyWork());
|
||||
CHECK(context.GetGravityGradient()(0) == gravity_gradient(0));
|
||||
CHECK(context.GetGravityGradientTrue()(context.GetGravityGradientMap().true_dof(0)) == gravity_gradient(0));
|
||||
|
||||
displacement = prepared_test::make_displacement(f, 1.0);
|
||||
displacement = context.GetDisplacementMap().gather(prepared_test::make_displacement(f, 1.0));
|
||||
++revisions.displacement.value;
|
||||
|
||||
const gravity_context::GravityFieldPreparationReport displacement_report = context.Prepare(make_state(), revisions);
|
||||
@@ -114,18 +115,19 @@ TEST_CASE(
|
||||
|
||||
TEST_CASE(
|
||||
"Gravity Field Linearization Context Owns Frozen Base Fields",
|
||||
tags::integration &tags::gravity &tags::contexts
|
||||
tags::gravity_context
|
||||
) {
|
||||
auto args = test_utils::setup_args();
|
||||
fem::FEM f = fem::setup_fem(args.mesh_file, args, 0);
|
||||
|
||||
gravity_context::GravityFieldLinearizationContext context(f, *f.domainMapperStateless);
|
||||
|
||||
mfem::Vector density = prepared_test::make_deterministic_vector(f.densityFes->GetTrueVSize(), 0.13);
|
||||
mfem::Vector displacement = prepared_test::make_displacement(f, 0.4);
|
||||
mfem::Vector gravity_gradient = prepared_test::make_deterministic_vector(f.gravityFluxFes->GetTrueVSize(), 0.47);
|
||||
mfem::Vector density = prepared_test::make_deterministic_vector(context.GetDensityMap().reduced_size(), 0.13);
|
||||
mfem::Vector displacement = context.GetDisplacementMap().gather(prepared_test::make_displacement(f, 0.4));
|
||||
mfem::Vector gravity_gradient =
|
||||
prepared_test::make_deterministic_vector(context.GetGravityGradientMap().reduced_size(), 0.47);
|
||||
mfem::Vector gravity_potential =
|
||||
prepared_test::make_deterministic_vector(f.gravityPotentialFes->GetTrueVSize(), 0.71);
|
||||
prepared_test::make_deterministic_vector(context.GetGravityPotentialMap().reduced_size(), 0.71);
|
||||
|
||||
gravity_context::GravityFieldRevisions revisions;
|
||||
|
||||
@@ -137,24 +139,24 @@ TEST_CASE(
|
||||
revisions
|
||||
);
|
||||
|
||||
const mfem::Vector frozen_density = context.GetDensity();
|
||||
const mfem::Vector frozen_displacement = context.GetGeometryContext().GetDisplacement();
|
||||
const mfem::Vector frozen_gravity_gradient = context.GetGravityGradient();
|
||||
const mfem::Vector frozen_density = context.GetDensityTrue();
|
||||
const mfem::Vector frozen_displacement = context.GetGeometryContext().GetDisplacementTrue();
|
||||
const mfem::Vector frozen_gravity_gradient = context.GetGravityGradientTrue();
|
||||
|
||||
density = 0.0;
|
||||
displacement = 0.0;
|
||||
gravity_gradient = 0.0;
|
||||
gravity_potential = 0.0;
|
||||
|
||||
CHECK(prepared_test::relative_error(context.GetDensity(), frozen_density, f.mesh->GetComm()) == 0.0);
|
||||
CHECK(prepared_test::relative_error(context.GetDensityTrue(), frozen_density, f.mesh->GetComm()) == 0.0);
|
||||
CHECK(
|
||||
prepared_test::relative_error(
|
||||
context.GetGeometryContext().GetDisplacement(), frozen_displacement, f.displacementFes->GetComm()
|
||||
context.GetGeometryContext().GetDisplacementTrue(), frozen_displacement, f.displacementFes->GetComm()
|
||||
) == 0.0
|
||||
);
|
||||
CHECK(
|
||||
prepared_test::relative_error(
|
||||
context.GetGravityGradient(), frozen_gravity_gradient, f.gravityFluxFes->GetComm()
|
||||
context.GetGravityGradientTrue(), frozen_gravity_gradient, f.gravityFluxFes->GetComm()
|
||||
) == 0.0
|
||||
);
|
||||
|
||||
@@ -167,22 +169,22 @@ TEST_CASE(
|
||||
);
|
||||
|
||||
CHECK_FALSE(unchanged_revision_report.DidAnyWork());
|
||||
CHECK(prepared_test::relative_error(context.GetDensity(), frozen_density, f.mesh->GetComm()) == 0.0);
|
||||
CHECK(prepared_test::relative_error(context.GetDensityTrue(), frozen_density, f.mesh->GetComm()) == 0.0);
|
||||
CHECK(
|
||||
prepared_test::relative_error(
|
||||
context.GetGeometryContext().GetDisplacement(), frozen_displacement, f.displacementFes->GetComm()
|
||||
context.GetGeometryContext().GetDisplacementTrue(), frozen_displacement, f.displacementFes->GetComm()
|
||||
) == 0.0
|
||||
);
|
||||
CHECK(
|
||||
prepared_test::relative_error(
|
||||
context.GetGravityGradient(), frozen_gravity_gradient, f.gravityFluxFes->GetComm()
|
||||
context.GetGravityGradientTrue(), frozen_gravity_gradient, f.gravityFluxFes->GetComm()
|
||||
) == 0.0
|
||||
);
|
||||
}
|
||||
|
||||
TEST_CASE(
|
||||
"Gravity Field Geometry Contexts Have Independent Prepared State",
|
||||
tags::integration &tags::gravity &tags::contexts
|
||||
tags::gravity_context
|
||||
) {
|
||||
auto args = test_utils::setup_args();
|
||||
fem::FEM f = fem::setup_fem(args.mesh_file, args, 0);
|
||||
@@ -190,10 +192,13 @@ TEST_CASE(
|
||||
gravity_context::GravityFieldGeometryContext first_context(f, *f.domainMapperStateless);
|
||||
gravity_context::GravityFieldGeometryContext second_context(f, *f.domainMapperStateless);
|
||||
|
||||
const mfem::Vector first_displacement = prepared_test::make_displacement(f, 0.0);
|
||||
const mfem::Vector second_displacement = prepared_test::make_displacement(f, 1.0);
|
||||
const mfem::Vector gravity_gradient =
|
||||
prepared_test::make_deterministic_vector(f.gravityFluxFes->GetTrueVSize(), 0.35);
|
||||
const mfem::Vector first_displacement =
|
||||
first_context.GetDisplacementMap().gather(prepared_test::make_displacement(f, 0.0));
|
||||
const mfem::Vector second_displacement =
|
||||
second_context.GetDisplacementMap().gather(prepared_test::make_displacement(f, 1.0));
|
||||
const mfem::Vector gravity_gradient = prepared_test::make_field_map<field::Gravity>(f).gather(
|
||||
prepared_test::make_deterministic_vector(f.gravityFluxFes->GetTrueVSize(), 0.35)
|
||||
);
|
||||
|
||||
first_context.Prepare(first_displacement, {.value = 0}, {.value = 0});
|
||||
second_context.Prepare(second_displacement, {.value = 0}, {.value = 0});
|
||||
@@ -205,7 +210,8 @@ TEST_CASE(
|
||||
first_context.GetMassOperator().Mult(gravity_gradient, first_action);
|
||||
second_context.GetMassOperator().Mult(gravity_gradient, second_action_before);
|
||||
|
||||
const mfem::Vector updated_first_displacement = prepared_test::make_displacement(f, 0.6);
|
||||
const mfem::Vector updated_first_displacement =
|
||||
first_context.GetDisplacementMap().gather(prepared_test::make_displacement(f, 0.6));
|
||||
first_context.Prepare(updated_first_displacement, {.value = 0}, {.value = 1});
|
||||
|
||||
second_context.GetMassOperator().Mult(gravity_gradient, second_action_after);
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace hydrostatic_context_test_utils {
|
||||
|
||||
TEST_CASE(
|
||||
"Hydrostatic Context Applies Selective Invalidation",
|
||||
tags::barotrope &tags::contexts &tags::hydro &tags::prepared &tags::unit
|
||||
tags::barotrope_hydrostatic_context &tags::unit
|
||||
) {
|
||||
auto args = test_utils::setup_args();
|
||||
|
||||
@@ -48,12 +48,15 @@ TEST_CASE(
|
||||
|
||||
mean_field::operators::context::hydrostatic::HydrostaticEquilibriumContext context(f, *f.domainMapperStateless);
|
||||
|
||||
mfem::Vector enthalpy = gravity_prepared_test_utils::make_deterministic_vector(f.enthalpyFes->GetTrueVSize(), 0.17);
|
||||
mfem::Vector enthalpy =
|
||||
field_dof_test_utils::make_deterministic_supported_vector<mean_field::field::Enthalpy>(*f.enthalpyFes, 0.17);
|
||||
|
||||
mfem::Vector gravityPotential =
|
||||
gravity_prepared_test_utils::make_deterministic_vector(f.gravityPotentialFes->GetTrueVSize(), 0.31);
|
||||
field_dof_test_utils::make_deterministic_supported_vector<mean_field::field::Gravity>(
|
||||
*f.gravityPotentialFes, 0.31
|
||||
);
|
||||
|
||||
mfem::Vector displacement = gravity_prepared_test_utils::make_displacement(f, 0.35);
|
||||
mfem::Vector displacement = field_dof_test_utils::make_supported_displacement(f, 0.35);
|
||||
|
||||
double bernoulliConstant = 0.73;
|
||||
|
||||
@@ -145,7 +148,7 @@ TEST_CASE(
|
||||
CHECK_FALSE(enthalpyReport.updatedGravityPotential);
|
||||
CHECK_FALSE(enthalpyReport.updatedDisplacement);
|
||||
CHECK_FALSE(enthalpyReport.updatedBernoulliConstant);
|
||||
CHECK(context.GetBaseEnthalpyTrue()(0) == enthalpy(0));
|
||||
CHECK(context.GetBaseEnthalpyTrue()(context.GetEnthalpyMap().true_dof(0)) == enthalpy(0));
|
||||
|
||||
++dependencies.gravityPotential.revision;
|
||||
|
||||
@@ -161,7 +164,9 @@ TEST_CASE(
|
||||
CHECK_FALSE(gravityPotentialReport.updatedDisplacement);
|
||||
CHECK_FALSE(gravityPotentialReport.updatedBernoulliConstant);
|
||||
|
||||
CHECK(context.GetBaseGravityPotentialTrue()(0) == gravityPotential(0));
|
||||
CHECK(
|
||||
context.GetBaseGravityPotentialTrue()(context.GetGravityPotentialMap().true_dof(0)) == gravityPotential(0)
|
||||
);
|
||||
|
||||
++dependencies.bernoulliConstant.revision;
|
||||
|
||||
@@ -212,7 +217,7 @@ TEST_CASE(
|
||||
CHECK(displacementReport.updatedDisplacement);
|
||||
CHECK_FALSE(displacementReport.updatedBernoulliConstant);
|
||||
|
||||
CHECK(context.GetDisplacementTrue()(0) == displacement(0));
|
||||
CHECK(context.GetDisplacementTrue()(context.GetDisplacementMap().true_dof(0)) == displacement(0));
|
||||
|
||||
++dependencies.discretization.revision;
|
||||
|
||||
@@ -240,7 +245,7 @@ TEST_CASE(
|
||||
|
||||
TEST_CASE(
|
||||
"Hydrostatic Context Uses Identity In Every Dependency",
|
||||
tags::barotrope &tags::contexts &tags::hydro &tags::prepared &tags::unit
|
||||
tags::barotrope_hydrostatic_context &tags::unit
|
||||
) {
|
||||
auto args = test_utils::setup_args();
|
||||
|
||||
@@ -248,12 +253,15 @@ TEST_CASE(
|
||||
|
||||
mean_field::operators::context::hydrostatic::HydrostaticEquilibriumContext context(f, *f.domainMapperStateless);
|
||||
|
||||
mfem::Vector enthalpy = gravity_prepared_test_utils::make_deterministic_vector(f.enthalpyFes->GetTrueVSize(), 0.23);
|
||||
mfem::Vector enthalpy =
|
||||
field_dof_test_utils::make_deterministic_supported_vector<mean_field::field::Enthalpy>(*f.enthalpyFes, 0.23);
|
||||
|
||||
const mfem::Vector gravityPotential =
|
||||
gravity_prepared_test_utils::make_deterministic_vector(f.gravityPotentialFes->GetTrueVSize(), 0.41);
|
||||
field_dof_test_utils::make_deterministic_supported_vector<mean_field::field::Gravity>(
|
||||
*f.gravityPotentialFes, 0.41
|
||||
);
|
||||
|
||||
const mfem::Vector displacement = gravity_prepared_test_utils::make_displacement(f, 0.60);
|
||||
const mfem::Vector displacement = field_dof_test_utils::make_supported_displacement(f, 0.60);
|
||||
|
||||
constexpr double bernoulliConstant = 0.81;
|
||||
|
||||
@@ -288,7 +296,10 @@ TEST_CASE(
|
||||
);
|
||||
|
||||
CHECK_FALSE(sameStampReport.DidAnyWork());
|
||||
CHECK(context.GetBaseEnthalpyTrue()(0) == firstFrozenEnthalpy(0));
|
||||
CHECK(
|
||||
context.GetBaseEnthalpyTrue()(context.GetEnthalpyMap().true_dof(0)) ==
|
||||
firstFrozenEnthalpy(context.GetEnthalpyMap().true_dof(0))
|
||||
);
|
||||
|
||||
++dependencies.enthalpy.identity;
|
||||
dependencies.enthalpy.revision = 0;
|
||||
@@ -301,7 +312,7 @@ TEST_CASE(
|
||||
hydrostatic_context_test_utils::check_base_only(newIdentityReport);
|
||||
|
||||
CHECK(newIdentityReport.updatedEnthalpy);
|
||||
CHECK(context.GetBaseEnthalpyTrue()(0) == enthalpy(0));
|
||||
CHECK(context.GetBaseEnthalpyTrue()(context.GetEnthalpyMap().true_dof(0)) == enthalpy(0));
|
||||
CHECK(context.MatchesDependencies(dependencies));
|
||||
|
||||
++dependencies.rotation.identity;
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace rotational_displacement_force_context_test_utils {
|
||||
|
||||
TEST_CASE(
|
||||
"Rotational Displacement Force Context Applies Selective Invalidation",
|
||||
tags::centrifugal &tags::contexts &tags::unit
|
||||
tags::rotation_context_unit
|
||||
) {
|
||||
mean_field::utils::Args args = test_utils::setup_args();
|
||||
|
||||
@@ -61,15 +61,16 @@ TEST_CASE(
|
||||
|
||||
REQUIRE(f.okay());
|
||||
|
||||
mfem::Vector density = rotational_displacement_force_context_test_utils::make_density(f, 0.83);
|
||||
|
||||
mfem::Vector displacement = gravity_prepared_test_utils::make_displacement(f, 0.47);
|
||||
|
||||
auto dependencies = rotational_displacement_force_context_test_utils::make_dependencies();
|
||||
auto dependencies = rotational_displacement_force_context_test_utils::make_dependencies();
|
||||
|
||||
rotational_displacement_force_context_test_utils::Context context(f, *f.domainMapperStateless);
|
||||
|
||||
const auto initialReport = context.Prepare({.density = density, .displacement = displacement}, dependencies);
|
||||
mfem::Vector densityTrue = rotational_displacement_force_context_test_utils::make_density(f, 0.83);
|
||||
mfem::Vector density = context.GetDensityMap().gather(densityTrue);
|
||||
mfem::Vector displacementTrue = gravity_prepared_test_utils::make_displacement(f, 0.47);
|
||||
mfem::Vector displacement = context.GetDisplacementMap().gather(displacementTrue);
|
||||
|
||||
const auto initialReport = context.Prepare({.density = density, .displacement = displacement}, dependencies);
|
||||
|
||||
REQUIRE(context.IsPrepared());
|
||||
CHECK(context.MatchesDependencies(dependencies));
|
||||
@@ -80,14 +81,18 @@ TEST_CASE(
|
||||
CHECK(initialReport.updatedDensity);
|
||||
CHECK(initialReport.updatedDisplacement);
|
||||
|
||||
const mfem::Vector expectedDensityTrue = context.GetDensityMap().scatter(density);
|
||||
const mfem::Vector expectedDisplacementTrue = context.GetDisplacementMap().scatter(displacement);
|
||||
|
||||
CHECK(
|
||||
rotational_displacement_force_context_test_utils::relative_difference(context.GetBaseDensityTrue(), density) <
|
||||
1.0e-14
|
||||
rotational_displacement_force_context_test_utils::relative_difference(
|
||||
context.GetBaseDensityTrue(), expectedDensityTrue
|
||||
) < 1.0e-14
|
||||
);
|
||||
|
||||
CHECK(
|
||||
rotational_displacement_force_context_test_utils::relative_difference(
|
||||
context.GetDisplacementTrue(), displacement
|
||||
context.GetDisplacementTrue(), expectedDisplacementTrue
|
||||
) < 1.0e-14
|
||||
);
|
||||
|
||||
@@ -95,7 +100,8 @@ TEST_CASE(
|
||||
|
||||
CHECK_FALSE(unchangedReport.DidAnyWork());
|
||||
|
||||
density = rotational_displacement_force_context_test_utils::make_density(f, 1.17);
|
||||
densityTrue = rotational_displacement_force_context_test_utils::make_density(f, 1.17);
|
||||
density = context.GetDensityMap().gather(densityTrue);
|
||||
|
||||
++dependencies.density.revision;
|
||||
|
||||
@@ -110,7 +116,8 @@ TEST_CASE(
|
||||
|
||||
const mfem::Vector densityAfterDensityRevision(context.GetBaseDensityTrue());
|
||||
|
||||
displacement = gravity_prepared_test_utils::make_displacement(f, 0.81);
|
||||
displacementTrue = gravity_prepared_test_utils::make_displacement(f, 0.81);
|
||||
displacement = context.GetDisplacementMap().gather(displacementTrue);
|
||||
|
||||
++dependencies.displacement.revision;
|
||||
|
||||
@@ -151,7 +158,7 @@ TEST_CASE(
|
||||
TEST_CASE(
|
||||
"Rotational Displacement Force Context Treats New Identities As New "
|
||||
"Dependency Streams",
|
||||
tags::centrifugal &tags::contexts &tags::unit
|
||||
tags::rotation_context_unit
|
||||
) {
|
||||
mean_field::utils::Args args = test_utils::setup_args();
|
||||
|
||||
@@ -159,14 +166,15 @@ TEST_CASE(
|
||||
|
||||
REQUIRE(f.okay());
|
||||
|
||||
const mfem::Vector density = rotational_displacement_force_context_test_utils::make_density(f, 0.91);
|
||||
|
||||
const mfem::Vector displacement = gravity_prepared_test_utils::make_displacement(f, 0.39);
|
||||
|
||||
auto dependencies = rotational_displacement_force_context_test_utils::make_dependencies();
|
||||
auto dependencies = rotational_displacement_force_context_test_utils::make_dependencies();
|
||||
|
||||
rotational_displacement_force_context_test_utils::Context context(f, *f.domainMapperStateless);
|
||||
|
||||
const mfem::Vector density =
|
||||
context.GetDensityMap().gather(rotational_displacement_force_context_test_utils::make_density(f, 0.91));
|
||||
const mfem::Vector displacement =
|
||||
context.GetDisplacementMap().gather(gravity_prepared_test_utils::make_displacement(f, 0.39));
|
||||
|
||||
context.Prepare({.density = density, .displacement = displacement}, dependencies);
|
||||
|
||||
dependencies.density.identity += 1000;
|
||||
|
||||
Reference in New Issue
Block a user