00001 /* Solution class header file 00002 * Generic class to deal with phases which are solutions 00003 * Victor Kress 00004 */ 00005 00006 #ifndef SOLUTION_H 00007 #define SOLUTION_H 00008 00009 #include "Phase.h" 00010 00020 class Solution: public Phase { 00021 public: 00023 Solution(); 00025 virtual ~Solution(); 00026 00027 // persistent phase properties ////// 00029 int getNcomp(void); 00031 virtual double getMW(int i); 00033 virtual double getMW(); // overrides Phase 00037 virtual int getCompNo(char *lab); 00040 virtual const char *getCompName(int i); 00043 virtual const char *getCompFormula(int i); 00044 00045 // setting methods /////////////////// 00047 virtual void setTk(double ltk); //overrides Phase 00049 virtual void setPa(double lpa); //overrides Phase 00052 virtual void setMoles(double m) throw(PhaseError *); 00054 virtual void setMass(double w); 00056 virtual void setComps(double *rawcomps); 00059 virtual void setCompWeights(double *wt); 00062 virtual void setCompWtPct(double *wt); 00065 virtual void setElements(double *ele) throw(PhaseError *); 00071 virtual void resetTPbounds(double lowTbound,double hiTbound, 00072 double lowPbound,double hiPbound); 00073 00074 // getting methods ////////////////// 00076 double getMoles(); 00078 double getMass(); 00080 virtual void getComps(double *rawcomps); 00082 virtual void getCompWeights(double *wt); 00084 virtual void getCompWtPct(double *wt); 00086 virtual void getElements(double *ele); 00090 virtual void getAddElements(double *ele,double mol); 00091 00093 virtual double getGibbs(); // overrides Phase 00095 virtual double getMu0(int icomp); 00098 virtual void getMu0(double *m0); 00100 virtual double getMu(int i); 00103 virtual void getMu(double *m); 00105 virtual double getActivity(int icomp); 00108 virtual void getActivity(double *a); 00110 virtual double getdMudX(int i,int j); 00112 virtual double getdMudP(int i); 00115 virtual void getdGdm(double *dgdm); 00119 virtual void getd2Gdm2(double **d2gdm2); 00123 virtual void getd3Gdm3(double ***d3gdm3); 00126 virtual void getHessian(double **h); 00130 virtual double** getHessian(); 00132 virtual double getGmix(); 00133 00134 // Enthalpy and derivatives ////////////// 00136 virtual double getEnthalpy(); 00137 00138 // Entropy and derivatives /////////////// 00140 virtual double getEntropy(); 00144 virtual void getdSdm(double *dsdm); 00148 virtual void getd2Sdm2(double **d2sdm2); 00150 virtual double getSmix(); 00151 00152 // Cp and derivatives /////////////////// 00154 virtual double getCp(); 00156 virtual double getdCpdT(); 00158 virtual void getdCpdm(double *dcpdm); 00159 00160 // Volume and derivatives /////////////// 00162 virtual double getVolume(); 00164 virtual void getdVdm(double *dvdm); 00166 virtual void getd2Vdm2(double **d2vdm2); 00168 virtual double getdVdT(); 00170 virtual double getdVdP(); 00172 virtual double getd2VdT2(); 00174 virtual double getd2VdTdP(); 00176 virtual double getd2VdP2(); 00178 virtual void getd2VdmdT(double *d2vdmdt); 00180 virtual void getd2VdmdP(double *d2vdmdp); 00181 00182 // utility functions /////////// 00185 virtual int isStable(); 00187 virtual void testHessian(double step); 00189 virtual void update(); 00191 virtual void printAll(); 00192 00193 protected: 00195 int nspec; 00197 int lcomp; 00199 int lspec; 00201 int *indx; 00203 double *comps; 00205 Phase **ss; 00207 double **hessian; 00209 double **A,**v,*w; 00211 virtual void index(); 00215 virtual void init(); 00218 virtual int initElOxArrays(); 00219 }; 00220 00221 #endif 00222 00223 00224 00225 00226