Changeset 349

Show
Ignore:
Timestamp:
03/27/08 11:28:08 (8 months ago)
Author:
powell
Message:

Parameterized free energy with temperature support.

Location:
trunk/matml/src/ternary
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/matml/src/ternary/ChangeLog

    r346 r349  
    33  * Documentation update: qhull reference, other small changes. 
    44  * Check for qhull library in configure.in. 
     5  * Parameterized free energy function with temperature support. 
    56  * TODO: better single-phase check in ternary.c, 
    67    multiple free energy functions; later refine qhull concave facets. 
  • trunk/matml/src/ternary/freenergy.c

    r327 r349  
    1919  double C3 Concentration of species 3. 
    2020 
    21   double T Temperature (ignored for now). 
     21  double T Temperature. 
     22 
     23  energy_params *eparams Free energy function parameters. 
    2224  ++++++++++++++++++++++++++++++++++++++*/ 
    2325 
    24 double free_energy (double C2, double C3, double T) 
     26double free_energy (double C2, double C3, double T, energy_params *eparams) 
    2527{ 
    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); 
    2932 
    3033  /*+ This uses the Flory-Huggins free energy formula for a polymer solution, 
    3134    which divides each species' entropy term by its molar volume and adds 
    3235    binary interaction parameters. 
    33     +latex+The resulting expression for free energy is: 
    34     +latex+\begin{equation} 
     36    +latex+The resulting regular solution expression for free energy is: 
     37    +latex+\begin{eqnarray} 
    3538    +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} 
    4046    +*/ 
    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; 
    4453} 
  • trunk/matml/src/ternary/ternary.c

    r339 r349  
    3333  double Gmin, Gmax; 
    3434  ternary_point *points; 
     35  energy_params eparams={1.,1., 0.2,0.1,0., 1.,1.,1., 1.,2.,5., -.5,2.,.2, 0.}; 
    3536 
    3637  if (argc>1) 
     
    5253 
    5354  /* 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); 
    5556  for (i=0; i<=loop_max; i++) 
    5657    for (j=0; j<=loop_max-i; j++) 
     
    6061        points[index].C2 = (double)i/loop_max; 
    6162        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); 
    6364        Gmin = (points[index].G<Gmin) ? points[index].G : Gmin; 
    6465        Gmax = (points[index].G>Gmax) ? points[index].G : Gmax; 
  • trunk/matml/src/ternary/ternary.h

    r348 r349  
    7070} ternary_point; /*+ Ternary "point" structure. +*/ 
    7171 
    72 double free_energy (double C2, double C3, double T); 
     72typedef 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 
     90double free_energy (double C2, double C3, double T, energy_params *eparams); 
    7391 
    7492int GeomviewBegin (FILE **geompipe, char *version);