====== BlockBandDiagonalize ====== ### The function //BlockBandDiagonalize()// can be used to reduce the number of basis (spin-)orbitals by making linear combinations of (spin-)orbitals, according to the tight-binding structure (hopping matrix elements) within the (spin-)orbitals. As a simple example to make the idea clear, consider the following 3-by-3 matrix: $$ M = \begin{pmatrix} 0 & 1 & 1 \\ 1 & 1 & 0 \\ 1 & 0 & 1 \end{pmatrix} $$ Now, assuming that $M$ corresponds to a tight-binding Hamiltonian defined on some basis, we can linearly combine the second and third basis orbitals, such that we get a single orbital which mix with the first orbital via the matrix M. Consider the following unitary rotation matrix: $$ U = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} $$ Now, transforming the matrix $ M $ using the unitary matrix $ U $ results in: $$ M' = U M U^{T} = \begin{pmatrix} 0 & \frac{1}{\sqrt{2}} & 0 \\ \frac{1}{\sqrt{2}} & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} $$ In the new representation, the first basis orbital only mixes with the second The basis orbital and not with the third one. The function //BlockBandDiagonalize()// can accept 3 types of objects as an arguments: [[documentation:language_reference:objects:tightbinding:start|Tight-binding object]], [[documentation:language_reference:objects:operator:start|Operator]], or [[documentation:language_reference:objects:matrix:start|Matrix]]. ### ====== Input ====== Case 1: * //matrix//: hermitian matrix * //blockSize//: size of the block (as number) or list of vectors representing the starting states Case 2: * //operator//: hermitian operator * //wave function //: single wave function of list of wave functions Case 3: * //tightbindingObject//: tight binding object * //startingBlock //: list of atoms with positions, shells and orbitals used as starting block //(Optional) Third argument (in all cases)// *NTri : (//integer//) maximum number of blocks included (//default: $\infty$//) *NOrtho : (//integer//) maximum number of reorthogonalizations (//default: $\infty$//) *ReOrthogonalize: (//boolean//) use additional Gran-Schmidt orthogonalization after the Löwdin orthogonalization (//default: true//) ====== Output ====== *//matrix//: block-band diagonal matrix ===== Table of contents ===== {{indexmenu>.#1}}