From beb56353575098dba423cde4169efe0653db9db9 Mon Sep 17 00:00:00 2001 From: Ian Todd Date: Fri, 16 Jan 2026 10:37:31 -0500 Subject: [PATCH 1/4] Add a serialization_size option in Get_value --- src/bmi_cfe.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/bmi_cfe.c b/src/bmi_cfe.c index bd0f4edc..bd0183fc 100644 --- a/src/bmi_cfe.c +++ b/src/bmi_cfe.c @@ -2111,6 +2111,13 @@ static int Get_value (Bmi *self, const char *name, void *dest) return BMI_SUCCESS; } return BMI_FAILURE; + } else if (strcmp(name, "serialization_size") == 0) { + cfe_state_struct* model = (cfe_state_struct*)self->data; + if (model->serialized != NULL) { + memcpy(dest, &model->serialized_length, sizeof(uint64_t)); + return BMI_SUCCESS; + } + return BMI_FAILURE; } // Use nested call to "by index" version From c1d33b75782a56ef86b7f71f29f15ff3ff1db34a Mon Sep 17 00:00:00 2001 From: Ian Todd Date: Fri, 16 Jan 2026 13:15:03 -0500 Subject: [PATCH 2/4] Compatibility for serialization size using Get_value --- src/bmi_cfe.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bmi_cfe.c b/src/bmi_cfe.c index bd0183fc..8783f72a 100644 --- a/src/bmi_cfe.c +++ b/src/bmi_cfe.c @@ -2115,6 +2115,7 @@ static int Get_value (Bmi *self, const char *name, void *dest) cfe_state_struct* model = (cfe_state_struct*)self->data; if (model->serialized != NULL) { memcpy(dest, &model->serialized_length, sizeof(uint64_t)); + uint64_t *set_value = (uint64_t *)dest; return BMI_SUCCESS; } return BMI_FAILURE; From db4f19075e205e3490145dc60b60315225fe3cf1 Mon Sep 17 00:00:00 2001 From: Ian Todd Date: Fri, 16 Jan 2026 14:46:37 -0500 Subject: [PATCH 3/4] Remove leftover test code --- src/bmi_cfe.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/bmi_cfe.c b/src/bmi_cfe.c index 8783f72a..bd0183fc 100644 --- a/src/bmi_cfe.c +++ b/src/bmi_cfe.c @@ -2115,7 +2115,6 @@ static int Get_value (Bmi *self, const char *name, void *dest) cfe_state_struct* model = (cfe_state_struct*)self->data; if (model->serialized != NULL) { memcpy(dest, &model->serialized_length, sizeof(uint64_t)); - uint64_t *set_value = (uint64_t *)dest; return BMI_SUCCESS; } return BMI_FAILURE; From c61bdc8b5e22eb971843bfdbec86dea8837d6aaf Mon Sep 17 00:00:00 2001 From: Ian Todd Date: Thu, 22 Jan 2026 11:34:35 -0500 Subject: [PATCH 4/4] Reset time implemented --- src/bmi_cfe.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/bmi_cfe.c b/src/bmi_cfe.c index bd0183fc..737809ae 100644 --- a/src/bmi_cfe.c +++ b/src/bmi_cfe.c @@ -1637,6 +1637,9 @@ static int Get_var_type (Bmi *self, const char *name, char * type) } else if (strcmp(name, "serialization_free") == 0) { strncpy(type, "int", BMI_MAX_TYPE_NAME); return BMI_SUCCESS; + } else if (strcmp(name, "reset_time")) { + strncpy(type, "double", BMI_MAX_TYPE_NAME); + return BMI_SUCCESS; } // If we get here, it means the variable name wasn't recognized @@ -1752,6 +1755,9 @@ static int Get_var_nbytes (Bmi *self, const char *name, int * nbytes) } else if (strcmp(name, "serialization_free") == 0) { *nbytes = sizeof(int); return BMI_SUCCESS; + } else if (strcmp(name, "reset_time") == 0) { + *nbytes = sizeof(double); + return BMI_SUCCESS; } int item_size; int item_size_result = Get_var_itemsize(self, name, &item_size); @@ -2165,6 +2171,11 @@ static int Set_value (Bmi *self, const char *name, void *src) return new_serialized_cfe(self); } else if (strcmp(name, "serialization_free") == 0) { return free_serialized_cfe(self); + } else if (strcmp(name, "reset_time") == 0) { + cfe_state_struct *model = (cfe_state_struct *)self->data; + // time step only used for indexing into forcing data during update + model->current_time_step = 0; + return BMI_SUCCESS; } // Avoid using set value, call instead set_value_at_index // Use nested call to "by index" version