Changeset 4506 for LMDZ6/branches/blowing_snow
- Timestamp:
- Apr 11, 2023, 9:48:08 PM (20 months ago)
- Location:
- LMDZ6/branches/blowing_snow/libf/phylmdiso
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/blowing_snow/libf/phylmdiso/add_phys_tend_mod.F90
r4143 r4506 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 #ifdef ISO 20 20 ,zdxt,zdxtl,zdxti & … … 62 62 ! ------------ 63 63 REAL zdu(klon, klev), zdv(klon, klev) 64 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev) 64 REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev) 65 65 CHARACTER *(*) text 66 66 REAL paprs(klon,klev+1) … … 104 104 PRINT *, ' add_pbl_tend, zzdt ', zzdt 105 105 PRINT *, ' add_pbl_tend, zzdq ', zzdq 106 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &106 CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 & 107 107 #ifdef ISO 108 108 ,zzdxt,zdxtl,zdxti & … … 110 110 ) 111 111 ELSE 112 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &112 CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 & 113 113 #ifdef ISO 114 114 ,zdxt,zdxtl,zdxti & … … 123 123 ! $Id$ 124 124 ! 125 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi, paprs,text, &125 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, & 126 126 abortphy,flag_inhib_tend, itap, diag_mode & 127 127 #ifdef ISO … … 142 142 USE dimphy, ONLY: klon, klev 143 143 USE phys_state_var_mod, ONLY : phys_tstep 144 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri144 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri 145 145 #ifdef ISO 146 146 USE phys_local_var_mod, ONLY: xtl_seri, xts_seri, xt_seri … … 150 150 USE print_control_mod, ONLY: prt_level 151 151 USE cmp_seri_mod 152 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 &153 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col152 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 & 153 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 154 154 155 155 #ifdef ISO … … 167 167 !------------ 168 168 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdu, zdv 169 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi 169 REAL, DIMENSION(klon,klev), INTENT(IN) :: zdt, zdql, zdqi, zdqbs 170 170 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs 171 171 CHARACTER*(*), INTENT(IN) :: text … … 197 197 ! Save variables, used in diagnostic mode (diag_mode=1). 198 198 REAL, DIMENSION(klon,klev) :: sav_u_seri, sav_v_seri 199 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_q _seri199 REAL, DIMENSION(klon,klev) :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri 200 200 REAL, DIMENSION(klon,klev) :: sav_t_seri 201 201 REAL, DIMENSION(klon,klev) :: sav_zdq … … 228 228 ! zh_ql_col---- total enthalpy of liquid watter (J/m2) 229 229 ! zh_qs_col---- total enthalpy of solid watter (J/m2) 230 ! zh_qbs_col---- total enthalpy of blowing snow (J/m2) 230 231 ! zqw_col------ total mass of watter vapour (kg/m2) 231 232 ! zql_col------ total mass of liquid watter (kg/m2) 232 ! zqs_col------ total mass of solid watter (kg/m2) 233 ! zqs_col------ total mass of cloud ice (kg/m2) 234 ! zqbs_col------ total mass of blowing snow (kg/m2) 233 235 ! zek_col------ total kinetic energy (kg/m2) 234 236 ! … … 237 239 REAL zql_col(klon,2) 238 240 REAL zqs_col(klon,2) 241 REAL zqbs_col(klon,2) 239 242 REAL zek_col(klon,2) 240 243 REAL zh_dair_col(klon,2) 241 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2) 244 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2) 242 245 REAL zh_col(klon,2) 243 246 … … 278 281 sav_ql_seri(:,:) = ql_seri(:,:) 279 282 sav_qs_seri(:,:) = qs_seri(:,:) 283 sav_qbs_seri(:,:) = qbs_seri(:,:) 280 284 sav_q_seri(:,:) = q_seri(:,:) 281 285 sav_t_seri(:,:) = t_seri(:,:) … … 304 308 305 309 CALL integr_v(klon, klev, zcpvap, & 306 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &307 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &308 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))310 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 311 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 312 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 309 313 310 314 end if ! end if (fl_ebil .GT. 0) … … 318 322 ql_seri(:,:)=ql_seri(:,:)+zdql(:,:) 319 323 qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:) 324 qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:) 320 325 #ifdef ISO 321 326 xtl_seri(:,:,:)=xtl_seri(:,:,:)+zdxtl(:,:,:) … … 572 577 ql_seri(:,:)=ql_seri(:,:)-zdql(:,:) 573 578 qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:) 579 qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:) 574 580 ENDIF 575 581 … … 586 592 587 593 CALL integr_v(klon, klev, zcpvap, & 588 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &589 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &590 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))594 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, & 595 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 596 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 591 597 592 598 ! ------------------------------------------------ … … 597 603 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 598 604 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 599 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 605 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 606 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 600 607 601 608 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 605 612 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 606 613 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 614 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 607 615 608 616 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 616 624 ql_seri(:,:) = sav_ql_seri(:,:) 617 625 qs_seri(:,:) = sav_qs_seri(:,:) 626 qbs_seri(:,:) = sav_qbs_seri(:,:) 618 627 q_seri(:,:) = sav_q_seri(:,:) 619 628 t_seri(:,:) = sav_t_seri(:,:) … … 630 639 END SUBROUTINE add_phys_tend 631 640 632 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &633 zdu,zdv,zdt,zdq,zdql,zdqs, paprs,text)641 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, & 642 zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text) 634 643 !====================================================================== 635 644 ! Ajoute les tendances des variables physiques aux variables … … 647 656 USE print_control_mod, ONLY: prt_level 648 657 USE cmp_seri_mod 649 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 &650 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col658 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 & 659 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 651 660 IMPLICIT none 652 661 include "YOMCST.h" … … 657 666 INTEGER, INTENT(IN) :: nlon, nlev 658 667 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: uu, vv 659 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs 668 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs 660 669 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdu, zdv 661 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs 670 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zdt, zdq, zdql, zdqs, zdqbs 662 671 REAL, DIMENSION(nlon,nlev+1), INTENT(IN) :: paprs 663 672 CHARACTER*(*), INTENT(IN) :: text … … 666 675 !-------- 667 676 REAL, DIMENSION(nlon,nlev) :: uu_n, vv_n 668 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n 677 REAL, DIMENSION(nlon,nlev) :: temp_n, qv_n, ql_n, qs_n, qbs_n 669 678 670 679 … … 689 698 ! zqw_col------ total mass of watter vapour (kg/m2) 690 699 ! zql_col------ total mass of liquid watter (kg/m2) 691 ! zqs_col------ total mass of solid watter (kg/m2) 700 ! zqs_col------ total mass of cloud ice (kg/m2) 701 ! zqbs_col------ total mass of blowing snow (kg/m2) 692 702 ! zek_col------ total kinetic energy (kg/m2) 693 703 ! … … 696 706 REAL zql_col(nlon,2) 697 707 REAL zqs_col(nlon,2) 708 REAL zqbs_col(nlon,2) 698 709 REAL zek_col(nlon,2) 699 710 REAL zh_dair_col(nlon,2) 700 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2) 711 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2) 701 712 REAL zh_col(nlon,2) 702 713 … … 731 742 732 743 CALL integr_v(nlon, nlev, rcpv, & 733 temp, qv, ql, qs, uu, vv, zairm, &734 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &735 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))744 temp, qv, ql, qs, qbs, uu, vv, zairm, & 745 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 746 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 736 747 737 748 end if ! end if (fl_ebil .GT. 0) … … 746 757 ql_n(:,:)=ql(:,:)+zdql(:,:) 747 758 qs_n(:,:)=qs(:,:)+zdqs(:,:) 759 qbs_n(:,:)=qbs(:,:)+zdqbs(:,:) 748 760 temp_n(:,:)=temp(:,:)+zdt(:,:) 749 761 … … 762 774 763 775 CALL integr_v(nlon, nlev, rcpv, & 764 temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &765 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), z ek_col(:,n), zh_dair_col(:,n), &766 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_ col(:,n))776 temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, & 777 zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), & 778 zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n)) 767 779 768 780 ! ------------------------------------------------ … … 773 785 d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep 774 786 d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep 775 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) 787 d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep 788 d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:) 776 789 777 790 d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep … … 785 798 d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep 786 799 d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep 800 d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep 787 801 788 802 d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep … … 795 809 796 810 SUBROUTINE integr_v(nlon, nlev, zcpvap, & 797 temp, qv, ql, qs, uu, vv, zairm, &798 zqw_col, zql_col, zqs_col, z ek_col, zh_dair_col, &799 zh_qw_col, zh_ql_col, zh_qs_col, zh_ col)811 temp, qv, ql, qs, qbs, uu, vv, zairm, & 812 zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, & 813 zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col) 800 814 801 815 IMPLICIT none … … 804 818 INTEGER, INTENT(IN) :: nlon,nlev 805 819 REAL, INTENT(IN) :: zcpvap 806 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, uu, vv820 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: temp, qv, ql, qs, qbs, uu, vv 807 821 REAL, DIMENSION(nlon,nlev), INTENT(IN) :: zairm 808 822 REAL, DIMENSION(nlon), INTENT(OUT) :: zqw_col 809 823 REAL, DIMENSION(nlon), INTENT(OUT) :: zql_col 810 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col 824 REAL, DIMENSION(nlon), INTENT(OUT) :: zqs_col, zqbs_col 811 825 REAL, DIMENSION(nlon), INTENT(OUT) :: zek_col 812 826 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_dair_col 813 827 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qw_col 814 828 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_ql_col 815 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col 829 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_qs_col, zh_qbs_col 816 830 REAL, DIMENSION(nlon), INTENT(OUT) :: zh_col 817 831 … … 823 837 zql_col(:) = 0. 824 838 zqs_col(:) = 0. 839 zqbs_col(:) = 0. 825 840 zek_col(:) = 0. 826 841 zh_dair_col(:) = 0. … … 828 843 zh_ql_col(:) = 0. 829 844 zh_qs_col(:) = 0. 845 zh_qbs_col(:) = 0. 830 846 831 847 !JLD write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice … … 840 856 zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k) 841 857 zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k) 858 zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k) 842 859 ! Kinetic Energy 843 860 zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k) … … 848 865 zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k) !jyg 849 866 zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k) !jyg 867 zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k) !jyg 850 868 END DO 851 869 END DO 852 870 ! compute total air enthalpy 853 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) 871 zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:) 854 872 855 873 END SUBROUTINE integr_v … … 866 884 USE dimphy, ONLY: klon, klev 867 885 USE phys_state_var_mod, ONLY : phys_tstep 868 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con 886 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall 869 887 USE geometry_mod, ONLY: longitude_deg, latitude_deg 870 888 USE print_control_mod, ONLY: prt_level 871 889 USE cmp_seri_mod 872 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 &873 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col890 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 & 891 & , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 874 892 USE phys_local_var_mod, ONLY: evap, sens 875 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q _seri, t_seri &893 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri & 876 894 & , rain_lsc, snow_lsc 877 895 USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd … … 910 928 bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) & 911 929 & + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1) 930 CASE("bs") param 931 bilq_bnd = - bs_fall(1) 932 bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1) 912 933 CASE("convection") param 913 934 bilq_bnd = - rain_con(1) - snow_con(1) … … 946 967 if ( prt_level .GE. 5) then 947 968 write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd 948 write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1) 949 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) 969 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) 970 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) 950 971 end if 951 972 -
LMDZ6/branches/blowing_snow/libf/phylmdiso/pbl_surface_mod.F90
r4478 r4506 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 … … 261 262 rlon, rlat, rugoro, rmu0, & 262 263 lwdown_m, cldt, & 263 rain_f, snow_f, solsw_m, solswfdiff_m, sollw_m, &264 rain_f, snow_f, bs_f, solsw_m, solswfdiff_m, sollw_m, & 264 265 gustiness, & 265 t, q, u, v, &266 t, q, qbs, u, v, & 266 267 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 267 268 !! t_x, q_x, t_w, q_w, & … … 275 276 beta, & 276 277 !>jyg 277 alb_dir_m, alb_dif_m, zxsens, zxevap, &278 alb_dir_m, alb_dif_m, zxsens, zxevap, zxsnowerosion, & 278 279 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 279 280 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 280 d_t, d_q, d_u, d_v, d_t_diss, &281 d_t, d_q, d_qbs, d_u, d_v, d_t_diss, & 281 282 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 282 283 d_t_w, d_q_w, & … … 301 302 rh2m, zxfluxu, zxfluxv, & 302 303 z0m, z0h, agesno, sollw, solsw, & 303 d_ts, evap, fluxlat, t2m, &304 d_ts, evap, fluxlat, t2m, & 304 305 wfbils, wfbilo, wfevap, wfrain, wfsnow, & 305 306 flux_t, flux_u, flux_v, & … … 307 308 !jyg< 308 309 !! zxfluxt, zxfluxq, q2m, flux_q, tke, & 309 zxfluxt, zxfluxq, q2m, flux_q, tke_x, &310 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, & 310 311 !>jyg 311 312 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 410 411 dser, dt_ds, zsig, zmea 411 412 use phys_output_var_mod, only: tkt, tks, taur, sss 413 use blowing_snow_ini_mod, only : zeta_bs 412 414 #ifdef CPP_XIOS 413 415 USE wxios, ONLY: missing_val … … 444 446 REAL, DIMENSION(klon), INTENT(IN) :: rain_f ! rain fall 445 447 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 448 REAL, DIMENSION(klon), INTENT(IN) :: bs_f ! blowing snow fall 446 449 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface 447 450 REAL, DIMENSION(klon), INTENT(IN) :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface … … 449 452 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) 450 453 REAL, DIMENSION(klon,klev), INTENT(IN) :: q ! water vapour (kg/kg) 454 REAL, DIMENSION(klon,klev), INTENT(IN) :: qbs ! blowing snow specific content (kg/kg) 451 455 REAL, DIMENSION(klon,klev), INTENT(IN) :: u ! u speed 452 456 REAL, DIMENSION(klon,klev), INTENT(IN) :: v ! v speed … … 521 525 ! (=> positive sign upwards) 522 526 REAL, DIMENSION(klon), INTENT(OUT) :: zxevap ! water vapour flux at surface, positiv upwards 527 REAL, DIMENSION(klon), INTENT(OUT) :: zxsnowerosion ! blowing snow flux at surface 523 528 REAL, DIMENSION(klon), INTENT(OUT) :: zxtsol ! temperature at surface, mean for each grid point 524 529 !!! jyg le ??? … … 537 542 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_u ! change in u speed 538 543 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_v ! change in v speed 544 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_qbs ! change in blowing snow specific content 545 539 546 540 547 REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1) … … 604 611 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 605 612 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 606 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface613 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 607 614 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 608 615 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 631 638 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxt ! sensible heat flux, mean for each grid point 632 639 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxq ! water vapour flux, mean for each grid point 640 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxqbs ! blowing snow flux, mean for each grid point 633 641 REAL, DIMENSION(klon, nbsrf),INTENT(OUT) :: q2m ! water vapour at 2 meter height 634 642 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q ! water vapour flux(latent flux) (kg/m**2/s) 643 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs ! blowind snow vertical flux (kg/m**2 644 635 645 #ifdef ISO 636 646 REAL, DIMENSION(ntraciso,klon), INTENT(OUT) :: dflux_xt ! change of water vapour flux … … 683 693 REAL, DIMENSION(klon) :: yalb,yalb_vis 684 694 !albedo SB <<< 685 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1 695 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1, yqbs1 686 696 REAL, DIMENSION(klon) :: yqa 687 697 REAL, DIMENSION(klon) :: ysnow, yqsurf, yagesno, yqsol 688 REAL, DIMENSION(klon) :: yrain_f, ysnow_f 698 REAL, DIMENSION(klon) :: yrain_f, ysnow_f, ybs_f 689 699 #ifdef ISO 690 700 REAL, DIMENSION(ntraciso,klon) :: yxt1 … … 699 709 REAL, DIMENSION(klon) :: yrugoro 700 710 REAL, DIMENSION(klon) :: yfluxlat 711 REAL, DIMENSION(klon) :: yfluxbs 701 712 REAL, DIMENSION(klon) :: y_d_ts 702 713 REAL, DIMENSION(klon) :: y_flux_t1, y_flux_q1 … … 707 718 #endif 708 719 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 720 REAL, DIMENSION(klon) :: y_flux_bs, y_flux0 709 721 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 710 722 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w … … 736 748 #endif 737 749 REAL, DIMENSION(klon) :: AcoefU, AcoefV, BcoefU, BcoefV 750 REAL, DIMENSION(klon) :: AcoefQBS, BcoefQBS 738 751 REAL, DIMENSION(klon) :: ypsref 739 752 REAL, DIMENSION(klon) :: yevap, yevap_pot, ytsurf_new, yalb3_new … … 744 757 REAL, DIMENSION(klon) :: meansqT ! mean square deviation of subsurface temperatures 745 758 REAL, DIMENSION(klon) :: alb_m ! mean albedo for whole SW interval 746 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss 759 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs 747 760 REAL, DIMENSION(klon,klev) :: y_d_u, y_d_v 748 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q 761 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q, y_flux_qbs 749 762 REAL, DIMENSION(klon,klev) :: y_flux_u, y_flux_v 750 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq 763 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq, ycoefqbs 751 764 REAL, DIMENSION(klon) :: ycdragh, ycdragq, ycdragm 752 765 REAL, DIMENSION(klon,klev) :: yu, yv 753 REAL, DIMENSION(klon,klev) :: yt, yq 766 REAL, DIMENSION(klon,klev) :: yt, yq, yqbs 754 767 #ifdef ISO 755 768 REAL, DIMENSION(ntraciso,klon) :: yxtevap … … 819 832 REAL, DIMENSION(klon,klev) :: CcoefH, CcoefQ, DcoefH, DcoefQ 820 833 REAL, DIMENSION(klon,klev) :: CcoefU, CcoefV, DcoefU, DcoefV 834 REAL, DIMENSION(klon,klev) :: CcoefQBS, DcoefQBS 821 835 REAL, DIMENSION(klon,klev) :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x 822 836 REAL, DIMENSION(klon,klev) :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w … … 824 838 REAL, DIMENSION(klon,klev) :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w 825 839 REAL, DIMENSION(klon,klev) :: Kcoef_hq, Kcoef_m, gama_h, gama_q 840 REAL, DIMENSION(klon,klev) :: gama_qbs, Kcoef_qbs 826 841 REAL, DIMENSION(klon,klev) :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x 827 842 REAL, DIMENSION(klon,klev) :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w … … 1016 1031 REAL, DIMENSION(klon,nbsrf) :: zx_t1 1017 1032 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 1033 REAL, DIMENSION(klon,nbsrf) :: snowerosion 1018 1034 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 1019 1035 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) … … 1189 1205 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 1190 1206 !albedo SB <<< 1191 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. 1207 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0. 1192 1208 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0. 1193 1209 zxfluxlat(:)=0. 1194 1210 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 1195 1211 zn2mout(:,:)=0 ; 1196 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_ u(:,:)=0. ; d_v(:,:)=0.1212 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 1197 1213 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. 1198 1214 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1214 1230 d_ts(:,:)=0. 1215 1231 evap(:,:)=0. 1232 snowerosion(:,:)=0. 1216 1233 fluxlat(:,:)=0. 1217 1234 wfbils(:,:)=0. ; wfbilo(:,:)=0. 1218 1235 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0. 1219 1236 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0. 1237 flux_qbs(:,:,:)=0. 1220 1238 dflux_t(:)=0. ; dflux_q(:)=0. 1221 1239 zxsnow(:)=0. 1222 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0. 1240 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0. 1223 1241 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0. 1224 1242 runoff(:)=0. … … 1266 1284 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 1267 1285 !albedo SB <<< 1268 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.01286 yrain_f = 0.0 ; ysnow_f = 0.0 ; ybs_f=0.0 ; yfder = 0.0 ; ysolsw = 0.0 1269 1287 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yu1 = 0.0 1270 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 1288 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 ; yqbs1 = 0.0 1271 1289 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 1272 1290 yq = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0 1291 yqbs(:,:)=0.0 1273 1292 yrugoro = 0.0 ; ywindsp = 0.0 1274 1293 !! d_ts = 0.0 ; yfluxlat=0.0 ; flux_t = 0.0 ; flux_q = 0.0 1275 yfluxlat=0.0 1294 yfluxlat=0.0 ; y_flux0(:)=0.0 1276 1295 !! flux_u = 0.0 ; flux_v = 0.0 ; d_t = 0.0 ; d_q = 0.0 1277 1296 !! d_t_diss= 0.0 ;d_u = 0.0 ; d_v = 0.0 … … 1288 1307 ycldt = 0.0 ; yrmu0 = 0.0 1289 1308 ! Martin 1309 y_d_qbs(:,:)=0.0 1290 1310 1291 1311 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 1629 1649 yrain_f(j) = rain_f(i) 1630 1650 ysnow_f(j) = snow_f(i) 1651 ybs_f(j) = bs_f(i) 1631 1652 yagesno(j) = agesno(i,nsrf) 1632 1653 yfder(j) = fder(i) … … 1640 1661 yu1(j) = u(i,1) 1641 1662 yv1(j) = v(i,1) 1663 yqbs1(j) = qbs(i,1) 1642 1664 ypaprs(j,klev+1) = paprs(i,klev+1) 1643 1665 !jyg< … … 1653 1675 !!! nrlmd le 13/06/2011 1654 1676 y_delta_tsurf(j)=delta_tsurf(i,nsrf) 1677 yfluxbs(j)=0.0 1678 y_flux_bs(j) = 0.0 1655 1679 !!! 1656 1680 #ifdef ISO … … 1721 1745 yt(j,k) = t(i,k) 1722 1746 yq(j,k) = q(i,k) 1747 yqbs(j,k)=qbs(i,k) 1723 1748 #ifdef ISO 1724 1749 do ixt=1,ntraciso … … 1951 1976 print *,' args coef_diff_turb: ycdragh ', ycdragh 1952 1977 print *,' args coef_diff_turb: ytke ', ytke 1953 1954 1978 ENDIF 1955 1979 … … 1960 1984 1961 1985 ELSE 1962 1963 1986 1964 1987 CALL coef_diff_turb(dtime, nsrf, knon, ni, & … … 1981 2004 1982 2005 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh 1983 ! 2006 2007 1984 2008 ELSE !(iflag_split .eq.0) 2009 1985 2010 IF (prt_level >=10) THEN 1986 2011 print *,' args coef_diff_turb: yu_x ', yu_x … … 2020 2045 ENDIF 2021 2046 2022 ENDIF ! iflag_pbl >= 502047 ENDIF ! iflag_pbl >= 50 2023 2048 2024 2049 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x … … 2034 2059 print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w 2035 2060 print *,' args coef_diff_turb: ytke_w ', ytke_w 2036 2061 ENDIF 2037 2062 2038 2063 IF (iflag_pbl>=50) THEN … … 2062 2087 2063 2088 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w 2064 ! 2089 2065 2090 !!!jyg le 10/04/2013 2066 2091 !! En attendant de traiter le transport des traceurs dans les poches froides, formule … … 2072 2097 ENDDO 2073 2098 ENDDO 2074 !!!2075 2099 ENDIF ! (iflag_split .eq.0) 2076 !!!2077 2100 2078 2101 !**************************************************************************************** … … 2171 2194 ENDIF ! (iflag_split .eq.0) 2172 2195 !!! 2196 2197 ! For blowing snow: 2198 IF (ok_bs) THEN 2199 ! following Bintanja et al 2000, part II 2200 ! we assume that the eddy diffuvisity coefficient for 2201 ! suspended particles is larger than Km by a factor zeta_bs 2202 ! which is equal to 3 by default 2203 ycoefqbs=ycoefm*zeta_bs 2204 CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, & 2205 ydelp, yt, yqbs, dtime, & 2206 CcoefQBS, DcoefQBS, & 2207 Kcoef_qbs, gama_qbs, & 2208 AcoefQBS, BcoefQBS) 2209 ENDIF 2210 2173 2211 2174 2212 !**************************************************************************************** … … 2356 2394 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2357 2395 !!jyg yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2358 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, y t1, yq1,&2396 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2359 2397 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2360 2398 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2362 2400 ylwdown, yq2m, yt2m, & 2363 2401 ysnow, yqsol, yagesno, ytsoil, & 2364 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat, &2402 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,& 2365 2403 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2366 2404 y_flux_u1, y_flux_v1, & … … 2431 2469 yrmu0, ylwdown, yalb, zgeo1, & 2432 2470 ysolsw, ysollw, yts, ypplay(:,1), & 2433 !!jyg ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2434 ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,& 2471 ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2435 2472 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2436 2473 AcoefU, AcoefV, BcoefU, BcoefV, & 2437 2474 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2438 ysnow, yqsurf, yqsol, yagesno, &2475 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2439 2476 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2440 y tsurf_new, y_dflux_t, y_dflux_q, &2477 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2441 2478 yzmea, yzsig, ycldt, & 2442 2479 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2495 2532 itap, dtime, jour, knon, ni, & 2496 2533 !!jyg ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2497 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, y t(:,1), yq(:,1),& ! ym missing init2534 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2498 2535 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2499 2536 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2658 2695 ENDDO 2659 2696 ENDIF ! (ok_flux_surf) 2697 2698 ! flux of blowing snow at the first level 2699 IF (ok_bs) THEN 2700 DO j=1,knon 2701 y_flux_bs(j)=yfluxbs(j) 2702 ENDDO 2703 ENDIF 2660 2704 ! 2661 2705 ! ------------------------------------------------------------------------------ … … 2985 3029 ! 2986 3030 ENDIF ! (iflag_split .eq.0) 3031 3032 IF (ok_bs) THEN 3033 CALL climb_qbs_up(knon, dtime, yqbs, & 3034 y_flux_bs, ypaprs, ypplay, & 3035 AcoefQBS, BcoefQBS, & 3036 CcoefQBS, DcoefQBS, & 3037 Kcoef_qbs, gama_qbs, & 3038 y_flux_qbs(:,:), y_d_qbs(:,:)) 3039 ENDIF 3040 2987 3041 !!! 2988 3042 !! … … 3151 3205 !!! 3152 3206 3153 ! print*,'Dans pbl OK1' 3154 3155 !jyg< 3156 !! evap(:,nsrf) = - flux_q(:,1,nsrf) 3157 !>jyg 3207 ! tendencies of blowing snow 3208 IF (ok_bs) THEN 3209 DO k = 1, klev 3210 DO j = 1, knon 3211 i = ni(j) 3212 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j) 3213 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k) 3214 ENDDO 3215 ENDDO 3216 ENDIF 3217 3218 3158 3219 DO j = 1, knon 3159 3220 i = ni(j) 3160 3221 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 3222 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 3161 3223 beta(i,nsrf) = ybeta(j) !jyg 3162 3224 d_ts(i,nsrf) = y_d_ts(j) … … 3386 3448 ENDDO 3387 3449 ENDDO 3450 3451 3452 IF (ok_bs) THEN 3453 DO k = 1, klev 3454 DO j = 1, knon 3455 i = ni(j) 3456 d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k) 3457 ENDDO 3458 ENDDO 3459 ENDIF 3460 3388 3461 3389 3462 #ifdef ISO … … 3888 3961 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3889 3962 ENDDO 3963 3964 ! if blowing snow 3965 if (ok_bs) then 3966 DO nsrf = 1, nbsrf 3967 DO k = 1, klev 3968 DO i = 1, klon 3969 zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf) 3970 ENDDO 3971 ENDDO 3972 ENDDO 3973 3974 DO i = 1, klon 3975 zxsnowerosion(i) = zxfluxqbs(i,1) ! blowings snow flux at the surface 3976 END DO 3977 endif 3978 3979 3980 3890 3981 #ifdef ISO 3891 3982 DO i = 1, klon -
LMDZ6/branches/blowing_snow/libf/phylmdiso/phyredem.F90
r4389 r4506 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, 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, & … … 260 260 261 261 CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien) 262 263 IF (ok_bs) THEN 264 CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall) 265 CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien) 266 CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien) 267 ENDIF 268 269 CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien) 262 270 263 271 CALL put_field(pass,"PRWANCIEN", "PRWANCIEN", prw_ancien) -
LMDZ6/branches/blowing_snow/libf/phylmdiso/phys_local_var_mod.F90
r4143 r4506 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) … … 26 28 REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:) 27 29 !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn) 28 REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:) 29 !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn )30 REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:) 31 !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d )30 REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:) 31 !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn) 32 REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:) 33 !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d) 32 34 REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:) 33 35 !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn) … … 69 71 REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:) 70 72 !$OMP THREADPRIVATE(d_u_oli, d_v_oli) 71 REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_ t_diss(:,:)72 !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_t_diss)73 REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:) 74 !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss) 73 75 REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:) 74 76 !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf) … … 78 80 REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:) 79 81 !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x) 82 REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:) 83 !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs) 80 84 !>nrlmd+jyg 81 85 REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:) … … 361 365 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt 362 366 !$OMP THREADPRIVATE(JrNt) 363 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw364 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)367 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw 368 !$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw) 365 369 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m 366 370 !$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m) … … 379 383 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte 380 384 !$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte) 385 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic 386 !$OMP THREADPRIVATE(zxustartlic, zxrhoslic) 381 387 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 382 388 !$OMP THREADPRIVATE(zxfqcalving) … … 567 573 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi 568 574 !$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi) 569 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca 570 !$OMP THREADPRIVATE(prfl, psfl, fraca )575 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl 576 !$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl) 571 577 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2 572 578 !$OMP THREADPRIVATE(Vprecip, zw2) … … 734 740 735 741 IMPLICIT NONE 736 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev) )742 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 737 743 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 738 744 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf)) … … 741 747 ALLOCATE(tr_seri(klon,klev,nbtr)) 742 748 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) 743 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev) )744 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon) )749 ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev)) 750 ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon)) 745 751 ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev)) 746 752 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP … … 765 771 ALLOCATE(plul_st(klon),plul_th(klon)) 766 772 ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev)) 767 773 ALLOCATE (d_qbs_vdf(klon,klev)) 774 ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev)) 768 775 ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev)) 769 776 ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev)) … … 925 932 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 926 933 ALLOCATE(JrNt(klon)) 927 ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))928 ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))934 ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon)) 935 ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon)) 929 936 ALLOCATE(s_lcl(klon)) 930 937 ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon)) … … 1055 1062 ALLOCATE(prfl(klon, klev+1)) 1056 1063 ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1)) 1064 ALLOCATE(bsfl(klon,klev+1)) 1057 1065 ALLOCATE(zw2(klon, klev+1)) 1058 1066 … … 1141 1149 USE indice_sol_mod 1142 1150 IMPLICIT NONE 1143 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri )1151 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 1144 1152 DEALLOCATE(u_seri,v_seri) 1145 1153 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) … … 1147 1155 DEALLOCATE(tr_seri) 1148 1156 DEALLOCATE(d_t_dyn,d_q_dyn) 1149 DEALLOCATE(d_ql_dyn,d_qs_dyn )1150 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d )1157 DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn) 1158 DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d) 1151 1159 DEALLOCATE(d_u_dyn,d_v_dyn) 1152 1160 DEALLOCATE(d_tr_dyn) !RomP … … 1171 1179 DEALLOCATE(plul_st,plul_th) 1172 1180 DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss) 1181 DEALLOCATE(d_qbs_vdf) 1182 DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs) 1173 1183 #ifdef ISO 1174 1184 deallocate(xt_seri,xtl_seri,xts_seri) … … 1308 1318 DEALLOCATE(cldm, cldq, cldt, qsat2m) 1309 1319 DEALLOCATE(JrNt) 1310 DEALLOCATE(dthmin, evap, fder, plcl, plfc)1311 DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)1320 DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc) 1321 DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl) 1312 1322 DEALLOCATE(s_pblh, s_pblt, s_therm) 1313 1323 ! … … 1322 1332 DEALLOCATE(zxfqcalving, zxfluxlat) 1323 1333 DEALLOCATE(zxrunofflic) 1334 DEALLOCATE(zxustartlic, zxrhoslic) 1324 1335 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 1325 1336 DEALLOCATE(rain_lsc) … … 1423 1434 1424 1435 1425 DEALLOCATE(prfl, psfl, fraca, Vprecip)1436 DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip) 1426 1437 DEALLOCATE(zw2) 1427 1438 -
LMDZ6/branches/blowing_snow/libf/phylmdiso/phys_output_ctrlout_mod.F90
r4065 r4506 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) /)) … … 1413 1422 'ec550aer', 'Extinction at 550nm', 'm^-1', (/ ('', i=1, 10) /)) 1414 1423 TYPE(ctrl_out), SAVE :: o_lwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1415 'lwcon', 'Cloud liquid water content ', 'kg/kg', (/ ('', i=1, 10) /))1424 'lwcon', 'Cloud liquid water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /)) 1416 1425 TYPE(ctrl_out), SAVE :: o_iwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1417 'iwcon', 'Cloud ice water content ', 'kg/kg', (/ ('', i=1, 10) /))1426 'iwcon', 'Cloud ice water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /)) 1418 1427 TYPE(ctrl_out), SAVE :: o_temp = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), & 1419 1428 'temp', 'Air temperature', 'K', (/ ('', 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) /)) … … 1494 1505 TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1495 1506 'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1507 TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1508 'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1509 TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1510 'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1496 1511 TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1497 1512 'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /)) … … 1502 1517 TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1503 1518 'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /)) 1519 TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1520 'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /)) 1504 1521 TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1505 1522 're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /)) … … 1599 1616 TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1600 1617 'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1618 TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1619 'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1620 TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1621 'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1601 1622 TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1602 1623 'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /)) … … 1673 1694 TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1674 1695 'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /)) 1696 TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1697 'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1698 TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1699 'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1700 TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1701 'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /)) 1702 TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), & 1703 'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /)) 1675 1704 1676 1705 !!!!!!!!!!!!!!!! Specifique thermiques -
LMDZ6/branches/blowing_snow/libf/phylmdiso/phys_output_var_mod.F90
r4374 r4506 29 29 REAL, SAVE, ALLOCATABLE :: d_qw_col(:) ! watter vapour mass budget for each column (kg/m2/s) 30 30 REAL, SAVE, ALLOCATABLE :: d_ql_col(:) ! liquid watter mass budget for each column (kg/m2/s) 31 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! solid watter mass budget for each column (kg/m2/s) 31 REAL, SAVE, ALLOCATABLE :: d_qs_col(:) ! cloud ice mass budget for each column (kg/m2/s) 32 REAL, SAVE, ALLOCATABLE :: d_qbs_col(:) ! blowing snow mass budget for each column (kg/m2/s) 32 33 REAL, SAVE, ALLOCATABLE :: d_qt_col(:) ! total watter mass budget for each column (kg/m2/s) 33 34 REAL, SAVE, ALLOCATABLE :: d_ek_col(:) ! kinetic energy budget for each column (W/m2) … … 35 36 REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:) ! enthalpy budget of watter vapour for each column (W/m2) 36 37 REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:) ! enthalpy budget of liquid watter for each column (W/m2) 37 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of solid watter for each column (W/m2) 38 REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:) ! enthalpy budget of cloud ice for each column (W/m2) 39 REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:) ! enthalpy budget of blowing snow for each column (W/m2) 38 40 REAL, SAVE, ALLOCATABLE :: d_h_col(:) ! total enthalpy budget for each column (W/m2) 39 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_q t_col, d_ek_col, d_h_dair_col)40 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_ col)41 !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col) 42 !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col) 41 43 42 44 ! 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/blowing_snow/libf/phylmdiso/physiq_mod.F90
r4504 r4506 79 79 USE wxios, ONLY: g_ctx, wxios_set_context 80 80 #endif 81 USE atke_turbulence_ini_mod, ONLY : atke_ini82 USE lscp_ini_mod, ONLY : lscp_ini83 81 USE lscp_mod, ONLY : lscp 84 82 USE wake_ini_mod, ONLY : wake_ini 85 83 USE yamada_ini_mod, ONLY : yamada_ini 84 USE atke_turbulence_ini_mod, ONLY : atke_ini 86 85 USE thermcell_ini_mod, ONLY : thermcell_ini 86 USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs 87 USE lscp_ini_mod, ONLY : lscp_ini 87 88 88 89 !USE cmp_seri_mod … … 183 184 ! [Variables internes non sauvegardees de la physique] 184 185 ! Variables locales pour effectuer les appels en serie 185 t_seri,q_seri,ql_seri,qs_seri, u_seri,v_seri,tr_seri,rneb_seri, &186 t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, & 186 187 ! Dynamic tendencies (diagnostics) 187 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_ u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &188 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &188 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, & 189 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 189 190 ! Physic tendencies 190 191 d_t_con,d_q_con,d_u_con,d_v_con, & … … 203 204 plul_st,plul_th, & 204 205 ! 205 d_t_vdf,d_q_vdf, d_u_vdf,d_v_vdf,d_t_diss, &206 d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, & 206 207 d_t_vdf_x, d_t_vdf_w, & 207 208 d_q_vdf_x, d_q_vdf_w, & 208 209 d_ts, & 210 ! 211 d_t_bs,d_q_bs,d_qbs_bs, & 209 212 ! 210 213 ! d_t_oli,d_u_oli,d_v_oli, & … … 254 257 cldh, cldl,cldm, cldq, cldt, & 255 258 JrNt, & 256 dthmin, evap, fder, plcl, plfc, &257 prw, prlw, prsw, &259 dthmin, evap, snowerosion,fder, plcl, plfc, & 260 prw, prlw, prsw, prbsw, & 258 261 s_lcl, s_pblh, s_pblt, s_therm, & 259 262 cdragm, cdragh, & … … 343 346 fsolsw, wfbils, wfbilo, & 344 347 wfevap, wfrain, wfsnow, & 345 prfl, psfl, fraca, Vprecip, &348 prfl, psfl,bsfl, fraca, Vprecip, & 346 349 zw2, & 347 350 ! … … 526 529 !====================================================================== 527 530 ! 528 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 529 INTEGER,SAVE :: ivap, iliq, isol, irneb 530 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb )531 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 532 INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs 533 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs) 531 534 ! 532 535 ! … … 905 908 REAL dialiq(klon,klev) ! eau liquide nuageuse 906 909 REAL diafra(klon,klev) ! fraction nuageuse 907 REAL cldliq(klon,klev) ! eau liquide nuageuse910 REAL radocond(klon,klev) ! eau condensee nuageuse 908 911 ! 909 912 !XXX PB 910 913 REAL fluxq(klon,klev, nbsrf) ! flux turbulent d'humidite 914 REAL fluxqbs(klon,klev, nbsrf) ! flux turbulent de neige soufflee 911 915 ! 912 916 REAL zxfluxt(klon, klev) 913 917 REAL zxfluxq(klon, klev) 918 REAL zxfluxqbs(klon,klev) 914 919 REAL zxfluxu(klon, klev) 915 920 REAL zxfluxv(klon, klev) … … 1009 1014 ! 1010 1015 ! tendance nulles 1011 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 1016 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0 1012 1017 #ifdef ISO 1013 1018 REAL, dimension(ntraciso,klon,klev):: dxt0, dxtl0, dxti0 … … 1156 1161 REAL ztsol(klon) 1157 1162 REAL q2m(klon,nbsrf) ! humidite a 2m 1163 REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface 1164 REAL qbsfra ! blowing snow fraction 1158 1165 #ifdef ISO 1159 1166 REAL d_xtw(ntraciso),d_xtl(ntraciso), d_xts(ntraciso) … … 1372 1379 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1373 1380 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1381 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1374 1382 CALL init_etat0_limit_unstruct 1375 1383 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1415 1423 ENDIF 1416 1424 1417 1418 1425 IF (ok_ice_sursat.AND.(iflag_ice_thermo.EQ.0)) THEN 1419 1426 WRITE (lunout, *) ' ok_ice_sursat=y requires iflag_ice_thermo=1 as well' … … 1422 1429 ENDIF 1423 1430 1424 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1431 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1425 1432 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1426 1433 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1441 1448 ENDIF 1442 1449 1443 IF (ok_bs) THEN1450 IF (ok_bs) THEN 1444 1451 abort_message='blowing snow cannot be activated with water isotopes yet' 1445 1452 CALL abort_physic(modname,abort_message, 1) 1446 ENDIF 1453 IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN 1454 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1455 'but nqo=', nqo 1456 abort_message='see above' 1457 CALL abort_physic(modname,abort_message, 1) 1458 ENDIF 1459 ENDIF 1447 1460 Ncvpaseq1 = 0 1448 1461 dnwd0=0.0 … … 1898 1911 CALL lscp_ini(pdtphys,ok_ice_sursat) 1899 1912 endif 1913 CALL blowing_snow_ini(prt_level,lunout, & 1914 RCPD, RLSTT, RLVTT, RLMLT, & 1915 RVTMP2, RTT,RD,RG) 1900 1916 1901 1917 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 1924 1940 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 1925 1941 pplay, lmax_th, aerosol_couple, & 1926 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&1942 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync,& 1927 1943 ptconv, read_climoz, clevSTD, & 1928 1944 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 2411 2427 dql0(:,:)=0. 2412 2428 dqi0(:,:)=0. 2429 dqbs0(:,:)=0. 2413 2430 #ifdef ISO 2414 2431 dxt0(:,:,:)=0. … … 2468 2485 q_seri(i,k) = qx(i,k,ivap) 2469 2486 ql_seri(i,k) = qx(i,k,iliq) 2487 qbs_seri(i,k) = 0. 2470 2488 !CR: ATTENTION, on rajoute la variable glace 2471 2489 IF (nqo.EQ.2) THEN !--vapour and liquid only … … 2475 2493 qs_seri(i,k) = qx(i,k,isol) 2476 2494 rneb_seri(i,k) = 0. 2477 ELSE IF (nqo. EQ.4) THEN !--vapour, liquid, ice and rneb2495 ELSE IF (nqo.GE.4) THEN !--vapour, liquid, ice and rneb and blowing snow 2478 2496 qs_seri(i,k) = qx(i,k,isol) 2497 IF (ok_ice_sursat) THEN 2479 2498 rneb_seri(i,k) = qx(i,k,irneb) 2499 ENDIF 2500 IF (ok_bs) THEN 2501 qbs_seri(i,k)= qx(i,k,ibs) 2502 ENDIF 2503 2480 2504 ENDIF 2505 2506 2481 2507 ENDDO 2482 2508 ENDDO … … 2519 2545 qql1(:)=0.0 2520 2546 DO k = 1, klev 2521 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k) )*zmasse(:,k)2547 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k) 2522 2548 ENDDO 2523 2549 #ifdef ISO … … 2626 2652 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2627 2653 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2654 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2628 2655 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2629 2656 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2632 2659 CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d) 2633 2660 d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep 2661 CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d) 2662 d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep 2634 2663 ! !! RomP >>> td dyn traceur 2635 2664 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep … … 2718 2747 d_ql_dyn2d(:) = 0.0 2719 2748 d_qs_dyn2d(:) = 0.0 2749 d_qbs_dyn2d(:)= 0.0 2720 2750 2721 2751 #ifdef ISO … … 2741 2771 ! !! RomP <<< 2742 2772 d_rneb_dyn(:,:)=0.0 2773 d_qbs_dyn(:,:)=0.0 2743 2774 ancien_ok = .TRUE. 2744 2775 ENDIF … … 2860 2891 2861 2892 CALL add_phys_tend & 2862 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, paprs,&2893 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,& 2863 2894 'eva',abortphy,flag_inhib_tend,itap,0 & 2864 2895 #ifdef ISO … … 3029 3060 longitude_deg, latitude_deg, rugoro, zrmu0, & 3030 3061 sollwdown, cldt, & 3031 rain_fall, snow_fall, solsw, solswfdiff, sollw, &3062 rain_fall, snow_fall, bs_fall, solsw, solswfdiff, sollw, & 3032 3063 gustiness, & 3033 t_seri, q_seri, u_seri, v_seri, &3064 t_seri, q_seri, qbs_seri, u_seri, v_seri, & 3034 3065 !nrlmd+jyg< 3035 3066 wake_deltat, wake_deltaq, wake_cstar, wake_s, & … … 3042 3073 !albedo SB >>> 3043 3074 ! albsol1, albsol2, sens, evap, & 3044 albsol_dir, albsol_dif, sens, evap, 3075 albsol_dir, albsol_dif, sens, evap, snowerosion, & 3045 3076 !albedo SB <<< 3046 3077 albsol3_lic,runoff, snowhgt, qsnow, to_ice, sissnow, & 3047 3078 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 3048 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, &3079 d_t_vdf, d_q_vdf, d_qbs_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 3049 3080 !nrlmd< 3050 3081 !jyg< … … 3072 3103 fluxt, fluxu, fluxv, & 3073 3104 dsens, devap, zxsnow, & 3074 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, &3105 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, & 3075 3106 !nrlmd+jyg< 3076 3107 wake_delta_pbl_TKE, & … … 3184 3215 IF (klon_glo==1) THEN 3185 3216 CALL add_pbl_tend & 3186 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&3217 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 3187 3218 'vdf',abortphy,flag_inhib_tend,itap & 3188 3219 #ifdef ISO … … 3192 3223 ELSE 3193 3224 CALL add_phys_tend & 3194 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&3225 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 3195 3226 'vdf',abortphy,flag_inhib_tend,itap,0 & 3196 3227 #ifdef ISO … … 3254 3285 3255 3286 ENDIF 3287 3288 ! ================================================================== 3289 ! Blowing snow sublimation and sedimentation 3290 3291 d_t_bs(:,:)=0. 3292 d_q_bs(:,:)=0. 3293 d_qbs_bs(:,:)=0. 3294 bsfl(:,:)=0. 3295 bs_fall(:)=0. 3296 IF (ok_bs) THEN 3297 3298 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, & 3299 d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall) 3300 3301 CALL add_phys_tend & 3302 (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,& 3303 'bs',abortphy,flag_inhib_tend,itap,0 & 3304 #ifdef ISO 3305 & ,dxt0,dxtl0,dxti0 & 3306 #endif 3307 & ) 3308 3309 ENDIF 3310 3256 3311 ! =================================================================== c 3257 3312 ! Calcul de Qsat … … 3925 3980 !! 3926 3981 !! 3927 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &3982 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, & 3928 3983 'convection',abortphy,flag_inhib_tend,itap,0 & 3929 3984 #ifdef ISO … … 4157 4212 !----------------------------------------------------------------------- 4158 4213 ! ajout des tendances des poches froides 4159 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0, paprs,'wake', &4214 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', & 4160 4215 abortphy,flag_inhib_tend,itap,0 & 4161 4216 #ifdef ISO … … 4436 4491 ! 4437 4492 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 4438 dql0,dqi0, paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &4493 dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 & 4439 4494 #ifdef ISO 4440 4495 & ,d_xt_ajs,dxtl0,dxti0 & … … 4552 4607 !-------------------------------------------------------------------- 4553 4608 ! ajout des tendances de l'ajustement sec ou des thermiques 4554 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0, paprs, &4609 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, & 4555 4610 'ajsb',abortphy,flag_inhib_tend,itap,0 & 4556 4611 #ifdef ISO … … 4696 4751 CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, & 4697 4752 t_seri, q_seri,ptconv,ratqs, & 4698 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 4699 cldliq, picefra, rain_lsc, snow_lsc, &4753 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 4754 radocond, picefra, rain_lsc, snow_lsc, & 4700 4755 frac_impa, frac_nucl, beta_prec_fisrt, & 4701 4756 prfl, psfl, rhcl, & … … 4709 4764 CALL fisrtilp(phys_tstep,paprs,pplay, & 4710 4765 t_seri, q_seri,ptconv,ratqs, & 4711 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, &4766 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, radocond, & 4712 4767 rain_lsc, snow_lsc, & 4713 4768 pfrac_impa, pfrac_nucl, pfrac_1nucl, & … … 4757 4812 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 4758 4813 !-JLD 4759 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &4814 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 4760 4815 'lsc',abortphy,flag_inhib_tend,itap,0 & 4761 4816 #ifdef ISO … … 4794 4849 ENDIF 4795 4850 4796 !--------------------------------------------------------------------------- 4851 4852 !--------------------------------------------------------------------------- 4797 4853 DO k = 1, klev 4798 4854 DO i = 1, klon 4799 4855 cldfra(i,k) = rneb(i,k) 4800 4856 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 4801 IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k) 4857 !EV: en effet etrange, j'ajouterais aussi qs_seri 4858 ! plus largement, je nettoierais (enleverrais) ces lignes 4859 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 4802 4860 ENDDO 4803 4861 ENDDO 4804 4862 4805 4863 4806 4864 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 4865 ! makes sense only if the new large scale condensation scheme is active 4866 ! with the ok_icefra_lscp flag active as well 4867 4868 IF (ok_bs .AND. ok_rad_bs) THEN 4869 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 4870 DO k=1,klev 4871 DO i=1,klon 4872 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 4873 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 4874 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 4875 cldfra(i,k)=max(cldfra(i,k),qbsfra) 4876 ENDDO 4877 ENDDO 4878 ELSE 4879 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 4880 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 4881 abort_message='inconsistency in cloud phase for blowing snow' 4882 CALL abort_physic(modname,abort_message,1) 4883 ENDIF 4884 4885 ENDIF 4807 4886 #ifdef ISO 4808 4887 !#ifdef ISOVERIF … … 4967 5046 DO i = 1, klon 4968 5047 IF (diafra(i,k).GT.cldfra(i,k)) THEN 4969 cldliq(i,k) = dialiq(i,k)5048 radocond(i,k) = dialiq(i,k) 4970 5049 cldfra(i,k) = diafra(i,k) 4971 5050 ENDIF … … 5004 5083 DO i=1,klon 5005 5084 IF (ptconv(i,k).AND.ptconvth(i,k)) THEN 5006 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5085 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5007 5086 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5008 5087 ELSE IF (ptconv(i,k)) THEN 5009 5088 cldfra(i,k)=rnebcon(i,k) 5010 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5089 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5011 5090 ENDIF 5012 5091 ENDDO … … 5017 5096 DO i=1,klon 5018 5097 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5019 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5098 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5020 5099 ENDDO 5021 5100 ENDDO … … 5035 5114 IF (ptconv(i,k).AND. .NOT.ptconvth(i,k)) THEN 5036 5115 cldfra(i,k)=rnebcon(i,k) 5037 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5116 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5038 5117 ENDIF 5039 5118 ENDDO … … 5046 5125 ! Ancienne version 5047 5126 cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.) 5048 cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)5127 radocond(:,:)=radocond(:,:)+rnebcon(:,:)*clwcon(:,:) 5049 5128 ENDIF 5050 5129 … … 5066 5145 DO i = 1, klon 5067 5146 IF (diafra(i,k).GT.cldfra(i,k)) THEN 5068 cldliq(i,k) = dialiq(i,k)5147 radocond(i,k) = dialiq(i,k) 5069 5148 cldfra(i,k) = diafra(i,k) 5070 5149 ENDIF … … 5441 5520 ENDIF 5442 5521 CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, & 5443 paprs, pplay, t_seri, cldliq, picefra, cldfra, &5522 paprs, pplay, t_seri, radocond, picefra, cldfra, & 5444 5523 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & 5445 5524 flwp, fiwp, flwc, fiwc, & … … 5449 5528 ELSE 5450 5529 CALL nuage (paprs, pplay, & 5451 t_seri, cldliq, picefra, cldfra, cldtau, cldemi, &5530 t_seri, radocond, picefra, cldfra, cldtau, cldemi, & 5452 5531 cldh, cldl, cldm, cldt, cldq, & 5453 5532 ok_aie, & … … 5758 5837 ENDDO 5759 5838 5760 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0 &5839 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 & 5761 5840 #ifdef ISO 5762 5841 & ,dxt0,dxtl0,dxti0 & … … 5764 5843 & ) 5765 5844 CALL prt_enerbil('SW',itap) 5766 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0 &5845 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 & 5767 5846 #ifdef ISO 5768 5847 & ,dxt0,dxtl0,dxti0 & … … 5812 5891 ! -> condition on zrel_oro can deactivate the drag on tilted planar terrains 5813 5892 ! such as ice sheets (work by V. Wiener) 5814 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5893 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5815 5894 ! earn computation time but they are not physical. 5816 5895 IF (((zpic(i)-zmea(i)).GT.zpmm_orodr_t).AND.(zstd(i).GT.zstd_orodr_t).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN … … 5843 5922 !----------------------------------------------------------------------- 5844 5923 ! ajout des tendances de la trainee de l'orographie 5845 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &5924 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 5846 5925 abortphy,flag_inhib_tend,itap,0 & 5847 5926 #ifdef ISO … … 5898 5977 5899 5978 ! ajout des tendances de la portance de l'orographie 5900 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &5979 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 5901 5980 'lif', abortphy,flag_inhib_tend,itap,0 & 5902 5981 #ifdef ISO … … 5927 6006 d_t_hin(:, :)=0. 5928 6007 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 5929 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &6008 dqi0, dqbs0,paprs, 'hin', abortphy,flag_inhib_tend,itap,0 & 5930 6009 #ifdef ISO 5931 6010 & ,dxt0,dxtl0,dxti0 & … … 5949 6028 ENDDO 5950 6029 5951 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &6030 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 5952 6031 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 5953 6032 #ifdef ISO … … 5962 6041 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 5963 6042 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 5964 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &6043 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 5965 6044 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 5966 6045 #ifdef ISO … … 6021 6100 d_xt_ch4_dtime(:,:,:) = d_xt_ch4(:,:,:)*phys_tstep 6022 6101 #endif 6023 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &6102 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 6024 6103 'q_ch4', abortphy,flag_inhib_tend,itap,0 & 6025 6104 #ifdef ISO … … 6087 6166 ! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE 6088 6167 ! Mais attention, cela ne va pas dans le sens de la conservation de l'energie! 6089 IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN6168 IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN 6090 6169 itest(i)=1 6091 6170 igwd=igwd+1 … … 6347 6426 ! 6348 6427 6349 IF (type_trac =='repr') THEN6428 IF (type_trac == 'repr') THEN 6350 6429 !MM pas d'impact, car on recupere q_seri,tr_seri,t_seri via phys_local_var_mod 6351 6430 !MM dans Reprobus … … 6397 6476 presnivs, pphis, pphi, albsol1, & 6398 6477 sh_in, ch_in, rhcl, cldfra, rneb, & 6399 diafra, cldliq, itop_con, ibas_con, &6478 diafra, radocond, itop_con, ibas_con, & 6400 6479 pmflxr, pmflxs, prfl, psfl, & 6401 6480 da, phi, mp, upwd, & … … 6414 6493 6415 6494 CALL add_phys_tend & 6416 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&6495 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 6417 6496 'rep',abortphy,flag_inhib_tend,itap,0) 6418 6497 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 6491 6570 ! prlw = colonne eau liquide 6492 6571 ! prlw = colonne eau solide 6572 ! prbsw = colonne neige soufflee 6493 6573 prw(:) = 0. 6494 6574 prlw(:) = 0. 6495 6575 prsw(:) = 0. 6576 prbsw(:) = 0. 6496 6577 DO k = 1, klev 6497 6578 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 6498 6579 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 6499 6580 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 6581 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 6500 6582 ENDDO 6501 6583 … … 6568 6650 ENDIF 6569 6651 !--ice_sursat: nqo=4, on ajoute rneb 6570 IF (nqo == 4) THEN6652 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 6571 6653 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 6572 6654 ENDIF 6655 6656 IF (nqo.ge.4 .and. ok_bs) THEN 6657 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 6658 ENDIF 6659 6660 6573 6661 ENDDO 6574 6662 ENDDO … … 6650 6738 ql_ancien(:,:) = ql_seri(:,:) 6651 6739 qs_ancien(:,:) = qs_seri(:,:) 6740 qbs_ancien(:,:) = qbs_seri(:,:) 6652 6741 rneb_ancien(:,:) = rneb_seri(:,:) 6653 6742 #ifdef ISO … … 6659 6748 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 6660 6749 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 6750 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 6661 6751 ! !! RomP >>> 6662 6752 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 6787 6877 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 6788 6878 pplay, lmax_th, aerosol_couple, & 6789 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &6879 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 6790 6880 ok_sync, ptconv, read_climoz, clevSTD, & 6791 6881 ptconvth, d_u, d_t, qx, d_qx, zmasse, & -
LMDZ6/branches/blowing_snow/libf/phylmdiso/surf_land_mod.F90
r4285 r4506 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 , & … … 94 94 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 95 95 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 96 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 96 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 97 97 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 98 98 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 129 129 !albedo SB <<< 130 130 REAL, DIMENSION(klon), INTENT(OUT) :: evap 131 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat 131 REAL, DIMENSION(klon), INTENT(OUT) :: fluxsens, fluxlat, fluxbs 132 132 REAL, DIMENSION(klon), INTENT(OUT) :: qsurf 133 133 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new … … 152 152 REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used 153 153 REAL, DIMENSION(klon) :: u0, v0 ! surface speed 154 REAL, DIMENSION(klon) :: precip_totsnow ! total solid precip 154 155 INTEGER :: i 155 156 … … 166 167 #endif 167 168 169 !**************************************************************************************** 170 !Total solid precip 171 172 IF (ok_bs) THEN 173 precip_totsnow=precip_snow+precip_bs 174 ELSE 175 precip_totsnow=precip_snow 176 ENDIF 177 !**************************************************************************************** 168 178 #ifdef ISO 169 179 #ifdef ISOVERIF … … 228 238 zlev, u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, & 229 239 cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, & 230 precip_rain, precip_ snow, lwdown_m, swnet, swdown, &240 precip_rain, precip_totsnow, lwdown_m, swnet, swdown, & 231 241 pref_tmp, q2m, t2m, & 232 evap, fluxsens, fluxlat, &242 evap, fluxsens, fluxlat,fluxbs, & 233 243 tsol_rad, tsurf_new, alb1_new, alb2_new, & 234 244 emis_new, z0m, z0h, qsurf, & … … 277 287 #endif 278 288 CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,& 279 tsurf, p1lay, cdragh, precip_rain, precip_ snow, temp_air, &289 tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, & 280 290 spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, & 281 291 u1, v1, gustiness, rugoro, swnet, lwnet, & … … 293 303 ENDIF ! ok_veget 294 304 305 ! blowing snow not treated yet over land 306 fluxbs(:)=0. 295 307 !**************************************************************************************** 296 308 ! Calculation for all land models -
LMDZ6/branches/blowing_snow/libf/phylmdiso/surf_landice_mod.F90
r4285 r4506 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 17 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 snow, qsurf, qsol, agesno, &19 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &18 snow, qsurf, qsol, qbs1, agesno, & 19 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, & 20 20 tsurf_new, dflux_s, dflux_l, & 21 21 alt, slope, cloudf, & … … 34 34 USE cpl_mod, ONLY : cpl_send_landice_fields 35 35 USE calcul_fluxs_mod 36 USE phys_output_var_mod 36 USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic 37 USE phys_output_var_mod, ONLY : snow_o,zfra_o 37 38 #ifdef ISO 38 39 USE fonte_neige_mod, ONLY : xtrun_off_lic … … 48 49 !FC 49 50 USE ioipsl_getin_p_mod, ONLY : getin_p 50 51 USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs 51 52 52 53 #ifdef CPP_INLANDSIS … … 72 73 REAL, DIMENSION(klon), INTENT(IN) :: p1lay 73 74 REAL, DIMENSION(klon), INTENT(IN) :: cdragh, cdragm 74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 75 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 75 76 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 76 77 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ … … 78 79 REAL, DIMENSION(klon), INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV 79 80 REAL, DIMENSION(klon), INTENT(IN) :: ps 80 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 81 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness, qbs1 81 82 REAL, DIMENSION(klon), INTENT(IN) :: rugoro 82 83 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf … … 118 119 !albedo SB <<< 119 120 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 121 REAL, DIMENSION(klon), INTENT(OUT) :: fluxbs 120 122 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 121 123 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l … … 179 181 180 182 REAL,DIMENSION(klon) :: alb1,alb2 183 REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow 181 184 REAL, DIMENSION (klon,6) :: alb6 185 REAL :: rho0, rhoice, ustart0, hsalt, esalt, qsalt 186 REAL :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard 187 REAL, DIMENSION(klon) :: ws1, rhos, ustart 182 188 ! End definition 183 189 !**************************************************************************************** … … 214 220 PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic 215 221 216 ! z0m=1.e-3217 ! z0h = z0m218 222 firstcall=.false. 219 223 ENDIF 220 224 !****************************************************************************************** 221 ! 225 222 226 ! Initialize output variables 223 227 alb3(:) = 999999. 224 228 alb2(:) = 999999. 225 229 alb1(:) = 999999. 226 230 fluxbs(:)=0. 227 231 runoff(:) = 0. 228 232 !**************************************************************************************** … … 232 236 radsol(:) = 0.0 233 237 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 238 239 !**************************************************************************************** 234 240 235 241 !**************************************************************************************** … … 327 333 328 334 329 330 335 ELSE 331 336 … … 342 347 IF (soil_model) THEN 343 348 CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, & 344 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 345 349 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 346 350 cal(1:knon) = RCPD / soilcap(1:knon) 347 351 radsol(1:knon) = radsol(1:knon) + soilflux(1:knon) … … 406 410 flux_u1, flux_v1) 407 411 408 !**************************************************************************************** 409 ! Calculate snow height, age, run-off,.. 412 413 !**************************************************************************************** 414 ! Calculate albedo 415 ! 416 !**************************************************************************************** 417 418 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 419 420 421 ! EV: following lines are obsolete since we set alb1 and alb2 to constant values 422 ! I therefore comment them 423 ! alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 424 ! 0.6 * (1.0-zfra(1:knon)) 425 ! 426 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" 427 ! alb1(1 : knon) = 0.6 !IM cf FH/GK 428 ! alb1(1 : knon) = 0.82 429 ! alb1(1 : knon) = 0.77 !211003 Ksta0.77 430 ! alb1(1 : knon) = 0.8 !KstaTER0.8 & LMD_ARMIP5 431 !IM: KstaTER0.77 & LMD_ARMIP6 432 433 ! Attantion: alb1 and alb2 are not the same! 434 alb1(1:knon) = alb_vis_sno_lic 435 alb2(1:knon) = alb_nir_sno_lic 436 437 438 !**************************************************************************************** 439 ! Rugosity 440 ! 441 !**************************************************************************************** 442 z0m = z0m_landice 443 z0h = z0h_landice 444 !z0m = SQRT(z0m**2+rugoro**2) 445 446 447 448 ! Simple blowing snow param 449 if (ok_bs) then 450 ustart0 = 0.211 451 rhoice = 920.0 452 rho0 = 200.0 453 rhomax=450.0 454 rhohard=400.0 455 tau_dens0=86400.0*10. ! 10 days by default, in s 456 tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory 457 do i = 1, knon 458 ! estimation of snow density 459 ! snow density increases with snow age and 460 ! increases even faster in case of sedimentation of blowing snow 461 tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs)) 462 rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens)) 463 ! blowing snow flux formula used in MAR 464 ws1(i)=(u1(i)**2+v1(i)**2)**0.5 465 ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5 466 ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax)) 467 ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till 468 ! rhohard<450) 469 esalt=1./(3.25*max(ustar(i),0.001)) 470 hsalt=0.08436*ustar(i)**1.27 471 qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt 472 !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2) 473 fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt) 474 enddo 475 476 ! for outputs 477 do j = 1, knon 478 i = knindex(j) 479 zxustartlic(i) = ustart(j) 480 zxrhoslic(i) = rhos(j) 481 enddo 482 483 endif 484 485 486 487 !**************************************************************************************** 488 ! Calculate surface snow amount 410 489 ! 411 490 !**************************************************************************************** 491 IF (ok_bs) THEN 492 precip_totsnow=precip_snow+precip_bs 493 evap_totsnow=evap-fluxbs ! flux bs is positive towards the surface (snow erosion) 494 ELSE 495 precip_totsnow=precip_snow 496 evap_totsnow=evap 497 ENDIF 498 412 499 CALL fonte_neige(knon, is_lic, knindex, dtime, & 413 tsurf, precip_rain, precip_ snow, &414 snow, qsol, tsurf_new, evap &500 tsurf, precip_rain, precip_totsnow, & 501 snow, qsol, tsurf_new, evap_totsnow & 415 502 #ifdef ISO 416 503 & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag & … … 446 533 447 534 448 !**************************************************************************************** 449 ! Calculate albedo 450 ! 451 !**************************************************************************************** 452 CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 453 454 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 455 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 456 alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + & 457 0.6 * (1.0-zfra(1:knon)) 458 ! 459 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux" 460 ! alb1(1 : knon) = 0.6 !IM cf FH/GK 461 ! alb1(1 : knon) = 0.82 462 ! alb1(1 : knon) = 0.77 !211003 Ksta0.77 463 ! alb1(1 : knon) = 0.8 !KstaTER0.8 & LMD_ARMIP5 464 !IM: KstaTER0.77 & LMD_ARMIP6 465 466 ! Attantion: alb1 and alb2 are not the same! 467 alb1(1:knon) = alb_vis_sno_lic 468 alb2(1:knon) = alb_nir_sno_lic 469 470 471 !**************************************************************************************** 472 ! Rugosity 473 ! 474 !**************************************************************************************** 475 z0m=1.e-3 476 z0h = z0m 477 z0m = SQRT(z0m**2+rugoro**2) 478 535 WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0. 536 zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 479 537 480 538 … … 494 552 run_off_lic_frac(j) = pctsrf(i,is_lic) 495 553 ENDDO 496 554 497 555 CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac) 498 556 ENDIF … … 501 559 runoff(1:knon)=run_off_lic(1:knon)/dtime 502 560 503 504 !****************************************************************************************505 ! Etienne: comment these lines because of duplication just below506 ! snow_o=0.507 ! zfra_o = 0.508 ! DO j = 1, knon509 ! i = knindex(j)510 ! snow_o(i) = snow(j)511 ! zfra_o(i) = zfra(j)512 ! ENDDO513 !514 !****************************************************************************************515 561 snow_o=0. 516 562 zfra_o = 0. … … 553 599 !albedo SB <<< 554 600 555 556 557 601 558 602 END SUBROUTINE surf_landice -
LMDZ6/branches/blowing_snow/libf/phylmdiso/surf_ocean_mod.F90
r4374 r4506 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, & … … 72 72 REAL, DIMENSION(klon), INTENT(IN) :: cdragh 73 73 REAL, DIMENSION(klon), INTENT(IN) :: cdragm 74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow, precip_bs 75 75 REAL, DIMENSION(klon), INTENT(IN) :: temp_air, spechum 76 76 REAL, DIMENSION(klon), INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ … … 169 169 REAL, DIMENSION(klon) :: radsol 170 170 REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation 171 REAL, DIMENSION(klon) :: precip_totsnow 171 172 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 172 173 real rhoa(knon) ! density of moist air (kg / m3) … … 200 201 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 201 202 203 204 !**************************************************************************************** 205 !Total solid precip 206 207 IF (ok_bs) THEN 208 precip_totsnow=precip_snow+precip_bs 209 ELSE 210 precip_totsnow=precip_snow 211 ENDIF 212 202 213 !****************************************************************************** 203 214 ! Cdragq computed from cdrag … … 227 238 windsp, fder, & 228 239 itime, dtime, knon, knindex, & 229 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow,temp_air,spechum,&240 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow,temp_air,spechum,& 230 241 AcoefH, AcoefQ, BcoefH, BcoefQ, & 231 242 AcoefU, AcoefV, BcoefU, BcoefV, & … … 239 250 CALL ocean_slab_noice( & 240 251 itime, dtime, jour, knon, knindex, & 241 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow, temp_air, spechum,&252 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, temp_air, spechum,& 242 253 AcoefH, AcoefQ, BcoefH, BcoefQ, & 243 254 AcoefU, AcoefV, BcoefU, BcoefV, & … … 250 261 CALL ocean_forced_noice( & 251 262 itime, dtime, jour, knon, knindex, & 252 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_ snow, &263 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, & 253 264 temp_air, spechum, & 254 265 AcoefH, AcoefQ, BcoefH, BcoefQ, & … … 370 381 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 371 382 u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), & 372 rain = precip_rain(:knon) + precip_ snow(:knon), &383 rain = precip_rain(:knon) + precip_totsnow(:knon), & 373 384 hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 374 385 rnl = - lwnet(:knon), &
Note: See TracChangeset
for help on using the changeset viewer.