From 47caff86a929a6a7c6328dd356b5cbb51f874edd Mon Sep 17 00:00:00 2001 From: rleander Date: Tue, 1 Oct 2024 13:24:13 +0200 Subject: [PATCH 01/13] avoid setting Ribasim's integrated volumes to zero in the coupler --- .../drivers/ribametamod/ribametamod.py | 26 ++++++++-- tests/test_init_riba.py | 48 +++++++++++++++++++ 2 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 tests/test_init_riba.py diff --git a/imod_coupler/drivers/ribametamod/ribametamod.py b/imod_coupler/drivers/ribametamod/ribametamod.py index 3abf4fdc..5dfe1a95 100644 --- a/imod_coupler/drivers/ribametamod/ribametamod.py +++ b/imod_coupler/drivers/ribametamod/ribametamod.py @@ -73,9 +73,12 @@ class RibaMetaMod(Driver): ribasim_level: NDArray[Any] ribasim_infiltration: NDArray[Any] ribasim_drainage: NDArray[Any] + ribasim_infiltration_save: NDArray[Any] + ribasim_drainage_save: NDArray[Any] ribasim_volume: NDArray[Any] ribasim_user_demand: NDArray[Any] ribasim_user_realized: NDArray[Any] + ribasim_user_realized_save: NDArray[Any] # MetaSWAP variables mf6_sprinkling_wells: NDArray[Any] # the well data for coupled extractions @@ -197,18 +200,21 @@ def couple_ribasim(self, mf6_flowmodel_key: str) -> ChainMap[str, Any]: # Get all Ribasim pointers, relevant for coupling with MODFLOW 6 self.ribasim_infiltration = self.ribasim.get_value_ptr("basin.infiltration") self.ribasim_drainage = self.ribasim.get_value_ptr("basin.drainage") - self.ribasim_infiltration_sum = self.ribasim.get_value_ptr( + self.ribasim_infiltration_integrated = self.ribasim.get_value_ptr( "basin.infiltration_integrated" ) - self.ribasim_drainage_sum = self.ribasim.get_value_ptr( + self.ribasim_infiltration_save = np.empty_like(self.ribasim_infiltration_integrated) + self.ribasim_drainage_integrated = self.ribasim.get_value_ptr( "basin.drainage_integrated" ) + self.ribasim_drainage_save = np.empty_like(self.ribasim_drainage_integrated) self.ribasim_level = self.ribasim.get_value_ptr("basin.level") self.ribasim_storage = self.ribasim.get_value_ptr("basin.storage") self.ribasim_user_demand = self.ribasim.get_value_ptr("user_demand.demand") self.ribasim_user_realized = self.ribasim.get_value_ptr( "user_demand.realized" ) + self.ribasim_user_realized_save = np.empty_like(self.ribasim_user_realized) self.subgrid_level = self.ribasim.get_value_ptr("basin.subgrid_level") # add to return ChainMap @@ -399,8 +405,18 @@ def update(self) -> None: self.update_ribasim_metaswap() else: self.update_ribasim() +# self.ribasim_drainage_save[:] = ( +# self.ribasim_drainage_integrated[:] +# - self.ribasim_drainage_save[:] +# ) +# self.ribasim_infiltration_save[:] = ( +# self.ribasim_infiltration_integrated[:] +# - self.ribasim_infiltration_save[:] +# ) + print(self.ribasim_infiltration[0]) self.exchange.flux_to_modflow( - (self.ribasim_drainage_sum - self.ribasim_infiltration_sum), + (self.ribasim_drainage_integrated[:] - self.ribasim_drainage_save[:]) - + (self.ribasim_infiltration_integrated[:] - self.ribasim_infiltration_save[:]), self.delt_gw, ) self.exchange.log_demands(self.get_current_time()) @@ -464,8 +480,8 @@ def exchange_rib2mod(self) -> None: def exchange_mod2rib(self) -> None: self.exchange.add_flux_estimate_mod(self.mf6_head, self.delt_gw) # reset Ribasim pointers - self.ribasim_infiltration_sum[:] = 0.0 - self.ribasim_drainage_sum[:] = 0.0 + self.ribasim_infiltration_save[:] = self.ribasim_infiltration_integrated[:] + self.ribasim_drainage_save[:] = self.ribasim_drainage_integrated[:] def exchange_sprinkling_demand_msw2rib(self) -> None: # flux demand from metaswap sprinkling to Ribasim (demand) diff --git a/tests/test_init_riba.py b/tests/test_init_riba.py new file mode 100644 index 00000000..3edb6923 --- /dev/null +++ b/tests/test_init_riba.py @@ -0,0 +1,48 @@ +from ribasim_api import RibasimApi +from pathlib import Path +import numpy as np + +riba_path:Path = Path("d:/leander/imod_collector/ribasim/bin") # path to the ribasim library +ribasim: RibasimApi # the Ribasim model instance + +riba = RibasimApi( + lib_path = riba_path / "libribasim.dll", + lib_dependency = riba_path, + timing=False) + +ribasim_config_file = "c:/pytest/pytest-1577/test_ribametamod_bucket_bucket0/develop/ribasim/ribasim.toml" + +# Initialize ribasim config +riba.init_julia() +riba.initialize(ribasim_config_file) + +# Get all relevant Ribasim pointers +ribasim_infiltration = riba.get_value_ptr("basin.infiltration") +ribasim_drainage = riba.get_value_ptr("basin.drainage") +ribasim_infiltration_integrated = riba.get_value_ptr("basin.infiltration_integrated") +ribasim_infiltration_save = np.empty_like(ribasim_infiltration_integrated) +ribasim_drainage_integrated = riba.get_value_ptr("basin.drainage_integrated") +ribasim_drainage_save = np.empty_like(ribasim_drainage_integrated) +ribasim_level = riba.get_value_ptr("basin.level") +ribasim_storage = riba.get_value_ptr("basin.storage") +ribasim_user_demand = riba.get_value_ptr("user_demand.demand") +ribasim_user_realized = riba.get_value_ptr("user_demand.realized") +ribasim_user_realized_save = np.empty_like(ribasim_user_realized) +# ---------------------------------------------------------------------------------- +current_time = 0 +day2sec = 86400. +infilt = [12, 0,15, 2, 4, 6, 0, 0, 0,14,16,18] +drain = [ 0,10, 0, 2, 4, 6, 8,10,12, 0, 0, 0] + +# test section +for inl, drn in zip(infilt, drain): + # set infiltration forcing + ribasim_infiltration[0] = inl/day2sec # 0.0002007040335308 + # set drainage forcing + ribasim_drainage[0] = drn/day2sec # 0.0002007040335308 + current_time+=1 + # run ribasim timestep + riba.update_until(day2sec * current_time) + + # get integrated infiltration and drainage + print (ribasim_infiltration_integrated[0], ribasim_drainage_integrated[0]) \ No newline at end of file From 0dceb03e7b67b6a6c7bd5480c78a26a554cfb005 Mon Sep 17 00:00:00 2001 From: rleander Date: Wed, 2 Oct 2024 09:59:14 +0200 Subject: [PATCH 02/13] update test script --- imod_coupler/drivers/ribametamod/exchange.py | 1 + .../drivers/ribametamod/ribametamod.py | 4 +- tests/test_init_riba.py | 50 +++++++++++++++++-- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/imod_coupler/drivers/ribametamod/exchange.py b/imod_coupler/drivers/ribametamod/exchange.py index c126660c..a0c20422 100644 --- a/imod_coupler/drivers/ribametamod/exchange.py +++ b/imod_coupler/drivers/ribametamod/exchange.py @@ -20,6 +20,7 @@ class ExchangeBalance: realised_negative: dict[str, NDArray[np.float64]] shape: int sum_keys: list[str] + def __init__(self, shape: int, labels: list[str]) -> None: self.shape = shape diff --git a/imod_coupler/drivers/ribametamod/ribametamod.py b/imod_coupler/drivers/ribametamod/ribametamod.py index 5dfe1a95..d10f1685 100644 --- a/imod_coupler/drivers/ribametamod/ribametamod.py +++ b/imod_coupler/drivers/ribametamod/ribametamod.py @@ -102,6 +102,7 @@ def __init__(self, base_config: BaseConfig, ribametamod_config: RibaMetaModConfi ] # Adapt as soon as we have multimodel support self.enable_sprinkling_groundwater = False self.enable_sprinkling_surface_water = False + self.fdump = open("dump.txt","w") # rl666 def initialize(self) -> None: self.mf6 = Mf6Wrapper( @@ -413,7 +414,8 @@ def update(self) -> None: # self.ribasim_infiltration_integrated[:] # - self.ribasim_infiltration_save[:] # ) - print(self.ribasim_infiltration[0]) + self.fdump.write("%12.4e %12.4e\n" % (self.ribasim_infiltration[0],self.ribasim_drainage[0])) + self.exchange.flux_to_modflow( (self.ribasim_drainage_integrated[:] - self.ribasim_drainage_save[:]) - (self.ribasim_infiltration_integrated[:] - self.ribasim_infiltration_save[:]), diff --git a/tests/test_init_riba.py b/tests/test_init_riba.py index 3edb6923..2b924232 100644 --- a/tests/test_init_riba.py +++ b/tests/test_init_riba.py @@ -1,6 +1,11 @@ from ribasim_api import RibasimApi from pathlib import Path import numpy as np +import matplotlib.pyplot as plt +import os + +modeldir = "c:/pytest/pytest-1591/test_ribametamod_bucket_bucket0/develop/" +os.chdir(modeldir) riba_path:Path = Path("d:/leander/imod_collector/ribasim/bin") # path to the ribasim library ribasim: RibasimApi # the Ribasim model instance @@ -10,7 +15,7 @@ lib_dependency = riba_path, timing=False) -ribasim_config_file = "c:/pytest/pytest-1577/test_ribametamod_bucket_bucket0/develop/ribasim/ribasim.toml" +ribasim_config_file = "ribasim/ribasim.toml" # Initialize ribasim config riba.init_julia() @@ -31,8 +36,34 @@ # ---------------------------------------------------------------------------------- current_time = 0 day2sec = 86400. -infilt = [12, 0,15, 2, 4, 6, 0, 0, 0,14,16,18] -drain = [ 0,10, 0, 2, 4, 6, 8,10,12, 0, 0, 0] +infilt = [12, 0, 12, 0, 4, 6, 0, 0, 0,14,16,18] +drain = [ 0,10, 0, 10, 4, 6, 8,10,12, 0, 0, 0] + +calculated = [] # calculated infiltration over a day +expected = [] # expected infiltration over a day + +# read forcing from file +infilt = [] +drain = [] +fdmp = open("dump.txt","r") +input = fdmp.readlines() + +for s in input: + (inl,drn) = [float(ss) for ss in s.split()] + infilt.append(inl*day2sec) + drain.append(drn*day2sec) + +# read forcing from file +infilt = [] +drain = [] +inl = 0.00 +drn = 25.0 +for i in range(300): +# infilt.append(inl) +# drain.append(drn) + infilt.append(0.0) + drain.append(drn-inl) + (inl,drn) = (drn,inl) # test section for inl, drn in zip(infilt, drain): @@ -42,7 +73,16 @@ ribasim_drainage[0] = drn/day2sec # 0.0002007040335308 current_time+=1 # run ribasim timestep + ribasim_infiltration_integrated_old = ribasim_infiltration_integrated[0] + ribasim_drainage_integrated_old = ribasim_drainage_integrated[0] riba.update_until(day2sec * current_time) - # get integrated infiltration and drainage - print (ribasim_infiltration_integrated[0], ribasim_drainage_integrated[0]) \ No newline at end of file +# print (ribasim_infiltration_integrated[0], ribasim_drainage_integrated[0]) +# print ('-----> ',ribasim_infiltration_integrated[0]-ribasim_infiltration_integrated_old, ribasim_infiltration[0]*day2sec) + print ('-----> ',ribasim_drainage_integrated[0]-ribasim_drainage_integrated_old, ribasim_drainage[0]*day2sec) + calculated.append(ribasim_infiltration_integrated[0]-ribasim_infiltration_integrated_old) + expected.append(ribasim_infiltration[0]*day2sec) + +# plt.plot(np.arange(len(calculated)),np.array(calculated),'r-',np.arange(len(expected)),np.array(expected),'b-') +plt.plot(np.arange(len(calculated)),np.array(calculated)-np.array(expected),'r-') +plt.show() From d22479c145a0eb8bf33ae65feec170f5c1941174 Mon Sep 17 00:00:00 2001 From: rleander Date: Thu, 3 Oct 2024 15:53:54 +0200 Subject: [PATCH 03/13] linter + changed use of ribasim user_realized array --- imod_coupler/drivers/ribametamod/exchange.py | 1 - .../drivers/ribametamod/ribametamod.py | 30 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/imod_coupler/drivers/ribametamod/exchange.py b/imod_coupler/drivers/ribametamod/exchange.py index a0c20422..c126660c 100644 --- a/imod_coupler/drivers/ribametamod/exchange.py +++ b/imod_coupler/drivers/ribametamod/exchange.py @@ -20,7 +20,6 @@ class ExchangeBalance: realised_negative: dict[str, NDArray[np.float64]] shape: int sum_keys: list[str] - def __init__(self, shape: int, labels: list[str]) -> None: self.shape = shape diff --git a/imod_coupler/drivers/ribametamod/ribametamod.py b/imod_coupler/drivers/ribametamod/ribametamod.py index d10f1685..ba5d390b 100644 --- a/imod_coupler/drivers/ribametamod/ribametamod.py +++ b/imod_coupler/drivers/ribametamod/ribametamod.py @@ -102,7 +102,6 @@ def __init__(self, base_config: BaseConfig, ribametamod_config: RibaMetaModConfi ] # Adapt as soon as we have multimodel support self.enable_sprinkling_groundwater = False self.enable_sprinkling_surface_water = False - self.fdump = open("dump.txt","w") # rl666 def initialize(self) -> None: self.mf6 = Mf6Wrapper( @@ -204,7 +203,9 @@ def couple_ribasim(self, mf6_flowmodel_key: str) -> ChainMap[str, Any]: self.ribasim_infiltration_integrated = self.ribasim.get_value_ptr( "basin.infiltration_integrated" ) - self.ribasim_infiltration_save = np.empty_like(self.ribasim_infiltration_integrated) + self.ribasim_infiltration_save = np.empty_like( + self.ribasim_infiltration_integrated + ) self.ribasim_drainage_integrated = self.ribasim.get_value_ptr( "basin.drainage_integrated" ) @@ -406,19 +407,13 @@ def update(self) -> None: self.update_ribasim_metaswap() else: self.update_ribasim() -# self.ribasim_drainage_save[:] = ( -# self.ribasim_drainage_integrated[:] -# - self.ribasim_drainage_save[:] -# ) -# self.ribasim_infiltration_save[:] = ( -# self.ribasim_infiltration_integrated[:] -# - self.ribasim_infiltration_save[:] -# ) - self.fdump.write("%12.4e %12.4e\n" % (self.ribasim_infiltration[0],self.ribasim_drainage[0])) self.exchange.flux_to_modflow( - (self.ribasim_drainage_integrated[:] - self.ribasim_drainage_save[:]) - - (self.ribasim_infiltration_integrated[:] - self.ribasim_infiltration_save[:]), + (self.ribasim_drainage_integrated[:] - self.ribasim_drainage_save[:]) + - ( + self.ribasim_infiltration_integrated[:] + - self.ribasim_infiltration_save[:] + ), self.delt_gw, ) self.exchange.log_demands(self.get_current_time()) @@ -512,7 +507,10 @@ def exchange_sprinkling_flux_realised_msw2rib(self) -> None: self.realised_fractions_swspr[:] = 1.0 # all realized for non-coupled svats self.realised_fractions_swspr[nonzero_user_indices] = ( - self.ribasim_user_realized[nonzero_user_indices] + ( + self.ribasim_user_realized[nonzero_user_indices] + - self.ribasim_user_realized_save[nonzero_user_indices] + ) / (self.delt_sw * day_to_seconds) ) / self.mapped_sprinkling_demand[nonzero_user_indices] @@ -522,7 +520,9 @@ def exchange_sprinkling_flux_realised_msw2rib(self) -> None: msw_sprinkling_realized[:] = ( self.msw.get_surfacewater_sprinking_demand_ptr() * msw_sprfrac_realised )[:] - self.ribasim_user_realized[:] = 0.0 # reset cummulative for the next timestep + self.ribasim_user_realized_save[:] = self.ribasim_user_realized[ + : + ] # keep old values self.exchange_logger.log_exchange( ("sprinkling_realized"), msw_sprinkling_realized, From 3d33ce0d4a8c2263e00ecc27ea3a68e70c434f46 Mon Sep 17 00:00:00 2001 From: rleander Date: Thu, 3 Oct 2024 15:56:43 +0200 Subject: [PATCH 04/13] remove test script from this branch before merging --- tests/test_init_riba.py | 88 ----------------------------------------- 1 file changed, 88 deletions(-) delete mode 100644 tests/test_init_riba.py diff --git a/tests/test_init_riba.py b/tests/test_init_riba.py deleted file mode 100644 index 2b924232..00000000 --- a/tests/test_init_riba.py +++ /dev/null @@ -1,88 +0,0 @@ -from ribasim_api import RibasimApi -from pathlib import Path -import numpy as np -import matplotlib.pyplot as plt -import os - -modeldir = "c:/pytest/pytest-1591/test_ribametamod_bucket_bucket0/develop/" -os.chdir(modeldir) - -riba_path:Path = Path("d:/leander/imod_collector/ribasim/bin") # path to the ribasim library -ribasim: RibasimApi # the Ribasim model instance - -riba = RibasimApi( - lib_path = riba_path / "libribasim.dll", - lib_dependency = riba_path, - timing=False) - -ribasim_config_file = "ribasim/ribasim.toml" - -# Initialize ribasim config -riba.init_julia() -riba.initialize(ribasim_config_file) - -# Get all relevant Ribasim pointers -ribasim_infiltration = riba.get_value_ptr("basin.infiltration") -ribasim_drainage = riba.get_value_ptr("basin.drainage") -ribasim_infiltration_integrated = riba.get_value_ptr("basin.infiltration_integrated") -ribasim_infiltration_save = np.empty_like(ribasim_infiltration_integrated) -ribasim_drainage_integrated = riba.get_value_ptr("basin.drainage_integrated") -ribasim_drainage_save = np.empty_like(ribasim_drainage_integrated) -ribasim_level = riba.get_value_ptr("basin.level") -ribasim_storage = riba.get_value_ptr("basin.storage") -ribasim_user_demand = riba.get_value_ptr("user_demand.demand") -ribasim_user_realized = riba.get_value_ptr("user_demand.realized") -ribasim_user_realized_save = np.empty_like(ribasim_user_realized) -# ---------------------------------------------------------------------------------- -current_time = 0 -day2sec = 86400. -infilt = [12, 0, 12, 0, 4, 6, 0, 0, 0,14,16,18] -drain = [ 0,10, 0, 10, 4, 6, 8,10,12, 0, 0, 0] - -calculated = [] # calculated infiltration over a day -expected = [] # expected infiltration over a day - -# read forcing from file -infilt = [] -drain = [] -fdmp = open("dump.txt","r") -input = fdmp.readlines() - -for s in input: - (inl,drn) = [float(ss) for ss in s.split()] - infilt.append(inl*day2sec) - drain.append(drn*day2sec) - -# read forcing from file -infilt = [] -drain = [] -inl = 0.00 -drn = 25.0 -for i in range(300): -# infilt.append(inl) -# drain.append(drn) - infilt.append(0.0) - drain.append(drn-inl) - (inl,drn) = (drn,inl) - -# test section -for inl, drn in zip(infilt, drain): - # set infiltration forcing - ribasim_infiltration[0] = inl/day2sec # 0.0002007040335308 - # set drainage forcing - ribasim_drainage[0] = drn/day2sec # 0.0002007040335308 - current_time+=1 - # run ribasim timestep - ribasim_infiltration_integrated_old = ribasim_infiltration_integrated[0] - ribasim_drainage_integrated_old = ribasim_drainage_integrated[0] - riba.update_until(day2sec * current_time) - # get integrated infiltration and drainage -# print (ribasim_infiltration_integrated[0], ribasim_drainage_integrated[0]) -# print ('-----> ',ribasim_infiltration_integrated[0]-ribasim_infiltration_integrated_old, ribasim_infiltration[0]*day2sec) - print ('-----> ',ribasim_drainage_integrated[0]-ribasim_drainage_integrated_old, ribasim_drainage[0]*day2sec) - calculated.append(ribasim_infiltration_integrated[0]-ribasim_infiltration_integrated_old) - expected.append(ribasim_infiltration[0]*day2sec) - -# plt.plot(np.arange(len(calculated)),np.array(calculated),'r-',np.arange(len(expected)),np.array(expected),'b-') -plt.plot(np.arange(len(calculated)),np.array(calculated)-np.array(expected),'r-') -plt.show() From 9f31a9cce1ddfbfa2820359fbc9a067e7682a391 Mon Sep 17 00:00:00 2001 From: rleander Date: Fri, 4 Oct 2024 09:00:46 +0200 Subject: [PATCH 05/13] Set time-out to 1.5 hour --- .teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt index d9c1ef42..6296765d 100644 --- a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt +++ b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt @@ -92,6 +92,10 @@ object TestbenchCouplerWin64_2 : BuildType({ } } + failureConditions { + executionTimeoutMin = 90 + } + dependencies { dependency(IMODCollector.buildTypes.IMODCollector_X64development) { snapshot { From debee9412c95027b047b35f0ea40320fa91e39a7 Mon Sep 17 00:00:00 2001 From: rleander Date: Fri, 4 Oct 2024 11:18:32 +0200 Subject: [PATCH 06/13] changed solver algorithm in ribasim to Rodas5p --- tests/fixtures/fixture_ribasim.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/fixtures/fixture_ribasim.py b/tests/fixtures/fixture_ribasim.py index 0bc576ba..ec49cb00 100644 --- a/tests/fixtures/fixture_ribasim.py +++ b/tests/fixtures/fixture_ribasim.py @@ -6,6 +6,7 @@ import ribasim import ribasim_testmodels +solver_algorithm: str = 'Rodas5P' def add_subgrid(model: ribasim.Model) -> ribasim.Model: """Add 1:1 subgrid levels to model""" @@ -33,6 +34,7 @@ def add_subgrid(model: ribasim.Model) -> ribasim.Model: def ribasim_bucket_model() -> ribasim.Model: bucket = ribasim_testmodels.bucket_model() bucket.endtime = datetime(2023, 1, 1, 0, 0) + bucket.solver.algorithm = solver_algorithm return add_subgrid(bucket) @@ -40,17 +42,22 @@ def ribasim_bucket_model() -> ribasim.Model: def ribasim_bucket_model_no_subgrid() -> ribasim.Model: bucket = ribasim_testmodels.bucket_model() bucket.endtime = datetime(2023, 1, 1, 0, 0) + bucket.solver.algorithm = solver_algorithm return bucket @pytest_cases.fixture(scope="function") def ribasim_backwater_model() -> ribasim.Model: - return add_subgrid(ribasim_testmodels.backwater_model()) + backwater = ribasim_testmodels.backwater_model() + backwater.solver.algorithm = solver_algorithm + return add_subgrid(backwater) @pytest_cases.fixture(scope="function") def ribasim_two_basin_model() -> ribasim.Model: - return ribasim_testmodels.two_basin_model() + twobasin = ribasim_testmodels.two_basin_model() + twobasin.solver.algorithm = solver_algorithm + return twobasin @pytest_cases.fixture(scope="function") @@ -58,4 +65,5 @@ def ribasim_two_basin_model_dbg() -> ribasim.Model: model = ribasim_testmodels.two_basin_model() # model.logging.verbosity = ribasim.Verbosity("debug") # model.logging.verbosity = "debug" + model.solver.algorithm = solver_algorithm return model From 88fe3b47e294371a80ab85ad2ad19a7fbefaac29 Mon Sep 17 00:00:00 2001 From: rleander Date: Fri, 4 Oct 2024 11:53:08 +0200 Subject: [PATCH 07/13] temporary use another build of ribasim windows with the specific branch that has new added solvers --- .../IMODCollector/buildTypes/IMODCollector_X64development.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt b/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt index 521176fe..d7457ecc 100644 --- a/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt +++ b/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt @@ -107,7 +107,7 @@ object IMODCollector_X64development : BuildType({ } } artifacts(AbsoluteId("Ribasim_Windows_BuildRibasim")) { - buildRule = lastSuccessful() + buildRule = lastSuccessful(branch="more-solvers") artifactRules = "ribasim_windows.zip!** => ribasim" } } From 62e9dc952cc3715433526be86d8d4c5068b76cde Mon Sep 17 00:00:00 2001 From: rleander Date: Fri, 4 Oct 2024 15:40:09 +0200 Subject: [PATCH 08/13] user_realized from ribasiim not reduced by the previous value, not considered as a cumulative quantity --- imod_coupler/drivers/ribametamod/ribametamod.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/imod_coupler/drivers/ribametamod/ribametamod.py b/imod_coupler/drivers/ribametamod/ribametamod.py index 83317829..6d7240f5 100644 --- a/imod_coupler/drivers/ribametamod/ribametamod.py +++ b/imod_coupler/drivers/ribametamod/ribametamod.py @@ -508,8 +508,9 @@ def exchange_sprinkling_flux_realised_msw2rib(self) -> None: self.realised_fractions_swspr[:] = 1.0 # all realized for non-coupled svats self.realised_fractions_swspr[nonzero_user_indices] = ( ( +# self.ribasim_user_realized[nonzero_user_indices] +# - self.ribasim_user_realized_save[nonzero_user_indices] self.ribasim_user_realized[nonzero_user_indices] - - self.ribasim_user_realized_save[nonzero_user_indices] ) / (self.delt_sw * day_to_seconds) ) / self.mapped_sprinkling_demand[nonzero_user_indices] From 24fe2ec1fd28f5dfe4f4551b53ff605b15bb46a3 Mon Sep 17 00:00:00 2001 From: rleander Date: Fri, 4 Oct 2024 15:43:15 +0200 Subject: [PATCH 09/13] extended the allowed run time to 2 hours to avoid timeout --- .teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt index 6296765d..82b8257b 100644 --- a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt +++ b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt @@ -93,7 +93,7 @@ object TestbenchCouplerWin64_2 : BuildType({ } failureConditions { - executionTimeoutMin = 90 + executionTimeoutMin = 120 } dependencies { From ffa97388a726d91eee060139c3d28db149f963bb Mon Sep 17 00:00:00 2001 From: rleander Date: Tue, 8 Oct 2024 14:19:44 +0200 Subject: [PATCH 10/13] Ribasim user_realized (ribasim.user_demand.inflow) no longer set to zero (state variable) by the coupler --- imod_coupler/drivers/ribametamod/ribametamod.py | 6 +----- tests/fixtures/fixture_ribasim.py | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/imod_coupler/drivers/ribametamod/ribametamod.py b/imod_coupler/drivers/ribametamod/ribametamod.py index 6d7240f5..eaf69a41 100644 --- a/imod_coupler/drivers/ribametamod/ribametamod.py +++ b/imod_coupler/drivers/ribametamod/ribametamod.py @@ -372,9 +372,6 @@ def update_ribasim_metaswap(self) -> None: self.exchange.add_ponding_volume_msw(self.msw_ponding_volume) if self.enable_sprinkling_surface_water: self.exchange_sprinkling_demand_msw2rib() - self.ribasim_user_realized[:] = ( - 0.0 # reset cummulative for the next timestep - ) # exchange summed volumes to Ribasim self.exchange.flux_to_ribasim(self.delt_gw, self.delt_sw) # update Ribasim per delt_sw @@ -508,9 +505,8 @@ def exchange_sprinkling_flux_realised_msw2rib(self) -> None: self.realised_fractions_swspr[:] = 1.0 # all realized for non-coupled svats self.realised_fractions_swspr[nonzero_user_indices] = ( ( -# self.ribasim_user_realized[nonzero_user_indices] -# - self.ribasim_user_realized_save[nonzero_user_indices] self.ribasim_user_realized[nonzero_user_indices] + - self.ribasim_user_realized_save[nonzero_user_indices] ) / (self.delt_sw * day_to_seconds) ) / self.mapped_sprinkling_demand[nonzero_user_indices] diff --git a/tests/fixtures/fixture_ribasim.py b/tests/fixtures/fixture_ribasim.py index ec49cb00..58b3c1f2 100644 --- a/tests/fixtures/fixture_ribasim.py +++ b/tests/fixtures/fixture_ribasim.py @@ -6,7 +6,7 @@ import ribasim import ribasim_testmodels -solver_algorithm: str = 'Rodas5P' +solver_algorithm: str = 'QNDF' def add_subgrid(model: ribasim.Model) -> ribasim.Model: """Add 1:1 subgrid levels to model""" From 307158e0d944488201b3173d1596cedf9a56acfa Mon Sep 17 00:00:00 2001 From: rleander Date: Tue, 8 Oct 2024 16:37:46 +0200 Subject: [PATCH 11/13] rename label of user_demand.inflow, set time-out back to 1hr default and ribasim branch to main --- .../IMODCollector/buildTypes/IMODCollector_X64development.kt | 2 +- .teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt | 4 ---- imod_coupler/drivers/ribametamod/ribametamod.py | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt b/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt index d7457ecc..521176fe 100644 --- a/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt +++ b/.teamcity/IMODCollector/buildTypes/IMODCollector_X64development.kt @@ -107,7 +107,7 @@ object IMODCollector_X64development : BuildType({ } } artifacts(AbsoluteId("Ribasim_Windows_BuildRibasim")) { - buildRule = lastSuccessful(branch="more-solvers") + buildRule = lastSuccessful() artifactRules = "ribasim_windows.zip!** => ribasim" } } diff --git a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt index 82b8257b..d9c1ef42 100644 --- a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt +++ b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt @@ -92,10 +92,6 @@ object TestbenchCouplerWin64_2 : BuildType({ } } - failureConditions { - executionTimeoutMin = 120 - } - dependencies { dependency(IMODCollector.buildTypes.IMODCollector_X64development) { snapshot { diff --git a/imod_coupler/drivers/ribametamod/ribametamod.py b/imod_coupler/drivers/ribametamod/ribametamod.py index eaf69a41..c6680e36 100644 --- a/imod_coupler/drivers/ribametamod/ribametamod.py +++ b/imod_coupler/drivers/ribametamod/ribametamod.py @@ -214,7 +214,7 @@ def couple_ribasim(self, mf6_flowmodel_key: str) -> ChainMap[str, Any]: self.ribasim_storage = self.ribasim.get_value_ptr("basin.storage") self.ribasim_user_demand = self.ribasim.get_value_ptr("user_demand.demand") self.ribasim_user_realized = self.ribasim.get_value_ptr( - "user_demand.inflow" + "user_demand.cumulative_inflow" ) self.ribasim_user_realized_save = np.empty_like(self.ribasim_user_realized) self.subgrid_level = self.ribasim.get_value_ptr("basin.subgrid_level") From 7e9894495e6baa91ac716eabdd58a5f3e93bf320 Mon Sep 17 00:00:00 2001 From: rleander Date: Tue, 8 Oct 2024 16:41:08 +0200 Subject: [PATCH 12/13] Linter replaced single quotes around QNDF --- tests/fixtures/fixture_ribasim.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/fixtures/fixture_ribasim.py b/tests/fixtures/fixture_ribasim.py index 58b3c1f2..db42a0db 100644 --- a/tests/fixtures/fixture_ribasim.py +++ b/tests/fixtures/fixture_ribasim.py @@ -6,7 +6,8 @@ import ribasim import ribasim_testmodels -solver_algorithm: str = 'QNDF' +solver_algorithm: str = "QNDF" + def add_subgrid(model: ribasim.Model) -> ribasim.Model: """Add 1:1 subgrid levels to model""" From ee40fdb5a0fb217aa6ab58a4faf9ff782fda5260 Mon Sep 17 00:00:00 2001 From: rleander Date: Wed, 9 Oct 2024 15:10:53 +0200 Subject: [PATCH 13/13] extend timeout again --- .teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt index d9c1ef42..82b8257b 100644 --- a/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt +++ b/.teamcity/_Self/buildTypes/TestbenchCouplerWin64_2.kt @@ -92,6 +92,10 @@ object TestbenchCouplerWin64_2 : BuildType({ } } + failureConditions { + executionTimeoutMin = 120 + } + dependencies { dependency(IMODCollector.buildTypes.IMODCollector_X64development) { snapshot {