00001
00002
00003
00004
00005
00006 #ifndef MELTSSOLUTION_H
00007 #define MELTSSOLUTION_H
00008
00009 #include "Solution.h"
00010
00017 class MeltsSolution: public Solution {
00018 public:
00020 MeltsSolution();
00022 virtual ~MeltsSolution();
00024 virtual void setTk(double ltk);
00026 virtual void setPa(double lpa);
00029 virtual void setComps(double *rawcomps);
00032 virtual void setElements(double *ele) throw(PhaseError *);
00033
00035 virtual double getGibbs();
00037 virtual double getMu(int i);
00039 virtual void getMu(double *m);
00041 virtual double getActivity(int i);
00043 virtual void getActivity(double *act);
00045 virtual double getdMudX(int m,int p);
00047 virtual double getdMudP(int m);
00049 virtual void getdGdm(double *dgdm);
00051 virtual void getd2Gdm2(double **d2gdm2);
00053 virtual void getd3Gdm3(double ***d3gdm3);
00054
00056 virtual double getEnthalpy();
00057
00059 virtual double getEntropy();
00064 virtual void getdSdm(double *dsdm);
00068 virtual void getd2Sdm2(double **d2sdm2);
00069
00071 virtual double getCp();
00073 virtual double getdCpdT();
00075 virtual void getdCpdm(double *dcpdm);
00076
00078 virtual double getVolume();
00080 virtual void getdVdm(double *dvdm);
00082 virtual void getd2Vdm2(double **d2vdm2);
00084 virtual double getdVdT();
00086 virtual double getdVdP();
00088 virtual double getd2VdT2();
00090 virtual double getd2VdTdP();
00092 virtual double getd2VdP2();
00094 virtual void getd2VdmdT(double *d2vdmdt);
00096 virtual void getd2VdmdP(double *d2vdmdp);
00097
00100 virtual double getGmix();
00102 virtual double getHmix();
00104 virtual double getSmix();
00106 virtual double getVmix();
00108 virtual double getCpmix();
00110 virtual double getdVdTmix();
00112 virtual double getdVdPmix();
00113
00114 protected:
00116 const int FIRST,
00117 SECOND,
00118 THIRD,
00119 FOURTH,
00120 FIFTH,
00121 SIXTH,
00122 SEVENTH,
00123 EIGHTH,
00124 NINTH,
00125 TENTH,
00126 ELEVENTH,
00127 TWELFTH,
00128 THIRTEENTH,
00129 FOURTEENTH,
00130 FIFTEENTH,
00131 SIXTEENTH,
00132 SEVENTEENTH,
00133 EIGHTEENTH,
00134 NINETEENTH,
00135 TWENTIETH;
00136
00155 int (*testcomp) (int mask, double t, double p,int na,int nr,char **names,
00156 char **formulas,double *r,double *m);
00157
00186 void (*convert) (int inpMask, int outMask, double t, double p,
00187 double *e,
00188 double *m,
00189 double *r,
00190 double *x,
00191 double **dm,
00192 double ***d2m,
00193 double **dr,
00194 double ****d3m
00195 );
00206 void (*activity) (int mask, double t, double p, double *r,
00207 double *a,
00208 double *mu,
00209 double **dr
00210 );
00222 void (*gmix) (int mask, double t, double p, double *r,
00223 double *gmix,
00224 double *dr,
00225 double **dr2,
00226 double ***dr3
00227 );
00236 void (*hmix) (int mask, double t, double p, double *r,
00237 double *hmix
00238 );
00249 void (*smix) (int mask, double t, double p, double *r,
00250 double *smix,
00251 double *dr,
00252 double **dr2
00253 );
00264 void (*cpmix) (int mask, double t, double p, double *r,
00265 double *cpmix,
00266 double *dt,
00267 double *dr
00268 );
00286 void (*vmix) (int mask, double t, double p, double *r,
00287 double *vmix,
00288 double *dr,
00289 double **dr2,
00290 double *dt,
00291 double *dp,
00292 double *dt2,
00293 double *dtdp,
00294 double *dp2,
00295 double *drdt,
00296 double *drdp
00297 );
00298
00299
00301 double *space1d0,*space1d1;
00303 double **space2d0,**space2d1;
00305 double ***space3d0,***space3d1;
00307 double pb;
00309 double *rx;
00311 double **drxdm;
00313 double ***d2rxdm2;
00315 double ****d3rxdm3;
00317 virtual void init();
00319 virtual void checkX(double *) throw(PhaseError *);
00320 };
00321
00322 #endif
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336