Renames classes in line with opm-core changes.

This commit is contained in:
Atgeirr Flø Rasmussen 2013-03-15 18:33:41 +01:00
parent 04abba4d5e
commit c16cb6987b
7 changed files with 161 additions and 161 deletions

View File

@ -44,7 +44,7 @@
#include <opm/polymer/PolymerState.hpp>
#include <opm/core/simulator/WellState.hpp>
#include <opm/polymer/IncompTpfaPolymer.hpp>
#include <opm/polymer/TransportModelPolymer.hpp>
#include <opm/polymer/TransportSolverTwophasePolymer.hpp>
#include <opm/polymer/PolymerProperties.hpp>
#include <boost/scoped_ptr.hpp>
@ -154,22 +154,22 @@ main(int argc, char** argv)
// Reordering solver.
const double nl_tolerance = param.getDefault("nl_tolerance", 1e-9);
const int nl_maxiter = param.getDefault("nl_maxiter", 30);
Opm::TransportModelPolymer::SingleCellMethod method;
Opm::TransportSolverTwophasePolymer::SingleCellMethod method;
std::string method_string = param.getDefault("single_cell_method", std::string("Bracketing"));
if (method_string == "Bracketing") {
method = Opm::TransportModelPolymer::Bracketing;
method = Opm::TransportSolverTwophasePolymer::Bracketing;
} else if (method_string == "Newton") {
method = Opm::TransportModelPolymer::Newton;
method = Opm::TransportSolverTwophasePolymer::Newton;
} else if (method_string == "Gradient") {
method = Opm::TransportModelPolymer::Gradient;
method = Opm::TransportSolverTwophasePolymer::Gradient;
} else if (method_string == "NewtonSimpleSC") {
method = Opm::TransportModelPolymer::NewtonSimpleSC;
method = Opm::TransportSolverTwophasePolymer::NewtonSimpleSC;
} else if (method_string == "NewtonSimpleC") {
method = Opm::TransportModelPolymer::NewtonSimpleC;
method = Opm::TransportSolverTwophasePolymer::NewtonSimpleC;
} else {
THROW("Unknown method: " << method_string);
}
Opm::TransportModelPolymer reorder_model(*grid->c_grid(), *props, poly_props,
Opm::TransportSolverTwophasePolymer reorder_model(*grid->c_grid(), *props, poly_props,
method, nl_tolerance, nl_maxiter);
// Warn if any parameters are unused.
@ -187,7 +187,7 @@ main(int argc, char** argv)
// but the compressibility term in the solver
// assumes that all inflow is water inflow. Therefore
// one must zero the compressibility term in
// TransportModelPolymer line 365 before compiling this program.
// TransportSolverTwophasePolymer line 365 before compiling this program.
// (To fix this we should add proper all-phase src terms.)
std::vector<double> transport_src = src;
const double dt = param.getDefault("dt", 1.0);
@ -232,7 +232,7 @@ main(int argc, char** argv)
#ifdef PROFILING
// Extract residual counts.
typedef std::list<Opm::TransportModelPolymer::Newton_Iter> ListRes;
typedef std::list<Opm::TransportSolverTwophasePolymer::Newton_Iter> ListRes;
const ListRes& res_counts = reorder_model.res_counts;
double counts[2] = { 0, 0 };
for (ListRes::const_iterator it = res_counts.begin(); it != res_counts.end(); ++it) {

View File

@ -47,7 +47,7 @@
#include <opm/core/utility/Units.hpp>
#include <opm/polymer/PolymerBlackoilState.hpp>
#include <opm/core/simulator/WellState.hpp>
#include <opm/polymer/TransportModelCompressiblePolymer.hpp>
#include <opm/polymer/TransportSolverTwophaseCompressiblePolymer.hpp>
#include <opm/polymer/PolymerInflow.hpp>
#include <opm/polymer/PolymerProperties.hpp>
#include <opm/polymer/polymerUtilities.hpp>
@ -130,7 +130,7 @@ namespace Opm
const double* gravity_;
// Solvers
CompressibleTpfaPolymer psolver_;
TransportModelCompressiblePolymer tsolver_;
TransportSolverTwophaseCompressiblePolymer tsolver_;
// Needed by column-based gravity segregation solver.
std::vector< std::vector<int> > columns_;
// Misc. data
@ -198,7 +198,7 @@ namespace Opm
param.getDefault("nl_pressure_maxiter", 10),
gravity, wells_manager.c_wells()),
tsolver_(grid, props, poly_props,
TransportModelCompressiblePolymer::Bracketing,
TransportSolverTwophaseCompressiblePolymer::Bracketing,
param.getDefault("nl_tolerance", 1e-9),
param.getDefault("nl_maxiter", 30))
{
@ -223,12 +223,12 @@ namespace Opm
max_well_control_iterations_ = param.getDefault("max_well_control_iterations", 10);
// Transport related init.
TransportModelCompressiblePolymer::SingleCellMethod method;
TransportSolverTwophaseCompressiblePolymer::SingleCellMethod method;
std::string method_string = param.getDefault("single_cell_method", std::string("Bracketing"));
if (method_string == "Bracketing") {
method = Opm::TransportModelCompressiblePolymer::Bracketing;
method = Opm::TransportSolverTwophaseCompressiblePolymer::Bracketing;
} else if (method_string == "Newton") {
method = Opm::TransportModelCompressiblePolymer::Newton;
method = Opm::TransportSolverTwophaseCompressiblePolymer::Newton;
} else {
THROW("Unknown method: " << method_string);
}

View File

@ -47,7 +47,7 @@
#include <opm/core/utility/Units.hpp>
#include <opm/polymer/PolymerState.hpp>
#include <opm/core/simulator/WellState.hpp>
#include <opm/polymer/TransportModelPolymer.hpp>
#include <opm/polymer/TransportSolverTwophasePolymer.hpp>
#include <opm/polymer/PolymerInflow.hpp>
#include <opm/polymer/PolymerProperties.hpp>
#include <opm/polymer/polymerUtilities.hpp>
@ -141,7 +141,7 @@ namespace Opm
const double* gravity_;
// Solvers
IncompTpfaPolymer psolver_;
TransportModelPolymer tsolver_;
TransportSolverTwophasePolymer tsolver_;
// Needed by column-based gravity segregation solver.
std::vector< std::vector<int> > columns_;
// Misc. data
@ -208,7 +208,7 @@ namespace Opm
param.getDefault("nl_pressure_change_tolerance", 1.0),
param.getDefault("nl_pressure_maxiter", 10),
gravity, wells_manager.c_wells(), src, bcs),
tsolver_(grid, props, poly_props, TransportModelPolymer::Bracketing,
tsolver_(grid, props, poly_props, TransportSolverTwophasePolymer::Bracketing,
param.getDefault("nl_tolerance", 1e-9),
param.getDefault("nl_maxiter", 30))
{
@ -239,12 +239,12 @@ namespace Opm
max_well_control_iterations_ = param.getDefault("max_well_control_iterations", 10);
// Transport related init.
TransportModelPolymer::SingleCellMethod method;
TransportSolverTwophasePolymer::SingleCellMethod method;
std::string method_string = param.getDefault("single_cell_method", std::string("Bracketing"));
if (method_string == "Bracketing") {
method = Opm::TransportModelPolymer::Bracketing;
method = Opm::TransportSolverTwophasePolymer::Bracketing;
} else if (method_string == "Newton") {
method = Opm::TransportModelPolymer::Newton;
method = Opm::TransportSolverTwophasePolymer::Newton;
} else {
THROW("Unknown method: " << method_string);
}

View File

@ -18,7 +18,7 @@
*/
#include <opm/polymer/TransportModelCompressiblePolymer.hpp>
#include <opm/polymer/TransportSolverTwophaseCompressiblePolymer.hpp>
#include <opm/core/props/BlackoilPropertiesInterface.hpp>
#include <opm/core/grid.h>
#include <opm/core/transport/reorder/reordersequence.h>
@ -33,7 +33,7 @@
typedef Opm::RegulaFalsi<Opm::WarnAndContinueOnError> RootFinder;
class Opm::TransportModelCompressiblePolymer::ResidualEquation
class Opm::TransportSolverTwophaseCompressiblePolymer::ResidualEquation
{
public:
GradientMethod gradient_method;
@ -55,9 +55,9 @@ public:
double rhor;
double ads0;
TransportModelCompressiblePolymer& tm;
TransportSolverTwophaseCompressiblePolymer& tm;
ResidualEquation(TransportModelCompressiblePolymer& tmodel, int cell_index);
ResidualEquation(TransportSolverTwophaseCompressiblePolymer& tmodel, int cell_index);
void computeResidual(const double* x, double* res) const;
void computeResidual(const double* x, double* res, double& mc, double& ff) const;
double computeResidualS(const double* x) const;
@ -75,9 +75,9 @@ private:
double* dres_c_dsdc, double& mc, double& ff) const;
};
class Opm::TransportModelCompressiblePolymer::ResidualCGrav {
class Opm::TransportSolverTwophaseCompressiblePolymer::ResidualCGrav {
public:
const TransportModelCompressiblePolymer& tm;
const TransportSolverTwophaseCompressiblePolymer& tm;
const int cell;
const double s0;
const double c0;
@ -92,7 +92,7 @@ public:
int nbcell[2];
mutable double last_s;
ResidualCGrav(const TransportModelCompressiblePolymer& tmodel,
ResidualCGrav(const TransportSolverTwophaseCompressiblePolymer& tmodel,
const std::vector<int>& cells,
const int pos,
const double* gravflux);
@ -103,7 +103,7 @@ public:
double lastSaturation() const;
};
class Opm::TransportModelCompressiblePolymer::ResidualSGrav {
class Opm::TransportSolverTwophaseCompressiblePolymer::ResidualSGrav {
public:
const ResidualCGrav& res_c_eq_;
double c;
@ -151,7 +151,7 @@ namespace
namespace Opm
{
TransportModelCompressiblePolymer::TransportModelCompressiblePolymer(const UnstructuredGrid& grid,
TransportSolverTwophaseCompressiblePolymer::TransportSolverTwophaseCompressiblePolymer(const UnstructuredGrid& grid,
const BlackoilPropertiesInterface& props,
const PolymerProperties& polyprops,
const SingleCellMethod method,
@ -202,7 +202,7 @@ namespace Opm
void TransportModelCompressiblePolymer::setPreferredMethod(SingleCellMethod method)
void TransportSolverTwophaseCompressiblePolymer::setPreferredMethod(SingleCellMethod method)
{
method_ = method;
}
@ -210,7 +210,7 @@ namespace Opm
void TransportModelCompressiblePolymer::solve(const double* darcyflux,
void TransportSolverTwophaseCompressiblePolymer::solve(const double* darcyflux,
const std::vector<double>& initial_pressure,
const std::vector<double>& pressure,
const double* porevolume0,
@ -243,7 +243,7 @@ namespace Opm
// Check immiscibility requirement (only done for first cell).
if (A_[1] != 0.0 || A_[2] != 0.0) {
THROW("TransportCompressibleModelCompressibleTwophase requires a property object without miscibility.");
THROW("TransportCompressibleSolverTwophaseCompressibleTwophase requires a property object without miscibility.");
}
std::vector<int> seq(grid_.number_of_cells);
std::vector<int> comp(grid_.number_of_cells + 1);
@ -273,11 +273,11 @@ namespace Opm
//
// where influx is water influx, outflux is total outflux.
// Influxes are negative, outfluxes positive.
struct TransportModelCompressiblePolymer::ResidualS
struct TransportSolverTwophaseCompressiblePolymer::ResidualS
{
TransportModelCompressiblePolymer::ResidualEquation& res_eq_;
TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq_;
const double c_;
explicit ResidualS(TransportModelCompressiblePolymer::ResidualEquation& res_eq,
explicit ResidualS(TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq,
const double c)
: res_eq_(res_eq),
c_(c)
@ -298,11 +298,11 @@ namespace Opm
// \TODO doc me
// where ...
// Influxes are negative, outfluxes positive.
struct TransportModelCompressiblePolymer::ResidualC
struct TransportSolverTwophaseCompressiblePolymer::ResidualC
{
mutable double s; // Mutable in order to change it with every operator() call to be the last computed s value.
TransportModelCompressiblePolymer::ResidualEquation& res_eq_;
explicit ResidualC(TransportModelCompressiblePolymer::ResidualEquation& res_eq)
TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq_;
explicit ResidualC(TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq)
: res_eq_(res_eq)
{}
@ -346,7 +346,7 @@ namespace Opm
// ResidualEquation gathers parameters to construct the residual, computes its
// value and the values of its derivatives.
TransportModelCompressiblePolymer::ResidualEquation::ResidualEquation(TransportModelCompressiblePolymer& tmodel, int cell_index)
TransportSolverTwophaseCompressiblePolymer::ResidualEquation::ResidualEquation(TransportSolverTwophaseCompressiblePolymer& tmodel, int cell_index)
: tm(tmodel)
{
gradient_method = Analytic;
@ -399,7 +399,7 @@ namespace Opm
}
void TransportModelCompressiblePolymer::ResidualEquation::computeResidual(const double* x, double* res) const
void TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeResidual(const double* x, double* res) const
{
double dres_s_dsdc[2];
double dres_c_dsdc[2];
@ -408,7 +408,7 @@ namespace Opm
computeResAndJacobi(x, true, true, false, false, res, dres_s_dsdc, dres_c_dsdc, mc, ff);
}
void TransportModelCompressiblePolymer::ResidualEquation::computeResidual(const double* x, double* res, double& mc, double& ff) const
void TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeResidual(const double* x, double* res, double& mc, double& ff) const
{
double dres_s_dsdc[2];
double dres_c_dsdc[2];
@ -416,7 +416,7 @@ namespace Opm
}
double TransportModelCompressiblePolymer::ResidualEquation::computeResidualS(const double* x) const
double TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeResidualS(const double* x) const
{
double res[2];
double dres_s_dsdc[2];
@ -427,7 +427,7 @@ namespace Opm
return res[0];
}
double TransportModelCompressiblePolymer::ResidualEquation::computeResidualC(const double* x) const
double TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeResidualC(const double* x) const
{
double res[2];
double dres_s_dsdc[2];
@ -438,7 +438,7 @@ namespace Opm
return res[1];
}
void TransportModelCompressiblePolymer::ResidualEquation::computeGradientResS(const double* x, double* res, double* gradient) const
void TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeGradientResS(const double* x, double* res, double* gradient) const
// If gradient_method == FinDif, use finite difference
// If gradient_method == Analytic, use analytic expresions
{
@ -448,7 +448,7 @@ namespace Opm
computeResAndJacobi(x, true, true, true, false, res, gradient, dres_c_dsdc, mc, ff);
}
void TransportModelCompressiblePolymer::ResidualEquation::computeGradientResC(const double* x, double* res, double* gradient) const
void TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeGradientResC(const double* x, double* res, double* gradient) const
// If gradient_method == FinDif, use finite difference
// If gradient_method == Analytic, use analytic expresions
{
@ -459,7 +459,7 @@ namespace Opm
}
// Compute the Jacobian of the residual equations.
void TransportModelCompressiblePolymer::ResidualEquation::computeJacobiRes(const double* x, double* dres_s_dsdc, double* dres_c_dsdc) const
void TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeJacobiRes(const double* x, double* dres_s_dsdc, double* dres_c_dsdc) const
{
double res[2];
double mc;
@ -467,7 +467,7 @@ namespace Opm
computeResAndJacobi(x, false, false, true, true, res, dres_s_dsdc, dres_c_dsdc, mc, ff);
}
void TransportModelCompressiblePolymer::ResidualEquation::computeResAndJacobi(const double* x, const bool if_res_s, const bool if_res_c,
void TransportSolverTwophaseCompressiblePolymer::ResidualEquation::computeResAndJacobi(const double* x, const bool if_res_s, const bool if_res_c,
const bool if_dres_s_dsdc, const bool if_dres_c_dsdc,
double* res, double* dres_s_dsdc,
double* dres_c_dsdc, double& mc, double& ff) const
@ -567,34 +567,34 @@ namespace Opm
// Compute the "s" residual along the curve "curve" for a given residual equation "res_eq".
// The operator() is sent to a root solver.
class TransportModelCompressiblePolymer::ResSOnCurve
class TransportSolverTwophaseCompressiblePolymer::ResSOnCurve
{
public:
ResSOnCurve(const TransportModelCompressiblePolymer::ResidualEquation& res_eq);
ResSOnCurve(const TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq);
double operator()(const double t) const;
CurveInSCPlane curve;
private:
const TransportModelCompressiblePolymer::ResidualEquation& res_eq_;
const TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq_;
};
// Compute the "c" residual along the curve "curve" for a given residual equation "res_eq".
// The operator() is sent to a root solver.
class TransportModelCompressiblePolymer::ResCOnCurve
class TransportSolverTwophaseCompressiblePolymer::ResCOnCurve
{
public:
ResCOnCurve(const TransportModelCompressiblePolymer::ResidualEquation& res_eq);
ResCOnCurve(const TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq);
double operator()(const double t) const;
CurveInSCPlane curve;
private:
const TransportModelCompressiblePolymer::ResidualEquation& res_eq_;
const TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq_;
};
TransportModelCompressiblePolymer::ResSOnCurve::ResSOnCurve(const TransportModelCompressiblePolymer::ResidualEquation& res_eq)
TransportSolverTwophaseCompressiblePolymer::ResSOnCurve::ResSOnCurve(const TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq)
: res_eq_(res_eq)
{
}
double TransportModelCompressiblePolymer::ResSOnCurve::operator()(const double t) const
double TransportSolverTwophaseCompressiblePolymer::ResSOnCurve::operator()(const double t) const
{
double x_of_t[2];
double x_c[2];
@ -603,12 +603,12 @@ namespace Opm
return res_eq_.computeResidualS(x_c);
}
TransportModelCompressiblePolymer::ResCOnCurve::ResCOnCurve(const TransportModelCompressiblePolymer::ResidualEquation& res_eq)
TransportSolverTwophaseCompressiblePolymer::ResCOnCurve::ResCOnCurve(const TransportSolverTwophaseCompressiblePolymer::ResidualEquation& res_eq)
: res_eq_(res_eq)
{
}
double TransportModelCompressiblePolymer::ResCOnCurve::operator()(const double t) const
double TransportSolverTwophaseCompressiblePolymer::ResCOnCurve::operator()(const double t) const
{
double x_of_t[2];
double x_c[2];
@ -619,7 +619,7 @@ namespace Opm
void TransportModelCompressiblePolymer::solveSingleCell(const int cell)
void TransportSolverTwophaseCompressiblePolymer::solveSingleCell(const int cell)
{
switch (method_) {
case Bracketing:
@ -640,7 +640,7 @@ namespace Opm
}
void TransportModelCompressiblePolymer::solveSingleCellBracketing(int cell)
void TransportSolverTwophaseCompressiblePolymer::solveSingleCellBracketing(int cell)
{
ResidualEquation res_eq(*this, cell);
@ -672,7 +672,7 @@ namespace Opm
// Newton method, where we first try a Newton step. Then, if it does not work well, we look for
// the zero of either the residual in s or the residual in c along a specified piecewise linear
// curve. In these cases, we can use a robust 1d solver.
void TransportModelCompressiblePolymer::solveSingleCellGradient(int cell)
void TransportSolverTwophaseCompressiblePolymer::solveSingleCellGradient(int cell)
{
int iters_used_falsi = 0;
const int max_iters_split = maxit_;
@ -829,7 +829,7 @@ namespace Opm
}
}
void TransportModelCompressiblePolymer::solveSingleCellNewton(int cell, bool use_sc,
void TransportSolverTwophaseCompressiblePolymer::solveSingleCellNewton(int cell, bool use_sc,
bool use_explicit_step)
{
const int max_iters_split = maxit_;
@ -975,7 +975,7 @@ namespace Opm
}
void TransportModelCompressiblePolymer::solveMultiCell(const int num_cells, const int* cells)
void TransportSolverTwophaseCompressiblePolymer::solveMultiCell(const int num_cells, const int* cells)
{
double max_s_change = 0.0;
double max_c_change = 0.0;
@ -1032,21 +1032,21 @@ namespace Opm
// << num_iters << " iterations." << std::endl;
}
void TransportModelCompressiblePolymer::fracFlow(double s, double c, double cmax,
void TransportSolverTwophaseCompressiblePolymer::fracFlow(double s, double c, double cmax,
int cell, double& ff) const
{
double dummy[2];
fracFlowBoth(s, c, cmax, cell, ff, dummy, false);
}
void TransportModelCompressiblePolymer::fracFlowWithDer(double s, double c, double cmax,
void TransportSolverTwophaseCompressiblePolymer::fracFlowWithDer(double s, double c, double cmax,
int cell, double& ff,
double* dff_dsdc) const
{
fracFlowBoth(s, c, cmax, cell, ff, dff_dsdc, true);
}
void TransportModelCompressiblePolymer::fracFlowBoth(double s, double c, double cmax, int cell,
void TransportSolverTwophaseCompressiblePolymer::fracFlowBoth(double s, double c, double cmax, int cell,
double& ff, double* dff_dsdc,
bool if_with_der) const
{
@ -1077,12 +1077,12 @@ namespace Opm
}
}
void TransportModelCompressiblePolymer::computeMc(double c, double& mc) const
void TransportSolverTwophaseCompressiblePolymer::computeMc(double c, double& mc) const
{
polyprops_.computeMc(c, mc);
}
void TransportModelCompressiblePolymer::computeMcWithDer(double c, double& mc,
void TransportSolverTwophaseCompressiblePolymer::computeMcWithDer(double c, double& mc,
double &dmc_dc) const
{
polyprops_.computeMcWithDer(c, mc, dmc_dc);
@ -1090,14 +1090,14 @@ namespace Opm
TransportModelCompressiblePolymer::ResidualSGrav::ResidualSGrav(const ResidualCGrav& res_c_eq,
TransportSolverTwophaseCompressiblePolymer::ResidualSGrav::ResidualSGrav(const ResidualCGrav& res_c_eq,
const double c_init)
: res_c_eq_(res_c_eq),
c(c_init)
{
}
double TransportModelCompressiblePolymer::ResidualSGrav::operator()(double s) const
double TransportSolverTwophaseCompressiblePolymer::ResidualSGrav::operator()(double s) const
{
return res_c_eq_.computeGravResidualS(s, c);
}
@ -1113,7 +1113,7 @@ namespace Opm
// where ...
// Influxes are negative, outfluxes positive.
TransportModelCompressiblePolymer::ResidualCGrav::ResidualCGrav(const TransportModelCompressiblePolymer& tmodel,
TransportSolverTwophaseCompressiblePolymer::ResidualCGrav::ResidualCGrav(const TransportSolverTwophaseCompressiblePolymer& tmodel,
const std::vector<int>& cells,
const int pos,
const double* gravflux) // Always oriented towards next in column. Size = colsize - 1.
@ -1146,7 +1146,7 @@ namespace Opm
tm.polyprops_.adsorption(c0, cmax0, c_ads0);
}
double TransportModelCompressiblePolymer::ResidualCGrav::operator()(double c) const
double TransportSolverTwophaseCompressiblePolymer::ResidualCGrav::operator()(double c) const
{
ResidualSGrav res_s(*this);
@ -1159,7 +1159,7 @@ namespace Opm
}
double TransportModelCompressiblePolymer::ResidualCGrav::computeGravResidualS(double s, double c) const
double TransportSolverTwophaseCompressiblePolymer::ResidualCGrav::computeGravResidualS(double s, double c) const
{
double mobcell[2];
@ -1185,7 +1185,7 @@ namespace Opm
return res;
}
double TransportModelCompressiblePolymer::ResidualCGrav::computeGravResidualC(double s, double c) const
double TransportSolverTwophaseCompressiblePolymer::ResidualCGrav::computeGravResidualC(double s, double c) const
{
double mobcell[2];
@ -1216,13 +1216,13 @@ namespace Opm
return res;
}
double TransportModelCompressiblePolymer::ResidualCGrav::lastSaturation() const
double TransportSolverTwophaseCompressiblePolymer::ResidualCGrav::lastSaturation() const
{
return last_s;
}
void TransportModelCompressiblePolymer::mobility(double s, double c, int cell, double* mob) const
void TransportSolverTwophaseCompressiblePolymer::mobility(double s, double c, int cell, double* mob) const
{
double sat[2] = { s, 1.0 - s };
double relperm[2];
@ -1231,7 +1231,7 @@ namespace Opm
polyprops_.effectiveMobilities(c, cmax0_[cell], &visc_[np*cell], relperm, mob);
}
void TransportModelCompressiblePolymer::initGravity(const double* grav)
void TransportSolverTwophaseCompressiblePolymer::initGravity(const double* grav)
{
// Set up transmissibilities.
std::vector<double> htrans(grid_.cell_facepos[grid_.number_of_cells]);
@ -1245,7 +1245,7 @@ namespace Opm
gravity_ = grav;
}
void TransportModelCompressiblePolymer::initGravityDynamic()
void TransportSolverTwophaseCompressiblePolymer::initGravityDynamic()
{
// Set up gravflux_ = T_ij g [ (b_w,i rho_w,S - b_o,i rho_o,S) (z_i - z_f)
// + (b_w,j rho_w,S - b_o,j rho_o,S) (z_f - z_j) ]
@ -1276,7 +1276,7 @@ namespace Opm
}
void TransportModelCompressiblePolymer::solveSingleCellGravity(const std::vector<int>& cells,
void TransportSolverTwophaseCompressiblePolymer::solveSingleCellGravity(const std::vector<int>& cells,
const int pos,
const double* gravflux)
{
@ -1303,7 +1303,7 @@ namespace Opm
mobility(saturation_[cell], concentration_[cell], cell, &mob_[2*cell]);
}
int TransportModelCompressiblePolymer::solveGravityColumn(const std::vector<int>& cells)
int TransportSolverTwophaseCompressiblePolymer::solveGravityColumn(const std::vector<int>& cells)
{
// Set up column gravflux.
const int nc = cells.size();
@ -1363,7 +1363,7 @@ namespace Opm
}
void TransportModelCompressiblePolymer::solveGravity(const std::vector<std::vector<int> >& columns,
void TransportSolverTwophaseCompressiblePolymer::solveGravity(const std::vector<std::vector<int> >& columns,
const double dt,
std::vector<double>& saturation,
std::vector<double>& surfacevol,
@ -1409,7 +1409,7 @@ namespace Opm
}
void TransportModelCompressiblePolymer::scToc(const double* x, double* x_c) const {
void TransportSolverTwophaseCompressiblePolymer::scToc(const double* x, double* x_c) const {
x_c[0] = x[0];
if (x[0] < 1e-2*tol_) {
x_c[1] = 0.5*polyprops_.cMax();

View File

@ -17,8 +17,8 @@
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPM_TRANSPORTMODELCOMPRESSIBLEPOLYMER_HEADER_INCLUDED
#define OPM_TRANSPORTMODELCOMPRESSIBLEPOLYMER_HEADER_INCLUDED
#ifndef OPM_TRANSPORTSOLVERTWOPHASECOMPRESSIBLEPOLYMER_HEADER_INCLUDED
#define OPM_TRANSPORTSOLVERTWOPHASECOMPRESSIBLEPOLYMER_HEADER_INCLUDED
#include <opm/polymer/PolymerProperties.hpp>
#include <opm/core/transport/reorder/ReorderSolverInterface.hpp>
@ -41,7 +41,7 @@ namespace Opm
/// Implements a reordering transport solver for incompressible two-phase flow
/// with polymer in the water phase.
/// \TODO Include permeability reduction effect.
class TransportModelCompressiblePolymer : public ReorderSolverInterface
class TransportSolverTwophaseCompressiblePolymer : public ReorderSolverInterface
{
public:
@ -59,7 +59,7 @@ namespace Opm
/// (using gradient variant and bracketing as fallbacks).
/// \param[in] tol Tolerance used in the solver.
/// \param[in] maxit Maximum number of non-linear iterations used.
TransportModelCompressiblePolymer(const UnstructuredGrid& grid,
TransportSolverTwophaseCompressiblePolymer(const UnstructuredGrid& grid,
const BlackoilPropertiesInterface& props,
const PolymerProperties& polyprops,
const SingleCellMethod method,
@ -183,9 +183,9 @@ namespace Opm
class ResSOnCurve;
class ResCOnCurve;
friend class TransportModelCompressiblePolymer::ResidualEquation;
friend class TransportModelCompressiblePolymer::ResSOnCurve;
friend class TransportModelCompressiblePolymer::ResCOnCurve;
friend class TransportSolverTwophaseCompressiblePolymer::ResidualEquation;
friend class TransportSolverTwophaseCompressiblePolymer::ResSOnCurve;
friend class TransportSolverTwophaseCompressiblePolymer::ResCOnCurve;
virtual void solveSingleCell(const int cell);
@ -231,4 +231,4 @@ namespace Opm
} // namespace Opm
#endif // OPM_TRANSPORTMODELCOMPRESSIBLEgPOLYMER_HEADER_INCLUDED
#endif // OPM_TRANSPORTSOLVERTWOPHASECOMPRESSIBLEPOLYMER_HEADER_INCLUDED

View File

@ -18,7 +18,7 @@
*/
#include <opm/polymer/TransportModelPolymer.hpp>
#include <opm/polymer/TransportSolverTwophasePolymer.hpp>
#include <opm/core/props/IncompPropertiesInterface.hpp>
#include <opm/core/grid.h>
#include <opm/core/utility/RootFinders.hpp>
@ -31,7 +31,7 @@
typedef Opm::RegulaFalsi<Opm::WarnAndContinueOnError> RootFinder;
class Opm::TransportModelPolymer::ResidualEquation
class Opm::TransportSolverTwophasePolymer::ResidualEquation
{
public:
int cell;
@ -49,9 +49,9 @@ public:
double ads0;
GradientMethod gradient_method;
TransportModelPolymer& tm;
TransportSolverTwophasePolymer& tm;
ResidualEquation(TransportModelPolymer& tmodel, int cell_index);
ResidualEquation(TransportSolverTwophasePolymer& tmodel, int cell_index);
void computeResidual(const double* x, double* res) const;
void computeResidual(const double* x, double* res, double& mc, double& ff) const;
double computeResidualS(const double* x) const;
@ -67,9 +67,9 @@ private:
double* dres_c_dsdc, double& mc, double& ff) const;
};
class Opm::TransportModelPolymer::ResidualCGrav {
class Opm::TransportSolverTwophasePolymer::ResidualCGrav {
public:
const TransportModelPolymer& tm;
const TransportSolverTwophasePolymer& tm;
const int cell;
const double s0;
const double c0;
@ -83,7 +83,7 @@ public:
int nbcell[2];
mutable double last_s;
ResidualCGrav(const TransportModelPolymer& tmodel,
ResidualCGrav(const TransportSolverTwophasePolymer& tmodel,
const std::vector<int>& cells,
const int pos,
const double* gravflux);
@ -94,7 +94,7 @@ public:
double lastSaturation() const;
};
class Opm::TransportModelPolymer::ResidualSGrav {
class Opm::TransportSolverTwophasePolymer::ResidualSGrav {
public:
const ResidualCGrav& res_c_eq_;
double c;
@ -113,9 +113,9 @@ namespace
return std::max(std::abs(res[0]), std::abs(res[1]));
}
bool solveNewtonStepSC(const double* , const Opm::TransportModelPolymer::ResidualEquation&,
bool solveNewtonStepSC(const double* , const Opm::TransportSolverTwophasePolymer::ResidualEquation&,
const double*, double*);
bool solveNewtonStepC(const double* , const Opm::TransportModelPolymer::ResidualEquation&,
bool solveNewtonStepC(const double* , const Opm::TransportSolverTwophasePolymer::ResidualEquation&,
const double*, double*);
@ -150,11 +150,11 @@ namespace
class ResSOnCurve
{
public:
ResSOnCurve(const Opm::TransportModelPolymer::ResidualEquation& res_eq);
ResSOnCurve(const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq);
double operator()(const double t) const;
CurveInSCPlane curve;
private:
const Opm::TransportModelPolymer::ResidualEquation& res_eq_;
const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq_;
};
// Compute the "c" residual along the curve "curve" for a given residual equation "res_eq".
@ -162,11 +162,11 @@ namespace
class ResCOnCurve
{
public:
ResCOnCurve(const Opm::TransportModelPolymer::ResidualEquation& res_eq);
ResCOnCurve(const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq);
double operator()(const double t) const;
CurveInSCPlane curve;
private:
const Opm::TransportModelPolymer::ResidualEquation& res_eq_;
const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq_;
};
}
@ -174,7 +174,7 @@ namespace
namespace Opm
{
TransportModelPolymer::TransportModelPolymer(const UnstructuredGrid& grid,
TransportSolverTwophasePolymer::TransportSolverTwophasePolymer(const UnstructuredGrid& grid,
const IncompPropertiesInterface& props,
const PolymerProperties& polyprops,
const SingleCellMethod method,
@ -221,7 +221,7 @@ namespace Opm
void TransportModelPolymer::setPreferredMethod(SingleCellMethod method)
void TransportSolverTwophasePolymer::setPreferredMethod(SingleCellMethod method)
{
method_ = method;
}
@ -229,7 +229,7 @@ namespace Opm
void TransportModelPolymer::solve(const double* darcyflux,
void TransportSolverTwophasePolymer::solve(const double* darcyflux,
const double* porevolume,
const double* source,
const double* polymer_inflow_c,
@ -262,11 +262,11 @@ namespace Opm
//
// where influx is water influx, outflux is total outflux.
// Influxes are negative, outfluxes positive.
struct TransportModelPolymer::ResidualS
struct TransportSolverTwophasePolymer::ResidualS
{
TransportModelPolymer::ResidualEquation& res_eq_;
TransportSolverTwophasePolymer::ResidualEquation& res_eq_;
const double c_;
explicit ResidualS(TransportModelPolymer::ResidualEquation& res_eq,
explicit ResidualS(TransportSolverTwophasePolymer::ResidualEquation& res_eq,
const double c)
: res_eq_(res_eq),
c_(c)
@ -287,11 +287,11 @@ namespace Opm
// \TODO doc me
// where ...
// Influxes are negative, outfluxes positive.
struct TransportModelPolymer::ResidualC
struct TransportSolverTwophasePolymer::ResidualC
{
mutable double s; // Mutable in order to change it with every operator() call to be the last computed s value.
TransportModelPolymer::ResidualEquation& res_eq_;
explicit ResidualC(TransportModelPolymer::ResidualEquation& res_eq)
TransportSolverTwophasePolymer::ResidualEquation& res_eq_;
explicit ResidualC(TransportSolverTwophasePolymer::ResidualEquation& res_eq)
: res_eq_(res_eq)
{}
@ -335,7 +335,7 @@ namespace Opm
// ResidualEquation gathers parameters to construct the residual, computes its
// value and the values of its derivatives.
TransportModelPolymer::ResidualEquation::ResidualEquation(TransportModelPolymer& tmodel, int cell_index)
TransportSolverTwophasePolymer::ResidualEquation::ResidualEquation(TransportSolverTwophasePolymer& tmodel, int cell_index)
: tm(tmodel)
{
gradient_method = Analytic;
@ -382,7 +382,7 @@ namespace Opm
}
void TransportModelPolymer::ResidualEquation::computeResidual(const double* x, double* res) const
void TransportSolverTwophasePolymer::ResidualEquation::computeResidual(const double* x, double* res) const
{
double dres_s_dsdc[2];
double dres_c_dsdc[2];
@ -391,7 +391,7 @@ namespace Opm
computeResAndJacobi(x, true, true, false, false, res, dres_s_dsdc, dres_c_dsdc, mc, ff);
}
void TransportModelPolymer::ResidualEquation::computeResidual(const double* x, double* res, double& mc, double& ff) const
void TransportSolverTwophasePolymer::ResidualEquation::computeResidual(const double* x, double* res, double& mc, double& ff) const
{
double dres_s_dsdc[2];
double dres_c_dsdc[2];
@ -399,7 +399,7 @@ namespace Opm
}
double TransportModelPolymer::ResidualEquation::computeResidualS(const double* x) const
double TransportSolverTwophasePolymer::ResidualEquation::computeResidualS(const double* x) const
{
double res[2];
double dres_s_dsdc[2];
@ -410,7 +410,7 @@ namespace Opm
return res[0];
}
double TransportModelPolymer::ResidualEquation::computeResidualC(const double* x) const
double TransportSolverTwophasePolymer::ResidualEquation::computeResidualC(const double* x) const
{
double res[2];
double dres_s_dsdc[2];
@ -421,7 +421,7 @@ namespace Opm
return res[1];
}
void TransportModelPolymer::ResidualEquation::computeGradientResS(const double* x, double* res, double* gradient) const
void TransportSolverTwophasePolymer::ResidualEquation::computeGradientResS(const double* x, double* res, double* gradient) const
// If gradient_method == FinDif, use finite difference
// If gradient_method == Analytic, use analytic expresions
{
@ -431,7 +431,7 @@ namespace Opm
computeResAndJacobi(x, true, true, true, false, res, gradient, dres_c_dsdc, mc, ff);
}
void TransportModelPolymer::ResidualEquation::computeGradientResC(const double* x, double* res, double* gradient) const
void TransportSolverTwophasePolymer::ResidualEquation::computeGradientResC(const double* x, double* res, double* gradient) const
// If gradient_method == FinDif, use finite difference
// If gradient_method == Analytic, use analytic expresions
{
@ -442,7 +442,7 @@ namespace Opm
}
// Compute the Jacobian of the residual equations.
void TransportModelPolymer::ResidualEquation::computeJacobiRes(const double* x, double* dres_s_dsdc, double* dres_c_dsdc) const
void TransportSolverTwophasePolymer::ResidualEquation::computeJacobiRes(const double* x, double* dres_s_dsdc, double* dres_c_dsdc) const
{
double res[2];
double mc;
@ -450,7 +450,7 @@ namespace Opm
computeResAndJacobi(x, false, false, true, true, res, dres_s_dsdc, dres_c_dsdc, mc, ff);
}
void TransportModelPolymer::ResidualEquation::computeResAndJacobi(const double* x, const bool if_res_s, const bool if_res_c,
void TransportSolverTwophasePolymer::ResidualEquation::computeResAndJacobi(const double* x, const bool if_res_s, const bool if_res_c,
const bool if_dres_s_dsdc, const bool if_dres_c_dsdc,
double* res, double* dres_s_dsdc,
double* dres_c_dsdc, double& mc, double& ff) const
@ -550,7 +550,7 @@ namespace Opm
}
}
void TransportModelPolymer::solveSingleCell(const int cell)
void TransportSolverTwophasePolymer::solveSingleCell(const int cell)
{
switch (method_) {
case Bracketing:
@ -574,7 +574,7 @@ namespace Opm
}
void TransportModelPolymer::solveSingleCellBracketing(int cell)
void TransportSolverTwophasePolymer::solveSingleCellBracketing(int cell)
{
ResidualEquation res_eq(*this, cell);
@ -606,7 +606,7 @@ namespace Opm
// Newton method, where we first try a Newton step. Then, if it does not work well, we look for
// the zero of either the residual in s or the residual in c along a specified piecewise linear
// curve. In these cases, we can use a robust 1d solver.
void TransportModelPolymer::solveSingleCellGradient(int cell)
void TransportSolverTwophasePolymer::solveSingleCellGradient(int cell)
{
int iters_used_falsi = 0;
const int max_iters_split = maxit_;
@ -763,7 +763,7 @@ namespace Opm
}
}
void TransportModelPolymer::solveSingleCellNewton(int cell)
void TransportSolverTwophasePolymer::solveSingleCellNewton(int cell)
{
const int max_iters_split = maxit_;
int iters_used_split = 0;
@ -861,7 +861,7 @@ namespace Opm
}
}
void TransportModelPolymer::solveSingleCellNewtonSimple(int cell,bool use_sc)
void TransportSolverTwophasePolymer::solveSingleCellNewtonSimple(int cell,bool use_sc)
{
const int max_iters_split = maxit_;
int iters_used_split = 0;
@ -1010,7 +1010,7 @@ namespace Opm
void TransportModelPolymer::solveMultiCell(const int num_cells, const int* cells)
void TransportSolverTwophasePolymer::solveMultiCell(const int num_cells, const int* cells)
{
double max_s_change = 0.0;
double max_c_change = 0.0;
@ -1067,21 +1067,21 @@ namespace Opm
<< num_iters << " iterations." << std::endl;
}
void TransportModelPolymer::fracFlow(double s, double c, double cmax,
void TransportSolverTwophasePolymer::fracFlow(double s, double c, double cmax,
int cell, double& ff) const
{
double dummy[2];
fracFlowBoth(s, c, cmax, cell, ff, dummy, false);
}
void TransportModelPolymer::fracFlowWithDer(double s, double c, double cmax,
void TransportSolverTwophasePolymer::fracFlowWithDer(double s, double c, double cmax,
int cell, double& ff,
double* dff_dsdc) const
{
fracFlowBoth(s, c, cmax, cell, ff, dff_dsdc, true);
}
void TransportModelPolymer::fracFlowBoth(double s, double c, double cmax, int cell,
void TransportSolverTwophasePolymer::fracFlowBoth(double s, double c, double cmax, int cell,
double& ff, double* dff_dsdc,
bool if_with_der) const
{
@ -1111,12 +1111,12 @@ namespace Opm
}
}
void TransportModelPolymer::computeMc(double c, double& mc) const
void TransportSolverTwophasePolymer::computeMc(double c, double& mc) const
{
polyprops_.computeMc(c, mc);
}
void TransportModelPolymer::computeMcWithDer(double c, double& mc,
void TransportSolverTwophasePolymer::computeMcWithDer(double c, double& mc,
double &dmc_dc) const
{
polyprops_.computeMcWithDer(c, mc, dmc_dc);
@ -1124,14 +1124,14 @@ namespace Opm
TransportModelPolymer::ResidualSGrav::ResidualSGrav(const ResidualCGrav& res_c_eq,
TransportSolverTwophasePolymer::ResidualSGrav::ResidualSGrav(const ResidualCGrav& res_c_eq,
const double c_init)
: res_c_eq_(res_c_eq),
c(c_init)
{
}
double TransportModelPolymer::ResidualSGrav::operator()(double s) const
double TransportSolverTwophasePolymer::ResidualSGrav::operator()(double s) const
{
return res_c_eq_.computeGravResidualS(s, c);
}
@ -1145,7 +1145,7 @@ namespace Opm
// where ...
// Influxes are negative, outfluxes positive.
TransportModelPolymer::ResidualCGrav::ResidualCGrav(const TransportModelPolymer& tmodel,
TransportSolverTwophasePolymer::ResidualCGrav::ResidualCGrav(const TransportSolverTwophasePolymer& tmodel,
const std::vector<int>& cells,
const int pos,
const double* gravflux) // Always oriented towards next in column. Size = colsize - 1.
@ -1177,7 +1177,7 @@ namespace Opm
tm.polyprops_.adsorption(c0, cmax0, c_ads0);
}
double TransportModelPolymer::ResidualCGrav::operator()(double c) const
double TransportSolverTwophasePolymer::ResidualCGrav::operator()(double c) const
{
ResidualSGrav res_s(*this);
@ -1190,7 +1190,7 @@ namespace Opm
}
double TransportModelPolymer::ResidualCGrav::computeGravResidualS(double s, double c) const
double TransportSolverTwophasePolymer::ResidualCGrav::computeGravResidualS(double s, double c) const
{
double mobcell[2];
@ -1216,7 +1216,7 @@ namespace Opm
return res;
}
double TransportModelPolymer::ResidualCGrav::computeGravResidualC(double s, double c) const
double TransportSolverTwophasePolymer::ResidualCGrav::computeGravResidualC(double s, double c) const
{
double mobcell[2];
@ -1247,13 +1247,13 @@ namespace Opm
return res;
}
double TransportModelPolymer::ResidualCGrav::lastSaturation() const
double TransportSolverTwophasePolymer::ResidualCGrav::lastSaturation() const
{
return last_s;
}
void TransportModelPolymer::mobility(double s, double c, int cell, double* mob) const
void TransportSolverTwophasePolymer::mobility(double s, double c, int cell, double* mob) const
{
double sat[2] = { s, 1.0 - s };
double relperm[2];
@ -1262,7 +1262,7 @@ namespace Opm
}
void TransportModelPolymer::initGravity(const double* grav)
void TransportSolverTwophasePolymer::initGravity(const double* grav)
{
// Set up gravflux_ = T_ij g (rho_w - rho_o) (z_i - z_j)
std::vector<double> htrans(grid_.cell_facepos[grid_.number_of_cells]);
@ -1285,7 +1285,7 @@ namespace Opm
}
void TransportModelPolymer::solveSingleCellGravity(const std::vector<int>& cells,
void TransportSolverTwophasePolymer::solveSingleCellGravity(const std::vector<int>& cells,
const int pos,
const double* gravflux)
{
@ -1312,7 +1312,7 @@ namespace Opm
mobility(saturation_[cell], concentration_[cell], cell, &mob_[2*cell]);
}
int TransportModelPolymer::solveGravityColumn(const std::vector<int>& cells)
int TransportSolverTwophasePolymer::solveGravityColumn(const std::vector<int>& cells)
{
// Set up column gravflux.
const int nc = cells.size();
@ -1372,7 +1372,7 @@ namespace Opm
}
void TransportModelPolymer::solveGravity(const std::vector<std::vector<int> >& columns,
void TransportSolverTwophasePolymer::solveGravity(const std::vector<std::vector<int> >& columns,
const double* porevolume,
const double dt,
std::vector<double>& saturation,
@ -1410,7 +1410,7 @@ namespace Opm
toBothSat(saturation_, saturation);
}
void TransportModelPolymer::scToc(const double* x, double* x_c) const {
void TransportSolverTwophasePolymer::scToc(const double* x, double* x_c) const {
x_c[0] = x[0];
if (x[0] < 1e-2*tol_) {
x_c[1] = 0.5*polyprops_.cMax();
@ -1523,7 +1523,7 @@ namespace
}
ResSOnCurve::ResSOnCurve(const Opm::TransportModelPolymer::ResidualEquation& res_eq)
ResSOnCurve::ResSOnCurve(const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq)
: res_eq_(res_eq)
{
}
@ -1537,7 +1537,7 @@ namespace
return res_eq_.computeResidualS(x_c);
}
ResCOnCurve::ResCOnCurve(const Opm::TransportModelPolymer::ResidualEquation& res_eq)
ResCOnCurve::ResCOnCurve(const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq)
: res_eq_(res_eq)
{
}
@ -1551,7 +1551,7 @@ namespace
return res_eq_.computeResidualC(x_c);
}
bool solveNewtonStepSC(const double* xx, const Opm::TransportModelPolymer::ResidualEquation& res_eq,
bool solveNewtonStepSC(const double* xx, const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq,
const double* res, double* x_new) {
double dres_s_dsdc[2];
@ -1582,7 +1582,7 @@ namespace
return true;
}
}
bool solveNewtonStepC(const double* xx, const Opm::TransportModelPolymer::ResidualEquation& res_eq,
bool solveNewtonStepC(const double* xx, const Opm::TransportSolverTwophasePolymer::ResidualEquation& res_eq,
const double* res, double* x_new) {
double dres_s_dsdc[2];

View File

@ -17,8 +17,8 @@
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPM_TRANSPORTMODELPOLYMER_HEADER_INCLUDED
#define OPM_TRANSPORTMODELPOLYMER_HEADER_INCLUDED
#ifndef OPM_TRANSPORTSOLVERTWOPHASEPOLYMER_HEADER_INCLUDED
#define OPM_TRANSPORTSOLVERTWOPHASEPOLYMER_HEADER_INCLUDED
#include <opm/polymer/PolymerProperties.hpp>
#include <opm/core/transport/reorder/ReorderSolverInterface.hpp>
@ -36,7 +36,7 @@ namespace Opm
/// Implements a reordering transport solver for incompressible two-phase flow
/// with polymer in the water phase.
/// \TODO Include permeability reduction effect.
class TransportModelPolymer : public ReorderSolverInterface
class TransportSolverTwophasePolymer : public ReorderSolverInterface
{
public:
@ -53,12 +53,12 @@ namespace Opm
/// (using gradient variant and bracketing as fallbacks).
/// \param[in] tol Tolerance used in the solver.
/// \param[in] maxit Maximum number of non-linear iterations used.
TransportModelPolymer(const UnstructuredGrid& grid,
const IncompPropertiesInterface& props,
const PolymerProperties& polyprops,
const SingleCellMethod method,
const double tol,
const int maxit);
TransportSolverTwophasePolymer(const UnstructuredGrid& grid,
const IncompPropertiesInterface& props,
const PolymerProperties& polyprops,
const SingleCellMethod method,
const double tol,
const int maxit);
/// Set the preferred method, Bracketing or Newton.
void setPreferredMethod(SingleCellMethod method);
@ -191,4 +191,4 @@ namespace Opm
} // namespace Opm
#endif // OPM_TRANSPORTMODELPOLYMER_HEADER_INCLUDED
#endif // OPM_TRANSPORTSOLVERTWOPHASEPOLYMER_HEADER_INCLUDED