00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef STEAMCALCULATOR_H
00022 #define STEAMCALCULATOR_H
00023
00024 #ifdef FREESTEAM_SWIG
00025 # include "measurement.h"
00026 # define Density Measurement
00027 # define Pressure Measurement
00028 # define Temperature Measurement
00029 # define SpecificEnergy Measurement
00030 # define SpecificEntropy Measurement
00031 # define DynamicViscosity Measurement
00032 # define ThermalConductivity Measurement
00033 # define SpecHeatCap Measurement
00034 # define SpecificVolume Measurement
00035 # define SurfaceTension Measurement
00036 # define Num double
00037 #else
00038 # include "designbycontract.h"
00039 # include "steamcalculatorexception.h"
00040 # include "boundaries.h"
00041 # include "state.h"
00042 # include "zeroin.h"
00043 #endif
00044
00045 typedef enum { STEAM_SUBCOOLED =
00046 0, STEAM_SUPERHEATED, STEAM_SATURATED, STEAM_SUPERCRITICAL,
00047 STEAM_STATE_UNKNOWN = -1 } SteamStateCode;
00048
00049 typedef enum { STEAM_TEMPERATURE =
00050 0, STEAM_PRESSURE, STEAM_VOLUME, STEAM_INTERNAL_ENERGY,
00051 STEAM_ENTHALPY, STEAM_ENTROPY } SteamPropertyCode;
00052
00096
00097
00107 class SteamCalculator:public DesignByContract {
00108
00109 public:
00110
00112 SteamCalculator();
00113
00115 SteamCalculator(const SteamCalculator & original);
00116
00118 SteamCalculator const &operator=(SteamCalculator const &original);
00119
00120
00121 virtual ~SteamCalculator();
00122
00123
00124
00125 void set_pT(const Pressure &p, const Temperature &T, double x = 1.0);
00126
00127 template<class F,class S>
00128 inline void set(const F &f, const S &s);
00129
00130 void setSatSteam_p(const Pressure &p);
00131 void setSatWater_p(const Pressure &p);
00132 void setSatWater_T(const Temperature &T);
00133 void setSatSteam_T(const Temperature &T);
00134
00135 void setB23_T(const Temperature &T);
00136 void setB23_p(const Pressure &p);
00137
00138 void setRegion1_pT(const Pressure &p, const Temperature &T);
00139 void setRegion2_pT(const Pressure &p, const Temperature &T);
00140 void setRegion4_Tx(const Temperature &T, const Num &x);
00141 void setRegion3_rhoT(const Density &rho, const Temperature &T);
00142
00143 bool isSet(void) const;
00144
00145
00146
00147 int whichRegion(void) const;
00148 const SteamCalculator &getGasPart() const;
00149 const SteamCalculator &getLiquidPart() const;
00150
00151 SteamStateCode whichState(void);
00152 const char *whichStateStr(void);
00153
00154 Temperature temp() const;
00155 Pressure pres() const;
00156 Density dens() const;
00157
00158 SpecificVolume specvol() const;
00159 SpecificEnergy specienergy() const;
00160 SpecificEntropy specentropy() const;
00161 SpecificEnergy specenthalpy() const;
00162 SpecHeatCap speccp() const;
00163 SpecHeatCap speccv() const;
00164 Num quality() const;
00165 DynamicViscosity dynvisc() const;
00166 ThermalConductivity conductivity() const;
00167 SurfaceTension surftens() const;
00168
00169
00170 virtual bool isValid(void) const;
00171
00173 virtual void copy(const SteamCalculator & original);
00174
00175 protected:
00176
00177 Num tau_iaps85() const;
00178 Num del_iaps85() const;
00179 Num pi_iaps85() const;
00180 Num delpi_iaps85() const;
00181 Num pitau_iaps85() const;
00182
00183
00184 Num lam(const Num &Tbar, const Num &rhobar) const;
00185 Num lam0(const Num &Tbar) const;
00186 Num lam1(const Num &rhobar) const;
00187 Num lam2(const Num &Tbar, const Num &rhobar) const;
00188
00189 Num mu() const;
00190 Num mu0() const;
00191 Num mu1() const;
00192 Num mu2() const;
00193
00194 Pressure getRegion3PressureError(const Density &test_rho);
00195
00196
00197
00198 Temperature T;
00199 Pressure p;
00200 Density rho;
00201 Num x;
00202
00203 Num tau;
00204 Num pi;
00205 Num del;
00206 Pressure reg3_target_pressure;
00207
00208 private:
00209 friend class SteamState;
00210 friend class Region1;
00211 friend class Region2;
00212 friend class Region3;
00213 friend class Region4;
00214 friend class ZeroIn<SteamCalculator, Pressure, Density>;
00215
00216 bool isset;
00217
00218 void changeState(SteamState * state);
00219
00220 void destroy();
00221
00222 SteamState *_state;
00223
00224 SteamCalculator *gas;
00225 SteamCalculator *liq;
00226
00227 };
00228
00229 template<>
00230 inline void
00231 SteamCalculator::set<Pressure,Temperature>(const Pressure &p, const Temperature &T){
00232 set_pT(p,T);
00233 }
00234
00235 template<>
00236 inline void
00237 SteamCalculator::set<Temperature,Pressure>(const Temperature &T, const Pressure &p){
00238 set_pT(p,T);
00239 }
00240
00241 #endif