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)