00001 /* Phase header file 00002 * Generic phase class. Parent to all phases. 00003 * Revised with added setting methods and general components 7/1/04 00004 * Victor Kress 00005 */ 00006 #ifndef PHASE_H 00007 #define PHASE_H 00008 00009 #include "Chem.h" 00010 #include "PhaseExceptions.h" 00011 00025 class Phase { 00026 public: 00028 Phase(void); 00030 virtual ~Phase(); 00031 00032 // persistent phase properties ////// 00034 char *name; 00036 char *formula; 00038 virtual int getNcomp(void); 00040 virtual double getMW(void); 00044 virtual int getCompNo(char *lab); 00049 virtual const char *getCompName(int i); 00054 virtual const char *getCompFormula(int i); 00056 virtual int getGenericNcomp(void); 00060 virtual char *getGenericCompFormula(int icomp); 00062 virtual int isOxide(); 00063 00064 // setting methods //////////////////// 00066 virtual void setTk(double ltk); 00068 virtual void setPa(double lpa); 00070 virtual void setMoles(double lm) throw(PhaseError *); 00072 virtual void setMass(double w); 00075 virtual void setComps(double *rawcomps); 00078 virtual void setCompWeights(double *wt); 00081 virtual void setCompWtPct(double *wt); 00084 virtual void setGenericCompWts(double *wt) throw(PhaseError *); 00087 virtual void setElements(double *ele) throw(PhaseError *); 00093 virtual void resetTPbounds(double lowTbound,double hiTbound, 00094 double lowPbound,double hiPbound); 00095 00096 // getting methods ///// 00098 virtual double getTk(); 00100 virtual double getPa(); 00102 virtual double getMoles(); 00104 virtual double getMass(); 00106 virtual double getDensity(); 00108 virtual void getComps(double *rawcomps); 00110 virtual void getCompWeights(double *wt); 00112 virtual void getCompWtPct(double *wt); 00114 virtual void getGenericCompWts(double *wt); 00116 virtual void getElements(double *ele); 00119 virtual void getAddElements(double *ele,double mol); 00120 00121 // Gibbs and derivatives 00123 virtual double getGibbs(); 00127 virtual double getMu0(int i); 00130 virtual void getMu0(double *m0); 00135 virtual double getMu(int i); 00138 virtual void getMu(double *m); 00141 virtual double getActivity(int icomp); 00144 virtual void getActivity(double *a); 00147 virtual double getdMudX(int i,int j); 00149 virtual double getdMudP(int i); 00152 virtual void getdGdm(double *dgdm); 00156 virtual void getd2Gdm2(double **d2gdm2); 00160 virtual void getd3Gdm3(double ***d3gdm3); 00163 virtual double getGmix(); 00166 virtual void getHessian(double **h); 00167 00168 // Enthalpy and derivatives 00170 virtual double getEnthalpy(); 00172 virtual double getHmix(); 00173 00174 // Entropy and derivatives 00176 virtual double getEntropy(); 00179 virtual void getdSdm(double *dsdm); 00183 virtual void getd2Sdm2(double **d2sdm2); 00185 virtual double getSmix(); 00186 00187 // Cp and derivatives 00189 virtual double getCp(); 00191 virtual double getdCpdT(); 00193 virtual void getdCpdm(double *dcpdm); 00194 00195 // Volume and derivatives 00197 virtual double getVolume(); 00199 virtual void getdVdm(double *dvdm); 00201 virtual void getd2Vdm2(double **d2vdm2); 00203 virtual double getdVdT(); 00205 virtual double getdVdP(); 00207 virtual double getd2VdT2(); 00209 virtual double getd2VdTdP(); 00211 virtual double getd2VdP2(); 00213 virtual void getd2VdmdT(double *d2vdmdt); 00215 virtual void getd2VdmdP(double *d2vdmdp); 00217 virtual double getVmix(); 00218 00219 // utilities ////// 00222 virtual int isStable(); 00224 virtual void printAll(); 00226 virtual void update(); 00227 00228 protected: 00230 int ncomp; 00232 double *elarray; 00234 Stoich eleStoich; 00236 Stoich oxStoich; 00241 virtual void init(); 00243 double tk; 00245 double pa; 00247 double nmoles; 00249 double mw; 00251 const double R; 00253 const double tr; 00255 const double pr; 00257 double lowT; 00259 double highT; 00261 double lowP; 00263 double highP; 00265 virtual void checkT(double) throw(PhaseError *); 00267 virtual void checkP(double) throw(PhaseError *); 00269 virtual void checkX(double *) throw(PhaseError *); 00271 int updated; 00272 }; 00273 00274 #endif