From 2b9ba346d29331551b96ec79dfc580c3ea3e43b1 Mon Sep 17 00:00:00 2001 From: Mohammed Karim Date: Tue, 28 Apr 2026 08:38:14 -0700 Subject: [PATCH 1/5] updated groundwater_to_stream_recharge unit --- include/bmi_lgar.hxx | 2 ++ src/bmi_lgar.cxx | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/bmi_lgar.hxx b/include/bmi_lgar.hxx index cf40d6c..8b2a776 100644 --- a/include/bmi_lgar.hxx +++ b/include/bmi_lgar.hxx @@ -175,6 +175,8 @@ private: double volQ_gw_timestep_m; double volPET_timestep_m; double mass_balance_m; + double volQ_gw_timestep_m3_per_s; + double catchment_area_m2; }; struct bmi_unit_conversion bmi_unit_conv; diff --git a/src/bmi_lgar.cxx b/src/bmi_lgar.cxx index 1410b9c..0051ec9 100644 --- a/src/bmi_lgar.cxx +++ b/src/bmi_lgar.cxx @@ -68,6 +68,9 @@ Initialize (std::string config_file) giuh_runoff_queue[i] = 0.0; } + bmi_unit_conv.volQ_gw_timestep_m3_per_s = 0.0; + bmi_unit_conv.catchment_area_m2 = 1.0; + } /** @@ -126,6 +129,7 @@ Update() bmi_unit_conv.volrunoff_timestep_m = state->lgar_bmi_input_params->precipitation_mm_per_h * mm_to_m; bmi_unit_conv.volQ_timestep_m = state->lgar_bmi_input_params->precipitation_mm_per_h * mm_to_m; bmi_unit_conv.volQ_gw_timestep_m = 0.0; + bmi_unit_conv.volQ_gw_timestep_m3_per_s = 0.0; bmi_unit_conv.volPET_timestep_m = 0.0; bmi_unit_conv.volrunoff_giuh_timestep_m = 0.0; bmi_unit_conv.volrunoff_giuh_ponded_m = 0.0; @@ -603,6 +607,9 @@ Update() bmi_unit_conv.volrunoff_timestep_m = volrunoff_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volQ_timestep_m = volQ_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volQ_gw_timestep_m = volQ_gw_timestep_cm * state->units.cm_to_m; + bmi_unit_conv.volQ_gw_timestep_m3_per_s = + (bmi_unit_conv.volQ_gw_timestep_m * bmi_unit_conv.catchment_area_m2) / + this->GetTimeStep(); bmi_unit_conv.volPET_timestep_m = PET_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volrunoff_giuh_timestep_m = volrunoff_giuh_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volrunoff_giuh_ponded_m = volrunoff_giuh_ponded_cm * state->units.cm_to_m; @@ -868,7 +875,9 @@ GetVarUnits(std::string name) else if (name.compare("total_discharge") == 0 || name.compare("infiltration") == 0 || name.compare("percolation") == 0) // double return "m"; - else if (name.compare("mass_balance") == 0 || name.compare("groundwater_to_stream_recharge") == 0) + else if (name.compare("groundwater_to_stream_recharge") == 0) + return "m3 s-1"; + else if (name.compare("mass_balance") == 0) return "m"; else if (name.compare("soil_moisture_wetting_fronts") == 0) // array of doubles return "none"; @@ -1020,7 +1029,7 @@ GetValuePtr (std::string name) else if (name.compare("percolation") == 0) return (void*)(&bmi_unit_conv.volrech_timestep_m); else if (name.compare("groundwater_to_stream_recharge") == 0) - return (void*)(&bmi_unit_conv.volQ_gw_timestep_m); + return (void*)(&bmi_unit_conv.volQ_gw_timestep_m3_per_s); else if (name.compare("mass_balance") == 0) return (void*)(&bmi_unit_conv.mass_balance_m); else if (name.compare(NWM_PONDED_DEPTH_OUT_VAR) == 0) From 88f33dd5d80f9bb245bf75a04d35eca0f3d27a03 Mon Sep 17 00:00:00 2001 From: Mohammed Karim Date: Thu, 30 Apr 2026 04:49:23 -0700 Subject: [PATCH 2/5] added new output variable groundwater_to_stream_recharge_m3_per_s --- include/bmi_lgar.hxx | 1 + src/bmi_lgar.cxx | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/include/bmi_lgar.hxx b/include/bmi_lgar.hxx index 8b2a776..794bcee 100644 --- a/include/bmi_lgar.hxx +++ b/include/bmi_lgar.hxx @@ -62,6 +62,7 @@ public: this->output_var_names[14] = "mass_balance"; this->output_var_names[15] = NWM_PONDED_DEPTH_OUT_VAR; this->output_var_names[16] = "precipitation_rate_out"; + this->output_var_names[17] = "groundwater_to_stream_recharge_m3_per_s"; /* this->output_var_names[13] = "cum_precipitation"; diff --git a/src/bmi_lgar.cxx b/src/bmi_lgar.cxx index 0051ec9..ead873c 100644 --- a/src/bmi_lgar.cxx +++ b/src/bmi_lgar.cxx @@ -786,6 +786,7 @@ GetVarGrid(std::string name) || name.compare("infiltration") == 0 || name.compare("percolation") == 0 || name.compare("groundwater_to_stream_recharge") == 0 + || name.compare("groundwater_to_stream_recharge_m3_per_s") == 0 || name.compare("mass_balance") == 0 || name.compare(NWM_PONDED_DEPTH_OUT_VAR) == 0 || name.compare("reset_time") == 0 @@ -876,6 +877,8 @@ GetVarUnits(std::string name) || name.compare("percolation") == 0) // double return "m"; else if (name.compare("groundwater_to_stream_recharge") == 0) + return "m"; + else if (name.compare("groundwater_to_stream_recharge_m3_per_s") == 0) return "m3 s-1"; else if (name.compare("mass_balance") == 0) return "m"; @@ -1029,6 +1032,8 @@ GetValuePtr (std::string name) else if (name.compare("percolation") == 0) return (void*)(&bmi_unit_conv.volrech_timestep_m); else if (name.compare("groundwater_to_stream_recharge") == 0) + return (void*)(&bmi_unit_conv.volQ_gw_timestep_m); + else if (name.compare("groundwater_to_stream_recharge_m3_per_s") == 0) return (void*)(&bmi_unit_conv.volQ_gw_timestep_m3_per_s); else if (name.compare("mass_balance") == 0) return (void*)(&bmi_unit_conv.mass_balance_m); From 1ca6524ca980ebd924037ce589c90a9b19ca932a Mon Sep 17 00:00:00 2001 From: Mohammed Karim Date: Thu, 30 Apr 2026 04:58:58 -0700 Subject: [PATCH 3/5] fixed missed updates --- include/bmi_lgar.hxx | 2 +- src/bmi_lgar.cxx | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/bmi_lgar.hxx b/include/bmi_lgar.hxx index 794bcee..be549ee 100644 --- a/include/bmi_lgar.hxx +++ b/include/bmi_lgar.hxx @@ -147,7 +147,7 @@ private: void realloc_soil(); struct model_state* state; static const int input_var_name_count = 3; - static const int output_var_name_count = 17; + static const int output_var_name_count = 18; static const int calib_var_name_count = 7; std::string input_var_names[input_var_name_count]; diff --git a/src/bmi_lgar.cxx b/src/bmi_lgar.cxx index ead873c..e67ecad 100644 --- a/src/bmi_lgar.cxx +++ b/src/bmi_lgar.cxx @@ -919,7 +919,8 @@ GetVarLocation(std::string name) || name.compare("soil_storage") == 0 || name.compare(NWM_PONDED_DEPTH_OUT_VAR)) // double return "node"; else if (name.compare("total_discharge") == 0 || name.compare("infiltration") == 0 - || name.compare("percolation") == 0 || name.compare("groundwater_to_stream_recharge") == 0) // double + || name.compare("percolation") == 0 || name.compare("groundwater_to_stream_recharge") == 0 + || name.compare("groundwater_to_stream_recharge_m3_per_s") == 0) //double return "node"; else if (name.compare("soil_moisture_wetting_fronts") == 0) // array of doubles return "node"; From ceb375767d364690746a3a256ec1a5fe5dec0768 Mon Sep 17 00:00:00 2001 From: Mohammed Karim Date: Thu, 30 Apr 2026 05:01:43 -0700 Subject: [PATCH 4/5] fixed missed updates --- src/bmi_lgar.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bmi_lgar.cxx b/src/bmi_lgar.cxx index e67ecad..764bd0e 100644 --- a/src/bmi_lgar.cxx +++ b/src/bmi_lgar.cxx @@ -876,7 +876,7 @@ GetVarUnits(std::string name) else if (name.compare("total_discharge") == 0 || name.compare("infiltration") == 0 || name.compare("percolation") == 0) // double return "m"; - else if (name.compare("groundwater_to_stream_recharge") == 0) + else if (name.compare("mass_balance") == 0 || name.compare("groundwater_to_stream_recharge") == 0) return "m"; else if (name.compare("groundwater_to_stream_recharge_m3_per_s") == 0) return "m3 s-1"; From 12d1af1d381466cd8943d84fb77766db968846df Mon Sep 17 00:00:00 2001 From: Mohammed Karim Date: Mon, 4 May 2026 11:08:53 -0700 Subject: [PATCH 5/5] Initialize bmi_unit_conv.catchment_area_m2 = 0.0 --- src/bmi_lgar.cxx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/bmi_lgar.cxx b/src/bmi_lgar.cxx index 764bd0e..96ec9a6 100644 --- a/src/bmi_lgar.cxx +++ b/src/bmi_lgar.cxx @@ -69,7 +69,7 @@ Initialize (std::string config_file) } bmi_unit_conv.volQ_gw_timestep_m3_per_s = 0.0; - bmi_unit_conv.catchment_area_m2 = 1.0; + bmi_unit_conv.catchment_area_m2 = 0.0; } @@ -607,9 +607,15 @@ Update() bmi_unit_conv.volrunoff_timestep_m = volrunoff_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volQ_timestep_m = volQ_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volQ_gw_timestep_m = volQ_gw_timestep_cm * state->units.cm_to_m; - bmi_unit_conv.volQ_gw_timestep_m3_per_s = - (bmi_unit_conv.volQ_gw_timestep_m * bmi_unit_conv.catchment_area_m2) / - this->GetTimeStep(); + if (bmi_unit_conv.catchment_area_m2 > 0.0 && this->GetTimeStep() > 0.0) { + bmi_unit_conv.volQ_gw_timestep_m3_per_s = + (bmi_unit_conv.volQ_gw_timestep_m * bmi_unit_conv.catchment_area_m2) / + this->GetTimeStep(); + } + else { + bmi_unit_conv.volQ_gw_timestep_m3_per_s = 0.0; + } + bmi_unit_conv.volPET_timestep_m = PET_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volrunoff_giuh_timestep_m = volrunoff_giuh_timestep_cm * state->units.cm_to_m; bmi_unit_conv.volrunoff_giuh_ponded_m = volrunoff_giuh_ponded_cm * state->units.cm_to_m;