• Main Page
  • Classes
  • Files
  • File List

MeltsSolution.h

00001 /*
00002   header file for wrappers involving general silmin structures
00003   $Id: MeltsSolution.h,v 1.11 2006/08/31 02:57:11 kress Exp $
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);            //overrides Solution
00026   virtual void setPa(double lpa);            //overrides Solution
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, /*octal binary 00000000000000000001 */
00117             SECOND, /*octal binary 00000000000000000010 */
00118             THIRD, /*octal binary 00000000000000000100 */
00119             FOURTH, /*octal binary 00000000000000001000 */
00120             FIFTH, /*octal binary 00000000000000010000 */
00121             SIXTH, /*octal binary 00000000000000100000 */
00122             SEVENTH, /*octal binary 00000000000001000000 */
00123             EIGHTH, /*octal binary 00000000000010000000 */
00124             NINTH, /*octal binary 00000000000100000000 */
00125             TENTH, /*octal binary 00000000001000000000 */
00126             ELEVENTH, /*octal binary 00000000010000000000 */
00127             TWELFTH, /*octal binary 00000000100000000000 */
00128             THIRTEENTH,/*octal binary 00000001000000000000 */
00129             FOURTEENTH,/*octal binary 00000010000000000000 */
00130             FIFTEENTH,/*octal binary 00000100000000000000 */
00131             SIXTEENTH,/*octal binary 00001000000000000000 */
00132             SEVENTEENTH,/*octal binary 00010000000000000000*/
00133             EIGHTEENTH,/*octal binary 00100000000000000000 */
00134             NINETEENTH,/*octal binary 01000000000000000000 */
00135             TWENTIETH;/*octal binary 10000000000000000000 */
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,     /* moles of elements               BINARY MASK: 00000001 */
00188      double *m,     /* moles of endmember components   BINARY MASK: 00000010 */
00189      double *r,     /* indep compositional variables   BINARY MASK: 00000100 */
00190      double *x,     /* mole fractions of endmember cmp BINARY MASK: 00001000 */
00191      double **dm,   /* matrix[i][j]: dr[i]/dm[j]       BINARY MASK: 00010000 */
00192      double ***d2m, /* cube[i][j][k]: d2r[i]/dm[j]dm[k]BINARY MASK: 00100000 */
00193      double **dr,   /* matrix[i][j]: dx[i]/dr[j]       BINARY MASK: 01000000 */
00194      double ****d3m /* 4d[i][j][k][l]: d3r[i]/dm[j]dm[k]dm[l] MASK: 10000000 */
00195   );
00206   void (*activity) (int mask, double t, double p, double *r,
00207      double *a,   /* (pointer to a[]) activities           BINARY MASK: 0001 */
00208      double *mu,  /* (pointer to mu[]) chemical potentials BINARY MASK: 0010 */
00209      double **dr  /* (pointer to dr[][]) d(a[])/d(r[])     BINARY MASK: 0100 */
00210   );            /* exclusion applied to activities if:     BINARY MASK: 1000 */
00222   void (*gmix) (int mask, double t, double p, double *r,
00223      double *gmix,  /* Gibbs energy of mixing              BINARY MASK: 0001 */
00224      double *dr,    /* (pointer to dr[]) d(g)/d(r[])       BINARY MASK: 0010 */
00225      double **dr2,  /* (pointer to dr2[][]) d2(g)/d(r[])2  BINARY MASK: 0100 */
00226      double ***dr3  /* (pointer to dr3[][][]) d3(g)/d(r[])3BINARY MASK: 1000 */
00227   );
00236   void (*hmix) (int mask, double t, double p, double *r,
00237      double *hmix  /* Enthalpy of mixing                      BINARY MASK: 1 */
00238   );
00249   void (*smix) (int mask, double t, double p, double *r,
00250      double *smix,  /* Entropy of mixing                    BINARY MASK: 001 */
00251      double *dr,    /* (pointer to dr[]) d(s)/d(r[])        BINARY MASK: 010 */
00252      double **dr2   /* (pointer to dr2[][]) d2(s)/d(r[])2   BINARY MASK: 100 */
00253   );
00264   void (*cpmix) (int mask, double t, double p, double *r,
00265      double *cpmix, /* Heat capacity of mixing              BINARY MASK: 001 */
00266      double *dt,    /* d(cp)/d(t)                           BINARY MASK: 010 */
00267      double *dr     /* d(cp)/d(r[])                         BINARY MASK: 100 */
00268   );
00286   void (*vmix) (int mask, double t, double p, double *r,
00287      double *vmix, /* Volume of mixing               BINARY MASK: 0000000001 */
00288      double *dr,   /* (pointer to dr[]) d(v)/d(r[])  BINARY MASK: 0000000010 */
00289      double **dr2, /* (point dr2[][]) d(v)/d(r[])2   BINARY MASK: 0000000100 */
00290      double *dt,   /* d(v)/d(t)                      BINARY MASK: 0000001000 */
00291      double *dp,   /* d(v)/d(p)                      BINARY MASK: 0000010000 */
00292      double *dt2,  /* d2(v)/d(t)2                    BINARY MASK: 0000100000 */
00293      double *dtdp, /* d2(v)/d(t)d(p)                 BINARY MASK: 0001000000 */
00294      double *dp2,  /* d2(v)/d(p)2                    BINARY MASK: 0010000000 */
00295      double *drdt, /* d2(v)/d(r[])d(t)               BINARY MASK: 0100000000 */
00296      double *drdp  /* d2(v)/d(r[])d(p)               BINARY MASK: 1000000000 */
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 

Generated on Fri Aug 6 2010 13:30:28 for phases by  doxygen 1.7.1