From e52630f86d247a4b429913482ff848eab783d210 Mon Sep 17 00:00:00 2001 From: Oli Date: Thu, 2 Dec 2021 21:48:08 -0300 Subject: [PATCH] garbage collect array after generating --- fftma_module/gen/lib_src/clean_real.c | 4 ++-- fftma_module/gen/moduleFFTMA.c | 10 +++------- fftma_module/gen/test.py | 13 +++++++++---- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/fftma_module/gen/lib_src/clean_real.c b/fftma_module/gen/lib_src/clean_real.c index 46bd04c..d826832 100644 --- a/fftma_module/gen/lib_src/clean_real.c +++ b/fftma_module/gen/lib_src/clean_real.c @@ -15,13 +15,13 @@ 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) { + 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; diff --git a/fftma_module/gen/moduleFFTMA.c b/fftma_module/gen/moduleFFTMA.c index bc20fe6..ea8844d 100644 --- a/fftma_module/gen/moduleFFTMA.c +++ b/fftma_module/gen/moduleFFTMA.c @@ -28,12 +28,9 @@ static PyObject* genFunc(PyObject* self, PyObject* args) struct vario_mod variogram; long seed; struct statistic_mod stat; - PyArrayObject* out_array; + PyObject* out_array; npy_intp out_dims[NPY_MAXDIMS]; - out_array = (PyArrayObject *) PyArray_FromDims(NDIMENSIONS,out_dims,NPY_DOUBLE); - Y.vector = (double *) out_array->data; - if (!Py_getvalues(args, &seed, &grid, &variogram, &stat)) return NULL; Py_kgeneration(seed, grid, stat, variogram, &Z, &Y, n); @@ -42,12 +39,11 @@ static PyObject* genFunc(PyObject* self, PyObject* args) out_dims[1] = grid.NY; out_dims[2] = grid.NX; - out_array = (PyArrayObject*)PyArray_SimpleNewFromData(NDIMENSIONS, out_dims, NPY_DOUBLE, Y.vector); + out_array = PyArray_SimpleNewFromData(NDIMENSIONS, out_dims, NPY_DOUBLE, Y.vector); if (out_array == NULL) return NULL; - // PyArray_ENABLEFLAGS(out_array, NPY_ARRAY_OWNDATA); - // out_array->flags |= NPY_ARRAY_OWNDATA; + PyArray_ENABLEFLAGS(out_array, NPY_ARRAY_OWNDATA); free(stat.mean); free(stat.variance); diff --git a/fftma_module/gen/test.py b/fftma_module/gen/test.py index 2290995..6e537f4 100644 --- a/fftma_module/gen/test.py +++ b/fftma_module/gen/test.py @@ -1,7 +1,8 @@ from FFTMA import gen import numpy as np +import gc -N=128 +N=512 nx, ny, nz = N,N,N dx, dy, dz = 1.0, 1.0, 1.0 @@ -24,8 +25,12 @@ variograms = [v1] mean=15.3245987 variance=3.5682389 -typ=1 +typ=3 -k=gen(nx, ny, nz, dx, dy, dz, seed, variograms, mean, variance, typ) +for i in range(2): + k=gen(nx, ny, nz, dx, dy, dz, seed, variograms, mean, variance, typ) -np.save("out.npy",k) \ No newline at end of file + np.save(f"out_{i}.npy",k) + + del k + gc.collect() \ No newline at end of file