00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00028 #ifndef OPM_FLUID_STATE_PRESSURE_MODULES_HPP
00029 #define OPM_FLUID_STATE_PRESSURE_MODULES_HPP
00030
00031 #include <opm/material/common/MathToolbox.hpp>
00032 #include <opm/common/Valgrind.hpp>
00033 #include <opm/common/Exceptions.hpp>
00034 #include <opm/common/ErrorMacros.hpp>
00035
00036 #include <algorithm>
00037
00038 namespace Opm {
00039
00044 template <class Scalar,
00045 unsigned numPhases,
00046 class Implementation>
00047 class FluidStateExplicitPressureModule
00048 {
00049 public:
00050 FluidStateExplicitPressureModule()
00051 { Valgrind::SetUndefined(pressure_); }
00052
00056 const Scalar& pressure(unsigned phaseIdx) const
00057 { return pressure_[phaseIdx]; }
00058
00059
00063 void setPressure(unsigned phaseIdx, const Scalar& value)
00064 { pressure_[phaseIdx] = value; }
00065
00070 template <class FluidState>
00071 void assign(const FluidState& fs)
00072 {
00073 for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
00074 pressure_[phaseIdx] = Opm::decay<Scalar>(fs.pressure(phaseIdx));
00075 }
00076 }
00077
00086 void checkDefined() const
00087 {
00088 Valgrind::CheckDefined(pressure_);
00089 }
00090
00091 protected:
00092 Scalar pressure_[numPhases];
00093 };
00094
00099 template <class Scalar>
00100 class FluidStateNullPressureModule
00101 {
00102 public:
00103 FluidStateNullPressureModule()
00104 { }
00105
00109 const Scalar& pressure(unsigned ) const
00110 { OPM_THROW(std::logic_error, "Pressure is not provided by this fluid state"); }
00111
00112
00117 template <class FluidState>
00118 void assign(const FluidState& )
00119 { }
00120
00129 void checkDefined() const
00130 { }
00131 };
00132
00133 }
00134
00135 #endif