# and so that the positive direction is in the # increasing direction of the array index #if eqp[ik,ib] <= efermi: if eqp[ik,ib] <= 0: en3 = en[en<=eqp[ik,ib]] # So as to avoid negative omegampole else: en3 = en[en>eqp[ik,ib]] # So as to avoid negative omegampole #en3 = en[en<=efermi] im3 = abs(interpims(en3)/np.pi) # This is what should be fitted en3 = en3 - eqp[ik,ib] #en3 = en3 - efermi #if eqp[ik,ib] <= efermi: if eqp[ik,ib] <= 0: en3 = -en3[::-1] im3 = im3[::-1] omegai, gi, deltai = fit_multipole(en3,im3,npoles,0) #if np.isnan(omegai): sys.exit(1) #omegampole[ik,ib] = omegai + eqp[ik,ib] - efermi omegampole[ik,ib] = omegai ampole[ik,ib] = gi/(omegampole[ik,ib])**2 print " Integral test. Compare \int\Sigma and \sum_j^N\lambda_j." print " 1/pi*\int\Sigma =", np.trapz(im3,en3) print " \sum_j^N\lambda_j =", np.sum(gi) #plt.plot(en3,im3,"-"); plt.plot(omegai,np.pi/2*gi*omegai/deltai,"-o") #plt.show(); sys.exit(1) #e1,f1 = write_f_as_sum_of_poles(en3,omegai,gi,deltai,0) # Writing out a_j e omega_j print " ### Writing out a_j and omega_j..." outname = "a_j_np"+str(npoles)+".dat" outfile = open(outname,'w') outname = "omega_j_np"+str(npoles)+".dat"
omegampole = np.zeros((nkpt, nband, npoles)) ampole = np.zeros((nkpt, nband, npoles)) for ik in xrange(nkpt): for ib in xrange(nband): print " ik, ib", ik, ib interpims = interp1d(en, ims[ik, ib, :], kind='linear', axis=2) # Here we take the curve starting from eqp and then we invert it # so as to have it defined on the positive x axis # and so that the positive direction is in the # increasing direction of the array index en3 = en[en <= eqp[ik, ib]] im3 = interpims(en3) / np.pi # This is what should be fitted en3 = en3 - eqp[ik, ib] en3 = -en3[::-1] im3 = im3[::-1] omegai, gi, deltai = fit_multipole(en3, im3, npoles, 0) omegampole[ik, ib] = omegai ampole[ik, ib] = gi / ( omegai**2) # The weights should not be affected by the shift print " Integral test. Compare \int\Sigma and \sum_j^N\lambda_j." print " 1/pi*\int\Sigma =", np.trapz(im3, en3) print " \sum_j^N\lambda_j =", np.sum(gi) #e1,f1 = write_f_as_sum_of_poles(en3,omegai,gi,deltai,0) dxexp = 0.05 enexp = np.arange(enmin, enmax, dxexp) nenexp = np.size(enexp) ftot = np.zeros((nenexp)) f = np.zeros((nkpt, nband, nenexp)) print " Calculating multipole exponential A..." ftot = np.zeros((np.size(enexp))) # Time section