00001 #ifndef FELDSPAR_H
00002 #define FELDSPAR_H
00003
00004 #include "MeltsSolution.h"
00005 #include "BermanPhase.h"
00006
00021 class Feldspar: public MeltsSolution {
00022 public:
00024 Feldspar();
00026 virtual ~Feldspar();
00028 const int NCOMP;
00030 const int ALBITE;
00032 const int ANORTHITE;
00034 const int SANIDINE;
00036 virtual double getGibbs();
00038 virtual double getMu(int i);
00040 virtual double getEnthalpy();
00042 virtual double getEntropy();
00044 virtual double getCp();
00046 virtual double getdCpdT();
00048 virtual double getVolume();
00050 virtual double getdVdT();
00052 virtual double getdVdP();
00054 virtual double getd2VdT2();
00056 virtual double getd2VdTdP();
00058 virtual double getd2VdP2();
00059 protected:
00061 virtual void init();
00063 static BermanData ssdata[];
00064 private:
00066 double lastTk;
00068 double lastPb;
00070 void updateDisorder(double tk,double pb);
00072 double gDisAb;
00074 double hDisAb;
00076 double sDisAb;
00078 double cpDisAb;
00080 double dcpdtDisAb;
00082 double vDisAb;
00084 double dvdtDisAb;
00086 double dvdpDisAb;
00088 double d2vdt2DisAb;
00090 double d2vdtdpDisAb;
00092 double d2vdp2DisAb;
00094 double gDisSn;
00096 double hDisSn;
00098 double sDisSn;
00100 double cpDisSn;
00102 double dcpdtDisSn;
00104 double vDisSn;
00106 double dvdtDisSn;
00108 double dvdpDisSn;
00110 double d2vdt2DisSn;
00112 double d2vdtdpDisSn;
00114 double d2vdp2DisSn;
00115 };
00116
00118
00120
00123 extern int testFld(int mask, double t, double p,int na,int nr,char **names,
00124 char **formulas,double *r,double *m);
00125
00128 extern void conFld(int inpMask,int outMask,double t,double p,
00129 double *e,double *m,double *r,double *x,double **dm,
00130 double ***d2m,double **dr,double ****d3m);
00131
00134 extern void actFld(int mask,double t,double p,double *x,
00135 double *a,double *mu,double **dr);
00136
00139 extern void gmixFld(int mask,double t,double p,double *x,
00140 double *gmix,double *dr,double **dr2,
00141 double ***dr3);
00142
00145 extern void hmixFld(int mask,double t,double p,double *x,
00146 double *hmix);
00149 extern void smixFld(int mask,double t,double p,double *x,
00150 double *smix,double *dr,double **dr2);
00151
00154 extern void cpmixFld(int mask,double t,double p,double *x,
00155 double *cpmix,double *dt,double *dr);
00156
00159 extern void vmixFld(int mask,double t,double p,double *x,
00160 double *vmix,double *dr,double **dr2,
00161 double *dt,double *dp,double *dt2,
00162 double *dtdp,double *dp2,double *drdt,
00163 double *drdp);
00164
00167 extern void albite(double p, double t, double *gDis, double *hDis,
00168 double *sDis, double *cpDis, double *dcpdtDis,
00169 double *vDis, double *dvdtDis, double *dvdpDis,
00170 double *d2vdt2Dis, double *d2vdtdpDis, double *d2vdp2Dis);
00171
00172 #endif
00173