From 60a03286d1b36c0beb72c9cf09b61a90cfd41eda Mon Sep 17 00:00:00 2001 From: Alistair Adcroft Date: Mon, 14 Oct 2024 10:38:17 -0400 Subject: [PATCH] Fixed f(x) for PPM --- src/ALE/Recon1d_PPM_CW.F90 | 5 +++-- src/ALE/Recon1d_PPM_H4_2019.F90 | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ALE/Recon1d_PPM_CW.F90 b/src/ALE/Recon1d_PPM_CW.F90 index 29ec5d746d..0fe51af8f5 100644 --- a/src/ALE/Recon1d_PPM_CW.F90 +++ b/src/ALE/Recon1d_PPM_CW.F90 @@ -199,9 +199,9 @@ real function f(this, k, x) lmx = 1.0 - xc ! This expression for u_a can overshoot u_r but is good for x<<1 - u_a = this%ul(k) + xc * ( du + a6 * xc ) + u_a = this%ul(k) + xc * ( du + a6 * lmx ) ! This expression for u_b can overshoot u_l but is good for 1-x<<1 - u_b = this%ur(k) + lmx * ( - du + a6 * lmx ) + u_b = this%ur(k) + lmx * ( - du + a6 * xc ) ! Since u_a and u_b are both side-bounded, using weights=0 or 1 will preserve uniformity wb = 0.5 + sign(0.5, xc - 0.5 ) ! = 1 @ x=0, = 0 @ x=1 @@ -396,6 +396,7 @@ logical function unit_tests(this, verbose, stdout, stderr) ur(k) = this%f(k, 1.) enddo call test%real_arr(5, ul, (/1.,3.,12.,27.,61./), 'Return left edge') + call test%real_arr(5, um, (/1.,0.25*(6*7-15),0.25*(6*19-39),0.25*(6*37-75),61./), 'Return center') call test%real_arr(5, ur, (/1.,12.,27.,48.,61./), 'Return right edge') call this%destroy() diff --git a/src/ALE/Recon1d_PPM_H4_2019.F90 b/src/ALE/Recon1d_PPM_H4_2019.F90 index a0cc4a39d6..d005556f11 100644 --- a/src/ALE/Recon1d_PPM_H4_2019.F90 +++ b/src/ALE/Recon1d_PPM_H4_2019.F90 @@ -388,9 +388,9 @@ real function f(this, k, x) lmx = 1.0 - xc ! This expression for u_a can overshoot u_r but is good for x<<1 - u_a = this%ul(k) + xc * ( du + a6 * xc ) + u_a = this%ul(k) + xc * ( du + a6 * lmx ) ! This expression for u_b can overshoot u_l but is good for 1-x<<1 - u_b = this%ur(k) + lmx * ( - du + a6 * lmx ) + u_b = this%ur(k) + lmx * ( - du + a6 * xc ) ! Since u_a and u_b are both side-bounded, using weights=0 or 1 will preserve uniformity wb = 0.5 + sign(0.5, xc - 0.5 ) ! = 1 @ x=0, = 0 @ x=1