- Timestamp:
- Oct 19, 2023, 4:02:57 PM (8 months ago)
- Location:
- LMDZ6/branches/LMDZ_ECRad
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_ECRad
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ_ECRad/libf/phylmd/add_phys_tend_mod.F90
r3435 r4727 16 16 CONTAINS 17 17 18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap)18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap) 19 19 ! ====================================================================== 20 20 ! Ajoute les tendances de couche limite, soit determinees par la … … 49 49 ! ------------ 50 50 REAL zdu(klon, klev), zdv(klon, klev) 51 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev) 51 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev) 52 52 CHARACTER *(*) text 53 53 REAL paprs(klon,klev+1) … … 76 76 PRINT *, ' add_pbl_tend, zzdt ', zzdt 77 77 PRINT *, ' add_pbl_tend, zzdq ', zzdq 78 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)78 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0) 79 79 ELSE 80 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)80 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0) 81 81 END IF 82 82 … … 87 87 ! $Id: add_phys_tend.F90 2611 2016-08-03 15:41:26Z jyg $ 88 88 ! 89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi, paprs,text, &89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, & 90 90 abortphy,flag_inhib_tend, itap, diag_mode) 91 91 !====================================================================== … … 102 102 USE dimphy, ONLY: klon, klev 103 103 USE phys_state_var_mod, ONLY : phys_tstep 104 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri104 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri 105 105 USE phys_state_var_mod, ONLY: ftsol 106 106 USE geometry_mod, ONLY: longitude_deg, latitude_deg 107 107 USE print_control_mod, ONLY: prt_level 108 108 USE cmp_seri_mod 109 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &110 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col109 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 110 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 111 111 IMPLICIT none 112 112 include "YOMCST.h" … … 116 116 !------------ 117 117 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdu, zdv 118 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi 118 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi, zdqbs 119 119 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs 120 120 CHARACTER*(*), INTENT(IN) :: text … … 136 136 ! Save variables, used in diagnostic mode (diag_mode=1). 137 137 REAL, DIMENSION(klon,klev) :: sav_u_seri, sav_v_seri 138 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_q _seri138 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri 139 139 REAL, DIMENSION(klon,klev) :: sav_t_seri 140 140 REAL, DIMENSION(klon,klev) :: sav_zdq … … 163 163 ! zh_ql_col---- total enthalpy of liquid watter (J/m2) 164 164 ! zh_qs_col---- total enthalpy of solid watter (J/m2) 165 ! zh_qbs_col---- total enthalpy of blowing snow (J/m2) 165 166 ! zqw_col------ total mass of watter vapour (kg/m2) 166 167 ! zql_col------ total mass of liquid watter (kg/m2) 167 ! zqs_col------ total mass of solid watter (kg/m2) 168 ! zqs_col------ total mass of cloud ice (kg/m2) 169 ! zqbs_col------ total mass of blowing snow (kg/m2) 168 170 ! zek_col------ total kinetic energy (kg/m2) 169 171 ! … … 172 174 REAL zql_col(klon,2) 173 175 REAL zqs_col(klon,2) 176 REAL zqbs_col(klon,2) 174 177 REAL zek_col(klon,2) 175 178 REAL zh_dair_col(klon,2) 176 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2) 179 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2) 177 180 REAL zh_col(klon,2) 178 181 … … 213 216 sav_ql_seri(:,:) = ql_seri(:,:) 214 217 sav_qs_seri(:,:) = qs_seri(:,:) 218 sav_qbs_seri(:,:) = qbs_seri(:,:) 215 219 sav_q_seri(:,:) = q_seri(:,:) 216 220 sav_t_seri(:,:) = t_seri(:,:) … … 236 240 237 241 CALL integr_v(klon, klev, zcpvap, & 238 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &239 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &240 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))242 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 243 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 244 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 241 245 242 246 end if ! end if (fl_ebil .GT. 0) … … 250 254 ql_seri(:,:)=ql_seri(:,:)+zdql(:,:) 251 255 qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:) 256 qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:) 252 257 253 258 !====================================================================== … … 432 437 ql_seri(:,:)=ql_seri(:,:)-zdql(:,:) 433 438 qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:) 439 qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:) 434 440 ENDIF 435 441 … … 446 452 447 453 CALL integr_v(klon, klev, zcpvap, & 448 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &449 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &450 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))454 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 455 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 456 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 451 457 452 458 ! ------------------------------------------------ … … 457 463 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 458 464 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 459 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 465 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 466 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 460 467 461 468 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 465 472 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 466 473 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 474 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 467 475 468 476 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 476 484 ql_seri(:,:) = sav_ql_seri(:,:) 477 485 qs_seri(:,:) = sav_qs_seri(:,:) 486 qbs_seri(:,:) = sav_qbs_seri(:,:) 478 487 q_seri(:,:) = sav_q_seri(:,:) 479 488 t_seri(:,:) = sav_t_seri(:,:) … … 484 493 END SUBROUTINE add_phys_tend 485 494 486 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &487 zdu,zdv,zdt,zdq,zdql,zdqs, paprs,text)495 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, & 496 zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text) 488 497 !====================================================================== 489 498 ! Ajoute les tendances des variables physiques aux variables … … 501 510 USE print_control_mod, ONLY: prt_level 502 511 USE cmp_seri_mod 503 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &504 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col512 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 513 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 505 514 IMPLICIT none 506 515 include "YOMCST.h" … … 511 520 INTEGER, INTENT(IN) :: nlon, nlev 512 521 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: uu, vv 513 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs 522 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs 514 523 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdu, zdv 515 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs 524 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs, zdqbs 516 525 REAL, DIMENSION(nlon,nlev+1), INTENT(IN) :: paprs 517 526 CHARACTER*(*), INTENT(IN) :: text … … 520 529 !-------- 521 530 REAL, DIMENSION(nlon,nlev) :: uu_n, vv_n 522 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n 531 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n, qbs_n 523 532 524 533 … … 543 552 ! zqw_col------ total mass of watter vapour (kg/m2) 544 553 ! zql_col------ total mass of liquid watter (kg/m2) 545 ! zqs_col------ total mass of solid watter (kg/m2) 554 ! zqs_col------ total mass of cloud ice (kg/m2) 555 ! zqbs_col------ total mass of blowing snow (kg/m2) 546 556 ! zek_col------ total kinetic energy (kg/m2) 547 557 ! … … 550 560 REAL zql_col(nlon,2) 551 561 REAL zqs_col(nlon,2) 562 REAL zqbs_col(nlon,2) 552 563 REAL zek_col(nlon,2) 553 564 REAL zh_dair_col(nlon,2) 554 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2) 565 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2) 555 566 REAL zh_col(nlon,2) 556 567 … … 585 596 586 597 CALL integr_v(nlon, nlev, rcpv, & 587 temp, qv, ql, qs, uu, vv, zairm, &588 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &589 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))598 temp, qv, ql, qs, qbs, uu, vv, zairm, & 599 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 600 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 590 601 591 602 end if ! end if (fl_ebil .GT. 0) … … 600 611 ql_n(:,:)=ql(:,:)+zdql(:,:) 601 612 qs_n(:,:)=qs(:,:)+zdqs(:,:) 613 qbs_n(:,:)=qbs(:,:)+zdqbs(:,:) 602 614 temp_n(:,:)=temp(:,:)+zdt(:,:) 603 615 … … 616 628 617 629 CALL integr_v(nlon, nlev, rcpv, & 618 temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &619 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &620 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))630 temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, & 631 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 632 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 621 633 622 634 ! ------------------------------------------------ … … 627 639 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 628 640 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 629 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 641 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 642 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 630 643 631 644 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 639 652 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 640 653 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 654 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 641 655 642 656 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 649 663 650 664 SUBROUTINE integr_v(nlon, nlev, zcpvap, & 651 temp, qv, ql, qs, uu, vv, zairm, &652 zqw_col, zql_col, zqs_col, z ek_col, zh_dair_col, &653 zh_qw_col, zh_ql_col, zh_qs_col, zh_ col)665 temp, qv, ql, qs, qbs, uu, vv, zairm, & 666 zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, & 667 zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col) 654 668 655 669 IMPLICIT none … … 658 672 INTEGER, INTENT(IN) :: nlon,nlev 659 673 REAL, INTENT(IN) :: zcpvap 660 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, uu, vv674 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs, uu, vv 661 675 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zairm 662 676 REAL, DIMENSION(nlon), INTENT(OUT) :: zqw_col 663 677 REAL, DIMENSION(nlon), INTENT(OUT) :: zql_col 664 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col 678 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col, zqbs_col 665 679 REAL, DIMENSION(nlon), INTENT(OUT) :: zek_col 666 680 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_dair_col 667 681 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qw_col 668 682 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_ql_col 669 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col 683 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col, zh_qbs_col 670 684 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_col 671 685 … … 677 691 zql_col(:) = 0. 678 692 zqs_col(:) = 0. 693 zqbs_col(:) = 0. 679 694 zek_col(:) = 0. 680 695 zh_dair_col(:) = 0. … … 682 697 zh_ql_col(:) = 0. 683 698 zh_qs_col(:) = 0. 699 zh_qbs_col(:) = 0. 684 700 685 701 !JLD write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice … … 694 710 zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k) 695 711 zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k) 712 zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k) 696 713 ! Kinetic Energy 697 714 zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k) … … 702 719 zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k) !jyg 703 720 zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k) !jyg 721 zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k) !jyg 704 722 END DO 705 723 END DO 706 724 ! compute total air enthalpy 707 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) 725 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:) 708 726 709 727 END SUBROUTINE integr_v … … 720 738 USE dimphy, ONLY: klon, klev 721 739 USE phys_state_var_mod, ONLY : phys_tstep 722 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con 740 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall 723 741 USE geometry_mod, ONLY: longitude_deg, latitude_deg 724 742 USE print_control_mod, ONLY: prt_level 725 743 USE cmp_seri_mod 726 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &727 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col744 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 745 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 728 746 USE phys_local_var_mod, ONLY: evap, sens 729 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri &747 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri & 730 748 & , rain_lsc, snow_lsc 731 749 USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd … … 764 782 bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) & 765 783 & + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1) 784 CASE("bs") param 785 bilq_bnd = - bs_fall(1) 786 bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1) 766 787 CASE("convection") param 767 788 bilq_bnd = - rain_con(1) - snow_con(1) … … 800 821 if ( prt_level .GE. 5) then 801 822 write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd 802 write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1) 803 write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1) 823 write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1), d_qbs_col(1) 824 write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1),d_h_qbs_col(1) 804 825 end if 805 826
Note: See TracChangeset
for help on using the changeset viewer.