Changeset 2047
- Timestamp:
- Nov 29, 2018, 4:47:07 PM (6 years ago)
- Location:
- trunk/LMDZ.VENUS/libf/phyvenus
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.VENUS/libf/phyvenus/YOEGWD.h
r780 r2047 6 6 real :: GFRCRIT,GKWAKE,GRCRIT,GVCRIT,GKDRAG,GKLIFT 7 7 real :: GHMAX,GRAHILO,GSIGCR,GSSEC,GTSEC,GVSEC 8 real :: TAUBS 9 integer :: LEVBS 8 10 COMMON/YOEGWD/ GFRCRIT,GKWAKE,GRCRIT,GVCRIT,GKDRAG,GKLIFT & 9 & ,GHMAX,GRAHILO,GSIGCR,NKTOPG,NTOP,GSSEC,GTSEC,GVSEC 11 & ,GHMAX,GRAHILO,GSIGCR,NKTOPG,NTOP,GSSEC,GTSEC,GVSEC & 12 & ,TAUBS,LEVBS 10 13 -
trunk/LMDZ.VENUS/libf/phyvenus/drag_noro.F
r1530 r2047 7 7 e t, u, v, 8 8 s pulow, pvlow, pustr, pvstr, 9 s d_t, d_u, d_v) 9 s d_t, d_u, d_v, 10 s blustr,blvstr,pnlow,zeff,zbl, 11 s ptau,tau0,knu2,kbreak) 10 12 c 11 13 use dimphy … … 86 88 REAL t(nlon,nlev), u(nlon,nlev), v(nlon,nlev) 87 89 REAL d_t(nlon,nlev), d_u(nlon,nlev), d_v(nlon,nlev) 90 REAL blustr(nlon),blvstr(nlon),pnlow(nlon),zeff(nlon),zbl(nlon) 91 REAL knu2(nlon),kbreak(nlon) 92 REAL ztau(klon,klev+1), ptau(klon,klev), tau0(klon) 88 93 c 89 94 INTEGER i, k, kgwd, kdx(nlon), ktest(nlon) 95 INTEGER ikenvh(nlon) 96 INTEGER iknu2(nlon) 97 INTEGER ikbreak(nlon) 90 98 c 91 99 c LOCAL VARIABLES: … … 135 143 DO i = 1, klon 136 144 zgeom(i,k) = pgeop(i,klev-k+1)/RG 137 145 zn2(i,k) = pn2(i,klev-k+1) 138 146 ENDDO 139 147 ENDDO … … 147 155 . pmea, pstd, psig, pgam, pthe, ppic,pval, 148 156 . pulow,pvlow, 149 . pdudt,pdvdt,pdtdt) 157 . pdudt,pdvdt,pdtdt, 158 . blustr,blvstr,pnlow,zeff,ikenvh, 159 . ztau,iknu2,ikbreak) 160 161 zbl(:) = real(klev-ikenvh(:)) 162 knu2(:) = real(klev-iknu2(:)) 163 kbreak(:) = real(klev-ikbreak(:)) 164 tau0 = ztau(:,klev+1) 165 150 166 C 151 167 C COMPUTE INCREMENTS AND STRESS FROM TENDENCIES … … 153 169 DO k = 1, klev 154 170 DO i = 1, klon 171 ptau(i,klev+1-k) = ztau(i,k) 155 172 d_u(i,klev+1-k) = dtime*pdudt(i,k) 156 173 d_v(i,klev+1-k) = dtime*pdvdt(i,k) -
trunk/LMDZ.VENUS/libf/phyvenus/gwprofil.F
r1530 r2047 3 3 * , kgwd ,kdx , ktest 4 4 * , kkcrit, kkcrith, kcrit , kkenvh, kknu,kknu2 5 * , kkbreak 5 6 * , paphm1, prho , pstab , ptfr , pvph , pri , ptau 6 7 * , pdmod , pnu , psig ,pgamma, pstd, ppic,pval) … … 50 51 integer kkcrit(nlon),kkcrith(nlon),kcrit(nlon) 51 52 * ,kdx(nlon),ktest(nlon) 52 * ,kkenvh(nlon),kknu(nlon),kknu2(nlon) 53 * ,kkenvh(nlon),kknu(nlon),kknu2(nlon),kkbreak(nlon) 53 54 C 54 55 real paphm1(nlon,nlev+1), pstab(nlon,nlev+1), … … 128 129 C level 129 130 C 130 131 132 131 133 do 440 jk=klev,1,-1 132 134 … … 212 214 531 continue 213 215 216 c Yo, this is Venus. 217 do jl=kidia,kfdia 218 do jk=klev,1,-1 219 if(ktest(jl).eq.1)then 220 if(jk.lt.kkbreak(jl)) ptau(jl,jk)=0.0 221 endif 222 enddo 223 enddo 224 225 226 ! Venus: resolve waves 227 do jk=klev,1,-1 228 do jl=kidia,kfdia 229 if(ktest(jl).eq.1)then 230 ! if surface stress greater than threshold 231 if (ztau(jl,klev+1) .ge. taubs) then 232 ! then enforce same stress in the atmosphere up to the predefined level 233 if ((jk.gt.levbs)) then 234 ptau(jl,jk) = ztau(jl,klev+1) 235 ! and zero above 236 elseif (jk.le.levbs) then 237 ptau(jl,jk) = 0. 238 endif 239 ! else 240 !if (jk.le.klev-1) ptau(jl,jk) = 0. 241 ! ptau(jl,jk) = 0. 242 endif 243 endif 244 enddo 245 enddo 246 247 214 248 215 249 123 format(i4,1x,20(f6.3,1x)) -
trunk/LMDZ.VENUS/libf/phyvenus/gwstress.F
r1530 r2047 5 5 * , prho , pstab , pvph , pstd, psig 6 6 * , pmea , ppic , pval , ptfr , ptau 7 * , pgeom1 , pgamma , pd1 , pd2 , pdmod , pnu ) 7 * , pgeom1 , pgamma , pd1 , pd2 , pdmod , pnu 8 * , zeff ) 8 9 c 9 10 c**** *gwstress* … … 74 75 real pmea(nlon),ppic(nlon),pval(nlon) 75 76 real pdmod(nlon) 77 real zeff(nlon) ! effective height seen by the flow when there is blocking 76 78 c 77 79 c----------------------------------------------------------------------- … … 79 81 c* 0.2 local arrays 80 82 c ------------ 81 c zeff--real: effective height seen by the flow when there is blocking82 83 83 84 integer jl 84 real zeff85 85 c 86 86 c----------------------------------------------------------------------- … … 101 101 c 102 102 c 103 zeff = 0. 103 104 do 301 jl=kidia,kfdia 104 105 if(ktest(jl).eq.1) then … … 106 107 c effective mountain height above the blocked flow 107 108 108 zeff =ppic(jl)-pval(jl)109 zeff(jl)=ppic(jl)-pval(jl) 109 110 if(kkenvh(jl).lt.klev)then 110 zeff =amin1(GFRCRIT*pvph(jl,klev+1)/sqrt(pstab(jl,klev+1))111 c ,zeff )111 zeff(jl)=amin1(GFRCRIT*pvph(jl,klev+1)/sqrt(pstab(jl,klev+1)) 112 c ,zeff(jl)) 112 113 endif 113 114 … … 116 117 * *psig(jl)*pdmod(jl)/4./pstd(jl) 117 118 * *pvph(jl,klev+1)*sqrt(pstab(jl,klev+1)) 118 * *zeff **2119 * *zeff(jl)**2 119 120 120 121 -
trunk/LMDZ.VENUS/libf/phyvenus/orodrag.F
r1530 r2047 6 6 c outputs 7 7 r , pulow,pvlow 8 r , pvom,pvol,pte ) 8 r , pvom,pvol,pte 9 r , blustr,blvstr,pnlow,zeff,ikenvh 10 c 3D and temporary outputs 11 r , ztau,iknu2,ikbreak) 9 12 10 13 use dimphy … … 110 113 * pgeom1(nlon,nlev),pn2m1(nlon,nlev), 111 114 * papm1(nlon,nlev), 112 * paphm1(nlon,nlev+1) 115 * paphm1(nlon,nlev+1), 116 * pnlow(nlon), ! low level stability 117 * blustr(nlon),blvstr(nlon), ! blocked stress 118 * zeff(nlon) ! effective height 119 113 120 c 114 121 integer kdx(nlon),ktest(nlon) … … 123 130 * iknu(klon), 124 131 * iknu2(klon), 132 * ikbreak(klon), 125 133 * ikcrit(klon), 126 134 * ikhlim(klon) … … 199 207 * ( nlon, nlev , ktest 200 208 * , ikcrit, ikcrith, icrit, isect, ikhlim, ikenvh,iknu,iknu2 209 * , ikbreak 201 210 * , paphm1, papm1 , pum1 , pvm1 , ptm1 , pgeom1, zstab, pstd 202 211 * , zrho , zri , ztau , zvph , zpsi, zzdep 203 212 * , pulow, pvlow 204 213 * , pthe,pgam,pmea,ppic,pval,znu ,zd1, zd2, zdmod ) 214 215 216 pnlow(:) = sqrt(zstab(:,klev+1)) 205 217 206 218 c … … 221 233 * , zrho , zstab, zvph , pstd, psig, pmea, ppic, pval 222 234 * , ztfr , ztau 223 * , pgeom1,pgam,zd1,zd2,zdmod,znu )235 * , pgeom1,pgam,zd1,zd2,zdmod,znu,zeff) 224 236 225 237 c … … 236 248 * ( nlon , nlev 237 249 * , kgwd , kdx , ktest 238 * , ikcrit, ikcrith, icrit 239 * ,iknu2 , paphm1, zrho , zstab , ztfr, zvph250 * , ikcrit, ikcrith, icrit , ikenvh, iknu 251 * ,iknu2 , ikbreak, paphm1, zrho , zstab , ztfr , zvph 240 252 * , zri , ztau 241 253 … … 259 271 zdvdt(jl)=0.0 260 272 zdtdt(jl)=0.0 273 blustr(jl)=0.0 274 blvstr(jl)=0.0 261 275 510 continue 262 276 c … … 294 308 rover=0.25 295 309 zforc=sqrt(zdudt(ji)**2+zdvdt(ji)**2) 296 ztend=sqrt(pum1(ji,jk)**2+pvm1(ji,jk)**2)/ztmst 310 ztend=sqrt(pum1(ji,jk)**2+pvm1(ji,jk)**2)/ztmst 297 311 298 312 if(zforc.ge.rover*ztend)then … … 330 344 zdudt(ji)=zdudt(ji)*(zbet/(1.+zbet)) 331 345 zdvdt(ji)=zdvdt(ji)*(zbet/(1.+zbet)) 346 347 c output blocked flow stress 348 blustr(ji) = blustr(ji) 349 . +zdudt(ji)*(paphm1(ji,jk+1)-paphm1(ji,jk))/rg 350 blvstr(ji) = blvstr(ji) 351 . +zdvdt(ji)*(paphm1(ji,jk+1)-paphm1(ji,jk))/rg 352 353 332 354 end if 333 355 pvom(ji,jk)=zdudt(ji) -
trunk/LMDZ.VENUS/libf/phyvenus/orosetup.F
r1530 r2047 2 2 * ( nlon , nlev , ktest 3 3 * , kkcrit, kkcrith, kcrit, ksect , kkhlim 4 * , kkenvh, kknu , kknu2 4 * , kkenvh, kknu , kknu2, kkbreak 5 5 * , paphm1, papm1 , pum1 , pvm1, ptm1, pgeom1, pstab, pstd 6 6 * , prho , pri , ptau, pvph, ppsi, pzdep … … 109 109 integer kkcrit(nlon),kkcrith(nlon),kcrit(nlon),ksect(nlon), 110 110 * kkhlim(nlon),ktest(nlon),kkenvh(nlon) 111 111 integer kkbreak(nlon) 112 112 c 113 113 real paphm1(nlon,klev+1),papm1(nlon,klev),pum1(nlon,klev), … … 179 179 kknub(jl) =klev 180 180 kknul(jl) =klev 181 kkbreak(jl) =klev + 1 181 182 pgam(jl) =max(pgam(jl),gtsec) 182 183 ll1(jl,klev+1)=.false. … … 190 191 ENDDO 191 192 ENDDO 193 194 c VENUS: define break for subcritical stress 195 c ---------------------------- 196 do jk=klev,ilevh,-1 197 do jl=kidia,kfdia 198 if(ktest(jl).eq.1) then 199 !zhgeo=pgeom1(jl,jk)/rg 200 !!zhcrit(jl,jk)=ppic(jl) 201 !zhcrit(jl,jk)=amin1(ppic(jl)-pmea(jl),pmea(jl)-pval(jl)) 202 !ll1(jl,jk)=(zhgeo.gt.zhcrit(jl,jk)) 203 !if(ll1(jl,jk) .neqv. ll1(jl,jk+1)) then 204 ! kkbreak(jl)=jk 205 !endif 206 207 !if (paphm1(jl,jk) .ge. 7.e6) kkbreak(jl)=jk 208 !kkbreak(jl) = klev - 2 ! gwd1103 209 !kkbreak(jl) = klev - 4 ! gwd1104 210 !kkbreak(jl) = klev - 3 ! gwd1105 211 212 endif 213 enddo 214 enddo 215 192 216 c 193 217 c* define top of low level flow … … 214 238 do 2005 jl=kidia,kfdia 215 239 if(ktest(jl).eq.1) then 216 zhcrit(jl,jk)=ppic(jl)-pmea(jl)240 ! zhcrit(jl,jk)=ppic(jl)-pmea(jl) 217 241 zhgeo=pgeom1(jl,jk)/rg 218 ll1(jl,jk)=(zhgeo.gt.zhcrit(jl,jk)) 242 ! ll1(jl,jk)=(zhgeo.gt.zhcrit(jl,jk)) 243 ll1(jl,jk)=(zhgeo.gt.0.5*pstd(jl)) ! TN : do not consider outlier peaks 244 ! ll1(jl,jk)=(zhgeo.gt.pstd(jl)) ! TN : do not consider outlier peaks 245 ! ll1(jl,jk)=(zhgeo.gt.2*pstd(jl)) ! TN : do not consider outlier peaks 219 246 if(ll1(jl,jk) .neqv. ll1(jl,jk+1)) then 220 247 kknu2(jl)=jk … … 224 251 2005 continue 225 252 2004 continue 253 254 ! do 2104 jk=klev,ilevh,-1 255 ! do 2105 jl=kidia,kfdia 256 ! if(ktest(jl).eq.1) then 257 ! zhgeo=pgeom1(jl,jk)/rg 258 ! ll1(jl,jk)=(zhgeo.gt.pstd(jl)) ! TN : do not consider outlier peaks 259 ! if(ll1(jl,jk) .neqv. ll1(jl,jk+1)) then 260 ! kknul(jl)=jk 261 ! endif 262 ! if(.not.ll1(jl,ilevh))kknul(jl)=ilevh 263 ! endif 264 ! 2105 continue 265 ! 2104 continue 266 267 226 268 do 2006 jk=klev,ilevh,-1 227 269 do 2007 jl=kidia,kfdia … … 244 286 kknu2(jl)=min(kknu2(jl),nktopg) 245 287 kknub(jl)=min(kknub(jl),nktopg) 246 kknul(jl)=klev288 ! kknul(jl)=klev 247 289 endif 248 290 2010 continue -
trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F
r1726 r2047 189 189 REAL zustrli(klon), zvstrli(klon) 190 190 REAL zustrhi(klon), zvstrhi(klon) 191 REAL zublstrdr(klon), zvblstrdr(klon) 192 REAL znlow(klon), zeff(klon) 193 REAL zbl(klon), knu2(klon),kbreak(nlon) 194 REAL tau0(klon), ztau(klon,klev) 191 195 192 196 c Pour calcul GW drag oro et nonoro: CALCUL de N2: … … 854 858 END DO 855 859 860 c====== 861 c GEOP CORRECTION 856 862 c 857 863 c Ajouter le geopotentiel du sol: … … 862 868 ENDDO 863 869 ENDDO 870 871 c............................ 872 c CETTE CORRECTION VA DE PAIR AVEC DES MODIFS DE LEAPFROG(_p) 873 c ELLE MARCHE A 50 NIVEAUX (si mmean constante...) 874 c MAIS PAS A 78 NIVEAUX (quand mmean varie...) 875 c A ANALYSER PLUS EN DETAIL AVANT D'UTILISER 876 c............................ 877 c zphi is recomputed (pphi is not ok if mean molecular mass varies) 878 c with dphi = RT/mmean d(ln p) [evaluated at interface] 879 880 c DO i = 1, klon 881 c zphi(i,1) = pphis(i) + R*t_seri(i,1)/mmean(i,1)*1000. 882 c * *( log(paprs(i,1)) - log(pplay(i,1)) ) 883 c DO k = 2, klev 884 c zphi(i,k) = zphi(i,k-1) 885 c * + R*500.*(t_seri(i,k)/mmean(i,k)+t_seri(i,k-1)/mmean(i,k-1)) 886 c * * (log(pplay(i,k-1)) - log(pplay(i,k))) 887 c ENDDO 888 c ENDDO 889 c............................ 890 c===== 864 891 865 892 c calcul du geopotentiel aux niveaux intercouches … … 1386 1413 e paprs, pplay,ftsol, t_seri) 1387 1414 1415 c albedo variations: test for Yeon Joo Lee 1416 c +12% in 4 Vd / increment to increase it for 20 Vd => +80% 1417 c heat(:,:)=heat(:,:)*(1.+0.12*(rjourvrai+gmtime)/4.)*1.12**4 1388 1418 1389 1419 c CO2 near infrared absorption … … 1531 1561 c==================================================================== 1532 1562 c 1533 1563 c if (ok_orodr.or.ok_gw_nonoro) then 1534 1564 1535 1565 c CALCUL DE N2 … … 1555 1585 enddo 1556 1586 1557 1587 c endif 1558 1588 1559 1589 c ----------------------------ORODRAG … … 1573 1603 c igwdim=MAX(1,igwd) 1574 1604 c 1575 c A ADAPTER POUR VENUS!!! 1605 c A ADAPTER POUR VENUS!!! [ TN: c'est fait ! ] 1576 1606 CALL drag_noro(klon,klev,dtime,paprs,pplay,pphi,zn2, 1577 1607 e zmea,zstd, zsig, zgam, zthe,zpic,zval, … … 1579 1609 e t_seri, u_seri, v_seri, 1580 1610 s zulow, zvlow, zustrdr, zvstrdr, 1581 s d_t_oro, d_u_oro, d_v_oro) 1611 s d_t_oro, d_u_oro, d_v_oro, 1612 s zublstrdr,zvblstrdr,znlow,zeff,zbl, 1613 s ztau,tau0,knu2,kbreak) 1582 1614 1583 1615 c print*,"d_u_oro=",d_u_oro(klon/2,:) … … 1596 1628 zustrdr = 0. 1597 1629 zvstrdr = 0. 1630 zublstrdr = 0. 1631 zvblstrdr = 0. 1632 znlow = 0. 1633 zeff = 0. 1634 zbl = 0 1635 knu2 = 0 1636 kbreak = 0 1637 ztau = 0 1638 tau0 = 0. 1598 1639 c 1599 1640 ENDIF ! fin de test sur ok_orodr … … 1882 1923 CALL send_xios_field("mmean",mmean) 1883 1924 CALL send_xios_field("rho",rho) 1925 CALL send_xios_field("BV2",zn2) 1884 1926 1885 1927 CALL send_xios_field("dudyn",d_u_dyn) -
trunk/LMDZ.VENUS/libf/phyvenus/sugwd.F
r1530 r2047 140 140 141 141 c valeurs dans les routines Mars 142 GKDRAG=0.1 143 GRAHILO=1.0 144 GRCRIT=0.25 145 GFRCRIT=1.00 146 GKWAKE=1.0 147 C 142 c GKDRAG=0.1 143 c GRAHILO=1.0 144 c GRCRIT=0.25 145 c GFRCRIT=1.00 146 c GKWAKE=1.0 147 C 148 C VENUS 149 GKDRAG=0.5 ! G 150 GRAHILO=1.0 ! beta - useless 151 GRCRIT=0.25 ! Ric - useless 152 GFRCRIT=1.0 ! Hnc 153 GKWAKE=1.0 ! Cd 154 TAUBS=2.0 ! VENUS: stress threshold is 2 Pa 155 !TAUBS=1.0 ! VENUS: stress threshold is 1 Pa 156 !TAUBS=0.5 ! VENUS: stress threshold is 0.5 Pa 157 LEVBS=nlev-9 ! VENUS: level release is 9 158 !LEVBS=nlev-19 ! VENUS: level release is 19 159 !LEVBS=nlev-13 ! VENUS: level release is 13 160 148 161 GKLIFT=0.25 149 162 GVCRIT =0.0 … … 151 164 WRITE(UNIT=6,FMT='('' *** SSO essential constants ***'')') 152 165 WRITE(UNIT=6,FMT='('' *** SPECIFIED IN SUGWD ***'')') 153 WRITE(UNIT=6,FMT='('' Gravity wave ct '',E1 3.7,'' '')')GKDRAG154 WRITE(UNIT=6,FMT='('' Trapped/total wave dag '',E1 3.7,'' '')')155 S GRAHILO156 WRITE(UNIT=6,FMT='('' Critical Richardson = '',E1 3.7,'' '')')166 WRITE(UNIT=6,FMT='('' Gravity wave ct '',E14.7,'' '')')GKDRAG 167 WRITE(UNIT=6,FMT='('' Trapped/total wave dag '',E14.7,'' '')') 168 S GRAHILO 169 WRITE(UNIT=6,FMT='('' Critical Richardson = '',E14.7,'' '')') 157 170 S GRCRIT 158 WRITE(UNIT=6,FMT='('' Critical Froude'',e13.7)') GFRCRIT 159 WRITE(UNIT=6,FMT='('' Low level Wake bluff cte'',e13.7)') GKWAKE 160 WRITE(UNIT=6,FMT='('' Low level lift cte'',e13.7)') GKLIFT 161 171 WRITE(UNIT=6,FMT='('' Critical Froude'',e14.7)') GFRCRIT 172 WRITE(UNIT=6,FMT='('' Low level Wake bluff cte'',e14.7)') GKWAKE 173 WRITE(UNIT=6,FMT='('' Low level lift cte'',e14.7)') GKLIFT 174 175 WRITE(UNIT=6,FMT='('' VENUS: Mountain stress threshold'',E14.7)') 176 S TAUBS 177 WRITE(UNIT=6,FMT='('' VENUS: Level release'',I5)') nlev - LEVBS 162 178 C 163 179 C
Note: See TracChangeset
for help on using the changeset viewer.