Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Surface Outside Face Convection Heat Gain Rate was fixed when rain flag is true & to be altered for OSCM as well #7504

Merged
merged 27 commits into from
Sep 21, 2019
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
53df3e9
Fix HeatBalanceSurfaceManager.cc to separate cases IsRain = true or f…
dareumnam Sep 12, 2019
70ec219
add unit test version 1
dareumnam Sep 13, 2019
d1187b9
Merge remote-tracking branch 'upstream/develop' into Issue6939
dareumnam Sep 13, 2019
e9b10cd
changed the code using inline function
dareumnam Sep 16, 2019
32bcb51
Merge remote-tracking branch 'upstream/develop' into Issue6939
dareumnam Sep 16, 2019
1a22e53
update the code and the unit test
dareumnam Sep 16, 2019
a69eb9e
Clear a line
dareumnam Sep 16, 2019
68e9661
Merge remote-tracking branch 'upstream/develop' into Issue6939
dareumnam Sep 16, 2019
9b0ce92
Clean up repeated code lines
dareumnam Sep 16, 2019
4a3d59d
Fix the mistake while reducing the repeated code lines
dareumnam Sep 16, 2019
ecdca54
Return to original code for QdotConvOutRep PER AREA
dareumnam Sep 17, 2019
61010bf
Test for CI testing without my unit test
dareumnam Sep 18, 2019
c77ee22
Merge branch 'Issue6939' of https://github.com/dareumnam/EnergyPlus i…
dareumnam Sep 18, 2019
b31cf1f
Test for CI testing without the unit test & replacement of repeated c…
dareumnam Sep 18, 2019
d8ae313
The unit test was fixed to get rid of the error
dareumnam Sep 18, 2019
46338d0
clean up lines
dareumnam Sep 18, 2019
13d4f7d
clean up
dareumnam Sep 18, 2019
9e0bd6c
Remove inline function to get rid of lnk2019 unresolved external symb…
dareumnam Sep 18, 2019
c64e448
One more commit to make all 7 CI testing run
dareumnam Sep 19, 2019
14ac948
Merge remote-tracking branch 'upstream/develop' into Issue6939
dareumnam Sep 19, 2019
65cf866
Merge remote-tracking branch 'remotes/origin/develop' into Issue6939
mjwitte Sep 20, 2019
5e08856
Merge remote-tracking branch 'upstream/develop' into Issue6939
dareumnam Sep 20, 2019
ba26532
Fixed the code and the unit test that QdotConvOutRep can be altered f…
dareumnam Sep 20, 2019
6f76eab
Unit test was fixed to use GetQdotConvOutRepPerArea function directly
dareumnam Sep 20, 2019
55495ab
Merge branch 'Issue6939' of https://github.com/dareumnam/EnergyPlus i…
mjwitte Sep 20, 2019
cfcfed1
6939 make new function argument const
mjwitte Sep 20, 2019
69827fd
Fix the variable name error for OSCMPtr
dareumnam Sep 20, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions src/EnergyPlus/HeatBalanceSurfaceManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5707,17 +5707,30 @@ namespace HeatBalanceSurfaceManager {
}

// fill in reporting values for outside face
QdotConvOutRep(SurfNum) = -Surface(SurfNum).Area * HcExtSurf(SurfNum) * (TH(1, 1, SurfNum) - Surface(SurfNum).OutDryBulbTemp);

QdotConvOutRepPerArea(SurfNum) = GetQdotConvOutRepPerArea(SurfNum);

QdotConvOutRep(SurfNum) = QdotConvOutRepPerArea(SurfNum) * Surface(SurfNum).Area;

if (Surface(SurfNum).OSCMPtr > 0) { // Optr is set above in this case, use OSCM boundary data
QdotConvOutRepPerArea(SurfNum) = -OSCM(OPtr).HConv * (TH(1, 1, SurfNum) - OSCM(OPtr).TConv);
} else {
QdotConvOutRepPerArea(SurfNum) = -HcExtSurf(SurfNum) * (TH(1, 1, SurfNum) - Surface(SurfNum).OutDryBulbTemp);
}
QConvOutReport(SurfNum) = QdotConvOutRep(SurfNum) * TimeStepZoneSec;

} // ...end of DO loop over all surface (actually heat transfer surfaces)
}

Real64 GetQdotConvOutRepPerArea(int const SurfNum)
{
int OPtr = Surface(SurfNum).OSCPtr;
Copy link
Contributor

Choose a reason for hiding this comment

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

@dareumnam Some integration tests are failing. Here's the problem - this should be .OSCMPtr.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

@mjwitte Oops, thank you for letting me know. I'll fix it and push the branch again.

if (Surface(SurfNum).OSCMPtr > 0) { // Optr is set above in this case, use OSCM boundary data
return -OSCM(OPtr).HConv * (TH(1, 1, SurfNum) - OSCM(OPtr).TConv);
} else {
if (IsRain) {
return -HcExtSurf(SurfNum) * (TH(1, 1, SurfNum) - Surface(SurfNum).OutWetBulbTemp);
} else {
return -HcExtSurf(SurfNum) * (TH(1, 1, SurfNum) - Surface(SurfNum).OutDryBulbTemp);
}
}
}

void CalcHeatBalanceInsideSurf(Optional_int_const ZoneToResimulate) // if passed in, then only calculate surfaces that have this zone
{
// Pass correct list of surfaces to CalcHeatBalanceInsideSurf2
Expand Down
2 changes: 2 additions & 0 deletions src/EnergyPlus/HeatBalanceSurfaceManager.hh
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ namespace HeatBalanceSurfaceManager {

void CalcHeatBalanceOutsideSurf(Optional_int_const ZoneToResimulate = _); // if passed in, then only calculate surfaces that have this zone

Real64 GetQdotConvOutRepPerArea(int const SurfNum);

void CalcHeatBalanceInsideSurf(Optional_int_const ZoneToResimulate = _); // if passed in, then only calculate surfaces that have this zone

void CalcHeatBalanceInsideSurf2(const std::vector<int> &HTSurfs, // Heat transfer surfaces to simulate (opaque and windows)
Expand Down
61 changes: 43 additions & 18 deletions tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2504,50 +2504,75 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfTempCalcHeatBalanceA

TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestReportIntMovInsInsideSurfTemp)
{

Real64 ExpectedResult1;
Real64 ExpectedResult2;
Real64 ExpectedResult3;

DataSurfaces::clear_state();
DataHeatBalSurface::clear_state();

DataSurfaces::TotSurfaces = 3;
DataSurfaces::Surface.allocate(DataSurfaces::TotSurfaces);
DataHeatBalSurface::TempSurfIn.allocate(DataSurfaces::TotSurfaces);
DataHeatBalSurface::TempSurfInTmp.allocate(DataSurfaces::TotSurfaces);
DataHeatBalSurface::TempSurfInMovInsRep.allocate(DataSurfaces::TotSurfaces);

// Test 1 Data: Surface does NOT have movable insulation
DataSurfaces::Surface(1).MaterialMovInsulInt = 0; // No material means no movable insulation
DataSurfaces::Surface(1).SchedMovInsulInt = 0; // Schedule index of zero returns zero value (not scheduled)
DataSurfaces::Surface(1).MaterialMovInsulInt = 0; // No material means no movable insulation
DataSurfaces::Surface(1).SchedMovInsulInt = 0; // Schedule index of zero returns zero value (not scheduled)
DataHeatBalSurface::TempSurfIn(1) = 23.0;
DataHeatBalSurface::TempSurfInTmp(1) = 12.3;
DataHeatBalSurface::TempSurfInMovInsRep(1) = 1.23;
ExpectedResult1 = 23.0; // TempSurfInMovInsRep should be set to TempSurfIn
ExpectedResult1 = 23.0; // TempSurfInMovInsRep should be set to TempSurfIn

// Test 2 Data: Surface does have movable insulation but it is scheduled OFF
DataSurfaces::Surface(2).MaterialMovInsulInt = 1; // Material index present means there is movable insulation
DataSurfaces::Surface(2).SchedMovInsulInt = 0; // Schedule index of zero returns zero value (not scheduled)
DataSurfaces::Surface(2).MaterialMovInsulInt = 1; // Material index present means there is movable insulation
DataSurfaces::Surface(2).SchedMovInsulInt = 0; // Schedule index of zero returns zero value (not scheduled)
DataHeatBalSurface::TempSurfIn(2) = 123.0;
DataHeatBalSurface::TempSurfInTmp(2) = 12.3;
DataHeatBalSurface::TempSurfInMovInsRep(2) = 1.23;
ExpectedResult2 = 123.0; // TempSurfInMovInsRep should be set to TempSurfIn
ExpectedResult2 = 123.0; // TempSurfInMovInsRep should be set to TempSurfIn

// Test 3 Data: Surface does have movable insulation and it is scheduled ON
DataSurfaces::Surface(3).MaterialMovInsulInt = 1; // Material index present means there is movable insulation
DataSurfaces::Surface(3).SchedMovInsulInt = -1; // Schedule index of -1 returns 1.0 value
DataSurfaces::Surface(3).MaterialMovInsulInt = 1; // Material index present means there is movable insulation
DataSurfaces::Surface(3).SchedMovInsulInt = -1; // Schedule index of -1 returns 1.0 value
DataHeatBalSurface::TempSurfIn(3) = 12.3;
DataHeatBalSurface::TempSurfInTmp(3) = 1.23;
DataHeatBalSurface::TempSurfInMovInsRep(3) = -9999.9;
ExpectedResult3 = 1.23; // TempSurfInMovInsRep should be set to TempSurfInTmp
ExpectedResult3 = 1.23; // TempSurfInMovInsRep should be set to TempSurfInTmp

// Now call the subroutine which will run all of the test cases at once and then make the comparisons
HeatBalanceSurfaceManager::ReportIntMovInsInsideSurfTemp();
EXPECT_NEAR(DataHeatBalSurface::TempSurfInMovInsRep(1),ExpectedResult1,0.00001);
EXPECT_NEAR(DataHeatBalSurface::TempSurfInMovInsRep(2),ExpectedResult2,0.00001);
EXPECT_NEAR(DataHeatBalSurface::TempSurfInMovInsRep(3),ExpectedResult3,0.00001);

EXPECT_NEAR(DataHeatBalSurface::TempSurfInMovInsRep(1), ExpectedResult1, 0.00001);
EXPECT_NEAR(DataHeatBalSurface::TempSurfInMovInsRep(2), ExpectedResult2, 0.00001);
EXPECT_NEAR(DataHeatBalSurface::TempSurfInMovInsRep(3), ExpectedResult3, 0.00001);
}


TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_OutsideSurfHeatBalanceWhenRainFlag)
{
DataSurfaces::Surface.allocate(1);
DataHeatBalSurface::HcExtSurf.allocate(1);
DataHeatBalSurface::TH.allocate(1, 1, 1);

DataSurfaces::Surface(1).Area = 58.197;
DataHeatBalSurface::HcExtSurf(1) = 1000;
DataHeatBalSurface::TH(1, 1, 1) = 6.71793958923051;
DataSurfaces::Surface(1).OutWetBulbTemp = 6.66143784594778;
DataSurfaces::Surface(1).OutDryBulbTemp = 7.2;

// If Rain Flag = on, GetQdotConvOutRep uses Outdoor Air Wet Bulb Temp.
DataEnvironment::IsRain = true;
Real64 ExpectedQconvPerArea1 = -1000 * (6.71793958923051 - 6.66143784594778);

EXPECT_NEAR(ExpectedQconvPerArea1, GetQdotConvOutRepPerArea(1), 0.01);

// Otherwise, GetQdotConvOutRep uses Outdoor Air Dry Bulb Temp.
DataEnvironment::IsRain = false;
DataHeatBalSurface::HcExtSurf(1) = 5.65361106051348;
Real64 ExpectedQconvPerArea2 = -5.65361106051348 * (6.71793958923051 - 7.2);

EXPECT_NEAR(ExpectedQconvPerArea2, GetQdotConvOutRepPerArea(1), 0.01);
}

} // namespace EnergyPlus