better fix for the alignment warning of the previous patch

'work' is a small, constant size array for temporary data so it can be
allocated on the stack and the 'work' parameter can be eliminated entirely.

Thanks to Bård Skaflestad for the suggestion!
This commit is contained in:
Andreas Lauser 2013-07-30 18:02:08 +02:00
parent 5a7992fc56
commit 31e7e7e01d
2 changed files with 6 additions and 9 deletions

View File

@ -139,7 +139,6 @@ spu_implicit(struct UnstructuredGrid *g, double *s0, double *s, double h, double
double infnorm;
double *b;
double *x;
double *work;
double *mob, *dmob;
int i;
int it;
@ -160,7 +159,6 @@ spu_implicit(struct UnstructuredGrid *g, double *s0, double *s, double h, double
b = malloc(nc * sizeof *b);
x = malloc(nc * sizeof *x);
work = malloc(6*sizeof (double));
mob = malloc(g->number_of_cells *2* sizeof *mob);
dmob = malloc(g->number_of_cells *2* sizeof *dmob);
@ -168,7 +166,7 @@ spu_implicit(struct UnstructuredGrid *g, double *s0, double *s, double h, double
it = 0;
while (infnorm > 1e-9 && it++ < 20) {
compute_mobilities(g->number_of_cells, s, mob, dmob, ntab, h, x0, tab);
spu_implicit_assemble(g, s0, s, mob, dmob, dflux, gflux, src, dt, S, b, work);
spu_implicit_assemble(g, s0, s, mob, dmob, dflux, gflux, src, dt, S, b);
/* Compute inf-norm of residual */
infnorm = 0.0;
@ -187,7 +185,6 @@ spu_implicit(struct UnstructuredGrid *g, double *s0, double *s, double h, double
}
}
free(work);
free(mob);
free(dmob);
@ -277,14 +274,14 @@ phase_upwind_mobility(double darcyflux, double gravityflux, int i, int c,
void
spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double *mob, double *dmob,
double *dflux, double *gflux, double *src, double dt, sparse_t *S,
double *b, double *work)
double *b)
{
int i, k, f, c1, c2, c;
int nc = g->number_of_cells;
double *m = (double*) work;
double *dm = m + 2;
int *cix = (int*)(dm + 2);
double m[6] = { 0, 0, 0, 0, 0, 0 };
double dm[2] = { 0, 0 };
int cix[2] = { 0, 0 };
double m1, m2, dm1, dm2, mt2;
int *pja;

View File

@ -19,7 +19,7 @@ typedef struct Sparse {
void
spu_implicit_assemble(struct UnstructuredGrid *g, double *s0, double *s, double *mob, double *dmob,
double *dflux, double *gflux, double *src, double dt, sparse_t *S,
double *b, double *work);
double *b);
double
spu_implicit(struct UnstructuredGrid *g, double *s0, double *s, double h, double x0, int ntab, double *tab,