Changeset 4523 for LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
- Timestamp:
- May 3, 2023, 6:21:08 PM (19 months ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk
- Property svn:mergeinfo changed
/LMDZ6/branches/blowing_snow (added) merged: 4485,4504,4506,4521
- Property svn:mergeinfo changed
-
LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
r4522 r4523 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) … … 1421 1429 ENDIF 1422 1430 1423 IF (ok_ice_sursat.AND.(nqo. NE.4)) THEN1431 IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN 1424 1432 WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', & 1425 1433 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.' … … 1440 1448 ENDIF 1441 1449 1450 IF (ok_bs) THEN 1451 abort_message='blowing snow cannot be activated with water isotopes yet' 1452 CALL abort_physic(modname,abort_message, 1) 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 1442 1460 Ncvpaseq1 = 0 1443 1461 dnwd0=0.0 … … 1893 1911 CALL lscp_ini(pdtphys,ok_ice_sursat) 1894 1912 endif 1913 CALL blowing_snow_ini(prt_level,lunout, & 1914 RCPD, RLSTT, RLVTT, RLMLT, & 1915 RVTMP2, RTT,RD,RG) 1895 1916 1896 1917 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 1919 1940 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 1920 1941 pplay, lmax_th, aerosol_couple, & 1921 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&1942 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync,& 1922 1943 ptconv, read_climoz, clevSTD, & 1923 1944 ptconvth, d_u, d_t, qx, d_qx, zmasse, & … … 2406 2427 dql0(:,:)=0. 2407 2428 dqi0(:,:)=0. 2429 dqbs0(:,:)=0. 2408 2430 #ifdef ISO 2409 2431 dxt0(:,:,:)=0. … … 2463 2485 q_seri(i,k) = qx(i,k,ivap) 2464 2486 ql_seri(i,k) = qx(i,k,iliq) 2487 qbs_seri(i,k) = 0. 2465 2488 !CR: ATTENTION, on rajoute la variable glace 2466 2489 IF (nqo.EQ.2) THEN !--vapour and liquid only … … 2470 2493 qs_seri(i,k) = qx(i,k,isol) 2471 2494 rneb_seri(i,k) = 0. 2472 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 2473 2496 qs_seri(i,k) = qx(i,k,isol) 2497 IF (ok_ice_sursat) THEN 2474 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 2475 2504 ENDIF 2505 2506 2476 2507 ENDDO 2477 2508 ENDDO … … 2515 2546 qql1(:)=0.0 2516 2547 DO k = 1, klev 2517 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k) )*zmasse(:,k)2548 qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k) 2518 2549 ENDDO 2519 2550 #ifdef ISO … … 2631 2662 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2632 2663 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2664 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2633 2665 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2634 2666 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2637 2669 CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d) 2638 2670 d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep 2671 CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d) 2672 d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep 2639 2673 ! !! RomP >>> td dyn traceur 2640 2674 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep … … 2723 2757 d_ql_dyn2d(:) = 0.0 2724 2758 d_qs_dyn2d(:) = 0.0 2759 d_qbs_dyn2d(:)= 0.0 2725 2760 2726 2761 #ifdef ISO … … 2746 2781 ! !! RomP <<< 2747 2782 d_rneb_dyn(:,:)=0.0 2783 d_qbs_dyn(:,:)=0.0 2748 2784 ancien_ok = .TRUE. 2749 2785 ENDIF … … 2878 2914 2879 2915 CALL add_phys_tend & 2880 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, paprs,&2916 (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,& 2881 2917 'eva',abortphy,flag_inhib_tend,itap,0 & 2882 2918 #ifdef ISO … … 3047 3083 longitude_deg, latitude_deg, rugoro, zrmu0, & 3048 3084 sollwdown, cldt, & 3049 rain_fall, snow_fall, solsw, solswfdiff, sollw, &3085 rain_fall, snow_fall, bs_fall, solsw, solswfdiff, sollw, & 3050 3086 gustiness, & 3051 t_seri, q_seri, u_seri, v_seri, &3087 t_seri, q_seri, qbs_seri, u_seri, v_seri, & 3052 3088 !nrlmd+jyg< 3053 3089 wake_deltat, wake_deltaq, wake_cstar, wake_s, & … … 3060 3096 !albedo SB >>> 3061 3097 ! albsol1, albsol2, sens, evap, & 3062 albsol_dir, albsol_dif, sens, evap, 3098 albsol_dir, albsol_dif, sens, evap, snowerosion, & 3063 3099 !albedo SB <<< 3064 3100 albsol3_lic,runoff, snowhgt, qsnow, to_ice, sissnow, & 3065 3101 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 3066 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, &3102 d_t_vdf, d_q_vdf, d_qbs_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 3067 3103 !nrlmd< 3068 3104 !jyg< … … 3090 3126 fluxt, fluxu, fluxv, & 3091 3127 dsens, devap, zxsnow, & 3092 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, &3128 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, & 3093 3129 !nrlmd+jyg< 3094 3130 wake_delta_pbl_TKE, & … … 3202 3238 IF (klon_glo==1) THEN 3203 3239 CALL add_pbl_tend & 3204 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&3240 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 3205 3241 'vdf',abortphy,flag_inhib_tend,itap & 3206 3242 #ifdef ISO … … 3210 3246 ELSE 3211 3247 CALL add_phys_tend & 3212 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0, paprs,&3248 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,& 3213 3249 'vdf',abortphy,flag_inhib_tend,itap,0 & 3214 3250 #ifdef ISO … … 3272 3308 3273 3309 ENDIF 3310 3311 ! ================================================================== 3312 ! Blowing snow sublimation and sedimentation 3313 3314 d_t_bs(:,:)=0. 3315 d_q_bs(:,:)=0. 3316 d_qbs_bs(:,:)=0. 3317 bsfl(:,:)=0. 3318 bs_fall(:)=0. 3319 IF (ok_bs) THEN 3320 3321 CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, & 3322 d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall) 3323 3324 CALL add_phys_tend & 3325 (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,& 3326 'bs',abortphy,flag_inhib_tend,itap,0 & 3327 #ifdef ISO 3328 & ,dxt0,dxtl0,dxti0 & 3329 #endif 3330 & ) 3331 3332 ENDIF 3333 3274 3334 ! =================================================================== c 3275 3335 ! Calcul de Qsat … … 3959 4019 !! 3960 4020 !! 3961 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &4021 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, & 3962 4022 'convection',abortphy,flag_inhib_tend,itap,0 & 3963 4023 #ifdef ISO … … 4191 4251 !----------------------------------------------------------------------- 4192 4252 ! ajout des tendances des poches froides 4193 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0, paprs,'wake', &4253 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', & 4194 4254 abortphy,flag_inhib_tend,itap,0 & 4195 4255 #ifdef ISO … … 4470 4530 ! 4471 4531 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 4472 dql0,dqi0, paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &4532 dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 & 4473 4533 #ifdef ISO 4474 4534 & ,d_xt_ajs,dxtl0,dxti0 & … … 4586 4646 !-------------------------------------------------------------------- 4587 4647 ! ajout des tendances de l'ajustement sec ou des thermiques 4588 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0, paprs, &4648 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, & 4589 4649 'ajsb',abortphy,flag_inhib_tend,itap,0 & 4590 4650 #ifdef ISO … … 4730 4790 CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, & 4731 4791 t_seri, q_seri,ptconv,ratqs, & 4732 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 4733 cldliq, picefra, rain_lsc, snow_lsc, &4792 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, & 4793 radocond, picefra, rain_lsc, snow_lsc, & 4734 4794 frac_impa, frac_nucl, beta_prec_fisrt, & 4735 4795 prfl, psfl, rhcl, & … … 4743 4803 CALL fisrtilp(phys_tstep,paprs,pplay, & 4744 4804 t_seri, q_seri,ptconv,ratqs, & 4745 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, &4805 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, radocond, & 4746 4806 rain_lsc, snow_lsc, & 4747 4807 pfrac_impa, pfrac_nucl, pfrac_1nucl, & … … 4791 4851 ! write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1) 4792 4852 !-JLD 4793 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc, paprs, &4853 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, & 4794 4854 'lsc',abortphy,flag_inhib_tend,itap,0 & 4795 4855 #ifdef ISO … … 4828 4888 ENDIF 4829 4889 4830 !--------------------------------------------------------------------------- 4890 4891 !--------------------------------------------------------------------------- 4831 4892 DO k = 1, klev 4832 4893 DO i = 1, klon 4833 4894 cldfra(i,k) = rneb(i,k) 4834 4895 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 4835 IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k) 4896 !EV: en effet etrange, j'ajouterais aussi qs_seri 4897 ! plus largement, je nettoierais (enleverrais) ces lignes 4898 IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k) 4836 4899 ENDDO 4837 4900 ENDDO 4838 4901 4839 4902 4840 4903 ! Option to activate the radiative effect of blowing snow (ok_rad_bs) 4904 ! makes sense only if the new large scale condensation scheme is active 4905 ! with the ok_icefra_lscp flag active as well 4906 4907 IF (ok_bs .AND. ok_rad_bs) THEN 4908 IF (ok_new_lscp .AND. ok_icefra_lscp) THEN 4909 DO k=1,klev 4910 DO i=1,klon 4911 radocond(i,k)=radocond(i,k)+qbs_seri(i,k) 4912 picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k)) 4913 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 4914 cldfra(i,k)=max(cldfra(i,k),qbsfra) 4915 ENDDO 4916 ENDDO 4917 ELSE 4918 WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow" 4919 WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false" 4920 abort_message='inconsistency in cloud phase for blowing snow' 4921 CALL abort_physic(modname,abort_message,1) 4922 ENDIF 4923 4924 ENDIF 4841 4925 #ifdef ISO 4842 4926 !#ifdef ISOVERIF … … 5001 5085 DO i = 1, klon 5002 5086 IF (diafra(i,k).GT.cldfra(i,k)) THEN 5003 cldliq(i,k) = dialiq(i,k)5087 radocond(i,k) = dialiq(i,k) 5004 5088 cldfra(i,k) = diafra(i,k) 5005 5089 ENDIF … … 5038 5122 DO i=1,klon 5039 5123 IF (ptconv(i,k).AND.ptconvth(i,k)) THEN 5040 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5124 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5041 5125 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5042 5126 ELSE IF (ptconv(i,k)) THEN 5043 5127 cldfra(i,k)=rnebcon(i,k) 5044 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5128 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5045 5129 ENDIF 5046 5130 ENDDO … … 5051 5135 DO i=1,klon 5052 5136 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.) 5053 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)5137 radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k) 5054 5138 ENDDO 5055 5139 ENDDO … … 5069 5153 IF (ptconv(i,k).AND. .NOT.ptconvth(i,k)) THEN 5070 5154 cldfra(i,k)=rnebcon(i,k) 5071 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)5155 radocond(i,k)=rnebcon(i,k)*clwcon(i,k) 5072 5156 ENDIF 5073 5157 ENDDO … … 5080 5164 ! Ancienne version 5081 5165 cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.) 5082 cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)5166 radocond(:,:)=radocond(:,:)+rnebcon(:,:)*clwcon(:,:) 5083 5167 ENDIF 5084 5168 … … 5100 5184 DO i = 1, klon 5101 5185 IF (diafra(i,k).GT.cldfra(i,k)) THEN 5102 cldliq(i,k) = dialiq(i,k)5186 radocond(i,k) = dialiq(i,k) 5103 5187 cldfra(i,k) = diafra(i,k) 5104 5188 ENDIF … … 5475 5559 ENDIF 5476 5560 CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, & 5477 paprs, pplay, t_seri, cldliq, picefra, cldfra, &5561 paprs, pplay, t_seri, radocond, picefra, cldfra, & 5478 5562 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & 5479 5563 flwp, fiwp, flwc, fiwc, & … … 5483 5567 ELSE 5484 5568 CALL nuage (paprs, pplay, & 5485 t_seri, cldliq, picefra, cldfra, cldtau, cldemi, &5569 t_seri, radocond, picefra, cldfra, cldtau, cldemi, & 5486 5570 cldh, cldl, cldm, cldt, cldq, & 5487 5571 ok_aie, & … … 5792 5876 ENDDO 5793 5877 5794 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0, paprs,'SW',abortphy,flag_inhib_tend,itap,0 &5878 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 & 5795 5879 #ifdef ISO 5796 5880 & ,dxt0,dxtl0,dxti0 & … … 5798 5882 & ) 5799 5883 CALL prt_enerbil('SW',itap) 5800 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0, paprs,'LW',abortphy,flag_inhib_tend,itap,0 &5884 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 & 5801 5885 #ifdef ISO 5802 5886 & ,dxt0,dxtl0,dxti0 & … … 5846 5930 ! -> condition on zrel_oro can deactivate the drag on tilted planar terrains 5847 5931 ! such as ice sheets (work by V. Wiener) 5848 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5932 ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 5849 5933 ! earn computation time but they are not physical. 5850 5934 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 … … 5877 5961 !----------------------------------------------------------------------- 5878 5962 ! ajout des tendances de la trainee de l'orographie 5879 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0, paprs,'oro', &5963 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', & 5880 5964 abortphy,flag_inhib_tend,itap,0 & 5881 5965 #ifdef ISO … … 5932 6016 5933 6017 ! ajout des tendances de la portance de l'orographie 5934 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &6018 CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, & 5935 6019 'lif', abortphy,flag_inhib_tend,itap,0 & 5936 6020 #ifdef ISO … … 5961 6045 d_t_hin(:, :)=0. 5962 6046 CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, & 5963 dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &6047 dqi0, dqbs0,paprs, 'hin', abortphy,flag_inhib_tend,itap,0 & 5964 6048 #ifdef ISO 5965 6049 & ,dxt0,dxtl0,dxti0 & … … 5983 6067 ENDDO 5984 6068 5985 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &6069 CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, & 5986 6070 paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 5987 6071 #ifdef ISO … … 5996 6080 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 5997 6081 du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress) 5998 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &6082 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, & 5999 6083 paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0 & 6000 6084 #ifdef ISO … … 6055 6139 d_xt_ch4_dtime(:,:,:) = d_xt_ch4(:,:,:)*phys_tstep 6056 6140 #endif 6057 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &6141 CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, & 6058 6142 'q_ch4', abortphy,flag_inhib_tend,itap,0 & 6059 6143 #ifdef ISO … … 6121 6205 ! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE 6122 6206 ! Mais attention, cela ne va pas dans le sens de la conservation de l'energie! 6123 IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN6207 IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN 6124 6208 itest(i)=1 6125 6209 igwd=igwd+1 … … 6381 6465 ! 6382 6466 6383 IF (type_trac =='repr') THEN6467 IF (type_trac == 'repr') THEN 6384 6468 !MM pas d'impact, car on recupere q_seri,tr_seri,t_seri via phys_local_var_mod 6385 6469 !MM dans Reprobus … … 6431 6515 presnivs, pphis, pphi, albsol1, & 6432 6516 sh_in, ch_in, rhcl, cldfra, rneb, & 6433 diafra, cldliq, itop_con, ibas_con, &6517 diafra, radocond, itop_con, ibas_con, & 6434 6518 pmflxr, pmflxs, prfl, psfl, & 6435 6519 da, phi, mp, upwd, & … … 6448 6532 6449 6533 CALL add_phys_tend & 6450 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep, paprs,&6534 (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,& 6451 6535 'rep',abortphy,flag_inhib_tend,itap,0) 6452 6536 IF (abortphy==1) Print*,'ERROR ABORT REP' … … 6525 6609 ! prlw = colonne eau liquide 6526 6610 ! prlw = colonne eau solide 6611 ! prbsw = colonne neige soufflee 6527 6612 prw(:) = 0. 6528 6613 prlw(:) = 0. 6529 6614 prsw(:) = 0. 6615 prbsw(:) = 0. 6530 6616 DO k = 1, klev 6531 6617 prw(:) = prw(:) + q_seri(:,k)*zmasse(:,k) 6532 6618 prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k) 6533 6619 prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k) 6620 prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k) 6534 6621 ENDDO 6535 6622 … … 6602 6689 ENDIF 6603 6690 !--ice_sursat: nqo=4, on ajoute rneb 6604 IF (nqo == 4) THEN6691 IF (nqo.ge.4 .and. ok_ice_sursat) THEN 6605 6692 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 6606 6693 ENDIF 6694 6695 IF (nqo.ge.4 .and. ok_bs) THEN 6696 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 6697 ENDIF 6698 6699 6607 6700 ENDDO 6608 6701 ENDDO … … 6684 6777 ql_ancien(:,:) = ql_seri(:,:) 6685 6778 qs_ancien(:,:) = qs_seri(:,:) 6779 qbs_ancien(:,:) = qbs_seri(:,:) 6686 6780 rneb_ancien(:,:) = rneb_seri(:,:) 6687 6781 #ifdef ISO … … 6693 6787 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien) 6694 6788 CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien) 6789 CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien) 6695 6790 ! !! RomP >>> 6696 6791 IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:) … … 6821 6916 CALL phys_output_write(itap, pdtphys, paprs, pphis, & 6822 6917 pplay, lmax_th, aerosol_couple, & 6823 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, &6918 ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, & 6824 6919 ok_sync, ptconv, read_climoz, clevSTD, & 6825 6920 ptconvth, d_u, d_t, qx, d_qx, zmasse, &
Note: See TracChangeset
for help on using the changeset viewer.