Changeset 5950 for LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
- Timestamp:
- Dec 18, 2025, 5:46:30 PM (2 weeks ago)
- File:
-
- 1 edited
-
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90 (modified) (46 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
r5949 r5950 108 108 USE dimsoil_mod_h, ONLY: nsoilmx 109 109 USE flux_arp_mod_h 110 USE cdrag_mod, ONLY : cdrag_init 110 111 IMPLICIT NONE 111 112 … … 260 261 CALL wx_pbl_init 261 262 !>jyg 263 264 CALL cdrag_init 262 265 263 266 END SUBROUTINE pbl_surface_init … … 1645 1648 USE surf_param_mod, ONLY: eff_surf_param !AM 1646 1649 USE yomcst_mod_h 1647 USE phys_local_var_mod, only: l_mixmin, l_mix 1650 USE phys_local_var_mod, only: l_mixmin, l_mix, wprime 1648 1651 IMPLICIT NONE 1649 1652 … … 2015 2018 runoff(:)=0. ; icesub_lic(:)=0. 2016 2019 l_mixmin(:,:,:)=0. 2017 l_mix(:,:,:)=0. 2020 l_mix(:,:,:) = 0. 2021 wprime(:,:,:) = 0 2018 2022 #ifdef ISO 2019 2023 zxxtevap(:,:)=0. … … 2324 2328 delp, d_t_diss_x, d_t_diss_w, flux_t_x, flux_q_x, flux_t_w, flux_q_w,& 2325 2329 flux_u_x, flux_v_x, flux_u_w, flux_v_w, fluxlat_x, fluxlat_w) 2330 !$gpum horizontal knon 2331 2332 2326 2333 !**************************************************************************************** 2327 2334 ! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818 … … 2435 2442 USE lmdz_checksum, ONLY : checksum 2436 2443 USE mod_phys_lmdz_para, ONLY : is_master 2444 USE cdrag_mod, ONLY : cdrag 2445 2437 2446 IMPLICIT NONE 2438 2447 … … 3272 3281 ENDDO 3273 3282 ! 3283 3274 3284 CALL eff_surf_param(knon, nbtersrf, yz0m_tersrf, yfrac_tersrf, 'CDN', yz0m, zgeo1/RG) 3275 3285 CALL eff_surf_param(knon, nbtersrf, yz0h_tersrf, yfrac_tersrf, 'CDN', yz0h, zgeo1/RG) … … 3280 3290 ! 3281 3291 ypblh_tmp(:)=s_pblh(ni(:)) 3292 3282 3293 CALL cdrag(knon, nsrf, & 3283 3294 speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1), ypblh_tmp, & … … 3327 3338 3328 3339 ypblh_tmp(:)=s_pblh_w(ni(:)) 3340 3329 3341 CALL cdrag(knon, nsrf, & 3330 3342 speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1),s_pblh_w,& … … 3372 3384 3373 3385 IF (iflag_pbl>=50) THEN 3386 3374 3387 CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm, ycdragh,yus0,yvs0,yts, & 3375 3388 yu, yv,yt,yq,ypplay,ypaprs, & … … 3377 3390 3378 3391 ELSE 3392 3379 3393 3380 3394 CALL coef_diff_turb(dtime, nsrf, knon, ni, & … … 3421 3435 3422 3436 ELSE 3437 3423 3438 3424 3439 CALL coef_diff_turb(dtime, nsrf, knon, ni, & … … 3456 3471 IF (iflag_pbl>=50) THEN 3457 3472 3458 CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm_w(1:knon),ycdragh_w(1:knon),yus0(1:knon),yvs0(1:knon),yts_w(1:knon), & 3459 yu_w(1:knon,:),yv_w(1:knon,:),yt_w(1:knon,:),yq_w(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:), & 3460 ytke_w(1:knon,:),yeps_w(1:knon,:),ycoefm_w(1:knon,:),ycoefh_w(1:knon,:)) 3473 3474 CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm_w,ycdragh_w,yus0,yvs0,yts_w, & 3475 yu_w, yv_w, yt_w, yq_w, ypplay, ypaprs, & 3476 ytke_w, yeps_w, ycoefm_w, ycoefh_w) 3461 3477 3462 3478 ELSE … … 3519 3535 & ) 3520 3536 ELSE !(iflag_split .eq.0) 3537 3521 3538 CALL climb_hq_down(knon, ni, ycoefh_x, ypaprs, ypplay, & 3522 3539 ydelp, yt_x, yq_x, dtime, & … … 3536 3553 ENDIF 3537 3554 3555 3538 3556 CALL climb_hq_down(knon, ni, ycoefh_w, ypaprs, ypplay, & 3539 3557 ydelp, yt_w, yq_w, dtime, & … … 3558 3576 ! - Calculate the coefficients Ccoef_U, Ccoef_V, Dcoef_U and Dcoef_V 3559 3577 IF (iflag_split .eq.0) THEN 3578 3560 3579 CALL climb_wind_down(knon, ni, dtime, ycoefm, ypplay, ypaprs, yt, ydelp, yu, yv, & 3561 3580 CcoefU, CcoefV, DcoefU, DcoefV, & … … 3563 3582 AcoefU, AcoefV, BcoefU, BcoefV) 3564 3583 ELSE ! (iflag_split .eq.0) 3584 3565 3585 CALL climb_wind_down(knon, ni, dtime, ycoefm_x, ypplay, ypaprs, yt_x, ydelp, yu_x, yv_x, & 3566 3586 CcoefU_x, CcoefV_x, DcoefU_x, DcoefV_x, & … … 3584 3604 enddo 3585 3605 enddo 3606 3586 3607 CALL climb_qbs_down(knon, ni, ycoefqbs, ypaprs, ypplay, & 3587 3608 ydelp, yt, yqbs, dtime, & … … 3654 3675 ENDIF ! ( f_z0qh_oce .ne. 1. .and. nsrf .eq.is_oce) 3655 3676 ! 3677 3656 3678 CALL wx_pbl_prelim_0(knon, nsrf, dtime, ypplay, ypaprs, ywake_s, & 3657 3679 yts, y_delta_tsurf, ygustiness, & … … 3669 3691 BcoefQ_x, BcoefQ_w & 3670 3692 ) 3693 3671 3694 CALL wx_pbl0_merge(knon, ypplay, ypaprs, & 3672 3695 ywake_s, ydTs0, ydqs0, & … … 3685 3708 ) 3686 3709 IF (iflag_split .eq. 2 .AND. nsrf .ne. is_oce) THEN 3710 3687 3711 CALL wx_pbl_dts_merge(knon, dtime, ypplay, ypaprs, & 3688 3712 ywake_s, ybeta, ywake_cstar, ywake_dens, & … … 3743 3767 ! Calculate the temperature et relative humidity at 2m and the wind at 10m 3744 3768 IF (iflag_new_t2mq2m==1) THEN 3745 CALL stdlevvarn(knon, knon, is_ter, zxli, & 3769 3770 CALL stdlevvarn(knon, knon, is_ter, zxli, & 3746 3771 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 3747 3772 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & … … 3749 3774 yn2mout) 3750 3775 ELSE 3776 3751 3777 CALL stdlevvar(knon, knon, is_ter, zxli, & 3752 3778 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & … … 3767 3793 3768 3794 CASE(is_ter) 3795 3769 3796 CALL surf_land(itap, dtime, date0, jour, knon, ni,& 3770 3797 rlon, rlat, yrmu0, & … … 3792 3819 3793 3820 IF (ifl_pbltree .ge. 1) THEN 3821 3794 3822 CALL freinage(knon, knon, yu, yv, yt, & 3795 3823 yveget,ylai, yheight,ypaprs,ypplay,y_treedrg, y_d_u_frein,y_d_v_frein) … … 3830 3858 IF (landice_opt .LT. 2) THEN 3831 3859 ! Land ice is treated by LMDZ and not by ORCHIDEE 3860 3832 3861 CALL surf_landice(itap, dtime, knon, ni, & 3833 3862 rlon, rlat, debut, lafin, & … … 3916 3945 ENDDO 3917 3946 3918 DO j = 1, knon 3919 k= minloc(abs(ypphii(j,:)-300),1) 3920 ydthetadz300(j)=ydthetadz(j,k) 3947 !ym minloc does't work on GPU (nvfortran + openacc) 3948 ! DO j = 1, knon 3949 ! k= minloc(abs(ypphii(j,:)-300),1) 3950 ! ydthetadz300(j)=ydthetadz(j,k) 3951 ! ENDDO 3952 3953 ydthetadz300(1:knon) = ydthetadz(1:knon,1) 3954 DO k=2, klev 3955 DO j=1,knon 3956 IF (abs(ypphii(j,k)-300) < ydthetadz300(j)) ydthetadz300(j) = abs(ypphii(j,k)-300) 3957 ENDDO 3921 3958 ENDDO 3959 3922 3960 end if 3923 3961 … … 3942 3980 #endif 3943 3981 & ) 3982 !$gpum nocall 3944 3983 CALL checksum("yalb_dir_new_ocean",yalb_dir_new(1:knon,:)) 3945 3984 IF (prt_level >=10) THEN … … 3967 4006 3968 4007 CASE(is_sic) 4008 3969 4009 CALL surf_seaice( & 3970 4010 rlon, rlat, ysolsw, ysollw, yalb_vis, yfder, & … … 4135 4175 BcoefQ_x, BcoefQ_w & 4136 4176 ) 4177 4137 4178 CALL wx_pbl0_merge(knon, ypplay, ypaprs, & 4138 4179 ywake_s, ydTs0, ydqs0, & … … 4151 4192 ) 4152 4193 IF (iflag_split .eq. 2) THEN 4194 4153 4195 CALL wx_pbl_dts_merge(knon, dtime, ypplay, ypaprs, & 4154 4196 ywake_s, ybeta, ywake_cstar, ywake_dens, & … … 4219 4261 4220 4262 IF (nsrf .ne. is_oce) THEN 4263 4221 4264 CALL wx_pbl_dts_check(knon, dtime, ypplay, ypaprs, ywake_s, ybeta, iflag_split, & 4222 4265 yTs, y_delta_tsurf, & … … 4282 4325 & ) 4283 4326 ELSE !(iflag_split .eq.0) 4327 4284 4328 CALL climb_hq_up(knon, ni, dtime, yt_x, yq_x, & 4285 4329 y_flux_q1_x, y_flux_t1_x, ypaprs, ypplay, & … … 4295 4339 & ) 4296 4340 ! 4341 4297 4342 CALL climb_hq_up(knon, ni, dtime, yt_w, yq_w, & 4298 4343 y_flux_q1_w, y_flux_t1_w, ypaprs, ypplay, & … … 4361 4406 y_d_t_diss(:,:)=0. 4362 4407 IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN 4408 4363 4409 CALL yamada_c(knon, knon,dtime,ypaprs,ypplay & 4364 4410 & ,yu,yv,yt,y_d_u,y_d_v,y_d_t,ycdragm,ytke,ycoefm,ycoefh,ycoefq,y_d_t_diss,yustar & … … 4367 4413 4368 4414 ELSE !(iflag_split .eq.0) 4415 4369 4416 CALL climb_wind_up(knon, ni, dtime, yu_x, yv_x, y_flux_u1_x, y_flux_v1_x, & 4370 4417 AcoefU_x, AcoefV_x, BcoefU_x, BcoefV_x, & … … 4375 4422 y_d_t_diss_x(:,:)=0. 4376 4423 IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN 4424 4377 4425 CALL yamada_c(knon, knon,dtime,ypaprs,ypplay & 4378 4426 & ,yu_x,yv_x,yt_x,y_d_u_x,y_d_v_x,y_d_t_x,ycdragm_x,ytke_x,ycoefm_x,ycoefh_x & … … 4389 4437 y_d_t_diss_w(:,:)=0. 4390 4438 IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN 4439 4391 4440 CALL yamada_c(knon, knon,dtime,ypaprs,ypplay & 4392 4441 & ,yu_w,yv_w,yt_w,y_d_u_w,y_d_v_w,y_d_t_w,ycdragm_w,ytke_w,ycoefm_w,ycoefh_w & … … 4403 4452 4404 4453 IF (ok_bs) THEN 4454 4405 4455 CALL climb_qbs_up(knon, ni, dtime, yqbs, & 4406 4456 y_flux_bs, ypaprs, ypplay, & … … 4877 4927 CALL checksum("yq2m_bis", yq2m(1:knon)) 4878 4928 ELSE 4929 4879 4930 CALL stdlevvar(knon, knon, nsrf, zxli, & 4880 4931 uzon, vmer, tair1, qair1, zgeo1, & … … 4884 4935 ELSE !(iflag_split .eq.0) 4885 4936 IF (iflag_new_t2mq2m==1) THEN 4937 4886 4938 CALL stdlevvarn(knon, knon, nsrf, zxli, & 4887 4939 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & … … 4889 4941 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, & 4890 4942 yn2mout_x(:, :, :)) 4943 4891 4944 CALL stdlevvarn(knon, knon, nsrf, zxli, & 4892 4945 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & … … 4895 4948 yn2mout_w(:, :, :)) 4896 4949 ELSE 4950 4897 4951 CALL stdlevvar(knon, knon, nsrf, zxli, & 4898 4952 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & 4899 4953 tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, & 4900 4954 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, ypblh_x, rain_f, yzxtsol) 4955 4901 4956 CALL stdlevvar(knon, knon, nsrf, zxli, & 4902 4957 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & … … 5010 5065 5011 5066 IF (iflag_split .eq.0) THEN 5067 5012 5068 CALL hbtm(knon, ypaprs, ypplay, & 5013 5069 yt2m,yt10m,yq2m,yq10m,yustar,ywstar, & … … 5029 5085 ENDIF 5030 5086 ELSE ! (iflag_split .eq.0) 5087 5031 5088 CALL HBTM(knon, ypaprs, ypplay, & 5032 5089 yt2m_x,yt10m_x,yq2m_x,yq10m_x,yustar_x,ywstar_x, & … … 5047 5104 print *,' Arg. de HBTM: yq_x ',yq_x(1:knon,:) 5048 5105 ENDIF 5106 5049 5107 CALL HBTM(knon, ypaprs, ypplay, & 5050 5108 yt2m_w,yt10m_w,yq2m_w,yq10m_w,yustar_w,ywstar_w, &
Note: See TracChangeset
for help on using the changeset viewer.
