Alloc, free persistent parts of Hydraul in allocdata, rather than in allocmatrix
This commit is contained in:
@@ -1777,6 +1777,8 @@ int DLLEXPORT EN_addnode(EN_Project p, char *id, int nodeType, int *index)
|
|||||||
hyd->NodeDemand = (double *)realloc(hyd->NodeDemand, size);
|
hyd->NodeDemand = (double *)realloc(hyd->NodeDemand, size);
|
||||||
qual->NodeQual = (double *)realloc(qual->NodeQual, size);
|
qual->NodeQual = (double *)realloc(qual->NodeQual, size);
|
||||||
hyd->NodeHead = (double *)realloc(hyd->NodeHead, 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
|
// Actions taken when a new Junction is added
|
||||||
if (nodeType == EN_JUNCTION)
|
if (nodeType == EN_JUNCTION)
|
||||||
|
|||||||
@@ -305,16 +305,12 @@ int allocmatrix(Project *pr)
|
|||||||
|
|
||||||
hyd->P = (double *) calloc(net->Nlinks+1,sizeof(double));
|
hyd->P = (double *) calloc(net->Nlinks+1,sizeof(double));
|
||||||
hyd->Y = (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)),
|
hyd->Xflow = (double *) calloc(MAX((net->Nnodes+1), (net->Nlinks+1)),
|
||||||
sizeof(double));
|
sizeof(double));
|
||||||
hyd->OldStatus = (StatusType *) calloc(net->Nlinks+net->Ntanks+1,
|
hyd->OldStatus = (StatusType *) calloc(net->Nlinks+net->Ntanks+1,
|
||||||
sizeof(StatusType));
|
sizeof(StatusType));
|
||||||
ERRCODE(MEMCHECK(hyd->P));
|
ERRCODE(MEMCHECK(hyd->P));
|
||||||
ERRCODE(MEMCHECK(hyd->Y));
|
ERRCODE(MEMCHECK(hyd->Y));
|
||||||
ERRCODE(MEMCHECK(hyd->DemandFlow));
|
|
||||||
ERRCODE(MEMCHECK(hyd->EmitterFlow));
|
|
||||||
ERRCODE(MEMCHECK(hyd->Xflow));
|
ERRCODE(MEMCHECK(hyd->Xflow));
|
||||||
ERRCODE(MEMCHECK(hyd->OldStatus));
|
ERRCODE(MEMCHECK(hyd->OldStatus));
|
||||||
return errcode;
|
return errcode;
|
||||||
@@ -334,8 +330,6 @@ void freematrix(Project *pr)
|
|||||||
|
|
||||||
free(hyd->P);
|
free(hyd->P);
|
||||||
free(hyd->Y);
|
free(hyd->Y);
|
||||||
free(hyd->DemandFlow);
|
|
||||||
free(hyd->EmitterFlow);
|
|
||||||
free(hyd->Xflow);
|
free(hyd->Xflow);
|
||||||
free(hyd->OldStatus);
|
free(hyd->OldStatus);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -313,10 +313,14 @@ int allocdata(Project *pr)
|
|||||||
pr->hydraul.NodeDemand = (double *)calloc(n, sizeof(double));
|
pr->hydraul.NodeDemand = (double *)calloc(n, sizeof(double));
|
||||||
pr->hydraul.NodeHead = (double *)calloc(n, sizeof(double));
|
pr->hydraul.NodeHead = (double *)calloc(n, sizeof(double));
|
||||||
pr->quality.NodeQual = (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->network.Node));
|
||||||
ERRCODE(MEMCHECK(pr->hydraul.NodeDemand));
|
ERRCODE(MEMCHECK(pr->hydraul.NodeDemand));
|
||||||
ERRCODE(MEMCHECK(pr->hydraul.NodeHead));
|
ERRCODE(MEMCHECK(pr->hydraul.NodeHead));
|
||||||
ERRCODE(MEMCHECK(pr->quality.NodeQual));
|
ERRCODE(MEMCHECK(pr->quality.NodeQual));
|
||||||
|
ERRCODE(MEMCHECK(pr->hydraul.DemandFlow));
|
||||||
|
ERRCODE(MEMCHECK(pr->hydraul.EmitterFlow));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allocate memory for network links
|
// Allocate memory for network links
|
||||||
@@ -388,6 +392,8 @@ void freedata(Project *pr)
|
|||||||
free(pr->hydraul.LinkFlow);
|
free(pr->hydraul.LinkFlow);
|
||||||
free(pr->hydraul.LinkSetting);
|
free(pr->hydraul.LinkSetting);
|
||||||
free(pr->hydraul.LinkStatus);
|
free(pr->hydraul.LinkStatus);
|
||||||
|
free(pr->hydraul.DemandFlow);
|
||||||
|
free(pr->hydraul.EmitterFlow);
|
||||||
free(pr->quality.NodeQual);
|
free(pr->quality.NodeQual);
|
||||||
|
|
||||||
// Free memory used for nodal adjacency lists
|
// Free memory used for nodal adjacency lists
|
||||||
|
|||||||
Reference in New Issue
Block a user