Changeset 290
- Timestamp:
- Sep 9, 2011, 4:24:40 PM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r288 r290 965 965 with the new mixing layer scheme (thermals). And anyway it is a much 966 966 better scheme than the previous one. 967 968 == 09/09/11 == AC 969 970 This is a major update for thermals and richardson layer parametrization. This update stabilizes thermals (further 971 studies might show that we can reduce the value of nsplit in gcm. To be tested.), and prevent downdrafts from descending into 972 the surface layer, which was acting as a cold feedback on the thermals. The Richardson surface layer now features 973 different gustiness coefficients for Richardson, heat and momentum so that u* and t* are correctly represented. 974 975 Upcoming updates will change surflayer_interpol.F90 to implement those changes in the interpolation scheme as well. 976 977 *************************** 978 IMPORTANT : several parts of the vdifc code might want to use these new definitions for gustiness, u* and t*. exemple : dust devil routines 979 that recompute u* ? lifting routines ? TODO ! 980 ************************** 981 982 983 M 289 libf/phymars/thermcell_main_mars.F90 984 ^-----------------> Added iterations to the velocity / buoyancy / entrainment / detrainment 985 computation to ensure correct convergence. Iteration number is for now set to 986 4, which is probably too much. This will be changed once several cases are tested. 987 The minimum is probably 2 iterations. 988 989 M 289 libf/phymars/vdifc.F 990 ^-----------------> Subgrid gustiness parametrization now uses different gustiness beta coefficients 991 for heat and momentum. Comparisons with LES at Exomars landing site, matching u* 992 and teta* suggests values of beta=0.7 for momentum and beta=1.2 for heat, where 993 the formula for large scale horizontal winds in the first layer is : 994 U0^2 = pu^2 + pv^2 + (beta*wmax_th)^2 995 996 M 289 libf/phymars/vdif_cd.F 997 ^-----------------> LES data suggests that Richardson number distribution during daytime has a very large 998 standart deviation due to highly negative Richardsons on several gridpoints. As a consequence, 999 the mean Richardson in daytime in the LES is much more negative than in LES. In the gcm, 1000 parametrized subgrid turbulence prevents such cases, which can be dangerous in nearly unstable conditions. 1001 Hence, we use beta=0.5 instead of one, so that we keep the anti-crazy-hfx function of beta and we increase the 1002 norm of negative Richardsons in general for daytime conditions. This is set in conjonction with 1003 beta settings for heat and momentum in vdifc. 1004 1005 M 289 libf/phymars/meso_inc/meso_inc_les.F 1006 ^-----------------> HFX and USTM computations now uses the different betas for heat and momentum. 1007 -
trunk/LMDZ.MARS/libf/phymars/meso_inc/meso_inc_les.F
r284 r290 20 20 hfx(ig) = (pplay(ig,1)/(r*pt(ig,1)))*cpp 21 21 & *sqrt(pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) 22 & + (1. 0*wmax_th(ig))**2)22 & + (1.2*wmax_th(ig))**2) 23 23 & *zcdh(ig)*(tsurf(ig)-zh(ig,1)) 24 25 24 26 25 ! New SL parametrization, ust is more accurately computed in vdif_cd : 27 26 ust(ig) = sqrt(zcdv(ig)* 28 & (pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) + ( 1.0*wmax_th(ig))**2)27 & (pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) + (0.7*wmax_th(ig))**2) 29 28 & ) 30 29 -
trunk/LMDZ.MARS/libf/phymars/thermcell_main_mars.F90
r190 r290 114 114 LOGICAL active(ngridmx),activetmp(ngridmx) 115 115 REAL a1,b1,ae,be,ad,bd 116 INTEGER tic 116 117 117 118 ! ========================================== … … 334 335 alim_star(ig,1)=MAX((ztv(ig,1)-ztv(ig,2)),0.) & 335 336 & *sqrt(zlev(ig,2)) 337 ! & /sqrt(zlev(ig,2)) 336 338 ! & *zlev(ig,2) 337 339 lalim(ig)=2 … … 381 383 ! dans un panache conservatif 382 384 f_star(ig,1)=0. 385 383 386 f_star(ig,2)=alim_star(ig,1) 387 384 388 zw2(ig,2)=2.*g*(ztv(ig,1)-ztv(ig,2))/ztv(ig,2) & 385 389 & *(zlev(ig,2)-zlev(ig,1)) & 386 & 390 & *0.4*pphi(ig,1)/(pphi(ig,2)-pphi(ig,1)) 387 391 w_est(ig,2)=zw2(ig,2) 388 392 … … 420 424 421 425 ! if(l .lt. lalim(ig)) then 422 ! 426 ! ztva_est(ig,l)=(f_star(ig,l)*ztla(ig,l-1)+ & 423 427 ! & alim_star(ig,l)*ztv(ig,l)) & 424 428 ! & /(f_star(ig,l)+alim_star(ig,l)) … … 522 526 !--------------------------------------------------------------------------- 523 527 528 DO tic=0,3 529 524 530 activetmp(:)=active(:) .and. f_star(:,l+1)>1.e-10 525 531 do ig=1,ngridmx … … 547 553 enddo 548 554 555 ! ================ RECOMPUTE ENTR, DETR, and F FROM NEW W2 =================== 556 557 558 do ig=1,ngridmx 559 if (activetmp(ig)) then 560 561 zw2m=zw2(ig,l+1) 562 if(zw2m .gt. 0) then 563 if((a1*(zbuoy(ig,l)/zw2m)-b1) .gt. 0.) then 564 entr_star(ig,l)=f_star(ig,l)*zdz* & 565 & MAX(0.,ae*(a1*(zbuoy(ig,l)/zw2m)-b1)**be) 566 else 567 entr_star(ig,l)=0. 568 endif 569 570 if(zbuoy(ig,l) .gt. 0.) then 571 if(l .lt. lalim(ig)) then 572 detr_star(ig,l)=0. 573 else 574 detr_star(ig,l) = f_star(ig,l)*zdz* & 575 & ad 576 endif 577 else 578 detr_star(ig,l)=f_star(ig,l)*zdz* & 579 & bd*zbuoy(ig,l)/zw2m 580 endif 581 else 582 entr_star(ig,l)=0. 583 detr_star(ig,l)=0. 584 endif 585 586 ! En dessous de lalim, on prend le max de alim_star et entr_star pour 587 ! alim_star et 0 sinon 588 589 if (l.lt.lalim(ig)) then 590 alim_star(ig,l)=max(alim_star(ig,l),entr_star(ig,l)) 591 entr_star(ig,l)=0. 592 endif 593 594 ! Calcul du flux montant normalise 595 596 f_star(ig,l+1)=f_star(ig,l)+alim_star(ig,l)+entr_star(ig,l) & 597 & -detr_star(ig,l) 598 599 endif 600 enddo 601 602 ENDDO 549 603 !--------------------------------------------------------------------------- 550 604 !initialisations pour le calcul de la hauteur du thermique, de l'inversion et de la vitesse verticale max … … 1121 1175 do ig=1,ngridmx 1122 1176 if(lmax(ig) .gt. 1) then 1123 do k=1,lmax(ig) 1177 ! No downdraft in the very-near surface layer, we begin at k=3 1178 do k=3,lmax(ig) 1124 1179 zdthladj_down(ig,k)=(1./masse(ig,k))*(fm_down(ig,k+1)*ztv(ig,k+1)- & 1125 1180 & fm_down(ig,k)*ztv(ig,k)+fm_down(ig,k)*ztvd(ig,k)-fm_down(ig,k+1)*ztvd(ig,k+1)) -
trunk/LMDZ.MARS/libf/phymars/vdif_cd.F
r284 r290 149 149 ! zu2=pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) 150 150 ! zu2=MAX(pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1),wmax(ig)**2) 151 zu2(ig)= pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) + (1.*wmax(ig))**2151 zu2(ig)=pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) + (0.5*wmax(ig))**2 152 152 153 153 ! we add the wmax to simulate -
trunk/LMDZ.MARS/libf/phymars/vdifc.F
r284 r290 234 234 & ,zcdv_true,zcdh_true) 235 235 236 237 IF (callrichsl .eq. .true.) then 238 zu2(:)=pu(:,1)*pu(:,1)+pv(:,1)*pv(:,1)239 & +(1.*wmax(:))**2 ! subgrid gustiness added by quadratic interpolation with a coeff beta, here beta=1. (tuned from240 236 zu2(:)=pu(:,1)*pu(:,1)+pv(:,1)*pv(:,1) 237 238 IF (callrichsl .eq. .true.) THEN 239 zcdv(:)=zcdv_true(:)*sqrt(zu2(:)+(0.7*wmax(:))**2) ! subgrid gustiness added by quadratic interpolation with a coeff beta 240 zcdh(:)=zcdh_true(:)*sqrt(zu2(:)+(1.2*wmax(:))**2) ! LES comparisons. This parameter is linked to the thermals settings) 241 241 ELSE 242 zu2(:)=pu(:,1)*pu(:,1)+pv(:,1)*pv(:,1)243 ENDIF244 245 242 zcdv(:)=zcdv_true(:)*sqrt(zu2(:)) ! 1 / bulk aerodynamic momentum conductance 246 243 zcdh(:)=zcdh_true(:)*sqrt(zu2(:)) ! 1 / bulk aerodynamic heat conductance 247 ! these are the quantities to be looked at when comparing surface layers of different models 244 ENDIF 245 248 246 249 247 ! Some usefull diagnostics for the new surface layer parametrization : … … 257 255 ! call WRITEDIAGFI(ngridmx,'u*', 258 256 ! & 'friction velocity','m/s', 259 ! & 2,sqrt(zcdv_true(:))*sqrt(zu2(:)))257 ! & 2,sqrt(zcdv_true(:))*sqrt(zu2(:)+(0.7*wmax(:))**2)) 260 258 ! call WRITEDIAGFI(ngridmx,'T*', 261 259 ! & 'friction temperature','K', 262 ! & 2,-zcdh_true(:)*(ptsrf(:)-ph(:,1))/sqrt(zcdv_true(:))) 260 ! & 2,zcdh_true(:)*sqrt(zu2(:)+(1.2*wmax(:))**2)* 261 ! & -(ptsrf(:)-ph(:,1)) 262 ! & /(sqrt(zcdv_true(:))*sqrt(zu2(:)+(0.7*wmax(:))**2))) 263 263 ! call WRITEDIAGFI(ngridmx,'rm-1', 264 264 ! & 'aerodyn momentum conductance','m/s',
Note: See TracChangeset
for help on using the changeset viewer.