15 REAL,
DIMENSION(:,:),
ALLOCATABLE ::
kcoefm
38 CHARACTER(len = 20) :: modname =
'climb_wind_init'
46 IF (ierr /= 0)
CALL abort_physic(modname,
'Pb in allocate alf1',1)
49 IF (ierr /= 0)
CALL abort_physic(modname,
'Pb in allocate alf2',1)
52 IF (ierr /= 0)
CALL abort_physic(modname,
'Pb in allocate Kcoefm',1)
55 IF (ierr /= 0)
CALL abort_physic(modname,
'Pb in allocate Ccoef_U',1)
58 IF (ierr /= 0)
CALL abort_physic(modname,
'Pb in allocation Dcoef_U',1)
61 IF (ierr /= 0)
CALL abort_physic(modname,
'Pb in allocation Ccoef_V',1)
64 IF (ierr /= 0)
CALL abort_physic(modname,
'Pb in allocation Dcoef_V',1)
67 IF ( ierr /= 0 ) print*,
' pb in allloc Acoef_U and Bcoef_U, ierr=', ierr
75 SUBROUTINE climb_wind_down(knon, dtime, coef_in, pplay, paprs, temp, delp, u_old, v_old, &
77 ccoef_u_out, ccoef_v_out, dcoef_u_out, dcoef_v_out, &
78 kcoef_m_out, alf_1_out, alf_2_out, &
80 acoef_u_out, acoef_v_out, bcoef_u_out, bcoef_v_out)
90 INTEGER,
INTENT(IN) :: knon
91 REAL,
INTENT(IN) :: dtime
92 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: coef_in
93 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pplay
94 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
95 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: temp
96 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: delp
97 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: u_old
98 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: v_old
102 REAL,
DIMENSION(klon),
INTENT(OUT) :: Acoef_U_out
103 REAL,
DIMENSION(klon),
INTENT(OUT) :: Acoef_V_out
104 REAL,
DIMENSION(klon),
INTENT(OUT) :: Bcoef_U_out
105 REAL,
DIMENSION(klon),
INTENT(OUT) :: Bcoef_V_out
108 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Ccoef_U_out
109 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Ccoef_V_out
110 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Dcoef_U_out
111 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Dcoef_V_out
112 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Kcoef_m_out
113 REAL,
DIMENSION(klon),
INTENT(OUT) :: alf_1_out
114 REAL,
DIMENSION(klon),
INTENT(OUT) :: alf_2_out
119 REAL,
DIMENSION(klon) :: u1lay, v1lay
143 kcoefm(i,k) = coef_in(i,k)*
rg*
rg*dtime/(pplay(i,k-1)-pplay(i,k)) &
144 *(paprs(i,k)*2/(temp(i,k)+temp(i,k-1))/rd)**2
174 IF (mod(iflag_pbl_split,2) .eq.1)
THEN
178 ccoef_u_out(i,k) =
ccoef_u(i,k)
179 ccoef_v_out(i,k) =
ccoef_v(i,k)
180 dcoef_u_out(i,k) =
dcoef_u(i,k)
181 dcoef_v_out(i,k) =
dcoef_v(i,k)
182 kcoef_m_out(i,k) =
kcoefm(i,k)
186 alf_1_out(i) =
alf1(i)
187 alf_2_out(i) =
alf2(i)
197 SUBROUTINE calc_coef(knon, Kcoef, delp, X, alfa1, alfa2, Ccoef, Dcoef, Acoef, Bcoef)
203 INTEGER,
INTENT(IN) :: knon
204 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: Kcoef, delp
205 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: X
206 REAL,
DIMENSION(klon),
INTENT(IN) :: alfa1, alfa2
210 REAL,
DIMENSION(klon),
INTENT(OUT) :: Acoef, Bcoef
211 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: Ccoef, Dcoef
239 buf = delp(i,k) + kcoef(i,k) + kcoef(i,k+1)*(1.-dcoef(i,k+1))
241 ccoef(i,k) = (x(i,k)*delp(i,k) + kcoef(i,k+1)*ccoef(i,k+1))/buf
242 dcoef(i,k) = kcoef(i,k)/buf
250 buf = delp(i,1) + kcoef(i,2)*(1-dcoef(i,2))
251 acoef(i) = (x(i,1)*delp(i,1) + kcoef(i,2)*ccoef(i,2))/buf
260 SUBROUTINE climb_wind_up(knon, dtime, u_old, v_old, flx_u1, flx_v1, &
262 acoef_u_in, acoef_v_in, bcoef_u_in, bcoef_v_in, &
263 ccoef_u_in, ccoef_v_in, dcoef_u_in, dcoef_v_in, &
266 flx_u_new, flx_v_new, d_u_new, d_v_new)
279 INTEGER,
INTENT(IN) :: knon
280 REAL,
INTENT(IN) :: dtime
281 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: u_old
282 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: v_old
283 REAL,
DIMENSION(klon),
INTENT(IN) :: flx_u1, flx_v1
286 REAL,
DIMENSION(klon),
INTENT(IN) :: Acoef_U_in,Acoef_V_in, Bcoef_U_in, Bcoef_V_in
287 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: Ccoef_U_in, Ccoef_V_in, Dcoef_U_in, Dcoef_V_in
288 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: Kcoef_m_in
293 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: flx_u_new, flx_v_new
294 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: d_u_new, d_v_new
298 REAL,
DIMENSION(klon,klev) :: u_new, v_new
310 IF (mod(iflag_pbl_split,2) .eq.1)
THEN
324 kcoefm(i,k)=kcoef_m_in(i,k)
356 flx_u_new(1:knon,1)=flx_u1(1:knon)
357 flx_v_new(1:knon,1)=flx_v1(1:knon)
362 flx_u_new(i,k) =
kcoefm(i,k)/
rg/dtime * &
363 (u_new(i,k)-u_new(i,k-1))
365 flx_v_new(i,k) =
kcoefm(i,k)/
rg/dtime * &
366 (v_new(i,k)-v_new(i,k-1))
378 d_u_new(i,k) = u_new(i,k) - u_old(i,k)
379 d_v_new(i,k) = v_new(i,k) - v_old(i,k)
real, dimension(:,:), allocatable ccoef_v
subroutine calc_coef(knon, Kcoef, delp, X, alfa1, alfa2, Ccoef, Dcoef, Acoef, Bcoef)
real, dimension(:), allocatable acoef_u
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
subroutine, public climb_wind_up(knon, dtime, u_old, v_old, flx_u1, flx_v1,
real, dimension(:), allocatable bcoef_u
subroutine climb_wind_init
real, dimension(:,:), allocatable kcoefm
real, dimension(:,:), allocatable dcoef_v
real, dimension(:,:), allocatable dcoef_u
real, dimension(:), allocatable alf2
real, dimension(:), allocatable bcoef_v
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
real, dimension(:), allocatable acoef_v
subroutine abort_physic(modname, message, ierr)
subroutine, public climb_wind_down(knon, dtime, coef_in, pplay, paprs, temp, delp, u_old, v_old,
real, dimension(:), allocatable alf1
real, dimension(:,:), allocatable ccoef_u