Changeset 373 for LMDZ.3.3/branches/rel-LF/libf/phylmd/physiq.F
- Timestamp:
- Jul 12, 2002, 12:27:22 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ.3.3/branches/rel-LF/libf/phylmd/physiq.F
r364 r373 388 388 EXTERNAL conlmd ! convection (schema LMD) 389 389 cKE43 390 EXTERNAL conema ! convect4.3390 EXTERNAL conema3 ! convect4.3 391 391 EXTERNAL fisrtilp ! schema de condensation a grande echelle (pluie) 392 392 cAA … … 412 412 c Variables locales 413 413 c 414 real clwcon(klon,klev),rnebcon(klon,klev) 415 real clwcon0(klon,klev),rnebcon0(klon,klev) 416 save rnebcon, clwcon 417 418 REAL rhcl(klon,klev) ! humiditi relative ciel clair 414 419 REAL dialiq(klon,klev) ! eau liquide nuageuse 415 420 REAL diafra(klon,klev) ! fraction nuageuse … … 464 469 c 465 470 REAL za, zb 466 REAL zx_t, zx_qs, zdelta, zcor, zlvdcp, zlsdcp 467 INTEGER i, k, iq, nsrf, ll 471 REAL zx_t, zx_qs, zdelta, zcor, zfra, zlvdcp, zlsdcp 472 real zqsat(klon,klev) 473 INTEGER i, k, iq, ig, j, nsrf, ll 468 474 REAL t_coup 469 475 PARAMETER (t_coup=234.0) … … 534 540 REAL d_t_lif(klon,klev) 535 541 536 REAL ratqs(klon,klev) 537 integer flag_ratqs 542 REAL ratqs(klon,klev),ratqss(klon,klev),ratqsc(klon,klev) 543 real ratqsbas,ratqshaut 544 save ratqsbas,ratqshaut, ratqs 538 545 real zpt_conv(klon,klev) 546 547 c Parametres lies au nouveau schema de nuages (SB, PDF) 548 real fact_cldcon 549 real facttemps 550 logical ok_newmicro 551 save ok_newmicro 552 save fact_cldcon,facttemps 553 554 integer iflag_cldcon 555 save iflag_cldcon 556 557 logical ptconv(klon,klev) 539 558 540 559 c … … 630 649 c 631 650 call conf_phys(ocean, ok_veget, ok_journe, ok_mensuel, 632 . ok_instan) 651 . ok_instan, fact_cldcon, facttemps,ok_newmicro, 652 . iflag_cldcon,ratqsbas,ratqshaut) 633 653 634 654 DO k = 2, nvm ! pas de vegetation … … 655 675 . dlw,radsol,frugs,agesno,clesphy0, 656 676 . zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro,tabcntr0, 657 . t_ancien, q_ancien, ancien_ok )677 . t_ancien, q_ancien, ancien_ok, rnebcon, ratqs,clwcon ) 658 678 659 679 c … … 1307 1327 . "ave(X)", zsto,zout) 1308 1328 c 1329 CALL histdef(nid_mth, "ducon", "Convection du", "m/s2", 1330 . iim,jjmp1,nhori, klev,1,klev,nvert, 32, 1331 . "ave(X)", zsto,zout) 1332 c 1309 1333 CALL histdef(nid_mth, "dqcon", "Convection dQ", "Kg/Kg/s", 1310 1334 . iim,jjmp1,nhori, klev,1,klev,nvert, 32, … … 1774 1798 DO i = 1, klon 1775 1799 zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k)) 1776 zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k)) 1800 c zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k)) 1801 zlsdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k)) 1777 1802 zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k))) 1778 1803 zb = MAX(0.0,ql_seri(i,k)) … … 1981 2006 else 1982 2007 1983 CALL conema (dtime,paprs,pplay,t_seri,q_seri, 2008 c print*,'Avant conema OUI' 2009 CALL conema3 (dtime, 2010 . paprs,pplay,t_seri,q_seri, 1984 2011 . u_seri,v_seri,tr_seri,nbtr, 1985 2012 . ema_work1,ema_work2, … … 1988 2015 . upwd,dnwd,dnwd0,bas,top, 1989 2016 . Ma,cape,tvp,rflag, 1990 . pbase 1991 . ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr) 2017 . pbase 2018 . ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr 2019 . ,clwcon0) 2020 c print*,'Apres conema3 ' 2021 2022 c Calculer l'humidite relative pour diagnostique 2023 c 2024 DO k = 1, klev 2025 DO i = 1, klon 2026 zx_t = t_seri(i,k) 2027 IF (thermcep) THEN 2028 zdelta = MAX(0.,SIGN(1.,rtt-zx_t)) 2029 zx_qs = r2es * FOEEW(zx_t,zdelta)/pplay(i,k) 2030 zx_qs = MIN(0.5,zx_qs) 2031 zcor = 1./(1.-retv*zx_qs) 2032 zx_qs = zx_qs*zcor 2033 ELSE 2034 IF (zx_t.LT.t_coup) THEN 2035 zx_qs = qsats(zx_t)/pplay(i,k) 2036 ELSE 2037 zx_qs = qsatl(zx_t)/pplay(i,k) 2038 ENDIF 2039 ENDIF 2040 zqsat(i,k)=zx_qs 2041 ENDDO 2042 ENDDO 2043 2044 c calcul des propriétés des nuages convectifs 2045 clwcon0(:,:)=fact_cldcon*clwcon0(:,:) 2046 call clouds_gno 2047 s (klon,klev,q_seri,zqsat,clwcon0,ptconv,ratqsc,rnebcon0) 2048 1992 2049 endif 1993 2050 DO i = 1, klon … … 2054 2111 IF (nqmax.GT.2) THEN !--melange convectif de traceurs 2055 2112 c 2056 IF (iflag_con . LT. 2 .AND. iflag_con .GT. 4) THEN2113 IF (iflag_con .NE. 2 .AND. debut) THEN 2057 2114 PRINT*, 'Pour l instant, seul conflx fonctionne ', 2058 2115 $ 'avec traceurs', iflag_con 2059 2116 PRINT*,' Mettre iflag_con', 2060 $ ' = 2 , 3 ou 4dans run.def et repasser'2061 CALL abort2117 $ ' = 2 dans run.def et repasser' 2118 c CALL abort 2062 2119 ENDIF 2063 2120 c … … 2074 2131 ENDDO 2075 2132 2076 c RATQS 2077 if (iflag_con.eq.2) then 2078 flag_ratqs=0 2133 2134 c------------------------------------------------------------------------- 2135 c Caclul des ratqs 2136 c------------------------------------------------------------------------- 2137 2138 c print*,'calcul des ratqs' 2139 c ratqs convectifs a l'ancienne en fonction de q(z=0)-q / q 2140 c ---------------- 2141 c on ecrase le tableau ratqsc calcule par clouds_gno 2142 if (iflag_cldcon.eq.1) then 2143 do k=1,klev 2144 do i=1,klon 2145 if(ptconv(i,k)) then 2146 ratqsc(i,k)=ratqsbas 2147 s +fact_cldcon*(q_seri(i,1)-q_seri(i,k))/q_seri(i,k) 2148 else 2149 ratqsc(i,k)=0. 2150 endif 2151 enddo 2152 enddo 2153 endif 2154 2155 c ratqs stables 2156 c ------------- 2157 do k=1,klev 2158 ratqss(:,k)=ratqsbas+(ratqshaut-ratqsbas)* 2159 s min((paprs(:,1)-pplay(:,k))/(paprs(:,1)-30000.),1.) 2160 enddo 2161 2162 2163 c ratqs final 2164 c ----------- 2165 if (iflag_cldcon.eq.1 .or.iflag_cldcon.eq.2) then 2166 c les ratqs sont une conbinaison de ratqss et ratqsc 2167 c ratqs final 2168 c 1e4 (en gros 3 heures), en dur pour le moment, est le temps de 2169 c relaxation des ratqs 2170 facttemps=exp(-pdtphys/1.e4) 2171 ratqs(:,:)=max(ratqs(:,:)*facttemps,ratqss(:,:)) 2172 ratqs(:,:)=max(ratqs(:,:),ratqsc(:,:)) 2173 c print*,'calcul des ratqs fini' 2079 2174 else 2080 flag_ratqs=1 2175 c on ne prend que le ratqs stable pour fisrtilp 2176 ratqs(:,:)=ratqss(:,:) 2081 2177 endif 2082 call calcratqs (flag_ratqs, 2083 I paprs,pplay,q_seri,d_t_con,d_t_ajs 2084 O ,ratqs,zpt_conv) 2178 2179 2085 2180 c 2086 2181 c Appeler le processus de condensation a grande echelle 2087 2182 c et le processus de precipitation 2088 c 2089 CALL fisrtilp _tr(dtime,paprs,pplay,2090 . t_seri, q_seri, ratqs,2183 c------------------------------------------------------------------------- 2184 CALL fisrtilp(dtime,paprs,pplay, 2185 . t_seri, q_seri,ptconv,ratqs, 2091 2186 . d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, 2092 2187 . rain_lsc, snow_lsc, 2093 2188 . pfrac_impa, pfrac_nucl, pfrac_1nucl, 2094 2189 . frac_impa, frac_nucl, 2095 . prfl, psfl) 2190 . prfl, psfl, rhcl) 2191 2096 2192 WHERE (rain_lsc < 0) rain_lsc = 0. 2097 2193 WHERE (snow_lsc < 0) snow_lsc = 0. … … 2118 2214 ENDIF 2119 2215 c 2120 c Nuages diagnostiques: 2121 c 2122 IF (iflag_con.EQ.2) THEN ! seulement pour Tiedtke 2216 c------------------------------------------------------------------- 2217 c PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT 2218 c------------------------------------------------------------------- 2219 2220 c 1. NUAGES CONVECTIFS 2221 c 2222 IF (iflag_cldcon.eq.-1) THEN ! seulement pour Tiedtke 2223 2224 c Nuages diagnostiques pour Tiedtke 2123 2225 CALL diagcld1(paprs,pplay, 2124 2226 . rain_con,snow_con,ibas_con,itop_con, … … 2132 2234 ENDDO 2133 2235 ENDDO 2236 2237 ELSE IF (iflag_cldcon.eq.3) THEN 2238 c On prend pour les nuages convectifs le max du calcul de la 2239 c convection et du calcul du pas de temps précédent diminué d'un facteur 2240 c facttemps 2241 facttemps=pdtphys/1.e4 2242 do k=1,klev 2243 do i=1,klon 2244 rnebcon(i,k)=rnebcon(i,k)*facttemps 2245 if (rnebcon0(i,k)*clwcon0(i,k).gt.rnebcon(i,k)*clwcon(i,k)) 2246 s then 2247 rnebcon(i,k)=rnebcon0(i,k) 2248 clwcon(i,k)=clwcon0(i,k) 2249 endif 2250 enddo 2251 enddo 2252 2253 c On prend la somme des fractions nuageuses et des contenus en eau 2254 cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.) 2255 cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:) 2256 2257 2134 2258 ENDIF 2135 2259 c 2136 c Nuages stratus artificiels:2260 c 2. NUAGES STARTIFORMES 2137 2261 c 2138 2262 IF (ok_stratus) THEN … … 2174 2298 ENDIF 2175 2299 zx_rh(i,k) = q_seri(i,k)/zx_qs 2300 zqsat(i,k)=zx_qs 2176 2301 ENDDO 2177 2302 ENDDO … … 2180 2305 c parametres pour diagnostiques: 2181 2306 c 2307 if (ok_newmicro) then 2308 CALL newmicro (paprs, pplay,ok_newmicro, 2309 . t_seri, cldliq, cldfra, cldtau, cldemi, 2310 . cldh, cldl, cldm, cldt, cldq) 2311 else 2182 2312 CALL nuage (paprs, pplay, 2183 2313 . t_seri, cldliq, cldfra, cldtau, cldemi, 2184 2314 . cldh, cldl, cldm, cldt, cldq) 2315 endif 2185 2316 c 2186 2317 c Appeler le rayonnement mais calculer tout d'abord l'albedo du sol. … … 3361 3492 . radsol,frugs,agesno, 3362 3493 . zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro, 3363 . t_ancien, q_ancien )3494 . t_ancien, q_ancien, rnebcon, ratqs, clwcon) 3364 3495 ENDIF 3365 3496
Note: See TracChangeset
for help on using the changeset viewer.