@@ -353,20 +353,19 @@ void CheckAndSetConstructionProperties(EnergyPlusData &state,
353
353
thisConstruct.DayltPropPtr = 0 ;
354
354
int InsideMaterNum = thisConstruct.LayerPoint (InsideLayer); // Material "number" of the Inside layer
355
355
if (InsideMaterNum != 0 ) {
356
- auto const *thisMaterialInside = dynamic_cast < const Material::MaterialChild *>( state.dataMaterial ->Material (InsideMaterNum) );
357
- thisConstruct.InsideAbsorpVis = thisMaterialInside ->AbsorpVisible ;
358
- thisConstruct.InsideAbsorpSolar = thisMaterialInside ->AbsorpSolar ;
356
+ auto const *mat = state.dataMaterial ->Material (InsideMaterNum);
357
+ thisConstruct.InsideAbsorpVis = mat ->AbsorpVisible ;
358
+ thisConstruct.InsideAbsorpSolar = mat ->AbsorpSolar ;
359
359
360
360
// Following line applies only to opaque surfaces; it is recalculated later for windows.
361
- thisConstruct.ReflectVisDiffBack = 1.0 - thisMaterialInside ->AbsorpVisible ;
361
+ thisConstruct.ReflectVisDiffBack = 1.0 - mat ->AbsorpVisible ;
362
362
}
363
363
364
364
int OutsideMaterNum = thisConstruct.LayerPoint (1 ); // Material "number" of the Outside layer
365
365
if (OutsideMaterNum != 0 ) {
366
- auto const *thisMaterialOutside = dynamic_cast <const Material::MaterialChild *>(state.dataMaterial ->Material (OutsideMaterNum));
367
- assert (thisMaterialOutside != nullptr );
368
- thisConstruct.OutsideAbsorpVis = thisMaterialOutside->AbsorpVisible ;
369
- thisConstruct.OutsideAbsorpSolar = thisMaterialOutside->AbsorpSolar ;
366
+ auto const *mat = state.dataMaterial ->Material (OutsideMaterNum);
367
+ thisConstruct.OutsideAbsorpVis = mat->AbsorpVisible ;
368
+ thisConstruct.OutsideAbsorpSolar = mat->AbsorpSolar ;
370
369
}
371
370
372
371
thisConstruct.TotSolidLayers = 0 ;
@@ -397,9 +396,9 @@ void CheckAndSetConstructionProperties(EnergyPlusData &state,
397
396
}
398
397
399
398
if (InsideMaterNum == 0 ) return ;
400
- auto const *thisMaterialInside = dynamic_cast < const Material::MaterialChild *>( state.dataMaterial ->Material (InsideMaterNum) );
399
+ auto const *thisMaterialInside = state.dataMaterial ->Material (InsideMaterNum);
401
400
if (OutsideMaterNum == 0 ) return ;
402
- auto const *thisMaterialOutside = dynamic_cast < const Material::MaterialChild *>( state.dataMaterial ->Material (OutsideMaterNum) );
401
+ auto const *thisMaterialOutside = state.dataMaterial ->Material (OutsideMaterNum);
403
402
404
403
if (thisConstruct.TypeIsWindow ) {
405
404
@@ -500,14 +499,19 @@ void CheckAndSetConstructionProperties(EnergyPlusData &state,
500
499
501
500
// If there is a diffusing glass layer no shade, screen or blind is allowed
502
501
for (int Layer = 1 ; Layer <= TotLayers; ++Layer) {
503
- int const MaterNum = thisConstruct.LayerPoint (Layer);
504
- if (MaterNum == 0 ) continue ; // error -- has been caught will stop program later
505
- auto const *thisMaterial = dynamic_cast <Material::MaterialChild *>(state.dataMaterial ->Material (MaterNum));
506
- assert (thisMaterial != nullptr );
507
- if (thisMaterial->SolarDiffusing && TotShadeLayers > 0 ) {
502
+ int const MatNum = thisConstruct.LayerPoint (Layer);
503
+ if (MatNum == 0 ) continue ; // error -- has been caught will stop program later
504
+ auto const *mat = state.dataMaterial ->Material (MatNum);
505
+ if (mat->group != Material::Group::WindowGlass && mat->group != Material::Group::WindowSimpleGlazing &&
506
+ mat->group != Material::Group::GlassEquivalentLayer)
507
+ continue ;
508
+
509
+ auto const *matGlass = dynamic_cast <Material::MaterialChild const *>(mat);
510
+ assert (matGlass != nullptr );
511
+ if (matGlass->SolarDiffusing && TotShadeLayers > 0 ) {
508
512
ErrorsFound = true ;
509
513
ShowSevereError (state, format (" CheckAndSetConstructionProperties: Window construction={}" , thisConstruct.Name ));
510
- ShowContinueError (state, format (" has diffusing glass={} and a shade, screen or blind layer." , thisMaterial ->Name ));
514
+ ShowContinueError (state, format (" has diffusing glass={} and a shade, screen or blind layer." , matGlass ->Name ));
511
515
break ;
512
516
}
513
517
}
@@ -516,17 +520,18 @@ void CheckAndSetConstructionProperties(EnergyPlusData &state,
516
520
if (TotGlassLayers > 1 ) {
517
521
int GlassLayNum = 0 ;
518
522
for (int Layer = 1 ; Layer <= TotLayers; ++Layer) {
519
- int const MaterNum = thisConstruct.LayerPoint (Layer);
520
- if (MaterNum == 0 ) continue ; // error -- has been caught will stop program later
521
- auto const *thisMaterial = dynamic_cast <Material::MaterialChild *>(state.dataMaterial ->Material (MaterNum));
522
- assert (thisMaterial != nullptr );
523
- if (thisMaterial->group == Material::Group::WindowGlass) {
524
- ++GlassLayNum;
525
- if (GlassLayNum < TotGlassLayers && thisMaterial->SolarDiffusing ) {
526
- ErrorsFound = true ;
527
- ShowSevereError (state, format (" CheckAndSetConstructionProperties: Window construction={}" , thisConstruct.Name ));
528
- ShowContinueError (state, format (" has diffusing glass={} that is not the innermost glass layer." , thisMaterial->Name ));
529
- }
523
+ int const MatNum = thisConstruct.LayerPoint (Layer);
524
+ if (MatNum == 0 ) continue ; // error -- has been caught will stop program later
525
+ auto const *mat = state.dataMaterial ->Material (MatNum);
526
+ if (mat->group != Material::Group::WindowGlass) continue ;
527
+
528
+ auto const *matGlass = dynamic_cast <Material::MaterialChild const *>(mat);
529
+ assert (matGlass != nullptr );
530
+ ++GlassLayNum;
531
+ if (GlassLayNum < TotGlassLayers && matGlass->SolarDiffusing ) {
532
+ ErrorsFound = true ;
533
+ ShowSevereError (state, format (" CheckAndSetConstructionProperties: Window construction={}" , thisConstruct.Name ));
534
+ ShowContinueError (state, format (" has diffusing glass={} that is not the innermost glass layer." , matGlass->Name ));
530
535
}
531
536
}
532
537
}
@@ -599,8 +604,8 @@ void CheckAndSetConstructionProperties(EnergyPlusData &state,
599
604
// Gas on either side of a between-glass shade/blind must be the same
600
605
int const MatGapL = thisConstruct.LayerPoint (LayNumSh - 1 );
601
606
int const MatGapR = thisConstruct.LayerPoint (LayNumSh + 1 );
602
- auto const *thisMaterialGapL = dynamic_cast <const Material::MaterialChild *>(state.dataMaterial ->Material (MatGapL));
603
- auto const *thisMaterialGapR = dynamic_cast <const Material::MaterialChild *>(state.dataMaterial ->Material (MatGapR));
607
+ auto const *thisMaterialGapL = dynamic_cast <const Material::MaterialGasMixture *>(state.dataMaterial ->Material (MatGapL));
608
+ auto const *thisMaterialGapR = dynamic_cast <const Material::MaterialGasMixture *>(state.dataMaterial ->Material (MatGapR));
604
609
for (int IGas = 1 ; IGas <= 5 ; ++IGas) {
605
610
if ((thisMaterialGapL->gasTypes (IGas) != thisMaterialGapR->gasTypes (IGas)) ||
606
611
(thisMaterialGapL->GasFract (IGas) != thisMaterialGapR->GasFract (IGas)))
@@ -939,6 +944,7 @@ void AddVariableSlatBlind(EnergyPlusData &state,
939
944
}
940
945
}
941
946
947
+ #ifdef GET_OUT
942
948
void CalcScreenTransmittance (EnergyPlusData &state,
943
949
int const SurfaceNum,
944
950
ObjexxFCL::Optional<Real64 const > Phi, // Optional sun altitude relative to surface outward normal (radians)
@@ -1072,7 +1078,7 @@ void CalcScreenTransmittance(EnergyPlusData &state,
1072
1078
}
1073
1079
SunAltitude = SunAltitudeToScreenNormal;
1074
1080
} else {
1075
- SunAltitude = (Constant::PiOvr2 - std::acos (state.dataEnvrn ->SOLCOS ( 3 ) ));
1081
+ SunAltitude = (Constant::PiOvr2 - std::acos (state.dataEnvrn ->SOLCOS . z ));
1076
1082
SurfaceTilt = state.dataSurface ->Surface (SurfaceNum).Tilt * Constant::DegToRadians;
1077
1083
SunAltitudeToScreenNormal = std::abs (SunAltitude + (SurfaceTilt - Constant::PiOvr2));
1078
1084
if (SunAltitudeToScreenNormal > Constant::PiOvr2) {
@@ -1096,10 +1102,10 @@ void CalcScreenTransmittance(EnergyPlusData &state,
1096
1102
IncidentAngle = 0.0 ;
1097
1103
}
1098
1104
1099
- auto &thisScreen = state.dataMaterial ->Screens (ScNum);
1100
-
1101
1105
// ratio of screen material diameter to screen material spacing
1102
- Gamma = thisScreen.ScreenDiameterToSpacingRatio ;
1106
+ auto *screen = dynamic_cast <Material::MaterialScreen*>(state.dataMaterial ->Material (ScNum));
1107
+ assert (screen != nullptr );
1108
+ Gamma = screen->diameterToSpacingRatio ;
1103
1109
1104
1110
// ************************************************************************************************
1105
1111
// * calculate transmittance of totally absorbing screen material (beam passing through open area)*
@@ -1148,8 +1154,8 @@ void CalcScreenTransmittance(EnergyPlusData &state,
1148
1154
// * calculate transmittance of scattered beam due to reflecting screen material *
1149
1155
// *******************************************************************************
1150
1156
1151
- ReflectCyl = thisScreen. ReflectCylinder ;
1152
- ReflectCylVis = thisScreen. ReflectCylinderVis ;
1157
+ ReflectCyl = screen-> CylinderRefl ;
1158
+ ReflectCylVis = screen-> CylinderReflVis ;
1153
1159
1154
1160
if (std::abs (SunAzimuthToScreenNormal - Constant::PiOvr2) < Small || std::abs (SunAltitudeToScreenNormal - Constant::PiOvr2) < Small) {
1155
1161
Tscattered = 0.0 ;
@@ -1188,65 +1194,69 @@ void CalcScreenTransmittance(EnergyPlusData &state,
1188
1194
Tscattered = max (0.0 , Tscattered);
1189
1195
TscatteredVis = max (0.0 , TscatteredVis);
1190
1196
1191
- if (thisScreen. screenBeamReflectanceModel == Material::ScreenBeamReflectanceModel::DoNotModel) {
1197
+ if (screen-> beamReflectanceModel == Material::ScreenBeamReflectanceModel::DoNotModel) {
1192
1198
if (std::abs (IncidentAngle) <= Constant::PiOvr2) {
1193
- thisScreen. BmBmTrans = Tdirect;
1194
- thisScreen. BmBmTransVis = Tdirect;
1195
- thisScreen. BmBmTransBack = 0.0 ;
1199
+ screen-> BmBmTrans = Tdirect;
1200
+ screen-> BmBmTransVis = Tdirect;
1201
+ screen-> BmBmTransBack = 0.0 ;
1196
1202
} else {
1197
- thisScreen. BmBmTrans = 0.0 ;
1198
- thisScreen. BmBmTransVis = 0.0 ;
1199
- thisScreen. BmBmTransBack = Tdirect;
1203
+ screen-> BmBmTrans = 0.0 ;
1204
+ screen-> BmBmTransVis = 0.0 ;
1205
+ screen-> BmBmTransBack = Tdirect;
1200
1206
}
1201
1207
Tscattered = 0.0 ;
1202
1208
TscatteredVis = 0.0 ;
1203
- } else if (thisScreen. screenBeamReflectanceModel == Material::ScreenBeamReflectanceModel::DirectBeam) {
1209
+ } else if (screen-> beamReflectanceModel == Material::ScreenBeamReflectanceModel::DirectBeam) {
1204
1210
if (std::abs (IncidentAngle) <= Constant::PiOvr2) {
1205
- thisScreen. BmBmTrans = Tdirect + Tscattered;
1206
- thisScreen. BmBmTransVis = Tdirect + TscatteredVis;
1207
- thisScreen. BmBmTransBack = 0.0 ;
1211
+ screen-> BmBmTrans = Tdirect + Tscattered;
1212
+ screen-> BmBmTransVis = Tdirect + TscatteredVis;
1213
+ screen-> BmBmTransBack = 0.0 ;
1208
1214
} else {
1209
- thisScreen. BmBmTrans = 0.0 ;
1210
- thisScreen. BmBmTransVis = 0.0 ;
1211
- thisScreen. BmBmTransBack = Tdirect + Tscattered;
1215
+ screen-> BmBmTrans = 0.0 ;
1216
+ screen-> BmBmTransVis = 0.0 ;
1217
+ screen-> BmBmTransBack = Tdirect + Tscattered;
1212
1218
}
1213
1219
Tscattered = 0.0 ;
1214
1220
TscatteredVis = 0.0 ;
1215
- } else if (thisScreen. screenBeamReflectanceModel == Material::ScreenBeamReflectanceModel::Diffuse) {
1221
+ } else if (screen-> beamReflectanceModel == Material::ScreenBeamReflectanceModel::Diffuse) {
1216
1222
if (std::abs (IncidentAngle) <= Constant::PiOvr2) {
1217
- thisScreen. BmBmTrans = Tdirect;
1218
- thisScreen. BmBmTransVis = Tdirect;
1219
- thisScreen. BmBmTransBack = 0.0 ;
1223
+ screen-> BmBmTrans = Tdirect;
1224
+ screen-> BmBmTransVis = Tdirect;
1225
+ screen-> BmBmTransBack = 0.0 ;
1220
1226
} else {
1221
- thisScreen. BmBmTrans = 0.0 ;
1222
- thisScreen. BmBmTransVis = 0.0 ;
1223
- thisScreen. BmBmTransBack = Tdirect;
1227
+ screen-> BmBmTrans = 0.0 ;
1228
+ screen-> BmBmTransVis = 0.0 ;
1229
+ screen-> BmBmTransBack = Tdirect;
1224
1230
}
1225
1231
}
1226
1232
1227
1233
if (std::abs (IncidentAngle) <= Constant::PiOvr2) {
1228
- thisScreen. BmDifTrans = Tscattered;
1229
- thisScreen. BmDifTransVis = TscatteredVis;
1230
- thisScreen. BmDifTransBack = 0.0 ;
1231
- thisScreen. ReflectSolBeamFront = max (0.0 , ReflectCyl * (1.0 - Tdirect) - Tscattered);
1232
- thisScreen. ReflectVisBeamFront = max (0.0 , ReflectCylVis * (1.0 - Tdirect) - TscatteredVis);
1233
- thisScreen. AbsorpSolarBeamFront = max (0.0 , (1.0 - Tdirect) * (1.0 - ReflectCyl));
1234
- thisScreen. ReflectSolBeamBack = 0.0 ;
1235
- thisScreen. ReflectVisBeamBack = 0.0 ;
1236
- thisScreen. AbsorpSolarBeamBack = 0.0 ;
1234
+ screen-> BmDifTrans = Tscattered;
1235
+ screen-> BmDifTransVis = TscatteredVis;
1236
+ screen-> BmDifTransBack = 0.0 ;
1237
+ screen-> ReflectSolBeamFront = max (0.0 , ReflectCyl * (1.0 - Tdirect) - Tscattered);
1238
+ screen-> ReflectVisBeamFront = max (0.0 , ReflectCylVis * (1.0 - Tdirect) - TscatteredVis);
1239
+ screen-> AbsorpSolarBeamFront = max (0.0 , (1.0 - Tdirect) * (1.0 - ReflectCyl));
1240
+ screen-> ReflectSolBeamBack = 0.0 ;
1241
+ screen-> ReflectVisBeamBack = 0.0 ;
1242
+ screen-> AbsorpSolarBeamBack = 0.0 ;
1237
1243
} else {
1238
- thisScreen. BmDifTrans = 0.0 ;
1239
- thisScreen. BmDifTransVis = 0.0 ;
1240
- thisScreen. BmDifTransBack = Tscattered;
1241
- thisScreen. ReflectSolBeamBack = max (0.0 , ReflectCyl * (1.0 - Tdirect) - Tscattered);
1242
- thisScreen. ReflectVisBeamBack = max (0.0 , ReflectCylVis * (1.0 - Tdirect) - TscatteredVis);
1243
- thisScreen. AbsorpSolarBeamBack = max (0.0 , (1.0 - Tdirect) * (1.0 - ReflectCyl));
1244
- thisScreen. ReflectSolBeamFront = 0.0 ;
1245
- thisScreen. ReflectVisBeamFront = 0.0 ;
1246
- thisScreen. AbsorpSolarBeamFront = 0.0 ;
1244
+ screen-> BmDifTrans = 0.0 ;
1245
+ screen-> BmDifTransVis = 0.0 ;
1246
+ screen-> BmDifTransBack = Tscattered;
1247
+ screen-> ReflectSolBeamBack = max (0.0 , ReflectCyl * (1.0 - Tdirect) - Tscattered);
1248
+ screen-> ReflectVisBeamBack = max (0.0 , ReflectCylVis * (1.0 - Tdirect) - TscatteredVis);
1249
+ screen-> AbsorpSolarBeamBack = max (0.0 , (1.0 - Tdirect) * (1.0 - ReflectCyl));
1250
+ screen-> ReflectSolBeamFront = 0.0 ;
1251
+ screen-> ReflectVisBeamFront = 0.0 ;
1252
+ screen-> AbsorpSolarBeamFront = 0.0 ;
1247
1253
}
1248
- }
1254
+ } // CalcScreenTransmittance()
1255
+ #else // GET_OUT
1249
1256
1257
+
1258
+ #endif // GET_OUT
1259
+
1250
1260
Real64 ComputeNominalUwithConvCoeffs (EnergyPlusData &state,
1251
1261
int const numSurf, // index for Surface array.
1252
1262
bool &isValid // returns true if result is valid
0 commit comments