SUEWS API Site
Documentation of SUEWS source code
suews_ctrl_init.f95
Go to the documentation of this file.
1 !=========================================================================
2 ! sg feb 2012
3 ! only run once at start - fixed for all grids and all years
4 
5 SUBROUTINE overallruncontrol
6  ! Last modified:
7  ! MH 21 Jun 2017 - Added anthropogenic CO2 parameters and changed AnthropogenicHeat to Anthropogenic
8  ! MH 16 Jun 2017 - Added biogenic CO2 parameters
9  ! HCW 21 Apr 2017 - Added new method for precip disaggregation
10  ! HCW 13 Jan 2017 - Changes to RunControl and InitialConditions
11  ! HCW 04 Nov 2016 - minor bug fix in LAImin/LAImax warnings related to 3 veg surface types out cf 7 surface types
12  ! LJ 27 Jan 2016 - Removal of tabs, cleaning of the code
13  ! HCW 06 Mar 2015 - Removed options 10,20,30 (NARPOutput) for NetRadiationMethod
14  ! HCW 06 Feb 2015 - File ID numbers changed so they are unique
15  ! HCW 19 Dec 2014
16  ! To Do:
17  ! - Holidays.txt input file needs to be read in and coded into model
18  ! - Add column header checks for SiteSelect
19  !-------------------------------------------------------------------------
20 
21  USE allocatearray
23  USE data_in
24  USE defaultnotused
25  USE filename
26  USE initial
27  USE gis_data
28  USE mod_z
29  USE resist
30  USE snowmod
31  USE sues_data
32  USE time
33 
34  IMPLICIT NONE
35 
36  INTEGER:: iv, i, SkipCounter, iFile !iv and i, ii are integers used in do loops
37  CHARACTER(len=50):: FileN
38  INTEGER, PARAMETER :: nFile = 13
39  CHARACTER(len=50), DIMENSION(nFile) :: &
40  FileNames = [character(len=50) :: &
41  'SUEWS_NonVeg.txt', 'SUEWS_Veg.txt', 'SUEWS_Water.txt', 'SUEWS_Snow.txt', &
42  'SUEWS_Soil.txt', 'SUEWS_Conductance.txt', 'SUEWS_OHMCoefficients.txt', &
43  'SUEWS_ESTMCoefficients.txt', 'SUEWS_AnthropogenicEmission.txt', 'SUEWS_Irrigation.txt', &
44  'SUEWS_Profiles.txt', 'SUEWS_WithinGridWaterDist.txt', 'SUEWS_BiogenCO2.txt']
45 
46  ! ---- Namelist for RunControl.nml ----
47  namelist /runcontrol/ filecode, &
48  fileinputpath, &
50  tstep, &
60  cbluse, &
61  snowuse, &
62  ! SOLWEIGuse, &
63  basetmethod, &
68  smdmethod, &
71  ohmincqf, &
73  disaggmethod, &
76  rainamongn, &
79  kdownzen, &
81  ! ncMode, &
82  ! nRow, &
83  ! nCol, &
84  diagnose, &
87  diagqn, &
88  diagqs
89 
90  ! -------------------------------------
91 
92  !Initialise namelist with default values
95  writeoutoption = 0
96  disaggmethod = 1 ! linear disaggregation of averages
97  disaggmethodestm = 1 ! linear disaggregation of averages
98  raindisaggmethod = 100 ! even distribution among all subintervals
99  rainamongn = -999 ! no default setting for number of rainy subintervals
100  multrainamongn = -999 ! no default setting for number of rainy subintervals
101  multrainamongnupperi = -999 ! no default setting for rain intensity upper bound
102  kdownzen = 1 ! use zenith angle by default
103 
104  suppresswarnings = 0 ! write warnings file
105  resolutionfilesin = 0 ! Set to zero so that if not found, automatically set to Tstep below
106 
107  ! Set Diagnose switch to off (0). If Diagnose = 1 is set in RunControl, model progress will be printed
108  diagnose = 0
109  diagnosedisagg = 0
111  diagqn = 0
112  diagqs = 0
113 
114  filecode = 'none'
115  !smithFile='Smith1966.grd'
116 
117  !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
118  !Read in the RunControl.nml file
119  OPEN (55, file='RunControl.nml', err=200, status='old') !Change with needs
120  READ (55, nml=runcontrol, err=201)
121  CLOSE (55)
122 
123  ! set tstep_prev as tstep ! TS 04 Jul 2018
124  ! tstep_prev is NOT used by SUEWS but by WRF-SUEWS through the main interface
125  tstep_prev = tstep
126 
127  IF (diagnose == 1) WRITE (*, *) 'Diagnosis switched on (model progress will be printed to screen)...'
128 
129  !Check for problems with FileCode
130  IF (filecode == 'none') CALL errorhint(26, trim("RunControl.nml FileCode is missing"), notused, notused, notusedi)
131 
132  IF (resolutionfilesin == 0) resolutionfilesin = tstep !If ResolutionFilesIn not found, automatically set to Tstep
133 
134  !-----------------------------------------------------------------------
135 
136  !Write RunControl information to FileChoices.txt
137  filechoices = trim(fileoutputpath)//trim(filecode)//'_FileChoices.txt'
138  OPEN (12, file=filechoices, err=203)
139  WRITE (12, *) '----- RunControl -----'
140  WRITE (12, nml=runcontrol)
141  CLOSE (12)
142 
143  ! !Determine what should be done with respect to radiation
144  ! ! TODO: this can be wrapped into a subroutine, TS 20 Oct 2017
145  ! AlbedoChoice=0
146  ! ldown_option=0
147  ! IF(NetRadiationMethod==0)THEN !Observed Q* from the met input file will be used
148  ! IF(snowUse==1) THEN !If snow is modelled, NARP is needed for surface temperature
149  ! NetRadiationMethod=3000
150  ! ldown_option=3 !Ldown will be modelled
151  ! !NetRadiationMethod=NetRadiationMethod/1000
152  ! ENDIF
153  !
154  ! ELSEIF(NetRadiationMethod>0)THEN !Modelled Q* is used (NARP)
155  ! AlbedoChoice=-9
156  ! IF(NetRadiationMethod<10) THEN
157  ! AlbedoChoice=0
158  ! IF(NetRadiationMethod==1)ldown_option=1
159  ! IF(NetRadiationMethod==2)ldown_option=2
160  ! IF(NetRadiationMethod==3)ldown_option=3
161  !
162  ! ELSEIF(NetRadiationMethod>=100.AND.NetRadiationMethod<1000) THEN
163  ! AlbedoChoice=1
164  ! IF(NetRadiationMethod==100)ldown_option=1
165  ! IF(NetRadiationMethod==200)ldown_option=2
166  ! IF(NetRadiationMethod==300)ldown_option=3
167  ! NetRadiationMethod=NetRadiationMethod/100
168  ! ENDIF
169  !
170  ! !If bad NetRadiationMethod value
171  ! IF(NetRadiationMethod>3.OR. AlbedoChoice==-9)THEN
172  ! WRITE(*,*) 'NetRadiationMethod=',NetRadiationMethod
173  ! WRITE(*,*) 'Value not usable'
174  ! STOP
175  ! ENDIF
176  ! ENDIF
177 
178  ! Adjust input for precip downscaling using different intensities (HCW 21 Apr 2017)
179  IF (raindisaggmethod == 102) THEN
180  DO i = 1, 5
182  ENDDO
183  ENDIF
184 
185  !------------------------------------------------------------------
186  !Print run information on the screen
187  WRITE (*, *) '--------------------------------------------------------'
188  WRITE (*, *) "LUMPS/SUEWS - relevant references"
189  WRITE (*, *) "LUMPS - Grimmond and Oke (2002) JAM, 41, 79-810"
190  WRITE (*, *) "OHM - Grimmond and Oke (1999) JAM, 38, 922-940"
191  WRITE (*, *) "NARP - Offerle et al. (2003) JAM"
192  WRITE (*, *) "SUES - Evaporation Grimmond & Oke (1991) WRR"
193  WRITE (*, *) "Water Balance Model Grimmond et al. (1986) WRR"
194  WRITE (*, *) "NARP - Long wave improvements (Loridan et al. 2011 JAMC)"
195  WRITE (*, *) "SUEWS - Anthropogenic heat, etc (Jarvi et al. 2011 JH)"
196  WRITE (*, *) "SUEWS - Snow module included (Jarvi et al. 2014 GMD)"
197  WRITE (*, *) "SUEWS - v2016a release (Ward et al. 2016 UC)"
198  WRITE (*, *) '--------------------------------------------------------'
199 
200  !=======================================================================
201  !======================== Read input files =============================
202  ! This part reads the input files derived from the SiteInfo spreadsheet
203 
204  WRITE (*, *) 'Reading the following input files:'
205 
206  !=======================SUEWS_SiteSelect.txt============================
207  filen = 'SUEWS_SiteSelect.txt'
208  CALL numberrows(filen, skipheadersiteinfo) !Find number of rows in input file
211  !Read input file
212  OPEN (21, file=trim(fileinputpath)//trim(filen), err=300, status='old')
213  DO skipcounter = 1, (skipheadersiteinfo - 1)
214  READ (21, *) !Skip lines before header
215  ENDDO
216  READ (21, *) (headersiteselect_file(iv), iv=1, ncolumnssiteselect) !Get header
217 
218  DO i = 1, nlinessiteselect
219  READ (21, *) (siteselect(i, iv), iv=1, ncolumnssiteselect)
220  !write(*,*) (SiteSelect(i,iv),iv=1,ncolumnsSiteSelect)
221  ENDDO
222  CLOSE (21)
223 
224  !call InputHeaderCheck(FileN) !! Need to add column checks for SiteSelect.txt
225 
226  ! FileNames = (/'SUEWS_NonVeg.txt', 'SUEWS_Veg.txt', 'SUEWS_Water.txt', 'SUEWS_Snow.txt', &
227  ! 'SUEWS_Soil.txt', 'SUEWS_Conductance.txt', 'SUEWS_OHMCoefficients.txt', &
228  ! 'SUEWS_ESTMCoefficients.txt', 'SUEWS_AnthropogenicEmission.txt', 'SUEWS_Irrigation.txt', &
229  ! 'SUEWS_Profiles.txt', 'SUEWS_WithinGridWaterDist.txt', 'SUEWS_BiogenCO2.txt'/)
230 
231  DO ifile = 1, nfile
232  CALL numberrows(filenames(ifile), skipheadersiteinfo) !Find number of rows in input file
233  SELECT CASE (ifile)
234  CASE (1)
238  CASE (2)
239  nlinesveg = nlines
240  ALLOCATE (veg_coeff(nlinesveg, ncolumnsveg))
241  CALL readcoeff(filenames(ifile), nlinesveg, ncolumnsveg, headerveg_file, veg_coeff)
242  CASE (3)
246  CASE (4)
248  ALLOCATE (snow_coeff(nlinessnow, ncolumnssnow))
249  CALL readcoeff(filenames(ifile), nlinessnow, ncolumnssnow, headersnow_file, snow_coeff)
250  CASE (5)
252  ALLOCATE (soil_coeff(nlinessoil, ncolumnssoil))
253  CALL readcoeff(filenames(ifile), nlinessoil, ncolumnssoil, headersoil_file, soil_coeff)
254  CASE (6)
258  CASE (7)
263  CASE (8)
268  CASE (9)
272  CASE (10)
276  CASE (11)
280  CASE (12)
284  CASE (13)
288  END SELECT
289  END DO
290 
291  !=======================================================================
292  !=======================================================================
293 
294  !-----------------------------------------------------------------------
295  !SUEWS run information
296  inputmetformat = 10 !Input met data file in LUMPS format(1) or SUEWS format(10)
297  laicalcyes = 1 !Use observed(0) or modelled(1) LAI
298  evapmethod = 2 !Evaporation calculated according to Rutter(1) or Shuttleworth(2)
299  writedailystate = 1 !Daily state file written
300  tstepcount = 0
301 
302  t_interval = 3600 !Number of seconds in an hour
303 
304  !Calculate nsh (number of steps per hour) from model timestep (tstep) set in in RunControl
305  nsh_real = t_interval/REAL(tstep, kind(1d0))
306 
307  ! Check nsh is an integer
308  IF (nsh_real == int(nsh_real)) THEN
309  nsh = int(nsh_real)
310  ELSE
311  CALL errorhint(39, &
312  'TSTEP must divide into t_INTERVAL exactly.', REAL(tstep, KIND(1d0)), REAL(t_INTERVAL, KIND(1d0)), notUsedI)
313  ENDIF
314 
315  ! Check nsh is reasonable
316  IF (nsh_real < 6 .OR. nsh_real > 60) THEN
317  CALL errorhint(39, 'TSTEP is too small or too large.', REAL(tstep, KIND(1d0)), REAL(t_INTERVAL, KIND(1d0)), notUsedI)
318  ENDIF
319 
320  ! Cast integer nsh as nsh_real for use in calculations
321  nsh_real = REAL(nsh, kind(1d0))
322  ! Cast integer tstep as tstep_real for use in calculations
323  tstep_real = REAL(tstep, kind(1d0))
324  ! get integer nsd from nsh for use in AnOHM checking, 20160708 TS
325  nsd = 24*nsh
326 
327  !! Check this is still valid for v2016a
328  halftimestep = REAL(tstep_real)/2/(24*3600) !Used in NARP_cal_SunPosition to get sunpos in the middle of timestep
329 
330  RETURN
331 
332  !-------Possible problems-----------------------------------------------
333 200 CALL errorhint(47, 'RunControl.nml', notused, notused, notusedi)
334 201 CALL errorhint(48, 'RunControl.nml', notused, notused, notusedi)
335 
336 203 CALL errorhint(47, trim(filechoices), notused, notused, notusedi)
337 
338 300 CALL errorhint(48, trim(filen), notused, notused, notusedi)
339  !-----------------------------------------------------------------------
340 
341  !pause
342 
343 END SUBROUTINE overallruncontrol
344 !=========================================================================
345 
346 SUBROUTINE readcoeff(FileName, nlines, ncolumns, HeaderFile, Coeff)
348  USE data_in
349  USE defaultnotused
350 
351  IMPLICIT NONE
352  !----------------------------------------------------------------------
353  ! dummy arguments
354  !----------------------------------------------------------------------
355  CHARACTER(len=*), INTENT(in) :: FileName
356  INTEGER, INTENT(in) :: nlines, ncolumns
357  CHARACTER(len=*), INTENT(out) :: HeaderFile(ncolumns)
358  REAL(KIND(1d0)), INTENT(out) :: Coeff(nlines, ncolumns)
359 
360  !----------------------------------------------------------------------
361  ! local variables
362  !----------------------------------------------------------------------
363  INTEGER :: SkipCounter, iv, i, ii
364 
365  !Read input file
366  OPEN (22, file=trim(fileinputpath)//trim(filename), err=301, status='old')
367 
368  DO skipcounter = 1, skipheadersiteinfo - 1
369  READ (22, *) !Skip lines before header
370  ENDDO
371  READ (22, *) (headerfile(iv), iv=1, ncolumns) !Get header
372 
373  DO i = 1, nlines
374  READ (22, *) (coeff(i, iv), iv=1, ncolumns)
375  !write(*,*) (NonVeg_Coeff(i,iv),iv=1,ncolumnsNonVeg)
376  ENDDO
377  CLOSE (22)
378 
380 
381  ! Check codes are unique
382  DO i = 1, nlines
383  DO ii = i + 1, nlines
384  IF (coeff(i, 1) == coeff(ii, 1) .AND. i /= ii) THEN
385  WRITE (*, *) 'Code', coeff(i, 1), 'in ', trim(filename), ' not unique!'
386  CALL errorhint(60, filename, coeff(i, 1), notused, notusedi)
387  ENDIF
388  ENDDO
389  ENDDO
390 
391  RETURN
392 
393 301 CALL errorhint(48, trim(filename), notused, notused, notusedi)
394 
395 END SUBROUTINE readcoeff
396 
397 !=========================================================================
398 !This subroutine finds the number of rows in each input file
399 !INPUT: FileN Name of the input file
400 ! SkipHeaderLines Number of header rows to skip
401 !Made by LJ/HCW in Oct 2014
402 
403 SUBROUTINE numberrows(FileN, SkipHeaderLines)
405  USE data_in
406  USE defaultnotused
407  USE initial
408 
409  IMPLICIT NONE
410 
411  CHARACTER(len=50):: FileN
412  INTEGER:: SkipHeaderLines, RunNumber
413  INTEGER:: SkipCounter
414  INTEGER:: ios
415 
416  WRITE (*, *) filen
417  OPEN (39, file=trim(fileinputpath)//trim(filen), err=204, status='old')
418 
419  IF (skipheaderlines > 0) THEN
420  DO skipcounter = 1, skipheaderlines
421  READ (39, *, err=205)
422  !write(*,*) SkipCounter, SkipHeaderLines
423  ENDDO
424  ENDIF
425 
426  nlines = 0 !Initialize nlines
427  DO
428  READ (39, *, iostat=ios) runnumber
429  IF (ios < 0 .OR. runnumber == -9) EXIT !IF(RunNumber==-9) EXIT
430  nlines = nlines + 1
431  END DO
432  !write(*,*) 'nlines read: ',nlines
433  CLOSE (39)
434 
435  RETURN
436 
437 204 CALL errorhint(47, trim(fileinputpath)//trim(filen), notused, notused, notusedi)
438 205 CALL errorhint(48, trim(fileinputpath)//trim(filen), notused, notused, notusedi)
439 
440 END SUBROUTINE numberrows
441 !=========================================================================
442 
443 !----------------------------------------------------------------------------------------------
444 !Moves input information corresponding to row rr of SiteSelect into row Gridiv of SurfaceChar
445 ! - currently done once per year for each grid
446 !Made by HW&LJ Oct 2014.
447 !Last modified: HCW 26 Jan 2015
448 ! Interpolated hourly energy use profiles to resolution of model timestep.
449 ! Interpolated hourly water use profiles to resolution of model timestep.
450 ! Normalised energy use & water use profiles as required.
451 ! Hourly snow clearing profile is a 0-1 switch, and thus is not interpolated nor normalised.
452 ! - TODO: Rename profiles 1-24 rather than 0-23?
453 !----------------------------------------------------------------------------------------------
454 SUBROUTINE initializesurfacecharacteristics(Gridiv, rr)
456  USE allocatearray
458  USE data_in
459  USE defaultnotused
460  USE initial
461  USE sues_data
462 
463  IMPLICIT NONE
464 
465  INTEGER:: Gridiv, & !Row of SurfaceChar where input information will be stored
466  rr !Row of SiteSelect that matches current grid and year
467  INTEGER:: iii, &
468  ii
469 
470  !-------------------------------------------------------------------------------------------
471 
472  ! Initialise row of SurfaceChar
473  surfacechar(gridiv, :) = -999
474 
475  ! Transfer data in SiteSelect to SurfaceChar
476  surfacechar(gridiv, 1:ncolumnssiteselect) = siteselect(rr, 1:ncolumnssiteselect) !Cols in same order as in SiteSelect.txt
477 
478  ! ======== Retrieve information from other input files via codes ========
479 
480  ! ---- Find code for Paved surface (Impervious) ----
481  CALL codematchnonveg(rr, c_pavedcode)
482  ! Transfer characteristics to SurfaceChar for Paved surface
503  surfacechar(gridiv, c_cpanohm(pavsurf)) = nonveg_coeff(iv5, ci_cpanohm) ! heat capacity, AnOHM TS
504  surfacechar(gridiv, c_kkanohm(pavsurf)) = nonveg_coeff(iv5, ci_kkanohm) ! heat conductivity, AnOHM TS
505  surfacechar(gridiv, c_chanohm(pavsurf)) = nonveg_coeff(iv5, ci_chanohm) ! bulk transfer coef., AnOHM TS
506 
507  ! Use SoilCode for Paved to find code for soil characteristics
508  CALL codematchsoil(gridiv, c_soiltcode(pavsurf))
509  ! Transfer soil characteristics to SurfaceChar
518 
519  ! Get OHM characteristics for Paved
520  CALL codematchohm(gridiv, pavsurf, 'SWet') !Summer wet
521  ! Transfer OHM characteristics to SurfaceChar
525  CALL codematchohm(gridiv, pavsurf, 'SDry') !Summer dry
526  ! Transfer OHM characteristics to SurfaceChar
530  CALL codematchohm(gridiv, pavsurf, 'WWet') !Winter wet
531  ! Transfer OHM characteristics to SurfaceChar
535  CALL codematchohm(gridiv, pavsurf, 'WDry') !Winter dry
536  ! Transfer OHM characteristics to SurfaceChar
540 
541  ! Get water distribution (within grid) for Paved
543  ! Transfer distribution to SurfaceChar
553 
554  ! ---- Find code for Bldgs surface (Impervious) ----
555  CALL codematchnonveg(rr, c_bldgscode)
556  ! Transfer characteristics to SurfaceChar for Bldgs surface
577  surfacechar(gridiv, c_cpanohm(bldgsurf)) = nonveg_coeff(iv5, ci_cpanohm) ! heat capacity, AnOHM TS
578  surfacechar(gridiv, c_kkanohm(bldgsurf)) = nonveg_coeff(iv5, ci_kkanohm) ! heat conductivity, AnOHM TS
579  surfacechar(gridiv, c_chanohm(bldgsurf)) = nonveg_coeff(iv5, ci_chanohm) ! bulk transfer coef., AnOHM TS
580 
581  ! Use SoilCode for Bldgs to find code for soil characteristics
582  CALL codematchsoil(gridiv, c_soiltcode(bldgsurf))
583  ! Transfer soil characteristics to SurfaceChar
592  !Get OHM characteristics for Bldgs
593  CALL codematchohm(gridiv, bldgsurf, 'SWet') !Summer wet
594  ! Transfer OHM characteristics to SurfaceChar
598  CALL codematchohm(gridiv, bldgsurf, 'SDry') !Summer dry
599  ! Transfer OHM characteristics to SurfaceChar
603  CALL codematchohm(gridiv, bldgsurf, 'WWet') !Winter wet
604  ! Transfer OHM characteristics to SurfaceChar
608  CALL codematchohm(gridiv, bldgsurf, 'WDry') !Winter dry
609  ! Transfer OHM characteristics to SurfaceChar
613 
614  ! Get water distribution (within grid) for Bldgs
616  ! Transfer distribution to SurfaceChar
626 
627  ! ---- Find code for EveTr surface (Pervious) ----
628  CALL codematchveg(rr, c_evetrcode)
629  ! Transfer characteristics to SurfaceChar for EveTr surface
630  ! All surfaces (1-nsurf)
643  ! Veg surfaces only (1-nvegsurf)
658  ! OHM codes
665  ! ESTM code
667  ! AnOHM TS
668  surfacechar(gridiv, c_cpanohm(conifsurf)) = veg_coeff(iv5, cp_cpanohm) ! heat capacity, AnOHM TS
669  surfacechar(gridiv, c_kkanohm(conifsurf)) = veg_coeff(iv5, cp_kkanohm) ! heat conductivity, AnOHM TS
670  surfacechar(gridiv, c_chanohm(conifsurf)) = veg_coeff(iv5, cp_chanohm) ! bulk transfer coef., AnOHM TS
671 
673 
674  ! ---- Find code for Biogenic CO2 Method ----
676  ! Transfer Biogenic CO2 characteristics to SurfaceChar
685 
686  ! Use SoilCode for EveTr to find code for soil characteristics
687  CALL codematchsoil(gridiv, c_soiltcode(conifsurf))
688  ! Transfer soil characteristics to SurfaceChar
697  !Get OHM characteristics for Conif
698  CALL codematchohm(gridiv, conifsurf, 'SWet') !Summer wet
699  ! Transfer OHM characteristics to SurfaceChar
703  CALL codematchohm(gridiv, conifsurf, 'SDry') !Summer dry
704  ! Transfer OHM characteristics to SurfaceChar
708  CALL codematchohm(gridiv, conifsurf, 'WWet') !Winter wet
709  ! Transfer OHM characteristics to SurfaceChar
713  CALL codematchohm(gridiv, conifsurf, 'WDry') !Winter dry
714  ! Transfer OHM characteristics to SurfaceChar
718 
719  ! Get water distribution (within grid) for EveTr
721  ! Transfer distribution to SurfaceChar
731 
732  ! ---- Find code for DecTr surface (Pervious) ----
733  CALL codematchveg(rr, c_dectrcode)
734  ! Transfer characteristics to SurfaceChar for DecTr surface
735  ! All surfaces (1-nsurf)
748  ! Veg surfaces only (1-nvegsurf)
763  ! OHM codes
770  ! ESTM code
772  ! AnOHM TS
773  surfacechar(gridiv, c_cpanohm(decidsurf)) = veg_coeff(iv5, cp_cpanohm) ! heat capacity, AnOHM TS
774  surfacechar(gridiv, c_kkanohm(decidsurf)) = veg_coeff(iv5, cp_kkanohm) ! heat conductivity, AnOHM TS
775  surfacechar(gridiv, c_chanohm(decidsurf)) = veg_coeff(iv5, cp_chanohm) ! bulk transfer coef., AnOHM TS
776 
778 
779  ! ---- Find code for Biogenic CO2 Method ----
781  ! Transfer Biogenic CO2 characteristics to SurfaceChar
790 
791  ! Use SoilCode for DecTr to find code for soil characteristics
792  CALL codematchsoil(gridiv, c_soiltcode(decidsurf))
793  ! Transfer soil characteristics to SurfaceChar
802  !Get OHM characteristics for Decid
803  CALL codematchohm(gridiv, decidsurf, 'SWet') !Summer wet
804  ! Transfer OHM characteristics to SurfaceChar
808  CALL codematchohm(gridiv, decidsurf, 'SDry') !Summer dry
809  ! Transfer OHM characteristics to SurfaceChar
813  CALL codematchohm(gridiv, decidsurf, 'WWet') !Winter wet
814  ! Transfer OHM characteristics to SurfaceChar
818  CALL codematchohm(gridiv, decidsurf, 'WDry') !Winter dry
819  ! Transfer OHM characteristics to SurfaceChar
823 
824  ! Get water distribution (within grid) for DecTr
826  ! Transfer distribution to SurfaceChar
836 
837  ! ---- Find code for Grass surface (Pervious) ----
838  CALL codematchveg(rr, c_grasscode)
839  ! Transfer characteristics to SurfaceChar for Grass surface
840  ! All surfaces (1-nsurf)
853  ! Veg surfaces only (1-nvegsurf)
868  ! OHM codes
875  ! ESTM code
877  ! AnOHM TS
878  surfacechar(gridiv, c_cpanohm(grasssurf)) = veg_coeff(iv5, cp_cpanohm) ! heat capacity, AnOHM TS
879  surfacechar(gridiv, c_kkanohm(grasssurf)) = veg_coeff(iv5, cp_kkanohm) ! heat conductivity, AnOHM TS
880  surfacechar(gridiv, c_chanohm(grasssurf)) = veg_coeff(iv5, cp_chanohm) ! bulk transfer coef., AnOHM TS
881 
883 
884  ! ---- Find code for Biogenic CO2 Method ----
886  ! Transfer Biogenic CO2 characteristics to SurfaceChar
895 
896  ! Use SoilCode for Grass to find code for soil characteristics
897  CALL codematchsoil(gridiv, c_soiltcode(grasssurf))
898  ! Transfer soil characteristics to SurfaceChar
907  !Get OHM characteristics for Grass
908  CALL codematchohm(gridiv, grasssurf, 'SWet') !Summer wet
909  ! Transfer OHM characteristics to SurfaceChar
913  CALL codematchohm(gridiv, grasssurf, 'SDry') !Summer dry
914  ! Transfer OHM characteristics to SurfaceChar
918  CALL codematchohm(gridiv, grasssurf, 'WWet') !Winter wet
919  ! Transfer OHM characteristics to SurfaceChar
923  CALL codematchohm(gridiv, grasssurf, 'WDry') !Winter dry
924  ! Transfer OHM characteristics to SurfaceChar
928 
929  ! Get water distribution (within grid) for Grass
931  ! Transfer distribution to SurfaceChar
941 
942  ! ---- Find code for BSoil surface (Impervious) ----
943  CALL codematchnonveg(rr, c_bsoilcode)
944  ! Transfer characteristics to SurfaceChar for BSoil surface
945  ! All surfaces (1-nsurf)
966  surfacechar(gridiv, c_cpanohm(bsoilsurf)) = nonveg_coeff(iv5, ci_cpanohm) ! heat capacity, AnOHM TS
967  surfacechar(gridiv, c_kkanohm(bsoilsurf)) = nonveg_coeff(iv5, ci_kkanohm) ! heat conductivity, AnOHM TS
968  surfacechar(gridiv, c_chanohm(bsoilsurf)) = nonveg_coeff(iv5, ci_chanohm) ! bulk transfer coef., AnOHM TS
969 
970  ! Use SoilCode for BSoil to find code for soil characteristics
971  CALL codematchsoil(gridiv, c_soiltcode(bsoilsurf))
972  ! Transfer soil characteristics to SurfaceChar
981 
982  ! Get OHM characteristics for BSoil
983  CALL codematchohm(gridiv, bsoilsurf, 'SWet') !Summer wet
984  ! Transfer OHM characteristics to SurfaceChar
988  CALL codematchohm(gridiv, bsoilsurf, 'SDry') !Summer dry
989  ! Transfer OHM characteristics to SurfaceChar
993  CALL codematchohm(gridiv, bsoilsurf, 'WWet') !Winter wet
994  ! Transfer OHM characteristics to SurfaceChar
998  CALL codematchohm(gridiv, bsoilsurf, 'WDry') !Winter dry
999  ! Transfer OHM characteristics to SurfaceChar
1003 
1004  ! Get water distribution (within grid) for Bare soil
1006  ! Transfer distribution to SurfaceChar
1016 
1017  ! ---- Find code for Water surface (Water) ----
1018  CALL codematchwater(rr, c_watercode)
1019  ! Transfer characteristics to SurfaceChar for Water surface
1020  ! All surfaces (1-nsurf)
1031  ! Water surface only
1033  ! OHM codes
1040  ! ESTM code
1042  ! AnOHM TS
1043  surfacechar(gridiv, c_cpanohm(watersurf)) = water_coeff(iv5, cw_cpanohm) ! heat capacity, AnOHM TS
1044  surfacechar(gridiv, c_kkanohm(watersurf)) = water_coeff(iv5, cw_kkanohm) ! heat conductivity, AnOHM TS
1045  surfacechar(gridiv, c_chanohm(watersurf)) = water_coeff(iv5, cw_chanohm) ! bulk transfer coef., AnOHM TS
1046  ! Get OHM characteristics for Water
1047  CALL codematchohm(gridiv, watersurf, 'SWet') !Summer wet
1048  ! Transfer OHM characteristics to SurfaceChar
1052  CALL codematchohm(gridiv, watersurf, 'SDry') !Summer dry
1053  ! Transfer OHM characteristics to SurfaceChar
1057  CALL codematchohm(gridiv, watersurf, 'WWet') !Winter wet
1058  ! Transfer OHM characteristics to SurfaceChar
1062  CALL codematchohm(gridiv, watersurf, 'WDry') !Winter dry
1063  ! Transfer OHM characteristics to SurfaceChar
1067 
1068  ! Get water distribution (within grid) for Water
1070  ! Transfer distribution to SurfaceChar
1080 
1081  ! ---- Find code for Snow surface (Snow) ----
1082  CALL codematchsnow(rr, c_snowcode)
1083  ! Transfer characteristics to SurfaceChar for Snow surface
1088  !SurfaceChar(gridiv,c_SnowAlb) = Snow_Coeff(iv5,cs_SnowAlb)
1105 
1106  ! ESTM code
1108  ! SurfaceChar(Gridiv,c_CpAnOHM(nsurf+1)) = Snow_Coeff(iv5,cs_CpAnOHM) ! heat capacity, AnOHM TS
1109  ! SurfaceChar(Gridiv,c_KkAnOHM(nsurf+1)) = Snow_Coeff(iv5,cs_KkAnOHM) ! heat conductivity, AnOHM TS
1110  ! SurfaceChar(Gridiv,c_ChAnOHM(nsurf+1)) = Snow_Coeff(iv5,cs_ChAnOHM) ! bulk transfer coef., AnOHM TS
1111  ! Get OHM characteristics for Snow
1112  CALL codematchohm(gridiv, (nsurf + 1), 'SWet') !Summer wet
1113  ! Transfer OHM characteristics to SurfaceChar
1117  CALL codematchohm(gridiv, (nsurf + 1), 'SDry') !Summer dry
1118  ! Transfer OHM characteristics to SurfaceChar
1122  CALL codematchohm(gridiv, (nsurf + 1), 'WWet') !Winter wet
1123  ! Transfer OHM characteristics to SurfaceChar
1127  CALL codematchohm(gridiv, (nsurf + 1), 'WDry') !Winter dry
1128  ! Transfer OHM characteristics to SurfaceChar
1132 
1133  !Transfer ESTM characteristics to SurfaceChar
1134  DO iii = 1, (nsurf + 1)
1135  IF (surfacechar(gridiv, c_estmcode(iii)) /= 0) THEN !If ESTM Code not equal to zero, use code as normal
1136  CALL codematchestm(gridiv, iii)
1152  !Extra characteristics for Bldg surfaces
1153  IF (iii == bldgsurf) THEN
1190  ENDIF
1191  !If ESTM Code equals zero, use codes and surface fractions from SiteSelect.txt for Paved and Bldgs
1192  ELSEIF (iii == pavsurf .AND. surfacechar(gridiv, c_estmcode(iii)) == 0) THEN
1193  DO ii = 1, 3 !for the 3x Paved ESTM classes
1194  CALL codematchestm_class(gridiv, iii, ii)
1210  ENDDO
1211  ELSEIF (iii == bldgsurf .AND. surfacechar(gridiv, c_estmcode(iii)) == 0) THEN
1212  DO ii = 1, 5 !for the 5x Bldgs ESTM classes
1213  CALL codematchestm_class(gridiv, iii, ii)
1229  !Extra characteristics for Bldgs surface
1266  ENDDO
1267  ENDIF
1268  ENDDO
1269 
1270  ! ---- Find code for Surface conductances ----
1272  ! Transfer conductance characteristics to SurfaceChar
1285 
1286  ! ---- Find code for Anthropogenic heat ----
1288  ! Transfer Anthropogenic heat characteristics to SurfaceChar
1327 
1328  ! ---- Find code for Irrigation ----
1329  CALL codematchirrigation(rr, c_irrcode)
1330  ! Transfer Irrigation characteristics to SurfaceChar
1340 
1341  ! ---- Find code for Hourly Profiles ----
1342  ! Energy use (weekdays)
1343  CALL codematchprof(gridiv, c_enprofwd)
1345  ! Energy use (weekends)
1346  CALL codematchprof(gridiv, c_enprofwe)
1348  ! Water use profile (manual, weekdays)
1349  CALL codematchprof(gridiv, c_wprofmanuwd)
1351  ! Water use profile (manual, weekends)
1352  CALL codematchprof(gridiv, c_wprofmanuwe)
1354  ! Water use profile (automatic, weekdays)
1355  CALL codematchprof(gridiv, c_wprofautowd)
1357  ! Water use profile (automatic, weekends)
1358  CALL codematchprof(gridiv, c_wprofautowe)
1360  ! Snow clearing profile (weekdays)
1361  CALL codematchprof(gridiv, c_snowprofwd)
1363  ! Snow clearing profile (weekends)
1364  CALL codematchprof(gridiv, c_snowprofwe)
1366  !Human activity (weekdays)
1367  CALL codematchprof(gridiv, c_co2mwd)
1369  !Human activity (weekends)
1370  CALL codematchprof(gridiv, c_co2mwe)
1372  !Traffic (weekdays)
1373  CALL codematchprof(gridiv, c_traffprofwd)
1375  !Traffic (weekends)
1376  CALL codematchprof(gridiv, c_traffprofwe)
1378  !Population (weekdays)
1379  CALL codematchprof(gridiv, c_popprofwd)
1381  !Population (weekends)
1382  CALL codematchprof(gridiv, c_popprofwe)
1384 
1385  ! TS 05 Jul 2018: No longer needed as interpolation is done through specific subroutines at each required instant
1386  ! the below is commented out by TS 05 Jul 2018
1387  ! ! ---- Interpolate Hourly Profiles to model timestep and normalise
1388  ! TstepProfiles(Gridiv,:,:) = -999 !Initialise TstepProfiles
1389  ! ! Energy use
1390  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_EnUseWD,c_HrProfEnUseWD)
1391  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_EnUseWE,c_HrProfEnUseWE)
1392  !
1393  ! ! For energy use, normalise so the AVERAGE of the multipliers is equal to 1
1394  ! TstepProfiles(Gridiv,cTP_EnUseWD,:) = TstepProfiles(Gridiv,cTP_EnUseWD,:) / SUM(TstepProfiles(Gridiv,cTP_EnUseWD,:))*24*nsh_real
1395  ! TstepProfiles(Gridiv,cTP_EnUseWE,:) = TstepProfiles(Gridiv,cTP_EnUseWE,:) / SUM(TstepProfiles(Gridiv,cTP_EnUseWE,:))*24*nsh_real
1396  !
1397  ! ! Water use
1398  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_WUManuWD,c_HrProfWUManuWD)
1399  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_WUManuWE,c_HrProfWUManuWE)
1400  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_WUAutoWD,c_HrProfWUAutoWD)
1401  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_WUAutoWE,c_HrProfWUAutoWE)
1402  ! ! For water use, normalise so the SUM of the multipliers is equal to 1 (profile is multiplied by daily water use)
1403  ! TstepProfiles(Gridiv,cTP_WUManuWD,:) = TstepProfiles(Gridiv,cTP_WUManuWD,:) / SUM(TstepProfiles(Gridiv,cTP_WUManuWD,:))
1404  ! TstepProfiles(Gridiv,cTP_WUManuWE,:) = TstepProfiles(Gridiv,cTP_WUManuWE,:) / SUM(TstepProfiles(Gridiv,cTP_WUManuWE,:))
1405  ! TstepProfiles(Gridiv,cTP_WUAutoWD,:) = TstepProfiles(Gridiv,cTP_WUAutoWD,:) / SUM(TstepProfiles(Gridiv,cTP_WUAutoWD,:))
1406  ! TstepProfiles(Gridiv,cTP_WUAutoWE,:) = TstepProfiles(Gridiv,cTP_WUAutoWE,:) / SUM(TstepProfiles(Gridiv,cTP_WUAutoWE,:))
1407  !
1408  ! ! Human activity for CO2 calculations
1409  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_HumActivityWD,c_HrProfHumActivityWD)
1410  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_HumActivityWE,c_HrProfHumActivityWE)
1411  !
1412  ! ! For human activity, check values are between 1 (night) and 2 (day)
1413  ! IF(ANY(TstepProfiles(Gridiv,cTP_HumActivityWD,:) < 1 .OR. TstepProfiles(Gridiv,cTP_HumActivityWD,:) > 2)) THEN
1414  ! CALL ErrorHint(70,'Profile value for human activity (WD) exceeds allowed range 1-2.',NotUsed,NotUsed,notUsedI)
1415  ! ENDIF
1416  ! IF(ANY(TstepProfiles(Gridiv,cTP_HumActivityWE,:) < 1 .OR. TstepProfiles(Gridiv,cTP_HumActivityWE,:) > 2)) THEN
1417  ! CALL ErrorHint(70,'Profile value for human activity (WE) exceeds allowed range 1-2.',NotUsed,NotUsed,notUsedI)
1418  ! ENDIF
1419  !
1420  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_TraffProfWD,c_HrProfTraffWD)
1421  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_TraffProfWE,c_HrProfTraffWE)
1422  ! ! For traffic, normalise so the AVERAGE of the multipliers is equal to 1
1423  ! TstepProfiles(Gridiv,cTP_TraffProfWD,:) = TstepProfiles(Gridiv,cTP_TraffProfWD,:) &
1424  ! / SUM(TstepProfiles(Gridiv,cTP_TraffProfWD,:))*24*nsh_real
1425  ! TstepProfiles(Gridiv,cTP_TraffProfWE,:) = TstepProfiles(Gridiv,cTP_TraffProfWE,:) &
1426  ! / SUM(TstepProfiles(Gridiv,cTP_TraffProfWE,:))*24*nsh_real
1427  !
1428  ! ! Population for CO2 calculations
1429  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_PopProfWD,c_HrProfPopWD)
1430  ! CALL SUEWS_InterpHourlyProfiles(Gridiv,cTP_PopProfWE,c_HrProfPopWE)
1431 
1432 END SUBROUTINE initializesurfacecharacteristics
1433 
1434 !----------------------------------------------------------------------------------------------
1435 !Calculates the initial conditions for each grid on the first year of run
1436 !Made by sg feb 2012 -
1437 !Latest modified:
1438 !20 Oct 2014, LJ: Saves to slot 0 of the output matrix
1439 !06 Nov 2014 HCW
1440 !----------------------------------------------------------------------------------------------
1441 
1442 !-------------------------------------------------------------------------
1443 SUBROUTINE initialstate(GridName, year_int, Gridiv, NumberOfGrids)
1444  ! Last modified HCW 13 Jan 2017 - Major changes to InitialConditions file
1445  ! Last modified HCW 24 May 2016 - Removed unused argument year_txt
1446  ! Last modified HCW 03 Jul 2015 - Added initial conditions albEveTr0 and albGrass0
1447  ! Last modified HCW 03 Dec 2014
1448  !------------------------------------------------------------------------
1449 
1450  USE allocatearray
1451  USE data_in
1453  USE defaultnotused
1454  USE filename
1455  USE gis_data
1456  USE initialcond
1457  USE mod_z
1458  USE resist
1459  USE snowmod
1460  USE sues_data
1461  USE time
1462  USE initialcond
1465 
1466  IMPLICIT NONE
1467 
1468  CHARACTER(len=20):: GridName !Name of the evaluated grid
1469  CHARACTER(len=4):: year_txt
1470  INTEGER:: NumberOfGrids
1471 
1472  CHARACTER(len=150):: fileInit !Initial conditions filename
1473  INTEGER::DaysSinceRain, Gridiv, & !number of days since rain, grid number,
1474  gamma1, gamma2 !switches related to cooling and heating degree days
1475  INTEGER::wd, seas, date, mb, & !weekday information, season, date, month
1476  year_int, switch = 0, & !year as an integer, switch related to previous day
1477  id_next !next day,counter in irrigation calculations
1478 
1479  REAL(KIND(1d0))::PavedState, BldgsState, EveTrState, DecTrState, GrassState, BSoilState, WaterState, &
1480  SnowFracPaved, SnowFracBldgs, SnowFracEveTr, SnowFracDecTr, &
1481  SnowFracGrass, SnowFracBSoil, SnowFracWater, &
1482  SnowDensPaved, SnowDensBldgs, SnowDensEveTr, SnowDensDecTr, &
1483  SnowDensGrass, SnowDensBSoil, SnowDensWater
1484 
1485  INTEGER:: LeavesOutInitially !Allows for quick setting of veg-related initial conditions for full leaf-out (1) or leaf-off (0)
1486  INTEGER:: SnowInitially !Allows for quick setting of snow-related initial conditions for no snow initially (0)
1487 
1488  INTEGER:: GridsInitialised = 0 ! Number of grids initialised at start of model run
1489  INTEGER:: YearsInitialised = 0 ! Number of years initialised at start of model run
1490  INTEGER:: dayofWeek_id(3)
1491  REAL(KIND(1d0)):: NormalizeVegChar !Function
1492 
1493  ! Define InitialConditions namelist ---------------------------------------
1494  namelist /initialconditions/ dayssincerain, &
1495  temp_c0, &
1496  !ID_Prev,& !Now calculated from met forcing file
1497  leavesoutinitially, &
1498  gdd_1_0, &
1499  gdd_2_0, &
1500  laiinitialevetr, &
1501  laiinitialdectr, &
1502  laiinitialgrass, &
1503  albevetr0, &
1504  albdectr0, &
1505  albgrass0, &
1506  decidcap0, &
1507  porosity0, &
1508  pavedstate, &
1509  bldgsstate, &
1510  evetrstate, &
1511  dectrstate, &
1512  grassstate, &
1513  bsoilstate, &
1514  waterstate, &
1521  snowinitially, &
1529  snowpackpaved, &
1530  snowpackbldgs, &
1531  snowpackevetr, &
1532  snowpackdectr, &
1533  snowpackgrass, &
1534  snowpackbsoil, &
1535  snowpackwater, &
1536  snowfracpaved, &
1537  snowfracbldgs, &
1538  snowfracevetr, &
1539  snowfracdectr, &
1540  snowfracgrass, &
1541  snowfracbsoil, &
1542  snowfracwater, &
1543  snowdenspaved, &
1544  snowdensbldgs, &
1545  snowdensevetr, &
1546  snowdensdectr, &
1547  snowdensgrass, &
1548  snowdensbsoil, &
1549  snowdenswater, &
1550  snowalb0!,&
1551  ! BoInit ! removed as no longer needed by AnOHM
1552 
1553  ! Initialise namelist to NAN ----------------------------------------------
1554  dayssincerain = int(nan)
1555  temp_c0 = nan
1556  leavesoutinitially = int(nan)
1557  gdd_1_0 = nan
1558  gdd_2_0 = nan
1562  albevetr0 = nan
1563  albdectr0 = nan
1564  albgrass0 = nan
1565  decidcap0 = nan
1566  porosity0 = nan
1567  pavedstate = nan
1568  bldgsstate = nan
1569  evetrstate = nan
1570  dectrstate = nan
1571  grassstate = nan
1572  bsoilstate = nan
1573  waterstate = nan
1580  snowinitially = int(nan)
1588  snowpackpaved = nan
1589  snowpackbldgs = nan
1590  snowpackevetr = nan
1591  snowpackdectr = nan
1592  snowpackgrass = nan
1593  snowpackbsoil = nan
1594  snowpackwater = nan
1595  snowfracpaved = nan
1596  snowfracbldgs = nan
1597  snowfracevetr = nan
1598  snowfracdectr = nan
1599  snowfracgrass = nan
1600  snowfracbsoil = nan
1601  snowfracwater = nan
1602  snowdenspaved = nan
1603  snowdensbldgs = nan
1604  snowdensevetr = nan
1605  snowdensdectr = nan
1606  snowdensgrass = nan
1607  snowdensbsoil = nan
1608  snowdenswater = nan
1609  snowalb0 = nan
1610  ! BoInit=NAN
1611 
1612  WRITE (year_txt, '(I4)') year_int !Get year as a text string
1613 
1614  ! Define InitialConditions file -------------------------------------------
1615  fileinit = trim(fileinputpath)//trim("InitialConditions")//trim(gridname)//'.nml'
1616  ! On very first InitialConditions for each grid, can use one initial conditions file specified for all grids
1617  IF (multipleinitfiles == 0 .AND. yearsinitialised == 0) THEN
1618  fileinit = trim(fileinputpath)//trim("InitialConditions")//trim(filecode)//'_'//trim(year_txt)//'.nml'
1619  gridsinitialised = gridsinitialised + 1
1620  IF (gridsinitialised == numberofgrids) THEN
1621  yearsinitialised = yearsinitialised + 1
1622  gridsinitialised = 0 !reset GridsInitialised
1623  ENDIF
1624  ENDIF
1625  !write(*,*) TRIM(FileInit)
1626 
1627  ! Open, read and close InitialConditions file -----------------------------
1628  OPEN (56, file=trim(fileinit), err=600, status='old')
1629  READ (56, iostat=ios_out, nml=initialconditions, err=601)
1630  CLOSE (56)
1631 
1632  ! Write InitialConditions to FileChoices ----------------------------------
1633  filechoices = trim(fileoutputpath)//trim(filecode)//'_FileChoices.txt'
1634  OPEN (12, file=filechoices, position='append')
1635  WRITE (12, *) '----- '//trim("InitialConditions")//trim(gridname)//'.nml'//' -----'
1636  WRITE (12, nml=initialconditions)
1637  CLOSE (12)
1638 
1639  !--------------------------------------------------------------------------
1640  ! Check initial conditions and assign values if not provided --------------
1641 
1642  ! Calculate previous day --------------------------------------------------
1643  id_prev = int(metforcingdata(1, 2, gridiv)) - 1
1644 
1645  ! If no. days since rainfall unknown, set to zero -------------------------
1646  IF (dayssincerain == int(nan)) dayssincerain = 0
1647 
1648  ! If average temperature for previous day unknown, use average of first day
1649  IF (temp_c0 == nan) temp_c0 = sum(metforcingdata(1:(24*nsh), 12, gridiv))/(24*nsh)
1650 
1651  ! Set vegetation-related initial conditions -------------------------------
1652  ! If LeavesOutInitially is -999, don't use and check all required conditions have been provided
1653  IF (leavesoutinitially == int(nan)) THEN
1654  IF (gdd_1_0 == nan .OR. gdd_2_0 == nan) THEN
1655  CALL errorhint(36, 'Specify values for GDD_1_0 and GDD_2_0.', notused, notused, notusedi)
1656  ENDIF
1657  IF (laiinitialevetr == nan .OR. laiinitialdectr == nan .OR. laiinitialgrass == nan) THEN
1658  CALL errorhint(36, 'Specify initial values for LAI for all vegetated surface types.', notused, notused, notusedi)
1659  ENDIF
1660  IF (albevetr0 == nan .OR. albdectr0 == nan .OR. albgrass0 == nan) THEN
1661  CALL errorhint(36, 'Specify initial values for albedo for all vegetated surface types.', notused, notused, notusedi)
1662  ENDIF
1663  IF (decidcap0 == nan) THEN
1664  CALL errorhint(36, 'Specify DecidCap0.', notused, notused, notusedi)
1665  ENDIF
1666  IF (porosity0 == nan) THEN
1667  CALL errorhint(36, 'Specify Porosity0.', notused, notused, notusedi)
1668  ENDIF
1669  ELSEIF (leavesoutinitially == 1) THEN !If leaves out, set to summertime values using SUEWS_Veg.txt
1670  gdd_1_0 = normalizevegchar(c_gddfull, gridiv)
1671  gdd_2_0 = 0
1672  laiinitialevetr = surfacechar(gridiv, c_laimax(ivconif)) !Max LAI
1675  albevetr0 = surfacechar(gridiv, c_albmax(conifsurf)) !Max albedo
1678  decidcap0 = surfacechar(gridiv, c_stormax(decidsurf)) !Max storage capacity (DecTr only)
1679  porosity0 = surfacechar(gridiv, c_porositymin(ivdecid)) !Min porosity (DecTr only)
1680  ELSEIF (leavesoutinitially == 0) THEN !If leaves off, set to wintertime values using SUEWS_Veg.txt
1681  gdd_1_0 = 0
1682  gdd_2_0 = normalizevegchar(c_sddfull, gridiv)
1683  laiinitialevetr = surfacechar(gridiv, c_laimin(ivconif)) !Min LAI
1686  albevetr0 = surfacechar(gridiv, c_albmin(conifsurf)) !Min albedo
1689  decidcap0 = surfacechar(gridiv, c_stormin(decidsurf)) !Min storage capacity (DecTr only)
1690  porosity0 = surfacechar(gridiv, c_porositymax(ivdecid)) !Max porosity (DecTr only)
1691  ELSE
1692  CALL errorhint(36, 'LeavesOutInitially must be 0, 1, or -999 (or omitted from InitialConditions namelist)', &
1694  ENDIF
1695 
1696  ! If surface wetness states unknown, set to zero --------------------------
1697  IF (pavedstate == nan) pavedstate = 0
1698  IF (bldgsstate == nan) bldgsstate = 0
1699  IF (evetrstate == nan) evetrstate = 0
1700  IF (dectrstate == nan) dectrstate = 0
1701  IF (grassstate == nan) grassstate = 0
1702  IF (bsoilstate == nan) bsoilstate = 0
1703  ! except for water surface - set using WaterDepth in SUEWS_Water.txt
1704  IF (waterstate == nan) waterstate = surfacechar(gridiv, c_waterdepth)
1705 
1706  ! Check initial soil moisture states are provided -------------------------
1709  CALL errorhint(36, 'Initial soil moisture must be provided for all surface types except water.', notused, notused, notusedi)
1710  ENDIF
1711 
1712  ! Set snow-related initial conditions -------------------------------
1713  ! If snow part not used, or no snow initially, set all snow-related initial conditions to zero
1714  IF (snowuse == 0 .OR. snowinitially == 0) THEN
1722  snowpackpaved = 0
1723  snowpackbldgs = 0
1724  snowpackevetr = 0
1725  snowpackdectr = 0
1726  snowpackgrass = 0
1727  snowpackbsoil = 0
1728  snowpackwater = 0
1729  snowfracpaved = 0
1730  snowfracbldgs = 0
1731  snowfracevetr = 0
1732  snowfracdectr = 0
1733  snowfracgrass = 0
1734  snowfracbsoil = 0
1735  snowfracwater = 0
1736  snowdenspaved = 0
1737  snowdensbldgs = 0
1738  snowdensevetr = 0
1739  snowdensdectr = 0
1740  snowdensgrass = 0
1741  snowdensbsoil = 0
1742  snowdenswater = 0
1743  snowalb0 = 0
1744  ELSEIF (snowinitially == int(nan)) THEN !Check all required snow-related conditions are provided
1747  snowwaterwaterstate == nan) THEN
1748  CALL errorhint(36, 'Specify SnowWater state for all 7 surface types.', notused, notused, notusedi)
1749  ENDIF
1750  IF (snowpackpaved == nan .OR. snowpackbldgs == nan .OR. snowpackevetr == nan .OR. &
1751  snowpackdectr == nan .OR. snowpackgrass == nan .OR. snowpackbsoil == nan .OR. &
1752  snowpackwater == nan) THEN
1753  CALL errorhint(36, 'Specify SnowPack for all 7 surface types.', notused, notused, notusedi)
1754  ENDIF
1755  IF (snowfracpaved == nan .OR. snowfracbldgs == nan .OR. snowfracevetr == nan .OR. &
1756  snowfracdectr == nan .OR. snowfracgrass == nan .OR. snowfracbsoil == nan .OR. &
1757  snowfracwater == nan) THEN
1758  CALL errorhint(36, 'Specify SnowFrac for all 7 surface types.', notused, notused, notusedi)
1759  ENDIF
1760  IF (snowdenspaved == nan .OR. snowdensbldgs == nan .OR. snowdensevetr == nan .OR. &
1761  snowdensdectr == nan .OR. snowdensgrass == nan .OR. snowdensbsoil == nan .OR. &
1762  snowdenswater == nan) THEN
1763  CALL errorhint(36, 'Specify SnowDens for all 7 surface types.', notused, notused, notusedi)
1764  ENDIF
1765  IF (snowalb0 == nan) THEN
1766  CALL errorhint(36, 'Specify SnowAlb0.', notused, notused, notusedi)
1767  ENDIF
1768  ELSE
1769  CALL errorhint(36, 'SnowInitially must be 0 or -999 (or omitted from InitialConditions namelist)', &
1771  ENDIF
1772 
1773  ! removed as no longer needed, TS 30 Jan 2018
1774  ! ! If AnOHM option selected, check initial Bowen ratio is provided ---------
1775  ! IF(StorageHeatMethod==3 .AND. BoInit == NAN) THEN
1776  ! CALL ErrorHint(36,'Specify BoInit for AnOHM calculations.', notUsed,notUsed,notUsedI)
1777  ! ENDIF
1778 
1779  ! -------------------------------------------------------------------------
1780  ! -------------------------------------------------------------------------
1781 
1782  ! Previous day DOY number (needed in file allocations)
1783  IF (id_prev >= 364) id_prev = 0 !If previous day is larger than 364, set this to zero
1784 
1785  ! Save initial conditions to ModelDailyState array ------------------------
1792  modeldailystate(gridiv, cmds_gddmin) = 90 !QUESTION: Going to check for minimum GDD
1793  modeldailystate(gridiv, cmds_gddmax) = -90 !QUESTION: Going to check for maximum GDD
1799 
1800  modeldailystate(gridiv, cmds_snowfallcum) = 0 !!Check this
1801 
1802  modeldailystate(gridiv, cmds_dayssincerain) = REAL(dayssincerain, kind(1d0))
1804  ! Assume that the temperature has been the same for the previous days
1808 
1809  ! -- Anthropogenic heat flux initializations --
1810  ! Need to get BaseT_HC from SurfaceChar, as info not transferred until SUEWS_Translate called
1811  baset_hc = surfacechar(gridiv, c_baset_hc)
1812 
1813  IF (emissionsmethod >= 0) THEN
1814  !Calculations related to heating and cooling degree days (BaseT_HC is used always)
1815  IF ((temp_c0 - baset_hc) >= 0) THEN !Cooling
1816  gamma2 = 1
1817  ELSE
1818  gamma2 = 0
1819  ENDIF
1820  IF ((baset_hc - temp_c0) >= 0) THEN !Heating
1821  gamma1 = 1
1822  ELSE
1823  gamma1 = 0
1824  ENDIF
1825  modeldailystate(gridiv, cmds_hdd1) = gamma1*(baset_hc - temp_c0) ! Heating
1826  modeldailystate(gridiv, cmds_hdd2) = gamma2*(temp_c0 - baset_hc) ! Cooling
1827  ENDIF
1828 
1829  ! -- Save snow density and snow albedo info in InitialConditions to ModelDailyState array --
1830  modeldailystate(gridiv, cmds_snowdens(pavsurf)) = snowdenspaved
1831  modeldailystate(gridiv, cmds_snowdens(bldgsurf)) = snowdensbldgs
1832  modeldailystate(gridiv, cmds_snowdens(conifsurf)) = snowdensevetr
1833  modeldailystate(gridiv, cmds_snowdens(decidsurf)) = snowdensdectr
1834  modeldailystate(gridiv, cmds_snowdens(grasssurf)) = snowdensgrass
1835  modeldailystate(gridiv, cmds_snowdens(bsoilsurf)) = snowdensbsoil
1836  modeldailystate(gridiv, cmds_snowdens(watersurf)) = snowdenswater
1837 
1839 
1840  ! -------------------------------------------------------------------------
1841 
1842  ! Saving to ModelOutputData array -----------------------------------------
1843 
1844  ! -- Initial wetness status of each surface (above ground) --
1845  modeloutputdata(0, cmod_state(pavsurf), gridiv) = pavedstate
1846  modeloutputdata(0, cmod_state(bldgsurf), gridiv) = bldgsstate
1847  modeloutputdata(0, cmod_state(conifsurf), gridiv) = evetrstate
1848  modeloutputdata(0, cmod_state(decidsurf), gridiv) = dectrstate
1849  modeloutputdata(0, cmod_state(grasssurf), gridiv) = grassstate
1850  modeloutputdata(0, cmod_state(bsoilsurf), gridiv) = bsoilstate
1851  modeloutputdata(0, cmod_state(watersurf), gridiv) = waterstate
1852 
1853  ! -- Initial soil stores for each surface (below ground) --
1860  modeloutputdata(0, cmod_soilstate(watersurf), gridiv) = 0 ! No soil layer for water surface
1861 
1862  ! -- Initial liquid (melted) water for each surface --
1870 
1871  ! -- Initial snow water equivalent for each surface --
1879 
1880  ! -- Initial fraction of snow on each surface --
1881  modeloutputdata(0, cmod_snowfrac(pavsurf), gridiv) = snowfracpaved
1882  modeloutputdata(0, cmod_snowfrac(bldgsurf), gridiv) = snowfracbldgs
1883  modeloutputdata(0, cmod_snowfrac(conifsurf), gridiv) = snowfracevetr
1884  modeloutputdata(0, cmod_snowfrac(decidsurf), gridiv) = snowfracdectr
1885  modeloutputdata(0, cmod_snowfrac(grasssurf), gridiv) = snowfracgrass
1886  modeloutputdata(0, cmod_snowfrac(bsoilsurf), gridiv) = snowfracbsoil
1887  modeloutputdata(0, cmod_snowfrac(watersurf), gridiv) = snowfracwater
1888 
1889  icefrac = 0.2 !Estimated fraction of ice. Should be improved in the future
1890 
1891  ! At this point translate arrays to variables (needed for SUEWS_cal_RoughnessParameters)
1892  CALL suews_translate(gridiv, 0, 0)
1893 
1894  !Calculation of roughness parameters (N.B. uses porosity)
1895  IF (diagnose == 1) print *, 'calling in initial state: SUEWS_cal_RoughnessParameters'
1897  roughlenmommethod, sfr, &!input
1898  bldgh, evetreeh, dectreeh, &
1900  z0m_in, zdm_in, z, &
1901  planf, &!output
1902  zh, z0m, zdm, zzd)
1903 
1904  !=============================================================================
1905  ! If the run start day is at previous year, then calculate the number of days
1906  ! in that year.
1907 
1908  !First we need to know if the previous day given in initial conditions (id_prev) is
1909  !on previous year as this is needed in the initialization of DayofWeek matrix.
1910  !In this case switch is set to one for date calculations.
1911  IF (id_prev == 0) THEN !If id_prev = 0, means that the first modelled day is 1 Jan
1912  year_int = year_int - 1 !1) find the number of days on that year
1913  CALL leapyearcalc(year_int, id_prev) !2) set switch to 1 so that the code knows to change back to current year (switch=0)
1914  switch = 1
1915  ENDIF
1916 
1917  CALL day2month(id_prev, mb, date, seas, year_int, lat) !Calculate date information (mb = month, date = day,...)
1918  CALL day_of_week(date, mb, year_int, wd) !Calculate weekday of the previous day (wd) (1=Sun, ..., 7=Sat)
1919 
1920  !After the day in previous year switch is changed back to zero:
1921  ! ie not previous day anymore
1922  !Also the size of DayofWeek is from 0:NdaysinYear meaning
1923  !that in zero slot is the previous day information
1924  IF (switch == 1) THEN
1925  year_int = year_int + 1
1926  id_prev = 0
1927  switch = 0
1928  ENDIF
1929 
1930  ! DayofWeek(id_prev,1)=wd ! day of week
1931  ! DayofWeek(id_prev,2)=mb ! month
1932  ! DayofWeek(id_prev,3)=seas ! season (summer=1, winter=2) needed for accumulation
1933 
1934  ! in case next day goes to next year calculate again the date information for DayofWeek matrix.
1935  id_next = id_prev + 1
1936  IF (id_next > nofdaysthisyear) THEN
1937  id_next = 1
1938  year_int = year_int + 1
1939  switch = 1
1940  CALL errorhint(43, 'switch- years', notused, notused, notusedi)
1941  ENDIF
1942 
1943  CALL day2month(id_next, mb, date, seas, year_int, lat) !Calculate real date from doy
1944  CALL day_of_week(date, mb, year_int, wd) !Calculate weekday (1=Sun, ..., 7=Sat)
1945 
1946  IF (switch == 1) THEN
1947  iy = iy - 1
1948  switch = 0
1949  ENDIF
1950 
1951  ! DayofWeek(id_next,1)=wd ! day of week
1952  ! DayofWeek(id_next,2)=mb ! month
1953  ! DayofWeek(id_next,3)=seas ! season
1954 
1955  !=============================================================================
1956 
1957  !id=id_prev
1958  !it= 23 !!LastTimeOfDay
1959  IF (id_prev >= startdls .AND. id_prev <= enddls) THEN !Summertime
1960  dls = 1
1961  ELSE
1962  dls = 0
1963  ENDIF
1964 
1965  ! -----------------------------------------------------------------------
1966  ! Calculate daily water use if modelled (i.e. if WaterUseMethod = 0).
1967  ! Calculated from previous day information given in InitialConditions file
1968  CALL suews_cal_weekday( &
1969  iy, id, lat, & !input
1970  dayofweek_id) !output
1971 
1972  state_id = [pavedstate, bldgsstate, evetrstate, dectrstate, grassstate, bsoilstate, waterstate]
1975  CALL update_wateruse( &
1976  id, waterusemethod, dayofweek_id, lat, faut, hdd_id, &!input
1979  wuday_id) !output
1980 
1981  ! ---- AnOHM TS ---------------------
1982  ! initialize Bowen ratio
1983  ! Bo_grids(0,:)=2.
1984  ! mAH_grids(0,:)=25.
1985 
1986  ! -----------------------------------
1987 
1988  RETURN
1989 
1990 600 CALL errorhint(47, trim(fileinit), notused, notused, notusedi)
1991 601 CALL errorhint(48, trim(fileinit), notused, notused, ios_out)
1992 
1993 END SUBROUTINE initialstate
1994 
1995 ! ===========================================================================
1996 FUNCTION normalizevegchar(VegCol, Gridiv) RESULT(NormVegResult)
1998  USE allocatearray
1999  USE colnamesinputfiles
2000 
2001  IMPLICIT NONE
2002 
2003  INTEGER, DIMENSION(nvegsurf):: VegCol !Must be column numbers defined for veg surfaces only
2004  INTEGER:: Gridiv
2005  REAL(KIND(1d0)):: NormVegResult
2006  IF (surfacechar(gridiv, c_frevetr) + &
2007  surfacechar(gridiv, c_frdectr) + &
2008  surfacechar(gridiv, c_frgrass) == 0.) THEN ! prevent arithmetic error under a full impervious scenario
2009  normvegresult = 0.
2010  ELSE
2011  normvegresult = (surfacechar(gridiv, vegcol(ivconif))*surfacechar(gridiv, c_frevetr) + &
2012  surfacechar(gridiv, vegcol(ivdecid))*surfacechar(gridiv, c_frdectr) + &
2013  surfacechar(gridiv, vegcol(ivgrass))*surfacechar(gridiv, c_frgrass))/ &
2014  (surfacechar(gridiv, c_frevetr) + surfacechar(gridiv, c_frdectr) + surfacechar(gridiv, c_frgrass))
2015  END IF
2016 
2017  RETURN
2018 END FUNCTION normalizevegchar
2019 ! ===========================================================================
2020 
2021 !-------------------------------------------------------------------------
2022 SUBROUTINE nextinitial(GridName, year_int)
2023  ! Last modified HCW 24 May 2016
2024  ! Year of InitialConditions output file fixed. _EndofRun appended to files where the run finishes before the year end
2025  ! Last modified LJ 06 Jul 2015
2026  ! Initial conditions of SnowAlb added, densSnow changed to SnowDens
2027  ! Last modified HCW 03 Jul 2015
2028  ! Added initial conditions albEveTr0 and albGrass0
2029  ! Modified by HCW 21 Nov 2014
2030  ! Last day of year is not anymore the number of days on that year, but rather
2031  ! id == 1. Thus nofDaysThisYear was changed to 1. LJ 9/4/2015
2032  !------------------------------------------------------------------------
2033 
2034  USE allocatearray
2035  USE colnamesinputfiles
2037  USE data_in
2038  USE defaultnotused
2039  USE initial
2040  USE sues_data
2041  USE snowmod
2042  USE time
2043  USE initialcond
2044 
2045  IMPLICIT NONE
2046 
2047  CHARACTER(len=15)::GridName
2048  CHARACTER(len=4)::year_txt2
2049  INTEGER:: year_int2
2050  INTEGER:: year_int
2051  INTEGER:: ID_Prev_Out ! ID_Prev written to next Initial Conditions file
2052  INTEGER:: nofDaysThisYear_ForOutput !Added HCW 13 Jan 2017
2053 
2054  year = year_int !HCW added 21 Nov 2014
2055 
2056  ! Modified by HCW 24 May 2016
2057  IF (id == 1 .AND. iy == (year + 1)) THEN !if id = 1 and this is the first row of next year
2058  year_int2 = int(year + 1)
2059  WRITE (year_txt2, '(I4)') year_int2
2060  OPEN (57, file=trim(fileinputpath)//trim("InitialConditions")//trim(gridname)//'_'//trim(adjustl(year_txt2))//'.nml', err=200)
2061  nofdaysthisyear_foroutput = nofdaysthisyear
2062  ELSE
2063  year_int2 = int(year) !End of Run but not end of year
2064  WRITE (year_txt2, '(I4)') year_int2
2065  OPEN (57, file=trim(fileinputpath)//trim("InitialConditions")//trim(gridname)//'_'//trim(adjustl(year_txt2))// &
2066  '_EndofRun.nml', err=201)
2067  nofdaysthisyear_foroutput = id - 1
2068  ENDIF
2069  id_prev_out = (id - 1)
2070 
2071  !! If last time of day, then DailyState variables will have been updated so can write out arrays for id rather than id-1
2072  !if(it==23 .and. imin == (nsh_real-1)/nsh_real*60) then !!LastTimeofday
2073  ! id=id+1
2074  !endif
2075  WRITE (57, *) '&InitialConditions'
2076  WRITE (57, *) 'DaysSinceRain=', int(hdd_id(12))
2077  WRITE (57, *) 'Temp_C0=', hdd_id(9)
2078  !WRITE(57,*)'ID_Prev=',ID_Prev_Out !No longer included in initial conditions (HCW 13 Jan 2017)
2079  WRITE (57, *) 'GDD_1_0=', gdd_id(1)
2080  WRITE (57, *) 'GDD_2_0=', gdd_id(2)
2081  WRITE (57, *) 'LAIinitialEveTr=', lai_id(ivconif)
2082  WRITE (57, *) 'LAIinitialDecTr=', lai_id(ivdecid)
2083  WRITE (57, *) 'LAIinitialGrass=', lai_id(ivgrass)
2084  WRITE (57, *) 'AlbEveTr0=', albevetr_id
2085  WRITE (57, *) 'AlbDecTr0=', albdectr_id
2086  WRITE (57, *) 'AlbGrass0=', albgrass_id
2087  WRITE (57, *) 'DecidCap0=', decidcap_id
2088  WRITE (57, *) 'Porosity0=', porosity_id
2089  WRITE (57, *) 'SoilStorePavedState=', soilstore_id(pavsurf)
2090  WRITE (57, *) 'SoilStoreBldgsState=', soilstore_id(bldgsurf)
2091  WRITE (57, *) 'SoilStoreEveTrState=', soilstore_id(conifsurf)
2092  WRITE (57, *) 'SoilStoreDecTrState=', soilstore_id(decidsurf)
2093  WRITE (57, *) 'SoilStoreGrassState=', soilstore_id(grasssurf)
2094  WRITE (57, *) 'SoilStoreBSoilState=', soilstore_id(bsoilsurf)
2095  WRITE (57, *) 'PavedState=', state_id(pavsurf)
2096  WRITE (57, *) 'BldgsState=', state_id(bldgsurf)
2097  WRITE (57, *) 'EveTrState=', state_id(conifsurf)
2098  WRITE (57, *) 'DecTrState=', state_id(decidsurf)
2099  WRITE (57, *) 'GrassState=', state_id(grasssurf)
2100  WRITE (57, *) 'BSoilState=', state_id(bsoilsurf)
2101  WRITE (57, *) 'WaterState=', state_id(watersurf)
2102  ! Only write snow variables if snow part is running
2103  IF (snowuse == 1) THEN
2104  WRITE (57, *) 'SnowWaterPavedState=', snowwater(pavsurf)
2105  WRITE (57, *) 'SnowWaterBldgsState=', snowwater(bldgsurf)
2106  WRITE (57, *) 'SnowWaterEveTrState=', snowwater(conifsurf)
2107  WRITE (57, *) 'SnowWaterDecTrState=', snowwater(decidsurf)
2108  WRITE (57, *) 'SnowWaterGrassState=', snowwater(grasssurf)
2109  WRITE (57, *) 'SnowWaterBSoilState=', snowwater(bsoilsurf)
2110  WRITE (57, *) 'SnowWaterWaterState=', snowwater(watersurf)
2111  WRITE (57, *) 'SnowPackPaved=', snowpack(pavsurf)
2112  WRITE (57, *) 'SnowPackBldgs=', snowpack(bldgsurf)
2113  WRITE (57, *) 'SnowPackEveTr=', snowpack(conifsurf)
2114  WRITE (57, *) 'SnowPackDecTr=', snowpack(decidsurf)
2115  WRITE (57, *) 'SnowPackGrass=', snowpack(grasssurf)
2116  WRITE (57, *) 'SnowPackBSoil=', snowpack(bsoilsurf)
2117  WRITE (57, *) 'SnowPackWater=', snowpack(watersurf)
2118  WRITE (57, *) 'SnowFracPaved=', snowfrac(pavsurf)
2119  WRITE (57, *) 'SnowFracBldgs=', snowfrac(bldgsurf)
2120  WRITE (57, *) 'SnowFracEveTr=', snowfrac(conifsurf)
2121  WRITE (57, *) 'SnowFracDecTr=', snowfrac(decidsurf)
2122  WRITE (57, *) 'SnowFracGrass=', snowfrac(grasssurf)
2123  WRITE (57, *) 'SnowFracBSoil=', snowfrac(bsoilsurf)
2124  WRITE (57, *) 'SnowFracWater=', snowfrac(watersurf)
2125  WRITE (57, *) 'SnowDensPaved=', snowdens(pavsurf)
2126  WRITE (57, *) 'SnowDensBldgs=', snowdens(bldgsurf)
2127  WRITE (57, *) 'SnowDensEveTr=', snowdens(conifsurf)
2128  WRITE (57, *) 'SnowDensDecTr=', snowdens(decidsurf)
2129  WRITE (57, *) 'SnowDensGrass=', snowdens(grasssurf)
2130  WRITE (57, *) 'SnowDensBSoil=', snowdens(bsoilsurf)
2131  WRITE (57, *) 'SnowDensWater=', snowdens(watersurf)
2132  WRITE (57, *) 'SnowAlb0=', snowalb
2133  ENDIF
2134  ! WRITE(57,*)'BoInit=',BoInit
2135  WRITE (57, *) '/'
2136  CLOSE (57)
2137 
2138  IF (it == 23 .AND. imin == (nsh_real - 1)/nsh_real*60) THEN
2139  id = id - 1
2140  ENDIF
2141 
2142  RETURN
2143 
2144 200 CALL errorhint(49, trim("InitialConditions")//trim(gridname)// &
2145  '_'//trim(adjustl(year_txt2))//'.nml', notused, notused, notusedi)
2146 201 CALL errorhint(49, trim("InitialConditions")//trim(gridname)// &
2147  '_'//trim(adjustl(year_txt2))//'EoR.nml', notused, notused, notusedi)
2148 
2149 END SUBROUTINE nextinitial
2150 !-------------------------------------------------------------------------
2151 
2152 !=======================================================================
2153 !=======================================================================
2154 !This subroutine prepares a meteorological forcing file.
2155 
2156 SUBROUTINE suews_initializemetdata(lunit)
2158  USE allocatearray
2159  USE data_in
2160  USE sues_data
2161  USE time
2162  USE defaultnotused
2163  USE initial
2164 
2165  IMPLICIT NONE
2166 
2167  INTEGER::lunit, i, iyy !,RunNumber,NSHcounter
2168  REAL(KIND(1d0)), DIMENSION(24)::MetArray
2169  REAL(KIND(1d0)):: imin_prev, ih_prev, iday_prev, tstep_met, iy_only !For checks on temporal resolution of met data
2170 
2171  ! initialisation
2172  iy_only = 1
2173  ih_prev = 1
2174  imin_prev = 1
2175  iday_prev = 1
2176 
2177  !---------------------------------------------------------------
2178 
2179  !Open the file for reading and read the actual data
2180  !write(*,*) fileMet
2181  OPEN (lunit, file=trim(filemet), status='old', err=314)
2182  CALL skipheader(lunit, skipheadermet)
2183 
2184  ! Skip to the right place in the met file, depending on how many chunks have been read already
2185  IF (skippedlines > 0) THEN
2186  DO iyy = 1, skippedlines
2187  READ (lunit, *)
2188  ENDDO
2189  ENDIF
2190 
2191  ! Read in next chunk of met data and fill MetForcingData array with data for every timestep
2192  !NSHcounter = 1
2193  !write(*,*) 'ReadlinesMetdata:',ReadlinesMetdata
2194  DO i = 1, readlinesmetdata
2195  CALL metread(lunit, metarray, inputmetformat, ldown_option, netradiationmethod, &
2197  !DO iv=1,NSH
2198  ! MetForcingData(NSHcounter,1:24,GridCounter) = MetArray
2199  ! NSHcounter = NSHcounter + 1
2200  !ENDDO
2201  metforcingdata(i, 1:24, gridcounter) = metarray
2202  ! Check timestamp of met data file matches TSTEP specified in RunControl
2203  IF (i == 1) THEN
2204  imin_prev = metarray(4)
2205  ih_prev = metarray(3)
2206  iday_prev = metarray(2)
2207  iy_only = metarray(1)
2208  ELSEIF (i == 2) THEN
2209  tstep_met = ((metarray(4) + 60*metarray(3)) - (imin_prev + 60*ih_prev))*60 !tstep in seconds
2210  IF (tstep_met /= tstep_real .AND. metarray(2) == iday_prev) THEN
2211  CALL errorhint(39, 'TSTEP in RunControl does not match TSTEP of met data (DOY).', REAL(tstep, KIND(1d0)), tstep_met, &
2212  INT(metarray(2)))
2213  ENDIF
2214  ENDIF
2215 
2216  ! Check file only contains a single year --------------------------------------------
2217  ! Very last data point is allowed to be (should be) timestamped with following year
2218  IF (metarray(1) /= iy_only) THEN
2219  IF (metarray(1) == iy_only + 1 .AND. metarray(2) == 1 .AND. metarray(3) == 0 .AND. metarray(4) == 0) THEN
2220  !write(*,*) 'end of year - no problem'
2221  ELSE
2222  CALL errorhint(3, 'Problem in SUEWS_Initial: multiple years found in met forcing file.', &
2223  metarray(1), notused, notusedi)
2224  ENDIF
2225  ENDIF
2226 
2227  ENDDO
2228 
2229  CLOSE (lunit)
2230 
2231  RETURN
2232 
2233 314 CALL errorhint(11, trim(filemet), notused, notused, ios_out)
2234 
2235 END SUBROUTINE suews_initializemetdata
2236 !----------------------------------------------------------------------------------------------
2237 
2238 !====================================================================================
2239 SUBROUTINE checkinitial
2240  !Check the parameters in InitialConditions file.
2241  !Modified by HCW 04 Mar 2014, changed soilstore_id(is) checks to use names given in InitialConditions
2242  !Added by LJ in 8/2/2013
2243 
2244  USE allocatearray
2245  USE data_in
2246  USE defaultnotused
2247  USE initialcond
2248  USE snowmod
2249  USE time
2250 
2251  IMPLICIT NONE
2252 
2253  !real(kind(1d0)):: pTol !Precision tolerance for range checks
2254 
2255  IF (temp_c0 < (temp_c - 10) .OR. temp_c0 > (temp_c + 10)) THEN
2256  CALL errorhint(37, 'Temp_C0 very different to Tair.', temp_c0, temp_c, notusedi)
2257  ENDIF
2258 
2259  !Check more thoroughly if LAI values are OK. Need to treat different hemispheres as well as tropics separately.
2260  IF (lat > 40) THEN
2261  IF ((laiinitialevetr > laimin(conifsurf - 2) + 1 .AND. (id < 60 .OR. id > 330)) .OR. &
2262  (laiinitialevetr < laimax(conifsurf - 2) - 1 .AND. (id > 130 .AND. id < 244))) THEN
2263  CALL errorhint(37, 'Check LAIinitialEveTr in InitialConditions file', laiinitialevetr, laimin(conifsurf - 2), notusedi)
2264  ENDIF
2265  IF ((laiinitialdectr > laimin(decidsurf - 2) + 1 .AND. (id < 60 .OR. id > 330)) .OR. &
2266  (laiinitialdectr < laimax(decidsurf - 2) - 1 .AND. (id > 130 .AND. id < 244))) THEN
2267  CALL errorhint(37, 'Check LAIinitialDecTr in InitialConditions file', laiinitialdectr, laimin(decidsurf - 2), notusedi)
2268  ENDIF
2269  IF ((laiinitialgrass > laimin(grasssurf - 2) + 1 .AND. (id < 60 .OR. id > 330)) .OR. &
2270  (laiinitialgrass < laimax(grasssurf - 2) - 1 .AND. (id > 130 .AND. id < 244))) THEN
2271  CALL errorhint(37, 'Check LAIinitialGrass in InitialConditions file', laiinitialgrass, laimin(grasssurf - 2), notusedi)
2272  ENDIF
2273 
2274  ELSEIF (lat < -40) THEN
2275  IF ((laiinitialevetr < laimax(conifsurf - 2) - 1 .AND. (id < 60 .OR. id > 330)) .OR. &
2276  (laiinitialevetr > laimin(conifsurf - 2) + 1 .AND. (id > 130 .AND. id < 244))) THEN
2277  CALL errorhint(37, 'Check LAIinitialEveTr in InitialConditions file', laiinitialevetr, laimax(conifsurf - 2), notusedi)
2278  ENDIF
2279  IF ((laiinitialdectr > laimax(decidsurf - 2) - 1 .AND. (id < 60 .OR. id > 330)) .OR. &
2280  (laiinitialdectr > laimin(decidsurf - 2) + 1 .AND. (id > 130 .AND. id < 244))) THEN
2281  CALL errorhint(37, 'Check LAIinitialDecTr in InitialConditions file', laiinitialdectr, laimax(decidsurf - 2), notusedi)
2282  ENDIF
2283  IF ((laiinitialgrass < laimax(grasssurf - 2) - 1 .AND. (id < 60 .OR. id > 330)) .OR. &
2284  (laiinitialgrass > laimin(grasssurf - 2) + 1 .AND. (id > 130 .AND. id < 244))) THEN
2285  CALL errorhint(37, 'Check LAIinitialGrass in InitialConditions file', laiinitialgrass, laimax(grasssurf - 2), notusedi)
2286  ENDIF
2287 
2288  ELSEIF (lat < 10 .AND. lat > -10) THEN
2289 
2290  IF (laiinitialevetr < laimax(conifsurf - 2) - 0.5) THEN
2291  CALL errorhint(37, 'Check LAIinitialEveTr in InitialConditions file', laiinitialevetr, laimax(conifsurf - 2), notusedi)
2292  ENDIF
2293  IF (laiinitialdectr < laimax(decidsurf - 2) - 0.5) THEN
2294  CALL errorhint(37, 'Check LAIinitialDecTr in InitialConditions file', laiinitialdectr, laimax(decidsurf - 2), notusedi)
2295  ENDIF
2296  IF (laiinitialgrass < laimax(grasssurf - 2) - 0.5) THEN
2297  CALL errorhint(37, 'Check LAIinitialGrass in InitialConditions file', laiinitialgrass, laimax(grasssurf - 2), notusedi)
2298  ENDIF
2299 
2300  ENDIF
2301 
2302  !Soilstore check
2304  CALL errorhint(37, 'InitialCond: Check initial condition of building soil store.', &
2306  ENDIF
2308  CALL errorhint(37, 'InitialCond: Check initial condition of paved soil store.', &
2310  ENDIF
2312  CALL errorhint(37, 'InitialCond: Check initial condition of conif soil store.', &
2314  ENDIF
2316  CALL errorhint(37, 'InitialCond: Check initial condition of deciduous soil store.', &
2318  ENDIF
2320  CALL errorhint(37, 'InitialCond: Check initial condition of bare soil soil store.', &
2322  ENDIF
2324  CALL errorhint(37, 'InitialCond: Check initial condition of grass soil store.', &
2326  ENDIF
2327 
2328  !Snow stuff
2329  IF (snowuse == 1) THEN
2331  CALL errorhint(37, 'InitialCond: SnowWaterBldgsState', snowwaterbldgsstate, snowpackbldgs, notusedi)
2332  ENDIF
2334  CALL errorhint(37, 'InitialCond: SnowWaterPavedState', snowwaterpavedstate, snowpackpaved, notusedi)
2335  ENDIF
2337  CALL errorhint(37, 'InitialCond: SnowWaterEveTrstate', snowwaterevetrstate, snowpackevetr, notusedi)
2338  ENDIF
2340  CALL errorhint(37, 'InitialCond: SnowWaterDecTrState', snowwaterdectrstate, snowpackdectr, notusedi)
2341  ENDIF
2343  CALL errorhint(37, 'InitialCond: SnowWaterGrassState', snowwatergrassstate, snowpackgrass, notusedi)
2344  ENDIF
2346  CALL errorhint(37, 'InitialCond: SnowWaterGrassUnirState', snowwaterbsoilstate, snowpackbsoil, notusedi)
2347  ENDIF
2348  ENDIF
2349 
2350 END SUBROUTINE checkinitial
integer, dimension(5) c_internal_rhocp2_bldgs
integer, parameter ncolumnssnow
integer, dimension(nsurfincsnow) c_surf_thick2
integer, dimension(nsurf) c_soiltcode
integer inputmetformat
integer, dimension(5) c_surf_k4_bldgs
subroutine codematchdist(rr, CodeCol, codeColSameSurf)
integer, dimension(nvegsurf) c_theta_bioco2
integer, dimension(nvegsurf) c_resp_b
integer, parameter ncolumnswgwaterdist
real(kind(1d0)) evetreeh
integer keeptstepfilesout
integer, dimension(3) c_ie_a
real(kind(1d0)) soilstorebldgsstate
integer, dimension(5) c_wall_k5_bldgs
integer disaggmethodestm
integer, dimension(nsurfincsnow) c_ohmcode_swet
integer, dimension(nsurfincsnow) c_a3_swet
integer diagqn
real(kind(1d0)) baset_hc
real(kind(1d0)), dimension(nsurf) snowdens
integer, parameter ncolumnssiteselect
integer, dimension(nvegsurf) c_leafgp2
integer, dimension(nsurf) c_dreq
integer diagnosedisaggestm
real(kind(1d0)) halftimestep
real(kind(1d0)), dimension(:, :), allocatable water_coeff
integer, dimension(5) c_internal_thick2_bldgs
subroutine codematchprof(Gridiv, SurfaceCharCodeCol)
real(kind(1d0)), dimension(3) ie_m
subroutine inputheadercheck(FileName)
integer, dimension(nsurfincsnow) c_a2_sdry
integer, dimension(nsurf) c_snowlimpat
real(kind(1d0)), dimension(nsurf) icefrac
integer, dimension(nvegsurf) c_alpha_bioco2
subroutine codematchnonveg(rr, CodeCol)
real(kind(1d0)), dimension(nsurf) snowwater
integer nlinessoil
integer, parameter ncolumnsnonveg
integer, dimension(nvegsurf) c_leafop2
integer writedailystate
integer, dimension(5) c_alb_ibld_bldgs
integer, dimension(nsurf) c_wgtosoilstore
integer, dimension(nsurfincsnow) c_surf_k2
real(kind(1d0)), dimension(nsurf) state_id
real(kind(1d0)) snowpackbsoil
integer, dimension(nsurf) c_wgtowater
integer, dimension(nsurf) c_soilinfrate
integer, parameter ivgrass
integer, dimension(nsurf) c_wetthresh
integer, dimension(5) c_wall_thick3_bldgs
real(kind(1d0)), dimension(:, :), allocatable irrigation_coeff
integer, dimension(nsurf) c_soildepth
integer, dimension(3) c_surf_rhocp5_paved
integer, dimension(nsurf) c_snowlimrem
integer, dimension(nsurf) c_obssmdepth
integer nlinesestmcoefficients
integer, dimension(3) c_ie_m
real(kind(1d0)), dimension(nvegsurf) laimax
integer skipheadersiteinfo
integer nlinesprofiles
real(kind(1d0)), dimension(:, :), allocatable soil_coeff
integer resolutionfilesout
integer, dimension(nsurfincsnow) c_a3_wdry
integer, parameter ncolumnsveg
integer, dimension(3) c_surf_rhocp2_paved
subroutine codematchbiogen(Gridiv, SurfaceCharCodeCol)
integer, dimension(5) c_internal_thick4_bldgs
integer, dimension(nsurfincsnow) c_surf_rhocp5
integer diagnose
real(kind(1d0)) nan
integer, dimension(nvegsurf) c_beta_enh_bioco2
integer, dimension(5) c_wall_rhocp4_bldgs
integer, dimension(5) c_surf_thick1_bldgs
real(kind(1d0)) z
integer, parameter bsoilsurf
integer, dimension(nsurfincsnow) c_surf_thick3
integer, dimension(24) c_hrproftraffwe
real(kind(1d0)) snowalb
integer, dimension(24) c_hrproftraffwd
real(kind(1d0)) temp_c
integer keeptstepfilesin
real(kind(1d0)), dimension(nsurf) soilstore_id
real(kind(1d0)), dimension(:, :), allocatable estmcoefficients_coeff
integer c_tcriticheating_we
integer, dimension(nsurfincsnow) c_a2_swet
real(kind(1d0)) faibldg
integer, dimension(3) c_surf_thick4_paved
real(kind(1d0)), dimension(:, :), allocatable snow_coeff
real(kind(1d0)) notused
integer, dimension(nvegsurf) c_sddfull
character(len=20), dimension(ncolumnswgwaterdist) headerwgwaterdist_file
subroutine codematchconductance(rr, CodeCol)
integer, dimension(5) c_surf_thick4_bldgs
integer, dimension(nsurf) c_albmin
integer, dimension(nsurfincsnow) c_ohmcode_wwet
integer, dimension(5) c_internal_k4_bldgs
subroutine numberrows(FileN, SkipHeaderLines)
integer, dimension(24) cpr_hours
subroutine day2month(b, mb, md, seas, year, latitude)
integer, dimension(nsurfincsnow) c_surf_thick4
integer, parameter ncolumnsohmcoefficients
real(kind(1d0)) temp_c0
integer dls
real(kind(1d0)) year
integer, parameter ncolumnsestmcoefficients
real(kind(1d0)) soilrocks
integer, dimension(5) c_ch_ibld_bldgs
integer, dimension(nsurfincsnow) c_surf_rhocp2
subroutine leapyearcalc(year_int, nroDays)
integer snowuse
real(kind(1d0)) snowwaterbldgsstate
integer nlinesirrigation
real(kind(1d0)) zdm
real(kind(1d0)) planf
real(kind(1d0)) albevetr_id
integer multipleestmfiles
integer, parameter nsurf
integer, parameter ncolumnsirrigation
real(kind(1d0)) soilstorepavedstate
integer writeoutoption
integer, dimension(nsurfincsnow) c_estmcode
subroutine skipheader(lfn, skip)
integer, dimension(nsurfincsnow) c_a2_wwet
integer, dimension(nsurfincsnow) c_ohmcode_wdry
integer, dimension(nvegsurf) c_porositymin
real(kind(1d0)) snowpackdectr
integer c_frfossilfuel_heat
real(kind(1d0)) gdd_1_0
subroutine metread(lfn, MetArray, InputmetFormat, ldown_option, NetRadiationMethod, snowUse, SMDMethod, SoilDepthMeas, SoilRocks, SoilDensity, SmCap)
real(kind(1d0)), dimension(5) multrainamongnupperi
integer suppresswarnings
real(kind(1d0)) zh
integer, dimension(5) c_wall_thick4_bldgs
real(kind(1d0)) soilstoregrassstate
subroutine suews_initializemetdata(lunit)
subroutine codematchestm(Gridiv, is)
integer, dimension(5) c_internal_rhocp3_bldgs
real(kind(1d0)) snowwaterwaterstate
integer, parameter ncolumnsbiogen
real(kind(1d0)), dimension(:, :), allocatable surfacechar
real(kind(1d0)) h_maintain
integer emissionsmethod
integer, parameter ncolumnswater
integer nlinesveg
integer, dimension(nvegsurf) c_porositymax
integer, dimension(nvegsurf) c_laimax
character(len=20), dimension(ncolumnsprofiles) headerprofiles_file
integer, dimension(nsurf) c_drcoef2
character(len=20), dimension(ncolumnsirrigation) headerirrigation_file
real(kind(1d0)) snowwatergrassstate
integer, dimension(nsurf) c_obssmmax
real(kind(1d0)), dimension(nsurf) soilstorecap
subroutine codematchveg(rr, CodeCol)
integer multiplemetfiles
integer, dimension(5) c_wall_rhocp5_bldgs
integer startdls
real(kind(1d0)) zdm_in
real(kind(1d0)) snowpackbldgs
subroutine initialstate(GridName, year_int, Gridiv, NumberOfGrids)
integer, dimension(5) c_internal_k3_bldgs
character(len=20), dimension(ncolumnsanthropogenic) headeranthropogenic_file
integer nlinesanthropogenic
subroutine suews_translate(Gridiv, ir, iMB)
integer resolutionfilesinestm
real(kind(1d0)) faievetree
real(kind(1d0)) zzd
real(kind(1d0)) soildensity
real(kind(1d0)) snowwaterbsoilstate
integer, parameter conifsurf
integer, dimension(7) c_daywat
integer, dimension(5) c_surf_k3_bldgs
integer, dimension(nsurfincsnow) c_a1_sdry
integer, dimension(24) c_hrprofsnowcwd
integer, dimension(nsurfincsnow) c_a1_wdry
integer, dimension(nsurfincsnow) c_a2_wdry
integer diagqs
integer, dimension(nvegsurf) c_leafgp1
integer id
integer, dimension(5) c_wall_k2_bldgs
integer, dimension(24) c_hrprofwumanuwd
integer nlinesconductance
integer, dimension(5) c_internal_rhocp5_bldgs
integer kdownzen
real(kind(1d0)), dimension(12) hdd_id
integer, parameter ncolumnsconductance
integer nlinesohmcoefficients
subroutine initializesurfacecharacteristics(Gridiv, rr)
integer imin
real(kind(1d0)) snowwaterevetrstate
integer, dimension(3) c_surf_k2_paved
integer, dimension(24) c_hrprofwumanuwe
real(kind(1d0)) laiinitialdectr
subroutine codematchohm(Gridiv, is, SWWD)
subroutine nextinitial(GridName, year_int)
integer, dimension(5) c_internal_k5_bldgs
integer, dimension(5) c_em_ibld_bldgs
integer, dimension(nsurf) c_wgtopaved
real(kind(1d0)) porosity0
integer, dimension(nsurf) c_ksat
real(kind(1d0)) soildepthmeas
integer nlineswater
integer, dimension(24) c_hrprofsnowcwe
integer, dimension(7) c_daywatper
character(len=20), dimension(ncolumnssoil) headersoil_file
integer, dimension(nsurf) c_soildens
integer, dimension(5) c_surf_rhocp5_bldgs
real(kind(1d0)) dectreeh
character(len=150) fileinputpath
integer, dimension(nsurfincsnow) c_surf_rhocp1
integer, dimension(24) c_hrprofpopwd
subroutine codematchsoil(Gridiv, SurfaceCharCodeCol)
integer laicalcyes
integer, dimension(5) c_wall_rhocp2_bldgs
real(kind(1d0)) faut
real(kind(1d0)) lat
integer, dimension(nsurfincsnow) c_surf_k4
real(kind(1d0)), dimension(:, :), allocatable siteselect
integer, dimension(24) c_hrprofhumactivitywe
integer skipheadermet
integer, parameter grasssurf
real(kind(1d0)), dimension(:, :), allocatable ohmcoefficients_coeff
integer c_ahslopeheating_wd
subroutine codematchanthropogenic(rr, CodeCol)
integer, dimension(nvegsurf) c_laimin
real(kind(1d0)), dimension(:, :), allocatable anthropogenic_coeff
real(kind(1d0)) snowpackpaved
integer, dimension(nsurfincsnow) c_surf_rhocp3
real(kind(1d0)) smcap
real(kind(1d0)), dimension(:, :), allocatable modeldailystate
integer basetmethod
integer c_ahslopecooling_wd
integer c_frfossilfuel_nonheat
integer, dimension(3) c_surf_thick2_paved
integer iy
integer, dimension(nvegsurf) c_laieq
integer, dimension(3) c_surf_k1_paved
integer, dimension(nsurfincsnow) c_ohmthresh_wd
integer, dimension(nsurf) cmod_state
real(kind(1d0)), dimension(nsurf) snowfrac
real(kind(1d0)) snowpackgrass
subroutine codematchsnow(rr, CodeCol)
integer, dimension(5) c_wall_rhocp3_bldgs
integer, parameter ivconif
subroutine overallruncontrol
integer, dimension(5) c_surf_rhocp3_bldgs
integer roughlenheatmethod
integer, dimension(nvegsurf) c_min_res_bioco2
integer, dimension(nsurf) c_wgtograss
integer, dimension(nsurf) c_stormin
integer, dimension(24) c_hrprofhumactivitywd
integer, dimension(nsurf) c_soilstcap
character(len=20), dimension(ncolumnsbiogen) headerbiogen_file
integer skippedlines
real(kind(1d0)) tstep_real
character(len=150) filemet
integer, dimension(5) c_internal_rhocp4_bldgs
integer, dimension(5) c_surf_thick2_bldgs
integer, parameter ncolumnsanthropogenic
integer, parameter ncolumnssoil
real(kind(1d0)), dimension(:, :), allocatable biogen_coeff
integer, dimension(nsurf) c_wgtorunoff
integer, dimension(nsurf) c_chanohm
real(kind(1d0)) function normalizevegchar(VegCol, Gridiv)
real(kind(1d0)) faidectree
integer, dimension(5) c_nroom_bldgs
real(kind(1d0)), dimension(nvegsurf) laimin
integer nofdaysthisyear
integer, dimension(5) c_surf_rhocp4_bldgs
integer, dimension(nsurf) c_obssnrfrac
subroutine checkinitial
integer, dimension(nsurfincsnow) c_surf_thick5
integer raindisaggmethod
integer nlinessiteselect
integer, dimension(nsurf) c_cpanohm
integer c_tcriticcooling_we
integer, dimension(nsurf) c_albmax
character(len=20) filecode
real(kind(1d0)) albevetr0
integer nlinesnonveg
integer, dimension(24) c_hrprofwuautowd
character(len=20), dimension(ncolumnssnow) headersnow_file
integer, dimension(5) c_surf_rhocp1_bldgs
subroutine suews_cal_weekday(iy, id, lat, dayofWeek_id)
integer, dimension(5) c_surf_k2_bldgs
integer, dimension(3) c_surf_rhocp4_paved
real(kind(1d0)), dimension(:, :), allocatable wgwaterdist_coeff
subroutine readcoeff(FileName, nlines, ncolumns, HeaderFile, Coeff)
integer, dimension(nsurf) cmod_snowfrac
integer, dimension(3) c_surf_thick1_paved
real(kind(1d0)), dimension(3) ie_a
real(kind(1d0)) z0m_in
integer, dimension(3) c_surf_k5_paved
integer, dimension(5) c_internal_thick3_bldgs
real(kind(1d0)) albdectr0
integer, dimension(nsurf) c_wgtodectr
subroutine update_wateruse(id, WaterUseMethod, DayofWeek_id, lat, FrIrriAuto, HDD_id, state_id, soilstore_id, SoilStoreCap, H_maintain, Ie_a, Ie_m, Ie_start, Ie_end, DayWatPer, DayWat, WUDay_id)
real(kind(1d0)), dimension(nvegsurf) lai_id
integer, dimension(nsurf) c_stormax
integer evapmethod
integer cbluse
integer, dimension(nvegsurf) c_gsmax
integer nlinesbiogen
integer, dimension(nsurfincsnow) c_surf_k5
real(kind(1d0)) soilstorebsoilstate
character(len=20), dimension(ncolumnsnonveg) headernonveg_file
integer disaggmethod
integer, dimension(nsurf) c_statelimit
real(kind(1d0)), dimension(:, :), allocatable veg_coeff
integer, dimension(nsurf) cmod_snowwaterstate
subroutine day_of_week(DATE, MONTH, YEAR, DOW)
integer c_tcriticheating_wd
real(kind(1d0)) snowpackevetr
character(len=20), dimension(ncolumnsohmcoefficients) headerohmcoefficients_file
real(kind(1d0)) snowwaterpavedstate
character(len=20), dimension(ncolumnswater) headerwater_file
integer, dimension(24) c_hrprofenusewd
integer ldown_option
real(kind(1d0)) porosity_id
integer, dimension(5) c_surf_k1_bldgs
character(len=20), dimension(ncolumnsveg) headerveg_file
real(kind(1d0)) laiinitialevetr
real(kind(1d0)) snowalb0
real(kind(1d0)) soilstoredectrstate
integer, dimension(nvegsurf) c_leafop1
integer, dimension(nvegsurf) c_resp_a
integer, dimension(nsurfincsnow) c_a3_sdry
integer, dimension(nsurfincsnow) c_a1_wwet
integer, dimension(nsurf) cmod_snowpack
integer, dimension(5) c_wall_thick5_bldgs
real(kind(1d0)) albgrass_id
real(kind(1d0)) snowpackwater
integer nlinessnow
integer smdmethod
integer, dimension(nvegsurf) c_biogenco2code
integer nlineswgwaterdist
integer ohmincqf
real(kind(1d0)), dimension(nsurf) snowpack
integer, dimension(nsurfincsnow) c_ohmcode_sdry
integer, dimension(nvegsurf) c_basete
integer, dimension(nvegsurf) c_alpha_enh_bioco2
integer, dimension(5) c_internal_thick5_bldgs
integer, dimension(nsurfincsnow) c_a1_swet
integer, dimension(3) c_surf_thick3_paved
integer, dimension(5) c_wall_k1_bldgs
real(kind(1d0)), dimension(7) daywatper
real(kind(1d0)), dimension(nsurf) sfr
integer resolutionfilesin
real(kind(1d0)) laiinitialgrass
subroutine codematchestm_class(Gridiv, is, ii)
subroutine suews_cal_roughnessparameters(RoughLenMomMethod, sfr, bldgH, EveTreeH, DecTreeH, porosity_id, FAIBldg, FAIEveTree, FAIDecTree, z0m_in, zdm_in, Z, planF, Zh, z0m, zdm, ZZD)
integer, dimension(5) c_surf_rhocp2_bldgs
real(kind(1d0)) decidcap0
real(kind(1d0)) snowwaterdectrstate
integer netradiationmethod
real(kind(1d0)), dimension(:, :), allocatable nonveg_coeff
integer, dimension(nsurfincsnow) c_a3_wwet
real(kind(1d0)) nsh_real
real(kind(1d0)), dimension(:, :, :), allocatable metforcingdata
integer, dimension(5) multrainamongn
integer roughlenmommethod
integer waterusemethod
integer, dimension(nsurfincsnow) c_surf_k1
integer, dimension(nvegsurf) c_beta_bioco2
integer c_ahslopeheating_we
integer, dimension(nsurf) cmod_soilstate
integer, dimension(nsurf) c_wgtobldgs
integer rainamongn
integer, dimension(nsurf) c_wgtobsoil
real(kind(1d0)), dimension(9) wuday_id
integer, dimension(3) c_surf_rhocp1_paved
integer, dimension(3) c_surf_k3_paved
character(len=20), dimension(ncolumnssiteselect) headersiteselect_file
integer, dimension(nsurfincsnow) c_surf_thick1
real(kind(1d0)), dimension(:, :), allocatable conductance_coeff
real(kind(1d0)) tstepcount
integer, parameter ncolumnsprofiles
real(kind(1d0)) bldgh
integer it
integer, dimension(5) c_wall_k4_bldgs
integer, dimension(24) c_hrprofwuautowe
real(kind(1d0)) gdd_2_0
integer diagnosedisagg
integer c_ahslopecooling_we
integer, dimension(5) c_internal_k1_bldgs
integer, parameter decidsurf
real(kind(1d0)) z0m
integer, dimension(5) c_ch_iroof_bldgs
integer, dimension(5) c_surf_thick5_bldgs
integer, parameter pavsurf
integer, dimension(nsurf) cmds_snowdens
integer readlinesmetdata
character(len=20), dimension(ncolumnsestmcoefficients) headerestmcoefficients_file
integer, dimension(nsurf) c_wgtoevetr
real(kind(1d0)) soilstoreevetrstate
real(kind(1d0)) albgrass0
integer, dimension(nsurf) c_kkanohm
integer, dimension(5) c_internal_k2_bldgs
integer, dimension(nvegsurf) c_baset
integer, dimension(3) c_surf_rhocp3_paved
subroutine errorhint(errh, ProblemFile, VALUE, value2, valueI)
integer storageheatmethod
integer stabilitymethod
integer, dimension(24) c_hrprofenusewe
integer, dimension(5) c_wall_thick1_bldgs
integer nlines
real(kind(1d0)), dimension(:, :, :), allocatable modeloutputdata
integer, dimension(5) c_surf_k5_bldgs
integer, dimension(5) c_wall_k3_bldgs
integer, parameter bldgsurf
integer, parameter watersurf
integer, dimension(nsurf) c_drcoef1
character(len=20), dimension(ncolumnsconductance) headercond_file
integer, dimension(5) c_wall_thick2_bldgs
real(kind(1d0)), dimension(nvegsurf) gdd_id
integer, dimension(nvegsurf) c_gddfull
real(kind(1d0)) crwmax
integer multipleinitfiles
real(kind(1d0)), dimension(:, :), allocatable profiles_coeff
integer, dimension(5) c_internal_rhocp1_bldgs
character(len=150) fileoutputpath
character(len=150) filechoices
integer, dimension(24) c_hrprofpopwe
integer, dimension(nsurf) c_emis
integer, dimension(nsurfincsnow) c_surf_k3
real(kind(1d0)), dimension(7) daywat
integer, dimension(5) c_ch_iwall_bldgs
integer, dimension(nsurfincsnow) c_ohmthresh_sw
integer, dimension(nsurfincsnow) c_surf_rhocp4
subroutine codematchwater(rr, CodeCol)
integer gridcounter
integer c_tcriticcooling_wd
subroutine codematchirrigation(rr, CodeCol)
integer, dimension(5) c_wall_rhocp1_bldgs
real(kind(1d0)) albdectr_id
integer, dimension(5) c_surf_thick3_bldgs
integer, dimension(3) c_surf_k4_paved
integer, parameter ivdecid
integer, dimension(5) c_internal_thick1_bldgs
integer, dimension(3) c_surf_thick5_paved
real(kind(1d0)) decidcap_id