Changeset 5105 for LMDZ6/branches/Amaury_dev/libf/dyn3d_common/advxp.f90
- Timestamp:
- Jul 23, 2024, 7:14:34 PM (8 weeks ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/advxp.f90
r5104 r5105 2 2 ! $Header$ 3 3 4 SUBROUTINE ADVXP(LIMIT,DTX,PBARU,SM,S0,SSX,SY,SZ5 .,SSXX,SSXY,SSXZ,SYY,SYZ,SZZ,ntra)6 7 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8 CC9 Csecond-order moments (SOM) advection of tracer in X direction C10 CC11 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC12 C 13 Cparametres principaux du modele14 C 15 16 17 18 INTEGERntra19 cPARAMETER (ntra = 1)20 C 21 Cdefinition de la grille du modele22 C 23 REALdtx24 REALpbaru ( iip1,jjp1,llm )25 C 26 Cmoments: SM total mass in each grid box27 CS0 mass of tracer in each grid box28 CSi 1rst order moment in i direction29 CSij 2nd order moment in i and j directions30 C 31 REAL SM(iip1,jjp1,llm)32 +,S0(iip1,jjp1,llm,ntra)33 REAL SSX(iip1,jjp1,llm,ntra)34 + ,SY(iip1,jjp1,llm,ntra)35 +,SZ(iip1,jjp1,llm,ntra)36 REAL SSXX(iip1,jjp1,llm,ntra)37 + ,SSXY(iip1,jjp1,llm,ntra)38 + ,SSXZ(iip1,jjp1,llm,ntra)39 + ,SYY(iip1,jjp1,llm,ntra)40 + ,SYZ(iip1,jjp1,llm,ntra)41 +,SZZ(iip1,jjp1,llm,ntra)42 43 CLocal :44 C-------45 46 Cmass fluxes across the boundaries (UGRI,VGRI,WGRI)47 Cmass fluxes in kg48 Cdeclaration :49 50 REALUGRI(iip1,jjp1,llm)51 52 CRem : VGRI et WGRI ne sont pas utilises dans53 Ccette SUBROUTINE ( advection en x uniquement )54 C 55 C 56 CTij are the moments for the current latitude and level57 C 58 REALTM (iim)59 REALT0 (iim,NTRA),TX (iim,NTRA)60 REALTY (iim,NTRA),TZ (iim,NTRA)61 REALTXX(iim,NTRA),TXY(iim,NTRA)62 REALTXZ(iim,NTRA),TYY(iim,NTRA)63 REALTYZ(iim,NTRA),TZZ(iim,NTRA)64 C 65 Cthe moments F are similarly defined and used as temporary66 Cstorage for portions of the grid boxes in transit67 C 68 REALFM (iim)69 REALF0 (iim,NTRA),FX (iim,NTRA)70 REALFY (iim,NTRA),FZ (iim,NTRA)71 REALFXX(iim,NTRA),FXY(iim,NTRA)72 REALFXZ(iim,NTRA),FYY(iim,NTRA)73 REALFYZ(iim,NTRA),FZZ(iim,NTRA)74 C 75 Cwork arrays76 C 77 REALALF (iim),ALF1(iim),ALFQ(iim),ALF1Q(iim)78 REALALF2(iim),ALF3(iim),ALF4(iim)79 C 80 REALSMNEW(iim),UEXT(iim)81 REALsqi,sqf82 REALTEMPTM83 REALSLPMAX84 REALS1MAX,S1NEW,S2NEW85 86 LOGICALLIMIT87 INTEGERNUM(jjp1),LONK,NUMK88 INTEGERlon,lati,latf,niv89 INTEGERi,i2,i3,j,jv,l,k,iter90 91 92 93 94 95 96 C*** Test de passage d'arguments ******97 98 cDO 399 l = 1, llm99 cDO 399 j = 1, jjp1100 cDO 399 i = 1, iip1101 cIF (S0(i,j,l,ntra) .lt. 0. ) THEN102 cPRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra)103 cPRINT*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra)104 cPRINT*, 'SY(',i,j,l,')=',SY(i,j,l,ntra)105 cPRINT*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra)106 cPRINT*, 'AIE !! debut ADVXP - pbl arg. passage dans ADVXP'107 cc STOP108 cENDIF109 c399 CONTINUE110 111 C*** Test : diagnostique de la qtite totale de traceur112 Cdans l'atmosphere avant l'advection113 c 114 115 116 c 117 118 119 120 121 122 123 124 125 126 ctest127 c-------------------------------------128 129 NUM(j) =1130 131 cDO l=1,llm132 cNUM(2,l)=6133 cNUM(3,l)=6134 c NUM(jjm-1,l)=6 135 cNUM(jjm,l)=6136 cENDDO137 cDO j=2,6138 cNUM(j)=12139 cENDDO140 c DO j=jjm-5,jjm-1 141 cNUM(j)=12142 cENDDO143 144 CInterface : adaptation nouveau modele145 C-------------------------------------146 C 147 C---------------------------------------------------------148 CConversion des flux de masses en kg/s149 Cpbaru est en N/s d'ou :150 Cugri est en kg/s151 152 153 154 155 ugri (i,j,llm+1-l) =pbaru (i,j,l)156 157 158 159 160 C---------------------------------------------------------161 Cstart here162 C 163 Cboucle principale sur les niveaux et les latitudes164 C 165 166 167 168 C 169 Cinitialisation170 C 171 Cprogram assumes periodic boundaries in X172 C 173 174 175 176 177 C 178 Cmodifications for extended polar zones179 C 180 181 182 C 183 184 C 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 C 203 204 C 205 206 207 208 209 210 211 212 213 214 215 C 216 217 218 219 220 221 TXX(I,JV)=ALFQ(I)*SSXX(I3,K,L,JV)+ALF1Q(I)*TXX(I,JV)222 ++5.*( ALF3(I)*(SSX(I3,K,L,JV)-TX(I,JV))+ALF2(I)*TEMPTM )223 224 TXY(I,JV)=ALF (I)*SSXY(I3,K,L,JV)+ALF1(I)*TXY(I,JV)225 ++3.*(ALF1(I)*SY (I3,K,L,JV)-ALF (I)*TY (I,JV))226 TXZ(I,JV)=ALF (I)*SSXZ(I3,K,L,JV)+ALF1(I)*TXZ(I,JV)227 ++3.*(ALF1(I)*SZ (I3,K,L,JV)-ALF (I)*TZ (I,JV))228 229 230 231 232 233 234 235 C 236 237 C 238 239 C 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 C 258 259 C 260 261 262 263 C 264 Cplace limits on appropriate moments before transport265 C(if flux-limiting is to be applied)266 C 267 268 C 269 270 271 272 273 274 275 S2NEW=AMIN1( 2.*SLPMAX-ABS(S1NEW)/3. ,276 +AMAX1(ABS(S1NEW)-SLPMAX,TXX(I,JV)) )277 278 279 280 281 282 283 284 285 286 287 288 289 C 4 SUBROUTINE ADVXP(LIMIT,DTX,PBARU,SM,S0,SSX,SY,SZ & 5 ,SSXX,SSXY,SSXZ,SYY,SYZ,SZZ,ntra) 6 IMPLICIT NONE 7 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 8 ! C 9 ! second-order moments (SOM) advection of tracer in X direction C 10 ! C 11 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 12 ! 13 ! parametres principaux du modele 14 ! 15 include "dimensions.h" 16 include "paramet.h" 17 18 INTEGER :: ntra 19 ! PARAMETER (ntra = 1) 20 ! 21 ! definition de la grille du modele 22 ! 23 REAL :: dtx 24 REAL :: pbaru ( iip1,jjp1,llm ) 25 ! 26 ! moments: SM total mass in each grid box 27 ! S0 mass of tracer in each grid box 28 ! Si 1rst order moment in i direction 29 ! Sij 2nd order moment in i and j directions 30 ! 31 REAL :: SM(iip1,jjp1,llm) & 32 ,S0(iip1,jjp1,llm,ntra) 33 REAL :: SSX(iip1,jjp1,llm,ntra) & 34 ,SY(iip1,jjp1,llm,ntra) & 35 ,SZ(iip1,jjp1,llm,ntra) 36 REAL :: SSXX(iip1,jjp1,llm,ntra) & 37 ,SSXY(iip1,jjp1,llm,ntra) & 38 ,SSXZ(iip1,jjp1,llm,ntra) & 39 ,SYY(iip1,jjp1,llm,ntra) & 40 ,SYZ(iip1,jjp1,llm,ntra) & 41 ,SZZ(iip1,jjp1,llm,ntra) 42 43 ! Local : 44 ! ------- 45 46 ! mass fluxes across the boundaries (UGRI,VGRI,WGRI) 47 ! mass fluxes in kg 48 ! declaration : 49 50 REAL :: UGRI(iip1,jjp1,llm) 51 52 ! Rem : VGRI et WGRI ne sont pas utilises dans 53 ! cette SUBROUTINE ( advection en x uniquement ) 54 ! 55 ! 56 ! Tij are the moments for the current latitude and level 57 ! 58 REAL :: TM (iim) 59 REAL :: T0 (iim,NTRA),TX (iim,NTRA) 60 REAL :: TY (iim,NTRA),TZ (iim,NTRA) 61 REAL :: TXX(iim,NTRA),TXY(iim,NTRA) 62 REAL :: TXZ(iim,NTRA),TYY(iim,NTRA) 63 REAL :: TYZ(iim,NTRA),TZZ(iim,NTRA) 64 ! 65 ! the moments F are similarly defined and used as temporary 66 ! storage for portions of the grid boxes in transit 67 ! 68 REAL :: FM (iim) 69 REAL :: F0 (iim,NTRA),FX (iim,NTRA) 70 REAL :: FY (iim,NTRA),FZ (iim,NTRA) 71 REAL :: FXX(iim,NTRA),FXY(iim,NTRA) 72 REAL :: FXZ(iim,NTRA),FYY(iim,NTRA) 73 REAL :: FYZ(iim,NTRA),FZZ(iim,NTRA) 74 ! 75 ! work arrays 76 ! 77 REAL :: ALF (iim),ALF1(iim),ALFQ(iim),ALF1Q(iim) 78 REAL :: ALF2(iim),ALF3(iim),ALF4(iim) 79 ! 80 REAL :: SMNEW(iim),UEXT(iim) 81 REAL :: sqi,sqf 82 REAL :: TEMPTM 83 REAL :: SLPMAX 84 REAL :: S1MAX,S1NEW,S2NEW 85 86 LOGICAL :: LIMIT 87 INTEGER :: NUM(jjp1),LONK,NUMK 88 INTEGER :: lon,lati,latf,niv 89 INTEGER :: i,i2,i3,j,jv,l,k,iter 90 91 lon = iim 92 lati=2 93 latf = jjm 94 niv = llm 95 96 ! *** Test de passage d'arguments ****** 97 98 ! DO 399 l = 1, llm 99 ! DO 399 j = 1, jjp1 100 ! DO 399 i = 1, iip1 101 ! IF (S0(i,j,l,ntra) .lt. 0. ) THEN 102 ! PRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra) 103 ! PRINT*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra) 104 ! PRINT*, 'SY(',i,j,l,')=',SY(i,j,l,ntra) 105 ! PRINT*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra) 106 ! PRINT*, 'AIE !! debut ADVXP - pbl arg. passage dans ADVXP' 107 !c STOP 108 ! ENDIF 109 ! 399 CONTINUE 110 111 ! *** Test : diagnostique de la qtite totale de traceur 112 ! dans l'atmosphere avant l'advection 113 ! 114 sqi =0. 115 sqf =0. 116 ! 117 DO l = 1, llm 118 DO j = 1, jjp1 119 DO i = 1, iim 120 sqi = sqi + S0(i,j,l,ntra) 121 END DO 122 END DO 123 END DO 124 PRINT*,'------ DIAG DANS ADVX2 - ENTREE -----' 125 PRINT*,'sqi=',sqi 126 ! test 127 ! ------------------------------------- 128 DO j =1,jjp1 129 NUM(j) =1 130 END DO 131 ! DO l=1,llm 132 ! NUM(2,l)=6 133 ! NUM(3,l)=6 134 ! NUM(jjm-1,l)=6 135 ! NUM(jjm,l)=6 136 ! ENDDO 137 ! DO j=2,6 138 ! NUM(j)=12 139 ! ENDDO 140 ! DO j=jjm-5,jjm-1 141 ! NUM(j)=12 142 ! ENDDO 143 144 ! Interface : adaptation nouveau modele 145 ! ------------------------------------- 146 ! 147 ! --------------------------------------------------------- 148 ! Conversion des flux de masses en kg/s 149 ! pbaru est en N/s d'ou : 150 ! ugri est en kg/s 151 152 DO l = 1,llm 153 DO j = 1,jjp1 154 DO i = 1,iip1 155 ugri (i,j,llm+1-l) =pbaru (i,j,l) 156 END DO 157 END DO 158 END DO 159 160 ! --------------------------------------------------------- 161 ! start here 162 ! 163 ! boucle principale sur les niveaux et les latitudes 164 ! 165 DO L=1,NIV 166 DO K=lati,latf 167 168 ! 169 ! initialisation 170 ! 171 ! program assumes periodic boundaries in X 172 ! 173 DO I=2,LON 174 SMNEW(I)=SM(I,K,L)+(UGRI(I-1,K,L)-UGRI(I,K,L))*DTX 175 END DO 176 SMNEW(1)=SM(1,K,L)+(UGRI(LON,K,L)-UGRI(1,K,L))*DTX 177 ! 178 ! modifications for extended polar zones 179 ! 180 NUMK=NUM(K) 181 LONK=LON/NUMK 182 ! 183 IF(NUMK>1) THEN 184 ! 185 DO I=1,LON 186 TM(I)=0. 187 END DO 188 DO JV=1,NTRA 189 DO I=1,LON 190 T0 (I,JV)=0. 191 TX (I,JV)=0. 192 TY (I,JV)=0. 193 TZ (I,JV)=0. 194 TXX(I,JV)=0. 195 TXY(I,JV)=0. 196 TXZ(I,JV)=0. 197 TYY(I,JV)=0. 198 TYZ(I,JV)=0. 199 TZZ(I,JV)=0. 200 END DO 201 END DO 202 ! 203 DO I2=1,NUMK 204 ! 205 DO I=1,LONK 206 I3=(I-1)*NUMK+I2 207 TM(I)=TM(I)+SM(I3,K,L) 208 ALF(I)=SM(I3,K,L)/TM(I) 209 ALF1(I)=1.-ALF(I) 210 ALFQ(I)=ALF(I)*ALF(I) 211 ALF1Q(I)=ALF1(I)*ALF1(I) 212 ALF2(I)=ALF1(I)-ALF(I) 213 ALF3(I)=ALF(I)*ALF1(I) 214 END DO 215 ! 216 DO JV=1,NTRA 217 DO I=1,LONK 218 I3=(I-1)*NUMK+I2 219 TEMPTM=-ALF(I)*T0(I,JV)+ALF1(I)*S0(I3,K,L,JV) 220 T0 (I,JV)=T0(I,JV)+S0(I3,K,L,JV) 221 TXX(I,JV)=ALFQ(I)*SSXX(I3,K,L,JV)+ALF1Q(I)*TXX(I,JV) & 222 +5.*( ALF3(I)*(SSX(I3,K,L,JV)-TX(I,JV))+ALF2(I)*TEMPTM ) 223 TX (I,JV)=ALF(I)*SSX(I3,K,L,JV)+ALF1(I)*TX(I,JV)+3.*TEMPTM 224 TXY(I,JV)=ALF (I)*SSXY(I3,K,L,JV)+ALF1(I)*TXY(I,JV) & 225 +3.*(ALF1(I)*SY (I3,K,L,JV)-ALF (I)*TY (I,JV)) 226 TXZ(I,JV)=ALF (I)*SSXZ(I3,K,L,JV)+ALF1(I)*TXZ(I,JV) & 227 +3.*(ALF1(I)*SZ (I3,K,L,JV)-ALF (I)*TZ (I,JV)) 228 TY (I,JV)=TY (I,JV)+SY (I3,K,L,JV) 229 TZ (I,JV)=TZ (I,JV)+SZ (I3,K,L,JV) 230 TYY(I,JV)=TYY(I,JV)+SYY(I3,K,L,JV) 231 TYZ(I,JV)=TYZ(I,JV)+SYZ(I3,K,L,JV) 232 TZZ(I,JV)=TZZ(I,JV)+SZZ(I3,K,L,JV) 233 END DO 234 END DO 235 ! 236 END DO 237 ! 238 ELSE 239 ! 240 DO I=1,LON 241 TM(I)=SM(I,K,L) 242 END DO 243 DO JV=1,NTRA 244 DO I=1,LON 245 T0 (I,JV)=S0 (I,K,L,JV) 246 TX (I,JV)=SSX (I,K,L,JV) 247 TY (I,JV)=SY (I,K,L,JV) 248 TZ (I,JV)=SZ (I,K,L,JV) 249 TXX(I,JV)=SSXX(I,K,L,JV) 250 TXY(I,JV)=SSXY(I,K,L,JV) 251 TXZ(I,JV)=SSXZ(I,K,L,JV) 252 TYY(I,JV)=SYY(I,K,L,JV) 253 TYZ(I,JV)=SYZ(I,K,L,JV) 254 TZZ(I,JV)=SZZ(I,K,L,JV) 255 END DO 256 END DO 257 ! 258 ENDIF 259 ! 260 DO I=1,LONK 261 UEXT(I)=UGRI(I*NUMK,K,L) 262 END DO 263 ! 264 ! place limits on appropriate moments before transport 265 ! (if flux-limiting is to be applied) 266 ! 267 IF(.NOT.LIMIT) GO TO 13 268 ! 269 DO JV=1,NTRA 270 DO I=1,LONK 271 IF(T0(I,JV)>0.) THEN 272 SLPMAX=T0(I,JV) 273 S1MAX=1.5*SLPMAX 274 S1NEW=AMIN1(S1MAX,AMAX1(-S1MAX,TX(I,JV))) 275 S2NEW=AMIN1( 2.*SLPMAX-ABS(S1NEW)/3. , & 276 AMAX1(ABS(S1NEW)-SLPMAX,TXX(I,JV)) ) 277 TX (I,JV)=S1NEW 278 TXX(I,JV)=S2NEW 279 TXY(I,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,TXY(I,JV))) 280 TXZ(I,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,TXZ(I,JV))) 281 ELSE 282 TX (I,JV)=0. 283 TXX(I,JV)=0. 284 TXY(I,JV)=0. 285 TXZ(I,JV)=0. 286 ENDIF 287 END DO 288 END DO 289 ! 290 290 13 CONTINUE 291 C 292 Ccalculate flux and moments between adjacent boxes293 C1- create temporary moments/masses for partial boxes in transit294 C2- reajusts moments remaining in the box295 C 296 Cflux from IP to I if U(I).lt.0297 C 298 299 300 301 302 303 304 305 C 306 307 308 309 310 311 312 C 313 Cflux from I to IP if U(I).gt.0314 C 315 316 317 318 319 320 321 322 C 323 324 325 326 327 328 329 330 331 C 332 333 334 C 335 336 C 337 F0 (I,JV)=ALF (I)* ( T0(I+1,JV)-ALF1(I)*338 +( TX(I+1,JV)-ALF2(I)*TXX(I+1,JV) ) )339 340 341 342 343 344 345 346 347 348 C 349 350 351 352 353 354 355 356 357 358 359 C 360 361 C 362 363 364 C 365 366 367 C 368 369 C 370 F0 (I,JV)=ALF (I)* ( T0(1,JV)-ALF1(I)*371 +( TX(1,JV)-ALF2(I)*TXX(1,JV) ) )372 373 374 375 376 377 378 379 380 381 C 382 383 384 385 386 387 388 389 390 391 392 C 393 394 C 395 396 C 397 398 399 C 400 401 C 402 F0 (I,JV)=ALF (I)* ( T0(I,JV)+ALF1(I)*403 +( TX(I,JV)+ALF2(I)*TXX(I,JV) ) )404 405 406 407 408 409 410 411 412 413 C 414 415 416 417 418 419 420 421 422 423 424 C 425 426 C 427 428 429 C 430 Cputs the temporary moments Fi into appropriate neighboring boxes431 C 432 433 434 435 436 437 438 C 439 440 441 442 443 444 445 C 446 447 448 449 450 451 C 452 453 454 455 456 457 458 459 C 460 461 462 C 463 464 C 465 466 467 TXX(I,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I,JV)468 ++5.*( ALF3(I)*(FX(I,JV)-TX(I,JV))+ALF2(I)*TEMPTM )469 470 TXY(I,JV)=ALF (I)*FXY(I,JV)+ALF1(I)*TXY(I,JV)471 ++3.*(ALF1(I)*FY (I,JV)-ALF (I)*TY (I,JV))472 TXZ(I,JV)=ALF (I)*FXZ(I,JV)+ALF1(I)*TXZ(I,JV)473 ++3.*(ALF1(I)*FZ (I,JV)-ALF (I)*TZ (I,JV))474 475 476 477 478 479 C 480 481 C 482 483 484 C 485 486 487 C 488 489 C 490 491 492 TXX(I+1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I+1,JV)493 ++5.*( ALF3(I)*(TX(I+1,JV)-FX(I,JV))-ALF2(I)*TEMPTM )494 495 TXY(I+1,JV)=ALF(I)*FXY(I ,JV)+ALF1(I)*TXY(I+1,JV)496 ++3.*(ALF(I)*TY (I+1,JV)-ALF1(I)*FY (I ,JV))497 TXZ(I+1,JV)=ALF(I)*FXZ(I ,JV)+ALF1(I)*TXZ(I+1,JV)498 ++3.*(ALF(I)*TZ (I+1,JV)-ALF1(I)*FZ (I ,JV))499 500 501 502 503 504 C 505 506 C 507 508 509 C 510 511 512 513 514 515 TXX(1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(1,JV)516 ++5.*( ALF3(I)*(TX(1,JV)-FX(I,JV))-ALF2(I)*TEMPTM )517 518 TXY(1,JV)=ALF(I)*FXY(I,JV)+ALF1(I)*TXY(1,JV)519 ++3.*(ALF(I)*TY (1,JV)-ALF1(I)*FY (I,JV))520 TXZ(1,JV)=ALF(I)*FXZ(I,JV)+ALF1(I)*TXZ(1,JV)521 ++3.*(ALF(I)*TZ (1,JV)-ALF1(I)*FZ (I,JV))522 523 524 525 526 527 528 529 C 530 Cretour aux mailles d'origine (passage des Tij aux Sij)531 C 532 533 C 534 535 C 536 537 C 538 539 540 541 542 C 543 544 545 546 547 548 549 C 550 551 C 552 553 554 C 555 556 S0 (I3,K,L,JV)=ALF (I)* ( T0(I,JV)-ALF1(I)*557 +( TX(I,JV)-ALF2(I)*TXX(I,JV) ) )558 559 560 561 562 563 564 565 566 567 C 568 Creajusts moments remaining in the box569 C 570 571 572 573 574 575 576 577 578 579 580 C 581 582 583 C 584 585 C 586 587 C 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 C 606 607 C 608 609 610 C 611 C----------- AA Test en fin de ADVX ------ Controle des S*612 613 cDO 9999 l = 1, llm614 cDO 9999 j = 1, jjp1615 cDO 9999 i = 1, iip1616 cIF (S0(i,j,l,ntra).lt.0..and.LIMIT) THEN617 cPRINT*, '-------------------'618 cPRINT*, 'En fin de ADVXP'619 cPRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra)620 cPRINT*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra)621 cPRINT*, 'SY(',i,j,l,')=',SY(i,j,l,ntra)622 cPRINT*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra)623 cWRITE (*,*) 'On arrete !! - pbl en fin de ADVXP'624 cSTOP625 cENDIF626 c9999 CONTINUE627 c---------- bouclage cyclique628 629 630 631 632 633 634 635 636 637 638 639 C----------- qqtite totale de traceur dans tte l'atmosphere640 641 642 643 644 645 646 647 648 649 650 c-------------------------------------------------------------651 652 END 291 ! 292 ! calculate flux and moments between adjacent boxes 293 ! 1- create temporary moments/masses for partial boxes in transit 294 ! 2- reajusts moments remaining in the box 295 ! 296 ! flux from IP to I if U(I).lt.0 297 ! 298 DO I=1,LONK-1 299 IF(UEXT(I)<0.) THEN 300 FM(I)=-UEXT(I)*DTX 301 ALF(I)=FM(I)/TM(I+1) 302 TM(I+1)=TM(I+1)-FM(I) 303 ENDIF 304 END DO 305 ! 306 I=LONK 307 IF(UEXT(I)<0.) THEN 308 FM(I)=-UEXT(I)*DTX 309 ALF(I)=FM(I)/TM(1) 310 TM(1)=TM(1)-FM(I) 311 ENDIF 312 ! 313 ! flux from I to IP if U(I).gt.0 314 ! 315 DO I=1,LONK 316 IF(UEXT(I)>=0.) THEN 317 FM(I)=UEXT(I)*DTX 318 ALF(I)=FM(I)/TM(I) 319 TM(I)=TM(I)-FM(I) 320 ENDIF 321 END DO 322 ! 323 DO I=1,LONK 324 ALFQ(I)=ALF(I)*ALF(I) 325 ALF1(I)=1.-ALF(I) 326 ALF1Q(I)=ALF1(I)*ALF1(I) 327 ALF2(I)=ALF1(I)-ALF(I) 328 ALF3(I)=ALF(I)*ALFQ(I) 329 ALF4(I)=ALF1(I)*ALF1Q(I) 330 END DO 331 ! 332 DO JV=1,NTRA 333 DO I=1,LONK-1 334 ! 335 IF(UEXT(I)<0.) THEN 336 ! 337 F0 (I,JV)=ALF (I)* ( T0(I+1,JV)-ALF1(I)* & 338 ( TX(I+1,JV)-ALF2(I)*TXX(I+1,JV) ) ) 339 FX (I,JV)=ALFQ(I)*(TX(I+1,JV)-3.*ALF1(I)*TXX(I+1,JV)) 340 FXX(I,JV)=ALF3(I)*TXX(I+1,JV) 341 FY (I,JV)=ALF (I)*(TY(I+1,JV)-ALF1(I)*TXY(I+1,JV)) 342 FZ (I,JV)=ALF (I)*(TZ(I+1,JV)-ALF1(I)*TXZ(I+1,JV)) 343 FXY(I,JV)=ALFQ(I)*TXY(I+1,JV) 344 FXZ(I,JV)=ALFQ(I)*TXZ(I+1,JV) 345 FYY(I,JV)=ALF (I)*TYY(I+1,JV) 346 FYZ(I,JV)=ALF (I)*TYZ(I+1,JV) 347 FZZ(I,JV)=ALF (I)*TZZ(I+1,JV) 348 ! 349 T0 (I+1,JV)=T0(I+1,JV)-F0(I,JV) 350 TX (I+1,JV)=ALF1Q(I)*(TX(I+1,JV)+3.*ALF(I)*TXX(I+1,JV)) 351 TXX(I+1,JV)=ALF4(I)*TXX(I+1,JV) 352 TY (I+1,JV)=TY (I+1,JV)-FY (I,JV) 353 TZ (I+1,JV)=TZ (I+1,JV)-FZ (I,JV) 354 TYY(I+1,JV)=TYY(I+1,JV)-FYY(I,JV) 355 TYZ(I+1,JV)=TYZ(I+1,JV)-FYZ(I,JV) 356 TZZ(I+1,JV)=TZZ(I+1,JV)-FZZ(I,JV) 357 TXY(I+1,JV)=ALF1Q(I)*TXY(I+1,JV) 358 TXZ(I+1,JV)=ALF1Q(I)*TXZ(I+1,JV) 359 ! 360 ENDIF 361 ! 362 END DO 363 END DO 364 ! 365 I=LONK 366 IF(UEXT(I)<0.) THEN 367 ! 368 DO JV=1,NTRA 369 ! 370 F0 (I,JV)=ALF (I)* ( T0(1,JV)-ALF1(I)* & 371 ( TX(1,JV)-ALF2(I)*TXX(1,JV) ) ) 372 FX (I,JV)=ALFQ(I)*(TX(1,JV)-3.*ALF1(I)*TXX(1,JV)) 373 FXX(I,JV)=ALF3(I)*TXX(1,JV) 374 FY (I,JV)=ALF (I)*(TY(1,JV)-ALF1(I)*TXY(1,JV)) 375 FZ (I,JV)=ALF (I)*(TZ(1,JV)-ALF1(I)*TXZ(1,JV)) 376 FXY(I,JV)=ALFQ(I)*TXY(1,JV) 377 FXZ(I,JV)=ALFQ(I)*TXZ(1,JV) 378 FYY(I,JV)=ALF (I)*TYY(1,JV) 379 FYZ(I,JV)=ALF (I)*TYZ(1,JV) 380 FZZ(I,JV)=ALF (I)*TZZ(1,JV) 381 ! 382 T0 (1,JV)=T0(1,JV)-F0(I,JV) 383 TX (1,JV)=ALF1Q(I)*(TX(1,JV)+3.*ALF(I)*TXX(1,JV)) 384 TXX(1,JV)=ALF4(I)*TXX(1,JV) 385 TY (1,JV)=TY (1,JV)-FY (I,JV) 386 TZ (1,JV)=TZ (1,JV)-FZ (I,JV) 387 TYY(1,JV)=TYY(1,JV)-FYY(I,JV) 388 TYZ(1,JV)=TYZ(1,JV)-FYZ(I,JV) 389 TZZ(1,JV)=TZZ(1,JV)-FZZ(I,JV) 390 TXY(1,JV)=ALF1Q(I)*TXY(1,JV) 391 TXZ(1,JV)=ALF1Q(I)*TXZ(1,JV) 392 ! 393 END DO 394 ! 395 ENDIF 396 ! 397 DO JV=1,NTRA 398 DO I=1,LONK 399 ! 400 IF(UEXT(I)>=0.) THEN 401 ! 402 F0 (I,JV)=ALF (I)* ( T0(I,JV)+ALF1(I)* & 403 ( TX(I,JV)+ALF2(I)*TXX(I,JV) ) ) 404 FX (I,JV)=ALFQ(I)*(TX(I,JV)+3.*ALF1(I)*TXX(I,JV)) 405 FXX(I,JV)=ALF3(I)*TXX(I,JV) 406 FY (I,JV)=ALF (I)*(TY(I,JV)+ALF1(I)*TXY(I,JV)) 407 FZ (I,JV)=ALF (I)*(TZ(I,JV)+ALF1(I)*TXZ(I,JV)) 408 FXY(I,JV)=ALFQ(I)*TXY(I,JV) 409 FXZ(I,JV)=ALFQ(I)*TXZ(I,JV) 410 FYY(I,JV)=ALF (I)*TYY(I,JV) 411 FYZ(I,JV)=ALF (I)*TYZ(I,JV) 412 FZZ(I,JV)=ALF (I)*TZZ(I,JV) 413 ! 414 T0 (I,JV)=T0(I,JV)-F0(I,JV) 415 TX (I,JV)=ALF1Q(I)*(TX(I,JV)-3.*ALF(I)*TXX(I,JV)) 416 TXX(I,JV)=ALF4(I)*TXX(I,JV) 417 TY (I,JV)=TY (I,JV)-FY (I,JV) 418 TZ (I,JV)=TZ (I,JV)-FZ (I,JV) 419 TYY(I,JV)=TYY(I,JV)-FYY(I,JV) 420 TYZ(I,JV)=TYZ(I,JV)-FYZ(I,JV) 421 TZZ(I,JV)=TZZ(I,JV)-FZZ(I,JV) 422 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 423 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 424 ! 425 ENDIF 426 ! 427 END DO 428 END DO 429 ! 430 ! puts the temporary moments Fi into appropriate neighboring boxes 431 ! 432 DO I=1,LONK 433 IF(UEXT(I)<0.) THEN 434 TM(I)=TM(I)+FM(I) 435 ALF(I)=FM(I)/TM(I) 436 ENDIF 437 END DO 438 ! 439 DO I=1,LONK-1 440 IF(UEXT(I)>=0.) THEN 441 TM(I+1)=TM(I+1)+FM(I) 442 ALF(I)=FM(I)/TM(I+1) 443 ENDIF 444 END DO 445 ! 446 I=LONK 447 IF(UEXT(I)>=0.) THEN 448 TM(1)=TM(1)+FM(I) 449 ALF(I)=FM(I)/TM(1) 450 ENDIF 451 ! 452 DO I=1,LONK 453 ALF1(I)=1.-ALF(I) 454 ALFQ(I)=ALF(I)*ALF(I) 455 ALF1Q(I)=ALF1(I)*ALF1(I) 456 ALF2(I)=ALF1(I)-ALF(I) 457 ALF3(I)=ALF(I)*ALF1(I) 458 END DO 459 ! 460 DO JV=1,NTRA 461 DO I=1,LONK 462 ! 463 IF(UEXT(I)<0.) THEN 464 ! 465 TEMPTM=-ALF(I)*T0(I,JV)+ALF1(I)*F0(I,JV) 466 T0 (I,JV)=T0(I,JV)+F0(I,JV) 467 TXX(I,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I,JV) & 468 +5.*( ALF3(I)*(FX(I,JV)-TX(I,JV))+ALF2(I)*TEMPTM ) 469 TX (I,JV)=ALF (I)*FX (I,JV)+ALF1(I)*TX (I,JV)+3.*TEMPTM 470 TXY(I,JV)=ALF (I)*FXY(I,JV)+ALF1(I)*TXY(I,JV) & 471 +3.*(ALF1(I)*FY (I,JV)-ALF (I)*TY (I,JV)) 472 TXZ(I,JV)=ALF (I)*FXZ(I,JV)+ALF1(I)*TXZ(I,JV) & 473 +3.*(ALF1(I)*FZ (I,JV)-ALF (I)*TZ (I,JV)) 474 TY (I,JV)=TY (I,JV)+FY (I,JV) 475 TZ (I,JV)=TZ (I,JV)+FZ (I,JV) 476 TYY(I,JV)=TYY(I,JV)+FYY(I,JV) 477 TYZ(I,JV)=TYZ(I,JV)+FYZ(I,JV) 478 TZZ(I,JV)=TZZ(I,JV)+FZZ(I,JV) 479 ! 480 ENDIF 481 ! 482 END DO 483 END DO 484 ! 485 DO JV=1,NTRA 486 DO I=1,LONK-1 487 ! 488 IF(UEXT(I)>=0.) THEN 489 ! 490 TEMPTM=ALF(I)*T0(I+1,JV)-ALF1(I)*F0(I,JV) 491 T0 (I+1,JV)=T0(I+1,JV)+F0(I,JV) 492 TXX(I+1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I+1,JV) & 493 +5.*( ALF3(I)*(TX(I+1,JV)-FX(I,JV))-ALF2(I)*TEMPTM ) 494 TX (I+1,JV)=ALF(I)*FX (I ,JV)+ALF1(I)*TX (I+1,JV)+3.*TEMPTM 495 TXY(I+1,JV)=ALF(I)*FXY(I ,JV)+ALF1(I)*TXY(I+1,JV) & 496 +3.*(ALF(I)*TY (I+1,JV)-ALF1(I)*FY (I ,JV)) 497 TXZ(I+1,JV)=ALF(I)*FXZ(I ,JV)+ALF1(I)*TXZ(I+1,JV) & 498 +3.*(ALF(I)*TZ (I+1,JV)-ALF1(I)*FZ (I ,JV)) 499 TY (I+1,JV)=TY (I+1,JV)+FY (I,JV) 500 TZ (I+1,JV)=TZ (I+1,JV)+FZ (I,JV) 501 TYY(I+1,JV)=TYY(I+1,JV)+FYY(I,JV) 502 TYZ(I+1,JV)=TYZ(I+1,JV)+FYZ(I,JV) 503 TZZ(I+1,JV)=TZZ(I+1,JV)+FZZ(I,JV) 504 ! 505 ENDIF 506 ! 507 END DO 508 END DO 509 ! 510 I=LONK 511 IF(UEXT(I)>=0.) THEN 512 DO JV=1,NTRA 513 TEMPTM=ALF(I)*T0(1,JV)-ALF1(I)*F0(I,JV) 514 T0 (1,JV)=T0(1,JV)+F0(I,JV) 515 TXX(1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(1,JV) & 516 +5.*( ALF3(I)*(TX(1,JV)-FX(I,JV))-ALF2(I)*TEMPTM ) 517 TX (1,JV)=ALF(I)*FX(I,JV)+ALF1(I)*TX(1,JV)+3.*TEMPTM 518 TXY(1,JV)=ALF(I)*FXY(I,JV)+ALF1(I)*TXY(1,JV) & 519 +3.*(ALF(I)*TY (1,JV)-ALF1(I)*FY (I,JV)) 520 TXZ(1,JV)=ALF(I)*FXZ(I,JV)+ALF1(I)*TXZ(1,JV) & 521 +3.*(ALF(I)*TZ (1,JV)-ALF1(I)*FZ (I,JV)) 522 TY (1,JV)=TY (1,JV)+FY (I,JV) 523 TZ (1,JV)=TZ (1,JV)+FZ (I,JV) 524 TYY(1,JV)=TYY(1,JV)+FYY(I,JV) 525 TYZ(1,JV)=TYZ(1,JV)+FYZ(I,JV) 526 TZZ(1,JV)=TZZ(1,JV)+FZZ(I,JV) 527 END DO 528 ENDIF 529 ! 530 ! retour aux mailles d'origine (passage des Tij aux Sij) 531 ! 532 IF(NUMK>1) THEN 533 ! 534 DO I2=1,NUMK 535 ! 536 DO I=1,LONK 537 ! 538 I3=I2+(I-1)*NUMK 539 SM(I3,K,L)=SMNEW(I3) 540 ALF(I)=SMNEW(I3)/TM(I) 541 TM(I)=TM(I)-SMNEW(I3) 542 ! 543 ALFQ(I)=ALF(I)*ALF(I) 544 ALF1(I)=1.-ALF(I) 545 ALF1Q(I)=ALF1(I)*ALF1(I) 546 ALF2(I)=ALF1(I)-ALF(I) 547 ALF3(I)=ALF(I)*ALFQ(I) 548 ALF4(I)=ALF1(I)*ALF1Q(I) 549 ! 550 END DO 551 ! 552 DO JV=1,NTRA 553 DO I=1,LONK 554 ! 555 I3=I2+(I-1)*NUMK 556 S0 (I3,K,L,JV)=ALF (I)* ( T0(I,JV)-ALF1(I)* & 557 ( TX(I,JV)-ALF2(I)*TXX(I,JV) ) ) 558 SSX (I3,K,L,JV)=ALFQ(I)*(TX(I,JV)-3.*ALF1(I)*TXX(I,JV)) 559 SSXX(I3,K,L,JV)=ALF3(I)*TXX(I,JV) 560 SY (I3,K,L,JV)=ALF (I)*(TY(I,JV)-ALF1(I)*TXY(I,JV)) 561 SZ (I3,K,L,JV)=ALF (I)*(TZ(I,JV)-ALF1(I)*TXZ(I,JV)) 562 SSXY(I3,K,L,JV)=ALFQ(I)*TXY(I,JV) 563 SSXZ(I3,K,L,JV)=ALFQ(I)*TXZ(I,JV) 564 SYY(I3,K,L,JV)=ALF (I)*TYY(I,JV) 565 SYZ(I3,K,L,JV)=ALF (I)*TYZ(I,JV) 566 SZZ(I3,K,L,JV)=ALF (I)*TZZ(I,JV) 567 ! 568 ! reajusts moments remaining in the box 569 ! 570 T0 (I,JV)=T0(I,JV)-S0(I3,K,L,JV) 571 TX (I,JV)=ALF1Q(I)*(TX(I,JV)+3.*ALF(I)*TXX(I,JV)) 572 TXX(I,JV)=ALF4 (I)*TXX(I,JV) 573 TY (I,JV)=TY (I,JV)-SY (I3,K,L,JV) 574 TZ (I,JV)=TZ (I,JV)-SZ (I3,K,L,JV) 575 TYY(I,JV)=TYY(I,JV)-SYY(I3,K,L,JV) 576 TYZ(I,JV)=TYZ(I,JV)-SYZ(I3,K,L,JV) 577 TZZ(I,JV)=TZZ(I,JV)-SZZ(I3,K,L,JV) 578 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 579 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 580 ! 581 END DO 582 END DO 583 ! 584 END DO 585 ! 586 ELSE 587 ! 588 DO I=1,LON 589 SM(I,K,L)=TM(I) 590 END DO 591 DO JV=1,NTRA 592 DO I=1,LON 593 S0 (I,K,L,JV)=T0 (I,JV) 594 SSX (I,K,L,JV)=TX (I,JV) 595 SY (I,K,L,JV)=TY (I,JV) 596 SZ (I,K,L,JV)=TZ (I,JV) 597 SSXX(I,K,L,JV)=TXX(I,JV) 598 SSXY(I,K,L,JV)=TXY(I,JV) 599 SSXZ(I,K,L,JV)=TXZ(I,JV) 600 SYY(I,K,L,JV)=TYY(I,JV) 601 SYZ(I,K,L,JV)=TYZ(I,JV) 602 SZZ(I,K,L,JV)=TZZ(I,JV) 603 END DO 604 END DO 605 ! 606 ENDIF 607 ! 608 END DO 609 END DO 610 ! 611 ! ----------- AA Test en fin de ADVX ------ Controle des S* 612 613 ! DO 9999 l = 1, llm 614 ! DO 9999 j = 1, jjp1 615 ! DO 9999 i = 1, iip1 616 ! IF (S0(i,j,l,ntra).lt.0..and.LIMIT) THEN 617 ! PRINT*, '-------------------' 618 ! PRINT*, 'En fin de ADVXP' 619 ! PRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra) 620 ! PRINT*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra) 621 ! PRINT*, 'SY(',i,j,l,')=',SY(i,j,l,ntra) 622 ! PRINT*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra) 623 ! WRITE (*,*) 'On arrete !! - pbl en fin de ADVXP' 624 ! STOP 625 ! ENDIF 626 ! 9999 CONTINUE 627 ! ---------- bouclage cyclique 628 629 DO l = 1,llm 630 DO j = 1,jjp1 631 SM(iip1,j,l) = SM(1,j,l) 632 S0(iip1,j,l,ntra) = S0(1,j,l,ntra) 633 SSX(iip1,j,l,ntra) = SSX(1,j,l,ntra) 634 SY(iip1,j,l,ntra) = SY(1,j,l,ntra) 635 SZ(iip1,j,l,ntra) = SZ(1,j,l,ntra) 636 END DO 637 END DO 638 639 ! ----------- qqtite totale de traceur dans tte l'atmosphere 640 DO l = 1, llm 641 DO j = 1, jjp1 642 DO i = 1, iim 643 sqf = sqf + S0(i,j,l,ntra) 644 END DO 645 END DO 646 END DO 647 648 PRINT*,'------ DIAG DANS ADVX2 - SORTIE -----' 649 PRINT*,'sqf=',sqf 650 !------------------------------------------------------------- 651 RETURN 652 END SUBROUTINE ADVXP
Note: See TracChangeset
for help on using the changeset viewer.