Changeset 544
- Timestamp:
- Feb 27, 2012, 10:44:32 AM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 1 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r541 r544 1414 1414 >> Code about 10% faster [tests carried out with mesoscale summer Tharsis run] 1415 1415 >> Check with a GCM run that results similar 1416 1417 == 27/02/12 == AC 1418 >> Continuation of thermals setting, comparisons with mesoscale results on Case C 1419 >> Added possibility to call gcm (or 1d) with constant prescribed sensible heat flux, in the spirit of direct comparisons with LES 1420 ... This is directly comparable to the variable tke_heat_flux in namelist.input 1421 ... Requires the use of yamada4.F from terrestrial GCM (mixes more, seem more numerically stable) 1422 ... Usually requires high timesteps (>1000) to avoids crashes. Best approach is to compare 1423 height of first model level z1 and teta_1 between LES and 1D, and increase the timesteps until results 1424 between the two models are comparable (might require a slitghly different tke_heat_flux between the two models 1425 due to difference in vertical diffusion schemes and subgrid effects) 1426 ... Syntax for use is to add "tke_heat_flux = ..." in callphys.def 1427 >> Corrected some stuff with tke transport in thermals (which is anyway deactivated but one day maybe...) -
trunk/LMDZ.MARS/libf/phymars/callkeys.h
r485 r544 18 18 & ,dustbin,nqchem_min,nltemodel,nircorr 19 19 20 COMMON/callkeys_r/topdustref,solarcondate,semi,alphan 20 COMMON/callkeys_r/topdustref,solarcondate,semi,alphan, & 21 & tke_heat_flux 21 22 22 23 LOGICAL callrad,calldifv,calladj,callcond,callsoil, & … … 36 37 real alphan 37 38 real solarcondate 39 real tke_heat_flux 38 40 39 41 integer iddist -
trunk/LMDZ.MARS/libf/phymars/calltherm_interface.F90
r512 r544 158 158 endif 159 159 160 ! dtke_thermals=.false. !! default setting 161 ! !call getin("dtke_thermals",dtke_thermals) 162 ! 163 ! IF(dtke_thermals) THEN 164 ! DO l=1,nlayermx 165 ! q2_therm(:,l)=0.5*(q2(:,l)+q2(:,l+1)) 166 ! ENDDO 167 ! ENDIF 160 dtke_thermals=.false. !! default setting 161 call getin("dtke_thermals",dtke_thermals) 162 IF(dtke_thermals) THEN 163 DO l=1,nlayermx 164 q2_therm(:,l)=0.5*(q2(:,l)+q2(:,l+1)) 165 ENDDO 166 ENDIF 168 167 169 168 ! ********************************************************************** … … 338 337 endif 339 338 339 if (dtke_thermals) then 340 modname='tke' 341 call thermcell_dqup(ngridmx,nlayermx,ptimestep & 342 & ,fm_therm,entr_therm,detr_therm, & 343 & masse,q2_therm,dq2_therm,modname,zdz) 344 endif 345 340 346 DO ig=1,ngridmx 341 347 hfmax(ig)=MAXVAL(heatFlux(ig,:)+heatFlux_down(ig,:)) … … 369 375 endif 370 376 371 !IF(dtke_thermals) THEN372 !DO l=2,nlayermx373 !pbl_dtke(:,l)=0.5*(dq2_therm(:,l-1)+dq2_therm(:,l))374 !ENDDO375 !376 !pbl_dtke(:,1)=0.5*dq2_therm(:,1)377 !pbl_dtke(:,nlayermx+1)=0.378 !ENDIF377 IF(dtke_thermals) THEN 378 DO l=2,nlayermx 379 pbl_dtke(:,l)=0.5*(dq2_therm(:,l-1)+dq2_therm(:,l)) 380 ENDDO 381 382 pbl_dtke(:,1)=0.5*dq2_therm(:,1) 383 pbl_dtke(:,nlayermx+1)=0. 384 ENDIF 379 385 380 386 -
trunk/LMDZ.MARS/libf/phymars/inifis.F
r485 r544 203 203 write(*,*) " topdustref = ",topdustref 204 204 205 write(*,*) "Prescribed surface thermal flux (H/(rho*cp),K m/s)" 206 tke_heat_flux=0. ! default value 207 call getin("tke_heat_flux",tke_heat_flux) 208 write(*,*) " tke_heat_flux = ",tke_heat_flux 209 write(*,*) " 0 means the usual schemes are computing" 210 205 211 write(*,*) "call radiative transfer ?" 206 212 callrad=.true. ! default value -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r529 r544 11 11 #endif 12 12 $ ) 13 13 14 14 15 IMPLICIT NONE … … 338 339 339 340 c Variables for PBL 340 341 REAL zz1(ngridmx) 341 342 REAL lmax_th_out(ngridmx),zmax_th(ngridmx) 342 343 REAL, SAVE :: wstar(ngridmx) … … 769 770 #endif 770 771 772 IF (tke_heat_flux .ne. 0.) THEN 773 zz1(:)=(pt(:,1)+pdt(:,1)*ptimestep)*(r/g)* 774 & (-alog(pplay(:,1)/pplev(:,1))) 775 pdt(:,1)=pdt(:,1) + (tke_heat_flux/zz1(:))*zpopsk(:,1) 776 ENDIF 771 777 772 778 c Calling vdif (Martian version WITH CO2 condensation) … … 1997 2003 call WRITEDIAGFI(ngrid,"pplev","Pressure","Pa",1,zplev) 1998 2004 call WRITEDIAGFI(ngrid,"rho","rho","kg.m-3",1,rho) 2005 ! call WRITEDIAGFI(ngrid,"dtrad","rad. heat. rate", & 2006 ! & "K.s-1",1,dtrad/zpopsk) 2007 ! call WRITEDIAGFI(ngridmx,'sw_htrt','sw heat. rate', 2008 ! & 'w.m-2',1,zdtsw/zpopsk) 2009 ! call WRITEDIAGFI(ngridmx,'lw_htrt','lw heat. rate', 2010 ! & 'w.m-2',1,zdtlw/zpopsk) 2011 1999 2012 ! or output in diagfi.nc (for testphys1d) 2000 2013 call WRITEDIAGFI(ngridmx,'ps','Surface pressure','Pa',0,ps) -
trunk/LMDZ.MARS/libf/phymars/thermcell_main_mars.F90
r532 r544 113 113 REAL zdz,zbuoy(ngridmx,nlayermx),zw2m 114 114 LOGICAL activecell(ngridmx),activetmp(ngridmx) 115 REAL a1,b1,ae,be,ad,bd,fdfu,b1inv,a1inv,omega 115 REAL a1,b1,ae,be,ad,bd,fdfu,b1inv,a1inv,omega,adalim 116 116 INTEGER tic 117 117 … … 381 381 b1inv=b1 382 382 omega=0. 383 adalim=0. 383 384 384 385 ! One good config for 34/35 levels … … 389 390 ! Best configuration for 222 levels: 390 391 391 omega=0.06 392 b1=0. 393 a1=1. 394 a1inv=0.25*a1 395 b1inv=0.0002 392 ! omega=0.06 393 ! b1=0. 394 ! a1=1. 395 ! a1inv=0.25*a1 396 ! b1inv=0.0002 397 !! 398 !! 399 !! ae=0.9*ae 396 400 397 401 ! Best config for norad 222 levels: 398 399 ! omega=0.06 400 ! a1=1. 401 ! b1=0. 402 ! a1inv=a1 403 ! be=1.1*be 404 ! ad = 0.0004 405 ! b1inv=0.00035 402 ! with yamada4 and alim at sqrt(zlev) 403 404 omega=0.06 405 a1=1. 406 b1=0. 407 a1inv=a1 408 be=1.1*be 409 ad = 0.0004 410 b1inv=0.00035 411 adalim=0. 412 413 b1inv=0.00025 406 414 407 415 ! Trying stuff : 416 417 ! omega=0.04 418 !! b1=0. 419 ! a1=1. 420 ! a1inv=a1 421 ! b1inv=0.0005689 422 !! be=1.1*be 423 !! ae=0.96*ae 424 408 425 409 426 ! omega=0.06 … … 431 448 if (ztv(ig,1)>=(ztv(ig,2))) then 432 449 alim_star(ig,1)=MAX((ztv(ig,1)-ztv(ig,2)),0.) & 433 & *sqrt(zlev(ig,2))450 ! & *sqrt(zlev(ig,2)) 434 451 ! & /sqrt(zlev(ig,2)) 435 !& *zlev(ig,2)452 & *zlev(ig,2) 436 453 lalim(ig)=2 437 454 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,1) … … 444 461 if (ztv(ig,l)>(ztv(ig,l+1)+0.) .and. ztv(ig,1)>=ztv(ig,l) .and. (alim_star(ig,l-1) .ne. 0.)) then ! .and. (zlev(ig,l+1) .lt. 1000.)) then 445 462 alim_star(ig,l)=MAX((ztv(ig,l)-ztv(ig,l+1)),0.) & 446 & *sqrt(zlev(ig,l+1)) 447 ! & *zlev(ig,2) 463 ! & *sqrt(zlev(ig,l+1)) 464 ! & /sqrt(zlev(ig,l+1)) 465 & *zlev(ig,l+1) 448 466 lalim(ig)=l+1 449 467 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,l) … … 562 580 if(zbuoy(ig,l) .gt. 0.) then 563 581 if(l .lt. lalim(ig)) then 564 detr_star(ig,l)=0. 582 583 ! detr_star(ig,l)=0. 584 detr_star(ig,l) = f_star(ig,l)*zdz* & 585 & adalim 565 586 else 566 587 … … 628 649 !--------------------------------------------------------------------------- 629 650 630 DO tic=0, 0! internal convergence loop651 DO tic=0,5 ! internal convergence loop 631 652 activetmp(:)=activecell(:) .and. f_star(:,l+1)>1.e-10 632 653 do ig=1,ngridmx … … 674 695 if(zbuoy(ig,l) .gt. 0.) then 675 696 if(l .lt. lalim(ig)) then 676 detr_star(ig,l)=0. 697 698 ! detr_star(ig,l)=0. 699 detr_star(ig,l) = f_star(ig,l)*zdz* & 700 & adalim 701 677 702 else 678 703 detr_star(ig,l) = f_star(ig,l)*zdz* & -
trunk/LMDZ.MARS/libf/phymars/vdifc.F
r529 r544 10 10 #endif 11 11 & ) 12 USE ioipsl_getincom13 12 IMPLICIT NONE 14 13 … … 369 368 c ** schema de diffusion turbulente dans la couche limite 370 369 c ---------------------------------------------------- 370 IF (tke_heat_flux .eq. 0.) THEN 371 371 372 372 CALL vdif_kc(ptimestep,g,pzlev,pzlay … … 374 374 & ,pq2,zkv,zkh,zq) 375 375 376 ! pt(:,:)=ph(:,:)*ppopsk(:,:) 377 ! CALL yamada4(ngrid,nlay,ptimestep,g,r,pplev,pt 378 ! s ,pzlev,pzlay,pu,pv,ph,zcdv_true,pq2,zkv,zkh,zkq,ust 379 ! s ,8) 376 ELSE 377 378 pt(:,:)=zh(:,:)*ppopsk(:,:) 379 CALL yamada4(ngrid,nlay,ptimestep,g,r,pplev,pt 380 s ,pzlev,pzlay,pu,pv,ph,zcdv_true,pq2,zkv,zkh,zkq,ust 381 s ,8) 382 383 ENDIF 380 384 381 385 if ((doubleq).and.(ngrid.eq.1)) then … … 523 527 524 528 z4st=4.*5.67e-8*ptimestep 529 IF (tke_heat_flux .eq. 0.) THEN 525 530 DO ig=1,ngrid 526 531 zdplanck(ig)=z4st*pemis(ig)*ptsrf(ig)*ptsrf(ig)*ptsrf(ig) 527 532 ENDDO 533 ELSE 534 zdplanck(:)=0. 535 ENDIF 528 536 529 537 ! calcul de zc et zd pour la couche top en prenant en compte le terme
Note: See TracChangeset
for help on using the changeset viewer.