triqs_dft_tools.converters.plovasp.proj_group.ProjectorGroup.get_block_matrix_map

ProjectorGroup.get_block_matrix_map()[source]

Generates a map from a set of projectors belonging to different shells and ions onto a set of block projector matrices, each of which is orthonormalized.

Returns the map and the maximum orbital dimension of the block projector matrix.

Mapping is defined as a list of ‘block_maps’ corresponding to subsets of projectors to be orthogonalized. Each subset corresponds to a subset of sites and spans all orbital indices. defined by ‘bl_map’ as

bl_map = [((i1_start, i1_end), (i1_shell, i1_ion)),

((i2_start, i2_end), (i2_shell, i2_ion)), …],

where iX_start, iX_end is the range of indices of the block matrix (in Python convention iX_end = iX_last + 1, with iX_last being the last index of the range), iX_shell and iX_ion the shell and site indices. The length of the range should be consistent with ‘nlm’ dimensions of a corresponding shell, i.e., iX_end - iX_start = nlm[iX_shell].

Consider particular cases:
  1. Orthogonality is ensured on each site (NORMION = True). For each site ‘ion’ we have the following mapping:

    block_maps = [bl_map[ion] for ion in range(shell.nion)

    for shell in shells]

    bl_map = [((i1_start, i1_end), (i1_shell, ion)),

    ((i2_start, i2_end), (i2_shell, ion)), …],

  2. Orthogonality is ensured on all sites within the group (NORMION = False). The mapping:

    block_maps = [bl_map]

    bl_map = [((i1_start, i1_end), (i1_shell, i1_shell.ion1)),

    ((i1_start, i1_end), (i1_shell, i1_shell.ion2)), … ((i2_start, i2_end), (i2_shell, i2_shell.ion1)), ((i2_start, i2_end), (i2_shell, i2_shell.ion2)), …],