00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00027 #ifndef OPM_TEMPERATURE_OVERLAY_FLUID_STATE_HPP
00028 #define OPM_TEMPERATURE_OVERLAY_FLUID_STATE_HPP
00029
00030 #include <opm/common/Valgrind.hpp>
00031
00032 #include <utility>
00033
00034 namespace Opm {
00035
00041 template <class FluidState>
00042 class TemperatureOverlayFluidState
00043 {
00044 public:
00045 typedef typename FluidState::Scalar Scalar;
00046
00047 enum { numPhases = FluidState::numPhases };
00048 enum { numComponents = FluidState::numComponents };
00049
00058 TemperatureOverlayFluidState(const FluidState& fs)
00059 : fs_(&fs)
00060 {
00061 temperature_ = fs.temperature(0);
00062 }
00063
00064 TemperatureOverlayFluidState(Scalar T, const FluidState& fs)
00065 : temperature_(T), fs_(&fs)
00066 { }
00067
00068
00069 TemperatureOverlayFluidState(const TemperatureOverlayFluidState& fs)
00070 : fs_(fs.fs_)
00071 , temperature_(fs.temperature_)
00072 {}
00073
00074
00075 TemperatureOverlayFluidState& operator=(const TemperatureOverlayFluidState& fs)
00076 {
00077 fs_ = fs.fs_;
00078 temperature_ = fs.temperature_;
00079 return *this;
00080 }
00081
00082
00083
00084
00085
00089 auto saturation(unsigned phaseIdx) const
00090 -> decltype(std::declval<FluidState>().saturation(phaseIdx))
00091 { return fs_->saturation(phaseIdx); }
00092
00096 bool phaseIsPresent(unsigned phaseIdx) const
00097 { return fs_->phaseIsPresent(phaseIdx); }
00098
00102 auto moleFraction(unsigned phaseIdx, unsigned compIdx) const
00103 -> decltype(std::declval<FluidState>().moleFraction(phaseIdx, compIdx))
00104 { return fs_->moleFraction(phaseIdx, compIdx); }
00105
00109 auto massFraction(unsigned phaseIdx, unsigned compIdx) const
00110 -> decltype(std::declval<FluidState>().massFraction(phaseIdx, compIdx))
00111 { return fs_->massFraction(phaseIdx, compIdx); }
00112
00121 auto averageMolarMass(unsigned phaseIdx) const
00122 -> decltype(std::declval<FluidState>().averageMolarMass(phaseIdx))
00123 { return fs_->averageMolarMass(phaseIdx); }
00124
00134 auto molarity(unsigned phaseIdx, unsigned compIdx) const
00135 -> decltype(std::declval<FluidState>().molarity(phaseIdx, compIdx))
00136 { return fs_->molarity(phaseIdx, compIdx); }
00137
00141 auto fugacity(unsigned phaseIdx, unsigned compIdx) const
00142 -> decltype(std::declval<FluidState>().fugacity(phaseIdx, compIdx))
00143 { return fs_->fugacity(phaseIdx, compIdx); }
00144
00148 auto fugacityCoefficient(unsigned phaseIdx, unsigned compIdx) const
00149 -> decltype(std::declval<FluidState>().fugacityCoefficient(phaseIdx, compIdx))
00150 { return fs_->fugacityCoefficient(phaseIdx, compIdx); }
00151
00155 auto molarVolume(unsigned phaseIdx) const
00156 -> decltype(std::declval<FluidState>().molarVolume(phaseIdx))
00157 { return fs_->molarVolume(phaseIdx); }
00158
00162 auto density(unsigned phaseIdx) const
00163 -> decltype(std::declval<FluidState>().density(phaseIdx))
00164 { return fs_->density(phaseIdx); }
00165
00169 auto molarDensity(unsigned phaseIdx) const
00170 -> decltype(std::declval<FluidState>().molarDensity(phaseIdx))
00171 { return fs_->molarDensity(phaseIdx); }
00172
00176 const Scalar& temperature(unsigned ) const
00177 { return temperature_; }
00178
00182 auto pressure(unsigned phaseIdx) const
00183 -> decltype(std::declval<FluidState>().pressure(phaseIdx))
00184 { return fs_->pressure(phaseIdx); }
00185
00189 auto enthalpy(unsigned phaseIdx) const
00190 -> decltype(std::declval<FluidState>().enthalpy(phaseIdx))
00191 { return fs_->enthalpy(phaseIdx); }
00192
00196 auto internalEnergy(unsigned phaseIdx) const
00197 -> decltype(std::declval<FluidState>().internalEnergy(phaseIdx))
00198 { return fs_->internalEnergy(phaseIdx); }
00199
00203 auto viscosity(unsigned phaseIdx) const
00204 -> decltype(std::declval<FluidState>().viscosity(phaseIdx))
00205 { return fs_->viscosity(phaseIdx); }
00206
00207
00208
00209
00210
00211
00212
00216 void setTemperature(const Scalar& value)
00217 { temperature_ = value; }
00218
00227 void checkDefined() const
00228 {
00229 Valgrind::CheckDefined(temperature_);
00230 }
00231
00232 protected:
00233 const FluidState* fs_;
00234 Scalar temperature_;
00235 };
00236
00237 }
00238
00239 #endif