SUBROUTINE GRINFL(IVEG,THLIQ,THICE,TBARW,BASFLW,RUNOFF, 4,5
1 QFG,WLOST,FI,EVAP,R,TR,TPOND,ZPOND,DT,
2 ZMAT,WMOVE,TMOVE,THLIQX,THICEX,TBARWX,
3 DELZX,ZBOTX,FDT,TFDT,PSIF,THLINF,GRKINF,
4 THLMAX,THTEST,ZRMDR,FDUMMY,TDUMMY,THLDUM,
5 THIDUM,TDUMW,TRMDR,ZF,FMAX,TUSED,RDUMMY,
6 ZERO,WEXCES,FDTBND,WADD,TADD,WADJ,TIMPND,
7 DZF,DTFLOW,THLNLZ,THLQLZ,DZDISP,WDISP,WABS,
8 THPOR,THLRET,THLMIN,BI,PSISAT,GRKSAT,GRKTLD,
9 THLRAT,DELZW,ZBOTW,XDRAIN,ISAND,IGRN,
A IGRD,IFILL,IZERO,LZF,NINF,IFIND,ITER,
B NEND,ISIMP,IG,IGP1,IGP2,ILG,IL1,IL2,JL )
C
C * AUG 19/04 - Y.DELAGE. REGROUP COMMON BLOCKS
C * MAKE DECLARATIONS EXPLICIT
C * JUL 26/02 - D.VERSEGHY. SHORTENED CLASS4 COMMON BLOCK.
C * DEC 12/01 - D.VERSEGHY. PASS NEW VARIABLE IN FOR CALCULATION
C * OF BASEFLOW.
C * JUN 20/97 - D.VERSEGHY. CLASS - VERSION 2.7.
C * MODIFICATIONS TO ALLOW FOR VARIABLE
C * SOIL PERMEABLE DEPTH.
C * APR 17/96 - D.VERSEGHY. CLASS - VERSION 2.5.
C * BUG FIX: INITIALIZE FDT AND TFDT
C * TO ZERO.
C * AUG 18/95 - D.VERSEGHY. CLASS - VERSION 2.4.
C * REVISIONS TO ALLOW FOR INHOMOGENEITY
C * BETWEEN SOIL LAYERS.
C * APR 24/92 - D.VERSEGHY/M.LAZARE. CLASS - VERSION 2.1.
C * REVISED AND VECTORIZED CODE
C * FOR MODEL VERSION GCM7.
C * AUG 12/91 - D.VERSEGHY. CODE FOR MODEL VERSION GCM7U -
C * CLASS VERSION 2.0 (WITH CANOPY).
C * APR 11/89 - D.VERSEGHY. UPDATE SOIL LAYER TEMPERATURES AND
C * LIQUID MOISTURE CONTENTS FOR
C * INFILTRATING CONDITIONS (I.E.
C * PONDED WATER OR RAINFALL OCCURRING
C * WITHIN CURRENT TIMESTEP).
C
IMPLICIT NONE
INTEGER IVEG,IG,IGP1,IGP2,ILG,IL1,IL2,JL,I,J
REAL THLPOT,THLTLD,PSIINF,GRK,PSI
C * INPUT/OUTPUT FIELDS.
C
REAL THLIQ (ILG,IG), THICE (ILG,IG), TBARW (ILG,IG)
C
REAL BASFLW(ILG), RUNOFF(ILG), QFG (ILG),
1 WLOST (ILG)
C
C * INPUT FIELDS.
C
REAL FI (ILG), EVAP (ILG), R (ILG), TR (ILG),
1 TPOND (ILG), ZPOND (ILG), DT (ILG)
C
C * WORK FIELDS (FOR ALL CALLED ROUTINES AS WELL).
C
REAL ZMAT (ILG,IGP2,IGP1)
C
REAL WMOVE (ILG,IGP2), TMOVE (ILG,IGP2)
C
REAL THLIQX(ILG,IGP1), THICEX(ILG,IGP1), TBARWX(ILG,IGP1),
1 DELZX (ILG,IGP1), ZBOTX (ILG,IGP1), FDT (ILG,IGP1),
2 TFDT (ILG,IGP1), PSIF (ILG,IGP1), THLINF(ILG,IGP1),
3 GRKINF(ILG,IGP1), THLMAX(ILG,IG), THTEST(ILG,IG),
4 ZRMDR (ILG,IGP1), FDUMMY(ILG,IGP1), TDUMMY(ILG,IGP1),
5 THLDUM(ILG,IG), THIDUM(ILG,IG), TDUMW (ILG,IG)
C
REAL TRMDR (ILG), ZF (ILG), FMAX (ILG), TUSED (ILG),
1 RDUMMY(ILG), ZERO (ILG), WEXCES(ILG), FDTBND(ILG),
2 WADD (ILG), TADD (ILG), WADJ (ILG), TIMPND(ILG),
3 DZF (ILG), DTFLOW(ILG), THLNLZ(ILG), THLQLZ(ILG),
4 DZDISP(ILG), WDISP (ILG), WABS (ILG)
C
C * SOIL INFORMATION ARRAYS.
C
REAL THPOR (ILG,IG), THLRET(ILG,IG), THLMIN(ILG,IG),
1 BI (ILG,IG), PSISAT(ILG,IG), GRKSAT(ILG,IG),
3 GRKTLD(ILG,IG), THLRAT(ILG,IG), DELZW (ILG,IG),
4 ZBOTW (ILG,IG), XDRAIN(ILG)
C
C * VARIOUS INTEGER ARRAYS.
C
INTEGER ISAND (ILG,IG), IGRN (ILG), IGRD (ILG),
1 IFILL (ILG), IZERO (ILG), LZF (ILG),
2 NINF (ILG), IFIND (ILG), ITER (ILG),
3 NEND (ILG), ISIMP (ILG)
C
#include "class_com.cdk"
C-----------------------------------------------------------------------
C * DETERMINE POINTS WHICH SATISFY CONDITIONS FOR THESE CALCULATIONS
C * AND STORE THEM AS HAVING NON-ZERO VALUES FOR WORK ARRAY "IGRN".
C
DO 50 I=IL1,IL2
IF(FI(I).GT.0. .AND.
1 ISAND(I,1).GT.-4 .AND. DT(I).GT.0. .AND.
2 (R(I).GT.0. .OR. ZPOND(I).GT.0.)) THEN
IGRN(I)=1
IFILL(I)=0
RDUMMY(I)=0.
ELSE
IGRN(I)=0
IFILL(I)=0
ENDIF
50 CONTINUE
C
C * INITIALIZATION; DETERMINATION OF SOIL HYDRAULIC CONDUCTIVITIES
C * AND SOIL MOISTURE SUCTION ACROSS WETTING FRONT.
C
DO 100 J=1,IG
DO 100 I=IL1,IL2
IF(IGRN(I).GT.0) THEN
THLPOT=THPOR(I,J)-THICE(I,J)*RHOICE/RHOW
THLTLD=THLRAT(I,J)*THPOR(I,J)
THLIQX(I,J)=THLIQ(I,J)
THICEX(I,J)=THICE(I,J)
TBARWX(I,J)=TBARW(I,J)
DELZX(I,J)=DELZW(I,J)
ZBOTX(I,J)=ZBOTW(I,J)
FDT (I,J)=0.0
TFDT(I,J)=0.0
IF(THLIQ(I,J).GT.MIN(THLTLD,THLPOT)) THEN
THLINF(I,J)=MAX(THLIQ(I,J),THLMIN(I,J))
GRKINF(I,J)=MIN(GRKSAT(I,J)*(THLINF(I,J)/THPOR(I,J))
1 **(2.*BI(I,J)+3.), GRKSAT(I,J))
ELSE
IF(THICE(I,J).GT.0.) THEN
THLINF(I,J)=MIN(THLTLD,MAX(THLPOT,THLMIN(I,J)))
GRKINF(I,J)=MIN(GRKSAT(I,J)*(THLINF(I,J)/
1 THPOR(I,J))**(2.*BI(I,J)+3.), GRKTLD(I,J))
ELSE
THLINF(I,J)=THLTLD
GRKINF(I,J)=GRKTLD(I,J)
ENDIF
ENDIF
ENDIF
100 CONTINUE
C
DO 150 I=IL1,IL2
IF(IGRN(I).GT.0) THEN
THLIQX(I,IG+1)=THLIQX(I,IG)
THICEX(I,IG+1)=THICEX(I,IG)
TBARWX(I,IG+1)=TBARWX(I,IG)
IF(XDRAIN(I).GT.0.0) THEN
DELZX(I,IG+1)=999994.9
ELSE
DELZX(I,IG+1)=0.0
ENDIF
ZBOTX (I,IG+1)=999999.
FDT (I,IG+1)=0.0
TFDT (I,IG+1)=0.0
THLINF(I,IG+1)=THLINF(I,IG)
GRKINF(I,IG+1)=GRKINF(I,IG)*XDRAIN(I)
ENDIF
150 CONTINUE
C
DO 200 J=1,IG
DO 200 I=IL1,IL2
IF(IGRN(I).GT.0) THEN
IF(THPOR(I,J).GT.0.) THEN
PSIINF=MAX(PSISAT(I,J)*(THLINF(I,J)/THPOR(I,J))**
1 (-BI(I,J)),PSISAT(I,J))
GRK=MIN(GRKSAT(I,J)*(THLIQ(I,J)/THPOR(I,J))**
1 (2.*BI(I,J)+3.),GRKSAT(I,J))
PSI=MAX(PSISAT(I,J)*(THLIQ(I,J)/THPOR(I,J))**
1 (-BI(I,J)),PSISAT(I,J))
ELSE
PSIINF=PSISAT(I,J)
GRK=GRKSAT(I,J)
PSI=PSISAT(I,J)
ENDIF
IF(THLINF(I,J).GT.THLIQ(I,J)) THEN
PSIF(I,J)=MAX(BI(I,J)*(GRKINF(I,J)*PSIINF-GRK*PSI)/
1 (GRKSAT(I,J)*(BI(I,J)+3.)), 0.0)
ELSE
PSIF(I,J)=0.0
ENDIF
ENDIF
200 CONTINUE
C
DO 250 I=IL1,IL2
IF(IGRN(I).GT.0) THEN
PSIF(I,IG+1)=PSIF(I,IG)
TRMDR(I)=DELT
ELSE
TRMDR(I)=0.
ENDIF
250 CONTINUE
C
DO 300 J=1,IGP2
DO 300 I=IL1,IL2
IF(IGRN(I).GT.0) THEN
WMOVE(I,J)=0.0
TMOVE(I,J)=0.0
ENDIF
300 CONTINUE
C
C * DETERMINE STARTING POSITION OF WETTING FRONT; INITIALIZATION
C * FOR SATURATED INFILTRATION.
C * (FOR FOLLOWING LOOPS VECTORIZATION AND OPTIMIZATION ARE ENHANCED
C * BY UNROLLING THE INNER-MOST LOOP. THIS EXPLICITLY ASSUMES THAT
C * IG=3 AND THE ROUTINE IS ABORTED IF SUCH IS NOT THE CASE.)
C
IF(IG.NE.3) CALL XIT
('GRINFL',-1)
DO 400 I=IL1,IL2
IF(IGRN(I).GT.0) THEN
IF(THLIQ(I,1).GE.THLINF(I,1)-1.e-6 .AND.
1 THLIQ(I,2).GE.THLINF(I,2)-1.e-6 .AND.
2 THLIQ(I,3).GE.THLINF(I,3)-1.e-6) THEN
ZF(I)=ZBOTW(I,3)
LZF(I)=4
NINF(I)=5
WMOVE(I,2)=THLIQ(I,1)*DELZW(I,1)
TMOVE(I,2)=TBARW(I,1)
WMOVE(I,3)=THLIQ(I,2)*DELZW(I,2)
TMOVE(I,3)=TBARW(I,2)
WMOVE(I,4)=THLIQ(I,3)*DELZW(I,3)
TMOVE(I,4)=TBARW(I,3)
TMOVE(I,NINF(I))=TBARWX(I,LZF(I))
FMAX(I)=MIN(GRKINF(I,1),GRKINF(I,2),GRKINF(I,3))
ELSE IF(THLIQ(I,1).GE.THLINF(I,1)-1.e-6 .AND.
1 THLIQ(I,2).GE.THLINF(I,2)-1.e-6) THEN
ZF(I)=ZBOTW(I,2)
LZF(I)=3
NINF(I)=4
WMOVE(I,2)=THLIQ(I,1)*DELZW(I,1)
TMOVE(I,2)=TBARW(I,1)
WMOVE(I,3)=THLIQ(I,2)*DELZW(I,2)
TMOVE(I,3)=TBARW(I,2)
TMOVE(I,NINF(I))=TBARWX(I,LZF(I))
FMAX(I)=MIN(GRKINF(I,1),GRKINF(I,2))
ELSE IF(THLIQ(I,1).GE.THLINF(I,1)-1.e-6) THEN
ZF(I)=ZBOTW(I,1)
LZF(I)=2
NINF(I)=3
WMOVE(I,2)=THLIQ(I,1)*DELZW(I,1)
TMOVE(I,2)=TBARW(I,1)
TMOVE(I,NINF(I))=TBARWX(I,LZF(I))
FMAX(I)=GRKINF(I,1)
ELSE IF(ZPOND(I).GT.0. .OR. GRKINF(I,1).LE.0.) THEN
ZF(I)=0.0
LZF(I)=1
NINF(I)=2
TMOVE(I,NINF(I))=TBARWX(I,LZF(I))
FMAX(I)=999999.
ELSE
IFILL(I)=1
ENDIF
ENDIF
400 CONTINUE
C
C * IF SATURATED INFILTRATION CONDITIONS ARE NOT PRESENT AT ONCE
C * (IFILL=1), CALL "WFILL" TO DO PROCESSING FOR PERIOD OF
C * UNSATURATED INFILTRATION.
C
CALL WFILL
(WMOVE,TMOVE,LZF,NINF,ZF,TRMDR,R,TR,
1 PSIF,GRKINF,THLINF,THLIQX,TBARWX,
2 DELZX,ZBOTX,DZF,TIMPND,WADJ,WADD,
3 IFILL,IFIND,IG,IGP1,IGP2,ILG,IL1,IL2,JL )
C
DO 500 I=IL1,IL2
IF(IFILL(I).GT.0) THEN
FMAX(I)=999999.
ENDIF
500 CONTINUE
C
DO 600 J=1,IGP1
DO 600 I=IL1,IL2
IF(IFILL(I).GT.0 .AND. LZF(I).GT.1 .AND. J.LT.LZF(I)) THEN
FMAX(I)=MIN(GRKINF(I,J),FMAX(I))
ENDIF
600 CONTINUE
C
C * CALL "WFLOW" TO DO PROCESSING FOR PERIOD OF SATURATED
C * INFILTRATION.
C
CALL WFLOW
(WMOVE,TMOVE,LZF,NINF,TRMDR,TPOND,ZPOND,
1 R,TR,EVAP,PSIF,GRKINF,THLINF,THLIQX,TBARWX,
2 DELZX,ZBOTX,FMAX,ZF,DZF,DTFLOW,THLNLZ,
3 THLQLZ,DZDISP,WDISP,WABS,ITER,NEND,ISIMP,
4 IGRN,IG,IGP1,IGP2,ILG,IL1,IL2,JL )
C
C * RECALCULATE TEMPERATURES AND LIQUID MOISTURE CONTENTS OF
C * SOIL LAYERS FOLLOWING INFILTRATION.
C
CALL WEND
(THLIQX,THICEX,TBARWX,BASFLW,RUNOFF,FI,
1 WMOVE,TMOVE,LZF,NINF,TRMDR,THLINF,DELZX,
2 ZMAT,ZRMDR,FDTBND,WADD,TADD,FDT,TFDT,
3 THLMAX,THTEST,THLDUM,THIDUM,TDUMW,
4 TUSED,RDUMMY,ZERO,WEXCES,XDRAIN,
5 THPOR,THLRET,THLMIN,BI,PSISAT,GRKSAT,
6 DELZW,ISAND,IGRN,IGRD,IZERO,
7 IVEG,IG,IGP1,IGP2,ILG,IL1,IL2,JL )
C
DO 800 J=1,IG
DO 800 I=IL1,IL2
IF(IGRN(I).GT.0) THEN
THLIQ(I,J)=THLIQX(I,J)
THICE(I,J)=THICEX(I,J)
TBARW(I,J)=TBARWX(I,J)
ENDIF
800 CONTINUE
C
C * IF TIME REMAINS IN THE CURRENT MODEL STEP AFTER INFILTRATION
C * HAS CEASED (TRMDR>0), CALL "GRDRAN" TO CALCULATE WATER FLOWS
C * BETWEEN LAYERS FOR THE REMAINDER OF THE TIME STEP.
C
CALL GRDRAN
(IVEG,THLIQ,THICE,TBARW,FDUMMY,TDUMMY,
1 BASFLW,RUNOFF,QFG,WLOST,FI,EVAP,ZERO,ZERO,
2 TRMDR,WEXCES,THLMAX,THTEST,THPOR,THLRET,THLMIN,
3 BI,PSISAT,GRKSAT,DELZW,XDRAIN,ISAND,IZERO,
4 IGRD,IG,IGP1,IGP2,ILG,IL1,IL2,JL )
C
RETURN
END