mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
removed an extra uneeded call to the pressure solver
This commit is contained in:
parent
562573a078
commit
72a0db5f73
@ -16,12 +16,14 @@
|
|||||||
#include <opm/core/pressure/FlowBCManager.hpp>
|
#include <opm/core/pressure/FlowBCManager.hpp>
|
||||||
#include <opm/core/linalg/LinearSolverFactory.hpp>
|
#include <opm/core/linalg/LinearSolverFactory.hpp>
|
||||||
#include <opm/core/fluid/RockCompressibility.hpp>
|
#include <opm/core/fluid/RockCompressibility.hpp>
|
||||||
int main(int argc, char** argv) {
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
|
||||||
using namespace Opm::parameter;
|
using namespace Opm::parameter;
|
||||||
using namespace Opm;
|
using namespace Opm;
|
||||||
ParameterGroup parameters( argc, argv, false );
|
ParameterGroup parameters(argc, argv, false);
|
||||||
std::string file_name = parameters.getDefault<std::string>("inputdeck", "data.data");
|
std::string file_name = parameters.getDefault<std::string > ("inputdeck", "data.data");
|
||||||
|
|
||||||
SimulatorTimer simtimer;
|
SimulatorTimer simtimer;
|
||||||
simtimer.init(parameters);
|
simtimer.init(parameters);
|
||||||
@ -46,11 +48,11 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
// EXPERIMENT_ISTL
|
// EXPERIMENT_ISTL
|
||||||
IncompTpfa pressure_solver(*grid.c_grid(), incomp_properties.permeability(),
|
IncompTpfa pressure_solver(*grid.c_grid(), incomp_properties.permeability(),
|
||||||
gravity, linsolver, wells.c_wells());
|
gravity, linsolver, wells.c_wells());
|
||||||
|
|
||||||
|
|
||||||
std::vector<int> all_cells;
|
std::vector<int> all_cells;
|
||||||
for(int i = 0; i < grid.c_grid()->number_of_cells; i++) {
|
for (int i = 0; i < grid.c_grid()->number_of_cells; i++) {
|
||||||
all_cells.push_back(i);
|
all_cells.push_back(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,30 +92,30 @@ int main(int argc, char** argv) {
|
|||||||
computePorevolume(*grid.c_grid(), incomp_properties, porevol);
|
computePorevolume(*grid.c_grid(), incomp_properties, porevol);
|
||||||
}
|
}
|
||||||
if (rock_comp.isActive()) {
|
if (rock_comp.isActive()) {
|
||||||
std::vector<double> initial_pressure = state.pressure();
|
std::vector<double> initial_pressure = state.pressure();
|
||||||
std::vector<double> prev_pressure;
|
std::vector<double> prev_pressure;
|
||||||
for (int iter = 0; iter < nl_pressure_maxiter; ++iter) {
|
for (int iter = 0; iter < nl_pressure_maxiter; ++iter) {
|
||||||
prev_pressure = state.pressure();
|
prev_pressure = state.pressure();
|
||||||
for (int cell = 0; cell < num_cells; ++cell) {
|
for (int cell = 0; cell < num_cells; ++cell) {
|
||||||
rc[cell] = rock_comp.rockComp(state.pressure()[cell]);
|
rc[cell] = rock_comp.rockComp(state.pressure()[cell]);
|
||||||
}
|
}
|
||||||
state.pressure() = initial_pressure;
|
state.pressure() = initial_pressure;
|
||||||
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), porevol, rc, simtimer.currentStepLength(),
|
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), porevol, rc, simtimer.currentStepLength(),
|
||||||
state.pressure(), state.faceflux(), well_bhp, well_rate_per_cell);
|
state.pressure(), state.faceflux(), well_bhp, well_rate_per_cell);
|
||||||
double max_change = 0.0;
|
double max_change = 0.0;
|
||||||
for (int cell = 0; cell < num_cells; ++cell) {
|
for (int cell = 0; cell < num_cells; ++cell) {
|
||||||
max_change = std::max(max_change, std::fabs(state.pressure()[cell] - prev_pressure[cell]));
|
max_change = std::max(max_change, std::fabs(state.pressure()[cell] - prev_pressure[cell]));
|
||||||
}
|
}
|
||||||
std::cout << "Pressure iter " << iter << " max change = " << max_change << std::endl;
|
std::cout << "Pressure iter " << iter << " max change = " << max_change << std::endl;
|
||||||
if (max_change < nl_pressure_tolerance) {
|
if (max_change < nl_pressure_tolerance) {
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
computePorevolume(*grid.c_grid(), incomp_properties, rock_comp, state.pressure(), porevol);
|
|
||||||
} else {
|
|
||||||
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), state.pressure(), state.faceflux(),
|
|
||||||
well_bhp, well_rate_per_cell);
|
|
||||||
}
|
}
|
||||||
|
computePorevolume(*grid.c_grid(), incomp_properties, rock_comp, state.pressure(), porevol);
|
||||||
|
} else {
|
||||||
|
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), state.pressure(), state.faceflux(),
|
||||||
|
well_bhp, well_rate_per_cell);
|
||||||
|
}
|
||||||
|
|
||||||
// This will be refactored into a separate function once done.
|
// This will be refactored into a separate function once done.
|
||||||
const int np = incomp_properties.numPhases();
|
const int np = incomp_properties.numPhases();
|
||||||
@ -121,10 +123,10 @@ int main(int argc, char** argv) {
|
|||||||
for (int cell = 0; cell < grid.c_grid()->number_of_cells; ++cell) {
|
for (int cell = 0; cell < grid.c_grid()->number_of_cells; ++cell) {
|
||||||
double phase_sum = 0.0;
|
double phase_sum = 0.0;
|
||||||
for (int phase = 0; phase < np; ++phase) {
|
for (int phase = 0; phase < np; ++phase) {
|
||||||
phase_sum += phase_mob[cell*np + phase];
|
phase_sum += phase_mob[cell * np + phase];
|
||||||
}
|
}
|
||||||
for (int phase = 0; phase < np; ++phase) {
|
for (int phase = 0; phase < np; ++phase) {
|
||||||
fractional_flows[cell*np + phase] = phase_mob[cell*np + phase] / phase_sum;
|
fractional_flows[cell * np + phase] = phase_mob[cell * np + phase] / phase_sum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// End stuff that needs to be refactored into a seperated function
|
// End stuff that needs to be refactored into a seperated function
|
||||||
@ -132,11 +134,11 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
// This will be refactored into a separate function once done
|
// This will be refactored into a separate function once done
|
||||||
std::vector<double> well_resflows(wells.c_wells()->number_of_wells*np, 0.0);
|
std::vector<double> well_resflows(wells.c_wells()->number_of_wells*np, 0.0);
|
||||||
for ( int wix = 0; wix < wells.c_wells()->number_of_wells; ++wix) {
|
for (int wix = 0; wix < wells.c_wells()->number_of_wells; ++wix) {
|
||||||
for (int i = wells.c_wells()->well_connpos[wix]; i < wells.c_wells()->well_connpos[wix+1]; ++i) {
|
for (int i = wells.c_wells()->well_connpos[wix]; i < wells.c_wells()->well_connpos[wix + 1]; ++i) {
|
||||||
const int cell = wells.c_wells()->well_cells[i];
|
const int cell = wells.c_wells()->well_cells[i];
|
||||||
for (int phase = 0; phase < np; ++phase) {
|
for (int phase = 0; phase < np; ++phase) {
|
||||||
well_resflows[wix*np + phase] += well_rate_per_cell[i]*fractional_flows[cell*np + phase];
|
well_resflows[wix * np + phase] += well_rate_per_cell[i] * fractional_flows[cell * np + phase];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,7 +156,7 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
state.pressure() = initial_pressure;
|
state.pressure() = initial_pressure;
|
||||||
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), porevol, rc, simtimer.currentStepLength(),
|
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), porevol, rc, simtimer.currentStepLength(),
|
||||||
state.pressure(), state.faceflux(), well_bhp, well_rate_per_cell);
|
state.pressure(), state.faceflux(), well_bhp, well_rate_per_cell);
|
||||||
double max_change = 0.0;
|
double max_change = 0.0;
|
||||||
for (int cell = 0; cell < num_cells; ++cell) {
|
for (int cell = 0; cell < num_cells; ++cell) {
|
||||||
max_change = std::max(max_change, std::fabs(state.pressure()[cell] - prev_pressure[cell]));
|
max_change = std::max(max_change, std::fabs(state.pressure()[cell] - prev_pressure[cell]));
|
||||||
@ -167,7 +169,7 @@ int main(int argc, char** argv) {
|
|||||||
computePorevolume(*grid.c_grid(), incomp_properties, rock_comp, state.pressure(), porevol);
|
computePorevolume(*grid.c_grid(), incomp_properties, rock_comp, state.pressure(), porevol);
|
||||||
} else {
|
} else {
|
||||||
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), state.pressure(), state.faceflux(),
|
pressure_solver.solve(totmob, omega, src, wdp, bcs.c_bcs(), state.pressure(), state.faceflux(),
|
||||||
well_bhp, well_rate_per_cell);
|
well_bhp, well_rate_per_cell);
|
||||||
}
|
}
|
||||||
std::cout << "Solved" << std::endl;
|
std::cout << "Solved" << std::endl;
|
||||||
|
|
||||||
@ -193,19 +195,19 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
|
|
||||||
TwophaseFluid fluid(incomp_properties);
|
TwophaseFluid fluid(incomp_properties);
|
||||||
TransportModel model (fluid, *grid->c_grid(), porevol, gravity[2], true);
|
TransportModel model(fluid, *grid->c_grid(), porevol, gravity[2], true);
|
||||||
|
|
||||||
TransportSolver tsolver(model);
|
TransportSolver tsolver(model);
|
||||||
|
|
||||||
TransportSource* tsrc = create_transport_source(2, 2);
|
TransportSource* tsrc = create_transport_source(2, 2);
|
||||||
double ssrc[] = { 1.0, 0.0 };
|
double ssrc[] = {1.0, 0.0};
|
||||||
double ssink[] = { 0.0, 1.0 };
|
double ssink[] = {0.0, 1.0};
|
||||||
double zdummy[] = { 0.0, 0.0 };
|
double zdummy[] = {0.0, 0.0};
|
||||||
|
|
||||||
{
|
{
|
||||||
int well_cell_index = 0;
|
int well_cell_index = 0;
|
||||||
for (int well = 0; well < wells.c_wells()->number_of_wells; ++well) {
|
for (int well = 0; well < wells.c_wells()->number_of_wells; ++well) {
|
||||||
for( int cell = wells.c_wells()->well_connpos[well]; cell < wells.c_wells()->well_connpos[well + 1]; ++cell) {
|
for (int cell = wells.c_wells()->well_connpos[well]; cell < wells.c_wells()->well_connpos[well + 1]; ++cell) {
|
||||||
if (well_rate_per_cell[well_cell_index] > 0.0) {
|
if (well_rate_per_cell[well_cell_index] > 0.0) {
|
||||||
append_transport_source(well_cell_index, 2, 0,
|
append_transport_source(well_cell_index, 2, 0,
|
||||||
well_rate_per_cell[well_cell_index], ssrc, zdummy, tsrc);
|
well_rate_per_cell[well_cell_index], ssrc, zdummy, tsrc);
|
||||||
|
Loading…
Reference in New Issue
Block a user