From 51d51889ebaac5f32ff1f920ea10b09542fe225b Mon Sep 17 00:00:00 2001 From: nurkholi <afid.nur-kholis@ufz.de> Date: Wed, 29 Jan 2025 13:49:38 +0100 Subject: [PATCH] GW output L1 + enable mhm_output + set verbosity 2 + disable finam_mrm_output --- src/finam_mhm/component.py | 97 ++++++++++++++++++++++---------------- src/finam_mhm/constants.py | 4 +- 2 files changed, 59 insertions(+), 42 deletions(-) diff --git a/src/finam_mhm/component.py b/src/finam_mhm/component.py index fa5dda7..c8e7ecc 100644 --- a/src/finam_mhm/component.py +++ b/src/finam_mhm/component.py @@ -29,7 +29,7 @@ def _get_grid_name(var): if grid_name == "METEO": name = "L1" elif grid_name == "GW": - name = "L0" + name = "L1" else: name = grid_name return name @@ -147,7 +147,7 @@ class MHM(fm.TimeComponent): @fm.tools.execute_in_cwd def _initialize(self): # only show errors - mhm.model.set_verbosity(level=1) + mhm.model.set_verbosity(level=2) #>> configure coupling if self.meteo_inputs: @@ -166,7 +166,7 @@ class MHM(fm.TimeComponent): ) #>> disable file output of mHM - mhm.model.disable_output() + # mhm.model.disable_output() mhm.run.prepare() @@ -177,8 +177,10 @@ class MHM(fm.TimeComponent): #>> prepare outputs self.OUTPUT_NAMES = list(OUTPUT_META) - if self.mrm_active: - self.OUTPUT_NAMES += list(MRM_OUTPUT_META) + + # if self.mrm_active: + # self.OUTPUT_NAMES += list(MRM_OUTPUT_META) + self.OUTPUT_NAMES += [ _horizon_name(var, horizon) for var in OUTPUT_HORIZONS_META @@ -212,16 +214,16 @@ class MHM(fm.TimeComponent): ncols=ncols, nrows=nrows, cellsize=cell_size, xllcorner=xll, yllcorner=yll ) - if self.mrm_active: - # get grid info l11 (swap rows/cols to get "ij" indexing) - nrows, ncols, __, xll, yll, cell_size, no_data = mhm.get.l11_domain_info() - self.gridspec["L11"] = fm.EsriGrid( - ncols=ncols, - nrows=nrows, - cellsize=cell_size, - xllcorner=xll, - yllcorner=yll, - ) + # if self.mrm_active: + # # get grid info l11 (swap rows/cols to get "ij" indexing) + # nrows, ncols, __, xll, yll, cell_size, no_data = mhm.get.l11_domain_info() + # self.gridspec["L11"] = fm.EsriGrid( + # ncols=ncols, + # nrows=nrows, + # cellsize=cell_size, + # xllcorner=xll, + # yllcorner=yll, + # ) # get grid info l2 (swap rows/cols to get "ij" indexing) nrows, ncols, __, xll, yll, cell_size, no_data = mhm.get.l2_domain_info() @@ -238,17 +240,19 @@ class MHM(fm.TimeComponent): _FillValue=self.no_data, **meta, ) - if self.mrm_active: - for var, meta in MRM_OUTPUT_META.items(): - grid_name = _get_grid_name(var) - self.outputs.add( - name=var, - time=self.time, - grid=self.gridspec[grid_name], - missing_value=self.no_data, - _FillValue=self.no_data, - **meta, - ) + + # if self.mrm_active: + # for var, meta in MRM_OUTPUT_META.items(): + # grid_name = _get_grid_name(var) + # self.outputs.add( + # name=var, + # time=self.time, + # grid=self.gridspec[grid_name], + # missing_value=self.no_data, + # _FillValue=self.no_data, + # **meta, + # ) + for var, meta in OUTPUT_CALC_META.items(): grid_name = _get_grid_name(var) self.outputs.add( @@ -334,8 +338,10 @@ class MHM(fm.TimeComponent): def _connect(self, start_time): push_data = {var: mhm.get_variable(var) for var in OUTPUT_META} - if self.mrm_active: - push_data.update({var: mhm.get_variable(var) for var in MRM_OUTPUT_META}) + + # if self.mrm_active: + # push_data.update({var: mhm.get_variable(var) for var in MRM_OUTPUT_META}) + push_data.update({var: func() for var, func in OUTPUT_CALC.items()}) push_data.update( { @@ -371,7 +377,17 @@ class MHM(fm.TimeComponent): #>> Set GW Coupling if self.gw_inputs: - if self.gw_timestep == 24 : # hours + + if self.gw_timestep == 1 : # 1 hours + print(f"time={self.time}") + kwargs = { + var: self.inputs[name].pull_data(self.next_time)[0].magnitude + for var, name in self.gw_inputs.items() + } + kwargs["time"] = self.time + mhm.set_gw_coupling(**kwargs) + + if self.gw_timestep == 24 : # 24 hours == 1 day if self.time.hour % self.gw_timestep == 0: print(f"time={self.time}") kwargs = { @@ -381,7 +397,7 @@ class MHM(fm.TimeComponent): kwargs["time"] = self.time mhm.set_gw_coupling(**kwargs) - if self.gw_timestep == 30 : # days + if self.gw_timestep == 720 : # 24*30 = 720 hours = 30 days if self.time.day == 1 and self.time.hour == 0: print(f"time={self.time}") kwargs = { @@ -391,11 +407,10 @@ class MHM(fm.TimeComponent): kwargs["time"] = self.time mhm.set_gw_coupling(**kwargs) - # run mhm mhm.run.do_time_step() + mhm.run.write_output() - # update time year, month, day, hour = mhm.run.current_time() self.time = datetime(year=year, month=month, day=day, hour=hour) @@ -407,14 +422,16 @@ class MHM(fm.TimeComponent): data=mhm.get_variable(var), time=self.time, ) - if self.mrm_active: - for var in OUTPUT_META: - if not self.outputs[var].has_targets: - continue - self.outputs[var].push_data( - data=mhm.get_variable(var), - time=self.time, - ) + + # if self.mrm_active: + # for var in OUTPUT_META: + # if not self.outputs[var].has_targets: + # continue + # self.outputs[var].push_data( + # data=mhm.get_variable(var), + # time=self.time, + # ) + for var, func in OUTPUT_CALC.items(): if not self.outputs[var].has_targets: continue diff --git a/src/finam_mhm/constants.py b/src/finam_mhm/constants.py index fb63be9..a9d1f78 100644 --- a/src/finam_mhm/constants.py +++ b/src/finam_mhm/constants.py @@ -163,8 +163,8 @@ INPUT_UNITS = { "METEO_SSRD": "W m-2", "METEO_STRD": "W m-2", "METEO_TANN": "degC", - "GW_DEPTH": "m", - "GW_BASEFLOW": "mm / d", + "GW_DEPTH": "1", + "GW_BASEFLOW": "1", } """units of the available inputs in mHM.""" -- GitLab