From 7fdac2f5849561078dff1a6cdeb2d7c01407b30a Mon Sep 17 00:00:00 2001 From: Grzegorz Kowal Date: Tue, 17 Nov 2020 17:52:22 -0300 Subject: [PATCH] SCHEMES: Make HD ROE solvers numerically symmetric. Signed-off-by: Grzegorz Kowal --- sources/schemes.F90 | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/sources/schemes.F90 b/sources/schemes.F90 index c923b85..e5c21eb 100644 --- a/sources/schemes.F90 +++ b/sources/schemes.F90 @@ -2957,16 +2957,14 @@ module schemes ! calculate variables for the Roe intermediate state ! - sdl = sqrt(ql(idn,i)) - sdr = sqrt(qr(idn,i)) - sds = sdl + sdr + sdl = sqrt(ql(idn,i)) + sdr = sqrt(qr(idn,i)) + sds = sdl + sdr ! prepare the Roe intermediate state vector (eq. 11.60 in [2]) ! - qi(idn) = sdl * sdr - qi(ivx) = (sdl * ql(ivx,i) + sdr * qr(ivx,i)) / sds - qi(ivy) = (sdl * ql(ivy,i) + sdr * qr(ivy,i)) / sds - qi(ivz) = (sdl * ql(ivz,i) + sdr * qr(ivz,i)) / sds + qi(idn) = sdl * sdr + qi(ivx:ivz) = sdl * ql(ivx:ivz,i) / sds + sdr * qr(ivx:ivz,i) / sds ! obtain eigenvalues and eigenvectors ! @@ -3080,18 +3078,16 @@ module schemes ! calculate variables for the Roe intermediate state ! - sdl = sqrt(ql(idn,i)) - sdr = sqrt(qr(idn,i)) - sds = sdl + sdr + sdl = sqrt(ql(idn,i)) + sdr = sqrt(qr(idn,i)) + sds = sdl + sdr ! prepare the Roe intermediate state vector (eq. 11.60 in [2]) ! - qi(idn) = sdl * sdr - qi(ivx) = (sdl * ql(ivx,i) + sdr * qr(ivx,i)) / sds - qi(ivy) = (sdl * ql(ivy,i) + sdr * qr(ivy,i)) / sds - qi(ivz) = (sdl * ql(ivz,i) + sdr * qr(ivz,i)) / sds - qi(ipr) = ((ul(ien,i) + ql(ipr,i)) / sdl & - + (ur(ien,i) + qr(ipr,i)) / sdr) / sds + qi(idn) = sdl * sdr + qi(ivx:ivz) = sdl * ql(ivx:ivz,i) / sds + sdr * qr(ivx:ivz,i) / sds + qi(ipr) = ((ul(ien,i) + ql(ipr,i)) / sdl & + + (ur(ien,i) + qr(ipr,i)) / sdr) / sds ! obtain eigenvalues and eigenvectors ! @@ -3205,9 +3201,9 @@ module schemes ! calculate variables for the Roe intermediate state ! - sdl = sqrt(ql(idn,i)) - sdr = sqrt(qr(idn,i)) - sds = sdl + sdr + sdl = sqrt(ql(idn,i)) + sdr = sqrt(qr(idn,i)) + sds = sdl + sdr ! prepare the Roe intermediate state vector (eq. 11.60 in [2]) ! @@ -3361,14 +3357,14 @@ module schemes ! calculate variables for the Roe intermediate state ! - sdl = sqrt(ql(idn,i)) - sdr = sqrt(qr(idn,i)) - sds = sdl + sdr + sdl = sqrt(ql(idn,i)) + sdr = sqrt(qr(idn,i)) + sds = sdl + sdr ! prepare magnetic pressures ! - pml = 0.5d+00 * sum(ql(ibx:ibz,i)**2) - pmr = 0.5d+00 * sum(qr(ibx:ibz,i)**2) + pml = 0.5d+00 * sum(ql(ibx:ibz,i)**2) + pmr = 0.5d+00 * sum(qr(ibx:ibz,i)**2) ! prepare the Roe intermediate state vector (eq. 11.60 in [2]) !