20 #ifndef OPM_TRANSPORTSOLVERTWOPHASEPOLYMER_HEADER_INCLUDED
21 #define OPM_TRANSPORTSOLVERTWOPHASEPOLYMER_HEADER_INCLUDED
24 #include <opm/core/transport/reorder/ReorderSolverInterface.hpp>
25 #include <opm/core/utility/linearInterpolation.hpp>
29 struct UnstructuredGrid;
34 class IncompPropertiesInterface;
57 const IncompPropertiesInterface& props,
80 void solve(
const double* darcyflux,
81 const double* porevolume,
83 const double* polymer_inflow_c,
85 std::vector<double>& saturation,
86 std::vector<double>& concentration,
87 std::vector<double>&
cmax);
100 void solveGravity(
const std::vector<std::vector<int> >& columns,
101 const double* porevolume,
103 std::vector<double>& saturation,
104 std::vector<double>& concentration,
105 std::vector<double>&
cmax);
109 virtual void solveMultiCell(
const int num_cells,
const int* cells);
114 class ResidualEquation;
119 const double* gravflux);
121 void scToc(
const double* x,
double* x_c)
const;
131 Newton_Iter(
bool res_s_val,
int cell_val,
double s_val,
double c_val) {
139 std::list<Newton_Iter> res_counts;
144 const UnstructuredGrid& grid_;
145 const double* porosity_;
146 const double* porevolume_;
147 const IncompPropertiesInterface& props_;
148 const PolymerProperties& polyprops_;
149 std::vector<double> smin_;
150 std::vector<double> smax_;
154 const double* darcyflux_;
155 const double* source_;
156 const double* polymer_inflow_c_;
158 std::vector<double> saturation_;
159 double* concentration_;
161 std::vector<double> fractionalflow_;
162 std::vector<double> mc_;
165 double adhoc_safety_;
168 std::vector<double> gravflux_;
169 std::vector<double> mob_;
170 std::vector<double> cmax0_;
172 std::vector<double> s0_;
173 std::vector<double> c0_;
182 void fracFlow(
double s,
double c,
double cmax,
int cell,
double& ff)
const;
183 void fracFlowWithDer(
double s,
double c,
double cmax,
int cell,
double& ff,
184 double* dff_dsdc)
const;
185 void fracFlowBoth(
double s,
double c,
double cmax,
int cell,
double& ff,
186 double* dff_dsdc,
bool if_with_der)
const;
187 void computeMc(
double c,
double& mc)
const;
188 void computeMcWithDer(
double c,
double& mc,
double& dmc_dc)
const;
189 void mobility(
double s,
double c,
int cell,
double* mob)
const;
194 #endif // OPM_TRANSPORTSOLVERTWOPHASEPOLYMER_HEADER_INCLUDED
Definition: TransportSolverTwophasePolymer.hpp:44
Definition: TransportSolverTwophasePolymer.hpp:43
void solveSingleCellNewtonSimple(int cell, bool use_sc)
void scToc(const double *x, double *x_c) const
Definition: CompressibleTpfaPolymer.hpp:32
std::vector< double > & cmax
Definition: GravityColumnSolverPolymer_impl.hpp:78
void solveSingleCellGravity(const std::vector< int > &cells, const int pos, const double *gravflux)
Definition: TransportSolverTwophasePolymer.hpp:39
void solveSingleCellBracketing(int cell)
SingleCellMethod
Definition: TransportSolverTwophasePolymer.hpp:43
Definition: TransportSolverTwophasePolymer.hpp:43
Definition: TransportSolverTwophasePolymer.hpp:43
void solveGravity(const std::vector< std::vector< int > > &columns, const double *porevolume, const double dt, std::vector< double > &saturation, std::vector< double > &concentration, std::vector< double > &cmax)
Definition: PolymerProperties.hpp:34
Definition: TransportSolverTwophasePolymer.hpp:44
int solveGravityColumn(const std::vector< int > &cells)
GradientMethod
Definition: TransportSolverTwophasePolymer.hpp:44
Definition: TransportSolverTwophasePolymer.hpp:43
void setPreferredMethod(SingleCellMethod method)
Set the preferred method, Bracketing or Newton.
void solve(const double *darcyflux, const double *porevolume, const double *source, const double *polymer_inflow_c, const double dt, std::vector< double > &saturation, std::vector< double > &concentration, std::vector< double > &cmax)
void initGravity(const double *grav)
virtual void solveMultiCell(const int num_cells, const int *cells)
virtual void solveSingleCell(const int cell)
void solveSingleCellGradient(int cell)
void solveSingleCellNewton(int cell)
Definition: TransportSolverTwophasePolymer.hpp:43
TransportSolverTwophasePolymer(const UnstructuredGrid &grid, const IncompPropertiesInterface &props, const PolymerProperties &polyprops, const SingleCellMethod method, const double tol, const int maxit)