def add_temp(data,ltemp=[]): set_completer(2) try: for string in data: if "range" in string: Ti,Tf,dT = string.split("range(")[1].split(")")[0].split(",") Ti,Tf,dT = float(Ti),float(Tf),float(dT) nsteps = int(round(1.0*(Tf-Ti)/dT))+1 ltemp += [Ti+idx*dT for idx in range(nsteps)] else: ltemp.append(float(string)) ltemp = uniquify_flist(ltemp,eps=1e-3) except: print IBLANK1+"invalid line..." return sorted(ltemp)
def returnpoints(self, E): salpha, Valpha = self.get_first() somega, Vomega = self.get_last() # add first point rtn_points = [salpha] # find points si, Vi = self.get_first() sj = min(si + DS_RPT, somega) Vj = self(sj) while True: # break? if abs(sj - somega) < EPS_MEPS: break # Energy really close to Vj? if abs(Vj - E) < EPS_MEPE: rtn_points.append(sj) # Energy between? Then get return point elif (Vi < E < Vj) or (Vi > E > Vj): guess = (si + sj) / 2.0 rpoint = newton(self.relative, guess, args=(E, )) if si < rpoint < sj: rtn_points.append(rpoint) # update si, Vi = sj, Vj sj = min(si + DS_RPT, somega) Vj = self(sj) # add last point rtn_points += [somega] # remove repetitions rtn_points = uniquify_flist(rtn_points, EPS_MEPS) # convert to intervals intervals = [] for idx in range(len(rtn_points) - 1): si = rtn_points[idx] sj = rtn_points[idx + 1] smid = (si + sj) / 2.0 Vmid = self(smid) if Vmid >= E: intervals.append((si, sj)) return intervals