Skip to content

Commit

Permalink
Add interior solar distribution calculations.
Browse files Browse the repository at this point in the history
  • Loading branch information
nealkruis committed Jun 13, 2019
1 parent 6f02d69 commit a0bd5c4
Show file tree
Hide file tree
Showing 23 changed files with 1,116 additions and 830 deletions.
300 changes: 192 additions & 108 deletions src/EnergyPlus/SolarShading.cc

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions testfiles/SolarShadingTest.idf
Original file line number Diff line number Diff line change
Expand Up @@ -2211,7 +2211,7 @@
Fraction, !- Schedule Type Limits Name
Through: 12/31, !- Field 1
For: AllDays, !- Field 2
Until: 24:00,0.0;!0.2; !- Field 3
Until: 24:00,0.2; !- Field 3

ScheduleTypeLimits,
Temperature, !- Name
Expand Down Expand Up @@ -2925,23 +2925,23 @@
ZONE 9 @ 200 600 1 T INLETS, !- Name
ZONE 9 @ 200 600 1 T INLET; !- Node 1 Name

! Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly;
Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly;

! Output:Variable,*,Zone Mean Air Temperature,hourly;
Output:Variable,*,Zone Mean Air Temperature,hourly;

! Output:Variable,*,Zone Total Internal Latent Gain Energy,hourly;
Output:Variable,*,Zone Total Internal Latent Gain Energy,hourly;

! Output:Variable,*,Zone Mean Radiant Temperature,hourly;
Output:Variable,*,Zone Mean Radiant Temperature,hourly;

! Output:Variable,*,Zone Mean Radiant Temperature,hourly;
Output:Variable,*,Zone Mean Radiant Temperature,hourly;

Output:Variable,*,Surface Outside Face Sunlit Fraction,timestep;
Output:Variable,*,Surface Inside Face Temperature,daily;

! Output:Variable,*,Surface Inside Face Temperature,daily;
Output:Variable,*,Surface Outside Face Temperature,daily;

! Output:Variable,*,Surface Outside Face Temperature,daily;
Output:Variable,*,Surface Inside Face Convection Heat Transfer Coefficient,daily;

! Output:Variable,*,Surface Inside Face Convection Heat Transfer Coefficient,daily;
Output:Variable,*,Surface Outside Face Convection Heat Transfer Coefficient,daily;

Output:VariableDictionary,Regular;

Expand Down
115 changes: 115 additions & 0 deletions third_party/penumbra/.clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 100
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 8
UseTab: Never
...

102 changes: 38 additions & 64 deletions third_party/penumbra/examples/awning.cpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
/* Copyright (c) 2017 Big Ladder Software and Chip Barnaby. All rights reserved.
* See the LICENSE file for additional terms and conditions. */
* See the LICENSE file for additional terms and conditions. */

// Standard
#include <iostream>

// Penumbra
#include <penumbra/penumbra.h>

void errorCallback(
const int messageType,
const std::string message,
void* /*contextPtr*/
)
{
void errorCallback(const int messageType, const std::string message, void * /*contextPtr*/
) {
if (messageType == Pumbra::MSG_INFO) {
std::cout << " NOTE: " << message << std::endl;
} else if (messageType == Pumbra::MSG_WARN) {
Expand All @@ -23,79 +19,57 @@ void errorCallback(
}
}

int main(void)
{
Pumbra::Polygon wallVerts =
{
0.f, 0.f, 0.f,
1.f, 0.f, 0.f,
1.f, 0.f, 1.f,
0.f, 0.f, 1.f
};
int main(void) {
Pumbra::Polygon wallVerts = {0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 1.f, 0.f, 1.f, 0.f, 0.f, 1.f};

Pumbra::Polygon windowVerts =
{
0.25f, 0.f, 0.25f,
0.75f, 0.f, 0.25f,
0.75f, 0.f, 0.5f,
0.25f, 0.f, 0.5f
};
Pumbra::Polygon windowVerts = {0.25f, 0.f, 0.25f, 0.75f, 0.f, 0.25f,
0.75f, 0.f, 0.5f, 0.25f, 0.f, 0.5f};

Pumbra::Polygon awningVerts =
{
0.25f, 0.f, 0.5f,
0.75f, 0.f, 0.5f,
0.75f, -0.5f, 0.5f,
0.25f, -0.5f, 0.5f
};
Pumbra::Polygon awningVerts = {0.25f, 0.f, 0.5f, 0.75f, 0.f, 0.5f,
0.75f, -0.5f, 0.5f, 0.25f, -0.5f, 0.5f};

Pumbra::Surface wall(wallVerts);
wall.addHole(windowVerts);
Pumbra::Surface wall(wallVerts);
wall.addHole(windowVerts);

Pumbra::Surface window(windowVerts);
Pumbra::Surface awning(awningVerts);
Pumbra::Surface window(windowVerts);
Pumbra::Surface awning(awningVerts);

Pumbra::Penumbra pumbra(errorCallback);
Pumbra::Penumbra pumbra(errorCallback);

unsigned wallId = pumbra.addSurface(wall);
unsigned windowId = pumbra.addSurface(window);
unsigned awningId = pumbra.addSurface(awning);
unsigned wallId = pumbra.addSurface(wall);
unsigned windowId = pumbra.addSurface(window);
unsigned awningId = pumbra.addSurface(awning);

pumbra.setModel();
pumbra.setSunPosition(2.50f,0.3f);
//pumbra.setSunPosition(3.14f, 0.0f);
pumbra.renderScene(wallId);
float wallPSSF = pumbra.calculatePSSF(wallId);
pumbra.setModel();
pumbra.setSunPosition(2.50f, 0.3f);
// pumbra.setSunPosition(3.14f, 0.0f);
pumbra.renderScene(wallId);
float wallPSSA = pumbra.calculatePSSA(wallId);

std::cout << "Wall PSSF: " << wallPSSF << std::endl;
std::cout << "Wall PSSA: " << wallPSSA << std::endl;

pumbra.renderScene(windowId);
float windowPSSF = pumbra.calculatePSSF(windowId);
pumbra.renderScene(windowId);
float windowPSSA = pumbra.calculatePSSA(windowId);

std::cout << "Window PSSF: " << windowPSSF << std::endl;
std::cout << "Window PSSA: " << windowPSSA << std::endl;

pumbra.clearModel();
pumbra.clearModel();

Pumbra::Polygon finVerts =
{
0.75f, -0.25f, 0.5f,
0.75f, -0.25f, 0.25f,
0.75f, 0.0f, 0.25f,
0.75f, 0.0f, 0.5f
};
Pumbra::Polygon finVerts = {0.75f, -0.25f, 0.5f, 0.75f, -0.25f, 0.25f,
0.75f, 0.0f, 0.25f, 0.75f, 0.0f, 0.5f};

Pumbra::Surface fin(finVerts);
Pumbra::Surface fin(finVerts);

windowId = pumbra.addSurface(window);
awningId = pumbra.addSurface(awning);
/*unsigned finID = */pumbra.addSurface(fin);
windowId = pumbra.addSurface(window);
awningId = pumbra.addSurface(awning);
/*unsigned finID = */ pumbra.addSurface(fin);

pumbra.setModel();
pumbra.setModel();

pumbra.renderScene(windowId);
windowPSSF = pumbra.calculatePSSF(windowId);
pumbra.renderScene(windowId);
windowPSSA = pumbra.calculatePSSA(windowId);

std::cout << "Window PSSF with fin: " << windowPSSF << std::endl;
std::cout << "Window PSSA with fin: " << windowPSSA << std::endl;

return 0;
return 0;
}
50 changes: 22 additions & 28 deletions third_party/penumbra/include/penumbra/penumbra.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Copyright (c) 2017 Big Ladder Software LLC. All rights reserved.
* See the LICENSE file for additional terms and conditions. */
* See the LICENSE file for additional terms and conditions. */

#ifndef PENUMBRA_H_
#define PENUMBRA_H_
Expand All @@ -9,6 +9,7 @@
#include <string>
#include <vector>
#include <array>
#include <map>

// Penumbra
#include <penumbra/surface.h>
Expand All @@ -21,53 +22,46 @@ const int MSG_INFO = 0;
const int MSG_WARN = 1;
const int MSG_ERR = 2;

typedef void(*PenumbraCallbackFunction)(
const int messageType,
const std::string message,
void* contextPtr
);
typedef void (*PenumbraCallbackFunction)(const int messageType, const std::string message,
void *contextPtr);

class PenumbraPrivate;

void penumbraTerminate(); // Call once before exiting calling program to ensure safe cleanup of OpenGL memory
void penumbraTerminate(); // Call once before exiting calling program to ensure safe cleanup of
// OpenGL memory

class Penumbra {
public:
Penumbra(unsigned size = 512u);

Penumbra(
PenumbraCallbackFunction callbackFunction,
unsigned size = 512u
);

Penumbra(
PenumbraCallbackFunction callbackFunction,
void* contextPtr,
unsigned size = 512u
);
Penumbra(PenumbraCallbackFunction callbackFunction, unsigned size = 512u);

Penumbra(PenumbraCallbackFunction callbackFunction, void *contextPtr, unsigned size = 512u);

~Penumbra();

public:
unsigned addSurface(const Surface& surface);
unsigned addSurface(const Surface &surface);
int setModel();
int clearModel();
int setSunPosition(
const float azm, // in radians, clockwise, north = 0
const float alt // in radians, horizon = 0, vertical = pi/2
int setSunPosition(const float azm, // in radians, clockwise, north = 0
const float alt // in radians, horizon = 0, vertical = pi/2
);
float calculatePSSF(unsigned surfaceIndex);
float getSunAzimuth();
float getSunAltitude();
float calculatePSSA(unsigned surfaceIndex);
std::map<unsigned, float> calculateInteriorPSSAs(std::vector<unsigned> transparentSurfaceIndices,
std::vector<unsigned> interiorSurfaceIndices);
int renderScene(unsigned surfaceIndex); // Primarily for debug purposes
void setMessageCallback(
PenumbraCallbackFunction callbackFunction,
void* contextPtr
);
int renderInteriorScene(
std::vector<unsigned> transparentSurfaceIndices,
std::vector<unsigned> interiorSurfaceIndices); // Primarily for debug purposes
void setMessageCallback(PenumbraCallbackFunction callbackFunction, void *contextPtr);

private:
std::unique_ptr<PenumbraPrivate> penumbra;

};

}
} // namespace Pumbra

#endif /* PENUMBRA_H_ */
Loading

7 comments on commit a0bd5c4

@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.

penumbra-integration (nealkruis) - x86_64-Linux-Ubuntu-18.04-custom_check: OK (6 of 6 tests passed, 0 test warnings)

Build 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.

penumbra-integration (nealkruis) - x86_64-Linux-Ubuntu-18.04-gcc-7.4-UnitTestsCoverage-Debug: Build Failed

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.

penumbra-integration (nealkruis) - x86_64-Linux-Ubuntu-18.04-gcc-7.4-IntegrationCoverage-Debug: Build Failed

Build Badge Test Badge Coverage Badge

@nrel-bot-2b
Copy link

Choose a reason for hiding this comment

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

penumbra-integration (nealkruis) - x86_64-Linux-Ubuntu-18.04-cppcheck: OK (0 of 0 tests passed, 0 test warnings)

Build Badge

@nrel-bot-2c
Copy link

Choose a reason for hiding this comment

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

penumbra-integration (nealkruis) - x86_64-Linux-Ubuntu-18.04-gcc-7.4: Build Failed

Build Badge Test Badge

@nrel-bot-3
Copy link

Choose a reason for hiding this comment

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

penumbra-integration (nealkruis) - x86_64-MacOS-10.13-clang: OK (2399 of 2408 tests passed, 647 test warnings)

Messages:\n

  • 655 tests had: EIO diffs.
  • 10 tests had: ERR diffs.
  • 141 tests had: BND diffs.
  • 96 tests had: MDD diffs.
  • 101 tests had: MTD diffs.
  • 98 tests had: RDD diffs.
  • 3 tests had: AUD diffs.
  • 5 tests had: ESO big diffs.
  • 3 tests had: SSZ big diffs.
  • 3 tests had: ZSZ big diffs.
  • 5 tests had: Table big diffs.
  • 1 test had: MTR small diffs.
  • 2 tests had: MTR big diffs.

Failures:\n

PenumbraTest Test Summary

  • Passed: 1
  • Failed: 1

regression Test Summary

  • Passed: 647
  • Failed: 8

Build Badge Test Badge

@nrel-bot
Copy link

Choose a reason for hiding this comment

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

penumbra-integration (nealkruis) - Win64-Windows-10-VisualStudio-16: OK (2398 of 2408 tests passed, 647 test warnings)

Messages:\n

  • 655 tests had: EIO diffs.
  • 141 tests had: BND diffs.
  • 10 tests had: ERR diffs.
  • 96 tests had: MDD diffs.
  • 101 tests had: MTD diffs.
  • 98 tests had: RDD diffs.
  • 3 tests had: AUD diffs.
  • 5 tests had: ESO big diffs.
  • 3 tests had: SSZ big diffs.
  • 3 tests had: ZSZ big diffs.
  • 2 tests had: MTR small diffs.
  • 5 tests had: Table big diffs.
  • 2 tests had: MTR big diffs.

Failures:\n

regression Test Summary

  • Passed: 647
  • Failed: 8

Build Badge Test Badge

Please sign in to comment.