From bf519fdd94e45c45181bd6fbae4045ffd15341a5 Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Thu, 18 Apr 2019 14:24:30 -0400 Subject: [PATCH] Work in progress Fixing problems when demand lists are null --- src/epanet.c | 3 ++- src/hydraul.c | 22 ++++++++++++---------- src/input1.c | 7 ++++--- src/project.c | 12 ++++++------ 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/epanet.c b/src/epanet.c index 4d06e4b..8af09ee 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -1897,7 +1897,8 @@ int DLLEXPORT EN_deletenode(EN_Project p, int index, int actionCode) // Free memory allocated to node's demands, WQ source & comment demand = node->D; - delete_list(demand); + if (demand) + delete_list(demand); // while (demand != NULL) // { // nextdemand = demand->next; diff --git a/src/hydraul.c b/src/hydraul.c index ac3357a..515be11 100755 --- a/src/hydraul.c +++ b/src/hydraul.c @@ -567,16 +567,18 @@ void demands(Project *pr) { sum = 0.0; list_t *dlist = net->Node[i].D; - list_node_t *lnode; - for (lnode = first_list(dlist); done_list(lnode); lnode = next_list(lnode)) - { - // pattern period (k) = (elapsed periods) modulus (periods per pattern) - j = get_pattern_index(lnode); - k = p % (long) net->Pattern[j].Length; - djunc = (get_base_demand(lnode)) * net->Pattern[j].F[k] * hyd->Dmult; - if (djunc > 0.0) hyd->Dsystem += djunc; - sum += djunc; - } + + if (dlist) { + for (list_node_t *lnode = first_list(dlist); done_list(lnode); lnode = next_list(lnode)) + { + // pattern period (k) = (elapsed periods) modulus (periods per pattern) + j = get_pattern_index(lnode); + k = p % (long)net->Pattern[j].Length; + djunc = (get_base_demand(lnode)) * net->Pattern[j].F[k] * hyd->Dmult; + if (djunc > 0.0) hyd->Dsystem += djunc; + sum += djunc; + } + } hyd->NodeDemand[i] = sum; // Initialize pressure dependent demand diff --git a/src/input1.c b/src/input1.c index 2d80d5b..aafa576 100644 --- a/src/input1.c +++ b/src/input1.c @@ -568,9 +568,10 @@ void convertunits(Project *pr) { node = &net->Node[i]; list_t *dlist = node->D; - for (list_node_t *lnode = first_list(dlist); done_list(lnode); lnode = next_list(lnode)) - convert_units(lnode, pr->Ucf[DEMAND]); - + if (dlist) { + for (list_node_t *lnode = first_list(dlist); done_list(lnode); lnode = next_list(lnode)) + convert_units(lnode, pr->Ucf[DEMAND]); + } // for (demand = node->D; demand != NULL; demand = demand->next) // { // demand->Base /= pr->Ucf[DEMAND]; diff --git a/src/project.c b/src/project.c index 9324bea..ea62e59 100644 --- a/src/project.c +++ b/src/project.c @@ -407,7 +407,8 @@ void freedata(Project *pr) { // Free memory used for demand category list list_t *demand = pr->network.Node[j].D; - delete_list(demand); + if(demand) + delete_list(demand); /*while (demand != NULL) { nextdemand = demand->next; @@ -822,11 +823,10 @@ void adjustpatterns(Network *network, int index) { // Adjust demand patterns list_t *dlist = network->Node[j].D; - list_node_t *lnode; - - for (lnode = first_list(dlist); done_list(lnode); lnode = next_list(lnode)) - _adjustpattern(lnode, index); - + if (dlist) { + for (list_node_t *lnode = first_list(dlist); done_list(lnode); lnode = next_list(lnode)) + _adjustpattern(lnode, index); + } // Adjust WQ source patterns source = network->Node[j].S; if (source) adjustpattern(&source->Pat, index);