Changeset 284 for trunk/LMDZ.MARS/libf
- Timestamp:
- Sep 7, 2011, 3:20:37 PM (13 years ago)
- Location:
- trunk/LMDZ.MARS/libf/phymars
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
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.