diff --git a/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc b/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc index 231ac5eaa..20eb229fd 100644 --- a/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc +++ b/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc @@ -3187,9 +3187,12 @@ vmecpp::MercierFileContents vmecpp::ComputeMercierStability( // S mercier.s[jF] = mercier_intermediate.s[jF]; + // mercier.f90 forms this as sqs = 0.5*(vp_real(i) + vp_real(i+1))*sign_jac + // and divides SHEAR, ITOR' and PRES' by it, so the Jacobian sign belongs + // here rather than only on WELL. const double vp_full = (mercier_intermediate.vp_real[jHo] + mercier_intermediate.vp_real[jHi]) / - 2.0; + 2.0 * vmec_internal_results.sign_of_jacobian; if (vp_full == 0.0) { // skip this surface continue; diff --git a/src/vmecpp/cpp/vmecpp_large_cpp_tests/vmec/output_quantities/output_quantities_test.cc b/src/vmecpp/cpp/vmecpp_large_cpp_tests/vmec/output_quantities/output_quantities_test.cc index 6c66552c9..3d64690bf 100644 --- a/src/vmecpp/cpp/vmecpp_large_cpp_tests/vmec/output_quantities/output_quantities_test.cc +++ b/src/vmecpp/cpp/vmecpp_large_cpp_tests/vmec/output_quantities/output_quantities_test.cc @@ -671,7 +671,7 @@ TEST_P(MercierStabilityTest, CheckMercierStability) { const double vp_full = (static_cast(mercier["vp_real"][jHo]) + static_cast(mercier["vp_real"][jHi])) / - 2.0; + 2.0 * sign_of_jacobian; // The running sum advances even on surfaces the assembly skips, and is // scaled by deltaS only at the end, as the assembly does.