All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
SteadyStateUpscalerImplicit.hpp
1 //===========================================================================
2 //
3 // File: SteadyStateUpscaler.hpp
4 //
5 // Created: Fri Aug 28 14:01:19 2009
6 //
7 // Author(s): Atgeirr F Rasmussen <atgeirr@sintef.no>
8 // B�rd Skaflestad <bard.skaflestad@sintef.no>
9 //
10 // $Date$
11 //
12 // $Revision$
13 //
14 //===========================================================================
15 
16 /*
17  Copyright 2009, 2010 SINTEF ICT, Applied Mathematics.
18  Copyright 2009, 2010 Statoil ASA.
19 
20  This file is part of The Open Reservoir Simulator Project (OpenRS).
21 
22  OpenRS is free software: you can redistribute it and/or modify
23  it under the terms of the GNU General Public License as published by
24  the Free Software Foundation, either version 3 of the License, or
25  (at your option) any later version.
26 
27  OpenRS is distributed in the hope that it will be useful,
28  but WITHOUT ANY WARRANTY; without even the implied warranty of
29  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  GNU General Public License for more details.
31 
32  You should have received a copy of the GNU General Public License
33  along with OpenRS. If not, see <http://www.gnu.org/licenses/>.
34 */
35 
36 #ifndef OPM_STEADYSTATEUPSCALERIMPLICIT_HEADER
37 #define OPM_STEADYSTATEUPSCALERIMPLICIT_HEADER
38 
39 #include <opm/upscaling/UpscalerBase.hpp>
40 #include <opm/porsol/euler/EulerUpstream.hpp>
41 #include <opm/porsol/euler/ImplicitCapillarity.hpp>
42 #include <dune/grid/common/GridAdapter.hpp>
43 #include <array>
44 
45 namespace Opm
46 {
51  template <class Traits>
53  {
54  public:
55  // ------- Typedefs and enums -------
56 
58  typedef typename Super::permtensor_t permtensor_t;
60  typedef typename UpscalerBase<Traits>::GridType GridType;
61  enum { Dimension = UpscalerBase<Traits>::Dimension };
62 
63  // ------- Methods -------
64 
67 
79  std::pair<permtensor_t, permtensor_t> upscaleSteadyState(const int flow_direction,
80  const std::vector<double>& initial_saturation,
81  const double boundary_saturation,
82  const double pressure_drop,
83  const permtensor_t& upscaled_perm,bool& success);
84 
88  const std::vector<double>& lastSaturationState() const;
89 
93  double lastSaturationUpscaled() const;
94 
96  void initSatLimits(std::vector<double>& s) const;
97 
98  void setToCapillaryLimit(double average_s, std::vector<double>& s) const;
99 
100 
101  protected:
102  // ------- Typedefs -------
103  typedef typename Traits::template TransportSolver<GridInterface, typename Super::BCs>::Type TransportSolver;
104 
105  // ------- Methods -------
106  template <class FlowSol>
107  void computeInOutFlows(std::pair<double, double>& water_inout,
108  std::pair<double, double>& oil_inout,
109  const FlowSol& flow_solution,
110  const std::vector<double>& saturations) const;
112  virtual void initImpl(const Opm::ParameterGroup& param);
113 
114 
115  // ------- Data members -------
116  std::vector<double> last_saturation_state_;
117  bool use_gravity_;
118  bool output_vtk_;
119  bool output_ecl_;
120  bool print_inoutflows_;
121  int simulation_steps_;
122  double init_stepsize_;
123  double relperm_threshold_;
124  double maximum_mobility_contrast_;
125  double sat_change_year_;
126  int max_it_;
127  double max_stepsize_;
128  double dt_sat_tol_;
129  bool use_maxdiff_;
130  TransportSolver transport_solver_;
131  GridAdapter grid_adapter_;
132  };
133 
134 } // namespace Opm
135 
136 #include "SteadyStateUpscalerImplicit_impl.hpp"
137 
138 
139 #endif // OPM_STEADYSTATEUPSCALERIMPLICIT_HEADER
const std::vector< double > & lastSaturationState() const
Accessor for the steady state saturation field.
Definition: SteadyStateUpscalerImplicit_impl.hpp:382
A base class for upscaling.
Definition: UpscalerBase.hpp:55
void initSatLimits(std::vector< double > &s) const
Ensure saturations are not outside table.
Definition: SteadyStateUpscalerImplicit_impl.hpp:407
SteadyStateUpscalerImplicit()
Default constructor.
Definition: SteadyStateUpscalerImplicit_impl.hpp:58
double lastSaturationUpscaled() const
Computes the upscaled saturation corresponding to the saturation field returned by lastSaturationStat...
Definition: SteadyStateUpscalerImplicit_impl.hpp:391
std::pair< permtensor_t, permtensor_t > upscaleSteadyState(const int flow_direction, const std::vector< double > &initial_saturation, const double boundary_saturation, const double pressure_drop, const permtensor_t &upscaled_perm, bool &success)
Does a steady-state upscaling.
Definition: SteadyStateUpscalerImplicit_impl.hpp:163
virtual void initImpl(const Opm::ParameterGroup &param)
Override from superclass.
Definition: SteadyStateUpscalerImplicit_impl.hpp:80
ResProp::MutablePermTensor permtensor_t
A type for the upscaled permeability.
Definition: UpscalerBase.hpp:66
A class for doing steady state upscaling.
Definition: SteadyStateUpscalerImplicit.hpp:52