@@ -7,12 +7,11 @@ MODULE PRMS_BASIN_SUMMARY
7
7
! Module Variables
8
8
character (len=* ), parameter :: MODDESC = ' Output Summary'
9
9
character (len=* ), parameter :: MODNAME = ' basin_summary'
10
- character (len=* ), parameter :: Version_basin_summary = ' 2021-08-13 '
10
+ character (len=* ), parameter :: Version_basin_summary = ' 2024-09-01 '
11
11
INTEGER , SAVE :: Begin_results, Begyr, Lastyear, Dailyunit, Monthlyunit, Yearlyunit, Basin_var_type
12
12
INTEGER , SAVE , ALLOCATABLE :: Nc_vars(:)
13
- CHARACTER (LEN= 48 ), SAVE :: Output_fmt, Output_fmt2, Output_fmt3
14
- INTEGER , SAVE :: Daily_flag, Yeardays, Monthly_flag
15
- DOUBLE PRECISION , SAVE :: Monthdays
13
+ CHARACTER (LEN= 48 ), SAVE :: Output_fmt, Output_fmt2 ! , Output_fmt3
14
+ INTEGER , SAVE :: Daily_flag, Yeardays, Monthly_flag, Monthdays, save_year, save_month, save_day
16
15
DOUBLE PRECISION , SAVE , ALLOCATABLE :: Basin_var_daily(:), Basin_var_monthly(:), Basin_var_yearly(:)
17
16
! Parameters
18
17
INTEGER , SAVE , ALLOCATABLE :: Nhm_id(:)
@@ -95,7 +94,7 @@ END SUBROUTINE basin_summarydecl
95
94
! ***********************************************************************
96
95
SUBROUTINE basin_summaryinit ()
97
96
USE PRMS_CONSTANTS, ONLY: MAXFILE_LENGTH, ACTIVE, OFF, DAILY_MONTHLY, MEAN_MONTHLY, MEAN_YEARLY, DAILY, MONTHLY, &
98
- & DBLE_TYPE, ERROR_open_out
97
+ & DBLE_TYPE, ERROR_open_out, YEARLY
99
98
use PRMS_MMFAPI, only: getvarsize, getvartype
100
99
use PRMS_READ_PARAM_FILE, only: getparam_int
101
100
USE PRMS_MODULE, ONLY: Start_year, Prms_warmup, BasinOutON_OFF, Nhru, Inputerror_flag
@@ -143,10 +142,10 @@ SUBROUTINE basin_summaryinit()
143
142
Yeardays = 0
144
143
ALLOCATE ( Basin_var_yearly(BasinOutVars) )
145
144
Basin_var_yearly = 0.0D0
146
- WRITE ( Output_fmt3, 9003 ) BasinOutVars
145
+ ! WRITE ( Output_fmt3, 9003 ) BasinOutVars
147
146
ENDIF
148
147
IF ( Monthly_flag== ACTIVE ) THEN
149
- Monthdays = 0.0D0
148
+ Monthdays = 0
150
149
ALLOCATE ( Basin_var_monthly(BasinOutVars) )
151
150
Basin_var_monthly = 0.0D0
152
151
ENDIF
@@ -175,7 +174,7 @@ SUBROUTINE basin_summaryinit()
175
174
IF ( ios/= 0 ) CALL error_stop(' in basin_summary, mean yearly' , ERROR_open_out)
176
175
IF ( BasinOutON_OFF== 2 ) WRITE ( Yearlyunit, ' (A, 1X, I0)' ) ' nhm_id:' , Nhm_id(1 )
177
176
WRITE ( Yearlyunit, Output_fmt2 ) (BasinOutVar_names(jj)(:Nc_vars(jj)), jj= 1 , BasinOutVars)
178
- ELSEIF ( BasinOut_freq== MEAN_YEARLY ) THEN
177
+ ELSEIF ( BasinOut_freq== YEARLY ) THEN
179
178
fileName = BasinOutBaseFileName(:numchars(BasinOutBaseFileName))// ' _yearly.csv'
180
179
CALL PRMS_open_output_file(Yearlyunit, fileName, ' basin_summary, yearly' , 0 , ios)
181
180
IF ( ios/= 0 ) CALL error_stop(' in basin_summary, yearly' , ERROR_open_out)
@@ -203,14 +202,15 @@ END SUBROUTINE basin_summaryinit
203
202
! Output set of declared variables in CSV format
204
203
! ***********************************************************************
205
204
SUBROUTINE basin_summaryrun ()
206
- USE PRMS_CONSTANTS, ONLY: ACTIVE, OFF, MEAN_MONTHLY, YEARLY
205
+ USE PRMS_CONSTANTS, ONLY: ACTIVE, OFF, MEAN_MONTHLY, MEAN_YEARLY
207
206
use PRMS_MMFAPI, only: getvar_dble
208
207
USE PRMS_MODULE, ONLY: Start_month, Start_day, End_year, End_month, End_day, Nowyear, Nowmonth, Nowday
209
208
USE PRMS_BASIN_SUMMARY
210
209
USE PRMS_SET_TIME, ONLY: Modays
211
210
IMPLICIT NONE
212
211
! Local Variables
213
212
INTEGER :: jj, write_month, last_day
213
+ DOUBLE PRECISION :: yeardays_dble, monthdays_dble
214
214
! ***********************************************************************
215
215
IF ( Begin_results== OFF ) THEN
216
216
IF ( Nowyear== Begyr .AND. Nowmonth== Start_month .AND. Nowday== Start_day ) THEN
@@ -232,16 +232,28 @@ SUBROUTINE basin_summaryrun()
232
232
IF ( Nowyear== End_year .AND. Nowmonth== End_month .AND. Nowday== End_day ) last_day = ACTIVE
233
233
IF ( Lastyear/= Nowyear .OR. last_day== ACTIVE ) THEN
234
234
IF ( (Nowmonth== Start_month .AND. Nowday== Start_day) .OR. last_day== ACTIVE ) THEN
235
- DO jj = 1 , BasinOutVars
236
- IF ( BasinOut_freq== YEARLY ) Basin_var_yearly(jj) = Basin_var_yearly(jj)/ Yeardays
237
- ENDDO
238
- WRITE ( Yearlyunit, Output_fmt3) Lastyear, (Basin_var_yearly(jj), jj= 1 , BasinOutVars)
235
+ yeardays_dble = DBLE ( Yeardays )
236
+ IF ( BasinOut_freq== MEAN_YEARLY ) THEN
237
+ DO jj = 1 , BasinOutVars
238
+ Basin_var_yearly(jj) = Basin_var_yearly(jj)/ yeardays_dble
239
+ ENDDO
240
+ ENDIF
241
+ IF ( last_day== ACTIVE ) THEN
242
+ save_year = Nowyear
243
+ save_month = Nowmonth
244
+ save_day = Nowday
245
+ ENDIF
246
+ ! WRITE ( Yearlyunit, Output_fmt3) Lastyear, (Basin_var_yearly(jj), jj=1, BasinOutVars)
247
+ WRITE ( Yearlyunit, Output_fmt) save_year, save_month, save_day, (Basin_var_yearly(jj), jj= 1 , BasinOutVars)
239
248
Basin_var_yearly = 0.0D0
240
249
Yeardays = 0
241
250
Lastyear = Nowyear
242
251
ENDIF
243
252
ENDIF
244
253
Yeardays = Yeardays + 1
254
+ save_year = Nowyear
255
+ save_month = Nowmonth
256
+ save_day = Nowday
245
257
ELSEIF ( Monthly_flag== ACTIVE ) THEN
246
258
! check for last day of month and simulation
247
259
IF ( Nowday== Modays(Nowmonth) ) THEN
@@ -251,7 +263,7 @@ SUBROUTINE basin_summaryrun()
251
263
IF ( Nowday== End_day ) write_month = ACTIVE
252
264
ENDIF
253
265
ENDIF
254
- Monthdays = Monthdays + 1.0D0
266
+ Monthdays = Monthdays + 1
255
267
ENDIF
256
268
257
269
IF ( BasinOut_freq> MEAN_MONTHLY ) THEN
@@ -262,18 +274,19 @@ SUBROUTINE basin_summaryrun()
262
274
ENDIF
263
275
264
276
IF ( Monthly_flag== ACTIVE ) THEN
277
+ monthdays_dble = DBLE ( Monthdays )
265
278
DO jj = 1 , BasinOutVars
266
279
Basin_var_monthly(jj) = Basin_var_monthly(jj) + Basin_var_daily(jj)
267
280
IF ( write_month== ACTIVE ) THEN
268
- IF ( BasinOut_freq== MEAN_MONTHLY ) Basin_var_monthly(jj) = Basin_var_monthly(jj)/ Monthdays
281
+ IF ( BasinOut_freq== MEAN_MONTHLY ) Basin_var_monthly(jj) = Basin_var_monthly(jj)/ monthdays_dble
269
282
ENDIF
270
283
ENDDO
271
284
ENDIF
272
285
273
286
IF ( Daily_flag== ACTIVE ) WRITE ( Dailyunit, Output_fmt) Nowyear, Nowmonth, Nowday, (Basin_var_daily(jj), jj= 1 ,BasinOutVars)
274
287
IF ( write_month== ACTIVE ) THEN
275
288
WRITE ( Monthlyunit, Output_fmt) Nowyear, Nowmonth, Nowday, (Basin_var_monthly(jj), jj= 1 ,BasinOutVars)
276
- Monthdays = 0.0D0
289
+ Monthdays = 0
277
290
Basin_var_monthly = 0.0D0
278
291
ENDIF
279
292
0 commit comments