mirror of
https://github.com/triqs/dft_tools
synced 2024-12-21 20:03:41 +01:00
add deg_shells to block_structure
This commit is contained in:
parent
7599336e55
commit
ad2ee87bc7
@ -7,7 +7,7 @@ from warnings import warn
|
|||||||
class BlockStructure(object):
|
class BlockStructure(object):
|
||||||
""" Contains information about the Green function structure.
|
""" Contains information about the Green function structure.
|
||||||
|
|
||||||
This class contains information about the structure of the solver
|
This class contains information about the structure of the solver
|
||||||
and sumk Green functions and the mapping between them.
|
and sumk Green functions and the mapping between them.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@ -33,19 +33,21 @@ class BlockStructure(object):
|
|||||||
solver_to_sumk_block : list of dict
|
solver_to_sumk_block : list of dict
|
||||||
solver_to_sumk_block[ish][from_block] = to_block
|
solver_to_sumk_block[ish][from_block] = to_block
|
||||||
|
|
||||||
maps from the solver block to the sumk block
|
maps from the solver block to the sumk block
|
||||||
for *inequivalent* correlated shell ish
|
for *inequivalent* correlated shell ish
|
||||||
"""
|
"""
|
||||||
def __init__(self,gf_struct_sumk=None,
|
def __init__(self,gf_struct_sumk=None,
|
||||||
gf_struct_solver=None,
|
gf_struct_solver=None,
|
||||||
solver_to_sumk=None,
|
solver_to_sumk=None,
|
||||||
sumk_to_solver=None,
|
sumk_to_solver=None,
|
||||||
solver_to_sumk_block=None):
|
solver_to_sumk_block=None,
|
||||||
|
deg_shells=None):
|
||||||
self.gf_struct_sumk = gf_struct_sumk
|
self.gf_struct_sumk = gf_struct_sumk
|
||||||
self.gf_struct_solver = gf_struct_solver
|
self.gf_struct_solver = gf_struct_solver
|
||||||
self.solver_to_sumk = solver_to_sumk
|
self.solver_to_sumk = solver_to_sumk
|
||||||
self.sumk_to_solver = sumk_to_solver
|
self.sumk_to_solver = sumk_to_solver
|
||||||
self.solver_to_sumk_block = solver_to_sumk_block
|
self.solver_to_sumk_block = solver_to_sumk_block
|
||||||
|
self.deg_shells = deg_shells
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def full_structure(cls,gf_struct,corr_to_inequiv):
|
def full_structure(cls,gf_struct,corr_to_inequiv):
|
||||||
@ -99,20 +101,21 @@ class BlockStructure(object):
|
|||||||
gf_struct_sumk = gs_sumk_all,
|
gf_struct_sumk = gs_sumk_all,
|
||||||
solver_to_sumk = copy.deepcopy(solver_to_sumk),
|
solver_to_sumk = copy.deepcopy(solver_to_sumk),
|
||||||
sumk_to_solver = solver_to_sumk,
|
sumk_to_solver = solver_to_sumk,
|
||||||
solver_to_sumk_block = s2sblock)
|
solver_to_sumk_block = s2sblock,
|
||||||
|
deg_shells = [[] for ish in range(len(gf_struct))])
|
||||||
|
|
||||||
def pick_gf_struct_solver(self,new_gf_struct):
|
def pick_gf_struct_solver(self,new_gf_struct):
|
||||||
""" Pick selected orbitals within blocks.
|
""" Pick selected orbitals within blocks.
|
||||||
|
|
||||||
This throws away parts of the Green's function that (for some
|
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
|
reason - be sure that you know what you're doing) shouldn't be
|
||||||
included in the calculation.
|
included in the calculation.
|
||||||
|
|
||||||
To drop an entire block, just don't include it.
|
To drop an entire block, just don't include it.
|
||||||
To drop a certain index within a block, just don't include it.
|
To drop a certain index within a block, just don't include it.
|
||||||
|
|
||||||
If it was before:
|
If it was before:
|
||||||
|
|
||||||
[{'up':[0,1],'down':[0,1],'left':[0,1]}]
|
[{'up':[0,1],'down':[0,1],'left':[0,1]}]
|
||||||
|
|
||||||
to choose the 0th index of the up block and the 1st index of
|
to choose the 0th index of the up block and the 1st index of
|
||||||
@ -130,11 +133,11 @@ class BlockStructure(object):
|
|||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
new_gf_struct : list of dict
|
new_gf_struct : list of dict
|
||||||
formatted the same as gf_struct_solver:
|
formatted the same as gf_struct_solver:
|
||||||
|
|
||||||
new_gf_struct[ish][block]=list of indices in that block.
|
new_gf_struct[ish][block]=list of indices in that block.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for ish in range(len(self.gf_struct_solver)):
|
for ish in range(len(self.gf_struct_solver)):
|
||||||
gf_struct = new_gf_struct[ish]
|
gf_struct = new_gf_struct[ish]
|
||||||
|
|
||||||
@ -154,24 +157,24 @@ class BlockStructure(object):
|
|||||||
new_ind = gf_struct[blk].index(ind)
|
new_ind = gf_struct[blk].index(ind)
|
||||||
self.sumk_to_solver[ish][k]=(blk,new_ind)
|
self.sumk_to_solver[ish][k]=(blk,new_ind)
|
||||||
else:
|
else:
|
||||||
self.sumk_to_solver[ish][k]=(None,None)
|
self.sumk_to_solver[ish][k]=(None,None)
|
||||||
# reindexing gf_struct so that it starts with 0
|
# reindexing gf_struct so that it starts with 0
|
||||||
for k in gf_struct:
|
for k in gf_struct:
|
||||||
gf_struct[k]=range(len(gf_struct[k]))
|
gf_struct[k]=range(len(gf_struct[k]))
|
||||||
self.gf_struct_solver[ish]=gf_struct
|
self.gf_struct_solver[ish]=gf_struct
|
||||||
|
|
||||||
def pick_gf_struct_sumk(self,new_gf_struct):
|
def pick_gf_struct_sumk(self,new_gf_struct):
|
||||||
""" Pick selected orbitals within blocks.
|
""" Pick selected orbitals within blocks.
|
||||||
|
|
||||||
This throws away parts of the Green's function that (for some
|
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
|
reason - be sure that you know what you're doing) shouldn't be
|
||||||
included in the calculation.
|
included in the calculation.
|
||||||
|
|
||||||
To drop an entire block, just don't include it.
|
To drop an entire block, just don't include it.
|
||||||
To drop a certain index within a block, just don't include it.
|
To drop a certain index within a block, just don't include it.
|
||||||
|
|
||||||
If it was before:
|
If it was before:
|
||||||
|
|
||||||
[{'up':[0,1],'down':[0,1],'left':[0,1]}]
|
[{'up':[0,1],'down':[0,1],'left':[0,1]}]
|
||||||
|
|
||||||
to choose the 0th index of the up block and the 1st index of
|
to choose the 0th index of the up block and the 1st index of
|
||||||
@ -188,11 +191,11 @@ class BlockStructure(object):
|
|||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
new_gf_struct : list of dict
|
new_gf_struct : list of dict
|
||||||
formatted the same as gf_struct_solver:
|
formatted the same as gf_struct_solver:
|
||||||
|
|
||||||
new_gf_struct[ish][block]=list of indices in that block.
|
new_gf_struct[ish][block]=list of indices in that block.
|
||||||
|
|
||||||
However, the indices are not according to the solver Gf
|
However, the indices are not according to the solver Gf
|
||||||
but the sumk Gf.
|
but the sumk Gf.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -218,7 +221,7 @@ class BlockStructure(object):
|
|||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
mapping : list of dict
|
mapping : list of dict
|
||||||
the dict consists of elements
|
the dict consists of elements
|
||||||
(from_block,from_index) : (to_block,to_index)
|
(from_block,from_index) : (to_block,to_index)
|
||||||
that maps from one structure to the other
|
that maps from one structure to the other
|
||||||
"""
|
"""
|
||||||
@ -254,7 +257,7 @@ class BlockStructure(object):
|
|||||||
def create_gf(self,ish=0,gf_function=GfImFreq,**kwargs):
|
def create_gf(self,ish=0,gf_function=GfImFreq,**kwargs):
|
||||||
""" Create a zero BlockGf having the gf_struct_solver structure.
|
""" Create a zero BlockGf having the gf_struct_solver structure.
|
||||||
|
|
||||||
When using GfImFreq as gf_function, typically you have to
|
When using GfImFreq as gf_function, typically you have to
|
||||||
supply beta as keyword argument.
|
supply beta as keyword argument.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@ -284,7 +287,7 @@ class BlockStructure(object):
|
|||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
Elements that are zero in the new structure due to
|
Elements that are zero in the new structure due to
|
||||||
the new block structure will be just ignored, thus
|
the new block structure will be just ignored, thus
|
||||||
approximated to zero.
|
approximated to zero.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@ -292,11 +295,11 @@ class BlockStructure(object):
|
|||||||
G : BlockGf
|
G : BlockGf
|
||||||
the Gf that should be converted
|
the Gf that should be converted
|
||||||
G_struct : GfStructure
|
G_struct : GfStructure
|
||||||
the structure ofthat G
|
the structure of that G
|
||||||
ish : int
|
ish : int
|
||||||
shell index
|
shell index
|
||||||
show_warnings : bool
|
show_warnings : bool
|
||||||
whether to show warnings when elements of the Green's
|
whether to show warnings when elements of the Green's
|
||||||
function get thrown away
|
function get thrown away
|
||||||
**kwargs :
|
**kwargs :
|
||||||
options passed to the constructor for the new Gf
|
options passed to the constructor for the new Gf
|
||||||
@ -325,8 +328,8 @@ class BlockStructure(object):
|
|||||||
return G_new
|
return G_new
|
||||||
|
|
||||||
def approximate_as_diagonal(self):
|
def approximate_as_diagonal(self):
|
||||||
""" Create a structure for a GF with zero off-diagonal elements.
|
""" Create a structure for a GF with zero off-diagonal elements.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
In general, this will throw away non-zero elements of the
|
In general, this will throw away non-zero elements of the
|
||||||
@ -361,7 +364,7 @@ class BlockStructure(object):
|
|||||||
if not compare(x,y):
|
if not compare(x,y):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
elif isinstance(one,int):
|
elif isinstance(one,int):
|
||||||
return one==two
|
return one==two
|
||||||
elif isinstance(one,str):
|
elif isinstance(one,str):
|
||||||
return one==two
|
return one==two
|
||||||
@ -375,7 +378,7 @@ class BlockStructure(object):
|
|||||||
warn('Cannot compare {}'.format(type(one)))
|
warn('Cannot compare {}'.format(type(one)))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
for prop in [ "gf_struct_sumk", "gf_struct_solver",
|
for prop in [ "gf_struct_sumk", "gf_struct_solver",
|
||||||
"solver_to_sumk", "sumk_to_solver", "solver_to_sumk_block"]:
|
"solver_to_sumk", "sumk_to_solver", "solver_to_sumk_block"]:
|
||||||
if not compare(getattr(self,prop),getattr(other,prop)):
|
if not compare(getattr(self,prop),getattr(other,prop)):
|
||||||
return False
|
return False
|
||||||
@ -388,8 +391,8 @@ class BlockStructure(object):
|
|||||||
""" Reduce to dict for HDF5 export."""
|
""" Reduce to dict for HDF5 export."""
|
||||||
|
|
||||||
ret = {}
|
ret = {}
|
||||||
for element in [ "gf_struct_sumk", "gf_struct_solver",
|
for element in [ "gf_struct_sumk", "gf_struct_solver",
|
||||||
"solver_to_sumk_block"]:
|
"solver_to_sumk_block","deg_shells"]:
|
||||||
ret[element] = getattr(self,element)
|
ret[element] = getattr(self,element)
|
||||||
|
|
||||||
def construct_mapping(mapping):
|
def construct_mapping(mapping):
|
||||||
@ -436,6 +439,8 @@ class BlockStructure(object):
|
|||||||
keys = sorted(element[ish].keys(),key=keyfun)
|
keys = sorted(element[ish].keys(),key=keyfun)
|
||||||
for k in keys:
|
for k in keys:
|
||||||
s+=' '+str(k)+str(element[ish][k])+'\n'
|
s+=' '+str(k)+str(element[ish][k])+'\n'
|
||||||
|
|
||||||
|
s+= "deg_shells "+str( self.deg_shells)+'\n'
|
||||||
return s
|
return s
|
||||||
|
|
||||||
from pytriqs.archive.hdf_archive_schemes import register_class
|
from pytriqs.archive.hdf_archive_schemes import register_class
|
||||||
|
@ -1610,3 +1610,9 @@ class SumkDFT(object):
|
|||||||
def __set_solver_to_sumk_block(self,value):
|
def __set_solver_to_sumk_block(self,value):
|
||||||
self.block_structure.solver_to_sumk_block = value
|
self.block_structure.solver_to_sumk_block = value
|
||||||
solver_to_sumk_block = property(__get_solver_to_sumk_block,__set_solver_to_sumk_block)
|
solver_to_sumk_block = property(__get_solver_to_sumk_block,__set_solver_to_sumk_block)
|
||||||
|
|
||||||
|
def __get_deg_shells(self):
|
||||||
|
return self.block_structure.deg_shells
|
||||||
|
def __set_deg_shells(self,value):
|
||||||
|
self.block_structure.deg_shells = value
|
||||||
|
deg_shells = property(__get_deg_shells,__set_deg_shells)
|
||||||
|
Loading…
Reference in New Issue
Block a user