Esempio n. 1
0
         # 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"
Esempio n. 2
0
 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