Work in progress
Working on demand lists
This commit is contained in:
18
src/demand.c
18
src/demand.c
@@ -32,6 +32,24 @@ typedef struct demand_data_s
|
||||
} demand_data_t;
|
||||
|
||||
|
||||
|
||||
list_t *create_demand_list(double base_demand, int pattern_index, char *category_name)
|
||||
{
|
||||
list_t *demand_list;
|
||||
demand_data_t *demand_data;
|
||||
|
||||
demand_list = create_list(get_demand_data_size(), delete_demand_data);
|
||||
if (!demand_list) return NULL;
|
||||
|
||||
demand_data = create_demand_data(base_demand, pattern_index, category_name);
|
||||
if (!demand_data) return NULL;
|
||||
|
||||
append_list(demand_list, &demand_data);
|
||||
|
||||
return demand_list;
|
||||
}
|
||||
|
||||
|
||||
demand_data_t *create_demand_data(double base_demand, int pattern_index, char *category_name)
|
||||
{
|
||||
demand_data_t *demand_data = (demand_data_t *)malloc(sizeof(demand_data_t));
|
||||
|
||||
@@ -29,6 +29,9 @@ typedef struct demand_data_s demand_data_t;
|
||||
// demand list gets declared in types.h struct Snode
|
||||
|
||||
|
||||
list_t *create_demand_list(double base_demand, int pattern_index, char *category_name);
|
||||
|
||||
|
||||
demand_data_t *create_demand_data(double base_demand, int pat_index, char *cat_name);
|
||||
|
||||
void delete_demand_data(void *data);
|
||||
|
||||
56
src/epanet.c
56
src/epanet.c
@@ -2818,13 +2818,22 @@ int DLLEXPORT EN_setbasedemand(EN_Project p, int nodeIndex, int demandIndex,
|
||||
// Set baseline demand for specified category
|
||||
if (nodeIndex <= p->network.Njuncs)
|
||||
{
|
||||
// Locate demand category record and assign demandName to it
|
||||
list_t *dlist = p->network.Node[nodeIndex].D;
|
||||
list_node_t *lnode = get_nth_list(dlist, demandIndex);
|
||||
if (!lnode)
|
||||
return 253;
|
||||
else
|
||||
set_base_demand(lnode, baseDemand / p->Ucf[FLOW]);
|
||||
// If demand list is null create one and set demand
|
||||
if (!dlist) {
|
||||
dlist = create_demand_list(baseDemand / p->Ucf[FLOW], 0, NULL);
|
||||
if (!dlist) return 101;
|
||||
|
||||
p->network.Node[nodeIndex].D = dlist;
|
||||
}
|
||||
// else find the demand entry and set demand
|
||||
else {
|
||||
list_node_t *lnode = get_nth_list(dlist, demandIndex);
|
||||
if (!lnode)
|
||||
return 253;
|
||||
else
|
||||
set_base_demand(lnode, baseDemand / p->Ucf[FLOW]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -2895,12 +2904,19 @@ int DLLEXPORT EN_setdemandname(EN_Project p, int nodeIndex, int demandIndex,
|
||||
|
||||
// Locate demand category record and assign demandName to it
|
||||
list_t *dlist = p->network.Node[nodeIndex].D;
|
||||
list_node_t *lnode = get_nth_list(dlist, demandIndex);
|
||||
if (!lnode)
|
||||
return 253;
|
||||
else
|
||||
set_category_name(lnode, demandName);
|
||||
if (!dlist) {
|
||||
dlist = create_demand_list(0, 0, demandName);
|
||||
if (!dlist) return 101;
|
||||
|
||||
p->network.Node[nodeIndex].D = dlist;
|
||||
}
|
||||
else {
|
||||
list_node_t *lnode = get_nth_list(dlist, demandIndex);
|
||||
if (!lnode)
|
||||
return 253;
|
||||
else
|
||||
set_category_name(lnode, demandName);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2960,11 +2976,19 @@ int DLLEXPORT EN_setdemandpattern(EN_Project p, int nodeIndex, int demandIndex,
|
||||
if (nodeIndex <= net->Njuncs) {
|
||||
|
||||
list_t *dlist = p->network.Node[nodeIndex].D;
|
||||
list_node_t *lnode = get_nth_list(dlist, demandIndex);
|
||||
if (!lnode)
|
||||
return 253;
|
||||
else
|
||||
set_pattern_index(lnode, patIndex);
|
||||
if (!dlist) {
|
||||
dlist = create_demand_list(0, patIndex, NULL);
|
||||
if (!dlist) return 101;
|
||||
|
||||
p->network.Node[nodeIndex].D = dlist;
|
||||
}
|
||||
else {
|
||||
list_node_t *lnode = get_nth_list(dlist, demandIndex);
|
||||
if (!lnode)
|
||||
return 253;
|
||||
else
|
||||
set_pattern_index(lnode, patIndex);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
15
src/input3.c
15
src/input3.c
@@ -124,22 +124,11 @@ int juncdata(Project *pr)
|
||||
|
||||
// create demand data only if a demand has been specified
|
||||
if (y != 0.0) {
|
||||
demand_data_t *demand_data;
|
||||
|
||||
demand_list = create_list(get_demand_data_size(), delete_demand_data);
|
||||
if (demand_list == NULL) return 101;
|
||||
|
||||
// apply the default demand pattern and append the data
|
||||
if (p == 0) p = findpattern(net, parser->DefPatID);
|
||||
demand_data = create_demand_data(y, p, NULL);
|
||||
if (demand_data == NULL) return 101;
|
||||
|
||||
append_list(demand_list, &demand_data);
|
||||
demand_list = create_demand_list(y, p, NULL);
|
||||
if (!demand_list) return 101;
|
||||
}
|
||||
//demand->Base = y;
|
||||
//demand->Pat = p;
|
||||
//demand->Name = NULL;
|
||||
//demand->next = NULL;
|
||||
node->D = demand_list;
|
||||
|
||||
hyd->NodeDemand[njuncs] = y;
|
||||
|
||||
@@ -120,7 +120,7 @@ list_node_t *head_list(list_t *list, bool removeFromList)
|
||||
// Warning: When node is removed caller is responsible for freeing it.
|
||||
//
|
||||
{
|
||||
assert(list->head != NULL);
|
||||
// assert(list->head != NULL);
|
||||
|
||||
if (list) {
|
||||
list_node_t *node = list->head;
|
||||
|
||||
Reference in New Issue
Block a user