00001
00002
00003 #ifndef ROCK_H
00004 #define ROCK_H
00005 #include "silmin.h"
00006
00014 class Rock {
00015 public:
00017 Rock(void);
00019 virtual ~Rock(void);
00020
00021
00023 const int fo2_none;
00025 const int fo2_hm;
00027 const int fo2_nno;
00029 const int fo2_qfm;
00031 const int fo2_iw;
00032
00033
00035 virtual void setTk(double ltk);
00037 virtual void setPa(double lpa);
00039 virtual void setlogfo2(int mode,double delta);
00041 virtual void supressPhase(int iphase);
00043 virtual void enablePhase(int iphase);
00045 virtual void setIsenthalpic(int i);
00047 virtual void setIsentropic(int i);
00049 virtual void setIsochoric(int i);
00051 virtual void setBulkCompM(double *bc);
00053 virtual void setBulkCompW(double *bc);
00055 virtual void fractionateSolids(double scale);
00057 virtual void setVolume(double v);
00059 virtual void setEnthalpy(double h);
00061 virtual void setEntropy(double s);
00062
00063
00065 virtual double getTk();
00067 virtual double getPa();
00069 virtual int getNcomp();
00071 virtual int getNLiqComp();
00073 virtual int getNSolPhases();
00075 virtual const char *getSolPhaseName(int iphase);
00080 virtual const char *getSolPhaseFormula(int iphase, int instance);
00084 virtual const char *getSolPhaseFormula(int iphase);
00086 virtual int getNSolComp(int i);
00091 virtual const char *getSolPhaseCompName(int iphase,int icomp);
00096 virtual const char *getSolPhaseCompFormula(int iphase,int icomp);
00098 virtual const char *getCompName(int i);
00100 virtual const char *getLiqCompName(int i);
00102 virtual void getLiqComp(double *lx);
00104 virtual void getLiqCompWt(double *lx);
00106 virtual void getLiqMu(double *lmu);
00108 virtual void getLiqActivity(double *lact);
00110 int getNSatSolid();
00112 void getSatSolidList(int *ilist);
00118 virtual int getSolComp(int iphase,int instance,double *sx);
00123 virtual int getSolComp(int iphase,double *sx);
00129 virtual int getSolCompWt(int iphase,int instance,double *sx);
00134 virtual int getSolCompWt(int iphase,double *sx);
00140 virtual int getSolMu(int iphase,int instance,double *smu);
00145 virtual int getSolMu(int iphase,double *smu);
00152 virtual double getAffinity(int iphase, double *x);
00157 virtual int getSolVbar(int iphase,int instance,double *svbar);
00161 virtual int getSolVbar(int iphase,double *svbar);
00163 virtual double getlogfo2();
00165 virtual double getlogfo2(int mode);
00167 virtual void getBulkCompM(double *bc);
00169 virtual void getBulkCompW(double *bc);
00171 virtual double getLiquidMass();
00173 virtual double getSolidMass();
00178 virtual double getSolPhaseMass(int iphase,int instance);
00182 virtual double getSolPhaseMass(int iphase);
00184 virtual double getVolume();
00186 virtual double getSolidGibbsFreeEnergy();
00188 virtual double getSolidEnthalpy();
00190 virtual double getSolidEntropy();
00192 virtual double getSolidHeatCapacity();
00194 virtual double getSolidVolume();
00199 virtual double getSolidGibbsFreeEnergy(int iphase, int instance);
00203 virtual double getSolidGibbsFreeEnergy(int iphase);
00208 virtual double getSolidEnthalpy(int iphase, int instance);
00212 virtual double getSolidEnthalpy(int iphase);
00217 virtual double getSolidEntropy(int iphase, int instance);
00221 virtual double getSolidEntropy(int iphase);
00226 virtual double getSolidHeatCapacity(int iphase, int instance);
00230 virtual double getSolidHeatCapacity(int iphase);
00235 virtual double getSolidVolume(int iphase, int instance);
00239 virtual double getSolidVolume(int iphase);
00244 virtual double getSoliddVdT(int iphase, int instance);
00248 virtual double getSoliddVdT(int iphase);
00253 virtual double getSoliddVdP(int iphase, int instance);
00257 virtual double getSoliddVdP(int iphase);
00259 virtual double getDeltaOxygen();
00261 virtual double getOxygenGibbsFreeEnergy();
00263 virtual double getOxygenEnthalpy();
00265 virtual double getOxygenEntropy();
00267 virtual double getOxygenHeatCapacity();
00269 virtual double getOxygenVolume();
00271 virtual double getLiquidGibbsFreeEnergy();
00273 virtual double getLiquidEnthalpy();
00275 virtual double getLiquidEntropy();
00277 virtual double getLiquidHeatCapacity();
00279 virtual double getLiquidVolume();
00281 virtual double getLiquiddVdT();
00283 virtual double getLiquiddVdP();
00285 virtual double getLiquidViscosity();
00286
00287
00289 virtual int getPhaseNo(const char *lab);
00291 virtual int isSingleComponent(int iphase);
00293 virtual int getNumberCoexistPhase(int iphase);
00295 virtual int findRockLiquidus();
00297 virtual int equilibrateRock();
00298
00299 protected:
00301 virtual int init(void);
00303 int nphase;
00305 int *phasedex;
00307 int stateinit;
00309 virtual int initializeState();
00311 virtual void equilibrateError(int err);
00313 virtual void findLiquidusError(int err);
00315 virtual void liquify();
00317 virtual void printSilminStateStructure(SilminState *pt);
00319 SilminState *silminState;
00321 static int staticinit;
00323 static int threadCount;
00325 static const int maxThreads = 25;
00328 static int *threadPool;
00330 int curThread;
00332 static int mutexLock;
00334 ThermoData *liquidCur;
00336 ThermoData *solidsCur;
00338 ThermoData *oxygenCur;
00339 private:
00341 double *mSol,*mLiq,*r,*x;
00342 };
00343 #endif
00344
00345
00346
00347
00348
00349