@@ -526,7 +526,7 @@ subroutine CorAdCalc(u, v, h, uh, vh, CAu, CAv, OBC, AD, G, GV, US, CS, pbv, Wav
526
526
do J= Jsq-1 ,Jeq+1 ; do I= Isq-1 ,Ieq+1
527
527
hArea_q = (hArea_u(I,j) + hArea_u(I,j+1 )) + (hArea_v(i,J) + hArea_v(i+1 ,J))
528
528
Ih_q(I,J) = Area_q(I,J) / (hArea_q + vol_neglect)
529
- h_q(I,J) = (hArea_q) / (Area_q(I,J) + area_neglect)
529
+ h_q(I,J) = (hArea_q) / max (Area_q(I,J), area_neglect)
530
530
q(I,J) = abs_vort(I,J) * Ih_q(I,J)
531
531
enddo ; enddo
532
532
@@ -1408,11 +1408,12 @@ subroutine UP3_reconstruction(q4,u,qr)
1408
1408
real , intent (in ) :: u ! < Velocity or thickness flux on point i-1/2
1409
1409
! ! [l t-1 ~> m s-1] or [l2 t-1 ~> m2 s-1]
1410
1410
real , intent (inout ) :: qr ! < Reconstruction of tracer q at point i-1/2 [A ~> a]
1411
+ real , parameter :: C1_6 = 1.0 / 6.0 ! The ratio of 1/6 [nondim]
1411
1412
1412
1413
if (u> 0 .) then
1413
- qr = (- q4(1 ) + 5 .* q4(2 ) + 2 .* q4(3 ))/ 6 .
1414
+ qr = (- q4(1 ) + 5 .* q4(2 ) + 2 .* q4(3 )) * C1_6
1414
1415
else
1415
- qr = (2 .* q4(2 ) + 5 .* q4(3 ) - q4(4 ))/ 6 .
1416
+ qr = (2 .* q4(2 ) + 5 .* q4(3 ) - q4(4 )) * C1_6
1416
1417
endif
1417
1418
1418
1419
end subroutine UP3_reconstruction
@@ -1425,16 +1426,18 @@ subroutine UP3_Koren_limiter_reconstruction(q4,u,qr)
1425
1426
real , intent (in ) :: u ! < Velocity or thickness flux on point i-1/2
1426
1427
! ! [L T-1 ~> m s-1] or [L2 T-1 ~> m2 s-1]
1427
1428
real , intent (inout ) :: qr ! < Reconstruction of tracer q on point i-1/2 [A ~> a]
1428
- real :: theta ! Ratio of gradient [nondim]
1429
- real :: psi ! Limiter function [nondim]
1429
+ real :: theta ! Ratio of gradient [nondim]
1430
+ real :: psi ! Limiter function [nondim]
1431
+ real , parameter :: C1_3 = 1.0 / 3.0 ! The ratio of 1/3 [nondim]
1432
+ real , parameter :: C1_6 = 1.0 / 6.0 ! The ratio of 1/6 [nondim]
1430
1433
1431
1434
if (u> 0 .) then
1432
1435
theta = (q4(2 ) - q4(1 ))/ (q4(3 ) - q4(2 ) + 1e-20 )
1433
- psi = max (0 ., min (1 ., 1 / 3 . + 1 / 6 . * theta, theta)) ! limiter introduced by Koren (1993)
1436
+ psi = max (0 ., min (1 ., C1_3 + C1_6 * theta, theta)) ! limiter introduced by Koren (1993)
1434
1437
qr = q4(2 ) + psi* (q4(3 ) - q4(2 ))
1435
1438
else
1436
1439
theta = (q4(4 ) - q4(3 ))/ (q4(3 ) - q4(2 ) + 1e-20 )
1437
- psi = max (0 ., min (1 ., 1 / 3 . + 1 / 6 . * theta, theta))
1440
+ psi = max (0 ., min (1 ., C1_3 + C1_6 * theta, theta))
1438
1441
qr = q4(3 ) + psi* (q4(2 ) - q4(3 ))
1439
1442
endif
1440
1443
@@ -1507,7 +1510,7 @@ subroutine weno_three_h_weight_reconstruction(q4, h4, u4, &
1507
1510
! vr = min(max(q4(3), q4(2)), vr) ; vr = max(min(q4(3), q4(2)), vr) !Impose a monotonicity limiter
1508
1511
hr = min (max (h4(3 ), h4(2 )), hr) ; hr = max (min (h4(3 ), h4(2 )), hr) ! A monotonicity limiter
1509
1512
1510
- qr = vr / (hr + h_tiny)
1513
+ qr = vr / max (hr, h_tiny)
1511
1514
1512
1515
end subroutine weno_three_h_weight_reconstruction
1513
1516
@@ -1617,7 +1620,7 @@ subroutine weno_five_h_weight_reconstruction(q6, h6, u6, &
1617
1620
! vr = min(max(q6(3), q6(4)), vr) ; vr = max(min(q6(3), q6(4)), vr) !Impose a monotonicity limiter
1618
1621
hr = min (max (h6(3 ), h6(4 )), hr) ; hr = max (min (h6(3 ), h6(4 )), hr) ! Impose a monotonicity limiter
1619
1622
1620
- qr = vr / (hr + h_tiny)
1623
+ qr = vr / max (hr, h_tiny)
1621
1624
1622
1625
end subroutine weno_five_h_weight_reconstruction
1623
1626
@@ -1754,7 +1757,7 @@ subroutine weno_seven_h_weight_reconstruction(q8, h8, u8, &
1754
1757
endif
1755
1758
endif
1756
1759
1757
- tau = abs (b0 + 3 * b1 - 3 * b2 - b3 )
1760
+ tau = abs (( b0 - b3) + 3 * ( b1 - b2) )
1758
1761
w0 = C4_35 * (1 + (tau / (b0 + 1e-20 ))** 2 )
1759
1762
w1 = C18_35 * (1 + (tau / (b1 + 1e-20 ))** 2 )
1760
1763
w2 = C12_35 * (1 + (tau / (b2 + 1e-20 ))** 2 )
@@ -1772,7 +1775,7 @@ subroutine weno_seven_h_weight_reconstruction(q8, h8, u8, &
1772
1775
! vr = min(max(q4, q5), vr) ; vr = max(min(q4, q5), vr)
1773
1776
hr = min (max (h8(4 ), h8(5 )), hr) ; hr = max (min (h8(4 ), h8(5 )), hr) ! Impose a monotonicity limiter
1774
1777
1775
- qr = vr / (hr + h_tiny)
1778
+ qr = vr / max (hr, h_tiny)
1776
1779
1777
1780
1778
1781
end subroutine weno_seven_h_weight_reconstruction
0 commit comments