From ee5e910454cbf3e7b9df0743929795a456d98893 Mon Sep 17 00:00:00 2001 From: Corey McNeish Date: Sat, 11 Apr 2020 11:23:39 -0700 Subject: [PATCH] Alloc, free persistent parts of Hydraul in allocdata, rather than in allocmatrix --- src/epanet.c | 2 ++ src/hydraul.c | 6 ------ src/project.c | 6 ++++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/epanet.c b/src/epanet.c index a81f7b1..dd6348b 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -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) diff --git a/src/hydraul.c b/src/hydraul.c index 732108c..069deb7 100755 --- a/src/hydraul.c +++ b/src/hydraul.c @@ -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); } diff --git a/src/project.c b/src/project.c index 2d19729..6fae82c 100644 --- a/src/project.c +++ b/src/project.c @@ -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