Perple_X Updates

This page lists recent changes and bugs in Perple_X. If a bug is indicated for a program that you do not use, you need not concern yourself with the bug.

Previous logs are at:


7.2.0 - March 1, 2026

Maintaining backward compatibility with the numerous incarnations of THERMOCALC (aka HPx-eos) solution models has been a logistical nightmare. To mitigate this problem, 7.2.0 modifies the make definition system to reduce the number of definitions specified in Perple_X thermodynamic data files and to eliminate the potential for unintended interference from made entities in calculated phase relations. Additionally, 7.2.0 emulates THERMOCALC’s ability to modify the properties of endmembers with configurational disordering internally. These changes largely decouple the models in the solution model file from the make definitions in the thermodynamic data file. The changes are discussed in detail below.

What you really(!) need to know

  • 7.2.0 includes changes to the thermodynamic data and solution model file format that cannot be read by older versions of Perple_X.

  • 7.2.0 can be used with all Perple_X files generated after June 2010.

  • Problem definition files created with 7.1.20- may not generate identical results with the 7.2.0+ thermodynamic and solution model files because of changes in solution model and endmember names. This issue is critical for the THERMOCALC models for ilmenite and spinel:

    • Ilm(DS6) has been eliminated.

    • Use Ilm(WPH) for all ds6.33- thermodynamic data files.

    • Do not use Ilm(WPH) with ds6.34+ thermodynamic data files.

    • When using Ilm(WPH), do not exclude ilm (this is contrary to previous best practice).

    • Use Ilm(W24) for all ds6.34+ thermodynamic data files.

    • Do not use Ilm(W24) with ds6.33- thermodynamic data files.

    • Use Sp(WPC) for all ds6.22- thermodynamic data files.

    • Do not use Sp(WPC) with ds3.33+ thermodynamic data files.

    • Use Sp(HGP) for all ds6.33+ thermodynamic data files.

    • Do not use Sp(HGP) with ds6.22- thermodynamic data files.

    • When using Sp(HGP), do not exclude sp and herc (this is contrary to previous best practice).

  • Solution models Omph(GHP), oAmph(DP), and cAmph(DP) require different DQF corrections for ds5 and ds6 thermodynamic datasets. In 7.2.0, these corrections are no longer provided in the thermodynamic data files. Rather, they are specified at the end of each solution model. As provided, the 7.2.0 solution model file specifies the ds6 corrections. To use these models with a ds5 thermodynamic data file, comment out the ds6 corrections and un-comment the ds5 corrections.

  • The solution models for talc, brucite, phase-A, and clinohumite, T, B, A-phase, and Chum, respectively, have been renamed T(F), B(F), A-phase(F), and Chum(F).

Technical details

7.2.0 distinguishes three types of make definitions:

  • Standard make definitions, as in previous versions of Perple_X, specified in the thermodynamic data file header, e.g.:

    begin_makes
                        | standard make definitions
    qfm   = 2 mt + 3 q - 3 fa
        DQF(J/mol) = 0
    oen   = 1 mgts + 1 acm - 1 jd
        DQF(J/mol) = -15000 + 0.15 * p_bar
    ...
    end_makes
    

    An entity made in this manner exists independently of any solution model.

  • Solution-specific make definitions, signaled by the suffix _q (e.g., wL_q), exist only within the context of a solution model. Such entities are defined in the thermodynamic data file header, e.g.:

    begin_makes
                        | solution-specific make definitions
    wL_q    = 1 h2oL
        DQF(J/mol) = 0
    siL_q   = 8/5 silL
        DQF(J/mol) = 0
    faL_q   = 2 faL
        DQF(J/mol) = 0
    ...
    end_makes
    

    but must be invoked at the end of the solution model in which they are to be used, e.g.:

    begin_dqf_corrections
    DQF(wL_q)   =  0
    DQF(siL_q)  = -7800
    DQF(faL_q)  = -8200  - 1.4 * P_bar
    ...
    end_dqf_corrections
    

    DQF increments are cumulative. Thus, the specification in a solution model customizes the made endmember in the context of the solution model. Allowing this customization reduces the number of make definitions that must be specified in the thermodynamic data file. The solution-specific nature of _q-type make definitions limits their potential to interfere in calculated phase relations. For example, a common problem in Perple_X calculations involving TC melt models is that the h2oL endmember becomes stable with respect to real water at high pressure and low temperature. This problem is circumvented in 7.2.0 by making wL_q = 1 h2oL, and then excluding h2oL from the calculation.

  • Modifications of endmembers with configurational disordering are specified within a solution model but apply globally. For example, in Ilm(WPH):

    begin_special_operations
    spop(ilm) disorder         dqf(J/mol) = 1992.8  -  2.1 * T_K
    spop(hem) disorder         dqf(J/mol) = 0
    end_special_operations
    

    spop(name) identifies a real (i.e., not made) entity to be modified and used in the solution model; the keyword that follows (disorder or inverse, normal or order, and equilibrium) indicates the nature of the base modification and a DQF correction to be applied to the base. The name of the endmember used for output is subsequently modified by pre-pending the first character of the modification keyword. Thus, spop(ilm) modifies and renames the ilm endmember to dilm to represent the properties of disordered ilmenite.

    Formerly, use of Ilm(WPH) required the creation of a new endmember ilm_nol by duplicating the ilm entry and stripping the order-disorder model from it. dilm was then made from ilm_nol by adding a DQF to both remove the order-disorder model effects from the reference constants to obtain the true base function and to account for the additional DQF specified in the TC model. After this was done, it was necessary, or at least advisable, to exclude both ilm and ilm_nol. In 7.2.0, these exclusions are unnecessary because spop(ilm) replaces ilm with dilm and no intermediate entity, such as ilm_nol, is created.

Minor patches and modifications

  • Solution models: Opx(W24), Cpx(W24), Ilm(W24), and Bi(W24) from Weller et al. (2024) added to solution_model.dat.

  • TC ds6.36 thermodynamic dataset added as hp636ver.dat.

  • An optional solvus_tolerance keyword can be placed in the final section of a solution model. When present, this keyword locally overrides the solvus_tolerance set globally by the solvus_tolerance option in perplex_option.dat.

  • Trap added (routine savdyn, rlib.f) to prevent phase compositions from moving out of the thermodynamic composition space in calculations as a function of mobile components. This behavior is theoretically correct because a mobile component may cease to be a constituent of a stable phase as its chemical potential falls; however, Perple_X’s ill-advised compositional normalization triggers misleading diagnostic messages when such conditions occur. A more robust solution to this problem will be implemented in the future.

  • Allow made entities in the mobile/saturated phase component composition space.

  • Allow an optional version tag (720) read from the first line of thermodynamic data files. The tag is used to test whether make definitions in a thermodynamic data file are compatible with the solution model file in use.


Known current problems

Special component error

Perple_X thermodynamic data files may identify certain components as special, typically H2O and CO2. Such components are associated with a user selected internal equation of state. If a thermodynamic data file specifies more than one special component, and the user calculates phase relations of a system consisting entirely of the second special component, Perple_X will terminate with the error message:

**error ver013** ##### is an incorrect component name, valid names are: ...

where ##### are blank characters. A workaround solution to this problem is to specify the first special component in the problem definition file and set its amount to zero.