c Copyright (C) Stichting Deltares, 2005-2014.
c
c This file is part of iMOD.
c
c This program is free software: you can redistribute it and/or modify
c it under the terms of the GNU General Public License as published by
c the Free Software Foundation, either version 3 of the License, or
c (at your option) any later version.
c
c This program is distributed in the hope that it will be useful,
c but WITHOUT ANY WARRANTY; without even the implied warranty of
c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c GNU General Public License for more details.
c
c You should have received a copy of the GNU General Public License
c along with this program. If not, see .
c
c Contact: imod.support@deltares.nl
c Stichting Deltares
c P.O. Box 177
c 2600 MH Delft, The Netherlands.
c
c iMod is partly based on the USGS MODFLOW2005 source code;
c for iMOD the USGS MODFLOW2005 source code has been expanded
c and extensively modified by Stichting Deltares.
c The original USGS MODFLOW2005 source code can be downloaded from the USGS
c website http://www.usgs.gov/. The original MODFLOW2005 code incorporated
c in this file is covered by the USGS Software User Rights Notice;
c you should have received a copy of this notice along with this program.
c If not, see .
MODULE GWFRIVMODULE
INTEGER,SAVE,POINTER ::NRIVER,MXRIVR,NRIVVL,IRIVCB,IPRRIV
INTEGER,SAVE,POINTER ::NPRIV,IRIVPB,NNPRIV
integer,save,pointer :: ifvdl,isft ! ifvdl
real,dimension(:,:,:),save,pointer :: sft ! ifvdl
CHARACTER(LEN=16),SAVE, DIMENSION(:), POINTER ::RIVAUX
REAL, SAVE, DIMENSION(:,:), POINTER ::RIVR
INTEGER,SAVE,POINTER ::IRIVRFACT ! RFACT
integer,save,pointer ::irivsubsys,nrivsubsys ! rsubsys
integer,save,pointer ::irivrconc ! rconc
integer,save,dimension(:),pointer :: rivsubsidx ! rsubsys
logical,save,pointer :: lreuse ! iconchk
TYPE GWFRIVTYPE
INTEGER,POINTER ::NRIVER,MXRIVR,NRIVVL,IRIVCB,IPRRIV
INTEGER,POINTER ::NPRIV,IRIVPB,NNPRIV
integer,pointer :: ifvdl,isft ! ifvdl
real,dimension(:,:,:),pointer :: sft ! ifvdl
CHARACTER(LEN=16), DIMENSION(:), POINTER ::RIVAUX
REAL, DIMENSION(:,:), POINTER ::RIVR
INTEGER,POINTER ::IRIVRFACT ! RFACT
integer,pointer ::irivsubsys,nrivsubsys ! rsubsys
integer,pointer ::irivrconc ! rconc
integer,dimension(:),pointer :: rivsubsidx ! rsubsys
logical,pointer :: lreuse ! iconchk
END TYPE
TYPE(GWFRIVTYPE), SAVE:: GWFRIVDAT(10)
END MODULE GWFRIVMODULE
SUBROUTINE GWF2RIV7AR(IN,IGRID)
C ******************************************************************
C ALLOCATE ARRAY STORAGE FOR RIVERS AND READ PARAMETER DEFINITIONS.
C ******************************************************************
C
C SPECIFICATIONS:
C ------------------------------------------------------------------
use ulstrd_inferface ! GCD
USE GLOBAL, ONLY:IOUT,NCOL,NROW,NLAY,IFREFM
USE GWFRIVMODULE, ONLY:NRIVER,MXRIVR,NRIVVL,IRIVCB,IPRRIV,NPRIV,
1 IRIVPB,NNPRIV,RIVAUX,RIVR
1 ,IRIVRFACT ! RFACT
1 ,irivsubsys ! rsubsys
1 ,irivrconc ! rconc
1 ,lreuse ! iconchk
1 ,ifvdl,isft,sft ! ifvdl
C
CHARACTER*200 LINE
character RIVRFACT*16 ! RFACT
character rivsubsys*16 ! rsubsys
character rivrconc*16 ! rconc
C ------------------------------------------------------------------
C
C1------Allocate scalar variables, which makes it possible for multiple
C1------grids to be defined.
ALLOCATE(NRIVER,MXRIVR,NRIVVL,IRIVCB,IPRRIV,NPRIV,IRIVPB,NNPRIV)
allocate(IRIVRFACT) ! RFACT
allocate(irivsubsys) ! rsubsys
allocate(irivrconc) ! rconc
allocate(lreuse) ! iconchk
allocate(ifvdl) ! ifvdl
allocate(isft) ! ifvdl
C
C2------IDENTIFY PACKAGE AND INITIALIZE NRIVER AND NNPRIV.
WRITE(IOUT,1)IN
1 FORMAT(1X,/1X,'RIV -- RIVER PACKAGE, VERSION 7, 5/2/2005',
1' INPUT READ FROM UNIT ',I4)
write(iout,'(10x,a)') 'TNO version v7r1, 28 apr 2009' ! RFACT
NRIVER=0
NNPRIV=0
IRIVRFACT=0 ! RFACT
irivsubsys=0 ! rsubsys
irivrconc=0 ! rconc
lreuse=.false. ! iconchk
ifvdl=0 ! ifvdl
isft=0 ! ifvdl
C
C3------READ MAXIMUM NUMBER OF RIVER REACHES AND UNIT OR FLAG FOR
C3------CELL-BY-CELL FLOW TERMS.
CALL URDCOM(IN,IOUT,LINE)
CALL UPARLSTAL(IN,IOUT,LINE,NPRIV,MXPR)
IF(IFREFM.EQ.0) THEN
READ(LINE,'(2I10)') MXACTR,IRIVCB
LLOC=21
ELSE
LLOC=1
CALL URWORD(LINE,LLOC,ISTART,ISTOP,2,MXACTR,R,IOUT,IN)
CALL URWORD(LINE,LLOC,ISTART,ISTOP,2,IRIVCB,R,IOUT,IN)
END IF
WRITE(IOUT,3) MXACTR
3 FORMAT(1X,'MAXIMUM OF ',I6,' ACTIVE RIVER REACHES AT ONE TIME')
IF(IRIVCB.LT.0) WRITE(IOUT,7)
7 FORMAT(1X,'CELL-BY-CELL FLOWS WILL BE PRINTED WHEN ICBCFL NOT 0')
IF(IRIVCB.GT.0) WRITE(IOUT,8) IRIVCB
8 FORMAT(1X,'CELL-BY-CELL FLOWS WILL BE SAVED ON UNIT ',I4)
C
C4------READ AUXILIARY VARIABLES AND PRINT OPTION.
ALLOCATE (RIVAUX(20))
NAUX=0
IPRRIV=1
10 CALL URWORD(LINE,LLOC,ISTART,ISTOP,1,N,R,IOUT,IN)
IF(LINE(ISTART:ISTOP).EQ.'AUXILIARY' .OR.
1 LINE(ISTART:ISTOP).EQ.'AUX') THEN
CALL URWORD(LINE,LLOC,ISTART,ISTOP,1,N,R,IOUT,IN)
IF(NAUX.LT.20) THEN
NAUX=NAUX+1
RIVAUX(NAUX)=LINE(ISTART:ISTOP)
WRITE(IOUT,12) RIVAUX(NAUX)
12 FORMAT(1X,'AUXILIARY RIVER VARIABLE: ',A)
END IF
GO TO 10
ELSE IF(LINE(ISTART:ISTOP).EQ.'NOPRINT') THEN
WRITE(IOUT,13)
13 FORMAT(1X,'LISTS OF RIVER CELLS WILL NOT BE PRINTED')
IPRRIV = 0
GO TO 10
ELSE IF(LINE(ISTART:ISTOP).EQ.'RFACT') THEN ! RFACT
CALL URWORD(LINE,LLOC,ISTART,ISTOP,1,N,R,IOUT,IN) ! RFACT
RIVRFACT=LINE(ISTART:ISTOP) ! RFACT
IRIVRFACT=999 ! RFACT
GO TO 10 ! RFACT
else if(line(istart:istop).eq.'RSUBSYS') then ! rsubsys
call urword(line,lloc,istart,istop,1,n,r,iout,in) ! rsubsys
rivsubsys=line(istart:istop) ! rsubsys
irivsubsys=999 ! rsubsys
go to 10 ! rsubsys
else if(line(istart:istop).eq.'RCONC') then ! rconc
call urword(line,lloc,istart,istop,1,n,r,iout,in) ! rconc
rivrconc=line(istart:istop) ! rconc
irivrconc=999 ! rconc
go to 10 ! rconc
ELSE IF(LINE(ISTART:ISTOP).EQ.'IFVDL') THEN ! ifvdl
ifvdl=1 ! ifvdl
go to 10 ! ifvdl
ELSE IF(LINE(ISTART:ISTOP).EQ.'SFT') THEN ! ifvdl
isft=1 ! ifvdl
go to 10 ! ifvdl
END IF ! ifvdl
c ! RFACT
c check or RFACT has been defined and AUX variabel exist ! RFACT
if (irivrfact.gt.0) then ! RFACT
irivrfact=0 ! RFACT
do i=1,naux ! RFACT
if (rivrfact.eq.rivaux(i)) then ! RFACT
irivrfact=i ! RFACT
endif ! RFACT
enddo ! RFACT
if (irivrfact.eq.0) then ! RFACT
! ERROR defined variable not found ! RFACT
write(iout,'(1x,3a)') 'ERROR RFACT variable ',rivrfact, ! RFACT
1 ' not defined as an auxiliary variable.' ! RFACT
call ustop(' ') ! RFACT
else ! RFACT
! RFACT found ! RFACT
write(iout,'(1x,3a)') 'RFACT variabel ',rivrfact, ! RFACT
1 ' used as infiltration factor.' ! RFACT
! irivrfact gets the column number of RIVR in which the ! RFACT
! infiltration factor is stored ! RFACT
irivrfact=irivrfact+6 ! RFACT
endif ! RFACT
endif ! RFACT
C
c check or RSUBSYS has been defined and AUX variabel exist ! rsubsys
if (irivsubsys.gt.0) then ! rsubsys
irivsubsys=0 ! rsubsys
do i=1,naux ! rsubsys
if (rivsubsys.eq.rivaux(i)) then ! rsubsys
irivsubsys=i ! rsubsys
endif ! rsubsys
enddo ! rsubsys
if (irivsubsys.eq.0) then ! rsubsys
! ERROR defined variable not found ! rsubsys
write(iout,'(1x,3a)') 'ERROR RSUBSYS variable ',rivsubsys, ! rsubsys
1 ' not defined as an auxiliary variable.' ! rsubsys
call ustop(' ') ! rsubsys
else ! rsubsys
! rsubsys found ! rsubsys
write(iout,'(1x,3a)') 'RSUBSYS variabel ',rivsubsys, ! rsubsys
1 ' used for sub-system indices.' ! rsubsys
! isubsys gets the column number of RIVR in which the ! rsubsys
! sub system indices ! rsubsys
irivsubsys=irivsubsys+6 ! rsubsys
endif ! rsubsys
endif ! rsubsys
c check or RCONC has been defined and AUX variabel exist ! rconc
if (irivrconc.gt.0) then ! rconc
irivrconc=0 ! rconc
do i=1,naux ! rconc
if (rivrconc.eq.rivaux(i)) then ! rconc
irivrconc=i ! rconc
endif ! rconc
enddo ! rconc
if (irivrconc.eq.0) then ! rconc
! ERROR defined variable not found ! rconc
write(iout,'(1x,3a)') 'ERROR rconc variable ',rivrconc, ! rconc
1 ' not defined as an auxiliary variable.' ! rconc
call ustop(' ') ! rconc
else ! rconc
! rconc found ! rconc
write(iout,'(1x,3a)') 'rconc variabel ',rivrconc, ! rconc
1 ' used as chloride concentration.' ! rconc
! irivrconc gets the column number of RIVR in which the ! rconc
! infiltration factor is stored ! rconc
irivrconc=irivrconc+6 ! rconc
endif ! rconc
endif ! rconc
C
if (isft.eq.1) then ! ifvdl
allocate(sft(ncol,nrow,2)) ! ifvdl
call u2drel(sft(1,1,1),'sft stream flow thick. ', ! ifvdl
1 nrow,ncol,1,in,iout) ! ifvdl
call u2drel(sft(1,1,2),'sft permeability ', ! ifvdl
1 nrow,ncol,1,in,iout) ! ifvdl
else ! ifvdl
allocate(sft(1,1,1)) ! ifvdl
end if ! ifvdl
C5------ALLOCATE SPACE FOR RIVER ARRAYS.
C5------FOR EACH REACH, THERE ARE SIX INPUT DATA VALUES PLUS ONE
C5------LOCATION FOR CELL-BY-CELL FLOW.
NRIVVL=7+NAUX
IRIVPB=MXACTR+1
MXRIVR=MXACTR+MXPR
ALLOCATE (RIVR(NRIVVL,MXRIVR))
C
C6------READ NAMED PARAMETERS.
WRITE(IOUT,99) NPRIV
99 FORMAT(1X,//1X,I5,' River parameters')
IF(NPRIV.GT.0) THEN
LSTSUM=IRIVPB
DO 120 K=1,NPRIV
LSTBEG=LSTSUM
CALL UPARLSTRP(LSTSUM,MXRIVR,IN,IOUT,IP,'RIV','RIV',1,
& NUMINST)
NLST=LSTSUM-LSTBEG
IF (NUMINST.EQ.0) THEN
C6A-----READ PARAMETER WITHOUT INSTANCES
CALL ULSTRD(NLST,RIVR,LSTBEG,NRIVVL,MXRIVR,1,IN,
& IOUT,'REACH NO. LAYER ROW COL'//
& ' STAGE STRESS FACTOR BOTTOM EL.',
& RIVAUX,5,NAUX,IFREFM,NCOL,NROW,NLAY,5,5,IPRRIV)
ELSE
C6B-----READ INSTANCES
NINLST = NLST/NUMINST
DO 110 I=1,NUMINST
CALL UINSRP(I,IN,IOUT,IP,IPRRIV)
CALL ULSTRD(NINLST,RIVR,LSTBEG,NRIVVL,MXRIVR,1,IN,
& IOUT,'REACH NO. LAYER ROW COL'//
& ' STAGE STRESS FACTOR BOTTOM EL.',
& RIVAUX,20,NAUX,IFREFM,NCOL,NROW,NLAY,5,5,IPRRIV)
LSTBEG=LSTBEG+NINLST
110 CONTINUE
END IF
120 CONTINUE
END IF
C
C7------SAVE POINTERS TO DATA AND RETURN.
CALL SGWF2RIV7PSV(IGRID)
RETURN
END
SUBROUTINE GWF2RIV7RP(IN,IGRID)
C ******************************************************************
C READ RIVER HEAD, CONDUCTANCE AND BOTTOM ELEVATION
C ******************************************************************
C
C SPECIFICATIONS:
C ------------------------------------------------------------------
use ulstrd_inferface ! GCD
USE GLOBAL, ONLY:IOUT,NCOL,NROW,NLAY,IFREFM
USE GWFRIVMODULE, ONLY:NRIVER,MXRIVR,NRIVVL,IPRRIV,NPRIV,
1 IRIVPB,NNPRIV,RIVAUX,RIVR,
1 irivsubsys,nrivsubsys,rivsubsidx, ! rsubsys
1 lreuse, ! iconchk
1 irivrfact ! DLT
C ------------------------------------------------------------------
CALL SGWF2RIV7PNT(IGRID)
C
C1------READ ITMP (NUMBER OF RIVER REACHES OR FLAG TO REUSE DATA) AND
C1------NUMBER OF PARAMETERS.
IF(NPRIV.GT.0) THEN
IF(IFREFM.EQ.0) THEN
READ(IN,'(2I10)') ITMP,NP
ELSE
READ(IN,*) ITMP,NP
END IF
ELSE
NP=0
IF(IFREFM.EQ.0) THEN
READ(IN,'(I10)') ITMP
ELSE
READ(IN,*) ITMP
END IF
END IF
C
C------CALCULATE SOME CONSTANTS
NAUX=NRIVVL-7
IOUTU = IOUT
IF (IPRRIV.EQ.0) IOUTU = -IOUT
C
C2------DETERMINE THE NUMBER OF NON-PARAMETER REACHES.
IF(ITMP.LT.0) THEN
WRITE(IOUT,7)
7 FORMAT(1X,/1X,
1 'REUSING NON-PARAMETER RIVER REACHES FROM LAST STRESS PERIOD')
call sts2nodata(in) ! DLT: save/restore
ELSE
NNPRIV=ITMP
call sts2data(in) ! DLT: save/restore
END IF
C
C3------IF THERE ARE NEW NON-PARAMETER REACHES, READ THEM.
MXACTR=IRIVPB-1
lreuse = .true. ! iconchk
IF(ITMP.GT.0) THEN
lreuse = .false. ! iconchk
IF(NNPRIV.GT.MXACTR) THEN
WRITE(IOUT,99) NNPRIV,MXACTR
99 FORMAT(1X,/1X,'THE NUMBER OF ACTIVE REACHES (',I6,
1 ') IS GREATER THAN MXACTR(',I6,')')
CALL USTOP(' ')
END IF
CALL ULSTRD(NNPRIV,RIVR,1,NRIVVL,MXRIVR,1,IN,IOUT,
1 'REACH NO. LAYER ROW COL'//
2 ' STAGE CONDUCTANCE BOTTOM EL.',
3 RIVAUX,20,NAUX,IFREFM,NCOL,NROW,NLAY,5,5,IPRRIV)
call pest1alpha_list('RC',nnpriv,rivr,nrivvl,mxrivr, ! IPEST
1 irivsubsys) ! IPEST
call pest1alpha_list('RI',nnpriv,rivr,nrivvl,mxrivr, ! IPEST
1 irivsubsys,irivrfact) ! IPEST
call pest1alpha_list('IC',nnpriv,rivr,nrivvl,mxrivr, ! IPEST
1 irivsubsys) ! IPEST
call pest1alpha_list('II',nnpriv,rivr,nrivvl,mxrivr, ! IPEST
1 irivsubsys,irivrfact) ! IPEST
END IF
NRIVER=NNPRIV
C
C1C-----IF THERE ARE ACTIVE RIV PARAMETERS, READ THEM AND SUBSTITUTE
CALL PRESET('RIV')
IF(NP.GT.0) THEN
NREAD=NRIVVL-1
DO 30 N=1,NP
CALL UPARLSTSUB(IN,'RIV',IOUTU,'RIV',RIVR,NRIVVL,MXRIVR,NREAD,
1 MXACTR,NRIVER,5,5,
2 'REACH NO. LAYER ROW COL'//
3 ' STAGE CONDUCTANCE BOTTOM EL.',RIVAUX,20,NAUX)
30 CONTINUE
END IF
C
C3------PRINT NUMBER OF REACHES IN CURRENT STRESS PERIOD.
WRITE (IOUT,101) NRIVER
101 FORMAT(1X,/1X,I6,' RIVER REACHES')
C
! create subsystem index
if (associated(nrivsubsys)) deallocate(nrivsubsys) ! rsubsys
allocate(nrivsubsys) ! rsubsys
call usubscnt(rivr,nrivvl,nnpriv,irivsubsys,nrivsubsys) ! rsubsys
if (associated(rivsubsidx)) deallocate(rivsubsidx) ! rsubsys
allocate(rivsubsidx(nrivsubsys)) ! rsubsys
call usubsidx(rivr,nrivvl,nnpriv,irivsubsys,rivsubsidx, ! rsubsys
1 nrivsubsys) ! rsubsys
C7------SAVE POINTERS TO DATA AND RETURN.
CALL SGWF2RIV7PSV(IGRID) ! rsubsys
C8------RETURN.
260 RETURN
END
SUBROUTINE GWF2RIV7FM(IGRID)
C ******************************************************************
C ADD RIVER TERMS TO RHS AND HCOF
C ******************************************************************
C
C SPECIFICATIONS:
C ------------------------------------------------------------------
USE GLOBAL, ONLY:IBOUND,HNEW,RHS,HCOF
USE GWFRIVMODULE, ONLY:NRIVER,RIVR
1 ,IRIVRFACT ! RFACT
C ------------------------------------------------------------------
CALL SGWF2RIV7PNT(IGRID)
C
C1------IF NRIVER<=0 THERE ARE NO RIVERS. RETURN.
IF(NRIVER.LE.0)RETURN
C
C2------PROCESS EACH CELL IN THE RIVER LIST.
DO 100 L=1,NRIVER
C
C3------GET COLUMN, ROW, AND LAYER OF CELL CONTAINING REACH.
IL=RIVR(1,L)
IR=RIVR(2,L)
IC=RIVR(3,L)
C
C4------IF THE CELL IS EXTERNAL SKIP IT.
IF(IBOUND(IC,IR,IL).LE.0)GO TO 100
C
C5------SINCE THE CELL IS INTERNAL GET THE RIVER DATA.
HRIV=RIVR(4,L)
CRIV=RIVR(5,L)
RBOT=RIVR(6,L)
RRBOT=RBOT
c ------APPLY INFILTRATION FACTOR ! RFACT
if (IRIVRFACT.gt.0) then ! RFACT
if (HNEW(IC,IR,IL).LE.HRIV) then ! RFACT
! situation with infiltration, apply infiltration factor ! RFACT
CRIV=CRIV*RIVR(IRIVRFACT,L) ! RFACT
endif ! RFACT
endif ! RFACT
C
C6------COMPARE AQUIFER HEAD TO BOTTOM OF STREAM BED.
IF(HNEW(IC,IR,IL).LE.RRBOT)GO TO 96
C
C7------SINCE HEAD>BOTTOM ADD TERMS TO RHS AND HCOF.
RHS(IC,IR,IL)=RHS(IC,IR,IL)-CRIV*HRIV
HCOF(IC,IR,IL)=HCOF(IC,IR,IL)-CRIV
GO TO 100
C
C8------SINCE HEAD BOTTOM THEN RATE=CRIV*(HRIV-HNEW).
CCRIV=CRIV
CHRIV=CRIV*HRIV
RRATE=CHRIV - CCRIV*HHNEW
RATE=RRATE
C
C5F-----AQUIFER HEAD < BOTTOM THEN RATE=CRIV*(HRIV-RBOT).
ELSE
RATE=CRIV*(HRIV-RBOT)
RRATE=RATE
END IF
C
C5G-----PRINT THE INDIVIDUAL RATES IF REQUESTED(IRIVCB<0).
IF(IBD.LT.0) THEN
IF(IBDLBL.EQ.0) WRITE(IOUT,61) TEXT,KPER,KSTP
61 FORMAT(1X,/1X,A,' PERIOD ',I4,' STEP ',I3)
WRITE(IOUT,62) L,IL,IR,IC,RATE
62 FORMAT(1X,'REACH ',I6,' LAYER ',I3,' ROW ',I5,' COL ',I5,
1 ' RATE',1PG15.6)
IBDLBL=1
END IF
C
C5H------ADD RATE TO BUFFER.
BUFF(IC,IR,IL)=BUFF(IC,IR,IL)+RATE
C
C5I-----SEE IF FLOW IS INTO AQUIFER OR INTO RIVER.
IF(RATE.LT.ZERO) THEN
C
C5J-----AQUIFER IS DISCHARGING TO RIVER SUBTRACT RATE FROM RATOUT.
RATOUT=RATOUT-RRATE
ELSE
C
C5K-----AQUIFER IS RECHARGED FROM RIVER; ADD RATE TO RATIN.
RATIN=RATIN+RRATE
END IF
C
C5L-----IF SAVING CELL-BY-CELL FLOWS IN A LIST, WRITE FLOW. ALSO
C5L-----COPY FLOW TO RIVR.
99 IF(IBD.EQ.2) CALL UBDSVB(IRIVCB,NCOL,NROW,IC,IR,IL,RATE,
1 RIVR(:,L),NRIVVL,NAUX,7,IBOUND,NLAY)
RIVR(NRIVVL,L)=RATE
100 CONTINUE
C
C6------IF CELL-BY-CELL FLOW WILL BE SAVED AS A 3-D ARRAY,
C6------CALL UBUDSV TO SAVE THEM.
IF(IBD.EQ.1) CALL UBUDSV(KSTP,KPER,htxt,IRIVCB,BUFF,NCOL,NROW,
1 NLAY,IOUT)
C
enddo ! isub-loop ! rsubsys
C7------MOVE RATES,VOLUMES & LABELS INTO ARRAYS FOR PRINTING.
200 RIN=RATIN
ROUT=RATOUT
VBVL(3,MSUM)=RIN
VBVL(4,MSUM)=ROUT
VBVL(1,MSUM)=VBVL(1,MSUM)+RIN*DELT
VBVL(2,MSUM)=VBVL(2,MSUM)+ROUT*DELT
VBNM(MSUM)=TEXT
C
C8------INCREMENT BUDGET TERM COUNTER.
MSUM=MSUM+1
C
C9------RETURN.
RETURN
END
SUBROUTINE GWF2RIV7DA(IGRID)
C Deallocate RIV MEMORY
USE GWFRIVMODULE
C
CALL SGWF2RIV7PNT(IGRID)
DEALLOCATE(NRIVER)
DEALLOCATE(MXRIVR)
DEALLOCATE(NRIVVL)
DEALLOCATE(IRIVCB)
DEALLOCATE(IPRRIV)
DEALLOCATE(NPRIV)
DEALLOCATE(IRIVPB)
DEALLOCATE(NNPRIV)
DEALLOCATE(RIVAUX)
DEALLOCATE(RIVR)
DEALLOCATE(IRIVRFACT) ! RFACT
deallocate(irivsubsys) ! rsubsys
deallocate(nrivsubsys) ! rsubsys
deallocate(rivsubsidx) ! rsubsys
deallocate(irivrconc) ! rconc
deallocate(lreuse)
deallocate(ifvdl) ! ifvdl
deallocate(isft) ! ifvdl
deallocate(sft) ! ifvdl
C
RETURN
END
SUBROUTINE SGWF2RIV7PNT(IGRID)
C Change river data to a different grid.
USE GWFRIVMODULE
C
NRIVER=>GWFRIVDAT(IGRID)%NRIVER
MXRIVR=>GWFRIVDAT(IGRID)%MXRIVR
NRIVVL=>GWFRIVDAT(IGRID)%NRIVVL
IRIVCB=>GWFRIVDAT(IGRID)%IRIVCB
IPRRIV=>GWFRIVDAT(IGRID)%IPRRIV
NPRIV=>GWFRIVDAT(IGRID)%NPRIV
IRIVPB=>GWFRIVDAT(IGRID)%IRIVPB
NNPRIV=>GWFRIVDAT(IGRID)%NNPRIV
RIVAUX=>GWFRIVDAT(IGRID)%RIVAUX
RIVR=>GWFRIVDAT(IGRID)%RIVR
IRIVRFACT=>GWFRIVDAT(IGRID)%IRIVRFACT ! RFACT
irivsubsys=>gwfrivdat(igrid)%irivsubsys ! rsubsys
nrivsubsys=>gwfrivdat(igrid)%nrivsubsys ! rsubsys
rivsubsidx=>gwfrivdat(igrid)%rivsubsidx ! rsubsys
irivrconc=>gwfrivdat(igrid)%irivrconc ! rconc
lreuse=>gwfrivdat(igrid)%lreuse ! iconchk
ifvdl=>gwfrivdat(igrid)%ifvdl ! ifvdl
isft=>gwfrivdat(igrid)%isft ! ifvdl
sft=>gwfrivdat(igrid)%sft ! ifvdl
C
RETURN
END
SUBROUTINE SGWF2RIV7PSV(IGRID)
C Save river data for a grid.
USE GWFRIVMODULE
C
GWFRIVDAT(IGRID)%NRIVER=>NRIVER
GWFRIVDAT(IGRID)%MXRIVR=>MXRIVR
GWFRIVDAT(IGRID)%NRIVVL=>NRIVVL
GWFRIVDAT(IGRID)%IRIVCB=>IRIVCB
GWFRIVDAT(IGRID)%IPRRIV=>IPRRIV
GWFRIVDAT(IGRID)%NPRIV=>NPRIV
GWFRIVDAT(IGRID)%IRIVPB=>IRIVPB
GWFRIVDAT(IGRID)%NNPRIV=>NNPRIV
GWFRIVDAT(IGRID)%RIVAUX=>RIVAUX
GWFRIVDAT(IGRID)%RIVR=>RIVR
GWFRIVDAT(IGRID)%IRIVRFACT=>IRIVRFACT ! RFACT
gwfrivdat(igrid)%irivsubsys=>irivsubsys ! rsubsys
gwfrivdat(igrid)%nrivsubsys=>nrivsubsys ! rsubsys
gwfrivdat(igrid)%rivsubsidx=>rivsubsidx ! rsubsys
gwfrivdat(igrid)%irivrconc=>irivrconc ! rconc
gwfrivdat(igrid)%lreuse=>lreuse ! iconchk
gwfrivdat(igrid)%ifvdl=>ifvdl ! ifvdl
gwfrivdat(igrid)%isft=>isft ! ifvdl
gwfrivdat(igrid)%sft=>sft ! ifvdl
C
RETURN
END