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