Changeset 4146 for trunk/LMDZ.GENERIC/libf/phygeneric/turbdiff_mod.F90
- Timestamp:
- Mar 19, 2026, 2:35:46 PM (10 days ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/phygeneric/turbdiff_mod.F90
r3995 r4146 8 8 ptimestep,pcapcal, & 9 9 pplay,pplev,pzlay,pzlev,pz0, & 10 pu,pv,pt,p popsk,pq,ptsrf,pemis,pqsurf, &10 pu,pv,pt,ph,ppopsk,pq,ptsrf,pemis,pqsurf, & 11 11 pdtfi,pdqfi,pfluxsrf, & 12 12 Pdudif,pdvdif,pdtdif,pdtsrf,sensibFlux,pq2, & … … 17 17 use surfdat_h, only: dryness 18 18 use tracer_h, only: igcm_h2o_vap, igcm_h2o_ice 19 use comcstfi_mod, only: rcp, g, r, cpp19 use comcstfi_mod, only: g, rd_ref, cppd_ref 20 20 use callkeys_mod, only: water,tracer,nosurf,kmixmin 21 21 use turb_mod, only : ustar … … 61 61 REAL,INTENT(IN) :: pzlay(ngrid,nlay),pzlev(ngrid,nlay+1) 62 62 REAL,INTENT(IN) :: pu(ngrid,nlay),pv(ngrid,nlay) 63 REAL,INTENT(IN) :: pt(ngrid,nlay),p popsk(ngrid,nlay)63 REAL,INTENT(IN) :: pt(ngrid,nlay),ph(ngrid,nlay),ppopsk(ngrid,nlay) 64 64 REAL,INTENT(IN) :: ptsrf(ngrid) ! surface temperature (K) 65 65 REAL,INTENT(IN) :: pemis(ngrid) … … 173 173 DO ig=1,ngrid 174 174 zmass(ig,ilay)=(pplev(ig,ilay)-pplev(ig,ilay+1))/glat(ig) 175 zExner(ig,ilay)= (pplev(ig,ilay)/pplev(ig,1))**rcp175 zExner(ig,ilay)=ppopsk(ig,ilay) 176 176 zovExner(ig,ilay)=1./ppopsk(ig,ilay) 177 177 ENDDO 178 178 ENDDO 179 179 180 zcst1=4.*g*ptimestep/( R*R)180 zcst1=4.*g*ptimestep/(rd_ref*rd_ref) 181 181 DO ilev=2,nlev-1 182 182 DO ig=1,ngrid … … 186 186 ENDDO 187 187 DO ig=1,ngrid 188 zb0(ig,1)=ptimestep*pplev(ig,1)/( R*ptsrf(ig))188 zb0(ig,1)=ptimestep*pplev(ig,1)/(rd_ref*ptsrf(ig)) 189 189 ENDDO 190 190 dqsdif_total(:)=0.0 … … 199 199 zv(ig,ilev)=pv(ig,ilev) 200 200 zt(ig,ilev)=pt(ig,ilev)+pdtfi(ig,ilev)*ptimestep 201 zh(ig,ilev)=p t(ig,ilev)*zovExner(ig,ilev) !for call vdif_kc, but could be moved and computed there201 zh(ig,ilev)=ph(ig,ilev)!+pdtfi(ig,ilev)*ptimestep*zovExner(ig,ilev) !for call vdif_kc, but could be moved and computed there 202 202 ENDDO 203 203 ENDDO … … 248 248 ! ------------------------------------------------------ 249 249 250 call vdif_kc(ngrid,nlay,nq,ptimestep,g,pzlev,pzlay,pu,pv,pq,zh,zcdv_true,pq2,zkv,zkh) !JL12 why not call vdif_kc with updated winds and temperature 251 250 call vdif_kc(ngrid,nlay,nq,ptimestep,g,pzlev,pzlay,pplev,pplay, & 251 pu,pv,zt,pq,zh,zcdv_true,pq2,zkv,zkh) !JL12 why not call vdif_kc with updated 252 252 253 ! Adding eddy mixing to mimic 3D general circulation in 1D 253 254 ! R. Wordsworth & F. Forget (2010) … … 273 274 ! zkv(ig,ilev) = max(kzz_eddy(ilev),zkv(ig,ilev)) 274 275 ! end do 275 276 276 do ig=1,ngrid 277 277 zkh(ig,ilev) = max(kmixmin,zkh(ig,ilev)) … … 436 436 437 437 DO ig=1,ngrid 438 z1(ig)=pcapcal(ig)*ptsrf(ig)+cpp *zfluxt(ig,1)*zct(ig,1)*zovExner(ig,1) &438 z1(ig)=pcapcal(ig)*ptsrf(ig)+cppd_ref*zfluxt(ig,1)*zct(ig,1)*zovExner(ig,1) & 439 439 + pfluxsrf(ig)*ptimestep + zdplanck(ig)*ptsrf(ig) 440 z2(ig) = pcapcal(ig)+zdplanck(ig)+cpp *zfluxt(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1))440 z2(ig) = pcapcal(ig)+zdplanck(ig)+cppd_ref*zfluxt(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1)) 441 441 ztsrf(ig) = z1(ig) / z2(ig) 442 442 pdtsrf(ig) = (ztsrf(ig) - ptsrf(ig))/ptimestep … … 573 573 zcq0(ig) = qsat(ig)-dqsat(ig)*ptsrf(ig) 574 574 575 z1(ig) = pcapcal(ig)*ptsrf(ig) +cpp *zfluxt(ig,1)*zct(ig,1)*zovExner(ig,1) &575 z1(ig) = pcapcal(ig)*ptsrf(ig) +cppd_ref*zfluxt(ig,1)*zct(ig,1)*zovExner(ig,1) & 576 576 + zdplanck(ig)*ptsrf(ig) + pfluxsrf(ig)*ptimestep & 577 577 + zfluxq(ig,1)*dryness(ig)*RLVTT*((zdq(ig,1)-1.0)*zcq0(ig)+zcq(ig,1)) 578 578 579 z2(ig) = pcapcal(ig) + cpp *zfluxt(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1)) &579 z2(ig) = pcapcal(ig) + cppd_ref*zfluxt(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1)) & 580 580 + zdplanck(ig)+zfluxq(ig,1)*dryness(ig)*RLVTT*zdq0(ig)*(1.0-zdq(ig,1)) 581 581 … … 598 598 599 599 !recompute surface temperature 600 z1(ig) = pcapcal(ig)*ptsrf(ig) +cpp *zfluxq(ig,1)*zct(ig,1)*zovExner(ig,1) &600 z1(ig) = pcapcal(ig)*ptsrf(ig) +cppd_ref*zfluxq(ig,1)*zct(ig,1)*zovExner(ig,1) & 601 601 + zdplanck(ig)*ptsrf(ig) + pfluxsrf(ig)*ptimestep & 602 602 + RLVTT*dqsdif_total(ig) 603 z2(ig) = pcapcal(ig) + cpp *zfluxq(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1)) &603 z2(ig) = pcapcal(ig) + cppd_ref*zfluxq(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1)) & 604 604 + zdplanck(ig) 605 605 ztsrf(ig) = z1(ig) / z2(ig) … … 720 720 721 721 DO ig=1,ngrid ! computing sensible heat flux (atm => surface) 722 sensibFlux(ig)=cpp *zfluxt(ig,1)/ptimestep*(zt(ig,1)*zovExner(ig,1)-ztsrf(ig))722 sensibFlux(ig)=cppd_ref*zfluxt(ig,1)/ptimestep*(zt(ig,1)*zovExner(ig,1)-ztsrf(ig)) 723 723 ENDDO 724 724
Note: See TracChangeset
for help on using the changeset viewer.
