Free some memory

milestone_5_without_improvements
chortas 3 years ago
parent ab8d288b09
commit 9ebb8b1e24

@ -12,4 +12,4 @@
#include <string.h> #include <string.h>
int Py_getvalues(PyObject*, long*, struct grid_mod*, struct vario_mod*, struct statistic_mod*); 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) if (stat->mean == NULL)
return 0; return 0;
stat->variance = (double*)malloc(stat->nblock_var * sizeof(double)); stat->variance = (double*)malloc(stat->nblock_var * sizeof(double));
if (stat->variance == NULL) if (stat->variance == NULL) {
free(stat->mean);
return 0; return 0;
}
if (!PyArg_ParseTuple(args, "iiidddlO!ddi", /*"iiidddslO!ddi",*/ if (!PyArg_ParseTuple(args, "iiidddlO!ddi", /*"iiidddslO!ddi",*/
&(grid->NX), &(grid->NX),
@ -68,26 +70,54 @@ int Py_getvalues(PyObject* args, long* seed, struct grid_mod* grid, struct vario
&PyList_Type, &listvario, &PyList_Type, &listvario,
stat->mean + 0, stat->mean + 0,
stat->variance + 0, stat->variance + 0,
&(stat->type))) &(stat->type))) {
free(stat->mean);
free(stat->variance);
return 0; return 0;
}
variogram->Nvario = PyList_Size(listvario); variogram->Nvario = PyList_Size(listvario);
variogram->var = (double*)malloc(variogram->Nvario * sizeof(double)); variogram->var = (double*)malloc(variogram->Nvario * sizeof(double));
if (variogram->var == NULL) if (variogram->var == NULL) {
free(stat->mean);
free(stat->variance);
return 0; return 0;
}
variogram->vario = (int*)malloc(variogram->Nvario * sizeof(int)); 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; return 0;
}
variogram->alpha = (double*)malloc(variogram->Nvario * sizeof(double)); 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; return 0;
}
variogram->scf = (double*)malloc(3 * variogram->Nvario * sizeof(double)); 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; return 0;
}
variogram->ap = (double*)malloc(9 * variogram->Nvario * sizeof(double)); 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; return 0;
}
for (i = 0; i < variogram->Nvario; i++) { for (i = 0; i < variogram->Nvario; i++) {
vgr = PyList_GetItem(listvario, i); vgr = PyList_GetItem(listvario, i);
if (PyTuple_Size(vgr) != 12) if (PyTuple_Size(vgr) != 12)

@ -14,10 +14,9 @@
/* kgeneration */ /* kgeneration */
/* Z is the GWN with 0-mean and 1-variance */ /* 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 */ /* 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 i, N;
int typelog; int typelog;
@ -33,17 +32,9 @@ void Py_kgeneration(long seed, struct grid_mod grid, struct statistic_mod stat,
/*FFTMA*/ /*FFTMA*/
FFTMA2(variogram, grid, n, Z, Y); 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 */ /* make a log normal realization */
if (stat.type == 1 || stat.type == 2) { if (stat.type == 1 || stat.type == 2) {
typelog = stat.type + 2; typelog = stat.type + 2;
/* nor2log(Y1,typelog,Y1); */
nor2log(Y, typelog, Y); 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?*/ /*is the output realization already allocated?*/
/*if not, memory allocation*/ /*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)); realout->vector = (double*)malloc(realin->n * sizeof(double));
if ((*realout).vector == NULL) { if (realout->vector == NULL) {
printf("Clean_real.c: No memory available\n"); printf("Clean_real.c: No memory available\n");
exit; exit;
} }
} }
(*realout).n = (*realin).n; realout->n = realin->n;
(*realout).code = 1; realout->code = 1;
for (k = 1; k <= grid.NZ; k++) { for (k = 1; k <= grid.NZ; k++) {
for (j = 1; j <= grid.NY; j++) { for (j = 1; j <= grid.NY; j++) {
for (i = 1; i <= grid.NX; i++) { for (i = 1; i <= grid.NX; i++) {
maille1 = i + (j - 1 + (k - 1) * n[1]) * n[0]; maille1 = i + (j - 1 + (k - 1) * n[1]) * n[0];
maille0 = i - 1 + (j - 1 + (k - 1) * grid.NY) * grid.NX; maille0 = i - 1 + (j - 1 + (k - 1) * grid.NY) * grid.NX;
/* Modif du 18 juin 2003 */ /* Modif du 18 juin 2003 */
/*(*realout).vector[maille0] = vectorresult[maille1]/(double) NTOT;*/ /*realout->vector[maille0] = vectorresult[maille1]/(double) NTOT;*/
(*realout).vector[maille0] = vectorresult[maille1]; 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); clean_real(realin, n, grid, realization, realout);
free(realization); free(realization);
return;
} }

@ -35,5 +35,5 @@ void generate(long* seed, int n, struct realization_mod* realization)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
(*realization).vector[i] = gasdev(seed, &idum2, &iy, iv, &iset); (*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) void nor2log(struct realization_mod* realin, int typelog, struct realization_mod* realout)
{ {
printf("Estoy en nor2log\n");
int i; int i;
double coeff; double coeff;

@ -18,13 +18,12 @@
#define NDIMENSIONS 3 #define NDIMENSIONS 3
/* Z is the GWN with 0-mean and 1-variance */ /* 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 */ /* Y is the realization with mean and variance wanted */
static PyObject* genFunc(PyObject* self, PyObject* args) static PyObject* genFunc(PyObject* self, PyObject* args)
{ {
int n[3]; int n[3];
struct realization_mod Z, Y, Y1; struct realization_mod Z, Y;
struct grid_mod grid; struct grid_mod grid;
struct vario_mod variogram; struct vario_mod variogram;
long seed; long seed;
@ -34,7 +33,7 @@ static PyObject* genFunc(PyObject* self, PyObject* args)
if (!Py_getvalues(args, &seed, &grid, &variogram, &stat)) if (!Py_getvalues(args, &seed, &grid, &variogram, &stat))
return NULL; 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[0] = grid.NZ;
out_dims[1] = grid.NY; out_dims[1] = grid.NY;
@ -46,6 +45,14 @@ static PyObject* genFunc(PyObject* self, PyObject* args)
PyArray_ENABLEFLAGS(out_array, NPY_ARRAY_OWNDATA); 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; return out_array;
} }

Loading…
Cancel
Save