public void CalcWS_DeficitEddyViscosityGrid_Test() { WakeCollection wakeModelList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); double[] power = new double[23]; string Power_file = testingFolder + "\\CalcWS_DeficitEddyViscosityGrid\\Power.txt"; StreamReader sr = new StreamReader(Power_file); for (int i = 0; i <= 22; i++) { power[i] = Convert.ToSingle(sr.ReadLine()); } double[] Thrust = new double[23]; string Thrust_file = testingFolder + "\\CalcWS_DeficitEddyViscosityGrid\\Thrust.txt"; sr = new StreamReader(Thrust_file); for (int i = 0; i <= 22; i++) { Thrust[i] = Convert.ToSingle(sr.ReadLine()); } turbineList.AddPowerCurve("GW 1500/87", 3, 22, 1500, power, Thrust, 87, 16, 10, 1, 0); wakeModelList.AddWakeModel(0, 5, 10, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); MetCollection metList = new MetCollection(); metList.metItem = new Met[1]; metList.metItem[0] = new Met(); double[,] Vel_Def = wakeModelList.CalcWS_DeficitEddyViscosityGrid(2, 30, 0.1f, 0.025f, 8, wakeModelList.wakeModels[0], metList); Assert.AreEqual(Vel_Def[16, 2], 0.450777, 0.01, "Wrong Vel Def Test 1 r = 0.05"); Assert.AreEqual(Vel_Def[16, 10], 0.196172, 0.01, "Wrong Vel Def Test 1 r = 0.25"); Assert.AreEqual(Vel_Def[16, 17], 0.03166, 0.01, "Wrong Vel Def Test 1 r = 0.425"); Assert.AreEqual(Vel_Def[40, 0], 0.255068, 0.01, "Wrong Vel Def Test 2 r = 0.05"); Assert.AreEqual(Vel_Def[40, 7], 0.194434, 0.01, "Wrong Vel Def Test 2 r = 0.25"); Assert.AreEqual(Vel_Def[40, 18], 0.02328, 0.01, "Wrong Vel Def Test 2 r = 0.425"); wakeModelList.AddWakeModel(0, 10, 14, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); Vel_Def = wakeModelList.CalcWS_DeficitEddyViscosityGrid(2, 30, 0.1f, 0.025f, 6, wakeModelList.wakeModels[1], metList); Assert.AreEqual(Vel_Def[4, 2], 0.513121, 0.01, "Wrong Vel Def Test 3 r = 0.05"); Assert.AreEqual(Vel_Def[4, 10], 0.20352, 0.01, "Wrong Vel Def Test 3 r = 0.25"); Assert.AreEqual(Vel_Def[4, 16], 0.04366, 0.01, "Wrong Vel Def Test 3 r = 0.4"); Assert.AreEqual(Vel_Def[42, 4], 0.18052, 0.01, "Wrong Vel Def Test 4 r = 0.05"); Assert.AreEqual(Vel_Def[42, 19], 0.01031, 0.01, "Wrong Vel Def Test 4 r = 0.25"); }
public void CalcCapacityFactor_Test() { TurbineCollection turbineList = new TurbineCollection(); double thisAEP = 4569; double ratedP = 1500; double thisCF = turbineList.CalcCapacityFactor(thisAEP, ratedP); Assert.AreEqual(0.3477, thisCF, 0.01, "Wrong capaciy factor Test 1"); thisAEP = 8922; ratedP = 2300; thisCF = turbineList.CalcCapacityFactor(thisAEP, ratedP); Assert.AreEqual(0.4428, thisCF, 0.01, "Wrong capaciy factor Test 2"); }
/// <summary> Goes through each met and turbine site and check elev at 8 points +/- 12000 m. If elev = -999, return false </summary> public bool NewTopo(TopoInfo topo, MetCollection metList, TurbineCollection turbList) { bool goodToGo = true; for (int i = 0; i < metList.ThisCount; i++) { goodToGo = TopoCheck(topo, metList.metItem[i].UTMX, metList.metItem[i].UTMY, metList.metItem[i].name, true); } for (int i = 0; i < turbList.TurbineCount; i++) { goodToGo = TopoCheck(topo, turbList.turbineEsts[i].UTMX, turbList.turbineEsts[i].UTMY, turbList.turbineEsts[i].name, true); } return(goodToGo); }
/// <summary> Compares met name to turbine names to ensure there are no duplicate names. </summary> /// <returns> Returns false if a met with the same name exists </returns> public bool CheckMetName(string metName, TurbineCollection turbineList) { bool inputMet = true; int numTurbines = turbineList.TurbineCount; for (int i = 0; i < numTurbines; i++) { if (turbineList.turbineEsts[i].name == metName) { inputMet = false; MessageBox.Show("There is a turbine with the same name as met site: " + metName + ". There cannot be a turbine and met site with the same name.", "Continuum 3"); break; } } return(inputMet); }
public void CalcDAWM_Deficit_Test() { WakeCollection WakeModList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); double[] power = new double[23]; string Power_file = testingFolder + "\\CalcDAWM_Deficit\\Power.txt"; StreamReader sr = new StreamReader(Power_file); for (int i = 0; i <= 22; i++) { power[i] = Convert.ToSingle(sr.ReadLine()); } double[] Thrust = new double[23]; string Thrust_file = testingFolder + "\\CalcDAWM_Deficit\\Thrust.txt"; sr = new StreamReader(Thrust_file); for (int i = 0; i <= 22; i++) { Thrust[i] = Convert.ToSingle(sr.ReadLine()); } turbineList.AddPowerCurve("GW 1500/87", 3, 22, 1500, power, Thrust, 87, 16, 10, 1, 0); Turbine[] UW_Turbs = new Turbine[1]; UW_Turbs[0] = new Turbine(); UW_Turbs[0].UTMX = 283000; UW_Turbs[0].UTMY = 4553300; MetCollection metList = new MetCollection(); metList.metItem = new Met[1]; metList.metItem[0] = new Met(); metList.WS_FirstInt = 0.5f; metList.WS_IntSize = 1; metList.numWS = 30; WakeModList.AddWakeModel(1, 5, 10, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); double This_Def = WakeModList.Calc_DAWM_Deficit(UW_Turbs, 280000, 4553500, 90, 8, WakeModList.wakeModels[0], metList, 80.0); Assert.AreEqual(This_Def, 0.04742, 1, "Wrong wind speed deficit in DAWM"); }
/// <summary> Goes through each met and turbine site and check land cover at 8 points +/- 12000 m. If elev = -999, return false </summary> public bool NewLandCover(TopoInfo topo, MetCollection metList, TurbineCollection turbList) { // Go through each met and turbine site and check land cover at 8 points +/- 12000 m. If elev = -999, return false bool goodToGo = true; for (int i = 0; i < metList.ThisCount; i++) { goodToGo = LandCoverCheck(topo, metList.metItem[i].UTMX, metList.metItem[i].UTMY, metList.metItem[i].name, true); } for (int i = 0; i < turbList.TurbineCount; i++) { goodToGo = LandCoverCheck(topo, turbList.turbineEsts[i].UTMX, turbList.turbineEsts[i].UTMY, turbList.turbineEsts[i].name, true); } return(goodToGo); }
public void FindAllUW_Turbines_Test() { WakeCollection WakeModList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); turbineList.AddTurbine("Turb_1", 275000, 4553000, 1); turbineList.AddTurbine("Turb_2", 275000, 4553300, 1); turbineList.AddTurbine("Turb_3", 275000, 4553600, 1); turbineList.AddTurbine("Turb_4", 275000, 4553900, 1); turbineList.AddTurbine("Turb_5", 275000, 4554200, 1); turbineList.AddTurbine("Turb_6", 283000, 4553000, 1); turbineList.AddTurbine("Turb_7", 283000, 4553300, 1); turbineList.AddTurbine("Turb_8", 283000, 4553600, 1); turbineList.AddTurbine("Turb_9", 283000, 4553900, 1); turbineList.AddTurbine("Turb_10", 283000, 4554200, 1); Turbine[] UW_Turbs = WakeModList.FindAllUW_Turbines(45, 279000, 4553200, turbineList); Assert.AreEqual(UW_Turbs.Length, 5, "Wrong number of UW turbines in Test 1 Sector 45"); Assert.AreSame(UW_Turbs[0].name, "Turb_10", "Wrong UW turbines in Test 1 Sector 45"); Assert.AreSame(UW_Turbs[1].name, "Turb_9", "Wrong UW turbines in Test 1 Sector 45"); Assert.AreSame(UW_Turbs[2].name, "Turb_8", "Wrong UW turbines in Test 1 Sector 45"); Assert.AreSame(UW_Turbs[3].name, "Turb_7", "Wrong UW turbines in Test 1 Sector 45"); Assert.AreSame(UW_Turbs[4].name, "Turb_6", "Wrong UW turbines in Test 1 Sector 45"); UW_Turbs = WakeModList.FindAllUW_Turbines(180, 279000, 4553200, turbineList); Assert.AreEqual(UW_Turbs.Length, 2, "Wrong number of UW turbines in Test 2 Sector 180"); Assert.AreSame(UW_Turbs[0].name, "Turb_1", "Wrong UW turbines in Test 2 Sector 180"); Assert.AreSame(UW_Turbs[1].name, "Turb_6", "Wrong UW turbines in Test 2 Sector 180"); UW_Turbs = WakeModList.FindAllUW_Turbines(337.5f, 279000, 4554900, turbineList); Assert.AreEqual(UW_Turbs.Length, 4, "Wrong number of UW turbines in Test 3 Sector 337.5"); Assert.AreSame(UW_Turbs[0].name, "Turb_5", "Wrong UW turbines in Test 3 Sector 180"); Assert.AreSame(UW_Turbs[1].name, "Turb_4", "Wrong UW turbines in Test 3 Sector 180"); Assert.AreSame(UW_Turbs[2].name, "Turb_3", "Wrong UW turbines in Test 3 Sector 180"); Assert.AreSame(UW_Turbs[3].name, "Turb_2", "Wrong UW turbines in Test 3 Sector 180"); UW_Turbs = WakeModList.FindAllUW_Turbines(225, 275500, 4553200, turbineList); Assert.AreEqual(UW_Turbs.Length, 3, "Wrong number of UW turbines in Test 4 Sector 225"); Assert.AreSame(UW_Turbs[0].name, "Turb_1", "Wrong UW turbines in Test 3 Sector 180"); Assert.AreSame(UW_Turbs[1].name, "Turb_2", "Wrong UW turbines in Test 3 Sector 180"); Assert.AreSame(UW_Turbs[2].name, "Turb_3", "Wrong UW turbines in Test 3 Sector 180"); }
public void CalcIBL_H1_Test() { WakeCollection WakeModList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); double[] power = new double[23]; string Power_file = testingFolder + "\\Calc_IBL_H1\\Power.txt"; StreamReader sr = new StreamReader(Power_file); for (int i = 0; i <= 22; i++) { power[i] = Convert.ToSingle(sr.ReadLine()); } double[] Thrust = new double[23]; string Thrust_file = testingFolder + "\\Calc_IBL_H1\\Thrust.txt"; sr = new StreamReader(Thrust_file); for (int i = 0; i <= 22; i++) { Thrust[i] = Convert.ToSingle(sr.ReadLine()); } turbineList.AddPowerCurve("GW 1500/87", 3, 22, 1500, power, Thrust, 87, 16, 10, 1, 0); Turbine[] UW_Turbs = new Turbine[1]; UW_Turbs[0] = new Turbine(); UW_Turbs[0].UTMX = 283000; UW_Turbs[0].UTMY = 4553300; MetCollection metList = new MetCollection(); metList.metItem = new Met[1]; metList.metItem[0] = new Met(); WakeModList.AddWakeModel(1, 5, 10, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); double This_IBL_H1 = WakeModList.Calc_IBL_H1(UW_Turbs[0], 280000, 4553500, WakeModList.wakeModels[0], 90f, 1.9316f, 80.0); Assert.AreEqual(This_IBL_H1, 750.4, 1, "Wrong IBL H1"); }
public void CalcEquivRoughness_Test() { WakeCollection WakeModList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); double[] power = new double[23]; string Power_file = testingFolder + "\\CalcEquivRoughness\\Power.txt"; StreamReader sr = new StreamReader(Power_file); for (int i = 0; i <= 22; i++) { power[i] = Convert.ToSingle(sr.ReadLine()); } double[] Thrust = new double[23]; string Thrust_file = testingFolder + "\\CalcEquivRoughness\\Thrust.txt"; sr = new StreamReader(Thrust_file); for (int i = 0; i <= 22; i++) { Thrust[i] = Convert.ToSingle(sr.ReadLine()); } turbineList.AddPowerCurve("GW 1500/87", 3, 22, 1500, power, Thrust, 87, 16, 10, 1, 0); WakeModList.AddWakeModel(1, 5, 10, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); MetCollection metList = new MetCollection(); metList.metItem = new Met[1]; metList.metItem[0] = new Met(); metList.WS_FirstInt = 0.5; metList.WS_IntSize = 1; metList.numWS = 30; double This_Equiv_Rough = WakeModList.CalcEquivRoughness(metList, 8, WakeModList.wakeModels[0], 80.0); Assert.AreEqual(This_Equiv_Rough, 1.9316, 0.01, "Wrong equivalent roughness for DAWM"); }
public void CalcNetEnergy_Test() { WakeCollection wakeModelList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); double[] power = new double[31]; string Power_file = testingFolder + "\\CalcNetEnergy\\Power.txt"; StreamReader sr = new StreamReader(Power_file); for (int i = 0; i <= 22; i++) { power[i] = Convert.ToSingle(sr.ReadLine()); } turbineList.AddPowerCurve("GW 1500/87", 3, 22, 1500, power, null, 87, 16, 10, 1, 0); wakeModelList.AddWakeModel(0, 5, 10, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); string Dist_file = testingFolder + "\\CalcNetEnergy\\WS_Dist.txt"; sr = new StreamReader(Dist_file); double[] thisDist = new double[31]; for (int i = 0; i <= 30; i++) { thisDist[i] = Convert.ToSingle(sr.ReadLine()); } Continuum thisInst = new Continuum(""); double[] dummyRose = new double[16]; double[,] dummySect = new double[16, 31]; thisInst.metList.AddMetTAB("Dummy", 0, 0, 0, dummyRose, dummySect, 0.5, 1, thisInst); double loss = 0.8782; double This_AEP = wakeModelList.CalcNetEnergy(wakeModelList.wakeModels[0], thisDist, thisInst, loss); Assert.AreEqual(This_AEP, 8956.778, 5, "Wrongt Net AEP"); }
/// <summary> Calculates gross energy production at referenced mapNode. </summary> public void CalcGrossAEP_AtMapNode(ref MapNode thisMapNode, MetCollection metList, TurbineCollection turbineList) { int numWS = metList.numWS; int numWD = metList.numWD; thisMapNode.sectorGross = new double[numWD]; TurbineCollection.PowerCurve thisPowerCurve = turbineList.GetPowerCurve(powerCurve); thisMapNode.grossAEP = 0; for (int k = 0; k < numWS; k++) { double thisWS = metList.GetWS_atWS_Ind(k); double thisPower = turbineList.GetInterpPowerOrThrust(thisWS, thisPowerCurve, "Power"); thisMapNode.grossAEP = thisMapNode.grossAEP + thisMapNode.WS_Dist[k] * thisPower; for (int WD_Ind = 0; WD_Ind < numWD; WD_Ind++) { thisMapNode.sectorGross[WD_Ind] = thisMapNode.sectorGross[WD_Ind] + thisMapNode.sectDist[WD_Ind, k] * thisPower; } } thisMapNode.grossAEP = thisMapNode.grossAEP * 365 * 24 / 1000; for (int WD_Ind = 0; WD_Ind < numWD; WD_Ind++) { thisMapNode.sectorGross[WD_Ind] = thisMapNode.sectorGross[WD_Ind] * 365 * 24 / 1000 * thisMapNode.windRose[WD_Ind]; } }
public void CalcWakeLosses_Test() { WakeCollection WakeModList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); double[] power = new double[31]; string Power_file = testingFolder + "\\CalcWakeLosses\\power.txt"; StreamReader sr = new StreamReader(Power_file); for (int i = 0; i <= 22; i++) { power[i] = Convert.ToSingle(sr.ReadLine()); } double[] Thrust = new double[31]; string Thrust_file = testingFolder + "\\CalcWakeLosses\\Thrust.txt"; sr = new StreamReader(Thrust_file); for (int i = 0; i <= 22; i++) { Thrust[i] = Convert.ToSingle(sr.ReadLine()); } turbineList.AddPowerCurve("GW 1500/87", 3, 22, 1500, power, Thrust, 87, 16, 10, 1, 0); WakeModList.AddWakeModel(0, 5, 10, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); MetCollection metList = new MetCollection(); metList.metItem = new Met[1]; metList.metItem[0] = new Met(); // Load sectorwise wind speed distribution string Sect_WS_file = testingFolder + "\\CalcWakeLosses\\Sect_WS.txt"; sr = new StreamReader(Sect_WS_file); double[,] sectorWS = new double[16, 31]; for (int i = 0; i <= 15; i++) { string This_WS_Array = sr.ReadLine(); string[] This_Array_Split = This_WS_Array.Split('\t'); for (int j = 0; j <= 30; j++) { sectorWS[i, j] = Convert.ToSingle(This_Array_Split[j]); } } string WR_file = testingFolder + "\\CalcWakeLosses\\Wind_Rose.txt"; sr = new StreamReader(WR_file); double[] windRose = new double[16]; for (int i = 0; i <= 15; i++) { windRose[i] = Convert.ToSingle(sr.ReadLine()) / 100; } string Sect_AEP_file = testingFolder + "\\CalcWakeLosses\\Sect_AEP.txt"; sr = new StreamReader(Sect_AEP_file); double[] Sect_AEP = new double[16]; for (int i = 0; i <= 15; i++) { Sect_AEP[i] = Convert.ToSingle(sr.ReadLine()); } double[] R_RD = new double[21]; for (int i = 0; i <= 20; i++) { R_RD[i] = i * 0.025f; } WakeCollection.WakeLossCoeffs[] These_Coeffs = new WakeCollection.WakeLossCoeffs[140]; // 5 (DW_RDs) x 28 (WS > 3) int Ind_Count = 0; for (double DW_RD = 5.5f; DW_RD <= 5.9; DW_RD = DW_RD + 0.1f) { int DW_ind = (int)Math.Round((DW_RD - 2) / 0.1, 0); for (int i = 3; i <= 30; i++) { double[] Vel_Def_Rad = new double[21]; // Velocity Deficit profile at X_Length_RD double[,] WS_Def_EV_Grid = WakeModList.CalcWS_DeficitEddyViscosityGrid(2f, 6f, 0.1f, 0.025f, i, WakeModList.wakeModels[0], metList); for (int radiusInd = 0; radiusInd <= 19; radiusInd++) { Vel_Def_Rad[radiusInd] = WS_Def_EV_Grid[DW_ind, radiusInd]; // index = 37 corresponds to DW dist = 5.7 (i.e. 2 + 0.1 * 37 = 5.7) } Vel_Def_Rad[20] = 0; double[] Coeffs = WakeModList.CalcWakeProfileFit(Vel_Def_Rad, R_RD); These_Coeffs[Ind_Count].freeStream = i; These_Coeffs[Ind_Count].X_LengthRD = DW_RD; These_Coeffs[Ind_Count].linRegInt = Coeffs[0]; These_Coeffs[Ind_Count].linCoeff4 = Coeffs[1]; These_Coeffs[Ind_Count].linCoeff3 = Coeffs[2]; These_Coeffs[Ind_Count].linCoeff2 = Coeffs[3]; These_Coeffs[Ind_Count].linCoeff1 = Coeffs[4]; Ind_Count++; } } turbineList.AddTurbine("Target Site", 280050, 4552500, 1); turbineList.AddTurbine("UW Site", 280000, 4553000, 1); Continuum thisInst = new Continuum(""); thisInst.turbineList = turbineList; thisInst.metList.WS_FirstInt = 0.5; thisInst.metList.WS_IntSize = 1; thisInst.metList.numWS = 30; thisInst.metList.AddMetTAB("dummy", 0, 0, 0, windRose, sectorWS, 0.5, 1, thisInst); // Need to define exceed model thisInst.turbineList.exceed = new Exceedance(); thisInst.turbineList.exceed.compositeLoss = new Exceedance.Monte_Carlo(); thisInst.turbineList.exceed.compositeLoss.pVals1yr = new double[100]; for (int i = 0; i < 100; i++) { thisInst.turbineList.exceed.compositeLoss.pVals1yr[i] = 1.0; } WakeCollection.WakeCalcResults WakeResults = WakeModList.CalcWakeLosses(These_Coeffs, 280050, 4552500, sectorWS, 4130, Sect_AEP, thisInst, WakeModList.wakeModels[0], windRose); Assert.AreEqual(WakeResults.sectorNetEnergy[0], 79.1604, 0.1, "Wrong net AEP"); Assert.AreEqual(WakeResults.sectorWakedWS[0], 4.2851, 0.1, "Wrong waked wind speed"); Assert.AreEqual(WakeResults.sectorWakeLoss[0], 0.2278, 0.1, "Wrong wake loss"); }
public void CalcNetSectEnergy_Test() { WakeCollection WakeModList = new WakeCollection(); TurbineCollection turbineList = new TurbineCollection(); double[] power = new double[31]; string Power_file = testingFolder + "\\CalcNetSectEnergy\\Power.txt"; StreamReader sr = new StreamReader(Power_file); for (int i = 0; i <= 22; i++) { power[i] = Convert.ToSingle(sr.ReadLine()); } double[] Thrust = new double[31]; string Thrust_file = testingFolder + "\\CalcNetSectEnergy\\Thrust.txt"; sr = new StreamReader(Thrust_file); for (int i = 0; i <= 22; i++) { Thrust[i] = Convert.ToSingle(sr.ReadLine()); } turbineList.AddPowerCurve("GW 1500/87", 3, 22, 1500, power, Thrust, 87, 16, 10, 1, 0); WakeModList.AddWakeModel(0, 5, 10, turbineList.powerCurves[0], 10, 3.5f, 0.03f, "Linear"); string WR_file = testingFolder + "\\CalcNetSectEnergy\\Wind_Rose.txt"; sr = new StreamReader(WR_file); double[] windRose = new double[16]; for (int i = 0; i <= 15; i++) { windRose[i] = Convert.ToSingle(sr.ReadLine()) / 100; } string Sect_WS_file = testingFolder + "\\CalcNetSectEnergy\\Sect_WS.txt"; sr = new StreamReader(Sect_WS_file); double[,] sectorWS = new double[16, 31]; for (int i = 0; i <= 15; i++) { string This_WS_Array = sr.ReadLine(); string[] This_Array_Split = This_WS_Array.Split('\t'); for (int j = 0; j <= 30; j++) { sectorWS[i, j] = Convert.ToSingle(This_Array_Split[j]); } } Continuum thisInst = new Continuum(""); thisInst.metList.WS_FirstInt = 0.5; thisInst.metList.WS_IntSize = 1; thisInst.metList.numWS = 30; Met met = new Met(); thisInst.metList.AddMetTAB("dummy", 0, 0, 0, windRose, sectorWS, 0.5, 1, thisInst); double noLoss = 1.0; double[] This_Net_Energy = WakeModList.CalcNetSectEnergy(WakeModList.wakeModels[0], sectorWS, windRose, thisInst, noLoss); Assert.AreEqual(This_Net_Energy[0], 102.5134, 0.1, "Wrong net energy calculated Sector 0"); Assert.AreEqual(This_Net_Energy[6], 96.69486, 0.1, "Wrong net energy calculated Sector 6"); Assert.AreEqual(This_Net_Energy[14], 223.3589, 0.1, "Wrong net energy calculated Sector 14"); Assert.AreEqual(This_Net_Energy[15], 124.5820, 0.1, "Wrong net energy calculated Sector 15"); }