mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-30 11:06:55 -06:00
976d38bf37
i.e. it now supports stuff like MULTFLT in the schedule section. Possibly, the MPI-parallel code paths need some fixes. (but if the geology is not changed during the simulation, the parallel code will do the same as before.) the most fundamental change of this patch is that the reference/pointer to the DerivedGeology object is made non-constant. IMO that's okay, though, becase the geology can no longer assumed to be constant over the whole simulation run.
142 lines
5.4 KiB
C++
142 lines
5.4 KiB
C++
/*
|
|
Copyright 2015 IRIS AS.
|
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef OPM_SIMULATORFULLYIMPLICITBLACKOILSOLVENT_HEADER_INCLUDED
|
|
#define OPM_SIMULATORFULLYIMPLICITBLACKOILSOLVENT_HEADER_INCLUDED
|
|
|
|
#include <opm/autodiff/SimulatorBase.hpp>
|
|
#include <opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp>
|
|
#include <opm/autodiff/BlackoilSolventState.hpp>
|
|
#include <opm/autodiff/BlackoilSolventModel.hpp>
|
|
|
|
#include <opm/core/utility/parameters/ParameterGroup.hpp>
|
|
#include <opm/common/ErrorMacros.hpp>
|
|
|
|
#include <opm/autodiff/GeoProps.hpp>
|
|
#include <opm/autodiff/BlackoilPropsAdInterface.hpp>
|
|
#include <opm/autodiff/SolventPropsAdFromDeck.hpp>
|
|
#include <opm/autodiff/RateConverter.hpp>
|
|
#include <opm/autodiff/NonlinearSolver.hpp>
|
|
#include <opm/autodiff/WellStateFullyImplicitBlackoilSolvent.hpp>
|
|
|
|
#include <opm/core/grid.h>
|
|
#include <opm/core/wells.h>
|
|
#include <opm/core/well_controls.h>
|
|
#include <opm/core/pressure/flow_bc.h>
|
|
|
|
#include <opm/core/simulator/SimulatorReport.hpp>
|
|
#include <opm/core/simulator/SimulatorTimer.hpp>
|
|
//#include <opm/core/simulator/AdaptiveSimulatorTimer.hpp>
|
|
#include <opm/core/utility/StopWatch.hpp>
|
|
#include <opm/core/io/vtk/writeVtkData.hpp>
|
|
#include <opm/core/utility/miscUtilities.hpp>
|
|
#include <opm/core/utility/miscUtilitiesBlackoil.hpp>
|
|
|
|
#include <opm/core/props/rock/RockCompressibility.hpp>
|
|
|
|
//#include <opm/core/simulator/AdaptiveTimeStepping.hpp>
|
|
//#include <opm/core/transport/reorder/TransportSolverCompressibleTwophaseReorder.hpp>
|
|
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/ScheduleEnums.hpp>
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/Well.hpp>
|
|
#include <opm/parser/eclipse/EclipseState/Schedule/WellProductionProperties.hpp>
|
|
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
|
|
|
#include <boost/filesystem.hpp>
|
|
#include <boost/lexical_cast.hpp>
|
|
|
|
#include <algorithm>
|
|
#include <cstddef>
|
|
#include <cassert>
|
|
#include <functional>
|
|
#include <memory>
|
|
#include <numeric>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
namespace Opm
|
|
{
|
|
template <class GridT>
|
|
class SimulatorFullyImplicitBlackoilSolvent;
|
|
|
|
template<class GridT>
|
|
struct SimulatorTraits<SimulatorFullyImplicitBlackoilSolvent<GridT> >
|
|
{
|
|
typedef WellStateFullyImplicitBlackoilSolvent WellState;
|
|
typedef BlackoilSolventState ReservoirState;
|
|
typedef BlackoilOutputWriter OutputWriter;
|
|
typedef GridT Grid;
|
|
typedef BlackoilSolventModel<Grid> Model;
|
|
typedef NonlinearSolver<Model> Solver;
|
|
};
|
|
|
|
/// Class collecting all necessary components for a blackoil simulation with polymer
|
|
/// injection.
|
|
template <class GridT>
|
|
class SimulatorFullyImplicitBlackoilSolvent
|
|
: public SimulatorBase<SimulatorFullyImplicitBlackoilSolvent<GridT> >
|
|
{
|
|
typedef SimulatorFullyImplicitBlackoilSolvent<GridT> ThisType;
|
|
typedef SimulatorBase<ThisType> BaseType;
|
|
|
|
typedef SimulatorTraits<ThisType> Traits;
|
|
typedef typename Traits::Solver Solver;
|
|
|
|
public:
|
|
SimulatorFullyImplicitBlackoilSolvent(const parameter::ParameterGroup& param,
|
|
const GridT& grid,
|
|
DerivedGeology& geo,
|
|
BlackoilPropsAdInterface& props,
|
|
const SolventPropsAdFromDeck& solvent_props,
|
|
const RockCompressibility* rock_comp_props,
|
|
NewtonIterationBlackoilInterface& linsolver,
|
|
const double* gravity,
|
|
const bool disgas,
|
|
const bool vapoil,
|
|
std::shared_ptr<EclipseState> eclipse_state,
|
|
BlackoilOutputWriter& output_writer,
|
|
Opm::DeckConstPtr& deck,
|
|
const std::vector<double>& threshold_pressures_by_face,
|
|
const bool solvent);
|
|
|
|
std::unique_ptr<Solver> createSolver(const Wells* wells);
|
|
|
|
void handleAdditionalWellInflow(SimulatorTimer& timer,
|
|
WellsManager& wells_manager,
|
|
typename BaseType::WellState& well_state,
|
|
const Wells* wells);
|
|
|
|
private:
|
|
bool has_solvent_;
|
|
DeckConstPtr deck_;
|
|
SolventPropsAdFromDeck solvent_props_;
|
|
|
|
};
|
|
|
|
} // namespace Opm
|
|
|
|
#include "SimulatorFullyImplicitBlackoilSolvent_impl.hpp"
|
|
|
|
#endif // OPM_SIMULATORFULLYIMPLICITBLACKOILSOLVENT_HEADER_INCLUDED
|