From e24d0326c7f4fb7d9d91f3770afe3d19f262577b Mon Sep 17 00:00:00 2001 From: jhrehanoaa <59839548+jhrehanoaa@users.noreply.github.com> Date: Fri, 28 May 2021 12:30:18 -0500 Subject: [PATCH] Add Nudging decay (including reading LastObs files) (#310) * added last obs df including discharge and ids * lastobs nc file folder * formatting and cleanup * added both discharge and model discharge * added prediction delta timesteps * da decay with exp decay incorporated, unblackened for readability * added check between obs file results and our fvd output * removed pdbs and set to run on lastobs * added verbose statements * restructuring of lastobs df to simplify process * generalized last timestep index call to automatically determine from various input sizes * github requested fixes to if statements and cleanup * updated variable * working ncar da decay prototype need to bring in real lastobs data inside equation * getting da values in order through classic da assim technique * pushing ids and values to mc reach * fixed gage id matching, cython is broken cant compile correctly, need to print values to identify if da is properly working * saving changes, trying to fix old DA function * restructing da timeslice file read to use datetime, not generalized before * added last obs df including discharge and ids * lastobs nc file folder * formatting and cleanup * added both discharge and model discharge * added prediction delta timesteps * da decay with exp decay incorporated, unblackened for readability * added check between obs file results and our fvd output * removed pdbs and set to run on lastobs * added verbose statements * restructuring of lastobs df to simplify process * generalized last timestep index call to automatically determine from various input sizes * github requested fixes to if statements and cleanup * updated variable * generalized da naming conventional and date timeframe with improved interpolation * removed extra comments * remove dependence on not-yet-created flowveldepth * name "last_obs_file" * include data_assimilation_parameters to yaml * include empty dict for data_assimilation_parameters in yaml * black * added paths to shared drive locations and blackened files * quick merge changes * files working * sync for merge * sync for merge * sync merge to upstream * move last obs function next to usgs_da function * add TODOs * add lastobs to other parallel modes * move last_obs above usgs_df * cimports and cdefs for last_obs * fixed broken usgs_df names were changed to folder in some areas and filter in others * moved da functions into single wrapper in nhd_network_utilities also harmonized inputs a bit. * add da yaml file (DATA NOT YET ADDED) * drop non-5-minute entries from time_slices Also harmonizing inputs for merge. * add function for finding the tailwater for a given segment * add masks * use pandas date_range * cleanup * add comment showing possible handling of extended DA * Revert "add comment showing possible handling of extended DA" This reverts commit 0455466351294f14470ff9469a1fe82ea885757b. * temporarily disable last_obs * Update example yaml with inputs that work * temporarily disable last_obs * update comment * adjust DA for perfect match * removed filter list * use efficient shape call for usgs_positions_list length * add gage_maxtime and pseudocode for lastobs * Identified major hard-code issue in structured- and structured-obj * update lastobs comments and pseudocode * update da test yaml file with additional gage options * use "reindex" to fill/eliminate columns for usgs_df * functions in place for decay but last obs file is behaving incorrectly and changing parity check even when all uses are turned off * added decay timestep count * Use new fields in flowveldepth to simplify initial condition handling To facilitate this, added a constant qvd_ts_w (flowveldepth timestep width) to define the standard column width. * add two additional segments for parity checking * reconfigure reach splitting to consider gages * update diffusive call signature * yaml updates for test * black Co-authored-by: James Halgren --- src/python_framework_v02/troute/nhd_io.py | 132 +++++++++++++++--- .../troute/nhd_network.py | 25 ++++ .../troute/nhd_network_utilities_v02.py | 57 +++++++- .../compute_nhd_routing_SingleSeg_v02.py | 54 +++++-- .../fast_reach/diffusive.pyx | 1 + .../fast_reach/mc_reach.pyx | 103 +++++++++----- .../nudgingLastObs.2018-08-02_00_00_00.nc | Bin 0 -> 2295712 bytes test/input/yaml/Florence_Benchmark_da.yaml | 131 +++++++++++++++++ 8 files changed, 430 insertions(+), 73 deletions(-) create mode 100644 test/input/geo/last_obs/nudgingLastObs.2018-08-02_00_00_00.nc create mode 100644 test/input/yaml/Florence_Benchmark_da.yaml diff --git a/src/python_framework_v02/troute/nhd_io.py b/src/python_framework_v02/troute/nhd_io.py index 36948b0eb..c9ab522a3 100644 --- a/src/python_framework_v02/troute/nhd_io.py +++ b/src/python_framework_v02/troute/nhd_io.py @@ -8,6 +8,9 @@ import numpy as np from toolz import compose import dask.array as da +import sys +import math +from datetime import * def read_netcdf(geo_file_path): @@ -186,7 +189,6 @@ def get_ql_from_wrf_hydro_mf(qlat_files, index_col="feature_id", value_col="q_la 2018-01-01 13:00:00 4186117 41.233807 -75.413895 0.006496 ``` """ - filter_list = None with xr.open_mfdataset( qlat_files, @@ -339,6 +341,92 @@ def preprocess_time_station_index(xd): ) +def build_last_obs_df(lastobsfile, routelink, wrf_last_obs_flag): + # open routelink_file and extract discharges + + ds1 = xr.open_dataset(routelink) + df = ds1.to_dataframe() + df2 = df.loc[df["gages"] != b" "] + df2["gages"] = df2["gages"].astype("int") + df2 = df2[["gages", "to"]] + df2 = df2.reset_index() + df2 = df2.set_index("gages") + + with xr.open_dataset(lastobsfile) as ds: + df_model_discharges = ds["model_discharge"].to_dataframe() + df_discharges = ds["discharge"].to_dataframe() + last_ts = df_model_discharges.index.get_level_values("timeInd")[-1] + model_discharge_last_ts = df_model_discharges[ + df_model_discharges.index.get_level_values("timeInd") == last_ts + ] + discharge_last_ts = df_discharges[ + df_discharges.index.get_level_values("timeInd") == last_ts + ] + df1 = ds["stationId"].to_dataframe() + df1 = df1.astype(int) + model_discharge_last_ts = model_discharge_last_ts.join(df1) + model_discharge_last_ts = model_discharge_last_ts.join(discharge_last_ts) + model_discharge_last_ts = model_discharge_last_ts.loc[ + model_discharge_last_ts["model_discharge"] != -9999.0 + ] + model_discharge_last_ts = model_discharge_last_ts.reset_index().set_index( + "stationId" + ) + model_discharge_last_ts = model_discharge_last_ts.drop( + ["stationIdInd", "timeInd"], axis=1 + ) + model_discharge_last_ts["discharge"] = model_discharge_last_ts[ + "discharge" + ].to_frame() + # If predict from last_obs file use last obs file results + # if last_obs_file == "error-based": + # elif last_obs_file == "obs-based": # the wrf-hydro default + if wrf_last_obs_flag: + model_discharge_last_ts["last_nudge"] = ( + model_discharge_last_ts["discharge"] + - model_discharge_last_ts["model_discharge"] + ) + final_df = df2.join(model_discharge_last_ts["discharge"]) + final_df = final_df.reset_index() + final_df = final_df.set_index("to") + final_df = final_df.drop(["feature_id", "gages"], axis=1) + final_df = final_df.dropna() + + # Else predict from the model outputs from t-route if index doesn't match interrupt computation as the results won't be valid + # else: + # fvd_df = fvd_df + # if len(model_discharge_last_ts.index) == len(fvd_df.index): + # model_discharge_last_ts["last_nudge"] = ( + # model_discharge_last_ts["discharge"] - fvd_df[fvd_df.columns[0]] + # ) + # else: + # print("THE NUDGING FILE IDS DO NOT MATCH THE FLOWVELDEPTH IDS") + # sys.exit() + # # Predictions created with continuously decreasing deltas until near 0 difference + # a = 120 + # prediction_df = pd.DataFrame(index=model_discharge_last_ts.index) + + # for time in range(0, 720, 5): + # weight = math.exp(time / -a) + # delta = pd.DataFrame( + # model_discharge_last_ts["last_nudge"] / weight) + + # if time == 0: + # prediction_df[str(time)] = model_discharge_last_ts["last_nudge"] + # weight_diff = prediction_df[str(time)] - prediction_df[str(time)] + # else: + # if weight > 0.1: + # prediction_df[str(time)] = ( + # delta["last_nudge"] + model_discharge_last_ts["model_discharge"] + # ) + # elif weight < -0.1: + # prediction_df[str(time)] = ( + # delta["last_nudge"] + model_discharge_last_ts["model_discharge"] + # ) + # prediction_df["0"] = model_discharge_last_ts["model_discharge"] + return final_df + + def get_usgs_from_time_slices_csv(routelink_subset_file, usgs_csv): df2 = pd.read_csv(usgs_csv, index_col=0) @@ -421,32 +509,36 @@ def get_usgs_from_time_slices_folder( usgs_df = usgs_df.drop(["gages", "ascendingIndex", "to"], axis=1) columns_list = usgs_df.columns - for i in range(0, (len(columns_list) * 3) - 12, 12): - original_string = usgs_df.columns[i] - original_string_shortened = original_string[:-5] - temp_name1 = original_string_shortened + str("05:00") - temp_name2 = original_string_shortened + str("10:00") - temp_name3 = original_string_shortened + str("20:00") - temp_name4 = original_string_shortened + str("25:00") - temp_name5 = original_string_shortened + str("35:00") - temp_name6 = original_string_shortened + str("40:00") - temp_name7 = original_string_shortened + str("50:00") - temp_name8 = original_string_shortened + str("55:00") - usgs_df.insert(i + 1, temp_name1, np.nan) - usgs_df.insert(i + 2, temp_name2, np.nan) - usgs_df.insert(i + 4, temp_name3, np.nan) - usgs_df.insert(i + 5, temp_name4, np.nan) - usgs_df.insert(i + 7, temp_name5, np.nan) - usgs_df.insert(i + 8, temp_name6, np.nan) - usgs_df.insert(i + 10, temp_name7, np.nan) - usgs_df.insert(i + 11, temp_name8, np.nan) + original_string_first = usgs_df.columns[0] + date_time_str = original_string_first[:10] + " " + original_string_first[11:] + date_time_obj_start = datetime.strptime(date_time_str, "%Y-%m-%d %H:%M:%S") + + original_string_last = usgs_df.columns[-1] + date_time_str = original_string_last[:10] + " " + original_string_last[11:] + date_time_obj_end = datetime.strptime(date_time_str, "%Y-%m-%d %H:%M:%S") + + dates = [] + # for j in pd.date_range(date_time_obj_start, date_time_obj_end + timedelta(1), freq="5min"): + for j in pd.date_range(date_time_obj_start, date_time_obj_end, freq="5min"): + dates.append(j.strftime("%Y-%m-%d_%H:%M:00")) + + """ + # dates_to_drop = ~usgs_df.columns.isin(dates) + OR + # dates_to_drop = usgs_df.columns.difference(dates) + # dates_to_add = pd.Index(dates).difference(usgs_df.columns) + """ + + usgs_df = usgs_df.reindex(columns=dates) usgs_df = usgs_df.interpolate(method="linear", axis=1) + usgs_df = usgs_df.interpolate(method="linear", axis=1, limit_direction="backward") usgs_df.drop(usgs_df[usgs_df.iloc[:, 0] == -999999.000000].index, inplace=True) return usgs_df +# TODO: Move channel restart above usgs to keep order with execution script def get_channel_restart_from_csv( channel_initial_states_file, index_col=0, diff --git a/src/python_framework_v02/troute/nhd_network.py b/src/python_framework_v02/troute/nhd_network.py index 7682bac6d..ea762c097 100644 --- a/src/python_framework_v02/troute/nhd_network.py +++ b/src/python_framework_v02/troute/nhd_network.py @@ -88,6 +88,31 @@ def reverse_network(N): return rg +def find_tw_for_node(reaches_bytw, node): + # TODO: extend this function (or write a new one) to handle a list of nodes. + # Such functionality might be useful for finding networks corresponding to a + # list of gages, for instance. + """ + reaches_bytw is a dictionary of lists of the form + + tw 1: + [ [ seg1, seg2, seg3, ... segn ], # reach 1 + [ sega, segb, segc, ... segz ], # reach 2 + . + . + . + [ ... ] ] reach n + tw 2: + etc. + """ + for tw, rs in reaches_bytw.items(): + for r in rs: + if node in r: + return tw + + return None # Node not in reach set. + + def junctions(N): c = Counter(chain.from_iterable(N.values())) return {k for k, v in c.items() if v > 1} diff --git a/src/python_framework_v02/troute/nhd_network_utilities_v02.py b/src/python_framework_v02/troute/nhd_network_utilities_v02.py index 268e30b30..58cb0254d 100644 --- a/src/python_framework_v02/troute/nhd_network_utilities_v02.py +++ b/src/python_framework_v02/troute/nhd_network_utilities_v02.py @@ -419,10 +419,31 @@ def build_connections(supernetwork_parameters, dt): param_df["dt"] = dt param_df = param_df.rename(columns=reverse_dict(cols)) + + wbodies = {} + if "waterbody" in cols: + wbodies = build_waterbodies( + param_df[["waterbody"]], supernetwork_parameters, "waterbody" + ) + param_df = param_df.drop("waterbody", axis=1) + + gages = {} + if "gages" in cols: + gages = build_gages(param_df[["gages"]]) + param_df = param_df.drop("gages", axis=1) + param_df = param_df.astype("float32") # datasub = data[['dt', 'bw', 'tw', 'twcc', 'dx', 'n', 'ncc', 'cs', 's0']] - return connections, param_df + return connections, param_df, wbodies, gages + + +def build_gages(segment_gage_df,): + gage_list = list(map(bytes.strip, segment_gage_df.gages.values)) + gage_mask = list(map(bytes.isdigit, gage_list)) + gages = segment_gage_df.loc[gage_mask, "gages"].to_dict() + + return gages def build_waterbodies( @@ -569,20 +590,42 @@ def build_data_assimilation(data_assimilation_parameters): data_assimilation_csv = data_assimilation_parameters.get( "data_assimilation_csv", None ) - data_assimilation_filter = data_assimilation_parameters.get( - "data_assimilation_filter", None + data_assimilation_folder = data_assimilation_parameters.get( + "data_assimilation_timeslices_folder", None ) + # TODO: Fix the Logic here according to the following. + + # If there are any observations for data assimilation, there + # needs to be a complete set in the first time set or else + # there must be a "LastObs". If there is a complete set in + # the first time step, the LastObs is optional. If there are + # no observations for assimilation, there can be a LastObs + # with an empty usgs dataframe. + + last_obs_file = data_assimilation_parameters.get("wrf_hydro_last_obs_file", None) + last_obs_type = data_assimilation_parameters.get("wrf_last_obs_type", "error-based") + last_obs_crosswalk_file = data_assimilation_parameters.get( + "wrf_hydro_da_channel_ID_crosswalk_file", None + ) + + last_obs_df = pd.DataFrame() + + if last_obs_file: + last_obs_df = nhd_io.build_last_obs_df( + last_obs_file, last_obs_crosswalk_file, last_obs_type, + ) + if data_assimilation_csv: usgs_df = build_data_assimilation_csv(data_assimilation_parameters) - elif data_assimilation_filter: + elif data_assimilation_folder: usgs_df = build_data_assimilation_folder(data_assimilation_parameters) - return usgs_df + return usgs_df, last_obs_df def build_data_assimilation_csv(data_assimilation_parameters): usgs_df = nhd_io.get_usgs_from_time_slices_csv( - data_assimilation_parameters["data_assimilation_parameters_file"], + data_assimilation_parameters["wrf_hydro_da_channel_ID_crosswalk_file"], data_assimilation_parameters["data_assimilation_csv"], ) @@ -597,7 +640,7 @@ def build_data_assimilation_folder(data_assimilation_parameters): ).resolve() usgs_df = nhd_io.get_usgs_from_time_slices_folder( - data_assimilation_parameters["data_assimilation_parameters_file"], + data_assimilation_parameters["wrf_hydro_da_channel_ID_crosswalk_file"], usgs_timeslices_folder, data_assimilation_parameters["data_assimilation_filter"], ) diff --git a/src/python_routing_v02/compute_nhd_routing_SingleSeg_v02.py b/src/python_routing_v02/compute_nhd_routing_SingleSeg_v02.py index 5b0fa23a0..c5efc3072 100644 --- a/src/python_routing_v02/compute_nhd_routing_SingleSeg_v02.py +++ b/src/python_routing_v02/compute_nhd_routing_SingleSeg_v02.py @@ -328,6 +328,7 @@ def compute_nhd_routing_v02( q0, qlats, usgs_df, + last_obs_df, assume_short_ts, return_courant, waterbodies_df, @@ -455,9 +456,12 @@ def compute_nhd_routing_v02( usgs_df_sub = pd.DataFrame() nudging_positions_list = [] + last_obs_sub = pd.DataFrame() + qlat_sub = qlats.loc[param_df_sub.index] q0_sub = q0.loc[param_df_sub.index] + # TODO: Wire in the proper reservoir distinction # At present, in by-subnetwork-jit/jit-clustered, these next two lines # only produce a dummy list, but... # Eventually, the wiring for reservoir simulation needs to be added. @@ -486,6 +490,7 @@ def compute_nhd_routing_v02( usgs_df_sub.values.astype("float32"), # flowveldepth_interorder, # obtain keys and values from this dataset np.array(nudging_positions_list, dtype="int32"), + last_obs_sub.values.astype("float32"), { us: fvd for us, fvd in flowveldepth_interorder.items() @@ -599,6 +604,8 @@ def compute_nhd_routing_v02( usgs_df_sub = pd.DataFrame() nudging_positions_list = [] + last_obs_sub = pd.DataFrame() + qlat_sub = qlats.loc[param_df_sub.index] q0_sub = q0.loc[param_df_sub.index] @@ -720,6 +727,8 @@ def compute_nhd_routing_v02( usgs_df_sub = pd.DataFrame() nudging_positions_list = [] + last_obs_sub = pd.DataFrame() + reaches_list_with_type = [] for reaches in reach_list: @@ -758,6 +767,7 @@ def compute_nhd_routing_v02( waterbodies_df_sub.values, usgs_df_sub.values.astype("float32"), np.array(nudging_positions_list, dtype="int32"), + last_obs_sub.values.astype("float32"), {}, assume_short_ts, return_courant, @@ -818,6 +828,15 @@ def compute_nhd_routing_v02( usgs_df_sub = pd.DataFrame() nudging_positions_list = [] + if not last_obs_df.empty: + pass + # lastobs_segs = list(last_obs_df.index.intersection(param_df_sub.index)) + # nudging_positions_list = param_df_sub.index.get_indexer(lastobs_segs) + # last_obs_sub = last_obs_df.loc[lastobs_segs] + else: + last_obs_sub = pd.DataFrame() + # nudging_positions_list = [] + # qlat_sub = qlats.loc[common_segs].sort_index() # q0_sub = q0.loc[common_segs].sort_index() qlat_sub = qlats.loc[param_df_sub.index] @@ -862,6 +881,7 @@ def compute_nhd_routing_v02( waterbodies_df_sub.values, usgs_df_sub.values.astype("float32"), np.array(nudging_positions_list, dtype="int32"), + last_obs_sub.values.astype("float32"), {}, assume_short_ts, return_courant, @@ -1038,6 +1058,7 @@ def main(): break_network_at_waterbodies = run_parameters.get( "break_network_at_waterbodies", False ) + break_network_at_gages = run_parameters.get("break_network_at_gages", False) if showtiming: main_start_time = time.time() @@ -1047,9 +1068,14 @@ def main(): if showtiming: start_time = time.time() - # STEP 1: Build basic network connections graph - connections, param_df = nnu.build_connections(supernetwork_parameters, dt,) - wbodies = nnu.build_waterbodies(param_df, supernetwork_parameters, "waterbody") + # STEP 1: Build basic network connections graph, + # read network parameters, identify waterbodies and gages, if any. + connections, param_df, wbodies, gages = nnu.build_connections( + supernetwork_parameters, dt, + ) + if not wbodies: + break_network_at_waterbodies = False + if break_network_at_waterbodies: connections = nhd_network.replace_waterbodies_connections(connections, wbodies) @@ -1085,11 +1111,14 @@ def main(): if verbose: print("organizing connections into reaches ...") + network_break_segments = set() + if break_network_at_waterbodies: + network_break_segments = network_break_segments.union(wbodies.values()) + if break_network_at_gages: + network_break_segments = network_break_segments.union(gages.keys()) + independent_networks, reaches_bytw, rconn = nnu.organize_independent_networks( - connections, - list(waterbodies_df_reduced.index.values) - if break_network_at_waterbodies - else None, + connections, network_break_segments, ) if verbose: print("reach organization complete") @@ -1178,16 +1207,17 @@ def main(): data_assimilation_csv = data_assimilation_parameters.get( "data_assimilation_csv", None ) - data_assimilation_filter = data_assimilation_parameters.get( - "data_assimilation_filter", None + data_assimilation_folder = data_assimilation_parameters.get( + "data_assimilation_timeslices_folder", None ) - if data_assimilation_csv or data_assimilation_filter: + last_obs_file = data_assimilation_parameters.get("wrf_hydro_last_obs_file", None) + if data_assimilation_csv or data_assimilation_folder or last_obs_file: if showtiming: start_time = time.time() if verbose: print("creating usgs time_slice data array ...") - usgs_df = nnu.build_data_assimilation(data_assimilation_parameters) + usgs_df, last_obs_df = nnu.build_data_assimilation(data_assimilation_parameters) if verbose: print("usgs array complete") @@ -1196,6 +1226,7 @@ def main(): else: usgs_df = pd.DataFrame() + last_obs_df = pd.DataFrame() # STEP 7 coastal_boundary_elev = coastal_parameters.get("coastal_boundary_elev_data", None) @@ -1251,6 +1282,7 @@ def main(): q0, qlats, usgs_df, + last_obs_df, run_parameters.get("assume_short_ts", False), run_parameters.get("return_courant", False), waterbodies_df_reduced, diff --git a/src/python_routing_v02/fast_reach/diffusive.pyx b/src/python_routing_v02/fast_reach/diffusive.pyx index ed866fe69..b5aa6dde4 100644 --- a/src/python_routing_v02/fast_reach/diffusive.pyx +++ b/src/python_routing_v02/fast_reach/diffusive.pyx @@ -118,6 +118,7 @@ cpdef object compute_diffusive_tst( const double[:,:] wbody_cols, const float[:,:] usgs_values, const int[:] usgs_positions_list, + const float[:,:] lastobs_values, dict upstream_results={}, bint assume_short_ts=False, bint return_courant=False, diff --git a/src/python_routing_v02/fast_reach/mc_reach.pyx b/src/python_routing_v02/fast_reach/mc_reach.pyx index ed837e26a..a888f6ac4 100644 --- a/src/python_routing_v02/fast_reach/mc_reach.pyx +++ b/src/python_routing_v02/fast_reach/mc_reach.pyx @@ -3,11 +3,13 @@ import numpy as np from itertools import chain from operator import itemgetter -from numpy cimport ndarray from array import array +from numpy cimport ndarray # TODO: Do we need to import numpy and ndarray separately? +from libc.math cimport exp cimport numpy as np cimport cython from libc.stdlib cimport malloc, free +# from libc.stdio cimport printf #Note may get slightly better performance using cython mem module (pulls from python's heap) #from cpython.mem cimport PyMem_Malloc, PyMem_Free from troute.network.musking.mc_reach cimport MC_Segment, MC_Reach, _MC_Segment, get_mc_segment @@ -168,6 +170,7 @@ cpdef object compute_network( const double[:,:] wbody_cols, const float[:,:] usgs_values, const int[:] usgs_positions_list, + const float[:,:] lastobs_values, # const float[:] wbody_idx, # object[:] wbody_cols, # const float[:, :] wbody_vals, @@ -203,15 +206,24 @@ cpdef object compute_network( # flowveldepth is 2D float array that holds results # columns: flow (qdc), velocity (velc), and depth (depthc) for each timestep # rows: indexed by data_idx - cdef float[:,::1] flowveldepth = np.zeros((data_idx.shape[0], nsteps * 3), dtype='float32') + cdef int qvd_ts_w = 3 # There are 3 values per timestep (corresponding to 3 columns per timestep) + cdef float[:,::1] flowveldepth = np.zeros((data_idx.shape[0], (nsteps + 1) * qvd_ts_w), dtype='float32') # courant is a 2D float array that holds courant results # columns: courant number (cn), kinematic celerity (ck), x parameter(X) for each timestep # rows: indexed by data_idx cdef float[:,::1] courant = np.zeros((data_idx.shape[0], nsteps * 3), dtype='float32') - cdef int gages_size = len(usgs_positions_list) + cdef int gages_size = usgs_positions_list.shape[0] cdef int gage_i, usgs_position_i + cdef int gage_maxtimestep = usgs_values.shape[1] + + flowveldepth[:,0] = initial_conditions[:,1] # Populate initial flows + flowveldepth[:,2] = initial_conditions[:,2] # Populate initial depths + for gage_i in range(gages_size): + usgs_position_i = usgs_positions_list[gage_i] + flowveldepth[usgs_position_i, 0] = usgs_values[gage_i, 0] + # TODO: handle the instance where there are no values, only gage positions # Pseudocode: LOOP ON Upstream Inflowers # to pre-fill FlowVelDepth @@ -230,7 +242,7 @@ cpdef object compute_network( tmp = upstream_results[upstream_tw_id] fill_index = tmp["position_index"] fill_index_mask[fill_index] = False - for idx, val in enumerate(tmp["results"]): + for idx, val in enumerate(tmp["results"], qvd_ts_w): flowveldepth[fill_index, idx] = val cdef: @@ -282,6 +294,7 @@ cpdef object compute_network( ireach_cache = 0 iusreach_cache = 0 + # copy reaches into an array for ireach in range(len(reaches)): reachlen = reach_sizes[ireach] @@ -307,13 +320,16 @@ cpdef object compute_network( buf = np.empty((maxreachlen, buf_cols), dtype='float32') if return_courant: - out_buf = np.empty((maxreachlen, 6), dtype='float32') + out_buf = np.empty((maxreachlen, qvd_ts_w + 3), dtype='float32') else: - out_buf = np.empty((maxreachlen, 3), dtype='float32') + out_buf = np.empty((maxreachlen, qvd_ts_w), dtype='float32') drows_tmp = np.arange(maxreachlen, dtype=np.intp) cdef Py_ssize_t[:] drows cdef float qup, quc + cdef float a, da_weight, da_decay_time + cdef int lastobs_timestep + cdef float dt = 300.0 # TODO: pull this value from the param_df dt (see line 153) cdef int timestep = 0 cdef int ts_offset @@ -329,7 +345,7 @@ cpdef object compute_network( with nogil: while timestep < nsteps: - ts_offset = timestep * 3 + ts_offset = (timestep + 1) * qvd_ts_w ireach_cache = 0 iusreach_cache = 0 @@ -358,11 +374,8 @@ cpdef object compute_network( # upstream flow in the previous timestep is equal to the sum of flows # in upstream segments, previous timestep - if timestep > 0: - qup += flowveldepth[usreach_cache[iusreach_cache + i], ts_offset - 3] - else: - # sum of qd0 (flow out of each segment) over all upstream reaches - qup += initial_conditions[usreach_cache[iusreach_cache + i],1] + qup += flowveldepth[usreach_cache[iusreach_cache + i], ts_offset - qvd_ts_w] + # Remember, we have filled the first position in flowveldepth with qd0 buf_view = buf[:reachlen, :] out_view = out_buf[:reachlen, :] @@ -386,20 +399,9 @@ cpdef object compute_network( fill_buffer_column(srows, scols[i], drows, i + 1, data_values, buf_view) # fill buffer with qdp, depthp, velp - if timestep > 0: - fill_buffer_column(srows, ts_offset - 3, drows, 10, flowveldepth, buf_view) - fill_buffer_column(srows, ts_offset - 2, drows, 11, flowveldepth, buf_view) - fill_buffer_column(srows, ts_offset - 1, drows, 12, flowveldepth, buf_view) - else: - ''' - Changed made to accomodate initial conditions: - when timestep == 0, qdp, and depthp are taken from the initial_conditions array, - using srows to properly index - ''' - for i in range(drows.shape[0]): - buf_view[drows[i], 10] = initial_conditions[srows[i],1] #qdp = qd0 - buf_view[drows[i], 11] = 0.0 # the velp argmument is never used, set to whatever - buf_view[drows[i], 12] = initial_conditions[srows[i],2] #hdp = h0 + fill_buffer_column(srows, ts_offset - qvd_ts_w, drows, 10, flowveldepth, buf_view) + fill_buffer_column(srows, ts_offset - (qvd_ts_w - 1), drows, 11, flowveldepth, buf_view) + fill_buffer_column(srows, ts_offset - (qvd_ts_w - 2), drows, 12, flowveldepth, buf_view) if assume_short_ts: quc = qup @@ -407,21 +409,37 @@ cpdef object compute_network( compute_reach_kernel(qup, quc, reachlen, buf_view, out_view, assume_short_ts, return_courant) # copy out_buf results back to flowdepthvel - for i in range(3): + for i in range(qvd_ts_w): fill_buffer_column(drows, i, srows, ts_offset + i, out_view, flowveldepth) # copy out_buf results back to courant if return_courant: - for i in range(3,6): - fill_buffer_column(drows, i, srows, ts_offset + (i-3), out_view, courant) + for i in range(qvd_ts_w,qvd_ts_w + 3): + fill_buffer_column(drows, i, srows, ts_offset + (i-qvd_ts_w), out_view, courant) # Update indexes to point to next reach ireach_cache += reachlen iusreach_cache += usreachlen - if gages_size: + + if gages_size: # TODO: This loops over all gages for all reaches. + # We should have a membership test at the reach loop level + # so that we only enter this process for reaches where the + # gage actually exists. We have the filter in place to + # filter the gage list so that only relevant gages for a + # particular network are present in the function call --- + # adding the reach-based filter would be the next level. for gage_i in range(gages_size): usgs_position_i = usgs_positions_list[gage_i] - flowveldepth[usgs_position_i, timestep * 3] = usgs_values[gage_i, timestep] + if timestep < gage_maxtimestep: # TODO: It is possible to remove this branching logic if we just loop over the timesteps during DA and post-DA, if that is a major performance optimization. On the flip side, it would probably introduce unwanted code complexity. + flowveldepth[usgs_position_i, ts_offset] = usgs_values[gage_i, timestep] + # TODO: add/update lastobs_timestep and/or decay_timestep + else: + a = 120 # TODO: pull this a value from the config file somehow + da_decay_time = (timestep - lastobs_timestep) * dt + da_weight = exp(da_decay_time/-a) # TODO: This could be pre-calculated knowing when obs finish relative to simulation time + # replacement_value = f(lastobs_value, da_weight) # TODO: we need to be able to export these values to compute the 'Nudge' + # printf("decaying from timestep: %d %d\t", timestep, gages_size) + # flowveldepth[usgs_position_i, timestep * qvd_ts_w] = replacement_value timestep += 1 @@ -429,9 +447,9 @@ cpdef object compute_network( # The upstream keys have empty results because they are not part of any reaches # so we need to delete the null values that return if return_courant: - return np.asarray(data_idx, dtype=np.intp)[fill_index_mask], np.asarray(flowveldepth, dtype='float32')[fill_index_mask], np.asarray(courant, dtype='float32')[fill_index_mask] + return np.asarray(data_idx, dtype=np.intp)[fill_index_mask], np.asarray(flowveldepth[:,qvd_ts_w:], dtype='float32')[fill_index_mask], np.asarray(courant, dtype='float32')[fill_index_mask] else: - return np.asarray(data_idx, dtype=np.intp)[fill_index_mask], np.asarray(flowveldepth, dtype='float32')[fill_index_mask] + return np.asarray(data_idx, dtype=np.intp)[fill_index_mask], np.asarray(flowveldepth[:,qvd_ts_w:], dtype='float32')[fill_index_mask] #---------------------------------------------------------------------------------------------------------------# #---------------------------------------------------------------------------------------------------------------# @@ -704,6 +722,7 @@ cpdef object compute_network_structured_obj( const double[:,:] wbody_cols, const float[:,:] usgs_values, const int[:] usgs_positions_list, + const float[:,:] lastobs_values, dict upstream_results={}, bint assume_short_ts=False, bint return_courant=False, @@ -835,7 +854,7 @@ cpdef object compute_network_structured_obj( #if isinstance(reservoir_object, lp_kernel): #TODO: dt is currently held by the segment. Need to find better place to hold dt - routing_period = 300.0 + routing_period = 300.0 # TODO: Fix this hardcoded value to pull from dt reservoir_outflow, water_elevation = r.run(upstream_flows, 0.0, routing_period) @@ -888,6 +907,20 @@ cpdef object compute_network_structured_obj( assume_short_ts)#, #timestep, #nsteps) + + # #a = 120 + # #weight = math.exp(timestep/-a) + # #lastobs = 1 + # for i, id in enumerate(segment_ids): + # flowveldepth[id, timestep, 0] = out_buf[i, 0] + # #for pos, loid in enumerate(lastobs_ids): + # # if loid == id: + # # lasterror = flowveldepth[id, timestep, 0] - lastobs_values[pos] + # # delta = weight * lasterror + # # flowveldepth[id, timestep, 0] = flowveldepth[id, timestep, 0] + delta + # flowveldepth[id, timestep, 1] = out_buf[i, 1] + # flowveldepth[id, timestep, 2] = out_buf[i, 2] + #Copy the output out for i, id in enumerate(segment_ids): flowveldepth[id, timestep, 0] = out_buf[i, 0] @@ -1056,7 +1089,7 @@ cpdef object compute_network_structured( upstream_flows = previous_upstream_flows if r.type == compute_type.RESERVOIR_LP: - run(r, upstream_flows, 0.0, 300, &lp_outflow, &lp_water_elevation) + run(r, upstream_flows, 0.0, 300, &lp_outflow, &lp_water_elevation) # TODO: Need to replace this hard coded 300 with dt flowveldepth[r.id, timestep, 0] = lp_outflow flowveldepth[r.id, timestep, 1] = 0.0 flowveldepth[r.id, timestep, 2] = lp_water_elevation diff --git a/test/input/geo/last_obs/nudgingLastObs.2018-08-02_00_00_00.nc b/test/input/geo/last_obs/nudgingLastObs.2018-08-02_00_00_00.nc new file mode 100644 index 0000000000000000000000000000000000000000..8e34a5f79b95fe849146f35c097a06c8fa1fb128 GIT binary patch literal 2295712 zcmeFa3A|-TRW9Df5W%1fGCd92fFKfs-JPkEoIdA*Aov{M4kQ41<5| zFbIfI5#fg@Lwq9W15weZl1_-C2} zKYj0!!&g1y=;eF&pG&^G?m6|qKAD_~`bB~tCvwMuILP%5*IjkR(QBdcc|748zY618 z{Cj_k9A{m5-pozV51{*pt^Dz2@+xSMGiKk*lxYd+8BbEqCFG z-yQax`p_d1|JP5s;~AgWg7cFL#^@?|=>FF0WqjW~eoh_gz?e8IiHDAQU_IV(_31MV zu~uSiPsFhE+W3sjhZyQ9@9P$N(I1H4cMRFA&sd!G=^JZ5T)+Po7~gxYfzzoTeb9C8 z;~JwEj!(?Pu|CQn{19fyHpIDIZDZ>J&SKN?8QrS&<@}b<#)3YdQ%Aj(vNt}d_A|o1 z!@M1>1FZwC1FZwC1FZw&I)G=jAtYXR?Ky<)v(58YJDwTcvm@Wnba)2rIq}?SZFbHv z{V}&=+WCHib4WY3{0SCyDyPer+`V|uOKyv^Iy<%)#zq`qavbNBHDBw8an5DumWO`S z**SGKUac3z4f)bWE<5KKl6FekFwe)-SuFFjTs1%XP~!cs?UCd0`(W_;>ANO2TW|Vd z>$5#!53F=G_T}cUPhjM9dmnwdT~0`j5kqvmZ#cd8aXn-&Jx93a?VNm!gBaObD8J2> zF{#769rHUNy>;s|51IEDc=*oq+Y0-bwO%&Y75uno^J|d$M6yp34|=Rg@)?ModyK=; z4>IcG-lrdBj<@rnvG~uu*9~EYY;)o!eIRxoAM8BoGgkKPr@ok?$6C1lU_3U?5UwwW zVV}50WAb3mL!4u6W8#hF+AQ3^xfo}x zKk@KKPcV1A5n1CPzGkyJ;vhM;c8sC7dDn2rh1lF5bNX{!i{vAi~B zjw288Hh(*|e#FkxS$l0ve%ipB>tKVPC$ZGqImdZ^eZCfF$AQ~kFLsPP?Yxca9hi6T zgVzv7`ph-WCD+SJj)CPqg3jv6V|8{6yPacf=k&L-X0PdTpD`HgQyb?Tc5cVk*Xl90 zbKq(^>Mf5Qqu*ow7_Wx6Hp|}^pZFX*X3qGQgJa4X5B+RT#Mh+N*)h4Pb9+{=3AgXr zQ^p}KyvLEAbDvWVVc|~>7u&>QE|eC>vGuR%=v#2xIA%)0nbhwN=UmxOz!8N25cGq*U{ zc#o|4@>z#Il*CesK0ITIj$R0Gz}Xz^IQO?)cAWFl&+4si zPK;1fUv7*|PVzxoAL3{yK9{~%AujROe`rj;A~tq@Z4G!uhz-8(v{*lOygGKdF-|Te zwkB-2=u4gOxcFusa-;@e=r{avnzan$+(r!Xh=G&(Tn^cQC666Lm-}JP zTqtcU^5io2qYrS5VSQ@&n$G)#^&p4khYlzFZLEAw9~%cc`f>~@7#EX1f^l=Br=9wQ zhcU$8*%5>Mu;HW)dg8r4U}3X%;}hcMT&xFr&zt1H7_`@!x#NZS|2faEFm5QBa;7IBcYTb&)l&&HFvF!vJ0&p0Q%@Tu^cF{6;`6!XBL-ZSkC;9k@z!p~ z)}MMx+L#yhnEQ3+njk0ik?Rn~zOP|T#W&deIM~1sZZ92|`x8wM<(FHnRhGeJ8&i zQ%AY1jsElG5dS>i+)l1_-{<=H7_ZD@{_A3&Z_c&oyf4?WJgfSTjk9jtvi)Sexj*N$ zFPbm?$M`LR1>YF_5C%2T4#_cdwexfw{fMne%U`$0dr!^2h;G^SStLdu*2ZR^DEoY@ z-uhcT$Mfy$>my?}**dV99a!Z0*vvc{ck94rbYN(I&%2*5lFvH1YH`6oR7=fgow{XW zZ+1^st#6r{hGN$E`g)M-7x5j+q1jgJK)x=PZOCSEi;OpebCLKB+d9xX&^pjMuz4M5 z_xR20?QUj1S@zAcbuR0-6Zg!jwaWX8>i1%IVlP_GtpnS+1GV?^+d1EsTkAmUKg5txjvt7$68uWJFf$6U+ug# zYZl?>Flxb=iB-I$~Rn&8W@tw{h#h z$=Cs0SG(!j+U#03lYfZ2W~=G8`ySqmoR{Ss@*DHIHwLqv)?=vN?Ud)qmdkEgmz{P! zoNW87)!RC-n>(<|{U^T%=UnsV>+WkFZyEl)re!#CpLOI#&dtb=+}la6vuE3>u9nMs zJ0SZce14B>1N#O#Im7o|sAFVr_y67V)CV?;!`S*`>~;8Wm*8}X5Incd6?~N z---GA^$LBLd50d??yEK3y!9ZT<>cO=FEHlx|E(bCxEJ-`?YDEm%if}${&tQrPjZF1 z*`q<{<8cm&z3im1aerG*j)OG0C481g#sTlgoLe6|hP@x7J=UDrTPsnE$M`(@xUAle z*^5Gler6~0cKWP7`di5{{jAJwnCCi+pEq9CSN*hyF^2829s8c(9>~-0JA0pGEzF4$ z{LaR{vWJ*+?Dtu~ik^8TJmTXpUUEzx>yzsomhm8ceCiVkn>|st_hk&?o!;j|PDp1r z()tIx;k0%e!;XQ;=T;Z)C8nPizs#7q(wFflp~u+HsiUmf10VWq{Bs`Saybu|+ii@T zi}T!vdPv)coU7)SV;qOCv(LtOvK#&+lF0a~b%2J_(Ph(dun|mMd!h!Rh5QRd!u_P z#-F#ZVtp=m^L~Tx3He%OYom@m2y^rS_Yb$9(=jo*BsSM$o^YAo=U6`TSiQc7+Uowd zc&!8Mz`SdZxSCwWx5jrObhv&`MBEnh#B@N`d(+=zv^}-_+Dh-j?^Tv(*_oc(Vc($t z=EP^woOkG|%-!|l^>~h=of5j>M<0v#I=9YVPkgvGp$86!=OeFw{&O*yOW_9};~U0~ z(El*85kEQUTa)C-V^|Ji=uex~(`I!!&dz1bp4oa`-sAw@^I|<fbkf((-Uj93}O+R1SS+&uw;&eC*tg z8N+hL{P`ZjN{;RO4*Nbs^HDxxD6P%$NbkuNw)|gzcy}htL91r!5 z7%LaWTi->-5+__|^owh0KNn#?ZO^D1@u7Rl`{w zeQZtC)o^{f+~n|S)KK<`o1yo zeD9ac{rhv;EC+S?j4d(hqFRM>+tL82-*YX+7s(Ea8f36?% zEY~qzmvU{L-R$%H^A)?sb_~D#gq^3g)%=L7*{rV}TWt891g>Lz<~Q~vp0dyH_8w0E zx1M=k_#05@n4|j)5ZveqW5_u5!@7Blx9MksaXkZ{aKz69!RdWbhdce;;e0Oc8lqh# zb4-8tAvT{U?TqF0T^1|k0zD3Jd+B-N_3OEz?|>OP1cP3&CN~BiI{H~VZL}NNSv<#9 z#(u{4MB<&bNreGB2-4zKyl7dl|P9j}eaYdCRD?!FGl zT6goR8i(1M-;enBG48n;d1J5gv~`FsJnwm2n0s4Cyv1Tnyp?{;>w=hYEs0;ahAb9i z9M;YlUQaG3sS^yIV{ryOY&@X1Heg{B8S?NLr}wtNWqo1e;rq+jUDU^Th=mh2Bdc}L z-(y40omxu>=*Foalva(*l{qPAEOT9kV~k` zfjwUIwAp<^U*`i~`cQg5>l4NqrdD5PFtk%5XJKDI6WgUXqi(p;p8s7Jiu9)7T2VwPkTaP0-^o@B5P&YK?1e@(KN+j#%Y$eR4UO zdGN71@t69;X9S3kessXt13Edu*;zftUe7){f6>`_QM3BF>mk8`-}^%PalA(9m&&kC zf>*4qNwG0++Mv%5#H7x1h5Zoq5fgRs-XR?P{fAQt_@A z35Gm^L7zgNn8SvHadezuz=aqtR|ob#v~K3jHBe4+Ln|=D~Qf{n=<+5WJ+t*q4 zNBm)vQ#q8+fIX;BRBm&tk2ec;JYkq^_2e<;Y`Lf7-09`7#!z z<={B?vwHej**DJpERHtnhUUN!XC?K0(sEiq>M6zM_9=OczSy(GSP8uKvEv%f+Ve5z zl=SDE((0-6GSosnu=(DyHrVYvAKN+OQuf*Mc*N(@`g6={#d5$#d(MHmwe?|hjPam5ckc71lwG-5ZeJHaNpFlH`B=lnev*1^re11$L<5!=rL zhIU|)pUi1hIA2hzL5q{*Mq>i|JPJNTD11G8jvZwv^ zpnIQr*u73&ldS`-1LHa%*AJf=_LS0d16X_VHJUndLLYQ~OdIsH=l=AeB+kyQ4>-w3eeUDz$e(%S zvSK4ArS)YT+92)N)d^1N9rg6j=hQn+`1sS}v~S#zv9G|S&n?72634N%3{0%k)#&rndi{Qp+;xxm z8gR|>gw3DM$6wDiF6tn8@?OJ!ST16$oM#8ta&b-_=j0s2N9^KK*S_ZG;@*Zn-LUMd&-(XapeK%)d`|tkCHCjKIU8T=K}Qf3lSA$Lxhco=fy6-{o#{{NAaU3^_GYeE zulSSpsL|29eT^FFqj7AkXd{M_`Ss1ACnk@fw#W^;V$;uHsY6~VU-|hw?N(yULpWq@ zqaSmly~*v_0lW6wGs85iwy)BDwAt?I0Pmlas0`O9_q^46oBus~{GFldtFLkXdwBL9 z9q;?_8#-(r^KgB3n?GyHu@*xcb=HTvh$&y&V6#3E8+$+ zJmFz&f)6!NSCinS9zGoBavsjwbKlLHBjze`#n<<^|2;POMRE;A>VDX)y2kP%k3|mF zyND04=z*Nozq1>g196mj4!IulT$lT-I^S&mMe}1ml<@BxFUy^C_VL)beVCel8NX$G zYO$NHbzr-90DE1}GrSykpUbZi!_(p3>^beTfau-p6zqJi$j9E#;XEefXMMnn)B7j9 zo`cUDmaB*h4$CWJ#tWRxkug72#w~no4)C|9wIQ~R&sZXD-eF9vmmx=)hcROzUyjLZ zb@Z`1i}yZ^O=hhHOJOXwljlKqsqTc2D{d+q}q`7ov*$9A6ka&9pk!$w|=EfyHq zh@phu+gO8>)<4I}++p%qz$IMRH$Eoxup11pA(rI=)}5I@IcO&rdEMOmgx5mh3eP3v zHM$OX9I#OuoaJ<5v2`9NbM_2%>2+f4%rkjzirhu*0WTQW55&RY=g{Hoybk%WZ}f!@ zV@NqeewiKmV6)f|!`oqlFXLEAta)t+HTfJvPw40Ln*YglU(r5le^5UU-(SB5dVSCa zDR!~3uax21k-j=zzUF@20^V~d*77q3b;!r-!Zk!&O(K3fmg@j}y_|RRY8_}D*s2cr z`?R^whSyoXwt9(sY`7 z*pP?G4g3j@ncG}}2|N}fV;j@qa=WiRiNicRmK^SH3VhxP-t>*R6uE=b`_g9n2V2ma zv5jNL#O6B3<6}8~-%mG&-p<({k9WC4hf{RD+{B0^#_^Jy@jXZApYM~)5m@k0M_J(x zdC|vU*tdj>aZL>&W@dvQYjAPI&U`~$#DgAZj`ukg93C6|^7_Oc;`w^WkgTl#4#o%^;{R1Blvv&7RPZ-GIrI*{3?=o>(9Qke&z^l(3$lCKJXxhUkj_V zzSLV;i$Od28QXDjZ&I>0%n?7A%**HPI7G)7Rx*Fb0Un+{27Q^clfLGllX-&k^PnRh z(!ahr8}+OQ($@mJ!(eXh7<>LC7mu^NS|-en5XZ<#P^qV4&}A4;l5@Q zlic;+kyzh0ZXIYHXdP%BXdP%BXdP%BXdP%BXdP%BXdP%BXdPIk12@0+j+d?C-+WsK zS_fJOS_fJOS_gJ_2k<+b-Cbd;u63Ywpmm^ipmm^ipmm^ipmm^ipmm_$0sKu@J6Z=? z2U-VO2U-VO2U-VO2U-VO2U-VO2R5ez@;j)7|J|_7$)vHi4zv!m4zv!m4$SX>e%F=X zH|4*V#X04P`7Y?HpJVFxb{EUt#`OLjx=4NOmwqRhHrO}wL>wH8#o%{&`EPK~FmFow*QCWne&uvrBfr}X zZp+13H63k>Nbr!$_L({t-{jiY!$o4Q18ehJmM`bX=R>@UV8H`CefstiF~rd?k!CHZ zr=Od9yVXJ8e{$b9dGdBZ_U7Dwj}UukHyru3u$eV6)-o~ZJ73!SMgMg^%yY(V(XM>U zik9$9mx5aZICvXN1;JglcZ+E!_4D95~#tx(R%}{UQXMG}1d@Z$haPbg*$1!D1 zm)n>R^^`UabyiwC;$WWUljO!V2-5qApRQ%;ANy$IE;1&k#^9bBlBh%Nc^q3?ZriFk z>anq64`bfUzfW5Kp>dyoUmtRP+I#K~Cqs{83|_ZGYXcj3hHyi@P}@-5yUB)rZRdI< zzxF$=?YuxOx7LByfnC*s?ev-uU;pjv`QYofJTJ%R%2gJIvDd+|uAElMWh;Eyv-xt7 z=Q+FfedG9h1k{;62fFuY{+ZG}AJ)cvzvlLj_;c=>tfz6miLX%quNt_UQ_Oz-_^#voj*A9gLy%ZF(o-M&kwN)FY9n|x*UT!b2Pl> z{j2&bF23icpOqYYKGp;YKAwE9*a6Q&bB%Qwz4WC1ybHaauJ`h@~>^ z4dcKbF~r6kBF@D%Ik94qI?y^$?*OkQSUJWu%QqZ^Qt2**ToQoNH8L{qlo$G_wc>H&8-SdN&opQt+L@zwavy|f{9(M2JaEf=F zP9JSHPUM3f2YaC7JU(C7lY0$wheS^9wcL^UA2x656&K@c+_(n~t}|odW^794gt&Z` zpsd+qP2fcyUb6qJf$QU>$8;$+V)X`8Ze3*eA?sQ*6i?y>YqIE_0_NPGy>3tTWGz^{b>WxoZ;f zYkKGqhld?gmrLRL6m`CiP@m~B>UDiiG0Z*m8NN8NuW-6P86B@1Vu&Y>5_%sq;jnn} zGZrO%;V(M34%E@d^3W!Dhc!~y)#qRHp>HmkJN1~`lU&x0G4ivLJXV@W z@G@Y0oG^zUW0R9yn8P0@#A zs3X?^N8q9ldFbQk%ooz0q3;$aaUCAj+h5yL8d2pp~pc<{mCNPmqqH;y%C?K7V#a6 zMU1i7lNrag;5w%Ba81dzY_A1(EsBoUpv487_p#TF#gPxXpvOJS_*t9fS?AcsV@_7a zSlB1L&SSso_I2#3G)Dh^PH{1xT;G>d+H>`{wf6bd^ul#a<8tlTU+xv=7xZTRX@jJ{ z8_T}1w#^^2HpJz@95APzl9**BxodpX5ySYLQ`*?{A=cX3xOJd)pmm^ipmm^ipmiYc zfId&~IiAmA_L+;%ZmNTS{=AVtlho{aT+ZoheR3P-#L+fZT3$P*KY8a#;OiKD1}5Kb zm$e?Qt7i6hU3@1CPrfGk-1ec*#@^Q?{A+s4MLT2BW~CjIlX%XF$@RINI7*9OX1p#Q z=DAD`o8=?#uan=wZdRPe+d9xXQ13wP{vy|9_&Xuk`%n9P7N5iFkyLBBh|6_$j`3z5 zef)j;&CI27Z*B+Lnr?1?*UgUgNdok`i zxW9|kdp0xmdVi1R{oKmv6aB4@SjOp_Qx945r#-bX&#{vAu{RQnuRrJkPP_(jEIqMt z89UeoM?0lHNA%?*+}r+M+L!x~Ui%Pw>0ZZUAN94z^t>Y%b(~Z7>1n4#432X-mLvDW zypMMk&RU#4T^?WN3+^UN~+?z2i<^8#%tF=RP5p^BR^INZKi_ZD2D{L`eo42je)nM*jxs7v&^Y?agxqF=V1up2NPqlfjBR<4%Tn7cEzF$6P z_LEZkNG?aZ3xA*o+o7!OlE-%FMPCm7`o%SuTsv{E^O_6Swtt4I;d345kb1rQcv&pn zFR2(+NwQI{_+qiY0b)a>ib)a>ib)a>ib)a>ib)en> zybq{bnznV|Kx!Qae=Z|^VehlXneNF_<)@XCKW9C)U(Y8)$<6vy(h*O(WmrKp-L|!i^TWq_Z z*HydaOvhaBarLE5^gCtsYW{^&n3QQE%~ z~x9Ca)cGBM+t8(t8hekoi%@(Oz0TeQci* zUrzVFL&ve6d~W=Ux?$7YdGAT%+dMqZagcLJmcHx@@6kc}yh08kPg{$|2M2M1uY#|= zHsw0kL-*QkYwM5WVoNODU)~3=J<#FwT&^yYlg-)Un7@^1;;`q&LnzgyHv*|vH?@^V*`I^kN8Y~HYCkuLQVz|f zkB2^x^s8YbF7Jb#+cA4!b@951e8de)o0Ih&%Gvr5N8j9*&w*=4>p<(k_zuWx_b11r zcPEnfmng&YMD}`;-f#2!O>M5vN9p~%j*ItFcA5EbUXwXj4YR0jot*3BTC|QDUe=?7 zzArE6X{$-<7Uckb%whS*;DMnJCH?X_^_wZN-#3#V+*=W2vuoH%{EO}*i^n)WS-Zti zM;U$Wv*_kM-`RM~p~;=!0kf|7j6yzdz<#uQivK;-a-XKY&d+eTx#zRK@%07%I3!;0 zX9+O|`JL>Lqxz z>9n5l_re-aEkE)uF4^1RJu-&3mg~B7T-z~uq?r7*c}$&YPf&w$+G|YL(ChhZ;IHlY zn#Eiq2jZ9f^ZG=dewlJIFUFn6zZG`mv|Eq4kFo5$uiiXtV&c@d|&^pjMU^~$6GqxLTyi5lsXaCm5GJegcb)a>ib)a>i zb)a>i-T{2(lppK-94h~;+;Zn**4S)8=dIz|V!PcJ-K5q=C`FjI?4mliu zATD`3#nftqE{{{g)pBsZ|A2qxbL&vgKyx#>=`xlXkFwf_iZ0Zo|ol-kIs1y z%VinI`b*E;y{j+wPSV@`u#@s`xyBC28v6a5?%RkcNAOwZ;B`g0496Is?0PfLH))M2 zZj7yb?qEKai#kZFw`1Cfg^juzjymFZlVt7Nu_oJh=1IwXIj4jkV|#z3P4#xKm4B;a zv5XNp<7+LsXrrXQCR4un_iU-&=Er>*U$@9>eey9d_ONsH=d}bG#+|o`%yl-Wq4x`C z+@>7F^Y5vtPvY6w=00IDfyZJoX09?O29kQ}+%uHnrrye$PhvN*p$|3rJZdqhV=Y7d zWGrGhUqrgUvCn$pa`k=UK2lEX4eb?c=U%iq=-BQfJGOnd`pp_6Uf;o7`s^n{&zw}U z&x@>SKX#~|EUtrEUG8gb<@M8_L+V%J5C@o=bV~oj@>o5`W85ZN2gYaSX`ffpB}tCfvLqo->l8zouTJPjjIP* zjoXJkk$UOHuKbLTYiecQ=iIi)`sQ4mD`)&Xjrx;K#@^cJzIbg$J9YDL@i_;*Ed9xo zKFbZ^)P}hBo=Tn=uWrwA>6)i;Yy9-jrR_uHjC?V#F?&jKPyRiW$fI$|0e#;=n{ajX z2bN>XK7Xqhj^cZjBPHn$|5B$!mV>c%QTPykS4<6ZbBB zaMUFE#^g?{<*~Y4KZbKRVA39xYmnOO_XYGpaq+b&_S5d!QUA7v=c>ml^GW!-(ms}F zD{y`Nwfgv;ls%07jXCayz1M1J9cUfcnH`YV^p<&3>p<(kiR}R2 zv*ho?R>>;o(s}$HRBBJ(KhcKx9Mhk3=Eiv`!5Pl%v#ol(k^}GE@ZZ^t@8Oiw>3egF zajl;nGd}aPHajM+|8r{g;Y3TR*?q<>(mi9MXY&s2t9>7BYfs1XxSBof0Q=9q3v1M+ zYeap@5U)Mzv9HG*Hm1d^zT_Z2UN`)FDDHo?#XVtp+xX<}0QW}T1@5a{&pGX5_ci@$ zk~u`qxL51C`S(4o`=Jj9ceHcE%_`;S=Ih_^cW zQ1b5xhzT-#rXwHmoRh~&a#-Es<8+-;e`~XA5qr$vk;QA&;B=5Ak?S$9nb8}wz3 zk*j`Oy+FLAU}FZqST#w|EC+z0CbMj=^NtmCVqMImY6~ai#Y?%gr(6 z7`~Gg!)tSF{phLqbYtGGMbx=~D${{Y;%KoJO*njge z@pXS*z2wu_>HeRW>$>do>alV9vFMBK4PRTWj=jvW)Klg@`J6Z_iJ`PMJ61bu(t1uz z-$~9kuQ7Ip5kpcd)g#v3B6#Kc98d zw&IHUM)Al0<~uK2H}8et_ciZZH|M(e_(_{@1(j@{yyuL0`H*I|)b(>3G1&t+Uo#2@ytSmj}kwcHoUbu+L-y{p-% zqtx2!HCr3-^x?QBYc-a*{Pzy|diBlwe#emO^Lfr^?RE^@V*5jT6!~M%(tAyDsrLCg@l+uY)mcEs;lSjNEC> z)+h4RUtfXUs>9|L$FY9qqBh$rTVL9@$O8;*9Mdo7vN&R_boOKEdKGrJuIwFi=e)_) zI&l0y-}(ouF*NVif!2W&)qz`X`_m8J^50*-aiZd{8rR;><7-U%?56sfj?Z=WHG^Y) z?LmI@$MZ(|+6An`bvAY!2Rm_=3p)RAM#k5BmgZ@MuwLZk$xbJko zFh8wT_bmPC1593%;+2aWii`ar#&i4q8TTnUQ(T{a+}ob7i+=H56m`JI8q=}m>fbZ0 z3%<)9Wj@TcIePoS8Yemd5HQQLr_-{8K=~MCg zgdDZbbpLE-?u^Ilvv01s)%HJikUA!od0Rboxdf(mjPZpZ@?P{<#%IwO^YD2NvH$V@ zLS4?4`{wq1zA9eVBCd0s>%BgY$GPTj{mR-{W5mYwTr_XST}7t(Xuja%KDBw4SiKG+ zrmuF3(;h}2_J|lti?f*e^|MM3ns4hs>%fWaz&kJe*N>mr48}*7dt>#Ph77zWV0UFzq;4KLtd+^@o$E%Rx|TqJkE)Y^R!mrqb)wm zK$o7ee$~6{xl1whiGO=S{^%1ho}avN-vdiOm5Oo7C4WdCdjI}0t-;kLxy4>EByl#U zvM#O9V(72Bv^Hzo3FEjn+8@sI-23zvr@hmDSp9Y#+nVfnGxB9`qU65h^%M7z%?0~b zPvG>ru^cv6>jypOl*E#U^F?INwTSOnY#sx1J+&9$ks3Oci|x0Z8yr0PZ0uK_1O0Lt z@pkQW{fH$O=D@G>xbU}cKW6zfR_q~cjG5cg+-rM|I@VV1N!C{9UT>|o&NglxSf&H- zyynwu|E|8!mr z*7~`JtW5VTePs>&UM>4-Fl+q|G}avl>*L(SbN}X$V%&Aq=~(OG*h-9Xl=W-fy4N_i zeaXi)Ong>g&KhmpPmSH*U(MUb#W?K|F)D2ztY56f;_{sHIk4O1;5sdv&vvT~`AAJ+ zKQCKX?&o&TA7k9rNF~;kAov*`7|{sV>KG4(Z0`--)c>^K4G@#-7u2 zYm9k5>#(!dJ}%_NgMH;3QuAhS(si)7MaL3rse4i_$FZ^f8p!%{jjh!CzU8vLvHDfV ztbzQTlb3qTVdI>VxM)`l?26}}xAo~drx&VPqNJUY91*Wr*lRZW zZC7d6QO0h6vkvAg`sBT5ZYORXQet(B@Guuj`ho{KkxM@}i?83C;L#KOjOF<~hWokf zmGzDJrJU5ylZ-tNH)Ox{FWz{YwUd*1YR^JF7P`_H{j41(uIXjO#&yt~z`>kre9P)I z4_$MO5qps5kmk&_40!+jq^Msur&atU=WZ2$>pOk=xzDomHr{z1xb>yq^ZxCab-cEC zy{JU4_L@wux%}U1)$3NdQXc45JtA*-UFn$5s@#44jM;CG&%qYMyrNvae#^h=7<^F~4uP?=W|Z=3w^?eA$;M(>V^4S_}Jj=ILW1Gt|F_Hf|5B4MHRK0s0^v_R=#m#wHx93gvmF|(aUU@E{W>74g+*!#w*E%hH>2V$FS z9mqQn_n+RcF~?!_{<&LUckDG`FkxSdz0*_odLD1=T)9`{U@V`r{CigEYZ7A+N4bvt z$+b?2e0ii}-ZNr-)=r;ACHtlQF+x1zOLDaxII2VxaLs6mLD~p#oTiG%WmTwd2yV}c|623AIQF= z&!)A-8g#CE*K)-eaX(x8m~k14*NE-SrDU!j=Q_gjn`udh{V1s{)itwe6tPt1vw$b|>pHeaU8bgjn_Kf8xr^?uS-4B@a zH7rWTT&I*cOMMSuojGiGF6q&x-BZhb5cg}`8@lJxy`g(#t9pmnJYrtyHLdw=&3k3$ zVkL7#ev2MHcYhDGwZ`i&@~aLp#>UEVV3)Ale{-0ANkiQW4w4>_VELY!}|o7?ybeISMo*9q@NOp_XX-XkNYzuvEo2t zbt_Wr3in%n=I`#xLhSlbHzeQjm2atmIX4A3OhB&2SH9PEqo| zGt}Qd=1QM9A9sI(-zta3)qCO?o*G{Fj$VUfIEb;iD=+WSxwQLL<8W`1YZWP6-75ae z_@0QE%jCI?5BCUtb$_@ul=4<>tKrdnJrzAEo1(f3Bks_4%Co zWu$V&{$gG`ux>cGe#GcJ`cvO0EkEl>rR|sQlV~3wr!PMB(d5noM&>w%T@w#IV>+1p@97c9d(evZhi=MR6V=C0XXW?GS z`U>ER3i6h+Ub79yK0-%-YhQG%9B14P$-|DRgS2|hBks3%{>sP0drIqL#~O>T3zWPM z<}%tX$C&Z-{G*oxchN`xEx=>!^8OS+yKrFFY;1Yjt9ZZSo{K$n*Qj})75Bl|7(+Ol zb2^TDWXOM6o2_q%!|r|ciFv_>!{$vc>WCqZdg7Lq!rN&+Zhd4NzPB*Z;U{Bka*@IPQ5 z>IZWmhxN5%<EK+-r>?PA* zUAx%#;p=hHo`IJK_ax`5Nb)l8d0cUy#%q=NL|a-r^*J|V=lXeb;ls5ny${bf<~`eL z&-d(um;O46y=QKS%`v3nGkukg}yw< zJ!G%hB%km+j9hqVp8fj_IAXL0y)IR+*CXuqu>4lP>^R2l|NEyQ?&$CG?fS4?z8{WBo<6C(;hCnmwyhs? zm7IEUp3k}^V{$-g$2!;h_dD-=@JFnZa&kXI_Q$t=%ZxXZyOxi{>!7F1F`{?%dg*$W z_M`t^nseoI<#hd=`<}@9=IfT)xIcBhU}NsY4fzw(C$)C$SC=>CsAm)P(Yz$5-kOO+ z4#+(}VCRvJb^p>vNj@uS+o=-$>&so&+pUlEFZA1dmK9%<`Z%B$9(SLi%(3Lo^|d*$ zIFMW45%boZEnaM$&g0r2f9-qwsDhq3ihpmv2#z_jXED~H$KKt+m_H?bDJ@6T&D)o8 zJ^FabHGTL6@8fv0<(Qr=nnPTV*kg%<&%E5;pnXwZ;H~exK60IEaWog?r|UA0tB0ew zzvVH7*X>E_O}t{SMoiq3Hm=PvVu$t}YtuR{*SxXB>gHj#%8pv~x&;}nlr5EfIWXgj$#OGt?Ks%-4 z2KSk(6L`e09n*tfeR-}&o)ukEcWz&0F7b->KYq)D?`k<&1L}~|J@e>TYm>376+SXv z%jeJFA38Lr5Z^(4o*gC_k3A%ozaMFBeSYNk617U*Zht`*_b&2?jl)DLPs|gzTHe&> z_=Ic|ClbHdBa4PJJqtCmuAEEs1HDZ9mHTpTdo_9Si=IV2ByEVV^R(}<+e2`jo!c>N z$X8|R2b}0b?|csgU*aq$$KtzZ_P~qZfH}swA9awc9O57L|0+DzS2(54SUYX82k~A) zTTKc_aqnXvkT>GMPh`#A^-N=yJ%KLyl zi|qmN3u{I$(9fQH<6a*o2w;8PUb@#W_k0pSJp;>a$ADw5XSv5ock8`hatX(qEwx7W zG45B!m0ac-_c7tk+k%ZuLFOShc*Y4dZ1F&k^=m zjYBcqk18#$wk}qekL~=T8()TXUHE=0K5JP^TL;F-P0#-8*5kr;NRHSiU0=nO>mvM} z?>k)!i5&X;3$Q2zANs*Oa-5GTvD0fGdVAP;I<8-Xw@&x|to7&E=0x2(C3@s*a0!XVlVa$OeU6FAI$BM&--l3ljdZxcFbJn z;?w0g=$NyQ=RSYQarqor9Q4iY z7yaWkdyfCg@8)X3m+M-9mQdK-`*Nz$vXAxN)bCOBsqqcz5JS$e_Qd+!{WBfcWB9Wo z_`*-6-mk6B8BV|t_8vXblh?E6YE!EBLi+>X{HW=2jGYU<Ks$6VDLVt>*Isob0vFjY;HAflOx}225!OIvF~r$ z*P(oA%VS$^V)~?DS$DOMVlQ5Y$ffnE9X$3Z=fkzJ&xj{yXSpy2pW57grm#nhUPG8K zd(`6hacNGrhxPkl?$3HlecH#|p3mbRb8+$B52sr*8$)!?)#7t5%z;x(na9l^dqd4- zC7s0UV$8+Yjy1BrzGTE6t~X#buIrh3EpfSYYS&!I?|mSAf1EFP<~{=;H=d4Q3w~(4 z^qNDiL!sf5A3eG*$Jx2~_|IwBL+ugbbN>OKbDwg@z0h?Lmwv98#qd4Vb+EQ|jFCsq z!|Oux(>2X8n8TjyMVG6pbGzTF08tWSCCBj5KDxeC^8gn4Fej1Kd%WleKa=UpPjiTz zFy*Enf|%yUp3ddNOf z#R$VLpLkL~Y;#XbxB&h`MgM&IT3nL*gW#gT_9w zU-3S6{Kgl|VO!qp<6@5$&x2~yd}L$h|VU&u#J+;^5uqwo_hvzK+v zxK#q z2Sqv__Zmnd$zg5}h}Brg-R(OUS8J*FMDg|e0&O;T&!605eJs3wum=*~y`BJ`9HI|% zjO{!avVmaczBZ)w_Sch9yQ%s{A6swajq44k+=slj9{SR@iqu~58rJ*TB7C)cE4g+x z&I+yuTS%AIqkEMEhhF}n4UBDE+N|{b#a@&%t{*WPBd#0qv{N$9DWa(H5Vx$fdFZ&7 zYpG*A%{#q*J!iNtum<{A$(l~NNDn^yePt_9XX-Ge%t#AWZO8!P)c(F^6xxuC}(vbVprUio^GYna^3ADkY?dwAE+Rqi$Njg?xX zt2JCxHDA_Tvr(7lsoc75)+T!21Fl=SuG)j;>*MR1=D;|0KEZUT!RE-CYI@Dzy=I5? z*Ep_Lu3xa_TzzpgR@n>cH7@t%a7}5<^14jzXorSx@oVn$(V4FSpUv7gGTeuc6=be04@>Hx4RRj0_;waQoBjAP%(WKOGk=YM8GHDA%o@1+N0`@m)aSl?4!!-N zH{^DS9j+@Gcex#N(T96)&F(RMrmCJf`Fcza$^8&(Gpe>~kc!gs$r!bDURKaib?Zxh zYA*YS7SnR+vk1YwNwzxIVAG5^RZ*r=B2B3$ahSA!iDR|U$c6z&pCbl zxq9I_^U3O%%L9Dh!TdAsVxP^cL3n!a8+q)Qf4TNKwl)`km!HomTrb437R-sIttN*s zG1vYcYMlDoGoH`YKg)B!#QTkMxce_%dZn$e59IR>_bSY5hv>uprQPSsX(DN34x9r7 zE(<2c>W0Si@V+L*!P(i^Ij`Ev`;+(a?;~C9elL}MAm_Zih#Mn)?zorxI{L4HTHIK- z?l5X5Z@<-v-kRsdB?bx$L2%5=wy#EUso^JPGrebtAkv*6#tGo87FyzyT%WE zEk?`{elAb$4e%t~eH_fiO7ZP*Qa647`@fT8NaV=V>g~9eull+?aSew(rFzHNSq_d7 zYn6k!MmcVe)oSp4_V3kQE$Bsu{FGn!i_N#jW9_xE;c~n=M(oAwS1nGOZ@33_g zYx`yKzI(1}&SeedI(UD{4}EmK^m|(8ImhgQj~Nv!_rpBqx;L0bS6nxW?aNj5%$G!% zk3ATZKFn*3zhFDy;CtvlpLh&o9Lf=Urun6>cZwU%Q+SGf<^qHm=^lys#QTTFj=5NW z%|Y)srv9)7)X`^*)Y{X$`uuAA@W&DJ=6is0Z{+^@ygx4PcY9roK1{Cfu)W!d_?DB!w1~- zE#>?@B>tU^hcWnv4#puy^U&*qW7vqB$EVm@9=tb|uh-;e4puS;*2cNUiP!P;^}n}a z{p?tL-98|P`li

Ke`?#Vbc#Gt14`;3ST^K3VfuU)^t-pZ2bwBd%MHVQrM9y}VW= zX1MoR{3&;J`zm>6vUZHEFV`%}^crGLsBzIlIphA!{ngHEjQ1k;G~Sb#L++1x&Bpbx zc#HG)PUG9Xzt_1~tmWWX{5y^zm8XCG8Hcwo;DPR+?o%2${4B4WAx1# zkM_K7jpeR0>80*R>w`LL2eGutJk%IDHD{ftcKSsu--o&P3b(NrV{)-v9Mi9szv$dE zJ+YMP<9fl*CU6agJ!W%)59jpHrTB*HoB3Fb^`Cw8ONEcITo0Iok55~A4t{%a`Df%AHNKI6K4{r<8!X?-@f<>Od#O|JPo zmd?|?ruD~ro32lslY_C@56|VUC((uL3i|w@uhlayb>P+0*6sS?AmpH=U!Nqu=j~=6 z`H%MjEA!4v2zPj_yS|~A9{(%1M+EEZi}y|SsQ!~cbek(0J3@KN%zfq(Z(os zwYro8*x8GpvOzvb%b)5sf5o`|IWuC@2YftKALrDMky-=$#y+xtY5m}nSiPS$Y1QD2{&E1#3w=ifQ*yK-O0{3Vuuy`_#4wdy$M&gaONhsKM0lyhs3agz&D z`!+vk=9K?ky^R(5Vr@1S$KunOu^TEs`l|h=opLBo%V+TzN8b1xPK?^;_mgjo`ocSm|t|#*%mi&Sb_j}qXEmzJLG4WcZj#B(Pj4co25@Y4C zt+qaCf5>Hdm;-H)Wj=a6cw6!sZ@Ij^gXB@+q6u-jFp&YU;Nv0lf!?QkM)L^$bUEg^ z8Q!FZsMobhbBH?0C;0VolZz5H;mGlrKkS#j;&{#G9I_wanf~{ijzKa%8OuE|-Cy}U zqjA%ilX68q*VEARJ}&V$eTe%m&CRZ3nq!`m_;ps7^Q7^HxySSUUd*2uU6cOn!g64YL*n2$o8!O1If+ZUua_el++JN#-z-#62s+5eU8iL#6gz5 zw0qaSKE&4n>)$uloYHFqI^u_NB8Cz<+C%28p})xR`aUKw>JuOR-M@E`dDrLL$1nQeg7nfVW&@e25X>;&Yr8xWay2lw%RR?I-=l^h_`;dk_Am zW9YD0;`DQl;b%TznN#$`b-9<*s?2>X2)0^2z}UL`IQsSF{l#L*Ez*5vVsomEiT8Oq zh}F?YbR1S??qhSJLrn);?n}JdTp#82JiRB*%csI&Rbf2DBeu$W#F$54JtQBpTiZKc zaf~iO_SI|sfU)!7oDFIi=xX}R)nP1-c~Jr{<2@Tc`jwZIzVW)V96642;Yps`sE6G6 zf;-;{vc{9^Fwb@H?K>o{y9d&5o-gf`uG2_NL~aa|0th9kIDY@1SE2xqZxh z5nsjj-xF-E$gPhXIE!VT#6$KS^ivL9^C3KVhU~&)UeEjE=J_y>T)(cl@E7|B+(Wet z#a_m586TU&D*lW3E`nXAheQ0j57XCYi?{pB_9h=&AI&l4%<+m@WWUz2{rhb2IuF;( zP#);bB6;U{nb+KduEf`C3=T37pCotKZ0~c<)Hmg~eio;kv3AC!B(~4LFNZ!n`A(#i zoU8Y%6PeT4*!jAQ^;;KicJ}SZ*2Q%)@YJpk=;p0s&Cm90p1;NBWAP2|sdL+QnNQ#O z?HkNxv+gD9>T%99ufJk1?(3{|r^tCV%(Jh%&Q;^B>OZy~iL+_f-YPZJuCdklwswy% zldJe7&jB)DXl<5>Y4?fvcXr-49*d(t@{-g1zHZ^V7U~1zE-RO)uUj_Okl(V`0D5hC zYdqGz%y=y4yk3gkz4p}j=K1D%*ElRD=VNS(+3ay&Oq;u4iuI%2+GN}@U)T)>*IRf^ zkNWr?O!4|R`rt_M@x3E?BR=wazs^etmxIU3Gi4gj0Sv~@F{WSCYaXgceQ95ePx3iv zUW?2nmsl(PRPy)xjz7EqYW^|4!!W%hU*UIi8f`7G@gNuGx!&qF9{wH2fTd2bmGw+{ ziFHo$!}>=Zdph4&V!C~p=2?E`%s4Sd$h($vM;xW_cdXBHMIG$A{-R?};d_JNp`XP8 z>*vlt#ktobZwGhWtIUgdr=~c~i(`!&>#T7xH`pSt=A`p@-Ie}vk6T|y z)bm5)x%Jri%8zf*$3pS%j^hB1IqBS~-H%l7dK--5=P|n0wVVax_c&{g_b3uEM&u(l z_6AtwsWR$ChxIo5&icl@tY3^rZ0T?D81ta-&>T6@4r%*BeXh%SiL1$+9~kQ|_Tn|S z#$$E1hpAqBM4gR8T}}4!)vz_)s{S?3&C=z$+PUo)$Fy@^%Zr%YR`apC+TZ`=f6E}; z39a>q!Or`}Id0yZJXT5`o%KV_(H^h$6yxr(;hqxldQZsbx$n>%HXMB%(CZmq$>Mi{m)Q=P`++jQ6j&zv<(+SchL5`dK;D6N|%`HM6g^b#OQzH}@Z! z=iEcs_1NP5B|a<0_0D53zg*uxxAzi_)sKzqw+>8vuj1=jU=K3>qV+C{XB_@{dd0BtvT;>EE z{U}+JN?RZNZT};$`dVyhv-})WGGESBf+OXmKE<(ym>cc3K8|x6=J~M~$G!vm4xWGZ zfpgD3XU_%gXdP%BXdP%BXdP%BXdP%BXdP%BXdP%BXdP%BXdP%BXdP%BXdP%BXdP%B zXdP%BXdP%BXdP%BXdP%BXdP%BXdP%B*t8D3`;5t+cD5e0J<#?*+XHP6v^~)FK-&Xt z541hd_CVVMZ4d1BJ&=EYrOjIhS_gJc2h8`)&fT~FK>NPgrhQV_h+79*2U-VO2U-VO z2U-VO2U-VO2U-VO2U-VO2U-VO2U-VO2U-VO2U-VO2U-VO2U-VqQwI+0+kfz^ednKb z_Wp|xoPFUr`!3uk|IDRToqKLj32^_#`}SS9Kcc8QP@)VMQ3cojl578k1=oI?mvZgD zu;4mSavdnS4wPI6O0Kg@uCq(7q+goX*(KLGCD%D6*EwZg=agLMmR#qST<4Zt=ayXO zm0ahQT<4Ws=apRNmt5zUT<4cu=a*auORj?@*TItOV99ks$#p@=bwSB>LBS=PKHv8; z&-bdR@_jF=e6Q{=_r0hJu5#ZCs^BX3{r+;_i>k=0-1qy-eJ`pauX5iDs>rL{_xsCz zFRCK1a^LSS_r0i!yvltqs3Na&-|sK?y{L-3%6-4T-1nj?@+$Yepo+Z8eZRll_o6ED zD);^Va^H)p$gAA*xLCOEgDdD%lhG`Zm~uXXask6k&z3ETy*cyDro11I$0CFf}`d*DU?XX8tp z{_F1lgHBHzeXNAPom(#GF~7_2zce|i^RW=`qCfq)Z*~%6GY@`(4P5jGFUC9>2Xn@z zZJq=k_2NXoIJSKgOxu^~zHI$y{b+lj?Sb9C2QKJ-Y7frI{%?HsWcI$ZClCLRKbw5- zv3pG3_4w;1?|Ik9CdaS-fyvvy=5>>wdgaR|KYr>PCvW}rU!A=2&whIHBR9Na@&nKN zqRDr?ec$BypZ^V$=ilwFljr}J2TzXv-n}N*Klpi*7ku+uCx@^5kI8d>_L9jnZvE)w zG5`LM$yfd9-6k)Yy>jw>$38u|=1bo@x&GyUJ$b?R9-UnGuoq0O|A`Mzu7BH4POkr@ zw@2c9+*po^tq)Cs$qY)XDR1=q6Wu|7#}C{Pevh&-~}< z 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

n$Lv{{hB5E7)Lyjhz1 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

_0aYC- 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 UbU+81*MS*~y!Z$L1TqQy00HFSH2?qr literal 0 HcmV?d00001 diff --git a/test/input/yaml/Florence_Benchmark_da.yaml b/test/input/yaml/Florence_Benchmark_da.yaml new file mode 100644 index 000000000..72107b70a --- /dev/null +++ b/test/input/yaml/Florence_Benchmark_da.yaml @@ -0,0 +1,131 @@ +--- +#initial input parameters +run_parameters: + parallel_compute_method: by-subnetwork-jit-clustered # OPTIONS: , "by-network", "by-subnetwork-jit", "by-subnetwork-jit-clustered" + subnetwork_target_size: 100 # by-subnetwork* requires a value here to identify the target subnetwork size. + cpu_pool: 8 + #verbose: true # verbose output (leave blank for quiet output.) + #showtiming: true # set the showtiming (omit flag for no timing information.) + #debuglevel: 1 # set the debuglevel for additional console output. + # break_network_at_waterbodies: true # replace waterbodies in the route-link dataset with segments representing the reservoir and calculate to divide the computation (leave blank for no splitting.) + # WARNING: `break_network_at_waterbodies: true` will only work if compute_method is set to "V02-structured-obj" and parallel_compute_method is unset (serial execution) or set to "by-network". + break_network_at_gages: true # Ensures gages are in a reach by themselves. + # compute_method: V02-structured-obj # OPTIONS: "V02-caching", "V02-structured-obj", "V02-structured" + assume_short_ts: true # use the previous timestep value for both current and previous flow. + qts_subdivisions: 12 # number of timesteps per forcing (qlateral) timestep. + dt: 300 # default timestep length, seconds + nts: 85 # number of timesteps to simulate. If used with ql_file or ql_folder, nts must be less than the number of ql inputs x qts_subdivisions. + # nts: 288 # number of timesteps to simulate. If used with ql_file or ql_folder, nts must be less than the number of ql inputs x qts_subdivisions. + return_courant: false # WARNING: true will only work with compute_method "V02-caching", therefore not currently compatible with simulation for waterbodies. +#output file parameters +output_parameters: {} +#data column assignment inside supernetwork_parameters +supernetwork_parameters: + title_string: "Florence_FullRes" + geo_file_path: "../../test/input/florence_fullres/florenceNudgingChannelOnly/DOMAIN/Route_Link.nc" + mask_file_path: "../../test/input/florence_fullres/florenceNudgingChannelOnly/florence_fullres_mask_tw10975909_gage8777381.txt" + # mask_file_path: "../../test/input/florence_fullres/florenceNudgingChannelOnly/florence_fullres_mask_tw8777381_gage8777381.txt" + # mask_file_path: "../../test/input/florence_fullres/florenceNudgingChannelOnly/florence_fullres_mask_tw8777535_gage8777381.txt" + mask_layer_string: "" + mask_driver_string: "csv" + mask_key: 0 + columns: + key: "link" + downstream: "to" + dx: "Length" + n: "n" # TODO: rename to `manningn` + ncc: "nCC" # TODO: rename to `mannningncc` + s0: "So" # TODO: rename to `bedslope` + bw: "BtmWdth" # TODO: rename to `bottomwidth` + waterbody: "NHDWaterbodyComID" + gages: "gages" + tw: "TopWdth" # TODO: rename to `topwidth` + twcc: "TopWdthCC" # TODO: rename to `topwidthcc` + alt: "alt" + musk: "MusK" + musx: "MusX" + cs: "ChSlp" # TODO: rename to `sideslope` + waterbody_null_code: -9999 + terminal_code: 0 + driver_string: NetCDF + layer_string: 0 + +#waterbody parameters and assignments from lake parm file +waterbody_parameters: + level_pool: + #WRF-Hydro lake parm file + level_pool_waterbody_parameter_file_path: "../../test/input/florence_fullres/florenceNudgingChannelOnly/DOMAIN/LAKEPARM.nc" + level_pool_waterbody_id: lake_id + level_pool_waterbody_area: LkArea + level_pool_weir_elevation: WeirE + level_pool_waterbody_max_elevation: LkMxE + level_pool_outfall_weir_coefficient: WeirC + level_pool_outfall_weir_length: WeirL + level_pool_overall_dam_length: DamL + level_pool_orifice_elevation: OrificeE + level_pool_orifice_coefficient: OrificeC + level_pool_orifice_area: OrificeA +#WRF-Hydro output file +forcing_parameters: + qlat_input_folder: "../../test/input/florence_fullres/florenceNudgingChannelOnly/CHRTOUT/" + qlat_file_pattern_filter: "201809180[1-8]*.CHRTOUT_DOMAIN1" + # qlat_input_file: "florence_qlat_test.csv.hourly" + qlat_file_index_col: feature_id + qlat_file_value_col: q_lateral +#WRF-Hydro restart files +restart_parameters: + #WRF-Hydro channels restart file + wrf_hydro_channel_restart_file: "../../test/input/florence_fullres/florenceNudgingChannelOnly/HYDRO_RST/HYDRO_RST.2018-09-18_00:00_DOMAIN1" + # wrf_hydro_channel_restart_file: "../../test/input/florence_fullres/florenceNudgingChannelOnly/RESTART_open-loop/HYDRO_RST.2018-09-10_00:00_DOMAIN1" + #WRF-Hydro channels ID crosswalk file + # florence_testcase/florence_933020089/DOMAIN + wrf_hydro_channel_ID_crosswalk_file: "../../test/input/florence_fullres/florenceNudgingChannelOnly/DOMAIN/Route_Link.nc" + wrf_hydro_channel_ID_crosswalk_file_field_name: link + wrf_hydro_channel_restart_upstream_flow_field_name: qlink1 + wrf_hydro_channel_restart_downstream_flow_field_name: qlink2 + wrf_hydro_channel_restart_depth_flow_field_name: hlink + #WRF-Hydro waterbodies restart file + wrf_hydro_waterbody_restart_file: "../../test/input/florence_fullres/florenceNudgingChannelOnly/HYDRO_RST/HYDRO_RST.2018-09-18_00:00_DOMAIN1" + # #WRF-Hydro waterbody ID crosswalk file + wrf_hydro_waterbody_ID_crosswalk_file: "../../test/input/florence_fullres/florenceNudgingChannelOnly/DOMAIN/LAKEPARM.nc" + wrf_hydro_waterbody_ID_crosswalk_file_field_name: lake_id + # #WRF-Hydro waterbody crosswalk filter file + wrf_hydro_waterbody_crosswalk_filter_file: "../../test/input/florence_933020089/DOMAIN/Route_Link.nc" + wrf_hydro_waterbody_crosswalk_filter_file_field_name: NHDWaterbodyComID +#WRF-Hydro data assimilation files +data_assimilation_parameters: + # florence_testcase/florence_933020089/DOMAIN + data_assimilation_timeslices_folder: "../../test/input/florence_fullres/florenceNudgingChannelOnly/nudgingTimeSliceObs_calibration" + data_assimilation_filter: "2018-09-18_0[0-9]*.usgsTimeSlice.ncdf" + wrf_hydro_da_channel_ID_crosswalk_file: "../../test/input/florence_933020089/DOMAIN/Route_Link.nc" + # wrf_hydro_last_obs_file: "../../test/input/florence_fullres/florenceNudgingChannelOnly/nudgingLastObs/nudgingLastObs.2018-09-18_00:00:00.nc" + wrf_last_obs_type: "obs-based" + # 2018-12-31_23:45:00.15min.usgsTimeSlice.ncdf + # data_assimilation_csv: "../../test/input/geo/usgs_files/usgs_files.csv" + # florence_testcase/florenceNudgingChannelOnly/FORCING_AnA_channel-only/24timeslices +parity_parameters: + # florence_testcase/florenceNudgingChannelOnly/CHRTOUT + parity_check_input_folder: "../../test/input/florence_fullres/florenceNudgingChannelOnly/CHRTOUT/" + # parity_check_input_folder: "../../test/input/florence_fullres/florenceNudgingChannelOnly/FORCING_AnA_channel-only/" + parity_check_file_pattern_filter: "201809180[1-8]*.CHRTOUT_DOMAIN1" + # parity_check_file: "florence_streamflow_test.csv.hourly" + parity_check_file_index_col: feature_id + parity_check_file_value_col: streamflow + # parity_check_compare_node: 933020089 # contains only Nan in WRF simulations including waterbodies + # parity_check_compare_node: 8835386 + parity_check_compare_node: 10975909 + # parity_check_compare_node: 8778771 # Headwater + # parity_check_compare_node: 8778459 # Midwater + # parity_check_compare_node: 8778201 # Midwater + # parity_check_compare_node: 8777277 # Just above gage + # parity_check_compare_node: 8777275 # Just above gage + # parity_check_compare_node: 8777381 # At gage + # parity_check_compare_node: 8777409 # Just above 8777353 + # parity_check_compare_node: 8777353 # Just above 8777387 -- next upstreams [8777369, 8777409] + # parity_check_compare_node: 8777351 # Just above 8777387 + # parity_check_compare_node: 8777451 # Just above 8777387 -- next upstreams [8777455, 8777489] + # parity_check_compare_node: 8777387 # Just above 8777383 -- next upstreams [8777351, 8777353] + # parity_check_compare_node: 8777383 # Below gage + # parity_check_compare_node: 8777419 # Below gage + # parity_check_compare_node: 8777523 # Below gage + # parity_check_compare_node: 8777535 # Below gage