00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef OPM_SIMULATORFULLYIMPLICITBLACKOILMULTISEGMENT_HEADER_INCLUDED
00022 #define OPM_SIMULATORFULLYIMPLICITBLACKOILMULTISEGMENT_HEADER_INCLUDED
00023
00024 #include <opm/autodiff/SimulatorBase.hpp>
00025
00026
00027 #include <opm/autodiff/NonlinearSolver.hpp>
00028 #include <opm/autodiff/BlackoilMultiSegmentModel.hpp>
00029 #include <opm/autodiff/WellStateMultiSegment.hpp>
00030
00031 namespace Opm {
00032
00033 template <class GridT>
00034 class SimulatorFullyImplicitBlackoilMultiSegment;
00035
00036 class MultisegmentWells;
00037
00038 template <class GridT>
00039 struct SimulatorTraits<SimulatorFullyImplicitBlackoilMultiSegment<GridT> >
00040 {
00041 typedef WellStateMultiSegment WellState;
00042 typedef BlackoilState ReservoirState;
00043 typedef BlackoilOutputWriter OutputWriter;
00044 typedef GridT Grid;
00045 typedef BlackoilMultiSegmentModel<Grid> Model;
00046 typedef NonlinearSolver<Model> Solver;
00047 typedef MultisegmentWells WellModel;
00048 };
00049
00051 template <class GridT>
00052 class SimulatorFullyImplicitBlackoilMultiSegment
00053 : public SimulatorBase<SimulatorFullyImplicitBlackoilMultiSegment<GridT> >
00054 {
00055 public:
00056 typedef SimulatorBase<SimulatorFullyImplicitBlackoilMultiSegment<GridT> > Base;
00057 typedef SimulatorFullyImplicitBlackoilMultiSegment<GridT> ThisType;
00058 typedef SimulatorTraits<ThisType> Traits;
00059 typedef typename Traits::ReservoirState ReservoirState;
00060 typedef typename Traits::WellState WellState;
00061 typedef typename Traits::Solver Solver;
00062 typedef typename Traits::WellModel WellModel;
00063
00064
00065 SimulatorFullyImplicitBlackoilMultiSegment(const ParameterGroup& param,
00066 const GridT& grid,
00067 DerivedGeology& geo,
00068 BlackoilPropsAdFromDeck& props,
00069 const RockCompressibility* rock_comp_props,
00070 NewtonIterationBlackoilInterface& linsolver,
00071 const double* gravity,
00072 const bool disgas,
00073 const bool vapoil,
00074 std::shared_ptr<EclipseState> eclipse_state,
00075 BlackoilOutputWriter& output_writer,
00076 const std::vector<double>& threshold_pressures_by_face,
00077 const std::unordered_set<std::string>& defunct_well_names)
00078 : Base(param, grid, geo, props, rock_comp_props, linsolver, gravity, disgas, vapoil,
00079 eclipse_state, output_writer, threshold_pressures_by_face, defunct_well_names)
00080 {}
00081
00082
00083 SimulatorReport run(SimulatorTimer& timer,
00084 ReservoirState& state);
00085
00086 protected:
00087
00088 std::unique_ptr<Solver> createSolver(const WellModel& well_model);
00089
00090 using Base::output_writer_;
00091 using Base::param_;
00092 using Base::solver_;
00093 using Base::terminal_output_;
00094 using Base::eclipse_state_;
00095 using Base::grid_;
00096 using Base::props_;
00097 using Base::is_parallel_run_;
00098 using Base::allcells_;
00099 using Base::model_param_;
00100 using Base::geo_;
00101 using Base::rock_comp_props_;
00102 using Base::has_disgas_;
00103 using Base::has_vapoil_;
00104 };
00105
00106 }
00107
00108 #include "SimulatorFullyImplicitBlackoilMultiSegment_impl.hpp"
00109
00110 #endif // OPM_SIMULATORFULLYIMPLICITBLACKOILMULTISEGMENT_HEADER_INCLUDED