File indexing completed on 2021-02-21 06:11:31 UTC
view on githubraw file Latest commit 0d75a510 on 2021-02-20 23:33:00 UTC
7baaf69241 Alis*0001 #include "GAD_OPTIONS.h"
0002
8a9f54a9ca Jean*0003
0004
0005
0006
0af3073e4e Jean*0007 SUBROUTINE GAD_DST3_ADV_R(
8a9f54a9ca Jean*0008 I bi,bj,k,dTarg,
0af3073e4e Jean*0009 I rTrans, wFld,
7baaf69241 Alis*0010 I tracer,
0011 O wT,
0012 I myThid )
8a9f54a9ca Jean*0013
0014
0015
0016
0017
0018
7baaf69241 Alis*0019 IMPLICIT NONE
0020
0021
0022 #include "SIZE.h"
cc94647d10 Jean*0023 #ifdef OLD_DST3_FORMULATION
7baaf69241 Alis*0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
cc94647d10 Jean*0026 #endif
0027 #include "GRID.h"
7baaf69241 Alis*0028 #include "GAD.h"
0029
0030
8a9f54a9ca Jean*0031
0032
0033
0034
0035
0af3073e4e Jean*0036
8a9f54a9ca Jean*0037
0038
0039 INTEGER bi,bj,k
7baaf69241 Alis*0040 _RL dTarg
0041 _RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0af3073e4e Jean*0042 _RL wFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
8a9f54a9ca Jean*0043 _RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
7baaf69241 Alis*0044 INTEGER myThid
0045
8a9f54a9ca Jean*0046
0047
0048 _RL wT (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0049
7baaf69241 Alis*0050
8a9f54a9ca Jean*0051
0052
0053
0af3073e4e Jean*0054
8a9f54a9ca Jean*0055
0056 INTEGER i,j,kp1,km1,km2
cf79b8bd99 Jean*0057 _RL wLoc
7baaf69241 Alis*0058 _RL Rjm,Rj,Rjp,cfl,d0,d1
cf79b8bd99 Jean*0059 #ifdef OLD_DST3_FORMULATION
7baaf69241 Alis*0060 _RL psiP,psiM,thetaP,thetaM
b79a37688e Patr*0061 _RL smallNo
7baaf69241 Alis*0062
0d75a51072 Mart*0063
370e5a47fd Jean*0064
0065
b79a37688e Patr*0066 smallNo = 1.0D-20
370e5a47fd Jean*0067
cf79b8bd99 Jean*0068 #endif
b79a37688e Patr*0069
7baaf69241 Alis*0070 km2=MAX(1,k-2)
0071 km1=MAX(1,k-1)
0072 kp1=MIN(Nr,k+1)
0073
370e5a47fd Jean*0074 DO j=1-OLy,sNy+OLy
0075 DO i=1-OLx,sNx+OLx
8a9f54a9ca Jean*0076 Rjp=(tracer(i,j,k)-tracer(i,j,kp1))
0077 & *maskC(i,j,kp1,bi,bj)
0078 Rj =(tracer(i,j,km1)-tracer(i,j,k))
0079 & *maskC(i,j,k,bi,bj)*maskC(i,j,km1,bi,bj)
0080 Rjm=(tracer(i,j,km2)-tracer(i,j,km1))
0081 & *maskC(i,j,km1,bi,bj)
7baaf69241 Alis*0082
99c9058df1 Jean*0083 wLoc = wFld(i,j)
0084
cf79b8bd99 Jean*0085 cfl=ABS(wLoc*dTarg*recip_drC(k))
7baaf69241 Alis*0086 d0=(2.-cfl)*(1.-cfl)*oneSixth
0087 d1=(1.-cfl*cfl)*oneSixth
cf79b8bd99 Jean*0088 #ifdef OLD_DST3_FORMULATION
b79a37688e Patr*0089 IF ( ABS(Rj).LT.smallNo .OR.
0090 & ABS(Rjm).LT.smallNo ) THEN
0091 thetaP=0.
0092 psiP=0.
0093 ELSE
0094 thetaP=(Rjm+smallNo)/(smallNo+Rj)
0095 psiP=d0+d1*thetaP
0096 ENDIF
0097 IF ( ABS(Rj).LT.smallNo .OR.
0098 & ABS(Rjp).LT.smallNo ) THEN
0099 thetaM=0.
0100 psiM=0.
0101 ELSE
0102 thetaM=(Rjp+smallNo)/(smallNo+Rj)
0103 psiM=d0+d1*thetaM
0104 ENDIF
0105 wT(i,j)=
cf79b8bd99 Jean*0106 & 0.5*(rTrans(i,j)+ABS(rTrans(i,j)))
8a9f54a9ca Jean*0107 & *( tracer(i,j, k ) + psiM*Rj )
cf79b8bd99 Jean*0108 & +0.5*(rTrans(i,j)-ABS(rTrans(i,j)))
8a9f54a9ca Jean*0109 & *( tracer(i,j,km1) - psiP*Rj )
cf79b8bd99 Jean*0110 #else /* OLD_DST3_FORMULATION */
0111 wT(i,j)=
0112 & 0.5*(rTrans(i,j)+ABS(rTrans(i,j)))
0113 & *( tracer(i,j, k ) + (d0*Rj+d1*Rjp) )
0114 & +0.5*(rTrans(i,j)-ABS(rTrans(i,j)))
0115 & *( tracer(i,j,km1) - (d0*Rj+d1*Rjm) )
0116 #endif /* OLD_DST3_FORMULATION */
983c7d32b1 Jean*0117
7baaf69241 Alis*0118 ENDDO
0119 ENDDO
0120
0121 RETURN
0122 END