opm-upscaling
Loading...
Searching...
No Matches
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 <opm/grid/common/GridAdapter.hpp>
43
44namespace Opm
45{
50 template <class Traits>
52 {
53 public:
54 // ------- Typedefs and enums -------
55
56 typedef UpscalerBase<Traits> Super;
57 typedef typename Super::permtensor_t permtensor_t;
58 typedef typename UpscalerBase<Traits>::GridInterface GridInterface;
59 typedef typename UpscalerBase<Traits>::GridType GridType;
60 enum { Dimension = UpscalerBase<Traits>::Dimension };
61
62 // ------- Methods -------
63
66
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 void initImpl(const Opm::ParameterGroup& param) override;
113
114 // ------- Data members -------
115 std::vector<double> last_saturation_state_;
116 bool use_gravity_;
117 bool output_vtk_;
118 bool output_ecl_;
119 bool print_inoutflows_;
120 int simulation_steps_;
121 double init_stepsize_;
122 double relperm_threshold_;
123 double maximum_mobility_contrast_;
124 double sat_change_year_;
125 int max_it_;
126 double max_stepsize_;
127 double dt_sat_tol_;
128 bool use_maxdiff_;
129 TransportSolver transport_solver_;
130 GridAdapter grid_adapter_;
131 };
132
133} // namespace Opm
134
135#include "SteadyStateUpscalerImplicit_impl.hpp"
136
137
138#endif // OPM_STEADYSTATEUPSCALERIMPLICIT_HEADER
void initImpl(const Opm::ParameterGroup &param) override
Override from superclass.
Definition SteadyStateUpscalerImplicit_impl.hpp:78
void initSatLimits(std::vector< double > &s) const
Ensure saturations are not outside table.
Definition SteadyStateUpscalerImplicit_impl.hpp:416
double lastSaturationUpscaled() const
Computes the upscaled saturation corresponding to the saturation field returned by lastSaturationStat...
Definition SteadyStateUpscalerImplicit_impl.hpp:400
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:175
SteadyStateUpscalerImplicit()
Default constructor.
Definition SteadyStateUpscalerImplicit_impl.hpp:56
const std::vector< double > & lastSaturationState() const
Accessor for the steady state saturation field.
Definition SteadyStateUpscalerImplicit_impl.hpp:391
ResProp::MutablePermTensor permtensor_t
A type for the upscaled permeability.
Definition UpscalerBase.hpp:66
UpscalerBase()
Default constructor.
Definition UpscalerBase_impl.hpp:48
Inverting small matrices.
Definition ImplicitAssembly.hpp:43