@@ -90,6 +90,7 @@ MODULE GWFAGMODULE
90
90
REAL , SAVE , DIMENSION (:), POINTER :: DEMAND, SUPACT, SUPACTOLD
91
91
REAL , SAVE , DIMENSION (:), POINTER :: ACTUAL
92
92
REAL , SAVE , DIMENSION (:), POINTER :: ACTUALOLD
93
+ INTEGER , SAVE , POINTER :: KPEROLD
93
94
END MODULE GWFAGMODULE
94
95
95
96
SUBROUTINE GWF2AG7AR (IN , IUNITSFR , IUNITNWT )
@@ -127,6 +128,7 @@ SUBROUTINE GWF2AG7AR(IN, IUNITSFR, IUNITNWT)
127
128
ALLOCATE (TSACTIVEGWET, TSACTIVESWET, NUMSWET, NUMGWET)
128
129
ALLOCATE (TSGWALLUNIT, TSGWETALLUNIT, NSEGDIMTEMP)
129
130
ALLOCATE (GSFLOW_flag_local)
131
+ ALLOCATE (KPEROLD)
130
132
GSFLOW_flag_local = 0
131
133
! IF ( GSFLOW_flag > 0 ) GSFLOW_flag_local = GSFLOW_flag
132
134
VBVLAG = 0.0
@@ -174,6 +176,7 @@ SUBROUTINE GWF2AG7AR(IN, IUNITSFR, IUNITNWT)
174
176
NUMIRRDIVERSION = 0
175
177
NUMIRRDIVERSIONSP = 0
176
178
TRIGGERFLAG = 0
179
+ KPEROLD = 0
177
180
!
178
181
!2 - --- IDENTIFY PACKAGE AND INITIALIZE AG OPTIONS.
179
182
WRITE (IOUT, 1 ) IN
@@ -751,9 +754,7 @@ SUBROUTINE GWF2AG7RP(IN, IUNITSFR, KPER)
751
754
! - -----------------------------------------------------------------
752
755
USE GLOBAL, ONLY: IOUT, NCOL, NROW, NLAY, IFREFM
753
756
USE GWFAGMODULE
754
- USE GWFSFRMODULE, ONLY: ISTRM, NSTRM, NSS, SEG, NUMTAB_SFR
755
-
756
-
757
+ USE GWFSFRMODULE, ONLY: ISTRM, NSTRM, NSS
757
758
IMPLICIT NONE
758
759
! - -----------------------------------------------------------------
759
760
! ARGUMENTS:
@@ -1082,15 +1083,6 @@ SUBROUTINE GWF2AG7RP(IN, IUNITSFR, KPER)
1082
1083
ISTARTSAVE = ISTART
1083
1084
end if
1084
1085
end do
1085
- !
1086
- ! Set demand to specified diversion flows in SFR.
1087
- !
1088
- DO i = 1, NUMIRRDIVERSIONSP
1089
- iseg = IRRSEG(i)
1090
- if (iseg > 0 .and. IUNITSFR > 0) then
1091
- DEMAND(ISEG) = SEG(2, ISEG)
1092
- END IF
1093
- END DO
1094
1086
6 FORMAT(1X, /
1095
1087
+ 1X, ' NO IRRDIVERSION DATA OR REUSING IRRDIVERSION DATA ' ,
1096
1088
+ ' FROM LAST STRESS PERIOD ' )
@@ -1111,29 +1103,66 @@ SUBROUTINE GWF2AG7AD(IN, KPER)
1111
1103
! SPECIFICATIONS:
1112
1104
! - -----------------------------------------------------------------
1113
1105
USE GWFAGMODULE
1114
- USE GWFSFRMODULE, ONLY: NSS, SEG, NUMTAB_SFR
1106
+ USE GWFSFRMODULE, ONLY: NSS, SEG, NUMTAB_SFR, ISFRLIST
1115
1107
USE GLOBAL, ONLY: IUNIT
1116
1108
IMPLICIT NONE
1117
1109
! - -----------------------------------------------------------------
1118
1110
! ARGUMENTS:
1119
1111
INTEGER, INTENT(IN)::IN, KPER
1120
1112
!
1121
- INTEGER ISEG, i
1113
+ INTEGER ISEG, i, ii, tabseg, istab
1114
+ DOUBLE PRECISION :: TOTAL
1122
1115
! - -----------------------------------------------------------------
1123
1116
!
1124
1117
!1 - ------RESET DEMAND IF IT CHANGES
1125
- if ( NUMTAB_SFR > 0 ) DEMAND = 0.0
1118
+ if (NUMTAB_SFR.ne.0) then
1119
+ DO ii = 1, NUMTAB_SFR
1120
+ tabseg = ISFRLIST(1, ii)
1121
+ DEMAND(tabseg) = 0.0
1122
+ END DO
1123
+ endif
1124
+ ! RESET ALL DEMAND if new stress period
1125
+ if (KPEROLD.ne.KPER) then
1126
+ DEMAND = 0.0
1127
+ endif
1128
+ TOTAL = 0.0
1126
1129
DO i = 1, NUMIRRDIVERSIONSP
1127
1130
iseg = IRRSEG(i)
1128
- if (iseg > 0 .and. IUNIT(44) > 0) then
1131
+ if (iseg > 0) then
1132
+ if (IUNIT(44) > 0) then
1129
1133
! Because SFR7AD has just been called (prior to AG7AD) and MODSIM
1130
1134
! has not yet overwritten values in SEG(2,x), SEG(2,x) still
1131
1135
! contains the TABFILE values at this point.
1132
- IF ( NUMTAB_SFR > 0 ) DEMAND(ISEG) = SEG(2, ISEG)
1133
- SUPACT(ISEG) = 0.0
1134
- ACTUAL(ISEG) = 0.0
1135
- end if
1136
- END DO
1136
+ if (NUMTAB_SFR.ne.0) then
1137
+ ! check if this segment has a tabfile associated with it
1138
+ istab = 0
1139
+ DO ii = 1, NUMTAB_SFR
1140
+ tabseg = ISFRLIST(1, ii)
1141
+ if (iseg.eq.tabseg) then
1142
+ istab = 1
1143
+ endif
1144
+ END DO
1145
+ ! update demand if there is a tabfile or if it is a new
1146
+ ! stress period
1147
+ if ((istab.eq.1) .OR. (KPEROLD.ne.KPER)) then
1148
+ DEMAND(ISEG) = SEG(2, ISEG)
1149
+ endif
1150
+ ! update demand if this is a new stress period
1151
+ elseif (KPEROLD.ne.KPER) then
1152
+ DEMAND(ISEG) = SEG(2, ISEG)
1153
+ endif
1154
+ IF (ETDEMANDFLAG > 0) SEG(2, ISEG) = 0.0
1155
+ TOTAL = TOTAL + DEMAND(ISEG)
1156
+ elseif (GSFLOW_flag_local == 1) then
1157
+ end if
1158
+ SUPACT(ISEG) = 0.0
1159
+ ACTUAL(ISEG) = 0.0
1160
+ END IF
1161
+ END DO
1162
+ ! update kperold to track new stress periods and set data accordingly
1163
+ if (KPEROLD.ne.KPER) then
1164
+ KPEROLD = KPEROLD + 1
1165
+ endif
1137
1166
!2 - ------SET ALL SPECIFIED DIVERSIONS TO ZERO FOR ETDEMAND AND TRIGGER
1138
1167
IF (ETDEMANDFLAG > 0 .OR. TRIGGERFLAG > 0) THEN
1139
1168
DO i = 1, NUMSEGLIST
@@ -2359,7 +2388,7 @@ SUBROUTINE DEMANDCONJUNCTIVE_UZF(kper, kstp, kiter)
2359
2388
external :: set_factor
2360
2389
double precision :: set_factor
2361
2390
! ---------------------------------------------------------------------
2362
- !
2391
+ !
2363
2392
zerod7 = 1.0d-7
2364
2393
done = 1.0d0
2365
2394
dzero = 0.0d0
@@ -2571,8 +2600,8 @@ subroutine demandtrigger_sw(kper, kstp, kiter)
2571
2600
SEG(2, iseg) = 0.0
2572
2601
if (TIMEINPERIODSEG(ISEG) > IRRPERIODSEG(ISEG)) then
2573
2602
if (factor <= TRIGGERPERIODSEG(ISEG)) then
2574
- SEG(2, iseg) = DEMAND(iseg)
2575
- TIMEINPERIODSEG(ISEG) = done
2603
+ SEG(2, iseg) = DEMAND(iseg)
2604
+ TIMEINPERIODSEG(ISEG) = 0.0
2576
2605
end if
2577
2606
end if
2578
2607
if (TIMEINPERIODSEG(ISEG) - DELT < IRRPERIODSEG(ISEG))
@@ -2583,10 +2612,6 @@ subroutine demandtrigger_sw(kper, kstp, kiter)
2583
2612
k = IDIVAR(1, ISEG)
2584
2613
fmaxflow = STRM(9, LASTREACH(K))
2585
2614
IF (SEG(2, iseg) > fmaxflow) SEG(2, iseg) = fmaxflow
2586
- !
2587
- write(999,121)kper,kstp,kiter,factor,aetseg(iseg),petseg(iseg),
2588
- + SEG(2, iseg),TIMEINPERIODSEG(ISEG)
2589
- 121 format(3i5,5e20.10)
2590
2615
300 continue
2591
2616
deallocate (petseg, aetseg)
2592
2617
return
@@ -2810,10 +2835,6 @@ double precision function set_factor(l,aetold, pettotal,
2810
2835
if( factor > accel*etdif ) factor = accel*etdif
2811
2836
if( factor < etdif ) factor = etdif
2812
2837
if( factor < dzero ) factor = dzero
2813
- ! open(222,file=' debug.out ' )
2814
- ! if(l==207)write(222,333)kiter,pettotal,aettotal,dq,det,aettotal,
2815
- ! +aetold,factor
2816
- !333 format(i5,7e20.10)
2817
2838
set_factor = factor
2818
2839
end function set_factor
2819
2840
!
0 commit comments