InvertEnergy(G) takes response function $G(\omega)$ as an argument and returns $-G(-\omega)^*$. As we only store the poles and their residues we can do this by negating the energy of the poles without the need to change the size of the residue
This example initializes a response function in the “list of poles” representation and inverts its energy.
NEDOS = 10 HalfBW = 1 dE =HalfBW/NEDOS a = {0} b = {} for i=1,NEDOS do a[#a+1] = (i-0.5) * dE -- energy axis from 0 to 1 b[#b+1] = 0.5 / NEDOS -- flat density of states end G0 = ResponseFunction.New( {a,b,mu=0,type="ListOfPoles", name="G0"} ) G0_inv = ResponseFunction.InvertEnergy(G0) print(G0) print(G0_inv)
{ { 0 , 0.05 , 0.15 , 0.25 , 0.35 , 0.45 , 0.55 , 0.65 , 0.75 , 0.85 , 0.95 } , { 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 } , mu = 0 , name = G0 , type = ListOfPoles } { { 0 , -0.05 , -0.15 , -0.25 , -0.35 , -0.45 , -0.55 , -0.65 , -0.75 , -0.85 , -0.95 } , { 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 , 0.05 } , mu = 0 , name = G0 , type = ListOfPoles }