示例#1
0
文件: makeplots.py 项目: niyaa/paper
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
示例#2
0
文件: makeplots.py 项目: niyaa/paper
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
示例#3
0
文件: makeplots.py 项目: niyaa/paper
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