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
#include "designbycontract.h"
00025
#include "common.h"
00026
#include "steamcalculatorexception.h"
00027
#include "boundaries.h"
00028
#include "state.h"
00029
#include "zeroin.h"
00030
00031
typedef enum { STEAM_SUBCOOLED =
00032 0, STEAM_SUPERHEATED, STEAM_SATURATED, STEAM_SUPERCRITICAL,
00033 STEAM_STATE_UNKNOWN = -1 } SteamStateCode;
00034
00035
typedef enum { STEAM_TEMPERATURE =
00036 0, STEAM_PRESSURE, STEAM_VOLUME, STEAM_INTERNAL_ENERGY,
00037 STEAM_ENTHALPY, STEAM_ENTROPY } SteamPropertyCode;
00038
00082
00083
00093 class SteamCalculator:
public DesignByContract {
00094
00095
public:
00096
00098
SteamCalculator();
00099
00101
SteamCalculator(
const SteamCalculator & original);
00102
00104
SteamCalculator const &
operator=(
SteamCalculator const &original);
00105
00106
00107
virtual ~SteamCalculator();
00108
00109
00110
00111
void set_pT(
const Pressure &
p,
const Temperature &
T,
double x = 1.0);
00112
00113
template<
class F,
class S>
00114
inline void set(
const F &f,
const S &s);
00115
00116
void setSatSteam_p(
const Pressure &p);
00117
void setSatWater_p(
const Pressure &p);
00118
void setSatWater_T(
const Temperature &T);
00119
void setSatSteam_T(
const Temperature &T);
00120
00121
void setB23_T(
const Temperature &T);
00122
void setB23_p(
const Pressure &p);
00123
00124
void setRegion1_pT(
const Pressure &p,
const Temperature &T);
00125
void setRegion2_pT(
const Pressure &p,
const Temperature &T);
00126
void setRegion4_Tx(
const Temperature &T,
const Num &x);
00127
void setRegion3_rhoT(
const Density &
rho,
const Temperature &T);
00128
00129
bool isSet(
void)
const;
00130
00131
00132
00133
int whichRegion(
void)
const;
00134
00135 SteamStateCode
whichState(
void);
00136
const char *
SteamCalculator::whichStateStr(
void);
00137
00138
Temperature temp()
const;
00139
Pressure pres()
const;
00140
Density dens()
const;
00141
00142
SpecificVolume specvol()
const;
00143
SpecificEnergy specienergy()
const;
00144
SpecificEntropy specentropy()
const;
00145
SpecificEnergy specenthalpy()
const;
00146
SpecHeatCap speccp()
const;
00147
SpecHeatCap speccv()
const;
00148 Num
quality()
const;
00149
DynamicViscosity dynvisc()
const;
00150
Conductivity conductivity()
const;
00151
00152
00153
virtual bool isValid(
void)
const;
00154
00156
virtual void copy(
const SteamCalculator & original);
00157
00158
protected:
00159
00160 Num
tau_iaps85()
const;
00161 Num
del_iaps85()
const;
00162 Num
pi_iaps85()
const;
00163 Num delpi_iaps85()
const;
00164 Num pitau_iaps85()
const;
00165
00166 Num
lam()
const;
00167 Num
lam0()
const;
00168 Num
lam1()
const;
00169 Num
lam2()
const;
00170
00171 Num
mu()
const;
00172 Num
mu0()
const;
00173 Num
mu1()
const;
00174 Num
mu2()
const;
00175
00176
Pressure getRegion3PressureError(
const Density &test_rho);
00177
00178
00179
00180 Temperature T;
00181 Pressure p;
00182 Density rho;
00183 Num x;
00184
00185 Num
tau;
00186 Num
pi;
00187 Num
del;
00188 Pressure reg3_target_pressure;
00189
00190
private:
00191
friend class SteamState;
00192
friend class Region1;
00193
friend class Region2;
00194
friend class Region3;
00195
friend class Region4;
00196
friend class ZeroIn<SteamCalculator, Pressure, Density>;
00197
00198
bool isset;
00199
00200
void changeState(SteamState * state);
00201
00202
void destroy();
00203
00204 SteamState *_state;
00205
00206 SteamCalculator *gas;
00207 SteamCalculator *liq;
00208
00209 };
00210
00211
template<>
00212
inline void
00213 SteamCalculator::set<Pressure,Temperature>(
const Pressure &p,
const Temperature &T){
00214 set_pT(p,T);
00215 }
00216
00217
template<>
00218
inline void
00219 SteamCalculator::set<Temperature,Pressure>(
const Temperature &T,
const Pressure &p){
00220 set_pT(p,T);
00221 }
00222
00223
#endif