Changeset 2945 for LMDZ5/trunk/libf/phylmd
- Timestamp:
- Jul 12, 2017, 4:20:24 PM (7 years ago)
- Location:
- LMDZ5/trunk/libf/phylmd
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/cloudth_mod.F90
r2911 r2945 587 587 SUBROUTINE cloudth_v3(ngrid,klev,ind2, & 588 588 & ztv,po,zqta,fraca, & 589 & qcloud,ctot, zpspsk,paprs,ztla,zthl, &589 & qcloud,ctot,ctot_vol,zpspsk,paprs,ztla,zthl, & 590 590 & ratqs,zqs,t) 591 591 … … 624 624 REAL zqsatenv(ngrid,klev) 625 625 626 627 REAL sigma1(ngrid,klev) 626 REAL sigma1(ngrid,klev) 628 627 REAL sigma2(ngrid,klev) 629 628 REAL qlth(ngrid,klev) 630 629 REAL qlenv(ngrid,klev) 631 630 REAL qltot(ngrid,klev) 632 REAL cth(ngrid,klev) 631 REAL cth(ngrid,klev) 633 632 REAL cenv(ngrid,klev) 634 633 REAL ctot(ngrid,klev) 635 REAL rneb(ngrid,klev) 634 REAL cth_vol(ngrid,klev) 635 REAL cenv_vol(ngrid,klev) 636 REAL ctot_vol(ngrid,klev) 637 REAL rneb(ngrid,klev) 636 638 REAL t(ngrid,klev) 637 639 REAL qsatmmussig1,qsatmmussig2,sqrt2pi,sqrt2,sqrtpi,pi … … 652 654 CALL cloudth_vert_v3(ngrid,klev,ind2, & 653 655 & ztv,po,zqta,fraca, & 654 & qcloud,ctot, zpspsk,paprs,ztla,zthl, &656 & qcloud,ctot,ctot_vol,zpspsk,paprs,ztla,zthl, & 655 657 & ratqs,zqs,t) 656 658 RETURN … … 672 674 cenv(:,:)=0. 673 675 ctot(:,:)=0. 676 cth_vol(:,:)=0. 677 cenv_vol(:,:)=0. 678 ctot_vol(:,:)=0. 674 679 qsatmmussig1=0. 675 680 qsatmmussig2=0. … … 747 752 cenv(ind1,ind2)=0.5*(1.+1.*erf(xenv)) !4.18 p 111, l.7 p115 & 4.20 p 119 thesis Arnaud Jam 748 753 ctot(ind1,ind2)=fraca(ind1,ind2)*cth(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*cenv(ind1,ind2) 754 ctot_vol(ind1,ind2)=ctot(ind1,ind2) 749 755 750 756 qlth(ind1,ind2)=sigma2s*((exp(-1.*xth**2)/sqrt2pi)+xth*sqrt2*cth(ind1,ind2)) … … 780 786 xenv=senv/(sqrt2*sigma1s) 781 787 ctot(ind1,ind2)=0.5*(1.+1.*erf(xenv)) 788 ctot_vol(ind1,ind2)=ctot(ind1,ind2) 782 789 qltot(ind1,ind2)=sigma1s*((exp(-1.*xenv**2)/sqrt2pi)+xenv*sqrt2*cenv(ind1,ind2)) 783 790 … … 801 808 SUBROUTINE cloudth_vert_v3(ngrid,klev,ind2, & 802 809 & ztv,po,zqta,fraca, & 803 & qcloud,ctot, zpspsk,paprs,ztla,zthl, &810 & qcloud,ctot,ctot_vol,zpspsk,paprs,ztla,zthl, & 804 811 & ratqs,zqs,t) 805 812 … … 838 845 REAL zqsatenv(ngrid,klev) 839 846 840 847 848 849 841 850 REAL sigma1(ngrid,klev) 842 851 REAL sigma2(ngrid,klev) … … 844 853 REAL qlenv(ngrid,klev) 845 854 REAL qltot(ngrid,klev) 846 REAL cth(ngrid,klev) 855 REAL cth(ngrid,klev) 847 856 REAL cenv(ngrid,klev) 848 857 REAL ctot(ngrid,klev) 858 REAL cth_vol(ngrid,klev) 859 REAL cenv_vol(ngrid,klev) 860 REAL ctot_vol(ngrid,klev) 849 861 REAL rneb(ngrid,klev) 850 862 REAL t(ngrid,klev) … … 854 866 REAL sth,senv,sigma1s,sigma2s,xth,xenv,exp_xenv1,exp_xenv2,exp_xth1,exp_xth2 855 867 REAL xth1,xth2,xenv1,xenv2,deltasth, deltasenv 856 REAL IntJ,IntI1,IntI2,IntI3, coeffqlenv,coeffqlth868 REAL IntJ,IntI1,IntI2,IntI3,IntJ_CF,IntI1_CF,IntI3_CF,coeffqlenv,coeffqlth 857 869 REAL Tbef,zdelta,qsatbef,zcor 858 870 REAL qlbef … … 883 895 cenv(:,:)=0. 884 896 ctot(:,:)=0. 897 cth_vol(:,:)=0. 898 cenv_vol(:,:)=0. 899 ctot_vol(:,:)=0. 885 900 qsatmmussig1=0. 886 901 qsatmmussig2=0. … … 1032 1047 exp_xth2 = exp(-1.*xth2**2) 1033 1048 1049 !CF_surfacique 1034 1050 cth(ind1,ind2)=0.5*(1.-1.*erf(xth1)) 1035 1051 cenv(ind1,ind2)=0.5*(1.-1.*erf(xenv1)) 1036 ctot(ind1,ind2)=fraca(ind1,ind2)*cth(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*cenv(ind1,ind2) 1037 1038 1052 ctot(ind1,ind2)=fraca(ind1,ind2)*cth(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*cenv(ind1,ind2) 1053 1054 1055 !CF_volumique & eau condense 1039 1056 !environnement 1040 1057 IntJ=0.5*senv*(1-erf(xenv2))+(sigma1s/sqrt2pi)*exp_xenv2 1058 IntJ_CF=0.5*(1.-1.*erf(xenv2)) 1041 1059 if (deltasenv .lt. 1.e-10) then 1042 1060 qlenv(ind1,ind2)=IntJ 1061 cenv_vol(ind1,ind2)=IntJ_CF 1043 1062 else 1044 1063 IntI1=(((senv+deltasenv)**2+(sigma1s)**2)/(8*deltasenv))*(erf(xenv2)-erf(xenv1)) 1045 1064 IntI2=(sigma1s**2/(4*deltasenv*sqrtpi))*(xenv1*exp_xenv1-xenv2*exp_xenv2) 1046 1065 IntI3=((sqrt2*sigma1s*(senv+deltasenv))/(4*sqrtpi*deltasenv))*(exp_xenv1-exp_xenv2) 1066 IntI1_CF=((senv+deltasenv)*(erf(xenv2)-erf(xenv1)))/(4*deltasenv) 1067 IntI3_CF=(sqrt2*sigma1s*(exp_xenv1-exp_xenv2))/(4*sqrtpi*deltasenv) 1047 1068 qlenv(ind1,ind2)=IntJ+IntI1+IntI2+IntI3 1069 cenv_vol(ind1,ind2)=IntJ_CF+IntI1_CF+IntI3_CF 1048 1070 endif 1049 1050 1071 1051 1072 !thermique 1052 1073 IntJ=0.5*sth*(1-erf(xth2))+(sigma2s/sqrt2pi)*exp_xth2 1053 if (deltasth .lt. 1.e-10) then ! Seuil a choisir !!! 1074 IntJ_CF=0.5*(1.-1.*erf(xth2)) 1075 if (deltasth .lt. 1.e-10) then 1054 1076 qlth(ind1,ind2)=IntJ 1077 cth_vol(ind1,ind2)=IntJ_CF 1055 1078 else 1056 1079 IntI1=(((sth+deltasth)**2+(sigma2s)**2)/(8*deltasth))*(erf(xth2)-erf(xth1)) 1057 1080 IntI2=(sigma2s**2/(4*deltasth*sqrtpi))*(xth1*exp_xth1-xth2*exp_xth2) 1058 1081 IntI3=((sqrt2*sigma2s*(sth+deltasth))/(4*sqrtpi*deltasth))*(exp_xth1-exp_xth2) 1082 IntI1_CF=((sth+deltasth)*(erf(xth2)-erf(xth1)))/(4*deltasth) 1083 IntI3_CF=(sqrt2*sigma2s*(exp_xth1-exp_xth2))/(4*sqrtpi*deltasth) 1059 1084 qlth(ind1,ind2)=IntJ+IntI1+IntI2+IntI3 1085 cth_vol(ind1,ind2)=IntJ_CF+IntI1_CF+IntI3_CF 1060 1086 endif 1061 1087 1088 1062 1089 qltot(ind1,ind2)=fraca(ind1,ind2)*qlth(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*qlenv(ind1,ind2) 1063 1090 ctot_vol(ind1,ind2)=fraca(ind1,ind2)*cth_vol(ind1,ind2)+(1.-1.*fraca(ind1,ind2))*cenv_vol(ind1,ind2) 1064 1091 1065 1092 ENDIF ! of if (iflag_cloudth_vert==1 or 3 or 4) 1093 1066 1094 1067 1095 if (cenv(ind1,ind2).lt.1.e-10.or.cth(ind1,ind2).lt.1.e-10) then 1068 1096 ctot(ind1,ind2)=0. 1097 ctot_vol(ind1,ind2)=0. 1069 1098 qcloud(ind1)=zqsatenv(ind1,ind2) 1070 1099 … … 1100 1129 xenv=senv/(sqrt2*sigma1s) 1101 1130 ctot(ind1,ind2)=0.5*(1.+1.*erf(xenv)) 1131 ctot_vol(ind1,ind2)=ctot(ind1,ind2) 1102 1132 qltot(ind1,ind2)=sigma1s*((exp(-1.*xenv**2)/sqrt2pi)+xenv*sqrt2*cenv(ind1,ind2)) 1103 1133 -
LMDZ5/trunk/libf/phylmd/conf_phys_m.F90
r2915 r2945 169 169 INTEGER,SAVE :: iflag_t_glace_omp 170 170 INTEGER,SAVE :: iflag_cloudth_vert_omp 171 INTEGER,SAVE :: iflag_rain_incloud_vol_omp 171 172 REAL,SAVE :: rad_froid_omp, rad_chau1_omp, rad_chau2_omp 172 173 REAL,SAVE :: t_glace_min_omp, t_glace_max_omp … … 1248 1249 1249 1250 ! 1251 !Config Key = iflag_rain_incloud_vol 1252 !Config Desc = 1253 !Config Def = 0 1254 !Config Help = 1255 ! 1256 iflag_rain_incloud_vol_omp = 0 1257 CALL getin('iflag_rain_incloud_vol',iflag_rain_incloud_vol_omp) 1258 1259 ! 1250 1260 !Config Key = iflag_ice_thermo 1251 1261 !Config Desc = … … 2163 2173 iflag_t_glace = iflag_t_glace_omp 2164 2174 iflag_cloudth_vert=iflag_cloudth_vert_omp 2175 iflag_rain_incloud_vol=iflag_rain_incloud_vol_omp 2165 2176 iflag_ice_thermo = iflag_ice_thermo_omp 2166 2177 rei_min = rei_min_omp … … 2511 2522 write(lunout,*)' iflag_t_glace = ',iflag_t_glace 2512 2523 write(lunout,*)' iflag_cloudth_vert = ',iflag_cloudth_vert 2524 write(lunout,*)' iflag_rain_incloud_vol = ',iflag_rain_incloud_vol 2513 2525 write(lunout,*)' iflag_ice_thermo = ',iflag_ice_thermo 2514 2526 write(lunout,*)' rei_min = ',rei_min -
LMDZ5/trunk/libf/phylmd/fisrtilp.F90
r2923 r2945 18 18 USE ioipsl_getin_p_mod, ONLY : getin_p 19 19 USE phys_local_var_mod, ONLY: ql_seri,qs_seri 20 USE phys_local_var_mod, ONLY: rneblsvol 20 21 ! flag to include modifications to ensure energy conservation (if flag >0) 21 22 USE add_phys_tend_mod, only : fl_cor_ebil … … 132 133 INTEGER ncoreczq 133 134 REAL ctot(klon,klev) 135 REAL ctot_vol(klon,klev) 134 136 REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5 135 137 REAL zdqsdT_raw(klon) … … 217 219 ! ice_thermo = iflag_ice_thermo .GE. 1 218 220 219 itap=itap+1220 znebprecip(:)=0.221 222 221 itap=itap+1 222 znebprecip(:)=0. 223 224 ice_thermo = (iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3) 223 225 zdelq=0.0 226 ctot_vol(1:klon,1:klev)=0.0 227 rneblsvol(1:klon,1:klev)=0.0 224 228 225 229 if (prt_level>9)write(lunout,*)'NUAGES4 A. JAM' … … 727 731 call cloudth_v3(klon,klev,k,ztv, & 728 732 zq,zqta,fraca, & 729 qcloud,ctot, zpspsk,paprs,ztla,zthl, &733 qcloud,ctot,ctot_vol,zpspsk,paprs,ztla,zthl, & 730 734 ratqs,zqs,t) 731 735 endif 732 736 do i=1,klon 733 737 rneb(i,k)=ctot(i,k) 738 rneblsvol(i,k)=ctot_vol(i,k) 734 739 zqn(i)=qcloud(i) 735 740 enddo … … 1148 1153 *fallvs(zrhol(i)) * zfice(i) 1149 1154 endif 1150 zchau = zct *dtime/REAL(ninter) * zoliq(i) & 1151 *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl )**2)) *(1.-zfice(i)) 1155 1156 ! si l'heterogeneite verticale est active, on utilise 1157 ! la fraction volumique "vraie" plutot que la fraction 1158 ! surfacique modifiee, qui est plus grande et reduit 1159 ! sinon l'eau in-cloud de facon artificielle 1160 if ((iflag_cloudth_vert>=3).AND.(iflag_rain_incloud_vol==1)) then 1161 zchau = zct *dtime/REAL(ninter) * zoliq(i) & 1162 *(1.0-EXP(-(zoliq(i)/ctot_vol(i,k)/zcl )**2)) *(1.-zfice(i)) 1163 else 1164 zchau = zct *dtime/REAL(ninter) * zoliq(i) & 1165 *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl )**2)) *(1.-zfice(i)) 1166 endif 1152 1167 !AJ< 1153 1168 IF (.NOT. ice_thermo) THEN -
LMDZ5/trunk/libf/phylmd/nuage.h
r2606 r2945 10 10 11 11 INTEGER iflag_t_glace, iflag_cloudth_vert, iflag_cld_cv 12 INTEGER iflag_rain_incloud_vol 12 13 13 14 common /nuagecom/ rad_froid,rad_chau1, rad_chau2,t_glace_max, & … … 15 16 & tau_cld_cv,coefw_cld_cv, & 16 17 & tmax_fonte_cv, & 17 & iflag_t_glace,iflag_cloudth_vert,iflag_cld_cv 18 & iflag_t_glace,iflag_cloudth_vert,iflag_cld_cv, & 19 & iflag_rain_incloud_vol 18 20 !$OMP THREADPRIVATE(/nuagecom/) -
LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90
r2898 r2945 417 417 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: beta_prec 418 418 !$OMP THREADPRIVATE(beta_prec) 419 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn 420 !$OMP THREADPRIVATE(rneb,rnebjn )419 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn,rneblsvol 420 !$OMP THREADPRIVATE(rneb,rnebjn,rneblsvol) 421 421 422 422 ! variables de sorties MM … … 732 732 ALLOCATE(wdtrainA(klon,klev),wdtrainM(klon,klev)) 733 733 ALLOCATE(beta_prec(klon,klev)) 734 ALLOCATE(rneb(klon,klev),rnebjn(klon,klev) )734 ALLOCATE(rneb(klon,klev),rnebjn(klon,klev),rneblsvol(klon,klev)) 735 735 736 736 -
LMDZ5/trunk/libf/phylmd/phys_output_ctrlout_mod.F90
r2876 r2945 1328 1328 TYPE(ctrl_out), SAVE :: o_rnebls = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1329 1329 'rnebls', 'LS Cloud fraction', '-', (/ ('', i=1, 10) /)) 1330 TYPE(ctrl_out), SAVE :: o_rneblsvol = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1331 'rneblsvol', 'LS Cloud fraction by volume', '-', (/ ('', i=1, 10) /)) 1330 1332 TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), & 1331 1333 'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /)) -
LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90
r2854 r2945 124 124 o_vitu, o_vitv, o_vitw, o_pres, o_paprs, & 125 125 o_zfull, o_zhalf, o_rneb, o_rnebjn, o_rnebcon, & 126 o_rnebls, o_r hum, o_ozone, o_ozone_light, &126 o_rnebls, o_rneblsvol, o_rhum, o_ozone, o_ozone_light, & 127 127 o_duphy, o_dtphy, o_dqphy, o_dqphy2d, o_dqlphy, o_dqlphy2d, & 128 128 o_dqsphy, o_dqsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, & … … 269 269 ql_seri, qs_seri, tr_seri, & 270 270 zphi, u_seri, v_seri, omega, cldfra, & 271 rneb, rnebjn, zx_rh, d_t_dyn, &271 rneb, rnebjn, rneblsvol, zx_rh, d_t_dyn, & 272 272 d_q_dyn, d_ql_dyn, d_qs_dyn, & 273 273 d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, & … … 1344 1344 CALL histwrite_phy(o_rnebcon, rnebcon) 1345 1345 CALL histwrite_phy(o_rnebls, rneb) 1346 CALL histwrite_phy(o_rneblsvol, rneblsvol) 1346 1347 IF (vars_defined) THEN 1347 1348 DO k=1, klev
Note: See TracChangeset
for help on using the changeset viewer.