Changeset 284
- Timestamp:
- Sep 7, 2011, 3:20:37 PM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r283 r284 879 879 TODO: * calibrate thermal inertia and ice albedo 880 880 * have a look at subgrid-scale ice with dryness ? 881 882 == 07/09/2011 == AC 883 884 - Added new flag for the Richardson-based surface layer : 885 886 callrichsl, can be changed in callphys.def 887 888 One should always use the thermals model when using this surface layer model. 889 Somes cases (weakly unstable with low winds), when not using thermals, won't be well represented by the 890 Richardson surface layer. This stands for Mesoscale and Gcm but not for LES model. 891 892 Correct configs : 893 894 callrichsl = .true. 895 calltherm = .true. 896 897 callrichsl = .false. 898 calltherm = .false. 899 900 callrichsl = .false. 901 calltherm = .true. 902 903 Previously unstable config : 904 905 callrichsl = .true. 906 calltherm = .false. 907 908 - To be able to run without thermals and with the new surface layer, a modification has been made to 909 physiq.F to account for gustiness in GCM and MESOSCALE for negative Richardson, so that : 910 911 callrichsl = .true. 912 calltherm = .false. 913 914 can now be used without problems, but is not recommended. 915 916 - Consequently, callrichsl = .false. is now the default configuration for thermals. 917 918 We recall the available options in callphys.def for thermals : 919 920 outptherm = BOOLEAN (.false. by default) : outputs thermals related quantities (lots of diagfi) 921 nsplit_thermals = INTEGER (50 by default in gcm, 2 in mesoscale) : subtimestep for thermals model. 922 It is recommended to use at least 40 in the gcm, and at least 2 in the mesoscale. 923 The user can lower these values but should check it's log for anomalies or errors regarding 924 tracer transport in the thermals, or "granulosity" in the outputs for wmax, lmax and hfmax. 925 -
trunk/LMDZ.MARS/libf/phymars/callkeys.h
r234 r284 12 12 & ,callg2d,linear,rayleigh,tracer,active,doubleq,submicron & 13 13 & ,lifting,callddevil,scavenging,sedimentation,activice,water & 14 & ,caps,photochem,calltherm,outptherm,call slope14 & ,caps,photochem,calltherm,outptherm,callrichsl,callslope 15 15 16 16 COMMON/callkeys_i/iradia,iaervar,iddist,ilwd,ilwb,ilwn,ncouche & … … 24 24 & ,callnirco2,callnlte,callthermos,callconduct, & 25 25 & calleuv,callmolvis,callmoldiff,thermochem,thermoswater & 26 & ,calltherm,outptherm,call slope26 & ,calltherm,outptherm,callrichsl,callslope 27 27 28 28 -
trunk/LMDZ.MARS/libf/phymars/calltherm_interface.F90
r185 r284 71 71 REAL buoyancyEst(ngridmx,nlayermx) 72 72 REAL hfmax(ngridmx),wmax(ngridmx) 73 74 REAL tstart,tstop75 73 76 74 !--------------------------------------------------------- … … 135 133 endif 136 134 137 call cpu_time(tstart)138 139 135 CALL calltherm_mars(ptimestep,zzlev,zzlay & 140 136 & ,pplay,pplev,pphi & … … 146 142 & ,zpopsk,ztla,heatFlux,heatFlux_down & 147 143 & ,buoyancyOut,buoyancyEst,hfmax,wmax) 148 call cpu_time(tstop)149 print*,'TOTAL elapsed time in thermals : ',tstop-tstart150 151 144 152 145 ! Accumulation des tendances. On n'accumule pas les quantités de traceurs car celle ci n'a pas du changer -
trunk/LMDZ.MARS/libf/phymars/calltherm_mars.F90
r277 r284 99 99 r_aspect_thermals=0.7 100 100 #else 101 nsplit_thermals= 40101 nsplit_thermals=50 102 102 r_aspect_thermals=2. 103 103 #endif -
trunk/LMDZ.MARS/libf/phymars/inifis.F
r283 r284 252 252 stop 253 253 endif 254 255 write(*,*) "call Richardson-based surface layer ?" 256 callrichsl=.false. ! default value 257 call getin("callrichsl",callrichsl) 258 write(*,*) " callrichsl = ",callrichsl 254 259 255 260 write(*,*) "call CO2 condensation ?" -
trunk/LMDZ.MARS/libf/phymars/meso_inc/meso_inc_les.F
r268 r284 1 DO ig=1,ngrid 2 !! sensible heat flux in W/m2 3 ! hfx(ig) = zflubid(ig)-capcal(ig)*zdtsdif(ig) 1 if (callrichsl .eq. .false.) then 2 3 DO ig=1,ngrid 4 !! sensible heat flux in W/m2 5 6 hfx(ig) = zflubid(ig)-capcal(ig)*zdtsdif(ig) 7 8 !! u star in similarity theory in m/s 9 ust(ig) = 0.4 10 . * sqrt( pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) ) 11 . / log( 1.E+0 + zzlay(ig,1)/z0_default ) 12 ENDDO 13 14 else 15 16 DO ig=1,ngrid 4 17 5 18 ! New SL parametrization, correct formulation for hfx : 6 19 7 hfx(ig) = (pplay(ig,1)/(r*pt(ig,1)))*cpp 8 & *sqrt((pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1))) 9 & *zcdh(ig)*(tsurf(ig)-zh(ig,1)) 20 hfx(ig) = (pplay(ig,1)/(r*pt(ig,1)))*cpp 21 & *sqrt(pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) 22 & + (1.0*wmax_th(ig))**2) 23 & *zcdh(ig)*(tsurf(ig)-zh(ig,1)) 10 24 11 !! u star in similarity theory in m/s12 ! ust(ig) = 0.413 ! . * sqrt( pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) )14 ! . / log( 1.E+0 + zzlay(ig,1)/z0_default )15 25 16 26 ! New SL parametrization, ust is more accurately computed in vdif_cd : 17 ust(ig) = sqrt(zcdv(ig)*(pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1))) 27 ust(ig) = sqrt(zcdv(ig)* 28 & (pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) + (1.0*wmax_th(ig))**2) 29 & ) 18 30 19 ENDDO 31 ENDDO 32 33 endif !of if callrichsl 34 20 35 ! write (*,*) 'PHYS HFX cp zdts', hfx(100), zflubid(100), 21 36 ! . capcal(100), -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r283 r284 694 694 enddo 695 695 696 c Treatment of a special case : using new surface layer (Richardson based) 697 c without using the thermals in gcm and mesoscale can yield problems in 698 c weakly unstable situations when winds are near to 0. For those cases, we add 699 c a unit subgrid gustiness. Remember that thermals should be used we using the 700 c Richardson based surface layer model. 701 702 #ifdef MESOSCALE 703 IF (flag_LES .eq. .false.) THEN 704 IF ((calltherm .eq. .false.) .and. (callrichsl .eq. .true.)) THEN 705 DO ig=1, ngridmx 706 IF (zh(ig,1) .lt. tsurf(ig)) THEN 707 wmax_th(ig)=1. 708 ENDIF 709 ENDDO 710 ENDIF 711 ENDIF 712 #else 713 IF ((calltherm .eq. .false.) .and. (callrichsl .eq. .true.)) THEN 714 DO ig=1, ngridmx 715 IF (zh(ig,1) .lt. tsurf(ig)) THEN 716 wmax_th(ig)=1. 717 ENDIF 718 ENDDO 719 ENDIF 720 #endif 721 696 722 c Calling vdif (Martian version WITH CO2 condensation) 697 723 CALL vdifc(ngrid,nlayer,nq,co2ice,zpopsk, … … 1433 1459 call WRITEDIAGFI(ngrid,"co2ice","co2 ice thickness","kg.m-2",2, 1434 1460 & co2ice) 1461 1435 1462 c call WRITEDIAGFI(ngrid,"temp7","temperature in layer 7", 1436 1463 c & "K",2,zt(1,7)) 1437 call WRITEDIAGFI(ngrid,"fluxsurf_lw","fluxsurf_lw","W.m-2",2,1438 & fluxsurf_lw)1439 call WRITEDIAGFI(ngrid,"fluxsurf_sw","fluxsurf_sw","W.m-2",2,1440 & fluxsurf_sw_tot)1441 call WRITEDIAGFI(ngrid,"fluxtop_lw","fluxtop_lw","W.m-2",2,1442 & fluxtop_lw)1443 call WRITEDIAGFI(ngrid,"fluxtop_sw","fluxtop_sw","W.m-2",2,1444 & fluxtop_sw_tot)1464 c call WRITEDIAGFI(ngrid,"fluxsurf_lw","fluxsurf_lw","W.m-2",2, 1465 c & fluxsurf_lw) 1466 c call WRITEDIAGFI(ngrid,"fluxsurf_sw","fluxsurf_sw","W.m-2",2, 1467 c & fluxsurf_sw_tot) 1468 c call WRITEDIAGFI(ngrid,"fluxtop_lw","fluxtop_lw","W.m-2",2, 1469 c & fluxtop_lw) 1470 c call WRITEDIAGFI(ngrid,"fluxtop_sw","fluxtop_sw","W.m-2",2, 1471 c & fluxtop_sw_tot) 1445 1472 call WRITEDIAGFI(ngrid,"temp","temperature","K",3,zt) 1446 1473 call WRITEDIAGFI(ngrid,"u","Zonal wind","m.s-1",3,zu) … … 1734 1761 endif 1735 1762 1736 ! ---1737 1738 1739 1740 1763 if(calltherm) then 1741 1764 -
trunk/LMDZ.MARS/libf/phymars/vdif_cd.F
r276 r284 36 36 37 37 #include "comcstfi.h" 38 #include "callkeys.h" 38 39 39 40 c Arguments: … … 87 88 c ------------------ 88 89 89 reynolds(:)=0.90 91 90 c Original formulation : 92 91 93 c DO ig=1,ngrid 94 c z1=1.E+0 + pz(ig,1)/pz0(ig) 95 c zcd0=karman/log(z1) 96 c zcd0=zcd0*zcd0 97 c pcdv(ig)=zcd0 98 c pcdh(ig)=zcd0 99 c ENDDO 92 if(callrichsl .eq. .false.) then 93 94 DO ig=1,ngrid 95 z1=1.E+0 + pz(ig,1)/pz0(ig) 96 zcd0=karman/log(z1) 97 zcd0=zcd0*zcd0 98 pcdv(ig)=zcd0 99 pcdh(ig)=zcd0 100 ENDDO 100 101 101 102 ! print*,'old : cd,ch; ',pcdv,pcdh 103 else 104 105 reynolds(:)=0. 102 106 103 107 c New formulation (AC) : … … 224 228 ! Some useful diagnostics : 225 229 226 ! 230 ! call WRITEDIAGFI(ngrid,'RiB', 227 231 ! & 'Bulk Richardson nb','no units', 228 232 ! & 2,rib) … … 241 245 242 246 247 endif !of if call richardson surface layer 248 243 249 RETURN 244 250 END -
trunk/LMDZ.MARS/libf/phymars/vdifc.F
r283 r284 86 86 REAL zc(ngridmx,nlayermx),zd(ngridmx,nlayermx) 87 87 REAL zcst1 88 REAL zu2 88 REAL zu2(ngridmx) 89 89 90 90 EXTERNAL SSUM,SCOPY … … 234 234 & ,zcdv_true,zcdh_true) 235 235 236 DO ig=1,ngrid 237 238 zu2=pu(ig,1)*pu(ig,1)+pv(ig,1)*pv(ig,1)239 & +(1.*wmax( ig))**2 ! subgrid gustiness added by quadratic interpolation with a coeff beta, here beta=1. (tuned from236 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 from 240 240 ! LES comparisons. This parameter is linked to the thermals settings) 241 242 zcdv(ig)=zcdv_true(ig)*sqrt(zu2) ! 1 / bulk aerodynamic momentum conductance 243 zcdh(ig)=zcdh_true(ig)*sqrt(zu2) ! 1 / bulk aerodynamic heat conductance 241 ELSE 242 zu2(:)=pu(:,1)*pu(:,1)+pv(:,1)*pv(:,1) 243 ENDIF 244 245 zcdv(:)=zcdv_true(:)*sqrt(zu2(:)) ! 1 / bulk aerodynamic momentum conductance 246 zcdh(:)=zcdh_true(:)*sqrt(zu2(:)) ! 1 / bulk aerodynamic heat conductance 244 247 ! these are the quantities to be looked at when comparing surface layers of different models 245 ENDDO246 248 247 249 ! Some usefull diagnostics for the new surface layer parametrization : … … 254 256 ! & 2,zcdh_true) 255 257 ! call WRITEDIAGFI(ngridmx,'u*', 256 ! & 'friction velocity','m/s',257 ! & 2,sqrt(zcdv_true(:))*sqrt(zu2 ))258 ! & 'friction velocity','m/s', 259 ! & 2,sqrt(zcdv_true(:))*sqrt(zu2(:))) 258 260 ! call WRITEDIAGFI(ngridmx,'T*', 259 261 ! & 'friction temperature','K', … … 479 481 c ---------------------------------------------------------------- 480 482 DO ig=1,ngrid 481 zu2 =zu(ig,1)*zu(ig,1)+zv(ig,1)*zv(ig,1)482 zcdv(ig)=zcdv_true(ig)*sqrt(zu2 )483 zcdh(ig)=zcdh_true(ig)*sqrt(zu2 )483 zu2(ig)=zu(ig,1)*zu(ig,1)+zv(ig,1)*zv(ig,1) 484 zcdv(ig)=zcdv_true(ig)*sqrt(zu2(ig)) 485 zcdh(ig)=zcdh_true(ig)*sqrt(zu2(ig)) 484 486 ENDDO 485 487
Note: See TracChangeset
for help on using the changeset viewer.