Changeset 5961 for LMDZ6/trunk
- Timestamp:
- Dec 18, 2025, 7:53:01 PM (13 days ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 2 edited
-
pbl_surface_mod.F90 (modified) (6 diffs)
-
yamada_c.F90 (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
r5959 r5961 112 112 USE climb_wind_mod, ONLY : climb_wind_init 113 113 USE climb_qbs_mod, ONLY : climb_qbs_init 114 USE yamada_c_mod, ONLY : yamada_c_init 114 115 115 116 IMPLICIT NONE … … 270 271 CALL climb_wind_init 271 272 CALL climb_qbs_init 273 CALL yamada_c_init 272 274 273 275 END SUBROUTINE pbl_surface_init … … 2451 2453 USE cdrag_mod, ONLY : cdrag 2452 2454 USE freinage_mod, ONLY : freinage 2455 USE yamada_c_mod, ONLY : yamada_c 2453 2456 2454 2457 IMPLICIT NONE … … 4415 4418 IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN 4416 4419 4417 CALL yamada_c( knon, knon,dtime,ypaprs,ypplay &4420 CALL yamada_c( knon, knon, dtime,ypaprs,ypplay & 4418 4421 & ,yu,yv,yt,y_d_u,y_d_v,y_d_t,ycdragm,ytke,ycoefm,ycoefh,ycoefq,y_d_t_diss,yustar & 4419 4422 & ,iflag_pbl) … … 4422 4425 ELSE !(iflag_split .eq.0) 4423 4426 4424 CALL climb_wind_up( knon, ni, dtime, yu_x, yv_x, y_flux_u1_x, y_flux_v1_x, &4427 CALL climb_wind_up( knon, ni, dtime, yu_x, yv_x, y_flux_u1_x, y_flux_v1_x, & 4425 4428 AcoefU_x, AcoefV_x, BcoefU_x, BcoefV_x, & 4426 4429 CcoefU_x, CcoefV_x, DcoefU_x, DcoefV_x, & … … 4446 4449 IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN 4447 4450 4448 CALL yamada_c( knon, knon,dtime,ypaprs,ypplay &4451 CALL yamada_c( knon, knon,dtime,ypaprs,ypplay & 4449 4452 & ,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 & 4450 4453 ,ycoefq_w,y_d_t_diss_w,yustar_w & -
LMDZ6/trunk/libf/phylmd/yamada_c.F90
r5950 r5961 2 2 ! $Header$ 3 3 ! 4 MODULE yamada_c_mod 5 PRIVATE 6 7 INTEGER, SAVE :: iflag_tke_diff=0 8 !$OMP THTREADPRIVATE(iflag_tke_diff) 9 10 PUBLIC :: yamada_c_init, yamada_c 11 12 CONTAINS 13 14 SUBROUTINE yamada_c_init 15 USE ioipsl_getin_p_mod, ONLY : getin_p 16 IMPLICIT NONE 17 18 CALL getin_p('iflag_tke_diff',iflag_tke_diff) 19 20 END SUBROUTINE yamada_c_init 21 22 4 23 SUBROUTINE yamada_c(klon, ngrid,timestep,plev,play & 5 24 & ,pu,pv,pt,d_u,d_v,d_t,cd,q2,km,kn,kq,d_t_diss,ustar & 6 25 & ,iflag_pbl) 26 !$gpum horizontal klon ngrid 7 27 USE dimphy, ONLY: klev 8 28 USE print_control_mod, ONLY: prt_level 9 USE ioipsl_getin_p_mod, ONLY : getin_p10 29 USE yamada4_mod, ONLY : vdif_q2 11 30 USE yomcst_mod_h … … 80 99 integer nlay,nlev 81 100 82 logical first83 integer ipas84 save first,ipas101 !ym logical first 102 !ym integer ipas 103 !ym save first,ipas 85 104 !FH/IM data first,ipas/.true.,0/ 86 data first,ipas/.false.,0/87 ! $OMP THREADPRIVATE( first,ipas)88 INTEGER, SAVE :: iflag_tke_diff=089 ! $OMP THREADPRIVATE(iflag_tke_diff)105 !ym data first,ipas/.false.,0/ 106 !ym!$OMP THREADPRIVATE( first,ipas) 107 !ym INTEGER, SAVE :: iflag_tke_diff=0 108 !ym!$OMP THREADPRIVATE(iflag_tke_diff) 90 109 91 110 … … 102 121 real l(klon,klev+1) 103 122 real leff(klon,klev+1) 104 real,allocatable,save :: l0(:) 105 !$OMP THREADPRIVATE(l0) 123 real l0(klon) 124 !ym real,allocatable,save :: l0(:) 125 !ym!$OMP THREADPRIVATE(l0) 106 126 real sq(klon),sqz(klon),zz(klon,klev+1) 107 127 integer iter 108 128 109 real ric,rifc,b1,kap 110 save ric,rifc,b1,kap 111 data ric,rifc,b1,kap/0.195,0.191,16.6,0.4/ 112 !$OMP THREADPRIVATE(ric,rifc,b1,kap) 129 !ym real ric,rifc,b1,kap 130 !ym save ric,rifc,b1,kap 131 !ym data ric,rifc,b1,kap/0.195,0.191,16.6,0.4/ 132 !ym!$OMP THREADPRIVATE(ric,rifc,b1,kap) 133 real, parameter :: ric=0.195,rifc=0.191,b1=16.6,kap=0.4 113 134 real frif,falpha,fsm 114 135 real fl,zzz,zl0,zq2,zn2 … … 117 138 real lyam(klon,klev),knyam(klon,klev) 118 139 real w2yam(klon,klev),t2yam(klon,klev) 119 logical,save :: firstcall=.true.120 ! $OMP THREADPRIVATE(firstcall)140 !ym logical,save :: firstcall=.true. 141 !ym!$OMP THREADPRIVATE(firstcall) 121 142 CHARACTER(len=20),PARAMETER :: modname="yamada_c" 122 143 REAL, DIMENSION(klon,klev+1) :: fluxu,fluxv,fluxt … … 129 150 falpha(ri)=1.318*(0.2231-ri)/(0.2341-ri) 130 151 fsm(ri)=1.96*(0.1912-ri)*(0.2341-ri)/((1.-ri)*(0.2231-ri)) 152 !ym pas glop! pas glop! 153 !ym fl(zzz,zl0,zq2,zn2)= & 154 !ym & max(min(zl0(ig)*kap*zlev(ig,k)/(kap*zlev(ig,k)+l0(ig)) & 155 !ym & ,0.5*sqrt(q2(ig,k))/sqrt(max(n2(ig,k),1.e-10))) ,1.) 131 156 fl(zzz,zl0,zq2,zn2)= & 132 & max(min( l0(ig)*kap*zlev(ig,k)/(kap*zlev(ig,k)+l0(ig)) &133 & ,0.5*sqrt( q2(ig,k))/sqrt(max(n2(ig,k),1.e-10))) ,1.)157 & max(min(zl0*kap*zzz/(kap*zzz+zl0) & 158 & ,0.5*sqrt(zq2)/sqrt(max(zn2,1.e-10))) ,1.) 134 159 135 160 136 161 okiophys=klon==1 137 if (firstcall) then138 CALL getin_p('iflag_tke_diff',iflag_tke_diff)139 allocate(l0(klon))140 firstcall=.false.141 endif162 !ym if (firstcall) then 163 !ym CALL getin_p('iflag_tke_diff',iflag_tke_diff) 164 !ym allocate(l0(klon)) 165 !ym firstcall=.false. 166 !ym endif 142 167 143 168 IF (ngrid<=0) RETURN ! Bizarre : on n a pas ce probeleme pour coef_diff_turb … … 175 200 do k=1,klev-1 176 201 zlay(:,k+1)=zlay(:,k)+0.5*RCPD*(teta(:,k)+teta(:,k+1))*(exner(:,k)-exner(:,k+1))/RG 177 zlev(:,k)=0.5*(zlay(:,k)+zlay(:,k+1)) ! PASBO 202 zlev(:,k+1)=0.5*(zlay(:,k)+zlay(:,k+1)) ! PASBO 203 ! ym bugfix : zlev(:,k) => zlev(:,k+1) 178 204 enddo 179 205 … … 220 246 221 247 222 ipas=ipas+1248 !ym ipas=ipas+1 223 249 224 250 … … 312 338 l0(ig)=0.2*sqz(ig)/sq(ig) 313 339 enddo 340 l(:,1) = 0. 341 l(:,klev+1) = 0. 314 342 do k=2,klev 315 343 do ig=1,ngrid … … 326 354 327 355 l0(:)=150. 356 l(:,1) = 0. 357 l(:,klev+1) = 0. 328 358 do k=2,klev 329 359 do ig=1,ngrid … … 480 510 RETURN 481 511 END SUBROUTINE yamada_c 512 513 END MODULE yamada_c_mod
Note: See TracChangeset
for help on using the changeset viewer.
