- Timestamp:
- Sep 20, 2024, 12:32:04 PM (33 hours ago)
- Location:
- LMDZ6/branches/cirrus
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/cirrus
- Property svn:mergeinfo changed
-
LMDZ6/branches/cirrus/libf/phylmd/lmdz_atke_exchange_coeff.F90
r4884 r5202 7 7 subroutine atke_compute_km_kh(ngrid,nlay,dtime, & 8 8 wind_u,wind_v,temp,qvap,play,pinterf,cdrag_uv, & 9 tke,eps, Km_out,Kh_out)9 tke,eps,tke_shear,tke_buoy,tke_trans,Km_out,Kh_out) 10 10 11 11 !======================================================================== … … 79 79 80 80 REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT) :: eps ! output: TKE dissipation rate at interface between layers (m2/s3) 81 REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT) :: tke_shear! output: TKE shear production rate (m2/s3) 82 REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT) :: tke_buoy ! output: TKE buoyancy production rate (m2/s3) 83 REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT) :: tke_trans! output: TKE transport (diffusion) term (m2/s3) 81 84 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Km_out ! output: Exchange coefficient for momentum at interface between layers (m2/s) 82 85 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Kh_out ! output: Exchange coefficient for heat flux at interface between layers (m2/s) … … 261 264 shear2(igrid,ilay) * (1. - Ri(igrid,ilay) / Prandtl(igrid,ilay)) 262 265 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 266 tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay) 267 tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay) & 268 *(Ri(igrid,ilay) / Prandtl(igrid,ilay)) 263 269 ENDDO 264 270 ENDDO … … 278 284 qq=max(0.,qq) 279 285 tke(igrid,ilay)=0.5*(qq**2) 280 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 286 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 287 tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay) 288 tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*sqrt(tke(igrid,ilay))*shear2(igrid,ilay) & 289 *(Ri(igrid,ilay) / Prandtl(igrid,ilay)) 281 290 ENDDO 282 291 ENDDO … … 293 302 qq=(qq+l_exchange(igrid,ilay)*Sm(igrid,ilay)*dtime/sqrt(2.) & 294 303 *shear2(igrid,ilay)*(1.-Ri(igrid,ilay)/Prandtl(igrid,ilay))) & 295 /(1.+qq*dtime/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.))) 304 /(1.+qq*dtime/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.))) 305 tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) 306 tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) & 307 *(Ri(igrid,ilay) / Prandtl(igrid,ilay)) 296 308 tke(igrid,ilay)=0.5*(qq**2) 297 309 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) … … 308 320 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 309 321 qq=max(sqrt(2.*tke(igrid,ilay)),1.e-10) 322 tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) 323 tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) & 324 *(Ri(igrid,ilay) / Prandtl(igrid,ilay)) 310 325 IF (Ri(igrid,ilay) .LT. 0.) THEN 311 326 netloss=qq/(2.*sqrt(2.)*cepsilon*l_exchange(igrid,ilay)) … … 327 342 DO igrid=1,ngrid 328 343 qq=max(sqrt(2.*tke(igrid,ilay)),1.e-10) 344 tke_shear(igrid,ilay)=l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) 345 tke_buoy(igrid,ilay)=-l_exchange(igrid,ilay)*Sm(igrid,ilay)*qq/sqrt(2.)*shear2(igrid,ilay) & 346 *(Ri(igrid,ilay) / Prandtl(igrid,ilay)) 329 347 qq=(l_exchange(igrid,ilay)*Sm(igrid,ilay)/sqrt(2.)*shear2(igrid,ilay)*(1.-Ri(igrid,ilay)/Prandtl(igrid,ilay)) & 330 348 +qq*(1.+dtime*qq/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.)))) & … … 349 367 tke(igrid,nlay+1)=0. 350 368 eps(igrid,nlay+1)=0. 369 tke_shear(igrid,nlay+1)=0. 370 tke_buoy(igrid,nlay+1)=0. 351 371 END DO 352 372 … … 359 379 tke(igrid,1)=ctkes*(ustar**2) 360 380 eps(igrid,1)=0. ! arbitrary as TKE is not properly defined at the surface 381 tke_shear(igrid,1)=0. 382 tke_buoy(igrid,1)=0. 361 383 END DO 362 384 … … 364 386 ! vertical diffusion of TKE 365 387 !========================== 388 tke_trans(:,:)=0. 366 389 IF (atke_ok_vdiff) THEN 367 CALL atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke )390 CALL atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke,tke_trans) 368 391 ENDIF 369 392 … … 387 410 388 411 !=============================================================================================== 389 subroutine atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke )412 subroutine atke_vdiff_tke(ngrid,nlay,dtime,z_lay,z_interf,temp,play,l_exchange,Sm,tke,tke_trans) 390 413 391 414 ! routine that computes the vertical diffusion of TKE by the turbulence … … 408 431 409 432 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT) :: tke ! turbulent kinetic energy at interface between layers 410 433 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT) :: tke_trans ! turbulent kinetic energy transport term (m2/s3) 411 434 412 435 … … 480 503 ! update TKE 481 504 tke(:,:)=tke(:,:)+dtke(:,:) 505 tke_trans(:,:)=dtke(:,:)/dtime 482 506 483 507
Note: See TracChangeset
for help on using the changeset viewer.