• Main Page
  • Classes
  • Files
  • File List

SpecSolution.h

00001 /* SpecSolution header file
00002  * Generic class to deal with species involving homogenious speciation
00003  * 7/17/06 added capability to handle charge balance constraints.
00004  * $Id: SpecSolution.h,v 1.35 2007/11/30 09:25:52 kress Exp $
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   // persistent phase properties ///////////
00033   int getNspec(void);    
00035   virtual const char *getSpecName(int i);
00037   virtual const char *getSpecFormula(int i);
00038 
00039   // setting methods //////////////////////
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   // getting methods ///////////////////////
00060   virtual void getSpecs(double *lspecs);
00061 
00062   // Gibbs and derivatives
00064   double getGibbs();                // Overrides Solution
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();                 // Overrides Solution
00081 
00082   // enthalpy and derivatives
00084   virtual double getEnthalpy();             // Overrides Solution
00086   virtual double getHmix();                 // Overrides Solution
00087 
00088   // entropy and derivatives
00090   virtual double getEntropy();              // Overrides Solution
00092   virtual void  getdSdm(double *dsdm);
00094   virtual void  getd2Sdm2(double **d2sdm2);
00096   virtual double getSmix();                 // Overrides Solution
00097 
00098   // heat capacity and derivatives
00100   virtual double getCp();
00102   virtual double getdCpdT();
00103 
00104   // volume and derivatives
00106   virtual double getVolume();               // Overrides Solution
00108   virtual double getVmix();
00110   virtual double getdVdT();
00111 
00112   // utility functions ////////////////////////
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 

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