diff --git a/tst/EnergyPlus/unit/SystemReports.unit.cc b/tst/EnergyPlus/unit/SystemReports.unit.cc index 69fd85023c2..86bd625b2f3 100644 --- a/tst/EnergyPlus/unit/SystemReports.unit.cc +++ b/tst/EnergyPlus/unit/SystemReports.unit.cc @@ -58,12 +58,22 @@ #include #include #include +#include +#include #include #include +#include #include +#include +#include +#include #include #include +#include +#include #include +#include +#include #include #include @@ -228,72 +238,143 @@ TEST_F(EnergyPlusFixture, ReportMaxVentilationLoads_ZoneEquip) HeatBalanceManager::AllocateHeatBalArrays(*state); SystemReports::AllocateAndSetUpVentReports(*state); ZoneTempPredictorCorrector::InitZoneAirSetPoints(*state); - //state->dataSize->NumOARequirements = 2; - //state->dataSize->OARequirements.allocate(state->dataSize->NumOARequirements); - - state->dataLoopNodes->Node.allocate(20); - - // Set up 2 controlled zones with just enough info for the ventilation report test + // Set up OA requirements for one zone + state->dataSize->NumOARequirements = 1; + state->dataSize->OARequirements.allocate(state->dataSize->NumOARequirements); + state->dataSize->OARequirements(1).OAFlowMethod = DataSizing::OAFlowSum; + Real64 expectedVoz = 0.0; + state->dataSize->OARequirements(1).OAFlowPerZone = 20; + expectedVoz += state->dataSize->OARequirements(1).OAFlowPerZone; + state->dataSize->OARequirements(1).OAFlowPerArea = 0.5; + state->dataHeatBal->Zone(1).FloorArea = 1000.0; + expectedVoz += state->dataSize->OARequirements(1).OAFlowPerArea * state->dataHeatBal->Zone(1).FloorArea; + state->dataSize->OARequirements(1).OAFlowPerPerson = 0.1; + state->dataHeatBal->ZoneIntGain.allocate(state->dataGlobal->NumOfZones); + state->dataHeatBal->ZoneIntGain(1).NOFOCC = 100.0; + expectedVoz += state->dataSize->OARequirements(1).OAFlowPerPerson * state->dataHeatBal->ZoneIntGain(1).NOFOCC; + state->dataHeatBal->Zone(1).Multiplier = 2.0; + state->dataHeatBal->Zone(1).ListMultiplier = 10.0; + expectedVoz *= state->dataHeatBal->Zone(1).Multiplier; + expectedVoz *= state->dataHeatBal->Zone(1).ListMultiplier; + + // Set up controlled zone equipment with just enough info for the ventilation report test state->dataZoneEquip->ZoneEquipConfig(1).IsControlled = true; state->dataZoneEquip->ZoneEquipConfig(1).ActualZoneNum = 1; - state->dataZoneEquip->ZoneEquipConfig(1).ZoneDesignSpecOAIndex = 0; + state->dataZoneEquip->ZoneEquipConfig(1).ZoneDesignSpecOAIndex = 1; state->dataHeatBal->Zone(1).Volume = 10.0; state->dataZoneEquip->ZoneEquipConfig(1).EquipListIndex = 1; - int NumEquip1 = 1; - state->dataZoneEquip->ZoneEquipList(1).NumOfEquipTypes = 1; + + int NumEquip1 = 9; + state->dataZoneEquip->ZoneEquipList(1).NumOfEquipTypes = NumEquip1; state->dataZoneEquip->ZoneEquipList(1).EquipType_Num.allocate(NumEquip1); - state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(1) = DataZoneEquipment::WindowAC_Num; state->dataZoneEquip->ZoneEquipList(1).EquipIndex.allocate(NumEquip1); - state->dataZoneEquip->ZoneEquipList(1).EquipIndex(1) = 1; + + // 1: WindowAC + int equipNum = 1; + int nodeNumOA = 1; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::WindowAC_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; state->dataWindowAC->GetWindowACInputFlag = false; state->dataWindowAC->WindAC.allocate(1); - state->dataWindowAC->WindAC(1).OutsideAirNode = 1; - state->dataLoopNodes->Node(1).MassFlowRate = 1.0; - + state->dataWindowAC->WindAC(1).OutsideAirNode = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 0.1; + + // 2: VRF + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::VRFTerminalUnit_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataHVACVarRefFlow->GetVRFInputFlag = false; + state->dataHVACVarRefFlow->NumVRFTU = 1; + state->dataHVACVarRefFlow->VRFTU.allocate(1); + state->dataHVACVarRefFlow->VRFTU(1).VRFTUOAMixerOANodeNum = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 2.0; + + // 3: PTAC + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::PkgTermACAirToAir_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataPTHP->GetPTUnitInputFlag = false; + state->dataPTHP->NumPTUs = 1; + state->dataPTHP->PTUnit.allocate(1); + state->dataPTHP->PTUnit(1).OutsideAirNode = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 30.0; + + // 4: FanCoil + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::FanCoil4Pipe_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataFanCoilUnits->GetFanCoilInputFlag = false; + state->dataFanCoilUnits->NumFanCoils = 1; + state->dataFanCoilUnits->FanCoil.allocate(1); + state->dataFanCoilUnits->FanCoil(1).OutsideAirNode = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 400.0; + + // 5: Unit Ventilator + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::UnitVentilator_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataUnitVentilators->GetUnitVentilatorInputFlag = false; + state->dataUnitVentilators->NumOfUnitVents = 1; + state->dataUnitVentilators->UnitVent.allocate(1); + state->dataUnitVentilators->UnitVent(1).OutsideAirNode = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 5000.0; + + // 6: Purchased Air (Ideal Loads) + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::PurchasedAir_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataPurchasedAirMgr->GetPurchAirInputFlag = false; + state->dataPurchasedAirMgr->NumPurchAir = 1; + state->dataPurchasedAirMgr->PurchAir.allocate(1); + state->dataPurchasedAirMgr->PurchAir(1).OutdoorAirMassFlowRate = 60000.0; + + // 7: ERV + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::ERVStandAlone_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataHVACStandAloneERV->GetERVInputFlag = false; + state->dataHVACStandAloneERV->NumStandAloneERVs = 1; + state->dataHVACStandAloneERV->StandAloneERV.allocate(1); + state->dataHVACStandAloneERV->StandAloneERV(1).SupplyAirInletNode = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 700000.0; + + // 8: Outdoor air unit + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::OutdoorAirUnit_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag = false; + state->dataOutdoorAirUnit->NumOfOAUnits = 1; + state->dataOutdoorAirUnit->OutAirUnit.allocate(1); + state->dataOutdoorAirUnit->OutAirUnit(1).OutsideAirNode = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 8000000.0; + + // 9: Zone Hybrid Unitary + ++equipNum; + ++nodeNumOA; + state->dataZoneEquip->ZoneEquipList(1).EquipType_Num(equipNum) = DataZoneEquipment::ZoneHybridEvaporativeCooler_Num; + state->dataZoneEquip->ZoneEquipList(1).EquipIndex(equipNum) = 1; + state->dataHybridUnitaryAC->GetInputZoneHybridEvap = false; + state->dataHybridUnitaryAC->NumZoneHybridEvap = 1; + state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner.allocate(1); + state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(1).SecondaryInletNode = nodeNumOA; + state->dataLoopNodes->Node(nodeNumOA).MassFlowRate = 90000000.0; + + // Call reporting function state->dataSysRpts->VentReportStructureCreated = true; state->dataSysRpts->VentLoadsReportEnabled = true; SystemReports::ReportMaxVentilationLoads(*state); - EXPECT_NEAR(state->dataSysRpts->ZoneTargetVentilationFlowVoz(1), 0.0, 0.001); - EXPECT_NEAR(state->dataSysRpts->ZoneOAMassFlow(1), 1.0, 0.001); - - //bool CompLoadFlag(false); - //int AirLoopNum(1); - //std::string CompType1; - //std::string CompType2; - //Real64 CompLoad(150.0); - //Real64 CompEnergyUse(100.0); - - //state->dataAirSystemsData->PrimaryAirSystems(1).NumBranches = 1; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch.allocate(1); - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).TotalComponents = 2; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).NodeNumOut = 1; - - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp.allocate(2); - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).Name = "Main Gas Humidifier"; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).TypeOf = "HUMIDIFIER:STEAM:GAS"; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).NodeNumIn = 1; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).NodeNumOut = 1; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).NumMeteredVars = 1; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).MeteredVar.allocate(1); - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).MeteredVar(1).EndUse_CompMode = SystemReports::iEndUseType::CoolingOnly; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).MeteredVar(1).CurMeterReading = 100.0; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).MeteredVar(1).ResourceType = AssignResourceTypeNum("NaturalGas"); - - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).Name = "Main Gas Heating Coil"; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).TypeOf = "COIL:HEATING:DESUPERHEATER"; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).NodeNumIn = 2; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).NodeNumOut = 2; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).NumMeteredVars = 1; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).MeteredVar.allocate(1); - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).MeteredVar(1).EndUse_CompMode = SystemReports::iEndUseType::CoolingOnly; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).MeteredVar(1).CurMeterReading = 100.0; - //state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(2).MeteredVar(1).ResourceType = AssignResourceTypeNum("NaturalGas"); - - //state->dataLoopNodes->Node(1).MassFlowRate = 1.0; - //state->dataLoopNodes->Node(2).MassFlowRate = 1.0; + EXPECT_NEAR(state->dataSysRpts->ZoneTargetVentilationFlowVoz(1), expectedVoz, 0.001); + EXPECT_NEAR(state->dataSysRpts->ZoneOAMassFlow(1), 98765432.1, 0.001); } } // namespace EnergyPlus