Line data Source code
1 : // EnergyPlus, Copyright (c) 1996-2023, The Board of Trustees of the University of Illinois,
2 : // The Regents of the University of California, through Lawrence Berkeley National Laboratory
3 : // (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge
4 : // National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other
5 : // contributors. All rights reserved.
6 : //
7 : // NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
8 : // U.S. Government consequently retains certain rights. As such, the U.S. Government has been
9 : // granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
10 : // worldwide license in the Software to reproduce, distribute copies to the public, prepare
11 : // derivative works, and perform publicly and display publicly, and to permit others to do so.
12 : //
13 : // Redistribution and use in source and binary forms, with or without modification, are permitted
14 : // provided that the following conditions are met:
15 : //
16 : // (1) Redistributions of source code must retain the above copyright notice, this list of
17 : // conditions and the following disclaimer.
18 : //
19 : // (2) Redistributions in binary form must reproduce the above copyright notice, this list of
20 : // conditions and the following disclaimer in the documentation and/or other materials
21 : // provided with the distribution.
22 : //
23 : // (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
24 : // the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
25 : // used to endorse or promote products derived from this software without specific prior
26 : // written permission.
27 : //
28 : // (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
29 : // without changes from the version obtained under this License, or (ii) Licensee makes a
30 : // reference solely to the software portion of its product, Licensee must refer to the
31 : // software as "EnergyPlus version X" software, where "X" is the version number Licensee
32 : // obtained under this License and may not use a different name for the software. Except as
33 : // specifically required in this Section (4), Licensee shall not use in a company name, a
34 : // product name, in advertising, publicity, or other promotional activities any name, trade
35 : // name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
36 : // similar designation, without the U.S. Department of Energy's prior written consent.
37 : //
38 : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
39 : // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
40 : // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
41 : // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
42 : // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
43 : // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
44 : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
45 : // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
46 : // POSSIBILITY OF SUCH DAMAGE.
47 :
48 : #ifndef HeatBalanceKivaManager_hh_INCLUDED
49 : #define HeatBalanceKivaManager_hh_INCLUDED
50 :
51 : // Kiva Headers
52 : #include <libkiva/Aggregator.hpp>
53 : #include <libkiva/Ground.hpp>
54 : #include <libkiva/Instance.hpp>
55 :
56 : // EnergyPlus Headers
57 : #include <EnergyPlus/Data/BaseData.hh>
58 : #include <EnergyPlus/DataHeatBalance.hh>
59 : #include <EnergyPlus/DataSurfaces.hh>
60 :
61 : namespace EnergyPlus {
62 :
63 : // Forward declarations
64 : struct EnergyPlusData;
65 :
66 : namespace HeatBalanceKivaManager {
67 :
68 : constexpr int KIVAZONE_UNCONTROLLED = 0;
69 : constexpr int KIVAZONE_TEMPCONTROL = 1;
70 : constexpr int KIVAZONE_COMFORTCONTROL = 2;
71 : constexpr int KIVAZONE_STAGEDCONTROL = 3;
72 :
73 1542 : class KivaWeatherData
74 : {
75 : public:
76 : int intervalsPerHour;
77 :
78 : Real64 annualAverageDrybulbTemp;
79 : std::vector<Real64> dryBulb;
80 : std::vector<Real64> windSpeed;
81 : std::vector<Real64> skyEmissivity;
82 : };
83 :
84 1574 : class FoundationKiva
85 : {
86 : public:
87 : Kiva::Foundation foundation;
88 : Kiva::InputBlock intHIns;
89 : Kiva::InputBlock intVIns;
90 : Kiva::InputBlock extHIns;
91 : Kiva::InputBlock extVIns;
92 : Kiva::InputBlock footing;
93 : std::string name;
94 : std::vector<int> surfaces;
95 : int wallConstructionIndex = 0;
96 : Real64 assumedIndoorTemperature;
97 : };
98 :
99 89 : class KivaInstanceMap
100 : {
101 : public:
102 : KivaInstanceMap(EnergyPlusData &state,
103 : Kiva::Foundation &foundation,
104 : int floorSurface,
105 : std::vector<int> wallSurfaces,
106 : int zoneNum,
107 : Real64 zoneAssumedTemperature,
108 : Real64 floorWeight,
109 : int constructionNum,
110 : class KivaManager *kmPtr = nullptr);
111 : Kiva::Instance instance;
112 : int floorSurface;
113 : std::vector<int> wallSurfaces;
114 : int zoneNum;
115 : int zoneControlType; // Uncontrolled=0, Temperature=1, Operative=2, Comfort=3, HumidityAndTemperature=4
116 : int zoneControlNum;
117 : Real64 zoneAssumedTemperature;
118 : void initGround(EnergyPlusData &state, const KivaWeatherData &kivaWeather);
119 : int getAccDate(EnergyPlusData &state, const int numAccelaratedTimesteps, const int acceleratedTimestep);
120 : void
121 : setInitialBoundaryConditions(EnergyPlusData &state, const KivaWeatherData &kivaWeather, const int date, const int hour, const int timestep);
122 : void setBoundaryConditions(EnergyPlusData &state);
123 : Real64 floorWeight;
124 : int constructionNum = 0;
125 : class KivaManager *kmPtr;
126 :
127 : #ifdef GROUND_PLOT
128 : void plotDomain(EnergyPlusData &state);
129 : Kiva::SnapshotSettings ss;
130 : Kiva::GroundPlot gp;
131 : std::string debugDir;
132 : std::size_t plotNum;
133 : #endif
134 : };
135 :
136 0 : class KivaManager
137 : {
138 : public:
139 : KivaManager();
140 : virtual ~KivaManager();
141 : void readWeatherData(EnergyPlusData &state);
142 : bool setupKivaInstances(EnergyPlusData &state);
143 : Real64 getDeepGroundDepth(Kiva::Foundation fnd);
144 : void initKivaInstances(EnergyPlusData &state);
145 : void calcKivaInstances(EnergyPlusData &state);
146 : void defineDefaultFoundation(EnergyPlusData &state);
147 : void addDefaultFoundation();
148 : int findFoundation(std::string const &name);
149 : void calcKivaSurfaceResults(EnergyPlusData &state);
150 :
151 : KivaWeatherData kivaWeather;
152 : FoundationKiva defaultFoundation;
153 : std::vector<FoundationKiva> foundationInputs;
154 : std::vector<KivaInstanceMap> kivaInstances;
155 :
156 352 : struct ConvectionAlgorithms
157 : {
158 : Kiva::ConvectionAlgorithm in;
159 : Kiva::ConvectionAlgorithm out;
160 : Kiva::ForcedConvectionTerm f; // Separated out for faster execution
161 : };
162 :
163 : std::map<int, ConvectionAlgorithms> surfaceConvMap;
164 : std::map<int, Kiva::Aggregator> surfaceMap;
165 : Real64 timestep;
166 :
167 : struct Settings
168 : {
169 : Settings();
170 :
171 : Real64 soilK;
172 : Real64 soilRho;
173 : Real64 soilCp;
174 : Real64 groundSolarAbs;
175 : Real64 groundThermalAbs;
176 : Real64 groundRoughness;
177 : Real64 farFieldWidth;
178 :
179 : enum DGType
180 : {
181 : ZERO_FLUX,
182 : GROUNDWATER,
183 : AUTO
184 : };
185 :
186 : DGType deepGroundBoundary;
187 : Real64 deepGroundDepth;
188 : bool autocalculateDeepGroundDepth;
189 : Real64 minCellDim;
190 : Real64 maxGrowthCoeff;
191 :
192 : enum TSType
193 : {
194 : HOURLY,
195 : TIMESTEP
196 : };
197 :
198 : TSType timestepType;
199 : };
200 :
201 18 : struct WallGroup
202 : {
203 : WallGroup();
204 : WallGroup(Real64 exposedPerimeter, std::vector<int> wallIDs);
205 : Real64 exposedPerimeter;
206 : std::vector<int> wallIDs;
207 : };
208 :
209 : Settings settings;
210 : bool defaultAdded;
211 : int defaultIndex;
212 : };
213 :
214 : } // namespace HeatBalanceKivaManager
215 :
216 : } // namespace EnergyPlus
217 :
218 : #endif // HeatBalanceKivaManager_hh_INCLUDED
|