Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit b521f35d authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

refactoring heating power calculation for different technologies

parent 2261573a
No related branches found
No related tags found
No related merge requests found
Showing
with 227 additions and 233 deletions
...@@ -44,7 +44,7 @@ Namespace UnitTests ...@@ -44,7 +44,7 @@ Namespace UnitTests
Public ReadOnly Property EngineWasteHeat As Watt Implements ISSMTOOL.EngineWasteHeat Public ReadOnly Property EngineWasteHeat As Watt Implements ISSMTOOL.EngineWasteHeat
Public Function AverageAuxHeaterPower(averageUseableEngineWasteHeat As Watt) As Watt Implements ISSMTOOL.AverageAuxHeaterPower Public Function AverageAuxHeaterPower(averageUseableEngineWasteHeat As Watt) As Watt Implements ISSMPowerDemand.AverageHeaterPower
Return (0.5*(averageUseableEngineWasteHeat.Value()*0.835).SI(Unit.SI.Liter.Per.Hour).Value()).SI (of Watt) Return (0.5*(averageUseableEngineWasteHeat.Value()*0.835).SI(Unit.SI.Liter.Per.Hour).Value()).SI (of Watt)
End Function End Function
......
...@@ -25,5 +25,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -25,5 +25,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
{ {
return parse.Replace("HD", "HeatingDistribution").ParseEnum<HeatingDistributionCase>(); return parse.Replace("HD", "HeatingDistribution").ParseEnum<HeatingDistributionCase>();
} }
public static int GetID(this HeatingDistributionCase hd)
{
return hd.ToString().Replace("HeatingDistribution", "").ToInt();
}
} }
} }
\ No newline at end of file
...@@ -29,7 +29,9 @@ namespace TUGraz.VectoCommon.BusAuxiliaries ...@@ -29,7 +29,9 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
string HVACTechnology { get; } string HVACTechnology { get; }
HeatingDistributionCase HeatingDistributionCase { get; } HeatingDistributionCase HeatingDistributionCaseDriver { get; }
HeatingDistributionCase HeatingDistributionCasePassenger { get; }
//HeatPumpType HeatPumpTypeHeatingDriverCompartment { get; } //HeatPumpType HeatPumpTypeHeatingDriverCompartment { get; }
......
using System; using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Text; using System.Text;
using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.BusAuxiliaries;
using TUGraz.VectoCommon.Utils; using TUGraz.VectoCommon.Utils;
...@@ -144,91 +146,127 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -144,91 +146,127 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
} }
} }
public Watt AverageAuxHeaterPower public HeaterPower CalculateAverageHeatingDemand()
{ {
get { var heatingDemands = new List<HeaterPower>();
var averageAuxHeaterPower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions; var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList; var tl = ssmTOOL.TechList;
// If batch mode is disabled use the EC_EnviromentalTemperature and EC_Solar variables.
// Else if batch is enable calculate the FuelLPerHBaseAdjusted for each input in the AENV file and then calculate the weighted average
if (!gen.BatchMode) if (!gen.BatchMode)
averageAuxHeaterPower = CalculateAverageAuxHeaterPower( return CalculateHeatingPower(
ssmTOOL.SSMInputs, tl, gen.DefaultConditions); ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
else { else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions()) foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averageAuxHeaterPower += CalculateAverageAuxHeaterPower( heatingDemands.Add(CalculateHeatingPower(
ssmTOOL.SSMInputs, tl, envCondition); ssmTOOL.SSMInputs, tl, envCondition));
}
return new HeaterPower() {
RequiredHeatingPower = heatingDemands.Sum(x => x.RequiredHeatingPower),
HeatPumpPowerMech = heatingDemands.Sum(x => x.HeatPumpPowerMech),
HeatPumpPowerEl = heatingDemands.Sum(x => x.HeatPumpPowerEl),
ElectricHeaterPowerEl = heatingDemands.Sum(x => x.ElectricHeaterPowerEl),
AuxHeaterPower = heatingDemands.Sum(x => x.AuxHeaterPower),
};
}
protected HeaterPower CalculateHeatingPower(ISSMDeclarationInputs genInputs, ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
{
var heatingDemand = CalculateAverageHeatingPower(genInputs, tecList, env);
var heatingDemandDriver = heatingDemand * genInputs.ACSystem.DriverHVACContribution;
var heatingDemandPassenger = heatingDemand * genInputs.ACSystem.PassengerHVACContribution;
var heatingPowerDriver = CalculateHeatingDistribution(genInputs.HeatingDistributionCaseDriver,
genInputs.HeatPumpTypeDriverCompartment, genInputs.ACSystem.ElectricHeater, env, heatingDemandDriver, genInputs.ACSystem.MaxHeatingPower * genInputs.ACSystem.DriverHVACContribution);
var heatingPowerPassenger = CalculateHeatingDistribution(genInputs.HeatingDistributionCasePassenger,
genInputs.HeatPumpTypePassengerCompartment, genInputs.ACSystem.ElectricHeater, env, heatingDemandPassenger, genInputs.ACSystem.MaxHeatingPower * genInputs.ACSystem.PassengerHVACContribution);
var techBenefitsFuelFiredHeater = 1 - TechListAdjustedHeatingW_FuelFiredHeating;
var copDriver = env.HeatPumpCoP.ContainsKey(genInputs.HeatPumpTypeDriverCompartment) ? env.HeatPumpCoP[genInputs.HeatPumpTypeDriverCompartment] : double.NaN;
var copPassenger = env.HeatPumpCoP.ContainsKey(genInputs.HeatPumpTypePassengerCompartment) ? env.HeatPumpCoP[genInputs.HeatPumpTypePassengerCompartment] : double.NaN;
var elHeaterEff = GetElectricHeaterEfficiency(genInputs.ACSystem.ElectricHeater, env);
var fuelHeaterEff = env.HeaterEfficiency.ContainsKey(HeaterType.FuelHeater)
? env.HeaterEfficiency[HeaterType.FuelHeater]
: double.NaN;
var retVal = new HeaterPower() {
RequiredHeatingPower = heatingDemand * env.Weighting,
HeatPumpPowerMech =
((double.IsNaN(copDriver) ? 0.SI<Watt>() : heatingPowerDriver.HeatPumpPowerMech / copDriver) +
(double.IsNaN(copPassenger)
? 0.SI<Watt>()
: heatingPowerPassenger.HeatPumpPowerMech / copPassenger)) * env.Weighting,
HeatPumpPowerEl =
((double.IsNaN(copDriver) ? 0.SI<Watt>() : heatingPowerDriver.HeatPumpPowerEl / copDriver) +
(double.IsNaN(copPassenger)
? 0.SI<Watt>()
: heatingPowerPassenger.HeatPumpPowerEl / copPassenger)) * env.Weighting,
ElectricHeaterPowerEl =
double.IsNaN(elHeaterEff)
? 0.SI<Watt>()
: (heatingPowerDriver.ElectricHeaterPowerEl + heatingPowerPassenger.ElectricHeaterPowerEl) /
elHeaterEff * env.Weighting,
AuxHeaterPower = double.IsNaN(fuelHeaterEff) ? 0.SI<Watt>() : VectoMath.Min(genInputs.AuxHeater.FuelFiredHeaterPower,
heatingPowerDriver.AuxHeaterPower + heatingPowerPassenger.AuxHeaterPower) / fuelHeaterEff *
techBenefitsFuelFiredHeater * env.Weighting,
};
return retVal;
}
protected HeaterPower CalculateHeatingDistribution(HeatingDistributionCase hdCase, HeatPumpType heatPump,
HeaterType heater, IEnvironmentalConditionsMapEntry env, Watt heatingDemand, Watt maxHeatingPower)
{
var heatingDistribution = DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(hdCase, env.ID);
} var auxHeaterPower = heatingDemand * heatingDistribution.GetFuelHeaterContribution();
var heatPumpPower = heatingDemand * heatingDistribution.GetHeatpumpContribution(heatPump);
var electricHeaterPower = heatingDemand * heatingDistribution.GetElectricHeaterContribution(heater);
var sumHeatingPower = VectoMath.Min(maxHeatingPower, heatPumpPower + electricHeaterPower);
var heatPumpPowerLtd = ((1-heatingDistribution.GetFuelHeaterContribution()).IsEqual(0)
? sumHeatingPower
: sumHeatingPower / (1 - heatingDistribution.GetFuelHeaterContribution()))
* heatingDistribution.GetHeatpumpContribution(heatPump);
var electricHeaterPowerLtd = ((1-heatingDistribution.GetFuelHeaterContribution()).IsEqual(0)
? sumHeatingPower
: sumHeatingPower / (1 - heatingDistribution.GetFuelHeaterContribution())) *
heatingDistribution.GetElectricHeaterContribution(heater);
return new HeaterPower() {
RequiredHeatingPower = heatingDemand,
HeatPumpPowerMech = heatPump.IsMechanical() ? heatPumpPowerLtd : 0.SI<Watt>(),
HeatPumpPowerEl = heatPump.IsElectrical() ? heatPumpPowerLtd : 0.SI<Watt>(),
ElectricHeaterPowerEl = electricHeaterPowerLtd,
AuxHeaterPower = auxHeaterPower,
};
return averageAuxHeaterPower;
}
} }
public Watt AverageHeatingPowerHeatPumpElectric public Watt AverageHeatingPowerDemand
{ {
get get
{ {
var averagePower = 0.0.SI<Watt>(); var averageHeatingPower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions; var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList; var tl = ssmTOOL.TechList;
if (!gen.BatchMode) {
averagePower =
CalculateAverageHeatpumpHeatingPowerElectric(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
} else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averagePower += CalculateAverageHeatpumpHeatingPowerElectric(
ssmTOOL.SSMInputs, tl, envCondition);
}
return averagePower;
}
}
public Watt AverageHeatingPowerHeatPumpMech {
get {
var averagePower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList;
if (!gen.BatchMode) { // If batch mode is disabled use the EC_EnviromentalTemperature and EC_Solar variables.
averagePower = // Else if batch is enable calculate the FuelLPerHBaseAdjusted for each input in the AENV file and then calculate the weighted average
CalculateAverageHeatpumpHeatingPowerMech(ssmTOOL.SSMInputs, tl, gen.DefaultConditions); if (!gen.BatchMode)
} else { averageHeatingPower = CalculateAverageHeatingPower(
ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions()) foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averagePower += CalculateAverageHeatpumpHeatingPowerMech( averageHeatingPower += CalculateAverageHeatingPower(
ssmTOOL.SSMInputs, tl, envCondition); ssmTOOL.SSMInputs, tl, envCondition);
}
return averagePower;
}
}
public Watt AverageHeatingPowerElectricHeater {
get {
var averagePower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList;
if (!gen.BatchMode) {
averagePower =
CalculateAverageHeatingPowerElectricHeater(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
} else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averagePower += CalculateAverageHeatingPowerElectricHeater(
ssmTOOL.SSMInputs, tl, envCondition);
} }
return averagePower; return averageHeatingPower;
} }
} }
// Base Values // Base Values
public Watt BaseHeatingW_ElectricalVentilation(Kelvin environmentalTemperature, WattPerSquareMeter solar) public Watt BaseHeatingW_ElectricalVentilation(Kelvin environmentalTemperature, WattPerSquareMeter solar)
...@@ -257,27 +295,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -257,27 +295,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
} }
//public Watt BaseHeatingW_FuelFiredHeating(Kelvin environmentalTemperature, WattPerSquareMeter solar)
//{
// // =IF(AND(M89<0,M90<0),VLOOKUP(MAX(M89:M90),M89:O90,3),0)
// // Dim M89 = Me.Run1.TotalW
// // Dim M90 = Me.Run2.TotalW
// // VLOOKUP(MAX(M89:M90),M89:O90 => VLOOKUP ( lookupValue, tableArray, colIndex, rangeLookup )
// // If both Run TotalW values are >=0 then return FuelW from Run with largest TotalW value, else return 0
// var run1TotalW = Run1.TotalW(environmentalTemperature, solar);
// var run2TotalW = Run2.TotalW(environmentalTemperature, solar);
// if ((run1TotalW < 0 && run2TotalW < 0)) {
// return run1TotalW > run2TotalW ? Run1.PowerFuelHeater(environmentalTemperature, solar) : Run2.PowerFuelHeater(environmentalTemperature, solar);
// }
// return 0.SI<Watt>();
//}
protected Watt BaseCoolingW_Mechanical(Kelvin environmentalTemperature, WattPerSquareMeter solar) protected Watt BaseCoolingW_Mechanical(Kelvin environmentalTemperature, WattPerSquareMeter solar)
{ {
// =IF(C46<C28,0,IF(C53="electrical", 0, IF(AND(M89>0,M90>0),MIN(M89:M90),0))) // =IF(C46<C28,0,IF(C53="electrical", 0, IF(AND(M89>0,M90>0),MIN(M89:M90),0)))
...@@ -705,87 +722,16 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -705,87 +722,16 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
return MechanicalWBaseAdjusted * env.Weighting; return MechanicalWBaseAdjusted * env.Weighting;
} }
private Watt CalculateAverageAuxHeaterPower( private double GetElectricHeaterEfficiency(HeaterType electricHeater, IEnvironmentalConditionsMapEntry env)
ISSMDeclarationInputs genInputs, ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
{
var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
var heatingDistributionCase = genInputs.HeatingDistributionCase;
var heatingDistribution =
DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
var auxHeaterPower = heatingPower * (heatingDistribution?.GetFuelHeaterContribution() ?? 0);
var auxHeaterPowerLtd = VectoMath.Min(auxHeaterPower, genInputs.AuxHeater.FuelFiredHeaterPower) /
genInputs.BoundaryConditions.AuxHeaterEfficiency;
return auxHeaterPowerLtd * env.Weighting;
}
private Watt CalculateAverageHeatpumpHeatingPowerMech(ISSMDeclarationInputs genInputs,
ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
{
var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
var heatingDistributionCase = genInputs.HeatingDistributionCase;
var heatingDistribution =
DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
var heaterPower = heatingPower * (heatingDistribution?.GetHeatpumpContribution(genInputs.HeatPumpTypeDriverCompartment) ?? 0);
var cop = GetCoPHeating(genInputs, env);
var heaterPowerLtd = heaterPower.IsEqual(0) || double.IsNaN(cop) ? 0.SI<Watt>() : VectoMath.Min(heaterPower, genInputs.ACSystem.MaxHeatingPower) / cop;
var driverContribution = heaterPowerLtd * genInputs.ACSystem.DriverHVACContribution;
var passengerContribution = heaterPowerLtd * genInputs.ACSystem.PassengerHVACContribution;
var retVal = (genInputs.HeatPumpTypeDriverCompartment.IsMechanical() ? driverContribution : 0.SI<Watt>()) +
(genInputs.HeatPumpTypePassengerCompartment.IsMechanical() ? passengerContribution : 0.SI<Watt>());
return retVal * env.Weighting;
}
private Watt CalculateAverageHeatpumpHeatingPowerElectric(ISSMDeclarationInputs genInputs,
ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
{
var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
var heatingDistributionCase = genInputs.HeatingDistributionCase;
var heatingDistribution =
DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
var heaterPower = heatingPower * (heatingDistribution?.GetHeatpumpContribution(genInputs.HeatPumpTypeDriverCompartment) ?? 0);
var cop = GetCoPHeating(genInputs, env);
var heaterPowerLtd = heaterPower.IsEqual(0) || double.IsNaN(cop) ? 0.SI<Watt>() : VectoMath.Min(heaterPower, genInputs.ACSystem.MaxHeatingPower) / cop;
var driverContribution = heaterPowerLtd * genInputs.ACSystem.DriverHVACContribution;
var passengerContribution = heaterPowerLtd * genInputs.ACSystem.PassengerHVACContribution;
var retVal = (genInputs.HeatPumpTypeDriverCompartment.IsElectrical() ? driverContribution : 0.SI<Watt>()) +
(genInputs.HeatPumpTypePassengerCompartment.IsElectrical() ? passengerContribution : 0.SI<Watt>());
return retVal * env.Weighting;
}
private Watt CalculateAverageHeatingPowerElectricHeater(ISSMDeclarationInputs genInputs,
ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
{
var heatingPower = CalculateAverageHeatingPower(genInputs, tecList, env);
var heatingDistributionCase = genInputs.HeatingDistributionCase;
var heatingDistribution =
DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(heatingDistributionCase, env.ID);
var heaterPower = heatingPower * (heatingDistribution?.GetElectricHeaterContribution(genInputs.ACSystem.ElectricHeater) ?? 0);
var efficiency = GetElectricHeaterEfficiency(genInputs, env);
var heaterPowerLtd = heaterPower.IsEqual(0) || double.IsNaN(efficiency) ? 0.SI<Watt>() : VectoMath.Min(heaterPower, genInputs.ACSystem.MaxHeatingPower) / efficiency;
var driverContribution = heaterPowerLtd * genInputs.ACSystem.DriverHVACContribution;
var passengerContribution = heaterPowerLtd * genInputs.ACSystem.PassengerHVACContribution;
var retVal = (genInputs.HeatPumpTypeDriverCompartment.IsElectrical() ? driverContribution : 0.SI<Watt>()) +
(genInputs.HeatPumpTypePassengerCompartment.IsElectrical() ? passengerContribution : 0.SI<Watt>());
return retVal * env.Weighting;
}
private double GetElectricHeaterEfficiency(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env)
{ {
var cnt = 0; var cnt = 0;
var sum = 0.0; var sum = 0.0;
foreach (var heaterType in EnumHelper.GetValues<HeaterType>()) { foreach (var heaterType in EnumHelper.GetValues<HeaterType>()) {
if ((genInputs.ACSystem.ElectricHeater & heaterType) == 0) { if ((electricHeater & heaterType) == 0) {
continue;
}
if (!env.HeaterEfficiency.ContainsKey(heaterType)) {
continue; continue;
} }
...@@ -813,12 +759,14 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -813,12 +759,14 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
var result = 0.SI<Watt>(); var result = 0.SI<Watt>();
if (run1TotalW < 0 && run2TotalW < 0) { if (run1TotalW < 0 && run2TotalW < 0) {
result = VectoMath result = VectoMath
.Abs( .Abs(
run1TotalW > run2TotalW run1TotalW > run2TotalW
? Run1.TechListAmendedFuelHeater(env.Temperature, env.Solar) ? run1TotalW //.TechListAmendedFuelHeater(env.Temperature, env.Solar)
: Run2.TechListAmendedFuelHeater(env.Temperature, env.Solar)).Value().SI<Watt>(); : run2TotalW //.TechListAmendedFuelHeater(env.Temperature, env.Solar)
) - ssmTOOL.EngineWasteHeat;
} }
return result; return result;
......
...@@ -13,7 +13,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -13,7 +13,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
IAuxHeater, ISSMBusParameters IAuxHeater, ISSMBusParameters
{ {
private readonly IFuelProperties HeatingFuel; private readonly IFuelProperties HeatingFuel;
private HeatingDistributionCase? _heatingDistributionCase; private HeatingDistributionCase? _heatingDistributionDriverCase;
private HeatingDistributionCase? _heatingDistributionPassengerCase;
public SSMInputs(string source, IFuelProperties heatingFuel = null) public SSMInputs(string source, IFuelProperties heatingFuel = null)
{ {
...@@ -164,20 +165,31 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -164,20 +165,31 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
public string HVACTechnology => $"{HVACSystemConfiguration.GetName()} " + public string HVACTechnology => $"{HVACSystemConfiguration.GetName()} " +
$"({string.Join(", ", HeatPumpTypePassengerCompartment.GetName(), HeatPumpTypeDriverCompartment.GetName())})"; $"({string.Join(", ", HeatPumpTypePassengerCompartment.GetName(), HeatPumpTypeDriverCompartment.GetName())})";
public HeatingDistributionCase HeatingDistributionCase public HeatingDistributionCase HeatingDistributionCaseDriver
{ {
get get
{ {
if (!_heatingDistributionCase.HasValue) { if (!_heatingDistributionDriverCase.HasValue) {
_heatingDistributionCase = GetHeatingDistributionCase(); _heatingDistributionDriverCase = GetHeatingDistributionCase(HeatPumpTypeDriverCompartment);
} }
return _heatingDistributionCase.Value; return _heatingDistributionDriverCase.Value;
} }
} }
protected virtual HeatingDistributionCase GetHeatingDistributionCase()
public HeatingDistributionCase HeatingDistributionCasePassenger {
get {
if (!_heatingDistributionPassengerCase.HasValue) {
_heatingDistributionPassengerCase = GetHeatingDistributionCase(HeatPumpTypePassengerCompartment);
}
return _heatingDistributionPassengerCase.Value;
}
}
protected virtual HeatingDistributionCase GetHeatingDistributionCase(HeatPumpType heatPump)
{ {
return HeatingDistributions.GetHeatingDistributionCase(HeatPumpTypePassengerCompartment, ElectricHeater, return HeatingDistributions.GetHeatingDistributionCase(heatPump, ElectricHeater,
AuxHeater.FuelFiredHeaterPower.IsGreater(0)); AuxHeater.FuelFiredHeaterPower.IsGreater(0));
} }
......
...@@ -79,29 +79,29 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -79,29 +79,29 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
//} //}
public Watt TechListAmendedFuelHeater(Kelvin enviromentalTemperature, WattPerSquareMeter solarFactor) //public Watt TechListAmendedFuelHeater(Kelvin enviromentalTemperature, WattPerSquareMeter solarFactor)
{ //{
// =IF(IF(AND((N79*(1-$J$89))<0,(N79*(1-$J$89))<(C60*-1)),(N79*(1-$J$89))-(C60*-1),0)*1000<0,IF(AND((N79*(1-$J$89))<0,(N79*(1-$J$89))<(C60*-1)),(N79*(1-$J$89))-(C60*-1),0)*1000,0) // // =IF(IF(AND((N79*(1-$J$89))<0,(N79*(1-$J$89))<(C60*-1)),(N79*(1-$J$89))-(C60*-1),0)*1000<0,IF(AND((N79*(1-$J$89))<0,(N79*(1-$J$89))<(C60*-1)),(N79*(1-$J$89))-(C60*-1),0)*1000,0)
var TLFFH = ssmTOOL.Calculate.TechListAdjustedHeatingW_FuelFiredHeating; // var TLFFH = ssmTOOL.Calculate.TechListAdjustedHeatingW_FuelFiredHeating;
// Dim C60 As Double = gen.AH_EngineWasteHeatkW // // Dim C60 As Double = gen.AH_EngineWasteHeatkW
// Dim N79 As Double = Me.TotalKW // // Dim N79 As Double = Me.TotalKW
//Return IF( IF(( (TotalKW * (1 - TLFFH)) < 0 AndAlso (TotalKW * (1 - TLFFH)) < (gen.AH_EngineWasteHeatkW * -1)), _ // //Return IF( IF(( (TotalKW * (1 - TLFFH)) < 0 AndAlso (TotalKW * (1 - TLFFH)) < (gen.AH_EngineWasteHeatkW * -1)), _
// (TotalKW * (1 - TLFFH)) - (gen.AH_EngineWasteHeatkW * -1), 0)*1000 < 0, _ // // (TotalKW * (1 - TLFFH)) - (gen.AH_EngineWasteHeatkW * -1), 0)*1000 < 0, _
//IF(((TotalKW * (1 - TLFFH)) < 0 AndAlso(TotalKW * (1 - TLFFH)) < (gen.AH_EngineWasteHeatkW * -1)),(TotalKW * (1 - TLFFH)) - (gen.AH_EngineWasteHeatkW * -1),0)*1000,0) // //IF(((TotalKW * (1 - TLFFH)) < 0 AndAlso(TotalKW * (1 - TLFFH)) < (gen.AH_EngineWasteHeatkW * -1)),(TotalKW * (1 - TLFFH)) - (gen.AH_EngineWasteHeatkW * -1),0)*1000,0)
var totalW = TotalW(enviromentalTemperature, solarFactor) * (1 - TLFFH); // var totalW = TotalW(enviromentalTemperature, solarFactor) * (1 - TLFFH);
return totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1 // //return totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1
? totalW - ssmTOOL.EngineWasteHeat * -1 // // ? totalW - ssmTOOL.EngineWasteHeat * -1
: 0.SI<Watt>(); // // : 0.SI<Watt>();
//return (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1? // //return (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1?
// totalW - ssmTOOL.EngineWasteHeat * -1: 0.SI<Watt>()) < 0 // // totalW - ssmTOOL.EngineWasteHeat * -1: 0.SI<Watt>()) < 0
// ? (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1 // // ? (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1
// ? totalW - ssmTOOL.EngineWasteHeat * -1 // // ? totalW - ssmTOOL.EngineWasteHeat * -1
// : 0.SI<Watt>()) // // : 0.SI<Watt>())
// : 0.SI<Watt>(); // // : 0.SI<Watt>();
} // }
} }
} }
...@@ -30,8 +30,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -30,8 +30,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
public Watt ElectricalWAdjusted => _ssmInput.ElectricPower; public Watt ElectricalWAdjusted => _ssmInput.ElectricPower;
public Watt MechanicalWBaseAdjusted => _ssmInput.MechanicalPower; public Watt MechanicalWBaseAdjusted => _ssmInput.MechanicalPower;
public HeaterPower AverageHeaterPower(Watt averageUseableEngineWasteHeat)
public Watt AverageAuxHeaterPower(Watt averageUseableEngineWasteHeat)
{ {
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
...@@ -111,13 +110,23 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -111,13 +110,23 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
// Dynamicly Get Fuel having re-adjusted Engine Heat Waste, this was originally supposed to be Solid State. Late adjustment request 24/3/2015 // Dynamicly Get Fuel having re-adjusted Engine Heat Waste, this was originally supposed to be Solid State. Late adjustment request 24/3/2015
public Watt AverageAuxHeaterPower(Watt averageUseableEngineWasteHeat) public HeaterPower AverageHeaterPower(Watt averageUseableEngineWasteHeat)
{ {
// Set Engine Waste Heat // Set Engine Waste Heat
//SSMInputs.AuxHeater.EngineWasteHeatkW = AverageUseableEngineWasteHeatKW; //SSMInputs.AuxHeater.EngineWasteHeatkW = AverageUseableEngineWasteHeatKW;
EngineWasteHeat = averageUseableEngineWasteHeat; EngineWasteHeat = averageUseableEngineWasteHeat;
var fba = Calculate.AverageAuxHeaterPower; //var retVal = new HeaterPower() {
// RequiredHeatingPower = Calculate.AverageHeatingPowerDemand,
// AuxHeaterPower = Calculate.AverageAuxHeaterPower,
// ElectricHeaterPowerEl = Calculate.AverageHeatingPowerElectricHeater,
// HeatPumpPowerMech = Calculate.AverageHeatingPowerHeatPumpMech,
// HeatPumpPowerEl = Calculate.AverageHeatingPowerHeatPumpElectric,
//};
var retVal = Calculate.CalculateAverageHeatingDemand();
//var fba = Calculate.AverageAuxHeaterPower;
// Dim FuelFiredWarning As Boolean = fba * SSMInputs.BC_AuxHeaterEfficiency * HVACConstants.FuelDensity * SSMInputs.BC_GCVDieselOrHeatingOil * 1000 > (AverageUseableEngineWasteHeatKW + SSMInputs.AH_FuelFiredHeaterkW) // Dim FuelFiredWarning As Boolean = fba * SSMInputs.BC_AuxHeaterEfficiency * HVACConstants.FuelDensity * SSMInputs.BC_GCVDieselOrHeatingOil * 1000 > (AverageUseableEngineWasteHeatKW + SSMInputs.AH_FuelFiredHeaterkW)
// If Not FuelFiredHeaterInsufficientWarned AndAlso FuelFiredWarning Then // If Not FuelFiredHeaterInsufficientWarned AndAlso FuelFiredWarning Then
...@@ -125,7 +134,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC ...@@ -125,7 +134,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
// OnMessage(Me, " HVAC SSM : Fuel fired heater insufficient for heating requirements, run continues assuming it was sufficient.", AdvancedAuxiliaryMessageType.Warning) // OnMessage(Me, " HVAC SSM : Fuel fired heater insufficient for heating requirements, run continues assuming it was sufficient.", AdvancedAuxiliaryMessageType.Warning)
// End If // End If
return fba; return retVal;
} }
} }
......
...@@ -12,10 +12,19 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HV ...@@ -12,10 +12,19 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HV
Watt ElectricalWAdjusted { get; } Watt ElectricalWAdjusted { get; }
Watt MechanicalWBaseAdjusted { get; } Watt MechanicalWBaseAdjusted { get; }
Watt AverageAuxHeaterPower { get; } //Watt AverageHeatingPowerDemand { get; }
//Watt AverageAuxHeaterPower { get; }
double TechListAdjustedHeatingW_FuelFiredHeating { get; } //Watt AverageHeatingPowerHeatPumpElectric { get; }
//Watt AverageHeatingPowerHeatPumpMech { get; }
//Watt AverageHeatingPowerElectricHeater { get; }
//double TechListAdjustedHeatingW_FuelFiredHeating { get; }
HeaterPower CalculateAverageHeatingDemand();
} }
} }
...@@ -7,6 +7,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HV ...@@ -7,6 +7,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HV
Watt TotalW(Kelvin environmentTemperature, WattPerSquareMeter solarFactor); Watt TotalW(Kelvin environmentTemperature, WattPerSquareMeter solarFactor);
//Watt PowerFuelHeater(Kelvin environmentTemperature, WattPerSquareMeter solarFactor); //Watt PowerFuelHeater(Kelvin environmentTemperature, WattPerSquareMeter solarFactor);
Watt TechListAmendedFuelHeater(Kelvin environmentTemperature, WattPerSquareMeter solarFactor); //Watt TechListAmendedFuelHeater(Kelvin environmentTemperature, WattPerSquareMeter solarFactor);
} }
} }
...@@ -9,10 +9,19 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HV ...@@ -9,10 +9,19 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HV
Watt ElectricalWAdjusted { get; } // Watt Watt ElectricalWAdjusted { get; } // Watt
Watt MechanicalWBaseAdjusted { get; } // Watt Watt MechanicalWBaseAdjusted { get; } // Watt
Watt AverageAuxHeaterPower(Watt averageUseableEngineWasteHeat); HeaterPower AverageHeaterPower(Watt averageUseableEngineWasteHeat);
} }
public struct HeaterPower
{
public Watt RequiredHeatingPower;
public Watt AuxHeaterPower;
public Watt ElectricHeaterPowerEl;
public Watt HeatPumpPowerEl;
public Watt HeatPumpPowerMech;
}
public interface ISSMTOOL : ISSMPowerDemand public interface ISSMTOOL : ISSMPowerDemand
{ {
ISSMDeclarationInputs SSMInputs { get; } ISSMDeclarationInputs SSMInputs { get; }
......
ID , EnvTemp , Solar , WeightingFactor , heating/cooling , R-744 , non R-744 2-stage , non R-744 3-stage , non R-744 4-stage , non R-744 continuous , water electric heater , air electric heater , other electric heater , fuel heater ID , EnvTemp , Solar , WeightingFactor , heating/cooling , R-744 , non R-744 2-stage , non R-744 3-stage , non R-744 4-stage , non R-744 continuous , water electric heater , air electric heater , other electric heating , fuel heater
1 , -20 , 10 , 0.0053 , h , 1.80 , - , - , - , - , 0.93 , 0.93 , 0.93 , 0.80 1 , -20 , 10 , 0.0053 , h , 1.80 , - , - , - , - , 0.93 , 0.93 , 0.93 , 0.80
2 , -5 , 30 , 0.0826 , h , 2.04 , 1.54 , 1.64 , 1.68 , 1.78 , 0.93 , 0.93 , 0.93 , 0.80 2 , -5 , 30 , 0.0826 , h , 2.04 , 1.54 , 1.64 , 1.68 , 1.78 , 0.93 , 0.93 , 0.93 , 0.80
3 , 2 , 30 , 0.0826 , h , 2.50 , 2.00 , 2.10 , 2.10 , 2.22 , 0.93 , 0.93 , 0.93 , 0.80 3 , 2 , 30 , 0.0826 , h , 2.50 , 2.00 , 2.10 , 2.10 , 2.22 , 0.93 , 0.93 , 0.93 , 0.80
......
Configuration , Heavy Urban , Urban , Suburban , Interurban , Coach Configuration , Heavy Urban , Urban , Suburban , Interurban , Coach
1 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 1 , 5.00 , 5.00 , 5.00 , 5.00 , 4.00
2 , 5.00 , 5.00 , 5.00 , 5.00 , 4.00 2 , 5.00 , 5.00 , 5.00 , 5.00 , 4.00
3 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 3 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00
4 , 5.00 , 5.00 , 5.00 , 5.00 , 4.00 4 , 5.00 , 5.00 , 5.00 , 5.00 , 4.00
......
Configuration , Heavy Urban , Urban , Suburban , Interurban , Coach Configuration , Heavy Urban , Urban , Suburban , Interurban , Coach
1 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 1 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
2 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 2 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
3 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 3 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
4 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 4 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
5 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55 5 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
6 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55 6 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
7 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55 7 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment