Changeset 5763
- Timestamp:
- Jul 8, 2025, 11:09:14 AM (10 hours ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/calwake.f90
r5499 r5763 57 57 USE indice_sol_mod, ONLY: is_oce 58 58 USE print_control_mod, ONLY: lunout, prt_level 59 USE lmdz_wake, ONLY : wake 59 USE lmdz_wake, ONLY : wake, wake2 60 USE alpale_mod, ONLY: iflag_wake 60 61 USE yomcst_mod_h 61 62 IMPLICIT NONE … … 240 241 241 242 242 CALL wake(klon,klev,znatsurf, p, ph, pi, dtime, & 243 te, qe, omgbe, & 244 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, & 245 sigd0, Cin, & 246 dtw, dqw, sigmaw, asigmaw, wdens, awdens, & ! state variables 247 dth, hw, wape, fip, gfl, & 248 dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, & 249 dtke, dqke, omg, dp_deltomg, spread, cstar, & 250 d_deltat_gw, & 251 d_deltatw, d_deltaqw, d_sigmaw, d_asigmaw, d_wdens, d_awdens) ! tendencies 243 IF (iflag_wake/10 == 0) THEN 244 CALL wake(klon,klev,znatsurf, p, ph, pi, dtime, & 245 te, qe, omgbe, & 246 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, & 247 sigd0, Cin, & 248 dtw, dqw, sigmaw, asigmaw, wdens, awdens, & ! state variables 249 dth, hw, wape, fip, gfl, & 250 dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, & 251 dtke, dqke, omg, dp_deltomg, spread, cstar, & 252 d_deltat_gw, & 253 d_deltatw, d_deltaqw, d_sigmaw, d_asigmaw, d_wdens, d_awdens) ! tendencies 254 255 ELSE IF (iflag_wake/10 == 2) THEN 256 CALL wake2(klon,klev,znatsurf, p, ph, pi, dtime, & 257 te, qe, omgbe, & 258 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, & 259 sigd0, Cin, & 260 dtw, dqw, sigmaw, asigmaw, wdens, awdens, & ! state variables 261 dth, hw, wape, fip, gfl, & 262 dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, & 263 dtke, dqke, omg, dp_deltomg, spread, cstar, & 264 d_deltat_gw, & 265 d_deltatw, d_deltaqw, d_sigmaw, d_asigmaw, d_wdens, d_awdens) ! tendencies 266 267 END IF !(iflag_wake/10 == 0) 268 252 269 253 270 ! -
LMDZ6/trunk/libf/phylmd/lmdz_wake.f90
r5761 r5763 5 5 IMPLICIT NONE; PRIVATE 6 6 7 !!! LOGICAL, PARAMETER :: phys_sub=.false. 8 LOGICAL, PARAMETER :: phys_sub=.true. 7 LOGICAL, PARAMETER :: phys_sub=.false. 9 8 LOGICAL :: first_call=.true. 10 9 !$OMP THREADPRIVATE(first_call) 11 10 12 PUBLIC wake, wake _first11 PUBLIC wake, wake2, wake_first 13 12 14 13 CONTAINS … … 43 42 dth, hw, wape, fip, gfl, & 44 43 dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, & 45 !!! dtke, dqke, omg, dp_deltomg, wkspread, cstar, & ! changes in notation 46 d_deltat_dcv, d_deltaq_dcv, omg, dp_deltomg, wkspread, cstar, & 44 dtke, dqke, omg, dp_deltomg, wkspread, cstar, & 47 45 d_deltat_gw, & ! tendencies 48 46 d_deltatw2, d_deltaqw2, d_sigmaw2, d_asigmaw2, d_wdens2, d_awdens2) ! tendencies … … 98 96 ! wdens : densite de poches 99 97 ! omgbdth: flux of Delta_Theta transported by LS omega 100 ! d _deltat_dcv: differential heating (wake - unpertubed)101 ! d _deltat_dcv: differential moistening (wake - unpertubed)98 ! dtKE : differential heating (wake - unpertubed) 99 ! dqKE : differential moistening (wake - unpertubed) 102 100 ! omg : Delta_omg =vertical velocity diff. wake-undist. (Pa/s) 103 101 ! dp_deltomg : vertical gradient of omg (s-1) … … 170 168 ! -------------------- 171 169 172 INTEGER, INTENT(IN):: klon,klev170 INTEGER, INTENT(IN) :: klon,klev 173 171 INTEGER, DIMENSION (klon), INTENT(IN) :: znatsurf 174 172 REAL, DIMENSION (klon, klev), INTENT(IN) :: p, pi … … 199 197 REAL, DIMENSION (klon, klev), INTENT(OUT) :: tx, qx 200 198 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtls, dqls 201 !! REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtke, dqke 202 REAL, DIMENSION (klon, klev), INTENT(OUT) :: d_deltat_dcv, d_deltaq_dcv 199 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtke, dqke 203 200 REAL, DIMENSION (klon, klev), INTENT(OUT) :: wkspread ! unused (jyg) 204 201 REAL, DIMENSION (klon, klev), INTENT(OUT) :: omgbdth, omg … … 270 267 ! Sub-timestep tendencies and related variables 271 268 REAL, DIMENSION (klon, klev) :: d_deltatw, d_deltaqw 272 REAL, DIMENSION (klon, klev) :: d_deltat_dadv, d_deltaq_dadv273 REAL, DIMENSION (klon, klev) :: d_deltat_lsadv, d_deltaq_lsadv274 REAL, DIMENSION (klon, klev) :: d_deltat_entrp275 REAL, DIMENSION (klon, klev) :: d_deltat_spread, d_deltaq_spread276 277 269 REAL, DIMENSION (klon, klev) :: d_tb, d_qb 278 REAL, DIMENSION (klon, klev) :: d_tb_dadv, d_qb_dadv279 REAL, DIMENSION (klon, klev) :: d_tb_spread, d_qb_spread280 281 270 REAL, DIMENSION (klon) :: d_wdens, d_awdens, d_sigmaw, d_asigmaw 282 271 REAL, DIMENSION (klon) :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd … … 290 279 LOGICAL, DIMENSION (klon) :: wk_adv, ok_qx_qw 291 280 292 ! Tests293 REAL, DIMENSION (klon, klev) :: c5p294 295 281 ! Autres variables internes 296 282 INTEGER ::isubstep, k, i, igout … … 302 288 REAL :: d_sigmaw_targ 303 289 REAL :: d_wdens_targ 304 305 REAL, DIMENSION (klon) :: dsigspread !rate of change of sigmaw due to spreading306 290 307 291 REAL, DIMENSION (klon) :: sum_thx, sum_tx, sum_qx, sum_thvx … … 333 317 REAL, DIMENSION (klon, klev) :: omgbdq 334 318 319 REAL, DIMENSION (klon) :: ff, gg 335 320 REAL, DIMENSION (klon) :: wape2, cstar2, heff 336 321 … … 342 327 REAL, DIMENSION (klon) :: death_rate 343 328 !! REAL, DIMENSION (klon) :: nat_rate 344 REAL, DIMENSION (klon, klev) :: entr ! total entrainment into wakes (spread + birth) 345 REAL, DIMENSION (klon, klev) :: entr_p ! entrainment into wakes (due to births) 346 REAL, DIMENSION (klon, klev) :: detr ! detrainment from wakes (due to deaths) 329 REAL, DIMENSION (klon, klev) :: entr 330 REAL, DIMENSION (klon, klev) :: detr 347 331 348 332 REAL, DIMENSION(klon) :: sigmaw_in, asigmaw_in ! pour les prints … … 357 341 REAL, DIMENSION (klon) :: omega 358 342 REAL, DIMENSION (klon) :: h_zzz 359 360 !! Bidouilles361 REAL :: iwkadv362 REAL :: iokqxqw363 343 364 344 !print*,'WAKE LJYFz' … … 458 438 dqls(:,:) = 0. 459 439 d_deltat_gw(:,:) = 0. 440 d_tb(:,:) = 0. 441 d_qb(:,:) = 0. 442 d_deltatw(:,:) = 0. 443 d_deltaqw(:,:) = 0. 444 d_deltatw2(:,:) = 0. 445 d_deltaqw2(:,:) = 0. 446 447 d_sig_gen2(:) = 0. 448 d_sig_death2(:) = 0. 449 d_sig_col2(:) = 0. 450 d_sig_spread2(:)= 0. 451 d_asig_death2(:) = 0. 452 d_asig_iicol2(:) = 0. 453 d_asig_aicol2(:) = 0. 454 d_asig_spread2(:)= 0. 455 d_asig_bnd2(:) = 0. 456 d_asigmaw2(:) = 0. 457 ! 458 d_dens_gen2(:) = 0. 459 d_dens_death2(:) = 0. 460 d_dens_col2(:) = 0. 461 d_dens_bnd2(:) = 0. 462 d_wdens2(:) = 0. 463 d_adens_bnd2(:) = 0. 464 d_awdens2(:) = 0. 465 d_adens_death2(:) = 0. 466 d_adens_icol2(:) = 0. 467 d_adens_acol2(:) = 0. 468 469 IF (iflag_wk_act == 0) THEN 470 act(:) = 0. 471 ELSEIF (iflag_wk_act == 1) THEN 472 act(:) = 1. 473 ENDIF 474 475 !! DO i = 1, klon 476 !! sigmaw_in(i) = sigmaw(i) 477 !! END DO 478 sigmaw_in(:) = sigmaw(:) 479 asigmaw_in(:) = asigmaw(:) 480 !>jyg 481 ! 482 IF (iflag_wk_pop_dyn >= 1) THEN 483 awdens_in(:) = awdens(:) 484 wdens_in(:) = wdens(:) 485 !! wdens(:) = wdens(:) + wgen(:)*dtime 486 !! d_wdens2(:) = wgen(:)*dtime 487 !! ELSE 488 ENDIF ! (iflag_wk_pop_dyn >= 1) 489 490 491 ! sigmaw1=sigmaw 492 ! IF (sigd_con.GT.sigmaw1) THEN 493 ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con 494 ! ENDIF 495 IF (iflag_wk_pop_dyn >= 1) THEN 496 DO i = 1, klon 497 d_dens_gen2(i) = 0. 498 d_dens_death2(i) = 0. 499 d_dens_col2(i) = 0. 500 d_awdens2(i) = 0. 501 IF (wdens(i) < wdensthreshold) THEN 502 !! wdens_targ = max(wdens(i),wdensmin) 503 wdens_targ = max(wdens(i),wdensinit) 504 d_dens_bnd2(i) = wdens_targ - wdens(i) 505 d_wdens2(i) = wdens_targ - wdens(i) 506 wdens(i) = wdens_targ 507 ELSE 508 d_dens_bnd2(i) = 0. 509 d_wdens2(i) = 0. 510 ENDIF !! (wdens(i) < wdensthreshold) 511 END DO 512 IF (iflag_wk_pop_dyn >= 2) THEN 513 DO i = 1, klon 514 IF (awdens(i) < wdensthreshold) THEN 515 !! wdens_targ = min(max(awdens(i),wdensmin),wdens(i)) 516 wdens_targ = min(max(awdens(i),wdensinit),wdens(i)) 517 d_adens_bnd2(i) = wdens_targ - awdens(i) 518 d_awdens2(i) = wdens_targ - awdens(i) 519 awdens(i) = wdens_targ 520 ELSE 521 wdens_targ = min(awdens(i), wdens(i)) 522 d_adens_bnd2(i) = wdens_targ - awdens(i) 523 d_awdens2(i) = wdens_targ - awdens(i) 524 awdens(i) = wdens_targ 525 ENDIF 526 END DO 527 ENDIF ! (iflag_wk_pop_dyn >= 2) 528 ELSE 529 DO i = 1, klon 530 d_awdens2(i) = 0. 531 d_wdens2(i) = 0. 532 END DO 533 ENDIF ! (iflag_wk_pop_dyn >= 1) 534 ! 535 DO i = 1, klon 536 sigmaw_targ = min(max(sigmaw(i), sigmad),0.99) 537 d_sig_bnd2(i) = sigmaw_targ - sigmaw(i) 538 d_sigmaw2(i) = sigmaw_targ - sigmaw(i) 539 sigmaw(i) = sigmaw_targ 540 END DO 541 ! 542 IF (iflag_wk_pop_dyn == 3) THEN 543 DO i = 1, klon 544 IF ((wdens(i)-awdens(i)) <= smallestreal) THEN 545 sigmaw_targ = sigmaw(i) 546 ELSE 547 sigmaw_targ = min(max(asigmaw(i),sigmad),sigmaw(i)) 548 ENDIF 549 d_asig_bnd2(i) = sigmaw_targ - asigmaw(i) 550 d_asigmaw2(i) = sigmaw_targ - asigmaw(i) 551 asigmaw(i) = sigmaw_targ 552 END DO 553 ENDIF ! (iflag_wk_pop_dyn == 3) 554 555 wape(:) = 0. 556 wape2(:) = 0. 557 d_sigmaw(:) = 0. 558 d_asigmaw(:) = 0. 559 ktopw(:) = 0 560 ! 561 !<jyg 562 dth(:,:) = 0. 563 tx(:,:) = 0. 564 qx(:,:) = 0. 565 dtke(:,:) = 0. 566 dqke(:,:) = 0. 567 wkspread(:,:) = 0. 568 omgbdth(:,:) = 0. 569 omg(:,:) = 0. 570 dp_omgb(:,:) = 0. 571 dp_deltomg(:,:) = 0. 572 hw(:) = 0. 573 wape(:) = 0. 574 fip(:) = 0. 575 gfl(:) = 0. 576 cstar(:) = 0. 577 ktopw(:) = 0 578 ! 579 ! Vertical advection local variables 580 omgbw(:,:) = 0. 581 omgtop(:) = 0 582 dp_omgbw(:,:) = 0. 583 omgbdq(:,:) = 0. 584 585 !>jyg 586 ! 587 IF (prt_level>=10) THEN 588 PRINT *, 'wake-1, sigmaw(igout) ', sigmaw(igout) 589 PRINT *, 'wake-1, deltatw(igout,k) ', (k,deltatw(igout,k), k=1,klev) 590 PRINT *, 'wake-1, deltaqw(igout,k) ', (k,deltaqw(igout,k), k=1,klev) 591 PRINT *, 'wake-1, dowwdraughts, amdwn(igout,k) ', (k,amdwn(igout,k), k=1,klev) 592 PRINT *, 'wake-1, dowwdraughts, dtdwn(igout,k) ', (k,dtdwn(igout,k), k=1,klev) 593 PRINT *, 'wake-1, dowwdraughts, dqdwn(igout,k) ', (k,dqdwn(igout,k), k=1,klev) 594 PRINT *, 'wake-1, updraughts, amup(igout,k) ', (k,amup(igout,k), k=1,klev) 595 PRINT *, 'wake-1, updraughts, dta(igout,k) ', (k,dta(igout,k), k=1,klev) 596 PRINT *, 'wake-1, updraughts, dqa(igout,k) ', (k,dqa(igout,k), k=1,klev) 597 ENDIF 598 599 ! 2. - Prognostic part 600 ! -------------------- 601 602 603 ! 2.1 - Undisturbed area and Wake integrals 604 ! --------------------------------------------------------- 605 606 DO i = 1, klon 607 z(i) = 0. 608 ktop(i) = 0 609 kupper(i) = 0 610 sum_thx(i) = 0. 611 sum_tx(i) = 0. 612 sum_qx(i) = 0. 613 sum_thvx(i) = 0. 614 sum_dth(i) = 0. 615 sum_dq(i) = 0. 616 sum_dtdwn(i) = 0. 617 sum_dqdwn(i) = 0. 618 619 av_thx(i) = 0. 620 av_tx(i) = 0. 621 av_qx(i) = 0. 622 av_thvx(i) = 0. 623 av_dth(i) = 0. 624 av_dq(i) = 0. 625 av_dtdwn(i) = 0. 626 av_dqdwn(i) = 0. 627 END DO 628 629 ! Distance between wakes 630 DO i = 1, klon 631 ll(i) = (1-sqrt(sigmaw(i)))/sqrt(wdens(i)) 632 END DO 633 ! Potential temperatures and humidity 634 ! ---------------------------------------------------------- 635 DO k = 1, klev 636 DO i = 1, klon 637 ! write(*,*)'wake 1',i,k,RD,tb(i,k) 638 rho(i, k) = p(i, k)/(RD*tb(i,k)) 639 ! write(*,*)'wake 2',rho(i,k) 640 IF (k==1) THEN 641 ! write(*,*)'wake 3',i,k,rd,tb(i,k) 642 rhoh(i, k) = ph(i, k)/(RD*tb(i,k)) 643 ! write(*,*)'wake 4',i,k,rd,tb(i,k) 644 zhh(i, k) = 0 645 ELSE 646 ! write(*,*)'wake 5',rd,(tb(i,k)+tb(i,k-1)) 647 rhoh(i, k) = ph(i, k)*2./(RD*(tb(i,k)+tb(i,k-1))) 648 ! write(*,*)'wake 6',(-rhoh(i,k)*RG)+zhh(i,k-1) 649 zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1) 650 END IF 651 ! write(*,*)'wake 7',ppi(i,k) 652 thb(i, k) = tb(i, k)/ppi(i, k) 653 thx(i, k) = (tb(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k) 654 tx(i, k) = tb(i, k) - deltatw(i, k)*sigmaw(i) 655 qx(i, k) = qb(i, k) - deltaqw(i, k)*sigmaw(i) 656 ! write(*,*)'wake 8',(RD*(tb(i,k)+deltatw(i,k))) 657 dth(i, k) = deltatw(i, k)/ppi(i, k) 658 END DO 659 END DO 660 661 DO k = 1, klev - 1 662 DO i = 1, klon 663 IF (k==1) THEN 664 n2(i, k) = 0 665 ELSE 666 n2(i, k) = amax1(0., -RG**2/thb(i,k)*rho(i,k)*(thb(i,k+1)-thb(i,k-1))/ & 667 (p(i,k+1)-p(i,k-1))) 668 END IF 669 zh(i, k) = (zhh(i,k)+zhh(i,k+1))/2 670 671 cgw(i, k) = sqrt(n2(i,k))*zh(i, k) 672 tgw(i, k) = coefgw*cgw(i, k)/ll(i) 673 END DO 674 END DO 675 676 DO i = 1, klon 677 n2(i, klev) = 0 678 zh(i, klev) = 0 679 cgw(i, klev) = 0 680 tgw(i, klev) = 0 681 END DO 682 683 684 ! Choose an integration bound well above wake top 685 ! ----------------------------------------------------------------- 686 687 ! Determine Wake top pressure (Ptop) from buoyancy integral 688 ! -------------------------------------------------------- 689 690 Do i=1, klon 691 wk_adv(i) = .True. 692 Enddo 693 Call pkupper (klon, klev, ptop, ph, p, pupper, kupper, & 694 dth, hw0, rho, delta_t_min, & 695 ktop, wk_adv, h_zzz, ptop1, ktop1) 696 697 !!print'("pkupper APPEL ",7i6)',0,int(ptop/100.),int(ptop1/100.),int(pupper/100.),ktop,ktop1,kupper 698 699 IF (prt_level>=10) THEN 700 PRINT *, 'wake-3, ktop(igout), kupper(igout) ', ktop(igout), kupper(igout) 701 ENDIF 702 703 ! -5/ Set deltatw & deltaqw to 0 above kupper 704 705 DO k = 1, klev 706 DO i = 1, klon 707 IF (k>=kupper(i)) THEN 708 deltatw(i, k) = 0. 709 deltaqw(i, k) = 0. 710 d_deltatw2(i,k) = -deltatw0(i,k) 711 d_deltaqw2(i,k) = -deltaqw0(i,k) 712 END IF 713 END DO 714 END DO 715 716 717 ! Vertical gradient of LS omega 718 719 DO k = 1, klev 720 DO i = 1, klon 721 IF (k<=kupper(i)) THEN 722 dp_omgb(i, k) = (omgb(i,k+1)-omgb(i,k))/(ph(i,k+1)-ph(i,k)) 723 END IF 724 END DO 725 END DO 726 727 ! Integrals (and wake top level number) 728 ! -------------------------------------- 729 730 ! Initialize sum_thvx to 1st level virt. pot. temp. 731 732 DO i = 1, klon 733 z(i) = 1. 734 dz(i) = 1. 735 sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i) 736 sum_dth(i) = 0. 737 END DO 738 739 DO k = 1, klev 740 DO i = 1, klon 741 dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG) 742 IF (dz(i)>0) THEN 743 ! LJYF : ecriture pas sympa avec un tableau z(i) qui n'est pas utilise come tableau 744 z(i) = z(i) + dz(i) 745 sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i) 746 sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i) 747 sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i) 748 sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i) 749 sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i) 750 sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i) 751 sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i) 752 sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i) 753 END IF 754 END DO 755 END DO 756 757 DO i = 1, klon 758 hw0(i) = z(i) 759 END DO 760 761 762 ! 2.1 - WAPE and mean forcing computation 763 ! --------------------------------------- 764 765 ! --------------------------------------- 766 767 ! Means 768 769 DO i = 1, klon 770 av_thx(i) = sum_thx(i)/hw0(i) 771 av_tx(i) = sum_tx(i)/hw0(i) 772 av_qx(i) = sum_qx(i)/hw0(i) 773 av_thvx(i) = sum_thvx(i)/hw0(i) 774 ! av_thve = sum_thve/hw0 775 av_dth(i) = sum_dth(i)/hw0(i) 776 av_dq(i) = sum_dq(i)/hw0(i) 777 av_dtdwn(i) = sum_dtdwn(i)/hw0(i) 778 av_dqdwn(i) = sum_dqdwn(i)/hw0(i) 779 780 wape(i) = -RG*hw0(i)*(av_dth(i)+ & 781 epsim1*(av_thx(i)*av_dq(i)+av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i) 782 783 END DO 784 IF (CPPKEY_IOPHYS_WK) THEN 785 IF (.not.phys_sub) CALL iophys_ecrit('wape_a',1,'wape_a','J/kg',wape) 786 END IF 787 788 ! 2.2 Prognostic variable update 789 ! ------------------------------ 790 791 ! Filter out bad wakes 792 793 DO k = 1, klev 794 DO i = 1, klon 795 IF (wape(i)<0.) THEN 796 deltatw(i, k) = 0. 797 deltaqw(i, k) = 0. 798 dth(i, k) = 0. 799 d_deltatw2(i,k) = -deltatw0(i,k) 800 d_deltaqw2(i,k) = -deltaqw0(i,k) 801 END IF 802 END DO 803 END DO 804 805 DO i = 1, klon 806 IF (wape(i)<0.) THEN 807 !! sigmaw(i) = amax1(sigmad, sigd_con(i)) 808 sigmaw_targ = max(sigmad, sigd_con(i)) 809 d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i) 810 d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 811 sigmaw(i) = sigmaw_targ 812 ENDIF !! (wape(i)<0.) 813 ENDDO 814 ! 815 IF (iflag_wk_pop_dyn == 3) THEN 816 DO i = 1, klon 817 IF (wape(i)<0.) THEN 818 sigmaw_targ = max(sigmad, sigd_con(i)) 819 d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i) 820 d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i) 821 asigmaw(i) = sigmaw_targ 822 ENDIF !! (wape(i)<0.) 823 ENDDO 824 ENDIF !! (iflag_wk_pop_dyn == 3) 825 826 DO i = 1, klon 827 IF (wape(i)<0.) THEN 828 wape(i) = 0. 829 cstar(i) = 0. 830 hw(i) = hwmin 831 fip(i) = 0. 832 gwake(i) = .FALSE. 833 ELSE 834 hw(i) = hw0(i) 835 cstar(i) = stark*sqrt(2.*wape(i)) 836 gwake(i) = .TRUE. 837 END IF 838 END DO 839 ! 840 841 ! Check qx and qw positivity 842 ! -------------------------- 843 DO i = 1, klon 844 q0_min(i) = min((qb(i,1)-sigmaw(i)*deltaqw(i,1)), & 845 (qb(i,1)+(1.-sigmaw(i))*deltaqw(i,1))) 846 END DO 847 DO k = 2, klev 848 DO i = 1, klon 849 q1_min(i) = min((qb(i,k)-sigmaw(i)*deltaqw(i,k)), & 850 (qb(i,k)+(1.-sigmaw(i))*deltaqw(i,k))) 851 IF (q1_min(i)<=q0_min(i)) THEN 852 q0_min(i) = q1_min(i) 853 END IF 854 END DO 855 END DO 856 857 DO i = 1, klon 858 ok_qx_qw(i) = q0_min(i) >= 0. 859 alpha(i) = 1. 860 alpha_tot(i) = 1. 861 END DO 862 863 IF (prt_level>=10) THEN 864 PRINT *, 'wake-4, sigmaw(igout), cstar(igout), wape(igout), ktop(igout) ', & 865 sigmaw(igout), cstar(igout), wape(igout), ktop(igout) 866 ENDIF 867 868 869 ! C ----------------------------------------------------------------- 870 ! Sub-time-stepping 871 ! ----------------- 872 873 ! wk_nsub and dtimesub definitions moved to begining of routine. 874 !! wk_nsub = 10 875 !! dtimesub = dtime/wk_nsub 876 877 878 ! ------------------------------------------------------------------------ 879 ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 880 ! ------------------------------------------------------------------------ 881 ! 882 DO isubstep = 1, wk_nsub 883 ! 884 ! ------------------------------------------------------------------------ 885 ! wk_adv is the logical flag enabling wake evolution in the time advance 886 ! loop 887 DO i = 1, klon 888 wk_adv(i) = ok_qx_qw(i) .AND. alpha(i) >= 1. 889 END DO 890 IF (prt_level>=10) THEN 891 PRINT *, 'wake-4.1, isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout) ', & 892 isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout) 893 894 ENDIF 895 896 ! cc nrlmd Ajout d'un recalcul de wdens dans le cas d'un entrainement 897 ! negatif de ktop a kupper -------- 898 ! cc On calcule pour cela une densite wdens0 pour laquelle on 899 ! aurait un entrainement nul --- 900 !jyg< 901 ! Dans la configuration avec wdens prognostique, il s'agit d'un cas ou 902 ! les poches sont insuffisantes pour accueillir tout le flux de masse 903 ! des descentes unsaturees. Nous faisons alors l'hypothese que la 904 ! convection profonde cree directement de nouvelles poches, sans passer 905 ! par les thermiques. La nouvelle valeur de wdens est alors imposee. 906 907 DO i = 1, klon 908 ! c print *,' isubstep,wk_adv(i),cstar(i),wape(i) ', 909 ! c $ isubstep,wk_adv(i),cstar(i),wape(i) 910 IF (wk_adv(i) .AND. cstar(i)>0.01) THEN 911 IF ( iflag_wk_profile == 0 ) THEN 912 omg(i, kupper(i)+1)=-RG*amdwn(i, kupper(i)+1)/sigmaw(i) + & 913 RG*amup(i, kupper(i)+1)/(1.-sigmaw(i)) 914 ELSE 915 omg(i, kupper(i)+1)=0. 916 ENDIF 917 wdens0 = (sigmaw(i)/(4.*3.14))* & 918 ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2) 919 IF (prt_level >= 10) THEN 920 print*,'omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i), ph(i,1)-pupper(i)', & 921 omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i), ph(i,1)-pupper(i) 922 ENDIF 923 IF (wdens(i)<=wdens0*1.1) THEN 924 IF (iflag_wk_pop_dyn >= 1) THEN 925 d_dens_bnd2(i) = d_dens_bnd2(i) + wdens0 - wdens(i) 926 d_wdens2(i) = d_wdens2(i) + wdens0 - wdens(i) 927 ENDIF 928 wdens(i) = wdens0 929 END IF 930 END IF 931 END DO 932 933 IF (iflag_wk_pop_dyn == 0 .AND. ok_bug_gfl) THEN 934 !!-------------------------------------------------------- 935 !!Bug : computing gfl and rad_wk before changing sigmaw 936 !! This bug exists only for iflag_wk_pop_dyn=0. Otherwise, gfl and rad_wk 937 !! are computed within wake_popdyn 938 !!-------------------------------------------------------- 939 DO i = 1, klon 940 IF (wk_adv(i)) THEN 941 gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i)) 942 rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i))) 943 END IF 944 END DO 945 ENDIF ! (iflag_wk_pop_dyn == 0 .AND. ok_bug_gfl) 946 !!-------------------------------------------------------- 947 948 DO i = 1, klon 949 IF (wk_adv(i)) THEN 950 sigmaw_targ = min(sigmaw(i), sigmaw_max) 951 d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i) 952 d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 953 sigmaw(i) = sigmaw_targ 954 END IF 955 END DO 956 957 IF (iflag_wk_pop_dyn == 0 .AND. .NOT.ok_bug_gfl) THEN 958 !!-------------------------------------------------------- 959 !!Fix : computing gfl and rad_wk after changing sigmaw 960 !!-------------------------------------------------------- 961 DO i = 1, klon 962 IF (wk_adv(i)) THEN 963 gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i)) 964 rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i))) 965 END IF 966 END DO 967 ENDIF ! (iflag_wk_pop_dyn == 0 .AND. .NOT.ok_bug_gfl) 968 !!-------------------------------------------------------- 969 970 IF (iflag_wk_pop_dyn >= 1) THEN 971 ! The variable "death_rate" is significant only when iflag_wk_pop_dyn = 0. 972 ! Here, it has to be set to zero. 973 death_rate(:) = 0. 974 ENDIF 975 976 IF (iflag_wk_pop_dyn >= 3) THEN 977 DO i = 1, klon 978 IF (wk_adv(i)) THEN 979 sigmaw_targ = min(asigmaw(i), sigmaw_max) 980 d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i) 981 d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i) 982 asigmaw(i) = sigmaw_targ 983 ENDIF 984 ENDDO 985 ENDIF 986 987 !!-------------------------------------------------------- 988 !!-------------------------------------------------------- 989 IF (iflag_wk_pop_dyn == 1) THEN 990 ! 991 CALL wake_popdyn_1 (klon, klev, dtime, cstar, tau_wk_inv, wgen, wdens, awdens, sigmaw, & 992 wdensmin, & 993 dtimesub, gfl, rad_wk, f_shear, drdt_pos, & 994 d_awdens, d_wdens, d_sigmaw, & 995 iflag_wk_act, wk_adv, cin, wape, & 996 drdt, & 997 d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, & 998 d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, & 999 d_wdens_targ, d_sigmaw_targ) 1000 1001 1002 !!-------------------------------------------------------- 1003 ELSEIF (iflag_wk_pop_dyn == 2) THEN 1004 ! 1005 CALL wake_popdyn_2 ( klon, klev, wk_adv, dtimesub, wgen, & 1006 wdensmin, & 1007 sigmaw, wdens, awdens, & !! state variables 1008 gfl, cstar, cin, wape, rad_wk, & 1009 d_sigmaw, d_wdens, d_awdens, & !! tendencies 1010 cont_fact, & 1011 d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, & 1012 d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, & 1013 d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd ) 1014 sigmaw=sigmaw-d_sigmaw 1015 wdens=wdens-d_wdens 1016 awdens=awdens-d_awdens 1017 1018 !!-------------------------------------------------------- 1019 ELSEIF (iflag_wk_pop_dyn == 3) THEN 1020 IF (CPPKEY_IOPHYS_WK) THEN 1021 IF (phys_sub) THEN 1022 CALL iophys_ecrit('ptop',1,'ptop','Pa',ptop) 1023 CALL iophys_ecrit('sigmaw',1,'sigmaw','',sigmaw) 1024 CALL iophys_ecrit('asigmaw',1,'asigmaw','',asigmaw) 1025 CALL iophys_ecrit('wdens',1,'wdens','1/m2',wdens) 1026 CALL iophys_ecrit('awdens',1,'awdens','1/m2',awdens) 1027 CALL iophys_ecrit('rad_wk',1,'rad_wk','m',rad_wk) 1028 CALL iophys_ecrit('arad_wk',1,'arad_wk','m',arad_wk) 1029 CALL iophys_ecrit('irad_wk',1,'irad_wk','m',irad_wk) 1030 ENDIF 1031 END IF 1032 ! 1033 CALL wake_popdyn_3 ( klon, klev, phys_sub, wk_adv, dtimesub, wgen, & 1034 wdensmin, & 1035 sigmaw, asigmaw, wdens, awdens, & !! state variables 1036 gfl, agfl, cstar, cin, wape, & 1037 rad_wk, arad_wk, irad_wk, & 1038 d_sigmaw, d_asigmaw, d_wdens, d_awdens, & !! tendencies 1039 d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd, & 1040 d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd, & 1041 d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, & 1042 d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd ) 1043 sigmaw=sigmaw-d_sigmaw 1044 asigmaw=asigmaw-d_asigmaw 1045 wdens=wdens-d_wdens 1046 awdens=awdens-d_awdens 1047 1048 !!-------------------------------------------------------- 1049 ELSEIF (iflag_wk_pop_dyn == 0) THEN 1050 1051 ! cc nrlmd 1052 1053 DO i = 1, klon 1054 IF (wk_adv(i)) THEN 1055 1056 ! cc nrlmd Introduction du taux de mortalite des poches et 1057 ! test sur sigmaw_max=0.4 1058 ! cc d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub 1059 IF (sigmaw(i)>=sigmaw_max) THEN 1060 death_rate(i) = gfl(i)*cstar(i)/sigmaw(i) 1061 ELSE 1062 death_rate(i) = 0. 1063 END IF 1064 1065 d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* & 1066 dtimesub 1067 ! $ - nat_rate(i)*sigmaw(i)*dtimesub 1068 ! c print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i), 1069 ! c $ death_rate(i),ktop(i),kupper(i)', 1070 ! c $ d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i), 1071 ! c $ death_rate(i),ktop(i),kupper(i) 1072 1073 ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub 1074 ! sigmaw(i) =min(sigmaw(i),0.99) !!!!!!!! 1075 ! wdens = wdens0/(10.*sigmaw) 1076 ! sigmaw =max(sigmaw,sigd_con) 1077 ! sigmaw =max(sigmaw,sigmad) 1078 END IF 1079 END DO 1080 1081 ENDIF ! (iflag_wk_pop_dyn == 1) ... ELSEIF (iflag_wk_pop_dyn == 0) 1082 !!-------------------------------------------------------- 1083 !!-------------------------------------------------------- 1084 1085 IF (CPPKEY_IOPHYS_WK) THEN 1086 IF (phys_sub) THEN 1087 CALL iophys_ecrit('wdensa',1,'wdensa','m',wdens) 1088 CALL iophys_ecrit('awdensa',1,'awdensa','m',awdens) 1089 CALL iophys_ecrit('sigmawa',1,'sigmawa','m',sigmaw) 1090 CALL iophys_ecrit('asigmawa',1,'asigmawa','m',asigmaw) 1091 ENDIF 1092 END IF 1093 ! calcul de la difference de vitesse verticale poche - zone non perturbee 1094 ! IM 060208 differences par rapport au code initial; init. a 0 dp_deltomg 1095 ! IM 060208 et omg sur les niveaux de 1 a klev+1, alors que avant l'on definit 1096 ! IM 060208 au niveau k=1... 1097 !JYG 161013 Correction : maintenant omg est dimensionne a klev. 1098 DO k = 1, klev 1099 DO i = 1, klon 1100 IF (wk_adv(i)) THEN !!! nrlmd 1101 dp_deltomg(i, k) = 0. 1102 END IF 1103 END DO 1104 END DO 1105 DO k = 1, klev 1106 DO i = 1, klon 1107 IF (wk_adv(i)) THEN !!! nrlmd 1108 omg(i, k) = 0. 1109 END IF 1110 END DO 1111 END DO 1112 1113 DO i = 1, klon 1114 IF (wk_adv(i)) THEN 1115 z(i) = 0. 1116 omg(i, 1) = 0. 1117 dp_deltomg(i, 1) = -(gfl(i)*cstar(i))/(sigmaw(i)*(1-sigmaw(i))) 1118 END IF 1119 END DO 1120 1121 DO k = 2, klev 1122 DO i = 1, klon 1123 IF (wk_adv(i) .AND. k<=ktop(i)) THEN 1124 dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)*RG) 1125 z(i) = z(i) + dz(i) 1126 dp_deltomg(i, k) = dp_deltomg(i, 1) 1127 omg(i, k) = dp_deltomg(i, 1)*z(i) 1128 END IF 1129 END DO 1130 END DO 1131 1132 DO i = 1, klon 1133 IF (wk_adv(i)) THEN 1134 dztop(i) = -(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))*RG) 1135 ztop(i) = z(i) + dztop(i) 1136 omgtop(i) = dp_deltomg(i, 1)*ztop(i) 1137 END IF 1138 END DO 1139 1140 IF (prt_level>=10) THEN 1141 PRINT *, 'wake-4.2, omg(igout,k) ', (k,omg(igout,k), k=1,klev) 1142 PRINT *, 'wake-4.2, omgtop(igout), ptop(igout), ktop(igout) ', & 1143 omgtop(igout), ptop(igout), ktop(igout) 1144 ENDIF 1145 1146 ! ----------------- 1147 ! From m/s to Pa/s 1148 ! ----------------- 1149 1150 DO i = 1, klon 1151 IF (wk_adv(i)) THEN 1152 omgtop(i) = -rho(i, ktop(i))*RG*omgtop(i) 1153 !! LJYF dp_deltomg(i, 1) = omgtop(i)/(ptop(i)-ph(i,1)) 1154 dp_deltomg(i, 1) = omgtop(i)/min(ptop(i)-ph(i,1),-smallestreal) 1155 END IF 1156 END DO 1157 1158 DO k = 1, klev 1159 DO i = 1, klon 1160 IF (wk_adv(i) .AND. k<=ktop(i)) THEN 1161 omg(i, k) = -rho(i, k)*RG*omg(i, k) 1162 dp_deltomg(i, k) = dp_deltomg(i, 1) 1163 END IF 1164 END DO 1165 END DO 1166 1167 ! raccordement lineaire de omg de ptop a pupper 1168 1169 DO i = 1, klon 1170 IF (wk_adv(i) .AND. kupper(i)>ktop(i)) THEN 1171 IF ( iflag_wk_profile == 0 ) THEN 1172 omg(i, kupper(i)+1) =-RG*amdwn(i, kupper(i)+1)/sigmaw(i) + & 1173 RG*amup(i, kupper(i)+1)/(1.-sigmaw(i)) 1174 ELSE 1175 omg(i, kupper(i)+1) = 0. 1176 ENDIF 1177 dp_deltomg(i, kupper(i)) = (omgtop(i)-omg(i,kupper(i)+1))/ & 1178 (ptop(i)-pupper(i)) 1179 END IF 1180 END DO 1181 1182 ! c DO i=1,klon 1183 ! c print*,'Pente entre 0 et kupper (reference)' 1184 ! c $ ,omg(i,kupper(i)+1)/(pupper(i)-ph(i,1)) 1185 ! c print*,'Pente entre ktop et kupper' 1186 ! c $ ,(omg(i,kupper(i)+1)-omgtop(i))/(pupper(i)-ptop(i)) 1187 ! c ENDDO 1188 ! c 1189 DO k = 1, klev 1190 DO i = 1, klon 1191 IF (wk_adv(i) .AND. k>ktop(i) .AND. k<=kupper(i)) THEN 1192 dp_deltomg(i, k) = dp_deltomg(i, kupper(i)) 1193 omg(i, k) = omgtop(i) + (ph(i,k)-ptop(i))*dp_deltomg(i, kupper(i)) 1194 END IF 1195 END DO 1196 END DO 1197 !! print *,'omg(igout,k) ', (k,omg(igout,k),k=1,klev) 1198 ! cc nrlmd 1199 ! c DO i=1,klon 1200 ! c print*,'deltaw_ktop,deltaw_conv',omgtop(i),omg(i,kupper(i)+1) 1201 ! c END DO 1202 ! cc 1203 1204 1205 ! -- Compute wake average vertical velocity omgbw 1206 1207 1208 DO k = 1, klev 1209 DO i = 1, klon 1210 IF (wk_adv(i)) THEN 1211 omgbw(i, k) = omgb(i, k) + (1.-sigmaw(i))*omg(i, k) 1212 END IF 1213 END DO 1214 END DO 1215 ! -- and its vertical gradient dp_omgbw 1216 1217 DO k = 1, klev-1 1218 DO i = 1, klon 1219 IF (wk_adv(i)) THEN 1220 dp_omgbw(i, k) = (omgbw(i,k+1)-omgbw(i,k))/(ph(i,k+1)-ph(i,k)) 1221 END IF 1222 END DO 1223 END DO 1224 DO i = 1, klon 1225 IF (wk_adv(i)) THEN 1226 dp_omgbw(i, klev) = 0. 1227 END IF 1228 END DO 1229 1230 ! -- Upstream coefficients for omgb velocity 1231 ! -- (alpha_up(k) is the coefficient of the value at level k) 1232 ! -- (1-alpha_up(k) is the coefficient of the value at level k-1) 1233 DO k = 1, klev 1234 DO i = 1, klon 1235 IF (wk_adv(i)) THEN 1236 alpha_up(i, k) = 0. 1237 IF (omgb(i,k)>0.) alpha_up(i, k) = 1. 1238 END IF 1239 END DO 1240 END DO 1241 1242 ! Matrix expressing [The,deltatw] from [Th1,Th2] 1243 1244 DO i = 1, klon 1245 IF (wk_adv(i)) THEN 1246 rre1(i) = 1. - sigmaw(i) 1247 rre2(i) = sigmaw(i) 1248 END IF 1249 END DO 1250 rrd1 = -1. 1251 rrd2 = 1. 1252 1253 ! -- Get [Th1,Th2], dth and [q1,q2] 1254 1255 DO k = 1, klev 1256 DO i = 1, klon 1257 IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN 1258 dth(i, k) = deltatw(i, k)/ppi(i, k) 1259 th1(i, k) = thb(i, k) - sigmaw(i)*dth(i, k) ! undisturbed area 1260 th2(i, k) = thb(i, k) + (1.-sigmaw(i))*dth(i, k) ! wake 1261 q1(i, k) = qb(i, k) - sigmaw(i)*deltaqw(i, k) ! undisturbed area 1262 q2(i, k) = qb(i, k) + (1.-sigmaw(i))*deltaqw(i, k) ! wake 1263 END IF 1264 END DO 1265 END DO 1266 1267 DO i = 1, klon 1268 IF (wk_adv(i)) THEN !!! nrlmd 1269 d_th1(i, 1) = 0. 1270 d_th2(i, 1) = 0. 1271 d_dth(i, 1) = 0. 1272 d_q1(i, 1) = 0. 1273 d_q2(i, 1) = 0. 1274 d_dq(i, 1) = 0. 1275 END IF 1276 END DO 1277 1278 DO k = 2, klev 1279 DO i = 1, klon 1280 IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN 1281 d_th1(i, k) = th1(i, k-1) - th1(i, k) 1282 d_th2(i, k) = th2(i, k-1) - th2(i, k) 1283 d_dth(i, k) = dth(i, k-1) - dth(i, k) 1284 d_q1(i, k) = q1(i, k-1) - q1(i, k) 1285 d_q2(i, k) = q2(i, k-1) - q2(i, k) 1286 d_dq(i, k) = deltaqw(i, k-1) - deltaqw(i, k) 1287 END IF 1288 END DO 1289 END DO 1290 1291 DO i = 1, klon 1292 IF (wk_adv(i)) THEN 1293 omgbdth(i, 1) = 0. 1294 omgbdq(i, 1) = 0. 1295 END IF 1296 END DO 1297 1298 DO k = 2, klev 1299 DO i = 1, klon 1300 IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN ! loop on interfaces 1301 omgbdth(i, k) = omgb(i, k)*(dth(i,k-1)-dth(i,k)) 1302 omgbdq(i, k) = omgb(i, k)*(deltaqw(i,k-1)-deltaqw(i,k)) 1303 END IF 1304 END DO 1305 END DO 1306 1307 !! IF (prt_level>=10) THEN 1308 IF (prt_level>=10 .and. wk_adv(igout)) THEN 1309 PRINT *, 'wake-4.3, th1(igout,k) ', (k,th1(igout,k), k=1,kupper(igout)) 1310 PRINT *, 'wake-4.3, th2(igout,k) ', (k,th2(igout,k), k=1,kupper(igout)) 1311 PRINT *, 'wake-4.3, dth(igout,k) ', (k,dth(igout,k), k=1,kupper(igout)) 1312 PRINT *, 'wake-4.3, omgbdth(igout,k) ', (k,omgbdth(igout,k), k=1,kupper(igout)) 1313 ENDIF 1314 1315 ! ----------------------------------------------------------------- 1316 DO k = 1, klev-1 1317 DO i = 1, klon 1318 IF (wk_adv(i) .AND. k<=kupper(i)-1) THEN 1319 ! ----------------------------------------------------------------- 1320 1321 ! Compute redistribution (advective) term 1322 1323 d_deltatw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* & 1324 (rrd1*omg(i,k)*sigmaw(i)*d_th1(i,k) - & 1325 rrd2*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1)- & 1326 (1.-alpha_up(i,k))*omgbdth(i,k)- & 1327 alpha_up(i,k+1)*omgbdth(i,k+1))*ppi(i, k) 1328 ! print*,'d_d,k_ptop_provis(i)eltatw=', k, d_deltatw(i,k) 1329 1330 d_deltaqw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* & 1331 (rrd1*omg(i,k)*sigmaw(i)*d_q1(i,k)- & 1332 rrd2*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1)- & 1333 (1.-alpha_up(i,k))*omgbdq(i,k)- & 1334 alpha_up(i,k+1)*omgbdq(i,k+1)) 1335 ! print*,'d_deltaqw=', k, d_deltaqw(i,k) 1336 1337 ! and increment large scale tendencies 1338 1339 1340 1341 1342 ! C 1343 ! ----------------------------------------------------------------- 1344 d_tb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)- & 1345 rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1))/ & 1346 (ph(i,k)-ph(i,k+1)) & 1347 -sigmaw(i)*(1.-sigmaw(i))*dth(i,k)*(omg(i,k)-omg(i,k+1))/ & 1348 (ph(i,k)-ph(i,k+1)) )*ppi(i, k) 1349 1350 d_qb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)- & 1351 rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1))/ & 1352 (ph(i,k)-ph(i,k+1)) & 1353 -sigmaw(i)*(1.-sigmaw(i))*deltaqw(i,k)*(omg(i,k)-omg(i,k+1))/ & 1354 (ph(i,k)-ph(i,k+1)) ) 1355 ELSE IF (wk_adv(i) .AND. k==kupper(i)) THEN 1356 d_tb(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)/(ph(i,k)-ph(i,k+1)))*ppi(i, k) 1357 1358 d_qb(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)/(ph(i,k)-ph(i,k+1))) 1359 1360 END IF 1361 ! cc 1362 END DO 1363 END DO 1364 ! ------------------------------------------------------------------ 1365 1366 IF (prt_level>=10) THEN 1367 PRINT *, 'wake-4.3, d_deltatw(igout,k) ', (k,d_deltatw(igout,k), k=1,klev) 1368 PRINT *, 'wake-4.3, d_deltaqw(igout,k) ', (k,d_deltaqw(igout,k), k=1,klev) 1369 ENDIF 1370 1371 ! Increment state variables 1372 !jyg< 1373 IF (iflag_wk_pop_dyn >= 1) THEN 1374 DO k = 1, klev 1375 DO i = 1, klon 1376 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1377 detr(i,k) = - d_sig_death(i) - d_sig_col(i) 1378 entr(i,k) = d_sig_gen(i) 1379 ENDIF 1380 ENDDO 1381 ENDDO 1382 ELSE ! (iflag_wk_pop_dyn >= 1) 1383 DO k = 1, klev 1384 DO i = 1, klon 1385 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1386 detr(i, k) = 0. 1387 1388 entr(i, k) = 0. 1389 ENDIF 1390 ENDDO 1391 ENDDO 1392 ENDIF ! (iflag_wk_pop_dyn >= 1) 1393 1394 1395 1396 DO k = 1, klev 1397 DO i = 1, klon 1398 ! cc nrlmd IF( wk_adv(i) .AND. k .LE. kupper(i)-1) THEN 1399 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1400 ! cc 1401 1402 1403 1404 ! Coefficient de repartition 1405 1406 crep(i, k) = crep_sol*(ph(i,kupper(i))-ph(i,k))/ & 1407 (ph(i,kupper(i))-ph(i,1)) 1408 crep(i, k) = crep(i, k) + crep_upper*(ph(i,1)-ph(i,k))/ & 1409 (ph(i,1)-ph(i,kupper(i))) 1410 1411 1412 ! Reintroduce compensating subsidence term. 1413 1414 ! dtKE(k)=(dtdwn(k)*Crep(k))/sigmaw 1415 ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)) 1416 ! . /(1-sigmaw) 1417 ! dqKE(k)=(dqdwn(k)*Crep(k))/sigmaw 1418 ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)) 1419 ! . /(1-sigmaw) 1420 1421 ! dtKE(k)=(dtdwn(k)*Crep(k)+(1-Crep(k))*dta(k))/sigmaw 1422 ! dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)*Crep(k)) 1423 ! . /(1-sigmaw) 1424 ! dqKE(k)=(dqdwn(k)*Crep(k)+(1-Crep(k))*dqa(k))/sigmaw 1425 ! dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)*Crep(k)) 1426 ! . /(1-sigmaw) 1427 1428 dtke(i, k) = (dtdwn(i,k)/sigmaw(i)-dta(i,k)/(1.-sigmaw(i))) 1429 dqke(i, k) = (dqdwn(i,k)/sigmaw(i)-dqa(i,k)/(1.-sigmaw(i))) 1430 ! print*,'dtKE= ',dtKE(i,k),' dqKE= ',dqKE(i,k) 1431 1432 ! 1433 1434 ! cc nrlmd Prise en compte du taux de mortalite 1435 ! cc Definitions de entr, detr 1436 !jyg< 1437 !! detr(i, k) = 0. 1438 !! 1439 !! entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + & 1440 !! sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k) 1441 !! 1442 entr(i, k) = entr(i,k) + gfl(i)*cstar(i) + & 1443 sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k) 1444 !>jyg 1445 wkspread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i) 1446 1447 ! cc wkspread(i,k) = 1448 ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/ 1449 ! cc $ sigmaw(i) 1450 1451 1452 ! ajout d'un effet onde de gravite -Tgw(k)*deltatw(k) 03/02/06 YU 1453 ! Jingmei 1454 1455 ! write(lunout,*)'wake.F ',i,k, dtimesub,d_deltat_gw(i,k), 1456 ! & Tgw(i,k),deltatw(i,k) 1457 d_deltat_gw(i, k) = d_deltat_gw(i, k) - tgw(i, k)*deltatw(i, k)* & 1458 dtimesub 1459 ! write(lunout,*)'wake.F ',i,k, dtimesub,d_deltatw(i,k) 1460 ff(i) = d_deltatw(i, k)/dtimesub 1461 1462 ! Sans GW 1463 1464 ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-wkspread(k)*deltatw(k)) 1465 1466 ! GW formule 1 1467 1468 ! deltatw(k) = deltatw(k)+dtimesub* 1469 ! $ (ff+dtKE(k) - wkspread(k)*deltatw(k)-Tgw(k)*deltatw(k)) 1470 1471 ! GW formule 2 1472 1473 IF (dtimesub*tgw(i,k)<1.E-10) THEN 1474 d_deltatw(i, k) = dtimesub*(ff(i)+dtke(i,k) - & 1475 entr(i,k)*deltatw(i,k)/sigmaw(i) - & 1476 (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - & ! cc 1477 tgw(i,k)*deltatw(i,k) ) 1478 ELSE 1479 d_deltatw(i, k) = 1/tgw(i, k)*(1-exp(-dtimesub*tgw(i,k)))* & 1480 (ff(i)+dtke(i,k) - & 1481 entr(i,k)*deltatw(i,k)/sigmaw(i) - & 1482 (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - & 1483 tgw(i,k)*deltatw(i,k) ) 1484 END IF 1485 1486 dth(i, k) = deltatw(i, k)/ppi(i, k) 1487 1488 gg(i) = d_deltaqw(i, k)/dtimesub 1489 1490 d_deltaqw(i, k) = dtimesub*(gg(i)+dqke(i,k) - & 1491 entr(i,k)*deltaqw(i,k)/sigmaw(i) - & 1492 (death_rate(i)*sigmaw(i)+detr(i,k))*deltaqw(i,k)/(1.-sigmaw(i))) 1493 ! cc 1494 1495 ! cc nrlmd 1496 ! cc d_deltatw2(i,k)=d_deltatw2(i,k)+d_deltatw(i,k) 1497 ! cc d_deltaqw2(i,k)=d_deltaqw2(i,k)+d_deltaqw(i,k) 1498 ! cc 1499 END IF 1500 END DO 1501 END DO 1502 1503 1504 ! Scale tendencies so that water vapour remains positive in w and x. 1505 1506 CALL wake_vec_modulation(klon, klev, wk_adv, epsilon_loc, qb, d_qb, deltaqw, & 1507 d_deltaqw, sigmaw, d_sigmaw, alpha) 1508 ! 1509 ! Alpha_tot = Product of all the alpha's 1510 DO i = 1, klon 1511 IF (wk_adv(i)) THEN 1512 alpha_tot(i) = alpha_tot(i)*alpha(i) 1513 END IF 1514 END DO 1515 1516 ! cc nrlmd 1517 ! c print*,'alpha' 1518 ! c do i=1,klon 1519 ! c print*,alpha(i) 1520 ! c end do 1521 ! cc 1522 DO k = 1, klev 1523 DO i = 1, klon 1524 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1525 d_tb(i, k) = alpha(i)*d_tb(i, k) 1526 d_qb(i, k) = alpha(i)*d_qb(i, k) 1527 d_deltatw(i, k) = alpha(i)*d_deltatw(i, k) 1528 d_deltaqw(i, k) = alpha(i)*d_deltaqw(i, k) 1529 d_deltat_gw(i, k) = alpha(i)*d_deltat_gw(i, k) 1530 END IF 1531 END DO 1532 END DO 1533 DO i = 1, klon 1534 IF (wk_adv(i)) THEN 1535 d_sigmaw(i) = alpha(i)*d_sigmaw(i) 1536 END IF 1537 END DO 1538 1539 ! Update large scale variables and wake variables 1540 ! IM 060208 manque DO i + remplace DO k=1,kupper(i) 1541 ! IM 060208 DO k = 1,kupper(i) 1542 DO k = 1, klev 1543 DO i = 1, klon 1544 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1545 dtls(i, k) = dtls(i, k) + d_tb(i, k) 1546 dqls(i, k) = dqls(i, k) + d_qb(i, k) 1547 ! cc nrlmd 1548 d_deltatw2(i, k) = d_deltatw2(i, k) + d_deltatw(i, k) 1549 d_deltaqw2(i, k) = d_deltaqw2(i, k) + d_deltaqw(i, k) 1550 ! cc 1551 END IF 1552 END DO 1553 END DO 1554 DO k = 1, klev 1555 DO i = 1, klon 1556 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1557 tb(i, k) = tb0(i, k) + dtls(i, k) 1558 qb(i, k) = qb0(i, k) + dqls(i, k) 1559 thb(i, k) = tb(i, k)/ppi(i, k) 1560 deltatw(i, k) = deltatw(i, k) + d_deltatw(i, k) 1561 deltaqw(i, k) = deltaqw(i, k) + d_deltaqw(i, k) 1562 dth(i, k) = deltatw(i, k)/ppi(i, k) 1563 ! c print*,'k,qx,qw',k,qb(i,k)-sigmaw(i)*deltaqw(i,k) 1564 ! c $ ,qb(i,k)+(1-sigmaw(i))*deltaqw(i,k) 1565 END IF 1566 END DO 1567 END DO 1568 ! 1569 DO i = 1, klon 1570 IF (wk_adv(i)) THEN 1571 sigmaw(i) = sigmaw(i) + d_sigmaw(i) 1572 d_sigmaw2(i) = d_sigmaw2(i) + d_sigmaw(i) 1573 END IF 1574 END DO 1575 !jyg< 1576 IF (iflag_wk_pop_dyn >= 1) THEN 1577 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! sigmaw !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1578 ! Cumulatives 1579 DO i = 1, klon 1580 IF (wk_adv(i)) THEN 1581 d_sig_gen2(i) = d_sig_gen2(i) + d_sig_gen(i) 1582 d_sig_death2(i) = d_sig_death2(i) + d_sig_death(i) 1583 d_sig_col2(i) = d_sig_col2(i) + d_sig_col(i) 1584 d_sig_spread2(i)= d_sig_spread2(i)+ d_sig_spread(i) 1585 d_sig_bnd2(i) = d_sig_bnd2(i) + d_sig_bnd(i) 1586 END IF 1587 END DO 1588 ! Bounds 1589 DO i = 1, klon 1590 IF (wk_adv(i)) THEN 1591 sigmaw_targ = max(sigmaw(i),sigmad) 1592 d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i) 1593 d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 1594 sigmaw(i) = sigmaw_targ 1595 END IF 1596 END DO 1597 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! wdens !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1598 ! Cumulatives 1599 DO i = 1, klon 1600 IF (wk_adv(i)) THEN 1601 wdens(i) = wdens(i) + d_wdens(i) 1602 d_wdens2(i) = d_wdens2(i) + d_wdens(i) 1603 d_dens_gen2(i) = d_dens_gen2(i) + d_dens_gen(i) 1604 d_dens_death2(i) = d_dens_death2(i) + d_dens_death(i) 1605 d_dens_col2(i) = d_dens_col2(i) + d_dens_col(i) 1606 d_dens_bnd2(i) = d_dens_bnd2(i) + d_dens_bnd(i) 1607 END IF 1608 END DO 1609 ! Bounds 1610 DO i = 1, klon 1611 IF (wk_adv(i)) THEN 1612 wdens_targ = max(wdens(i),wdensmin) 1613 d_dens_bnd2(i) = d_dens_bnd2(i) + wdens_targ - wdens(i) 1614 d_wdens2(i) = d_wdens2(i) + wdens_targ - wdens(i) 1615 wdens(i) = wdens_targ 1616 END IF 1617 END DO 1618 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! awdens !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1619 ! Cumulatives 1620 DO i = 1, klon 1621 IF (wk_adv(i)) THEN 1622 awdens(i) = awdens(i) + d_awdens(i) 1623 d_awdens2(i) = d_awdens2(i) + d_awdens(i) 1624 END IF 1625 END DO 1626 ! Bounds 1627 DO i = 1, klon 1628 IF (wk_adv(i)) THEN 1629 wdens_targ = min( max(awdens(i),0.), wdens(i) ) 1630 d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i) 1631 d_awdens2(i) = d_awdens2(i) + wdens_targ - awdens(i) 1632 awdens(i) = wdens_targ 1633 END IF 1634 END DO 1635 ! 1636 IF (iflag_wk_pop_dyn >= 2) THEN 1637 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! awdens again for iflag_wk_pop_dyn >= 2!!!!!! 1638 ! Cumulatives 1639 DO i = 1, klon 1640 IF (wk_adv(i)) THEN 1641 d_adens_death2(i) = d_adens_death2(i) + d_adens_death(i) 1642 d_adens_icol2(i) = d_adens_icol2(i) + d_adens_icol(i) 1643 d_adens_acol2(i) = d_adens_acol2(i) + d_adens_acol(i) 1644 d_adens_bnd2(i) = d_adens_bnd2(i) + d_adens_bnd(i) 1645 END IF 1646 END DO 1647 ! Bounds 1648 DO i = 1, klon 1649 IF (wk_adv(i)) THEN 1650 wdens_targ = min( max(awdens(i),0.), wdens(i) ) 1651 d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i) 1652 awdens(i) = wdens_targ 1653 END IF 1654 END DO 1655 ! 1656 IF (iflag_wk_pop_dyn == 3) THEN 1657 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! asigmaw for iflag_wk_pop_dyn = 3!!!!!! 1658 ! Cumulatives 1659 DO i = 1, klon 1660 IF (wk_adv(i)) THEN 1661 asigmaw(i) = asigmaw(i) + d_asigmaw(i) 1662 d_asigmaw2(i) = d_asigmaw2(i) + d_asigmaw(i) 1663 d_asig_death2(i) = d_asig_death2(i) + d_asig_death(i) 1664 d_asig_spread2(i) = d_asig_spread2(i) + d_asig_spread(i) 1665 d_asig_iicol2(i) = d_asig_iicol2(i) + d_asig_iicol(i) 1666 d_asig_aicol2(i) = d_asig_aicol2(i) + d_asig_aicol(i) 1667 d_asig_bnd2(i) = d_asig_bnd2(i) + d_asig_bnd(i) 1668 END IF 1669 END DO 1670 ! Bounds 1671 DO i = 1, klon 1672 IF (wk_adv(i)) THEN 1673 ! asigmaw lower bound set to sigmad/2 in order to allow asigmaw values lower than sigmad. 1674 !! sigmaw_targ = min(max(asigmaw(i),sigmad),sigmaw(i)) 1675 sigmaw_targ = min(max(asigmaw(i),sigmad/2.),sigmaw(i)) 1676 d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i) 1677 d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i) 1678 asigmaw(i) = sigmaw_targ 1679 END IF 1680 END DO 1681 1682 IF (CPPKEY_IOPHYS_WK) THEN 1683 IF (phys_sub) THEN 1684 CALL iophys_ecrit('wdensb',1,'wdensb','m',wdens) 1685 CALL iophys_ecrit('awdensb',1,'awdensb','m',awdens) 1686 CALL iophys_ecrit('sigmawb',1,'sigmawb','m',sigmaw) 1687 CALL iophys_ecrit('asigmawb',1,'asigmawb','m',asigmaw) 1688 ! 1689 call iophys_ecrit('d_wdens2',1,'d_wdens2','',d_wdens2) 1690 call iophys_ecrit('d_dens_gen2',1,'d_dens_gen2','',d_dens_gen2) 1691 call iophys_ecrit('d_dens_death2',1,'d_dens_death2','',d_dens_death2) 1692 call iophys_ecrit('d_dens_col2',1,'d_dens_col2','',d_dens_col2) 1693 call iophys_ecrit('d_dens_bnd2',1,'d_dens_bnd2','',d_dens_bnd2) 1694 ! 1695 call iophys_ecrit('d_awdens2',1,'d_awdens2','',d_awdens2) 1696 call iophys_ecrit('d_adens_death2',1,'d_adens_death2','',d_adens_death2) 1697 call iophys_ecrit('d_adens_icol2',1,'d_adens_icol2','',d_adens_icol2) 1698 call iophys_ecrit('d_adens_acol2',1,'d_adens_acol2','',d_adens_acol2) 1699 call iophys_ecrit('d_adens_bnd2',1,'d_adens_bnd2','',d_adens_bnd2) 1700 ! 1701 CALL iophys_ecrit('d_sigmaw2',1,'d_sigmaw2','',d_sigmaw2) 1702 CALL iophys_ecrit('d_sig_gen2',1,'d_sig_gen2','m',d_sig_gen2) 1703 CALL iophys_ecrit('d_sig_spread2',1,'d_sig_spread2','',d_sig_spread2) 1704 CALL iophys_ecrit('d_sig_col2',1,'d_sig_col2','',d_sig_col2) 1705 CALL iophys_ecrit('d_sig_death2',1,'d_sig_death2','',d_sig_death2) 1706 CALL iophys_ecrit('d_sig_bnd2',1,'d_sig_bnd2','',d_sig_bnd2) 1707 ! 1708 CALL iophys_ecrit('d_asigmaw2',1,'d_asigmaw2','',d_asigmaw2) 1709 CALL iophys_ecrit('d_asig_spread2',1,'d_asig_spread2','m',d_asig_spread2) 1710 CALL iophys_ecrit('d_asig_aicol2',1,'d_asig_aicol2','m',d_asig_aicol2) 1711 CALL iophys_ecrit('d_asig_iicol2',1,'d_asig_iicol2','m',d_asig_iicol2) 1712 CALL iophys_ecrit('d_asig_death2',1,'d_asig_death2','m',d_asig_death2) 1713 CALL iophys_ecrit('d_asig_bnd2',1,'d_asig_bnd2','m',d_asig_bnd2) 1714 ENDIF 1715 END IF 1716 ENDIF ! (iflag_wk_pop_dyn == 3) 1717 ENDIF ! (iflag_wk_pop_dyn >= 2) 1718 ENDIF ! (iflag_wk_pop_dyn >= 1) 1719 1720 1721 1722 Call pkupper (klon, klev, ptop, ph, p, pupper, kupper, & 1723 dth, hw, rho, delta_t_min, & 1724 ktop, wk_adv, h_zzz, ptop1, ktop1) 1725 !! print'("pkupper APPEL ",7i6)',isubstep,int(ptop/100.),int(ptop1/100.),int(pupper/100.),ktop,ktop1,kupper 1726 1727 ! 5/ Set deltatw & deltaqw to 0 above kupper 1728 1729 DO k = 1, klev 1730 DO i = 1, klon 1731 IF (wk_adv(i) .AND. k>=kupper(i)) THEN 1732 deltatw(i, k) = 0. 1733 deltaqw(i, k) = 0. 1734 d_deltatw2(i,k) = -deltatw0(i,k) 1735 d_deltaqw2(i,k) = -deltaqw0(i,k) 1736 END IF 1737 END DO 1738 END DO 1739 1740 1741 ! -------------Cstar computation--------------------------------- 1742 DO i = 1, klon 1743 IF (wk_adv(i)) THEN !!! nrlmd 1744 sum_thx(i) = 0. 1745 sum_tx(i) = 0. 1746 sum_qx(i) = 0. 1747 sum_thvx(i) = 0. 1748 sum_dth(i) = 0. 1749 sum_dq(i) = 0. 1750 sum_dtdwn(i) = 0. 1751 sum_dqdwn(i) = 0. 1752 1753 av_thx(i) = 0. 1754 av_tx(i) = 0. 1755 av_qx(i) = 0. 1756 av_thvx(i) = 0. 1757 av_dth(i) = 0. 1758 av_dq(i) = 0. 1759 av_dtdwn(i) = 0. 1760 av_dqdwn(i) = 0. 1761 END IF 1762 END DO 1763 1764 ! Integrals (and wake top level number) 1765 ! -------------------------------------- 1766 1767 ! Initialize sum_thvx to 1st level virt. pot. temp. 1768 1769 DO i = 1, klon 1770 IF (wk_adv(i)) THEN !!! nrlmd 1771 z(i) = 1. 1772 dz(i) = 1. 1773 sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i) 1774 sum_dth(i) = 0. 1775 END IF 1776 END DO 1777 1778 DO k = 1, klev 1779 DO i = 1, klon 1780 IF (wk_adv(i)) THEN !!! nrlmd 1781 dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG) 1782 IF (dz(i)>0) THEN 1783 z(i) = z(i) + dz(i) 1784 sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i) 1785 sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i) 1786 sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i) 1787 sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i) 1788 sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i) 1789 sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i) 1790 sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i) 1791 sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i) 1792 END IF 1793 END IF 1794 END DO 1795 END DO 1796 1797 DO i = 1, klon 1798 IF (wk_adv(i)) THEN !!! nrlmd 1799 hw0(i) = z(i) 1800 END IF 1801 END DO 1802 1803 1804 ! - WAPE and mean forcing computation 1805 ! --------------------------------------- 1806 1807 ! --------------------------------------- 1808 1809 ! Means 1810 1811 DO i = 1, klon 1812 IF (wk_adv(i)) THEN !!! nrlmd 1813 av_thx(i) = sum_thx(i)/hw0(i) 1814 av_tx(i) = sum_tx(i)/hw0(i) 1815 av_qx(i) = sum_qx(i)/hw0(i) 1816 av_thvx(i) = sum_thvx(i)/hw0(i) 1817 av_dth(i) = sum_dth(i)/hw0(i) 1818 av_dq(i) = sum_dq(i)/hw0(i) 1819 av_dtdwn(i) = sum_dtdwn(i)/hw0(i) 1820 av_dqdwn(i) = sum_dqdwn(i)/hw0(i) 1821 1822 wape(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thx(i)*av_dq(i) + & 1823 av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i) 1824 END IF 1825 END DO 1826 1827 1828 ! Filter out bad wakes 1829 1830 DO k = 1, klev 1831 DO i = 1, klon 1832 IF (wk_adv(i)) THEN !!! nrlmd 1833 IF (wape(i)<0.) THEN 1834 deltatw(i, k) = 0. 1835 deltaqw(i, k) = 0. 1836 dth(i, k) = 0. 1837 d_deltatw2(i,k) = -deltatw0(i,k) 1838 d_deltaqw2(i,k) = -deltaqw0(i,k) 1839 END IF 1840 END IF 1841 END DO 1842 END DO 1843 1844 DO i = 1, klon 1845 IF (wk_adv(i)) THEN !!! nrlmd 1846 IF (wape(i)<0.) THEN 1847 wape(i) = 0. 1848 cstar(i) = 0. 1849 hw(i) = hwmin 1850 !jyg< 1851 !! sigmaw(i) = max(sigmad, sigd_con(i)) 1852 sigmaw_targ = max(sigmad, sigd_con(i)) 1853 d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i) 1854 d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 1855 sigmaw(i) = sigmaw_targ 1856 ! 1857 d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i) 1858 d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i) 1859 asigmaw(i) = sigmaw_targ 1860 !>jyg 1861 fip(i) = 0. 1862 gwake(i) = .FALSE. 1863 ELSE 1864 cstar(i) = stark*sqrt(2.*wape(i)) 1865 gwake(i) = .TRUE. 1866 END IF 1867 END IF 1868 END DO 1869 ! 1870 ! ------------------------------------------------------------------------ 1871 ! 1872 END DO ! isubstep end sub-timestep loop 1873 ! 1874 ! ------------------------------------------------------------------------ 1875 ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1876 ! ------------------------------------------------------------------------ 1877 ! 1878 1879 IF (CPPKEY_IOPHYS_WK) THEN 1880 IF (.not.phys_sub) CALL iophys_ecrit('wape_b',1,'wape_b','J/kg',wape) 1881 END IF 1882 IF (prt_level>=10) THEN 1883 PRINT *, 'wake-5, sigmaw(igout), cstar(igout), wape(igout), ptop(igout) ', & 1884 sigmaw(igout), cstar(igout), wape(igout), ptop(igout) 1885 ENDIF 1886 1887 1888 ! ---------------------------------------------------------- 1889 ! Determine wake final state; recompute wape, cstar, ktop; 1890 ! filter out bad wakes. 1891 ! ---------------------------------------------------------- 1892 1893 ! 2.1 - Undisturbed area and Wake integrals 1894 ! --------------------------------------------------------- 1895 1896 DO i = 1, klon 1897 ! cc nrlmd if (wk_adv(i)) then !!! nrlmd 1898 IF (ok_qx_qw(i)) THEN 1899 ! cc 1900 z(i) = 0. 1901 sum_thx(i) = 0. 1902 sum_tx(i) = 0. 1903 sum_qx(i) = 0. 1904 sum_thvx(i) = 0. 1905 sum_dth(i) = 0. 1906 sum_half_dth(i) = 0. 1907 sum_dq(i) = 0. 1908 sum_dtdwn(i) = 0. 1909 sum_dqdwn(i) = 0. 1910 1911 av_thx(i) = 0. 1912 av_tx(i) = 0. 1913 av_qx(i) = 0. 1914 av_thvx(i) = 0. 1915 av_dth(i) = 0. 1916 av_dq(i) = 0. 1917 av_dtdwn(i) = 0. 1918 av_dqdwn(i) = 0. 1919 1920 dthmin(i) = -delta_t_min 1921 END IF 1922 END DO 1923 ! Potential temperatures and humidity 1924 ! ---------------------------------------------------------- 1925 1926 DO k = 1, klev 1927 DO i = 1, klon 1928 ! cc nrlmd IF ( wk_adv(i)) THEN 1929 IF (ok_qx_qw(i)) THEN 1930 ! cc 1931 rho(i, k) = p(i, k)/(RD*tb(i,k)) 1932 IF (k==1) THEN 1933 rhoh(i, k) = ph(i, k)/(RD*tb(i,k)) 1934 zhh(i, k) = 0 1935 ELSE 1936 rhoh(i, k) = ph(i, k)*2./(RD*(tb(i,k)+tb(i,k-1))) 1937 zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1) 1938 END IF 1939 thb(i, k) = tb(i, k)/ppi(i, k) 1940 thx(i, k) = (tb(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k) 1941 tx(i, k) = tb(i, k) - deltatw(i, k)*sigmaw(i) 1942 qx(i, k) = qb(i, k) - deltaqw(i, k)*sigmaw(i) 1943 dth(i, k) = deltatw(i, k)/ppi(i, k) 1944 END IF 1945 END DO 1946 END DO 1947 1948 ! Integrals (and wake top level number) 1949 ! ----------------------------------------------------------- 1950 1951 ! Initialize sum_thvx to 1st level virt. pot. temp. 1952 1953 DO i = 1, klon 1954 ! cc nrlmd IF ( wk_adv(i)) THEN 1955 IF (ok_qx_qw(i)) THEN 1956 ! cc 1957 z(i) = 1. 1958 dz(i) = 1. 1959 dz_half(i) = 1. 1960 sum_thvx(i) = thx(i, 1)*(1.+epsim1*qx(i,1))*dz(i) 1961 sum_dth(i) = 0. 1962 END IF 1963 END DO 1964 1965 DO k = 1, klev 1966 DO i = 1, klon 1967 ! cc nrlmd IF ( wk_adv(i)) THEN 1968 IF (ok_qx_qw(i)) THEN 1969 ! cc 1970 dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG) 1971 dz_half(i) = -(amax1(ph(i,k+1),0.5*(ptop(i)+ph(i,1)))-ph(i,k))/(rho(i,k)*RG) 1972 IF (dz(i)>0) THEN 1973 z(i) = z(i) + dz(i) 1974 sum_thx(i) = sum_thx(i) + thx(i, k)*dz(i) 1975 sum_tx(i) = sum_tx(i) + tx(i, k)*dz(i) 1976 sum_qx(i) = sum_qx(i) + qx(i, k)*dz(i) 1977 sum_thvx(i) = sum_thvx(i) + thx(i, k)*(1.+epsim1*qx(i,k))*dz(i) 1978 sum_dth(i) = sum_dth(i) + dth(i, k)*dz(i) 1979 sum_dq(i) = sum_dq(i) + deltaqw(i, k)*dz(i) 1980 sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i) 1981 sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i) 1982 ! 1983 dthmin(i) = min(dthmin(i), dth(i,k)) 1984 END IF 1985 IF (dz_half(i)>0) THEN 1986 sum_half_dth(i) = sum_half_dth(i) + dth(i, k)*dz_half(i) 1987 END IF 1988 END IF 1989 END DO 1990 END DO 1991 1992 DO i = 1, klon 1993 ! cc nrlmd IF ( wk_adv(i)) THEN 1994 IF (ok_qx_qw(i)) THEN 1995 ! cc 1996 hw0(i) = z(i) 1997 END IF 1998 END DO 1999 2000 ! - WAPE and mean forcing computation 2001 ! ------------------------------------------------------------- 2002 2003 ! Means 2004 2005 DO i = 1, klon 2006 ! cc nrlmd IF ( wk_adv(i)) THEN 2007 IF (ok_qx_qw(i)) THEN 2008 ! cc 2009 av_thx(i) = sum_thx(i)/hw0(i) 2010 av_tx(i) = sum_tx(i)/hw0(i) 2011 av_qx(i) = sum_qx(i)/hw0(i) 2012 av_thvx(i) = sum_thvx(i)/hw0(i) 2013 av_dth(i) = sum_dth(i)/hw0(i) 2014 av_dq(i) = sum_dq(i)/hw0(i) 2015 av_dtdwn(i) = sum_dtdwn(i)/hw0(i) 2016 av_dqdwn(i) = sum_dqdwn(i)/hw0(i) 2017 2018 wape2(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thx(i)*av_dq(i) + & 2019 av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i) 2020 END IF 2021 END DO 2022 IF (CPPKEY_IOPHYS_WK) THEN 2023 IF (.not.phys_sub) CALL iophys_ecrit('wape2_a',1,'wape2_a','J/kg',wape2) 2024 END IF 2025 2026 2027 ! Prognostic variable update 2028 ! ------------------------------------------------------------ 2029 2030 ! Filter out bad wakes 2031 2032 IF (iflag_wk_check_trgl>=1) THEN 2033 ! Check triangular shape of dth profile 2034 DO i = 1, klon 2035 IF (ok_qx_qw(i)) THEN 2036 !! print *,'wake, hw0(i), dthmin(i) ', hw0(i), dthmin(i) 2037 !! print *,'wake, 2.*sum_dth(i)/(hw0(i)*dthmin(i)) ', & 2038 !! 2.*sum_dth(i)/(hw0(i)*dthmin(i)) 2039 !! print *,'wake, sum_half_dth(i), sum_dth(i) ', & 2040 !! sum_half_dth(i), sum_dth(i) 2041 IF ((hw0(i) < 1.) .or. (dthmin(i) >= -delta_t_min) ) THEN 2042 wape2(i) = -1. 2043 !! print *,'wake, rej 1' 2044 ELSE IF (iflag_wk_check_trgl==1.AND.abs(2.*sum_dth(i)/(hw0(i)*dthmin(i)) - 1.) > 0.5) THEN 2045 wape2(i) = -1. 2046 !! print *,'wake, rej 2' 2047 ELSE IF (abs(sum_half_dth(i)) < 0.5*abs(sum_dth(i)) ) THEN 2048 wape2(i) = -1. 2049 !! print *,'wake, rej 3' 2050 END IF 2051 END IF 2052 END DO 2053 END IF 2054 IF (CPPKEY_IOPHYS_WK) THEN 2055 IF (.not.phys_sub) CALL iophys_ecrit('wape2_b',1,'wape2_b','J/kg',wape2) 2056 END IF 2057 2058 2059 DO k = 1, klev 2060 DO i = 1, klon 2061 ! cc nrlmd IF ( wk_adv(i) .AND. wape2(i) .LT. 0.) THEN 2062 IF (ok_qx_qw(i) .AND. wape2(i)<0.) THEN 2063 ! cc 2064 deltatw(i, k) = 0. 2065 deltaqw(i, k) = 0. 2066 dth(i, k) = 0. 2067 d_deltatw2(i,k) = -deltatw0(i,k) 2068 d_deltaqw2(i,k) = -deltaqw0(i,k) 2069 END IF 2070 END DO 2071 END DO 2072 2073 2074 DO i = 1, klon 2075 ! cc nrlmd IF ( wk_adv(i)) THEN 2076 IF (ok_qx_qw(i)) THEN 2077 ! cc 2078 IF (wape2(i)<0.) THEN 2079 wape2(i) = 0. 2080 cstar2(i) = 0. 2081 hw(i) = hwmin 2082 !jyg< 2083 !! sigmaw(i) = amax1(sigmad, sigd_con(i)) 2084 sigmaw_targ = max(sigmad, sigd_con(i)) 2085 d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i) 2086 d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 2087 sigmaw(i) = sigmaw_targ 2088 ! 2089 d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i) 2090 d_asigmaw2(i) = d_asigmaw2(i) + sigmaw_targ - asigmaw(i) 2091 asigmaw(i) = sigmaw_targ 2092 !>jyg 2093 fip(i) = 0. 2094 gwake(i) = .FALSE. 2095 ELSE 2096 IF (prt_level>=10) PRINT *, 'wape2>0' 2097 cstar2(i) = stark*sqrt(2.*wape2(i)) 2098 gwake(i) = .TRUE. 2099 END IF 2100 IF (CPPKEY_IOPHYS_WK) THEN 2101 IF (.not.phys_sub) CALL iophys_ecrit('cstar2',1,'cstar2','J/kg',cstar2) 2102 END IF 2103 END IF ! (ok_qx_qw(i)) 2104 END DO 2105 2106 DO i = 1, klon 2107 ! cc nrlmd IF ( wk_adv(i)) THEN 2108 IF (ok_qx_qw(i)) THEN 2109 ! cc 2110 ktopw(i) = ktop(i) 2111 END IF 2112 END DO 2113 2114 DO i = 1, klon 2115 ! cc nrlmd IF ( wk_adv(i)) THEN 2116 IF (ok_qx_qw(i)) THEN 2117 ! cc 2118 IF (ktopw(i)>0 .AND. gwake(i)) THEN 2119 2120 ! jyg1 Utilisation d'un h_efficace constant ( ~ feeding layer) 2121 ! cc heff = 600. 2122 ! Utilisation de la hauteur hw 2123 ! c heff = 0.7*hw 2124 heff(i) = hw(i) 2125 2126 fip(i) = 0.5*rho(i, ktopw(i))*cstar2(i)**3*heff(i)*2* & 2127 sqrt(sigmaw(i)*wdens(i)*3.14) 2128 fip(i) = alpk*fip(i) 2129 ! jyg2 2130 ELSE 2131 fip(i) = 0. 2132 END IF 2133 END IF 2134 END DO 2135 IF (iflag_wk_pop_dyn >= 3) THEN 2136 IF (CPPKEY_IOPHYS_WK) THEN 2137 IF (.not.phys_sub) THEN 2138 CALL iophys_ecrit('fip',1,'fip','J/kg',fip) 2139 CALL iophys_ecrit('hw',1,'hw','J/kg',hw) 2140 CALL iophys_ecrit('ptop',1,'ptop','J/kg',ptop) 2141 CALL iophys_ecrit('wdens',1,'wdens','J/kg',wdens) 2142 CALL iophys_ecrit('awdens',1,'awdens','m',awdens) 2143 CALL iophys_ecrit('sigmaw',1,'sigmaw','m',sigmaw) 2144 CALL iophys_ecrit('asigmaw',1,'asigmaw','m',asigmaw) 2145 ! 2146 CALL iophys_ecrit('rad_wk',1,'rad_wk','J/kg',rad_wk) 2147 CALL iophys_ecrit('arad_wk',1,'arad_wk','J/kg',arad_wk) 2148 CALL iophys_ecrit('irad_wk',1,'irad_wk','J/kg',irad_wk) 2149 ! 2150 call iophys_ecrit('d_wdens2',1,'d_wdens2','',d_wdens2) 2151 call iophys_ecrit('d_dens_gen2',1,'d_dens_gen2','',d_dens_gen2) 2152 call iophys_ecrit('d_dens_death2',1,'d_dens_death2','',d_dens_death2) 2153 call iophys_ecrit('d_dens_col2',1,'d_dens_col2','',d_dens_col2) 2154 call iophys_ecrit('d_dens_bnd2',1,'d_dens_bnd2','',d_dens_bnd2) 2155 ! 2156 call iophys_ecrit('d_awdens2',1,'d_awdens2','',d_awdens2) 2157 call iophys_ecrit('d_adens_death2',1,'d_adens_death2','',d_adens_death2) 2158 call iophys_ecrit('d_adens_icol2',1,'d_adens_icol2','',d_adens_icol2) 2159 call iophys_ecrit('d_adens_acol2',1,'d_adens_acol2','',d_adens_acol2) 2160 call iophys_ecrit('d_adens_bnd2',1,'d_adens_bnd2','',d_adens_bnd2) 2161 ! 2162 CALL iophys_ecrit('d_sigmaw2',1,'d_sigmaw2','',d_sigmaw2) 2163 CALL iophys_ecrit('d_sig_gen2',1,'d_sig_gen2','m',d_sig_gen2) 2164 CALL iophys_ecrit('d_sig_spread2',1,'d_sig_spread2','',d_sig_spread2) 2165 CALL iophys_ecrit('d_sig_col2',1,'d_sig_col2','',d_sig_col2) 2166 CALL iophys_ecrit('d_sig_death2',1,'d_sig_death2','',d_sig_death2) 2167 CALL iophys_ecrit('d_sig_bnd2',1,'d_sig_bnd2','',d_sig_bnd2) 2168 ! 2169 CALL iophys_ecrit('d_asigmaw2',1,'d_asigmaw2','',d_asigmaw2) 2170 CALL iophys_ecrit('d_asig_spread2',1,'d_asig_spread2','m',d_asig_spread2) 2171 CALL iophys_ecrit('d_asig_aicol2',1,'d_asig_aicol2','m',d_asig_aicol2) 2172 CALL iophys_ecrit('d_asig_iicol2',1,'d_asig_iicol2','m',d_asig_iicol2) 2173 CALL iophys_ecrit('d_asig_death2',1,'d_asig_death2','m',d_asig_death2) 2174 CALL iophys_ecrit('d_asig_bnd2',1,'d_asig_bnd2','m',d_asig_bnd2) 2175 ENDIF ! (.not.phys_sub) 2176 END IF 2177 ENDIF ! (iflag_wk_pop_dyn >= 3) 2178 ! Limitation de sigmaw 2179 2180 ! cc nrlmd 2181 ! DO i=1,klon 2182 ! IF (OK_qx_qw(i)) THEN 2183 ! IF (sigmaw(i).GE.sigmaw_max) sigmaw(i)=sigmaw_max 2184 ! ENDIF 2185 ! ENDDO 2186 ! cc 2187 2188 !jyg< 2189 IF (iflag_wk_pop_dyn >= 1) THEN 2190 DO i = 1, klon 2191 kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. & 2192 .NOT. ok_qx_qw(i) .OR. (wdens(i) < wdensthreshold) 2193 !! .NOT. ok_qx_qw(i) .OR. (wdens(i) < 2.*wdensmin) 2194 ENDDO 2195 ELSE ! (iflag_wk_pop_dyn >= 1) 2196 DO i = 1, klon 2197 kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. & 2198 .NOT. ok_qx_qw(i) 2199 ENDDO 2200 ENDIF ! (iflag_wk_pop_dyn >= 1) 2201 !>jyg 2202 2203 DO k = 1, klev 2204 DO i = 1, klon 2205 !!jyg IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. & 2206 !!jyg .NOT. ok_qx_qw(i)) THEN 2207 IF (kill_wake(i)) THEN 2208 ! cc 2209 dtls(i, k) = 0. 2210 dqls(i, k) = 0. 2211 deltatw(i, k) = 0. 2212 deltaqw(i, k) = 0. 2213 d_deltatw2(i,k) = -deltatw0(i,k) 2214 d_deltaqw2(i,k) = -deltaqw0(i,k) 2215 END IF ! (kill_wake(i)) 2216 END DO 2217 END DO 2218 2219 DO i = 1, klon 2220 !!jyg IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. & 2221 !!jyg .NOT. ok_qx_qw(i)) THEN 2222 IF (kill_wake(i)) THEN 2223 ktopw(i) = 0 2224 wape(i) = 0. 2225 cstar(i) = 0. 2226 !!jyg Outside subroutine "Wake" hw, wdens sigmaw and asigmaw are zero when there are no wakes 2227 !! hw(i) = hwmin !jyg 2228 !! sigmaw(i) = sigmad !jyg 2229 hw(i) = 0. !jyg 2230 fip(i) = 0. 2231 ! 2232 !! sigmaw(i) = 0. !jyg 2233 sigmaw_targ = 0. 2234 d_sig_bnd2(i) = d_sig_bnd2(i) + sigmaw_targ - sigmaw(i) 2235 !! d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 2236 d_sigmaw2(i) = sigmaw_targ - sigmaw_in(i) ! _in = correction jyg 20220124 2237 sigmaw(i) = sigmaw_targ 2238 ! 2239 IF (iflag_wk_pop_dyn >= 3) THEN 2240 sigmaw_targ = 0. 2241 d_asig_bnd2(i) = d_asig_bnd2(i) + sigmaw_targ - asigmaw(i) 2242 !! d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 2243 d_asigmaw2(i) = sigmaw_targ - asigmaw_in(i) ! _in = correction jyg 20220124 2244 asigmaw(i) = sigmaw_targ 2245 ELSE 2246 asigmaw(i) = 0. 2247 ENDIF ! (iflag_wk_pop_dyn >= 3) 2248 ! 2249 IF (iflag_wk_pop_dyn >= 1) THEN 2250 !! awdens(i) = 0. 2251 !! wdens(i) = 0. 2252 wdens_targ = 0. 2253 d_dens_bnd2(i) = d_dens_bnd2(i) + wdens_targ - wdens(i) 2254 !! d_wdens2(i) = wdens_targ - wdens(i) 2255 d_wdens2(i) = wdens_targ - wdens_in(i) ! jyg 20220916 2256 wdens(i) = wdens_targ 2257 wdens_targ = 0. 2258 !!jyg: bug fix : the d_adens_bnd2 computation must be before the update of awdens. 2259 IF (iflag_wk_pop_dyn >= 2) THEN 2260 d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i) 2261 ENDIF ! (iflag_wk_pop_dyn >= 2) 2262 !! d_awdens2(i) = wdens_targ - awdens(i) 2263 d_awdens2(i) = wdens_targ - awdens_in(i) ! jyg 20220916 2264 awdens(i) = wdens_targ 2265 !! IF (iflag_wk_pop_dyn == 2) THEN 2266 !! d_adens_bnd2(i) = d_adens_bnd2(i) + wdens_targ - awdens(i) 2267 !! ENDIF ! (iflag_wk_pop_dyn == 2) 2268 ENDIF ! (iflag_wk_pop_dyn >= 1) 2269 ELSE ! (kill_wake(i)) 2270 wape(i) = wape2(i) 2271 cstar(i) = cstar2(i) 2272 END IF ! (kill_wake(i)) 2273 ! c print*,'wape wape2 ktopw OK_qx_qw =', 2274 ! c $ wape(i),wape2(i),ktopw(i),OK_qx_qw(i) 2275 END DO 2276 2277 IF (prt_level>=10) THEN 2278 PRINT *, 'wake-6, wape wape2 ktopw OK_qx_qw =', & 2279 wape(igout),wape2(igout),ktopw(igout),OK_qx_qw(igout) 2280 ENDIF 2281 IF (CPPKEY_IOPHYS_WK) THEN 2282 IF (.not.phys_sub) CALL iophys_ecrit('wape_c',1,'wape_c','J/kg',wape) 2283 END IF 2284 2285 2286 ! ----------------------------------------------------------------- 2287 ! Get back to tendencies per second 2288 2289 DO k = 1, klev 2290 DO i = 1, klon 2291 2292 ! cc nrlmd IF ( wk_adv(i) .AND. k .LE. kupper(i)) THEN 2293 !jyg< 2294 !! IF (ok_qx_qw(i) .AND. k<=kupper(i)) THEN 2295 IF (ok_qx_qw(i)) THEN 2296 !>jyg 2297 ! cc 2298 dtls(i, k) = dtls(i, k)/dtime 2299 dqls(i, k) = dqls(i, k)/dtime 2300 d_deltatw2(i, k) = d_deltatw2(i, k)/dtime 2301 d_deltaqw2(i, k) = d_deltaqw2(i, k)/dtime 2302 d_deltat_gw(i, k) = d_deltat_gw(i, k)/dtime 2303 ! c print*,'k,dqls,omg,entr,detr',k,dqls(i,k),omg(i,k),entr(i,k) 2304 ! c $ ,death_rate(i)*sigmaw(i) 2305 END IF 2306 END DO 2307 END DO 2308 !jyg< 2309 IF (iflag_wk_pop_dyn >= 1) THEN 2310 DO i = 1, klon 2311 IF (ok_qx_qw(i)) THEN 2312 d_sig_gen2(i) = d_sig_gen2(i)/dtime 2313 d_sig_death2(i) = d_sig_death2(i)/dtime 2314 d_sig_col2(i) = d_sig_col2(i)/dtime 2315 d_sig_spread2(i) = d_sig_spread2(i)/dtime 2316 d_sig_bnd2(i) = d_sig_bnd2(i)/dtime 2317 d_sigmaw2(i) = d_sigmaw2(i)/dtime 2318 ! 2319 d_dens_gen2(i) = d_dens_gen2(i)/dtime 2320 d_dens_death2(i) = d_dens_death2(i)/dtime 2321 d_dens_col2(i) = d_dens_col2(i)/dtime 2322 d_dens_bnd2(i) = d_dens_bnd2(i)/dtime 2323 d_awdens2(i) = d_awdens2(i)/dtime 2324 d_wdens2(i) = d_wdens2(i)/dtime 2325 ENDIF 2326 ENDDO 2327 IF (iflag_wk_pop_dyn >= 2) THEN 2328 DO i = 1, klon 2329 IF (ok_qx_qw(i)) THEN 2330 d_adens_death2(i) = d_adens_death2(i)/dtime 2331 d_adens_icol2(i) = d_adens_icol2(i)/dtime 2332 d_adens_acol2(i) = d_adens_acol2(i)/dtime 2333 d_adens_bnd2(i) = d_adens_bnd2(i)/dtime 2334 ENDIF 2335 ENDDO 2336 IF (iflag_wk_pop_dyn == 3) THEN 2337 DO i = 1, klon 2338 IF (ok_qx_qw(i)) THEN 2339 d_asig_death2(i) = d_asig_death2(i)/dtime 2340 d_asig_iicol2(i) = d_asig_iicol2(i)/dtime 2341 d_asig_aicol2(i) = d_asig_aicol2(i)/dtime 2342 d_asig_spread2(i) = d_asig_spread2(i)/dtime 2343 d_asig_bnd2(i) = d_asig_bnd2(i)/dtime 2344 ENDIF 2345 ENDDO 2346 ENDIF ! (iflag_wk_pop_dyn == 3) 2347 ENDIF ! (iflag_wk_pop_dyn >= 2) 2348 ENDIF ! (iflag_wk_pop_dyn >= 1) 2349 2350 !>jyg 2351 2352 RETURN 2353 END SUBROUTINE wake 2354 2355 SUBROUTINE wake2(klon,klev,znatsurf, p, ph, pi, dtime, & 2356 tb0, qb0, omgb, & 2357 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, & 2358 sigd_con, Cin, & 2359 deltatw, deltaqw, sigmaw, asigmaw, wdens, awdens, & ! state variables 2360 dth, hw, wape, fip, gfl, & 2361 dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, & 2362 !!! dtke, dqke, omg, dp_deltomg, wkspread, cstar, & ! changes in notation 2363 d_deltat_dcv, d_deltaq_dcv, omg, dp_deltomg, wkspread, cstar, & 2364 d_deltat_gw, & ! tendencies 2365 d_deltatw2, d_deltaqw2, d_sigmaw2, d_asigmaw2, d_wdens2, d_awdens2) ! tendencies 2366 2367 2368 ! ************************************************************** 2369 ! * 2370 ! WAKE * 2371 ! retour a un Pupper fixe * 2372 ! * 2373 ! written by : GRANDPEIX Jean-Yves 09/03/2000 * 2374 ! modified by : ROEHRIG Romain 01/29/2007 * 2375 ! ************************************************************** 2376 2377 2378 USE lmdz_wake_ini , ONLY : wake_ini 2379 USE lmdz_wake_ini , ONLY : prt_level,epsim1,RG,RD 2380 USE lmdz_wake_ini , ONLY : stark, wdens_ref, coefgw, alpk, wk_pupper 2381 USE lmdz_wake_ini , ONLY : crep_upper, crep_sol, tau_cv, rzero, aa0, flag_wk_check_trgl 2382 USE lmdz_wake_ini , ONLY : ok_bug_gfl 2383 USE lmdz_wake_ini , ONLY : iflag_wk_act, iflag_wk_check_trgl, iflag_wk_pop_dyn, wdensinit, wdensthreshold 2384 USE lmdz_wake_ini , ONLY : sigmad, hwmin, wapecut, cstart, sigmaw_max, dens_rate, epsilon_loc 2385 USE lmdz_wake_ini , ONLY : iflag_wk_profile 2386 USE lmdz_wake_ini , ONLY : smallestreal,wk_nsub 2387 2388 2389 IMPLICIT NONE 2390 ! ============================================================================ 2391 2392 2393 ! But : Decrire le comportement des poches froides apparaissant dans les 2394 ! grands systemes convectifs, et fournir l'energie disponible pour 2395 ! le declenchement de nouvelles colonnes convectives. 2396 2397 ! State variables : 2398 ! deltatw : temperature difference between wake and off-wake regions 2399 ! deltaqw : specific humidity difference between wake and off-wake regions 2400 ! sigmaw : fractional area covered by wakes. 2401 ! asigmaw : fractional area covered by active wakes. 2402 ! wdens : number of wakes per unit area 2403 ! awdens : number of active wakes per unit area 2404 2405 ! Variable de sortie : 2406 2407 ! wape : WAke Potential Energy 2408 ! fip : Front Incident Power (W/m2) - ALP 2409 ! gfl : Gust Front Length per unit area (m-1) 2410 ! dtls : large scale temperature tendency due to wake 2411 ! dqls : large scale humidity tendency due to wake 2412 ! hw : wake top hight (given by hw*deltatw(1)/2=wape) 2413 ! dp_omgb : vertical gradient of large scale omega 2414 ! awdens : densite de poches actives 2415 ! wdens : densite de poches 2416 ! omgbdth: flux of Delta_Theta transported by LS omega 2417 ! d_deltat_dcv : differential heating (wake - unpertubed) 2418 ! d_deltat_dcv : differential moistening (wake - unpertubed) 2419 ! omg : Delta_omg =vertical velocity diff. wake-undist. (Pa/s) 2420 ! dp_deltomg : vertical gradient of omg (s-1) 2421 ! wkspread : spreading term in d_t_wake and d_q_wake 2422 ! deltatw : updated temperature difference (T_w-T_u). 2423 ! deltaqw : updated humidity difference (q_w-q_u). 2424 ! sigmaw : updated wake fractional area. 2425 ! asigmaw : updated active wake fractional area. 2426 ! d_deltat_gw : delta T tendency due to GW 2427 2428 ! Variables d'entree : 2429 2430 ! aire : aire de la maille 2431 ! tb0 : horizontal average of temperature (K) 2432 ! qb0 : horizontal average of humidity (kg/kg) 2433 ! omgb : vitesse verticale moyenne sur la maille (Pa/s) 2434 ! dtdwn: source de chaleur due aux descentes (K/s) 2435 ! dqdwn: source d'humidite due aux descentes (kg/kg/s) 2436 ! dta : source de chaleur due courants satures et detrain (K/s) 2437 ! dqa : source d'humidite due aux courants satures et detra (kg/kg/s) 2438 ! wgen : number of wakes generated per unit area and per sec (/m^2/s) 2439 ! amdwn: flux de masse total des descentes, par unite de 2440 ! surface de la maille (kg/m2/s) 2441 ! amup : flux de masse total des ascendances, par unite de 2442 ! surface de la maille (kg/m2/s) 2443 ! sigd_con: 2444 ! Cin : convective inhibition 2445 ! p : pressions aux milieux des couches (Pa) 2446 ! ph : pressions aux interfaces (Pa) 2447 ! pi : (p/p_0)**kapa (adim) 2448 ! dtime: increment temporel (s) 2449 2450 ! Variables internes : 2451 2452 ! rho : mean density at P levels 2453 ! rhoh : mean density at Ph levels 2454 ! tb : mean temperature | may change within 2455 ! qb : mean humidity | sub-time-stepping 2456 ! thb : mean potential temperature 2457 ! thx : potential temperature in (x) area 2458 ! tx : temperature in (x) area 2459 ! qx : humidity in (x) area 2460 ! dp_omgb: vertical gradient og LS omega 2461 ! omgbw : wake average vertical omega 2462 ! dp_omgbw: vertical gradient of omgbw 2463 ! omgbdq : flux of Delta_q transported by LS omega 2464 ! dth : potential temperature diff. wake-undist. 2465 ! th1 : first pot. temp. for vertical advection (=thx) 2466 ! th2 : second pot. temp. for vertical advection (=thw) 2467 ! q1 : first humidity for vertical advection 2468 ! q2 : second humidity for vertical advection 2469 ! d_deltatw : redistribution term for deltatw 2470 ! d_deltaqw : redistribution term for deltaqw 2471 ! deltatw0 : initial deltatw 2472 ! deltaqw0 : initial deltaqw 2473 ! hw0 : wake top hight (defined as the altitude at which deltatw=0) 2474 ! amflux : horizontal mass flux through wake boundary 2475 ! wdens_ref: initial number of wakes per unit area (3D) or per 2476 ! unit length (2D), at the beginning of each time step 2477 ! Tgw : 1 sur la periode de onde de gravite 2478 ! Cgw : vitesse de propagation de onde de gravite 2479 ! LL : distance between 2 wakes 2480 2481 ! ------------------------------------------------------------------------- 2482 ! Declaration de variables 2483 ! ------------------------------------------------------------------------- 2484 2485 2486 ! Arguments en entree 2487 ! -------------------- 2488 2489 INTEGER, INTENT(IN) :: klon,klev 2490 INTEGER, DIMENSION (klon), INTENT(IN) :: znatsurf 2491 REAL, DIMENSION (klon, klev), INTENT(IN) :: p, pi 2492 REAL, DIMENSION (klon, klev+1), INTENT(IN) :: ph 2493 REAL, DIMENSION (klon, klev), INTENT(IN) :: omgb 2494 REAL, INTENT(IN) :: dtime 2495 REAL, DIMENSION (klon, klev), INTENT(IN) :: tb0, qb0 2496 REAL, DIMENSION (klon, klev), INTENT(IN) :: dtdwn, dqdwn 2497 REAL, DIMENSION (klon, klev), INTENT(IN) :: amdwn, amup 2498 REAL, DIMENSION (klon, klev), INTENT(IN) :: dta, dqa 2499 REAL, DIMENSION (klon), INTENT(IN) :: wgen 2500 REAL, DIMENSION (klon), INTENT(IN) :: sigd_con 2501 REAL, DIMENSION (klon), INTENT(IN) :: Cin 2502 2503 ! 2504 ! Input/Output 2505 ! State variables 2506 REAL, DIMENSION (klon, klev), INTENT(INOUT) :: deltatw, deltaqw 2507 REAL, DIMENSION (klon), INTENT(INOUT) :: sigmaw 2508 REAL, DIMENSION (klon), INTENT(INOUT) :: asigmaw 2509 REAL, DIMENSION (klon), INTENT(INOUT) :: wdens 2510 REAL, DIMENSION (klon), INTENT(INOUT) :: awdens 2511 2512 ! Sorties 2513 ! -------- 2514 2515 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dth 2516 REAL, DIMENSION (klon, klev), INTENT(OUT) :: tx, qx 2517 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtls, dqls 2518 !! REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtke, dqke 2519 REAL, DIMENSION (klon, klev), INTENT(OUT) :: d_deltat_dcv, d_deltaq_dcv 2520 REAL, DIMENSION (klon, klev), INTENT(OUT) :: wkspread ! unused (jyg) 2521 REAL, DIMENSION (klon, klev), INTENT(OUT) :: omgbdth, omg 2522 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dp_omgb, dp_deltomg 2523 REAL, DIMENSION (klon), INTENT(OUT) :: hw, wape, fip, gfl, cstar 2524 INTEGER, DIMENSION (klon), INTENT(OUT) :: ktopw 2525 ! Tendencies of state variables (2 is appended to the names of fields which are the cumul of fields 2526 ! computed at each sub-timestep; e.g. d_wdens2 is the cumul of d_wdens) 2527 REAL, DIMENSION (klon, klev), INTENT(OUT) :: d_deltat_gw 2528 REAL, DIMENSION (klon, klev), INTENT(OUT) :: d_deltatw2, d_deltaqw2 2529 REAL, DIMENSION (klon), INTENT(OUT) :: d_sigmaw2, d_asigmaw2, d_wdens2, d_awdens2 2530 2531 ! Variables internes 2532 ! ------------------- 2533 2534 ! Variables a fixer 2535 2536 REAL :: delta_t_min 2537 REAL :: dtimesub 2538 REAL :: wdens0 2539 ! IM 080208 2540 LOGICAL, DIMENSION (klon) :: gwake 2541 2542 ! Variables de sauvegarde 2543 REAL, DIMENSION (klon, klev) :: deltatw0 2544 REAL, DIMENSION (klon, klev) :: deltaqw0 2545 REAL, DIMENSION (klon, klev) :: tb, qb 2546 2547 ! Variables liees a la dynamique de population 1 2548 REAL, DIMENSION(klon) :: act 2549 REAL, DIMENSION(klon) :: rad_wk, tau_wk_inv 2550 REAL, DIMENSION(klon) :: f_shear 2551 REAL, DIMENSION(klon) :: drdt 2552 2553 ! Variables liees a la dynamique de population 2 2554 REAL, DIMENSION(klon) :: cont_fact 2555 2556 ! Variables liees a la dynamique de population 3 2557 REAL, DIMENSION(klon) :: arad_wk, irad_wk 2558 2559 !! REAL, DIMENSION(klon) :: d_sig_gen, d_sig_death, d_sig_col 2560 REAL, DIMENSION(klon) :: wape1_act, wape2_act 2561 LOGICAL, DIMENSION (klon) :: kill_wake 2562 REAL :: drdt_pos 2563 REAL :: tau_wk_inv_min 2564 ! Some components of the tendencies of state variables 2565 REAL, DIMENSION (klon) :: d_sig_gen2, d_sig_death2, d_sig_col2, d_sig_spread2, d_sig_bnd2 2566 REAL, DIMENSION (klon) :: d_asig_death2, d_asig_aicol2, d_asig_iicol2, d_asig_spread2, d_asig_bnd2 2567 REAL, DIMENSION (klon) :: d_dens_gen2, d_dens_death2, d_dens_col2, d_dens_bnd2 2568 REAL, DIMENSION (klon) :: d_adens_death2, d_adens_icol2, d_adens_acol2, d_adens_bnd2 2569 2570 ! Variables pour les GW 2571 REAL, DIMENSION (klon) :: ll 2572 REAL, DIMENSION (klon, klev) :: n2 2573 REAL, DIMENSION (klon, klev) :: cgw 2574 REAL, DIMENSION (klon, klev) :: tgw 2575 2576 ! Variables liees au calcul de hw 2577 REAL, DIMENSION (klon) :: ptop 2578 REAL, DIMENSION (klon) :: sum_dth 2579 REAL, DIMENSION (klon) :: dthmin 2580 REAL, DIMENSION (klon) :: z, dz, hw0 2581 INTEGER, DIMENSION (klon) :: ktop, kupper 2582 2583 ! Variables liees au test de la forme triangulaire du profil de Delta_theta 2584 REAL, DIMENSION (klon) :: sum_half_dth 2585 REAL, DIMENSION (klon) :: dz_half 2586 2587 ! Sub-timestep tendencies and related variables 2588 REAL, DIMENSION (klon, klev) :: d_deltatw, d_deltaqw 2589 REAL, DIMENSION (klon, klev) :: d_deltat_dadv, d_deltaq_dadv 2590 REAL, DIMENSION (klon, klev) :: d_deltat_lsadv, d_deltaq_lsadv 2591 REAL, DIMENSION (klon, klev) :: d_deltat_entrp 2592 REAL, DIMENSION (klon, klev) :: d_deltat_spread, d_deltaq_spread 2593 2594 REAL, DIMENSION (klon, klev) :: d_tb, d_qb 2595 REAL, DIMENSION (klon, klev) :: d_tb_dadv, d_qb_dadv 2596 REAL, DIMENSION (klon, klev) :: d_tb_spread, d_qb_spread 2597 2598 REAL, DIMENSION (klon) :: d_wdens, d_awdens, d_sigmaw, d_asigmaw 2599 REAL, DIMENSION (klon) :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd 2600 REAL, DIMENSION (klon) :: d_asig_death, d_asig_aicol, d_asig_iicol, d_asig_spread, d_asig_bnd 2601 REAL, DIMENSION (klon) :: d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd 2602 REAL, DIMENSION (klon) :: d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd 2603 REAL, DIMENSION (klon) :: agfl !! gust front length of active wakes 2604 !! per unit area 2605 REAL, DIMENSION (klon) :: alpha, alpha_tot 2606 REAL, DIMENSION (klon) :: q0_min, q1_min 2607 LOGICAL, DIMENSION (klon) :: wk_adv, ok_qx_qw 2608 2609 2610 ! Autres variables internes 2611 INTEGER ::isubstep, k, i, igout 2612 2613 REAL :: wdensmin 2614 2615 REAL :: sigmaw_targ 2616 REAL :: wdens_targ 2617 REAL :: d_sigmaw_targ 2618 REAL :: d_wdens_targ 2619 2620 REAL, DIMENSION (klon) :: dsigspread !rate of change of sigmaw due to spreading 2621 2622 REAL, DIMENSION (klon) :: sum_thx, sum_tx, sum_qx, sum_thvx 2623 REAL, DIMENSION (klon) :: sum_dq 2624 REAL, DIMENSION (klon) :: sum_dtdwn, sum_dqdwn 2625 REAL, DIMENSION (klon) :: av_thx, av_tx, av_qx, av_thvx 2626 REAL, DIMENSION (klon) :: av_dth, av_dq 2627 REAL, DIMENSION (klon) :: av_dtdwn, av_dqdwn 2628 2629 REAL, DIMENSION (klon, klev) :: rho 2630 REAL, DIMENSION (klon, klev+1) :: rhoh 2631 REAL, DIMENSION (klon, klev) :: zh 2632 REAL, DIMENSION (klon, klev+1) :: zhh 2633 2634 REAL, DIMENSION (klon, klev) :: thb, thx 2635 2636 REAL, DIMENSION (klon, klev) :: omgbw 2637 REAL, DIMENSION (klon) :: pupper 2638 REAL, DIMENSION (klon) :: omgtop 2639 REAL, DIMENSION (klon, klev) :: dp_omgbw 2640 REAL, DIMENSION (klon) :: ztop, dztop 2641 REAL, DIMENSION (klon, klev) :: alpha_up 2642 2643 REAL, DIMENSION (klon) :: rre1, rre2 2644 REAL :: rrd1, rrd2 2645 REAL, DIMENSION (klon, klev) :: th1, th2, q1, q2 2646 REAL, DIMENSION (klon, klev) :: d_th1, d_th2, d_dth 2647 REAL, DIMENSION (klon, klev) :: d_q1, d_q2, d_dq 2648 REAL, DIMENSION (klon, klev) :: omgbdq 2649 2650 REAL, DIMENSION (klon) :: wape2, cstar2, heff 2651 2652 REAL, DIMENSION (klon, klev) :: crep 2653 2654 REAL, DIMENSION (klon, klev) :: ppi 2655 2656 ! cc nrlmd 2657 REAL, DIMENSION (klon) :: death_rate 2658 !! REAL, DIMENSION (klon) :: nat_rate 2659 REAL, DIMENSION (klon, klev) :: entr ! total entrainment into wakes (spread + birth) 2660 REAL, DIMENSION (klon, klev) :: entr_p ! entrainment into wakes (due to births) 2661 REAL, DIMENSION (klon, klev) :: detr ! detrainment from wakes (due to deaths) 2662 2663 REAL, DIMENSION(klon) :: sigmaw_in, asigmaw_in ! pour les prints 2664 REAL, DIMENSION(klon) :: wdens_in, awdens_in ! pour les prints 2665 2666 !!-- variables liees au nouveau calcul de ptop et hw 2667 REAL, DIMENSION (klon, klev) :: int_dth 2668 REAL, DIMENSION (klon, klev) :: zzz, dzzz 2669 REAL :: epsil 2670 REAL, DIMENSION (klon) :: ptop1 2671 INTEGER, DIMENSION (klon) :: ktop1 2672 REAL, DIMENSION (klon) :: omega 2673 REAL, DIMENSION (klon) :: h_zzz 2674 2675 !! Bidouilles 2676 REAL :: iwkadv 2677 REAL :: iokqxqw 2678 2679 !print*,'WAKE LJYFz' 2680 2681 ! ------------------------------------------------------------------------- 2682 ! Initialisations 2683 ! ------------------------------------------------------------------------- 2684 ! ALON = 3.e5 2685 ! alon = 1.E6 2686 2687 ! Provisionnal; to be suppressed when f_shear is parameterized 2688 f_shear(:) = 1. ! 0. for strong shear, 1. for weak shear 2689 2690 ! Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei) 2691 2692 ! coefgw : Coefficient pour les ondes de gravite 2693 ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE) 2694 ! wdens : Densite surfacique de poche froide 2695 ! ------------------------------------------------------------------------- 2696 2697 ! cc nrlmd coefgw=10 2698 ! coefgw=1 2699 ! wdens0 = 1.0/(alon**2) 2700 ! cc nrlmd wdens = 1.0/(alon**2) 2701 ! cc nrlmd stark = 0.50 2702 ! CRtest 2703 ! cc nrlmd alpk=0.1 2704 ! alpk = 1.0 2705 ! alpk = 0.5 2706 ! alpk = 0.05 2707 ! 2708 igout = klon/2+1/klon 2709 ! 2710 ! sub-time-stepping parameters 2711 dtimesub = dtime/wk_nsub 2712 ! 2713 IF (iflag_wk_pop_dyn == 0) THEN 2714 ! Initialisation de toutes des densites a wdens_ref. 2715 ! Les densites peuvent evoluer si les poches debordent 2716 ! (voir au tout debut de la boucle sur les substeps) 2717 !jyg< 2718 !! wdens(:) = wdens_ref 2719 DO i = 1,klon 2720 wdens(i) = wdens_ref(znatsurf(i)+1) 2721 ENDDO 2722 !>jyg 2723 ENDIF ! (iflag_wk_pop_dyn == 0) 2724 ! 2725 IF (iflag_wk_pop_dyn >=1) THEN 2726 IF (iflag_wk_pop_dyn == 3) THEN 2727 wdensmin = wdensthreshold 2728 ELSE 2729 wdensmin = wdensinit 2730 ENDIF 2731 ENDIF 2732 2733 ! print*,'stark',stark 2734 ! print*,'alpk',alpk 2735 ! print*,'wdens',wdens 2736 ! print*,'coefgw',coefgw 2737 ! cc 2738 ! Minimum value for |T_wake - T_undist|. Used for wake top definition 2739 ! ------------------------------------------------------------------------- 2740 2741 delta_t_min = 0.2 2742 2743 ! 1. - Save initial values, initialize tendencies, initialize output fields 2744 ! ------------------------------------------------------------------------ 2745 2746 !jyg< 2747 !! DO k = 1, klev 2748 !! DO i = 1, klon 2749 !! ppi(i, k) = pi(i, k) 2750 !! deltatw0(i, k) = deltatw(i, k) 2751 !! deltaqw0(i, k) = deltaqw(i, k) 2752 !! tb(i, k) = tb0(i, k) 2753 !! qb(i, k) = qb0(i, k) 2754 !! dtls(i, k) = 0. 2755 !! dqls(i, k) = 0. 2756 !! d_deltat_gw(i, k) = 0. 2757 !! d_tb(i, k) = 0. 2758 !! d_qb(i, k) = 0. 2759 !! d_deltatw(i, k) = 0. 2760 !! d_deltaqw(i, k) = 0. 2761 !! ! IM 060508 beg 2762 !! d_deltatw2(i, k) = 0. 2763 !! d_deltaqw2(i, k) = 0. 2764 !! ! IM 060508 end 2765 !! END DO 2766 !! END DO 2767 ppi(:,:) = pi(:,:) 2768 deltatw0(:,:) = deltatw(:,:) 2769 deltaqw0(:,:) = deltaqw(:,:) 2770 tb(:,:) = tb0(:,:) 2771 qb(:,:) = qb0(:,:) 2772 dtls(:,:) = 0. 2773 dqls(:,:) = 0. 2774 d_deltat_gw(:,:) = 0. 460 2775 461 2776 detr(:,:) = 0. 462 2777 entr(:,:) = 0. 463 2778 entr_p(:,:) = 0. 464 c5p(:,:) = 0.465 2779 466 2780 th1(:,:) = 0. … … 1550 3864 1551 3865 dth(i, k) = deltatw(i, k)/ppi(i, k) 1552 c5p(i,k) = - entr_p(i,k)*deltatw(i,k)/sigmaw(i)1553 3866 1554 3867 !! Entrainment due to spread is supposed to be included in the differential advection … … 1570 3883 !! IF (prt_level>=10) THEN 1571 3884 IF (prt_level>=10 .and. wk_adv(igout)) THEN 1572 PRINT *, 'wake-4.4, isubstep= ', isubstep,' c5p(igout,k) ', (k,c5p(igout,k), k=1,klev)1573 3885 PRINT *, 'wake-4.4, isubstep= ', isubstep,' deltatw(igout,k) ', (k,deltatw(igout,k), k=1,klev) 1574 3886 PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_deltat_dcv(igout,k) ', (k,d_deltat_dcv(igout,k), k=1,klev) … … 2452 4764 2453 4765 RETURN 2454 END SUBROUTINE wake 4766 END SUBROUTINE wake2 2455 4767 2456 4768 SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon_loc, qb, d_qb, deltaqw, & -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r5709 r5763 2527 2527 ENDIF 2528 2528 CALL histwrite_phy(o_tntc, zx_tmp_fi3d) 2529 ELSE IF(iflag_thermals.GE.1.AND.iflag_wake. EQ.1) THEN2529 ELSE IF(iflag_thermals.GE.1.AND.iflag_wake.GE.1) THEN 2530 2530 IF (vars_defined) THEN 2531 2531 zx_tmp_fi3d(1:klon,1:klev)=d_t_con(1:klon,1:klev)/pdtphys + & … … 2547 2547 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_con(1:klon,1:klev)/pdtphys 2548 2548 CALL histwrite_phy(o_tnhusc, zx_tmp_fi3d) 2549 ELSE IF (iflag_thermals.GE.1.AND.iflag_wake. EQ.1) THEN2549 ELSE IF (iflag_thermals.GE.1.AND.iflag_wake.GE.1) THEN 2550 2550 IF (vars_defined) THEN 2551 2551 zx_tmp_fi3d(1:klon,1:klev)=d_q_con(1:klon,1:klev)/pdtphys + & -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r5715 r5763 3525 3525 ENDDO 3526 3526 3527 IF ( iflag_wake==2) THEN3527 IF (mod(iflag_wake,10)==2) THEN 3528 3528 ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.) 3529 3529 DO k = 1,klev … … 3533 3533 ok_wk_lsp(:)*(d_q_eva(:,k)+d_q_lsc(:,k))/phys_tstep 3534 3534 ENDDO 3535 ELSEIF ( iflag_wake==3) THEN3535 ELSEIF (mod(iflag_wake,10)==3) THEN 3536 3536 ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.) 3537 3537 DO k = 1,klev
Note: See TracChangeset
for help on using the changeset viewer.