Factor pressure (increment) assignment out of _press_flux().

The linear solution h->x is the pressure increment, not the actual
pressure value, so we cannot compute fluxes based on h->x alone.
This commit is contained in:
Bård Skaflestad 2011-10-17 11:05:04 +02:00
parent 9610763e07
commit 9b0b258198
2 changed files with 51 additions and 31 deletions

View File

@ -992,34 +992,48 @@ cfs_tpfa_assemble(grid_t *G,
/* ---------------------------------------------------------------------- */
void
cfs_tpfa_press_flux(grid_t *G,
flowbc_t *bc,
well_t *W,
int np,
const double *trans,
const double *pmobf,
const double *gravcap_f,
struct completion_data *wdata,
struct cfs_tpfa_data *h,
double *cpress,
double *fflux,
double *wpress,
double *wflux)
cfs_tpfa_press_increment(grid_t *G,
well_t *W,
struct cfs_tpfa_data *h,
double *cpress_inc,
double *wpress_inc)
/* ---------------------------------------------------------------------- */
{
/* Assign cell pressure directly from solution vector */
memcpy(cpress, h->x, G->number_of_cells * sizeof *cpress);
memcpy(cpress_inc, h->x, G->number_of_cells * sizeof *cpress_inc);
if (W != NULL) {
assert (wpress_inc != NULL);
/* Assign well BHP directly from solution vector */
memcpy(wpress_inc, h->x + G->number_of_cells,
W->number_of_wells * sizeof *wpress_inc);
}
}
/* ---------------------------------------------------------------------- */
void
cfs_tpfa_flux(grid_t *G,
flowbc_t *bc,
well_t *W,
int np,
const double *trans,
const double *pmobf,
const double *gravcap_f,
const double *cpress,
const double *wpress,
struct completion_data *wdata,
double *fflux,
double *wflux)
/* ---------------------------------------------------------------------- */
{
compute_flux(G, bc, np, trans, pmobf, gravcap_f, cpress, fflux);
if ((W != NULL) && (wdata != NULL)) {
assert (wpress != NULL);
assert (wflux != NULL);
/* Assign well BHP directly from solution vector */
memcpy(wpress, h->x + G->number_of_cells,
W->number_of_wells * sizeof *wpress);
compute_wflux(W, np, wdata, cpress, wpress, wflux);
}
}

View File

@ -60,19 +60,25 @@ cfs_tpfa_assemble(grid_t *G,
struct cfs_tpfa_data *h);
void
cfs_tpfa_press_flux(grid_t *G,
flowbc_t *bc,
well_t *W,
int np,
const double *trans,
const double *pmobf,
const double *gravcap_f,
struct completion_data *wdata,
struct cfs_tpfa_data *h,
double *cpress,
double *fflux,
double *wpress,
double *wflux);
cfs_tpfa_press_increment(grid_t *G,
well_t *W,
struct cfs_tpfa_data *h,
double *cpress_inc,
double *wpress_inc);
void
cfs_tpfa_flux(grid_t *G,
flowbc_t *bc,
well_t *W,
int np,
const double *trans,
const double *pmobf,
const double *gravcap_f,
const double *cpress,
const double *wpress,
struct completion_data *wdata,
double *fflux,
double *wflux);
void
cfs_tpfa_fpress(grid_t *G,