Code development platform for open source projects from the European Union institutions

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
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)
End Function
......
......@@ -25,5 +25,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
{
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,10 +29,12 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
string HVACTechnology { get; }
HeatingDistributionCase HeatingDistributionCase { get; }
HeatingDistributionCase HeatingDistributionCaseDriver { get; }
HeatingDistributionCase HeatingDistributionCasePassenger { get; }
//HeatPumpType HeatPumpTypeHeatingDriverCompartment { get; }
HeatPumpType HeatPumpTypeDriverCompartment { get; }
//HeatPumpType HeatPumpTypeHeatingPassengerCompartment { get; }
......
using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Text;
using TUGraz.VectoCommon.BusAuxiliaries;
using TUGraz.VectoCommon.Utils;
......@@ -144,91 +146,127 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
}
}
public Watt AverageAuxHeaterPower
public HeaterPower CalculateAverageHeatingDemand()
{
get {
var averageAuxHeaterPower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
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)
averageAuxHeaterPower = CalculateAverageAuxHeaterPower(
ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averageAuxHeaterPower += CalculateAverageAuxHeaterPower(
ssmTOOL.SSMInputs, tl, envCondition);
}
return averageAuxHeaterPower;
var heatingDemands = new List<HeaterPower>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList;
if (!gen.BatchMode)
return CalculateHeatingPower(
ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
heatingDemands.Add(CalculateHeatingPower(
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),
};
}
public Watt AverageHeatingPowerHeatPumpElectric
protected HeaterPower CalculateHeatingPower(ISSMDeclarationInputs genInputs, ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
{
get
{
var averagePower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList;
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;
}
if (!gen.BatchMode) {
averagePower =
CalculateAverageHeatpumpHeatingPowerElectric(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
} else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averagePower += CalculateAverageHeatpumpHeatingPowerElectric(
ssmTOOL.SSMInputs, tl, envCondition);
}
protected HeaterPower CalculateHeatingDistribution(HeatingDistributionCase hdCase, HeatPumpType heatPump,
HeaterType heater, IEnvironmentalConditionsMapEntry env, Watt heatingDemand, Watt maxHeatingPower)
{
var heatingDistribution = DeclarationData.BusAuxiliaries.HeatingDistribution.Lookup(hdCase, env.ID);
return averagePower;
}
}
var auxHeaterPower = heatingDemand * heatingDistribution.GetFuelHeaterContribution();
var heatPumpPower = heatingDemand * heatingDistribution.GetHeatpumpContribution(heatPump);
var electricHeaterPower = heatingDemand * heatingDistribution.GetElectricHeaterContribution(heater);
public Watt AverageHeatingPowerHeatPumpMech {
get {
var averagePower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList;
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);
if (!gen.BatchMode) {
averagePower =
CalculateAverageHeatpumpHeatingPowerMech(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
} else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averagePower += CalculateAverageHeatpumpHeatingPowerMech(
ssmTOOL.SSMInputs, tl, envCondition);
}
return new HeaterPower() {
RequiredHeatingPower = heatingDemand,
HeatPumpPowerMech = heatPump.IsMechanical() ? heatPumpPowerLtd : 0.SI<Watt>(),
HeatPumpPowerEl = heatPump.IsElectrical() ? heatPumpPowerLtd : 0.SI<Watt>(),
ElectricHeaterPowerEl = electricHeaterPowerLtd,
AuxHeaterPower = auxHeaterPower,
};
return averagePower;
}
}
public Watt AverageHeatingPowerElectricHeater {
get {
var averagePower = 0.0.SI<Watt>();
public Watt AverageHeatingPowerDemand
{
get
{
var averageHeatingPower = 0.0.SI<Watt>();
var gen = ssmTOOL.SSMInputs.EnvironmentalConditions;
var tl = ssmTOOL.TechList;
if (!gen.BatchMode) {
averagePower =
CalculateAverageHeatingPowerElectricHeater(ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
} else {
// 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)
averageHeatingPower = CalculateAverageHeatingPower(
ssmTOOL.SSMInputs, tl, gen.DefaultConditions);
else {
foreach (var envCondition in gen.EnvironmentalConditionsMap.GetEnvironmentalConditions())
averagePower += CalculateAverageHeatingPowerElectricHeater(
averageHeatingPower += CalculateAverageHeatingPower(
ssmTOOL.SSMInputs, tl, envCondition);
}
return averagePower;
return averageHeatingPower;
}
}
// Base Values
public Watt BaseHeatingW_ElectricalVentilation(Kelvin environmentalTemperature, WattPerSquareMeter solar)
......@@ -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)
{
// =IF(C46<C28,0,IF(C53="electrical", 0, IF(AND(M89>0,M90>0),MIN(M89:M90),0)))
......@@ -705,97 +722,26 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
return MechanicalWBaseAdjusted * env.Weighting;
}
private Watt CalculateAverageAuxHeaterPower(
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 double GetElectricHeaterEfficiency(HeaterType electricHeater, IEnvironmentalConditionsMapEntry env)
{
var cnt = 0;
var sum = 0.0;
foreach (var heaterType in EnumHelper.GetValues<HeaterType>()) {
if ((electricHeater & heaterType) == 0) {
continue;
}
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 sum = 0.0;
foreach (var heaterType in EnumHelper.GetValues<HeaterType>()) {
if ((genInputs.ACSystem.ElectricHeater & heaterType) == 0) {
if (!env.HeaterEfficiency.ContainsKey(heaterType)) {
continue;
}
cnt++;
sum += env.HeaterEfficiency[heaterType];
}
return sum / cnt;
}
cnt++;
sum += env.HeaterEfficiency[heaterType];
}
return sum / cnt;
}
private Watt CalculateAverageHeatingPower(
private Watt CalculateAverageHeatingPower(
ISSMDeclarationInputs genInputs, ISSMTechnologyBenefits tecList, IEnvironmentalConditionsMapEntry env)
{
// =MIN(ABS(IF(AND(M89<0,M90<0),VLOOKUP(MAX(M89:M90),M89:P90,4),0)/1000),C71)/C37*(1/(C39*C38))
......@@ -813,12 +759,14 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
var result = 0.SI<Watt>();
if (run1TotalW < 0 && run2TotalW < 0) {
result = VectoMath
.Abs(
run1TotalW > run2TotalW
? Run1.TechListAmendedFuelHeater(env.Temperature, env.Solar)
: Run2.TechListAmendedFuelHeater(env.Temperature, env.Solar)).Value().SI<Watt>();
? run1TotalW //.TechListAmendedFuelHeater(env.Temperature, env.Solar)
: run2TotalW //.TechListAmendedFuelHeater(env.Temperature, env.Solar)
) - ssmTOOL.EngineWasteHeat;
}
return result;
......
......@@ -13,7 +13,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
IAuxHeater, ISSMBusParameters
{
private readonly IFuelProperties HeatingFuel;
private HeatingDistributionCase? _heatingDistributionCase;
private HeatingDistributionCase? _heatingDistributionDriverCase;
private HeatingDistributionCase? _heatingDistributionPassengerCase;
public SSMInputs(string source, IFuelProperties heatingFuel = null)
{
......@@ -164,20 +165,31 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
public string HVACTechnology => $"{HVACSystemConfiguration.GetName()} " +
$"({string.Join(", ", HeatPumpTypePassengerCompartment.GetName(), HeatPumpTypeDriverCompartment.GetName())})";
public HeatingDistributionCase HeatingDistributionCase
public HeatingDistributionCase HeatingDistributionCaseDriver
{
get
{
if (!_heatingDistributionCase.HasValue) {
_heatingDistributionCase = GetHeatingDistributionCase();
if (!_heatingDistributionDriverCase.HasValue) {
_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));
}
......
......@@ -79,29 +79,29 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
//}
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)
var TLFFH = ssmTOOL.Calculate.TechListAdjustedHeatingW_FuelFiredHeating;
// Dim C60 As Double = gen.AH_EngineWasteHeatkW
// Dim N79 As Double = Me.TotalKW
//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, _
//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);
return totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1
? totalW - ssmTOOL.EngineWasteHeat * -1
: 0.SI<Watt>();
//return (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1?
// totalW - ssmTOOL.EngineWasteHeat * -1: 0.SI<Watt>()) < 0
// ? (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1
// ? totalW - ssmTOOL.EngineWasteHeat * -1
// : 0.SI<Watt>())
// : 0.SI<Watt>();
}
}
//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)
// var TLFFH = ssmTOOL.Calculate.TechListAdjustedHeatingW_FuelFiredHeating;
// // Dim C60 As Double = gen.AH_EngineWasteHeatkW
// // Dim N79 As Double = Me.TotalKW
// //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, _
// //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);
// //return totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1
// // ? totalW - ssmTOOL.EngineWasteHeat * -1
// // : 0.SI<Watt>();
// //return (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1?
// // totalW - ssmTOOL.EngineWasteHeat * -1: 0.SI<Watt>()) < 0
// // ? (totalW < 0 && totalW < ssmTOOL.EngineWasteHeat * -1
// // ? totalW - ssmTOOL.EngineWasteHeat * -1
// // : 0.SI<Watt>())
// // : 0.SI<Watt>();
// }
}
}
......@@ -30,8 +30,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC
public Watt ElectricalWAdjusted => _ssmInput.ElectricPower;
public Watt MechanicalWBaseAdjusted => _ssmInput.MechanicalPower;
public Watt AverageAuxHeaterPower(Watt averageUseableEngineWasteHeat)
public HeaterPower AverageHeaterPower(Watt averageUseableEngineWasteHeat)
{
throw new System.NotImplementedException();
}
......@@ -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
public Watt AverageAuxHeaterPower(Watt averageUseableEngineWasteHeat)
public HeaterPower AverageHeaterPower(Watt averageUseableEngineWasteHeat)
{
// Set Engine Waste Heat
//SSMInputs.AuxHeater.EngineWasteHeatkW = AverageUseableEngineWasteHeatKW;
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)
// If Not FuelFiredHeaterInsufficientWarned AndAlso FuelFiredWarning Then
......@@ -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)
// End If
return fba;
return retVal;
}
}
......
......@@ -12,10 +12,19 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HV
Watt ElectricalWAdjusted { 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
Watt TotalW(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
Watt ElectricalWAdjusted { 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
{
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
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
3 , 2 , 30 , 0.0826 , h , 2.50 , 2.00 , 2.10 , 2.10 , 2.22 , 0.93 , 0.93 , 0.93 , 0.80
4 , 8 , 20 , 0.1661 , h , 2.98 , 2.70 , 2.80 , 2.82 , 2.94 , 0.93 , 0.93 , 0.93 , 0.80
5 , 8 , 155 , 0.0826 , h , 2.98 , 2.70 , 2.80 , 2.82 , 2.94 , 0.93 , 0.93 , 0.93 , 0.80
6 , 14 , 30 , 0.0826 , h , 3.38 , 3.24 , 3.34 , 3.36 , 3.50 , 0.93 , 0.93 , 0.93 , 0.80
7 , 14 , 175 , 0.1243 , h , 3.38 , 3.24 , 3.34 , 3.36 , 3.50 , 0.93 , 0.93 , 0.93 , 0.80
8 , 20.5 , 30 , 0.1243 , c , 3.80 , 3.62 , 3.74 , 3.74 , 3.88 , - , - , , -
9 , 20.5 , 200 , 0.1243 , c , 3.80 , 3.62 , 3.74 , 3.74 , 3.88 , - , - , , -
10 , 26 , 150 , 0.0826 , c , 2.82 , 3.12 , 3.22 , 3.24 , 3.36 , - , - , , -
11 , 33 , 150 , 0.0427 , c , 2.14 , 2.50 , 2.60 , 2.62 , 2.74 , - , - , , -
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
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
4 , 8 , 20 , 0.1661 , h , 2.98 , 2.70 , 2.80 , 2.82 , 2.94 , 0.93 , 0.93 , 0.93 , 0.80
5 , 8 , 155 , 0.0826 , h , 2.98 , 2.70 , 2.80 , 2.82 , 2.94 , 0.93 , 0.93 , 0.93 , 0.80
6 , 14 , 30 , 0.0826 , h , 3.38 , 3.24 , 3.34 , 3.36 , 3.50 , 0.93 , 0.93 , 0.93 , 0.80
7 , 14 , 175 , 0.1243 , h , 3.38 , 3.24 , 3.34 , 3.36 , 3.50 , 0.93 , 0.93 , 0.93 , 0.80
8 , 20.5 , 30 , 0.1243 , c , 3.80 , 3.62 , 3.74 , 3.74 , 3.88 , - , - , , -
9 , 20.5 , 200 , 0.1243 , c , 3.80 , 3.62 , 3.74 , 3.74 , 3.88 , - , - , , -
10 , 26 , 150 , 0.0826 , c , 2.82 , 3.12 , 3.22 , 3.24 , 3.36 , - , - , , -
11 , 33 , 150 , 0.0427 , c , 2.14 , 2.50 , 2.60 , 2.62 , 2.74 , - , - , , -
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
3 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00
4 , 5.00 , 5.00 , 5.00 , 5.00 , 4.00
......
Configuration , Heavy Urban , Urban , Suburban , Interurban , Coach
1 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00
2 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00
3 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00
4 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00
1 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
2 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
3 , 0.25 , 0.25 , 0.25 , 0.35 , 0.55
4 , 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
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.
Finish editing this message first!
Please register or to comment