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

@@ -69,6 +69,7 @@ TEST_CASE(
REQUIRE(f.okay());
operators::PreparedMappedGravitySourceOperator operation(f, *f.domainMapperStateless);
operators::PreparedMappedGravitySourceOperator oldWeights(f, *f.domainMapperStateless);
const mfem::Vector densityTrue = prepared_test::make_deterministic_vector(f.densityFes->GetTrueVSize(), 0.41);
const mfem::Vector density = operation.GetDensityMap().gather(densityTrue);
const mfem::Vector displacementTrue = prepared_test::make_displacement(f, 0.4);
@@ -81,6 +82,21 @@ TEST_CASE(
mfem::Vector baselineVariation;
operation.Mult(density, baselineAction);
operation.MultDisplacementVariationTrue(densityTrue, directionTrue, baselineVariation);
REQUIRE(operation.GetTensorVariationElementCount() > 0);
mfem::Vector pointwiseVariation, zeroDirection(directionTrue), zeroVariation;
operation.MultDisplacementVariationTrueReference(densityTrue, directionTrue, pointwiseVariation);
CHECK(prepared_test::relative_error(baselineVariation, pointwiseVariation, communicator) < 2.0e-12);
zeroDirection = 0.0;
operation.MultDisplacementVariationTrue(densityTrue, zeroDirection, zeroVariation);
CHECK(zeroVariation.Norml2() == 0.0);
operation.MultDisplacementVariationTrue(densityTrue, directionTrue, pointwiseVariation);
CHECK(prepared_test::relative_error(baselineVariation, pointwiseVariation, communicator) < 2.0e-14);
oldWeights.PrepareReference(displacement);
mfem::Vector oldAction, oldVariation;
oldWeights.Mult(density, oldAction);
oldWeights.MultDisplacementVariationTrue(densityTrue, directionTrue, oldVariation);
CHECK(prepared_test::relative_error(baselineAction, oldAction, communicator) < 2.0e-14);
CHECK(prepared_test::relative_error(baselineVariation, oldVariation, communicator) < 2.0e-14);
const mfem::Vector primalDisplacementTrue = prepared_test::make_displacement(f, 1.0);
operation.PreparePrimal(operation.GetDisplacementMap().gather(primalDisplacementTrue));