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
6d046cd062 Alis*0001 #include "GAD_OPTIONS.h"
0002
cf79b8bd99 Jean*0003
0004
0005
0006
0af3073e4e Jean*0007 SUBROUTINE GAD_DST3_ADV_X(
692dd30681 Jean*0008 I bi,bj,k, calcCFL, deltaTloc,
0af3073e4e Jean*0009 I uTrans, uFld,
38a970fb5d Jean*0010 I maskLocW, tracer,
6d046cd062 Alis*0011 O uT,
0012 I myThid )
cf79b8bd99 Jean*0013
0014
0015
0016
0017
0018
6d046cd062 Alis*0019 IMPLICIT NONE
0020
0021
0022 #include "SIZE.h"
cc94647d10 Jean*0023 #ifdef OLD_DST3_FORMULATION
b79a37688e Patr*0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
cc94647d10 Jean*0026 #endif
0027 #include "GRID.h"
6d046cd062 Alis*0028 #include "GAD.h"
0029
0030
cf79b8bd99 Jean*0031
0032
0033
692dd30681 Jean*0034
cf79b8bd99 Jean*0035
0036
692dd30681 Jean*0037
cf79b8bd99 Jean*0038
0039
6d046cd062 Alis*0040 INTEGER bi,bj,k
692dd30681 Jean*0041 LOGICAL calcCFL
b79a37688e Patr*0042 _RL deltaTloc
6d046cd062 Alis*0043 _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0af3073e4e Jean*0044 _RL uFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
38a970fb5d Jean*0045 _RS maskLocW(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
6d046cd062 Alis*0046 _RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0047 INTEGER myThid
0048
cf79b8bd99 Jean*0049
0050
0051 _RL uT (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0052
6d046cd062 Alis*0053
cf79b8bd99 Jean*0054
0055
62743db5c5 Jean*0056
6d046cd062 Alis*0057 INTEGER i,j
62743db5c5 Jean*0058 _RL Rjm,Rj,Rjp,uCFL,d0,d1
cf79b8bd99 Jean*0059 #ifdef OLD_DST3_FORMULATION
6c82a26cad Alis*0060 _RL psiP,psiM,thetaP,thetaM
b79a37688e Patr*0061 _RL smallNo
983c7d32b1 Jean*0062
b79a37688e Patr*0063
0d75a51072 Mart*0064
370e5a47fd Jean*0065
0066
b79a37688e Patr*0067 smallNo = 1.0D-20
370e5a47fd Jean*0068
cf79b8bd99 Jean*0069 #endif
6d046cd062 Alis*0070
370e5a47fd Jean*0071 DO j=1-OLy,sNy+OLy
0072 uT(1-OLx,j)=0.
0073 uT(2-OLx,j)=0.
0074 uT(sNx+OLx,j)=0.
360ad14abb Mart*0075 ENDDO
370e5a47fd Jean*0076 DO j=1-OLy,sNy+OLy
0077 DO i=1-OLx+2,sNx+OLx-1
38a970fb5d Jean*0078 Rjp=(tracer(i+1,j)-tracer( i ,j))*maskLocW(i+1,j)
0079 Rj =(tracer( i ,j)-tracer(i-1,j))*maskLocW( i ,j)
0080 Rjm=(tracer(i-1,j)-tracer(i-2,j))*maskLocW(i-1,j)
6d046cd062 Alis*0081
692dd30681 Jean*0082 uCFL = uFld(i,j)
0083 IF ( calcCFL ) uCFL = ABS( uFld(i,j)*deltaTloc
62743db5c5 Jean*0084 & *recip_dxC(i,j,bi,bj)*recip_deepFacC(k) )
0085 d0=(2.-uCFL)*(1.-uCFL)*oneSixth
0086 d1=(1.-uCFL*uCFL)*oneSixth
cf79b8bd99 Jean*0087 #ifdef OLD_DST3_FORMULATION
b79a37688e Patr*0088 IF ( ABS(Rj).LT.smallNo .OR.
0089 & ABS(Rjm).LT.smallNo ) THEN
0090 thetaP=0.
0091 psiP=0.
0092 ELSE
0093 thetaP=(Rjm+smallNo)/(smallNo+Rj)
0094 psiP=d0+d1*thetaP
0095 ENDIF
0096 IF ( ABS(Rj).LT.smallNo .OR.
0097 & ABS(Rjp).LT.smallNo ) THEN
0098 thetaM=0.
0099 psiM=0.
0100 ELSE
0101 thetaM=(Rjp+smallNo)/(smallNo+Rj)
0102 psiM=d0+d1*thetaM
0103 ENDIF
6d046cd062 Alis*0104 uT(i,j)=
cf79b8bd99 Jean*0105 & 0.5*(uTrans(i,j)+ABS(uTrans(i,j)))
6c82a26cad Alis*0106 & *( Tracer(i-1,j) + psiP*Rj )
cf79b8bd99 Jean*0107 & +0.5*(uTrans(i,j)-ABS(uTrans(i,j)))
6c82a26cad Alis*0108 & *( Tracer( i ,j) - psiM*Rj )
cf79b8bd99 Jean*0109 #else /* OLD_DST3_FORMULATION */
0110 uT(i,j)=
0111 & 0.5*(uTrans(i,j)+ABS(uTrans(i,j)))
0112 & *( Tracer(i-1,j) + (d0*Rj+d1*Rjm) )
0113 & +0.5*(uTrans(i,j)-ABS(uTrans(i,j)))
0114 & *( Tracer( i ,j) - (d0*Rj+d1*Rjp) )
0115 #endif /* OLD_DST3_FORMULATION */
6d046cd062 Alis*0116
0117 ENDDO
0118 ENDDO
0119
0120 RETURN
0121 END