/*
  Copyright 2013 SINTEF ICT, Applied Mathematics.
  Copyright 2015 Andreas Lauser
  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_SIMULATORFULLYIMPLICITBLACKOIL_HEADER_INCLUDED
#define OPM_SIMULATORFULLYIMPLICITBLACKOIL_HEADER_INCLUDED
#include "SimulatorBase.hpp"
#include "NewtonSolver.hpp"
namespace Opm {
template 
class SimulatorFullyImplicitBlackoil;
template 
struct SimulatorTraits >
{
    typedef WellStateFullyImplicitBlackoil WellState;
    typedef BlackoilState ReservoirState;
    typedef BlackoilOutputWriter OutputWriter;
    typedef GridT Grid;
    typedef BlackoilModel Model;
    typedef NewtonSolver Solver;
};
/// a simulator for the blackoil model
template 
class SimulatorFullyImplicitBlackoil
    : public SimulatorBase >
{
    typedef SimulatorBase > Base;
public:
    // forward the constructor to the base class
    SimulatorFullyImplicitBlackoil(const parameter::ParameterGroup& param,
                                   const typename Base::Grid& grid,
                                   const DerivedGeology& geo,
                                   BlackoilPropsAdInterface& props,
                                   const RockCompressibility* rock_comp_props,
                                   NewtonIterationBlackoilInterface& linsolver,
                                   const double* gravity,
                                   const bool disgas,
                                   const bool vapoil,
                                   std::shared_ptr eclipse_state,
                                   BlackoilOutputWriter& output_writer,
                                   const std::vector& threshold_pressures_by_face)
    : Base(param, grid, geo, props, rock_comp_props, linsolver, gravity, disgas, vapoil,
           eclipse_state, output_writer, threshold_pressures_by_face)
    {}
};
} // namespace Opm
#endif // OPM_SIMULATORFULLYIMPLICITBLACKOIL_HEADER_INCLUDED