From 9ebb8b1e2490346d743c7b13ac3253511c520746 Mon Sep 17 00:00:00 2001 From: chortas Date: Thu, 2 Dec 2021 17:54:07 -0300 Subject: [PATCH] Free some memory --- fftma_module/gen/include/Py_py-api.h | 2 +- fftma_module/gen/lib_src/Py_getvalues.c | 44 +++++++++++++++++++---- fftma_module/gen/lib_src/Py_kgeneration.c | 11 +----- fftma_module/gen/lib_src/clean_real.c | 14 ++++---- fftma_module/gen/lib_src/fftma2.c | 2 -- fftma_module/gen/lib_src/generate.c | 2 +- fftma_module/gen/lib_src/nor2log.c | 2 +- fftma_module/gen/moduleFFTMA.c | 13 +++++-- 8 files changed, 58 insertions(+), 32 deletions(-) diff --git a/fftma_module/gen/include/Py_py-api.h b/fftma_module/gen/include/Py_py-api.h index d67020a..8bf84a9 100644 --- a/fftma_module/gen/include/Py_py-api.h +++ b/fftma_module/gen/include/Py_py-api.h @@ -12,4 +12,4 @@ #include int Py_getvalues(PyObject*, long*, struct grid_mod*, struct vario_mod*, struct statistic_mod*); -void Py_kgeneration(long, struct grid_mod, struct statistic_mod, struct vario_mod, struct realization_mod*, struct realization_mod*, struct realization_mod*, int[3]); +void Py_kgeneration(long, struct grid_mod, struct statistic_mod, struct vario_mod, struct realization_mod*, struct realization_mod*, int[3]); diff --git a/fftma_module/gen/lib_src/Py_getvalues.c b/fftma_module/gen/lib_src/Py_getvalues.c index 22560a1..8133a13 100644 --- a/fftma_module/gen/lib_src/Py_getvalues.c +++ b/fftma_module/gen/lib_src/Py_getvalues.c @@ -53,8 +53,10 @@ int Py_getvalues(PyObject* args, long* seed, struct grid_mod* grid, struct vario if (stat->mean == NULL) return 0; stat->variance = (double*)malloc(stat->nblock_var * sizeof(double)); - if (stat->variance == NULL) + if (stat->variance == NULL) { + free(stat->mean); return 0; + } if (!PyArg_ParseTuple(args, "iiidddlO!ddi", /*"iiidddslO!ddi",*/ &(grid->NX), @@ -68,26 +70,54 @@ int Py_getvalues(PyObject* args, long* seed, struct grid_mod* grid, struct vario &PyList_Type, &listvario, stat->mean + 0, stat->variance + 0, - &(stat->type))) + &(stat->type))) { + free(stat->mean); + free(stat->variance); return 0; + } variogram->Nvario = PyList_Size(listvario); variogram->var = (double*)malloc(variogram->Nvario * sizeof(double)); - if (variogram->var == NULL) + if (variogram->var == NULL) { + free(stat->mean); + free(stat->variance); return 0; + } variogram->vario = (int*)malloc(variogram->Nvario * sizeof(int)); - if (variogram->vario == NULL) + if (variogram->vario == NULL) { + free(stat->mean); + free(stat->variance); + free(variogram->var); return 0; + } variogram->alpha = (double*)malloc(variogram->Nvario * sizeof(double)); - if (variogram->alpha == NULL) + if (variogram->alpha == NULL) { + free(stat->mean); + free(stat->variance); + free(variogram->var); + free(variogram->vario); return 0; + } variogram->scf = (double*)malloc(3 * variogram->Nvario * sizeof(double)); - if (variogram->var == NULL) + if (variogram->var == NULL) { + free(stat->mean); + free(stat->variance); + free(variogram->var); + free(variogram->vario); + free(variogram->alpha); return 0; + } variogram->ap = (double*)malloc(9 * variogram->Nvario * sizeof(double)); - if (variogram->var == NULL) + if (variogram->var == NULL) { + free(stat->mean); + free(stat->variance); + free(variogram->var); + free(variogram->vario); + free(variogram->alpha); + free(variogram->scf); return 0; + } for (i = 0; i < variogram->Nvario; i++) { vgr = PyList_GetItem(listvario, i); if (PyTuple_Size(vgr) != 12) diff --git a/fftma_module/gen/lib_src/Py_kgeneration.c b/fftma_module/gen/lib_src/Py_kgeneration.c index 6b0e4b3..668e7b6 100644 --- a/fftma_module/gen/lib_src/Py_kgeneration.c +++ b/fftma_module/gen/lib_src/Py_kgeneration.c @@ -14,10 +14,9 @@ /* kgeneration */ /* Z is the GWN with 0-mean and 1-variance */ -/* Y1 is the realization with 0-mean and variance wanted */ /* Y is the realization with mean and variance wanted */ -void Py_kgeneration(long seed, struct grid_mod grid, struct statistic_mod stat, struct vario_mod variogram, struct realization_mod* Z, struct realization_mod* Y, struct realization_mod* Y1, int n[3]) +void Py_kgeneration(long seed, struct grid_mod grid, struct statistic_mod stat, struct vario_mod variogram, struct realization_mod* Z, struct realization_mod* Y, int n[3]) { int i, N; int typelog; @@ -33,17 +32,9 @@ void Py_kgeneration(long seed, struct grid_mod grid, struct statistic_mod stat, /*FFTMA*/ FFTMA2(variogram, grid, n, Z, Y); - /*add the statistics*/ - //if (stat.mean[0] != 0 || stat.variance[0]!= 1) - //addstat2(Y,stat,Y1,Y); - /* make a log normal realization */ if (stat.type == 1 || stat.type == 2) { - typelog = stat.type + 2; - /* nor2log(Y1,typelog,Y1); */ nor2log(Y, typelog, Y); } - - return; } diff --git a/fftma_module/gen/lib_src/clean_real.c b/fftma_module/gen/lib_src/clean_real.c index 13ecedb..d826832 100644 --- a/fftma_module/gen/lib_src/clean_real.c +++ b/fftma_module/gen/lib_src/clean_real.c @@ -15,24 +15,24 @@ void clean_real(struct realization_mod* realin, int n[3], struct grid_mod grid, /*is the output realization already allocated?*/ /*if not, memory allocation*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double*)malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) { + if (realout->vector == NULL || realout->n != realin->n) { + realout->vector = (double*)malloc(realin->n * sizeof(double)); + if (realout->vector == NULL) { printf("Clean_real.c: No memory available\n"); exit; } } - (*realout).n = (*realin).n; - (*realout).code = 1; + realout->n = realin->n; + realout->code = 1; for (k = 1; k <= grid.NZ; k++) { for (j = 1; j <= grid.NY; j++) { for (i = 1; i <= grid.NX; i++) { maille1 = i + (j - 1 + (k - 1) * n[1]) * n[0]; maille0 = i - 1 + (j - 1 + (k - 1) * grid.NY) * grid.NX; /* Modif du 18 juin 2003 */ - /*(*realout).vector[maille0] = vectorresult[maille1]/(double) NTOT;*/ - (*realout).vector[maille0] = vectorresult[maille1]; + /*realout->vector[maille0] = vectorresult[maille1]/(double) NTOT;*/ + realout->vector[maille0] = vectorresult[maille1]; } } } diff --git a/fftma_module/gen/lib_src/fftma2.c b/fftma_module/gen/lib_src/fftma2.c index 2b4fd58..b74d324 100644 --- a/fftma_module/gen/lib_src/fftma2.c +++ b/fftma_module/gen/lib_src/fftma2.c @@ -94,6 +94,4 @@ void FFTMA2(struct vario_mod variogram, struct grid_mod grid, int n[3], struct r clean_real(realin, n, grid, realization, realout); free(realization); - - return; } diff --git a/fftma_module/gen/lib_src/generate.c b/fftma_module/gen/lib_src/generate.c index 8f8f06a..99786e5 100644 --- a/fftma_module/gen/lib_src/generate.c +++ b/fftma_module/gen/lib_src/generate.c @@ -35,5 +35,5 @@ void generate(long* seed, int n, struct realization_mod* realization) for (i = 0; i < n; i++) (*realization).vector[i] = gasdev(seed, &idum2, &iy, iv, &iset); - return; + free(iv); } diff --git a/fftma_module/gen/lib_src/nor2log.c b/fftma_module/gen/lib_src/nor2log.c index 72dd830..09167f5 100644 --- a/fftma_module/gen/lib_src/nor2log.c +++ b/fftma_module/gen/lib_src/nor2log.c @@ -14,7 +14,7 @@ void nor2log(struct realization_mod* realin, int typelog, struct realization_mod* realout) { - + printf("Estoy en nor2log\n"); int i; double coeff; diff --git a/fftma_module/gen/moduleFFTMA.c b/fftma_module/gen/moduleFFTMA.c index b5fa6b1..ea8844d 100644 --- a/fftma_module/gen/moduleFFTMA.c +++ b/fftma_module/gen/moduleFFTMA.c @@ -18,13 +18,12 @@ #define NDIMENSIONS 3 /* Z is the GWN with 0-mean and 1-variance */ -/* Y1 is the realization with 0-mean and variance wanted */ /* Y is the realization with mean and variance wanted */ static PyObject* genFunc(PyObject* self, PyObject* args) { int n[3]; - struct realization_mod Z, Y, Y1; + struct realization_mod Z, Y; struct grid_mod grid; struct vario_mod variogram; long seed; @@ -34,7 +33,7 @@ static PyObject* genFunc(PyObject* self, PyObject* args) if (!Py_getvalues(args, &seed, &grid, &variogram, &stat)) return NULL; - Py_kgeneration(seed, grid, stat, variogram, &Z, &Y, &Y1, n); + Py_kgeneration(seed, grid, stat, variogram, &Z, &Y, n); out_dims[0] = grid.NZ; out_dims[1] = grid.NY; @@ -46,6 +45,14 @@ static PyObject* genFunc(PyObject* self, PyObject* args) PyArray_ENABLEFLAGS(out_array, NPY_ARRAY_OWNDATA); + free(stat.mean); + free(stat.variance); + free(variogram.var); + free(variogram.vario); + free(variogram.alpha); + free(variogram.scf); + free(variogram.ap); + free(Z.vector); return out_array; }