Пример #1
0
def plotOneConfig(mis, saveCSV=True):
    results = generalUtils.getAllFolders(pref="results_", root="data/missions/" + mis.NAME)
    print(str(results))
    
    #ini = Ini(mis.NAME, resPath=results[-1]+"/")
    ini = Ini(mis.NAME, resPath="results_r0380.0_v45.0/")
    configComb = ini.getConfig(c.COMB)
    configSeri = ini.getConfig(c.SERI)
    configPara = ini.getConfig(c.PARA)
    
    #configSeri = {'mpl': 110, 'pmax': 88649.19999999995, 'pice': 51640.0, 'cbat': 15396.5684111, 'fuel': 39.832351270753406}
    
    Rvec = []
    #Svec = []
    Vvec = []
    meshComb = []
    meshSeri = []
    meshPara = []
    diffMeshSeriCost = []
    diffMeshParaCost = []

    diffMeshSeriFuel = []
    diffMeshParaFuel = []

    diffMeshSeriElec = []
    diffMeshParaElec = []
    csvData = []
    for res in results:
        print(res)
        #if(res == "results_r0020.0_v75.0"):
        #    print("stop")
        m = Mission(mis.NAME + "/" + res)
        r = float(res.split("_")[1][1:])
        Rvec, Ri = insertValueInList(Rvec, r)
        v = float(res.split("_")[2][1:])
        Vvec, Vi = insertValueInList(Vvec, v)
        
        opt = Optimizer(m, verbose=True, savePlots=False)
        fComb = opt.flyWithNeededFuel(m, c.COMB, configComb)
        fSeri = opt.flyWithNeededFuel(m, c.SERI, configSeri)
        fPara = opt.flyWithNeededFuel(m, c.PARA, configPara)
        
        
        dist = m.calcDistance() / 1000.
        fuel100Comb = 100. * fComb.calcUsedFuel() / dist
        fuel100Seri = 100. * fSeri.calcUsedFuel() / dist
        fuel100Para = 100. * fPara.calcUsedFuel() / dist

        elec100Seri = 0.1 * fSeri.calcUsedElec() / dist
        elec100Para = 0.1 * fPara.calcUsedElec() / dist

        valComb = fuel100Comb  * c.PRICE_FUEL
        valSeri = (fuel100Seri  * c.PRICE_FUEL) + (elec100Seri * c.PRICE_ELEC)
        valPara = (fuel100Para  * c.PRICE_FUEL) + (elec100Para * c.PRICE_ELEC)
        

        meshComb = insertValueInMesh(meshComb, Ri, Vi, valComb)
        meshSeri = insertValueInMesh(meshSeri, Ri, Vi, valSeri)
        meshPara = insertValueInMesh(meshPara, Ri, Vi, valPara)
        
        if(len(fSeri.fails) > 0):
            diffMeshSeriCost = insertValueInMesh(diffMeshSeriCost, Ri, Vi, float("nan"))
            diffMeshSeriFuel = insertValueInMesh(diffMeshSeriFuel, Ri, Vi, float("nan"))
            diffMeshSeriElec = insertValueInMesh(diffMeshSeriElec, Ri, Vi, float("nan"))
        else:
            diffMeshSeriCost = insertValueInMesh(diffMeshSeriCost, Ri, Vi, (valSeri / valComb) * 100.)
            diffMeshSeriFuel = insertValueInMesh(diffMeshSeriFuel, Ri, Vi, fuel100Seri)
            diffMeshSeriElec = insertValueInMesh(diffMeshSeriElec, Ri, Vi, elec100Seri)
            
        if(len(fPara.fails) > 0):
            diffMeshParaCost = insertValueInMesh(diffMeshParaCost, Ri, Vi, float("nan"))
            diffMeshParaFuel = insertValueInMesh(diffMeshParaFuel, Ri, Vi, float("nan"))
            diffMeshParaElec = insertValueInMesh(diffMeshParaElec, Ri, Vi, float("nan"))
        else:
            diffMeshParaCost = insertValueInMesh(diffMeshParaCost, Ri, Vi, (valPara / valComb) * 100.)
            diffMeshParaFuel = insertValueInMesh(diffMeshParaFuel, Ri, Vi, fuel100Para)
            diffMeshParaElec = insertValueInMesh(diffMeshParaElec, Ri, Vi, elec100Para)
        

        if(saveCSV):
            plConv = Plane(None, propulsionType=c.COMB, config=ini.getConfig(c.COMB))
            plSeri = Plane(None, propulsionType=c.SERI, config=ini.getConfig(c.SERI))
            plPara = Plane(None, propulsionType=c.PARA, config=ini.getConfig(c.PARA))
            
            
            plConv = Plane(None, propulsionType=c.COMB, config=ini.getConfig(c.COMB))
            plSeri = Plane(None, propulsionType=c.SERI, config=ini.getConfig(c.SERI))
            plPara = Plane(None, propulsionType=c.PARA, config=ini.getConfig(c.PARA))
            csvRow = {"TravelDistance(km)":r,
                      "TravelSpeed(m/s)":v,
                      "TotalDistance(km)":dist,
                      "FlightTime":ini.get("output", "flighttime"),
                      
                      "CONV:TakeOffMass(kg)":plConv.calcActWeight(),
                      "CONV:NeededFuel(l)":float(ini.get(c.COMB, "fuel")),
                      "CONV:NeededElectricity(Wh)":0.,
                      
                      "SERI:TakeOffMass(kg)":plSeri.calcActWeight(),
                      "SERI:NeededFuel(l)":float(ini.get(c.SERI, "fuel")),
                      "SERI:NeededElectricity(Wh)":float(ini.get(c.SERI, "cbat")),
                      
                      "PARA:TakeOffMass(kg)":plPara.calcActWeight(),
                      "PARA:NeededFuel(l)":float(ini.get(c.PARA, "fuel")),
                      "PARA:NeededElectricity(Wh)":float(ini.get(c.PARA, "cbat"))}             
            csvData.append(csvRow)
            print(res + " - DONE!")
            
        
    #write CSV
    if(saveCSV):
        csvHead = ["TravelDistance(km)",
                   "TravelSpeed(m/s)",
                   "TotalDistance(km)",
                   "FlightTime",
                   "CONV:TakeOffMass(kg)",
                   "CONV:NeededFuel(l)",
                   "CONV:NeededElectricity(Wh)",
                   "SERI:TakeOffMass(kg)",
                   "SERI:NeededFuel(l)",
                   "SERI:NeededElectricity(Wh)",
                   "PARA:TakeOffMass(kg)",
                   "PARA:NeededFuel(l)",
                   "PARA:NeededElectricity(Wh)"]
        generalUtils.write2CSV(mis.PATH + "meshOneConfig.csv", csvData, heads=csvHead)

    #fig, ax = plt.subplots(figsize=(16,10))
      
    #cmap = generalUtils.custom_div_cmap(numcolors=30, mincol='#008000', maxcol='#DD0000', midcol='#FFFF00')
    #norm=LogNorm(vmin=meshComb.min(), vmax=meshComb.max()), 
    
    Rvec = np.array(Rvec)
    Vvec = np.array(Vvec)
#     if(False):
#         meshComb = np.array(meshComb)
#         meshPara = np.array(meshPara)
#         meshSeri = np.array(meshSeri)
#         fig = plt.figure(figsize=(16,10))        
#         ax = fig.add_subplot(1, 1, 1, projection='3d')
#         fig.canvas.set_window_title('mesh')  
#         X, Y = np.meshgrid(Rvec, Vvec)
#         ax.plot_wireframe(X, Y, meshComb, rstride=1, cstride=1)
#         
#         ax.plot_wireframe(X, Y, meshPara, rstride=1, cstride=1, color="r")
#         ax.plot_wireframe(X, Y, meshSeri, rstride=1, cstride=1, color="g")
# 
#         ax.set_ylabel("Fluggeschwindigkeit in m/s")
#         ax.set_xlabel("Reichweite in km")
#         ax.set_zlabel("Brennstoffverbrauch auf 100 km")
#         #plt.ylim([0, max(np.amax(meshComb), max(np.amax(meshSeri), np.amax(meshPara)))])
#         plt.legend(["konventionell", "parallel", "seriell"])
#         plt.show()

    preparePlots(Rvec, Vvec, diffMeshSeriCost, diffMeshParaCost, diffMeshSeriFuel, diffMeshParaFuel, diffMeshSeriElec, diffMeshParaElec, hybDegSeriMesh, hybDegParaMesh, mis.PATH + mis.NAME)