- Timestamp:
- Sep 4, 2023, 10:17:16 AM (15 months ago)
- Location:
- LMDZ6/branches/LMDZ_cdrag_LSCE
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_cdrag_LSCE
- Property svn:mergeinfo changed
-
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
Note: See TracChangeset
for help on using the changeset viewer.