Changeset 1411 for LMDZ4/trunk/libf
- Timestamp:
- Jul 9, 2010, 1:06:15 PM (14 years ago)
- Location:
- LMDZ4/trunk/libf/phylmd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/phylmd/cloudth.F90
r1403 r1411 142 142 ! Calcul des écart-types pour s 143 143 !----------------------------------------------------------------------------------------------------------------- 144 ! alpha=0.5*(fraca(ind1,ind2)+fraca(ind1,ind2-1)) 145 ! sigma1s=(Max(1.2*fraca(ind1,ind2)*(sth-senv)**2,(senv/100)**2))**0.5 146 ! sigma2s=((0.021/(fraca(ind1,ind2)+0.0)**0.5)*(sth-senv)**2+(sth/100)**2)**0.5 147 ! sigma1s=(1.5**0.5)*(fraca(ind1,ind2)**0.65)*(sth-senv)+0.000045 148 ! sigma2s=0.1265*(sth-senv)/(fraca(ind1,ind2)+0.0)**0.35+0.000045 149 150 sigma1s=(1.1**0.5)*(fraca(ind1,ind2)**0.6)/(1-fraca(ind1,ind2))*((sth-senv)**2)**0.5+0.00003 151 sigma2s=0.11*((sth-senv)**2)**0.5/(fraca(ind1,ind2)+0.02)**0.4+0.00003 152 153 ! sigma1s=(1.5**0.5)*(alpha**0.65)*(sth-senv)+0.000045 154 ! sigma2s=0.1265*(sth-senv)/alpha**0.35+0.000045 155 156 ! sigma1s=(2.8**0.5)*(0.1**0.7)*(sth-senv)+0.00002 157 ! sigma2s=((0.126/(0.1)**0.3)*(sth-senv))+0.00002 158 144 145 sigma1s=(1.1**0.5)*(fraca(ind1,ind2)**0.6)/(1-fraca(ind1,ind2))*((sth-senv)**2)**0.5+ratqs(ind1,ind2)*po(ind1) 146 sigma2s=0.11*((sth-senv)**2)**0.5/(fraca(ind1,ind2)+0.02)**0.4+0.002*zqta(ind1,ind2) 159 147 160 148 … … 214 202 senv=aenv*(po(ind1)-zqsatenv(ind1,ind2)) 215 203 216 ! if (zqenv(ind1).gt.0.005) then 217 sigma1s=0.005*zqenv(ind1) 218 ! else 219 ! sigma1s=0.0005 220 ! endif 221 222 ! sigma1s=ratqs(ind1,ind2)*zqenv(ind1) 223 224 225 226 ! sigma1s=0.00003 204 205 sigma1s=ratqs(ind1,ind2)*zqenv(ind1) 206 227 207 sqrt2pi=sqrt(2.*pi) 228 208 xenv=senv/(sqrt(2.)*sigma1s) -
LMDZ4/trunk/libf/phylmd/fisrtilp.F
r1407 r1411 50 50 REAL zthl(klon,klev) 51 51 52 logical lognormale(klon) 53 52 54 cAA 53 55 c Coeffients de fraction lessivee : pour OFF-LINE … … 140 142 zdelq=0.0 141 143 142 ! print*,'CLOUDTH4 A. JAM'144 print*,'NUAGES4 A. JAM' 143 145 IF (appel1er) THEN 144 146 c … … 289 291 . /RG/dtime 290 292 291 c pour la glace, on r �vapore toute la pr�ip dans la couche du dessous293 c pour la glace, on r�vapore toute la pr�ip dans la couche du dessous 292 294 c la glace venant de la couche du dessus est simplement dans la couche 293 295 c du dessous. … … 343 345 c zqn : eau totale dans le nuage 344 346 c zcond : eau condensee moyenne dans la maille. 345 c on prend en compte le r �hauffement qui diminue la partie condensee347 c on prend en compte le r�hauffement qui diminue la partie condensee 346 348 c 347 349 c Version avec les raqts … … 365 367 enddo 366 368 367 if (iflag_cldcon .eq.5) then369 if (iflag_cldcon>=5) then 368 370 369 371 call cloudth(klon,klev,k,ztv, … … 377 379 enddo 378 380 379 else 380 381 endif 382 383 ! Pour iflag_cldcon<=4, on prend toujours la lognormale 384 ! Dans le cas iflag_cldcon=5, on prend systématiquement la bi-gaussienne 385 ! Dans le cas iflagÃ_cldcon=6, on prend la lognormale en absence des thermiques 386 387 lognormale(:)= 388 . iflag_cldcon<=4.or.(iflag_cldcon==6.and.fraca(:,k)<1.e-10) 381 389 do i=1,klon 390 if (lognormale(i)) then 382 391 zpdf_sig(i)=ratqs(i,k)*zq(i) 383 392 zpdf_k(i)=-sqrt(log(1.+(zpdf_sig(i)/zq(i))**2)) … … 391 400 zpdf_e2(i)=sign(min(abs(zpdf_e2(i)),5.),zpdf_e2(i)) 392 401 zpdf_e2(i)=1.-erf(zpdf_e2(i)) 402 endif 403 enddo 404 405 do i=1,klon 406 if (lognormale(i)) then 393 407 if (zpdf_e1(i).lt.1.e-10) then 394 408 rneb(i,k)=0. … … 398 412 zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i) 399 413 endif 414 endif 400 415 401 416 enddo 402 417 403 endif ! iflag_cldcon404 418 405 419 endif ! iflag_pdf -
LMDZ4/trunk/libf/phylmd/physiq.F
r1403 r1411 1 1 ! $Id$ 2 ! 2 3 c#define IO_DEBUG 3 4 … … 261 262 CHARACTER*4 bb2 262 263 CHARACTER*2 bb3 264 c 263 265 264 266 real twriteSTD(klon,nlevSTD,nfiles) … … 863 865 REAL rflag(klon) ! flag fonctionnement de convect 864 866 INTEGER iflagctrl(klon) ! flag fonctionnement de convect 865 866 867 c -- convect43: 867 868 INTEGER ntra ! nb traceurs pour convect4.3 … … 1232 1233 call phys_state_var_init(read_climoz) 1233 1234 call phys_output_var_init 1235 1234 1236 print*, '=================================================' 1235 1237 cIM for NMC files … … 1251 1253 c pmflxr=0. 1252 1254 c pmflxs=0. 1253 1254 1255 itau_con=0 1255 1256 first=.false. … … 1423 1424 ema_pcb(i) = 0. 1424 1425 ema_pct(i) = 0. 1425 cema_workcbmf(i) = 0.1426 ema_workcbmf(i) = 0. 1426 1427 ENDDO 1427 1428 cIM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>BEG … … 1448 1449 c================================================================================ 1449 1450 1450 ENDIF !debut1451 ENDIF 1451 1452 1452 1453 DO i=1,klon … … 2170 2171 . d_t_con,d_q_con,d_u_con,d_v_con,d_tr, 2171 2172 . rain_con, snow_con, ibas_con, itop_con, sigd, 2172 . ema_cbmf,upwd,dnwd,dnwd0,2173 . upwd,dnwd,dnwd0, 2173 2174 . Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl, 2174 2175 . pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd, … … 2189 2190 2190 2191 ELSE ! ok_cvl 2191 2192 2192 c MAF conema3 ne contient pas les traceurs 2193 2193 CALL conema3 (dtime, … … 2229 2229 2230 2230 DO i = 1, klon 2231 ema_pcb(i) = p aprs(i,ibas_con(i))2231 ema_pcb(i) = pbase(i) 2232 2232 ENDDO 2233 2233 DO i = 1, klon 2234 2234 2235 ! L'idicage de itop_con peut cacher un pb potentiel 2235 2236 ! FH sous la dictee de JYG, CR … … 2242 2243 endif 2243 2244 endif 2244 ENDDO 2245 ENDDO 2246 DO i = 1, klon 2247 ema_cbmf(i) = ema_workcbmf(i) 2248 ENDDO 2245 2249 ELSE IF (iflag_con.eq.0) THEN 2246 2250 write(lunout,*) 'On n appelle pas la convection' … … 2459 2463 c ============== 2460 2464 2461 ! Dans le cas o ùon active les thermiques, on fait partir l'ajustement2465 ! Dans le cas où on active les thermiques, on fait partir l'ajustement 2462 2466 ! a partir du sommet des thermiques. 2463 2467 ! Dans le cas contraire, on demarre au niveau 1. … … 2544 2548 if(prt_level.ge.9) print*,' CLOUDS_GNO OK' 2545 2549 2546 c-----------------------------------------------------------------------2547 c par calcul direct de l'ecart-type2548 c-----------------------------------------------------------------------2549 2550 else if (iflag_cldcon>=5) then2551 wmax_th(:)=0.2552 zmax_th(:)=0.2553 do k=1,klev2554 do i=1,klon2555 wmax_th(i)=max(wmax_th(i),zw2(i,k))2556 if (detr_therm(i,k).gt.0.) zmax_th(i)=pphi(i,k)/rg2557 enddo2558 enddo2559 tau_overturning_th(:)=zmax_th(:)/max(0.5*wmax_th(:),0.1)2560 if(prt_level.ge.9)2561 & write(lunout,*)'TAU TH OK ',2562 & tau_overturning_th(1),detr_therm(1,3)2563 2564 c On impose que l'air autour de la fraction couverte par le thermique2565 c plus son air detraine durant tau_overturning_th soit superieur2566 c a 0.1 q_seri2567 zz=0.12568 do k=1,klev2569 do i=1,klon2570 lambda_th(i,k)=0.5*(fraca(i,k)+fraca(i,k+1))+2571 s tau_overturning_th(i)*detr_therm(i,k)2572 s *rg/(paprs(i,k)-paprs(i,k+1))2573 znum=(1.-zz)*q_seri(i,k)2574 zden=zqasc(i,k)-zz*q_seri(i,k)2575 if (znum-lambda_th(i,k)*zden<0.) lambda_th(i,k)=znum/zden2576 lambda_th(i,k)=min(lambda_th(i,k),0.9)2577 enddo2578 enddo2579 2580 if(iflag_cldcon==5) then2581 do k=1,klev2582 do i=1,klon2583 ratqsc(i,k)=sqrt(lambda_th(i,k)/(1.-lambda_th(i,k)))*2584 s abs((zqasc(i,k)-q_seri(i,k))/q_seri(i,k))2585 enddo2586 enddo2587 else if(iflag_cldcon==6) then2588 do k=1,klev2589 do i=1,klon2590 ratqsc(i,k)=sqrt(lambda_th(i,k))*2591 s (zqasc(i,k)-q_seri(i,k))/q_seri(i,k)2592 enddo2593 enddo2594 endif2595 2596 2550 endif 2597 2551 … … 2657 2611 2658 2612 if (iflag_cldcon.eq.1 .or.iflag_cldcon.eq.2 2659 s .or.iflag_cldcon. ge.4) then2613 s .or.iflag_cldcon.eq.4) then 2660 2614 2661 2615 ! On ajoute une constante au ratqsc*2 pour tenir compte de … … 2692 2646 endif 2693 2647 2648 print*,'PHSYIQ NUAGES4' 2694 2649 2695 2650 c … … 2869 2824 2870 2825 c On prend la somme des fractions nuageuses et des contenus en eau 2871 cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.) 2872 cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:) 2826 2827 if (iflag_cldcon>=5) then 2828 2829 ! Si on est sur un point touche par la convection profonde et pas 2830 ! par les thermiques, on prend la couverture nuageuse et l'eau nuageuse 2831 ! de la convection profonde. 2832 2833 print*,'TEST SCHEMA DE NUAGES ' 2834 do k=1,klev 2835 do i=1,klon 2836 if (ptconv(i,k).and. .not. ptconvth(i,k)) then 2837 cldfra(i,k)=rnebcon(i,k) 2838 cldliq(i,k)=rnebcon(i,k)*clwcon(i,k) 2839 endif 2840 enddo 2841 enddo 2842 else 2843 ! Ancienne version 2844 cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.) 2845 cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:) 2846 endif 2873 2847 2874 2848 ENDIF … … 3338 3312 ! s ref_liq,ref_ice 3339 3313 call phys_cosp(itap,dtime,freq_cosp, 3340 $ ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, 3341 $ ecrit_mth,ecrit_day,ecrit_hf, 3342 $ klon,klev,rlon,rlat,presnivs,overlap, 3314 $ ecrit_mth,ecrit_day,ecrit_hf,overlap, 3315 $ klon,klev,rlon,rlat,presnivs, 3343 3316 $ ref_liq,ref_ice, 3344 3317 $ pctsrf(:,is_ter)+pctsrf(:,is_lic), … … 3349 3322 $ pmflxr(:,1:klev),pmflxs(:,1:klev), 3350 3323 $ mr_ozone,cldtau, cldemi) 3351 3352 3324 ! L calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol, 3353 3325 ! L cfaddbze,clcalipso2,dbze,cltlidarradar, … … 3497 3469 wwriteSTD(:,:,4)=wlevSTD(:,:) 3498 3470 c 3499 cIM initialisation 5eme fichier de sortie3500 3471 cIM ajoute 5eme niveau 170310 BEG 3501 3472 twriteSTD(:,:,5)=tlevSTD(:,:) … … 3610 3581 cIM global posePB#include "write_bilKP_ave.h" 3611 3582 c 3612 3613 3583 c Sauvegarder les valeurs de t et q a la fin de la physique: 3614 3584 c … … 3669 3639 DO k = 1, klev 3670 3640 DO i = 1, klon 3671 cJYG/IM theta en debut du pas de temps 3672 cJYG/IM theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD) 3673 cJYG/IM theta en fin de pas de temps de physique 3674 theta(i,k)=t_seri(i,k)*(100000./pplay(i,k))**(RD/RCPD) 3641 theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD) 3675 3642 ENDDO 3676 3643 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.