Changeset 388

Show
Ignore:
Timestamp:
09/11/08 06:30:18 (2 months ago)
Author:
powell
Message:

Parameters to avoid recalculating free energies when not necessary.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/matml/src/ternary/freenergy.c

    r384 r388  
    320320 
    321321  int efunc Index indicating which set of energy parameters to use, -1 to use 
    322   values already stored in 
    323   +latex+{\tt points}. 
    324   +html+ <tt>points</tt>. 
     322  zero without setting the efunc value in the points, -2 to use values already 
     323  stored in each entry of the 
     324  +latex+{\tt points} 
     325  +html+ <tt>points</tt> 
     326  array. 
    325327 
    326328  int derivs Flag indicating whether to also calculate and store free energy 
     
    345347        (eparams+thefunc)->G3_C*(T-(eparams+thefunc)->T0); 
    346348    } 
     349  else if (efunc == -1) 
     350    { 
     351      thefunc = 0; 
     352      G1 = eparams->G1_T0 + eparams->G1_C*(T-eparams->T0); 
     353      G2 = eparams->G2_T0 + eparams->G2_C*(T-eparams->T0); 
     354      G3 = eparams->G3_T0 + eparams->G3_C*(T-eparams->T0); 
     355    } 
    347356 
    348357  for (i=0; i<n; i++) 
    349358    { 
    350       if (efunc<0) 
     359      if (points[i].efunc != efunc || points[i].T != T || points[i].P != P) 
    351360        { 
    352           thefunc = points[i].efunc; 
    353           G1 = (eparams+thefunc)->G1_T0 + 
    354             (eparams+thefunc)->G1_C*(T-(eparams+thefunc)->T0); 
    355           G2 = (eparams+thefunc)->G2_T0 + 
    356             (eparams+thefunc)->G2_C*(T-(eparams+thefunc)->T0); 
    357           G3 = (eparams+thefunc)->G3_T0 + 
    358             (eparams+thefunc)->G3_C*(T-(eparams+thefunc)->T0); 
    359         } 
    360       else 
    361         points[i].efunc = thefunc; 
    362  
    363       C1 = 1.-points[i].C2-points[i].C3; 
    364       points[i].G = _G (C1,points[i].C2,points[i].C3, G1,G2,G3, T, P, 
    365                         eparams+thefunc); 
    366  
    367       if (derivs) 
    368         { 
    369           points[i].G2 =_G2 (C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
    370                              eparams+thefunc); 
    371           points[i].G3 =_G3 (C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
    372                              eparams+thefunc); 
    373           points[i].G22=_G22(C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
    374                              eparams+thefunc); 
    375           points[i].G33=_G33(C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
    376                              eparams+thefunc); 
    377           points[i].G23=_G23(C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
    378                              eparams+thefunc); 
     361          if (efunc == -2) 
     362            { 
     363              thefunc = points[i].efunc; 
     364              G1 = (eparams+thefunc)->G1_T0 + 
     365                (eparams+thefunc)->G1_C*(T-(eparams+thefunc)->T0); 
     366              G2 = (eparams+thefunc)->G2_T0 + 
     367                (eparams+thefunc)->G2_C*(T-(eparams+thefunc)->T0); 
     368              G3 = (eparams+thefunc)->G3_T0 + 
     369                (eparams+thefunc)->G3_C*(T-(eparams+thefunc)->T0); 
     370            } 
     371 
     372          C1 = 1.-points[i].C2-points[i].C3; 
     373          points[i].G = _G (C1,points[i].C2,points[i].C3, G1,G2,G3, T, P, 
     374                            eparams+thefunc); 
     375 
     376          if (derivs) 
     377            { 
     378              points[i].G2 =_G2 (C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
     379                                 eparams+thefunc); 
     380              points[i].G3 =_G3 (C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
     381                                 eparams+thefunc); 
     382              points[i].G22=_G22(C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
     383                                 eparams+thefunc); 
     384              points[i].G33=_G33(C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
     385                                 eparams+thefunc); 
     386              points[i].G23=_G23(C1,points[i].C2,points[i].C3, G1,G2,G3, T,P, 
     387                                 eparams+thefunc); 
     388            } 
     389 
     390          /*+ Mark the energy function, temperature and pressure at which these 
     391            values are valid +*/ 
     392          if (efunc >= 0 && derivs) 
     393            { 
     394              points[i].efunc = thefunc; 
     395              points[i].T = T; 
     396              //points[i].P = P; 
     397            } 
     398          /*else 
     399            { 
     400              points[i].efunc = -1; 
     401              points[i].T = points[i].P = -1.; 
     402              }*/ 
    379403        } 
    380404    }