From 4d2cf4b0f7d06f3392a4262e6cab16e955ba203e Mon Sep 17 00:00:00 2001 From: ccui Date: Fri, 17 Jul 2026 11:38:39 -0400 Subject: [PATCH] Fix L2 norm computation in tests --- .../displacement_tests/Newmark/dim2/newmark_tests.cpp | 9 ++++++--- .../displacement_tests/Newmark/dim3/newmark_tests.cpp | 9 ++++++--- .../Newmark/mpi/dim3/newmark_tests.cpp | 9 ++++++--- .../specfem_config.yaml | 2 +- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/tests/unit-tests/displacement_tests/Newmark/dim2/newmark_tests.cpp b/tests/unit-tests/displacement_tests/Newmark/dim2/newmark_tests.cpp index 6fb2f3354..c620630a5 100644 --- a/tests/unit-tests/displacement_tests/Newmark/dim2/newmark_tests.cpp +++ b/tests/unit-tests/displacement_tests/Newmark/dim2/newmark_tests.cpp @@ -354,15 +354,18 @@ TEST_P(Newmark, 2D) { } const auto computed_value = traces(icomp, count, 1); - error += std::sqrt((value[icomp] - computed_value) * - (value[icomp] - computed_value)); - computed_norm += std::sqrt(computed_value * computed_value); + const auto difference = value[icomp] - computed_value; + error += difference * difference; + computed_norm += computed_value * computed_value; } count++; } } + error = std::sqrt(error); + computed_norm = std::sqrt(computed_norm); + // When the reference norm is zero both the reference and computed // seismograms must be zero for the test to pass. const bool failed = (computed_norm == 0) diff --git a/tests/unit-tests/displacement_tests/Newmark/dim3/newmark_tests.cpp b/tests/unit-tests/displacement_tests/Newmark/dim3/newmark_tests.cpp index 258524b12..7a261c91e 100644 --- a/tests/unit-tests/displacement_tests/Newmark/dim3/newmark_tests.cpp +++ b/tests/unit-tests/displacement_tests/Newmark/dim3/newmark_tests.cpp @@ -269,15 +269,18 @@ TEST_P(Newmark, 3D) { } const auto computed_value = traces(icomp, count, 1); - error += std::sqrt((value[icomp] - computed_value) * - (value[icomp] - computed_value)); - computed_norm += std::sqrt(computed_value * computed_value); + const auto difference = value[icomp] - computed_value; + error += difference * difference; + computed_norm += computed_value * computed_value; } count++; } } + error = std::sqrt(error); + computed_norm = std::sqrt(computed_norm); + // When the reference norm is zero both the reference and computed // seismograms must be zero for the test to pass. const bool failed = (computed_norm == 0) diff --git a/tests/unit-tests/displacement_tests/Newmark/mpi/dim3/newmark_tests.cpp b/tests/unit-tests/displacement_tests/Newmark/mpi/dim3/newmark_tests.cpp index 5fe94c45d..b55b76030 100644 --- a/tests/unit-tests/displacement_tests/Newmark/mpi/dim3/newmark_tests.cpp +++ b/tests/unit-tests/displacement_tests/Newmark/mpi/dim3/newmark_tests.cpp @@ -307,15 +307,18 @@ TEST_P(NewmarkMPI, 3D) { } const auto computed_value = traces(icomp, count, 1); - error += std::sqrt((value[icomp] - computed_value) * - (value[icomp] - computed_value)); - computed_norm += std::sqrt(computed_value * computed_value); + const auto difference = value[icomp] - computed_value; + error += difference * difference; + computed_norm += computed_value * computed_value; } count++; } } + error = std::sqrt(error); + computed_norm = std::sqrt(computed_norm); + if (error / computed_norm > Test.tolerance || std::isnan(error / computed_norm)) { FAIL() << "--------------------------------------------------\n" diff --git a/tests/unit-tests/displacement_tests/Newmark/serial/dim3/HomogeneousAcousticFreeSurfaceForceSource3D/specfem_config.yaml b/tests/unit-tests/displacement_tests/Newmark/serial/dim3/HomogeneousAcousticFreeSurfaceForceSource3D/specfem_config.yaml index 551208827..14099ac68 100644 --- a/tests/unit-tests/displacement_tests/Newmark/serial/dim3/HomogeneousAcousticFreeSurfaceForceSource3D/specfem_config.yaml +++ b/tests/unit-tests/displacement_tests/Newmark/serial/dim3/HomogeneousAcousticFreeSurfaceForceSource3D/specfem_config.yaml @@ -24,7 +24,7 @@ parameters: writer: seismogram: format: ascii - directory: "./traces_gen" + directory: "./" receivers: stations: "displacement_tests/Newmark/serial/dim3/HomogeneousAcousticFreeSurfaceForceSource3D/STATIONS"