From 59f2b5073bd552b11441bfa371c4cbe68a56136f Mon Sep 17 00:00:00 2001 From: kumdonoaa <54687070+kumdonoaa@users.noreply.github.com> Date: Wed, 6 Dec 2023 09:29:18 -0600 Subject: [PATCH] add LastObs reading and writing for command-line run of main_V04 with HYfeature hydrofabric (#701) * add LastObs reading and writing by command-line run main_V04 with HYfeature * add lastobs folder and files * add wrf_hydro_lastobs_file parameter in test_AnA_V4_NHD.yaml and modified related files * Delete src/troute-routing/troute/routing/compute.py nothing changed. * mistakenly removed compute.py * refreshed compute.py * no change for __main.py__ * add lite_restart_output_directory * remove space in __main__.py * deleted one lastobs file * remove one lastobs file again * remove lastobos_output_folder in compute_parameters and update yaml file * remove commented lines * remove unused lastobs file * remove lastobs_output_folder parameter in config * remove wrf_hydro_last_obs file in both config and DataAssimilation.py * remove wrf_hydro_lastobs_file in compute_parameters.py and undo change in __main__.py --- .../troute/config/compute_parameters.py | 3 - .../troute/config/output_parameters.py | 3 + src/troute-network/troute/DataAssimilation.py | 108 +++++++++++++++--- src/troute-nwm/src/nwm_routing/__main__.py | 2 +- src/troute-nwm/src/nwm_routing/output.py | 11 +- src/troute_model.py | 2 +- .../nudgingLastObs.2021-08-23_14:00:00.nc | Bin 0 -> 13097 bytes test/LowerColorado_TX/test_AnA.yaml | 3 +- test/LowerColorado_TX/test_AnA_V4_NHD.yaml | 3 +- .../nudgingLastObs.2023-04-02_00:00:00.nc | Bin 0 -> 11049 bytes .../test_AnA_V4_HYFeature.yaml | 26 +++-- .../test_AnA_V4_HYFeature_noDA.yaml | 4 +- 12 files changed, 123 insertions(+), 42 deletions(-) create mode 100644 test/LowerColorado_TX/lastobs/nudgingLastObs.2021-08-23_14:00:00.nc create mode 100644 test/LowerColorado_TX_v4/lastobs/nudgingLastObs.2023-04-02_00:00:00.nc diff --git a/src/troute-config/troute/config/compute_parameters.py b/src/troute-config/troute/config/compute_parameters.py index 19a1a6e3a..48a232428 100644 --- a/src/troute-config/troute/config/compute_parameters.py +++ b/src/troute-config/troute/config/compute_parameters.py @@ -120,9 +120,6 @@ class StreamflowDA(BaseModel, extra='forbid'): # Need to update this in t-route as well. lastobs_file: Optional[FilePath] = None - # NOTE: required if lastobs are to be written out during and after simulations - lastobs_output_folder: Optional[DirectoryPath] = None - # TODO: missing from `v3_doc.yaml` # see troute/DataAssimilation.py :57 # see troute/nhd_network_utilities_v02.py :765 diff --git a/src/troute-config/troute/config/output_parameters.py b/src/troute-config/troute/config/output_parameters.py index 369c60356..b13d00edb 100644 --- a/src/troute-config/troute/config/output_parameters.py +++ b/src/troute-config/troute/config/output_parameters.py @@ -28,6 +28,8 @@ class OutputParameters(BaseModel, extra='forbid'): # see nwm_routing/output.py :114 test_output: Optional[FilePath] = None stream_output: Optional["StreamOutput"] = None + # NOTE: mandatory if writing results to lastobs + lastobs_output: Optional[DirectoryPath] = None class ChanobsOutput(BaseModel, extra='forbid'): # NOTE: required if writing chanobs files @@ -89,6 +91,7 @@ def validate_stream_output_internal_frequency(cls, value, values): if value / 60 > values['stream_output_time']: raise ValueError("stream_output_internal_frequency should be less than or equal to stream_output_time in minutes.") return value + OutputParameters.update_forward_refs() WrfHydroParityCheck.update_forward_refs() diff --git a/src/troute-network/troute/DataAssimilation.py b/src/troute-network/troute/DataAssimilation.py index 92fe0c255..1547b3c21 100644 --- a/src/troute-network/troute/DataAssimilation.py +++ b/src/troute-network/troute/DataAssimilation.py @@ -94,7 +94,7 @@ def __init__(self, network, from_files, value_dict, da_run=[]): self._last_obs_df = pd.DataFrame() self._usgs_df = pd.DataFrame() - + usgs_df = pd.DataFrame() # If streamflow nudging is turned on, create lastobs_df and usgs_df: @@ -172,21 +172,42 @@ def __init__(self, network, from_files, value_dict, da_run=[]): self._last_obs_df = _reindex_link_to_lake_id(lastobs_df, network.link_lake_crosswalk) else: - - lastobs_file = streamflow_da_parameters.get("wrf_hydro_lastobs_file", None) + #TODO: Is it a sustainable to figure out if using NHD or HYfeature based on lastobs_crosswalk_file? lastobs_crosswalk_file = streamflow_da_parameters.get("gage_segID_crosswalk_file", None) - lastobs_start = streamflow_da_parameters.get("wrf_hydro_lastobs_lead_time_relative_to_simulation_start_time", 0) - - if lastobs_file: - self._last_obs_df = build_lastobs_df( - lastobs_file, - lastobs_crosswalk_file, - lastobs_start, - ) - + if lastobs_crosswalk_file: + # lastobs Dataframe for NHD Hydrofabric + lastobs_file = streamflow_da_parameters.get("lastobs_file", None) + lastobs_crosswalk_file = streamflow_da_parameters.get("gage_segID_crosswalk_file", None) + lastobs_start = streamflow_da_parameters.get("wrf_hydro_lastobs_lead_time_relative_to_simulation_start_time", 0) + + if lastobs_file: + self._last_obs_df = build_lastobs_df( + lastobs_file, + lastobs_crosswalk_file, + lastobs_start, + ) + else: + # lastobs Dataframe for HYfeature HYdrofabric + lastobs_file = data_assimilation_parameters.get('streamflow_da', {}).get('lastobs_file', False) + if lastobs_file: + lastobs_df = _read_lastobs_file(lastobs_file) + lastobs_df = lastobs_df.set_index('gages') + link_gage_df = network.link_gage_df.reset_index().set_index('gages') + col_name = link_gage_df.columns[0] + link_gage_df[col_name] = link_gage_df[col_name].astype(int) + gages_dict = link_gage_df.to_dict().get(col_name) + lastobs_df = lastobs_df.rename(index=gages_dict) + # remove 'nan' values from index + temp_df = lastobs_df.reset_index() + temp_df = temp_df[temp_df['gages']!='nan'] + temp_df['gages'] = temp_df['gages'].astype(int) + lastobs_df = temp_df.set_index('gages').dropna() + self._last_obs_df = lastobs_df + # replace link ids with lake ids, for gages at waterbody outlets, # otherwise, gage data will not be assimilated at waterbody outlet - # segments. + # segments because connections dic has replaced all link ids within + # waterbodies with related lake ids. if network.link_lake_crosswalk: self._last_obs_df = _reindex_link_to_lake_id(self._last_obs_df, network.link_lake_crosswalk) @@ -217,7 +238,7 @@ def update_after_compute(self, run_results, time_increment): - lastobs_df (DataFrame): Last gage observations data for DA ''' streamflow_da_parameters = self._data_assimilation_parameters.get('streamflow_da', None) - + if streamflow_da_parameters: if streamflow_da_parameters.get('streamflow_nudging', False): self._last_obs_df = new_lastobs(run_results, time_increment) @@ -936,7 +957,7 @@ def _create_usgs_df(data_assimilation_parameters, streamflow_da_parameters, run_ - usgs_df (DataFrame): dataframe of USGS gage observations ''' usgs_timeslices_folder = data_assimilation_parameters.get("usgs_timeslices_folder", None) - lastobs_file = streamflow_da_parameters.get("wrf_hydro_lastobs_file", None) + #lastobs_file = streamflow_da_parameters.get("wrf_hydro_lastobs_file", None) lastobs_start = data_assimilation_parameters.get("wrf_hydro_lastobs_lead_time_relative_to_simulation_start_time",0) lastobs_type = data_assimilation_parameters.get("wrf_lastobs_type", "error-based") crosswalk_file = streamflow_da_parameters.get("gage_segID_crosswalk_file", None) @@ -1714,3 +1735,60 @@ def assemble_rfc_dataframes(rfc_timeseries_df, rfc_lake_gage_crosswalk, t0, rfc_ reservoir_rfc_param_df['rfc_persist_days'] = rfc_parameters.get('reservoir_rfc_forecast_persist_days', 11) return reservoir_rfc_df, reservoir_rfc_param_df + +def _read_lastobs_file( + lastobsfile, + station_id = "stationId", + ref_t_attr_id = "modelTimeAtOutput", + time_idx_id = "timeInd", + obs_discharge_id = "discharge", + discharge_nan = -9999.0, + time_shift = 0, + ): + with xr.open_dataset(lastobsfile) as ds: + gages = ds[station_id].values + + ref_time = datetime.strptime(ds.attrs[ref_t_attr_id], "%Y-%m-%d_%H:%M:%S") + + last_ts = ds[time_idx_id].values[-1] + + df_discharge = ( + ds[obs_discharge_id].to_dataframe(). # discharge to MultiIndex DF + replace(to_replace = discharge_nan, value = np.nan). # replace null values with nan + unstack(level = 0) # unstack to single Index (timeInd) + ) + + last_obs_index = ( + df_discharge. + apply(pd.Series.last_valid_index). # index of last non-nan value, each gage + to_numpy() # to numpy array + ) + last_obs_index = np.nan_to_num(last_obs_index, nan = last_ts).astype(int) + + last_observations = [] + lastobs_times = [] + for i, idx in enumerate(last_obs_index): + last_observations.append(df_discharge.iloc[idx,i]) + lastobs_times.append(ds.time.values[i, idx].decode('utf-8')) + + last_observations = np.array(last_observations) + lastobs_times = pd.to_datetime( + np.array(lastobs_times), + format="%Y-%m-%d_%H:%M:%S", + errors = 'coerce' + ) + + lastobs_times = (lastobs_times - ref_time).total_seconds() + lastobs_times = lastobs_times - time_shift + + data_var_dict = { + 'gages' : gages, + 'time_since_lastobs' : lastobs_times, + 'lastobs_discharge' : last_observations + } + + lastobs_df = pd.DataFrame(data = data_var_dict) + lastobs_df['gages'] = lastobs_df['gages'].str.decode('utf-8') + + return lastobs_df + diff --git a/src/troute-nwm/src/nwm_routing/__main__.py b/src/troute-nwm/src/nwm_routing/__main__.py index 789d5323f..69f86fd70 100644 --- a/src/troute-nwm/src/nwm_routing/__main__.py +++ b/src/troute-nwm/src/nwm_routing/__main__.py @@ -223,7 +223,7 @@ def main_v04(argv): network._waterbody_df, t0 + timedelta(seconds = dt * nts), output_parameters['lite_restart'] - ) + ) # Prepare input forcing for next time loop simulation when mutiple time loops are presented. if run_set_iterator < len(run_sets) - 1: diff --git a/src/troute-nwm/src/nwm_routing/output.py b/src/troute-nwm/src/nwm_routing/output.py index c8cdb7109..c5c4a10be 100644 --- a/src/troute-nwm/src/nwm_routing/output.py +++ b/src/troute-nwm/src/nwm_routing/output.py @@ -115,6 +115,7 @@ def nwm_output_generator( chano = output_parameters.get("chanobs_output", None) wbdyo = output_parameters.get("lakeout_output", None) stream_output = output_parameters.get("stream_output", None) + lastobso = output_parameters.get("lastobs_output", None) if csv_output: csv_output_folder = output_parameters["csv_output"].get( @@ -360,16 +361,17 @@ def nwm_output_generator( LOG.debug("writing flow data to CHANOBS took %s seconds." % (time.time() - start)) - # Write out LastObs as netcdf. + if lastobso: + # Write out LastObs as netcdf when using main_v04 or troute_model with HYfeature. # This is only needed if 1) streamflow nudging is ON and 2) a lastobs output # folder is provided by the user. + start = time.time() lastobs_output_folder = None nudging_true = None streamflow_da = data_assimilation_parameters.get('streamflow_da', None) if streamflow_da: - lastobs_output_folder = streamflow_da.get( - "lastobs_output_folder", None - ) + lastobs_output_folder = output_parameters.get("lastobs_output", None) + nudging_true = streamflow_da.get('streamflow_nudging', None) if nudging_true and lastobs_output_folder: @@ -388,6 +390,7 @@ def nwm_output_generator( LOG.debug("writing lastobs files took %s seconds." % (time.time() - start)) + if 'flowveldepth' in locals(): LOG.debug(flowveldepth) diff --git a/src/troute_model.py b/src/troute_model.py index 0c0bb0d18..d6c43bcd7 100644 --- a/src/troute_model.py +++ b/src/troute_model.py @@ -96,7 +96,7 @@ def preprocess_static_vars(self, values: dict): compute_parameters=self._compute_parameters, hybrid_parameters=self._hybrid_parameters, preprocessing_parameters=self._preprocessing_parameters, - output_parameters = self._output_parameters, + output_parameters=self._output_parameters, from_files=False, value_dict=values, bmi_parameters=self._bmi_parameters,) diff --git a/test/LowerColorado_TX/lastobs/nudgingLastObs.2021-08-23_14:00:00.nc b/test/LowerColorado_TX/lastobs/nudgingLastObs.2021-08-23_14:00:00.nc new file mode 100644 index 0000000000000000000000000000000000000000..1831fc1e7dba39cf1dd3cdf46bd54c7b51e32bdd GIT binary patch literal 13097 zcmeGj3yf6N^}e0iWp;NERFF?eoE9xm+3ow!d$T(~W_Q^w>n^Z_v{5?DGJ}j+W^s2G zLX2H$F%3o&0ZXD{BbKz1YHQonXq#BmkMm#J>k)Eu3Q{0_2hd>`8A^9 zTxOML0-R)pAZ0SL_tZ=KPcv0#Z&Z|pP^2ilX|JF~7?=kdUiryuMdJur5F!i4DOG(4 zYU=9hSVQPBNN&)1^Rt2r+NEJ?yQn~_kOpR#OmBK%fZ|{WP=U)tNJr0&oqYp6{e9Vi zOuDy|gf~N-Lh4zozVwZql$f5I5@*L=40rz7(k)Hecv&6CZSU_GGh6_@$K65viqSxgWd3?C6gH>_-k(D^|An4Szqe;#10jn*8v0v6f6x#^7L*tv zNZrjNM5c`w2Oq9F^Tz1vOn)ykH!!3Rd#6wcL@fb-=gPU!0$$Ketr?z5RPGoADSly3)pEi$!W8E*h3hy6JgFe6j1L}rc`KA`I@olW zY4ENf6>6Jp0eH)w8ABuIIXTa^N{w46lK+8@Qr@Yqe}&X6?xEj>1T} z$WFW9v~4NnrJn5WUNZo2}7SbLF=DRx7TxYI>`>^1-pq1=Z2CsOwsy zH$YuW74{|+)m0hQRH@dmEibX*$hD4CYszhHN?q+&kIJ=_legBPjXlJ!;YAHuNJFK( zs>FsSwKWXgE0tkL3L3JIhA9(MS}$k229;UavKX>PrYxkXORP*;D$}4nRW&kAsUy>r zYh@v!(%V+Hvq@d#t#w^53Yb~SHDvdb(-HN0&d)s#?KW=9&{mLvJda%6oSNAB0r z43Er?qemrFvW7!hduv_229?^nQEx5viG<23$V-8(N_Mto@7waqV9VaO=`_NQgseXB zE#O<=|7?NE1)l?gC;=Wm;DsIr6A)a$GgbNdUik3~wx>jhbBHrNpNt}UB?h6*^sf8x z0t+GVg3B(3i(9X|7NuW>AgqBU1Smng44YM^c{DWJ2rq}Y24S(GtOi!_a6`S>_MdgY z1n)J;a$b8>T#1Eu03}4>ALq^w#YPBy;hi7coq2JHz`Z!!m7V_lsa0O7FsVl6LX+@i z^=*LBGgXW|_^p8Wy6yjX60{9pR^J4u1rEC% z-TzJ%&FX5*ykI>#S+Wz8is99b2O7FJlc2>X0lW$rh2NoC&78nZ_7-wTw;^#NbPJij^-;dKD%~O4D zeEFZo+TS|9GBLdKes}(X>l5E>+>mcQR-8Y!Jt0|hgxt}D5cg|}Anq99u zDS+^U_Dg^Cv&6Q+`sBS^Z%+VzF!n=QKQFd+-{G{r<&m_Z?@B^Bl&zi>NTpBxBz?#3 zlZn5+H!F4L4}O!pb?Ktiu@C0PkCzT4-+AZ9?GHOg;=lfPOEO-+EPmp#VDdW;YS4G= z-uI5h-QNdOM|+=Savbed+neuq+xG5%E%j_P(Qc<(lI^EnjE}tW)3(rOn-hI6+>>xN zJ|F+a`1Gxbnc~@!s+uO?$FS_@n5AQ#aE*yU#eRuBB_C4C6 z^y+UvoSOf;FR#K~+K1=1KqWM1QDklIoe170gybR-GcrjMdl*7P$iw4_SI>xbxsh86czAsKfgARE!{DPWz>bhg7)(EIAUJQPUl}x|u&X#Uv@tg{ zR^U`uPGV4~!Nfdt2SS*jklGD7^&c^IvkJ?*{+? literal 0 HcmV?d00001 diff --git a/test/LowerColorado_TX/test_AnA.yaml b/test/LowerColorado_TX/test_AnA.yaml index c1793e4fd..dc141244d 100644 --- a/test/LowerColorado_TX/test_AnA.yaml +++ b/test/LowerColorado_TX/test_AnA.yaml @@ -73,8 +73,7 @@ compute_parameters: gage_segID_crosswalk_file : domain/RouteLink.nc crosswalk_gage_field : 'gages' crosswalk_segID_field : 'link' - wrf_hydro_lastobs_file : lastobs/nudgingLastObs.2021-08-23_12:00:00.nc - lastobs_output_folder : lastobs/ + lastobs_file : #lastobs/nudgingLastObs.2021-08-23_12:00:00.nc reservoir_da: #---------- reservoir_persistence_usgs : True diff --git a/test/LowerColorado_TX/test_AnA_V4_NHD.yaml b/test/LowerColorado_TX/test_AnA_V4_NHD.yaml index 9ad2ddf28..d2c5e9ca8 100644 --- a/test/LowerColorado_TX/test_AnA_V4_NHD.yaml +++ b/test/LowerColorado_TX/test_AnA_V4_NHD.yaml @@ -89,8 +89,7 @@ compute_parameters: gage_segID_crosswalk_file : domain/RouteLink.nc crosswalk_gage_field : 'gages' crosswalk_segID_field : 'link' - lastobs_file : lastobs/nudgingLastObs.2021-08-23_12:00:00.nc - lastobs_output_folder : lastobs/ + lastobs_file : #lastobs/nudgingLastObs.2021-08-23_12:00:00.nc reservoir_da: #---------- reservoir_parameter_file : domain/reservoir_index_AnA.nc diff --git a/test/LowerColorado_TX_v4/lastobs/nudgingLastObs.2023-04-02_00:00:00.nc b/test/LowerColorado_TX_v4/lastobs/nudgingLastObs.2023-04-02_00:00:00.nc new file mode 100644 index 0000000000000000000000000000000000000000..33c63f1a443370a32a48d86280156acab976292a GIT binary patch literal 11049 zcmeGi32anFbpGyk*|u9+4mm2q$|0@Lx;MLYkFMJ-EiG+rE1=P|OLu{dWw*4uHO7M& zE+NE#AQ2Cukr++DU_yw-U?3{dVAO;Ff{Msth#^rEj;Kj--pst+|Cbg^0|b&kuzml{ zym|AEd4J~5n{_o+)dhLQc?62VKy;*tJ>s9MqLj|yHHc$-J3b5m8*8eXHO5n#$*f&F zOpqa)Y?!AZ5|G?8fl5M%RztEW5H|*aP9h_Tf&N>Th(tSEW6Pp}WMeAXl}bV*Eu+Mb zF{RH|v(;8+wwIZ$ZD#Xq_Fq2<2qhSf6=P2_oQx&nwUOF*q)v1!VpjP?%SlQFDU*>s z@98{Gn5qTyC21T~NfPf`CTJ0AM}vkV?w=$&o5)xL8M}f~JLuhylp9uxf^HpQdKU{$p#LM6Ol{DdwIz ziVnK2bNzL{j{=|R*_4oUsJWph*&T~7u{d^VI3Mo)&El1s_C9J#-ah{Pw%g= zv)Jh|UM$ea^l4Y3G-K>=Ix92riiTTF=I{Y`KJ~ z0TGgu3jh{R7B9LSK-nX{=A#pUJ0b6i@WD61b+#ByKrfNebh#RrUao?PM0X?>4=1BN z(0uK(B^G`$3|;Ut1q9+@dqTK2o@pc}-znUbasCCdBs_x@>A==AO(Y#wzC(-WEXCInw{sAD!gu5sD*V*01YT`w5m#xt89afC=O+>_>m zaV5-y26U$X`^G?}y`)3RMfJ7EmpqT0pgcY5~;(ss&UFs1{Hypjtq+ zz@2XacG~b29Nfb7gp=W(C?;qI)(lT2(m4h} zieK0R^}HsHFu-|CbSme7Cl#bbi9dAU>}sfacGRygFzr63$$~ppJJbRpo&+KO?`N0$ zGG|N6r*U0F9AMssV#Yc+yMYu9q}AFQf=%6tu4s2M#!kE7v~3FgA=ln$H)Maj)|oUR zL~}V_d-<$#`^=@0#SX8f++r;^&wM@A9yPlxR*Tte7NY@bb2;Rw)8>+)Hs>rkv7KVF zR;SsnK$V=GRt2$xVzRyt3$4hAVRtH9t!{a%P1$NQE2MH{4Me-jI9ru6I~)p`?aIDZ zvqCC|%WRXgqFrUE)9jL?4yO`zD_ObeNEv+{Hf5_zVRi?V(vl&zQy0nl+U-gdtdk+O zQYmDp!=)V8r68sXDu}_s8CDL5)viPptuB{E-s*DCQlLs!S+-Jo(B{l&)K6kqt-=(! zY6;a6+1DlpHz!h+e^uB}>lYgX(r>5zr#@Zh z|J=95Kk+G-_vNCMzTWjye1*Ycp!FWzcb_-WJGx>@@p#YCeQ#CdZ*f;7dbhYAfAoxp z!r7IZCk8t5ivuNRFL^c`Z1TW(U#zM19qxP1uRpiYTYb{)^X5#iI5cUkH<`+-yzuv2 z?}<6ne4A1qd3P6@81Dmbc6wf&`ikf9;r;$&)(t-KCQ`vovp_n*=K_|JmTw<0p@*9Z z%<>LYKiGsHPq6J3Tb!*zi$SFOXi5yWHbYDIVFC*w@PcF)!$sC>`#0}>0Glv9yAUAh zFc~&1N$=6n+eVli;u;uBfd?UTIKW-kv8j*vfC=U`4eb6BAq&LF#x9_QUHFaU{7`I! z;1taHLGDbB!wy`IL$2(~AFZq9QsJeVJ+uvq@vizdz}+*Koe=z1K)mmt4t}-buKFfG zEpXaRxVq|MIyBkWPj>DdLo+)h#YGHLKbP2yFf||#&l9ivSLj%t9x*<(Tg24OuS=~IX4pP=~x=> zUJ}KR$3v%H^UK4aZ8B$*4g-1>1%fl5zGdi@g6ddj=lpPID$1!w^kYzH!Nfee10f;% zSHRUSxKnpy;f{tt2plooA(bu1A%)#{u6?^)uWQ1adJ?W&+?k*L_)8hm IA5(DXKiYQ_UjP6A literal 0 HcmV?d00001 diff --git a/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature.yaml b/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature.yaml index 0d1b8ab91..38792d124 100644 --- a/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature.yaml +++ b/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature.yaml @@ -101,8 +101,8 @@ compute_parameters: streamflow_da: #---------- streamflow_nudging : True - diffusive_streamflow_nudging : False - lastobs_output_folder : #lastobs/ + diffusive_streamflow_nudging : False + lastobs_file : #lastobs/nudgingLastObs.2023-04-02_00:00:00.nc reservoir_da: #---------- reservoir_persistence_da: @@ -117,14 +117,16 @@ compute_parameters: reservoir_rfc_forecasts_offset_hours : 28 #-------------------------------------------------------------------------------- output_parameters: - #---------- - test_output : output/lcr_flowveldepth.pkl - lite_restart: - #---------- +# #---------- + test_output : output/lcr_flowveldepth.pkl + lite_restart: +# #---------- lite_restart_output_directory: restart/ - lakeout_output: lakeout/ - stream_output : - stream_output_directory: output/ - stream_output_time: 1 #[hr] - stream_output_type: '.nc' #please select only between netcdf '.nc' or '.csv' or '.pkl' - stream_output_internal_frequency: 60 #[min] it should be order of 5 minutes. For instance if you want to output every hour put 60 \ No newline at end of file + lakeout_output: lakeout/ + lastobs_output: lastobs/ +# stream_output : +# stream_output_directory: output/ +# stream_output_time: 1 #[hr] +# stream_output_type: '.nc' #please select only between netcdf '.nc' or '.csv' or '.pkl' +# stream_output_internal_frequency: 60 #[min] it should be order of 5 minutes. For instance if you want to output every hour put 60 + diff --git a/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature_noDA.yaml b/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature_noDA.yaml index 203742864..6615080ca 100644 --- a/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature_noDA.yaml +++ b/test/LowerColorado_TX_v4/test_AnA_V4_HYFeature_noDA.yaml @@ -67,8 +67,8 @@ compute_parameters: streamflow_da: #---------- streamflow_nudging : False - diffusive_streamflow_nudging : False - lastobs_output_folder : lastobs/ + diffusive_streamflow_nudging : False + lastobs_file : #lastobs/nudgingLastObs.2023-04-02_00:00:00.nc reservoir_da: #---------- reservoir_persistence_da: