Alloc, free persistent parts of Hydraul in allocdata, rather than in allocmatrix

This commit is contained in:
Corey McNeish
2020-04-11 11:23:39 -07:00
parent f358e39728
commit ee5e910454
3 changed files with 8 additions and 6 deletions

View File

@@ -1777,6 +1777,8 @@ int DLLEXPORT EN_addnode(EN_Project p, char *id, int nodeType, int *index)
hyd->NodeDemand = (double *)realloc(hyd->NodeDemand, size);
qual->NodeQual = (double *)realloc(qual->NodeQual, size);
hyd->NodeHead = (double *)realloc(hyd->NodeHead, size);
hyd->DemandFlow = (double *)realloc(hyd->DemandFlow, size);
hyd->EmitterFlow = (double *)realloc(hyd->EmitterFlow, size);
// Actions taken when a new Junction is added
if (nodeType == EN_JUNCTION)

View File

@@ -305,16 +305,12 @@ int allocmatrix(Project *pr)
hyd->P = (double *) calloc(net->Nlinks+1,sizeof(double));
hyd->Y = (double *) calloc(net->Nlinks+1,sizeof(double));
hyd->DemandFlow = (double *) calloc(net->Nnodes + 1, sizeof(double));
hyd->EmitterFlow = (double *) calloc(net->Nnodes+1, sizeof(double));
hyd->Xflow = (double *) calloc(MAX((net->Nnodes+1), (net->Nlinks+1)),
sizeof(double));
hyd->OldStatus = (StatusType *) calloc(net->Nlinks+net->Ntanks+1,
sizeof(StatusType));
ERRCODE(MEMCHECK(hyd->P));
ERRCODE(MEMCHECK(hyd->Y));
ERRCODE(MEMCHECK(hyd->DemandFlow));
ERRCODE(MEMCHECK(hyd->EmitterFlow));
ERRCODE(MEMCHECK(hyd->Xflow));
ERRCODE(MEMCHECK(hyd->OldStatus));
return errcode;
@@ -334,8 +330,6 @@ void freematrix(Project *pr)
free(hyd->P);
free(hyd->Y);
free(hyd->DemandFlow);
free(hyd->EmitterFlow);
free(hyd->Xflow);
free(hyd->OldStatus);
}

View File

@@ -313,10 +313,14 @@ int allocdata(Project *pr)
pr->hydraul.NodeDemand = (double *)calloc(n, sizeof(double));
pr->hydraul.NodeHead = (double *)calloc(n, sizeof(double));
pr->quality.NodeQual = (double *)calloc(n, sizeof(double));
pr->hydraul.DemandFlow = (double *)calloc(n, sizeof(double));
pr->hydraul.EmitterFlow = (double *)calloc(n, sizeof(double));
ERRCODE(MEMCHECK(pr->network.Node));
ERRCODE(MEMCHECK(pr->hydraul.NodeDemand));
ERRCODE(MEMCHECK(pr->hydraul.NodeHead));
ERRCODE(MEMCHECK(pr->quality.NodeQual));
ERRCODE(MEMCHECK(pr->hydraul.DemandFlow));
ERRCODE(MEMCHECK(pr->hydraul.EmitterFlow));
}
// Allocate memory for network links
@@ -388,6 +392,8 @@ void freedata(Project *pr)
free(pr->hydraul.LinkFlow);
free(pr->hydraul.LinkSetting);
free(pr->hydraul.LinkStatus);
free(pr->hydraul.DemandFlow);
free(pr->hydraul.EmitterFlow);
free(pr->quality.NodeQual);
// Free memory used for nodal adjacency lists