In order to run mcphas,singleion the following function has to be present in the module file *.so:
extern "C" void Icalc(Vector & I,double * T, Vector & Hxc, Vector & Hext, double * gJ, Vector & MODPAR, char ** sipffilename, double * lnZ,double * U, ComplexMatrix & Icalc_parstorage);
Note for windows users with MINGW the declaration should be extern "C" __declspec(dllexport) void Icalc(...).
The meaning of the symbols is as follows:
on input T temperature[K] Hxc vector of exchange field [meV] (n-dimensional, for a set of n operators I) Hext external magnetic field [T] (3 components) gJ Lande factor as read from sipf file MODPAR Vector with Parameters read from single ion property file sipffilename file name of the single ion parameter file Icalc_parstorage parameter matrix (initialized by Icalc_parameter_storage_matrix_init) it should/may contain any information, e.g. population numbers of the states (imaginary part of row 0) and eigenvalues (real part of row 0) with values set by the most recent call for this ion (use of this matrix is optional, it is provided to save time by storing here information instead of recalculating it for every call of Icalc) on output I thermal expectation value of operator <I> (n- dimensional with n>=1, may be an arbitrary set of operators, lnZ natural logarithm of single ion partition function U single ion magnetic energy [meV] Icalc_parstorage parameter matrix matrix (optional) it should/may contain any information for the next call of Icalc, e.g. population numbers of the states (imaginary part of row 0) and eigenvalues (real part of row 0) ...The module function must perform the following tasks:
... as an example the anisotropic doublet function is given as a loadable module in the file ./examples/cecu2a/1ion_mod/kramer.c, in the same directory a Makefile is given in order to show how this loadable module is compiled (for details see appendix A).
Another more complicated example, the calculation of the magnetisation in a tetragonal quasi-quartet system is given in Appendix C.