From 4a66277ead33d329ee75788288aae8b453d0c72d Mon Sep 17 00:00:00 2001 From: Nels Date: Tue, 5 Aug 2025 17:09:07 -0600 Subject: [PATCH 1/3] fix: ensure volstart is initialized, fixes #152 --- src/bmi_cfe.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bmi_cfe.c b/src/bmi_cfe.c index 6242ec36..d03e9025 100644 --- a/src/bmi_cfe.c +++ b/src/bmi_cfe.c @@ -3211,6 +3211,7 @@ extern void init_soil_reservoir(cfe_state_struct* cfe_ptr) }*/ extern void initialize_volume_trackers(cfe_state_struct* cfe_ptr) { + cfe_ptr->vol_struct.volstart = 0.0; cfe_ptr->vol_struct.volin = 0; cfe_ptr->vol_struct.vol_runoff = 0; cfe_ptr->vol_struct.vol_infilt = 0; From a349a953ef239ae7470a8365cf614283d7e6ca80 Mon Sep 17 00:00:00 2001 From: hellkite500 Date: Wed, 30 Apr 2025 00:30:47 -0600 Subject: [PATCH 2/3] fix: more CFE pointer initialization and cleanup... --- src/bmi_cfe.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/bmi_cfe.c b/src/bmi_cfe.c index d03e9025..9c9be2ec 100644 --- a/src/bmi_cfe.c +++ b/src/bmi_cfe.c @@ -1288,6 +1288,8 @@ int read_init_config_cfe(const char* config_file, cfe_state_struct* model) else { model->soil_reservoir.is_aet_rootzone = FALSE; model->soil_reservoir.n_soil_layers = 1; + model->soil_reservoir.soil_layer_depths_m = NULL; + model->soil_reservoir.delta_soil_layer_depth_m = NULL; } /*--------------------END OF ROOT ZONE ADJUSTED AET DEVELOPMENT -rlm ------------------------------*/ @@ -1484,6 +1486,11 @@ static int Initialize (Bmi *self, const char *file) cfe_bmi_data_ptr->gw_reservoir.coeff_secondary = 0.0; // 0.0 means that secondary outlet is not applied cfe_bmi_data_ptr->gw_reservoir.exponent_secondary = 1.0; // linear + // Not used in gw reservoir + cfe_bmi_data_ptr->gw_reservoir.smc_profile = NULL; + cfe_bmi_data_ptr->gw_reservoir.soil_layer_depths_m = NULL; + cfe_bmi_data_ptr->gw_reservoir.delta_soil_layer_depth_m = NULL; + // Initialize soil conceptual reservoirs //LKC Remove alpha_fc init_soil_reservoir(cfe_bmi_data_ptr); @@ -1626,6 +1633,9 @@ static int Finalize (Bmi *self) free(model->forcing_data_precip_kg_per_m2); if( model->forcing_data_time != NULL ) free(model->forcing_data_time); + if( model->forcing_file != NULL ){ + free(model->forcing_file); + } if( model->giuh_ordinates != NULL ) free(model->giuh_ordinates); @@ -1636,6 +1646,9 @@ static int Finalize (Bmi *self) if( model->flux_Qout_m != NULL ) free(model->flux_Qout_m); + if( model->soil_reservoir.smc_profile != NULL ) + free(model->soil_reservoir.smc_profile); + /* xinanjiang_dev: changing name to the more general "direct runoff" if( model->flux_Schaake_output_runoff_m != NULL ) free(model->flux_Schaake_output_runoff_m);*/ @@ -3026,6 +3039,15 @@ cfe_state_struct *new_bmi_cfe(void) data = (cfe_state_struct *) malloc(sizeof(cfe_state_struct)); data->time_step_size = 3600; data->time_step_fraction = 1.0; + // NJF Ensure that all "optional" pointers are initialized to NULL + // Should probabably ensure that *all* pointers are initialized to NULL + // but that would require some more significant refactoring... + data->soil_reservoir.smc_profile = NULL; + data->soil_reservoir.soil_layer_depths_m = NULL; + data->soil_reservoir.delta_soil_layer_depth_m = NULL; + data->nash_surface_params.nash_storage = NULL; + data->forcing_file = NULL; + data->forcing_data_precip_kg_per_m2 = NULL; data->forcing_data_time = NULL; data->giuh_ordinates = NULL; From 9a7f35c33d6fa680cae3ffb44988754862aa9235 Mon Sep 17 00:00:00 2001 From: Ian Todd Date: Fri, 20 Feb 2026 13:31:23 -0500 Subject: [PATCH 3/3] Merge resolution for changes from OWP master --- src/bmi_cfe.c | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/src/bmi_cfe.c b/src/bmi_cfe.c index cc8c75b3..809423ef 100644 --- a/src/bmi_cfe.c +++ b/src/bmi_cfe.c @@ -3027,27 +3027,6 @@ cfe_state_struct *new_bmi_cfe(void) data = (cfe_state_struct *) calloc(1, sizeof(cfe_state_struct)); data->time_step_size = 3600; data->time_step_fraction = 1.0; - // NJF Ensure that all "optional" pointers are initialized to NULL - // Should probabably ensure that *all* pointers are initialized to NULL - // but that would require some more significant refactoring... - data->soil_reservoir.smc_profile = NULL; - data->soil_reservoir.soil_layer_depths_m = NULL; - data->soil_reservoir.delta_soil_layer_depth_m = NULL; - data->nash_surface_params.nash_storage = NULL; - data->forcing_file = NULL; - - data->forcing_data_precip_kg_per_m2 = NULL; - data->forcing_data_time = NULL; - data->giuh_ordinates = NULL; - data->nash_storage_subsurface = NULL; - data->runoff_queue_m_per_timestep = NULL; - data->flux_Qout_m = NULL; - data->infiltration_excess_m = NULL; - data->flux_from_deep_gw_to_chan_m = NULL; - data->flux_direct_runoff_m = NULL; - data->flux_lat_m = NULL; - data->flux_nash_lateral_runoff_m = NULL; - data->flux_perc_m = NULL; return data; }