From 52747633f80f26eb4d30fd8439276de835f524a0 Mon Sep 17 00:00:00 2001 From: Grzegorz Kowal Date: Tue, 17 Nov 2020 17:27:37 -0300 Subject: [PATCH 1/3] SCHEMES: Make isothermal MHD ROE solver numerically symmetric. Signed-off-by: Grzegorz Kowal --- sources/schemes.F90 | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/sources/schemes.F90 b/sources/schemes.F90 index 2e88729..e2201dc 100644 --- a/sources/schemes.F90 +++ b/sources/schemes.F90 @@ -3211,14 +3211,11 @@ module schemes ! 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(ibx) = ql(ibx,i) - qi(iby) = (sdr * ql(iby,i) + sdl * qr(iby,i)) / sds - qi(ibz) = (sdr * ql(ibz,i) + sdl * qr(ibz,i)) / sds - qi(ibp) = ql(ibp,i) + qi(idn) = sdl * sdr + qi(ivx:ivz) = sdl * ql(ivx:ivz,i) / sds + sdr * qr(ivx:ivz,i) / sds + qi(ibx) = ql(ibx,i) + qi(iby:ibz) = sdr * ql(iby:ibz,i) / sds + sdl * qr(iby:ibz,i) / sds + qi(ibp) = ql(ibp,i) ! prepare coefficients ! From 56fb625e5916f77e99819f65127795813a035a4c Mon Sep 17 00:00:00 2001 From: Grzegorz Kowal Date: Tue, 17 Nov 2020 17:49:05 -0300 Subject: [PATCH 2/3] SCHEMES: Make adiabatic MHD ROE solver numerically symmetric. Signed-off-by: Grzegorz Kowal --- sources/schemes.F90 | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/sources/schemes.F90 b/sources/schemes.F90 index e2201dc..c923b85 100644 --- a/sources/schemes.F90 +++ b/sources/schemes.F90 @@ -3372,16 +3372,13 @@ module schemes ! 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) + pml) / sdl & - + (ur(ien,i) + qr(ipr,i) + pmr) / sdr) / sds - qi(ibx) = ql(ibx,i) - qi(iby) = (sdr * ql(iby,i) + sdl * qr(iby,i)) / sds - qi(ibz) = (sdr * ql(ibz,i) + sdl * qr(ibz,i)) / sds - qi(ibp) = ql(ibp,i) + 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) + pml) / sdl & + + (ur(ien,i) + qr(ipr,i) + pmr) / sdr) / sds + qi(ibx) = ql(ibx,i) + qi(iby:ibz) = sdr * ql(iby:ibz,i) / sds + sdl * qr(iby:ibz,i) / sds + qi(ibp) = ql(ibp,i) ! prepare coefficients ! From 7fdac2f5849561078dff1a6cdeb2d7c01407b30a Mon Sep 17 00:00:00 2001 From: Grzegorz Kowal Date: Tue, 17 Nov 2020 17:52:22 -0300 Subject: [PATCH 3/3] 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]) !