\(\renewcommand{\AA}{\text{Å}}\)
3.17. Thermodynamic output options
The Thermo
class computes and prints thermodynamic information to
the screen and log file; see the files thermo.cpp
and thermo.h
.
There are four styles defined in thermo.cpp
: “one”, “multi”, “yaml”,
and “custom”. The “custom” style allows the user to explicitly list
keywords for individual quantities to print when thermodynamic output is
generated. The others have a fixed list of keywords. See the
thermo_style command for a list of available
quantities. The formatting of the “custom” style defaults to the “one”
style, but can be adapted using thermo_modify line.
The thermo styles (one, multi, etc) are defined by lists of keywords
with associated formats for integer and floating point numbers and
identified but an enumerator constant. Adding a new style thus mostly
requires defining a new list of keywords and the associated formats and
then inserting the required output processing where the enumerators are
identified. Search for the word “CUSTOMIZATION” with references to
“thermo style” in the thermo.cpp
file to see the locations where
code will need to be added. The member function Thermo::header()
prints output at the very beginning of a thermodynamic output block and
can be used to print column headers or other front matter. The member
function Thermo::footer()
prints output at the end of a
thermodynamic output block. The formatting of the output is done by
assembling a “line” (which may span multiple lines if the style inserts
newline characters (”n” as in the “multi” style).
New thermodynamic keywords can also be added to thermo.cpp
to
compute new quantities for output. Search for the word “CUSTOMIZATION”
with references to “keyword” in thermo.cpp
to see the several
locations where code will need to be added. Effectively, you need to
define a member function that computes the property, add an if statement
in Thermo::parse_fields()
where the corresponding header string for
the keyword and the function pointer is registered by calling the
Thermo::addfield()
method, and add an if statement in
Thermo::evaluate_keyword()
which is called from the Variable
class when a thermo keyword is encountered.
Note
The third argument to Thermo::addfield()
is a flag indicating
whether the function for the keyword computes a floating point
(FLOAT), regular integer (INT), or big integer (BIGINT) value. This
information is used for formatting the thermodynamic output. Inside
the function the result must then be stored either in the dvalue
,
ivalue
or bivalue
member variable, respectively.
Since the thermo_style custom command allows to use output of quantities calculated by fixes, computes, and variables, it may often be simpler to compute what you wish via one of those constructs, rather than by adding a new keyword to the thermo_style command.