Free some memory

milestone_5_without_improvements
chortas 3 years ago
parent ab8d288b09
commit 9ebb8b1e24

@ -12,4 +12,4 @@
#include <string.h>
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]);

@ -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)

@ -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;
}

@ -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];
}
}
}

@ -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;
}

@ -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);
}

@ -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;

@ -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;
}

Loading…
Cancel
Save