13 REAL,
DIMENSION(:),
ALLOCATABLE :: alf1, alf2
15 REAL,
DIMENSION(:,:),
ALLOCATABLE :: Kcoefm
17 REAL,
DIMENSION(:,:),
ALLOCATABLE :: Ccoef_U, Dcoef_U
19 REAL,
DIMENSION(:,:),
ALLOCATABLE :: Ccoef_V, Dcoef_V
21 REAL,
DIMENSION(:),
ALLOCATABLE :: Acoef_U, Bcoef_U
23 REAL,
DIMENSION(:),
ALLOCATABLE :: Acoef_V, Bcoef_V
25 LOGICAL :: firstcall=.TRUE.
38 CHARACTER(len = 20) :: modname =
'climb_wind_init'
45 ALLOCATE(alf1(klon), stat=ierr)
46 IF (ierr /= 0) CALL
abort_gcm(modname,
'Pb in allocate alf2',1)
48 ALLOCATE(alf2(klon), stat=ierr)
49 IF (ierr /= 0) CALL
abort_gcm(modname,
'Pb in allocate alf2',1)
51 ALLOCATE(kcoefm(klon,
klev), stat=ierr)
52 IF (ierr /= 0) CALL
abort_gcm(modname,
'Pb in allocate Kcoefm',1)
54 ALLOCATE(ccoef_u(klon,
klev), stat=ierr)
55 IF (ierr /= 0) CALL
abort_gcm(modname,
'Pb in allocate Ccoef_U',1)
57 ALLOCATE(dcoef_u(klon,
klev), stat=ierr)
58 IF (ierr /= 0) CALL
abort_gcm(modname,
'Pb in allocation Dcoef_U',1)
60 ALLOCATE(ccoef_v(klon,
klev), stat=ierr)
61 IF (ierr /= 0) CALL
abort_gcm(modname,
'Pb in allocation Ccoef_V',1)
63 ALLOCATE(dcoef_v(klon,
klev), stat=ierr)
64 IF (ierr /= 0) CALL
abort_gcm(modname,
'Pb in allocation Dcoef_V',1)
66 ALLOCATE(acoef_u(klon), bcoef_u(klon), acoef_v(klon), bcoef_v(klon), stat=ierr)
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, &
76 acoef_u_out, acoef_v_out, bcoef_u_out, bcoef_v_out)
86 INTEGER,
INTENT(IN) :: knon
87 REAL,
INTENT(IN) ::
dtime
88 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: coef_in
89 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
pplay
90 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
91 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
temp
92 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: delp
93 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: u_old
94 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: v_old
98 REAL,
DIMENSION(klon),
INTENT(OUT) :: acoef_u_out
99 REAL,
DIMENSION(klon),
INTENT(OUT) :: acoef_v_out
100 REAL,
DIMENSION(klon),
INTENT(OUT) :: bcoef_u_out
101 REAL,
DIMENSION(klon),
INTENT(OUT) :: bcoef_v_out
105 REAL,
DIMENSION(klon) :: u1lay, v1lay
119 alf2(:) = 1.0 - alf1(:)
131 CALL
calc_coef(knon, kcoefm(:,:), delp(:,:), &
132 u_old(:,:), alf1(:), alf2(:), &
133 ccoef_u(:,:), dcoef_u(:,:), acoef_u(:), bcoef_u(:))
136 CALL
calc_coef(knon, kcoefm(:,:), delp(:,:), &
137 v_old(:,:), alf1(:), alf2(:), &
138 ccoef_v(:,:), dcoef_v(:,:), acoef_v(:), bcoef_v(:))
145 acoef_u_out = acoef_u
146 bcoef_u_out = bcoef_u
147 acoef_v_out = acoef_v
148 bcoef_v_out = bcoef_v
154 SUBROUTINE calc_coef(knon, Kcoef, delp, X, alfa1, alfa2, Ccoef, Dcoef, Acoef, Bcoef)
160 INTEGER,
INTENT(IN) :: knon
161 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: kcoef, delp
162 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
x
163 REAL,
DIMENSION(klon),
INTENT(IN) :: alfa1, alfa2
167 REAL,
DIMENSION(klon),
INTENT(OUT) :: acoef, bcoef
168 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: ccoef, dcoef
196 buf = delp(
i,
k) + kcoef(
i,
k) + kcoef(
i,
k+1)*(1.-dcoef(
i,
k+1))
198 ccoef(
i,
k) = (
x(
i,
k)*delp(
i,
k) + kcoef(
i,
k+1)*ccoef(
i,
k+1))/buf
199 dcoef(
i,
k) = kcoef(
i,
k)/buf
207 buf = delp(
i,1) + kcoef(
i,2)*(1-dcoef(
i,2))
208 acoef(
i) = (
x(
i,1)*delp(
i,1) + kcoef(
i,2)*ccoef(
i,2))/buf
211 acoef(knon+1: klon) = 0.
212 bcoef(knon+1: klon) = 0.
220 flx_u_new, flx_v_new, d_u_new, d_v_new)
234 INTEGER,
INTENT(IN) :: knon
235 REAL,
INTENT(IN) ::
dtime
236 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: u_old
237 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: v_old
238 REAL,
DIMENSION(klon),
INTENT(IN) :: flx_u1, flx_v1
242 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: flx_u_new, flx_v_new
243 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: d_u_new, d_v_new
247 REAL,
DIMENSION(klon,klev) :: u_new, v_new
255 u_new(
i,1) = acoef_u(
i) + bcoef_u(
i)*flx_u1(
i)*
dtime
256 v_new(
i,1) = acoef_v(
i) + bcoef_v(
i)*flx_v1(
i)*
dtime
262 u_new(
i,
k) = ccoef_u(
i,
k) + dcoef_u(
i,
k) * u_new(
i,
k-1)
263 v_new(
i,
k) = ccoef_v(
i,
k) + dcoef_v(
i,
k) * v_new(
i,
k-1)
278 flx_u_new(1:knon,1)=flx_u1(1:knon)
279 flx_v_new(1:knon,1)=flx_v1(1:knon)
284 flx_u_new(
i,
k) = kcoefm(
i,
k)/rg/
dtime * &
285 (u_new(
i,
k)-u_new(
i,
k-1))
287 flx_v_new(
i,
k) = kcoefm(
i,
k)/rg/
dtime * &
288 (v_new(
i,
k)-v_new(
i,
k-1))
300 d_u_new(
i,
k) = u_new(
i,
k) - u_old(
i,
k)
301 d_v_new(
i,
k) = v_new(
i,
k) - v_old(
i,
k)