92 : simulation_steps_(1),
95 residual_tolerance_(1e-8),
96 linsolver_verbosity_(1),
103 void init(
const Opm::ParameterGroup& param)
106 initGridAndProps(param);
107 initInitialConditions(param);
108 initBoundaryConditions(param);
113 std::cout <<
"==================== Unused parameters: ====================\n";
114 param.displayUsage();
115 std::cout <<
"================================================================\n";
119 typedef Dune::CpGrid GridType;
120 enum { Dimension = GridType::dimension };
121 typedef Dune::FieldVector<double, Dimension> Vector;
122 typedef typename SimTraits::template ResProp<Dimension>::Type ResProp;
123 typedef GridInterfaceEuler<GridType> GridInterface;
124 typedef GridInterface::CellIterator CellIter;
125 typedef CellIter::FaceIterator FaceIter;
126 typedef BasicBoundaryConditions<true, true> BCs;
127 typedef typename SimTraits::template FlowSolver<GridInterface, BCs>::Type FlowSolver;
128 typedef typename SimTraits::template TransportSolver<GridInterface, BCs>::Type TransportSolver;
130 int simulation_steps_;
132 std::vector<double> init_saturation_;
134 double residual_tolerance_;
135 int linsolver_verbosity_;
139 GridInterface ginterf_;
142 Opm::SparseVector<double> injection_rates_;
143 std::vector<double> injection_rates_psolver_;
144 FlowSolver flow_solver_;
145 TransportSolver transport_solver_;
148 virtual void initControl(
const Opm::ParameterGroup& param)
150 simulation_steps_ = param.getDefault(
"simulation_steps", simulation_steps_);
151 stepsize_ = Opm::unit::convert::from(param.getDefault(
"stepsize", stepsize_),
155 virtual void initGridAndProps(
const Opm::ParameterGroup& param)
158 ginterf_.init(grid_);
160 gravity_[0] = param.getDefault(
"gx", 0.0);
161 gravity_[1] = param.getDefault(
"gy", 0.0);
162 gravity_[2] = param.getDefault(
"gz", 0.0);
165 virtual void initInitialConditions(
const Opm::ParameterGroup& param)
167 if (param.getDefault(
"init_saturation_from_file",
false)) {
168 std::string filename = param.get<std::string>(
"init_saturation_filename");
169 std::ifstream satfile(filename.c_str());
171 OPM_THROW(std::runtime_error,
"Could not open initial saturation file: " + filename);
175 if (num_sats != ginterf_.numberOfCells()) {
176 OPM_THROW(std::runtime_error,
177 "Number of saturation values claimed different "
178 "from number of grid cells: " +
179 std::to_string(num_sats) +
180 " vs. " + std::to_string(ginterf_.numberOfCells()));
182 std::istream_iterator<double> beg(satfile);
183 std::istream_iterator<double> end;
184 init_saturation_.assign(beg, end);
185 if (
int(init_saturation_.size()) != num_sats) {
186 OPM_THROW(std::runtime_error,
187 "Number of saturation values claimed different "
188 "from actual file content: " +
189 std::to_string(num_sats) +
190 " vs. " + std::to_string(init_saturation_.size()));
193 double init_s = param.getDefault(
"init_saturation", 0.0);
194 init_saturation_.clear();
195 init_saturation_.resize(ginterf_.numberOfCells(), init_s);
199 virtual void initBoundaryConditions(
const Opm::ParameterGroup& param)
204 virtual void initSources(
const Opm::ParameterGroup& )
206 int nc = ginterf_.numberOfCells();
207 injection_rates_ = Opm::SparseVector<double>(nc);
208 injection_rates_psolver_.resize(nc, 0.0);
215 virtual void initSolvers(
const Opm::ParameterGroup& param)
218 flow_solver_.init(ginterf_, res_prop_, gravity_, bcond_);
219 residual_tolerance_ = param.getDefault(
"residual_tolerance", residual_tolerance_);
220 linsolver_verbosity_ = param.getDefault(
"linsolver_verbosity", linsolver_verbosity_);
221 linsolver_type_ = param.getDefault(
"linsolver_type", linsolver_type_);
224 transport_solver_.init(param, ginterf_, res_prop_, bcond_);