SCHEMES: Fix ROE solvers for MHD.

The tearing test problem was numerically unstable in the adiabatic case.
Setting bty to 1 in the case of br beeing zero solved the issue. Make it
consistent for the isothermal ROE solver as well. Additionaly, one typo
was fixed in the calculation of the left eigenvectors.

Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This commit is contained in:
Grzegorz Kowal 2024-03-06 21:21:59 -03:00
parent 78e3b72889
commit fb25489487

View File

@ -1969,7 +1969,7 @@ module schemes
bty = qi(iby) / br bty = qi(iby) / br
btz = qi(ibz) / br btz = qi(ibz) / br
else else
bty = 0.0d+00 bty = 1.0d+00
btz = 0.0d+00 btz = 0.0d+00
end if end if
@ -3170,7 +3170,7 @@ module schemes
btz = qi(ibz) / br btz = qi(ibz) / br
else else
br = 0.0d+00 br = 0.0d+00
bty = 0.0d+00 bty = 1.0d+00
btz = 0.0d+00 btz = 0.0d+00
end if end if
@ -3306,18 +3306,18 @@ module schemes
f4 = alf * cf / norm f4 = alf * cf / norm
f5 = qs * vqstr f5 = qs * vqstr
lvec(1,1) = f1 * (v2 - hp) - f4 * lm(7) + f5 - aspb lvec(1,1) = f1 * (v2 - hp) - f4 * lm(7) + f5 - aspb
lvec(1,5) = f1
lvec(1,2) = - f1 * qi(ivx) + f4 lvec(1,2) = - f1 * qi(ivx) + f4
lvec(1,3) = - f1 * qi(ivy) - f2 * bty lvec(1,3) = - f1 * qi(ivy) - f2 * bty
lvec(1,4) = - f1 * qi(ivz) - f2 * btz lvec(1,4) = - f1 * qi(ivz) - f2 * btz
lvec(1,5) = f1
lvec(1,6) = f3 * bty - f1 * qi(iby) lvec(1,6) = f3 * bty - f1 * qi(iby)
lvec(1,7) = f3 * btz - f1 * qi(ibz) lvec(1,7) = f3 * btz - f1 * qi(ibz)
lvec(7,1) = f1 * (v2 - hp) + f4 * lm(1) - f5 - aspb lvec(7,1) = f1 * (v2 - hp) + f4 * lm(1) - f5 - aspb
lvec(7,5) = f1
lvec(7,2) = - f1 * qi(ivx) - f4 lvec(7,2) = - f1 * qi(ivx) - f4
lvec(7,3) = - f1 * qi(ivy) + f2 * bty lvec(7,3) = - f1 * qi(ivy) + f2 * bty
lvec(7,4) = - f1 * qi(ivz) + f2 * btz lvec(7,4) = - f1 * qi(ivz) + f2 * btz
lvec(7,5) = f1
lvec(7,6) = lvec(1,6) lvec(7,6) = lvec(1,6)
lvec(7,7) = lvec(1,7) lvec(7,7) = lvec(1,7)
@ -3327,18 +3327,18 @@ module schemes
f4 = als * cs / norm f4 = als * cs / norm
f5 = qf * vqstr f5 = qf * vqstr
lvec(3,1) = f1 * (v2 - hp) - f4 * lm(5) - f5 + afpb lvec(3,1) = f1 * (v2 - hp) - f4 * lm(5) - f5 + afpb
lvec(3,5) = f1
lvec(3,2) = - f1 * qi(ivx) + f4 lvec(3,2) = - f1 * qi(ivx) + f4
lvec(3,3) = - f1 * qi(ivy) + f2 * bty lvec(3,3) = - f1 * qi(ivy) + f2 * bty
lvec(3,4) = - f1 * qi(ivz) + f2 * btz lvec(3,4) = - f1 * qi(ivz) + f2 * btz
lvec(3,5) = f1
lvec(3,6) = - f3 * bty - f1 * qi(iby) lvec(3,6) = - f3 * bty - f1 * qi(iby)
lvec(3,6) = - f3 * btz - f1 * qi(ibz) lvec(3,7) = - f3 * btz - f1 * qi(ibz)
lvec(5,1) = f1 * (v2 - hp) + f4 * lm(3) + f5 + afpb lvec(5,1) = f1 * (v2 - hp) + f4 * lm(3) + f5 + afpb
lvec(5,5) = f1
lvec(5,2) = - f1 * qi(ivx) - f4 lvec(5,2) = - f1 * qi(ivx) - f4
lvec(5,3) = - f1 * qi(ivy) - f2 * bty lvec(5,3) = - f1 * qi(ivy) - f2 * bty
lvec(5,4) = - f1 * qi(ivz) - f2 * btz lvec(5,4) = - f1 * qi(ivz) - f2 * btz
lvec(5,5) = f1
lvec(5,6) = lvec(3,6) lvec(5,6) = lvec(3,6)
lvec(5,7) = lvec(3,7) lvec(5,7) = lvec(3,7)
@ -3359,10 +3359,10 @@ module schemes
f1 = 1.0d+00 / cc2 f1 = 1.0d+00 / cc2
lvec(4,1) = 1.0d+00 - f1 * (v2h - adi_m2d1 * xx) lvec(4,1) = 1.0d+00 - f1 * (v2h - adi_m2d1 * xx)
lvec(4,5) = - f1
lvec(4,2) = f1 * qi(ivx) lvec(4,2) = f1 * qi(ivx)
lvec(4,3) = f1 * qi(ivy) lvec(4,3) = f1 * qi(ivy)
lvec(4,4) = f1 * qi(ivz) lvec(4,4) = f1 * qi(ivz)
lvec(4,5) = - f1
lvec(4,6) = f1 * qi(iby) lvec(4,6) = f1 * qi(iby)
lvec(4,7) = f1 * qi(ibz) lvec(4,7) = f1 * qi(ibz)