def __init__(self, **d): """ The constructor have two variants : you can either provide the mesh in Matsubara frequencies yourself, or give the parameters to build it. All parameters must be given with keyword arguments. GfReFreq(indices, window, n_points, data, tail, name) * ``indices``: a list of indices names of the block * ``window``: a tuple (omega_min, omega_max) * ``n_points`` : Number of frequency points in the mesh * ``data``: A numpy array of dimensions (len(indices),len(indices),n_points) representing the value of the Green function on the mesh. * ``tail``: the tail * ``name``: a name of the GF GfReFreq (indices, mesh, data, tail, name) * ``indices``: a list of indices names of the block * ``mesh``: a MeshGf object, such that mesh.TypeGF== GF_Type.Imaginary_Time * ``data``: A numpy array of dimensions (len(indices),len(indices),n_points) representing the value of the Green function on the mesh. * ``tail``: the tail * ``name``: a name of the GF .. warning:: The Green function take a **view** of the array data, and a **reference** to the tail. """ mesh = d.pop('mesh',None) if mesh is None : window = d.pop('window') omega_min = window[0] omega_max = window[1] n_max = d.pop('n_points',10000) kind = d.pop('kind','F') mesh = MeshReFreq(omega_min, omega_max, n_max, kind) self.dtype = numpy.complex_ indices_pack = get_indices_in_dict(d) indicesL, indicesR = indices_pack N1, N2 = len(indicesL),len(indicesR) data = d.pop('data') if 'data' in d else numpy.zeros((len(mesh),N1,N2), self.dtype ) tail= d.pop('tail') if 'tail' in d else TailGf(shape = (N1,N2)) symmetry = d.pop('symmetry',None) name = d.pop('name','g') assert len(d) ==0, "Unknown parameters in GFBloc constructions %s"%d.keys() GfGeneric.__init__(self, mesh, data, tail, symmetry, indices_pack, name, GfReFreq) GfReFreq_cython.__init__(self, mesh, data, tail)
def __init__(self,**d): """ The constructor has two variants : you can either provide the mesh in real frequencies yourself, or give the parameters to build it. All parameters must be given with keyword arguments. GfReFreq(indices, beta, statistic, mesh_array, data, tail, name, note) * ``indices``: a list of indices names of the block * ``beta``: Inverse Temperature * ``statistic``: GF_statistic.Fermion [default] or GF_statistic.Boson * ``mesh_array``: Grid of frequencies, as a numpy array. * ``data``: A numpy array of dimensions (len(indices),len(indices),len(mesh_array)) representing the value of the Green function on the mesh. * ``tail``: the tail * ``name``: a name of the GF * ``note``: any string you like... If you already have the mesh, you can use a simpler version : GfReFreq(indices, mesh, data, tail, name, note) * ``indices``: a list of indices names of the block * ``mesh``: a MeshGf object, such that mesh.TypeGF== GF_Type.Real_Frequency * ``data``: A numpy array of dimensions (len(indices),len(indices),len(mesh_array)) representing the value of the Green function on the mesh. * ``tail``: the tail * ``name``: a name of the GF * ``note``: any string you like... .. warning:: The Green function take a **view** of the array data, and a **reference** to the tail. """ # construct the mesh if needed if 'mesh' not in d : if 'beta' not in d : raise ValueError, "beta not provided" beta = float(d.pop('beta')) n_max = d.pop('n_max',1025) stat = d.pop('statistic','F') # GF_statistic.Fermion sh = 1 if stat== 'F' else 0 # GF_statistic.Fermion else 0 d['mesh'] = MeshRealFrequency(beta,n_max) #if 'mesh_array' not in d : raise ValueError, "mesh_array not provided" #d['mesh'] = MeshGf( GF_Type.Real_Frequency,stat,beta,d['mesh_array']) GfReFreq_cython.__init__(self,*self._prepare_init(d))