00001
00002
00003
00004
00005
00006
00007 #ifndef SPECSOLUTION_H
00008 #define SPECSOLUTION_H
00009
00010 #include <float.h>
00011 #include <stdio.h>
00012 #include "Solution.h"
00013
00024 class SpecSolution: public Solution {
00025 public:
00027 SpecSolution();
00029 virtual ~SpecSolution();
00030
00031
00033 int getNspec(void);
00035 virtual const char *getSpecName(int i);
00037 virtual const char *getSpecFormula(int i);
00038
00039
00041 virtual void setTk(double ltk);
00043 virtual void setPa(double lpa);
00047 virtual void setMoles(double m) throw(PhaseError *);
00050 virtual void setComps(double *lcomps);
00054 virtual void setSpecs(double *lspecs);
00056 virtual void setSpecsFull(double *lspecs);
00057
00058
00060 virtual void getSpecs(double *lspecs);
00061
00062
00064 double getGibbs();
00066 virtual double getMu0(int ispec);
00068 virtual double getMu(int i);
00070 virtual double getCompMu(int i);
00072 virtual double getSpecMu(int i);
00074 virtual double getdMudX(int i,int j);
00076 virtual void getd2Gdm2(double **d2gdm2);
00078 virtual void getd3Gdm3(double ***d3Gdm3);
00080 double getGmix();
00081
00082
00084 virtual double getEnthalpy();
00086 virtual double getHmix();
00087
00088
00090 virtual double getEntropy();
00092 virtual void getdSdm(double *dsdm);
00094 virtual void getd2Sdm2(double **d2sdm2);
00096 virtual double getSmix();
00097
00098
00100 virtual double getCp();
00102 virtual double getdCpdT();
00103
00104
00106 virtual double getVolume();
00108 virtual double getVmix();
00110 virtual double getdVdT();
00111
00112
00114 virtual void supressSpecies(int i);
00116 virtual void setSpeciateTolerance(double tol);
00118 virtual void update();
00120 virtual double getSpecCalcErr();
00122 virtual int isUpdated();
00124 int verbose;
00126 virtual void printAll();
00127
00128 protected:
00130 int *supressSpec;
00133 static const int TSUPRESS = 1;
00136 static const int PSUPRESS = 2;
00139 static const int SUPRESS = 4;
00142 int *rdx;
00144 double *mu;
00146 double **dmuds;
00149 double **K;
00151 double **m1,**m2,**m3,*v1,*v2,***mmm;
00153 double *specs;
00155 double specSum;
00157 double **spstoich;
00159 double **nu;
00161 int nuRank;
00163 double *specCharge;
00164
00167 virtual int speciate();
00175 virtual int speciate_function(double tol);
00177 virtual void init();
00179 virtual int fillSpecs();
00181 virtual void fillComps();
00183 virtual void index();
00186 virtual void getd2Gds2(double **d2gds2);
00188 virtual void getd3Gds2dT(double **d3gds2dt);
00191 virtual void getd3Gds3(double ***d3gds3);
00194 virtual void getdSds(double *dsds);
00197 virtual void getdVds(double *dsds);
00201 virtual void updateTransformKernel();
00209 virtual double dmufunc(int m,int p,double *s);
00210
00211 private:
00213 double spectol;
00215 double *rhs,*psi,*b,*bm,*delta;
00216 };
00217
00218 #endif
00219
00220
00221
00222
00223
00224