Work in progress

Working on demand lists
This commit is contained in:
Michael Tryby
2019-04-19 18:01:06 -04:00
parent 55a28de9e0
commit 7537be1ec9
7 changed files with 254 additions and 78 deletions

View File

@@ -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));

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;