Merge pull request #1158 from andlaus/thermal_stuff

Thermal stuff
This commit is contained in:
Joakim Hove
2017-12-01 12:19:28 +01:00
committed by GitHub
30 changed files with 332 additions and 22 deletions

View File

@@ -35,6 +35,7 @@ enum class Phase {
WATER = 2,
SOLVENT = 3,
POLYMER = 4,
ENERGY = 5,
};
Phase get_phase( const std::string& );
@@ -43,12 +44,12 @@ std::ostream& operator<<( std::ostream&, const Phase& );
class Phases {
public:
Phases() noexcept = default;
Phases( bool oil, bool gas, bool wat, bool solvent = false, bool polymer = false ) noexcept;
Phases( bool oil, bool gas, bool wat, bool solvent = false, bool polymer = false, bool energy = false ) noexcept;
bool active( Phase ) const noexcept;
size_t size() const noexcept;
private:
std::bitset< 5 > bits;
std::bitset< 6 > bits;
};

View File

@@ -143,6 +143,7 @@ namespace Opm
void handleWCONINJE( const SCHEDULESection&, const DeckKeyword& keyword, size_t currentStep);
void handleWPOLYMER( const DeckKeyword& keyword, size_t currentStep);
void handleWSOLVENT( const DeckKeyword& keyword, size_t currentStep);
void handleWTEMP( const DeckKeyword& keyword, size_t currentStep);
void handleWCONINJH( const SCHEDULESection&, const DeckKeyword& keyword, size_t currentStep);
void handleWELOPEN( const DeckKeyword& keyword, size_t currentStep );
void handleWELTARG( const SCHEDULESection&, const DeckKeyword& keyword, size_t currentStep);

View File

@@ -29,6 +29,7 @@ namespace Opm {
struct WellInjectionProperties {
double surfaceInjectionRate;
double reservoirInjectionRate;
double temperature;
double BHPLimit;
double THPLimit;
int VFPTableNumber;

View File

@@ -0,0 +1,41 @@
/*
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_PARSER_SPECHEAT_TABLE_HPP
#define OPM_PARSER_SPECHEAT_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class DeckItem;
// this table specifies the specific heat capacity of the black oil fluids. In this
// context, be aware that the keyword "SPECHEAT" stands for "SPECific HEAT capacity"
// not for a way to cheat on the SPE test cases ;)
class SpecheatTable : public SimpleTable {
public:
SpecheatTable(const DeckItem& item);
const TableColumn& getTemperatureColumn() const;
const TableColumn& getCpOilColumn() const;
const TableColumn& getCpWaterColumn() const;
const TableColumn& getCpGasColumn() const;
};
}
#endif

View File

@@ -0,0 +1,38 @@
/*
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_PARSER_SPECROCK_TABLE_HPP
#define OPM_PARSER_SPECROCK_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class DeckItem;
// this table specifies the volumetric heat capacity of the rock not including the
// pore space.
class SpecrockTable : public SimpleTable {
public:
SpecrockTable(const DeckItem& item);
const TableColumn& getTemperatureColumn() const;
const TableColumn& getCpRockColumn() const;
};
}
#endif

View File

@@ -86,6 +86,8 @@ namespace Opm {
const TableContainer& getPvdgTables() const;
const TableContainer& getPvdoTables() const;
const TableContainer& getPvdsTables() const;
const TableContainer& getSpecheatTables() const;
const TableContainer& getSpecrockTables() const;
const TableContainer& getWatvisctTables() const;
const TableContainer& getOilvisctTables() const;
const TableContainer& getGasvisctTables() const;

View File

@@ -123,6 +123,12 @@ namespace Opm {
constexpr const double pound = 0.45359237 * kilogram;
/// @}
/// \name Energy
/// @{
constexpr const double joule = 1;
constexpr const double btu = 1054.3503*joule; // "british thermal units"
/// @}
// --------------------------------------------------------------
// Standardised constants
// --------------------------------------------------------------
@@ -267,6 +273,7 @@ namespace Opm {
constexpr const double Viscosity = centi*Poise;
constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = kilo*joule;
}
@@ -293,6 +300,7 @@ namespace Opm {
constexpr const double Viscosity = centi*Poise;
constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = btu;
}
@@ -319,6 +327,7 @@ namespace Opm {
constexpr const double Viscosity = centi*Poise;
constexpr const double Timestep = hour;
constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = joule;
}
@@ -345,6 +354,7 @@ namespace Opm {
constexpr const double Viscosity = centi*Poise;
constexpr const double Timestep = day;
constexpr const double SurfaceTension = dyne/(centi*meter);
constexpr const double Energy = kilo*joule;
}
}