00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef SOLVENTPROPSADFROMDECK_HPP
00021 #define SOLVENTPROPSADFROMDECK_HPP
00022
00023 #include <opm/autodiff/BlackoilPropsAdFromDeck.hpp>
00024 #include <opm/autodiff/AutoDiffBlock.hpp>
00025
00026 #include <opm/core/utility/NonuniformTableLinear.hpp>
00027
00028 #include <opm/parser/eclipse/Deck/Deck.hpp>
00029 #include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
00030
00031 #include <cmath>
00032 #include <vector>
00033 #include <opm/common/ErrorMacros.hpp>
00034
00035 namespace Opm
00036 {
00037 class SolventPropsAdFromDeck
00038 {
00039 public:
00040 SolventPropsAdFromDeck(const Deck& deck,
00041 const EclipseState& eclipseState,
00042 const int number_of_cells,
00043 const int* global_cell);
00044
00046
00048
00049 typedef AutoDiffBlock<double> ADB;
00050 typedef ADB::V V;
00051 typedef std::vector<int> Cells;
00052
00057 ADB bSolvent(const ADB& pg,
00058 const Cells& cells) const;
00059
00064 ADB muSolvent(const ADB& pg,
00065 const Cells& cells) const;
00066
00071 ADB gasRelPermMultiplier(const ADB& solventFraction,
00072 const Cells& cells) const;
00073
00078 ADB solventRelPermMultiplier(const ADB& solventFraction,
00079 const Cells& cells) const;
00080
00085 ADB misicibleHydrocarbonWaterRelPerm(const ADB& Sn,
00086 const Cells& cells) const;
00087
00093 ADB miscibleSolventGasRelPermMultiplier(const ADB& Ssg,
00094 const Cells& cells) const;
00095
00100 ADB miscibleOilRelPermMultiplier(const ADB& So,
00101 const Cells& cells) const;
00102
00107 ADB miscibilityFunction(const ADB& solventFraction,
00108 const Cells& cells) const;
00109
00114 ADB pressureMiscibilityFunction(const ADB& po,
00115 const Cells& cells) const;
00116
00121 ADB miscibleCriticalGasSaturationFunction(const ADB& Sw,
00122 const Cells& cells) const;
00123
00128 ADB miscibleResidualOilSaturationFunction(const ADB& Sw,
00129 const Cells& cells) const;
00130
00134 V solventSurfaceDensity(const Cells& cells) const;
00135
00139 V mixingParameterViscosity(const Cells& cells) const;
00140
00144 V mixingParameterDensity(const Cells& cells) const;
00145
00150 ADB pressureMixingParameter(const ADB& po,
00151 const Cells& cells) const;
00152
00153
00154 private:
00160 ADB makeADBfromTables(const ADB& X,
00161 const Cells& cells,
00162 const std::vector<int>& regionIdx,
00163 const std::vector<NonuniformTableLinear<double>>& tables) const;
00164
00172 void extractTableIndex(const std::string& keyword,
00173 const Opm::EclipseState& eclState,
00174 size_t numCompressed,
00175 const int* compressedToCartesianCellIdx,
00176 std::vector<int>& tableIdx) const;
00177
00178
00179 std::vector<int> cellPvtRegionIdx_;
00180 std::vector<int> cellMiscRegionIdx_;
00181 std::vector<int> cellSatNumRegionIdx_;
00182 std::vector<NonuniformTableLinear<double> > b_;
00183 std::vector<NonuniformTableLinear<double> > viscosity_;
00184 std::vector<NonuniformTableLinear<double> > inverseBmu_;
00185 std::vector<double> solvent_surface_densities_;
00186 std::vector<NonuniformTableLinear<double> > krg_;
00187 std::vector<NonuniformTableLinear<double> > krs_;
00188 std::vector<NonuniformTableLinear<double> > krn_;
00189 std::vector<NonuniformTableLinear<double> > mkro_;
00190 std::vector<NonuniformTableLinear<double> > mkrsg_;
00191 std::vector<NonuniformTableLinear<double> > misc_;
00192 std::vector<NonuniformTableLinear<double> > pmisc_;
00193 std::vector<NonuniformTableLinear<double> > sorwmis_;
00194 std::vector<NonuniformTableLinear<double> > sgcwmis_;
00195 std::vector<NonuniformTableLinear<double> > tlpmix_param_;
00196 std::vector<double> mix_param_viscosity_;
00197 std::vector<double> mix_param_density_;
00198 };
00199
00200 }
00201
00202 #endif // SOLVENTPROPSADFROMDECK_HPP