2 & masse,
q,dq,qa,lev_out)
19 integer ngrid,
nlay,impl
22 real masse(ngrid,
nlay),fm(ngrid,
nlay+1)
35 real qold(ngrid,
nlay),fqa(ngrid,
nlay+1)
37 CHARACTER (LEN=20) :: modname=
'thermcell_dq'
38 CHARACTER (LEN=80) :: abort_message
44 & masse,
q,dq,qa,lev_out)
52 zzm=masse(ig,
k)/ptimestep
53 cfl=max(cfl,fm(ig,
k)/zzm)
54 if (entr(ig,
k).gt.zzm)
then
55 print*,
'entr dt > m ',entr(ig,
k)*ptimestep,masse(ig,
k)
65 if (
prt_level.ge.1) print*,
'Q2 THERMCEL_DQ 0'
70 detr(ig,
k)=fm(ig,
k)-fm(ig,
k+1)+entr(ig,
k)
73 if (
detr(ig,
k).lt.0.)
then
74 entr(ig,
k)=entr(ig,
k)-
detr(ig,
k)
79 if (fm(ig,
k+1).lt.0.)
then
82 if (entr(ig,
k).lt.0.)
then
95 if ((fm(ig,
k+1)+
detr(ig,
k))*ptimestep.gt. &
96 & 1.e-5*masse(ig,
k))
then
97 qa(ig,
k)=(fm(ig,
k)*qa(ig,
k-1)+entr(ig,
k)*
q(ig,
k)) &
102 if (qa(ig,
k).lt.0.)
then
105 if (
q(ig,
k).lt.0.)
then
113 fqa(:,
k)=fm(:,
k)*qa(:,
k-1)
115 fqa(:,1)=0. ; fqa(:,
nlay)=0.
121 q(:,
k)=
q(:,
k)+(fqa(:,
k)-fqa(:,
k+1)-fm(:,
k)*
q(:,
k)+fm(:,
k+1)*
q(:,
k+1)) &
122 & *ptimestep/masse(:,
k)
126 q(:,
k)=(masse(:,
k)*
q(:,
k)/ptimestep+fqa(:,
k)-fqa(:,
k+1)+fm(:,
k+1)*
q(:,
k+1)) &
127 & /(fm(:,
k)+masse(:,
k)/ptimestep)
134 dq(ig,
k)=(
q(ig,
k)-qold(ig,
k))/ptimestep
147 & masse,
q,dq,qa,lev_out)
150 #include "iniprint.h"
162 real masse(ngrid,
nlay),fm(ngrid,
nlay+1)
163 real entr(ngrid,
nlay)
175 real qold(ngrid,
nlay)
178 CHARACTER (LEN=20) :: modname=
'thermcell_dq'
179 CHARACTER (LEN=80) :: abort_message
187 zzm=masse(ig,
k)/ptimestep
188 cfl=max(cfl,fm(ig,
k)/zzm)
189 if (entr(ig,
k).gt.zzm)
then
190 print*,
'entr dt > m ',entr(ig,
k)*ptimestep,masse(ig,
k)
207 ztimestep=ptimestep/niter
212 if (
prt_level.ge.1) print*,
'Q2 THERMCEL_DQ 0'
217 detr(ig,
k)=fm(ig,
k)-fm(ig,
k+1)+entr(ig,
k)
220 if (
detr(ig,
k).lt.0.)
then
221 entr(ig,
k)=entr(ig,
k)-
detr(ig,
k)
226 if (fm(ig,
k+1).lt.0.)
then
229 if (entr(ig,
k).lt.0.)
then
242 if ((fm(ig,
k+1)+
detr(ig,
k))*ztimestep.gt. &
243 & 1.e-5*masse(ig,
k))
then
244 qa(ig,
k)=(fm(ig,
k)*qa(ig,
k-1)+entr(ig,
k)*
q(ig,
k)) &
245 & /(fm(ig,
k+1)+
detr(ig,
k))
249 if (qa(ig,
k).lt.0.)
then
252 if (
q(ig,
k).lt.0.)
then
264 wqd(ig,
k)=fm(ig,
k)*0.5*(
q(ig,
k-1)+
q(ig,
k))
270 zzm=masse(ig,
k)/ztimestep
271 if (fm(ig,
k)>zzm)
then
272 wqd(ig,
k)=zzm*
q(ig,
k)+(fm(ig,
k)-zzm)*
q(ig,
k+1)
274 wqd(ig,
k)=fm(ig,
k)*
q(ig,
k)
277 wqd(ig,
k)=fm(ig,
k)*
q(ig,
k)
281 if (wqd(ig,
k).lt.0.)
then
296 & -wqd(ig,
k)+wqd(ig,
k+1)) &
297 & *ztimestep/masse(ig,
k)
311 dq(ig,
k)=(
q(ig,
k)-qold(ig,
k))/ptimestep