File indexing completed on 2023-05-28 05:10:18 UTC
view on githubraw file Latest commit b4daa243 on 2023-05-28 03:53:22 UTC
09cd9ab332 Alis*0001 #include "GAD_OPTIONS.h"
0002
0003 SUBROUTINE GAD_OS7MP_ADV_R(
0004 I bi,bj,k,deltaTloc,
0005 I wTrans, wFld,
0006 I Q,
0007 O wT,
0008 I myThid )
0009
0010
0011
0012
0013
0014 IMPLICIT NONE
0015
0016
0017 #include "SIZE.h"
0018 #include "GRID.h"
0019 #include "GAD.h"
0020
0021
0022 INTEGER bi,bj,k
0023 _RL deltaTloc
0024 _RL wTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0025 _RL wFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0026 _RL Q (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0027 _RL wT (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0028 INTEGER myThid
0029
0030
0031 INTEGER i,j,kp3,kp2,kp1,km1,km2,km3,km4
0032 _RL cfl,Psi
d9afd45777 Alis*0033 _RL wLoc,Fac,DelIp,DelI,Phi,Eps,rp1h,rp1h_cfl
46896f866d Jean*0034 _RL recip_DelIp, recip_DelI
09cd9ab332 Alis*0035 _RL Qippp,Qipp,Qip,Qi,Qim,Qimm,Qimmm
0036 _RL MskIpp,MskIp,MskI,MskIm,MskImm,MskImmm
0037 _RL d2,d2p1,d2m1,A,B,C,D
46896f866d Jean*0038 _RL dp1h,dm1h, PhiMD,PhiLC,PhiMin,PhiMax
d9afd45777 Alis*0039 _RL DelM,DelP,DelMM,DelPP,DelMMM,DelPPP
0040 _RL Del2MM,Del2M,Del2,Del2P,Del2PP
0041 _RL Del3MM,Del3M,Del3P,Del3PP
0042 _RL Del4M,Del4,Del4P
0043 _RL Del5M,Del5P
0044 _RL Del6
09cd9ab332 Alis*0045
0046 Eps = 1. _d -20
0047
0048 km4=MAX(1,k-4)
0049 km3=MAX(1,k-3)
0050 km2=MAX(1,k-2)
0051 km1=MAX(1,k-1)
0052 kp1=MIN(Nr,k+1)
0053 kp2=MIN(Nr,k+2)
0054 kp3=MIN(Nr,k+3)
0055
b4daa24319 Shre*0056 DO j=1-OLy,sNy+OLy
0057 DO i=1-OLx,sNx+OLx
09cd9ab332 Alis*0058
0059 wLoc = wFld(i,j)
0060 cfl = abs(wLoc*deltaTloc*recip_drC(k))
0061
46896f866d Jean*0062 IF (wTrans(i,j).LT.0. _d 0) THEN
09cd9ab332 Alis*0063 Qippp = Q(i,j,kp2)
0064 Qipp = Q(i,j,kp1)
0065 Qip = Q(i,j,k)
0066 Qi = Q(i,j,km1)
0067 Qim = Q(i,j,km2)
0068 Qimm = Q(i,j,km3)
0069 Qimmm = Q(i,j,km4)
0070
0071 MskIpp = maskC(i,j,kp2,bi,bj) * float(kp2-kp1)
0072 MskIp = maskC(i,j,kp1,bi,bj) * float(kp1-k)
0073 MskI = maskC(i,j,k,bi,bj) * float(k-km1)
0074 MskIm = maskC(i,j,km1,bi,bj) * float(km1-km2)
0075 MskImm = maskC(i,j,km2,bi,bj) * float(km2-km3)
0076 MskImmm = maskC(i,j,km3,bi,bj) * float(km3-km4)
46896f866d Jean*0077 ELSEIF (wTrans(i,j).GT.0. _d 0) THEN
09cd9ab332 Alis*0078 Qippp = Q(i,j,km3)
0079 Qipp = Q(i,j,km2)
0080 Qip = Q(i,j,km1)
0081 Qi = Q(i,j,k)
0082 Qim = Q(i,j,kp1)
0083 Qimm = Q(i,j,kp2)
0084 Qimmm = Q(i,j,kp3)
0085
0086 MskIpp = maskC(i,j,km2,bi,bj) * float(km2-km3)
0087 MskIp = maskC(i,j,km1,bi,bj) * float(km1-km2)
0088 MskI = maskC(i,j,k,bi,bj) * float(k-km1)
0089 MskIm = maskC(i,j,kp1,bi,bj) * float(kp1-k)
0090 MskImm = maskC(i,j,kp2,bi,bj) * float(kp2-kp1)
0091 MskImmm = maskC(i,j,kp3,bi,bj) * float(kp3-kp2)
fbb39f7b1d Mart*0092 ELSE
0093 Qippp = 0. _d 0
0094 Qipp = 0. _d 0
0095 Qip = 0. _d 0
0096 Qi = 0. _d 0
0097 Qim = 0. _d 0
0098 Qimm = 0. _d 0
0099 Qimmm = 0. _d 0
0100
0101 MskIpp = 0. _d 0
0102 MskIp = 0. _d 0
0103 MskI = 0. _d 0
0104 MskIm = 0. _d 0
0105 MskImm = 0. _d 0
0106 MskImmm = 0. _d 0
09cd9ab332 Alis*0107 ENDIF
0108
46896f866d Jean*0109 IF (wTrans(i,j).NE.0. _d 0) THEN
09cd9ab332 Alis*0110
46896f866d Jean*0111 Fac = 1. _d 0
d9afd45777 Alis*0112 DelP = (Qip-Qi)*MskI
0113 Phi = Fac * DelP
09cd9ab332 Alis*0114
46896f866d Jean*0115 Fac = Fac * ( cfl + 1. _d 0 )/3. _d 0
d9afd45777 Alis*0116 DelM = (Qi-Qim)*MskIm
0117 Del2 = DelP - DelM
0118 Phi = Phi - Fac * Del2
09cd9ab332 Alis*0119
46896f866d Jean*0120 Fac = Fac * ( cfl - 2. _d 0 )/4. _d 0
d9afd45777 Alis*0121 DelPP = (Qipp-Qip)*MskIp*MskI
0122 Del2P = DelPP - DelP
0123 Del3P = Del2P - Del2
0124 Phi = Phi + Fac * Del3p
09cd9ab332 Alis*0125
46896f866d Jean*0126 Fac = Fac * ( cfl - 3. _d 0 )/5. _d 0
d9afd45777 Alis*0127 DelMM = (Qim-Qimm)*MskImm*MskIm
0128 Del2M = DelM - DelMM
0129 Del3M = Del2 - Del2M
0130 Del4 = Del3P - Del3M
0131 Phi = Phi + Fac * Del4
09cd9ab332 Alis*0132
46896f866d Jean*0133 Fac = Fac * ( cfl + 2. _d 0 )/6. _d 0
d9afd45777 Alis*0134 DelPPP = (Qippp-Qipp)*MskIpp*MskIp*MskI
0135 Del2PP = DelPP - DelP
0136 Del3PP = Del2PP - Del2P
0137 Del4P = Del3PP - Del3P
0138 Del5P = Del4P - Del4
0139 Phi = Phi + Fac * Del5P
09cd9ab332 Alis*0140
46896f866d Jean*0141 Fac = Fac * ( cfl + 2. _d 0 )/7. _d 0
d9afd45777 Alis*0142 DelMMM = (Qimm-Qimmm)*MskImmm*MskImm*MskIm
0143 Del2MM = DelMM - DelMMM
0144 Del3MM = Del2M - Del2MM
0145 Del4M = Del3M - Del3MM
0146 Del5M = Del4 - Del4M
0147 Del6 = Del5P - Del5M
0148 Phi = Phi - Fac * Del6
09cd9ab332 Alis*0149
0150 DelIp = ( Qip - Qi ) * MskI
46896f866d Jean*0151
0152
0153
0154 recip_DelIp = sign(1. _d 0,DelIp)/max(abs(DelIp),Eps)
0155 Phi = Phi*recip_DelIp
09cd9ab332 Alis*0156
0157 DelI = ( Qi - Qim ) * MskIm
46896f866d Jean*0158
0159
0160
0161 recip_DelI = sign(1. _d 0,DelI)/max(abs(DelI),Eps)
0162 rp1h = DelI*recip_DelIp
baa188100f Alis*0163 rp1h_cfl = rp1h/(cfl+Eps)
09cd9ab332 Alis*0164
0165
46896f866d Jean*0166
09cd9ab332 Alis*0167
0168
d9afd45777 Alis*0169 d2 = Del2
0170 d2p1 = Del2P
0171 d2m1 = Del2M
46896f866d Jean*0172 A = 4. _d 0*d2 - d2p1
0173 B = 4. _d 0*d2p1 - d2
09cd9ab332 Alis*0174 C = d2
209a396f41 Jean*0175 D = d2p1
b4daa24319 Shre*0176 dp1h = max(min(min(A,B),min(C,D)),0. _d 0)
0177 & + min(max(max(A,B),max(C,D)),0. _d 0)
46896f866d Jean*0178 A = 4. _d 0*d2m1 - d2
0179 B = 4. _d 0*d2 - d2m1
09cd9ab332 Alis*0180 C = d2m1
209a396f41 Jean*0181 D = d2
b4daa24319 Shre*0182 dm1h = max(min(min(A,B),min(C,D)),0. _d 0)
0183 & + min(max(max(A,B),max(C,D)),0. _d 0)
46896f866d Jean*0184
0185
0186
0187
0188
0189
0190
0191 PhiMD = 1. _d 0/(1. _d 0-cfl)*(DelIp-dp1h)*recip_DelIp
0192 PhiLC = rp1h_cfl*( 1. _d 0+dm1h*recip_DelI )
0193
0e55d5c314 Mart*0194 PhiMin = max(min(0. _d 0,PhiMD),
b4daa24319 Shre*0195 & min(min(0. _d 0,2. _d 0*rp1h_cfl),PhiLC))
46896f866d Jean*0196 PhiMax = min(max(2. _d 0/(1. _d 0-cfl),PhiMD),
b4daa24319 Shre*0197 & max(max(0. _d 0,2. _d 0*rp1h_cfl),PhiLC))
09cd9ab332 Alis*0198 Phi = max(PhiMin,min(Phi,PhiMax))
0199
46896f866d Jean*0200 Psi = Phi * 0.5 _d 0 * (1. _d 0 - cfl)
09cd9ab332 Alis*0201 wT(i,j) = wTrans(i,j)*( Qi + Psi*DelIp )
0202 ELSE
46896f866d Jean*0203 wT(i,j) = 0. _d 0
09cd9ab332 Alis*0204 ENDIF
0205
0206 ENDDO
0207 ENDDO
0208
0209 RETURN
0210 END