Changeset 4669 for LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd
- Timestamp:
- Sep 4, 2023, 10:17:16 AM (17 months ago)
- Location:
- LMDZ6/branches/LMDZ_cdrag_LSCE
- Files:
-
- 1 deleted
- 41 edited
- 10 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_cdrag_LSCE
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/add_phys_tend_mod.F90
r3435 r4669 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 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/atke_turbulence_ini_mod.F90
r4481 r4669 5 5 save 6 6 7 integer :: iflag_atke8 !$OMP THREADPRIVATE(iflag_atke)7 integer :: iflag_atke, iflag_num_atke 8 !$OMP THREADPRIVATE(iflag_atke, iflag_num_atke) 9 9 real :: kappa = 0.4 ! Von Karman constant 10 10 !$OMP THREADPRIVATE(kappa) … … 45 45 CALL getin_p('iflag_atke',iflag_atke) 46 46 47 ! flag that controls the numerical treatment of diffusion coeffiient calculation 48 iflag_num_atke=0 49 CALL getin_p('iflag_num_atke',iflag_num_atke) 50 47 51 ! asymptotic mixing length [m] 48 52 l0=150.0 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/calcratqs.F90
r4009 r4669 7 7 qtc_cv, sigt_cv, zqsat, & 8 8 tke,tke_dissip,lmix,wprime, & 9 t2m,q2m,fm_therm, 9 t2m,q2m,fm_therm,cell_area,& 10 10 ratqs,ratqsc,ratqs_inter) 11 11 … … 37 37 real, dimension(klon,klev),intent(in) :: wake_deltaq,wake_s 38 38 real, dimension(klon,nbsrf),intent(in) :: t2m,q2m 39 real, dimension(klon), intent(in) :: cell_area 39 40 ! Output 40 41 real, dimension(klon,klev),intent(inout) :: ratqs,ratqsc,ratqs_inter … … 47 48 real facteur,zfratqs1,zfratqs2 48 49 real, dimension(klon,klev) :: ratqs_hetero,ratqs_oro,ratqs_tke 49 50 real resol,resolmax,fact 50 51 51 52 !------------------------------------------------------------------------- … … 142 143 *( tanh( (ratqsp0-pplay(:,k))/ratqsdp) + 1.) 143 144 enddo 145 146 147 else if (iflag_ratqs==5) then 148 ! Dependency of ratqs on model resolution 149 ! Audran, Meryl, Lea, Gwendal and Etienne 150 ! April 2023 151 resolmax=sqrt(maxval(cell_area)) 152 do k=1,klev 153 do i=1,klon 154 resol=sqrt(cell_area(i)) 155 fact=sqrt(resol/resolmax) 156 ratqss(i,k)=ratqsbas*fact+0.5*(ratqshaut-ratqsbas)*fact & 157 *( tanh( (ratqsp0-pplay(i,k))/ratqsdp) + 1.) 158 enddo 159 enddo 160 144 161 145 162 else if (iflag_ratqs .GT. 9) then -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/calcul_divers.h
r3435 r4669 2 2 ! $Id$ 3 3 ! 4 ! itap : nombre de pas de temps de la physique 5 ! itapm1 : somme du nombre de pas de temps du/des mois precedent/s. 6 ! (itap - itapm1) : nombre de pas de temps du mois courant 4 7 ! 5 ! Initialisations diverses au tout debut 8 ! Ne pas modifier les IFs ci-dessous impliquant itapm1, 9 ! autrement les resultats seront faux !! 10 ! 11 ! Ici on utilise MOD(itap - itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.1) 12 ! pour detecter le debut de chaque mois lorsque l on tourne par an. 13 ! 14 ! IM, 26.05.2023 15 ! 16 ! 17 ! Initialisations itapm1 du premier mois 6 18 IF(itap.EQ.1) THEN 7 19 itapm1=0 20 ! print*,'initialisation itap=1 itapm1 ',itapm1 8 21 ENDIF 9 22 23 ! 10 24 ! Initialisation debut de mois 11 25 IF(itap.EQ.itapm1+1) THEN 26 ndayrain_mth(:)=0. 27 ! print*,'Initialisation ndayrain_mth ',itap 28 ENDIF 29 ! 30 ! Initialisation debut de chaque jour 31 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN 12 32 nday_rain(:)=0. 13 33 ! print*,'initialisation mois suivants day_rain itap',itap 14 34 ENDIF 15 16 ! Calcul fin de journee : total_rain, nday_rain 17 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN 18 ! print*,'calcul nday_rain itap ',itap 35 ! 36 ! Calcul a chaque pas de temps de la physique 19 37 DO i = 1, klon 20 38 total_rain(i)=rain_fall(i)+snow_fall(i) 21 IF(total_rain(i).GT.0.) nday_rain(i)=nday_rain(i)+1. 39 IF(total_rain(i).GT.0.) nday_rain(i)=1. 40 ENDDO 41 ! 42 ! Cumul en fin de journee 43 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN 44 DO i = 1, klon 45 ndayrain_mth(i)=ndayrain_mth(i)+nday_rain(i) 22 46 ENDDO 23 47 ENDIF 24 48 ! 25 49 ! Initialisation fin de mois 50 ! Ne pas changer le IF ci-dessous, car le compteur itapm1 est augmente 51 ! apres, dans la boucle !!! 52 ! IM, 260523 26 53 IF(MOD(itap-itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.0) THEN 27 54 itapm1=itapm1+NINT(mth_len*un_jour/phys_tstep) 28 ! print*,' initialisation itapm1 ',itapm155 ! print*,'fmois i i1 mjt',itap,itapm1,mth_len,un_jour,phys_tstep 29 56 ENDIF 30 57 ! 31 58 ! calcul temperatures minimale et maximale moyennees sur le mois 32 59 ! 33 !initialisation debut de mois ou de journee pour les fichiers mensuels60 !initialisation debut de mois pour les fichiers mensuels annuels 34 61 IF(itap.EQ.itapm1+1) THEN 35 62 t2m_min_mon=0. 36 63 t2m_max_mon=0. 37 64 ENDIF 65 ! 66 !initialisation debut de journee pour les fichiers mensuels annuels 38 67 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN 39 68 zt2m_min_mon=zt2m 40 69 zt2m_max_mon=zt2m 41 70 ENDIF 42 !calcul a chaque pas de temps pour les fichiers mensuels 71 ! 72 !calcul sur tous les pas de temps pour les fichiers mensuels annuels 43 73 DO i = 1, klon 44 74 zt2m_min_mon(i)=MIN(zt2m(i),zt2m_min_mon(i)) 45 75 zt2m_max_mon(i)=MAX(zt2m(i),zt2m_max_mon(i)) 46 76 ENDDO 47 !fin de journee 77 ! 78 !fin journee 48 79 IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN 49 80 t2m_min_mon=t2m_min_mon+zt2m_min_mon 50 81 t2m_max_mon=t2m_max_mon+zt2m_max_mon 51 82 ENDIF 83 ! 52 84 !fin mois 53 85 IF(itap==itapm1) THEN -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/clesphys.h
r4661 r4669 18 18 REAL co2_ppm, co2_ppm0, solaire 19 19 INTEGER iflag_thermals,nsplit_thermals 20 INTEGER iflag_physiq 20 21 REAL tau_thermals 21 22 … … 102 103 LOGICAL :: ok_daily_climoz 103 104 LOGICAL :: ok_new_lscp 105 LOGICAL :: ok_bs, ok_rad_bs 104 106 ! flag to bypass or not the phytrac module 105 107 INTEGER :: iflag_phytrac … … 154 156 & , ok_chlorophyll,ok_conserv_q, adjust_tropopause & 155 157 & , ok_daily_climoz, ok_all_xml, ok_lwoff & 156 & , iflag_phytrac, ok_new_lscp & 157 & , iflag_thermals,nsplit_thermals, tau_thermals 158 & , iflag_phytrac, ok_new_lscp, ok_bs, ok_rad_bs & 159 & , iflag_thermals,nsplit_thermals, tau_thermals & 160 & , iflag_physiq 158 161 save /clesphys/ 159 162 !$OMP THREADPRIVATE(/clesphys/) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/cloudth_mod.F90
r4380 r4669 1 1 MODULE cloudth_mod 2 2 3 3 4 IMPLICIT NONE … … 10 11 & ratqs,zqs,t) 11 12 13 14 use lscp_ini_mod, only: iflag_cloudth_vert 12 15 13 16 IMPLICIT NONE … … 24 27 #include "YOETHF.h" 25 28 #include "FCTTRE.h" 26 #include "nuage.h"27 29 28 30 INTEGER itap,ind1,ind2 … … 262 264 263 265 USE ioipsl_getin_p_mod, ONLY : getin_p 266 use lscp_ini_mod, only: iflag_cloudth_vert 264 267 265 268 IMPLICIT NONE … … 268 271 #include "YOETHF.h" 269 272 #include "FCTTRE.h" 270 #include "nuage.h"271 273 272 274 INTEGER itap,ind1,ind2 … … 593 595 & ratqs,zqs,t) 594 596 597 use lscp_ini_mod, only: iflag_cloudth_vert 595 598 596 599 IMPLICIT NONE … … 607 610 #include "YOETHF.h" 608 611 #include "FCTTRE.h" 609 #include "nuage.h"610 612 611 613 INTEGER itap,ind1,ind2 … … 820 822 !=========================================================================== 821 823 822 824 use lscp_ini_mod, only: iflag_cloudth_vert 823 825 USE ioipsl_getin_p_mod, ONLY : getin_p 824 826 USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, & … … 830 832 #include "YOETHF.h" 831 833 #include "FCTTRE.h" 832 #include "nuage.h"833 834 834 835 INTEGER itap,ind1,ind2 … … 1283 1284 & ratqs,zqs,T) 1284 1285 1285 1286 use lscp_ini_mod, only: iflag_cloudth_vert 1286 1287 USE ioipsl_getin_p_mod, ONLY : getin_p 1287 1288 USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, & … … 1293 1294 #include "YOETHF.h" 1294 1295 #include "FCTTRE.h" 1295 #include "nuage.h"1296 1296 1297 1297 … … 1550 1550 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1551 1551 1552 1552 use lscp_ini_mod, only: iflag_cloudth_vert 1553 1553 USE ioipsl_getin_p_mod, ONLY : getin_p 1554 1554 USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv … … 1561 1561 #include "YOETHF.h" 1562 1562 #include "FCTTRE.h" 1563 #include "nuage.h"1564 1563 1565 1564 … … 2321 2320 2322 2321 INCLUDE "YOMCST.h" 2323 INCLUDE "nuage.h"2324 2322 2325 2323 INTEGER, INTENT(IN) :: ind1,ind2, klev ! horizontal and vertical indices and dimensions -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/conf_phys_m.F90
r4661 r4669 35 35 36 36 INCLUDE "conema3.h" 37 INCLUDE "fisrtilp.h"38 37 INCLUDE "nuage.h" 39 38 INCLUDE "YOMCST.h" … … 171 170 LOGICAL,SAVE :: ok_adj_ema_omp 172 171 INTEGER,SAVE :: iflag_clw_omp 173 REAL,SAVE :: cld_lc_lsc_omp,cld_lc_con_omp,cld_tau_lsc_omp,cld_tau_con_omp174 REAL,SAVE :: ffallv_lsc_omp, ffallv_con_omp,coef_eva_omp,coef_eva_i_omp175 LOGICAL,SAVE :: reevap_ice_omp176 INTEGER,SAVE :: iflag_pdf_omp177 172 INTEGER,SAVE :: iflag_ice_thermo_omp 178 173 LOGICAL,SAVE :: ok_ice_sursat_omp 179 174 LOGICAL,SAVE :: ok_plane_h2o_omp, ok_plane_contrail_omp 180 INTEGER,SAVE :: iflag_t_glace_omp 181 INTEGER,SAVE :: iflag_cloudth_vert_omp 182 INTEGER,SAVE :: iflag_rain_incloud_vol_omp 183 INTEGER,SAVE :: iflag_vice_omp, iflag_rei_omp 175 INTEGER,SAVE :: iflag_rei_omp 184 176 REAL,SAVE :: rad_froid_omp, rad_chau1_omp, rad_chau2_omp 185 REAL,SAVE :: t_glace_min_omp, t_glace_max_omp186 REAL,SAVE :: exposant_glace_omp187 INTEGER,SAVE :: iflag_gammasat_omp188 177 REAL,SAVE :: rei_min_omp, rei_max_omp 189 178 INTEGER,SAVE :: iflag_sic_omp, iflag_inertie_omp … … 200 189 REAL, SAVE :: fmagic_omp, pmagic_omp 201 190 INTEGER,SAVE :: iflag_pbl_omp,lev_histhf_omp,lev_histday_omp,lev_histmth_omp 202 INTEGER,SAVE :: iflag_pbl_split_omp 191 INTEGER,SAVE :: iflag_pbl_split_omp,iflag_physiq_omp 203 192 !FC 204 193 INTEGER,SAVE :: ifl_pbltree_omp … … 234 223 INTEGER, SAVE :: iflag_ener_conserv_omp 235 224 LOGICAL, SAVE :: ok_conserv_q_omp 236 INTEGER, SAVE :: iflag_fisrtilp_qsat_omp237 INTEGER, SAVE :: iflag_bergeron_omp238 225 LOGICAL,SAVE :: ok_strato_omp 239 226 LOGICAL,SAVE :: ok_hines_omp, ok_gwd_rando_omp … … 259 246 INTEGER,SAVE :: nit_bulk_omp 260 247 INTEGER,SAVE :: kz0_omp 248 LOGICAL, SAVE :: ok_bs_omp, ok_rad_bs_omp 261 249 262 250 … … 1023 1011 CALL getin('ok_conserv_q',ok_conserv_q_omp) 1024 1012 1025 !Config Key = iflag_fisrtilp_qsat1026 !Config Desc = Flag de fisrtilp1027 !Config Def = 01028 !Config Help = Flag pour la pluie grande-échelle les options suivantes existent :1029 !Config >1 nb iterations pour converger dans le calcul de qsat1030 iflag_fisrtilp_qsat_omp = 01031 CALL getin('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat_omp)1032 1033 !Config Key = iflag_bergeron1034 !Config Desc = Flag de fisrtilp1035 !Config Def = 01036 !Config Help = Flag pour la pluie grande-échelle les options suivantes existent :1037 !Config 0 pas d effet Bergeron1038 !Config 1 effet Bergeron pour T<01039 iflag_bergeron_omp = 01040 CALL getin('iflag_bergeron',iflag_bergeron_omp)1041 1042 1013 ! 1043 1014 ! … … 1098 1069 iflag_clw_omp = 0 1099 1070 CALL getin('iflag_clw',iflag_clw_omp) 1100 ! 1101 !Config Key = cld_lc_lsc 1102 !Config Desc = 1103 !Config Def = 2.6e-4 1104 !Config Help = 1105 ! 1106 cld_lc_lsc_omp = 2.6e-4 1107 CALL getin('cld_lc_lsc',cld_lc_lsc_omp) 1108 ! 1109 !Config Key = cld_lc_con 1110 !Config Desc = 1111 !Config Def = 2.6e-4 1112 !Config Help = 1113 ! 1114 cld_lc_con_omp = 2.6e-4 1115 CALL getin('cld_lc_con',cld_lc_con_omp) 1116 ! 1117 !Config Key = cld_tau_lsc 1118 !Config Desc = 1119 !Config Def = 3600. 1120 !Config Help = 1121 ! 1122 cld_tau_lsc_omp = 3600. 1123 CALL getin('cld_tau_lsc',cld_tau_lsc_omp) 1124 ! 1125 !Config Key = cld_tau_con 1126 !Config Desc = 1127 !Config Def = 3600. 1128 !Config Help = 1129 ! 1130 cld_tau_con_omp = 3600. 1131 CALL getin('cld_tau_con',cld_tau_con_omp) 1132 ! 1133 !Config Key = ffallv_lsc 1134 !Config Desc = 1135 !Config Def = 1. 1136 !Config Help = 1137 ! 1138 ffallv_lsc_omp = 1. 1139 CALL getin('ffallv_lsc',ffallv_lsc_omp) 1140 ! 1141 !Config Key = ffallv_con 1142 !Config Desc = 1143 !Config Def = 1. 1144 !Config Help = 1145 ! 1146 ffallv_con_omp = 1. 1147 CALL getin('ffallv_con',ffallv_con_omp) 1148 ! 1149 !Config Key = coef_eva 1150 !Config Desc = 1151 !Config Def = 2.e-5 1152 !Config Help = 1153 ! 1154 coef_eva_omp = 2.e-5 1155 CALL getin('coef_eva',coef_eva_omp) 1156 ! 1157 !Config Key = coef_eva_i 1158 !Config Desc = 1159 !Config Def = 2.e-5 1160 !Config Help = 1161 ! 1162 coef_eva_i_omp = coef_eva_omp 1163 CALL getin('coef_eva_i',coef_eva_i_omp) 1164 ! 1165 !Config Key = reevap_ice 1166 !Config Desc = 1167 !Config Def = .FALSE. 1168 !Config Help = 1169 ! 1170 reevap_ice_omp = .FALSE. 1171 CALL getin('reevap_ice',reevap_ice_omp) 1071 1172 1072 1173 1073 !Config Key = iflag_ratqs … … 1285 1185 1286 1186 ! 1287 !Config Key = iflag_pdf1288 !Config Desc =1289 !Config Def = 01290 !Config Help =1291 !1292 iflag_pdf_omp = 01293 CALL getin('iflag_pdf',iflag_pdf_omp)1294 !1295 1187 !Config Key = fact_cldcon 1296 1188 !Config Desc = … … 1443 1335 CALL getin('rad_chau2',rad_chau2_omp) 1444 1336 1445 !1446 !Config Key = t_glace_min1447 !Config Desc =1448 !Config Def = 258.1449 !Config Help =1450 !1451 t_glace_min_omp = 258.1452 CALL getin('t_glace_min',t_glace_min_omp)1453 1454 !1455 !Config Key = t_glace_max1456 !Config Desc =1457 !Config Def = 273.131458 !Config Help =1459 !1460 t_glace_max_omp = 273.131461 CALL getin('t_glace_max',t_glace_max_omp)1462 1463 !1464 !Config Key = exposant_glace1465 !Config Desc =1466 !Config Def = 2.1467 !Config Help =1468 !1469 exposant_glace_omp = 1.1470 CALL getin('exposant_glace',exposant_glace_omp)1471 1472 !1473 !Config Key = iflag_gammasat1474 !Config Desc =1475 !Config Def = 01476 !Config Help =1477 !1478 iflag_gammasat_omp=01479 CALL getin('iflag_gammasat',iflag_gammasat_omp)1480 1481 1482 !1483 !Config Key = iflag_t_glace1484 !Config Desc =1485 !Config Def = 01486 !Config Help =1487 !1488 iflag_t_glace_omp = 01489 CALL getin('iflag_t_glace',iflag_t_glace_omp)1490 1491 !1492 !Config Key = iflag_cloudth_vert1493 !Config Desc =1494 !Config Def = 01495 !Config Help =1496 !1497 iflag_cloudth_vert_omp = 01498 CALL getin('iflag_cloudth_vert',iflag_cloudth_vert_omp)1499 1500 !1501 !Config Key = iflag_rain_incloud_vol1502 !Config Desc =1503 !Config Def = 01504 !Config Help =1505 !1506 iflag_rain_incloud_vol_omp = 01507 CALL getin('iflag_rain_incloud_vol',iflag_rain_incloud_vol_omp)1508 1509 !1510 !Config Key = iflag_vice1511 !Config Desc =1512 !Config Def = 01513 !Config Help =1514 !1515 iflag_vice_omp = 01516 CALL getin('iflag_vice',iflag_vice_omp)1517 1337 1518 1338 !Config Key = iflag_rei … … 1695 1515 CALL getin('iflag_pbl',iflag_pbl_omp) 1696 1516 1517 iflag_physiq_omp = 0 ! 0: std, 1: with physiqex output, 2: for physiqex 1518 CALL getin('iflag_physiq',iflag_physiq_omp) 1519 1697 1520 !FC 1698 1521 !Config Key = ifl_pbltree … … 1744 1567 nsplit_thermals_omp = 1 1745 1568 CALL getin('nsplit_thermals',nsplit_thermals_omp) 1746 1747 !Config Key = alp_bl_k 1748 !Config Desc = 1749 !Config Def = 0. 1750 !Config Help = 1751 ! 1569 ! 1570 !Config Key = nsplit_thermals 1571 !Config Desc = 1572 !Config Def = 0 1573 !Config Help = 1752 1574 alp_bl_k_omp = 1. 1753 1575 CALL getin('alp_bl_k',alp_bl_k_omp) … … 2390 2212 !Config Help = ... 2391 2213 2214 2215 2216 ok_bs_omp = .FALSE. 2217 CALL getin('ok_bs', ok_bs_omp) 2218 ! 2219 !Config Key = ok_bs_omp 2220 !Config Desc = include blowing snow 2221 !Config Def = .FALSE. 2222 !Config Help = ... 2223 2224 2225 ok_rad_bs_omp = .FALSE. 2226 CALL getin('ok_rad_bs', ok_rad_bs_omp) 2227 ! 2228 !Config Key = ok_rad_bs_omp 2229 !Config Desc = include blowing snow radiative effect 2230 !Config Def = .FALSE. 2231 !Config Help = ... 2392 2232 2393 2233 ecrit_LES_omp = 1./8. … … 2477 2317 iflag_ener_conserv = iflag_ener_conserv_omp 2478 2318 ok_conserv_q = ok_conserv_q_omp 2479 iflag_fisrtilp_qsat = iflag_fisrtilp_qsat_omp2480 iflag_bergeron = iflag_bergeron_omp2481 2482 2319 epmax = epmax_omp 2483 2320 coef_epmax_cape = coef_epmax_cape_omp 2484 2321 ok_adj_ema = ok_adj_ema_omp 2485 2322 iflag_clw = iflag_clw_omp 2486 cld_lc_lsc = cld_lc_lsc_omp2487 cld_lc_con = cld_lc_con_omp2488 cld_tau_lsc = cld_tau_lsc_omp2489 cld_tau_con = cld_tau_con_omp2490 ffallv_lsc = ffallv_lsc_omp2491 ffallv_con = ffallv_con_omp2492 coef_eva = coef_eva_omp2493 coef_eva_i = coef_eva_i_omp2494 reevap_ice = reevap_ice_omp2495 iflag_pdf = iflag_pdf_omp2496 2323 solarlong0 = solarlong0_omp 2497 2324 qsol0 = qsol0_omp … … 2504 2331 inertie_lic = inertie_lic_omp 2505 2332 inertie_sno = inertie_sno_omp 2333 ok_bs = ok_bs_omp 2334 ok_rad_bs=ok_rad_bs_omp 2506 2335 rad_froid = rad_froid_omp 2507 2336 rad_chau1 = rad_chau1_omp 2508 2337 rad_chau2 = rad_chau2_omp 2509 t_glace_min = t_glace_min_omp2510 t_glace_max = t_glace_max_omp2511 exposant_glace = exposant_glace_omp2512 iflag_gammasat=iflag_gammasat_omp2513 iflag_t_glace = iflag_t_glace_omp2514 iflag_cloudth_vert=iflag_cloudth_vert_omp2515 iflag_rain_incloud_vol=iflag_rain_incloud_vol_omp2516 iflag_vice=iflag_vice_omp2517 2338 iflag_rei=iflag_rei_omp 2518 2339 iflag_ice_thermo = iflag_ice_thermo_omp … … 2533 2354 pmagic = pmagic_omp 2534 2355 iflag_pbl = iflag_pbl_omp 2356 iflag_physiq = iflag_physiq_omp 2535 2357 iflag_pbl_split = iflag_pbl_split_omp 2536 2358 !FC … … 2907 2729 WRITE(lunout,*) ' iflag_ener_conserv=',iflag_ener_conserv 2908 2730 WRITE(lunout,*) ' ok_conserv_q=',ok_conserv_q 2909 WRITE(lunout,*) ' iflag_fisrtilp_qsat=',iflag_fisrtilp_qsat2910 WRITE(lunout,*) ' iflag_bergeron=',iflag_bergeron2911 2731 WRITE(lunout,*) ' epmax = ', epmax 2912 2732 WRITE(lunout,*) ' coef_epmax_cape = ', coef_epmax_cape 2913 2733 WRITE(lunout,*) ' ok_adj_ema = ', ok_adj_ema 2914 2734 WRITE(lunout,*) ' iflag_clw = ', iflag_clw 2915 WRITE(lunout,*) ' cld_lc_lsc = ', cld_lc_lsc2916 WRITE(lunout,*) ' cld_lc_con = ', cld_lc_con2917 WRITE(lunout,*) ' cld_tau_lsc = ', cld_tau_lsc2918 WRITE(lunout,*) ' cld_tau_con = ', cld_tau_con2919 WRITE(lunout,*) ' ffallv_lsc = ', ffallv_lsc2920 WRITE(lunout,*) ' ffallv_con = ', ffallv_con2921 WRITE(lunout,*) ' coef_eva = ', coef_eva2922 WRITE(lunout,*) ' coef_eva_i = ', coef_eva_i2923 WRITE(lunout,*) ' reevap_ice = ', reevap_ice2924 WRITE(lunout,*) ' iflag_pdf = ', iflag_pdf2925 2735 WRITE(lunout,*) ' iflag_cld_th = ', iflag_cld_th 2926 2736 WRITE(lunout,*) ' iflag_cld_cv = ', iflag_cld_cv … … 2944 2754 WRITE(lunout,*) ' rad_chau1 = ',rad_chau1 2945 2755 WRITE(lunout,*) ' rad_chau2 = ',rad_chau2 2946 WRITE(lunout,*) ' t_glace_min = ',t_glace_min2947 WRITE(lunout,*) ' t_glace_max = ',t_glace_max2948 WRITE(lunout,*) ' exposant_glace = ',exposant_glace2949 WRITE(lunout,*) ' iflag_gammasat = ',iflag_gammasat2950 WRITE(lunout,*) ' iflag_t_glace = ',iflag_t_glace2951 WRITE(lunout,*) ' iflag_cloudth_vert = ',iflag_cloudth_vert2952 WRITE(lunout,*) ' iflag_rain_incloud_vol = ',iflag_rain_incloud_vol2953 WRITE(lunout,*) ' iflag_vice = ',iflag_vice2954 2756 WRITE(lunout,*) ' iflag_rei = ',iflag_rei 2955 2757 WRITE(lunout,*) ' iflag_ice_thermo = ',iflag_ice_thermo … … 2992 2794 WRITE(lunout,*) ' freq_calNMC = ',freq_calNMC 2993 2795 WRITE(lunout,*) ' iflag_pbl = ', iflag_pbl 2796 WRITE(lunout,*) ' iflag_physiq = ', iflag_physiq 2994 2797 !FC 2995 2798 WRITE(lunout,*) ' ifl_pbltree = ', ifl_pbltree … … 3017 2820 WRITE(lunout,*) ' inertie_lic = ', inertie_lic 3018 2821 WRITE(lunout,*) ' inertie_sno = ', inertie_sno 2822 WRITE(lunout,*) ' ok_bs = ', ok_bs 2823 WRITE(lunout,*) ' ok_rad_bs = ', ok_rad_bs 3019 2824 WRITE(lunout,*) ' f_cdrag_ter = ',f_cdrag_ter 3020 2825 WRITE(lunout,*) ' f_cdrag_oce = ',f_cdrag_oce -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/mod_1D_cases_read2.F90
r4288 r4669 1135 1135 ! endif 1136 1136 timeit=(day-day_ju_ini_cas)*86400 1137 print *,'day=',day1138 print *,'day_ju_ini_cas=',day_ju_ini_cas1139 print *,'pdt_cas=',pdt_cas1140 print *,'timeit=',timeit1141 print *,'nt_cas=',nt_cas1137 !print *,'day=',day 1138 !print *,'day_ju_ini_cas=',day_ju_ini_cas 1139 !print *,'pdt_cas=',pdt_cas 1140 !print *,'timeit=',timeit 1141 !print *,'nt_cas=',nt_cas 1142 1142 1143 1143 ! Determine the closest observation times: … … 1155 1155 time_cas1=(it_cas1-1)*pdt_cas 1156 1156 time_cas2=(it_cas2-1)*pdt_cas 1157 print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas21157 !print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2 1158 1158 1159 1159 if (it_cas1 .gt. nt_cas) then … … 1350 1350 ! endif 1351 1351 timeit=(day-day_ju_ini_cas)*86400 1352 print *,'day=',day1353 print *,'day_ju_ini_cas=',day_ju_ini_cas1354 print *,'pdt_cas=',pdt_cas1355 print *,'timeit=',timeit1356 print *,'nt_cas=',nt_cas1352 !print *,'day=',day 1353 !print *,'day_ju_ini_cas=',day_ju_ini_cas 1354 !print *,'pdt_cas=',pdt_cas 1355 !print *,'timeit=',timeit 1356 !print *,'nt_cas=',nt_cas 1357 1357 1358 1358 ! Determine the closest observation times: … … 1370 1370 time_cas1=(it_cas1-1)*pdt_cas 1371 1371 time_cas2=(it_cas2-1)*pdt_cas 1372 print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas1373 print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas21372 !print *,'timeit,pdt_cas,nt_cas=',timeit,pdt_cas,nt_cas 1373 !print *,'it_cas1,it_cas2,time_cas1,time_cas2=',it_cas1,it_cas2,time_cas1,time_cas2 1374 1374 1375 1375 if (it_cas1 .gt. nt_cas) then … … 1403 1403 t_prof_cas(k) = t_cas(k,it_cas2) & 1404 1404 -frac*(t_cas(k,it_cas2)-t_cas(k,it_cas1)) 1405 print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2)1405 !print *,'k,frac,plev_cas1,plev_cas2=',k,frac,plev_cas(k,it_cas1),plev_cas(k,it_cas2) 1406 1406 theta_prof_cas(k) = theta_cas(k,it_cas2) & 1407 1407 -frac*(theta_cas(k,it_cas2)-theta_cas(k,it_cas1)) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/old_lmdz1d.F90
r4361 r4669 13 13 ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, & 14 14 rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, & 15 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &15 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, rneb_ancien, & 16 16 wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, & 17 17 wake_deltaq, wake_deltat, wake_s, wake_dens, & … … 920 920 u_ancien(1,:)=u(:) 921 921 v_ancien(1,:)=v(:) 922 rneb_ancien(1,:)=0. 922 923 923 924 u10m=0. … … 945 946 !------------------------------------------------------------------------ 946 947 !Al1 =============== restart option ========================== 948 iflag_physiq=0 949 call getin('iflag_physiq',iflag_physiq) 950 947 951 if (.not.restart) then 948 952 iflag_pbl = 5 … … 1248 1252 !! Increment state variables 1249 1253 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1250 print*,'OLDLMDZ1D AANT'1251 1254 IF (flag_inhib_forcing == 0) then ! if tendency of forcings should be added 1252 print*,'OLDLMDZ1D ARES' , forcing_sandu1253 1255 1254 1256 ! pour les cas sandu et astex, on reclacule u,v,q,temp et teta dans 1D_nudge_sandu_astex.h -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/dyn1d/scm.F90
r4361 r4669 9 9 ftsol, beta_aridity, pbl_tke, pctsrf, radsol, rain_fall, snow_fall, ratqs, & 10 10 rnebcon, rugoro, sig1, w01, solaire_etat0, sollw, sollwdown, & 11 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, &11 solsw, solswfdiff, t_ancien, q_ancien, u_ancien, v_ancien, rneb_ancien, & 12 12 wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, & 13 13 wake_deltaq, wake_deltat, wake_s, wake_dens, & … … 678 678 u_ancien(1,:)=u(:) 679 679 v_ancien(1,:)=v(:) 680 rneb_ancien(1,:)=0. 680 681 681 682 u10m=0. … … 703 704 !------------------------------------------------------------------------ 704 705 !Al1 =============== restart option ====================================== 706 iflag_physiq=0 707 call getin('iflag_physiq',iflag_physiq) 708 705 709 if (.not.restart) then 706 710 iflag_pbl = 5 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_aerosol_optics.F90
r4489 r4669 53 53 ! properties and average to the spectral intervals of the 54 54 ! current gas-optics scheme 55 ! call setup_general_aerosol_optics(config) 56 call setup_general_aerosol_optics_lmdz(config,trim(config%aerosol_optics_file_name)) 55 call setup_general_aerosol_optics(config) 57 56 else 58 57 ! Read file containing optical properties already in the bands … … 334 333 335 334 end subroutine setup_general_aerosol_optics 336 337 !---------------------------------------------------------------------338 ! Read LMDZ file containing high spectral resolution optical properties339 ! and average to the spectral intervals of the current gas-optics340 ! scheme341 subroutine setup_general_aerosol_optics_lmdz(config,file_name)342 343 use parkind1, only : jprb344 use yomhook, only : lhook, dr_hook345 ! use easy_netcdf, only : netcdf_file346 use radiation_config, only : config_type347 use radiation_aerosol_optics_data, only : aerosol_optics_type348 use radiation_spectral_definition, only : SolarReferenceTemperature, &349 & TerrestrialReferenceTemperature350 use radiation_io, only : nulout351 use netcdf95, only: nf95_open, nf95_inq_grp_full_ncid, nf95_close, &352 nf95_inq_dimid, nf95_inq_varid, nf95_inquire_dimension, &353 nf95_get_var, nf95_gw_var354 use netcdf, only: nf90_nowrite355 356 357 type(config_type), intent(inout), target :: config358 359 ! ! The NetCDF file containing the aerosol optics data360 ! type(netcdf_file) :: file361 362 character(len=*), intent(in):: file_name363 ! NetCDF file containing the aerosol optics data364 365 ! Wavenumber points in NetCDF file366 real(jprb), allocatable :: wavenumber(:) ! cm-1367 368 ! Hydrophilic aerosol properties369 real(jprb), allocatable :: mass_ext_philic(:,:,:) ! Mass-ext coefficient (m2 kg-1)370 real(jprb), allocatable :: ssa_philic(:,:,:) ! Single-scattering albedo371 real(jprb), allocatable :: g_philic(:,:,:) ! Asymmetry factor372 real(jprb), allocatable :: lidar_ratio_philic(:,:,:) ! Lidar ratio (sr)373 374 ! Hydrophobic aerosol properties375 real(jprb), allocatable :: mass_ext_phobic(:,:) ! Mass-ext coefficient (m2 kg-1)376 real(jprb), allocatable :: ssa_phobic(:,:) ! Single-scattering albedo377 real(jprb), allocatable :: g_phobic(:,:) ! Asymmetry factor378 real(jprb), allocatable :: lidar_ratio_phobic(:,:) ! Lidar ratio (sr)379 380 ! Mapping matrix between optical properties at the wavenumbers in381 ! the file, and spectral intervals used by the gas-optics scheme382 real(jprb), allocatable :: mapping(:,:)383 384 ! Pointer to the aerosol optics coefficients for brevity of access385 type(aerosol_optics_type), pointer :: ao386 387 ! Target monochromatic wavenumber for interpolation (cm-1)388 real(jprb) :: wavenumber_target389 390 ! Number of spectral points describing aerosol properties in the391 ! shortwave and longwave392 integer :: nspecsw, nspeclw393 394 ! Number of monochromatic wavelengths required395 integer :: nmono396 397 integer :: n_type_philic, n_type_phobic, nrh, nwn398 integer :: jtype, jwl, iwn399 400 ! Weight of first point in interpolation401 real(jprb) :: weight1402 403 real(jprb) :: hook_handle404 405 ! Local:406 integer ncid, grpid, dimid, varid407 408 if (lhook) call dr_hook('radiation_aerosol_optics:setup_general_aerosol_optics',0,hook_handle)409 410 ao => config%aerosol_optics411 412 ao%use_hydrophilic = .true.413 ao%use_monochromatic = .true.414 print*,'file_name= ',file_name415 call nf95_open(file_name, nf90_nowrite, ncid)416 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic", grpid)417 call nf95_inq_dimid(grpid, "hur", dimid)418 call nf95_inquire_dimension(grpid, dimid, nclen = ao%nrh)419 ! allocate(ao%rh_lower(ao%nrh))420 call nf95_inq_varid(grpid, "hur_bounds", varid)421 call nf95_get_var(grpid, varid, ao%rh_lower, count_nc = [1, ao%nrh])422 423 ! Hydrophilic/LW_bands:424 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/LW_bands", grpid)425 call nf95_inq_varid(grpid, "asymmetry", varid)426 call nf95_gw_var(grpid, varid, ao%g_lw_philic)427 call nf95_inq_varid(grpid, "single_scat_alb", varid)428 call nf95_gw_var(grpid, varid, ao%ssa_lw_philic)429 call nf95_inq_varid(grpid, "mass_ext", varid)430 call nf95_gw_var(grpid, varid, ao%mass_ext_lw_philic)431 432 ! Hydrophilic/SW_bands:433 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/SW_bands", grpid)434 call nf95_inq_varid(grpid, "asymmetry", varid)435 call nf95_gw_var(grpid, varid, ao%g_sw_philic)436 ao%g_sw_philic = cshift(ao%g_sw_philic, 1)437 call nf95_inq_varid(grpid, "single_scat_alb", varid)438 call nf95_gw_var(grpid, varid, ao%ssa_sw_philic)439 ao%g_sw_philic = cshift(ao%ssa_sw_philic, 1)440 call nf95_inq_varid(grpid, "mass_ext", varid)441 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_philic)442 ao%g_sw_philic = cshift(ao%mass_ext_sw_philic, 1)443 444 ! Hydrophilic/Monochromatic:445 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic/Monochromatic", grpid)446 call nf95_inq_varid(grpid, "mass_ext", varid)447 call nf95_gw_var(grpid, varid, ao%mass_ext_mono_philic)448 449 ! Hydrophobic/LW_bands:450 call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/LW_bands", grpid)451 call nf95_inq_varid(grpid, "asymmetry", varid)452 call nf95_gw_var(grpid, varid, ao%g_lw_phobic)453 call nf95_inq_varid(grpid, "single_scat_alb", varid)454 call nf95_gw_var(grpid, varid, ao%ssa_lw_phobic)455 call nf95_inq_varid(grpid, "mass_ext", varid)456 call nf95_gw_var(grpid, varid, ao%mass_ext_lw_phobic)457 458 ! Hydrophobic/SW_bands:459 call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/SW_bands", grpid)460 call nf95_inq_varid(grpid, "asymmetry", varid)461 call nf95_gw_var(grpid, varid, ao%g_sw_phobic)462 ao%g_sw_phobic = cshift(ao%g_sw_phobic, 1)463 call nf95_inq_varid(grpid, "single_scat_alb", varid)464 call nf95_gw_var(grpid, varid, ao%ssa_sw_phobic)465 ao%g_sw_phobic = cshift(ao%ssa_sw_phobic, 1)466 call nf95_inq_varid(grpid, "mass_ext", varid)467 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_phobic)468 ao%g_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1)469 ! AI ATTENTION470 call nf95_inq_varid(grpid, "wavenumber", varid)471 call nf95_gw_var(grpid, varid, wavenumber)472 473 ! Hydrophobic/Monochromatic:474 call nf95_inq_grp_full_ncid(ncid, "Hydrophobic/Monochromatic", grpid)475 call nf95_inq_varid(grpid, "mass_ext", varid)476 call nf95_gw_var(grpid, varid, ao%mass_ext_mono_phobic)477 478 ! call file%get('wavenumber', wavenumber)479 ! nwn = size(wavenumber)480 481 ! call file%get_global_attribute('description_hydrophobic', &482 ! & ao%description_phobic_str)483 484 485 ! call file%get('relative_humidity1', ao%rh_lower)486 487 ! call file%get_global_attribute('description_hydrophilic', &488 ! & ao%description_philic_str)489 490 ! Close aerosol scattering file491 ! call file%close()492 493 call nf95_close(ncid)494 495 ! Get array sizes496 ! ao%n_bands_lw = size(ao%mass_ext_lw_phobic, 1)497 ! ao%n_bands_sw = size(ao%mass_ext_sw_phobic, 1)498 ! ao%n_mono_wl = size(ao%mass_ext_mono_phobic, 1)499 ! ao%n_type_phobic = size(ao%mass_ext_lw_phobic, 2)500 ! ao%n_type_philic = size(ao%mass_ext_lw_philic, 3)501 502 ! Allocate memory for mapping arrays503 ! ao%ntype = ao%n_type_phobic + ao%n_type_philic504 ! allocate(ao%iclass(ao%ntype))505 ! allocate(ao%itype(ao%ntype))506 507 ! ao%iclass = IAerosolClassUndefined508 ! ao%itype = 0509 510 n_type_phobic = size(mass_ext_phobic, 2)511 if (ao%use_hydrophilic) then512 n_type_philic = size(mass_ext_philic, 3)513 nrh = size(ao%rh_lower)514 else515 n_type_philic = 0516 nrh = 0517 end if518 519 if (config%do_cloud_aerosol_per_sw_g_point) then520 nspecsw = config%gas_optics_sw%spectral_def%ng521 else522 nspecsw = config%gas_optics_sw%spectral_def%nband523 end if524 525 if (config%do_cloud_aerosol_per_lw_g_point) then526 nspeclw = config%gas_optics_lw%spectral_def%ng527 else528 nspeclw = config%gas_optics_lw%spectral_def%nband529 end if530 531 if (allocated(ao%wavelength_mono)) then532 ! Monochromatic wavelengths also required533 nmono = size(ao%wavelength_mono)534 else535 nmono = 0536 end if537 538 call ao%allocate(n_type_phobic, n_type_philic, nrh, nspeclw, nspecsw, nmono)539 540 if (config%do_sw) then541 call config%gas_optics_sw%spectral_def%calc_mapping(SolarReferenceTemperature, &542 & wavenumber, mapping, use_bands=(.not. config%do_cloud_aerosol_per_sw_g_point))543 544 ao%mass_ext_sw_phobic = matmul(mapping, mass_ext_phobic)545 ao%ssa_sw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic) &546 & / ao%mass_ext_sw_phobic547 ao%g_sw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic*g_phobic) &548 & / (ao%mass_ext_sw_phobic*ao%ssa_sw_phobic)549 550 if (ao%use_hydrophilic) then551 do jtype = 1,n_type_philic552 ao%mass_ext_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype))553 ao%ssa_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &554 & *ssa_philic(:,:,jtype)) &555 & / ao%mass_ext_sw_philic(:,:,jtype)556 ao%g_sw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &557 & *ssa_philic(:,:,jtype)*g_philic(:,:,jtype)) &558 & / (ao%mass_ext_sw_philic(:,:,jtype)*ao%ssa_sw_philic(:,:,jtype))559 end do560 end if561 end if562 if (config%do_lw) then563 call config%gas_optics_lw%spectral_def%calc_mapping(TerrestrialReferenceTemperature, &564 & wavenumber, mapping, use_bands=(.not. config%do_cloud_aerosol_per_lw_g_point))565 566 ao%mass_ext_lw_phobic = matmul(mapping, mass_ext_phobic)567 ao%ssa_lw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic) &568 & / ao%mass_ext_lw_phobic569 ao%g_lw_phobic = matmul(mapping, mass_ext_phobic*ssa_phobic*g_phobic) &570 & / (ao%mass_ext_lw_phobic*ao%ssa_lw_phobic)571 572 if (ao%use_hydrophilic) then573 do jtype = 1,n_type_philic574 ao%mass_ext_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype))575 ao%ssa_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &576 & *ssa_philic(:,:,jtype)) &577 & / ao%mass_ext_lw_philic(:,:,jtype)578 ao%g_lw_philic(:,:,jtype) = matmul(mapping, mass_ext_philic(:,:,jtype) &579 & *ssa_philic(:,:,jtype)*g_philic(:,:,jtype)) &580 & / (ao%mass_ext_lw_philic(:,:,jtype)*ao%ssa_lw_philic(:,:,jtype))581 end do582 end if583 end if584 585 if (allocated(ao%wavelength_mono)) then586 ! Monochromatic wavelengths also required587 do jwl = 1,nmono588 ! Wavelength (m) to wavenumber (cm-1)589 wavenumber_target = 0.01_jprb / ao%wavelength_mono(jwl)590 ! Find index to first interpolation point, and its weight591 if (wavenumber_target <= wavenumber(1)) then592 weight1 = 1.0_jprb593 iwn = 1594 else if (wavenumber_target >= wavenumber(nwn)) then595 iwn = nwn-1596 weight1 = 0.0_jprb597 else598 iwn = 1599 do while (wavenumber(iwn+1) < wavenumber_target .and. iwn < nwn-1)600 iwn = iwn + 1601 end do602 weight1 = (wavenumber(iwn+1)-wavenumber_target) &603 & / (wavenumber(iwn+1)-wavenumber(iwn))604 end if605 ! Linear interpolation606 ao%mass_ext_mono_phobic(jwl,:) = weight1 * mass_ext_phobic(iwn,:) &607 & + (1.0_jprb - weight1)* mass_ext_phobic(iwn+1,:)608 ao%ssa_mono_phobic(jwl,:) = weight1 * ssa_phobic(iwn,:) &609 & + (1.0_jprb - weight1)* ssa_phobic(iwn+1,:)610 ao%g_mono_phobic(jwl,:) = weight1 * g_phobic(iwn,:) &611 & + (1.0_jprb - weight1)* g_phobic(iwn+1,:)612 ao%lidar_ratio_mono_phobic(jwl,:) = weight1 * lidar_ratio_phobic(iwn,:) &613 & + (1.0_jprb - weight1)* lidar_ratio_phobic(iwn+1,:)614 if (ao%use_hydrophilic) then615 ao%mass_ext_mono_philic(jwl,:,:) = weight1 * mass_ext_philic(iwn,:,:) &616 & + (1.0_jprb - weight1)* mass_ext_philic(iwn+1,:,:)617 ao%ssa_mono_philic(jwl,:,:) = weight1 * ssa_philic(iwn,:,:) &618 & + (1.0_jprb - weight1)* ssa_philic(iwn+1,:,:)619 ao%g_mono_philic(jwl,:,:) = weight1 * g_philic(iwn,:,:) &620 & + (1.0_jprb - weight1)* g_philic(iwn+1,:,:)621 ao%lidar_ratio_mono_philic(jwl,:,:) = weight1 * lidar_ratio_philic(iwn,:,:) &622 & + (1.0_jprb - weight1)* lidar_ratio_philic(iwn+1,:,:)623 end if624 end do625 end if626 627 ! Deallocate memory local to this routine628 deallocate(mass_ext_phobic)629 deallocate(ssa_phobic)630 deallocate(g_phobic)631 deallocate(lidar_ratio_phobic)632 if (ao%use_hydrophilic) then633 deallocate(mass_ext_philic)634 deallocate(ssa_philic)635 deallocate(g_philic)636 deallocate(lidar_ratio_philic)637 end if638 639 if (lhook) call dr_hook('radiation_aerosol_optics:setup_general_aerosol_optics',1,hook_handle)640 641 end subroutine setup_general_aerosol_optics_lmdz642 643 335 644 336 !--------------------------------------------------------------------- -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_cloud_generator.F90
r4489 r4669 541 541 use radiation_pdf_sampler, only : pdf_sampler_type 542 542 implicit none 543 #if defined(__GFORTRAN__) || defined(__PGI) || defined(__NEC__)544 #else545 !$omp declare simd(sample_from_pdf_simd) uniform(this) &546 !$omp linear(ref(fsd)) linear(ref(cdf))547 #endif548 543 type(pdf_sampler_type), intent(in) :: this 549 544 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/radiation_scheme.F90
r4489 r4669 87 87 & NWEIGHT_PAR, IBAND_PAR, WEIGHT_PAR, & 88 88 & ITYPE_TROP_BG_AER, TROP_BG_AER_MASS_EXT, & 89 & ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT 89 & ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT, ISolverSpartacus 90 90 ! Commentes : jour, date de la simulation 91 91 !USE YOMRIP0 , ONLY : NINDAT … … 105 105 106 106 USE mod_phys_lmdz_para 107 USE setup_config_from_lmdz, ONLY : driver_config_type 107 108 108 109 IMPLICIT NONE … … 269 270 ! Ratio of cloud overlap decorrelation length for cloud water 270 271 ! inhomogeneities to that for cloud boundaries (typically 0.5) 271 REAL(KIND=JPRB) :: ZDECORR_LEN_RATIO 272 !REAL(KIND=JPRB) :: ZDECORR_LEN_RATIO = 0.5_jprb 273 274 !AI mai 2023 275 ! A mettre dans namelist 276 !real(jprb) :: high_inv_effective_size 277 !real(jprb) :: middle_inv_effective_size 278 !real(jprb) :: low_inv_effective_size 279 280 !real(jprb) :: cloud_inhom_separation_factor 281 !real(jprb) :: cloud_separation_scale_surface 282 !real(jprb) :: cloud_separation_scale_toa 283 !real(jprb) :: cloud_separation_scale_power 272 284 273 285 ! The surface net longwave flux if the surface was a black body, used … … 290 302 291 303 ! AI ATTENTION 292 real(jprb), parameter :: frac_std = 0.75 304 ! A mettre dans namelist 305 !real(jprb), parameter :: frac_std = 0.75 293 306 294 307 ! Name of file names specified on command line … … 301 314 !$OMP THREADPRIVATE(debut_ecrad) 302 315 316 type(driver_config_type) :: driver_config 303 317 ! Import time functions for iseed calculation 304 318 ! AI ATTENTION propre a ifs … … 342 356 ! AI appel radiation_setup 343 357 call SETUP_RADIATION_SCHEME(loutput) 358 ! Read "radiation_driver" namelist into radiation driver config type 359 file_name="namelist_ecrad" 360 call driver_config%read(file_name) 361 362 if (rad_config%i_solver_sw == ISolverSPARTACUS & 363 & .or. rad_config%i_solver_lw == ISolverSPARTACUS) then 364 print*,'Solveur SW: ', rad_config%i_solver_sw 365 print*,'Solveur LW: ', rad_config%i_solver_lw 366 if (driver_config%ok_effective_size) then 367 print*,'low_inv_effective_size = ',driver_config%low_inv_effective_size 368 print*,'middle_inv_effective_size = ',driver_config%middle_inv_effective_size 369 print*,'high_inv_effective_size = ',driver_config%high_inv_effective_size 370 else if (driver_config%ok_separation) then 371 print*,'cloud_separation_scale_surface =',driver_config%cloud_separation_scale_surface 372 print*,'cloud_separation_scale_toa =',driver_config%cloud_separation_scale_toa 373 print*,'cloud_separation_scale_power =',driver_config%cloud_separation_scale_power 374 print*,'cloud_inhom_separation_factor =',driver_config%cloud_inhom_separation_factor 375 endif 376 endif 344 377 345 378 if (lprint_config) then … … 450 483 cloud%fraction(KIDIA:KFDIA,:) = PCLOUD_FRAC(KIDIA:KFDIA,:) 451 484 452 !AI ATTENTION a voir avec JL 453 ! Compute effective radii and convert to metres 454 !CALL LIQUID_EFFECTIVE_RADIUS(KIDIA, KFDIA, KLON, KLEV, & 455 ! & PPRESSURE, PTEMPERATURE, PCLOUD_FRAC, PQ_LIQUID, PQ_RAIN, & 456 ! & PLAND_SEA_MASK, PCCN_LAND, PCCN_SEA, & 457 ! & ZRE_LIQUID_UM) 485 !!! ok AI ATTENTION a voir avec JL 486 ! Compute effective radi and convert to metres 487 ! AI. : on passe directement les champs de LMDZ 458 488 cloud%re_liq(KIDIA:KFDIA,:) = ZRE_LIQUID_UM(KIDIA:KFDIA,:) 459 460 !CALL ICE_EFFECTIVE_RADIUS(KIDIA, KFDIA, KLON, KLEV, &461 ! & PPRESSURE, PTEMPERATURE, PCLOUD_FRAC, PQ_ICE, PQ_SNOW, PGEMU, &462 ! & ZRE_ICE_UM)463 489 cloud%re_ice(KIDIA:KFDIA,:) = ZRE_ICE_UM(KIDIA:KFDIA,:) 464 490 … … 468 494 ! decorrelation lengths for cloud water content inhomogeneities and 469 495 ! cloud boundaries, and set it in the "rad_config" object. 496 ! IFS : 470 497 !CALL CLOUD_OVERLAP_DECORR_LEN(KIDIA, KFDIA, KLON, PGEMU, YRERAD%NDECOLAT, & 471 498 ! & ZDECORR_LEN_KM, PDECORR_LEN_RATIO=ZDECORR_LEN_RATIO) 472 473 ! AI ATTENTION (valeur lue dans namelist) 474 !ZDECORR_LEN_RATIO = 0.5_JPRB 475 !rad_config%cloud_inhom_decorr_scaling = ZDECORR_LEN_RATIO 499 ! AI valeur dans namelist 500 ! rad_config%cloud_inhom_decorr_scaling = ZDECORR_LEN_RATIO 501 476 502 !AI ATTENTION meme valeur que dans offline 477 ZDECORR_LEN_KM = 2000.0_JPRB 503 ! A mettre dans namelist 504 ZDECORR_LEN_KM = driver_config%overlap_decorr_length 478 505 DO JLON = KIDIA,KFDIA 479 506 CALL cloud%set_overlap_param(thermodynamics, & 480 & 481 & 507 & ZDECORR_LEN_KM(JLON), & 508 & istartcol=JLON, iendcol=JLON) 482 509 ENDDO 483 510 511 ! IFS : 484 512 ! Cloud water content fractional standard deviation is configurable 485 513 ! from namelist NAERAD but must be globally constant. Before it was … … 487 515 !CALL cloud%create_fractional_std(KLON, KLEV, YRERAD%RCLOUD_FRAC_STD) 488 516 ! AI ATTENTION frac_std=0.75 meme valeur que dans la version offline 489 CALL cloud%create_fractional_std(KLON, KLEV, frac_std) 490 517 CALL cloud%create_fractional_std(KLON, KLEV, driver_config%frac_std) 518 519 if (rad_config%i_solver_sw == ISolverSPARTACUS & 520 & .or. rad_config%i_solver_lw == ISolverSPARTACUS) then 491 521 ! AI ! Read cloud properties needed by SPARTACUS 522 !AI ATTENTION meme traitement dans le version offline 523 492 524 ! By default mid and high cloud effective size is 10 km 493 525 !CALL cloud%create_inv_cloud_effective_size(KLON,KLEV,1.0_JPRB/10000.0_JPRB) 494 ! But for boundary clouds (eta > 0.8) we set it to 1 km 495 !DO JLEV = 1,KLEV 496 ! DO JLON = KIDIA,KFDIA 497 ! IF (PPRESSURE(JLON,JLEV) > 0.8_JPRB * PPRESSURE_H(JLON,KLEV+1)) THEN 498 ! cloud%inv_cloud_effective_size(JLON,JLEV) = 1.0e-3_JPRB 499 ! ENDIF 500 ! ENDDO 501 !ENDDO 502 !AI ATTENTION meme traitement dans le version offline 503 call cloud%create_inv_cloud_effective_size_eta(KLON, KLEV, & 526 527 ! if (driver_config%low_inv_effective_size >= 0.0_jprb & 528 ! & .or. driver_config%middle_inv_effective_size >= 0.0_jprb & 529 ! & .or. driver_config%high_inv_effective_size >= 0.0_jprb) then 530 if (driver_config%ok_effective_size) then 531 call cloud%create_inv_cloud_effective_size_eta(klon, klev, & 504 532 & thermodynamics%pressure_hl, & 505 & 0.005_JPRB, & 506 & 0.0001_JPRB, & 507 & 0.0001, 0.8_jprb, 0.45_jprb) 533 & driver_config%low_inv_effective_size, & 534 & driver_config%middle_inv_effective_size, & 535 & driver_config%high_inv_effective_size, 0.8_jprb, 0.45_jprb) 536 ! else if (driver_config%cloud_separation_scale_surface > 0.0_jprb & 537 ! .and. driver_config%cloud_separation_scale_toa > 0.0_jprb) then 538 else if (driver_config%ok_separation) then 539 call cloud%param_cloud_effective_separation_eta(klon, klev, & 540 & thermodynamics%pressure_hl, & 541 & driver_config%cloud_separation_scale_surface, & 542 & driver_config%cloud_separation_scale_toa, & 543 & driver_config%cloud_separation_scale_power, & 544 & driver_config%cloud_inhom_separation_factor) 545 endif 546 endif 508 547 509 548 print*,'******** AEROSOLS (allocate + input) **************************************' -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ecrad/setup_aerosol_optics_lmdz_m.F90
r4489 r4669 29 29 use netcdf95, only: nf95_open, nf95_inq_grp_full_ncid, nf95_close, & 30 30 nf95_inq_dimid, nf95_inq_varid, nf95_inquire_dimension, & 31 nf95_get_var, nf95_gw_var 32 use netcdf, only: nf90_nowrite 31 nf95_get_var, nf95_gw_var, nf95_nowrite 33 32 34 33 type(aerosol_optics_type), intent(out):: ao … … 44 43 ao%use_hydrophilic = .true. 45 44 ao%use_monochromatic = .true. 46 print*,'file_name= ',file_name 47 call nf95_open(file_name, nf90_nowrite, ncid) 45 call nf95_open(file_name, nf95_nowrite, ncid) 48 46 call nf95_inq_grp_full_ncid(ncid, "Hydrophilic", grpid) 49 47 call nf95_inq_dimid(grpid, "hur", dimid) … … 69 67 call nf95_inq_varid(grpid, "single_scat_alb", varid) 70 68 call nf95_gw_var(grpid, varid, ao%ssa_sw_philic) 71 ao% g_sw_philic = cshift(ao%ssa_sw_philic, 1)69 ao%ssa_sw_philic = cshift(ao%ssa_sw_philic, 1) 72 70 call nf95_inq_varid(grpid, "mass_ext", varid) 73 71 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_philic) 74 ao% g_sw_philic = cshift(ao%mass_ext_sw_philic, 1)72 ao%mass_ext_sw_philic = cshift(ao%mass_ext_sw_philic, 1) 75 73 76 74 ! Hydrophilic/Monochromatic: … … 95 93 call nf95_inq_varid(grpid, "single_scat_alb", varid) 96 94 call nf95_gw_var(grpid, varid, ao%ssa_sw_phobic) 97 ao% g_sw_phobic = cshift(ao%ssa_sw_phobic, 1)95 ao%ssa_sw_phobic = cshift(ao%ssa_sw_phobic, 1) 98 96 call nf95_inq_varid(grpid, "mass_ext", varid) 99 97 call nf95_gw_var(grpid, varid, ao%mass_ext_sw_phobic) 100 ao% g_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1)98 ao%mass_ext_sw_phobic = cshift(ao%mass_ext_sw_phobic, 1) 101 99 102 100 ! Hydrophobic/Monochromatic: -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/fisrtilp.F90
r4380 r4669 20 20 ! flag to include modifications to ensure energy conservation (if flag >0) 21 21 USE add_phys_tend_mod, only : fl_cor_ebil 22 USE lscp_ini_mod, ONLY: iflag_t_glace,t_glace_min, t_glace_max, exposant_glace 23 USE lscp_ini_mod, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol 24 USE lscp_ini_mod, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con 25 USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 26 USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf 27 28 22 29 IMPLICIT none 23 30 !====================================================================== … … 47 54 !====================================================================== 48 55 include "YOMCST.h" 49 include "fisrtilp.h"50 include "nuage.h" ! JBM (3/14)51 52 56 ! 53 57 ! Principaux inputs: … … 228 232 ! (Heymsfield & Donner, 1990) 229 233 REAL zzz 230 231 234 include "YOETHF.h" 232 235 include "FCTTRE.h" -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/fonte_neige_mod.F90
r3900 r4669 164 164 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain 165 165 REAL, DIMENSION(klon), INTENT(IN) :: precip_snow 166 167 ! Input/Output variables166 167 ! Input/Output variables 168 168 !**************************************************************************************** 169 169 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ice_sursat_mod.F90
r4260 r4669 308 308 INCLUDE "YOETHF.h" 309 309 INCLUDE "FCTTRE.h" 310 INCLUDE "fisrtilp.h"311 310 INCLUDE "clesphys.h" 312 311 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/icefrac_lsc_mod.F90
r3102 r4669 17 17 18 18 USE print_control_mod, ONLY: lunout, prt_level 19 INCLUDE "nuage.h" 20 21 ! nuage.h contains: 19 USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace 20 ! lscp_ini contains: 22 21 ! t_glace_min: if T < Tmin, the cloud is only made of water ice 23 22 ! t_glace_max: if T > Tmax, the cloud is only made of liquid water -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/infotrac_phy.F90
r4500 r4669 68 68 ! | longName | Long name (with adv. scheme suffix) for outputs | ttext | | 69 69 ! | type | Type (so far: tracer or tag) | / | tracer,tag | 70 ! | phase | Phases list ("g"as / "l"iquid / "s"olid ) | / | [g][l][s]|70 ! | phase | Phases list ("g"as / "l"iquid / "s"olid / "b"lowing) | / | [g][l][s][b] | 71 71 ! | component | Name(s) of the merged/cumulated section(s) | / | coma-separated names | 72 72 ! | iGeneration | Generation (>=1) | / | | … … 93 93 ! | trac | ntiso | Isotopes + tagging tracers list + number | / | ntraciso | | 94 94 ! | zone | nzone | Geographic tagging zones list + number | / | ntraceurs_zone | | 95 ! | phase | nphas | Phases list + number | | [g][l][s], 1:3|95 ! | phase | nphas | Phases list + number | |[g][l][s][b] 1:4 | 96 96 ! | iqIsoPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot | 97 97 ! | itZonIso | Index in "trac(1:ntiso)"= f(zone, name(1:niso)) | index_trac | 1:ntiso | -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_ini_mod.F90
r4420 r4669 5 5 ! PARAMETERS for lscp: 6 6 !-------------------- 7 7 8 REAL RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG 9 !$OMP THREADPRIVATE(RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG) 10 8 11 REAL, SAVE :: seuil_neb=0.001 ! cloud fraction threshold: a cloud really exists when exceeded 9 12 !$OMP THREADPRIVATE(seuil_neb) 10 13 11 INTEGER, SAVE :: ni nter=5! number of iterations to calculate autoconversion to precipitation12 !$OMP THREADPRIVATE(ni nter)14 INTEGER, SAVE :: niter_lscp=5 ! number of iterations to calculate autoconversion to precipitation 15 !$OMP THREADPRIVATE(niter_lscp) 13 16 14 17 INTEGER,SAVE :: iflag_evap_prec=1 ! precipitation evaporation flag. 0: nothing, 1: "old way", 15 18 ! 2: Max cloud fraction above to calculate the max of reevaporation 16 ! 4: LTP'method i.e. evaporation in the clear-sky fraction of the mesh only 19 ! >=4: LTP'method i.e. evaporation in the clear-sky fraction of the mesh only 20 ! pay attention that iflag_evap_prec=4 may lead to unrealistic and overestimated 21 ! evaporation. Use 5 instead 17 22 !$OMP THREADPRIVATE(iflag_evap_prec) 18 23 … … 38 43 !$OMP THREADPRIVATE(ok_radocond_snow) 39 44 40 LOGICAL, SAVE :: ok_debug_autoconversion=.true. ! removes a bug in the autoconversion process 41 !$OMP THREADPRIVATE(ok_debug_autoconversion) 42 45 REAL, SAVE :: t_glace_min=258.0 ! lower-bound temperature parameter for cloud phase determination 46 !$OMP THREADPRIVATE(t_glace_min) 47 48 REAL, SAVE :: t_glace_max=273.15 ! upper-bound temperature parameter for cloud phase determination 49 !$OMP THREADPRIVATE(t_glace_max) 50 51 REAL, SAVE :: exposant_glace=1.0 ! parameter for cloud phase determination 52 !$OMP THREADPRIVATE(exposant_glace) 53 54 INTEGER, SAVE :: iflag_vice=0 ! which expression for ice crystall fall velocity 55 !$OMP THREADPRIVATE(iflag_vice) 56 57 INTEGER, SAVE :: iflag_t_glace=0 ! which expression for cloud phase partitioning 58 !$OMP THREADPRIVATE(iflag_t_glace) 59 60 INTEGER, SAVE :: iflag_cloudth_vert=0 ! option for determining cloud fraction and content in convective boundary layers 61 !$OMP THREADPRIVATE(iflag_cloudth_vert) 62 63 INTEGER, SAVE :: iflag_gammasat=0 ! which threshold for homogeneous nucleation below -40oC 64 !$OMP THREADPRIVATE(iflag_gammasat) 65 66 INTEGER, SAVE :: iflag_rain_incloud_vol=0 ! use of volume cloud fraction for rain autoconversion 67 !$OMP THREADPRIVATE(iflag_rain_incloud_vol) 68 69 INTEGER, SAVE :: iflag_bergeron=0 ! bergeron effect for liquid precipitation treatment 70 !$OMP THREADPRIVATE(iflag_bergeron) 71 72 INTEGER, SAVE :: iflag_fisrtilp_qsat=0 ! qsat adjustment (iterative) during autoconversion 73 !$OMP THREADPRIVATE(iflag_fisrtilp_qsat) 74 75 INTEGER, SAVE :: iflag_pdf=0 ! type of subgrid scale qtot pdf 76 !$OMP THREADPRIVATE(iflag_pdf) 77 78 INTEGER, SAVE :: iflag_autoconversion=0 ! autoconversion option 79 !$OMP THREADPRIVATE(iflag_autoconversion) 80 81 LOGICAL, SAVE :: reevap_ice=.false. ! no liquid precip for T< threshold 82 !$OMP THREADPRIVATE(reevap_ice) 83 84 REAL, SAVE :: cld_lc_lsc=2.6e-4 ! liquid autoconversion coefficient, stratiform rain 85 !$OMP THREADPRIVATE(cld_lc_lsc) 86 87 REAL, SAVE :: cld_lc_con=2.6e-4 ! liquid autoconversion coefficient, convective rain 88 !$OMP THREADPRIVATE(cld_lc_con) 89 90 REAL, SAVE :: cld_tau_lsc=3600. ! liquid autoconversion timescale, stratiform rain 91 !$OMP THREADPRIVATE(cld_tau_lsc) 92 93 REAL, SAVE :: cld_tau_con=3600. ! liquid autoconversion timescale, convective rain 94 !$OMP THREADPRIVATE(cld_tau_con) 95 96 REAL, SAVE :: cld_expo_lsc=2. ! liquid autoconversion threshold exponent, stratiform rain 97 !$OMP THREADPRIVATE(cld_expo_lsc) 98 99 REAL, SAVE :: cld_expo_con=2. ! liquid autoconversion threshold exponent, convective rain 100 !$OMP THREADPRIVATE(cld_expo_con) 101 102 REAL, SAVE :: ffallv_lsc=1. ! tuning coefficient crystal fall velocity, stratiform 103 !$OMP THREADPRIVATE(ffallv_lsc) 104 105 REAL, SAVE :: ffallv_con=1. ! tuning coefficient crystal fall velocity, convective 106 !$OMP THREADPRIVATE(ffallv_con) 107 108 REAL, SAVE :: coef_eva=2e-5 ! tuning coefficient liquid precip evaporation 109 !$OMP THREADPRIVATE(coef_eva) 110 111 REAL, SAVE :: coef_eva_i ! tuning coefficient ice precip sublimation 112 !$OMP THREADPRIVATE(coef_eva_i) 113 114 REAL cice_velo ! factor in the ice fall velocity formulation 115 PARAMETER (cice_velo=1.645) 116 117 REAL dice_velo ! exponent in the ice fall velocity formulation 118 PARAMETER (dice_velo=0.16) 119 120 REAL, SAVE :: dist_liq=300. ! typical deph of cloud-top liquid layer in mpcs 121 !$OMP THREADPRIVATE(dist_liq) 122 123 REAL, SAVE :: tresh_cl=0.0 ! cloud fraction threshold for cloud top search 124 !$OMP THREADPRIVATE(tresh_cl) 43 125 44 126 CONTAINS 45 127 46 SUBROUTINE lscp_ini(dtime,ok_ice_sursat) 128 SUBROUTINE lscp_ini(dtime,ok_ice_sursat, RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, & 129 RVTMP2_in, RTT_in,RD_in,RG_in) 47 130 48 131 … … 54 137 LOGICAL, INTENT(IN) :: ok_ice_sursat 55 138 56 CALL getin_p('ninter',ninter) 139 REAL, INTENT(IN) :: RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in 140 REAL, INTENT(IN) :: RVTMP2_in, RTT_in, RD_in, RG_in 141 character (len=20) :: modname='lscp_ini_mod' 142 character (len=80) :: abort_message 143 144 145 RG=RG_in 146 RD=RD_in 147 RCPD=RCPD_in 148 RLVTT=RLVTT_in 149 RLSTT=RLSTT_in 150 RLMLT=RLMLT_in 151 RTT=RTT_in 152 RG=RG_in 153 RVTMP2=RVTMP2_in 154 155 156 157 CALL getin_p('niter_lscp',niter_lscp) 57 158 CALL getin_p('iflag_evap_prec',iflag_evap_prec) 58 159 CALL getin_p('seuil_neb',seuil_neb) … … 60 161 CALL getin_p('iflag_mpc_bl',iflag_mpc_bl) 61 162 CALL getin_p('ok_radocond_snow',ok_radocond_snow) 62 CALL getin_p('ok_debug_autoconversion',ok_debug_autoconversion) 63 WRITE(lunout,*) 'lscp, ninter:', ninter 163 CALL getin_p('t_glace_max',t_glace_max) 164 CALL getin_p('t_glace_min',t_glace_min) 165 CALL getin_p('exposant_glace',exposant_glace) 166 CALL getin_p('iflag_vice',iflag_vice) 167 CALL getin_p('iflag_t_glace',iflag_t_glace) 168 CALL getin_p('iflag_cloudth_vert',iflag_cloudth_vert) 169 CALL getin_p('iflag_gammasat',iflag_gammasat) 170 CALL getin_p('iflag_rain_incloud_vol',iflag_rain_incloud_vol) 171 CALL getin_p('iflag_bergeron',iflag_bergeron) 172 CALL getin_p('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat) 173 CALL getin_p('iflag_pdf',iflag_pdf) 174 CALL getin_p('reevap_ice',reevap_ice) 175 CALL getin_p('cld_lc_lsc',cld_lc_lsc) 176 CALL getin_p('cld_lc_con',cld_lc_con) 177 CALL getin_p('cld_tau_lsc',cld_tau_lsc) 178 CALL getin_p('cld_tau_con',cld_tau_con) 179 CALL getin_p('cld_expo_lsc',cld_expo_lsc) 180 CALL getin_p('cld_expo_con',cld_expo_con) 181 CALL getin_p('ffallv_lsc',ffallv_lsc) 182 CALL getin_p('ffallv_lsc',ffallv_con) 183 CALL getin_p('coef_eva',coef_eva) 184 coef_eva_i=coef_eva 185 CALL getin_p('coef_eva_i',coef_eva_i) 186 CALL getin_p('iflag_autoconversion',iflag_autoconversion) 187 CALL getin_p('dist_liq',dist_liq) 188 CALL getin_p('tresh_cl',tresh_cl) 189 190 191 192 193 WRITE(lunout,*) 'lscp, niter_lscp:', niter_lscp 64 194 WRITE(lunout,*) 'lscp, iflag_evap_prec:', iflag_evap_prec 65 195 WRITE(lunout,*) 'lscp, seuil_neb:', seuil_neb … … 67 197 WRITE(lunout,*) 'lscp, iflag_mpc_bl:', iflag_mpc_bl 68 198 WRITE(lunout,*) 'lscp, ok_radocond_snow:', ok_radocond_snow 69 WRITE(lunout,*) 'lscp, ok_debug_autoconversion:', ok_debug_autoconversion 199 WRITE(lunout,*) 'lscp, t_glace_max:', t_glace_max 200 WRITE(lunout,*) 'lscp, t_glace_min:', t_glace_min 201 WRITE(lunout,*) 'lscp, exposant_glace:', exposant_glace 202 WRITE(lunout,*) 'lscp, iflag_vice:', iflag_vice 203 WRITE(lunout,*) 'lscp, iflag_t_glace:', iflag_t_glace 204 WRITE(lunout,*) 'lscp, iflag_cloudth_vert:', iflag_cloudth_vert 205 WRITE(lunout,*) 'lscp, iflag_gammasat:', iflag_gammasat 206 WRITE(lunout,*) 'lscp, iflag_rain_incloud_vol:', iflag_rain_incloud_vol 207 WRITE(lunout,*) 'lscp, iflag_bergeron:', iflag_bergeron 208 WRITE(lunout,*) 'lscp, iflag_fisrtilp_qsat:', iflag_fisrtilp_qsat 209 WRITE(lunout,*) 'lscp, iflag_pdf', iflag_pdf 210 WRITE(lunout,*) 'lscp, reevap_ice', reevap_ice 211 WRITE(lunout,*) 'lscp, cld_lc_lsc', cld_lc_lsc 212 WRITE(lunout,*) 'lscp, cld_lc_con', cld_lc_con 213 WRITE(lunout,*) 'lscp, cld_tau_lsc', cld_tau_lsc 214 WRITE(lunout,*) 'lscp, cld_tau_con', cld_tau_con 215 WRITE(lunout,*) 'lscp, cld_expo_lsc', cld_expo_lsc 216 WRITE(lunout,*) 'lscp, cld_expo_con', cld_expo_con 217 WRITE(lunout,*) 'lscp, ffallv_lsc', ffallv_lsc 218 WRITE(lunout,*) 'lscp, ffallv_con', ffallv_con 219 WRITE(lunout,*) 'lscp, coef_eva', coef_eva 220 WRITE(lunout,*) 'lscp, coef_eva_i', coef_eva_i 221 WRITE(lunout,*) 'lscp, iflag_autoconversion', iflag_autoconversion 222 WRITE(lunout,*) 'lscp, dist_liq', dist_liq 223 WRITE(lunout,*) 'lscp, tresh_cl', tresh_cl 224 225 226 227 70 228 71 229 ! check for precipitation sub-time steps 72 IF (ABS(dtime/REAL(ni nter)-360.0).GT.0.001) THEN230 IF (ABS(dtime/REAL(niter_lscp)-360.0).GT.0.001) THEN 73 231 WRITE(lunout,*) 'lscp: it is not expected, see Z.X.Li', dtime 74 232 WRITE(lunout,*) 'I would prefer a 6 min sub-timestep' 233 ENDIF 234 235 ! check consistency between numerical resolution of autoconversion 236 ! and other options 237 238 IF (iflag_autoconversion .EQ. 2) THEN 239 IF ((iflag_vice .NE. 0) .OR. (niter_lscp .GT. 1)) THEN 240 abort_message = 'in lscp, iflag_autoconversion=2 requires iflag_vice=0 and niter_lscp=1' 241 CALL abort_physic (modname,abort_message,1) 242 ENDIF 75 243 ENDIF 76 244 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_mod.F90
r4425 r4669 9 9 paprs,pplay,t,q,ptconv,ratqs, & 10 10 d_t, d_q, d_ql, d_qi, rneb, rneblsvol, rneb_seri, & 11 radocond, radicefrac, rain, snow, & 11 pfraclr,pfracld, & 12 radocond, radicefrac, rain, snow, & 12 13 frac_impa, frac_nucl, beta, & 13 14 prfl, psfl, rhcl, zqta, fraca, & 14 15 ztv, zpspsk, ztla, zthl, iflag_cld_th, & 15 16 iflag_ice_thermo, ok_ice_sursat, qsatl, qsats, & 17 distcltop, & 16 18 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 17 19 Tcontr, qcontr, qcontr2, fcontrN, fcontrP) … … 89 91 USE print_control_mod, ONLY: prt_level, lunout 90 92 USE cloudth_mod, ONLY : cloudth, cloudth_v3, cloudth_v6, cloudth_mpc 91 USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat, fallice_velocity 93 USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat 94 USE lscp_tools_mod, ONLY : fallice_velocity, distance_to_cloud_top 92 95 USE ice_sursat_mod, ONLY : ice_sursat 93 96 94 USE lscp_ini_mod, ONLY : seuil_neb, ninter, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min 95 USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, ok_debug_autoconversion 96 97 USE lscp_ini_mod, ONLY : seuil_neb, niter_lscp, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min 98 USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, cld_expo_con, cld_expo_lsc 99 USE lscp_ini_mod, ONLY : iflag_cloudth_vert, iflag_rain_incloud_vol, iflag_t_glace, t_glace_min 100 USE lscp_ini_mod, ONLY : coef_eva, coef_eva_i,cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 101 USE lscp_ini_mod, ONLY : iflag_bergeron, iflag_fisrtilp_qsat, iflag_vice, cice_velo, dice_velo 102 USE lscp_ini_mod, ONLY : iflag_autoconversion, ffallv_con, ffallv_lsc 103 USE lscp_ini_mod, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG 97 104 98 105 IMPLICIT NONE … … 101 108 ! VARIABLES DECLARATION 102 109 !=============================================================================== 103 104 include "YOMCST.h"105 include "YOETHF.h"106 include "fisrtilp.h"107 include "nuage.h"108 110 109 111 ! INPUT VARIABLES: … … 125 127 LOGICAL, DIMENSION(klon,klev), INTENT(IN) :: ptconv ! grid points where deep convection scheme is active 126 128 127 128 129 !Inputs associated with thermal plumes 129 130 … … 133 134 REAL, DIMENSION(klon,klev), INTENT(IN) :: zpspsk ! exner potential (p/100000)**(R/cp) 134 135 REAL, DIMENSION(klon,klev), INTENT(IN) :: ztla ! liquid temperature within thermals [K] 135 REAL, DIMENSION(klon,klev), INTENT(INOUT) :: zthl ! liquid potential temperature [K]136 136 137 137 ! INPUT/OUTPUT variables 138 138 !------------------------ 139 139 140 REAL, DIMENSION(klon,klev), INTENT(INOUT) :: zthl ! liquid potential temperature [K] 140 141 REAL, DIMENSION(klon,klev), INTENT(INOUT):: ratqs ! function of pressure that sets the large-scale 141 142 REAL, DIMENSION(klon,klev), INTENT(INOUT):: beta ! conversion rate of condensed water … … 154 155 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneb ! cloud fraction [-] 155 156 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneblsvol ! cloud fraction per unit volume [-] 157 REAL, DIMENSION(klon,klev), INTENT(OUT) :: pfraclr ! precip fraction clear-sky part [-] 158 REAL, DIMENSION(klon,klev), INTENT(OUT) :: pfracld ! precip fraction cloudy part [-] 156 159 REAL, DIMENSION(klon,klev), INTENT(OUT) :: radocond ! condensed water used in the radiation scheme [kg/kg] 157 160 REAL, DIMENSION(klon,klev), INTENT(OUT) :: radicefrac ! ice fraction of condensed water for radiation scheme … … 163 166 REAL, DIMENSION(klon,klev+1), INTENT(OUT) :: prfl ! large-scale rainfall flux in the column [kg/s/m2] 164 167 REAL, DIMENSION(klon,klev+1), INTENT(OUT) :: psfl ! large-scale snowfall flux in the column [kg/s/m2] 168 REAL, DIMENSION(klon,klev), INTENT(OUT) :: distcltop ! distance to cloud top [m] 165 169 166 170 ! fraction of aerosol scavenging through impaction and nucleation (for on-line) … … 189 193 190 194 REAL qsl(klon), qsi(klon) 191 REAL zct, zcl 195 REAL zct, zcl,zexpo 192 196 REAL ctot(klon,klev) 193 197 REAL ctot_vol(klon,klev) … … 231 235 REAL tot_zneb(klon), tot_znebn(klon), d_tot_zneb(klon) 232 236 REAL d_znebprecip_clr_cld(klon), d_znebprecip_cld_clr(klon) 233 REAL velo(klon,klev), vr 237 REAL velo(klon,klev), vr, ffallv 234 238 REAL qlmpc, qimpc, rnebmpc 235 239 REAL radocondi(klon,klev), radocondl(klon,klev) 240 REAL effective_zneb 241 REAL distcltop1D(klon) 242 236 243 237 244 INTEGER i, k, n, kk … … 255 262 256 263 ! Few initial checks 257 258 IF (iflag_t_glace.EQ.0) THEN259 abort_message = 'lscp cannot be used if iflag_t_glace=0'260 CALL abort_physic(modname,abort_message,1)261 ENDIF262 263 IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN264 abort_message = 'lscp cannot be used without ice thermodynamics'265 CALL abort_physic(modname,abort_message,1)266 ENDIF267 264 268 265 IF (iflag_fisrtilp_qsat .LT. 0) THEN … … 297 294 d_qi(:,:) = 0.0 298 295 rneb(:,:) = 0.0 296 pfraclr(:,:)=0.0 297 pfracld(:,:)=0.0 299 298 radocond(:,:) = 0.0 300 299 radicefrac(:,:) = 0.0 … … 320 319 d_tot_zneb(:) = 0.0 321 320 qzero(:) = 0.0 321 distcltop1D(:)=0.0 322 322 323 323 !--ice supersaturation … … 415 415 IF (zrfl(i)+zifl(i).GT.0.) THEN 416 416 417 ! LudoTP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec =4).417 ! LudoTP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec>=4). 418 418 ! c_iso: likely important to distinguish cs from neb isotope precipitation 419 419 420 IF (iflag_evap_prec. EQ.4) THEN420 IF (iflag_evap_prec.GE.4) THEN 421 421 zrfl(i) = zrflclr(i) 422 422 zifl(i) = ziflclr(i) … … 429 429 ENDIF 430 430 431 IF (iflag_evap_prec.EQ.4) THEN 431 IF (iflag_evap_prec.GT.4) THEN 432 ! Max evaporation not to saturate the clear sky precip fraction 433 ! i.e. the fraction where evaporation occurs 434 zqev0 = MAX(0.0, (zqs(i)-zq(i))*znebprecipclr(i)) 435 ELSEIF (iflag_evap_prec .EQ. 4) THEN 432 436 ! Max evaporation not to saturate the whole mesh 437 ! Pay attention -> lead to unrealistic and excessive evaporation 433 438 zqev0 = MAX(0.0, zqs(i)-zq(i)) 434 439 ELSE … … 440 445 ! dP/dz=beta*(1-q/qsat)*sqrt(P) 441 446 ! formula from Sundquist 1988, Klemp & Wilhemson 1978 442 ! LTP: evaporation only in the clear sky part (iflag_evap_prec =4)447 ! LTP: evaporation only in the clear sky part (iflag_evap_prec>=4) 443 448 444 449 IF (iflag_evap_prec.EQ.3) THEN … … 446 451 *SQRT(zrfl(i)/max(1.e-4,znebprecip(i))) & 447 452 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 448 ELSE IF (iflag_evap_prec. EQ.4) THEN453 ELSE IF (iflag_evap_prec.GE.4) THEN 449 454 zqevt = znebprecipclr(i)*coef_eva*(1.0-zq(i)/qsl(i)) & 450 455 *SQRT(zrfl(i)/max(1.e-8,znebprecipclr(i))) & … … 463 468 *SQRT(zifl(i)/max(1.e-4,znebprecip(i))) & 464 469 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 465 ELSE IF (iflag_evap_prec. EQ.4) THEN470 ELSE IF (iflag_evap_prec.GE.4) THEN 466 471 zqevti = znebprecipclr(i)*coef_eva_i*(1.0-zq(i)/qsi(i)) & 467 472 *SQRT(zifl(i)/max(1.e-8,znebprecipclr(i))) & … … 518 523 519 524 520 IF (iflag_evap_prec. EQ.4) THEN525 IF (iflag_evap_prec.GE.4) THEN 521 526 zrflclr(i) = zrfl(i) 522 527 ziflclr(i) = zifl(i) … … 536 541 537 542 ! update of rainfall and snowfall due to melting 538 IF (iflag_evap_prec. EQ.4) THEN543 IF (iflag_evap_prec.GE.4) THEN 539 544 zrflclr(i)=zrflclr(i)+zmelt*ziflclr(i) 540 545 zrflcld(i)=zrflcld(i)+zmelt*ziflcld(i) … … 721 726 ! saturation may occur at a humidity different from qsat (gamma qsat), so gamma correction for dqs 722 727 zdqs(:) = gammasat(:)*zdqs(:)+zqs(:)*dgammasatdt(:) 723 CALL icefrac_lscp(klon, zt(:),pplay(:,k)/paprs(:,1),zfice(:),dzfice(:)) 728 ! cloud phase determination 729 IF (iflag_t_glace.GE.4) THEN 730 ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top 731 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D) 732 ENDIF 733 CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:),zfice(:),dzfice(:)) 724 734 725 735 DO i=1,klon !todoan : check if loop in i is needed … … 809 819 ! zcond: mean condensed water in the mesh 810 820 ! zqn : mean water vapor in the mesh 821 ! zfice: ice fraction in clouds 811 822 ! zt : temperature 812 823 ! rhcl : clear-sky relative humidity 813 824 ! ---------------------------------------------------------------- 814 825 826 827 ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top 828 IF (iflag_t_glace.GE.4) THEN 829 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D) 830 distcltop(:,k)=distcltop1D(:) 831 ENDIF 832 833 ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs) 834 CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:),zfice(:), dzfice(:)) 835 836 815 837 ! Water vapor update, Phase determination and subsequent latent heat exchange 816 817 ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)818 CALL icefrac_lscp(klon,zt(:),pplay(:,k)/paprs(:,1),zfice(:), dzfice(:))819 820 838 DO i=1, klon 821 822 839 823 840 IF (mpc_bl_points(i,k) .GT. 0) THEN … … 873 890 874 891 ! LTP: 875 IF (iflag_evap_prec ==4) THEN892 IF (iflag_evap_prec .GE. 4) THEN 876 893 877 894 !Partitionning between precipitation coming from clouds and that coming from CS … … 919 936 ENDIF 920 937 938 939 ! Autoconversion 940 ! ------------------------------------------------------------------------------- 941 942 921 943 ! Initialisation of zoliq and radocond variables 922 944 … … 930 952 iwc(i) = 0. 931 953 zneb(i) = MAX(rneb(i,k),seuil_neb) 932 radocond(i,k) = zoliq(i)/REAL(ni nter+1)954 radocond(i,k) = zoliq(i)/REAL(niter_lscp+1) 933 955 radicefrac(i,k) = zfice(i) 934 radocondi(i,k)=zoliq(i)*zfice(i)/REAL(ni nter+1)935 radocondl(i,k)=zoliq(i)*(1.-zfice(i))/REAL(ni nter+1)956 radocondi(i,k)=zoliq(i)*zfice(i)/REAL(niter_lscp+1) 957 radocondl(i,k)=zoliq(i)*(1.-zfice(i))/REAL(niter_lscp+1) 936 958 ENDDO 937 959 938 ! Autoconversion 939 ! ------------------------------------------------------------------------------- 940 941 DO n = 1, ninter 960 961 DO n = 1, niter_lscp 942 962 943 963 DO i=1,klon … … 965 985 ELSE 966 986 967 IF (ok_debug_autoconversion) THEN ! if condition to be removed after test phase968 969 ! water quantity to remove: zchau (Sundqvist, 1978)970 ! same thing for the ice: zfroi (Zender & Kiehl, 1997)971 987 IF (ptconv(i,k)) THEN ! if convective point 972 988 zcl=cld_lc_con 973 989 zct=1./cld_tau_con 974 zfroi = dtime/REAL(ninter)/zdz(i)*zoliqi(i)*velo(i,k) 990 zexpo=cld_expo_con 991 ffallv=ffallv_con 975 992 ELSE 976 993 zcl=cld_lc_lsc 977 994 zct=1./cld_tau_lsc 978 z froi = dtime/REAL(ninter)/zdz(i)*zoliqi(i) & ! dqice/dt=1/rho*d(rho*wice*qice)/dz979 *velo(i,k)995 zexpo=cld_expo_lsc 996 ffallv=ffallv_lsc 980 997 ENDIF 998 981 999 982 1000 ! if vertical heterogeneity is taken into account, we use … … 985 1003 ! reduces the in-cloud water). 986 1004 1005 ! Liquid water quantity to remove: zchau (Sundqvist, 1978) 1006 ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2) 1007 !......................................................... 987 1008 IF ((iflag_cloudth_vert.GE.3).AND.(iflag_rain_incloud_vol.EQ.1)) THEN 988 zchau = zct *dtime/REAL(ninter) * zoliql(i) &989 *(1.0-EXP(-(zoliql(i)/ctot_vol(i,k)/zcl)**2))990 ELSE991 zchau = zct *dtime/REAL(ninter) * zoliql(i) &992 *(1.0-EXP(-(zoliql(i)/zneb(i)/zcl)**2)) ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2)993 ENDIF994 995 ELSE ! with old bug in autoconversion996 997 ! water quantity to remove: zchau (Sundqvist, 1978)998 ! same thing for the ice: zfroi (Zender & Kiehl, 1997)999 IF (ptconv(i,k)) THEN ! if convective point1000 zcl=cld_lc_con1001 zct=1./cld_tau_con1002 zfroi = dtime/REAL(ninter)/zdz(i)*zoliq(i)*velo(i,k)*zfice(i)1003 ELSE1004 zcl=cld_lc_lsc1005 zct=1./cld_tau_lsc1006 zfroi = dtime/REAL(ninter)/zdz(i)*zoliq(i) & ! dqice/dt=1/rho*d(rho*wice*qice)/dz1007 *velo(i,k) * zfice(i)1008 ENDIF1009 1009 1010 1010 ! if vertical heterogeneity is taken into account, we use … … 1012 1012 ! surface fraction (which is larger and artificially 1013 1013 ! reduces the in-cloud water). 1014 1015 1016 IF ((iflag_cloudth_vert.GE.3).AND.(iflag_rain_incloud_vol.EQ.1)) THEN 1017 zchau = zct *dtime/REAL(ninter) * zoliq(i) & 1018 *(1.0-EXP(-(zoliq(i)/ctot_vol(i,k)/zcl)**2)) *(1.-zfice(i)) 1014 effective_zneb=ctot_vol(i,k) 1019 1015 ELSE 1020 zchau = zct *dtime/REAL(ninter) * zoliq(i) & 1021 *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl)**2)) *(1.-zfice(i)) ! dqliq/dt=-qliq/tau*(1-exp(-qcin/clw)**2) 1016 effective_zneb=zneb(i) 1017 ENDIF 1018 1019 1020 IF (iflag_autoconversion .EQ. 2) THEN 1021 ! two-steps resolution with niter_lscp=1 sufficient 1022 ! we first treat the second term (with exponential) in an explicit way 1023 ! and then treat the first term (-q/tau) in an exact way 1024 zchau=zoliql(i)*(1.-exp(-dtime/REAL(niter_lscp)*zct & 1025 *(1.-exp(-(zoliql(i)/effective_zneb/zcl)**zexpo)))) 1026 ELSE 1027 ! old explicit resolution with subtimesteps 1028 zchau = zct*dtime/REAL(niter_lscp)*zoliql(i) & 1029 *(1.0-EXP(-(zoliql(i)/effective_zneb/zcl)**zexpo)) 1022 1030 ENDIF 1023 1031 1024 ENDIF ! ok_debug_autoconversion 1032 1033 ! Ice water quantity to remove (Zender & Kiehl, 1997) 1034 ! dqice/dt=1/rho*d(rho*wice*qice)/dz 1035 !.................................... 1036 IF (iflag_autoconversion .EQ. 2) THEN 1037 ! exact resolution, niter_lscp=1 is sufficient but works only 1038 ! with iflag_vice=0 1039 IF (zoliqi(i) .GT. 0.) THEN 1040 zfroi=(zoliqi(i)-((zoliqi(i)**(-dice_velo)) & 1041 +dice_velo*dtime/REAL(niter_lscp)*cice_velo/zdz(i)*ffallv)**(-1./dice_velo)) 1042 ELSE 1043 zfroi=0. 1044 ENDIF 1045 ELSE 1046 ! old explicit resolution with subtimesteps 1047 zfroi = dtime/REAL(niter_lscp)/zdz(i)*zoliqi(i)*velo(i,k) 1048 ENDIF 1025 1049 1026 1050 zrain = MIN(MAX(zchau,0.0),zoliql(i)) … … 1030 1054 ENDIF 1031 1055 1032 zoliql(i) = MAX(zoliq(i)*(1.-zfice(i))-1.*zrain , 0.0) 1033 zoliqi(i) = MAX(zoliq(i)*zfice(i)-1.*zsnow , 0.0) 1034 zoliq(i) = MAX(zoliq(i)-zprecip , 0.0) 1056 IF (iflag_autoconversion .GE. 1) THEN 1057 ! debugged version with phase conservation through the autoconversion process 1058 zoliql(i) = MAX(zoliql(i)-1.*zrain , 0.0) 1059 zoliqi(i) = MAX(zoliqi(i)-1.*zsnow , 0.0) 1060 zoliq(i) = MAX(zoliq(i)-zprecip , 0.0) 1061 ELSE 1062 ! bugged version with phase resetting 1063 zoliql(i) = MAX(zoliq(i)*(1.-zfice(i))-1.*zrain , 0.0) 1064 zoliqi(i) = MAX(zoliq(i)*zfice(i)-1.*zsnow , 0.0) 1065 zoliq(i) = MAX(zoliq(i)-zprecip , 0.0) 1066 ENDIF 1035 1067 1036 1068 ! c_iso: call isotope_conversion (for readibility) or duplicate 1037 1069 1038 radocond(i,k) = radocond(i,k) + zoliq(i)/REAL(ni nter+1)1039 radocondl(i,k) = radocondl(i,k) + zoliql(i)/REAL(ni nter+1)1040 radocondi(i,k) = radocondi(i,k) + zoliqi(i)/REAL(ni nter+1)1070 radocond(i,k) = radocond(i,k) + zoliq(i)/REAL(niter_lscp+1) 1071 radocondl(i,k) = radocondl(i,k) + zoliql(i)/REAL(niter_lscp+1) 1072 radocondi(i,k) = radocondi(i,k) + zoliqi(i)/REAL(niter_lscp+1) 1041 1073 1042 1074 ENDIF ! rneb >0 … … 1050 1082 DO i = 1, klon 1051 1083 1052 IF (iflag_evap_prec. EQ.4) THEN1084 IF (iflag_evap_prec.GE.4) THEN 1053 1085 ziflprev(i)=ziflcld(i) 1054 1086 ELSE … … 1092 1124 ! c_iso : mv here condensation of isotopes + redispatchage en precip 1093 1125 1094 IF (iflag_evap_prec. EQ.4) THEN1126 IF (iflag_evap_prec.GE.4) THEN 1095 1127 zrflcld(i) = zrflcld(i)+zqprecl(i) & 1096 1128 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) … … 1113 1145 1114 1146 ! LTP: limit of surface cloud fraction covered by precipitation when the local intensity of the flux is below rain_int_min 1115 ! if iflag_evap_pre =41116 IF (iflag_evap_prec. EQ.4) THEN1147 ! if iflag_evap_prec>=4 1148 IF (iflag_evap_prec.GE.4) THEN 1117 1149 1118 1150 DO i=1,klon … … 1134 1166 ENDDO 1135 1167 1168 1136 1169 ENDIF 1137 1170 … … 1141 1174 ! Outputs: 1142 1175 ! Precipitation fluxes at layer interfaces 1143 ! and temperature and water species tendencies 1176 ! + precipitation fractions + 1177 ! temperature and water species tendencies 1144 1178 DO i = 1, klon 1145 1179 psfl(i,k)=zifl(i) 1146 1180 prfl(i,k)=zrfl(i) 1181 pfraclr(i,k)=znebprecipclr(i) 1182 pfracld(i,k)=znebprecipcld(i) 1147 1183 d_ql(i,k) = (1-zfice(i))*zoliq(i) 1148 1184 d_qi(i,k) = zfice(i)*zoliq(i) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/lscp_tools_mod.F90
r4072 r4669 16 16 ! 3212–3234. https://doi.org/10.1029/2019MS001642 17 17 18 18 use lscp_ini_mod, only: iflag_vice, ffallv_con, ffallv_lsc 19 use lscp_ini_mod, only: cice_velo, dice_velo 20 19 21 IMPLICIT NONE 20 21 INCLUDE "nuage.h"22 INCLUDE "fisrtilp.h"23 22 24 23 INTEGER, INTENT(IN) :: klon … … 33 32 34 33 INTEGER i 35 REAL logvm,iwcg,tempc,phpa, cvel,dvel,fallv_tun34 REAL logvm,iwcg,tempc,phpa,fallv_tun 36 35 REAL m2ice, m2snow, vmice, vmsnow 37 36 REAL aice, bice, asnow, bsnow … … 62 61 63 62 velo(i)=fallv_tun*velo(i)/100.0 ! from cm/s to m/s 64 dvel=0.265 cvel=fallv_tun*65.0*(rho(i)**0.2)*(150./phpa)**0.1566 63 67 64 ELSE IF (iflag_vice .EQ. 2) THEN … … 94 91 vmsnow=vmsnow*((1000./phpa)**0.35) 95 92 velo(i)=fallv_tun*min(vmsnow,vmice)/100. ! to m/s 96 dvel=0.297 cvel=velo(i)/((iwcg/1000.*rho(i))**dvel)98 93 99 94 ELSE 100 95 ! By default, fallspeed velocity of ice crystals according to Heymsfield & Donner 1990 101 velo(i) = fallv_tun*3.29/2.0*((iwcg/1000.)**0.16) 102 dvel=0.16 103 cvel=fallv_tun*3.29/2.0*(rho(i)**0.16) 96 velo(i) = fallv_tun*cice_velo*((iwcg/1000.)**dice_velo) 104 97 ENDIF 105 98 ENDDO … … 109 102 110 103 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 111 SUBROUTINE ICEFRAC_LSCP(klon, temp, sig, icefrac, dicefracdT)104 SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, icefrac, dicefracdT) 112 105 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 113 106 … … 120 113 121 114 USE print_control_mod, ONLY: lunout, prt_level 115 USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace 116 USE lscp_ini_mod, ONLY : RTT, dist_liq 122 117 123 118 IMPLICIT NONE 124 119 125 126 INCLUDE "YOMCST.h"127 INCLUDE "nuage.h"128 INCLUDE "clesphys.h"129 130 131 ! nuage.h contains:132 ! t_glace_min: if T < Tmin, the cloud is only made of water ice133 ! t_glace_max: if T > Tmax, the cloud is only made of liquid water134 ! exposant_glace: controls the sharpness of the transition135 120 136 121 INTEGER, INTENT(IN) :: klon ! number of horizontal grid points 137 122 REAL, INTENT(IN), DIMENSION(klon) :: temp ! temperature 138 REAL, INTENT(IN), DIMENSION(klon) :: sig 123 REAL, INTENT(IN), DIMENSION(klon) :: distcltop ! distance to cloud top 124 INTEGER, INTENT(IN) :: iflag_ice_thermo 139 125 REAL, INTENT(OUT), DIMENSION(klon) :: icefrac 140 126 REAL, INTENT(OUT), DIMENSION(klon) :: dicefracdT … … 142 128 143 129 INTEGER i 144 REAL sig0,www,tmin_tmp,liqfrac_tmp130 REAL liqfrac_tmp, dicefrac_tmp 145 131 REAL Dv, denomdep,beta,qsi,dqsidt 146 INTEGER exposant_glace_old147 REAL t_glace_min_old148 132 LOGICAL ice_thermo 149 133 150 sig0=0.8 151 t_glace_min_old = RTT - 15.0 152 ice_thermo = (iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3) 153 IF (ice_thermo) THEN 154 exposant_glace_old = 2 155 ELSE 156 exposant_glace_old = 6 134 CHARACTER (len = 20) :: modname = 'lscp_tools' 135 CHARACTER (len = 80) :: abort_message 136 137 IF ((iflag_t_glace.LT.2) .OR. (iflag_t_glace.GT.6)) THEN 138 abort_message = 'lscp cannot be used if iflag_t_glace<2 or >6' 139 CALL abort_physic(modname,abort_message,1) 157 140 ENDIF 158 141 159 160 ! calculation of icefrac and dicefrac/dT 142 IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN 143 abort_message = 'lscp cannot be used without ice thermodynamics' 144 CALL abort_physic(modname,abort_message,1) 145 ENDIF 146 161 147 162 148 DO i=1,klon 163 164 IF (iflag_t_glace.EQ.1) THEN 165 ! Transition to ice close to surface for T<Tmax 166 ! w=1 at the surface and 0 for sig < sig0 167 www=(max(sig(i)-sig0,0.))/(1.-sig0) 168 ELSEIF (iflag_t_glace.GE.2) THEN 169 ! No convertion to ice close to surface 170 www = 0. 171 ENDIF 172 173 tmin_tmp=www*t_glace_max+(1.-www)*t_glace_min 174 liqfrac_tmp= (temp(i)-tmin_tmp) / (t_glace_max-tmin_tmp) 175 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 176 177 IF (iflag_t_glace.GE.3) THEN 178 icefrac(i) = 1.0-liqfrac_tmp**exposant_glace 179 IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0)) THEN 180 dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) & 181 / (t_glace_min - t_glace_max) 182 ELSE 183 184 dicefracdT(i)=0. 185 ENDIF 186 187 ELSE 149 150 ! old function with sole dependence upon temperature 151 IF (iflag_t_glace .EQ. 2) THEN 152 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 153 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 188 154 icefrac(i) = (1.0-liqfrac_tmp)**exposant_glace 189 155 IF (icefrac(i) .GT.0.) THEN … … 196 162 ENDIF 197 163 198 ENDIF 199 200 ENDDO 201 202 203 RETURN 204 164 ENDIF 165 166 ! function of temperature used in CMIP6 physics 167 IF (iflag_t_glace .EQ. 3) THEN 168 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 169 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 170 icefrac(i) = 1.0-liqfrac_tmp**exposant_glace 171 IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0.)) THEN 172 dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) & 173 / (t_glace_min - t_glace_max) 174 ELSE 175 dicefracdT(i)=0. 176 ENDIF 177 ENDIF 178 179 ! for iflag_t_glace .GE. 4, the liquid fraction depends upon temperature at cloud top 180 ! and then decreases with decreasing height 181 182 !with linear function of temperature at cloud top 183 IF (iflag_t_glace .EQ. 4) THEN 184 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 185 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 186 icefrac(i) = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.) 187 dicefrac_tmp = - temp(i)/(t_glace_max-t_glace_min) 188 dicefracdT(i) = dicefrac_tmp*exp(-distcltop(i)/dist_liq) 189 IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN 190 dicefracdT(i) = 0. 191 ENDIF 192 ENDIF 193 194 ! with CMIP6 function of temperature at cloud top 195 IF (iflag_t_glace .EQ. 5) THEN 196 liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min) 197 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 198 liqfrac_tmp = liqfrac_tmp**exposant_glace 199 icefrac(i) = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.) 200 IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN 201 dicefracdT(i) = 0. 202 ELSE 203 dicefracdT(i) = exposant_glace*((liqfrac_tmp)**(exposant_glace-1.))/(t_glace_min- t_glace_max) & 204 *exp(-distcltop(i)/dist_liq) 205 ENDIF 206 ENDIF 207 208 ! with modified function of temperature at cloud top 209 ! to get largere values around 260 K, works well with t_glace_min = 241K 210 IF (iflag_t_glace .EQ. 6) THEN 211 IF (temp(i) .GT. t_glace_max) THEN 212 liqfrac_tmp = 1. 213 ELSE 214 liqfrac_tmp = -((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))**2+1. 215 ENDIF 216 liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0) 217 icefrac(i) = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.) 218 IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN 219 dicefracdT(i) = 0. 220 ELSE 221 dicefracdT(i) = 2*((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))/(t_glace_max-t_glace_min) & 222 *exp(-distcltop(i)/dist_liq) 223 ENDIF 224 ENDIF 225 226 227 228 ENDDO ! klon 229 230 RETURN 231 205 232 END SUBROUTINE ICEFRAC_LSCP 206 233 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ … … 276 303 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 277 304 305 use lscp_ini_mod, only: iflag_gammasat, t_glace_min, RTT 278 306 279 307 IMPLICIT NONE 280 308 281 include "YOMCST.h"282 include "YOETHF.h"283 include "FCTTRE.h"284 include "nuage.h"285 309 286 310 INTEGER, INTENT(IN) :: klon ! number of horizontal grid points … … 348 372 349 373 END SUBROUTINE CALC_GAMMASAT 350 351 374 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 375 376 377 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 378 SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D) 379 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 380 381 USE lscp_ini_mod, ONLY : rd,rg,tresh_cl 382 383 IMPLICIT NONE 384 385 INTEGER, INTENT(IN) :: klon,klev !number of horizontal and vertical grid points 386 INTEGER, INTENT(IN) :: k ! vertical index 387 REAL, INTENT(IN), DIMENSION(klon,klev) :: temp ! temperature in K 388 REAL, INTENT(IN), DIMENSION(klon,klev) :: pplay ! pressure middle layer in Pa 389 REAL, INTENT(IN), DIMENSION(klon,klev+1) :: paprs ! pressure interfaces in Pa 390 REAL, INTENT(IN), DIMENSION(klon,klev) :: rneb ! cloud fraction 391 392 REAL, INTENT(OUT), DIMENSION(klon) :: distcltop1D ! distance from cloud top 393 394 REAL dzlay(klon,klev) 395 REAL zlay(klon,klev) 396 REAL dzinterf 397 INTEGER i,k_top, kvert 398 LOGICAL bool_cl 399 400 401 DO i=1,klon 402 ! Initialization height middle of first layer 403 dzlay(i,1) = Rd * temp(i,1) / rg * log(paprs(i,1)/paprs(i,2)) 404 zlay(i,1) = dzlay(i,1)/2 405 406 DO kvert=2,klev 407 IF (kvert.EQ.klev) THEN 408 dzlay(i,kvert) = 2*(rd * temp(i,kvert) / rg * log(paprs(i,kvert)/pplay(i,kvert))) 409 ELSE 410 dzlay(i,kvert) = rd * temp(i,kvert) / rg * log(paprs(i,kvert)/paprs(i,kvert+1)) 411 ENDIF 412 dzinterf = rd * temp(i,kvert) / rg * log(pplay(i,kvert-1)/pplay(i,kvert)) 413 zlay(i,kvert) = zlay(i,kvert-1) + dzinterf 414 ENDDO 415 ENDDO 416 417 k_top = k 418 DO i=1,klon 419 IF (rneb(i,k) .LE. tresh_cl) THEN 420 bool_cl = .FALSE. 421 ELSE 422 bool_cl = .TRUE. 423 ENDIF 424 425 DO WHILE ((bool_cl) .AND. (k_top .LE. klev)) 426 ! find cloud top 427 IF (rneb(i,k_top) .GT. tresh_cl) THEN 428 k_top = k_top + 1 429 ELSE 430 bool_cl = .FALSE. 431 k_top = k_top - 1 432 ENDIF 433 ENDDO 434 k_top=min(k_top,klev) 435 436 !dist to top is dist between current layer and layer of cloud top (from middle to middle) + dist middle to 437 !interf for layer of cloud top 438 distcltop1D(i) = zlay(i,k_top) - zlay(i,k) + dzlay(i,k_top)/2 439 ENDDO ! klon 440 441 END SUBROUTINE DISTANCE_TO_CLOUD_TOP 352 442 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 353 443 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/newmicro.F90
r4119 r4669 3 3 SUBROUTINE newmicro(flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, picefra, pclc, & 4 4 pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, & 5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg, re, fl, reliq, reice, &5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg,distcltop, re, fl, reliq, reice, & 6 6 reliq_pi, reice_pi) 7 7 … … 12 12 USE phys_state_var_mod, ONLY: rnebcon, clwcon 13 13 USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14) 14 USE lscp_ini_mod, only: iflag_t_glace 14 15 USE ioipsl_getin_p_mod, ONLY : getin_p 15 16 USE print_control_mod, ONLY: lunout … … 41 42 ! bl95_b1-input-R-a PARAMETER, may be varied for tests ( -"- ) 42 43 ! latitude_deg-input latitude in degrees 44 ! distcltop ---input- distance from cloud top 43 45 44 46 ! re------output-R-Cloud droplet effective radius multiplied by fl [um] … … 97 99 REAL pctlwp(klon) 98 100 101 REAL distcltop(klon,klev) 99 102 LOGICAL lo 100 103 … … 241 244 242 245 IF (ok_new_lscp) THEN 243 CALL icefrac_lscp(klon,t(:,k), pplay(:,k)/paprs(:,1),zfice(:,k),dzfice(:,k))246 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:,k),dzfice(:,k)) 244 247 ELSE 245 248 CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k)) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/nuage.F90
r3999 r4669 2 2 3 3 SUBROUTINE nuage(paprs, pplay, t, pqlwp,picefra, pclc, pcltau, pclemi, pch, pcl, pcm, & 4 pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, &4 pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, distcltop, & 5 5 cldtaupi, re, fl) 6 6 USE dimphy 7 7 USE lscp_tools_mod, only: icefrac_lscp 8 8 USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14) 9 USE lscp_ini_mod, only : iflag_t_glace 9 10 USE phys_local_var_mod, ONLY: ptconv 10 11 IMPLICIT NONE … … 49 50 50 51 REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon) 51 52 REAL distcltop(klon,klev) 52 53 LOGICAL lo 53 54 … … 112 113 ! t_glace_max, exposant_glace) 113 114 IF (ok_new_lscp) THEN 114 CALL icefrac_lscp(klon,t(:,k), pplay(:,k)/paprs(:,1),zfice(:),dzfice(:))115 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:),dzfice(:)) 115 116 ELSE 116 117 CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:)) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/nuage.h
r4380 r4669 2 2 ! $Id$ 3 3 ! 4 REAL rad_froid, rad_chau1, rad_chau2, t_glace_max, t_glace_min 5 REAL exposant_glace 4 REAL rad_froid, rad_chau1, rad_chau2 6 5 REAL rei_min,rei_max 7 6 REAL tau_cld_cv,coefw_cld_cv 8 9 7 REAL tmax_fonte_cv 10 11 INTEGER iflag_t_glace, iflag_cloudth_vert, iflag_cld_cv 12 INTEGER iflag_rain_incloud_vol 13 14 INTEGER iflag_gammasat, iflag_vice, iflag_rei 8 INTEGER iflag_cld_cv 9 INTEGER iflag_rei 15 10 LOGICAL ok_icefra_lscp 16 11 17 common /nuagecom/ rad_froid,rad_chau1, rad_chau2, t_glace_max,&18 & t_glace_min,exposant_glace,rei_min,rei_max,&12 common /nuagecom/ rad_froid,rad_chau1, rad_chau2, & 13 & rei_min,rei_max, & 19 14 & tau_cld_cv,coefw_cld_cv, & 20 15 & tmax_fonte_cv, & 21 & iflag_t_glace,iflag_cloudth_vert,iflag_cld_cv, & 22 & iflag_rain_incloud_vol, & 23 & ok_icefra_lscp, & 24 & iflag_gammasat, iflag_vice, & 16 & iflag_cld_cv, & 17 & ok_icefra_lscp, & 25 18 & iflag_rei 26 19 !$OMP THREADPRIVATE(/nuagecom/) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/ocean_forced_mod.F90
r3974 r4669 167 167 SUBROUTINE ocean_forced_ice( & 168 168 itime, dtime, jour, knon, knindex, & 169 tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, 169 tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air,spechum, & 170 170 AcoefH, AcoefQ, BcoefH, BcoefQ, & 171 171 AcoefU, AcoefV, BcoefU, BcoefV, & -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/pbl_surface_mod.F90
r4662 r4669 21 21 USE cpl_mod, ONLY : gath2cpl 22 22 USE climb_hq_mod, ONLY : climb_hq_down, climb_hq_up 23 USE climb_qbs_mod, ONLY : climb_qbs_down, climb_qbs_up 23 24 USE climb_wind_mod, ONLY : climb_wind_down, climb_wind_up 24 25 USE coef_diff_turb_mod, ONLY : coef_diff_turb 25 USE atke_exchange_coeff_mod, ONLY : atke_compute_km_kh26 USE call_atke_mod, ONLY : call_atke 26 27 USE ioipsl_getin_p_mod, ONLY : getin_p 27 28 USE cdrag_mod … … 184 185 rlon, rlat, rugoro, rmu0, & 185 186 lwdown_m, cldt, & 186 rain_f, snow_f, solsw_m, solswfdiff_m, sollw_m, &187 rain_f, snow_f, bs_f, solsw_m, solswfdiff_m, sollw_m, & 187 188 gustiness, & 188 t, q, u, v, &189 t, q, qbs, u, v, & 189 190 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 190 191 !! t_x, q_x, t_w, q_w, & … … 198 199 beta, & 199 200 !>jyg 200 alb_dir_m, alb_dif_m, zxsens, zxevap, &201 alb_dir_m, alb_dif_m, zxsens, zxevap, zxsnowerosion, & 201 202 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 202 203 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 203 d_t, d_q, d_u, d_v, d_t_diss, &204 d_t, d_q, d_qbs, d_u, d_v, d_t_diss, & 204 205 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 205 206 d_t_w, d_q_w, & … … 224 225 rh2m, zxfluxu, zxfluxv, & 225 226 z0m, z0h, agesno, sollw, solsw, & 226 d_ts, evap, fluxlat, t2m, &227 d_ts, evap, fluxlat, t2m, & 227 228 wfbils, wfbilo, wfevap, wfrain, wfsnow, & 228 229 flux_t, flux_u, flux_v, & … … 230 231 !jyg< 231 232 !! zxfluxt, zxfluxq, q2m, flux_q, tke, & 232 zxfluxt, zxfluxq, q2m, flux_q, tke_x, &233 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, & 233 234 !>jyg 234 235 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 317 318 dser, dt_ds, zsig, zmea 318 319 use phys_output_var_mod, only: tkt, tks, taur, sss 320 use blowing_snow_ini_mod, only : zeta_bs 319 321 #ifdef CPP_XIOS 320 322 USE wxios, ONLY: missing_val … … 351 353 REAL, DIMENSION(klon), INTENT(INOUT) :: rain_f ! rain fall 352 354 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 355 REAL, DIMENSION(klon), INTENT(IN) :: bs_f ! blowing snow fall 353 356 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface 354 357 REAL, DIMENSION(klon), INTENT(IN) :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface … … 356 359 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) 357 360 REAL, DIMENSION(klon,klev), INTENT(IN) :: q ! water vapour (kg/kg) 361 REAL, DIMENSION(klon,klev), INTENT(IN) :: qbs ! blowing snow specific content (kg/kg) 358 362 REAL, DIMENSION(klon,klev), INTENT(IN) :: u ! u speed 359 363 REAL, DIMENSION(klon,klev), INTENT(IN) :: v ! v speed … … 420 424 ! (=> positive sign upwards) 421 425 REAL, DIMENSION(klon), INTENT(OUT) :: zxevap ! water vapour flux at surface, positiv upwards 426 REAL, DIMENSION(klon), INTENT(OUT) :: zxsnowerosion ! blowing snow flux at surface 422 427 REAL, DIMENSION(klon), INTENT(OUT) :: zxtsol ! temperature at surface, mean for each grid point 423 428 !!! jyg le ??? … … 436 441 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_u ! change in u speed 437 442 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_v ! change in v speed 443 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_qbs ! change in blowing snow specific content 444 438 445 439 446 REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1) … … 495 502 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 496 503 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 497 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface504 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 498 505 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 499 506 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 517 524 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxt ! sensible heat flux, mean for each grid point 518 525 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxq ! water vapour flux, mean for each grid point 526 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxqbs ! blowing snow flux, mean for each grid point 519 527 REAL, DIMENSION(klon, nbsrf),INTENT(OUT) :: q2m ! water vapour at 2 meter height 520 528 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q ! water vapour flux(latent flux) (kg/m**2/s) 529 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs ! blowind snow vertical flux (kg/m**2 530 521 531 522 532 ! Martin … … 563 573 REAL, DIMENSION(klon) :: yalb,yalb_vis 564 574 !albedo SB <<< 565 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1 575 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1, yqbs1 566 576 REAL, DIMENSION(klon) :: yqa 567 577 REAL, DIMENSION(klon) :: ysnow, yqsurf, yagesno, yqsol 568 REAL, DIMENSION(klon) :: yrain_f, ysnow_f 578 REAL, DIMENSION(klon) :: yrain_f, ysnow_f, ybs_f 569 579 REAL, DIMENSION(klon) :: ysolsw, ysollw 570 580 REAL, DIMENSION(klon) :: yfder 571 581 REAL, DIMENSION(klon) :: yrugoro 572 582 REAL, DIMENSION(klon) :: yfluxlat 583 REAL, DIMENSION(klon) :: yfluxbs 573 584 REAL, DIMENSION(klon) :: y_d_ts 574 585 REAL, DIMENSION(klon) :: y_flux_t1, y_flux_q1 575 586 REAL, DIMENSION(klon) :: y_dflux_t, y_dflux_q 576 587 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 588 REAL, DIMENSION(klon) :: y_flux_bs, y_flux0 577 589 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 578 590 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w … … 601 613 REAL, DIMENSION(klon) :: AcoefH, AcoefQ, BcoefH, BcoefQ 602 614 REAL, DIMENSION(klon) :: AcoefU, AcoefV, BcoefU, BcoefV 615 REAL, DIMENSION(klon) :: AcoefQBS, BcoefQBS 603 616 REAL, DIMENSION(klon) :: ypsref 604 617 REAL, DIMENSION(klon) :: yevap, yevap_pot, ytsurf_new, yalb3_new … … 609 622 REAL, DIMENSION(klon) :: meansqT ! mean square deviation of subsurface temperatures 610 623 REAL, DIMENSION(klon) :: alb_m ! mean albedo for whole SW interval 611 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss 624 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs 612 625 REAL, DIMENSION(klon,klev) :: y_d_u, y_d_v 613 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q 626 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q, y_flux_qbs 614 627 REAL, DIMENSION(klon,klev) :: y_flux_u, y_flux_v 615 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq628 REAL, DIMENSION(klon,klev) :: ycoefh,ycoefm,ycoefq,ycoefqbs 616 629 REAL, DIMENSION(klon) :: ycdragh, ycdragq, ycdragm 617 630 REAL, DIMENSION(klon,klev) :: yu, yv 618 REAL, DIMENSION(klon,klev) :: yt, yq 631 REAL, DIMENSION(klon,klev) :: yt, yq, yqbs 619 632 REAL, DIMENSION(klon,klev) :: ypplay, ydelp 620 633 REAL, DIMENSION(klon,klev) :: delp … … 678 691 REAL, DIMENSION(klon,klev) :: CcoefH, CcoefQ, DcoefH, DcoefQ 679 692 REAL, DIMENSION(klon,klev) :: CcoefU, CcoefV, DcoefU, DcoefV 693 REAL, DIMENSION(klon,klev) :: CcoefQBS, DcoefQBS 680 694 REAL, DIMENSION(klon,klev) :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x 681 695 REAL, DIMENSION(klon,klev) :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w … … 683 697 REAL, DIMENSION(klon,klev) :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w 684 698 REAL, DIMENSION(klon,klev) :: Kcoef_hq, Kcoef_m, gama_h, gama_q 699 REAL, DIMENSION(klon,klev) :: gama_qbs, Kcoef_qbs 685 700 REAL, DIMENSION(klon,klev) :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x 686 701 REAL, DIMENSION(klon,klev) :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w … … 775 790 REAL, DIMENSION(klon) :: uzon_w, vmer_w, speed_w, zri1_w, pref_w !speed_w, zri1_w, pref_w, added by Fuxing WANG, 04/03/2015 776 791 REAL, DIMENSION(klon) :: zgeo1_w, tair1_w, qair1_w, tairsol_w 792 REAL, DIMENSION(klon) :: yus0, yvs0 777 793 778 794 !!! jyg le 25/03/2013 … … 862 878 REAL, DIMENSION(klon,nbsrf) :: zx_t1 863 879 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 880 REAL, DIMENSION(klon,nbsrf) :: snowerosion 864 881 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 865 882 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) … … 977 994 cdragh(:)=0. ; cdragm(:)=0. 978 995 zu1(:)=0. ; zv1(:)=0. 996 yus0(:)=0. ; yvs0(:)=0. 979 997 !albedo SB >>> 980 998 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 981 999 !albedo SB <<< 982 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. 1000 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0. 983 1001 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0. 984 1002 zxfluxlat(:)=0. 985 1003 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 986 1004 zn2mout(:,:)=0 ; 987 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_ u(:,:)=0. ; d_v(:,:)=0.1005 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 988 1006 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. 989 1007 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1005 1023 d_ts(:,:)=0. 1006 1024 evap(:,:)=0. 1025 snowerosion(:,:)=0. 1007 1026 fluxlat(:,:)=0. 1008 1027 wfbils(:,:)=0. ; wfbilo(:,:)=0. 1009 1028 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0. 1010 1029 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0. 1030 flux_qbs(:,:,:)=0. 1011 1031 dflux_t(:)=0. ; dflux_q(:)=0. 1012 1032 zxsnow(:)=0. 1013 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0. 1033 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0. 1014 1034 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0. 1015 1035 runoff(:)=0. … … 1048 1068 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 1049 1069 !albedo SB <<< 1050 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.01070 yrain_f = 0.0 ; ysnow_f = 0.0 ; ybs_f=0.0 ; yfder = 0.0 ; ysolsw = 0.0 1051 1071 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yz0h_oupas = 0.0 ; yu1 = 0.0 1052 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 1072 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 ; yqbs1 = 0.0 1053 1073 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 1054 1074 yq = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0 1075 yqbs(:,:)=0.0 1055 1076 yrugoro = 0.0 ; ywindsp = 0.0 1056 1077 !! d_ts = 0.0 ; yfluxlat=0.0 ; flux_t = 0.0 ; flux_q = 0.0 1057 yfluxlat=0.0 1078 yfluxlat=0.0 ; y_flux0(:)=0.0 1058 1079 !! flux_u = 0.0 ; flux_v = 0.0 ; d_t = 0.0 ; d_q = 0.0 1059 1080 !! d_t_diss= 0.0 ;d_u = 0.0 ; d_v = 0.0 … … 1070 1091 ycldt = 0.0 ; yrmu0 = 0.0 1071 1092 ! Martin 1093 y_d_qbs(:,:)=0.0 1072 1094 1073 1095 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 1366 1388 ! Provisional : set ybeta to standard values 1367 1389 IF (nsrf .NE. is_ter) THEN 1368 ybeta( :) = 1.1390 ybeta(1:knon) = 1. 1369 1391 ELSE 1370 1392 IF (iflag_split .EQ. 0) THEN 1371 ybeta( :) = 1.1393 ybeta(1:knon) = 1. 1372 1394 ELSE 1373 1395 DO j = 1, knon … … 1395 1417 yrain_f(j) = rain_f(i) 1396 1418 ysnow_f(j) = snow_f(i) 1419 ybs_f(j) = bs_f(i) 1397 1420 yagesno(j) = agesno(i,nsrf) 1398 1421 yfder(j) = fder(i) … … 1406 1429 yu1(j) = u(i,1) 1407 1430 yv1(j) = v(i,1) 1431 yqbs1(j) = qbs(i,1) 1408 1432 ypaprs(j,klev+1) = paprs(i,klev+1) 1409 1433 !jyg< … … 1419 1443 !!! nrlmd le 13/06/2011 1420 1444 y_delta_tsurf(j)=delta_tsurf(i,nsrf) 1421 !!! 1445 yfluxbs(j)=0.0 1446 y_flux_bs(j) = 0.0 1422 1447 ENDDO 1423 1448 ! >> PC … … 1458 1483 yt(j,k) = t(i,k) 1459 1484 yq(j,k) = q(i,k) 1485 yqbs(j,k)=qbs(i,k) 1460 1486 ENDDO 1461 1487 ENDDO … … 1587 1613 ENDIF 1588 1614 1589 IF (prt_level >=10) print *,'c lcdrag -> ycdragh ', ycdragh1615 IF (prt_level >=10) print *,'cdrag -> ycdragh ', ycdragh(1:knon) 1590 1616 ELSE !(iflag_split .eq.0) 1591 1617 … … 1635 1661 ycdragm_w, ycdragh_w, zri1_w, pref_w, rain_f, zxtsol, ypplay(:,1) ) 1636 1662 ! 1637 zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:) 1663 !!!bug !! zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:) 1664 zgeo1(1:knon) = wake_s(1:knon)*zgeo1_w(1:knon) + (1.-wake_s(1:knon))*zgeo1_x(1:knon) 1638 1665 1639 1666 ! --- special Dice. JYG+MPL 25112013 puis BOMEX … … 1661 1688 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012 1662 1689 IF (prt_level >=10) THEN 1663 print *,' args coef_diff_turb: yu ', yu 1664 print *,' args coef_diff_turb: yv ', yv 1665 print *,' args coef_diff_turb: yq ', yq 1666 print *,' args coef_diff_turb: yt ', yt 1667 print *,' args coef_diff_turb: yts ', yts 1668 print *,' args coef_diff_turb: yz0m ', yz0m 1669 print *,' args coef_diff_turb: yqsurf ', yqsurf 1670 print *,' args coef_diff_turb: ycdragm ', ycdragm 1671 print *,' args coef_diff_turb: ycdragh ', ycdragh 1672 print *,' args coef_diff_turb: ytke ', ytke 1690 print *,' args coef_diff_turb: yu ', yu(1:knon,:) 1691 print *,' args coef_diff_turb: yv ', yv(1:knon,:) 1692 print *,' args coef_diff_turb: yq ', yq(1:knon,:) 1693 print *,' args coef_diff_turb: yt ', yt(1:knon,:) 1694 print *,' args coef_diff_turb: yts ', yts(1:knon) 1695 print *,' args coef_diff_turb: yz0m ', yz0m(1:knon) 1696 print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 1697 print *,' args coef_diff_turb: ycdragm ', ycdragm(1:knon) 1698 print *,' args coef_diff_turb: ycdragh ', ycdragh(1:knon) 1699 print *,' args coef_diff_turb: ytke ', ytke(1:knon,:) 1673 1700 ENDIF 1674 1701 1675 1702 IF (iflag_pbl>=50) THEN 1676 1703 1677 CALL atke_compute_km_kh(knon,klev,yu,yv,yt, &1704 CALL call_atke(dtime,knon,klev,ycdragm, ycdragh,yus0,yvs0,yts,yu,yv,yt, & 1678 1705 ypplay,ypaprs,ytke,ycoefm, ycoefh) 1679 1706 … … 1698 1725 ENDIF ! iflag_pbl >= 50 1699 1726 1700 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh 1727 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh(1:knon,:) 1701 1728 1702 1729 … … 1705 1732 1706 1733 IF (prt_level >=10) THEN 1707 print *,' args coef_diff_turb: yu_x ', yu_x 1708 print *,' args coef_diff_turb: yv_x ', yv_x 1709 print *,' args coef_diff_turb: yq_x ', yq_x 1710 print *,' args coef_diff_turb: yt_x ', yt_x 1711 print *,' args coef_diff_turb: yts_x ', yts_x 1712 print *,' args coef_diff_turb: yqsurf ', yqsurf 1713 print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x 1714 print *,' args coef_diff_turb: ycdragh_x ', ycdragh_x 1715 print *,' args coef_diff_turb: ytke_x ', ytke_x 1734 print *,' args coef_diff_turb: yu_x ', yu_x(1:knon,:) 1735 print *,' args coef_diff_turb: yv_x ', yv_x(1:knon,:) 1736 print *,' args coef_diff_turb: yq_x ', yq_x(1:knon,:) 1737 print *,' args coef_diff_turb: yt_x ', yt_x(1:knon,:) 1738 print *,' args coef_diff_turb: yts_x ', yts_x(1:knon) 1739 print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 1740 print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x(1:knon) 1741 print *,' args coef_diff_turb: ycdragh_x ', ycdragh_x(1:knon) 1742 print *,' args coef_diff_turb: ytke_x ', ytke_x(1:knon,:) 1716 1743 ENDIF 1717 1744 … … 1719 1746 IF (iflag_pbl>=50) THEN 1720 1747 1721 CALL atke_compute_km_kh(knon,klev,yu_x,yv_x,yt_x, &1748 CALL call_atke(dtime,knon,klev,ycdragm_x,ycdragh_x,yus0,yvs0,yts_x,yu_x,yv_x,yt_x, & 1722 1749 ypplay,ypaprs,ytke_x,ycoefm_x, ycoefh_x) 1723 1750 … … 1742 1769 ENDIF ! iflag_pbl >= 50 1743 1770 1744 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x 1771 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x(1:knon,:) 1745 1772 ! 1746 1773 IF (prt_level >=10) THEN 1747 print *,' args coef_diff_turb: yu_w ', yu_w 1748 print *,' args coef_diff_turb: yv_w ', yv_w 1749 print *,' args coef_diff_turb: yq_w ', yq_w 1750 print *,' args coef_diff_turb: yt_w ', yt_w 1751 print *,' args coef_diff_turb: yts_w ', yts_w 1752 print *,' args coef_diff_turb: yqsurf ', yqsurf 1753 print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w 1754 print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w 1755 print *,' args coef_diff_turb: ytke_w ', ytke_w 1774 print *,' args coef_diff_turb: yu_w ', yu_w(1:knon,:) 1775 print *,' args coef_diff_turb: yv_w ', yv_w(1:knon,:) 1776 print *,' args coef_diff_turb: yq_w ', yq_w(1:knon,:) 1777 print *,' args coef_diff_turb: yt_w ', yt_w(1:knon,:) 1778 print *,' args coef_diff_turb: yts_w ', yts_w(1:knon) 1779 print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 1780 print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w(1:knon) 1781 print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w(1:knon) 1782 print *,' args coef_diff_turb: ytke_w ', ytke_w(1:knon,:) 1756 1783 ENDIF 1757 1784 1758 1785 IF (iflag_pbl>=50) THEN 1759 1786 1760 CALL atke_compute_km_kh(knon,klev,yu_w,yv_w,yt_w, &1787 CALL call_atke(dtime,knon,klev,ycdragm_w,ycdragh_w,yus0,yvs0,yts_w,yu_w,yv_w,yt_w, & 1761 1788 ypplay,ypaprs,ytke_w,ycoefm_w, ycoefh_w) 1762 1789 … … 1781 1808 1782 1809 1783 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w 1810 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w(1:knon,:) 1784 1811 1785 1812 !!!jyg le 10/04/2013 … … 1880 1907 ENDIF ! (iflag_split .eq.0) 1881 1908 !!! 1909 1910 ! For blowing snow: 1911 IF (ok_bs) THEN 1912 ! following Bintanja et al 2000, part II 1913 ! we assume that the eddy diffsivity coefficient for 1914 ! suspended particles is larger than Km by a factor zeta_bs 1915 ! which is equal to 3 by default 1916 do k=1,klev 1917 do j=1,knon 1918 ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs 1919 enddo 1920 enddo 1921 CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, & 1922 ydelp, yt, yqbs, dtime, & 1923 CcoefQBS, DcoefQBS, & 1924 Kcoef_qbs, gama_qbs, & 1925 AcoefQBS, BcoefQBS) 1926 ENDIF 1882 1927 1883 1928 !**************************************************************************************** … … 1999 2044 !!! 2000 2045 IF (prt_level >=10) THEN 2001 PRINT *,'pbl_surface (merge->): yt(1,:) ',yt(1,:) 2002 PRINT *,'pbl_surface (merge->): yq(1,:) ',yq(1,:) 2003 PRINT *,'pbl_surface (merge->): yu(1,:) ',yu(1,:) 2004 PRINT *,'pbl_surface (merge->): yv(1,:) ',yv(1,:) 2005 PRINT *,'pbl_surface (merge->): AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) ', & 2006 AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) 2007 PRINT *,'pbl_surface (merge->): BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) ', & 2008 BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) 2046 DO i = 1, min(1,knon) 2047 PRINT *,'pbl_surface (merge->): yt(1,:) ',yt(i,:) 2048 PRINT *,'pbl_surface (merge->): yq(1,:) ',yq(i,:) 2049 PRINT *,'pbl_surface (merge->): yu(1,:) ',yu(i,:) 2050 PRINT *,'pbl_surface (merge->): yv(1,:) ',yv(i,:) 2051 PRINT *,'pbl_surface (merge->): AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) ', & 2052 AcoefH(i), AcoefQ(i), AcoefU(i), AcoefV(i) 2053 PRINT *,'pbl_surface (merge->): BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) ', & 2054 BcoefH(i), BcoefQ(i), BcoefU(i), BcoefV(i) 2055 ENDDO 2009 2056 2010 2057 ENDIF … … 2057 2104 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2058 2105 !!jyg yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2059 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, y t1, yq1,&2106 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2060 2107 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2061 2108 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2063 2110 ylwdown, yq2m, yt2m, & 2064 2111 ysnow, yqsol, yagesno, ytsoil, & 2065 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat, &2112 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,& 2066 2113 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2067 2114 y_flux_u1, y_flux_v1, & … … 2106 2153 yrmu0, ylwdown, yalb, zgeo1, & 2107 2154 ysolsw, ysollw, yts, ypplay(:,1), & 2108 !!jyg ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2109 ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,& 2155 ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2110 2156 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2111 2157 AcoefU, AcoefV, BcoefU, BcoefV, & 2158 AcoefQBS, BcoefQBS, & 2112 2159 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2113 ysnow, yqsurf, yqsol, yagesno, &2160 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2114 2161 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2115 y tsurf_new, y_dflux_t, y_dflux_q, &2162 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2116 2163 yzmea, yzsig, ycldt, & 2117 2164 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2147 2194 itap, dtime, jour, knon, ni, & 2148 2195 !!jyg ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2149 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, y t(:,1), yq(:,1),& ! ym missing init2196 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2150 2197 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2151 2198 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2158 2205 ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss) 2159 2206 IF (prt_level >=10) THEN 2160 print *,'arg de surf_ocean: ycdragh ',ycdragh 2161 print *,'arg de surf_ocean: ycdragm ',ycdragm 2162 print *,'arg de surf_ocean: yt ', yt 2163 print *,'arg de surf_ocean: yq ', yq 2164 print *,'arg de surf_ocean: yts ', yts 2165 print *,'arg de surf_ocean: AcoefH ',AcoefH 2166 print *,'arg de surf_ocean: AcoefQ ',AcoefQ 2167 print *,'arg de surf_ocean: BcoefH ',BcoefH 2168 print *,'arg de surf_ocean: BcoefQ ',BcoefQ 2169 print *,'arg de surf_ocean: yevap ',yevap 2170 print *,'arg de surf_ocean: yfluxsens ',yfluxsens 2171 print *,'arg de surf_ocean: yfluxlat ',yfluxlat 2172 print *,'arg de surf_ocean: ytsurf_new ',ytsurf_new 2207 print *,'arg de surf_ocean: ycdragh ',ycdragh(1:knon) 2208 print *,'arg de surf_ocean: ycdragm ',ycdragm(1:knon) 2209 print *,'arg de surf_ocean: yt ', yt(1:knon,:) 2210 print *,'arg de surf_ocean: yq ', yq(1:knon,:) 2211 print *,'arg de surf_ocean: yts ', yts(1:knon) 2212 print *,'arg de surf_ocean: AcoefH ',AcoefH(1:knon) 2213 print *,'arg de surf_ocean: AcoefQ ',AcoefQ(1:knon) 2214 print *,'arg de surf_ocean: BcoefH ',BcoefH(1:knon) 2215 print *,'arg de surf_ocean: BcoefQ ',BcoefQ(1:knon) 2216 print *,'arg de surf_ocean: yevap ',yevap(1:knon) 2217 print *,'arg de surf_ocean: yfluxsens ',yfluxsens(1:knon) 2218 print *,'arg de surf_ocean: yfluxlat ',yfluxlat(1:knon) 2219 print *,'arg de surf_ocean: ytsurf_new ',ytsurf_new(1:knon) 2173 2220 ENDIF 2174 2221 ! Special DICE MPL 05082013 puis BOMEX MPL 20150410 … … 2220 2267 2221 2268 IF (evap0>=0.) THEN 2222 yevap( :)=evap02223 yevap( :)=RLVTT*evap02269 yevap(1:knon)=evap0 2270 yevap(1:knon)=RLVTT*evap0 2224 2271 ENDIF 2225 2272 … … 2277 2324 ENDDO 2278 2325 ENDIF ! (ok_flux_surf) 2326 2327 ! flux of blowing snow at the first level 2328 IF (ok_bs) THEN 2329 DO j=1,knon 2330 y_flux_bs(j)=yfluxbs(j) 2331 ENDDO 2332 ENDIF 2279 2333 ! 2280 2334 ! ------------------------------------------------------------------------------ … … 2421 2475 IF (prt_level >= 10) THEN 2422 2476 print *,'pbl_surface, ybeta , yevap, yevap_pot ', & 2423 ybeta , yevap, yevap_pot2477 ybeta(1:knon) , yevap(1:knon), yevap_pot(1:knon) 2424 2478 ENDIF ! (prt_level >= 10) 2425 2479 ! … … 2583 2637 ! 2584 2638 ENDIF ! (iflag_split .eq.0) 2639 2640 IF (ok_bs) THEN 2641 CALL climb_qbs_up(knon, dtime, yqbs, & 2642 y_flux_bs, ypaprs, ypplay, & 2643 AcoefQBS, BcoefQBS, & 2644 CcoefQBS, DcoefQBS, & 2645 Kcoef_qbs, gama_qbs, & 2646 y_flux_qbs(:,:), y_d_qbs(:,:)) 2647 ENDIF 2648 2585 2649 !!! 2586 2650 !! … … 2696 2760 !!! 2697 2761 2698 ! print*,'Dans pbl OK1' 2699 2700 !jyg< 2701 !! evap(:,nsrf) = - flux_q(:,1,nsrf) 2702 !>jyg 2762 ! tendencies of blowing snow 2763 IF (ok_bs) THEN 2764 DO k = 1, klev 2765 DO j = 1, knon 2766 i = ni(j) 2767 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j) 2768 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k) 2769 ENDDO 2770 ENDDO 2771 ENDIF 2772 2773 2703 2774 DO j = 1, knon 2704 2775 i = ni(j) 2705 2776 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 2777 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 2706 2778 beta(i,nsrf) = ybeta(j) !jyg 2707 2779 d_ts(i,nsrf) = y_d_ts(j) … … 2874 2946 ENDDO 2875 2947 2948 2949 IF (ok_bs) THEN 2950 DO k = 1, klev 2951 DO j = 1, knon 2952 i = ni(j) 2953 d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k) 2954 ENDDO 2955 ENDDO 2956 ENDIF 2957 2876 2958 ! print*,'Dans pbl OK4' 2877 2959 2878 2960 IF (prt_level >=10) THEN 2879 2961 print *, 'pbl_surface tendencies for w: d_t_w, d_t_x, d_t ', & 2880 d_t_w( :,1), d_t_x(:,1), d_t(:,1)2962 d_t_w(1:knon,1), d_t_x(1:knon,1), d_t(1:knon,1) 2881 2963 ENDIF 2882 2964 … … 3124 3206 IF (prt_level >=10) THEN 3125 3207 print *, 'T2m, q2m, RH2m ', & 3126 t2m , q2m, rh2m3208 t2m(1:knon,:), q2m(1:knon,:), rh2m(1:knon) 3127 3209 ENDIF 3128 3210 … … 3137 3219 ytherm,ytrmb1,ytrmb2,ytrmb3,ylcl) 3138 3220 IF (prt_level >=10) THEN 3139 print *,' Arg. de HBTM: yt2m ',yt2m 3140 print *,' Arg. de HBTM: yt10m ',yt10m 3141 print *,' Arg. de HBTM: yq2m ',yq2m 3142 print *,' Arg. de HBTM: yq10m ',yq10m 3143 print *,' Arg. de HBTM: yustar ',yustar 3144 print *,' Arg. de HBTM: y_flux_t ',y_flux_t 3145 print *,' Arg. de HBTM: y_flux_q ',y_flux_q 3146 print *,' Arg. de HBTM: yu ',yu 3147 print *,' Arg. de HBTM: yv ',yv 3148 print *,' Arg. de HBTM: yt ',yt 3149 print *,' Arg. de HBTM: yq ',yq 3221 print *,' Arg. de HBTM: yt2m ',yt2m(1:knon) 3222 print *,' Arg. de HBTM: yt10m ',yt10m(1:knon) 3223 print *,' Arg. de HBTM: yq2m ',yq2m(1:knon) 3224 print *,' Arg. de HBTM: yq10m ',yq10m(1:knon) 3225 print *,' Arg. de HBTM: yustar ',yustar(1:knon) 3226 print *,' Arg. de HBTM: y_flux_t ',y_flux_t(1:knon,:) 3227 print *,' Arg. de HBTM: y_flux_q ',y_flux_q(1:knon,:) 3228 print *,' Arg. de HBTM: yu ',yu(1:knon,:) 3229 print *,' Arg. de HBTM: yv ',yv(1:knon,:) 3230 print *,' Arg. de HBTM: yt ',yt(1:knon,:) 3231 print *,' Arg. de HBTM: yq ',yq(1:knon,:) 3150 3232 ENDIF 3151 3233 ELSE ! (iflag_split .eq.0) … … 3156 3238 ytherm_x,ytrmb1_x,ytrmb2_x,ytrmb3_x,ylcl_x) 3157 3239 IF (prt_level >=10) THEN 3158 print *,' Arg. de HBTM: yt2m_x ',yt2m_x 3159 print *,' Arg. de HBTM: yt10m_x ',yt10m_x 3160 print *,' Arg. de HBTM: yq2m_x ',yq2m_x 3161 print *,' Arg. de HBTM: yq10m_x ',yq10m_x 3162 print *,' Arg. de HBTM: yustar_x ',yustar_x 3163 print *,' Arg. de HBTM: y_flux_t_x ',y_flux_t_x 3164 print *,' Arg. de HBTM: y_flux_q_x ',y_flux_q_x 3165 print *,' Arg. de HBTM: yu_x ',yu_x 3166 print *,' Arg. de HBTM: yv_x ',yv_x 3167 print *,' Arg. de HBTM: yt_x ',yt_x 3168 print *,' Arg. de HBTM: yq_x ',yq_x 3240 print *,' Arg. de HBTM: yt2m_x ',yt2m_x(1:knon) 3241 print *,' Arg. de HBTM: yt10m_x ',yt10m_x(1:knon) 3242 print *,' Arg. de HBTM: yq2m_x ',yq2m_x(1:knon) 3243 print *,' Arg. de HBTM: yq10m_x ',yq10m_x(1:knon) 3244 print *,' Arg. de HBTM: yustar_x ',yustar_x(1:knon) 3245 print *,' Arg. de HBTM: y_flux_t_x ',y_flux_t_x(1:knon,:) 3246 print *,' Arg. de HBTM: y_flux_q_x ',y_flux_q_x(1:knon,:) 3247 print *,' Arg. de HBTM: yu_x ',yu_x(1:knon,:) 3248 print *,' Arg. de HBTM: yv_x ',yv_x(1:knon,:) 3249 print *,' Arg. de HBTM: yt_x ',yt_x(1:knon,:) 3250 print *,' Arg. de HBTM: yq_x ',yq_x(1:knon,:) 3169 3251 ENDIF 3170 3252 CALL HBTM(knon, ypaprs, ypplay, & … … 3195 3277 ENDDO 3196 3278 IF (prt_level >=10) THEN 3197 print *, 'After HBTM: pblh ', pblh 3198 print *, 'After HBTM: plcl ', plcl 3199 print *, 'After HBTM: cteiCL ', cteiCL 3279 print *, 'After HBTM: pblh ', pblh(1:knon,:) 3280 print *, 'After HBTM: plcl ', plcl(1:knon,:) 3281 print *, 'After HBTM: cteiCL ', cteiCL(1:knon,:) 3200 3282 ENDIF 3201 3283 ELSE !(iflag_split .eq.0) … … 3215 3297 ENDDO 3216 3298 IF (prt_level >=10) THEN 3217 print *, 'After HBTM: pblh_x ', pblh_x 3218 print *, 'After HBTM: plcl_x ', plcl_x 3219 print *, 'After HBTM: cteiCL_x ', cteiCL_x 3299 print *, 'After HBTM: pblh_x ', pblh_x(1:knon,:) 3300 print *, 'After HBTM: plcl_x ', plcl_x(1:knon,:) 3301 print *, 'After HBTM: cteiCL_x ', cteiCL_x(1:knon,:) 3220 3302 ENDIF 3221 3303 DO j=1, knon … … 3234 3316 ENDDO 3235 3317 IF (prt_level >=10) THEN 3236 print *, 'After HBTM: pblh_w ', pblh_w 3237 print *, 'After HBTM: plcl_w ', plcl_w 3238 print *, 'After HBTM: cteiCL_w ', cteiCL_w 3318 print *, 'After HBTM: pblh_w ', pblh_w(1:knon,:) 3319 print *, 'After HBTM: plcl_w ', plcl_w(1:knon,:) 3320 print *, 'After HBTM: cteiCL_w ', cteiCL_w(1:knon,:) 3239 3321 ENDIF 3240 3322 !!! … … 3327 3409 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3328 3410 ENDDO 3411 3412 ! if blowing snow 3413 if (ok_bs) then 3414 DO nsrf = 1, nbsrf 3415 DO k = 1, klev 3416 DO i = 1, klon 3417 zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf) 3418 ENDDO 3419 ENDDO 3420 ENDDO 3421 3422 DO i = 1, klon 3423 zxsnowerosion(i) = zxfluxqbs(i,1) ! blowings snow flux at the surface 3424 END DO 3425 endif 3426 3329 3427 !!! 3330 3428 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyaqua_mod.F90
r4463 r4669 360 360 ql_ancien = 0. 361 361 qs_ancien = 0. 362 qbs_ancien = 0. 362 363 u_ancien = 0. 363 364 v_ancien = 0. … … 365 366 prlw_ancien = 0. 366 367 prsw_ancien = 0. 368 prbsw_ancien= 0. 367 369 368 370 ale_wake = 0. -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyetat0_mod.F90
r4389 r4669 20 20 qsol, fevap, z0m, z0h, agesno, & 21 21 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & 22 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, &23 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &24 rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &22 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 23 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, & 24 rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, & 25 25 solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, & 26 26 wake_deltat, wake_delta_pbl_TKE, delta_tsurf, beta_aridity, wake_fip, wake_pe, & … … 300 300 301 301 !=================================================================== 302 ! Lecture dans le cas iflag_pbl_surface =1 303 !=================================================================== 304 305 if ( iflag_physiq <= 1 ) then 306 !=================================================================== 302 307 ! Lecture des temperatures du sol profond: 303 308 !=================================================================== … … 327 332 found=phyetat0_get(snow_fall,"snow_f","snow fall",0.) 328 333 found=phyetat0_get(rain_fall,"rain_f","rain fall",0.) 329 334 IF (ok_bs) THEN 335 found=phyetat0_get(bs_fall,"bs_f","blowing snow fall",0.) 336 ELSE 337 bs_fall(:)=0. 338 ENDIF 330 339 !======================================================================= 331 340 ! Radiation … … 374 383 ENDIF 375 384 385 endif ! iflag_physiq <= 1 386 376 387 ! Lecture de l'age de la neige: 377 388 found=phyetat0_srf(agesno,"AGESNO","SNOW AGE",0.001) … … 388 399 ancien_ok=ancien_ok.AND.phyetat0_get(prlw_ancien,"PRLWANCIEN","PRLWANCIEN",0.) 389 400 ancien_ok=ancien_ok.AND.phyetat0_get(prsw_ancien,"PRSWANCIEN","PRSWANCIEN",0.) 401 402 ! cas specifique des variables de la neige soufflee 403 IF (ok_bs) THEN 404 ancien_ok=ancien_ok.AND.phyetat0_get(qbs_ancien,"QBSANCIEN","QBSANCIEN",0.) 405 ancien_ok=ancien_ok.AND.phyetat0_get(prbsw_ancien,"PRBSWANCIEN","PRBSWANCIEN",0.) 406 ELSE 407 qbs_ancien(:,:)=0. 408 prbsw_ancien(:)=0. 409 ENDIF 390 410 391 411 ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain … … 401 421 (maxval(t_ancien).EQ.minval(t_ancien)) ) THEN 402 422 ancien_ok=.false. 423 ENDIF 424 425 IF (ok_bs) THEN 426 IF ( (maxval(qbs_ancien).EQ.minval(qbs_ancien)) .OR. & 427 (maxval(prbsw_ancien).EQ.minval(prbsw_ancien)) ) THEN 428 ancien_ok=.false. 429 ENDIF 403 430 ENDIF 404 431 … … 591 618 ! Initialize module pbl_surface_mod 592 619 620 if ( iflag_physiq <= 1 ) then 593 621 CALL pbl_surface_init(fder, snow, qsurf, tsoil) 622 endif 594 623 595 624 ! Initialize module ocean_cpl_mod for the case of coupled ocean -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phyredem.F90
r4389 r4669 15 15 ftsol, beta_aridity, delta_tsurf, falb_dir, & 16 16 falb_dif, qsol, fevap, radsol, solsw, sollw, & 17 sollwdown, rain_fall, snow_fall, z0m, z0h,&17 sollwdown, rain_fall, snow_fall, bs_fall, z0m, z0h, & 18 18 agesno, zmea, zstd, zsig, zgam, zthe, zpic, & 19 19 zval, rugoro, t_ancien, q_ancien, & 20 prw_ancien, prlw_ancien, prsw_ancien, 21 ql_ancien, qs_ancien, rneb_ancien, u_ancien, &20 prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 21 ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, u_ancien, & 22 22 v_ancien, clwcon, rnebcon, ratqs, pbl_tke, & 23 23 wake_delta_pbl_tke, zmax0, f0, sig1, w01, & … … 76 76 ! Get variables which will be written to restart file from module 77 77 ! pbl_surface_mod 78 CALL pbl_surface_final(fder, snow, qsurf, tsoil) 78 if ( iflag_physiq <= 1 ) then 79 CALL pbl_surface_final(fder, snow, qsurf, tsoil) 80 endif 79 81 80 82 ! Get a variable calculated in module fonte_neige_mod … … 243 245 244 246 CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien) 247 248 IF (ok_bs) THEN 249 CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall) 250 CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien) 251 CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien) 252 ENDIF 245 253 246 254 CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_local_var_mod.F90
-
Property
svn:keywords
changed from
Author Date Id Revision
toId
r4489 r4669 14 14 REAL, SAVE, ALLOCATABLE :: ql_seri(:,:),qs_seri(:,:) 15 15 !$OMP THREADPRIVATE(ql_seri,qs_seri) 16 REAL, SAVE, ALLOCATABLE :: qbs_seri(:,:) 17 !$OMP THREADPRIVATE(qbs_seri) 16 18 REAL, SAVE, ALLOCATABLE :: u_seri(:,:), v_seri(:,:) 17 19 !$OMP THREADPRIVATE(u_seri, v_seri) … … 28 30 REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:) 29 31 !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn) 30 REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:) 31 !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn )32 REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:) 33 !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d )32 REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:) 33 !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn) 34 REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:) 35 !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d) 34 36 REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:) 35 37 !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn) … … 71 73 REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:) 72 74 !$OMP THREADPRIVATE(d_u_oli, d_v_oli) 73 REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_ t_diss(:,:)74 !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_t_diss)75 REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:) 76 !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss) 75 77 REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:) 76 78 !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf) … … 80 82 REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:) 81 83 !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x) 84 REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:) 85 !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs) 82 86 !>nrlmd+jyg 83 87 REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:) … … 276 280 !$OMP THREADPRIVATE(sens, flwp, fiwp) 277 281 !! 282 !FC 283 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zxfluxt, zxfluxq 284 !$OMP THREADPRIVATE(zxfluxt, zxfluxq) 285 !FC 278 286 !! Wake variables 279 287 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: alp_wake … … 312 320 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt 313 321 !$OMP THREADPRIVATE(JrNt) 314 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw315 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)322 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw 323 !$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw) 316 324 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m 317 325 !$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m) … … 330 338 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte 331 339 !$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte) 340 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic 341 !$OMP THREADPRIVATE(zxustartlic, zxrhoslic) 332 342 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 333 343 !$OMP THREADPRIVATE(zxfqcalving) … … 451 461 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi 452 462 !$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi) 453 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca 454 !$OMP THREADPRIVATE(prfl, psfl, fraca )463 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl 464 !$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl) 455 465 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2 456 466 !$OMP THREADPRIVATE(Vprecip, zw2) … … 470 480 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn,rneblsvol 471 481 !$OMP THREADPRIVATE(rneb,rnebjn,rneblsvol) 482 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfraclr,pfracld 483 !$OMP THREADPRIVATE(pfraclr,pfracld) 472 484 473 485 ! variables de sorties MM … … 523 535 REAL, SAVE, ALLOCATABLE :: fcontrP(:,:) 524 536 !$OMP THREADPRIVATE(fcontrP) 537 REAL, SAVE, ALLOCATABLE :: distcltop(:,:) 538 !$OMP THREADPRIVATE(distcltop) 539 525 540 526 541 #ifdef CPP_StratAer … … 608 623 609 624 IMPLICIT NONE 610 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev) )625 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 611 626 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 612 627 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf)) … … 616 631 ALLOCATE(tr_seri(klon,klev,nbtr)) 617 632 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) 618 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev) )619 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon) )633 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev)) 634 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon)) 620 635 ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev)) 621 636 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP … … 640 655 ALLOCATE(plul_st(klon),plul_th(klon)) 641 656 ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev)) 642 657 ALLOCATE (d_qbs_vdf(klon,klev)) 658 ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev)) 643 659 ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev)) 644 660 ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev)) … … 769 785 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 770 786 ALLOCATE(JrNt(klon)) 771 ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))772 ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))787 ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon)) 788 ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon)) 773 789 ALLOCATE(s_lcl(klon)) 774 790 ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon)) … … 785 801 ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon)) 786 802 ALLOCATE(zxrunofflic(klon)) 803 ALLOCATE(zxustartlic(klon), zxrhoslic(klon)) 804 zxustartlic(:)=0. ; zxrhoslic(:)=0. 787 805 ALLOCATE(rain_lsc(klon)) 788 806 ALLOCATE(rain_num(klon)) … … 841 859 ALLOCATE(wfevap(klon, nbsrf), wfrain(klon,nbsrf), wfsnow(klon, nbsrf)) 842 860 ALLOCATE(evap_pot(klon, nbsrf)) 861 ! FC 862 ALLOCATE(zxfluxq(klon,klev),zxfluxt(klon,klev)) 843 863 ! 844 864 ! Deep convective variables used in phytrac … … 861 881 ALLOCATE(prfl(klon, klev+1)) 862 882 ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1)) 883 ALLOCATE(bsfl(klon,klev+1)) 863 884 ALLOCATE(zw2(klon, klev+1)) 864 885 … … 874 895 ALLOCATE(beta_prec(klon,klev)) 875 896 ALLOCATE(rneb(klon,klev),rnebjn(klon,klev),rneblsvol(klon,klev)) 897 ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev)) 898 pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined 899 ALLOCATE(distcltop(klon,klev)) 876 900 877 901 … … 942 966 USE indice_sol_mod 943 967 IMPLICIT NONE 944 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri )968 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 945 969 DEALLOCATE(u_seri,v_seri) 946 970 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) … … 949 973 DEALLOCATE(tr_seri) 950 974 DEALLOCATE(d_t_dyn,d_q_dyn) 951 DEALLOCATE(d_ql_dyn,d_qs_dyn )952 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d )975 DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn) 976 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d) 953 977 DEALLOCATE(d_u_dyn,d_v_dyn) 954 978 DEALLOCATE(d_tr_dyn) !RomP … … 973 997 DEALLOCATE(plul_st,plul_th) 974 998 DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss) 999 DEALLOCATE(d_qbs_vdf) 1000 DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs) 975 1001 DEALLOCATE(d_u_vdf,d_v_vdf) 976 1002 DEALLOCATE(d_t_oli,d_t_oro) … … 1083 1109 DEALLOCATE(cldm, cldq, cldt, qsat2m) 1084 1110 DEALLOCATE(JrNt) 1085 DEALLOCATE(dthmin, evap, fder, plcl, plfc)1086 DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)1111 DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc) 1112 DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl) 1087 1113 DEALLOCATE(s_pblh, s_pblt, s_therm) 1088 1114 ! … … 1097 1123 DEALLOCATE(zxfqcalving, zxfluxlat) 1098 1124 DEALLOCATE(zxrunofflic) 1125 DEALLOCATE(zxustartlic, zxrhoslic) 1099 1126 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 1100 1127 DEALLOCATE(rain_lsc) … … 1129 1156 DEALLOCATE(alp_bl_stat, n2, s2) 1130 1157 DEALLOCATE(proba_notrig, random_notrig) 1158 !FC 1159 DEALLOCATE(zxfluxq,zxfluxt) 1131 1160 1132 1161 DEALLOCATE(dnwd0) … … 1165 1194 1166 1195 1167 DEALLOCATE(prfl, psfl, fraca, Vprecip)1196 DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip) 1168 1197 DEALLOCATE(zw2) 1169 1198 … … 1178 1207 DEALLOCATE(beta_prec) 1179 1208 DEALLOCATE(rneb) 1209 DEALLOCATE(pfraclr,pfracld) 1180 1210 DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic) 1181 1211 DEALLOCATE(distcltop) 1182 1212 DEALLOCATE (p_tropopause) 1183 1213 DEALLOCATE (z_tropopause) -
Property
svn:keywords
changed from
-
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_ctrlout_mod.F90
r4412 r4669 378 378 TYPE(ctrl_out), SAVE :: o_snow = ctrl_out((/ 1, 1, 10, 10, 5, 10, 11, 11, 11, 11/), & 379 379 'snow', 'Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /)) 380 TYPE(ctrl_out), SAVE :: o_bsfall = ctrl_out((/ 10, 10, 10, 10, 5, 10, 11, 11, 11, 11/), & 381 'bsfall', 'Blowing Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /)) 380 382 TYPE(ctrl_out), SAVE :: o_evap = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), & 381 383 'evap', 'Evaporat', 'kg/(s*m2)', (/ ('', i=1, 10) /)) 382 384 TYPE(ctrl_out), SAVE :: o_snowerosion = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 385 'snowerosion', 'blowing snow flux', 'kg/(s*m2)', (/ ('', i=1, 10) /)) 386 TYPE(ctrl_out), SAVE :: o_ustart_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 387 'ustart_lic', 'threshold velocity', 'm/s', (/ ('', i=1, 10) /)) 388 TYPE(ctrl_out), SAVE :: o_rhosnow_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 389 'rhosnow_lic', 'snow density lic', 'kg/m3', (/ ('', i=1, 10) /)) 383 390 TYPE(ctrl_out), SAVE :: o_sens_prec_liq_oce = ctrl_out((/ 5, 5, 10, 10, 5, 10, 11, 11, 11, 11/), & 384 391 'sens_rain_oce', 'Sensible heat flux of liquid prec. over ocean', 'W/m2', (/ ('', i=1, 10) /)) … … 743 750 TYPE(ctrl_out), SAVE :: o_prsw = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), & 744 751 'prsw', 'Precipitable solid water', 'kg/m2', (/ ('', i=1, 10) /)) 752 TYPE(ctrl_out), SAVE :: o_prbsw = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 753 'prbsw', 'Precipitable blowing snow', 'kg/m2', (/ ('', i=1, 10) /)) 745 754 TYPE(ctrl_out), SAVE :: o_s_pblh = ctrl_out((/ 1, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 746 755 's_pblh', 'Boundary Layer Height', 'm', (/ ('', i=1, 10) /)) … … 1432 1441 TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), & 1433 1442 'ocond', 'Condensed water', 'kg/kg', (/ ('', i=1, 10) /)) 1443 TYPE(ctrl_out), SAVE :: o_qbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1444 'qbs', 'Specific content of blowing snow', 'kg/kg', (/ ('', i=1, 10) /)) 1434 1445 TYPE(ctrl_out), SAVE :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1435 1446 'wvapp', '', '', (/ ('', i=1, 10) /)) … … 1462 1473 TYPE(ctrl_out), SAVE :: o_rneblsvol = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1463 1474 'rneblsvol', 'LS Cloud fraction by volume', '-', (/ ('', i=1, 10) /)) 1475 TYPE(ctrl_out), SAVE :: o_pfraclr = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1476 'pfraclr', 'LS precipitation fraction clear-sky part', '-', (/ ('', i=1, 10) /)) 1477 TYPE(ctrl_out), SAVE :: o_pfracld = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 1478 'pfracld', 'LS precipitation fraction cloudy part', '-', (/ ('', i=1, 10) /)) 1464 1479 TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1465 1480 'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /)) … … 1494 1509 TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1495 1510 'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1511 TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1512 'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1513 TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1514 'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1496 1515 TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1497 1516 'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /)) … … 1502 1521 TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1503 1522 'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /)) 1523 TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1524 'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /)) 1504 1525 TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1505 1526 're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /)) … … 1530 1551 TYPE(ctrl_out), SAVE :: o_stratomask = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1531 1552 'stratomask', 'Stratospheric fraction', '1', (/ ('', i=1, 10) /)) 1553 !FC 1554 TYPE(ctrl_out), SAVE :: o_zxfluxt = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1555 'fluxt', 'flux h ', 'W/m2', (/ ('', i=1, 10) /)) 1556 TYPE(ctrl_out), SAVE :: o_zxfluxq = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11, 11/), & 1557 'fluxq', 'flux q ', 'kg/(s*m2)', (/ ('', i=1, 10) /)) 1532 1558 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1533 1559 … … 1599 1625 TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1600 1626 'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1627 TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1628 'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1629 TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1630 'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1601 1631 TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1602 1632 'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /)) … … 1673 1703 TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1674 1704 'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1705 TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1706 'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1707 TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1708 'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1709 TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1710 'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /)) 1711 TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1712 'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1675 1713 1676 1714 !!!!!!!!!!!!!!!! Specifique thermiques -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_var_mod.F90
r4370 r4669 30 30 REAL, SAVE, ALLOCATABLE :: d_qw_col(:) ! watter vapour mass budget for each column (kg/m2/s) 31 31 REAL, SAVE, ALLOCATABLE :: d_ql_col(:) ! liquid watter mass budget for each column (kg/m2/s) 32 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! solid watter mass budget for each column (kg/m2/s) 32 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! cloud ice mass budget for each column (kg/m2/s) 33 REAL, SAVE, ALLOCATABLE :: d_qbs_col(:) ! blowing snow mass budget for each column (kg/m2/s) 33 34 REAL, SAVE, ALLOCATABLE :: d_qt_col(:) ! total watter mass budget for each column (kg/m2/s) 34 35 REAL, SAVE, ALLOCATABLE :: d_ek_col(:) ! kinetic energy budget for each column (W/m2) … … 36 37 REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:) ! enthalpy budget of watter vapour for each column (W/m2) 37 38 REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:) ! enthalpy budget of liquid watter for each column (W/m2) 38 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of solid watter for each column (W/m2) 39 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of cloud ice for each column (W/m2) 40 REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:) ! enthalpy budget of blowing snow for each column (W/m2) 39 41 REAL, SAVE, ALLOCATABLE :: d_h_col(:) ! total enthalpy budget for each column (W/m2) 40 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col)41 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col)42 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col) 43 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col) 42 44 43 45 ! Outputs used in cloudth_vert to extract the moments of the horizontal and … … 173 175 174 176 allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon)) 175 allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_q t_col(klon), d_ek_col(klon), d_h_dair_col(klon) &176 & , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_ col(klon))177 d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_q t_col=0. ; d_ek_col=0. ; d_h_dair_col =0.178 d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_ col=0.177 allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qbs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) & 178 & , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_qbs_col(klon), d_h_col(klon)) 179 d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qbs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0. 180 d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_qbs_col=0. ; d_h_col=0. 179 181 180 182 ! Outputs used in cloudth_vert … … 223 225 deallocate(sza_o) 224 226 deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent) 225 deallocate (d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col &226 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col)227 deallocate (d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col & 228 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col) 227 229 228 230 ! Outputs used in cloudth_vert -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_output_write_mod.F90
r4489 r4669 17 17 SUBROUTINE phys_output_write(itap, pdtphys, paprs, pphis, & 18 18 pplay, lmax_th, aerosol_couple, & 19 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync, &19 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync, & 20 20 ptconv, read_climoz, clevSTD, ptconvth, & 21 21 d_u, d_t, qx, d_qx, zmasse, flag_aerosol, flag_aerosol_strat, ok_cdnc) … … 47 47 o_psol, o_mass, o_qsurf, o_qsol, & 48 48 o_precip, o_rain_fall, o_rain_con, o_ndayrain, o_plul, o_pluc, o_plun, & 49 o_snow, o_msnow, o_fsnow, o_evap, o_ep,o_epmax_diag, & ! epmax_cape 49 o_snow, o_msnow, o_fsnow, o_evap, o_snowerosion, o_ustart_lic, o_rhosnow_lic, o_bsfall, & 50 o_ep,o_epmax_diag, & ! epmax_cape 50 51 o_tops, o_tops0, o_topl, o_topl0, & 51 52 o_SWupTOA, o_SWupTOAclr, o_SWupTOAcleanclr, o_SWdnTOA, o_fdiffSWdnSFC, & … … 81 82 o_Mipsh, o_Ma, & 82 83 o_dnwd, o_dnwd0, o_ftime_deepcv, o_ftime_con, o_mc, & 83 o_prw, o_prlw, o_prsw, o_ s_pblh, o_s_pblt, o_s_lcl, &84 o_prw, o_prlw, o_prsw, o_prbsw, o_s_pblh, o_s_pblt, o_s_lcl, & 84 85 o_s_therm, o_uSTDlevs, o_vSTDlevs, & 85 86 o_wSTDlevs, o_zSTDlevs, o_qSTDlevs, & … … 106 107 o_weakinv, o_dthmin, o_cldtau, & 107 108 o_cldemi, o_pr_con_l, o_pr_con_i, & 108 o_pr_lsc_l, o_pr_lsc_i, o_ re, o_fl, &109 o_pr_lsc_l, o_pr_lsc_i, o_pr_bs, o_re, o_fl, & 109 110 o_rh2m, & 110 111 o_qsat2m, o_tpot, o_tpote, o_SWnetOR, & … … 134 135 o_cldicemxrat, o_cldwatmxrat, o_reffclwtop, o_ec550aer, & 135 136 o_lwcon, o_iwcon, o_temp, o_theta, & 136 o_ovapinit, o_ovap, o_oliq, o_ocond, o_geop, &137 o_ovapinit, o_ovap, o_oliq, o_ocond, o_geop,o_qbs, & 137 138 o_vitu, o_vitv, o_vitw, o_pres, o_paprs, & 138 139 o_zfull, o_zhalf, o_rneb, o_rnebjn, o_rnebcon, & 139 140 o_rnebls, o_rneblsvol, o_rhum, o_rhl, o_rhi, o_ozone, o_ozone_light, & 141 o_pfraclr, o_pfracld, & 140 142 o_duphy, o_dtphy, o_dqphy, o_dqphy2d, o_dqlphy, o_dqlphy2d, & 141 o_dqsphy, o_dqsphy2d, o_ albe_srf, o_z0m_srf, o_z0h_srf, &143 o_dqsphy, o_dqsphy2d, o_dqbsphy, o_dqbsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, & 142 144 o_ages_srf, o_snow_srf, o_alb1, o_alb2, o_tke, o_tke_dissip, & 143 145 o_tke_max, o_kz, o_kz_max, o_clwcon, & 144 146 o_dtdyn, o_dqdyn, o_dqdyn2d, o_dqldyn, o_dqldyn2d, & 145 o_dqsdyn, o_dqsdyn2d, o_d udyn, o_dvdyn, &147 o_dqsdyn, o_dqsdyn2d, o_dqbsdyn, o_dqbsdyn2d, o_dudyn, o_dvdyn, & 146 148 o_dtcon, o_tntc, o_ducon, o_dvcon, & 147 149 o_dqcon, o_dqcon2d, o_tnhusc, o_tnhusc, o_dtlsc, & … … 151 153 o_ptconvth, o_lmaxth, o_dtvdf, & 152 154 o_dtdis, o_dqvdf, o_dqvdf2d, o_dteva, o_dqeva, o_dqeva2d, & 155 o_dqbsvdf, o_dtbs, o_dqbs, o_dqbsbs, & 153 156 o_ptconv, o_ratqs, o_dtthe, & 154 157 o_duthe, o_dvthe, o_ftime_th, & … … 204 207 o_dxtajs,o_dxtvdf,o_dxtthe, o_dxtch4, & 205 208 o_dxtprod_nucl,o_dxtcosmo,o_dxtdecroiss, & 209 o_xtevap_srf, & 206 210 #endif 207 211 ! Tropopause … … 219 223 o_flx_co2_ff, o_flx_co2_bb, & 220 224 o_delta_sst, o_delta_sal, o_ds_ns, o_dt_ns, o_dter, o_dser, o_tkt, & 221 o_tks, o_taur, o_sss 225 o_tks, o_taur, o_sss, & 226 !FC 227 o_zxfluxt,o_zxfluxq 222 228 223 229 #ifdef CPP_StratAer … … 241 247 USE phys_state_var_mod, ONLY: heat_volc, cool_volc !NL 242 248 243 USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, &249 USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, bs_fall,& 244 250 qsol, z0m, z0h, fevap, agesno, & 245 nday_rain, rain_con, snow_con, &251 nday_rain, ndayrain_mth, rain_con, snow_con, & 246 252 topsw, toplw, toplw0, swup, swdn, solswfdiff, & 247 253 topsw0, swupc0, swdnc0, swup0, swdn0, SWup200, SWup200clr, & … … 269 275 wTSTD, u2STD, v2STD, T2STD, missing_val_nf90, delta_sal, ds_ns, & 270 276 #ifdef ISO 271 xtrain_con, xtsnow_con, xtrain_fall, xtsnow_fall, &277 xtrain_con, xtsnow_con, xtrain_fall, xtsnow_fall, fxtevap, & 272 278 #endif 273 279 dt_ns, delta_sst, dter, dser … … 275 281 USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, & 276 282 zn2mout, t2m_min_mon, t2m_max_mon, evap, & 283 snowerosion, zxustartlic, zxrhoslic, & 277 284 l_mixmin,l_mix, tke_dissip, & 278 285 zu10m, zv10m, zq2m, zustar, zxqsurf, & … … 288 295 uwat, vwat, & 289 296 rneb_seri, d_rneb_dyn, & 290 plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw, &297 plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw,prbsw, & 291 298 s_pblh, s_pblt, s_lcl, s_therm, uwriteSTD, & 292 299 vwriteSTD, wwriteSTD, phiwriteSTD, qwriteSTD, & … … 308 315 alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, & 309 316 weak_inversion, dthmin, cldtau, cldemi, & 310 pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, &317 pmflxr, pmflxs, prfl, psfl,bsfl, re, fl, rh2m, & 311 318 qsat2m, tpote, tpot, d_ts, od443aer, od550aer, dryod550aer, & 312 319 od865aer, abs550aer, od550lt1aer, sconcso4, sconcno3, & … … 324 331 icc3dcon, icc3dstra, zfice, reffclwtop, & 325 332 ec550aer, flwc, fiwc, t_seri, theta, q_seri, & 326 ql_seri, qs_seri, tr_seri,&333 ql_seri, qs_seri, qbs_seri, tr_seri, qbs_seri,& 327 334 zphi, u_seri, v_seri, omega, cldfra, & 328 rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, d_t_dyn, & 329 d_q_dyn, d_ql_dyn, d_qs_dyn, & 330 d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, & 335 rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, & 336 pfraclr, pfracld, d_t_dyn, & 337 d_q_dyn, d_ql_dyn, d_qs_dyn, d_qbs_dyn, & 338 d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d, & 331 339 d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, & 332 340 d_u_ajs, d_v_ajs, & … … 336 344 d_t_lscst, d_q_lscth, d_q_lscst, plul_th, & 337 345 plul_st, d_t_vdf, d_t_diss, d_q_vdf, d_q_eva, & 346 d_t_bs, d_q_bs, d_qbs_bs, d_qbs_vdf, & 338 347 zw2, fraca, zmax_th, d_q_ajsb, d_t_ec, d_u_vdf, & 339 348 d_v_vdf, d_u_oro, d_v_oro, d_t_oro, d_u_lif, & … … 350 359 #endif 351 360 ep, epmax_diag, & ! epmax_cape 352 p_tropopause, t_tropopause, z_tropopause 361 p_tropopause, t_tropopause, z_tropopause, & 362 zxfluxt,zxfluxq 363 !FC 353 364 354 365 #ifdef CPP_StratAer … … 431 442 432 443 ! Input 433 INTEGER :: itap, ivap, iliq, isol, read_climoz444 INTEGER :: itap, ivap, iliq, isol, ibs, read_climoz 434 445 INTEGER, DIMENSION(klon) :: lmax_th 435 446 LOGICAL :: aerosol_couple, ok_sync … … 887 898 888 899 IF (vars_defined) THEN 889 DO i = 1, klon 900 IF (ok_bs) THEN 901 DO i = 1, klon 902 zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) + bs_fall(i) 903 ENDDO 904 ELSE 905 DO i = 1, klon 890 906 zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) 891 ENDDO 907 ENDDO 908 ENDIF 892 909 ENDIF 893 910 894 911 CALL histwrite_phy(o_precip, zx_tmp_fi2d) 895 912 CALL histwrite_phy(o_rain_fall, rain_fall) 896 CALL histwrite_phy(o_ndayrain, nday _rain)913 CALL histwrite_phy(o_ndayrain, ndayrain_mth) 897 914 898 915 ! epmax_cape: … … 919 936 CALL histwrite_phy(o_fsnow, zfra_o) 920 937 CALL histwrite_phy(o_evap, evap) 938 939 IF (ok_bs) THEN 940 CALL histwrite_phy(o_bsfall, bs_fall) 941 CALL histwrite_phy(o_snowerosion, snowerosion) 942 CALL histwrite_phy(o_ustart_lic, zxustartlic) 943 CALL histwrite_phy(o_rhosnow_lic, zxrhoslic) 944 ENDIF 921 945 922 946 IF (vars_defined) THEN … … 1105 1129 ENDIF 1106 1130 CALL histwrite_phy(o_tauy, zx_tmp_fi2d) 1107 1108 ! Etienne: test sorties pour compil sur JZ1109 ! IF (landice_opt .GE. 1) THEN1110 ! CALL histwrite_phy(o_snowsrf, snow_o)1111 ! CALL histwrite_phy(o_qsnow, qsnow)1112 ! CALL histwrite_phy(o_snowhgt,snowhgt)1113 ! CALL histwrite_phy(o_toice,to_ice)1114 ! CALL histwrite_phy(o_sissnow,sissnow)1115 ! CALL histwrite_phy(o_runoff,runoff)1116 ! CALL histwrite_phy(o_albslw3,albsol3_lic)1117 ! ENDIF1118 1131 1119 1132 DO nsrf = 1, nbsrf … … 1281 1294 CALL histwrite_phy(o_prlw, prlw) 1282 1295 CALL histwrite_phy(o_prsw, prsw) 1296 IF (ok_bs) THEN 1297 CALL histwrite_phy(o_prbsw, prbsw) 1298 ENDIF 1283 1299 CALL histwrite_phy(o_s_pblh, s_pblh) 1284 1300 CALL histwrite_phy(o_s_pblt, s_pblt) … … 1526 1542 CALL histwrite_phy(o_re, re) 1527 1543 CALL histwrite_phy(o_fl, fl) 1544 1545 IF (ok_bs) THEN 1546 CALL histwrite_phy(o_pr_bs, bsfl(:,1:klev)) 1547 ENDIF 1548 1528 1549 IF (vars_defined) THEN 1529 1550 DO i=1, klon … … 1783 1804 CALL histwrite_phy(o_ovap, q_seri) 1784 1805 CALL histwrite_phy(o_oliq, ql_seri) 1806 !FC 1807 CALL histwrite_phy(o_zxfluxt, zxfluxt) 1808 CALL histwrite_phy(o_zxfluxq, zx_tmp_fi3d) 1809 !FC 1785 1810 1786 1811 IF (vars_defined) zx_tmp_fi3d = ql_seri+qs_seri … … 1796 1821 IF (vars_defined) zx_tmp_fi3d = zphi/RG 1797 1822 CALL histwrite_phy(o_zfull,zx_tmp_fi3d) 1823 1824 IF (ok_bs) THEN 1825 CALL histwrite_phy(o_qbs, qbs_seri) 1826 ENDIF 1798 1827 1799 1828 #ifdef CPP_XIOS … … 1846 1875 IF (vars_defined) zx_tmp_fi3d = zx_rhi * 100. 1847 1876 CALL histwrite_phy(o_rhi, zx_tmp_fi3d) 1877 ENDIF 1878 1879 IF (ok_new_lscp) THEN 1880 CALL histwrite_phy(o_pfraclr, pfraclr) 1881 CALL histwrite_phy(o_pfracld, pfracld) 1848 1882 ENDIF 1849 1883 … … 1908 1942 zx_tmp_fi2d=0.0 1909 1943 CALL histwrite_phy(o_dqsphy2d, zx_tmp_fi2d) 1944 ENDIF 1945 1946 1947 IF (ok_bs) THEN 1948 CALL histwrite_phy(o_dqbsphy, d_qx(:,:,ibs)) 1949 IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d) 1950 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1951 ELSE 1952 zx_tmp_fi3d=0.0 1953 CALL histwrite_phy(o_dqbsphy, zx_tmp_fi3d) 1954 zx_tmp_fi2d=0.0 1955 CALL histwrite_phy(o_dqbsphy2d, zx_tmp_fi2d) 1910 1956 ENDIF 1911 1957 … … 1958 2004 1959 2005 CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d) 2006 2007 IF (ok_bs) THEN 2008 CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn) 2009 CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d) 2010 ENDIF 1960 2011 1961 2012 CALL histwrite_phy(o_dudyn, d_u_dyn) … … 2101 2152 ENDIF 2102 2153 CALL histwrite_phy(o_dvthe, zx_tmp_fi3d) 2154 2155 IF (ok_bs) THEN 2156 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys 2157 CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d) 2158 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys 2159 CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d) 2160 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys 2161 CALL histwrite_phy(o_dqbs, zx_tmp_fi3d) 2162 IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys 2163 CALL histwrite_phy(o_dtbs, zx_tmp_fi3d) 2164 ENDIF 2103 2165 2104 2166 IF (iflag_thermals>=1) THEN … … 2614 2676 CALL histwrite_phy(o_xtoliq(ixt), xtl_seri(ixt,:,:)) 2615 2677 2678 DO nsrf = 1, nbsrf ! ajout Camille 8 mai 2023 2679 IF (vars_defined) zx_tmp_fi2d(1 : klon) = fxtevap(ixt,:, nsrf) 2680 CALL histwrite_phy(o_xtevap_srf(ixt,nsrf), zx_tmp_fi2d) 2681 ENDDO 2682 2616 2683 IF (vars_defined) zx_tmp_fi3d(:,:)=xtl_seri(ixt,:,:)+xts_seri(ixt,:,:) 2617 2684 CALL histwrite_phy(o_xtcond(ixt), zx_tmp_fi3d) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/phys_state_var_mod.F90
r4370 r4669 54 54 55 55 56 REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:) 57 !$OMP THREADPRIVATE( rain_fall, snow_fall )56 REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:), bs_fall(:) 57 !$OMP THREADPRIVATE( rain_fall, snow_fall, bs_fall) 58 58 REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:) 59 59 !$OMP THREADPRIVATE(solsw, solswfdiff, sollw) … … 82 82 REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:) 83 83 !$OMP THREADPRIVATE(t_ancien, q_ancien) 84 REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:) 85 !$OMP THREADPRIVATE(ql_ancien, qs_ancien )86 REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:) 87 !$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien )84 REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:), qbs_ancien(:,:) 85 !$OMP THREADPRIVATE(ql_ancien, qs_ancien, qbs_ancien) 86 REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:), prbsw_ancien(:) 87 !$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien) 88 88 #ifdef ISO 89 89 REAL, ALLOCATABLE, SAVE :: xt_ancien(:,:,:),xtl_ancien(:,:,:),xts_ancien(:,:,:) … … 313 313 REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 314 314 !$OMP THREADPRIVATE(total_rain,nday_rain) 315 REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:) 316 !$OMP THREADPRIVATE(ndayrain_mth) 315 317 REAL,ALLOCATABLE,SAVE :: paire_ter(:) 316 318 !$OMP THREADPRIVATE(paire_ter) … … 547 549 ALLOCATE(rain_fall(klon)) 548 550 ALLOCATE(snow_fall(klon)) 551 ALLOCATE(bs_fall(klon)) 549 552 ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon)) 550 553 sollw=0.0 … … 556 559 ALLOCATE(rugoro(klon)) 557 560 ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev)) 558 ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev) )559 ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon) )561 ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev), qbs_ancien(klon,klev)) 562 ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon), prbsw_ancien(klon)) 560 563 ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev)) 561 564 !!! Rom P >>> … … 655 658 ALLOCATE(pfrac_1nucl(klon,klev)) 656 659 ALLOCATE(total_rain(klon), nday_rain(klon)) 660 ALLOCATE(ndayrain_mth(klon)) 657 661 ALLOCATE(paire_ter(klon)) 658 662 ALLOCATE(albsol1(klon), albsol2(klon)) … … 763 767 !FC 764 768 DEALLOCATE(treedrg) 765 DEALLOCATE(rain_fall, snow_fall, solsw, solswfdiff, sollw, radsol, swradcorr)769 DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr) 766 770 DEALLOCATE(zmea, zstd, zsig, zgam) 767 771 DEALLOCATE(zthe, zpic, zval) 768 772 DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon) 769 DEALLOCATE(qs_ancien, ql_ancien, rneb_ancien)770 DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien )773 DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien, rneb_ancien) 774 DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien) 771 775 DEALLOCATE(qtc_cv,sigt_cv) 772 776 DEALLOCATE(u_ancien, v_ancien) … … 835 839 DEALLOCATE(pfrac_1nucl) 836 840 DEALLOCATE(total_rain, nday_rain) 841 DEALLOCATE(ndayrain_mth) 837 842 DEALLOCATE(paire_ter) 838 843 DEALLOCATE(albsol1, albsol2) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/physiq_mod.F90
r4661 r4669 84 84 USE atke_turbulence_ini_mod, ONLY : atke_ini 85 85 USE thermcell_ini_mod, ONLY : thermcell_ini 86 USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs 86 87 USE lscp_ini_mod, ONLY : lscp_ini 87 88 … … 141 142 !!!!!!!!!!!!!!!!!! END "USE" for CPP keys !!!!!!!!!!!!!!!!!!!!!! 142 143 144 USE physiqex_mod, ONLY : physiqex 143 145 USE phys_local_var_mod, ONLY: phys_local_var_init, phys_local_var_end, & 144 146 ! [Variables internes non sauvegardees de la physique] 145 147 ! Variables locales pour effectuer les appels en serie 146 t_seri,q_seri,ql_seri,qs_seri, u_seri,v_seri,tr_seri,rneb_seri, &148 t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, & 147 149 rhcl, & 148 150 ! Dynamic tendencies (diagnostics) 149 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_ u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &150 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &151 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, & 152 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 151 153 ! Physic tendencies 152 154 d_t_con,d_q_con,d_u_con,d_v_con, & … … 165 167 plul_st,plul_th, & 166 168 ! 167 d_t_vdf,d_q_vdf, d_u_vdf,d_v_vdf,d_t_diss, &169 d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, & 168 170 d_t_vdf_x, d_t_vdf_w, & 169 171 d_q_vdf_x, d_q_vdf_w, & 170 172 d_ts, & 173 ! 174 d_t_bs,d_q_bs,d_qbs_bs, & 171 175 ! 172 176 ! d_t_oli,d_u_oli,d_v_oli, & … … 216 220 cldh, cldl,cldm, cldq, cldt, & 217 221 JrNt, & 218 dthmin, evap, fder, plcl, plfc, &219 prw, prlw, prsw, &222 dthmin, evap, snowerosion,fder, plcl, plfc, & 223 prw, prlw, prsw, prbsw, & 220 224 s_lcl, s_pblh, s_pblt, s_therm, & 221 225 cdragm, cdragh, & … … 290 294 ! 291 295 rneblsvol, & 296 pfraclr,pfracld, & 297 distcltop, & 292 298 zqsatl, zqsats, & 293 299 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & … … 305 311 fsolsw, wfbils, wfbilo, & 306 312 wfevap, wfrain, wfsnow, & 307 prfl, psfl, fraca, Vprecip, &313 prfl, psfl,bsfl, fraca, Vprecip, & 308 314 zw2, & 309 315 ! … … 317 323 beta_prec, & 318 324 rneb, & 319 zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic 320 ! 325 zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic, & 326 zxfluxt,zxfluxq 327 ! 328 USE output_physiqex_mod, ONLY: output_physiqex 329 321 330 322 331 IMPLICIT NONE … … 461 470 !====================================================================== 462 471 ! 463 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 464 INTEGER,SAVE :: ivap, iliq, isol, irneb 465 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb )472 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 473 INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs 474 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs) 466 475 ! 467 476 ! … … 834 843 !XXX PB 835 844 REAL fluxq(klon,klev, nbsrf) ! flux turbulent d'humidite 836 ! 837 REAL zxfluxt(klon, klev) 838 REAL zxfluxq(klon, klev) 845 REAL fluxqbs(klon,klev, nbsrf) ! flux turbulent de neige soufflee 846 ! 847 !FC REAL zxfluxt(klon, klev) 848 !FC REAL zxfluxq(klon, klev) 849 REAL zxfluxqbs(klon,klev) 839 850 REAL zxfluxu(klon, klev) 840 851 REAL zxfluxv(klon, klev) … … 920 931 ! 921 932 ! tendance nulles 922 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 933 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0 923 934 REAL, dimension(klon) :: dsig0, ddens0 924 935 INTEGER, dimension(klon) :: wkoccur1 … … 944 955 LOGICAL, SAVE :: ok_bug_split_th = .TRUE. 945 956 !$OMP THREADPRIVATE(ok_bug_split_th) 957 958 ! Logical switch to a bug : modifying directly wake_deltat by adding 959 ! the (w) dry adjustment tendency to wake_deltat 960 LOGICAL, SAVE :: ok_bug_ajs_cv = .TRUE. 961 !$OMP THREADPRIVATE(ok_bug_ajs_cv) 946 962 947 963 ! … … 1061 1077 REAL ztsol(klon) 1062 1078 REAL q2m(klon,nbsrf) ! humidite a 2m 1063 1079 REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface 1080 REAL qbsfra ! blowing snow fraction 1064 1081 !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels 1065 1082 CHARACTER*40 t2mincels, t2maxcels !t2m min., t2m max … … 1136 1153 !IM 100106 BEG : pouvoir sortir les ctes de la physique 1137 1154 include "conema3.h" 1138 include "fisrtilp.h"1139 1155 include "nuage.h" 1140 1156 include "compbl.h" … … 1144 1160 ! Declarations pour Simulateur COSP 1145 1161 !============================================================ 1162 ! AI 10-22 1163 #ifdef CPP_COSP 1164 include "ini_COSP.h" 1165 #endif 1146 1166 real :: mr_ozone(klon,klev), phicosp(klon,klev) 1147 1167 … … 1218 1238 REAL pi 1219 1239 1240 1241 !======================================================================! 1242 ! Bifurcation vers un nouveau moniteur physique pour experimenter ! 1243 ! des solutions et préparer le couplage avec la physique de MesoNH ! 1244 ! 14 mai 2023 ! 1245 !======================================================================! 1246 if (debut) then ! 1247 iflag_physiq=0 1248 call getin_p('iflag_physiq', iflag_physiq) ! 1249 endif ! 1250 if ( iflag_physiq == 2 ) then ! 1251 call physiqex (nlon,nlev, & ! 1252 debut,lafin,pdtphys_, & ! 1253 paprs,pplay,pphi,pphis,presnivs, & ! 1254 u,v,rot,t,qx, & ! 1255 flxmass_w, & ! 1256 d_u, d_v, d_t, d_qx, d_ps) ! 1257 return ! 1258 endif ! 1259 !======================================================================! 1260 1261 1220 1262 pi = 4. * ATAN(1.) 1221 1263 … … 1244 1286 ! Utilise notamment en 1D mais peut etre active egalement en 3D 1245 1287 ! en imposant la valeur de igout. 1246 !====================================================================== d1288 !====================================================================== 1247 1289 IF (prt_level.ge.1) THEN 1248 1290 igout=klon/2+1/klon … … 1275 1317 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1276 1318 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1319 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1277 1320 CALL init_etat0_limit_unstruct 1278 1321 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1324 1367 ENDIF 1325 1368 1326 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1369 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1327 1370 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1328 1371 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1342 1385 CALL abort_physic(modname,abort_message,1) 1343 1386 ENDIF 1387 1388 IF (ok_bs) THEN 1389 IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN 1390 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1391 'but nqo=', nqo 1392 abort_message='see above' 1393 CALL abort_physic(modname,abort_message, 1) 1394 ENDIF 1395 ENDIF 1344 1396 1345 1397 Ncvpaseq1 = 0 … … 1404 1456 CALL getin_p('ok_bug_cv_trac',ok_bug_cv_trac) 1405 1457 CALL getin_p('ok_bug_split_th',ok_bug_split_th) 1458 CALL getin_p('ok_bug_ajs_cv',ok_bug_ajs_cv) 1406 1459 fl_ebil = 0 ! by default, conservation diagnostics are desactivated 1407 1460 CALL getin_p('fl_ebil',fl_ebil) … … 1676 1729 IF (.NOT. create_etat0_limit) CALL init_readaerosolstrato(flag_aerosol_strat) !! initialise aero strato from file for XIOS interpolation (unstructured_grid) 1677 1730 1731 if (ok_cosp) then 1678 1732 #ifdef CPP_COSP 1679 IF (ok_cosp) THEN1680 ! DO k = 1, klev 1681 ! DO i = 1, klon 1682 ! phicosp(i,k) = pphi(i,k) + pphis(i) 1683 ! ENDDO 1684 ! ENDDO 1733 ! A.I : Initialisations pour le 1er passage a Cosp 1734 CALL ini_COSP(ref_liq_cosp0,ref_ice_cosp0,pctsrf_cosp0,zu10m_cosp0,zv10m_cosp0, & 1735 zxtsol_cosp0,zx_rh_cosp0,cldfra_cosp0,rnebcon_cosp0,flwc_cosp0, & 1736 fiwc_cosp0,prfl_cosp0,psfl_cosp0,pmflxr_cosp0,pmflxs_cosp0, & 1737 mr_ozone_cosp0,cldtau_cosp0,cldemi_cosp0,JrNt_cosp0) 1738 1685 1739 CALL phys_cosp(itap,phys_tstep,freq_cosp, & 1686 1740 ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, & … … 1695 1749 pmflxr(:,1:klev),pmflxs(:,1:klev), & 1696 1750 mr_ozone,cldtau, cldemi) 1697 ENDIF1698 1751 #endif 1699 1752 1700 1753 #ifdef CPP_COSP2 1701 IF (ok_cosp) THEN1702 ! DO k = 1, klev1703 ! DO i = 1, klon1704 ! phicosp(i,k) = pphi(i,k) + pphis(i)1705 ! ENDDO1706 ! ENDDO1707 1754 CALL phys_cosp2(itap,phys_tstep,freq_cosp, & 1708 1755 ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, & … … 1717 1764 pmflxr(:,1:klev),pmflxs(:,1:klev), & 1718 1765 mr_ozone,cldtau, cldemi) 1719 ENDIF1720 1766 #endif 1721 1767 1722 1768 #ifdef CPP_COSPV2 1723 IF (ok_cosp) THEN1724 DO k = 1, klev1725 DO i = 1, klon1726 phicosp(i,k) = pphi(i,k) + pphis(i)1727 ENDDO1728 ENDDO1729 1769 CALL lmdz_cosp_interface(itap,phys_tstep,freq_cosp, & 1730 1770 ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, & … … 1739 1779 pmflxr(:,1:klev),pmflxs(:,1:klev), & 1740 1780 mr_ozone,cldtau, cldemi) 1741 ENDIF1742 1781 #endif 1782 ENDIF 1743 1783 1744 1784 ! … … 1756 1796 CALL thermcell_ini(iflag_thermals,prt_level,tau_thermals,lunout, & 1757 1797 & RG,RD,RCPD,RKAPPA,RLVTT,RETV) 1758 IF (ok_new_lscp) then 1759 CALL lscp_ini(pdtphys,ok_ice_sursat) 1760 endif 1798 CALL lscp_ini(pdtphys,ok_ice_sursat, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG) 1799 CALL blowing_snow_ini(prt_level,lunout, & 1800 RCPD, RLSTT, RLVTT, RLMLT, & 1801 RVTMP2, RTT,RD,RG) 1802 1761 1803 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1762 1804 … … 1784 1826 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 1785 1827 pplay, lmax_th, aerosol_couple, & 1786 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&1828 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync,& 1787 1829 ptconv, read_climoz, clevSTD, & 1788 1830 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 2255 2297 dql0(:,:)=0. 2256 2298 dqi0(:,:)=0. 2299 dqbs0(:,:)=0. 2257 2300 dsig0(:) = 0. 2258 2301 ddens0(:) = 0. … … 2307 2350 q_seri(i,k) = qx(i,k,ivap) 2308 2351 ql_seri(i,k) = qx(i,k,iliq) 2352 qbs_seri(i,k) = 0. 2309 2353 !CR: ATTENTION, on rajoute la variable glace 2310 2354 IF (nqo.EQ.2) THEN !--vapour and liquid only … … 2314 2358 qs_seri(i,k) = qx(i,k,isol) 2315 2359 rneb_seri(i,k) = 0. 2316 ELSE IF (nqo. EQ.4) THEN !--vapour, liquid, ice and rneb2360 ELSE IF (nqo.GE.4) THEN !--vapour, liquid, ice and rneb and blowing snow 2317 2361 qs_seri(i,k) = qx(i,k,isol) 2362 IF (ok_ice_sursat) THEN 2318 2363 rneb_seri(i,k) = qx(i,k,irneb) 2364 ENDIF 2365 IF (ok_bs) THEN 2366 qbs_seri(i,k)= qx(i,k,ibs) 2367 ENDIF 2368 2319 2369 ENDIF 2370 2371 2320 2372 ENDDO 2321 2373 ENDDO … … 2326 2378 qql1(:)=0.0 2327 2379 DO k = 1, klev 2328 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k) )*zmasse(:,k)2380 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k) 2329 2381 ENDDO 2330 2382 ENDIF … … 2382 2434 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2383 2435 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2436 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2384 2437 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2385 2438 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2388 2441 CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d) 2389 2442 d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep 2443 CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d) 2444 d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep 2390 2445 ! !! RomP >>> td dyn traceur 2391 2446 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep … … 2403 2458 d_ql_dyn2d(:) = 0.0 2404 2459 d_qs_dyn2d(:) = 0.0 2460 d_qbs_dyn2d(:)= 0.0 2405 2461 ! !! RomP >>> td dyn traceur 2406 2462 IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0 2407 2463 ! !! RomP <<< 2408 2464 d_rneb_dyn(:,:)=0.0 2465 d_qbs_dyn(:,:)=0.0 2409 2466 ancien_ok = .TRUE. 2410 2467 ENDIF … … 2522 2579 2523 2580 CALL add_phys_tend & 2524 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, paprs,&2581 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,& 2525 2582 'eva',abortphy,flag_inhib_tend,itap,0) 2526 2583 CALL prt_enerbil('eva',itap) … … 2698 2755 longitude_deg, latitude_deg, rugoro, zrmu0, & 2699 2756 sollwdown, cldt, & 2700 rain_fall, snow_fall, solsw, solswfdiff, sollw, &2757 rain_fall, snow_fall, bs_fall, solsw, solswfdiff, sollw, & 2701 2758 gustiness, & 2702 t_seri, q_seri, u_seri, v_seri, &2759 t_seri, q_seri, qbs_seri, u_seri, v_seri, & 2703 2760 !nrlmd+jyg< 2704 2761 wake_deltat, wake_deltaq, wake_cstar, wake_s, & … … 2711 2768 !albedo SB >>> 2712 2769 ! albsol1, albsol2, sens, evap, & 2713 albsol_dir, albsol_dif, sens, evap, 2770 albsol_dir, albsol_dif, sens, evap, snowerosion, & 2714 2771 !albedo SB <<< 2715 2772 albsol3_lic,runoff, snowhgt, qsnow, to_ice, sissnow, & 2716 2773 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 2717 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, &2774 d_t_vdf, d_q_vdf, d_qbs_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 2718 2775 !nrlmd< 2719 2776 !jyg< … … 2741 2798 fluxt, fluxu, fluxv, & 2742 2799 dsens, devap, zxsnow, & 2743 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, &2800 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, & 2744 2801 !nrlmd+jyg< 2745 2802 wake_delta_pbl_TKE, & … … 2766 2823 IF (klon_glo==1) THEN 2767 2824 CALL add_pbl_tend & 2768 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2825 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2769 2826 'vdf',abortphy,flag_inhib_tend,itap) 2770 2827 ELSE 2771 2828 CALL add_phys_tend & 2772 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&2829 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 2773 2830 'vdf',abortphy,flag_inhib_tend,itap,0) 2774 2831 ENDIF 2775 2832 CALL prt_enerbil('vdf',itap) 2833 2776 2834 !-------------------------------------------------------------------- 2777 2835 … … 2824 2882 2825 2883 ENDIF 2884 2885 ! ================================================================== 2886 ! Blowing snow sublimation and sedimentation 2887 2888 d_t_bs(:,:)=0. 2889 d_q_bs(:,:)=0. 2890 d_qbs_bs(:,:)=0. 2891 bsfl(:,:)=0. 2892 bs_fall(:)=0. 2893 IF (ok_bs) THEN 2894 2895 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, & 2896 d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall) 2897 2898 CALL add_phys_tend & 2899 (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,& 2900 'bs',abortphy,flag_inhib_tend,itap,0) 2901 2902 ENDIF 2903 2826 2904 ! =================================================================== c 2827 2905 ! Calcul de Qsat … … 2994 3072 ENDDO 2995 3073 ENDDO 2996 IF (iflag_adjwk == 2 ) THEN3074 IF (iflag_adjwk == 2 .AND. OK_bug_ajs_cv) THEN 2997 3075 CALL add_wake_tend & 2998 3076 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy) 2999 ENDIF ! (iflag_adjwk == 2 )3077 ENDIF ! (iflag_adjwk == 2 .AND. OK_bug_ajs_cv) 3000 3078 ENDIF ! (iflag_adjwk >= 1) 3001 3079 ENDIF ! (iflag_wake>=1) … … 3248 3326 !! 3249 3327 !! 3250 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &3328 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, & 3251 3329 'convection',abortphy,flag_inhib_tend,itap,0) 3252 3330 CALL prt_enerbil('convection',itap) … … 3379 3457 !----------------------------------------------------------------------- 3380 3458 ! ajout des tendances des poches froides 3381 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0, paprs,'wake', &3459 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', & 3382 3460 abortphy,flag_inhib_tend,itap,0) 3383 3461 CALL prt_enerbil('wake',itap) … … 3537 3615 ! 3538 3616 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 3539 dql0,dqi0, paprs,'thermals', abortphy,flag_inhib_tend,itap,0)3617 dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0) 3540 3618 CALL prt_enerbil('thermals',itap) 3541 3619 ! … … 3599 3677 !-------------------------------------------------------------------- 3600 3678 ! ajout des tendances de l'ajustement sec ou des thermiques 3601 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0, paprs, &3679 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, & 3602 3680 'ajsb',abortphy,flag_inhib_tend,itap,0) 3603 3681 CALL prt_enerbil('ajsb',itap) … … 3633 3711 ptconv,ptconvth,clwcon0th, rnebcon0th, & 3634 3712 paprs,pplay,t_seri,q_seri, qtc_cv, sigt_cv, zqsat, & 3635 pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm, &3713 pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm,cell_area, & 3636 3714 ratqs,ratqsc,ratqs_inter) 3637 3715 … … 3657 3735 t_seri, q_seri,ptconv,ratqs, & 3658 3736 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 3737 pfraclr,pfracld, & 3659 3738 radocond, picefra, rain_lsc, snow_lsc, & 3660 3739 frac_impa, frac_nucl, beta_prec_fisrt, & 3661 3740 prfl, psfl, rhcl, & 3662 3741 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, & 3663 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &3742 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, & 3664 3743 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 3665 3744 Tcontr, qcontr, qcontr2, fcontrN, fcontrP ) … … 3688 3767 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 3689 3768 !-JLD 3690 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &3769 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 3691 3770 'lsc',abortphy,flag_inhib_tend,itap,0) 3692 3771 CALL prt_enerbil('lsc',itap) … … 3711 3790 ENDIF 3712 3791 3713 !--------------------------------------------------------------------------- 3792 3793 !--------------------------------------------------------------------------- 3714 3794 DO k = 1, klev 3715 3795 DO i = 1, klon 3716 3796 cldfra(i,k) = rneb(i,k) 3717 3797 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 3798 !EV: en effet etrange, j'ajouterais aussi qs_seri 3799 ! plus largement, je nettoierais (enleverrais) ces lignes 3718 3800 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 3719 3801 ENDDO 3720 3802 ENDDO 3803 3804 3805 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 3806 ! makes sense only if the new large scale condensation scheme is active 3807 ! with the ok_icefra_lscp flag active as well 3808 3809 IF (ok_bs .AND. ok_rad_bs) THEN 3810 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 3811 DO k=1,klev 3812 DO i=1,klon 3813 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 3814 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 3815 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 3816 cldfra(i,k)=max(cldfra(i,k),qbsfra) 3817 ENDDO 3818 ENDDO 3819 ELSE 3820 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 3821 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 3822 abort_message='inconsistency in cloud phase for blowing snow' 3823 CALL abort_physic(modname,abort_message,1) 3824 ENDIF 3825 3826 ENDIF 3827 3721 3828 IF (check) THEN 3722 3829 za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area) … … 4206 4313 flwp, fiwp, flwc, fiwc, & 4207 4314 mass_solu_aero, mass_solu_aero_pi, & 4208 cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &4315 cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, & 4209 4316 ref_liq_pi, ref_ice_pi) 4210 4317 ELSE … … 4214 4321 ok_aie, & 4215 4322 mass_solu_aero, mass_solu_aero_pi, & 4216 bl95_b0, bl95_b1, &4323 bl95_b0, bl95_b1, distcltop, & 4217 4324 cldtaupi, re, fl) 4218 4325 ENDIF … … 4519 4626 ENDDO 4520 4627 4521 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0)4628 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0) 4522 4629 CALL prt_enerbil('SW',itap) 4523 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0)4630 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0) 4524 4631 CALL prt_enerbil('LW',itap) 4525 4632 … … 4596 4703 !----------------------------------------------------------------------- 4597 4704 ! ajout des tendances de la trainee de l'orographie 4598 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &4705 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 4599 4706 abortphy,flag_inhib_tend,itap,0) 4600 4707 CALL prt_enerbil('oro',itap) … … 4647 4754 4648 4755 ! ajout des tendances de la portance de l'orographie 4649 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &4756 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 4650 4757 'lif', abortphy,flag_inhib_tend,itap,0) 4651 4758 CALL prt_enerbil('lif',itap) … … 4672 4779 d_t_hin(:, :)=0. 4673 4780 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 4674 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)4781 dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0) 4675 4782 CALL prt_enerbil('hin',itap) 4676 4783 ENDIF … … 4690 4797 ENDDO 4691 4798 4692 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &4799 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 4693 4800 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4694 4801 CALL prt_enerbil('front_gwd_rando',itap) … … 4699 4806 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 4700 4807 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 4701 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &4808 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 4702 4809 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0) 4703 4810 CALL prt_enerbil('flott_gwd_rando',itap) … … 4751 4858 ! ajout de la tendance d'humidite due au methane 4752 4859 d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep 4753 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &4860 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 4754 4861 'q_ch4', abortphy,flag_inhib_tend,itap,0) 4755 4862 d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep … … 5056 5163 5057 5164 CALL add_phys_tend & 5058 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&5165 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 5059 5166 'rep',abortphy,flag_inhib_tend,itap,0) 5060 5167 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 5133 5240 ! prlw = colonne eau liquide 5134 5241 ! prlw = colonne eau solide 5242 ! prbsw = colonne neige soufflee 5135 5243 prw(:) = 0. 5136 5244 prlw(:) = 0. 5137 5245 prsw(:) = 0. 5246 prbsw(:) = 0. 5138 5247 DO k = 1, klev 5139 5248 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 5140 5249 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 5141 5250 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 5251 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 5142 5252 ENDDO 5143 5253 ! … … 5198 5308 ENDIF 5199 5309 !--ice_sursat: nqo=4, on ajoute rneb 5200 IF (nqo == 4) THEN5310 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 5201 5311 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 5202 5312 ENDIF 5313 5314 IF (nqo.ge.4 .and. ok_bs) THEN 5315 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 5316 ENDIF 5317 5203 5318 ENDDO 5204 5319 ENDDO … … 5247 5362 ql_ancien(:,:) = ql_seri(:,:) 5248 5363 qs_ancien(:,:) = qs_seri(:,:) 5364 qbs_ancien(:,:) = qbs_seri(:,:) 5249 5365 rneb_ancien(:,:) = rneb_seri(:,:) 5250 5366 CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien) 5251 5367 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 5252 5368 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 5369 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 5253 5370 ! !! RomP >>> 5254 5371 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 5375 5492 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 5376 5493 pplay, lmax_th, aerosol_couple, & 5377 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &5494 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 5378 5495 ok_sync, ptconv, read_climoz, clevSTD, & 5379 5496 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 5386 5503 5387 5504 #endif 5505 ! Petit appelle de sorties pour accompagner le travail sur phyex 5506 if ( iflag_physiq == 1 ) then 5507 call output_physiqex(debut,jD_eq,pdtphys,presnivs,paprs,u,v,t,qx,cldfra,0.*t,0.*t,0.*t,pbl_tke,theta) 5508 endif 5388 5509 5389 5510 !==================================================================== … … 5406 5527 ! Disabling calls to the prt_alerte function 5407 5528 alert_first_call = .FALSE. 5529 5408 5530 5409 5531 IF (lafin) THEN -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_land_mod.F90
r4283 r4669 11 11 rlon, rlat, yrmu0, & 12 12 debut, lafin, zlev, ccanopy, swnet, lwnet, albedo, & 13 tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &13 tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, & 14 14 AcoefH, AcoefQ, BcoefH, BcoefQ, & 15 15 AcoefU, AcoefV, BcoefU, BcoefV, & … … 17 17 lwdown_m, q2m, t2m, & 18 18 snow, qsol, agesno, tsoil, & 19 z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &19 z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, fluxbs, & 20 20 qsurf, tsurf_new, dflux_s, dflux_l, & 21 21 flux_u1, flux_v1 , & … … 81 81 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 82 82 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 83 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 83 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 84 84 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 85 85 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 109 109 !albedo SB <<< 110 110 REAL, DIMENSION(klon), INTENT(OUT) :: evap 111 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat 111 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat, fluxbs 112 112 REAL, DIMENSION(klon), INTENT(OUT) :: qsurf 113 113 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new … … 125 125 REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used 126 126 REAL, DIMENSION(klon) :: u0, v0 ! surface speed 127 REAL, DIMENSION(klon) :: precip_totsnow ! total solid precip 127 128 INTEGER :: i 128 129 … … 130 131 REAL, DIMENSION(klon) :: alb1_new,alb2_new 131 132 !albedo SB <<< 133 134 135 !**************************************************************************************** 136 !Total solid precip 137 138 IF (ok_bs) THEN 139 precip_totsnow(:)=precip_snow(:)+precip_bs(:) 140 ELSE 141 precip_totsnow(:)=precip_snow(:) 142 ENDIF 143 !**************************************************************************************** 144 132 145 133 146 !**************************************************************************************** … … 165 178 zlev, u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, & 166 179 cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, & 167 precip_rain, precip_ snow, lwdown_m, swnet, swdown, &180 precip_rain, precip_totsnow, lwdown_m, swnet, swdown, & 168 181 pref_tmp, q2m, t2m, & 169 evap, fluxsens, fluxlat, &182 evap, fluxsens, fluxlat, & 170 183 tsol_rad, tsurf_new, alb1_new, alb2_new, & 171 184 emis_new, z0m, z0h, qsurf, & … … 184 197 !**************************************************************************************** 185 198 CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,& 186 tsurf, p1lay, cdragh, precip_rain, precip_ snow, temp_air, &199 tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, & 187 200 spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, & 188 201 u1, v1, gustiness, rugoro, swnet, lwnet, & … … 192 205 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 193 206 207 194 208 ENDIF ! ok_veget 209 210 ! blowing snow not treated yet over land 211 fluxbs(:)=0. 212 195 213 196 214 !**************************************************************************************** -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_land_orchidee_mod.F90
r4283 r4669 632 632 fluxsens(1:knon) = -1. * fluxsens(1:knon) 633 633 fluxlat(1:knon) = -1. * fluxlat(1:knon) 634 634 635 635 ! evap = -1. * evap 636 636 -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_landice_mod.F90
r4414 r4669 12 12 rmu0, lwdownm, albedo, pphi1, & 13 13 swnet, lwnet, tsurf, p1lay, & 14 cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &14 cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, & 15 15 AcoefH, AcoefQ, BcoefH, BcoefQ, & 16 16 AcoefU, AcoefV, BcoefU, BcoefV, & 17 AcoefQBS, BcoefQBS, & 17 18 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 snow, qsurf, qsol, agesno, &19 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &19 snow, qsurf, qsol, qbs1, agesno, & 20 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, & 20 21 tsurf_new, dflux_s, dflux_l, & 21 22 alt, slope, cloudf, & … … 30 31 USE cpl_mod, ONLY : cpl_send_landice_fields 31 32 USE calcul_fluxs_mod 33 USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic 32 34 USE phys_output_var_mod, ONLY : snow_o,zfra_o 33 35 !FC 34 36 USE ioipsl_getin_p_mod, ONLY : getin_p 35 37 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs 36 38 37 39 #ifdef CPP_INLANDSIS … … 56 58 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 57 59 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 58 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 60 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 59 61 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 60 62 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ 61 63 REAL, DIMENSION(klon), INTENT(IN) :: BcoefH, BcoefQ 62 64 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 65 REAL, DIMENSION(klon), INTENT(IN) :: AcoefQBS, BcoefQBS 63 66 REAL, DIMENSION(klon), INTENT(IN) :: ps 64 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 67 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 65 68 REAL, DIMENSION(klon), INTENT(IN) :: rugoro 66 69 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf … … 94 97 !albedo SB <<< 95 98 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 99 REAL, DIMENSION(klon), INTENT(OUT) :: fluxbs 96 100 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 97 101 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l … … 134 138 135 139 REAL,DIMENSION(klon) :: alb1,alb2 140 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 136 141 REAL, DIMENSION (klon,6) :: alb6 142 REAL :: rho0, rhoice, ustart0, hsalt, esalt, rhod 143 REAL :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc 144 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 145 REAL, DIMENSION(klon) :: ws1, rhos, ustart, qsalt 137 146 ! End definition 138 147 !**************************************************************************************** … … 165 174 alb2(:) = 999999. 166 175 alb1(:) = 999999. 167 176 fluxbs(:)=0. 168 177 runoff(:) = 0. 169 178 !**************************************************************************************** … … 173 182 radsol(:) = 0.0 174 183 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 184 185 !**************************************************************************************** 175 186 176 187 !**************************************************************************************** … … 264 275 265 276 266 267 277 ELSE 268 278 … … 314 324 flux_u1, flux_v1) 315 325 316 !****************************************************************************************317 ! Calculate snow height, age, run-off,..318 !319 !****************************************************************************************320 CALL fonte_neige(knon, is_lic, knindex, dtime, &321 tsurf, precip_rain, precip_snow, &322 snow, qsol, tsurf_new, evap)323 324 326 325 327 !**************************************************************************************** … … 327 329 ! 328 330 !**************************************************************************************** 331 329 332 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 330 333 331 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 332 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 333 alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 334 0.6 * (1.0-zfra(1:knon)) 334 335 ! EV: following lines are obsolete since we set alb1 and alb2 to constant values 336 ! I therefore comment them 337 ! alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 338 ! 0.6 * (1.0-zfra(1:knon)) 335 339 ! 336 340 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" … … 354 358 !z0m = SQRT(z0m**2+rugoro**2) 355 359 360 361 362 ! Simple blowing snow param 363 if (ok_bs) then 364 ustart0 = 0.211 365 rhoice = 920.0 366 rho0 = 200.0 367 rhomax=450.0 368 rhohard=400.0 369 tau_dens0=86400.0*10. ! 10 days by default, in s 370 tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory 371 372 ! computation of threshold friction velocity 373 ! which depends on surface snow density 374 do i = 1, knon 375 ! estimation of snow density 376 ! snow density increases with snow age and 377 ! increases even faster in case of sedimentation of blowing snow 378 tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs)) 379 rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens)) 380 ! blowing snow flux formula used in MAR 381 ws1(i)=(u1(i)**2+v1(i)**2)**0.5 382 ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5 383 ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax)) 384 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 385 ! rhohard<450) 386 enddo 387 388 ! computation of qbs at the top of the saltation layer 389 ! two formulations possible 390 ! pay attention that qbs is a mixing ratio and has to be converted 391 ! to specific content 392 393 if (iflag_saltation_bs .eq. 1) then 394 ! expression from CRYOWRF (Sharma et al. 2022) 395 aa=2.6 396 bb=2.5 397 cc=2.0 398 lambdasalt=0.45 399 do i =1, knon 400 rhod=p1lay(i)/RD/temp_air(i) 401 nunu=max(ustar(i)/ustart(i),1.e-3) 402 fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * & 403 (aa+bb*nunu**(-2)+cc*nunu**(-1)) 404 csalt=fluxsalt/(2.8*ustart(i)) 405 hsalt=0.08436*ustar(i)**1.27 406 qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) & 407 * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6)) 408 qsalt(i)=max(qsalt(i),0.) 409 enddo 410 411 412 else 413 ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001) 414 do i=1, knon 415 esalt=1./(3.25*max(ustar(i),0.001)) 416 hsalt=0.08436*ustar(i)**1.27 417 qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 418 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 419 enddo 420 endif 421 422 ! calculation of erosion (emission flux towards the first atmospheric level) 423 ! consistent with implicit resolution of turbulent mixing equation 424 do i=1, knon 425 rhod=p1lay(i)/RD/temp_air(i) 426 fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) & 427 / (1.-rhod*ws1(i)*zeta_bs*cdragm(i)*BcoefQBS(i)*dtime) 428 !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i)) 429 enddo 430 431 ! for outputs 432 do j = 1, knon 433 i = knindex(j) 434 zxustartlic(i) = ustart(j) 435 zxrhoslic(i) = rhos(j) 436 enddo 437 438 endif 439 440 441 442 !**************************************************************************************** 443 ! Calculate surface snow amount 444 ! 445 !**************************************************************************************** 446 IF (ok_bs) THEN 447 precip_totsnow(:)=precip_snow(:)+precip_bs(:) 448 evap_totsnow(:)=evap(:)-fluxbs(:) ! flux bs is positive towards the surface (snow erosion) 449 ELSE 450 precip_totsnow(:)=precip_snow(:) 451 evap_totsnow(:)=evap(:) 452 ENDIF 453 454 CALL fonte_neige(knon, is_lic, knindex, dtime, & 455 tsurf, precip_rain, precip_totsnow, & 456 snow, qsol, tsurf_new, evap_totsnow) 457 458 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 459 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 356 460 357 461 … … 378 482 runoff(1:knon)=run_off_lic(1:knon)/dtime 379 483 380 381 !****************************************************************************************382 484 snow_o=0. 383 485 zfra_o = 0. … … 420 522 !albedo SB <<< 421 523 422 423 424 524 425 525 END SUBROUTINE surf_landice -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/surf_ocean_mod.F90
r4370 r4669 13 13 windsp, rmu0, fder, tsurf_in, & 14 14 itime, dtime, jour, knon, knindex, & 15 p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &15 p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, & 16 16 AcoefH, AcoefQ, BcoefH, BcoefQ, & 17 17 AcoefU, AcoefV, BcoefU, BcoefV, & … … 60 60 REAL, DIMENSION(klon), INTENT(IN) :: cdragh 61 61 REAL, DIMENSION(klon), INTENT(IN) :: cdragm 62 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 62 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 63 63 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 64 64 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 144 144 REAL, DIMENSION(klon) :: radsol 145 145 REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation 146 REAL, DIMENSION(klon) :: precip_totsnow 146 147 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 147 148 real rhoa(knon) ! density of moist air (kg / m3) … … 160 161 radsol(1:klon) = 0.0 ! initialisation a priori inutile 161 162 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 163 164 165 !**************************************************************************************** 166 !Total solid precip 167 168 IF (ok_bs) THEN 169 precip_totsnow(:)=precip_snow(:)+precip_bs(:) 170 ELSE 171 precip_totsnow(:)=precip_snow(:) 172 ENDIF 173 162 174 163 175 !****************************************************************************** … … 188 200 windsp, fder, & 189 201 itime, dtime, knon, knindex, & 190 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow,temp_air,spechum,&202 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow,temp_air,spechum,& 191 203 AcoefH, AcoefQ, BcoefH, BcoefQ, & 192 204 AcoefU, AcoefV, BcoefU, BcoefV, & … … 200 212 CALL ocean_slab_noice( & 201 213 itime, dtime, jour, knon, knindex, & 202 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow, temp_air, spechum,&214 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, temp_air, spechum,& 203 215 AcoefH, AcoefQ, BcoefH, BcoefQ, & 204 216 AcoefU, AcoefV, BcoefU, BcoefV, & … … 211 223 CALL ocean_forced_noice( & 212 224 itime, dtime, jour, knon, knindex, & 213 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow, &225 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, & 214 226 temp_air, spechum, & 215 227 AcoefH, AcoefQ, BcoefH, BcoefQ, & … … 326 338 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 327 339 u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), & 328 rain = precip_rain(:knon) + precip_ snow(:knon), &340 rain = precip_rain(:knon) + precip_totsnow(:knon), & 329 341 hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 330 342 rnl = - lwnet(:knon), &
Note: See TracChangeset
for help on using the changeset viewer.