Merge pull request #284 from OrderN/f-proj_PadHamiltonianMatrix

Manual updates for Padding Hamiltonian
This commit is contained in:
tsuyoshi38 2023-11-06 20:36:55 +09:00 committed by GitHub
commit 647471de1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 14 deletions

View File

@ -157,6 +157,40 @@ where ``Diag.MPOrder`` specifies the order of the Methfessel-Paxton
expansion. It is recommended to start with the lowest order and
increase gradually, testing the effects.
Go to :ref:`top <groundstate>`.
.. _gs_pad:
Padding Hamiltonian matrix by setting block size
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With the default setting, the size of Hamiltonian and overlap matrices
is determined by the total number of support functions.
It can be a prime number and timing of diagonalisation can be very slow
in such cases, since the division of the matrix into small pieces is difficult.
By padding, we can change the size of Hamiltonian matrix to improve
the efficiency of the diagonalisation. To set an appropriate value
for the block size of the matrix, specify the following two variables.
::
Diag.BlockSizeR 20
Diag.BlockSizeC 20
Note that these two numbers should be the same when padding
(and when using ELPA which will be introduced to CONQUEST soon).
We suggest that an appropriate value is between 20 and 200, but
this should be tested.
The option for padding was introduced after v1.2, and if you would
like to remove it, set the following variable.
::
Diag.PaddingHmatrix F
Go to :ref:`top <groundstate>`.
.. _gs_on:

View File

@ -657,29 +657,27 @@ Diag.GammaCentred (*boolean*)
*default*: F
Diag.ProcRows (*integer*)
Diag.PaddingHmatrix (*boolean*)
After v1.2, we have introduced a method to have an optimum value of
block size for Hamiltonian and overlap matrices (See below) by padding.
By setting 'F', we do not use the method.
*default*:
Diag.ProcCols (*integer*)
*default*:
*default*: T
Diag.BlockSizeR (*integer*)
Block size for rows (See next).
*default*:
*default*: Determined automatically
Diag.BlockSizeC (*integer*)
R ... rows, C ... columns
These are ScaLAPACK parameters, and can be set heuristically by the code. Blocks
are sub-divisions of matrices, used to divide up the matrices between processors.
These are ScaLAPACK parameters, and can be set heuristically by the code.
Blocks are sub-divisions of matrices, used to divide up the matrices between processors.
The block sizes need to be factors of the square matrix size
(i.e. :math:`\sum_{\mathrm{atoms}}\mathrm{NSF(atom)}`). A value of 64 is considered
optimal by the ScaLAPACK users guide. The rows and columns need to multiply
together to be less than or equal to the number of processors. If ProcRows
:math:`\times` ProcCols :math:`<` number of processors, some processors will be left idle.
optimal by the ScaLAPACK users guide.
*default*:
*default*: Determined automatically
Diag.MPShift[X/Y/Z] (*real*)
Specifies the shift *s* of k-points along the x(y,z) axis, in fractional
@ -742,7 +740,10 @@ Diag.ProcRows (*integer*)
Diag.ProcCols (*integer*)
Number of columns in the processor grid for SCALAPACK within each k-point
processor group
processor group. The rows and columns need to multiply
together to be less than or equal to the number of processors. If ProcRows
:math:`\times` ProcCols :math:`<` number of processors, some processors will be left idle.
*default*: Determined automatically