Changeset 5159 for LMDZ6/branches/Amaury_dev/libf/dyn3d_common/advxp.f90
- Timestamp:
- Aug 2, 2024, 9:58:25 PM (7 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/advxp.f90
r5134 r5159 4 4 SUBROUTINE ADVXP(LIMIT,DTX,PBARU,SM,S0,SSX,SY,SZ & 5 5 ,SSXX,SSXY,SSXZ,SYY,SYZ,SZZ,ntra) 6 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 USE lmdz_paramet 6 8 IMPLICIT NONE 7 9 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC … … 10 12 ! C 11 13 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 12 ! 14 13 15 ! parametres principaux du modele 14 16 ! 15 INCLUDE "dimensions.h" 16 INCLUDE "paramet.h" 17 18 17 19 18 20 INTEGER :: ntra 19 21 ! PARAMETER (ntra = 1) 20 ! 22 21 23 ! definition de la grille du modele 22 ! 24 23 25 REAL :: dtx 24 26 REAL :: pbaru ( iip1,jjp1,llm ) 25 ! 27 26 28 ! moments: SM total mass in each grid box 27 29 ! S0 mass of tracer in each grid box 28 30 ! Si 1rst order moment in i direction 29 31 ! Sij 2nd order moment in i and j directions 30 ! 32 31 33 REAL :: SM(iip1,jjp1,llm) & 32 34 ,S0(iip1,jjp1,llm,ntra) … … 52 54 ! Rem : VGRI et WGRI ne sont pas utilises dans 53 55 ! cette SUBROUTINE ( advection en x uniquement ) 54 ! 55 ! 56 57 56 58 ! Tij are the moments for the current latitude and level 57 ! 59 58 60 REAL :: TM (iim) 59 61 REAL :: T0 (iim,NTRA),TX (iim,NTRA) … … 62 64 REAL :: TXZ(iim,NTRA),TYY(iim,NTRA) 63 65 REAL :: TYZ(iim,NTRA),TZZ(iim,NTRA) 64 ! 66 65 67 ! the moments F are similarly defined and used as temporary 66 68 ! storage for portions of the grid boxes in transit 67 ! 69 68 70 REAL :: FM (iim) 69 71 REAL :: F0 (iim,NTRA),FX (iim,NTRA) … … 72 74 REAL :: FXZ(iim,NTRA),FYY(iim,NTRA) 73 75 REAL :: FYZ(iim,NTRA),FZZ(iim,NTRA) 74 ! 76 75 77 ! work arrays 76 ! 78 77 79 REAL :: ALF (iim),ALF1(iim),ALFQ(iim),ALF1Q(iim) 78 80 REAL :: ALF2(iim),ALF3(iim),ALF4(iim) 79 ! 81 80 82 REAL :: SMNEW(iim),UEXT(iim) 81 83 REAL :: sqi,sqf … … 111 113 ! *** Test : diagnostique de la qtite totale de traceur 112 114 ! dans l'atmosphere avant l'advection 113 ! 115 114 116 sqi =0. 115 117 sqf =0. 116 ! 118 117 119 DO l = 1, llm 118 120 DO j = 1, jjp1 … … 144 146 ! Interface : adaptation nouveau modele 145 147 ! ------------------------------------- 146 ! 148 147 149 ! --------------------------------------------------------- 148 150 ! Conversion des flux de masses en kg/s … … 160 162 ! --------------------------------------------------------- 161 163 ! start here 162 ! 164 163 165 ! boucle principale sur les niveaux et les latitudes 164 ! 166 165 167 DO L=1,NIV 166 168 DO K=lati,latf 167 169 168 ! 170 169 171 ! initialisation 170 ! 172 171 173 ! program assumes periodic boundaries in X 172 ! 174 173 175 DO I=2,LON 174 176 SMNEW(I)=SM(I,K,L)+(UGRI(I-1,K,L)-UGRI(I,K,L))*DTX 175 177 END DO 176 178 SMNEW(1)=SM(1,K,L)+(UGRI(LON,K,L)-UGRI(1,K,L))*DTX 177 ! 179 178 180 ! modifications for extended polar zones 179 ! 181 180 182 NUMK=NUM(K) 181 183 LONK=LON/NUMK 182 ! 184 183 185 IF(NUMK>1) THEN 184 ! 186 185 187 DO I=1,LON 186 188 TM(I)=0. … … 200 202 END DO 201 203 END DO 202 ! 204 203 205 DO I2=1,NUMK 204 ! 206 205 207 DO I=1,LONK 206 208 I3=(I-1)*NUMK+I2 … … 213 215 ALF3(I)=ALF(I)*ALF1(I) 214 216 END DO 215 ! 217 216 218 DO JV=1,NTRA 217 219 DO I=1,LONK … … 233 235 END DO 234 236 END DO 235 ! 236 END DO 237 ! 237 238 END DO 239 238 240 ELSE 239 ! 241 240 242 DO I=1,LON 241 243 TM(I)=SM(I,K,L) … … 255 257 END DO 256 258 END DO 257 ! 259 258 260 ENDIF 259 ! 261 260 262 DO I=1,LONK 261 263 UEXT(I)=UGRI(I*NUMK,K,L) 262 264 END DO 263 ! 265 264 266 ! place limits on appropriate moments before transport 265 267 ! (if flux-limiting is to be applied) 266 ! 268 267 269 IF(.NOT.LIMIT) GO TO 13 268 ! 270 269 271 DO JV=1,NTRA 270 272 DO I=1,LONK … … 287 289 END DO 288 290 END DO 289 ! 291 290 292 13 CONTINUE 291 ! 293 292 294 ! calculate flux and moments between adjacent boxes 293 295 ! 1- create temporary moments/masses for partial boxes in transit 294 296 ! 2- reajusts moments remaining in the box 295 ! 297 296 298 ! flux from IP to I if U(I).lt.0 297 ! 299 298 300 DO I=1,LONK-1 299 301 IF(UEXT(I)<0.) THEN … … 303 305 ENDIF 304 306 END DO 305 ! 307 306 308 I=LONK 307 309 IF(UEXT(I)<0.) THEN … … 310 312 TM(1)=TM(1)-FM(I) 311 313 ENDIF 312 ! 314 313 315 ! flux from I to IP if U(I).gt.0 314 ! 316 315 317 DO I=1,LONK 316 318 IF(UEXT(I)>=0.) THEN … … 320 322 ENDIF 321 323 END DO 322 ! 324 323 325 DO I=1,LONK 324 326 ALFQ(I)=ALF(I)*ALF(I) … … 329 331 ALF4(I)=ALF1(I)*ALF1Q(I) 330 332 END DO 331 ! 333 332 334 DO JV=1,NTRA 333 335 DO I=1,LONK-1 334 ! 336 335 337 IF(UEXT(I)<0.) THEN 336 ! 338 337 339 F0 (I,JV)=ALF (I)* ( T0(I+1,JV)-ALF1(I)* & 338 340 ( TX(I+1,JV)-ALF2(I)*TXX(I+1,JV) ) ) … … 346 348 FYZ(I,JV)=ALF (I)*TYZ(I+1,JV) 347 349 FZZ(I,JV)=ALF (I)*TZZ(I+1,JV) 348 ! 350 349 351 T0 (I+1,JV)=T0(I+1,JV)-F0(I,JV) 350 352 TX (I+1,JV)=ALF1Q(I)*(TX(I+1,JV)+3.*ALF(I)*TXX(I+1,JV)) … … 357 359 TXY(I+1,JV)=ALF1Q(I)*TXY(I+1,JV) 358 360 TXZ(I+1,JV)=ALF1Q(I)*TXZ(I+1,JV) 359 ! 360 ENDIF 361 ! 362 END DO 363 END DO 364 ! 361 362 ENDIF 363 364 END DO 365 END DO 366 365 367 I=LONK 366 368 IF(UEXT(I)<0.) THEN 367 ! 369 368 370 DO JV=1,NTRA 369 ! 371 370 372 F0 (I,JV)=ALF (I)* ( T0(1,JV)-ALF1(I)* & 371 373 ( TX(1,JV)-ALF2(I)*TXX(1,JV) ) ) … … 379 381 FYZ(I,JV)=ALF (I)*TYZ(1,JV) 380 382 FZZ(I,JV)=ALF (I)*TZZ(1,JV) 381 ! 383 382 384 T0 (1,JV)=T0(1,JV)-F0(I,JV) 383 385 TX (1,JV)=ALF1Q(I)*(TX(1,JV)+3.*ALF(I)*TXX(1,JV)) … … 390 392 TXY(1,JV)=ALF1Q(I)*TXY(1,JV) 391 393 TXZ(1,JV)=ALF1Q(I)*TXZ(1,JV) 392 ! 393 END DO 394 ! 394 395 END DO 396 395 397 ENDIF 396 ! 397 DO JV=1,NTRA 398 DO I=1,LONK 399 ! 398 399 DO JV=1,NTRA 400 DO I=1,LONK 401 400 402 IF(UEXT(I)>=0.) THEN 401 ! 403 402 404 F0 (I,JV)=ALF (I)* ( T0(I,JV)+ALF1(I)* & 403 405 ( TX(I,JV)+ALF2(I)*TXX(I,JV) ) ) … … 411 413 FYZ(I,JV)=ALF (I)*TYZ(I,JV) 412 414 FZZ(I,JV)=ALF (I)*TZZ(I,JV) 413 ! 415 414 416 T0 (I,JV)=T0(I,JV)-F0(I,JV) 415 417 TX (I,JV)=ALF1Q(I)*(TX(I,JV)-3.*ALF(I)*TXX(I,JV)) … … 422 424 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 423 425 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 424 ! 425 ENDIF 426 ! 427 END DO 428 END DO 429 ! 426 427 ENDIF 428 429 END DO 430 END DO 431 430 432 ! puts the temporary moments Fi into appropriate neighboring boxes 431 ! 433 432 434 DO I=1,LONK 433 435 IF(UEXT(I)<0.) THEN … … 436 438 ENDIF 437 439 END DO 438 ! 440 439 441 DO I=1,LONK-1 440 442 IF(UEXT(I)>=0.) THEN … … 443 445 ENDIF 444 446 END DO 445 ! 447 446 448 I=LONK 447 449 IF(UEXT(I)>=0.) THEN … … 449 451 ALF(I)=FM(I)/TM(1) 450 452 ENDIF 451 ! 453 452 454 DO I=1,LONK 453 455 ALF1(I)=1.-ALF(I) … … 457 459 ALF3(I)=ALF(I)*ALF1(I) 458 460 END DO 459 ! 460 DO JV=1,NTRA 461 DO I=1,LONK 462 ! 461 462 DO JV=1,NTRA 463 DO I=1,LONK 464 463 465 IF(UEXT(I)<0.) THEN 464 ! 466 465 467 TEMPTM=-ALF(I)*T0(I,JV)+ALF1(I)*F0(I,JV) 466 468 T0 (I,JV)=T0(I,JV)+F0(I,JV) … … 477 479 TYZ(I,JV)=TYZ(I,JV)+FYZ(I,JV) 478 480 TZZ(I,JV)=TZZ(I,JV)+FZZ(I,JV) 479 ! 480 ENDIF 481 ! 482 END DO 483 END DO 484 ! 481 482 ENDIF 483 484 END DO 485 END DO 486 485 487 DO JV=1,NTRA 486 488 DO I=1,LONK-1 487 ! 489 488 490 IF(UEXT(I)>=0.) THEN 489 ! 491 490 492 TEMPTM=ALF(I)*T0(I+1,JV)-ALF1(I)*F0(I,JV) 491 493 T0 (I+1,JV)=T0(I+1,JV)+F0(I,JV) … … 502 504 TYZ(I+1,JV)=TYZ(I+1,JV)+FYZ(I,JV) 503 505 TZZ(I+1,JV)=TZZ(I+1,JV)+FZZ(I,JV) 504 ! 505 ENDIF 506 ! 507 END DO 508 END DO 509 ! 506 507 ENDIF 508 509 END DO 510 END DO 511 510 512 I=LONK 511 513 IF(UEXT(I)>=0.) THEN … … 527 529 END DO 528 530 ENDIF 529 ! 531 530 532 ! retour aux mailles d'origine (passage des Tij aux Sij) 531 ! 533 532 534 IF(NUMK>1) THEN 533 ! 535 534 536 DO I2=1,NUMK 535 ! 537 536 538 DO I=1,LONK 537 ! 539 538 540 I3=I2+(I-1)*NUMK 539 541 SM(I3,K,L)=SMNEW(I3) 540 542 ALF(I)=SMNEW(I3)/TM(I) 541 543 TM(I)=TM(I)-SMNEW(I3) 542 ! 544 543 545 ALFQ(I)=ALF(I)*ALF(I) 544 546 ALF1(I)=1.-ALF(I) … … 547 549 ALF3(I)=ALF(I)*ALFQ(I) 548 550 ALF4(I)=ALF1(I)*ALF1Q(I) 549 ! 550 END DO 551 ! 551 552 END DO 553 552 554 DO JV=1,NTRA 553 555 DO I=1,LONK 554 ! 556 555 557 I3=I2+(I-1)*NUMK 556 558 S0 (I3,K,L,JV)=ALF (I)* ( T0(I,JV)-ALF1(I)* & … … 565 567 SYZ(I3,K,L,JV)=ALF (I)*TYZ(I,JV) 566 568 SZZ(I3,K,L,JV)=ALF (I)*TZZ(I,JV) 567 ! 569 568 570 ! reajusts moments remaining in the box 569 ! 571 570 572 T0 (I,JV)=T0(I,JV)-S0(I3,K,L,JV) 571 573 TX (I,JV)=ALF1Q(I)*(TX(I,JV)+3.*ALF(I)*TXX(I,JV)) … … 578 580 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 579 581 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 580 ! 581 END DO 582 END DO 583 ! 584 END DO 585 ! 582 583 END DO 584 END DO 585 586 END DO 587 586 588 ELSE 587 ! 589 588 590 DO I=1,LON 589 591 SM(I,K,L)=TM(I) … … 603 605 END DO 604 606 END DO 605 ! 607 606 608 ENDIF 607 ! 608 END DO 609 END DO 610 ! 609 610 END DO 611 END DO 612 611 613 ! ----------- AA Test en fin de ADVX ------ Controle des S* 612 614
Note: See TracChangeset
for help on using the changeset viewer.