/* Copyright 2014 SINTEF ICT, Applied Mathematics. Copyright 2014 STATOIL ASA. This file is part of the Open Porous Media project (OPM). OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OPM. If not, see . */ #ifndef OPM_SIMULATORFULLYIMPLICITCOMPRESSIBLEPOLYMER_HEADER_INCLUDED #define OPM_SIMULATORFULLYIMPLICITCOMPRESSIBLEPOLYMER_HEADER_INCLUDED #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Opm { template class SimulatorFullyImplicitCompressiblePolymer; template struct SimulatorTraits > { typedef PolymerBlackoilState ReservoirState; typedef WellStateFullyImplicitBlackoilPolymer WellState; typedef BlackoilOutputWriter OutputWriter; typedef GridT Grid; typedef FullyImplicitCompressiblePolymerSolver Solver; /// Dummy class, this Solver does not use a Model. struct Model { typedef parameter::ParameterGroup ModelParameters; }; }; /// Class collecting all necessary components for a two-phase simulation. template class SimulatorFullyImplicitCompressiblePolymer : public SimulatorBase > { typedef SimulatorFullyImplicitCompressiblePolymer ThisType; typedef SimulatorBase BaseType; typedef typename BaseType::Solver Solver; public: /// Initialise from parameters and objects to observe. SimulatorFullyImplicitCompressiblePolymer(const parameter::ParameterGroup& param, const GridT& grid, DerivedGeology& geo, BlackoilPropsAdInterface& props, const PolymerPropsAd& polymer_props, const RockCompressibility* rock_comp_props, std::shared_ptr eclipse_state, BlackoilOutputWriter& output_writer, Opm::DeckConstPtr& deck, NewtonIterationBlackoilInterface& linsolver, const double* gravity); std::unique_ptr createSolver(const Wells* wells); void handleAdditionalWellInflow(SimulatorTimer& timer, WellsManager& wells_manager, typename BaseType::WellState& well_state, const Wells* wells); private: Opm::DeckConstPtr deck_; const PolymerPropsAd& polymer_props_; }; } // namespace Opm #include "SimulatorFullyImplicitCompressiblePolymer_impl.hpp" #endif // OPM_SIMULATORFULLYIMPLICITCOMPRESSIBLEPOLYMER_HEADER_INCLUDED