def calculateSigmaThroughInterpolation(caseList, Re): ''' Creates, through interpolation new result for a given Re accepts caseList for a given alfa ''' S = [0.01, 0.025, 0.04, 0.055, 0.07, 0.085, 0.1, 0.115, 0.13, 0.145, 0.16, 0.175, 0.19, 0.205, 0.22, 0.235, 0.25] caseList.sort(key=lambda l: l.alfa) out=[] for key, group in groupby(caseList, lambda x: x.alfa): alist = list(group) case=Case() case.alfa = alist[0].alfa case.Re = Re stab=[] sigma=[] for s in S: # try: sig=calculateSigmaForS(alist, s, Re) sigma.append(sig) stab.append(s) # except: # print "Failed for:" # print "Alfa=" + str(case.alfa) + " S=" + str(s) # continue case.S=stab case.sigma=sigma out.append(case) return out
def calcMaxSigma(caseList): ''' For a given caseList (single alfa) returns a colection of Re, S, Sig ''' caseList.sort(key=lambda l: l.Re) S = [0.01, 0.025, 0.04, 0.055, 0.07, 0.085, 0.1, 0.115, 0.13, 0.145, 0.16, 0.175, 0.19, 0.205, 0.22, 0.235, 0.25] # S = [0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2] out=[] for key, group in groupby(caseList, lambda x: x.Re): alist = list(group) s, sig = getSig_S(alist) # print s, sig i=0 if s[0] > S[0]: for ss in S: if ss in s: break s.insert(i, ss) sig.insert(i, calculateSigmaForS(caseList, ss, alist[0].Re)) i=i+1 if s[-1] < S[-1]: for ss in S: if ss not in s: continue if ss <= s[-1]: continue else: # print ss, alist[0].Re s.insert(len(s), ss) sig.insert(len(sig), calculateSigmaForS(caseList, ss, alist[0].Re)) # print s, sig if float(alist[0].alfa) == 3: #extra manual ... if float(alist[0].Re) == 1900: ssig = calculateSigmaForS(caseList, 0.025, 1900) s.insert(1, 0.025) sig.insert(1, ssig) # print ssig #extra manual ... if float(alist[0].Re) == 1500: ssig = calculateSigmaForS(caseList, 0.025, 1500) s.insert(1, 0.025) sig.insert(1, ssig) # print ssig # print alist[0].Re, s, sig case=Case() case.alfa = alist[0].alfa case.Re = alist[0].Re case.S = s case.sigma = sig out.append(case) return out
def calcSLowUpMax(caseList): caseList.sort(key=lambda l: l.Re) S = [0.01, 0.025, 0.04, 0.055, 0.07, 0.085, 0.1, 0.115, 0.13, 0.145, 0.16, 0.175, 0.19, 0.205, 0.22, 0.235, 0.25] Re= np.linspace(300, 2500, num=12, endpoint=True) out=[] book = xlwt.Workbook() sh = book.add_sheet("a" + str(caseList[0].alfa) + "_Sig_S") col=0 newCol=False for key, group in groupby(caseList, lambda x: x.Re): row=0 if newCol: col+=3 newCol=False alist = list(group) s, sig = getSig_S(alist) i=0 if s[0] > S[0]: for ss in S: if ss in s: break s.insert(i, ss) sig.insert(i, calculateSigmaForS(caseList, ss, alist[0].Re)) i=i+1 if s[-1] < S[-1]: for ss in S: if ss not in s: continue if ss <= s[-1]: continue else: # print ss, alist[0].Re s.insert(len(s), ss) sig.insert(len(sig), calculateSigmaForS(caseList, ss, alist[0].Re)) # print s, sig if float(alist[0].alfa) == 3: #extra manual ... if float(alist[0].Re) == 1900: ssig = calculateSigmaForS(caseList, 0.025, 1900) s.insert(1, 0.025) sig.insert(1, ssig) # print ssig #extra manual ... if float(alist[0].Re) == 1500: ssig = calculateSigmaForS(caseList, 0.025, 1500) s.insert(1, 0.025) sig.insert(1, ssig) # print ssig if max(sig) > 0: sh.write(row, col, "Re ") sh.write(row, col+1, alist[0].Re) row+=1 for i in range(0,len(s)): sh.write(row, col, s[i]) sh.write(row, col+1, sig[i]) row+=1 newCol=True marker = next(linecycler) snew = np.linspace(s[0], s[-1], num=100, endpoint=True) f1=interpolate.interp1d(s, sig, kind='cubic') f2=interpolate.interp1d(s, -np.array(sig), kind='cubic') line, = plt.plot(snew, f1(snew)) line, = plt.plot(s, sig, marker=marker, color=line.get_color(), linestyle='None') line.set_label("Re "+str(alist[0].Re)) #This Part looks for S_low, S_high, and S_max #look for the S crit if max(sig) > 0: case = Case() case.alfa=alist[0].alfa case.Re=alist[0].Re smax=0 s_l=0 s_u=0 try: ss = 0.5*(s[0]+s[-1]) smax=optimize.fmin(f2, ss, maxiter=100000, maxfun=100000, disp=False)[0] sigmax=f1(smax) plt.scatter(smax,sigmax) except Exception as error: smax=0 if sig[-1] < 0: # there are two roots s_m = 0.1 s_l = optimize.brentq(f1, s[0], s_m) s_u = optimize.brentq(f1, s_m, s[-1]) plt.scatter(s_l,f1(s_l)) plt.scatter(s_u,f1(s_u)) print alist[0].Re, s_l, s_u, smax else: #there is one root # print alist[0].Re, max(sig) s_l = optimize.brentq(f1, s[0], s[-1]) plt.scatter(s_l,f1(s_l)) print alist[0].Re, s_l, smax case.smax=smax case.s_l=s_l case.s_u=s_u out.append(case) fontP = FontProperties() fontP.set_size('small') plt.legend(fancybox=True, shadow=True, loc='center left', bbox_to_anchor=(1, 0.5), prop = fontP) plt.grid() plt.show() book.save("out.dat") return out