Changeset 4059
- Timestamp:
- Jan 21, 2022, 3:50:54 PM (3 years ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 1 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/DefLists/field_def_lmdz.xml
r3874 r4059 758 758 <field id="cool_volc" long_name="LW cooling rate from volcano" unit="K/s" /> 759 759 <field id="pvap" long_name="pvap intermediary variable" unit="-">pres*ovap*461.5 / (287.04*(1.+ (10.9491/18.0153)*ovap)) </field> 760 <field id="oclr" long_name="Clear sky total water" unit="kg/kg" /> 761 <field id="ocld" long_name="Cloudy sky total water" unit="kg/kg" /> 762 <field id="oss" long_name="ISSR total water" unit="kg/kg" /> 763 <field id="ovc" long_name="In-cloud vapor" unit="kg/kg" /> 764 <field id="rnebclr" long_name="Clear sky fraction" unit="-" /> 765 <field id="rnebss" long_name="ISSR fraction" unit="-" /> 766 <field id="rnebseri" long_name="Cloud fraction" unit="-" /> 767 <field id="gammass" long_name="Supersaturation ratio" unit="-" /> 768 <field id="N1ss" long_name="N1ss" unit="-" /> 769 <field id="N2ss" long_name="N2ss" unit="-" /> 770 <field id="drnebsub" long_name="Cloud fraction change because of sublimation" unit="s-1" /> 771 <field id="drnebcon" long_name="Cloud fraction change because of condensation" unit="s-1" /> 772 <field id="drnebtur" long_name="Cloud fraction change because of turbulence" unit="s-1" /> 773 <field id="drnebavi" long_name="Cloud fraction change because of aviation" unit="s-1" /> 774 <field id="qsatl" long_name="Saturation with respect to liquid water" unit="-" /> 775 <field id="qsats" long_name="Saturation with respect to liquid ice" unit="-" /> 776 <field id="flightm" long_name="Aviation meters flown" unit="m/s" /> 777 <field id="flighth2o" long_name="Aviation H2O emitted" unit="kg H2O/s" /> 778 <field id="fcontrP" long_name="Gridbox fraction with potential persistent contrails" unit="-" /> 779 <field id="fcontrN" long_name="Gridbox fraction with potential non-persistent contrails" unit="-" /> 780 <field id="qcontr" long_name="Contrail qcontr" unit="Pa" /> 781 <field id="qcontr2" long_name="Contrail qcontr2" unit="kg/kg" /> 782 <field id="Tcontr" long_name="Contrail Tcontr" unit="K" /> 760 783 </field_group> 761 784 -
LMDZ6/trunk/DefLists/file_def_histday_lmdz.xml
r3516 r4059 638 638 <field field_ref="l_mixmin_sic" level="10" /> 639 639 <field field_ref="ozone_daylight" level="10" /> 640 <field field_ref="oclr" level="10" /> 641 <field field_ref="ocld" level="10" /> 642 <field field_ref="oss" level="10" /> 643 <field field_ref="ovc" level="10" /> 644 <field field_ref="rnebclr" level="10" /> 645 <field field_ref="rnebss" level="10" /> 646 <field field_ref="rnebseri" level="10" /> 647 <field field_ref="gammass" level="10" /> 648 <field field_ref="N1ss" level="10" /> 649 <field field_ref="N2ss" level="10" /> 650 <field field_ref="drnebsub" level="10" /> 651 <field field_ref="drnebcon" level="10" /> 652 <field field_ref="drnebtur" level="10" /> 653 <field field_ref="drnebavi" level="10" /> 654 <field field_ref="qsatl" level="10" /> 655 <field field_ref="qsats" level="10" /> 656 <field field_ref="flightm" level="10" /> 657 <field field_ref="flighth2o" level="10" /> 658 <field field_ref="fcontrP" level="10" /> 659 <field field_ref="fcontrN" level="10" /> 660 <field field_ref="qcontr" level="10" /> 661 <field field_ref="qcontr2" level="10" /> 662 <field field_ref="Tcontr" level="10" /> 640 663 </field_group> 641 664 -
LMDZ6/trunk/DefLists/file_def_histhf_lmdz.xml
r3622 r4059 485 485 <field field_ref="treedrg_oce" level="10" /> 486 486 <field field_ref="treedrg_sic" level="10" /> 487 488 487 <field field_ref="cldtau" level="10" /> 489 488 <field field_ref="cldemi" level="10" /> … … 500 499 <field field_ref="lwcon" level="10" /> 501 500 <field field_ref="iwcon" level="10" /> 502 <field field_ref="temp" level=" 10" />501 <field field_ref="temp" level="4" /> 503 502 <field field_ref="theta" level="10" /> 504 503 <field field_ref="ovap" level="10" /> … … 654 653 <field field_ref="rsdcs4co2" level="10" /> 655 654 <field field_ref="rldcs4co2" level="10" /> 655 <field field_ref="oclr" level="10" /> 656 <field field_ref="ocld" level="10" /> 657 <field field_ref="oss" level="10" /> 658 <field field_ref="ovc" level="10" /> 659 <field field_ref="rnebclr" level="10" /> 660 <field field_ref="rnebss" level="10" operation="instant" /> 661 <field field_ref="rnebseri" level="10" /> 662 <field field_ref="gammass" level="10" /> 663 <field field_ref="N1ss" level="10" /> 664 <field field_ref="N2ss" level="10" /> 665 <field field_ref="drnebsub" level="10" /> 666 <field field_ref="drnebcon" level="10" /> 667 <field field_ref="drnebtur" level="10" /> 668 <field field_ref="drnebavi" level="10" /> 669 <field field_ref="qsatl" level="10" /> 670 <field field_ref="qsats" level="10" /> 671 <field field_ref="fcontrP" level="10" /> 672 <field field_ref="fcontrN" level="10" /> 673 <field field_ref="qcontr" level="10" operation="instant" /> 674 <field field_ref="qcontr2" level="10" operation="instant" /> 675 <field field_ref="Tcontr" level="10" operation="instant" /> 656 676 </field_group> 657 677 -
LMDZ6/trunk/libf/phylmd/clesphys.h
r3999 r4059 85 85 LOGICAL :: ok_cosp,ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP 86 86 LOGICAL :: ok_airs 87 INTEGER :: ip_ebil_phy, iflag_rrtm, iflag_ice_thermo, NSW, iflag_albedo87 INTEGER :: ip_ebil_phy, iflag_rrtm, iflag_ice_thermo, iflag_ice_sursat, NSW, iflag_albedo 88 88 LOGICAL :: ok_chlorophyll 89 89 LOGICAL :: ok_strato … … 123 123 ! THEN INTEGER AND LOGICALS 124 124 & , top_height & 125 & , iflag_cycle_diurne, soil_model, new_oliq 125 & , iflag_cycle_diurne, soil_model, new_oliq & 126 126 & , ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad & 127 127 & , iflag_con, nbapp_cv, nbapp_wk & … … 139 139 & , ok_lic_melt, ok_lic_cond, aer_type & 140 140 & , iflag_rrtm, ok_strato,ok_hines, ok_qch4 & 141 & , iflag_ice_thermo, ok_gwd_rando, NSW, iflag_albedo & 141 & , iflag_ice_thermo, iflag_ice_sursat & 142 & , ok_gwd_rando, NSW, iflag_albedo & 142 143 & , ok_chlorophyll,ok_conserv_q, adjust_tropopause & 143 144 & , ok_daily_climoz, ok_all_xml, ok_lwoff & -
LMDZ6/trunk/libf/phylmd/conf_phys_m.F90
r3999 r4059 179 179 INTEGER,SAVE :: iflag_pdf_omp 180 180 INTEGER,SAVE :: iflag_ice_thermo_omp 181 INTEGER,SAVE :: iflag_ice_sursat_omp 181 182 INTEGER,SAVE :: iflag_t_glace_omp 182 183 INTEGER,SAVE :: iflag_cloudth_vert_omp … … 1493 1494 CALL getin('iflag_vice',iflag_vice_omp) 1494 1495 1495 1496 1497 1496 ! 1498 1497 !Config Key = iflag_ice_thermo … … 1504 1503 CALL getin('iflag_ice_thermo',iflag_ice_thermo_omp) 1505 1504 1505 ! 1506 !Config Key = iflag_ice_sursat 1507 !Config Desc = 1508 !Config Def = 0 1509 !Config Help = 1510 ! 1511 iflag_ice_sursat_omp = 0 1512 CALL getin('iflag_ice_sursat',iflag_ice_sursat_omp) 1513 1514 ! 1506 1515 !Config Key = rei_min 1507 1516 !Config Desc = … … 2491 2500 iflag_vice=iflag_vice_omp 2492 2501 iflag_ice_thermo = iflag_ice_thermo_omp 2502 iflag_ice_sursat = iflag_ice_sursat_omp 2493 2503 rei_min = rei_min_omp 2494 2504 rei_max = rei_max_omp … … 2918 2928 WRITE(lunout,*) ' iflag_vice = ',iflag_vice 2919 2929 WRITE(lunout,*) ' iflag_ice_thermo = ',iflag_ice_thermo 2930 WRITE(lunout,*) ' iflag_ice_sursat = ',iflag_ice_sursat 2920 2931 WRITE(lunout,*) ' rei_min = ',rei_min 2921 2932 WRITE(lunout,*) ' rei_max = ',rei_max -
LMDZ6/trunk/libf/phylmd/lscp_mod.F90
r3999 r4059 6 6 7 7 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 SUBROUTINE LSCP(dtime,paprs,pplay,t,q,ptconv,ratqs, & 9 d_t, d_q, d_ql, d_qi, rneb, radliq, radicefrac, & 10 rain, snow, & 8 SUBROUTINE LSCP(dtime,missing_val, & 9 paprs,pplay,t,q,ptconv,ratqs, & 10 d_t, d_q, d_ql, d_qi, rneb, rneb_seri, & 11 radliq, radicefrac, rain, snow, & 11 12 pfrac_impa, pfrac_nucl, pfrac_1nucl, & 12 13 frac_impa, frac_nucl, beta, & 13 14 prfl, psfl, rhcl, zqta, fraca, & 14 15 ztv, zpspsk, ztla, zthl, iflag_cld_th, & 15 iflag_ice_thermo )16 iflag_ice_thermo, iflag_ice_sursat) 16 17 17 18 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ … … 93 94 USE phys_local_var_mod, ONLY: rneblsvol 94 95 USE lscp_tools_mod, ONLY : CALC_QSAT_ECMWF, ICEFRAC_LSCP, CALC_GAMMASAT, FALLICE_VELOCITY 95 96 USE ice_sursat_mod 97 !--ice supersaturation 98 USE phys_local_var_mod, ONLY: zqsats, zqsatl 99 USE phys_local_var_mod, ONLY: qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss 100 USE phys_local_var_mod, ONLY: Tcontr, qcontr, qcontr2, fcontrN, fcontrP 96 101 97 102 IMPLICIT NONE 98 99 100 103 101 104 !=============================================================================== … … 114 117 115 118 REAL, INTENT(IN) :: dtime ! time step [s] 119 REAL, INTENT(IN) :: missing_val ! missing value for output 120 116 121 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs ! inter-layer pressure [Pa] 117 122 REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay ! mid-layer pressure [Pa] … … 121 126 INTEGER, INTENT(IN) :: iflag_ice_thermo! flag to activate the ice thermodynamics 122 127 ! CR: if iflag_ice_thermo=2, only convection is active 128 INTEGER, INTENT(IN) :: iflag_ice_sursat ! 0 = sursat desativee, 1 = sursat activee 129 123 130 LOGICAL, DIMENSION(klon,klev), INTENT(IN) :: ptconv ! grid points where deep convection scheme is active 124 131 … … 138 145 REAL, DIMENSION(klon,klev), INTENT(INOUT):: ratqs ! function of pressure that sets the large-scale 139 146 ! cloud PDF (sigma=ratqs*qt) 147 148 ! Input sursaturation en glace 149 REAL, DIMENSION(klon,klev), INTENT(INOUT):: rneb_seri ! fraction nuageuse en memoire 140 150 141 151 ! OUTPUT variables … … 388 398 d_tot_zneb(:) = 0.0 389 399 400 !--ice sursaturation 401 gamma_ss(:,:) = 1. 402 qss(:,:) = 0. 403 rnebss(:,:) = 0. 404 Tcontr(:,:) = missing_val 405 qcontr(:,:) = missing_val 406 qcontr2(:,:) = missing_val 407 fcontrN(:,:) = 0.0 408 fcontrP(:,:) = 0.0 390 409 391 410 !=============================================================================== … … 645 664 qtot=zq(i)+zmqc(i) 646 665 CALL CALC_QSAT_ECMWF(zt(i),qtot,pplay(i,k),RTT,0,.false.,zqs(i),zdqs(i)) 647 zdqsdT_raw(i) = zdqs(i)* & 648 & RCPD*(1.0+RVTMP2*zq(i)) / (RLVTT*(1.-zdelta) + RLSTT*zdelta) 666 zdqsdT_raw(i) = zdqs(i)*RCPD*(1.0+RVTMP2*zq(i)) / (RLVTT*(1.-zdelta) + RLSTT*zdelta) 649 667 650 668 IF (zq(i) .LT. 1.e-15) THEN … … 677 695 qincloud_mpc(:)=0. 678 696 679 680 681 697 IF (iflag_cld_th.GE.5) THEN 682 698 … … 778 794 ! new temperature: 779 795 Tbef(i)=Tbef(i)+DT(i) 780 781 796 782 797 ! Rneb, qzn and zcond for lognormal PDFs … … 800 815 zpdf_e2(i)=1.-erf(zpdf_e2(i)) 801 816 802 IF (zpdf_e1(i).LT.1.e-10) THEN 803 rneb(i,k)=0. 804 zqn(i)=gammasat(i)*zqs(i) 817 !--ice sursaturation by Audran 818 IF ((iflag_ice_sursat.EQ.0).OR.(Tbef(i).GT.t_glace_min)) THEN 819 820 IF (zpdf_e1(i).LT.1.e-10) THEN 821 rneb(i,k)=0. 822 zqn(i)=gammasat(i)*zqs(i) 823 ELSE 824 rneb(i,k)=0.5*zpdf_e1(i) 825 zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i) 826 ENDIF 827 828 rnebss(i,k)=0.0 !--ajout OB (necessaire car boucle de convergence sur le temps) 829 fcontrN(i,k)=0.0 !--idem 830 fcontrP(i,k)=0.0 !--idem 831 qss(i,k)=0.0 !--idem 832 805 833 ELSE 806 rneb(i,k)=0.5*zpdf_e1(i) 807 zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i) 808 ENDIF 834 !------------------------------------ 835 ! SURSATURATION EN GLACE 836 !------------------------------------ 837 838 CALL ice_sursat(pplay(i,k), paprs(i,k)-paprs(i,k+1), dtime, i, k, t(i,k), zq(i), & 839 gamma_ss(i,k), zqs(i), Tbef(i), rneb_seri(i,k), ratqs(i,k), & 840 rneb(i,k), zqn(i), rnebss(i,k), qss(i,k), & 841 Tcontr(i,k), qcontr(i,k), qcontr2(i,k), fcontrN(i,k), fcontrP(i,k) ) 842 843 ENDIF ! ((flag_ice_sursat.eq.0).or.(Tbef(i).gt.t_glace_min)) 809 844 810 845 ! If vertical heterogeneity, change fraction by volume as well … … 823 858 ! EV: calculation of icefrac in one sole function 824 859 CALL icefrac_lscp(klon, zt(:),pplay(:,k)/paprs(:,1),zfice(:),dzfice(:)) 825 826 860 827 861 IF (zfice(i).LT.1) THEN … … 985 1019 ! remaining water in the cloud during the time step that is seen by the radiation 986 1020 ! ------------------------------------------------------------------------------- 987 988 1021 989 1022 DO n = 1, ninter … … 1128 1161 ENDDO 1129 1162 1130 1131 1132 1133 1163 ! LTP: limit of surface cloud fraction covered by precipitation when the local intensity of the flux is below rain_int_min 1134 1164 ! if iflag_evap_pre=4 … … 1137 1167 DO i=1, klon 1138 1168 1139 1140 1169 IF ((zrflclr(i) + ziflclr(i)) .GT. 0. ) THEN 1141 1170 znebprecipclr(i) = min(znebprecipclr(i),max(zrflclr(i)/ & … … 1144 1173 znebprecipclr(i)=0. 1145 1174 ENDIF 1146 1147 1175 1148 1176 IF ((zrflcld(i) + ziflcld(i)) .GT. 0.) THEN … … 1152 1180 znebprecipcld(i)=0. 1153 1181 ENDIF 1154 1155 1182 1156 1183 ENDDO … … 1190 1217 ENDIF 1191 1218 1192 zprec_cond(i) = MAX(zcond(i)-zoliq(i),0.0) & 1193 * (paprs(i,k)-paprs(i,k+1))/RG 1194 1219 zprec_cond(i) = MAX(zcond(i)-zoliq(i),0.0)*(paprs(i,k)-paprs(i,k+1))/RG 1195 1220 1196 1221 IF (rneb(i,k).GT.0.0.AND.zprec_cond(i).GT.0.) THEN 1197 1198 1222 1199 1223 IF (t(i,k) .GE. t_glace_min) THEN … … 1202 1226 zalpha_tr = a_tr_sca(4) 1203 1227 ENDIF 1204 1205 1228 1206 1229 zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i)) … … 1241 1264 ENDDO 1242 1265 1243 1244 END DO 1266 !--save some variables for ice sursaturation 1267 ! 1268 DO i = 1, klon 1269 ! pour la mémoire 1270 rneb_seri(i,k) = rneb(i,k) 1271 1272 ! pour les diagnostics 1273 rnebclr(i,k) = 1.0 - rneb(i,k) - rnebss(i,k) 1274 1275 qvc(i,k) = zqs(i) * rneb(i,k) 1276 qclr(i,k) = MAX(1.e-10,zq(i) - qvc(i,k) - qss(i,k)) !--ajout OB a cause de cas pathologiques avec lognormale=F 1277 qcld(i,k) = qvc(i,k) + zcond(i) 1278 1279 !q_sat 1280 CALL CALC_QSAT_ECMWF(Tbef(i),0.,pplay(i,k),RTT,1,.false.,zqsatl(i,k),zdqs(i)) 1281 CALL CALC_QSAT_ECMWF(Tbef(i),0.,pplay(i,k),RTT,2,.false.,zqsats(i,k),zdqs(i)) 1282 1283 ENDDO 1284 1285 ENDDO 1245 1286 1246 1287 !====================================================================== 1247 1288 ! END OF VERTICAL LOOP 1248 1289 !====================================================================== 1249 1250 1290 1251 1291 ! Rain or snow at the surface (depending on the first layer temperature) … … 1254 1294 rain(i) = zrfl(i) 1255 1295 ENDDO 1256 1257 1258 1296 1259 1297 IF (ncoreczq>0) THEN … … 1261 1299 ENDIF 1262 1300 1263 1264 1265 1266 1301 END SUBROUTINE LSCP 1267 1302 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -
LMDZ6/trunk/libf/phylmd/lscp_tools_mod.F90
r3999 r4059 123 123 USE print_control_mod, ONLY: lunout, prt_level 124 124 125 IMPLICIT none125 IMPLICIT NONE 126 126 127 127 … … 202 202 ENDDO 203 203 204 205 204 RETURN 206 205 … … 215 214 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 216 215 217 218 IMPLICIT none 216 IMPLICIT NONE 219 217 220 218 include "YOMCST.h" … … 236 234 REAL, INTENT(OUT) :: dqs ! derivation of saturation specific humidity wrt T 237 235 238 239 236 REAL delta, cor, cvm5 240 241 237 242 238 IF (phase .EQ. 1) THEN … … 261 257 dqs= FOEDE(temp,delta,cvm5,qs,cor) 262 258 263 264 265 259 END SUBROUTINE CALC_QSAT_ECMWF 266 260 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ … … 278 272 279 273 280 IMPLICIT none274 IMPLICIT NONE 281 275 282 276 include "YOMCST.h" … … 341 335 ENDIF 342 336 343 344 345 346 337 END SUBROUTINE CALC_GAMMASAT 347 338 -
LMDZ6/trunk/libf/phylmd/phyetat0.F90
r4056 r4059 13 13 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & 14 14 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, & 15 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, r adpas, radsol, rain_fall, ratqs, &15 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, & 16 16 rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, & 17 17 solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, & … … 361 361 ancien_ok=ancien_ok.AND.phyetat0_get(klev,ql_ancien,"QLANCIEN","QLANCIEN",0.) 362 362 ancien_ok=ancien_ok.AND.phyetat0_get(klev,qs_ancien,"QSANCIEN","QSANCIEN",0.) 363 ancien_ok=ancien_ok.AND.phyetat0_get(klev,rneb_ancien,"RNEBANCIEN","RNEBANCIEN",0.) 363 364 ancien_ok=ancien_ok.AND.phyetat0_get(klev,u_ancien,"UANCIEN","UANCIEN",0.) 364 365 ancien_ok=ancien_ok.AND.phyetat0_get(klev,v_ancien,"VANCIEN","VANCIEN",0.) … … 373 374 (maxval(ql_ancien).EQ.minval(ql_ancien)) .OR. & 374 375 (maxval(qs_ancien).EQ.minval(qs_ancien)) .OR. & 376 (maxval(rneb_ancien).EQ.minval(rneb_ancien)) .OR. & 375 377 (maxval(prw_ancien).EQ.minval(prw_ancien)) .OR. & 376 378 (maxval(prlw_ancien).EQ.minval(prlw_ancien)) .OR. & -
LMDZ6/trunk/libf/phylmd/phyredem.F90
r4056 r4059 19 19 zval, rugoro, t_ancien, q_ancien, & 20 20 prw_ancien, prlw_ancien, prsw_ancien, & 21 ql_ancien, qs_ancien, u_ancien,&21 ql_ancien, qs_ancien, rneb_ancien, u_ancien, & 22 22 v_ancien, clwcon, rnebcon, ratqs, pbl_tke, & 23 23 wake_delta_pbl_tke, zmax0, f0, sig1, w01, & … … 239 239 240 240 CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien) 241 242 CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien) 241 243 242 244 CALL put_field(pass,"PRWANCIEN", "PRWANCIEN", prw_ancien) -
LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
r4009 r4059 16 16 REAL, SAVE, ALLOCATABLE :: u_seri(:,:), v_seri(:,:) 17 17 !$OMP THREADPRIVATE(u_seri, v_seri) 18 REAL, SAVE, ALLOCATABLE :: rneb_seri(:,:) 19 !$OMP THREADPRIVATE(rneb_seri) 20 REAL, SAVE, ALLOCATABLE :: d_rneb_dyn(:,:) 21 !$OMP THREADPRIVATE(d_rneb_dyn) 18 22 REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),tke_dissip(:,:,:),wprime(:,:,:) 19 23 !$OMP THREADPRIVATE(l_mixmin, l_mix, tke_dissip,wprime) … … 473 477 !$OMP THREADPRIVATE(zn2mout) 474 478 479 REAL, SAVE, ALLOCATABLE :: qclr(:,:) 480 !$OMP THREADPRIVATE(qclr) 481 REAL, SAVE, ALLOCATABLE :: qcld(:,:) 482 !$OMP THREADPRIVATE(qcld) 483 REAL, SAVE, ALLOCATABLE :: qss(:,:) 484 !$OMP THREADPRIVATE(qss) 485 REAL, SAVE, ALLOCATABLE :: qvc(:,:) 486 !$OMP THREADPRIVATE(qvc) 487 REAL, SAVE, ALLOCATABLE :: rnebclr(:,:) 488 !$OMP THREADPRIVATE(rnebclr) 489 REAL, SAVE, ALLOCATABLE :: rnebss(:,:) 490 !$OMP THREADPRIVATE(rnebss) 491 REAL, SAVE, ALLOCATABLE :: gamma_ss(:,:) 492 !$OMP THREADPRIVATE(gamma_ss) 493 REAL, SAVE, ALLOCATABLE :: N1_ss(:,:) 494 !$OMP THREADPRIVATE(N1_ss) 495 REAL, SAVE, ALLOCATABLE :: N2_ss(:,:) 496 !$OMP THREADPRIVATE(N2_ss) 497 REAL, SAVE, ALLOCATABLE :: drneb_sub(:,:) 498 !$OMP THREADPRIVATE(drneb_sub) 499 REAL, SAVE, ALLOCATABLE :: drneb_con(:,:) 500 !$OMP THREADPRIVATE(drneb_con) 501 REAL, SAVE, ALLOCATABLE :: drneb_tur(:,:) 502 !$OMP THREADPRIVATE(drneb_tur) 503 REAL, SAVE, ALLOCATABLE :: drneb_avi(:,:) 504 !$OMP THREADPRIVATE(drneb_avi) 505 REAL, SAVE, ALLOCATABLE :: zqsatl(:,:) 506 !$OMP THREADPRIVATE(zqsatl) 507 REAL, SAVE, ALLOCATABLE :: zqsats(:,:) 508 !$OMP THREADPRIVATE(zqsats) 509 REAL, SAVE, ALLOCATABLE :: Tcontr(:,:) 510 !$OMP THREADPRIVATE(Tcontr) 511 REAL, SAVE, ALLOCATABLE :: qcontr(:,:) 512 !$OMP THREADPRIVATE(qcontr) 513 REAL, SAVE, ALLOCATABLE :: qcontr2(:,:) 514 !$OMP THREADPRIVATE(qcontr2) 515 REAL, SAVE, ALLOCATABLE :: fcontrN(:,:) 516 !$OMP THREADPRIVATE(fcontrN) 517 REAL, SAVE, ALLOCATABLE :: fcontrP(:,:) 518 !$OMP THREADPRIVATE(fcontrP) 519 475 520 #ifdef CPP_StratAer 476 521 ! … … 828 873 829 874 ALLOCATE(zn2mout(klon,6)) 875 876 ! Supersaturation 877 ALLOCATE(rneb_seri(klon,klev)) 878 ALLOCATE(d_rneb_dyn(klon,klev)) 879 ALLOCATE(qclr(klon,klev), qcld(klon,klev), qss(klon,klev), qvc(klon,klev)) 880 ALLOCATE(rnebclr(klon,klev), rnebss(klon,klev), gamma_ss(klon,klev)) 881 ALLOCATE(N1_ss(klon,klev), N2_ss(klon,klev)) 882 ALLOCATE(drneb_sub(klon,klev), drneb_con(klon,klev), drneb_tur(klon,klev), drneb_avi(klon,klev)) 883 ALLOCATE(zqsatl(klon,klev), zqsats(klon,klev)) 884 ALLOCATE(Tcontr(klon,klev), qcontr(klon,klev), qcontr2(klon,klev), fcontrN(klon,klev), fcontrP(klon,klev)) 830 885 831 886 #ifdef CPP_StratAer … … 1117 1172 DEALLOCATE(zn2mout) 1118 1173 1174 ! Supersaturation 1175 DEALLOCATE(rneb_seri) 1176 DEALLOCATE(d_rneb_dyn) 1177 DEALLOCATE(qclr, qcld, qss, qvc) 1178 DEALLOCATE(rnebclr, rnebss, gamma_ss) 1179 DEALLOCATE(N1_ss, N2_ss) 1180 DEALLOCATE(drneb_sub, drneb_con, drneb_tur, drneb_avi) 1181 DEALLOCATE(zqsatl, zqsats) 1182 DEALLOCATE(Tcontr, qcontr, qcontr2, fcontrN, fcontrP) 1183 1119 1184 #ifdef CPP_StratAer 1120 1185 ! variables for strat. aerosol CK -
LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90
r3888 r4059 1917 1917 'albslw3', 'Surface albedo LW3', '-', (/ ('', i=1, 10) /)) 1918 1918 1919 !--aviation & supersaturation 1920 TYPE(ctrl_out), SAVE :: o_oclr = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1921 'oclr', 'Clear sky total water', 'kg/kg', (/ ('', i=1, 10) /)) 1922 TYPE(ctrl_out), SAVE :: o_ocld = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1923 'ocld', 'Cloudy sky total water', 'kg/kg', (/ ('', i=1, 10) /)) 1924 TYPE(ctrl_out), SAVE :: o_oss = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1925 'oss', 'ISSR total water', 'kg/kg', (/ ('', i=1, 10) /)) 1926 TYPE(ctrl_out), SAVE :: o_ovc = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1927 'ovc', 'In-cloup vapor', 'kg/kg', (/ ('', i=1, 10) /)) 1928 TYPE(ctrl_out), SAVE :: o_rnebclr = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1929 'rnebclr', 'Clear sky fraction', '-', (/ ('', i=1, 10) /)) 1930 TYPE(ctrl_out), SAVE :: o_rnebss = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1931 'rnebss', 'ISSR fraction', '-', (/ ('', i=1, 10) /)) 1932 TYPE(ctrl_out), SAVE :: o_rnebseri = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1933 'rnebseri', 'Cloud fraction', '-', (/ ('', i=1, 10) /)) 1934 TYPE(ctrl_out), SAVE :: o_gammass = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1935 'gammass', 'Gamma supersaturation', '', (/ ('', i=1, 10) /)) 1936 TYPE(ctrl_out), SAVE :: o_N1_ss = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1937 'N1ss', 'N1', '', (/ ('', i=1, 10) /)) 1938 TYPE(ctrl_out), SAVE :: o_N2_ss = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1939 'N2ss', 'N2', '', (/ ('', i=1, 10) /)) 1940 TYPE(ctrl_out), SAVE :: o_drnebsub = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1941 'drnebsub', 'Cloud fraction change because of sublimation', 's-1', (/ ('', i=1, 10) /)) 1942 TYPE(ctrl_out), SAVE :: o_drnebcon = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1943 'drnebcon', 'Cloud fraction change because of condensation', 's-1', (/ ('', i=1, 10) /)) 1944 TYPE(ctrl_out), SAVE :: o_drnebtur = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1945 'drnebtur', 'Cloud fraction change because of turbulence', 's-1', (/ ('', i=1, 10) /)) 1946 TYPE(ctrl_out), SAVE :: o_drnebavi = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1947 'drnebavi', 'Cloud fraction change because of aviation', 's-1', (/ ('', i=1, 10) /)) 1948 TYPE(ctrl_out), SAVE :: o_qsatl = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1949 'qsatl', 'Saturation with respect to liquid water', '', (/ ('', i=1, 10) /)) 1950 TYPE(ctrl_out), SAVE :: o_qsats = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1951 'qsats', 'Saturation with respect to solid water', '', (/ ('', i=1, 10) /)) 1952 TYPE(ctrl_out), SAVE :: o_flight_m = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1953 'flightm', 'Flown meters', 'm/s/mesh', (/ ('', i=1, 10) /)) 1954 TYPE(ctrl_out), SAVE :: o_flight_h2o = ctrl_out((/ 1, 1, 1, 1, 10, 10, 11, 11, 11, 11/), & 1955 'flighth2o', 'H2O flight emission', 'kg H2O/s/mesh', (/ ('', i=1, 10) /)) 1956 TYPE(ctrl_out), SAVE :: o_Tcontr = ctrl_out((/ 1, 1, 1, 1, 11, 11, 11, 11, 11, 11/),& 1957 'Tcontr', 'Temperature threshold for contrail formation', 'K', (/ ('',i=1,10) /)) 1958 TYPE(ctrl_out), SAVE :: o_qcontr = ctrl_out((/ 1, 1, 1, 1, 11, 11, 11, 11, 11, 11/),& 1959 'qcontr', 'Specific humidity threshold for contrail formation','Pa', (/ ('', i=1, 10) /)) 1960 TYPE(ctrl_out), SAVE :: o_qcontr2 = ctrl_out((/ 1, 1, 1, 1, 11, 11, 11, 11, 11, 11/),& 1961 'qcontr2', 'Specific humidity threshold for contrail formation','kg/kg', (/ ('', i=1, 10) /)) 1962 TYPE(ctrl_out), SAVE :: o_fcontrN = ctrl_out((/ 2, 2, 2, 2, 2, 2, 11, 11, 11, 11/),& 1963 'fcontrN', 'Fraction with non-persistent contrail in clear-sky', '-', (/ ('', i=1,10)/)) 1964 TYPE(ctrl_out), SAVE :: o_fcontrP = ctrl_out((/ 2, 2, 2, 2, 2, 2, 11, 11, 11, 11/),& 1965 'fcontrP', 'Fraction with persistent contrail in ISSR', '-', (/ ('', i=1,10)/)) 1966 1919 1967 !!!!!!!!!!!!! Sorties niveaux standards de pression NMC 1920 1968 TYPE(ctrl_out), SAVE :: o_tnondef = ctrl_out((/ 11, 11, 11, 11, 11, 11, 5, 5, 5, 11/), & -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r4056 r4059 209 209 o_p_tropopause, o_z_tropopause, o_t_tropopause, & 210 210 o_col_O3_strato, o_col_O3_tropo, & 211 !--aviation & supersaturation 212 o_oclr, o_ocld, o_oss, o_ovc, o_rnebss, o_rnebclr, o_rnebseri, o_gammass, & 213 o_N1_ss, o_N2_ss, o_qsatl, o_qsats, & 214 o_drnebsub, o_drnebcon, o_drnebtur, o_drnebavi, o_flight_m, o_flight_h2o, & 215 o_Tcontr, o_qcontr, o_qcontr2, o_fcontrN, o_fcontrP, & 211 216 !--interactive CO2 212 217 o_flx_co2_ocean, o_flx_co2_ocean_cor, & … … 230 235 o_vsed_aer, o_tau_strat_1020, o_ext_strat_1020, o_f_r_wet 231 236 #endif 237 238 USE ice_sursat_mod, ONLY: flight_m, flight_h2o 232 239 233 240 USE phys_output_ctrlout_mod, ONLY: o_heat_volc, o_cool_volc !NL … … 280 287 cldq, flwp, fiwp, ue, ve, uq, vq, & 281 288 uwat, vwat, & 289 rneb_seri, d_rneb_dyn, & 282 290 plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw, & 283 291 s_pblh, s_pblt, s_lcl, s_therm, uwriteSTD, & … … 293 301 wdtrainA, wdtrainS, wdtrainM, n2, s2, proba_notrig, & 294 302 random_notrig, & 303 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 304 N1_ss, N2_ss, zqsatl, zqsats, & 305 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, & 306 drneb_sub, drneb_con, drneb_tur, drneb_avi, & 295 307 alp_bl_det, alp_bl_fluct_m, alp_bl_conv, & 296 308 alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, & … … 1813 1825 ENDIF 1814 1826 1827 !--aviation & supersaturation 1828 CALL histwrite_phy(o_oclr, qclr) 1829 CALL histwrite_phy(o_ocld, qcld) 1830 CALL histwrite_phy(o_oss, qss) 1831 CALL histwrite_phy(o_ovc, qvc) 1832 CALL histwrite_phy(o_rnebclr, rnebclr) 1833 CALL histwrite_phy(o_rnebss, rnebss) 1834 CALL histwrite_phy(o_rnebseri, rneb_seri) 1835 CALL histwrite_phy(o_gammass, gamma_ss) 1836 CALL histwrite_phy(o_N1_ss, N1_ss) 1837 CALL histwrite_phy(o_N2_ss, N2_ss) 1838 CALL histwrite_phy(o_drnebsub, drneb_sub) 1839 CALL histwrite_phy(o_drnebcon, drneb_con) 1840 CALL histwrite_phy(o_drnebtur, drneb_tur) 1841 CALL histwrite_phy(o_drnebavi, drneb_avi) 1842 CALL histwrite_phy(o_qsatl, zqsatl) 1843 CALL histwrite_phy(o_qsats, zqsats) 1844 CALL histwrite_phy(o_flight_m, flight_m) 1845 CALL histwrite_phy(o_flight_h2o, flight_h2o) 1846 CALL histwrite_phy(o_Tcontr, Tcontr) 1847 CALL histwrite_phy(o_qcontr, qcontr) 1848 CALL histwrite_phy(o_qcontr2, qcontr2) 1849 CALL histwrite_phy(o_fcontrN, fcontrN) 1850 CALL histwrite_phy(o_fcontrP, fcontrP) 1815 1851 1816 1852 IF (vars_defined) zx_tmp_fi3d = wo(:, :, 1) * dobson_u * 1e3 / zmasse / rmo3 * rmd -
LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
r3956 r4059 90 90 REAL, ALLOCATABLE, SAVE :: clwcon(:,:),rnebcon(:,:) 91 91 !$OMP THREADPRIVATE(clwcon,rnebcon) 92 REAL, ALLOCATABLE, SAVE :: rneb_ancien(:,:) 93 !$OMP THREADPRIVATE(rneb_ancien) 92 94 REAL, ALLOCATABLE, SAVE :: qtc_cv(:,:),sigt_cv(:,:) 93 95 !$OMP THREADPRIVATE(qtc_cv,sigt_cv) … … 514 516 !!! Rom P <<< 515 517 ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev)) 518 ALLOCATE(rneb_ancien(klon,klev)) 516 519 ALLOCATE(qtc_cv(klon,klev),sigt_cv(klon,klev)) 517 520 ALLOCATE(ratqs(klon,klev)) … … 689 692 DEALLOCATE(zthe, zpic, zval) 690 693 DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon) 691 DEALLOCATE(qs_ancien, ql_ancien )694 DEALLOCATE(qs_ancien, ql_ancien, rneb_ancien) 692 695 DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien) 693 696 DEALLOCATE(qtc_cv,sigt_cv) -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r4056 r4059 73 73 USE tracinca_mod, ONLY: config_inca 74 74 USE tropopause_m, ONLY: dyn_tropopause 75 USE ice_sursat_mod, ONLY: flight_init, airplane 75 76 USE vampir 76 77 USE VERTICAL_LAYERS_MOD, ONLY: aps,bps, ap, bp … … 127 128 ! [Variables internes non sauvegardees de la physique] 128 129 ! Variables locales pour effectuer les appels en serie 129 t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,tr_seri, &130 t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,tr_seri,rneb_seri, & 130 131 ! Dynamic tendencies (diagnostics) 131 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn, &132 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, & 132 133 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, & 133 134 ! Physic tendencies … … 444 445 INTEGER iliq ! indice de traceurs pour eau liquide 445 446 PARAMETER (iliq=2) 446 !CR: on ajoute la phase glace447 447 INTEGER isol ! indice de traceurs pour eau glace 448 448 PARAMETER (isol=3) 449 INTEGER irneb ! indice de traceurs pour fraction nuageuse LS (optional) 450 PARAMETER (irneb=4) 449 451 ! 450 452 ! … … 1283 1285 #endif 1284 1286 1287 !!CALL flight_init 1288 1285 1289 print*, '=================================================' 1286 1290 ! … … 1289 1293 WRITE (lunout, *) ' iflag_ice_thermo==1 requires 3 H2O tracers ', & 1290 1294 '(H2Ov, H2Ol, H2Oi) but nqo=', nqo, '. Might as well stop here.' 1295 abort_message='see above' 1296 CALL abort_physic(modname,abort_message,1) 1297 ENDIF 1298 1299 IF ((iflag_ice_sursat.GT.0).AND.(iflag_ice_thermo.EQ.0)) THEN 1300 WRITE (lunout, *) ' iflag_ice_sursat=1 requires iflag_ice_thermo=1 as well' 1301 abort_message='see above' 1302 CALL abort_physic(modname,abort_message,1) 1303 ENDIF 1304 1305 IF ((iflag_ice_sursat.GT.0).AND.(nqo.NE.4)) THEN 1306 WRITE (lunout, *) ' iflag_ice_sursat=1 requires 4 H2O tracers ', & 1307 '(H2Ov, H2Ol, H2Oi, rnebi) but nqo=', nqo, '. Might as well stop here.' 1291 1308 abort_message='see above' 1292 1309 CALL abort_physic(modname,abort_message,1) … … 2217 2234 ELSE IF (nqo.eq.3) THEN 2218 2235 qs_seri(i,k) = qx(i,k,isol) 2236 ELSE IF (nqo.eq.4) THEN 2237 qs_seri(i,k) = qx(i,k,isol) 2238 rneb_seri(i,k) = qx(i,k,irneb) 2219 2239 ENDIF 2220 2240 ENDDO … … 2292 2312 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep 2293 2313 ! !! RomP <<< 2314 !!d_rneb_dyn(:,:)=(rneb_seri(:,:)-rneb_ancien(:,:))/phys_tstep 2315 d_rneb_dyn(:,:)=0.0 2294 2316 ELSE 2295 2317 d_u_dyn(:,:) = 0.0 … … 2305 2327 IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0 2306 2328 ! !! RomP <<< 2329 d_rneb_dyn(:,:)=0.0 2307 2330 ancien_ok = .TRUE. 2308 2331 ENDIF … … 3536 3559 IF (ok_new_lscp) THEN 3537 3560 3538 CALL lscp(phys_tstep,paprs,pplay, & 3561 !--mise à jour de flight_m dans son module 3562 CALL airplane(debut,pphis,pplay,paprs,t_seri) 3563 3564 CALL lscp(phys_tstep,missing_val,paprs,pplay, & 3539 3565 t_seri, q_seri,ptconv,ratqs, & 3540 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, picefra, &3541 rain_lsc, snow_lsc, &3566 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneb_seri, & 3567 cldliq, picefra, rain_lsc, snow_lsc, & 3542 3568 pfrac_impa, pfrac_nucl, pfrac_1nucl, & 3543 3569 frac_impa, frac_nucl, beta_prec_fisrt, & 3544 3570 prfl, psfl, rhcl, & 3545 3571 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, & 3546 iflag_ice_thermo )3572 iflag_ice_thermo, iflag_ice_sursat) 3547 3573 3548 3574 ELSE 3575 3549 3576 CALL fisrtilp(phys_tstep,paprs,pplay, & 3550 3577 t_seri, q_seri,ptconv,ratqs, & … … 3556 3583 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, & 3557 3584 iflag_ice_thermo) 3585 3558 3586 ENDIF 3559 3587 ! … … 5060 5088 d_qx(i,k,iliq) = ( ql_seri(i,k) - qx(i,k,iliq) ) / phys_tstep 5061 5089 !CR: on ajoute le contenu en glace 5062 IF (nqo. eq.3) THEN5090 IF (nqo.gt.3) THEN 5063 5091 d_qx(i,k,isol) = ( qs_seri(i,k) - qx(i,k,isol) ) / phys_tstep 5092 ENDIF 5093 !--ice_sursat: nqo=4, on ajoute rneb 5094 IF (nqo.eq.4) THEN 5095 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 5064 5096 ENDIF 5065 5097 ENDDO … … 5110 5142 ql_ancien(:,:) = ql_seri(:,:) 5111 5143 qs_ancien(:,:) = qs_seri(:,:) 5144 rneb_ancien(:,:) = rneb_seri(:,:) 5112 5145 CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien) 5113 5146 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
Note: See TracChangeset
for help on using the changeset viewer.