Block Structure

The BlockStructure class allows to change and manipulate Green functions structures and mappings from sumk to solver.

The block structure can also be written to and read from HDF files.

Warning

Do not write the individual elements of this class to a HDF file, as they belong together and changing one without the other can result in unexpected results. Always write the BlockStructure object as a whole.

Writing the sumk_to_solver and solver_to_sumk elements individually is not implemented.

class triqs_dft_tools.block_structure.BlockStructure(gf_struct_sumk=None, gf_struct_solver=None, solver_to_sumk=None, sumk_to_solver=None, solver_to_sumk_block=None, deg_shells=None)[source]

Bases: object

Contains information about the Green function structure.

This class contains information about the structure of the solver and sumk Green functions and the mapping between them.

Parameters:

gf_struct_sumk : list of list of tuple

gf_struct_sumk[ish][idx] = (block_name,list of indices in block)

for correlated shell ish; idx is just a counter in the list

gf_struct_solver : list of dict

gf_struct_solver[ish][block] = list of indices in that block

for inequivalent correlated shell ish

solver_to_sumk : list of dict

solver_to_sumk[ish][(from_block,from_idx)] = (to_block,to_idx)

maps from the solver block and index to the sumk block and index for inequivalent correlated shell ish

sumk_to_solver : list of dict

sumk_to_solver[ish][(from_block,from_idx)] = (to_block,to_idx)

maps from the sumk block and index to the solver block and index for inequivalent correlated shell ish

solver_to_sumk_block : list of dict

solver_to_sumk_block[ish][from_block] = to_block

maps from the solver block to the sumk block for inequivalent correlated shell ish

approximate_as_diagonal()[source]

Create a structure for a GF with zero off-diagonal elements.

Warning

In general, this will throw away non-zero elements of the Green’s function. Be sure to verify whether this approximation is justified.

convert_gf(G, G_struct, ish=0, show_warnings=True, **kwargs)[source]

Convert BlockGf from its structure to this structure.

Warning

Elements that are zero in the new structure due to the new block structure will be just ignored, thus approximated to zero.

Parameters:

G : BlockGf

the Gf that should be converted

G_struct : GfStructure

the structure of that G

ish : int

shell index

show_warnings : bool or float

whether to show warnings when elements of the Green’s function get thrown away if float, set the threshold for the magnitude of an element about to be thrown away to trigger a warning (default: 1.e-10)

**kwargs : :

options passed to the constructor for the new Gf

create_gf(ish=0, gf_function=<class 'pytriqs.gf.backwd_compat.gf_imfreq.GfImFreq'>, **kwargs)[source]

Create a zero BlockGf having the gf_struct_solver structure.

When using GfImFreq as gf_function, typically you have to supply beta as keyword argument.

Parameters:

ish : int

shell index

gf_function : constructor

function used to construct the Gf objects constituting the individual blocks; default: GfImFreq

**kwargs : :

options passed on to the Gf constructor for the individual blocks

classmethod full_structure(gf_struct, corr_to_inequiv)[source]

Construct structure that maps to itself.

This has the same structure for sumk and solver, and the mapping solver_to_sumk and sumk_to_solver is one-to-one.

Parameters:

gf_struct : list of dict

gf_struct[ish][block] = list of indices in that block

for (inequivalent) correlated shell ish

corr_to_inequiv : list

gives the mapping from correlated shell csh to inequivalent correlated shell icsh, so that corr_to_inequiv[csh]=icsh e.g. SumkDFT.corr_to_inequiv

if None, each inequivalent correlated shell is supposed to be correspond to just one correlated shell with the same index; there is not default, None has to be set explicitly!

map_gf_struct_solver(mapping)[source]

Map the Green function structure from one struct to another.

Parameters:

mapping : list of dict

the dict consists of elements (from_block,from_index) : (to_block,to_index) that maps from one structure to the other

pick_gf_struct_solver(new_gf_struct)[source]

Pick selected orbitals within blocks.

This throws away parts of the Green’s function that (for some reason - be sure that you know what you’re doing) shouldn’t be included in the calculation.

To drop an entire block, just don’t include it. To drop a certain index within a block, just don’t include it.

If it was before:

[{‘up’:[0,1],’down’:[0,1],’left’:[0,1]}]

to choose the 0th index of the up block and the 1st index of the down block and drop the left block, the new_gf_struct would have to be

[{‘up’:[0],’down’:[1]}]

Note that the indices will be renamed to be a 0-based sequence of integers, i.e. the new structure will actually be [{‘up’:[0],’down’:[0]}].

For dropped indices, sumk_to_solver will map to (None,None).

Parameters:

new_gf_struct : list of dict

formatted the same as gf_struct_solver:

new_gf_struct[ish][block]=list of indices in that block.

pick_gf_struct_sumk(new_gf_struct)[source]

Pick selected orbitals within blocks.

This throws away parts of the Green’s function that (for some reason - be sure that you know what you’re doing) shouldn’t be included in the calculation.

To drop an entire block, just don’t include it. To drop a certain index within a block, just don’t include it.

If it was before:

[{‘up’:[0,1],’down’:[0,1],’left’:[0,1]}]

to choose the 0th index of the up block and the 1st index of the down block and drop the left block, the new_gf_struct would have to be

[{‘up’:[0],’down’:[1]}]

Note that the indices will be renamed to be a 0-based sequence of integers.

For dropped indices, sumk_to_solver will map to (None,None).

Parameters:

new_gf_struct : list of dict

formatted the same as gf_struct_solver:

new_gf_struct[ish][block]=list of indices in that block.

However, the indices are not according to the solver Gf but the sumk Gf.