20 #ifndef OPM_TRANSPORTSOLVERTWOPHASECOMPRESSIBLEPOLYMER_HEADER_INCLUDED
21 #define OPM_TRANSPORTSOLVERTWOPHASECOMPRESSIBLEPOLYMER_HEADER_INCLUDED
24 #include <opm/core/transport/reorder/ReorderSolverInterface.hpp>
25 #include <opm/core/utility/linearInterpolation.hpp>
29 struct UnstructuredGrid;
39 class BlackoilPropertiesInterface;
63 const BlackoilPropertiesInterface& props,
92 void solve(
const double* darcyflux,
93 const std::vector<double>& initial_pressure,
94 const std::vector<double>& pressure,
95 const std::vector<double>& temperature,
96 const double* porevolume0,
97 const double* porevolume,
99 const double* polymer_inflow_c,
101 std::vector<double>& saturation,
102 std::vector<double>& surfacevol,
103 std::vector<double>& concentration,
104 std::vector<double>&
cmax);
121 void solveGravity(
const std::vector<std::vector<int> >& columns,
123 std::vector<double>& saturation,
124 std::vector<double>& surfacevol,
125 std::vector<double>& concentration,
126 std::vector<double>&
cmax);
134 const UnstructuredGrid& grid_;
135 const BlackoilPropertiesInterface& props_;
137 const double* darcyflux_;
138 const double* porevolume0_;
139 const double* porevolume_;
140 const double* source_;
141 const double* polymer_inflow_c_;
146 double adhoc_safety_;
148 std::vector<double> saturation_;
149 std::vector<int> allcells_;
150 double* concentration_;
152 std::vector<double> fractionalflow_;
153 std::vector<double> mc_;
154 std::vector<double> visc_;
155 std::vector<double> A_;
156 std::vector<double> A0_;
157 std::vector<double> smin_;
158 std::vector<double> smax_;
161 const double* gravity_;
162 std::vector<double> trans_;
163 std::vector<double> density_;
164 std::vector<double> gravflux_;
165 std::vector<double> mob_;
166 std::vector<double> cmax0_;
169 std::vector<double> s0_;
170 std::vector<double> c0_;
173 std::vector<int> ia_upw_;
174 std::vector<int> ja_upw_;
175 std::vector<int> ia_downw_;
176 std::vector<int> ja_downw_;
184 class ResidualEquation;
193 virtual void solveSingleCell(
const int cell);
194 virtual void solveMultiCell(
const int num_cells,
const int* cells);
195 void solveSingleCellBracketing(
int cell);
196 void solveSingleCellNewton(
int cell,
bool use_sc,
bool use_explicit_step =
false);
197 void solveSingleCellGradient(
int cell);
198 void solveSingleCellGravity(
const std::vector<int>& cells,
200 const double* gravflux);
201 int solveGravityColumn(
const std::vector<int>& cells);
203 void initGravityDynamic();
205 void fracFlow(
double s,
double c,
double cmax,
int cell,
double& ff)
const;
206 void fracFlowWithDer(
double s,
double c,
double cmax,
int cell,
double& ff,
207 double* dff_dsdc)
const;
208 void fracFlowBoth(
double s,
double c,
double cmax,
int cell,
double& ff,
209 double* dff_dsdc,
bool if_with_der)
const;
210 void computeMc(
double c,
double& mc)
const;
211 void computeMcWithDer(
double c,
double& mc,
double& dmc_dc)
const;
212 void mobility(
double s,
double c,
int cell,
double* mob)
const;
213 void scToc(
const double* x,
double* x_c)
const;
222 Newton_Iter(
bool res_s_val,
int cell_val,
double s_val,
double c_val) {
230 std::list<Newton_Iter> res_counts;
236 #endif // OPM_TRANSPORTSOLVERTWOPHASECOMPRESSIBLEPOLYMER_HEADER_INCLUDED
friend class TransportSolverTwophaseCompressiblePolymer::ResidualEquation
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:186
SingleCellMethod
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:48
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:48
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:48
Definition: CompressibleTpfaPolymer.hpp:32
void setPreferredMethod(SingleCellMethod method)
Set the preferred method, Bracketing or Newton.
std::vector< double > & cmax
Definition: GravityColumnSolverPolymer_impl.hpp:78
void initGravity(const double *grav)
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:48
void solve(const double *darcyflux, const std::vector< double > &initial_pressure, const std::vector< double > &pressure, const std::vector< double > &temperature, const double *porevolume0, const double *porevolume, const double *source, const double *polymer_inflow_c, const double dt, std::vector< double > &saturation, std::vector< double > &surfacevol, std::vector< double > &concentration, std::vector< double > &cmax)
void solveGravity(const std::vector< std::vector< int > > &columns, const double dt, std::vector< double > &saturation, std::vector< double > &surfacevol, std::vector< double > &concentration, std::vector< double > &cmax)
friend class TransportSolverTwophaseCompressiblePolymer::ResSOnCurve
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:189
Definition: PolymerProperties.hpp:34
TransportSolverTwophaseCompressiblePolymer(const UnstructuredGrid &grid, const BlackoilPropertiesInterface &props, const PolymerProperties &polyprops, const SingleCellMethod method, const double tol, const int maxit)
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:49
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:49
friend class TransportSolverTwophaseCompressiblePolymer::ResCOnCurve
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:190
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:48
GradientMethod
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:49
Definition: TransportSolverTwophaseCompressiblePolymer.hpp:44