From 0c8e9c0b8eb4e91d830a7973cd620d00132f626b Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Thu, 29 Sep 2022 09:58:16 -0600 Subject: [PATCH 1/9] initial commit --- bmi_config_files/standard_AnA.yml | 4 + bmi_troute.py | 433 ++++++ run-troute-with-bmi.ipynb | 1502 +++++++++++++++++++ src/troute-network/troute/bmi_utilities.py | 340 +++++ src/troute-network/troute/main_utilities.py | 506 +++++++ src/troute-nwm/src/nwm_routing/__main__.py | 219 +-- 6 files changed, 2807 insertions(+), 197 deletions(-) create mode 100644 bmi_config_files/standard_AnA.yml create mode 100644 bmi_troute.py create mode 100644 run-troute-with-bmi.ipynb create mode 100644 src/troute-network/troute/bmi_utilities.py create mode 100644 src/troute-network/troute/main_utilities.py diff --git a/bmi_config_files/standard_AnA.yml b/bmi_config_files/standard_AnA.yml new file mode 100644 index 000000000..384eb9aea --- /dev/null +++ b/bmi_config_files/standard_AnA.yml @@ -0,0 +1,4 @@ +flag: + '-f' +file: + 'test/configs/standard_AnA.yaml' \ No newline at end of file diff --git a/bmi_troute.py b/bmi_troute.py new file mode 100644 index 000000000..cf081528f --- /dev/null +++ b/bmi_troute.py @@ -0,0 +1,433 @@ +"""Basic Model Interface implementation for t-route.""" + +import numpy as np +from bmipy import Bmi +from pathlib import Path +import yaml + +import troute.main_utilities as tr +import troute.nhd_network_utilities_v02 as nnu + + + +class bmi_troute(Bmi): + + def __init__(self): + """Create a Bmi troute model that is ready for initialization.""" + super(bmi_troute, self).__init__() + #self._model = None + self._values = {} + #self._var_units = {} + self._var_loc = "node" + self._var_grid_id = 0 + #self._grids = {} + #self._grid_type = {} + + self._start_time = 0.0 + self._end_time = np.finfo("d").max + self._time_units = "s" + + #---------------------------------------------- + # Required, static attributes of the model + #---------------------------------------------- + _att_map = { + 'model_name': 'T-Route for Next Generation NWM', + 'version': '', + 'author_name': '', + 'grid_type': 'scalar', + 'time_step_size': 1, + #'time_step_type': 'donno', #unused + #'step_method': 'none', #unused + #'time_units': '1 hour' #NJF Have to drop the 1 for NGEN to recognize the unit + 'time_units': 'seconds' } + + #--------------------------------------------- + # Input variable names (CSDMS standard names) + #--------------------------------------------- + _input_var_names = ['land_surface_water__runoff_volume_flux'] + + #--------------------------------------------- + # Output variable names (CSDMS standard names) + #--------------------------------------------- + _output_var_names = ['channel_exit_water_x-section__volume_flow_rate', + 'channel_water__mean_depth'] + + #------------------------------------------------------ + # Create a Python dictionary that maps CSDMS Standard + # Names to the model's internal variable names. + #------------------------------------------------------ + _var_name_units_map = { + 'channel_exit_water_x-section__volume_flow_rate':['streamflow_cms','m3 s-1'], + 'channel_water__mean_depth':['streamflow_m','m'], + #-------------- Dynamic inputs -------------------------------- + 'land_surface_water__runoff_volume_flux':['streamflow_cms','m3 s-1'] + } + + #------------------------------------------------------ + # A list of static attributes. Not all these need to be used. + #------------------------------------------------------ + _static_attributes_list = [] + + + #------------------------------------------------------------ + #------------------------------------------------------------ + # BMI: Model Control Functions + #------------------------------------------------------------ + #------------------------------------------------------------ + + #------------------------------------------------------------------- + def initialize(self, bmi_cfg_file=None): + + # -------------- Read in the BMI configuration -------------------------# + bmi_cfg_file = Path(bmi_cfg_file) + # ----- Create some lookup tabels from the long variable names --------# + self._var_name_map_long_first = {long_name:self._var_name_units_map[long_name][0] for \ + long_name in self._var_name_units_map.keys()} + self._var_name_map_short_first = {self._var_name_units_map[long_name][0]:long_name for \ + long_name in self._var_name_units_map.keys()} + self._var_units_map = {long_name:self._var_name_units_map[long_name][1] for \ + long_name in self._var_name_units_map.keys()} + + # -------------- Initalize all the variables --------------------------# + # -------------- so that they'll be picked up with the get functions --# + for var_name in list(self._var_name_units_map.keys()): + # ---------- All the variables are single values ------------------# + # ---------- so just set to zero for now. ------------------# + self._values[var_name] = 0 + setattr( self, var_name, 0 ) + + # This will direct all the next moves. + if bmi_cfg_file is not None: + + with bmi_cfg_file.open('r') as fp: + cfg = yaml.safe_load(fp) + self._cfg_bmi = self._parse_config(cfg) + else: + print("Error: No configuration provided, nothing to do...") + + # ------------- Initialize t-route model ------------------------------# + (self._network, + self._log_parameters, + self._preprocessing_parameters, + self._supernetwork_parameters, + self._waterbody_parameters, + self._compute_parameters, + self._forcing_parameters, + self._restart_parameters, + self._hybrid_parameters, + self._output_parameters, + self._parity_parameters, + self._data_assimilation_parameters, + self._run_parameters, + ) = tr.initialize_network(self._cfg_bmi) + + def build_run_sets(self): + """ + Use input parameters to create lists of run_sets and da_sets. Lists will be of length + one if t-route looping is not needed, and greater than one if it is. + """ + # Create run_sets: sets of forcing files for each loop + self._run_sets = nnu.build_forcing_sets(self._forcing_parameters, self._network.t0) + + # Create da_sets: sets of TimeSlice files for each loop + if "data_assimilation_parameters" in self._compute_parameters: + self._da_sets = nnu.build_da_sets(self._data_assimilation_parameters, self._run_sets, self._network.t0) + + # Create parity_sets: sets of CHRTOUT files against which to compare t-route flows + if "wrf_hydro_parity_check" in self._output_parameters: + self._parity_sets = nnu.build_parity_sets(self._parity_parameters, self._run_sets) + else: + self._parity_sets = [] + + def update(self): + """Advance model by one time step.""" + self._model.advance_in_time() + + def update_frac(self, time_frac): + """Update model by a fraction of a time step. + Parameters + ---------- + time_frac : float + Fraction fo a time step. + """ + time_step = self.get_time_step() + self._model.time_step = time_frac * time_step + self.update() + self._model.time_step = time_step + + def update_until(self, then): + """Update model until a particular time. + Parameters + ---------- + then : float + Time to run model until. + """ + n_steps = (then - self.get_current_time()) / self.get_time_step() + + for _ in range(int(n_steps)): + self.update() + self.update_frac(n_steps - int(n_steps)) + + def finalize(self): + """Finalize model.""" + self._model = None + + def get_var_type(self, var_name): + """Data type of variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + str + Data type. + """ + return str(self.get_value_ptr(var_name).dtype) + + def get_var_units(self, var_name): + """Get units of variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + str + Variable units. + """ + return self._var_units[var_name] + + def get_var_nbytes(self, var_name): + """Get units of variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + int + Size of data array in bytes. + """ + return self.get_value_ptr(var_name).nbytes + + def get_var_itemsize(self, name): + return np.dtype(self.get_var_type(name)).itemsize + + def get_var_location(self, name): + return self._var_loc[name] + + def get_var_grid(self, var_name): + """Grid id for a variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + int + Grid id. + """ + for grid_id, var_name_list in self._grids.items(): + if var_name in var_name_list: + return grid_id + + def get_grid_rank(self, grid_id): + """Rank of grid. + Parameters + ---------- + grid_id : int + Identifier of a grid. + Returns + ------- + int + Rank of grid. + """ + return len(self._model.shape) + + def get_grid_size(self, grid_id): + """Size of grid. + Parameters + ---------- + grid_id : int + Identifier of a grid. + Returns + ------- + int + Size of grid. + """ + return int(np.prod(self._model.shape)) + + def get_value_ptr(self, var_name): + """Reference to values. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + array_like + Value array. + """ + return self._values[var_name] + + def get_value(self, var_name, dest): + """Copy of values. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + dest : ndarray + A numpy array into which to place the values. + Returns + ------- + array_like + Copy of values. + """ + dest[:] = self.get_value_ptr(var_name).flatten() + return dest + + def get_value_at_indices(self, var_name, dest, indices): + """Get values at particular indices. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + dest : ndarray + A numpy array into which to place the values. + indices : array_like + Array of indices. + Returns + ------- + array_like + Values at indices. + """ + dest[:] = self.get_value_ptr(var_name).take(indices) + return dest + + def set_value(self, var_name, src): + """Set model values. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + src : array_like + Array of new values. + """ + val = self.get_value_ptr(var_name) + val[:] = src.reshape(val.shape) + + def set_value_at_indices(self, name, inds, src): + """Set model values at particular indices. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + src : array_like + Array of new values. + indices : array_like + Array of indices. + """ + val = self.get_value_ptr(name) + val.flat[inds] = src + + def get_component_name(self): + """Name of the component.""" + return self._name + + def get_input_item_count(self): + """Get names of input variables.""" + return len(self._input_var_names) + + def get_output_item_count(self): + """Get names of output variables.""" + return len(self._output_var_names) + + def get_input_var_names(self): + """Get names of input variables.""" + return self._input_var_names + + def get_output_var_names(self): + """Get names of output variables.""" + return self._output_var_names + + def get_grid_shape(self, grid_id, shape): + """Number of rows and columns of uniform rectilinear grid.""" + var_name = self._grids[grid_id][0] + shape[:] = self.get_value_ptr(var_name).shape + return shape + + def get_grid_spacing(self, grid_id, spacing): + """Spacing of rows and columns of uniform rectilinear grid.""" + spacing[:] = self._model.spacing + return spacing + + def get_grid_origin(self, grid_id, origin): + """Origin of uniform rectilinear grid.""" + origin[:] = self._model.origin + return origin + + def get_grid_type(self, grid_id): + """Type of grid.""" + return self._grid_type[grid_id] + + def get_start_time(self): + """Start time of model.""" + return self._start_time + + def get_end_time(self): + """End time of model.""" + return self._end_time + + def get_current_time(self): + return self._model.time + + def get_time_step(self): + return self._model.time_step + + def get_time_units(self): + return self._time_units + + def get_grid_edge_count(self, grid): + raise NotImplementedError("get_grid_edge_count") + + def get_grid_edge_nodes(self, grid, edge_nodes): + raise NotImplementedError("get_grid_edge_nodes") + + def get_grid_face_count(self, grid): + raise NotImplementedError("get_grid_face_count") + + def get_grid_face_nodes(self, grid, face_nodes): + raise NotImplementedError("get_grid_face_nodes") + + def get_grid_node_count(self, grid): + """Number of grid nodes. + Parameters + ---------- + grid : int + Identifier of a grid. + Returns + ------- + int + Size of grid. + """ + return self.get_grid_size(grid) + + def get_grid_nodes_per_face(self, grid, nodes_per_face): + raise NotImplementedError("get_grid_nodes_per_face") + + def get_grid_face_edges(self, grid, face_edges): + raise NotImplementedError("get_grid_face_edges") + + def get_grid_x(self, grid, x): + raise NotImplementedError("get_grid_x") + + def get_grid_y(self, grid, y): + raise NotImplementedError("get_grid_y") + + def get_grid_z(self, grid, z): + raise NotImplementedError("get_grid_z") + + def _parse_config(self, cfg): + cfg_list = [cfg.get('flag'),cfg.get('file')] + return cfg_list \ No newline at end of file diff --git a/run-troute-with-bmi.ipynb b/run-troute-with-bmi.ipynb new file mode 100644 index 000000000..d9f64632e --- /dev/null +++ b/run-troute-with-bmi.ipynb @@ -0,0 +1,1502 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7b663e55-9edb-40a7-ae1d-380880c6d077", + "metadata": {}, + "source": [ + "Basic Model Interface (BMI) for streamflow prediction using Long Short-Term Memory (LSTM) networks" + ] + }, + { + "cell_type": "markdown", + "id": "9d8b1e3b-38e3-421a-b7d0-beafca9c853e", + "metadata": {}, + "source": [ + "This t-route network was developed for use in the Next Generation National Water Model (Nextgen). Nextgen runs models with Basic Model Interface (BMI)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0708364e-4ecf-4fb1-bad4-78ec60c9a1c3", + "metadata": {}, + "outputs": [], + "source": [ + "import bmi_troute # This is the BMI t-route that we will be running from the file: bmi_troute.py \n", + "import troute.bmi_utilities as bu" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a53b4945-7966-4df4-a788-fe997fb711f7", + "metadata": {}, + "outputs": [], + "source": [ + "model = bmi_troute.bmi_troute()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a2ededa4-6bd9-474a-b014-f104867428f7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "creating supernetwork connections set\n", + "supernetwork connections set complete\n", + "... in 41.17275857925415 seconds.\n", + "setting waterbody and channel initial states ...\n", + "waterbody and channel initial states complete\n", + "... in 0.14920902252197266 seconds.\n" + ] + } + ], + "source": [ + "model.initialize(bmi_cfg_file='bmi_config_files/standard_AnA.yml')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d3661d08-1340-4765-a676-53ca361d72ba", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:15:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:30:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:45:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_17:00:00.15min.usgsTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:00:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:15:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:30:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:45:00.15min.usaceTimeSlice.ncdf\n", + "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_17:00:00.15min.usaceTimeSlice.ncdf\n" + ] + } + ], + "source": [ + "model.build_run_sets()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "954fe3a0-e75f-4629-af6d-5b8ba9e9428c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'qlat_files': ['202108241400.CHRTOUT_DOMAIN1'],\n", + " 'nts': 12,\n", + " 'final_timestamp': datetime.datetime(2021, 8, 24, 14, 0)},\n", + " {'qlat_files': ['202108241500.CHRTOUT_DOMAIN1'],\n", + " 'nts': 12,\n", + " 'final_timestamp': datetime.datetime(2021, 8, 24, 15, 0)},\n", + " {'qlat_files': ['202108241600.CHRTOUT_DOMAIN1'],\n", + " 'nts': 12,\n", + " 'final_timestamp': datetime.datetime(2021, 8, 24, 16, 0)}]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model._run_sets" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f7557746-f162-42df-997b-99364291db86", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'qlat_files': ['202108241400.CHRTOUT_DOMAIN1'],\n", + " 'nts': 12,\n", + " 'final_timestamp': datetime.datetime(2021, 8, 24, 14, 0)},\n", + " {'qlat_files': ['202108241500.CHRTOUT_DOMAIN1'],\n", + " 'nts': 12,\n", + " 'final_timestamp': datetime.datetime(2021, 8, 24, 15, 0)},\n", + " {'qlat_files': ['202108241600.CHRTOUT_DOMAIN1'],\n", + " 'nts': 12,\n", + " 'final_timestamp': datetime.datetime(2021, 8, 24, 16, 0)}]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_sets" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e80d26ac-8ecd-4a33-9d9d-48b46e1bb26f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'usgs_timeslice_files': ['2021-08-23_00:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:45:00.15min.usgsTimeSlice.ncdf'],\n", + " 'usace_timeslice_files': ['2021-08-23_14:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:45:00.15min.usaceTimeSlice.ncdf']},\n", + " {'usgs_timeslice_files': ['2021-08-23_00:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:45:00.15min.usgsTimeSlice.ncdf'],\n", + " 'usace_timeslice_files': ['2021-08-23_14:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:45:00.15min.usaceTimeSlice.ncdf']},\n", + " {'usgs_timeslice_files': ['2021-08-23_00:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_00:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_01:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_02:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_03:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_04:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_05:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_06:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_07:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_08:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_09:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_10:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_11:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_12:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_13:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_14:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_15:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_16:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_17:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_18:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_19:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_20:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_21:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_22:45:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:00:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:15:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:30:00.15min.usgsTimeSlice.ncdf',\n", + " '2021-08-23_23:45:00.15min.usgsTimeSlice.ncdf'],\n", + " 'usace_timeslice_files': ['2021-08-23_14:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_14:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_15:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_16:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_17:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_18:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_19:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_20:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_21:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_22:45:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:00:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:15:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:30:00.15min.usaceTimeSlice.ncdf',\n", + " '2021-08-23_23:45:00.15min.usaceTimeSlice.ncdf']}]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "da_sets" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "139a9743-6a5f-4977-ba58-13ae22ce4e40", + "metadata": {}, + "outputs": [], + "source": [ + "test = tr.build_forcings(model._network, run_sets[0], model._forcing_parameters, model._hybrid_parameters, model._compute_parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e71a7f52-8bd2-44b5-950e-bc9e6de515ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "990e5f3b-effd-424c-9192-67adb47bc477", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'streamflow_cms': 'land_surface_water__runoff_volume_flux',\n", + " 'streamflow_m': 'channel_water__mean_depth'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "4bc75353-2786-4ef1-aeed-3c1da32b457b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['land_surface_water__runoff_volume_flux']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "cd0ed566-4749-4b81-b527-f5b6177f0fb9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['channel_exit_water_x-section__volume_flow_rate', 'channel_water__mean_depth']" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "5c098082-f3ab-4426-95c4-e5a06efe760e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca782efb-6982-4c36-9091-3e64d952413c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:miniconda3]", + "language": "python", + "name": "conda-env-miniconda3-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/troute-network/troute/bmi_utilities.py b/src/troute-network/troute/bmi_utilities.py new file mode 100644 index 000000000..22d3c0078 --- /dev/null +++ b/src/troute-network/troute/bmi_utilities.py @@ -0,0 +1,340 @@ +import json +import pathlib +import numpy as np +import pandas as pd +from datetime import datetime, timedelta + +import troute.nhd_io as nhd_io + +def build_run_sets(model): + + # Create run_sets: sets of forcing files for each loop + run_sets = build_forcing_sets(model._forcing_parameters, model._network.t0) + + # Create da_sets: sets of TimeSlice files for each loop + if "data_assimilation_parameters" in model._compute_parameters: + da_sets = build_da_sets(model._data_assimilation_parameters, run_sets, model._network.t0) + + # Create parity_sets: sets of CHRTOUT files against which to compare t-route flows + if "wrf_hydro_parity_check" in model._output_parameters: + parity_sets = build_parity_sets(model._parity_parameters, run_sets) + else: + parity_sets = [] + + return run_sets, da_sets, parity_sets + +def build_forcings(network, run, forcing_parameters, hybrid_parameters, compute_parameters): + + cpu_pool = compute_parameters.get('cpu_pool', None) + # Create forcing data within network object for first loop iteration + network.assemble_forcings(run, forcing_parameters, hybrid_parameters, cpu_pool) + + return network + +def build_data_assimilation(network, data_assimilation_parameters, waterbody_parameters, da_run, forcing_parameters, compute_parameters): + + #FIXME: hack to get run_parameters. This is done in input_handler_v2. Probably need + # to find a better way to do this here though... + if not 'run_parameters' in locals(): + run_parameters = {'dt': forcing_parameters.get('dt'), + 'nts': forcing_parameters.get('nts'), + 'cpu_pool': compute_parameters.get('cpu_pool', None)} + + # Create data assimilation object from da_sets for first loop iteration + data_assimilation = AllDA(data_assimilation_parameters, + run_parameters, + waterbody_parameters, + network, + da_run) + +# if showtiming: +# forcing_end_time = time.time() +# task_times['forcing_time'] += forcing_end_time - network_end_time + + return data_assimilation + +def build_forcing_sets( + forcing_parameters, + t0 +): + + run_sets = forcing_parameters.get("qlat_forcing_sets", None) + qlat_input_folder = forcing_parameters.get("qlat_input_folder", None) + nts = forcing_parameters.get("nts", None) + max_loop_size = forcing_parameters.get("max_loop_size", 12) + dt = forcing_parameters.get("dt", None) + + try: + qlat_input_folder = pathlib.Path(qlat_input_folder) + assert qlat_input_folder.is_dir() == True + except TypeError: + raise TypeError("Aborting simulation because no qlat_input_folder is specified in the forcing_parameters section of the .yaml control file.") from None + except AssertionError: + raise AssertionError("Aborting simulation because the qlat_input_folder:", qlat_input_folder,"does not exist. Please check the the qlat_input_folder variable is correctly entered in the .yaml control file") from None + + forcing_glob_filter = forcing_parameters.get("qlat_file_pattern_filter", "*.CHRTOUT_DOMAIN1") + + # TODO: Throw errors if insufficient input data are available + + if run_sets: + + # append final_timestamp variable to each set_list + qlat_input_folder = pathlib.Path(qlat_input_folder) + for (s, _) in enumerate(run_sets): + final_chrtout = qlat_input_folder.joinpath(run_sets[s]['qlat_files' + ][-1]) + final_timestamp_str = nhd_io.get_param_str(final_chrtout, + 'model_output_valid_time') + run_sets[s]['final_timestamp'] = \ + datetime.strptime(final_timestamp_str, '%Y-%m-%d_%H:%M:%S') + + elif qlat_input_folder: + + # Construct run_set dictionary from user-specified parameters + + # get the first and seconded files from an ordered list of all forcing files + qlat_input_folder = pathlib.Path(qlat_input_folder) + all_files = sorted(qlat_input_folder.glob(forcing_glob_filter)) + first_file = all_files[0] + second_file = all_files[1] + + # Deduce the timeinterval of the forcing data from the output timestamps of the first + # two ordered CHRTOUT files + t1 = nhd_io.get_param_str(first_file, "model_output_valid_time") + t1 = datetime.strptime(t1, "%Y-%m-%d_%H:%M:%S") + t2 = nhd_io.get_param_str(second_file, "model_output_valid_time") + t2 = datetime.strptime(t2, "%Y-%m-%d_%H:%M:%S") + dt_qlat_timedelta = t2 - t1 + dt_qlat = dt_qlat_timedelta.seconds + + # determine qts_subdivisions + qts_subdivisions = dt_qlat / dt + if dt_qlat % dt == 0: + qts_subdivisions = dt_qlat / dt + + # the number of files required for the simulation + nfiles = int(np.ceil(nts / qts_subdivisions)) + + # list of forcing file datetimes + datetime_list = [t0 + dt_qlat_timedelta * (n + 1) for n in + range(nfiles)] + datetime_list_str = [datetime.strftime(d, '%Y%m%d%H%M') for d in + datetime_list] + + # list of forcing files + forcing_filename_list = [d_str + ".CHRTOUT_DOMAIN1" for d_str in + datetime_list_str] + + # check that all forcing files exist + for f in forcing_filename_list: + try: + J = pathlib.Path(qlat_input_folder.joinpath(f)) + assert J.is_file() == True + except AssertionError: + raise AssertionError("Aborting simulation because forcing file", J, "cannot be not found.") from None + + # build run sets list + run_sets = [] + k = 0 + j = 0 + nts_accum = 0 + nts_last = 0 + while k < len(forcing_filename_list): + run_sets.append({}) + + if k + max_loop_size < len(forcing_filename_list): + run_sets[j]['qlat_files'] = forcing_filename_list[k:k + + max_loop_size] + else: + run_sets[j]['qlat_files'] = forcing_filename_list[k:] + + nts_accum += len(run_sets[j]['qlat_files']) * qts_subdivisions + if nts_accum <= nts: + run_sets[j]['nts'] = int(len(run_sets[j]['qlat_files']) + * qts_subdivisions) + else: + run_sets[j]['nts'] = int(nts - nts_last) + + final_chrtout = qlat_input_folder.joinpath(run_sets[j]['qlat_files' + ][-1]) + final_timestamp_str = nhd_io.get_param_str(final_chrtout, + 'model_output_valid_time') + run_sets[j]['final_timestamp'] = \ + datetime.strptime(final_timestamp_str, '%Y-%m-%d_%H:%M:%S') + + nts_last = nts_accum + k += max_loop_size + j += 1 + + return run_sets + +def build_da_sets(da_params, run_sets, t0): + """ + Create set lists of USGS and/or USACE TimeSlice files used for + streamflow and reservoir data assimilation + + Arguments + -------- + - da_params (dict): user-input data assimilation parameters + - run_sets (list) : forcing files for each run set in the simlation + - t0 (datetime) : model initialization time + + Returns + ------- + - da_sets (list) : lists of USGS and USACE TimeSlice files for each run set + in the simulation + + Notes + ----- + + """ + + # check for user-input usgs and usace timeslice directories + usgs_timeslices_folder = da_params.get( + "usgs_timeslices_folder", + None + ) + usace_timeslices_folder = da_params.get( + "usace_timeslices_folder", + None + ) + + # User-specified DA ON/OFF preferences + usace_da = False + usgs_da = False + reservoir_da = da_params.get('reservoir_da', False) + if reservoir_da: + usgs_da = reservoir_da.get('reservoir_persistence_usgs', False) + usace_da = reservoir_da.get('reservoir_persistence_usace', False) + + nudging = False + streamflow_da = da_params.get('streamflow_da', False) + if streamflow_da: + nudging = streamflow_da.get('streamflow_nudging', False) + + if not usgs_da and not usace_da and not nudging: + # if all DA capabilities are OFF, return empty dictionary + da_sets = [{} for _ in run_sets] + + # if no user-input timeslice folders, a list of empty dictionaries + elif not usgs_timeslices_folder and not usace_timeslices_folder: + # if no timeslice folders, return empty dictionary + da_sets = [{} for _ in run_sets] + + # if user-input timeslice folders are present, build TimeSlice sets + else: + + # create Path objects for each TimeSlice directory + if usgs_timeslices_folder: + usgs_timeslices_folder = pathlib.Path(usgs_timeslices_folder) + if usace_timeslices_folder: + usace_timeslices_folder = pathlib.Path(usace_timeslices_folder) + + # the number of timeslice files appended to the front- and back-ends + # of the TimeSlice file interpolation stack + pad_hours = da_params.get("timeslice_lookback_hours",0) + timeslice_pad = pad_hours * 4 # number of 15 minute TimeSlices in the pad + + # timedelta of TimeSlice data - typically 15 minutes + dt_timeslice = timedelta(minutes = 15) + + da_sets = [] # initialize list to store TimeSlice set lists + + # Loop through each run set and build lists of available TimeSlice files + for (i, set_dict) in enumerate(run_sets): + + # Append an empty dictionary to the loop, which be used to hold + # lists of USGS and USACE TimeSlice files. + da_sets.append({}) + + # timestamps of TimeSlice files desired for run set i + timestamps = pd.date_range( + t0 - dt_timeslice * timeslice_pad, + run_sets[i]['final_timestamp'] + dt_timeslice * 4, + freq=dt_timeslice + ) + + # identify available USGS TimeSlices in run set i + if (usgs_timeslices_folder and nudging) or (usgs_timeslices_folder and usgs_da): + filenames_usgs = (timestamps.strftime('%Y-%m-%d_%H:%M:%S') + + '.15min.usgsTimeSlice.ncdf').to_list() + + # identify available USGS TimeSlices + filenames_usgs = _check_timeslice_exists( + filenames_usgs, + usgs_timeslices_folder + ) + + # Add available TimeSlices to da_sets list + da_sets[i]['usgs_timeslice_files'] = filenames_usgs + + # identify available USACE TimeSlices in run set i + if usace_timeslices_folder and usace_da: + filenames_usace = (timestamps.strftime('%Y-%m-%d_%H:%M:%S') + + '.15min.usaceTimeSlice.ncdf').to_list() + + # identify available USACE TimeSlices + filenames_usace = _check_timeslice_exists( + filenames_usace, + usace_timeslices_folder + ) + + # Add available TimeSlices to da_sets list + da_sets[i]['usace_timeslice_files'] = filenames_usace + + # reset initialization time for loop set i+1 + t0 = run_sets[i]['final_timestamp'] + + return da_sets + +def build_parity_sets(parity_parameters, run_sets): + + parity_sets = parity_parameters.get("parity_check_compare_file_sets", None) + + if parity_sets: + pass + + else: + + parity_sets = [] + for (i, set_dict) in enumerate(run_sets): + parity_sets.append({}) + parity_sets[i]['validation_files'] = run_sets[i]['qlat_files'] + + return parity_sets + +def _check_timeslice_exists(filenames, timeslices_folder): + """ + Check that each TimeSlice file in a list of files exists. Return a list of + available files. + + Arguments + --------- + - filenames (list of str): TimeSlice filenames + - timeslices_folder (pathlib.PosixPath): TimeSlice directory + + Returns + ------- + - filenames_existing (list of chr): Existing TimeSlice filenames in + TimeSlice directory + + Notes + ----- + - This is a utility function used by build_da_sets + + """ + + # check that all USGS TimeSlice files in the set actually exist + drop_list = [] + for f in filenames: + try: + J = pathlib.Path(timeslices_folder.joinpath(f)) + assert J.is_file() == True + except AssertionError: + #LOG.warning("Missing TimeSlice file %s", J) + drop_list.append(f) + + # Assemble a list of existing TimeSlice files, only + filenames_existing = [x for x in filenames if x not in drop_list] + + return filenames_existing \ No newline at end of file diff --git a/src/troute-network/troute/main_utilities.py b/src/troute-network/troute/main_utilities.py new file mode 100644 index 000000000..586718344 --- /dev/null +++ b/src/troute-network/troute/main_utilities.py @@ -0,0 +1,506 @@ +import argparse +import time +#from .input import _input_handler_v03 +import troute.nhd_network_utilities_v02 as nnu +import troute.nhd_io as nhd_io + +#from .output import nwm_output_generator +from troute.NHDNetwork import NHDNetwork +from troute.HYFeaturesNetwork import HYFeaturesNetwork +from troute.routing.compute import compute_nhd_routing_v02, compute_diffusive_routing + +def initialize_network(argv): + + args = _handle_args_v03(argv) + + # unpack user inputs + ( + log_parameters, + preprocessing_parameters, + supernetwork_parameters, + waterbody_parameters, + compute_parameters, + forcing_parameters, + restart_parameters, + hybrid_parameters, + output_parameters, + parity_parameters, + data_assimilation_parameters, + ) = _input_handler_v03(args) + + run_parameters = { + 'dt': forcing_parameters.get('dt'), + 'nts': forcing_parameters.get('nts'), + 'cpu_pool': compute_parameters.get('cpu_pool') + } + + showtiming = log_parameters.get("showtiming", None) + if showtiming: + task_times = {} + task_times['forcing_time'] = 0 + task_times['route_time'] = 0 + task_times['output_time'] = 0 + main_start_time = time.time() + + cpu_pool = compute_parameters.get("cpu_pool", None) + + # Build routing network data objects. Network data objects specify river + # network connectivity, channel geometry, and waterbody parameters. Also + # perform initial warmstate preprocess. + if showtiming: + network_start_time = time.time() + + if "ngen_nexus_file" in supernetwork_parameters: + network = HYFeaturesNetwork(supernetwork_parameters, + waterbody_parameters=waterbody_parameters, + restart_parameters=restart_parameters, + forcing_parameters=forcing_parameters, + verbose=verbose, showtiming=showtiming) + else: + network = NHDNetwork(supernetwork_parameters=supernetwork_parameters, + waterbody_parameters=waterbody_parameters, + restart_parameters=restart_parameters, + forcing_parameters=forcing_parameters, + compute_parameters=compute_parameters, + data_assimilation_parameters=data_assimilation_parameters, + preprocessing_parameters=preprocessing_parameters, + verbose=True, + showtiming=showtiming, + ) + + if showtiming: + network_end_time = time.time() + task_times['network_time'] = network_end_time - network_start_time + + all_parameters = [log_parameters, + preprocessing_parameters, + supernetwork_parameters, + waterbody_parameters, + compute_parameters, + forcing_parameters, + restart_parameters, + hybrid_parameters, + output_parameters, + parity_parameters, + data_assimilation_parameters, + run_parameters + ] + + return network, log_parameters, preprocessing_parameters, supernetwork_parameters, waterbody_parameters, compute_parameters, forcing_parameters, restart_parameters, hybrid_parameters, output_parameters, parity_parameters, data_assimilation_parameters, run_parameters + +def build_run_sets(network, forcing_parameters, compute_parameters, data_assimilation_parameters, + output_parameters, parity_parameters): + + # Create run_sets: sets of forcing files for each loop + run_sets = nnu.build_forcing_sets(forcing_parameters, network.t0) + + # Create da_sets: sets of TimeSlice files for each loop + if "data_assimilation_parameters" in compute_parameters: + da_sets = nnu.build_da_sets(data_assimilation_parameters, run_sets, network.t0) + + # Create parity_sets: sets of CHRTOUT files against which to compare t-route flows + if "wrf_hydro_parity_check" in output_parameters: + parity_sets = nnu.build_parity_sets(parity_parameters, run_sets) + else: + parity_sets = [] + + return run_sets, da_sets, parity_sets + +def build_forcings(network, run, forcing_parameters, hybrid_parameters, compute_parameters): + + cpu_pool = compute_parameters.get('cpu_pool', None) + # Create forcing data within network object for first loop iteration + network.assemble_forcings(run, forcing_parameters, hybrid_parameters, cpu_pool) + + return network + +def build_data_assimilation(network, data_assimilation_parameters, waterbody_parameters, da_run, forcing_parameters, compute_parameters): + + #FIXME: hack to get run_parameters. This is done in input_handler_v2. Probably need + # to find a better way to do this here though... + if not 'run_parameters' in locals(): + run_parameters = {'dt': forcing_parameters.get('dt'), + 'nts': forcing_parameters.get('nts'), + 'cpu_pool': compute_parameters.get('cpu_pool', None)} + + # Create data assimilation object from da_sets for first loop iteration + data_assimilation = AllDA(data_assimilation_parameters, + run_parameters, + waterbody_parameters, + network, + da_run) + +# if showtiming: +# forcing_end_time = time.time() +# task_times['forcing_time'] += forcing_end_time - network_end_time + + return data_assimilation + +def run_routing(network, data_assimliation, run_sets, compute_parameters, forcing_parameters, waterbody_parameters, + output_parameters, parity_sets): + ''' + + ''' + parallel_compute_method = compute_parameters.get("parallel_compute_method", None) + subnetwork_target_size = compute_parameters.get("subnetwork_target_size", 1) + qts_subdivisions = forcing_parameters.get("qts_subdivisions", 1) + compute_kernel = compute_parameters.get("compute_kernel", "V02-caching") + assume_short_ts = compute_parameters.get("assume_short_ts", False) + return_courant = compute_parameters.get("return_courant", False) + + # Pass empty subnetwork list to nwm_route. These objects will be calculated/populated + # on first iteration of for loop only. For additional loops this will be passed + # to function from inital loop. + subnetwork_list = [None, None, None] + + for run_set_iterator, run in enumerate(run_sets): + + t0 = run.get("t0") + dt = run.get("dt") + nts = run.get("nts") + + if parity_sets: + parity_sets[run_set_iterator]["dt"] = dt + parity_sets[run_set_iterator]["nts"] = nts + + if showtiming: + route_start_time = time.time() + + run_results = nwm_route( + network.connections, + network.rconn, + network.wbody_conn, + network.reaches_by_tw, + parallel_compute_method, + compute_kernel, + subnetwork_target_size, + compute_parameters.get('cpu_pool', None), + network.t0, + dt, + nts, + qts_subdivisions, + network.independent_networks, + network.param_df, + network.q0, + network.qlats, + data_assimilation.usgs_df, + data_assimilation.lastobs_df, + data_assimilation.reservoir_usgs_df, + data_assimilation.reservoir_usgs_param_df, + data_assimilation.reservoir_usace_df, + data_assimilation.reservoir_usace_param_df, + data_assimilation.assimilation_parameters, + assume_short_ts, + return_courant, + network.waterbody_df, + waterbody_parameters, + network.waterbody_types_df, + network.waterbody_type_specified, + network.diffusive_network_data, + network.topobathy, + network.refactored_diffusive_domain, + network.refactored_reaches, + subnetwork_list, + network.coastal_boundary_depth_df, + network.nonrefactored_topobathy, + ) + + # returns list, first item is run result, second item is subnetwork items + subnetwork_list = run_results[1] + run_results = run_results[0] + + if showtiming: + route_end_time = time.time() + task_times['route_time'] += route_end_time - route_start_time + + # create initial conditions for next loop itteration + network.new_nhd_q0(run_results) + network.update_waterbody_water_elevation() + + if run_set_iterator < len(run_sets) - 1: + # update t0 + network.new_t0(dt,nts) + + # update forcing data + network.assemble_forcings(run_sets[run_set_iterator + 1], + forcing_parameters, + hybrid_parameters, + cpu_pool) + + # get reservoir DA initial parameters for next loop iteration + data_assimilation.update(run_results, + data_assimilation_parameters, + run_parameters, + network, + da_sets[run_set_iterator + 1]) + + if showtiming: + forcing_end_time = time.time() + task_times['forcing_time'] += forcing_end_time - route_end_time + + # TODO move the conditional call to write_lite_restart to nwm_output_generator. + if showtiming: + output_start_time = time.time() + + if "lite_restart" in output_parameters: + nhd_io.write_lite_restart( + network.q0, + network.waterbody_df, + t0 + timedelta(seconds = dt * nts), + output_parameters['lite_restart'] + ) + + nwm_output_generator( + run, + run_results, + supernetwork_parameters, + output_parameters, + parity_parameters, + restart_parameters, + parity_sets[run_set_iterator] if parity_parameters else {}, + qts_subdivisions, + compute_parameters.get("return_courant", False), + cpu_pool, + network.waterbody_df, + network.waterbody_types_df, + data_assimilation_parameters, + data_assimilation.lastobs_df, + network.link_gage_df, + network.link_lake_crosswalk, + ) + + if showtiming: + output_end_time = time.time() + task_times['output_time'] += output_end_time - output_start_time + + +def _handle_args_v03(argv): + ''' + Handle command line input argument - filepath of configuration file + ''' + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument( + "-f", + "--custom-input-file", + dest="custom_input_file", + help="Path of a .yaml or .json file containing model configuration parameters. See doc/v3_doc.yaml", + ) + + return parser.parse_args(argv) + +def _input_handler_v03(args): + + ''' + Read user inputs from configuration file and set logging level + + Arguments + --------- + Args (argparse.Namespace): Command line input arguments + + Returns + ------- + log_parameters (dict): Input parameters re logging + preprocessing_parameters (dict): Input parameters re preprocessing + supernetwork_parameters (dict): Input parameters re network extent + waterbody_parameters (dict): Input parameters re waterbodies + compute_parameters (dict): Input parameters re computation settings + forcing_parameters (dict): Input parameters re model forcings + restart_parameters (dict): Input parameters re model restart + hybrid_parameters (dict): Input parameters re MC/diffusive wave model + output_parameters (dict): Input parameters re output writing + parity_parameters (dict): Input parameters re parity assessment + data_assimilation_parameters (dict): Input parameters re data assimilation + ''' + # get name of user configuration file (e.g. test.yaml) + custom_input_file = args.custom_input_file + + # read data from user configuration file + ( + log_parameters, + preprocessing_parameters, + supernetwork_parameters, + waterbody_parameters, + compute_parameters, + forcing_parameters, + restart_parameters, + hybrid_parameters, + output_parameters, + parity_parameters, + data_assimilation_parameters, + ) = nhd_io.read_config_file(custom_input_file) + + ''' + # configure python logger + log_level_set(log_parameters) + LOG = logging.getLogger('') + + # if log level is at or below DEBUG, then check user inputs + if LOG.level <= 10: # DEBUG + check_inputs( + log_parameters, + preprocessing_parameters, + supernetwork_parameters, + waterbody_parameters, + compute_parameters, + forcing_parameters, + restart_parameters, + hybrid_parameters, + output_parameters, + parity_parameters, + data_assimilation_parameters + ) + ''' + return ( + log_parameters, + preprocessing_parameters, + supernetwork_parameters, + waterbody_parameters, + compute_parameters, + forcing_parameters, + restart_parameters, + hybrid_parameters, + output_parameters, + parity_parameters, + data_assimilation_parameters, + ) + +def nwm_route( + downstream_connections, + upstream_connections, + waterbodies_in_connections, + reaches_bytw, + parallel_compute_method, + compute_kernel, + subnetwork_target_size, + cpu_pool, + t0, + dt, + nts, + qts_subdivisions, + independent_networks, + param_df, + q0, + qlats, + usgs_df, + lastobs_df, + reservoir_usgs_df, + reservoir_usgs_param_df, + reservoir_usace_df, + reservoir_usace_param_df, + da_parameter_dict, + assume_short_ts, + return_courant, + waterbodies_df, + waterbody_parameters, + waterbody_types_df, + waterbody_type_specified, + diffusive_network_data, + topobathy, + refactored_diffusive_domain, + refactored_reaches, + subnetwork_list, + coastal_boundary_depth_df, + nonrefactored_topobathy, +): + + ################### Main Execution Loop across ordered networks + + + start_time = time.time() + + if return_courant: + LOG.info( + f"executing routing computation, with Courant evaluation metrics returned" + ) + else: + LOG.info(f"executing routing computation ...") + + start_time_mc = time.time() + results = compute_nhd_routing_v02( + downstream_connections, + upstream_connections, + waterbodies_in_connections, + reaches_bytw, + compute_kernel, + parallel_compute_method, + subnetwork_target_size, # The default here might be the whole network or some percentage... + cpu_pool, + t0, + dt, + nts, + qts_subdivisions, + independent_networks, + param_df, + q0, + qlats, + usgs_df, + lastobs_df, + reservoir_usgs_df, + reservoir_usgs_param_df, + reservoir_usace_df, + reservoir_usace_param_df, + da_parameter_dict, + assume_short_ts, + return_courant, + waterbodies_df, + waterbody_parameters, + waterbody_types_df, + waterbody_type_specified, + subnetwork_list, + ) + LOG.debug("MC computation complete in %s seconds." % (time.time() - start_time_mc)) + # returns list, first item is run result, second item is subnetwork items + subnetwork_list = results[1] + results = results[0] + + # run diffusive side of a hybrid simulation + if diffusive_network_data: + start_time_diff = time.time() + ''' + # retrieve MC-computed streamflow value at upstream boundary of diffusive mainstem + qvd_columns = pd.MultiIndex.from_product( + [range(nts), ["q", "v", "d"]] + ).to_flat_index() + flowveldepth = pd.concat( + [pd.DataFrame(r[1], index=r[0], columns=qvd_columns) for r in results], + copy=False, + ) + ''' + #upstream_boundary_flow={} + #for tw,v in diffusive_network_data.items(): + # upstream_boundary_link = diffusive_network_data[tw]['upstream_boundary_link'] + # flow_ = flowveldepth.loc[upstream_boundary_link][0::3] + # the very first value at time (0,q) is flow value at the first time step after initial time. + # upstream_boundary_flow[tw] = flow_ + + + # call diffusive wave simulation and append results to MC results + results.extend( + compute_diffusive_routing( + results, + diffusive_network_data, + cpu_pool, + t0, + dt, + nts, + q0, + qlats, + qts_subdivisions, + usgs_df, + lastobs_df, + da_parameter_dict, + waterbodies_df, + topobathy, + refactored_diffusive_domain, + refactored_reaches, + coastal_boundary_depth_df, + nonrefactored_topobathy, + ) + ) + LOG.debug("Diffusive computation complete in %s seconds." % (time.time() - start_time_diff)) + + LOG.debug("ordered reach computation complete in %s seconds." % (time.time() - start_time)) + + return results, subnetwork_list diff --git a/src/troute-nwm/src/nwm_routing/__main__.py b/src/troute-nwm/src/nwm_routing/__main__.py index 596261af6..45d869c67 100644 --- a/src/troute-nwm/src/nwm_routing/__main__.py +++ b/src/troute-nwm/src/nwm_routing/__main__.py @@ -37,10 +37,8 @@ ''' def main_v04(argv): - args = _handle_args_v03(argv) - - # unpack user inputs ( + network, log_parameters, preprocessing_parameters, supernetwork_parameters, @@ -52,67 +50,22 @@ def main_v04(argv): output_parameters, parity_parameters, data_assimilation_parameters, - ) = _input_handler_v03(args) - - run_parameters = { - 'dt': forcing_parameters.get('dt'), - 'nts': forcing_parameters.get('nts'), - 'cpu_pool': compute_parameters.get('cpu_pool') - } - - showtiming = log_parameters.get("showtiming", None) - if showtiming: - task_times = {} - task_times['forcing_time'] = 0 - task_times['route_time'] = 0 - task_times['output_time'] = 0 - main_start_time = time.time() - - cpu_pool = compute_parameters.get("cpu_pool", None) - - # Build routing network data objects. Network data objects specify river - # network connectivity, channel geometry, and waterbody parameters. Also - # perform initial warmstate preprocess. - if showtiming: - network_start_time = time.time() - - if "ngen_nexus_file" in supernetwork_parameters: - network = HYFeaturesNetwork(supernetwork_parameters, - waterbody_parameters=waterbody_parameters, - restart_parameters=restart_parameters, - forcing_parameters=forcing_parameters, - verbose=verbose, showtiming=showtiming) - else: - network = NHDNetwork(supernetwork_parameters, - waterbody_parameters, - restart_parameters, - forcing_parameters, - compute_parameters, - data_assimilation_parameters, - preprocessing_parameters, - verbose=True, - showtiming=showtiming, - ) - - if showtiming: - network_end_time = time.time() - task_times['network_creation_time'] = network_end_time - network_start_time + run_parameters + ) = mu.initialize_network(argv) - # Create run_sets: sets of forcing files for each loop - run_sets = nnu.build_forcing_sets(forcing_parameters, network.t0) - - # Create da_sets: sets of TimeSlice files for each loop - if "data_assimilation_parameters" in compute_parameters: - da_sets = nnu.build_da_sets(data_assimilation_parameters, run_sets, network.t0) - - # Create parity_sets: sets of CHRTOUT files against which to compare t-route flows - if "wrf_hydro_parity_check" in output_parameters: - parity_sets = nnu.build_parity_sets(parity_parameters, run_sets) - else: - parity_sets = [] + ( + run_sets, + da_sets, + parity_sets + ) = mu.build_run_sets(network, + forcing_parameters, + compute_parameters, + data_assimilation_parameters, + output_parameters, + parity_parameters) # Create forcing data within network object for first loop iteration - network.assemble_forcings(run_sets[0], forcing_parameters, hybrid_parameters, cpu_pool) + network.assemble_forcings(run_sets[0], forcing_parameters, hybrid_parameters, compute_parameters.get('cpu_pool', None)) # Create data assimilation object from da_sets for first loop iteration data_assimilation = AllDA(data_assimilation_parameters, @@ -121,142 +74,14 @@ def main_v04(argv): network, da_sets[0]) - if showtiming: - forcing_end_time = time.time() - task_times['forcing_time'] += forcing_end_time - network_end_time - - - parallel_compute_method = compute_parameters.get("parallel_compute_method", None) - subnetwork_target_size = compute_parameters.get("subnetwork_target_size", 1) - qts_subdivisions = forcing_parameters.get("qts_subdivisions", 1) - compute_kernel = compute_parameters.get("compute_kernel", "V02-caching") - assume_short_ts = compute_parameters.get("assume_short_ts", False) - return_courant = compute_parameters.get("return_courant", False) - - # Pass empty subnetwork list to nwm_route. These objects will be calculated/populated - # on first iteration of for loop only. For additional loops this will be passed - # to function from inital loop. - subnetwork_list = [None, None, None] - - for run_set_iterator, run in enumerate(run_sets): - - t0 = run.get("t0") - dt = run.get("dt") - nts = run.get("nts") - - if parity_sets: - parity_sets[run_set_iterator]["dt"] = dt - parity_sets[run_set_iterator]["nts"] = nts - - if showtiming: - route_start_time = time.time() - - run_results = nwm_route( - network.connections, - network.reverse_network, - network.waterbody_connections, - network._reaches_by_tw, ## check: def name is different from return self._ .. - parallel_compute_method, - compute_kernel, - subnetwork_target_size, - cpu_pool, - network.t0, ## check if t0 is being updated - dt, - nts, - qts_subdivisions, - network.independent_networks, - network.dataframe, - network.q0, - network._qlateral, - data_assimilation.usgs_df, - data_assimilation.lastobs_df, - data_assimilation.reservoir_usgs_df, - data_assimilation.reservoir_usgs_param_df, - data_assimilation.reservoir_usace_df, - data_assimilation.reservoir_usace_param_df, - data_assimilation.assimilation_parameters, - assume_short_ts, - return_courant, - network._waterbody_df, ## check: network._waterbody_df ?? def name is different from return self._ .. - waterbody_parameters, - network._waterbody_types_df, ## check: network._waterbody_types_df ?? def name is different from return self._ .. - network.waterbody_type_specified, - network.diffusive_network_data, - network.topobathy_df, - network.refactored_diffusive_domain, - network.refactored_reaches, - subnetwork_list, - network.coastal_boundary_depth_df, - network.unrefactored_topobathy_df, - ) - - # returns list, first item is run result, second item is subnetwork items - subnetwork_list = run_results[1] - run_results = run_results[0] - - if showtiming: - route_end_time = time.time() - task_times['route_time'] += route_end_time - route_start_time - - # create initial conditions for next loop itteration - network.new_nhd_q0(run_results) - network.update_waterbody_water_elevation() - - # TODO move the conditional call to write_lite_restart to nwm_output_generator. - if "lite_restart" in output_parameters: - nhd_io.write_lite_restart( - network.q0, - network._waterbody_df, - t0 + timedelta(seconds = dt * nts), - output_parameters['lite_restart'] - ) - - if run_set_iterator < len(run_sets) - 1: - # update t0 - network.new_t0(dt,nts) - - # update forcing data - network.assemble_forcings(run_sets[run_set_iterator + 1], - forcing_parameters, - hybrid_parameters, - cpu_pool) - - # get reservoir DA initial parameters for next loop iteration - data_assimilation.update(run_results, - data_assimilation_parameters, - run_parameters, - network, - da_sets[run_set_iterator + 1]) - - if showtiming: - forcing_end_time = time.time() - task_times['forcing_time'] += forcing_end_time - route_end_time - - if showtiming: - output_start_time = time.time() - - nwm_output_generator( - run, - run_results, - supernetwork_parameters, - output_parameters, - parity_parameters, - restart_parameters, - parity_sets[run_set_iterator] if parity_parameters else {}, - qts_subdivisions, - compute_parameters.get("return_courant", False), - cpu_pool, - network._waterbody_df, ## check: network._waterbody_df ?? def name is different from return self._ .. - network._waterbody_types_df, ## check: network._waterbody_types_df ?? def name is different from return self._ .. - data_assimilation_parameters, - data_assimilation.lastobs_df, - network.link_gage_df, - network.link_lake_crosswalk, - ) - - if showtiming: - output_end_time = time.time() - task_times['output_time'] += output_end_time - output_start_time + run_results = mu.run_routing(network, + data_assimliation, + run_sets, + compute_parameters, + forcing_parameters, + waterbody_parameters, + output_parameters, + parity_sets) if showtiming: task_times['total_time'] = time.time() - main_start_time From 938838726b2d7a6fe1f131a60f18de61e2bad1fe Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Thu, 6 Oct 2022 12:22:08 -0600 Subject: [PATCH 2/9] add get_value function --- bmi_troute.py | 104 +- run-troute-with-bmi.ipynb | 1796 +++++-------------- src/troute-network/troute/main_utilities.py | 204 ++- 3 files changed, 640 insertions(+), 1464 deletions(-) diff --git a/bmi_troute.py b/bmi_troute.py index cf081528f..79459378b 100644 --- a/bmi_troute.py +++ b/bmi_troute.py @@ -50,7 +50,12 @@ def __init__(self): # Output variable names (CSDMS standard names) #--------------------------------------------- _output_var_names = ['channel_exit_water_x-section__volume_flow_rate', - 'channel_water__mean_depth'] + 'channel_water_flow__speed', + 'channel_water__mean_depth', + 'lake_water~incoming__volume_flow_rate', + 'lake_water~outgoing__volume_flow_rate', + 'lake_surface__elevation' #FIXME: this variable isn't a standard CSDMS name...couldn't find one more appropriate + ] #------------------------------------------------------ # Create a Python dictionary that maps CSDMS Standard @@ -58,7 +63,11 @@ def __init__(self): #------------------------------------------------------ _var_name_units_map = { 'channel_exit_water_x-section__volume_flow_rate':['streamflow_cms','m3 s-1'], + 'channel_water_flow__speed':['streamflow_ms','m s-1'], 'channel_water__mean_depth':['streamflow_m','m'], + 'lake_water~incoming__volume_flow_rate':['waterbody_cms','m3 s-1'], + 'lake_water~outgoing__volume_flow_rate':['waterbody_cms','m3 s-1'], + 'lake_surface__elevation':['waterbody_m','m'], #-------------- Dynamic inputs -------------------------------- 'land_surface_water__runoff_volume_flux':['streamflow_cms','m3 s-1'] } @@ -121,27 +130,33 @@ def initialize(self, bmi_cfg_file=None): self._run_parameters, ) = tr.initialize_network(self._cfg_bmi) - def build_run_sets(self): - """ - Use input parameters to create lists of run_sets and da_sets. Lists will be of length - one if t-route looping is not needed, and greater than one if it is. - """ - # Create run_sets: sets of forcing files for each loop - self._run_sets = nnu.build_forcing_sets(self._forcing_parameters, self._network.t0) - - # Create da_sets: sets of TimeSlice files for each loop - if "data_assimilation_parameters" in self._compute_parameters: - self._da_sets = nnu.build_da_sets(self._data_assimilation_parameters, self._run_sets, self._network.t0) - - # Create parity_sets: sets of CHRTOUT files against which to compare t-route flows - if "wrf_hydro_parity_check" in self._output_parameters: - self._parity_sets = nnu.build_parity_sets(self._parity_parameters, self._run_sets) - else: - self._parity_sets = [] - def update(self): """Advance model by one time step.""" - self._model.advance_in_time() + self._run_results = tr.run_routing( + self._network, + self._data_assimilation, + self._run_sets, + self._da_sets, + self._compute_parameters, + self._forcing_parameters, + self._waterbody_parameters, + self._output_parameters, + self._hybrid_parameters, + self._data_assimilation_parameters, + self._run_parameters, + self._parity_sets) + + (self._values['channel_exit_water_x-section__volume_flow_rate'], + self._values['channel_water_flow__speed'], + self._values['channel_water__mean_depth'], + self._values['lake_water~incoming__volume_flow_rate'], + self._values['lake_water~outgoing__volume_flow_rate'], + self._values['lake_surface__elevation'], + ) = tr.create_output_dataframes( + self._run_results, + self._run_sets, + self._network._waterbody_df, + self._network.link_lake_crosswalk) def update_frac(self, time_frac): """Update model by a fraction of a time step. @@ -271,21 +286,19 @@ def get_value_ptr(self, var_name): """ return self._values[var_name] - def get_value(self, var_name, dest): + def get_value(self, var_name): """Copy of values. Parameters ---------- var_name : str Name of variable as CSDMS Standard Name. - dest : ndarray - A numpy array into which to place the values. Returns ------- - array_like + output_df : pd.DataFrame Copy of values. """ - dest[:] = self.get_value_ptr(var_name).flatten() - return dest + output_df = self.get_value_ptr(var_name) + return output_df def get_value_at_indices(self, var_name, dest, indices): """Get values at particular indices. @@ -305,17 +318,34 @@ def get_value_at_indices(self, var_name, dest, indices): dest[:] = self.get_value_ptr(var_name).take(indices) return dest - def set_value(self, var_name, src): - """Set model values. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - src : array_like - Array of new values. - """ - val = self.get_value_ptr(var_name) - val[:] = src.reshape(val.shape) + def set_value(self): + """Set model values""" + ( + self._run_sets, + self._da_sets, + self._parity_sets + ) = tr.build_run_sets(self._network, + self._forcing_parameters, + self._compute_parameters, + self._data_assimilation_parameters, + self._output_parameters, + self._parity_parameters) + + # Create forcing data within network object for first loop iteration + self._network.assemble_forcings( + self._run_sets[0], + self._forcing_parameters, + self._hybrid_parameters, + self._compute_parameters.get('cpu_pool', None)) + + # Create data assimilation object from da_sets for first loop iteration + self._data_assimilation = tr.build_data_assimilation( + self._network, + self._data_assimilation_parameters, + self._waterbody_parameters, + self._da_sets[0], + self._forcing_parameters, + self._compute_parameters) def set_value_at_indices(self, name, inds, src): """Set model values at particular indices. diff --git a/run-troute-with-bmi.ipynb b/run-troute-with-bmi.ipynb index d9f64632e..2d204a20f 100644 --- a/run-troute-with-bmi.ipynb +++ b/run-troute-with-bmi.ipynb @@ -23,8 +23,7 @@ "metadata": {}, "outputs": [], "source": [ - "import bmi_troute # This is the BMI t-route that we will be running from the file: bmi_troute.py \n", - "import troute.bmi_utilities as bu" + "import bmi_troute # This is the BMI t-route that we will be running from the file: bmi_troute.py " ] }, { @@ -49,15 +48,13 @@ "text": [ "creating supernetwork connections set\n", "supernetwork connections set complete\n", - "... in 41.17275857925415 seconds.\n", "setting waterbody and channel initial states ...\n", - "waterbody and channel initial states complete\n", - "... in 0.14920902252197266 seconds.\n" + "waterbody and channel initial states complete\n" ] } ], "source": [ - "model.initialize(bmi_cfg_file='bmi_config_files/standard_AnA.yml')" + "model.initialize(bmi_cfg_file='bmi_config_files/LowerColorado.yml')" ] }, { @@ -65,814 +62,9 @@ "execution_count": 4, "id": "d3661d08-1340-4765-a676-53ca361d72ba", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_13:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_13:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_14:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_14:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_15:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_16:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_17:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_18:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_19:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_20:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_21:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_22:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-22_23:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_00:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_01:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_02:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_03:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_04:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_05:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_06:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_07:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_08:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_09:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_10:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_11:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_12:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_13:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_14:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_15:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:15:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:30:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_16:45:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/merged_timeslices/2021-08-24_17:00:00.15min.usgsTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_15:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_16:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_17:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_18:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_19:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_20:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_21:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_22:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-22_23:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_00:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_01:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_02:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_03:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_04:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_05:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_06:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_07:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_08:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_09:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_10:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_11:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_12:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-23_13:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_00:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_01:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_02:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_03:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_04:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_05:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_06:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_07:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_08:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_09:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_10:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_11:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_12:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_13:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_14:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_15:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:00:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:15:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:30:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_16:45:00.15min.usaceTimeSlice.ncdf\n", - "Missing TimeSlice file /glade/work/adamw/CONUS/usace_timeslices/2021-08-24_17:00:00.15min.usaceTimeSlice.ncdf\n" - ] - } - ], + "outputs": [], "source": [ - "model.build_run_sets()" + "model.set_value()" ] }, { @@ -880,599 +72,439 @@ "execution_count": 5, "id": "954fe3a0-e75f-4629-af6d-5b8ba9e9428c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'qlat_files': ['202108241400.CHRTOUT_DOMAIN1'],\n", - " 'nts': 12,\n", - " 'final_timestamp': datetime.datetime(2021, 8, 24, 14, 0)},\n", - " {'qlat_files': ['202108241500.CHRTOUT_DOMAIN1'],\n", - " 'nts': 12,\n", - " 'final_timestamp': datetime.datetime(2021, 8, 24, 15, 0)},\n", - " {'qlat_files': ['202108241600.CHRTOUT_DOMAIN1'],\n", - " 'nts': 12,\n", - " 'final_timestamp': datetime.datetime(2021, 8, 24, 16, 0)}]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model._run_sets" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "f7557746-f162-42df-997b-99364291db86", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'qlat_files': ['202108241400.CHRTOUT_DOMAIN1'],\n", - " 'nts': 12,\n", - " 'final_timestamp': datetime.datetime(2021, 8, 24, 14, 0)},\n", - " {'qlat_files': ['202108241500.CHRTOUT_DOMAIN1'],\n", - " 'nts': 12,\n", - " 'final_timestamp': datetime.datetime(2021, 8, 24, 15, 0)},\n", - " {'qlat_files': ['202108241600.CHRTOUT_DOMAIN1'],\n", - " 'nts': 12,\n", - " 'final_timestamp': datetime.datetime(2021, 8, 24, 16, 0)}]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "run_sets" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "e80d26ac-8ecd-4a33-9d9d-48b46e1bb26f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'usgs_timeslice_files': ['2021-08-23_00:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:45:00.15min.usgsTimeSlice.ncdf'],\n", - " 'usace_timeslice_files': ['2021-08-23_14:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:45:00.15min.usaceTimeSlice.ncdf']},\n", - " {'usgs_timeslice_files': ['2021-08-23_00:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:45:00.15min.usgsTimeSlice.ncdf'],\n", - " 'usace_timeslice_files': ['2021-08-23_14:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:45:00.15min.usaceTimeSlice.ncdf']},\n", - " {'usgs_timeslice_files': ['2021-08-23_00:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_00:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_01:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_02:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_03:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_04:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_05:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_06:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_07:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_08:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_09:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_10:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_11:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_12:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_13:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_14:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_15:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_16:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_17:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_18:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_19:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_20:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_21:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_22:45:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:00:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:15:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:30:00.15min.usgsTimeSlice.ncdf',\n", - " '2021-08-23_23:45:00.15min.usgsTimeSlice.ncdf'],\n", - " 'usace_timeslice_files': ['2021-08-23_14:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_14:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_15:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_16:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_17:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_18:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_19:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_20:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_21:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_22:45:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:00:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:15:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:30:00.15min.usaceTimeSlice.ncdf',\n", - " '2021-08-23_23:45:00.15min.usaceTimeSlice.ncdf']}]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "da_sets" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "139a9743-6a5f-4977-ba58-13ae22ce4e40", - "metadata": {}, "outputs": [], "source": [ - "test = tr.build_forcings(model._network, run_sets[0], model._forcing_parameters, model._hybrid_parameters, model._compute_parameters)" + "model.update()" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "e71a7f52-8bd2-44b5-950e-bc9e6de515ae", "metadata": {}, "outputs": [ { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
2021-08-23 12:05:002021-08-23 12:10:002021-08-23 12:15:002021-08-23 12:20:002021-08-23 12:25:002021-08-23 12:30:002021-08-23 12:35:002021-08-23 12:40:002021-08-23 12:45:002021-08-23 12:50:00...2021-08-24 11:15:002021-08-24 11:20:002021-08-24 11:25:002021-08-24 11:30:002021-08-24 11:35:002021-08-24 11:40:002021-08-24 11:45:002021-08-24 11:50:002021-08-24 11:55:002021-08-24 12:00:00
16116740.0000770.0000770.0000770.0000770.0000770.0000770.0000770.0000770.0000770.000076...0.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.000063
16116760.0000820.0000820.0000820.0000820.0000820.0000820.0000820.0000820.0000820.000082...0.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.000068
37631260.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257...0.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257
37629620.0029290.0029290.0029280.0029280.0029280.0029280.0029280.0029280.0029280.002928...0.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.002917
37629640.0013140.0013140.0013140.0013140.0013140.0013140.0013140.0013140.0013140.001314...0.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.001310
..................................................................
9420800410.4308710.4308770.4308820.4308870.4308910.4308950.4308980.4309010.4309030.430905...0.4319570.4319620.4319660.4319700.4319730.4319760.4319790.4319810.4319830.431985
9420800420.3037370.3037340.3037310.3037280.3037240.3037200.3037160.3037120.3037080.303704...0.3033900.3033900.3033910.3033920.3033920.3033930.3033930.3033930.3033930.303393
9420800430.7630420.7630430.7630440.7630440.7630450.7630460.7630470.7630470.7630480.763048...0.7638090.7638140.7638190.7638240.7638290.7638340.7638390.7638440.7638480.763852
9420800443.9479853.9481703.9483543.9485383.9487203.9489033.9490843.9492643.9494433.949621...3.8249773.8242153.8234503.8226853.8219193.8211543.8203883.8196223.8188573.818094
9420800451.0034151.0034561.0034961.0035341.0035721.0036091.0036451.0036801.0037151.003748...1.0125541.0125861.0126171.0126481.0126781.0127071.0127351.0127631.0127901.012817
\n", + "

10806 rows × 288 columns

\n", + "
" + ], "text/plain": [ - "" + " 2021-08-23 12:05:00 2021-08-23 12:10:00 2021-08-23 12:15:00 \\\n", + "1611674 0.000077 0.000077 0.000077 \n", + "1611676 0.000082 0.000082 0.000082 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002929 0.002929 0.002928 \n", + "3762964 0.001314 0.001314 0.001314 \n", + "... ... ... ... \n", + "942080041 0.430871 0.430877 0.430882 \n", + "942080042 0.303737 0.303734 0.303731 \n", + "942080043 0.763042 0.763043 0.763044 \n", + "942080044 3.947985 3.948170 3.948354 \n", + "942080045 1.003415 1.003456 1.003496 \n", + "\n", + " 2021-08-23 12:20:00 2021-08-23 12:25:00 2021-08-23 12:30:00 \\\n", + "1611674 0.000077 0.000077 0.000077 \n", + "1611676 0.000082 0.000082 0.000082 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002928 0.002928 0.002928 \n", + "3762964 0.001314 0.001314 0.001314 \n", + "... ... ... ... \n", + "942080041 0.430887 0.430891 0.430895 \n", + "942080042 0.303728 0.303724 0.303720 \n", + "942080043 0.763044 0.763045 0.763046 \n", + "942080044 3.948538 3.948720 3.948903 \n", + "942080045 1.003534 1.003572 1.003609 \n", + "\n", + " 2021-08-23 12:35:00 2021-08-23 12:40:00 2021-08-23 12:45:00 \\\n", + "1611674 0.000077 0.000077 0.000077 \n", + "1611676 0.000082 0.000082 0.000082 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002928 0.002928 0.002928 \n", + "3762964 0.001314 0.001314 0.001314 \n", + "... ... ... ... \n", + "942080041 0.430898 0.430901 0.430903 \n", + "942080042 0.303716 0.303712 0.303708 \n", + "942080043 0.763047 0.763047 0.763048 \n", + "942080044 3.949084 3.949264 3.949443 \n", + "942080045 1.003645 1.003680 1.003715 \n", + "\n", + " 2021-08-23 12:50:00 ... 2021-08-24 11:15:00 2021-08-24 11:20:00 \\\n", + "1611674 0.000076 ... 0.000063 0.000063 \n", + "1611676 0.000082 ... 0.000068 0.000068 \n", + "3763126 0.034257 ... 0.034257 0.034257 \n", + "3762962 0.002928 ... 0.002917 0.002917 \n", + "3762964 0.001314 ... 0.001310 0.001310 \n", + "... ... ... ... ... \n", + "942080041 0.430905 ... 0.431957 0.431962 \n", + "942080042 0.303704 ... 0.303390 0.303390 \n", + "942080043 0.763048 ... 0.763809 0.763814 \n", + "942080044 3.949621 ... 3.824977 3.824215 \n", + "942080045 1.003748 ... 1.012554 1.012586 \n", + "\n", + " 2021-08-24 11:25:00 2021-08-24 11:30:00 2021-08-24 11:35:00 \\\n", + "1611674 0.000063 0.000063 0.000063 \n", + "1611676 0.000068 0.000068 0.000068 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002917 0.002917 0.002917 \n", + "3762964 0.001310 0.001310 0.001310 \n", + "... ... ... ... \n", + "942080041 0.431966 0.431970 0.431973 \n", + "942080042 0.303391 0.303392 0.303392 \n", + "942080043 0.763819 0.763824 0.763829 \n", + "942080044 3.823450 3.822685 3.821919 \n", + "942080045 1.012617 1.012648 1.012678 \n", + "\n", + " 2021-08-24 11:40:00 2021-08-24 11:45:00 2021-08-24 11:50:00 \\\n", + "1611674 0.000063 0.000063 0.000063 \n", + "1611676 0.000068 0.000068 0.000068 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002917 0.002917 0.002917 \n", + "3762964 0.001310 0.001310 0.001310 \n", + "... ... ... ... \n", + "942080041 0.431976 0.431979 0.431981 \n", + "942080042 0.303393 0.303393 0.303393 \n", + "942080043 0.763834 0.763839 0.763844 \n", + "942080044 3.821154 3.820388 3.819622 \n", + "942080045 1.012707 1.012735 1.012763 \n", + "\n", + " 2021-08-24 11:55:00 2021-08-24 12:00:00 \n", + "1611674 0.000063 0.000063 \n", + "1611676 0.000068 0.000068 \n", + "3763126 0.034257 0.034257 \n", + "3762962 0.002917 0.002917 \n", + "3762964 0.001310 0.001310 \n", + "... ... ... \n", + "942080041 0.431983 0.431985 \n", + "942080042 0.303393 0.303393 \n", + "942080043 0.763848 0.763852 \n", + "942080044 3.818857 3.818094 \n", + "942080045 1.012790 1.012817 \n", + "\n", + "[10806 rows x 288 columns]" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "test" + "model.get_value('channel_exit_water_x-section__volume_flow_rate')" ] }, - { - "cell_type": "code", - "execution_count": 7, - "id": "990e5f3b-effd-424c-9192-67adb47bc477", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'streamflow_cms': 'land_surface_water__runoff_volume_flux',\n", - " 'streamflow_m': 'channel_water__mean_depth'}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "4bc75353-2786-4ef1-aeed-3c1da32b457b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['land_surface_water__runoff_volume_flux']" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "cd0ed566-4749-4b81-b527-f5b6177f0fb9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['channel_exit_water_x-section__volume_flow_rate', 'channel_water__mean_depth']" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "5c098082-f3ab-4426-95c4-e5a06efe760e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] - }, { "cell_type": "code", "execution_count": null, - "id": "ca782efb-6982-4c36-9091-3e64d952413c", + "id": "9cb21c69-1638-45ad-82d7-258cb69f5d21", "metadata": {}, "outputs": [], "source": [] diff --git a/src/troute-network/troute/main_utilities.py b/src/troute-network/troute/main_utilities.py index 586718344..a972397a7 100644 --- a/src/troute-network/troute/main_utilities.py +++ b/src/troute-network/troute/main_utilities.py @@ -1,5 +1,9 @@ import argparse import time +import logging +import pandas as pd +import numpy as np +from datetime import timedelta #from .input import _input_handler_v03 import troute.nhd_network_utilities_v02 as nnu import troute.nhd_io as nhd_io @@ -7,8 +11,11 @@ #from .output import nwm_output_generator from troute.NHDNetwork import NHDNetwork from troute.HYFeaturesNetwork import HYFeaturesNetwork +from troute.DataAssimilation import AllDA from troute.routing.compute import compute_nhd_routing_v02, compute_diffusive_routing +LOG = logging.getLogger('') + def initialize_network(argv): args = _handle_args_v03(argv) @@ -34,21 +41,21 @@ def initialize_network(argv): 'cpu_pool': compute_parameters.get('cpu_pool') } - showtiming = log_parameters.get("showtiming", None) - if showtiming: - task_times = {} - task_times['forcing_time'] = 0 - task_times['route_time'] = 0 - task_times['output_time'] = 0 - main_start_time = time.time() +# showtiming = log_parameters.get("showtiming", None) +# if showtiming: +# task_times = {} +# task_times['forcing_time'] = 0 +# task_times['route_time'] = 0 +# task_times['output_time'] = 0 +# main_start_time = time.time() cpu_pool = compute_parameters.get("cpu_pool", None) # Build routing network data objects. Network data objects specify river # network connectivity, channel geometry, and waterbody parameters. Also # perform initial warmstate preprocess. - if showtiming: - network_start_time = time.time() +# if showtiming: +# network_start_time = time.time() if "ngen_nexus_file" in supernetwork_parameters: network = HYFeaturesNetwork(supernetwork_parameters, @@ -65,12 +72,12 @@ def initialize_network(argv): data_assimilation_parameters=data_assimilation_parameters, preprocessing_parameters=preprocessing_parameters, verbose=True, - showtiming=showtiming, + showtiming=False #showtiming, ) - if showtiming: - network_end_time = time.time() - task_times['network_time'] = network_end_time - network_start_time +# if showtiming: +# network_end_time = time.time() +# task_times['network_time'] = network_end_time - network_start_time all_parameters = [log_parameters, preprocessing_parameters, @@ -136,8 +143,8 @@ def build_data_assimilation(network, data_assimilation_parameters, waterbody_par return data_assimilation -def run_routing(network, data_assimliation, run_sets, compute_parameters, forcing_parameters, waterbody_parameters, - output_parameters, parity_sets): +def run_routing(network, data_assimilation, run_sets, da_sets, compute_parameters, forcing_parameters, waterbody_parameters, + output_parameters, hybrid_parameters, data_assimilation_parameters, run_parameters, parity_sets): ''' ''' @@ -147,6 +154,7 @@ def run_routing(network, data_assimliation, run_sets, compute_parameters, forcin compute_kernel = compute_parameters.get("compute_kernel", "V02-caching") assume_short_ts = compute_parameters.get("assume_short_ts", False) return_courant = compute_parameters.get("return_courant", False) + cpu_pool = compute_parameters.get("cpu_pool", 1) # Pass empty subnetwork list to nwm_route. These objects will be calculated/populated # on first iteration of for loop only. For additional loops this will be passed @@ -163,26 +171,26 @@ def run_routing(network, data_assimliation, run_sets, compute_parameters, forcin parity_sets[run_set_iterator]["dt"] = dt parity_sets[run_set_iterator]["nts"] = nts - if showtiming: - route_start_time = time.time() +# if showtiming: +# route_start_time = time.time() run_results = nwm_route( network.connections, - network.rconn, - network.wbody_conn, - network.reaches_by_tw, + network.reverse_network, + network.waterbody_connections, + network._reaches_by_tw, ## check: def name is different from return self._ .. parallel_compute_method, compute_kernel, subnetwork_target_size, - compute_parameters.get('cpu_pool', None), - network.t0, + cpu_pool, + network.t0, ## check if t0 is being updated dt, nts, qts_subdivisions, network.independent_networks, - network.param_df, + network.dataframe, network.q0, - network.qlats, + network._qlateral, data_assimilation.usgs_df, data_assimilation.lastobs_df, data_assimilation.reservoir_usgs_df, @@ -192,26 +200,26 @@ def run_routing(network, data_assimliation, run_sets, compute_parameters, forcin data_assimilation.assimilation_parameters, assume_short_ts, return_courant, - network.waterbody_df, + network._waterbody_df, ## check: network._waterbody_df ?? def name is different from return self._ .. waterbody_parameters, - network.waterbody_types_df, + network._waterbody_types_df, ## check: network._waterbody_types_df ?? def name is different from return self._ .. network.waterbody_type_specified, network.diffusive_network_data, - network.topobathy, + network.topobathy_df, network.refactored_diffusive_domain, network.refactored_reaches, subnetwork_list, network.coastal_boundary_depth_df, - network.nonrefactored_topobathy, + network.unrefactored_topobathy_df, ) # returns list, first item is run result, second item is subnetwork items subnetwork_list = run_results[1] run_results = run_results[0] - if showtiming: - route_end_time = time.time() - task_times['route_time'] += route_end_time - route_start_time +# if showtiming: +# route_end_time = time.time() +# task_times['route_time'] += route_end_time - route_start_time # create initial conditions for next loop itteration network.new_nhd_q0(run_results) @@ -234,22 +242,22 @@ def run_routing(network, data_assimliation, run_sets, compute_parameters, forcin network, da_sets[run_set_iterator + 1]) - if showtiming: - forcing_end_time = time.time() - task_times['forcing_time'] += forcing_end_time - route_end_time +# if showtiming: +# forcing_end_time = time.time() +# task_times['forcing_time'] += forcing_end_time - route_end_time # TODO move the conditional call to write_lite_restart to nwm_output_generator. - if showtiming: - output_start_time = time.time() +# if showtiming: +# output_start_time = time.time() if "lite_restart" in output_parameters: nhd_io.write_lite_restart( network.q0, - network.waterbody_df, + network._waterbody_df, t0 + timedelta(seconds = dt * nts), output_parameters['lite_restart'] ) - + ''' nwm_output_generator( run, run_results, @@ -261,18 +269,19 @@ def run_routing(network, data_assimliation, run_sets, compute_parameters, forcin qts_subdivisions, compute_parameters.get("return_courant", False), cpu_pool, - network.waterbody_df, - network.waterbody_types_df, + network._waterbody_df, + network._waterbody_types_df, data_assimilation_parameters, data_assimilation.lastobs_df, network.link_gage_df, network.link_lake_crosswalk, ) - - if showtiming: - output_end_time = time.time() - task_times['output_time'] += output_end_time - output_start_time - + ''' +# if showtiming: +# output_end_time = time.time() +# task_times['output_time'] += output_end_time - output_start_time + return run_results + def _handle_args_v03(argv): ''' @@ -504,3 +513,108 @@ def nwm_route( LOG.debug("ordered reach computation complete in %s seconds." % (time.time() - start_time)) return results, subnetwork_list + +def create_output_dataframes(results, run_sets, waterbodies_df, link_lake_crosswalk): + + nts = run_sets[len(run_sets) - 1].get('nts') + dt = run_sets[len(run_sets) - 1].get('dt') + qts_subdivisions = run_sets[len(run_sets) - 1].get('qts_subdivisions') + + qvd_columns = pd.MultiIndex.from_product( + [range(nts), ["q", "v", "d"]] + ).to_flat_index() + + flowveldepth = pd.concat( + [pd.DataFrame(r[1], index=r[0], columns=qvd_columns) for r in results], copy=False, + ) + + # create waterbody dataframe for output to netcdf file + i_columns = pd.MultiIndex.from_product( + [range(nts), ["i"]] + ).to_flat_index() + + wbdy = pd.concat( + [pd.DataFrame(r[6], index=r[0], columns=i_columns) for r in results], + copy=False, + ) + + wbdy_id_list = waterbodies_df.index.values.tolist() + ''' + flow_df = flowveldepth.loc[wbdy_id_list] + wbdy = wbdy.loc[wbdy_id_list] + + timestep, variable = zip(*flow_df.columns.tolist()) + timestep_index = np.where(((np.array(list(set(list(timestep)))) + 1) * dt) % (dt * qts_subdivisions) == 0) + ts_set = set(timestep_index[0].tolist()) + flow_df_col_index = [i for i, e in enumerate(timestep) if e in ts_set] + flow_df = flow_df.iloc[:,flow_df_col_index] + + timestep, variable = zip(*wbdy.columns.tolist()) + timestep_index = np.where(((np.array(list(set(list(timestep)))) + 1) * dt) % (dt * qts_subdivisions) == 0) + ts_set = set(timestep_index[0].tolist()) + wbdy_col_index = [i for i, e in enumerate(timestep) if e in ts_set] + + i_lakeout_df = wbdy.iloc[:,wbdy_col_index] + q_lakeout_df = flow_df.iloc[:,0::3] + d_lakeout_df = flow_df.iloc[:,2::3] + ''' + i_lakeout_df = wbdy.loc[wbdy_id_list] + q_lakeout_df = flowveldepth.loc[wbdy_id_list].iloc[:,0::3] + d_lakeout_df = flowveldepth.loc[wbdy_id_list].iloc[:,2::3] + # lakeout = pd.concat([i_df, q_df, d_df], axis=1) + + # replace waterbody lake_ids with outlet link ids + flowveldepth = _reindex_lake_to_link_id(flowveldepth, link_lake_crosswalk) + + q_channel_df = flowveldepth.iloc[:,0::3] + v_channel_df = flowveldepth.iloc[:,1::3] + d_channel_df = flowveldepth.iloc[:,2::3] + + date_column_names = pd.date_range(start=run_sets[-1].get('t0') + timedelta(seconds=run_sets[-1].get('dt')), + end=run_sets[-1].get('final_timestamp'), + freq=str(run_sets[-1].get('dt'))+'S') + + i_lakeout_df.columns = date_column_names + q_lakeout_df.columns = date_column_names + d_lakeout_df.columns = date_column_names + q_channel_df.columns = date_column_names + v_channel_df.columns = date_column_names + d_channel_df.columns = date_column_names + + return q_channel_df, v_channel_df, d_channel_df, i_lakeout_df, q_lakeout_df, d_lakeout_df + +def _reindex_lake_to_link_id(target_df, crosswalk): + ''' + Utility function for replacing lake ID index values + with link ID values in a dataframe. This is used to + reinedex results dataframes + + Arguments: + ---------- + - target_df (DataFrame): Data frame to be reinexed + - crosswalk (dict): Relates lake ids to outlet link ids + + Returns: + -------- + - target_df (DataFrame): Re-indexed with link ids replacing + lake ids + ''' + + # evaluate intersection of lake ids and target_df index values + # i.e. what are the index positions of lake ids that need replacing? + lakeids = np.fromiter(crosswalk.keys(), dtype = int) + idxs = target_df.index.to_numpy() + lake_index_intersect = np.intersect1d( + idxs, + lakeids, + return_indices = True + ) + + # replace lake ids with link IDs in the target_df index array + linkids = np.fromiter(crosswalk.values(), dtype = int) + idxs[lake_index_intersect[1]] = linkids[lake_index_intersect[2]] + + # (re) set the target_df index + target_df.set_index(idxs, inplace = True) + + return target_df \ No newline at end of file From 9ceaccffcab9a11e4cae7f39190977060f2bb0b8 Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Thu, 6 Oct 2022 14:28:58 -0600 Subject: [PATCH 3/9] added update_until() function --- bmi_troute.py | 26 +- run-troute-with-bmi.ipynb | 1266 ++++++++++++++++++++++++++++++++----- 2 files changed, 1145 insertions(+), 147 deletions(-) diff --git a/bmi_troute.py b/bmi_troute.py index 79459378b..9640a71a1 100644 --- a/bmi_troute.py +++ b/bmi_troute.py @@ -129,6 +129,12 @@ def initialize(self, bmi_cfg_file=None): self._data_assimilation_parameters, self._run_parameters, ) = tr.initialize_network(self._cfg_bmi) + + self._start_time = 0.0 + self._end_time = self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') + self._time = 0.0 + self._time_step = self._forcing_parameters.get('dt') + self._time_units = 's' def update(self): """Advance model by one time step.""" @@ -157,6 +163,8 @@ def update(self): self._run_sets, self._network._waterbody_df, self._network.link_lake_crosswalk) + + self._time += self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') def update_frac(self, time_frac): """Update model by a fraction of a time step. @@ -175,13 +183,25 @@ def update_until(self, then): Parameters ---------- then : float - Time to run model until. + Time to run model until in seconds. """ n_steps = (then - self.get_current_time()) / self.get_time_step() + + full_nts = self._forcing_parameters.get('nts') + self._forcing_parameters['nts'] = n_steps + + self.set_value() + self.update() + self._network.t0 = self._run_sets[-1].get('final_timestamp') + self._forcing_parameters['nts'] = full_nts - n_steps + self.set_value() + + ''' for _ in range(int(n_steps)): self.update() self.update_frac(n_steps - int(n_steps)) + ''' def finalize(self): """Finalize model.""" @@ -410,10 +430,10 @@ def get_end_time(self): return self._end_time def get_current_time(self): - return self._model.time + return self._time def get_time_step(self): - return self._model.time_step + return self._time_step def get_time_units(self): return self._time_units diff --git a/run-troute-with-bmi.ipynb b/run-troute-with-bmi.ipynb index 2d204a20f..46c33ed01 100644 --- a/run-troute-with-bmi.ipynb +++ b/run-troute-with-bmi.ipynb @@ -5,7 +5,7 @@ "id": "7b663e55-9edb-40a7-ae1d-380880c6d077", "metadata": {}, "source": [ - "Basic Model Interface (BMI) for streamflow prediction using Long Short-Term Memory (LSTM) networks" + "# Basic Model Interface (BMI) for streamflow prediction using Long Short-Term Memory (LSTM) networks" ] }, { @@ -104,16 +104,16 @@ " \n", " \n", " \n", - " 2021-08-23 12:05:00\n", - " 2021-08-23 12:10:00\n", - " 2021-08-23 12:15:00\n", - " 2021-08-23 12:20:00\n", - " 2021-08-23 12:25:00\n", - " 2021-08-23 12:30:00\n", - " 2021-08-23 12:35:00\n", - " 2021-08-23 12:40:00\n", - " 2021-08-23 12:45:00\n", - " 2021-08-23 12:50:00\n", + " 2021-08-24 06:05:00\n", + " 2021-08-24 06:10:00\n", + " 2021-08-24 06:15:00\n", + " 2021-08-24 06:20:00\n", + " 2021-08-24 06:25:00\n", + " 2021-08-24 06:30:00\n", + " 2021-08-24 06:35:00\n", + " 2021-08-24 06:40:00\n", + " 2021-08-24 06:45:00\n", + " 2021-08-24 06:50:00\n", " ...\n", " 2021-08-24 11:15:00\n", " 2021-08-24 11:20:00\n", @@ -130,16 +130,16 @@ " \n", " \n", " 1611674\n", - " 0.000077\n", - " 0.000077\n", - " 0.000077\n", - " 0.000077\n", - " 0.000077\n", - " 0.000077\n", - " 0.000077\n", - " 0.000077\n", - " 0.000077\n", - " 0.000076\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", + " 0.000065\n", " ...\n", " 0.000063\n", " 0.000063\n", @@ -154,16 +154,16 @@ " \n", " \n", " 1611676\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", - " 0.000082\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", + " 0.000071\n", " ...\n", " 0.000068\n", " 0.000068\n", @@ -202,16 +202,16 @@ " \n", " \n", " 3762962\n", - " 0.002929\n", - " 0.002929\n", - " 0.002928\n", - " 0.002928\n", - " 0.002928\n", - " 0.002928\n", - " 0.002928\n", - " 0.002928\n", - " 0.002928\n", - " 0.002928\n", + " 0.002920\n", + " 0.002920\n", + " 0.002920\n", + " 0.002920\n", + " 0.002920\n", + " 0.002920\n", + " 0.002920\n", + " 0.002920\n", + " 0.002919\n", + " 0.002919\n", " ...\n", " 0.002917\n", " 0.002917\n", @@ -226,16 +226,16 @@ " \n", " \n", " 3762964\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", - " 0.001314\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", + " 0.001311\n", " ...\n", " 0.001310\n", " 0.001310\n", @@ -274,16 +274,16 @@ " \n", " \n", " 942080041\n", - " 0.430871\n", - " 0.430877\n", - " 0.430882\n", - " 0.430887\n", - " 0.430891\n", - " 0.430895\n", - " 0.430898\n", - " 0.430901\n", - " 0.430903\n", - " 0.430905\n", + " 0.431705\n", + " 0.431712\n", + " 0.431717\n", + " 0.431722\n", + " 0.431727\n", + " 0.431731\n", + " 0.431734\n", + " 0.431737\n", + " 0.431739\n", + " 0.431742\n", " ...\n", " 0.431957\n", " 0.431962\n", @@ -298,16 +298,16 @@ " \n", " \n", " 942080042\n", - " 0.303737\n", - " 0.303734\n", - " 0.303731\n", - " 0.303728\n", - " 0.303724\n", - " 0.303720\n", - " 0.303716\n", - " 0.303712\n", - " 0.303708\n", - " 0.303704\n", + " 0.303372\n", + " 0.303373\n", + " 0.303373\n", + " 0.303373\n", + " 0.303374\n", + " 0.303374\n", + " 0.303373\n", + " 0.303373\n", + " 0.303373\n", + " 0.303373\n", " ...\n", " 0.303390\n", " 0.303390\n", @@ -322,16 +322,16 @@ " \n", " \n", " 942080043\n", - " 0.763042\n", - " 0.763043\n", - " 0.763044\n", - " 0.763044\n", - " 0.763045\n", - " 0.763046\n", - " 0.763047\n", - " 0.763047\n", - " 0.763048\n", - " 0.763048\n", + " 0.763534\n", + " 0.763538\n", + " 0.763543\n", + " 0.763547\n", + " 0.763551\n", + " 0.763556\n", + " 0.763560\n", + " 0.763565\n", + " 0.763569\n", + " 0.763573\n", " ...\n", " 0.763809\n", " 0.763814\n", @@ -346,16 +346,16 @@ " \n", " \n", " 942080044\n", - " 3.947985\n", - " 3.948170\n", - " 3.948354\n", - " 3.948538\n", - " 3.948720\n", - " 3.948903\n", - " 3.949084\n", - " 3.949264\n", - " 3.949443\n", - " 3.949621\n", + " 3.873273\n", + " 3.872474\n", + " 3.871675\n", + " 3.870877\n", + " 3.870078\n", + " 3.869282\n", + " 3.868486\n", + " 3.867692\n", + " 3.866900\n", + " 3.866110\n", " ...\n", " 3.824977\n", " 3.824215\n", @@ -370,16 +370,16 @@ " \n", " \n", " 942080045\n", - " 1.003415\n", - " 1.003456\n", - " 1.003496\n", - " 1.003534\n", - " 1.003572\n", - " 1.003609\n", - " 1.003645\n", - " 1.003680\n", - " 1.003715\n", - " 1.003748\n", + " 1.010678\n", + " 1.010711\n", + " 1.010743\n", + " 1.010775\n", + " 1.010806\n", + " 1.010836\n", + " 1.010866\n", + " 1.010894\n", + " 1.010922\n", + " 1.010950\n", " ...\n", " 1.012554\n", " 1.012586\n", @@ -394,61 +394,61 @@ " \n", " \n", "\n", - "

10806 rows × 288 columns

\n", + "

10806 rows × 72 columns

\n", "" ], "text/plain": [ - " 2021-08-23 12:05:00 2021-08-23 12:10:00 2021-08-23 12:15:00 \\\n", - "1611674 0.000077 0.000077 0.000077 \n", - "1611676 0.000082 0.000082 0.000082 \n", + " 2021-08-24 06:05:00 2021-08-24 06:10:00 2021-08-24 06:15:00 \\\n", + "1611674 0.000065 0.000065 0.000065 \n", + "1611676 0.000071 0.000071 0.000071 \n", "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002929 0.002929 0.002928 \n", - "3762964 0.001314 0.001314 0.001314 \n", + "3762962 0.002920 0.002920 0.002920 \n", + "3762964 0.001311 0.001311 0.001311 \n", "... ... ... ... \n", - "942080041 0.430871 0.430877 0.430882 \n", - "942080042 0.303737 0.303734 0.303731 \n", - "942080043 0.763042 0.763043 0.763044 \n", - "942080044 3.947985 3.948170 3.948354 \n", - "942080045 1.003415 1.003456 1.003496 \n", + "942080041 0.431705 0.431712 0.431717 \n", + "942080042 0.303372 0.303373 0.303373 \n", + "942080043 0.763534 0.763538 0.763543 \n", + "942080044 3.873273 3.872474 3.871675 \n", + "942080045 1.010678 1.010711 1.010743 \n", "\n", - " 2021-08-23 12:20:00 2021-08-23 12:25:00 2021-08-23 12:30:00 \\\n", - "1611674 0.000077 0.000077 0.000077 \n", - "1611676 0.000082 0.000082 0.000082 \n", + " 2021-08-24 06:20:00 2021-08-24 06:25:00 2021-08-24 06:30:00 \\\n", + "1611674 0.000065 0.000065 0.000065 \n", + "1611676 0.000071 0.000071 0.000071 \n", "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002928 0.002928 0.002928 \n", - "3762964 0.001314 0.001314 0.001314 \n", + "3762962 0.002920 0.002920 0.002920 \n", + "3762964 0.001311 0.001311 0.001311 \n", "... ... ... ... \n", - "942080041 0.430887 0.430891 0.430895 \n", - "942080042 0.303728 0.303724 0.303720 \n", - "942080043 0.763044 0.763045 0.763046 \n", - "942080044 3.948538 3.948720 3.948903 \n", - "942080045 1.003534 1.003572 1.003609 \n", + "942080041 0.431722 0.431727 0.431731 \n", + "942080042 0.303373 0.303374 0.303374 \n", + "942080043 0.763547 0.763551 0.763556 \n", + "942080044 3.870877 3.870078 3.869282 \n", + "942080045 1.010775 1.010806 1.010836 \n", "\n", - " 2021-08-23 12:35:00 2021-08-23 12:40:00 2021-08-23 12:45:00 \\\n", - "1611674 0.000077 0.000077 0.000077 \n", - "1611676 0.000082 0.000082 0.000082 \n", + " 2021-08-24 06:35:00 2021-08-24 06:40:00 2021-08-24 06:45:00 \\\n", + "1611674 0.000065 0.000065 0.000065 \n", + "1611676 0.000071 0.000071 0.000071 \n", "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002928 0.002928 0.002928 \n", - "3762964 0.001314 0.001314 0.001314 \n", + "3762962 0.002920 0.002920 0.002919 \n", + "3762964 0.001311 0.001311 0.001311 \n", "... ... ... ... \n", - "942080041 0.430898 0.430901 0.430903 \n", - "942080042 0.303716 0.303712 0.303708 \n", - "942080043 0.763047 0.763047 0.763048 \n", - "942080044 3.949084 3.949264 3.949443 \n", - "942080045 1.003645 1.003680 1.003715 \n", + "942080041 0.431734 0.431737 0.431739 \n", + "942080042 0.303373 0.303373 0.303373 \n", + "942080043 0.763560 0.763565 0.763569 \n", + "942080044 3.868486 3.867692 3.866900 \n", + "942080045 1.010866 1.010894 1.010922 \n", "\n", - " 2021-08-23 12:50:00 ... 2021-08-24 11:15:00 2021-08-24 11:20:00 \\\n", - "1611674 0.000076 ... 0.000063 0.000063 \n", - "1611676 0.000082 ... 0.000068 0.000068 \n", + " 2021-08-24 06:50:00 ... 2021-08-24 11:15:00 2021-08-24 11:20:00 \\\n", + "1611674 0.000065 ... 0.000063 0.000063 \n", + "1611676 0.000071 ... 0.000068 0.000068 \n", "3763126 0.034257 ... 0.034257 0.034257 \n", - "3762962 0.002928 ... 0.002917 0.002917 \n", - "3762964 0.001314 ... 0.001310 0.001310 \n", + "3762962 0.002919 ... 0.002917 0.002917 \n", + "3762964 0.001311 ... 0.001310 0.001310 \n", "... ... ... ... ... \n", - "942080041 0.430905 ... 0.431957 0.431962 \n", - "942080042 0.303704 ... 0.303390 0.303390 \n", - "942080043 0.763048 ... 0.763809 0.763814 \n", - "942080044 3.949621 ... 3.824977 3.824215 \n", - "942080045 1.003748 ... 1.012554 1.012586 \n", + "942080041 0.431742 ... 0.431957 0.431962 \n", + "942080042 0.303373 ... 0.303390 0.303390 \n", + "942080043 0.763573 ... 0.763809 0.763814 \n", + "942080044 3.866110 ... 3.824977 3.824215 \n", + "942080045 1.010950 ... 1.012554 1.012586 \n", "\n", " 2021-08-24 11:25:00 2021-08-24 11:30:00 2021-08-24 11:35:00 \\\n", "1611674 0.000063 0.000063 0.000063 \n", @@ -489,7 +489,7 @@ "942080044 3.818857 3.818094 \n", "942080045 1.012790 1.012817 \n", "\n", - "[10806 rows x 288 columns]" + "[10806 rows x 72 columns]" ] }, "execution_count": 6, @@ -503,9 +503,987 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, + "id": "616ba1d9-56eb-4903-b6e4-e854f127f02f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "86400.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.get_current_time()" + ] + }, + { + "cell_type": "markdown", + "id": "b6ba0ea6-3545-4fb4-a820-8dd519d260b0", + "metadata": {}, + "source": [ + "Now utilize the update_until() function to run t-route for only a portion of the total time" + ] + }, + { + "cell_type": "code", + "execution_count": 8, "id": "9cb21c69-1638-45ad-82d7-258cb69f5d21", "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "creating supernetwork connections set\n", + "supernetwork connections set complete\n", + "setting waterbody and channel initial states ...\n", + "waterbody and channel initial states complete\n" + ] + } + ], + "source": [ + "model.initialize(bmi_cfg_file='bmi_config_files/LowerColorado.yml')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "adae192f-6058-4647-b074-e5d891732fd5", + "metadata": {}, + "outputs": [], + "source": [ + "model.set_value()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "98cab86c-a288-4ddb-95c4-75323dad1b7f", + "metadata": {}, + "outputs": [], + "source": [ + "model.update_until(21600) # input value is seconds. 21,600s = 6 hours" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "690ef259-be43-4c07-808b-f4cd2c5ede77", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21600.0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.get_current_time()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "55af3e52-f9ec-46c4-8f75-5c53784f48a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
2021-08-23 12:05:002021-08-23 12:10:002021-08-23 12:15:002021-08-23 12:20:002021-08-23 12:25:002021-08-23 12:30:002021-08-23 12:35:002021-08-23 12:40:002021-08-23 12:45:002021-08-23 12:50:00...2021-08-23 17:15:002021-08-23 17:20:002021-08-23 17:25:002021-08-23 17:30:002021-08-23 17:35:002021-08-23 17:40:002021-08-23 17:45:002021-08-23 17:50:002021-08-23 17:55:002021-08-23 18:00:00
16116740.0000770.0000770.0000770.0000770.0000770.0000770.0000770.0000770.0000770.000076...0.0000730.0000730.0000730.0000720.0000720.0000720.0000720.0000720.0000720.000072
16116760.0000820.0000820.0000820.0000820.0000820.0000820.0000820.0000820.0000820.000082...0.0000790.0000790.0000790.0000790.0000790.0000790.0000790.0000790.0000790.000079
37631260.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257...0.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257
37629620.0029290.0029290.0029280.0029280.0029280.0029280.0029280.0029280.0029280.002928...0.0029260.0029260.0029260.0029260.0029260.0029260.0029260.0029260.0029260.002926
37629640.0013140.0013140.0013140.0013140.0013140.0013140.0013140.0013140.0013140.001314...0.0013130.0013130.0013130.0013130.0013130.0013130.0013130.0013130.0013130.001313
..................................................................
9420800410.4308710.4308770.4308820.4308870.4308910.4308950.4308980.4309010.4309030.430905...0.4311090.4311140.4311180.4311220.4311250.4311280.4311300.4311320.4311340.431136
9420800420.3037370.3037340.3037310.3037280.3037240.3037200.3037160.3037120.3037080.303704...0.3035440.3035420.3035400.3035370.3035350.3035330.3035300.3035280.3035250.303522
9420800430.7630420.7630430.7630440.7630440.7630450.7630460.7630470.7630470.7630480.763048...0.7630900.7630920.7630930.7630950.7630970.7630990.7631010.7631020.7631030.763104
9420800443.9479853.9481703.9483543.9485383.9487203.9489033.9490843.9492643.9494433.949621...3.9539323.9538723.9538053.9537323.9536523.9535673.9534773.9533823.9532823.953178
9420800451.0034151.0034561.0034961.0035341.0035721.0036091.0036451.0036801.0037151.003748...1.0056751.0057121.0057481.0057831.0058181.0058521.0058851.0059171.0059481.005979
\n", + "

10806 rows × 72 columns

\n", + "
" + ], + "text/plain": [ + " 2021-08-23 12:05:00 2021-08-23 12:10:00 2021-08-23 12:15:00 \\\n", + "1611674 0.000077 0.000077 0.000077 \n", + "1611676 0.000082 0.000082 0.000082 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002929 0.002929 0.002928 \n", + "3762964 0.001314 0.001314 0.001314 \n", + "... ... ... ... \n", + "942080041 0.430871 0.430877 0.430882 \n", + "942080042 0.303737 0.303734 0.303731 \n", + "942080043 0.763042 0.763043 0.763044 \n", + "942080044 3.947985 3.948170 3.948354 \n", + "942080045 1.003415 1.003456 1.003496 \n", + "\n", + " 2021-08-23 12:20:00 2021-08-23 12:25:00 2021-08-23 12:30:00 \\\n", + "1611674 0.000077 0.000077 0.000077 \n", + "1611676 0.000082 0.000082 0.000082 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002928 0.002928 0.002928 \n", + "3762964 0.001314 0.001314 0.001314 \n", + "... ... ... ... \n", + "942080041 0.430887 0.430891 0.430895 \n", + "942080042 0.303728 0.303724 0.303720 \n", + "942080043 0.763044 0.763045 0.763046 \n", + "942080044 3.948538 3.948720 3.948903 \n", + "942080045 1.003534 1.003572 1.003609 \n", + "\n", + " 2021-08-23 12:35:00 2021-08-23 12:40:00 2021-08-23 12:45:00 \\\n", + "1611674 0.000077 0.000077 0.000077 \n", + "1611676 0.000082 0.000082 0.000082 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002928 0.002928 0.002928 \n", + "3762964 0.001314 0.001314 0.001314 \n", + "... ... ... ... \n", + "942080041 0.430898 0.430901 0.430903 \n", + "942080042 0.303716 0.303712 0.303708 \n", + "942080043 0.763047 0.763047 0.763048 \n", + "942080044 3.949084 3.949264 3.949443 \n", + "942080045 1.003645 1.003680 1.003715 \n", + "\n", + " 2021-08-23 12:50:00 ... 2021-08-23 17:15:00 2021-08-23 17:20:00 \\\n", + "1611674 0.000076 ... 0.000073 0.000073 \n", + "1611676 0.000082 ... 0.000079 0.000079 \n", + "3763126 0.034257 ... 0.034257 0.034257 \n", + "3762962 0.002928 ... 0.002926 0.002926 \n", + "3762964 0.001314 ... 0.001313 0.001313 \n", + "... ... ... ... ... \n", + "942080041 0.430905 ... 0.431109 0.431114 \n", + "942080042 0.303704 ... 0.303544 0.303542 \n", + "942080043 0.763048 ... 0.763090 0.763092 \n", + "942080044 3.949621 ... 3.953932 3.953872 \n", + "942080045 1.003748 ... 1.005675 1.005712 \n", + "\n", + " 2021-08-23 17:25:00 2021-08-23 17:30:00 2021-08-23 17:35:00 \\\n", + "1611674 0.000073 0.000072 0.000072 \n", + "1611676 0.000079 0.000079 0.000079 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002926 0.002926 0.002926 \n", + "3762964 0.001313 0.001313 0.001313 \n", + "... ... ... ... \n", + "942080041 0.431118 0.431122 0.431125 \n", + "942080042 0.303540 0.303537 0.303535 \n", + "942080043 0.763093 0.763095 0.763097 \n", + "942080044 3.953805 3.953732 3.953652 \n", + "942080045 1.005748 1.005783 1.005818 \n", + "\n", + " 2021-08-23 17:40:00 2021-08-23 17:45:00 2021-08-23 17:50:00 \\\n", + "1611674 0.000072 0.000072 0.000072 \n", + "1611676 0.000079 0.000079 0.000079 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002926 0.002926 0.002926 \n", + "3762964 0.001313 0.001313 0.001313 \n", + "... ... ... ... \n", + "942080041 0.431128 0.431130 0.431132 \n", + "942080042 0.303533 0.303530 0.303528 \n", + "942080043 0.763099 0.763101 0.763102 \n", + "942080044 3.953567 3.953477 3.953382 \n", + "942080045 1.005852 1.005885 1.005917 \n", + "\n", + " 2021-08-23 17:55:00 2021-08-23 18:00:00 \n", + "1611674 0.000072 0.000072 \n", + "1611676 0.000079 0.000079 \n", + "3763126 0.034257 0.034257 \n", + "3762962 0.002926 0.002926 \n", + "3762964 0.001313 0.001313 \n", + "... ... ... \n", + "942080041 0.431134 0.431136 \n", + "942080042 0.303525 0.303522 \n", + "942080043 0.763103 0.763104 \n", + "942080044 3.953282 3.953178 \n", + "942080045 1.005948 1.005979 \n", + "\n", + "[10806 rows x 72 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.get_value('channel_exit_water_x-section__volume_flow_rate')" + ] + }, + { + "cell_type": "markdown", + "id": "268d9452-5083-4996-b910-bbcf031ff0ae", + "metadata": {}, + "source": [ + "Now call update() to run t-route for the remainder of the full model run" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "52902573-41ae-40c9-b3dc-e790ead208c3", + "metadata": {}, + "outputs": [], + "source": [ + "model.update()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "92c0e23c-0c0b-401c-9f31-ea41f8b11aa8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "86400.0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.get_current_time()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "4c618714-0415-4aa2-a5d6-c49c582f008d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
2021-08-24 06:05:002021-08-24 06:10:002021-08-24 06:15:002021-08-24 06:20:002021-08-24 06:25:002021-08-24 06:30:002021-08-24 06:35:002021-08-24 06:40:002021-08-24 06:45:002021-08-24 06:50:00...2021-08-24 11:15:002021-08-24 11:20:002021-08-24 11:25:002021-08-24 11:30:002021-08-24 11:35:002021-08-24 11:40:002021-08-24 11:45:002021-08-24 11:50:002021-08-24 11:55:002021-08-24 12:00:00
16116740.0000650.0000650.0000650.0000650.0000650.0000650.0000650.0000650.0000650.000065...0.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.000063
16116760.0000710.0000710.0000710.0000710.0000710.0000710.0000710.0000710.0000710.000071...0.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.000068
37631260.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257...0.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257
37629620.0029200.0029200.0029200.0029200.0029200.0029200.0029200.0029200.0029190.002919...0.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.002917
37629640.0013110.0013110.0013110.0013110.0013110.0013110.0013110.0013110.0013110.001311...0.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.001310
..................................................................
9420800410.4317050.4317120.4317170.4317220.4317270.4317310.4317340.4317370.4317390.431742...0.4319570.4319620.4319660.4319700.4319730.4319760.4319790.4319810.4319830.431985
9420800420.3033720.3033730.3033730.3033730.3033740.3033740.3033730.3033730.3033730.303373...0.3033900.3033900.3033910.3033920.3033920.3033930.3033930.3033930.3033930.303393
9420800430.7635340.7635380.7635430.7635470.7635510.7635560.7635600.7635650.7635690.763573...0.7638090.7638140.7638190.7638240.7638290.7638340.7638390.7638440.7638480.763852
9420800443.8732733.8724743.8716753.8708773.8700783.8692823.8684863.8676923.8669003.866110...3.8249773.8242153.8234503.8226853.8219193.8211543.8203883.8196223.8188573.818094
9420800451.0106781.0107111.0107431.0107751.0108061.0108361.0108661.0108941.0109221.010950...1.0125541.0125861.0126171.0126481.0126781.0127071.0127351.0127631.0127901.012817
\n", + "

10806 rows × 72 columns

\n", + "
" + ], + "text/plain": [ + " 2021-08-24 06:05:00 2021-08-24 06:10:00 2021-08-24 06:15:00 \\\n", + "1611674 0.000065 0.000065 0.000065 \n", + "1611676 0.000071 0.000071 0.000071 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002920 0.002920 0.002920 \n", + "3762964 0.001311 0.001311 0.001311 \n", + "... ... ... ... \n", + "942080041 0.431705 0.431712 0.431717 \n", + "942080042 0.303372 0.303373 0.303373 \n", + "942080043 0.763534 0.763538 0.763543 \n", + "942080044 3.873273 3.872474 3.871675 \n", + "942080045 1.010678 1.010711 1.010743 \n", + "\n", + " 2021-08-24 06:20:00 2021-08-24 06:25:00 2021-08-24 06:30:00 \\\n", + "1611674 0.000065 0.000065 0.000065 \n", + "1611676 0.000071 0.000071 0.000071 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002920 0.002920 0.002920 \n", + "3762964 0.001311 0.001311 0.001311 \n", + "... ... ... ... \n", + "942080041 0.431722 0.431727 0.431731 \n", + "942080042 0.303373 0.303374 0.303374 \n", + "942080043 0.763547 0.763551 0.763556 \n", + "942080044 3.870877 3.870078 3.869282 \n", + "942080045 1.010775 1.010806 1.010836 \n", + "\n", + " 2021-08-24 06:35:00 2021-08-24 06:40:00 2021-08-24 06:45:00 \\\n", + "1611674 0.000065 0.000065 0.000065 \n", + "1611676 0.000071 0.000071 0.000071 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002920 0.002920 0.002919 \n", + "3762964 0.001311 0.001311 0.001311 \n", + "... ... ... ... \n", + "942080041 0.431734 0.431737 0.431739 \n", + "942080042 0.303373 0.303373 0.303373 \n", + "942080043 0.763560 0.763565 0.763569 \n", + "942080044 3.868486 3.867692 3.866900 \n", + "942080045 1.010866 1.010894 1.010922 \n", + "\n", + " 2021-08-24 06:50:00 ... 2021-08-24 11:15:00 2021-08-24 11:20:00 \\\n", + "1611674 0.000065 ... 0.000063 0.000063 \n", + "1611676 0.000071 ... 0.000068 0.000068 \n", + "3763126 0.034257 ... 0.034257 0.034257 \n", + "3762962 0.002919 ... 0.002917 0.002917 \n", + "3762964 0.001311 ... 0.001310 0.001310 \n", + "... ... ... ... ... \n", + "942080041 0.431742 ... 0.431957 0.431962 \n", + "942080042 0.303373 ... 0.303390 0.303390 \n", + "942080043 0.763573 ... 0.763809 0.763814 \n", + "942080044 3.866110 ... 3.824977 3.824215 \n", + "942080045 1.010950 ... 1.012554 1.012586 \n", + "\n", + " 2021-08-24 11:25:00 2021-08-24 11:30:00 2021-08-24 11:35:00 \\\n", + "1611674 0.000063 0.000063 0.000063 \n", + "1611676 0.000068 0.000068 0.000068 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002917 0.002917 0.002917 \n", + "3762964 0.001310 0.001310 0.001310 \n", + "... ... ... ... \n", + "942080041 0.431966 0.431970 0.431973 \n", + "942080042 0.303391 0.303392 0.303392 \n", + "942080043 0.763819 0.763824 0.763829 \n", + "942080044 3.823450 3.822685 3.821919 \n", + "942080045 1.012617 1.012648 1.012678 \n", + "\n", + " 2021-08-24 11:40:00 2021-08-24 11:45:00 2021-08-24 11:50:00 \\\n", + "1611674 0.000063 0.000063 0.000063 \n", + "1611676 0.000068 0.000068 0.000068 \n", + "3763126 0.034257 0.034257 0.034257 \n", + "3762962 0.002917 0.002917 0.002917 \n", + "3762964 0.001310 0.001310 0.001310 \n", + "... ... ... ... \n", + "942080041 0.431976 0.431979 0.431981 \n", + "942080042 0.303393 0.303393 0.303393 \n", + "942080043 0.763834 0.763839 0.763844 \n", + "942080044 3.821154 3.820388 3.819622 \n", + "942080045 1.012707 1.012735 1.012763 \n", + "\n", + " 2021-08-24 11:55:00 2021-08-24 12:00:00 \n", + "1611674 0.000063 0.000063 \n", + "1611676 0.000068 0.000068 \n", + "3763126 0.034257 0.034257 \n", + "3762962 0.002917 0.002917 \n", + "3762964 0.001310 0.001310 \n", + "... ... ... \n", + "942080041 0.431983 0.431985 \n", + "942080042 0.303393 0.303393 \n", + "942080043 0.763848 0.763852 \n", + "942080044 3.818857 3.818094 \n", + "942080045 1.012790 1.012817 \n", + "\n", + "[10806 rows x 72 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.get_value('channel_exit_water_x-section__volume_flow_rate')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b5cad64-e837-4fd8-acc3-61b70748bf39", + "metadata": {}, "outputs": [], "source": [] } From d072a20d14f95d378f6415379404a9111ebec515 Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Thu, 6 Oct 2022 14:42:17 -0600 Subject: [PATCH 4/9] rearrange files, clean up bmi notebook --- run-troute-with-bmi.ipynb | 47 ++-- src/bmi_troute.py | 483 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 507 insertions(+), 23 deletions(-) create mode 100644 src/bmi_troute.py diff --git a/run-troute-with-bmi.ipynb b/run-troute-with-bmi.ipynb index 46c33ed01..3c92f9b20 100644 --- a/run-troute-with-bmi.ipynb +++ b/run-troute-with-bmi.ipynb @@ -5,7 +5,7 @@ "id": "7b663e55-9edb-40a7-ae1d-380880c6d077", "metadata": {}, "source": [ - "# Basic Model Interface (BMI) for streamflow prediction using Long Short-Term Memory (LSTM) networks" + "# Basic Model Interface (BMI) for streamflow routing using t-route" ] }, { @@ -18,17 +18,18 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 16, "id": "0708364e-4ecf-4fb1-bad4-78ec60c9a1c3", "metadata": {}, "outputs": [], "source": [ + "sys.path.append(\"../src/\")\n", "import bmi_troute # This is the BMI t-route that we will be running from the file: bmi_troute.py " ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 17, "id": "a53b4945-7966-4df4-a788-fe997fb711f7", "metadata": {}, "outputs": [], @@ -38,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 18, "id": "a2ededa4-6bd9-474a-b014-f104867428f7", "metadata": {}, "outputs": [ @@ -59,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 19, "id": "d3661d08-1340-4765-a676-53ca361d72ba", "metadata": {}, "outputs": [], @@ -69,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 20, "id": "954fe3a0-e75f-4629-af6d-5b8ba9e9428c", "metadata": {}, "outputs": [], @@ -79,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 21, "id": "e71a7f52-8bd2-44b5-950e-bc9e6de515ae", "metadata": {}, "outputs": [ @@ -492,7 +493,7 @@ "[10806 rows x 72 columns]" ] }, - "execution_count": 6, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -503,7 +504,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 22, "id": "616ba1d9-56eb-4903-b6e4-e854f127f02f", "metadata": {}, "outputs": [ @@ -513,7 +514,7 @@ "86400.0" ] }, - "execution_count": 7, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -532,7 +533,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 23, "id": "9cb21c69-1638-45ad-82d7-258cb69f5d21", "metadata": {}, "outputs": [ @@ -553,7 +554,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 24, "id": "adae192f-6058-4647-b074-e5d891732fd5", "metadata": {}, "outputs": [], @@ -563,7 +564,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 25, "id": "98cab86c-a288-4ddb-95c4-75323dad1b7f", "metadata": {}, "outputs": [], @@ -573,7 +574,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 26, "id": "690ef259-be43-4c07-808b-f4cd2c5ede77", "metadata": {}, "outputs": [ @@ -583,7 +584,7 @@ "21600.0" ] }, - "execution_count": 11, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -594,7 +595,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 27, "id": "55af3e52-f9ec-46c4-8f75-5c53784f48a2", "metadata": {}, "outputs": [ @@ -1007,7 +1008,7 @@ "[10806 rows x 72 columns]" ] }, - "execution_count": 12, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1026,7 +1027,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 28, "id": "52902573-41ae-40c9-b3dc-e790ead208c3", "metadata": {}, "outputs": [], @@ -1036,7 +1037,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 29, "id": "92c0e23c-0c0b-401c-9f31-ea41f8b11aa8", "metadata": {}, "outputs": [ @@ -1046,7 +1047,7 @@ "86400.0" ] }, - "execution_count": 14, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1057,7 +1058,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 30, "id": "4c618714-0415-4aa2-a5d6-c49c582f008d", "metadata": {}, "outputs": [ @@ -1470,7 +1471,7 @@ "[10806 rows x 72 columns]" ] }, - "execution_count": 15, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1482,7 +1483,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3b5cad64-e837-4fd8-acc3-61b70748bf39", + "id": "b09ca024-d342-4391-8951-0463dda8fb3e", "metadata": {}, "outputs": [], "source": [] diff --git a/src/bmi_troute.py b/src/bmi_troute.py new file mode 100644 index 000000000..9640a71a1 --- /dev/null +++ b/src/bmi_troute.py @@ -0,0 +1,483 @@ +"""Basic Model Interface implementation for t-route.""" + +import numpy as np +from bmipy import Bmi +from pathlib import Path +import yaml + +import troute.main_utilities as tr +import troute.nhd_network_utilities_v02 as nnu + + + +class bmi_troute(Bmi): + + def __init__(self): + """Create a Bmi troute model that is ready for initialization.""" + super(bmi_troute, self).__init__() + #self._model = None + self._values = {} + #self._var_units = {} + self._var_loc = "node" + self._var_grid_id = 0 + #self._grids = {} + #self._grid_type = {} + + self._start_time = 0.0 + self._end_time = np.finfo("d").max + self._time_units = "s" + + #---------------------------------------------- + # Required, static attributes of the model + #---------------------------------------------- + _att_map = { + 'model_name': 'T-Route for Next Generation NWM', + 'version': '', + 'author_name': '', + 'grid_type': 'scalar', + 'time_step_size': 1, + #'time_step_type': 'donno', #unused + #'step_method': 'none', #unused + #'time_units': '1 hour' #NJF Have to drop the 1 for NGEN to recognize the unit + 'time_units': 'seconds' } + + #--------------------------------------------- + # Input variable names (CSDMS standard names) + #--------------------------------------------- + _input_var_names = ['land_surface_water__runoff_volume_flux'] + + #--------------------------------------------- + # Output variable names (CSDMS standard names) + #--------------------------------------------- + _output_var_names = ['channel_exit_water_x-section__volume_flow_rate', + 'channel_water_flow__speed', + 'channel_water__mean_depth', + 'lake_water~incoming__volume_flow_rate', + 'lake_water~outgoing__volume_flow_rate', + 'lake_surface__elevation' #FIXME: this variable isn't a standard CSDMS name...couldn't find one more appropriate + ] + + #------------------------------------------------------ + # Create a Python dictionary that maps CSDMS Standard + # Names to the model's internal variable names. + #------------------------------------------------------ + _var_name_units_map = { + 'channel_exit_water_x-section__volume_flow_rate':['streamflow_cms','m3 s-1'], + 'channel_water_flow__speed':['streamflow_ms','m s-1'], + 'channel_water__mean_depth':['streamflow_m','m'], + 'lake_water~incoming__volume_flow_rate':['waterbody_cms','m3 s-1'], + 'lake_water~outgoing__volume_flow_rate':['waterbody_cms','m3 s-1'], + 'lake_surface__elevation':['waterbody_m','m'], + #-------------- Dynamic inputs -------------------------------- + 'land_surface_water__runoff_volume_flux':['streamflow_cms','m3 s-1'] + } + + #------------------------------------------------------ + # A list of static attributes. Not all these need to be used. + #------------------------------------------------------ + _static_attributes_list = [] + + + #------------------------------------------------------------ + #------------------------------------------------------------ + # BMI: Model Control Functions + #------------------------------------------------------------ + #------------------------------------------------------------ + + #------------------------------------------------------------------- + def initialize(self, bmi_cfg_file=None): + + # -------------- Read in the BMI configuration -------------------------# + bmi_cfg_file = Path(bmi_cfg_file) + # ----- Create some lookup tabels from the long variable names --------# + self._var_name_map_long_first = {long_name:self._var_name_units_map[long_name][0] for \ + long_name in self._var_name_units_map.keys()} + self._var_name_map_short_first = {self._var_name_units_map[long_name][0]:long_name for \ + long_name in self._var_name_units_map.keys()} + self._var_units_map = {long_name:self._var_name_units_map[long_name][1] for \ + long_name in self._var_name_units_map.keys()} + + # -------------- Initalize all the variables --------------------------# + # -------------- so that they'll be picked up with the get functions --# + for var_name in list(self._var_name_units_map.keys()): + # ---------- All the variables are single values ------------------# + # ---------- so just set to zero for now. ------------------# + self._values[var_name] = 0 + setattr( self, var_name, 0 ) + + # This will direct all the next moves. + if bmi_cfg_file is not None: + + with bmi_cfg_file.open('r') as fp: + cfg = yaml.safe_load(fp) + self._cfg_bmi = self._parse_config(cfg) + else: + print("Error: No configuration provided, nothing to do...") + + # ------------- Initialize t-route model ------------------------------# + (self._network, + self._log_parameters, + self._preprocessing_parameters, + self._supernetwork_parameters, + self._waterbody_parameters, + self._compute_parameters, + self._forcing_parameters, + self._restart_parameters, + self._hybrid_parameters, + self._output_parameters, + self._parity_parameters, + self._data_assimilation_parameters, + self._run_parameters, + ) = tr.initialize_network(self._cfg_bmi) + + self._start_time = 0.0 + self._end_time = self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') + self._time = 0.0 + self._time_step = self._forcing_parameters.get('dt') + self._time_units = 's' + + def update(self): + """Advance model by one time step.""" + self._run_results = tr.run_routing( + self._network, + self._data_assimilation, + self._run_sets, + self._da_sets, + self._compute_parameters, + self._forcing_parameters, + self._waterbody_parameters, + self._output_parameters, + self._hybrid_parameters, + self._data_assimilation_parameters, + self._run_parameters, + self._parity_sets) + + (self._values['channel_exit_water_x-section__volume_flow_rate'], + self._values['channel_water_flow__speed'], + self._values['channel_water__mean_depth'], + self._values['lake_water~incoming__volume_flow_rate'], + self._values['lake_water~outgoing__volume_flow_rate'], + self._values['lake_surface__elevation'], + ) = tr.create_output_dataframes( + self._run_results, + self._run_sets, + self._network._waterbody_df, + self._network.link_lake_crosswalk) + + self._time += self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') + + def update_frac(self, time_frac): + """Update model by a fraction of a time step. + Parameters + ---------- + time_frac : float + Fraction fo a time step. + """ + time_step = self.get_time_step() + self._model.time_step = time_frac * time_step + self.update() + self._model.time_step = time_step + + def update_until(self, then): + """Update model until a particular time. + Parameters + ---------- + then : float + Time to run model until in seconds. + """ + n_steps = (then - self.get_current_time()) / self.get_time_step() + + full_nts = self._forcing_parameters.get('nts') + self._forcing_parameters['nts'] = n_steps + + self.set_value() + self.update() + + self._network.t0 = self._run_sets[-1].get('final_timestamp') + self._forcing_parameters['nts'] = full_nts - n_steps + self.set_value() + + ''' + for _ in range(int(n_steps)): + self.update() + self.update_frac(n_steps - int(n_steps)) + ''' + + def finalize(self): + """Finalize model.""" + self._model = None + + def get_var_type(self, var_name): + """Data type of variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + str + Data type. + """ + return str(self.get_value_ptr(var_name).dtype) + + def get_var_units(self, var_name): + """Get units of variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + str + Variable units. + """ + return self._var_units[var_name] + + def get_var_nbytes(self, var_name): + """Get units of variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + int + Size of data array in bytes. + """ + return self.get_value_ptr(var_name).nbytes + + def get_var_itemsize(self, name): + return np.dtype(self.get_var_type(name)).itemsize + + def get_var_location(self, name): + return self._var_loc[name] + + def get_var_grid(self, var_name): + """Grid id for a variable. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + int + Grid id. + """ + for grid_id, var_name_list in self._grids.items(): + if var_name in var_name_list: + return grid_id + + def get_grid_rank(self, grid_id): + """Rank of grid. + Parameters + ---------- + grid_id : int + Identifier of a grid. + Returns + ------- + int + Rank of grid. + """ + return len(self._model.shape) + + def get_grid_size(self, grid_id): + """Size of grid. + Parameters + ---------- + grid_id : int + Identifier of a grid. + Returns + ------- + int + Size of grid. + """ + return int(np.prod(self._model.shape)) + + def get_value_ptr(self, var_name): + """Reference to values. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + array_like + Value array. + """ + return self._values[var_name] + + def get_value(self, var_name): + """Copy of values. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + Returns + ------- + output_df : pd.DataFrame + Copy of values. + """ + output_df = self.get_value_ptr(var_name) + return output_df + + def get_value_at_indices(self, var_name, dest, indices): + """Get values at particular indices. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + dest : ndarray + A numpy array into which to place the values. + indices : array_like + Array of indices. + Returns + ------- + array_like + Values at indices. + """ + dest[:] = self.get_value_ptr(var_name).take(indices) + return dest + + def set_value(self): + """Set model values""" + ( + self._run_sets, + self._da_sets, + self._parity_sets + ) = tr.build_run_sets(self._network, + self._forcing_parameters, + self._compute_parameters, + self._data_assimilation_parameters, + self._output_parameters, + self._parity_parameters) + + # Create forcing data within network object for first loop iteration + self._network.assemble_forcings( + self._run_sets[0], + self._forcing_parameters, + self._hybrid_parameters, + self._compute_parameters.get('cpu_pool', None)) + + # Create data assimilation object from da_sets for first loop iteration + self._data_assimilation = tr.build_data_assimilation( + self._network, + self._data_assimilation_parameters, + self._waterbody_parameters, + self._da_sets[0], + self._forcing_parameters, + self._compute_parameters) + + def set_value_at_indices(self, name, inds, src): + """Set model values at particular indices. + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + src : array_like + Array of new values. + indices : array_like + Array of indices. + """ + val = self.get_value_ptr(name) + val.flat[inds] = src + + def get_component_name(self): + """Name of the component.""" + return self._name + + def get_input_item_count(self): + """Get names of input variables.""" + return len(self._input_var_names) + + def get_output_item_count(self): + """Get names of output variables.""" + return len(self._output_var_names) + + def get_input_var_names(self): + """Get names of input variables.""" + return self._input_var_names + + def get_output_var_names(self): + """Get names of output variables.""" + return self._output_var_names + + def get_grid_shape(self, grid_id, shape): + """Number of rows and columns of uniform rectilinear grid.""" + var_name = self._grids[grid_id][0] + shape[:] = self.get_value_ptr(var_name).shape + return shape + + def get_grid_spacing(self, grid_id, spacing): + """Spacing of rows and columns of uniform rectilinear grid.""" + spacing[:] = self._model.spacing + return spacing + + def get_grid_origin(self, grid_id, origin): + """Origin of uniform rectilinear grid.""" + origin[:] = self._model.origin + return origin + + def get_grid_type(self, grid_id): + """Type of grid.""" + return self._grid_type[grid_id] + + def get_start_time(self): + """Start time of model.""" + return self._start_time + + def get_end_time(self): + """End time of model.""" + return self._end_time + + def get_current_time(self): + return self._time + + def get_time_step(self): + return self._time_step + + def get_time_units(self): + return self._time_units + + def get_grid_edge_count(self, grid): + raise NotImplementedError("get_grid_edge_count") + + def get_grid_edge_nodes(self, grid, edge_nodes): + raise NotImplementedError("get_grid_edge_nodes") + + def get_grid_face_count(self, grid): + raise NotImplementedError("get_grid_face_count") + + def get_grid_face_nodes(self, grid, face_nodes): + raise NotImplementedError("get_grid_face_nodes") + + def get_grid_node_count(self, grid): + """Number of grid nodes. + Parameters + ---------- + grid : int + Identifier of a grid. + Returns + ------- + int + Size of grid. + """ + return self.get_grid_size(grid) + + def get_grid_nodes_per_face(self, grid, nodes_per_face): + raise NotImplementedError("get_grid_nodes_per_face") + + def get_grid_face_edges(self, grid, face_edges): + raise NotImplementedError("get_grid_face_edges") + + def get_grid_x(self, grid, x): + raise NotImplementedError("get_grid_x") + + def get_grid_y(self, grid, y): + raise NotImplementedError("get_grid_y") + + def get_grid_z(self, grid, z): + raise NotImplementedError("get_grid_z") + + def _parse_config(self, cfg): + cfg_list = [cfg.get('flag'),cfg.get('file')] + return cfg_list \ No newline at end of file From 8c0ef6561687c0f0a574c48ac46bf6f5cfad6ef6 Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Thu, 6 Oct 2022 14:43:41 -0600 Subject: [PATCH 5/9] move bmi_troute.py to src/ --- bmi_troute.py | 483 -------------------------------------------------- 1 file changed, 483 deletions(-) delete mode 100644 bmi_troute.py diff --git a/bmi_troute.py b/bmi_troute.py deleted file mode 100644 index 9640a71a1..000000000 --- a/bmi_troute.py +++ /dev/null @@ -1,483 +0,0 @@ -"""Basic Model Interface implementation for t-route.""" - -import numpy as np -from bmipy import Bmi -from pathlib import Path -import yaml - -import troute.main_utilities as tr -import troute.nhd_network_utilities_v02 as nnu - - - -class bmi_troute(Bmi): - - def __init__(self): - """Create a Bmi troute model that is ready for initialization.""" - super(bmi_troute, self).__init__() - #self._model = None - self._values = {} - #self._var_units = {} - self._var_loc = "node" - self._var_grid_id = 0 - #self._grids = {} - #self._grid_type = {} - - self._start_time = 0.0 - self._end_time = np.finfo("d").max - self._time_units = "s" - - #---------------------------------------------- - # Required, static attributes of the model - #---------------------------------------------- - _att_map = { - 'model_name': 'T-Route for Next Generation NWM', - 'version': '', - 'author_name': '', - 'grid_type': 'scalar', - 'time_step_size': 1, - #'time_step_type': 'donno', #unused - #'step_method': 'none', #unused - #'time_units': '1 hour' #NJF Have to drop the 1 for NGEN to recognize the unit - 'time_units': 'seconds' } - - #--------------------------------------------- - # Input variable names (CSDMS standard names) - #--------------------------------------------- - _input_var_names = ['land_surface_water__runoff_volume_flux'] - - #--------------------------------------------- - # Output variable names (CSDMS standard names) - #--------------------------------------------- - _output_var_names = ['channel_exit_water_x-section__volume_flow_rate', - 'channel_water_flow__speed', - 'channel_water__mean_depth', - 'lake_water~incoming__volume_flow_rate', - 'lake_water~outgoing__volume_flow_rate', - 'lake_surface__elevation' #FIXME: this variable isn't a standard CSDMS name...couldn't find one more appropriate - ] - - #------------------------------------------------------ - # Create a Python dictionary that maps CSDMS Standard - # Names to the model's internal variable names. - #------------------------------------------------------ - _var_name_units_map = { - 'channel_exit_water_x-section__volume_flow_rate':['streamflow_cms','m3 s-1'], - 'channel_water_flow__speed':['streamflow_ms','m s-1'], - 'channel_water__mean_depth':['streamflow_m','m'], - 'lake_water~incoming__volume_flow_rate':['waterbody_cms','m3 s-1'], - 'lake_water~outgoing__volume_flow_rate':['waterbody_cms','m3 s-1'], - 'lake_surface__elevation':['waterbody_m','m'], - #-------------- Dynamic inputs -------------------------------- - 'land_surface_water__runoff_volume_flux':['streamflow_cms','m3 s-1'] - } - - #------------------------------------------------------ - # A list of static attributes. Not all these need to be used. - #------------------------------------------------------ - _static_attributes_list = [] - - - #------------------------------------------------------------ - #------------------------------------------------------------ - # BMI: Model Control Functions - #------------------------------------------------------------ - #------------------------------------------------------------ - - #------------------------------------------------------------------- - def initialize(self, bmi_cfg_file=None): - - # -------------- Read in the BMI configuration -------------------------# - bmi_cfg_file = Path(bmi_cfg_file) - # ----- Create some lookup tabels from the long variable names --------# - self._var_name_map_long_first = {long_name:self._var_name_units_map[long_name][0] for \ - long_name in self._var_name_units_map.keys()} - self._var_name_map_short_first = {self._var_name_units_map[long_name][0]:long_name for \ - long_name in self._var_name_units_map.keys()} - self._var_units_map = {long_name:self._var_name_units_map[long_name][1] for \ - long_name in self._var_name_units_map.keys()} - - # -------------- Initalize all the variables --------------------------# - # -------------- so that they'll be picked up with the get functions --# - for var_name in list(self._var_name_units_map.keys()): - # ---------- All the variables are single values ------------------# - # ---------- so just set to zero for now. ------------------# - self._values[var_name] = 0 - setattr( self, var_name, 0 ) - - # This will direct all the next moves. - if bmi_cfg_file is not None: - - with bmi_cfg_file.open('r') as fp: - cfg = yaml.safe_load(fp) - self._cfg_bmi = self._parse_config(cfg) - else: - print("Error: No configuration provided, nothing to do...") - - # ------------- Initialize t-route model ------------------------------# - (self._network, - self._log_parameters, - self._preprocessing_parameters, - self._supernetwork_parameters, - self._waterbody_parameters, - self._compute_parameters, - self._forcing_parameters, - self._restart_parameters, - self._hybrid_parameters, - self._output_parameters, - self._parity_parameters, - self._data_assimilation_parameters, - self._run_parameters, - ) = tr.initialize_network(self._cfg_bmi) - - self._start_time = 0.0 - self._end_time = self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') - self._time = 0.0 - self._time_step = self._forcing_parameters.get('dt') - self._time_units = 's' - - def update(self): - """Advance model by one time step.""" - self._run_results = tr.run_routing( - self._network, - self._data_assimilation, - self._run_sets, - self._da_sets, - self._compute_parameters, - self._forcing_parameters, - self._waterbody_parameters, - self._output_parameters, - self._hybrid_parameters, - self._data_assimilation_parameters, - self._run_parameters, - self._parity_sets) - - (self._values['channel_exit_water_x-section__volume_flow_rate'], - self._values['channel_water_flow__speed'], - self._values['channel_water__mean_depth'], - self._values['lake_water~incoming__volume_flow_rate'], - self._values['lake_water~outgoing__volume_flow_rate'], - self._values['lake_surface__elevation'], - ) = tr.create_output_dataframes( - self._run_results, - self._run_sets, - self._network._waterbody_df, - self._network.link_lake_crosswalk) - - self._time += self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') - - def update_frac(self, time_frac): - """Update model by a fraction of a time step. - Parameters - ---------- - time_frac : float - Fraction fo a time step. - """ - time_step = self.get_time_step() - self._model.time_step = time_frac * time_step - self.update() - self._model.time_step = time_step - - def update_until(self, then): - """Update model until a particular time. - Parameters - ---------- - then : float - Time to run model until in seconds. - """ - n_steps = (then - self.get_current_time()) / self.get_time_step() - - full_nts = self._forcing_parameters.get('nts') - self._forcing_parameters['nts'] = n_steps - - self.set_value() - self.update() - - self._network.t0 = self._run_sets[-1].get('final_timestamp') - self._forcing_parameters['nts'] = full_nts - n_steps - self.set_value() - - ''' - for _ in range(int(n_steps)): - self.update() - self.update_frac(n_steps - int(n_steps)) - ''' - - def finalize(self): - """Finalize model.""" - self._model = None - - def get_var_type(self, var_name): - """Data type of variable. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - Returns - ------- - str - Data type. - """ - return str(self.get_value_ptr(var_name).dtype) - - def get_var_units(self, var_name): - """Get units of variable. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - Returns - ------- - str - Variable units. - """ - return self._var_units[var_name] - - def get_var_nbytes(self, var_name): - """Get units of variable. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - Returns - ------- - int - Size of data array in bytes. - """ - return self.get_value_ptr(var_name).nbytes - - def get_var_itemsize(self, name): - return np.dtype(self.get_var_type(name)).itemsize - - def get_var_location(self, name): - return self._var_loc[name] - - def get_var_grid(self, var_name): - """Grid id for a variable. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - Returns - ------- - int - Grid id. - """ - for grid_id, var_name_list in self._grids.items(): - if var_name in var_name_list: - return grid_id - - def get_grid_rank(self, grid_id): - """Rank of grid. - Parameters - ---------- - grid_id : int - Identifier of a grid. - Returns - ------- - int - Rank of grid. - """ - return len(self._model.shape) - - def get_grid_size(self, grid_id): - """Size of grid. - Parameters - ---------- - grid_id : int - Identifier of a grid. - Returns - ------- - int - Size of grid. - """ - return int(np.prod(self._model.shape)) - - def get_value_ptr(self, var_name): - """Reference to values. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - Returns - ------- - array_like - Value array. - """ - return self._values[var_name] - - def get_value(self, var_name): - """Copy of values. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - Returns - ------- - output_df : pd.DataFrame - Copy of values. - """ - output_df = self.get_value_ptr(var_name) - return output_df - - def get_value_at_indices(self, var_name, dest, indices): - """Get values at particular indices. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - dest : ndarray - A numpy array into which to place the values. - indices : array_like - Array of indices. - Returns - ------- - array_like - Values at indices. - """ - dest[:] = self.get_value_ptr(var_name).take(indices) - return dest - - def set_value(self): - """Set model values""" - ( - self._run_sets, - self._da_sets, - self._parity_sets - ) = tr.build_run_sets(self._network, - self._forcing_parameters, - self._compute_parameters, - self._data_assimilation_parameters, - self._output_parameters, - self._parity_parameters) - - # Create forcing data within network object for first loop iteration - self._network.assemble_forcings( - self._run_sets[0], - self._forcing_parameters, - self._hybrid_parameters, - self._compute_parameters.get('cpu_pool', None)) - - # Create data assimilation object from da_sets for first loop iteration - self._data_assimilation = tr.build_data_assimilation( - self._network, - self._data_assimilation_parameters, - self._waterbody_parameters, - self._da_sets[0], - self._forcing_parameters, - self._compute_parameters) - - def set_value_at_indices(self, name, inds, src): - """Set model values at particular indices. - Parameters - ---------- - var_name : str - Name of variable as CSDMS Standard Name. - src : array_like - Array of new values. - indices : array_like - Array of indices. - """ - val = self.get_value_ptr(name) - val.flat[inds] = src - - def get_component_name(self): - """Name of the component.""" - return self._name - - def get_input_item_count(self): - """Get names of input variables.""" - return len(self._input_var_names) - - def get_output_item_count(self): - """Get names of output variables.""" - return len(self._output_var_names) - - def get_input_var_names(self): - """Get names of input variables.""" - return self._input_var_names - - def get_output_var_names(self): - """Get names of output variables.""" - return self._output_var_names - - def get_grid_shape(self, grid_id, shape): - """Number of rows and columns of uniform rectilinear grid.""" - var_name = self._grids[grid_id][0] - shape[:] = self.get_value_ptr(var_name).shape - return shape - - def get_grid_spacing(self, grid_id, spacing): - """Spacing of rows and columns of uniform rectilinear grid.""" - spacing[:] = self._model.spacing - return spacing - - def get_grid_origin(self, grid_id, origin): - """Origin of uniform rectilinear grid.""" - origin[:] = self._model.origin - return origin - - def get_grid_type(self, grid_id): - """Type of grid.""" - return self._grid_type[grid_id] - - def get_start_time(self): - """Start time of model.""" - return self._start_time - - def get_end_time(self): - """End time of model.""" - return self._end_time - - def get_current_time(self): - return self._time - - def get_time_step(self): - return self._time_step - - def get_time_units(self): - return self._time_units - - def get_grid_edge_count(self, grid): - raise NotImplementedError("get_grid_edge_count") - - def get_grid_edge_nodes(self, grid, edge_nodes): - raise NotImplementedError("get_grid_edge_nodes") - - def get_grid_face_count(self, grid): - raise NotImplementedError("get_grid_face_count") - - def get_grid_face_nodes(self, grid, face_nodes): - raise NotImplementedError("get_grid_face_nodes") - - def get_grid_node_count(self, grid): - """Number of grid nodes. - Parameters - ---------- - grid : int - Identifier of a grid. - Returns - ------- - int - Size of grid. - """ - return self.get_grid_size(grid) - - def get_grid_nodes_per_face(self, grid, nodes_per_face): - raise NotImplementedError("get_grid_nodes_per_face") - - def get_grid_face_edges(self, grid, face_edges): - raise NotImplementedError("get_grid_face_edges") - - def get_grid_x(self, grid, x): - raise NotImplementedError("get_grid_x") - - def get_grid_y(self, grid, y): - raise NotImplementedError("get_grid_y") - - def get_grid_z(self, grid, z): - raise NotImplementedError("get_grid_z") - - def _parse_config(self, cfg): - cfg_list = [cfg.get('flag'),cfg.get('file')] - return cfg_list \ No newline at end of file From 11aea17e1243ece71d95a18261174aaeb13983e7 Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Thu, 6 Oct 2022 15:06:28 -0600 Subject: [PATCH 6/9] add LowerColorado bmi-config file --- bmi_config_files/LowerColorado.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 bmi_config_files/LowerColorado.yml diff --git a/bmi_config_files/LowerColorado.yml b/bmi_config_files/LowerColorado.yml new file mode 100644 index 000000000..ee1ff325c --- /dev/null +++ b/bmi_config_files/LowerColorado.yml @@ -0,0 +1,4 @@ +flag: + '-f' +file: + 'test/LowerColorado_TX/test_AnA_bmi.yaml' \ No newline at end of file From cdd3762bf4af4fe655c1c0b23d97aa095ffc3db7 Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Thu, 6 Oct 2022 15:08:03 -0600 Subject: [PATCH 7/9] delete bmi_utilities.py, no longer needed --- src/troute-network/troute/bmi_utilities.py | 340 --------------------- 1 file changed, 340 deletions(-) delete mode 100644 src/troute-network/troute/bmi_utilities.py diff --git a/src/troute-network/troute/bmi_utilities.py b/src/troute-network/troute/bmi_utilities.py deleted file mode 100644 index 22d3c0078..000000000 --- a/src/troute-network/troute/bmi_utilities.py +++ /dev/null @@ -1,340 +0,0 @@ -import json -import pathlib -import numpy as np -import pandas as pd -from datetime import datetime, timedelta - -import troute.nhd_io as nhd_io - -def build_run_sets(model): - - # Create run_sets: sets of forcing files for each loop - run_sets = build_forcing_sets(model._forcing_parameters, model._network.t0) - - # Create da_sets: sets of TimeSlice files for each loop - if "data_assimilation_parameters" in model._compute_parameters: - da_sets = build_da_sets(model._data_assimilation_parameters, run_sets, model._network.t0) - - # Create parity_sets: sets of CHRTOUT files against which to compare t-route flows - if "wrf_hydro_parity_check" in model._output_parameters: - parity_sets = build_parity_sets(model._parity_parameters, run_sets) - else: - parity_sets = [] - - return run_sets, da_sets, parity_sets - -def build_forcings(network, run, forcing_parameters, hybrid_parameters, compute_parameters): - - cpu_pool = compute_parameters.get('cpu_pool', None) - # Create forcing data within network object for first loop iteration - network.assemble_forcings(run, forcing_parameters, hybrid_parameters, cpu_pool) - - return network - -def build_data_assimilation(network, data_assimilation_parameters, waterbody_parameters, da_run, forcing_parameters, compute_parameters): - - #FIXME: hack to get run_parameters. This is done in input_handler_v2. Probably need - # to find a better way to do this here though... - if not 'run_parameters' in locals(): - run_parameters = {'dt': forcing_parameters.get('dt'), - 'nts': forcing_parameters.get('nts'), - 'cpu_pool': compute_parameters.get('cpu_pool', None)} - - # Create data assimilation object from da_sets for first loop iteration - data_assimilation = AllDA(data_assimilation_parameters, - run_parameters, - waterbody_parameters, - network, - da_run) - -# if showtiming: -# forcing_end_time = time.time() -# task_times['forcing_time'] += forcing_end_time - network_end_time - - return data_assimilation - -def build_forcing_sets( - forcing_parameters, - t0 -): - - run_sets = forcing_parameters.get("qlat_forcing_sets", None) - qlat_input_folder = forcing_parameters.get("qlat_input_folder", None) - nts = forcing_parameters.get("nts", None) - max_loop_size = forcing_parameters.get("max_loop_size", 12) - dt = forcing_parameters.get("dt", None) - - try: - qlat_input_folder = pathlib.Path(qlat_input_folder) - assert qlat_input_folder.is_dir() == True - except TypeError: - raise TypeError("Aborting simulation because no qlat_input_folder is specified in the forcing_parameters section of the .yaml control file.") from None - except AssertionError: - raise AssertionError("Aborting simulation because the qlat_input_folder:", qlat_input_folder,"does not exist. Please check the the qlat_input_folder variable is correctly entered in the .yaml control file") from None - - forcing_glob_filter = forcing_parameters.get("qlat_file_pattern_filter", "*.CHRTOUT_DOMAIN1") - - # TODO: Throw errors if insufficient input data are available - - if run_sets: - - # append final_timestamp variable to each set_list - qlat_input_folder = pathlib.Path(qlat_input_folder) - for (s, _) in enumerate(run_sets): - final_chrtout = qlat_input_folder.joinpath(run_sets[s]['qlat_files' - ][-1]) - final_timestamp_str = nhd_io.get_param_str(final_chrtout, - 'model_output_valid_time') - run_sets[s]['final_timestamp'] = \ - datetime.strptime(final_timestamp_str, '%Y-%m-%d_%H:%M:%S') - - elif qlat_input_folder: - - # Construct run_set dictionary from user-specified parameters - - # get the first and seconded files from an ordered list of all forcing files - qlat_input_folder = pathlib.Path(qlat_input_folder) - all_files = sorted(qlat_input_folder.glob(forcing_glob_filter)) - first_file = all_files[0] - second_file = all_files[1] - - # Deduce the timeinterval of the forcing data from the output timestamps of the first - # two ordered CHRTOUT files - t1 = nhd_io.get_param_str(first_file, "model_output_valid_time") - t1 = datetime.strptime(t1, "%Y-%m-%d_%H:%M:%S") - t2 = nhd_io.get_param_str(second_file, "model_output_valid_time") - t2 = datetime.strptime(t2, "%Y-%m-%d_%H:%M:%S") - dt_qlat_timedelta = t2 - t1 - dt_qlat = dt_qlat_timedelta.seconds - - # determine qts_subdivisions - qts_subdivisions = dt_qlat / dt - if dt_qlat % dt == 0: - qts_subdivisions = dt_qlat / dt - - # the number of files required for the simulation - nfiles = int(np.ceil(nts / qts_subdivisions)) - - # list of forcing file datetimes - datetime_list = [t0 + dt_qlat_timedelta * (n + 1) for n in - range(nfiles)] - datetime_list_str = [datetime.strftime(d, '%Y%m%d%H%M') for d in - datetime_list] - - # list of forcing files - forcing_filename_list = [d_str + ".CHRTOUT_DOMAIN1" for d_str in - datetime_list_str] - - # check that all forcing files exist - for f in forcing_filename_list: - try: - J = pathlib.Path(qlat_input_folder.joinpath(f)) - assert J.is_file() == True - except AssertionError: - raise AssertionError("Aborting simulation because forcing file", J, "cannot be not found.") from None - - # build run sets list - run_sets = [] - k = 0 - j = 0 - nts_accum = 0 - nts_last = 0 - while k < len(forcing_filename_list): - run_sets.append({}) - - if k + max_loop_size < len(forcing_filename_list): - run_sets[j]['qlat_files'] = forcing_filename_list[k:k - + max_loop_size] - else: - run_sets[j]['qlat_files'] = forcing_filename_list[k:] - - nts_accum += len(run_sets[j]['qlat_files']) * qts_subdivisions - if nts_accum <= nts: - run_sets[j]['nts'] = int(len(run_sets[j]['qlat_files']) - * qts_subdivisions) - else: - run_sets[j]['nts'] = int(nts - nts_last) - - final_chrtout = qlat_input_folder.joinpath(run_sets[j]['qlat_files' - ][-1]) - final_timestamp_str = nhd_io.get_param_str(final_chrtout, - 'model_output_valid_time') - run_sets[j]['final_timestamp'] = \ - datetime.strptime(final_timestamp_str, '%Y-%m-%d_%H:%M:%S') - - nts_last = nts_accum - k += max_loop_size - j += 1 - - return run_sets - -def build_da_sets(da_params, run_sets, t0): - """ - Create set lists of USGS and/or USACE TimeSlice files used for - streamflow and reservoir data assimilation - - Arguments - -------- - - da_params (dict): user-input data assimilation parameters - - run_sets (list) : forcing files for each run set in the simlation - - t0 (datetime) : model initialization time - - Returns - ------- - - da_sets (list) : lists of USGS and USACE TimeSlice files for each run set - in the simulation - - Notes - ----- - - """ - - # check for user-input usgs and usace timeslice directories - usgs_timeslices_folder = da_params.get( - "usgs_timeslices_folder", - None - ) - usace_timeslices_folder = da_params.get( - "usace_timeslices_folder", - None - ) - - # User-specified DA ON/OFF preferences - usace_da = False - usgs_da = False - reservoir_da = da_params.get('reservoir_da', False) - if reservoir_da: - usgs_da = reservoir_da.get('reservoir_persistence_usgs', False) - usace_da = reservoir_da.get('reservoir_persistence_usace', False) - - nudging = False - streamflow_da = da_params.get('streamflow_da', False) - if streamflow_da: - nudging = streamflow_da.get('streamflow_nudging', False) - - if not usgs_da and not usace_da and not nudging: - # if all DA capabilities are OFF, return empty dictionary - da_sets = [{} for _ in run_sets] - - # if no user-input timeslice folders, a list of empty dictionaries - elif not usgs_timeslices_folder and not usace_timeslices_folder: - # if no timeslice folders, return empty dictionary - da_sets = [{} for _ in run_sets] - - # if user-input timeslice folders are present, build TimeSlice sets - else: - - # create Path objects for each TimeSlice directory - if usgs_timeslices_folder: - usgs_timeslices_folder = pathlib.Path(usgs_timeslices_folder) - if usace_timeslices_folder: - usace_timeslices_folder = pathlib.Path(usace_timeslices_folder) - - # the number of timeslice files appended to the front- and back-ends - # of the TimeSlice file interpolation stack - pad_hours = da_params.get("timeslice_lookback_hours",0) - timeslice_pad = pad_hours * 4 # number of 15 minute TimeSlices in the pad - - # timedelta of TimeSlice data - typically 15 minutes - dt_timeslice = timedelta(minutes = 15) - - da_sets = [] # initialize list to store TimeSlice set lists - - # Loop through each run set and build lists of available TimeSlice files - for (i, set_dict) in enumerate(run_sets): - - # Append an empty dictionary to the loop, which be used to hold - # lists of USGS and USACE TimeSlice files. - da_sets.append({}) - - # timestamps of TimeSlice files desired for run set i - timestamps = pd.date_range( - t0 - dt_timeslice * timeslice_pad, - run_sets[i]['final_timestamp'] + dt_timeslice * 4, - freq=dt_timeslice - ) - - # identify available USGS TimeSlices in run set i - if (usgs_timeslices_folder and nudging) or (usgs_timeslices_folder and usgs_da): - filenames_usgs = (timestamps.strftime('%Y-%m-%d_%H:%M:%S') - + '.15min.usgsTimeSlice.ncdf').to_list() - - # identify available USGS TimeSlices - filenames_usgs = _check_timeslice_exists( - filenames_usgs, - usgs_timeslices_folder - ) - - # Add available TimeSlices to da_sets list - da_sets[i]['usgs_timeslice_files'] = filenames_usgs - - # identify available USACE TimeSlices in run set i - if usace_timeslices_folder and usace_da: - filenames_usace = (timestamps.strftime('%Y-%m-%d_%H:%M:%S') - + '.15min.usaceTimeSlice.ncdf').to_list() - - # identify available USACE TimeSlices - filenames_usace = _check_timeslice_exists( - filenames_usace, - usace_timeslices_folder - ) - - # Add available TimeSlices to da_sets list - da_sets[i]['usace_timeslice_files'] = filenames_usace - - # reset initialization time for loop set i+1 - t0 = run_sets[i]['final_timestamp'] - - return da_sets - -def build_parity_sets(parity_parameters, run_sets): - - parity_sets = parity_parameters.get("parity_check_compare_file_sets", None) - - if parity_sets: - pass - - else: - - parity_sets = [] - for (i, set_dict) in enumerate(run_sets): - parity_sets.append({}) - parity_sets[i]['validation_files'] = run_sets[i]['qlat_files'] - - return parity_sets - -def _check_timeslice_exists(filenames, timeslices_folder): - """ - Check that each TimeSlice file in a list of files exists. Return a list of - available files. - - Arguments - --------- - - filenames (list of str): TimeSlice filenames - - timeslices_folder (pathlib.PosixPath): TimeSlice directory - - Returns - ------- - - filenames_existing (list of chr): Existing TimeSlice filenames in - TimeSlice directory - - Notes - ----- - - This is a utility function used by build_da_sets - - """ - - # check that all USGS TimeSlice files in the set actually exist - drop_list = [] - for f in filenames: - try: - J = pathlib.Path(timeslices_folder.joinpath(f)) - assert J.is_file() == True - except AssertionError: - #LOG.warning("Missing TimeSlice file %s", J) - drop_list.append(f) - - # Assemble a list of existing TimeSlice files, only - filenames_existing = [x for x in filenames if x not in drop_list] - - return filenames_existing \ No newline at end of file From f79d5586821ca13c2aab9594ea929a4ff65fe311 Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Fri, 28 Oct 2022 09:40:28 -0600 Subject: [PATCH 8/9] bypass troute internal looping, refactor update and update_until functions, create finalze function --- run-troute-with-bmi.ipynb | 1365 +++---------------------- src/bmi_troute.py | 242 ++++- test/BMI/10_day_AnA_bmi.yaml | 84 ++ test/BMI/test_AnA_bmi.yaml | 96 ++ test/BMI/test_AnA_internal_2_bmi.yaml | 96 ++ 5 files changed, 591 insertions(+), 1292 deletions(-) create mode 100644 test/BMI/10_day_AnA_bmi.yaml create mode 100644 test/BMI/test_AnA_bmi.yaml create mode 100644 test/BMI/test_AnA_internal_2_bmi.yaml diff --git a/run-troute-with-bmi.ipynb b/run-troute-with-bmi.ipynb index 3c92f9b20..d01e5749c 100644 --- a/run-troute-with-bmi.ipynb +++ b/run-troute-with-bmi.ipynb @@ -18,18 +18,20 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 1, "id": "0708364e-4ecf-4fb1-bad4-78ec60c9a1c3", "metadata": {}, "outputs": [], "source": [ - "sys.path.append(\"../src/\")\n", - "import bmi_troute # This is the BMI t-route that we will be running from the file: bmi_troute.py " + "sys.path.append(\"src/\")\n", + "import bmi_troute # This is the BMI t-route that we will be running from the file: bmi_troute.py \n", + "import troute.main_utilities as mu # This is used to read q_lateral data from files, won't be needed when t-route bmi is run with model engine\n", + "import troute.nhd_preprocess as nhd_prep # This is used to read q_lateral data from files, won't be needed when t-route bmi is run with model engine" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 2, "id": "a53b4945-7966-4df4-a788-fe997fb711f7", "metadata": {}, "outputs": [], @@ -39,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 3, "id": "a2ededa4-6bd9-474a-b014-f104867428f7", "metadata": {}, "outputs": [ @@ -55,22 +57,57 @@ } ], "source": [ - "model.initialize(bmi_cfg_file='bmi_config_files/LowerColorado.yml')" + "model.initialize(bmi_cfg_file='test/BMI/test_AnA_bmi.yaml')" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 4, + "id": "eb34934c-afe4-47a5-9f81-8029ef0453e9", + "metadata": {}, + "outputs": [], + "source": [ + "(run_sets, da_sets, parity_sets) = mu.build_run_sets(model._network,\n", + " model._forcing_parameters,\n", + " model._compute_parameters, \n", + " model._data_assimilation_parameters,\n", + " model._output_parameters,\n", + " model._parity_parameters)\n", + "\n", + "q_lateral, coastal_boundary_depth_df = nhd_prep.nhd_forcing(run_sets[0], \n", + " model._forcing_parameters, \n", + " model._hybrid_parameters,\n", + " model._network.segment_index,\n", + " model._compute_parameters.get('cpu_pool', None),\n", + " model._network._t0, \n", + " model._network._coastal_boundary_depth_df,\n", + " )\n", + "\n", + "data_assimilation = mu.build_data_assimilation(model._network,\n", + " model._data_assimilation_parameters,\n", + " model._waterbody_parameters,\n", + " [], #da_sets[0],\n", + " model._forcing_parameters,\n", + " model._compute_parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "id": "d3661d08-1340-4765-a676-53ca361d72ba", "metadata": {}, "outputs": [], "source": [ - "model.set_value()" + "model.set_value('land_surface_water_source__volume_flow_rate', q_lateral.to_numpy())\n", + "#model.set_value('coastal_boundary__depth', coastal_boundary_depth_df.to_numpy())\n", + "#model.set_value('usgs_gage_observation__volume_flow_rate', data_assimilation.reservoir_usgs_df.to_numpy())\n", + "#model.set_value('usace_gage_observation__volume_flow_rate', src)\n", + "#model.set_value('rfc_gage_observation__volume_flow_rate', src)" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 6, "id": "954fe3a0-e75f-4629-af6d-5b8ba9e9428c", "metadata": {}, "outputs": [], @@ -80,420 +117,28 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 7, "id": "e71a7f52-8bd2-44b5-950e-bc9e6de515ae", "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
2021-08-24 06:05:002021-08-24 06:10:002021-08-24 06:15:002021-08-24 06:20:002021-08-24 06:25:002021-08-24 06:30:002021-08-24 06:35:002021-08-24 06:40:002021-08-24 06:45:002021-08-24 06:50:00...2021-08-24 11:15:002021-08-24 11:20:002021-08-24 11:25:002021-08-24 11:30:002021-08-24 11:35:002021-08-24 11:40:002021-08-24 11:45:002021-08-24 11:50:002021-08-24 11:55:002021-08-24 12:00:00
16116740.0000650.0000650.0000650.0000650.0000650.0000650.0000650.0000650.0000650.000065...0.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.000063
16116760.0000710.0000710.0000710.0000710.0000710.0000710.0000710.0000710.0000710.000071...0.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.000068
37631260.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257...0.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257
37629620.0029200.0029200.0029200.0029200.0029200.0029200.0029200.0029200.0029190.002919...0.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.002917
37629640.0013110.0013110.0013110.0013110.0013110.0013110.0013110.0013110.0013110.001311...0.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.001310
..................................................................
9420800410.4317050.4317120.4317170.4317220.4317270.4317310.4317340.4317370.4317390.431742...0.4319570.4319620.4319660.4319700.4319730.4319760.4319790.4319810.4319830.431985
9420800420.3033720.3033730.3033730.3033730.3033740.3033740.3033730.3033730.3033730.303373...0.3033900.3033900.3033910.3033920.3033920.3033930.3033930.3033930.3033930.303393
9420800430.7635340.7635380.7635430.7635470.7635510.7635560.7635600.7635650.7635690.763573...0.7638090.7638140.7638190.7638240.7638290.7638340.7638390.7638440.7638480.763852
9420800443.8732733.8724743.8716753.8708773.8700783.8692823.8684863.8676923.8669003.866110...3.8249773.8242153.8234503.8226853.8219193.8211543.8203883.8196223.8188573.818094
9420800451.0106781.0107111.0107431.0107751.0108061.0108361.0108661.0108941.0109221.010950...1.0125541.0125861.0126171.0126481.0126781.0127071.0127351.0127631.0127901.012817
\n", - "

10806 rows × 72 columns

\n", - "
" - ], "text/plain": [ - " 2021-08-24 06:05:00 2021-08-24 06:10:00 2021-08-24 06:15:00 \\\n", - "1611674 0.000065 0.000065 0.000065 \n", - "1611676 0.000071 0.000071 0.000071 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002920 0.002920 0.002920 \n", - "3762964 0.001311 0.001311 0.001311 \n", - "... ... ... ... \n", - "942080041 0.431705 0.431712 0.431717 \n", - "942080042 0.303372 0.303373 0.303373 \n", - "942080043 0.763534 0.763538 0.763543 \n", - "942080044 3.873273 3.872474 3.871675 \n", - "942080045 1.010678 1.010711 1.010743 \n", - "\n", - " 2021-08-24 06:20:00 2021-08-24 06:25:00 2021-08-24 06:30:00 \\\n", - "1611674 0.000065 0.000065 0.000065 \n", - "1611676 0.000071 0.000071 0.000071 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002920 0.002920 0.002920 \n", - "3762964 0.001311 0.001311 0.001311 \n", - "... ... ... ... \n", - "942080041 0.431722 0.431727 0.431731 \n", - "942080042 0.303373 0.303374 0.303374 \n", - "942080043 0.763547 0.763551 0.763556 \n", - "942080044 3.870877 3.870078 3.869282 \n", - "942080045 1.010775 1.010806 1.010836 \n", - "\n", - " 2021-08-24 06:35:00 2021-08-24 06:40:00 2021-08-24 06:45:00 \\\n", - "1611674 0.000065 0.000065 0.000065 \n", - "1611676 0.000071 0.000071 0.000071 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002920 0.002920 0.002919 \n", - "3762964 0.001311 0.001311 0.001311 \n", - "... ... ... ... \n", - "942080041 0.431734 0.431737 0.431739 \n", - "942080042 0.303373 0.303373 0.303373 \n", - "942080043 0.763560 0.763565 0.763569 \n", - "942080044 3.868486 3.867692 3.866900 \n", - "942080045 1.010866 1.010894 1.010922 \n", - "\n", - " 2021-08-24 06:50:00 ... 2021-08-24 11:15:00 2021-08-24 11:20:00 \\\n", - "1611674 0.000065 ... 0.000063 0.000063 \n", - "1611676 0.000071 ... 0.000068 0.000068 \n", - "3763126 0.034257 ... 0.034257 0.034257 \n", - "3762962 0.002919 ... 0.002917 0.002917 \n", - "3762964 0.001311 ... 0.001310 0.001310 \n", - "... ... ... ... ... \n", - "942080041 0.431742 ... 0.431957 0.431962 \n", - "942080042 0.303373 ... 0.303390 0.303390 \n", - "942080043 0.763573 ... 0.763809 0.763814 \n", - "942080044 3.866110 ... 3.824977 3.824215 \n", - "942080045 1.010950 ... 1.012554 1.012586 \n", - "\n", - " 2021-08-24 11:25:00 2021-08-24 11:30:00 2021-08-24 11:35:00 \\\n", - "1611674 0.000063 0.000063 0.000063 \n", - "1611676 0.000068 0.000068 0.000068 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002917 0.002917 0.002917 \n", - "3762964 0.001310 0.001310 0.001310 \n", - "... ... ... ... \n", - "942080041 0.431966 0.431970 0.431973 \n", - "942080042 0.303391 0.303392 0.303392 \n", - "942080043 0.763819 0.763824 0.763829 \n", - "942080044 3.823450 3.822685 3.821919 \n", - "942080045 1.012617 1.012648 1.012678 \n", - "\n", - " 2021-08-24 11:40:00 2021-08-24 11:45:00 2021-08-24 11:50:00 \\\n", - "1611674 0.000063 0.000063 0.000063 \n", - "1611676 0.000068 0.000068 0.000068 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002917 0.002917 0.002917 \n", - "3762964 0.001310 0.001310 0.001310 \n", - "... ... ... ... \n", - "942080041 0.431976 0.431979 0.431981 \n", - "942080042 0.303393 0.303393 0.303393 \n", - "942080043 0.763834 0.763839 0.763844 \n", - "942080044 3.821154 3.820388 3.819622 \n", - "942080045 1.012707 1.012735 1.012763 \n", - "\n", - " 2021-08-24 11:55:00 2021-08-24 12:00:00 \n", - "1611674 0.000063 0.000063 \n", - "1611676 0.000068 0.000068 \n", - "3763126 0.034257 0.034257 \n", - "3762962 0.002917 0.002917 \n", - "3762964 0.001310 0.001310 \n", - "... ... ... \n", - "942080041 0.431983 0.431985 \n", - "942080042 0.303393 0.303393 \n", - "942080043 0.763848 0.763852 \n", - "942080044 3.818857 3.818094 \n", - "942080045 1.012790 1.012817 \n", - "\n", - "[10806 rows x 72 columns]" + "1611674 0.000091\n", + "1611676 0.000085\n", + "3763126 0.034257\n", + "3762962 0.002928\n", + "3762964 0.001314\n", + " ... \n", + "942080042 0.303696\n", + "942080043 0.763048\n", + "942080044 3.949975\n", + "942080045 1.003813\n", + "942090009 0.022306\n", + "Name: (11, q), Length: 10806, dtype: float32" ] }, - "execution_count": 21, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -504,17 +149,17 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 8, "id": "616ba1d9-56eb-4903-b6e4-e854f127f02f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "86400.0" + "3600.0" ] }, - "execution_count": 22, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -533,7 +178,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 9, "id": "9cb21c69-1638-45ad-82d7-258cb69f5d21", "metadata": {}, "outputs": [ @@ -549,42 +194,46 @@ } ], "source": [ - "model.initialize(bmi_cfg_file='bmi_config_files/LowerColorado.yml')" + "model.initialize(bmi_cfg_file='test/BMI/test_AnA_bmi.yaml')" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 10, "id": "adae192f-6058-4647-b074-e5d891732fd5", "metadata": {}, "outputs": [], "source": [ - "model.set_value()" + "model.set_value('land_surface_water_source__volume_flow_rate', q_lateral.to_numpy())\n", + "#model.set_value('coastal_boundary__depth', coastal_boundary_depth_df.to_numpy())\n", + "#model.set_value('usgs_gage_observation__volume_flow_rate', src)\n", + "#model.set_value('usace_gage_observation__volume_flow_rate', src)\n", + "#model.set_value('rfc_gage_observation__volume_flow_rate', src)" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 11, "id": "98cab86c-a288-4ddb-95c4-75323dad1b7f", "metadata": {}, "outputs": [], "source": [ - "model.update_until(21600) # input value is seconds. 21,600s = 6 hours" + "model.update_until(1800) # input value is seconds. 1800s = 0.5 hours" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 12, "id": "690ef259-be43-4c07-808b-f4cd2c5ede77", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "21600.0" + "1800.0" ] }, - "execution_count": 26, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -595,420 +244,28 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 13, "id": "55af3e52-f9ec-46c4-8f75-5c53784f48a2", "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
2021-08-23 12:05:002021-08-23 12:10:002021-08-23 12:15:002021-08-23 12:20:002021-08-23 12:25:002021-08-23 12:30:002021-08-23 12:35:002021-08-23 12:40:002021-08-23 12:45:002021-08-23 12:50:00...2021-08-23 17:15:002021-08-23 17:20:002021-08-23 17:25:002021-08-23 17:30:002021-08-23 17:35:002021-08-23 17:40:002021-08-23 17:45:002021-08-23 17:50:002021-08-23 17:55:002021-08-23 18:00:00
16116740.0000770.0000770.0000770.0000770.0000770.0000770.0000770.0000770.0000770.000076...0.0000730.0000730.0000730.0000720.0000720.0000720.0000720.0000720.0000720.000072
16116760.0000820.0000820.0000820.0000820.0000820.0000820.0000820.0000820.0000820.000082...0.0000790.0000790.0000790.0000790.0000790.0000790.0000790.0000790.0000790.000079
37631260.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257...0.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257
37629620.0029290.0029290.0029280.0029280.0029280.0029280.0029280.0029280.0029280.002928...0.0029260.0029260.0029260.0029260.0029260.0029260.0029260.0029260.0029260.002926
37629640.0013140.0013140.0013140.0013140.0013140.0013140.0013140.0013140.0013140.001314...0.0013130.0013130.0013130.0013130.0013130.0013130.0013130.0013130.0013130.001313
..................................................................
9420800410.4308710.4308770.4308820.4308870.4308910.4308950.4308980.4309010.4309030.430905...0.4311090.4311140.4311180.4311220.4311250.4311280.4311300.4311320.4311340.431136
9420800420.3037370.3037340.3037310.3037280.3037240.3037200.3037160.3037120.3037080.303704...0.3035440.3035420.3035400.3035370.3035350.3035330.3035300.3035280.3035250.303522
9420800430.7630420.7630430.7630440.7630440.7630450.7630460.7630470.7630470.7630480.763048...0.7630900.7630920.7630930.7630950.7630970.7630990.7631010.7631020.7631030.763104
9420800443.9479853.9481703.9483543.9485383.9487203.9489033.9490843.9492643.9494433.949621...3.9539323.9538723.9538053.9537323.9536523.9535673.9534773.9533823.9532823.953178
9420800451.0034151.0034561.0034961.0035341.0035721.0036091.0036451.0036801.0037151.003748...1.0056751.0057121.0057481.0057831.0058181.0058521.0058851.0059171.0059481.005979
\n", - "

10806 rows × 72 columns

\n", - "
" - ], "text/plain": [ - " 2021-08-23 12:05:00 2021-08-23 12:10:00 2021-08-23 12:15:00 \\\n", - "1611674 0.000077 0.000077 0.000077 \n", - "1611676 0.000082 0.000082 0.000082 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002929 0.002929 0.002928 \n", - "3762964 0.001314 0.001314 0.001314 \n", - "... ... ... ... \n", - "942080041 0.430871 0.430877 0.430882 \n", - "942080042 0.303737 0.303734 0.303731 \n", - "942080043 0.763042 0.763043 0.763044 \n", - "942080044 3.947985 3.948170 3.948354 \n", - "942080045 1.003415 1.003456 1.003496 \n", - "\n", - " 2021-08-23 12:20:00 2021-08-23 12:25:00 2021-08-23 12:30:00 \\\n", - "1611674 0.000077 0.000077 0.000077 \n", - "1611676 0.000082 0.000082 0.000082 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002928 0.002928 0.002928 \n", - "3762964 0.001314 0.001314 0.001314 \n", - "... ... ... ... \n", - "942080041 0.430887 0.430891 0.430895 \n", - "942080042 0.303728 0.303724 0.303720 \n", - "942080043 0.763044 0.763045 0.763046 \n", - "942080044 3.948538 3.948720 3.948903 \n", - "942080045 1.003534 1.003572 1.003609 \n", - "\n", - " 2021-08-23 12:35:00 2021-08-23 12:40:00 2021-08-23 12:45:00 \\\n", - "1611674 0.000077 0.000077 0.000077 \n", - "1611676 0.000082 0.000082 0.000082 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002928 0.002928 0.002928 \n", - "3762964 0.001314 0.001314 0.001314 \n", - "... ... ... ... \n", - "942080041 0.430898 0.430901 0.430903 \n", - "942080042 0.303716 0.303712 0.303708 \n", - "942080043 0.763047 0.763047 0.763048 \n", - "942080044 3.949084 3.949264 3.949443 \n", - "942080045 1.003645 1.003680 1.003715 \n", - "\n", - " 2021-08-23 12:50:00 ... 2021-08-23 17:15:00 2021-08-23 17:20:00 \\\n", - "1611674 0.000076 ... 0.000073 0.000073 \n", - "1611676 0.000082 ... 0.000079 0.000079 \n", - "3763126 0.034257 ... 0.034257 0.034257 \n", - "3762962 0.002928 ... 0.002926 0.002926 \n", - "3762964 0.001314 ... 0.001313 0.001313 \n", - "... ... ... ... ... \n", - "942080041 0.430905 ... 0.431109 0.431114 \n", - "942080042 0.303704 ... 0.303544 0.303542 \n", - "942080043 0.763048 ... 0.763090 0.763092 \n", - "942080044 3.949621 ... 3.953932 3.953872 \n", - "942080045 1.003748 ... 1.005675 1.005712 \n", - "\n", - " 2021-08-23 17:25:00 2021-08-23 17:30:00 2021-08-23 17:35:00 \\\n", - "1611674 0.000073 0.000072 0.000072 \n", - "1611676 0.000079 0.000079 0.000079 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002926 0.002926 0.002926 \n", - "3762964 0.001313 0.001313 0.001313 \n", - "... ... ... ... \n", - "942080041 0.431118 0.431122 0.431125 \n", - "942080042 0.303540 0.303537 0.303535 \n", - "942080043 0.763093 0.763095 0.763097 \n", - "942080044 3.953805 3.953732 3.953652 \n", - "942080045 1.005748 1.005783 1.005818 \n", - "\n", - " 2021-08-23 17:40:00 2021-08-23 17:45:00 2021-08-23 17:50:00 \\\n", - "1611674 0.000072 0.000072 0.000072 \n", - "1611676 0.000079 0.000079 0.000079 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002926 0.002926 0.002926 \n", - "3762964 0.001313 0.001313 0.001313 \n", - "... ... ... ... \n", - "942080041 0.431128 0.431130 0.431132 \n", - "942080042 0.303533 0.303530 0.303528 \n", - "942080043 0.763099 0.763101 0.763102 \n", - "942080044 3.953567 3.953477 3.953382 \n", - "942080045 1.005852 1.005885 1.005917 \n", - "\n", - " 2021-08-23 17:55:00 2021-08-23 18:00:00 \n", - "1611674 0.000072 0.000072 \n", - "1611676 0.000079 0.000079 \n", - "3763126 0.034257 0.034257 \n", - "3762962 0.002926 0.002926 \n", - "3762964 0.001313 0.001313 \n", - "... ... ... \n", - "942080041 0.431134 0.431136 \n", - "942080042 0.303525 0.303522 \n", - "942080043 0.763103 0.763104 \n", - "942080044 3.953282 3.953178 \n", - "942080045 1.005948 1.005979 \n", - "\n", - "[10806 rows x 72 columns]" + "1611674 0.000084\n", + "1611676 0.000083\n", + "3763126 0.034257\n", + "3762962 0.002928\n", + "3762964 0.001314\n", + " ... \n", + "942080042 0.303720\n", + "942080043 0.763046\n", + "942080044 3.948903\n", + "942080045 1.003609\n", + "942090009 0.022577\n", + "Name: (5, q), Length: 10806, dtype: float32" ] }, - "execution_count": 27, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -1027,7 +284,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 14, "id": "52902573-41ae-40c9-b3dc-e790ead208c3", "metadata": {}, "outputs": [], @@ -1037,17 +294,17 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 15, "id": "92c0e23c-0c0b-401c-9f31-ea41f8b11aa8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "86400.0" + "3600.0" ] }, - "execution_count": 29, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -1058,420 +315,28 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 16, "id": "4c618714-0415-4aa2-a5d6-c49c582f008d", "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
2021-08-24 06:05:002021-08-24 06:10:002021-08-24 06:15:002021-08-24 06:20:002021-08-24 06:25:002021-08-24 06:30:002021-08-24 06:35:002021-08-24 06:40:002021-08-24 06:45:002021-08-24 06:50:00...2021-08-24 11:15:002021-08-24 11:20:002021-08-24 11:25:002021-08-24 11:30:002021-08-24 11:35:002021-08-24 11:40:002021-08-24 11:45:002021-08-24 11:50:002021-08-24 11:55:002021-08-24 12:00:00
16116740.0000650.0000650.0000650.0000650.0000650.0000650.0000650.0000650.0000650.000065...0.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.0000630.000063
16116760.0000710.0000710.0000710.0000710.0000710.0000710.0000710.0000710.0000710.000071...0.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.0000680.000068
37631260.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257...0.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.0342570.034257
37629620.0029200.0029200.0029200.0029200.0029200.0029200.0029200.0029200.0029190.002919...0.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.0029170.002917
37629640.0013110.0013110.0013110.0013110.0013110.0013110.0013110.0013110.0013110.001311...0.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.0013100.001310
..................................................................
9420800410.4317050.4317120.4317170.4317220.4317270.4317310.4317340.4317370.4317390.431742...0.4319570.4319620.4319660.4319700.4319730.4319760.4319790.4319810.4319830.431985
9420800420.3033720.3033730.3033730.3033730.3033740.3033740.3033730.3033730.3033730.303373...0.3033900.3033900.3033910.3033920.3033920.3033930.3033930.3033930.3033930.303393
9420800430.7635340.7635380.7635430.7635470.7635510.7635560.7635600.7635650.7635690.763573...0.7638090.7638140.7638190.7638240.7638290.7638340.7638390.7638440.7638480.763852
9420800443.8732733.8724743.8716753.8708773.8700783.8692823.8684863.8676923.8669003.866110...3.8249773.8242153.8234503.8226853.8219193.8211543.8203883.8196223.8188573.818094
9420800451.0106781.0107111.0107431.0107751.0108061.0108361.0108661.0108941.0109221.010950...1.0125541.0125861.0126171.0126481.0126781.0127071.0127351.0127631.0127901.012817
\n", - "

10806 rows × 72 columns

\n", - "
" - ], "text/plain": [ - " 2021-08-24 06:05:00 2021-08-24 06:10:00 2021-08-24 06:15:00 \\\n", - "1611674 0.000065 0.000065 0.000065 \n", - "1611676 0.000071 0.000071 0.000071 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002920 0.002920 0.002920 \n", - "3762964 0.001311 0.001311 0.001311 \n", - "... ... ... ... \n", - "942080041 0.431705 0.431712 0.431717 \n", - "942080042 0.303372 0.303373 0.303373 \n", - "942080043 0.763534 0.763538 0.763543 \n", - "942080044 3.873273 3.872474 3.871675 \n", - "942080045 1.010678 1.010711 1.010743 \n", - "\n", - " 2021-08-24 06:20:00 2021-08-24 06:25:00 2021-08-24 06:30:00 \\\n", - "1611674 0.000065 0.000065 0.000065 \n", - "1611676 0.000071 0.000071 0.000071 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002920 0.002920 0.002920 \n", - "3762964 0.001311 0.001311 0.001311 \n", - "... ... ... ... \n", - "942080041 0.431722 0.431727 0.431731 \n", - "942080042 0.303373 0.303374 0.303374 \n", - "942080043 0.763547 0.763551 0.763556 \n", - "942080044 3.870877 3.870078 3.869282 \n", - "942080045 1.010775 1.010806 1.010836 \n", - "\n", - " 2021-08-24 06:35:00 2021-08-24 06:40:00 2021-08-24 06:45:00 \\\n", - "1611674 0.000065 0.000065 0.000065 \n", - "1611676 0.000071 0.000071 0.000071 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002920 0.002920 0.002919 \n", - "3762964 0.001311 0.001311 0.001311 \n", - "... ... ... ... \n", - "942080041 0.431734 0.431737 0.431739 \n", - "942080042 0.303373 0.303373 0.303373 \n", - "942080043 0.763560 0.763565 0.763569 \n", - "942080044 3.868486 3.867692 3.866900 \n", - "942080045 1.010866 1.010894 1.010922 \n", - "\n", - " 2021-08-24 06:50:00 ... 2021-08-24 11:15:00 2021-08-24 11:20:00 \\\n", - "1611674 0.000065 ... 0.000063 0.000063 \n", - "1611676 0.000071 ... 0.000068 0.000068 \n", - "3763126 0.034257 ... 0.034257 0.034257 \n", - "3762962 0.002919 ... 0.002917 0.002917 \n", - "3762964 0.001311 ... 0.001310 0.001310 \n", - "... ... ... ... ... \n", - "942080041 0.431742 ... 0.431957 0.431962 \n", - "942080042 0.303373 ... 0.303390 0.303390 \n", - "942080043 0.763573 ... 0.763809 0.763814 \n", - "942080044 3.866110 ... 3.824977 3.824215 \n", - "942080045 1.010950 ... 1.012554 1.012586 \n", - "\n", - " 2021-08-24 11:25:00 2021-08-24 11:30:00 2021-08-24 11:35:00 \\\n", - "1611674 0.000063 0.000063 0.000063 \n", - "1611676 0.000068 0.000068 0.000068 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002917 0.002917 0.002917 \n", - "3762964 0.001310 0.001310 0.001310 \n", - "... ... ... ... \n", - "942080041 0.431966 0.431970 0.431973 \n", - "942080042 0.303391 0.303392 0.303392 \n", - "942080043 0.763819 0.763824 0.763829 \n", - "942080044 3.823450 3.822685 3.821919 \n", - "942080045 1.012617 1.012648 1.012678 \n", - "\n", - " 2021-08-24 11:40:00 2021-08-24 11:45:00 2021-08-24 11:50:00 \\\n", - "1611674 0.000063 0.000063 0.000063 \n", - "1611676 0.000068 0.000068 0.000068 \n", - "3763126 0.034257 0.034257 0.034257 \n", - "3762962 0.002917 0.002917 0.002917 \n", - "3762964 0.001310 0.001310 0.001310 \n", - "... ... ... ... \n", - "942080041 0.431976 0.431979 0.431981 \n", - "942080042 0.303393 0.303393 0.303393 \n", - "942080043 0.763834 0.763839 0.763844 \n", - "942080044 3.821154 3.820388 3.819622 \n", - "942080045 1.012707 1.012735 1.012763 \n", - "\n", - " 2021-08-24 11:55:00 2021-08-24 12:00:00 \n", - "1611674 0.000063 0.000063 \n", - "1611676 0.000068 0.000068 \n", - "3763126 0.034257 0.034257 \n", - "3762962 0.002917 0.002917 \n", - "3762964 0.001310 0.001310 \n", - "... ... ... \n", - "942080041 0.431983 0.431985 \n", - "942080042 0.303393 0.303393 \n", - "942080043 0.763848 0.763852 \n", - "942080044 3.818857 3.818094 \n", - "942080045 1.012790 1.012817 \n", - "\n", - "[10806 rows x 72 columns]" + "1611674 0.000091\n", + "1611676 0.000085\n", + "3763126 0.034257\n", + "3762962 0.002928\n", + "3762964 0.001314\n", + " ... \n", + "942080042 0.303696\n", + "942080043 0.763048\n", + "942080044 3.949975\n", + "942080045 1.003813\n", + "942090009 0.022306\n", + "Name: (5, q), Length: 10806, dtype: float32" ] }, - "execution_count": 30, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1480,13 +345,23 @@ "model.get_value('channel_exit_water_x-section__volume_flow_rate')" ] }, + { + "cell_type": "markdown", + "id": "95b79ad7-9b56-4f93-b150-1d6e53d65d94", + "metadata": {}, + "source": [ + "Finalize the model by deleting all internal objects" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "b09ca024-d342-4391-8951-0463dda8fb3e", + "id": "9479d297-9664-4942-8274-ecef63b45b79", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "model.finalize()" + ] } ], "metadata": { diff --git a/src/bmi_troute.py b/src/bmi_troute.py index 9640a71a1..fe6a43a27 100644 --- a/src/bmi_troute.py +++ b/src/bmi_troute.py @@ -1,9 +1,11 @@ """Basic Model Interface implementation for t-route.""" import numpy as np +import pandas as pd from bmipy import Bmi from pathlib import Path import yaml +from datetime import datetime, timedelta import troute.main_utilities as tr import troute.nhd_network_utilities_v02 as nnu @@ -44,7 +46,12 @@ def __init__(self): #--------------------------------------------- # Input variable names (CSDMS standard names) #--------------------------------------------- - _input_var_names = ['land_surface_water__runoff_volume_flux'] + _input_var_names = ['land_surface_water_source__volume_flow_rate', + 'coastal_boundary__depth', #FIXME: this variable isn't a standard CSDMS name...couldn't find one more appropriate + 'usgs_gage_observation__volume_flow_rate', #FIXME: this variable isn't a standard CSDMS name...couldn't find one more appropriate + 'usace_gage_observation__volume_flow_rate', #FIXME: this variable isn't a standard CSDMS name...couldn't find one more appropriate + 'rfc_gage_observation__volume_flow_rate' #FIXME: this variable isn't a standard CSDMS name...couldn't find one more appropriate + ] #--------------------------------------------- # Output variable names (CSDMS standard names) @@ -69,7 +76,11 @@ def __init__(self): 'lake_water~outgoing__volume_flow_rate':['waterbody_cms','m3 s-1'], 'lake_surface__elevation':['waterbody_m','m'], #-------------- Dynamic inputs -------------------------------- - 'land_surface_water__runoff_volume_flux':['streamflow_cms','m3 s-1'] + 'land_surface_water_source__volume_flow_rate':['streamflow_cms','m3 s-1'], + 'coastal_boundary__depth':['depth_m', 'm'], + 'usgs_gage_observation__volume_flow_rate':['streamflow_cms','m3 s-1'], + 'usace_gage_observation__volume_flow_rate':['streamflow_cms','m3 s-1'], + 'rfc_gage_observation__volume_flow_rate':['streamflow_cms','m3 s-1'] } #------------------------------------------------------ @@ -87,6 +98,8 @@ def __init__(self): #------------------------------------------------------------------- def initialize(self, bmi_cfg_file=None): + args = tr._handle_args_v03(['-f', bmi_cfg_file]) + # -------------- Read in the BMI configuration -------------------------# bmi_cfg_file = Path(bmi_cfg_file) # ----- Create some lookup tabels from the long variable names --------# @@ -97,14 +110,6 @@ def initialize(self, bmi_cfg_file=None): self._var_units_map = {long_name:self._var_name_units_map[long_name][1] for \ long_name in self._var_name_units_map.keys()} - # -------------- Initalize all the variables --------------------------# - # -------------- so that they'll be picked up with the get functions --# - for var_name in list(self._var_name_units_map.keys()): - # ---------- All the variables are single values ------------------# - # ---------- so just set to zero for now. ------------------# - self._values[var_name] = 0 - setattr( self, var_name, 0 ) - # This will direct all the next moves. if bmi_cfg_file is not None: @@ -128,7 +133,37 @@ def initialize(self, bmi_cfg_file=None): self._parity_parameters, self._data_assimilation_parameters, self._run_parameters, - ) = tr.initialize_network(self._cfg_bmi) + ) = tr.initialize_network(args) + + # Set number of time steps (1 hour) + self._nts = 12 + + # -------------- Initalize all the variables --------------------------# + # -------------- so that they'll be picked up with the get functions --# + for var_name in list(self._var_name_units_map.keys()): + # ---------- All the variables are single values ------------------# + # ---------- so just set to zero for now. ------------------# + self._values[var_name] = np.zeros(self._network.dataframe.shape[0]) + setattr( self, var_name, 0 ) + + ''' + # -------------- Update dimensions of DA variables --------------------# + #################################### + # Maximum lookback hours from reservoir configurations + usgs_shape = self._network._waterbody_types_df[self._network._waterbody_types_df['reservoir_type']==2].shape[0] + usace_shape = self._network._waterbody_types_df[self._network._waterbody_types_df['reservoir_type']==3].shape[0] + rfc_shape = self._network._waterbody_types_df[self._network._waterbody_types_df['reservoir_type']==4].shape[0] + + max_lookback_hrs = max(self._data_assimilation_parameters.get('timeslice_lookback_hours'), + self._waterbody_parameters.get('rfc').get('reservoir_rfc_forecasts_lookback_hours')) + + self._values['usgs_gage_observation__volume_flow_rate'] = np.zeros((usgs_shape,max_lookback_hrs*4)) + setattr( self, 'usgs_gage_observation__volume_flow_rate', 0 ) + self._values['usace_gage_observation__volume_flow_rate'] = np.zeros((usace_shape,max_lookback_hrs*4)) + setattr( self, 'usace_gage_observation__volume_flow_rate', 0 ) + self._values['rfc_gage_observation__volume_flow_rate'] = np.zeros((rfc_shape,max_lookback_hrs*4)) + setattr( self, 'rfc_gage_observation__volume_flow_rate', 0 ) + ''' self._start_time = 0.0 self._end_time = self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') @@ -138,10 +173,53 @@ def initialize(self, bmi_cfg_file=None): def update(self): """Advance model by one time step.""" + + + # Set input data into t-route objects + self._network._qlateral = pd.DataFrame(self._values['land_surface_water_source__volume_flow_rate'], + index=self._network.dataframe.index.to_numpy()) + self._network._coastal_boundary_depth_df = pd.DataFrame(self._values['coastal_boundary__depth']) + + ''' + ( + self._run_sets, + self._da_sets, + self._parity_sets + ) = tr.build_run_sets(self._network, + self._forcing_parameters, + self._compute_parameters, + self._data_assimilation_parameters, + self._output_parameters, + self._parity_parameters) + + # Create forcing data within network object for first loop iteration + self._network.assemble_forcings( + self._run_sets[0], + self._forcing_parameters, + self._hybrid_parameters, + self._compute_parameters.get('cpu_pool', None)) + ''' + # Create data assimilation object from da_sets for first loop iteration + ###NOTE: this is just a place holder, setting DA variables will be done with set_values... + self._data_assimilation = tr.build_data_assimilation( + self._network, + self._data_assimilation_parameters, + self._waterbody_parameters, + [], #self._da_sets[0], + self._forcing_parameters, + self._compute_parameters) + + ''' + self._run_sets[0]['t0'] = self._network.t0 + self._run_sets[0]['dt'] = self._forcing_parameters.get('dt') + ''' + + # Run routing + ''' self._run_results = tr.run_routing( self._network, self._data_assimilation, - self._run_sets, + [self._run_sets[0]], self._da_sets, self._compute_parameters, self._forcing_parameters, @@ -151,6 +229,62 @@ def update(self): self._data_assimilation_parameters, self._run_parameters, self._parity_sets) + ''' + + ( + self._run_results, + self._subnetwork_list + ) = tr.nwm_route(self._network.connections, + self._network.reverse_network, + self._network.waterbody_connections, + self._network._reaches_by_tw, + self._compute_parameters.get('parallel_compute_method','serial'), + self._compute_parameters.get('compute_kernel'), + self._compute_parameters.get('subnetwork_target_size'), + self._compute_parameters.get('cpu_pool'), + self._network.t0, + self._time_step, + self._nts, + self._forcing_parameters.get('qts_subdivisions', 12), + self._network.independent_networks, + self._network.dataframe, + self._network.q0, + self._network._qlateral, + self._data_assimilation.usgs_df, + self._data_assimilation.lastobs_df, + self._data_assimilation.reservoir_usgs_df, + self._data_assimilation.reservoir_usgs_param_df, + self._data_assimilation.reservoir_usace_df, + self._data_assimilation.reservoir_usace_param_df, + self._data_assimilation.assimilation_parameters, + self._compute_parameters.get('assume_short_ts', False), + self._compute_parameters.get('return_courant', False), + self._network._waterbody_df, + self._waterbody_parameters, + self._network._waterbody_types_df, + self._network.waterbody_type_specified, + self._network.diffusive_network_data, + self._network.topobathy_df, + self._network.refactored_diffusive_domain, + self._network.refactored_reaches, + [], #subnetwork_list, + self._network.coastal_boundary_depth_df, + self._network.unrefactored_topobathy_df,) + + # update initial conditions with results output + self._network.new_nhd_q0(self._run_results) + self._network.update_waterbody_water_elevation() + + # update t0 + self._network.new_t0(self._time_step,self._nts) + + # get reservoir DA initial parameters for next loop iteration + self._data_assimilation.update(self._run_results, + self._data_assimilation_parameters, + self._run_parameters, + self._network, + [], #self._da_sets[run_set_iterator + 1] + ) (self._values['channel_exit_water_x-section__volume_flow_rate'], self._values['channel_water_flow__speed'], @@ -160,11 +294,11 @@ def update(self): self._values['lake_surface__elevation'], ) = tr.create_output_dataframes( self._run_results, - self._run_sets, + self._nts, self._network._waterbody_df, self._network.link_lake_crosswalk) - self._time += self._forcing_parameters.get('dt') * self._forcing_parameters.get('nts') + self._time += self._time_step * self._nts def update_frac(self, time_frac): """Update model by a fraction of a time step. @@ -187,15 +321,12 @@ def update_until(self, then): """ n_steps = (then - self.get_current_time()) / self.get_time_step() - full_nts = self._forcing_parameters.get('nts') - self._forcing_parameters['nts'] = n_steps + full_nts = self._nts + self._nts = n_steps - self.set_value() self.update() - self._network.t0 = self._run_sets[-1].get('final_timestamp') - self._forcing_parameters['nts'] = full_nts - n_steps - self.set_value() + self._nts = full_nts - n_steps ''' for _ in range(int(n_steps)): @@ -205,7 +336,37 @@ def update_until(self, then): def finalize(self): """Finalize model.""" - self._model = None + + self._values = None + self._var_loc = None + self._var_grid_id = None + self._var_name_map_long_first = None + self._var_name_map_short_first = None + self._var_units_map = None + self._cfg_bmi = None + self._network = None + self._log_parameters = None + self._preprocessing_parameters = None + self._supernetwork_parameters = None + self._waterbody_parameters = None + self._compute_parameters = None + self._forcing_parameters = None + self._restart_parameters = None + self._hybrid_parameters = None + self._output_parameters = None + self._parity_parameters = None + self._data_assimilation_parameters = None + self._run_parameters = None + self._nts = None + self._values = None + self._start_time = None + self._end_time = None + self._time = None + self._time_step = None + self._time_units = None + self._data_assimilation = None + self._run_results = None + self._subnetwork_list = None def get_var_type(self, var_name): """Data type of variable. @@ -338,34 +499,21 @@ def get_value_at_indices(self, var_name, dest, indices): dest[:] = self.get_value_ptr(var_name).take(indices) return dest - def set_value(self): - """Set model values""" - ( - self._run_sets, - self._da_sets, - self._parity_sets - ) = tr.build_run_sets(self._network, - self._forcing_parameters, - self._compute_parameters, - self._data_assimilation_parameters, - self._output_parameters, - self._parity_parameters) + def set_value(self, var_name, src): + """ + Set model values - # Create forcing data within network object for first loop iteration - self._network.assemble_forcings( - self._run_sets[0], - self._forcing_parameters, - self._hybrid_parameters, - self._compute_parameters.get('cpu_pool', None)) + Parameters + ---------- + var_name : str + Name of variable as CSDMS Standard Name. + src : array_like + Array of new values. + """ + val = self.get_value_ptr(var_name) + val[:] = src.reshape(val.shape) - # Create data assimilation object from da_sets for first loop iteration - self._data_assimilation = tr.build_data_assimilation( - self._network, - self._data_assimilation_parameters, - self._waterbody_parameters, - self._da_sets[0], - self._forcing_parameters, - self._compute_parameters) + #self._values[var_name] = src def set_value_at_indices(self, name, inds, src): """Set model values at particular indices. diff --git a/test/BMI/10_day_AnA_bmi.yaml b/test/BMI/10_day_AnA_bmi.yaml new file mode 100644 index 000000000..e549af7d7 --- /dev/null +++ b/test/BMI/10_day_AnA_bmi.yaml @@ -0,0 +1,84 @@ +# +#-------------------------------------------------------------------------------- +log_parameters: + #---------- + showtiming: True + log_level : DEBUG +#-------------------------------------------------------------------------------- +network_topology_parameters: + #---------- + supernetwork_parameters: + #---------- + geo_file_path: /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/RouteLink_NWMv2.1.nc + synthetic_wb_segments: + - 4800002 + - 4800004 + - 4800006 + - 4800007 + waterbody_parameters: + #---------- + break_network_at_waterbodies: True + level_pool: + #---------- + level_pool_waterbody_parameter_file_path: /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/LAKEPARM_NWMv2.1.nc + rfc: + #---------- + reservoir_parameter_file : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/reservoir_index_AnA_NWMv2.1.nc + reservoir_rfc_forecasts : True + reservoir_rfc_forecasts_time_series_path: /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/DA_Inputs/BayFlood/rfc_timeseries + reservoir_rfc_forecasts_lookback_hours : 28 +#-------------------------------------------------------------------------------- +compute_parameters: + #---------- + parallel_compute_method: by-network + compute_kernel : V02-structured + assume_short_ts : True + subnetwork_target_size : 10000 + cpu_pool : 36 + restart_parameters: + #---------- + wrf_hydro_channel_restart_file : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Restarts/BayFlood/v21/HYDRO_RST.2021-10-20_00:00_DOMAIN1 + wrf_hydro_channel_ID_crosswalk_file : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/RouteLink_NWMv2.1.nc + wrf_hydro_waterbody_restart_file : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Restarts/BayFlood/v21/HYDRO_RST.2021-10-20_00:00_DOMAIN1 + wrf_hydro_waterbody_ID_crosswalk_file : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/LAKEPARM_NWMv2.1.nc + wrf_hydro_waterbody_crosswalk_filter_file: /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/RouteLink_NWMv2.1.nc + forcing_parameters: + #---------- + qts_subdivisions : 12 + dt : 300 + qlat_input_folder : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/ChannelForcings/BayFlood/ + qlat_file_pattern_filter: "*.CHRTOUT_DOMAIN1" + nts : 2880 #4032 #2880 + max_loop_size : 1 + data_assimilation_parameters: + #---------- + usgs_timeslices_folder : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/DA_Inputs/BayFlood/usgs_timeslices + usace_timeslices_folder : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/DA_Inputs/BayFlood/usace_timeslices + timeslice_lookback_hours : 24 + qc_threshold : 1 + streamflow_da: + #---------- + streamflow_nudging : True + gage_segID_crosswalk_file: /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/RouteLink_NWMv2.1.nc + crosswalk_gage_field : 'gages' + crosswalk_segID_field : 'link' + wrf_hydro_lastobs_file : #/glade/work/adamw/CONUS/RESTART/nudgingLastObs.2021-08-23_12:00:00.nc ##################### + lastobs_output_folder : #/glade/work/adamw/CONUS/lastobs_troute ###################################### + reservoir_da: + #---------- + reservoir_persistence_usgs : True + reservoir_persistence_usace : True + gage_lakeID_crosswalk_file : /glade/p/cisl/nwc/nwmv30_coastal_inland/CONUS/Domain/v21/reservoir_index_AnA_NWMv2.1.nc + +#-------------------------------------------------------------------------------- +output_parameters: + #---------- + lite_restart: + #---------- + lite_restart_output_directory: /glade/scratch/shorvath/PR_577_tests/10_day_AnA/restart_troute +# chrtout_output: +# #---------- +# wrf_hydro_channel_output_source_folder: /glade/scratch/shorvath/PR_577_tests/10_day_AnA/CHRTOUT_troute +# lakeout_output: /glade/scratch/shorvath/PR_577_tests/10_day_AnA/LAKEOUT + + \ No newline at end of file diff --git a/test/BMI/test_AnA_bmi.yaml b/test/BMI/test_AnA_bmi.yaml new file mode 100644 index 000000000..9a81f81d2 --- /dev/null +++ b/test/BMI/test_AnA_bmi.yaml @@ -0,0 +1,96 @@ +# $ python -m nwm_routing -f -V3 test_AnA.yaml +#-------------------------------------------------------------------------------- +log_parameters: + #---------- + showtiming: True + log_level : DEBUG +#-------------------------------------------------------------------------------- +network_topology_parameters: + #---------- + supernetwork_parameters: + #---------- + geo_file_path: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/RouteLink.nc + mask_file_path: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/coastal_subset.txt + waterbody_parameters: + #---------- + break_network_at_waterbodies: True + level_pool: + #---------- + level_pool_waterbody_parameter_file_path: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/LAKEPARM.nc + rfc: + #---------- + reservoir_parameter_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/reservoir_index_AnA.nc + reservoir_rfc_forecasts : False + reservoir_rfc_forecasts_time_series_path: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/rfc_TimeSeries/ + reservoir_rfc_forecasts_lookback_hours : 48 +#-------------------------------------------------------------------------------- +compute_parameters: + #---------- + parallel_compute_method: serial #by-subnetwork-jit-clustered #serial + compute_kernel : V02-structured + assume_short_ts : True + subnetwork_target_size : 10000 + cpu_pool : 36 + restart_parameters: + #---------- + wrf_hydro_channel_restart_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/restart/HYDRO_RST.2021-08-23_12:00_DOMAIN1 + #lite_channel_restart_file : restart/RESTART.2020082600_DOMAIN1 + wrf_hydro_channel_ID_crosswalk_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/RouteLink.nc + wrf_hydro_waterbody_restart_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/restart/HYDRO_RST.2021-08-23_12:00_DOMAIN1 + #lite_waterbody_restart_file : restart/waterbody_restart_202006011200 + wrf_hydro_waterbody_ID_crosswalk_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/LAKEPARM.nc + wrf_hydro_waterbody_crosswalk_filter_file: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/RouteLink.nc +# hybrid_parameters: +# run_hybrid_routing: False #True +# diffusive_domain : domain/coastal_domain_subset.yaml +# use_natl_xsections: False #True +# topobathy_domain : domain/final_diffusive_natural_xs.nc +# run_refactored_network: False #True +# refactored_domain: domain/refactored_coastal_domain_subset.yaml +# refactored_topobathy_domain: domain/refac_final_diffusive_natural_xs.nc +# coastal_boundary_domain: domain/coastal_boundary_domain.yaml + forcing_parameters: + #---------- + qts_subdivisions : 12 + dt : 300 # [sec] + qlat_input_folder : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/channel_forcing + qlat_file_pattern_filter : "*.CHRTOUT_DOMAIN1" +# coastal_boundary_input_file : boundary_forcing + nts : 288 # 288 for 1day; 2592 for 9 days + max_loop_size : 1 # [hr] + data_assimilation_parameters: + #---------- + usgs_timeslices_folder : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/usgs_TimeSlice/ + usace_timeslices_folder : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/usace_TimeSlice/ + timeslice_lookback_hours : 48 + qc_threshold : 1 + streamflow_da: + #---------- + streamflow_nudging : False + diffusive_streamflow_nudging : False + gage_segID_crosswalk_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/RouteLink.nc + crosswalk_gage_field : 'gages' + crosswalk_segID_field : 'link' + wrf_hydro_lastobs_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/lastobs/nudgingLastObs.2021-08-23_12:00:00.nc + lastobs_output_folder : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/lastobs/ + reservoir_da: + #---------- + reservoir_persistence_usgs : False + reservoir_persistence_usace : False + gage_lakeID_crosswalk_file : /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/domain/reservoir_index_AnA.nc +#-------------------------------------------------------------------------------- +output_parameters: + #---------- +# test_output: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/output/lcr_flowveldepth.pkl + lite_restart: + #---------- + lite_restart_output_directory: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/restart/ +# chrtout_output: + #---------- +# wrf_hydro_channel_output_source_folder: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/channel_forcing/ +# chanobs_output: + #---------- +# chanobs_output_directory: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/output/ +# chanobs_filepath : lcr_chanobs.nc +# lakeout_output: /glade/u/home/shorvath/projects/t-route/test/LowerColorado_TX/lakeout/ + \ No newline at end of file diff --git a/test/BMI/test_AnA_internal_2_bmi.yaml b/test/BMI/test_AnA_internal_2_bmi.yaml new file mode 100644 index 000000000..a11dcdb8e --- /dev/null +++ b/test/BMI/test_AnA_internal_2_bmi.yaml @@ -0,0 +1,96 @@ +# $ python -m nwm_routing -f -V3 test_AnA.yaml +#-------------------------------------------------------------------------------- +log_parameters: + #---------- + showtiming: True + log_level : DEBUG +#-------------------------------------------------------------------------------- +network_topology_parameters: + #---------- + supernetwork_parameters: + #---------- + geo_file_path: /glade/scratch/adamw/CONUS_1yr/domain/RouteLink_NWMv2.1.nc + mask_file_path: /glade/scratch/donghakim/HurricaneLaura/domain/coastal_10diffusive.txt + waterbody_parameters: + #---------- + break_network_at_waterbodies: True + level_pool: + #---------- + level_pool_waterbody_parameter_file_path: /glade/scratch/adamw/CONUS_1yr/domain/LAKEPARM_NWMv2.1.nc + rfc: + #---------- + reservoir_parameter_file : /glade/scratch/donghakim/HurricaneLaura/domain/reservoir_index_AnA.nc + reservoir_rfc_forecasts : True + reservoir_rfc_forecasts_time_series_path: rfc_TimeSeries/ + reservoir_rfc_forecasts_lookback_hours : 48 +#-------------------------------------------------------------------------------- +compute_parameters: + #---------- + parallel_compute_method: by-subnetwork-jit-clustered #serial + compute_kernel : V02-structured + assume_short_ts : True + subnetwork_target_size : 10000 + cpu_pool : 36 + restart_parameters: + #---------- + wrf_hydro_channel_restart_file: /glade/scratch/donghakim/HurricaneLaura/restart/HYDRO_RST.2020-08-26_00:00_DOMAIN1 + #lite_channel_restart_file: /glade/scratch/donghakim/HurricaneLaura/restart/RESTART.2020082600_DOMAIN1 + wrf_hydro_channel_ID_crosswalk_file : /glade/scratch/adamw/CONUS_1yr/domain/RouteLink_NWMv2.1.nc + wrf_hydro_waterbody_restart_file: /glade/scratch/donghakim/HurricaneLaura/restart/HYDRO_RST.2020-08-26_00:00_DOMAIN1 + #lite_waterbody_restart_file : /glade/scratch/casali/Coastal_Inland/NWM_Coastal_Run_Data/DA_Simulation/Restart_Files/Troute_Restarts/waterbody_restart_202006011200 + wrf_hydro_waterbody_ID_crosswalk_file : /glade/scratch/adamw/CONUS_1yr/domain/LAKEPARM_NWMv2.1.nc + wrf_hydro_waterbody_crosswalk_filter_file: /glade/scratch/adamw/CONUS_1yr/domain/RouteLink_NWMv2.1.nc + hybrid_parameters: + run_hybrid_routing: True + diffusive_domain : /glade/scratch/donghakim/HurricaneLaura/domain/coastal_domain_subset.yaml + use_natl_xsections: True + topobathy_domain : /glade/scratch/donghakim/HurricaneLaura/domain/final_diffusive_natural_xs.nc + run_refactored_network: True + refactored_domain: /glade/scratch/donghakim/HurricaneLaura/domain/refactored_coastal_domain_subset.yaml + refactored_topobathy_domain: /glade/scratch/donghakim/HurricaneLaura/domain/refac_final_diffusive_natural_xs.nc + coastal_boundary_domain: /glade/scratch/donghakim/HurricaneLaura/domain/coastal_boundary_domain.yaml + forcing_parameters: + #---------- + qts_subdivisions : 12 + dt : 300 + qlat_input_folder : /glade/scratch/donghakim/HurricaneLaura/channel_forcing + qlat_file_pattern_filter : "*.CHRTOUT_DOMAIN1" + coastal_boundary_input_file : /glade/scratch/donghakim/HurricaneLaura/domain/schout_1.nc + nts : 288 #288 for 1day; 2592 for 9 days + max_loop_size : 1 #24 # [hr] + data_assimilation_parameters: + #---------- + usgs_timeslices_folder : usgs_TimeSlice/ + usace_timeslices_folder : usace_TimeSlice/ + timeslice_lookback_hours : 48 + qc_threshold : 1 + streamflow_da: + #---------- + streamflow_nudging : False + diffusive_streamflow_nudging : False + gage_segID_crosswalk_file : /glade/scratch/adamw/CONUS_1yr/domain/RouteLink_NWMv2.1.nc + crosswalk_gage_field : 'gages' + crosswalk_segID_field : 'link' + wrf_hydro_lastobs_file : /glade/scratch/casali/Coastal_Inland/NWM_Coastal_Run_Data/DA_Simulation/Restart_Files/Troute_lastobs_outputs/nudgingLastObs.2020-06-01_12:00:00.nc + lastobs_output_folder : lastobs/ + reservoir_da: + #---------- + reservoir_persistence_usgs : True + reservoir_persistence_usace : True + gage_lakeID_crosswalk_file : /glade/scratch/donghakim/HurricaneLaura/domain/reservoir_index_AnA.nc +#-------------------------------------------------------------------------------- +output_parameters: + #---------- +# test_output: /glade/scratch/donghakim/HurricaneLaura/output/HurricaneLaura_flowveldepth.pkl + lite_restart: + #---------- + lite_restart_output_directory: restart/ +# chrtout_output: + #---------- +# wrf_hydro_channel_output_source_folder: /glade/scratch/donghakim/HurricaneLaura/channel_forcing +# chanobs_output: + #---------- +# chanobs_output_directory: output/ +# chanobs_filepath : Chanobs.nc +# lakeout_output: lakeout/ + \ No newline at end of file From 8336043d8a161ed2e5d1c333df0442950569ba4e Mon Sep 17 00:00:00 2001 From: Sean Horvath Date: Fri, 28 Oct 2022 09:44:56 -0600 Subject: [PATCH 9/9] cleanup some files, update output from BMI --- src/troute-network/troute/DataAssimilation.py | 1 + src/troute-network/troute/main_utilities.py | 63 +++++-------------- src/troute-nwm/src/nwm_routing/__main__.py | 16 +++-- 3 files changed, 28 insertions(+), 52 deletions(-) diff --git a/src/troute-network/troute/DataAssimilation.py b/src/troute-network/troute/DataAssimilation.py index 68d5c8b1e..c084fc179 100644 --- a/src/troute-network/troute/DataAssimilation.py +++ b/src/troute-network/troute/DataAssimilation.py @@ -6,6 +6,7 @@ import time import xarray as xr from collections import defaultdict +from datetime import datetime #FIXME parameterize into construciton showtiming = True diff --git a/src/troute-network/troute/main_utilities.py b/src/troute-network/troute/main_utilities.py index a972397a7..71f3f17f1 100644 --- a/src/troute-network/troute/main_utilities.py +++ b/src/troute-network/troute/main_utilities.py @@ -16,9 +16,7 @@ LOG = logging.getLogger('') -def initialize_network(argv): - - args = _handle_args_v03(argv) +def initialize_network(args): # unpack user inputs ( @@ -79,7 +77,7 @@ def initialize_network(argv): # network_end_time = time.time() # task_times['network_time'] = network_end_time - network_start_time - all_parameters = [log_parameters, + all_parameters = [log_parameters, #TODO: Delete this... preprocessing_parameters, supernetwork_parameters, waterbody_parameters, @@ -514,14 +512,10 @@ def nwm_route( return results, subnetwork_list -def create_output_dataframes(results, run_sets, waterbodies_df, link_lake_crosswalk): - - nts = run_sets[len(run_sets) - 1].get('nts') - dt = run_sets[len(run_sets) - 1].get('dt') - qts_subdivisions = run_sets[len(run_sets) - 1].get('qts_subdivisions') +def create_output_dataframes(results, nts, waterbodies_df, link_lake_crosswalk): qvd_columns = pd.MultiIndex.from_product( - [range(nts), ["q", "v", "d"]] + [range(int(nts)), ["q", "v", "d"]] ).to_flat_index() flowveldepth = pd.concat( @@ -530,7 +524,7 @@ def create_output_dataframes(results, run_sets, waterbodies_df, link_lake_crossw # create waterbody dataframe for output to netcdf file i_columns = pd.MultiIndex.from_product( - [range(nts), ["i"]] + [range(int(nts)), ["i"]] ).to_flat_index() wbdy = pd.concat( @@ -539,49 +533,22 @@ def create_output_dataframes(results, run_sets, waterbodies_df, link_lake_crossw ) wbdy_id_list = waterbodies_df.index.values.tolist() - ''' - flow_df = flowveldepth.loc[wbdy_id_list] - wbdy = wbdy.loc[wbdy_id_list] - - timestep, variable = zip(*flow_df.columns.tolist()) - timestep_index = np.where(((np.array(list(set(list(timestep)))) + 1) * dt) % (dt * qts_subdivisions) == 0) - ts_set = set(timestep_index[0].tolist()) - flow_df_col_index = [i for i, e in enumerate(timestep) if e in ts_set] - flow_df = flow_df.iloc[:,flow_df_col_index] - - timestep, variable = zip(*wbdy.columns.tolist()) - timestep_index = np.where(((np.array(list(set(list(timestep)))) + 1) * dt) % (dt * qts_subdivisions) == 0) - ts_set = set(timestep_index[0].tolist()) - wbdy_col_index = [i for i, e in enumerate(timestep) if e in ts_set] - - i_lakeout_df = wbdy.iloc[:,wbdy_col_index] - q_lakeout_df = flow_df.iloc[:,0::3] - d_lakeout_df = flow_df.iloc[:,2::3] - ''' - i_lakeout_df = wbdy.loc[wbdy_id_list] - q_lakeout_df = flowveldepth.loc[wbdy_id_list].iloc[:,0::3] - d_lakeout_df = flowveldepth.loc[wbdy_id_list].iloc[:,2::3] + + i_lakeout_df = wbdy.loc[wbdy_id_list].iloc[:,-1] + q_lakeout_df = flowveldepth.loc[wbdy_id_list].iloc[:,-3] + d_lakeout_df = flowveldepth.loc[wbdy_id_list].iloc[:,-1] # lakeout = pd.concat([i_df, q_df, d_df], axis=1) # replace waterbody lake_ids with outlet link ids flowveldepth = _reindex_lake_to_link_id(flowveldepth, link_lake_crosswalk) - q_channel_df = flowveldepth.iloc[:,0::3] - v_channel_df = flowveldepth.iloc[:,1::3] - d_channel_df = flowveldepth.iloc[:,2::3] - - date_column_names = pd.date_range(start=run_sets[-1].get('t0') + timedelta(seconds=run_sets[-1].get('dt')), - end=run_sets[-1].get('final_timestamp'), - freq=str(run_sets[-1].get('dt'))+'S') - - i_lakeout_df.columns = date_column_names - q_lakeout_df.columns = date_column_names - d_lakeout_df.columns = date_column_names - q_channel_df.columns = date_column_names - v_channel_df.columns = date_column_names - d_channel_df.columns = date_column_names + q_channel_df = flowveldepth.iloc[:,-3] + v_channel_df = flowveldepth.iloc[:,-2] + d_channel_df = flowveldepth.iloc[:,-1] - return q_channel_df, v_channel_df, d_channel_df, i_lakeout_df, q_lakeout_df, d_lakeout_df + segment_ids = flowveldepth.index.values.tolist() + + return q_channel_df, v_channel_df, d_channel_df, i_lakeout_df, q_lakeout_df, d_lakeout_df#, wbdy_id_list, def _reindex_lake_to_link_id(target_df, crosswalk): ''' diff --git a/src/troute-nwm/src/nwm_routing/__main__.py b/src/troute-nwm/src/nwm_routing/__main__.py index 45d869c67..c8f942826 100644 --- a/src/troute-nwm/src/nwm_routing/__main__.py +++ b/src/troute-nwm/src/nwm_routing/__main__.py @@ -11,6 +11,7 @@ from troute.NHDNetwork import NHDNetwork from troute.HYFeaturesNetwork import HYFeaturesNetwork from troute.DataAssimilation import AllDA +import troute.main_utilities as mu import numpy as np import pandas as pd @@ -36,6 +37,8 @@ High level orchestration of ngen t-route simulations for NWM application ''' def main_v04(argv): + + args = _handle_args_v03(argv) ( network, @@ -51,7 +54,7 @@ def main_v04(argv): parity_parameters, data_assimilation_parameters, run_parameters - ) = mu.initialize_network(argv) + ) = mu.initialize_network(args) ( run_sets, @@ -75,14 +78,19 @@ def main_v04(argv): da_sets[0]) run_results = mu.run_routing(network, - data_assimliation, + data_assimilation, run_sets, + da_sets, compute_parameters, forcing_parameters, waterbody_parameters, output_parameters, + hybrid_parameters, + data_assimilation_parameters, + run_parameters, parity_sets) - + + ''' if showtiming: task_times['total_time'] = time.time() - main_start_time @@ -129,7 +137,7 @@ def main_v04(argv): round(task_times['output_time'],2) ) ) - +''' ''' NGEN functions (_v02)