Basis Functions

Each cluster is defined on a set of cluster functions, which is expanded on a set of single-site basis functions. The basis function obeys the orthogonality condition

\[\frac{1}{M} \sum _{s_i=-m}^m \Theta _n (s_i) \Theta_{n'}(s_i) = \delta _{nn'}\]

For more information, please see the CLEASE paper. CLEASE implements three different basis functions: Polynomial, Trigonometric and BinaryLinear.

class clease.basis_function.Polynomial(unique_elements: Sequence[str])[source]

Bases: BasisFunction

Pseudospin and basis function from Sanchez et al.

Sanchez, J. M., Ducastelle, F. and Gratias, D. (1984). Generalized cluster description of multicomponent systems. Physica A: Statistical Mechanics and Its Applications, 128(1-2), 334-350.

name = 'polynomial'
get_spin_dict() Dict[str, int][source]

Define pseudospins for all consistuting elements.

get_basis_functions() List[Dict[str, float]][source]

Create basis functions to guarantee the orthonormality.

class clease.basis_function.Trigonometric(unique_elements: Sequence[str])[source]

Bases: BasisFunction

Pseudospin and basis function from van de Walle.

van de Walle, A. (2009). Multicomponent multisublattice alloys, nonconfigurational entropy and other additions to the Alloy Theoretic Automated Toolkit. Calphad, 33(2), 266-278.

name = 'trigonometric'
get_spin_dict() Dict[str, int][source]

Define pseudospins for all consistuting elements.

get_basis_functions() List[Dict[str, float]][source]

Create basis functions to guarantee the orthonormality.

class clease.basis_function.BinaryLinear(unique_elements: List[str], redundant_element: str | None = 'auto')[source]

Bases: BasisFunction

Pseudospin and basis function from Zhang and Sluiter. The redunant_element parameter can be used to select which element is not explicitly defined by the ECI values. If it is not set, the element will be chosen as the first element in alphabetical order.

Zhang, X. and Sluiter M. Cluster expansions for thermodynamics and kinetics of multicomponent alloys. Journal of Phase Equilibria and Diffusion 37(1) 44-52.

name = 'binary_linear'
__init__(unique_elements: List[str], redundant_element: str | None = 'auto')[source]
get_spin_dict() Dict[str, int][source]

Define pseudospins for all consistuting elements.

get_basis_functions() List[Dict[str, float]][source]

Create orthonormal basis functions.

Due to the constraint that any site is occupied by exactly one element, we only need to track N-1 species if there are N species. Hence, the first element specified is redundant, and will not have a basis function.

customize_full_cluster_name(full_cluster_name: str) str[source]

Translate the decoration number to element names.

todict() dict[source]

Creates a dictionary representation of the class

All three basis functions inherit from the same base abstract base interface:

class clease.basis_function.BasisFunction(unique_elements: Sequence[str])[source]

Bases: ABC

Base class for all Basis Functions.

name = None
__init__(unique_elements: Sequence[str]) None[source]
property unique_elements: List[str]
property num_unique_elements: int
property spin_dict: Dict[str, int]
property basis_functions: List[Dict[str, float]]

Property access to get_basis_functions().

abstractmethod get_spin_dict()[source]

Get spin dictionary.

abstractmethod get_basis_functions()[source]

Create basis functions which guarantees the orthonormality condition.

customize_full_cluster_name(full_cluster_name: str) str[source]

Customize the full cluster names. Default is to do nothing.

todict() dict[source]

Create a dictionary representation of the basis function class

clease_objtype = 'basisfunction'
classmethod load(fd, **kwargs)

Method for loading class object from JSON

save(fd)

Method for writing class object to a JSON file.