pwtools.eos.ExternEOS¶
- class pwtools.eos.ExternEOS(app=None, energy=None, volume=None, dir=None, bv_method='ev', verbose=True)[source]¶
Bases:
FlexibleGetters
Base class for calling extern EOS-fitting executables. The class writes an input file, calls the app, loads E(V) fitted data and loads or calcutates P(V), B(V).
The number N of data points for the returned arrays (fitted curves) are handled by derived classes.
We have three “representations” of the data:
input data E(V) : self.volume [Ang^3], self.energy [eV]
fitted or calculated points : self.{ev,pv,bv} – 2d arrays (N,2) where N is the number of returned fitted points from the fitting app. N depends on the fitting app. For instance, in ElkEOSFit, you can use npoints to set N.
Splines thru fitted or calculated (N,2) data ev,pv,bv : self.spl_{ev,pv,bv}.
- ev, pv, bv, spl_ev, spl_pv, spl_bv, see fit() doc string.
Examples
>>> from pwtools import eos >>> efit = eos.ElkEOSFit(app='eos.x', energy=ee, volume=vv) >>> efit.fit() >>> plot(vv, ee, 'o-', label='E(V) data') >>> plot(efit.ev[:,0], efit.ev[:,1], label='E(V) fit') >>> plot(efit.pv[:,0], efit.pv[:,1], label='P=-dE/dV') >>> plot(efit.ev[:,0], efit.spl_ev(efit.ev[:,0]), label='spline E(V)') >>> plot(efit.pv[:,0], efit.spl_pv(efit.pv[:,0]), label='spline P(V)') >>> print "V0={v0} E0={e0} B0={b0} P0={p0}".format(**efit.get_min())
Notes
For derived classes: Implement _fit(), which sets self.{ev,pv}. bv and spl_bv are always calculated from ev or pv when
fit()
is called, see alsocalc_bv()
andset_bv_method()
.- __init__(app=None, energy=None, volume=None, dir=None, bv_method='ev', verbose=True)[source]¶
- Parameters:
app (str) – name of the executable ([/path/to/]eos.x), make sure that it is on your PATH or use an absolute path
energy (1d array [eV])
volume (1d array [Ang^3])
dir (str) – dir where in- and outfiles are written, default is the basename of “app” (e.g. “eos.x” for app=’/path/to/eos.x’)
bv_method (str, {'pv', 'ev'}) – Based on which quantity should B(V) and minimum properties be calculated. pv: based on P(V) ev: based on E(V)
verbose (bool) – print stdout and stderr of fitting tool
Methods
assert_attr
(attr)Raise AssertionError if self.<attr> is not set (is_set_attr() returns False.
assert_attr_lst
(attr_lst)assert_set_attr
(attr)Same as assert_attr(), but run try_set_attr() first.
assert_set_attr_lst
(attr_lst)calc_bv
()check_set_attr
(attr)Run try_set_attr() and return the result of is_set_attr(), i.e. True or False.
check_set_attr_lst
(attr_lst)dump
(dump_filename[, mkdir])Write object to binary file using pickle.
fit
(*args, **kwargs)Fit E-V data (self.energy, self.volume).
get_min
([behave])Calculate properites at energy minimum of E(V).
get_return_attr
(attr_name)Call try_set_attr() are return self.<attr_name> if set.
init_attr_lst
([attr_lst])Set each self.<attr> in attr_lst to None.
is_set_attr
(attr)Check if self has the attribute self.<attr> and if it is _not_ None.
is_set_attr_lst
(attr_lst)load
(dump_filename)Load pickled object.
raw_return
(attr_name)Call
try_set_attr(_<attr_name>_raw)
and return it if set, else None.raw_slice_get
(attr_name, sl, axis)Shortcut method:
set_all
([attr_lst])Call getter for each attr name in attr_lst.
set_attr_lst
(attr_lst)Set self.attr_lst and init each attr to None.
set_bv_method
(bv_method)Set self.bv_method, a.k.a.
try_set_attr
(attr)If self.<attr> does not exist or is None, then invoke an appropirately named getter as if this command would be executed.
try_set_attr_lst
(attr_lst)