Changeset 4881
- Timestamp:
- Mar 28, 2024, 6:06:40 PM (9 months ago)
- Location:
- LMDZ6/trunk/libf
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/coef_diff_turb_mod.F90
r4657 r4881 14 14 SUBROUTINE coef_diff_turb(dtime, nsrf, knon, ni, & 15 15 ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, & 16 ycoefm, ycoefh ,yq2, y drgpro)16 ycoefm, ycoefh ,yq2, yeps, ydrgpro) 17 17 18 18 USE dimphy … … 47 47 ! Output arguments 48 48 !**************************************************************************************** 49 REAL, DIMENSION(klon,klev+1), INTENT(OUT) :: yeps 49 50 REAL, DIMENSION(klon,klev), INTENT(OUT) :: ycoefh 50 51 REAL, DIMENSION(klon,klev), INTENT(OUT) :: ycoefm … … 69 70 ykmq = 0 !ym missing init 70 71 71 72 yeps(:,:) = 0. 73 72 74 !**************************************************************************************** 73 75 ! Calcul de coefficients de diffusion turbulent de l'atmosphere : … … 182 184 CALL yamada4(ni,nsrf,knon,dtime,RG,RD,ypaprs,yt, & 183 185 yzlev,yzlay,yu,yv,yteta, & 184 ycdragm,yq2,y kmm,ykmn,ykmq,yustar, &186 ycdragm,yq2,yeps,ykmm,ykmn,ykmq,yustar, & 185 187 iflag_pbl,ydrgpro) 186 188 !FC -
LMDZ6/trunk/libf/phylmd/lmdz_atke_exchange_coeff.F90
r4804 r4881 7 7 subroutine atke_compute_km_kh(ngrid,nlay,dtime, & 8 8 wind_u,wind_v,temp,qvap,play,pinterf,cdrag_uv, & 9 tke, Km_out,Kh_out)9 tke,eps,Km_out,Kh_out) 10 10 11 11 !======================================================================== … … 70 70 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: wind_u ! zonal velocity (m/s) 71 71 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: wind_v ! meridional velocity (m/s) 72 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: temp ! temperature (K) 73 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: qvap ! specific humidity (kg/kg) 74 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: play ! pressure (Pa) 75 REAL, DIMENSION(ngrid,nlay+1), INTENT(IN) :: pinterf ! pressure at interfaces(Pa) 76 REAL, DIMENSION(ngrid), INTENT(IN) :: cdrag_uv ! surface drag coefficient for momentum 77 78 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT) :: tke ! turbulent kinetic energy at interface between layers 79 80 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Km_out ! output: Exchange coefficient for momentum at interface between layers 81 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Kh_out ! output: Exchange coefficient for heat flux at interface between layers 72 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: temp ! temperature (K) 73 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: qvap ! specific humidity (kg/kg) 74 REAL, DIMENSION(ngrid,nlay), INTENT(IN) :: play ! pressure (Pa) 75 REAL, DIMENSION(ngrid,nlay+1), INTENT(IN) :: pinterf ! pressure at interfaces(Pa) 76 REAL, DIMENSION(ngrid), INTENT(IN) :: cdrag_uv ! surface drag coefficient for momentum 77 78 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT) :: tke ! turbulent kinetic energy at interface between layers (m2/s2) 79 80 REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT) :: eps ! output: TKE dissipation rate at interface between layers (m2/s3) 81 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Km_out ! output: Exchange coefficient for momentum at interface between layers (m2/s) 82 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Kh_out ! output: Exchange coefficient for heat flux at interface between layers (m2/s) 82 83 83 84 ! Local variables … … 259 260 tke(igrid,ilay) = cepsilon * l_exchange(igrid,ilay)**2 * Sm(igrid,ilay) * & 260 261 shear2(igrid,ilay) * (1. - Ri(igrid,ilay) / Prandtl(igrid,ilay)) 262 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 261 263 ENDDO 262 264 ENDDO … … 275 277 qq=(-2.*sqrt(2.)*cepsilon*l_exchange(igrid,ilay)/dtime + sqrt(delta))/2. 276 278 qq=max(0.,qq) 277 tke(igrid,ilay)=0.5*(qq**2) 279 tke(igrid,ilay)=0.5*(qq**2) 280 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 278 281 ENDDO 279 282 ENDDO … … 292 295 /(1.+qq*dtime/(cepsilon*l_exchange(igrid,ilay)*2.*sqrt(2.))) 293 296 tke(igrid,ilay)=0.5*(qq**2) 297 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 294 298 ENDDO 295 299 ENDDO … … 302 306 DO ilay=2,nlay 303 307 DO igrid=1,ngrid 308 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 304 309 qq=max(sqrt(2.*tke(igrid,ilay)),1.e-10) 305 310 IF (Ri(igrid,ilay) .LT. 0.) THEN … … 327 332 qq=max(0.,qq) 328 333 tke(igrid,ilay)=0.5*(qq**2) 334 eps(igrid,ilay) = (tke(igrid,ilay)**(3./2))/(cepsilon*l_exchange(igrid,ilay)) 329 335 ENDDO 330 336 ENDDO -
LMDZ6/trunk/libf/phylmd/lmdz_call_atke.F90
r4745 r4881 10 10 subroutine call_atke(dtime,ngrid,nlay,cdrag_uv,cdrag_t,u_surf,v_surf,temp_surf, & 11 11 wind_u,wind_v,temp,qvap,play,pinterf, & 12 tke, Km_out,Kh_out)12 tke,eps,Km_out,Kh_out) 13 13 14 14 … … 43 43 44 44 45 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT) :: tke ! turbulent kinetic energy at interface between layers45 REAL, DIMENSION(ngrid,nlay+1), INTENT(INOUT) :: tke ! turbulent kinetic energy at interface between layers 46 46 47 REAL, DIMENSION(ngrid,nlay+1), INTENT(OUT) :: eps ! output: tke dissipation rate at interface between layers 47 48 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Km_out ! output: Exchange coefficient for momentum at interface between layers 48 49 REAL, DIMENSION(ngrid,nlay), INTENT(OUT) :: Kh_out ! output: Exchange coefficient for heat flux at interface between layers … … 56 57 call atke_compute_km_kh(ngrid,nlay,dtime,& 57 58 wind_u,wind_v,temp,qvap,play,pinterf,cdrag_uv,& 58 tke, Km_out,Kh_out)59 tke,eps,Km_out,Kh_out) 59 60 60 61 … … 75 76 call atke_compute_km_kh(ngrid,nlay,dtime,& 76 77 wind_u_predict,wind_v_predict,temp,qvap,play,pinterf,cdrag_uv, & 77 tke, Km_out,Kh_out)78 tke,eps,Km_out,Kh_out) 78 79 79 80 end if -
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
r4747 r4881 231 231 !jyg< 232 232 !! zxfluxt, zxfluxq, q2m, flux_q, tke, & 233 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, &233 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, eps_x, & 234 234 !>jyg 235 235 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 408 408 ! Output variables 409 409 !**************************************************************************************** 410 REAL, DIMENSION(klon,klev+1,nbsrf+1), INTENT(OUT) :: eps_x ! TKE dissipation rate 411 410 412 REAL, DIMENSION(klon), INTENT(OUT) :: cdragh ! drag coefficient for T and Q 411 413 REAL, DIMENSION(klon), INTENT(OUT) :: cdragm ! drag coefficient for wind … … 627 629 REAL, DIMENSION(klon,klev) :: delp 628 630 REAL, DIMENSION(klon,klev+1) :: ypaprs 629 REAL, DIMENSION(klon,klev+1) :: ytke 631 REAL, DIMENSION(klon,klev+1) :: ytke, yeps 630 632 REAL, DIMENSION(klon,nsoilmx) :: ytsoil 631 633 !FC … … 647 649 REAL, DIMENSION(klon) :: ywake_s, ywake_cstar, ywake_dens 648 650 !!! 649 REAL, DIMENSION(klon,klev+1) :: ytke_x, ytke_w 651 REAL, DIMENSION(klon,klev+1) :: ytke_x, ytke_w, yeps_x, yeps_w 650 652 REAL, DIMENSION(klon,klev+1) :: ywake_dltke 651 653 REAL, DIMENSION(klon,klev) :: yu_x, yv_x, yu_w, yv_w … … 1046 1048 !! tke(:,:,is_ave)=0. 1047 1049 tke_x(:,:,is_ave)=0. 1050 eps_x(:,:,is_ave)=0. 1048 1051 1049 1052 wake_dltke(:,:,is_ave)=0. … … 1080 1083 1081 1084 ytke=0. 1085 yeps=0. 1082 1086 yri0(:)=0. 1083 1087 !FC … … 1093 1097 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 1094 1098 ytke_x=0. ; ytke_w=0. ; ywake_dltke=0. 1099 yeps_x=0. ; yeps_w=0. 1095 1100 y_d_t_x=0. ; y_d_t_w=0. ; y_d_q_x=0. ; y_d_q_w=0. 1096 1101 !! d_t_w=0. ; d_q_w=0. … … 1701 1706 CALL call_atke(dtime,knon,klev,ycdragm(1:knon), ycdragh(1:knon),yus0(1:knon),yvs0(1:knon),yts(1:knon), & 1702 1707 yu(1:knon,:),yv(1:knon,:),yt(1:knon,:),yq(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:), & 1703 ytke(1:knon,:),y coefm(1:knon,:), ycoefh(1:knon,:))1708 ytke(1:knon,:),yeps(1:knon,:), ycoefm(1:knon,:), ycoefh(1:knon,:)) 1704 1709 1705 1710 ELSE … … 1707 1712 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1708 1713 ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, & 1709 ycoefm, ycoefh, ytke, y _treedrg)1714 ycoefm, ycoefh, ytke, yeps, y_treedrg) 1710 1715 ! ycoefm, ycoefh, ytke) 1711 1716 !FC y_treedrg ajoute … … 1746 1751 CALL call_atke(dtime,knon,klev,ycdragm_x(1:knon),ycdragh_x(1:knon),yus0(1:knon),yvs0(1:knon),yts_x(1:knon), & 1747 1752 yu_x(1:knon,:),yv_x(1:knon,:),yt_x(1:knon,:),yq_x(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:), & 1748 ytke_x(1:knon,:),y coefm_x(1:knon,:), ycoefh_x(1:knon,:))1753 ytke_x(1:knon,:),yeps_x(1:knon,:),ycoefm_x(1:knon,:), ycoefh_x(1:knon,:)) 1749 1754 1750 1755 ELSE … … 1752 1757 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1753 1758 ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf_x, ycdragm_x, & 1754 ycoefm_x, ycoefh_x, ytke_x,y _treedrg)1759 ycoefm_x, ycoefh_x, ytke_x,yeps_x,y_treedrg) 1755 1760 ! ycoefm_x, ycoefh_x, ytke_x) 1756 1761 !FC doit on le mettre ( on ne l utilise pas si il y a du spliting) … … 1786 1791 CALL call_atke(dtime,knon,klev,ycdragm_w(1:knon),ycdragh_w(1:knon),yus0(1:knon),yvs0(1:knon),yts_w(1:knon), & 1787 1792 yu_w(1:knon,:),yv_w(1:knon,:),yt_w(1:knon,:),yq_w(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:), & 1788 ytke_w(1:knon,:),y coefm_w(1:knon,:),ycoefh_w(1:knon,:))1793 ytke_w(1:knon,:),yeps_w(1:knon,:),ycoefm_w(1:knon,:),ycoefh_w(1:knon,:)) 1789 1794 1790 1795 ELSE … … 1792 1797 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1793 1798 ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf_w, ycdragm_w, & 1794 ycoefm_w, ycoefh_w, ytke_w,y _treedrg)1799 ycoefm_w, ycoefh_w, ytke_w,yeps_w,y_treedrg) 1795 1800 ! ycoefm_w, ycoefh_w, ytke_w) 1796 1801 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 2855 2860 !! tke(i,k,is_ave) = tke(i,k,is_ave) + ytke(j,k)*ypct(j) 2856 2861 tke_x(i,k,nsrf) = ytke(j,k) 2857 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j) 2858 2862 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j) 2863 eps_x(i,k,nsrf) = yeps(j,k) 2864 eps_x(i,k,is_ave) = eps_x(i,k,is_ave) + yeps(j,k)*ypct(j) 2859 2865 !>jyg 2860 2866 ENDDO … … 2870 2876 !! tke(i,k,is_ave) = tke(i,k,is_ave) + tke(i,k,nsrf)*ypct(j) 2871 2877 tke_x(i,k,nsrf) = ytke_x(j,k) 2872 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j) 2878 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j) 2879 eps_x(i,k,nsrf) = yeps_x(j,k) 2880 eps_x(i,k,is_ave) = eps_x(i,k,is_ave) + eps_x(i,k,nsrf)*ypct(j) 2873 2881 wake_dltke(i,k,is_ave) = wake_dltke(i,k,is_ave) + wake_dltke(i,k,nsrf)*ypct(j) 2874 2882 -
LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
r4843 r4881 22 22 REAL, SAVE, ALLOCATABLE :: d_rneb_dyn(:,:) 23 23 !$OMP THREADPRIVATE(d_rneb_dyn) 24 REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),tke_dissip(:,:,:),wprime(:,:,:) 25 !$OMP THREADPRIVATE(l_mixmin, l_mix, tke_dissip,wprime) 24 REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),wprime(:,:,:) 25 !$OMP THREADPRIVATE(l_mixmin, l_mix, wprime) 26 REAL, SAVE, ALLOCATABLE :: pbl_eps(:,:,:) 27 !$OMP THREADPRIVATE(pbl_eps) 26 28 REAL, SAVE, ALLOCATABLE :: tr_seri(:,:,:) 27 29 !$OMP THREADPRIVATE(tr_seri) … … 666 668 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 667 669 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 668 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf), tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))669 l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.;tke_dissip(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis670 670 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf)) 671 ALLOCATE(pbl_eps(klon,klev+1,nbsrf+1)) 672 l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis 671 673 ALLOCATE(rhcl(klon,klev)) 672 674 ALLOCATE(tr_seri(klon,klev,nbtr)) … … 1019 1021 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 1020 1022 DEALLOCATE(u_seri,v_seri) 1021 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)1022 1023 DEALLOCATE(l_mixmin,l_mix,wprime) 1024 DEALLOCATE(pbl_eps) 1023 1025 DEALLOCATE(rhcl) 1024 1026 DEALLOCATE(tr_seri) -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r4843 r4881 311 311 zn2mout, t2m_min_mon, t2m_max_mon, evap, & 312 312 snowerosion, zxustartlic, zxrhoslic, zxqsaltlic, & 313 l_mixmin,l_mix, tke_dissip, &313 l_mixmin,l_mix, pbl_eps, & 314 314 zu10m, zv10m, zq2m, zustar, zxqsurf, & 315 315 rain_lsc, rain_num, snow_lsc, bils, sens, fder, & … … 1302 1302 DO k=1,klev 1303 1303 zx_tmp_fi3d(:,k)=zx_tmp_fi3d(:,k) & 1304 +pctsrf(:,nsrf)* tke_dissip(:,k,nsrf)1304 +pctsrf(:,nsrf)*pbl_eps(:,k,nsrf) 1305 1305 ENDDO 1306 1306 ENDDO -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r4874 r4881 282 282 zxfluxlat_x, zxfluxlat_w, & 283 283 ! 284 pbl_tke_input, tke_dissip, l_mix, wprime,&284 pbl_tke_input, pbl_eps, l_mix, wprime,& 285 285 t_therm, q_therm, u_therm, v_therm, & 286 286 cdragh_x, cdragh_w, & … … 1257 1257 integer iostat 1258 1258 1259 REAL, dimension(klon,klev+1) :: tke_dissip_ave,l_mix_ave, wprime_ave1259 REAL, dimension(klon,klev+1) :: l_mix_ave, wprime_ave 1260 1260 REAL zzz 1261 1261 !albedo SB >>> … … 2905 2905 fluxt, fluxu, fluxv, & 2906 2906 dsens, devap, zxsnow, & 2907 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, &2907 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, pbl_eps, & 2908 2908 !nrlmd+jyg< 2909 2909 wake_delta_pbl_TKE, & … … 3849 3849 ! water distribution 3850 3850 3851 tke_dissip_ave(:,:)=0.3852 3851 l_mix_ave(:,:)=0. 3853 3852 wprime_ave(:,:)=0. … … 3855 3854 DO nsrf = 1, nbsrf 3856 3855 DO i = 1, klon 3857 tke_dissip_ave(i,:) = tke_dissip_ave(i,:) + tke_dissip(i,:,nsrf)*pctsrf(i,nsrf)3858 3856 l_mix_ave(i,:) = l_mix_ave(i,:) + l_mix(i,:,nsrf)*pctsrf(i,nsrf) 3859 3857 wprime_ave(i,:) = wprime_ave(i,:) + wprime(i,:,nsrf)*pctsrf(i,nsrf) … … 3869 3867 paprs,pplay,t_seri,q_seri, & 3870 3868 qtc_cv, sigt_cv,detrain_cv,fm_cv,fqd,fqcomp,sigd,zqsat, & 3871 omega,pbl_tke(:,:,is_ave), tke_dissip_ave,l_mix_ave,wprime_ave, &3869 omega,pbl_tke(:,:,is_ave),pbl_eps(:,:,is_ave),l_mix_ave,wprime_ave, & 3872 3870 t2m,q2m,fm_therm,entr_therm,detr_therm,cell_area, & 3873 3871 ratqs,ratqsc,ratqs_inter_) -
LMDZ6/trunk/libf/phylmd/yamada4.F90
r4825 r4881 2 2 3 3 SUBROUTINE yamada4(ni, nsrf, ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, & 4 cd, tke, km, kn, kq, ustar, iflag_pbl, drgpro)4 cd, tke, eps, km, kn, kq, ustar, iflag_pbl, drgpro) 5 5 6 6 USE dimphy, only : klev,klon 7 USE phys_local_var_mod, only: tke_dissip,wprime7 USE phys_local_var_mod, only: wprime 8 8 USE yamada_ini_mod, only : new_yamada4,yamada4_num,hboville 9 9 USE yamada_ini_mod, only : prt_level, lunout,pbl_lmixmin_alpha,b1,kap,viscom,viscoh … … 69 69 ! Outputs: 70 70 !========== 71 ! eps: tke dissipation rate 71 72 ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque 72 73 ! couche) … … 95 96 REAL cd(klon) 96 97 REAL tke(klon, klev+1) 98 REAL eps(klon,klev+1) 97 99 REAL unsdz(klon, klev) 98 100 REAL unsdzdec(klon, klev+1) … … 686 688 687 689 ! Diagnostics 688 tke_dissip(1:ngrid,:,nsrf)=0. 690 691 eps(:,:)=dissip(:,:) 689 692 wprime(1:ngrid,:,nsrf)=0. 690 693 DO k=2,klev … … 692 695 jg=ni(ig) 693 696 wprime(jg,k,nsrf)=sqrt(MAX(1./3*q2(ig,k),0.)) 694 tke_dissip(jg,k,nsrf)=dissip(ig,k)695 697 ENDDO 696 698 ENDDO 699 697 700 698 701 !============================================================================= -
LMDZ6/trunk/libf/phylmdiso/pbl_surface_mod.F90
r4745 r4881 24 24 USE climb_wind_mod, ONLY : climb_wind_down, climb_wind_up 25 25 USE coef_diff_turb_mod, ONLY : coef_diff_turb 26 USE lmdz_call_atke, ONLY : 26 USE lmdz_call_atke, ONLY : call_atke 27 27 USE ioipsl_getin_p_mod, ONLY : getin_p 28 28 USE cdrag_mod … … 308 308 !jyg< 309 309 !! zxfluxt, zxfluxq, q2m, flux_q, tke, & 310 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, &310 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, eps_x, & 311 311 !>jyg 312 312 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 506 506 ! Output variables 507 507 !**************************************************************************************** 508 REAL, DIMENSION(klon,klev+1,nbsrf+1), INTENT(OUT) :: eps_x ! TKE dissipation rate 509 508 510 REAL, DIMENSION(klon), INTENT(OUT) :: cdragh ! drag coefficient for T and Q 509 511 REAL, DIMENSION(klon), INTENT(OUT) :: cdragm ! drag coefficient for wind … … 765 767 REAL, DIMENSION(klon,klev) :: delp 766 768 REAL, DIMENSION(klon,klev+1) :: ypaprs 767 REAL, DIMENSION(klon,klev+1) :: ytke 769 REAL, DIMENSION(klon,klev+1) :: ytke, yeps 768 770 REAL, DIMENSION(klon,nsoilmx) :: ytsoil 769 771 !FC … … 785 787 REAL, DIMENSION(klon) :: ywake_s, ywake_cstar, ywake_dens 786 788 !!! 787 REAL, DIMENSION(klon,klev+1) :: ytke_x, ytke_w 789 REAL, DIMENSION(klon,klev+1) :: ytke_x, ytke_w, yeps_x, yeps_w 788 790 REAL, DIMENSION(klon,klev+1) :: ywake_dltke 789 791 REAL, DIMENSION(klon,klev) :: yu_x, yv_x, yu_w, yv_w … … 1261 1263 !! tke(:,:,is_ave)=0. 1262 1264 tke_x(:,:,is_ave)=0. 1265 eps_x(:,:,is_ave)=0. 1263 1266 1264 1267 wake_dltke(:,:,is_ave)=0. … … 1295 1298 1296 1299 ytke=0. 1300 yeps=0. 1297 1301 yri0(:)=0. 1298 1302 !FC … … 1308 1312 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 1309 1313 ytke_x=0. ; ytke_w=0. ; ywake_dltke=0. 1314 yeps_x=0. ; yeps_w=0. 1310 1315 y_d_t_x=0. ; y_d_t_w=0. ; y_d_q_x=0. ; y_d_q_w=0. 1311 1316 !! d_t_w=0. ; d_q_w=0. … … 1979 1984 CALL call_atke(dtime,knon,klev,ycdragm(1:knon), ycdragh(1:knon),yus0(1:knon),yvs0(1:knon),yts(1:knon), & 1980 1985 yu(1:knon,:),yv(1:knon,:),yt(1:knon,:),yq(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:), & 1981 ytke(1:knon,:),y coefm(1:knon,:), ycoefh(1:knon,:))1986 ytke(1:knon,:),yeps(1:knon,:), ycoefm(1:knon,:), ycoefh(1:knon,:)) 1982 1987 1983 1988 ELSE … … 1985 1990 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1986 1991 ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, & 1987 ycoefm, ycoefh, ytke, y _treedrg)1992 ycoefm, ycoefh, ytke, yeps, y_treedrg) 1988 1993 ! ycoefm, ycoefh, ytke) 1989 1994 !FC y_treedrg ajoute … … 2023 2028 CALL call_atke(dtime,knon,klev,ycdragm_x(1:knon),ycdragh_x(1:knon),yus0(1:knon),yvs0(1:knon),yts_x(1:knon), & 2024 2029 yu_x(1:knon,:),yv_x(1:knon,:),yt_x(1:knon,:),yq_x(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:), & 2025 ytke_x(1:knon,:),y coefm_x(1:knon,:), ycoefh_x(1:knon,:))2030 ytke_x(1:knon,:),yeps_x(1:knon,:),ycoefm_x(1:knon,:), ycoefh_x(1:knon,:)) 2026 2031 2027 2032 ELSE … … 2029 2034 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 2030 2035 ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf_x, ycdragm_x, & 2031 ycoefm_x, ycoefh_x, ytke_x,y _treedrg)2036 ycoefm_x, ycoefh_x, ytke_x,yeps_x,y_treedrg) 2032 2037 ! ycoefm_x, ycoefh_x, ytke_x) 2033 2038 !FC doit on le mettre ( on ne l utilise pas si il y a du spliting) … … 2063 2068 CALL call_atke(dtime,knon,klev,ycdragm_w(1:knon),ycdragh_w(1:knon),yus0(1:knon),yvs0(1:knon),yts_w(1:knon), & 2064 2069 yu_w(1:knon,:),yv_w(1:knon,:),yt_w(1:knon,:),yq_w(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:), & 2065 ytke_w(1:knon,:),y coefm_w(1:knon,:),ycoefh_w(1:knon,:))2070 ytke_w(1:knon,:),yeps_w(1:knon,:),ycoefm_w(1:knon,:),ycoefh_w(1:knon,:)) 2066 2071 2067 2072 ELSE 2068 2069 2073 2070 2074 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 2071 2075 ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf_w, ycdragm_w, & 2072 ycoefm_w, ycoefh_w, ytke_w,y _treedrg)2076 ycoefm_w, ycoefh_w, ytke_w,yeps_w,y_treedrg) 2073 2077 ! ycoefm_w, ycoefh_w, ytke_w) 2074 2078 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 3332 3336 !! tke(i,k,is_ave) = tke(i,k,is_ave) + ytke(j,k)*ypct(j) 3333 3337 tke_x(i,k,nsrf) = ytke(j,k) 3334 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j) 3335 3338 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j) 3339 eps_x(i,k,nsrf) = yeps(j,k) 3340 eps_x(i,k,is_ave) = eps_x(i,k,is_ave) + yeps(j,k)*ypct(j) 3336 3341 !>jyg 3337 3342 ENDDO … … 3347 3352 !! tke(i,k,is_ave) = tke(i,k,is_ave) + tke(i,k,nsrf)*ypct(j) 3348 3353 tke_x(i,k,nsrf) = ytke_x(j,k) 3349 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j) 3354 tke_x(i,k,is_ave) = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j) 3355 eps_x(i,k,nsrf) = yeps_x(j,k) 3356 eps_x(i,k,is_ave) = eps_x(i,k,is_ave) + eps_x(i,k,nsrf)*ypct(j) 3350 3357 wake_dltke(i,k,is_ave) = wake_dltke(i,k,is_ave) + wake_dltke(i,k,nsrf)*ypct(j) 3351 3358 -
LMDZ6/trunk/libf/phylmdiso/phys_local_var_mod.F90
r4844 r4881 22 22 REAL, SAVE, ALLOCATABLE :: d_rneb_dyn(:,:) 23 23 !$OMP THREADPRIVATE(d_rneb_dyn) 24 REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),tke_dissip(:,:,:),wprime(:,:,:) 25 !$OMP THREADPRIVATE(l_mixmin, l_mix, tke_dissip,wprime) 24 REAL, SAVE, ALLOCATABLE :: l_mixmin(:,:,:),l_mix(:,:,:),wprime(:,:,:) 25 !$OMP THREADPRIVATE(l_mixmin, l_mix, wprime) 26 REAL, SAVE, ALLOCATABLE :: pbl_eps(:,:,:) 27 !$OMP THREADPRIVATE(pbl_eps) 26 28 REAL, SAVE, ALLOCATABLE :: tr_seri(:,:,:) 27 29 !$OMP THREADPRIVATE(tr_seri) … … 764 766 ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev)) 765 767 ALLOCATE(u_seri(klon,klev),v_seri(klon,klev)) 766 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf), tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))767 l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.; tke_dissip(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis768 768 ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf)) 769 l_mix(:,:,:)=0.;l_mixmin(:,:,:)=0.;wprime(:,:,:)=0. ! doit etre initialse car pas toujours remplis 770 ALLOCATE(pbl_eps(klon,klev+1,nbsrf)) 769 771 ALLOCATE(tr_seri(klon,klev,nbtr)) 770 772 ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev)) … … 1175 1177 DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri) 1176 1178 DEALLOCATE(u_seri,v_seri) 1177 DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime) 1179 DEALLOCATE(l_mixmin,l_mix,wprime) 1180 DEALLOCATE(pbl_eps) 1178 1181 1179 1182 DEALLOCATE(tr_seri) -
LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
r4844 r4881 294 294 zxfluxlat_x, zxfluxlat_w, & 295 295 ! 296 pbl_tke_input, tke_dissip, l_mix, wprime,&296 pbl_tke_input, pbl_eps, l_mix, wprime,& 297 297 t_therm, q_therm, u_therm, v_therm, & 298 298 cdragh_x, cdragh_w, & … … 1321 1321 integer iostat 1322 1322 1323 REAL, dimension(klon,klev+1) :: tke_dissip_ave,l_mix_ave, wprime_ave1323 REAL, dimension(klon,klev+1) :: l_mix_ave, wprime_ave 1324 1324 REAL zzz 1325 1325 !albedo SB >>> … … 3192 3192 fluxt, fluxu, fluxv, & 3193 3193 dsens, devap, zxsnow, & 3194 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, &3194 zxfluxt, zxfluxq, zxfluxqbs, q2m, fluxq, fluxqbs, pbl_tke, pbl_eps, & 3195 3195 !nrlmd+jyg< 3196 3196 wake_delta_pbl_TKE, & … … 4756 4756 ! water distribution 4757 4757 4758 tke_dissip_ave(:,:)=0.4759 4758 l_mix_ave(:,:)=0. 4760 4759 wprime_ave(:,:)=0. … … 4762 4761 DO nsrf = 1, nbsrf 4763 4762 DO i = 1, klon 4764 tke_dissip_ave(i,:) = tke_dissip_ave(i,:) + tke_dissip(i,:,nsrf)*pctsrf(i,nsrf)4765 4763 l_mix_ave(i,:) = l_mix_ave(i,:) + l_mix(i,:,nsrf)*pctsrf(i,nsrf) 4766 4764 wprime_ave(i,:) = wprime_ave(i,:) + wprime(i,:,nsrf)*pctsrf(i,nsrf) … … 4776 4774 paprs,pplay,t_seri,q_seri, & 4777 4775 qtc_cv, sigt_cv,detrain_cv,fm_cv,fqd,fqcomp,sigd,zqsat, & 4778 omega,pbl_tke(:,:,is_ave), tke_dissip_ave,l_mix_ave,wprime_ave, &4776 omega,pbl_tke(:,:,is_ave),pbl_eps(:,:,is_ave),l_mix_ave,wprime_ave, & 4779 4777 t2m,q2m,fm_therm,entr_therm,detr_therm,cell_area, & 4780 4778 ratqs,ratqsc,ratqs_inter_)
Note: See TracChangeset
for help on using the changeset viewer.