diff --git a/.gitignore b/.gitignore
index 29e7e907..ddcd2a35 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,67 +1,76 @@
-# Editors & IDEs
-.vscode
-.vs
-.idea
-
-# Jupyter Notebook
-.ipynb_checkpoints
-
-# Distribution / packaging
-build
-build/*
-_build
-_build/*
-.bzr
-develop-eggs
-dist
-dist/*
-downloads
-*.egg
-*.EGG
-*.egg-info
-eggs
-fake-eggs
-.installed.cfg
-.mr.developer.cfg
-parts
-
-# Byte-compiled / optimized / DLL files
-*.pyc
-__pycache__
-__pycache__/*
-*.pyo
-.svn
-
-# Unit test / coverage reports
-htmlcov
-.tox
-.tox/*
-.coverage
-.coverage/*
-*.ech
-*.log
-*.hbnhead
-*.units.dbf
-
-# Translations
-*.mo
-
-# Stashes, etc.
-stats.dat
-.ropeproject
-.hg
-*.tmp*
-tests/_LargeFileStash
-
-# Temporary files
-_TutorialData/
-
-# Specific files
-run.py
-tests/GLWACSO/HSP2results/hspp007.hdf
-tests/GLWACSO/HSPFresults/hspf006.HBN
-tests/GLWACSO/HSP2results/hspp007.uci
-tests/test_report_conversion.html
-tests/land_spec/hwmA51800.h5
-tests/testcbp/HSP2results/PL3_5250_0001.h5
-tests/testcbp/HSP2results/*.csv
+# Editors & IDEs
+.vscode
+.vs
+.idea
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# Distribution / packaging
+build
+build/*
+_build
+_build/*
+.bzr
+develop-eggs
+dist
+dist/*
+downloads
+*.egg
+*.EGG
+*.egg-info
+eggs
+fake-eggs
+.installed.cfg
+.mr.developer.cfg
+parts
+
+# Byte-compiled / optimized / DLL files
+*.pyc
+__pycache__
+__pycache__/*
+*.pyo
+.svn
+
+# Unit test / coverage reports
+htmlcov
+.tox
+.tox/*
+.coverage
+.coverage/*
+*.ech
+*.log
+*.hbnhead
+*.units.dbf
+
+# Translations
+*.mo
+
+# Stashes, etc.
+stats.dat
+.ropeproject
+.hg
+*.tmp*
+tests/_LargeFileStash
+
+# Temporary files
+_TutorialData/
+
+
+# Specific files
+run.py
+tests/GLWACSO/HSP2results/hspp007.hdf
+tests/GLWACSO/HSPFresults/hspf006.HBN
+tests/GLWACSO/HSP2results/hspp007.uci
+tests/test_report_conversion.html
+
+# Omit big files
+*.h5
+tests/land_spec/hwmA51800.h5
+tests/testcbp/HSP2results/PL3_5250_0001.h5
+tests/testcbp/HSP2results/*.csv
+tests/test10/HSP2results/test10.h5
+
+# R files
+.Rdata
+.Rhistory
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..8e917170
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,7 @@
+
Contribution Guidelines:
+The HSPsquared team appreciates your interest as we work to build a community of collaborators!
+
+Pull Requests:
+
+- Please submit pull requests into the Develop branch.
+- If your pull request relates to an Issue, please be sure to reference the issue in the description.
diff --git a/HSP2/GENER.py b/HSP2/GENER.py
index a07036ed..f2fc2c9f 100644
--- a/HSP2/GENER.py
+++ b/HSP2/GENER.py
@@ -9,7 +9,7 @@ class Gener():
Currently supports OPCODES 1-7, 9-26
"""
- def __init__(self, segment: str, siminfo: Dict, copies: Dict, geners: Dict, ddlinks: Dict, ddgener: Dict) -> None:
+ def __init__(self, segment: str, siminfo: Dict, copies: Dict, geners: Dict, ddlinks: Dict, ddmasslinks: Dict, tsin: Dict, ddgener: Dict) -> None:
self.ts_input_1 = pd.Series() # type: pd.Series
self. ts_input_2 = pd.Series() # type: pd.Series
self.ts_output = pd.Series() # type: pd.Series
@@ -36,20 +36,48 @@ def __init__(self, segment: str, siminfo: Dict, copies: Dict, geners: Dict, ddli
if link.SVOLNO in geners:
gener = geners[link.SVOLNO]
ts = gener.get_ts()
- if link.MFACTOR != 1: ts *= link.MFACTOR
+ if link.MFACTOR != 1 and link.MFACTOR != '': ts *= link.MFACTOR
else:
raise NotImplementedError(
f"Invalid SVOL. This GENER operation does not exist. '{link.SVOLNO}'")
else:
- raise NotImplementedError(f"Invalid SVOL. GENER module does not currently support reading TimeSeries for '{link.SVOL}'")
-
- if link.TGRPN == 'INPUT' and link.TMEMN == 'ONE':
- self.ts_input_1 = ts
- elif link.TGRPN == 'INPUT' and link.TMEMN == 'TWO':
- self.ts_input_2 = ts
- else:
- raise AttributeError(f"No attribute {link.TGRPN}{link.THEMN} to assign TimeSeries. Should be either 'INPUTONE' or 'INPUTWO'")
-
+ # get timeseries from other operations
+ if 'ONE' in tsin:
+ self.ts_input_1 = tsin['ONE']
+ if 'TWO' in tsin:
+ self.ts_input_2 = tsin['TWO']
+ if not 'ONE' in tsin and not 'TWO' in tsin:
+ raise NotImplementedError(f"Invalid SVOL for '{link.SVOLNO}'")
+
+ if link.SVOL == 'COPY' or link.SVOL == 'GENER':
+ if link.MLNO != '':
+ # also have to loop thru associated masslinks
+ mldata = ddmasslinks[link.MLNO]
+ for dat in mldata:
+ mfactor = dat.MFACTOR
+ afactr = link.AFACTR
+ factor = afactr * mfactor
+ ts = ts * factor
+ if dat.TMEMN == 'ONE':
+ self.ts_input_1 = ts
+ elif dat.TMEMN == 'TWO':
+ self.ts_input_2 = ts
+ else:
+ raise AttributeError(
+ f"No attribute {dat.THEMN} to assign TimeSeries. Should be either 'INPUTONE' or 'INPUTTWO'")
+ else:
+ if link.TGRPN == 'INPUT' and link.TMEMN == 'ONE':
+ self.ts_input_1 = ts
+ elif link.TGRPN == 'INPUT' and link.TMEMN == 'TWO':
+ self.ts_input_2 = ts
+ else:
+ raise AttributeError(f"No attribute {link.TGRPN}{link.THEMN} to assign TimeSeries. Should be either 'INPUTONE' or 'INPUTTWO'")
+
+ if self.opcode in [16,17,18,19,20,21,22,23]:
+ # need to have 2 input timeseries for these
+ if self.ts_input_1.size == 0 or self.ts_input_2.size == 0:
+ raise NotImplementedError(f"Need 2 input timeseries for this gener '{link.SVOLNO}'")
+
self._execute_gener()
def get_ts(self) -> pd.Series:
diff --git a/HSP2/HYDR.py b/HSP2/HYDR.py
index 0ea0bb68..2bade9f1 100644
--- a/HSP2/HYDR.py
+++ b/HSP2/HYDR.py
@@ -1,676 +1,706 @@
-''' Copyright (c) 2020 by RESPEC, INC.
-Author: Robert Heaphy, Ph.D.
-License: LGPL2
-Conversion of no category version of HSPF HRCHHYD.FOR into Python'''
-
-
-''' Development Notes:
- Categories not implimented in this version
- Irregation only partially implimented in this version
- Only English units currently supported
- FTABLE can come from WDM or UCI file based on FTBDSN 1 or 0
-'''
-
-
-from numpy import zeros, any, full, nan, array, int64, arange
-from pandas import DataFrame
-from math import sqrt, log10
-from numba import njit
-from numba.typed import List
-from HSP2.utilities import initm, make_numba_dict
-from HSP2.state import *
-from HSP2.SPECL import specl
-
-
-ERRMSGS =('HYDR: SOLVE equations are indeterminate', #ERRMSG0
- 'HYDR: extrapolation of rchtab will take place', #ERRMSG1
- 'HYDR: SOLVE trapped with an oscillating condition', #ERRMSG2
- 'HYDR: Solve did not converge', #ERRMSG3
- 'HYDR: Solve converged to point outside valid range') #ERRMSG4
-
-TOLERANCE = 0.001 # newton method max loops
-MAXLOOPS = 100 # newton method exit tolerance
-
-
-def hydr(io_manager, siminfo, uci, ts, ftables, state):
- ''' find the state of the reach/reservoir at the end of the time interval
- and the outflows during the interval
-
- CALL: hydr(store, general, ui, ts, specactions)
- store is the Pandas/PyTable open store
- general is a dictionary with simulation level infor (OP_SEQUENCE for example)
- ui is a dictionary with RID specific HSPF UCI like data
- ts is a dictionary with RID specific timeseries
- state is a dictionary that contains all dynamic code dictionaries such as:
- - specactions is a dictionary with all special actions
- '''
-
- steps = siminfo['steps'] # number of simulation points
- uunits = siminfo['units']
- nexits = int(uci['PARAMETERS']['NEXITS'])
-
- # units conversion constants, 1 ACRE is 43560 sq ft. assumes input in acre-ft
- VFACT = 43560.0
- AFACT = 43560.0
- if uunits == 2:
- # si units conversion constants, 1 hectare is 10000 sq m, assumes area input in hectares, vol in Mm3
- VFACT = 1.0e6
- AFACT = 10000.0
-
- u = uci['PARAMETERS']
- funct = array([u[name] for name in u.keys() if name.startswith('FUNCT')]).astype(int)[0:nexits]
- ODGTF = array([u[name] for name in u.keys() if name.startswith('ODGTF')]).astype(int)[0:nexits]
- ODFVF = array([u[name] for name in u.keys() if name.startswith('ODFVF')]).astype(int)[0:nexits]
-
- u = uci['STATES']
- colin = array([u[name] for name in u.keys() if name.startswith('COLIN')]).astype(float)[0:nexits]
- outdg = array([u[name] for name in u.keys() if name.startswith('OUTDG')]).astype(float)[0:nexits]
-
- # COLIND timeseries might come in as COLIND, COLIND0, etc. otherwise UCI default
- names = list(sorted([n for n in ts if n.startswith('COLIND')], reverse=True))
- df = DataFrame()
- for i,c in enumerate(ODFVF):
- df[i] = ts[names.pop()][0:steps] if c < 0 else full(steps, c)
- COLIND = df.to_numpy()
-
- # OUTDGT timeseries might come in as OUTDGT, OUTDGT0, etc. otherwise UCI default
- names = list(sorted([n for n in ts if n.startswith('OUTDG')], reverse=True))
- df = DataFrame()
- for i,c in enumerate(ODGTF):
- df[i] = ts[names.pop()][0:steps] if c > 0 else zeros(steps)
- OUTDGT = df.to_numpy()
-
- # generic SAVE table doesn't know nexits for output flows and rates
- if nexits > 1:
- u = uci['SAVE']
- for key in ('O', 'OVOL'):
- for i in range(nexits):
- u[f'{key}{i+1}'] = u[key]
- del u[key]
-
- # optional - defined, but can't used accidently
- for name in ('SOLRAD','CLOUD','DEWTEMP','GATMP','WIND'):
- if name not in ts:
- ts[name] = full(steps, nan)
-
- # optional timeseries
- for name in ('IVOL','POTEV','PREC'):
- if name not in ts:
- ts[name] = zeros(steps)
- ts['CONVF'] = initm(siminfo, uci, 'VCONFG', 'MONTHLY_CONVF', 1.0)
-
- # extract key columns of specified FTable for faster access (1d vs. 2d)
- rchtab = ftables[f"{uci['PARAMETERS']['FTBUCI']}"]
- #rchtab = store[f"FTABLES/{uci['PARAMETERS']['FTBUCI']}"]
- ts['volumeFT'] = rchtab['Volume'].to_numpy() * VFACT
- ts['depthFT'] = rchtab['Depth'].to_numpy()
- ts['sareaFT'] = rchtab['Area'].to_numpy() * AFACT
- rchtab = rchtab.to_numpy()
-
- ui = make_numba_dict(uci) # Note: all values coverted to float automatically
- ui['steps'] = steps
- ui['delt'] = siminfo['delt']
- ui['nexits'] = nexits
- ui['errlen'] = len(ERRMSGS)
- ui['nrows'] = rchtab.shape[0]
- ui['nodfv'] = any(ODFVF)
- ui['uunits'] = uunits
-
- # Numba can't do 'O' + str(i) stuff yet, so do it here. Also need new style lists
- Olabels = List()
- OVOLlabels = List()
- for i in range(nexits):
- Olabels.append(f'O{i+1}')
- OVOLlabels.append(f'OVOL{i+1}')
-
- # state_info is some generic things about the simulation
- state_info = Dict.empty(key_type=types.unicode_type, value_type=types.unicode_type)
- state_info['operation'], state_info['segment'], state_info['activity'] = state['operation'], state['segment'], state['activity']
- state_info['domain'], state_info['state_step_hydr'] = state['domain'], state['state_step_hydr']
- hsp2_local_py = state['hsp2_local_py']
- # It appears necessary to load this here, instead of from main.py, otherwise,
- # _hydr_() does not recognize the function state_step_hydr()?
- if (hsp2_local_py != False):
- from hsp2_local_py import state_step_hydr
- else:
- from HSP2.state_fn_defaults import state_step_hydr
- # must split dicts out of state Dict since numba cannot handle mixed-type nested Dicts
- state_ix, dict_ix, ts_ix = state['state_ix'], state['dict_ix'], state['ts_ix']
- state_paths = state['state_paths']
- # initialize the hydr paths in case they don't already reside here
- hydr_init_ix(state_ix, state_paths, state['domain'])
-
- ###########################################################################
- # specactions - special actions code TBD
- ###########################################################################
- specactions = make_numba_dict(state['specactions']) # Note: all values coverted to float automatically
-
- ###########################################################################
- # Do the simulation with _hydr_()
- ###########################################################################
- errors = _hydr_(ui, ts, COLIND, OUTDGT, rchtab, funct, Olabels, OVOLlabels, state_info, state_paths, state_ix, dict_ix, ts_ix, specactions, state_step_hydr) # run reaches simulation code
- ###########################################################################
-
- if 'O' in ts: del ts['O']
- if 'OVOL' in ts: del ts['OVOL']
-
- # save initial outflow(s) from reach:
- uci['PARAMETERS']['ROS'] = ui['ROS']
- for i in range(nexits):
- uci['PARAMETERS']['OS'+str(i+1)] = ui['OS'+str(i+1)]
-
- return errors, ERRMSGS
-
-
-@njit(cache=True)
-def _hydr_(ui, ts, COLIND, OUTDGT, rowsFT, funct, Olabels, OVOLlabels, state_info, state_paths, state_ix, dict_ix, ts_ix, specactions, state_step_hydr):
- errors = zeros(int(ui['errlen'])).astype(int64)
-
- steps = int(ui['steps']) # number of simulation steps
- delts = ui['delt'] * 60.0 # seconds in simulation interval
- uunits = ui['uunits']
- nrows = int(ui['nrows'])
- nexits = int(ui['nexits'])
- AUX1FG = int(ui['AUX1FG']) # True means DEP, SAREA will be computed
- AUX2FG = int(ui['AUX2FG'])
- AUX3FG = int(ui['AUX3FG'])
- LKFG = int(ui['LKFG']) # flag, 1:lake, 0:stream
- length = ui['LEN'] * 5280.0 # length of reach, in feet
- if uunits == 2:
- length = ui['LEN'] * 1000.0 # length of reach, in meters
- DB50 = ui['DB50'] / 12.0 # mean diameter of bed material
- if uunits == 2:
- DB50 = ui['DB50'] / 40.0 # mean diameter of bed material
- DELTH = ui['DELTH']
- stcor = ui['STCOR']
-
- # units conversion constants, 1 ACRE is 43560 sq ft. assumes input in acre-ft
- VFACT = 43560.0
- AFACT = 43560.0
- LFACTA = 1.0
- SFACTA = 1.0
- TFACTA = 1.0
- # physical constants (English units)
- GAM = 62.4 # density of water
- GRAV = 32.2 # gravitational acceleration
- AKAPPA = 0.4 # von karmen constant
- if uunits == 2:
- # si units conversion constants, 1 hectare is 10000 sq m, assumes area input in hectares, vol in Mm3
- VFACT = 1.0e6
- AFACT = 10000.0
- # physical constants (English units)
- GAM = 9806. # density of water
- GRAV = 9.81 # gravitational acceleration
-
- volumeFT = ts['volumeFT']
- depthFT = ts['depthFT']
- sareaFT = ts['sareaFT']
-
- nodfv = ui['nodfv']
- ks = ui['KS']
- coks = 1 - ks
- facta1 = 1.0 / (coks * delts)
-
- # MAIN loop Initialization
- IVOL = ts['IVOL'] * VFACT # or sum civol, zeros if no inflow ???
- POTEV = ts['POTEV'] / 12.0
- PREC = ts['PREC'] / 12.0
- CONVF = ts['CONVF']
- convf = CONVF[0]
-
- # faster to preallocate arrays - like MATLAB)
- o = zeros(nexits)
- odz = zeros(nexits)
- ovol = zeros(nexits)
- oseff = zeros(nexits)
- od1 = zeros(nexits)
- od2 = zeros(nexits)
- outdgt = zeros(nexits)
- colind = zeros(nexits)
-
- outdgt[:] = OUTDGT[0,:]
- colind[:] = COLIND[0,:]
-
- # numba limitation, ts can't have both 1-d and 2-d arrays in save Dict
- O = zeros((steps, nexits))
- OVOL = zeros((steps, nexits))
-
- ts['PRSUPY'] = PRSUPY = zeros(steps)
- ts['RO'] = RO = zeros(steps)
- ts['ROVOL'] = ROVOL = zeros(steps)
- ts['VOL'] = VOL = zeros(steps)
- ts['VOLEV'] = VOLEV = zeros(steps)
- ts['IRRDEM'] = IRRDEM = zeros(steps)
- if AUX1FG:
- ts['DEP'] = DEP = zeros(steps)
- ts['SAREA'] = SAREA = zeros(steps)
- ts['USTAR'] = USTAR = zeros(steps)
- ts['TAU'] = TAU = zeros(steps)
- ts['AVDEP'] = AVDEP = zeros(steps)
- ts['AVVEL'] = AVVEL = zeros(steps)
- ts['HRAD'] = HRAD = zeros(steps)
- ts['TWID'] = TWID = zeros(steps)
-
- zeroindex = fndrow(0.0, volumeFT) #$1126-1127
- topvolume = volumeFT[-1]
-
- vol = ui['VOL'] * VFACT # hydr-init, initial volume of water
- if vol >= topvolume:
- errors[1] += 1 # ERRMSG1: extrapolation of rchtab will take place
-
- # find row index that brackets the VOL
- indx = fndrow(vol, volumeFT)
- if nodfv: # simple interpolation, the hard way!!
- v1 = volumeFT[indx]
- v2 = volumeFT[indx+1]
- rod1,od1[:] = demand(v1, rowsFT[indx, :], funct, nexits, delts, convf, colind, outdgt)
- rod2,od2[:] = demand(v2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
- a1 = (v2 - vol) / (v2 - v1)
- o[:] = a1 * od1[:] + (1.0 - a1) * od2[:]
- ro = (a1 * rod1) + ((1.0 - a1) * rod2)
- else:
- ro,o[:] = demand(vol, rowsFT[indx,:], funct, nexits, delts, convf, colind, outdgt) #$1159-1160
-
- # back to PHYDR
- if AUX1FG >= 1:
- dep, stage, sarea, avdep, twid, hrad = auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor, AUX1FG, errors) # initial
-
- # hydr-irrig
- irexit = int(ui['IREXIT']) -1 # irexit - exit number for irrigation withdrawals, 0 based ???
- #if irexit >= 1:
- irminv = ui['IRMINV']
- rirwdl = 0.0
- #rirdem = 0.0
- #rirsht = 0.0
- irrdem = 0.0
-
- # store initial outflow from reach:
- ui['ROS'] = ro
- for index in range(nexits):
- ui['OS' + str(index + 1)] = o[index]
-
- # other initial vars
- rovol = 0.0
- volev = 0.0
- IVOL0 = ts['IVOL'] # the actual inflow in simulation native units
- # prepare for dynamic state
- hydr_ix = hydr_get_ix(state_ix, state_paths, state_info['domain'])
- # these are integer placeholders faster than calling the array look each timestep
- o1_ix, o2_ix, o3_ix, ivol_ix = hydr_ix['O1'], hydr_ix['O2'], hydr_ix['O3'], hydr_ix['IVOL']
- ro_ix, rovol_ix, volev_ix, vol_ix = hydr_ix['RO'], hydr_ix['ROVOL'], hydr_ix['VOLEV'], hydr_ix['VOL']
- # handle varying length outdgt
- out_ix = arange(nexits)
- if nexits > 0:
- out_ix[0] = o1_ix
- if nexits > 1:
- out_ix[1] = o2_ix
- if nexits > 2:
- out_ix[2] = o3_ix
- # HYDR (except where noted)
- for step in range(steps):
- # call specl
- specl(ui, ts, step, state_info, state_paths, state_ix, specactions)
- convf = CONVF[step]
- outdgt[:] = OUTDGT[step, :]
- colind[:] = COLIND[step, :]
- roseff = ro
- oseff[:] = o[:]
- # set state_ix with value of local state variables and/or needed vars
- # Note: we pass IVOL0, not IVOL here since IVOL has been converted to different units
- state_ix[ro_ix], state_ix[rovol_ix] = ro, rovol
- di = 0
- for oi in range(nexits):
- state_ix[out_ix[oi]] = outdgt[oi]
- state_ix[vol_ix], state_ix[ivol_ix] = vol, IVOL0[step]
- state_ix[volev_ix] = volev
- # Execute dynamic code if enabled
- if (state_info['state_step_hydr'] == 'enabled'):
- state_step_hydr(state_info, state_paths, state_ix, dict_ix, ts_ix, hydr_ix, step)
- # Do write-backs for editable STATE variables
- # OUTDGT is writeable
- for oi in range(nexits):
- outdgt[oi] = state_ix[out_ix[oi]]
- # IVOL is writeable.
- # Note: we must convert IVOL to the units expected in _hydr_
- # maybe routines should do this, and this is not needed (but pass VFACT in state)
- IVOL[step] = state_ix[ivol_ix] * VFACT
- # vols, sas variables and their initializations not needed.
- if irexit >= 0: # irrigation exit is set, zero based number
- if rirwdl > 0.0: # equivalent to OVOL for the irrigation exit
- vol = irminv if irminv > vol - rirwdl else vol - rirwdl
- if vol >= volumeFT[-1]:
- errors[1] += 1 # ERRMSG1: extrapolation of rchtab will take place
-
- # DISCH with hydrologic routing
- indx = fndrow(vol, volumeFT) # find row index that brackets the VOL
- vv1 = volumeFT[indx]
- rod1,od1[:] = demand(vv1, rowsFT[indx, :], funct, nexits, delts, convf, colind, outdgt)
- vv2 = volumeFT[indx+1]
- rod2,od2[:] = demand(vv2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
- aa1 = (vv2 - vol) / (vv2 - vv1)
- ro = (aa1 * rod1) + ((1.0 - aa1) * rod2)
- o[:] = (aa1 * od1[:]) + ((1.0 - aa1) * od2[:])
-
- # back to HYDR
- if AUX1FG >= 1: # recompute surface area and depth
- dep, stage, sarea, avdep, twid, hrad = auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor,
- AUX1FG, errors)
- else:
- irrdem = 0.0
- #o[irexit] = 0.0 #???? not used anywhere, check if o[irexit]
-
- prsupy = PREC[step] * sarea
- if uunits == 2:
- prsupy = PREC[step] * sarea / 3.281
- volt = vol + IVOL[step] + prsupy
- volev = 0.0
- if AUX1FG: # subtract evaporation
- volpev = POTEV[step] * sarea
- if uunits == 2:
- volpev = POTEV[step] * sarea / 3.281
- if volev >= volt:
- volev = volt
- volt = 0.0
- else:
- volev = volpev
- volt -= volev
-
- # ROUTE/NOROUT calls
- # common code
- volint = volt - (ks * roseff * delts) # find intercept of eq 4 on vol axis
- if volint < (volt * 1.0e-5):
- volint = 0.0
- if volint <= 0.0: # case 3 -- no solution to simultaneous equations
- indx = zeroindex
- vol = 0.0
- ro = 0.0
- o[:] = 0.0
- rovol = volt
-
- if roseff > 0.0: # numba limitation, cant combine into one line
- ovol[:] = (rovol/roseff) * oseff[:]
- else:
- ovol[:] = rovol / nexits
-
- else: # case 1 or 2
- oint = volint * facta1 # == ointsp, so ointsp variable dropped
- if nodfv:
- # ROUTE
- rodz,odz[:] = demand(0.0, rowsFT[zeroindex,:], funct, nexits, delts, convf, colind, outdgt)
- if oint > rodz:
- # SOLVE - case 1-- outflow demands can be met in full
- # premov will be used to check whether we are in a trap, arbitrary value
- premov = -20
- move = 10
-
- vv1 = volumeFT[indx]
- rod1,od1[:] = demand(vv1, rowsFT[indx, :], funct, nexits, delts, convf,colind, outdgt)
- vv2 = volumeFT[indx+1]
- rod2,od2[:] = demand(vv2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
-
- while move != 0:
- facta2 = rod1 - rod2
- factb2 = vv2 - vv1
- factc2 = vv2 * rod1 - vv1 * rod2
- det = facta1 * factb2 - facta2
- if det <= 0.0:
- det = 0.0001
- errors[0] += 1 # ERRMSG0: SOLVE is indeterminate
-
- vol = max(0.0, (oint * factb2 - factc2 ) / det)
- if vol > vv2:
- if indx >= nrows-2:
- if vol > topvolume:
- errors[1] += 1 # ERRMSG1: extrapolation of rchtab will take place
- move = 0
- else:
- move = 1
- indx += 1
- vv1 = vv2
- od1[:] = od2[:]
- rod1 = rod2
- vv2 = volumeFT[indx+1]
- rod2,od2[:] = demand(vv2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
- elif vol < vv1:
- indx -= 1
- move = -1
- vv2 = vv1
- od2[:] = od1[:]
- rod2 = rod1
- vv1 = volumeFT[indx]
- rod1,od1[:] = demand(vv1, rowsFT[indx,:], funct, nexits, delts, convf, colind, outdgt)
- else:
- move = 0
-
- # check whether algorithm is in a trap, yo-yoing back and forth
- if move + premov == 0:
- errors[2] += 1 # ERRMSG2: oscillating trap
- move = 0
- premov = move
-
- ro = oint - facta1 * vol
- if vol < 1.0e-5:
- ro = oint
- vol = 0.0
- if ro < 1.0e-10:
- ro = 0.0
- if ro <= 0.0:
- o[:] = 0.0
- else:
- diff = vol - vv1
- factr = 0.0 if diff < 0.01 else diff / (vv2 - vv1)
- o[:] = od1[:] + (od2[:] - od1[:]) * factr
- else:
- # case 2 -- outflow demands cannot be met in full
- ro = 0.0
- for i in range(nexits):
- tro = ro + odz[i]
- if tro <= oint:
- o[i] = odz[i]
- ro = tro
- else:
- o[i] = oint - ro
- ro = oint
- vol = 0.0
- indx = zeroindex
- else:
- # NOROUT
- rod1,od1[:] = demand(vol, rowsFT[indx,:], funct, nexits, delts, convf, colind, outdgt)
- if oint >= rod1: #case 1 -outflow demands are met in full
- ro = rod1
- vol = volint - coks * ro * delts
- if vol < 1.0e-5:
- vol = 0.0
- o[:] = od1[:]
- else: # case 2 -outflow demands cannot be met in full
- ro = 0.0
- for i in range(nexits):
- tro = ro + odz[i]
- if tro <= oint:
- o[i] = odz[i]
- ro = tro
- else:
- o[i] = oint - ro
- ro = oint
- vol = 0.0
- indx = zeroindex
-
- # common ROUTE/NOROUT code
- # an irrigation demand was made before routing
- if (irexit >= 0) and (irrdem > 0.0): # an irrigation demand was made before routing
- oseff[irexit] = irrdem
- o[irexit] = irrdem
- roseff += irrdem
- ro += irrdem
- IRRDEM[step] = irrdem
-
- # estimate the volumes of outflow
- ovol[:] = (ks * oseff[:] + coks * o[:]) * delts
- rovol = (ks * roseff + coks * ro) * delts
-
- # HYDR
- if nexits > 1:
- O[step,:] = o[:] * SFACTA * LFACTA
- OVOL[step,:] = ovol[:] / VFACT
- PRSUPY[step] = prsupy / VFACT
- RO[step] = ro * SFACTA * LFACTA
- ROVOL[step] = rovol / VFACT
- VOLEV[step] = volev / VFACT
- VOL[step] = vol / VFACT
-
- if AUX1FG: # compute final depth, surface area
- if vol >= topvolume:
- errors[1] += 1 # ERRMSG1: extrapolation of rchtab
- indx = fndrow(vol, volumeFT)
- dep, stage, sarea, avdep, twid, hrad = auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor, AUX1FG, errors)
- DEP[step] = dep
- SAREA[step] = sarea / AFACT
-
- if vol > 0.0 and sarea > 0.0:
- twid = sarea / length
- avdep = vol / sarea
- elif AUX1FG == 2:
- twid = sarea / length
- avdep = 0.0
- else:
- twid = 0.0
- avdep = 0.0
-
- if AUX2FG:
- avvel = (length * ro / vol) if vol > 0.0 else 0.0
- if AUX3FG:
- if avdep > 0.0:
- # SHEAR; ustar (bed shear velocity), tau (bed shear stress)
- if LKFG: # flag, 1:lake, 0:stream
- ustar = avvel / (17.66 + (log10(avdep / (96.5 * DB50))) * 2.3 / AKAPPA)
- tau = GAM/GRAV * ustar**2 #3796
- else:
- hrad = (avdep*twid)/(2.0*avdep + twid) # hydraulic radius, manual eq 41
- slope = DELTH / length
- ustar = sqrt(GRAV * slope * hrad)
- tau = (GAM * slope) * hrad
- else:
- ustar = 0.0
- tau = 0.0
- hrad = 0.0
- USTAR[step] = ustar * LFACTA
- TAU[step] = tau * TFACTA
-
- AVDEP[step] = avdep
- AVVEL[step] = avvel
- HRAD[step] = hrad
- TWID[step] = twid
- # END MAIN LOOP
-
- # NUMBA limitation for ts, and saving to HDF5 file is in individual columns
- if nexits > 1:
- for i in range(nexits):
- ts[Olabels[i]] = O[:,i]
- ts[OVOLlabels[i]] = OVOL[:,i]
- return errors
-
-
-@njit(cache=True)
-def fndrow(v, volFT):
- ''' finds highest index in FTable volume column whose volume < v'''
- for indx,vol in enumerate(volFT):
- if v < vol:
- return indx-1
- return len(volFT) - 2
-
-
-@njit(cache=True)
-def demand(vol, rowFT, funct, nexits, delts, convf, colind, outdgt):
- od = zeros(nexits)
- for i in range(nexits):
- col = colind[i]
- icol = int(col)
- if icol != 0:
- diff = col - float(icol)
- if diff >= 1.0e-6:
- _od1 = rowFT[icol-1]
- odfv = _od1 + diff * (_od1 - rowFT[icol]) * convf
- else:
- odfv = rowFT[icol-1] * convf
- else:
- odfv = 0.0
- odgt = outdgt[i]
-
- if odfv == 0.0 and odgt == 0.0:
- od[i] = 0.0
- elif odfv != 0.0 and odgt == 0.0:
- od[i] = odfv
- elif odfv == 0.0 and odgt != 0.0:
- od[i] = odgt
- else:
- if funct[i] == 1: od[i] = min(odfv,odgt)
- elif funct[i] == 2: od[i] = max(odfv,odgt)
- elif funct[i] == 3: od[i] = odfv + odgt
- elif funct[i] == 4: od[i] = max(odfv, (vol - odgt) / delts)
- return od.sum(), od
-
-
-@njit(cache=True)
-def auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor, AUX1FG, errors):
- '''Compute depth, stage, surface area, average depth, topwidth and hydraulic radius'''
- if vol > 0.0:
- sa1 = sareaFT[indx]
- a = sareaFT[indx+1] - sa1
- b = 2.0 * sa1
- vol1 = volumeFT[indx]
- c = -((vol - vol1) / (volumeFT[indx+1] - vol1)) * (b+a)
-
- rdep2 = 0.5 # initial guess for the Newton's method
- for i in range(MAXLOOPS):
- rdep1 = rdep2
- rdep2 = rdep1 - (a*rdep1**2 + b*rdep1 + c)/(2.0 * a * rdep1 + b)
- if abs(rdep2-rdep1) < TOLERANCE:
- break
- else:
- errors[3] += 1 # convergence failure error message
- if rdep2 > 1.0 or rdep2 < 0.0:
- errors[4] += 1 # converged outside valid range error message
-
- dep1 = depthFT[indx]
- dep = dep1 + rdep2 * (depthFT[indx+1] - dep1) # manual eq (36)
- sarea = sa1 + a * rdep2
-
- avdep = vol / sarea # average depth calculation, manual eq (39)
- twid = sarea / length # top-width calculation, manual eq (40)
- hrad = (avdep * twid) / (2.0 * avdep + twid) # hydraulic radius, manual eq (41)
- elif AUX1FG == 2:
- dep = depthFT[indx] # removed in HSPF 12.4
- sarea = sareaFT[indx]
- avdep = 0.0
- twid = sarea / length
- hrad = 0.0
- else:
- dep = 0.0
- sarea = 0.0
- avdep = 0.0
- twid = 0.0
- hrad = 0.0
-
- stage = dep + stcor # stage calculation and output, manual eq (37)
-
- return dep, stage, sarea, avdep, twid, hrad
-
-def expand_HYDR_masslinks(flags, uci, dat, recs):
- if flags['HYDR']:
- # IVOL
- rec = {}
- rec['MFACTOR'] = dat.MFACTOR
- rec['SGRPN'] = 'HYDR'
- if dat.SGRPN == "ROFLOW":
- rec['SMEMN'] = 'ROVOL'
- else:
- rec['SMEMN'] = 'OVOL'
- rec['SMEMSB1'] = dat.SMEMSB1
- rec['SMEMSB2'] = dat.SMEMSB2
- rec['TMEMN'] = 'IVOL'
- rec['TMEMSB1'] = dat.TMEMSB1
- rec['TMEMSB2'] = dat.TMEMSB2
- rec['SVOL'] = dat.SVOL
- recs.append(rec)
- return recs
+''' Copyright (c) 2020 by RESPEC, INC.
+Author: Robert Heaphy, Ph.D.
+License: LGPL2
+Conversion of no category version of HSPF HRCHHYD.FOR into Python'''
+
+
+''' Development Notes:
+ Categories not implimented in this version
+ Irregation only partially implimented in this version
+ Only English units currently supported
+ FTABLE can come from WDM or UCI file based on FTBDSN 1 or 0
+'''
+
+
+from numpy import zeros, any, full, nan, array, int64, arange
+from pandas import DataFrame
+from math import sqrt, log10
+from numba import njit
+from numba.typed import List
+from HSP2.utilities import initm, make_numba_dict
+
+# the following imports added by rb to handle dynamic code and special actions
+from HSP2.state import *
+from HSP2.SPECL import specl
+from HSP2.om import *
+from HSP2.om_model_object import *
+from HSP2.om_sim_timer import *
+from HSP2.om_special_action import *
+#from HSP2.om_equation import *
+from HSP2.om_model_linkage import *
+#from HSP2.om_data_matrix import *
+#from HSP2.om_model_broadcast import *
+
+
+ERRMSGS =('HYDR: SOLVE equations are indeterminate', #ERRMSG0
+ 'HYDR: extrapolation of rchtab will take place', #ERRMSG1
+ 'HYDR: SOLVE trapped with an oscillating condition', #ERRMSG2
+ 'HYDR: Solve did not converge', #ERRMSG3
+ 'HYDR: Solve converged to point outside valid range') #ERRMSG4
+
+TOLERANCE = 0.001 # newton method max loops
+MAXLOOPS = 100 # newton method exit tolerance
+
+
+def hydr(io_manager, siminfo, uci, ts, ftables, state):
+ ''' find the state of the reach/reservoir at the end of the time interval
+ and the outflows during the interval
+
+ CALL: hydr(store, general, ui, ts, state)
+ store is the Pandas/PyTable open store
+ general is a dictionary with simulation level infor (OP_SEQUENCE for example)
+ ui is a dictionary with RID specific HSPF UCI like data
+ ts is a dictionary with RID specific timeseries
+ state is a dictionary that contains all dynamic code dictionaries such as:
+ - specactions is a dictionary with all special actions
+ '''
+
+ steps = siminfo['steps'] # number of simulation points
+ uunits = siminfo['units']
+ nexits = int(uci['PARAMETERS']['NEXITS'])
+
+ # units conversion constants, 1 ACRE is 43560 sq ft. assumes input in acre-ft
+ VFACT = 43560.0
+ AFACT = 43560.0
+ if uunits == 2:
+ # si units conversion constants, 1 hectare is 10000 sq m, assumes area input in hectares, vol in Mm3
+ VFACT = 1.0e6
+ AFACT = 10000.0
+
+ u = uci['PARAMETERS']
+ funct = array([u[name] for name in u.keys() if name.startswith('FUNCT')]).astype(int)[0:nexits]
+ ODGTF = array([u[name] for name in u.keys() if name.startswith('ODGTF')]).astype(int)[0:nexits]
+ ODFVF = array([u[name] for name in u.keys() if name.startswith('ODFVF')]).astype(int)[0:nexits]
+
+ u = uci['STATES']
+ colin = array([u[name] for name in u.keys() if name.startswith('COLIN')]).astype(float)[0:nexits]
+ outdg = array([u[name] for name in u.keys() if name.startswith('OUTDG')]).astype(float)[0:nexits]
+
+ # COLIND timeseries might come in as COLIND, COLIND0, etc. otherwise UCI default
+ names = list(sorted([n for n in ts if n.startswith('COLIND')], reverse=True))
+ df = DataFrame()
+ for i,c in enumerate(ODFVF):
+ df[i] = ts[names.pop()][0:steps] if c < 0 else full(steps, c)
+ COLIND = df.to_numpy()
+
+ # OUTDGT timeseries might come in as OUTDGT, OUTDGT0, etc. otherwise UCI default
+ names = list(sorted([n for n in ts if n.startswith('OUTDG')], reverse=True))
+ df = DataFrame()
+ for i,c in enumerate(ODGTF):
+ df[i] = ts[names.pop()][0:steps] if c > 0 else zeros(steps)
+ OUTDGT = df.to_numpy()
+
+ # generic SAVE table doesn't know nexits for output flows and rates
+ if nexits > 1:
+ u = uci['SAVE']
+ for key in ('O', 'OVOL'):
+ for i in range(nexits):
+ u[f'{key}{i+1}'] = u[key]
+ del u[key]
+
+ # optional - defined, but can't used accidently
+ for name in ('SOLRAD','CLOUD','DEWTEMP','GATMP','WIND'):
+ if name not in ts:
+ ts[name] = full(steps, nan)
+
+ # optional timeseries
+ for name in ('IVOL','POTEV','PREC'):
+ if name not in ts:
+ ts[name] = zeros(steps)
+ ts['CONVF'] = initm(siminfo, uci, 'VCONFG', 'MONTHLY_CONVF', 1.0)
+
+ # extract key columns of specified FTable for faster access (1d vs. 2d)
+ rchtab = ftables[f"{uci['PARAMETERS']['FTBUCI']}"]
+ #rchtab = store[f"FTABLES/{uci['PARAMETERS']['FTBUCI']}"]
+ ts['volumeFT'] = rchtab['Volume'].to_numpy() * VFACT
+ ts['depthFT'] = rchtab['Depth'].to_numpy()
+ ts['sareaFT'] = rchtab['Area'].to_numpy() * AFACT
+ rchtab = rchtab.to_numpy()
+
+ ui = make_numba_dict(uci) # Note: all values coverted to float automatically
+ ui['steps'] = steps
+ ui['delt'] = siminfo['delt']
+ ui['nexits'] = nexits
+ ui['errlen'] = len(ERRMSGS)
+ ui['nrows'] = rchtab.shape[0]
+ ui['nodfv'] = any(ODFVF)
+ ui['uunits'] = uunits
+
+ # Numba can't do 'O' + str(i) stuff yet, so do it here. Also need new style lists
+ Olabels = List()
+ OVOLlabels = List()
+ for i in range(nexits):
+ Olabels.append(f'O{i+1}')
+ OVOLlabels.append(f'OVOL{i+1}')
+
+ #######################################################################################
+ # the following section (1 of 3) added to HYDR by rb to handle dynamic code and special actions
+ #######################################################################################
+ # state_info is some generic things about the simulation
+ # must be numba safe, so we don't just pass the whole state which is not
+ state_info = Dict.empty(key_type=types.unicode_type, value_type=types.unicode_type)
+ state_info['operation'], state_info['segment'], state_info['activity'] = state['operation'], state['segment'], state['activity']
+ state_info['domain'], state_info['state_step_hydr'], state_info['state_step_om'] = state['domain'], state['state_step_hydr'], state['state_step_om']
+ hsp2_local_py = state['hsp2_local_py']
+ # It appears necessary to load this here, instead of from main.py, otherwise,
+ # _hydr_() does not recognize the function state_step_hydr()?
+ if (hsp2_local_py != False):
+ from hsp2_local_py import state_step_hydr
+ else:
+ from HSP2.state_fn_defaults import state_step_hydr
+ # initialize the hydr paths in case they don't already reside here
+ hydr_init_ix(state, state['domain'])
+ # must split dicts out of state Dict since numba cannot handle mixed-type nested Dicts
+ state_ix, dict_ix, ts_ix = state['state_ix'], state['dict_ix'], state['ts_ix']
+ state_paths = state['state_paths']
+ model_exec_list = state['model_exec_list'] # order of special actions and other dynamic ops
+ op_tokens = state['op_tokens']
+ #######################################################################################
+
+ # Do the simulation with _hydr_ (ie run reaches simulation code)
+ errors = _hydr_(ui, ts, COLIND, OUTDGT, rchtab, funct, Olabels, OVOLlabels,
+ state_info, state_paths, state_ix, dict_ix, ts_ix, state_step_hydr, op_tokens, model_exec_list)
+
+ if 'O' in ts: del ts['O']
+ if 'OVOL' in ts: del ts['OVOL']
+
+ # save initial outflow(s) from reach:
+ uci['PARAMETERS']['ROS'] = ui['ROS']
+ for i in range(nexits):
+ uci['PARAMETERS']['OS'+str(i+1)] = ui['OS'+str(i+1)]
+
+ return errors, ERRMSGS
+
+
+@njit(cache=True)
+def _hydr_(ui, ts, COLIND, OUTDGT, rowsFT, funct, Olabels, OVOLlabels, state_info, state_paths, state_ix, dict_ix, ts_ix, state_step_hydr, op_tokens, model_exec_list):
+ errors = zeros(int(ui['errlen'])).astype(int64)
+
+ steps = int(ui['steps']) # number of simulation steps
+ delts = ui['delt'] * 60.0 # seconds in simulation interval
+ uunits = ui['uunits']
+ nrows = int(ui['nrows'])
+ nexits = int(ui['nexits'])
+ AUX1FG = int(ui['AUX1FG']) # True means DEP, SAREA will be computed
+ AUX2FG = int(ui['AUX2FG'])
+ AUX3FG = int(ui['AUX3FG'])
+ LKFG = int(ui['LKFG']) # flag, 1:lake, 0:stream
+ length = ui['LEN'] * 5280.0 # length of reach, in feet
+ if uunits == 2:
+ length = ui['LEN'] * 1000.0 # length of reach, in meters
+ DB50 = ui['DB50'] / 12.0 # mean diameter of bed material
+ if uunits == 2:
+ DB50 = ui['DB50'] / 40.0 # mean diameter of bed material
+ DELTH = ui['DELTH']
+ stcor = ui['STCOR']
+
+ # units conversion constants, 1 ACRE is 43560 sq ft. assumes input in acre-ft
+ VFACT = 43560.0
+ AFACT = 43560.0
+ LFACTA = 1.0
+ SFACTA = 1.0
+ TFACTA = 1.0
+ # physical constants (English units)
+ GAM = 62.4 # density of water
+ GRAV = 32.2 # gravitational acceleration
+ AKAPPA = 0.4 # von karmen constant
+ if uunits == 2:
+ # si units conversion constants, 1 hectare is 10000 sq m, assumes area input in hectares, vol in Mm3
+ VFACT = 1.0e6
+ AFACT = 10000.0
+ # physical constants (English units)
+ GAM = 9806. # density of water
+ GRAV = 9.81 # gravitational acceleration
+
+ volumeFT = ts['volumeFT']
+ depthFT = ts['depthFT']
+ sareaFT = ts['sareaFT']
+
+ nodfv = ui['nodfv']
+ ks = ui['KS']
+ coks = 1 - ks
+ facta1 = 1.0 / (coks * delts)
+
+ # MAIN loop Initialization
+ IVOL = ts['IVOL'] * VFACT # or sum civol, zeros if no inflow ???
+ POTEV = ts['POTEV'] / 12.0
+ PREC = ts['PREC'] / 12.0
+ CONVF = ts['CONVF']
+ convf = CONVF[0]
+
+ # faster to preallocate arrays - like MATLAB)
+ o = zeros(nexits)
+ odz = zeros(nexits)
+ ovol = zeros(nexits)
+ oseff = zeros(nexits)
+ od1 = zeros(nexits)
+ od2 = zeros(nexits)
+ outdgt = zeros(nexits)
+ colind = zeros(nexits)
+
+ outdgt[:] = OUTDGT[0,:]
+ colind[:] = COLIND[0,:]
+
+ # numba limitation, ts can't have both 1-d and 2-d arrays in save Dict
+ O = zeros((steps, nexits))
+ OVOL = zeros((steps, nexits))
+
+ ts['PRSUPY'] = PRSUPY = zeros(steps)
+ ts['RO'] = RO = zeros(steps)
+ ts['ROVOL'] = ROVOL = zeros(steps)
+ ts['VOL'] = VOL = zeros(steps)
+ ts['VOLEV'] = VOLEV = zeros(steps)
+ ts['IRRDEM'] = IRRDEM = zeros(steps)
+ if AUX1FG:
+ ts['DEP'] = DEP = zeros(steps)
+ ts['SAREA'] = SAREA = zeros(steps)
+ ts['USTAR'] = USTAR = zeros(steps)
+ ts['TAU'] = TAU = zeros(steps)
+ ts['AVDEP'] = AVDEP = zeros(steps)
+ ts['AVVEL'] = AVVEL = zeros(steps)
+ ts['HRAD'] = HRAD = zeros(steps)
+ ts['TWID'] = TWID = zeros(steps)
+
+ zeroindex = fndrow(0.0, volumeFT) #$1126-1127
+ topvolume = volumeFT[-1]
+
+ vol = ui['VOL'] * VFACT # hydr-init, initial volume of water
+ if vol >= topvolume:
+ errors[1] += 1 # ERRMSG1: extrapolation of rchtab will take place
+
+ # find row index that brackets the VOL
+ indx = fndrow(vol, volumeFT)
+ if nodfv: # simple interpolation, the hard way!!
+ v1 = volumeFT[indx]
+ v2 = volumeFT[indx+1]
+ rod1,od1[:] = demand(v1, rowsFT[indx, :], funct, nexits, delts, convf, colind, outdgt)
+ rod2,od2[:] = demand(v2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
+ a1 = (v2 - vol) / (v2 - v1)
+ o[:] = a1 * od1[:] + (1.0 - a1) * od2[:]
+ ro = (a1 * rod1) + ((1.0 - a1) * rod2)
+ else:
+ ro,o[:] = demand(vol, rowsFT[indx,:], funct, nexits, delts, convf, colind, outdgt) #$1159-1160
+
+ # back to PHYDR
+ if AUX1FG >= 1:
+ dep, stage, sarea, avdep, twid, hrad = auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor, AUX1FG, errors) # initial
+
+ # hydr-irrig
+ irexit = int(ui['IREXIT']) -1 # irexit - exit number for irrigation withdrawals, 0 based ???
+ #if irexit >= 1:
+ irminv = ui['IRMINV']
+ rirwdl = 0.0
+ #rirdem = 0.0
+ #rirsht = 0.0
+ irrdem = 0.0
+
+ # store initial outflow from reach:
+ ui['ROS'] = ro
+ for index in range(nexits):
+ ui['OS' + str(index + 1)] = o[index]
+
+ # other initial vars
+ rovol = 0.0
+ volev = 0.0
+ IVOL0 = ts['IVOL'] # the actual inflow in simulation native units
+
+ #######################################################################################
+ # the following section (2 of 3) added by rb to HYDR, this one to prepare for dynamic state including special actions
+ #######################################################################################
+ hydr_ix = hydr_get_ix(state_ix, state_paths, state_info['domain'])
+ # these are integer placeholders faster than calling the array look each timestep
+ o1_ix, o2_ix, o3_ix, ivol_ix = hydr_ix['O1'], hydr_ix['O2'], hydr_ix['O3'], hydr_ix['IVOL']
+ ro_ix, rovol_ix, volev_ix, vol_ix = hydr_ix['RO'], hydr_ix['ROVOL'], hydr_ix['VOLEV'], hydr_ix['VOL']
+ # handle varying length outdgt
+ out_ix = arange(nexits)
+ if nexits > 0:
+ out_ix[0] = o1_ix
+ if nexits > 1:
+ out_ix[1] = o2_ix
+ if nexits > 2:
+ out_ix[2] = o3_ix
+ #######################################################################################
+
+ # HYDR (except where noted)
+ for step in range(steps):
+ convf = CONVF[step]
+ outdgt[:] = OUTDGT[step, :]
+ colind[:] = COLIND[step, :]
+ roseff = ro
+ oseff[:] = o[:]
+
+ #######################################################################################
+ # the following section (3 of 3) added by rb to accommodate dynamic code, operations models, and special actions
+ #######################################################################################
+ # set state_ix with value of local state variables and/or needed vars
+ # Note: we pass IVOL0, not IVOL here since IVOL has been converted to different units
+ state_ix[ro_ix], state_ix[rovol_ix] = ro, rovol
+ di = 0
+ for oi in range(nexits):
+ state_ix[out_ix[oi]] = outdgt[oi]
+ state_ix[vol_ix], state_ix[ivol_ix] = vol, IVOL0[step]
+ state_ix[volev_ix] = volev
+ # - these if statements may be irrelevant if default functions simply return
+ # when no objects are defined.
+ if (state_info['state_step_om'] == 'enabled'):
+ pre_step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step)
+ if (state_info['state_step_hydr'] == 'enabled'):
+ state_step_hydr(state_info, state_paths, state_ix, dict_ix, ts_ix, hydr_ix, step)
+ if (state_info['state_step_om'] == 'enabled'):
+ #print("trying to execute state_step_om()")
+ # model_exec_list contains the model exec list in dependency order
+ # now these are all executed at once, but we need to make them only for domain end points
+ step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step) # traditional 'ACTIONS' done in here
+ if ( (state_info['state_step_hydr'] == 'enabled')
+ or (state_info['state_step_om'] == 'enabled') ):
+ # Do write-backs for editable STATE variables
+ # OUTDGT is writeable
+ for oi in range(nexits):
+ outdgt[oi] = state_ix[out_ix[oi]]
+ # IVOL is writeable.
+ # Note: we must convert IVOL to the units expected in _hydr_
+ # maybe routines should do this, and this is not needed (but pass VFACT in state)
+ IVOL[step] = state_ix[ivol_ix] * VFACT
+ # End dynamic code step()
+ #######################################################################################
+
+ # vols, sas variables and their initializations not needed.
+ if irexit >= 0: # irrigation exit is set, zero based number
+ if rirwdl > 0.0: # equivalent to OVOL for the irrigation exit
+ vol = irminv if irminv > vol - rirwdl else vol - rirwdl
+ if vol >= volumeFT[-1]:
+ errors[1] += 1 # ERRMSG1: extrapolation of rchtab will take place
+
+ # DISCH with hydrologic routing
+ indx = fndrow(vol, volumeFT) # find row index that brackets the VOL
+ vv1 = volumeFT[indx]
+ rod1,od1[:] = demand(vv1, rowsFT[indx, :], funct, nexits, delts, convf, colind, outdgt)
+ vv2 = volumeFT[indx+1]
+ rod2,od2[:] = demand(vv2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
+ aa1 = (vv2 - vol) / (vv2 - vv1)
+ ro = (aa1 * rod1) + ((1.0 - aa1) * rod2)
+ o[:] = (aa1 * od1[:]) + ((1.0 - aa1) * od2[:])
+
+ # back to HYDR
+ if AUX1FG >= 1: # recompute surface area and depth
+ dep, stage, sarea, avdep, twid, hrad = auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor,
+ AUX1FG, errors)
+ else:
+ irrdem = 0.0
+ #o[irexit] = 0.0 #???? not used anywhere, check if o[irexit]
+
+ prsupy = PREC[step] * sarea
+ if uunits == 2:
+ prsupy = PREC[step] * sarea / 3.281
+ volt = vol + IVOL[step] + prsupy
+ volev = 0.0
+ if AUX1FG: # subtract evaporation
+ volpev = POTEV[step] * sarea
+ if uunits == 2:
+ volpev = POTEV[step] * sarea / 3.281
+ if volev >= volt:
+ volev = volt
+ volt = 0.0
+ else:
+ volev = volpev
+ volt -= volev
+
+ # ROUTE/NOROUT calls
+ # common code
+ volint = volt - (ks * roseff * delts) # find intercept of eq 4 on vol axis
+ if volint < (volt * 1.0e-5):
+ volint = 0.0
+ if volint <= 0.0: # case 3 -- no solution to simultaneous equations
+ indx = zeroindex
+ vol = 0.0
+ ro = 0.0
+ o[:] = 0.0
+ rovol = volt
+
+ if roseff > 0.0: # numba limitation, cant combine into one line
+ ovol[:] = (rovol/roseff) * oseff[:]
+ else:
+ ovol[:] = rovol / nexits
+
+ else: # case 1 or 2
+ oint = volint * facta1 # == ointsp, so ointsp variable dropped
+ if nodfv:
+ # ROUTE
+ rodz,odz[:] = demand(0.0, rowsFT[zeroindex,:], funct, nexits, delts, convf, colind, outdgt)
+ if oint > rodz:
+ # SOLVE - case 1-- outflow demands can be met in full
+ # premov will be used to check whether we are in a trap, arbitrary value
+ premov = -20
+ move = 10
+
+ vv1 = volumeFT[indx]
+ rod1,od1[:] = demand(vv1, rowsFT[indx, :], funct, nexits, delts, convf,colind, outdgt)
+ vv2 = volumeFT[indx+1]
+ rod2,od2[:] = demand(vv2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
+
+ while move != 0:
+ facta2 = rod1 - rod2
+ factb2 = vv2 - vv1
+ factc2 = vv2 * rod1 - vv1 * rod2
+ det = facta1 * factb2 - facta2
+ if det <= 0.0:
+ det = 0.0001
+ errors[0] += 1 # ERRMSG0: SOLVE is indeterminate
+
+ vol = max(0.0, (oint * factb2 - factc2 ) / det)
+ if vol > vv2:
+ if indx >= nrows-2:
+ if vol > topvolume:
+ errors[1] += 1 # ERRMSG1: extrapolation of rchtab will take place
+ move = 0
+ else:
+ move = 1
+ indx += 1
+ vv1 = vv2
+ od1[:] = od2[:]
+ rod1 = rod2
+ vv2 = volumeFT[indx+1]
+ rod2,od2[:] = demand(vv2, rowsFT[indx+1,:], funct, nexits, delts, convf, colind, outdgt)
+ elif vol < vv1:
+ indx -= 1
+ move = -1
+ vv2 = vv1
+ od2[:] = od1[:]
+ rod2 = rod1
+ vv1 = volumeFT[indx]
+ rod1,od1[:] = demand(vv1, rowsFT[indx,:], funct, nexits, delts, convf, colind, outdgt)
+ else:
+ move = 0
+
+ # check whether algorithm is in a trap, yo-yoing back and forth
+ if move + premov == 0:
+ errors[2] += 1 # ERRMSG2: oscillating trap
+ move = 0
+ premov = move
+
+ ro = oint - facta1 * vol
+ if vol < 1.0e-5:
+ ro = oint
+ vol = 0.0
+ if ro < 1.0e-10:
+ ro = 0.0
+ if ro <= 0.0:
+ o[:] = 0.0
+ else:
+ diff = vol - vv1
+ factr = 0.0 if diff < 0.01 else diff / (vv2 - vv1)
+ o[:] = od1[:] + (od2[:] - od1[:]) * factr
+ else:
+ # case 2 -- outflow demands cannot be met in full
+ ro = 0.0
+ for i in range(nexits):
+ tro = ro + odz[i]
+ if tro <= oint:
+ o[i] = odz[i]
+ ro = tro
+ else:
+ o[i] = oint - ro
+ ro = oint
+ vol = 0.0
+ indx = zeroindex
+ else:
+ # NOROUT
+ rod1,od1[:] = demand(vol, rowsFT[indx,:], funct, nexits, delts, convf, colind, outdgt)
+ if oint >= rod1: #case 1 -outflow demands are met in full
+ ro = rod1
+ vol = volint - coks * ro * delts
+ if vol < 1.0e-5:
+ vol = 0.0
+ o[:] = od1[:]
+ else: # case 2 -outflow demands cannot be met in full
+ ro = 0.0
+ for i in range(nexits):
+ tro = ro + odz[i]
+ if tro <= oint:
+ o[i] = odz[i]
+ ro = tro
+ else:
+ o[i] = oint - ro
+ ro = oint
+ vol = 0.0
+ indx = zeroindex
+
+ # common ROUTE/NOROUT code
+ # an irrigation demand was made before routing
+ if (irexit >= 0) and (irrdem > 0.0): # an irrigation demand was made before routing
+ oseff[irexit] = irrdem
+ o[irexit] = irrdem
+ roseff += irrdem
+ ro += irrdem
+ IRRDEM[step] = irrdem
+
+ # estimate the volumes of outflow
+ ovol[:] = (ks * oseff[:] + coks * o[:]) * delts
+ rovol = (ks * roseff + coks * ro) * delts
+
+ # HYDR
+ if nexits > 1:
+ O[step,:] = o[:] * SFACTA * LFACTA
+ OVOL[step,:] = ovol[:] / VFACT
+ PRSUPY[step] = prsupy / VFACT
+ RO[step] = ro * SFACTA * LFACTA
+ ROVOL[step] = rovol / VFACT
+ VOLEV[step] = volev / VFACT
+ VOL[step] = vol / VFACT
+
+ if AUX1FG: # compute final depth, surface area
+ if vol >= topvolume:
+ errors[1] += 1 # ERRMSG1: extrapolation of rchtab
+ indx = fndrow(vol, volumeFT)
+ dep, stage, sarea, avdep, twid, hrad = auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor, AUX1FG, errors)
+ DEP[step] = dep
+ SAREA[step] = sarea / AFACT
+
+ if vol > 0.0 and sarea > 0.0:
+ twid = sarea / length
+ avdep = vol / sarea
+ elif AUX1FG == 2:
+ twid = sarea / length
+ avdep = 0.0
+ else:
+ twid = 0.0
+ avdep = 0.0
+
+ if AUX2FG:
+ avvel = (length * ro / vol) if vol > 0.0 else 0.0
+ if AUX3FG:
+ if avdep > 0.0:
+ # SHEAR; ustar (bed shear velocity), tau (bed shear stress)
+ if LKFG: # flag, 1:lake, 0:stream
+ ustar = avvel / (17.66 + (log10(avdep / (96.5 * DB50))) * 2.3 / AKAPPA)
+ tau = GAM/GRAV * ustar**2 #3796
+ else:
+ hrad = (avdep*twid)/(2.0*avdep + twid) # hydraulic radius, manual eq 41
+ slope = DELTH / length
+ ustar = sqrt(GRAV * slope * hrad)
+ tau = (GAM * slope) * hrad
+ else:
+ ustar = 0.0
+ tau = 0.0
+ hrad = 0.0
+ USTAR[step] = ustar * LFACTA
+ TAU[step] = tau * TFACTA
+
+ AVDEP[step] = avdep
+ AVVEL[step] = avvel
+ HRAD[step] = hrad
+ TWID[step] = twid
+ # END MAIN LOOP
+
+ # NUMBA limitation for ts, and saving to HDF5 file is in individual columns
+ if nexits > 1:
+ for i in range(nexits):
+ ts[Olabels[i]] = O[:,i]
+ ts[OVOLlabels[i]] = OVOL[:,i]
+ return errors
+
+
+@njit(cache=True)
+def fndrow(v, volFT):
+ ''' finds highest index in FTable volume column whose volume < v'''
+ for indx,vol in enumerate(volFT):
+ if v < vol:
+ return indx-1
+ return len(volFT) - 2
+
+
+@njit(cache=True)
+def demand(vol, rowFT, funct, nexits, delts, convf, colind, outdgt):
+ od = zeros(nexits)
+ for i in range(nexits):
+ col = colind[i]
+ icol = int(col)
+ if icol != 0:
+ diff = col - float(icol)
+ if diff >= 1.0e-6:
+ _od1 = rowFT[icol-1]
+ odfv = _od1 + diff * (_od1 - rowFT[icol]) * convf
+ else:
+ odfv = rowFT[icol-1] * convf
+ else:
+ odfv = 0.0
+ odgt = outdgt[i]
+
+ if odfv == 0.0 and odgt == 0.0:
+ od[i] = 0.0
+ elif odfv != 0.0 and odgt == 0.0:
+ od[i] = odfv
+ elif odfv == 0.0 and odgt != 0.0:
+ od[i] = odgt
+ else:
+ if funct[i] == 1: od[i] = min(odfv,odgt)
+ elif funct[i] == 2: od[i] = max(odfv,odgt)
+ elif funct[i] == 3: od[i] = odfv + odgt
+ elif funct[i] == 4: od[i] = max(odfv, (vol - odgt) / delts)
+ return od.sum(), od
+
+
+@njit(cache=True)
+def auxil(volumeFT, depthFT, sareaFT, indx, vol, length, stcor, AUX1FG, errors):
+ '''Compute depth, stage, surface area, average depth, topwidth and hydraulic radius'''
+ if vol > 0.0:
+ sa1 = sareaFT[indx]
+ a = sareaFT[indx+1] - sa1
+ b = 2.0 * sa1
+ vol1 = volumeFT[indx]
+ c = -((vol - vol1) / (volumeFT[indx+1] - vol1)) * (b+a)
+
+ rdep2 = 0.5 # initial guess for the Newton's method
+ for i in range(MAXLOOPS):
+ rdep1 = rdep2
+ rdep2 = rdep1 - (a*rdep1**2 + b*rdep1 + c)/(2.0 * a * rdep1 + b)
+ if abs(rdep2-rdep1) < TOLERANCE:
+ break
+ else:
+ errors[3] += 1 # convergence failure error message
+ if rdep2 > 1.0 or rdep2 < 0.0:
+ errors[4] += 1 # converged outside valid range error message
+
+ dep1 = depthFT[indx]
+ dep = dep1 + rdep2 * (depthFT[indx+1] - dep1) # manual eq (36)
+ sarea = sa1 + a * rdep2
+
+ avdep = vol / sarea # average depth calculation, manual eq (39)
+ twid = sarea / length # top-width calculation, manual eq (40)
+ hrad = (avdep * twid) / (2.0 * avdep + twid) # hydraulic radius, manual eq (41)
+ elif AUX1FG == 2:
+ dep = depthFT[indx] # removed in HSPF 12.4
+ sarea = sareaFT[indx]
+ avdep = 0.0
+ twid = sarea / length
+ hrad = 0.0
+ else:
+ dep = 0.0
+ sarea = 0.0
+ avdep = 0.0
+ twid = 0.0
+ hrad = 0.0
+
+ stage = dep + stcor # stage calculation and output, manual eq (37)
+
+ return dep, stage, sarea, avdep, twid, hrad
+
+def expand_HYDR_masslinks(flags, uci, dat, recs):
+ if flags['HYDR']:
+ # IVOL
+ rec = {}
+ rec['MFACTOR'] = dat.MFACTOR
+ rec['SGRPN'] = 'HYDR'
+ if dat.SGRPN == "ROFLOW":
+ rec['SMEMN'] = 'ROVOL'
+ else:
+ rec['SMEMN'] = 'OVOL'
+ rec['SMEMSB1'] = dat.SMEMSB1
+ rec['SMEMSB2'] = dat.SMEMSB2
+ rec['TMEMN'] = 'IVOL'
+ rec['TMEMSB1'] = dat.TMEMSB1
+ rec['TMEMSB2'] = dat.TMEMSB2
+ rec['SVOL'] = dat.SVOL
+ recs.append(rec)
+ return recs
\ No newline at end of file
diff --git a/HSP2/SEDTRN.py b/HSP2/SEDTRN.py
index f78b8f83..46cc1624 100644
--- a/HSP2/SEDTRN.py
+++ b/HSP2/SEDTRN.py
@@ -1,958 +1,1012 @@
-''' Copyright (c) 2020 by RESPEC, INC.
-Authors: Robert Heaphy, Ph.D. and Paul Duda
-License: LGPL2
-'''
-
-from numpy import array, zeros, where, int64
-from math import log10, exp
-from numba import njit
-from HSP2.ADCALC import advect
-from HSP2.utilities import make_numba_dict
-
-ERRMSGS =('SEDTRN: Warning -- bed storage of sediment size fraction sand is empty', #ERRMSG0
- 'SEDTRN: Warning -- bed storage of sediment size fraction silt is empty', #ERRMSG1
- 'SEDTRN: Warning -- bed storage of sediment size fraction clay is empty', #ERRMSG2
- 'SEDTRN: Warning -- bed depth appears excessive', #ERRMSG3
- 'SEDTRN: Fatal error ocurred in colby method- variable outside valid range- switching to toffaleti method', #ERRMSG4
- 'SEDTRN: Simulation of sediment requires all 3 "auxiliary flags" (AUX1FG, etc) in section HYDR must be turned on', #ERRMSG5
- 'SEDTRN: When specifying the initial composition of the bed, the fraction of sand, silt, and clay must sum to a value close to 1.0.') #ERRMSG6
-
-def sedtrn(io_manager, siminfo, uci, ts):
- ''' Simulate behavior of inorganic sediment'''
-
- # simlen = siminfo['steps']
- # delt = siminfo['delt']
- delt60 = siminfo['delt'] / 60
- delts = siminfo['delt'] * 60
- uunits = siminfo['units']
-
- advectData = uci['advectData']
- (nexits, vol, VOL, SROVOL, EROVOL, SOVOL, EOVOL) = advectData
-
- ts['VOL'] = VOL
- ts['SROVOL'] = SROVOL
- ts['EROVOL'] = EROVOL
- for i in range(nexits):
- ts['SOVOL' + str(i + 1)] = SOVOL[:, i]
- ts['EOVOL' + str(i + 1)] = EOVOL[:, i]
-
- ui = make_numba_dict(uci)
- ui['simlen'] = siminfo['steps']
- ui['uunits'] = siminfo['units']
- ui['vol'] = vol
- ui['delts'] = siminfo['delt'] * 60
- ui['delt60'] = siminfo['delt'] / 60
- ui['errlen'] = len(ERRMSGS)
-
- ui_silt = uci['SILT']
- if uunits == 1:
- ui['silt_d'] = ui_silt['D'] * 0.0833
- ui['silt_w'] = ui_silt['W'] * delts * 0.0254 # convert settling velocity from m/sec to m/ivl
- else:
- ui['silt_d'] = ui_silt['D'] * 0.001
- ui['silt_w'] = ui_silt['W'] * delts * 0.001 # convert settling velocity from m/sec to m/ivl
- ui['silt_rho'] = ui_silt['RHO']
- ui['silt_taucd'] = ui_silt['TAUCD']
- ui['silt_taucs'] = ui_silt['TAUCS']
- ui['silt_m'] = ui_silt['M'] * delt60 / 24.0 * 4.880 # convert erodibility coeff from /day to /ivl
-
- ui_clay = uci['CLAY']
- if uunits == 1:
- ui['clay_d'] = ui_clay['D'] * 0.0833
- ui['clay_w'] = ui_clay['W'] * delts * 0.0254 # convert settling velocity from m/sec to m/ivl
- else:
- ui['clay_d'] = ui_clay['D'] * 0.001
- ui['clay_w'] = ui_clay['W'] * delts * 0.001 # convert settling velocity from m/sec to m/ivl
- ui['clay_rho'] = ui_clay['RHO']
- ui['clay_taucd'] = ui_clay['TAUCD']
- ui['clay_taucs'] = ui_clay['TAUCS']
- ui['clay_m'] = ui_clay['M'] * delt60 / 24.0 * 4.880 # convert erodibility coeff from /day to /ivl
-
- ############################################################################
- errors = _sedtrn_(ui, ts) # run SEDTRN simulation code
- ############################################################################
-
- if nexits > 1:
- u = uci['SAVE']
- key1 = 'OSED1'
- key2 = 'OSED2'
- key3 = 'OSED3'
- key4 = 'OSED4'
- for i in range(nexits):
- u[f'{key1}{i + 1}'] = u[key1]
- u[f'{key2}{i + 1}'] = u[key2]
- u[f'{key3}{i + 1}'] = u[key3]
- u[f'{key4}{i + 1}'] = u[key4]
- del u[key1]
- del u[key2]
- del u[key3]
- del u[key4]
-
- return errors, ERRMSGS
-
-@njit(cache=True)
-def _sedtrn_(ui, ts):
- ''' Simulate behavior of inorganic sediment'''
- errorsV = zeros(int(ui['errlen'])).astype(int64)
-
- simlen = int(ui['simlen'])
- uunits = int(ui['uunits'])
- delts = ui['delts']
- delt60 = ui['delt60']
-
- AFACT = 43560.0
- if uunits == 2:
- # si units conversion
- AFACT = 1000000.0
- vol = ui['vol'] * AFACT
-
- svol = vol
- nexits = int(ui['NEXITS'])
-
- # table SANDFG
- sandfg = ui['SANDFG'] # 1: Toffaleti method, 2:Colby method, 3:old HSPF power function
-
- if ui['AUX3FG'] == 0:
- errorsV[5] += 1 # error - sediment transport requires aux3fg to be on
-
- # table SED-GENPARM
- bedwid = ui['BEDWID']
- bedwrn = ui['BEDWRN']
- por = ui['POR']
-
- # table SED-HYDPARM
- if uunits == 1:
- len_ = ui['LEN'] * 5280
- db50 = ui['DB50'] * 0.0833
- else:
- len_ = ui['LEN'] * 1000
- db50 = ui['DB50'] * 0.001
- delth = ui['DELTH']
-
- # evaluate some quantities used in colby and/or toffaleti sand transport simulation methods
- if uunits == 1:
- db50e = db50
- db50m = db50 * 304.8
- else:
- db50e = db50 * 3.28
- db50m = db50 * 1000.0
- slope = delth / len_
-
- # SAND PARAMETERS; table SAND-PM
- if uunits == 1:
- sand_d = ui['D'] * 0.0833
- sand_w = ui['W'] * delts * 0.0254 # convert settling velocity from m/sec to m/ivl
- else:
- sand_d = ui['D'] * 0.001
- sand_w = ui['W'] * delts * 0.001 # convert settling velocity from m/sec to m/ivl
- sand_rho = ui['RHO']
- sand_ksand = ui['KSAND']
- sand_expsnd = ui['EXPSND']
-
- # SILT PARAMETERS; table SILT-CLAY-PM --- note: first occurance is silt
- silt_d = ui['silt_d']
- silt_w = ui['silt_w']
- silt_rho = ui['silt_rho']
- silt_taucd = ui['silt_taucd']
- silt_taucs = ui['silt_taucs']
- silt_m = ui['silt_m']
-
- # CLAY PARAMETERS; table SILT-CLAY-PM --- note: second occurance is clay
- clay_d = ui['clay_d']
- clay_w = ui['clay_w']
- clay_rho = ui['clay_rho']
- clay_taucd = ui['clay_taucd']
- clay_taucs = ui['clay_taucs']
- clay_m = ui['clay_m']
-
- # bed sediment conditions; table BED-INIT
- beddep = ui['BEDDEP']
- sand_bedfr = ui['SANDFR']
- silt_bedfr = ui['SILTFR']
- clay_bedfr = ui['CLAYFR']
- total_bedfr = sand_bedfr + silt_bedfr + clay_bedfr
- if abs(total_bedfr - 1.0) > 0.01:
- errorsV[6] += 1 # error message: sum of bed sediment fractions is not close enough to 1.0
-
- # suspended sediment concentrations; table ssed-init
- sand_ssed1 = ui['SSED1']
- silt_ssed2 = ui['SSED2']
- clay_ssed3 = ui['SSED3']
- total_ssed4 = sand_ssed1 + silt_ssed2 + clay_ssed3
-
- # get input time series- inflow of sediment is in units of mg.ft3/l.ivl (english) or mg.m3/l.ivl (metric)
- TAU = ts['TAU']
- AVDEP = ts['AVDEP']
- AVVEL = ts['AVVEL']
- RO = ts['RO']
- HRAD = ts['HRAD']
- TWID = ts['TWID']
-
- if not 'ISED1' in ts:
- ts['ISED1'] = zeros(simlen)
- if not 'ISED2' in ts:
- ts['ISED2'] = zeros(simlen)
- if not 'ISED3' in ts:
- ts['ISED3'] = zeros(simlen)
-
- ISED1 = ts['ISED1'] # if present, else ISED is identically zero; sand
- ISED2 = ts['ISED2'] # if present, else ISED is identically zero; silt
- ISED3 = ts['ISED3'] # if present, else ISED is identically zero; clay
- ISED4 = ISED1 + ISED2 + ISED3
-
- htfg = int(ui['HTFG'])
- if htfg == 1:
- TW = ts['TW']
- if htfg == 0 and sandfg != 3:
- TW = ts['TW']
- TW = where(TW < -100.0, 20.0, TW)
-
- # preallocate storage for computed time series
- # WASH = ts['WASH'] = zeros(simlen) # washload concentration, state variable
- # SAND = ts['SAND'] = zeros(simlen) # sandload oncentration, state variable
- # BDSAND = ts['BDSAND'] = zeros(simlen) # bed storage of sand, state variable
- # SDCF1_11 = ts['WASH'] = zeros(simlen) # deposition of washload on bed
- # SDCF1_21 = ts['WASH'] = zeros(simlen) # total outflow of washload from RCHRES
- # SDCF1_12 = ts['WASH'] = zeros(simlen) # exchange of sand between bed and suspended storage
- # SDCF1_22 = ts['WASH'] = zeros(simlen) # total outflow of sandload from rchres
- # SDCF2_1 = ts['SDCF2_1'] = zeros((simlen, nexits)) # washload outflow by gate
- # SDCF2_2 = ts['SDCF2_2'] = zeros((simlen, nexits)) # sandload outflow by gate
- # ossand = zeros(nexits)
- SSED1 = ts['SSED1'] = zeros(simlen) # suspended sand concentration
- SSED2 = ts['SSED2'] = zeros(simlen) # suspended silt concentration
- SSED3 = ts['SSED3'] = zeros(simlen) # suspended clay concentration
- SSED4 = ts['SSED4'] = zeros(simlen) # suspended sediment concentration
- RSED1 = ts['RSED1'] = zeros(simlen) # sediment storages - suspended sand
- RSED2 = ts['RSED2'] = zeros(simlen) # sediment storages - suspended silt
- RSED3 = ts['RSED3'] = zeros(simlen) # sediment storages - suspended clay
- RSED4 = ts['RSED4'] = zeros(simlen) # sediment storages - bed sand
- RSED5 = ts['RSED5'] = zeros(simlen) # sediment storages - bed silt
- RSED6 = ts['RSED6'] = zeros(simlen) # sediment storages - bed clay
- RSED7 = ts['RSED7'] = zeros(simlen) # sediment storages - total sand
- RSED8 = ts['RSED8'] = zeros(simlen) # sediment storages - total silt
- RSED9 = ts['RSED9'] = zeros(simlen) # sediment storages - total clcay
- RSED10 = ts['RSED10'] = zeros(simlen) # sediment storages - total sand silt clay
- TSED1 = ts['TSED1'] = zeros(simlen) # Total sediment storages by fraction
- TSED2 = ts['TSED2'] = zeros(simlen) # Total sediment storages by fraction
- TSED3 = ts['TSED3'] = zeros(simlen) # Total sediment storages by fraction
- BEDDEP= ts['BEDDEP']= zeros(simlen) # Bed depth
- DEPSCR1 = ts['DEPSCR1'] = zeros(simlen) # Deposition (positive) or scour (negative) - sand
- DEPSCR2 = ts['DEPSCR2'] = zeros(simlen) # Deposition (positive) or scour (negative) - silt
- DEPSCR3 = ts['DEPSCR3'] = zeros(simlen) # Deposition (positive) or scour (negative) - clay
- DEPSCR4 = ts['DEPSCR4'] = zeros(simlen) # Deposition (positive) or scour (negative) - total
- ROSED1 = ts['ROSED1'] = zeros(simlen) # Total outflows of sediment from the rchres - sand
- ROSED2 = ts['ROSED2'] = zeros(simlen) # Total outflows of sediment from the rchres - silt
- ROSED3 = ts['ROSED3'] = zeros(simlen) # Total outflows of sediment from the rchres - clay
- ROSED4 = ts['ROSED4'] = zeros(simlen) # Total outflows of sediment from the rchres - total
- OSED1 = zeros((simlen, nexits))
- OSED2 = zeros((simlen, nexits))
- OSED3 = zeros((simlen, nexits))
- OSED4 = zeros((simlen, nexits))
-
- fact = 1.0 / total_bedfr # normalize fractions to sum to one
- sand_bedfr *= fact
- silt_bedfr *= fact
- clay_bedfr *= fact
- rhomn = sand_bedfr * sand_rho + silt_bedfr * silt_rho + clay_bedfr * clay_rho
-
- volsed = len_ * bedwid * beddep * (1.0 - por) # total volume of sediment particles- ft3 or m3
- rwtsed = volsed * rhomn # total weight relative to water- rhomn is in parts/part (same as kg/l)
- rwtsed = rwtsed * 1.0E06 # converts from kg/l to mg/l
-
- # find the weight of each fraction- units are (mg/l)*ft3 or (mg/l)*m3
- sand_wt_rsed4 = sand_bedfr * rwtsed
- silt_wt_rsed5 = silt_bedfr * rwtsed
- clay_wt_rsed6 = clay_bedfr * rwtsed
-
- # find the total quantity (bed and suspended) of each sediment size fraction
- sand_rsed1 = sand_ssed1 * vol
- sand_rssed1 = sand_t_rsed7 = sand_rsed1 + sand_wt_rsed4
-
- silt_rsed2 = silt_ssed2 * vol
- silt_rssed2 = silt_t_rsed8 = silt_rsed2 + silt_wt_rsed5
-
- clay_rsed3 = clay_ssed3 * vol
- clay_rssed3 = clay_t_rsed9 = clay_rsed3 + clay_wt_rsed6
-
- tsed1 = sand_rsed1 + silt_rsed2 + clay_rsed3
- tsed2 = sand_wt_rsed4 + silt_wt_rsed5 + clay_wt_rsed6
- tsed3 = total_rsed10 = sand_t_rsed7 + silt_t_rsed8 + clay_t_rsed9
-
- wsande = sand_w * 3.28 / delts # convert fall velocity from m/ivl to ft/sec
-
- VOL = ts['VOL']
- SROVOL = ts['SROVOL']
- EROVOL = ts['EROVOL']
- SOVOL = zeros((simlen, nexits))
- EOVOL = zeros((simlen, nexits))
- for i in range(nexits):
- SOVOL[:, i] = ts['SOVOL' + str(i + 1)]
- EOVOL[:, i] = ts['EOVOL' + str(i + 1)]
-
- #################### END PSED
-
- for loop in range(simlen):
-
- # perform any necessary unit conversions
- if uunits == 2: # uci is in metric units
- avvele = AVVEL[loop] * 3.28
- avdepm = AVDEP[loop]
- avdepe = AVDEP[loop] * 3.28
- rom = RO[loop]
- hrade = HRAD[loop] * 3.28
- twide = TWID[loop] * 3.28
- ised1 = ISED1[loop] / 2.83E-08
- ised2 = ISED2[loop] / 2.83E-08
- ised3 = ISED3[loop] / 2.83E-08
- else: # uci is in english units
- avvele = AVVEL[loop]
- avdepm = AVDEP[loop] * 0.3048
- avdepe = AVDEP[loop]
- rom = RO[loop] * 0.0283
- hrade = HRAD[loop]
- twide = TWID[loop]
- ised1 = ISED1[loop] / 3.121E-08
- ised2 = ISED2[loop] / 3.121E-08
- ised3 = ISED3[loop] / 3.121E-08
- tau = TAU[loop]
- tw = TW[loop]
- tw = (tw - 32.0) * 0.5555
-
- # Following is routine #&COHESV() to simulate behavior of cohesive sediments (silt and clay)
- # compute bed fractions based on relative storages
- totbed = silt_wt_rsed5 + clay_wt_rsed6
- frcsed1 = silt_wt_rsed5 / totbed if totbed > 0.0 else 0.5
- frcsed2 = clay_wt_rsed6 / totbed if totbed > 0.0 else 0.5
-
- vol = VOL[loop] * AFACT
- srovol = SROVOL[loop]
- erovol = EROVOL[loop]
- sovol = SOVOL[loop, :]
- eovol = EOVOL[loop, :]
- silt_ssed2, rosed2, osed2 = advect(ised2, silt_ssed2, nexits, svol, vol, srovol, erovol, sovol, eovol)
- silt_rsed2 = silt_ssed2 * vol # calculate exchange between bed and suspended sediment
- # vols = svol
-
- # consider deposition and scour
- if avdepe > 0.17:
- depscr2, silt_rsed2, silt_wt_rsed5 = bdexch(avdepm, silt_w, tau, silt_taucd, silt_taucs, silt_m, vol, frcsed1, silt_rsed2, silt_wt_rsed5)
- else:
- depscr2 = 0.0
- silt_ssed2 = silt_rsed2 / vol if vol > 0.0 else -1.0e30
-
- clay_ssed3, rosed3, osed3 = advect(ised3, clay_ssed3, nexits, svol, vol, srovol, erovol, sovol, eovol)
- clay_rsed3 = clay_ssed3 * vol # calculate exchange between bed and suspended sediment
-
- # consider deposition and scour
- if avdepe > 0.17:
- depscr3, clay_rsed3, clay_wt_rsed6 = bdexch(avdepm, clay_w, tau, clay_taucd, clay_taucs, clay_m, vol, frcsed2, clay_rsed3, clay_wt_rsed6)
- else:
- depscr3 = 0.0
- clay_ssed3 = clay_rsed3 / vol if vol > 0.0 else -1.0e30
- # end COHESV()
-
- # compute fine sediment load
- fsl = silt_ssed2 + clay_ssed3
- ksand = sand_ksand
- expsnd = sand_expsnd
-
- # simulate sandload. done after washload because washload affects sand transport if the colby method is used
- # Following code is #$SANDLD()
- sands = sand_ssed1 # save starting concentration value
- if vol > 0.0: # rchres contains water
- if rom > 0.0 and avdepe > 0.17: # there is outflow from the rchres- perform advection
- # calculate potential value of sand
- if sandfg == 1: # case 1 toffaleti equation
- gsi = toffaleti(avvele, db50e, hrade, slope, tw, wsande)
- psand = (gsi * twide * 10.5) / rom # convert potential sand transport rate to a concentration in mg/l
- elif sandfg == 2: # case 2 colby equation
- gsi, ferror, d50err, hrerr, velerr = colby(avvele, db50m, hrade, fsl, tw)
- if ferror == 1:
- pass # ERRMSG: fatal error ocurred in colby method- one or more variables went outside valid range- warn and switch to toffaleti method
- gsi = toffaleti(avvele, db50e, hrade, slope, tw, wsande) # switch to toffaleti method
- psand = (gsi * twide * 10.5) / rom # convert potential sand transport rate to conc in mg/l
- elif sandfg == 3: # case 3 input power function
- psand = ksand * avvele**expsnd
-
- prosnd = (sands * srovol) + (psand * erovol) # calculate potential outflow of sand during ivl
- pscour = (vol * psand) - (svol * sands) + prosnd - ised1 # qty.vol/l.ivl # calculate potential bed scour from, or to deposition
- if pscour < sand_wt_rsed4: # potential scour is satisfied by bed storage;
- # new conc. of sandload is potential conc.
- scour = pscour
- sand_ssed1 = psand
- sand_rsed1 = sand_ssed1 * vol
- sand_wt_rsed4 -= scour
- else: # potential scour cannot be satisfied; all of the available bed storage is scoured
- scour = sand_wt_rsed4
- sand_wt_rsed4 = 0.0
- sand_ssed1 = (ised1 + scour + sands * (svol - srovol)) / (vol + erovol) # calculate new conc. of suspended sandload
- sand_rsed1 = sand_ssed1 * vol # calculate new storage of suspended sandload
- rosed1 = (srovol * sands) + (erovol * sand_ssed1) # calculate total amount of sand leaving rchres during ivl
- osed1 = sovol * sands + eovol * sand_ssed1 # calculate amount of sand leaving through each exit gate in qty.vol/l.ivl
- else: # no outflow (still water) or water depth less than two inches
- sand_ssed1 = 0.0
- sand_rsed1 = 0.0
- scour = -ised1 - (sands * svol)
- sand_wt_rsed4 -= scour
- rosed1 = 0.0
- osed1 = zeros(nexits)
- else: # rchres is dry; set sand equal to an undefined number
- sand_ssed1 = -1.0e30
- sand_rsed1 = 0.0
- scour = -ised1 - (sands * svol) # calculate total amount of sand settling out during interval; this is equal to sand inflow + sand initially present
- sand_wt_rsed4 -= scour # update bed storage
- rosed1 = 0.0
- osed1 = zeros(nexits)
- depscr1 = -scour # calculate depth of bed scour or deposition; positive for deposition
- # end SANDLD()
-
- # set small concentrations to zero
- if abs(sand_ssed1) < 1.0e-15: # small conc., set to zero
- if depscr1 > 0.0: # deposition has occurred, add small storage to deposition
- depscr1 += sand_rsed1
- sand_wt_rsed4 += sand_rsed1
- else: # add small storage to outflow
- rosed1 += sand_rsed1
- depscr1 = 0.0
- if nexits > 1:
- for n in range(0,nexits):
- if osed1[n] > 0.0:
- osed1[n] += sand_rsed1
- break
- sand_rsed1 = 0.0
- sand_ssed1 = 0.0
-
- if abs(silt_ssed2) < 1.0e-15: # small conc., set to zero
- if depscr2 > 0.0: # deposition has occurred, add small storage to deposition
- depscr2 += silt_rsed2
- silt_wt_rsed5 += silt_rsed2
- else: # add small storage to outflow
- rosed2 += silt_rsed2
- depscr2 = 0.0
- if nexits > 1:
- for n in range(0, nexits):
- if osed2[n] > 0.0:
- osed2[n] += silt_rsed2
- break
- silt_rsed2 = 0.0
- silt_ssed2 = 0.0
-
- if abs(clay_ssed3) < 1.0e-15: # small conc., set to zero
- if depscr3 > 0.0: # deposition has occurred, add small storage to deposition
- depscr3 += clay_rsed3
- clay_wt_rsed6 += clay_rsed3
- else: # add small storage to outflow
- rosed3 += clay_rsed3
- depscr3 = 0.0
- if nexits > 1:
- for n in range(0, nexits):
- if osed3[n] > 0.0:
- osed3[n] += clay_rsed3
- break
- clay_rsed3 = 0.0
- clay_ssed3 = 0.0
-
- osed4 = zeros(nexits)
- # calculate total quantity of material in suspension and in the bed; check bed conditions
- osed4 += osed1
- sand_rssed1 = sand_t_rsed7 = sand_rsed1 + sand_wt_rsed4 # total storage in mg.vol/l
- if sand_wt_rsed4 == 0.0: # warn that bed is empty
- # errmsg
- errorsV[0] += 1 # The bed storage of sediment size fraction sand is empty.
-
- osed4 += osed2
- silt_rssed2 = silt_t_rsed8 = silt_rsed2 + silt_wt_rsed5 # total storage in mg.vol/l
- if silt_wt_rsed5 == 0.0: # warn that bed is empty
- # errmsg
- errorsV[1] += 1 # The bed storage of sediment size fraction silt is empty.
-
- osed4 += osed3
- clay_rssed3 = clay_t_rsed9 = clay_rsed3 + clay_wt_rsed6 # total storage in mg.vol/l
- if clay_wt_rsed6 == 0.0: # warn that bed is empty
- # errmsg
- errorsV[2] += 1 # The bed storage of sediment size fraction clay is empty.
-
- # find the volume occupied by each fraction of bed sediment- ft3 or m3
- volsed = (sand_wt_rsed4 / (sand_rho * 1.0e06)
- + silt_wt_rsed5 / (silt_rho * 1.0e06)
- + clay_wt_rsed6 / (clay_rho * 1.0e06))
-
- total_ssed4 = sand_ssed1 + silt_ssed2 + clay_ssed3
- tsed1 = sand_rsed1 + silt_rsed2 + clay_rsed3
- tsed2 = sand_wt_rsed4 + silt_wt_rsed5 + clay_wt_rsed6
- tsed3 = total_rsed10 = sand_t_rsed7 + silt_t_rsed8 + clay_t_rsed9
- depscr4 = depscr1 + depscr2 + depscr3
- rosed4 = rosed1 + rosed2 + rosed3
-
- # find total depth of sediment
- volsed = volsed / (1.0 - por) # allow for porosit
- beddep = volsed / (len_ * bedwid) # calculate thickness of bed- ft or m
- if beddep > bedwrn:
- # Errormsg: warn that bed depth appears excessive
- errorsV[3] += 1
-
- svol = vol # svol is volume at start of time step, update for next time thru
-
- SSED1[loop] = sand_ssed1
- SSED2[loop] = silt_ssed2
- SSED3[loop] = clay_ssed3
- SSED4[loop] = total_ssed4
- BEDDEP[loop]= beddep
- if uunits == 1:
- RSED1[loop] = sand_rsed1 * 3.121E-08
- RSED2[loop] = silt_rsed2 * 3.121E-08
- RSED3[loop] = clay_rsed3 * 3.121E-08
- RSED4[loop] = sand_wt_rsed4 * 3.121E-08
- RSED5[loop] = silt_wt_rsed5 * 3.121E-08
- RSED6[loop] = clay_wt_rsed6 * 3.121E-08
- RSED7[loop] = sand_t_rsed7 * 3.121E-08
- RSED8[loop] = silt_t_rsed8 * 3.121E-08
- RSED9[loop] = clay_t_rsed9 * 3.121E-08
- RSED10[loop] = total_rsed10 * 3.121E-08
- TSED1[loop] = tsed1 * 3.121E-08
- TSED2[loop] = tsed2 * 3.121E-08
- TSED3[loop] = tsed3 * 3.121E-08
- DEPSCR1[loop] = depscr1 * 3.121E-08
- DEPSCR2[loop] = depscr2 * 3.121E-08
- DEPSCR3[loop] = depscr3 * 3.121E-08
- DEPSCR4[loop] = depscr4 * 3.121E-08
- ROSED1[loop] = rosed1 * 3.121E-08
- ROSED2[loop] = rosed2 * 3.121E-08
- ROSED3[loop] = rosed3 * 3.121E-08
- ROSED4[loop] = rosed4 * 3.121E-08
- OSED1[loop] = osed1 * 3.121E-08
- OSED2[loop] = osed2 * 3.121E-08
- OSED3[loop] = osed3 * 3.121E-08
- OSED4[loop] = osed4 * 3.121E-08
- else:
- RSED1[loop] = sand_rsed1 * 1E-06
- RSED2[loop] = silt_rsed2 * 1E-06
- RSED3[loop] = clay_rsed3 * 1E-06
- RSED4[loop] = sand_wt_rsed4 * 1E-06
- RSED5[loop] = silt_wt_rsed5 * 1E-06
- RSED6[loop] = clay_wt_rsed6 * 1E-06
- RSED7[loop] = sand_t_rsed7 * 1E-06
- RSED8[loop] = silt_t_rsed8 * 1E-06
- RSED9[loop] = clay_t_rsed9 * 1E-06
- RSED10[loop] = total_rsed10 * 1E-06
- TSED1[loop] = tsed1 * 1E-06
- TSED2[loop] = tsed2 * 1E-06
- TSED3[loop] = tsed3 * 1E-06
- DEPSCR1[loop] = depscr1 * 1E-06
- DEPSCR2[loop] = depscr2 * 1E-06
- DEPSCR3[loop] = depscr3 * 1E-06
- DEPSCR4[loop] = depscr4 * 1E-06
- ROSED1[loop] = rosed1 * 1E-06 # 2.83E-08
- ROSED2[loop] = rosed2 * 1E-06
- ROSED3[loop] = rosed3 * 1E-06
- ROSED4[loop] = rosed4 * 1E-06
- OSED1[loop] = osed1 * 1E-06
- OSED2[loop] = osed2 * 1E-06
- OSED3[loop] = osed3 * 1E-06
- OSED4[loop] = osed4 * 1E-06
-
- if nexits > 1:
- for i in range(nexits):
- ts['OSED1' + str(i+1)] = OSED1[:, i]
- ts['OSED2' + str(i + 1)] = OSED2[:, i]
- ts['OSED3' + str(i + 1)] = OSED3[:, i]
- ts['OSED4' + str(i + 1)] = OSED4[:, i]
-
- return errorsV
-
-
-@njit(cache=True)
-def bdexch (avdepm, w, tau, taucd, taucs, m, vol, frcsed, susp, bed):
- ''' simulate deposition and scour of a cohesive sediment fraction- silt or clay'''
- if w > 0.0 and tau < taucd and susp > 1.0e-30: # deposition will occur
- expnt = -w / avdepm * (1.0 - tau / taucd)
- depmas = susp * (1.0 - exp(expnt))
- susp -= depmas
- bed += depmas
- else:
- depmas = 0.0 # no deposition- concentrations unchanged
-
- if tau > taucs and m > 0.0: # scour can occur- units are: m- kg/m2.ivl avdepm- m scr- mg/l
- scr = frcsed * m / avdepm * 1000.0 * (tau/taucs - 1.0)
- scrmas = min(bed, scr * vol) # check availability of material ???
-
- # update storages
- susp += scrmas
- bed -= scrmas
- else: # no scour
- scrmas = 0.0
- return depmas - scrmas, susp, bed # net deposition or scour, susp, bed
-
-
-''' Sediment Transport in Alluvial Channels, 1963-65 by Bruce Colby.
-This report explains the following empirical algorithm.'''
-
-@njit(cache=True)
-def colby(v, db50, fhrad, fsl, tempr):
-# Colby's method to calculate the capacity of the flow to transport sand.
-#
-# The colby method has the following units and applicable ranges of variables.
-# average velocity.............v.......fps.........1-10 fps
-# hydraulic radius.............fhrad...ft..........1-100 ft
-# median bed material size.....db50....mm..........0.1-0.8 mm
-# temperature..................tmpr....deg f.......32-100 deg.
-# fine sediment concentration..fsl.....mg/liter....0-200000 ppm
-# total sediment load..........gsi.....ton/day.ft..
- G = zeros((5,9,7)) # defined by Figure 26
- G[1, 1, 1], G[2, 1, 1], G[3, 1, 1], G[4, 1, 1] = 1.0, 0.30, 0.06, 0.00
- G[1, 2, 1], G[2, 2, 1], G[3, 2, 1], G[4, 2, 1] = 3.00, 3.30, 2.50, 2.00
- G[1, 3, 1], G[2, 3, 1], G[3, 3, 1], G[4, 3, 1] = 5.40, 9.0, 10.0, 20.0
- G[1, 4, 1], G[2, 4, 1], G[3, 4, 1], G[4, 4, 1] = 11.0, 26.0, 50.0, 150.0
- G[1, 5, 1], G[2, 5, 1], G[3, 5, 1], G[4, 5, 1] = 17.0, 49.0, 130.0, 500.0
- G[1, 6, 1], G[2, 6, 1], G[3, 6, 1], G[4, 6, 1] = 29.0, 101.0, 400.0, 1350.0
- G[1, 7, 1], G[2, 7, 1], G[3, 7, 1], G[4, 7, 1] = 44.0, 160.0, 700.0, 2500.0
- G[1, 8, 1], G[2, 8, 1], G[3, 8, 1], G[4, 8, 1] = 60.0, 220.0, 1000.0, 4400.0
- G[1, 1, 2], G[2, 1, 2], G[3, 1, 2], G[4, 1, 2] = 0.38, 0.06, 0.0, 0.0
- G[1, 2, 2], G[2, 2, 2], G[3, 2, 2], G[4, 2, 2] = 1.60, 1.20, 0.65, 0.10
- G[1, 3, 2], G[2, 3, 2], G[3, 3, 2], G[4, 3, 2] = 3.70, 5.0, 4.0, 3.0
- G[1, 4, 2], G[2, 4, 2], G[3, 4, 2], G[4, 4, 2] = 10.0, 18.0, 30.0, 52.0
- G[1, 5, 2], G[2, 5, 2], G[3, 5, 2], G[4, 5, 2] = 17.0, 40.0, 80.0, 160.0
- G[1, 6, 2], G[2, 6, 2], G[3, 6, 2], G[4, 6, 2] = 36.0, 95.0, 230.0, 650.0
- G[1, 7, 2], G[2, 7, 2], G[3, 7, 2], G[4, 7, 2] = 60.0, 150.0, 415.0, 1200.0
- G[1, 8, 2], G[2, 8, 2], G[3, 8, 2], G[4, 8, 2] = 81.0, 215.0, 620.0, 1500.0
- G[1, 1, 3], G[2, 1, 3], G[3, 1, 3], G[4, 1, 3] = 0.14, 0.0, 0.0, 0.0
- G[1, 2, 3], G[2, 2, 3], G[3, 2, 3], G[4, 2, 3] = 1.0, 0.60, 0.15, 0.0
- G[1, 3, 3], G[2, 3, 3], G[3, 3, 3], G[4, 3, 3] = 3.30, 3.00, 1.70, 0.50
- G[1, 4, 3], G[2, 4, 3], G[3, 4, 3], G[4, 4, 3] = 11.0, 15.0, 17.0, 14.0
- G[1, 5, 3], G[2, 5, 3], G[3, 5, 3], G[4, 5, 3] = 20.0, 35.0, 49.0, 70.0
- G[1, 6, 3], G[2, 6, 3], G[3, 6, 3], G[4, 6, 3] = 44.0, 85.0, 150.0, 250.0
- G[1, 7, 3], G[2, 7, 3], G[3, 7, 3], G[4, 7, 3] = 71.0, 145.0, 290.0, 500.0
- G[1, 8, 3], G[2, 8, 3], G[3, 8, 3], G[4, 8, 3] = 100.0, 202.0, 400.0, 700.0
- G[1, 1, 4], G[2, 1, 4], G[3, 1, 4], G[4, 1, 4] = 0.0, 0.0, 0.0, 0.0
- G[1, 2, 4], G[2, 2, 4], G[3, 2, 4], G[4, 2, 4] = 0.70, 0.30, 0.06, 0.0
- G[1, 3, 4], G[2, 3, 4], G[3, 3, 4], G[4, 3, 4] = 2.9, 2.3, 1.0, 0.06
- G[1, 4, 4], G[2, 4, 4], G[3, 4, 4], G[4, 4, 4] = 11.5, 13.0, 12.0, 7.0
- G[1, 5, 4], G[2, 5, 4], G[3, 5, 4], G[4, 5, 4] = 22.0, 31.0, 40.0, 50.0
- G[1, 6, 4], G[2, 6, 4], G[3, 6, 4], G[4, 6, 4] = 47.0, 84.0, 135.0, 210.0
- G[1, 7, 4], G[2, 7, 4], G[3, 7, 4], G[4, 7, 4] = 75.0, 140.0, 240.0, 410.0
- G[1, 8, 4], G[2, 8, 4], G[3, 8, 4], G[4, 8, 4] = 106.0, 190.0, 350.0, 630.0
- G[1, 1, 5], G[2, 1, 5], G[3, 1, 5], G[4, 1, 5] = 0.0, 0.0, 0.0, 0.0
- G[1, 2, 5], G[2, 2, 5], G[3, 2, 5], G[4, 2, 5] = 0.44, 0.06, 0.0, 0.0
- G[1, 3, 5], G[2, 3, 5], G[3, 3, 5], G[4, 3, 5] = 2.8, 1.8, 0.6, 0.0
- G[1, 4, 5], G[2, 4, 5], G[3, 4, 5], G[4, 4, 5] = 12.0, 12.5, 10.0, 4.5
- G[1, 5, 5], G[2, 5, 5], G[3, 5, 5], G[4, 5, 5] = 24.0, 30.0, 35.0, 37.0
- G[1, 6, 5], G[2, 6, 5], G[3, 6, 5], G[4, 6, 5] = 52.0, 78.0, 120.0, 190.0
- G[1, 7, 5], G[2, 7, 5], G[3, 7, 5], G[4, 7, 5] = 83.0, 180.0, 215.0, 380.0
- G[1, 8, 5], G[2, 8, 5], G[3, 8, 5], G[4, 8, 5] = 120.0, 190.0, 305.0, 550.0
- G[1, 1, 6], G[2, 1, 6], G[3, 1, 6], G[4, 1, 6] = 0.0, 0.0, 0.0, 0.0
- G[1, 2, 6], G[2, 2, 6], G[3, 2, 6], G[4, 2, 6] = 0.3, 0.0, 0.0, 0.0
- G[1, 3, 6], G[2, 3, 6], G[3, 3, 6], G[4, 3, 6] = 2.9, 1.4, 0.3, 0.0
- G[1, 4, 6], G[2, 4, 6], G[3, 4, 6], G[4, 4, 6] = 14.0, 11.0, 7.7, 3.0
- G[1, 5, 6], G[2, 5, 6], G[3, 5, 6], G[4, 5, 6] = 27.0, 29.0, 30.0, 30.0
- G[1, 6, 6], G[2, 6, 6], G[3, 6, 6], G[4, 6, 6] = 57.0, 75.0, 110.0, 170.0
- G[1, 7, 6], G[2, 7, 6], G[3, 7, 6], G[4, 7, 6] = 90.0, 140.0, 200.0, 330.0
- G[1, 8, 6], G[2, 8, 6], G[3, 8, 6], G[4, 8, 6] = 135.0, 190.0, 290.0, 520.0
-
- F = zeros((6,11)) # defined by Figure 24
- F[1, 1], F[2, 1], F[3, 1], F[4, 1], F[5, 1] = 1.0, 1.1, 1.6, 2.6, 4.2
- F[1, 2], F[2, 2], F[3, 2], F[4, 2], F[5, 2] = 1.0, 1.1, 1.65, 2.75, 4.9
- F[1, 3], F[2, 3], F[3, 3], F[4, 3], F[5, 3] = 1.0, 1.1, 1.7, 3.0, 5.5
- F[1, 4], F[2, 4], F[3, 4], F[4, 4], F[5, 4] = 1.0, 1.12, 1.9, 3.6, 7.0
- F[1, 5], F[2, 5], F[3, 5], F[4, 5], F[5, 5] = 1.0, 1.17, 2.05, 4.3, 8.7
- F[1, 6], F[2, 6], F[3, 6], F[4, 6], F[5, 6] = 1.0, 1.2, 2.3, 5.5, 11.2
- F[1, 7], F[2, 7], F[3, 7], F[4, 7], F[5, 7] = 1.0, 1.22, 2.75, 8.0, 22.0
- F[1, 8], F[2, 8], F[3, 8], F[4, 8], F[5, 8] = 1.0, 1.25, 3.0, 9.6, 29.0
- F[1, 9], F[2, 9], F[3, 9], F[4, 9], F[5, 9] = 1.0, 1.3, 3.5, 12.0, 43.0
- F[1, 10], F[2, 10], F[3, 10], F[4, 10], F[5, 10] = 1.0, 1.4, 4.9, 22.0, 120.0
-
- # T = array([[-999, -999, -999, -999, -999, -999, -999, -999],
- # [-999, 1.2, 1.15, 1.10, 0.96, 0.90, 0.85, 0.82],
- # [-999, 1.35, 1.25, 1.12, 0.92, 0.86, 0.80, 0.75],
- # [-999, 1.60, 1.40, 1.20, 0.89, 0.80, 0.72, 0.66],
- # [-999, 2.00, 1.65, 1.30, 0.85, 0.72, 0.63, 0.55]]).T # Temperature adjustment, Figure 24
-
- T = zeros((8,5))
- T[0, 0], T[0, 1], T[0, 2], T[0, 3], T[0, 4] = -999, -999, -999, -999, -999
- T[1, 0], T[1, 1], T[1, 2], T[1, 3], T[1, 4] = -999, 1.2, 1.35, 1.60, 2.00
- T[2, 0], T[2, 1], T[2, 2], T[2, 3], T[2, 4] = -999, 1.15, 1.25, 1.40, 1.65
- T[3, 0], T[3, 1], T[3, 2], T[3, 3], T[3, 4] = -999, 1.10, 1.12, 1.20, 1.30
- T[4, 0], T[4, 1], T[4, 2], T[4, 3], T[4, 4] = -999, 0.96, 0.92, 0.89, 0.85
- T[5, 0], T[5, 1], T[5, 2], T[5, 3], T[5, 4] = -999, 0.90, 0.86, 0.80, 0.72
- T[6, 0], T[6, 1], T[6, 2], T[6, 3], T[6, 4] = -999, 0.85, 0.80, 0.72, 0.63
- T[7, 0], T[7, 1], T[7, 2], T[7, 3], T[7, 4] = -999, 0.82, 0.75, 0.66, 0.55
-
- DF = array([-999, 0.10, 0.20, 0.30, 0.60, 1.00, 2.00, 6.00, 10.00, 20.00, 1.E2]) # Depths for Figure 24
- CF = array([-999, 0.00, 1.E4, 5.E4, 1.E5, 1.5E5]) # Concentrations of sediment for Figure 24
- P = array([-999, 0.60, 0.90, 1.0, 1.0, 0.83, 0.60, 0.40, 0.25, 0.15, 0.09, 0.05]) # Percentage Effect for Figure 24
- DP = array([-999, 0.10, 0.15, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00]) # Median diameters for Figure 24
- DG = array([-999, 0.10, 1.00, 10.0, 100.0]) # Depth values for Figure 26
- VG = array([-999, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0]) # Velocity values for Figure 26
- D50G = array([-999, 0.10, 0.20, 0.30, 0.40, 0.60, 0.80]) # Median values for figure 26
- TEMP = array([-999, 32.0, 40.0, 50.0, 70.0, 80.0, 90.0, 100.0]) # Temperatures for lookup in Figure 26
-
- ferror = 0
- d50err = 0
- hrerr = 0
- velerr = 0
-
- id501 = 0
- id502 = 0
- id1 = 0
- iv1 = 0
- it1 = 0
- if not 0.80 >= db50 >= 0.10: # D50G limits
- ferror = 1
- d50err = 1
- return 0.0, ferror, d50err, hrerr, velerr
- for id501, db50x in enumerate(D50G):
- if db50x > db50:
- break
- id501 -= 1
- id502 = id501 + 1
- zz1 = log10(D50G[id501])
- zz2 = log10(D50G[id502])
- zzratio = (log10(db50) - zz1) / (zz2 - zz1)
-
- if not 100.0 >= fhrad >= 0.10: # DG limits
- ferror = 1
- hrerr = 1
- return 0.0, ferror, d50err, hrerr, velerr
- for id1,dgx in enumerate(DG):
- if fhrad > dgx:
- break
- id1 = id1 + 1
- id2 = id1 + 1
- xx1 = log10(DG[id1])
- xx2 = log10(DG[id2])
- xxratio = (log10(fhrad) - xx1) / ((xx2 - xx1))
-
- if not 10.0 >= v >= 1.0: # VG limits
- ferror = 1
- velerr = 1
- return 0.0, ferror, d50err, hrerr, velerr
- for iv1, vx in enumerate(VG):
- if vx > v:
- break
- iv1 -= 1
- iv2 = iv1 + 1
- yy1 = log10(VG[iv1])
- yy2 = log10(VG[iv2])
- yyratio = (log10(v) - yy1) / (yy2 - yy1)
-
- tmpr = min(100.0, max(32.0, tempr * 1.8 + 32.0))
-
- x = zeros((3,3))
- xa= zeros(3)
- xg= zeros(3)
- for i,i1 in [(1, id1), (2, id2)]: # DO 200 I= 1,2; I1 = II(I)
- for j, j1 in [(1, iv1), (2, iv2)]: # DO 190 J= 1,2; J1 = JJ(J)
- for k, k1 in [(1, id501), (2, id502)]: # DO 180 K= 1,2; K1 = KK(K)
- if G[i1,j1,k1] > 0.0:
- x[j,k] = log10(G[i1,j1,k1])
- else:
- for j3 in range(j1,8): # DO 140 J3= J1,7
- if G[i1,j3,k1] > 0.0:
- break
- x[j,k] = log10(G[i1,j3,k1]) + (log10(VG[j1] / VG[j3])) * (log10(G[i1,j3+1,k1] / G[i1,j3,k1])) / (log10(VG[j3+1] / VG[j3]))
-
- xa[1] = x[1,1] + (x[1,2] - x[1,1]) * zzratio
- xa[2] = x[2,1] + (x[2,2] - x[2,1]) * zzratio
- xn3 = xa[2] - xa[1]
- xg[i] = xa[1] + xn3 * yyratio
-
- xn4 = xg[2] - xg[1]
- gtuc = 10.0**(xg[1] + (xn4 * xxratio)) # uncorrected gt in lb/sec/ft
-
- # Adjustment coefficient for temperature
- if abs(tmpr - 60.0) <= 1.0e-5:
- cft = 1.0
- else:
- for it1, tempx in enumerate(TEMP):
- if tempx > tmpr:
- break
- it2 = it1
- it1 -= 1
-
- xt11 = log10(T[it1][id1])
- xt21 = log10(T[it2][id1])
- xt12 = log10(T[it1][id2])
- xt22 = log10(T[it2][id2])
-
- xnt = log10(tmpr / TEMP[it1]) / log10(TEMP[it2] / TEMP[it1])
- xct1 = xt11 + xnt * (xt21 - xt11)
- xct2 = xt12 + xnt * (xt22 - xt12)
- cft = 10.0**(xct1 + (xct2 - xct1) * xxratio)
-
- # fine sediment load correction; (i.e. cohesive sediment or wash) load in mg/liter
- if fsl <= 10.0:
- cff = 1.0
- else:
- for id1, dfx in enumerate(DF):
- if dfx > fhrad:
- break
- id2 = id1 + 1
-
- if1 = 0
- if fsl > 1.0E+4:
- if1 = 4
- if2 = 5
- ERRMSG = '***** SUBROUTINE COLBY -- FSL WENT > 1.E+4'
- else:
- for if1, cfx in enumerate(CF):
- if cfx > fsl:
- break
- if2 = if1 + 1
-
- xf11 = log10(F[if1,id1])
- xf22 = log10(F[if2,id2])
- xf12 = log10(F[if1,id2])
- xf21 = log10(F[if2,id1])
-
- xnt = (fsl - CF[if1]) / (CF[if2] - CF[if1])
- xct1 = xf11 + xnt * (xf21 - xf11)
- xct2 = xf12 + xnt * (xf22 - xf12)
- xnt = log10(fhrad / DF[id1]) / log10(DF[id2] / DF[id1])
- cff = 10.0**(xct1 + xnt * (xct2 - xct1))
- tcf = cft * cff - 1.0
-
- # Percent effect correction for median diameter'''
- if 0.30 >= db50 >= 0.20:
- cfd = 1.0
- else:
- for ip1, db50x in enumerate(DP):
- if db50x > db50:
- break
- ip2 = ip1 + 1
-
- p1 = log10(P[ip1])
- p2 = log10(P[ip2])
- xnt = log10(db50 / DP[ip1]) / log10(DP[ip2] / DP[ip1])
-
- cfd = 10.0**(p1 + xnt * (p2 -p1))
-
- return gtuc * (cfd * tcf + 1.0), ferror, d50err, hrerr, velerr
-
-
-@njit(cache=True)
-def toffaleti(v, fdiam, fhrad, slope, tempr, vset):
- ''' Toffaleti's method to calculate the capacity of the flow to transport sand.'''
-
- tmpr = tempr * 1.80 + 32.0 # degrees c to degrees f
-
- # For water temperatures greater than 32f and less than 100f the kinematic viscosity is
- vis = 4.106e-4 * tmpr**-0.864
-
- # Assuming the d50 grain size is approximately equal to the Geometric mean grain size
- # and sigma-g = 1.5, the d65 grain size can be determined as 1.17*d50.
- d65 = 1.17 * fdiam
- cnv = 0.1198 + 0.00048 * tmpr
- cz = 260.67 - 0.667 * tmpr
- tt = 1.10 * (0.051 + 0.00009 * tmpr)
- zi = vset * v / (cz * fhrad * slope)
- if zi < cnv:
- zi = 1.5 * cnv
-
- # The manning-strickler equation is used here to Determine the hydraulic radius
- # component due to Grain roughness (r'). Taken from the 1975 asce
- # "sedimentation engineering",pg. 128.
- rprime = ((v**1.5) * (d65**0.25) / (slope**0.75)) * 0.00349
- ustar = (rprime * slope * 32.2)**0.5
-
- afunc = (vis * 1.0e5)**0.333 / (10.0 * ustar)
- if afunc <= 0.500: ac = (afunc / 4.89)**-1.45
- elif afunc <= 0.660: ac = (afunc / 0.0036)**0.67
- elif afunc <= 0.720: ac = (afunc / 0.29)**4.17
- elif afunc <= 1.25: ac = 48.0
- elif afunc > 1.25: ac = (afunc / 0.304)**2.74
-
- k4func = afunc * slope * d65 * 1.0e5
- if k4func <= 0.24: k4 = 1.0
- elif k4func <= 0.35: k4 = (k4func**1.10) * 4.81
- elif k4func > 0.35: k4 = (k4func** (-1.05)) * 0.49
-
- ack4 = ac * k4
- if ack4 - 16.0 < 0.0:
- ack4 = 16.0
- k4 = 16.0 / ac
- oczu = 1.0 + cnv - 1.5 * zi
- oczm = 1.0 + cnv - zi
- oczl= 1.0 + cnv - 0.756 * zi
- zinv = cnv - 0.758 * zi
- zm = -zinv
- zn = 1.0 + zinv
- zo = -0.736 * zi
- zp = 0.244 * zi
- zq = 0.5 * zi
-
- # Cli has been multiplied by 1.0e30 to keep it from Exceeding the computer overflow limit
- cli = (5.6e+22 * oczl * (v**2.333) / fhrad**(zm) / ((tt * ac * k4 * fdiam)**1.667)
- / (1.0 + cnv) / ((fhrad / 11.24)**(zn) - (2.0 * fdiam)**oczl))
- p1 = (2.0 * fdiam / fhrad)**(zo / 2.0)
- c2d = cli * p1 * p1 / 1.0e+30
-
- # Check to see if the calculated value is reasonable (< 100.0), and adjust it if it is not.
- if c2d > 100.0:
- cli = cli * 100.0 / c2d
- cmi = 43.2 * cli * (1.0 + cnv) * v * (fhrad**zm) # Cmi has been multiplied by 1.0e30 to keep it from computer overflow
-
- # upper layer transport capacity
- fd11 = fhrad / 11.24
- fd25 = fhrad / 2.5
- gsu = (cmi * (fd11**zp) * (fd25**zq) * (fhrad**oczu - (fd25**oczu)))/(oczu * 1.0e+30)
-
- gsm = (cmi * (fd11**zp) * (fd25**(oczm) - (fd11**oczm))) / (oczm * 1.0e+30) # middle layer transport capacity
- gsl = (cmi * ((fd11**(zn)) - ((2.0 * fdiam)**(oczl)))) / (oczl * 1.0e+30) # lower layer transport capacity
- gsb = (cmi * ((2.0 * fdiam)**(zn))) / 1.0e+30 # bed layer transport capacity
-
- return max(0.0, gsu + gsm + gsl + gsb) # Total transport capacity of the rchres (tons/day/ft)
-
-
-def expand_SEDTRN_masslinks(flags, uci, dat, recs):
- if flags['SEDTRN']:
- # ISED1
- rec = {}
- rec['MFACTOR'] = dat.MFACTOR
- rec['SGRPN'] = 'SEDTRN'
- if dat.SGRPN == "ROFLOW":
- rec['SMEMN'] = 'ROSED'
- rec['SMEMSB1'] = '1'
- rec['SMEMSB2'] = ''
- else:
- rec['SMEMN'] = 'OSED'
- rec['SMEMSB1'] = '1'
- rec['SMEMSB2'] = dat.SMEMSB1
- rec['TMEMN'] = 'ISED1'
- rec['TMEMSB1'] = dat.TMEMSB1
- rec['TMEMSB2'] = dat.TMEMSB2
- rec['SVOL'] = dat.SVOL
- recs.append(rec)
- # ISED2
- rec = {}
- rec['MFACTOR'] = dat.MFACTOR
- rec['SGRPN'] = 'SEDTRN'
- if dat.SGRPN == "ROFLOW":
- rec['SMEMN'] = 'ROSED'
- rec['SMEMSB1'] = '2'
- rec['SMEMSB2'] = ''
- else:
- rec['SMEMN'] = 'OSED'
- rec['SMEMSB1'] = '2'
- rec['SMEMSB2'] = dat.SMEMSB1
- rec['TMEMN'] = 'ISED2'
- rec['TMEMSB1'] = dat.TMEMSB1
- rec['TMEMSB2'] = dat.TMEMSB2
- rec['SVOL'] = dat.SVOL
- recs.append(rec)
- # ISED3
- rec = {}
- rec['MFACTOR'] = dat.MFACTOR
- rec['SGRPN'] = 'SEDTRN'
- if dat.SGRPN == "ROFLOW":
- rec['SMEMN'] = 'ROSED'
- rec['SMEMSB1'] = '3'
- rec['SMEMSB2'] = ''
- else:
- rec['SMEMN'] = 'OSED'
- rec['SMEMSB1'] = '3'
- rec['SMEMSB2'] = dat.SMEMSB1
- rec['TMEMN'] = 'ISED3'
- rec['TMEMSB1'] = dat.TMEMSB1
- rec['TMEMSB2'] = dat.TMEMSB2
- rec['SVOL'] = dat.SVOL
- recs.append(rec)
+''' Copyright (c) 2020 by RESPEC, INC.
+Authors: Robert Heaphy, Ph.D. and Paul Duda
+License: LGPL2
+'''
+
+from numpy import array, zeros, where, int64, arange
+from math import log10, exp
+from numba import njit
+from HSP2.ADCALC import advect
+from HSP2.utilities import make_numba_dict
+
+# the following imports added to handle special actions
+from HSP2.om import *
+from HSP2.om_model_linkage import *
+
+ERRMSGS =('SEDTRN: Warning -- bed storage of sediment size fraction sand is empty', #ERRMSG0
+ 'SEDTRN: Warning -- bed storage of sediment size fraction silt is empty', #ERRMSG1
+ 'SEDTRN: Warning -- bed storage of sediment size fraction clay is empty', #ERRMSG2
+ 'SEDTRN: Warning -- bed depth appears excessive', #ERRMSG3
+ 'SEDTRN: Fatal error ocurred in colby method- variable outside valid range- switching to toffaleti method', #ERRMSG4
+ 'SEDTRN: Simulation of sediment requires all 3 "auxiliary flags" (AUX1FG, etc) in section HYDR must be turned on', #ERRMSG5
+ 'SEDTRN: When specifying the initial composition of the bed, the fraction of sand, silt, and clay must sum to a value close to 1.0.') #ERRMSG6
+
+def sedtrn(io_manager, siminfo, uci, ts, state):
+ ''' Simulate behavior of inorganic sediment'''
+
+ # simlen = siminfo['steps']
+ # delt = siminfo['delt']
+ delt60 = siminfo['delt'] / 60
+ delts = siminfo['delt'] * 60
+ uunits = siminfo['units']
+
+ advectData = uci['advectData']
+ (nexits, vol, VOL, SROVOL, EROVOL, SOVOL, EOVOL) = advectData
+
+ ts['VOL'] = VOL
+ ts['SROVOL'] = SROVOL
+ ts['EROVOL'] = EROVOL
+ for i in range(nexits):
+ ts['SOVOL' + str(i + 1)] = SOVOL[:, i]
+ ts['EOVOL' + str(i + 1)] = EOVOL[:, i]
+
+ ui = make_numba_dict(uci)
+ ui['simlen'] = siminfo['steps']
+ ui['uunits'] = siminfo['units']
+ ui['vol'] = vol
+ ui['delts'] = siminfo['delt'] * 60
+ ui['delt60'] = siminfo['delt'] / 60
+ ui['errlen'] = len(ERRMSGS)
+
+ ui_silt = uci['SILT']
+ if uunits == 1:
+ ui['silt_d'] = ui_silt['D'] * 0.0833
+ ui['silt_w'] = ui_silt['W'] * delts * 0.0254 # convert settling velocity from m/sec to m/ivl
+ else:
+ ui['silt_d'] = ui_silt['D'] * 0.001
+ ui['silt_w'] = ui_silt['W'] * delts * 0.001 # convert settling velocity from m/sec to m/ivl
+ ui['silt_rho'] = ui_silt['RHO']
+ ui['silt_taucd'] = ui_silt['TAUCD']
+ ui['silt_taucs'] = ui_silt['TAUCS']
+ ui['silt_m'] = ui_silt['M'] * delt60 / 24.0 * 4.880 # convert erodibility coeff from /day to /ivl
+
+ ui_clay = uci['CLAY']
+ if uunits == 1:
+ ui['clay_d'] = ui_clay['D'] * 0.0833
+ ui['clay_w'] = ui_clay['W'] * delts * 0.0254 # convert settling velocity from m/sec to m/ivl
+ else:
+ ui['clay_d'] = ui_clay['D'] * 0.001
+ ui['clay_w'] = ui_clay['W'] * delts * 0.001 # convert settling velocity from m/sec to m/ivl
+ ui['clay_rho'] = ui_clay['RHO']
+ ui['clay_taucd'] = ui_clay['TAUCD']
+ ui['clay_taucs'] = ui_clay['TAUCS']
+ ui['clay_m'] = ui_clay['M'] * delt60 / 24.0 * 4.880 # convert erodibility coeff from /day to /ivl
+
+ #######################################################################################
+ # the following section (1 of 3) added to SEDTRN by pbd to handle special actions
+ #######################################################################################
+ # state_info is some generic things about the simulation
+ # must be numba safe, so we don't just pass the whole state which is not
+ state_info = Dict.empty(key_type=types.unicode_type, value_type=types.unicode_type)
+ state_info['operation'], state_info['segment'], state_info['activity'] = state['operation'], state['segment'], state['activity']
+ state_info['domain'], state_info['state_step_hydr'], state_info['state_step_om'] = state['domain'], state['state_step_hydr'], state['state_step_om']
+ # hsp2_local_py = state['hsp2_local_py']
+ # # It appears necessary to load this here, instead of from main.py, otherwise,
+ # # _hydr_() does not recognize the function state_step_hydr()?
+ # if (hsp2_local_py != False):
+ # from hsp2_local_py import state_step_hydr
+ # else:
+ # from HSP2.state_fn_defaults import state_step_hydr
+ # must split dicts out of state Dict since numba cannot handle mixed-type nested Dicts
+ # initialize the sedtrn paths in case they don't already reside here
+ sedtrn_init_ix(state, state['domain'])
+ state_ix, dict_ix, ts_ix = state['state_ix'], state['dict_ix'], state['ts_ix']
+ state_paths = state['state_paths']
+ op_tokens = state['op_tokens']
+ # Aggregate the list of all SEDTRN end point dependencies
+ ep_list = ['RSED4', 'RSED5', 'RSED6']
+ model_exec_list = model_domain_dependencies(state, state_info['domain'], ep_list)
+ model_exec_list = np.asarray(model_exec_list, dtype="i8") # format for use in numba
+ #######################################################################################
+
+ ############################################################################
+ errors = _sedtrn_(ui, ts, state_info, state_paths, state_ix, dict_ix, ts_ix, op_tokens, model_exec_list) # run SEDTRN simulation code
+ ############################################################################
+
+ if nexits > 1:
+ u = uci['SAVE']
+ key1 = 'OSED1'
+ key2 = 'OSED2'
+ key3 = 'OSED3'
+ key4 = 'OSED4'
+ for i in range(nexits):
+ u[f'{key1}{i + 1}'] = u[key1]
+ u[f'{key2}{i + 1}'] = u[key2]
+ u[f'{key3}{i + 1}'] = u[key3]
+ u[f'{key4}{i + 1}'] = u[key4]
+ del u[key1]
+ del u[key2]
+ del u[key3]
+ del u[key4]
+
+ return errors, ERRMSGS
+
+@njit(cache=True)
+def _sedtrn_(ui, ts, state_info, state_paths, state_ix, dict_ix, ts_ix, op_tokens, model_exec_list):
+ ''' Simulate behavior of inorganic sediment'''
+ errorsV = zeros(int(ui['errlen'])).astype(int64)
+
+ simlen = int(ui['simlen'])
+ uunits = int(ui['uunits'])
+ delts = ui['delts']
+ delt60 = ui['delt60']
+
+ AFACT = 43560.0
+ if uunits == 2:
+ # si units conversion
+ AFACT = 1000000.0
+ vol = ui['vol'] * AFACT
+
+ svol = vol
+ nexits = int(ui['NEXITS'])
+
+ # table SANDFG
+ sandfg = ui['SANDFG'] # 1: Toffaleti method, 2:Colby method, 3:old HSPF power function
+
+ if ui['AUX3FG'] == 0:
+ errorsV[5] += 1 # error - sediment transport requires aux3fg to be on
+
+ # table SED-GENPARM
+ bedwid = ui['BEDWID']
+ bedwrn = ui['BEDWRN']
+ por = ui['POR']
+
+ # table SED-HYDPARM
+ if uunits == 1:
+ len_ = ui['LEN'] * 5280
+ db50 = ui['DB50'] * 0.0833
+ else:
+ len_ = ui['LEN'] * 1000
+ db50 = ui['DB50'] * 0.001
+ delth = ui['DELTH']
+
+ # evaluate some quantities used in colby and/or toffaleti sand transport simulation methods
+ if uunits == 1:
+ db50e = db50
+ db50m = db50 * 304.8
+ else:
+ db50e = db50 * 3.28
+ db50m = db50 * 1000.0
+ slope = delth / len_
+
+ # SAND PARAMETERS; table SAND-PM
+ if uunits == 1:
+ sand_d = ui['D'] * 0.0833
+ sand_w = ui['W'] * delts * 0.0254 # convert settling velocity from m/sec to m/ivl
+ else:
+ sand_d = ui['D'] * 0.001
+ sand_w = ui['W'] * delts * 0.001 # convert settling velocity from m/sec to m/ivl
+ sand_rho = ui['RHO']
+ sand_ksand = ui['KSAND']
+ sand_expsnd = ui['EXPSND']
+
+ # SILT PARAMETERS; table SILT-CLAY-PM --- note: first occurance is silt
+ silt_d = ui['silt_d']
+ silt_w = ui['silt_w']
+ silt_rho = ui['silt_rho']
+ silt_taucd = ui['silt_taucd']
+ silt_taucs = ui['silt_taucs']
+ silt_m = ui['silt_m']
+
+ # CLAY PARAMETERS; table SILT-CLAY-PM --- note: second occurance is clay
+ clay_d = ui['clay_d']
+ clay_w = ui['clay_w']
+ clay_rho = ui['clay_rho']
+ clay_taucd = ui['clay_taucd']
+ clay_taucs = ui['clay_taucs']
+ clay_m = ui['clay_m']
+
+ # bed sediment conditions; table BED-INIT
+ beddep = ui['BEDDEP']
+ sand_bedfr = ui['SANDFR']
+ silt_bedfr = ui['SILTFR']
+ clay_bedfr = ui['CLAYFR']
+ total_bedfr = sand_bedfr + silt_bedfr + clay_bedfr
+ if abs(total_bedfr - 1.0) > 0.01:
+ errorsV[6] += 1 # error message: sum of bed sediment fractions is not close enough to 1.0
+
+ # suspended sediment concentrations; table ssed-init
+ sand_ssed1 = ui['SSED1']
+ silt_ssed2 = ui['SSED2']
+ clay_ssed3 = ui['SSED3']
+ total_ssed4 = sand_ssed1 + silt_ssed2 + clay_ssed3
+
+ # get input time series- inflow of sediment is in units of mg.ft3/l.ivl (english) or mg.m3/l.ivl (metric)
+ TAU = ts['TAU']
+ AVDEP = ts['AVDEP']
+ AVVEL = ts['AVVEL']
+ RO = ts['RO']
+ HRAD = ts['HRAD']
+ TWID = ts['TWID']
+
+ if not 'ISED1' in ts:
+ ts['ISED1'] = zeros(simlen)
+ if not 'ISED2' in ts:
+ ts['ISED2'] = zeros(simlen)
+ if not 'ISED3' in ts:
+ ts['ISED3'] = zeros(simlen)
+
+ ISED1 = ts['ISED1'] # if present, else ISED is identically zero; sand
+ ISED2 = ts['ISED2'] # if present, else ISED is identically zero; silt
+ ISED3 = ts['ISED3'] # if present, else ISED is identically zero; clay
+ ISED4 = ISED1 + ISED2 + ISED3
+
+ htfg = int(ui['HTFG'])
+ if htfg == 1:
+ TW = ts['TW']
+ if htfg == 0 and sandfg != 3:
+ TW = ts['TW']
+ TW = where(TW < -100.0, 20.0, TW)
+
+ # preallocate storage for computed time series
+ # WASH = ts['WASH'] = zeros(simlen) # washload concentration, state variable
+ # SAND = ts['SAND'] = zeros(simlen) # sandload oncentration, state variable
+ # BDSAND = ts['BDSAND'] = zeros(simlen) # bed storage of sand, state variable
+ # SDCF1_11 = ts['WASH'] = zeros(simlen) # deposition of washload on bed
+ # SDCF1_21 = ts['WASH'] = zeros(simlen) # total outflow of washload from RCHRES
+ # SDCF1_12 = ts['WASH'] = zeros(simlen) # exchange of sand between bed and suspended storage
+ # SDCF1_22 = ts['WASH'] = zeros(simlen) # total outflow of sandload from rchres
+ # SDCF2_1 = ts['SDCF2_1'] = zeros((simlen, nexits)) # washload outflow by gate
+ # SDCF2_2 = ts['SDCF2_2'] = zeros((simlen, nexits)) # sandload outflow by gate
+ # ossand = zeros(nexits)
+ SSED1 = ts['SSED1'] = zeros(simlen) # suspended sand concentration
+ SSED2 = ts['SSED2'] = zeros(simlen) # suspended silt concentration
+ SSED3 = ts['SSED3'] = zeros(simlen) # suspended clay concentration
+ SSED4 = ts['SSED4'] = zeros(simlen) # suspended sediment concentration
+ RSED1 = ts['RSED1'] = zeros(simlen) # sediment storages - suspended sand
+ RSED2 = ts['RSED2'] = zeros(simlen) # sediment storages - suspended silt
+ RSED3 = ts['RSED3'] = zeros(simlen) # sediment storages - suspended clay
+ RSED4 = ts['RSED4'] = zeros(simlen) # sediment storages - bed sand
+ RSED5 = ts['RSED5'] = zeros(simlen) # sediment storages - bed silt
+ RSED6 = ts['RSED6'] = zeros(simlen) # sediment storages - bed clay
+ RSED7 = ts['RSED7'] = zeros(simlen) # sediment storages - total sand
+ RSED8 = ts['RSED8'] = zeros(simlen) # sediment storages - total silt
+ RSED9 = ts['RSED9'] = zeros(simlen) # sediment storages - total clcay
+ RSED10 = ts['RSED10'] = zeros(simlen) # sediment storages - total sand silt clay
+ TSED1 = ts['TSED1'] = zeros(simlen) # Total sediment storages by fraction
+ TSED2 = ts['TSED2'] = zeros(simlen) # Total sediment storages by fraction
+ TSED3 = ts['TSED3'] = zeros(simlen) # Total sediment storages by fraction
+ BEDDEP= ts['BEDDEP']= zeros(simlen) # Bed depth
+ DEPSCR1 = ts['DEPSCR1'] = zeros(simlen) # Deposition (positive) or scour (negative) - sand
+ DEPSCR2 = ts['DEPSCR2'] = zeros(simlen) # Deposition (positive) or scour (negative) - silt
+ DEPSCR3 = ts['DEPSCR3'] = zeros(simlen) # Deposition (positive) or scour (negative) - clay
+ DEPSCR4 = ts['DEPSCR4'] = zeros(simlen) # Deposition (positive) or scour (negative) - total
+ ROSED1 = ts['ROSED1'] = zeros(simlen) # Total outflows of sediment from the rchres - sand
+ ROSED2 = ts['ROSED2'] = zeros(simlen) # Total outflows of sediment from the rchres - silt
+ ROSED3 = ts['ROSED3'] = zeros(simlen) # Total outflows of sediment from the rchres - clay
+ ROSED4 = ts['ROSED4'] = zeros(simlen) # Total outflows of sediment from the rchres - total
+ OSED1 = zeros((simlen, nexits))
+ OSED2 = zeros((simlen, nexits))
+ OSED3 = zeros((simlen, nexits))
+ OSED4 = zeros((simlen, nexits))
+
+ fact = 1.0 / total_bedfr # normalize fractions to sum to one
+ sand_bedfr *= fact
+ silt_bedfr *= fact
+ clay_bedfr *= fact
+ rhomn = sand_bedfr * sand_rho + silt_bedfr * silt_rho + clay_bedfr * clay_rho
+
+ volsed = len_ * bedwid * beddep * (1.0 - por) # total volume of sediment particles- ft3 or m3
+ rwtsed = volsed * rhomn # total weight relative to water- rhomn is in parts/part (same as kg/l)
+ rwtsed = rwtsed * 1.0E06 # converts from kg/l to mg/l
+
+ # find the weight of each fraction- units are (mg/l)*ft3 or (mg/l)*m3
+ sand_wt_rsed4 = sand_bedfr * rwtsed
+ silt_wt_rsed5 = silt_bedfr * rwtsed
+ clay_wt_rsed6 = clay_bedfr * rwtsed
+
+ # find the total quantity (bed and suspended) of each sediment size fraction
+ sand_rsed1 = sand_ssed1 * vol
+ sand_rssed1 = sand_t_rsed7 = sand_rsed1 + sand_wt_rsed4
+
+ silt_rsed2 = silt_ssed2 * vol
+ silt_rssed2 = silt_t_rsed8 = silt_rsed2 + silt_wt_rsed5
+
+ clay_rsed3 = clay_ssed3 * vol
+ clay_rssed3 = clay_t_rsed9 = clay_rsed3 + clay_wt_rsed6
+
+ tsed1 = sand_rsed1 + silt_rsed2 + clay_rsed3
+ tsed2 = sand_wt_rsed4 + silt_wt_rsed5 + clay_wt_rsed6
+ tsed3 = total_rsed10 = sand_t_rsed7 + silt_t_rsed8 + clay_t_rsed9
+
+ wsande = sand_w * 3.28 / delts # convert fall velocity from m/ivl to ft/sec
+
+ VOL = ts['VOL']
+ SROVOL = ts['SROVOL']
+ EROVOL = ts['EROVOL']
+ SOVOL = zeros((simlen, nexits))
+ EOVOL = zeros((simlen, nexits))
+ for i in range(nexits):
+ SOVOL[:, i] = ts['SOVOL' + str(i + 1)]
+ EOVOL[:, i] = ts['EOVOL' + str(i + 1)]
+
+ #################### END PSED
+
+ #######################################################################################
+ # the following section (2 of 3) added by pbd to SEDTRN, this one to prepare for special actions
+ #######################################################################################
+ sedtrn_ix = sedtrn_get_ix(state_ix, state_paths, state_info['domain'])
+ # these are integer placeholders faster than calling the array look each timestep
+ rsed4_ix, rsed5_ix, rsed6_ix = sedtrn_ix['RSED4'], sedtrn_ix['RSED5'], sedtrn_ix['RSED6']
+ #######################################################################################
+
+ for loop in range(simlen):
+
+ #######################################################################################
+ # the following section (3 of 3) added by pbd to accommodate special actions
+ #######################################################################################
+ # set state_ix with value of local state variables and/or needed vars
+ state_ix[rsed4_ix] = sand_wt_rsed4
+ state_ix[rsed5_ix] = silt_wt_rsed5
+ state_ix[rsed6_ix] = clay_wt_rsed6
+ if (state_info['state_step_om'] == 'enabled'):
+ step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, loop) # traditional 'ACTIONS' done in here
+ # Do write-backs for editable STATE variables
+ sand_wt_rsed4 = state_ix[rsed4_ix]
+ silt_wt_rsed5 = state_ix[rsed5_ix]
+ clay_wt_rsed6 = state_ix[rsed6_ix]
+ #######################################################################################
+
+ # perform any necessary unit conversions
+ if uunits == 2: # uci is in metric units
+ avvele = AVVEL[loop] * 3.28
+ avdepm = AVDEP[loop]
+ avdepe = AVDEP[loop] * 3.28
+ rom = RO[loop]
+ hrade = HRAD[loop] * 3.28
+ twide = TWID[loop] * 3.28
+ ised1 = ISED1[loop] / 2.83E-08
+ ised2 = ISED2[loop] / 2.83E-08
+ ised3 = ISED3[loop] / 2.83E-08
+ else: # uci is in english units
+ avvele = AVVEL[loop]
+ avdepm = AVDEP[loop] * 0.3048
+ avdepe = AVDEP[loop]
+ rom = RO[loop] * 0.0283
+ hrade = HRAD[loop]
+ twide = TWID[loop]
+ ised1 = ISED1[loop] / 3.121E-08
+ ised2 = ISED2[loop] / 3.121E-08
+ ised3 = ISED3[loop] / 3.121E-08
+ tau = TAU[loop]
+ tw = TW[loop]
+ tw = (tw - 32.0) * 0.5555
+
+ # Following is routine #&COHESV() to simulate behavior of cohesive sediments (silt and clay)
+ # compute bed fractions based on relative storages
+ totbed = silt_wt_rsed5 + clay_wt_rsed6
+ frcsed1 = silt_wt_rsed5 / totbed if totbed > 0.0 else 0.5
+ frcsed2 = clay_wt_rsed6 / totbed if totbed > 0.0 else 0.5
+
+ vol = VOL[loop] * AFACT
+ srovol = SROVOL[loop]
+ erovol = EROVOL[loop]
+ sovol = SOVOL[loop, :]
+ eovol = EOVOL[loop, :]
+ silt_ssed2, rosed2, osed2 = advect(ised2, silt_ssed2, nexits, svol, vol, srovol, erovol, sovol, eovol)
+ silt_rsed2 = silt_ssed2 * vol # calculate exchange between bed and suspended sediment
+ # vols = svol
+
+ # consider deposition and scour
+ if avdepe > 0.17:
+ depscr2, silt_rsed2, silt_wt_rsed5 = bdexch(avdepm, silt_w, tau, silt_taucd, silt_taucs, silt_m, vol, frcsed1, silt_rsed2, silt_wt_rsed5)
+ else:
+ depscr2 = 0.0
+ silt_ssed2 = silt_rsed2 / vol if vol > 0.0 else -1.0e30
+
+ clay_ssed3, rosed3, osed3 = advect(ised3, clay_ssed3, nexits, svol, vol, srovol, erovol, sovol, eovol)
+ clay_rsed3 = clay_ssed3 * vol # calculate exchange between bed and suspended sediment
+
+ # consider deposition and scour
+ if avdepe > 0.17:
+ depscr3, clay_rsed3, clay_wt_rsed6 = bdexch(avdepm, clay_w, tau, clay_taucd, clay_taucs, clay_m, vol, frcsed2, clay_rsed3, clay_wt_rsed6)
+ else:
+ depscr3 = 0.0
+ clay_ssed3 = clay_rsed3 / vol if vol > 0.0 else -1.0e30
+ # end COHESV()
+
+ # compute fine sediment load
+ fsl = silt_ssed2 + clay_ssed3
+ ksand = sand_ksand
+ expsnd = sand_expsnd
+
+ # simulate sandload. done after washload because washload affects sand transport if the colby method is used
+ # Following code is #$SANDLD()
+ sands = sand_ssed1 # save starting concentration value
+ if vol > 0.0: # rchres contains water
+ if rom > 0.0 and avdepe > 0.17: # there is outflow from the rchres- perform advection
+ # calculate potential value of sand
+ if sandfg == 1: # case 1 toffaleti equation
+ gsi = toffaleti(avvele, db50e, hrade, slope, tw, wsande)
+ psand = (gsi * twide * 10.5) / rom # convert potential sand transport rate to a concentration in mg/l
+ elif sandfg == 2: # case 2 colby equation
+ gsi, ferror, d50err, hrerr, velerr = colby(avvele, db50m, hrade, fsl, tw)
+ if ferror == 1:
+ pass # ERRMSG: fatal error ocurred in colby method- one or more variables went outside valid range- warn and switch to toffaleti method
+ gsi = toffaleti(avvele, db50e, hrade, slope, tw, wsande) # switch to toffaleti method
+ psand = (gsi * twide * 10.5) / rom # convert potential sand transport rate to conc in mg/l
+ elif sandfg == 3: # case 3 input power function
+ psand = ksand * avvele**expsnd
+
+ prosnd = (sands * srovol) + (psand * erovol) # calculate potential outflow of sand during ivl
+ pscour = (vol * psand) - (svol * sands) + prosnd - ised1 # qty.vol/l.ivl # calculate potential bed scour from, or to deposition
+ if pscour < sand_wt_rsed4: # potential scour is satisfied by bed storage;
+ # new conc. of sandload is potential conc.
+ scour = pscour
+ sand_ssed1 = psand
+ sand_rsed1 = sand_ssed1 * vol
+ sand_wt_rsed4 -= scour
+ else: # potential scour cannot be satisfied; all of the available bed storage is scoured
+ scour = sand_wt_rsed4
+ sand_wt_rsed4 = 0.0
+ sand_ssed1 = (ised1 + scour + sands * (svol - srovol)) / (vol + erovol) # calculate new conc. of suspended sandload
+ sand_rsed1 = sand_ssed1 * vol # calculate new storage of suspended sandload
+ rosed1 = (srovol * sands) + (erovol * sand_ssed1) # calculate total amount of sand leaving rchres during ivl
+ osed1 = sovol * sands + eovol * sand_ssed1 # calculate amount of sand leaving through each exit gate in qty.vol/l.ivl
+ else: # no outflow (still water) or water depth less than two inches
+ sand_ssed1 = 0.0
+ sand_rsed1 = 0.0
+ scour = -ised1 - (sands * svol)
+ sand_wt_rsed4 -= scour
+ rosed1 = 0.0
+ osed1 = zeros(nexits)
+ else: # rchres is dry; set sand equal to an undefined number
+ sand_ssed1 = -1.0e30
+ sand_rsed1 = 0.0
+ scour = -ised1 - (sands * svol) # calculate total amount of sand settling out during interval; this is equal to sand inflow + sand initially present
+ sand_wt_rsed4 -= scour # update bed storage
+ rosed1 = 0.0
+ osed1 = zeros(nexits)
+ depscr1 = -scour # calculate depth of bed scour or deposition; positive for deposition
+ # end SANDLD()
+
+ # set small concentrations to zero
+ if abs(sand_ssed1) < 1.0e-15: # small conc., set to zero
+ if depscr1 > 0.0: # deposition has occurred, add small storage to deposition
+ depscr1 += sand_rsed1
+ sand_wt_rsed4 += sand_rsed1
+ else: # add small storage to outflow
+ rosed1 += sand_rsed1
+ depscr1 = 0.0
+ if nexits > 1:
+ for n in range(0,nexits):
+ if osed1[n] > 0.0:
+ osed1[n] += sand_rsed1
+ break
+ sand_rsed1 = 0.0
+ sand_ssed1 = 0.0
+
+ if abs(silt_ssed2) < 1.0e-15: # small conc., set to zero
+ if depscr2 > 0.0: # deposition has occurred, add small storage to deposition
+ depscr2 += silt_rsed2
+ silt_wt_rsed5 += silt_rsed2
+ else: # add small storage to outflow
+ rosed2 += silt_rsed2
+ depscr2 = 0.0
+ if nexits > 1:
+ for n in range(0, nexits):
+ if osed2[n] > 0.0:
+ osed2[n] += silt_rsed2
+ break
+ silt_rsed2 = 0.0
+ silt_ssed2 = 0.0
+
+ if abs(clay_ssed3) < 1.0e-15: # small conc., set to zero
+ if depscr3 > 0.0: # deposition has occurred, add small storage to deposition
+ depscr3 += clay_rsed3
+ clay_wt_rsed6 += clay_rsed3
+ else: # add small storage to outflow
+ rosed3 += clay_rsed3
+ depscr3 = 0.0
+ if nexits > 1:
+ for n in range(0, nexits):
+ if osed3[n] > 0.0:
+ osed3[n] += clay_rsed3
+ break
+ clay_rsed3 = 0.0
+ clay_ssed3 = 0.0
+
+ osed4 = zeros(nexits)
+ # calculate total quantity of material in suspension and in the bed; check bed conditions
+ osed4 += osed1
+ sand_rssed1 = sand_t_rsed7 = sand_rsed1 + sand_wt_rsed4 # total storage in mg.vol/l
+ if sand_wt_rsed4 == 0.0: # warn that bed is empty
+ # errmsg
+ errorsV[0] += 1 # The bed storage of sediment size fraction sand is empty.
+
+ osed4 += osed2
+ silt_rssed2 = silt_t_rsed8 = silt_rsed2 + silt_wt_rsed5 # total storage in mg.vol/l
+ if silt_wt_rsed5 == 0.0: # warn that bed is empty
+ # errmsg
+ errorsV[1] += 1 # The bed storage of sediment size fraction silt is empty.
+
+ osed4 += osed3
+ clay_rssed3 = clay_t_rsed9 = clay_rsed3 + clay_wt_rsed6 # total storage in mg.vol/l
+ if clay_wt_rsed6 == 0.0: # warn that bed is empty
+ # errmsg
+ errorsV[2] += 1 # The bed storage of sediment size fraction clay is empty.
+
+ # find the volume occupied by each fraction of bed sediment- ft3 or m3
+ volsed = (sand_wt_rsed4 / (sand_rho * 1.0e06)
+ + silt_wt_rsed5 / (silt_rho * 1.0e06)
+ + clay_wt_rsed6 / (clay_rho * 1.0e06))
+
+ total_ssed4 = sand_ssed1 + silt_ssed2 + clay_ssed3
+ tsed1 = sand_rsed1 + silt_rsed2 + clay_rsed3
+ tsed2 = sand_wt_rsed4 + silt_wt_rsed5 + clay_wt_rsed6
+ tsed3 = total_rsed10 = sand_t_rsed7 + silt_t_rsed8 + clay_t_rsed9
+ depscr4 = depscr1 + depscr2 + depscr3
+ rosed4 = rosed1 + rosed2 + rosed3
+
+ # find total depth of sediment
+ volsed = volsed / (1.0 - por) # allow for porosit
+ beddep = volsed / (len_ * bedwid) # calculate thickness of bed- ft or m
+ if beddep > bedwrn:
+ # Errormsg: warn that bed depth appears excessive
+ errorsV[3] += 1
+
+ svol = vol # svol is volume at start of time step, update for next time thru
+
+ SSED1[loop] = sand_ssed1
+ SSED2[loop] = silt_ssed2
+ SSED3[loop] = clay_ssed3
+ SSED4[loop] = total_ssed4
+ BEDDEP[loop]= beddep
+ if uunits == 1:
+ RSED1[loop] = sand_rsed1 * 3.121E-08
+ RSED2[loop] = silt_rsed2 * 3.121E-08
+ RSED3[loop] = clay_rsed3 * 3.121E-08
+ RSED4[loop] = sand_wt_rsed4 * 3.121E-08
+ RSED5[loop] = silt_wt_rsed5 * 3.121E-08
+ RSED6[loop] = clay_wt_rsed6 * 3.121E-08
+ RSED7[loop] = sand_t_rsed7 * 3.121E-08
+ RSED8[loop] = silt_t_rsed8 * 3.121E-08
+ RSED9[loop] = clay_t_rsed9 * 3.121E-08
+ RSED10[loop] = total_rsed10 * 3.121E-08
+ TSED1[loop] = tsed1 * 3.121E-08
+ TSED2[loop] = tsed2 * 3.121E-08
+ TSED3[loop] = tsed3 * 3.121E-08
+ DEPSCR1[loop] = depscr1 * 3.121E-08
+ DEPSCR2[loop] = depscr2 * 3.121E-08
+ DEPSCR3[loop] = depscr3 * 3.121E-08
+ DEPSCR4[loop] = depscr4 * 3.121E-08
+ ROSED1[loop] = rosed1 * 3.121E-08
+ ROSED2[loop] = rosed2 * 3.121E-08
+ ROSED3[loop] = rosed3 * 3.121E-08
+ ROSED4[loop] = rosed4 * 3.121E-08
+ OSED1[loop] = osed1 * 3.121E-08
+ OSED2[loop] = osed2 * 3.121E-08
+ OSED3[loop] = osed3 * 3.121E-08
+ OSED4[loop] = osed4 * 3.121E-08
+ else:
+ RSED1[loop] = sand_rsed1 * 1E-06
+ RSED2[loop] = silt_rsed2 * 1E-06
+ RSED3[loop] = clay_rsed3 * 1E-06
+ RSED4[loop] = sand_wt_rsed4 * 1E-06
+ RSED5[loop] = silt_wt_rsed5 * 1E-06
+ RSED6[loop] = clay_wt_rsed6 * 1E-06
+ RSED7[loop] = sand_t_rsed7 * 1E-06
+ RSED8[loop] = silt_t_rsed8 * 1E-06
+ RSED9[loop] = clay_t_rsed9 * 1E-06
+ RSED10[loop] = total_rsed10 * 1E-06
+ TSED1[loop] = tsed1 * 1E-06
+ TSED2[loop] = tsed2 * 1E-06
+ TSED3[loop] = tsed3 * 1E-06
+ DEPSCR1[loop] = depscr1 * 1E-06
+ DEPSCR2[loop] = depscr2 * 1E-06
+ DEPSCR3[loop] = depscr3 * 1E-06
+ DEPSCR4[loop] = depscr4 * 1E-06
+ ROSED1[loop] = rosed1 * 1E-06 # 2.83E-08
+ ROSED2[loop] = rosed2 * 1E-06
+ ROSED3[loop] = rosed3 * 1E-06
+ ROSED4[loop] = rosed4 * 1E-06
+ OSED1[loop] = osed1 * 1E-06
+ OSED2[loop] = osed2 * 1E-06
+ OSED3[loop] = osed3 * 1E-06
+ OSED4[loop] = osed4 * 1E-06
+
+ if nexits > 1:
+ for i in range(nexits):
+ ts['OSED1' + str(i+1)] = OSED1[:, i]
+ ts['OSED2' + str(i + 1)] = OSED2[:, i]
+ ts['OSED3' + str(i + 1)] = OSED3[:, i]
+ ts['OSED4' + str(i + 1)] = OSED4[:, i]
+
+ return errorsV
+
+
+@njit(cache=True)
+def bdexch (avdepm, w, tau, taucd, taucs, m, vol, frcsed, susp, bed):
+ ''' simulate deposition and scour of a cohesive sediment fraction- silt or clay'''
+ if w > 0.0 and tau < taucd and susp > 1.0e-30: # deposition will occur
+ expnt = -w / avdepm * (1.0 - tau / taucd)
+ depmas = susp * (1.0 - exp(expnt))
+ susp -= depmas
+ bed += depmas
+ else:
+ depmas = 0.0 # no deposition- concentrations unchanged
+
+ if tau > taucs and m > 0.0: # scour can occur- units are: m- kg/m2.ivl avdepm- m scr- mg/l
+ scr = frcsed * m / avdepm * 1000.0 * (tau/taucs - 1.0)
+ scrmas = min(bed, scr * vol) # check availability of material ???
+
+ # update storages
+ susp += scrmas
+ bed -= scrmas
+ else: # no scour
+ scrmas = 0.0
+ return depmas - scrmas, susp, bed # net deposition or scour, susp, bed
+
+
+''' Sediment Transport in Alluvial Channels, 1963-65 by Bruce Colby.
+This report explains the following empirical algorithm.'''
+
+@njit(cache=True)
+def colby(v, db50, fhrad, fsl, tempr):
+# Colby's method to calculate the capacity of the flow to transport sand.
+#
+# The colby method has the following units and applicable ranges of variables.
+# average velocity.............v.......fps.........1-10 fps
+# hydraulic radius.............fhrad...ft..........1-100 ft
+# median bed material size.....db50....mm..........0.1-0.8 mm
+# temperature..................tmpr....deg f.......32-100 deg.
+# fine sediment concentration..fsl.....mg/liter....0-200000 ppm
+# total sediment load..........gsi.....ton/day.ft..
+ G = zeros((5,9,7)) # defined by Figure 26
+ G[1, 1, 1], G[2, 1, 1], G[3, 1, 1], G[4, 1, 1] = 1.0, 0.30, 0.06, 0.00
+ G[1, 2, 1], G[2, 2, 1], G[3, 2, 1], G[4, 2, 1] = 3.00, 3.30, 2.50, 2.00
+ G[1, 3, 1], G[2, 3, 1], G[3, 3, 1], G[4, 3, 1] = 5.40, 9.0, 10.0, 20.0
+ G[1, 4, 1], G[2, 4, 1], G[3, 4, 1], G[4, 4, 1] = 11.0, 26.0, 50.0, 150.0
+ G[1, 5, 1], G[2, 5, 1], G[3, 5, 1], G[4, 5, 1] = 17.0, 49.0, 130.0, 500.0
+ G[1, 6, 1], G[2, 6, 1], G[3, 6, 1], G[4, 6, 1] = 29.0, 101.0, 400.0, 1350.0
+ G[1, 7, 1], G[2, 7, 1], G[3, 7, 1], G[4, 7, 1] = 44.0, 160.0, 700.0, 2500.0
+ G[1, 8, 1], G[2, 8, 1], G[3, 8, 1], G[4, 8, 1] = 60.0, 220.0, 1000.0, 4400.0
+ G[1, 1, 2], G[2, 1, 2], G[3, 1, 2], G[4, 1, 2] = 0.38, 0.06, 0.0, 0.0
+ G[1, 2, 2], G[2, 2, 2], G[3, 2, 2], G[4, 2, 2] = 1.60, 1.20, 0.65, 0.10
+ G[1, 3, 2], G[2, 3, 2], G[3, 3, 2], G[4, 3, 2] = 3.70, 5.0, 4.0, 3.0
+ G[1, 4, 2], G[2, 4, 2], G[3, 4, 2], G[4, 4, 2] = 10.0, 18.0, 30.0, 52.0
+ G[1, 5, 2], G[2, 5, 2], G[3, 5, 2], G[4, 5, 2] = 17.0, 40.0, 80.0, 160.0
+ G[1, 6, 2], G[2, 6, 2], G[3, 6, 2], G[4, 6, 2] = 36.0, 95.0, 230.0, 650.0
+ G[1, 7, 2], G[2, 7, 2], G[3, 7, 2], G[4, 7, 2] = 60.0, 150.0, 415.0, 1200.0
+ G[1, 8, 2], G[2, 8, 2], G[3, 8, 2], G[4, 8, 2] = 81.0, 215.0, 620.0, 1500.0
+ G[1, 1, 3], G[2, 1, 3], G[3, 1, 3], G[4, 1, 3] = 0.14, 0.0, 0.0, 0.0
+ G[1, 2, 3], G[2, 2, 3], G[3, 2, 3], G[4, 2, 3] = 1.0, 0.60, 0.15, 0.0
+ G[1, 3, 3], G[2, 3, 3], G[3, 3, 3], G[4, 3, 3] = 3.30, 3.00, 1.70, 0.50
+ G[1, 4, 3], G[2, 4, 3], G[3, 4, 3], G[4, 4, 3] = 11.0, 15.0, 17.0, 14.0
+ G[1, 5, 3], G[2, 5, 3], G[3, 5, 3], G[4, 5, 3] = 20.0, 35.0, 49.0, 70.0
+ G[1, 6, 3], G[2, 6, 3], G[3, 6, 3], G[4, 6, 3] = 44.0, 85.0, 150.0, 250.0
+ G[1, 7, 3], G[2, 7, 3], G[3, 7, 3], G[4, 7, 3] = 71.0, 145.0, 290.0, 500.0
+ G[1, 8, 3], G[2, 8, 3], G[3, 8, 3], G[4, 8, 3] = 100.0, 202.0, 400.0, 700.0
+ G[1, 1, 4], G[2, 1, 4], G[3, 1, 4], G[4, 1, 4] = 0.0, 0.0, 0.0, 0.0
+ G[1, 2, 4], G[2, 2, 4], G[3, 2, 4], G[4, 2, 4] = 0.70, 0.30, 0.06, 0.0
+ G[1, 3, 4], G[2, 3, 4], G[3, 3, 4], G[4, 3, 4] = 2.9, 2.3, 1.0, 0.06
+ G[1, 4, 4], G[2, 4, 4], G[3, 4, 4], G[4, 4, 4] = 11.5, 13.0, 12.0, 7.0
+ G[1, 5, 4], G[2, 5, 4], G[3, 5, 4], G[4, 5, 4] = 22.0, 31.0, 40.0, 50.0
+ G[1, 6, 4], G[2, 6, 4], G[3, 6, 4], G[4, 6, 4] = 47.0, 84.0, 135.0, 210.0
+ G[1, 7, 4], G[2, 7, 4], G[3, 7, 4], G[4, 7, 4] = 75.0, 140.0, 240.0, 410.0
+ G[1, 8, 4], G[2, 8, 4], G[3, 8, 4], G[4, 8, 4] = 106.0, 190.0, 350.0, 630.0
+ G[1, 1, 5], G[2, 1, 5], G[3, 1, 5], G[4, 1, 5] = 0.0, 0.0, 0.0, 0.0
+ G[1, 2, 5], G[2, 2, 5], G[3, 2, 5], G[4, 2, 5] = 0.44, 0.06, 0.0, 0.0
+ G[1, 3, 5], G[2, 3, 5], G[3, 3, 5], G[4, 3, 5] = 2.8, 1.8, 0.6, 0.0
+ G[1, 4, 5], G[2, 4, 5], G[3, 4, 5], G[4, 4, 5] = 12.0, 12.5, 10.0, 4.5
+ G[1, 5, 5], G[2, 5, 5], G[3, 5, 5], G[4, 5, 5] = 24.0, 30.0, 35.0, 37.0
+ G[1, 6, 5], G[2, 6, 5], G[3, 6, 5], G[4, 6, 5] = 52.0, 78.0, 120.0, 190.0
+ G[1, 7, 5], G[2, 7, 5], G[3, 7, 5], G[4, 7, 5] = 83.0, 180.0, 215.0, 380.0
+ G[1, 8, 5], G[2, 8, 5], G[3, 8, 5], G[4, 8, 5] = 120.0, 190.0, 305.0, 550.0
+ G[1, 1, 6], G[2, 1, 6], G[3, 1, 6], G[4, 1, 6] = 0.0, 0.0, 0.0, 0.0
+ G[1, 2, 6], G[2, 2, 6], G[3, 2, 6], G[4, 2, 6] = 0.3, 0.0, 0.0, 0.0
+ G[1, 3, 6], G[2, 3, 6], G[3, 3, 6], G[4, 3, 6] = 2.9, 1.4, 0.3, 0.0
+ G[1, 4, 6], G[2, 4, 6], G[3, 4, 6], G[4, 4, 6] = 14.0, 11.0, 7.7, 3.0
+ G[1, 5, 6], G[2, 5, 6], G[3, 5, 6], G[4, 5, 6] = 27.0, 29.0, 30.0, 30.0
+ G[1, 6, 6], G[2, 6, 6], G[3, 6, 6], G[4, 6, 6] = 57.0, 75.0, 110.0, 170.0
+ G[1, 7, 6], G[2, 7, 6], G[3, 7, 6], G[4, 7, 6] = 90.0, 140.0, 200.0, 330.0
+ G[1, 8, 6], G[2, 8, 6], G[3, 8, 6], G[4, 8, 6] = 135.0, 190.0, 290.0, 520.0
+
+ F = zeros((6,11)) # defined by Figure 24
+ F[1, 1], F[2, 1], F[3, 1], F[4, 1], F[5, 1] = 1.0, 1.1, 1.6, 2.6, 4.2
+ F[1, 2], F[2, 2], F[3, 2], F[4, 2], F[5, 2] = 1.0, 1.1, 1.65, 2.75, 4.9
+ F[1, 3], F[2, 3], F[3, 3], F[4, 3], F[5, 3] = 1.0, 1.1, 1.7, 3.0, 5.5
+ F[1, 4], F[2, 4], F[3, 4], F[4, 4], F[5, 4] = 1.0, 1.12, 1.9, 3.6, 7.0
+ F[1, 5], F[2, 5], F[3, 5], F[4, 5], F[5, 5] = 1.0, 1.17, 2.05, 4.3, 8.7
+ F[1, 6], F[2, 6], F[3, 6], F[4, 6], F[5, 6] = 1.0, 1.2, 2.3, 5.5, 11.2
+ F[1, 7], F[2, 7], F[3, 7], F[4, 7], F[5, 7] = 1.0, 1.22, 2.75, 8.0, 22.0
+ F[1, 8], F[2, 8], F[3, 8], F[4, 8], F[5, 8] = 1.0, 1.25, 3.0, 9.6, 29.0
+ F[1, 9], F[2, 9], F[3, 9], F[4, 9], F[5, 9] = 1.0, 1.3, 3.5, 12.0, 43.0
+ F[1, 10], F[2, 10], F[3, 10], F[4, 10], F[5, 10] = 1.0, 1.4, 4.9, 22.0, 120.0
+
+ # T = array([[-999, -999, -999, -999, -999, -999, -999, -999],
+ # [-999, 1.2, 1.15, 1.10, 0.96, 0.90, 0.85, 0.82],
+ # [-999, 1.35, 1.25, 1.12, 0.92, 0.86, 0.80, 0.75],
+ # [-999, 1.60, 1.40, 1.20, 0.89, 0.80, 0.72, 0.66],
+ # [-999, 2.00, 1.65, 1.30, 0.85, 0.72, 0.63, 0.55]]).T # Temperature adjustment, Figure 24
+
+ T = zeros((8,5))
+ T[0, 0], T[0, 1], T[0, 2], T[0, 3], T[0, 4] = -999, -999, -999, -999, -999
+ T[1, 0], T[1, 1], T[1, 2], T[1, 3], T[1, 4] = -999, 1.2, 1.35, 1.60, 2.00
+ T[2, 0], T[2, 1], T[2, 2], T[2, 3], T[2, 4] = -999, 1.15, 1.25, 1.40, 1.65
+ T[3, 0], T[3, 1], T[3, 2], T[3, 3], T[3, 4] = -999, 1.10, 1.12, 1.20, 1.30
+ T[4, 0], T[4, 1], T[4, 2], T[4, 3], T[4, 4] = -999, 0.96, 0.92, 0.89, 0.85
+ T[5, 0], T[5, 1], T[5, 2], T[5, 3], T[5, 4] = -999, 0.90, 0.86, 0.80, 0.72
+ T[6, 0], T[6, 1], T[6, 2], T[6, 3], T[6, 4] = -999, 0.85, 0.80, 0.72, 0.63
+ T[7, 0], T[7, 1], T[7, 2], T[7, 3], T[7, 4] = -999, 0.82, 0.75, 0.66, 0.55
+
+ DF = array([-999, 0.10, 0.20, 0.30, 0.60, 1.00, 2.00, 6.00, 10.00, 20.00, 1.E2]) # Depths for Figure 24
+ CF = array([-999, 0.00, 1.E4, 5.E4, 1.E5, 1.5E5]) # Concentrations of sediment for Figure 24
+ P = array([-999, 0.60, 0.90, 1.0, 1.0, 0.83, 0.60, 0.40, 0.25, 0.15, 0.09, 0.05]) # Percentage Effect for Figure 24
+ DP = array([-999, 0.10, 0.15, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00]) # Median diameters for Figure 24
+ DG = array([-999, 0.10, 1.00, 10.0, 100.0]) # Depth values for Figure 26
+ VG = array([-999, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 8.0, 10.0]) # Velocity values for Figure 26
+ D50G = array([-999, 0.10, 0.20, 0.30, 0.40, 0.60, 0.80]) # Median values for figure 26
+ TEMP = array([-999, 32.0, 40.0, 50.0, 70.0, 80.0, 90.0, 100.0]) # Temperatures for lookup in Figure 26
+
+ ferror = 0
+ d50err = 0
+ hrerr = 0
+ velerr = 0
+
+ id501 = 0
+ id502 = 0
+ id1 = 0
+ iv1 = 0
+ it1 = 0
+ if not 0.80 >= db50 >= 0.10: # D50G limits
+ ferror = 1
+ d50err = 1
+ return 0.0, ferror, d50err, hrerr, velerr
+ for id501, db50x in enumerate(D50G):
+ if db50x > db50:
+ break
+ id501 -= 1
+ id502 = id501 + 1
+ zz1 = log10(D50G[id501])
+ zz2 = log10(D50G[id502])
+ zzratio = (log10(db50) - zz1) / (zz2 - zz1)
+
+ if not 100.0 >= fhrad >= 0.10: # DG limits
+ ferror = 1
+ hrerr = 1
+ return 0.0, ferror, d50err, hrerr, velerr
+ for id1,dgx in enumerate(DG):
+ if fhrad > dgx:
+ break
+ id1 = id1 + 1
+ id2 = id1 + 1
+ xx1 = log10(DG[id1])
+ xx2 = log10(DG[id2])
+ xxratio = (log10(fhrad) - xx1) / ((xx2 - xx1))
+
+ if not 10.0 >= v >= 1.0: # VG limits
+ ferror = 1
+ velerr = 1
+ return 0.0, ferror, d50err, hrerr, velerr
+ for iv1, vx in enumerate(VG):
+ if vx > v:
+ break
+ iv1 -= 1
+ iv2 = iv1 + 1
+ yy1 = log10(VG[iv1])
+ yy2 = log10(VG[iv2])
+ yyratio = (log10(v) - yy1) / (yy2 - yy1)
+
+ tmpr = min(100.0, max(32.0, tempr * 1.8 + 32.0))
+
+ x = zeros((3,3))
+ xa= zeros(3)
+ xg= zeros(3)
+ for i,i1 in [(1, id1), (2, id2)]: # DO 200 I= 1,2; I1 = II(I)
+ for j, j1 in [(1, iv1), (2, iv2)]: # DO 190 J= 1,2; J1 = JJ(J)
+ for k, k1 in [(1, id501), (2, id502)]: # DO 180 K= 1,2; K1 = KK(K)
+ if G[i1,j1,k1] > 0.0:
+ x[j,k] = log10(G[i1,j1,k1])
+ else:
+ for j3 in range(j1,8): # DO 140 J3= J1,7
+ if G[i1,j3,k1] > 0.0:
+ break
+ x[j,k] = log10(G[i1,j3,k1]) + (log10(VG[j1] / VG[j3])) * (log10(G[i1,j3+1,k1] / G[i1,j3,k1])) / (log10(VG[j3+1] / VG[j3]))
+
+ xa[1] = x[1,1] + (x[1,2] - x[1,1]) * zzratio
+ xa[2] = x[2,1] + (x[2,2] - x[2,1]) * zzratio
+ xn3 = xa[2] - xa[1]
+ xg[i] = xa[1] + xn3 * yyratio
+
+ xn4 = xg[2] - xg[1]
+ gtuc = 10.0**(xg[1] + (xn4 * xxratio)) # uncorrected gt in lb/sec/ft
+
+ # Adjustment coefficient for temperature
+ if abs(tmpr - 60.0) <= 1.0e-5:
+ cft = 1.0
+ else:
+ for it1, tempx in enumerate(TEMP):
+ if tempx > tmpr:
+ break
+ it2 = it1
+ it1 -= 1
+
+ xt11 = log10(T[it1][id1])
+ xt21 = log10(T[it2][id1])
+ xt12 = log10(T[it1][id2])
+ xt22 = log10(T[it2][id2])
+
+ xnt = log10(tmpr / TEMP[it1]) / log10(TEMP[it2] / TEMP[it1])
+ xct1 = xt11 + xnt * (xt21 - xt11)
+ xct2 = xt12 + xnt * (xt22 - xt12)
+ cft = 10.0**(xct1 + (xct2 - xct1) * xxratio)
+
+ # fine sediment load correction; (i.e. cohesive sediment or wash) load in mg/liter
+ if fsl <= 10.0:
+ cff = 1.0
+ else:
+ for id1, dfx in enumerate(DF):
+ if dfx > fhrad:
+ break
+ id2 = id1 + 1
+
+ if1 = 0
+ if fsl > 1.0E+4:
+ if1 = 4
+ if2 = 5
+ ERRMSG = '***** SUBROUTINE COLBY -- FSL WENT > 1.E+4'
+ else:
+ for if1, cfx in enumerate(CF):
+ if cfx > fsl:
+ break
+ if2 = if1 + 1
+
+ xf11 = log10(F[if1,id1])
+ xf22 = log10(F[if2,id2])
+ xf12 = log10(F[if1,id2])
+ xf21 = log10(F[if2,id1])
+
+ xnt = (fsl - CF[if1]) / (CF[if2] - CF[if1])
+ xct1 = xf11 + xnt * (xf21 - xf11)
+ xct2 = xf12 + xnt * (xf22 - xf12)
+ xnt = log10(fhrad / DF[id1]) / log10(DF[id2] / DF[id1])
+ cff = 10.0**(xct1 + xnt * (xct2 - xct1))
+ tcf = cft * cff - 1.0
+
+ # Percent effect correction for median diameter'''
+ if 0.30 >= db50 >= 0.20:
+ cfd = 1.0
+ else:
+ for ip1, db50x in enumerate(DP):
+ if db50x > db50:
+ break
+ ip2 = ip1 + 1
+
+ p1 = log10(P[ip1])
+ p2 = log10(P[ip2])
+ xnt = log10(db50 / DP[ip1]) / log10(DP[ip2] / DP[ip1])
+
+ cfd = 10.0**(p1 + xnt * (p2 -p1))
+
+ return gtuc * (cfd * tcf + 1.0), ferror, d50err, hrerr, velerr
+
+
+@njit(cache=True)
+def toffaleti(v, fdiam, fhrad, slope, tempr, vset):
+ ''' Toffaleti's method to calculate the capacity of the flow to transport sand.'''
+
+ tmpr = tempr * 1.80 + 32.0 # degrees c to degrees f
+
+ # For water temperatures greater than 32f and less than 100f the kinematic viscosity is
+ vis = 4.106e-4 * tmpr**-0.864
+
+ # Assuming the d50 grain size is approximately equal to the Geometric mean grain size
+ # and sigma-g = 1.5, the d65 grain size can be determined as 1.17*d50.
+ d65 = 1.17 * fdiam
+ cnv = 0.1198 + 0.00048 * tmpr
+ cz = 260.67 - 0.667 * tmpr
+ tt = 1.10 * (0.051 + 0.00009 * tmpr)
+ zi = vset * v / (cz * fhrad * slope)
+ if zi < cnv:
+ zi = 1.5 * cnv
+
+ # The manning-strickler equation is used here to Determine the hydraulic radius
+ # component due to Grain roughness (r'). Taken from the 1975 asce
+ # "sedimentation engineering",pg. 128.
+ rprime = ((v**1.5) * (d65**0.25) / (slope**0.75)) * 0.00349
+ ustar = (rprime * slope * 32.2)**0.5
+
+ afunc = (vis * 1.0e5)**0.333 / (10.0 * ustar)
+ if afunc <= 0.500: ac = (afunc / 4.89)**-1.45
+ elif afunc <= 0.660: ac = (afunc / 0.0036)**0.67
+ elif afunc <= 0.720: ac = (afunc / 0.29)**4.17
+ elif afunc <= 1.25: ac = 48.0
+ elif afunc > 1.25: ac = (afunc / 0.304)**2.74
+
+ k4func = afunc * slope * d65 * 1.0e5
+ if k4func <= 0.24: k4 = 1.0
+ elif k4func <= 0.35: k4 = (k4func**1.10) * 4.81
+ elif k4func > 0.35: k4 = (k4func** (-1.05)) * 0.49
+
+ ack4 = ac * k4
+ if ack4 - 16.0 < 0.0:
+ ack4 = 16.0
+ k4 = 16.0 / ac
+ oczu = 1.0 + cnv - 1.5 * zi
+ oczm = 1.0 + cnv - zi
+ oczl= 1.0 + cnv - 0.756 * zi
+ zinv = cnv - 0.758 * zi
+ zm = -zinv
+ zn = 1.0 + zinv
+ zo = -0.736 * zi
+ zp = 0.244 * zi
+ zq = 0.5 * zi
+
+ # Cli has been multiplied by 1.0e30 to keep it from Exceeding the computer overflow limit
+ cli = (5.6e+22 * oczl * (v**2.333) / fhrad**(zm) / ((tt * ac * k4 * fdiam)**1.667)
+ / (1.0 + cnv) / ((fhrad / 11.24)**(zn) - (2.0 * fdiam)**oczl))
+ p1 = (2.0 * fdiam / fhrad)**(zo / 2.0)
+ c2d = cli * p1 * p1 / 1.0e+30
+
+ # Check to see if the calculated value is reasonable (< 100.0), and adjust it if it is not.
+ if c2d > 100.0:
+ cli = cli * 100.0 / c2d
+ cmi = 43.2 * cli * (1.0 + cnv) * v * (fhrad**zm) # Cmi has been multiplied by 1.0e30 to keep it from computer overflow
+
+ # upper layer transport capacity
+ fd11 = fhrad / 11.24
+ fd25 = fhrad / 2.5
+ gsu = (cmi * (fd11**zp) * (fd25**zq) * (fhrad**oczu - (fd25**oczu)))/(oczu * 1.0e+30)
+
+ gsm = (cmi * (fd11**zp) * (fd25**(oczm) - (fd11**oczm))) / (oczm * 1.0e+30) # middle layer transport capacity
+ gsl = (cmi * ((fd11**(zn)) - ((2.0 * fdiam)**(oczl)))) / (oczl * 1.0e+30) # lower layer transport capacity
+ gsb = (cmi * ((2.0 * fdiam)**(zn))) / 1.0e+30 # bed layer transport capacity
+
+ return max(0.0, gsu + gsm + gsl + gsb) # Total transport capacity of the rchres (tons/day/ft)
+
+
+def expand_SEDTRN_masslinks(flags, uci, dat, recs):
+ if flags['SEDTRN']:
+ # ISED1
+ rec = {}
+ rec['MFACTOR'] = dat.MFACTOR
+ rec['SGRPN'] = 'SEDTRN'
+ if dat.SGRPN == "ROFLOW":
+ rec['SMEMN'] = 'ROSED'
+ rec['SMEMSB1'] = '1'
+ rec['SMEMSB2'] = ''
+ else:
+ rec['SMEMN'] = 'OSED'
+ rec['SMEMSB1'] = '1'
+ rec['SMEMSB2'] = dat.SMEMSB1
+ rec['TMEMN'] = 'ISED1'
+ rec['TMEMSB1'] = dat.TMEMSB1
+ rec['TMEMSB2'] = dat.TMEMSB2
+ rec['SVOL'] = dat.SVOL
+ recs.append(rec)
+ # ISED2
+ rec = {}
+ rec['MFACTOR'] = dat.MFACTOR
+ rec['SGRPN'] = 'SEDTRN'
+ if dat.SGRPN == "ROFLOW":
+ rec['SMEMN'] = 'ROSED'
+ rec['SMEMSB1'] = '2'
+ rec['SMEMSB2'] = ''
+ else:
+ rec['SMEMN'] = 'OSED'
+ rec['SMEMSB1'] = '2'
+ rec['SMEMSB2'] = dat.SMEMSB1
+ rec['TMEMN'] = 'ISED2'
+ rec['TMEMSB1'] = dat.TMEMSB1
+ rec['TMEMSB2'] = dat.TMEMSB2
+ rec['SVOL'] = dat.SVOL
+ recs.append(rec)
+ # ISED3
+ rec = {}
+ rec['MFACTOR'] = dat.MFACTOR
+ rec['SGRPN'] = 'SEDTRN'
+ if dat.SGRPN == "ROFLOW":
+ rec['SMEMN'] = 'ROSED'
+ rec['SMEMSB1'] = '3'
+ rec['SMEMSB2'] = ''
+ else:
+ rec['SMEMN'] = 'OSED'
+ rec['SMEMSB1'] = '3'
+ rec['SMEMSB2'] = dat.SMEMSB1
+ rec['TMEMN'] = 'ISED3'
+ rec['TMEMSB1'] = dat.TMEMSB1
+ rec['TMEMSB2'] = dat.TMEMSB2
+ rec['SVOL'] = dat.SVOL
+ recs.append(rec)
return recs
\ No newline at end of file
diff --git a/HSP2/SPECL.py b/HSP2/SPECL.py
index c7cf5e23..d6fa62c0 100644
--- a/HSP2/SPECL.py
+++ b/HSP2/SPECL.py
@@ -1,18 +1,58 @@
-''' process special actions in this domain
-
-CALL: specl(io_manager, siminfo, uci, ts, state, specl_actions)
- store is the Pandas/PyTable open store
- siminfo is a dictionary with simulation level infor (OP_SEQUENCE for example)
- ui is a dictionary with RID specific HSPF UCI like data
- ts is a dictionary with RID specific timeseries
- state is a dictionary with value of variables at ts[step - 1]
- specl_actions is a dictionary with all SPEC-ACTIONS entries
-'''
-
-from numba import njit
-
-@njit
-def specl(ui, ts, step, state_info, state_paths, state_ix, specactions):
- # ther eis no need for _specl_ because this code must already be njit
- return
+''' process special actions in this domain
+Notes:
+ - code for parsing UCI SPEC-ACTIONS is in HSP2tools/readUCI.py
+ - code for object classes that transform parsed data into OP codes for OM and STATE support
+ is in this directory tree as om_special_[action type].py,
+ - Ex: om_special_action.py contains object support and runtime functions for classic ACTIONS
+'''
+
+from numba import njit
+from pandas import DataFrame, date_range
+import h5py
+
+def specl_load_actions(state, io_manager, siminfo):
+ if 'ACTIONS' in state['specactions']:
+ dc = state['specactions']['ACTIONS']
+ for ix in dc.index:
+ # add the items to the state['model_data'] dict
+ speca = dc[ix:(ix+1)]
+ # need to add a name attribute
+ opname = 'SPEC' + 'ACTION' + str(ix)
+ state['model_data'][opname] = {}
+ state['model_data'][opname]['name'] = opname
+ for ik in speca.keys():
+ #print("looking for speca key ", ik)
+ state['model_data'][opname][ik] = speca.to_dict()[ik][ix] # add subscripts?
+ if ik == 'VARI':
+ if len(speca.to_dict()['S1'][ix]) > 0:
+ state['model_data'][opname][ik] += speca.to_dict()['S1'][ix]
+ if len(speca.to_dict()['S2'][ix]) > 0:
+ state['model_data'][opname][ik] += speca.to_dict()['S2'][ix]
+ state['model_data'][opname]['object_class'] = 'SpecialAction'
+ #print("model_data", ix, " = ", state['model_data'][opname])
+ return
+
+def state_load_dynamics_specl(state, io_manager, siminfo):
+ specl_load_actions(state, io_manager, siminfo)
+ # others defined below, like:
+ # specl_load_uvnames(state, io_manager, siminfo)
+ # ...
+ return
+
+'''
+# the code specl() is deprecated in favor of execution inside OM
+# see om_special_action.py for example of object support and runtime functions for classic ACTIONS
+CALL: specl(ui, ts, step, state_info, state_paths, state_ix, specactions)
+ store is the Pandas/PyTable open store
+ siminfo is a dictionary with simulation level infor (OP_SEQUENCE for example)
+ ui is a dictionary with RID specific HSPF UCI like data
+ ts is a dictionary with RID specific timeseries
+ state is a dictionary with value of variables at ts[step - 1]
+ specl_actions is a dictionary with all SPEC-ACTIONS entries
+'''
+
+@njit
+def specl(ui, ts, step, state_info, state_paths, state_ix, specactions):
+ # ther eis no need for _specl_ because this code must already be njit
+ return
\ No newline at end of file
diff --git a/HSP2/main.py b/HSP2/main.py
index 705b1983..0f37a429 100644
--- a/HSP2/main.py
+++ b/HSP2/main.py
@@ -1,414 +1,450 @@
-''' Copyright (c) 2020 by RESPEC, INC.
-Author: Robert Heaphy, Ph.D.
-License: LGPL2
-'''
-
-from re import S
-from numpy import float64, float32
-from pandas import DataFrame, date_range
-from pandas.tseries.offsets import Minute
-from datetime import datetime as dt
-import os
-from HSP2.utilities import versions, get_timeseries, expand_timeseries_names, save_timeseries, get_gener_timeseries
-from HSP2.configuration import activities, noop, expand_masslinks
-from HSP2.state import *
-
-from HSP2IO.io import IOManager, SupportsReadTS, Category
-
-def main(io_manager:IOManager, saveall:bool=False, jupyterlab:bool=True) -> None:
- """Runs main HSP2 program.
-
- Parameters
- ----------
-
- saveall: Boolean - [optional] Default is False.
- Saves all calculated data ignoring SAVE tables.
- jupyterlab: Boolean - [optional] Default is True.
- Flag for specific output behavior for jupyter lab.
- Return
- ------------
- None
-
- """
-
- hdfname = './'
- if not os.path.exists(hdfname):
- raise FileNotFoundError(f'{hdfname} HDF5 File Not Found')
-
- msg = messages()
- msg(1, f'Processing started for file {hdfname}; saveall={saveall}')
-
- # read user control, parameters, states, and flags uci and map to local variables
- uci_obj = io_manager.read_uci()
- opseq = uci_obj.opseq
- ddlinks = uci_obj.ddlinks
- ddmasslinks = uci_obj.ddmasslinks
- ddext_sources = uci_obj.ddext_sources
- ddgener = uci_obj.ddgener
- uci = uci_obj.uci
- siminfo = uci_obj.siminfo
- ftables = uci_obj.ftables
- specactions = uci_obj.specactions
- monthdata = uci_obj.monthdata
- specactions = {} # placeholder till added to uci parser
-
- start, stop = siminfo['start'], siminfo['stop']
-
- copy_instances = {}
- gener_instances = {}
-
- #######################################################################################
- # initilize STATE dicts
- #######################################################################################
- # Set up Things in state that will be used in all modular activitis like SPECL
- state = init_state_dicts()
- state_siminfo_hsp2(uci_obj, siminfo)
- # Add support for dynamic functins to operate on STATE
- # - Load any dynamic components if present, and store variables on objects
- state_load_dynamics_hsp2(state, io_manager, siminfo)
- # - finally stash specactions in state, not domain (segment) dependent so do it once
- state['specactions'] = specactions # stash the specaction dict in state
- #######################################################################################
-
- # main processing loop
- msg(1, f'Simulation Start: {start}, Stop: {stop}')
- tscat = {}
- for _, operation, segment, delt in opseq.itertuples():
- msg(2, f'{operation} {segment} DELT(minutes): {delt}')
- siminfo['delt'] = delt
- siminfo['tindex'] = date_range(start, stop, freq=Minute(delt))[1:]
- siminfo['steps'] = len(siminfo['tindex'])
-
- if operation == 'COPY':
- copy_instances[segment] = activities[operation](io_manager, siminfo, ddext_sources[(operation,segment)])
- elif operation == 'GENER':
- try:
- gener_instances[segment] = activities[operation](segment, siminfo, copy_instances, gener_instances, ddlinks, ddgener)
- except NotImplementedError as e:
- print(f"GENER '{segment}' encountered unsupported feature during initialization and may not function correctly. Unsupported feature: '{e}'")
- else:
-
- # now conditionally execute all activity modules for the op, segment
- ts = get_timeseries(io_manager,ddext_sources[(operation,segment)],siminfo)
- ts = get_gener_timeseries(ts, gener_instances, ddlinks[segment],ddmasslinks)
- flags = uci[(operation, 'GENERAL', segment)]['ACTIVITY']
- if operation == 'RCHRES':
- # Add nutrient adsorption flags:
- if flags['NUTRX'] == 1:
- flags['TAMFG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['NH3FG']
- flags['ADNHFG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['ADNHFG']
- flags['PO4FG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['PO4FG']
- flags['ADPOFG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['ADPOFG']
-
- get_flows(io_manager, ts, flags, uci, segment, ddlinks, ddmasslinks, siminfo['steps'], msg)
-
- for activity, function in activities[operation].items():
- if function == noop: #or not flags[activity]:
- continue
-
- if (activity in flags) and (not flags[activity]):
- continue
-
- if (activity == 'RQUAL') and (not flags['OXRX']) and (not flags['NUTRX']) and (not flags['PLANK']) and (not flags['PHCARB']):
- continue
-
- msg(3, f'{activity}')
- # Set context for dynamic executables.
- state_context_hsp2(state, operation, segment, activity)
-
- ui = uci[(operation, activity, segment)] # ui is a dictionary
- if operation == 'PERLND' and activity == 'SEDMNT':
- # special exception here to make CSNOFG available
- ui['PARAMETERS']['CSNOFG'] = uci[(operation, 'PWATER', segment)]['PARAMETERS']['CSNOFG']
- if operation == 'PERLND' and activity == 'PSTEMP':
- # special exception here to make AIRTFG available
- ui['PARAMETERS']['AIRTFG'] = flags['ATEMP']
- if operation == 'PERLND' and activity == 'PWTGAS':
- # special exception here to make CSNOFG available
- ui['PARAMETERS']['CSNOFG'] = uci[(operation, 'PWATER', segment)]['PARAMETERS']['CSNOFG']
- if operation == 'RCHRES':
- if not 'PARAMETERS' in ui:
- ui['PARAMETERS'] = {}
- ui['PARAMETERS']['NEXITS'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['NEXITS']
- if activity == 'ADCALC':
- ui['PARAMETERS']['ADFG'] = flags['ADCALC']
- ui['PARAMETERS']['KS'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['KS']
- ui['PARAMETERS']['VOL'] = uci[(operation, 'HYDR', segment)]['STATES']['VOL']
- ui['PARAMETERS']['ROS'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['ROS']
- nexits = uci[(operation, 'HYDR', segment)]['PARAMETERS']['NEXITS']
- for index in range(nexits):
- ui['PARAMETERS']['OS' + str(index + 1)] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['OS'+ str(index + 1)]
- if activity == 'HTRCH':
- ui['PARAMETERS']['ADFG'] = flags['ADCALC']
- ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
- # ui['STATES']['VOL'] = uci[(operation, 'HYDR', segment)]['STATES']['VOL']
- if activity == 'CONS':
- ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
- if activity == 'SEDTRN':
- ui['PARAMETERS']['ADFG'] = flags['ADCALC']
- ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
- # ui['STATES']['VOL'] = uci[(operation, 'HYDR', segment)]['STATES']['VOL']
- ui['PARAMETERS']['HTFG'] = flags['HTRCH']
- ui['PARAMETERS']['AUX3FG'] = 0
- if flags['HYDR']:
- ui['PARAMETERS']['LEN'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LEN']
- ui['PARAMETERS']['DELTH'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DELTH']
- ui['PARAMETERS']['DB50'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DB50']
- ui['PARAMETERS']['AUX3FG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['AUX3FG']
- if activity == 'GQUAL':
- ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
- ui['PARAMETERS']['HTFG'] = flags['HTRCH']
- ui['PARAMETERS']['SEDFG'] = flags['SEDTRN']
- # ui['PARAMETERS']['REAMFG'] = uci[(operation, 'OXRX', segment)]['PARAMETERS']['REAMFG']
- ui['PARAMETERS']['HYDRFG'] = flags['HYDR']
- if flags['HYDR']:
- ui['PARAMETERS']['LKFG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LKFG']
- ui['PARAMETERS']['AUX1FG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['AUX1FG']
- ui['PARAMETERS']['AUX2FG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['AUX2FG']
- ui['PARAMETERS']['LEN'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LEN']
- ui['PARAMETERS']['DELTH'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DELTH']
- if flags['OXRX']:
- ui['PARAMETERS']['LKFG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LKFG']
- ui['PARAMETERS']['CFOREA'] = uci[(operation, 'OXRX', segment)]['PARAMETERS']['CFOREA']
- if flags['SEDTRN']:
- ui['PARAMETERS']['SSED1'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED1']
- ui['PARAMETERS']['SSED2'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED2']
- ui['PARAMETERS']['SSED3'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED3']
- if flags['HTRCH']:
- ui['PARAMETERS']['CFSAEX'] = uci[(operation, 'HTRCH', segment)]['PARAMETERS']['CFSAEX']
- elif flags['PLANK']:
- if 'CFSAEX' in uci[(operation, 'PLANK', segment)]['PARAMETERS']:
- ui['PARAMETERS']['CFSAEX'] = uci[(operation, 'PLANK', segment)]['PARAMETERS']['CFSAEX']
-
- if activity == 'RQUAL':
- # RQUAL inputs:
- ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
- if flags['HYDR']:
- ui['PARAMETERS']['LKFG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LKFG']
-
- ui['FLAGS']['HTFG'] = flags['HTRCH']
- ui['FLAGS']['SEDFG'] = flags['SEDTRN']
- ui['FLAGS']['GQFG'] = flags['GQUAL']
- ui['FLAGS']['OXFG'] = flags['OXFG']
- ui['FLAGS']['NUTFG'] = flags['NUTRX']
- ui['FLAGS']['PLKFG'] = flags['PLANK']
- ui['FLAGS']['PHFG'] = flags['PHCARB']
- if flags['CONS']:
- if 'PARAMETERS' in uci[(operation, 'CONS', segment)]:
- if 'NCONS' in uci[(operation, 'CONS', segment)]['PARAMETERS']:
- ui['PARAMETERS']['NCONS'] = uci[(operation, 'CONS', segment)]['PARAMETERS']['NCONS']
-
- # OXRX module inputs:
- ui_oxrx = uci[(operation, 'OXRX', segment)]
-
- if flags['HYDR']:
- ui_oxrx['PARAMETERS']['LEN'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LEN']
- ui_oxrx['PARAMETERS']['DELTH'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DELTH']
-
- if flags['HTRCH']:
- ui_oxrx['PARAMETERS']['ELEV'] = uci[(operation, 'HTRCH', segment)]['PARAMETERS']['ELEV']
-
- if flags['SEDTRN']:
- ui['PARAMETERS']['SSED1'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED1']
- ui['PARAMETERS']['SSED2'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED2']
- ui['PARAMETERS']['SSED3'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED3']
-
- # PLANK module inputs:
- if flags['HTRCH']:
- ui['PARAMETERS']['CFSAEX'] = uci[(operation, 'HTRCH', segment)]['PARAMETERS']['CFSAEX']
-
- # NUTRX, PLANK, PHCARB module inputs:
- ui_nutrx = uci[(operation, 'NUTRX', segment)]
- ui_plank = uci[(operation, 'PLANK', segment)]
- ui_phcarb = uci[(operation, 'PHCARB', segment)]
-
- ############ calls activity function like snow() ##############
- if operation not in ['COPY','GENER']:
- if (activity == 'HYDR'):
- errors, errmessages = function(io_manager, siminfo, ui, ts, ftables, state)
- elif (activity != 'RQUAL'):
- errors, errmessages = function(io_manager, siminfo, ui, ts)
- else:
- errors, errmessages = function(io_manager, siminfo, ui, ui_oxrx, ui_nutrx, ui_plank, ui_phcarb, ts, monthdata)
- ###############################################################
-
- for errorcnt, errormsg in zip(errors, errmessages):
- if errorcnt > 0:
- msg(4, f'Error count {errorcnt}: {errormsg}')
- if 'SAVE' in ui:
- save_timeseries(io_manager,ts,ui['SAVE'],siminfo,saveall,operation,segment,activity,jupyterlab)
-
- if (activity == 'RQUAL'):
- if 'SAVE' in ui_oxrx: save_timeseries(io_manager,ts,ui_oxrx['SAVE'],siminfo,saveall,operation,segment,'OXRX',jupyterlab)
- if 'SAVE' in ui_nutrx and flags['NUTRX'] == 1: save_timeseries(io_manager,ts,ui_nutrx['SAVE'],siminfo,saveall,operation,segment,'NUTRX',jupyterlab)
- if 'SAVE' in ui_plank and flags['PLANK'] == 1: save_timeseries(io_manager,ts,ui_plank['SAVE'],siminfo,saveall,operation,segment,'PLANK',jupyterlab)
- if 'SAVE' in ui_phcarb and flags['PHCARB'] == 1: save_timeseries(io_manager,ts,ui_phcarb['SAVE'],siminfo,saveall,operation,segment,'PHCARB',jupyterlab)
-
- msglist = msg(1, 'Done', final=True)
-
- df = DataFrame(msglist, columns=['logfile'])
- io_manager.write_log(df)
-
- if jupyterlab:
- df = versions(['jupyterlab', 'notebook'])
- io_manager.write_versioning(df)
- print('\n\n', df)
- return
-
-def messages():
- '''Closure routine; msg() prints messages to screen and run log'''
- start = dt.now()
- mlist = []
- def msg(indent, message, final=False):
- now = dt.now()
- m = str(now)[:22] + ' ' * indent + message
- if final:
- mn,sc = divmod((now-start).seconds, 60)
- ms = (now-start).microseconds // 100_000
- m = '; '.join((m, f'Run time is about {mn:02}:{sc:02}.{ms} (mm:ss)'))
- print(m)
- mlist.append(m)
- return mlist
- return msg
-
-def get_flows(io_manager:SupportsReadTS, ts, flags, uci, segment, ddlinks, ddmasslinks, steps, msg):
- # get inflows to this operation
- for x in ddlinks[segment]:
- if x.SVOL != 'GENER': # gener already handled in get_gener_timeseries
- mldata = ddmasslinks[x.MLNO]
- for dat in mldata:
- recs = []
- if x.MLNO == '': # Data from NETWORK part of Links table
- rec = {}
- rec['MFACTOR'] = x.MFACTOR
- rec['SGRPN'] = x.SGRPN
- rec['SMEMN'] = x.SMEMN
- rec['SMEMSB1'] = x.SMEMSB1
- rec['SMEMSB2'] = x.SMEMSB2
- rec['TMEMN'] = x.TMEMN
- rec['TMEMSB1'] = x.TMEMSB1
- rec['TMEMSB2'] = x.TMEMSB2
- rec['SVOL'] = x.SVOL
- recs.append(rec)
- else: # Data from SCHEMATIC part of Links table
- if dat.SMEMN != '':
- rec = {}
- rec['MFACTOR'] = dat.MFACTOR
- rec['SGRPN'] = dat.SGRPN
- rec['SMEMN'] = dat.SMEMN
- rec['SMEMSB1'] = dat.SMEMSB1
- rec['SMEMSB2'] = dat.SMEMSB2
- rec['TMEMN'] = dat.TMEMN
- rec['TMEMSB1'] = dat.TMEMSB1
- rec['TMEMSB2'] = dat.TMEMSB2
- rec['SVOL'] = dat.SVOL
- recs.append(rec)
- else:
- # this is the kind that needs to be expanded
- if dat.SGRPN == "ROFLOW" or dat.SGRPN == "OFLOW":
- recs = expand_masslinks(flags,uci,dat,recs)
-
- for rec in recs:
- mfactor = rec['MFACTOR']
- sgrpn = rec['SGRPN']
- smemn = rec['SMEMN']
- smemsb1 = rec['SMEMSB1']
- smemsb2 = rec['SMEMSB2']
- tmemn = rec['TMEMN']
- tmemsb1 = rec['TMEMSB1']
- tmemsb2 = rec['TMEMSB2']
-
- afactr = x.AFACTR
- factor = afactr * mfactor
-
- # KLUDGE until remaining HSP2 modules are available.
- if tmemn not in {'IVOL', 'ICON', 'IHEAT', 'ISED', 'ISED1', 'ISED2', 'ISED3',
- 'IDQAL', 'ISQAL1', 'ISQAL2', 'ISQAL3',
- 'OXIF', 'NUIF1', 'NUIF2', 'PKIF', 'PHIF'}:
- continue
- if (sgrpn == 'OFLOW' and smemn == 'OVOL') or (sgrpn == 'ROFLOW' and smemn == 'ROVOL'):
- sgrpn = 'HYDR'
- if (sgrpn == 'OFLOW' and smemn == 'OHEAT') or (sgrpn == 'ROFLOW' and smemn == 'ROHEAT'):
- sgrpn = 'HTRCH'
- if (sgrpn == 'OFLOW' and smemn == 'OSED') or (sgrpn == 'ROFLOW' and smemn == 'ROSED'):
- sgrpn = 'SEDTRN'
- if (sgrpn == 'OFLOW' and smemn == 'ODQAL') or (sgrpn == 'ROFLOW' and smemn == 'RODQAL'):
- sgrpn = 'GQUAL'
- if (sgrpn == 'OFLOW' and smemn == 'OSQAL') or (sgrpn == 'ROFLOW' and smemn == 'ROSQAL'):
- sgrpn = 'GQUAL'
- if (sgrpn == 'OFLOW' and smemn == 'OXCF2') or (sgrpn == 'ROFLOW' and smemn == 'OXCF1'):
- sgrpn = 'OXRX'
- if (sgrpn == 'OFLOW' and (smemn == 'NUCF9' or smemn == 'OSNH4' or smemn == 'OSPO4')) or (sgrpn == 'ROFLOW' and (smemn == 'NUCF1' or smemn == 'NUFCF2')):
- sgrpn = 'NUTRX'
- if (sgrpn == 'OFLOW' and smemn == 'PKCF2') or (sgrpn == 'ROFLOW' and smemn == 'PKCF1'):
- sgrpn = 'PLANK'
- if (sgrpn == 'OFLOW' and smemn == 'PHCF2') or (sgrpn == 'ROFLOW' and smemn == 'PHCF1'):
- sgrpn = 'PHCARB'
-
- if tmemn == 'ISED' or tmemn == 'ISQAL':
- tmemn = tmemn + tmemsb1 # need to add sand, silt, clay subscript
- if (sgrpn == 'HYDR' and smemn == 'OVOL') or (sgrpn == 'HTRCH' and smemn == 'OHEAT'):
- smemsb2 = ''
-
- smemn, tmemn = expand_timeseries_names(sgrpn, smemn, smemsb1, smemsb2, tmemn, tmemsb1, tmemsb2)
-
- path = f'RESULTS/{x.SVOL}_{x.SVOLNO}/{sgrpn}'
- MFname = f'{x.SVOL}{x.SVOLNO}_MFACTOR'
- AFname = f'{x.SVOL}{x.SVOLNO}_AFACTR'
- data = f'{smemn}{smemsb1}{smemsb2}'
-
- data_frame = io_manager.read_ts(Category.RESULTS,x.SVOL,x.SVOLNO, sgrpn)
- try:
- if data in data_frame.columns: t = data_frame[data].astype(float64).to_numpy()[0:steps]
- else: t = data_frame[smemn].astype(float64).to_numpy()[0:steps]
-
- if MFname in ts and AFname in ts:
- t *= ts[MFname][:steps] * ts[AFname][0:steps]
- msg(4, f'MFACTOR modified by timeseries {MFname}')
- msg(4, f'AFACTR modified by timeseries {AFname}')
- elif MFname in ts:
- t *= afactr * ts[MFname][0:steps]
- msg(4, f'MFACTOR modified by timeseries {MFname}')
- elif AFname in ts:
- t *= mfactor * ts[AFname][0:steps]
- msg(4, f'AFACTR modified by timeseries {AFname}')
- else:
- t *= factor
-
- # if poht to iheat, imprecision in hspf conversion factor requires a slight adjustment
- if (smemn == 'POHT' or smemn == 'SOHT') and tmemn == 'IHEAT':
- t *= 0.998553
- if (smemn == 'PODOXM' or smemn == 'SODOXM') and tmemn == 'OXIF1':
- t *= 1.000565
-
- # ??? ISSUE: can fetched data be at different frequency - don't know how to transform.
- if tmemn in ts:
- ts[tmemn] += t
- else:
- ts[tmemn] = t
-
- except KeyError:
- print('ERROR in FLOWS, cant resolve ', path + ' ' + smemn)
-
- return
-
-'''
-
- # This table defines the expansion to INFLOW, ROFLOW, OFLOW for RCHRES networks
- d = [
- ['IVOL', 'ROVOL', 'OVOL', 'HYDRFG', 'HYDR'],
- ['ICON', 'ROCON', 'OCON', 'CONSFG', 'CONS'],
- ['IHEAT', 'ROHEAT', 'OHEAT', 'HTFG', 'HTRCH'],
- ['ISED', 'ROSED', 'OSED', 'SEDFG', 'SEDTRN'],
- ['IDQAL', 'RODQAL', 'ODQAL', 'GQALFG', 'GQUAL'],
- ['ISQAL', 'ROSQAL', 'OSQAL', 'GQALFG', 'GQUAL'],
- ['OXIF', 'OXCF1', 'OXCF2', 'OXFG', 'OXRX'],
- ['NUIF1', 'NUCF1', 'NUCF1', 'NUTFG', 'NUTRX'],
- ['NUIF2', 'NUCF2', 'NUCF9', 'NUTFG', 'NUTRX'],
- ['PKIF', 'PKCF1', 'PKCH2', 'PLKFG', 'PLANK'],
- ['PHIF', 'PHCF1', 'PHCF2', 'PHFG', 'PHCARB']]
- df = pd.DataFrame(d, columns=['INFLOW', 'ROFLOW', 'OFLOW', 'Flag', 'Name'])
- df.to_hdf(h2name, '/FLOWEXPANSION', format='t', data_columns=True)
-
-
-'''
+''' Copyright (c) 2020 by RESPEC, INC.
+Author: Robert Heaphy, Ph.D.
+License: LGPL2
+'''
+
+from re import S
+from numpy import float64, float32
+from pandas import DataFrame, date_range
+from pandas.tseries.offsets import Minute
+from datetime import datetime as dt
+import os
+from HSP2.utilities import versions, get_timeseries, expand_timeseries_names, save_timeseries, get_gener_timeseries
+from HSP2.configuration import activities, noop, expand_masslinks
+from HSP2.state import *
+from HSP2.om import *
+from HSP2.SPECL import *
+
+from HSP2IO.io import IOManager, SupportsReadTS, Category
+
+def main(io_manager:IOManager, saveall:bool=False, jupyterlab:bool=True) -> None:
+ """Runs main HSP2 program.
+
+ Parameters
+ ----------
+
+ saveall: Boolean - [optional] Default is False.
+ Saves all calculated data ignoring SAVE tables.
+ jupyterlab: Boolean - [optional] Default is True.
+ Flag for specific output behavior for jupyter lab.
+ Return
+ ------------
+ None
+
+ """
+
+ hdfname = io_manager._input.file_path
+ if not os.path.exists(hdfname):
+ raise FileNotFoundError(f'{hdfname} HDF5 File Not Found')
+
+ msg = messages()
+ msg(1, f'Processing started for file {hdfname}; saveall={saveall}')
+
+ # read user control, parameters, states, and flags uci and map to local variables
+ uci_obj = io_manager.read_uci()
+ opseq = uci_obj.opseq
+ ddlinks = uci_obj.ddlinks
+ ddmasslinks = uci_obj.ddmasslinks
+ ddext_sources = uci_obj.ddext_sources
+ ddgener = uci_obj.ddgener
+ uci = uci_obj.uci
+ siminfo = uci_obj.siminfo
+ ftables = uci_obj.ftables
+ specactions = uci_obj.specactions
+ monthdata = uci_obj.monthdata
+
+ start, stop = siminfo['start'], siminfo['stop']
+
+ copy_instances = {}
+ gener_instances = {}
+
+ #######################################################################################
+ # initialize STATE dicts
+ #######################################################################################
+ # Set up Things in state that will be used in all modular activities like SPECL
+ state = init_state_dicts()
+ state_siminfo_hsp2(uci_obj, siminfo)
+ # Add support for dynamic functions to operate on STATE
+ # - Load any dynamic components if present, and store variables on objects
+ state_load_dynamics_hsp2(state, io_manager, siminfo)
+ # Iterate through all segments and add crucial paths to state
+ # before loading dynamic components that may reference them
+ state_init_hsp2(state, opseq, activities)
+ # - finally stash specactions in state, not domain (segment) dependent so do it once
+ state['specactions'] = specactions # stash the specaction dict in state
+ state_initialize_om(state)
+ state_load_dynamics_specl(state, io_manager, siminfo) # traditional special actions
+ state_load_dynamics_om(state, io_manager, siminfo) # operational model for custom python
+ # finalize all dynamically loaded components and prepare to run the model
+ state_om_model_run_prep(state, io_manager, siminfo)
+ #######################################################################################
+
+ # main processing loop
+ msg(1, f'Simulation Start: {start}, Stop: {stop}')
+ tscat = {}
+ for _, operation, segment, delt in opseq.itertuples():
+ msg(2, f'{operation} {segment} DELT(minutes): {delt}')
+ siminfo['delt'] = delt
+ siminfo['tindex'] = date_range(start, stop, freq=Minute(delt))[1:]
+ siminfo['steps'] = len(siminfo['tindex'])
+
+ if operation == 'COPY':
+ copy_instances[segment] = activities[operation](io_manager, siminfo, ddext_sources[(operation,segment)])
+ elif operation == 'GENER':
+ try:
+ ts = get_timeseries(io_manager, ddext_sources[(operation, segment)], siminfo)
+ ts = get_gener_timeseries(ts, gener_instances, ddlinks[segment], ddmasslinks)
+ get_flows(io_manager, ts, {}, uci, segment, ddlinks, ddmasslinks, siminfo['steps'], msg)
+ gener_instances[segment] = activities[operation](segment, siminfo, copy_instances, gener_instances, ddlinks, ddmasslinks, ts, ddgener)
+ except NotImplementedError as e:
+ print(f"GENER '{segment}' may not function correctly. '{e}'")
+ else:
+
+ # now conditionally execute all activity modules for the op, segment
+ ts = get_timeseries(io_manager,ddext_sources[(operation,segment)],siminfo)
+ ts = get_gener_timeseries(ts, gener_instances, ddlinks[segment],ddmasslinks)
+ flags = uci[(operation, 'GENERAL', segment)]['ACTIVITY']
+ if operation == 'RCHRES':
+ # Add nutrient adsorption flags:
+ if flags['NUTRX'] == 1:
+ flags['TAMFG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['NH3FG']
+ flags['ADNHFG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['ADNHFG']
+ flags['PO4FG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['PO4FG']
+ flags['ADPOFG'] = uci[(operation, 'NUTRX', segment)]['FLAGS']['ADPOFG']
+
+ get_flows(io_manager, ts, flags, uci, segment, ddlinks, ddmasslinks, siminfo['steps'], msg)
+
+ for activity, function in activities[operation].items():
+ if function == noop: #or not flags[activity]:
+ continue
+
+ if (activity in flags) and (not flags[activity]):
+ continue
+
+ if (activity == 'RQUAL') and (not flags['OXRX']) and (not flags['NUTRX']) and (not flags['PLANK']) and (not flags['PHCARB']):
+ continue
+
+ msg(3, f'{activity}')
+ # Set context for dynamic executables and special actions
+ state_context_hsp2(state, operation, segment, activity)
+
+ ui = uci[(operation, activity, segment)] # ui is a dictionary
+ if operation == 'PERLND' and activity == 'SEDMNT':
+ # special exception here to make CSNOFG available
+ ui['PARAMETERS']['CSNOFG'] = uci[(operation, 'PWATER', segment)]['PARAMETERS']['CSNOFG']
+ if operation == 'PERLND' and activity == 'PSTEMP':
+ # special exception here to make AIRTFG available
+ ui['PARAMETERS']['AIRTFG'] = flags['ATEMP']
+ if operation == 'PERLND' and activity == 'PWTGAS':
+ # special exception here to make CSNOFG available
+ ui['PARAMETERS']['CSNOFG'] = uci[(operation, 'PWATER', segment)]['PARAMETERS']['CSNOFG']
+ if operation == 'RCHRES':
+ if not 'PARAMETERS' in ui:
+ ui['PARAMETERS'] = {}
+ ui['PARAMETERS']['NEXITS'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['NEXITS']
+ if activity == 'ADCALC':
+ ui['PARAMETERS']['ADFG'] = flags['ADCALC']
+ ui['PARAMETERS']['KS'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['KS']
+ ui['PARAMETERS']['VOL'] = uci[(operation, 'HYDR', segment)]['STATES']['VOL']
+ ui['PARAMETERS']['ROS'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['ROS']
+ nexits = uci[(operation, 'HYDR', segment)]['PARAMETERS']['NEXITS']
+ for index in range(nexits):
+ ui['PARAMETERS']['OS' + str(index + 1)] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['OS'+ str(index + 1)]
+ if activity == 'HTRCH':
+ ui['PARAMETERS']['ADFG'] = flags['ADCALC']
+ ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
+ # ui['STATES']['VOL'] = uci[(operation, 'HYDR', segment)]['STATES']['VOL']
+ if activity == 'CONS':
+ ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
+ if activity == 'SEDTRN':
+ ui['PARAMETERS']['ADFG'] = flags['ADCALC']
+ ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
+ # ui['STATES']['VOL'] = uci[(operation, 'HYDR', segment)]['STATES']['VOL']
+ ui['PARAMETERS']['HTFG'] = flags['HTRCH']
+ ui['PARAMETERS']['AUX3FG'] = 0
+ if flags['HYDR']:
+ ui['PARAMETERS']['LEN'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LEN']
+ ui['PARAMETERS']['DELTH'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DELTH']
+ ui['PARAMETERS']['DB50'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DB50']
+ ui['PARAMETERS']['AUX3FG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['AUX3FG']
+ if activity == 'GQUAL':
+ ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
+ ui['PARAMETERS']['HTFG'] = flags['HTRCH']
+ ui['PARAMETERS']['SEDFG'] = flags['SEDTRN']
+ # ui['PARAMETERS']['REAMFG'] = uci[(operation, 'OXRX', segment)]['PARAMETERS']['REAMFG']
+ ui['PARAMETERS']['HYDRFG'] = flags['HYDR']
+ if flags['HYDR']:
+ ui['PARAMETERS']['LKFG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LKFG']
+ ui['PARAMETERS']['AUX1FG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['AUX1FG']
+ ui['PARAMETERS']['AUX2FG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['AUX2FG']
+ ui['PARAMETERS']['LEN'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LEN']
+ ui['PARAMETERS']['DELTH'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DELTH']
+ if flags['OXRX']:
+ ui['PARAMETERS']['LKFG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LKFG']
+ ui['PARAMETERS']['CFOREA'] = uci[(operation, 'OXRX', segment)]['PARAMETERS']['CFOREA']
+ if flags['SEDTRN']:
+ ui['PARAMETERS']['SSED1'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED1']
+ ui['PARAMETERS']['SSED2'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED2']
+ ui['PARAMETERS']['SSED3'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED3']
+ if flags['HTRCH']:
+ ui['PARAMETERS']['CFSAEX'] = uci[(operation, 'HTRCH', segment)]['PARAMETERS']['CFSAEX']
+ elif flags['PLANK']:
+ if 'CFSAEX' in uci[(operation, 'PLANK', segment)]['PARAMETERS']:
+ ui['PARAMETERS']['CFSAEX'] = uci[(operation, 'PLANK', segment)]['PARAMETERS']['CFSAEX']
+
+ if activity == 'RQUAL':
+ # RQUAL inputs:
+ ui['advectData'] = uci[(operation, 'ADCALC', segment)]['adcalcData']
+ if flags['HYDR']:
+ ui['PARAMETERS']['LKFG'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LKFG']
+
+ ui['FLAGS']['HTFG'] = flags['HTRCH']
+ ui['FLAGS']['SEDFG'] = flags['SEDTRN']
+ ui['FLAGS']['GQFG'] = flags['GQUAL']
+ ui['FLAGS']['OXFG'] = flags['OXFG']
+ ui['FLAGS']['NUTFG'] = flags['NUTRX']
+ ui['FLAGS']['PLKFG'] = flags['PLANK']
+ ui['FLAGS']['PHFG'] = flags['PHCARB']
+ if flags['CONS']:
+ if 'PARAMETERS' in uci[(operation, 'CONS', segment)]:
+ if 'NCONS' in uci[(operation, 'CONS', segment)]['PARAMETERS']:
+ ui['PARAMETERS']['NCONS'] = uci[(operation, 'CONS', segment)]['PARAMETERS']['NCONS']
+
+ # OXRX module inputs:
+ ui_oxrx = uci[(operation, 'OXRX', segment)]
+
+ if flags['HYDR']:
+ ui_oxrx['PARAMETERS']['LEN'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['LEN']
+ ui_oxrx['PARAMETERS']['DELTH'] = uci[(operation, 'HYDR', segment)]['PARAMETERS']['DELTH']
+
+ if flags['HTRCH']:
+ ui_oxrx['PARAMETERS']['ELEV'] = uci[(operation, 'HTRCH', segment)]['PARAMETERS']['ELEV']
+
+ if flags['SEDTRN']:
+ ui['PARAMETERS']['SSED1'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED1']
+ ui['PARAMETERS']['SSED2'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED2']
+ ui['PARAMETERS']['SSED3'] = uci[(operation, 'SEDTRN', segment)]['STATES']['SSED3']
+
+ # PLANK module inputs:
+ if flags['HTRCH']:
+ ui['PARAMETERS']['CFSAEX'] = uci[(operation, 'HTRCH', segment)]['PARAMETERS']['CFSAEX']
+
+ # NUTRX, PLANK, PHCARB module inputs:
+ ui_nutrx = uci[(operation, 'NUTRX', segment)]
+ ui_plank = uci[(operation, 'PLANK', segment)]
+ ui_phcarb = uci[(operation, 'PHCARB', segment)]
+
+ ############ calls activity function like snow() ##############
+ if operation not in ['COPY','GENER']:
+ if (activity == 'HYDR'):
+ errors, errmessages = function(io_manager, siminfo, ui, ts, ftables, state)
+ elif (activity == 'SEDTRN'):
+ errors, errmessages = function(io_manager, siminfo, ui, ts, state)
+ elif (activity != 'RQUAL'):
+ errors, errmessages = function(io_manager, siminfo, ui, ts)
+ else:
+ errors, errmessages = function(io_manager, siminfo, ui, ui_oxrx, ui_nutrx, ui_plank, ui_phcarb, ts, monthdata)
+ ###############################################################
+
+ for errorcnt, errormsg in zip(errors, errmessages):
+ if errorcnt > 0:
+ msg(4, f'Error count {errorcnt}: {errormsg}')
+
+ # default to hourly output
+ outstep = 2
+ outstep_oxrx = 2
+ outstep_nutrx = 2
+ outstep_plank = 2
+ outstep_phcarb = 2
+ if 'BINOUT' in uci[(operation, 'GENERAL', segment)]:
+ if activity in uci[(operation, 'GENERAL', segment)]['BINOUT']:
+ outstep = uci[(operation, 'GENERAL', segment)]['BINOUT'][activity]
+ elif activity == 'RQUAL':
+ outstep_oxrx = uci[(operation, 'GENERAL', segment)]['BINOUT']['OXRX']
+ outstep_nutrx = uci[(operation, 'GENERAL', segment)]['BINOUT']['NUTRX']
+ outstep_plank = uci[(operation, 'GENERAL', segment)]['BINOUT']['PLANK']
+ outstep_phcarb = uci[(operation, 'GENERAL', segment)]['BINOUT']['PHCARB']
+
+ if 'SAVE' in ui:
+ save_timeseries(io_manager,ts,ui['SAVE'],siminfo,saveall,operation,segment,activity,jupyterlab,outstep)
+
+ if (activity == 'RQUAL'):
+ if 'SAVE' in ui_oxrx: save_timeseries(io_manager,ts,ui_oxrx['SAVE'],siminfo,saveall,operation,segment,'OXRX',jupyterlab,outstep_oxrx)
+ if 'SAVE' in ui_nutrx and flags['NUTRX'] == 1: save_timeseries(io_manager,ts,ui_nutrx['SAVE'],siminfo,saveall,operation,segment,'NUTRX',jupyterlab,outstep_nutrx)
+ if 'SAVE' in ui_plank and flags['PLANK'] == 1: save_timeseries(io_manager,ts,ui_plank['SAVE'],siminfo,saveall,operation,segment,'PLANK',jupyterlab,outstep_plank)
+ if 'SAVE' in ui_phcarb and flags['PHCARB'] == 1: save_timeseries(io_manager,ts,ui_phcarb['SAVE'],siminfo,saveall,operation,segment,'PHCARB',jupyterlab,outstep_phcarb)
+
+ msglist = msg(1, 'Done', final=True)
+
+ df = DataFrame(msglist, columns=['logfile'])
+ io_manager.write_log(df)
+
+ if jupyterlab:
+ df = versions(['jupyterlab', 'notebook'])
+ io_manager.write_versioning(df)
+ print('\n\n', df)
+ return
+
+def messages():
+ '''Closure routine; msg() prints messages to screen and run log'''
+ start = dt.now()
+ mlist = []
+ def msg(indent, message, final=False):
+ now = dt.now()
+ m = str(now)[:22] + ' ' * indent + message
+ if final:
+ mn,sc = divmod((now-start).seconds, 60)
+ ms = (now-start).microseconds // 100_000
+ m = '; '.join((m, f'Run time is about {mn:02}:{sc:02}.{ms} (mm:ss)'))
+ print(m)
+ mlist.append(m)
+ return mlist
+ return msg
+
+def get_flows(io_manager:SupportsReadTS, ts, flags, uci, segment, ddlinks, ddmasslinks, steps, msg):
+ # get inflows to this operation
+ for x in ddlinks[segment]:
+ if x.SVOL != 'GENER': # gener already handled in get_gener_timeseries
+ recs = []
+ if x.MLNO == '': # Data from NETWORK part of Links table
+ rec = {}
+ rec['MFACTOR'] = x.MFACTOR
+ rec['SGRPN'] = x.SGRPN
+ rec['SMEMN'] = x.SMEMN
+ rec['SMEMSB1'] = x.SMEMSB1
+ rec['SMEMSB2'] = x.SMEMSB2
+ rec['TMEMN'] = x.TMEMN
+ rec['TMEMSB1'] = x.TMEMSB1
+ rec['TMEMSB2'] = x.TMEMSB2
+ rec['SVOL'] = x.SVOL
+ recs.append(rec)
+ else: # Data from SCHEMATIC part of Links table
+ mldata = ddmasslinks[x.MLNO]
+ for dat in mldata:
+ if dat.SMEMN != '':
+ rec = {}
+ rec['MFACTOR'] = dat.MFACTOR
+ rec['SGRPN'] = dat.SGRPN
+ rec['SMEMN'] = dat.SMEMN
+ rec['SMEMSB1'] = dat.SMEMSB1
+ rec['SMEMSB2'] = dat.SMEMSB2
+ rec['TMEMN'] = dat.TMEMN
+ rec['TMEMSB1'] = dat.TMEMSB1
+ rec['TMEMSB2'] = dat.TMEMSB2
+ rec['SVOL'] = dat.SVOL
+ recs.append(rec)
+ else:
+ # this is the kind that needs to be expanded
+ if dat.SGRPN == "ROFLOW" or dat.SGRPN == "OFLOW":
+ recs = expand_masslinks(flags,uci,dat,recs)
+
+ for rec in recs:
+ mfactor = rec['MFACTOR']
+ sgrpn = rec['SGRPN']
+ smemn = rec['SMEMN']
+ smemsb1 = rec['SMEMSB1']
+ smemsb2 = rec['SMEMSB2']
+ tmemn = rec['TMEMN']
+ tmemsb1 = rec['TMEMSB1']
+ tmemsb2 = rec['TMEMSB2']
+
+ if x.AFACTR != '':
+ afactr = x.AFACTR
+ factor = afactr * mfactor
+ else:
+ factor = mfactor
+
+ # KLUDGE until remaining HSP2 modules are available.
+ if tmemn not in {'IVOL', 'ICON', 'IHEAT', 'ISED', 'ISED1', 'ISED2', 'ISED3',
+ 'IDQAL', 'ISQAL1', 'ISQAL2', 'ISQAL3',
+ 'OXIF', 'NUIF1', 'NUIF2', 'PKIF', 'PHIF',
+ 'ONE', 'TWO'}:
+ continue
+ if (sgrpn == 'OFLOW' and smemn == 'OVOL') or (sgrpn == 'ROFLOW' and smemn == 'ROVOL'):
+ sgrpn = 'HYDR'
+ if (sgrpn == 'OFLOW' and smemn == 'OHEAT') or (sgrpn == 'ROFLOW' and smemn == 'ROHEAT'):
+ sgrpn = 'HTRCH'
+ if (sgrpn == 'OFLOW' and smemn == 'OSED') or (sgrpn == 'ROFLOW' and smemn == 'ROSED'):
+ sgrpn = 'SEDTRN'
+ if (sgrpn == 'OFLOW' and smemn == 'ODQAL') or (sgrpn == 'ROFLOW' and smemn == 'RODQAL'):
+ sgrpn = 'GQUAL'
+ if (sgrpn == 'OFLOW' and smemn == 'OSQAL') or (sgrpn == 'ROFLOW' and smemn == 'ROSQAL'):
+ sgrpn = 'GQUAL'
+ if (sgrpn == 'OFLOW' and smemn == 'OXCF2') or (sgrpn == 'ROFLOW' and smemn == 'OXCF1'):
+ sgrpn = 'OXRX'
+ if (sgrpn == 'OFLOW' and (smemn == 'NUCF9' or smemn == 'OSNH4' or smemn == 'OSPO4')) or (sgrpn == 'ROFLOW' and (smemn == 'NUCF1' or smemn == 'NUFCF2')):
+ sgrpn = 'NUTRX'
+ if (sgrpn == 'OFLOW' and smemn == 'PKCF2') or (sgrpn == 'ROFLOW' and smemn == 'PKCF1'):
+ sgrpn = 'PLANK'
+ if (sgrpn == 'OFLOW' and smemn == 'PHCF2') or (sgrpn == 'ROFLOW' and smemn == 'PHCF1'):
+ sgrpn = 'PHCARB'
+
+ if tmemn == 'ISED' or tmemn == 'ISQAL':
+ tmemn = tmemn + tmemsb1 # need to add sand, silt, clay subscript
+ if (sgrpn == 'HYDR' and smemn == 'OVOL') or (sgrpn == 'HTRCH' and smemn == 'OHEAT'):
+ smemsb2 = ''
+ if sgrpn == 'GQUAL' and smemsb2 == '':
+ smemsb2 = '1'
+
+ smemn, tmemn = expand_timeseries_names(sgrpn, smemn, smemsb1, smemsb2, tmemn, tmemsb1, tmemsb2)
+
+ path = f'RESULTS/{x.SVOL}_{x.SVOLNO}/{sgrpn}'
+ MFname = f'{x.SVOL}{x.SVOLNO}_MFACTOR'
+ AFname = f'{x.SVOL}{x.SVOLNO}_AFACTR'
+ data = f'{smemn}{smemsb1}{smemsb2}'
+
+ data_frame = io_manager.read_ts(Category.RESULTS,x.SVOL,x.SVOLNO, sgrpn)
+ try:
+ if data in data_frame.columns: t = data_frame[data].astype(float64).to_numpy()[0:steps]
+ else: t = data_frame[smemn].astype(float64).to_numpy()[0:steps]
+
+ if MFname in ts and AFname in ts:
+ t *= ts[MFname][:steps] * ts[AFname][0:steps]
+ msg(4, f'MFACTOR modified by timeseries {MFname}')
+ msg(4, f'AFACTR modified by timeseries {AFname}')
+ elif MFname in ts:
+ t *= afactr * ts[MFname][0:steps]
+ msg(4, f'MFACTOR modified by timeseries {MFname}')
+ elif AFname in ts:
+ t *= mfactor * ts[AFname][0:steps]
+ msg(4, f'AFACTR modified by timeseries {AFname}')
+ else:
+ t *= factor
+
+ # if poht to iheat, imprecision in hspf conversion factor requires a slight adjustment
+ if (smemn == 'POHT' or smemn == 'SOHT') and tmemn == 'IHEAT':
+ t *= 0.998553
+ if (smemn == 'PODOXM' or smemn == 'SODOXM') and tmemn == 'OXIF1':
+ t *= 1.000565
+
+ # ??? ISSUE: can fetched data be at different frequency - don't know how to transform.
+ if tmemn in ts:
+ ts[tmemn] += t
+ else:
+ ts[tmemn] = t
+
+ except KeyError:
+ print('ERROR in FLOWS, cant resolve ', path + ' ' + smemn)
+
+ return
+
+'''
+
+ # This table defines the expansion to INFLOW, ROFLOW, OFLOW for RCHRES networks
+ d = [
+ ['IVOL', 'ROVOL', 'OVOL', 'HYDRFG', 'HYDR'],
+ ['ICON', 'ROCON', 'OCON', 'CONSFG', 'CONS'],
+ ['IHEAT', 'ROHEAT', 'OHEAT', 'HTFG', 'HTRCH'],
+ ['ISED', 'ROSED', 'OSED', 'SEDFG', 'SEDTRN'],
+ ['IDQAL', 'RODQAL', 'ODQAL', 'GQALFG', 'GQUAL'],
+ ['ISQAL', 'ROSQAL', 'OSQAL', 'GQALFG', 'GQUAL'],
+ ['OXIF', 'OXCF1', 'OXCF2', 'OXFG', 'OXRX'],
+ ['NUIF1', 'NUCF1', 'NUCF1', 'NUTFG', 'NUTRX'],
+ ['NUIF2', 'NUCF2', 'NUCF9', 'NUTFG', 'NUTRX'],
+ ['PKIF', 'PKCF1', 'PKCH2', 'PLKFG', 'PLANK'],
+ ['PHIF', 'PHCF1', 'PHCF2', 'PHFG', 'PHCARB']]
+ df = pd.DataFrame(d, columns=['INFLOW', 'ROFLOW', 'OFLOW', 'Flag', 'Name'])
+ df.to_hdf(h2name, '/FLOWEXPANSION', format='t', data_columns=True)
+
+
+'''
diff --git a/HSP2/om.py b/HSP2/om.py
new file mode 100644
index 00000000..6129fb06
--- /dev/null
+++ b/HSP2/om.py
@@ -0,0 +1,635 @@
+# set up libraries to import for the load_sim_dicts function
+# later, this will be drawing from the hdf5, but for now we
+# are hard-wiring a set of components for testing.
+# Note: these import calls must be done down here AFTER the helper functions
+# defined aove that are called by the object classes
+import random # this is only used for a demo so may be deprecated
+import json
+import requests
+from requests.auth import HTTPBasicAuth
+import csv
+import pandas as pd
+import numpy as np
+import time
+from numba.typed import Dict
+from numpy import zeros, int32
+from numba import int8, float32, njit, types, typed # import the types
+import random # this is only used for a demo so may be deprecated
+from HSP2.state import *
+
+
+def get_exec_order(model_exec_list, var_ix):
+ """
+ Find the integer key of a variable name in state_ix
+ """
+ model_exec_list = dict(enumerate(model_exec_list.flatten(), 1))
+ for exec_order, ix in model_exec_list.items():
+ if var_ix == ix:
+ # we need to add this to the state
+ return exec_order
+ return False
+
+def init_op_tokens(op_tokens, tops, eq_ix):
+ """
+ Iinitialize the op_tokens Dict
+ This contains the runtime op code for every dynamic operation to be used
+ """
+ for j in range(len(tops)):
+ if isinstance(tops[j], str):
+ # must add this to the state array as a constant
+ s_ix = append_state(state_ix, float(tops[j]))
+ tops[j] = s_ix
+
+ op_tokens[eq_ix] = np.asarray(tops, dtype="i8")
+
+def is_float_digit(n: str) -> bool:
+ """
+ Helper Function to determine if a variable is numeric
+ """
+ try:
+ float(n)
+ return True
+ except ValueError:
+ return False
+
+def model_element_paths(mel, state):
+ """
+ Informational. If given a list of state_ix keys, shows the operators local name and state_path
+ """
+ ixn = 1
+ for ix in mel:
+ ip = get_ix_path(state['state_paths'], ix)
+ im = state['model_object_cache'][ip]
+ print(ixn, ":", im.name, "->", im.state_path, '=', im.get_state())
+ ixn = ixn + 1
+ return
+
+
+# Import Code Classes
+from HSP2.om_model_object import *
+from HSP2.om_sim_timer import *
+#from HSP2.om_equation import *
+from HSP2.om_model_linkage import *
+from HSP2.om_special_action import *
+#from HSP2.om_data_matrix import *
+#from HSP2.om_model_broadcast import *
+#from HSP2.om_simple_channel import *
+#from HSP2.om_impoundment import *
+from HSP2.utilities import versions, get_timeseries, expand_timeseries_names, save_timeseries, get_gener_timeseries
+
+def init_om_dicts():
+ """
+ The base dictionaries used to store model object info
+ """
+ op_tokens = ModelObject.make_op_tokens() # this is just to start, layer it is resized to the object needs
+ # Was
+ #op_tokens = Dict.empty(key_type=types.int64, value_type=types.i8[:])
+ model_object_cache = {} # this does not need to be a special Dict as it is not used in numba
+ return op_tokens, model_object_cache
+
+
+def state_load_om_json(state, io_manager, siminfo):
+ # - model objects defined in file named '[model h5 base].json -- this will populate an array of object definitions that will
+ # be loadable by "model_loader_recursive()"
+ # JSON file would be in same path as hdf5
+ hdf5_path = io_manager._input.file_path
+ (fbase, fext) = os.path.splitext(hdf5_path)
+ # see if there is custom json
+ fjson = fbase + ".json"
+ print("Looking for custom om json ", fjson)
+ if (os.path.isfile(fjson)):
+ print("Found local json file", fjson)
+ jfile = open(fjson)
+ json_data = json.load(jfile)
+ # dict.update() combines the arg dict with the base
+ state['model_data'].update(json_data)
+ # merge in the json siminfo data
+ if 'siminfo' in state['model_data'].keys():
+ siminfo.update(state['model_data']['siminfo'])
+ return
+
+def state_load_om_python(state, io_manager, siminfo):
+ # Look for a [hdf5 file base].py file with specific named functions
+ # - function "om_init_model": This function can be defined in the [model h5 base].py file containing things to be done
+ # early in the model loading, like setting up model objects. This file will already have been loaded by the state module,
+ # and will be present in the module variable hsp2_local_py (we should rename to state_local_py?)
+ # - this file may also contain other dynamically redefined functions such as state_step_hydr()
+ # which can contain code that is executed every timestep inside the _hydr_() function
+ # and can literally supply hooks for any desired user customizable code
+ hdf5_path = io_manager._input.file_path
+ (fbase, fext) = os.path.splitext(hdf5_path)
+ # see if there is a code module with custom python
+ print("Looking for custom om loader in python code ", (fbase + ".py"))
+ hsp2_local_py = state['hsp2_local_py']
+ # Load a function from code if it exists
+ if 'om_init_model' in dir(hsp2_local_py):
+ hsp2_local_py.om_init_model(io_manager, siminfo, state['op_tokens'], state['state_paths'], state['state_ix'], state['dict_ix'], state['ts_ix'], state['model_object_cache'])
+
+def state_initialize_om(state):
+ # this function will check to see if any of the multiple paths to loading
+ # dynamic operational model objects has been supplied for the model.
+ # Grab globals from state for easy handling
+ op_tokens, model_object_cache = init_om_dicts()
+ state_paths, state_ix, dict_ix, ts_ix = state['state_paths'], state['state_ix'], state['dict_ix'], state['ts_ix']
+ # set globals on ModelObject, this makes them persistent throughout all subsequent object instantiation and use
+ ModelObject.op_tokens, ModelObject.state_paths, ModelObject.state_ix, ModelObject.dict_ix, ModelObject.model_object_cache, ModelObject.ts_ix = (
+ op_tokens, state_paths, state_ix, dict_ix, model_object_cache, ts_ix
+ )
+ state['op_tokens'], state['model_object_cache'] = op_tokens, model_object_cache
+
+
+def state_load_dynamics_om(state, io_manager, siminfo):
+ # this function will check to see if any of the multiple paths to loading
+ # dynamic operational model objects has been supplied for the model.
+ # state_initialize_om(state) must have been called already
+ # load dynamic coding libraries if defined by user
+ # note: this used to be inside this function, I think that the loaded module should be no problem
+ # occuring within this function call, since this function is also called from another runtime engine
+ # but if things fail post develop-specact-1 pull requests we may investigate here
+ # also, it may be that this should be loaded elsewhere?
+ # comment state_load_om_python() to disable dynamic python
+ state_load_om_python(state, io_manager, siminfo)
+ state_load_om_json(state, io_manager, siminfo)
+ return
+
+def state_om_model_root_object(state, siminfo):
+ # Create the base that everything is added to. this object does nothing except host the rest.
+ if 'model_root_object' not in state.keys():
+ model_root_object = ModelObject("") # we give this no name so that it does not interfer with child paths like timer, year, etc (i.e. /STATE/year, ...)
+ state['model_root_object'] = model_root_object
+ # set up the timer as the first element
+ if '/STATE/timer' not in state['state_paths'].keys():
+ timer = SimTimer('timer', model_root_object, siminfo)
+ # add base object for the HSP2 domains and other things already added to state so they can be influenced
+ for (seg_name,seg_path) in state['hsp_segments'].items():
+ if (seg_path not in state['model_object_cache'].keys()):
+ # Create an object shell for this
+ new_object = ModelObject(seg_name)
+
+
+def state_om_model_run_prep(state, io_manager, siminfo):
+ # insure model base is set
+ state_om_model_root_object(state, siminfo)
+ # now instantiate and link objects
+ # state['model_data'] has alread been prepopulated from json, .py files, hdf5, etc.
+ model_root_object = state['model_root_object']
+ model_loader_recursive(state['model_data'], model_root_object)
+ print("Loaded objects & paths: insures all paths are valid, connects models as inputs")
+ # both state['model_object_cache'] and the model_object_cache property of the ModelObject class def
+ # will hold a global repo for this data this may be redundant? They DO point to the same datset?
+ # since this is a function that accepts state as an argument and these were both set in state_load_dynamics_om
+ # we can assume they are there and functioning
+ if 'model_object_cache' in state.keys():
+ model_object_cache = state['model_object_cache']
+ else:
+ model_object_cache = ModelObject.model_object_cache
+ model_path_loader(model_object_cache)
+ # len() will be 1 if we only have a simtimer, but > 1 if we have a river being added
+ model_exec_list = []
+ # put all objects in token form for fast runtime execution and sort according to dependency order
+ print("Tokenizing models")
+ if 'ops_data_type' in siminfo.keys():
+ ModelObject.ops_data_type = siminfo['ops_data_type'] # allow override of dat astructure settings
+ ModelObject.op_tokens = ModelObject.make_op_tokens(max(ModelObject.state_ix.keys()) + 1)
+ model_tokenizer_recursive(model_root_object, model_object_cache, model_exec_list)
+ op_tokens = ModelObject.op_tokens
+ # model_exec_list is the ordered list of component operations
+ #print("model_exec_list(", len(model_exec_list),"items):", model_exec_list)
+ # This is used to stash the model_exec_list in the dict_ix, this might be slow, need to verify.
+ # the resulting set of objects is returned.
+ state['state_step_om'] = 'disabled'
+ state['model_object_cache'] = model_object_cache
+ state['model_exec_list'] = np.asarray(model_exec_list, dtype="i8")
+ if ModelObject.ops_data_type == 'ndarray':
+ state_keyvals = np.asarray(zeros(max(ModelObject.state_ix.keys()) + 1), dtype="float32")
+ for ix, val in ModelObject.state_ix.items():
+ state_keyvals[ix] = val
+ state['state_ix'] = state_keyvals
+ else:
+ state['state_ix'] = ModelObject.state_ix
+ state['op_tokens'] = op_tokens
+ if len(op_tokens) > 0:
+ state['state_step_om'] = 'enabled'
+ print("op_tokens is type", type(op_tokens))
+ print("state_ix is type", type(state['state_ix']))
+ print("op_tokens has", len(op_tokens),"elements, with ", len(model_exec_list),"executable elements")
+ return
+
+# model class reader
+# get model class to guess object type in this lib
+# the parent object must be known
+def model_class_loader(model_name, model_props, container = False):
+ # todo: check first to see if the model_name is an attribute on the container
+ # Use: if hasattr(container, model_name):
+ # if so, we set the value on the container, if not, we create a new subcomp on the container
+ if model_props == None:
+ return False
+ if type(model_props) is str:
+ if is_float_digit(model_props):
+ model_object = ModelConstant(model_name, container, float(model_props) )
+ return model_object
+ else:
+ return False
+ elif type(model_props) is dict:
+ object_class = model_props.get('object_class')
+ if object_class == None:
+ # return as this is likely an attribute that is used for the containing class as attribute
+ # and is handled by the container
+ # todo: we may want to handle this here? Or should this be a method on the class?
+ # Use: if hasattr(container, model_name):
+ return False
+ model_object = False
+ # Note: this routine uses the ".get()" method of the dict class type
+ # for attributes to pass in.
+ # ".get()" will return NoValue if it does not exist or the value.
+ if object_class == 'Equation':
+ model_object = Equation(model_props.get('name'), container, model_props )
+ #remove_used_keys(model_props,
+ elif object_class == 'SimpleChannel':
+ model_object = SimpleChannel(model_props.get('name'), container, model_props )
+ elif object_class == 'Impoundment':
+ model_object = Impoundment(model_props.get('name'), container, model_props )
+ elif object_class == 'Constant':
+ model_object = ModelConstant(model_props.get('name'), container, model_props.get('value') )
+ elif ( object_class.lower() == 'datamatrix'):
+ # add a matrix with the data, then add a matrix accessor for each required variable
+ has_props = DataMatrix.check_properties(model_props)
+ if has_props == False:
+ print("Matrix object must have", DataMatrix.required_properties())
+ return False
+ # create it
+ model_object = DataMatrix(model_props.get('name'), container, model_props)
+ elif object_class == 'ModelBroadcast':
+ # add a matrix with the data, then add a matrix accessor for each required variable
+ has_props = ModelBroadcast.check_properties(model_props)
+ if has_props == False:
+ print("ModelBroadcast object must have", ModelBroadcast.required_properties())
+ return False
+ # create it
+ model_object = ModelBroadcast(model_props.get('name'), container, model_props)
+ elif object_class == 'MicroWatershedModel':
+ # add a matrix with the data, then add a matrix accessor for each required variable
+ has_props = MicroWatershedModel.check_properties(model_props)
+ if has_props == False:
+ print("MicroWatershedModel object must have", MicroWatershedModel.required_properties())
+ return False
+ # create it
+ model_object = DataMatrix(model_props.get('name'), container, model_props)
+ elif object_class == 'ModelLinkage':
+ model_object = ModelLinkage(model_props.get('name'), container, model_props)
+ elif object_class == 'SpecialAction':
+ model_object = SpecialAction(model_props.get('name'), container, model_props)
+ else:
+ #print("Loading", model_props.get('name'), "with object_class", object_class,"as ModelObject")
+ model_object = ModelObject(model_props.get('name'), container, model_props)
+ # one way to insure no class attributes get parsed as sub-comps is:
+ # model_object.remove_used_keys()
+ if len(model_object.model_props_parsed) == 0:
+ # attach these to the object for posterity
+ model_object.model_props_parsed = model_props
+ # better yet to just NOT send those attributes as typed object_class arrays, instead just name : value
+ return model_object
+
+def model_class_translate(model_props, object_class):
+ # make adjustments to non-standard items
+ # this might better be moved to methods on the class handlers
+ if object_class == 'hydroImpoundment':
+ # special handling of matrix/storage_stage_area column
+ # we need to test to see if the storage table has been renamed
+ # make table from matrix or storage_stage_area
+ # then make accessors from
+ storage_stage_area = model_props.get('storage_stage_area')
+ matrix = model_props.get('matrix')
+ if ( (storage_stage_area == None) and (matrix != None)):
+ model_props['storage_stage_area'] = matrix
+ del model_props['matrix']
+ if object_class == 'broadCastObject':
+ model_props['object_class'] = 'ModelBroadcast'
+ model_props['broadcast_channel'] = model_props['broadcast_class']
+ if object_class == 'USGSChannelGeomObject_sub':
+ model_props['object_class'] = 'SimpleChannel'
+ print("Handling USGSChannelGeomObject_sub as SimpleChannel")
+ if object_class == 'hydroImpoundment':
+ model_props['object_class'] = 'Impoundment'
+ print("Handling hydroImpoundment as Impoundment")
+ if object_class == 'hydroImpSmall':
+ model_props['object_class'] = 'Impoundment'
+ print("Handling hydroImpSmall as Impoundment")
+ # now handle disabled classes - this is temporary to prevent having to comment and uncomment
+ disabled_classes = {'SimpleChannel', 'Impoundment', 'DataMatrix', 'dataMatrix'}
+ if model_props['object_class'] in disabled_classes:
+ print("Disabling class", model_props['object_class'], 'rendering as ModelObject')
+ model_props['object_class'] = 'ModelObject'
+
+def model_loader_recursive(model_data, container):
+ k_list = model_data.keys()
+ object_names = dict.fromkeys(k_list , 1)
+ if type(object_names) is not dict:
+ return False
+ for object_name in object_names:
+ #print("Handling", object_name)
+ if object_name in {'name', 'object_class', 'id', 'value', 'default'}:
+ # we should ask the class what properties are part of the class and also skips these
+ # therefore, we can assume that anything else must be a child object that needs to
+ # be handled first -- but how to do this?
+ continue
+ model_props = model_data[object_name]
+ if type(model_props) is not dict:
+ # this is a constant, the loader is built to handle this, but this causes errors with
+ # properties on the class that are expected so we just skip and trust that all constants
+ # are formally declared as type Constant
+ continue
+ if type(model_props) is dict:
+ if not ('object_class' in model_props):
+ # this is either a class attribute or an un-handleable meta-data
+ # if the class atttribute exists, we should pass it to container to load
+ #print("Skipping un-typed", object_name)
+ continue
+ #print("Translating", object_name)
+ # this is a kludge, but can be important
+ object_class = model_props['object_class']
+ model_class_translate(model_props, object_class)
+ # now we either have a constant (key and value), or a
+ # fully defined object. Either one should work OK.
+ #print("Trying to load", object_name)
+ model_object = model_class_loader(object_name, model_props, container)
+ if model_object == False:
+ print("Could not load", object_name)
+ continue # not handled, but for now we will continue, tho later we should bail?
+ # now for container type objects, go through its properties and handle
+ if type(model_props) is dict:
+ model_loader_recursive(model_props, model_object)
+
+def model_path_loader(model_object_cache):
+ k_list = model_object_cache.keys()
+ model_names = dict.fromkeys(k_list , 1)
+ for model_name in model_names:
+ #print("Loading paths for", model_name)
+ model_object = model_object_cache[model_name]
+ model_object.find_paths()
+
+
+def model_tokenizer_recursive(model_object, model_object_cache, model_exec_list, model_touch_list = []):
+ """
+ Given a root model_object, trace the inputs to load things in order
+ Store this order in model_exec_list
+ Note: All ordering is as-needed organic, except Broadcasts
+ - read from children is completed after all other inputs
+ - read from parent is completed before all other inputs
+ - could this be accomplished by more sophisticated handling of read
+ broadcasts?
+ - When loading a read broadcast, can we iterate through items
+ that are sending to that broadcast?
+ - Or is it better to let it as it is,
+ """
+ #print("Handling", model_object.name, " ", model_object.state_path)
+ if model_object.ix in model_exec_list:
+ return
+ if model_object.ix in model_touch_list:
+ #print("Already touched", model_object.name, model_object.ix, model_object.state_path)
+ return
+ # record as having been called, and will ultimately return, to prevent recursions
+ model_touch_list.append(model_object.ix)
+ k_list = model_object.inputs.keys()
+ input_names = dict.fromkeys(k_list , 1)
+ if type(input_names) is not dict:
+ return
+ # isolate broadcasts, and sort out -- what happens if an equation references a broadcast var?
+ # is this a limitation of treating all children as inputs?
+ # alternative, leave broadcasts organic, but load children first?
+ # children first, then local sub-comps is old method? old method:
+ # - read parent broadcasts
+ # - get inputs (essentially, linked vars)
+ # - send child broadcasts (will send current step parent reads, last step local proc data)
+ # - execute children
+ # - execute local sub-comps
+ for input_name in input_names:
+ #print("Checking input", input_name)
+ input_path = model_object.inputs[input_name]
+ if input_path in model_object_cache.keys():
+ input_object = model_object_cache[input_path]
+ model_tokenizer_recursive(input_object, model_object_cache, model_exec_list, model_touch_list)
+ else:
+ if input_path in model_object.state_paths.keys():
+ # this is a valid state reference without an object
+ # thus, it is likely part of internals that are manually added
+ # which should be fine. tho perhaps we should have an object for these too.
+ continue
+ print("Problem loading input", input_name, "input_path", input_path, "not in model_object_cache.keys()")
+ return
+ # now after tokenizing all inputs this should be OK to tokenize
+ model_object.add_op_tokens()
+ if model_object.optype in ModelObject.runnables:
+ model_exec_list.append(model_object.ix)
+
+
+def model_order_recursive(model_object, model_object_cache, model_exec_list, model_touch_list = []):
+ """
+ Given a root model_object, trace the inputs to load things in order
+ Store this order in model_exec_list
+ Note: All ordering is as-needed organic, except Broadcasts
+ - read from children is completed after all other inputs
+ - read from parent is completed before all other inputs
+ - could this be accomplished by more sophisticated handling of read
+ broadcasts?
+ - When loading a read broadcast, can we iterate through items
+ that are sending to that broadcast?
+ - Or is it better to let it as it is,
+ """
+ if model_object.ix in model_exec_list:
+ return
+ if model_object.ix in model_touch_list:
+ #print("Already touched", model_object.name, model_object.ix, model_object.state_path)
+ return
+ # record as having been called, and will ultimately return, to prevent recursions
+ model_touch_list.append(model_object.ix)
+ k_list = model_object.inputs.keys()
+ input_names = dict.fromkeys(k_list , 1)
+ if type(input_names) is not dict:
+ return
+ # isolate broadcasts, and sort out -- what happens if an equation references a broadcast var?
+ # is this a limitation of treating all children as inputs?
+ # alternative, leave broadcasts organic, but load children first?
+ # children first, then local sub-comps is old method? old method:
+ # - read parent broadcasts
+ # - get inputs (essentially, linked vars)
+ # - send child broadcasts (will send current step parent reads, last step local proc data)
+ # - execute children
+ # - execute local sub-comps
+ for input_name in input_names:
+ #print("Checking input", input_name)
+ input_path = model_object.inputs[input_name]
+ if input_path in model_object_cache.keys():
+ input_object = model_object_cache[input_path]
+ model_order_recursive(input_object, model_object_cache, model_exec_list, model_touch_list)
+ else:
+ if input_path in model_object.state_paths.keys():
+ # this is a valid state reference without an object
+ # thus, it is likely part of internals that are manually added
+ # which should be fine. tho perhaps we should have an object for these too.
+ continue
+ print("Problem loading input", input_name, "input_path", input_path, "not in model_object_cache.keys()")
+ return
+ # now after loading input dependencies, add this to list
+ model_exec_list.append(model_object.ix)
+
+def model_domain_dependencies(state, domain, ep_list):
+ """
+ Given an hdf5 style path to a domain, and a list of variable endpoints in that domain,
+ Find all model elements that influence the endpoints state
+ Returns them as a sorted list of index values suitable as a model_exec_list
+ """
+ mello = []
+ for ep in ep_list:
+ mel = []
+ mtl = []
+ # if the given element is NOT in model_object_cache, then nothing is acting on it, so we return empty list
+ if (domain + '/' + ep) in state['model_object_cache'].keys():
+ endpoint = state['model_object_cache'][domain + '/' + ep]
+ model_order_recursive(endpoint, state['model_object_cache'], mel, mtl)
+ mello = mello + mel
+
+ return mello
+
+def save_object_ts(io_manager, siminfo, op_tokens, ts_ix, ts):
+ # Decide on using from utilities.py:
+ # - save_timeseries(io_manager, ts, savedict, siminfo, saveall, operation, segment, activity, compress=True)
+ # Or, skip the save_timeseries wrapper and call write_ts() directly in io.py:
+ # write_ts(self, data_frame:pd.DataFrame, save_columns: List[str], category:Category, operation:Union[str,None]=None, segment:Union[str,None]=None, activity:Union[str,None]=None)
+ # see line 317 in utilities.py for use example of write_ts()
+ x = 0 # dummy
+ return
+
+@njit
+def iterate_models(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, steps, dstep = -1):
+ checksum = 0.0
+ for step in range(steps):
+ pre_step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step)
+ step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step)
+ #print("Steps completed", step)
+ return checksum
+
+@njit
+def pre_step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step):
+ for i in model_exec_list:
+ if op_tokens[i][0] == 12:
+ # register type data (like broadcast accumulators)
+ pre_step_register(op_tokens[i], state_ix)
+ return
+
+@njit
+def step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step):
+ for i in model_exec_list:
+ step_one(op_tokens, op_tokens[i], state_ix, dict_ix, ts_ix, step, 0)
+ return
+
+
+
+@njit
+def step_one(op_tokens, ops, state_ix, dict_ix, ts_ix, step, debug = 0):
+ # op_tokens is passed in for ops like matrices that have lookups from other
+ # locations. All others rely only on ops
+ # todo: decide if all step_[class() functions should set value in state_ix instead of returning value?
+ val = 0
+ if debug == 1:
+ print("DEBUG: Operator ID", ops[1], "is op type", ops[0])
+ if ops[0] == 1:
+ pass #step_equation(ops, state_ix)
+ elif ops[0] == 2:
+ # todo: this should be moved into a single function,
+ # with the conforming name step_matrix(op_tokens, ops, state_ix, dict_ix)
+ if (ops[1] == ops[2]):
+ if debug == 1:
+ print("DEBUG: Calling exec_tbl_values", ops)
+ # this insures a matrix with variables in it is up to date
+ # only need to do this if the matrix data and matrix config are on same object
+ # otherwise, the matrix data is an input and has already been evaluated
+ pass #exec_tbl_values(ops, state_ix, dict_ix)
+ if (ops[3] > 0):
+ # this evaluates a single value from a matrix if the matrix is configured to do so.
+ if debug == 1:
+ print("DEBUG: Calling exec_tbl_eval", ops)
+ pass #exec_tbl_eval(op_tokens, ops, state_ix, dict_ix)
+ elif ops[0] == 3:
+ step_model_link(ops, state_ix, ts_ix, step)
+ elif ops[0] == 4:
+ val = 0
+ elif ops[0] == 5:
+ step_sim_timer(ops, state_ix, dict_ix, ts_ix, step)
+ elif ops[0] == 9:
+ val = 0
+ elif ops[0] == 13:
+ pass #step_simple_channel(ops, state_ix, dict_ix, step)
+ # Op 100 is Basic ACTION in Special Actions
+ elif ops[0] == 100:
+ step_special_action(ops, state_ix, dict_ix, step)
+ return
+
+@njit
+def step_model_test(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step, debug_step = -1):
+ for i in model_exec_list:
+ ops = op_tokens[i]
+ val = 0
+ if (step == debug_step):
+ print("Exec'ing step ", step, " model ID", i)
+ # op_tokens is passed in for ops like matrices that have lookups from other
+ # locations. All others rely only on ops
+ step_one(op_tokens, op_tokens[i], state_ix, dict_ix, ts_ix, step, 0)
+ return
+
+@njit
+def step_model_pcode(model_exec_list, op_tokens, state_info, state_paths, state_ix, dict_ix, ts_ix, step):
+ '''
+ This routine includes support for dynamically loaded python code which is powerful but slow
+ This is not yet implemented anywhere, just an idea. But in theory it would allow easy switching between
+ the faster runtime without dynamic code if the user did not request it.
+ At minimum, this could be used to more efficiently enable/disable this feature for testing by simply calling
+ a separate routine.
+ - to do so we would need to add state_paths to the variables passed to step_model which should be OK?
+ '''
+ hydr_ix = hydr_get_ix(state_ix, state_paths, state_info['domain']) # could be done more efficiently, once per model run
+ state_step_hydr(state_info, state_paths, state_ix, dict_ix, ts_ix, hydr_ix, step)
+ val = 0
+ for i in model_exec_list:
+ step_one(op_tokens, op_tokens[i], state_ix, dict_ix, ts_ix, step, 0)
+ return
+
+@njit
+def post_step_model(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step):
+ return
+
+def step_object(thisobject, step):
+ # this calls the step for a given model object and timestep
+ # this is a workaround since the object method ModelObject.step() fails to find the step_one() function ?
+ step_one(thisobject.op_tokens, thisobject.op_tokens[thisobject.ix], thisobject.state_ix, thisobject.dict_ix, thisobject.ts_ix, step)
+
+
+@njit
+def pre_step_test(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step):
+ for i in model_exec_list:
+ ops = op_tokens[i]
+ #for i in model_exec_list:
+ # op = op_tokens[i]
+ if ops[0] == 12:
+ # register type data (like broadcast accumulators)
+ pre_step_register(ops, state_ix)
+ #continue
+ #elif ops[0] == 1:
+ # # register type data (like broadcast accumulators)
+ # continue
+ return
+
+@njit
+def iterate_perf(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, steps, debug_step = -1):
+ checksum = 0.0
+ for step in range(steps):
+ pre_step_test(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step)
+ #step_model_test(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, step, debug_step)
+ #print("Steps completed", step)
+ return checksum
+
+def time_perf(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, steps):
+ start = time.time()
+ iterate_perf(model_exec_list, op_tokens, state_ix, dict_ix, ts_ix, steps)
+ end = time.time()
+ print(len(model_exec_list), "components iterated over", siminfo['steps'], "time steps took" , end - start, "seconds")
diff --git a/HSP2/om_model_linkage.py b/HSP2/om_model_linkage.py
new file mode 100644
index 00000000..eae74f76
--- /dev/null
+++ b/HSP2/om_model_linkage.py
@@ -0,0 +1,126 @@
+"""
+The class ModelLinkage is used to translate copy data from one state location to another.
+It is also used to make an implicit parent child link to insure that an object is loaded
+during a model simulation.
+"""
+from HSP2.state import *
+from HSP2.om import *
+from HSP2.om_model_object import ModelObject
+from numba import njit
+class ModelLinkage(ModelObject):
+ def __init__(self, name, container = False, model_props = {}):
+ super(ModelLinkage, self).__init__(name, container, model_props)
+ # ModelLinkage copies a values from right to left
+ # right_path: is the data source for the link
+ # left_path: is the destination of the link
+ # - is implicit in types 1-3, i.e., the ModelLinkage object path itself is the left_path
+ # - left_path parameter is only needed for pushes (type 4 and 5)
+ # - the push is functionally equivalent to a pull whose path resolves to the specified left_path
+ # - but the push allows the potential for multiple objects to set a single state
+ # This can be dangerous or difficult to debug, but essential to replicate old HSPF behaviour
+ # especially in the case of If/Then type structures.
+ # it is also useful for the broadcast objects, see om_model_broadcast for those
+ # link_type: 1 - local parent-child, 2 - local property link (state data), 3 - remote linkage (ts data only), 4 - push to accumulator (like a hub), 5 - overwrite remote value
+ self.optype = 3 # 0 - shell object, 1 - equation, 2 - datamatrix, 3 - ModelLinkage, 4 -
+ if container == False:
+ # this is required
+ print("Error: a link must have a container object to serve as the destination")
+ return False
+ self.right_path = self.handle_prop(model_props, 'right_path')
+ self.link_type = self.handle_prop(model_props, 'link_type', False, 0)
+ self.left_path = self.handle_prop(model_props, 'left_path')
+
+ if self.left_path == False:
+ # self.state_path gets set when creating at the parent level
+ self.left_path = self.state_path
+ if (self.link_type == 0):
+ # if this is a simple input we remove the object from the model_object_cache, and pass back to parent as an input
+ del self.model_object_cache[self.state_path]
+ del self.state_ix[self.ix]
+ container.add_input(self.name, self.right_path)
+ # this breaks for some reason, doesn't like the input name being different than the variable path ending?
+ # maybe because we should be adding the input to the container, not the self?
+ self.add_input(self.right_path, self.right_path)
+
+ def handle_prop(self, model_props, prop_name, strict = False, default_value = None ):
+ # parent method handles most cases, but subclass handles special situations.
+ prop_val = super().handle_prop(model_props, prop_name, strict, default_value)
+ if ( (prop_name == 'right_path') and (prop_val == None) or (prop_val == '')):
+ raise Exception("right_path cannot be empty. Object creation halted. Path to object with error is " + self.state_path)
+ if ( (prop_name == 'right_path')):
+ # check for special keyword [parent]
+ pre_val = prop_val
+ prop_val.replace("[parent]", self.container.state_path)
+ #print("Changed ", pre_val, " to ", prop_val)
+ return prop_val
+
+ @staticmethod
+ def required_properties():
+ # returns a list or minimum properties to create.
+ # see ModelConstant below for how to call this in a sub-class
+ # note:
+ # req_props = super(DataMatrix, DataMatrix).required_properties()
+ req_props = ['name', 'right_path']
+ return req_props
+
+ def find_paths(self):
+ # this should be needed if this is a PUSH link_type = 4 or 5
+ super().find_paths()
+ self.paths_found = False # override parent setting until we verify everything
+ # do we need to do this, or just trust it exists?
+ #self.insure_path(self, self.right_path)
+ # the left path, if this is type 4 or 5, is a push, so we must require it
+ if ( (self.link_type == 4) or (self.link_type == 5) or (self.link_type == 6) ):
+ self.insure_path(self.left_path)
+ self.paths_found = True
+ return
+
+ def tokenize(self):
+ super().tokenize()
+ # - if this is a data property link then we add op codes to do a copy of data from one state address to another
+ # - if this is simply a parent-child connection, we do not render op-codes, but we do use this for assigning
+ # - execution hierarchy
+ #print("Linkage/link_type ", self.name, self.link_type,"created with params", self.model_props_parsed)
+ if self.link_type in (2, 3):
+ src_ix = get_state_ix(self.state_ix, self.state_paths, self.right_path)
+ if not (src_ix == False):
+ self.ops = self.ops + [src_ix, self.link_type]
+ else:
+ print("Error: link ", self.name, "does not have a valid source path")
+ #print(self.name,"tokenize() result", self.ops)
+ if (self.link_type == 4) or (self.link_type == 5) or (self.link_type == 6):
+ # we push to the remote path in this one
+ left_ix = get_state_ix(self.state_ix, self.state_paths, self.left_path)
+ right_ix = get_state_ix(self.state_ix, self.state_paths, self.right_path)
+ if (left_ix != False) and (right_ix != False):
+ self.ops = self.ops + [left_ix, self.link_type, right_ix]
+ else:
+ print("Error: link ", self.name, "does not have valid paths", "(left = ", self.left_path, left_ix, "right = ", self.right_path, right_ix, ")")
+ #print("tokenize() result", self.ops)
+
+# Function for use during model simulations of tokenized objects
+@njit
+def step_model_link(op_token, state_ix, ts_ix, step):
+ #if step == 2:
+ #print("step_model_link() called at step 2 with op_token=", op_token)
+ if op_token[3] == 1:
+ return True
+ elif op_token[3] == 2:
+ state_ix[op_token[1]] = state_ix[op_token[2]]
+ return True
+ elif op_token[3] == 3:
+ # read from ts variable TBD
+ # state_ix[op_token[1]] = ts_ix[op_token[2]][step]
+ return True
+ elif op_token[3] == 4:
+ # add value in local state to the remote broadcast hub+register state
+ state_ix[op_token[2]] = state_ix[op_token[2]] + state_ix[op_token[4]]
+ return True
+ elif op_token[3] == 5:
+ # overwrite remote variable state with value in another paths state
+ state_ix[op_token[2]] = state_ix[op_token[4]]
+ return True
+ elif op_token[3] == 6:
+ # set value in a timerseries
+ ts_ix[op_token[2]][step] = state_ix[op_token[4]]
+ return True
diff --git a/HSP2/om_model_object.py b/HSP2/om_model_object.py
new file mode 100644
index 00000000..2b03a918
--- /dev/null
+++ b/HSP2/om_model_object.py
@@ -0,0 +1,445 @@
+"""
+The class ModelObject is the base class upon which all other dynamic model objects are built on.
+It handles all Dict management functions, but provides for no runtime execution of it's own.
+All runtime exec is done by child classes.
+"""
+from HSP2.state import *
+from HSP2.om import *
+from pandas import Series, DataFrame, concat, HDFStore, set_option, to_numeric
+from pandas import Timestamp, Timedelta, read_hdf, read_csv
+from numpy import pad
+
+class ModelObject:
+ state_ix = {} # Shared Dict with the numerical state of each object
+ state_paths = {} # Shared Dict with the hdf5 path of each object
+ dict_ix = {} # Shared Dict with the hdf5 path of each object
+ ts_ix = {} # Shared Dict with the hdf5 path of each object
+ op_tokens = {} # Shared Dict with the tokenized representation of each object, will be turned into array of ints
+ model_object_cache = {} # Shared with actual objects, keyed by their path
+ model_exec_list = {} # Shared with actual objects, keyed by their path
+ max_token_length = 64 # limit on complexity of tokenized objects since op_tokens must be fixed dimensions for numba
+ runnables = [1,2,5,6,8,9,10,11,12,13,14,15, 100] # runnable components important for optimization
+ ops_data_type = 'ndarray' # options are ndarray or Dict - Dict appears slower, but unsure of the cause, so keep as option.
+
+ def __init__(self, name, container = False, model_props = {}):
+ self.name = name
+ self.container = container # will be a link to another object
+ self.log_path = "" # Ex: "/RESULTS/RCHRES_001/SPECL"
+ self.attribute_path = "" #
+ self.model_props_parsed = {} # a place to stash parse record for debugging
+ if (hasattr(self,'state_path') == False):
+ # if the state_path has already been set, we accept it.
+ # this allows sub-classes to override the standard path guessing approach.
+ self.state_path = "" # Ex: "/STATE/RCHRES_001" # the pointer to this object state
+ self.inputs = {} # associative array with key=local_variable_name, value=hdf5_path Ex: [ 'Qin' : '/STATE/RCHRES_001/IVOL' ]
+ self.inputs_ix = {} # associative array with key=local_variable_name, value=state_ix integer key
+ self.ix = False
+ self.paths_found = False # this should be False at start
+ self.default_value = 0.0
+ self.ops = []
+ self.optype = 0 # OpTypes are as follows:
+ # 0 - model object, 1 - equation, 2 - datamatrix, 3 - input/ModelLinkage,
+ # 4 - broadcastChannel, 5 - SimTimer, 6 - Conditional, 7 - ModelConstant (numeric),
+ # 8 - matrix accessor, 9 - MicroWatershedModel, 10 - MicroWatershedNetwork, 11 - ModelTimeseries,
+ # 12 - ModelRegister, 13 - SimpleChannel, 14 - SimpleImpoundment, 15 - FlowBy
+ self.register_path() # note this registers the path AND stores the object in model_object_cache
+ self.parse_model_props(model_props)
+
+ @staticmethod
+ def required_properties():
+ # returns a list or minimum properties to create.
+ # see ModelConstant below for how to call this in a sub-class
+ # note:
+ # req_props = super(DataMatrix, DataMatrix).required_properties()
+ req_props = ['name']
+ return req_props
+
+ @staticmethod
+ def make_op_tokens(num_ops = 5000):
+ if (ModelObject.ops_data_type == 'ndarray'):
+ op_tokens = int32(zeros((num_ops,64))) # was Dict.empty(key_type=types.int64, value_type=types.i8[:])
+ else:
+ op_tokens = Dict.empty(key_type=types.int64, value_type=types.i8[:])
+ return op_tokens
+
+ @staticmethod
+ def runnable_op_list(op_tokens, meo, debug = False):
+ # only return those objects that do something at runtime
+ rmeo = []
+ run_ops = {}
+ for ops in ModelObject.op_tokens:
+ if ops[0] in ModelObject.runnables:
+ run_ops[ops[1]] = ops
+ if debug == True:
+ print("Found runnable", ops[1], "type", ops[0])
+ for ix in meo:
+ if ix in run_ops.keys():
+ rmeo.append(ix)
+ rmeo = np.asarray(rmeo, dtype="i8")
+ return rmeo
+
+ @staticmethod
+ def model_format_ops(ops):
+ if (ModelObject.ops_data_type == 'ndarray'):
+ ops = pad(ops,(0,ModelObject.max_token_length))[0:ModelObject.max_token_length]
+ else:
+ ops = np.asarray(ops, dtype="i8")
+ return ops
+
+ def format_ops(self):
+ # this can be sub-classed if needed, but should not be since it is based on the ops_data_type
+ # See ModelObject.model_format_ops()
+ return ModelObject.model_format_ops(self.ops)
+
+ @classmethod
+ def check_properties(cls, model_props):
+ # this is for pre-screening properties for validity in model creation routines
+ # returns True or False and can be as simple as checking the list of required_properties
+ # or a more detailed examination of suitability of what those properties contain
+ req_props = cls.required_properties()
+ matching_props = set(model_props).intersection(set(req_props))
+ if len(matching_props) < len(req_props):
+ return False
+ return True
+
+ def handle_inputs(self, model_props):
+ if 'inputs' in model_props.keys():
+ for i_pair in model_props['inputs']:
+ i_name = i_pair[0]
+ i_target = i_pair[1]
+ i_target.replace("[parent]", self.container.state_path)
+ self.add_input(i_name, i_target)
+
+ def handle_prop(self, model_props, prop_name, strict = False, default_value = None ):
+ # this checks to see if the prop is in dict with value form, or just a value
+ # strict = True causes an exception if property is missing from model_props dict
+ prop_val = model_props.get(prop_name)
+ if type(prop_val) == list: # this doesn't work, but nothing gets passed in like this? Except broadcast params, but they are handled in the sub-class
+ prop_val = prop_val
+ elif type(prop_val) == dict:
+ prop_val = prop_val.get('value')
+ if strict and (prop_val == None):
+ raise Exception("Cannot find property " + prop_name + " in properties passed to "+ self.name + " and strict = True. Object creation halted. Path to object with error is " + self.state_path)
+ if (prop_val == None) and not (default_value == None):
+ prop_val = default_value
+ return prop_val
+
+ def parse_model_props(self, model_props, strict = False ):
+ # sub-classes will allow an create argument "model_props" and handle them here.
+ # - subclasses should insure that they call super().parse_model_props() or include all code below
+ # see also: handle_prop(), which will be called y parse_model_props
+ # for all attributes supported by the class
+ # this base object only handles inputs
+ self.handle_inputs(model_props)
+ self.model_props_parsed = model_props
+ return True
+
+ def set_state(self, set_value):
+ var_ix = set_state(self.state_ix, self.state_paths, self.state_path, set_value)
+ return var_ix
+
+ def load_state_dicts(self, op_tokens, state_paths, state_ix, dict_ix):
+ self.op_tokens = op_tokens
+ self.state_paths = state_paths
+ self.state_ix = state_ix
+ self.dict_ix = dict_ix
+
+ def save_object_hdf(self, hdfname, overwrite = False ):
+ # save the object in the full hdf5 path
+ # if overwrite = True replace this and all children, otherwise, just save this.
+ # note: "with" statement helps prevent unclosed resources, see: https://www.geeksforgeeks.org/with-statement-in-python/
+ with HDFStore(hdfname, mode = 'a') as store:
+ dummy_var = True
+
+ def make_paths(self, base_path = False):
+ if base_path == False: # we are NOT forcing paths
+ if not (self.container == False):
+ self.state_path = self.container.state_path + "/" + str(self.name)
+ self.attribute_path = self.container.attribute_path + "/" + str(self.name)
+ elif self.name == "":
+ self.state_path = "/STATE"
+ self.attribute_path = "/OBJECTS"
+ else:
+ self.state_path = "/STATE/" + str(self.name)
+ self.attribute_path = "/OBJECTS/" + str(self.name)
+ else:
+ # base_path is a Dict with state_path and attribute_path set
+ self.state_path = base_path['STATE'] + self.name
+ self.attribute_path = base_path['OBJECTS'] + self.name
+ return self.state_path
+
+ def get_state(self, var_name = False):
+ if var_name == False:
+ return self.state_ix[self.ix]
+ else:
+ var_path = self.find_var_path(var_name)
+ var_ix = get_state_ix(self.state_ix, self.state_paths, var_path)
+ if (var_ix == False):
+ return False
+ return self.state_ix[var_ix]
+
+ def get_exec_order(self, var_name = False):
+ if var_name == False:
+ var_ix = self.ix
+ else:
+ var_path = self.find_var_path(var_name)
+ var_ix = get_state_ix(self.state_ix, self.state_paths, var_path)
+ exec_order = get_exec_order(self.model_exec_list,var_ix)
+ return exec_order
+
+ def get_object(self, var_name = False):
+ if var_name == False:
+ return self.model_object_cache[self.state_path]
+ else:
+ var_path = self.find_var_path(var_name)
+ return self.model_object_cache[var_path]
+
+
+ def find_var_path(self, var_name, local_only = False):
+ # check local inputs for name
+ if var_name in self.inputs.keys():
+ return self.inputs[var_name]
+ if local_only:
+ return False # we are limiting the scope, so just return
+ # check parent for name
+ if not (self.container == False):
+ return self.container.find_var_path(var_name)
+ # check for root state vars STATE + var_name
+ if ("/STATE/" + var_name) in self.state_paths.keys():
+ #return self.state_paths[("/STATE/" + var_name)]
+ return ("/STATE/" + var_name)
+ # check for root state vars
+ if var_name in self.state_paths.keys():
+ #return self.state_paths[var_name]
+ return var_name
+ return False
+
+ def constant_or_path(self, keyname, keyval, trust = False):
+ if is_float_digit(keyval):
+ # we are given a constant value, not a variable reference
+ k = ModelConstant(keyname, self, float(keyval))
+ kix = k.ix
+ else:
+ kix = self.add_input(keyname, keyval, 2, trust)
+ return kix
+
+ def register_path(self):
+ # initialize the path variable if not already set
+ if self.state_path == '':
+ self.make_paths()
+ self.ix = set_state(self.state_ix, self.state_paths, self.state_path, self.default_value)
+ # store object in model_object_cache
+ if not (self.state_path in self.model_object_cache.keys()):
+ self.model_object_cache[self.state_path] = self
+ # this should check to see if this object has a parent, and if so, register the name on the parent
+ # default is as a child object.
+ if not (self.container == False):
+ # since this is a request to actually create a new path, we instruct trust = True as last argument
+ return self.container.add_input(self.name, self.state_path, 1, True)
+ return self.ix
+
+ def add_input(self, var_name, var_path, input_type = 1, trust = False):
+ # this will add to the inputs, but also insure that this
+ # requested path gets added to the state/exec stack via an input object if it does
+ # not already exist.
+ # - var_name = the local name for this linked entity/attribute
+ # - var_path = the full path of the entity/attribute we are linking to
+ # - input types: 1: parent-child link, 2: state property link, 3: timeseries object property link
+ # - trust = False means fail if the path does not already exist, True means assume it will be OK which is bad policy, except for the case where the path points to an existing location
+ # do we have a path here already or can we find on the parent?
+ # how do we check if this is a path already, in which case we trust it?
+ # todo: we should be able to alias a var_name to a var_path, for example
+ # calling add_input('movar', 'month', 1, True)
+ # this *should* search for month and find the STATE/month variable
+ # BUT this only works if both var_name and var_path are month
+ # so add_input('month', 'month', 1, True) works.
+ found_path = self.find_var_path(var_path)
+ #print("Searched", var_name, "with path", var_path,"found", found_path)
+ var_ix = get_state_ix(self.state_ix, self.state_paths, found_path)
+ if var_ix == False:
+ if (trust == False):
+ raise Exception("Cannot find variable path: " + var_path + " when adding input to object " + self.name + " as input named " + var_name + " ... process terminated. Path to object with error is " + self.state_path)
+ var_ix = self.insure_path(var_path)
+ else:
+ # if we are to trust the path, this might be a child property just added,
+ # and therefore, we don't look further than this
+ # otherwise, we use found_path, whichever it is, as
+ # we know that this path is better, as we may have been given a simple variable name
+ # and so found_path will look more like /STATE/RCHRES_001/...
+ if trust == False:
+ var_path = found_path
+ self.inputs[var_name] = var_path
+ self.inputs_ix[var_name] = var_ix
+ # Should we create a register for the input to be reported here?
+ # i.e., if we have an input named Qin on RCHRES_R001, shouldn't we be able
+ # to find the data in /STATE/RCHRES_R001/Qin ??? It is redundant data and writing
+ # but matches a complete data model and prevents stale data?
+ return self.inputs_ix[var_name]
+
+ def add_object_input(self, var_name, var_object, link_type = 1):
+ # See above for details.
+ # this adds an object as a link to another object
+ self.inputs[var_name] = var_object.state_path
+ self.inputs_ix[var_name] = var_object.ix
+ return self.inputs_ix[var_name]
+
+ def create_parent_var(self, parent_var_name, source):
+ # see decision points: https://github.com/HARPgroup/HSPsquared/issues/78
+ # This is used when an object sets an additional property on its parent
+ # Like in simple_channel sets [channel prop name]_Qout on its parent
+ # Generally, this should have 2 components.
+ # 1 - a state variable on the child (this could be an implicit sub-comp, or a constant sub-comp, the child handles the setup of this) see constant_or_path()
+ # 2 - an input link
+ # the beauty of this is that the parent object and any of it's children will find the variable "[source_object]_varname"
+ if type(source) == str:
+ self.container.add_input(parent_var_name, source, 1, False)
+ elif isinstance(source, ModelObject):
+ self.container.add_object_input(parent_var_name, source, 1)
+
+ def insure_path(self, var_path):
+ # if this path can be found in the hdf5 make sure that it is registered in state
+ # and that it has needed object class to render it at runtime (some are automatic)
+ # RIGHT NOW THIS DOES NOTHING TO CHECK IF THE VAR EXISTS THIS MUST BE FIXED
+ var_ix = set_state(self.state_ix, self.state_paths, var_path, 0.0)
+ return var_ix
+
+ def get_dict_state(self, ix = -1):
+ if ix >= 0:
+ return self.dict_ix[ix]
+ return self.dict_ix[self.ix]
+
+ def find_paths(self):
+ # Note: every single piece of data used by objects, even constants, are resolved to a PATH in the hdf5
+ # find_paths() is called to insure that all of these can be found, and then, are added to inputs/inputs_ix
+ # - We wait to find the index values for those variables after all things have been loaded
+ # - base ModelObject does not have any "implicit" inputs, since all of its inputs are
+ # explicitly added children objects, thus we default to True
+ self.paths_found = True
+ # - But children such as Equation and DataMatrix, etc
+ # so they mark paths_found = False and then
+ # should go through their own locally defined data
+ # and call add_input() for any data variables encountered
+ # - add_input() will handle searching for the paths and ix values
+ # and should also handle deciding if this is a constant, like a numeric value
+ # or a variable data and should handle them accordingly
+ return True
+
+ def insure_register(self, var_name, default_value, register_container, register_path = False, is_accumulator = True):
+ # we send with local_only = True so it won't go upstream
+ if register_path == False:
+ register_path = register_container.find_var_path(var_name, True)
+ if (register_path == False) or (register_path not in self.model_object_cache.keys()):
+ # create a register as a placeholder for the data at the hub path
+ # in case there are no senders, or in the case of a timeseries logger, we need to register it so that its path can be set to hold data
+ #print("Creating a register for data for hub ", register_container.name, "(", register_container.state_path, ")", " var name ",var_name)
+ if (is_accumulator == True):
+ var_register = ModelRegister(var_name, register_container, default_value, register_path)
+ else:
+ # this is just a standard numerical data holder so set up a constant
+ var_register = ModelConstant(var_name, register_container, default_value, register_path)
+ else:
+ var_register = self.model_object_cache[register_path]
+ return var_register
+
+ def tokenize(self):
+ # renders tokens for high speed execution
+ if (self.paths_found == False):
+ raise Exception("path_found False for object" + self.name + "(" + self.state_path + "). " + "Tokens cannot be generated until method '.find_paths()' is run for all model objects ... process terminated. (see function `model_path_loader(model_object_cache)`)")
+ self.ops = [self.optype, self.ix]
+
+ def add_op_tokens(self):
+ # this puts the tokens into the global simulation queue
+ # can be customized by subclasses to add multiple lines if needed.
+ if self.ops == []:
+ self.tokenize()
+ #print(self.state_path, "tokens", self.ops)
+ if len(self.ops) > self.max_token_length:
+ raise Exception("op tokens cannot exceed max length of" + self.max_token_length + "(" + self.state_path + "). ")
+ self.op_tokens[self.ix] = self.format_ops()
+
+ def step(self, step):
+ # this tests the model for a single timestep.
+ # this is not the method that is used for high-speed runs, but can theoretically be used for
+ # easier to understand demonstrations
+ step_one(self.op_tokens, self.op_tokens[self.ix], self.state_ix, self.dict_ix, self.ts_ix, step)
+ #step_model({self.op_tokens[self.ix]}, self.state_ix, self.dict_ix, self.ts_ix, step)
+
+ def dddstep_model(op_tokens, state_ix, dict_ix, ts_ix, step):
+ for i in op_tokens.keys():
+ if op_tokens[i][0] == 1:
+ state_ix[i] = step_equation(op_tokens[i], state_ix)
+ elif op_tokens[i][0] == 2:
+ state_ix[i] = exec_tbl_eval(op_tokens[i], state_ix, dict_ix)
+ elif op_tokens[i][0] == 3:
+ step_model_link(op_tokens[i], state_ix, ts_ix, step)
+ elif op_tokens[i][0] == 4:
+ return False
+ elif op_tokens[i][0] == 5:
+ step_sim_timer(op_tokens[i], state_ix, dict_ix, ts_ix, step)
+ return
+
+"""
+The class ModelConstant is for storing constants. It must be loaded here because ModelObject calls it.
+Is this useful or just clutter? Useful I think since there are numerical constants...
+"""
+class ModelConstant(ModelObject):
+ def __init__(self, name, container = False, value = 0.0, state_path = False):
+ if (state_path != False):
+ # this allows us to mandate the location. useful for placeholders, broadcasts, etc.
+ self.state_path = state_path
+ super(ModelConstant, self).__init__(name, container)
+ self.default_value = float(value)
+ self.optype = 7 # 0 - shell object, 1 - equation, 2 - datamatrix, 3 - input, 4 - broadcastChannel, 5 - SimTimer, 6 - Conditional, 7 - ModelConstant (numeric)
+ #print("ModelConstant named",self.name, "with path", self.state_path,"and ix", self.ix, "value", value)
+ var_ix = self.set_state(float(value))
+ self.paths_found = True
+ # self.state_ix[self.ix] = self.default_value
+
+ def required_properties():
+ req_props = super(ModelConstant, ModelConstant).required_properties()
+ req_props.extend(['value'])
+ return req_props
+
+
+"""
+The class ModelRegister is for storing push values.
+Behavior is to zero each timestep. This could be amended later.
+Maybe combined with stack behavior? Or accumulator?
+"""
+class ModelRegister(ModelConstant):
+ def __init__(self, name, container = False, value = 0.0, state_path = False):
+ super(ModelRegister, self).__init__(name, container, value, state_path)
+ self.optype = 12 #
+ # self.state_ix[self.ix] = self.default_value
+
+ def required_properties():
+ req_props = super(ModelConstant, ModelConstant).required_properties()
+ req_props.extend(['value'])
+ return req_props
+
+# njit functions for runtime
+@njit
+def pre_step_register(op, state_ix):
+ ix = op[1]
+ #print("Resetting register", ix,"to zero")
+ state_ix[ix] = 0.0
+ return
+
+# Note: ModelConstant has not runtime execution
+
+@njit
+def exec_model_object( op, state_ix, dict_ix):
+ ix = op[1]
+ return 0.0
+
+
+# njit functions for end of model run
+@njit
+def finish_model_object(op_token, state_ix, ts_ix):
+ return
+
+
+@njit
+def finish_register(op_token, state_ix, ts_ix):
+ # todo: push the values of ts_ix back to the hdf5? or does this happen in larger simulation as it is external to OM?
+ return
\ No newline at end of file
diff --git a/HSP2/om_sim_timer.py b/HSP2/om_sim_timer.py
new file mode 100644
index 00000000..21d8d6d0
--- /dev/null
+++ b/HSP2/om_sim_timer.py
@@ -0,0 +1,84 @@
+"""
+The class SimTimer is used to translate copy data from one state location to another.
+It is also used to make an implicit parent child link to insure that an object is loaded
+during a model simulation.
+"""
+from HSP2.state import *
+from HSP2.om import *
+from HSP2.om_model_object import ModelObject
+from pandas import DataFrame, DatetimeIndex
+from numba import njit
+
+class SimTimer(ModelObject):
+ def __init__(self, name, container, siminfo):
+ super(SimTimer, self).__init__(name, container, siminfo)
+ self.state_path = '/STATE/timer'
+ self.time_array = self.dti_to_time_array(siminfo) # creates numpy formatted array of year, mo, day, ... for each timestep
+ self.date_path_ix = [] # where are the are components stored in the state_ix Dict
+ self.optype = 5 # 0 - ModelObject, 1 - Equation, 2 - datamatrix, 3 - ModelLinkage, 4 - BroadcastChannel, 5 - SimTimer
+ self.register_components() # now that we have a time array, we set the basic state and all time comps into state
+
+ def register_components(self):
+ # initialize the path variable if not already set
+ self.ix = set_state(self.state_ix, self.state_paths, self.state_path, float(self.time_array[0][0]))
+ # now register all other paths.
+ # register "year", "month" "day", ...
+ year_ix = set_state(self.state_ix, self.state_paths, "/STATE/year", float(self.time_array[0][1]))
+ month_ix = set_state(self.state_ix, self.state_paths, "/STATE/month", float(self.time_array[0][2]))
+ day_ix = set_state(self.state_ix, self.state_paths, "/STATE/day", float(self.time_array[0][3]))
+ hr_ix = set_state(self.state_ix, self.state_paths, "/STATE/hour", float(self.time_array[0][4]))
+ min_ix = set_state(self.state_ix, self.state_paths, "/STATE/minute", float(self.time_array[0][5]))
+ sec_ix = set_state(self.state_ix, self.state_paths, "/STATE/second", float(self.time_array[0][6]))
+ wd_ix = set_state(self.state_ix, self.state_paths, "/STATE/weekday", float(self.time_array[0][7]))
+ dt_ix = set_state(self.state_ix, self.state_paths, "/STATE/dt", float(self.time_array[0][8]))
+ jd_ix = set_state(self.state_ix, self.state_paths, "/STATE/jday", float(self.time_array[0][9]))
+ md_ix = set_state(self.state_ix, self.state_paths, "/STATE/modays", float(self.time_array[0][10]))
+ dts_ix = set_state(self.state_ix, self.state_paths, "/STATE/dts", float(self.time_array[0][8] * 60.0))
+ self.date_path_ix = [year_ix, month_ix, day_ix, hr_ix, min_ix, sec_ix, wd_ix, dt_ix, jd_ix, md_ix, dts_ix]
+ self.dict_ix[self.ix] = self.time_array
+
+ return self.ix
+
+ def tokenize(self):
+ # call parent method which sets standard ops
+ # returns an array of data pointers
+ super().tokenize() # resets ops to common base
+ self.ops = self.ops + self.date_path_ix # adds timer specific items
+
+ def add_op_tokens(self):
+ # this puts the tokens into the global simulation queue
+ # can be customized by subclasses to add multiple lines if needed.
+ #self.op_tokens[self.ix] = self.ops
+ super().add_op_tokens()
+ self.dict_ix[self.ix] = self.time_array
+
+ def dti_to_time_array(self, siminfo):
+ dateindex = siminfo['tindex']
+ dt = siminfo['delt']
+ # sim timer is special, one entry for each time component for each timestep
+ # convert DateIndex to numbers [int(i) for i in dateindex.year]
+ tdi = { 0: dateindex.astype(np.int64), 1:[float(i) for i in dateindex.year], 2:[float(i) for i in dateindex.month], 3:[float(i) for i in dateindex.day], 4:[float(i) for i in dateindex.hour], 5:[float(i) for i in dateindex.minute], 6:[float(i) for i in dateindex.second], 7:[float(i) for i in dateindex.weekday], 8:[float(dt) for i in dateindex], 9:[float(i) for i in dateindex.day_of_year], 10:[float(i) for i in dateindex.daysinmonth], 11:[float(dt * 60.0) for i in dateindex] }
+ #tdi = { 0:dateindex.year, 1:dateindex.month, 2:dateindex.day, 3:dateindex.hour, 4:dateindex.minute, 5:dateindex.second }
+ tid = DataFrame(tdi)
+ h = 1 # added to increase row count for debug testing.
+ time_array = tid.to_numpy()
+ return time_array
+
+# Function for use during model simulations of tokenized objects
+@njit
+def step_sim_timer(op_token, state_ix, dict_ix, ts_ix, step):
+ # note: the op_token and state index are off by 1 since the dict_ix does not store type
+ #print("Exec step_sim_timer at step:", step, "jday", dict_ix[op_token[1]][step][9] )
+ state_ix[op_token[1]] = dict_ix[op_token[1]][step][0] # unix timestamp here
+ state_ix[op_token[2]] = dict_ix[op_token[1]][step][1] # year
+ state_ix[op_token[3]] = dict_ix[op_token[1]][step][2] # month
+ state_ix[op_token[4]] = dict_ix[op_token[1]][step][3] # day
+ state_ix[op_token[5]] = dict_ix[op_token[1]][step][4] # hour
+ state_ix[op_token[6]] = dict_ix[op_token[1]][step][5] # minute
+ state_ix[op_token[7]] = dict_ix[op_token[1]][step][6] # second
+ state_ix[op_token[8]] = dict_ix[op_token[1]][step][7] # weekday
+ state_ix[op_token[9]] = dict_ix[op_token[1]][step][8] # dt
+ state_ix[op_token[10]] = dict_ix[op_token[1]][step][9] # julian day
+ state_ix[op_token[11]] = dict_ix[op_token[1]][step][10] # modays
+ state_ix[op_token[12]] = dict_ix[op_token[1]][step][11] # dts
+ return
diff --git a/HSP2/om_special_action.py b/HSP2/om_special_action.py
new file mode 100644
index 00000000..774a999b
--- /dev/null
+++ b/HSP2/om_special_action.py
@@ -0,0 +1,174 @@
+"""
+The class SpecialAction is used to support original HSPF ACTIONS.
+"""
+from HSP2.state import *
+from HSP2.om import *
+from HSP2.om_model_object import ModelObject
+from numba import njit
+class SpecialAction(ModelObject):
+ def __init__(self, name, container = False, model_props = {}):
+ super(SpecialAction, self).__init__(name, container, model_props)
+
+ self.optype = 100 # Special Actions start indexing at 100
+
+ def parse_model_props(self, model_props, strict=False):
+ super().parse_model_props(model_props, strict)
+ # comes in as row from special ACTIONS table
+ # ex: {
+ # 'OPTYP': 'RCHRES', 'RANGE1': '1', 'RANGE2': '', 'DC': 'DY', 'DS': '',
+ # 'YR': '1986', 'MO': '3', 'DA': '1', 'HR': '12', 'MN': '',
+ # 'D': '2', 'T': 3, 'VARI': 'IVOL', 'S1': '', 'S2': '',
+ # 'AC': '+=', 'VALUE': 30.0, 'TC': '', 'TS': '', 'NUM': '', 'CURLVL': 0,
+ # defined by:
+ # - operand1, i.e. variable to access + update, path = /STATE/[OPTYP]_[op_abbrev][RANGE1]/[VARI]
+ # - action(operation) to perform = AC
+ # - operand2, a numeric value for simple ACTION = [VALUE]
+ # note: [op_abbrev] is *maybe* the first letter of the OPTYP? Not a very good idea to have a coded convention like that
+ self.op_type = self.handle_prop(model_props, 'OPTYP')
+ self.range1 = self.handle_prop(model_props, 'RANGE1')
+ self.range2 = self.handle_prop(model_props, 'RANGE2')
+ self.ac = '=' # set the default, and also adds a property for later testing.
+ self.ac = self.handle_prop(model_props, 'AC') # must handle this before we handle the operand VALUE to check for DIV by Zero
+ self.vari = self.handle_prop(model_props, 'VARI')
+ self.op2_val = self.handle_prop(model_props, 'VALUE')
+ self.op2_ix = self.constant_or_path('op_val', self.op2_val) # constant values must be added to STATE and thus are referenced by their state_ix number
+ self.num = self.handle_prop(model_props, 'NUM', False, 1) # number of times to perform action
+ self.timer_ix = self.handle_prop(model_props, 'when', False, 1) # when to begin the first attempt at action
+ self.ctr_ix = self.constant_or_path('ctr', 0) # this initializes the counter for how many times an action has been performed
+ # NOTE: since the spec-action modifies the same quantity that is it's input, it does *not* set it as a proper "input" since that would create a circular dependency
+ domain = self.model_object_cache[('/STATE/' + self.op_type + '_' + self.op_type[0] + str(self.range1).zfill(3) )]
+ var_register = self.insure_register(self.vari, 0.0, domain, False)
+ #print("Created register", var_register.name, "with path", var_register.state_path)
+ # add already created objects as inputs
+ var_register.add_object_input(self.name, self, 1)
+ self.op1_ix = var_register.ix
+
+ # @tbd: support time enable/disable
+ # - check if time ops have been set and add as inputs like "year", or "month", etc could give explicit path /STATE/year ...
+ # - add the time values to match as constants i.e. self.constant_or_path()
+
+ def handle_prop(self, model_props, prop_name, strict = False, default_value = None ):
+ # Insure all values are legal ex: no DIV by Zero
+ prop_val = super().handle_prop(model_props, prop_name, strict, default_value )
+ if (prop_name == 'VALUE') and (self.ac == '/='):
+ if (prop_val == 0) or (prop_val == None):
+ raise Exception("Error: in properties passed to "+ self.name + " AC must be non-zero or non-Null . Object creation halted. Path to object with error is " + self.state_path)
+ if (prop_name == 'AC'):
+ self.handle_ac(prop_val)
+ if (prop_name == 'when'):
+ # when to perform this? timestamp or time-step index
+ prop_val = 0
+ si = self.model_object_cache[self.find_var_path('timer')]
+ if len(model_props['YR']) > 0:
+ # translate date to equivalent model step
+ datestring = model_props['YR'] + '-' + model_props['MO'] + '-' + \
+ model_props['DA'] + ' ' + model_props['HR'] + ':' + \
+ model_props['MN'] + ':00'
+ if datestring in si.model_props_parsed['tindex']:
+ prop_val = si.model_props_parsed['tindex'].get_loc(datestring)
+ if (prop_name == 'NUM') and (prop_val == ''):
+ prop_val = default_value
+ return prop_val
+
+ def handle_ac(self, ac):
+ # cop_code 0: =/eq, 1: /gt, 3: <=/le, 4: >=/ge, 5: <>/ne
+ cop_codes = {
+ '=': 1,
+ '+=': 2,
+ '-=': 3,
+ '*=': 4,
+ '/=': 5,
+ 'MIN': 6
+ }
+ # From HSPF UCI docs:
+ # 1 = T= A
+ # 2 += T= T+ A
+ # 3 -= T= T- A
+ # 4 *= T= T*A
+ # 5 /= T= T/A
+ # 6 MIN T= Min(T,A)
+ # 7 MAX T= Max(T,A)
+ # 8 ABS T= Abs(A)
+ # 9 INT T= Int(A)
+ # 10 ^= T= T^A
+ # 11 LN T= Ln(A)
+ # 12 LOG T= Log10(A)
+ # 13 MOD T= Mod(T,A)
+ if not (is_float_digit(ac)):
+ if not (ac in cop_codes.keys()):
+ raise Exception("Error: in "+ self.name + " AC (" + ac + ") not supported. Object creation halted. Path to object with error is " + self.state_path)
+ opid = cop_codes[ac]
+ self.ac = ac
+ else:
+ # this will fail catastrophically if the requested function is not supported
+ # which is a good thing
+ if not (ac in cop_codes.values()):
+ raise Exception("Error: in "+ self.name + "numeric AC (" + ac + ") not supported. Object creation halted. Path to object with error is " + self.state_path)
+ opid = ac
+ self.ac = list(cop_codes.keys())[list(cop_codes.values()).index(ac) ]
+ self.opid = opid
+
+ def tokenize(self):
+ # call parent method to set basic ops common to all
+ super().tokenize() # sets self.ops = op_type, op_ix
+ self.ops = self.ops + [self.op1_ix, self.opid, self.op2_ix, self.timer_ix, self.ctr_ix, self.num]
+ # @tbd: check if time ops have been set and tokenize accordingly
+
+ def add_op_tokens(self):
+ # this puts the tokens into the global simulation queue
+ # can be customized by subclasses to add multiple lines if needed.
+ super().add_op_tokens()
+
+ @staticmethod
+ def hdf5_load_all(hdf_source):
+ specla=hdf_source['/SPEC_ACTIONS/ACTIONS/table']
+ for idx, x in np.ndenumerate(specla):
+ print(x[1].decode("utf-8"),x[2].decode("utf-8"), x[13].decode("utf-8"), x[16].decode("utf-8"), x[17])
+
+
+# njit functions for runtime
+
+@njit(cache=True)
+def step_special_action(op, state_ix, dict_ix, step):
+ ix = op[1] # ID of this op
+ # these indices must be adjusted to reflect the number of common op tokens
+ # SpecialAction has:
+ # - type of condition (+=, -=, ...)
+ # - operand 1 (left side)
+ # - operand 2 (right side)
+ # @tbd: check if time ops have been set and enable/disable accordingly
+ # - 2 ops will be added for each time matching switch, the state_ix of the time element (year, month, ...) and the state_ix of the constant to match
+ # - matching should be as simple as if (state_ix[tix1] <> state_ix[vtix1]): return state_ix[ix1] (don't modify the value)
+ # - alternative: save the integer timestamp or timestep of the start, and if step/stamp > value, enable
+ # @tbd: add number of repeats, and save the value of repeats in a register
+ ix1 = op[2] # ID of source of data and destination of data
+ sop = op[3]
+ ix2 = op[4]
+ tix = op[5] # which slot is the time comparison in?
+ if (tix in state_ix and step < state_ix[tix]):
+ return
+ ctr_ix = op[6] # id of the counter variable
+ num_ix = op[7] # max times to complete
+ num_done = state_ix[ctr_ix]
+ num = state_ix[num_ix] # num to complete
+ if (tix in state_ix and num_done >= num):
+ return
+ else:
+ if sop == 1:
+ result = state_ix[ix2]
+ elif sop == 2:
+ result = state_ix[ix1] + state_ix[ix2]
+ elif sop == 3:
+ result = state_ix[ix1] - state_ix[ix2]
+ elif sop == 4:
+ result = state_ix[ix1] * state_ix[ix2]
+ elif sop == 5:
+ result = state_ix[ix1] / state_ix[ix2]
+
+ # set value in target
+ # tbd: handle this with a model linkage? cons: this makes a loop since the ix1 is source and destination
+
+ state_ix[ix1] = result
+ state_ix[op[1]] = result
+ return result
+
diff --git a/HSP2/state.py b/HSP2/state.py
index 67ac24a0..e72da4ed 100644
--- a/HSP2/state.py
+++ b/HSP2/state.py
@@ -1,203 +1,245 @@
-''' General routines for SPECL '''
-
-import numpy as np
-import time
-from pandas import DataFrame, date_range
-from pandas.tseries.offsets import Minute
-from numba.typed import Dict
-from numpy import zeros
-from numba import int8, float32, njit, types, typed # import the types
-import os
-import importlib.util
-import sys
-
-def init_state_dicts():
- """
- This contains the base dictionaries used to pass model state amongst modules and custom code plugins
- """
- state = {} # shared state Dictionary, contains numba-ready Dicts
- state_paths = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
- state_ix = Dict.empty(key_type=types.int64, value_type=types.float64)
- dict_ix = Dict.empty(key_type=types.int64, value_type=types.float64[:,:])
- ts_ix = Dict.empty(key_type=types.int64, value_type=types.float64[:])
- # initialize state for hydr
- # now put all of these Dicts into the state Dict
- state['state_paths'], state['state_ix'], state['dict_ix'], state['ts_ix'] = state_paths, state_ix, dict_ix, ts_ix
- return state
-
-
-def find_state_path(state_paths, parent_path, varname):
- """
- We should get really good at using docstrings...
- """
- # this is a bandaid, we should have an object routine that searches the parent for variables or inputs
- var_path = parent_path + "/states/" + str(varname)
- return var_path
-
-def op_path_name(operation, id):
- """
- Used to generate hdf5 operation name in a central fashion to avoid naming convention slip-ups
- """
- tid = str(id).zfill(3)
- path_name = f'{operation}_{operation[0]}{tid}'
- return path_name
-
-def get_op_state_path(operation, id, activity = ''):
- """
- Used to generate hdf5 paths in a central fashion to avoid naming convention slip-ups
- """
- op_name = op_path_name(operation, id)
- if activity == '':
- op_path = f'/STATE/{op_name}'
- else:
- op_path = f'/STATE/{op_name}/{activity}'
- return op_path
-
-
-def get_state_ix(state_ix, state_paths, var_path):
- """
- Find the integer key of a variable name in state_ix
- """
- if not (var_path in list(state_paths.keys())):
- # we need to add this to the state
- return False # should throw an error
- var_ix = state_paths[var_path]
- return var_ix
-
-
-def get_ix_path(state_paths, var_ix):
- """
- Find the integer key of a variable name in state_ix
- """
- for spath, ix in state_paths.items():
- if var_ix == ix:
- # we need to add this to the state
- return spath
- return False
-
-def set_state(state_ix, state_paths, var_path, default_value = 0.0, debug = False):
- """
- Given an hdf5 style path to a variable, set the value
- If the variable does not yet exist, create it.
- Returns the integer key of the variable in the state_ix Dict
- """
- if not (var_path in state_paths.keys()):
- # we need to add this to the state
- state_paths[var_path] = append_state(state_ix, default_value)
- var_ix = get_state_ix(state_ix, state_paths, var_path)
- if (debug == True):
- print("Setting state_ix[", var_ix, "], to", default_value)
- state_ix[var_ix] = default_value
- return var_ix
-
-
-def set_dict_state(state_ix, dict_ix, state_paths, var_path, default_value = {}):
- """
- Given an hdf5 style path to a variable, set the value in the dict
- If the variable does not yet exist, create it.
- Returns the integer key of the variable in the state_ix Dict
- """
- if not (var_path in state_paths.keys()):
- # we need to add this to the state
- state_paths[var_path] = append_state(state_ix, default_value)
- var_ix = get_state_ix(state_ix, state_paths, var_path)
- return var_ix
-
-
-def append_state(state_ix, var_value):
- """
- Add a new variable on the end of the state_ix Dict
- Return the key of this new variable
- """
- if (len(state_ix) == 0):
- val_ix = 1
- else:
- val_ix = max(state_ix.keys()) + 1 # next ix value
- state_ix[val_ix] = var_value
- return val_ix
-
-def state_context_hsp2(state, operation, segment, activity):
- state['operation'] = operation
- state['segment'] = segment #
- state['activity'] = activity
- # give shortcut to state path for the upcoming function
- state['domain'] = "/STATE/" + operation + "_" + segment + "/" + activity
-
-def state_siminfo_hsp2(uci_obj, siminfo):
- # Add crucial simulation info for dynamic operation support
- delt = uci_obj.opseq.INDELT_minutes[0] # get initial value for STATE objects
- siminfo['delt'] = delt
- siminfo['tindex'] = date_range(siminfo['start'], siminfo['stop'], freq=Minute(delt))[1:]
- siminfo['steps'] = len(siminfo['tindex'])
-
-def state_load_dynamics_hsp2(state, io_manager, siminfo):
- # Load any dynamic components if present, and store variables on objects
- hsp2_local_py = load_dynamics(io_manager, siminfo)
- # if a local file with state_step_hydr() was found in load_dynamics(), we add it to state
- state['state_step_hydr'] = siminfo['state_step_hydr'] # enabled or disabled
- state['hsp2_local_py'] = hsp2_local_py # Stores the actual function in state
-
-def hydr_init_ix(state_ix, state_paths, domain):
- # get a list of keys for all hydr state variables
- hydr_state = ["DEP","IVOL","O1","O2","O3","OVOL1","OVOL2","OVOL3","PRSUPY","RO","ROVOL","SAREA","TAU","USTAR","VOL","VOLEV"]
- hydr_ix = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
- for i in hydr_state:
- #var_path = f'{domain}/{i}'
- var_path = domain + "/" + i
- hydr_ix[i] = set_state(state_ix, state_paths, var_path, 0.0)
- return hydr_ix
-
-@njit
-def hydr_get_ix(state_ix, state_paths, domain):
- # get a list of keys for all hydr state variables
- hydr_state = ["DEP","IVOL","O1","O2","O3","OVOL1","OVOL2","OVOL3","PRSUPY","RO","ROVOL","SAREA","TAU","USTAR","VOL","VOLEV"]
- hydr_ix = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
- for i in hydr_state:
- #var_path = f'{domain}/{i}'
- var_path = domain + "/" + i
- hydr_ix[i] = state_paths[var_path]
- return hydr_ix
-
-# function to dynamically load module, based on "Using imp module" in https://www.tutorialspoint.com/How-I-can-dynamically-import-Python-module#
-#def dynamic_module_import(module_name, class_name):
-def dynamic_module_import(local_name, local_path, module_name):
- # find_module() is used to find the module in current directory
- # it gets the pointer, path and description of the module
- module = False
- local_spec = False
- try:
- # print ("Looking for local_name, local_path", local_name, local_path)
- local_spec = importlib.util.spec_from_file_location(local_name, local_path)
- except ImportError:
- print ("Imported module {} not found".format(local_name))
- try:
- # load_module dynamically loads the module
- # the parameters are pointer, path and description of the module
- if (local_spec != False):
- module = importlib.util.module_from_spec(local_spec)
- sys.modules[local_spec.name] = module
- sys.modules[module_name] = module
- local_spec.loader.exec_module(module)
- print("Imported custom module {}".format(local_path))
- except Exception as e:
- # print(e) this isn't really an exception, it's legit to have no custom python code
- pass
- return module
-
-
-def load_dynamics(io_manager, siminfo):
- local_path = os.getcwd()
- # try this
- hdf5_path = io_manager._input.file_path
- (fbase, fext) = os.path.splitext(hdf5_path)
- # see if there is a code module with custom python
- # print("Looking for SPECL with custom python code ", (fbase + ".py"))
- hsp2_local_py = dynamic_module_import(fbase, fbase + ".py", "hsp2_local_py")
- siminfo['state_step_hydr'] = 'disabled'
- if 'state_step_hydr' in dir(hsp2_local_py):
- siminfo['state_step_hydr'] = 'enabled'
- print("state_step_hydr function defined, using custom python code")
- else:
- # print("state_step_hydr function not defined. Using default")
- return False
- return hsp2_local_py
\ No newline at end of file
+''' General routines for SPECL '''
+
+import numpy as np
+import time
+from pandas import DataFrame, date_range
+from pandas.tseries.offsets import Minute
+from numba.typed import Dict
+from numpy import zeros
+from numba import int8, float32, njit, types, typed # import the types
+import os
+import importlib.util
+import sys
+
+def init_state_dicts():
+ """
+ This contains the base dictionaries used to pass model state amongst modules and custom code plugins
+ """
+ state = {} # shared state Dictionary, contains numba-ready Dicts
+ state_paths = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
+ state_ix = Dict.empty(key_type=types.int64, value_type=types.float64)
+ state_ix = Dict.empty(key_type=types.int64, value_type=types.float64)
+ dict_ix = Dict.empty(key_type=types.int64, value_type=types.float64[:,:])
+ ts_ix = Dict.empty(key_type=types.int64, value_type=types.float64[:])
+ # initialize state for hydr
+ # now put all of these Dicts into the state Dict
+ state['state_paths'], state['state_ix'], state['dict_ix'], state['ts_ix'] = state_paths, state_ix, dict_ix, ts_ix
+ # add a generic place to stash model_data for dynamic components
+ state['model_data'] = {}
+ return state
+
+
+def op_path_name(operation, id):
+ """
+ Used to generate hdf5 operation name in a central fashion to avoid naming convention slip-ups
+ """
+ tid = str(id).zfill(3)
+ path_name = f'{operation}_{operation[0]}{tid}'
+ return path_name
+
+def get_op_state_path(operation, id, activity = ''):
+ """
+ Used to generate hdf5 paths in a central fashion to avoid naming convention slip-ups
+ """
+ op_name = op_path_name(operation, id)
+ if activity == '':
+ op_path = f'/STATE/{op_name}'
+ else:
+ op_path = f'/STATE/{op_name}/{activity}'
+ return op_path
+
+
+def get_state_ix(state_ix, state_paths, var_path):
+ """
+ Find the integer key of a variable name in state_ix
+ """
+ if not (var_path in list(state_paths.keys())):
+ # we need to add this to the state
+ return False # should throw an error
+ var_ix = state_paths[var_path]
+ return var_ix
+
+
+def get_ix_path(state_paths, var_ix):
+ """
+ Find the integer key of a variable name in state_ix
+ """
+ for spath, ix in state_paths.items():
+ if var_ix == ix:
+ # we need to add this to the state
+ return spath
+ return False
+
+def set_state(state_ix, state_paths, var_path, default_value = 0.0, debug = False):
+ """
+ Given an hdf5 style path to a variable, set the value
+ If the variable does not yet exist, create it.
+ Returns the integer key of the variable in the state_ix Dict
+ """
+ if not (var_path in state_paths.keys()):
+ # we need to add this to the state
+ state_paths[var_path] = append_state(state_ix, default_value)
+ var_ix = get_state_ix(state_ix, state_paths, var_path)
+ if (debug == True):
+ print("Setting state_ix[", var_ix, "], to", default_value)
+ state_ix[var_ix] = default_value
+ return var_ix
+
+
+def set_dict_state(state_ix, dict_ix, state_paths, var_path, default_value = {}):
+ """
+ Given an hdf5 style path to a variable, set the value in the dict
+ If the variable does not yet exist, create it.
+ Returns the integer key of the variable in the state_ix Dict
+ """
+ if not (var_path in state_paths.keys()):
+ # we need to add this to the state
+ state_paths[var_path] = append_state(state_ix, default_value)
+ var_ix = get_state_ix(state_ix, state_paths, var_path)
+ return var_ix
+
+
+def append_state(state_ix, var_value):
+ """
+ Add a new variable on the end of the state_ix Dict
+ Return the key of this new variable
+ """
+ if (len(state_ix) == 0):
+ val_ix = 1
+ else:
+ val_ix = max(state_ix.keys()) + 1 # next ix value
+ state_ix[val_ix] = var_value
+ return val_ix
+
+def state_context_hsp2(state, operation, segment, activity):
+ # this establishes domain info so that a module can know its paths
+ state['operation'] = operation
+ state['segment'] = segment #
+ state['activity'] = activity
+ # give shortcut to state path for the upcoming function
+ # insure that there is a model object container
+ seg_name = operation + "_" + segment
+ seg_path = '/STATE/' + seg_name
+ if 'hsp_segments' not in state.keys():
+ state['hsp_segments'] = {} # for later use by things that need to know hsp entities and their paths
+ if seg_name not in state['hsp_segments'].keys():
+ state['hsp_segments'][seg_name] = seg_path
+
+ state['domain'] = seg_path # + "/" + activity # may want to comment out activity?
+
+def state_siminfo_hsp2(uci_obj, siminfo):
+ # Add crucial simulation info for dynamic operation support
+ delt = uci_obj.opseq.INDELT_minutes[0] # get initial value for STATE objects
+ siminfo['delt'] = delt
+ siminfo['tindex'] = date_range(siminfo['start'], siminfo['stop'], freq=Minute(delt))[1:]
+ siminfo['steps'] = len(siminfo['tindex'])
+
+def state_init_hsp2(state, opseq, activities):
+ # This sets up the state entries for all state compatible HSP2 model variables
+ for _, operation, segment, delt in opseq.itertuples():
+ if operation != 'GENER' and operation != 'COPY':
+ for activity, function in activities[operation].items():
+ if activity == 'HYDR':
+ state_context_hsp2(state, operation, segment, activity)
+ print("Init HYDR state context for domain", state['domain'])
+ hydr_init_ix(state, state['domain'])
+ elif activity == 'SEDTRN':
+ state_context_hsp2(state, operation, segment, activity)
+ sedtrn_init_ix(state, state['domain'])
+
+def state_load_hdf5_components(io_manager, siminfo, op_tokens, state_paths, state_ix, dict_ix, ts_ix, model_object_cache):
+ # Implement population of model_object_cache etc from components in a hdf5 such as Special ACTIONS
+ return
+
+def state_load_dynamics_hsp2(state, io_manager, siminfo):
+ # Load any dynamic components if present, and store variables on objects
+ hsp2_local_py = load_dynamics(io_manager, siminfo)
+ # if a local file with state_step_hydr() was found in load_dynamics(), we add it to state
+ state['state_step_hydr'] = siminfo['state_step_hydr'] # enabled or disabled
+ state['hsp2_local_py'] = hsp2_local_py # Stores the actual function in state
+
+def hydr_init_ix(state, domain):
+ # get a list of keys for all hydr state variables
+ hydr_state = ["DEP","IVOL","O1","O2","O3","OVOL1","OVOL2","OVOL3","PRSUPY","RO","ROVOL","SAREA","TAU","USTAR","VOL","VOLEV"]
+ hydr_ix = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
+ for i in hydr_state:
+ #var_path = f'{domain}/{i}'
+ var_path = domain + "/" + i
+ hydr_ix[i] = set_state(state['state_ix'], state['state_paths'], var_path, 0.0)
+ return hydr_ix
+
+def sedtrn_init_ix(state, domain):
+ # get a list of keys for all sedtrn state variables
+ sedtrn_state = ["RSED4","RSED5","RSED6"]
+ sedtrn_ix = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
+ for i in sedtrn_state:
+ #var_path = f'{domain}/{i}'
+ var_path = domain + "/" + i
+ sedtrn_ix[i] = set_state(state['state_ix'], state['state_paths'], var_path, 0.0)
+ return sedtrn_ix
+
+@njit
+def hydr_get_ix(state_ix, state_paths, domain):
+ # get a list of keys for all hydr state variables
+ hydr_state = ["DEP","IVOL","O1","O2","O3","OVOL1","OVOL2","OVOL3","PRSUPY","RO","ROVOL","SAREA","TAU","USTAR","VOL","VOLEV"]
+ hydr_ix = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
+ for i in hydr_state:
+ #var_path = f'{domain}/{i}'
+ var_path = domain + "/" + i
+ hydr_ix[i] = state_paths[var_path]
+ return hydr_ix
+
+@njit
+def sedtrn_get_ix(state_ix, state_paths, domain):
+ # get a list of keys for all sedtrn state variables
+ sedtrn_state = ["RSED4", "RSED5", "RSED6"]
+ sedtrn_ix = Dict.empty(key_type=types.unicode_type, value_type=types.int64)
+ for i in sedtrn_state:
+ var_path = domain + "/" + i
+ sedtrn_ix[i] = state_paths[var_path]
+ return sedtrn_ix
+
+# function to dynamically load module, based on "Using imp module" in https://www.tutorialspoint.com/How-I-can-dynamically-import-Python-module#
+#def dynamic_module_import(module_name, class_name):
+def dynamic_module_import(local_name, local_path, module_name):
+ # find_module() is used to find the module in current directory
+ # it gets the pointer, path and description of the module
+ module = False
+ local_spec = False
+ try:
+ # print ("Looking for local_name, local_path", local_name, local_path)
+ local_spec = importlib.util.spec_from_file_location(local_name, local_path)
+ except ImportError:
+ print ("Imported module {} not found".format(local_name))
+ try:
+ # load_module dynamically loads the module
+ # the parameters are pointer, path and description of the module
+ if (local_spec != False):
+ module = importlib.util.module_from_spec(local_spec)
+ sys.modules[local_spec.name] = module
+ sys.modules[module_name] = module
+ local_spec.loader.exec_module(module)
+ print("Imported custom module {}".format(local_path))
+ except Exception as e:
+ # print(e) this isn't really an exception, it's legit to have no custom python code
+ pass
+ return module
+
+
+def load_dynamics(io_manager, siminfo):
+ local_path = os.getcwd()
+ # try this
+ hdf5_path = io_manager._input.file_path
+ (fbase, fext) = os.path.splitext(hdf5_path)
+ # see if there is a code module with custom python
+ # print("Looking for SPECL with custom python code ", (fbase + ".py"))
+ hsp2_local_py = dynamic_module_import(fbase, fbase + ".py", "hsp2_local_py")
+ siminfo['state_step_hydr'] = 'disabled'
+ if 'state_step_hydr' in dir(hsp2_local_py):
+ siminfo['state_step_hydr'] = 'enabled'
+ print("state_step_hydr function defined, using custom python code")
+ else:
+ # print("state_step_hydr function not defined. Using default")
+ return False
+ return hsp2_local_py
+
diff --git a/HSP2/utilities.py b/HSP2/utilities.py
index 7a181b07..3706a77d 100644
--- a/HSP2/utilities.py
+++ b/HSP2/utilities.py
@@ -280,7 +280,7 @@ def get_timeseries(timeseries_inputs:SupportsReadTS, ext_sourcesdd, siminfo):
ts[tname] = t
return ts
-def save_timeseries(timeseries:SupportsWriteTS, ts, savedict, siminfo, saveall, operation, segment, activity, compress=True):
+def save_timeseries(timeseries:SupportsWriteTS, ts, savedict, siminfo, saveall, operation, segment, activity, compress=True, outstep=2):
df = pd.DataFrame(index=siminfo['tindex'])
if (operation == 'IMPLND' and activity == 'IQUAL') or (operation == 'PERLND' and activity == 'PQUAL'):
for y in savedict.keys():
@@ -316,7 +316,8 @@ def save_timeseries(timeseries:SupportsWriteTS, ts, savedict, siminfo, saveall,
operation=operation,
segment=segment,
activity=activity,
- compress=compress
+ compress=compress,
+ outstep=outstep
)
else:
print(f'DataFrame Empty for {operation}|{activity}|{segment}')
@@ -364,6 +365,8 @@ def expand_timeseries_names(sgrp, smemn, smemsb1, smemsb2, tmemn, tmemsb1, tmems
smemn = 'GQUAL' + smemsb1 + '_RODQAL'
if smemn == 'ROSQAL':
smemn = 'GQUAL' + smemsb2 + '_ROSQAL' + smemsb1 # smemsb1 is ssc
+ if smemn == 'RSQAL':
+ smemn = 'GQUAL' + smemsb2 + '_RSQAL' + smemsb1
# OXRX:
if smemn == 'OXCF1':
@@ -459,10 +462,6 @@ def get_gener_timeseries(ts: Dict, gener_instances: Dict, ddlinks: List, ddmassl
mldata = ddmasslinks[link.MLNO]
for dat in mldata:
mfactor = dat.MFACTOR
- sgrpn = dat.SGRPN
- smemn = dat.SMEMN
- smemsb1 = dat.SMEMSB1
- smemsb2 = dat.SMEMSB2
tmemn = dat.TMEMN
tmemsb1 = dat.TMEMSB1
tmemsb2 = dat.TMEMSB2
@@ -471,9 +470,8 @@ def get_gener_timeseries(ts: Dict, gener_instances: Dict, ddlinks: List, ddmassl
factor = afactr * mfactor
# may need to do something in here for special cases like in get_flows
-
- smemn, tmemn = expand_timeseries_names(sgrpn, smemn, smemsb1, smemsb2, tmemn, tmemsb1,
- tmemsb2)
+ if tmemn != 'ONE' and tmemn != 'TWO':
+ tmemn = clean_name(tmemn, tmemsb1 + tmemsb2)
t = series * factor
diff --git a/HSP2IO/io.py b/HSP2IO/io.py
index c17c33c7..4d8437d0 100644
--- a/HSP2IO/io.py
+++ b/HSP2IO/io.py
@@ -62,6 +62,7 @@ def write_ts(self,
operation:Union[str,None]=None,
segment:Union[str,None]=None,
activity:Union[str,None]=None,
+ outstep:int=2,
*args, **kwargs) -> None:
key = (category, operation, segment, activity)
self._in_memory[key] = data_frame.copy(deep=True)
@@ -70,6 +71,27 @@ def write_ts(self,
if drop_columns:
data_frame = data_frame.drop(columns=drop_columns)
+ if outstep == 3:
+ # change time step of output to daily
+ sumdf1 = data_frame.resample('D',kind='timestamp',origin='start').sum()
+ lastdf2 = data_frame.resample('D', kind='timestamp', origin='start').last()
+ meandf3 = data_frame.resample('D', kind='timestamp', origin='start').mean()
+ data_frame= pd.merge(lastdf2.add_suffix('_last'), sumdf1.add_suffix('_sum'), left_index=True, right_index=True)
+ data_frame = pd.merge(data_frame, meandf3.add_suffix('_aver'), left_index=True,right_index=True)
+ elif outstep == 4:
+ # change to monthly
+ sumdf1 = data_frame.resample('M',kind='timestamp',origin='start').sum()
+ lastdf2 = data_frame.resample('M', kind='timestamp', origin='start').last()
+ meandf3 = data_frame.resample('M', kind='timestamp', origin='start').mean()
+ data_frame = pd.merge(lastdf2.add_suffix('_last'), sumdf1.add_suffix('_sum'), left_index=True, right_index=True)
+ data_frame = pd.merge(data_frame, meandf3.add_suffix('_aver'), left_index=True, right_index=True)
+ elif outstep == 5:
+ # change to annual
+ sumdf1 = data_frame.resample('Y',kind='timestamp',origin='start').sum()
+ lastdf2 = data_frame.resample('Y', kind='timestamp', origin='start').last()
+ meandf3 = data_frame.resample('Y', kind='timestamp', origin='start').mean()
+ data_frame = pd.merge(lastdf2.add_suffix('_last'), sumdf1.add_suffix('_sum'), left_index=True, right_index=True)
+ data_frame = pd.merge(data_frame, meandf3.add_suffix('_aver'), left_index=True, right_index=True)
self._output.write_ts(data_frame, category, operation, segment, activity)
def read_ts(self,
diff --git a/HSP2tools/data/ParseTable.csv b/HSP2tools/data/ParseTable.csv
index f4dace1f..aed1d350 100644
--- a/HSP2tools/data/ParseTable.csv
+++ b/HSP2tools/data/ParseTable.csv
@@ -12,7 +12,7 @@
10,PERLND,ACTIVITY,GENERAL,ACTIVITY,NITRFG,I,55,60,0
11,PERLND,ACTIVITY,GENERAL,ACTIVITY,PHOSFG,I,60,65,0
12,PERLND,ACTIVITY,GENERAL,ACTIVITY,TRACFG,I,65,70,0
-13,PERLND,PRINT-INFO,GENERAL,SKIP,OPNID,C,0,10,0
+13,PERLND,PRINT-INFO,GENERAL,SKIP,OPNID,C,0,10,None
14,PERLND,PRINT-INFO,GENERAL,SKIP,AIRTPR,I,10,15,4
15,PERLND,PRINT-INFO,GENERAL,SKIP,SNOWPR,I,15,20,4
16,PERLND,PRINT-INFO,GENERAL,SKIP,PWATPR,I,20,25,4
@@ -27,38 +27,38 @@
25,PERLND,PRINT-INFO,GENERAL,SKIP,TRACPR,I,65,70,4
26,PERLND,PRINT-INFO,GENERAL,SKIP,PIVL,I,70,75,1
27,PERLND,PRINT-INFO,GENERAL,SKIP,PYREND,I,75,80,9
-28,PERLND,BINARY-INFO,GENERAL,SKIP,OPNID,C,0,10,9
-29,PERLND,BINARY-INFO,GENERAL,SKIP,AIRTPR,I,10,15,4
-30,PERLND,BINARY-INFO,GENERAL,SKIP,SNOWPR,I,15,20,4
-31,PERLND,BINARY-INFO,GENERAL,SKIP,PWATPR,I,20,25,4
-32,PERLND,BINARY-INFO,GENERAL,SKIP,SEDPR,I,25,30,4
-33,PERLND,BINARY-INFO,GENERAL,SKIP,PSTPR,I,30,35,4
-34,PERLND,BINARY-INFO,GENERAL,SKIP,PWGPR,I,35,40,4
-35,PERLND,BINARY-INFO,GENERAL,SKIP,PQALPR,I,40,45,4
-36,PERLND,BINARY-INFO,GENERAL,SKIP,MSTLPR,I,45,50,4
-37,PERLND,BINARY-INFO,GENERAL,SKIP,PESTPR,I,50,55,4
-38,PERLND,BINARY-INFO,GENERAL,SKIP,NITRPR,I,55,60,4
-39,PERLND,BINARY-INFO,GENERAL,SKIP,PHOSPR,I,60,65,4
-40,PERLND,BINARY-INFO,GENERAL,SKIP,TRACPR,I,65,70,4
-41,PERLND,BINARY-INFO,GENERAL,SKIP,PIVL,I,70,75,1
-42,PERLND,BINARY-INFO,GENERAL,SKIP,PYREND,I,75,80,9
-43,PERLND,GEN-INFO,GENERAL,INFO,OPNID,C,0,10,9
-44,PERLND,GEN-INFO,GENERAL,INFO,LSID,C,10,30,9
+28,PERLND,BINARY-INFO,GENERAL,BINOUT,OPNID,C,0,10,None
+29,PERLND,BINARY-INFO,GENERAL,BINOUT,ATEMP,I,10,15,4
+30,PERLND,BINARY-INFO,GENERAL,BINOUT,SNOW,I,15,20,4
+31,PERLND,BINARY-INFO,GENERAL,BINOUT,PWATER,I,20,25,4
+32,PERLND,BINARY-INFO,GENERAL,BINOUT,SEDMNT,I,25,30,4
+33,PERLND,BINARY-INFO,GENERAL,BINOUT,PSTEMP,I,30,35,4
+34,PERLND,BINARY-INFO,GENERAL,BINOUT,PWTGAS,I,35,40,4
+35,PERLND,BINARY-INFO,GENERAL,BINOUT,PQUAL,I,40,45,4
+36,PERLND,BINARY-INFO,GENERAL,BINOUT,MSTLAY,I,45,50,4
+37,PERLND,BINARY-INFO,GENERAL,BINOUT,PEST,I,50,55,4
+38,PERLND,BINARY-INFO,GENERAL,BINOUT,NITR,I,55,60,4
+39,PERLND,BINARY-INFO,GENERAL,BINOUT,PHOS,I,60,65,4
+40,PERLND,BINARY-INFO,GENERAL,BINOUT,TRACER,I,65,70,4
+41,PERLND,BINARY-INFO,GENERAL,BINOUT,PIVL,I,70,75,1
+42,PERLND,BINARY-INFO,GENERAL,BINOUT,PYREND,I,75,80,9
+43,PERLND,GEN-INFO,GENERAL,INFO,OPNID,C,0,10,None
+44,PERLND,GEN-INFO,GENERAL,INFO,LSID,C,10,30,None
45,PERLND,GEN-INFO,GENERAL,INFO,IUNITS,I,40,45,1
46,PERLND,GEN-INFO,GENERAL,INFO,OUNITS,I,45,50,1
47,PERLND,GEN-INFO,GENERAL,INFO,PUNIT1,I,50,55,0
48,PERLND,GEN-INFO,GENERAL,INFO,PUNIT2,I,55,60,0
49,PERLND,GEN-INFO,GENERAL,INFO,BUNIT1,I,60,65,0
50,PERLND,GEN-INFO,GENERAL,INFO,BUNIT2,I,65,70,0
-51,PERLND,ATEMP-DAT,ATEMP,PARAMETERS,OPNID,C,0,10,0
+51,PERLND,ATEMP-DAT,ATEMP,PARAMETERS,OPNID,C,0,10,None
52,PERLND,ATEMP-DAT,ATEMP,PARAMETERS,ELDAT,R,10,20,0
53,PERLND,ATEMP-DAT,ATEMP,PARAMETERS,AIRTMP,R,20,30,60
-54,PERLND,ICE-FLAG,SNOW,FLAGS,OPNID,C,0,10,15
+54,PERLND,ICE-FLAG,SNOW,FLAGS,OPNID,C,0,10,None
55,PERLND,ICE-FLAG,SNOW,FLAGS,ICEFG,I,10,15,0
-56,PERLND,SNOW-FLAGS,SNOW,FLAGS,OPNID,C,0,10,0
+56,PERLND,SNOW-FLAGS,SNOW,FLAGS,OPNID,C,0,10,None
57,PERLND,SNOW-FLAGS,SNOW,FLAGS,SNOPFG,I,10,15,0
58,PERLND,SNOW-FLAGS,SNOW,FLAGS,VKMFG,I,15,20,0
-59,PERLND,SNOW-PARM1,SNOW,PARAMETERS,OPNID,C,0,10,
+59,PERLND,SNOW-PARM1,SNOW,PARAMETERS,OPNID,C,0,10,None
60,PERLND,SNOW-PARM1,SNOW,PARAMETERS,LAT,R,10,20,40
61,PERLND,SNOW-PARM1,SNOW,PARAMETERS,MELEV,R,20,30,0
62,PERLND,SNOW-PARM1,SNOW,PARAMETERS,SHADE,R,30,40,0
@@ -66,14 +66,14 @@
64,PERLND,SNOW-PARM1,SNOW,PARAMETERS,COVIND,R,50,60,-999
65,PERLND,SNOW-PARM1,SNOW,PARAMETERS,KMELT,R,60,70,0
66,PERLND,SNOW-PARM1,SNOW,PARAMETERS,TBASE,R,70,80,32
-67,PERLND,SNOW-PARM2,SNOW,PARAMETERS,OPNID,C,0,10,0
+67,PERLND,SNOW-PARM2,SNOW,PARAMETERS,OPNID,C,0,10,None
68,PERLND,SNOW-PARM2,SNOW,PARAMETERS,RDCSN,R,10,20,0.15
69,PERLND,SNOW-PARM2,SNOW,PARAMETERS,TSNOW,R,20,30,32
70,PERLND,SNOW-PARM2,SNOW,PARAMETERS,SNOEVP,R,30,40,0.1
71,PERLND,SNOW-PARM2,SNOW,PARAMETERS,CCFACT,R,40,50,1
72,PERLND,SNOW-PARM2,SNOW,PARAMETERS,MWATER,R,50,60,0.03
73,PERLND,SNOW-PARM2,SNOW,PARAMETERS,MGMELT,R,60,70,0.01
-74,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,OPNID,C,0,10,0.25
+74,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,OPNID,C,0,10,None
75,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,KMJAN,R,10,15,0
76,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,KMFEB,R,15,20,0
77,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,KMMAR,R,20,25,0
@@ -86,18 +86,18 @@
84,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,KMOCT,R,55,60,0
85,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,KMNOV,R,60,65,0
86,PERLND,MON-MELT-FAC,SNOW,MONTHLYS,KMDEC,R,65,70,0
-87,PERLND,SNOW-INIT1,SNOW,STATES,OPNID,C,0,10,0
+87,PERLND,SNOW-INIT1,SNOW,STATES,OPNID,C,0,10,None
88,PERLND,SNOW-INIT1,SNOW,STATES,PKSNOW,R,10,20,0
89,PERLND,SNOW-INIT1,SNOW,STATES,PKICE,R,20,30,0
90,PERLND,SNOW-INIT1,SNOW,STATES,PKWATR,R,30,40,0
91,PERLND,SNOW-INIT1,SNOW,STATES,RDENPF,R,40,50,0.2
92,PERLND,SNOW-INIT1,SNOW,STATES,DULL,R,50,60,400
93,PERLND,SNOW-INIT1,SNOW,STATES,PAKTMP,R,60,70,32
-94,PERLND,SNOW-INIT2,SNOW,STATES,OPNID,C,0,10,0
+94,PERLND,SNOW-INIT2,SNOW,STATES,OPNID,C,0,10,None
95,PERLND,SNOW-INIT2,SNOW,STATES,COVINX,R,10,20,0.01
96,PERLND,SNOW-INIT2,SNOW,STATES,XLNMLT,R,20,30,0
97,PERLND,SNOW-INIT2,SNOW,STATES,SKYCLR,R,30,40,1
-98,PERLND,PWAT-PARM1,PWATER,PARAMETERS,OPNID,C,0,10,1
+98,PERLND,PWAT-PARM1,PWATER,PARAMETERS,OPNID,C,0,10,None
99,PERLND,PWAT-PARM1,PWATER,PARAMETERS,CSNOFG,I,10,15,0
100,PERLND,PWAT-PARM1,PWATER,PARAMETERS,RTOPFG,I,15,20,0
101,PERLND,PWAT-PARM1,PWATER,PARAMETERS,UZFG,I,20,25,0
@@ -111,2308 +111,2314 @@
109,PERLND,PWAT-PARM1,PWATER,PARAMETERS,HWTFG,I,60,65,0
110,PERLND,PWAT-PARM1,PWATER,PARAMETERS,IRRGFG,I,65,70,0
111,PERLND,PWAT-PARM1,PWATER,PARAMETERS,IFRDFG,I,70,75,0
-112,PERLND,PWAT-PARM2,PWATER,PARAMETERS,OPNID,C,0,10,
-113,PERLND,PWAT-PARM2,PWATER,PARAMETERS,FOREST,R,10,20,0
-114,PERLND,PWAT-PARM2,PWATER,PARAMETERS,LZSN,R,20,30,-999
-115,PERLND,PWAT-PARM2,PWATER,PARAMETERS,INFILT,R,30,40,-999
-116,PERLND,PWAT-PARM2,PWATER,PARAMETERS,LSUR,R,40,50,-999
-117,PERLND,PWAT-PARM2,PWATER,PARAMETERS,SLSUR,R,50,60,-999
-118,PERLND,PWAT-PARM2,PWATER,PARAMETERS,KVARY,R,60,70,0
-119,PERLND,PWAT-PARM2,PWATER,PARAMETERS,AGWRC,R,70,80,-999
-120,PERLND,PWAT-PARM3,PWATER,PARAMETERS,OPNID,C,0,10,
-121,PERLND,PWAT-PARM3,PWATER,PARAMETERS,PETMAX,R,10,20,40
-122,PERLND,PWAT-PARM3,PWATER,PARAMETERS,PETMIN,R,20,30,35
-123,PERLND,PWAT-PARM3,PWATER,PARAMETERS,INFEXP,R,30,40,2
-124,PERLND,PWAT-PARM3,PWATER,PARAMETERS,INFILD,R,40,50,2
-125,PERLND,PWAT-PARM3,PWATER,PARAMETERS,DEEPFR,R,50,60,0
-126,PERLND,PWAT-PARM3,PWATER,PARAMETERS,BASETP,R,60,70,0
-127,PERLND,PWAT-PARM3,PWATER,PARAMETERS,AGWETP,R,70,80,0
-128,PERLND,PWAT-PARM4,PWATER,PARAMETERS,OPNID,C,0,10,0
-129,PERLND,PWAT-PARM4,PWATER,PARAMETERS,CEPSC,R,10,20,0
-130,PERLND,PWAT-PARM4,PWATER,PARAMETERS,UZSN,R,20,30,-999
-131,PERLND,PWAT-PARM4,PWATER,PARAMETERS,NSUR,R,30,40,0.1
-132,PERLND,PWAT-PARM4,PWATER,PARAMETERS,INTFW,R,40,50,-999
-133,PERLND,PWAT-PARM4,PWATER,PARAMETERS,IRC,R,50,60,-999
-134,PERLND,PWAT-PARM4,PWATER,PARAMETERS,LZETP,R,60,70,0
-135,PERLND,PWAT-PARM5,PWATER,PARAMETERS,OPNID,C,0,10,0
-136,PERLND,PWAT-PARM5,PWATER,PARAMETERS,FZG,R,10,20,1
-137,PERLND,PWAT-PARM5,PWATER,PARAMETERS,FZGL,R,20,30,0.1
-138,PERLND,PWAT-PARM6,PWATER,PARAMETERS,OPNID,C,0,10,0.1
-139,PERLND,PWAT-PARM6,PWATER,PARAMETERS,MELEV,R,10,20,0
-140,PERLND,PWAT-PARM6,PWATER,PARAMETERS,BELV,R,20,30,-999
-141,PERLND,PWAT-PARM6,PWATER,PARAMETERS,GWDATM,R,30,40,-999
-142,PERLND,PWAT-PARM6,PWATER,PARAMETERS,PCW,R,40,50,-999
-143,PERLND,PWAT-PARM6,PWATER,PARAMETERS,PGW,R,50,60,-999
-144,PERLND,PWAT-PARM6,PWATER,PARAMETERS,UPGW,R,60,70,-999
-145,PERLND,PWAT-PARM7,PWATER,PARAMETERS,OPNID,C,0,10,-999
-146,PERLND,PWAT-PARM7,PWATER,PARAMETERS,STABNO,R,10,20,0
-147,PERLND,PWAT-PARM7,PWATER,PARAMETERS,SRRC,R,20,30,-999
-148,PERLND,PWAT-PARM7,PWATER,PARAMETERS,SREXP,R,30,40,1
-149,PERLND,PWAT-PARM7,PWATER,PARAMETERS,IFWSC,R,40,50,-999
-150,PERLND,PWAT-PARM7,PWATER,PARAMETERS,DELTA,R,50,60,0.001
-151,PERLND,PWAT-PARM7,PWATER,PARAMETERS,UELFAC,R,60,70,4
-152,PERLND,PWAT-PARM7,PWATER,PARAMETERS,LELFAC,R,70,80,2.5
-153,PERLND,PWAT-STATE1,PWATER,STATES,OPNID,C,0,10,
-154,PERLND,PWAT-STATE1,PWATER,STATES,CEPS,R,10,20,0
-155,PERLND,PWAT-STATE1,PWATER,STATES,SURS,R,20,30,0
-156,PERLND,PWAT-STATE1,PWATER,STATES,UZS,R,30,40,0.001
-157,PERLND,PWAT-STATE1,PWATER,STATES,IFWS,R,40,50,0
-158,PERLND,PWAT-STATE1,PWATER,STATES,LZS,R,50,60,0.001
-159,PERLND,PWAT-STATE1,PWATER,STATES,AGWS,R,60,70,0
-160,PERLND,PWAT-STATE1,PWATER,STATES,GWVS,R,70,80,0
-161,PERLND,MON-INTERCEP,PWATER,MONTHLYS,OPNID,C,0,10,0
-162,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTJAN,R,10,15,0
-163,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTFEB,R,15,20,0
-164,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTMAR,R,20,25,0
-165,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTAPR,R,25,30,0
-166,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTMAY,R,30,35,0
-167,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTJUN,R,35,40,0
-168,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTJUL,R,40,45,0
-169,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTAUG,R,45,50,0
-170,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTSEP,R,50,55,0
-171,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTOCT,R,55,60,0
-172,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTNOV,R,60,65,0
-173,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTDEC,R,65,70,0
-174,PERLND,MON-UZSN,PWATER,MONTHLYS,OPNID,C,0,10,0
-175,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSJAN,R,10,15,-999
-176,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSFEB,R,15,20,-999
-177,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSMAR,R,20,25,-999
-178,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSAPR,R,25,30,-999
-179,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSMAY,R,30,35,-999
-180,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSJUN,R,35,40,-999
-181,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSJUL,R,40,45,-999
-182,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSAUG,R,45,50,-999
-183,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSSEP,R,50,55,-999
-184,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSOCT,R,55,60,-999
-185,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSNOV,R,60,65,-999
-186,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSDEC,R,65,70,-999
-187,PERLND,MON-MANNING,PWATER,MONTHLYS,OPNID,C,0,10,-999
-188,PERLND,MON-MANNING,PWATER,MONTHLYS,MANJAN,R,10,15,0.1
-189,PERLND,MON-MANNING,PWATER,MONTHLYS,MANFEB,R,15,20,0.1
-190,PERLND,MON-MANNING,PWATER,MONTHLYS,MANMAR,R,20,25,0.1
-191,PERLND,MON-MANNING,PWATER,MONTHLYS,MANAPR,R,25,30,0.1
-192,PERLND,MON-MANNING,PWATER,MONTHLYS,MANMAY,R,30,35,0.1
-193,PERLND,MON-MANNING,PWATER,MONTHLYS,MANJUN,R,35,40,0.1
-194,PERLND,MON-MANNING,PWATER,MONTHLYS,MANJUL,R,40,45,0.1
-195,PERLND,MON-MANNING,PWATER,MONTHLYS,MANAUG,R,45,50,0.1
-196,PERLND,MON-MANNING,PWATER,MONTHLYS,MANSEP,R,50,55,0.1
-197,PERLND,MON-MANNING,PWATER,MONTHLYS,MANOCT,R,55,60,0.1
-198,PERLND,MON-MANNING,PWATER,MONTHLYS,MANNOV,R,60,65,0.1
-199,PERLND,MON-MANNING,PWATER,MONTHLYS,MANDEC,R,65,70,0.1
-200,PERLND,MON-INTERFLW,PWATER,MONTHLYS,OPNID,C,0,10,0.1
-201,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLJAN,R,10,15,-999
-202,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLFEB,R,15,20,-999
-203,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLMAR,R,20,25,-999
-204,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLAPR,R,25,30,-999
-205,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLMAY,R,30,35,-999
-206,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLJUN,R,35,40,-999
-207,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLJUL,R,40,45,-999
-208,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLAUG,R,45,50,-999
-209,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLSEP,R,50,55,-999
-210,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLOCT,R,55,60,-999
-211,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLNOV,R,60,65,-999
-212,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLDEC,R,65,70,-999
-213,PERLND,MON-IRC,PWATER,MONTHLYS,OPNID,C,0,10,-999
-214,PERLND,MON-IRC,PWATER,MONTHLYS,IRCJAN,R,10,15,-999
-215,PERLND,MON-IRC,PWATER,MONTHLYS,IRCFEB,R,15,20,-999
-216,PERLND,MON-IRC,PWATER,MONTHLYS,IRCMAR,R,20,25,-999
-217,PERLND,MON-IRC,PWATER,MONTHLYS,IRCAPR,R,25,30,-999
-218,PERLND,MON-IRC,PWATER,MONTHLYS,IRCMAY,R,30,35,-999
-219,PERLND,MON-IRC,PWATER,MONTHLYS,IRCJUN,R,35,40,-999
-220,PERLND,MON-IRC,PWATER,MONTHLYS,IRCJUL,R,40,45,-999
-221,PERLND,MON-IRC,PWATER,MONTHLYS,IRCAUG,R,45,50,-999
-222,PERLND,MON-IRC,PWATER,MONTHLYS,IRCSEP,R,50,55,-999
-223,PERLND,MON-IRC,PWATER,MONTHLYS,IRCOCT,R,55,60,-999
-224,PERLND,MON-IRC,PWATER,MONTHLYS,IRCNOV,R,60,65,-999
-225,PERLND,MON-IRC,PWATER,MONTHLYS,IRCDEC,R,65,70,-999
-226,PERLND,MON-LZETPARM,PWATER,MONTHLYS,OPNID,C,0,10,-999
-227,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEJAN,R,10,15,0
-228,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEFEB,R,15,20,0
-229,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEMAR,R,20,25,0
-230,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEAPR,R,25,30,0
-231,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEMAY,R,30,35,0
-232,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEJUN,R,35,40,0
-233,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEJUL,R,40,45,0
-234,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEAUG,R,45,50,0
-235,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZESEP,R,50,55,0
-236,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEOCT,R,55,60,0
-237,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZENOV,R,60,65,0
-238,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEDEC,R,65,70,0
-239,PERLND,SOIL-DATA,PWATER,PEST,OPNID,C,0,10,0
-240,PERLND,SOIL-DATA,PWATER,PEST,DSURF,R,10,18,-999
-241,PERLND,SOIL-DATA,PWATER,PEST,DUPPER,R,18,26,-999
-242,PERLND,SOIL-DATA,PWATER,PEST,DLOWER,R,26,34,-999
-243,PERLND,SOIL-DATA,PWATER,PEST,DGRNDW,R,34,42,-999
-244,PERLND,SOIL-DATA,PWATER,PEST,BDSURF,R,42,50,103
-245,PERLND,SOIL-DATA,PWATER,PEST,BDUPPR,R,50,58,103
-246,PERLND,SOIL-DATA,PWATER,PEST,BDLOWR,R,58,66,103
-247,PERLND,SOIL-DATA,PWATER,PEST,BDGRDW,R,66,74,103
-248,PERLND,SOIL-DATA2,PWATER,PARAMETERS,OPNID,C,0,10,1.65
-249,PERLND,SOIL-DATA2,PWATER,PARAMETERS,SWILTP,R,10,20,0
-250,PERLND,SOIL-DATA2,PWATER,PARAMETERS,UWILTP,R,20,30,0
-251,PERLND,SOIL-DATA2,PWATER,PARAMETERS,LWILTP,R,30,40,0
-252,PERLND,SOIL-DATA2,PWATER,PARAMETERS,AWILTP,R,40,50,0
-253,PERLND,SOIL-DATA3,PWATER,PARAMETERS,OPNID,C,0,10,0
-254,PERLND,SOIL-DATA3,PWATER,PARAMETERS,SFDCAP,R,10,20,0
-255,PERLND,SOIL-DATA3,PWATER,PARAMETERS,UFDCAP,R,20,30,0
-256,PERLND,SOIL-DATA3,PWATER,PARAMETERS,LFDCAP,R,30,40,0
-257,PERLND,SOIL-DATA3,PWATER,PARAMETERS,AFDCAP,R,40,50,0
-258,PERLND,CROP-DATES,PWATER,PARAMETERS,OPNID,C,0,10,0
-259,PERLND,CROP-DATES,PWATER,PARAMETERS,NCRP,I,10,15,1
-260,PERLND,CROP-DATES,PWATER,PARAMETERS,PMON1,I,19,22,1
-261,PERLND,CROP-DATES,PWATER,PARAMETERS,PDAY1,I,22,25,1
-262,PERLND,CROP-DATES,PWATER,PARAMETERS,HMON1,I,27,30,12
-263,PERLND,CROP-DATES,PWATER,PARAMETERS,HDAY1,I,30,33,31
-264,PERLND,CROP-DATES,PWATER,PARAMETERS,PMON2,I,37,40,1
-265,PERLND,CROP-DATES,PWATER,PARAMETERS,PDAY2,I,40,43,1
-266,PERLND,CROP-DATES,PWATER,PARAMETERS,HMON2,I,45,48,12
-267,PERLND,CROP-DATES,PWATER,PARAMETERS,HDAY2,I,48,51,31
-268,PERLND,CROP-DATES,PWATER,PARAMETERS,PMON3,I,55,58,1
-269,PERLND,CROP-DATES,PWATER,PARAMETERS,PDAY3,I,58,61,1
-270,PERLND,CROP-DATES,PWATER,PARAMETERS,HMON3,I,63,66,12
-271,PERLND,CROP-DATES,PWATER,PARAMETERS,HDAY3,I,66,69,31
-272,PERLND,CROP-STAGES,PWATER,CROP_STAGES,OPNID,C,0,10,31
-273,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST1,R,10,20,0
-274,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST2,R,20,30,0
-275,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST3,R,30,40,0
-276,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST4,R,40,50,0
-277,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,OPNID,C,0,10,0
-278,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD1,R,10,20,0
-279,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD2,R,20,30,0
-280,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD3,R,30,40,0
-281,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD4,R,40,50,0
-282,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRRDPI,R,50,60,0
-283,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRRDPF,R,60,70,0
-284,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,OPNID,C,0,10,0
-285,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,NSKED,I,10,15,0
-286,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,SZONFG,I,15,20,0
-287,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,VCRDFG,I,20,25,0
-288,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,VAWDFG,I,25,30,0
-289,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,IROPFG,I,30,35,0
-290,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,OPNID,C,0,10,0
-291,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,IRAREA,R,10,18,0
-292,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,IREFF,R,18,26,1
-293,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,ARZI,R,26,34,1
-294,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,WILTP,R,34,42,0
-295,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,FLDCAP,R,42,50,0
-296,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,CRDEP,R,50,58,0
-297,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,IRAWD,R,58,66,0.9
-298,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,CAPRIS,R,66,74,6
-299,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,OPNID,C,0,10,
-300,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,XPRIOR,R,10,20,0
-301,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,XFRAC,R,20,30,1
-302,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,GPRIOR,R,30,40,0
-303,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,GFRAC,R,40,50,1
-304,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,RPRIOR,R,50,60,0
-305,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,RFRAC,R,60,70,1
-306,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,IRCHNO,R,70,80,0
-307,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,OPNID,C,0,10,0
-308,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRCPFR,R,10,20,0
-309,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRSUFR,R,20,30,0
-310,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRUPFR,R,30,40,0
-311,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRLOFR,R,40,50,0
-312,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRGWFR,R,50,60,0
-313,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,OPNID,C,0,13,
-314,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRYR1,R,13,18,0
-315,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMO1,R,18,21,1
-316,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDY1,R,21,24,1
-317,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRHR1,R,24,27,0
-318,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMI1,R,27,29,0
-319,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDUR1,R,29,34,0
-320,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRRAT1,R,34,50,0
-321,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRYR2,R,50,55,0
-322,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMO2,R,55,58,1
-323,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDY2,R,58,61,1
-324,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRHR2,R,61,64,0
-325,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMI2,R,64,66,0
-326,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDUR2,R,66,71,0
-327,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRRAT2,R,71,81,0
-328,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,OPNID,C,0,10,0
-329,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDJAN,R,10,15,0
-330,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDFEB,R,15,20,0
-331,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDMAR,R,20,25,0
-332,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDAPR,R,25,30,0
-333,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDMAY,R,30,35,0
-334,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDJUN,R,35,40,0
-335,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDJUL,R,40,45,0
-336,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDAUG,R,45,50,0
-337,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDSEP,R,50,55,0
-338,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDOCT,R,55,60,0
-339,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDNOV,R,60,65,0
-340,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDDEC,R,65,70,0
-341,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,OPNID,C,0,10,0
-342,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDJAN,R,10,15,0
-343,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDFEB,R,15,20,0
-344,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDMAR,R,20,25,0
-345,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDAPR,R,25,30,0
-346,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDMAY,R,30,35,0
-347,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDJUN,R,35,40,0
-348,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDJUL,R,40,45,0
-349,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDAUG,R,45,50,0
-350,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDSEP,R,50,55,0
-351,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDOCT,R,55,60,0
-352,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDNOV,R,60,65,0
-353,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDDEC,R,65,70,0
-354,PERLND,SED-PARM1,SEDMNT,PARAMETERS,OPNID,C,0,10,0
-355,PERLND,SED-PARM1,SEDMNT,PARAMETERS,CRVFG,I,10,15,0
-356,PERLND,SED-PARM1,SEDMNT,PARAMETERS,VSIVFG,I,15,20,0
-357,PERLND,SED-PARM1,SEDMNT,PARAMETERS,SDOPFG,I,20,25,0
-358,PERLND,SED-PARM2,SEDMNT,PARAMETERS,OPNID,C,0,10,0
-359,PERLND,SED-PARM2,SEDMNT,PARAMETERS,SMPF,R,10,20,1
-360,PERLND,SED-PARM2,SEDMNT,PARAMETERS,KRER,R,20,30,0
-361,PERLND,SED-PARM2,SEDMNT,PARAMETERS,JRER,R,30,40,-999
-362,PERLND,SED-PARM2,SEDMNT,PARAMETERS,AFFIX,R,40,50,0
-363,PERLND,SED-PARM2,SEDMNT,PARAMETERS,COVER,R,50,60,0
-364,PERLND,SED-PARM2,SEDMNT,PARAMETERS,NVSI,R,60,70,0
-365,PERLND,SED-PARM3,SEDMNT,PARAMETERS,OPNID,C,0,10,0
-366,PERLND,SED-PARM3,SEDMNT,PARAMETERS,KSER,R,10,20,0
-367,PERLND,SED-PARM3,SEDMNT,PARAMETERS,JSER,R,20,30,-999
-368,PERLND,SED-PARM3,SEDMNT,PARAMETERS,KGER,R,30,40,0
-369,PERLND,SED-PARM3,SEDMNT,PARAMETERS,JGER,R,40,50,-999
-370,PERLND,MON-COVER,SEDMNT,MONTHLYS,OPNID,C,0,10,-999
-371,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVJAN,R,10,15,0
-372,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVFEB,R,15,20,0
-373,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVMAR,R,20,25,0
-374,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVAPR,R,25,30,0
-375,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVMAY,R,30,35,0
-376,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVJUN,R,35,40,0
-377,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVJUL,R,40,45,0
-378,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVAUG,R,45,50,0
-379,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVSEP,R,50,55,0
-380,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVOCT,R,55,60,0
-381,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVNOV,R,60,65,0
-382,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVDEC,R,65,70,0
-383,PERLND,MON-NVSI,SEDMNT,MONTHLYS,OPNID,C,0,10,0
-384,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSJAN,R,10,15,0
-385,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSFEB,R,15,20,0
-386,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSMAR,R,20,25,0
-387,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSAPR,R,25,30,0
-388,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSMAY,R,30,35,0
-389,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSJUN,R,35,40,0
-390,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSJUL,R,40,45,0
-391,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSAUG,R,45,50,0
-392,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSSEP,R,50,55,0
-393,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSOCT,R,55,60,0
-394,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSNOV,R,60,65,0
-395,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSDEC,R,65,70,0
-396,PERLND,SED-STOR,SEDMNT,PARAMETERS,OPNID,C,0,10,0
-397,PERLND,SED-STOR,SEDMNT,PARAMETERS,DETS,R,10,20,0
-398,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,OPNID,C,0,10,0
-399,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,SLTVFG,I,10,15,0
-400,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,ULTVFG,I,15,20,0
-401,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,LGTVFG,I,20,25,0
-402,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,TSOPFG,I,25,30,0
-403,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,OPNID,C,0,10,0
-404,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,ASLT,R,10,20,32
-405,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,BSLT,R,20,30,1
-406,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,ULTP1,R,30,40,-999
-407,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,ULTP2,R,40,50,-999
-408,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,LGTP1,R,50,60,-999
-409,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,LGTP2,R,60,70,-999
-410,PERLND,MON-ASLT,PSTEMP,MONTHLYS,OPNID,C,0,10,-999
-411,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTJAN,R,10,15,32
-412,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTFEB,R,15,20,32
-413,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTMAR,R,20,25,32
-414,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTAPR,R,25,30,32
-415,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTMAY,R,30,35,32
-416,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTJUN,R,35,40,32
-417,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTJUL,R,40,45,32
-418,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTAUG,R,45,50,32
-419,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTSEP,R,50,55,32
-420,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTOCT,R,55,60,32
-421,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTNOV,R,60,65,32
-422,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTDEC,R,65,70,32
-423,PERLND,MON-BSLT,PSTEMP,MONTHLYS,OPNID,C,0,10,0
-424,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTJAN,R,10,15,1
-425,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTFEB,R,15,20,1
-426,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTMAR,R,20,25,1
-427,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTAPR,R,25,30,1
-428,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTMAY,R,30,35,1
-429,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTJUN,R,35,40,1
-430,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTJUL,R,40,45,1
-431,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTAUG,R,45,50,1
-432,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTSEP,R,50,55,1
-433,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTOCT,R,55,60,1
-434,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTNOV,R,60,65,1
-435,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTDEC,R,65,70,1
-436,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,OPNID,C,0,10,1
-437,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1JAN,R,10,15,-999
-438,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1FEB,R,15,20,-999
-439,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1MAR,R,20,25,-999
-440,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1APR,R,25,30,-999
-441,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1MAY,R,30,35,-999
-442,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1JUN,R,35,40,-999
-443,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1JUL,R,40,45,-999
-444,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1AUG,R,45,50,-999
-445,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1SEP,R,50,55,-999
-446,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1OCT,R,55,60,-999
-447,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1NOV,R,60,65,-999
-448,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1DEC,R,65,70,-999
-449,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,OPNID,C,0,10,-999
-450,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2JAN,R,10,15,-999
-451,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2FEB,R,15,20,-999
-452,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2MAR,R,20,25,-999
-453,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2APR,R,25,30,-999
-454,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2MAY,R,30,35,-999
-455,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2JUN,R,35,40,-999
-456,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2JUL,R,40,45,-999
-457,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2AUG,R,45,50,-999
-458,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2SEP,R,50,55,-999
-459,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2OCT,R,55,60,-999
-460,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2NOV,R,60,65,-999
-461,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2DEC,R,65,70,-999
-462,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,OPNID,C,0,10,-999
-463,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1JAN,R,10,15,-999
-464,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1FEB,R,15,20,-999
-465,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1MAR,R,20,25,-999
-466,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1APR,R,25,30,-999
-467,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1MAY,R,30,35,-999
-468,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1JUN,R,35,40,-999
-469,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1JUL,R,40,45,-999
-470,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1AUG,R,45,50,-999
-471,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1SEP,R,50,55,-999
-472,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1OCT,R,55,60,-999
-473,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1NOV,R,60,65,-999
-474,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1DEC,R,65,70,-999
-475,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,OPNID,C,0,10,-999
-476,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2JAN,R,10,15,-999
-477,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2FEB,R,15,20,-999
-478,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2MAR,R,20,25,-999
-479,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2APR,R,25,30,-999
-480,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2MAY,R,30,35,-999
-481,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2JUN,R,35,40,-999
-482,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2JUL,R,40,45,-999
-483,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2AUG,R,45,50,-999
-484,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2SEP,R,50,55,-999
-485,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2OCT,R,55,60,-999
-486,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2NOV,R,60,65,-999
-487,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2DEC,R,65,70,-999
-488,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,OPNID,C,0,10,-999
-489,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,AIRTC,R,10,20,60
-490,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,SLTMP,R,20,30,60
-491,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,ULTMP,R,30,40,60
-492,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,LGTMP,R,40,50,60
-493,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,OPNID,C,0,10,16
-494,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,IDVFG,I,10,15,0
-495,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,ICVFG,I,15,20,0
-496,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,GDVFG,I,20,25,0
-497,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,GCVFG,I,25,30,0
-498,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,OPNID,C,0,10,0
-499,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ELEV,R,10,20,0
-500,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,IDOXP,R,20,30,0
-501,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ICO2P,R,30,40,0
-502,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ADOXP,R,40,50,0
-503,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ACO2P,R,50,60,0
-504,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,OPNID,C,0,10,0
-505,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,SDLFAC,R,10,20,0
-506,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,SLIFAC,R,20,30,0
-507,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,ILIFAC,R,30,40,0
-508,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,ALIFAC,R,40,50,0
-509,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,OPNID,C,0,10,0
-510,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOJAN,R,10,15,0
-511,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOFEB,R,15,20,0
-512,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOMAR,R,20,25,0
-513,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOAPR,R,25,30,0
-514,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOMAY,R,30,35,0
-515,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOJUN,R,35,40,0
-516,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOJUL,R,40,45,0
-517,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOAUG,R,45,50,0
-518,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOSEP,R,50,55,0
-519,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOOCT,R,55,60,0
-520,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDONOV,R,60,65,0
-521,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDODEC,R,65,70,0
-522,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,OPNID,C,0,10,0
-523,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2JAN,R,10,15,0
-524,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2FEB,R,15,20,0
-525,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2MAR,R,20,25,0
-526,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2APR,R,25,30,0
-527,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2MAY,R,30,35,0
-528,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2JUN,R,35,40,0
-529,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2JUL,R,40,45,0
-530,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2AUG,R,45,50,0
-531,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2SEP,R,50,55,0
-532,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2OCT,R,55,60,0
-533,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2NOV,R,60,65,0
-534,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2DEC,R,65,70,0
-535,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,OPNID,C,0,10,0
-536,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOJAN,R,10,15,0
-537,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOFEB,R,15,20,0
-538,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOMAR,R,20,25,0
-539,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOAPR,R,25,30,0
-540,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOMAY,R,30,35,0
-541,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOJUN,R,35,40,0
-542,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOJUL,R,40,45,0
-543,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOAUG,R,45,50,0
-544,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOSEP,R,50,55,0
-545,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOOCT,R,55,60,0
-546,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDONOV,R,60,65,0
-547,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDODEC,R,65,70,0
-548,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,OPNID,C,0,10,0
-549,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOJAN,R,10,15,0
-550,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOFEB,R,15,20,0
-551,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOMAR,R,20,25,0
-552,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOAPR,R,25,30,0
-553,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOMAY,R,30,35,0
-554,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOJUN,R,35,40,0
-555,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOJUL,R,40,45,0
-556,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOAUG,R,45,50,0
-557,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOSEP,R,50,55,0
-558,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOOCT,R,55,60,0
-559,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCONOV,R,60,65,0
-560,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCODEC,R,65,70,0
-561,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,OPNID,C,0,10,0
-562,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,SOTMP,R,10,20,60
-563,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,IOTMP,R,20,30,60
-564,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,AOTMP,R,30,40,60
-565,PERLND,PWT-GASES,PWTGAS,PARAMETERS,OPNID,C,0,10,16
-566,PERLND,PWT-GASES,PWTGAS,PARAMETERS,SODOX,R,10,20,0
-567,PERLND,PWT-GASES,PWTGAS,PARAMETERS,SOCO2,R,20,30,0
-568,PERLND,PWT-GASES,PWTGAS,PARAMETERS,IODOX,R,30,40,0
-569,PERLND,PWT-GASES,PWTGAS,PARAMETERS,IOCO2,R,40,50,0
-570,PERLND,PWT-GASES,PWTGAS,PARAMETERS,AODOX,R,50,60,0
-571,PERLND,PWT-GASES,PWTGAS,PARAMETERS,AOCO2,R,60,70,0
-572,PERLND,NQUALS,PQUAL,PQUAL,OPNID,C,0,10,0
-573,PERLND,NQUALS,PQUAL,PQUAL,NQUAL,I,10,15,1
-574,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,OPNID,C,0,11,
-575,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG1,I,11,14,0
-576,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG2,I,14,18,0
-577,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG3,I,18,21,0
-578,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG4,I,21,25,0
-579,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG5,I,25,28,0
-580,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG6,I,28,32,0
-581,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG7,I,32,35,0
-582,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG8,I,35,39,0
-583,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG9,I,39,42,0
-584,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG10,I,42,46,0
-585,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG11,I,46,49,0
-586,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG12,I,49,53,0
-587,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG13,I,53,56,0
-588,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG14,I,56,60,0
-589,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG15,I,60,63,0
-590,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG16,I,63,67,0
-591,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG17,I,67,70,0
-592,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG18,I,70,74,0
-593,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG19,I,74,77,0
-594,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG20,I,77,80,0
-595,PERLND,QUAL-PROPS,PQUAL,PQUAL,OPNID,C,0,10,0
-596,PERLND,QUAL-PROPS,PQUAL,PQUAL,QUALID,C,10,22,0
-597,PERLND,QUAL-PROPS,PQUAL,PQUAL,QTYID,C,26,30,0
-598,PERLND,QUAL-PROPS,PQUAL,PQUAL,QSDFG,I,30,35,0
-599,PERLND,QUAL-PROPS,PQUAL,PQUAL,VPFWFG,I,35,40,0
-600,PERLND,QUAL-PROPS,PQUAL,PQUAL,VPFSFG,I,40,45,0
-601,PERLND,QUAL-PROPS,PQUAL,PQUAL,QSOFG,I,45,50,0
-602,PERLND,QUAL-PROPS,PQUAL,PQUAL,VQOFG,I,50,55,0
-603,PERLND,QUAL-PROPS,PQUAL,PQUAL,QIFWFG,I,55,60,0
-604,PERLND,QUAL-PROPS,PQUAL,PQUAL,VIQCFG,I,60,65,0
-605,PERLND,QUAL-PROPS,PQUAL,PQUAL,QAGWFG,I,65,70,0
-606,PERLND,QUAL-PROPS,PQUAL,PQUAL,VAQCFG,I,70,75,0
-607,PERLND,QUAL-INPUT,PQUAL,PQUAL,OPNID,C,0,10,0
-608,PERLND,QUAL-INPUT,PQUAL,PQUAL,SQO,R,10,18,0
-609,PERLND,QUAL-INPUT,PQUAL,PQUAL,POTFW,R,18,26,0
-610,PERLND,QUAL-INPUT,PQUAL,PQUAL,POTFS,R,26,34,0
-611,PERLND,QUAL-INPUT,PQUAL,PQUAL,ACQOP,R,34,42,0
-612,PERLND,QUAL-INPUT,PQUAL,PQUAL,SQOLIM,R,42,50,0.000001
-613,PERLND,QUAL-INPUT,PQUAL,PQUAL,WSQOP,R,50,58,1.64
-614,PERLND,QUAL-INPUT,PQUAL,PQUAL,IOQC,R,58,66,0
-615,PERLND,QUAL-INPUT,PQUAL,PQUAL,AOQC,R,66,74,0
-616,PERLND,MON-POTFW,PQUAL,PQUAL,OPNID,C,0,10,0
-617,PERLND,MON-POTFW,PQUAL,PQUAL,WPFJAN,R,10,15,0
-618,PERLND,MON-POTFW,PQUAL,PQUAL,WPFFEB,R,15,20,0
-619,PERLND,MON-POTFW,PQUAL,PQUAL,WPFMAR,R,20,25,0
-620,PERLND,MON-POTFW,PQUAL,PQUAL,WPFAPR,R,25,30,0
-621,PERLND,MON-POTFW,PQUAL,PQUAL,WPFMAY,R,30,35,0
-622,PERLND,MON-POTFW,PQUAL,PQUAL,WPFJUN,R,35,40,0
-623,PERLND,MON-POTFW,PQUAL,PQUAL,WPFJUL,R,40,45,0
-624,PERLND,MON-POTFW,PQUAL,PQUAL,WPFAUG,R,45,50,0
-625,PERLND,MON-POTFW,PQUAL,PQUAL,WPFSEP,R,50,55,0
-626,PERLND,MON-POTFW,PQUAL,PQUAL,WPFOCT,R,55,60,0
-627,PERLND,MON-POTFW,PQUAL,PQUAL,WPFNOV,R,60,65,0
-628,PERLND,MON-POTFW,PQUAL,PQUAL,WPFDEC,R,65,70,0
-629,PERLND,MON-POTFS,PQUAL,PQUAL,OPNID,C,0,10,0
-630,PERLND,MON-POTFS,PQUAL,PQUAL,SPFJAN,R,10,15,0
-631,PERLND,MON-POTFS,PQUAL,PQUAL,SPFFEB,R,15,20,0
-632,PERLND,MON-POTFS,PQUAL,PQUAL,SPFMAR,R,20,25,0
-633,PERLND,MON-POTFS,PQUAL,PQUAL,SPFAPR,R,25,30,0
-634,PERLND,MON-POTFS,PQUAL,PQUAL,SPFMAY,R,30,35,0
-635,PERLND,MON-POTFS,PQUAL,PQUAL,SPFJUN,R,35,40,0
-636,PERLND,MON-POTFS,PQUAL,PQUAL,SPFJUL,R,40,45,0
-637,PERLND,MON-POTFS,PQUAL,PQUAL,SPFAUG,R,45,50,0
-638,PERLND,MON-POTFS,PQUAL,PQUAL,SPFSEP,R,50,55,0
-639,PERLND,MON-POTFS,PQUAL,PQUAL,SPFOCT,R,55,60,0
-640,PERLND,MON-POTFS,PQUAL,PQUAL,SPFNOV,R,60,65,0
-641,PERLND,MON-POTFS,PQUAL,PQUAL,SPFDEC,R,65,70,0
-642,PERLND,MON-ACCUM,PQUAL,PQUAL,OPNID,C,0,10,0
-643,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAJAN,R,10,15,0
-644,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAFEB,R,15,20,0
-645,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAMAR,R,20,25,0
-646,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAAPR,R,25,30,0
-647,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAMAY,R,30,35,0
-648,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAJUN,R,35,40,0
-649,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAJUL,R,40,45,0
-650,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAAUG,R,45,50,0
-651,PERLND,MON-ACCUM,PQUAL,PQUAL,QUASEP,R,50,55,0
-652,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAOCT,R,55,60,0
-653,PERLND,MON-ACCUM,PQUAL,PQUAL,QUANOV,R,60,65,0
-654,PERLND,MON-ACCUM,PQUAL,PQUAL,QUADEC,R,65,70,0
-655,PERLND,MON-SQOLIM,PQUAL,PQUAL,OPNID,C,0,10,0
-656,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOJAN,R,10,15,0.000001
-657,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOFEB,R,15,20,0.000001
-658,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOMAR,R,20,25,0.000001
-659,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOAPR,R,25,30,0.000001
-660,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOMAY,R,30,35,0.000001
-661,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOJUN,R,35,40,0.000001
-662,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOJUL,R,40,45,0.000001
-663,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOAUG,R,45,50,0.000001
-664,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOSEP,R,50,55,0.000001
-665,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOOCT,R,55,60,0.000001
-666,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQONOV,R,60,65,0.000001
-667,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQODEC,R,65,70,0.000001
-668,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,OPNID,C,0,10,0.000002
-669,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONJAN,R,10,15,0
-670,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONFEB,R,15,20,0
-671,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONMAR,R,20,25,0
-672,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONAPR,R,25,30,0
-673,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONMAY,R,30,35,0
-674,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONJUN,R,35,40,0
-675,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONJUL,R,40,45,0
-676,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONAUG,R,45,50,0
-677,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONSEP,R,50,55,0
-678,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONOCT,R,55,60,0
-679,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONNOV,R,60,65,0
-680,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONDEC,R,65,70,0
-681,PERLND,MON-GRND-CONC,PQUAL,PQUAL,OPNID,C,0,10,0
-682,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCJAN,R,10,15,0
-683,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCFEB,R,15,20,0
-684,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCMAR,R,20,25,0
-685,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCAPR,R,25,30,0
-686,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCMAY,R,30,35,0
-687,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCJUN,R,35,40,0
-688,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCJUL,R,40,45,0
-689,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCAUG,R,45,50,0
-690,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCSEP,R,50,55,0
-691,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCOCT,R,55,60,0
-692,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCNOV,R,60,65,0
-693,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCDEC,R,65,70,0
-694,PERLND,VUZFG,MSTLAY,FLAGS,OPNID,C,0,10,0
-695,PERLND,VUZFG,MSTLAY,FLAGS,VUZFG,I,10,15,0
-696,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,OPNID,C,0,10,0
-697,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,UZSN,R,10,18,-999
-698,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,LZSN,R,18,26,-999
-699,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,SURS,R,26,34,0.001
-700,PERLND,MST-PARM,MSTLAY,PARAMETERS,OPNID,C,0,10,0.025
-701,PERLND,MST-PARM,MSTLAY,PARAMETERS,SLMPF,R,10,20,1
-702,PERLND,MST-PARM,MSTLAY,PARAMETERS,ULPF,R,20,30,1
-703,PERLND,MST-PARM,MSTLAY,PARAMETERS,LLPF,R,30,40,1
-704,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,OPNID,C,0,10,1
-705,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,SMSTM,R,10,20,0
-706,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,UMSTM,R,20,30,0
-707,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,IMSTM,R,30,40,0
-708,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,OPNID,C,0,10,0
-709,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FSO,R,10,20,0
-710,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FSP,R,20,30,0
-711,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FII,R,30,40,0
-712,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FUP,R,40,50,0
-713,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FIO,R,50,60,0
-714,PERLND,MST-SUBSTOR,MSTLAY,PARAMETERS,OPNID,C,0,10,0
-715,PERLND,MST-SUBSTOR,MSTLAY,PARAMETERS,LMSTM,R,10,20,0
-716,PERLND,MST-SUBSTOR,MSTLAY,PARAMETERS,AMSTM,R,20,30,0
-717,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,OPNID,C,0,10,0
-718,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,FLP,R,10,20,0
-719,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,FLDP,R,20,30,0
-720,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,FAO,R,30,40,0
-721,PERLND,PEST-FLAGS,PEST,PEST,OPNID,C,0,10,0
-722,PERLND,PEST-FLAGS,PEST,PEST,NPST,I,10,15,1
-723,PERLND,PEST-FLAGS,PEST,PEST,ITMXP1,I,15,20,30
-724,PERLND,PEST-FLAGS,PEST,PEST,ITMXP2,I,20,25,30
-725,PERLND,PEST-FLAGS,PEST,PEST,ITMXP3,I,25,30,30
-726,PERLND,PEST-FLAGS,PEST,PEST,ADOPF1,I,30,35,2
-727,PERLND,PEST-FLAGS,PEST,PEST,ADOPF2,I,35,40,2
-728,PERLND,PEST-FLAGS,PEST,PEST,ADOPF3,I,40,45,2
-729,PERLND,PEST-AD-FLAGS,PEST,FLAGS,OPNID,C,0,10,2
-730,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG1,I,11,14,0
-731,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG2,I,14,17,0
-732,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG3,I,18,21,0
-733,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG4,I,21,24,0
-734,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG5,I,25,28,0
-735,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG6,I,28,31,0
-736,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG7,I,33,36,0
-737,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG8,I,36,39,0
-738,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG9,I,40,43,0
-739,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG10,I,43,46,0
-740,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG11,I,47,50,0
-741,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG12,I,50,53,0
-742,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG13,I,55,58,0
-743,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG14,I,58,61,0
-744,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG15,I,62,65,0
-745,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG16,I,65,68,0
-746,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG17,I,69,72,0
-747,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG18,I,72,75,0
-748,PERLND,PEST-ID,PEST,PEST,OPNID,C,0,10,0
-749,PERLND,PEST-ID,PEST,PEST,PESTID,C,10,30,0
-750,PERLND,PEST-THETA,PEST,PEST,OPNID,C,0,10,0
-751,PERLND,PEST-THETA,PEST,PEST,THDSPS,R,10,20,1.05
-752,PERLND,PEST-THETA,PEST,PEST,THADPS,R,20,30,1.05
-753,PERLND,PEST-FIRSTPM,PEST,PEST,OPNID,C,0,10,1.05
-754,PERLND,PEST-FIRSTPM,PEST,PEST,KDSPS,R,10,20,0
-755,PERLND,PEST-FIRSTPM,PEST,PEST,KADPS,R,20,30,0
-756,PERLND,PEST-CMAX,PEST,PEST,OPNID,C,0,10,0
-757,PERLND,PEST-CMAX,PEST,PEST,CMAX,R,10,20,0
-758,PERLND,PEST-SVALPM,PEST,PEST,OPNID,C,0,10,0
-759,PERLND,PEST-SVALPM,PEST,PEST,XFIX,R,10,20,0
-760,PERLND,PEST-SVALPM,PEST,PEST,K1,R,20,30,0
-761,PERLND,PEST-SVALPM,PEST,PEST,N1,R,30,40,-999
-762,PERLND,PEST-NONSVPM,PEST,PEST,OPNID,C,0,10,-999
-763,PERLND,PEST-NONSVPM,PEST,PEST,XFIX,R,10,20,0
-764,PERLND,PEST-NONSVPM,PEST,PEST,K1,R,20,30,0
-765,PERLND,PEST-NONSVPM,PEST,PEST,N1,R,30,40,-999
-766,PERLND,PEST-NONSVPM,PEST,PEST,N2,R,40,50,-999
-767,PERLND,PEST-DEGRAD,PEST,PARAMETERS,OPNID,C,0,10,-999
-768,PERLND,PEST-DEGRAD,PEST,PARAMETERS,SDGCON,R,10,20,0
-769,PERLND,PEST-DEGRAD,PEST,PARAMETERS,UDGCON,R,20,30,0
-770,PERLND,PEST-DEGRAD,PEST,PARAMETERS,LDGCON,R,30,40,0
-771,PERLND,PEST-DEGRAD,PEST,PARAMETERS,ADGCON,R,40,50,0
-772,PERLND,PEST-STOR1,PEST,PEST,OPNID,C,0,10,0
-773,PERLND,PEST-STOR1,PEST,PEST,PSCY,R,10,20,0
-774,PERLND,PEST-STOR1,PEST,PEST,PSAD,R,20,30,0
-775,PERLND,PEST-STOR1,PEST,PEST,PSSU,R,30,40,0
-776,PERLND,PEST-STOR2,PEST,PEST,OPNID,C,0,10,0
-777,PERLND,PEST-STOR2,PEST,PEST,IPS,R,10,20,0
-778,PERLND,NIT-FLAGS,NITR,NITR,OPNID,C,0,10,0
-779,PERLND,NIT-FLAGS,NITR,NITR,VNUTFG,I,10,15,0
-780,PERLND,NIT-FLAGS,NITR,NITR,FORAFG,I,15,20,0
-781,PERLND,NIT-FLAGS,NITR,NITR,ITMAXA,I,20,25,30
-782,PERLND,NIT-FLAGS,NITR,NITR,BNUMN,I,25,30,-999
-783,PERLND,NIT-FLAGS,NITR,NITR,CNUMN,I,30,35,-999
-784,PERLND,NIT-FLAGS,NITR,NITR,NUPTFG,I,35,40,0
-785,PERLND,NIT-FLAGS,NITR,NITR,FIXNFG,I,40,45,0
-786,PERLND,NIT-FLAGS,NITR,NITR,AMVOFG,I,45,50,0
-787,PERLND,NIT-FLAGS,NITR,NITR,ALPNFG,I,50,55,0
-788,PERLND,NIT-FLAGS,NITR,NITR,VNPRFG,I,55,60,0
-789,PERLND,NIT-AD-FLAGS,NITR,FLAGS,OPNID,C,0,10,0
-790,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG1,I,11,14,0
-791,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG2,I,14,17,0
-792,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG3,I,18,21,0
-793,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG4,I,21,24,0
-794,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG5,I,26,29,0
-795,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG6,I,29,32,0
-796,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG7,I,33,36,0
-797,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG8,I,36,39,0
-798,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG9,I,41,44,0
-799,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG10,I,44,47,0
-800,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG11,I,48,51,0
-801,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG12,I,51,54,0
-802,PERLND,NIT-UPTAKE,NITR,NITR,OPNID,C,0,10,0
-803,PERLND,NIT-UPTAKE,NITR,NITR,SKPLN,R,10,20,0
-804,PERLND,NIT-UPTAKE,NITR,NITR,UKPLN,R,20,30,0
-805,PERLND,NIT-UPTAKE,NITR,NITR,LKPLN,R,30,40,0
-806,PERLND,NIT-UPTAKE,NITR,NITR,AKPLN,R,40,50,0
-807,PERLND,MON-NITUPT,NITR,NITR,OPNID,C,0,10,0
-808,PERLND,MON-NITUPT,NITR,NITR,KPLJAN,R,10,15,0
-809,PERLND,MON-NITUPT,NITR,NITR,KPLFEB,R,15,20,0
-810,PERLND,MON-NITUPT,NITR,NITR,KPLMAR,R,20,25,0
-811,PERLND,MON-NITUPT,NITR,NITR,KPLAPR,R,25,30,0
-812,PERLND,MON-NITUPT,NITR,NITR,KPLMAY,R,30,35,0
-813,PERLND,MON-NITUPT,NITR,NITR,KPLJUN,R,35,40,0
-814,PERLND,MON-NITUPT,NITR,NITR,KPLJUL,R,40,45,0
-815,PERLND,MON-NITUPT,NITR,NITR,KPLAUG,R,45,50,0
-816,PERLND,MON-NITUPT,NITR,NITR,KPLSEP,R,50,55,0
-817,PERLND,MON-NITUPT,NITR,NITR,KPLOCT,R,55,60,0
-818,PERLND,MON-NITUPT,NITR,NITR,KPLNOV,R,60,65,0
-819,PERLND,MON-NITUPT,NITR,NITR,KPLDEC,R,65,70,0
-820,PERLND,NIT-FSTGEN,NITR,NITR,OPNID,C,0,10,0
-821,PERLND,NIT-FSTGEN,NITR,NITR,NO3UTF,R,10,15,1
-822,PERLND,NIT-FSTGEN,NITR,NITR,NH4UTF,R,15,20,0
-823,PERLND,NIT-FSTGEN,NITR,NITR,THPLN,R,20,25,1.07
-824,PERLND,NIT-FSTGEN,NITR,NITR,THKDSA,R,25,30,1.05
-825,PERLND,NIT-FSTGEN,NITR,NITR,THKADA,R,30,35,1.05
-826,PERLND,NIT-FSTGEN,NITR,NITR,THKIMN,R,35,40,1.07
-827,PERLND,NIT-FSTGEN,NITR,NITR,THKAM,R,40,45,1.07
-828,PERLND,NIT-FSTGEN,NITR,NITR,THKDNI,R,45,50,1.07
-829,PERLND,NIT-FSTGEN,NITR,NITR,THKNI,R,50,55,1.05
-830,PERLND,NIT-FSTGEN,NITR,NITR,THKIMA,R,55,60,1.07
-831,PERLND,NIT-FSTPM,NITR,NITR,OPNID,C,0,10,
-832,PERLND,NIT-FSTPM,NITR,NITR,KDSAM,R,10,20,0
-833,PERLND,NIT-FSTPM,NITR,NITR,KADAM,R,20,30,0
-834,PERLND,NIT-FSTPM,NITR,NITR,KIMNI,R,30,40,0
-835,PERLND,NIT-FSTPM,NITR,NITR,KAM,R,40,50,0
-836,PERLND,NIT-FSTPM,NITR,NITR,KDNI,R,50,60,0
-837,PERLND,NIT-FSTPM,NITR,NITR,KNI,R,60,70,0
-838,PERLND,NIT-FSTPM,NITR,NITR,KIMAM,R,70,80,0
-839,PERLND,NIT-CMAX,NITR,NITR,OPNID,C,0,10,0
-840,PERLND,NIT-CMAX,NITR,NITR,CMAX,R,10,20,0
-841,PERLND,NIT-SVALPM,NITR,NITR,OPNID,C,0,10,0
-842,PERLND,NIT-SVALPM,NITR,NITR,XFIX,R,10,20,0
-843,PERLND,NIT-SVALPM,NITR,NITR,K1,R,20,30,0
-844,PERLND,NIT-SVALPM,NITR,NITR,N1,R,30,40,-999
-845,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,OPNID,C,0,10,-999
-846,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KUPNI,R,10,20,0
-847,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KUPAM,R,20,30,0
-848,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KIMNI,R,30,40,0
-849,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KIMAM,R,40,50,0
-850,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,OPNID,C,0,10,0
-851,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSUNI,R,10,20,0
-852,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSUAM,R,20,30,0
-853,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSINI,R,30,40,0
-854,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSIAM,R,40,50,0
-855,PERLND,MON-NITUPNI,NITR,MONTHLYS,OPNID,C,0,10,0
-856,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNJAN,R,10,15,0
-857,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNFEB,R,15,20,0
-858,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNMAR,R,20,25,0
-859,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNAPR,R,25,30,0
-860,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNMAY,R,30,35,0
-861,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNJUN,R,35,40,0
-862,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNJUL,R,40,45,0
-863,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNAUG,R,45,50,0
-864,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNSEP,R,50,55,0
-865,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNOCT,R,55,60,0
-866,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNNOV,R,60,65,0
-867,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNDEC,R,65,70,0
-868,PERLND,MON-NITUPAM,NITR,MONTHLYS,OPNID,C,0,10,0
-869,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAJAN,R,10,15,0
-870,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAFEB,R,15,20,0
-871,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAMAR,R,20,25,0
-872,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAAPR,R,25,30,0
-873,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAMAY,R,30,35,0
-874,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAJUN,R,35,40,0
-875,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAJUL,R,40,45,0
-876,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAAUG,R,45,50,0
-877,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUASEP,R,50,55,0
-878,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAOCT,R,55,60,0
-879,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUANOV,R,60,65,0
-880,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUADEC,R,65,70,0
-881,PERLND,MON-NITIMNI,NITR,MONTHLYS,OPNID,C,0,10,0
-882,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINJAN,R,10,15,0
-883,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINFEB,R,15,20,0
-884,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINMAR,R,20,25,0
-885,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINAPR,R,25,30,0
-886,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINMAY,R,30,35,0
-887,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINJUN,R,35,40,0
-888,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINJUL,R,40,45,0
-889,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINAUG,R,45,50,0
-890,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINSEP,R,50,55,0
-891,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINOCT,R,55,60,0
-892,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINNOV,R,60,65,0
-893,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINDEC,R,65,70,0
-894,PERLND,MON-NITIMAM,NITR,MONTHLYS,OPNID,C,0,10,0
-895,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAJAN,R,10,15,0
-896,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAFEB,R,15,20,0
-897,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAMAR,R,20,25,0
-898,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAAPR,R,25,30,0
-899,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAMAY,R,30,35,0
-900,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAJUN,R,35,40,0
-901,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAJUL,R,40,45,0
-902,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAAUG,R,45,50,0
-903,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIASEP,R,50,55,0
-904,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAOCT,R,55,60,0
-905,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIANOV,R,60,65,0
-906,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIADEC,R,65,70,0
-907,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,OPNID,C,0,10,0
-908,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,SKVOL,R,10,20,0
-909,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,UKVOL,R,20,30,0
-910,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,LKVOL,R,30,40,0
-911,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,AKVOL,R,40,50,0
-912,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,THVOL,R,50,60,1.07
-913,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,TRFVOL,R,60,70,20
-914,PERLND,NIT-YIELD,NITR,PARAMETERS,OPNID,C,0,10,20
-915,PERLND,NIT-YIELD,NITR,PARAMETERS,NUPTGT,R,10,20,0
-916,PERLND,NIT-YIELD,NITR,PARAMETERS,NMXRAT,R,20,30,1
-917,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,OPNID,C,0,10,1
-918,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUJAN,R,10,15,0
-919,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUFEB,R,15,20,0
-920,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUMAR,R,20,25,0
-921,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUAPR,R,25,30,0
-922,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUMAY,R,30,35,0
-923,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUJUN,R,35,40,0
-924,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUJUL,R,40,45,0
-925,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUAUG,R,45,50,0
-926,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUSEP,R,50,55,0
-927,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUOCT,R,55,60,0
-928,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUNOV,R,60,65,0
-929,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUDEC,R,65,70,0
-930,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,OPNID,C,0,10,0
-931,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUJAN,R,10,15,0
-932,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUFEB,R,15,20,0
-933,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUMAR,R,20,25,0
-934,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUAPR,R,25,30,0
-935,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUMAY,R,30,35,0
-936,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUJUN,R,35,40,0
-937,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUJUL,R,40,45,0
-938,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUAUG,R,45,50,0
-939,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUSEP,R,50,55,0
-940,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUOCT,R,55,60,0
-941,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUNOV,R,60,65,0
-942,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUDEC,R,65,70,0
-943,PERLND,NIT-ORGPM,NITR,PARAMETERS,OPNID,C,0,10,0
-944,PERLND,NIT-ORGPM,NITR,PARAMETERS,KLON,R,10,20,1.00E+20
-945,PERLND,NIT-ORGPM,NITR,PARAMETERS,KRON,R,20,30,1.00E+20
-946,PERLND,NIT-ORGPM,NITR,PARAMETERS,KONLR,R,30,40,0
-947,PERLND,NIT-ORGPM,NITR,PARAMETERS,THNLR,R,40,50,1.07
-948,PERLND,NIT-BGPLRET,NITR,PARAMETERS,OPNID,C,0,10,1.07
-949,PERLND,NIT-BGPLRET,NITR,PARAMETERS,SKPRBN,R,10,20,0
-950,PERLND,NIT-BGPLRET,NITR,PARAMETERS,UKPRBN,R,20,30,0
-951,PERLND,NIT-BGPLRET,NITR,PARAMETERS,LKPRBN,R,30,40,0
-952,PERLND,NIT-BGPLRET,NITR,PARAMETERS,AKPRBN,R,40,50,0
-953,PERLND,NIT-BGPLRET,NITR,PARAMETERS,BGPRFR,R,50,60,0
-954,PERLND,NIT-AGPLRET,NITR,PARAMETERS,OPNID,C,0,10,0
-955,PERLND,NIT-AGPLRET,NITR,PARAMETERS,AGKPRN,R,10,20,0
-956,PERLND,NIT-AGPLRET,NITR,PARAMETERS,SKPRLN,R,20,30,0
-957,PERLND,NIT-AGPLRET,NITR,PARAMETERS,UKPRLN,R,30,40,0
-958,PERLND,NIT-AGPLRET,NITR,PARAMETERS,LINPRF,R,40,50,0
-959,PERLND,MON-NPRETBG,NITR,MONTHLYS,OPNID,C,0,10,0
-960,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRJAN,R,10,15,0
-961,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRFEB,R,15,20,0
-962,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRMAR,R,20,25,0
-963,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRAPR,R,25,30,0
-964,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRMAY,R,30,35,0
-965,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRJUN,R,35,40,0
-966,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRJUL,R,40,45,0
-967,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRAUG,R,45,50,0
-968,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRSEP,R,50,55,0
-969,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNROCT,R,55,60,0
-970,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRNOV,R,60,65,0
-971,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRDEC,R,65,70,0
-972,PERLND,MON-NPRETAG,NITR,MONTHLYS,OPNID,C,0,10,0
-973,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRJAN,R,10,15,0
-974,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRFEB,R,15,20,0
-975,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRMAR,R,20,25,0
-976,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRAPR,R,25,30,0
-977,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRMAY,R,30,35,0
-978,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRJUN,R,35,40,0
-979,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRJUL,R,40,45,0
-980,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRAUG,R,45,50,0
-981,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRSEP,R,50,55,0
-982,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANROCT,R,55,60,0
-983,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRNOV,R,60,65,0
-984,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRDEC,R,65,70,0
-985,PERLND,MON-NPRETLI,NITR,MONTHLYS,OPNID,C,0,10,0
-986,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRJAN,R,10,15,0
-987,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRFEB,R,15,20,0
-988,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRMAR,R,20,25,0
-989,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRAPR,R,25,30,0
-990,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRMAY,R,30,35,0
-991,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRJUN,R,35,40,0
-992,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRJUL,R,40,45,0
-993,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRAUG,R,45,50,0
-994,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRSEP,R,50,55,0
-995,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNROCT,R,55,60,0
-996,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRNOV,R,60,65,0
-997,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRDEC,R,65,70,0
-998,PERLND,MON-NPRETFBG,NITR,MONTHLYS,OPNID,C,0,10,0
-999,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFJAN,R,10,15,0
-1000,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFFEB,R,15,20,0
-1001,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFMAR,R,20,25,0
-1002,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFAPR,R,25,30,0
-1003,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFMAY,R,30,35,0
-1004,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFJUN,R,35,40,0
-1005,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFJUL,R,40,45,0
-1006,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFAUG,R,45,50,0
-1007,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFSEP,R,50,55,0
-1008,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFOCT,R,55,60,0
-1009,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFNOV,R,60,65,0
-1010,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFDEC,R,65,70,0
-1011,PERLND,MON-NPRETFLI,NITR,MONTHLYS,OPNID,C,0,10,0
-1012,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFJAN,R,10,15,0
-1013,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFFEB,R,15,20,0
-1014,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFMAR,R,20,25,0
-1015,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFAPR,R,25,30,0
-1016,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFMAY,R,30,35,0
-1017,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFJUN,R,35,40,0
-1018,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFJUL,R,40,45,0
-1019,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFAUG,R,45,50,0
-1020,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFSEP,R,50,55,0
-1021,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFOCT,R,55,60,0
-1022,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFNOV,R,60,65,0
-1023,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFDEC,R,65,70,0
-1024,PERLND,NIT-AGUTF,NITR,PARAMETERS,OPNID,C,0,10,0
-1025,PERLND,NIT-AGUTF,NITR,PARAMETERS,SANUTF,R,10,20,0
-1026,PERLND,NIT-AGUTF,NITR,PARAMETERS,UANUTF,R,20,30,0
-1027,PERLND,NIT-AGUTF,NITR,PARAMETERS,LANUTF,R,30,40,0
-1028,PERLND,NIT-AGUTF,NITR,PARAMETERS,AANUTF,R,40,50,0
-1029,PERLND,MON-NITAGUTF,NITR,MONTHLYS,OPNID,C,0,10,0
-1030,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFJAN,R,10,15,0
-1031,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFFEB,R,15,20,0
-1032,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFMAR,R,20,25,0
-1033,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFAPR,R,25,30,0
-1034,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFMAY,R,30,35,0
-1035,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFJUN,R,35,40,0
-1036,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFJUL,R,40,45,0
-1037,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFAUG,R,45,50,0
-1038,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFSEP,R,50,55,0
-1039,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFOCT,R,55,60,0
-1040,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFNOV,R,60,65,0
-1041,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFDEC,R,65,70,0
-1042,PERLND,NIT-STOR1,NITR,NITR,OPNID,C,0,10,0
-1043,PERLND,NIT-STOR1,NITR,NITR,LORGN,R,10,20,0
-1044,PERLND,NIT-STOR1,NITR,NITR,AMAD,R,20,30,0
-1045,PERLND,NIT-STOR1,NITR,NITR,AMSU,R,30,40,0
-1046,PERLND,NIT-STOR1,NITR,NITR,NO3,R,40,50,0
-1047,PERLND,NIT-STOR1,NITR,NITR,PLTN,R,50,60,0
-1048,PERLND,NIT-STOR1,NITR,NITR,RORGN,R,60,70,0
-1049,PERLND,NIT-STOR2,NITR,PARAMETERS,OPNID,C,0,10,0
-1050,PERLND,NIT-STOR2,NITR,PARAMETERS,IAMSU,R,10,20,0
-1051,PERLND,NIT-STOR2,NITR,PARAMETERS,INO3,R,20,30,0
-1052,PERLND,NIT-STOR2,NITR,PARAMETERS,ISLON,R,30,40,0
-1053,PERLND,NIT-STOR2,NITR,PARAMETERS,ISRON,R,40,50,0
-1054,PERLND,NIT-STOR2,NITR,PARAMETERS,AGPLTN,R,50,60,0
-1055,PERLND,NIT-STOR2,NITR,PARAMETERS,LITTRN,R,60,70,0
-1056,PERLND,PHOS-FLAGS,PHOS,FLAGS,OPNID,C,0,10,0
-1057,PERLND,PHOS-FLAGS,PHOS,FLAGS,VPUTFG,I,10,15,0
-1058,PERLND,PHOS-FLAGS,PHOS,FLAGS,FORPFG,I,15,20,0
-1059,PERLND,PHOS-FLAGS,PHOS,FLAGS,ITMAXP,I,20,25,30
-1060,PERLND,PHOS-FLAGS,PHOS,FLAGS,BNUMP,I,25,30,-999
-1061,PERLND,PHOS-FLAGS,PHOS,FLAGS,CNUMP,I,30,35,-999
-1062,PERLND,PHOS-FLAGS,PHOS,FLAGS,PUPTFG,I,35,40,0
-1063,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,OPNID,C,0,10,0
-1064,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG1,I,11,14,0
-1065,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG2,I,14,17,0
-1066,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG3,I,18,21,0
-1067,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG4,I,21,24,0
-1068,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG5,I,26,29,0
-1069,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG6,I,29,32,0
-1070,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG7,I,33,36,0
-1071,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG8,I,36,39,0
-1072,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,OPNID,C,0,10,0
-1073,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,SKPLP,R,10,20,0
-1074,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,UKPLP,R,20,30,0
-1075,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,LKPLP,R,30,40,0
-1076,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,AKPLP,R,40,50,0
-1077,PERLND,MON-PHOSUPT,PHOS,PHOS,OPNID,C,0,10,0
-1078,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPJAN,R,10,15,0
-1079,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPFEB,R,15,20,0
-1080,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPMAR,R,20,25,0
-1081,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPAPR,R,25,30,0
-1082,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPMAY,R,30,35,0
-1083,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPJUN,R,35,40,0
-1084,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPJUL,R,40,45,0
-1085,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPAUG,R,45,50,0
-1086,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPSEP,R,50,55,0
-1087,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPOCT,R,55,60,0
-1088,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPNOV,R,60,65,0
-1089,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPDEC,R,65,70,0
-1090,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,OPNID,C,0,10,0
-1091,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THPLP,R,10,20,1.07
-1092,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKDSP,R,20,30,1.05
-1093,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKADP,R,30,40,1.05
-1094,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKIMP,R,40,50,1.07
-1095,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKMP,R,50,60,1.07
-1096,PERLND,PHOS-FSTPM,PHOS,PHOS,OPNID,C,0,10,1.07
-1097,PERLND,PHOS-FSTPM,PHOS,PHOS,KDSP,R,10,20,0
-1098,PERLND,PHOS-FSTPM,PHOS,PHOS,KADP,R,20,30,0
-1099,PERLND,PHOS-FSTPM,PHOS,PHOS,KIMP,R,30,40,0
-1100,PERLND,PHOS-FSTPM,PHOS,PHOS,KMP,R,40,50,0
-1101,PERLND,PHOS-CMAX,PHOS,PARAMETERS,OPNID,C,0,10,0
-1102,PERLND,PHOS-CMAX,PHOS,PARAMETERS,CMAX,R,10,20,0
-1103,PERLND,PHOS-SVALPM,PHOS,PHOS,OPNID,C,0,10,0
-1104,PERLND,PHOS-SVALPM,PHOS,PHOS,XFIX,R,10,20,0
-1105,PERLND,PHOS-SVALPM,PHOS,PHOS,K1,R,20,30,0
-1106,PERLND,PHOS-SVALPM,PHOS,PHOS,N1,R,30,40,-999
-1107,PERLND,PHOS-YIELD,PHOS,PARAMETERS,OPNID,C,0,10,-999
-1108,PERLND,PHOS-YIELD,PHOS,PARAMETERS,PUPTGT,R,10,20,0
-1109,PERLND,PHOS-YIELD,PHOS,PARAMETERS,PMXRAT,R,20,30,1
-1110,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,OPNID,C,0,10,1
-1111,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUJAN,R,10,15,0
-1112,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUFEB,R,15,20,0
-1113,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUMAR,R,20,25,0
-1114,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUAPR,R,25,30,0
-1115,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUMAY,R,30,35,0
-1116,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUJUN,R,35,40,0
-1117,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUJUL,R,40,45,0
-1118,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUAUG,R,45,50,0
-1119,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUSEP,R,50,55,0
-1120,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUOCT,R,55,60,0
-1121,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUNOV,R,60,65,0
-1122,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUDEC,R,65,70,0
-1123,PERLND,MON-PUPT-FR2,PHOS,PHOS,OPNID,C,0,10,0
-1124,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUJAN,R,10,15,0
-1125,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUFEB,R,15,20,0
-1126,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUMAR,R,20,25,0
-1127,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUAPR,R,25,30,0
-1128,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUMAY,R,30,35,0
-1129,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUJUN,R,35,40,0
-1130,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUJUL,R,40,45,0
-1131,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUAUG,R,45,50,0
-1132,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUSEP,R,50,55,0
-1133,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUOCT,R,55,60,0
-1134,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUNOV,R,60,65,0
-1135,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUDEC,R,65,70,0
-1136,PERLND,PHOS-STOR1,PHOS,PHOS,OPNID,C,0,10,0
-1137,PERLND,PHOS-STOR1,PHOS,PHOS,ORGP,R,10,20,0
-1138,PERLND,PHOS-STOR1,PHOS,PHOS,P4AD,R,20,30,0
-1139,PERLND,PHOS-STOR1,PHOS,PHOS,P4SU,R,30,40,0
-1140,PERLND,PHOS-STOR1,PHOS,PHOS,PLTP,R,40,50,0
-1141,PERLND,PHOS-STOR2,PHOS,PARAMETERS,OPNID,C,0,10,0
-1142,PERLND,PHOS-STOR2,PHOS,PARAMETERS,IP4SU,R,10,20,0
-1143,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,OPNID,C,0,10,0
-1144,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG1,I,11,14,0
-1145,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG2,I,14,17,0
-1146,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG3,I,18,21,0
-1147,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG4,I,21,24,0
-1148,PERLND,TRAC-ID,TRACER,PARAMETERS,OPNID,C,0,10,0
-1149,PERLND,TRAC-ID,TRACER,PARAMETERS,TRACID,C,10,30,0
-1150,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,OPNID,C,0,10,0
-1151,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,STRSU,R,10,20,0
-1152,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,UTRSU,R,20,30,0
-1153,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,ITRSU,R,30,40,0
-1154,PERLND,TRAC-SUBSTOR,TRACER,PARAMETERS,OPNID,C,0,10,0
-1155,PERLND,TRAC-SUBSTOR,TRACER,PARAMETERS,LTRSU,R,10,20,0
-1156,PERLND,TRAC-SUBSTOR,TRACER,PARAMETERS,ATRSU,R,20,30,0
-1157,IMPLND,ACTIVITY,GENERAL,ACTIVITY,OPNID,C,0,10,None
-1158,IMPLND,ACTIVITY,GENERAL,ACTIVITY,ATMPFG,I,10,15,0
-1159,IMPLND,ACTIVITY,GENERAL,ACTIVITY,SNOWFG,I,15,20,0
-1160,IMPLND,ACTIVITY,GENERAL,ACTIVITY,IWATFG,I,20,25,0
-1161,IMPLND,ACTIVITY,GENERAL,ACTIVITY,SLDFG,I,25,30,0
-1162,IMPLND,ACTIVITY,GENERAL,ACTIVITY,IWGFG,I,30,35,0
-1163,IMPLND,ACTIVITY,GENERAL,ACTIVITY,IQALFG,I,35,40,0
-1164,IMPLND,PRINT-INFO,GENERAL,SKIP,OPNID,C,0,10,0
-1165,IMPLND,PRINT-INFO,GENERAL,SKIP,ATMPPR,I,10,15,4
-1166,IMPLND,PRINT-INFO,GENERAL,SKIP,SNOWPR,I,15,20,4
-1167,IMPLND,PRINT-INFO,GENERAL,SKIP,IWATPR,I,20,25,4
-1168,IMPLND,PRINT-INFO,GENERAL,SKIP,SLDPR,I,25,30,4
-1169,IMPLND,PRINT-INFO,GENERAL,SKIP,IWGPR,I,30,35,4
-1170,IMPLND,PRINT-INFO,GENERAL,SKIP,IQALPR,I,35,40,4
-1171,IMPLND,PRINT-INFO,GENERAL,SKIP,PIVL,I,40,45,1
-1172,IMPLND,PRINT-INFO,GENERAL,SKIP,PYREND,I,45,50,9
-1173,IMPLND,BINARY-INFO,GENERAL,SKIP,OPNID,C,0,10,9
-1174,IMPLND,BINARY-INFO,GENERAL,SKIP,ATMPPR,I,10,15,4
-1175,IMPLND,BINARY-INFO,GENERAL,SKIP,SNOWPR,I,15,20,4
-1176,IMPLND,BINARY-INFO,GENERAL,SKIP,IWATPR,I,20,25,4
-1177,IMPLND,BINARY-INFO,GENERAL,SKIP,SLDPR,I,25,30,4
-1178,IMPLND,BINARY-INFO,GENERAL,SKIP,IWGPR,I,30,35,4
-1179,IMPLND,BINARY-INFO,GENERAL,SKIP,IQALPR,I,35,40,4
-1180,IMPLND,BINARY-INFO,GENERAL,SKIP,PIVL,I,40,45,1
-1181,IMPLND,BINARY-INFO,GENERAL,SKIP,PYREND,I,45,50,9
-1182,IMPLND,GEN-INFO,GENERAL,INFO,OPNID,C,0,10,9
-1183,IMPLND,GEN-INFO,GENERAL,INFO,LSID,C,10,30,9
-1184,IMPLND,GEN-INFO,GENERAL,INFO,IUNITS,I,35,40,1
-1185,IMPLND,GEN-INFO,GENERAL,INFO,OUNITS,I,40,45,1
-1186,IMPLND,GEN-INFO,GENERAL,INFO,PUNIT1,I,45,50,0
-1187,IMPLND,GEN-INFO,GENERAL,INFO,PUNIT2,I,50,55,0
-1188,IMPLND,GEN-INFO,GENERAL,INFO,BUNIT1,I,55,60,0
-1189,IMPLND,GEN-INFO,GENERAL,INFO,BUNIT2,I,60,65,0
-1190,IMPLND,ATEMP-DAT,ATEMP,PARAMETERS,OPNID,C,0,10,0
-1191,IMPLND,ATEMP-DAT,ATEMP,PARAMETERS,ELDAT,R,10,20,0
-1192,IMPLND,ATEMP-DAT,ATEMP,PARAMETERS,AIRTMP,R,20,30,60
-1193,IMPLND,ICE-FLAG,SNOW,FLAGS,OPNID,C,0,10,15
-1194,IMPLND,ICE-FLAG,SNOW,FLAGS,ICEFG,I,10,15,0
-1195,IMPLND,SNOW-FLAGS,SNOW,FLAGS,OPNID,C,0,10,0
-1196,IMPLND,SNOW-FLAGS,SNOW,FLAGS,SNOPFG,I,10,15,0
-1197,IMPLND,SNOW-FLAGS,SNOW,FLAGS,VKMFG,I,15,20,0
-1198,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,OPNID,C,0,10,
-1199,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,LAT,R,10,20,40
-1200,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,MELEV,R,20,30,0
-1201,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,SHADE,R,30,40,0
-1202,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,SNOWCF,R,40,50,-999
-1203,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,COVIND,R,50,60,-999
-1204,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,KMELT,R,60,70,0
-1205,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,TBASE,R,70,80,32
-1206,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,OPNID,C,0,10,0
-1207,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,RDCSN,R,10,20,0.15
-1208,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,TSNOW,R,20,30,32
-1209,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,SNOEVP,R,30,40,0.1
-1210,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,CCFACT,R,40,50,1
-1211,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,MWATER,R,50,60,0.03
-1212,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,MGMELT,R,60,70,0.01
-1213,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,OPNID,C,0,10,0.25
-1214,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMJAN,R,10,15,0
-1215,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMFEB,R,15,20,0
-1216,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMMAR,R,20,25,0
-1217,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMAPR,R,25,30,0
-1218,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMMAY,R,30,35,0
-1219,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMJUN,R,35,40,0
-1220,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMJUL,R,40,45,0
-1221,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMAUG,R,45,50,0
-1222,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMSEP,R,50,55,0
-1223,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMOCT,R,55,60,0
-1224,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMNOV,R,60,65,0
-1225,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMDEC,R,65,70,0
-1226,IMPLND,SNOW-INIT1,SNOW,STATES,OPNID,C,0,10,0
-1227,IMPLND,SNOW-INIT1,SNOW,STATES,PKSNOW,R,10,20,0
-1228,IMPLND,SNOW-INIT1,SNOW,STATES,PKICE,R,20,30,0
-1229,IMPLND,SNOW-INIT1,SNOW,STATES,PKWATR,R,30,40,0
-1230,IMPLND,SNOW-INIT1,SNOW,STATES,RDENPF,R,40,50,0.2
-1231,IMPLND,SNOW-INIT1,SNOW,STATES,DULL,R,50,60,400
-1232,IMPLND,SNOW-INIT1,SNOW,STATES,PAKTMP,R,60,70,32
-1233,IMPLND,SNOW-INIT2,SNOW,STATES,OPNID,C,0,10,0
-1234,IMPLND,SNOW-INIT2,SNOW,STATES,COVINX,R,10,20,0.01
-1235,IMPLND,SNOW-INIT2,SNOW,STATES,XLNMLT,R,20,30,0
-1236,IMPLND,SNOW-INIT2,SNOW,STATES,SKYCLR,R,30,40,1
-1237,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,OPNID,C,0,10,1
-1238,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,CSNOFG,I,10,15,0
-1239,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,RTOPFG,I,15,20,0
-1240,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,VRSFG,I,20,25,0
-1241,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,VNNFG,I,25,30,0
-1242,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,RTLIFG,I,30,35,0
-1243,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,OPNID,C,0,10,0
-1244,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,LSUR,R,10,20,-999
-1245,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,SLSUR,R,20,30,-999
-1246,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,NSUR,R,30,40,0.1
-1247,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,RETSC,R,40,50,0
-1248,IMPLND,IWAT-PARM3,IWATER,PARAMETERS,OPNID,C,0,10,0
-1249,IMPLND,IWAT-PARM3,IWATER,PARAMETERS,PETMAX,R,10,20,40
-1250,IMPLND,IWAT-PARM3,IWATER,PARAMETERS,PETMIN,R,20,30,35
-1251,IMPLND,MON-RETN,IWATER,MONTHLYS,OPNID,C,0,10,1.7
-1252,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS1,R,10,15,0
-1253,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS2,R,15,20,0
-1254,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS3,R,20,25,0
-1255,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS4,R,25,30,0
-1256,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS5,R,30,35,0
-1257,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS6,R,35,40,0
-1258,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS7,R,40,45,0
-1259,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS8,R,45,50,0
-1260,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS9,R,50,55,0
-1261,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS10,R,55,60,0
-1262,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS11,R,60,65,0
-1263,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS12,R,65,70,0
-1264,IMPLND,MON-MANNING,IWATER,MONTHLYS,OPNID,C,0,10,0
-1265,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR1,R,10,15,0.1
-1266,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR2,R,15,20,0.1
-1267,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR3,R,20,25,0.1
-1268,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR4,R,25,30,0.1
-1269,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR5,R,30,35,0.1
-1270,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR6,R,35,40,0.1
-1271,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR7,R,40,45,0.1
-1272,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR8,R,45,50,0.1
-1273,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR9,R,50,55,0.1
-1274,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR10,R,55,60,0.1
-1275,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR11,R,60,65,0.1
-1276,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR12,R,65,70,0.1
-1277,IMPLND,IWAT-STATE1,IWATER,STATES,OPNID,C,0,10,0.1
-1278,IMPLND,IWAT-STATE1,IWATER,STATES,RETS,R,10,20,0.001
-1279,IMPLND,IWAT-STATE1,IWATER,STATES,SURS,R,20,30,0.001
-1280,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,OPNID,C,0,10,0.025
-1281,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,VASDFG,I,10,15,0
-1282,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,VRSDFG,I,15,20,0
-1283,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,SDOPFG,I,20,25,0
-1284,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,OPNID,C,0,10,0
-1285,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,KEIM,R,10,20,0
-1286,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,JEIM,R,20,30,-999
-1287,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,ACCSDP,R,30,40,0
-1288,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,REMSDP,R,40,50,0
-1289,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,OPNID,C,0,10,0
-1290,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS1,R,10,15,0
-1291,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,AACS2,R,15,20,0
-1292,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS3,R,20,25,0
-1293,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS4,R,25,30,0
-1294,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS5,R,30,35,0
-1295,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS6,R,35,40,0
-1296,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS7,R,40,45,0
-1297,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS8,R,45,50,0
-1298,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS9,R,50,55,0
-1299,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS10,R,55,60,0
-1300,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS11,R,60,65,0
-1301,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS12,R,65,70,0
-1302,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,OPNID,C,0,10,0
-1303,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS1,R,10,15,0
-1304,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS2,R,15,20,0
-1305,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS3,R,20,25,0
-1306,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS4,R,25,30,0
-1307,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS5,R,30,35,0
-1308,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS6,R,35,40,0
-1309,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS7,R,40,45,0
-1310,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS8,R,45,50,0
-1311,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS9,R,50,55,0
-1312,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS10,R,55,60,0
-1313,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS11,R,60,65,0
-1314,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS12,R,65,70,0
-1315,IMPLND,SLD-STOR,SOLIDS,PARAMETERS,OPNID,C,0,10,0
-1316,IMPLND,SLD-STOR,SOLIDS,PARAMETERS,SLDS,R,10,20,0
-1317,IMPLND,IWT-PARM1,IWTGAS,PARAMETERS,OPNID,C,0,10,0
-1318,IMPLND,IWT-PARM1,IWTGAS,PARAMETERS,WTFVFG,I,10,15,0
-1319,IMPLND,IWT-PARM1,IWTGAS,PARAMETERS,CSNOFG,I,15,20,0
-1320,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,OPNID,C,0,10,0
-1321,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,ELEV,R,10,20,0
-1322,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,AWTF,R,20,30,32
-1323,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,BWTF,R,30,40,1
-1324,IMPLND,LAT-FACTOR,IWTGAS,PARAMETERS,OPNID,C,0,10,1
-1325,IMPLND,LAT-FACTOR,IWTGAS,PARAMETERS,SDLFAC,R,10,20,0
-1326,IMPLND,LAT-FACTOR,IWTGAS,PARAMETERS,SLIFAC,R,20,30,0
-1327,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,OPNID,C,0,10,0
-1328,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF1,R,10,15,32
-1329,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF2,R,15,20,32
-1330,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF3,R,20,25,32
-1331,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF4,R,25,30,32
-1332,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF5,R,30,35,32
-1333,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF6,R,35,40,32
-1334,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF7,R,40,45,32
-1335,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF8,R,45,50,32
-1336,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF9,R,50,55,32
-1337,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF10,R,55,60,32
-1338,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF11,R,60,65,32
-1339,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF12,R,65,70,32
-1340,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,OPNID,C,0,10,0
-1341,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF1,R,10,15,1
-1342,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF2,R,15,20,1
-1343,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF3,R,20,25,1
-1344,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF4,R,25,30,1
-1345,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF5,R,30,35,1
-1346,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF6,R,35,40,1
-1347,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF7,R,40,45,1
-1348,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF8,R,45,50,1
-1349,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF9,R,50,55,1
-1350,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF10,R,55,60,1
-1351,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF11,R,60,65,1
-1352,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF12,R,65,70,1
-1353,IMPLND,IWT-INIT,IWTGAS,STATES,OPNID,C,0,10,1
-1354,IMPLND,IWT-INIT,IWTGAS,STATES,SOTMP,R,10,20,60
-1355,IMPLND,IWT-INIT,IWTGAS,STATES,SODOX,R,20,30,0
-1356,IMPLND,IWT-INIT,IWTGAS,STATES,SOCO2,R,30,40,0
-1357,IMPLND,NQUALS,IQUAL,IQUAL,OPNID,C,0,10,0
-1358,IMPLND,NQUALS,IQUAL,IQUAL,NQUAL,I,10,15,1
-1359,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,OPNID,C,0,11,
-1360,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG1,I,11,14,0
-1361,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG2,I,14,18,0
-1362,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG3,I,18,21,0
-1363,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG4,I,21,25,0
-1364,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG5,I,25,28,0
-1365,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG6,I,28,32,0
-1366,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG7,I,32,35,0
-1367,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG8,I,35,39,0
-1368,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG9,I,39,42,0
-1369,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG10,I,42,46,0
-1370,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG11,I,46,49,0
-1371,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG12,I,49,53,0
-1372,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG13,I,53,56,0
-1373,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG14,I,56,60,0
-1374,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG15,I,60,63,0
-1375,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG16,I,63,67,0
-1376,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG17,I,67,70,0
-1377,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG18,I,70,74,0
-1378,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG19,I,74,77,0
-1379,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG20,I,77,80,0
-1380,IMPLND,QUAL-PROPS,IQUAL,IQUAL,OPNID,C,0,10,0
-1381,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QUALID,C,10,22,0
-1382,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QTYID,C,26,30,0
-1383,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QSDFG,I,30,35,0
-1384,IMPLND,QUAL-PROPS,IQUAL,IQUAL,VPFWFG,I,35,40,0
-1385,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QSOFG,I,40,45,0
-1386,IMPLND,QUAL-PROPS,IQUAL,IQUAL,VQOFG,I,45,50,0
-1387,IMPLND,QUAL-INPUT,IQUAL,IQUAL,OPNID,C,0,10,0
-1388,IMPLND,QUAL-INPUT,IQUAL,IQUAL,SQO,R,10,18,0
-1389,IMPLND,QUAL-INPUT,IQUAL,IQUAL,POTFW,R,18,26,0
-1390,IMPLND,QUAL-INPUT,IQUAL,IQUAL,ACQOP,R,26,34,0
-1391,IMPLND,QUAL-INPUT,IQUAL,IQUAL,SQOLIM,R,34,42,0.000001
-1392,IMPLND,QUAL-INPUT,IQUAL,IQUAL,WSQOP,R,42,50,1.64
-1393,IMPLND,MON-POTFW,IQUAL,IQUAL,OPNID,C,0,10,41.7
-1394,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF1,R,10,15,0
-1395,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF2,R,15,20,0
-1396,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF3,R,20,25,0
-1397,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF4,R,25,30,0
-1398,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF5,R,30,35,0
-1399,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF6,R,35,40,0
-1400,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF7,R,40,45,0
-1401,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF8,R,45,50,0
-1402,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF9,R,50,55,0
-1403,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF10,R,55,60,0
-1404,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF11,R,60,65,0
-1405,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF12,R,65,70,0
-1406,IMPLND,MON-ACCUM,IQUAL,IQUAL,OPNID,C,0,10,0
-1407,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO1,R,10,15,0
-1408,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO2,R,15,20,0
-1409,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO3,R,20,25,0
-1410,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO4,R,25,30,0
-1411,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO5,R,30,35,0
-1412,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO6,R,35,40,0
-1413,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO7,R,40,45,0
-1414,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO8,R,45,50,0
-1415,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO9,R,50,55,0
-1416,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO10,R,55,60,0
-1417,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO11,R,60,65,0
-1418,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO12,R,65,70,0
-1419,IMPLND,MON-SQOLIM,IQUAL,IQUAL,OPNID,C,0,10,0
-1420,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL1,R,10,15,0.000001
-1421,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL2,R,15,20,0.000001
-1422,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL3,R,20,25,0.000001
-1423,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL4,R,25,30,0.000001
-1424,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL5,R,30,35,0.000001
-1425,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL6,R,35,40,0.000001
-1426,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL7,R,40,45,0.000001
-1427,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL8,R,45,50,0.000001
-1428,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL9,R,50,55,0.000001
-1429,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL10,R,55,60,0.000001
-1430,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL11,R,60,65,0.000001
-1431,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL12,R,65,70,0.000001
-1432,RCHRES,ACTIVITY,GENERAL,ACTIVITY,OPNID,C,0,10,None
-1433,RCHRES,ACTIVITY,GENERAL,ACTIVITY,HYDRFG,I,10,15,0
-1434,RCHRES,ACTIVITY,GENERAL,ACTIVITY,ADFG,I,15,20,0
-1435,RCHRES,ACTIVITY,GENERAL,ACTIVITY,CONSFG,I,20,25,0
-1436,RCHRES,ACTIVITY,GENERAL,ACTIVITY,HTFG,I,25,30,0
-1437,RCHRES,ACTIVITY,GENERAL,ACTIVITY,SEDFG,I,30,35,0
-1438,RCHRES,ACTIVITY,GENERAL,ACTIVITY,GQALFG,I,35,40,0
-1439,RCHRES,ACTIVITY,GENERAL,ACTIVITY,OXFG,I,40,45,0
-1440,RCHRES,ACTIVITY,GENERAL,ACTIVITY,NUTFG,I,45,50,0
-1441,RCHRES,ACTIVITY,GENERAL,ACTIVITY,PLKFG,I,50,55,0
-1442,RCHRES,ACTIVITY,GENERAL,ACTIVITY,PHFG,I,55,60,0
-1443,RCHRES,PRINT-INFO,GENERAL,SKIP,OPNID,C,0,10,0
-1444,RCHRES,PRINT-INFO,GENERAL,SKIP,HYDRPR,I,10,15,4
-1445,RCHRES,PRINT-INFO,GENERAL,SKIP,ADCAPR,I,15,20,4
-1446,RCHRES,PRINT-INFO,GENERAL,SKIP,CONSPR,I,20,25,4
-1447,RCHRES,PRINT-INFO,GENERAL,SKIP,HEATPR,I,25,30,4
-1448,RCHRES,PRINT-INFO,GENERAL,SKIP,SEDPR,I,30,35,4
-1449,RCHRES,PRINT-INFO,GENERAL,SKIP,GQLPR,I,35,40,4
-1450,RCHRES,PRINT-INFO,GENERAL,SKIP,OXRXPR,I,40,45,4
-1451,RCHRES,PRINT-INFO,GENERAL,SKIP,NUTRPR,I,45,50,4
-1452,RCHRES,PRINT-INFO,GENERAL,SKIP,PLNKPR,I,50,55,4
-1453,RCHRES,PRINT-INFO,GENERAL,SKIP,PHCBPR,I,55,60,4
-1454,RCHRES,PRINT-INFO,GENERAL,SKIP,PIVLPR,I,60,65,1
-1455,RCHRES,PRINT-INFO,GENERAL,SKIP,PYREND,I,65,70,9
-1456,RCHRES,BINARY-INFO,GENERAL,SKIP,OPNID,C,0,10,9
-1457,RCHRES,BINARY-INFO,GENERAL,SKIP,HYDRPR,I,10,15,4
-1458,RCHRES,BINARY-INFO,GENERAL,SKIP,ADCAPR,I,15,20,4
-1459,RCHRES,BINARY-INFO,GENERAL,SKIP,CONSPR,I,20,25,4
-1460,RCHRES,BINARY-INFO,GENERAL,SKIP,HEATPR,I,25,30,4
-1461,RCHRES,BINARY-INFO,GENERAL,SKIP,SEDPR,I,30,35,4
-1462,RCHRES,BINARY-INFO,GENERAL,SKIP,GQLPR,I,35,40,4
-1463,RCHRES,BINARY-INFO,GENERAL,SKIP,OXRXPR,I,40,45,4
-1464,RCHRES,BINARY-INFO,GENERAL,SKIP,NUTRPR,I,45,50,4
-1465,RCHRES,BINARY-INFO,GENERAL,SKIP,PLNKPR,I,50,55,4
-1466,RCHRES,BINARY-INFO,GENERAL,SKIP,PHCBPR,I,55,60,4
-1467,RCHRES,BINARY-INFO,GENERAL,SKIP,PIVLPR,I,60,65,1
-1468,RCHRES,BINARY-INFO,GENERAL,SKIP,PYREND,I,65,70,9
-1469,RCHRES,GEN-INFO,GENERAL,INFO,OPNID,C,0,10,9
-1470,RCHRES,GEN-INFO,GENERAL,INFO,RCHID,C,10,30,9
-1471,RCHRES,GEN-INFO,GENERAL,INFO,NEXITS,I,30,35,1
-1472,RCHRES,GEN-INFO,GENERAL,INFO,IUNITS,I,40,45,1
-1473,RCHRES,GEN-INFO,GENERAL,INFO,OUNITS,I,45,50,1
-1474,RCHRES,GEN-INFO,GENERAL,INFO,PUNITE,I,50,55,0
-1475,RCHRES,GEN-INFO,GENERAL,INFO,PUNITM,I,55,60,0
-1476,RCHRES,GEN-INFO,GENERAL,INFO,LKFG,I,60,65,0
-1477,RCHRES,GEN-INFO,GENERAL,INFO,BUNITE,I,65,70,0
-1478,RCHRES,GEN-INFO,GENERAL,INFO,BUNITM,I,70,75,0
-1479,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,OPNID,C,0,11,
-1480,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,VCONFG,I,11,14,0
-1481,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,AUX1FG,I,14,17,0
-1482,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,AUX2FG,I,17,20,0
-1483,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,AUX3FG,I,20,25,0
-1484,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF1,I,25,28,0
-1485,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF2,I,28,31,0
-1486,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF3,I,31,34,0
-1487,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF4,I,34,37,0
-1488,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF5,I,37,40,0
-1489,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF1,I,45,48,0
-1490,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF2,I,48,51,0
-1491,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF3,I,51,54,0
-1492,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF4,I,54,57,0
-1493,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF5,I,57,65,0
-1494,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT1,I,65,68,1
-1495,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT2,I,68,71,1
-1496,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT3,I,71,74,1
-1497,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT4,I,74,77,1
-1498,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT5,I,77,80,1
-1499,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,OPNID,C,0,10,1
-1500,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,FTBW,R,10,15,0
-1501,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,FTBUCI,R,15,20,-999
-1502,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,LEN,R,20,30,-999
-1503,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,DELTH,R,30,40,0
-1504,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,STCOR,R,40,50,0
-1505,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,KS,R,50,60,0
-1506,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,DB50,R,60,70,0.01
-1507,RCHRES,MON-CONVF,HYDR,MONTHLYS,OPNID,C,0,10,0.25
-1508,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLJAN,R,10,15,0
-1509,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLFEB,R,15,20,0
-1510,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLMAR,R,20,25,0
-1511,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLAPR,R,25,30,0
-1512,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLMAY,R,30,35,0
-1513,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLJUN,R,35,40,0
-1514,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLJUL,R,40,45,0
-1515,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLAUG,R,45,50,0
-1516,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLSEP,R,50,55,0
-1517,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLOCT,R,55,60,0
-1518,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLNOV,R,60,65,0
-1519,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLDEC,R,65,70,0
-1520,RCHRES,HYDR-IRRIG,HYDR,PARAMETERS,OPNID,C,0,10,0
-1521,RCHRES,HYDR-IRRIG,HYDR,PARAMETERS,IREXIT,R,10,20,0
-1522,RCHRES,HYDR-IRRIG,HYDR,PARAMETERS,IRMINV,R,20,30,0
-1523,RCHRES,HYDR-INIT,HYDR,STATES,OPNID,C,0,10,
-1524,RCHRES,HYDR-INIT,HYDR,STATES,VOL,R,10,21,0
-1525,RCHRES,HYDR-INIT,HYDR,STATES,ICAT,R,21,25,-1
-1526,RCHRES,HYDR-INIT,HYDR,STATES,COLIN1,R,25,30,4
-1527,RCHRES,HYDR-INIT,HYDR,STATES,COLIN2,R,30,35,4
-1528,RCHRES,HYDR-INIT,HYDR,STATES,COLIN3,R,35,40,4
-1529,RCHRES,HYDR-INIT,HYDR,STATES,COLIN4,R,40,45,4
-1530,RCHRES,HYDR-INIT,HYDR,STATES,COLIN5,R,45,50,4
-1531,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG1,R,55,60,0
-1532,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG2,R,60,65,0
-1533,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG3,R,65,70,0
-1534,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG4,R,70,75,0
-1535,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG5,R,75,80,0
-1536,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,OPNID,C,0,10,0
-1537,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CPREC,C,11,15,0
-1538,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CEVAP,C,16,20,0
-1539,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL1,C,21,25,0
-1540,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL2,C,26,30,0
-1541,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL3,C,31,35,0
-1542,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL4,C,36,40,0
-1543,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL5,C,41,45,0
-1544,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,NOCGT,I,45,50,0
-1545,RCHRES,HYDR-CINIT,HYDR,STATES,OPNID,C,0,10,0
-1546,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG1,C,10,14,0
-1547,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC1,R,14,20,0
-1548,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG2,C,20,24,0
-1549,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC2,R,24,30,0
-1550,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG3,C,30,34,0
-1551,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC3,R,34,40,0
-1552,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG4,C,40,44,0
-1553,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC4,R,44,50,0
-1554,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG5,C,50,54,0
-1555,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC5,R,54,60,0
-1556,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG6,C,60,64,0
-1557,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC6,R,64,70,0
-1558,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG7,C,70,74,0
-1559,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC7,R,74,80,0
-1560,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,OPNID,C,0,10,0
-1561,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG1,C,10,14,0
-1562,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC1,R,14,20,0
-1563,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG2,C,20,24,0
-1564,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC2,R,24,30,0
-1565,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG3,C,30,34,0
-1566,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC3,R,34,40,0
-1567,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG4,C,40,44,0
-1568,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC4,R,44,50,0
-1569,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG5,C,50,54,0
-1570,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC5,R,54,60,0
-1571,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG6,C,60,64,0
-1572,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC6,R,64,70,0
-1573,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG7,C,70,74,0
-1574,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC7,R,74,80,0
-1575,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,OPNID,C,0,10,0
-1576,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG1,C,10,14,0
-1577,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI1,R,14,17,0
-1578,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP1,R,17,23,0
-1579,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG2,C,23,27,0
-1580,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI2,R,27,30,0
-1581,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP2,R,30,36,0
-1582,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG3,C,36,40,0
-1583,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI3,R,40,43,0
-1584,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP3,R,43,49,0
-1585,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG4,C,49,53,0
-1586,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI4,R,53,56,0
-1587,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP4,R,56,62,0
-1588,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG5,C,62,66,0
-1589,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI5,R,66,69,0
-1590,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP5,R,69,75,0
-1591,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,OPNID,C,0,10,0
-1592,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG1,C,10,14,0
-1593,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT1,R,14,16,0
-1594,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI1,R,16,19,0
-1595,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL1,R,19,25,0
-1596,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG2,C,25,29,0
-1597,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT2,R,29,31,0
-1598,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI2,R,31,34,0
-1599,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL2,R,34,40,0
-1600,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG3,C,40,44,0
-1601,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT3,R,44,46,0
-1602,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI3,R,46,49,0
-1603,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL3,R,49,55,0
-1604,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG4,C,55,59,0
-1605,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT4,R,59,61,0
-1606,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI4,R,61,64,0
-1607,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL,R,64,70,0
-1608,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,OPNID,C,0,10,0
-1609,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CTAG1,C,10,14,0
-1610,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CEXIT1,R,14,16,0
-1611,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CPRI1,C,16,28,0
-1612,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CDEM1,R,28,34,0
-1613,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CTAG2,C,34,38,0
-1614,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CEXIT2,R,38,40,0
-1615,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CPRI2,C,40,52,0
-1616,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CDEM2,R,52,58,0
-1617,RCHRES,ADCALC-DATA,ADCALC,PARAMETERS,OPNID,C,0,10,0
-1618,RCHRES,ADCALC-DATA,ADCALC,PARAMETERS,CRRAT,R,10,20,1.5
-1619,RCHRES,ADCALC-DATA,ADCALC,PARAMETERS,VOL,R,20,30,0
-1620,RCHRES,NCONS,CONS,CONS,OPNID,C,0,10,0
-1621,RCHRES,NCONS,CONS,CONS,NCONS,I,10,15,1
-1622,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,OPNID,C,0,11,
-1623,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG1,I,11,14,0
-1624,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG2,I,14,18,0
-1625,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG3,I,18,21,0
-1626,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG4,I,21,25,0
-1627,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG5,I,25,28,0
-1628,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG6,I,28,32,0
-1629,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG7,I,32,35,0
-1630,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG8,I,35,39,0
-1631,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG9,I,39,42,0
-1632,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG10,I,42,46,0
-1633,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG11,I,46,49,0
-1634,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG12,I,49,53,0
-1635,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG14,I,56,60,0
-1636,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG15,I,60,63,0
-1637,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG16,I,63,67,0
-1638,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG17,I,67,70,0
-1639,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG18,I,70,74,0
-1640,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG19,I,74,77,0
-1641,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG20,I,77,80,0
-1642,RCHRES,CONS-DATA,CONS,CONS,OPNID,C,0,10,0
-1643,RCHRES,CONS-DATA,CONS,CONS,CONID,C,10,30,0
-1644,RCHRES,CONS-DATA,CONS,CONS,CON,R,30,40,0
-1645,RCHRES,CONS-DATA,CONS,CONS,CONCID,C,42,50,0
-1646,RCHRES,CONS-DATA,CONS,CONS,CONV,R,50,60,-999
-1647,RCHRES,CONS-DATA,CONS,CONS,QTYID,C,62,70,-999
-1648,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,OPNID,C,0,10,-999
-1649,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,BEDFLG,I,10,15,0
-1650,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,TGFLG,I,15,20,2
-1651,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,TSTOP,I,20,25,55
-1652,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,OPNID,C,0,10,55
-1653,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,ELEV,R,10,20,0
-1654,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,ELDAT,R,20,30,0
-1655,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,CFSAEX,R,30,40,1
-1656,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,KATRAD,R,40,50,9.37
-1657,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,KCOND,R,50,60,6.12
-1658,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,KEVAP,R,60,70,2.24
-1659,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,OPNID,C,0,10,2.24
-1660,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,MUDDEP,R,10,20,0.33
-1661,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,TGRND,R,20,30,59
-1662,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,KMUD,R,30,40,50
-1663,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,KGRND,R,40,50,1.4
-1664,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,OPNID,C,0,10,1.4
-1665,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND1,R,10,15,59
-1666,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND2,R,15,20,59
-1667,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND3,R,20,25,59
-1668,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND4,R,25,30,59
-1669,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND5,R,30,35,59
-1670,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND6,R,35,40,59
-1671,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND7,R,40,45,59
-1672,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND8,R,45,50,59
-1673,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND9,R,50,55,59
-1674,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND10,R,55,60,59
-1675,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND11,R,60,65,59
-1676,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND12,R,65,70,59
-1677,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,OPNID,C,0,10,15
-1678,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH1,R,10,20,0
-1679,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH2,R,20,30,0
-1680,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH3,R,30,40,0
-1681,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH4,R,40,50,0
-1682,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH5,R,50,60,0
-1683,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH6,R,60,70,0
-1684,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH7,R,70,80,0
-1685,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,OPNID,C,0,10,0
-1686,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT1,R,10,20,0
-1687,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT2,R,20,30,0
-1688,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT3,R,30,40,0
-1689,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT4,R,40,50,0
-1690,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT5,R,50,60,0
-1691,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT6,R,60,70,0
-1692,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT7,R,70,80,0
-1693,RCHRES,HEAT-INIT,HTRCH,STATES,OPNID,C,0,10,0
-1694,RCHRES,HEAT-INIT,HTRCH,STATES,TW,R,10,20,60
-1695,RCHRES,HEAT-INIT,HTRCH,STATES,AIRTMP,R,20,30,60
-1696,RCHRES,SANDFG,SEDTRN,FLAGS,OPNID,C,0,10,
-1697,RCHRES,SANDFG,SEDTRN,FLAGS,SANDFG,I,10,17,3
-1698,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,OPNID,C,0,10,3
-1699,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,BEDWID,R,10,20,-999
-1700,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,BEDWRN,R,20,30,100
-1701,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,POR,R,30,40,0.5
-1702,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,OPNID,C,0,10,0.5
-1703,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,LEN,R,10,20,-999
-1704,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,DELTH,R,20,30,0
-1705,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,DB50,R,30,40,0.01
-1706,RCHRES,SAND-PM,SEDTRN,PARAMETERS,OPNID,C,0,10,0.25
-1707,RCHRES,SAND-PM,SEDTRN,PARAMETERS,D,R,10,20,-999
-1708,RCHRES,SAND-PM,SEDTRN,PARAMETERS,W,R,20,30,-999
-1709,RCHRES,SAND-PM,SEDTRN,PARAMETERS,RHO,R,30,40,2.65
-1710,RCHRES,SAND-PM,SEDTRN,PARAMETERS,KSAND,R,40,50,0
-1711,RCHRES,SAND-PM,SEDTRN,PARAMETERS,EXPSND,R,50,60,0
-1712,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,OPNID,C,0,10,0
-1713,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,D,R,10,20,0
-1714,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,W,R,20,30,0
-1715,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,RHO,R,30,40,2.65
-1716,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,TAUCD,R,40,50,1.00E+10
-1717,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,TAUCS,R,50,60,1.00E+10
-1718,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,M,R,60,70,0
-1719,RCHRES,SSED-INIT,SEDTRN,STATES,OPNID,C,0,10,0
-1720,RCHRES,SSED-INIT,SEDTRN,STATES,SSED1,R,10,20,0
-1721,RCHRES,SSED-INIT,SEDTRN,STATES,SSED2,R,20,30,0
-1722,RCHRES,SSED-INIT,SEDTRN,STATES,SSED3,R,30,40,0
-1723,RCHRES,BED-INIT,SEDTRN,STATES,OPNID,C,0,10,0
-1724,RCHRES,BED-INIT,SEDTRN,STATES,BEDDEP,R,10,20,0
-1725,RCHRES,BED-INIT,SEDTRN,STATES,SANDFR,R,20,30,1
-1726,RCHRES,BED-INIT,SEDTRN,STATES,SILTFR,R,30,40,0
-1727,RCHRES,BED-INIT,SEDTRN,STATES,CLAYFR,R,40,50,0
-1728,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,OPNID,C,0,10,0
-1729,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,NGQUAL,I,10,15,1
-1730,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,TEMPFG,I,15,20,2
-1731,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,PHFLAG,I,20,25,2
-1732,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,ROXFG,I,25,30,2
-1733,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,CLDFG,I,30,35,2
-1734,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,SDFG,I,35,40,2
-1735,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,PHYTFG,I,40,45,2
-1736,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,LAT,I,45,50,0
-1737,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,OPNID,C,0,10,0
-1738,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG1,I,11,14,0
-1739,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG2,I,14,17,0
-1740,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG3,I,18,21,0
-1741,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG4,I,21,24,0
-1742,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG5,I,25,28,0
-1743,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG6,I,28,31,0
-1744,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG7,I,32,35,0
-1745,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG8,I,35,38,0
-1746,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG9,I,39,42,0
-1747,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG10,I,42,45,0
-1748,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG11,I,46,49,0
-1749,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG12,I,49,52,0
-1750,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG13,I,53,56,0
-1751,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG14,I,56,59,0
-1752,RCHRES,GQ-QALDATA,GQUAL,GQUAL,OPNID,C,0,10,0
-1753,RCHRES,GQ-QALDATA,GQUAL,GQUAL,GQID,C,10,30,0
-1754,RCHRES,GQ-QALDATA,GQUAL,GQUAL,DQAL,R,30,40,0
-1755,RCHRES,GQ-QALDATA,GQUAL,GQUAL,CONCID,C,46,50,0
-1756,RCHRES,GQ-QALDATA,GQUAL,GQUAL,CONV,R,50,60,-999
-1757,RCHRES,GQ-QALDATA,GQUAL,GQUAL,QTYID,C,62,70,-999
-1758,RCHRES,GQ-QALFG,GQUAL,GQUAL,OPNID,C,0,10,-999
-1759,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG1,I,10,15,0
-1760,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG2,I,15,20,0
-1761,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG3,I,20,25,0
-1762,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG4,I,25,30,0
-1763,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG5,I,30,35,0
-1764,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG6,I,35,40,0
-1765,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG7,I,40,45,0
-1766,RCHRES,GQ-FLG2,GQUAL,GQUAL,OPNID,C,0,10,0
-1767,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM21,I,10,15,0
-1768,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM22,I,15,20,0
-1769,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM23,I,20,25,0
-1770,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM24,I,25,30,0
-1771,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM25,I,30,35,0
-1772,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM26,I,35,40,0
-1773,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM27,I,40,45,2
-1774,RCHRES,GQ-HYDPM,GQUAL,GQUAL,OPNID,C,0,10,2
-1775,RCHRES,GQ-HYDPM,GQUAL,GQUAL,KA,R,10,20,-999
-1776,RCHRES,GQ-HYDPM,GQUAL,GQUAL,KB,R,20,30,-999
-1777,RCHRES,GQ-HYDPM,GQUAL,GQUAL,KN,R,30,40,-999
-1778,RCHRES,GQ-HYDPM,GQUAL,GQUAL,THHYD,R,40,50,1
-1779,RCHRES,GQ-ROXPM,GQUAL,GQUAL,OPNID,C,0,10,1
-1780,RCHRES,GQ-ROXPM,GQUAL,GQUAL,KOX,R,10,20,-999
-1781,RCHRES,GQ-ROXPM,GQUAL,GQUAL,THOX,R,20,30,1
-1782,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,OPNID,C,0,10,
-1783,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP1,R,10,20,0
-1784,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP2,R,20,30,0
-1785,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP3,R,30,40,0
-1786,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP4,R,40,50,0
-1787,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP5,R,50,60,0
-1788,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP6,R,60,70,0
-1789,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP7,R,70,80,0
-1783,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP8,R,10,20,0
-1784,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP9,R,20,30,0
-1785,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP10,R,30,40,0
-1786,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP11,R,40,50,0
-1787,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP12,R,50,60,0
-1788,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP13,R,60,70,0
-1789,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP14,R,70,80,0
-1783,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP15,R,10,20,0
-1784,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP16,R,20,30,0
-1785,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP17,R,30,40,0
-1786,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP18,R,40,50,0
-1787,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP19,R,50,60,0
-1788,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP20,R,60,70,0
-1790,RCHRES,GQ-CFGAS,GQUAL,GQUAL,OPNID,C,0,10,0
-1791,RCHRES,GQ-CFGAS,GQUAL,GQUAL,CFGAS,R,10,20,-999
-1792,RCHRES,GQ-BIOPM,GQUAL,GQUAL,OPNID,C,0,10,-999
-1793,RCHRES,GQ-BIOPM,GQUAL,GQUAL,BIOCON,R,10,20,-999
-1794,RCHRES,GQ-BIOPM,GQUAL,GQUAL,THBIO,R,20,30,1.07
-1795,RCHRES,GQ-BIOPM,GQUAL,GQUAL,BIO,R,30,40,-999
-1796,RCHRES,MON-BIO,GQUAL,GQUAL,OPNID,C,0,10,-999
-1797,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM1,R,10,15,-999
-1798,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM2,R,15,20,-999
-1799,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM3,R,20,25,-999
-1800,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM4,R,25,30,-999
-1801,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM5,R,30,35,-999
-1802,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM6,R,35,40,-999
-1803,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM7,R,40,45,-999
-1804,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM8,R,45,50,-999
-1805,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM9,R,50,55,-999
-1806,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM10,R,55,60,-999
-1807,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM11,R,60,65,-999
-1808,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM12,R,65,70,-999
-1809,RCHRES,GQ-GENDECAY,GQUAL,GQUAL,OPNID,C,0,10,-999
-1810,RCHRES,GQ-GENDECAY,GQUAL,GQUAL,FSTDEC,R,10,20,-999
-1811,RCHRES,GQ-GENDECAY,GQUAL,GQUAL,THFST,R,20,30,1.07
-1812,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,OPNID,C,0,10,1.07
-1813,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP1,R,10,20,0
-1814,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP2,R,20,30,1.07
-1815,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP3,R,30,40,0
-1816,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP4,R,40,50,1.07
-1817,RCHRES,GQ-KD,GQUAL,GQUAL,OPNID,C,0,10,1.07
-1818,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM11,R,10,20,-999
-1819,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM21,R,20,30,-999
-1820,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM31,R,30,40,-999
-1821,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM41,R,40,50,-999
-1822,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM51,R,50,60,-999
-1823,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM61,R,60,70,-999
-1824,RCHRES,GQ-ADRATE,GQUAL,GQUAL,OPNID,C,0,10,-999
-1825,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM12,R,10,20,-999
-1826,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM22,R,20,30,-999
-1827,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM32,R,30,40,-999
-1828,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM42,R,40,50,-999
-1829,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM52,R,50,60,-999
-1830,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM62,R,60,70,-999
-1831,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,OPNID,C,0,10,-999
-1832,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM13,R,10,20,1.07
-1833,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM23,R,20,30,1.07
-1834,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM33,R,30,40,1.07
-1835,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM43,R,40,50,1.07
-1836,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM53,R,50,60,1.07
-1837,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM63,R,60,70,1.07
-1838,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,OPNID,C,0,10,1.07
-1839,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL1,R,10,20,0
-1840,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL2,R,20,30,0
-1841,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL3,R,30,40,0
-1842,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL4,R,40,50,0
-1843,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL5,R,50,60,0
-1844,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL6,R,60,70,0
-1845,RCHRES,GQ-VALUES,GQUAL,GQUAL,OPNID,C,0,10,0
-1846,RCHRES,GQ-VALUES,GQUAL,GQUAL,TWAT,R,10,20,60
-1847,RCHRES,GQ-VALUES,GQUAL,GQUAL,PHVAL,R,20,30,7
-1848,RCHRES,GQ-VALUES,GQUAL,GQUAL,ROC,R,30,40,0
-1849,RCHRES,GQ-VALUES,GQUAL,GQUAL,CLD,R,40,50,0
-1850,RCHRES,GQ-VALUES,GQUAL,GQUAL,SDCNC,R,50,60,0
-1851,RCHRES,GQ-VALUES,GQUAL,GQUAL,PHY,R,60,70,0
-1852,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,OPNID,C,0,10,0
-1853,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP1,R,10,15,60
-1854,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP2,R,15,20,60
-1855,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP3,R,20,25,60
-1856,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP4,R,25,30,60
-1857,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP5,R,30,35,60
-1858,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP6,R,35,40,60
-1859,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP7,R,40,45,60
-1860,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP8,R,45,50,60
-1861,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP9,R,50,55,60
-1862,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP10,R,55,60,60
-1863,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP11,R,60,65,60
-1864,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP12,R,65,70,60
-1865,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,OPNID,C,0,10,15.5
-1866,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM1,R,10,15,0
-1867,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM2,R,15,20,0
-1868,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM3,R,20,25,0
-1869,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM4,R,25,30,0
-1870,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM5,R,30,35,0
-1871,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM6,R,35,40,0
-1872,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM7,R,40,45,0
-1873,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM8,R,45,50,0
-1874,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM9,R,50,55,0
-1875,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM10,R,55,60,0
-1876,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM11,R,60,65,0
-1877,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM12,R,65,70,0
-1878,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,OPNID,C,0,10,
-1879,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH1,R,10,20,-999
-1880,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH2,R,20,30,-999
-1881,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH3,R,30,40,-999
-1882,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH4,R,40,50,-999
-1883,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH5,R,50,60,-999
-1884,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH6,R,60,70,-999
-1885,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH7,R,70,80,-999
-1879,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH8,R,10,20,-999
-1880,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH9,R,20,30,-999
-1881,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH10,R,30,40,-999
-1882,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH11,R,40,50,-999
-1883,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH12,R,50,60,-999
-1884,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH13,R,60,70,-999
-1885,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH14,R,70,80,-999
-1879,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH15,R,10,20,-999
-1880,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH16,R,20,30,-999
-1881,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH17,R,30,40,-999
-1882,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH418,R,40,50,-999
-1886,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,OPNID,C,0,10,
-1887,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM1,R,10,20,0
-1888,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM2,R,20,30,0
-1889,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM3,R,30,40,0
-1890,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM4,R,40,50,0
-1891,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM5,R,50,60,0
-1892,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM6,R,60,70,0
-1893,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM7,R,70,80,0
-1887,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM8,R,10,20,0
-1888,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM9,R,20,30,0
-1889,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM10,R,30,40,0
-1890,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM11,R,40,50,0
-1891,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM12,R,50,60,0
-1892,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM13,R,60,70,0
-1893,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM14,R,70,80,0
-1887,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM15,R,10,20,0
-1888,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM16,R,20,30,0
-1889,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM17,R,30,40,0
-1890,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM18,R,40,50,0
-1894,RCHRES,GQ-DELTA,GQUAL,EXTENDED,OPNID,C,0,10,
-1895,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL1,R,10,20,0
-1896,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL2,R,20,30,0
-1897,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL3,R,30,40,0
-1898,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL4,R,40,50,0
-1899,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL5,R,50,60,0
-1900,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL6,R,60,70,0
-1901,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL7,R,70,80,0
-1895,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL8,R,10,20,0
-1896,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL9,R,20,30,0
-1897,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL10,R,30,40,0
-1898,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL11,R,40,50,0
-1899,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL12,R,50,60,0
-1900,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL13,R,60,70,0
-1901,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL14,R,70,80,0
-1895,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL15,R,10,20,0
-1896,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL16,R,20,30,0
-1897,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL17,R,30,40,0
-1898,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL18,R,40,50,0
-1902,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,OPNID,C,0,10,
-1903,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD1,R,10,20,0
-1904,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD2,R,20,30,0
-1905,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD3,R,30,40,0
-1906,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD4,R,40,50,0
-1907,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD5,R,50,60,0
-1908,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD6,R,60,70,0
-1909,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD7,R,70,80,0
-1903,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD8,R,10,20,0
-1904,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD9,R,20,30,0
-1905,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD10,R,30,40,0
-1906,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD11,R,40,50,0
-1907,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD12,R,50,60,0
-1908,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD13,R,60,70,0
-1909,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD14,R,70,80,0
-1903,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD15,R,10,20,0
-1904,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD16,R,20,30,0
-1905,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD17,R,30,40,0
-1906,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD18,R,40,50,0
-1910,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,OPNID,C,0,10,0
-1911,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM1,R,10,15,0
-1912,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM2,R,15,20,0
-1913,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM3,R,20,25,0
-1914,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM4,R,25,30,0
-1915,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM5,R,30,35,0
-1916,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM6,R,35,40,0
-1917,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM7,R,40,45,0
-1918,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM8,R,45,50,0
-1919,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM9,R,50,55,0
-1920,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM10,R,55,60,0
-1921,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM11,R,60,65,0
-1922,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM12,R,65,70,0
-1923,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,OPNID,C,0,10,0
-1924,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN1,R,10,15,0
-1925,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN2,R,15,20,0
-1926,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN3,R,20,25,0
-1927,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN4,R,25,30,0
-1928,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN5,R,30,35,0
-1929,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN6,R,35,40,0
-1930,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN7,R,40,45,0
-1931,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN8,R,45,50,0
-1932,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN9,R,50,55,0
-1933,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN10,R,55,60,0
-1934,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN11,R,60,65,0
-1935,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN12,R,65,70,0
-1936,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,OPNID,C,0,10,0
-1937,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM1,R,10,15,0
-1938,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM2,R,15,20,0
-1939,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM3,R,20,25,0
-1940,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM4,R,25,30,0
-1941,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM5,R,30,35,0
-1942,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM6,R,35,40,0
-1943,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM7,R,40,45,0
-1944,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM8,R,45,50,0
-1945,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM9,R,50,55,0
-1946,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM10,R,55,60,0
-1947,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM11,R,60,65,0
-1948,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM12,R,65,70,0
-1949,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,OPNID,C,0,10,
-1950,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,ZERO,R,10,18,0
-1951,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C2F1,R,20,28,0
-1952,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C3F1,R,30,38,0
-1953,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C4F1,R,40,48,0
-1954,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C5F1,R,50,58,0
-1955,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C6F1,R,60,68,0
-1956,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C7F1,R,70,78,0
-1957,RCHRES,BENTH-FLAG,RQUAL,FLAGS,OPNID,C,0,10,0
-1958,RCHRES,BENTH-FLAG,RQUAL,FLAGS,BENRFG,I,10,15,0
-1959,RCHRES,SCOUR-PARMS,RQUAL,PARAMETERS,OPNID,C,0,10,0
-1960,RCHRES,SCOUR-PARMS,RQUAL,PARAMETERS,SCRVEL,R,10,20,10
-1961,RCHRES,SCOUR-PARMS,RQUAL,PARAMETERS,SCRMUL,R,20,30,2
-1962,RCHRES,OX-FLAGS,OXRX,FLAGS,OPNID,C,0,10,2
-1963,RCHRES,OX-FLAGS,OXRX,FLAGS,REAMFG,I,10,15,2
-1964,RCHRES,OX-GENPARM,OXRX,PARAMETERS,OPNID,C,0,10,2
-1965,RCHRES,OX-GENPARM,OXRX,PARAMETERS,KBOD20,R,10,20,-999
-1966,RCHRES,OX-GENPARM,OXRX,PARAMETERS,TCBOD,R,20,30,1.075
-1967,RCHRES,OX-GENPARM,OXRX,PARAMETERS,KODSET,R,30,40,0
-1968,RCHRES,OX-GENPARM,OXRX,PARAMETERS,SUPSAT,R,40,50,1.15
-1969,RCHRES,ELEV,OXRX,PARAMETERS,OPNID,C,0,10,1.15
-1970,RCHRES,ELEV,OXRX,PARAMETERS,ELEV,R,10,20,0
-1971,RCHRES,OX-BENPARM,OXRX,PARAMETERS,OPNID,C,0,10,0
-1972,RCHRES,OX-BENPARM,OXRX,PARAMETERS,BENOD,R,10,20,0
-1973,RCHRES,OX-BENPARM,OXRX,PARAMETERS,TCBEN,R,20,30,1.074
-1974,RCHRES,OX-BENPARM,OXRX,PARAMETERS,EXPOD,R,30,40,1.22
-1975,RCHRES,OX-BENPARM,OXRX,PARAMETERS,BRBOD1,R,40,50,72
-1976,RCHRES,OX-BENPARM,OXRX,PARAMETERS,BRBOD2,R,50,60,100
-1977,RCHRES,OX-BENPARM,OXRX,PARAMETERS,EXPREL,R,60,70,2.82
-1978,RCHRES,OX-CFOREA,OXRX,PARAMETERS,OPNID,C,0,10,2.82
-1979,RCHRES,OX-CFOREA,OXRX,PARAMETERS,CFOREA,R,10,20,1
-1980,RCHRES,OX-TSIVOGLOU,OXRX,PARAMETERS,OPNID,C,0,10,1
-1981,RCHRES,OX-TSIVOGLOU,OXRX,PARAMETERS,REAKT,R,10,20,0.08
-1982,RCHRES,OX-TSIVOGLOU,OXRX,PARAMETERS,TCGINV,R,20,30,1.047
-1983,RCHRES,OX-LEN-DELTH,OXRX,PARAMETERS,OPNID,C,0,10,1.047
-1984,RCHRES,OX-LEN-DELTH,OXRX,PARAMETERS,LEN,R,10,20,-999
-1985,RCHRES,OX-LEN-DELTH,OXRX,PARAMETERS,DELTH,R,20,30,-999
-1986,RCHRES,OX-TCGINV,OXRX,PARAMETERS,OPNID,C,0,10,-999
-1987,RCHRES,OX-TCGINV,OXRX,PARAMETERS,TCGINV,R,10,20,1.047
-1988,RCHRES,OX-REAPARM,OXRX,PARAMETERS,OPNID,C,0,10,1.047
-1989,RCHRES,OX-REAPARM,OXRX,PARAMETERS,TCGINV,R,10,20,1.047
-1990,RCHRES,OX-REAPARM,OXRX,PARAMETERS,REAK,R,20,30,-999
-1991,RCHRES,OX-REAPARM,OXRX,PARAMETERS,EXPRED,R,30,40,0
-1992,RCHRES,OX-REAPARM,OXRX,PARAMETERS,EXPREV,R,40,50,0
-1993,RCHRES,OX-INIT,OXRX,STATES,OPNID,C,0,10,0
-1994,RCHRES,OX-INIT,OXRX,STATES,DOX,R,10,20,0
-1995,RCHRES,OX-INIT,OXRX,STATES,BOD,R,20,30,0
-1996,RCHRES,OX-INIT,OXRX,STATES,SATDO,R,30,40,10
-1997,RCHRES,NUT-FLAGS,NUTRX,FLAGS,OPNID,C,0,10,10
-1998,RCHRES,NUT-FLAGS,NUTRX,FLAGS,NH3FG,I,10,15,0
-1999,RCHRES,NUT-FLAGS,NUTRX,FLAGS,NO2FG,I,15,20,0
-2000,RCHRES,NUT-FLAGS,NUTRX,FLAGS,PO4FG,I,20,25,0
-2001,RCHRES,NUT-FLAGS,NUTRX,FLAGS,AMVFG,I,25,30,0
-2002,RCHRES,NUT-FLAGS,NUTRX,FLAGS,DENFG,I,30,35,0
-2003,RCHRES,NUT-FLAGS,NUTRX,FLAGS,ADNHFG,I,35,40,0
-2004,RCHRES,NUT-FLAGS,NUTRX,FLAGS,ADPOFG,I,40,45,0
-2005,RCHRES,NUT-FLAGS,NUTRX,FLAGS,PHFLAG,I,45,50,2
-2006,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,OPNID,C,0,10,2
-2007,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG1,I,11,14,0
-2008,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG2,I,14,17,0
-2009,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG3,I,18,21,0
-2010,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG4,I,21,24,0
-2011,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG5,I,25,28,0
-2012,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG6,I,28,31,0
-2013,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,OPNID,C,0,10,0
-2014,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,CVBO,R,10,20,1.98
-2015,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,CVBPC,R,20,30,106
-2016,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,CVBPN,R,30,40,16
-2017,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,BPCNTC,R,40,50,49
-2018,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,OPNID,C,0,10,49
-2019,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRNIT1,R,10,20,0
-2020,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRNIT2,R,20,30,0
-2021,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRPO41,R,30,40,0
-2022,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRPO42,R,40,50,0
-2023,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,ANAER,R,50,60,0.005
-2024,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,OPNID,C,0,10,0.005
-2025,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,KTAM20,R,10,20,-999
-2026,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,KNO220,R,20,30,-999
-2027,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,TCNIT,R,30,40,1.07
-2028,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,KNO320,R,40,50,-999
-2029,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,TCDEN,R,50,60,1.07
-2030,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,DENOXT,R,60,70,2
-2031,RCHRES,NUT-NH3VOLAT,NUTRX,PARAMETERS,OPNID,C,0,10,2
-2032,RCHRES,NUT-NH3VOLAT,NUTRX,PARAMETERS,EXPNVG,R,10,20,0.5
-2033,RCHRES,NUT-NH3VOLAT,NUTRX,PARAMETERS,EXPNVL,R,20,30,0.6667
-2034,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,OPNID,C,0,10,0.6667
-2035,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BNH41,R,10,20,0
-2036,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BNH42,R,20,30,0
-2037,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BNH43,R,30,40,0
-2038,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BPO41,R,40,50,0
-2039,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BPO42,R,50,60,0
-2040,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BPO43,R,60,70,0
-2041,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,OPNID,C,0,10,0
-2042,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADNHPM1,R,10,20,1.00E-10
-2043,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADNHPM2,R,20,30,1.00E-10
-2044,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADNHPM3,R,30,40,1.00E-10
-2045,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADPOPM1,R,40,50,1.00E-10
-2046,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADPOPM2,R,50,60,1.00E-10
-2047,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADPOPM3,R,60,70,1.00E-10
-2048,RCHRES,NUT-DINIT,NUTRX,STATES,OPNID,C,0,10,1.00E-10
-2049,RCHRES,NUT-DINIT,NUTRX,STATES,NO3,R,10,20,0
-2050,RCHRES,NUT-DINIT,NUTRX,STATES,TAM,R,20,30,0
-2051,RCHRES,NUT-DINIT,NUTRX,STATES,NO2,R,30,40,0
-2052,RCHRES,NUT-DINIT,NUTRX,STATES,PO4,R,40,50,0
-2053,RCHRES,NUT-DINIT,NUTRX,STATES,PHVAL,R,50,60,7
-2054,RCHRES,NUT-ADSINIT,NUTRX,STATES,OPNID,C,0,10,7
-2055,RCHRES,NUT-ADSINIT,NUTRX,STATES,SNH41,R,10,20,0
-2056,RCHRES,NUT-ADSINIT,NUTRX,STATES,SNH42,R,20,30,0
-2057,RCHRES,NUT-ADSINIT,NUTRX,STATES,SNH43,R,30,40,0
-2058,RCHRES,NUT-ADSINIT,NUTRX,STATES,SPO41,R,40,50,0
-2059,RCHRES,NUT-ADSINIT,NUTRX,STATES,SPO42,R,50,60,0
-2060,RCHRES,NUT-ADSINIT,NUTRX,STATES,SPO43,R,60,70,0
-2061,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,OPNID,C,0,10,0
-2062,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA1,R,10,15,7
-2063,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA2,R,15,20,7
-2064,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA3,R,20,25,7
-2065,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA4,R,25,30,7
-2066,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA5,R,30,35,7
-2067,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA6,R,35,40,7
-2068,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA7,R,40,45,7
-2069,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA8,R,45,50,7
-2070,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA9,R,50,55,7
-2071,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA10,R,55,60,7
-2072,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA11,R,60,65,7
-2073,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA12,R,65,70,7
-2074,RCHRES,PLNK-FLAGS,PLANK,FLAGS,OPNID,C,0,10,7
-2075,RCHRES,PLNK-FLAGS,PLANK,FLAGS,PHYFG,I,10,15,0
-2076,RCHRES,PLNK-FLAGS,PLANK,FLAGS,ZOOFG,I,15,20,0
-2077,RCHRES,PLNK-FLAGS,PLANK,FLAGS,BALFG,I,20,25,0
-2078,RCHRES,PLNK-FLAGS,PLANK,FLAGS,SDLTFG,I,25,30,0
-2079,RCHRES,PLNK-FLAGS,PLANK,FLAGS,AMRFG,I,30,35,0
-2080,RCHRES,PLNK-FLAGS,PLANK,FLAGS,DECFG,I,35,40,0
-2081,RCHRES,PLNK-FLAGS,PLANK,FLAGS,NSFG,I,40,45,0
-2082,RCHRES,PLNK-FLAGS,PLANK,FLAGS,ZFOOD,I,45,50,2
-2083,RCHRES,PLNK-FLAGS,PLANK,FLAGS,BNPFG,I,50,55,0
-2084,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,OPNID,C,0,10,0
-2085,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG1,I,11,14,0
-2086,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG2,I,14,17,0
-2087,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG3,I,18,21,0
-2088,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG4,I,21,24,0
-2089,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG5,I,25,28,0
-2090,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG6,I,28,31,0
-2091,RCHRES,SURF-EXPOSED,PLANK,PARAMETERS,OPNID,C,0,10,0
-2092,RCHRES,SURF-EXPOSED,PLANK,PARAMETERS,CFSAEX,R,10,20,1
-2093,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,OPNID,C,0,10,
-2094,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,RATCLP,R,10,20,0.6
-2095,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,NONREF,R,20,30,0.5
-2096,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,LITSED,R,30,40,0
-2097,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,ALNPR,R,40,50,1
-2098,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,EXTB,R,50,60,-999
-2099,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,MALGR,R,60,70,0.3
-2100,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,PARADF,R,70,80,1
-2101,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,OPNID,C,0,10,
-2102,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMLT,R,10,20,0.033
-2103,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMN,R,20,30,0.045
-2104,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMNP,R,30,40,0.0284
-2105,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMP,R,40,50,0.015
-2106,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,TALGRH,R,50,60,95
-2107,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,TALGRL,R,60,70,43
-2108,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,TALGRM,R,70,80,77
-2109,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,OPNID,C,0,10,25
-2110,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,ALR20,R,10,20,0.004
-2111,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,ALDH,R,20,30,0.01
-2112,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,ALDL,R,30,40,0.001
-2113,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,OXALD,R,40,50,0.03
-2114,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,NALDH,R,50,60,0
-2115,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,PALDH,R,60,70,0
-2116,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,OPNID,C,0,10,0
-2117,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,SEED,R,10,20,0
-2118,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,MXSTAY,R,20,30,0
-2119,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,OREF,R,30,40,0.0001
-2120,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,CLALDH,R,40,50,50
-2121,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,PHYSET,R,50,60,0
-2122,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,REFSET,R,60,70,0
-2123,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,OPNID,C,0,10,0
-2124,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,MZOEAT,R,10,20,0.055
-2125,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,ZFIL20,R,20,30,-999
-2126,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,ZRES20,R,30,40,0.0015
-2127,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,ZD,R,40,50,0.0001
-2128,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,OXZD,R,50,60,0.03
-2129,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,OPNID,C,0,10,0.03
-2130,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,TCZFIL,R,10,20,1.17
-2131,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,TCZRES,R,20,30,1.07
-2132,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,ZEXDEL,R,30,40,0.7
-2133,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,ZOMASS,R,40,50,0.0003
-2134,RCHRES,BENAL-PARM,PLANK,PARAMETERS,OPNID,C,0,10,
-2135,RCHRES,BENAL-PARM,PLANK,PARAMETERS,MBAL,R,10,20,600
-2136,RCHRES,BENAL-PARM,PLANK,PARAMETERS,CFBALR,R,20,30,1
-2137,RCHRES,BENAL-PARM,PLANK,PARAMETERS,CFBALG,R,30,40,1
-2138,RCHRES,BENAL-PARM,PLANK,PARAMETERS,MINBAL,R,40,50,0.0001
-2139,RCHRES,BENAL-PARM,PLANK,PARAMETERS,CAMPR,R,50,60,0.001
-2140,RCHRES,BENAL-PARM,PLANK,PARAMETERS,FRAVL,R,60,70,0
-2141,RCHRES,BENAL-PARM,PLANK,PARAMETERS,NMAXFX,R,70,80,10
-2142,RCHRES,PLNK-INIT,PLANK,STATES,OPNID,C,0,10,10
-2143,RCHRES,PLNK-INIT,PLANK,STATES,PHYTO,R,10,20,9.60E-07
-2144,RCHRES,PLNK-INIT,PLANK,STATES,ZOO,R,20,30,0.03
-2145,RCHRES,PLNK-INIT,PLANK,STATES,BENAL,R,30,40,1.00E-08
-2146,RCHRES,PLNK-INIT,PLANK,STATES,ORN,R,40,50,0
-2147,RCHRES,PLNK-INIT,PLANK,STATES,ORP,R,50,60,0
-2148,RCHRES,PLNK-INIT,PLANK,STATES,ORC,R,60,70,0
-2149,RCHRES,PH-PARM1,PHCARB,PARAMETERS,OPNID,C,0,10,0
-2150,RCHRES,PH-PARM1,PHCARB,PARAMETERS,PHCNT,I,10,15,25
-2151,RCHRES,PH-PARM1,PHCARB,PARAMETERS,ALKCON,I,15,20,1
-2152,RCHRES,PH-PARM2,PHCARB,PARAMETERS,OPNID,C,0,10,1
-2153,RCHRES,PH-PARM2,PHCARB,PARAMETERS,CFCINV,R,10,20,0.913
-2154,RCHRES,PH-PARM2,PHCARB,PARAMETERS,BRCO21,R,20,30,62
-2155,RCHRES,PH-PARM2,PHCARB,PARAMETERS,BRCO22,R,30,40,62
-2156,RCHRES,PH-INIT,PHCARB,STATES,OPNID,C,0,10,62
-2157,RCHRES,PH-INIT,PHCARB,STATES,TIC,R,10,20,0
-2158,RCHRES,PH-INIT,PHCARB,STATES,CO2,R,20,30,0
-2159,RCHRES,PH-INIT,PHCARB,STATES,PH,R,30,40,7
-2160,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,OPNID,C,0,10,
-2161,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG1,I,10,15,3
-2162,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG2,I,15,20,4
-2163,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG3,I,20,25,1
-2164,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG4,I,25,30,0
-2165,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG5,I,30,35,0
-2166,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG6,I,35,40,0
-2167,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG7,I,40,45,0
-2168,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG8,I,45,50,0
-2169,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG9,I,50,55,0
-2170,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG10,I,55,60,0
-2171,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG11,I,60,65,0
-2172,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG12,I,65,70,0
-2173,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG13,I,70,75,0
-2174,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG14,I,75,80,0
-2175,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,OPNID,C,0,10,
-2176,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM1,R,10,20,1
-2177,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM2,R,20,30,6.50E-32
-2178,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM3,R,30,40,-1
-2179,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM4,R,40,50,0.95
-2180,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM5,R,50,60,2.5
-2181,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM6,R,60,70,0
-2182,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM7,R,70,80,0
-2183,RCHRES,ACID-INIT,ACIDPH,STATES,OPNID,C,0,10,
-2184,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC1,R,10,20,0
-2185,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC2,R,20,30,0
-2186,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC3,R,30,40,0
-2187,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC4,R,40,50,0
-2188,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC5,R,50,60,0
-2189,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC6,R,60,70,0
-2190,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC7,R,70,80,0
-2191,RCHRES,BENAL-FLAGS,PLANK,FLAGS,OPNID,C,0,10,0
-2192,RCHRES,BENAL-FLAGS,PLANK,FLAGS,NUMBAL,I,10,15,0
-2193,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BINVFG,I,15,20,1
-2194,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG1,I,20,25,0
-2195,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG2,I,25,30,0
-2196,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG3,I,30,35,0
-2197,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG4,I,35,40,0
-2198,RCHRES,BENAL-GROW,PLANK,PARAMETERS,OPNID,C,0,10,
-2199,RCHRES,BENAL-GROW,PLANK,PARAMETERS,MBALGR,R,10,20,0.3
-2200,RCHRES,BENAL-GROW,PLANK,PARAMETERS,TCBALG,R,20,30,1.07
-2201,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMNB,R,30,40,0.045
-2202,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMPB,R,40,50,0.015
-2203,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMD1,R,50,60,0.1
-2204,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMD2,R,60,70,100
-2205,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CSLIT,R,70,80,250
-2206,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,OPNID,C,0,10,250
-2207,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,BALR20,R,10,20,0.004
-2208,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,TCBALR,R,20,30,1.07
-2209,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,CSLOF1,R,30,40,0.0007
-2210,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,CSLOF2,R,40,50,0.0007
-2211,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,GRORES,R,50,60,0.075
-2212,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,OPNID,C,0,10,0.075
-2213,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,CREMVL,R,10,20,0.05
-2214,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,CMMBI,R,20,30,0.05
-2215,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,BINV,R,30,40,0
-2216,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,TCGRAZ,R,40,50,1
-2217,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,OPNID,C,0,10,1
-2218,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CTRBQ1,R,10,20,0
-2219,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CTRBQ2,R,20,30,1
-2220,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CKTRB1,R,30,40,0
-2221,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CKTRB2,R,40,50,1
-2222,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,OPNID,C,0,10,1
-2223,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,FRRIF,R,10,20,1
-2224,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,CMMV,R,20,30,1
-2225,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,RIFCQ1,R,30,40,0
-2226,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,RIFCQ2,R,40,50,0
-2227,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,RIFCQ3,R,50,60,0
-2228,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,OPNID,C,0,10,0
-2229,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF1,R,10,18,1
-2230,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF2,R,18,26,1
-2231,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF3,R,26,34,1
-2232,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF4,R,34,42,1
-2233,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF1,R,42,50,1
-2234,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF2,R,50,58,1
-2235,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF3,R,58,66,1
-2236,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF4,R,66,74,1
-2237,RCHRES,BENAL-INIT,PLANK,STATES,OPNID,C,0,10,1
-2238,RCHRES,BENAL-INIT,PLANK,STATES,BENAL1,R,10,20,0
-2239,RCHRES,BENAL-INIT,PLANK,STATES,BENAL2,R,20,30,0
-2240,RCHRES,BENAL-INIT,PLANK,STATES,BENAL3,R,30,40,0
-2241,RCHRES,BENAL-INIT,PLANK,STATES,BENAL4,R,10,20,0
-2242,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,OPNID,C,0,10,0
-2243,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,NMINGR,R,10,20,0.001
-2244,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,PMINGR,R,20,30,0.001
-2245,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,CMINGR,R,30,40,0.001
-2246,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,LMINGR,R,40,50,0.001
-2247,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,NMINC,R,50,60,0.001
-2248,RCHRES,MON-BINV,PLANK,MONTHLYS,OPNID,C,0,10,0.001
-2249,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM1,R,10,15,0
-2250,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM2,R,15,20,0
-2251,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM3,R,20,25,0
-2252,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM4,R,25,30,0
-2253,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM5,R,30,35,0
-2254,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM6,R,35,40,0
-2255,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM7,R,40,45,0
-2256,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM8,R,45,50,0
-2257,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM9,R,50,55,0
-2258,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM10,R,55,60,0
-2259,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM11,R,60,65,0
-2260,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM12,R,65,70,0
-2261,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,OPNID,C,0,10,0
-2262,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,SHADFG,R,10,20,0
-2263,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,TOPFL,R,20,30,41
-2264,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,VEGFL,R,30,40,42
-2265,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,NSSP,R,40,50,0
-2266,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,LATDEG,R,50,60,40
-2267,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,LONDEG,R,60,70,-90
-2268,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,LONSTD,R,70,80,-90
-2269,FTABLES,FTABLE,FTABLES,FTABLES,Depth,R,0,10,0
-2270,FTABLES,FTABLE,FTABLES,FTABLES,Area,R,10,20,0
-2271,FTABLES,FTABLE,FTABLES,FTABLES,Volume,R,20,30,0
-2272,FTABLES,FTABLE,FTABLES,FTABLES,Disch1,R,30,40,0
-2273,FTABLES,FTABLE,FTABLES,FTABLES,Disch2,R,40,50,0
-2274,FTABLES,FTABLE,FTABLES,FTABLES,Disch3,R,50,60,0
-2275,FTABLES,FTABLE,FTABLES,FTABLES,Disch4,R,60,70,0
-2276,FTABLES,FTABLE,FTABLES,FTABLES,Disch5,R,70,80,0
-2277,GLOBAL,START,GLOBAL,START,SYR,C,14,18,1900
-2278,GLOBAL,START,GLOBAL,START,SMO,C,19,21,1
-2279,GLOBAL,START,GLOBAL,START,SDA,C,22,24,1
-2280,GLOBAL,START,GLOBAL,START,SHR,C,25,27,0
-2281,GLOBAL,START,GLOBAL,START,SMI,C,28,30,0
-2282,GLOBAL,START,GLOBAL,START,EYR,C,39,43,1900
-2283,GLOBAL,START,GLOBAL,START,EMO,C,44,46,12
-2284,GLOBAL,START,GLOBAL,START,EDA,C,47,49,31
-2285,GLOBAL,START,GLOBAL,START,EHR,C,50,52,24
-2286,GLOBAL,START,GLOBAL,START,EMI,C,53,55,0
-2287,EXT SOURCES,na,GLOBAL,EXT SOURCES,SVOL,C,0,6,*
-2288,EXT SOURCES,na,GLOBAL,EXT SOURCES,SVOLNO,C,6,11,na
-2289,EXT SOURCES,na,GLOBAL,EXT SOURCES,SMEMN,C,11,17,na
-2290,EXT SOURCES,na,GLOBAL,EXT SOURCES,SMEMSB,C,17,20,31
-2291,EXT SOURCES,na,GLOBAL,EXT SOURCES,SSYST,C,20,24,ENGL
-2292,EXT SOURCES,na,GLOBAL,EXT SOURCES,SGAPST,C,24,28,na
-2293,EXT SOURCES,na,GLOBAL,EXT SOURCES,MFACTOR,R,28,38,1
-2294,EXT SOURCES,na,GLOBAL,EXT SOURCES,TRAN,C,38,43,na
-2295,EXT SOURCES,na,GLOBAL,EXT SOURCES,TVOL,C,43,50,na
-2296,EXT SOURCES,na,GLOBAL,EXT SOURCES,TOPFST,C,50,54,na
-2297,EXT SOURCES,na,GLOBAL,EXT SOURCES,TOPLST,C,54,58,na
-2298,EXT SOURCES,na,GLOBAL,EXT SOURCES,TGRPN,C,58,65,na
-2299,EXT SOURCES,na,GLOBAL,EXT SOURCES,TMEMN,C,65,71,na
-2300,EXT SOURCES,na,GLOBAL,EXT SOURCES,TMEMSB,C,71,75,na
-2301,NETWORK,na,GLOBAL,NETWORK,SVOL,C,0,6,na
-2302,NETWORK,na,GLOBAL,NETWORK,SVOLNO,C,6,11,na
-2303,NETWORK,na,GLOBAL,NETWORK,SGRPN,C,11,18,na
-2304,NETWORK,na,GLOBAL,NETWORK,SMEMN,C,18,24,na
-2305,NETWORK,na,GLOBAL,NETWORK,SMEMSB1,C,24,26,na
-2305,NETWORK,na,GLOBAL,NETWORK,SMEMSB2,C,27,28,na
-2306,NETWORK,na,GLOBAL,NETWORK,MFACTOR,R,28,38,1
-2307,NETWORK,na,GLOBAL,NETWORK,TRAN,C,38,43,na
-2308,NETWORK,na,GLOBAL,NETWORK,TVOL,C,43,50,na
-2309,NETWORK,na,GLOBAL,NETWORK,TOPFST,C,50,54,na
-2310,NETWORK,na,GLOBAL,NETWORK,TOPLST,C,54,58,na
-2311,NETWORK,na,GLOBAL,NETWORK,TGRPN,C,58,65,na
-2312,NETWORK,na,GLOBAL,NETWORK,TMEMN,C,65,71,na
-2313,NETWORK,na,GLOBAL,NETWORK,TMEMSB1,C,72,73,na
-2313,NETWORK,na,GLOBAL,NETWORK,TMEMSB2,C,74,75,na
-2314,SCHEMATIC,na,GLOBAL,SCHEMATIC,SVOL,C,0,6,na
-2315,SCHEMATIC,na,GLOBAL,SCHEMATIC,SVOLNO,C,6,10,na
-2316,SCHEMATIC,na,GLOBAL,SCHEMATIC,AFACTR,R,28,38,1
-2317,SCHEMATIC,na,GLOBAL,SCHEMATIC,TVOL,C,43,49,na
-2318,SCHEMATIC,na,GLOBAL,SCHEMATIC,TVOLNO,C,49,53,na
-2319,SCHEMATIC,na,GLOBAL,SCHEMATIC,MLNO,C,56,60,na
-2320,SCHEMATIC,na,GLOBAL,SCHEMATIC,TMEMSB1,C,72,73,na
-2320,SCHEMATIC,na,GLOBAL,SCHEMATIC,TMEMSB2,C,74,75,na
-2321,MASS-LINK,na,GLOBAL,MASS-LINK,SVOL,C,0,11,na
-2322,MASS-LINK,na,GLOBAL,MASS-LINK,SGRPN,C,11,18,na
-2323,MASS-LINK,na,GLOBAL,MASS-LINK,SMEMN,C,18,24,na
-2324,MASS-LINK,na,GLOBAL,MASS-LINK,SMEMSB1,C,25,26,na
-2324,MASS-LINK,na,GLOBAL,MASS-LINK,SMEMSB2,C,27,28,na
-2325,MASS-LINK,na,GLOBAL,MASS-LINK,MFACTOR,R,28,43,1
-2326,MASS-LINK,na,GLOBAL,MASS-LINK,TVOL,C,43,58,na
-2327,MASS-LINK,na,GLOBAL,MASS-LINK,TGRPN,C,58,65,na
-2328,MASS-LINK,na,GLOBAL,MASS-LINK,TMEMN,C,65,71,na
-2329,MASS-LINK,na,GLOBAL,MASS-LINK,TMEMSB1,C,72,73,na
-2329,MASS-LINK,na,GLOBAL,MASS-LINK,TMEMSB2,C,74,75,na
-2330,GENER,OPCODE,GENER,OPCODES,OPNID,C,0,10,0
-2331,GENER,OPCODE,GENER,OPCODES,OPCODE,I,11,16,0
-2332,GENER,PARM,GENER,INFO,OPNID,C,0,10,0
-2332,GENER,PARM,GENER,INFO,K,R,11,21,0.0E0
-2333,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,OPTYP,C,0,8,na
-2334,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,RANGE1,C,8,11,na
-2335,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,RANGE2,C,11,15,na
-2336,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,DC,C,15,17,na
-2337,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,DS,C,17,18,na
-2338,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,YR,C,20,24,na
-2339,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,MO,C,25,27,na
-2340,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,DA,C,28,30,na
-2341,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,HR,C,31,33,na
-2342,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,MN,C,34,36,na
-2343,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,D,C,36,38,2
-2344,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,T,I,38,40,3
-2345,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,VARI,C,42,48,na
-2346,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,S1,C,48,51,na
-2347,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,S2,C,51,54,na
-2348,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,S3,C,54,55,na
-2349,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,AC,C,57,60,na
-2350,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,VALUE,R,60,70,0
-2351,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,TC,C,71,73,na
-2352,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,TS,C,74,77,na
-2353,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,NUM,C,77,80,na
+112,PERLND,PWAT-PARM1,PWATER,PARAMETERS,NCANPY,I,76,80,0
+113,PERLND,PWAT-PARM2,PWATER,PARAMETERS,OPNID,C,0,10,None
+114,PERLND,PWAT-PARM2,PWATER,PARAMETERS,FOREST,R,10,20,0
+115,PERLND,PWAT-PARM2,PWATER,PARAMETERS,LZSN,R,20,30,-999
+116,PERLND,PWAT-PARM2,PWATER,PARAMETERS,INFILT,R,30,40,-999
+117,PERLND,PWAT-PARM2,PWATER,PARAMETERS,LSUR,R,40,50,-999
+118,PERLND,PWAT-PARM2,PWATER,PARAMETERS,SLSUR,R,50,60,-999
+119,PERLND,PWAT-PARM2,PWATER,PARAMETERS,KVARY,R,60,70,0
+120,PERLND,PWAT-PARM2,PWATER,PARAMETERS,AGWRC,R,70,80,-999
+121,PERLND,PWAT-PARM3,PWATER,PARAMETERS,OPNID,C,0,10,None
+122,PERLND,PWAT-PARM3,PWATER,PARAMETERS,PETMAX,R,10,20,40
+123,PERLND,PWAT-PARM3,PWATER,PARAMETERS,PETMIN,R,20,30,35
+124,PERLND,PWAT-PARM3,PWATER,PARAMETERS,INFEXP,R,30,40,2
+125,PERLND,PWAT-PARM3,PWATER,PARAMETERS,INFILD,R,40,50,2
+126,PERLND,PWAT-PARM3,PWATER,PARAMETERS,DEEPFR,R,50,60,0
+127,PERLND,PWAT-PARM3,PWATER,PARAMETERS,BASETP,R,60,70,0
+128,PERLND,PWAT-PARM3,PWATER,PARAMETERS,AGWETP,R,70,80,0
+129,PERLND,PWAT-PARM4,PWATER,PARAMETERS,OPNID,C,0,10,None
+130,PERLND,PWAT-PARM4,PWATER,PARAMETERS,CEPSC,R,10,20,0
+131,PERLND,PWAT-PARM4,PWATER,PARAMETERS,UZSN,R,20,30,-999
+132,PERLND,PWAT-PARM4,PWATER,PARAMETERS,NSUR,R,30,40,0.1
+133,PERLND,PWAT-PARM4,PWATER,PARAMETERS,INTFW,R,40,50,-999
+134,PERLND,PWAT-PARM4,PWATER,PARAMETERS,IRC,R,50,60,-999
+135,PERLND,PWAT-PARM4,PWATER,PARAMETERS,LZETP,R,60,70,0
+136,PERLND,PWAT-PARM5,PWATER,PARAMETERS,OPNID,C,0,10,None
+137,PERLND,PWAT-PARM5,PWATER,PARAMETERS,FZG,R,10,20,1
+138,PERLND,PWAT-PARM5,PWATER,PARAMETERS,FZGL,R,20,30,0.1
+139,PERLND,PWAT-PARM6,PWATER,PARAMETERS,OPNID,C,0,10,None
+140,PERLND,PWAT-PARM6,PWATER,PARAMETERS,MELEV,R,10,20,0
+141,PERLND,PWAT-PARM6,PWATER,PARAMETERS,BELV,R,20,30,-999
+142,PERLND,PWAT-PARM6,PWATER,PARAMETERS,GWDATM,R,30,40,-999
+143,PERLND,PWAT-PARM6,PWATER,PARAMETERS,PCW,R,40,50,-999
+144,PERLND,PWAT-PARM6,PWATER,PARAMETERS,PGW,R,50,60,-999
+145,PERLND,PWAT-PARM6,PWATER,PARAMETERS,UPGW,R,60,70,-999
+146,PERLND,PWAT-PARM7,PWATER,PARAMETERS,OPNID,C,0,10,None
+147,PERLND,PWAT-PARM7,PWATER,PARAMETERS,STABNO,R,10,20,0
+148,PERLND,PWAT-PARM7,PWATER,PARAMETERS,SRRC,R,20,30,-999
+149,PERLND,PWAT-PARM7,PWATER,PARAMETERS,SREXP,R,30,40,1
+150,PERLND,PWAT-PARM7,PWATER,PARAMETERS,IFWSC,R,40,50,-999
+151,PERLND,PWAT-PARM7,PWATER,PARAMETERS,DELTA,R,50,60,0.001
+152,PERLND,PWAT-PARM7,PWATER,PARAMETERS,UELFAC,R,60,70,4
+153,PERLND,PWAT-PARM7,PWATER,PARAMETERS,LELFAC,R,70,80,2.5
+154,PERLND,PWAT-STATE1,PWATER,STATES,OPNID,C,0,10,None
+155,PERLND,PWAT-STATE1,PWATER,STATES,CEPS,R,10,20,0
+156,PERLND,PWAT-STATE1,PWATER,STATES,SURS,R,20,30,0
+157,PERLND,PWAT-STATE1,PWATER,STATES,UZS,R,30,40,0.001
+158,PERLND,PWAT-STATE1,PWATER,STATES,IFWS,R,40,50,0
+159,PERLND,PWAT-STATE1,PWATER,STATES,LZS,R,50,60,0.001
+160,PERLND,PWAT-STATE1,PWATER,STATES,AGWS,R,60,70,0
+161,PERLND,PWAT-STATE1,PWATER,STATES,GWVS,R,70,80,0
+162,PERLND,MON-INTERCEP,PWATER,MONTHLYS,OPNID,C,0,10,None
+163,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTJAN,R,10,15,0
+164,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTFEB,R,15,20,0
+165,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTMAR,R,20,25,0
+166,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTAPR,R,25,30,0
+167,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTMAY,R,30,35,0
+168,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTJUN,R,35,40,0
+169,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTJUL,R,40,45,0
+170,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTAUG,R,45,50,0
+171,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTSEP,R,50,55,0
+172,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTOCT,R,55,60,0
+173,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTNOV,R,60,65,0
+174,PERLND,MON-INTERCEP,PWATER,MONTHLYS,INTDEC,R,65,70,0
+175,PERLND,MON-UZSN,PWATER,MONTHLYS,OPNID,C,0,10,None
+176,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSJAN,R,10,15,-999
+177,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSFEB,R,15,20,-999
+178,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSMAR,R,20,25,-999
+179,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSAPR,R,25,30,-999
+180,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSMAY,R,30,35,-999
+181,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSJUN,R,35,40,-999
+182,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSJUL,R,40,45,-999
+183,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSAUG,R,45,50,-999
+184,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSSEP,R,50,55,-999
+185,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSOCT,R,55,60,-999
+186,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSNOV,R,60,65,-999
+187,PERLND,MON-UZSN,PWATER,MONTHLYS,UZSDEC,R,65,70,-999
+188,PERLND,MON-MANNING,PWATER,MONTHLYS,OPNID,C,0,10,None
+189,PERLND,MON-MANNING,PWATER,MONTHLYS,MANJAN,R,10,15,0.1
+190,PERLND,MON-MANNING,PWATER,MONTHLYS,MANFEB,R,15,20,0.1
+191,PERLND,MON-MANNING,PWATER,MONTHLYS,MANMAR,R,20,25,0.1
+192,PERLND,MON-MANNING,PWATER,MONTHLYS,MANAPR,R,25,30,0.1
+193,PERLND,MON-MANNING,PWATER,MONTHLYS,MANMAY,R,30,35,0.1
+194,PERLND,MON-MANNING,PWATER,MONTHLYS,MANJUN,R,35,40,0.1
+195,PERLND,MON-MANNING,PWATER,MONTHLYS,MANJUL,R,40,45,0.1
+196,PERLND,MON-MANNING,PWATER,MONTHLYS,MANAUG,R,45,50,0.1
+197,PERLND,MON-MANNING,PWATER,MONTHLYS,MANSEP,R,50,55,0.1
+198,PERLND,MON-MANNING,PWATER,MONTHLYS,MANOCT,R,55,60,0.1
+199,PERLND,MON-MANNING,PWATER,MONTHLYS,MANNOV,R,60,65,0.1
+200,PERLND,MON-MANNING,PWATER,MONTHLYS,MANDEC,R,65,70,0.1
+201,PERLND,MON-INTERFLW,PWATER,MONTHLYS,OPNID,C,0,10,None
+202,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLJAN,R,10,15,-999
+203,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLFEB,R,15,20,-999
+204,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLMAR,R,20,25,-999
+205,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLAPR,R,25,30,-999
+206,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLMAY,R,30,35,-999
+207,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLJUN,R,35,40,-999
+208,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLJUL,R,40,45,-999
+209,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLAUG,R,45,50,-999
+210,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLSEP,R,50,55,-999
+211,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLOCT,R,55,60,-999
+212,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLNOV,R,60,65,-999
+213,PERLND,MON-INTERFLW,PWATER,MONTHLYS,IFLDEC,R,65,70,-999
+214,PERLND,MON-IRC,PWATER,MONTHLYS,OPNID,C,0,10,None
+215,PERLND,MON-IRC,PWATER,MONTHLYS,IRCJAN,R,10,15,-999
+216,PERLND,MON-IRC,PWATER,MONTHLYS,IRCFEB,R,15,20,-999
+217,PERLND,MON-IRC,PWATER,MONTHLYS,IRCMAR,R,20,25,-999
+218,PERLND,MON-IRC,PWATER,MONTHLYS,IRCAPR,R,25,30,-999
+219,PERLND,MON-IRC,PWATER,MONTHLYS,IRCMAY,R,30,35,-999
+220,PERLND,MON-IRC,PWATER,MONTHLYS,IRCJUN,R,35,40,-999
+221,PERLND,MON-IRC,PWATER,MONTHLYS,IRCJUL,R,40,45,-999
+222,PERLND,MON-IRC,PWATER,MONTHLYS,IRCAUG,R,45,50,-999
+223,PERLND,MON-IRC,PWATER,MONTHLYS,IRCSEP,R,50,55,-999
+224,PERLND,MON-IRC,PWATER,MONTHLYS,IRCOCT,R,55,60,-999
+225,PERLND,MON-IRC,PWATER,MONTHLYS,IRCNOV,R,60,65,-999
+226,PERLND,MON-IRC,PWATER,MONTHLYS,IRCDEC,R,65,70,-999
+227,PERLND,MON-LZETPARM,PWATER,MONTHLYS,OPNID,C,0,10,None
+228,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEJAN,R,10,15,0
+229,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEFEB,R,15,20,0
+230,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEMAR,R,20,25,0
+231,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEAPR,R,25,30,0
+232,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEMAY,R,30,35,0
+233,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEJUN,R,35,40,0
+234,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEJUL,R,40,45,0
+235,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEAUG,R,45,50,0
+236,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZESEP,R,50,55,0
+237,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEOCT,R,55,60,0
+238,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZENOV,R,60,65,0
+239,PERLND,MON-LZETPARM,PWATER,MONTHLYS,LZEDEC,R,65,70,0
+240,PERLND,SOIL-DATA,PWATER,PEST,OPNID,C,0,10,None
+241,PERLND,SOIL-DATA,PWATER,PEST,DSURF,R,10,18,-999
+242,PERLND,SOIL-DATA,PWATER,PEST,DUPPER,R,18,26,-999
+243,PERLND,SOIL-DATA,PWATER,PEST,DLOWER,R,26,34,-999
+244,PERLND,SOIL-DATA,PWATER,PEST,DGRNDW,R,34,42,-999
+245,PERLND,SOIL-DATA,PWATER,PEST,BDSURF,R,42,50,103
+246,PERLND,SOIL-DATA,PWATER,PEST,BDUPPR,R,50,58,103
+247,PERLND,SOIL-DATA,PWATER,PEST,BDLOWR,R,58,66,103
+248,PERLND,SOIL-DATA,PWATER,PEST,BDGRDW,R,66,74,103
+249,PERLND,SOIL-DATA2,PWATER,PARAMETERS,OPNID,C,0,10,None
+250,PERLND,SOIL-DATA2,PWATER,PARAMETERS,SWILTP,R,10,20,0
+251,PERLND,SOIL-DATA2,PWATER,PARAMETERS,UWILTP,R,20,30,0
+252,PERLND,SOIL-DATA2,PWATER,PARAMETERS,LWILTP,R,30,40,0
+253,PERLND,SOIL-DATA2,PWATER,PARAMETERS,AWILTP,R,40,50,0
+254,PERLND,SOIL-DATA3,PWATER,PARAMETERS,OPNID,C,0,10,0
+255,PERLND,SOIL-DATA3,PWATER,PARAMETERS,SFDCAP,R,10,20,0
+256,PERLND,SOIL-DATA3,PWATER,PARAMETERS,UFDCAP,R,20,30,0
+257,PERLND,SOIL-DATA3,PWATER,PARAMETERS,LFDCAP,R,30,40,0
+258,PERLND,SOIL-DATA3,PWATER,PARAMETERS,AFDCAP,R,40,50,0
+259,PERLND,CROP-DATES,PWATER,PARAMETERS,OPNID,C,0,10,None
+260,PERLND,CROP-DATES,PWATER,PARAMETERS,NCRP,I,10,15,1
+261,PERLND,CROP-DATES,PWATER,PARAMETERS,PMON1,I,19,22,1
+262,PERLND,CROP-DATES,PWATER,PARAMETERS,PDAY1,I,22,25,1
+263,PERLND,CROP-DATES,PWATER,PARAMETERS,HMON1,I,27,30,1
+264,PERLND,CROP-DATES,PWATER,PARAMETERS,HDAY1,I,30,33,1
+265,PERLND,CROP-DATES,PWATER,PARAMETERS,PMON2,I,37,40,1
+266,PERLND,CROP-DATES,PWATER,PARAMETERS,PDAY2,I,40,43,1
+267,PERLND,CROP-DATES,PWATER,PARAMETERS,HMON2,I,45,48,1
+268,PERLND,CROP-DATES,PWATER,PARAMETERS,HDAY2,I,48,51,1
+269,PERLND,CROP-DATES,PWATER,PARAMETERS,PMON3,I,55,58,1
+270,PERLND,CROP-DATES,PWATER,PARAMETERS,PDAY3,I,58,61,1
+271,PERLND,CROP-DATES,PWATER,PARAMETERS,HMON3,I,63,66,1
+272,PERLND,CROP-DATES,PWATER,PARAMETERS,HDAY3,I,66,69,1
+273,PERLND,CROP-STAGES,PWATER,CROP_STAGES,OPNID,C,0,10,None
+274,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST1,R,10,20,0
+275,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST2,R,20,30,0
+276,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST3,R,30,40,0
+277,PERLND,CROP-STAGES,PWATER,CROP_STAGES,CRPST4,R,40,50,0
+278,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,OPNID,C,0,10,None
+279,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD1,R,10,20,0
+280,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD2,R,20,30,0
+281,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD3,R,30,40,0
+282,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRAWD4,R,40,50,0
+283,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRRDPI,R,50,60,0
+284,PERLND,CROP-SEASPM,PWATER,CROP_STAGES,CRRDPF,R,60,70,0
+285,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,OPNID,C,0,10,None
+286,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,NSKED,I,10,15,0
+287,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,SZONFG,I,15,20,0
+288,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,VCRDFG,I,20,25,0
+289,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,VAWDFG,I,25,30,0
+290,PERLND,IRRIG-PARM1,PWATER,PARAMETERS,IROPFG,I,30,35,0
+291,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,OPNID,C,0,10,None
+292,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,IRAREA,R,10,18,0
+293,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,IREFF,R,18,26,1
+294,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,ARZI,R,26,34,1
+295,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,WILTP,R,34,42,0
+296,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,FLDCAP,R,42,50,0
+297,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,CRDEP,R,50,58,0
+298,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,IRAWD,R,58,66,0
+299,PERLND,IRRIG-PARM2,PWATER,PARAMETERS,CAPRIS,R,66,74,6
+300,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,OPNID,C,0,10,None
+301,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,XPRIOR,R,10,20,0
+302,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,XFRAC,R,20,30,1
+303,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,GPRIOR,R,30,40,0
+304,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,GFRAC,R,40,50,1
+305,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,RPRIOR,R,50,60,0
+306,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,RFRAC,R,60,70,1
+307,PERLND,IRRIG-SOURCE,PWATER,PARAMETERS,IRCHNO,R,70,80,0
+308,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,OPNID,C,0,10,None
+309,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRCPFR,R,10,20,0
+310,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRSUFR,R,20,30,0
+311,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRUPFR,R,30,40,0
+312,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRLOFR,R,40,50,0
+313,PERLND,IRRIG-TARGET,PWATER,PARAMETERS,IRGWFR,R,50,60,0
+314,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,OPNID,C,0,13,None
+315,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRYR1,R,13,18,0
+316,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMO1,R,18,21,1
+317,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDY1,R,21,24,1
+318,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRHR1,R,24,27,0
+319,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMI1,R,27,29,0
+320,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDUR1,R,29,34,0
+321,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRRAT1,R,34,50,0
+322,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRYR2,R,50,55,0
+323,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMO2,R,55,58,1
+324,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDY2,R,58,61,1
+325,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRHR2,R,61,64,0
+326,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRMI2,R,64,66,0
+327,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRDUR2,R,66,71,0
+328,PERLND,IRRIG-SCHED,PWATER,PARAMETERS,IRRAT2,R,71,81,0
+329,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,OPNID,C,0,10,None
+330,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDJAN,R,10,15,0
+331,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDFEB,R,15,20,0
+332,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDMAR,R,20,25,0
+333,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDAPR,R,25,30,0
+334,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDMAY,R,30,35,0
+335,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDJUN,R,35,40,0
+336,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDJUL,R,40,45,0
+337,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDAUG,R,45,50,0
+338,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDSEP,R,50,55,0
+339,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDOCT,R,55,60,0
+340,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDNOV,R,60,65,0
+341,PERLND,MON-IRR-CRDP,PWATER,MONTHLYS,CRDDEC,R,65,70,0
+342,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,OPNID,C,0,10,None
+343,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDJAN,R,10,15,0
+344,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDFEB,R,15,20,0
+345,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDMAR,R,20,25,0
+346,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDAPR,R,25,30,0
+347,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDMAY,R,30,35,0
+348,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDJUN,R,35,40,0
+349,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDJUL,R,40,45,0
+350,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDAUG,R,45,50,0
+351,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDSEP,R,50,55,0
+352,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDOCT,R,55,60,0
+353,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDNOV,R,60,65,0
+354,PERLND,MON-IRR-AWD,PWATER,MONTHLYS,AWDDEC,R,65,70,0
+355,PERLND,PWAT-CANOPY,PWATER,CANOPY,OPNID,C,0,10,None
+356,PERLND,PWAT-CANOPY,PWATER,CANOPY,CANOPY,R,10,20,1
+357,PERLND,PWAT-CANOPY,PWATER,CANOPY,CANNAM,C,23,35,None
+358,PERLND,PWAT-CANOPY,PWATER,CANOPY,CEPSC,R,35,45,0
+359,PERLND,PWAT-CANOPY,PWATER,CANOPY,CEPS,R,45,55,0
+360,PERLND,SED-PARM1,SEDMNT,PARAMETERS,OPNID,C,0,10,None
+361,PERLND,SED-PARM1,SEDMNT,PARAMETERS,CRVFG,I,10,15,0
+362,PERLND,SED-PARM1,SEDMNT,PARAMETERS,VSIVFG,I,15,20,0
+363,PERLND,SED-PARM1,SEDMNT,PARAMETERS,SDOPFG,I,20,25,0
+364,PERLND,SED-PARM2,SEDMNT,PARAMETERS,OPNID,C,0,10,None
+365,PERLND,SED-PARM2,SEDMNT,PARAMETERS,SMPF,R,10,20,1
+366,PERLND,SED-PARM2,SEDMNT,PARAMETERS,KRER,R,20,30,0
+367,PERLND,SED-PARM2,SEDMNT,PARAMETERS,JRER,R,30,40,-999
+368,PERLND,SED-PARM2,SEDMNT,PARAMETERS,AFFIX,R,40,50,0
+369,PERLND,SED-PARM2,SEDMNT,PARAMETERS,COVER,R,50,60,0
+370,PERLND,SED-PARM2,SEDMNT,PARAMETERS,NVSI,R,60,70,0
+371,PERLND,SED-PARM3,SEDMNT,PARAMETERS,OPNID,C,0,10,None
+372,PERLND,SED-PARM3,SEDMNT,PARAMETERS,KSER,R,10,20,0
+373,PERLND,SED-PARM3,SEDMNT,PARAMETERS,JSER,R,20,30,-999
+374,PERLND,SED-PARM3,SEDMNT,PARAMETERS,KGER,R,30,40,0
+375,PERLND,SED-PARM3,SEDMNT,PARAMETERS,JGER,R,40,50,-999
+376,PERLND,MON-COVER,SEDMNT,MONTHLYS,OPNID,C,0,10,None
+377,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVJAN,R,10,15,0
+378,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVFEB,R,15,20,0
+379,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVMAR,R,20,25,0
+380,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVAPR,R,25,30,0
+381,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVMAY,R,30,35,0
+382,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVJUN,R,35,40,0
+383,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVJUL,R,40,45,0
+384,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVAUG,R,45,50,0
+385,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVSEP,R,50,55,0
+386,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVOCT,R,55,60,0
+387,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVNOV,R,60,65,0
+388,PERLND,MON-COVER,SEDMNT,MONTHLYS,COVDEC,R,65,70,0
+389,PERLND,MON-NVSI,SEDMNT,MONTHLYS,OPNID,C,0,10,None
+390,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSJAN,R,10,15,0
+391,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSFEB,R,15,20,0
+392,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSMAR,R,20,25,0
+393,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSAPR,R,25,30,0
+394,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSMAY,R,30,35,0
+395,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSJUN,R,35,40,0
+396,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSJUL,R,40,45,0
+397,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSAUG,R,45,50,0
+398,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSSEP,R,50,55,0
+399,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSOCT,R,55,60,0
+400,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSNOV,R,60,65,0
+401,PERLND,MON-NVSI,SEDMNT,MONTHLYS,NVSDEC,R,65,70,0
+402,PERLND,SED-STOR,SEDMNT,PARAMETERS,OPNID,C,0,10,None
+403,PERLND,SED-STOR,SEDMNT,PARAMETERS,DETS,R,10,20,0
+404,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,OPNID,C,0,10,None
+405,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,SLTVFG,I,10,15,0
+406,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,ULTVFG,I,15,20,0
+407,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,LGTVFG,I,20,25,0
+408,PERLND,PSTEMP-PARM1,PSTEMP,PARAMETERS,TSOPFG,I,25,30,0
+409,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,OPNID,C,0,10,None
+410,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,ASLT,R,10,20,32
+411,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,BSLT,R,20,30,1
+412,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,ULTP1,R,30,40,-999
+413,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,ULTP2,R,40,50,-999
+414,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,LGTP1,R,50,60,-999
+415,PERLND,PSTEMP-PARM2,PSTEMP,PARAMETERS,LGTP2,R,60,70,-999
+416,PERLND,MON-ASLT,PSTEMP,MONTHLYS,OPNID,C,0,10,None
+417,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTJAN,R,10,15,32
+418,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTFEB,R,15,20,32
+419,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTMAR,R,20,25,32
+420,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTAPR,R,25,30,32
+421,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTMAY,R,30,35,32
+422,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTJUN,R,35,40,32
+423,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTJUL,R,40,45,32
+424,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTAUG,R,45,50,32
+425,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTSEP,R,50,55,32
+426,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTOCT,R,55,60,32
+427,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTNOV,R,60,65,32
+428,PERLND,MON-ASLT,PSTEMP,MONTHLYS,SLTDEC,R,65,70,32
+429,PERLND,MON-BSLT,PSTEMP,MONTHLYS,OPNID,C,0,10,None
+430,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTJAN,R,10,15,1
+431,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTFEB,R,15,20,1
+432,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTMAR,R,20,25,1
+433,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTAPR,R,25,30,1
+434,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTMAY,R,30,35,1
+435,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTJUN,R,35,40,1
+436,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTJUL,R,40,45,1
+437,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTAUG,R,45,50,1
+438,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTSEP,R,50,55,1
+439,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTOCT,R,55,60,1
+440,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTNOV,R,60,65,1
+441,PERLND,MON-BSLT,PSTEMP,MONTHLYS,BSTDEC,R,65,70,1
+442,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,OPNID,C,0,10,None
+443,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1JAN,R,10,15,-999
+444,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1FEB,R,15,20,-999
+445,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1MAR,R,20,25,-999
+446,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1APR,R,25,30,-999
+447,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1MAY,R,30,35,-999
+448,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1JUN,R,35,40,-999
+449,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1JUL,R,40,45,-999
+450,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1AUG,R,45,50,-999
+451,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1SEP,R,50,55,-999
+452,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1OCT,R,55,60,-999
+453,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1NOV,R,60,65,-999
+454,PERLND,MON-ULTP1,PSTEMP,MONTHLYS,UT1DEC,R,65,70,-999
+455,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,OPNID,C,0,10,None
+456,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2JAN,R,10,15,-999
+457,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2FEB,R,15,20,-999
+458,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2MAR,R,20,25,-999
+459,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2APR,R,25,30,-999
+460,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2MAY,R,30,35,-999
+461,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2JUN,R,35,40,-999
+462,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2JUL,R,40,45,-999
+463,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2AUG,R,45,50,-999
+464,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2SEP,R,50,55,-999
+465,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2OCT,R,55,60,-999
+466,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2NOV,R,60,65,-999
+467,PERLND,MON-ULTP2,PSTEMP,MONTHLYS,UT2DEC,R,65,70,-999
+468,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,OPNID,C,0,10,None
+469,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1JAN,R,10,15,-999
+470,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1FEB,R,15,20,-999
+471,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1MAR,R,20,25,-999
+472,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1APR,R,25,30,-999
+473,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1MAY,R,30,35,-999
+474,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1JUN,R,35,40,-999
+475,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1JUL,R,40,45,-999
+476,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1AUG,R,45,50,-999
+477,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1SEP,R,50,55,-999
+478,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1OCT,R,55,60,-999
+479,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1NOV,R,60,65,-999
+480,PERLND,MON-LGTP1,PSTEMP,MONTHLYS,LT1DEC,R,65,70,-999
+481,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,OPNID,C,0,10,None
+482,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2JAN,R,10,15,-999
+483,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2FEB,R,15,20,-999
+484,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2MAR,R,20,25,-999
+485,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2APR,R,25,30,-999
+486,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2MAY,R,30,35,-999
+487,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2JUN,R,35,40,-999
+488,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2JUL,R,40,45,-999
+489,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2AUG,R,45,50,-999
+490,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2SEP,R,50,55,-999
+491,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2OCT,R,55,60,-999
+492,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2NOV,R,60,65,-999
+493,PERLND,MON-LGTP2,PSTEMP,MONTHLYS,LT2DEC,R,65,70,-999
+494,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,OPNID,C,0,10,None
+495,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,AIRTC,R,10,20,60
+496,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,SLTMP,R,20,30,60
+497,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,ULTMP,R,30,40,60
+498,PERLND,PSTEMP-TEMPS,PSTEMP,PARAMETERS,LGTMP,R,40,50,60
+499,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,OPNID,C,0,10,None
+500,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,IDVFG,I,10,15,0
+501,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,ICVFG,I,15,20,0
+502,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,GDVFG,I,20,25,0
+503,PERLND,PWT-PARM1,PWTGAS,PARAMETERS,GCVFG,I,25,30,0
+504,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,OPNID,C,0,10,None
+505,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ELEV,R,10,20,0
+506,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,IDOXP,R,20,30,0
+507,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ICO2P,R,30,40,0
+508,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ADOXP,R,40,50,0
+509,PERLND,PWT-PARM2,PWTGAS,PARAMETERS,ACO2P,R,50,60,0
+510,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,OPNID,C,0,10,None
+511,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,SDLFAC,R,10,20,0
+512,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,SLIFAC,R,20,30,0
+513,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,ILIFAC,R,30,40,0
+514,PERLND,LAT-FACTOR,PWTGAS,PARAMETERS,ALIFAC,R,40,50,0
+515,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,OPNID,C,0,10,None
+516,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOJAN,R,10,15,0
+517,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOFEB,R,15,20,0
+518,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOMAR,R,20,25,0
+519,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOAPR,R,25,30,0
+520,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOMAY,R,30,35,0
+521,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOJUN,R,35,40,0
+522,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOJUL,R,40,45,0
+523,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOAUG,R,45,50,0
+524,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOSEP,R,50,55,0
+525,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDOOCT,R,55,60,0
+526,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDONOV,R,60,65,0
+527,PERLND,MON-IFWDOX,PWTGAS,MONTHLYS,IDODEC,R,65,70,0
+528,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,OPNID,C,0,10,None
+529,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2JAN,R,10,15,0
+530,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2FEB,R,15,20,0
+531,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2MAR,R,20,25,0
+532,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2APR,R,25,30,0
+533,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2MAY,R,30,35,0
+534,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2JUN,R,35,40,0
+535,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2JUL,R,40,45,0
+536,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2AUG,R,45,50,0
+537,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2SEP,R,50,55,0
+538,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2OCT,R,55,60,0
+539,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2NOV,R,60,65,0
+540,PERLND,MON-IFWCO2,PWTGAS,MONTHLYS,CO2DEC,R,65,70,0
+541,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,OPNID,C,0,10,None
+542,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOJAN,R,10,15,0
+543,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOFEB,R,15,20,0
+544,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOMAR,R,20,25,0
+545,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOAPR,R,25,30,0
+546,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOMAY,R,30,35,0
+547,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOJUN,R,35,40,0
+548,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOJUL,R,40,45,0
+549,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOAUG,R,45,50,0
+550,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOSEP,R,50,55,0
+551,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDOOCT,R,55,60,0
+552,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDONOV,R,60,65,0
+553,PERLND,MON-GRNDDOX,PWTGAS,MONTHLYS,GDODEC,R,65,70,0
+554,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,OPNID,C,0,10,None
+555,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOJAN,R,10,15,0
+556,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOFEB,R,15,20,0
+557,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOMAR,R,20,25,0
+558,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOAPR,R,25,30,0
+559,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOMAY,R,30,35,0
+560,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOJUN,R,35,40,0
+561,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOJUL,R,40,45,0
+562,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOAUG,R,45,50,0
+563,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOSEP,R,50,55,0
+564,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCOOCT,R,55,60,0
+565,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCONOV,R,60,65,0
+566,PERLND,MON-GRNDCO2,PWTGAS,MONTHLYS,GCODEC,R,65,70,0
+567,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,OPNID,C,0,10,None
+568,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,SOTMP,R,10,20,60
+569,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,IOTMP,R,20,30,60
+570,PERLND,PWT-TEMPS,PWTGAS,PARAMETERS,AOTMP,R,30,40,60
+571,PERLND,PWT-GASES,PWTGAS,PARAMETERS,OPNID,C,0,10,None
+572,PERLND,PWT-GASES,PWTGAS,PARAMETERS,SODOX,R,10,20,0
+573,PERLND,PWT-GASES,PWTGAS,PARAMETERS,SOCO2,R,20,30,0
+574,PERLND,PWT-GASES,PWTGAS,PARAMETERS,IODOX,R,30,40,0
+575,PERLND,PWT-GASES,PWTGAS,PARAMETERS,IOCO2,R,40,50,0
+576,PERLND,PWT-GASES,PWTGAS,PARAMETERS,AODOX,R,50,60,0
+577,PERLND,PWT-GASES,PWTGAS,PARAMETERS,AOCO2,R,60,70,0
+578,PERLND,NQUALS,PQUAL,PQUAL,OPNID,C,0,10,None
+579,PERLND,NQUALS,PQUAL,PQUAL,NQUAL,I,10,15,1
+580,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,OPNID,C,0,11,None
+581,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG1,I,11,14,0
+582,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG2,I,14,18,0
+583,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG3,I,18,21,0
+584,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG4,I,21,25,0
+585,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG5,I,25,28,0
+586,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG6,I,28,32,0
+587,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG7,I,32,35,0
+588,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG8,I,35,39,0
+589,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG9,I,39,42,0
+590,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG10,I,42,46,0
+591,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG11,I,46,49,0
+592,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG12,I,49,53,0
+593,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG13,I,53,56,0
+594,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG14,I,56,60,0
+595,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG15,I,60,63,0
+596,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG16,I,63,67,0
+597,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG17,I,67,70,0
+598,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG18,I,70,74,0
+599,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG19,I,74,77,0
+600,PERLND,PQL-AD-FLAGS,PQUAL,FLAGS,PQADFG20,I,77,80,0
+601,PERLND,QUAL-PROPS,PQUAL,PQUAL,OPNID,C,0,10,None
+602,PERLND,QUAL-PROPS,PQUAL,PQUAL,QUALID,C,10,22,None
+603,PERLND,QUAL-PROPS,PQUAL,PQUAL,QTYID,C,26,30,None
+604,PERLND,QUAL-PROPS,PQUAL,PQUAL,QSDFG,I,30,35,0
+605,PERLND,QUAL-PROPS,PQUAL,PQUAL,VPFWFG,I,35,40,0
+606,PERLND,QUAL-PROPS,PQUAL,PQUAL,VPFSFG,I,40,45,0
+607,PERLND,QUAL-PROPS,PQUAL,PQUAL,QSOFG,I,45,50,0
+608,PERLND,QUAL-PROPS,PQUAL,PQUAL,VQOFG,I,50,55,0
+609,PERLND,QUAL-PROPS,PQUAL,PQUAL,QIFWFG,I,55,60,0
+610,PERLND,QUAL-PROPS,PQUAL,PQUAL,VIQCFG,I,60,65,0
+611,PERLND,QUAL-PROPS,PQUAL,PQUAL,QAGWFG,I,65,70,0
+612,PERLND,QUAL-PROPS,PQUAL,PQUAL,VAQCFG,I,70,75,0
+613,PERLND,QUAL-INPUT,PQUAL,PQUAL,OPNID,C,0,10,None
+614,PERLND,QUAL-INPUT,PQUAL,PQUAL,SQO,R,10,18,0
+615,PERLND,QUAL-INPUT,PQUAL,PQUAL,POTFW,R,18,26,0
+616,PERLND,QUAL-INPUT,PQUAL,PQUAL,POTFS,R,26,34,0
+617,PERLND,QUAL-INPUT,PQUAL,PQUAL,ACQOP,R,34,42,0
+618,PERLND,QUAL-INPUT,PQUAL,PQUAL,SQOLIM,R,42,50,0.000001
+619,PERLND,QUAL-INPUT,PQUAL,PQUAL,WSQOP,R,50,58,1.64
+620,PERLND,QUAL-INPUT,PQUAL,PQUAL,IOQC,R,58,66,0
+621,PERLND,QUAL-INPUT,PQUAL,PQUAL,AOQC,R,66,74,0
+622,PERLND,MON-POTFW,PQUAL,PQUAL,OPNID,C,0,10,None
+623,PERLND,MON-POTFW,PQUAL,PQUAL,WPFJAN,R,10,15,0
+624,PERLND,MON-POTFW,PQUAL,PQUAL,WPFFEB,R,15,20,0
+625,PERLND,MON-POTFW,PQUAL,PQUAL,WPFMAR,R,20,25,0
+626,PERLND,MON-POTFW,PQUAL,PQUAL,WPFAPR,R,25,30,0
+627,PERLND,MON-POTFW,PQUAL,PQUAL,WPFMAY,R,30,35,0
+628,PERLND,MON-POTFW,PQUAL,PQUAL,WPFJUN,R,35,40,0
+629,PERLND,MON-POTFW,PQUAL,PQUAL,WPFJUL,R,40,45,0
+630,PERLND,MON-POTFW,PQUAL,PQUAL,WPFAUG,R,45,50,0
+631,PERLND,MON-POTFW,PQUAL,PQUAL,WPFSEP,R,50,55,0
+632,PERLND,MON-POTFW,PQUAL,PQUAL,WPFOCT,R,55,60,0
+633,PERLND,MON-POTFW,PQUAL,PQUAL,WPFNOV,R,60,65,0
+634,PERLND,MON-POTFW,PQUAL,PQUAL,WPFDEC,R,65,70,0
+635,PERLND,MON-POTFS,PQUAL,PQUAL,OPNID,C,0,10,None
+636,PERLND,MON-POTFS,PQUAL,PQUAL,SPFJAN,R,10,15,0
+637,PERLND,MON-POTFS,PQUAL,PQUAL,SPFFEB,R,15,20,0
+638,PERLND,MON-POTFS,PQUAL,PQUAL,SPFMAR,R,20,25,0
+639,PERLND,MON-POTFS,PQUAL,PQUAL,SPFAPR,R,25,30,0
+640,PERLND,MON-POTFS,PQUAL,PQUAL,SPFMAY,R,30,35,0
+641,PERLND,MON-POTFS,PQUAL,PQUAL,SPFJUN,R,35,40,0
+642,PERLND,MON-POTFS,PQUAL,PQUAL,SPFJUL,R,40,45,0
+643,PERLND,MON-POTFS,PQUAL,PQUAL,SPFAUG,R,45,50,0
+644,PERLND,MON-POTFS,PQUAL,PQUAL,SPFSEP,R,50,55,0
+645,PERLND,MON-POTFS,PQUAL,PQUAL,SPFOCT,R,55,60,0
+646,PERLND,MON-POTFS,PQUAL,PQUAL,SPFNOV,R,60,65,0
+647,PERLND,MON-POTFS,PQUAL,PQUAL,SPFDEC,R,65,70,0
+648,PERLND,MON-ACCUM,PQUAL,PQUAL,OPNID,C,0,10,None
+649,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAJAN,R,10,15,0
+650,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAFEB,R,15,20,0
+651,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAMAR,R,20,25,0
+652,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAAPR,R,25,30,0
+653,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAMAY,R,30,35,0
+654,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAJUN,R,35,40,0
+655,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAJUL,R,40,45,0
+656,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAAUG,R,45,50,0
+657,PERLND,MON-ACCUM,PQUAL,PQUAL,QUASEP,R,50,55,0
+658,PERLND,MON-ACCUM,PQUAL,PQUAL,QUAOCT,R,55,60,0
+659,PERLND,MON-ACCUM,PQUAL,PQUAL,QUANOV,R,60,65,0
+660,PERLND,MON-ACCUM,PQUAL,PQUAL,QUADEC,R,65,70,0
+661,PERLND,MON-SQOLIM,PQUAL,PQUAL,OPNID,C,0,10,None
+662,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOJAN,R,10,15,0.000001
+663,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOFEB,R,15,20,0.000001
+664,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOMAR,R,20,25,0.000001
+665,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOAPR,R,25,30,0.000001
+666,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOMAY,R,30,35,0.000001
+667,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOJUN,R,35,40,0.000001
+668,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOJUL,R,40,45,0.000001
+669,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOAUG,R,45,50,0.000001
+670,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOSEP,R,50,55,0.000001
+671,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQOOCT,R,55,60,0.000001
+672,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQONOV,R,60,65,0.000001
+673,PERLND,MON-SQOLIM,PQUAL,PQUAL,SQODEC,R,65,70,0.000001
+674,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,OPNID,C,0,10,None
+675,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONJAN,R,10,15,0
+676,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONFEB,R,15,20,0
+677,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONMAR,R,20,25,0
+678,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONAPR,R,25,30,0
+679,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONMAY,R,30,35,0
+680,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONJUN,R,35,40,0
+681,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONJUL,R,40,45,0
+682,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONAUG,R,45,50,0
+683,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONSEP,R,50,55,0
+684,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONOCT,R,55,60,0
+685,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONNOV,R,60,65,0
+686,PERLND,MON-IFLW-CONC,PQUAL,PQUAL,CONDEC,R,65,70,0
+687,PERLND,MON-GRND-CONC,PQUAL,PQUAL,OPNID,C,0,10,None
+688,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCJAN,R,10,15,0
+689,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCFEB,R,15,20,0
+690,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCMAR,R,20,25,0
+691,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCAPR,R,25,30,0
+692,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCMAY,R,30,35,0
+693,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCJUN,R,35,40,0
+694,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCJUL,R,40,45,0
+695,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCAUG,R,45,50,0
+696,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCSEP,R,50,55,0
+697,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCOCT,R,55,60,0
+698,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCNOV,R,60,65,0
+699,PERLND,MON-GRND-CONC,PQUAL,PQUAL,GRCDEC,R,65,70,0
+700,PERLND,VUZFG,MSTLAY,FLAGS,OPNID,C,0,10,None
+701,PERLND,VUZFG,MSTLAY,FLAGS,VUZFG,I,10,15,0
+702,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,OPNID,C,0,10,None
+703,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,UZSN,R,10,18,-999
+704,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,LZSN,R,18,26,-999
+705,PERLND,UZSN-LZSN,MSTLAY,PARAMETERS,SURS,R,26,34,0.001
+706,PERLND,MST-PARM,MSTLAY,PARAMETERS,OPNID,C,0,10,None
+707,PERLND,MST-PARM,MSTLAY,PARAMETERS,SLMPF,R,10,20,1
+708,PERLND,MST-PARM,MSTLAY,PARAMETERS,ULPF,R,20,30,1
+709,PERLND,MST-PARM,MSTLAY,PARAMETERS,LLPF,R,30,40,1
+710,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,OPNID,C,0,10,None
+711,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,SMSTM,R,10,20,0
+712,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,UMSTM,R,20,30,0
+713,PERLND,MST-TOPSTOR,MSTLAY,PARAMETERS,IMSTM,R,30,40,0
+714,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,OPNID,C,0,10,None
+715,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FSO,R,10,20,0
+716,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FSP,R,20,30,0
+717,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FII,R,30,40,0
+718,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FUP,R,40,50,0
+719,PERLND,MST-TOPFLX,MSTLAY,PARAMETERS,FIO,R,50,60,0
+720,PERLND,MST-SUBSTOR,MSTLAY,PARAMETERS,OPNID,C,0,10,None
+721,PERLND,MST-SUBSTOR,MSTLAY,PARAMETERS,LMSTM,R,10,20,0
+722,PERLND,MST-SUBSTOR,MSTLAY,PARAMETERS,AMSTM,R,20,30,0
+723,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,OPNID,C,0,10,None
+724,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,FLP,R,10,20,0
+725,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,FLDP,R,20,30,0
+726,PERLND,MST-SUBFLX,MSTLAY,PARAMETERS,FAO,R,30,40,0
+727,PERLND,PEST-FLAGS,PEST,PEST,OPNID,C,0,10,None
+728,PERLND,PEST-FLAGS,PEST,PEST,NPST,I,10,15,1
+729,PERLND,PEST-FLAGS,PEST,PEST,ITMXP1,I,15,20,30
+730,PERLND,PEST-FLAGS,PEST,PEST,ITMXP2,I,20,25,30
+731,PERLND,PEST-FLAGS,PEST,PEST,ITMXP3,I,25,30,30
+732,PERLND,PEST-FLAGS,PEST,PEST,ADOPF1,I,30,35,2
+733,PERLND,PEST-FLAGS,PEST,PEST,ADOPF2,I,35,40,2
+734,PERLND,PEST-FLAGS,PEST,PEST,ADOPF3,I,40,45,2
+735,PERLND,PEST-AD-FLAGS,PEST,FLAGS,OPNID,C,0,10,None
+736,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG1,I,11,14,0
+737,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG2,I,14,17,0
+738,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG3,I,18,21,0
+739,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG4,I,21,24,0
+740,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG5,I,25,28,0
+741,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG6,I,28,31,0
+742,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG7,I,33,36,0
+743,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG8,I,36,39,0
+744,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG9,I,40,43,0
+745,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG10,I,43,46,0
+746,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG11,I,47,50,0
+747,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG12,I,50,53,0
+748,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG13,I,55,58,0
+749,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG14,I,58,61,0
+750,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG15,I,62,65,0
+751,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG16,I,65,68,0
+752,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG17,I,69,72,0
+753,PERLND,PEST-AD-FLAGS,PEST,FLAGS,PEADFG18,I,72,75,0
+754,PERLND,PEST-ID,PEST,PEST,OPNID,C,0,10,None
+755,PERLND,PEST-ID,PEST,PEST,PESTID,C,10,30,None
+756,PERLND,PEST-THETA,PEST,PEST,OPNID,C,0,10,None
+757,PERLND,PEST-THETA,PEST,PEST,THDSPS,R,10,20,1.05
+758,PERLND,PEST-THETA,PEST,PEST,THADPS,R,20,30,1.05
+759,PERLND,PEST-FIRSTPM,PEST,PEST,OPNID,C,0,10,None
+760,PERLND,PEST-FIRSTPM,PEST,PEST,KDSPS,R,10,20,0
+761,PERLND,PEST-FIRSTPM,PEST,PEST,KADPS,R,20,30,0
+762,PERLND,PEST-CMAX,PEST,PEST,OPNID,C,0,10,None
+763,PERLND,PEST-CMAX,PEST,PEST,CMAX,R,10,20,0
+764,PERLND,PEST-SVALPM,PEST,PEST,OPNID,C,0,10,None
+765,PERLND,PEST-SVALPM,PEST,PEST,XFIX,R,10,20,0
+766,PERLND,PEST-SVALPM,PEST,PEST,K1,R,20,30,0
+767,PERLND,PEST-SVALPM,PEST,PEST,N1,R,30,40,-999
+768,PERLND,PEST-NONSVPM,PEST,PEST,OPNID,C,0,10,None
+769,PERLND,PEST-NONSVPM,PEST,PEST,XFIX,R,10,20,0
+770,PERLND,PEST-NONSVPM,PEST,PEST,K1,R,20,30,0
+771,PERLND,PEST-NONSVPM,PEST,PEST,N1,R,30,40,-999
+772,PERLND,PEST-NONSVPM,PEST,PEST,N2,R,40,50,-999
+773,PERLND,PEST-DEGRAD,PEST,PARAMETERS,OPNID,C,0,10,None
+774,PERLND,PEST-DEGRAD,PEST,PARAMETERS,SDGCON,R,10,20,0
+775,PERLND,PEST-DEGRAD,PEST,PARAMETERS,UDGCON,R,20,30,0
+776,PERLND,PEST-DEGRAD,PEST,PARAMETERS,LDGCON,R,30,40,0
+777,PERLND,PEST-DEGRAD,PEST,PARAMETERS,ADGCON,R,40,50,0
+778,PERLND,PEST-STOR1,PEST,PEST,OPNID,C,0,10,None
+779,PERLND,PEST-STOR1,PEST,PEST,PSCY,R,10,20,0
+780,PERLND,PEST-STOR1,PEST,PEST,PSAD,R,20,30,0
+781,PERLND,PEST-STOR1,PEST,PEST,PSSU,R,30,40,0
+782,PERLND,PEST-STOR2,PEST,PEST,OPNID,C,0,10,None
+783,PERLND,PEST-STOR2,PEST,PEST,IPS,R,10,20,0
+784,PERLND,NIT-FLAGS,NITR,NITR,OPNID,C,0,10,None
+785,PERLND,NIT-FLAGS,NITR,NITR,VNUTFG,I,10,15,0
+786,PERLND,NIT-FLAGS,NITR,NITR,FORAFG,I,15,20,0
+787,PERLND,NIT-FLAGS,NITR,NITR,ITMAXA,I,20,25,30
+788,PERLND,NIT-FLAGS,NITR,NITR,BNUMN,I,25,30,-999
+789,PERLND,NIT-FLAGS,NITR,NITR,CNUMN,I,30,35,-999
+790,PERLND,NIT-FLAGS,NITR,NITR,NUPTFG,I,35,40,0
+791,PERLND,NIT-FLAGS,NITR,NITR,FIXNFG,I,40,45,0
+792,PERLND,NIT-FLAGS,NITR,NITR,AMVOFG,I,45,50,0
+793,PERLND,NIT-FLAGS,NITR,NITR,ALPNFG,I,50,55,0
+794,PERLND,NIT-FLAGS,NITR,NITR,VNPRFG,I,55,60,0
+795,PERLND,NIT-AD-FLAGS,NITR,FLAGS,OPNID,C,0,10,None
+796,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG1,I,11,14,0
+797,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG2,I,14,17,0
+798,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG3,I,18,21,0
+799,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG4,I,21,24,0
+800,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG5,I,26,29,0
+801,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG6,I,29,32,0
+802,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG7,I,33,36,0
+803,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG8,I,36,39,0
+804,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG9,I,41,44,0
+805,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG10,I,44,47,0
+806,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG11,I,48,51,0
+807,PERLND,NIT-AD-FLAGS,NITR,FLAGS,NIADFG12,I,51,54,0
+808,PERLND,NIT-UPTAKE,NITR,NITR,OPNID,C,0,10,None
+809,PERLND,NIT-UPTAKE,NITR,NITR,SKPLN,R,10,20,0
+810,PERLND,NIT-UPTAKE,NITR,NITR,UKPLN,R,20,30,0
+811,PERLND,NIT-UPTAKE,NITR,NITR,LKPLN,R,30,40,0
+812,PERLND,NIT-UPTAKE,NITR,NITR,AKPLN,R,40,50,0
+813,PERLND,MON-NITUPT,NITR,NITR,OPNID,C,0,10,None
+814,PERLND,MON-NITUPT,NITR,NITR,KPLJAN,R,10,15,0
+815,PERLND,MON-NITUPT,NITR,NITR,KPLFEB,R,15,20,0
+816,PERLND,MON-NITUPT,NITR,NITR,KPLMAR,R,20,25,0
+817,PERLND,MON-NITUPT,NITR,NITR,KPLAPR,R,25,30,0
+818,PERLND,MON-NITUPT,NITR,NITR,KPLMAY,R,30,35,0
+819,PERLND,MON-NITUPT,NITR,NITR,KPLJUN,R,35,40,0
+820,PERLND,MON-NITUPT,NITR,NITR,KPLJUL,R,40,45,0
+821,PERLND,MON-NITUPT,NITR,NITR,KPLAUG,R,45,50,0
+822,PERLND,MON-NITUPT,NITR,NITR,KPLSEP,R,50,55,0
+823,PERLND,MON-NITUPT,NITR,NITR,KPLOCT,R,55,60,0
+824,PERLND,MON-NITUPT,NITR,NITR,KPLNOV,R,60,65,0
+825,PERLND,MON-NITUPT,NITR,NITR,KPLDEC,R,65,70,0
+826,PERLND,NIT-FSTGEN,NITR,NITR,OPNID,C,0,10,None
+827,PERLND,NIT-FSTGEN,NITR,NITR,NO3UTF,R,10,15,1
+828,PERLND,NIT-FSTGEN,NITR,NITR,NH4UTF,R,15,20,0
+829,PERLND,NIT-FSTGEN,NITR,NITR,THPLN,R,20,25,1.07
+830,PERLND,NIT-FSTGEN,NITR,NITR,THKDSA,R,25,30,1.05
+831,PERLND,NIT-FSTGEN,NITR,NITR,THKADA,R,30,35,1.05
+832,PERLND,NIT-FSTGEN,NITR,NITR,THKIMN,R,35,40,1.07
+833,PERLND,NIT-FSTGEN,NITR,NITR,THKAM,R,40,45,1.07
+834,PERLND,NIT-FSTGEN,NITR,NITR,THKDNI,R,45,50,1.07
+835,PERLND,NIT-FSTGEN,NITR,NITR,THKNI,R,50,55,1.05
+836,PERLND,NIT-FSTGEN,NITR,NITR,THKIMA,R,55,60,1.07
+837,PERLND,NIT-FSTPM,NITR,NITR,OPNID,C,0,10,None
+838,PERLND,NIT-FSTPM,NITR,NITR,KDSAM,R,10,20,0
+839,PERLND,NIT-FSTPM,NITR,NITR,KADAM,R,20,30,0
+840,PERLND,NIT-FSTPM,NITR,NITR,KIMNI,R,30,40,0
+841,PERLND,NIT-FSTPM,NITR,NITR,KAM,R,40,50,0
+842,PERLND,NIT-FSTPM,NITR,NITR,KDNI,R,50,60,0
+843,PERLND,NIT-FSTPM,NITR,NITR,KNI,R,60,70,0
+844,PERLND,NIT-FSTPM,NITR,NITR,KIMAM,R,70,80,0
+845,PERLND,NIT-CMAX,NITR,NITR,OPNID,C,0,10,0
+846,PERLND,NIT-CMAX,NITR,NITR,CMAX,R,10,20,0
+847,PERLND,NIT-SVALPM,NITR,NITR,OPNID,C,0,10,None
+848,PERLND,NIT-SVALPM,NITR,NITR,XFIX,R,10,20,0
+849,PERLND,NIT-SVALPM,NITR,NITR,K1,R,20,30,0
+850,PERLND,NIT-SVALPM,NITR,NITR,N1,R,30,40,-999
+851,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,OPNID,C,0,10,None
+852,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KUPNI,R,10,20,0
+853,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KUPAM,R,20,30,0
+854,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KIMNI,R,30,40,0
+855,PERLND,NIT-UPIMKMAX,NITR,PARAMETERS,KIMAM,R,40,50,0
+856,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,OPNID,C,0,10,0
+857,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSUNI,R,10,20,0
+858,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSUAM,R,20,30,0
+859,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSINI,R,30,40,0
+860,PERLND,NIT-UPIMCSAT,NITR,PARAMETERS,CSIAM,R,40,50,0
+861,PERLND,MON-NITUPNI,NITR,MONTHLYS,OPNID,C,0,10,None
+862,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNJAN,R,10,15,0
+863,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNFEB,R,15,20,0
+864,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNMAR,R,20,25,0
+865,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNAPR,R,25,30,0
+866,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNMAY,R,30,35,0
+867,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNJUN,R,35,40,0
+868,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNJUL,R,40,45,0
+869,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNAUG,R,45,50,0
+870,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNSEP,R,50,55,0
+871,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNOCT,R,55,60,0
+872,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNNOV,R,60,65,0
+873,PERLND,MON-NITUPNI,NITR,MONTHLYS,KUNDEC,R,65,70,0
+874,PERLND,MON-NITUPAM,NITR,MONTHLYS,OPNID,C,0,10,None
+875,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAJAN,R,10,15,0
+876,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAFEB,R,15,20,0
+877,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAMAR,R,20,25,0
+878,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAAPR,R,25,30,0
+879,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAMAY,R,30,35,0
+880,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAJUN,R,35,40,0
+881,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAJUL,R,40,45,0
+882,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAAUG,R,45,50,0
+883,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUASEP,R,50,55,0
+884,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUAOCT,R,55,60,0
+885,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUANOV,R,60,65,0
+886,PERLND,MON-NITUPAM,NITR,MONTHLYS,KUADEC,R,65,70,0
+887,PERLND,MON-NITIMNI,NITR,MONTHLYS,OPNID,C,0,10,None
+888,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINJAN,R,10,15,0
+889,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINFEB,R,15,20,0
+890,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINMAR,R,20,25,0
+891,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINAPR,R,25,30,0
+892,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINMAY,R,30,35,0
+893,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINJUN,R,35,40,0
+894,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINJUL,R,40,45,0
+895,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINAUG,R,45,50,0
+896,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINSEP,R,50,55,0
+897,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINOCT,R,55,60,0
+898,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINNOV,R,60,65,0
+899,PERLND,MON-NITIMNI,NITR,MONTHLYS,KINDEC,R,65,70,0
+900,PERLND,MON-NITIMAM,NITR,MONTHLYS,OPNID,C,0,10,None
+901,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAJAN,R,10,15,0
+902,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAFEB,R,15,20,0
+903,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAMAR,R,20,25,0
+904,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAAPR,R,25,30,0
+905,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAMAY,R,30,35,0
+906,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAJUN,R,35,40,0
+907,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAJUL,R,40,45,0
+908,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAAUG,R,45,50,0
+909,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIASEP,R,50,55,0
+910,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIAOCT,R,55,60,0
+911,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIANOV,R,60,65,0
+912,PERLND,MON-NITIMAM,NITR,MONTHLYS,KIADEC,R,65,70,0
+913,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,OPNID,C,0,10,None
+914,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,SKVOL,R,10,20,0
+915,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,UKVOL,R,20,30,0
+916,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,LKVOL,R,30,40,0
+917,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,AKVOL,R,40,50,0
+918,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,THVOL,R,50,60,1.07
+919,PERLND,NIT-AMVOLAT,NITR,PARAMETERS,TRFVOL,R,60,70,20
+920,PERLND,NIT-YIELD,NITR,PARAMETERS,OPNID,C,0,10,None
+921,PERLND,NIT-YIELD,NITR,PARAMETERS,NUPTGT,R,10,20,0
+922,PERLND,NIT-YIELD,NITR,PARAMETERS,NMXRAT,R,20,30,1
+923,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,OPNID,C,0,10,None
+924,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUJAN,R,10,15,0
+925,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUFEB,R,15,20,0
+926,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUMAR,R,20,25,0
+927,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUAPR,R,25,30,0
+928,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUMAY,R,30,35,0
+929,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUJUN,R,35,40,0
+930,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUJUL,R,40,45,0
+931,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUAUG,R,45,50,0
+932,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUSEP,R,50,55,0
+933,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUOCT,R,55,60,0
+934,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUNOV,R,60,65,0
+935,PERLND,MON-NUPT-FR1,NITR,MONTHLYS,TNUDEC,R,65,70,0
+936,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,OPNID,C,0,10,None
+937,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUJAN,R,10,15,0
+938,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUFEB,R,15,20,0
+939,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUMAR,R,20,25,0
+940,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUAPR,R,25,30,0
+941,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUMAY,R,30,35,0
+942,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUJUN,R,35,40,0
+943,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUJUL,R,40,45,0
+944,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUAUG,R,45,50,0
+945,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUSEP,R,50,55,0
+946,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUOCT,R,55,60,0
+947,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUNOV,R,60,65,0
+948,PERLND,MON-NUPT-FR2,NITR,MONTHLYS,LNUDEC,R,65,70,0
+949,PERLND,NIT-ORGPM,NITR,PARAMETERS,OPNID,C,0,10,None
+950,PERLND,NIT-ORGPM,NITR,PARAMETERS,KLON,R,10,20,1.00E+20
+951,PERLND,NIT-ORGPM,NITR,PARAMETERS,KRON,R,20,30,1.00E+20
+952,PERLND,NIT-ORGPM,NITR,PARAMETERS,KONLR,R,30,40,0
+953,PERLND,NIT-ORGPM,NITR,PARAMETERS,THNLR,R,40,50,1.07
+954,PERLND,NIT-BGPLRET,NITR,PARAMETERS,OPNID,C,0,10,None
+955,PERLND,NIT-BGPLRET,NITR,PARAMETERS,SKPRBN,R,10,20,0
+956,PERLND,NIT-BGPLRET,NITR,PARAMETERS,UKPRBN,R,20,30,0
+957,PERLND,NIT-BGPLRET,NITR,PARAMETERS,LKPRBN,R,30,40,0
+958,PERLND,NIT-BGPLRET,NITR,PARAMETERS,AKPRBN,R,40,50,0
+959,PERLND,NIT-BGPLRET,NITR,PARAMETERS,BGPRFR,R,50,60,0
+960,PERLND,NIT-AGPLRET,NITR,PARAMETERS,OPNID,C,0,10,None
+961,PERLND,NIT-AGPLRET,NITR,PARAMETERS,AGKPRN,R,10,20,0
+962,PERLND,NIT-AGPLRET,NITR,PARAMETERS,SKPRLN,R,20,30,0
+963,PERLND,NIT-AGPLRET,NITR,PARAMETERS,UKPRLN,R,30,40,0
+964,PERLND,NIT-AGPLRET,NITR,PARAMETERS,LINPRF,R,40,50,0
+965,PERLND,MON-NPRETBG,NITR,MONTHLYS,OPNID,C,0,10,None
+966,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRJAN,R,10,15,0
+967,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRFEB,R,15,20,0
+968,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRMAR,R,20,25,0
+969,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRAPR,R,25,30,0
+970,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRMAY,R,30,35,0
+971,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRJUN,R,35,40,0
+972,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRJUL,R,40,45,0
+973,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRAUG,R,45,50,0
+974,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRSEP,R,50,55,0
+975,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNROCT,R,55,60,0
+976,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRNOV,R,60,65,0
+977,PERLND,MON-NPRETBG,NITR,MONTHLYS,BNRDEC,R,65,70,0
+978,PERLND,MON-NPRETAG,NITR,MONTHLYS,OPNID,C,0,10,None
+979,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRJAN,R,10,15,0
+980,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRFEB,R,15,20,0
+981,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRMAR,R,20,25,0
+982,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRAPR,R,25,30,0
+983,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRMAY,R,30,35,0
+984,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRJUN,R,35,40,0
+985,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRJUL,R,40,45,0
+986,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRAUG,R,45,50,0
+987,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRSEP,R,50,55,0
+988,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANROCT,R,55,60,0
+989,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRNOV,R,60,65,0
+990,PERLND,MON-NPRETAG,NITR,MONTHLYS,ANRDEC,R,65,70,0
+991,PERLND,MON-NPRETLI,NITR,MONTHLYS,OPNID,C,0,10,None
+992,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRJAN,R,10,15,0
+993,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRFEB,R,15,20,0
+994,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRMAR,R,20,25,0
+995,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRAPR,R,25,30,0
+996,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRMAY,R,30,35,0
+997,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRJUN,R,35,40,0
+998,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRJUL,R,40,45,0
+999,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRAUG,R,45,50,0
+1000,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRSEP,R,50,55,0
+1001,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNROCT,R,55,60,0
+1002,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRNOV,R,60,65,0
+1003,PERLND,MON-NPRETLI,NITR,MONTHLYS,LNRDEC,R,65,70,0
+1004,PERLND,MON-NPRETFBG,NITR,MONTHLYS,OPNID,C,0,10,None
+1005,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFJAN,R,10,15,0
+1006,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFFEB,R,15,20,0
+1007,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFMAR,R,20,25,0
+1008,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFAPR,R,25,30,0
+1009,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFMAY,R,30,35,0
+1010,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFJUN,R,35,40,0
+1011,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFJUL,R,40,45,0
+1012,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFAUG,R,45,50,0
+1013,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFSEP,R,50,55,0
+1014,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFOCT,R,55,60,0
+1015,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFNOV,R,60,65,0
+1016,PERLND,MON-NPRETFBG,NITR,MONTHLYS,BNFDEC,R,65,70,0
+1017,PERLND,MON-NPRETFLI,NITR,MONTHLYS,OPNID,C,0,10,None
+1018,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFJAN,R,10,15,0
+1019,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFFEB,R,15,20,0
+1020,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFMAR,R,20,25,0
+1021,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFAPR,R,25,30,0
+1022,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFMAY,R,30,35,0
+1023,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFJUN,R,35,40,0
+1024,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFJUL,R,40,45,0
+1025,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFAUG,R,45,50,0
+1026,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFSEP,R,50,55,0
+1027,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFOCT,R,55,60,0
+1028,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFNOV,R,60,65,0
+1029,PERLND,MON-NPRETFLI,NITR,MONTHLYS,LNFDEC,R,65,70,0
+1030,PERLND,NIT-AGUTF,NITR,PARAMETERS,OPNID,C,0,10,None
+1031,PERLND,NIT-AGUTF,NITR,PARAMETERS,SANUTF,R,10,20,0
+1032,PERLND,NIT-AGUTF,NITR,PARAMETERS,UANUTF,R,20,30,0
+1033,PERLND,NIT-AGUTF,NITR,PARAMETERS,LANUTF,R,30,40,0
+1034,PERLND,NIT-AGUTF,NITR,PARAMETERS,AANUTF,R,40,50,0
+1035,PERLND,MON-NITAGUTF,NITR,MONTHLYS,OPNID,C,0,10,None
+1036,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFJAN,R,10,15,0
+1037,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFFEB,R,15,20,0
+1038,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFMAR,R,20,25,0
+1039,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFAPR,R,25,30,0
+1040,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFMAY,R,30,35,0
+1041,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFJUN,R,35,40,0
+1042,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFJUL,R,40,45,0
+1043,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFAUG,R,45,50,0
+1044,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFSEP,R,50,55,0
+1045,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFOCT,R,55,60,0
+1046,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFNOV,R,60,65,0
+1047,PERLND,MON-NITAGUTF,NITR,MONTHLYS,AGFDEC,R,65,70,0
+1048,PERLND,NIT-STOR1,NITR,NITR,OPNID,C,0,10,None
+1049,PERLND,NIT-STOR1,NITR,NITR,LORGN,R,10,20,0
+1050,PERLND,NIT-STOR1,NITR,NITR,AMAD,R,20,30,0
+1051,PERLND,NIT-STOR1,NITR,NITR,AMSU,R,30,40,0
+1052,PERLND,NIT-STOR1,NITR,NITR,NO3,R,40,50,0
+1053,PERLND,NIT-STOR1,NITR,NITR,PLTN,R,50,60,0
+1054,PERLND,NIT-STOR1,NITR,NITR,RORGN,R,60,70,0
+1055,PERLND,NIT-STOR2,NITR,PARAMETERS,OPNID,C,0,10,None
+1056,PERLND,NIT-STOR2,NITR,PARAMETERS,IAMSU,R,10,20,0
+1057,PERLND,NIT-STOR2,NITR,PARAMETERS,INO3,R,20,30,0
+1058,PERLND,NIT-STOR2,NITR,PARAMETERS,ISLON,R,30,40,0
+1059,PERLND,NIT-STOR2,NITR,PARAMETERS,ISRON,R,40,50,0
+1060,PERLND,NIT-STOR2,NITR,PARAMETERS,AGPLTN,R,50,60,0
+1061,PERLND,NIT-STOR2,NITR,PARAMETERS,LITTRN,R,60,70,0
+1062,PERLND,PHOS-FLAGS,PHOS,FLAGS,OPNID,C,0,10,None
+1063,PERLND,PHOS-FLAGS,PHOS,FLAGS,VPUTFG,I,10,15,0
+1064,PERLND,PHOS-FLAGS,PHOS,FLAGS,FORPFG,I,15,20,0
+1065,PERLND,PHOS-FLAGS,PHOS,FLAGS,ITMAXP,I,20,25,30
+1066,PERLND,PHOS-FLAGS,PHOS,FLAGS,BNUMP,I,25,30,-999
+1067,PERLND,PHOS-FLAGS,PHOS,FLAGS,CNUMP,I,30,35,-999
+1068,PERLND,PHOS-FLAGS,PHOS,FLAGS,PUPTFG,I,35,40,0
+1069,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,OPNID,C,0,10,None
+1070,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG1,I,11,14,0
+1071,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG2,I,14,17,0
+1072,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG3,I,18,21,0
+1073,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG4,I,21,24,0
+1074,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG5,I,26,29,0
+1075,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG6,I,29,32,0
+1076,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG7,I,33,36,0
+1077,PERLND,PHOS-AD-FLAGS,PHOS,FLAGS,PHADFG8,I,36,39,0
+1078,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,OPNID,C,0,10,None
+1079,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,SKPLP,R,10,20,0
+1080,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,UKPLP,R,20,30,0
+1081,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,LKPLP,R,30,40,0
+1082,PERLND,PHOS-UPTAKE,PHOS,PARAMETERS,AKPLP,R,40,50,0
+1083,PERLND,MON-PHOSUPT,PHOS,PHOS,OPNID,C,0,10,None
+1084,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPJAN,R,10,15,0
+1085,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPFEB,R,15,20,0
+1086,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPMAR,R,20,25,0
+1087,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPAPR,R,25,30,0
+1088,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPMAY,R,30,35,0
+1089,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPJUN,R,35,40,0
+1090,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPJUL,R,40,45,0
+1091,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPAUG,R,45,50,0
+1092,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPSEP,R,50,55,0
+1093,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPOCT,R,55,60,0
+1094,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPNOV,R,60,65,0
+1095,PERLND,MON-PHOSUPT,PHOS,PHOS,PLPDEC,R,65,70,0
+1096,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,OPNID,C,0,10,None
+1097,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THPLP,R,10,20,1.07
+1098,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKDSP,R,20,30,1.05
+1099,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKADP,R,30,40,1.05
+1100,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKIMP,R,40,50,1.07
+1101,PERLND,PHOS-FSTGEN,PHOS,PARAMETERS,THKMP,R,50,60,1.07
+1102,PERLND,PHOS-FSTPM,PHOS,PHOS,OPNID,C,0,10,None
+1103,PERLND,PHOS-FSTPM,PHOS,PHOS,KDSP,R,10,20,0
+1104,PERLND,PHOS-FSTPM,PHOS,PHOS,KADP,R,20,30,0
+1105,PERLND,PHOS-FSTPM,PHOS,PHOS,KIMP,R,30,40,0
+1106,PERLND,PHOS-FSTPM,PHOS,PHOS,KMP,R,40,50,0
+1107,PERLND,PHOS-CMAX,PHOS,PARAMETERS,OPNID,C,0,10,0
+1108,PERLND,PHOS-CMAX,PHOS,PARAMETERS,CMAX,R,10,20,0
+1109,PERLND,PHOS-SVALPM,PHOS,PHOS,OPNID,C,0,10,None
+1110,PERLND,PHOS-SVALPM,PHOS,PHOS,XFIX,R,10,20,0
+1111,PERLND,PHOS-SVALPM,PHOS,PHOS,K1,R,20,30,0
+1112,PERLND,PHOS-SVALPM,PHOS,PHOS,N1,R,30,40,-999
+1113,PERLND,PHOS-YIELD,PHOS,PARAMETERS,OPNID,C,0,10,None
+1114,PERLND,PHOS-YIELD,PHOS,PARAMETERS,PUPTGT,R,10,20,0
+1115,PERLND,PHOS-YIELD,PHOS,PARAMETERS,PMXRAT,R,20,30,1
+1116,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,OPNID,C,0,10,None
+1117,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUJAN,R,10,15,0
+1118,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUFEB,R,15,20,0
+1119,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUMAR,R,20,25,0
+1120,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUAPR,R,25,30,0
+1121,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUMAY,R,30,35,0
+1122,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUJUN,R,35,40,0
+1123,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUJUL,R,40,45,0
+1124,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUAUG,R,45,50,0
+1125,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUSEP,R,50,55,0
+1126,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUOCT,R,55,60,0
+1127,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUNOV,R,60,65,0
+1128,PERLND,MON-PUPT-FR1,PHOS,MONTHLYS,TPUDEC,R,65,70,0
+1129,PERLND,MON-PUPT-FR2,PHOS,PHOS,OPNID,C,0,10,None
+1130,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUJAN,R,10,15,0
+1131,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUFEB,R,15,20,0
+1132,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUMAR,R,20,25,0
+1133,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUAPR,R,25,30,0
+1134,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUMAY,R,30,35,0
+1135,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUJUN,R,35,40,0
+1136,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUJUL,R,40,45,0
+1137,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUAUG,R,45,50,0
+1138,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUSEP,R,50,55,0
+1139,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUOCT,R,55,60,0
+1140,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUNOV,R,60,65,0
+1141,PERLND,MON-PUPT-FR2,PHOS,PHOS,LPUDEC,R,65,70,0
+1142,PERLND,PHOS-STOR1,PHOS,PHOS,OPNID,C,0,10,None
+1143,PERLND,PHOS-STOR1,PHOS,PHOS,ORGP,R,10,20,0
+1144,PERLND,PHOS-STOR1,PHOS,PHOS,P4AD,R,20,30,0
+1145,PERLND,PHOS-STOR1,PHOS,PHOS,P4SU,R,30,40,0
+1146,PERLND,PHOS-STOR1,PHOS,PHOS,PLTP,R,40,50,0
+1147,PERLND,PHOS-STOR2,PHOS,PARAMETERS,OPNID,C,0,10,0
+1148,PERLND,PHOS-STOR2,PHOS,PARAMETERS,IP4SU,R,10,20,0
+1149,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,OPNID,C,0,10,None
+1150,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG1,I,11,14,0
+1151,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG2,I,14,17,0
+1152,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG3,I,18,21,0
+1153,PERLND,TRAC-AD-FLAGS,TRACER,FLAGS,TRADFG4,I,21,24,0
+1154,PERLND,TRAC-ID,TRACER,PARAMETERS,OPNID,C,0,10,None
+1155,PERLND,TRAC-ID,TRACER,PARAMETERS,TRACID,C,10,30,0
+1156,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,OPNID,C,0,10,0
+1157,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,STRSU,R,10,20,0
+1158,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,UTRSU,R,20,30,0
+1159,PERLND,TRAC-TOPSTOR,TRACER,PARAMETERS,ITRSU,R,30,40,0
+1160,PERLND,TRAC-SUBSTOR,TRACER,PARAMETERS,OPNID,C,0,10,0
+1161,PERLND,TRAC-SUBSTOR,TRACER,PARAMETERS,LTRSU,R,10,20,0
+1162,PERLND,TRAC-SUBSTOR,TRACER,PARAMETERS,ATRSU,R,20,30,0
+1163,IMPLND,ACTIVITY,GENERAL,ACTIVITY,OPNID,C,0,10,None
+1164,IMPLND,ACTIVITY,GENERAL,ACTIVITY,ATMPFG,I,10,15,0
+1165,IMPLND,ACTIVITY,GENERAL,ACTIVITY,SNOWFG,I,15,20,0
+1166,IMPLND,ACTIVITY,GENERAL,ACTIVITY,IWATFG,I,20,25,0
+1167,IMPLND,ACTIVITY,GENERAL,ACTIVITY,SLDFG,I,25,30,0
+1168,IMPLND,ACTIVITY,GENERAL,ACTIVITY,IWGFG,I,30,35,0
+1169,IMPLND,ACTIVITY,GENERAL,ACTIVITY,IQALFG,I,35,40,0
+1170,IMPLND,PRINT-INFO,GENERAL,SKIP,OPNID,C,0,10,None
+1171,IMPLND,PRINT-INFO,GENERAL,SKIP,ATMPPR,I,10,15,4
+1172,IMPLND,PRINT-INFO,GENERAL,SKIP,SNOWPR,I,15,20,4
+1173,IMPLND,PRINT-INFO,GENERAL,SKIP,IWATPR,I,20,25,4
+1174,IMPLND,PRINT-INFO,GENERAL,SKIP,SLDPR,I,25,30,4
+1175,IMPLND,PRINT-INFO,GENERAL,SKIP,IWGPR,I,30,35,4
+1176,IMPLND,PRINT-INFO,GENERAL,SKIP,IQALPR,I,35,40,4
+1177,IMPLND,PRINT-INFO,GENERAL,SKIP,PIVL,I,40,45,1
+1178,IMPLND,PRINT-INFO,GENERAL,SKIP,PYREND,I,45,50,9
+1179,IMPLND,BINARY-INFO,GENERAL,BINOUT,OPNID,C,0,10,None
+1180,IMPLND,BINARY-INFO,GENERAL,BINOUT,ATEMP,I,10,15,4
+1181,IMPLND,BINARY-INFO,GENERAL,BINOUT,SNOW,I,15,20,4
+1182,IMPLND,BINARY-INFO,GENERAL,BINOUT,IWATER,I,20,25,4
+1183,IMPLND,BINARY-INFO,GENERAL,BINOUT,SOLIDS,I,25,30,4
+1184,IMPLND,BINARY-INFO,GENERAL,BINOUT,IWTGAS,I,30,35,4
+1185,IMPLND,BINARY-INFO,GENERAL,BINOUT,IQUAL,I,35,40,4
+1186,IMPLND,BINARY-INFO,GENERAL,BINOUT,PIVL,I,40,45,1
+1187,IMPLND,BINARY-INFO,GENERAL,BINOUT,PYREND,I,45,50,9
+1188,IMPLND,GEN-INFO,GENERAL,INFO,OPNID,C,0,10,None
+1189,IMPLND,GEN-INFO,GENERAL,INFO,LSID,C,10,30,9
+1190,IMPLND,GEN-INFO,GENERAL,INFO,IUNITS,I,35,40,1
+1191,IMPLND,GEN-INFO,GENERAL,INFO,OUNITS,I,40,45,1
+1192,IMPLND,GEN-INFO,GENERAL,INFO,PUNIT1,I,45,50,0
+1193,IMPLND,GEN-INFO,GENERAL,INFO,PUNIT2,I,50,55,0
+1194,IMPLND,GEN-INFO,GENERAL,INFO,BUNIT1,I,55,60,0
+1195,IMPLND,GEN-INFO,GENERAL,INFO,BUNIT2,I,60,65,0
+1196,IMPLND,ATEMP-DAT,ATEMP,PARAMETERS,OPNID,C,0,10,None
+1197,IMPLND,ATEMP-DAT,ATEMP,PARAMETERS,ELDAT,R,10,20,0
+1198,IMPLND,ATEMP-DAT,ATEMP,PARAMETERS,AIRTMP,R,20,30,60
+1199,IMPLND,ICE-FLAG,SNOW,FLAGS,OPNID,C,0,10,None
+1200,IMPLND,ICE-FLAG,SNOW,FLAGS,ICEFG,I,10,15,0
+1201,IMPLND,SNOW-FLAGS,SNOW,FLAGS,OPNID,C,0,10,0
+1202,IMPLND,SNOW-FLAGS,SNOW,FLAGS,SNOPFG,I,10,15,0
+1203,IMPLND,SNOW-FLAGS,SNOW,FLAGS,VKMFG,I,15,20,0
+1204,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,OPNID,C,0,10,None
+1205,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,LAT,R,10,20,40
+1206,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,MELEV,R,20,30,0
+1207,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,SHADE,R,30,40,0
+1208,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,SNOWCF,R,40,50,-999
+1209,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,COVIND,R,50,60,-999
+1210,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,KMELT,R,60,70,0
+1211,IMPLND,SNOW-PARM1,SNOW,PARAMETERS,TBASE,R,70,80,32
+1212,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,OPNID,C,0,10,None
+1213,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,RDCSN,R,10,20,0.15
+1214,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,TSNOW,R,20,30,32
+1215,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,SNOEVP,R,30,40,0.1
+1216,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,CCFACT,R,40,50,1
+1217,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,MWATER,R,50,60,0.03
+1218,IMPLND,SNOW-PARM2,SNOW,PARAMETERS,MGMELT,R,60,70,0.01
+1219,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,OPNID,C,0,10,None
+1220,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMJAN,R,10,15,0
+1221,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMFEB,R,15,20,0
+1222,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMMAR,R,20,25,0
+1223,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMAPR,R,25,30,0
+1224,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMMAY,R,30,35,0
+1225,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMJUN,R,35,40,0
+1226,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMJUL,R,40,45,0
+1227,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMAUG,R,45,50,0
+1228,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMSEP,R,50,55,0
+1229,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMOCT,R,55,60,0
+1230,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMNOV,R,60,65,0
+1231,IMPLND,MON-MELT-FAC,SNOW,MONTHLYS,KMDEC,R,65,70,0
+1232,IMPLND,SNOW-INIT1,SNOW,STATES,OPNID,C,0,10,None
+1233,IMPLND,SNOW-INIT1,SNOW,STATES,PKSNOW,R,10,20,0
+1234,IMPLND,SNOW-INIT1,SNOW,STATES,PKICE,R,20,30,0
+1235,IMPLND,SNOW-INIT1,SNOW,STATES,PKWATR,R,30,40,0
+1236,IMPLND,SNOW-INIT1,SNOW,STATES,RDENPF,R,40,50,0.2
+1237,IMPLND,SNOW-INIT1,SNOW,STATES,DULL,R,50,60,400
+1238,IMPLND,SNOW-INIT1,SNOW,STATES,PAKTMP,R,60,70,32
+1239,IMPLND,SNOW-INIT2,SNOW,STATES,OPNID,C,0,10,0
+1240,IMPLND,SNOW-INIT2,SNOW,STATES,COVINX,R,10,20,0.01
+1241,IMPLND,SNOW-INIT2,SNOW,STATES,XLNMLT,R,20,30,0
+1242,IMPLND,SNOW-INIT2,SNOW,STATES,SKYCLR,R,30,40,1
+1243,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,OPNID,C,0,10,None
+1244,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,CSNOFG,I,10,15,0
+1245,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,RTOPFG,I,15,20,0
+1246,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,VRSFG,I,20,25,0
+1247,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,VNNFG,I,25,30,0
+1248,IMPLND,IWAT-PARM1,IWATER,PARAMETERS,RTLIFG,I,30,35,0
+1249,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,OPNID,C,0,10,None
+1250,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,LSUR,R,10,20,-999
+1251,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,SLSUR,R,20,30,-999
+1252,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,NSUR,R,30,40,0.1
+1253,IMPLND,IWAT-PARM2,IWATER,PARAMETERS,RETSC,R,40,50,0
+1254,IMPLND,IWAT-PARM3,IWATER,PARAMETERS,OPNID,C,0,10,None
+1255,IMPLND,IWAT-PARM3,IWATER,PARAMETERS,PETMAX,R,10,20,40
+1256,IMPLND,IWAT-PARM3,IWATER,PARAMETERS,PETMIN,R,20,30,35
+1257,IMPLND,MON-RETN,IWATER,MONTHLYS,OPNID,C,0,10,None
+1258,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS1,R,10,15,0
+1259,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS2,R,15,20,0
+1260,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS3,R,20,25,0
+1261,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS4,R,25,30,0
+1262,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS5,R,30,35,0
+1263,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS6,R,35,40,0
+1264,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS7,R,40,45,0
+1265,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS8,R,45,50,0
+1266,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS9,R,50,55,0
+1267,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS10,R,55,60,0
+1268,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS11,R,60,65,0
+1269,IMPLND,MON-RETN,IWATER,MONTHLYS,RETS12,R,65,70,0
+1270,IMPLND,MON-MANNING,IWATER,MONTHLYS,OPNID,C,0,10,None
+1271,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR1,R,10,15,0.1
+1272,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR2,R,15,20,0.1
+1273,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR3,R,20,25,0.1
+1274,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR4,R,25,30,0.1
+1275,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR5,R,30,35,0.1
+1276,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR6,R,35,40,0.1
+1277,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR7,R,40,45,0.1
+1278,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR8,R,45,50,0.1
+1279,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR9,R,50,55,0.1
+1280,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR10,R,55,60,0.1
+1281,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR11,R,60,65,0.1
+1282,IMPLND,MON-MANNING,IWATER,MONTHLYS,NSUR12,R,65,70,0.1
+1283,IMPLND,IWAT-STATE1,IWATER,STATES,OPNID,C,0,10,None
+1284,IMPLND,IWAT-STATE1,IWATER,STATES,RETS,R,10,20,0.001
+1285,IMPLND,IWAT-STATE1,IWATER,STATES,SURS,R,20,30,0.001
+1286,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,OPNID,C,0,10,None
+1287,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,VASDFG,I,10,15,0
+1288,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,VRSDFG,I,15,20,0
+1289,IMPLND,SLD-PARM1,SOLIDS,PARAMETERS,SDOPFG,I,20,25,0
+1290,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,OPNID,C,0,10,0
+1291,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,KEIM,R,10,20,0
+1292,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,JEIM,R,20,30,-999
+1293,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,ACCSDP,R,30,40,0
+1294,IMPLND,SLD-PARM2,SOLIDS,PARAMETERS,REMSDP,R,40,50,0
+1295,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,OPNID,C,0,10,None
+1296,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS1,R,10,15,0
+1297,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,AACS2,R,15,20,0
+1298,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS3,R,20,25,0
+1299,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS4,R,25,30,0
+1300,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS5,R,30,35,0
+1301,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS6,R,35,40,0
+1302,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS7,R,40,45,0
+1303,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS8,R,45,50,0
+1304,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS9,R,50,55,0
+1305,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS10,R,55,60,0
+1306,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS11,R,60,65,0
+1307,IMPLND,MON-SACCUM,SOLIDS,MONTHLYS,ACCS12,R,65,70,0
+1308,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,OPNID,C,0,10,None
+1309,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS1,R,10,15,0
+1310,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS2,R,15,20,0
+1311,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS3,R,20,25,0
+1312,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS4,R,25,30,0
+1313,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS5,R,30,35,0
+1314,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS6,R,35,40,0
+1315,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS7,R,40,45,0
+1316,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS8,R,45,50,0
+1317,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS9,R,50,55,0
+1318,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS10,R,55,60,0
+1319,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS11,R,60,65,0
+1320,IMPLND,MON-REMOV,SOLIDS,MONTHLYS,REMS12,R,65,70,0
+1321,IMPLND,SLD-STOR,SOLIDS,PARAMETERS,OPNID,C,0,10,None
+1322,IMPLND,SLD-STOR,SOLIDS,PARAMETERS,SLDS,R,10,20,0
+1323,IMPLND,IWT-PARM1,IWTGAS,PARAMETERS,OPNID,C,0,10,None
+1324,IMPLND,IWT-PARM1,IWTGAS,PARAMETERS,WTFVFG,I,10,15,0
+1325,IMPLND,IWT-PARM1,IWTGAS,PARAMETERS,CSNOFG,I,15,20,0
+1326,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,OPNID,C,0,10,None
+1327,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,ELEV,R,10,20,0
+1328,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,AWTF,R,20,30,32
+1329,IMPLND,IWT-PARM2,IWTGAS,PARAMETERS,BWTF,R,30,40,1
+1330,IMPLND,LAT-FACTOR,IWTGAS,PARAMETERS,OPNID,C,0,10,None
+1331,IMPLND,LAT-FACTOR,IWTGAS,PARAMETERS,SDLFAC,R,10,20,0
+1332,IMPLND,LAT-FACTOR,IWTGAS,PARAMETERS,SLIFAC,R,20,30,0
+1333,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,OPNID,C,0,10,None
+1334,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF1,R,10,15,32
+1335,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF2,R,15,20,32
+1336,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF3,R,20,25,32
+1337,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF4,R,25,30,32
+1338,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF5,R,30,35,32
+1339,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF6,R,35,40,32
+1340,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF7,R,40,45,32
+1341,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF8,R,45,50,32
+1342,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF9,R,50,55,32
+1343,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF10,R,55,60,32
+1344,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF11,R,60,65,32
+1345,IMPLND,MON-AWTF,IWTGAS,MONTHLYS,AWTF12,R,65,70,32
+1346,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,OPNID,C,0,10,None
+1347,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF1,R,10,15,1
+1348,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF2,R,15,20,1
+1349,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF3,R,20,25,1
+1350,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF4,R,25,30,1
+1351,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF5,R,30,35,1
+1352,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF6,R,35,40,1
+1353,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF7,R,40,45,1
+1354,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF8,R,45,50,1
+1355,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF9,R,50,55,1
+1356,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF10,R,55,60,1
+1357,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF11,R,60,65,1
+1358,IMPLND,MON-BWTF,IWTGAS,MONTHLYS,BWTF12,R,65,70,1
+1359,IMPLND,IWT-INIT,IWTGAS,STATES,OPNID,C,0,10,None
+1360,IMPLND,IWT-INIT,IWTGAS,STATES,SOTMP,R,10,20,60
+1361,IMPLND,IWT-INIT,IWTGAS,STATES,SODOX,R,20,30,0
+1362,IMPLND,IWT-INIT,IWTGAS,STATES,SOCO2,R,30,40,0
+1363,IMPLND,NQUALS,IQUAL,IQUAL,OPNID,C,0,10,None
+1364,IMPLND,NQUALS,IQUAL,IQUAL,NQUAL,I,10,15,1
+1365,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,OPNID,C,0,11,None
+1366,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG1,I,11,14,0
+1367,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG2,I,14,18,0
+1368,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG3,I,18,21,0
+1369,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG4,I,21,25,0
+1370,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG5,I,25,28,0
+1371,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG6,I,28,32,0
+1372,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG7,I,32,35,0
+1373,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG8,I,35,39,0
+1374,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG9,I,39,42,0
+1375,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG10,I,42,46,0
+1376,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG11,I,46,49,0
+1377,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG12,I,49,53,0
+1378,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG13,I,53,56,0
+1379,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG14,I,56,60,0
+1380,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG15,I,60,63,0
+1381,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG16,I,63,67,0
+1382,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG17,I,67,70,0
+1383,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG18,I,70,74,0
+1384,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG19,I,74,77,0
+1385,IMPLND,IQL-AD-FLAGS,IQUAL,FLAGS,IQADFG20,I,77,80,0
+1386,IMPLND,QUAL-PROPS,IQUAL,IQUAL,OPNID,C,0,10,None
+1387,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QUALID,C,10,22,None
+1388,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QTYID,C,26,30,None
+1389,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QSDFG,I,30,35,0
+1390,IMPLND,QUAL-PROPS,IQUAL,IQUAL,VPFWFG,I,35,40,0
+1391,IMPLND,QUAL-PROPS,IQUAL,IQUAL,QSOFG,I,40,45,0
+1392,IMPLND,QUAL-PROPS,IQUAL,IQUAL,VQOFG,I,45,50,0
+1393,IMPLND,QUAL-INPUT,IQUAL,IQUAL,OPNID,C,0,10,None
+1394,IMPLND,QUAL-INPUT,IQUAL,IQUAL,SQO,R,10,18,0
+1395,IMPLND,QUAL-INPUT,IQUAL,IQUAL,POTFW,R,18,26,0
+1396,IMPLND,QUAL-INPUT,IQUAL,IQUAL,ACQOP,R,26,34,0
+1397,IMPLND,QUAL-INPUT,IQUAL,IQUAL,SQOLIM,R,34,42,0.000001
+1398,IMPLND,QUAL-INPUT,IQUAL,IQUAL,WSQOP,R,42,50,1.64
+1399,IMPLND,MON-POTFW,IQUAL,IQUAL,OPNID,C,0,10,None
+1400,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF1,R,10,15,0
+1401,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF2,R,15,20,0
+1402,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF3,R,20,25,0
+1403,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF4,R,25,30,0
+1404,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF5,R,30,35,0
+1405,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF6,R,35,40,0
+1406,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF7,R,40,45,0
+1407,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF8,R,45,50,0
+1408,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF9,R,50,55,0
+1409,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF10,R,55,60,0
+1410,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF11,R,60,65,0
+1411,IMPLND,MON-POTFW,IQUAL,IQUAL,POTF12,R,65,70,0
+1412,IMPLND,MON-ACCUM,IQUAL,IQUAL,OPNID,C,0,10,None
+1413,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO1,R,10,15,0
+1414,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO2,R,15,20,0
+1415,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO3,R,20,25,0
+1416,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO4,R,25,30,0
+1417,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO5,R,30,35,0
+1418,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO6,R,35,40,0
+1419,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO7,R,40,45,0
+1420,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO8,R,45,50,0
+1421,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO9,R,50,55,0
+1422,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO10,R,55,60,0
+1423,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO11,R,60,65,0
+1424,IMPLND,MON-ACCUM,IQUAL,IQUAL,ACQO12,R,65,70,0
+1425,IMPLND,MON-SQOLIM,IQUAL,IQUAL,OPNID,C,0,10,None
+1426,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL1,R,10,15,0.000001
+1427,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL2,R,15,20,0.000001
+1428,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL3,R,20,25,0.000001
+1429,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL4,R,25,30,0.000001
+1430,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL5,R,30,35,0.000001
+1431,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL6,R,35,40,0.000001
+1432,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL7,R,40,45,0.000001
+1433,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL8,R,45,50,0.000001
+1434,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL9,R,50,55,0.000001
+1435,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL10,R,55,60,0.000001
+1436,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL11,R,60,65,0.000001
+1437,IMPLND,MON-SQOLIM,IQUAL,IQUAL,SQOL12,R,65,70,0.000001
+1438,RCHRES,ACTIVITY,GENERAL,ACTIVITY,OPNID,C,0,10,None
+1439,RCHRES,ACTIVITY,GENERAL,ACTIVITY,HYDRFG,I,10,15,0
+1440,RCHRES,ACTIVITY,GENERAL,ACTIVITY,ADFG,I,15,20,0
+1441,RCHRES,ACTIVITY,GENERAL,ACTIVITY,CONSFG,I,20,25,0
+1442,RCHRES,ACTIVITY,GENERAL,ACTIVITY,HTFG,I,25,30,0
+1443,RCHRES,ACTIVITY,GENERAL,ACTIVITY,SEDFG,I,30,35,0
+1444,RCHRES,ACTIVITY,GENERAL,ACTIVITY,GQALFG,I,35,40,0
+1445,RCHRES,ACTIVITY,GENERAL,ACTIVITY,OXFG,I,40,45,0
+1446,RCHRES,ACTIVITY,GENERAL,ACTIVITY,NUTFG,I,45,50,0
+1447,RCHRES,ACTIVITY,GENERAL,ACTIVITY,PLKFG,I,50,55,0
+1448,RCHRES,ACTIVITY,GENERAL,ACTIVITY,PHFG,I,55,60,0
+1449,RCHRES,PRINT-INFO,GENERAL,SKIP,OPNID,C,0,10,None
+1450,RCHRES,PRINT-INFO,GENERAL,SKIP,HYDRPR,I,10,15,4
+1451,RCHRES,PRINT-INFO,GENERAL,SKIP,ADCAPR,I,15,20,4
+1452,RCHRES,PRINT-INFO,GENERAL,SKIP,CONSPR,I,20,25,4
+1453,RCHRES,PRINT-INFO,GENERAL,SKIP,HEATPR,I,25,30,4
+1454,RCHRES,PRINT-INFO,GENERAL,SKIP,SEDPR,I,30,35,4
+1455,RCHRES,PRINT-INFO,GENERAL,SKIP,GQLPR,I,35,40,4
+1456,RCHRES,PRINT-INFO,GENERAL,SKIP,OXRXPR,I,40,45,4
+1457,RCHRES,PRINT-INFO,GENERAL,SKIP,NUTRPR,I,45,50,4
+1458,RCHRES,PRINT-INFO,GENERAL,SKIP,PLNKPR,I,50,55,4
+1459,RCHRES,PRINT-INFO,GENERAL,SKIP,PHCBPR,I,55,60,4
+1460,RCHRES,PRINT-INFO,GENERAL,SKIP,PIVLPR,I,60,65,1
+1461,RCHRES,PRINT-INFO,GENERAL,SKIP,PYREND,I,65,70,9
+1462,RCHRES,BINARY-INFO,GENERAL,BINOUT,OPNID,C,0,10,None
+1463,RCHRES,BINARY-INFO,GENERAL,BINOUT,HYDR,I,10,15,4
+1464,RCHRES,BINARY-INFO,GENERAL,BINOUT,ADCALC,I,15,20,4
+1465,RCHRES,BINARY-INFO,GENERAL,BINOUT,CONS,I,20,25,4
+1466,RCHRES,BINARY-INFO,GENERAL,BINOUT,HTRCH,I,25,30,4
+1467,RCHRES,BINARY-INFO,GENERAL,BINOUT,SEDTRN,I,30,35,4
+1468,RCHRES,BINARY-INFO,GENERAL,BINOUT,GQUAL,I,35,40,4
+1469,RCHRES,BINARY-INFO,GENERAL,BINOUT,OXRX,I,40,45,4
+1470,RCHRES,BINARY-INFO,GENERAL,BINOUT,NUTRX,I,45,50,4
+1471,RCHRES,BINARY-INFO,GENERAL,BINOUT,PLANK,I,50,55,4
+1472,RCHRES,BINARY-INFO,GENERAL,BINOUT,PHCARB,I,55,60,4
+1473,RCHRES,BINARY-INFO,GENERAL,BINOUT,PIVLPR,I,60,65,1
+1474,RCHRES,BINARY-INFO,GENERAL,BINOUT,PYREND,I,65,70,9
+1475,RCHRES,GEN-INFO,GENERAL,INFO,OPNID,C,0,10,None
+1476,RCHRES,GEN-INFO,GENERAL,INFO,RCHID,C,10,30,None
+1477,RCHRES,GEN-INFO,GENERAL,INFO,NEXITS,I,30,35,1
+1478,RCHRES,GEN-INFO,GENERAL,INFO,IUNITS,I,40,45,1
+1479,RCHRES,GEN-INFO,GENERAL,INFO,OUNITS,I,45,50,1
+1480,RCHRES,GEN-INFO,GENERAL,INFO,PUNITE,I,50,55,0
+1481,RCHRES,GEN-INFO,GENERAL,INFO,PUNITM,I,55,60,0
+1482,RCHRES,GEN-INFO,GENERAL,INFO,LKFG,I,60,65,0
+1483,RCHRES,GEN-INFO,GENERAL,INFO,BUNITE,I,65,70,0
+1484,RCHRES,GEN-INFO,GENERAL,INFO,BUNITM,I,70,75,0
+1485,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,OPNID,C,0,11,None
+1486,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,VCONFG,I,11,14,0
+1487,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,AUX1FG,I,14,17,0
+1488,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,AUX2FG,I,17,20,0
+1489,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,AUX3FG,I,20,25,0
+1490,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF1,I,25,28,0
+1491,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF2,I,28,31,0
+1492,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF3,I,31,34,0
+1493,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF4,I,34,37,0
+1494,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODFVF5,I,37,40,0
+1495,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF1,I,45,48,0
+1496,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF2,I,48,51,0
+1497,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF3,I,51,54,0
+1498,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF4,I,54,57,0
+1499,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,ODGTF5,I,57,65,0
+1500,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT1,I,65,68,1
+1501,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT2,I,68,71,1
+1502,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT3,I,71,74,1
+1503,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT4,I,74,77,1
+1504,RCHRES,HYDR-PARM1,HYDR,PARAMETERS,FUNCT5,I,77,80,1
+1505,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,OPNID,C,0,10,None
+1506,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,FTBW,R,10,15,0
+1507,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,FTBUCI,R,15,20,-999
+1508,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,LEN,R,20,30,-999
+1509,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,DELTH,R,30,40,0
+1510,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,STCOR,R,40,50,0
+1511,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,KS,R,50,60,0
+1512,RCHRES,HYDR-PARM2,HYDR,PARAMETERS,DB50,R,60,70,0.01
+1513,RCHRES,MON-CONVF,HYDR,MONTHLYS,OPNID,C,0,10,None
+1514,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLJAN,R,10,15,0
+1515,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLFEB,R,15,20,0
+1516,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLMAR,R,20,25,0
+1517,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLAPR,R,25,30,0
+1518,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLMAY,R,30,35,0
+1519,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLJUN,R,35,40,0
+1520,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLJUL,R,40,45,0
+1521,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLAUG,R,45,50,0
+1522,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLSEP,R,50,55,0
+1523,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLOCT,R,55,60,0
+1524,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLNOV,R,60,65,0
+1525,RCHRES,MON-CONVF,HYDR,MONTHLYS,VOLDEC,R,65,70,0
+1526,RCHRES,HYDR-IRRIG,HYDR,PARAMETERS,OPNID,C,0,10,None
+1527,RCHRES,HYDR-IRRIG,HYDR,PARAMETERS,IREXIT,R,10,20,0
+1528,RCHRES,HYDR-IRRIG,HYDR,PARAMETERS,IRMINV,R,20,30,0
+1529,RCHRES,HYDR-INIT,HYDR,STATES,OPNID,C,0,10,None
+1530,RCHRES,HYDR-INIT,HYDR,STATES,VOL,R,10,21,0
+1531,RCHRES,HYDR-INIT,HYDR,STATES,ICAT,R,21,25,-1
+1532,RCHRES,HYDR-INIT,HYDR,STATES,COLIN1,R,25,30,4
+1533,RCHRES,HYDR-INIT,HYDR,STATES,COLIN2,R,30,35,4
+1534,RCHRES,HYDR-INIT,HYDR,STATES,COLIN3,R,35,40,4
+1535,RCHRES,HYDR-INIT,HYDR,STATES,COLIN4,R,40,45,4
+1536,RCHRES,HYDR-INIT,HYDR,STATES,COLIN5,R,45,50,4
+1537,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG1,R,55,60,0
+1538,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG2,R,60,65,0
+1539,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG3,R,65,70,0
+1540,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG4,R,70,75,0
+1541,RCHRES,HYDR-INIT,HYDR,STATES,OUTDG5,R,75,80,0
+1542,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,OPNID,C,0,10,None
+1543,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CPREC,C,11,15,None
+1544,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CEVAP,C,16,20,None
+1545,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL1,C,21,25,None
+1546,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL2,C,26,30,None
+1547,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL3,C,31,35,None
+1548,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL4,C,36,40,None
+1549,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,CFVOL5,C,41,45,None
+1550,RCHRES,HYDR-CATEGORY,HYDR,PARAMETERS,NOCGT,I,45,50,0
+1551,RCHRES,HYDR-CINIT,HYDR,STATES,OPNID,C,0,10,None
+1552,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG1,C,10,14,None
+1553,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC1,R,14,20,0
+1554,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG2,C,20,24,None
+1555,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC2,R,24,30,0
+1556,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG3,C,30,34,None
+1557,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC3,R,34,40,0
+1558,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG4,C,40,44,None
+1559,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC4,R,44,50,0
+1560,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG5,C,50,54,None
+1561,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC5,R,54,60,0
+1562,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG6,C,60,64,None
+1563,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC6,R,64,70,0
+1564,RCHRES,HYDR-CINIT,HYDR,STATES,CTAG7,C,70,74,None
+1565,RCHRES,HYDR-CINIT,HYDR,STATES,CFRAC7,R,74,80,0
+1566,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,OPNID,C,0,10,None
+1567,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG1,C,10,14,None
+1568,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC1,R,14,20,0
+1569,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG2,C,20,24,None
+1570,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC2,R,24,30,0
+1571,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG3,C,30,34,None
+1572,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC3,R,34,40,0
+1573,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG4,C,40,44,None
+1574,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC4,R,44,50,0
+1575,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG5,C,50,54,None
+1576,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC5,R,54,60,0
+1577,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG6,C,60,64,None
+1578,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC6,R,64,70,0
+1579,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CTAG7,C,70,74,None
+1580,RCHRES,HYDR-CPREC,HYDR,PARAMETERS,CPREC7,R,74,80,0
+1581,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,OPNID,C,0,10,None
+1582,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG1,C,10,14,None
+1583,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI1,R,14,17,0
+1584,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP1,R,17,23,0
+1585,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG2,C,23,27,None
+1586,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI2,R,27,30,0
+1587,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP2,R,30,36,0
+1588,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG3,C,36,40,None
+1589,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI3,R,40,43,0
+1590,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP3,R,43,49,0
+1591,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG4,C,49,53,None
+1592,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI4,R,53,56,0
+1593,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP4,R,56,62,0
+1594,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CTAG5,C,62,66,None
+1595,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CPRI5,R,66,69,0
+1596,RCHRES,HYDR-CEVAP,HYDR,PARAMETERS,CEVAP5,R,69,75,0
+1597,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,OPNID,C,0,10,None
+1598,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG1,C,10,14,None
+1599,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT1,R,14,16,0
+1600,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI1,R,16,19,0
+1601,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL1,R,19,25,0
+1602,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG2,C,25,29,None
+1603,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT2,R,29,31,0
+1604,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI2,R,31,34,0
+1605,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL2,R,34,40,0
+1606,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG3,C,40,44,None
+1607,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT3,R,44,46,0
+1608,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI3,R,46,49,0
+1609,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL3,R,49,55,0
+1610,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CTAG4,C,55,59,None
+1611,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CEXIT4,R,59,61,0
+1612,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CPRI4,R,61,64,0
+1613,RCHRES,HYDR-CFVOL,HYDR,PARAMETERS,CFVOL,R,64,70,0
+1614,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,OPNID,C,0,10,None
+1615,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CTAG1,C,10,14,None
+1616,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CEXIT1,R,14,16,0
+1617,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CPRI1,C,16,28,None
+1618,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CDEM1,R,28,34,0
+1619,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CTAG2,C,34,38,None
+1620,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CEXIT2,R,38,40,0
+1621,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CPRI2,C,40,52,None
+1622,RCHRES,HYDR-CDEMAND,HYDR,PARAMETERS,CDEM2,R,52,58,0
+1623,RCHRES,ADCALC-DATA,ADCALC,PARAMETERS,OPNID,C,0,10,None
+1624,RCHRES,ADCALC-DATA,ADCALC,PARAMETERS,CRRAT,R,10,20,1.5
+1625,RCHRES,ADCALC-DATA,ADCALC,PARAMETERS,VOL,R,20,30,0
+1626,RCHRES,NCONS,CONS,CONS,OPNID,C,0,10,None
+1627,RCHRES,NCONS,CONS,CONS,NCONS,I,10,15,1
+1628,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,OPNID,C,0,11,None
+1629,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG1,I,11,14,0
+1630,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG2,I,14,18,0
+1631,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG3,I,18,21,0
+1632,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG4,I,21,25,0
+1633,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG5,I,25,28,0
+1634,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG6,I,28,32,0
+1635,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG7,I,32,35,0
+1636,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG8,I,35,39,0
+1637,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG9,I,39,42,0
+1638,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG10,I,42,46,0
+1639,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG11,I,46,49,0
+1640,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG12,I,49,53,0
+1641,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG14,I,56,60,0
+1642,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG15,I,60,63,0
+1643,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG16,I,63,67,0
+1644,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG17,I,67,70,0
+1645,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG18,I,70,74,0
+1646,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG19,I,74,77,0
+1647,RCHRES,CONS-AD-FLAGS,CONS,FLAGS,COADFG20,I,77,80,0
+1648,RCHRES,CONS-DATA,CONS,CONS,OPNID,C,0,10,None
+1649,RCHRES,CONS-DATA,CONS,CONS,CONID,C,10,30,None
+1650,RCHRES,CONS-DATA,CONS,CONS,CON,R,30,40,0
+1651,RCHRES,CONS-DATA,CONS,CONS,CONCID,C,42,50,None
+1652,RCHRES,CONS-DATA,CONS,CONS,CONV,R,50,60,-999
+1653,RCHRES,CONS-DATA,CONS,CONS,QTYID,C,62,70,-999
+1654,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,OPNID,C,0,10,None
+1655,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,BEDFLG,I,10,15,0
+1656,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,TGFLG,I,15,20,2
+1657,RCHRES,HT-BED-FLAGS,HTRCH,FLAGS,TSTOP,I,20,25,55
+1658,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,OPNID,C,0,10,None
+1659,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,ELEV,R,10,20,0
+1660,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,ELDAT,R,20,30,0
+1661,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,CFSAEX,R,30,40,1
+1662,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,KATRAD,R,40,50,9.37
+1663,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,KCOND,R,50,60,6.12
+1664,RCHRES,HEAT-PARM,HTRCH,PARAMETERS,KEVAP,R,60,70,2.24
+1665,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,OPNID,C,0,10,None
+1666,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,MUDDEP,R,10,20,0.33
+1667,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,TGRND,R,20,30,59
+1668,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,KMUD,R,30,40,50
+1669,RCHRES,HT-BED-PARM,HTRCH,PARAMETERS,KGRND,R,40,50,1.4
+1670,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,OPNID,C,0,10,None
+1671,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND1,R,10,15,59
+1672,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND2,R,15,20,59
+1673,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND3,R,20,25,59
+1674,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND4,R,25,30,59
+1675,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND5,R,30,35,59
+1676,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND6,R,35,40,59
+1677,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND7,R,40,45,59
+1678,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND8,R,45,50,59
+1679,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND9,R,50,55,59
+1680,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND10,R,55,60,59
+1681,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND11,R,60,65,59
+1682,RCHRES,MON-HT-TGRND,HTRCH,MONTHLYS,TGRND12,R,65,70,59
+1683,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,OPNID,C,0,10,None
+1684,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH1,R,10,20,0
+1685,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH2,R,20,30,0
+1686,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH3,R,30,40,0
+1687,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH4,R,40,50,0
+1688,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH5,R,50,60,0
+1689,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH6,R,60,70,0
+1690,RCHRES,HT-BED-DELH,HTRCH,EXTENDED,DELH7,R,70,80,0
+1691,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,OPNID,C,0,10,None
+1692,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT1,R,10,20,0
+1693,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT2,R,20,30,0
+1694,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT3,R,30,40,0
+1695,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT4,R,40,50,0
+1696,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT5,R,50,60,0
+1697,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT6,R,60,70,0
+1698,RCHRES,HT-BED-DELTT,HTRCH,EXTENDED,DELTT7,R,70,80,0
+1699,RCHRES,HEAT-INIT,HTRCH,STATES,OPNID,C,0,10,None
+1700,RCHRES,HEAT-INIT,HTRCH,STATES,TW,R,10,20,60
+1701,RCHRES,HEAT-INIT,HTRCH,STATES,AIRTMP,R,20,30,60
+1702,RCHRES,SANDFG,SEDTRN,FLAGS,OPNID,C,0,10,None
+1703,RCHRES,SANDFG,SEDTRN,FLAGS,SANDFG,I,10,17,3
+1704,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,OPNID,C,0,10,None
+1705,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,BEDWID,R,10,20,-999
+1706,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,BEDWRN,R,20,30,100
+1707,RCHRES,SED-GENPARM,SEDTRN,PARAMETERS,POR,R,30,40,0.5
+1708,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,OPNID,C,0,10,None
+1709,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,LEN,R,10,20,-999
+1710,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,DELTH,R,20,30,0
+1711,RCHRES,SED-HYDPARM,SEDTRN,PARAMETERS,DB50,R,30,40,0.01
+1712,RCHRES,SAND-PM,SEDTRN,PARAMETERS,OPNID,C,0,10,None
+1713,RCHRES,SAND-PM,SEDTRN,PARAMETERS,D,R,10,20,-999
+1714,RCHRES,SAND-PM,SEDTRN,PARAMETERS,W,R,20,30,-999
+1715,RCHRES,SAND-PM,SEDTRN,PARAMETERS,RHO,R,30,40,2.65
+1716,RCHRES,SAND-PM,SEDTRN,PARAMETERS,KSAND,R,40,50,0
+1717,RCHRES,SAND-PM,SEDTRN,PARAMETERS,EXPSND,R,50,60,0
+1718,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,OPNID,C,0,10,None
+1719,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,D,R,10,20,0
+1720,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,W,R,20,30,0
+1721,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,RHO,R,30,40,2.65
+1722,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,TAUCD,R,40,50,1.00E+10
+1723,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,TAUCS,R,50,60,1.00E+10
+1724,RCHRES,SILT-CLAY-PM,SEDTRN,SILTCLAY,M,R,60,70,0
+1725,RCHRES,SSED-INIT,SEDTRN,STATES,OPNID,C,0,10,None
+1726,RCHRES,SSED-INIT,SEDTRN,STATES,SSED1,R,10,20,0
+1727,RCHRES,SSED-INIT,SEDTRN,STATES,SSED2,R,20,30,0
+1728,RCHRES,SSED-INIT,SEDTRN,STATES,SSED3,R,30,40,0
+1729,RCHRES,BED-INIT,SEDTRN,STATES,OPNID,C,0,10,None
+1730,RCHRES,BED-INIT,SEDTRN,STATES,BEDDEP,R,10,20,0
+1731,RCHRES,BED-INIT,SEDTRN,STATES,SANDFR,R,20,30,1
+1732,RCHRES,BED-INIT,SEDTRN,STATES,SILTFR,R,30,40,0
+1733,RCHRES,BED-INIT,SEDTRN,STATES,CLAYFR,R,40,50,0
+1734,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,OPNID,C,0,10,None
+1735,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,NGQUAL,I,10,15,1
+1736,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,TEMPFG,I,15,20,2
+1737,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,PHFLAG,I,20,25,2
+1738,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,ROXFG,I,25,30,2
+1739,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,CLDFG,I,30,35,2
+1740,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,SDFG,I,35,40,2
+1741,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,PHYTFG,I,40,45,2
+1742,RCHRES,GQ-GENDATA,GQUAL,PARAMETERS,LAT,I,45,50,0
+1743,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,OPNID,C,0,10,None
+1744,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG1,I,11,14,0
+1745,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG2,I,14,17,0
+1746,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG3,I,18,21,0
+1747,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG4,I,21,24,0
+1748,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG5,I,25,28,0
+1749,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG6,I,28,31,0
+1750,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG7,I,32,35,0
+1751,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG8,I,35,38,0
+1752,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG9,I,39,42,0
+1753,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG10,I,42,45,0
+1754,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG11,I,46,49,0
+1755,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG12,I,49,52,0
+1756,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG13,I,53,56,0
+1757,RCHRES,GQ-AD-FLAGS,GQUAL,FLAGS,GQADFG14,I,56,59,0
+1758,RCHRES,GQ-QALDATA,GQUAL,GQUAL,OPNID,C,0,10,None
+1759,RCHRES,GQ-QALDATA,GQUAL,GQUAL,GQID,C,10,30,None
+1760,RCHRES,GQ-QALDATA,GQUAL,GQUAL,DQAL,R,30,40,0
+1761,RCHRES,GQ-QALDATA,GQUAL,GQUAL,CONCID,C,46,50,None
+1762,RCHRES,GQ-QALDATA,GQUAL,GQUAL,CONV,R,50,60,-999
+1763,RCHRES,GQ-QALDATA,GQUAL,GQUAL,QTYID,C,62,70,None
+1764,RCHRES,GQ-QALFG,GQUAL,GQUAL,OPNID,C,0,10,None
+1765,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG1,I,10,15,0
+1766,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG2,I,15,20,0
+1767,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG3,I,20,25,0
+1768,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG4,I,25,30,0
+1769,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG5,I,30,35,0
+1770,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG6,I,35,40,0
+1771,RCHRES,GQ-QALFG,GQUAL,GQUAL,QALFG7,I,40,45,0
+1772,RCHRES,GQ-FLG2,GQUAL,GQUAL,OPNID,C,0,10,None
+1773,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM21,I,10,15,0
+1774,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM22,I,15,20,0
+1775,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM23,I,20,25,0
+1776,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM24,I,25,30,0
+1777,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM25,I,30,35,0
+1778,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM26,I,35,40,0
+1779,RCHRES,GQ-FLG2,GQUAL,GQUAL,GQPM27,I,40,45,2
+1780,RCHRES,GQ-HYDPM,GQUAL,GQUAL,OPNID,C,0,10,None
+1781,RCHRES,GQ-HYDPM,GQUAL,GQUAL,KA,R,10,20,-999
+1782,RCHRES,GQ-HYDPM,GQUAL,GQUAL,KB,R,20,30,-999
+1783,RCHRES,GQ-HYDPM,GQUAL,GQUAL,KN,R,30,40,-999
+1784,RCHRES,GQ-HYDPM,GQUAL,GQUAL,THHYD,R,40,50,1
+1785,RCHRES,GQ-ROXPM,GQUAL,GQUAL,OPNID,C,0,10,None
+1786,RCHRES,GQ-ROXPM,GQUAL,GQUAL,KOX,R,10,20,-999
+1787,RCHRES,GQ-ROXPM,GQUAL,GQUAL,THOX,R,20,30,1
+1788,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,OPNID,C,0,10,None
+1789,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP1,R,10,20,0
+1790,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP2,R,20,30,0
+1791,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP3,R,30,40,0
+1792,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP4,R,40,50,0
+1793,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP5,R,50,60,0
+1794,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP6,R,60,70,0
+1795,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP7,R,70,80,0
+1796,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP8,R,10,20,0
+1797,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP9,R,20,30,0
+1798,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP10,R,30,40,0
+1799,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP11,R,40,50,0
+1800,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP12,R,50,60,0
+1801,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP13,R,60,70,0
+1802,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP14,R,70,80,0
+1803,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP15,R,10,20,0
+1804,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP16,R,20,30,0
+1805,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP17,R,30,40,0
+1806,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP18,R,40,50,0
+1807,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP19,R,50,60,0
+1808,RCHRES,GQ-PHOTPM,GQUAL,EXTENDED,PHOTP20,R,60,70,0
+1809,RCHRES,GQ-CFGAS,GQUAL,GQUAL,OPNID,C,0,10,None
+1810,RCHRES,GQ-CFGAS,GQUAL,GQUAL,CFGAS,R,10,20,-999
+1811,RCHRES,GQ-BIOPM,GQUAL,GQUAL,OPNID,C,0,10,None
+1812,RCHRES,GQ-BIOPM,GQUAL,GQUAL,BIOCON,R,10,20,-999
+1813,RCHRES,GQ-BIOPM,GQUAL,GQUAL,THBIO,R,20,30,1.07
+1814,RCHRES,GQ-BIOPM,GQUAL,GQUAL,BIO,R,30,40,-999
+1815,RCHRES,MON-BIO,GQUAL,GQUAL,OPNID,C,0,10,None
+1816,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM1,R,10,15,-999
+1817,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM2,R,15,20,-999
+1818,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM3,R,20,25,-999
+1819,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM4,R,25,30,-999
+1820,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM5,R,30,35,-999
+1821,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM6,R,35,40,-999
+1822,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM7,R,40,45,-999
+1823,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM8,R,45,50,-999
+1824,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM9,R,50,55,-999
+1825,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM10,R,55,60,-999
+1826,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM11,R,60,65,-999
+1827,RCHRES,MON-BIO,GQUAL,GQUAL,BIOM12,R,65,70,-999
+1828,RCHRES,GQ-GENDECAY,GQUAL,GQUAL,OPNID,C,0,10,None
+1829,RCHRES,GQ-GENDECAY,GQUAL,GQUAL,FSTDEC,R,10,20,-999
+1830,RCHRES,GQ-GENDECAY,GQUAL,GQUAL,THFST,R,20,30,1.07
+1831,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,OPNID,C,0,10,None
+1832,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP1,R,10,20,0
+1833,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP2,R,20,30,1.07
+1834,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP3,R,30,40,0
+1835,RCHRES,GQ-SEDDECAY,GQUAL,GQUAL,ADDCP4,R,40,50,1.07
+1836,RCHRES,GQ-KD,GQUAL,GQUAL,OPNID,C,0,10,None
+1837,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM11,R,10,20,-999
+1838,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM21,R,20,30,-999
+1839,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM31,R,30,40,-999
+1840,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM41,R,40,50,-999
+1841,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM51,R,50,60,-999
+1842,RCHRES,GQ-KD,GQUAL,GQUAL,ADPM61,R,60,70,-999
+1843,RCHRES,GQ-ADRATE,GQUAL,GQUAL,OPNID,C,0,10,None
+1844,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM12,R,10,20,-999
+1845,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM22,R,20,30,-999
+1846,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM32,R,30,40,-999
+1847,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM42,R,40,50,-999
+1848,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM52,R,50,60,-999
+1849,RCHRES,GQ-ADRATE,GQUAL,GQUAL,ADPM62,R,60,70,-999
+1850,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,OPNID,C,0,10,None
+1851,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM13,R,10,20,1.07
+1852,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM23,R,20,30,1.07
+1853,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM33,R,30,40,1.07
+1854,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM43,R,40,50,1.07
+1855,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM53,R,50,60,1.07
+1856,RCHRES,GQ-ADTHETA,GQUAL,GQUAL,ADPM63,R,60,70,1.07
+1857,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,OPNID,C,0,10,None
+1858,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL1,R,10,20,0
+1859,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL2,R,20,30,0
+1860,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL3,R,30,40,0
+1861,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL4,R,40,50,0
+1862,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL5,R,50,60,0
+1863,RCHRES,GQ-SEDCONC,GQUAL,GQUAL,SQAL6,R,60,70,0
+1864,RCHRES,GQ-VALUES,GQUAL,GQUAL,OPNID,C,0,10,None
+1865,RCHRES,GQ-VALUES,GQUAL,GQUAL,TWAT,R,10,20,60
+1866,RCHRES,GQ-VALUES,GQUAL,GQUAL,PHVAL,R,20,30,7
+1867,RCHRES,GQ-VALUES,GQUAL,GQUAL,ROC,R,30,40,0
+1868,RCHRES,GQ-VALUES,GQUAL,GQUAL,CLD,R,40,50,0
+1869,RCHRES,GQ-VALUES,GQUAL,GQUAL,SDCNC,R,50,60,0
+1870,RCHRES,GQ-VALUES,GQUAL,GQUAL,PHY,R,60,70,0
+1871,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,OPNID,C,0,10,None
+1872,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP1,R,10,15,60
+1873,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP2,R,15,20,60
+1874,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP3,R,20,25,60
+1875,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP4,R,25,30,60
+1876,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP5,R,30,35,60
+1877,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP6,R,35,40,60
+1878,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP7,R,40,45,60
+1879,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP8,R,45,50,60
+1880,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP9,R,50,55,60
+1881,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP10,R,55,60,60
+1882,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP11,R,60,65,60
+1883,RCHRES,MON-WATEMP,GQUAL,MONTHLYS,TEMP12,R,65,70,60
+1884,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,OPNID,C,0,10,None
+1885,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM1,R,10,15,0
+1886,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM2,R,15,20,0
+1887,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM3,R,20,25,0
+1888,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM4,R,25,30,0
+1889,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM5,R,30,35,0
+1890,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM6,R,35,40,0
+1891,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM7,R,40,45,0
+1892,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM8,R,45,50,0
+1893,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM9,R,50,55,0
+1894,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM10,R,55,60,0
+1895,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM11,R,60,65,0
+1896,RCHRES,MON-ROXYGEN,GQUAL,MONTHLYS,ROCM12,R,65,70,0
+1897,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,OPNID,C,0,10,None
+1898,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH1,R,10,20,-999
+1899,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH2,R,20,30,-999
+1900,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH3,R,30,40,-999
+1901,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH4,R,40,50,-999
+1902,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH5,R,50,60,-999
+1903,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH6,R,60,70,-999
+1904,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH7,R,70,80,-999
+1905,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH8,R,10,20,-999
+1906,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH9,R,20,30,-999
+1907,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH10,R,30,40,-999
+1908,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH11,R,40,50,-999
+1909,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH12,R,50,60,-999
+1910,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH13,R,60,70,-999
+1911,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH14,R,70,80,-999
+1912,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH15,R,10,20,-999
+1913,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH16,R,20,30,-999
+1914,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH17,R,30,40,-999
+1915,RCHRES,GQ-ALPHA,GQUAL,EXTENDED,ALPH418,R,40,50,-999
+1916,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,OPNID,C,0,10,None
+1917,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM1,R,10,20,0
+1918,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM2,R,20,30,0
+1919,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM3,R,30,40,0
+1920,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM4,R,40,50,0
+1921,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM5,R,50,60,0
+1922,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM6,R,60,70,0
+1923,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM7,R,70,80,0
+1924,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM8,R,10,20,0
+1925,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM9,R,20,30,0
+1926,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM10,R,30,40,0
+1927,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM11,R,40,50,0
+1928,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM12,R,50,60,0
+1929,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM13,R,60,70,0
+1930,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM14,R,70,80,0
+1931,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM15,R,10,20,0
+1932,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM16,R,20,30,0
+1933,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM17,R,30,40,0
+1934,RCHRES,GQ-GAMMA,GQUAL,EXTENDED,GAMM18,R,40,50,0
+1935,RCHRES,GQ-DELTA,GQUAL,EXTENDED,OPNID,C,0,10,None
+1936,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL1,R,10,20,0
+1937,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL2,R,20,30,0
+1938,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL3,R,30,40,0
+1939,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL4,R,40,50,0
+1940,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL5,R,50,60,0
+1941,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL6,R,60,70,0
+1942,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL7,R,70,80,0
+1943,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL8,R,10,20,0
+1944,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL9,R,20,30,0
+1945,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL10,R,30,40,0
+1946,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL11,R,40,50,0
+1947,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL12,R,50,60,0
+1948,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL13,R,60,70,0
+1949,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL14,R,70,80,0
+1950,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL15,R,10,20,0
+1951,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL16,R,20,30,0
+1952,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL17,R,30,40,0
+1953,RCHRES,GQ-DELTA,GQUAL,EXTENDED,DEL18,R,40,50,0
+1954,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,OPNID,C,0,10,None
+1955,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD1,R,10,20,0
+1956,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD2,R,20,30,0
+1957,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD3,R,30,40,0
+1958,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD4,R,40,50,0
+1959,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD5,R,50,60,0
+1960,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD6,R,60,70,0
+1961,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD7,R,70,80,0
+1962,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD8,R,10,20,0
+1963,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD9,R,20,30,0
+1964,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD10,R,30,40,0
+1965,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD11,R,40,50,0
+1966,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD12,R,50,60,0
+1967,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD13,R,60,70,0
+1968,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD14,R,70,80,0
+1969,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD15,R,10,20,0
+1970,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD16,R,20,30,0
+1971,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD17,R,30,40,0
+1972,RCHRES,GQ-CLDFACT,GQUAL,EXTENDED,KCLD18,R,40,50,0
+1973,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,OPNID,C,0,10,None
+1974,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM1,R,10,15,0
+1975,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM2,R,15,20,0
+1976,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM3,R,20,25,0
+1977,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM4,R,25,30,0
+1978,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM5,R,30,35,0
+1979,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM6,R,35,40,0
+1980,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM7,R,40,45,0
+1981,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM8,R,45,50,0
+1982,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM9,R,50,55,0
+1983,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM10,R,55,60,0
+1984,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM11,R,60,65,0
+1985,RCHRES,MON-CLOUD,GQUAL,MONTHLYS,CLDM12,R,65,70,0
+1986,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,OPNID,C,0,10,None
+1987,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN1,R,10,15,0
+1988,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN2,R,15,20,0
+1989,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN3,R,20,25,0
+1990,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN4,R,25,30,0
+1991,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN5,R,30,35,0
+1992,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN6,R,35,40,0
+1993,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN7,R,40,45,0
+1994,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN8,R,45,50,0
+1995,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN9,R,50,55,0
+1996,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN10,R,55,60,0
+1997,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN11,R,60,65,0
+1998,RCHRES,MON-SEDCONC,GQUAL,MONTHLYS,SDCN12,R,65,70,0
+1999,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,OPNID,C,0,10,None
+2000,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM1,R,10,15,0
+2001,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM2,R,15,20,0
+2002,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM3,R,20,25,0
+2003,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM4,R,25,30,0
+2004,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM5,R,30,35,0
+2005,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM6,R,35,40,0
+2006,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM7,R,40,45,0
+2007,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM8,R,45,50,0
+2008,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM9,R,50,55,0
+2009,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM10,R,55,60,0
+2010,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM11,R,60,65,0
+2011,RCHRES,MON-PHYTO,GQUAL,MONTHLYS,PHYM12,R,65,70,0
+2012,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,OPNID,C,0,10,None
+2013,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,ZERO,R,10,18,0
+2014,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C2F1,R,20,28,0
+2015,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C3F1,R,30,38,0
+2016,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C4F1,R,40,48,0
+2017,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C5F1,R,50,58,0
+2018,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C6F1,R,60,68,0
+2019,RCHRES,GQ-DAUGHTER,GQUAL,EXTENDED,C7F1,R,70,78,0
+2020,RCHRES,BENTH-FLAG,RQUAL,FLAGS,OPNID,C,0,10,0
+2021,RCHRES,BENTH-FLAG,RQUAL,FLAGS,BENRFG,I,10,15,0
+2022,RCHRES,SCOUR-PARMS,RQUAL,PARAMETERS,OPNID,C,0,10,None
+2023,RCHRES,SCOUR-PARMS,RQUAL,PARAMETERS,SCRVEL,R,10,20,10
+2024,RCHRES,SCOUR-PARMS,RQUAL,PARAMETERS,SCRMUL,R,20,30,2
+2025,RCHRES,OX-FLAGS,OXRX,FLAGS,OPNID,C,0,10,2
+2026,RCHRES,OX-FLAGS,OXRX,FLAGS,REAMFG,I,10,15,2
+2027,RCHRES,OX-GENPARM,OXRX,PARAMETERS,OPNID,C,0,10,None
+2028,RCHRES,OX-GENPARM,OXRX,PARAMETERS,KBOD20,R,10,20,-999
+2029,RCHRES,OX-GENPARM,OXRX,PARAMETERS,TCBOD,R,20,30,1.075
+2030,RCHRES,OX-GENPARM,OXRX,PARAMETERS,KODSET,R,30,40,0
+2031,RCHRES,OX-GENPARM,OXRX,PARAMETERS,SUPSAT,R,40,50,1.15
+2032,RCHRES,ELEV,OXRX,PARAMETERS,OPNID,C,0,10,None
+2033,RCHRES,ELEV,OXRX,PARAMETERS,ELEV,R,10,20,0
+2034,RCHRES,OX-BENPARM,OXRX,PARAMETERS,OPNID,C,0,10,0
+2035,RCHRES,OX-BENPARM,OXRX,PARAMETERS,BENOD,R,10,20,0
+2036,RCHRES,OX-BENPARM,OXRX,PARAMETERS,TCBEN,R,20,30,1.074
+2037,RCHRES,OX-BENPARM,OXRX,PARAMETERS,EXPOD,R,30,40,1.22
+2038,RCHRES,OX-BENPARM,OXRX,PARAMETERS,BRBOD1,R,40,50,72
+2039,RCHRES,OX-BENPARM,OXRX,PARAMETERS,BRBOD2,R,50,60,100
+2040,RCHRES,OX-BENPARM,OXRX,PARAMETERS,EXPREL,R,60,70,2.82
+2041,RCHRES,OX-CFOREA,OXRX,PARAMETERS,OPNID,C,0,10,None
+2042,RCHRES,OX-CFOREA,OXRX,PARAMETERS,CFOREA,R,10,20,1
+2043,RCHRES,OX-TSIVOGLOU,OXRX,PARAMETERS,OPNID,C,0,10,None
+2044,RCHRES,OX-TSIVOGLOU,OXRX,PARAMETERS,REAKT,R,10,20,0.08
+2045,RCHRES,OX-TSIVOGLOU,OXRX,PARAMETERS,TCGINV,R,20,30,1.047
+2046,RCHRES,OX-LEN-DELTH,OXRX,PARAMETERS,OPNID,C,0,10,None
+2047,RCHRES,OX-LEN-DELTH,OXRX,PARAMETERS,LEN,R,10,20,-999
+2048,RCHRES,OX-LEN-DELTH,OXRX,PARAMETERS,DELTH,R,20,30,-999
+2049,RCHRES,OX-TCGINV,OXRX,PARAMETERS,OPNID,C,0,10,None
+2050,RCHRES,OX-TCGINV,OXRX,PARAMETERS,TCGINV,R,10,20,1.047
+2051,RCHRES,OX-REAPARM,OXRX,PARAMETERS,OPNID,C,0,10,None
+2052,RCHRES,OX-REAPARM,OXRX,PARAMETERS,TCGINV,R,10,20,1.047
+2053,RCHRES,OX-REAPARM,OXRX,PARAMETERS,REAK,R,20,30,-999
+2054,RCHRES,OX-REAPARM,OXRX,PARAMETERS,EXPRED,R,30,40,0
+2055,RCHRES,OX-REAPARM,OXRX,PARAMETERS,EXPREV,R,40,50,0
+2056,RCHRES,OX-INIT,OXRX,STATES,OPNID,C,0,10,None
+2057,RCHRES,OX-INIT,OXRX,STATES,DOX,R,10,20,0
+2058,RCHRES,OX-INIT,OXRX,STATES,BOD,R,20,30,0
+2059,RCHRES,OX-INIT,OXRX,STATES,SATDO,R,30,40,10
+2060,RCHRES,NUT-FLAGS,NUTRX,FLAGS,OPNID,C,0,10,None
+2061,RCHRES,NUT-FLAGS,NUTRX,FLAGS,NH3FG,I,10,15,0
+2062,RCHRES,NUT-FLAGS,NUTRX,FLAGS,NO2FG,I,15,20,0
+2063,RCHRES,NUT-FLAGS,NUTRX,FLAGS,PO4FG,I,20,25,0
+2064,RCHRES,NUT-FLAGS,NUTRX,FLAGS,AMVFG,I,25,30,0
+2065,RCHRES,NUT-FLAGS,NUTRX,FLAGS,DENFG,I,30,35,0
+2066,RCHRES,NUT-FLAGS,NUTRX,FLAGS,ADNHFG,I,35,40,0
+2067,RCHRES,NUT-FLAGS,NUTRX,FLAGS,ADPOFG,I,40,45,0
+2068,RCHRES,NUT-FLAGS,NUTRX,FLAGS,PHFLAG,I,45,50,2
+2069,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,OPNID,C,0,10,None
+2070,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG1,I,11,14,0
+2071,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG2,I,14,17,0
+2072,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG3,I,18,21,0
+2073,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG4,I,21,24,0
+2074,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG5,I,25,28,0
+2075,RCHRES,NUT-AD-FLAGS,NUTRX,FLAGS,NUADFG6,I,28,31,0
+2076,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,OPNID,C,0,10,None
+2077,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,CVBO,R,10,20,1.98
+2078,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,CVBPC,R,20,30,106
+2079,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,CVBPN,R,30,40,16
+2080,RCHRES,CONV-VAL1,NUTRX,PARAMETERS,BPCNTC,R,40,50,49
+2081,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,OPNID,C,0,10,None
+2082,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRNIT1,R,10,20,0
+2083,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRNIT2,R,20,30,0
+2084,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRPO41,R,30,40,0
+2085,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,BRPO42,R,40,50,0
+2086,RCHRES,NUT-BENPARM,NUTRX,PARAMETERS,ANAER,R,50,60,0.005
+2087,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,OPNID,C,0,10,None
+2088,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,KTAM20,R,10,20,-999
+2089,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,KNO220,R,20,30,-999
+2090,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,TCNIT,R,30,40,1.07
+2091,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,KNO320,R,40,50,-999
+2092,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,TCDEN,R,50,60,1.07
+2093,RCHRES,NUT-NITDENIT,NUTRX,PARAMETERS,DENOXT,R,60,70,2
+2094,RCHRES,NUT-NH3VOLAT,NUTRX,PARAMETERS,OPNID,C,0,10,None
+2095,RCHRES,NUT-NH3VOLAT,NUTRX,PARAMETERS,EXPNVG,R,10,20,0.5
+2096,RCHRES,NUT-NH3VOLAT,NUTRX,PARAMETERS,EXPNVL,R,20,30,0.6667
+2097,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,OPNID,C,0,10,None
+2098,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BNH41,R,10,20,0
+2099,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BNH42,R,20,30,0
+2100,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BNH43,R,30,40,0
+2101,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BPO41,R,40,50,0
+2102,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BPO42,R,50,60,0
+2103,RCHRES,NUT-BEDCONC,NUTRX,PARAMETERS,BPO43,R,60,70,0
+2104,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,OPNID,C,0,10,None
+2105,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADNHPM1,R,10,20,1.00E-10
+2106,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADNHPM2,R,20,30,1.00E-10
+2107,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADNHPM3,R,30,40,1.00E-10
+2108,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADPOPM1,R,40,50,1.00E-10
+2109,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADPOPM2,R,50,60,1.00E-10
+2110,RCHRES,NUT-ADSPARM,NUTRX,PARAMETERS,ADPOPM3,R,60,70,1.00E-10
+2111,RCHRES,NUT-DINIT,NUTRX,STATES,OPNID,C,0,10,None
+2112,RCHRES,NUT-DINIT,NUTRX,STATES,NO3,R,10,20,0
+2113,RCHRES,NUT-DINIT,NUTRX,STATES,TAM,R,20,30,0
+2114,RCHRES,NUT-DINIT,NUTRX,STATES,NO2,R,30,40,0
+2115,RCHRES,NUT-DINIT,NUTRX,STATES,PO4,R,40,50,0
+2116,RCHRES,NUT-DINIT,NUTRX,STATES,PHVAL,R,50,60,7
+2117,RCHRES,NUT-ADSINIT,NUTRX,STATES,OPNID,C,0,10,None
+2118,RCHRES,NUT-ADSINIT,NUTRX,STATES,SNH41,R,10,20,0
+2119,RCHRES,NUT-ADSINIT,NUTRX,STATES,SNH42,R,20,30,0
+2120,RCHRES,NUT-ADSINIT,NUTRX,STATES,SNH43,R,30,40,0
+2121,RCHRES,NUT-ADSINIT,NUTRX,STATES,SPO41,R,40,50,0
+2122,RCHRES,NUT-ADSINIT,NUTRX,STATES,SPO42,R,50,60,0
+2123,RCHRES,NUT-ADSINIT,NUTRX,STATES,SPO43,R,60,70,0
+2124,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,OPNID,C,0,10,None
+2125,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA1,R,10,15,7
+2126,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA2,R,15,20,7
+2127,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA3,R,20,25,7
+2128,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA4,R,25,30,7
+2129,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA5,R,30,35,7
+2130,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA6,R,35,40,7
+2131,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA7,R,40,45,7
+2132,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA8,R,45,50,7
+2133,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA9,R,50,55,7
+2134,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA10,R,55,60,7
+2135,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA11,R,60,65,7
+2136,RCHRES,MON-PHVAL,NUTRX,MONTHLYS,PHVA12,R,65,70,7
+2137,RCHRES,PLNK-FLAGS,PLANK,FLAGS,OPNID,C,0,10,None
+2138,RCHRES,PLNK-FLAGS,PLANK,FLAGS,PHYFG,I,10,15,0
+2139,RCHRES,PLNK-FLAGS,PLANK,FLAGS,ZOOFG,I,15,20,0
+2140,RCHRES,PLNK-FLAGS,PLANK,FLAGS,BALFG,I,20,25,0
+2141,RCHRES,PLNK-FLAGS,PLANK,FLAGS,SDLTFG,I,25,30,0
+2142,RCHRES,PLNK-FLAGS,PLANK,FLAGS,AMRFG,I,30,35,0
+2143,RCHRES,PLNK-FLAGS,PLANK,FLAGS,DECFG,I,35,40,0
+2144,RCHRES,PLNK-FLAGS,PLANK,FLAGS,NSFG,I,40,45,0
+2145,RCHRES,PLNK-FLAGS,PLANK,FLAGS,ZFOOD,I,45,50,2
+2146,RCHRES,PLNK-FLAGS,PLANK,FLAGS,BNPFG,I,50,55,0
+2147,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,OPNID,C,0,10,None
+2148,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG1,I,11,14,0
+2149,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG2,I,14,17,0
+2150,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG3,I,18,21,0
+2151,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG4,I,21,24,0
+2152,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG5,I,25,28,0
+2153,RCHRES,PLNK-AD-FLAGS,PLANK,FLAGS,PLADFG6,I,28,31,0
+2154,RCHRES,SURF-EXPOSED,PLANK,PARAMETERS,OPNID,C,0,10,None
+2155,RCHRES,SURF-EXPOSED,PLANK,PARAMETERS,CFSAEX,R,10,20,1
+2156,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,OPNID,C,0,10,None
+2157,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,RATCLP,R,10,20,0.6
+2158,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,NONREF,R,20,30,0.5
+2159,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,LITSED,R,30,40,0
+2160,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,ALNPR,R,40,50,1
+2161,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,EXTB,R,50,60,-999
+2162,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,MALGR,R,60,70,0.3
+2163,RCHRES,PLNK-PARM1,PLANK,PARAMETERS,PARADF,R,70,80,1
+2164,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,OPNID,C,0,10,None
+2165,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMLT,R,10,20,0.033
+2166,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMN,R,20,30,0.045
+2167,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMNP,R,30,40,0.0284
+2168,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,CMMP,R,40,50,0.015
+2169,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,TALGRH,R,50,60,95
+2170,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,TALGRL,R,60,70,43
+2171,RCHRES,PLNK-PARM2,PLANK,PARAMETERS,TALGRM,R,70,80,77
+2172,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,OPNID,C,0,10,None
+2173,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,ALR20,R,10,20,0.004
+2174,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,ALDH,R,20,30,0.01
+2175,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,ALDL,R,30,40,0.001
+2176,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,OXALD,R,40,50,0.03
+2177,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,NALDH,R,50,60,0
+2178,RCHRES,PLNK-PARM3,PLANK,PARAMETERS,PALDH,R,60,70,0
+2179,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,OPNID,C,0,10,None
+2180,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,SEED,R,10,20,0
+2181,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,MXSTAY,R,20,30,0
+2182,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,OREF,R,30,40,0.0001
+2183,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,CLALDH,R,40,50,50
+2184,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,PHYSET,R,50,60,0
+2185,RCHRES,PHYTO-PARM,PLANK,PARAMETERS,REFSET,R,60,70,0
+2186,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,OPNID,C,0,10,None
+2187,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,MZOEAT,R,10,20,0.055
+2188,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,ZFIL20,R,20,30,-999
+2189,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,ZRES20,R,30,40,0.0015
+2190,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,ZD,R,40,50,0.0001
+2191,RCHRES,ZOO-PARM1,PLANK,PARAMETERS,OXZD,R,50,60,0.03
+2192,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,OPNID,C,0,10,None
+2193,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,TCZFIL,R,10,20,1.17
+2194,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,TCZRES,R,20,30,1.07
+2195,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,ZEXDEL,R,30,40,0.7
+2196,RCHRES,ZOO-PARM2,PLANK,PARAMETERS,ZOMASS,R,40,50,0.0003
+2197,RCHRES,BENAL-PARM,PLANK,PARAMETERS,OPNID,C,0,10,None
+2198,RCHRES,BENAL-PARM,PLANK,PARAMETERS,MBAL,R,10,20,600
+2199,RCHRES,BENAL-PARM,PLANK,PARAMETERS,CFBALR,R,20,30,1
+2200,RCHRES,BENAL-PARM,PLANK,PARAMETERS,CFBALG,R,30,40,1
+2201,RCHRES,BENAL-PARM,PLANK,PARAMETERS,MINBAL,R,40,50,0.0001
+2202,RCHRES,BENAL-PARM,PLANK,PARAMETERS,CAMPR,R,50,60,0.001
+2203,RCHRES,BENAL-PARM,PLANK,PARAMETERS,FRAVL,R,60,70,0
+2204,RCHRES,BENAL-PARM,PLANK,PARAMETERS,NMAXFX,R,70,80,10
+2205,RCHRES,PLNK-INIT,PLANK,STATES,OPNID,C,0,10,None
+2206,RCHRES,PLNK-INIT,PLANK,STATES,PHYTO,R,10,20,9.60E-07
+2207,RCHRES,PLNK-INIT,PLANK,STATES,ZOO,R,20,30,0.03
+2208,RCHRES,PLNK-INIT,PLANK,STATES,BENAL,R,30,40,1.00E-08
+2209,RCHRES,PLNK-INIT,PLANK,STATES,ORN,R,40,50,0
+2210,RCHRES,PLNK-INIT,PLANK,STATES,ORP,R,50,60,0
+2211,RCHRES,PLNK-INIT,PLANK,STATES,ORC,R,60,70,0
+2212,RCHRES,PH-PARM1,PHCARB,PARAMETERS,OPNID,C,0,10,None
+2213,RCHRES,PH-PARM1,PHCARB,PARAMETERS,PHCNT,I,10,15,25
+2214,RCHRES,PH-PARM1,PHCARB,PARAMETERS,ALKCON,I,15,20,1
+2215,RCHRES,PH-PARM2,PHCARB,PARAMETERS,OPNID,C,0,10,None
+2216,RCHRES,PH-PARM2,PHCARB,PARAMETERS,CFCINV,R,10,20,0.913
+2217,RCHRES,PH-PARM2,PHCARB,PARAMETERS,BRCO21,R,20,30,62
+2218,RCHRES,PH-PARM2,PHCARB,PARAMETERS,BRCO22,R,30,40,62
+2219,RCHRES,PH-INIT,PHCARB,STATES,OPNID,C,0,10,None
+2220,RCHRES,PH-INIT,PHCARB,STATES,TIC,R,10,20,0
+2221,RCHRES,PH-INIT,PHCARB,STATES,CO2,R,20,30,0
+2222,RCHRES,PH-INIT,PHCARB,STATES,PH,R,30,40,7
+2223,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,OPNID,C,0,10,None
+2224,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG1,I,10,15,3
+2225,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG2,I,15,20,4
+2226,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG3,I,20,25,1
+2227,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG4,I,25,30,0
+2228,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG5,I,30,35,0
+2229,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG6,I,35,40,0
+2230,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG7,I,40,45,0
+2231,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG8,I,45,50,0
+2232,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG9,I,50,55,0
+2233,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG10,I,55,60,0
+2234,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG11,I,60,65,0
+2235,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG12,I,65,70,0
+2236,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG13,I,70,75,0
+2237,RCHRES,ACID-FLAGS,ACIDPH,EXTENDED,ACFLAG14,I,75,80,0
+2238,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,OPNID,C,0,10,None
+2239,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM1,R,10,20,1
+2240,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM2,R,20,30,6.50E-32
+2241,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM3,R,30,40,-1
+2242,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM4,R,40,50,0.95
+2243,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM5,R,50,60,2.5
+2244,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM6,R,60,70,0
+2245,RCHRES,ACID-PARMS,ACIDPH,PARAMETERS,ACPARM7,R,70,80,0
+2246,RCHRES,ACID-INIT,ACIDPH,STATES,OPNID,C,0,10,None
+2247,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC1,R,10,20,0
+2248,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC2,R,20,30,0
+2249,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC3,R,30,40,0
+2250,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC4,R,40,50,0
+2251,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC5,R,50,60,0
+2252,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC6,R,60,70,0
+2253,RCHRES,ACID-INIT,ACIDPH,STATES,ACCONC7,R,70,80,0
+2254,RCHRES,BENAL-FLAGS,PLANK,FLAGS,OPNID,C,0,10,None
+2255,RCHRES,BENAL-FLAGS,PLANK,FLAGS,NUMBAL,I,10,15,0
+2256,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BINVFG,I,15,20,1
+2257,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG1,I,20,25,0
+2258,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG2,I,25,30,0
+2259,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG3,I,30,35,0
+2260,RCHRES,BENAL-FLAGS,PLANK,FLAGS,BFIXFG4,I,35,40,0
+2261,RCHRES,BENAL-GROW,PLANK,PARAMETERS,OPNID,C,0,10,None
+2262,RCHRES,BENAL-GROW,PLANK,PARAMETERS,MBALGR,R,10,20,0.3
+2263,RCHRES,BENAL-GROW,PLANK,PARAMETERS,TCBALG,R,20,30,1.07
+2264,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMNB,R,30,40,0.045
+2265,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMPB,R,40,50,0.015
+2266,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMD1,R,50,60,0.1
+2267,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CMMD2,R,60,70,100
+2268,RCHRES,BENAL-GROW,PLANK,PARAMETERS,CSLIT,R,70,80,250
+2269,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,OPNID,C,0,10,None
+2270,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,BALR20,R,10,20,0.004
+2271,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,TCBALR,R,20,30,1.07
+2272,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,CSLOF1,R,30,40,0.0007
+2273,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,CSLOF2,R,40,50,0.0007
+2274,RCHRES,BENAL-RESSCR,PLANK,PARAMETERS,GRORES,R,50,60,0.075
+2275,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,OPNID,C,0,10,None
+2276,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,CREMVL,R,10,20,0.05
+2277,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,CMMBI,R,20,30,0.05
+2278,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,BINV,R,30,40,0
+2279,RCHRES,BENAL-GRAZE,PLANK,PARAMETERS,TCGRAZ,R,40,50,1
+2280,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,OPNID,C,0,10,None
+2281,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CTRBQ1,R,10,20,0
+2282,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CTRBQ2,R,20,30,1
+2283,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CKTRB1,R,30,40,0
+2284,RCHRES,BENAL-LIGHT,PLANK,PARAMETERS,CKTRB2,R,40,50,1
+2285,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,OPNID,C,0,10,None
+2286,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,FRRIF,R,10,20,1
+2287,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,CMMV,R,20,30,1
+2288,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,RIFCQ1,R,30,40,0
+2289,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,RIFCQ2,R,40,50,0
+2290,RCHRES,BENAL-RIFF1,PLANK,PARAMETERS,RIFCQ3,R,50,60,0
+2291,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,OPNID,C,0,10,None
+2292,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF1,R,10,18,1
+2293,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF2,R,18,26,1
+2294,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF3,R,26,34,1
+2295,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFVF4,R,34,42,1
+2296,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF1,R,42,50,1
+2297,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF2,R,50,58,1
+2298,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF3,R,58,66,1
+2299,RCHRES,BENAL-RIFF2,PLANK,PARAMETERS,RIFDF4,R,66,74,1
+2300,RCHRES,BENAL-INIT,PLANK,STATES,OPNID,C,0,10,None
+2301,RCHRES,BENAL-INIT,PLANK,STATES,BENAL1,R,10,20,0
+2302,RCHRES,BENAL-INIT,PLANK,STATES,BENAL2,R,20,30,0
+2303,RCHRES,BENAL-INIT,PLANK,STATES,BENAL3,R,30,40,0
+2304,RCHRES,BENAL-INIT,PLANK,STATES,BENAL4,R,10,20,0
+2305,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,OPNID,C,0,10,None
+2306,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,NMINGR,R,10,20,0.001
+2307,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,PMINGR,R,20,30,0.001
+2308,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,CMINGR,R,30,40,0.001
+2309,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,LMINGR,R,40,50,0.001
+2310,RCHRES,PLNK-PARM4,PLANK,PARAMETERS,NMINC,R,50,60,0.001
+2311,RCHRES,MON-BINV,PLANK,MONTHLYS,OPNID,C,0,10,None
+2312,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM1,R,10,15,0
+2313,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM2,R,15,20,0
+2314,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM3,R,20,25,0
+2315,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM4,R,25,30,0
+2316,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM5,R,30,35,0
+2317,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM6,R,35,40,0
+2318,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM7,R,40,45,0
+2319,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM8,R,45,50,0
+2320,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM9,R,50,55,0
+2321,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM10,R,55,60,0
+2322,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM11,R,60,65,0
+2323,RCHRES,MON-BINV,PLANK,MONTHLYS,BINVM12,R,65,70,0
+2324,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,OPNID,C,0,10,None
+2325,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,SHADFG,R,10,20,0
+2326,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,TOPFL,R,20,30,41
+2327,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,VEGFL,R,30,40,42
+2328,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,NSSP,R,40,50,0
+2329,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,LATDEG,R,50,60,40
+2330,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,LONDEG,R,60,70,-90
+2331,RCHRES,SHADE-PARM,HTRCH,PARAMETERS,LONSTD,R,70,80,-90
+2332,FTABLES,FTABLE,FTABLES,FTABLES,Depth,R,0,10,0
+2333,FTABLES,FTABLE,FTABLES,FTABLES,Area,R,10,20,0
+2334,FTABLES,FTABLE,FTABLES,FTABLES,Volume,R,20,30,0
+2335,FTABLES,FTABLE,FTABLES,FTABLES,Disch1,R,30,40,0
+2336,FTABLES,FTABLE,FTABLES,FTABLES,Disch2,R,40,50,0
+2337,FTABLES,FTABLE,FTABLES,FTABLES,Disch3,R,50,60,0
+2338,FTABLES,FTABLE,FTABLES,FTABLES,Disch4,R,60,70,0
+2339,FTABLES,FTABLE,FTABLES,FTABLES,Disch5,R,70,80,0
+2340,GLOBAL,START,GLOBAL,START,SYR,C,14,18,1900
+2341,GLOBAL,START,GLOBAL,START,SMO,C,19,21,1
+2342,GLOBAL,START,GLOBAL,START,SDA,C,22,24,1
+2343,GLOBAL,START,GLOBAL,START,SHR,C,25,27,0
+2344,GLOBAL,START,GLOBAL,START,SMI,C,28,30,0
+2345,GLOBAL,START,GLOBAL,START,EYR,C,39,43,1900
+2346,GLOBAL,START,GLOBAL,START,EMO,C,44,46,12
+2347,GLOBAL,START,GLOBAL,START,EDA,C,47,49,31
+2348,GLOBAL,START,GLOBAL,START,EHR,C,50,52,24
+2349,GLOBAL,START,GLOBAL,START,EMI,C,53,55,0
+2350,EXT SOURCES,na,GLOBAL,EXT SOURCES,SVOL,C,0,6,*
+2351,EXT SOURCES,na,GLOBAL,EXT SOURCES,SVOLNO,C,6,11,na
+2352,EXT SOURCES,na,GLOBAL,EXT SOURCES,SMEMN,C,11,17,na
+2353,EXT SOURCES,na,GLOBAL,EXT SOURCES,SMEMSB,C,17,20,31
+2354,EXT SOURCES,na,GLOBAL,EXT SOURCES,SSYST,C,20,24,ENGL
+2355,EXT SOURCES,na,GLOBAL,EXT SOURCES,SGAPST,C,24,28,na
+2356,EXT SOURCES,na,GLOBAL,EXT SOURCES,MFACTOR,R,28,38,1
+2357,EXT SOURCES,na,GLOBAL,EXT SOURCES,TRAN,C,38,43,na
+2358,EXT SOURCES,na,GLOBAL,EXT SOURCES,TVOL,C,43,50,na
+2359,EXT SOURCES,na,GLOBAL,EXT SOURCES,TOPFST,C,50,54,na
+2360,EXT SOURCES,na,GLOBAL,EXT SOURCES,TOPLST,C,54,58,na
+2361,EXT SOURCES,na,GLOBAL,EXT SOURCES,TGRPN,C,58,65,na
+2362,EXT SOURCES,na,GLOBAL,EXT SOURCES,TMEMN,C,65,71,na
+2363,EXT SOURCES,na,GLOBAL,EXT SOURCES,TMEMSB,C,71,75,na
+2364,NETWORK,na,GLOBAL,NETWORK,SVOL,C,0,6,na
+2365,NETWORK,na,GLOBAL,NETWORK,SVOLNO,C,6,11,na
+2366,NETWORK,na,GLOBAL,NETWORK,SGRPN,C,11,18,na
+2367,NETWORK,na,GLOBAL,NETWORK,SMEMN,C,18,24,na
+2368,NETWORK,na,GLOBAL,NETWORK,SMEMSB1,C,24,26,na
+2369,NETWORK,na,GLOBAL,NETWORK,SMEMSB2,C,27,28,na
+2370,NETWORK,na,GLOBAL,NETWORK,MFACTOR,R,28,38,1
+2371,NETWORK,na,GLOBAL,NETWORK,TRAN,C,38,43,na
+2372,NETWORK,na,GLOBAL,NETWORK,TVOL,C,43,50,na
+2373,NETWORK,na,GLOBAL,NETWORK,TOPFST,C,50,54,na
+2374,NETWORK,na,GLOBAL,NETWORK,TOPLST,C,54,58,na
+2375,NETWORK,na,GLOBAL,NETWORK,TGRPN,C,58,65,na
+2376,NETWORK,na,GLOBAL,NETWORK,TMEMN,C,65,71,na
+2377,NETWORK,na,GLOBAL,NETWORK,TMEMSB1,C,72,73,na
+2378,NETWORK,na,GLOBAL,NETWORK,TMEMSB2,C,74,75,na
+2379,SCHEMATIC,na,GLOBAL,SCHEMATIC,SVOL,C,0,6,na
+2380,SCHEMATIC,na,GLOBAL,SCHEMATIC,SVOLNO,C,6,10,na
+2381,SCHEMATIC,na,GLOBAL,SCHEMATIC,AFACTR,R,28,38,1
+2382,SCHEMATIC,na,GLOBAL,SCHEMATIC,TVOL,C,43,49,na
+2383,SCHEMATIC,na,GLOBAL,SCHEMATIC,TVOLNO,C,49,53,na
+2384,SCHEMATIC,na,GLOBAL,SCHEMATIC,MLNO,C,56,60,na
+2385,SCHEMATIC,na,GLOBAL,SCHEMATIC,TMEMSB1,C,72,73,na
+2386,SCHEMATIC,na,GLOBAL,SCHEMATIC,TMEMSB2,C,74,75,na
+2387,MASS-LINK,na,GLOBAL,MASS-LINK,SVOL,C,0,11,na
+2388,MASS-LINK,na,GLOBAL,MASS-LINK,SGRPN,C,11,18,na
+2389,MASS-LINK,na,GLOBAL,MASS-LINK,SMEMN,C,18,24,na
+2390,MASS-LINK,na,GLOBAL,MASS-LINK,SMEMSB1,C,25,26,na
+2391,MASS-LINK,na,GLOBAL,MASS-LINK,SMEMSB2,C,27,28,na
+2392,MASS-LINK,na,GLOBAL,MASS-LINK,MFACTOR,R,28,43,1
+2393,MASS-LINK,na,GLOBAL,MASS-LINK,TVOL,C,43,58,na
+2394,MASS-LINK,na,GLOBAL,MASS-LINK,TGRPN,C,58,65,na
+2395,MASS-LINK,na,GLOBAL,MASS-LINK,TMEMN,C,65,71,na
+2396,MASS-LINK,na,GLOBAL,MASS-LINK,TMEMSB1,C,72,73,na
+2397,MASS-LINK,na,GLOBAL,MASS-LINK,TMEMSB2,C,74,75,na
+2398,GENER,OPCODE,GENER,OPCODES,OPNID,C,0,10,0
+2399,GENER,OPCODE,GENER,OPCODES,OPCODE,I,11,16,0
+2400,GENER,PARM,GENER,INFO,OPNID,C,0,10,0
+2401,GENER,PARM,GENER,INFO,K,R,11,21,0.0E0
+2402,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,OPTYP,C,0,8,na
+2403,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,RANGE1,C,8,11,na
+2404,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,RANGE2,C,11,15,na
+2405,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,DC,C,15,17,na
+2406,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,DS,C,17,18,na
+2407,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,YR,C,20,24,na
+2408,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,MO,C,25,27,na
+2409,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,DA,C,28,30,na
+2410,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,HR,C,31,33,na
+2411,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,MN,C,34,36,na
+2412,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,D,C,36,38,2
+2413,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,T,I,38,40,3
+2414,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,VARI,C,42,48,na
+2415,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,S1,C,48,51,na
+2416,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,S2,C,51,54,na
+2417,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,S3,C,54,55,na
+2418,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,AC,C,57,60,na
+2419,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,VALUE,R,60,70,0
+2420,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,TC,C,71,73,na
+2421,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,TS,C,74,77,na
+2422,SPEC-ACTIONS,ACTIONS,SPEC-ACTIONS,SPEC-ACTIONS,NUM,C,77,80,na
diff --git a/HSP2tools/readUCI.py b/HSP2tools/readUCI.py
index 1ff47f4b..6d392679 100644
--- a/HSP2tools/readUCI.py
+++ b/HSP2tools/readUCI.py
@@ -86,7 +86,10 @@ def fix_df(df, op, save, ddfaults, valid):
df = df.append(Series(name=name1)) # add missing ids with NaNs
if df.isna().any().any(): # replace NaNs with defaults
for col in df.columns:
- df[col] = df[col].fillna(ddfaults[op, save, col])
+ try:
+ df[col] = df[col].fillna(ddfaults[op, save, col])
+ except KeyError:
+ pass
cols = [c.replace('(','').replace(')','') for c in df.columns]
df.columns = cols
df = df.apply(to_numeric, errors='ignore')
@@ -216,11 +219,6 @@ def readUCI(uciname, hdfname):
df['SDLFAC'] = 0.0
df['SLIFAC'] = 0.0
df.to_hdf(store, path, data_columns=True)
- if 'SOTMP' not in df.columns: # didn't read IWT-INIT table
- df['SOTMP'] = 60.0
- df['SODOX'] = 0.0
- df['SOCO2'] = 0.0
- df.to_hdf(store, path, data_columns=True)
path = '/IMPLND/IQUAL/PARAMETERS'
if path in keys:
@@ -351,6 +349,8 @@ def readUCI(uciname, hdfname):
if path[-6:] == "STATES":
# need to add states if it doesn't already exist to save initial state variables
# such as the case where entire IWAT-STATE1 table is being defaulted
+ if not 'df' in locals():
+ x = 1 # sometimes when debugging keys gets creamed, seems like an IDE bug
for column in df.columns: # clear out existing data frame columns
df = df.drop([column], axis=1)
dct_params = hsp_paths[path]
@@ -540,10 +540,13 @@ def operation(info, llines, op):
history = defaultdict(list)
lines = iter(llines)
gcount = 0
+ canCount = 0
+ cancovCount = 0
for line in lines:
tokens = line.split()
if len(tokens) == 1:
table = tokens[0]
+ print(table)
if dcat[op,table] == 'EXTENDED':
rows = {}
extended_line = 0
@@ -573,7 +576,24 @@ def operation(info, llines, op):
if table == 'GQ-QALDATA':
gcount += 1
cat = cat + str(gcount)
- history[dpath[op,table],cat].append((table,df))
+ if table == "PWAT-CANOPY":
+ canId = int(d['CANOPY'])
+ if canId > 1:
+ df = df.rename(columns={'CANOPY': 'CANOPY' + str(canId), 'CANNAM': 'CANNAM' + str(canId),
+ 'CEPSC': 'CEPSC' + str(canId), 'CEPS': 'CEPS' + str(canId)})
+ newtable = ''
+ if table == "MON-INTERCEP": # special cases for canopy tables
+ canCount += 1
+ if canCount > 1:
+ newtable = table + str(canCount)
+ if table == "MON-COVER":
+ cancovCount += 1
+ if cancovCount > 1:
+ newtable = table + str(cancovCount)
+ if len(newtable) == 0:
+ history[dpath[op,table],cat].append((table,df))
+ else:
+ history[dpath[op, table], cat].append((newtable, df))
if len(history['GENERAL','INFO']) > 0:
(_,df) = history['GENERAL','INFO'][0]
@@ -582,7 +602,7 @@ def operation(info, llines, op):
counter.add(path)
if cat == 'SKIP':
continue
- if cat in {'PARAMETERS', 'STATES', 'FLAGS', 'ACTIVITY','INFO'}:
+ if cat in {'PARAMETERS', 'STATES', 'FLAGS', 'ACTIVITY', 'INFO', 'BINOUT', 'CANOPY'}:
df = concat([temp[1] for temp in history[path,cat]], axis='columns', sort=False)
df = fix_df(df, op, path, ddfaults, valid)
if cat == 'ACTIVITY' and op == 'PERLND':
@@ -605,7 +625,12 @@ def operation(info, llines, op):
for (table,df) in history[path,cat]:
df = fix_df(df, op, path, ddfaults, valid)
df.columns = Months
- name = rename[(op, table)]
+ if table[:-1] == 'MON-INTERCEP': # special cases for canopy tables
+ name = 'CEPSC' + table[-1:]
+ elif table[:-1] == 'MON-COVER':
+ name = 'COVER' + table[-1:]
+ else:
+ name = rename[(op, table)]
df.to_hdf(store, f'{op}/{path}/MONTHLY/{name}', data_columns=True)
elif cat == 'EXTENDED':
temp = defaultdict(list)
diff --git a/README.md b/README.md
index 55c26951..feea1990 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
The **[Hydrologic Simulation Program–Python (HSP2)](https://github.com/respec/HSPsquared)** watershed model is
is a port of the well-established [Hydrological Simulation Program - FORTRAN (HSPF)](https://www.epa.gov/ceam/hydrological-simulation-program-fortran-hspf), re-coded with modern scientific Python and data formats.
-HSP2 (pronouced "HSP-squared") is being developed by an open source team launched and led by RESPEC with internal funding and now in collaboration with LimnoTech and with additional support from the U.S. Army Corps of Engineers, Engineer Research and Development Center (ERDC), Environmental Laboratory.
+HSP2 (pronouced "HSP-squared") is being developed by an open source team launched and led by RESPEC with internal funding. Our list of collaborators is growing, now including LimnoTech and with additional support from the U.S. Army Corps of Engineers (Engineer Research and Development Center (ERDC), Environmental Laboratory), modelers at the Virginia Department of Environmental Quality, and others.
HSP2 currently supports all HSPF hydrology and detailed water quality modules. Support for specialty modules is currently in progress. See our [Release Notes](https://github.com/respec/HSPsquared/releases) for up-to-date details.
diff --git a/tests/test10/HSP2results/test10.uci b/tests/test10/HSP2results/test10.uci
index 9304c7cd..8b4c44fb 100644
--- a/tests/test10/HSP2results/test10.uci
+++ b/tests/test10/HSP2results/test10.uci
@@ -1,994 +1,994 @@
-RUN
-
-GLOBAL
- Version 11 test run: PERLND and IMPLND w/ RCHRES (sediment, water quality)
- START 1976 END 1976
- RUN INTERP OUTPUT LEVEL 3
- RESUME 0 RUN 1 UNIT SYSTEM 1
-END GLOBAL
-
- *** This test run uses MASS-LINK and SCHEMATIC blocks ***
-
-FILES
- ***<----FILE NAME------------------------------------------------->
-WDM 21 test10.wdm
-MESSU 22 test10.ech
- 01 test10.out
- 66 test10.d66
- 94 test10.p94
- 95 test10.p95
-END FILES
-
-OPN SEQUENCE
- INGRP INDELT 01:00
- PERLND 1
- RCHRES 1
- DISPLY 5
- DISPLY 1
- GENER 1
- DISPLY 2
- RCHRES 2
- RCHRES 3
- RCHRES 4
- PLTGEN 2
- IMPLND 1
- RCHRES 5
- DISPLY 3
- GENER 2
- DISPLY 4
- PLTGEN 1
- END INGRP
-END OPN SEQUENCE
-
-PERLND
- ACTIVITY
- Active Sections (1=Active, 0=Inactive) ***
- # - # ATMP SNOW PWAT SED PST PWG PQAL MSTL PEST NITR PHOS TRAC ***
- 1 1 1 1 1
- END ACTIVITY
-
- PRINT-INFO
- Print-flags *** PIVL PYR
- # - # ATMP SNOW PWAT SED PST PWG PQAL MSTL PEST NITR PHOS TRAC ***
- 1 4 4 4 4 12
- END PRINT-INFO
-
- GEN-INFO
- <-------Name-------> Unit-systems Printer ***
- # - # t-series Engl Metr ***
- in out ***
- 1 BICKNELL FARM 1 1 1 0
- END GEN-INFO
-
- *** Section SNOW ***
-
- ICE-FLAG
- 0= Ice formation not simulated, 1= Simulated ***
- # - #ICEFG ***
- 1 1
- END ICE-FLAG
-
- SNOW-PARM1
- Snow input info: Part 1 ***
- # - # LAT MELEV SHADE SNOWCF COVIND ***
- 1 42. 520. 0.0 1.45 0.5
- END SNOW-PARM1
-
- SNOW-PARM2
- Snow input info: Part 2 ***
- # - # RDCSN TSNOW SNOEVP CCFACT MWATER MGMELT ***
- 1 0.12 32. 0.05 0.5 0.08 0.0001
- END SNOW-PARM2
-
- SNOW-INIT1
- Initial snow conditions: Part 1 ***
- # - # PACKSNOW PACKICE PACKWATER RDENPF DULL PAKTMP ***
- 1 1.4 0.2 0.1 0.2 375. 27.5
- END SNOW-INIT1
-
- SNOW-INIT2
- Initial snow conditions: Part 2 ***
- # - # COVINX XLNMLT SKYCLR ***
- 1 0.50 0.0 1.0
- END SNOW-INIT2
-
- *** Section PWATER ***
-
- PWAT-PARM1
- PWATER variable monthly parameter value flags ***
- # - # CSNO RTOP UZFG VCS VUZ VNN VIFW VIRC VLE ***
- 1 1 0 0 1 1 1 0 0 1
- END PWAT-PARM1
-
- PWAT-PARM2
- *** PWATER input info: Part 2
- # - # ***FOREST LZSN INFILT LSUR SLSUR KVARY AGWRC
- 1 0.010 8.0 0.150 250. 0.050 0.5 0.98
- END PWAT-PARM2
-
- PWAT-PARM3
- *** PWATER input info: Part 3
- # - # ***PETMAX PETMIN INFEXP INFILD DEEPFR BASETP AGWETP
- 1 40. 35. 2.0 2.0 0.10 0.0 0.08
- END PWAT-PARM3
-
- PWAT-PARM4
- PWATER input info: Part 4 ***
- # - # CEPSC UZSN NSUR INTFW IRC LZETP ***
- 1 0.01 0.1 1.0 0.60
- END PWAT-PARM4
-
- MON-INTERCEP
- Only required if VCSFG=1 in PWAT-PARM1 ***
- # - # Interception storage capacity at start of each month ***
- JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
- 1 0.04 0.04 0.03 0.03 0.03 0.03 0.10 0.17 0.19 0.14 0.05 0.04
- END MON-INTERCEP
-
- MON-UZSN
- Only required if VUZFG=1 in PWAT-PARM1 ***
- # - # Upper zone storage at start of each month ***
- JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
- 1 0.4 0.4 0.4 0.4 1.6 1.1 1.1 1.3 1.3 1.3 1.1 0.9
- END MON-UZSN
-
- MON-MANNING
- Only required if VNNFG=1 in PWAT-PARM1 ***
- # - # Manning's n for overland flow at start of each month ***
- JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
- 1 0.30 0.30 0.30 0.30 0.27 0.25 0.25 0.25 0.25 0.25 0.35 0.33
- END MON-MANNING
-
- MON-LZETPARM
- Only required if VLEFG=1 in PWAT-PARM1 ***
- # - # Lower zone ET parameter at start of each month ***
- JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
- 1 0.20 0.20 0.20 0.23 0.23 0.25 0.60 0.80 0.75 0.50 0.30 0.20
- END MON-LZETPARM
-
- PWAT-STATE1
- *** Initial conditions at start of simulation
- # - # *** CEPS SURS UZS IFWS LZS AGWS GWVS
- 1 0.05 0.0 0.15 0.0 4.0 0.05 0.05
- END PWAT-STATE1
-
- *** Section PSTEMP ***
-
- PSTEMP-PARM2
- ***
- # - # ASLT BSLT ULTP1 ULTP2 LGTP1 LGTP2 ***
- 1 14.5 .365 1.2 4.0 1.2 6.0
- END PSTEMP-PARM2
-
- *** Section PWTGAS ***
-
- PWT-PARM2
- ***
- # - # ELEV IDOXP ICO2P ADOXP ACO2P ***
- 1 500. 6. .05 5. .05
- END PWT-PARM2
-END PERLND
-
-IMPLND
- ACTIVITY
- Active Sections ***
- # - # ATMP SNOW IWAT SLD IWG IQAL ***
- 1 1 1 1 1 1
- END ACTIVITY
-
- PRINT-INFO
- Print-flags ***
- # - # ATMP SNOW IWAT SLD IWG IQAL PIVL PYR ***
- 1 4 4 4 4 4 12
- END PRINT-INFO
-
- GEN-INFO
- <-------Name-------> Unit-systems Printer ***
- # - # t-series Engl Metr ***
- in out ***
- 1 DONIGIAN INDUSTRY 1 1 1 0
- END GEN-INFO
-
- *** Section SNOW ***
-
- ICE-FLAG
- 0= Ice formation not simulated, 1= Simulated ***
- # - #ICEFG ***
- 1 1
- END ICE-FLAG
-
- SNOW-PARM1
- Snow input info: Part 1 ***
- # - # LAT MELEV SHADE SNOWCF COVIND ***
- 1 42. 450. 0.0 1.45 0.5
- END SNOW-PARM1
-
- SNOW-PARM2
- Snow input info: Part 2 ***
- # - # RDCSN TSNOW SNOEVP CCFACT MWATER MGMELT ***
- 1 0.12 32. 0.05 0.5 0.08 0.0001
- END SNOW-PARM2
-
- SNOW-INIT1
- Initial snow conditions: Part 1 ***
- # - # PACKSNOW PACKICE PACKWATER RDENPF DULL PAKTMP ***
- 1 1.4 0.2 0.1 0.2 375. 27.5
- END SNOW-INIT1
-
- SNOW-INIT2
- Initial snow conditions: Part 2 ***
- # - # COVINX XLNMLT SKYCLR ***
- 1 0.50 0.0 1.0
- END SNOW-INIT2
-
- *** Section IWATER ***
-
- IWAT-PARM1
- Flags ***
- # - # CSNO RTOP VRS VNN RTLI ***
- 1 1 1
- END IWAT-PARM1
-
- IWAT-PARM2
- ***
- # - # LSUR SLSUR NSUR RETSC ***
- 1 200. .010 .010 .01
- END IWAT-PARM2
-
- IWAT-PARM3
- ***
- # - # PETMAX PETMIN ***
- 1 40. 35.
- END IWAT-PARM3
-
- IWAT-STATE1
- IWATER state variables ***
- # - # RETS SURS ***
- 1 .01 .01
- END IWAT-STATE1
-
- *** Section SOLIDS ***
-
- SLD-PARM2
- ***
- # - # KEIM JEIM ACCSDP REMSDP ***
- 1 .08 1.9 .01 .5
- END SLD-PARM2
-
- SLD-STOR
- Solids storage (tons/acre) ***
- # - # ***
- 1 0.2
- END SLD-STOR
-
- *** Section IWTGAS ***
-
- IWT-PARM2
- ***
- # - # ELEV AWTF BWTF ***
- 1 410. 40. 0.8
- END IWT-PARM2
-
- *** Section IQUAL ***
-
- NQUALS
- ***
- # - #NQUAL ***
- 1 1
- END NQUALS
-
- QUAL-PROPS
- Identifiers and Flags ***
- # - #<--qualid--> QTID QSD VPFW QSO VQO ***
- 1 COD LB 1 1
- END QUAL-PROPS
-
- QUAL-INPUT
- Storage on surface and nonseasonal parameters ***
- # - # SQO POTFW ACQOP SQOLIM WSQOP ***
- 1 1.20 .175 .02 2.0 1.7
- END QUAL-INPUT
-END IMPLND
-
-RCHRES
- ACTIVITY
- RCHRES Active Sections (1=Active, 0=Inactive) ***
- # - # HYFG ADFG CNFG HTFG SDFG GQFG OXFG NUFG PKFG PHFG ***
- 1 5 1 1 1 1 1 1 1 1 1 1
- END ACTIVITY
-
- PRINT-INFO
- RCHRES Print-flags ***
- # - # HYDR ADCA CONS HEAT SED GQL OXRX NUTR PLNK PHCB PIVL PYR ***
- 1 4 5 5 5 5 5 5 5 5 5 5 12
- 5 4 4 4 4 4 4 4 4 4 4 12
- END PRINT-INFO
-
- GEN-INFO
- RCHRES<-------Name------->Nexit Unit Systems Printer ***
- # - # t-series Engl Metr LKFG ***
- in out ***
- 1 MEIER POND 2 1 1 1 0 1
- 2 OUTLET 1 1 1 1 0
- 3 SPILLWAY 1 1 1 1 0
- 4 UPPER KITTLE CREEK 1 1 1 1 0
- 5 LOWER KITTLE CREEK 1 1 1 1 0
- END GEN-INFO
-
- *** Section HYDR ***
-
- HYDR-PARM1
- RCHRES Flags for HYDR section ***
- # - # VC A1 A2 A3 ODFVFG for each ODGTFG for each *** FUNCT for each
- FG FG FG FG possible exit possible exit *** possible exit
- 1 2 3 4 5 1 2 3 4 5 ***
-
- 1 1 1 1 -1 6
- 2 5 1 1 1 4
- END HYDR-PARM1
-
- HYDR-PARM2
- RCHRES ***
- # - # DSN FTBN LEN DELTH STCOR KS DB50 ***
- 1 00 1 0.5 1. .5
- 2 00 2 0.25 20. .5
- 3 00 3 0.25 30. .5
- 4 00 4 2.0 40. .5
- 5 00 5 3.0 40. .5
- END HYDR-PARM2
-
- HYDR-INIT
- RCHRES Initial conditions for HYDR section ***
- # - # VOL Initial value of COLIND *** Initial value of OUTDGT
- (ac-ft) for each possible exit *** for each possible exit
- EX1 EX2 EX3 EX4 EX5 *** EX1 EX2 EX3 EX4 EX5
- 1 30. 4.0 5.0
- 2 5 0.0 4.0
- END HYDR-INIT
-
- *** Section CONS ***
-
- NCONS
- RCHRES ***
- # - #NCONS ***
- 1 5 1
- END NCONS
-
- CONS-DATA
- RCHRES Data for conservative constituent No. 3 ***
- # - #<---Substance-id---> Conc ID CONV QTYID ***
- 1 5 ALKALINITY 1000. MG/L 35.31 KG
- END CONS-DATA
-
- *** Section HTRCH ***
-
- HEAT-PARM
- RCHRES ELEV ELDAT CFSAEX KATRAD KCOND KEVAP ***
- # - # ***
- 1 5 450. 100. .95
- END HEAT-PARM
-
- HEAT-INIT
- RCHRES TW AIRTMP ***
- # - # ***
- 1 5 60. 40.
- END HEAT-INIT
-
- *** Section SEDTRN ***
-
- SANDFG
- RCHRES ***
- # - # SNDFG ***
- 1 2 1
- 3 4 2
- 5 3
- END SANDFG
-
- SED-GENPARM
- RCHRES BEDWID BEDWRN POR ***
- # - # ***
- 1 200. 4.
- 2 3 1.33 3.
- 4 2.0 2.
- 5 2.66 2.
- END SED-GENPARM
-
- SAND-PM
- RCHRES D W RHO KSAND EXPSND ***
- # - # ***
- 1 5 .014 2.5 1.5 1.2
- END SAND-PM
-
- SILT-CLAY-PM
- RCHRES D W RHO TAUCD TAUCS M ***
- # - # ***
- 1 .00063 .0066 2.2 .2 .4 .5
- 2 3 .00063 .0066 2.2 1.E-10 500. .5
- 4 5 .00063 .0066 2.2 .2 .4 .5
- END SILT-CLAY-PM
-
- SILT-CLAY-PM
- RCHRES D W RHO TAUCD TAUCS M ***
- # - # ***
- 1 .000055 .000034 2.0 .15 .3 .75
- 2 3 .000055 .000034 2.0 1.E-10 500. .75
- 4 5 .000055 .000034 2.0 .15 .3 .75
- END SILT-CLAY-PM
-
- SSED-INIT
- RCHRES Suspended sed concs (mg/l) ***
- # - # Sand Silt Clay ***
- 1 5 5. 20. 30.
- END SSED-INIT
-
- BED-INIT
- RCHRES BEDDEP Initial bed composition ***
- # - # (ft) Sand Silt Clay ***
- 1 2. .8 .1 .1
- 2 3 2. .8 .1 .1
- 4 5 1. .8 .1 .1
- END BED-INIT
-
- *** Section GQUAL ***
-
- GQ-GENDATA
- RCHRES NGQL TPFG PHFG ROFG CDFG SDFG PYFG LAT ***
- # - # ***
- 1 5 1 1 1 2 1 1 1 42
- END GQ-GENDATA
-
- GQ-QALDATA
- RCHRES<-------GQID-------> DQAL CONCID CONV QTYID ***
- # - # ***
- 1 5 PESTICIDE B4 10. UG 1.E6 G
- END GQ-QALDATA
-
- GQ-QALFG
- RCHRES HDRL OXID PHOT VOLT BIOD GEN SDAS ***
- # - # ***
- 1 5 1 1 1 1 1 1 1
- END GQ-QALFG
-
- GQ-HYDPM
- RCHRES KA KB KN THHYD ***
- # - # ***
- 1 5 .001 .01 .001 1.03
- END GQ-HYDPM
-
- GQ-ROXPM
- RCHRES KOX THOX ***
- # - # ***
- 1 5 .1 1.03
- END GQ-ROXPM
-
- GQ-PHOTPM
- # - #*** K1 K2 K3 K4 K5 K6 K7
- # - #*** K8 K9 K10 K11 K12 K13 K14
- # - #*** K15 K16 K17 K18 PHI THETA
- 1 5 848. 544. 330. 195. 120. 68. 41.
- 1 5 23. 13. 7. 4. 1. .1
- 1 5 .3 1.1
- END GQ-PHOTPM
-
- GQ-CFGAS
- RCHRES CFGAS ***
- # - # ***
- 1 5 .001
- END GQ-CFGAS
-
- GQ-BIOPM
- RCHRES BIOCON THBIO BIO ***
- # - # ***
- 1 5 .01 10.
- END GQ-BIOPM
-
- GQ-GENDECAY
- RCHRES FSTDEC THFST ***
- # - # ***
- 1 5 .2
- END GQ-GENDECAY
-
- GQ-SEDDECAY
- RCHRES KSUSP THSUSP KBED THBED ***
- # - # ***
- 1 5 .002
- END GQ-SEDDECAY
-
- GQ-KD
- RCHRES Partition coefficients ***
- # - # ADPM(1,1) ADPM(2,1) ADPM(3,1) ADPM(4,1) ADPM(5,1) ADPM(6,1) ***
- 1 .0001 .001 .001 .0001 .001 .001
- 2 3 .0001 .001 .001 1.E-10 1.E-10 1.E-10
- 4 5 .0001 .001 .001 .0001 .001 .001
- END GQ-KD
-
- GQ-ADRATE
- RCHRES Adsorption/desorption rate parameters ***
- # - # ADPM(1,2) ADPM(2,2) ADPM(3,2) ADPM(4,2) ADPM(5,2) ADPM(6,2) ***
- 1 150. 150. 150. .25 .25 .25
- 2 3 150. 150. 150. 1000. 1000. 1000.
- 4 5 150. 150. 150. .25 .25 .25
- END GQ-ADRATE
-
- GQ-SEDCONC
- RCHRES SQAL1 SQAL2 SQAL3 SQAL4 SQAL5 SQAL6 ***
- # - # ***
- 1 .001 .01 .01 .001 .01 .01
- 2 3 .001 .01 .01 0. 0. 0.
- 4 5 .001 .01 .01 .001 .01 .01
- END GQ-SEDCONC
-
- GQ-VALUES
- RCHRES TWAT PHVAL ROC CLD SDCNC PHY ***
- # - # ***
- 1 5 1.E-5
- END GQ-VALUES
-
- GQ-ALPHA
- RCHRES***
- # - #*** K1 K2 K3 K4 K5 K6 K7
- # - #*** K8 K9 K10 K11 K12 K13 K14
- # - #*** K15 K16 K17 K18
- 1 5 .008 .009 .010 .011 .011 .011 .012
- 1 5 .013 .015 .016 .017 .018 .019 .020
- 1 5 .021 .022 .024 .024
- END GQ-ALPHA
-
- GQ-GAMMA
- RCHRES***
- # - #*** K1 K2 K3 K4 K5 K6 K7
- # - #*** K8 K9 K10 K11 K12 K13 K14
- # - #*** K15 K16 K17 K18
- 1 5 .001 .001 .001 .001 .001 .001 .001
- 1 5 .001 .002 .002 .002 .002 .002 .002
- 1 5 .002 .002 .002 .002
- END GQ-GAMMA
-
- GQ-DELTA
- RCHRES***
- # - #*** K1 K2 K3 K4 K5 K6 K7
- # - #*** K8 K9 K10 K11 K12 K13 K14
- # - #*** K15 K16 K17 K18
- 1 5 .0007 .0007 .0007 .0007 .0007 .0007 .0007
- 1 5 .0007 .0007 .0007 .0007 .0007 .0007 .0007
- 1 5 .0007 .0007 .0007 .0007
- END GQ-DELTA
-
- GQ-CLDFACT
- RCHRES***
- # - #*** F1 F2 F3 F4 F5 F6 F7
- # - #*** F8 F9 F10 F11 F12 F13 F14
- # - #*** F15 F16 F17 F18
- 1 5 .10 .10 .10 .15 .15 .15 .15
- 1 5 .17 .17 .17 .17 .18 .19 .20
- 1 5 .21 .21 .21 .21
- END GQ-CLDFACT
-
- *** Section RQUAL ***
-
- BENTH-FLAG
- RCHRES BENF ***
- # - # ***
- 1 1
- 4 5 1
- END BENTH-FLAG
-
- SCOUR-PARMS
- RCHRES SCRVEL SCRMUL ***
- # - # ***
- 1 5 3.
- END SCOUR-PARMS
-
- *** Section OXRX ***
-
- OX-FLAGS
- RCHRES REAM ***
- # - # ***
- 2 3 1
- 4 3
- 5 2
- END OX-FLAGS
-
- OX-GENPARM
- RCHRES KBOD20 TCBOD KODSET SUPSAT ***
- # - # /hr ***
- 1 5 .1 8.
- END OX-GENPARM
-
- OX-BENPARM
- RCHRES BENOD TCBEN EXPOD BRBOD(1) BRBOD(2) EXPREL ***
- # - # mg/m2.hr mg/m2.hr mg/m2.hr ***
- 1 5 10. 1.1 1.2 20. 25. 1.3
- END OX-BENPARM
-
- OX-CFOREA
- RCHRES CFOREA ***
- # - # ***
- 1 5.
- END OX-CFOREA
-
- OX-REAPARM
- RCHRES TCGINV REAK EXPRED EXPREV ***
- # - # /hr ***
- 4 2.0 -1.1 1.1
- END OX-REAPARM
-
- OX-INIT
- RCHRES DOX BOD SATDO ***
- # - # mg/l mg/l mg/l ***
- 1 5 8. 100.
- END OX-INIT
-
- *** Section NUTRX ***
-
- NUT-FLAGS
- RCHRES TAM NO2 PO4 AMV DEN ADNH ADPO PHFL ***
- # - # ***
- 1 5 1 1 1 1 1 0 0
- END NUT-FLAGS
-
- NUT-BENPARM
- RCHRES BRTAM(1) BRTAM(2) BRPO4(1) BRPO4(2) ANAER ***
- # - # mg/m2.hr mg/m2.hr mg/m2.hr mg/m2.hr mg/l ***
- 1 5 11.0 33.0 1.1 2.2 0.0005
- END NUT-BENPARM
-
- NUT-NITDENIT
- RCHRES KTAM20 KNO220 TCNIT KNO320 TCDEN DENOXT ***
- # - # /hr /hr /hr mg/l ***
- 1 5 .002 .004 1.07 .001 1.04 0.2
- END NUT-NITDENIT
-
- NUT-NH3VOLAT
- RCHRES EXPNVG EXPNVL ***
- # - # ***
- 1 5 .50 0.6667
- END NUT-NH3VOLAT
-
- NUT-BEDCONC
- RCHRES Bed concentrations of NH4 & PO4 (mg/mg) ***
- # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
- 1 5 0.00001 0.00001 0.00001 0.00001 0.00001 0.00001
- END NUT-BEDCONC
-
- NUT-ADSPARM
- RCHRES Partition coefficients for NH4 AND PO4 (l/mg) ***
- # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
- 1 5 0.0001 0.0001 0.0001 10. 10. 10.
- END NUT-ADSPARM
-
- NUT-DINIT
- RCHRES NO3 TAM NO2 PO4 PHVAL ***
- # - # mg/l mg/l mg/l mg/l ph units ***
- 1 5 40. 10. 1. 50. 7.0
- END NUT-DINIT
-
- NUT-ADSINIT
- RCHRES Initial suspended NH4 and PO4 concentrations (mg/mg) ***
- # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
- 1 5 0. 0. 0. 0. 0. 0.
- END NUT-ADSINIT
-
- *** Section PLANK ***
-
- PLNK-FLAGS
- RCHRES PHYF ZOOF BALF SDLT AMRF DECF NSFG ZFOO ***
- # - # ***
- 1 5 1 1 1 1 1 1
- END PLNK-FLAGS
-
- PLNK-PARM1
- RCHRES RATCLP NONREF LITSED ALNPR EXTB MALGR ***
- # - # /ft /hr ***
- 1 5 4.5
- END PLNK-PARM1
-
- PHYTO-PARM
- RCHRES SEED MXSTAY OREF CLALDH PHYSET REFSET ***
- # - # mg/l mg/l ug/l ***
- 1 5 .1 .1 .5 .5
- END PHYTO-PARM
-
- ZOO-PARM1
- RCHRES MZOEAT ZFIL20 ZRES20 ZD OXZD ***
- # - # mg/l.hr l/mgzoo.hr /hr /hr /hr ***
- 1 5 .2
- END ZOO-PARM1
-
- PLNK-INIT
- RCHRES PHYTO ZOO BENAL ORN ORP ORC ***
- # - # mg/l org/l mg/m2 mg/l mg/l mg/l ***
- 1 5 40. 200. 5. 20. 20. 20.
- END PLNK-INIT
-
- *** Section PHCARB ***
-
- PH-PARM1
- RCHRES PHCN ALKC ***
- # - # ***
- 1 5 50
- END PH-PARM1
-
- PH-INIT
- RCHRES TIC CO2 PH ***
- # - # mg/l mg/l ***
- 1 5 20. 5. 8.5
- END PH-INIT
-END RCHRES
-
-FTABLES
- FTABLE 1
- ROWS COLS ***
- 14 6
- WINTER SUMMER SPLWAY ***
- DEPTH AREA VOLUME OUTLET OUTLET DISCH ***
- (FT) (ACRES) (AC-FT) DISCH DISCH (CFS) ***
- (CFS) (CFS) ***
- .000 .000 .0000 .0000 .0000 .0000
- 2.000 1.212 1.2120 0.0000 .0000 .0000
- 4.000 2.424 4.8480 0.0000 .0000 .0000
- 6.000 3.636 10.9080 0.0000 .0000 .0000
- 8.000 4.848 19.3920 0.0000 .0000 .0000
- 10.000 6.061 30.3050 0.0000 .0000 .0000
- 12.000 7.273 43.6380 5.0000 3.5000 .0000
- 14.000 8.485 59.3950 6.2500 4.3750 .0000
- 16.000 9.697 77.5760 7.5000 5.2500 .0000
- 18.000 10.909 98.1810 8.7500 6.1250 .0000
- 20.000 12.121 121.2100 10.0000 7.0000 .0000
- 21.000 12.727 133.6360 10.6250 7.4375 50.0000
- 22.000 13.333 146.6630 11.2500 7.8750 100.0000
- 23.000 13.939 160.3030 11.8750 8.3125 500.0000
- END FTABLE 1
-
- FTABLE 2
- ROWS COLS ***
- 13 4
- DEPTH AREA VOLUME DISCH FLO-THRU ***
- (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
- .000 .000 .0000 .000 0.0
- .167 .071 .0109 1.2241 6.5
- .333 .081 .0236 3.9148 4.4
- .500 .091 .0379 7.8193 3.5
- .667 .101 .0539 12.9032 3.0
- .833 .111 .0715 19.1853 2.7
- 1.000 .121 .0909 26.7046 2.5
- 1.333 .141 .1347 45.6529 2.1
- 1.667 .162 .1852 70.1757 1.9
- 2.000 .182 .2424 100.7192 1.7
- 2.667 .586 .4983 201.9005 1.8
- 3.333 .990 1.0236 344.6344 2.2
- 4.000 1.394 1.8182 537.0775 2.5
- END FTABLE 2
-
- FTABLE 3
- ROWS COLS ***
- 13 4
- DEPTH AREA VOLUME DISCH FLO-THRU ***
- (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
- .000 .000 .0000 .000 0.0
- .167 .071 .0109 1.4992 5.3
- .333 .081 .0236 4.7947 3.6
- .500 .091 .0379 9.5766 2.9
- .667 .101 .0539 15.8032 2.5
- .833 .111 .0715 23.4971 2.2
- 1.000 .121 .0909 32.7063 2.0
- 1.333 .141 .1347 55.9132 1.7
- 1.667 .162 .1852 85.9474 1.6
- 2.000 .182 .2424 123.3553 1.4
- 2.667 .586 .4983 247.2766 1.5
- 3.333 .990 1.0236 422.0892 1.8
- 4.000 1.394 1.8182 657.7828 2.0
- END FTABLE 3
-
- FTABLE 4
- ROWS COLS ***
- 13 4
- DEPTH AREA VOLUME DISCH FLO-THRU ***
- (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
- .000 .000 .0000 .000 0.0
- .250 .848 .1970 .9024 158.5
- .500 .970 .4242 2.8860 106.7
- .750 1.091 .6818 5.7642 85.9
- 1.000 1.212 .9697 9.5120 74.0
- 1.250 1.333 1.2879 14.1431 66.1
- 1.500 1.455 1.6364 19.6862 60.3
- 2.000 1.697 2.4242 33.6545 52.3
- 2.500 1.939 3.3333 51.7323 46.8
- 3.000 2.182 4.3636 74.2486 42.7
- 4.000 11.879 11.3939 155.5774 53.2
- 5.000 21.576 28.1212 296.8633 68.8
- 6.000 31.273 54.5454 522.1440 75.8
- END FTABLE 4
-
- FTABLE 5
- ROWS COLS ***
- 13 4
- DEPTH AREA VOLUME DISCH FLO-THRU ***
- (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
- .000 .000 .0000 .000 0.0
- .333 1.697 .5253 1.5869 240.3
- .667 1.939 1.1313 5.0752 161.8
- 1.000 2.182 1.8182 10.1370 130.2
- 1.333 2.424 2.5859 16.7279 112.2
- 1.667 2.667 3.4343 24.8719 100.2
- 2.000 2.909 4.3636 34.6200 91.5
- 2.667 3.394 6.4646 59.1848 79.3
- 3.333 3.879 8.8889 90.9763 70.9
- 4.000 4.364 11.6364 130.5731 64.7
- 5.333 36.687 39.0034 284.8886 99.4
- 6.667 69.010 109.4680 593.7734 133.8
- 8.000 101.333 223.0302 1129.6948 143.3
- END FTABLE 5
-END FTABLES
-
-DISPLY
- DISPLY-INFO1
- # - #<----------Title----------->***TRAN PIVL DIG1 FIL1 PYR DIG2 FIL2 YRND
- 1 O2 CONC, MEIER POND (mg/l) AVER 1 2 66 12
- 2 PEST SED CONC, POND (mg/kg) AVER 1 2 66 12
- 3 O2 CONC,LOWER KITTLE C(mg/l) AVER 1 2 66 12
- 4 PEST SED CONC,L KTL C(mg/kg) AVER 1 2 66 12
- 5 WATER TEMP,MEIER POND (DEGF) AVER 1 2 66 12
- END DISPLY-INFO1
-END DISPLY
-
-GENER
- OPCODE
- # - # Op- ***
- code ***
- 1 2 19
- END OPCODE
-END GENER
-
-PLTGEN
- PLOTINFO
- # - # FILE NPT NMN LABL PYR PIVL ***
- 1 94 2 24
- 2 95 3 1 6
- END PLOTINFO
-
- GEN-LABELS
- # - #<----------------Title ----------------> *** <------Y axis------>
- 1 SIMULATED FLOWS (CFS) CFS
- 2 SIMULATED VALS RELATED TO TEMP&PH,RCH 4
- END GEN-LABELS
-
- SCALING
- # - # YMIN YMAX IVLIN ***
- 1 2 0. 150. 20.
- END SCALING
-
- CURV-DATA (first curve)
- <-Curve label--> Line Intg Col Tran ***
- # - # type eqv code code ***
- 1 TOTAL POND OUTFL 7 1 AVER
- 2 AVDEP FOR RCH 4 7 1 LAST
- END CURV-DATA
-
- CURV-DATA (second curve)
- <-Curve label--> Line Intg Col Tran ***
- # - # type eqv code code ***
- 1 LOWER KITTLE CR 8 2 AVER
- 2 TW FOR RCH 4 8 2 LAST
- END CURV-DATA
-
- CURV-DATA (third curve)
- <-Curve label--> Line Intg Col Tran ***
- # - # type eqv code code ***
- 2 PH FOR RCH 4 9 2 LAST
- END CURV-DATA
-
- CURV-DATA (fourth curve)
- <-Curve label--> Line Intg Col Tran ***
- # - # type eqv code code ***
- 2 HTEXCH FOR RCH 4 10 2
- END CURV-DATA
-END PLTGEN
-
-EXT SOURCES
-<-Volume-> SsysSgap<--Mult-->Tran <-Target vols> <-Grp> <-Member-> ***
- # # tem strg<-factor->strg # # # # ***
-WDM 39 PREC ENGLZERO SAME PERLND 1 EXTNL PREC
-WDM 131 PREC ENGLZERO SAME IMPLND 1 EXTNL PREC
-WDM 39 PREC ENGLZERO SAME RCHRES 1 3 EXTNL PREC
-WDM 131 PREC ENGLZERO SAME RCHRES 4 5 EXTNL PREC
-WDM 123 ATMP ENGL SAME PERLND 1 ATEMP AIRTMP
-WDM 122 ATMP ENGL SAME IMPLND 1 ATEMP AIRTMP
-WDM 123 ATMP ENGL SAME RCHRES 1 3 EXTNL GATMP
-WDM 122 ATMP ENGL SAME RCHRES 4 5 EXTNL GATMP
-WDM 41 EVAP ENGL .7 DIV PERLND 1 EXTNL PETINP
-WDM 41 EVAP ENGL .7 DIV IMPLND 1 EXTNL PETINP
-WDM 41 EVAP ENGL .7 DIV RCHRES 1 5 EXTNL POTEV
-WDM 42 WIND ENGL DIV PERLND 1 EXTNL WINMOV
-WDM 42 WIND ENGL DIV IMPLND 1 EXTNL WINMOV
-WDM 42 WIND ENGL DIV RCHRES 1 5 EXTNL WIND
-WDM 46 SOLR ENGL DIV PERLND 1 EXTNL SOLRAD
-WDM 46 SOLR ENGL DIV IMPLND 1 EXTNL SOLRAD
-WDM 46 SOLR ENGL DIV RCHRES 1 5 EXTNL SOLRAD
-WDM 126 DEWP ENGL SAME PERLND 1 EXTNL DTMPG
-WDM 125 DEWP ENGL SAME IMPLND 1 EXTNL DTMPG
-WDM 126 DEWP ENGL SAME RCHRES 1 3 EXTNL DEWTMP
-WDM 125 DEWP ENGL SAME RCHRES 4 5 EXTNL DEWTMP
-WDM 140 CLND ENGL SAME RCHRES 1 EXTNL COLIND
-WDM 135 CLDC ENGL SAME PERLND 1 EXTNL CLOUD
-WDM 135 CLDC ENGL SAME IMPLND 1 EXTNL CLOUD
-WDM 135 CLDC ENGL SAME RCHRES 1 5 EXTNL CLOUD
-END EXT SOURCES
-
-SCHEMATIC
-<-Source-> <--Area--> <-Target-> ***
- # <-factor-> # # ***
-PERLND 1 6000. RCHRES 1 1
-IMPLND 1 3000. RCHRES 5 2
-RCHRES 1 RCHRES 2 3
-RCHRES 1 RCHRES 3 4
-RCHRES 2 RCHRES 4 5
-RCHRES 3 RCHRES 4 5
-RCHRES 4 RCHRES 5 5
-END SCHEMATIC
-
-MASS-LINK
-
- MASS-LINK 1
- <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
- # #<-factor-> # # ***
-PERLND PWATER PERO 0.0833333 RCHRES INFLOW IVOL
-PERLND PWTGAS POHT RCHRES INFLOW IHEAT
-PERLND PWTGAS PODOXM RCHRES INFLOW OXIF 1
-PERLND PWTGAS POCO2M RCHRES INFLOW PHIF 2
- END MASS-LINK 1
-
- MASS-LINK 2
- <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
- # #<-factor-> # # ***
-IMPLND IWATER SURO 0.0833333 RCHRES INFLOW IVOL
-IMPLND SOLIDS SOSLD 0.10 RCHRES INFLOW ISED 1
-IMPLND SOLIDS SOSLD 0.46 RCHRES INFLOW ISED 2
-IMPLND SOLIDS SOSLD 0.44 RCHRES INFLOW ISED 3
-IMPLND IWTGAS SOHT RCHRES INFLOW IHEAT
-IMPLND IWTGAS SODOXM RCHRES INFLOW OXIF 1
-IMPLND IWTGAS SOCO2M RCHRES INFLOW PHIF 2
-IMPLND IQUAL SOQUAL RCHRES INFLOW OXIF 2
- END MASS-LINK 2
-
- MASS-LINK 3
- <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
- # #<-factor-> # # ***
-RCHRES OFLOW 1 RCHRES INFLOW
- END MASS-LINK 3
-
- MASS-LINK 4
- <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
- # #<-factor-> # # ***
-RCHRES OFLOW 2 RCHRES INFLOW
- END MASS-LINK 4
-
- MASS-LINK 5
- <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
- # #<-factor-> # # ***
-RCHRES ROFLOW RCHRES INFLOW
- END MASS-LINK 5
-
-END MASS-LINK
-
-NETWORK
-<-Volume-> <-Grp> <-Member-><--Mult-->Tran <-Target vols> <-Grp> <-Member-> ***
- # # #<-factor->strg # # # # ***
-RCHRES 1 HTRCH TW 1. DISPLY 5 INPUT TIMSER
-RCHRES 1 OXRX DOX 1. DISPLY 1 INPUT TIMSER
-RCHRES 1 GQUAL RSQAL 12 1. GENER 1 INPUT ONE
-RCHRES 1 SEDTRN RSED 10 1. GENER 1 INPUT TWO
-GENER 1 OUTPUT TIMSER 1.1 DISPLY 2 INPUT TIMSER
-RCHRES 1 HYDR ROVOL 12.1 PLTGEN 1 INPUT MEAN 1
-RCHRES 4 HYDR AVDEP 1. PLTGEN 2 INPUT POINT 1
-RCHRES 4 HTRCH TW 1. PLTGEN 2 INPUT POINT 2
-RCHRES 4 PHCARB PHST 3 1. PLTGEN 2 INPUT POINT 3
-RCHRES 4 HTRCH HTEXCH 1. PLTGEN 2 INPUT MEAN 1
-RCHRES 5 OXRX DOX 1. DISPLY 3 INPUT TIMSER
-RCHRES 5 GQUAL RSQAL 12 1. GENER 2 INPUT ONE
-RCHRES 5 SEDTRN RSED 10 1. GENER 2 INPUT TWO
-GENER 2 OUTPUT TIMSER 1.1 DISPLY 4 INPUT TIMSER
-RCHRES 5 HYDR ROVOL 12.1 PLTGEN 1 INPUT MEAN 2
-END NETWORK
-
-END RUN
+RUN
+
+GLOBAL
+ Version 11 test run: PERLND and IMPLND w/ RCHRES (sediment, water quality)
+ START 1976 END 1976
+ RUN INTERP OUTPUT LEVEL 3
+ RESUME 0 RUN 1 UNIT SYSTEM 1
+END GLOBAL
+
+ *** This test run uses MASS-LINK and SCHEMATIC blocks ***
+
+FILES
+ ***<----FILE NAME------------------------------------------------->
+WDM 21 test10.wdm
+MESSU 22 test10.ech
+ 01 test10.out
+ 66 test10.d66
+ 94 test10.p94
+ 95 test10.p95
+END FILES
+
+OPN SEQUENCE
+ INGRP INDELT 01:00
+ PERLND 1
+ RCHRES 1
+ DISPLY 5
+ DISPLY 1
+ GENER 1
+ DISPLY 2
+ RCHRES 2
+ RCHRES 3
+ RCHRES 4
+ PLTGEN 2
+ IMPLND 1
+ RCHRES 5
+ DISPLY 3
+ GENER 2
+ DISPLY 4
+ PLTGEN 1
+ END INGRP
+END OPN SEQUENCE
+
+PERLND
+ ACTIVITY
+ Active Sections (1=Active, 0=Inactive) ***
+ # - # ATMP SNOW PWAT SED PST PWG PQAL MSTL PEST NITR PHOS TRAC ***
+ 1 1 1 1 1
+ END ACTIVITY
+
+ PRINT-INFO
+ Print-flags *** PIVL PYR
+ # - # ATMP SNOW PWAT SED PST PWG PQAL MSTL PEST NITR PHOS TRAC ***
+ 1 4 4 4 4 12
+ END PRINT-INFO
+
+ GEN-INFO
+ <-------Name-------> Unit-systems Printer ***
+ # - # t-series Engl Metr ***
+ in out ***
+ 1 BICKNELL FARM 1 1 1 0
+ END GEN-INFO
+
+ *** Section SNOW ***
+
+ ICE-FLAG
+ 0= Ice formation not simulated, 1= Simulated ***
+ # - #ICEFG ***
+ 1 1
+ END ICE-FLAG
+
+ SNOW-PARM1
+ Snow input info: Part 1 ***
+ # - # LAT MELEV SHADE SNOWCF COVIND ***
+ 1 42. 520. 0.0 1.45 0.5
+ END SNOW-PARM1
+
+ SNOW-PARM2
+ Snow input info: Part 2 ***
+ # - # RDCSN TSNOW SNOEVP CCFACT MWATER MGMELT ***
+ 1 0.12 32. 0.05 0.5 0.08 0.0001
+ END SNOW-PARM2
+
+ SNOW-INIT1
+ Initial snow conditions: Part 1 ***
+ # - # PACKSNOW PACKICE PACKWATER RDENPF DULL PAKTMP ***
+ 1 1.4 0.2 0.1 0.2 375. 27.5
+ END SNOW-INIT1
+
+ SNOW-INIT2
+ Initial snow conditions: Part 2 ***
+ # - # COVINX XLNMLT SKYCLR ***
+ 1 0.50 0.0 1.0
+ END SNOW-INIT2
+
+ *** Section PWATER ***
+
+ PWAT-PARM1
+ PWATER variable monthly parameter value flags ***
+ # - # CSNO RTOP UZFG VCS VUZ VNN VIFW VIRC VLE ***
+ 1 1 0 0 1 1 1 0 0 1
+ END PWAT-PARM1
+
+ PWAT-PARM2
+ *** PWATER input info: Part 2
+ # - # ***FOREST LZSN INFILT LSUR SLSUR KVARY AGWRC
+ 1 0.010 8.0 0.150 250. 0.050 0.5 0.98
+ END PWAT-PARM2
+
+ PWAT-PARM3
+ *** PWATER input info: Part 3
+ # - # ***PETMAX PETMIN INFEXP INFILD DEEPFR BASETP AGWETP
+ 1 40. 35. 2.0 2.0 0.10 0.0 0.08
+ END PWAT-PARM3
+
+ PWAT-PARM4
+ PWATER input info: Part 4 ***
+ # - # CEPSC UZSN NSUR INTFW IRC LZETP ***
+ 1 0.01 0.1 1.0 0.60
+ END PWAT-PARM4
+
+ MON-INTERCEP
+ Only required if VCSFG=1 in PWAT-PARM1 ***
+ # - # Interception storage capacity at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.04 0.04 0.03 0.03 0.03 0.03 0.10 0.17 0.19 0.14 0.05 0.04
+ END MON-INTERCEP
+
+ MON-UZSN
+ Only required if VUZFG=1 in PWAT-PARM1 ***
+ # - # Upper zone storage at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.4 0.4 0.4 0.4 1.6 1.1 1.1 1.3 1.3 1.3 1.1 0.9
+ END MON-UZSN
+
+ MON-MANNING
+ Only required if VNNFG=1 in PWAT-PARM1 ***
+ # - # Manning's n for overland flow at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.30 0.30 0.30 0.30 0.27 0.25 0.25 0.25 0.25 0.25 0.35 0.33
+ END MON-MANNING
+
+ MON-LZETPARM
+ Only required if VLEFG=1 in PWAT-PARM1 ***
+ # - # Lower zone ET parameter at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.20 0.20 0.20 0.23 0.23 0.25 0.60 0.80 0.75 0.50 0.30 0.20
+ END MON-LZETPARM
+
+ PWAT-STATE1
+ *** Initial conditions at start of simulation
+ # - # *** CEPS SURS UZS IFWS LZS AGWS GWVS
+ 1 0.05 0.0 0.15 0.0 4.0 0.05 0.05
+ END PWAT-STATE1
+
+ *** Section PSTEMP ***
+
+ PSTEMP-PARM2
+ ***
+ # - # ASLT BSLT ULTP1 ULTP2 LGTP1 LGTP2 ***
+ 1 14.5 .365 1.2 4.0 1.2 6.0
+ END PSTEMP-PARM2
+
+ *** Section PWTGAS ***
+
+ PWT-PARM2
+ ***
+ # - # ELEV IDOXP ICO2P ADOXP ACO2P ***
+ 1 500. 6. .05 5. .05
+ END PWT-PARM2
+END PERLND
+
+IMPLND
+ ACTIVITY
+ Active Sections ***
+ # - # ATMP SNOW IWAT SLD IWG IQAL ***
+ 1 1 1 1 1 1
+ END ACTIVITY
+
+ PRINT-INFO
+ Print-flags ***
+ # - # ATMP SNOW IWAT SLD IWG IQAL PIVL PYR ***
+ 1 4 4 4 4 4 12
+ END PRINT-INFO
+
+ GEN-INFO
+ <-------Name-------> Unit-systems Printer ***
+ # - # t-series Engl Metr ***
+ in out ***
+ 1 DONIGIAN INDUSTRY 1 1 1 0
+ END GEN-INFO
+
+ *** Section SNOW ***
+
+ ICE-FLAG
+ 0= Ice formation not simulated, 1= Simulated ***
+ # - #ICEFG ***
+ 1 1
+ END ICE-FLAG
+
+ SNOW-PARM1
+ Snow input info: Part 1 ***
+ # - # LAT MELEV SHADE SNOWCF COVIND ***
+ 1 42. 450. 0.0 1.45 0.5
+ END SNOW-PARM1
+
+ SNOW-PARM2
+ Snow input info: Part 2 ***
+ # - # RDCSN TSNOW SNOEVP CCFACT MWATER MGMELT ***
+ 1 0.12 32. 0.05 0.5 0.08 0.0001
+ END SNOW-PARM2
+
+ SNOW-INIT1
+ Initial snow conditions: Part 1 ***
+ # - # PACKSNOW PACKICE PACKWATER RDENPF DULL PAKTMP ***
+ 1 1.4 0.2 0.1 0.2 375. 27.5
+ END SNOW-INIT1
+
+ SNOW-INIT2
+ Initial snow conditions: Part 2 ***
+ # - # COVINX XLNMLT SKYCLR ***
+ 1 0.50 0.0 1.0
+ END SNOW-INIT2
+
+ *** Section IWATER ***
+
+ IWAT-PARM1
+ Flags ***
+ # - # CSNO RTOP VRS VNN RTLI ***
+ 1 1 1
+ END IWAT-PARM1
+
+ IWAT-PARM2
+ ***
+ # - # LSUR SLSUR NSUR RETSC ***
+ 1 200. .010 .010 .01
+ END IWAT-PARM2
+
+ IWAT-PARM3
+ ***
+ # - # PETMAX PETMIN ***
+ 1 40. 35.
+ END IWAT-PARM3
+
+ IWAT-STATE1
+ IWATER state variables ***
+ # - # RETS SURS ***
+ 1 .01 .01
+ END IWAT-STATE1
+
+ *** Section SOLIDS ***
+
+ SLD-PARM2
+ ***
+ # - # KEIM JEIM ACCSDP REMSDP ***
+ 1 .08 1.9 .01 .5
+ END SLD-PARM2
+
+ SLD-STOR
+ Solids storage (tons/acre) ***
+ # - # ***
+ 1 0.2
+ END SLD-STOR
+
+ *** Section IWTGAS ***
+
+ IWT-PARM2
+ ***
+ # - # ELEV AWTF BWTF ***
+ 1 410. 40. 0.8
+ END IWT-PARM2
+
+ *** Section IQUAL ***
+
+ NQUALS
+ ***
+ # - #NQUAL ***
+ 1 1
+ END NQUALS
+
+ QUAL-PROPS
+ Identifiers and Flags ***
+ # - #<--qualid--> QTID QSD VPFW QSO VQO ***
+ 1 COD LB 1 1
+ END QUAL-PROPS
+
+ QUAL-INPUT
+ Storage on surface and nonseasonal parameters ***
+ # - # SQO POTFW ACQOP SQOLIM WSQOP ***
+ 1 1.20 .175 .02 2.0 1.7
+ END QUAL-INPUT
+END IMPLND
+
+RCHRES
+ ACTIVITY
+ RCHRES Active Sections (1=Active, 0=Inactive) ***
+ # - # HYFG ADFG CNFG HTFG SDFG GQFG OXFG NUFG PKFG PHFG ***
+ 1 5 1 1 1 1 1 1 1 1 1 1
+ END ACTIVITY
+
+ PRINT-INFO
+ RCHRES Print-flags ***
+ # - # HYDR ADCA CONS HEAT SED GQL OXRX NUTR PLNK PHCB PIVL PYR ***
+ 1 4 5 5 5 5 5 5 5 5 5 5 12
+ 5 4 4 4 4 4 4 4 4 4 4 12
+ END PRINT-INFO
+
+ GEN-INFO
+ RCHRES<-------Name------->Nexit Unit Systems Printer ***
+ # - # t-series Engl Metr LKFG ***
+ in out ***
+ 1 MEIER POND 2 1 1 1 0 1
+ 2 OUTLET 1 1 1 1 0
+ 3 SPILLWAY 1 1 1 1 0
+ 4 UPPER KITTLE CREEK 1 1 1 1 0
+ 5 LOWER KITTLE CREEK 1 1 1 1 0
+ END GEN-INFO
+
+ *** Section HYDR ***
+
+ HYDR-PARM1
+ RCHRES Flags for HYDR section ***
+ # - # VC A1 A2 A3 ODFVFG for each ODGTFG for each *** FUNCT for each
+ FG FG FG FG possible exit possible exit *** possible exit
+ 1 2 3 4 5 1 2 3 4 5 ***
+
+ 1 1 1 1 -1 6
+ 2 5 1 1 1 4
+ END HYDR-PARM1
+
+ HYDR-PARM2
+ RCHRES ***
+ # - # DSN FTBN LEN DELTH STCOR KS DB50 ***
+ 1 00 1 0.5 1. .5
+ 2 00 2 0.25 20. .5
+ 3 00 3 0.25 30. .5
+ 4 00 4 2.0 40. .5
+ 5 00 5 3.0 40. .5
+ END HYDR-PARM2
+
+ HYDR-INIT
+ RCHRES Initial conditions for HYDR section ***
+ # - # VOL Initial value of COLIND *** Initial value of OUTDGT
+ (ac-ft) for each possible exit *** for each possible exit
+ EX1 EX2 EX3 EX4 EX5 *** EX1 EX2 EX3 EX4 EX5
+ 1 30. 4.0 5.0
+ 2 5 0.0 4.0
+ END HYDR-INIT
+
+ *** Section CONS ***
+
+ NCONS
+ RCHRES ***
+ # - #NCONS ***
+ 1 5 1
+ END NCONS
+
+ CONS-DATA
+ RCHRES Data for conservative constituent No. 3 ***
+ # - #<---Substance-id---> Conc ID CONV QTYID ***
+ 1 5 ALKALINITY 1000. MG/L 35.31 KG
+ END CONS-DATA
+
+ *** Section HTRCH ***
+
+ HEAT-PARM
+ RCHRES ELEV ELDAT CFSAEX KATRAD KCOND KEVAP ***
+ # - # ***
+ 1 5 450. 100. .95
+ END HEAT-PARM
+
+ HEAT-INIT
+ RCHRES TW AIRTMP ***
+ # - # ***
+ 1 5 60. 40.
+ END HEAT-INIT
+
+ *** Section SEDTRN ***
+
+ SANDFG
+ RCHRES ***
+ # - # SNDFG ***
+ 1 2 1
+ 3 4 2
+ 5 3
+ END SANDFG
+
+ SED-GENPARM
+ RCHRES BEDWID BEDWRN POR ***
+ # - # ***
+ 1 200. 4.
+ 2 3 1.33 3.
+ 4 2.0 2.
+ 5 2.66 2.
+ END SED-GENPARM
+
+ SAND-PM
+ RCHRES D W RHO KSAND EXPSND ***
+ # - # ***
+ 1 5 .014 2.5 1.5 1.2
+ END SAND-PM
+
+ SILT-CLAY-PM
+ RCHRES D W RHO TAUCD TAUCS M ***
+ # - # ***
+ 1 .00063 .0066 2.2 .2 .4 .5
+ 2 3 .00063 .0066 2.2 1.E-10 500. .5
+ 4 5 .00063 .0066 2.2 .2 .4 .5
+ END SILT-CLAY-PM
+
+ SILT-CLAY-PM
+ RCHRES D W RHO TAUCD TAUCS M ***
+ # - # ***
+ 1 .000055 .000034 2.0 .15 .3 .75
+ 2 3 .000055 .000034 2.0 1.E-10 500. .75
+ 4 5 .000055 .000034 2.0 .15 .3 .75
+ END SILT-CLAY-PM
+
+ SSED-INIT
+ RCHRES Suspended sed concs (mg/l) ***
+ # - # Sand Silt Clay ***
+ 1 5 5. 20. 30.
+ END SSED-INIT
+
+ BED-INIT
+ RCHRES BEDDEP Initial bed composition ***
+ # - # (ft) Sand Silt Clay ***
+ 1 2. .8 .1 .1
+ 2 3 2. .8 .1 .1
+ 4 5 1. .8 .1 .1
+ END BED-INIT
+
+ *** Section GQUAL ***
+
+ GQ-GENDATA
+ RCHRES NGQL TPFG PHFG ROFG CDFG SDFG PYFG LAT ***
+ # - # ***
+ 1 5 1 1 1 2 1 1 1 42
+ END GQ-GENDATA
+
+ GQ-QALDATA
+ RCHRES<-------GQID-------> DQAL CONCID CONV QTYID ***
+ # - # ***
+ 1 5 PESTICIDE B4 10. UG 1.E6 G
+ END GQ-QALDATA
+
+ GQ-QALFG
+ RCHRES HDRL OXID PHOT VOLT BIOD GEN SDAS ***
+ # - # ***
+ 1 5 1 1 1 1 1 1 1
+ END GQ-QALFG
+
+ GQ-HYDPM
+ RCHRES KA KB KN THHYD ***
+ # - # ***
+ 1 5 .001 .01 .001 1.03
+ END GQ-HYDPM
+
+ GQ-ROXPM
+ RCHRES KOX THOX ***
+ # - # ***
+ 1 5 .1 1.03
+ END GQ-ROXPM
+
+ GQ-PHOTPM
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18 PHI THETA
+ 1 5 848. 544. 330. 195. 120. 68. 41.
+ 1 5 23. 13. 7. 4. 1. .1
+ 1 5 .3 1.1
+ END GQ-PHOTPM
+
+ GQ-CFGAS
+ RCHRES CFGAS ***
+ # - # ***
+ 1 5 .001
+ END GQ-CFGAS
+
+ GQ-BIOPM
+ RCHRES BIOCON THBIO BIO ***
+ # - # ***
+ 1 5 .01 10.
+ END GQ-BIOPM
+
+ GQ-GENDECAY
+ RCHRES FSTDEC THFST ***
+ # - # ***
+ 1 5 .2
+ END GQ-GENDECAY
+
+ GQ-SEDDECAY
+ RCHRES KSUSP THSUSP KBED THBED ***
+ # - # ***
+ 1 5 .002
+ END GQ-SEDDECAY
+
+ GQ-KD
+ RCHRES Partition coefficients ***
+ # - # ADPM(1,1) ADPM(2,1) ADPM(3,1) ADPM(4,1) ADPM(5,1) ADPM(6,1) ***
+ 1 .0001 .001 .001 .0001 .001 .001
+ 2 3 .0001 .001 .001 1.E-10 1.E-10 1.E-10
+ 4 5 .0001 .001 .001 .0001 .001 .001
+ END GQ-KD
+
+ GQ-ADRATE
+ RCHRES Adsorption/desorption rate parameters ***
+ # - # ADPM(1,2) ADPM(2,2) ADPM(3,2) ADPM(4,2) ADPM(5,2) ADPM(6,2) ***
+ 1 150. 150. 150. .25 .25 .25
+ 2 3 150. 150. 150. 1000. 1000. 1000.
+ 4 5 150. 150. 150. .25 .25 .25
+ END GQ-ADRATE
+
+ GQ-SEDCONC
+ RCHRES SQAL1 SQAL2 SQAL3 SQAL4 SQAL5 SQAL6 ***
+ # - # ***
+ 1 .001 .01 .01 .001 .01 .01
+ 2 3 .001 .01 .01 0. 0. 0.
+ 4 5 .001 .01 .01 .001 .01 .01
+ END GQ-SEDCONC
+
+ GQ-VALUES
+ RCHRES TWAT PHVAL ROC CLD SDCNC PHY ***
+ # - # ***
+ 1 5 1.E-5
+ END GQ-VALUES
+
+ GQ-ALPHA
+ RCHRES***
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18
+ 1 5 .008 .009 .010 .011 .011 .011 .012
+ 1 5 .013 .015 .016 .017 .018 .019 .020
+ 1 5 .021 .022 .024 .024
+ END GQ-ALPHA
+
+ GQ-GAMMA
+ RCHRES***
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18
+ 1 5 .001 .001 .001 .001 .001 .001 .001
+ 1 5 .001 .002 .002 .002 .002 .002 .002
+ 1 5 .002 .002 .002 .002
+ END GQ-GAMMA
+
+ GQ-DELTA
+ RCHRES***
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18
+ 1 5 .0007 .0007 .0007 .0007 .0007 .0007 .0007
+ 1 5 .0007 .0007 .0007 .0007 .0007 .0007 .0007
+ 1 5 .0007 .0007 .0007 .0007
+ END GQ-DELTA
+
+ GQ-CLDFACT
+ RCHRES***
+ # - #*** F1 F2 F3 F4 F5 F6 F7
+ # - #*** F8 F9 F10 F11 F12 F13 F14
+ # - #*** F15 F16 F17 F18
+ 1 5 .10 .10 .10 .15 .15 .15 .15
+ 1 5 .17 .17 .17 .17 .18 .19 .20
+ 1 5 .21 .21 .21 .21
+ END GQ-CLDFACT
+
+ *** Section RQUAL ***
+
+ BENTH-FLAG
+ RCHRES BENF ***
+ # - # ***
+ 1 1
+ 4 5 1
+ END BENTH-FLAG
+
+ SCOUR-PARMS
+ RCHRES SCRVEL SCRMUL ***
+ # - # ***
+ 1 5 3.
+ END SCOUR-PARMS
+
+ *** Section OXRX ***
+
+ OX-FLAGS
+ RCHRES REAM ***
+ # - # ***
+ 2 3 1
+ 4 3
+ 5 2
+ END OX-FLAGS
+
+ OX-GENPARM
+ RCHRES KBOD20 TCBOD KODSET SUPSAT ***
+ # - # /hr ***
+ 1 5 .1 8.
+ END OX-GENPARM
+
+ OX-BENPARM
+ RCHRES BENOD TCBEN EXPOD BRBOD(1) BRBOD(2) EXPREL ***
+ # - # mg/m2.hr mg/m2.hr mg/m2.hr ***
+ 1 5 10. 1.1 1.2 20. 25. 1.3
+ END OX-BENPARM
+
+ OX-CFOREA
+ RCHRES CFOREA ***
+ # - # ***
+ 1 5.
+ END OX-CFOREA
+
+ OX-REAPARM
+ RCHRES TCGINV REAK EXPRED EXPREV ***
+ # - # /hr ***
+ 4 2.0 -1.1 1.1
+ END OX-REAPARM
+
+ OX-INIT
+ RCHRES DOX BOD SATDO ***
+ # - # mg/l mg/l mg/l ***
+ 1 5 8. 100.
+ END OX-INIT
+
+ *** Section NUTRX ***
+
+ NUT-FLAGS
+ RCHRES TAM NO2 PO4 AMV DEN ADNH ADPO PHFL ***
+ # - # ***
+ 1 5 1 1 1 1 1 0 0
+ END NUT-FLAGS
+
+ NUT-BENPARM
+ RCHRES BRTAM(1) BRTAM(2) BRPO4(1) BRPO4(2) ANAER ***
+ # - # mg/m2.hr mg/m2.hr mg/m2.hr mg/m2.hr mg/l ***
+ 1 5 11.0 33.0 1.1 2.2 0.0005
+ END NUT-BENPARM
+
+ NUT-NITDENIT
+ RCHRES KTAM20 KNO220 TCNIT KNO320 TCDEN DENOXT ***
+ # - # /hr /hr /hr mg/l ***
+ 1 5 .002 .004 1.07 .001 1.04 0.2
+ END NUT-NITDENIT
+
+ NUT-NH3VOLAT
+ RCHRES EXPNVG EXPNVL ***
+ # - # ***
+ 1 5 .50 0.6667
+ END NUT-NH3VOLAT
+
+ NUT-BEDCONC
+ RCHRES Bed concentrations of NH4 & PO4 (mg/mg) ***
+ # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
+ 1 5 0.00001 0.00001 0.00001 0.00001 0.00001 0.00001
+ END NUT-BEDCONC
+
+ NUT-ADSPARM
+ RCHRES Partition coefficients for NH4 AND PO4 (l/mg) ***
+ # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
+ 1 5 0.0001 0.0001 0.0001 10. 10. 10.
+ END NUT-ADSPARM
+
+ NUT-DINIT
+ RCHRES NO3 TAM NO2 PO4 PHVAL ***
+ # - # mg/l mg/l mg/l mg/l ph units ***
+ 1 5 40. 10. 1. 50. 7.0
+ END NUT-DINIT
+
+ NUT-ADSINIT
+ RCHRES Initial suspended NH4 and PO4 concentrations (mg/mg) ***
+ # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
+ 1 5 0. 0. 0. 0. 0. 0.
+ END NUT-ADSINIT
+
+ *** Section PLANK ***
+
+ PLNK-FLAGS
+ RCHRES PHYF ZOOF BALF SDLT AMRF DECF NSFG ZFOO ***
+ # - # ***
+ 1 5 1 1 1 1 1 1
+ END PLNK-FLAGS
+
+ PLNK-PARM1
+ RCHRES RATCLP NONREF LITSED ALNPR EXTB MALGR ***
+ # - # /ft /hr ***
+ 1 5 4.5
+ END PLNK-PARM1
+
+ PHYTO-PARM
+ RCHRES SEED MXSTAY OREF CLALDH PHYSET REFSET ***
+ # - # mg/l mg/l ug/l ***
+ 1 5 .1 .1 .5 .5
+ END PHYTO-PARM
+
+ ZOO-PARM1
+ RCHRES MZOEAT ZFIL20 ZRES20 ZD OXZD ***
+ # - # mg/l.hr l/mgzoo.hr /hr /hr /hr ***
+ 1 5 .2
+ END ZOO-PARM1
+
+ PLNK-INIT
+ RCHRES PHYTO ZOO BENAL ORN ORP ORC ***
+ # - # mg/l org/l mg/m2 mg/l mg/l mg/l ***
+ 1 5 40. 200. 5. 20. 20. 20.
+ END PLNK-INIT
+
+ *** Section PHCARB ***
+
+ PH-PARM1
+ RCHRES PHCN ALKC ***
+ # - # ***
+ 1 5 50
+ END PH-PARM1
+
+ PH-INIT
+ RCHRES TIC CO2 PH ***
+ # - # mg/l mg/l ***
+ 1 5 20. 5. 8.5
+ END PH-INIT
+END RCHRES
+
+FTABLES
+ FTABLE 1
+ ROWS COLS ***
+ 14 6
+ WINTER SUMMER SPLWAY ***
+ DEPTH AREA VOLUME OUTLET OUTLET DISCH ***
+ (FT) (ACRES) (AC-FT) DISCH DISCH (CFS) ***
+ (CFS) (CFS) ***
+ .000 .000 .0000 .0000 .0000 .0000
+ 2.000 1.212 1.2120 0.0000 .0000 .0000
+ 4.000 2.424 4.8480 0.0000 .0000 .0000
+ 6.000 3.636 10.9080 0.0000 .0000 .0000
+ 8.000 4.848 19.3920 0.0000 .0000 .0000
+ 10.000 6.061 30.3050 0.0000 .0000 .0000
+ 12.000 7.273 43.6380 5.0000 3.5000 .0000
+ 14.000 8.485 59.3950 6.2500 4.3750 .0000
+ 16.000 9.697 77.5760 7.5000 5.2500 .0000
+ 18.000 10.909 98.1810 8.7500 6.1250 .0000
+ 20.000 12.121 121.2100 10.0000 7.0000 .0000
+ 21.000 12.727 133.6360 10.6250 7.4375 50.0000
+ 22.000 13.333 146.6630 11.2500 7.8750 100.0000
+ 23.000 13.939 160.3030 11.8750 8.3125 500.0000
+ END FTABLE 1
+
+ FTABLE 2
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .167 .071 .0109 1.2241 6.5
+ .333 .081 .0236 3.9148 4.4
+ .500 .091 .0379 7.8193 3.5
+ .667 .101 .0539 12.9032 3.0
+ .833 .111 .0715 19.1853 2.7
+ 1.000 .121 .0909 26.7046 2.5
+ 1.333 .141 .1347 45.6529 2.1
+ 1.667 .162 .1852 70.1757 1.9
+ 2.000 .182 .2424 100.7192 1.7
+ 2.667 .586 .4983 201.9005 1.8
+ 3.333 .990 1.0236 344.6344 2.2
+ 4.000 1.394 1.8182 537.0775 2.5
+ END FTABLE 2
+
+ FTABLE 3
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .167 .071 .0109 1.4992 5.3
+ .333 .081 .0236 4.7947 3.6
+ .500 .091 .0379 9.5766 2.9
+ .667 .101 .0539 15.8032 2.5
+ .833 .111 .0715 23.4971 2.2
+ 1.000 .121 .0909 32.7063 2.0
+ 1.333 .141 .1347 55.9132 1.7
+ 1.667 .162 .1852 85.9474 1.6
+ 2.000 .182 .2424 123.3553 1.4
+ 2.667 .586 .4983 247.2766 1.5
+ 3.333 .990 1.0236 422.0892 1.8
+ 4.000 1.394 1.8182 657.7828 2.0
+ END FTABLE 3
+
+ FTABLE 4
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .250 .848 .1970 .9024 158.5
+ .500 .970 .4242 2.8860 106.7
+ .750 1.091 .6818 5.7642 85.9
+ 1.000 1.212 .9697 9.5120 74.0
+ 1.250 1.333 1.2879 14.1431 66.1
+ 1.500 1.455 1.6364 19.6862 60.3
+ 2.000 1.697 2.4242 33.6545 52.3
+ 2.500 1.939 3.3333 51.7323 46.8
+ 3.000 2.182 4.3636 74.2486 42.7
+ 4.000 11.879 11.3939 155.5774 53.2
+ 5.000 21.576 28.1212 296.8633 68.8
+ 6.000 31.273 54.5454 522.1440 75.8
+ END FTABLE 4
+
+ FTABLE 5
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .333 1.697 .5253 1.5869 240.3
+ .667 1.939 1.1313 5.0752 161.8
+ 1.000 2.182 1.8182 10.1370 130.2
+ 1.333 2.424 2.5859 16.7279 112.2
+ 1.667 2.667 3.4343 24.8719 100.2
+ 2.000 2.909 4.3636 34.6200 91.5
+ 2.667 3.394 6.4646 59.1848 79.3
+ 3.333 3.879 8.8889 90.9763 70.9
+ 4.000 4.364 11.6364 130.5731 64.7
+ 5.333 36.687 39.0034 284.8886 99.4
+ 6.667 69.010 109.4680 593.7734 133.8
+ 8.000 101.333 223.0302 1129.6948 143.3
+ END FTABLE 5
+END FTABLES
+
+DISPLY
+ DISPLY-INFO1
+ # - #<----------Title----------->***TRAN PIVL DIG1 FIL1 PYR DIG2 FIL2 YRND
+ 1 O2 CONC, MEIER POND (mg/l) AVER 1 2 66 12
+ 2 PEST SED CONC, POND (mg/kg) AVER 1 2 66 12
+ 3 O2 CONC,LOWER KITTLE C(mg/l) AVER 1 2 66 12
+ 4 PEST SED CONC,L KTL C(mg/kg) AVER 1 2 66 12
+ 5 WATER TEMP,MEIER POND (DEGF) AVER 1 2 66 12
+ END DISPLY-INFO1
+END DISPLY
+
+GENER
+ OPCODE
+ # - # Op- ***
+ code ***
+ 1 2 19
+ END OPCODE
+END GENER
+
+PLTGEN
+ PLOTINFO
+ # - # FILE NPT NMN LABL PYR PIVL ***
+ 1 94 2 24
+ 2 95 3 1 6
+ END PLOTINFO
+
+ GEN-LABELS
+ # - #<----------------Title ----------------> *** <------Y axis------>
+ 1 SIMULATED FLOWS (CFS) CFS
+ 2 SIMULATED VALS RELATED TO TEMP&PH,RCH 4
+ END GEN-LABELS
+
+ SCALING
+ # - # YMIN YMAX IVLIN ***
+ 1 2 0. 150. 20.
+ END SCALING
+
+ CURV-DATA (first curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 1 TOTAL POND OUTFL 7 1 AVER
+ 2 AVDEP FOR RCH 4 7 1 LAST
+ END CURV-DATA
+
+ CURV-DATA (second curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 1 LOWER KITTLE CR 8 2 AVER
+ 2 TW FOR RCH 4 8 2 LAST
+ END CURV-DATA
+
+ CURV-DATA (third curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 2 PH FOR RCH 4 9 2 LAST
+ END CURV-DATA
+
+ CURV-DATA (fourth curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 2 HTEXCH FOR RCH 4 10 2
+ END CURV-DATA
+END PLTGEN
+
+EXT SOURCES
+<-Volume-> SsysSgap<--Mult-->Tran <-Target vols> <-Grp> <-Member-> ***
+ # # tem strg<-factor->strg # # # # ***
+WDM 39 PREC ENGLZERO SAME PERLND 1 EXTNL PREC
+WDM 131 PREC ENGLZERO SAME IMPLND 1 EXTNL PREC
+WDM 39 PREC ENGLZERO SAME RCHRES 1 3 EXTNL PREC
+WDM 131 PREC ENGLZERO SAME RCHRES 4 5 EXTNL PREC
+WDM 123 ATMP ENGL SAME PERLND 1 ATEMP AIRTMP
+WDM 122 ATMP ENGL SAME IMPLND 1 ATEMP AIRTMP
+WDM 123 ATMP ENGL SAME RCHRES 1 3 EXTNL GATMP
+WDM 122 ATMP ENGL SAME RCHRES 4 5 EXTNL GATMP
+WDM 41 EVAP ENGL .7 DIV PERLND 1 EXTNL PETINP
+WDM 41 EVAP ENGL .7 DIV IMPLND 1 EXTNL PETINP
+WDM 41 EVAP ENGL .7 DIV RCHRES 1 5 EXTNL POTEV
+WDM 42 WIND ENGL DIV PERLND 1 EXTNL WINMOV
+WDM 42 WIND ENGL DIV IMPLND 1 EXTNL WINMOV
+WDM 42 WIND ENGL DIV RCHRES 1 5 EXTNL WIND
+WDM 46 SOLR ENGL DIV PERLND 1 EXTNL SOLRAD
+WDM 46 SOLR ENGL DIV IMPLND 1 EXTNL SOLRAD
+WDM 46 SOLR ENGL DIV RCHRES 1 5 EXTNL SOLRAD
+WDM 126 DEWP ENGL SAME PERLND 1 EXTNL DTMPG
+WDM 125 DEWP ENGL SAME IMPLND 1 EXTNL DTMPG
+WDM 126 DEWP ENGL SAME RCHRES 1 3 EXTNL DEWTMP
+WDM 125 DEWP ENGL SAME RCHRES 4 5 EXTNL DEWTMP
+WDM 140 CLND ENGL SAME RCHRES 1 EXTNL COLIND
+WDM 135 CLDC ENGL SAME PERLND 1 EXTNL CLOUD
+WDM 135 CLDC ENGL SAME IMPLND 1 EXTNL CLOUD
+WDM 135 CLDC ENGL SAME RCHRES 1 5 EXTNL CLOUD
+END EXT SOURCES
+
+SCHEMATIC
+<-Source-> <--Area--> <-Target-> ***
+ # <-factor-> # # ***
+PERLND 1 6000. RCHRES 1 1
+IMPLND 1 3000. RCHRES 5 2
+RCHRES 1 RCHRES 2 3
+RCHRES 1 RCHRES 3 4
+RCHRES 2 RCHRES 4 5
+RCHRES 3 RCHRES 4 5
+RCHRES 4 RCHRES 5 5
+END SCHEMATIC
+
+MASS-LINK
+
+ MASS-LINK 1
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor-> # # ***
+PERLND PWATER PERO 0.0833333 RCHRES INFLOW IVOL
+PERLND PWTGAS POHT RCHRES INFLOW IHEAT
+PERLND PWTGAS PODOXM RCHRES INFLOW OXIF 1
+PERLND PWTGAS POCO2M RCHRES INFLOW PHIF 2
+ END MASS-LINK 1
+
+ MASS-LINK 2
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor-> # # ***
+IMPLND IWATER SURO 0.0833333 RCHRES INFLOW IVOL
+IMPLND SOLIDS SOSLD 0.10 RCHRES INFLOW ISED 1
+IMPLND SOLIDS SOSLD 0.46 RCHRES INFLOW ISED 2
+IMPLND SOLIDS SOSLD 0.44 RCHRES INFLOW ISED 3
+IMPLND IWTGAS SOHT RCHRES INFLOW IHEAT
+IMPLND IWTGAS SODOXM RCHRES INFLOW OXIF 1
+IMPLND IWTGAS SOCO2M RCHRES INFLOW PHIF 2
+IMPLND IQUAL SOQUAL RCHRES INFLOW OXIF 2
+ END MASS-LINK 2
+
+ MASS-LINK 3
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor-> # # ***
+RCHRES OFLOW 1 RCHRES INFLOW
+ END MASS-LINK 3
+
+ MASS-LINK 4
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor-> # # ***
+RCHRES OFLOW 2 RCHRES INFLOW
+ END MASS-LINK 4
+
+ MASS-LINK 5
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor-> # # ***
+RCHRES ROFLOW RCHRES INFLOW
+ END MASS-LINK 5
+
+END MASS-LINK
+
+NETWORK
+<-Volume-> <-Grp> <-Member-><--Mult-->Tran <-Target vols> <-Grp> <-Member-> ***
+ # # #<-factor->strg # # # # ***
+RCHRES 1 HTRCH TW 1. DISPLY 5 INPUT TIMSER
+RCHRES 1 OXRX DOX 1. DISPLY 1 INPUT TIMSER
+RCHRES 1 GQUAL RSQAL 12 1. GENER 1 INPUT ONE
+RCHRES 1 SEDTRN RSED 10 1. GENER 1 INPUT TWO
+GENER 1 OUTPUT TIMSER 1.1 DISPLY 2 INPUT TIMSER
+RCHRES 1 HYDR ROVOL 12.1 PLTGEN 1 INPUT MEAN 1
+RCHRES 4 HYDR AVDEP 1. PLTGEN 2 INPUT POINT 1
+RCHRES 4 HTRCH TW 1. PLTGEN 2 INPUT POINT 2
+RCHRES 4 PHCARB PHST 3 1. PLTGEN 2 INPUT POINT 3
+RCHRES 4 HTRCH HTEXCH 1. PLTGEN 2 INPUT MEAN 1
+RCHRES 5 OXRX DOX 1. DISPLY 3 INPUT TIMSER
+RCHRES 5 GQUAL RSQAL 12 1. GENER 2 INPUT ONE
+RCHRES 5 SEDTRN RSED 10 1. GENER 2 INPUT TWO
+GENER 2 OUTPUT TIMSER 1.1 DISPLY 4 INPUT TIMSER
+RCHRES 5 HYDR ROVOL 12.1 PLTGEN 1 INPUT MEAN 2
+END NETWORK
+
+END RUN
diff --git a/tests/test10/HSP2results/test10spec.uci b/tests/test10/HSP2results/test10spec.uci
new file mode 100644
index 00000000..00657171
--- /dev/null
+++ b/tests/test10/HSP2results/test10spec.uci
@@ -0,0 +1,1002 @@
+RUN
+
+GLOBAL
+ Version 11 test run: PERLND and IMPLND w/ RCHRES (sediment, water quality)
+ START 1976 END 1976
+ RUN INTERP OUTPUT LEVEL 3
+ RESUME 0 RUN 1 UNIT SYSTEM 1
+END GLOBAL
+
+ *** This test run uses MASS-LINK and SCHEMATIC blocks ***
+
+FILES
+ ***<----FILE NAME------------------------------------------------->
+WDM 21 test10.wdm
+MESSU 22 test10.ech
+ 01 test10.out
+ 66 test10.d66
+ 94 test10.p94
+ 95 test10.p95
+END FILES
+
+OPN SEQUENCE
+ INGRP INDELT 01:00
+ PERLND 1
+ RCHRES 1
+ DISPLY 5
+ DISPLY 1
+ GENER 1
+ DISPLY 2
+ RCHRES 2
+ RCHRES 3
+ RCHRES 4
+ PLTGEN 2
+ IMPLND 1
+ RCHRES 5
+ DISPLY 3
+ GENER 2
+ DISPLY 4
+ PLTGEN 1
+ END INGRP
+END OPN SEQUENCE
+
+PERLND
+ ACTIVITY
+ Active Sections (1=Active, 0=Inactive) ***
+ # - # ATMP SNOW PWAT SED PST PWG PQAL MSTL PEST NITR PHOS TRAC ***
+ 1 1 1 1 1
+ END ACTIVITY
+
+ PRINT-INFO
+ Print-flags *** PIVL PYR
+ # - # ATMP SNOW PWAT SED PST PWG PQAL MSTL PEST NITR PHOS TRAC ***
+ 1 4 4 4 4 12
+ END PRINT-INFO
+
+ GEN-INFO
+ <-------Name-------> Unit-systems Printer ***
+ # - # t-series Engl Metr ***
+ in out ***
+ 1 BICKNELL FARM 1 1 1 0
+ END GEN-INFO
+
+ *** Section SNOW ***
+
+ ICE-FLAG
+ 0= Ice formation not simulated, 1= Simulated ***
+ # - #ICEFG ***
+ 1 1
+ END ICE-FLAG
+
+ SNOW-PARM1
+ Snow input info: Part 1 ***
+ # - # LAT MELEV SHADE SNOWCF COVIND ***
+ 1 42. 520. 0.0 1.45 0.5
+ END SNOW-PARM1
+
+ SNOW-PARM2
+ Snow input info: Part 2 ***
+ # - # RDCSN TSNOW SNOEVP CCFACT MWATER MGMELT ***
+ 1 0.12 32. 0.05 0.5 0.08 0.0001
+ END SNOW-PARM2
+
+ SNOW-INIT1
+ Initial snow conditions: Part 1 ***
+ # - # PACKSNOW PACKICE PACKWATER RDENPF DULL PAKTMP ***
+ 1 1.4 0.2 0.1 0.2 375. 27.5
+ END SNOW-INIT1
+
+ SNOW-INIT2
+ Initial snow conditions: Part 2 ***
+ # - # COVINX XLNMLT SKYCLR ***
+ 1 0.50 0.0 1.0
+ END SNOW-INIT2
+
+ *** Section PWATER ***
+
+ PWAT-PARM1
+ PWATER variable monthly parameter value flags ***
+ # - # CSNO RTOP UZFG VCS VUZ VNN VIFW VIRC VLE ***
+ 1 1 0 0 1 1 1 0 0 1
+ END PWAT-PARM1
+
+ PWAT-PARM2
+ *** PWATER input info: Part 2
+ # - # ***FOREST LZSN INFILT LSUR SLSUR KVARY AGWRC
+ 1 0.010 8.0 0.150 250. 0.050 0.5 0.98
+ END PWAT-PARM2
+
+ PWAT-PARM3
+ *** PWATER input info: Part 3
+ # - # ***PETMAX PETMIN INFEXP INFILD DEEPFR BASETP AGWETP
+ 1 40. 35. 2.0 2.0 0.10 0.0 0.08
+ END PWAT-PARM3
+
+ PWAT-PARM4
+ PWATER input info: Part 4 ***
+ # - # CEPSC UZSN NSUR INTFW IRC LZETP ***
+ 1 0.01 0.1 1.0 0.60
+ END PWAT-PARM4
+
+ MON-INTERCEP
+ Only required if VCSFG=1 in PWAT-PARM1 ***
+ # - # Interception storage capacity at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.04 0.04 0.03 0.03 0.03 0.03 0.10 0.17 0.19 0.14 0.05 0.04
+ END MON-INTERCEP
+
+ MON-UZSN
+ Only required if VUZFG=1 in PWAT-PARM1 ***
+ # - # Upper zone storage at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.4 0.4 0.4 0.4 1.6 1.1 1.1 1.3 1.3 1.3 1.1 0.9
+ END MON-UZSN
+
+ MON-MANNING
+ Only required if VNNFG=1 in PWAT-PARM1 ***
+ # - # Manning's n for overland flow at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.30 0.30 0.30 0.30 0.27 0.25 0.25 0.25 0.25 0.25 0.35 0.33
+ END MON-MANNING
+
+ MON-LZETPARM
+ Only required if VLEFG=1 in PWAT-PARM1 ***
+ # - # Lower zone ET parameter at start of each month ***
+ JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ***
+ 1 0.20 0.20 0.20 0.23 0.23 0.25 0.60 0.80 0.75 0.50 0.30 0.20
+ END MON-LZETPARM
+
+ PWAT-STATE1
+ *** Initial conditions at start of simulation
+ # - # *** CEPS SURS UZS IFWS LZS AGWS GWVS
+ 1 0.05 0.0 0.15 0.0 4.0 0.05 0.05
+ END PWAT-STATE1
+
+ *** Section PSTEMP ***
+
+ PSTEMP-PARM2
+ ***
+ # - # ASLT BSLT ULTP1 ULTP2 LGTP1 LGTP2 ***
+ 1 14.5 .365 1.2 4.0 1.2 6.0
+ END PSTEMP-PARM2
+
+ *** Section PWTGAS ***
+
+ PWT-PARM2
+ ***
+ # - # ELEV IDOXP ICO2P ADOXP ACO2P ***
+ 1 500. 6. .05 5. .05
+ END PWT-PARM2
+END PERLND
+
+IMPLND
+ ACTIVITY
+ Active Sections ***
+ # - # ATMP SNOW IWAT SLD IWG IQAL ***
+ 1 1 1 1 1 1
+ END ACTIVITY
+
+ PRINT-INFO
+ Print-flags ***
+ # - # ATMP SNOW IWAT SLD IWG IQAL PIVL PYR ***
+ 1 4 4 4 4 4 12
+ END PRINT-INFO
+
+ GEN-INFO
+ <-------Name-------> Unit-systems Printer ***
+ # - # t-series Engl Metr ***
+ in out ***
+ 1 DONIGIAN INDUSTRY 1 1 1 0
+ END GEN-INFO
+
+ *** Section SNOW ***
+
+ ICE-FLAG
+ 0= Ice formation not simulated, 1= Simulated ***
+ # - #ICEFG ***
+ 1 1
+ END ICE-FLAG
+
+ SNOW-PARM1
+ Snow input info: Part 1 ***
+ # - # LAT MELEV SHADE SNOWCF COVIND ***
+ 1 42. 450. 0.0 1.45 0.5
+ END SNOW-PARM1
+
+ SNOW-PARM2
+ Snow input info: Part 2 ***
+ # - # RDCSN TSNOW SNOEVP CCFACT MWATER MGMELT ***
+ 1 0.12 32. 0.05 0.5 0.08 0.0001
+ END SNOW-PARM2
+
+ SNOW-INIT1
+ Initial snow conditions: Part 1 ***
+ # - # PACKSNOW PACKICE PACKWATER RDENPF DULL PAKTMP ***
+ 1 1.4 0.2 0.1 0.2 375. 27.5
+ END SNOW-INIT1
+
+ SNOW-INIT2
+ Initial snow conditions: Part 2 ***
+ # - # COVINX XLNMLT SKYCLR ***
+ 1 0.50 0.0 1.0
+ END SNOW-INIT2
+
+ *** Section IWATER ***
+
+ IWAT-PARM1
+ Flags ***
+ # - # CSNO RTOP VRS VNN RTLI ***
+ 1 1 1
+ END IWAT-PARM1
+
+ IWAT-PARM2
+ ***
+ # - # LSUR SLSUR NSUR RETSC ***
+ 1 200. .010 .010 .01
+ END IWAT-PARM2
+
+ IWAT-PARM3
+ ***
+ # - # PETMAX PETMIN ***
+ 1 40. 35.
+ END IWAT-PARM3
+
+ IWAT-STATE1
+ IWATER state variables ***
+ # - # RETS SURS ***
+ 1 .01 .01
+ END IWAT-STATE1
+
+ *** Section SOLIDS ***
+
+ SLD-PARM2
+ ***
+ # - # KEIM JEIM ACCSDP REMSDP ***
+ 1 .08 1.9 .01 .5
+ END SLD-PARM2
+
+ SLD-STOR
+ Solids storage (tons/acre) ***
+ # - # ***
+ 1 0.2
+ END SLD-STOR
+
+ *** Section IWTGAS ***
+
+ IWT-PARM2
+ ***
+ # - # ELEV AWTF BWTF ***
+ 1 410. 40. 0.8
+ END IWT-PARM2
+
+ *** Section IQUAL ***
+
+ NQUALS
+ ***
+ # - #NQUAL ***
+ 1 1
+ END NQUALS
+
+ QUAL-PROPS
+ Identifiers and Flags ***
+ # - #<--qualid--> QTID QSD VPFW QSO VQO ***
+ 1 COD LB 1 1
+ END QUAL-PROPS
+
+ QUAL-INPUT
+ Storage on surface and nonseasonal parameters ***
+ # - # SQO POTFW ACQOP SQOLIM WSQOP ***
+ 1 1.20 .175 .02 2.0 1.7
+ END QUAL-INPUT
+END IMPLND
+
+RCHRES
+ ACTIVITY
+ RCHRES Active Sections (1=Active, 0=Inactive) ***
+ # - # HYFG ADFG CNFG HTFG SDFG GQFG OXFG NUFG PKFG PHFG ***
+ 1 5 1 1 1 1 1 1 1 1 1 1
+ END ACTIVITY
+
+ PRINT-INFO
+ RCHRES Print-flags ***
+ # - # HYDR ADCA CONS HEAT SED GQL OXRX NUTR PLNK PHCB PIVL PYR ***
+ 1 4 5 5 5 5 5 5 5 5 5 5 12
+ 5 4 4 4 4 4 4 4 4 4 4 12
+ END PRINT-INFO
+
+ GEN-INFO
+ RCHRES<-------Name------->Nexit Unit Systems Printer ***
+ # - # t-series Engl Metr LKFG ***
+ in out ***
+ 1 MEIER POND 2 1 1 1 0 1
+ 2 OUTLET 1 1 1 1 0
+ 3 SPILLWAY 1 1 1 1 0
+ 4 UPPER KITTLE CREEK 1 1 1 1 0
+ 5 LOWER KITTLE CREEK 1 1 1 1 0
+ END GEN-INFO
+
+ *** Section HYDR ***
+
+ HYDR-PARM1
+ RCHRES Flags for HYDR section ***
+ # - # VC A1 A2 A3 ODFVFG for each ODGTFG for each *** FUNCT for each
+ FG FG FG FG possible exit possible exit *** possible exit
+ 1 2 3 4 5 1 2 3 4 5 ***
+
+ 1 1 1 1 -1 6
+ 2 5 1 1 1 4
+ END HYDR-PARM1
+
+ HYDR-PARM2
+ RCHRES ***
+ # - # DSN FTBN LEN DELTH STCOR KS DB50 ***
+ 1 00 1 0.5 1. .5
+ 2 00 2 0.25 20. .5
+ 3 00 3 0.25 30. .5
+ 4 00 4 2.0 40. .5
+ 5 00 5 3.0 40. .5
+ END HYDR-PARM2
+
+ HYDR-INIT
+ RCHRES Initial conditions for HYDR section ***
+ # - # VOL Initial value of COLIND *** Initial value of OUTDGT
+ (ac-ft) for each possible exit *** for each possible exit
+ EX1 EX2 EX3 EX4 EX5 *** EX1 EX2 EX3 EX4 EX5
+ 1 30. 4.0 5.0
+ 2 5 0.0 4.0
+ END HYDR-INIT
+
+ *** Section CONS ***
+
+ NCONS
+ RCHRES ***
+ # - #NCONS ***
+ 1 5 1
+ END NCONS
+
+ CONS-DATA
+ RCHRES Data for conservative constituent No. 3 ***
+ # - #<---Substance-id---> Conc ID CONV QTYID ***
+ 1 5 ALKALINITY 1000. MG/L 35.31 KG
+ END CONS-DATA
+
+ *** Section HTRCH ***
+
+ HEAT-PARM
+ RCHRES ELEV ELDAT CFSAEX KATRAD KCOND KEVAP ***
+ # - # ***
+ 1 5 450. 100. .95
+ END HEAT-PARM
+
+ HEAT-INIT
+ RCHRES TW AIRTMP ***
+ # - # ***
+ 1 5 60. 40.
+ END HEAT-INIT
+
+ *** Section SEDTRN ***
+
+ SANDFG
+ RCHRES ***
+ # - # SNDFG ***
+ 1 2 1
+ 3 4 2
+ 5 3
+ END SANDFG
+
+ SED-GENPARM
+ RCHRES BEDWID BEDWRN POR ***
+ # - # ***
+ 1 200. 4.
+ 2 3 1.33 3.
+ 4 2.0 2.
+ 5 2.66 2.
+ END SED-GENPARM
+
+ SAND-PM
+ RCHRES D W RHO KSAND EXPSND ***
+ # - # ***
+ 1 5 .014 2.5 1.5 1.2
+ END SAND-PM
+
+ SILT-CLAY-PM
+ RCHRES D W RHO TAUCD TAUCS M ***
+ # - # ***
+ 1 .00063 .0066 2.2 .2 .4 .5
+ 2 3 .00063 .0066 2.2 1.E-10 500. .5
+ 4 5 .00063 .0066 2.2 .2 .4 .5
+ END SILT-CLAY-PM
+
+ SILT-CLAY-PM
+ RCHRES D W RHO TAUCD TAUCS M ***
+ # - # ***
+ 1 .000055 .000034 2.0 .15 .3 .75
+ 2 3 .000055 .000034 2.0 1.E-10 500. .75
+ 4 5 .000055 .000034 2.0 .15 .3 .75
+ END SILT-CLAY-PM
+
+ SSED-INIT
+ RCHRES Suspended sed concs (mg/l) ***
+ # - # Sand Silt Clay ***
+ 1 5 5. 20. 30.
+ END SSED-INIT
+
+ BED-INIT
+ RCHRES BEDDEP Initial bed composition ***
+ # - # (ft) Sand Silt Clay ***
+ 1 2. .8 .1 .1
+ 2 3 2. .8 .1 .1
+ 4 5 1. .8 .1 .1
+ END BED-INIT
+
+ *** Section GQUAL ***
+
+ GQ-GENDATA
+ RCHRES NGQL TPFG PHFG ROFG CDFG SDFG PYFG LAT ***
+ # - # ***
+ 1 5 1 1 1 2 1 1 1 42
+ END GQ-GENDATA
+
+ GQ-QALDATA
+ RCHRES<-------GQID-------> DQAL CONCID CONV QTYID ***
+ # - # ***
+ 1 5 PESTICIDE B4 10. UG 1.E6 G
+ END GQ-QALDATA
+
+ GQ-QALFG
+ RCHRES HDRL OXID PHOT VOLT BIOD GEN SDAS ***
+ # - # ***
+ 1 5 1 1 1 1 1 1 1
+ END GQ-QALFG
+
+ GQ-HYDPM
+ RCHRES KA KB KN THHYD ***
+ # - # ***
+ 1 5 .001 .01 .001 1.03
+ END GQ-HYDPM
+
+ GQ-ROXPM
+ RCHRES KOX THOX ***
+ # - # ***
+ 1 5 .1 1.03
+ END GQ-ROXPM
+
+ GQ-PHOTPM
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18 PHI THETA
+ 1 5 848. 544. 330. 195. 120. 68. 41.
+ 1 5 23. 13. 7. 4. 1. .1
+ 1 5 .3 1.1
+ END GQ-PHOTPM
+
+ GQ-CFGAS
+ RCHRES CFGAS ***
+ # - # ***
+ 1 5 .001
+ END GQ-CFGAS
+
+ GQ-BIOPM
+ RCHRES BIOCON THBIO BIO ***
+ # - # ***
+ 1 5 .01 10.
+ END GQ-BIOPM
+
+ GQ-GENDECAY
+ RCHRES FSTDEC THFST ***
+ # - # ***
+ 1 5 .2
+ END GQ-GENDECAY
+
+ GQ-SEDDECAY
+ RCHRES KSUSP THSUSP KBED THBED ***
+ # - # ***
+ 1 5 .002
+ END GQ-SEDDECAY
+
+ GQ-KD
+ RCHRES Partition coefficients ***
+ # - # ADPM(1,1) ADPM(2,1) ADPM(3,1) ADPM(4,1) ADPM(5,1) ADPM(6,1) ***
+ 1 .0001 .001 .001 .0001 .001 .001
+ 2 3 .0001 .001 .001 1.E-10 1.E-10 1.E-10
+ 4 5 .0001 .001 .001 .0001 .001 .001
+ END GQ-KD
+
+ GQ-ADRATE
+ RCHRES Adsorption/desorption rate parameters ***
+ # - # ADPM(1,2) ADPM(2,2) ADPM(3,2) ADPM(4,2) ADPM(5,2) ADPM(6,2) ***
+ 1 150. 150. 150. .25 .25 .25
+ 2 3 150. 150. 150. 1000. 1000. 1000.
+ 4 5 150. 150. 150. .25 .25 .25
+ END GQ-ADRATE
+
+ GQ-SEDCONC
+ RCHRES SQAL1 SQAL2 SQAL3 SQAL4 SQAL5 SQAL6 ***
+ # - # ***
+ 1 .001 .01 .01 .001 .01 .01
+ 2 3 .001 .01 .01 0. 0. 0.
+ 4 5 .001 .01 .01 .001 .01 .01
+ END GQ-SEDCONC
+
+ GQ-VALUES
+ RCHRES TWAT PHVAL ROC CLD SDCNC PHY ***
+ # - # ***
+ 1 5 1.E-5
+ END GQ-VALUES
+
+ GQ-ALPHA
+ RCHRES***
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18
+ 1 5 .008 .009 .010 .011 .011 .011 .012
+ 1 5 .013 .015 .016 .017 .018 .019 .020
+ 1 5 .021 .022 .024 .024
+ END GQ-ALPHA
+
+ GQ-GAMMA
+ RCHRES***
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18
+ 1 5 .001 .001 .001 .001 .001 .001 .001
+ 1 5 .001 .002 .002 .002 .002 .002 .002
+ 1 5 .002 .002 .002 .002
+ END GQ-GAMMA
+
+ GQ-DELTA
+ RCHRES***
+ # - #*** K1 K2 K3 K4 K5 K6 K7
+ # - #*** K8 K9 K10 K11 K12 K13 K14
+ # - #*** K15 K16 K17 K18
+ 1 5 .0007 .0007 .0007 .0007 .0007 .0007 .0007
+ 1 5 .0007 .0007 .0007 .0007 .0007 .0007 .0007
+ 1 5 .0007 .0007 .0007 .0007
+ END GQ-DELTA
+
+ GQ-CLDFACT
+ RCHRES***
+ # - #*** F1 F2 F3 F4 F5 F6 F7
+ # - #*** F8 F9 F10 F11 F12 F13 F14
+ # - #*** F15 F16 F17 F18
+ 1 5 .10 .10 .10 .15 .15 .15 .15
+ 1 5 .17 .17 .17 .17 .18 .19 .20
+ 1 5 .21 .21 .21 .21
+ END GQ-CLDFACT
+
+ *** Section RQUAL ***
+
+ BENTH-FLAG
+ RCHRES BENF ***
+ # - # ***
+ 1 1
+ 4 5 1
+ END BENTH-FLAG
+
+ SCOUR-PARMS
+ RCHRES SCRVEL SCRMUL ***
+ # - # ***
+ 1 5 3.
+ END SCOUR-PARMS
+
+ *** Section OXRX ***
+
+ OX-FLAGS
+ RCHRES REAM ***
+ # - # ***
+ 2 3 1
+ 4 3
+ 5 2
+ END OX-FLAGS
+
+ OX-GENPARM
+ RCHRES KBOD20 TCBOD KODSET SUPSAT ***
+ # - # /hr ***
+ 1 5 .1 8.
+ END OX-GENPARM
+
+ OX-BENPARM
+ RCHRES BENOD TCBEN EXPOD BRBOD(1) BRBOD(2) EXPREL ***
+ # - # mg/m2.hr mg/m2.hr mg/m2.hr ***
+ 1 5 10. 1.1 1.2 20. 25. 1.3
+ END OX-BENPARM
+
+ OX-CFOREA
+ RCHRES CFOREA ***
+ # - # ***
+ 1 5.
+ END OX-CFOREA
+
+ OX-REAPARM
+ RCHRES TCGINV REAK EXPRED EXPREV ***
+ # - # /hr ***
+ 4 2.0 -1.1 1.1
+ END OX-REAPARM
+
+ OX-INIT
+ RCHRES DOX BOD SATDO ***
+ # - # mg/l mg/l mg/l ***
+ 1 5 8. 100.
+ END OX-INIT
+
+ *** Section NUTRX ***
+
+ NUT-FLAGS
+ RCHRES TAM NO2 PO4 AMV DEN ADNH ADPO PHFL ***
+ # - # ***
+ 1 5 1 1 1 1 1 0 0
+ END NUT-FLAGS
+
+ NUT-BENPARM
+ RCHRES BRTAM(1) BRTAM(2) BRPO4(1) BRPO4(2) ANAER ***
+ # - # mg/m2.hr mg/m2.hr mg/m2.hr mg/m2.hr mg/l ***
+ 1 5 11.0 33.0 1.1 2.2 0.0005
+ END NUT-BENPARM
+
+ NUT-NITDENIT
+ RCHRES KTAM20 KNO220 TCNIT KNO320 TCDEN DENOXT ***
+ # - # /hr /hr /hr mg/l ***
+ 1 5 .002 .004 1.07 .001 1.04 0.2
+ END NUT-NITDENIT
+
+ NUT-NH3VOLAT
+ RCHRES EXPNVG EXPNVL ***
+ # - # ***
+ 1 5 .50 0.6667
+ END NUT-NH3VOLAT
+
+ NUT-BEDCONC
+ RCHRES Bed concentrations of NH4 & PO4 (mg/mg) ***
+ # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
+ 1 5 0.00001 0.00001 0.00001 0.00001 0.00001 0.00001
+ END NUT-BEDCONC
+
+ NUT-ADSPARM
+ RCHRES Partition coefficients for NH4 AND PO4 (l/mg) ***
+ # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
+ 1 5 0.0001 0.0001 0.0001 10. 10. 10.
+ END NUT-ADSPARM
+
+ NUT-DINIT
+ RCHRES NO3 TAM NO2 PO4 PHVAL ***
+ # - # mg/l mg/l mg/l mg/l ph units ***
+ 1 5 40. 10. 1. 50. 7.0
+ END NUT-DINIT
+
+ NUT-ADSINIT
+ RCHRES Initial suspended NH4 and PO4 concentrations (mg/mg) ***
+ # - # NH4-sand NH4-silt NH4-clay PO4-sand PO4-silt PO4-clay ***
+ 1 5 0. 0. 0. 0. 0. 0.
+ END NUT-ADSINIT
+
+ *** Section PLANK ***
+
+ PLNK-FLAGS
+ RCHRES PHYF ZOOF BALF SDLT AMRF DECF NSFG ZFOO ***
+ # - # ***
+ 1 5 1 1 1 1 1 1
+ END PLNK-FLAGS
+
+ PLNK-PARM1
+ RCHRES RATCLP NONREF LITSED ALNPR EXTB MALGR ***
+ # - # /ft /hr ***
+ 1 5 4.5
+ END PLNK-PARM1
+
+ PHYTO-PARM
+ RCHRES SEED MXSTAY OREF CLALDH PHYSET REFSET ***
+ # - # mg/l mg/l ug/l ***
+ 1 5 .1 .1 .5 .5
+ END PHYTO-PARM
+
+ ZOO-PARM1
+ RCHRES MZOEAT ZFIL20 ZRES20 ZD OXZD ***
+ # - # mg/l.hr l/mgzoo.hr /hr /hr /hr ***
+ 1 5 .2
+ END ZOO-PARM1
+
+ PLNK-INIT
+ RCHRES PHYTO ZOO BENAL ORN ORP ORC ***
+ # - # mg/l org/l mg/m2 mg/l mg/l mg/l ***
+ 1 5 40. 200. 5. 20. 20. 20.
+ END PLNK-INIT
+
+ *** Section PHCARB ***
+
+ PH-PARM1
+ RCHRES PHCN ALKC ***
+ # - # ***
+ 1 5 50
+ END PH-PARM1
+
+ PH-INIT
+ RCHRES TIC CO2 PH ***
+ # - # mg/l mg/l ***
+ 1 5 20. 5. 8.5
+ END PH-INIT
+END RCHRES
+
+FTABLES
+ FTABLE 1
+ ROWS COLS ***
+ 14 6
+ WINTER SUMMER SPLWAY ***
+ DEPTH AREA VOLUME OUTLET OUTLET DISCH ***
+ (FT) (ACRES) (AC-FT) DISCH DISCH (CFS) ***
+ (CFS) (CFS) ***
+ .000 .000 .0000 .0000 .0000 .0000
+ 2.000 1.212 1.2120 0.0000 .0000 .0000
+ 4.000 2.424 4.8480 0.0000 .0000 .0000
+ 6.000 3.636 10.9080 0.0000 .0000 .0000
+ 8.000 4.848 19.3920 0.0000 .0000 .0000
+ 10.000 6.061 30.3050 0.0000 .0000 .0000
+ 12.000 7.273 43.6380 5.0000 3.5000 .0000
+ 14.000 8.485 59.3950 6.2500 4.3750 .0000
+ 16.000 9.697 77.5760 7.5000 5.2500 .0000
+ 18.000 10.909 98.1810 8.7500 6.1250 .0000
+ 20.000 12.121 121.2100 10.0000 7.0000 .0000
+ 21.000 12.727 133.6360 10.6250 7.4375 50.0000
+ 22.000 13.333 146.6630 11.2500 7.8750 100.0000
+ 23.000 13.939 160.3030 11.8750 8.3125 500.0000
+ END FTABLE 1
+
+ FTABLE 2
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .167 .071 .0109 1.2241 6.5
+ .333 .081 .0236 3.9148 4.4
+ .500 .091 .0379 7.8193 3.5
+ .667 .101 .0539 12.9032 3.0
+ .833 .111 .0715 19.1853 2.7
+ 1.000 .121 .0909 26.7046 2.5
+ 1.333 .141 .1347 45.6529 2.1
+ 1.667 .162 .1852 70.1757 1.9
+ 2.000 .182 .2424 100.7192 1.7
+ 2.667 .586 .4983 201.9005 1.8
+ 3.333 .990 1.0236 344.6344 2.2
+ 4.000 1.394 1.8182 537.0775 2.5
+ END FTABLE 2
+
+ FTABLE 3
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .167 .071 .0109 1.4992 5.3
+ .333 .081 .0236 4.7947 3.6
+ .500 .091 .0379 9.5766 2.9
+ .667 .101 .0539 15.8032 2.5
+ .833 .111 .0715 23.4971 2.2
+ 1.000 .121 .0909 32.7063 2.0
+ 1.333 .141 .1347 55.9132 1.7
+ 1.667 .162 .1852 85.9474 1.6
+ 2.000 .182 .2424 123.3553 1.4
+ 2.667 .586 .4983 247.2766 1.5
+ 3.333 .990 1.0236 422.0892 1.8
+ 4.000 1.394 1.8182 657.7828 2.0
+ END FTABLE 3
+
+ FTABLE 4
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .250 .848 .1970 .9024 158.5
+ .500 .970 .4242 2.8860 106.7
+ .750 1.091 .6818 5.7642 85.9
+ 1.000 1.212 .9697 9.5120 74.0
+ 1.250 1.333 1.2879 14.1431 66.1
+ 1.500 1.455 1.6364 19.6862 60.3
+ 2.000 1.697 2.4242 33.6545 52.3
+ 2.500 1.939 3.3333 51.7323 46.8
+ 3.000 2.182 4.3636 74.2486 42.7
+ 4.000 11.879 11.3939 155.5774 53.2
+ 5.000 21.576 28.1212 296.8633 68.8
+ 6.000 31.273 54.5454 522.1440 75.8
+ END FTABLE 4
+
+ FTABLE 5
+ ROWS COLS ***
+ 13 4
+ DEPTH AREA VOLUME DISCH FLO-THRU ***
+ (FT) (ACRES) (AC-FT) (CFS) (MIN) ***
+ .000 .000 .0000 .000 0.0
+ .333 1.697 .5253 1.5869 240.3
+ .667 1.939 1.1313 5.0752 161.8
+ 1.000 2.182 1.8182 10.1370 130.2
+ 1.333 2.424 2.5859 16.7279 112.2
+ 1.667 2.667 3.4343 24.8719 100.2
+ 2.000 2.909 4.3636 34.6200 91.5
+ 2.667 3.394 6.4646 59.1848 79.3
+ 3.333 3.879 8.8889 90.9763 70.9
+ 4.000 4.364 11.6364 130.5731 64.7
+ 5.333 36.687 39.0034 284.8886 99.4
+ 6.667 69.010 109.4680 593.7734 133.8
+ 8.000 101.333 223.0302 1129.6948 143.3
+ END FTABLE 5
+END FTABLES
+
+DISPLY
+ DISPLY-INFO1
+ # - #<----------Title----------->***TRAN PIVL DIG1 FIL1 PYR DIG2 FIL2 YRND
+ 1 O2 CONC, MEIER POND (mg/l) AVER 1 2 66 12
+ 2 PEST SED CONC, POND (mg/kg) AVER 1 2 66 12
+ 3 O2 CONC,LOWER KITTLE C(mg/l) AVER 1 2 66 12
+ 4 PEST SED CONC,L KTL C(mg/kg) AVER 1 2 66 12
+ 5 WATER TEMP,MEIER POND (DEGF) AVER 1 2 66 12
+ END DISPLY-INFO1
+END DISPLY
+
+GENER
+ OPCODE
+ # - # Op- ***
+ code ***
+ 1 2 19
+ END OPCODE
+END GENER
+
+PLTGEN
+ PLOTINFO
+ # - # FILE NPT NMN LABL PYR PIVL ***
+ 1 94 2 24
+ 2 95 3 1 6
+ END PLOTINFO
+
+ GEN-LABELS
+ # - #<----------------Title ----------------> *** <------Y axis------>
+ 1 SIMULATED FLOWS (CFS) CFS
+ 2 SIMULATED VALS RELATED TO TEMP&PH,RCH 4
+ END GEN-LABELS
+
+ SCALING
+ # - # YMIN YMAX IVLIN ***
+ 1 2 0. 150. 20.
+ END SCALING
+
+ CURV-DATA (first curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 1 TOTAL POND OUTFL 7 1 AVER
+ 2 AVDEP FOR RCH 4 7 1 LAST
+ END CURV-DATA
+
+ CURV-DATA (second curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 1 LOWER KITTLE CR 8 2 AVER
+ 2 TW FOR RCH 4 8 2 LAST
+ END CURV-DATA
+
+ CURV-DATA (third curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 2 PH FOR RCH 4 9 2 LAST
+ END CURV-DATA
+
+ CURV-DATA (fourth curve)
+ <-Curve label--> Line Intg Col Tran ***
+ # - # type eqv code code ***
+ 2 HTEXCH FOR RCH 4 10 2
+ END CURV-DATA
+END PLTGEN
+
+EXT SOURCES
+<-Volume-> SsysSgap<--Mult-->Tran <-Target vols> <-Grp> <-Member-> ***
+ # # tem strg<-factor->strg # # # # ***
+WDM 39 PREC ENGLZERO SAME PERLND 1 EXTNL PREC
+WDM 131 PREC ENGLZERO SAME IMPLND 1 EXTNL PREC
+WDM 39 PREC ENGLZERO SAME RCHRES 1 3 EXTNL PREC
+WDM 131 PREC ENGLZERO SAME RCHRES 4 5 EXTNL PREC
+WDM 123 ATMP ENGL SAME PERLND 1 ATEMP AIRTMP
+WDM 122 ATMP ENGL SAME IMPLND 1 ATEMP AIRTMP
+WDM 123 ATMP ENGL SAME RCHRES 1 3 EXTNL GATMP
+WDM 122 ATMP ENGL SAME RCHRES 4 5 EXTNL GATMP
+WDM 41 EVAP ENGL .7 DIV PERLND 1 EXTNL PETINP
+WDM 41 EVAP ENGL .7 DIV IMPLND 1 EXTNL PETINP
+WDM 41 EVAP ENGL .7 DIV RCHRES 1 5 EXTNL POTEV
+WDM 42 WIND ENGL DIV PERLND 1 EXTNL WINMOV
+WDM 42 WIND ENGL DIV IMPLND 1 EXTNL WINMOV
+WDM 42 WIND ENGL DIV RCHRES 1 5 EXTNL WIND
+WDM 46 SOLR ENGL DIV PERLND 1 EXTNL SOLRAD
+WDM 46 SOLR ENGL DIV IMPLND 1 EXTNL SOLRAD
+WDM 46 SOLR ENGL DIV RCHRES 1 5 EXTNL SOLRAD
+WDM 126 DEWP ENGL SAME PERLND 1 EXTNL DTMPG
+WDM 125 DEWP ENGL SAME IMPLND 1 EXTNL DTMPG
+WDM 126 DEWP ENGL SAME RCHRES 1 3 EXTNL DEWTMP
+WDM 125 DEWP ENGL SAME RCHRES 4 5 EXTNL DEWTMP
+WDM 140 CLND ENGL SAME RCHRES 1 EXTNL COLIND
+WDM 135 CLDC ENGL SAME PERLND 1 EXTNL CLOUD
+WDM 135 CLDC ENGL SAME IMPLND 1 EXTNL CLOUD
+WDM 135 CLDC ENGL SAME RCHRES 1 5 EXTNL CLOUD
+END EXT SOURCES
+
+SCHEMATIC
+<-Source-> <--Area--> <-Target-> ***
+ # <-factor-> # # ***
+PERLND 1 6000. RCHRES 1 1
+IMPLND 1 3000. RCHRES 5 2
+RCHRES 1 RCHRES 2 3
+RCHRES 1 RCHRES 3 4
+RCHRES 2 RCHRES 4 5
+RCHRES 3 RCHRES 4 5
+RCHRES 4 RCHRES 5 5
+END SCHEMATIC
+
+MASS-LINK
+
+ MASS-LINK 1
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor-> # # ***
+PERLND PWATER PERO 0.0833333 RCHRES INFLOW IVOL
+PERLND PWTGAS POHT RCHRES INFLOW IHEAT
+PERLND PWTGAS PODOXM RCHRES INFLOW OXIF 1
+PERLND PWTGAS POCO2M RCHRES INFLOW PHIF 2
+ END MASS-LINK 1
+
+ MASS-LINK 2
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor-> # # ***
+IMPLND IWATER SURO 0.0833333 RCHRES INFLOW IVOL
+IMPLND SOLIDS SOSLD 0.10 RCHRES INFLOW ISED 1
+IMPLND SOLIDS SOSLD 0.46 RCHRES INFLOW ISED 2
+IMPLND SOLIDS SOSLD 0.44 RCHRES INFLOW ISED 3
+IMPLND IWTGAS SOHT RCHRES INFLOW IHEAT
+IMPLND IWTGAS SODOXM RCHRES INFLOW OXIF 1
+IMPLND IWTGAS SOCO2M RCHRES INFLOW PHIF 2
+IMPLND IQUAL SOQUAL RCHRES INFLOW OXIF 2
+ END MASS-LINK 2
+
+ MASS-LINK 3
+ <-Grp> <-Member-><--Mult--> <-Grp> <-Member-> ***
+ # #<-factor->