Skip to content

Commit

Permalink
Extend unit tests for density basis
Browse files Browse the repository at this point in the history
  • Loading branch information
mjwitte committed Feb 7, 2025
1 parent ccda26b commit b7853db
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 108 deletions.
210 changes: 108 additions & 102 deletions tst/EnergyPlus/unit/HVACManager.unit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,21 @@ TEST_F(EnergyPlusFixture, InfiltrationObjectLevelReport)
" 0, !- Velocity Term Coefficient",
" 0; !- Velocity Squared Term Coefficient",

"ZoneInfiltration:DesignFlowRate,",
" Zone2 Infil, !- Name",
" Zone2, !- Zone or ZoneList Name",
" AlwaysOn, !- Schedule Name",
" flow/zone, !- Design Flow Rate Calculation Method",
" 0.07, !- Design Flow Rate{ m3 / s }",
" , !- Flow per Zone Floor Area{ m3 / s - m2 }",
" , !- Flow per Exterior Surface Area{ m3 / s - m2 }",
" , !- Air Changes per Hour{ 1 / hr }",
" 1, !- Constant Term Coefficient",
" 0, !- Temperature Term Coefficient",
" 0, !- Velocity Term Coefficient",
" 0, !- Velocity Squared Term Coefficient",
" Standard; !- Density Basis",

"Schedule:Constant,",
"AlwaysOn,",
"Fraction,",
Expand All @@ -238,29 +253,31 @@ TEST_F(EnergyPlusFixture, InfiltrationObjectLevelReport)
AllocateHeatBalArrays(*state);
GetSimpleAirModelInputs(*state, ErrorsFound);

EXPECT_EQ(state->dataHeatBal->TotInfiltration, 4); // one per zone
EXPECT_EQ(state->dataHeatBal->TotInfiltration, 5); // one per zone

state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(state->dataGlobal->NumOfZones);
state->dataZoneTempPredictorCorrector->spaceHeatBalance.allocate(state->dataGlobal->NumOfZones);
state->dataZoneEquip->ZoneEquipConfig.allocate(state->dataGlobal->NumOfZones);

state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 21.0;
state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MAT = 22.0;
state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).MAT = 23.0;
state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).MAT = 24.0;
state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001;
state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.001;
state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRat = 0.001;
state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).airHumRat = 0.001;

state->dataZoneTempPredictorCorrector->spaceHeatBalance(1).MAT = 21.0;
state->dataZoneTempPredictorCorrector->spaceHeatBalance(2).MAT = 22.0;
state->dataZoneTempPredictorCorrector->spaceHeatBalance(3).MAT = 23.0;
state->dataZoneTempPredictorCorrector->spaceHeatBalance(4).MAT = 24.0;
state->dataZoneTempPredictorCorrector->spaceHeatBalance(1).airHumRat = 0.001;
state->dataZoneTempPredictorCorrector->spaceHeatBalance(2).airHumRat = 0.001;
state->dataZoneTempPredictorCorrector->spaceHeatBalance(3).airHumRat = 0.001;
state->dataZoneTempPredictorCorrector->spaceHeatBalance(4).airHumRat = 0.001;
auto &zoneHB = state->dataZoneTempPredictorCorrector->zoneHeatBalance;
zoneHB(1).MAT = 21.0;
zoneHB(2).MAT = 22.0;
zoneHB(3).MAT = 23.0;
zoneHB(4).MAT = 24.0;
zoneHB(1).airHumRat = 0.001;
zoneHB(2).airHumRat = 0.001;
zoneHB(3).airHumRat = 0.001;
zoneHB(4).airHumRat = 0.001;

auto &spaceHB = state->dataZoneTempPredictorCorrector->spaceHeatBalance;
spaceHB(1).MAT = 21.0;
spaceHB(2).MAT = 22.0;
spaceHB(3).MAT = 23.0;
spaceHB(4).MAT = 24.0;
spaceHB(1).airHumRat = 0.001;
spaceHB(2).airHumRat = 0.001;
spaceHB(3).airHumRat = 0.001;
spaceHB(4).airHumRat = 0.001;

state->dataHeatBal->AirFlowFlag = true;
state->dataEnvrn->OutBaroPress = 101325.0;
Expand All @@ -283,132 +300,121 @@ TEST_F(EnergyPlusFixture, InfiltrationObjectLevelReport)

CalcAirFlowSimple(*state, 2);

EXPECT_NEAR(state->dataHeatBal->Infiltration(1).MCpI_temp, 0.07 * 1.2242 * 1005.77, 0.01); // zone level reporting matches object level
EXPECT_NEAR(state->dataHeatBal->Infiltration(2).MCpI_temp, 0.07 * 1.2242 * 1005.77, 0.01); // zone level reporting matches object level
EXPECT_NEAR(state->dataHeatBal->Infiltration(3).MCpI_temp, 22.486, 0.01); // zone level reporting matches object level
EXPECT_NEAR(state->dataHeatBal->Infiltration(4).MCpI_temp, 24.459, 0.01); // zone level reporting matches object level
auto &infiltration(state->dataHeatBal->Infiltration);
EXPECT_NEAR(infiltration(1).MCpI_temp, 0.07 * 1.2242 * 1005.77, 0.01); // zone level reporting matches object level
EXPECT_NEAR(infiltration(2).MCpI_temp, 0.07 * 1.2242 * 1005.77, 0.01); // zone level reporting matches object level
EXPECT_NEAR(infiltration(3).MCpI_temp, 0.07 * state->dataEnvrn->StdRhoAir * 1005.77,
0.01); // zone level reporting matches object level
EXPECT_NEAR(infiltration(4).MCpI_temp, 22.486, 0.01); // zone level reporting matches object level
EXPECT_NEAR(infiltration(5).MCpI_temp, 24.459, 0.01); // zone level reporting matches object level

EXPECT_EQ(state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MCPI,
state->dataHeatBal->Infiltration(1).MCpI_temp); // zone level reporting matches object level
infiltration(1).MCpI_temp); // zone level reporting matches object level
Real64 zone2MCPIExpected = infiltration(2).MCpI_temp + infiltration(3).MCpI_temp;
EXPECT_EQ(state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MCPI,
state->dataHeatBal->Infiltration(2).MCpI_temp); // zone level reporting matches object level
zone2MCPIExpected); // zone level reporting matches object level
EXPECT_EQ(state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).MCPI,
state->dataHeatBal->Infiltration(3).MCpI_temp); // zone level reporting matches object level
infiltration(4).MCpI_temp); // zone level reporting matches object level
EXPECT_EQ(state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).MCPI,
state->dataHeatBal->Infiltration(4).MCpI_temp); // zone level reporting matches object level
infiltration(5).MCpI_temp); // zone level reporting matches object level

ReportAirHeatBalance(*state);

auto &ZnAirRpt(state->dataHeatBal->ZnAirRpt);
EXPECT_NEAR(ZnAirRpt(1).InfilHeatLoss, state->dataHeatBal->Infiltration(1).InfilHeatLoss, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilHeatLoss, state->dataHeatBal->Infiltration(2).InfilHeatLoss, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilHeatLoss, state->dataHeatBal->Infiltration(3).InfilHeatLoss, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilHeatLoss, state->dataHeatBal->Infiltration(4).InfilHeatLoss, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilHeatGain, state->dataHeatBal->Infiltration(1).InfilHeatGain, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilHeatGain, state->dataHeatBal->Infiltration(2).InfilHeatGain, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilHeatGain, state->dataHeatBal->Infiltration(3).InfilHeatGain, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilHeatGain, state->dataHeatBal->Infiltration(4).InfilHeatGain, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilTotalLoss,
state->dataHeatBal->Infiltration(1).InfilTotalLoss,
EXPECT_NEAR(ZnAirRpt(1).InfilHeatLoss, infiltration(1).InfilHeatLoss, 0.000001); // zone level reporting matches object level
Real64 expectedValue = infiltration(2).InfilHeatLoss + infiltration(3).InfilHeatLoss;
EXPECT_NEAR(ZnAirRpt(2).InfilHeatLoss, expectedValue, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilHeatLoss, infiltration(4).InfilHeatLoss, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilHeatLoss, infiltration(5).InfilHeatLoss, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilHeatGain, infiltration(1).InfilHeatGain, 0.000001); // zone level reporting matches object level
expectedValue = infiltration(2).InfilHeatGain + infiltration(3).InfilHeatGain;
EXPECT_NEAR(ZnAirRpt(2).InfilHeatGain, expectedValue, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilHeatGain, infiltration(4).InfilHeatGain, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilHeatGain, infiltration(5).InfilHeatGain, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilTotalLoss, infiltration(1).InfilTotalLoss,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilTotalLoss,
state->dataHeatBal->Infiltration(2).InfilTotalLoss,
expectedValue = infiltration(2).InfilTotalLoss + infiltration(3).InfilTotalLoss;
EXPECT_NEAR(ZnAirRpt(2).InfilTotalLoss, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilTotalLoss,
state->dataHeatBal->Infiltration(3).InfilTotalLoss,
EXPECT_NEAR(ZnAirRpt(3).InfilTotalLoss, infiltration(4).InfilTotalLoss,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilTotalLoss,
state->dataHeatBal->Infiltration(4).InfilTotalLoss,
EXPECT_NEAR(ZnAirRpt(4).InfilTotalLoss, infiltration(5).InfilTotalLoss,
0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilTotalGain,
state->dataHeatBal->Infiltration(1).InfilTotalGain,
EXPECT_NEAR(ZnAirRpt(1).InfilTotalGain, infiltration(1).InfilTotalGain,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilTotalGain,
state->dataHeatBal->Infiltration(2).InfilTotalGain,
expectedValue = infiltration(2).InfilTotalGain + infiltration(3).InfilTotalGain;
EXPECT_NEAR(ZnAirRpt(2).InfilTotalGain, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilTotalGain,
state->dataHeatBal->Infiltration(3).InfilTotalGain,
EXPECT_NEAR(ZnAirRpt(3).InfilTotalGain, infiltration(4).InfilTotalGain,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilTotalGain,
state->dataHeatBal->Infiltration(4).InfilTotalGain,
EXPECT_NEAR(ZnAirRpt(4).InfilTotalGain, infiltration(5).InfilTotalGain,
0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilMass, state->dataHeatBal->Infiltration(1).InfilMass, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilMass, state->dataHeatBal->Infiltration(2).InfilMass, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilMass, state->dataHeatBal->Infiltration(3).InfilMass, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilMass, state->dataHeatBal->Infiltration(4).InfilMass, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilMdot, state->dataHeatBal->Infiltration(1).InfilMdot, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilMdot, state->dataHeatBal->Infiltration(2).InfilMdot, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilMdot, state->dataHeatBal->Infiltration(3).InfilMdot, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilMdot, state->dataHeatBal->Infiltration(4).InfilMdot, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilVolumeCurDensity,
state->dataHeatBal->Infiltration(1).InfilVolumeCurDensity,
EXPECT_NEAR(ZnAirRpt(1).InfilMass, infiltration(1).InfilMass, 0.000001); // zone level reporting matches object level
expectedValue = infiltration(2).InfilMass + infiltration(3).InfilMass;
EXPECT_NEAR(ZnAirRpt(2).InfilMass, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilMass, infiltration(4).InfilMass, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilMass, infiltration(5).InfilMass, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilMdot, infiltration(1).InfilMdot, 0.000001); // zone level reporting matches object level
expectedValue = infiltration(2).InfilMdot + infiltration(3).InfilMdot;
EXPECT_NEAR(ZnAirRpt(2).InfilMdot, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilMdot, infiltration(4).InfilMdot, 0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilMdot, infiltration(5).InfilMdot, 0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilVolumeCurDensity, infiltration(1).InfilVolumeCurDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilVolumeCurDensity,
state->dataHeatBal->Infiltration(2).InfilVolumeCurDensity,
expectedValue = infiltration(2).InfilVolumeCurDensity + infiltration(3).InfilVolumeCurDensity;
EXPECT_NEAR(ZnAirRpt(2).InfilVolumeCurDensity, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilVolumeCurDensity,
state->dataHeatBal->Infiltration(3).InfilVolumeCurDensity,
EXPECT_NEAR(ZnAirRpt(3).InfilVolumeCurDensity, infiltration(4).InfilVolumeCurDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilVolumeCurDensity,
state->dataHeatBal->Infiltration(4).InfilVolumeCurDensity,
EXPECT_NEAR(ZnAirRpt(4).InfilVolumeCurDensity, infiltration(5).InfilVolumeCurDensity,
0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilAirChangeRate,
state->dataHeatBal->Infiltration(1).InfilAirChangeRate,
EXPECT_NEAR(ZnAirRpt(1).InfilAirChangeRate, infiltration(1).InfilAirChangeRate,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilAirChangeRate,
state->dataHeatBal->Infiltration(2).InfilAirChangeRate,
expectedValue = infiltration(2).InfilAirChangeRate + infiltration(3).InfilAirChangeRate;
EXPECT_NEAR(ZnAirRpt(2).InfilAirChangeRate, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilAirChangeRate,
state->dataHeatBal->Infiltration(3).InfilAirChangeRate,
EXPECT_NEAR(ZnAirRpt(3).InfilAirChangeRate, infiltration(4).InfilAirChangeRate,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilAirChangeRate,
state->dataHeatBal->Infiltration(4).InfilAirChangeRate,
EXPECT_NEAR(ZnAirRpt(4).InfilAirChangeRate, infiltration(5).InfilAirChangeRate,
0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilVdotCurDensity,
state->dataHeatBal->Infiltration(1).InfilVdotCurDensity,
EXPECT_NEAR(ZnAirRpt(1).InfilVdotCurDensity, infiltration(1).InfilVdotCurDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilVdotCurDensity,
state->dataHeatBal->Infiltration(2).InfilVdotCurDensity,
expectedValue = infiltration(2).InfilVdotCurDensity + infiltration(3).InfilVdotCurDensity;
EXPECT_NEAR(ZnAirRpt(2).InfilVdotCurDensity, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilVdotCurDensity,
state->dataHeatBal->Infiltration(3).InfilVdotCurDensity,
EXPECT_NEAR(ZnAirRpt(3).InfilVdotCurDensity, infiltration(4).InfilVdotCurDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilVdotCurDensity,
state->dataHeatBal->Infiltration(4).InfilVdotCurDensity,
EXPECT_NEAR(ZnAirRpt(4).InfilVdotCurDensity, infiltration(5).InfilVdotCurDensity,
0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilVolumeStdDensity,
state->dataHeatBal->Infiltration(1).InfilVolumeStdDensity,
EXPECT_NEAR(ZnAirRpt(1).InfilVolumeStdDensity, infiltration(1).InfilVolumeStdDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilVolumeStdDensity,
state->dataHeatBal->Infiltration(2).InfilVolumeStdDensity,
expectedValue = infiltration(2).InfilVolumeStdDensity + infiltration(3).InfilVolumeStdDensity;
EXPECT_NEAR(ZnAirRpt(2).InfilVolumeStdDensity, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilVolumeStdDensity,
state->dataHeatBal->Infiltration(3).InfilVolumeStdDensity,
EXPECT_NEAR(ZnAirRpt(3).InfilVolumeStdDensity, infiltration(4).InfilVolumeStdDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilVolumeStdDensity,
state->dataHeatBal->Infiltration(4).InfilVolumeStdDensity,
EXPECT_NEAR(ZnAirRpt(4).InfilVolumeStdDensity, infiltration(5).InfilVolumeStdDensity,
0.000001); // zone level reporting matches object level

EXPECT_NEAR(ZnAirRpt(1).InfilVdotStdDensity,
state->dataHeatBal->Infiltration(1).InfilVdotStdDensity,
EXPECT_NEAR(ZnAirRpt(1).InfilVdotStdDensity, infiltration(1).InfilVdotStdDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(2).InfilVdotStdDensity,
state->dataHeatBal->Infiltration(2).InfilVdotStdDensity,
expectedValue = infiltration(2).InfilVdotStdDensity + infiltration(3).InfilVdotStdDensity;
EXPECT_NEAR(ZnAirRpt(2).InfilVdotStdDensity, expectedValue,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(3).InfilVdotStdDensity,
state->dataHeatBal->Infiltration(3).InfilVdotStdDensity,
EXPECT_NEAR(ZnAirRpt(3).InfilVdotStdDensity, infiltration(4).InfilVdotStdDensity,
0.000001); // zone level reporting matches object level
EXPECT_NEAR(ZnAirRpt(4).InfilVdotStdDensity,
state->dataHeatBal->Infiltration(4).InfilVdotStdDensity,
EXPECT_NEAR(ZnAirRpt(4).InfilVdotStdDensity, infiltration(5).InfilVdotStdDensity,
0.000001); // zone level reporting matches object level
}

Expand Down
Loading

3 comments on commit b7853db

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4422InfilVentDensityBasis (mjwitte) - x86_64-Linux-Ubuntu-24.04-gcc-13.3: OK (2959 of 2959 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4422InfilVentDensityBasis (mjwitte) - x86_64-Linux-Ubuntu-24.04-gcc-13.3-UnitTestsCoverage-RelWithDebInfo: OK (2141 of 2141 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

@nrel-bot-2
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4422InfilVentDensityBasis (mjwitte) - x86_64-Linux-Ubuntu-24.04-gcc-13.3-IntegrationCoverage-RelWithDebInfo: OK (802 of 802 tests passed, 0 test warnings)

Build Badge Test Badge Coverage Badge

Please sign in to comment.