20#ifndef OPM_TOFDISCGALREORDER_HEADER_INCLUDED
21#define OPM_TOFDISCGALREORDER_HEADER_INCLUDED
29struct UnstructuredGrid;
34 class IncompPropertiesInterface;
36 class VelocityInterpolationInterface;
37 class DGBasisInterface;
75 const ParameterGroup& param);
91 const double* porevolume,
93 std::vector<double>& tof_coeff);
114 const double* porevolume,
115 const double* source,
117 std::vector<double>& tof_coeff,
118 std::vector<double>& tracer_coeff);
121 virtual void solveSingleCell(
const int cell);
122 virtual void solveMultiCell(
const int num_cells,
const int* cells);
124 void cellContribs(
const int cell);
125 void faceContribs(
const int cell);
126 void solveLinearSystem(
const int cell);
134 const UnstructuredGrid& grid_;
135 std::shared_ptr<VelocityInterpolationInterface> velocity_interpolation_;
138 double limiter_relative_flux_threshold_;
139 enum LimiterMethod { MinUpwindFace, MinUpwindAverage };
140 LimiterMethod limiter_method_;
141 enum LimiterUsage { DuringComputations, AsPostProcess, AsSimultaneousPostProcess };
142 LimiterUsage limiter_usage_;
143 const double* darcyflux_;
144 const double* porevolume_;
145 const double* source_;
146 std::shared_ptr<DGBasisInterface> basis_func_;
149 double* tracer_coeff_;
151 enum { NoTracerHead = -1 };
152 std::vector<int> tracerhead_by_cell_;
153 bool tracers_ensure_unity_;
155 std::vector<double> rhs_;
156 std::vector<double> jac_;
157 std::vector<double> orig_rhs_;
158 std::vector<double> orig_jac_;
159 std::vector<double> coord_;
160 mutable std::vector<double> basis_;
161 mutable std::vector<double> basis_nb_;
162 std::vector<double> grad_basis_;
163 std::vector<double> velocity_;
164 int num_singlesolves_;
166 double gauss_seidel_tol_;
168 int max_size_multicell_;
169 int max_iter_multicell_;
176 void applyLimiter(
const int cell,
double* tof);
177 void applyMinUpwindLimiter(
const int cell,
const bool face_min,
double* tof);
178 void applyLimiterAsPostProcess();
179 void applyLimiterAsSimultaneousPostProcess();
180 double totalFlux(
const int cell)
const;
181 double minCornerVal(
const int cell,
const int face)
const;
185 void applyTracerLimiter(
const int cell,
double* local_coeff);
Definition: ReorderSolverInterface.hpp:39
Definition: TofDiscGalReorder.hpp:38
Definition: TofDiscGalReorder.hpp:50
void solveTof(const double *darcyflux, const double *porevolume, const double *source, std::vector< double > &tof_coeff)
TofDiscGalReorder(const UnstructuredGrid &grid, const ParameterGroup ¶m)
void solveTofTracer(const double *darcyflux, const double *porevolume, const double *source, const SparseTable< int > &tracerheads, std::vector< double > &tof_coeff, std::vector< double > &tracer_coeff)
Definition: AnisotropicEikonal.hpp:44