Changeset 496
- Timestamp:
- Jan 11, 2012, 2:21:08 PM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 1 added
- 1 deleted
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r485 r496 1361 1361 .true. will call functions geticecover to yield a nice evolving CO2 cap as measured by Titus (mostly useful for mesoscale) 1362 1362 .false. is the default option, so this change is transparent to the casual user 1363 1364 == 11/01/2012 == AC 1365 >> Corrections to the thermals scheme following latest revisions of the related paper. Replaced the surface layer interpolator by a more 1366 complete routine, that will ultimately become a post-processing utility (and disappear from libf) and a subroutine in the MCD. -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r485 r496 333 333 REAL lmax_th_out(ngridmx),zmax_th(ngridmx) 334 334 REAL, SAVE :: wmax_th(ngridmx) 335 REAL hfmax_th(ngridmx)335 REAL, SAVE :: hfmax_th(ngridmx) 336 336 REAL pdu_th(ngridmx,nlayermx),pdv_th(ngridmx,nlayermx) 337 337 REAL pdt_th(ngridmx,nlayermx),pdq_th(ngridmx,nlayermx,nqmx) … … 342 342 REAL z_out ! height of interpolation between z0 and z1 [meters] 343 343 REAL ustar(ngridmx),tstar(ngridmx) ! friction velocity and friction potential temp 344 REAL L_mo(ngridmx) 344 REAL L_mo(ngridmx),wstar(ngridmx),vhf(ngridmx),vvv(ngridmx) 345 345 REAL zu2(ngridmx) 346 346 c======================================================================= … … 569 569 enddo 570 570 endif 571 else 572 zdtnlte(:,:)=0. 571 573 endif 572 574 … … 746 748 IF (zh(ig,1) .lt. tsurf(ig)) THEN 747 749 wmax_th(ig)=1. 748 ENDIF 750 hfmax_th(ig)=0.2 751 ELSE 752 wmax_th(ig)=0. 753 hfmax_th(ig)=0. 754 ENDIF 749 755 ENDDO 750 756 ENDIF … … 762 768 $ zdum1,zdum2,zdh,pdq,zflubid, 763 769 $ zdudif,zdvdif,zdhdif,zdtsdif,q2, 764 & zdqdif,zdqsdif,wmax_th,zcdv,zcdh )770 & zdqdif,zdqsdif,wmax_th,zcdv,zcdh,hfmax_th) 765 771 766 772 #ifdef MESOSCALE … … 853 859 lmax_th(:)=0 854 860 wmax_th(:)=0. 861 hfmax_th(:)=0. 855 862 lmax_th_out(:)=0. 856 863 end if … … 1803 1810 z_out=0. 1804 1811 if (calltherm .and. (z_out .gt. 0.)) then 1805 call surflayer_interpol(ngrid,nlayer,z0,g,zzlay,zu,zv,wmax_th 1806 & ,tsurf,zh,z_out,Teta_out,u_out,ustar,tstar,L_mo) 1807 1808 zu2(:)=sqrt(zu(:,1)*zu(:,1)+zv(:,1)*zv(:,1)) 1809 call WRITEDIAGFI(ngridmx,'sqrt(zu2)', 1810 & 'horizontal velocity norm','m/s', 1811 & 2,zu2) 1812 1813 call WRITEDIAGFI(ngridmx,'Teta_out', 1814 & 'potential temperature at z_out','K', 1815 & 2,Teta_out) 1816 call WRITEDIAGFI(ngridmx,'u_out', 1817 & 'horizontal velocity norm at z_out','m/s', 1818 & 2,u_out) 1819 call WRITEDIAGFI(ngridmx,'u*', 1820 & 'friction velocity','m/s', 1821 & 2,ustar) 1822 call WRITEDIAGFI(ngridmx,'teta*', 1823 & 'friction potential temperature','K', 1824 & 2,tstar) 1825 call WRITEDIAGFI(ngrid,'L', 1826 & 'Monin Obukhov length','m', 1827 & 2,L_mo) 1812 1813 call pbl_parameters(ngrid,nlayer,z0, 1814 & g,zzlay,zu,zv,wmax_th,hfmax_th,zmax_th,tsurf,zh,z_out, 1815 & Teta_out,u_out,ustar,tstar,wstar,L_mo,vhf,vvv) 1816 1828 1817 else 1829 1818 if((.not. calltherm).and.(z_out .gt. 0.)) then … … 1914 1903 z_out=0. 1915 1904 if (calltherm .and. (z_out .gt. 0.)) then 1916 call surflayer_interpol(ngrid,nlayer,z0,g,zzlay,zu,zv,wmax_th 1917 & ,tsurf,zh,z_out,Teta_out,u_out,ustar,tstar,L_mo) 1918 1919 zu2(:)=sqrt(zu(:,1)*zu(:,1)+zv(:,1)*zv(:,1)) 1920 call WRITEDIAGFI(ngridmx,'sqrt(zu2)', 1921 & 'horizontal velocity norm','m/s', 1922 & 0,zu2) 1923 1924 call WRITEDIAGFI(ngridmx,'Teta_out', 1925 & 'potential temperature at z_out','K', 1926 & 0,Teta_out) 1927 call WRITEDIAGFI(ngridmx,'u_out', 1928 & 'horizontal velocity norm at z_out','m/s', 1929 & 0,u_out) 1930 call WRITEDIAGFI(ngridmx,'u*', 1931 & 'friction velocity','m/s', 1932 & 0,ustar) 1933 call WRITEDIAGFI(ngridmx,'teta*', 1934 & 'friction potential temperature','K', 1935 & 0,tstar) 1905 1906 call pbl_parameters(ngrid,nlayer,z0, 1907 & g,zzlay,zu,zv,wmax_th,hfmax_th,zmax_th,tsurf,zh,z_out, 1908 & Teta_out,u_out,ustar,tstar,wstar,L_mo,vhf,vvv) 1909 1936 1910 else 1937 1911 if((.not. calltherm).and.(z_out .gt. 0.)) then … … 1947 1921 & 'hauteur du thermique','point', 1948 1922 & 0,lmax_th_out) 1923 call WRITEDIAGFI(ngridmx,'zmax_th', 1924 & 'hauteur du thermique','m', 1925 & 0,zmax_th) 1949 1926 call WRITEDIAGFI(ngridmx,'hfmax_th', 1950 1927 & 'maximum TH heat flux','K.m/s', -
trunk/LMDZ.MARS/libf/phymars/thermcell_main_mars.F90
r356 r496 111 111 REAL zdz,zbuoy(ngridmx,nlayermx),zw2m 112 112 LOGICAL active(ngridmx),activetmp(ngridmx) 113 REAL a1,b1,ae,be,ad,bd 113 REAL a1,b1,ae,be,ad,bd,fdfu 114 114 INTEGER tic 115 115 … … 304 304 linter(:)=1. 305 305 306 ! -------------------------------------------------------------------------- 307 ! -------------- MAIN PARAMETERS FOR THERMALS MODEL ------------------------ 308 ! -------------- see thermiques.pro and getfit.py ------------------------- 309 306 310 ! a1=2.5 ; b1=0.0015 ; ae=0.045 ; be = 0.6 ! svn baseline 307 311 308 a1=1.60226 ; b1=0.0006 ; ae=0.0454 ; be = 0.57 !improved fits 309 ad = 0.0005114 ; bd = -0.662 312 ! Using broad downdraft selection 313 ! a1=1.60226 ; b1=0.0006 ; ae=0.0454 ; be = 0.57 314 ! ad = 0.0005114 ; bd = -0.662 315 ! fdfu = -1.9 316 317 ! Using conditional sampling downdraft selection 318 a1=1.4716 ; b1=0.0005698 ; ae=0.03683 ; be = 0.57421 319 ad = 0.00048088 ; bd = -0.6697 320 fdfu = -1.3 321 322 ! -------------------------------------------------------------------------- 323 ! -------------------------------------------------------------------------- 324 ! -------------------------------------------------------------------------- 310 325 311 326 ! Initialisation des variables entieres … … 513 528 !--------------------------------------------------------------------------- 514 529 515 DO tic=0, 6! internal convergence loop530 DO tic=0,1 ! internal convergence loop 516 531 activetmp(:)=active(:) .and. f_star(:,l+1)>1.e-10 517 532 do ig=1,ngridmx … … 640 655 ! ================= FIN PLUME =============================================== 641 656 ! =========================================================================== 642 643 657 644 658 ! =========================================================================== … … 1089 1103 do l=1,lmax(ig) 1090 1104 if(zlay(ig,l) .le. 0.7*zmax(ig)) then 1091 fm_down(ig,l) =-1.9*fm(ig,l) 1105 fm_down(ig,l) =fm(ig,l)* & 1106 & max(fdfu,-3*max(0.,(zlay(ig,l)/zmax(ig)))-0.9) 1092 1107 endif 1093 1108 … … 1102 1117 endif 1103 1118 1104 ! if(zlay(ig,l) .le. 0.06*zmax(ig)) then1105 ! ztvd(ig,l)=ztv(ig,l)*max(0.,(zlay(ig,l)/zmax(ig))/19.231 + 0.9938)1106 ! elseif(zlay(ig,l) .le. 0.6*zmax(ig)) then1107 ! ztvd(ig,l)=ztv(ig,l)*max(0.,(zlay(ig,l)/zmax(ig)-0.075)/187.931 + 0.9982)1108 ! else1109 !! elseif(zlay(ig,l) .le. 0.7*zmax(ig)) then1110 ! ztvd(ig,l)=ztv(ig,l)*max(0.,(zlay(ig,l)/zmax(ig) -0.60)/(-1333) + 1.00025)1111 !! else1112 !! ztvd(ig,l)=ztv(ig,l)1113 ! endif1114 1119 1115 1120 enddo … … 1126 1131 if(lmax(ig) .gt. 1) then 1127 1132 ! No downdraft in the very-near surface layer, we begin at k=3 1128 do k=2,lmax(ig) 1133 1134 do k=3,lmax(ig) 1129 1135 zdthladj_down(ig,k)=(1./masse(ig,k))*(fm_down(ig,k+1)*ztv(ig,k+1)- & 1130 1136 & fm_down(ig,k)*ztv(ig,k)+fm_down(ig,k)*ztvd(ig,k)-fm_down(ig,k+1)*ztvd(ig,k+1)) … … 1332 1338 do ig=1,ngridmx 1333 1339 pdtadj(ig,l)=(zdthladj(ig,l)+zdthladj_down(ig,l))*zpopsk(ig,l) 1340 ! pdtadj(ig,l)=zdthladj(ig,l)*zpopsk(ig,l) 1334 1341 enddo 1335 1342 enddo -
trunk/LMDZ.MARS/libf/phymars/vdif_cd.F
r329 r496 148 148 ! zu2=MAX(pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1),0.25*wmax(ig)**2) 149 149 ! zu2=pu(ig,1)*pu(ig,1) + pv(ig,1)*pv(ig,1) 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) + (0.5*wmax(ig))**2150 zu2(ig)=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) + (0.5*wmax(ig))**2 152 152 153 153 ! we add the wmax to simulate -
trunk/LMDZ.MARS/libf/phymars/vdifc.F
r473 r496 5 5 $ pdufi,pdvfi,pdhfi,pdqfi,pfluxsrf, 6 6 $ pdudif,pdvdif,pdhdif,pdtsrf,pq2, 7 $ pdqdif,pdqsdif,wmax,zcdv_true,zcdh_true )7 $ pdqdif,pdqsdif,wmax,zcdv_true,zcdh_true,hfmax) 8 8 IMPLICIT NONE 9 9 … … 44 44 REAL pplay(ngrid,nlay),pplev(ngrid,nlay+1) 45 45 REAL pzlay(ngrid,nlay),pzlev(ngrid,nlay+1) 46 REAL pu(ngrid,nlay),pv(ngrid,nlay),ph(ngrid,nlay) 46 REAL pu(ngrid,nlay),pv(ngrid,nlay),ph(ngrid,nlay),pt(ngrid,nlay) 47 47 REAL ptsrf(ngrid),pemis(ngrid) 48 48 REAL pdufi(ngrid,nlay),pdvfi(ngrid,nlay),pdhfi(ngrid,nlay) … … 60 60 c Argument added to account for subgrid gustiness : 61 61 62 REAL wmax(ngridmx) 62 REAL wmax(ngridmx), hfmax(ngridmx) 63 63 64 64 c Traceurs : … … 78 78 REAL z4st,zdplanck(ngridmx) 79 79 REAL zkv(ngridmx,nlayermx+1),zkh(ngridmx,nlayermx+1) 80 REAL zkq(ngridmx,nlayermx+1) 80 81 REAL zcdv(ngridmx),zcdh(ngridmx) 81 82 REAL zcdv_true(ngridmx),zcdh_true(ngridmx) ! drag coeff are used by the LES to recompute u* and hfx … … 114 115 REAL kmixmin 115 116 116 117 117 c Mass-variation scheme : 118 118 c ~~~~~~~ … … 124 124 REAL pdtc(ngrid,nlayermx) 125 125 REAL zhs(ngridmx,nlayermx) 126 REAL cpice,ccond 127 SAVE ccond,cpice 128 DATA cpice /1000./ 126 REAL ccond 127 SAVE ccond 129 128 130 129 c Theta_m formulation for mass-variation scheme : … … 320 319 321 320 IF (callrichsl) THEN 322 zcdv(:)=zcdv_true(:)*sqrt(zu2(:)+(0.7*wmax(:))**2) ! subgrid gustiness added by quadratic interpolation with a coeff beta 323 zcdh(:)=zcdh_true(:)*sqrt(zu2(:)+(1.2*wmax(:))**2) ! LES comparisons. This parameter is linked to the thermals settings) 321 zcdv(:)=zcdv_true(:)*sqrt(zu2(:)+(6.*hfmax(:))**2) ! subgrid gustiness added by quadratic interpolation with a coeff beta 322 zcdh(:)=zcdh_true(:)*sqrt(zu2(:)+(10.*hfmax(:))**2) ! LES comparisons. This parameter is linked to the thermals settings) 323 324 ! zcdv(:)=zcdv_true(:)*sqrt(zu2(:)+(0.7*wmax(:))**2) ! subgrid gustiness added by quadratic interpolation with a coeff beta 325 ! zcdh(:)=zcdh_true(:)*sqrt(zu2(:)+(1.2*wmax(:))**2) ! LES comparisons. This parameter is linked to the thermals settings) 326 327 ust(:)=sqrt(zcdv_true(:))*sqrt(zu2(:)+(6.*hfmax(:))**2) 328 tst(:)=(ph(:,1)-ptsrf(:))*zcdh(:)/ust(:) 324 329 ! ust(:)=sqrt(zcdv_true(:))*sqrt(zu2(:)+(0.7*wmax(:))**2) 325 330 ! tst(:)=(ph(:,1)-ptsrf(:))*zcdh(:)/ust(:) … … 342 347 ! & 'heat drag','no units', 343 348 ! & 2,zcdh_true) 344 ! call WRITEDIAGFI(ngridmx,'u *',349 ! call WRITEDIAGFI(ngridmx,'ust', 345 350 ! & 'friction velocity','m/s',2,ust) 346 ! call WRITEDIAGFI(ngridmx,' T*',351 ! call WRITEDIAGFI(ngridmx,'tst', 347 352 ! & 'friction temperature','K',2,tst) 348 353 ! call WRITEDIAGFI(ngridmx,'rm-1', … … 355 360 c ** schema de diffusion turbulente dans la couche limite 356 361 c ---------------------------------------------------- 357 358 362 ! 363 CALL vdif_kc(ptimestep,g,pzlev,pzlay 359 364 & ,pu,pv,ph,zcdv_true 360 365 & ,pq2,zkv,zkh,zq) 366 ! 367 ! pt(:,:)=ph(:,:)*ppopsk(:,:) 368 ! CALL yamada4(ngrid,nlay,ptimestep,g,r,pplev,pt 369 ! s ,pzlev,pzlay,pu,pv,ph,zcdv_true,pq2,zkv,zkh,zkq,ust 370 ! s ,8) 361 371 362 372 if ((doubleq).and.(ngrid.eq.1)) then
Note: See TracChangeset
for help on using the changeset viewer.