SUEWS API Site
Documentation of SUEWS source code
suews_ctrl_calculations.f95
Go to the documentation of this file.
1 !This subroutine does the actual calculations of the SUEWS code (mostly old SUEWS_Temporal).
2 !Made by LJ and HW Oct 2014
3 !Gives in the grid ID (Gridiv) and number of line in the met forcing data to be analyzed (ir)
4 !Last modification
5 !
6 !Last modification:
7 ! TS 02 May 2018 - added explict interfaces
8 ! LJ 15 Jun 2017 - Add parts where NonWaterFraction=0 is used as a divider so that the code won't crash with 100% water
9 ! TS 20 May 2017 - Add surface-level diagonostics: T2, Q2, U10
10 ! HCW 09 Dec 2016 - Add zenith and azimuth to output file
11 ! HCw 24 Aug 2016 - smd and state for each surface set to NAN in output file if surface does not exist.
12 ! - Added Fc to output file
13 ! HCW 21 Jul 2016 - Set soil variables to -999 in output when grid is 100% water surface.
14 ! HCW 29 Jun 2016 - Commented out StateDay and SoilMoistDay as creates jumps and should not be needed.
15 ! Would not work unless each met block consists of a whole day for each grid.
16 ! TS 09 Mar 2016 - Added AnOHM subroutine to calculate heat storage
17 ! HCW 10 Mar 2016 - Calculation of soil moisture deficit of vegetated surfaces added (vsmd)
18 ! LJ 2 Jan 2016 - Calculation of snow fraction moved from SUEWS_Calculations to SUEWS_Snow
19 ! HCW 12 Nov 2015 - Added z0m and zdm to output file
20 ! HCW 05 Nov 2015 - Changed Kawai et al. (2007) z0v calculation so VegFraction(veg+soil) rather than veg_fr(veg+soil+water) is used.
21 ! HCW 29 Jun 2015 - Added albEveTr and albGrass
22 ! HCW 25 Jun 2015 - Fixed bug in LAI calculation at year change.
23 ! - Changed AlbDec to use id value (not (id-1) value) to avoid issues at year change.
24 ! HCW 27 Apr 2015 - Correction to tot_chang_per_tstep calculation (water balance should now close)
25 ! HCW 16 Feb 2015 - Updated water balance calculations
26 ! - Corrected area-averaged calculations (soil moisture, drain, two versions of state with/out water)
27 ! - Replaced soilmoist_state variable with SoilState (as seems to be duplicate)
28 ! HCW 15 Jan 2015 - Added switch OHMIncQF to calculate QS with (1, default) or without (0) QF added to QSTAR
29 ! To do
30 ! - add iy and imin to output files (may impact LUMPS_RunoffFromGrid)
31 ! - phase out _per_interval water balance variables
32 ! - renormalise by NonWaterFraction where necessary
33 ! - Update Snow subroutines similarly in terms of water balance
34 !==================================================================
35 
36 SUBROUTINE suews_calculations(Gridiv, ir, iMB, irMax)
50  USE time, ONLY: iy, id, it, imin, isec, dectime, dt_since_start
51  USE allocatearray, ONLY: &
52  alb, &
58  tmin_id, &
59  tmax_id, &
60  lenday_id, &
61  sdd_id, &
62  hdd_id, &
65  icefrac, kkanohm, &
71  tair_av, &
72  dqndt, qn1_av, &
73  dqnsdt, qn1_s_av, &
79  wuday_id, &
84  dataoutbl
85  USE sues_data, ONLY: &
92  USE snowmod, ONLY: &
98  USE gis_data, ONLY: &
101  USE mod_z, ONLY: z, z0m_in, zdm_in
103  USE resist, ONLY: g1, g2, g3, g4, g5, g6, gsmodel, kmax, s1, s2, th, tl
105  USE suews_driver, ONLY: suews_cal_main
106  USE bluews_module, ONLY: cbl
107  USE moist, only: avcp, avdens, es_hpa, lv_j_kg
108 
109  IMPLICIT NONE
110 
111  INTEGER :: Gridiv
112  INTEGER :: ir
113  INTEGER :: iMB
114  INTEGER :: irMax
115 
116  !==================================================================
117 
118  !Translate all data to the variables used in the model calculations
119  IF (diagnose == 1) WRITE (*, *) 'Calling SUEWS_Translate...'
120  CALL suews_translate(gridiv, ir, imb)
121 
122  IF (diagnose == 1) print *, 'Calling SUEWS_cal_Main...'
123  CALL suews_cal_main( &
124  aerodynamicresistancemethod, ah_min, ahprof_24hr, ah_slope_cooling, & ! input&inout in alphabetical order
136  gddfull, gridiv, gsmodel, hdd_id, humactivity_24hr, &
147  qf0_beu, qf_a, qf_b, qf_c, &
148  qn1_obs, qs_obs, qf_obs, &
156  tmax_id, tmin_id, &
164  dailystateline)!output
165 
166  !============ update and write out SUEWS_cal_DailyState ===============
167  ! only works at the last timestep of a day
169  id, datetimeline, &!input
170  gridiv, numberofgrids, &
171  dailystateline, &
172  dataoutdailystate)!inout
173 
174  !============ write out results ===============
175  ! works at each timestep
176  CALL suews_update_output( &
177  snowuse, storageheatmethod, &!input
181 
182  ! NB: CBL disabled for the moment for interface improvement
183  ! NB: CBL be decoupled from SUEWS TS 10 Jun 2018
184 
185  IF (qh_choice == 1) THEN !use QH and QE from SUEWS
186  qhforcbl(gridiv) = dataoutlinesuews(9)
187  qeforcbl(gridiv) = dataoutlinesuews(10)
188  ELSEIF (qh_choice == 2) THEN !use QH and QE from LUMPS
189  qhforcbl(gridiv) = dataoutlinesuews(11)
190  qeforcbl(gridiv) = dataoutlinesuews(12)
191  ELSEIF (qh_choice == 3) THEN !use QH and QE from OBS
192  qhforcbl(gridiv) = qh_obs
193  qeforcbl(gridiv) = qe_obs
194  IF (qh_obs < -900 .OR. qe_obs < -900) THEN ! observed data has a problem
195 
196  CALL errorhint(22, 'Unrealistic observed qh or qe_value for CBL.', qh_obs, qe_obs, qh_choice)
197 
198  ENDIF
199  ENDIF
200  IF (cbluse >= 1) THEN ! If CBL is used, calculated Temp_C and RH are replaced with the obs.
201  IF (diagnose == 1) WRITE (*, *) 'Calling CBL...'
202 
203  ustar = dataoutlinesuews(55)
204  !ir=1 indicates first row of each met data block
205  CALL cbl(iy, id, it, imin, ir, gridiv, qh_choice, dectime, &
209 
210  ENDIF
211 
212  ! NB: SOLWEIG can be treated as a separate part:
213  ! NB: SOLWEIG is disabled for v2018a TS 10 Jun 2018
214  ! ===================SOLWEIG OUTPUT ========================================
215  ! IF (SOLWEIGuse==1) THEN
216  ! IF (OutInterval==imin) THEN
217  ! IF (RunForGrid==-999) THEN
218  ! IF(Diagnose==1) WRITE(*,*) 'Calling SOLWEIG_2014a_core...'
219  ! CALL SOLWEIG_2014a_core(iMB)
220  ! SolweigCount=SolweigCount+1
221  ! ELSE
222  ! IF (Gridiv == RunForGrid) THEN
223  ! IF(Diagnose==1) WRITE(*,*) 'Calling SOLWEIG_2014a_core...'
224  ! CALL SOLWEIG_2014a_core(iMB)
225  ! SolweigCount=SolweigCount+1
226  ! ENDIF
227  ! ENDIF
228  ! ENDIF
229  ! ELSE
230  ! SOLWEIGpoi_out=0 ! NB: turn off SOLWEIG for the moment
231  ! ENDIF
232  ! ===================SOLWEIG END================================
233 
234  IF (diagnose == 1) WRITE (*, *) 'Calling SUEWS_TranslateBack...'
235  CALL suews_translateback(gridiv, ir, irmax)
236 
237 END SUBROUTINE suews_calculations
real(kind(1d0)) minfcmetab
real(kind(1d0)) evetreeh
real(kind(1d0)), dimension(:, :), allocatable metforcingdata_grid
real(kind(1d0)) qn1_s_av
real(kind(1d0)) tau_r
real(kind(1d0)), dimension(nsurf+1) ohm_threshwd
real(kind(1d0)), dimension(nsurf+1) ohm_threshsw
integer diagqn
real(kind(1d0)), dimension(nsurf) snowdens
real(kind(1d0)) g1
integer numberofgrids
real(kind(1d0)) s2
real(kind(1d0)), dimension(nvegsurf) theta_bioco2
integer gsmodel
real(kind(1d0)), dimension(3) ie_m
real(kind(1d0)), dimension(nsurf) icefrac
real(kind(1d0)) ustar
real(kind(1d0)), dimension(nsurf) snowwater
real(kind(1d0)), dimension(:, :, :), allocatable dataoutestm
real(kind(1d0)) albmin_grass
real(kind(1d0)) g5
real(kind(1d0)) narp_emis_snow
real(kind(1d0)) snowfallcum
real(kind(1d0)) albmin_evetr
real(kind(1d0)), dimension(nsurf) state_id
real(kind(1d0)) pipecapacity
real(kind(1d0)) qn1_av
real(kind(1d0)) kmax
real(kind(1d0)), dimension(nvegsurf) laimax
real(kind(1d0)), dimension(2) t_critic_cooling
real(kind(1d0)), dimension(ncolumnsdataoutrsl - 5) dataoutlinersl
real(kind(1d0)) avrh
real(kind(1d0)), dimension(:, :, :), allocatable dataoutbl
real(kind(1d0)), dimension(2) qf_c
integer diagnose
real(kind(1d0)) snowlimpaved
real(kind(1d0)), dimension(2) popdensdaytime
real(kind(1d0)) z
real(kind(1d0)) th
real(kind(1d0)), dimension(nvegsurf) maxconductance
real(kind(1d0)) alt
real(kind(1d0)), dimension(0:23, 2) ahprof_24hr
real(kind(1d0)) snowalb
real(kind(1d0)) wu_m3
real(kind(1d0)) temp_c
real(kind(1d0)) tempmeltfact
real(kind(1d0)), dimension(nsurf) soilstore_id
real(kind(1d0)) preciplimit
real(kind(1d0)) faibldg
real(kind(1d0)), dimension(nvegsurf) alpha_enh_bioco2
real(kind(1d0)) avu1
real(kind(1d0)) basethdd
real(kind(1d0)), dimension(4, nvegsurf) laipower
subroutine suews_translateback(Gridiv, ir, irMax)
real(kind(1d0)), dimension(2) t_critic_heating
real(kind(1d0)), dimension(nsurf) snowpacklimit
real(kind(1d0)) internalwateruse_h
real(kind(1d0)), dimension(ncolumnsdataoutsuews - 5) dataoutlinesuews
real(kind(1d0)), dimension(2) ah_slope_heating
subroutine suews_update_dailystate(id, datetimeline, Gridiv, NumberOfGrids, DailyStateLine, dataOutDailyState)
real(kind(1d0)) albmax_evetr
real(kind(1d0)), dimension(nvegsurf) alpha_bioco2
real(kind(1d0)), dimension(2) ah_min
real(kind(1d0)) maxqfmetab
integer snowuse
real(kind(1d0)) albevetr_id
real(kind(1d0)), dimension(nsurf) kkanohm
real(kind(1d0)), dimension(nvegsurf) resp_a
real(kind(1d0)) g2
subroutine suews_update_output(SnowUse, storageheatmethod, ReadLinesMetdata, NumberOfGrids, ir, gridiv, datetimeLine, dataOutLineSUEWS, dataOutLineSnow, dataOutLineESTM, dataoutLineURSL, dataOutSUEWS, dataOutSnow, dataOutESTM, dataOutRSL)
integer isec
real(kind(1d0)) xsmd
real(kind(1d0)) tmax_id
integer emissionsmethod
real(kind(1d0)) snowfrac_obs
real(kind(1d0)) lv_j_kg
real(kind(1d0)), dimension(nsurf) soilstorecap
real(kind(1d0)) qf_obs
real(kind(1d0)), dimension(nvegsurf) sdd_id
real(kind(1d0)), dimension(27) dataoutlineestm
integer startdls
real(kind(1d0)) zdm_in
real(kind(1d0)) snowdensmin
integer aerodynamicresistancemethod
subroutine suews_translate(Gridiv, ir, iMB)
real(kind(1d0)) tair_av
real(kind(1d0)) faievetree
real(kind(1d0)) g3
real(kind(1d0)), dimension(ncolumnsdataoutsnow - 5) dataoutlinesnow
real(kind(1d0)) albmax_grass
real(kind(1d0)), dimension(nsurf) sathydraulicconduct
real(kind(1d0)), dimension(nsurf) statelimit
integer diagqs
real(kind(1d0)) co2pointsource
integer id
real(kind(1d0)), dimension(nvegsurf) gddfull
real(kind(1d0)) rainmaxres
real(kind(1d0)) ldown_obs
real(kind(1d0)), dimension(12) hdd_id
real(kind(1d0)) fcld_obs
real(kind(1d0)), dimension(2) fcef_v_kgkm
real(kind(1d0)) avcp
real(kind(1d0)) tau_f
real(kind(1d0)) lng
real(kind(1d0)) capmax_dec
real(kind(1d0)) dqnsdt
real(kind(1d0)), dimension(0:23, 2) popprof_24hr
integer, dimension(nvegsurf) laitype
real(kind(1d0)) raincover
integer imin
real(kind(1d0)) snowalbmax
real(kind(1d0)), dimension(0:23, 2) wuprofm_24hr
real(kind(1d0)), dimension(nvegsurf) resp_b
real(kind(1d0)), dimension(2) qf_a
real(kind(1d0)) pormax_dec
real(kind(1d0)), dimension(nsurf) chanohm
real(kind(1d0)) avkdn
real(kind(1d0)) dectreeh
real(kind(1d0)), dimension(:, :, :), allocatable dataoutdailystate
integer laicalcyes
real(kind(1d0)) lai_obs
real(kind(1d0)) faut
subroutine cbl(iy, id, it, imin, ir, Gridiv, qh_choice, dectime, Temp_C, Press_hPa, avkdn, avu1, avrh, avcp, avdens, es_hPa, lv_J_kg, nsh_real, tstep, UStar, psih, is, NumberOfGrids, qhforCBL, qeforCBL, ReadLinesMetdata, dataOutBL)
real(kind(1d0)) tmin_id
real(kind(1d0)) lat
real(kind(1d0)), dimension(nsurf) emis
real(kind(1d0)), dimension(nsurf) soildepth
real(kind(1d0)) qs_obs
real(kind(1d0)) psih
real(kind(1d0)) tau_a
real(kind(1d0)) radmeltfact
subroutine suews_cal_main(AerodynamicResistanceMethod, AH_MIN, AHProf_24hr, AH_SLOPE_Cooling, AH_SLOPE_Heating, alb, AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, alpha_bioCO2, alpha_enh_bioCO2, alt, avkdn, avRh, avU1, BaseT, BaseTe, BaseTHDD, beta_bioCO2, beta_enh_bioCO2, bldgH, CapMax_dec, CapMin_dec, chAnOHM, CO2PointSource, cpAnOHM, CRWmax, CRWmin, DayWat, DayWatPer, DecTreeH, Diagnose, DiagQN, DiagQS, DRAINRT, dt_since_start, dqndt, qn1_av, dqnsdt, qn1_s_av, EF_umolCO2perJ, emis, EmissionsMethod, EnEF_v_Jkm, endDLS, EveTreeH, FAIBldg, FAIDecTree, FAIEveTree, Faut, FcEF_v_kgkm, fcld_obs, FlowChange, FrFossilFuel_Heat, FrFossilFuel_NonHeat, G1, G2, G3, G4, G5, G6, GDD_id, GDDFull, Gridiv, gsModel, HDD_id, HumActivity_24hr, IceFrac, id, Ie_a, Ie_end, Ie_m, Ie_start, imin, InternalWaterUse_h, IrrFracConif, IrrFracDecid, IrrFracGrass, isec, it, EvapMethod, iy, kkAnOHM, Kmax, LAI_id, LAICalcYes, LAIMax, LAIMin, LAI_obs, LAIPower, LAIType, lat, lenDay_id, ldown_obs, lng, MaxConductance, MaxFCMetab, MaxQFMetab, SnowWater, MetForcingData_grid, MinFCMetab, MinQFMetab, min_res_bioCO2, NARP_EMIS_SNOW, NARP_TRANS_SITE, NetRadiationMethod, OHM_coef, OHMIncQF, OHM_threshSW, OHM_threshWD, PipeCapacity, PopDensDaytime, PopDensNighttime, PopProf_24hr, PorMax_dec, PorMin_dec, Precip, PrecipLimit, PrecipLimitAlb, Press_hPa, QF0_BEU, Qf_A, Qf_B, Qf_C, qn1_obs, qs_obs, qf_obs, RadMeltFact, RAINCOVER, RainMaxRes, resp_a, resp_b, RoughLenHeatMethod, RoughLenMomMethod, RunoffToWater, S1, S2, SatHydraulicConduct, SDDFull, SDD_id, sfr, SMDMethod, SnowAlb, SnowAlbMax, SnowAlbMin, SnowPackLimit, SnowDens, SnowDensMax, SnowDensMin, SnowfallCum, SnowFrac, SnowLimBldg, SnowLimPaved, snowFrac_obs, SnowPack, SnowProf_24hr, snowUse, SoilDepth, soilstore_id, SoilStoreCap, StabilityMethod, startDLS, state_id, StateLimit, StorageHeatMethod, StoreDrainPrm, SurfaceArea, Tair_av, tau_a, tau_f, tau_r, Tmax_id, Tmin_id, T_CRITIC_Cooling, T_CRITIC_Heating, Temp_C, TempMeltFact, TH, theta_bioCO2, timezone, TL, TrafficRate, TrafficUnits, TraffProf_24hr, Ts5mindata_ir, tstep, tstep_prev, veg_type, WaterDist, WaterUseMethod, WetThresh, wu_m3, WUDay_id, DecidCap_id, albDecTr_id, albEveTr_id, albGrass_id, porosity_id, WUProfA_24hr, WUProfM_24hr, xsmd, Z, z0m_in, zdm_in, datetimeLine, dataOutLineSUEWS, dataOutLineSnow, dataOutLineESTM, dataoutLineRSL, DailyStateLine)
real(kind(1d0)) irrfracgrass
real(kind(1d0)), dimension(0:23, 2) snowprof_24hr
integer iy
real(kind(1d0)), dimension(nsurf) snowfrac
integer roughlenheatmethod
real(kind(1d0)) g4
integer dt_since_start
real(kind(1d0)) frfossilfuel_heat
real(kind(1d0)) faidectree
real(kind(1d0)), dimension(nsurf+1, 4, 3) ohm_coef
real(kind(1d0)), dimension(nvegsurf) laimin
real(kind(1d0)) surfacearea
real(kind(1d0)), dimension(nsurf) wetthresh
real(kind(1d0)), dimension(:), allocatable qeforcbl
real(kind(1d0)), dimension(3) ie_a
real(kind(1d0)) z0m_in
real(kind(1d0)), dimension(:, :, :), allocatable dataoutsuews
real(kind(1d0)) qh_obs
real(kind(1d0)) narp_trans_site
real(kind(1d0)), dimension(nvegsurf) lai_id
integer evapmethod
integer cbluse
real(kind(1d0)), dimension(2) trafficrate
real(kind(1d0)), dimension(:, :, :), allocatable dataoutrsl
real(kind(1d0)) lenday_id
real(kind(1d0)) popdensnighttime
real(kind(1d0)) porosity_id
real(kind(1d0)) trafficunits
real(kind(1d0)), dimension(nsurf) cpanohm
real(kind(1d0)), dimension(2) qf_b
real(kind(1d0)) albmin_dectr
real(kind(1d0)), dimension(nvegsurf) basete
real(kind(1d0)) albgrass_id
real(kind(1d0)), dimension(:), allocatable qhforcbl
real(kind(1d0)) drainrt
real(kind(1d0)) minqfmetab
integer smdmethod
integer ohmincqf
real(kind(1d0)), dimension(nsurf) snowpack
real(kind(1d0)) maxfcmetab
subroutine suews_calculations(Gridiv, ir, iMB, irMax)
real(kind(1d0)), dimension(6, nsurf) storedrainprm
real(kind(1d0)) es_hpa
real(kind(1d0)), dimension(0:23, 2) traffprof_24hr
real(kind(1d0)), dimension(7) daywatper
real(kind(1d0)) dqndt
real(kind(1d0)), dimension(nsurf) sfr
real(kind(1d0)) snowlimbldg
integer netradiationmethod
real(kind(1d0)), dimension(0:23, 2) wuprofa_24hr
real(kind(1d0)) nsh_real
integer roughlenmommethod
real(kind(1d0)) g6
real(kind(1d0)), dimension(:, :, :), allocatable dataoutsnow
integer waterusemethod
real(kind(1d0)), dimension(9) wuday_id
real(kind(1d0)), dimension(nvegsurf) min_res_bioco2
real(kind(1d0)) precip
real(kind(1d0)) frfossilfuel_nonheat
real(kind(1d0)) crwmin
real(kind(1d0)) bldgh
integer it
real(kind(1d0)) snowdensmax
real(kind(1d0)) dectime
real(kind(1d0)) ef_umolco2perj
real(kind(1d0)), dimension(ncolumnsdataoutdailystate - 5) dailystateline
real(kind(1d0)), dimension(2) ah_slope_cooling
real(kind(1d0)), dimension(nsurf) alb
real(kind(1d0)) irrfracdecid
real(kind(1d0)) preciplimitalb
integer readlinesmetdata
real(kind(1d0)) pormin_dec
real(kind(1d0)) tl
real(kind(1d0)) avdens
real(kind(1d0)), dimension(nvegsurf) beta_enh_bioco2
real(kind(1d0)), dimension(0:23, 2) humactivity_24hr
real(kind(1d0)) qn1_obs
subroutine errorhint(errh, ProblemFile, VALUE, value2, valueI)
integer storageheatmethod
integer stabilitymethod
real(kind(1d0)) capmin_dec
real(kind(1d0)), dimension(nvegsurf) gdd_id
real(kind(1d0)), dimension(nvegsurf) sddfull
real(kind(1d0)), dimension(:), allocatable ts5mindata_ir
real(kind(1d0)) crwmax
real(kind(1d0)) enef_v_jkm
real(kind(1d0)), dimension(2) qf0_beu
real(kind(1d0)), dimension(nvegsurf) baset
real(kind(1d0)) press_hpa
real(kind(1d0)) snowalbmin
real(kind(1d0)), dimension(7) daywat
real(kind(1d0)) runofftowater
real(kind(1d0)) flowchange
real(kind(1d0)), dimension(nvegsurf) beta_bioco2
real(kind(1d0)), dimension(5) datetimeline
real(kind(1d0)) albdectr_id
real(kind(1d0)) irrfracconif
real(kind(1d0)) qe_obs
real(kind(1d0)), dimension(nsurf+1, nsurf - 1) waterdist
real(kind(1d0)) decidcap_id
real(kind(1d0)) timezone
real(kind(1d0)) albmax_dectr
real(kind(1d0)) s1