diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 50a5dbc..b4253e0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -3,7 +3,6 @@ on: pull_request: branches: [ main ] - jobs: tests: runs-on: ubuntu-20.04 @@ -16,9 +15,11 @@ jobs: with: python-version: ${{ matrix.python-version}} architecture: x64 - - name: install requirements + - name: Install requirements run: pip3 install -r tests/requirements.txt - - name: run tests + - name: Make shell script executable + run: chmod +x tests/swt/scripts/run.sh + - name: Run tests run: pytest -v canpackage: runs-on: ubuntu-20.04 @@ -31,10 +32,9 @@ jobs: with: python-version: ${{ matrix.python-version}} architecture: x64 - - name: install requirements + - name: Install requirements run: pip3 install -r tests/requirements.txt - - name: package + - name: Package run: ./package.sh - - name: run package + - name: Run package run: python build/repgen.zip -i test.manual/test.if - diff --git a/.gitignore b/.gitignore index bea09fc..64c2f3d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ test_priv/* *~ .vscode *.swp +*.log \ No newline at end of file diff --git a/__main__.py b/__main__.py index 33707fb..650653f 100644 --- a/__main__.py +++ b/__main__.py @@ -1,9 +1,15 @@ -import sys,time,datetime,pytz,tempfile,shutil,os +import sys, pytz, datetime, tempfile, shutil, os, time + +import repgen from repgen.data.value import Value from repgen.report import Report from repgen.util import filterAddress +from repgen import __version__, THREAD_COUNT +from repgen.workers.http import processSiteWorker + +import threading +from queue import Queue -version = "5.0.5" # setup base time, ex # default formats @@ -25,6 +31,7 @@ def parseArgs(): parser.add_argument( '-a', '--address', dest='host', default='localhost', help="location for data connections; equivalent to `DB=hostname:port/path`", metavar='IP_or_hostname:port[/basepath]') parser.add_argument( '-A', '--alternate', dest='alternate', default=None, help="alternate location for data connections, if the primary is unavailable (only for RADAR)", metavar='IP_or_hostname:port[/basepath]') parser.add_argument( '-c', '--compatibility', dest='compat', action="store_true", default=False, help="repgen4 compatibility; case-insensitive labels") + parser.add_argument( '-p', '--parallel', dest="parallel", action="store_true", default=False, help=f"When this flag is setup Repgen5 will process requests in parallel with {THREAD_COUNT} threads." ) parser.add_argument( '--timeout', dest='timeout', type=float, default=None, help="Socket timeout, in seconds" ) # This provides repgen4 style KEY=VALUE argument passing on the command-line parser.add_argument( 'set', default=[], help="Additional key=value pairs. e.g. `DBTZ=UTC DBOFC=HEC`", metavar="KEY=VALUE", nargs="*" ) @@ -37,38 +44,40 @@ def parseArgs(): # https://stackoverflow.com/a/52014520 def parse_var(s): - """ - Parse a key, value pair, separated by '=' - That's the reverse of ShellArgs. - - On the command line (argparse) a declaration will typically look like: - foo=hello - or - foo="hello world" - """ - items = s.split('=') - key = items[0].strip() # we remove blanks around keys, as is logical - if len(items) > 1: - # rejoin the rest: - value = '='.join(items[1:]) - return (key, value) + """ + Parse a key, value pair, separated by '=' + That's the reverse of ShellArgs. + + On the command line (argparse) a declaration will typically look like: + foo=hello + or + foo="hello world" + """ + items = s.split('=') + key = items[0].strip() # we remove blanks around keys, as is logical + if len(items) > 1: + # rejoin the rest: + value = '='.join(items[1:]) + return (key, value) def parse_vars(items): - """ - Parse a series of key-value pairs and return a dictionary and - a success boolean for whether each item was successfully parsed. - """ - count = 0 - d = {} - for item in items: - if "=" in item: - split_string = item.split("=") - d[split_string[0].strip().upper()] = split_string[1].strip() - count += 1 - else: - print(f"Error: Invalid argument provided - {item}") - - return d, count == len(items) + """ + Parse a series of key-value pairs and return a dictionary and + a success boolean for whether each item was successfully parsed. + """ + count = 0 + d = {} + for item in items: + if "=" in item: + split_string = item.split("=") + d[split_string[0].strip().upper()] = split_string[1].strip() + count += 1 + else: + print(f"Error: Invalid argument provided - {item}") + + return d, count == len(items) + + # Pytz doesn't know all the aliases and abbreviations # This works for Pacific, but untested in other locations that don't use DST. @@ -93,12 +102,13 @@ def parse_vars(items): } if __name__ == "__main__": + start_time = time.time() config = parseArgs() kwargs = parse_vars(config.set)[0] - if config.show_ver == True: - print(version) + print(__version__) sys.exit(0) + report_file = kwargs.get("IN", config.in_file) out_file = kwargs.get("REPORT", config.out_file) @@ -123,16 +133,27 @@ def parse_vars(items): # set some of the default values Value(1, host=host, path=path, tz=tz, ucformat=config.compat, timeout=config.timeout, althost=althost, altpath=altpath, dbofc=config.office, **kwargs) - + + # Enable IO bound process multi-threading + print ("parallel", config.parallel) + # if the user has a need for speed + if config.parallel: + repgen.queue = Queue() + # Setup worker threads + for _ in range(THREAD_COUNT): + thread = threading.Thread(target=processSiteWorker, args=(repgen.queue, )) + thread.daemon = True + thread.start() + repgen.threads.append(thread) # read the report file if report_file == '-': report_file = sys.stdin.name f = sys.stdin else: + # TODO: change this to a context manager/with f = open(report_file, 'rt') report_data = f.read() f.close() - base_date = kwargs.get("DATE", config.base_date) base_time = kwargs.get("TIME", config.base_time) delta = datetime.timedelta() @@ -151,6 +172,7 @@ def parse_vars(items): # Read data file input data_file = kwargs.get("FILE", config.data_file) if data_file: + # TODO: context manager? f_d = open(config.data_file) key = None prefix = "" @@ -182,10 +204,10 @@ def parse_vars(items): key = None f_d.close() - # exec the definitions - report = Report(report_data, report_file, config.compat) + report = Report(report_data, report_file, config.compat, config.parallel, **kwargs) report.run(basedate, local_vars) + output = None tmpname = None @@ -204,3 +226,4 @@ def parse_vars(items): mask = os.umask(0) os.chmod(out_file, 0o666 & (~mask)) os.umask(mask) + print(f"Report created after {round(time.time() - start_time, 3)}s") \ No newline at end of file diff --git a/repgen/__init__.py b/repgen/__init__.py index e69de29..441b408 100644 --- a/repgen/__init__.py +++ b/repgen/__init__.py @@ -0,0 +1,15 @@ +__version__ = "5.1.0" +# =========================================== # +# THREADING VARS # +# =========================================== # +THREAD_COUNT = 15 +THREAD_TIMEOUT = 30 # Seconds to consider thread is still alive +# =========================================== # +REPGEN_GITHUB_ISSUES_URL = "https://github.com/USACE-WaterManagement/repgen5/issues" +# CDA Constants +PARAM_DT_FMT = "%Y-%m-%dT%H:%M:%S" +# =========================================== # +# Global Variables Shared Between Classes # +# =========================================== # +threads = [] +queue = None \ No newline at end of file diff --git a/repgen/data/value.py b/repgen/data/value.py index ae5953d..f418148 100644 --- a/repgen/data/value.py +++ b/repgen/data/value.py @@ -1,18 +1,23 @@ -import pytz,datetime,sys,time as ttime +from repgen import __version__ +import datetime +import sys import operator from inspect import isfunction import copy import math from decimal import Decimal,DivisionByZero,DecimalException,getcontext import ssl -from ssl import SSLError + import re from repgen.util import extra_operator, filterAddress import signal +# 3rd Party Libs +import pytz +import repgen try: # Relativedelta supports months and years, but is external library - from dateutil.relativedelta import relativedelta as timedelta + from dateutil.relativedelta import timedelta except: # Included with python, but doesn't support longer granularity than weeks. # This can cause issues for leap years if not accounted for. @@ -21,6 +26,9 @@ # need to enable legacy ciphers for public CDA instance ssl_ctx = ssl.create_default_context() ssl_ctx.set_ciphers('DEFAULT') +# fetchTimeseriesCDA requires ssl_ctx +from repgen.workers.http import fetchTimeseriesCDA + # types string_types = (b"".__class__,u"".__class__) @@ -57,7 +65,6 @@ class Value: "use_alternate": False, # Alternate server in use, if primary is unavailable } - # This isn't thread safe, not an issue yet though since repgen isn't multithreaded. _conn = None #region Properties @@ -130,7 +137,6 @@ def processDateTime(value, key, extra_part=None): value = value + timedelta(days=+1) return (value, is_24) - self.index = None self.type="SCALAR" self.value = None @@ -396,181 +402,15 @@ def parse_slice(value): except Exception as err: print( repr(err) + " : " + str(err), file=sys.stderr ) elif self.dbtype.upper() in ["JSON", "RADAR"]: - import json, http.client as httplib, urllib.parse as urllib - - #fmt = "%d-%b-%Y %H%M" - fmt = "%Y-%m-%dT%H:%M:%S" - tz = self.dbtz - units = self.dbunits - ts_name = ".".join( (self.dbloc, self.dbpar, self.dbptyp, str(self.dbint), str(self.dbdur), self.dbver) ) - - if self.start is None or self.end is None: - return - - # Loop until we fetch some data, if missing is NOMISS - retry_count = 10 # Go back at most this many weeks + 1 - sstart = tz.normalize(tz.localize(self.start)) if self.start.tzinfo is None else self.start - send = tz.normalize(tz.localize(self.end)) if self.end.tzinfo is None else self.end - - path = self.path if not Value.shared["use_alternate"] else self.altpath - host = self.host if not Value.shared["use_alternate"] else self.althost - headers = { 'Accept': "application/json;version=2" } - - while(retry_count > 0): - # Convert time to destination timezone - # Should this actually convert the time to the destination time zone (astimezone), or simply swap the TZ (replace)? - # 'astimezone' is be the "proper" behavior, but 'replace' mimics repgen_4. - # This should *not* be a naive datetime - assert sstart.tzinfo is not None, "Naive datetime; start time should contain timezone" - assert send.tzinfo is not None, "Naive datetime; end time should contain timezone" - start = sstart.astimezone(tz) - end = send.astimezone(tz) - - params = urllib.urlencode( { - "name": ts_name, - "unit": units, - "begin": start.strftime(fmt), - "end": end.strftime(fmt), - "office": self.dbofc if self.dbofc is not None else "", - "timezone": str(tz), - "pageSize": -1, # always fetch all results - }) - - sys.stderr.write("Getting %s from %s to %s in tz %s, with units %s\n" % (ts_name,start.strftime(fmt),end.strftime(fmt),str(tz),units)) - + print("queue", repgen.queue) + if repgen.queue: + repgen.queue.put((self)) + else: try: - data = None - retry_until_alternate = 3 - while retry_until_alternate > 0: - retry_until_alternate -= 1 - if path is None: - path = "" - - query = f"/{path}/timeseries?" - - # The http(s) guess isn't perfect, but it's good enough. It's for display purposes only. - print("Fetching: %s" % ("https://" if host[-2:] == "43" else "http://") + host+query+params, file=sys.stderr) - - try: - if sys.platform != "win32" and self.timeout: - # The SSL handshake can sometimes fail and hang indefinitely - # inflate the timeout slightly, so the socket has a chance to return a timeout error - # This is a failsafe to prevent a hung process - signal.alarm(int(self.timeout * 1.1) + 1) - - if Value._conn is None: - try: - from repgen.util.urllib2_tls import TLS1Connection - Value._conn = TLS1Connection( host, timeout=self.timeout, context=ssl_ctx ) - Value._conn.request("GET", "/{path}" ) - except SSLError as err: - print(type(err).__name__ + " : " + str(err), file=sys.stderr) - print("Falling back to non-SSL", file=sys.stderr) - # SSL not supported (could be standalone instance) - Value._conn = httplib.HTTPConnection( host, timeout=self.timeout ) - Value._conn.request("GET", "/{path}" ) - - # Test if the connection is valid - Value._conn.getresponse().read() - - Value._conn.request("GET", query+params, None, headers ) - r1 = Value._conn.getresponse() - - # getresponse can also hang sometimes, so keep alarm active until after we fetch the response - if sys.platform != "win32" and self.timeout: - signal.alarm(0) # disable the alarm - - # Grab the charset from the headers, and decode the response using that if set - # HTTP default charset is iso-8859-1 for text (RFC 2616), and utf-8 for JSON (RFC 4627) - parts = r1.getheader("Content-Type").split(";") - charset = "iso-8859-1" if parts[0].startswith("text") else "utf-8" # Default charset - - if len(parts) > 1: - for prop in parts: - prop_parts = prop.split("=") - if len(prop_parts) > 1 and prop_parts[0].lower() == "charset": - charset = prop_parts[1] - - data = r1.read().decode(charset) - - if r1.status == 200: - break - - print("HTTP Error " + str(r1.status) + ": " + data, file=sys.stderr) - if r1.status == 404: - json.loads(data) - # We don't care about the actual error, just if it's valid JSON - # Valid JSON means it was a RADAR response, so we treat it as a valid response, and won't retry. - break - except (httplib.NotConnected, httplib.ImproperConnectionState, httplib.BadStatusLine, ValueError, OSError) as e: - print(f"Error fetching: {e}", file=sys.stderr) - if retry_until_alternate == 0 and self.althost is not None and host != self.althost: - print("Trying alternate server", file=sys.stderr) - Value.shared["use_alternate"] = True - (host, path) = (self.althost, self.altpath) - Value._conn = None - retry_until_alternate = 3 - else: - print("Reconnecting to server and trying again", file=sys.stderr) - ttime.sleep(3) - try: - Value._conn.close() - except: - pass - Value._conn = None - continue - - data_dict = None - - try: - data_dict = json.loads(data) - except json.JSONDecodeError as err: - print(str(err), file=sys.stderr) - print(repr(data), file=sys.stderr) - - # get the depth - prev_t = 0 - #print repr(data_dict) - - if data_dict.get("total", 0) > 0: - for d in data_dict["values"]: - _t = float(d[0])/1000.0 # json returns times in javascript time, milliseconds since epoch, convert to unix time of seconds since epoch - _dt = datetime.datetime.fromtimestamp(_t,pytz.utc) - _dt = _dt.astimezone(self.dbtz) - #_dt = _dt.replace(tzinfo=self.tz) - #print("_dt: %s" % repr(_dt)) - #print _dt - if d[1] is not None: - #print("Reading value: %s" % d[1]) - _v = float(d[1]) # does not currently implement text operations - else: - _v = None - _q = int(d[2]) - self.values.append( ( _dt,_v,_q ) ) - else: - print("No values were fetched.", file=sys.stderr) - - if self.ismissing(): - if self.missing == "NOMISS": - sstart = sstart - timedelta(weeks=1) - retry_count = retry_count - 1 - continue - - if self.time: - self.type = "SCALAR" - if self.missing == "NOMISS": - # Get the last one, in case we fetched extra because of NOMISS - for v in reversed(self.values): - if v is not None and v[1] is not None: - self.value = v[1] - break - elif len(self.values) > 0: - self.value = self.values[-1][1] - + fetchTimeseriesCDA(self) except Exception as err: print( repr(err) + " : " + str(err), file=sys.stderr ) - - break + elif self.dbtype.upper() == "DSS": raise Exception("DSS retrieval is not currently implemented") @@ -1101,7 +941,7 @@ def apply( function, *args, **kwargs ): values = [] typ = Value.shared["dbtype"] for i in range(0,returns): - # If the first argument is a Value object, copy it so the properties apply + # # If the first argument is a Value object, copy it so the properties apply if len(args) > 0 and isinstance(args[0], Value): tmp = Value(args[0], copyshared=False) else: @@ -1183,7 +1023,7 @@ def min( *args, **kwarg ): else: if isinstance( treat, number_types): tmp.value = treat - elif treat=="MISS": + elif py=="MISS": tmp.value = None return tmp diff --git a/repgen/report/report.py b/repgen/report/report.py index 0770d63..584907c 100644 --- a/repgen/report/report.py +++ b/repgen/report/report.py @@ -1,5 +1,7 @@ import sys,time,datetime,pytz,tempfile,shutil,os,operator,calendar,re from repgen.data.value import Value +import repgen + try: # Relativedelta supports months and years, but is external library from dateutil.relativedelta import relativedelta as timedelta @@ -8,14 +10,15 @@ from datetime import timedelta class Report: - def __init__(self, report, file_name, compatibility): - self.repfilename = file_name - self.repfile = report - self.replines = [] + def __init__(self, report, file_name, compatibility, parallel=False, *args, **kwargs): + self.data = {} self.datadef = "" + self.replines = [] + self.repfile = report + self.repfilename = file_name self.compatibility = compatibility - self.data = {} - + self.parallel = parallel + self.thread = kwargs.get("thread", None) lines = map(lambda s: s.strip('\r'), report.split(sep='\n')) deflines = [] state="none" @@ -125,7 +128,14 @@ def run( self, basedate, local_vars: dict = None ): # Compile the report, so source and line number information can be reported to the user exec(compile(self.datadef, self.repfilename, "exec"), globals(), my_locals) - + if self.parallel: + print("Waiting for all tasks to be processed. . .") + repgen.queue.join() + print("All tasks processed!") + for _ in range(len(repgen.threads)): + repgen.queue.put(None) + for thread in repgen.threads: + thread.join() # loop through my_locals and add them # to a dictionary with the % in front of the them # to mark location on the report @@ -133,4 +143,5 @@ def run( self, basedate, local_vars: dict = None ): for key in my_locals: if isinstance(my_locals[key], Value ): + # TODO: this could cause a bug if someone is placing a % in the report with the same text after it i.e. css self.data["%"+key] = my_locals[key] diff --git a/repgen/workers/http.py b/repgen/workers/http.py new file mode 100644 index 0000000..11a3244 --- /dev/null +++ b/repgen/workers/http.py @@ -0,0 +1,220 @@ +from repgen import THREAD_TIMEOUT, PARAM_DT_FMT, REPGEN_GITHUB_ISSUES_URL +import time +import json +import sys +from datetime import datetime, timedelta +import pytz +import signal +from ssl import SSLError +from repgen.data.value import ssl_ctx + +import threading +import http.client as httplib, urllib.parse as urllib + +def fetchTimeseriesCDA(v_self): + """ + Fetches time series data from CDA processes the results. + + This function constructs a time series name from various attributes of `v_self`, + handles time zone normalization, builds a request to fetch data from a specified CWMS Data API endpoint, + and retries the request if necessary. It processes the fetched data and stores it in in the passed in v_self (Value Class object). + + Args: + v_self: An instance of a class that holds various attributes required for fetching + the time series data, including start and end times, database location, + parameter, type, interval, duration, version, time zone, units, paths, hosts, + connection, timeout, and other configurations. + + Returns: + None + + Raises: + AssertionError: If the start or end time is a naive datetime (i.e., without timezone info). + Exception: Global handle if any error occurs during the data fetching process. + """ + tz = v_self.dbtz + units = v_self.dbunits + ts_name = ".".join( (v_self.dbloc, v_self.dbpar, v_self.dbptyp, str(v_self.dbint), str(v_self.dbdur), v_self.dbver) ) + + if v_self.start is None or v_self.end is None: + return + + # Loop until we fetch some data, if missing is NOMISS + retry_count = 10 # Go back at most this many weeks + 1 + sstart = tz.normalize(tz.localize(v_self.start)) if v_self.start.tzinfo is None else v_self.start + send = tz.normalize(tz.localize(v_self.end)) if v_self.end.tzinfo is None else v_self.end + path = v_self.path if not v_self.shared["use_alternate"] else v_self.altpath + host = v_self.host if not v_self.shared["use_alternate"] else v_self.althost + headers = { 'Accept': "application/json;version=2" } + while(retry_count > 0): + # Convert time to destination timezone + # Should this actually convert the time to the destination time zone (astimezone), or simply swap the TZ (replace)? + # 'astimezone' is be the "proper" behavior, but 'replace' mimics repgen_4. + # This should *not* be a naive datetime + assert sstart.tzinfo is not None, "Naive datetime; start time should contain timezone" + assert send.tzinfo is not None, "Naive datetime; end time should contain timezone" + start = sstart.astimezone(tz) + end = send.astimezone(tz) + + params = urllib.urlencode( { + "name": ts_name, + "unit": units, + "begin": start.strftime(PARAM_DT_FMT), + "end": end.strftime(PARAM_DT_FMT), + "office": v_self.dbofc if v_self.dbofc is not None else "", + "timezone": str(tz), + "pageSize": -1, # always fetch all results + }) + + sys.stderr.write(f"Getting {ts_name} from {start.strftime(PARAM_DT_FMT)} to {end.strftime(PARAM_DT_FMT)} in tz {tz}, with units {units}\n") + + try: + data = None + retry_until_alternate = 3 + while retry_until_alternate > 0: + retry_until_alternate -= 1 + if path is None: + path = "" + + query = f"/{path}/timeseries?" + + # The http(s) guess isn't perfect, but it's good enough. It's for display purposes only. + print("Fetching: %s" % ("https://" if host[-2:] == "43" else "http://") + host+query+params, file=sys.stderr) + + try: + if sys.platform != "win32" and v_self.timeout: + # The SSL handshake can sometimes fail and hang indefinitely + # inflate the timeout slightly, so the socket has a chance to return a timeout error + # This is a failsafe to prevent a hung process + signal.alarm(int(v_self.timeout * 1.1) + 1) + + if v_self._conn is None: + try: + from repgen.util.urllib2_tls import TLS1Connection + v_self._conn = TLS1Connection( host, timeout=v_self.timeout, context=ssl_ctx ) + v_self._conn.request("GET", "/{path}" ) + except SSLError as err: + print(type(err).__name__ + " : " + str(err), file=sys.stderr) + print("Falling back to non-SSL", file=sys.stderr) + # SSL not supported (could be standalone instance) + v_self._conn = httplib.HTTPConnection( host, timeout=v_self.timeout ) + v_self._conn.request("GET", "/{path}" ) + + # Test if the connection is valid + v_self._conn.getresponse().read() + + v_self._conn.request("GET", query+params, None, headers ) + r1 = v_self._conn.getresponse() + + # getresponse can also hang sometimes, so keep alarm active until after we fetch the response + if sys.platform != "win32" and v_self.timeout: + signal.alarm(0) # disable the alarm + + # Grab the charset from the headers, and decode the response using that if set + # HTTP default charset is iso-8859-1 for text (RFC 2616), and utf-8 for JSON (RFC 4627) + parts = r1.getheader("Content-Type").split(";") + charset = "iso-8859-1" if parts[0].startswith("text") else "utf-8" # Default charset + + if len(parts) > 1: + for prop in parts: + prop_parts = prop.split("=") + if len(prop_parts) > 1 and prop_parts[0].lower() == "charset": + charset = prop_parts[1] + + data = r1.read().decode(charset) + + if r1.status == 200: + break + + print("HTTP Error " + str(r1.status) + ": " + data, file=sys.stderr) + if r1.status == 404: + json.loads(data) + # We don't care about the actual error, just if it's valid JSON + # Valid JSON means it was a RADAR response, so we treat it as a valid response, and won't retry. + break + except (httplib.NotConnected, httplib.ImproperConnectionState, httplib.BadStatusLine, ValueError, OSError) as e: + print(f"Error fetching: {e}", file=sys.stderr) + if retry_until_alternate == 0 and v_self.althost is not None and host != v_self.althost: + print("Trying alternate server", file=sys.stderr) + v_self.shared["use_alternate"] = True + (host, path) = (v_self.althost, v_self.altpath) + v_self._conn = None + retry_until_alternate = 3 + else: + print("Reconnecting to server and trying again", file=sys.stderr) + time.sleep(3) + try: + v_self._conn.close() + except: + pass + v_self._conn = None + continue + + data_dict = None + + try: + data_dict = json.loads(data) + except json.JSONDecodeError as err: + print(str(err), file=sys.stderr) + print(repr(data), file=sys.stderr) + + if data_dict.get("total", 0) > 0: + for d in data_dict["values"]: + # json returns times in javascript time, + # milliseconds since epoch, + # convert to unix time of seconds since epoch + _t = float(d[0])/1000.0 + _dt = datetime.fromtimestamp(_t,pytz.utc) + _dt = _dt.astimezone(v_self.dbtz) + if d[1] is not None: + # does not currently implement text operations + _v = float(d[1]) + else: + _v = None + _q = int(d[2]) + v_self.values.append( ( _dt,_v,_q ) ) + else: + print("No values were fetched.", file=sys.stderr) + + if v_self.ismissing(): + if v_self.missing == "NOMISS": + sstart = sstart - timedelta(weeks=1) + retry_count = retry_count - 1 + continue + + if v_self.time: + v_self.type = "SCALAR" + if v_self.missing == "NOMISS": + # Get the last one, in case we fetched extra because of NOMISS + for v in reversed(v_self.values): + if v is not None and v[1] is not None: + v_self.value = v[1] + break + elif len(v_self.values) > 0: + v_self.value = v_self.values[-1][1] + except Exception as err: + print( repr(err) + " : " + str(err), file=sys.stderr ) + break + +def processSiteWorker(_queue): + """ + Process site worker function that continuously retrieves tasks from a queue and processes them. + ALL of these will terminate gracefully when self.queue.join() is called at the end of report.py + + Parameters: + queue (Queue): Queue process + + Returns: + results (list) + """ + while True: + value_self = _queue.get(timeout=THREAD_TIMEOUT) + try: + if value_self is None: + break + print("Fetching", value_self.dbloc, value_self.dbpar, value_self.dbptyp, value_self.dbint, value_self.dbdur, value_self.dbver) + fetchTimeseriesCDA(value_self) + except Exception as err: + print( 'Thread Error:\n\t' + repr(err) + " : " + str(err), file=sys.stderr ) + finally: + _queue.task_done() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 0a8ff74..3443d6c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,4 @@ -python-dateutil==2.8.2 -pytz==2024.1 +coverage==5.4 +pytz==2022.1 +pytest==7.0.1 +python-dateutil==2.8.2 \ No newline at end of file diff --git a/tests/expect/i-base.battery b/tests/spk/actual/i-base.battery similarity index 100% rename from tests/expect/i-base.battery rename to tests/spk/actual/i-base.battery diff --git a/tests/expect/i-blb b/tests/spk/actual/i-blb similarity index 100% rename from tests/expect/i-blb rename to tests/spk/actual/i-blb diff --git a/tests/expect/i-resstat b/tests/spk/actual/i-resstat similarity index 99% rename from tests/expect/i-resstat rename to tests/spk/actual/i-resstat index 43acc46..e4a6b31 100644 --- a/tests/expect/i-resstat +++ b/tests/spk/actual/i-resstat @@ -3586,4 +3586,3 @@ else: DBLOC="Vallecito", ) #ENDDEF - diff --git a/tests/expect/i-ucb b/tests/spk/actual/i-ucb similarity index 100% rename from tests/expect/i-ucb rename to tests/spk/actual/i-ucb diff --git a/tests/spk/expect/i-base.battery b/tests/spk/expect/i-base.battery new file mode 100644 index 0000000..73cc1ac --- /dev/null +++ b/tests/spk/expect/i-base.battery @@ -0,0 +1,138 @@ +#FORM +Year/Month %MONYR +Report As of %CURDATE +%TITLE + Loaded Normal +Day min max min max +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +%DY %VLmin %VLmax %VBmin %VBMax +#ENDFORM +# Generated with dateutil.relativedelta support. +#DEF +# !ECHO +# +UNDEF="????" +# +# Force the %BASDATE to a midnight value, so that TIME= does not have to be +# specified on the command line. +# +BASDATE.value = BASDATE.value.replace(hour=0,minute=0,second=0,microsecond=0) +# +CURDATE.undef = "????" +Value.shared["undef"] = "????" +CURDATE.picture = "%d %b %Y @ %K%M" +Value.shared["picture"] = "%d %b %Y @ %K%M" +MONYR = Value(BASDATE, + PICTURE="%B %Y", +) +# +# Compute the beginning and ending days of the report. Data is available +# only up thru yesterday. Therefore, +# IF yesterday is >= the end of the month THEN +# Produce a report for the entire month (%ETIME = end-of-month) +# ELSEIF end-of-month > yesterday > start-of-month THEN +# Produce a partial month report (%ETIME = yesterday) +# ELSE the month lies completely in the future, so... +# Produce a report for the entire month consisting all No Reports +# ENDIF +# +STIME = Value(BASDATE) +STIME.value = STIME.value.replace(day=2) +STIME.picture = "%B %Y" +EOM = Value(BASDATE.value.replace(year=BASDATE.value.timetuple().tm_year,month=BASDATE.value.timetuple().tm_mon,day=calendar.monthrange(BASDATE.value.timetuple().tm_year, BASDATE.value.timetuple().tm_mon)[1],hour=0,minute=0,second=0,microsecond=0)) +STMDAY = Value((STIME.value.timetuple().tm_year - 1900)*1000 + STIME.value.timetuple().tm_yday) +EOMDAY = Value((EOM.value.timetuple().tm_year - 1900)*1000 + EOM.value.timetuple().tm_yday) +YSTDAY = Value((CURDATE.value.timetuple().tm_year - 1900)*1000 + CURDATE.value.timetuple().tm_yday - 1) +if YSTDAY >= EOMDAY: + ETIME = Value(EOM, + PICTURE="%B %Y", + ) +elif YSTDAY > STMDAY: + TEMP = Value(CURDATE) + TEMP.value = TEMP.value.replace(hour=0,minute=0,second=0,microsecond=0) + ETIME = Value(TEMP-timedelta(days=1), + PICTURE="%B %Y", + ) +else: + ETIME = Value(EOM, + PICTURE="%B %Y", + ) + +# +# +ETIME = Value(ETIME+timedelta(days=1), + PICTURE="%B %Y", +) +TITLE = Value(_b) +VLmin = Value( + dbtype="radar", + DBLOC=_a, + DBPAR="Volt-Load", + DBPTYP="Min", + DBINT="~1Day", + DBDUR=0, + DBVER="Calc-val", + STIME=STIME, + ETIME=ETIME, + DBUNITS="volt", + PICTURE=" %4.1f", + UNDEF=" m", + MISSTR=" m", +) +VLmax = Value( + DBPTYP="Max", +) +VBmax = Value( + DBPAR="Volt-Batt", +) +VBmin = Value( + DBPTYP="Min", +) +TMP = Value( + DBLOC="Markers-Placeholder", + DBPAR="Count", + DBPTYP="Inst", + DBINT="~1Day", + DBDUR=0, + DBVER="ALL", + DBUNITS="unit", + STIME=STIME-timedelta(days=1), + ETIME=ETIME, +) +DY = Value(TMP.datatimes(), + PICTURE=" %d", + UNDEF=" X", + MISSTR=" X", +) +# +# +#ENDDEF diff --git a/tests/spk/expect/i-blb b/tests/spk/expect/i-blb new file mode 100644 index 0000000..50e81a7 --- /dev/null +++ b/tests/spk/expect/i-blb @@ -0,0 +1,508 @@ +#FORM +Generated, %CTM +Type, TIME ,Inflow ,EPK Inflow,STG Inflow,Outflow ,Stor ,Elev ,EPK Stor ,EPK Elev ,STG Stor ,STG Elev ,Precip (Mean Areal),Precip Lower,Precip Upper,Rel Change +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +O, %TIME ,%INFLOW , , ,%OUTFLOW ,%STOR ,%ELEV ,%EPKS ,%EPKE ,%STGS ,%STGE ,%BP , , ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +F, %TIME ,%FCST ,%EPKI ,%STGI , , , ,%EPKSF ,%EPKEF ,%STGSF ,%STGSF ,%MEANF ,%BPL ,%BPU ,%RELCHG +#ENDFORM +# Generated with dateutil.relativedelta support. +#DEF +# !ECHO +# +# +# Compute the end and start times to read 48 hourly values on the hour. +# The ending time is the time specified by the user on the command line. +# +ETIME = Value(BTM+timedelta(hours=114), + PICTURE="%d %b %Y @ %K:%M", +) +STIME = Value(BTM-timedelta(days=10), + PICTURE="%d %b %Y @ %K:%M", +) +CTM.picture = "%d %b %Y @ %K:%M" +Value.shared["picture"] = "%d %b %Y @ %K:%M" +BASDATE.picture = "%d %b %Y @ %K:%M" +Value.shared["picture"] = "%d %b %Y @ %K:%M" +MID = Value(BTM) +MID.value = MID.value.replace(hour=0,minute=0,second=0,microsecond=0) +# +# Read 48 hours of values for the time-series to be displayed +# +FCST_T = Value( + MISSTR=" ", + UNDEF=" ", + dbtype="radar", + DBLOC="Black Butte", + DBPAR="Flow-Reservoir inflow", + DBPTYP="Inst", + DBINT="1Hour", + DBDUR=0, + DBVER="NWS-forecast-rev", + DBUNITS="cfs", + DBTZ="PST8PDT", + STIME=STIME, + ETIME=ETIME, + PICTURE="%6.0f", +) +FCST = Value( + STIME=BTM, + ETIME=ETIME, +) +STGI = Value( + DBLOC="Stony Gorge", +) +EPKI = Value( + DBLOC="East Park", +) +EPKEF = Value( + DBPAR="Elev", + DBUNITS="ft", + PICTURE="%7.2f", +) +STGEF = Value( + DBLOC="Stony Gorge", +) +STGSF = Value( + DBPAR="Stor", + DBUNITS="ac-ft", + PICTURE="%5.0f", +) +EPKSF = Value( + DBLOC="East Park", +) +MEANF = Value( + DBLOC="Black Butte", + DBPAR="Precip-INC", + DBPTYP="Total", + DBDUR="1Hour", + PICTURE="%6.3f", + DBUNITS="in", +) +#="----" +BPL = Value( + DBLOC="Black Butte-Lower Zone", +) +BPU = Value( + DBLOC="Black Butte-Upper Zone", +) +BP = Value( + DBLOC="Black Butte", + DBPAR="Precip-Basin", + DBPTYP="Inst", + DBDUR=0, + DBVER="Calc-val", + STIME=STIME, + ETIME=BTM, +) +INFLOW = Value( + DBPAR="Flow-Res In", + DBPTYP="AVE", + DBINT="1Hour", + DBDUR="1Hour", + DBVER="Calc-val", + PICTURE="%6.0f", + STIME=STIME, + ETIME=BTM, + DBUNITS="cfs", +) +OUTFLOW = Value( + DBPAR="Flow-Res Out", +) +STOR = Value( + DBLOC="Black Butte-Pool", + DBPAR="Stor", + DBPTYP="Inst", + DBINT="1Hour", + DBDUR=0, + DBUNITS="ac-ft", + PICTURE="%6.0f", +) +EPKS = Value( + DBLOC="East Park", + DBVER="Raw-CDEC-Combined", +) +STGS = Value( + DBLOC="Stony Gorge", +) +STGE = Value( + DBPAR="Elev", + DBUNITS="ft", + PICTURE="%7.2f", +) +EPKE = Value( + DBLOC="East Park", +) +ELEV = Value( + DBLOC="Black Butte-Pool", + DBVER="Calc-val", +) +AREAL = Value(" ") +RELCHG = Value( + DBLOC="Black Butte", + DBVER="Release-Val", + DBPAR="Flow-To", + DBUNITS="cfs", + STIME=STIME, + ETIME=ETIME, +) +TIME = Value(FCST_T.datatimes(), + PICTURE="%d%b%Y %K%M", +) +#ENDDEF diff --git a/tests/spk/expect/i-resstat b/tests/spk/expect/i-resstat new file mode 100644 index 0000000..e4a6b31 --- /dev/null +++ b/tests/spk/expect/i-resstat @@ -0,0 +1,3588 @@ +#FORM +Data Ending, %BASDATE , created %CTM +, Gross Pool, Current Storage, % Full , , 10 year Ave ,Space Available , Top Con , Inflow , Outflow , Enchroached, Enchroached % + Sacramento R basin +Shasta (SC7), %SHAG , %SHASTO , %SHA , , %SHA10P , %SHAA , %SHATCS , %SHAI , %SHAO , %SHAS , %SHAF +Black Butte (COE), %BBG , %BBSTO , %BLB , , %BB10P , %BBTA , %BBTCS , %BBI , %BBO , %BBTS , %BLBF +Oroville (SC7), %OROG , %OROSTO , %ORO , , %ORO10P , %OROA , %OROTCS , %OROI , %OROO , %OROS , %OROF +New Bullards Bar (SC7), %NBBG , %NBBSTO , %NBB , , %NBB10P , %NBBA , %NBBTCS , %NBBI , %NBBO , %NBBS , %NBBF +Englebright (COE), %ENG , %ENSTO , %ENX , , %EN10P , %ENA , %ENTCS , %ENI , %ENO , %ENS , +Indian Valley (SC7), %INDG , %INDSTO , %IND , , %IND10P , %INDA , %INDTCS , %INDI , %INDO , %INDS , %INDF +Folsom (SC7)|daily, %FOLG , %FOLSTO , %FOL , , %FOL10P , %FOLA , , %FOLI , %FOLO , , +Folsom (SC7)|12, %FOLG , %FLSTO12 , %FOL12 , , , %FOLA12 , %FTCS12 , %FOLI12 , %FOLO12 , %FOLS12 , %FOLF12 +Folsom (SC7)|18, %FOLG , %FLSTO18 , %FOL18 , , , %FOLA18 , %FTCS18 , %FOLI18 , %FOLO18 , %FOLS18 , %FOLF18 +Folsom (SC7)|00, %FOLG , %FLSTO00 , %FOL00 , , , %FOLA00 , %FTCS00 , %FOLI00 , %FOLO00 , %FOLS00 , %FOLF00 +Folsom (SC7)|06, %FOLG , %FLSTO06 , %FOL06 , , , %FOLA06 , %FTCS06 , %FOLI06 , %FOLO06 , %FOLS06 , %FOLF06 + San Joaquin River Basin +Camanche (SC7), %CAMG , %CAMSTO , %CAM , , %CAM10P , %CAMA , %CAMTCS , %CAMI , %CAMO , %CAMS , %CAMF +New Hogan (COE), %NHG , %NHSTO , %NHX , , %NH10P , %NHA , %NHTCS , %NHI , %NHO , %NHS , %NHGF +Farmington (COE), %FMG , %FMSTO , %FRM , , %FM10P , %FMA , %FMTCS , %FMI , %FMO , %FMS , %FRMF +New Melones (SC7), %NWMG , %NWMSTO , %NWM , , %NWM10P , %NWMA , %NWMTCS , %NWMI , %NWMO , %NWMS , %NWMF +Tulloch (SC7), %TULG , %TULSTO , %TUL , , %TUL10P , %TULA , %TULTCS , %TULI , %TULO , %TULS , %TULF +Don Pedro (SC7), %DONG , %DONSTO , %DON , , %DON10P , %DONA , %DONTCS , %DONI , %DONO , %DONS , %DONF +New Exchequer(SC7), %NEXG , %NEXSTO , %NEX , , %NEX10P , %NEXA , %NEXTCS , %NEXI , %NEXO , %NEXS , %NEXF +Burns (COE), %BNG , %BNSTO , %BUR , , %BN10P , %BNA , %BNTCS , %BNI , %BNO , %BNS , %BURF +Bear (COE), %BRG , %BRSTO , %BAR , , %BR10P , %BRA , %BRTCS , %BRI , %BNO , %BRS , %BARF +Owens (COE), %OWG , %OWSTO , %OWN , , %OW10P , %OWA , %OWTCS , %OWI , %OWO , %OWS , %OWNF +Mariposa (COE), %MRG , %MRSTO , %MAR , , %MR10P , %MRA , %MRTCS , %MRI , %MRO , %MRS , %MARF +Los Banos (SC7), %LOSG , %LOSSTO , %LOS , , %LOS10P , %LOSA , %LOSTCS , %LOSI , %LOSO , %LOSS , %LOSF +Buchanan/Eastman (COE), %BUG , %BUSTO , %BUC , , %BU10P , %BCA , %BUTCS , %BUI , %BUO , %BCS , %BUCF +Hidden/Hensley (COE), %HDG , %HDSTO , %HID , , %HD10P , %HDA , %HDTCS , %HDI , %HDO , %HDS , %HIDF +Friant/Millerton (SC7), %FRIG , %FRISTO , %FRI , , %FRI10P , %FRIA , %FRITCS , %FRII , %FRIO , %FRIS , %FRIF +Big Dry Creek (SC7), %BDCG , %BDCSTO , %BDC , , %BDC10P , %BDCA , %BDCTCS , %BDCI , %BDCO , %BDCS , %BDCF + Tulare Lakebed Basin +Pine Flat (COE), %PFG , %PFSTO , %PNF , , %PF10P , %PFA , %PFTCS , %PFI , %PFO , %PFS , %PNFF +Terminus/Kaweah (COE), %TMG , %TMSTO , %TRM , , %TM10P , %TMA , %TMTCS , %TMI , %TMO , %TMS , %TRMF +Success (COE), %SCG , %SCSTO , %SCC , , %SC10P , %SCA , %SCTCS , %SCI , %SCO , %SCS , %SCCF +Isabella (COE), %IBG , %IBSTO , %ISB , , %IB10P , %IBA , %IBTCS , %IBI , %IBO , %IBS , %ISBZ + Truckee River Basin +Martis Creek (COE), %MRTG , %MRTSTO , %MRT , , %MRT10P , %MRTA , %MRTTCS , %MRTI , %MRTO , %MRTS , %MRTF +Prosser (SC7), %PRSG , %PRSSTO , %PRS , , %PRS10P , %PRSA , %PRSTCS , %PRSI , %PRSO , %PRSS , %PRSF +Boca (SC7), %BOCG , %BOCSTO , %BOC , , %BOC10P , %BOCA , %BOCTCS , %BOCI , %BOCO , %BOCS , %BOCF +Stampede (SC7), %STMG , %STMSTO , %STM , , %STM10P , %STMA , %STMTCS , %STMI , %STMO , %STMS , %STMF + SPN RESERVOIRS +Coyote/Mendocino (COE), %COG , %COSTO , %COY , , %CO10P , %COA , %COTCS , %COI , %COO , %COS , %COYF +Warm Springs/Sonoma (COE),%WSG , %WSSTO , %WRS , , %WS10P , %WSA , %WSTCS , %WSI , %WSO , %WSS , %WRSF +Del Valle (SC7), %DELG , %DELSTO , %DEL , , %DEL10P , %DELA , %DELTCS , %DELI , %DELO , %DELS , %DELF + Great Basin, NOTE:, Due to Processing Difficulties all UT/CO is 1 day behind +Pineview (SC7), %PVG , %PVSTO , %PVP , , %PV10P , %PVSA , %PVTCS , %PNVIN , %PNVOUT , %PVS , %PVF +East Canyon (SC7), %ECG , %ECSTO , %ECP , , %EC10P , %ECSA , %ECTCS , %ESTIN , %ESTOUT , %ECS , %ECF +Lost Creek (SC7), %LCG , %LCSTO , %LCP , , %LC10P , %LCSA , %LCTCS , %LSCIN , %LSCOUT , %LCS , %LCF +Echo+Rockport (SC7), %ERG , %ERTCS , %ERP , , %ER10P , %ERSA , %ERTCS , , , %ERS , %ERF +Echo (SC7), %EOG , %EOSTO , %EOP , , %EO10P , %EOSA , %EOTCS , %ECHIN , %ECHOUT , %EOS , %EOF +Wanship/Rockport (SC7), %RKG , %RKSTO , %RKP , , %RK10P , %RKSA , %RKTCS , %RKPIN , %RKPOUT , %RKS , %RKF +Little Dell (SC7), %LDG , %LDSTO , %LDP , , %LD10P , %LDSA , %LDTCS , %LDLIN , %LDLOUT , %LDS , %LDF +Mountain Dell (SC7), %MDG , %MDSTO , %MDP , , %MD10P , %MDSA , %MDTCS , %MNDIN , %MNDOUT , %MDS , %MDF +Jordanelle (SC7), %JRG , %JRSTO , %JRP , , %JR10P , %JRSA , %JRTCS , %JRDIN , %JRDOUT , %JRS , %JRF + Upper Colorado +Red Fleet (SC7), %RFG , %RFSTO , %RFP , , %RF10P , %RFSA , %RFTCS , %RDFIN , %RDFOUT , %RFS , %RFF +Starvation (SC7), %STVG , %STSTO , %STP , , %ST10P , %STSA , %STTCS , %STRIN , %STROUT , %STS , %STF +Poania (SC7), %PNG , %PNSTO , %PNP , , %PN10P , %PNSA , %PNTCS , %PAOIN , %PAOOUT , %PNS , %PNVF +Blue Mesa (SC7), %BMG , %BMSTO , %BMP , , %BM10P , %BMSA , %BMTCS , %BLMIN , %BLMOUT , %BMS , %BMF +Ridgeway (SC7), %RGG , %RGSTO , %RGP , , %RG10P , %RGSA , %RGTCS , %RDGIN , %RDGOUT , %RGS , %RGF +Lemon (SC7), %LMG , %LMSTO , %LMP , , %LM10P , %LMSA , %LMTCS , %LEMIN , %LEMOUT , %LMS , %LMF +Vallecito (SC7), %VLG , %VLSTO , %VLP , , %VL10P , %VLSA , %VLTCS , %VALIN , %VALOUT , %VLS , %VLF + +#ENDFORM +# Generated with dateutil.relativedelta support. +#DEF +# !ECHO +# +# +# All values are to be read in at the exact time specified, +# without searching backwards or forwards. +# +Value.shared["missing"] = "EXACT" +# +# Define PICTURE's for various times to be displayed. +# Force %BASDATE to midnight. +# +CTM.picture = "%d %b %Y @ %K%M" +Value.shared["picture"] = "%d %b %Y @ %K%M" +BASDATE.value = BASDATE.value.replace(hour=0,minute=0,second=0,microsecond=0) + timedelta(days=1) # Add a day to offset setting the time to 00, instead of 24 +BASDATE.picture = "%d %b %Y %K%M" +Value.shared["picture"] = "%d %b %Y %K%M" +T12 = Value(BASDATE+timedelta(hours=12), + PICTURE="%d%b%Y %K%M", +) +T18 = Value(T12+timedelta(hours=6)) +T00 = Value(T18+timedelta(hours=6)) +T06 = Value(T00+timedelta(hours=6)) +# +# Define all Rain Flood Parameters +# +# +# Define all Top of Conservation Storage values +# +BBTCS = Value( + dbtype="radar", + DBLOC="Black Butte", + DBPTYP="Inst", + DBPAR="Stor-Top Con", + DBVER="Calc-val", + DBINT="~1Day", + DBDUR=0, + PICTURE="%10.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", + TIME=BASDATE, + DBUNITS="ac-ft", + DBTZ="PST8PDT", +) +NHTCS = Value( + DBLOC="New Hogan", +) +BUTCS = Value( + DBLOC="Eastman Lake", +) +HDTCS = Value( + DBLOC="Hensley Lake", +) +PFTCS = Value( + DBLOC="Pine Flat Lake", +) +TMTCS = Value( + DBLOC="Lake Kaweah", +) +SCTCS = Value( + DBLOC="Success Lake", +) +IBTCS = Value( + DBLOC="Lake Isabella", +) +COTCS = Value( + DBLOC="Lake Mendocino", + DBVER="Calc-val-High Option", +) +WSTCS = Value( + DBLOC="Lake Sonoma", + DBVER="Calc-val", +) +MRTTCS = Value( + DBLOC="Martis Creek", +) +FMTCS = Value(0) +BNTCS = Value(0) +BRTCS = Value(0) +OWTCS = Value(0) +MRTCS = Value(0) +ENTCS = Value(70000) +SHATCS = Value( + DBLOC="Shasta", + DBVER="Calc-usbr", +) +# FILE = /dat0/rtsc7db.dss TYPE=DSS +# A=SACRAMENTO B=SHASTA +# A=AMERICAN B=FOLSOM +SACTCS = Value( + DBLOC="Folsom Lake", + DBVER="Calc-cdec SAFCA", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +# A=AMERICAN B=FOLSOM F=SAFCA +# move picture,etc back up here +OROTCS = Value( + DBLOC="Oroville Dam", + DBVER="Calc-cdec", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +# A=FEATHER B=OROVILLE +LOSTCS = Value( + DBLOC="Los Banos", +) +# A=LOS BANOS CR B=LOS BANOS +# A=MOKELUMNE B=CAMANCHE +# A=MERCED B=NEW EXCHEQUER +NWMTCS = Value( + DBLOC="New Melones", +) +# A=STANISLAUS B=NEW MELONES +TULTCS = Value( + DBLOC="Tulloch", +) +# A=STANISLAUS B=TULLOCH +DELTCS = Value( + DBLOC="Del Valle", + DBVER="Calc-val", +) +# A=ALAMEDA CR B=DEL VALLE +DONTCS = Value( + DBLOC="Don Pedro", + DBVER="Calc-manual", +) +# A=TUOLUMNE B=NEW DON PEDRO +CAMTCS = Value( + DBLOC="Camanche", +) +EBMTCS = Value(CAMTCS) +NEXTCS = Value( + DBLOC="New Exchequer", +) +PRSTCS = Value( + DBLOC="Prosser", +) +# A=PROSSER CR B=PROSSER CR +BOCTCS = Value( + DBLOC="Boca", +) +# A=LITTLE TRUCKEE B=BOCA +STMTCS = Value( + DBLOC="Stampede", +) +# A=LITTLE TRUCKEE B=STAMPEDE +NBBTCS = Value( + DBLOC="New Bullards Bar", + DBVER="Calc-usbr", +) +FRITCS = Value( + DBLOC="Friant Dam", + DBVER="Calc-usbr", +) +# A=SAN JOAQUIN B=FRIANT F= +# A=NORTH YUBA B=NEW BULLARDS BAR +INDTCS = Value( + DBLOC="Indian Valley", + DBVER="Calc-usgs", +) +# A=NF CACHE CR B=INDIAN VALLEY +BDCTCS = Value(200) +FTCS12 = Value( + DBLOC="Folsom Lake", + DBINT=0, + DBVER="Calc-NWS", + DBTZ="UTC", + TIME=T12, + MISSTR="-NF-", + UNDEF="-NF-", +) +FTCS18 = Value( + TIME=T18, +) +FTCS00 = Value( + TIME=T00, +) +FTCS06 = Value( + TIME=T00, +) +# +# Define all current Storage values +# +BBSTO = Value( + DBLOC="Black Butte-Pool", + DBPAR="Stor", + DBINT="~1Day", + DBVER="Calc-val", + PICTURE="%9.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", + TIME=BASDATE, + DBTZ="PST8PDT", + DBUNITS="ac-ft", +) +ENSTO = Value( + DBLOC="Englebright Lake-Pool", +) +NHSTO = Value( + DBLOC="New Hogan-Pool", +) +BUSTO = Value( + DBLOC="Eastman Lake-Pool", +) +HDSTO = Value( + DBLOC="Hensley lake-Pool", +) +PFSTO = Value( + DBLOC="Pine Flat Lake-Pool", +) +TMSTO = Value( + DBLOC="Lake Kaweah-Pool", +) +SCSTO = Value( + DBLOC="Success Lake-Pool", +) +IBSTO = Value( + DBLOC="Lake Isabella-Pool", +) +COSTO = Value( + DBLOC="Lake Mendocino-Pool", +) +WSSTO = Value( + DBLOC="Lake Sonoma-Pool", +) +MRTSTO = Value( + DBLOC="Martis Creek-Pool", +) +FMSTO = Value( + DBLOC="Farmington Dam-Pool", +) +BNSTO = Value( + DBLOC="Burns-Pool", +) +BRSTO = Value( + DBLOC="Bear-Pool", +) +OWSTO = Value( + DBLOC="Owens-Pool", +) +MRSTO = Value( + DBLOC="Mariposa-Pool", +) +EPKSTO = Value( + DBLOC="East Park", + DBVER="Thumb-raw", +) +STGSTO = Value( + DBLOC="Stony Gorge", +) +CRTSTO = Value( + DBLOC="Courtright", + DBVER="Thumb-raw", +) +# A=KINGS B=COURTRIGHT F= +WSHSTO = Value( + DBLOC="Wishon", +) +# A=KINGS B=WISHON +SHASTO = Value( + DBLOC="Shasta", + DBVER="Raw-USBR-Combined", +) +# FILE = /dat0/rtsc7db.dss TYPE=DSS +# A=SACRAMENTO B=SHASTA F= +FOLSTO = Value( + DBLOC="Folsom Lake", +) +# A=AMERICAN B=FOLSOM +#%SACSTO = %FOLSTO +# A=SAN JOAQUIN B=FRIANT +OROSTO = Value( + DBLOC="Oroville Dam", + DBVER="Calc-cdec", +) +# A=FEATHER B=OROVILLE +NBBSTO = Value( + DBLOC="New Bullards Bar", + DBVER="Calc-cdec", +) +# A=NORTH YUBA B=NEW BULLARDS BAR +INDSTO = Value( + DBLOC="Indian Valley", + DBVER="Calc-usgs", +) +# A=NF CACHE CR B=INDIAN VALLEY +UNVSTO = Value( + DBLOC="Union Valley", + DBVER="Calc-cdec", +) +# A=AMERICAN B=UNION VALLEY +FMDSTO = Value( + DBLOC="French Meadows", + DBVER="Calc-confidential", +) +# A=AMERICAN B=FRENCH MEADOWS +HHLSTO = Value( + DBLOC="Hell Hole", +) +# A=AMERICAN B=HELL HOLE +NWMSTO = Value( + DBLOC="New Melones", + DBVER="Raw-USBR-Combined", +) +# A=STANISLAUS B=NEW MELONES +BRDSTO = Value( + DBLOC="Beardsley Lake", +) +# A=STANISLAUS B=BEARDSLEY +DNLSTO = Value( + DBLOC="Donnells", +) +# A=STANISLAUS B=DONNELLS +TULSTO = Value( + DBLOC="Tulloch", +) +# A=STANISLAUS B=TULLOCH +FRISTO = Value( + DBLOC="Friant Dam", +) +MAMSTO = Value( + DBLOC="Mammoth Pool", +) +# A=SAN JOAQUIN B=MAMMOTH POOL +MTSSTO = Value( + DBLOC="Friant Dam", + DBPAR="Stor-Total Upstream", +) +# A=SAN JOAQUIN B=FRIANT C=STOR-TOT U\S +CAMSTO = Value( + DBLOC="Camanche", + DBPAR="Stor", + DBVER="MANUAL", +) +# A=MOKELUMNE B=CAMANCHE +DONSTO = Value( + DBLOC="Don Pedro", +) +# A=TUOLUMNE B=NEW DON PEDRO +NEXSTO = Value( + DBLOC="New Exchequer", +) +# A=MERCED B=NEW EXCHEQUER +PRDSTO = Value( + DBLOC="Pardee", +) +# A=MOKELUMNE B=PARDEE +EBMSTO = Value((CAMSTO + PRDSTO)) +SSPSTO = Value( + DBLOC="Salt Springs", +) +# A=MOKELUMNE B=SALT SPRINGS +LBRSTO = Value( + DBLOC="Lower Bear", +) +# A=MOKELUMNE B=LOWER BEAR +HTHSTO = Value( + DBLOC="Hetch Hetchy", +) +# A=TUOLUMNE B=HETCH HETCHY +CHVSTO = Value( + DBLOC="Cherry Valley", +) +# A=TUOLUMNE B=CHERRY VALLEY +LKLSTO = Value( + DBLOC="Lake Eleanor", +) +# A=TUOLUMNE B=ELEANOR +DELSTO = Value( + DBLOC="Del Valle", +) +# A=ALAMEDA CR B=DEL VALLE +PRSSTO = Value( + DBLOC="Prosser", +) +# A=PROSSER CR B=PROSSER CR +BOCSTO = Value( + DBLOC="Boca", +) +# A=LITTLE TRUCKEE B=BOCA +STMSTO = Value( + DBLOC="Stampede", +) +# A=LITTLE TRUCKEE B=STAMPEDE +BDCSTO = Value( + DBLOC="Big Dry Cr", +) +LOSSTO = Value( + DBLOC="Los Banos", +) +FLSTO12 = Value( + DBLOC="Folsom Lake", + DBINT="1Hour", + DBVER="Raw-USBR-Combined", + TIME=T12, + DBTZ="UTC", + PICTURE="%7.0f", + MISSTR="-NF-", + UNDEF="-NF-", +) +FLSTO18 = Value( + TIME=T18, +) +FLSTO00 = Value( + TIME=T00, +) +FLSTO06 = Value( + TIME=T06, +) +# A=LOS BANOS CR B=LOS BANOS +# A=BIG DRY CR B=BIG DRY CR +# +# +# Gross Pools (acft) for Corps Reservoirs +# +BBG = Value(136200, + PICTURE="%7.0f", +) +ENG = Value(70000) +NHG = Value(317100) +BUG = Value(150000) +HDG = Value(90000) +PFG = Value(1000000) +TMG = Value(185600) +SCG = Value(84095) +#%IBG = 568100 +IBG = Value(361250) +MRTG = Value(20400) +COG = Value(116500) +WSG = Value(381000) +FMG = Value(52000) +BNG = Value(6800) +BRG = Value(7700) +OWG = Value(3600) +MRG = Value(15000) +EPG = Value(50900) +SGG = Value(50000) +UVG = Value(235100) +FRG = Value(110700) +HHG = Value(207600) +CTG = Value(123300) +WHG = Value(128600) +EBG = Value(615050) +# +# +# +# Gross Pool (acft) for SEC7 Reservoirs +# NOTE: Uses the same PICTURE as the Corps Reservoirs +# +SHAG = Value(4552100) +OROG = Value(3538000) +NBBG = Value(966000) +INDG = Value(300600) +FOLG = Value(966823) +SACG = Value(FOLG) +CAMG = Value(417100) +NWMG = Value(2420000) +DONG = Value(2030000) +NEXG = Value(1024600) +FRIG = Value(520500) +LOSG = Value(34600) +DELG = Value(77000) +TULG = Value(67000) +PRSG = Value(29800) +BOCG = Value(41100) +STMG = Value(226500) +BDCG = Value(30200) +PDG = Value(197950, + PICTURE="%7.0f", +) +SSG = Value(140000) +LBG = Value(49000) +BDG = Value(97800) +DNG = Value(64300) +HEG = Value(360400) +CVG = Value(268200) +LEG = Value(26000) +MAG = Value(122700) +TSG = Value(628500) +TSG2 = Value(251900) +# Gross Pool for UT/CO +EOG = Value(73900, + PICTURE="%6.0f", +) +ERG = Value(136062) +RKG = Value(62100) +LCG = Value(22500) +ECG = Value(51200) +PVG = Value(110200) +STVG = Value(167300) +VLG = Value(129700) +LMG = Value(40100) +BMG = Value(940800) +PNG = Value(17500) +RFG = Value(26000) +RGG = Value(84400) +JRG = Value(314000) +LDG = Value(20500) +MDG = Value(3200) +MPG = Value(117200) +CRG = Value(25200) +# +# Define Percent of Gross Pool +# +# Compute % full based on current storage and gross pool not +# accounting for any forecasts, irrigation demnads or other +# factors that would change the theoretical value. +# NOTE: The variable names should always be shorter than the +# PICTURE -- otherwise the text to the right of the +# variable will be compressed (see REPGEN Manual +# Section 4.2 "Report Form".) So we used names of the +# format %<3-letter-project-mnemonic> to keep names at +# four letters. +# +BLB = Value(BBSTO / BBG * 100.0, + PICTURE=" %3.0f", +) +# NOTE: New Hogan was re-named to %NHX so that it does not +# conflict with %NHG (New Hogan gross pool) variable above. +ENX = Value(ENSTO / ENG * 100.0) +NHX = Value(NHSTO / NHG * 100.0) +BUC = Value(BUSTO / BUG * 100.0) +HID = Value(HDSTO / HDG * 100.0) +PNF = Value(PFSTO / PFG * 100.0) +TRM = Value(TMSTO / TMG * 100.0) +SCC = Value(SCSTO / SCG * 100.0) +ISB = Value(IBSTO / IBG * 100.0) +COY = Value(COSTO / COG * 100.0) +WRS = Value(WSSTO / WSG * 100.0) +FRM = Value(FMSTO / FMG * 100.0) +BUR = Value(BNSTO / BNG * 100.0) +BAR = Value(BRSTO / BRG * 100.0) +OWN = Value(OWSTO / OWG * 100.0) +MAR = Value(MRSTO / MRG * 100.0) +SHA = Value(SHASTO / SHAG * 100.0) +FOL = Value(FOLSTO / FOLG * 100.0) +FOL12 = Value(FLSTO12/FOLG * 100.0, + UNDEF="-NF-", + MISSTR="-NF-", +) +FOL18 = Value(FLSTO18/FOLG * 100.0) +FOL00 = Value(FLSTO00/FOLG * 100.0) +FOL06 = Value(FLSTO06/FOLG * 100.0) +#%SAC = %SACSTO / %SACG * 100.0 +FRI = Value(FRISTO / FRIG * 100.0, + UNDEF="-NR-", + MISSTR="-NR-", +) +ORO = Value(OROSTO / OROG * 100.0) +LOS = Value(LOSSTO / LOSG * 100.0) +NBB = Value(NBBSTO / NBBG * 100.0) +CAM = Value(CAMSTO / CAMG * 100.0) +DON = Value(DONSTO / DONG * 100.0) +NEX = Value(NEXSTO / NEXG * 100.0) +NWM = Value(NWMSTO / NWMG * 100.0) +TUL = Value(TULSTO / TULG * 100.0) +IND = Value(INDSTO / INDG * 100.0) +DEL = Value(DELSTO / DELG * 100.0) +MRT = Value(MRTSTO / MRTG * 100.0) +PRS = Value(PRSSTO / PRSG * 100.0) +BOC = Value(BOCSTO / BOCG * 100.0) +STM = Value(STMSTO / STMG * 100.0) +BDC = Value(BDCSTO / BDCG * 100.0) +EPK = Value(EPKSTO / EPG * 100.0) +STG = Value(STGSTO / SGG * 100.0) +UNV = Value(UNVSTO / UVG * 100.0) +FMD = Value(FMDSTO / FRG * 100.0) +HHL = Value(HHLSTO / HHG * 100.0) +PRD = Value(PRDSTO / PDG * 100.0) +SSP = Value(SSPSTO / SSG * 100.0) +LBR = Value(LBRSTO / LBG * 100.0) +BRD = Value(BRDSTO / BDG * 100.0) +DNL = Value(DNLSTO / DNG * 100.0) +HTH = Value(HTHSTO / HEG * 100.0) +CHV = Value(CHVSTO / CVG * 100.0) +LKL = Value(LKLSTO / LEG * 100.0) +MAM = Value(MAMSTO / MAG * 100.0) +MTS = Value(MTSSTO / TSG * 100.0) +CRT = Value(CRTSTO / CTG * 100.0) +WSH = Value(WSHSTO / WHG * 100.0) +EBM = Value(EBMSTO / EBG * 100.0) +# +# Generate Percent Encroached for any reservoir whose Storage +# exceeds its Top of Conservation Storage. +# Encroachment is computed as a percentage of flood control +# space in use. +# VERY IMPORTANT: All variable names should be exactly 5 characters +# (including the %), and the string of blanks should be +# exactly the same length (i.e. 5 blanks). Otherwise, the +# report line will get screwed up. +# NOTE: The %DUMF variable is needed only to set the PICTURE +# for the %xxxF variables. +# +DUMF = Value(0.0, + PICTURE="%3.0f", +) +if BBSTO > BBTCS and BBG > BBTCS: + BLBZ = Value(( (BBSTO-BBTCS) / (BBG-BBTCS) ) * 100.0, + PICTURE="%3.0f", + ) +else: + BLBZ = Value(0, + PICTURE="%3.0f", + ) + +if ENSTO > ENTCS and ENG > ENTCS: + ENGZ = Value(( (ENSTO-ENTCS) / (ENG-ENTCS) ) * 100.0) +else: + ENGZ = Value(0) + +if NHSTO > NHTCS and NHG > NHTCS: + NHGZ = Value(( (NHSTO-NHTCS) / (NHG-NHTCS) ) * 100.0) +else: + NHGZ = Value(0) + +if BUSTO > BUTCS and BUG > BUTCS: + BUCZ = Value(( (BUSTO-BUTCS) / (BUG-BUTCS) ) * 100.0) +else: + BUCZ = Value(0) + +if HDSTO > HDTCS and HDG > HDTCS: + HIDZ = Value(( (HDSTO-HDTCS) / (HDG-HDTCS) ) * 100.0) +else: + HIDZ = Value(0) + +if PFSTO > PFTCS and PFG > PFTCS: + PNFZ = Value(( (PFSTO-PFTCS) / (PFG-PFTCS) ) * 100.0) +else: + PNFZ = Value(0) + +if TMSTO > TMTCS and TMG > TMTCS: + TRMZ = Value(( (TMSTO-TMTCS) / (TMG-TMTCS) ) * 100.0) +else: + TRMZ = Value(0) + +if SCSTO > SCTCS and SCG > SCTCS: + SCCZ = Value(( (SCSTO-SCTCS) / (SCG-SCTCS) ) * 100.0) +else: + SCCZ = Value(0) + +if IBSTO > IBTCS and IBG > IBTCS: + ISBZ = Value(( (IBSTO-IBTCS) / (IBG-IBTCS) ) * 100.0) +else: + ISBZ = Value(0) + +if COSTO > COTCS and COG > COTCS: + COYZ = Value(( (COSTO-COTCS) / (COG-COTCS) ) * 100.0) +else: + COYZ = Value(0) + +if WSSTO > WSTCS and WSG > WSTCS: + WRSZ = Value(( (WSSTO-WSTCS) / (WSG-WSTCS) ) * 100.0) +else: + WRSZ = Value(0) + +if FMSTO > FMTCS and FMG > FMTCS: + FRMZ = Value(( (FMSTO-FMTCS) / (FMG-FMTCS) ) * 100.0) +else: + FRMZ = Value(0) + +if BNSTO > BNTCS and BNG > BNTCS: + BURZ = Value(( (BNSTO-BNTCS) / (BNG-BNTCS) ) * 100.0) +else: + BURZ = Value(0) + +if BRSTO > BRTCS and BRG > BRTCS: + BARZ = Value(( (BRSTO-BRTCS) / (BRG-BRTCS) ) * 100.0) +else: + BARZ = Value(0) + +if OWSTO > OWTCS and OWG > OWTCS: + OWNZ = Value(( (OWSTO-OWTCS) / (OWG-OWTCS) ) * 100.0) +else: + OWNZ = Value(0) + +if MRSTO > MRTCS and MRG > MRTCS: + MARZ = Value(( (MRSTO-MRTCS) / (MRG-MRTCS) ) * 100.0) +else: + MARZ = Value(0) + +if SHASTO > SHATCS and SHAG > SHATCS: + SHAZ = Value(( (SHASTO-SHATCS) / (SHAG-SHATCS) ) * 100.0, + PICTURE="%3.0f", + ) +else: + SHAZ = Value(0, + PICTURE="%3.0f", + ) + +if FLSTO12 > FTCS12 and FOLG > FTCS12: + FOLZ12 = Value(( (FLSTO12-FTCS12) / (FOLG-FTCS12) ) * 100.0) +else: + FOLZ12 = Value(0) + +if FLSTO18 > FTCS18 and FOLG > FTCS18: + FOLZ18 = Value(( (FLSTO18-FTCS18) / (FOLG-FTCS18) ) * 100.0) +else: + FOLZ18 = Value(0) + +if FLSTO00 > FTCS00 and FOLG > FTCS00: + + FOLZ00 = Value(( (FLSTO00-FTCS00) / (FOLG-FTCS00) ) * 100.0) +else: + FOLZ00 = Value(0) + +if FLSTO06 > FTCS06 and FOLG > FTCS06: + FOLZ06 = Value(( (FLSTO06-FTCS06) / (FOLG-FTCS06) ) * 100.0) +else: + FOLZ06 = Value(0) + +##IF %SACSTO > %SACTCS AND %SACG > %SACTCS +# %SACZ = ( (%SACSTO-%SACTCS) / (%SACG-%SACTCS) ) * 100.0 +##ELSE +SACZ = Value(0) +##ENDIF +if FRISTO > FRITCS and FRIG > FRITCS: + FRIZ = Value(( (FRISTO-FRITCS) / (FRIG-FRITCS) ) * 100.0) +else: + FRIZ = Value(0) + +if OROSTO > OROTCS and OROG > OROTCS: + OROZ = Value(( (OROSTO-OROTCS) / (OROG-OROTCS) ) * 100.0) +else: + OROZ = Value(0) + +if LOSSTO > LOSTCS and LOSG > LOSTCS: + LOSZ = Value(( (LOSSTO-LOSTCS) / (LOSG-LOSTCS) ) * 100.0) +else: + LOSZ = Value(0) + +if NBBSTO > NBBTCS and NBBG > NBBTCS: + NBBZ = Value(( (NBBSTO-NBBTCS) / (NBBG-NBBTCS) ) * 100.0) +else: + NBBZ = Value(0) + +if CAMSTO > CAMTCS and CAMG > CAMTCS: + CAMZ = Value(( (CAMSTO-CAMTCS) / (CAMG-CAMTCS) ) * 100.0) +else: + CAMZ = Value(0) + +if DONSTO > DONTCS and DONG > DONTCS: + DONZ = Value(( (DONSTO-DONTCS) / (DONG-DONTCS) ) * 100.0) +else: + DONZ = Value(0) + +if NEXSTO > NEXTCS and NEXG > NEXTCS: + NEXZ = Value(( (NEXSTO-NEXTCS) / (NEXG-NEXTCS) ) * 100.0) +else: + NEXZ = Value(0) + +if NWMSTO > NWMTCS and NWMG > NWMTCS: + NWMZ = Value(( (NWMSTO-NWMTCS) / (NWMG-NWMTCS) ) * 100.0) +else: + NWMZ = Value(0) + +if TULSTO > TULTCS and TULG > TULTCS: + TULZ = Value(( (TULSTO-TULTCS) / (TULG-TULTCS) ) * 100.0) +else: + TULZ = Value(0) + +if INDSTO > INDTCS and INDG > INDTCS: + INDZ = Value(( (INDSTO-INDTCS) / (INDG-INDTCS) ) * 100.0) +else: + INDZ = Value(0) + +if DELSTO > DELTCS and DELG > DELTCS: + DELZ = Value(( (DELSTO-DELTCS) / (DELG-DELTCS) ) * 100.0) +else: + DELZ = Value(0) + +if MRTSTO > MRTTCS and MRTG > MRTTCS: + MRTZ = Value(( (MRTSTO-MRTTCS) / (MRTG-MRTTCS) ) * 100.0) +else: + MRTZ = Value(0) + +if PRSSTO > PRSTCS and PRSG > PRSTCS: + PRSZ = Value(( (PRSSTO-PRSTCS) / (PRSG-PRSTCS) ) * 100.0) +else: + PRSZ = Value(0) + +if BOCSTO > BOCTCS and BOCG > BOCTCS: + BOCZ = Value(( (BOCSTO-BOCTCS) / (BOCG-BOCTCS) ) * 100.0) +else: + BOCZ = Value(0) + +if STMSTO > STMTCS and STMG > STMTCS: + STMZ = Value(( (STMSTO-STMTCS) / (STMG-STMTCS) ) * 100.0) +else: + STMZ = Value(0) + +if BDCSTO > BDCTCS and BDCG > BDCTCS: + BDCZ = Value(( (BDCSTO-BDCTCS) / (BDCG-BDCTCS) ) * 100.0) +else: + BDCZ = Value(0) + +if CAMSTO > CAMTCS: + EBMA = Value((CAMG- CAMTCS)) + EBMB = Value((PDG - PRDSTO)) + EBMZ = Value(( (CAMSTO-CAMTCS) / (EBMA + EBMB) ) * 100.0) +else: + EBMZ = Value(0) + +# +# Define %encroached format +# Anything >= 99.5 will round to 100 and overflow the B(NZ) format +# +if BLBZ >= 99.5: + BLBF = Value(BLBZ, + PICTURE="(%3.0f)", + ) +elif BLBZ >= 0.0: + BLBF = Value(BLBZ, + PICTURE="(%3.0f)", + ) + ##ELSE + # %BLBF =" ( 0) " PICTURE = AAAAA + +#SHOW %BLBZ +#SHOW %BLBF +if NHGZ >= 99.5: + NHGF = Value(NHGZ, + PICTURE="(%3.0f)", + ) +elif NHGZ >= 0.0: + NHGF = Value(NHGZ, + PICTURE="(%3.0f)", + ) +else: + NHGF = Value(" ", + PICTURE="%B", + ) + +#SHOW %NHGZ +#SHOW %NHGF +if BUCZ >= 99.5: + BUCF = Value(BUCZ, + PICTURE="(%3.0f)", + ) +elif BUCZ >= 0.0: + BUCF = Value(BUCZ, + PICTURE="(%3.0f)", + ) +else: + BUCF = Value(" ", + PICTURE="%B", + ) + +#SHOW %BUCZ +#SHOW %BUCF +if HIDZ >= 99.5: + HIDF = Value(HIDZ, + PICTURE="(%3.0f)", + ) +elif HIDZ >= 0.0: + HIDF = Value(HIDZ, + PICTURE="(%3.0f)", + ) +else: + HIDF = Value(" ", + PICTURE="%B", + ) + +#SHOW %HIDZ +#SHOW %HIDF +if PNFZ >= 99.5: + PNFF = Value(PNFZ, + PICTURE="(%3.0f)", + ) +elif PNFZ >= 0.0: + PNFF = Value(PNFZ, + PICTURE="(%3.0f)", + ) +else: + PNFF = Value(" ", + PICTURE="%B", + ) + +#SHOW %PNFZ +#SHOW %PNFF +if TRMZ >= 99.5: + TRMF = Value(TRMZ, + PICTURE="(%3.0f)", + ) +elif TRMZ >= 0.0: + TRMF = Value(TRMZ, + PICTURE="(%3.0f)", + ) +else: + TRMF = Value(" ", + PICTURE="%B", + ) + +#SHOW %TRMZ +#SHOW %TRMF +if SCCZ >= 99.5: + SCCF = Value(SCCZ, + PICTURE="(%3.0f)", + ) +elif SCCZ >= 0.0: + SCCF = Value(SCCZ, + PICTURE="(%3.0f)", + ) +else: + SCCF = Value(" ", + PICTURE="%B", + ) + +#SHOW %SCCZ +#SHOW %SCCF +# #IF %ISBZ >= 99.5 +# %ISBF = %ISBZ PICTURE = (NNZ) +# #ELSEIF %ISBZ > 0.0 +# %ISBF = %ISBZ PICTURE = B(NZ) +# #ELSE +# %ISBF =" " PICTURE = AAAAA +# #ENDIF +# #SHOW %ISBZ +# #SHOW %ISBF +if COYZ >= 99.5: + COYF = Value(COYZ, + PICTURE="(%3.0f)", + ) +elif COYZ >= 0.0: + COYF = Value(COYZ, + PICTURE="(%3.0f)", + ) +else: + COYF = Value(" ", + PICTURE="%B", + ) + +#SHOW %COYZ +#SHOW %COYF +if WRSZ >= 99.5: + WRSF = Value(WRSZ, + PICTURE="(%3.0f)", + ) +elif WRSZ >= 0.0: + WRSF = Value(WRSZ, + PICTURE="(%3.0f)", + ) +else: + WRSF = Value(" ", + PICTURE="%B", + ) + +#SHOW %WRSZ +#SHOW %WRSF +if FRMZ >= 99.5: + FRMF = Value(FRMZ, + PICTURE="(%3.0f)", + ) +elif FRMZ >= 0.0: + FRMF = Value(FRMZ, + PICTURE="(%3.0f)", + ) +else: + FRMF = Value(" ", + PICTURE="%B", + ) + +#SHOW %FRMZ +#SHOW %FRMF +if BURZ >= 99.5: + BURF = Value(BURZ, + PICTURE="(%3.0f)", + ) +elif BURZ >= 0.0: + BURF = Value(BURZ, + PICTURE="(%3.0f)", + ) +else: + BURF = Value(" ", + PICTURE="%B", + ) + +#SHOW %BURZ +#SHOW %BURF +if BARZ >= 99.5: + BARF = Value(BARZ, + PICTURE="(%3.0f)", + ) +elif BARZ >= 0.0: + BARF = Value(BARZ, + PICTURE="(%3.0f)", + ) +else: + BARF = Value(" ", + PICTURE="%B", + ) + +#SHOW %BARZ +#SHOW %BARF +if OWNZ >= 99.5: + OWNF = Value(OWNZ, + PICTURE="(%3.0f)", + ) +elif OWNZ >= 0.0: + OWNF = Value(OWNZ, + PICTURE="(%3.0f)", + ) +else: + OWNF = Value(" ", + PICTURE="%B", + ) + +#SHOW %OWNZ +#SHOW %OWNF +if MARZ >= 99.5: + MARF = Value(MARZ, + PICTURE="(%3.0f)", + ) +elif MARZ >= 0.0: + MARF = Value(MARZ, + PICTURE="(%3.0f)", + ) +else: + MARF = Value(" ", + PICTURE="%B", + ) + +#SHOW %MARZ +#SHOW %MARF +if SHAZ >= 99.5: + SHAF = Value(SHAZ, + PICTURE="(%3.0f)", + ) +elif SHAZ >= 0.0: + SHAF = Value(SHAZ, + PICTURE="(%3.0f)", + ) +else: + SHAF = Value(" ", + PICTURE="%B", + ) + +##SHOW %SHAZ +##SHOW %SHAF +if FOLZ12 >= 99.5: + FOLF12 = Value(FOLZ12, + PICTURE="(%3.0f)", + ) +elif FOLZ12 >= 0.0: + FOLF12 = Value(FOLZ12, + PICTURE="(%3.0f)", + ) +else: + FOLF12 = Value(" ", + PICTURE="%B", + ) + +if FOLZ18 >= 99.5: + FOLF18 = Value(FOLZ18, + PICTURE="(%3.0f)", + ) +elif FOLZ18 >= 0.0: + FOLF18 = Value(FOLZ18, + PICTURE="(%3.0f)", + ) +else: + FOLF18 = Value(" ", + PICTURE="%B", + ) + +if FOLZ00 >= 99.5: + FOLF00 = Value(FOLZ00, + PICTURE="(%3.0f)", + ) +elif FOLZ00 >= 0.0: + FOLF00 = Value(FOLZ00, + PICTURE="(%3.0f)", + ) +else: + FOLF00 = Value(" ", + PICTURE="%B", + ) + +if FOLZ06 >= 99.5: + FOLF06 = Value(FOLZ06, + PICTURE="(%3.0f)", + ) +elif FOLZ06 >= 0.0: + FOLF06 = Value(FOLZ06, + PICTURE="(%3.0f)", + ) +else: + FOLF06 = Value(" ", + PICTURE="%B", + ) + +##SHOW %FOLZ +##SHOW %FOLF +if SACZ >= 99.5: + SACF = Value(SACZ, + PICTURE="(%3.0f)", + ) +elif SACZ >= 0.0: + SACF = Value(SACZ, + PICTURE="(%3.0f)", + ) +else: + SACF = Value(" ", + PICTURE="%B", + ) + +##SHOW %SACZ +##SHOW %SACF +if FRIZ >= 99.5: + FRIF = Value(FRIZ, + PICTURE="(%3.0f)", + ) +elif FRIZ >= 0.0: + FRIF = Value(FRIZ, + PICTURE="(%3.0f)", + ) +else: + FRIF = Value(" ", + PICTURE="%B", + ) + +##SHOW %FRIZ +##SHOW %FRIF +if OROZ >= 99.5: + OROF = Value(OROZ, + PICTURE="(%3.0f)", + ) +elif OROZ >= 0.0: + OROF = Value(OROZ, + PICTURE="(%3.0f)", + ) +else: + OROF = Value(" ", + PICTURE="%B", + ) + +##SHOW %OROZ +##SHOW %OROF +if LOSZ >= 99.5: + LOSF = Value(LOSZ, + PICTURE="(%3.0f)", + ) +elif LOSZ >= 0.0: + LOSF = Value(LOSZ, + PICTURE="(%3.0f)", + ) +else: + LOSF = Value(" ", + PICTURE="%B", + ) + +##SHOW %LOSZ +##SHOW %LOSF +if NBBZ >= 99.5: + NBBF = Value(NBBZ, + PICTURE="(%3.0f)", + ) +elif NBBZ >= 0.0: + NBBF = Value(NBBZ, + PICTURE="(%3.0f)", + ) +else: + NBBF = Value(" ", + PICTURE="%B", + ) + +##SHOW %NBBZ +##SHOW %NBBF +if CAMZ >= 99.5: + CAMF = Value(CAMZ, + PICTURE="(%3.0f)", + ) +elif CAMZ >= 0.0: + CAMF = Value(CAMZ, + PICTURE="(%3.0f)", + ) +else: + CAMF = Value(" ", + PICTURE="%B", + ) + +##SHOW %CAMZ +##SHOW %CAMF +if DONZ >= 99.5: + DONF = Value(DONZ, + PICTURE="(%3.0f)", + ) +elif DONZ >= 0.0: + DONF = Value(DONZ, + PICTURE="(%3.0f)", + ) +else: + DONF = Value(" ", + PICTURE="%B", + ) + +##SHOW %DONZ +##SHOW %DONF +if NEXZ >= 99.5: + NEXF = Value(NEXZ, + PICTURE="(%3.0f)", + ) +elif NEXZ >= 0.0: + NEXF = Value(NEXZ, + PICTURE="(%3.0f)", + ) +else: + NEXF = Value(" ", + PICTURE="%B", + ) + +##SHOW %NEXZ +##SHOW %NEXF +if NWMZ >= 99.5: + NWMF = Value(NWMZ, + PICTURE="(%3.0f)", + ) +elif NWMZ >= 0.0: + NWMF = Value(NWMZ, + PICTURE="(%3.0f)", + ) +else: + NWMF = Value(" ", + PICTURE="%B", + ) + +##SHOW %NWMZ +##SHOW %NWMF +if TULZ >= 99.5: + TULF = Value(TULZ, + PICTURE="(%3.0f)", + ) +elif TULZ >= 0.0: + TULF = Value(TULZ, + PICTURE="(%3.0f)", + ) +else: + TULF = Value(" ", + PICTURE="%B", + ) + +##SHOW %TULZ +##SHOW %TULF +if INDZ >= 99.5: + INDF = Value(INDZ, + PICTURE="(%3.0f)", + ) +elif INDZ >= 0.0: + INDF = Value(INDZ, + PICTURE="(%3.0f)", + ) +else: + INDF = Value(" ", + PICTURE="%B", + ) + +##SHOW %INDZ +##SHOW %INDF +if DELZ >= 99.5: + DELF = Value(DELZ, + PICTURE="(%3.0f)", + ) +elif DELZ >= 0.0: + DELF = Value(DELZ, + PICTURE="(%3.0f)", + ) +else: + DELF = Value(" ", + PICTURE="%B", + ) + +##SHOW %DELZ +##SHOW %DELF +if MRTZ >= 99.5: + MRTF = Value(MRTZ, + PICTURE="(%3.0f)", + ) +elif MRTZ >= 0.0: + MRTF = Value(MRTZ, + PICTURE="(%3.0f)", + ) +else: + MRTF = Value(" ", + PICTURE="%B", + ) + +##SHOW %MRTZ +##SHOW %MRTF +if PRSZ >= 99.5: + PRSF = Value(PRSZ, + PICTURE="(%3.0f)", + ) +elif PRSZ >= 0.0: + PRSF = Value(PRSZ, + PICTURE="(%3.0f)", + ) +else: + PRSF = Value(" ", + PICTURE="%B", + ) + +##SHOW %PRSZ +##SHOW %PRSF +if BOCZ >= 99.5: + BOCF = Value(BOCZ, + PICTURE="(%3.0f)", + ) +elif BOCZ >= 0.0: + BOCF = Value(BOCZ, + PICTURE="(%3.0f)", + ) +else: + BOCF = Value(" ", + PICTURE="%B", + ) + +##SHOW %BOCZ +##SHOW %BOCF +if STMZ >= 99.5: + STMF = Value(STMZ, + PICTURE="(%3.0f)", + ) +elif STMZ >= 0.0: + STMF = Value(STMZ, + PICTURE="(%3.0f)", + ) +else: + STMF = Value(" ", + PICTURE="%B", + ) + +##SHOW %STMZ +##SHOW %STMF +if BDCZ >= 99.5: + BDCF = Value(BDCZ, + PICTURE="(%3.0f)", + ) +elif BDCZ >= 0.0: + BDCF = Value(BDCZ, + PICTURE="(%3.0f)", + ) +else: + BDCF = Value(" ", + PICTURE="%B", + ) + +##SHOW %BDCZ +##SHOW %BDCF +if EBMZ >= 99.5: + EBMF = Value(EBMZ, + PICTURE="(%3.0f)", + ) +elif EBMZ >= 0.0: + EBMF = Value(EBMZ, + PICTURE="(%3.0f)", + ) +else: + EBMF = Value(" ", + PICTURE="%B", + ) + +##SHOW %EBMZ +##SHOW %EBMF +##IF %ABSZ >= 99.5 +# %ABSF = %ABSZ PICTURE = (NNZ) +##ELSEIF %ABSZ >= 0.0 +# %ABSF = %ABSZ PICTURE = (NNZ) +##ELSE +# %ABSF =" ( x0)" PICTURE = AAAA +##ENDIF +##SHOW %ABSZ +##SHOW %ABSF +##IF %BBSZ >= 99.5 +# %BBSF = %BBSZ PICTURE = (NNZ) +##ELSEIF %BBSZ >= 0.0 +# %BBSF = %BBSZ PICTURE = (NNZ) +##ELSE +# %BBSF =" " PICTURE = AAAAA +##ENDIF +##SHOW %BBSZ +##SHOW %BBSF +##IF %CBSZ >= 99.5 +# %CBSF = %CBSZ PICTURE = (NNZ) +##ELSEIF %CBSZ >= 0.0 +# %CBSF = %CBSZ PICTURE = (NNZ) +##ELSE +# %CBSF =" " PICTURE = AAAAA +##ENDIF +##SHOW %CBSZ +##SHOW %CBSF +##IF %DBSZ >= 99.5 +# %DBSF = %DBSZ PICTURE = (NNZ) +##ELSEIF %DBSZ >= 0.0 +# %DBSF = %DBSZ PICTURE = (NNZ) +##ELSE +# %DBSF =" " PICTURE = AAAAA +##ENDIF +##SHOW %DBSZ +##SHOW %DBSF +##IF %EBSZ >= 99.5 +# %EBSF = %EBSZ PICTURE = (NNZ) +##ELSEIF %EBSZ >= 0.0 +# %EBSF = %EBSZ PICTURE = (NNZ) +##ELSE +# %EBSF =" " PICTURE = AAAAA +##ENDIF +#SHOW %EBSZ +#SHOW %EBSF +# +# +# Define Space Used Above Top Conservation Storage +# +# Define Space Used Above TCS for the non-snowmelt reservoirs. +# IF we are in snowmelt season (01Feb to 31Jul) THEN +# Define Space Used Above TCS for the snowmelt reservoirs as N/A +# (i.e. Not Applicable) +# ELSE +# Display Space Used Above TCS for the snowmelt reservoirs. +# ENDIF +# +BBSP = Value(BBSTO - BBTCS, + PICTURE="%10.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +ENSP = Value(ENSTO - ENTCS) +NHSP = Value(NHSTO - NHTCS) +BUSP = Value(BUSTO - BUTCS) +HDSP = Value(HDSTO - HDTCS) +COSP = Value(COSTO - COTCS) +WSSP = Value(WSSTO - WSTCS) +FMSP = Value(FMSTO - FMTCS) +MRTSP = Value(MRTSTO - MRTTCS) +BURSP = Value(BNSTO - BNTCS) +BARSP = Value(BRSTO - BRTCS) +OWNSP = Value(OWSTO - OWTCS) +MARSP = Value(MRSTO - MRTCS) +SHASP = Value(SHASTO - SHATCS) +FOLSP12 = Value(FLSTO12 - FTCS12) +FOLSP18 = Value(FLSTO18 - FTCS18) +FOLSP00 = Value(FLSTO00 - FTCS00) +FOLSP06 = Value(FLSTO06 - FTCS06) +#%SACSP = %SACSTO - %SACTCS +OROSP = Value(OROSTO - OROTCS) +LOSSP = Value(LOSSTO - LOSTCS) +NBBSP = Value(NBBSTO - NBBTCS) +TULSP = Value(TULSTO - TULTCS) +INDSP = Value(INDSTO - INDTCS) +DELSP = Value(DELSTO - DELTCS) +BDCSP = Value(BDCSTO - BDCTCS) +if CAMSTO > CAMTCS: + EBMSP = Value(EBMSTO - EBMTCS) +else: + EBMSP = Value(" ") + +# %MMMDD = MONOFYR(%BASDATE) * 100 + DAY(%BASDATE) +# #IF 0201 =< %MMMDD AND %MMMDD =< 0731 +# %PFSP = " N/A" +# %TMSP = " N/A" +# %SCSP = " N/A" +# %IBSP = " N/A" +# %FRISP = " N/A" +# %CAMSP = " N/A" +# %DONSP = " N/A" +# %NEXSP = " N/A" +# %NWMSP = " N/A" +# %PRSSP = " N/A" +# %BOCSP = " N/A" +# %STMSP = " N/A" +# #ELSE +PFSP = Value(PFSTO - PFTCS) +TMSP = Value(TMSTO - TMTCS) +SCSP = Value(SCSTO - SCTCS) +IBSP = Value(IBSTO - IBTCS) +FRISP = Value(FRISTO - FRITCS) +CAMSP = Value(CAMSTO - CAMTCS) +DONSP = Value(DONSTO - DONTCS) +NEXSP = Value(NEXSTO - NEXTCS) +NWMSP = Value(NWMSTO - NWMTCS) +PRSSP = Value(PRSSTO - PRSTCS) +BOCSP = Value(BOCSTO - BOCTCS) +STMSP = Value(STMSTO - STMTCS) +# +if CAMSTO > CAMTCS: + EBMSP = Value(EBMSTO - EBMTCS) +else: + EBMSP = Value(" ") + +# %MMMDD = MONOFYR(%BASDATE) * 100 + DAY(%BASDATE) +# #IF 0201 =< %MMMDD AND %MMMDD =< 0731 +# %PFSP = " N/A" +# %TMSP = " N/A" +# %SCSP = " N/A" +# %IBSP = " N/A" +# %FRISP = " N/A" +# %CAMSP = " N/A" +# %DONSP = " N/A" +# %NEXSP = " N/A" +# %NWMSP = " N/A" +# %PRSSP = " N/A" +# %BOCSP = " N/A" +# %STMSP = " N/A" +# #ELSE +# +# +# +# Basin summations of total above top of conservation to include +# only encroached projects. +# +if ENSP <= 0: + ENS = Value(0) +else: + ENS = Value(ENSP) + +if NHSP <= 0: + NHS = Value(0) +else: + NHS = Value(NHSP) + +# +if BUSP <= 0: + BCS = Value(0) +else: + BCS = Value(BUSP) + +# +if HDSP <= 0: + HDS = Value(0) +else: + HDS = Value(HDSP) + +# +if COSP <= 0: + COS = Value(0) +else: + COS = Value(COSP) + +# +if WSSP <= 0: + WSS = Value(0) +else: + WSS = Value(WSSP) + +# +if FMSP <= 0: + FMS = Value(0) +else: + FMS = Value(FMSP) + +# +if MRTSP <= 0: + MRTS = Value(0) +else: + MRTS = Value(MRTSP) + +# +if BURSP <= 0: + BNS = Value(0) +else: + BNS = Value(BURSP) + +# +if BARSP <= 0: + BRS = Value(0) +else: + BRS = Value(BARSP) + +# +if OWNSP <= 0: + OWS = Value(0) +else: + OWS = Value(OWNSP) + +# +if MARSP <= 0: + MRS = Value(0) +else: + MRS = Value(MARSP) + +# +if SHASP <= 0: + SHAS = Value(0) +else: + SHAS = Value(SHASP) + +# +if BBSP <= 0: + BBTS = Value(0) +else: + BBTS = Value(BBSP) + +# +if FOLSP12 <= 0: + FOLS12 = Value(0) +else: + FOLS12 = Value(FOLSP12) + +if FOLSP18 <= 0: + FOLS18 = Value(0) +else: + FOLS18 = Value(FOLSP18) + +if FOLSP00 <= 0: + FOLS00 = Value(0) +else: + FOLS00 = Value(FOLSP00) + +if FOLSP06 <= 0: + FOLS06 = Value(0) +else: + FOLS06 = Value(FOLSP06) + +# #IF %SACSP =< 0 +# %SACS = 0 +# #ELSE +# %SACS = %SACSP +# #ENDIF +## +if OROSP <= 0: + OROS = Value(0) +else: + OROS = Value(OROSP) + +## +if LOSSP <= 0: + LOSS = Value(0) +else: + LOSS = Value(LOSSP) + +## +if NBBSP <= 0: + NBBS = Value(0) +else: + NBBS = Value(NBBSP) + +## +if TULSP <= 0: + TULS = Value(0) +else: + TULS = Value(TULSP) + +# +if INDSP <= 0: + INDS = Value(0) +else: + INDS = Value(INDSP) + +## +if DELSP <= 0: + DELS = Value(0) +else: + DELS = Value(DELSP) + +## +if BDCSP <= 0: + BDCS = Value(0) +else: + BDCS = Value(BDCSP) + +## +if PFSP <= 0: + PFS = Value(0) +else: + PFS = Value(PFSP) + +# +if TMSP <= 0: + TMS = Value(0) +else: + TMS = Value(TMSP) + +# +if SCSP <= 0: + SCS = Value(0) +else: + SCS = Value(SCSP) + +# +if IBSP <= 0: + IBS = Value(0) +else: + IBS = Value(IBSP) + +# +if FRISP <= 0: + FRIS = Value(0) +else: + FRIS = Value(FRISP) + +## +if CAMSP <= 0: + CAMS = Value(0) +else: + CAMS = Value(CAMSP) + +## +if DONSP <= 0: + DONS = Value(0) +else: + DONS = Value(DONSP) + +## +if NEXSP <= 0: + NEXS = Value(0) +else: + NEXS = Value(NEXSP) + +## +if NWMSP <= 0: + NWMS = Value(0) +else: + NWMS = Value(NWMSP) + +## +if PRSSP <= 0: + PRSS = Value(0) +else: + PRSS = Value(PRSSP) + +## +if BOCSP <= 0: + BOCS = Value(0) +else: + BOCS = Value(BOCSP) + +## +if STMSP <= 0: + STMS = Value(0) +else: + STMS = Value(STMSP) + +# +# Summation of volumes above the allowable. +# +# +BB10 = Value( + DBLOC="Black Butte-Pool", + DBPAR="Stor", + DBPTYP="Ave", + DBINT="~1Day", + DBDUR="1Decade", + DBVER="Calc-val", + PICTURE="%9.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", + TIME=BASDATE, + DBTZ="PST8PDT", + DBUNITS="ac-ft", +) +# DBLOC="Black Butte-Pool" DBPAR=Elev DBPTYP=Inst DBDUR=0 DBVER=Calc-val +EN10 = Value( + DBLOC="Englebright Lake-Pool", +) +NH10 = Value( + DBLOC="New Hogan-Pool", +) +BU10 = Value( + DBLOC="Eastman Lake-Pool", +) +HD10 = Value( + DBLOC="Hensley lake-Pool", +) +PF10 = Value( + DBLOC="Pine Flat Lake-Pool", +) +TM10 = Value( + DBLOC="Lake Kaweah-Pool", +) +SC10 = Value( + DBLOC="Success Lake-Pool", +) +IB10 = Value( + DBLOC="Lake Isabella-Pool", +) +CO10 = Value( + DBLOC="Lake Mendocino-Pool", +) +WS10 = Value( + DBLOC="Lake Sonoma-Pool", +) +MRT10 = Value( + DBLOC="Martis Creek-Pool", +) +FM10 = Value( + DBLOC="Farmington Dam-Pool", +) +BN10 = Value( + DBLOC="Burns-Pool", +) +BR10 = Value( + DBLOC="Bear-Pool", +) +OW10 = Value( + DBLOC="Owens-Pool", +) +MR10 = Value( + DBLOC="Mariposa-Pool", +) +EPK10 = Value( + DBLOC="East Park", + DBVER="Thumb-raw", +) +STG10 = Value( + DBLOC="Stony Gorge", +) +CRT10 = Value( + DBLOC="Courtright", + DBVER="Thumb-raw", +) +# A=KINGS B=COURTRIGHT F= +WSH10 = Value( + DBLOC="Wishon", +) +# A=KINGS B=WISHON +SHA10 = Value( + DBLOC="Shasta", + DBVER="Raw-USBR-Combined", +) +# FILE = /dat0/rtsc7db.dss TYPE=DSS +# A=SACRAMENTO B=SHASTA F= +FOL10 = Value( + DBLOC="Folsom Lake", +) +# A=AMERICAN B=FOLSOM +#%SAC10 = %FOLSTO +# A=SAN JOAQUIN B=FRIANT +ORO10 = Value( + DBLOC="Oroville Dam", + DBVER="Calc-cdec", +) +# A=FEATHER B=OROVILLE +NBB10 = Value( + DBLOC="New Bullards Bar", + DBVER="Calc-cdec", +) +# A=NORTH YUBA B=NEW BULLARDS BAR +IND10 = Value( + DBLOC="Indian Valley", + DBVER="Calc-usgs", +) +# A=NF CACHE CR B=INDIAN VALLEY +UNV10 = Value( + DBLOC="Union Valley", + DBVER="Calc-cdec", +) +# A=AMERICAN B=UNION VALLEY +FMD10 = Value( + DBLOC="French Meadows", + DBVER="Calc-confidential", +) +# A=AMERICAN B=FRENCH MEADOWS +HHL10 = Value( + DBLOC="Hell Hole", +) +# A=AMERICAN B=HELL HOLE +NWM10 = Value( + DBLOC="New Melones", + DBVER="Raw-USBR-Combined", +) +# A=STANISLAUS B=NEW MELONES +BRD10 = Value( + DBLOC="Beardsley Lake", +) +# A=STANISLAUS B=BEARDSLEY +DNL10 = Value( + DBLOC="Donnells", +) +# A=STANISLAUS B=DONNELLS +TUL10 = Value( + DBLOC="Tulloch", +) +# A=STANISLAUS B=TULLOCH +FRI10 = Value( + DBLOC="Friant Dam", +) +MAM10 = Value( + DBLOC="Mammoth Pool", +) +# A=SAN JOAQUIN B=MAMMOTH POOL +MTS10 = Value( + DBLOC="Friant Dam", + DBPAR="Stor-Total Upstream", +) +# A=SAN JOAQUIN B=FRIANT C=10R-TOT U\S +CAM10 = Value( + DBLOC="Camanche", + DBPAR="Stor", + DBVER="MANUAL", +) +# A=MOKELUMNE B=CAMANCHE +DON10 = Value( + DBLOC="Don Pedro", +) +# A=TUOLUMNE B=NEW DON PEDRO +NEX10 = Value( + DBLOC="New Exchequer", +) +# A=MERCED B=NEW EXCHEQUER +PRD10 = Value( + DBLOC="Pardee", +) +# A=MOKELUMNE B=PARDEE +EBM10 = Value((CAMSTO + PRDSTO)) +SSP10 = Value( + DBLOC="Mokelumne R-Salt Springs", +) +# A=MOKELUMNE B=SALT SPRINGS +LBR10 = Value( + DBLOC="Lower Bear", +) +# A=MOKELUMNE B=LOWER BEAR +HTH10 = Value( + DBLOC="Hetch Hetchy", +) +# A=TUOLUMNE B=HETCH HETCHY +CHV10 = Value( + DBLOC="Cherry Valley", +) +# A=TUOLUMNE B=CHERRY VALLEY +LKL10 = Value( + DBLOC="Lake Eleanor", +) +# A=TUOLUMNE B=ELEANOR +DEL10 = Value( + DBLOC="Del Valle", +) +# A=ALAMEDA CR B=DEL VALLE +PRS10 = Value( + DBLOC="Prosser", +) +# A=PROSSER CR B=PROSSER CR +BOC10 = Value( + DBLOC="Boca", +) +# A=LITTLE TRUCKEE B=BOCA +STM10 = Value( + DBLOC="Stampede", +) +# A=LITTLE TRUCKEE B=STAMPEDE +BDC10 = Value( + DBLOC="Big Dry Cr", +) +LOS10 = Value( + DBLOC="Los Banos", +) +SHA10P = Value((SHASTO/SHA10)*100, + PICTURE="%9.0f", +) +BB10P = Value((BBSTO/BB10)*100) +ORO10P = Value((OROSTO/ORO10)*100) +NBB10P = Value((NBBSTO/NBB10)*100) +EN10P = Value((ENSTO/EN10)*100) +IND10P = Value((INDSTO/IND10)*100) +FOL10P = Value((FOLSTO/FOL10)*100) +CAM10P = Value((CAMSTO/CAM10)*100) +NH10P = Value((NHSTO/NH10)*100) +FM10P = Value((FMSTO/FM10)*100) +NWM10P = Value((NWMSTO/NWM10)*100) +TUL10P = Value((TULSTO/TUL10)*100) +DON10P = Value((DONSTO/DON10)*100) +NEX10P = Value((NEXSTO/NEX10)*100) +BN10P = Value((BNSTO/BN10)*100) +BR10P = Value((BRSTO/BR10)*100) +OW10P = Value((OWSTO/(OW10+0.001))*100) +MR10P = Value((MRSTO/(MR10+0.001))*100) +LOS10P = Value((LOSSTO/LOS10)*100) +BU10P = Value((BUSTO/BU10)*100) +HD10P = Value((HDSTO/HD10)*100) +FRI10P = Value((FRISTO/FRI10)*100) +BDC10P = Value((BDCSTO/BDC10)*100) +PF10P = Value((PFSTO/PF10)*100) +TM10P = Value((TMSTO/TM10)*100) +SC10P = Value((SCSTO/SC10)*100) +IB10P = Value((IBSTO/IB10)*100) +MRT10P = Value((MRTSTO/MRT10)*100) +PRS10P = Value((PRSSTO/PRS10)*100) +BOC10P = Value((BOCSTO/BOC10)*100) +STM10P = Value((STMSTO/STM10)*100) +CO10P = Value((COSTO/CO10)*100) +WS10P = Value((WSSTO/WS10)*100) +DEL10P = Value((DELSTO/DEL10)*100) +BBSA = Value(BBG - BBSTO, + PICTURE="%10.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +ENSA = Value(ENG - ENSTO) +NHSA = Value(NHG - NHSTO) +BUSA = Value(BUG - BUSTO) +HDSA = Value(HDG - HDSTO) +COSA = Value(COG - COSTO) +WSSA = Value(WSG - WSSTO) +FMSA = Value(FMG - FMSTO) +MRTSA = Value(MRTG - MRTSTO) +BURSA = Value(BNG - BNSTO) +BARSA = Value(BRG - BRSTO) +OWNSA = Value(OWG - OWSTO) +MARSA = Value(MRG - MRSTO) +SHASA = Value(SHAG - SHASTO) +FOLSA = Value(FOLG - FOLSTO, + MISSTR=" -NF-", + UNDEF=" -NF-", +) +FOLSA12 = Value(FOLG - FLSTO12) +FOLSA18 = Value(FOLG - FLSTO18) +FOLSA00 = Value(FOLG - FLSTO00) +FOLSA06 = Value(FOLG - FLSTO06) +#%SACSA = %SACG - %SACSTO +OROSA = Value(OROG - OROSTO, + MISSTR=" -NR-", + UNDEF=" -NR-", +) +LOSSA = Value(LOSG - LOSSTO) +NBBSA = Value(NBBG - NBBSTO) +TULSA = Value(TULG - TULSTO) +INDSA = Value(INDG - INDSTO) +DELSA = Value(DELG - DELSTO) +BDCSA = Value(BDCG - BDCSTO) +# #IF %CAMG > %CAMSTO +# %EBMSA = %EBMG - %EBMSTO +# #ELSE +# %EBMSA = " " +# #ENDIF +# %MMMDD = MONOFYR(%BASDATE) * 100 + DAY(%BASDATE) +# #IF 0201 =< %MMMDD AND %MMMDD =< 0731 +# %PFSA = " N/A" +# %TMSA = " N/A" +# %SCSA = " N/A" +# %IBSA = " N/A" +# %FRISA = " N/A" +# %CAMSA = " N/A" +# %DONSA = " N/A" +# %NEXSA = " N/A" +# %NWMSA = " N/A" +# %PRSSA = " N/A" +# %BOCSA = " N/A" +# %STMSA = " N/A" +# #ELSE +PFSA = Value(PFG - PFSTO) +TMSA = Value(TMG - TMSTO) +SCSA = Value(SCG - SCSTO) +IBSA = Value(IBG - IBSTO) +FRISA = Value(FRIG - FRISTO) +CAMSA = Value(CAMG - CAMSTO) +DONSA = Value(DONG - DONSTO) +NEXSA = Value(NEXG - NEXSTO) +NWMSA = Value(NWMG - NWMSTO) +PRSSA = Value(PRSG - PRSSTO) +BOCSA = Value(BOCG - BOCSTO) +STMSA = Value(STMG - STMSTO) +# +# #IF %CAMG > %CAMSTO +# %EBMSA = %EBMG - %EBMSTO +# #ELSE +# %EBMSA = " " +# #ENDIF +# %MMMDD = MONOFYR(%BASDATE) * 100 + DAY(%BASDATE) +# #IF 0201 =< %MMMDD AND %MMMDD =< 0731 +# %PFSA = " N/A" +# %TMSA = " N/A" +# %SCSA = " N/A" +# %IBSA = " N/A" +# %FRISA = " N/A" +# %CAMSA = " N/A" +# %DONSA = " N/A" +# %NEXSA = " N/A" +# %NWMSA = " N/A" +# %PRSSA = " N/A" +# %BOCSA = " N/A" +# %STMSA = " N/A" +# #ELSE +# +# +# +# Basin summations of total above top of conservation to include +# only encroached projects. +# +if ENSA <= 0: + ENA = Value(0) +else: + ENA = Value(ENSA) + +if NHSA <= 0: + NHA = Value(0) +else: + NHA = Value(NHSA) + +# +if BUSA <= 0: + BCA = Value(0) +else: + BCA = Value(BUSA) + +# +if HDSA <= 0: + HDA = Value(0) +else: + HDA = Value(HDSA) + +# +if COSA <= 0: + COA = Value(0) +else: + COA = Value(COSA) + +# +if WSSA <= 0: + WSA = Value(0) +else: + WSA = Value(WSSA) + +# +if FMSA <= 0: + FMA = Value(0) +else: + FMA = Value(FMSA) + +# +if MRTSA <= 0: + MRTA = Value(0) +else: + MRTA = Value(MRTSA) + +# +if BURSA <= 0: + BNA = Value(0) +else: + BNA = Value(BURSA) + +# +if BARSA <= 0: + BRA = Value(0) +else: + BRA = Value(BARSA) + +# +if OWNSA <= 0: + OWA = Value(0) +else: + OWA = Value(OWNSA) + +# +if MARSA <= 0: + MRA = Value(0) +else: + MRA = Value(MARSA) + +# +if SHASA <= 0: + SHAA = Value(0) +else: + SHAA = Value(SHASA) + +# +if BBSA <= 0: + BBTA = Value(0) +else: + BBTA = Value(BBSA) + +# +if FOLSA <= 0: + FOLA = Value(0) +else: + FOLA = Value(FOLSA) + +if FOLSA12 <= 0: + FOLA12 = Value(0) +else: + FOLA12 = Value(FOLSA12) + +if FOLSA18 <= 0: + FOLA18 = Value(0) +else: + FOLA18 = Value(FOLSA18) + +if FOLSA00 <= 0: + FOLA00 = Value(0) +else: + FOLA00 = Value(FOLSA00) + +if FOLSA06 <= 0: + FOLA06 = Value(0) +else: + FOLA06 = Value(FOLSA06) + +# #IF %SACSA =< 0 +# %SACA = 0 +# #ELSE +# %SACA = %SACSA +# #ENDIF +## +if OROSA <= 0: + OROA = Value(0) +else: + OROA = Value(OROSA) + +## +if LOSSA <= 0: + LOSA = Value(0) +else: + LOSA = Value(LOSSA) + +## +if NBBSA <= 0: + NBBA = Value(0) +else: + NBBA = Value(NBBSA) + +## +if TULSA <= 0: + TULA = Value(0) +else: + TULA = Value(TULSA) + +# +if INDSA <= 0: + INDA = Value(0) +else: + INDA = Value(INDSA) + +## +if DELSA <= 0: + DELA = Value(0) +else: + DELA = Value(DELSA) + +## +if BDCSA <= 0: + BDCA = Value(0) +else: + BDCA = Value(BDCSA) + +## +if PFSA <= 0: + PFA = Value(0) +else: + PFA = Value(PFSA) + +# +if TMSA <= 0: + TMA = Value(0) +else: + TMA = Value(TMSA) + +# +if SCSA <= 0: + SCA = Value(0) +else: + SCA = Value(SCSA) + +# +if IBSA <= 0: + IBA = Value(0) +else: + IBA = Value(IBSA) + +# +if FRISA <= 0: + FRIA = Value(0) +else: + FRIA = Value(FRISA) + +## +if CAMSA <= 0: + CAMA = Value(0) +else: + CAMA = Value(CAMSA) + +## +if DONSA <= 0: + DONA = Value(0) +else: + DONA = Value(DONSA) + +## +if NEXSA <= 0: + NEXA = Value(0) +else: + NEXA = Value(NEXSA) + +## +if NWMSA <= 0: + NWMA = Value(0) +else: + NWMA = Value(NWMSA) + +## +if PRSSA <= 0: + PRSA = Value(0) +else: + PRSA = Value(PRSSA) + +## +if BOCSA <= 0: + BOCA = Value(0) +else: + BOCA = Value(BOCSA) + +## +if STMSA <= 0: + STMA = Value(0) +else: + STMA = Value(STMSA) + +BBO = Value( + DBLOC="Black Butte", + DBPTYP="Ave", + DBPAR="Flow-Res Out", + DBVER="Calc-val", + DBINT="~1Day", + DBDUR="1Day", + PICTURE="%10.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", + TIME=BASDATE, + DBUNITS="cfs", + DBTZ="PST8PDT", +) +NHO = Value( + DBLOC="New Hogan", +) +BUO = Value( + DBLOC="Eastman Lake", +) +HDO = Value( + DBLOC="Hensley Lake", +) +PFO = Value( + DBLOC="Pine Flat Lake", +) +TMO = Value( + DBLOC="Lake Kaweah", +) +SCO = Value( + DBLOC="Success Lake", +) +IBO = Value( + DBLOC="Lake Isabella", +) +COO = Value( + DBLOC="Lake Mendocino", +) +WSO = Value( + DBLOC="Lake Sonoma", +) +MRTO = Value( + DBLOC="Martis Creek", +) +BNO = Value( + DBLOC="Burns", +) +BRO = Value( + DBLOC="Bear", +) +OWO = Value( + DBLOC="Owens", +) +MRO = Value( + DBLOC="Mariposa", +) +FMO = Value( + DBLOC="Farmington Dam", + DBVER="Calc-RCF+FRMQ", +) +ENO = Value( + DBLOC="Englebright Lake", + DBVER="Calc-thumb", +) +SHAO = Value( + DBLOC="Shasta", + DBVER="Calc-usbr", +) +FOLO = Value( + DBLOC="Folsom Lake", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +NWMO = Value( + DBLOC="New Melones", +) +TULO = Value( + DBLOC="Tulloch", +) +FRIO = Value( + DBLOC="Friant Dam", + DBVER="Calc-usbr", +) +OROO = Value( + DBLOC="Oroville Dam", + DBVER="MANUAL", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +INDO = Value( + DBLOC="Indian Valley", +) +LOSO = Value( + DBLOC="Los Banos", +) +DELO = Value( + DBLOC="Del Valle", +) +DONO = Value( + DBLOC="Don Pedro", +) +CAMO = Value( + DBLOC="Camanche", +) +NEXO = Value( + DBLOC="New Exchequer", +) +PRSO = Value( + DBLOC="Prosser", +) +BOCO = Value( + DBLOC="Boca", +) +STMO = Value( + DBLOC="Stampede", +) +BDCO = Value( + DBLOC="Big Dry Cr", +) +NBBO = Value( + DBLOC="New Bullards Bar", + DBVER="Calc-cdec", +) +FOLO12 = Value( + DBLOC="Folsom Lake", + DBPAR="Flow-Reservoir Outflow", + DBPTYP="Inst", + DBINT="1Hour", + DBDUR=0, + DBVER="CDEC-confidential-raw", + MISSTR=" -NR-", + UNDEF=" -NR-", + DBTZ="UTC", + TIME=T12, +) +FOLO18 = Value( + TIME=T18, +) +FOLO00 = Value( + TIME=T00, +) +FOLO06 = Value( + TIME=T06, +) +BBI = Value( + DBLOC="Black Butte", + DBPTYP="Ave", + DBPAR="Flow-Res In", + DBVER="Calc-val", + DBINT="~1Day", + DBDUR="1Day", + PICTURE="%10.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", + TIME=BASDATE, + DBUNITS="cfs", + DBTZ="PST8PDT", +) +NHI = Value( + DBLOC="New Hogan", +) +BUI = Value( + DBLOC="Eastman Lake", +) +HDI = Value( + DBLOC="Hensley Lake", +) +PFI = Value( + DBLOC="Pine Flat Lake", +) +TMI = Value( + DBLOC="Lake Kaweah", +) +SCI = Value( + DBLOC="Success Lake", +) +IBI = Value( + DBLOC="Lake Isabella", +) +COI = Value( + DBLOC="Lake Mendocino", +) +WSI = Value( + DBLOC="Lake Sonoma", +) +MRTI = Value( + DBLOC="Martis Creek", +) +BNI = Value( + DBLOC="Burns", +) +BRI = Value( + DBLOC="Bear", +) +OWI = Value( + DBLOC="Owens", +) +MRI = Value( + DBLOC="Mariposa", +) +FMI = Value( + DBLOC="Farmington Dam", + DBVER="Calc-RCF+FRMQ", +) +ENI = Value( + DBLOC="Englebright Lake", + DBVER="Calc-val", +) +SHAI = Value( + DBLOC="Shasta", + DBVER="Raw-USBR-Combined", +) +FOLI = Value( + DBLOC="Folsom Lake", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +NWMI = Value( + DBLOC="New Melones", +) +TULI = Value( + DBLOC="Tulloch", +) +FRII = Value( + DBLOC="Friant Dam", +) +OROI = Value( + DBLOC="Oroville Dam", + DBVER="MANUAL", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +INDI = Value( + DBLOC="Indian Valley", +) +LOSI = Value( + DBLOC="Los Banos", +) +DELI = Value( + DBLOC="Del Valle", +) +DONI = Value( + DBLOC="Don Pedro", +) +CAMI = Value( + DBLOC="Camanche", +) +NEXI = Value( + DBLOC="New Exchequer", +) +PRSI = Value( + DBLOC="Prosser", +) +BOCI = Value( + DBLOC="Boca", +) +STMI = Value( + DBLOC="Stampede", +) +BDCI = Value( + DBLOC="Big Dry Cr", +) +NBBI = Value( + DBLOC="New Bullards Bar", + DBVER="Calc-cdec", +) +FOLI12 = Value( + DBLOC="Folsom Lake", + DBVER="Raw-USBR-Combined", + DBINT="1Hour", + DBPTYP="Ave", + DBDUR="1Hour", + DBTZ="UTC", + TIME=T12, +) +FOLI18 = Value( + TIME=T18, +) +FOLI00 = Value( + TIME=T00, +) +FOLI06 = Value( + TIME=T06, +) +# A=SAN JOAQUIN B=FRIANT F= +# A=NORTH YUBA B=NEW BULLARDS BAR +UTDATE = Value(BASDATE) +T1 = Value(UTDATE-timedelta(years=9), + PICTURE="%d%b%Y", +) +T2 = Value(UTDATE-timedelta(years=8)) +T3 = Value(UTDATE-timedelta(years=7)) +T4 = Value(UTDATE-timedelta(years=6)) +T5 = Value(UTDATE-timedelta(years=5)) +T6 = Value(UTDATE-timedelta(years=4)) +T7 = Value(UTDATE-timedelta(years=3)) +T8 = Value(UTDATE-timedelta(years=2)) +T9 = Value(UTDATE-timedelta(years=1)) +EOSTO = Value( + PICTURE=" %7.0f", + MISSTR=" -NR-", + UNDEF=" ", + TIME=UTDATE, + DBTZ="MST7MDT", + DBLOC="Echo", + DBPTYP="Inst", + DBPAR="Stor", + DBINT="~1Day", + DBDUR=0, + DBVER="Raw-USBRSLC", + DBUNITS="ac-ft", + A="WEBER", + B="ECHO", + C="STOR-RES EOP", + E="1DAY", +) +# FILE = /shared/rtsc7db.dss TYPE=DSS +EO1 = Value( + TIME=T1, +) +EO2 = Value( + TIME=T2, +) +EO3 = Value( + TIME=T3, +) +EO4 = Value( + TIME=T4, +) +EO5 = Value( + TIME=T6, +) +EO6 = Value( + TIME=T6, +) +EO7 = Value( + TIME=T7, +) +EO8 = Value( + TIME=T8, +) +EO9 = Value( + TIME=T9, +) +EO10 = Value(Value.average(EOSTO, EO1, EO2, EO3, EO4, EO5, EO6, EO7, EO8, EO9, treat="IGNORE")) +RKSTO = Value( + DBLOC="Rockport", + DBVER="Rev-USBRSLC", + TIME=UTDATE, +) +RK1 = Value( + TIME=T1, +) +RK2 = Value( + TIME=T2, +) +RK3 = Value( + TIME=T3, +) +RK4 = Value( + TIME=T4, +) +RK5 = Value( + TIME=T6, +) +RK6 = Value( + TIME=T6, +) +RK7 = Value( + TIME=T7, +) +RK8 = Value( + TIME=T8, +) +RK9 = Value( + TIME=T9, +) +RK10 = Value(Value.average(RKSTO, RK1, RK2, RK3, RK4, RK5, RK6, RK7, RK8, RK9, treat="IGNORE")) +ERSTO = Value( + DBLOC="EchoRockport", + TIME=UTDATE, +) +ER1 = Value( + TIME=T1, +) +ER2 = Value( + TIME=T2, +) +ER3 = Value( + TIME=T3, +) +ER4 = Value( + TIME=T4, +) +ER5 = Value( + TIME=T6, +) +ER6 = Value( + TIME=T6, +) +ER7 = Value( + TIME=T7, +) +ER8 = Value( + TIME=T8, +) +ER9 = Value( + TIME=T9, +) +ER10 = Value(Value.average(ERSTO, ER1, ER2, ER3, ER4, ER5, ER6, ER7, ER8, ER9, treat="IGNORE")) +LCSTO = Value( + DBLOC="Lost Cr", + A="LOST CR", + B="LOST CR", + TIME=UTDATE, +) +LC1 = Value( + TIME=T1, +) +LC2 = Value( + TIME=T2, +) +LC3 = Value( + TIME=T3, +) +LC4 = Value( + TIME=T4, +) +LC5 = Value( + TIME=T6, +) +LC6 = Value( + TIME=T6, +) +LC7 = Value( + TIME=T7, +) +LC8 = Value( + TIME=T8, +) +LC9 = Value( + TIME=T9, +) +LC10 = Value(Value.average(LCSTO, LC1, LC2, LC3, LC4, LC5, LC6, LC7, LC8, LC9, treat="IGNORE")) +ECSTO = Value( + DBLOC="East Canyon", + A="EAST CANYON CR", + B="EAST CANYON", + TIME=UTDATE, +) +EC1 = Value( + TIME=T1, +) +EC2 = Value( + TIME=T2, +) +EC3 = Value( + TIME=T3, +) +EC4 = Value( + TIME=T4, +) +EC5 = Value( + TIME=T6, +) +EC6 = Value( + TIME=T6, +) +EC7 = Value( + TIME=T7, +) +EC8 = Value( + TIME=T8, +) +EC9 = Value( + TIME=T9, +) +EC10 = Value(Value.average(ECSTO, EC1, EC2, EC3, EC4, EC5, EC6, EC7, EC8, EC9, treat="IGNORE")) +PVSTO = Value( + DBLOC="Pineview", + DBVER="Raw-USBRSLC", + A="OGDEN", + B="PINEVIEW", + TIME=UTDATE, +) +PV1 = Value( + TIME=T1, +) +PV2 = Value( + TIME=T2, +) +PV3 = Value( + TIME=T3, +) +PV4 = Value( + TIME=T4, +) +PV5 = Value( + TIME=T6, +) +PV6 = Value( + TIME=T6, +) +PV7 = Value( + TIME=T7, +) +PV8 = Value( + TIME=T8, +) +PV9 = Value( + TIME=T9, +) +PV10 = Value(Value.average(PVSTO, PV1, PV2, PV3, PV4, PV5, PV6, PV7, PV8, PV9, treat="IGNORE")) +STSTO = Value( + DBLOC="Starvation", + DBVER="Rev-USBRSLC", + A="STRAWBERRY", + B="STARVATION", + TIME=UTDATE, +) +ST1 = Value( + TIME=T1, +) +ST2 = Value( + TIME=T2, +) +ST3 = Value( + TIME=T3, +) +ST4 = Value( + TIME=T4, +) +ST5 = Value( + TIME=T6, +) +ST6 = Value( + TIME=T6, +) +ST7 = Value( + TIME=T7, +) +ST8 = Value( + TIME=T8, +) +ST9 = Value( + TIME=T9, +) +ST10 = Value(Value.average(STSTO, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, treat="IGNORE")) +VLSTO = Value( + DBLOC="Vallecito", + A="LOS PINOS", + B="VALLECITO", + TIME=UTDATE, +) +VL1 = Value( + TIME=T1, +) +VL2 = Value( + TIME=T2, +) +VL3 = Value( + TIME=T3, +) +VL4 = Value( + TIME=T4, +) +VL5 = Value( + TIME=T6, +) +VL6 = Value( + TIME=T6, +) +VL7 = Value( + TIME=T7, +) +VL8 = Value( + TIME=T8, +) +VL9 = Value( + TIME=T9, +) +VL10 = Value(Value.average(VLSTO, VL1, VL2, VL3, VL4, VL5, VL6, VL7, VL8, VL9, treat="IGNORE")) +LMSTO = Value( + DBLOC="Lemon", + DBVER="Rev-USBRSLC", + A="FLORIDA", + B="LEMON", + TIME=UTDATE, +) +LM1 = Value( + TIME=T1, +) +LM2 = Value( + TIME=T2, +) +LM3 = Value( + TIME=T3, +) +LM4 = Value( + TIME=T4, +) +LM5 = Value( + TIME=T6, +) +LM6 = Value( + TIME=T6, +) +LM7 = Value( + TIME=T7, +) +LM8 = Value( + TIME=T8, +) +LM9 = Value( + TIME=T9, +) +LM10 = Value(Value.average(LMSTO, LM1, LM2, LM3, LM4, LM5, LM6, LM7, LM8, LM9, treat="IGNORE")) +BMSTO = Value( + DBLOC="Blue Mesa", + A="GUNNISON", + B="BLUE MESA", + TIME=UTDATE, +) +BM1 = Value( + TIME=T1, +) +BM2 = Value( + TIME=T2, +) +BM3 = Value( + TIME=T3, +) +BM4 = Value( + TIME=T4, +) +BM5 = Value( + TIME=T6, +) +BM6 = Value( + TIME=T6, +) +BM7 = Value( + TIME=T7, +) +BM8 = Value( + TIME=T8, +) +BM9 = Value( + TIME=T9, +) +BM10 = Value(Value.average(BMSTO, BM1, BM2, BM3, BM4, BM5, BM6, BM7, BM8, BM9, treat="IGNORE")) +PNSTO = Value( + DBLOC="Paonia", + A="MUDDY CR", + B="PAONIA", + TIME=UTDATE, +) +PN1 = Value( + TIME=T1, +) +PN2 = Value( + TIME=T2, +) +PN3 = Value( + TIME=T3, +) +PN4 = Value( + TIME=T4, +) +PN5 = Value( + TIME=T6, +) +PN6 = Value( + TIME=T6, +) +PN7 = Value( + TIME=T7, +) +PN8 = Value( + TIME=T8, +) +PN9 = Value( + TIME=T9, +) +PN10 = Value(Value.average(PNSTO, PN1, PN2, PN3, PN4, PN5, PN6, PN7, PN8, PN9, treat="IGNORE")) +RFSTO = Value( + DBLOC="Red Fleet", + A="BRUSH CR", + B="RED FLEET", + TIME=UTDATE, +) +RF1 = Value( + TIME=T1, +) +RF2 = Value( + TIME=T2, +) +RF3 = Value( + TIME=T3, +) +RF4 = Value( + TIME=T4, +) +RF5 = Value( + TIME=T6, +) +RF6 = Value( + TIME=T6, +) +RF7 = Value( + TIME=T7, +) +RF8 = Value( + TIME=T8, +) +RF9 = Value( + TIME=T9, +) +RF10 = Value(Value.average(RFSTO, RF1, RF2, RF3, RF4, RF5, RF6, RF7, RF8, RF9, treat="IGNORE")) +RGSTO = Value( + DBLOC="Ridgway", + A="UNCOMPAHGRE", + B="RIDGWAY", + TIME=UTDATE, +) +RG1 = Value( + TIME=T1, +) +RG2 = Value( + TIME=T2, +) +RG3 = Value( + TIME=T3, +) +RG4 = Value( + TIME=T4, +) +RG5 = Value( + TIME=T6, +) +RG6 = Value( + TIME=T6, +) +RG7 = Value( + TIME=T7, +) +RG8 = Value( + TIME=T8, +) +RG9 = Value( + TIME=T9, +) +RG10 = Value(Value.average(RGSTO, RG1, RG2, RG3, RG4, RG5, RG6, RG7, RG8, RG9, treat="IGNORE")) +JRSTO = Value( + DBLOC="Jordanelle", + A="PROVO", + B="JORDANELLE", + TIME=UTDATE, +) +JR1 = Value( + TIME=T1, +) +JR2 = Value( + TIME=T2, +) +JR3 = Value( + TIME=T3, +) +JR4 = Value( + TIME=T4, +) +JR5 = Value( + TIME=T6, +) +JR6 = Value( + TIME=T6, +) +JR7 = Value( + TIME=T7, +) +JR8 = Value( + TIME=T8, +) +JR9 = Value( + TIME=T9, +) +JR10 = Value(Value.average(JRSTO, JR1, JR2, JR3, JR4, JR5, JR6, JR7, JR8, JR9, treat="IGNORE")) +LDSTO = Value( + DBLOC="Little Dell", + DBVER="Raw-USBRSLC;MANUAL", + A="DELL CR", + B="LITTLE DELL", + TIME=UTDATE, +) +LD1 = Value( + TIME=T1, +) +LD2 = Value( + TIME=T2, +) +LD3 = Value( + TIME=T3, +) +LD4 = Value( + TIME=T4, +) +LD5 = Value( + TIME=T6, +) +LD6 = Value( + TIME=T6, +) +LD7 = Value( + TIME=T7, +) +LD8 = Value( + TIME=T8, +) +LD9 = Value( + TIME=T9, +) +LD10 = Value(Value.average(LDSTO, LD1, LD2, LD3, LD4, LD5, LD6, LD7, LD8, LD9, treat="IGNORE")) +MDSTO = Value( + DBLOC="Mountain Dell", + A="PARLEYS CR", + B="MOUNTAIN DELL", + TIME=UTDATE, +) +MD1 = Value( + TIME=T1, +) +MD2 = Value( + TIME=T2, +) +MD3 = Value( + TIME=T3, +) +MD4 = Value( + TIME=T4, +) +MD5 = Value( + TIME=T6, +) +MD6 = Value( + TIME=T6, +) +MD7 = Value( + TIME=T7, +) +MD8 = Value( + TIME=T8, +) +MD9 = Value( + TIME=T9, +) +MD10 = Value(Value.average(MDSTO, MD1, MD2, MD3, MD4, MD5, MD6, MD7, MD8, MD9, treat="IGNORE")) +# UT/CO %Full +EO10P = Value((EOSTO/EO10)*100, + PICTURE=" %4.0f", +) +PV10P = Value((PVSTO/PV10)*100) +EC10P = Value((ECSTO/EC10)*100) +LC10P = Value((LCSTO/LC10)*100) +RK10P = Value((RKSTO/RK10)*100) +ER10P = Value((ERSTO/ER10)*100) +LD10P = Value((LDSTO/LD10)*100) +MD10P = Value((MDSTO/MD10)*100) +JR10P = Value((JRSTO/JR10)*100) +RF10P = Value((RFSTO/RF10)*100) +ST10P = Value((STSTO/ST10)*100) +PN10P = Value((PNSTO/PN10)*100) +BM10P = Value((BMSTO/BM10)*100) +RG10P = Value((RGSTO/RG10)*100) +LM10P = Value((LMSTO/LM10)*100) +VL10P = Value((VLSTO/VL10)*100) +EOP = Value(EOSTO / EOG * 100.0, + PICTURE=" %3.0f", +) +RKP = Value(RKSTO / RKG * 100.0) +ERP = Value(ERSTO / ERG * 100.0) +LCP = Value(LCSTO / LCG * 100.0) +ECP = Value(ECSTO / ECG * 100.0) +PVP = Value(PVSTO / PVG * 100.0) +STP = Value(STSTO / STVG * 100.0) +VLP = Value(VLSTO / VLG * 100.0) +LMP = Value(LMSTO / LMG * 100.0) +BMP = Value(BMSTO / BMG * 100.0) +PNP = Value(PNSTO / PNG * 100.0) +RFP = Value(RFSTO / RFG * 100.0) +RGP = Value(RGSTO / RGG * 100.0) +JRP = Value(JRSTO / JRG * 100.0) +LDP = Value(LDSTO / LDG * 100.0) +MDP = Value(MDSTO / MDG * 100.0) +# %MPP = %MPSTO / %MPG * 100.0 +# %CRP = %CRSTO / %CRG * 100.0 +EOTCS = Value( + DBPAR="Stor-Top Con", + DBVER="Rev-USBRSLC", + PICTURE=" %6.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", + TIME=BASDATE, + DBLOC="Echo", +) +RKTCS = Value( + DBLOC="Rockport", +) +ERTCS = Value( + DBLOC="EchoRockport", + DBVER="Rev-USBRSLC;Adjusted", +) +LCTCS = Value( + DBLOC="Lost Cr", + DBVER="Rev-USBRSLC", +) +ECTCS = Value( + DBLOC="East Canyon", +) +PVTCS = Value( + DBLOC="Pineview", +) +STTCS = Value( + DBLOC="Starvation", +) +VLTCS = Value( + DBLOC="Vallecito", +) +LMTCS = Value( + DBLOC="Lemon", +) +BMTCS = Value( + DBLOC="Blue Mesa", +) +PNTCS = Value( + DBLOC="Paonia", +) +RFTCS = Value( + DBLOC="Red Fleet", +) +RGTCS = Value( + DBLOC="Ridgway", +) +JRTCS = Value( + DBLOC="Jordanelle", +) +LDTCS = Value( + DBLOC="Little Dell", + DBVER="Calc-USBRSLC;MANUAL", +) +MDTCS = Value( + DBLOC="Mountain Dell", +) +EOSP = Value(EOSTO - EOTCS, + PICTURE=" %7.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +RKSP = Value(RKSTO - RKTCS) +ERSP = Value(ERSTO - ERTCS) +LCSP = Value(LCSTO - LCTCS) +ECSP = Value(ECSTO - ECTCS) +PVSP = Value(PVSTO - PVTCS) +STSP = Value(STSTO - STTCS) +VLSP = Value(VLSTO - VLTCS) +LMSP = Value(LMSTO - LMTCS) +BMSP = Value(BMSTO - BMTCS) +PNSP = Value(PNSTO - PNTCS) +RFSP = Value(RFSTO - RFTCS) +RGSP = Value(RGSTO - RGTCS) +JRSP = Value(JRSTO - JRTCS) +LDSP = Value(LDSTO - LDTCS) +MDSP = Value(MDSTO - MDTCS) +DUMS = Value(0.0) +EOS = Value(Value.max(DUMS, EOSP, treat="MISS")) +RKS = Value(Value.max(DUMS, RKSP, treat="MISS")) +ERS = Value(Value.max(DUMS, ERSP, treat="MISS")) +LCS = Value(Value.max(DUMS, LCSP, treat="MISS")) +ECS = Value(Value.max(DUMS, ECSP, treat="MISS")) +PVS = Value(Value.max(DUMS, PVSP, treat="MISS")) +STS = Value(Value.max(DUMS, STSP, treat="MISS")) +VLS = Value(Value.max(DUMS, VLSP, treat="MISS")) +LMS = Value(Value.max(DUMS, LMSP, treat="MISS")) +BMS = Value(Value.max(DUMS, BMSP, treat="MISS")) +PNS = Value(Value.max(DUMS, PNSP, treat="MISS")) +RFS = Value(Value.max(DUMS, RFSP, treat="MISS")) +RGS = Value(Value.max(DUMS, RGSP, treat="MISS")) +JRS = Value(Value.max(DUMS, JRSP, treat="MISS")) +LDS = Value(Value.max(DUMS, LDSP, treat="MISS")) +MDS = Value(Value.max(DUMS, MDSP, treat="MISS")) +#SPACE AVAILABLE +EOSA = Value(EOG - EOSTO, + PICTURE="%7.0f", + MISSTR=" -NR-", + UNDEF=" -NR-", +) +RKSA = Value(RKG - RKSTO) +ERSA = Value(ERG - ERSTO) +LCSA = Value(LCG - LCSTO) +ECSA = Value(ECG - ECSTO) +PVSA = Value(PVG - PVSTO) +STSA = Value(STVG - STSTO) +VLSA = Value(VLG - VLSTO) +LMSA = Value(LMG - LMSTO) +BMSA = Value(BMG - BMSTO) +PNSA = Value(PNG - PNSTO) +RFSA = Value(RFG - RFSTO) +RGSA = Value(RGG - RGSTO) +JRSA = Value(JRG - JRSTO) +LDSA = Value(LDG - LDSTO) +MDSA = Value(MDG - MDSTO) +EOSA = Value(Value.max(DUMS, EOSA, treat="MISS")) +RKSA = Value(Value.max(DUMS, RKSA, treat="MISS")) +LCSA = Value(Value.max(DUMS, LCSA, treat="MISS")) +ECSA = Value(Value.max(DUMS, ECSA, treat="MISS")) +PVSA = Value(Value.max(DUMS, PVSA, treat="MISS")) +STSA = Value(Value.max(DUMS, STSA, treat="MISS")) +VLSA = Value(Value.max(DUMS, VLSA, treat="MISS")) +LMSA = Value(Value.max(DUMS, LMSA, treat="MISS")) +BMSA = Value(Value.max(DUMS, BMSA, treat="MISS")) +PNSA = Value(Value.max(DUMS, PNSA, treat="MISS")) +RFSA = Value(Value.max(DUMS, RFSA, treat="MISS")) +RGSA = Value(Value.max(DUMS, RGSA, treat="MISS")) +JRSA = Value(Value.max(DUMS, JRSA, treat="MISS")) +LDSA = Value(Value.max(DUMS, LDSA, treat="MISS")) +MDSA = Value(Value.max(DUMS, MDSA, treat="MISS")) +DUMF = Value(0.0, + PICTURE=" %3.0f", +) +if EOSTO > EOTCS and EOG > EOTCS: + EOF = Value(( (EOSTO-EOTCS) / (EOG-EOTCS) ) * 100.0) +else: + EOF = Value(0) + +if RKSTO > RKTCS and RKG > RKTCS: + RKF = Value(( (RKSTO-RKTCS) / (RKG-RKTCS) ) * 100.0) +else: + RKF = Value(0) + +if ERSTO > ERTCS and ERG > ERTCS: + ERF = Value(( (ERSTO-ERTCS) / (ERG-ERTCS) ) * 100.0) +else: + ERF = Value(0) + +if LCSTO > LCTCS and LCG > LCTCS: + LCF = Value(( (LCSTO-LCTCS) / (LCG-LCTCS) ) * 100.0) +else: + LCF = Value(0) + +if ECSTO > ECTCS and ECG > ECTCS: + ECF = Value(( (ECSTO-ECTCS) / (ECG-ECTCS) ) * 100.0) +else: + ECF = Value(0) + +if PVSTO > PVTCS and PVG > PVTCS: + PVF = Value(( (PVSTO-PVTCS) / (PVG-PVTCS) ) * 100.0) +else: + PVF = Value(0) + +if STSTO > STTCS and STG > STTCS: + STF = Value(( (STSTO-STTCS) / (STG-STTCS) ) * 100.0) +else: + STF = Value(0) + +if VLSTO > VLTCS and VLG > VLTCS: + VLF = Value(( (VLSTO-VLTCS) / (VLG-VLTCS) ) * 100.0) +else: + VLF = Value(0) + +if LMSTO > LMTCS and LMG > LMTCS: + LMF = Value(( (LMSTO-LMTCS) / (LMG-LMTCS) ) * 100.0) +else: + LMF = Value(0) + +if BMSTO > BMTCS and BMG > BMTCS: + BMF = Value(( (BMSTO-BMTCS) / (BMG-BMTCS) ) * 100.0) +else: + BMF = Value(0) + +if PNSTO > PNTCS and PNG > PNTCS: + PNVF = Value(( (PNSTO-PNTCS) / (PNG-PNTCS) ) * 100.0) +else: + PNVF = Value(0) + +if RFSTO > RFTCS and RFG > RFTCS: + RFF = Value(( (RFSTO-RFTCS) / (RFG-RFTCS) ) * 100.0) +else: + RFF = Value(0) + +if RGSTO > RGTCS and RGG > RGTCS: + RGF = Value(( (RGSTO-RGTCS) / (RGG-RGTCS) ) * 100.0) +else: + RGF = Value(0) + if JRSTO > JRTCS and JRG > JRTCS: + JRF = Value(( (JRSTO-JRTCS) / (JRG-JRTCS) ) * 100.0) + else: + JRF = Value(0) + + if LDSTO > LDTCS and LDG > LDTCS: + LDF = Value(( (LDSTO-LDTCS) / (LDG-LDTCS) ) * 100.0) + else: + LDF = Value(0) + + if MDSTO > MDTCS and MDG > MDTCS: + MDF = Value(( (MDSTO-MDTCS) / (MDG-MDTCS) ) * 100.0) + else: + MDF = Value(0) + + +# UT/GRB inflows + RKPOUT = Value( + DBLOC="Rockport", + DBPTYP="Ave", + DBPAR="Flow-Res Out", + DBDUR="1DAY", + DBVER="Raw-USBRSLC", + DBUNITS="cfs", + TIME=BASDATE, + PICTURE="%7.0f", + MISSTR=" -NR-", + ) + ECHOUT = Value( + DBLOC="Echo", + ) + LSCOUT = Value( + DBLOC="Lost Cr", + ) + ESTOUT = Value( + DBLOC="East Canyon", + ) + PNVOUT = Value( + DBLOC="Pineview", + ) + LDLOUT = Value( + DBLOC="Little Dell", + DBVER="Raw-USBRSLC;MANUAL", + ) + MNDOUT = Value( + DBLOC="Mountain Dell", + ) + JRDOUT = Value( + DBLOC="Jordanelle", + DBVER="Raw-USBRSLC", + ) + RDFOUT = Value( + DBLOC="Red Fleet", + ) + STROUT = Value( + DBLOC="Starvation", + ) + PAOOUT = Value( + DBLOC="Paonia", + ) + BLMOUT = Value( + DBLOC="Blue Mesa", + ) + RDGOUT = Value( + DBLOC="Ridgway", + ) + LEMOUT = Value( + DBLOC="Lemon", + ) + VALOUT = Value( + DBLOC="Vallecito", + ) + # Define all INFLOWS + RKPIN = Value( + DBLOC="Rockport", + DBPAR="Flow-Res In", + TIME=BASDATE, + PICTURE="%7.0f", + MISSTR=" -NR-", + ) + ECHIN = Value( + DBLOC="Echo", + ) + LSCIN = Value( + DBLOC="Lost Cr", + ) + ESTIN = Value( + DBLOC="East Canyon", + ) + PNVIN = Value( + DBLOC="Pineview", + ) + LDLIN = Value( + DBLOC="Little Dell", + DBVER="Raw-USBRSLC;MANUAL", + ) + MNDIN = Value( + DBLOC="Mountain Dell", + ) + JRDIN = Value( + DBLOC="Jordanelle", + DBVER="Raw-USBRSLC", + ) + RDFIN = Value( + DBLOC="Red Fleet", + ) + STRIN = Value( + DBLOC="Starvation", + ) + PAOIN = Value( + DBLOC="Paonia", + ) + BLMIN = Value( + DBLOC="Blue Mesa", + ) + RDGIN = Value( + DBLOC="Ridgway", + ) + LEMIN = Value( + DBLOC="Lemon", + ) + VALIN = Value( + DBLOC="Vallecito", + ) +#ENDDEF diff --git a/tests/spk/expect/i-ucb b/tests/spk/expect/i-ucb new file mode 100644 index 0000000..45c77bc --- /dev/null +++ b/tests/spk/expect/i-ucb @@ -0,0 +1,1107 @@ +#FORM + Corps of Engineers Reservoir Report for Upper Colorado Basin Reservoirs + Data Ending 2400 hours %BASDATE + Report Generated %CTM + + Pool Storage + Elev Storage Change Outflow Inflow + (ft-msl) (acft) (acft) (cfs) (cfs) + + Paonia: %PAOELEV %PAOSTOR %PAOSDEL %PAOOUT %PAOIN + + Blue Mesa: %BLMELEV %BLMSTOR %BLMSDEL %BLMOUT %BLMIN + + Vallecito: %VALELEV %VALSTOR %VALSDEL %VALOUT %VALIN + + Lemon: %LEMELEV %LEMSTOR %LEMSDEL %LEMOUT %LEMIN + + Ridgway: %RDGELEV %RDGSTOR %RDGSDEL %RDGOUT %RDGIN + + Starvation: %STRELEV %STRSTOR %STRSDEL %STROUT %STRIN + + Red Fleet: %RDFELEV %RDFSTOR %RDFSDEL %RDFOUT %RDFIN + _______________________________________________________________________________ + Miscellaneous Flows %FDATE + Daily Daily Daily + Average(cfs) Max(cfs) Min(cfs) + Paonia: + Muddy Creek near Paonia %MAQR %MAQX %MAQN + N Fork Gunnison near Somerset %NGQR %NGQX %NGQN + + Blue Mesa: + Taylor below Taylor Park Res. %TYQR %TYQX %TYQN + East at Almont %EAQR %EAQX %EAQN + Taylor at Almont %TAQR %TAQX %TAQN + Gunnison near Gunnison %GUQR %GUQX %GUQN + Gunnison at Delta %CCQR %CCQX %CCQN + Colorado near Stateline %STQR %STQX %STQN + Gunnison below Gunnison Tunnel %GBQR %GBQX %GBQN + Gunnison near Grand Junction %GJQR %GJQX %GJQN + + Vallecito: + Vallecito near Bayfield %VCQR %VCQX %VCQN + Los Pinos near Ignacio %PIQR %PIQX %PIQN + + Lemon: + + Ridgway: + Uncompahgre near Ridgway %UAQR %UAQX %UAQN + Uncompahgre below Ridgway %UBQR %UBQX %UBQN + Uncompahgre at Coloma %UCQR %UCQX %UCQN + Uncompahgre near Delta %URQR %URQX %URQN + Dallas Creek near Ridgeway %DAQR %DAQX %DAQN + + Starvation: + Strawberry at Pinnacles %SPQR %SPQX %SPQN + Currant Cr near Fruitland %CFQR %CFQX %CFQN + Strawberry near Duchesne %SDQR %SDQX %SDQN + Duchesne near Tabiona %DTQR %DTQX %DTQN + Rock Cr near Mountain Home %RMQR %RMQX %RMQN + +Red Fleet: + Big Brush Cr above Red Fleet %BRQR %BRQX %BRQN + Green River near Jensen %GRQR %GRQX %GRQN + + *** ALL DATA PROVIDED BY USBR SALT LAKE CITY & USGS *** + + SNOTEL Data for Sites above Section 7 Reservoirs + Data Ending 2400 hours %BASDATE + Report Generated %CTM + + 24 Hour Change + Accumulated Snow Ending %FDATE + (weqv-inch) date @ time (weqv-inch) + Paonia: + North Lost Trial %SMH %DSMH %SMHI + McClure Pass %BCD %DBCD %BCDI + Park Reservoir %PPP %DPPP %PPPI + Overland Reservoir %OVR %DOVR %OVRI + + Blue Mesa: + Butte %CC1 %DCC1 %CC1I + Park Cone %CC2 %DCC2 %CC2I + Porphyry Creek %PRC %DPRC %PRCI + Slumgullion %SLG %DSLG %SLGI + Columbine %CLB %DCLB %CLBI + Mesa Lake %MSL %DMSL %MSLI + + Vallecito: + Vallecito %PCS %DPCS %PCSI + Beartown %BRT %DBRT %BRTI + Chamita %CHA %DCHA %CHAI + Hopewell %HPW %DHPW %HPWI + Middle Cr %MDL %DMDL %MDLI + Upper Rio Grande %URG %DURG %URGI + + Lemon: + Cascade %BLP %DBLP %BLPI + Mineral Creek %BLT %DBLT %BLTI + Molas Lake %DBP %DDBP %DBPI + Red Mountain Pass %RMP %DRMP %RMPI + Spud Mountain %SPU %DSPU %SPUI + Cumbres Trestle %CUM %DCUM %CUMI + Lone Cone %LNC %DLNC %LNCI + Wolf Creek Summit %WCS %DWCS %WCSI + + Ridgway: + Idarando %IDA %DIDA %IDAI + Columbine Pass %COL %DCOL %COLI + El Diente Peak %EDP %DEDP %EDPI + Lizzard Head %LZH %DLZH %LZHI + Scotch Creek %STC %DSTC %STCI + + Starvation: + Strawberry Divide %STD %DSTD %STDI + Daniels-Strawberry %DAN %DDAN %DANI + Currant Creek %CUC %DCUC %CUCI + Indian Canyon %IND %DIND %INDI + + Red Fleet: + Kings Cabin %CAB %DCAB %CABI + Mosby Mountain %MOS %DMOS %MOSI + Hayden Fork %HFK %DHFK %HFKI + Monte Cristo %MCR %DMCR %MCRI + Trout Creek %TRC %DTRC %TRCI + + *** ALL DATA PROVIDED BY NRCS *** + +#ENDFORM +# Set TABS to 18,35,50,65 +# Generated with dateutil.relativedelta support. +#DEF +# !ECHO +Value.shared["missing"] = "EXACT" +CTM.picture = "%d %b %Y @ %K%M" +Value.shared["picture"] = "%d %b %Y @ %K%M" +BASDATE.value = BASDATE.value.replace(hour=0,minute=0,second=0,microsecond=0) + timedelta(days=1) # Add a day to offset setting the time to 00, instead of 24 +BASDATE.picture = "%d %b %Y" +Value.shared["picture"] = "%d %b %Y" +FDATE = Value(BASDATE, + PICTURE="%m/%d/%y", +) +# Define all ELEVATIONS +PAOELEV = Value( + dbtype="radar", + DBTZ="MST7MDT", + DBLOC="Paonia", + DBPAR="Elev", + DBPTYP="Inst", + DBINT="~1Day", + DBDUR=0, + DBVER="Raw-USBRSLC", + TIME=BASDATE, + PICTURE="%7.2f", + MISSTR=" -NR-", + UNDEF=" -NR-", + DBUNITS="ft", +) +#A=MUDDY CR B=PAONIA C=ELEV E=1DAY F= +BLMELEV = Value( + DBLOC="Blue Mesa", +) +#A=GUNNISON B=BLUE MESA +VALELEV = Value( + DBLOC="Vallecito", +) +#A=LOS PINOS B=VALLECITO +LEMELEV = Value( + DBLOC="Lemon", +) +#A=FLORIDA B=LEMON +RDGELEV = Value( + DBLOC="Ridgway", +) +#A=UNCOMPAHGRE B=RIDGWAY +RDFELEV = Value( + DBLOC="Red Fleet", +) +#A=BRUSH CR B=RED FLEET +STRELEV = Value( + DBLOC="Starvation", +) +#A=STRAWBERRY B=STARVATION +## Define all STORAGES +PAOSTRS = Value( + DBLOC="Paonia", + DBPAR="Stor", + DBVER="Rev-USBRSLC", + STIME=BASDATE-timedelta(days=35), + ETIME=BASDATE, + PICTURE="%7.0f", + MISSTR=" -NR-", + DBUNITS="ac-ft", +) +#A=MUDDY CR B=PAONIA C=STOR-RES EOP E=1DAY F= +BLMSTRS = Value( + DBLOC="Blue Mesa", +) +#A=GUNNISON B=BLUE MESA +VALSTRS = Value( + DBLOC="Vallecito", +) +#A=LOS PINOS B=VALLECITO +LEMSTRS = Value( + DBLOC="Lemon", + DBVER="Rev-USBRSLC", +) +#A=FLORIDA B=LEMON +RDGSTRS = Value( + DBLOC="Ridgway", +) +#A=UNCOMPAHGRE B=RIDGWAY +RDFSTRS = Value( + DBLOC="Red Fleet", +) +#A=BRUSH CR B=RED FLEET +STRSTRS = Value( + DBLOC="Starvation", +) +#A=STRAWBERRY B=STARVATION +## +PAOSTOR = Value(PAOSTRS.last()) +BLMSTOR = Value(BLMSTRS.last()) +VALSTOR = Value(VALSTRS.last()) +LEMSTOR = Value(LEMSTRS.last()) +RDGSTOR = Value(RDGSTRS.last()) +RDFSTOR = Value(RDFSTRS.last()) +STRSTOR = Value(STRSTRS.last()) +## Define all STORAGE CHANGES +PAOSDEL = Value(PAOSTOR-PAOSTRS[BASDATE-timedelta(days=1)]) +BLMSDEL = Value(BLMSTOR-BLMSTRS[BASDATE-timedelta(days=1)]) +VALSDEL = Value(VALSTOR-VALSTRS[BASDATE-timedelta(days=1)]) +LEMSDEL = Value(LEMSTOR-LEMSTRS[BASDATE-timedelta(days=1)]) +RDGSDEL = Value(RDGSTOR-RDGSTRS[BASDATE-timedelta(days=1)]) +RDFSDEL = Value(RDFSTOR-RDFSTRS[BASDATE-timedelta(days=1)]) +STRSDEL = Value(STRSTOR-STRSTRS[BASDATE-timedelta(days=1)]) +## Define all OUTFLOWS +PAOOUT = Value( + TIME=BASDATE, + PICTURE="%7.0f", + MISSTR=" -NR-", + DBLOC="Paonia", + DBPAR="Flow-Res Out", + DBPTYP="Ave", + DBINT="~1Day", + DBDUR="1Day", + DBVER="Raw-USBRSLC", + DBUNITS="cfs", +) +#FILE=/dat0/rtsc7db.dss TYPE=DSS +#A=MUDDY CR B=PAONIA C=FLOW-RES OUT E=1DAY F= +BLMOUT = Value( + DBLOC="Blue Mesa", +) +#A=GUNNISON B=BLUE MESA +VALOUT = Value( + DBLOC="Vallecito", +) +#A=LOS PINOS B=VALLECITO +LEMOUT = Value( + DBLOC="Lemon", +) +#A=FLORIDA B=LEMON +RDGOUT = Value( + DBLOC="Ridgway", +) +#A=UNCOMPAHGRE B=RIDGWAY +RDFOUT = Value( + DBLOC="Red Fleet", +) +#A=BRUSH CR B=RED FLEET +STROUT = Value( + DBLOC="Starvation", +) +#A=STRAWBERRY B=STARVATION +## Define all INFLOWS +PAOIN = Value( + DBLOC="Paonia", + DBPAR="Flow-Res In", + TIME=BASDATE, + PICTURE="%7.0f", + MISSTR=" -NR-", +) +#FILE=/dat0/rtsc7db.dss TYPE=DSS +#A=MUDDY CR B=PAONIA C=FLOW-RES IN E=1DAY F= +BLMIN = Value( + DBLOC="Blue Mesa", +) +#A=GUNNISON B=BLUE MESA +VALIN = Value( + DBLOC="Vallecito", +) +#A=LOS PINOS B=VALLECITO +LEMIN = Value( + DBLOC="Lemon", +) +#A=FLORIDA B=LEMON +RDGIN = Value( + DBLOC="Ridgway", +) +#A=UNCOMPAHGRE B=RIDGWAY +RDFIN = Value( + DBLOC="Red Fleet", +) +#A=BRUSH CR B=RED FLEET +STRIN = Value( + DBLOC="Starvation", +) +#A=STRAWBERRY B=STARVATION +## +## +## Define Daily Flow +## +## +## +MAQR = Value( + DATE=BASDATE+timedelta(hours=7), + missing="NOMISS", + DBLOC="Muddy Cr-abv Paonia Res", + DBPAR="Flow", + DBVER="Calc-usgs", + PICTURE="%8.0f", + MISSTR=" -NR-", +) +#FILE=/dat0/rtsc7db.dss TYPE=DSS +#A=MUDDY CR B=NR PAONIA C=FLOW E=1DAY F= +NGQR = Value( + DBLOC="NF Gunnison-nr Somerset", +) +#A=NF GUNNISON B=NR SOMERSET +TYQR = Value( + DBLOC="Taylor Park", +) +#A=TAYLOR B=BLW TAYLOR PARK +EAQR = Value( + DBLOC="East R-Almont", +) +#A=EAST B=AT ALMONT +TAQR = Value( + DBLOC="Taylor R-Almont", +) +#A=TAYLOR B=AT ALMONT +GUQR = Value( + DBLOC="Gunnison R-nr Gunnison", +) +#A=GUNNISON B=NR GUNNISON +CCQR = Value( + DBLOC="Gunnison R-at Delta", +) +#A=GUNNISON B=AT DELTA +STQR = Value( + DBLOC="Colorado R-nr CO-UT State Line", +) +#A=COLORADO B=NR STATELINE +GBQR = Value( + DBLOC="Gunnison R-blw Gunnison Tunnel", +) +#A=GUNNISON B=BLW GUNNISON TUN +GJQR = Value( + DBLOC="Gunnison R-nr Grand Junction", +) +#A=GUNNISON B=NR GRAND JCT +UAQR = Value( + DBLOC="Uncompahgre R-Nr Ridgway", +) +#A=UNCOMPAHGRE B=NR RIDGEWAY +UBQR = Value( + DBLOC="Ridgway", +) +#A=UNCOMPAHGRE B=BLW RIDGWAY +UCQR = Value( + DBLOC="Uncompahgre R-at Colona", +) +#A=UNCOMPAHGRE B=AT COLOMA +URQR = Value( + DBLOC="Uncompahgre R-at Delta", +) +#A=UNCOMPAHGRE B=NR DELTA +DAQR = Value( + DBLOC="Dallas Cr-nr Ridgway", +) +#A=DALLAS CR B=NR RIDGEWAY +VCQR = Value( + DBLOC="Vallecito-nr Bayfield", +) +PIQR = Value( + DBLOC="Los Pinos R-nr Ignacio", +) +BRQR = Value( + DBLOC="Big Brush Cr-abv Red Fleet Res", +) +GRQR = Value( + DBLOC="Green R-nr Jensen", +) +SPQR = Value( + DBLOC="Strawberry R-Pinnacles nr Fruitland", +) +CFQR = Value( + DBLOC="Currant Cr-nr Fruitland", +) +SDQR = Value( + DBLOC="Strawberry R-nr Duchesne", +) +DTQR = Value( + DBLOC="Duchesne R-nr Tabiona", +) +RMQR = Value( + DBLOC="Rock Cr-nr Mountain Home", +) +## +## +## +## Define Daily Maximum Flow +## +## +## +MAQX = Value( + DATE=BASDATE+timedelta(hours=7), + missing="NOMISS", + DBLOC="Muddy Cr-abv Paonia Res", + DBPTYP="Max", + PICTURE="%8.0f", + MISSTR=" -NR-", +) +#FILE=/dat0/rtsc7db.dss TYPE=DSS +#A=MUDDY CR B=NR PAONIA C=FLOW MAX E=1DAY F= +#%MDQX +#A=MUDDY CR B=NR SOMERSET +NGQX = Value( + DBLOC="NF Gunnison-nr Somerset", +) +#A=NF GUNNISON B=NR SOMERSET +TYQX = Value( + DBLOC="Taylor Park", +) +#A=TAYLOR B=BLW TAYLOR PARK +EAQX = Value( + DBLOC="East R-Almont", +) +#A=EAST B=AT ALMONT +TAQX = Value( + DBLOC="Taylor R-Almont", +) +#A=TAYLOR B=AT ALMONT +GUQX = Value( + DBLOC="Gunnison R-nr Gunnison", +) +#A=GUNNISON B=NR GUNNISON +CCQX = Value( + DBLOC="Gunnison R-at Delta", +) +#A=GUNNISON B=AT DELTA +STQX = Value( + DBLOC="Colorado R-nr CO-UT State Line", +) +#A=COLORADO B=NR STATELINE +GBQX = Value( + DBLOC="Gunnison R-blw Gunnison Tunnel", +) +#A=GUNNISON B=BLW GUNNISON TUN +GJQX = Value( + DBLOC="Gunnison R-nr Grand Junction", +) +#A=GUNNISON B=NR GRAND JCT +#%GDQX +#A=GUNNISON B=TUN DIV S CANAL +#%LPQX +#A=LOS PINOS B=NR BAYFIELD +#%FAQX +#A=FLORIDA B=ABV LEMON +#%FBQX +#A=FLORIDA B=BLW LEMON +UAQX = Value( + DBLOC="Uncompahgre R-Nr Ridgway", +) +#A=UNCOMPAHGRE B=NR RIDGEWAY +UBQX = Value( + DBLOC="Ridgway", +) +#A=UNCOMPAHGRE B=BLW RIDGWAY +UCQX = Value( + DBLOC="Uncompahgre R-at Colona", +) +#A=UNCOMPAHGRE B=AT COLOMA +URQX = Value( + DBLOC="Uncompahgre R-at Delta", +) +#A=UNCOMPAHGRE B=NR DELTA +#%UNQX +#A=UNCOMPAHGRE B=NR OLATHE +DAQX = Value( + DBLOC="Dallas Cr-nr Ridgway", +) +#A=DALLAS CR B=NR RIDGEWAY +VCQX = Value( + DBLOC="Vallecito-nr Bayfield", +) +PIQX = Value( + DBLOC="Los Pinos R-nr Ignacio", +) +BRQX = Value( + DBLOC="Big Brush Cr-abv Red Fleet Res", +) +GRQX = Value( + DBLOC="Green R-nr Jensen", +) +SPQX = Value( + DBLOC="Strawberry R-Pinnacles nr Fruitland", +) +CFQX = Value( + DBLOC="Currant Cr-nr Fruitland", +) +SDQX = Value( + DBLOC="Strawberry R-nr Duchesne", +) +DTQX = Value( + DBLOC="Duchesne R-nr Tabiona", +) +RMQX = Value( + DBLOC="Rock Cr-nr Mountain Home", +) +## +## +## Define Daily Minimum Flow +## +## +## +## +MAQN = Value( + DATE=BASDATE+timedelta(hours=7), + missing="NOMISS", + DBLOC="Muddy Cr-abv Paonia Res", + DBPTYP="Min", + PICTURE="%8.0f", + MISSTR=" -NR-", +) +#FILE=/dat0/rtsc7db.dss TYPE=DSS +#A=MUDDY CR B=NR PAONIA C=FLOW MIN E=1DAY F= +#%MDQN +#A=MUDDY CR B=NR SOMERSET +NGQN = Value( + DBLOC="NF Gunnison-nr Somerset", +) +#A=NF GUNNISON B=NR SOMERSET +TYQN = Value( + DBLOC="Taylor Park", +) +#A=TAYLOR B=BLW TAYLOR PARK +EAQN = Value( + DBLOC="East R-Almont", +) +#A=EAST B=AT ALMONT +TAQN = Value( + DBLOC="Taylor R-Almont", +) +#A=TAYLOR B=AT ALMONT +GUQN = Value( + DBLOC="Gunnison R-nr Gunnison", +) +#A=GUNNISON B=NR GUNNISON +CCQN = Value( + DBLOC="Gunnison R-at Delta", +) +#A=GUNNISON B=AT DELTA +STQN = Value( + DBLOC="Colorado R-nr CO-UT State Line", +) +#A=COLORADO B=NR STATELINE +GBQN = Value( + DBLOC="Gunnison R-blw Gunnison Tunnel", +) +#A=GUNNISON B=BLW GUNNISON TUN +GJQN = Value( + DBLOC="Gunnison R-nr Grand Junction", +) +#A=GUNNISON B=NR GRAND JCT +#%GDQN +#A=GUNNISON B=TUN DIV S CANAL +#%LPQN +#A=LOS PINOS B=NR BAYFIELD +#%FAQN +#A=FLORIDA B=ABV LEMON +#%FBQN +#A=FLORIDA B=BLW LEMON +UAQN = Value( + DBLOC="Uncompahgre R-Nr Ridgway", +) +#A=UNCOMPAHGRE B=NR RIDGEWAY +UBQN = Value( + DBLOC="Ridgway", +) +#A=UNCOMPAHGRE B=BLW RIDGWAY +UCQN = Value( + DBLOC="Uncompahgre R-at Colona", +) +#A=UNCOMPAHGRE B=AT COLOMA +URQN = Value( + DBLOC="Uncompahgre R-at Delta", +) +#A=UNCOMPAHGRE B=NR DELTA +#%UNQN +#A=UNCOMPAHGRE B=NR OLATHE +DAQN = Value( + DBLOC="Dallas Cr-nr Ridgway", +) +#A=DALLAS CR B=NR RIDGEWAY +VCQN = Value( + DBLOC="Vallecito-nr Bayfield", +) +PIQN = Value( + DBLOC="Los Pinos R-nr Ignacio", +) +BRQN = Value( + DBLOC="Big Brush Cr-abv Red Fleet Res", +) +GRQN = Value( + DBLOC="Green R-nr Jensen", +) +SPQN = Value( + DBLOC="Strawberry R-Pinnacles nr Fruitland", +) +CFQN = Value( + DBLOC="Currant Cr-nr Fruitland", +) +SDQN = Value( + DBLOC="Strawberry R-nr Duchesne", +) +DTQN = Value( + DBLOC="Duchesne R-nr Tabiona", +) +RMQN = Value( + DBLOC="Rock Cr-nr Mountain Home", +) +## +## +## +## +## +## Define SNOTEL WEQV @ or before 0700 +# +SMH = Value( + TIME=BASDATE, + missing="NOMISS", + PICTURE="%8.1f", + MISSTR=" -NR-", + DBLOC="North Lost Trail", + DBPAR="Depth-SWE", + DBPTYP="Inst", + DBINT="1Hour", + DBDUR=0, + DBVER="NRCS-raw", + DBUNITS="in", +) +#FILE=/dat0/slcdcol.dss TYPE=DSS +#A=COLORADO B=NORTH LOST TRAIL C=SNOW-WEQV E=IR-MONTH F= +BCD = Value( + DBLOC="Mc Clure Pass", +) +#A=GUNNISON B=MCCLURE +CC1 = Value( + DBLOC="Butte Snow Gage", +) +#A=GUNNISON B=BUTTE +CC2 = Value( + DBLOC="Park Cone", +) +#A=GUNNISON B=PARK CONE +PCS = Value( + DBLOC="Vallecito", +) +#A=LOS PINOS B=VALLECITO +BLP = Value( + DBLOC="Cascade #2", +) +#A=ANIMAS B=CASCADE +BLT = Value( + DBLOC="Mineral Cr", +) +#A=ANIMAS B=MINERAL CR +DBP = Value( + DBLOC="Molas Lake", +) +#A=ANIMAS B=MOLAS LAKE +PPP = Value( + DBLOC="Park Reservoir", +) +#A=GUNNISON B=PARK +PRC = Value( + DBLOC="Porphyry Cr", +) +#A=GUNNISON B=PORPHYRY CR +SLG = Value( + DBLOC="Slumgullion", +) +#A=GUNNISON B=SLUMGULLION +BRT = Value( + DBLOC="Beartown", +) +#A=RIO GRANDE B=BEARTOWN +RMP = Value( + DBLOC="Red MountainPass", +) +#A=ANIMAS B=RED MTN PASS +SPU = Value( + DBLOC="Spud Mountain", +) +#A=ANIMAS B=SPUD MTN +IDA = Value( + DBLOC="Idarado", +) +#A=GUNNISON B=IDARANDO +COL = Value( + DBLOC="Columbine Pass", +) +#A=GUNNISON B=COLUMBINE +STD = Value( + DBLOC="StrawberryDivide", +) +#A=UINTAH B=STRAWBERRY DIV +DAN = Value( + DBLOC="Daniels-Strawberry", +) +#A=UINTAH B=DANIELS-STRWBERY +CUC = Value( + DBLOC="Currant Cr", +) +#A=UINTAH B=CURRANT CR +IND = Value( + DBLOC="Indian Canyon", +) +#A=UINTAH B=INDIAN CANYON +OVR = Value( + DBLOC="Overland Res", +) +#A=GUNNISON B=OVERLAND +CAB = Value( + DBLOC="Kings Cabin", +) +#A=UINTAH B=KINGS CABIN +MOS = Value( + DBLOC="Mosby Mountain", +) +#A=UINTAH B=MOSBY MTN +CLB = Value( + DBLOC="Columbine", +) +#A=GUNNISON B=COLUMBINE +MSL = Value( + DBLOC="Mesa Lake", +) +#A=GUNNISON B=MESA LAKE +CHA = Value( + DBLOC="Chamita", +) +#A=SAN JUAN B=CHAMITA +HPW = Value( + DBLOC="Hopewell", +) +#A=RIO CHAMA B=HOPEWELL +MDL = Value( + DBLOC="Middle Cr", +) +#A=RIO GRANDE B=MIDDLE DR +URG = Value( + DBLOC="Upper Rio Grande", +) +#A=RIO GRANDE B=UPPER RIO GRANDE +CUM = Value( + DBLOC="Cumbres Trestle", +) +#A=SAN JUAN B=CUMBRES TRESTLE +LNC = Value( + DBLOC="Lone Cone", +) +#A=SAN MIGUEL B=LONE CONE +WCS = Value( + DBLOC="Wolf Cr Summit", +) +#A=SAN JUAN B=WOLF CR SUMMIT +EDP = Value( + DBLOC="El Diente Peak", +) +#A=DOLORES B=EL DIENTE PEAK +LZH = Value( + DBLOC="Lizard Head", +) +#A=DOLORES B=LIZZARD HEAD +STC = Value( + DBLOC="Scotch Cr", +) +#A=DOLORES B=SCOTCH CR +HFK = Value( + DBLOC="Hayden Fork", +) +#A=BEAR B=HAYDEN FORK +MCR = Value( + DBLOC="Monte Cristo", +) +#A=BEAR B=MONTE CRISTO +TRC = Value( + DBLOC="Trout Cr", +) +#A=GREEN B=TROUT CR +# +## +# +DMOS = Value(MOS.datatimes(), + PICTURE="%d%b%Y @ %K:%M", +) +DOVR = Value(OVR.datatimes()) +DSMH = Value(SMH.datatimes()) +DBCD = Value(BCD.datatimes()) +DCC1 = Value(CC1.datatimes()) +DCC2 = Value(CC2.datatimes()) +DPCS = Value(PCS.datatimes()) +DBLP = Value(BLP.datatimes()) +DDBP = Value(DBP.datatimes()) +DBLT = Value(BLT.datatimes()) +DPPP = Value(PPP.datatimes()) +DPRC = Value(PRC.datatimes()) +DSLG = Value(SLG.datatimes()) +DBRT = Value(BRT.datatimes()) +DRMP = Value(RMP.datatimes()) +DSPU = Value(SPU.datatimes()) +DIDA = Value(IDA.datatimes()) +DCOL = Value(COL.datatimes()) +DSTD = Value(STD.datatimes()) +DDAN = Value(DAN.datatimes()) +DCUC = Value(CUC.datatimes()) +DIND = Value(IND.datatimes()) +DCAB = Value(CAB.datatimes()) +DCLB = Value(CLB.datatimes()) +DMSL = Value(MSL.datatimes()) +DCHA = Value(CHA.datatimes()) +DHPW = Value(HPW.datatimes()) +DMDL = Value(MDL.datatimes()) +DURG = Value(URG.datatimes()) +DCUM = Value(CUM.datatimes()) +DLNC = Value(LNC.datatimes()) +DWCS = Value(WCS.datatimes()) +DEDP = Value(EDP.datatimes()) +DLZH = Value(LZH.datatimes()) +DSTC = Value(STC.datatimes()) +DHFK = Value(HFK.datatimes()) +DMCR = Value(MCR.datatimes()) +DTRC = Value(TRC.datatimes()) +# +## Define SNOTEL INCREMENTAL WEQV +# +SMHSWES = Value( + DBLOC="North Lost Trail", + DBPAR="Depth-SWE", + DBVER="NRCS-raw", + STIME=BASDATE-timedelta(days=7), + ETIME=BASDATE, + PICTURE="%7.1f", + MISSTR=" -NR-", + DBUNITS="in", +) +#FILE=/dat0/slcdcol.dss TYPE=DSS +#A=COLORADO B=NORTH LOST TRAIL C=SNOW-WEQV INC E=1DAY F= +BCDSWES = Value( + DBLOC="Mc Clure Pass", +) +#A=GUNNISON B=MCCLURE +CC1SWES = Value( + DBLOC="Butte Snow Gage", +) +#A=GUNNISON B=BUTTE +CC2SWES = Value( + DBLOC="Park Cone", +) +#A=GUNNISON B=PARK CONE +PCSSWES = Value( + DBLOC="Vallecito", +) +#A=LOS PINOS B=VALLECITO +BLPSWES = Value( + DBLOC="Cascade #2", +) +#A=ANIMAS B=CASCADE +BLTSWES = Value( + DBLOC="Mineral Cr", +) +#A=ANIMAS B=MINERAL CR +DBPSWES = Value( + DBLOC="Molas Lake", +) +#A=ANIMAS B=MOLAS LAKE +PPPSWES = Value( + DBLOC="Park Reservoir", +) +#A=GUNNISON B=PARK +PRCSWES = Value( + DBLOC="Porphyry Cr", +) +#A=GUNNISON B=PORPHYRY CR +SLGSWES = Value( + DBLOC="Slumgullion", +) +#A=GUNNISON B=SLUMGULLION +BRTSWES = Value( + DBLOC="Beartown", +) +#A=RIO GRANDE B=BEARTOWN +RMPSWES = Value( + DBLOC="Red MountainPass", +) +#A=ANIMAS B=RED MTN PASS +SPUSWES = Value( + DBLOC="Spud Mountain", +) +#A=ANIMAS B=SPUD MTN +IDASWES = Value( + DBLOC="Idarado", +) +#A=GUNNISON B=IDARANDO +COLSWES = Value( + DBLOC="Columbine Pass", +) +#A=GUNNISON B=COLUMBINE +STDSWES = Value( + DBLOC="StrawberryDivide", +) +#A=UINTAH B=STRAWBERRY DIV +DANSWES = Value( + DBLOC="Daniels-Strawberry", +) +#A=UINTAH B=DANIELS-STRWBERY +CUCSWES = Value( + DBLOC="Currant Cr", +) +#A=UINTAH B=CURRANT CR +INDSWES = Value( + DBLOC="Indian Canyon", +) +#A=UINTAH B=INDIAN CANYON +OVRSWES = Value( + DBLOC="Overland Res", +) +#A=GUNNISON B=OVERLAND +CABSWES = Value( + DBLOC="Kings Cabin", +) +#A=UINTAH B=KINGS CABIN +MOSSWES = Value( + DBLOC="Mosby Mountain", +) +#A=UINTAH B=MOSBY MTN +CLBSWES = Value( + DBLOC="Columbine", +) +#A=GUNNISON B=COLUMBINE +MSLSWES = Value( + DBLOC="Mesa Lake", +) +#A=GUNNISON B=MESA LAKE +CHASWES = Value( + DBLOC="Chamita", +) +#A=SAN JUAN B=CHAMITA +HPWSWES = Value( + DBLOC="Hopewell", +) +#A=RIO CHAMA B=HOPEWELL +MDLSWES = Value( + DBLOC="Middle Cr", +) +#A=RIO GRANDE B=MIDDLE DR +URGSWES = Value( + DBLOC="Upper Rio Grande", +) +#A=RIO GRANDE B=UPPER RIO GRANDE +CUMSWES = Value( + DBLOC="Cumbres Trestle", +) +#A=SAN JUAN B=CUMBRES TRESTLE +LNCSWES = Value( + DBLOC="Lone Cone", +) +#A=SAN MIGUEL B=LONE CONE +WCSSWES = Value( + DBLOC="Wolf Cr Summit", +) +#A=SAN JUAN B=WOLF CR SUMMIT +EDPSWES = Value( + DBLOC="El Diente Peak", +) +#A=DOLORES B=EL DIENTE PEAK +LZHSWES = Value( + DBLOC="Lizard Head", +) +#A=DOLORES B=LIZZARD HEAD +STCSWES = Value( + DBLOC="Scotch Cr", +) +#A=DOLORES B=SCOTCH CR +HFKSWES = Value( + DBLOC="Hayden Fork", +) +#A=BEAR B=HAYDEN FORK +MCRSWES = Value( + DBLOC="Monte Cristo", +) +#A=BEAR B=MONTE CRISTO +TRCSWES = Value( + DBLOC="Trout Cr", +) +#A=GREEN B=TROUT CR +# +#Define end value +SMHSWEE = Value(SMHSWES.last(), + UNDEF=" -NR-", + PICTURE="%7.1f", + MISSTR=" -NR-", +) +BCDSWEE = Value(BCDSWES.last()) +CC1SWEE = Value(CC1SWES.last()) +CC2SWEE = Value(CC2SWES.last()) +PCSSWEE = Value(PCSSWES.last()) +BLPSWEE = Value(BLPSWES.last()) +BLTSWEE = Value(BLTSWES.last()) +DBPSWEE = Value(DBPSWES.last()) +PPPSWEE = Value(PPPSWES.last()) +PRCSWEE = Value(PRCSWES.last()) +SLGSWEE = Value(SLGSWES.last()) +BRTSWEE = Value(BRTSWES.last()) +RMPSWEE = Value(RMPSWES.last()) +SPUSWEE = Value(SPUSWES.last()) +IDASWEE = Value(IDASWES.last()) +COLSWEE = Value(COLSWES.last()) +STDSWEE = Value(STDSWES.last()) +DANSWEE = Value(DANSWES.last()) +CUCSWEE = Value(CUCSWES.last()) +INDSWEE = Value(INDSWES.last()) +OVRSWEE = Value(OVRSWES.last()) +CABSWEE = Value(CABSWES.last()) +MOSSWEE = Value(MOSSWES.last()) +CLBSWEE = Value(CLBSWES.last()) +MSLSWEE = Value(MSLSWES.last()) +CHASWEE = Value(CHASWES.last()) +HPWSWEE = Value(HPWSWES.last()) +MDLSWEE = Value(MDLSWES.last()) +URGSWEE = Value(URGSWES.last()) +CUMSWEE = Value(CUMSWES.last()) +LNCSWEE = Value(LNCSWES.last()) +WCSSWEE = Value(WCSSWES.last()) +EDPSWEE = Value(EDPSWES.last()) +LZHSWEE = Value(LZHSWES.last()) +STCSWEE = Value(STCSWES.last()) +HFKSWEE = Value(HFKSWES.last()) +MCRSWEE = Value(MCRSWES.last()) +TRCSWEE = Value(TRCSWES.last()) +# +#Calculate 24 Hour Change +SMHI = Value(SMHSWEE - SMHSWES[BASDATE-timedelta(days=1)], + UNDEF=" -NR-", + PICTURE="%7.1f", + MISSTR=" -NR-", +) +BCDI = Value(BCDSWEE - BCDSWES[BASDATE-timedelta(days=1)]) +CC1I = Value(CC1SWEE - CC1SWES[BASDATE-timedelta(days=1)]) +CC2I = Value(CC2SWEE - CC2SWES[BASDATE-timedelta(days=1)]) +PCSI = Value(PCSSWEE - PCSSWES[BASDATE-timedelta(days=1)]) +BLPI = Value(BLPSWEE - BLPSWES[BASDATE-timedelta(days=1)]) +BLTI = Value(BLTSWEE - BLTSWES[BASDATE-timedelta(days=1)]) +DBPI = Value(DBPSWEE - DBPSWES[BASDATE-timedelta(days=1)]) +PPPI = Value(PPPSWEE - PPPSWES[BASDATE-timedelta(days=1)]) +PRCI = Value(PRCSWEE - PRCSWES[BASDATE-timedelta(days=1)]) +SLGI = Value(SLGSWEE - SLGSWES[BASDATE-timedelta(days=1)]) +BRTI = Value(BRTSWEE - BRTSWES[BASDATE-timedelta(days=1)]) +RMPI = Value(RMPSWEE - RMPSWES[BASDATE-timedelta(days=1)]) +SPUI = Value(SPUSWEE - SPUSWES[BASDATE-timedelta(days=1)]) +IDAI = Value(IDASWEE - IDASWES[BASDATE-timedelta(days=1)]) +COLI = Value(COLSWEE - COLSWES[BASDATE-timedelta(days=1)]) +STDI = Value(STDSWEE - STDSWES[BASDATE-timedelta(days=1)]) +DANI = Value(DANSWEE - DANSWES[BASDATE-timedelta(days=1)]) +CUCI = Value(CUCSWEE - CUCSWES[BASDATE-timedelta(days=1)]) +INDI = Value(INDSWEE - INDSWES[BASDATE-timedelta(days=1)]) +OVRI = Value(OVRSWEE - OVRSWES[BASDATE-timedelta(days=1)]) +CABI = Value(CABSWEE - CABSWES[BASDATE-timedelta(days=1)]) +MOSI = Value(MOSSWEE - MOSSWES[BASDATE-timedelta(days=1)]) +CLBI = Value(CLBSWEE - CLBSWES[BASDATE-timedelta(days=1)]) +MSLI = Value(MSLSWEE - MSLSWES[BASDATE-timedelta(days=1)]) +CHAI = Value(CHASWEE - CHASWES[BASDATE-timedelta(days=1)]) +HPWI = Value(HPWSWEE - HPWSWES[BASDATE-timedelta(days=1)]) +MDLI = Value(MDLSWEE - MDLSWES[BASDATE-timedelta(days=1)]) +URGI = Value(URGSWEE - URGSWES[BASDATE-timedelta(days=1)]) +CUMI = Value(CUMSWEE - CUMSWES[BASDATE-timedelta(days=1)]) +LNCI = Value(LNCSWEE - LNCSWES[BASDATE-timedelta(days=1)]) +WCSI = Value(WCSSWEE - WCSSWES[BASDATE-timedelta(days=1)]) +EDPI = Value(EDPSWEE - EDPSWES[BASDATE-timedelta(days=1)]) +LZHI = Value(LZHSWEE - LZHSWES[BASDATE-timedelta(days=1)]) +STCI = Value(STCSWEE - STCSWES[BASDATE-timedelta(days=1)]) +HFKI = Value(HFKSWEE - HFKSWES[BASDATE-timedelta(days=1)]) +MCRI = Value(MCRSWEE - MCRSWES[BASDATE-timedelta(days=1)]) +TRCI = Value(TRCSWEE - TRCSWES[BASDATE-timedelta(days=1)]) +# +## Define DAILY INCREMENTAL PRECIP +## %BLMPPT +## TIME=%BASDATE PICTURE=NNNNZ.ZZ MISSTR=" -NR-" +## FILE=/dat0/rtsc7db.dss TYPE=DSS +## A=GUNNISON B=BLUE MESA C=PRECIP-INC E=1DAY F= +## %VALPPT +## A=LOS PINOS B=VALLECITO +## %PAOPPT +## A=MUDDY CR B=PAONIA +#ENDDEF diff --git a/tests/testfiles/i-base.battery b/tests/spk/testfiles/i-base.battery similarity index 99% rename from tests/testfiles/i-base.battery rename to tests/spk/testfiles/i-base.battery index fbafbb1..cd5ff06 100644 --- a/tests/testfiles/i-base.battery +++ b/tests/spk/testfiles/i-base.battery @@ -105,4 +105,4 @@ UNDEF="????" # # -#ENDDEF +#ENDDEF \ No newline at end of file diff --git a/tests/testfiles/i-blb b/tests/spk/testfiles/i-blb similarity index 99% rename from tests/testfiles/i-blb rename to tests/spk/testfiles/i-blb index 985ea03..272ffb0 100644 --- a/tests/testfiles/i-blb +++ b/tests/spk/testfiles/i-blb @@ -453,4 +453,4 @@ UNDEF=" " STIME=%STIME ETIME=%ETIME %TIME = DATATIME(%FCST_T) PICTURE = ZDAAAZZZYBZZZT -#ENDDEF +#ENDDEF \ No newline at end of file diff --git a/tests/testfiles/i-resstat b/tests/spk/testfiles/i-resstat similarity index 99% rename from tests/testfiles/i-resstat rename to tests/spk/testfiles/i-resstat index cbe4842..c4c5d6f 100644 --- a/tests/testfiles/i-resstat +++ b/tests/spk/testfiles/i-resstat @@ -2819,4 +2819,3 @@ VALUE = EXACT %VALIN DBLOC=Vallecito #ENDDEF - diff --git a/tests/testfiles/i-ucb b/tests/spk/testfiles/i-ucb similarity index 99% rename from tests/testfiles/i-ucb rename to tests/spk/testfiles/i-ucb index 5152f1e..6476fd6 100644 --- a/tests/testfiles/i-ucb +++ b/tests/spk/testfiles/i-ucb @@ -868,4 +868,4 @@ UNDEF=" -NR-" PICTURE=NNNNZ.Z MISSTR=" -NR-" ## A=LOS PINOS B=VALLECITO ## %PAOPPT ## A=MUDDY CR B=PAONIA -#ENDDEF +#ENDDEF \ No newline at end of file diff --git a/tests/swt/actual/bulk_test.frm b/tests/swt/actual/bulk_test.frm new file mode 100644 index 0000000..7ae2bd0 --- /dev/null +++ b/tests/swt/actual/bulk_test.frm @@ -0,0 +1,29 @@ + Tulsa District + US Army Corps of Engineers + Elevation Fetch Example 8am to 8am +DATE ALTU ARBU ARCA BIGH BIRC BROK CANT CHEN COPA COUN DENI ELDR ELKC EUFA FALL FCOB FGIB FOSS FSUP GSAL HEYB HUDS HUGO HULA JOHN KAWL KEMP KEYS MARI MCGE MERE OOLO PATM PENS PINE SARD SKIA TENK THUN TOMS TORO WAUR WIST +20Jun2024 0800 1543.58 873.43 1006.08 857.95 750.07 602.38 1615.80 1415.68 710.66 1276.36 620.39 1337.65 796.08 586.48 948.96 1341.75 559.02 1640.90 2004.83 1125.14 761.49 620.22 404.92 733.62 1044.39 1010.78 1148.76 724.73 1351.01 578.12 2890.12 640.82 454.61 744.61 441.54 598.94 709.23 632.46 1039.76 1405.41 902.14 951.00 478.07 +20Jun2024 0900 1543.57 873.43 1006.08 857.94 750.06 602.38 1615.79 1415.67 710.66 1276.36 620.40 1337.64 796.08 586.47 948.96 1341.75 558.96 1640.90 2004.83 1125.17 761.49 620.31 404.87 733.63 1044.42 1010.79 1148.75 724.73 1351.02 578.12 2890.13 640.80 454.61 744.60 441.54 598.94 709.21 632.46 1039.76 1405.41 902.14 951.00 478.06 +20Jun2024 1000 1543.57 873.43 1006.08 857.95 750.06 602.38 1615.79 1415.67 710.65 1276.35 620.41 1337.64 796.08 586.47 948.95 1341.75 558.89 1640.90 2004.84 1125.23 761.49 620.42 404.83 733.63 1044.41 1010.78 1148.75 724.74 1351.02 578.11 2890.12 640.78 454.60 744.58 441.54 598.94 709.22 632.46 1039.76 1405.41 902.14 950.99 478.06 +20Jun2024 1100 1543.58 873.43 1006.08 857.95 750.06 602.38 1615.79 1415.67 710.66 1276.35 620.41 1337.64 796.08 586.47 948.96 1341.75 558.88 1640.90 2004.84 1125.23 761.49 620.45 404.78 733.63 1044.36 1010.79 1148.75 724.75 1351.03 578.11 2890.14 640.77 454.59 744.56 441.53 598.94 709.21 632.46 1039.75 1405.41 902.15 951.01 478.07 +20Jun2024 1200 1543.57 873.43 1006.08 857.95 750.06 602.38 1615.80 1415.67 710.66 1276.34 620.39 1337.64 796.08 586.46 948.96 1341.75 558.84 1640.90 2004.84 1125.22 761.49 620.34 404.77 733.63 1044.34 1010.78 1148.75 724.76 1351.03 578.12 2890.11 640.77 454.58 744.55 441.54 598.94 709.21 632.46 1039.75 1405.42 902.15 951.00 478.06 +20Jun2024 1300 1543.57 873.43 1006.08 857.95 750.06 602.37 1615.80 1415.67 710.66 1276.33 620.40 1337.64 796.08 586.46 948.96 1341.75 558.78 1640.89 2004.84 1125.23 761.48 620.26 404.74 733.63 1044.32 1010.78 1148.73 724.76 1351.04 578.11 2890.15 640.77 454.58 744.54 441.53 598.94 709.21 632.46 1039.76 1405.41 902.16 951.01 478.06 +20Jun2024 1400 1543.58 873.43 1006.07 857.95 750.06 602.33 1615.79 1415.67 710.67 1276.33 620.39 1337.65 796.08 586.46 948.96 1341.75 558.73 1640.89 2004.84 1125.19 761.48 620.13 404.72 733.63 1044.28 1010.76 1148.73 724.75 1351.03 578.11 2890.16 640.77 454.57 744.53 441.54 598.96 709.21 632.47 1039.76 1405.42 902.16 951.00 478.05 +20Jun2024 1500 1543.57 873.43 1006.07 857.94 750.05 602.29 1615.79 1415.67 710.66 1276.32 620.39 1337.64 796.08 586.44 948.96 1341.75 558.82 1640.89 2004.84 1125.17 761.48 619.98 404.68 733.63 1044.21 1010.72 1148.72 724.72 1351.03 578.11 2890.15 640.75 454.52 744.51 441.55 598.95 709.20 632.47 1039.75 1405.42 902.16 951.00 478.05 +20Jun2024 1600 1543.57 873.43 1006.07 857.94 750.05 602.25 1615.79 1415.67 710.67 1276.31 620.38 1337.64 796.08 586.42 948.96 1341.76 558.94 1640.89 2004.84 1125.18 761.48 619.85 404.67 733.63 1044.19 1010.69 1148.71 724.72 1351.03 578.11 2890.16 640.73 454.50 744.50 441.53 598.93 709.20 632.47 1039.75 1405.42 902.17 951.00 478.05 +20Jun2024 1700 1543.57 873.44 1006.07 857.95 750.05 602.23 1615.79 1415.66 710.66 1276.30 620.38 1337.64 796.08 586.41 948.96 1341.75 558.99 1640.88 2004.84 1125.13 761.48 619.73 404.65 733.63 1044.13 1010.66 1148.70 724.70 1351.03 578.12 2890.17 640.71 454.49 744.48 441.53 598.95 709.20 632.47 1039.75 1405.41 902.16 951.00 478.03 +20Jun2024 1800 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.66 710.65 1276.29 620.37 1337.63 796.08 586.41 948.96 1341.75 559.04 1640.89 2004.84 1125.15 761.48 619.61 404.65 733.63 1044.07 1010.64 1148.69 724.68 1351.03 578.11 2890.20 640.70 454.49 744.46 441.53 598.95 709.20 632.48 1039.75 1405.42 902.16 950.99 478.03 +20Jun2024 1900 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.65 710.66 1276.29 620.36 1337.64 796.08 586.39 948.95 1341.75 559.12 1640.89 2004.85 1125.12 761.48 619.46 404.66 733.63 1044.04 1010.61 1148.68 724.66 1351.04 578.11 2890.16 640.68 454.48 744.44 441.53 598.95 709.19 632.47 1039.75 1405.41 902.17 950.99 478.03 +20Jun2024 2000 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.65 710.65 1276.28 620.35 1337.63 796.08 586.40 948.96 1341.74 559.20 1640.89 2004.85 1125.15 761.48 619.65 404.65 733.63 1043.99 1010.60 1148.68 724.64 1351.04 578.11 2890.16 640.68 454.47 744.42 441.53 598.94 709.19 632.47 1039.75 1405.41 902.18 950.99 478.03 +20Jun2024 2100 1543.56 873.44 1006.07 857.94 750.05 602.22 1615.79 1415.66 710.66 1276.27 620.34 1337.63 796.08 586.41 948.96 1341.74 559.26 1640.88 2004.85 1125.19 761.48 619.64 404.66 733.64 1043.96 1010.59 1148.68 724.65 1351.05 578.11 2890.16 640.67 454.46 744.41 441.54 598.94 709.22 632.47 1039.75 1405.41 902.18 950.99 478.04 +20Jun2024 2200 1543.57 873.44 1006.06 857.93 750.05 602.21 1615.79 1415.66 710.66 1276.26 620.33 1337.63 796.08 586.39 948.96 1341.74 559.29 1640.89 2004.85 1125.18 761.48 619.73 404.65 733.64 1043.92 1010.60 1148.67 724.65 1351.05 578.11 2890.15 640.65 454.45 744.39 441.54 598.94 709.19 632.48 1039.75 1405.41 902.19 951.00 478.04 +20Jun2024 2300 1543.56 873.44 1006.07 857.93 750.05 602.20 1615.79 1415.66 710.66 1276.25 620.33 1337.64 796.08 586.37 948.96 1341.74 559.15 1640.88 2004.85 1125.16 761.48 619.86 404.64 733.64 1043.87 1010.60 1148.67 724.67 1351.05 578.11 2890.15 640.64 454.44 744.38 441.53 598.94 709.19 632.48 1039.75 1405.41 902.19 950.99 478.03 +20Jun2024 2400 1543.55 873.44 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.66 1276.24 620.33 1337.64 796.08 586.37 948.96 1341.74 559.03 1640.89 2004.85 1125.18 761.47 619.98 404.65 733.64 1043.83 1010.61 1148.66 724.68 1351.06 578.11 2890.15 640.62 454.43 744.36 441.53 598.94 709.19 632.48 1039.74 1405.41 902.19 950.99 478.03 +21Jun2024 0100 1543.56 873.43 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.66 1276.24 620.30 1337.63 796.08 586.37 948.96 1341.74 559.02 1640.88 2004.85 1125.18 761.47 620.06 404.65 733.64 1043.79 1010.62 1148.65 724.69 1351.06 578.10 2890.15 640.62 454.42 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.19 950.98 478.03 +21Jun2024 0200 1543.56 873.43 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.66 1276.23 620.31 1337.63 796.08 586.36 948.96 1341.74 559.03 1640.88 2004.85 1125.18 761.47 620.11 404.65 733.64 1043.74 1010.61 1148.65 724.70 1351.05 578.11 2890.15 640.60 454.41 744.43 441.54 598.94 709.18 632.48 1039.74 1405.41 902.20 950.99 478.02 +21Jun2024 0300 1543.57 873.43 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.66 1276.21 620.30 1337.63 796.08 586.35 948.96 1341.74 558.95 1640.89 2004.85 1125.18 761.47 620.00 404.66 733.64 1043.71 1010.62 1148.64 724.71 1351.06 578.10 2890.13 640.57 454.40 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.20 950.98 478.03 +21Jun2024 0400 1543.56 873.43 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.65 1276.21 620.32 1337.63 796.08 586.35 948.96 1341.74 558.86 1640.88 2004.84 1125.19 761.47 619.92 404.66 733.64 1043.68 1010.62 1148.63 724.72 1351.05 578.10 2890.13 640.56 454.39 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.21 950.99 478.02 +21Jun2024 0500 1543.56 873.43 1006.05 857.93 750.04 602.21 1615.79 1415.66 710.65 1276.19 620.31 1337.63 796.08 586.34 948.97 1341.74 558.79 1640.88 2004.84 1125.18 761.47 620.00 404.65 733.65 1043.63 1010.62 1148.63 724.73 1351.05 578.10 2890.11 640.56 454.38 744.40 441.54 598.94 709.18 632.48 1039.74 1405.40 902.21 950.98 478.02 +21Jun2024 0600 1543.56 873.42 1006.05 857.93 750.04 602.20 1615.79 1415.66 710.65 1276.18 620.32 1337.62 796.08 586.34 948.96 1341.73 558.76 1640.88 2004.84 1125.17 761.47 620.02 404.66 733.65 1043.60 1010.63 1148.62 724.74 1351.06 578.10 2890.12 640.53 454.37 744.39 441.53 598.94 709.19 632.48 1039.74 1405.40 902.21 950.98 478.02 +21Jun2024 0700 1543.56 873.42 1006.06 857.92 750.04 602.21 1615.79 1415.66 710.65 1276.18 620.31 1337.62 796.08 586.34 948.96 1341.74 558.74 1640.88 2004.84 1125.19 761.47 619.98 404.66 733.64 1043.54 1010.62 1148.61 724.74 1351.06 578.10 2890.12 640.54 454.36 744.41 441.54 598.94 709.18 632.48 1039.74 1405.40 902.22 950.98 478.02 +21Jun2024 0800 1543.56 873.42 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.65 1276.16 620.32 1337.62 796.09 586.34 948.96 1341.73 558.67 1640.88 2004.84 1125.18 761.47 619.95 404.66 733.65 1043.56 1010.64 1148.61 724.75 1351.06 578.10 2890.11 640.52 454.35 744.41 441.53 598.93 709.17 632.48 1039.74 1405.40 902.23 950.98 478.02 diff --git a/tests/swt/actual/sequential_test.frm b/tests/swt/actual/sequential_test.frm new file mode 100644 index 0000000..e69de29 diff --git a/tests/swt/expect/bulk_test.frm b/tests/swt/expect/bulk_test.frm new file mode 100644 index 0000000..7ae2bd0 --- /dev/null +++ b/tests/swt/expect/bulk_test.frm @@ -0,0 +1,29 @@ + Tulsa District + US Army Corps of Engineers + Elevation Fetch Example 8am to 8am +DATE ALTU ARBU ARCA BIGH BIRC BROK CANT CHEN COPA COUN DENI ELDR ELKC EUFA FALL FCOB FGIB FOSS FSUP GSAL HEYB HUDS HUGO HULA JOHN KAWL KEMP KEYS MARI MCGE MERE OOLO PATM PENS PINE SARD SKIA TENK THUN TOMS TORO WAUR WIST +20Jun2024 0800 1543.58 873.43 1006.08 857.95 750.07 602.38 1615.80 1415.68 710.66 1276.36 620.39 1337.65 796.08 586.48 948.96 1341.75 559.02 1640.90 2004.83 1125.14 761.49 620.22 404.92 733.62 1044.39 1010.78 1148.76 724.73 1351.01 578.12 2890.12 640.82 454.61 744.61 441.54 598.94 709.23 632.46 1039.76 1405.41 902.14 951.00 478.07 +20Jun2024 0900 1543.57 873.43 1006.08 857.94 750.06 602.38 1615.79 1415.67 710.66 1276.36 620.40 1337.64 796.08 586.47 948.96 1341.75 558.96 1640.90 2004.83 1125.17 761.49 620.31 404.87 733.63 1044.42 1010.79 1148.75 724.73 1351.02 578.12 2890.13 640.80 454.61 744.60 441.54 598.94 709.21 632.46 1039.76 1405.41 902.14 951.00 478.06 +20Jun2024 1000 1543.57 873.43 1006.08 857.95 750.06 602.38 1615.79 1415.67 710.65 1276.35 620.41 1337.64 796.08 586.47 948.95 1341.75 558.89 1640.90 2004.84 1125.23 761.49 620.42 404.83 733.63 1044.41 1010.78 1148.75 724.74 1351.02 578.11 2890.12 640.78 454.60 744.58 441.54 598.94 709.22 632.46 1039.76 1405.41 902.14 950.99 478.06 +20Jun2024 1100 1543.58 873.43 1006.08 857.95 750.06 602.38 1615.79 1415.67 710.66 1276.35 620.41 1337.64 796.08 586.47 948.96 1341.75 558.88 1640.90 2004.84 1125.23 761.49 620.45 404.78 733.63 1044.36 1010.79 1148.75 724.75 1351.03 578.11 2890.14 640.77 454.59 744.56 441.53 598.94 709.21 632.46 1039.75 1405.41 902.15 951.01 478.07 +20Jun2024 1200 1543.57 873.43 1006.08 857.95 750.06 602.38 1615.80 1415.67 710.66 1276.34 620.39 1337.64 796.08 586.46 948.96 1341.75 558.84 1640.90 2004.84 1125.22 761.49 620.34 404.77 733.63 1044.34 1010.78 1148.75 724.76 1351.03 578.12 2890.11 640.77 454.58 744.55 441.54 598.94 709.21 632.46 1039.75 1405.42 902.15 951.00 478.06 +20Jun2024 1300 1543.57 873.43 1006.08 857.95 750.06 602.37 1615.80 1415.67 710.66 1276.33 620.40 1337.64 796.08 586.46 948.96 1341.75 558.78 1640.89 2004.84 1125.23 761.48 620.26 404.74 733.63 1044.32 1010.78 1148.73 724.76 1351.04 578.11 2890.15 640.77 454.58 744.54 441.53 598.94 709.21 632.46 1039.76 1405.41 902.16 951.01 478.06 +20Jun2024 1400 1543.58 873.43 1006.07 857.95 750.06 602.33 1615.79 1415.67 710.67 1276.33 620.39 1337.65 796.08 586.46 948.96 1341.75 558.73 1640.89 2004.84 1125.19 761.48 620.13 404.72 733.63 1044.28 1010.76 1148.73 724.75 1351.03 578.11 2890.16 640.77 454.57 744.53 441.54 598.96 709.21 632.47 1039.76 1405.42 902.16 951.00 478.05 +20Jun2024 1500 1543.57 873.43 1006.07 857.94 750.05 602.29 1615.79 1415.67 710.66 1276.32 620.39 1337.64 796.08 586.44 948.96 1341.75 558.82 1640.89 2004.84 1125.17 761.48 619.98 404.68 733.63 1044.21 1010.72 1148.72 724.72 1351.03 578.11 2890.15 640.75 454.52 744.51 441.55 598.95 709.20 632.47 1039.75 1405.42 902.16 951.00 478.05 +20Jun2024 1600 1543.57 873.43 1006.07 857.94 750.05 602.25 1615.79 1415.67 710.67 1276.31 620.38 1337.64 796.08 586.42 948.96 1341.76 558.94 1640.89 2004.84 1125.18 761.48 619.85 404.67 733.63 1044.19 1010.69 1148.71 724.72 1351.03 578.11 2890.16 640.73 454.50 744.50 441.53 598.93 709.20 632.47 1039.75 1405.42 902.17 951.00 478.05 +20Jun2024 1700 1543.57 873.44 1006.07 857.95 750.05 602.23 1615.79 1415.66 710.66 1276.30 620.38 1337.64 796.08 586.41 948.96 1341.75 558.99 1640.88 2004.84 1125.13 761.48 619.73 404.65 733.63 1044.13 1010.66 1148.70 724.70 1351.03 578.12 2890.17 640.71 454.49 744.48 441.53 598.95 709.20 632.47 1039.75 1405.41 902.16 951.00 478.03 +20Jun2024 1800 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.66 710.65 1276.29 620.37 1337.63 796.08 586.41 948.96 1341.75 559.04 1640.89 2004.84 1125.15 761.48 619.61 404.65 733.63 1044.07 1010.64 1148.69 724.68 1351.03 578.11 2890.20 640.70 454.49 744.46 441.53 598.95 709.20 632.48 1039.75 1405.42 902.16 950.99 478.03 +20Jun2024 1900 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.65 710.66 1276.29 620.36 1337.64 796.08 586.39 948.95 1341.75 559.12 1640.89 2004.85 1125.12 761.48 619.46 404.66 733.63 1044.04 1010.61 1148.68 724.66 1351.04 578.11 2890.16 640.68 454.48 744.44 441.53 598.95 709.19 632.47 1039.75 1405.41 902.17 950.99 478.03 +20Jun2024 2000 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.65 710.65 1276.28 620.35 1337.63 796.08 586.40 948.96 1341.74 559.20 1640.89 2004.85 1125.15 761.48 619.65 404.65 733.63 1043.99 1010.60 1148.68 724.64 1351.04 578.11 2890.16 640.68 454.47 744.42 441.53 598.94 709.19 632.47 1039.75 1405.41 902.18 950.99 478.03 +20Jun2024 2100 1543.56 873.44 1006.07 857.94 750.05 602.22 1615.79 1415.66 710.66 1276.27 620.34 1337.63 796.08 586.41 948.96 1341.74 559.26 1640.88 2004.85 1125.19 761.48 619.64 404.66 733.64 1043.96 1010.59 1148.68 724.65 1351.05 578.11 2890.16 640.67 454.46 744.41 441.54 598.94 709.22 632.47 1039.75 1405.41 902.18 950.99 478.04 +20Jun2024 2200 1543.57 873.44 1006.06 857.93 750.05 602.21 1615.79 1415.66 710.66 1276.26 620.33 1337.63 796.08 586.39 948.96 1341.74 559.29 1640.89 2004.85 1125.18 761.48 619.73 404.65 733.64 1043.92 1010.60 1148.67 724.65 1351.05 578.11 2890.15 640.65 454.45 744.39 441.54 598.94 709.19 632.48 1039.75 1405.41 902.19 951.00 478.04 +20Jun2024 2300 1543.56 873.44 1006.07 857.93 750.05 602.20 1615.79 1415.66 710.66 1276.25 620.33 1337.64 796.08 586.37 948.96 1341.74 559.15 1640.88 2004.85 1125.16 761.48 619.86 404.64 733.64 1043.87 1010.60 1148.67 724.67 1351.05 578.11 2890.15 640.64 454.44 744.38 441.53 598.94 709.19 632.48 1039.75 1405.41 902.19 950.99 478.03 +20Jun2024 2400 1543.55 873.44 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.66 1276.24 620.33 1337.64 796.08 586.37 948.96 1341.74 559.03 1640.89 2004.85 1125.18 761.47 619.98 404.65 733.64 1043.83 1010.61 1148.66 724.68 1351.06 578.11 2890.15 640.62 454.43 744.36 441.53 598.94 709.19 632.48 1039.74 1405.41 902.19 950.99 478.03 +21Jun2024 0100 1543.56 873.43 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.66 1276.24 620.30 1337.63 796.08 586.37 948.96 1341.74 559.02 1640.88 2004.85 1125.18 761.47 620.06 404.65 733.64 1043.79 1010.62 1148.65 724.69 1351.06 578.10 2890.15 640.62 454.42 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.19 950.98 478.03 +21Jun2024 0200 1543.56 873.43 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.66 1276.23 620.31 1337.63 796.08 586.36 948.96 1341.74 559.03 1640.88 2004.85 1125.18 761.47 620.11 404.65 733.64 1043.74 1010.61 1148.65 724.70 1351.05 578.11 2890.15 640.60 454.41 744.43 441.54 598.94 709.18 632.48 1039.74 1405.41 902.20 950.99 478.02 +21Jun2024 0300 1543.57 873.43 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.66 1276.21 620.30 1337.63 796.08 586.35 948.96 1341.74 558.95 1640.89 2004.85 1125.18 761.47 620.00 404.66 733.64 1043.71 1010.62 1148.64 724.71 1351.06 578.10 2890.13 640.57 454.40 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.20 950.98 478.03 +21Jun2024 0400 1543.56 873.43 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.65 1276.21 620.32 1337.63 796.08 586.35 948.96 1341.74 558.86 1640.88 2004.84 1125.19 761.47 619.92 404.66 733.64 1043.68 1010.62 1148.63 724.72 1351.05 578.10 2890.13 640.56 454.39 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.21 950.99 478.02 +21Jun2024 0500 1543.56 873.43 1006.05 857.93 750.04 602.21 1615.79 1415.66 710.65 1276.19 620.31 1337.63 796.08 586.34 948.97 1341.74 558.79 1640.88 2004.84 1125.18 761.47 620.00 404.65 733.65 1043.63 1010.62 1148.63 724.73 1351.05 578.10 2890.11 640.56 454.38 744.40 441.54 598.94 709.18 632.48 1039.74 1405.40 902.21 950.98 478.02 +21Jun2024 0600 1543.56 873.42 1006.05 857.93 750.04 602.20 1615.79 1415.66 710.65 1276.18 620.32 1337.62 796.08 586.34 948.96 1341.73 558.76 1640.88 2004.84 1125.17 761.47 620.02 404.66 733.65 1043.60 1010.63 1148.62 724.74 1351.06 578.10 2890.12 640.53 454.37 744.39 441.53 598.94 709.19 632.48 1039.74 1405.40 902.21 950.98 478.02 +21Jun2024 0700 1543.56 873.42 1006.06 857.92 750.04 602.21 1615.79 1415.66 710.65 1276.18 620.31 1337.62 796.08 586.34 948.96 1341.74 558.74 1640.88 2004.84 1125.19 761.47 619.98 404.66 733.64 1043.54 1010.62 1148.61 724.74 1351.06 578.10 2890.12 640.54 454.36 744.41 441.54 598.94 709.18 632.48 1039.74 1405.40 902.22 950.98 478.02 +21Jun2024 0800 1543.56 873.42 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.65 1276.16 620.32 1337.62 796.09 586.34 948.96 1341.73 558.67 1640.88 2004.84 1125.18 761.47 619.95 404.66 733.65 1043.56 1010.64 1148.61 724.75 1351.06 578.10 2890.11 640.52 454.35 744.41 441.53 598.93 709.17 632.48 1039.74 1405.40 902.23 950.98 478.02 diff --git a/tests/swt/expect/sequential_test.frm b/tests/swt/expect/sequential_test.frm new file mode 100644 index 0000000..e69de29 diff --git a/tests/swt/output/bulk_test.out b/tests/swt/output/bulk_test.out new file mode 100644 index 0000000..4a4e97a --- /dev/null +++ b/tests/swt/output/bulk_test.out @@ -0,0 +1,29 @@ + Tulsa District + US Army Corps of Engineers + Elevation Fetch Example 8am to 8am +DATE ALTU ARBU ARCA BIGH BIRC BROK CANT CHEN COPA COUN DENI ELDR ELKC EUFA FALL FCOB FGIB FOSS FSUP GSAL HEYB HUDS HUGO HULA JOHN KAWL KEMP KEYS MARI MCGE MERE OOLO PATM PENS PINE SARD SKIA TENK THUN TOMS TORO WAUR WIST +~~ 1543.58 873.43 1006.08 857.95 750.07 602.38 1615.80 1415.68 710.66 1276.36 620.39 1337.65 796.08 586.48 948.96 1341.75 559.02 1640.90 2004.83 1125.14 761.49 620.22 404.92 733.62 1044.39 1010.78 1148.76 724.73 1351.01 578.12 2890.12 640.82 454.61 744.61 441.54 598.94 709.23 632.46 1039.76 1405.41 902.14 951.00 478.07 +~~ 1543.57 873.43 1006.08 857.94 750.06 602.38 1615.79 1415.67 710.66 1276.36 620.40 1337.64 796.08 586.47 948.96 1341.75 558.96 1640.90 2004.83 1125.17 761.49 620.31 404.87 733.63 1044.42 1010.79 1148.75 724.73 1351.02 578.12 2890.13 640.80 454.61 744.60 441.54 598.94 709.21 632.46 1039.76 1405.41 902.14 951.00 478.06 +~~ 1543.57 873.43 1006.08 857.95 750.06 602.38 1615.79 1415.67 710.65 1276.35 620.41 1337.64 796.08 586.47 948.95 1341.75 558.89 1640.90 2004.84 1125.23 761.49 620.42 404.83 733.63 1044.41 1010.78 1148.75 724.74 1351.02 578.11 2890.12 640.78 454.60 744.58 441.54 598.94 709.22 632.46 1039.76 1405.41 902.14 950.99 478.06 +~~ 1543.58 873.43 1006.08 857.95 750.06 602.38 1615.79 1415.67 710.66 1276.35 620.41 1337.64 796.08 586.47 948.96 1341.75 558.88 1640.90 2004.84 1125.23 761.49 620.45 404.78 733.63 1044.36 1010.79 1148.75 724.75 1351.03 578.11 2890.14 640.77 454.59 744.56 441.53 598.94 709.21 632.46 1039.75 1405.41 902.15 951.01 478.07 +~~ 1543.57 873.43 1006.08 857.95 750.06 602.38 1615.80 1415.67 710.66 1276.34 620.39 1337.64 796.08 586.46 948.96 1341.75 558.84 1640.90 2004.84 1125.22 761.49 620.34 404.77 733.63 1044.34 1010.78 1148.75 724.76 1351.03 578.12 2890.11 640.77 454.58 744.55 441.54 598.94 709.21 632.46 1039.75 1405.42 902.15 951.00 478.06 +~~ 1543.57 873.43 1006.08 857.95 750.06 602.37 1615.80 1415.67 710.66 1276.33 620.40 1337.64 796.08 586.46 948.96 1341.75 558.78 1640.89 2004.84 1125.23 761.48 620.26 404.74 733.63 1044.32 1010.78 1148.73 724.76 1351.04 578.11 2890.15 640.77 454.58 744.54 441.53 598.94 709.21 632.46 1039.76 1405.41 902.16 951.01 478.06 +~~ 1543.58 873.43 1006.07 857.95 750.06 602.33 1615.79 1415.67 710.67 1276.33 620.39 1337.65 796.08 586.46 948.96 1341.75 558.73 1640.89 2004.84 1125.19 761.48 620.13 404.72 733.63 1044.28 1010.76 1148.73 724.75 1351.03 578.11 2890.16 640.77 454.57 744.53 441.54 598.96 709.21 632.47 1039.76 1405.42 902.16 951.00 478.05 +~~ 1543.57 873.43 1006.07 857.94 750.05 602.29 1615.79 1415.67 710.66 1276.32 620.39 1337.64 796.08 586.44 948.96 1341.75 558.82 1640.89 2004.84 1125.17 761.48 619.98 404.68 733.63 1044.21 1010.72 1148.72 724.72 1351.03 578.11 2890.15 640.75 454.52 744.51 441.55 598.95 709.20 632.47 1039.75 1405.42 902.16 951.00 478.05 +~~ 1543.57 873.43 1006.07 857.94 750.05 602.25 1615.79 1415.67 710.67 1276.31 620.38 1337.64 796.08 586.42 948.96 1341.76 558.94 1640.89 2004.84 1125.18 761.48 619.85 404.67 733.63 1044.19 1010.69 1148.71 724.72 1351.03 578.11 2890.16 640.73 454.50 744.50 441.53 598.93 709.20 632.47 1039.75 1405.42 902.17 951.00 478.05 +~~ 1543.57 873.44 1006.07 857.95 750.05 602.23 1615.79 1415.66 710.66 1276.30 620.38 1337.64 796.08 586.41 948.96 1341.75 558.99 1640.88 2004.84 1125.13 761.48 619.73 404.65 733.63 1044.13 1010.66 1148.70 724.70 1351.03 578.12 2890.17 640.71 454.49 744.48 441.53 598.95 709.20 632.47 1039.75 1405.41 902.16 951.00 478.03 +~~ 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.66 710.65 1276.29 620.37 1337.63 796.08 586.41 948.96 1341.75 559.04 1640.89 2004.84 1125.15 761.48 619.61 404.65 733.63 1044.07 1010.64 1148.69 724.68 1351.03 578.11 2890.20 640.70 454.49 744.46 441.53 598.95 709.20 632.48 1039.75 1405.42 902.16 950.99 478.03 +~~ 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.65 710.66 1276.29 620.36 1337.64 796.08 586.39 948.95 1341.75 559.12 1640.89 2004.85 1125.12 761.48 619.46 404.66 733.63 1044.04 1010.61 1148.68 724.66 1351.04 578.11 2890.16 640.68 454.48 744.44 441.53 598.95 709.19 632.47 1039.75 1405.41 902.17 950.99 478.03 +~~ 1543.57 873.44 1006.07 857.94 750.05 602.21 1615.79 1415.65 710.65 1276.28 620.35 1337.63 796.08 586.40 948.96 1341.74 559.20 1640.89 2004.85 1125.15 761.48 619.65 404.65 733.63 1043.99 1010.60 1148.68 724.64 1351.04 578.11 2890.16 640.68 454.47 744.42 441.53 598.94 709.19 632.47 1039.75 1405.41 902.18 950.99 478.03 +~~ 1543.56 873.44 1006.07 857.94 750.05 602.22 1615.79 1415.66 710.66 1276.27 620.34 1337.63 796.08 586.41 948.96 1341.74 559.26 1640.88 2004.85 1125.19 761.48 619.64 404.66 733.64 1043.96 1010.59 1148.68 724.65 1351.05 578.11 2890.16 640.67 454.46 744.41 441.54 598.94 709.22 632.47 1039.75 1405.41 902.18 950.99 478.04 +~~ 1543.57 873.44 1006.06 857.93 750.05 602.21 1615.79 1415.66 710.66 1276.26 620.33 1337.63 796.08 586.39 948.96 1341.74 559.29 1640.89 2004.85 1125.18 761.48 619.73 404.65 733.64 1043.92 1010.60 1148.67 724.65 1351.05 578.11 2890.15 640.65 454.45 744.39 441.54 598.94 709.19 632.48 1039.75 1405.41 902.19 951.00 478.04 +~~ 1543.56 873.44 1006.07 857.93 750.05 602.20 1615.79 1415.66 710.66 1276.25 620.33 1337.64 796.08 586.37 948.96 1341.74 559.15 1640.88 2004.85 1125.16 761.48 619.86 404.64 733.64 1043.87 1010.60 1148.67 724.67 1351.05 578.11 2890.15 640.64 454.44 744.38 441.53 598.94 709.19 632.48 1039.75 1405.41 902.19 950.99 478.03 +~~ 1543.55 873.44 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.66 1276.24 620.33 1337.64 796.08 586.37 948.96 1341.74 559.03 1640.89 2004.85 1125.18 761.47 619.98 404.65 733.64 1043.83 1010.61 1148.66 724.68 1351.06 578.11 2890.15 640.62 454.43 744.36 441.53 598.94 709.19 632.48 1039.74 1405.41 902.19 950.99 478.03 +~~ 1543.56 873.43 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.66 1276.24 620.30 1337.63 796.08 586.37 948.96 1341.74 559.02 1640.88 2004.85 1125.18 761.47 620.06 404.65 733.64 1043.79 1010.62 1148.65 724.69 1351.06 578.10 2890.15 640.62 454.42 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.19 950.98 478.03 +~~ 1543.56 873.43 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.66 1276.23 620.31 1337.63 796.08 586.36 948.96 1341.74 559.03 1640.88 2004.85 1125.18 761.47 620.11 404.65 733.64 1043.74 1010.61 1148.65 724.70 1351.05 578.11 2890.15 640.60 454.41 744.43 441.54 598.94 709.18 632.48 1039.74 1405.41 902.20 950.99 478.02 +~~ 1543.57 873.43 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.66 1276.21 620.30 1337.63 796.08 586.35 948.96 1341.74 558.95 1640.89 2004.85 1125.18 761.47 620.00 404.66 733.64 1043.71 1010.62 1148.64 724.71 1351.06 578.10 2890.13 640.57 454.40 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.20 950.98 478.03 +~~ 1543.56 873.43 1006.06 857.93 750.04 602.20 1615.79 1415.66 710.65 1276.21 620.32 1337.63 796.08 586.35 948.96 1341.74 558.86 1640.88 2004.84 1125.19 761.47 619.92 404.66 733.64 1043.68 1010.62 1148.63 724.72 1351.05 578.10 2890.13 640.56 454.39 744.38 441.53 598.94 709.18 632.48 1039.74 1405.40 902.21 950.99 478.02 +~~ 1543.56 873.43 1006.05 857.93 750.04 602.21 1615.79 1415.66 710.65 1276.19 620.31 1337.63 796.08 586.34 948.97 1341.74 558.79 1640.88 2004.84 1125.18 761.47 620.00 404.65 733.65 1043.63 1010.62 1148.63 724.73 1351.05 578.10 2890.11 640.56 454.38 744.40 441.54 598.94 709.18 632.48 1039.74 1405.40 902.21 950.98 478.02 +~~ 1543.56 873.42 1006.05 857.93 750.04 602.20 1615.79 1415.66 710.65 1276.18 620.32 1337.62 796.08 586.34 948.96 1341.73 558.76 1640.88 2004.84 1125.17 761.47 620.02 404.66 733.65 1043.60 1010.63 1148.62 724.74 1351.06 578.10 2890.12 640.53 454.37 744.39 441.53 598.94 709.19 632.48 1039.74 1405.40 902.21 950.98 478.02 +~~ 1543.56 873.42 1006.06 857.92 750.04 602.21 1615.79 1415.66 710.65 1276.18 620.31 1337.62 796.08 586.34 948.96 1341.74 558.74 1640.88 2004.84 1125.19 761.47 619.98 404.66 733.64 1043.54 1010.62 1148.61 724.74 1351.06 578.10 2890.12 640.54 454.36 744.41 441.54 598.94 709.18 632.48 1039.74 1405.40 902.22 950.98 478.02 +~~ 1543.56 873.42 1006.06 857.93 750.04 602.21 1615.79 1415.66 710.65 1276.16 620.32 1337.62 796.09 586.34 948.96 1341.73 558.67 1640.88 2004.84 1125.18 761.47 619.95 404.66 733.65 1043.56 1010.64 1148.61 724.75 1351.06 578.10 2890.11 640.52 454.35 744.41 441.53 598.93 709.17 632.48 1039.74 1405.40 902.23 950.98 478.02 diff --git a/tests/swt/output/bulk_test.txt b/tests/swt/output/bulk_test.txt new file mode 100644 index 0000000..b571927 --- /dev/null +++ b/tests/swt/output/bulk_test.txt @@ -0,0 +1,29 @@ + Tulsa District + US Army Corps of Engineers + Elevation Fetch Example 8am to 8am +DATE ALTU ARBU ARCA BIGH BIRC BROK CANT CHEN COPA COUN DENI ELDR ELKC EUFA FALL FCOB FGIB FOSS FSUP GSAL HEYB HUDS HUGO HULA JOHN KAWL KEMP KEYS MARI MCGE MERE OOLO PATM PENS PINE SARD SKIA TENK THUN TOMS TORO WAUR WIST +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev +~~ %ALTU-elev %ARBU-elev %ARCA-elev %BIGH-elev %BIRC-elev %BROK-elev %CANT-elev %CHEN-elev %COPA-elev %COUN-elev %DENI-elev %ELDR-elev %ELKC-elev %EUFA-elev %FALL-elev %FCOB-elev %FGIB-elev %FOSS-elev %FSUP-elev %GSAL-elev %HEYB-elev %HUDS-elev %HUGO-elev %HULA-elev %JOHN-elev %KAWL-elev %KEMP-elev %KEYS-elev %MARI-elev %MCGE-elev %MERE-elev %OOLO-elev %PATM-elev %PENS-elev %PINE-elev %SARD-elev %SKIA-elev %TENK-elev %THUN-elev %TOMS-elev %TORO-elev %WAUR-elev %WIST-elev diff --git a/tests/swt/output/sequential_test.out b/tests/swt/output/sequential_test.out new file mode 100644 index 0000000..4ab0389 --- /dev/null +++ b/tests/swt/output/sequential_test.out @@ -0,0 +1,29 @@ + Tulsa District + US Army Corps of Engineers + Keystone Lake Report +DATE Elevation Storage Inflow Outflow Precip +~~ 724.73 429926 1659 0 0.000 +~~ 724.73 429926 830 0 0.000 +~~ 724.74 430098 2074 0 0.000 +~~ 724.75 430269 1699 0 0.000 +~~ 724.76 430441 2088 0 0.000 +~~ 724.76 430441 924 200 0.000 +~~ 724.75 430269 3650 6100 0.000 +~~ 724.72 429754 1667 6200 0.000 +~~ 724.72 429754 4579 6200 0.000 +~~ 724.70 429411 2148 6300 0.000 +~~ 724.68 429068 2148 6300 0.000 +~~ 724.66 428725 2174 6300 0.000 +~~ 724.64 428382 1744 6300 0.000 +~~ 724.65 428554 2196 200 0.000 +~~ 724.65 428554 1246 0 0.000 +~~ 724.67 428897 3321 0 0.000 +~~ 724.68 429068 2076 0 0.000 +~~ 724.69 429240 2076 0 0.000 +~~ 724.70 429411 2076 0 0.000 +~~ 724.71 429583 2076 0 0.000 +~~ 724.72 429754 2076 0 0.000 +~~ 724.73 429926 1661 0 0.000 +~~ 724.74 430098 1661 0 0.000 +~~ 724.74 430098 830 0 0.000 +~~ 724.75 430269 2075 0 0.000 diff --git a/tests/swt/scripts/run.bat b/tests/swt/scripts/run.bat new file mode 100644 index 0000000..abed5f6 --- /dev/null +++ b/tests/swt/scripts/run.bat @@ -0,0 +1,29 @@ +@echo off + +@REM Get the first argument, which is the report name +set reportname=%1 +echo %reportname% + +@REM Check if no input is provided +if "%1"=="" ( + echo No input provided. Listing files in the 'tests/swt/testfiles' directory: + + @REM Loop through files and list those without extension + for %%f in (tests\swt\testfiles\*.*) do ( + echo run.bat %%~nf + ) + exit /b 1 +) + + +@REM If a file extension is present, remove it +if "%reportname:~-4%" == ".frm" set reportname=%reportname:~0,-4% +if "%reportname:~-4%" == ".out" set reportname=%reportname:~0,-4% + + +python.exe . ^ + -a https://cwms-data.usace.army.mil/cwms-data ^ + -i tests/swt/testfiles/%reportname%.frm ^ + -O SWT ^ + -o tests/swt/output/%reportname%.out ^ + %* \ No newline at end of file diff --git a/tests/swt/scripts/run.sh b/tests/swt/scripts/run.sh new file mode 100755 index 0000000..85b7704 --- /dev/null +++ b/tests/swt/scripts/run.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +reportname="$1" +echo "$reportname" + +if [ -z "$1" ]; then + echo "No input provided. Listing files in the 'tests/swt/testfiles' directory:" + for f in tests/swt/testfiles/*.*; do + filename=$(basename "$f") + echo "./run.sh ${filename%.*}" + done + exit 1 +fi + +case "$reportname" in + *.frm) reportname="${reportname%.frm}" ;; + *.out) reportname="${reportname%.out}" ;; +esac + +python3 . \ + -a https://cwms-data.usace.army.mil/cwms-data \ + -i tests/swt/testfiles/"$reportname".frm \ + -O SWT \ + -o tests/swt/output/"$reportname".out \ + "$@" diff --git a/tests/swt/testfiles/bulk_test.frm b/tests/swt/testfiles/bulk_test.frm new file mode 100644 index 0000000..c07c703 --- /dev/null +++ b/tests/swt/testfiles/bulk_test.frm @@ -0,0 +1,122 @@ +#FORM + Tulsa District + US Army Corps of Engineers + Elevation Fetch Example 8am to 8am +DATE ALTU ARBU ARCA BIGH BIRC BROK CANT CHEN COPA COUN DENI ELDR ELKC EUFA FALL FCOB FGIB FOSS FSUP GSAL HEYB HUDS HUGO HULA JOHN KAWL KEMP KEYS MARI MCGE MERE OOLO PATM PENS PINE SARD SKIA TENK THUN TOMS TORO WAUR WIST +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +%DT %ALTU_elev %ARBU_elev %ARCA_elev %BIGH_elev %BIRC_elev %BROK_elev %CANT_elev %CHEN_elev %COPA_elev %COUN_elev %DENI_elev %ELDR_elev %ELKC_elev %EUFA_elev %FALL_elev %FCOB_elev %FGIB_elev %FOSS_elev %FSUP_elev %GSAL_elev %HEYB_elev %HUDS_elev %HUGO_elev %HULA_elev %JOHN_elev %KAWL_elev %KEMP_elev %KEYS_elev %MARI_elev %MCGE_elev %MERE_elev %OOLO_elev %PATM_elev %PENS_elev %PINE_elev %SARD_elev %SKIA_elev %TENK_elev %THUN_elev %TOMS_elev %TORO_elev %WAUR_elev %WIST_elev +#ENDFORM + +#DEF + +PROJECTS = [ + "ALTU", + "ARBU", + "ARCA", + "BIGH", + "BIRC", + "BROK", + "CANT", + "CHEN", + "COPA", + "COUN", + "DENI", + "ELDR", + "ELKC", + "EUFA", + "FALL", + "FCOB", + "FGIB", + "FOSS", + "FSUP", + "GSAL", + "HEYB", + "HUDS", + "HUGO", + "HULA", + "JOHN", + "KAWL", + "KEMP", + "KEYS", + "MARI", + "MCGE", + "MERE", + "OOLO", + "PATM", + "PENS", + "PINE", + "SARD", + "SKIA", + "TENK", + "THUN", + "TOMS", + "TORO", + "WAUR", + "WIST", +] +BASDATE.value = BASDATE.value.replace(hour=8, minute=0, second=0, microsecond=0) +BASDATE.picture = "%Y-%m-%d" +CUR_YEAR = BASDATE.value.year +CUR_MONTH = BASDATE.value.month +CUR_DAY = BASDATE.value.day + +BASDATE_8AM = BASDATE.value.replace(year=2024, month=6, day=21, hour=8, minute=0, second=0, microsecond=0) +BASDATE_8AM_YESTERDAY = BASDATE_8AM - datetime.timedelta(hours=24) + +for project in PROJECTS: + # Fetch the Elev from CDA via Value() + elev = Value( + dbtype="radar", + DBTZ="US/CENTRAL", + tz="US/CENTRAL", + DBLOC=project, + DBPAR="Elev", + DBPTYP="Inst", + DBINT="1Hour", + DBDUR="0", + DBVER="Ccp-Rev", + start=BASDATE_8AM_YESTERDAY, + end=BASDATE_8AM, + PICTURE="%3.2f", + MISSTR="--", + UNDEF="~~", + DBUNITS="ft", + ) + # This will end up being the last elev to get looped. + # TODO: Consider creating a sep value for just the date range that should always exist + print("datatimes", str(elev.values)) + DT = Value(elev.datatimes(), + PICTURE="%d%b%Y %K%M", + ) + # Dynamically add the project to the locals for printing to the form + locals().update( + { + project + "_elev": elev + } + ) + print(project + "_elev") + +# ENDDEF diff --git a/tests/swt/testfiles/sequential_test.frm b/tests/swt/testfiles/sequential_test.frm new file mode 100644 index 0000000..b31712b --- /dev/null +++ b/tests/swt/testfiles/sequential_test.frm @@ -0,0 +1,101 @@ +#FORM + Tulsa District + US Army Corps of Engineers + Keystone Lake Report +DATE Elevation Storage Inflow Outflow Precip +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +%DT %elev %stor %flow_res_in %flow_res_out %precip_inc +#ENDFORM + +#DEF +PROJECT = "KEYS" +PARAM_TSIDS = [ + "Elev.Inst.1Hour.0.Ccp-Rev", + "Stor.Inst.1Hour.0.Ccp-Rev", + "Flow-Res In.Ave.1Hour.1Hour.Rev-Regi-Computed", + "Flow-Res Out.Ave.1Hour.1Hour.Rev-Regi-Flowgroup", + "Precip-Inc.Total.1Hour.1Hour.Ccp-Rev", +] + +UNIT_MAP = { + "precip_inc": {"units": "in", "picture": "%3.3f"}, + "flow_res_in": {"units": "cfs", "picture": "%4.0f"}, + "flow_res_out": {"units": "cfs", "picture": "%4.0f"}, + "elev": {"units": "ft", "picture": "%3.2f"}, + "stor": {"units": "ac-ft", "picture": "%5.0f"}, +} + +PARAM_TSIDS = [p.split(".") for p in PARAM_TSIDS] + +BASDATE.value = BASDATE.value.replace(hour=8, minute=0, second=0, microsecond=0) +BASDATE.picture = "%Y-%m-%d" +CUR_YEAR = BASDATE.value.year +CUR_MONTH = BASDATE.value.month +CUR_DAY = BASDATE.value.day + +BASDATE_8AM = BASDATE.value.replace(year=2024, month=6, day=21, hour=8, minute=0, second=0, microsecond=0) +BASDATE_8AM_YESTERDAY = BASDATE_8AM - datetime.timedelta(hours=24) + +for dbpar, dbptyp, dbint, dbdur, dbver in PARAM_TSIDS: + print("GET " + '.'.join([PROJECT,dbpar, dbptyp, dbint, dbdur, dbver])) + # Create a variable friendly name for the parameter + dbpar_norm = dbpar.replace(" ", "_").replace("-", "_").lower() + # Dynamically add the project to the locals for printing to the form + print(UNIT_MAP.get(dbpar_norm, "ft")) + param = UNIT_MAP.get(dbpar_norm, "ft") + _value = Value( + dbtype="radar", + DBTZ="US/CENTRAL", + tz="US/CENTRAL", + DBLOC=PROJECT, + DBPAR=dbpar, + DBPTYP=dbptyp, + DBINT=dbint, + DBDUR=dbdur, + DBVER=dbver, + start=BASDATE_8AM_YESTERDAY, + end=BASDATE_8AM, + PICTURE=param["picture"], + MISSTR="--", + UNDEF="~~", + DBUNITS=param["units"], + ) + print(param) + print(_value.values) + locals().update( + { + dbpar_norm: _value + } + ) + # This will end up being the last elev to get looped. + # TODO: Consider creating a sep value for just the date range that should always exist + print("datatimes", str(_value.values)) + DT = Value(_value.datatimes(), + PICTURE="%d%b%Y %K%M", + ) + + +# ENDDEF diff --git a/tests/test_converter.py b/tests/test_converter.py index 645294b..4407731 100644 --- a/tests/test_converter.py +++ b/tests/test_converter.py @@ -5,10 +5,10 @@ from converter import convert_report; -INPUT_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "testfiles")) -EXPECT_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "expect")) -ACTUAL_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "actual")) -LOG_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "output")) +INPUT_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "spk", "testfiles")) +EXPECT_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "spk", "expect")) +ACTUAL_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "spk", "actual")) +LOG_DIR = os.path.normpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "spk", "output")) os.makedirs(ACTUAL_DIR, exist_ok=True) os.makedirs(LOG_DIR, exist_ok=True) diff --git a/tests/test_run_swt.py b/tests/test_run_swt.py new file mode 100644 index 0000000..f46d74c --- /dev/null +++ b/tests/test_run_swt.py @@ -0,0 +1,75 @@ +import os +import sys +import pytest +import subprocess +import platform + +sys.path.append("../") + +INPUT_DIR = os.path.normpath( + os.path.join(os.path.dirname(os.path.realpath(__file__)), "swt", "testfiles") +) +EXPECT_DIR = os.path.normpath( + os.path.join(os.path.dirname(os.path.realpath(__file__)), "swt", "expect") +) +ACTUAL_DIR = os.path.normpath( + os.path.join(os.path.dirname(os.path.realpath(__file__)), "swt", "actual") +) +LOG_DIR = os.path.normpath( + os.path.join(os.path.dirname(os.path.realpath(__file__)), "swt", "output") +) +SCRIPT_DIR = os.path.normpath( + os.path.join(os.path.dirname(os.path.realpath(__file__)), "swt", "scripts") +) + +os.makedirs(ACTUAL_DIR, exist_ok=True) +os.makedirs(LOG_DIR, exist_ok=True) + + +@pytest.mark.parametrize( + "reportname", + [ + ("bulk_test.frm"), + ("sequential_test.frm"), + ], +) +def test_repgen(capsys, reportname: str): + actualname = os.path.join( + ACTUAL_DIR, reportname + ) # Assuming output is .txt + expectname = os.path.join(EXPECT_DIR, reportname ) + outputname = os.path.join(LOG_DIR, reportname + ".out.log") + errname = os.path.join(LOG_DIR, reportname + ".err.log") + + # Determine the operating system and choose the script accordingly + if platform.system() == "Windows": + script = os.path.join(SCRIPT_DIR, "run.bat") + cmd = ["cmd.exe", "/c", script] + else: + script = os.path.join(SCRIPT_DIR, "run.sh") + cmd = [script, reportname, '-p'] + + # Run the command and capture the output + result = subprocess.run(cmd, capture_output=True, text=True) + + # Write captured output to files + if result.stdout: + with open(outputname, "wt") as output_fd: + output_fd.write(result.stdout) + + if result.stderr: + with open(errname, "wt") as output_fd: + output_fd.write(result.stderr) + + # Read expected and actual output + with open(expectname, "+rt") as expect_fd: + expect_content = expect_fd.readlines() + + with open(actualname, "+rt") as actual_fd: + actual_content = actual_fd.readlines() + + # Assert that the expected and actual output match + assert len(actual_content) == len(expect_content) + + for x in range(len(expect_content)): + assert expect_content[x] == actual_content[x]