Changeset 349
- Timestamp:
- 03/27/08 11:28:08 (8 months ago)
- Location:
- trunk/matml/src/ternary
- Files:
-
- 4 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/matml/src/ternary/ChangeLog
r346 r349 3 3 * Documentation update: qhull reference, other small changes. 4 4 * Check for qhull library in configure.in. 5 * Parameterized free energy function with temperature support. 5 6 * TODO: better single-phase check in ternary.c, 6 7 multiple free energy functions; later refine qhull concave facets. -
trunk/matml/src/ternary/freenergy.c
r327 r349 19 19 double C3 Concentration of species 3. 20 20 21 double T Temperature (ignored for now). 21 double T Temperature. 22 23 energy_params *eparams Free energy function parameters. 22 24 ++++++++++++++++++++++++++++++++++++++*/ 23 25 24 double free_energy (double C2, double C3, double T )26 double free_energy (double C2, double C3, double T, energy_params *eparams) 25 27 { 26 double C1 = (1.-C2-C3 < 0.) ? 0. : 1.-C2-C3; 27 double m1=1., m2=2., m3=5.; /* Flory-Huggins molar volume */ 28 double chi12 = -.5, chi13 = 2., chi23 = .2; /* Interaction parameters */ 28 double C1 = (1.-C2-C3 < 0.) ? 0. : 1.-C2-C3, 29 G1 = eparams->G1_T0 + eparams->G1_C*(T-eparams->T0), 30 G2 = eparams->G2_T0 + eparams->G2_C*(T-eparams->T0), 31 G3 = eparams->G3_T0 + eparams->G3_C*(T-eparams->T0); 29 32 30 33 /*+ This uses the Flory-Huggins free energy formula for a polymer solution, 31 34 which divides each species' entropy term by its molar volume and adds 32 35 binary interaction parameters. 33 +latex+The resulting expression for free energy is:34 +latex+\begin{eq uation}36 +latex+The resulting regular solution expression for free energy is: 37 +latex+\begin{eqnarray} 35 38 +latex+ \label{eq:flory-huggins} 36 +latex+ G = \frac{1}{m_1}C_1\log(C_1) + \frac{1}{m_2}C_2\log(C_2) 37 +latex+ + \frac{1}{m_3}C_3\log(C_3) 38 +latex+ + \chi_{12}C_1C_2 + \chi_{13}C_1C_3 + \chi_{23}C_2C_3. 39 +latex+\end{equation} 39 +latex+ G &=& G_1 + (G_2-G_1) C_2 + (G_3-G_1) C_3 \\\ \nonumber 40 +latex+ &+& RT \left(\frac{1}{m_1}C_1\log C_1 41 +latex+ + \frac{1}{m_2}C_2\log C_2 42 +latex+ + \frac{1}{m_3}C_3\log C_3\right) \\\ \nonumber 43 +latex+ &+& \Omega_{12}C_1C_2 + \Omega_{13}C_1C_3 44 +latex+ + \Omega_{23}C_2C_3 +\Omega_{123}C_1C_2C_3. 45 +latex+\end{eqnarray} 40 46 +*/ 41 return ((C1==0.)?0.:C1/m1*log(C1)) + ((C2==0.)?0.:C2/m2*log(C2)) + 42 ((C3==0.)?0.:C3/m3*log(C3)) + 43 chi12*C2*C1 + chi13*C3*C1 + chi23*C2*C3; 47 return G1 + (G2-G1)*C2 + (G3-G2)*C3 48 + eparams->R*T*(((C1==0.)?0.:C1/eparams->M1*log(C1)) 49 + ((C2==0.)?0.:C2/eparams->M2*log(C2)) 50 + ((C3==0.)?0.:C3/eparams->M3*log(C3))) 51 + eparams->Omega12*C2*C1 + eparams->Omega13*C3*C1 + eparams->Omega23*C2*C3 52 + eparams->Omega123*C1*C2*C3; 44 53 } -
trunk/matml/src/ternary/ternary.c
r339 r349 33 33 double Gmin, Gmax; 34 34 ternary_point *points; 35 energy_params eparams={1.,1., 0.2,0.1,0., 1.,1.,1., 1.,2.,5., -.5,2.,.2, 0.}; 35 36 36 37 if (argc>1) … … 52 53 53 54 /* Calculate free energies, including upper and lower bounds for coloring */ 54 Gmin = Gmax = free_energy (0., 0., 0.);55 Gmin = Gmax = free_energy (0., 0., 1., &eparams); 55 56 for (i=0; i<=loop_max; i++) 56 57 for (j=0; j<=loop_max-i; j++) … … 60 61 points[index].C2 = (double)i/loop_max; 61 62 points[index].C3 = (double)j/loop_max; 62 points[index].G = free_energy (points[index].C2, points[index].C3, 0.);63 points[index].G = free_energy (points[index].C2, points[index].C3, 1., &eparams); 63 64 Gmin = (points[index].G<Gmin) ? points[index].G : Gmin; 64 65 Gmax = (points[index].G>Gmax) ? points[index].G : Gmax; -
trunk/matml/src/ternary/ternary.h
r348 r349 70 70 } ternary_point; /*+ Ternary "point" structure. +*/ 71 71 72 double free_energy (double C2, double C3, double T); 72 typedef struct { 73 double R; /*+ Ideal gas law constant +*/ 74 double T0; /*+ Reference temperature +*/ 75 double G1_T0; /*+ Free energy of species 1 at reference temperature +*/ 76 double G2_T0; /*+ Free energy of species 2 at reference temperature +*/ 77 double G3_T0; /*+ Free energy of species 3 at reference temperature +*/ 78 double G1_C; /*+ Species 1 heat capacity +*/ 79 double G2_C; /*+ Species 2 heat capacity +*/ 80 double G3_C; /*+ Species 3 heat capacity +*/ 81 double M1; /*+ Species 1 Flory-Huggins relative molar volume +*/ 82 double M2; /*+ Species 2 Flory-Huggins relative molar volume +*/ 83 double M3; /*+ Species 3 Flory-Huggins relative molar volume +*/ 84 double Omega12; /*+ Species 1-2 regular solution interaction parameter +*/ 85 double Omega13; /*+ Species 1-3 regular solution interaction parameter +*/ 86 double Omega23; /*+ Species 2-3 regular solution interaction parameter +*/ 87 double Omega123; /*+ Species 1-2-3 regular solution interaction parameter +*/ 88 } energy_params; 89 90 double free_energy (double C2, double C3, double T, energy_params *eparams); 73 91 74 92 int GeomviewBegin (FILE **geompipe, char *version);