Snapshot optimized solver and audit diagnostics before numerical experiments

This commit is contained in:
2026-09-16 14:34:06 -04:00
parent 75cc638739
commit 80cc3d83d7
64 changed files with 11969 additions and 267 deletions

View File

@@ -439,6 +439,15 @@ TEST_CASE(
mfem::Vector kernelDisplacementActionTrue;
preparedOperator.ApplyDisplacementJacobianAction(displacementDirection, preparedDisplacementAction);
REQUIRE(preparedOperator.GetTensorElementCount() > 0);
mfem::Vector cachedDisplacementAction;
preparedOperator.ApplyDisplacementJacobianActionCachedReference(displacementDirection, cachedDisplacementAction);
CHECK(prepared_pressure_force_test_utils::relative_difference(
preparedDisplacementAction, cachedDisplacementAction, f.mesh->GetComm()) < 2.0e-12);
mfem::Vector retainedDisplacementAction;
preparedOperator.ApplyDisplacementJacobianActionReference(displacementDirection, retainedDisplacementAction);
CHECK(prepared_pressure_force_test_utils::relative_difference(
preparedDisplacementAction, retainedDisplacementAction, f.mesh->GetComm()) < 2.0e-12);
mean_field::operators::kernels::apply_pressure_force_displacement_action(
f, *f.domainMapperStateless, equationOfState, enthalpyTrue, displacementDirectionTrue, displacementTrue,
@@ -465,6 +474,30 @@ TEST_CASE(
prepared_pressure_force_test_utils::relative_difference(fusedAction, expectedFusedAction, f.mesh->GetComm()) <
2.0e-12
);
mfem::Vector originalResidual, referenceResidual, referenceEnthalpy;
preparedOperator.BuildResidual(originalResidual);
const auto state = mean_field::operators::context::pressure_force::PressureForceStateView{
.enthalpy = enthalpy, .displacement = displacement};
const auto dependencies = prepared_pressure_force_test_utils::make_dependencies();
CHECK(preparedOperator.PrepareReference(state, dependencies).DidAnyWork());
preparedOperator.BuildResidual(referenceResidual);
preparedOperator.ApplyEnthalpyJacobianAction(enthalpyDirection, referenceEnthalpy);
CHECK(prepared_pressure_force_test_utils::relative_difference(
originalResidual, referenceResidual, f.mesh->GetComm()) < 2.0e-12);
CHECK(prepared_pressure_force_test_utils::relative_difference(
preparedEnthalpyAction, referenceEnthalpy, f.mesh->GetComm()) < 2.0e-12);
CHECK_FALSE(preparedOperator.PrepareReference(state, dependencies).DidAnyWork());
CHECK(preparedOperator.PrepareCachedReference(state, dependencies).DidAnyWork());
preparedOperator.BuildResidual(referenceResidual);
preparedOperator.ApplyEnthalpyJacobianAction(enthalpyDirection, referenceEnthalpy);
CHECK(prepared_pressure_force_test_utils::relative_difference(
originalResidual, referenceResidual, f.mesh->GetComm()) < 2.0e-12);
CHECK(prepared_pressure_force_test_utils::relative_difference(
preparedEnthalpyAction, referenceEnthalpy, f.mesh->GetComm()) < 2.0e-12);
CHECK_FALSE(preparedOperator.PrepareCachedReference(state, dependencies).DidAnyWork());
CHECK(preparedOperator.Prepare(state, dependencies).DidAnyWork());
CHECK_FALSE(preparedOperator.Prepare(state, dependencies).DidAnyWork());
}
TEST_CASE(