Changeset 5246 for LMDZ6/trunk/libf/dyn3d_common/advy.f90
- Timestamp:
- Oct 21, 2024, 2:58:45 PM (23 hours ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3d_common/advy.f90
r5245 r5246 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE advy(limit,dty,pbarv,sm,s0,sx,sy,sz) 5 IMPLICIT NONE 6 7 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 8 C C 9 C first-order moments (SOM) advection of tracer in Y direction C 10 C C 11 C Source : Pascal Simon ( Meteo, CNRM ) C 12 C Adaptation : A.A. (LGGE) C 13 C Derniere Modif : 15/12/94 LAST 14 C C 15 C sont les arguments d'entree pour le s-pg C 16 C C 17 C argument de sortie du s-pg C 18 C C 19 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 20 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 21 C 22 C Rem : Probleme aux poles il faut reecrire ce cas specifique 23 C Attention au sens de l'indexation 24 C 25 C parametres principaux du modele 26 C 27 C 28 include "dimensions.h" 29 include "paramet.h" 30 include "comgeom2.h" 31 32 C Arguments : 33 C ---------- 34 C dty : frequence fictive d'appel du transport 35 C parbu,pbarv : flux de masse en x et y en Pa.m2.s-1 36 37 INTEGER lon,lat,niv 38 INTEGER i,j,jv,k,kp,l 39 INTEGER ntra 40 PARAMETER (ntra = 1) 41 42 REAL dty 43 REAL pbarv ( iip1,jjm, llm ) 44 45 C moments: SM total mass in each grid box 46 C S0 mass of tracer in each grid box 47 C Si 1rst order moment in i direction 48 C 49 REAL SM(iip1,jjp1,llm) 50 + ,S0(iip1,jjp1,llm,ntra) 51 REAL sx(iip1,jjp1,llm,ntra) 52 + ,sy(iip1,jjp1,llm,ntra) 53 + ,sz(iip1,jjp1,llm,ntra) 54 55 56 C Local : 57 C ------- 58 59 C mass fluxes across the boundaries (UGRI,VGRI,WGRI) 60 C mass fluxes in kg 61 C declaration : 62 63 REAL VGRI(iip1,0:jjp1,llm) 64 65 C Rem : UGRI et WGRI ne sont pas utilises dans 66 C cette subroutine ( advection en y uniquement ) 67 C Rem 2 :le dimensionnement de VGRI depend de celui de pbarv 68 C 69 C the moments F are similarly defined and used as temporary 70 C storage for portions of the grid boxes in transit 71 C 72 REAL F0(iim,0:jjp1,ntra),FM(iim,0:jjp1) 73 REAL FX(iim,jjm,ntra),FY(iim,jjm,ntra) 74 REAL FZ(iim,jjm,ntra) 75 REAL S00(ntra) 76 REAL SM0 ! Just temporal variable 77 C 78 C work arrays 79 C 80 REAL ALF(iim,0:jjp1),ALF1(iim,0:jjp1) 81 REAL ALFQ(iim,0:jjp1),ALF1Q(iim,0:jjp1) 82 REAL TEMPTM ! Just temporal variable 83 c 84 C Special pour poles 85 c 86 REAL sbms,sfms,sfzs,sbmn,sfmn,sfzn 87 REAL sns0(ntra),snsz(ntra),snsm 88 REAL s1v(llm),slatv(llm) 89 REAL qy1(iim,llm,ntra),qylat(iim,llm,ntra) 90 REAL cx1(llm,ntra), cxLAT(llm,ntra) 91 REAL cy1(llm,ntra), cyLAT(llm,ntra) 92 REAL z1(iim), zcos(iim), zsin(iim) 93 real smpn,smps,s0pn,s0ps 94 REAL SSUM 95 EXTERNAL SSUM 96 C 97 REAL sqi,sqf 98 LOGICAL LIMIT 99 100 lon = iim ! rem : Il est possible qu'un pbl. arrive ici 101 lat = jjp1 ! a cause des dim. differentes entre les 102 niv=llm 103 104 C 105 C the moments Fi are used as temporary storage for 106 C portions of the grid boxes in transit at the current level 107 C 108 C work arrays 109 C 110 111 DO l = 1,llm 112 DO j = 1,jjm 113 DO i = 1,iip1 114 vgri (i,j,llm+1-l)=-1.*pbarv(i,j,l) 115 enddo 116 enddo 117 do i=1,iip1 118 vgri(i,0,l) = 0. 119 vgri(i,jjp1,l) = 0. 120 enddo 121 enddo 122 123 DO 1 L=1,NIV 124 C 125 C place limits on appropriate moments before transport 126 C (if flux-limiting is to be applied) 127 C 128 IF(.NOT.LIMIT) GO TO 11 129 C 130 DO 10 JV=1,NTRA 131 DO 10 K=1,LAT 132 DO 100 I=1,LON 133 sy(I,K,L,JV)=SIGN(AMIN1(AMAX1(S0(I,K,L,JV),0.), 134 + ABS(sy(I,K,L,JV))),sy(I,K,L,JV)) 135 100 CONTINUE 136 10 CONTINUE 137 C 4 SUBROUTINE advy(limit,dty,pbarv,sm,s0,sx,sy,sz) 5 IMPLICIT NONE 6 7 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 8 ! C 9 ! first-order moments (SOM) advection of tracer in Y direction C 10 ! C 11 ! Source : Pascal Simon ( Meteo, CNRM ) C 12 ! Adaptation : A.A. (LGGE) C 13 ! Derniere Modif : 15/12/94 LAST 14 ! C 15 ! sont les arguments d'entree pour le s-pg C 16 ! C 17 ! argument de sortie du s-pg C 18 ! C 19 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 20 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 21 ! 22 ! Rem : Probleme aux poles il faut reecrire ce cas specifique 23 ! Attention au sens de l'indexation 24 ! 25 ! parametres principaux du modele 26 ! 27 ! 28 include "dimensions.h" 29 include "paramet.h" 30 include "comgeom2.h" 31 32 ! Arguments : 33 ! ---------- 34 ! dty : frequence fictive d'appel du transport 35 ! parbu,pbarv : flux de masse en x et y en Pa.m2.s-1 36 37 INTEGER :: lon,lat,niv 38 INTEGER :: i,j,jv,k,kp,l 39 INTEGER :: ntra 40 PARAMETER (ntra = 1) 41 42 REAL :: dty 43 REAL :: pbarv ( iip1,jjm, llm ) 44 45 ! moments: SM total mass in each grid box 46 ! S0 mass of tracer in each grid box 47 ! Si 1rst order moment in i direction 48 ! 49 REAL :: SM(iip1,jjp1,llm) & 50 ,S0(iip1,jjp1,llm,ntra) 51 REAL :: sx(iip1,jjp1,llm,ntra) & 52 ,sy(iip1,jjp1,llm,ntra) & 53 ,sz(iip1,jjp1,llm,ntra) 54 55 56 ! Local : 57 ! ------- 58 59 ! mass fluxes across the boundaries (UGRI,VGRI,WGRI) 60 ! mass fluxes in kg 61 ! declaration : 62 63 REAL :: VGRI(iip1,0:jjp1,llm) 64 65 ! Rem : UGRI et WGRI ne sont pas utilises dans 66 ! cette subroutine ( advection en y uniquement ) 67 ! Rem 2 :le dimensionnement de VGRI depend de celui de pbarv 68 ! 69 ! the moments F are similarly defined and used as temporary 70 ! storage for portions of the grid boxes in transit 71 ! 72 REAL :: F0(iim,0:jjp1,ntra),FM(iim,0:jjp1) 73 REAL :: FX(iim,jjm,ntra),FY(iim,jjm,ntra) 74 REAL :: FZ(iim,jjm,ntra) 75 REAL :: S00(ntra) 76 REAL :: SM0 ! Just temporal variable 77 ! 78 ! work arrays 79 ! 80 REAL :: ALF(iim,0:jjp1),ALF1(iim,0:jjp1) 81 REAL :: ALFQ(iim,0:jjp1),ALF1Q(iim,0:jjp1) 82 REAL :: TEMPTM ! Just temporal variable 83 ! 84 ! Special pour poles 85 ! 86 REAL :: sbms,sfms,sfzs,sbmn,sfmn,sfzn 87 REAL :: sns0(ntra),snsz(ntra),snsm 88 REAL :: s1v(llm),slatv(llm) 89 REAL :: qy1(iim,llm,ntra),qylat(iim,llm,ntra) 90 REAL :: cx1(llm,ntra), cxLAT(llm,ntra) 91 REAL :: cy1(llm,ntra), cyLAT(llm,ntra) 92 REAL :: z1(iim), zcos(iim), zsin(iim) 93 real :: smpn,smps,s0pn,s0ps 94 REAL :: SSUM 95 EXTERNAL SSUM 96 ! 97 REAL :: sqi,sqf 98 LOGICAL :: LIMIT 99 100 lon = iim ! rem : Il est possible qu'un pbl. arrive ici 101 lat = jjp1 ! a cause des dim. differentes entre les 102 niv=llm 103 104 ! 105 ! the moments Fi are used as temporary storage for 106 ! portions of the grid boxes in transit at the current level 107 ! 108 ! work arrays 109 ! 110 111 DO l = 1,llm 112 DO j = 1,jjm 113 DO i = 1,iip1 114 vgri (i,j,llm+1-l)=-1.*pbarv(i,j,l) 115 enddo 116 enddo 117 do i=1,iip1 118 vgri(i,0,l) = 0. 119 vgri(i,jjp1,l) = 0. 120 enddo 121 enddo 122 123 DO L=1,NIV 124 ! 125 ! place limits on appropriate moments before transport 126 ! (if flux-limiting is to be applied) 127 ! 128 IF(.NOT.LIMIT) GO TO 11 129 ! 130 DO JV=1,NTRA 131 DO K=1,LAT 132 DO I=1,LON 133 sy(I,K,L,JV)=SIGN(AMIN1(AMAX1(S0(I,K,L,JV),0.), & 134 ABS(sy(I,K,L,JV))),sy(I,K,L,JV)) 135 END DO 136 END DO 137 END DO 138 ! 138 139 11 CONTINUE 139 C 140 C le flux a travers le pole Nord est traite separement 141 C 142 SM0=0. 143 DO 20 JV=1,NTRA 144 S00(JV)=0. 145 20 CONTINUE 146 C 147 DO 21 I=1,LON 148 C 149 IF(VGRI(I,0,L).LE.0.) THEN 150 FM(I,0)=-VGRI(I,0,L)*DTY 151 ALF(I,0)=FM(I,0)/SM(I,1,L) 152 SM(I,1,L)=SM(I,1,L)-FM(I,0) 153 SM0=SM0+FM(I,0) 154 ENDIF 155 C 156 ALFQ(I,0)=ALF(I,0)*ALF(I,0) 157 ALF1(I,0)=1.-ALF(I,0) 158 ALF1Q(I,0)=ALF1(I,0)*ALF1(I,0) 159 C 160 21 CONTINUE 161 C 162 DO 22 JV=1,NTRA 163 DO 220 I=1,LON 164 C 165 IF(VGRI(I,0,L).LE.0.) THEN 166 C 167 F0(I,0,JV)=ALF(I,0)* 168 + ( S0(I,1,L,JV)-ALF1(I,0)*sy(I,1,L,JV) ) 169 C 170 S00(JV)=S00(JV)+F0(I,0,JV) 171 S0(I,1,L,JV)=S0(I,1,L,JV)-F0(I,0,JV) 172 sy(I,1,L,JV)=ALF1Q(I,0)*sy(I,1,L,JV) 173 sx(I,1,L,JV)=ALF1 (I,0)*sx(I,1,L,JV) 174 sz(I,1,L,JV)=ALF1 (I,0)*sz(I,1,L,JV) 175 C 176 ENDIF 177 C 178 220 CONTINUE 179 22 CONTINUE 180 C 181 DO 23 I=1,LON 182 IF(VGRI(I,0,L).GT.0.) THEN 183 FM(I,0)=VGRI(I,0,L)*DTY 184 ALF(I,0)=FM(I,0)/SM0 185 ENDIF 186 23 CONTINUE 187 C 188 DO 24 JV=1,NTRA 189 DO 240 I=1,LON 190 IF(VGRI(I,0,L).GT.0.) THEN 191 F0(I,0,JV)=ALF(I,0)*S00(JV) 192 ENDIF 193 240 CONTINUE 194 24 CONTINUE 195 C 196 C puts the temporary moments Fi into appropriate neighboring boxes 197 C 198 DO 25 I=1,LON 199 C 200 IF(VGRI(I,0,L).GT.0.) THEN 201 SM(I,1,L)=SM(I,1,L)+FM(I,0) 202 ALF(I,0)=FM(I,0)/SM(I,1,L) 203 ENDIF 204 C 205 ALF1(I,0)=1.-ALF(I,0) 206 C 207 25 CONTINUE 208 C 209 DO 26 JV=1,NTRA 210 DO 260 I=1,LON 211 C 212 IF(VGRI(I,0,L).GT.0.) THEN 213 C 214 TEMPTM=ALF(I,0)*S0(I,1,L,JV)-ALF1(I,0)*F0(I,0,JV) 215 S0(I,1,L,JV)=S0(I,1,L,JV)+F0(I,0,JV) 216 sy(I,1,L,JV)=ALF1(I,0)*sy(I,1,L,JV)+3.*TEMPTM 217 C 218 ENDIF 219 C 220 260 CONTINUE 221 26 CONTINUE 222 C 223 C calculate flux and moments between adjacent boxes 224 C 1- create temporary moments/masses for partial boxes in transit 225 C 2- reajusts moments remaining in the box 226 C 227 C flux from KP to K if V(K).lt.0 and from K to KP if V(K).gt.0 228 C 229 DO 30 K=1,LAT-1 230 KP=K+1 231 DO 300 I=1,LON 232 C 233 IF(VGRI(I,K,L).LT.0.) THEN 234 FM(I,K)=-VGRI(I,K,L)*DTY 235 ALF(I,K)=FM(I,K)/SM(I,KP,L) 236 SM(I,KP,L)=SM(I,KP,L)-FM(I,K) 237 ELSE 238 FM(I,K)=VGRI(I,K,L)*DTY 239 ALF(I,K)=FM(I,K)/SM(I,K,L) 240 SM(I,K,L)=SM(I,K,L)-FM(I,K) 241 ENDIF 242 C 243 ALFQ(I,K)=ALF(I,K)*ALF(I,K) 244 ALF1(I,K)=1.-ALF(I,K) 245 ALF1Q(I,K)=ALF1(I,K)*ALF1(I,K) 246 C 247 300 CONTINUE 248 30 CONTINUE 249 C 250 DO 31 JV=1,NTRA 251 DO 31 K=1,LAT-1 252 KP=K+1 253 DO 310 I=1,LON 254 C 255 IF(VGRI(I,K,L).LT.0.) THEN 256 C 257 F0(I,K,JV)=ALF (I,K)* 258 + ( S0(I,KP,L,JV)-ALF1(I,K)*sy(I,KP,L,JV) ) 259 FY(I,K,JV)=ALFQ(I,K)*sy(I,KP,L,JV) 260 FX(I,K,JV)=ALF (I,K)*sx(I,KP,L,JV) 261 FZ(I,K,JV)=ALF (I,K)*sz(I,KP,L,JV) 262 C 263 S0(I,KP,L,JV)=S0(I,KP,L,JV)-F0(I,K,JV) 264 sy(I,KP,L,JV)=ALF1Q(I,K)*sy(I,KP,L,JV) 265 sx(I,KP,L,JV)=sx(I,KP,L,JV)-FX(I,K,JV) 266 sz(I,KP,L,JV)=sz(I,KP,L,JV)-FZ(I,K,JV) 267 C 268 ELSE 269 C 270 F0(I,K,JV)=ALF (I,K)* 271 + ( S0(I,K,L,JV)+ALF1(I,K)*sy(I,K,L,JV) ) 272 FY(I,K,JV)=ALFQ(I,K)*sy(I,K,L,JV) 273 FX(I,K,JV)=ALF(I,K)*sx(I,K,L,JV) 274 FZ(I,K,JV)=ALF(I,K)*sz(I,K,L,JV) 275 C 276 S0(I,K,L,JV)=S0(I,K,L,JV)-F0(I,K,JV) 277 sy(I,K,L,JV)=ALF1Q(I,K)*sy(I,K,L,JV) 278 sx(I,K,L,JV)=sx(I,K,L,JV)-FX(I,K,JV) 279 sz(I,K,L,JV)=sz(I,K,L,JV)-FZ(I,K,JV) 280 C 281 ENDIF 282 C 283 310 CONTINUE 284 31 CONTINUE 285 C 286 C puts the temporary moments Fi into appropriate neighboring boxes 287 C 288 DO 32 K=1,LAT-1 289 KP=K+1 290 DO 320 I=1,LON 291 C 292 IF(VGRI(I,K,L).LT.0.) THEN 293 SM(I,K,L)=SM(I,K,L)+FM(I,K) 294 ALF(I,K)=FM(I,K)/SM(I,K,L) 295 ELSE 296 SM(I,KP,L)=SM(I,KP,L)+FM(I,K) 297 ALF(I,K)=FM(I,K)/SM(I,KP,L) 298 ENDIF 299 C 300 ALF1(I,K)=1.-ALF(I,K) 301 C 302 320 CONTINUE 303 32 CONTINUE 304 C 305 DO 33 JV=1,NTRA 306 DO 33 K=1,LAT-1 307 KP=K+1 308 DO 330 I=1,LON 309 C 310 IF(VGRI(I,K,L).LT.0.) THEN 311 C 312 TEMPTM=-ALF(I,K)*S0(I,K,L,JV)+ALF1(I,K)*F0(I,K,JV) 313 S0(I,K,L,JV)=S0(I,K,L,JV)+F0(I,K,JV) 314 sy(I,K,L,JV)=ALF(I,K)*FY(I,K,JV)+ALF1(I,K)*sy(I,K,L,JV) 315 + +3.*TEMPTM 316 sx(I,K,L,JV)=sx(I,K,L,JV)+FX(I,K,JV) 317 sz(I,K,L,JV)=sz(I,K,L,JV)+FZ(I,K,JV) 318 C 319 ELSE 320 C 321 TEMPTM=ALF(I,K)*S0(I,KP,L,JV)-ALF1(I,K)*F0(I,K,JV) 322 S0(I,KP,L,JV)=S0(I,KP,L,JV)+F0(I,K,JV) 323 sy(I,KP,L,JV)=ALF(I,K)*FY(I,K,JV)+ALF1(I,K)*sy(I,KP,L,JV) 324 + +3.*TEMPTM 325 sx(I,KP,L,JV)=sx(I,KP,L,JV)+FX(I,K,JV) 326 sz(I,KP,L,JV)=sz(I,KP,L,JV)+FZ(I,K,JV) 327 C 328 ENDIF 329 C 330 330 CONTINUE 331 33 CONTINUE 332 C 333 C traitement special pour le pole Sud (idem pole Nord) 334 C 335 K=LAT 336 C 337 SM0=0. 338 DO 40 JV=1,NTRA 339 S00(JV)=0. 340 40 CONTINUE 341 C 342 DO 41 I=1,LON 343 C 344 IF(VGRI(I,K,L).GE.0.) THEN 345 FM(I,K)=VGRI(I,K,L)*DTY 346 ALF(I,K)=FM(I,K)/SM(I,K,L) 347 SM(I,K,L)=SM(I,K,L)-FM(I,K) 348 SM0=SM0+FM(I,K) 349 ENDIF 350 C 351 ALFQ(I,K)=ALF(I,K)*ALF(I,K) 352 ALF1(I,K)=1.-ALF(I,K) 353 ALF1Q(I,K)=ALF1(I,K)*ALF1(I,K) 354 C 355 41 CONTINUE 356 C 357 DO 42 JV=1,NTRA 358 DO 420 I=1,LON 359 C 360 IF(VGRI(I,K,L).GE.0.) THEN 361 F0 (I,K,JV)=ALF(I,K)* 362 + ( S0(I,K,L,JV)+ALF1(I,K)*sy(I,K,L,JV) ) 363 S00(JV)=S00(JV)+F0(I,K,JV) 364 C 365 S0(I,K,L,JV)=S0 (I,K,L,JV)-F0 (I,K,JV) 366 sy(I,K,L,JV)=ALF1Q(I,K)*sy(I,K,L,JV) 367 sx(I,K,L,JV)=ALF1(I,K)*sx(I,K,L,JV) 368 sz(I,K,L,JV)=ALF1(I,K)*sz(I,K,L,JV) 369 ENDIF 370 C 371 420 CONTINUE 372 42 CONTINUE 373 C 374 DO 43 I=1,LON 375 IF(VGRI(I,K,L).LT.0.) THEN 376 FM(I,K)=-VGRI(I,K,L)*DTY 377 ALF(I,K)=FM(I,K)/SM0 378 ENDIF 379 43 CONTINUE 380 C 381 DO 44 JV=1,NTRA 382 DO 440 I=1,LON 383 IF(VGRI(I,K,L).LT.0.) THEN 384 F0(I,K,JV)=ALF(I,K)*S00(JV) 385 ENDIF 386 440 CONTINUE 387 44 CONTINUE 388 C 389 C puts the temporary moments Fi into appropriate neighboring boxes 390 C 391 DO 45 I=1,LON 392 C 393 IF(VGRI(I,K,L).LT.0.) THEN 394 SM(I,K,L)=SM(I,K,L)+FM(I,K) 395 ALF(I,K)=FM(I,K)/SM(I,K,L) 396 ENDIF 397 C 398 ALF1(I,K)=1.-ALF(I,K) 399 C 400 45 CONTINUE 401 C 402 DO 46 JV=1,NTRA 403 DO 460 I=1,LON 404 C 405 IF(VGRI(I,K,L).LT.0.) THEN 406 C 407 TEMPTM=-ALF(I,K)*S0(I,K,L,JV)+ALF1(I,K)*F0(I,K,JV) 408 S0(I,K,L,JV)=S0(I,K,L,JV)+F0(I,K,JV) 409 sy(I,K,L,JV)=ALF1(I,K)*sy(I,K,L,JV)+3.*TEMPTM 410 C 411 ENDIF 412 C 413 460 CONTINUE 414 46 CONTINUE 415 C 416 1 CONTINUE 417 C 418 RETURN 419 END 420 140 ! 141 ! le flux a travers le pole Nord est traite separement 142 ! 143 SM0=0. 144 DO JV=1,NTRA 145 S00(JV)=0. 146 END DO 147 ! 148 DO I=1,LON 149 ! 150 IF(VGRI(I,0,L).LE.0.) THEN 151 FM(I,0)=-VGRI(I,0,L)*DTY 152 ALF(I,0)=FM(I,0)/SM(I,1,L) 153 SM(I,1,L)=SM(I,1,L)-FM(I,0) 154 SM0=SM0+FM(I,0) 155 ENDIF 156 ! 157 ALFQ(I,0)=ALF(I,0)*ALF(I,0) 158 ALF1(I,0)=1.-ALF(I,0) 159 ALF1Q(I,0)=ALF1(I,0)*ALF1(I,0) 160 ! 161 END DO 162 ! 163 DO JV=1,NTRA 164 DO I=1,LON 165 ! 166 IF(VGRI(I,0,L).LE.0.) THEN 167 ! 168 F0(I,0,JV)=ALF(I,0)* & 169 ( S0(I,1,L,JV)-ALF1(I,0)*sy(I,1,L,JV) ) 170 ! 171 S00(JV)=S00(JV)+F0(I,0,JV) 172 S0(I,1,L,JV)=S0(I,1,L,JV)-F0(I,0,JV) 173 sy(I,1,L,JV)=ALF1Q(I,0)*sy(I,1,L,JV) 174 sx(I,1,L,JV)=ALF1 (I,0)*sx(I,1,L,JV) 175 sz(I,1,L,JV)=ALF1 (I,0)*sz(I,1,L,JV) 176 ! 177 ENDIF 178 ! 179 END DO 180 END DO 181 ! 182 DO I=1,LON 183 IF(VGRI(I,0,L).GT.0.) THEN 184 FM(I,0)=VGRI(I,0,L)*DTY 185 ALF(I,0)=FM(I,0)/SM0 186 ENDIF 187 END DO 188 ! 189 DO JV=1,NTRA 190 DO I=1,LON 191 IF(VGRI(I,0,L).GT.0.) THEN 192 F0(I,0,JV)=ALF(I,0)*S00(JV) 193 ENDIF 194 END DO 195 END DO 196 ! 197 ! puts the temporary moments Fi into appropriate neighboring boxes 198 ! 199 DO I=1,LON 200 ! 201 IF(VGRI(I,0,L).GT.0.) THEN 202 SM(I,1,L)=SM(I,1,L)+FM(I,0) 203 ALF(I,0)=FM(I,0)/SM(I,1,L) 204 ENDIF 205 ! 206 ALF1(I,0)=1.-ALF(I,0) 207 ! 208 END DO 209 ! 210 DO JV=1,NTRA 211 DO I=1,LON 212 ! 213 IF(VGRI(I,0,L).GT.0.) THEN 214 ! 215 TEMPTM=ALF(I,0)*S0(I,1,L,JV)-ALF1(I,0)*F0(I,0,JV) 216 S0(I,1,L,JV)=S0(I,1,L,JV)+F0(I,0,JV) 217 sy(I,1,L,JV)=ALF1(I,0)*sy(I,1,L,JV)+3.*TEMPTM 218 ! 219 ENDIF 220 ! 221 END DO 222 END DO 223 ! 224 ! calculate flux and moments between adjacent boxes 225 ! 1- create temporary moments/masses for partial boxes in transit 226 ! 2- reajusts moments remaining in the box 227 ! 228 ! flux from KP to K if V(K).lt.0 and from K to KP if V(K).gt.0 229 ! 230 DO K=1,LAT-1 231 KP=K+1 232 DO I=1,LON 233 ! 234 IF(VGRI(I,K,L).LT.0.) THEN 235 FM(I,K)=-VGRI(I,K,L)*DTY 236 ALF(I,K)=FM(I,K)/SM(I,KP,L) 237 SM(I,KP,L)=SM(I,KP,L)-FM(I,K) 238 ELSE 239 FM(I,K)=VGRI(I,K,L)*DTY 240 ALF(I,K)=FM(I,K)/SM(I,K,L) 241 SM(I,K,L)=SM(I,K,L)-FM(I,K) 242 ENDIF 243 ! 244 ALFQ(I,K)=ALF(I,K)*ALF(I,K) 245 ALF1(I,K)=1.-ALF(I,K) 246 ALF1Q(I,K)=ALF1(I,K)*ALF1(I,K) 247 ! 248 END DO 249 END DO 250 ! 251 DO JV=1,NTRA 252 DO K=1,LAT-1 253 KP=K+1 254 DO I=1,LON 255 ! 256 IF(VGRI(I,K,L).LT.0.) THEN 257 ! 258 F0(I,K,JV)=ALF (I,K)* & 259 ( S0(I,KP,L,JV)-ALF1(I,K)*sy(I,KP,L,JV) ) 260 FY(I,K,JV)=ALFQ(I,K)*sy(I,KP,L,JV) 261 FX(I,K,JV)=ALF (I,K)*sx(I,KP,L,JV) 262 FZ(I,K,JV)=ALF (I,K)*sz(I,KP,L,JV) 263 ! 264 S0(I,KP,L,JV)=S0(I,KP,L,JV)-F0(I,K,JV) 265 sy(I,KP,L,JV)=ALF1Q(I,K)*sy(I,KP,L,JV) 266 sx(I,KP,L,JV)=sx(I,KP,L,JV)-FX(I,K,JV) 267 sz(I,KP,L,JV)=sz(I,KP,L,JV)-FZ(I,K,JV) 268 ! 269 ELSE 270 ! 271 F0(I,K,JV)=ALF (I,K)* & 272 ( S0(I,K,L,JV)+ALF1(I,K)*sy(I,K,L,JV) ) 273 FY(I,K,JV)=ALFQ(I,K)*sy(I,K,L,JV) 274 FX(I,K,JV)=ALF(I,K)*sx(I,K,L,JV) 275 FZ(I,K,JV)=ALF(I,K)*sz(I,K,L,JV) 276 ! 277 S0(I,K,L,JV)=S0(I,K,L,JV)-F0(I,K,JV) 278 sy(I,K,L,JV)=ALF1Q(I,K)*sy(I,K,L,JV) 279 sx(I,K,L,JV)=sx(I,K,L,JV)-FX(I,K,JV) 280 sz(I,K,L,JV)=sz(I,K,L,JV)-FZ(I,K,JV) 281 ! 282 ENDIF 283 ! 284 END DO 285 END DO 286 END DO 287 ! 288 ! puts the temporary moments Fi into appropriate neighboring boxes 289 ! 290 DO K=1,LAT-1 291 KP=K+1 292 DO I=1,LON 293 ! 294 IF(VGRI(I,K,L).LT.0.) THEN 295 SM(I,K,L)=SM(I,K,L)+FM(I,K) 296 ALF(I,K)=FM(I,K)/SM(I,K,L) 297 ELSE 298 SM(I,KP,L)=SM(I,KP,L)+FM(I,K) 299 ALF(I,K)=FM(I,K)/SM(I,KP,L) 300 ENDIF 301 ! 302 ALF1(I,K)=1.-ALF(I,K) 303 ! 304 END DO 305 END DO 306 ! 307 DO JV=1,NTRA 308 DO K=1,LAT-1 309 KP=K+1 310 DO I=1,LON 311 ! 312 IF(VGRI(I,K,L).LT.0.) THEN 313 ! 314 TEMPTM=-ALF(I,K)*S0(I,K,L,JV)+ALF1(I,K)*F0(I,K,JV) 315 S0(I,K,L,JV)=S0(I,K,L,JV)+F0(I,K,JV) 316 sy(I,K,L,JV)=ALF(I,K)*FY(I,K,JV)+ALF1(I,K)*sy(I,K,L,JV) & 317 +3.*TEMPTM 318 sx(I,K,L,JV)=sx(I,K,L,JV)+FX(I,K,JV) 319 sz(I,K,L,JV)=sz(I,K,L,JV)+FZ(I,K,JV) 320 ! 321 ELSE 322 ! 323 TEMPTM=ALF(I,K)*S0(I,KP,L,JV)-ALF1(I,K)*F0(I,K,JV) 324 S0(I,KP,L,JV)=S0(I,KP,L,JV)+F0(I,K,JV) 325 sy(I,KP,L,JV)=ALF(I,K)*FY(I,K,JV)+ALF1(I,K)*sy(I,KP,L,JV) & 326 +3.*TEMPTM 327 sx(I,KP,L,JV)=sx(I,KP,L,JV)+FX(I,K,JV) 328 sz(I,KP,L,JV)=sz(I,KP,L,JV)+FZ(I,K,JV) 329 ! 330 ENDIF 331 ! 332 END DO 333 END DO 334 END DO 335 ! 336 ! traitement special pour le pole Sud (idem pole Nord) 337 ! 338 K=LAT 339 ! 340 SM0=0. 341 DO JV=1,NTRA 342 S00(JV)=0. 343 END DO 344 ! 345 DO I=1,LON 346 ! 347 IF(VGRI(I,K,L).GE.0.) THEN 348 FM(I,K)=VGRI(I,K,L)*DTY 349 ALF(I,K)=FM(I,K)/SM(I,K,L) 350 SM(I,K,L)=SM(I,K,L)-FM(I,K) 351 SM0=SM0+FM(I,K) 352 ENDIF 353 ! 354 ALFQ(I,K)=ALF(I,K)*ALF(I,K) 355 ALF1(I,K)=1.-ALF(I,K) 356 ALF1Q(I,K)=ALF1(I,K)*ALF1(I,K) 357 ! 358 END DO 359 ! 360 DO JV=1,NTRA 361 DO I=1,LON 362 ! 363 IF(VGRI(I,K,L).GE.0.) THEN 364 F0 (I,K,JV)=ALF(I,K)* & 365 ( S0(I,K,L,JV)+ALF1(I,K)*sy(I,K,L,JV) ) 366 S00(JV)=S00(JV)+F0(I,K,JV) 367 ! 368 S0(I,K,L,JV)=S0 (I,K,L,JV)-F0 (I,K,JV) 369 sy(I,K,L,JV)=ALF1Q(I,K)*sy(I,K,L,JV) 370 sx(I,K,L,JV)=ALF1(I,K)*sx(I,K,L,JV) 371 sz(I,K,L,JV)=ALF1(I,K)*sz(I,K,L,JV) 372 ENDIF 373 ! 374 END DO 375 END DO 376 ! 377 DO I=1,LON 378 IF(VGRI(I,K,L).LT.0.) THEN 379 FM(I,K)=-VGRI(I,K,L)*DTY 380 ALF(I,K)=FM(I,K)/SM0 381 ENDIF 382 END DO 383 ! 384 DO JV=1,NTRA 385 DO I=1,LON 386 IF(VGRI(I,K,L).LT.0.) THEN 387 F0(I,K,JV)=ALF(I,K)*S00(JV) 388 ENDIF 389 END DO 390 END DO 391 ! 392 ! puts the temporary moments Fi into appropriate neighboring boxes 393 ! 394 DO I=1,LON 395 ! 396 IF(VGRI(I,K,L).LT.0.) THEN 397 SM(I,K,L)=SM(I,K,L)+FM(I,K) 398 ALF(I,K)=FM(I,K)/SM(I,K,L) 399 ENDIF 400 ! 401 ALF1(I,K)=1.-ALF(I,K) 402 ! 403 END DO 404 ! 405 DO JV=1,NTRA 406 DO I=1,LON 407 ! 408 IF(VGRI(I,K,L).LT.0.) THEN 409 ! 410 TEMPTM=-ALF(I,K)*S0(I,K,L,JV)+ALF1(I,K)*F0(I,K,JV) 411 S0(I,K,L,JV)=S0(I,K,L,JV)+F0(I,K,JV) 412 sy(I,K,L,JV)=ALF1(I,K)*sy(I,K,L,JV)+3.*TEMPTM 413 ! 414 ENDIF 415 ! 416 END DO 417 END DO 418 ! 419 END DO 420 ! 421 RETURN 422 END SUBROUTINE advy 423
Note: See TracChangeset
for help on using the changeset viewer.