File indexing completed on 2022-04-21 05:09:20 UTC
view on githubraw file Latest commit 113b21cd on 2022-04-20 17:14:29 UTC
809c36b928 Patr*0001 #include "SEAICE_OPTIONS.h"
772b2ed80e Gael*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
09510da3bb Dimi*0005
b7e868d5f4 Jean*0006
0007
0008
0009 SUBROUTINE ADVECT(
0010 I UI, VI,
0011 U fld,
0012 O fldNm1,
0013 I iceMsk, myThid )
0014
0015
3ee9cb5aa5 Jean*0016
b7e868d5f4 Jean*0017
0018
0019
3ee9cb5aa5 Jean*0020
b7e868d5f4 Jean*0021
0022
0023
809c36b928 Patr*0024 IMPLICIT NONE
09510da3bb Dimi*0025
b7e868d5f4 Jean*0026
809c36b928 Patr*0027 #include "SIZE.h"
0028 #include "EEPARAMS.h"
0029 #include "PARAMS.h"
4366d31d92 Mart*0030 #include "GRID.h"
7303eab4f2 Patr*0031 #include "SEAICE_SIZE.h"
809c36b928 Patr*0032 #include "SEAICE_PARAMS.h"
7109a141b2 Patr*0033 #ifdef ALLOW_AUTODIFF_TAMC
0034 # include "tamc.h"
0035 #endif
0036
b7e868d5f4 Jean*0037
0038
0039
0040
0041
0042
0043
8744e57318 Mart*0044 _RL UI (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0045 _RL VI (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0046 _RL fld (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0047 _RL fldNm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0048 _RL iceMsk (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
809c36b928 Patr*0049 INTEGER myThid
b7e868d5f4 Jean*0050
809c36b928 Patr*0051
b7e868d5f4 Jean*0052
0053
0054
baa476eeba Dimi*0055 INTEGER i, j, bi, bj
8744e57318 Mart*0056 INTEGER k
3cb5d2b11d Mart*0057 _RL DELTT
8744e57318 Mart*0058 _RL DIFFA (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0059 _RL tmpFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
04a836ae4f Mart*0060 _RL afx (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0061 _RL afy (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
809c36b928 Patr*0062
8744e57318 Mart*0063 DELTT=SEAICE_deltaTtherm
0064
809c36b928 Patr*0065 DO bj=myByLo(myThid),myByHi(myThid)
0066 DO bi=myBxLo(myThid),myBxHi(myThid)
0067 DO j=1-OLy,sNy+OLy
0068 DO i=1-OLx,sNx+OLx
b7e868d5f4 Jean*0069 fldNm1(i,j,bi,bj) = fld(i,j,bi,bj)
809c36b928 Patr*0070 ENDDO
0071 ENDDO
0072 ENDDO
0073 ENDDO
0074
113b21cd45 Mart*0075 #ifdef ALLOW_AUTODIFF_TAMC
0076
0077 #endif
8744e57318 Mart*0078 DO k=1,2
113b21cd45 Mart*0079 #ifdef ALLOW_AUTODIFF_TAMC
0080
0081 #endif
8744e57318 Mart*0082
0083 DO bj=myByLo(myThid),myByHi(myThid)
0084 DO bi=myBxLo(myThid),myBxHi(myThid)
0085 DO j=1-OLy,sNy+OLy
0086 DO i=1-OLx,sNx+OLx
b7e868d5f4 Jean*0087 tmpFld(i,j,bi,bj)=HALF*(fld(i,j,bi,bj)
8744e57318 Mart*0088 & +fldNm1(i,j,bi,bj))
baa476eeba Dimi*0089 ENDDO
0090 ENDDO
0091 ENDDO
8744e57318 Mart*0092 ENDDO
0093
113b21cd45 Mart*0094 #ifdef ALLOW_AUTODIFF
0095 DO j=1-OLy,sNy+OLy
0096 DO i=1-OLx,sNx+OLx
b7e868d5f4 Jean*0097 afx(i,j) = 0. _d 0
0098 afy(i,j) = 0. _d 0
04a836ae4f Mart*0099 ENDDO
0100 ENDDO
113b21cd45 Mart*0101 #endif /* ALLOW_AUTODIFF */
baa476eeba Dimi*0102
0103
8744e57318 Mart*0104 IF ( .NOT. SEAICEuseFluxForm ) THEN
0105 DO bj=myByLo(myThid),myByHi(myThid)
0106 DO bi=myBxLo(myThid),myBxHi(myThid)
b7e868d5f4 Jean*0107 DO j=0,sNy+1
0108 DO i=0,sNx+1
4366d31d92 Mart*0109
0110
b7e868d5f4 Jean*0111 fld(i,j,bi,bj)=fldNm1(i,j,bi,bj)
8744e57318 Mart*0112 & -DELTT*(
b7e868d5f4 Jean*0113 & ( tmpFld(i ,j ,bi,bj)+tmpFld(i+1,j ,bi,bj))
0114 & * UI(i+1,j, bi,bj) -
0115 & ( tmpFld(i ,j ,bi,bj)+tmpFld(i-1,j ,bi,bj))
0116 & * UI(i ,j, bi,bj) )*maskInC(i,j,bi,bj)
0117 & *(HALF * _recip_dxF(i,j,bi,bj))
8744e57318 Mart*0118 & -DELTT*(
b7e868d5f4 Jean*0119 & ( tmpFld(i ,j ,bi,bj)+tmpFld(i ,j+1,bi,bj))
0120 & * VI(i ,j+1, bi,bj)
0121 & * _dxG(i ,j+1,bi,bj) -
0122 & ( tmpFld(i ,j ,bi,bj)+tmpFld(i ,j-1,bi,bj))
0123 & * VI(i ,j , bi,bj)
0124 & * _dxG(i,j,bi,bj))*maskInC(i,j,bi,bj)
0125 & *(HALF * _recip_dyF(i,j,bi,bj) * _recip_dxF(i,j,bi,bj))
9cf7ff39d8 Mart*0126 ENDDO
0127 ENDDO
0128 ENDDO
8744e57318 Mart*0129 ENDDO
0130 ELSE
04a836ae4f Mart*0131
8744e57318 Mart*0132 DO bj=myByLo(myThid),myByHi(myThid)
0133 DO bi=myBxLo(myThid),myBxHi(myThid)
04a836ae4f Mart*0134
b7e868d5f4 Jean*0135 DO j=1,sNy+1
0136 DO i=1,sNx+1
0137 afx(i,j) = _dyG(i,j,bi,bj) * UI(i,j,bi,bj)
0138 & * 0.5 _d 0 * (tmpFld(i,j,bi,bj)+tmpFld(i-1,j,bi,bj))
0139 afy(i,j) = _dxG(i,j,bi,bj) * VI(i,j,bi,bj)
0140 & * 0.5 _d 0 * (tmpFld(i,j,bi,bj)+tmpFld(i,j-1,bi,bj))
04a836ae4f Mart*0141 ENDDO
0142 ENDDO
b7e868d5f4 Jean*0143 DO j=1,sNy
0144 DO i=1,sNx
0145 fld(i,j,bi,bj)=fldNm1(i,j,bi,bj)
70baca3a4f Jean*0146 & -DELTT * (
b7e868d5f4 Jean*0147 & afx(i+1,j) - afx(i,j)
0148 & + afy(i,j+1) - afy(i,j)
0149 & )*recip_rA(i,j,bi,bj)*maskInC(i,j,bi,bj)
baa476eeba Dimi*0150 ENDDO
0151 ENDDO
0152 ENDDO
8744e57318 Mart*0153 ENDDO
0154 ENDIF
809c36b928 Patr*0155
d2c42c7d63 Jean*0156 CALL EXCH_XY_RL( fld, myThid )
baa476eeba Dimi*0157
809c36b928 Patr*0158 ENDDO
0159
b7e868d5f4 Jean*0160 IF ( DIFF1.GT.0. _d 0 ) THEN
70baca3a4f Jean*0161
b7e868d5f4 Jean*0162
8744e57318 Mart*0163
b7e868d5f4 Jean*0164 DO bj=myByLo(myThid),myByHi(myThid)
0165 DO bi=myBxLo(myThid),myBxHi(myThid)
0166 DO j=1-OLy,sNy+OLy
0167 DO i=1-OLx,sNx+OLx
0168 tmpFld(i,j,bi,bj) = fldNm1(i,j,bi,bj)
0169 ENDDO
809c36b928 Patr*0170 ENDDO
0171 ENDDO
0172 ENDDO
b7e868d5f4 Jean*0173
809c36b928 Patr*0174
70baca3a4f Jean*0175
b7e868d5f4 Jean*0176 DO bj=myByLo(myThid),myByHi(myThid)
0177 DO bi=myBxLo(myThid),myBxHi(myThid)
8744e57318 Mart*0178 DO j=1-OLy,sNy+OLy
0179 DO i=1-OLx,sNx+OLx
b7e868d5f4 Jean*0180 DIFFA(i,j,bi,bj) = MIN( _dxF(i,j,bi,bj), _dyF(i,j,bi,bj) )
8744e57318 Mart*0181 ENDDO
0182 ENDDO
b7e868d5f4 Jean*0183 ENDDO
0184 ENDDO
0185
0186 CALL DIFFUS( tmpFld, DIFFA, iceMsk, myThid )
0187
0188 DO bj=myByLo(myThid),myByHi(myThid)
0189 DO bi=myBxLo(myThid),myBxHi(myThid)
0190 DO j=1-OLy,sNy+OLy
0191 DO i=1-OLx,sNx+OLx
0192 fld(i,j,bi,bj) = ( fld(i,j,bi,bj)
0193 & +tmpFld(i,j,bi,bj)*DIFF1*DELTT
0194 & )*iceMsk(i,j,bi,bj)
0195 ENDDO
809c36b928 Patr*0196 ENDDO
0197 ENDDO
b7e868d5f4 Jean*0198 ENDDO
0199
0200
0201
0202 _EXCH_XY_RL( tmpFld, myThid )
70baca3a4f Jean*0203
b7e868d5f4 Jean*0204 DO bj=myByLo(myThid),myByHi(myThid)
0205 DO bi=myBxLo(myThid),myBxHi(myThid)
8744e57318 Mart*0206 DO j=1-OLy,sNy+OLy
0207 DO i=1-OLx,sNx+OLx
b7e868d5f4 Jean*0208 #ifdef ALLOW_AUTODIFF_TAMC
0209
0210
0211 #endif
0212 DIFFA(i,j,bi,bj) = - DIFFA(i,j,bi,bj)*DIFFA(i,j,bi,bj)
8744e57318 Mart*0213 ENDDO
0214 ENDDO
0215 ENDDO
b7e868d5f4 Jean*0216 ENDDO
0217
0218 CALL DIFFUS( tmpFld, DIFFA, iceMsk, myThid )
8744e57318 Mart*0219
0220 DO bj=myByLo(myThid),myByHi(myThid)
0221 DO bi=myBxLo(myThid),myBxHi(myThid)
0222 DO j=1-OLy,sNy+OLy
0223 DO i=1-OLx,sNx+OLx
b7e868d5f4 Jean*0224 fld(i,j,bi,bj) = ( fld(i,j,bi,bj)
0225 & +tmpFld(i,j,bi,bj)*DIFF1*DELTT
0226 & )*iceMsk(i,j,bi,bj)
8744e57318 Mart*0227 ENDDO
809c36b928 Patr*0228 ENDDO
0229 ENDDO
0230 ENDDO
b7e868d5f4 Jean*0231
0232
70baca3a4f Jean*0233
b7e868d5f4 Jean*0234
0235 ENDIF
809c36b928 Patr*0236
0237 RETURN
0238 END