Arithmetics
Static codes support two types of arithmetics:
-
double complex:ELEMENT_SIZE=16B
default mode: matrix elements of the Hamiltonian are assumed to be of complex numbers. -
double:ELEMENT_SIZE=8B
if you know that matrix elements, as well as the solution, will be real numbers (for examples based on symmetries of your problem) you can speed-up the calculation process by switching to double arithmetics. To do this, you need to activate in predefines.h the flag:
/**
* Activate this if you know that the Hamiltonian matrix is real.
* The code will utilize it in order to speed up the calculations by a factor of 4x (approximately)
* */
// #define HAMILTONIAN_IS_REAL
st-wslda-3d
3D version of the code diagonalizes a matrix of size:
MATRIX_DIM = NX*NY*NZ*2.
The memory needed to store this matrix in memory is
MATRIX_SIZE = MATRIX_DIM*MATRIX_DIM*ELEMENT_SIZE.
To execute the diagonalization routine st-wslda-3d code needs:
REQUIRED_MEMORY = k*MATRIX_SIZE,
Factor k is in [3,10] and accounts for storage for matrix, storage for eigen-vectors, working space, which depends on the selected diagonalization engine, and execution parameters.
st-wslda-2d
In (quasi) 2D formulation of the problem, diagonalization of the full Hamiltonian matrix factorizes into a series of max(NZ/2,1) diagonalizations of matrices of size (NZ/2 arises from the fact that there is the degeneracy of states with respect to the sign of k_z wave-vectors):
MATRIX_DIM = NX*NY*2
and the corresponding matrix size is
MATRIX_SIZE = MATRIX_DIM*MATRIX_DIM*ELEMENT_SIZE.
The number of matrices diagonalized simultaneously is:
NUMBER_OF_SIMULTANUES_DIAGONALIZATIONS = np / (p*q)
where np is the number of MPI processes (provided to the mpi execution command) and p and q are input file parameters.
To execute the diagonalization routine st-wslda-2d code needs:
REQUIRED_MEMORY = k*MATRIX_SIZE*NUMBER_OF_SIMULTANUES_DIAGONALIZATIONS.
Note: if p and q are not specified in the input file, by default st-wslda-2d will select the values that provide the highest parallelization (maximization of the number of simultaneous diagonalizations). It means the highest memory request.
st-wslda-1d
In (quasi) 1D formulation of the problem, diagonalization ofthe full Hamiltonian matrix factorizes into a series of max(NY*NZ/4,1) diagonalizations of matrices of size:
MATRIX_DIM = NX*2
and the corresponding matrix size is
MATRIX_SIZE = MATRIX_DIM*MATRIX_DIM*ELEMENT_SIZE.
The number of matrices diagonalized simultaneously is:
NUMBER_OF_SIMULTANUES_DIAGONALIZATIONS = np / (p*q)
where np is the number of MPI processes (provided to the mpi execution command) and p and q are input file parameters.
To execute the diagonalization routine st-wslda-1d code needs at most:
REQUIRED_MEMORY = k*MATRIX_SIZE*NUMBER_OF_SIMULTANUES_DIAGONALIZATIONS.
Note: if p and q are not specified in the input file, by default st-wslda-1d will select the values that provide the highest parallelization (maximization of the number of simultaneous diagonalizations). It means the highest memory request.