13 REAL,
DIMENSION(:,:),
ALLOCATABLE :: gamaq, gamah
15 REAL,
DIMENSION(:,:),
ALLOCATABLE :: Ccoef_Q, Dcoef_Q
17 REAL,
DIMENSION(:,:),
ALLOCATABLE :: Ccoef_H, Dcoef_H
19 REAL,
DIMENSION(:),
ALLOCATABLE :: Acoef_Q, Bcoef_Q
21 REAL,
DIMENSION(:),
ALLOCATABLE :: Acoef_H, Bcoef_H
23 REAL,
DIMENSION(:,:),
ALLOCATABLE :: Kcoefhq
32 acoef_h_out, acoef_q_out, bcoef_h_out, bcoef_q_out)
41 INTEGER,
INTENT(IN) :: knon
42 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: coefhq
43 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
pplay
44 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
45 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
temp, delp
46 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
q
47 REAL,
INTENT(IN) ::
dtime
51 REAL,
DIMENSION(klon),
INTENT(OUT) :: acoef_h_out
52 REAL,
DIMENSION(klon),
INTENT(OUT) :: acoef_q_out
53 REAL,
DIMENSION(klon),
INTENT(OUT) :: bcoef_h_out
54 REAL,
DIMENSION(klon),
INTENT(OUT) :: bcoef_q_out
58 LOGICAL,
SAVE :: first=.true.
60 REAL,
DIMENSION(klon,klev) :: local_h
61 REAL,
DIMENSION(klon) :: psref
78 ALLOCATE(ccoef_q(klon,
klev), stat=ierr)
79 IF ( ierr /= 0 ) print*,
' pb in allloc Ccoef_Q, ierr=', ierr
81 ALLOCATE(dcoef_q(klon,
klev), stat=ierr)
82 IF ( ierr /= 0 ) print*,
' pb in allloc Dcoef_Q, ierr=', ierr
84 ALLOCATE(ccoef_h(klon,
klev), stat=ierr)
85 IF ( ierr /= 0 ) print*,
' pb in allloc Ccoef_H, ierr=', ierr
87 ALLOCATE(dcoef_h(klon,
klev), stat=ierr)
88 IF ( ierr /= 0 ) print*,
' pb in allloc Dcoef_H, ierr=', ierr
90 ALLOCATE(acoef_q(klon), bcoef_q(klon), acoef_h(klon), bcoef_h(klon), stat=ierr)
91 IF ( ierr /= 0 ) print*,
' pb in allloc Acoef_X and Bcoef_X, ierr=', ierr
93 ALLOCATE(kcoefhq(klon,
klev), stat=ierr)
94 IF ( ierr /= 0 ) print*,
' pb in allloc Kcoefhq, ierr=', ierr
96 ALLOCATE(gamaq(1:klon,2:
klev), stat=ierr)
97 IF ( ierr /= 0 ) print*,
' pb in allloc gamaq, ierr=', ierr
99 ALLOCATE(gamah(1:klon,2:
klev), stat=ierr)
100 IF ( ierr /= 0 ) print*,
' pb in allloc gamah, ierr=', ierr
123 psref(:) = paprs(:,1)
126 IF (iflag_pbl == 1)
THEN
128 gamah(:,:) = -1.0e-03
129 gamah(:,2) = -2.5e-03
136 pkh = (psref(
i)/paprs(
i,
k))**rkappa
139 gamaq(
i,
k) = gamaq(
i,
k) * delz
141 gamah(
i,
k) = gamah(
i,
k) * delz * rcpd * pkh
157 CALL
calc_coef(knon, kcoefhq(:,:), gamaq(:,:), delp(:,:),
q(:,:), &
158 ccoef_q(:,:), dcoef_q(:,:), acoef_q, bcoef_q)
175 CALL
calc_coef(knon, kcoefhq(:,:), gamah(:,:), delp(:,:), local_h(:,:), &
176 ccoef_h(:,:), dcoef_h(:,:), acoef_h, bcoef_h)
183 acoef_h_out = acoef_h
184 bcoef_h_out = bcoef_h
185 acoef_q_out = acoef_q
186 bcoef_q_out = bcoef_q
192 SUBROUTINE calc_coef(knon, Kcoef, gama, delp, X, Ccoef, Dcoef, Acoef, Bcoef)
200 INTEGER,
INTENT(IN) :: knon
201 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: kcoef, delp
202 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
x
203 REAL,
DIMENSION(klon,2:klev),
INTENT(IN) :: gama
207 REAL,
DIMENSION(klon),
INTENT(OUT) :: acoef, bcoef
208 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: ccoef, dcoef
237 buf = delp(
i,
k) + kcoef(
i,
k) + kcoef(
i,
k+1)*(1.-dcoef(
i,
k+1))
238 ccoef(
i,
k) = (
x(
i,
k)*delp(
i,
k) + kcoef(
i,
k+1)*ccoef(
i,
k+1) + &
239 kcoef(
i,
k+1)*gama(
i,
k+1) - kcoef(
i,
k)*gama(
i,
k))/buf
240 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)*(gama(
i,2)+ccoef(
i,2)))/buf
252 bcoef(
i) = -1. * rg / buf
254 acoef(knon+1: klon) = 0.
255 bcoef(knon+1: klon) = 0.
262 flx_q1, flx_h1, paprs,
pplay, &
263 flux_q, flux_h, d_q, d_t)
274 INTEGER,
INTENT(IN) :: knon
275 REAL,
INTENT(IN) ::
dtime
276 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: t_old, q_old
277 REAL,
DIMENSION(klon),
INTENT(IN) :: flx_q1, flx_h1
278 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
279 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
pplay
283 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: flux_q, flux_h, d_q, d_t
287 LOGICAL,
SAVE :: last=.
false.
288 REAL,
DIMENSION(klon,klev) :: h_new, q_new
289 REAL,
DIMENSION(klon) :: psref
290 INTEGER ::
k,
i, ierr
302 psref(1:knon) = paprs(1:knon,1)
311 q_new(1:knon,1) = acoef_q(1:knon) + bcoef_q(1:knon)*flx_q1(1:knon)*
dtime
312 h_new(1:knon,1) = acoef_h(1:knon) + bcoef_h(1:knon)*flx_h1(1:knon)*
dtime
317 q_new(
i,
k) = ccoef_q(
i,
k) + dcoef_q(
i,
k)*q_new(
i,
k-1)
318 h_new(
i,
k) = ccoef_h(
i,
k) + dcoef_h(
i,
k)*h_new(
i,
k-1)
328 flux_q(1:knon,1)=flx_q1(1:knon)
329 flux_h(1:knon,1)=flx_h1(1:knon)
334 flux_q(
i,
k) = (kcoefhq(
i,
k)/rg/
dtime) * &
335 (q_new(
i,
k)-q_new(
i,
k-1)+gamaq(
i,
k))
337 flux_h(
i,
k) = (kcoefhq(
i,
k)/rg/
dtime) * &
338 (h_new(
i,
k)-h_new(
i,
k-1)+gamah(
i,
k))
350 d_t(
i,
k) = h_new(
i,
k)/(psref(
i)/
pplay(
i,
k))**rkappa/rcpd - t_old(
i,
k)
351 d_q(
i,
k) = q_new(
i,
k) - q_old(
i,
k)
360 DEALLOCATE(ccoef_q, dcoef_q, ccoef_h, dcoef_h,stat=ierr)
361 IF ( ierr /= 0 ) print*,
' pb in dealllocate Ccoef_Q, Dcoef_Q, Ccoef_H, Dcoef_H, ierr=', ierr
362 DEALLOCATE(acoef_q, bcoef_q, acoef_h, bcoef_h,stat=ierr)
363 IF ( ierr /= 0 ) print*,
' pb in dealllocate Acoef_Q, Bcoef_Q, Acoef_H, Bcoef_H, ierr=', ierr
364 DEALLOCATE(gamaq, gamah,stat=ierr)
365 IF ( ierr /= 0 ) print*,
' pb in dealllocate gamaq, gamah, ierr=', ierr
366 DEALLOCATE(kcoefhq,stat=ierr)
367 IF ( ierr /= 0 ) print*,
' pb in dealllocate Kcoefhq, ierr=', ierr