2 : ,ph,t,rr,rs,
u,
v,tra,h,lv,qnk
3 : ,unk,vnk,hp,tv,tvp,ep,clw,sig
4 : ,ment,qent,hent,uent,vent,nent
5 : ,sigij,elij,supmax,ments,qents,traent)
22 integer ncum, nd, na, ntra, nloc
23 integer icb(nloc), inb(nloc), nk(nloc)
25 real qnk(nloc),unk(nloc),vnk(nloc)
27 real t(nloc,nd), rr(nloc,nd), rs(nloc,nd)
28 real u(nloc,nd),
v(nloc,nd)
29 real tra(nloc,nd,ntra)
33 real tv(nloc,na), tvp(nloc,na), ep(nloc,na), clw(nloc,na)
36 real ment(nloc,na,na), qent(nloc,na,na)
37 real uent(nloc,na,na), vent(nloc,na,na)
38 real sigij(nloc,na,na), elij(nloc,na,na)
41 real traent(nloc,nd,nd,ntra)
42 real ments(nloc,nd,nd), qents(nloc,nd,nd)
49 real rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
51 real qmixmax(nloc), rmixmax(nloc), sqmrmax(nloc)
52 real qmixmin(nloc), rmixmin(nloc), sqmrmin(nloc)
55 real smid(nloc), sjmin(nloc), sjmax(nloc)
56 real sbef(nloc), sup(nloc), smin(nloc)
57 real asij(nloc), smax(nloc), scrit(nloc)
63 REAL amxupcrit, df, ff
68 real qcoef1,qcoef2,qff,qfff,qmix,rmix,qmix1,rmix1,qmix2,rmix2,
f
72 qff(
f) = max(min(
f,1.),0.)
74 qmix1(
f) = ( tanh((qff(
f) - fmax)/
gammas)+qcoef1max )/
77 1 +qff(
f)*qcoef1max ) / qcoef2max
78 qmix2(
f) = -log(1.-qfff(
f))/
scut
79 rmix2(
f) = (qfff(
f)+(1.-qff(
f))*log(1.-qfff(
f)))/
scut
83 INTEGER,
SAVE :: ifrst
93 IF (ifrst .EQ. 0)
THEN
95 qcoef1max = qcoef1(fmax)
96 qcoef2max = qcoef2(fmax)
127 ment(1:ncum,1:nd,1:nd)=0.0
128 sij(1:ncum,1:nd,1:nd)=0.0
135 traent(il,
i,
j,
k)=tra(il,
j,
k)
151 if( (
i.ge.icb(il)).and.(
i.le.inb(il)).and.
152 : (
j.ge.(icb(il)-1)).and.(
j.le.inb(il)))
then
154 rti=qnk(il)-ep(il,
i)*clw(il,
i)
155 bf2=1.+lv(il,
j)*lv(il,
j)*rs(il,
j)/(
rrv*t(il,
j)*t(il,
j)*
cpd)
156 anum=h(il,
j)-hp(il,
i)+(
cpv-
cpd)*t(il,
j)*(rti-rr(il,
j))
157 denom=h(il,
i)-hp(il,
i)+(
cpd-
cpv)*(rr(il,
i)-rti)*t(il,
j)
159 if(abs(dei).lt.0.01)dei=0.01
162 altem=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti-rs(il,
j)
164 cwat=clw(il,
j)*(1.-ep(il,
j))
166 if((stemp.lt.0.0.or.stemp.gt.1.0.or.altem.gt.cwat)
168 anum=anum-lv(il,
j)*(rti-rs(il,
j)-cwat*bf2)
169 denom=denom+lv(il,
j)*(rr(il,
i)-rti)
170 if(abs(denom).lt.0.01)denom=0.01
171 sij(il,
i,
j)=anum/denom
172 altem=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti-rs(il,
j)
173 altem=altem-(bf2-1.)*cwat
175 if(sij(il,
i,
j).gt.0.0)
then
179 elij(il,
i,
j)=amax1(0.0,elij(il,
i,
j))
180 nent(il,
i)=nent(il,
i)+1
183 sij(il,
i,
j)=amax1(0.0,sij(il,
i,
j))
184 sij(il,
i,
j)=amin1(1.0,sij(il,
i,
j))
197 if ((
i.ge.icb(il)).and.(
i.le.inb(il))
198 : .and.(nent(il,
i).eq.0))
then
202 qent(il,
i,
i)=qnk(il)-ep(il,
i)*clw(il,
i)
205 elij(il,
i,
i)=clw(il,
i)*(1.-ep(il,
i))
214 if (
i.ge.icb(il) .and.
i.le.inb(il)
215 : .and. nent(il,
i).eq.0)
then
216 traent(il,
i,
i,
j)=tra(il,nk(il),
j)
225 if ((
j.ge.(icb(il)-1)).and.(
j.le.inb(il))
226 : .and.(
i.ge.icb(il)).and.(
i.le.inb(il)))
then
227 sigij(il,
i,
j)=sij(il,
i,
j)
241 call
zilch(csum,nloc*nd)
253 if (
i.ge.icb(il) .and.
i.le.inb(il) ) num1=num1+1
255 if (num1.le.0) goto 789
263 IF (
i.ge.icb(il) .and.
i.le.inb(il) )
THEN
264 signhpmh(il) = sign(1.,hp(il,
i)-h(il,
i))
265 sbef(il) = max(0.,signhpmh(il))
271 IF (
i.ge.icb(il) .and.
i.le.inb(il)
272 : .and.
j.le.inb(il) )
THEN
273 IF (sbef(il) .LT. sij(il,
i,
j))
THEN
274 sx(il) = max(sij(il,
i,
j),sx(il))
276 sbef(il) = sij(il,
i,
j)
283 if (
i.ge.icb(il) .and.
i.le.inb(il) )
then
284 lwork(il)=(nent(il,
i).ne.0)
285 qp=qnk(il)-ep(il,
i)*clw(il,
i)
286 anum=h(il,
i)-hp(il,
i)-lv(il,
i)*(qp-rs(il,
i))
288 denom=h(il,
i)-hp(il,
i)+lv(il,
i)*(rr(il,
i)-qp)
290 if(abs(denom).lt.0.01)denom=0.01
291 scrit(il)=min(anum/denom,1.)
292 alt=qp-rs(il,
i)+scrit(il)*(rr(il,
i)-qp)
298 scrit2 = min(scrit(il),sx(il))*max(0.,-signhpmh(il))
299 : +scrit(il)*max(0.,signhpmh(il))
305 if(scrit(il).le.0.0)scrit(il)=0.0
306 if(alt.le.0.0) scrit(il)=1.0
320 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
321 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
322 : .and. lwork(il) ) num2=num2+1
324 if (num2.le.0) goto 175
330 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
331 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
332 : .and. lwork(il) )
then
333 if(sij(il,
i,
j).gt.0.0)
then
334 smid(il)=min(sij(il,
i,
j),scrit(il))
337 IF (smid(il) .LT. smin(il) .AND.
338 1 sij(il,
i,
j+1) .LT. smid(il))
THEN
340 sjmax(il)=min( (sij(il,
i,
j+1)+sij(il,
i,
j))/2. ,
343 sjmin(il)=max( (sbef(il)+sij(il,
i,
j))/2. ,
345 sjmin(il)=min(sjmin(il),scrit(il))
346 sbef(il) = sij(il,
i,
j)
352 ELSE IF (
j .EQ.
i)
THEN
355 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
356 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
357 : .and. lwork(il) )
then
358 if(sij(il,
i,
j).gt.0.0)
then
360 sjmin(il) = max((sij(il,
i,
j-1)+smid(il))/2.,scrit(il))
361 1 *max(0.,-signhpmh(il))
362 1 +min((sij(il,
i,
j+1)+smid(il))/2.,scrit(il))
363 1 *max(0., signhpmh(il))
364 sjmin(il) = max(sjmin(il),sup(il))
368 scrit(il) = min(sjmin(il),sjmax(il),scrit(il))
371 sbef(il) = max(0.,signhpmh(il))
372 supmax(il,
i) = sign(scrit(il),-signhpmh(il))
377 ELSE IF (
j .LT.
i)
THEN
380 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
381 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
382 : .and. lwork(il) )
then
383 if(sij(il,
i,
j).gt.0.0)
then
384 smid(il)=max(sij(il,
i,
j),scrit(il))
387 IF (smid(il) .GT. smax(il) .AND.
388 1 sij(il,
i,
j+1) .GT. smid(il))
THEN
390 sjmax(il) = max( (sij(il,
i,
j+1)+sij(il,
i,
j))/2. ,
392 sjmax(il) = max(sjmax(il),scrit(il))
393 sjmin(il) = min( (sbef(il)+sij(il,
i,
j))/2. ,
395 sjmin(il) = max(sjmin(il),scrit(il))
396 sbef(il) = sij(il,
i,
j)
398 IF (abs(sjmin(il)-sjmax(il)) .GT. 1.e-10) sup(il)=
399 1 max(sjmin(il),sjmax(il),sup(il))
409 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
410 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
411 : .and. lwork(il) )
then
412 if(sij(il,
i,
j).gt.0.0)
then
413 rti=qnk(il)-ep(il,
i)*clw(il,
i)
414 qmixmax(il)=qmix(sjmax(il))
415 qmixmin(il)=qmix(sjmin(il))
416 rmixmax(il)=rmix(sjmax(il))
417 rmixmin(il)=rmix(sjmin(il))
418 sqmrmax(il)= sjmax(il)*qmix(sjmax(il))-rmix(sjmax(il))
419 sqmrmin(il)= sjmin(il)*qmix(sjmin(il))-rmix(sjmin(il))
421 ment(il,
i,
j) = abs(qmixmax(il)-qmixmin(il))*ment(il,
i,
j)
424 IF (abs(qmixmax(il)-qmixmin(il)) .GT. 1.e-10)
THEN
426 : (sqmrmax(il)-sqmrmin(il))/(qmixmax(il)-qmixmin(il))
432 qent(il,
i,
j) = (1.-sigij(il,
i,
j))*rti
433 : + sigij(il,
i,
j)*rr(il,
i)
434 uent(il,
i,
j) = (1.-sigij(il,
i,
j))*unk(il)
435 : + sigij(il,
i,
j)*
u(il,
i)
436 vent(il,
i,
j) = (1.-sigij(il,
i,
j))*vnk(il)
437 : + sigij(il,
i,
j)*
v(il,
i)
450 hent(il,
i,
j) = (1.-sigij(il,
i,
j))*hp(il,
i)
451 : + sigij(il,
i,
j)*h(il,
i)
453 elij(il,
i,
j) = qent(il,
i,
j)-rs(il,
j)
454 elij(il,
i,
j) = elij(il,
i,
j)
455 : + ((h(il,
j)-hent(il,
i,
j))*rs(il,
j)*lv(il,
j)
457 : *
rrv*t(il,
j)*t(il,
j)))
458 elij(il,
i,
j) = elij(il,
i,
j)
459 : / (1.+lv(il,
j)*lv(il,
j)*rs(il,
j)
461 : *
rrv*t(il,
j)*t(il,
j)))
463 elij(il,
i,
j) = max(elij(il,
i,
j),0.)
465 elij(il,
i,
j) = min(elij(il,
i,
j),qent(il,
i,
j))
468 awat=elij(il,
i,
j)-(1.-ep(il,
j))*clw(il,
j)
477 hent(il,
i,
j) = hent(il,
i,
j)+(lv(il,
j)+(
cpd-
cpv)*t(il,
j))
486 1 + abs(qmixmax(il)*(1.-sjmax(il))+rmixmax(il)
487 1 -qmixmin(il)*(1.-sjmin(il))-rmixmin(il))
494 if( (
i.ge.icb(il)).and.(
i.le.inb(il)).and.
495 : (
j.ge.(icb(il)-1)).and.(
j.le.inb(il))
496 : .and. lwork(il) )
then
497 if(sij(il,
i,
j).gt.0.0)
then
498 traent(il,
i,
j,
k)=sigij(il,
i,
j)*tra(il,
i,
k)
499 : +(1.-sigij(il,
i,
j))*tra(il,nk(il),
k)
509 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
510 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
511 : .and. lwork(il) )
then
512 if(sij(il,
i,
j).gt.0.0)
then
513 rti=qnk(il)-ep(il,
i)*clw(il,
i)
515 ment(il,
i,
i) = abs(qmixmax(il)*(1.-sjmax(il))
517 1 -qmixmin(il)*(1.-sjmin(il))-rmixmin(il))
519 uent(il,
i,
i) = unk(il)
520 vent(il,
i,
i) = vnk(il)
521 hent(il,
i,
i) = hp(il,
i)
522 elij(il,
i,
i) = clw(il,
i)*(1.-ep(il,
i))
529 if( (
i.ge.icb(il)).and.(
i.le.inb(il)).and.
530 : (
j.ge.(icb(il)-1)).and.(
j.le.inb(il))
531 : .and. lwork(il) )
then
532 if(sij(il,
i,
j).gt.0.0)
then
533 traent(il,
i,
i,
k)=tra(il,nk(il),
k)
544 if (
i.ge.icb(il).and.
i.le.inb(il).and.lwork(il))
then
545 asij(il)=amax1(1.0e-16,asij(il))
546 asij(il)=1.0/asij(il)
553 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
554 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
555 ment(il,
i,
j)=ment(il,
i,
j)*asij(il)
562 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
563 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
564 csum(il,
i)=csum(il,
i)+ment(il,
i,
j)
570 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
571 : .and. csum(il,
i).lt.1. )
then
576 qent(il,
i,
i)=qnk(il)-ep(il,
i)*clw(il,
i)
579 elij(il,
i,
i)=clw(il,
i)*(1.-ep(il,
i))
586 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
587 : .and. csum(il,
i).lt.1. )
then
589 traent(il,
i,
i,
j)=tra(il,nk(il),
j)