From 2377867474c4e8aa12db7f90e8c942b229540fec Mon Sep 17 00:00:00 2001 From: brianlball Date: Thu, 15 Oct 2020 11:28:27 -0600 Subject: [PATCH 1/6] convert SurfaceGeometry --- src/EnergyPlus/ConvectionCoefficients.cc | 86 +- src/EnergyPlus/ConvectionCoefficients.hh | 6 +- src/EnergyPlus/Data/CommonIncludes.hh | 1 + src/EnergyPlus/Data/EnergyPlusData.cc | 2 + src/EnergyPlus/Data/EnergyPlusData.hh | 2 + src/EnergyPlus/HeatBalanceKivaManager.cc | 10 +- src/EnergyPlus/HeatBalanceKivaManager.hh | 2 +- src/EnergyPlus/HeatBalanceSurfaceManager.cc | 22 +- src/EnergyPlus/SimulationManager.cc | 2 +- src/EnergyPlus/StateManagement.cc | 2 - src/EnergyPlus/SurfaceGeometry.cc | 3046 +++++++++---------- src/EnergyPlus/SurfaceGeometry.hh | 132 +- src/EnergyPlus/WeatherManager.cc | 10 +- src/EnergyPlus/WeatherManager.hh | 2 +- 14 files changed, 1595 insertions(+), 1730 deletions(-) diff --git a/src/EnergyPlus/ConvectionCoefficients.cc b/src/EnergyPlus/ConvectionCoefficients.cc index 453f128370c..fb2286d7640 100644 --- a/src/EnergyPlus/ConvectionCoefficients.cc +++ b/src/EnergyPlus/ConvectionCoefficients.cc @@ -288,7 +288,7 @@ namespace ConvectionCoefficients { } else if (SELECT_CASE_var1 == ASHRAETARP) { if (!state.dataConstruction->Construct(Surface(SurfNum).Construction).TypeIsWindow) { - CalcASHRAEDetailedIntConvCoeff(SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); + CalcASHRAEDetailedIntConvCoeff(state, SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); } else { CalcISO15099WindowIntConvCoeff(SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); } @@ -316,7 +316,7 @@ namespace ConvectionCoefficients { if (Surface(SurfNum).EMSOverrideIntConvCoef) { HConvIn(SurfNum) = Surface(SurfNum).EMSValueForIntConvCoef; if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(Surface(SurfNum).EMSValueForIntConvCoef); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(Surface(SurfNum).EMSValueForIntConvCoef); } } } @@ -432,10 +432,10 @@ namespace ConvectionCoefficients { if (SELECT_CASE_var1 == ASHRAESimple) { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = [](double, double, double, double windSpeed) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = [](double, double, double, double windSpeed) -> double { return windSpeed; }; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = [=](double, double, double hfTerm, double, double) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = [=](double, double, double hfTerm, double, double) -> double { return CalcASHRAESimpExtConvectCoeff(Roughness, hfTerm); }; } else { @@ -462,12 +462,12 @@ namespace ConvectionCoefficients { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { if (Surface(SurfNum).Class == SurfaceClass_Wall) { - auto &fnd = SurfaceGeometry::kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; + auto &fnd = state.dataSurfaceGeometry->kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; const double length = fnd.netPerimeter; const double height = fnd.wall.heightAboveGrade; const double area = length * height; const double perim = 2.0 * (length + height); - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { // Average windward and leeward since all walls use same algorithm double windwardHf = CalcSparrowWindward(Roughness, perim, area, windSpeed); double leewardHf = CalcSparrowLeeward(Roughness, perim, area, windSpeed); @@ -477,11 +477,11 @@ namespace ConvectionCoefficients { // Assume very large area for grade (relative to perimeter). const double area = 9999999.; const double perim = 1.; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { return CalcSparrowWindward(Roughness, perim, area, windSpeed); }; } - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = [=](double Tsurf, double Tamb, double hfTerm, double, double cosTilt) -> double { Real64 Ts = Tsurf; if (HMovInsul > 0.0) Ts = (HMovInsul * Tsurf + hfTerm * Tamb) / (HMovInsul + hfTerm); @@ -509,18 +509,18 @@ namespace ConvectionCoefficients { } else if (SELECT_CASE_var1 == MoWiTTHcOutside) { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { if (Surface(SurfNum).Class == SurfaceClass_Wall) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { // Average windward and leeward since all walls use same algorithm double windwardHf = CalcMoWITTForcedWindward(windSpeed); double leewardHf = CalcMoWITTForcedLeeward(windSpeed); return (windwardHf + leewardHf) / 2.0; }; } else { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { return CalcMoWITTForcedWindward(windSpeed); }; } - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = [=](double Tsurf, double Tamb, double hfTerm, double, double) -> double { Real64 Hn = CalcMoWITTNatural(Tsurf - Tamb); return std::sqrt(pow_2(Hn) + pow_2(hfTerm)); @@ -537,18 +537,18 @@ namespace ConvectionCoefficients { } else if (SELECT_CASE_var1 == DOE2HcOutside) { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { if (Surface(SurfNum).Class == SurfaceClass_Wall) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { // Average windward and leeward since all walls use same algorithm double windwardHf = CalcMoWITTForcedWindward(windSpeed); double leewardHf = CalcMoWITTForcedLeeward(windSpeed); return (windwardHf + leewardHf) / 2.0; }; } else { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = [=](double, double, double, double windSpeed) -> double { return CalcMoWITTForcedWindward(windSpeed); }; } - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = [=](double Tsurf, double Tamb, double hfTerm, double, double cosTilt) -> double { Real64 Hf = CalcDOE2Forced(Tsurf, Tamb, cosTilt, hfTerm, Roughness); @@ -592,8 +592,8 @@ namespace ConvectionCoefficients { if (Surface(SurfNum).EMSOverrideExtConvCoef) { HExt = Surface(SurfNum).EMSValueForExtConvCoef; if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_ZERO; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(Surface(SurfNum).EMSValueForExtConvCoef); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_ZERO; + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(Surface(SurfNum).EMSValueForExtConvCoef); } } @@ -2436,13 +2436,13 @@ namespace ConvectionCoefficients { } } - void CalcASHRAESimpleIntConvCoeff(int const SurfNum, // surface number for which coefficients are being calculated + void CalcASHRAESimpleIntConvCoeff(EnergyPlusData &state, int const SurfNum, // surface number for which coefficients are being calculated Real64 const SurfaceTemperature, // Temperature of surface for evaluation of HcIn Real64 const ZoneMeanAirTemperature // Mean Air Temperature of Zone ) { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation){ - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = [](double Tsurf, double Tamb, double, double, double cosTilt) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = [](double Tsurf, double Tamb, double, double, double cosTilt) -> double { return CalcASHRAESimpleIntConvCoeff(Tsurf, Tamb, cosTilt); }; } @@ -2506,14 +2506,14 @@ namespace ConvectionCoefficients { } // ...end of IF-THEN block to set HConvIn } - void CalcASHRAEDetailedIntConvCoeff(int const SurfNum, // surface number for which coefficients are being calculated + void CalcASHRAEDetailedIntConvCoeff(EnergyPlusData &state, int const SurfNum, // surface number for which coefficients are being calculated Real64 const SurfaceTemperature, // Temperature of surface for evaluation of HcIn Real64 const ZoneMeanAirTemperature // Mean Air Temperature of Zone ) { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = [](double Tsurf, double Tamb, double, double, double cosTilt) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = [](double Tsurf, double Tamb, double, double, double cosTilt) -> double { return CalcASHRAETARPNatural(Tsurf, Tamb, cosTilt); }; } else { @@ -2756,7 +2756,7 @@ namespace ConvectionCoefficients { if (!Surface(SurfNum).HeatTransSurf) continue; // Skip non-heat transfer surfaces if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = [=, &state](double Tsurf, double Tamb, double, double, double cosTilt) -> double { + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = [=, &state](double Tsurf, double Tamb, double, double, double cosTilt) -> double { return CalcCeilingDiffuserIntConvCoeff( state, ACH, Tsurf, Tamb, cosTilt, AirHumRat, Surface(SurfNum).Height, state.dataConstruction->Construct(Surface(SurfNum).Construction).TypeIsWindow); }; @@ -2844,7 +2844,7 @@ namespace ConvectionCoefficients { if (ACH <= 3.0) { // Use the other convection algorithm if (!state.dataConstruction->Construct(Surface(SurfNum).Construction).TypeIsWindow) { - CalcASHRAEDetailedIntConvCoeff(SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); + CalcASHRAEDetailedIntConvCoeff(state, SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); } else { CalcISO15099WindowIntConvCoeff(SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); } @@ -3130,8 +3130,8 @@ namespace ConvectionCoefficients { if (SELECT_CASE_var == ConvCoefValue) { HExt = UserExtConvectionCoeffs(Surface(SurfNum).ExtConvCoeff).OverrideValue; if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_ZERO; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(HExt); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_ZERO; + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(HExt); } Surface(SurfNum).OutConvHfModelEq = HcExt_UserValue; // reporting Surface(SurfNum).OutConvHnModelEq = HcExt_None; // reporting @@ -3139,8 +3139,8 @@ namespace ConvectionCoefficients { HExt = GetCurrentScheduleValue(UserExtConvectionCoeffs(Surface(SurfNum).ExtConvCoeff).ScheduleIndex); // Need to check for validity if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_ZERO; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(HExt); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_ZERO; + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(HExt); } Surface(SurfNum).OutConvHfModelEq = HcExt_UserSchedule; // reporting Surface(SurfNum).OutConvHnModelEq = HcExt_None; // reporting @@ -3197,14 +3197,14 @@ namespace ConvectionCoefficients { if (SELECT_CASE_var == ConvCoefValue) { HInt = UserIntConvectionCoeffs(Surface(SurfNum).IntConvCoeff).OverrideValue; if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(HInt); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(HInt); } Surface(SurfNum).IntConvHcModelEq = HcInt_UserValue; // reporting } else if (SELECT_CASE_var == ConvCoefSchedule) { HInt = GetCurrentScheduleValue(UserIntConvectionCoeffs(Surface(SurfNum).IntConvCoeff).ScheduleIndex); // Need to check for validity if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(HInt); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(HInt); } Surface(SurfNum).IntConvHcModelEq = HcInt_UserSchedule; // reporting } else if (SELECT_CASE_var == ConvCoefUserCurve) { @@ -4273,7 +4273,7 @@ namespace ConvectionCoefficients { // This routine implements an adaptive structure and classification system for outdoor // It calls a series of separable worker routines - DynamicExtConvSurfaceClassification(SurfNum); + DynamicExtConvSurfaceClassification(state, SurfNum); MapExtConvClassificationToHcModels(state, SurfNum); @@ -4312,7 +4312,7 @@ namespace ConvectionCoefficients { Real64 &Tsurface = TH(2, 1, SurfNum); Real64 &Tzone = MAT(ZoneNum); - auto &HnFn = SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in; + auto &HnFn = state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in; // now call appropriate function to calculate Hc { auto const SELECT_CASE_var(ConvModelEquationNum); @@ -4672,7 +4672,7 @@ namespace ConvectionCoefficients { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { HnFn = [=](double Tsurf, double Tamb, double HfTerm, double Roughness, double CosTilt) -> double { // Remove Hfterm since this is only used for the natural convection portion - return SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out(Tsurf, Tamb, HfTerm, Roughness, CosTilt) - HfTerm; + return state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out(Tsurf, Tamb, HfTerm, Roughness, CosTilt) - HfTerm; }; } } else if (SELECT_CASE_var == HcExt_NaturalASHRAEVerticalWall) { @@ -4745,8 +4745,8 @@ namespace ConvectionCoefficients { } else if (SELECT_CASE_var == HcExt_UserCurve) { CalcUserDefinedOutsideHcModel(state, SurfNum, Surface(SurfNum).OutConvHfUserCurveIndex, Hf); if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - HfTermFn = SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f; - HnFn = SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out; + HfTermFn = state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f; + HnFn = state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out; } } else if (SELECT_CASE_var == HcExt_SparrowWindward) { Hf = CalcSparrowWindward(state, Roughness, Surface(SurfNum).OutConvFacePerimeter, Surface(SurfNum).OutConvFaceArea, SurfWindSpeed, SurfNum); @@ -4760,7 +4760,7 @@ namespace ConvectionCoefficients { }; } else { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - auto &fnd = SurfaceGeometry::kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; + auto &fnd = state.dataSurfaceGeometry->kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; const double length = fnd.netPerimeter; const double height = fnd.wall.heightAboveGrade; const double area = length * height; @@ -4785,7 +4785,7 @@ namespace ConvectionCoefficients { }; } else { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - auto &fnd = SurfaceGeometry::kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; + auto &fnd = state.dataSurfaceGeometry->kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; const double length = fnd.netPerimeter; const double height = fnd.wall.heightAboveGrade; const double area = length * height; @@ -4887,7 +4887,7 @@ namespace ConvectionCoefficients { }; } else { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - auto &fnd = SurfaceGeometry::kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; + auto &fnd = state.dataSurfaceGeometry->kivaManager.surfaceMap[SurfNum].get_instance(0).first->foundation; const double length = fnd.netPerimeter; const double height = fnd.wall.heightAboveGrade; const double area = length * height; @@ -4921,8 +4921,8 @@ namespace ConvectionCoefficients { Hc = Hf + Hn; if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = HfTermFn; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = HfTermFn; + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = [=](double Tsurf, double Tamb, double HfTerm, double Roughness, double cosTilt) -> double { Real64 HcExt = HfFn(Tsurf, Tamb, HfTerm, Roughness, cosTilt) + HnFn(Tsurf, Tamb, HfTerm, Roughness, cosTilt); if (HcExt < AdaptiveHcOutsideLowLimit) HcExt = AdaptiveHcOutsideLowLimit; @@ -4934,7 +4934,7 @@ namespace ConvectionCoefficients { if (Hc < AdaptiveHcOutsideLowLimit) Hc = AdaptiveHcOutsideLowLimit; } - void DynamicExtConvSurfaceClassification(int const SurfNum) // surface number + void DynamicExtConvSurfaceClassification(EnergyPlusData &state, int const SurfNum) // surface number { // SUBROUTINE INFORMATION: @@ -4960,7 +4960,7 @@ namespace ConvectionCoefficients { Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) // Applies to exterior grade ) { if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - DeltaTemp = SurfaceGeometry::kivaManager.surfaceMap[SurfNum].results.Tconv - Surface(SurfNum).OutDryBulbTemp; + DeltaTemp = state.dataSurfaceGeometry->kivaManager.surfaceMap[SurfNum].results.Tconv - Surface(SurfNum).OutDryBulbTemp; } else { DeltaTemp = TH(1, 1, SurfNum) - Surface(SurfNum).OutDryBulbTemp; } @@ -6135,7 +6135,7 @@ namespace ConvectionCoefficients { } if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = [=](double Tsurf, double Tamb, double HfTerm, double Roughness, double CosTilt) -> double { return HcFnTempDiffFn(Tsurf, Tamb, HfTerm, Roughness, CosTilt) + HcFnTempDiffDivHeightFn(Tsurf, Tamb, HfTerm, Roughness, CosTilt) + HcFnACH + HcFnACHDivPerimLength; @@ -6225,8 +6225,8 @@ namespace ConvectionCoefficients { } if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = HfFnWindSpeedFn; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = HfFnWindSpeedFn; + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = [=](double Tsurf, double Tamb, double HfTerm, double Roughness, double CosTilt) -> double { return HnFnTempDiffFn(Tsurf, Tamb, HfTerm, Roughness, CosTilt) + HnFnTempDiffDivHeightFn(Tsurf, Tamb, HfTerm, Roughness, CosTilt) + HfTerm; diff --git a/src/EnergyPlus/ConvectionCoefficients.hh b/src/EnergyPlus/ConvectionCoefficients.hh index 9e8344e0621..4867bb39a1e 100644 --- a/src/EnergyPlus/ConvectionCoefficients.hh +++ b/src/EnergyPlus/ConvectionCoefficients.hh @@ -458,14 +458,14 @@ namespace ConvectionCoefficients { Real64 CalcASHRAESimpleIntConvCoeff(Real64 Tsurf, Real64 Tamb, Real64 cosTilt); - void CalcASHRAESimpleIntConvCoeff(int SurfNum, // surface number for which coefficients are being calculated + void CalcASHRAESimpleIntConvCoeff(EnergyPlusData &state, int SurfNum, // surface number for which coefficients are being calculated Real64 SurfaceTemperature, // Temperature of surface for evaluation of HcIn Real64 ZoneMeanAirTemperature // Mean Air Temperature of Zone ); Real64 CalcASHRAETARPNatural(Real64 Tsurf, Real64 Tamb, Real64 cosTilt); - void CalcASHRAEDetailedIntConvCoeff(int SurfNum, // surface number for which coefficients are being calculated + void CalcASHRAEDetailedIntConvCoeff(EnergyPlusData &state, int SurfNum, // surface number for which coefficients are being calculated Real64 SurfaceTemperature, // Temperature of surface for evaluation of HcIn Real64 ZoneMeanAirTemperature // Mean Air Temperature of Zone ); @@ -553,7 +553,7 @@ namespace ConvectionCoefficients { void EvaluateExtHcModels(EnergyPlusData &state, int SurfNum, int NaturalConvModelEqNum, int ForcedConvModelEqNum, Real64 &Hc); - void DynamicExtConvSurfaceClassification(int SurfNum); // surface number + void DynamicExtConvSurfaceClassification(EnergyPlusData &state, int SurfNum); // surface number void MapExtConvClassificationToHcModels(EnergyPlusData &state, int SurfNum); // surface number diff --git a/src/EnergyPlus/Data/CommonIncludes.hh b/src/EnergyPlus/Data/CommonIncludes.hh index 56870f93910..5481afd855a 100644 --- a/src/EnergyPlus/Data/CommonIncludes.hh +++ b/src/EnergyPlus/Data/CommonIncludes.hh @@ -82,6 +82,7 @@ #include #include #include +#include #include #include #include diff --git a/src/EnergyPlus/Data/EnergyPlusData.cc b/src/EnergyPlus/Data/EnergyPlusData.cc index 0be774ebc5c..60bcfb9d0c6 100644 --- a/src/EnergyPlus/Data/EnergyPlusData.cc +++ b/src/EnergyPlus/Data/EnergyPlusData.cc @@ -84,6 +84,7 @@ namespace EnergyPlus { this->dataGlobal = std::unique_ptr(new DataGlobal); this->dataPipes = std::unique_ptr(new PipesData); this->dataPlantChillers = std::unique_ptr(new PlantChillersData); + this->dataSurfaceGeometry = std::unique_ptr(new SurfaceGeometryData); this->dataSurfaceGroundHeatExchangers = std::unique_ptr(new SurfaceGroundHeatExchangersData); this->dataSwimmingPools = std::unique_ptr(new SwimmingPoolsData); this->dataSystemAvailabilityManager = std::unique_ptr(new SystemAvailabilityManagerData); @@ -146,6 +147,7 @@ namespace EnergyPlus { this->dataGlobal->clear_state(); this->dataPipes->clear_state(); this->dataPlantChillers->clear_state(); + this->dataSurfaceGeometry->clear_state(); this->dataSurfaceGroundHeatExchangers->clear_state(); this->dataSwimmingPools->clear_state(); this->dataSystemAvailabilityManager->clear_state(); diff --git a/src/EnergyPlus/Data/EnergyPlusData.hh b/src/EnergyPlus/Data/EnergyPlusData.hh index 944319359f5..6fd7f7c7b9e 100644 --- a/src/EnergyPlus/Data/EnergyPlusData.hh +++ b/src/EnergyPlus/Data/EnergyPlusData.hh @@ -93,6 +93,7 @@ struct ExteriorEnergyUseData; struct FansData; struct PipesData; struct PlantChillersData; +struct SurfaceGeometryData; struct SurfaceGroundHeatExchangersData; struct SwimmingPoolsData; struct SystemAvailabilityManagerData; @@ -158,6 +159,7 @@ struct EnergyPlusData : BaseGlobalStruct { std::unique_ptr dataFans; std::unique_ptr dataPipes; std::unique_ptr dataPlantChillers; + std::unique_ptr dataSurfaceGeometry; std::unique_ptr dataSurfaceGroundHeatExchangers; std::unique_ptr dataSwimmingPools; std::unique_ptr dataSystemAvailabilityManager; diff --git a/src/EnergyPlus/HeatBalanceKivaManager.cc b/src/EnergyPlus/HeatBalanceKivaManager.cc index e3f637f3d93..f1e669e7c45 100644 --- a/src/EnergyPlus/HeatBalanceKivaManager.cc +++ b/src/EnergyPlus/HeatBalanceKivaManager.cc @@ -684,7 +684,7 @@ namespace HeatBalanceKivaManager { bool useDetailedExposedPerimeter = false; Real64 exposedFraction = 0.0; - auto &expPerimMap = SurfaceGeometry::exposedFoundationPerimeter.surfaceMap; + auto &expPerimMap = state.dataSurfaceGeometry->exposedFoundationPerimeter.surfaceMap; if (expPerimMap.count(surfNum) == 1) { userSetExposedPerimeter = true; useDetailedExposedPerimeter = expPerimMap[surfNum].useDetailedExposedPerimeter; @@ -1094,7 +1094,7 @@ namespace HeatBalanceKivaManager { // Start with steady-state solution kv.initGround(state, kivaWeather); } - calcKivaSurfaceResults(); + calcKivaSurfaceResults(state); } void KivaManager::calcKivaInstances(EnergyPlusData &state) @@ -1109,7 +1109,7 @@ namespace HeatBalanceKivaManager { } } - calcKivaSurfaceResults(); + calcKivaSurfaceResults(state); } void KivaInstanceMap::plotDomain() @@ -1195,14 +1195,14 @@ namespace HeatBalanceKivaManager { #endif } - void KivaManager::calcKivaSurfaceResults() + void KivaManager::calcKivaSurfaceResults(EnergyPlusData &state) { for (int surfNum = 1; surfNum <= (int)DataSurfaces::Surface.size(); ++surfNum) { if (DataSurfaces::Surface(surfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { std::string contextStr = "Surface=\"" + DataSurfaces::Surface(surfNum).Name + "\""; Kiva::setMessageCallback(kivaErrorCallback, &contextStr); surfaceMap[surfNum].calc_weighted_results(); - DataHeatBalance::HConvIn(surfNum) = SurfaceGeometry::kivaManager.surfaceMap[surfNum].results.hconv; + DataHeatBalance::HConvIn(surfNum) = state.dataSurfaceGeometry->kivaManager.surfaceMap[surfNum].results.hconv; } } Kiva::setMessageCallback(kivaErrorCallback, nullptr); diff --git a/src/EnergyPlus/HeatBalanceKivaManager.hh b/src/EnergyPlus/HeatBalanceKivaManager.hh index e7fc7570475..71d62ae6814 100644 --- a/src/EnergyPlus/HeatBalanceKivaManager.hh +++ b/src/EnergyPlus/HeatBalanceKivaManager.hh @@ -136,7 +136,7 @@ namespace HeatBalanceKivaManager { void defineDefaultFoundation(); void addDefaultFoundation(); int findFoundation(std::string const &name); - void calcKivaSurfaceResults(); + void calcKivaSurfaceResults(EnergyPlusData &state); KivaWeatherData kivaWeather; FoundationKiva defaultFoundation; diff --git a/src/EnergyPlus/HeatBalanceSurfaceManager.cc b/src/EnergyPlus/HeatBalanceSurfaceManager.cc index 660520b2952..d0144d5c0ad 100644 --- a/src/EnergyPlus/HeatBalanceSurfaceManager.cc +++ b/src/EnergyPlus/HeatBalanceSurfaceManager.cc @@ -2271,9 +2271,9 @@ namespace HeatBalanceSurfaceManager { // Initialize Kiva convection algorithms if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(3.076); - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_DEF; - SurfaceGeometry::kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(0.0); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].in = KIVA_CONST_CONV(3.076); + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].f = KIVA_HF_DEF; + state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out = KIVA_CONST_CONV(0.0); } // Initialize the flux histories @@ -6372,7 +6372,7 @@ namespace HeatBalanceSurfaceManager { // Initialize Kiva instances ground temperatures if (DataHeatBalance::AnyKiva) { - SurfaceGeometry::kivaManager.initKivaInstances(state); + state.dataSurfaceGeometry->kivaManager.initKivaInstances(state); } } if (!BeginEnvrnFlag) { @@ -6569,10 +6569,10 @@ namespace HeatBalanceSurfaceManager { // Calculate Kiva instances if (DataHeatBalance::AnyKiva) { - if (((SurfaceGeometry::kivaManager.settings.timestepType == HeatBalanceKivaManager::KivaManager::Settings::HOURLY && TimeStep == 1) || - SurfaceGeometry::kivaManager.settings.timestepType == HeatBalanceKivaManager::KivaManager::Settings::TIMESTEP) && + if (((state.dataSurfaceGeometry->kivaManager.settings.timestepType == HeatBalanceKivaManager::KivaManager::Settings::HOURLY && TimeStep == 1) || + state.dataSurfaceGeometry->kivaManager.settings.timestepType == HeatBalanceKivaManager::KivaManager::Settings::TIMESTEP) && !WarmupFlag) { - SurfaceGeometry::kivaManager.calcKivaInstances(state); + state.dataSurfaceGeometry->kivaManager.calcKivaInstances(state); } } @@ -6582,7 +6582,7 @@ namespace HeatBalanceSurfaceManager { TempInsOld = TempSurfIn; // Keep track of last iteration's temperature values if (DataHeatBalance::AnyKiva) { - for (auto &kivaSurf : SurfaceGeometry::kivaManager.surfaceMap) { + for (auto &kivaSurf : state.dataSurfaceGeometry->kivaManager.surfaceMap) { TempSurfIn(kivaSurf.first) = kivaSurf.second.results.Tavg - DataGlobalConstants::KelvinConv(); // TODO: Use average radiant temp? Trad? } } @@ -6591,7 +6591,7 @@ namespace HeatBalanceSurfaceManager { state, TempSurfIn, InsideSurfIterations, SurfNetLWRadToSurf, ZoneToResimulate, Inside); // Update the radiation balance if (DataHeatBalance::AnyKiva) { - for (auto &kivaSurf : SurfaceGeometry::kivaManager.surfaceMap) { + for (auto &kivaSurf : state.dataSurfaceGeometry->kivaManager.surfaceMap) { TempSurfIn(kivaSurf.first) = TempInsOld(kivaSurf.first); } } @@ -6874,8 +6874,8 @@ namespace HeatBalanceSurfaceManager { } else if (surface.HeatTransferAlgorithm == HeatTransferModel_Kiva) { // Read Kiva results for each surface - TempSurfInTmp(SurfNum) = SurfaceGeometry::kivaManager.surfaceMap[SurfNum].results.Tconv - DataGlobalConstants::KelvinConv(); - SurfOpaqInsFaceConductionFlux(SurfNum) = SurfaceGeometry::kivaManager.surfaceMap[SurfNum].results.qtot; + TempSurfInTmp(SurfNum) = state.dataSurfaceGeometry->kivaManager.surfaceMap[SurfNum].results.Tconv - DataGlobalConstants::KelvinConv(); + SurfOpaqInsFaceConductionFlux(SurfNum) = state.dataSurfaceGeometry->kivaManager.surfaceMap[SurfNum].results.qtot; SurfOpaqInsFaceConduction(SurfNum) = SurfOpaqInsFaceConductionFlux(SurfNum) * DataSurfaces::Surface(SurfNum).Area; TH11 = 0.0; diff --git a/src/EnergyPlus/SimulationManager.cc b/src/EnergyPlus/SimulationManager.cc index 45c7b7db208..b34b937b418 100644 --- a/src/EnergyPlus/SimulationManager.cc +++ b/src/EnergyPlus/SimulationManager.cc @@ -606,7 +606,7 @@ namespace SimulationManager { if (DataEnvironment::varyingLocationSchedIndexLat > 0 || DataEnvironment::varyingLocationSchedIndexLong > 0 || DataEnvironment::varyingOrientationSchedIndex > 0) { - WeatherManager::UpdateLocationAndOrientation(); + WeatherManager::UpdateLocationAndOrientation(state); } BeginTimeStepFlag = true; diff --git a/src/EnergyPlus/StateManagement.cc b/src/EnergyPlus/StateManagement.cc index 4651c500f8f..fbc59ccec27 100644 --- a/src/EnergyPlus/StateManagement.cc +++ b/src/EnergyPlus/StateManagement.cc @@ -212,7 +212,6 @@ #include #include #include -#include void EnergyPlus::clearAllStates(EnergyPlusData &state) { @@ -379,7 +378,6 @@ void EnergyPlus::clearAllStates(EnergyPlusData &state) SolarShading::clear_state(); SplitterComponent::clear_state(); SteamCoils::clear_state(); - SurfaceGeometry::clear_state(); UtilityRoutines::clear_state(); EIRPlantLoopHeatPumps::EIRPlantLoopHeatPump::clear_state(); ResultsFramework::clear_state(); diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 2ed9e6cd32a..a1eea2a3afe 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -103,120 +103,13 @@ namespace SurfaceGeometry { // PURPOSE OF THIS MODULE: // This module performs the functions required of the surface geometry. - // METHODOLOGY EMPLOYED: - // na - - // REFERENCES: none - - // OTHER NOTES: none - - // USE STATEMENTS: - // Use statements for data only modules - // Using/Aliasing using namespace DataGlobals; using namespace DataEnvironment; using namespace DataHeatBalance; using namespace DataSurfaces; using DataWindowEquivalentLayer::CFSMAXNL; - // Use statements for access to subroutines in other modules - // na - - // Data - // MODULE PARAMETER DEFINITIONS static std::string const BlankString; - Array1D_string const BaseSurfCls(3, {"WALL", "FLOOR", "ROOF"}); - Array1D_string const SubSurfCls(6, {"WINDOW", "DOOR", "GLASSDOOR", "SHADING", "TUBULARDAYLIGHTDOME", "TUBULARDAYLIGHTDIFFUSER"}); - Array1D_int const BaseSurfIDs(3, {SurfaceClass_Wall, SurfaceClass_Floor, SurfaceClass_Roof}); - - Array1D_int const SubSurfIDs( - 6, {SurfaceClass_Window, SurfaceClass_Door, SurfaceClass_GlassDoor, SurfaceClass_Shading, SurfaceClass_TDD_Dome, SurfaceClass_TDD_Diffuser}); - - int const UnenteredAdjacentZoneSurface(-998); // allows users to enter one zone surface ("Zone") - // referencing another in adjacent zone - int const UnreconciledZoneSurface(-999); // interim value between entering surfaces ("Surface") and reconciling - // surface names in other zones - - // DERIVED TYPE DEFINITIONS - - // MODULE VARIABLE DECLARATIONS: - - namespace { - // These were static variables within different functions. They were pulled out into the namespace - // to facilitate easier unit testing of those functions. - // These are purposefully not in the header file as an extern variable. No one outside of this should - // use these. They are cleared by clear_state() for use by unit tests, but normal simulations should be unaffected. - // This is purposefully in an anonymous namespace so nothing outside this implementation file can use it. - bool ProcessSurfaceVerticesOneTimeFlag(true); - int checkSubSurfAzTiltNormErrCount(0); - Array1D Xpsv; - Array1D Ypsv; - Array1D Zpsv; - - bool GetSurfaceDataOneTimeFlag(false); - std::unordered_map UniqueSurfaceNames; - bool firstTime(true); - bool noTransform(true); - bool CheckConvexityFirstTime(true); - } // namespace - - // Following are used only during getting vertices, so are module variables here. - Real64 CosBldgRelNorth(0.0); // Cosine of the building rotation (relative north) (includes appendix G rotation) - Real64 SinBldgRelNorth(0.0); // Sine of the building rotation (relative north) (includes appendix G rotation) - Real64 CosBldgRotAppGonly(0.0); // Cosine of the building rotation for appendix G only(relative north) - Real64 SinBldgRotAppGonly(0.0); // Sine of the building rotation for appendix G only (relative north) - Array1D CosZoneRelNorth; // Cosine of the zone rotation (relative north) - Array1D SinZoneRelNorth; // Sine of the zone rotation (relative north) - - bool NoGroundTempObjWarning(true); // This will cause a warning to be issued if surfaces with "Ground" - // outside environment are used but no ground temperature object was input. - bool NoFCGroundTempObjWarning(true); // This will cause a warning to be issued if surfaces with "GroundFCfactorMethod" - // outside environment are used but no FC ground temperatures was input. - bool - RectSurfRefWorldCoordSystem(false); // GlobalGeometryRules:Field Rectangular Surface Coordinate System (A5) = World (true) or Relative (false) - int Warning1Count(0); // counts of Modify Window 5/6 windows - int Warning2Count(0); // counts of overriding exterior windows with Window 5/6 glazing systems - int Warning3Count(0); // counts of overriding interior windows with Window 5/6 glazing systems - - // SUBROUTINE SPECIFICATIONS FOR MODULE SurfaceGeometry - - // Object Data - Array1D SurfaceTmp; // Allocated/Deallocated during input processing - HeatBalanceKivaManager::KivaManager kivaManager; - ExposedFoundationPerimeter exposedFoundationPerimeter; - - // Functions - - // Clears the global data in HeatBalanceManager. - // Needed for unit tests, should not be normally called. - void clear_state() - { - ProcessSurfaceVerticesOneTimeFlag = true; - checkSubSurfAzTiltNormErrCount = 0; - Xpsv.deallocate(); - Ypsv.deallocate(); - Zpsv.deallocate(); - // Following are used only during getting vertices, so are module variables here. - CosBldgRelNorth = 0.0; - SinBldgRelNorth = 0.0; - CosBldgRotAppGonly = 0.0; - SinBldgRotAppGonly = 0.0; - CosZoneRelNorth.deallocate(); - SinZoneRelNorth.deallocate(); - NoGroundTempObjWarning = true; - NoFCGroundTempObjWarning = true; - RectSurfRefWorldCoordSystem = false; - Warning1Count = 0; - Warning2Count = 0; - Warning3Count = 0; - SurfaceTmp.deallocate(); - GetSurfaceDataOneTimeFlag = false; - UniqueSurfaceNames.clear(); - kivaManager = HeatBalanceKivaManager::KivaManager(); - firstTime = true; - noTransform = true; - CheckConvexityFirstTime = true; - } void AllocateSurfaceWindows(int NumSurfaces) { SurfWinFrameQRadOutAbs.dimension(NumSurfaces, 0); @@ -420,29 +313,29 @@ namespace SurfaceGeometry { // as setting up DaylightingCoords // these include building north axis and Building Rotation for Appendix G - CosBldgRelNorth = std::cos(-(BuildingAzimuth + BuildingRotationAppendixG) * DataGlobalConstants::DegToRadians()); - SinBldgRelNorth = std::sin(-(BuildingAzimuth + BuildingRotationAppendixG) * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = std::cos(-(BuildingAzimuth + BuildingRotationAppendixG) * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinBldgRelNorth = std::sin(-(BuildingAzimuth + BuildingRotationAppendixG) * DataGlobalConstants::DegToRadians()); // these are only for Building Rotation for Appendix G when using world coordinate system - CosBldgRotAppGonly = std::cos(-BuildingRotationAppendixG * DataGlobalConstants::DegToRadians()); - SinBldgRotAppGonly = std::sin(-BuildingRotationAppendixG * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRotAppGonly = std::cos(-BuildingRotationAppendixG * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinBldgRotAppGonly = std::sin(-BuildingRotationAppendixG * DataGlobalConstants::DegToRadians()); - CosZoneRelNorth.allocate(NumOfZones); - SinZoneRelNorth.allocate(NumOfZones); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(NumOfZones); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(NumOfZones); ZoneCeilingHeightEntered.dimension(NumOfZones, false); ZoneCeilingArea.dimension(NumOfZones, 0.0); for (ZoneNum = 1; ZoneNum <= NumOfZones; ++ZoneNum) { - CosZoneRelNorth(ZoneNum) = std::cos(-Zone(ZoneNum).RelNorth * DataGlobalConstants::DegToRadians()); - SinZoneRelNorth(ZoneNum) = std::sin(-Zone(ZoneNum).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(ZoneNum) = std::cos(-Zone(ZoneNum).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(ZoneNum) = std::sin(-Zone(ZoneNum).RelNorth * DataGlobalConstants::DegToRadians()); } GetSurfaceData(state, ErrorsFound); if (ErrorsFound) { - CosZoneRelNorth.deallocate(); - SinZoneRelNorth.deallocate(); + state.dataSurfaceGeometry->CosZoneRelNorth.deallocate(); + state.dataSurfaceGeometry->SinZoneRelNorth.deallocate(); return; } @@ -454,8 +347,8 @@ namespace SurfaceGeometry { SetFlagForWindowConstructionWithShadeOrBlindLayer(state); - CosZoneRelNorth.deallocate(); - SinZoneRelNorth.deallocate(); + state.dataSurfaceGeometry->CosZoneRelNorth.deallocate(); + state.dataSurfaceGeometry->SinZoneRelNorth.deallocate(); AllocateModuleArrays(); // This needs to be moved to the main manager routine of SSG at a later date @@ -1118,10 +1011,10 @@ namespace SurfaceGeometry { // Get the total number of surfaces to allocate derived type and for surface loops - if (GetSurfaceDataOneTimeFlag) { + if (state.dataSurfaceGeometry->GetSurfaceDataOneTimeFlag) { return; } else { - GetSurfaceDataOneTimeFlag = true; + state.dataSurfaceGeometry->GetSurfaceDataOneTimeFlag = true; } GetGeometryParameters(state, ErrorsFound); @@ -1192,8 +1085,8 @@ namespace SurfaceGeometry { TotRectIZWindows + TotRectIZDoors + TotRectIZGlazedDoors + TotRectExtWalls + TotRectIntWalls + TotRectIZWalls + TotRectUGWalls + TotRectRoofs + TotRectCeilings + TotRectIZCeilings + TotRectGCFloors + TotRectIntFloors + TotRectIZFloors; - SurfaceTmp.allocate(TotSurfaces); // Allocate the Surface derived type appropriately - UniqueSurfaceNames.reserve(TotSurfaces); + state.dataSurfaceGeometry->SurfaceTmp.allocate(TotSurfaces); // Allocate the Surface derived type appropriately + state.dataSurfaceGeometry->UniqueSurfaceNames.reserve(TotSurfaces); // SurfaceTmp structure is allocated via derived type initialization. int NumSurfs = 0; @@ -1211,8 +1104,8 @@ namespace SurfaceGeometry { TotDetailedWalls, TotDetailedRoofs, TotDetailedFloors, - BaseSurfCls, - BaseSurfIDs, + state.dataSurfaceGeometry->BaseSurfCls, + state.dataSurfaceGeometry->BaseSurfIDs, NeedToAddSurfaces); GetRectSurfaces(state, @@ -1228,10 +1121,10 @@ namespace SurfaceGeometry { TotRectGCFloors, TotRectIntFloors, TotRectIZFloors, - BaseSurfIDs, + state.dataSurfaceGeometry->BaseSurfIDs, NeedToAddSurfaces); - GetHTSubSurfaceData(state, ErrorsFound, NumSurfs, TotHTSubs, SubSurfCls, SubSurfIDs, AddedSubSurfaces, NeedToAddSubSurfaces); + GetHTSubSurfaceData(state, ErrorsFound, NumSurfs, TotHTSubs, state.dataSurfaceGeometry->SubSurfCls, state.dataSurfaceGeometry->SubSurfIDs, AddedSubSurfaces, NeedToAddSubSurfaces); GetRectSubSurfaces(state, ErrorsFound, @@ -1242,7 +1135,7 @@ namespace SurfaceGeometry { TotRectIZWindows, TotRectIZDoors, TotRectIZGlazedDoors, - SubSurfIDs, + state.dataSurfaceGeometry->SubSurfIDs, AddedSubSurfaces, NeedToAddSubSurfaces); @@ -1265,7 +1158,7 @@ namespace SurfaceGeometry { // Have to make room for added surfaces, if needed FirstTotalSurfaces = NumSurfs + AddedSubSurfaces; if (NeedToAddSurfaces + NeedToAddSubSurfaces > 0) { - SurfaceTmp.redimension(TotSurfaces); + state.dataSurfaceGeometry->SurfaceTmp.redimension(TotSurfaces); } SurfaceWindow.allocate(TotSurfaces); @@ -1276,112 +1169,112 @@ namespace SurfaceGeometry { // Debug write(outputfiledebug,*) ' need to add ',NeedtoAddSurfaces+NeedToAddSubSurfaces if (NeedToAddSurfaces + NeedToAddSubSurfaces > 0) CurNewSurf = FirstTotalSurfaces; for (int SurfNum = 1; SurfNum <= FirstTotalSurfaces; ++SurfNum) { - if (SurfaceTmp(SurfNum).ExtBoundCond != UnenteredAdjacentZoneSurface) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond != state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface) continue; // Need to add surface ++CurNewSurf; // Debug write(outputfiledebug,*) ' adding surface=',curnewsurf - SurfaceTmp(CurNewSurf) = SurfaceTmp(SurfNum); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum); // Basic parameters are the same for both surfaces. - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); if (Found == 0) continue; - SurfaceTmp(CurNewSurf).Zone = Found; - SurfaceTmp(CurNewSurf).ZoneName = Zone(Found).Name; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Zone = Found; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ZoneName = Zone(Found).Name; // Reverse Construction - SurfaceTmp(CurNewSurf).Construction = AssignReverseConstructionNumber(state, SurfaceTmp(SurfNum).Construction, SurfError); - SurfaceTmp(CurNewSurf).ConstructionStoredInputValue = SurfaceTmp(CurNewSurf).Construction; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Construction = AssignReverseConstructionNumber(state, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction, SurfError); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ConstructionStoredInputValue = state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Construction; // Reverse Vertices - NVert = SurfaceTmp(SurfNum).Sides; - for (Vert = 1; Vert <= SurfaceTmp(SurfNum).Sides; ++Vert) { - SurfaceTmp(CurNewSurf).Vertex(Vert) = SurfaceTmp(SurfNum).Vertex(NVert); + NVert = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; + for (Vert = 1; Vert <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++Vert) { + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Vertex(Vert) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NVert); --NVert; } - if (SurfaceTmp(CurNewSurf).Sides > 2) { - CreateNewellAreaVector(SurfaceTmp(CurNewSurf).Vertex, SurfaceTmp(CurNewSurf).Sides, SurfaceTmp(CurNewSurf).NewellAreaVector); - SurfaceTmp(CurNewSurf).GrossArea = VecLength(SurfaceTmp(CurNewSurf).NewellAreaVector); - SurfaceTmp(CurNewSurf).Area = SurfaceTmp(CurNewSurf).GrossArea; - SurfaceTmp(CurNewSurf).NetAreaShadowCalc = SurfaceTmp(CurNewSurf).Area; + if (state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Sides > 2) { + CreateNewellAreaVector(state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Vertex, state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Sides, state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).GrossArea = VecLength(state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Area = state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Area; CreateNewellSurfaceNormalVector( - SurfaceTmp(CurNewSurf).Vertex, SurfaceTmp(CurNewSurf).Sides, SurfaceTmp(CurNewSurf).NewellSurfaceNormalVector); - DetermineAzimuthAndTilt(SurfaceTmp(CurNewSurf).Vertex, - SurfaceTmp(CurNewSurf).Sides, + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Vertex, state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Sides, state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).NewellSurfaceNormalVector); + DetermineAzimuthAndTilt(state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Vertex, + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Sides, SurfWorldAz, SurfTilt, - SurfaceTmp(CurNewSurf).lcsx, - SurfaceTmp(CurNewSurf).lcsy, - SurfaceTmp(CurNewSurf).lcsz, - SurfaceTmp(CurNewSurf).GrossArea, - SurfaceTmp(CurNewSurf).NewellSurfaceNormalVector); - SurfaceTmp(CurNewSurf).Azimuth = SurfWorldAz; - SurfaceTmp(CurNewSurf).Tilt = SurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).lcsx, + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).lcsy, + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).lcsz, + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).GrossArea, + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).NewellSurfaceNormalVector); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Azimuth = SurfWorldAz; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Tilt = SurfTilt; // Sine and cosine of azimuth and tilt - SurfaceTmp(CurNewSurf).SinAzim = std::sin(SurfWorldAz * DataGlobalConstants::DegToRadians()); - SurfaceTmp(CurNewSurf).CosAzim = std::cos(SurfWorldAz * DataGlobalConstants::DegToRadians()); - SurfaceTmp(CurNewSurf).SinTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); - SurfaceTmp(CurNewSurf).CosTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).SinAzim = std::sin(SurfWorldAz * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).CosAzim = std::cos(SurfWorldAz * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).SinTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).CosTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); // Outward normal unit vector (pointing away from room) - SurfaceTmp(CurNewSurf).OutNormVec = SurfaceTmp(CurNewSurf).NewellSurfaceNormalVector; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OutNormVec = state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).NewellSurfaceNormalVector; for (n = 1; n <= 3; ++n) { - if (std::abs(SurfaceTmp(CurNewSurf).OutNormVec(n) - 1.0) < 1.e-06) SurfaceTmp(CurNewSurf).OutNormVec(n) = +1.0; - if (std::abs(SurfaceTmp(CurNewSurf).OutNormVec(n) + 1.0) < 1.e-06) SurfaceTmp(CurNewSurf).OutNormVec(n) = -1.0; - if (std::abs(SurfaceTmp(CurNewSurf).OutNormVec(n)) < 1.e-06) SurfaceTmp(CurNewSurf).OutNormVec(n) = 0.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OutNormVec(n) - 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OutNormVec(n) = +1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OutNormVec(n) + 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OutNormVec(n) = -1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OutNormVec(n)) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OutNormVec(n) = 0.0; } // Can perform tests on this surface here - SurfaceTmp(CurNewSurf).ViewFactorSky = 0.5 * (1.0 + SurfaceTmp(CurNewSurf).CosTilt); - SurfaceTmp(CurNewSurf).ViewFactorGround = 0.5 * (1.0 - SurfaceTmp(CurNewSurf).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ViewFactorSky = 0.5 * (1.0 + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ViewFactorGround = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).CosTilt); // The following IR view factors are modified in subr. SkyDifSolarShading if there are shadowing // surfaces - SurfaceTmp(CurNewSurf).ViewFactorSkyIR = SurfaceTmp(CurNewSurf).ViewFactorSky; - SurfaceTmp(CurNewSurf).ViewFactorGroundIR = 0.5 * (1.0 - SurfaceTmp(CurNewSurf).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ViewFactorSkyIR = state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ViewFactorGroundIR = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).CosTilt); } // Change Name - SurfaceTmp(CurNewSurf).Name = "iz-" + SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Name = "iz-" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; // Debug write(outputfiledebug,*) ' new surf name=',TRIM(SurfaceTmp(CurNewSurf)%Name) // Debug write(outputfiledebug,*) ' new surf in zone=',TRIM(surfacetmp(curnewsurf)%zoneName) - SurfaceTmp(CurNewSurf).ExtBoundCond = UnreconciledZoneSurface; - SurfaceTmp(SurfNum).ExtBoundCond = UnreconciledZoneSurface; - SurfaceTmp(CurNewSurf).ExtBoundCondName = SurfaceTmp(SurfNum).Name; - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(CurNewSurf).Name; - if (SurfaceTmp(CurNewSurf).Class == SurfaceClass_Roof || SurfaceTmp(CurNewSurf).Class == SurfaceClass_Wall || - SurfaceTmp(CurNewSurf).Class == SurfaceClass_Floor) { + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ExtBoundCond = state.dataSurfaceGeometry->UnreconciledZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnreconciledZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Name; + if (state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Class == SurfaceClass_Roof || state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Class == SurfaceClass_Wall || + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Class == SurfaceClass_Floor) { // base surface - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Roof) { - SurfaceTmp(CurNewSurf).Class = SurfaceClass_Floor; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Roof) { + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Class = SurfaceClass_Floor; // Debug write(outputfiledebug,*) ' new surfaces is a floor' - } else if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor) { - SurfaceTmp(CurNewSurf).Class = SurfaceClass_Roof; + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor) { + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Class = SurfaceClass_Roof; // Debug write(outputfiledebug,*) ' new surfaces is a roof' } - SurfaceTmp(CurNewSurf).BaseSurf = CurNewSurf; - SurfaceTmp(CurNewSurf).BaseSurfName = SurfaceTmp(CurNewSurf).Name; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).BaseSurf = CurNewSurf; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Name; // Debug write(outputfiledebug,*) ' basesurf, extboundcondname=',TRIM(SurfaceTmp(CurNewSurf)%ExtBoundCondName) } else { // subsurface - Found = UtilityRoutines::FindItemInList("iz-" + SurfaceTmp(SurfNum).BaseSurfName, SurfaceTmp, FirstTotalSurfaces + CurNewSurf - 1); + Found = UtilityRoutines::FindItemInList("iz-" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName, state.dataSurfaceGeometry->SurfaceTmp, FirstTotalSurfaces + CurNewSurf - 1); if (Found > 0) { - SurfaceTmp(CurNewSurf).BaseSurfName = "iz-" + SurfaceTmp(SurfNum).BaseSurfName; - SurfaceTmp(CurNewSurf).BaseSurf = Found; - SurfaceTmp(Found).Area -= SurfaceTmp(CurNewSurf).Area; - if (SurfaceTmp(CurNewSurf).Class == SurfaceClass_Window || SurfaceTmp(CurNewSurf).Class == SurfaceClass_GlassDoor) { - SurfaceTmp(Found).NetAreaShadowCalc -= SurfaceTmp(CurNewSurf).Area / SurfaceTmp(CurNewSurf).Multiplier; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).BaseSurfName = "iz-" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).BaseSurf = Found; + state.dataSurfaceGeometry->SurfaceTmp(Found).Area -= state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Area; + if (state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Class == SurfaceClass_GlassDoor) { + state.dataSurfaceGeometry->SurfaceTmp(Found).NetAreaShadowCalc -= state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Area / state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Multiplier; } else { // Door, TDD:Diffuser, TDD:DOME - SurfaceTmp(Found).NetAreaShadowCalc -= SurfaceTmp(CurNewSurf).Area; - } - SurfaceTmp(CurNewSurf).ExtBoundCond = SurfaceTmp(Found).ExtBoundCond; - SurfaceTmp(CurNewSurf).ExtBoundCondName = SurfaceTmp(SurfNum).Name; - SurfaceTmp(CurNewSurf).ExtSolar = SurfaceTmp(Found).ExtSolar; - SurfaceTmp(CurNewSurf).ExtWind = SurfaceTmp(Found).ExtWind; - SurfaceTmp(CurNewSurf).Zone = SurfaceTmp(Found).Zone; - SurfaceTmp(CurNewSurf).ZoneName = SurfaceTmp(Found).ZoneName; - SurfaceTmp(CurNewSurf).OSCPtr = SurfaceTmp(Found).OSCPtr; + state.dataSurfaceGeometry->SurfaceTmp(Found).NetAreaShadowCalc -= state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Area; + } + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).Zone = state.dataSurfaceGeometry->SurfaceTmp(Found).Zone; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(Found).ZoneName; + state.dataSurfaceGeometry->SurfaceTmp(CurNewSurf).OSCPtr = state.dataSurfaceGeometry->SurfaceTmp(Found).OSCPtr; // Debug write(outputfiledebug,*) ' subsurf, extboundcondname=',TRIM(SurfaceTmp(CurNewSurf)%ExtBoundCondName) // Debug write(outputfiledebug,*) ' subsurf, basesurf=',TRIM('iz-'//SurfaceTmp(SurfNum)%BaseSurfName) } else { ShowSevereError(RoutineName + "Adding unentered subsurface, could not find base surface=" + "iz-" + - SurfaceTmp(SurfNum).BaseSurfName); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName); SurfError = true; } } @@ -1391,24 +1284,24 @@ namespace SurfaceGeometry { // sub-surfaces can be defined. Loop through surfaces and match with the sub-surface // names. for (int SurfNum = 1; SurfNum <= TotSurfaces; ++SurfNum) { - if (!SurfaceTmp(SurfNum).HeatTransSurf) continue; + if (!state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf) continue; // why are we doing this again? this should have already been done. - if (UtilityRoutines::SameString(SurfaceTmp(SurfNum).BaseSurfName, SurfaceTmp(SurfNum).Name)) { + if (UtilityRoutines::SameString(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name)) { Found = SurfNum; } else { - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).BaseSurfName, SurfaceTmp, TotSurfaces); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName, state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); } if (Found > 0) { - SurfaceTmp(SurfNum).BaseSurf = Found; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = Found; if (SurfNum != Found) { // for subsurfaces - if (SurfaceTmp(SurfNum).HeatTransSurf) ++SurfaceTmp(Found).NumSubSurfaces; - if (SurfaceTmp(SurfNum).Class < SurfaceClass_Window || SurfaceTmp(SurfNum).Class > SurfaceClass_TDD_Diffuser) { - if (SurfaceTmp(SurfNum).Class == 0) { - ShowSevereError(RoutineName + "Invalid SubSurface detected, Surface=" + SurfaceTmp(SurfNum).Name); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf) ++state.dataSurfaceGeometry->SurfaceTmp(Found).NumSubSurfaces; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class < SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class > SurfaceClass_TDD_Diffuser) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == 0) { + ShowSevereError(RoutineName + "Invalid SubSurface detected, Surface=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); } else { - ShowSevereError(RoutineName + "Invalid SubSurface detected, Surface=" + SurfaceTmp(SurfNum).Name + - ", class=" + BaseSurfCls(SurfaceTmp(SurfNum).Class) + " invalid class for subsurface"); + ShowSevereError(RoutineName + "Invalid SubSurface detected, Surface=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + ", class=" + state.dataSurfaceGeometry->BaseSurfCls(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class) + " invalid class for subsurface"); SurfError = true; } } @@ -1454,15 +1347,15 @@ namespace SurfaceGeometry { // Move all shading Surfaces to Front for (int SurfNum = 1; SurfNum <= TotSurfaces; ++SurfNum) { - if (SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_F && SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_B && - SurfaceTmp(SurfNum).Class != SurfaceClass_Shading) + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_F && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_B && + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Shading) continue; // A shading surface ++MovedSurfs; - Surface(MovedSurfs) = SurfaceTmp(SurfNum); - SurfaceTmp(SurfNum).Class = SurfaceClass_Moved; //'Moved' + Surface(MovedSurfs) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_Moved; //'Moved' // Store list of moved surface numbers in reporting order DataSurfaces::AllSurfaceListReportOrder.push_back(MovedSurfs); } @@ -1477,15 +1370,15 @@ namespace SurfaceGeometry { for (int SurfNum = 1; SurfNum <= TotSurfaces; ++SurfNum) { - if (SurfaceTmp(SurfNum).Zone == 0) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone == 0) continue; - if (!UtilityRoutines::SameString(SurfaceTmp(SurfNum).ZoneName, Zone(ZoneNum).Name)) continue; - if (SurfaceTmp(SurfNum).Class != BaseSurfIDs(Loop)) continue; + if (!UtilityRoutines::SameString(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName, Zone(ZoneNum).Name)) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != state.dataSurfaceGeometry->BaseSurfIDs(Loop)) continue; ++MovedSurfs; - Surface(MovedSurfs) = SurfaceTmp(SurfNum); - SurfaceTmp(SurfNum).Class = SurfaceClass_Moved; // 'Moved' - SurfaceTmp(SurfNum).BaseSurf = -1; // Default has base surface = base surface + Surface(MovedSurfs) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_Moved; // 'Moved' + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = -1; // Default has base surface = base surface BaseSurfNum = MovedSurfs; Surface(MovedSurfs).BaseSurf = BaseSurfNum; // Store list of moved surface numbers in order reporting order (subsurfaces follow their base surface) @@ -1494,10 +1387,10 @@ namespace SurfaceGeometry { // Find all subsurfaces to this surface - just to update the base surface number - don't move these yet for (int SubSurfNum = 1; SubSurfNum <= TotSurfaces; ++SubSurfNum) { - if (SurfaceTmp(SubSurfNum).Zone == 0) continue; - if (SurfaceTmp(SubSurfNum).BaseSurf != SurfNum) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Zone == 0) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).BaseSurf != SurfNum) continue; // Set BaseSurf to negative of new BaseSurfNum (to avoid confusion with other base surfaces) - SurfaceTmp(SubSurfNum).BaseSurf = -BaseSurfNum; + state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).BaseSurf = -BaseSurfNum; // Add original sub-surface numbers as placeholders in surface list for reporting DataSurfaces::AllSurfaceListReportOrder.push_back(-SubSurfNum); } @@ -1507,13 +1400,13 @@ namespace SurfaceGeometry { // Internal mass goes next for (int SurfNum = 1; SurfNum <= TotSurfaces; ++SurfNum) { - if (!UtilityRoutines::SameString(SurfaceTmp(SurfNum).ZoneName, Zone(ZoneNum).Name)) continue; - if (SurfaceTmp(SurfNum).Class != SurfaceClass_IntMass) continue; + if (!UtilityRoutines::SameString(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName, Zone(ZoneNum).Name)) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_IntMass) continue; ++MovedSurfs; - Surface(MovedSurfs) = SurfaceTmp(SurfNum); + Surface(MovedSurfs) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum); Surface(MovedSurfs).BaseSurf = MovedSurfs; - SurfaceTmp(SurfNum).Class = SurfaceClass_Moved; // 'Moved' + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_Moved; // 'Moved' // Store list of moved surface numbers in reporting order DataSurfaces::AllSurfaceListReportOrder.push_back(MovedSurfs); } @@ -1522,19 +1415,19 @@ namespace SurfaceGeometry { // includes SurfaceClass_TDD_Dome which transmits light but is not a window for heat balance purposes for (int SubSurfNum = 1; SubSurfNum <= TotSurfaces; ++SubSurfNum) { - if (SurfaceTmp(SubSurfNum).Class == SurfaceClass_Moved) continue; - if (SurfaceTmp(SubSurfNum).Zone != ZoneNum) continue; - if (SurfaceTmp(SubSurfNum).Class == SurfaceClass_Window) continue; - if (SurfaceTmp(SubSurfNum).Class == SurfaceClass_GlassDoor) continue; - if (SurfaceTmp(SubSurfNum).Class == SurfaceClass_TDD_Diffuser) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class == SurfaceClass_Moved) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Zone != ZoneNum) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class == SurfaceClass_Window) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class == SurfaceClass_GlassDoor) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class == SurfaceClass_TDD_Diffuser) continue; ++MovedSurfs; - Surface(MovedSurfs) = SurfaceTmp(SubSurfNum); - SurfaceTmp(SubSurfNum).Class = SurfaceClass_Moved; // 'Moved' + Surface(MovedSurfs) = state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum); + state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class = SurfaceClass_Moved; // 'Moved' // Reset BaseSurf to it's positive value (set to negative earlier) Surface(MovedSurfs).BaseSurf = -Surface(MovedSurfs).BaseSurf; - SurfaceTmp(SubSurfNum).BaseSurf = -1; + state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).BaseSurf = -1; // Find and replace negative SubSurfNum with new MovedSurfs num in surface list for reporting std::replace(DataSurfaces::AllSurfaceListReportOrder.begin(), DataSurfaces::AllSurfaceListReportOrder.end(), -SubSurfNum, MovedSurfs); } @@ -1542,18 +1435,18 @@ namespace SurfaceGeometry { // Last but not least, the window subsurfaces (includes SurfaceClass_TDD_Diffuser) for (int SubSurfNum = 1; SubSurfNum <= TotSurfaces; ++SubSurfNum) { - if (SurfaceTmp(SubSurfNum).Class == SurfaceClass_Moved) continue; - if (SurfaceTmp(SubSurfNum).Zone != ZoneNum) continue; - if ((SurfaceTmp(SubSurfNum).Class != SurfaceClass_Window) && (SurfaceTmp(SubSurfNum).Class != SurfaceClass_GlassDoor) && - (SurfaceTmp(SubSurfNum).Class != SurfaceClass_TDD_Diffuser)) + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class == SurfaceClass_Moved) continue; + if (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Zone != ZoneNum) continue; + if ((state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class != SurfaceClass_Window) && (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class != SurfaceClass_GlassDoor) && + (state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class != SurfaceClass_TDD_Diffuser)) continue; ++MovedSurfs; - Surface(MovedSurfs) = SurfaceTmp(SubSurfNum); - SurfaceTmp(SubSurfNum).Class = SurfaceClass_Moved; // 'Moved' + Surface(MovedSurfs) = state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum); + state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).Class = SurfaceClass_Moved; // 'Moved' // Reset BaseSurf to it's positive value (set to negative earlier) Surface(MovedSurfs).BaseSurf = -Surface(MovedSurfs).BaseSurf; - SurfaceTmp(SubSurfNum).BaseSurf = -1; + state.dataSurfaceGeometry->SurfaceTmp(SubSurfNum).BaseSurf = -1; // Find and replace negative SubSurfNum with new MovedSurfs num in surface list for reporting std::replace(DataSurfaces::AllSurfaceListReportOrder.begin(), DataSurfaces::AllSurfaceListReportOrder.end(), -SubSurfNum, MovedSurfs); } @@ -1563,17 +1456,17 @@ namespace SurfaceGeometry { ShowSevereError(format("{}Reordered # of Surfaces ({}) not = Total # of Surfaces ({})", RoutineName, MovedSurfs, TotSurfaces)); SurfError = true; for (int Loop = 1; Loop <= TotSurfaces; ++Loop) { - if (SurfaceTmp(Loop).Class != SurfaceClass_Moved) { - if (SurfaceTmp(Loop).Class > 100) { - ShowSevereError(RoutineName + "Error in Surface= \"" + SurfaceTmp(Loop).Name + "\" Class=" + - cSurfaceClass(SurfaceTmp(Loop).Class - 100) + " indicated Zone=\"" + SurfaceTmp(Loop).ZoneName + "\""); + if (state.dataSurfaceGeometry->SurfaceTmp(Loop).Class != SurfaceClass_Moved) { + if (state.dataSurfaceGeometry->SurfaceTmp(Loop).Class > 100) { + ShowSevereError(RoutineName + "Error in Surface= \"" + state.dataSurfaceGeometry->SurfaceTmp(Loop).Name + "\" Class=" + + cSurfaceClass(state.dataSurfaceGeometry->SurfaceTmp(Loop).Class - 100) + " indicated Zone=\"" + state.dataSurfaceGeometry->SurfaceTmp(Loop).ZoneName + "\""); } } } ShowWarningError(RoutineName + "Remaining surface checks will use \"reordered number of surfaces\", not number of original surfaces"); } - SurfaceTmp.deallocate(); // DeAllocate the Temp Surface derived type + state.dataSurfaceGeometry->SurfaceTmp.deallocate(); // DeAllocate the Temp Surface derived type // For each Base Surface Type (Wall, Floor, Roof) @@ -1583,7 +1476,7 @@ namespace SurfaceGeometry { if (Surface(SurfNum).Zone == 0) continue; - if (Surface(SurfNum).Class != BaseSurfIDs(Loop)) continue; + if (Surface(SurfNum).Class != state.dataSurfaceGeometry->BaseSurfIDs(Loop)) continue; // Find all subsurfaces to this surface for (int SubSurfNum = 1; SubSurfNum <= TotSurfaces; ++SubSurfNum) { @@ -1593,7 +1486,7 @@ namespace SurfaceGeometry { if (Surface(SubSurfNum).BaseSurf != SurfNum) continue; // Check facing angle of Sub compared to base - checkSubSurfAzTiltNorm(Surface(SurfNum), Surface(SubSurfNum), subSurfaceError); + checkSubSurfAzTiltNorm(state, Surface(SurfNum), Surface(SubSurfNum), subSurfaceError); if (subSurfaceError) SurfError = true; } } @@ -1609,7 +1502,7 @@ namespace SurfaceGeometry { // If other surface, match it up // Both interzone and "internal" surfaces have this pointer set // Internal surfaces point to themselves, Interzone to another - if (Surface(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { + if (Surface(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { if (not_blank(Surface(SurfNum).ExtBoundCondName)) { if (Surface(SurfNum).ExtBoundCondName == Surface(SurfNum).Name) { Found = SurfNum; @@ -1619,7 +1512,7 @@ namespace SurfaceGeometry { if (Found != 0) { Surface(SurfNum).ExtBoundCond = Found; // Check that matching surface is also "OtherZoneSurface" - if (Surface(Found).ExtBoundCond <= 0 && Surface(Found).ExtBoundCond != UnreconciledZoneSurface) { + if (Surface(Found).ExtBoundCond <= 0 && Surface(Found).ExtBoundCond != state.dataSurfaceGeometry->UnreconciledZoneSurface) { ShowSevereError(RoutineName + "Potential \"OtherZoneSurface\" is not matched correctly:"); ShowContinueError("Surface=" + Surface(SurfNum).Name + ", Zone=" + Surface(SurfNum).ZoneName); @@ -2218,7 +2111,7 @@ namespace SurfaceGeometry { if (Surface(SurfNum).HeatTransSurf && Surface(SurfNum).ExtBoundCond > 0) continue; if (Surface(SurfNum).HeatTransSurf && Surface(SurfNum).ExtBoundCond == Ground) continue; if (Surface(SurfNum).HeatTransSurf && Surface(SurfNum).ExtBoundCond == KivaFoundation) { - if (!ErrorsFound) kivaManager.foundationInputs[Surface(SurfNum).OSCPtr].surfaces.push_back(SurfNum); + if (!ErrorsFound) state.dataSurfaceGeometry->kivaManager.foundationInputs[Surface(SurfNum).OSCPtr].surfaces.push_back(SurfNum); continue; } if (Surface(SurfNum).HeatTransSurf && Surface(SurfNum).ExtBoundCond == OtherSideCoefNoCalcExt) continue; @@ -2258,22 +2151,22 @@ namespace SurfaceGeometry { // Note, could do same for Window Area and detecting if Interzone Surface in Zone - if (Warning1Count > 0) { - ShowWarningMessage(RoutineName + "Window dimensions differ from Window 5/6 data file dimensions, " + TrimSigDigits(Warning1Count) + + if (state.dataSurfaceGeometry->Warning1Count > 0) { + ShowWarningMessage(RoutineName + "Window dimensions differ from Window 5/6 data file dimensions, " + TrimSigDigits(state.dataSurfaceGeometry->Warning1Count) + " times."); ShowContinueError("This will affect the frame heat transfer calculation if the frame in the Data File entry"); ShowContinueError("is not uniform, i.e., has sections with different geometry and/or thermal properties."); ShowContinueError("For explicit details on each window, use Output:Diagnostics,DisplayExtraWarnings;"); } - if (Warning2Count > 0) { + if (state.dataSurfaceGeometry->Warning2Count > 0) { ShowWarningMessage(RoutineName + "Exterior Windows have been replaced with Window 5/6 two glazing systems, " + - TrimSigDigits(Warning2Count) + " times."); + TrimSigDigits(state.dataSurfaceGeometry->Warning2Count) + " times."); ShowContinueError("Note that originally entered dimensions are overridden."); ShowContinueError("For explicit details on each window, use Output:Diagnostics,DisplayExtraWarnings;"); } - if (Warning3Count > 0) { + if (state.dataSurfaceGeometry->Warning3Count > 0) { ShowWarningMessage(RoutineName + "Interior Windows have been replaced with Window 5/6 two glazing systems, " + - TrimSigDigits(Warning3Count) + " times."); + TrimSigDigits(state.dataSurfaceGeometry->Warning3Count) + " times."); ShowContinueError("Note that originally entered dimensions are overridden."); ShowContinueError("For explicit details on each window, use Output:Diagnostics,DisplayExtraWarnings;"); } @@ -2301,7 +2194,7 @@ namespace SurfaceGeometry { GetHTSurfExtVentedCavityData(state, ErrorsFound); - exposedFoundationPerimeter.getData(state, ErrorsFound); + state.dataSurfaceGeometry->exposedFoundationPerimeter.getData(state, ErrorsFound); GetSurfaceHeatTransferAlgorithmOverrides(state, ErrorsFound); @@ -2325,7 +2218,7 @@ namespace SurfaceGeometry { } } - void checkSubSurfAzTiltNorm(SurfaceData &baseSurface, // Base surface data (in) + void checkSubSurfAzTiltNorm(EnergyPlusData &state, SurfaceData &baseSurface, // Base surface data (in) SurfaceData &subSurface, // Subsurface data (in) bool &surfaceError // True if surface azimuths or tilts differ by more than error tolerance ) @@ -2370,8 +2263,8 @@ namespace SurfaceGeometry { " Azimuth = " + General::RoundSigDigits(baseSurface.Azimuth, 1)); } else if (((std::abs(baseSurface.Azimuth - subSurface.Azimuth) > warningTolerance) && !baseSurfHoriz) || (std::abs(baseSurface.Tilt - subSurface.Tilt) > warningTolerance)) { - ++checkSubSurfAzTiltNormErrCount; - if (checkSubSurfAzTiltNormErrCount == 1 && !DisplayExtraWarnings) { + ++state.dataSurfaceGeometry->checkSubSurfAzTiltNormErrCount; + if (state.dataSurfaceGeometry->checkSubSurfAzTiltNormErrCount == 1 && !DisplayExtraWarnings) { ShowWarningError("checkSubSurfAzTiltNorm: Some Outward Facing angles of subsurfaces differ more than " + General::RoundSigDigits(warningTolerance, 1) + " degrees from base surface."); ShowContinueError("...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual surfaces."); @@ -2565,19 +2458,19 @@ namespace SurfaceGeometry { OK = false; if (UtilityRoutines::SameString(GAlphas(5), "World") || UtilityRoutines::SameString(GAlphas(5), "Absolute")) { - RectSurfRefWorldCoordSystem = true; + state.dataSurfaceGeometry->RectSurfRefWorldCoordSystem = true; OutMsg += "WorldCoordinateSystem"; OK = true; } if (UtilityRoutines::SameString(GAlphas(5), "Relative") || GAlphas(5).empty()) { - RectSurfRefWorldCoordSystem = false; + state.dataSurfaceGeometry->RectSurfRefWorldCoordSystem = false; OutMsg += "RelativeToZoneOrigin"; OK = true; } if (!OK) { ShowWarningError(cCurrentModuleObject + ": Invalid " + cAlphaFieldNames(5) + '=' + GAlphas(5)); ShowContinueError(cAlphaFieldNames(5) + " defaults to \"RelativeToZoneOrigin\""); - RectSurfRefWorldCoordSystem = false; + state.dataSurfaceGeometry->RectSurfRefWorldCoordSystem = false; OutMsg += "RelativeToZoneOrigin"; } @@ -2600,7 +2493,7 @@ namespace SurfaceGeometry { ShowContinueError(cAlphaFieldNames(3) + "=\"" + GAlphas(3) + "\"; while "); ShowContinueError(cAlphaFieldNames(4) + "=\"" + GAlphas(4) + "\"."); } - if (RectSurfRefWorldCoordSystem) { + if (state.dataSurfaceGeometry->RectSurfRefWorldCoordSystem) { ShowWarningError(cCurrentModuleObject + ": Potential mismatch of coordinate specifications."); ShowContinueError(cAlphaFieldNames(3) + "=\"" + GAlphas(3) + "\"; while "); ShowContinueError(cAlphaFieldNames(5) + "=\"" + GAlphas(5) + "\"."); @@ -2612,7 +2505,7 @@ namespace SurfaceGeometry { if (Zone(ZoneNum).OriginY != 0.0) RelWarning = true; if (Zone(ZoneNum).OriginZ != 0.0) RelWarning = true; } - if (RelWarning && !RectSurfRefWorldCoordSystem) { + if (RelWarning && !state.dataSurfaceGeometry->RectSurfRefWorldCoordSystem) { ShowWarningError(cCurrentModuleObject + ": Potential mismatch of coordinate specifications. Note that the rectangular surfaces are relying on the default SurfaceGeometry for 'Relative to zone' coordinate."); ShowContinueError(cAlphaFieldNames(3) + "=\"" + GAlphas(3) + "\"; while "); if (GAlphas(5) == "RELATIVE") { @@ -2761,83 +2654,83 @@ namespace SurfaceGeometry { cNumericFieldNames); if (GlobalNames::VerifyUniqueInterObjectName( - UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type - SurfaceTmp(SurfNum).Class = ClassItem; - SurfaceTmp(SurfNum).HeatTransSurf = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = ClassItem; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = false; // Base transmittance of a shadowing (sub)surface if (!lAlphaFieldBlanks(2)) { // Schedule for a shadowing (sub)surface - SurfaceTmp(SurfNum).SchedShadowSurfIndex = GetScheduleIndex(state, cAlphaArgs(2)); - if (SurfaceTmp(SurfNum).SchedShadowSurfIndex == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex = GetScheduleIndex(state, cAlphaArgs(2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex == 0) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + " not found=" + cAlphaArgs(2)); ErrorsFound = true; } } else { - SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; } - if (SurfaceTmp(SurfNum).SchedShadowSurfIndex != 0) { - if (!CheckScheduleValueMinMax(SurfaceTmp(SurfNum).SchedShadowSurfIndex, ">=", 0.0, "<=", 1.0)) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex != 0) { + if (!CheckScheduleValueMinMax(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex, ">=", 0.0, "<=", 1.0)) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", values not in range [0,1]."); ErrorsFound = true; } - SchedMinValue = GetScheduleMinValue(SurfaceTmp(SurfNum).SchedShadowSurfIndex); - SurfaceTmp(SurfNum).SchedMinValue = SchedMinValue; - SchedMaxValue = GetScheduleMaxValue(SurfaceTmp(SurfNum).SchedShadowSurfIndex); + SchedMinValue = GetScheduleMinValue(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMinValue = SchedMinValue; + SchedMaxValue = GetScheduleMaxValue(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex); if (SchedMinValue == 1.0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", is always transparent."); - SurfaceTmp(SurfNum).IsTransparent = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).IsTransparent = true; } if (SchedMinValue < 0.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", has schedule values < 0."); ShowContinueError("...Schedule values < 0 have no meaning for shading elements."); } if (SchedMaxValue > 1.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", has schedule values > 1."); ShowContinueError("...Schedule values > 1 have no meaning for shading elements."); } if (std::abs(SchedMinValue - SchedMaxValue) > 1.0e-6) { - SurfaceTmp(SurfNum).ShadowSurfSchedVaries = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfSchedVaries = true; ShadingTransmittanceVaries = true; } } if (lNumericFieldBlanks(1) || rNumericArgs(1) == DataGlobalConstants::AutoCalculate()) { numSides = (NumNumbers - 1) / 3; - SurfaceTmp(SurfNum).Sides = numSides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = numSides; if (mod(NumNumbers - 1, 3) != 0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + - " not even multiple of 3. Will read in " + TrimSigDigits(SurfaceTmp(SurfNum).Sides)); + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + + " not even multiple of 3. Will read in " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); } if (numSides < 3) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + - " (autocalculate) must be >= 3. Only " + TrimSigDigits(SurfaceTmp(SurfNum).Sides) + " provided."); + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + + " (autocalculate) must be >= 3. Only " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + " provided."); ErrorsFound = true; continue; } } else { numSides = (NumNumbers - 1) / 3; - SurfaceTmp(SurfNum).Sides = rNumericArgs(1); - if (numSides > SurfaceTmp(SurfNum).Sides) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", field " + cNumericFieldNames(1) + '=' + - TrimSigDigits(SurfaceTmp(SurfNum).Sides)); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = rNumericArgs(1); + if (numSides > state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", field " + cNumericFieldNames(1) + '=' + + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); ShowContinueError("...but " + TrimSigDigits(numSides) + " were entered. Only the indicated " + cNumericFieldNames(1) + " will be used."); } } - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); - GetVertices(state, SurfNum, SurfaceTmp(SurfNum).Sides, rNumericArgs({2, _})); - CheckConvexity(SurfNum, SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); + GetVertices(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, rNumericArgs({2, _})); + CheckConvexity(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); if (MakeMirroredDetachedShading) { - MakeMirrorSurface(SurfNum); + MakeMirrorSurface(state, SurfNum); } } @@ -2917,38 +2810,38 @@ namespace SurfaceGeometry { cNumericFieldNames); if (GlobalNames::VerifyUniqueInterObjectName( - UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type - SurfaceTmp(SurfNum).Class = ClassItem; - SurfaceTmp(SurfNum).HeatTransSurf = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = ClassItem; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = false; - SurfaceTmp(SurfNum).Azimuth = rNumericArgs(1); - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B && !WorldCoordSystem) { - SurfaceTmp(SurfNum).Azimuth += BuildingAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = rNumericArgs(1); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B && !WorldCoordSystem) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth += BuildingAzimuth; } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { - SurfaceTmp(SurfNum).Azimuth += BuildingRotationAppendixG; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth += BuildingRotationAppendixG; } - SurfaceTmp(SurfNum).Tilt = rNumericArgs(2); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = rNumericArgs(2); - SurfaceTmp(SurfNum).Sides = 4; - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = 4; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); MakeRectangularVertices( - state, SurfNum, rNumericArgs(3), rNumericArgs(4), rNumericArgs(5), rNumericArgs(6), rNumericArgs(7), RectSurfRefWorldCoordSystem); + state, SurfNum, rNumericArgs(3), rNumericArgs(4), rNumericArgs(5), rNumericArgs(6), rNumericArgs(7), state.dataSurfaceGeometry->RectSurfRefWorldCoordSystem); - if (SurfaceTmp(SurfNum).Area <= 0.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(SurfaceTmp(SurfNum).Area, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area <= 0.0) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area, 2)); ErrorsFound = true; } if (MakeMirroredDetachedShading) { - MakeMirrorSurface(SurfNum); + MakeMirrorSurface(state, SurfNum); } } @@ -3154,37 +3047,37 @@ namespace SurfaceGeometry { cNumericFieldNames); if (GlobalNames::VerifyUniqueInterObjectName( - UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type ArgPointer = 2; if (Item == 1) { if (cAlphaArgs(2) == "CEILING") cAlphaArgs(2) = "ROOF"; ClassItem = UtilityRoutines::FindItemInList(cAlphaArgs(2), BaseSurfCls, 3); if (ClassItem == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ErrorsFound = true; } else { - SurfaceTmp(SurfNum).Class = BaseSurfIDs(ClassItem); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = BaseSurfIDs(ClassItem); } ++ArgPointer; } else { - SurfaceTmp(SurfNum).Class = BaseSurfIDs(ClassItem); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = BaseSurfIDs(ClassItem); } - SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(ArgPointer), state.dataConstruction->Construct, TotConstructs); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(ArgPointer), state.dataConstruction->Construct, TotConstructs); - if (SurfaceTmp(SurfNum).Construction == 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction == 0) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); - } else if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsWindow) { + } else if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsWindow) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\" - has Window materials."); if (Item == 1) { ShowContinueError("...because " + cAlphaFieldNames(2) + '=' + cAlphaArgs(2)); @@ -3192,55 +3085,55 @@ namespace SurfaceGeometry { ShowContinueError("...because Surface Type=" + BaseSurfCls(ClassItem)); } } else { - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).IsUsed = true; - SurfaceTmp(SurfNum).ConstructionStoredInputValue = SurfaceTmp(SurfNum).Construction; + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).IsUsed = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ConstructionStoredInputValue = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; } - SurfaceTmp(SurfNum).HeatTransSurf = true; - SurfaceTmp(SurfNum).BaseSurf = SurfNum; - SurfaceTmp(SurfNum).BaseSurfName = SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = SurfNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; ++ArgPointer; - SurfaceTmp(SurfNum).ZoneName = cAlphaArgs(ArgPointer); - ZoneNum = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ZoneName, Zone, NumOfZones); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = cAlphaArgs(ArgPointer); + ZoneNum = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName, Zone, NumOfZones); if (ZoneNum != 0) { - SurfaceTmp(SurfNum).Zone = ZoneNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = ZoneNum; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); - SurfaceTmp(SurfNum).Class += 100; - SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class += 100; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; ErrorsFound = true; } // Get the ExteriorBoundaryCondition flag from input There are 4 conditions that // can take place. The conditions are set with a 0, -1, or -2, or all of the // zone names have to be looked at and generate the interzone array number ++ArgPointer; - SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(ArgPointer + 1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(ArgPointer + 1); if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "Outdoors")) { - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "Adiabatic")) { - SurfaceTmp(SurfNum).ExtBoundCond = UnreconciledZoneSurface; - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnreconciledZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "Ground")) { - SurfaceTmp(SurfNum).ExtBoundCond = Ground; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = Ground; - if (NoGroundTempObjWarning) { + if (state.dataSurfaceGeometry->NoGroundTempObjWarning) { if (!GroundTempObjInput) { ShowWarningError("GetHTSurfaceData: Surfaces with interface to Ground found but no \"Ground Temperatures\" were input."); ShowContinueError("Found first in surface=" + cAlphaArgs(1)); ShowContinueError("Defaults, constant throughout the year of (" + RoundSigDigits(GroundTemp, 1) + ") will be used."); } - NoGroundTempObjWarning = false; + state.dataSurfaceGeometry->NoGroundTempObjWarning = false; } // Added for FCfactor method } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "GroundFCfactorMethod")) { - SurfaceTmp(SurfNum).ExtBoundCond = GroundFCfactorMethod; - if (NoFCGroundTempObjWarning) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = GroundFCfactorMethod; + if (state.dataSurfaceGeometry->NoFCGroundTempObjWarning) { if (!FCGroundTemps) { ShowSevereError("GetHTSurfaceData: Surfaces with interface to GroundFCfactorMethod found but no \"FC Ground " "Temperatures\" were input."); @@ -3248,37 +3141,37 @@ namespace SurfaceGeometry { ShowContinueError( "Either add a \"Site:GroundTemperature:FCfactorMethod\" object or use a weather file with Ground Temperatures."); ErrorsFound = true; - NoFCGroundTempObjWarning = false; + state.dataSurfaceGeometry->NoFCGroundTempObjWarning = false; } } - if (SurfaceTmp(SurfNum).Construction > 0) { - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && !state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer)); - ShowContinueError("Construction=\"" + state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).Name + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction > 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && !state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer)); + ShowContinueError("Construction=\"" + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).Name + "\" is not type Construction:CfactorUndergroundWall."); ErrorsFound = true; } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && !state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer)); - ShowContinueError("Construction=\"" + state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).Name + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && !state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer)); + ShowContinueError("Construction=\"" + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).Name + "\" is not type Construction:FfactorGroundFloor."); ErrorsFound = true; } } } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "OtherSideCoefficients")) { - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ExtBoundCondName, OSC, TotOSC); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName, OSC, TotOSC); if (Found == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer + 1) + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer + 1) + "=\"" + cAlphaArgs(ArgPointer + 1) + "\"."); ShowContinueError(" no OtherSideCoefficients of that name."); ErrorsFound = true; } else { - SurfaceTmp(SurfNum).OSCPtr = Found; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCPtr = Found; if (OSC(Found).SurfFilmCoef > 0.0) { - SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefCalcExt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefCalcExt; } else { - SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefNoCalcExt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefNoCalcExt; } } @@ -3287,10 +3180,10 @@ namespace SurfaceGeometry { // this will be found on the second pass through the surface input // for flagging, set the value to UnreconciledZoneSurface // name (ExtBoundCondName) will be validated later. - SurfaceTmp(SurfNum).ExtBoundCond = UnreconciledZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnreconciledZoneSurface; if (lAlphaFieldBlanks(ArgPointer + 1)) { - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(SurfNum).Name; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer + 1) + + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer + 1) + "=."); ShowContinueError(".." + cAlphaFieldNames(ArgPointer) + "=\"Surface\" must be non-blank."); ShowContinueError("..This surface will become an adiabatic surface - no doors/windows allowed."); @@ -3299,13 +3192,13 @@ namespace SurfaceGeometry { } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "Zone")) { // This is the code for an unmatched "other surface" // will be set up later. - SurfaceTmp(SurfNum).ExtBoundCond = UnenteredAdjacentZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface; // check OutsideFaceEnvironment for legal zone - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); ++NeedToAddSurfaces; if (Found == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); ShowContinueError("..Referenced as Zone for this surface."); ErrorsFound = true; @@ -3314,7 +3207,7 @@ namespace SurfaceGeometry { } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "Foundation")) { if (!state.dataWeatherManager->WeatherFileExists) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", using \"Foundation\" type Outside Boundary Condition requires specification of a weather file"); ShowContinueError("Either place in.epw in the working directory or specify a weather file on the command line using -w " "/path/to/weather.epw"); @@ -3324,41 +3217,41 @@ namespace SurfaceGeometry { // Find foundation object, if blank use default if (lAlphaFieldBlanks(ArgPointer + 1)) { - if (!kivaManager.defaultSet) { + if (!state.dataSurfaceGeometry->kivaManager.defaultSet) { // Apply default foundation if no other foundation object specified - if (kivaManager.foundationInputs.size() == 0) { - kivaManager.defineDefaultFoundation(); + if (state.dataSurfaceGeometry->kivaManager.foundationInputs.size() == 0) { + state.dataSurfaceGeometry->kivaManager.defineDefaultFoundation(); } - kivaManager.addDefaultFoundation(); + state.dataSurfaceGeometry->kivaManager.addDefaultFoundation(); } - SurfaceTmp(SurfNum).OSCPtr = kivaManager.defaultIndex; // Reuse OSC pointer...shouldn't be used for non OSC surfaces anyway. + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCPtr = state.dataSurfaceGeometry->kivaManager.defaultIndex; // Reuse OSC pointer...shouldn't be used for non OSC surfaces anyway. } else { - Found = kivaManager.findFoundation(SurfaceTmp(SurfNum).ExtBoundCondName); - if (Found != (int)kivaManager.foundationInputs.size()) { - SurfaceTmp(SurfNum).OSCPtr = Found; + Found = state.dataSurfaceGeometry->kivaManager.findFoundation(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName); + if (Found != (int)state.dataSurfaceGeometry->kivaManager.foundationInputs.size()) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCPtr = Found; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer + 1) + "=\"" + cAlphaArgs(ArgPointer + 1) + "\"."); ErrorsFound = true; } } - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).SourceSinkPresent) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).SourceSinkPresent) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", construction may not have an internal source/sink"); ErrorsFound = true; } - SurfaceTmp(SurfNum).ExtBoundCond = KivaFoundation; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = KivaFoundation; } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "OtherSideConditionsModel")) { - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ExtBoundCondName, OSCM, TotOSCM); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName, OSCM, TotOSCM); if (Found == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer + 1) + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer + 1) + "=\"" + cAlphaArgs(ArgPointer + 1) + "\"."); ErrorsFound = true; } - SurfaceTmp(SurfNum).OSCMPtr = Found; - SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCondModeledExt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCMPtr = Found; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCondModeledExt; } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "GroundSlabPreprocessorAverage") || UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "GroundSlabPreprocessorCore") || @@ -3367,13 +3260,13 @@ namespace SurfaceGeometry { UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "GroundBasementPreprocessorAverageWall") || UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "GroundBasementPreprocessorUpperWall") || UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "GroundBasementPreprocessorLowerWall")) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); ShowContinueError("The ExpandObjects program has not been run or is not in your EnergyPlus.exe folder."); ErrorsFound = true; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); ShowContinueError("Should be one of \"Outdoors\", \"Adiabatic\", Ground\", \"Surface\", \"OtherSideCoefficients\", " "\"OtherSideConditionsModel\" or \"Zone\""); @@ -3383,18 +3276,18 @@ namespace SurfaceGeometry { ArgPointer += 2; // Set the logical flag for the exterior solar if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "SunExposed")) { - SurfaceTmp(SurfNum).ExtSolar = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = true; - if ((SurfaceTmp(SurfNum).ExtBoundCond != ExternalEnvironment) && (SurfaceTmp(SurfNum).ExtBoundCond != OtherSideCondModeledExt)) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(ArgPointer) + "=\"" + + if ((state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond != ExternalEnvironment) && (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond != OtherSideCondModeledExt)) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); ShowContinueError("..This surface is not exposed to External Environment. Sun exposure has no effect."); } } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "NoSun")) { - SurfaceTmp(SurfNum).ExtSolar = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = false; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); ErrorsFound = true; } @@ -3402,82 +3295,82 @@ namespace SurfaceGeometry { ++ArgPointer; // Set the logical flag for the exterior wind if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "WindExposed")) { - SurfaceTmp(SurfNum).ExtWind = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = true; } else if (UtilityRoutines::SameString(cAlphaArgs(ArgPointer), "NoWind")) { - SurfaceTmp(SurfNum).ExtWind = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = false; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(ArgPointer) + "=\"" + cAlphaArgs(ArgPointer) + "\"."); ErrorsFound = true; } // Set the logical flag for the EcoRoof presented, this is only based on the flag in the construction type - if (SurfaceTmp(SurfNum).Construction > 0) SurfaceTmp(SurfNum).ExtEcoRoof = state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsEcoRoof; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction > 0) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtEcoRoof = state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsEcoRoof; - SurfaceTmp(SurfNum).ViewFactorGround = rNumericArgs(1); - if (lNumericFieldBlanks(1)) SurfaceTmp(SurfNum).ViewFactorGround = DataGlobalConstants::AutoCalculate(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = rNumericArgs(1); + if (lNumericFieldBlanks(1)) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = DataGlobalConstants::AutoCalculate(); if (lNumericFieldBlanks(2) || rNumericArgs(2) == DataGlobalConstants::AutoCalculate()) { numSides = (SurfaceNumProp - 2) / 3; - SurfaceTmp(SurfNum).Sides = numSides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = numSides; if (mod(SurfaceNumProp - 2, 3) != 0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(2) + - " not even multiple of 3. Will read in " + TrimSigDigits(SurfaceTmp(SurfNum).Sides)); + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(2) + + " not even multiple of 3. Will read in " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); } if (numSides < 3) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(2) + - " (autocalculate) must be >= 3. Only " + TrimSigDigits(SurfaceTmp(SurfNum).Sides) + " provided."); + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(2) + + " (autocalculate) must be >= 3. Only " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + " provided."); ErrorsFound = true; continue; } } else { numSides = (SurfaceNumProp - 2) / 3; - SurfaceTmp(SurfNum).Sides = rNumericArgs(2); - if (numSides > SurfaceTmp(SurfNum).Sides) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", field " + cNumericFieldNames(2) + '=' + - TrimSigDigits(SurfaceTmp(SurfNum).Sides)); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = rNumericArgs(2); + if (numSides > state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", field " + cNumericFieldNames(2) + '=' + + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); ShowContinueError("...but " + TrimSigDigits(numSides) + " were entered. Only the indicated " + cNumericFieldNames(2) + " will be used."); } } - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); - SurfaceTmp(SurfNum).NewVertex.allocate(SurfaceTmp(SurfNum).Sides); - GetVertices(state, SurfNum, SurfaceTmp(SurfNum).Sides, rNumericArgs({3, _})); - if (SurfaceTmp(SurfNum).Area <= 0.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(SurfaceTmp(SurfNum).Area, 2)); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewVertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); + GetVertices(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, rNumericArgs({3, _})); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area <= 0.0) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area, 2)); ErrorsFound = true; } - CheckConvexity(SurfNum, SurfaceTmp(SurfNum).Sides); + CheckConvexity(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); if (UtilityRoutines::SameString(cAlphaArgs(5), "Surface")) { - if (SurfaceTmp(SurfNum).Sides != static_cast(SurfaceTmp(SurfNum).Vertex.size())) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", After CheckConvexity, mismatch between Sides (" + TrimSigDigits(SurfaceTmp(SurfNum).Sides) + - ") and size of Vertex (" + TrimSigDigits(SurfaceTmp(SurfNum).Vertex.size()) + ")."); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides != static_cast(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.size())) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", After CheckConvexity, mismatch between Sides (" + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + + ") and size of Vertex (" + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.size()) + ")."); ShowContinueError("CheckConvexity is used to verify the convexity of a surface and detect collinear points."); ErrorsFound = true; } } - if (SurfaceTmp(SurfNum).Construction > 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction > 0) { // Check wall height for the CFactor walls - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall) { - if (std::abs(SurfaceTmp(SurfNum).Height - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).Height) > 0.05) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", underground Wall Height = " + TrimSigDigits(SurfaceTmp(SurfNum).Height, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall) { + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height - state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).Height) > 0.05) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", underground Wall Height = " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height, 2)); ShowContinueError("..which does not match its construction height."); } } // Check area and perimeter for the FFactor floors - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor) { - if (std::abs(SurfaceTmp(SurfNum).Area - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).Area) > 0.1) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", underground Floor Area = " + TrimSigDigits(SurfaceTmp(SurfNum).Area, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor) { + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area - state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).Area) > 0.1) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", underground Floor Area = " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area, 2)); ShowContinueError("..which does not match its construction area."); } - if (SurfaceTmp(SurfNum).Perimeter < state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).PerimeterExposed - 0.1) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", underground Floor Perimeter = " + TrimSigDigits(SurfaceTmp(SurfNum).Perimeter, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter < state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).PerimeterExposed - 0.1) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", underground Floor Perimeter = " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter, 2)); ShowContinueError("..which is less than its construction exposed perimeter."); } } @@ -3487,19 +3380,19 @@ namespace SurfaceGeometry { // Check number of Vertex between base surface and Outside Boundary surface int ExtSurfNum; for (int i = 1; i <= SurfNum; i++) { - if (SurfaceTmp(i).ExtBoundCond == UnreconciledZoneSurface && SurfaceTmp(i).ExtBoundCondName != "") { - ExtSurfNum = UtilityRoutines::FindItemInList(SurfaceTmp(i).ExtBoundCondName, SurfaceTmp); + if (state.dataSurfaceGeometry->SurfaceTmp(i).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface && state.dataSurfaceGeometry->SurfaceTmp(i).ExtBoundCondName != "") { + ExtSurfNum = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(i).ExtBoundCondName, state.dataSurfaceGeometry->SurfaceTmp); // If we cannot find the referenced surface if (ExtSurfNum == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(i).Name + - "\" references an outside boundary surface that cannot be found:" + SurfaceTmp(i).ExtBoundCondName); + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(i).Name + + "\" references an outside boundary surface that cannot be found:" + state.dataSurfaceGeometry->SurfaceTmp(i).ExtBoundCondName); ErrorsFound = true; // If vertex size mistmatch - } else if (SurfaceTmp(i).Vertex.size() != SurfaceTmp(ExtSurfNum).Vertex.size()) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(i).Name + "\", Vertex size mismatch between base surface :" + - SurfaceTmp(i).Name + " and outside boundary surface: " + SurfaceTmp(ExtSurfNum).Name); - ShowContinueError("The vertex sizes are " + TrimSigDigits(SurfaceTmp(i).Vertex.size()) + " for base surface and " + - TrimSigDigits(SurfaceTmp(ExtSurfNum).Vertex.size()) + " for outside boundary surface. Please check inputs."); + } else if (state.dataSurfaceGeometry->SurfaceTmp(i).Vertex.size() != state.dataSurfaceGeometry->SurfaceTmp(ExtSurfNum).Vertex.size()) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(i).Name + "\", Vertex size mismatch between base surface :" + + state.dataSurfaceGeometry->SurfaceTmp(i).Name + " and outside boundary surface: " + state.dataSurfaceGeometry->SurfaceTmp(ExtSurfNum).Name); + ShowContinueError("The vertex sizes are " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(i).Vertex.size()) + " for base surface and " + + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(ExtSurfNum).Vertex.size()) + " for outside boundary surface. Please check inputs."); ErrorsFound = true; } } @@ -3577,13 +3470,13 @@ namespace SurfaceGeometry { ItemsToGet = TotRectIntWalls; GettingIZSurfaces = false; OtherSurfaceField = 0; - ExtBoundCondition = UnreconciledZoneSurface; + ExtBoundCondition = state.dataSurfaceGeometry->UnreconciledZoneSurface; ClassItem = 1; } else if (Item == 3) { ItemsToGet = TotRectIZWalls; GettingIZSurfaces = true; OtherSurfaceField = 4; - ExtBoundCondition = UnreconciledZoneSurface; + ExtBoundCondition = state.dataSurfaceGeometry->UnreconciledZoneSurface; ClassItem = 1; } else if (Item == 4) { ItemsToGet = TotRectUGWalls; @@ -3601,13 +3494,13 @@ namespace SurfaceGeometry { ItemsToGet = TotRectCeilings; GettingIZSurfaces = false; OtherSurfaceField = 0; - ExtBoundCondition = UnreconciledZoneSurface; + ExtBoundCondition = state.dataSurfaceGeometry->UnreconciledZoneSurface; ClassItem = 3; } else if (Item == 7) { ItemsToGet = TotRectIZCeilings; GettingIZSurfaces = false; OtherSurfaceField = 4; - ExtBoundCondition = UnreconciledZoneSurface; + ExtBoundCondition = state.dataSurfaceGeometry->UnreconciledZoneSurface; ClassItem = 3; } else if (Item == 8) { ItemsToGet = TotRectGCFloors; @@ -3619,13 +3512,13 @@ namespace SurfaceGeometry { ItemsToGet = TotRectIntFloors; GettingIZSurfaces = false; OtherSurfaceField = 0; - ExtBoundCondition = UnreconciledZoneSurface; + ExtBoundCondition = state.dataSurfaceGeometry->UnreconciledZoneSurface; ClassItem = 2; } else { // IF (Item == 10) THEN ItemsToGet = TotRectIZFloors; GettingIZSurfaces = true; OtherSurfaceField = 4; - ExtBoundCondition = UnreconciledZoneSurface; + ExtBoundCondition = state.dataSurfaceGeometry->UnreconciledZoneSurface; ClassItem = 2; } @@ -3644,7 +3537,7 @@ namespace SurfaceGeometry { cNumericFieldNames); if (GlobalNames::VerifyUniqueInterObjectName( - UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } @@ -3655,98 +3548,98 @@ namespace SurfaceGeometry { } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type - SurfaceTmp(SurfNum).Class = BaseSurfIDs(ClassItem); // Set class number + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = BaseSurfIDs(ClassItem); // Set class number - SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataConstruction->Construct, TotConstructs); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataConstruction->Construct, TotConstructs); - if (SurfaceTmp(SurfNum).Construction == 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction == 0) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\"."); - } else if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsWindow) { + } else if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsWindow) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(2) + "\" - has Window materials."); ShowContinueError("...because " + cAlphaFieldNames(2) + '=' + cAlphaArgs(2)); } else { - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).IsUsed = true; - SurfaceTmp(SurfNum).ConstructionStoredInputValue = SurfaceTmp(SurfNum).Construction; + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).IsUsed = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ConstructionStoredInputValue = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; } - SurfaceTmp(SurfNum).HeatTransSurf = true; - SurfaceTmp(SurfNum).BaseSurf = SurfNum; - SurfaceTmp(SurfNum).BaseSurfName = SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = SurfNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; - SurfaceTmp(SurfNum).ZoneName = cAlphaArgs(3); - ZoneNum = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ZoneName, Zone, NumOfZones); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = cAlphaArgs(3); + ZoneNum = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName, Zone, NumOfZones); if (ZoneNum != 0) { - SurfaceTmp(SurfNum).Zone = ZoneNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = ZoneNum; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3) + "\"."); - SurfaceTmp(SurfNum).Class += 100; - SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class += 100; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; ErrorsFound = true; } - SurfaceTmp(SurfNum).ExtBoundCond = ExtBoundCondition; - if (SurfaceTmp(SurfNum).Construction > 0) { - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall && - SurfaceTmp(SurfNum).ExtBoundCond == Ground) { - SurfaceTmp(SurfNum).ExtBoundCond = GroundFCfactorMethod; - } else if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExtBoundCondition; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction > 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall && + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == Ground) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = GroundFCfactorMethod; + } else if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsCfactorWall) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Construction type is \"Construction:CfactorUndergroundWall\" but invalid for this object."); } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor && - SurfaceTmp(SurfNum).ExtBoundCond == Ground) { - SurfaceTmp(SurfNum).ExtBoundCond = GroundFCfactorMethod; - } else if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor && + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == Ground) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = GroundFCfactorMethod; + } else if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsFfactorFloor) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Construction type is \"Construction:FfactorGroundFloor\" but invalid for this object."); } } - SurfaceTmp(SurfNum).ExtSolar = false; - SurfaceTmp(SurfNum).ExtWind = false; - SurfaceTmp(SurfNum).ViewFactorGround = DataGlobalConstants::AutoCalculate(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = DataGlobalConstants::AutoCalculate(); - if (SurfaceTmp(SurfNum).ExtBoundCond == ExternalEnvironment) { - SurfaceTmp(SurfNum).ExtSolar = true; - SurfaceTmp(SurfNum).ExtWind = true; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == ExternalEnvironment) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = true; // Set the logical flag for the EcoRoof presented, this is only based on the flag in the construction type - if (SurfaceTmp(SurfNum).Construction > 0) - SurfaceTmp(SurfNum).ExtEcoRoof = state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsEcoRoof; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction > 0) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtEcoRoof = state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsEcoRoof; - } else if (SurfaceTmp(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { if (GettingIZSurfaces) { - SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(OtherSurfaceField); - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(OtherSurfaceField); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); // see if match to zone, then it's an unentered other surface, else reconciled later if (Found > 0) { ++NeedToAddSurfaces; - SurfaceTmp(SurfNum).ExtBoundCond = UnenteredAdjacentZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface; } } else { - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; } - } else if (SurfaceTmp(SurfNum).ExtBoundCond == Ground) { + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == Ground) { - if (NoGroundTempObjWarning) { + if (state.dataSurfaceGeometry->NoGroundTempObjWarning) { if (!GroundTempObjInput) { ShowWarningError("GetRectSurfaces: Surfaces with interface to Ground found but no \"Ground Temperatures\" were input."); ShowContinueError("Found first in surface=" + cAlphaArgs(1)); ShowContinueError("Defaults, constant throughout the year of (" + RoundSigDigits(GroundTemp, 1) + ") will be used."); } - NoGroundTempObjWarning = false; + state.dataSurfaceGeometry->NoGroundTempObjWarning = false; } - } else if (SurfaceTmp(SurfNum).ExtBoundCond == GroundFCfactorMethod) { - if (NoFCGroundTempObjWarning) { + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == GroundFCfactorMethod) { + if (state.dataSurfaceGeometry->NoFCGroundTempObjWarning) { if (!FCGroundTemps) { ShowSevereError("GetRectSurfaces: Surfaces with interface to GroundFCfactorMethod found but no \"FC Ground " "Temperatures\" were input."); @@ -3754,54 +3647,54 @@ namespace SurfaceGeometry { ShowContinueError( "Either add a \"Site:GroundTemperature:FCfactorMethod\" object or use a weather file with Ground Temperatures."); ErrorsFound = true; - NoFCGroundTempObjWarning = false; + state.dataSurfaceGeometry->NoFCGroundTempObjWarning = false; } } } // ... End of the ExtBoundCond logical IF Block - SurfaceTmp(SurfNum).Azimuth = rNumericArgs(1); - SurfaceTmp(SurfNum).Tilt = rNumericArgs(2); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = rNumericArgs(1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = rNumericArgs(2); if (!WorldCoordSystem) { if (ZoneNum != 0) { - SurfaceTmp(SurfNum).Azimuth += BuildingAzimuth + Zone(ZoneNum).RelNorth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth += BuildingAzimuth + Zone(ZoneNum).RelNorth; } } if (ZoneNum != 0) { - SurfaceTmp(SurfNum).Azimuth += BuildingRotationAppendixG; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth += BuildingRotationAppendixG; } - SurfaceTmp(SurfNum).Sides = 4; - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = 4; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); MakeRectangularVertices( - state, SurfNum, rNumericArgs(3), rNumericArgs(4), rNumericArgs(5), rNumericArgs(6), rNumericArgs(7), RectSurfRefWorldCoordSystem); + state, SurfNum, rNumericArgs(3), rNumericArgs(4), rNumericArgs(5), rNumericArgs(6), rNumericArgs(7), state.dataSurfaceGeometry->RectSurfRefWorldCoordSystem); - if (SurfaceTmp(SurfNum).Area <= 0.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(SurfaceTmp(SurfNum).Area, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area <= 0.0) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area, 2)); ErrorsFound = true; } // Check wall height for the CFactor walls - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && SurfaceTmp(SurfNum).ExtBoundCond == GroundFCfactorMethod) { - if (std::abs(SurfaceTmp(SurfNum).Height - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).Height) > 0.05) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", underground Wall Height = " + TrimSigDigits(SurfaceTmp(SurfNum).Height, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Wall && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == GroundFCfactorMethod) { + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height - state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).Height) > 0.05) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", underground Wall Height = " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height, 2)); ShowContinueError("..which deos not match its construction height."); } } // Check area and perimeter for the FFactor floors - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && SurfaceTmp(SurfNum).ExtBoundCond == GroundFCfactorMethod) { - if (std::abs(SurfaceTmp(SurfNum).Area - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).Area) > 0.1) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", underground Floor Area = " + TrimSigDigits(SurfaceTmp(SurfNum).Area, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == GroundFCfactorMethod) { + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area - state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).Area) > 0.1) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", underground Floor Area = " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area, 2)); ShowContinueError("..which does not match its construction area."); } - if (SurfaceTmp(SurfNum).Perimeter < state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).PerimeterExposed - 0.1) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", underground Floor Perimeter = " + TrimSigDigits(SurfaceTmp(SurfNum).Perimeter, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter < state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).PerimeterExposed - 0.1) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", underground Floor Perimeter = " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter, 2)); ShowContinueError("..which is less than its construction exposed perimeter."); } } @@ -3867,34 +3760,34 @@ namespace SurfaceGeometry { int n; int Vrt; - if (SurfaceTmp(SurfNum).Zone == 0 && - (SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_F && SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_B)) + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone == 0 && + (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_F && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_B)) return; - SurfaceTmp(SurfNum).Height = Height; - SurfaceTmp(SurfNum).Width = Length; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height = Height; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Width = Length; - SurfAzimuth = SurfaceTmp(SurfNum).Azimuth; - SurfTilt = SurfaceTmp(SurfNum).Tilt; + SurfAzimuth = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth; + SurfTilt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt; CosSurfAzimuth = std::cos(SurfAzimuth * DataGlobalConstants::DegToRadians()); SinSurfAzimuth = std::sin(SurfAzimuth * DataGlobalConstants::DegToRadians()); CosSurfTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); SinSurfTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); if (!SurfWorldCoordSystem) { - if (SurfaceTmp(SurfNum).Zone > 0) { - Xb = XCoord * CosZoneRelNorth(SurfaceTmp(SurfNum).Zone) - YCoord * SinZoneRelNorth(SurfaceTmp(SurfNum).Zone) + - Zone(SurfaceTmp(SurfNum).Zone).OriginX; - Yb = XCoord * SinZoneRelNorth(SurfaceTmp(SurfNum).Zone) + YCoord * CosZoneRelNorth(SurfaceTmp(SurfNum).Zone) + - Zone(SurfaceTmp(SurfNum).Zone).OriginY; - XLLC = Xb * CosBldgRelNorth - Yb * SinBldgRelNorth; - YLLC = Xb * SinBldgRelNorth + Yb * CosBldgRelNorth; - ZLLC = ZCoord + Zone(SurfaceTmp(SurfNum).Zone).OriginZ; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone > 0) { + Xb = XCoord * state.dataSurfaceGeometry->CosZoneRelNorth(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone) - YCoord * state.dataSurfaceGeometry->SinZoneRelNorth(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone) + + Zone(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone).OriginX; + Yb = XCoord * state.dataSurfaceGeometry->SinZoneRelNorth(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone) + YCoord * state.dataSurfaceGeometry->CosZoneRelNorth(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone) + + Zone(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone).OriginY; + XLLC = Xb * state.dataSurfaceGeometry->CosBldgRelNorth - Yb * state.dataSurfaceGeometry->SinBldgRelNorth; + YLLC = Xb * state.dataSurfaceGeometry->SinBldgRelNorth + Yb * state.dataSurfaceGeometry->CosBldgRelNorth; + ZLLC = ZCoord + Zone(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone).OriginZ; } else { - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { Xb = XCoord; Yb = YCoord; - XLLC = Xb * CosBldgRelNorth - Yb * SinBldgRelNorth; - YLLC = Xb * SinBldgRelNorth + Yb * CosBldgRelNorth; + XLLC = Xb * state.dataSurfaceGeometry->CosBldgRelNorth - Yb * state.dataSurfaceGeometry->SinBldgRelNorth; + YLLC = Xb * state.dataSurfaceGeometry->SinBldgRelNorth + Yb * state.dataSurfaceGeometry->CosBldgRelNorth; ZLLC = ZCoord; } else { XLLC = XCoord; @@ -3907,9 +3800,9 @@ namespace SurfaceGeometry { Xb = XCoord; Yb = YCoord; ZLLC = ZCoord; - if (SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_F) { - XLLC = Xb * CosBldgRotAppGonly - Yb * SinBldgRotAppGonly; - YLLC = Xb * SinBldgRotAppGonly + Yb * CosBldgRotAppGonly; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Detached_F) { + XLLC = Xb * state.dataSurfaceGeometry->CosBldgRotAppGonly - Yb * state.dataSurfaceGeometry->SinBldgRotAppGonly; + YLLC = Xb * state.dataSurfaceGeometry->SinBldgRotAppGonly + Yb * state.dataSurfaceGeometry->CosBldgRotAppGonly; } else { XLLC = Xb; YLLC = Yb; @@ -3925,41 +3818,41 @@ namespace SurfaceGeometry { YY(3) = 0.0; YY(2) = 0.0; - for (n = 1; n <= SurfaceTmp(SurfNum).Sides; ++n) { + for (n = 1; n <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++n) { Vrt = n; - SurfaceTmp(SurfNum).Vertex(Vrt).x = XLLC - XX(n) * CosSurfAzimuth - YY(n) * CosSurfTilt * SinSurfAzimuth; - SurfaceTmp(SurfNum).Vertex(Vrt).y = YLLC + XX(n) * SinSurfAzimuth - YY(n) * CosSurfTilt * CosSurfAzimuth; - SurfaceTmp(SurfNum).Vertex(Vrt).z = ZLLC + YY(n) * SinSurfTilt; - } - - CreateNewellAreaVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellAreaVector); - SurfaceTmp(SurfNum).GrossArea = VecLength(SurfaceTmp(SurfNum).NewellAreaVector); - SurfaceTmp(SurfNum).Area = SurfaceTmp(SurfNum).GrossArea; - SurfaceTmp(SurfNum).NetAreaShadowCalc = SurfaceTmp(SurfNum).Area; - CreateNewellSurfaceNormalVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - DetermineAzimuthAndTilt(SurfaceTmp(SurfNum).Vertex, - SurfaceTmp(SurfNum).Sides, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).x = XLLC - XX(n) * CosSurfAzimuth - YY(n) * CosSurfTilt * SinSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).y = YLLC + XX(n) * SinSurfAzimuth - YY(n) * CosSurfTilt * CosSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).z = ZLLC + YY(n) * SinSurfTilt; + } + + CreateNewellAreaVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea = VecLength(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + CreateNewellSurfaceNormalVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + DetermineAzimuthAndTilt(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, SurfAzimuth, SurfTilt, - SurfaceTmp(SurfNum).lcsx, - SurfaceTmp(SurfNum).lcsy, - SurfaceTmp(SurfNum).lcsz, - SurfaceTmp(SurfNum).GrossArea, - SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - SurfaceTmp(SurfNum).Azimuth = SurfAzimuth; - SurfaceTmp(SurfNum).Tilt = SurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsx, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsy, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsz, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = SurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = SurfTilt; // Sine and cosine of azimuth and tilt - SurfaceTmp(SurfNum).SinAzim = SinSurfAzimuth; - SurfaceTmp(SurfNum).CosAzim = CosSurfAzimuth; - SurfaceTmp(SurfNum).SinTilt = SinSurfTilt; - SurfaceTmp(SurfNum).CosTilt = CosSurfTilt; - SurfaceTmp(SurfNum).ViewFactorGround = 0.5 * (1.0 - SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim = SinSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim = CosSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt = SinSurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt = CosSurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); // Outward normal unit vector (pointing away from room) - SurfaceTmp(SurfNum).OutNormVec = SurfaceTmp(SurfNum).NewellSurfaceNormalVector; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector; for (n = 1; n <= 3; ++n) { - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; } // IF (SurfaceTmp(SurfNum)%Class == SurfaceClass_Roof .and. SurfTilt > 80.) THEN @@ -3978,21 +3871,21 @@ namespace SurfaceGeometry { // ENDIF // Can perform tests on this surface here - SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); // The following IR view factors are modified in subr. SkyDifSolarShading if there are shadowing // surfaces - SurfaceTmp(SurfNum).ViewFactorSkyIR = SurfaceTmp(SurfNum).ViewFactorSky; - SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSkyIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); - Perimeter = distance(SurfaceTmp(SurfNum).Vertex(SurfaceTmp(SurfNum).Sides), SurfaceTmp(SurfNum).Vertex(1)); - for (Vrt = 2; Vrt <= SurfaceTmp(SurfNum).Sides; ++Vrt) { - Perimeter += distance(SurfaceTmp(SurfNum).Vertex(Vrt), SurfaceTmp(SurfNum).Vertex(Vrt - 1)); + Perimeter = distance(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides), state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1)); + for (Vrt = 2; Vrt <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++Vrt) { + Perimeter += distance(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt), state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt - 1)); } - SurfaceTmp(SurfNum).Perimeter = Perimeter; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter = Perimeter; // Call to transform vertices - TransformVertsByAspect(state, SurfNum, SurfaceTmp(SurfNum).Sides); + TransformVertsByAspect(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); } void GetHTSubSurfaceData(EnergyPlusData &state, @@ -4137,223 +4030,223 @@ namespace SurfaceGeometry { cAlphaFieldNames, cNumericFieldNames); - if (GlobalNames::VerifyUniqueInterObjectName(UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + if (GlobalNames::VerifyUniqueInterObjectName(state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } if (SurfaceNumProp < 12) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", Too few number of numeric args=[" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Too few number of numeric args=[" + TrimSigDigits(SurfaceNumProp) + "]."); ErrorsFound = true; } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type ValidChk = UtilityRoutines::FindItemInList(cAlphaArgs(2), SubSurfCls, 6); if (ValidChk == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ErrorsFound = true; } else { - SurfaceTmp(SurfNum).Class = SubSurfIDs(ValidChk); // Set class number + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SubSurfIDs(ValidChk); // Set class number } - SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(3), state.dataConstruction->Construct, TotConstructs); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(3), state.dataConstruction->Construct, TotConstructs); - if (SurfaceTmp(SurfNum).Construction == 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction == 0) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3) + "\"."); } else { - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).IsUsed = true; - SurfaceTmp(SurfNum).ConstructionStoredInputValue = SurfaceTmp(SurfNum).Construction; + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).IsUsed = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ConstructionStoredInputValue = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || - SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser || SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Dome) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Dome) { - if (SurfaceTmp(SurfNum).Construction != 0) { - if (!state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsWindow) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction != 0) { + if (!state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsWindow) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\" has an opaque surface construction; it should have a window construction."); } - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).SourceSinkPresent) { + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).SourceSinkPresent) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\": Windows are not allowed to have embedded sources/sinks"); } } - } else if (SurfaceTmp(SurfNum).Construction != 0) { - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsWindow) { + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction != 0) { + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsWindow) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3) + "\" - has Window materials."); ShowContinueError("...because " + cAlphaFieldNames(2) + '=' + cAlphaArgs(2)); } } - SurfaceTmp(SurfNum).HeatTransSurf = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = true; - SurfaceTmp(SurfNum).BaseSurfName = cAlphaArgs(4); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = cAlphaArgs(4); // The subsurface inherits properties from the base surface // Exterior conditions, Zone, etc. // We can figure out the base surface though, because they've all been entered - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).BaseSurfName, SurfaceTmp, TotSurfaces); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName, state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); if (Found > 0) { - SurfaceTmp(SurfNum).BaseSurf = Found; - SurfaceTmp(SurfNum).ExtBoundCond = SurfaceTmp(Found).ExtBoundCond; - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(Found).ExtBoundCondName; - SurfaceTmp(SurfNum).ExtSolar = SurfaceTmp(Found).ExtSolar; - SurfaceTmp(SurfNum).ExtWind = SurfaceTmp(Found).ExtWind; - SurfaceTmp(SurfNum).Zone = SurfaceTmp(Found).Zone; - SurfaceTmp(SurfNum).ZoneName = SurfaceTmp(Found).ZoneName; - SurfaceTmp(SurfNum).OSCPtr = SurfaceTmp(Found).OSCPtr; - if (SurfaceTmp(Found).ExtBoundCond == UnreconciledZoneSurface && - SurfaceTmp(Found).ExtBoundCondName == SurfaceTmp(Found).Name) { // Adiabatic surface, no windows or doors allowed - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(4) + "=\"" + + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = Found; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCondName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = state.dataSurfaceGeometry->SurfaceTmp(Found).Zone; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(Found).ZoneName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCPtr = state.dataSurfaceGeometry->SurfaceTmp(Found).OSCPtr; + if (state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface && + state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCondName == state.dataSurfaceGeometry->SurfaceTmp(Found).Name) { // Adiabatic surface, no windows or doors allowed + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(4) + "=\"" + cAlphaArgs(4) + "\"."); ShowContinueError("... adiabatic surfaces cannot have windows or doors."); ShowContinueError("... no solar transmission will result for these windows or doors. You must have interior windows or doors on " "Interzone surfaces for transmission to result."); } } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(4) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(4) + "=\"" + cAlphaArgs(4)); - SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; ErrorsFound = true; } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Dome || SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser) { - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Dome || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; } - if (SurfaceTmp(SurfNum).ExtBoundCond == ExternalEnvironment) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == ExternalEnvironment) { if (!lAlphaFieldBlanks(5)) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid field " + cAlphaFieldNames(5)); + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid field " + cAlphaFieldNames(5)); ShowContinueError("...when Base surface uses \"Outdoors\" as " + cAlphaFieldNames(5) + ", subsurfaces need to be blank to inherit the outdoor characteristics."); ShowContinueError("...Surface external characteristics changed to reflect base surface."); } } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { // "Surface" Base Surface + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { // "Surface" Base Surface if (!lAlphaFieldBlanks(5)) { - SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(5); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(5); } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid blank " + cAlphaFieldNames(5)); + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid blank " + cAlphaFieldNames(5)); ShowContinueError("...when Base surface uses \"Surface\" as " + cAlphaFieldNames(5) + ", subsurfaces must also specify specific surfaces in the adjacent zone."); - SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(5); // putting it as blank will not confuse things later. + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(5); // putting it as blank will not confuse things later. ErrorsFound = true; } } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnenteredAdjacentZoneSurface) { // "Zone" - unmatched interior surface + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface) { // "Zone" - unmatched interior surface ++NeedToAddSurfaces; // ignoring window5datafiles for now -- will need to add. } - if (SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefNoCalcExt || SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefCalcExt) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefNoCalcExt || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefCalcExt) { if (!lAlphaFieldBlanks(5)) { // Otherside Coef special Name Found = UtilityRoutines::FindItemInList(cAlphaArgs(5), OSC, TotOSC); if (Found == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(5) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(5) + "=\"" + cAlphaArgs(5) + "\"."); ShowContinueError("...base surface requires that this subsurface have OtherSideCoefficients -- not found."); ErrorsFound = true; } else { // found // The following allows for a subsurface that has different characteristics than // the base surface with OtherSide Coeff -- do we want that or is it an error? - SurfaceTmp(SurfNum).OSCPtr = Found; - SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(5); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCPtr = Found; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(5); if (OSC(Found).SurfFilmCoef > 0.0) { - SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefCalcExt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefCalcExt; } else { - SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefNoCalcExt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = OtherSideCoefNoCalcExt; } } } } - if (SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCondModeledExt) { - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCondModeledExt) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; } - if (SurfaceTmp(SurfNum).ExtBoundCondName == BlankString) { - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(SurfNum).Name; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName == BlankString) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; } - SurfaceTmp(SurfNum).ViewFactorGround = rNumericArgs(1); - if (lNumericFieldBlanks(1)) SurfaceTmp(SurfNum).ViewFactorGround = DataGlobalConstants::AutoCalculate(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = rNumericArgs(1); + if (lNumericFieldBlanks(1)) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = DataGlobalConstants::AutoCalculate(); if (lNumericFieldBlanks(3) || rNumericArgs(3) == DataGlobalConstants::AutoCalculate()) { rNumericArgs(3) = (SurfaceNumProp - 3) / 3; - SurfaceTmp(SurfNum).Sides = rNumericArgs(3); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = rNumericArgs(3); if (mod(SurfaceNumProp - 3, 3) != 0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(3) + - " not even multiple of 3. Will read in " + TrimSigDigits(SurfaceTmp(SurfNum).Sides)); + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(3) + + " not even multiple of 3. Will read in " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); } if (rNumericArgs(3) < 3) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(3) + - " (autocalculate) must be >= 3. Only " + TrimSigDigits(SurfaceTmp(SurfNum).Sides) + " provided."); + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(3) + + " (autocalculate) must be >= 3. Only " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + " provided."); ErrorsFound = true; continue; } } else { numSides = (SurfaceNumProp - 2) / 3; - SurfaceTmp(SurfNum).Sides = rNumericArgs(3); - if (numSides > SurfaceTmp(SurfNum).Sides) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", field " + cNumericFieldNames(3) + '=' + - TrimSigDigits(SurfaceTmp(SurfNum).Sides)); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = rNumericArgs(3); + if (numSides > state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) { + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", field " + cNumericFieldNames(3) + '=' + + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); ShowContinueError("...but " + TrimSigDigits(numSides) + " were entered. Only the indicated " + cNumericFieldNames(3) + " will be used."); } } - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || - SurfaceTmp(SurfNum).Class == SurfaceClass_Door) - SurfaceTmp(SurfNum).Multiplier = int(rNumericArgs(2)); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Door) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier = int(rNumericArgs(2)); // Only windows, glass doors and doors can have Multiplier > 1: - if ((SurfaceTmp(SurfNum).Class != SurfaceClass_Window && SurfaceTmp(SurfNum).Class != SurfaceClass_GlassDoor && - SurfaceTmp(SurfNum).Class != SurfaceClass_Door) && + if ((state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Window && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_GlassDoor && + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Door) && rNumericArgs(2) > 1.0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cNumericFieldNames(2) + "=[" + + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cNumericFieldNames(2) + "=[" + TrimSigDigits(rNumericArgs(2), 1) + "]."); ShowContinueError("...because " + cAlphaFieldNames(2) + '=' + cAlphaArgs(2) + " multiplier will be set to 1.0."); - SurfaceTmp(SurfNum).Multiplier = 1.0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier = 1.0; } - GetVertices(state, SurfNum, SurfaceTmp(SurfNum).Sides, rNumericArgs({4, _})); + GetVertices(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, rNumericArgs({4, _})); - CheckConvexity(SurfNum, SurfaceTmp(SurfNum).Sides); - SurfaceTmp(SurfNum).windowShadingControlList.clear(); - SurfaceTmp(SurfNum).activeWindowShadingControl = 0; - SurfaceTmp(SurfNum).HasShadeControl = false; + CheckConvexity(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList.clear(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeWindowShadingControl = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HasShadeControl = false; - SurfaceTmp(SurfNum).shadedConstructionList.clear(); - SurfaceTmp(SurfNum).activeShadedConstruction = 0; - SurfaceTmp(SurfNum).shadedStormWinConstructionList.clear(); - SurfaceTmp(SurfNum).activeStormWinShadedConstruction= 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedConstructionList.clear(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedStormWinConstructionList.clear(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeStormWinShadedConstruction= 0; - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || - SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser || SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Dome) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Dome) { - if (SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefNoCalcExt || SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefCalcExt) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefNoCalcExt || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefCalcExt) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Other side coefficients are not allowed with windows."); ErrorsFound = true; } - if (SurfaceTmp(SurfNum).ExtBoundCond == Ground) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == Ground) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Exterior boundary condition = Ground is not allowed with windows."); ErrorsFound = true; } - if (SurfaceTmp(SurfNum).ExtBoundCond == KivaFoundation) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == KivaFoundation) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Exterior boundary condition = Foundation is not allowed with windows."); ErrorsFound = true; } @@ -4362,14 +4255,14 @@ namespace SurfaceGeometry { CheckWindowShadingControlFrameDivider(state, "GetHTSubSurfaceData", ErrorsFound, SurfNum, 6); - if (SurfaceTmp(SurfNum).Sides == 3) { // Triangular window + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides == 3) { // Triangular window if (!cAlphaArgs(6).empty()) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(6) + "=\"" + + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(6) + "=\"" + cAlphaArgs(6) + "\"."); ShowContinueError(".. because it is a triangular window and cannot have a frame or divider or reveal reflection."); ShowContinueError("Frame, divider and reveal reflection will be ignored for this window."); } - SurfaceTmp(SurfNum).FrameDivider = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider = 0; } // End of check if window is triangular or rectangular } // check on non-opaquedoor subsurfaces @@ -4492,7 +4385,7 @@ namespace SurfaceGeometry { cNumericFieldNames); if (GlobalNames::VerifyUniqueInterObjectName( - UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } @@ -4503,106 +4396,106 @@ namespace SurfaceGeometry { } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type - SurfaceTmp(SurfNum).Class = SubSurfIDs(ClassItem); // Set class number + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SubSurfIDs(ClassItem); // Set class number - SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataConstruction->Construct, TotConstructs); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataConstruction->Construct, TotConstructs); - if (SurfaceTmp(SurfNum).Construction == 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction == 0) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\"."); } else { - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).IsUsed = true; - SurfaceTmp(SurfNum).ConstructionStoredInputValue = SurfaceTmp(SurfNum).Construction; + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).IsUsed = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ConstructionStoredInputValue = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor) { - if (SurfaceTmp(SurfNum).Construction != 0) { - if (!state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsWindow) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction != 0) { + if (!state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsWindow) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\" has an opaque surface construction; it should have a window construction."); } - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).SourceSinkPresent) { + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).SourceSinkPresent) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\": Windows are not allowed to have embedded sources/sinks"); } } - } else if (SurfaceTmp(SurfNum).Construction != 0) { - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).TypeIsWindow) { + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction != 0) { + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).TypeIsWindow) { ErrorsFound = true; - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\" - has Window materials."); } } - SurfaceTmp(SurfNum).HeatTransSurf = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = true; - SurfaceTmp(SurfNum).BaseSurfName = cAlphaArgs(3); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = cAlphaArgs(3); // The subsurface inherits properties from the base surface // Exterior conditions, Zone, etc. // We can figure out the base surface though, because they've all been entered - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).BaseSurfName, SurfaceTmp, TotSurfaces); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName, state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); if (Found > 0) { - SurfaceTmp(SurfNum).BaseSurf = Found; - SurfaceTmp(SurfNum).ExtBoundCond = SurfaceTmp(Found).ExtBoundCond; - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(Found).ExtBoundCondName; - SurfaceTmp(SurfNum).ExtSolar = SurfaceTmp(Found).ExtSolar; - SurfaceTmp(SurfNum).ExtWind = SurfaceTmp(Found).ExtWind; - SurfaceTmp(SurfNum).Tilt = SurfaceTmp(Found).Tilt; - SurfaceTmp(SurfNum).Azimuth = SurfaceTmp(Found).Azimuth; - SurfaceTmp(SurfNum).Zone = SurfaceTmp(Found).Zone; - SurfaceTmp(SurfNum).ZoneName = SurfaceTmp(Found).ZoneName; - SurfaceTmp(SurfNum).OSCPtr = SurfaceTmp(Found).OSCPtr; - SurfaceTmp(SurfNum).ViewFactorGround = SurfaceTmp(Found).ViewFactorGround; - SurfaceTmp(SurfNum).ViewFactorSky = SurfaceTmp(Found).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = Found; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCondName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = state.dataSurfaceGeometry->SurfaceTmp(Found).Tilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = state.dataSurfaceGeometry->SurfaceTmp(Found).Azimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = state.dataSurfaceGeometry->SurfaceTmp(Found).Zone; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(Found).ZoneName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCPtr = state.dataSurfaceGeometry->SurfaceTmp(Found).OSCPtr; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = state.dataSurfaceGeometry->SurfaceTmp(Found).ViewFactorGround; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky = state.dataSurfaceGeometry->SurfaceTmp(Found).ViewFactorSky; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3)); - SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; ErrorsFound = true; continue; } - if (SurfaceTmp(Found).ExtBoundCond == UnreconciledZoneSurface && - SurfaceTmp(Found).ExtBoundCondName == SurfaceTmp(Found).Name) { // Adiabatic surface, no windows or doors allowed - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + + if (state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface && + state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCondName == state.dataSurfaceGeometry->SurfaceTmp(Found).Name) { // Adiabatic surface, no windows or doors allowed + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3) + "\"."); ShowContinueError("... adiabatic surfaces cannot have windows or doors."); ShowContinueError("... no solar transmission will result for these windows or doors. You must have interior windows or doors on " "Interzone surfaces for transmission to result."); } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { // "Surface" Base Surface + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { // "Surface" Base Surface if (!GettingIZSurfaces) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid use of object"); + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid use of object"); ShowContinueError("...when Base surface uses \"Surface\" as " + cAlphaFieldNames(5) + ", subsurfaces must also specify specific surfaces in the adjacent zone."); ShowContinueError("...Please use " + cCurrentModuleObject + ":Interzone to enter this surface."); - SurfaceTmp(SurfNum).ExtBoundCondName = BlankString; // putting it as blank will not confuse things later. + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = BlankString; // putting it as blank will not confuse things later. ErrorsFound = true; } } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { // "Surface" Base Surface + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { // "Surface" Base Surface if (GettingIZSurfaces) { - SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(OtherSurfaceField); - IZFound = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); - if (IZFound > 0) SurfaceTmp(SurfNum).ExtBoundCond = UnenteredAdjacentZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = cAlphaArgs(OtherSurfaceField); + IZFound = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName, Zone, NumOfZones); + if (IZFound > 0) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface; } else { // Interior Window - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; } } // This is the parent's property: - if (SurfaceTmp(SurfNum).ExtBoundCond == UnenteredAdjacentZoneSurface) { // OtherZone - unmatched interior surface + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface) { // OtherZone - unmatched interior surface if (GettingIZSurfaces) { ++NeedToAddSubSurfaces; } else { // Interior Window - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid Interzone Surface, specify " + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid Interzone Surface, specify " + cCurrentModuleObject + ":InterZone"); ShowContinueError("...when base surface is an interzone surface, subsurface must also be an interzone surface."); ++NeedToAddSubSurfaces; @@ -4613,13 +4506,13 @@ namespace SurfaceGeometry { if (GettingIZSurfaces) { if (lAlphaFieldBlanks(OtherSurfaceField)) { // blank -- set it up for unentered adjacent zone - if (SurfaceTmp(SurfNum).ExtBoundCond == UnenteredAdjacentZoneSurface) { // already set but need Zone - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(Found).ExtBoundCondName; // base surface has it - } else if (SurfaceTmp(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(Found).ZoneName; // base surface has it - SurfaceTmp(SurfNum).ExtBoundCond = UnenteredAdjacentZoneSurface; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface) { // already set but need Zone + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCondName; // base surface has it + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(Found).ZoneName; // base surface has it + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface; } else { // not correct boundary condition for interzone subsurface - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid Base Surface type for Interzone Surface"); ShowContinueError("...when base surface is not an interzone surface, subsurface must also not be an interzone surface."); ErrorsFound = true; @@ -4627,57 +4520,57 @@ namespace SurfaceGeometry { } } - if (SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCondModeledExt) { - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCondModeledExt) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; } - // SurfaceTmp(SurfNum)%ViewFactorGround = AutoCalculate + // state.dataSurfaceGeometry->SurfaceTmp(SurfNum)%ViewFactorGround = AutoCalculate - SurfaceTmp(SurfNum).Sides = 4; - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || - SurfaceTmp(SurfNum).Class == SurfaceClass_Door) - SurfaceTmp(SurfNum).Multiplier = int(rNumericArgs(1)); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = 4; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Door) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier = int(rNumericArgs(1)); // Only windows, glass doors and doors can have Multiplier > 1: - if ((SurfaceTmp(SurfNum).Class != SurfaceClass_Window && SurfaceTmp(SurfNum).Class != SurfaceClass_GlassDoor && - SurfaceTmp(SurfNum).Class != SurfaceClass_Door) && + if ((state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Window && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_GlassDoor && + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Door) && rNumericArgs(1) > 1.0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cNumericFieldNames(1) + "=[" + + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cNumericFieldNames(1) + "=[" + TrimSigDigits(rNumericArgs(1), 1) + "]."); ShowContinueError("...because " + cAlphaFieldNames(1) + '=' + cAlphaArgs(1) + " multiplier will be set to 1.0."); - SurfaceTmp(SurfNum).Multiplier = 1.0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier = 1.0; } MakeRelativeRectangularVertices( - state, SurfaceTmp(SurfNum).BaseSurf, SurfNum, rNumericArgs(2), rNumericArgs(3), rNumericArgs(4), rNumericArgs(5)); + state, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf, SurfNum, rNumericArgs(2), rNumericArgs(3), rNumericArgs(4), rNumericArgs(5)); - if (SurfaceTmp(SurfNum).Area <= 0.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + - "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(SurfaceTmp(SurfNum).Area, 2)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area <= 0.0) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\", Surface Area <= 0.0; Entered Area=" + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area, 2)); ErrorsFound = true; } - SurfaceTmp(SurfNum).windowShadingControlList.clear(); - SurfaceTmp(SurfNum).activeWindowShadingControl = 0; - SurfaceTmp(SurfNum).HasShadeControl = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList.clear(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeWindowShadingControl = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HasShadeControl = false; - SurfaceTmp(SurfNum).shadedConstructionList.clear(); - SurfaceTmp(SurfNum).activeShadedConstruction = 0; - SurfaceTmp(SurfNum).shadedStormWinConstructionList.clear(); - SurfaceTmp(SurfNum).activeStormWinShadedConstruction= 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedConstructionList.clear(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedStormWinConstructionList.clear(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeStormWinShadedConstruction= 0; InitialAssociateWindowShadingControlFenestration(state, ErrorsFound, SurfNum); - if (!GettingIZSurfaces && (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor)) { + if (!GettingIZSurfaces && (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor)) { - if (SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefNoCalcExt || SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefCalcExt) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefNoCalcExt || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == OtherSideCoefCalcExt) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Other side coefficients are not allowed with windows."); ErrorsFound = true; } - if (SurfaceTmp(SurfNum).ExtBoundCond == Ground) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == Ground) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Exterior boundary condition = Ground is not allowed with windows."); ErrorsFound = true; } @@ -4733,13 +4626,13 @@ namespace SurfaceGeometry { // Otherwise, create shaded construction if WindowShadingControl for this window has // interior or exterior shade/blind (but not between-glass shade/blind) specified. - for (std::size_t shadeControlIndex = 0; shadeControlIndex < SurfaceTmp(SurfNum).windowShadingControlList.size(); ++shadeControlIndex){ - int WSCPtr = SurfaceTmp(SurfNum).windowShadingControlList[shadeControlIndex]; + for (std::size_t shadeControlIndex = 0; shadeControlIndex < state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList.size(); ++shadeControlIndex){ + int WSCPtr = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList[shadeControlIndex]; ConstrNumSh = 0; - if (!ErrorsFound && SurfaceTmp(SurfNum).HasShadeControl) { - ConstrNumSh = SurfaceTmp(SurfNum).shadedConstructionList[shadeControlIndex]; + if (!ErrorsFound && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HasShadeControl) { + ConstrNumSh = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedConstructionList[shadeControlIndex]; if (ConstrNumSh > 0) { - SurfaceTmp(SurfNum).activeShadedConstruction = ConstrNumSh; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction = ConstrNumSh; } else { if (WindowShadingControl(WSCPtr).ShadingType == WSC_ST_InteriorShade || WindowShadingControl(WSCPtr).ShadingType == WSC_ST_InteriorBlind || @@ -4749,7 +4642,7 @@ namespace SurfaceGeometry { ShDevNum = WindowShadingControl(WSCPtr).ShadingDevice; if (ShDevNum > 0) { CreateShadedWindowConstruction(state, SurfNum, WSCPtr, ShDevNum, shadeControlIndex); - ConstrNumSh = SurfaceTmp(SurfNum).activeShadedConstruction; + ConstrNumSh = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction; } } } @@ -4757,7 +4650,7 @@ namespace SurfaceGeometry { // Error checks for shades and blinds - ConstrNum = SurfaceTmp(SurfNum).Construction; + ConstrNum = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; if (!ErrorsFound && WSCPtr > 0 && ConstrNum > 0 && ConstrNumSh > 0) { if (WindowShadingControl(WSCPtr).ShadingType == WSC_ST_InteriorShade || @@ -4776,7 +4669,7 @@ namespace SurfaceGeometry { if (state.dataConstruction->Construct(ConstrNum).LayerPoint(Lay) != state.dataConstruction->Construct(ConstrNumSh).LayerPoint(Lay)) { ErrorsFound = true; ShowSevereError(" The glass and gas layers in the shaded and unshaded constructions do not match for window=" + - SurfaceTmp(SurfNum).Name); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); ShowContinueError("Unshaded construction=" + state.dataConstruction->Construct(ConstrNum).Name); ShowContinueError("Shaded construction=" + state.dataConstruction->Construct(ConstrNumSh).Name); break; @@ -4801,7 +4694,7 @@ namespace SurfaceGeometry { if (state.dataConstruction->Construct(ConstrNum).LayerPoint(Lay) != state.dataConstruction->Construct(ConstrNumSh).LayerPoint(Lay + 1)) { ErrorsFound = true; ShowSevereError(" The glass and gas layers in the shaded and unshaded constructions do not match for window=" + - SurfaceTmp(SurfNum).Name); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); ShowContinueError("Unshaded construction=" + state.dataConstruction->Construct(ConstrNum).Name); ShowContinueError("Shaded construction=" + state.dataConstruction->Construct(ConstrNumSh).Name); break; @@ -4812,12 +4705,12 @@ namespace SurfaceGeometry { if (WindowShadingControl(WSCPtr).ShadingType == WSC_ST_BetweenGlassShade || WindowShadingControl(WSCPtr).ShadingType == WSC_ST_BetweenGlassBlind) { // Divider not allowed with between-glass shade or blind - if (SurfaceTmp(SurfNum).FrameDivider > 0) { - if (FrameDivider(SurfaceTmp(SurfNum).FrameDivider).DividerWidth > 0.0) { - ShowWarningError("A divider cannot be specified for window " + SurfaceTmp(SurfNum).Name); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider > 0) { + if (FrameDivider(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider).DividerWidth > 0.0) { + ShowWarningError("A divider cannot be specified for window " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); ShowContinueError(", which has a between-glass shade or blind."); ShowContinueError("Calculation will proceed without the divider for this window."); - FrameDivider(SurfaceTmp(SurfNum).FrameDivider).DividerWidth = 0.0; + FrameDivider(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider).DividerWidth = 0.0; } } // Check consistency of gap widths between unshaded and shaded constructions @@ -4858,7 +4751,7 @@ namespace SurfaceGeometry { if (MatGapCalc > 0.001) { ShowSevereError(cRoutineName + ": The gap width(s) for the unshaded window construction " + state.dataConstruction->Construct(ConstrNum).Name); ShowContinueError("are inconsistent with the gap widths for shaded window construction " + state.dataConstruction->Construct(ConstrNumSh).Name); - ShowContinueError("for window " + SurfaceTmp(SurfNum).Name + ", which has a between-glass blind."); + ShowContinueError("for window " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + ", which has a between-glass blind."); ShowContinueError("..Material=" + dataMaterial.Material(MatGap).Name + " thickness=" + RoundSigDigits(dataMaterial.Material(MatGap).Thickness, 3) + " -"); ShowContinueError("..( Material=" + dataMaterial.Material(MatGap1).Name + @@ -4873,7 +4766,7 @@ namespace SurfaceGeometry { if (MatGapCalc > 0.001) { ShowSevereError(cRoutineName + ": The gap width(s) for the unshaded window construction " + state.dataConstruction->Construct(ConstrNum).Name); ShowContinueError("are inconsistent with the gap widths for shaded window construction " + state.dataConstruction->Construct(ConstrNumSh).Name); - ShowContinueError("for window " + SurfaceTmp(SurfNum).Name + ", which has a between-glass shade."); + ShowContinueError("for window " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + ", which has a between-glass shade."); ShowContinueError("..Material=" + dataMaterial.Material(MatGap).Name + " thickness=" + RoundSigDigits(dataMaterial.Material(MatGap).Thickness, 3) + " -"); ShowContinueError("...( Material=" + dataMaterial.Material(MatGap1).Name + @@ -4890,7 +4783,7 @@ namespace SurfaceGeometry { } } - if (SurfaceTmp(SurfNum).Sides != 3) { // Rectangular Window + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides != 3) { // Rectangular Window // Initialize the FrameDivider number for this window. W5FrameDivider will be positive if // this window's construction came from the Window5 data file and that construction had an // associated frame or divider. It will be zero if the window's construction is not from the @@ -4898,44 +4791,44 @@ namespace SurfaceGeometry { // associated frame or divider. Note that if there is a FrameDivider candidate for this // window from the Window5 data file it is used instead of the window's input FrameDivider. - if (SurfaceTmp(SurfNum).Construction != 0) { - SurfaceTmp(SurfNum).FrameDivider = state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).W5FrameDivider; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction != 0) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider = state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).W5FrameDivider; // Warning if FrameAndDivider for this window is over-ridden by one from Window5 Data File - if (SurfaceTmp(SurfNum).FrameDivider > 0 && !lAlphaFieldBlanks(FrameField)) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(FrameField) + "=\"" + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider > 0 && !lAlphaFieldBlanks(FrameField)) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(FrameField) + "=\"" + cAlphaArgs(FrameField) + "\""); ShowContinueError("will be replaced with FrameAndDivider from Window5 Data File entry " + - state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).Name); + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).Name); } - if (!lAlphaFieldBlanks(FrameField) && SurfaceTmp(SurfNum).FrameDivider == 0) { - SurfaceTmp(SurfNum).FrameDivider = UtilityRoutines::FindItemInList(cAlphaArgs(FrameField), FrameDivider); - if (SurfaceTmp(SurfNum).FrameDivider == 0) { - if (!state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).WindowTypeEQL) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(FrameField) + + if (!lAlphaFieldBlanks(FrameField) && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider == 0) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider = UtilityRoutines::FindItemInList(cAlphaArgs(FrameField), FrameDivider); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider == 0) { + if (!state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).WindowTypeEQL) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(FrameField) + "=\"" + cAlphaArgs(FrameField) + "\""); ErrorsFound = true; } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(FrameField) + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(FrameField) + "=\"" + cAlphaArgs(FrameField) + "\""); ShowContinueError("...Frame/Divider is not supported in Equivalent Layer Window model."); } } // Divider not allowed with between-glass shade or blind - for (int WSCPtr : SurfaceTmp(SurfNum).windowShadingControlList) { + for (int WSCPtr : state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList) { if (!ErrorsFound && WSCPtr > 0 && ConstrNumSh > 0) { if (WindowShadingControl(WSCPtr).ShadingType == WSC_ST_BetweenGlassShade || WindowShadingControl(WSCPtr).ShadingType == WSC_ST_BetweenGlassBlind) { - if (SurfaceTmp(SurfNum).FrameDivider > 0) { - if (FrameDivider(SurfaceTmp(SurfNum).FrameDivider).DividerWidth > 0.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider > 0) { + if (FrameDivider(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider).DividerWidth > 0.0) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(FrameField) + "=\"" + cAlphaArgs(FrameField) + "\""); ShowContinueError("Divider cannot be specified because the construction has a between-glass shade or blind."); ShowContinueError("Calculation will proceed without the divider for this window."); ShowContinueError("Divider width = [" + - RoundSigDigits(FrameDivider(SurfaceTmp(SurfNum).FrameDivider).DividerWidth, 2) + "]."); - FrameDivider(SurfaceTmp(SurfNum).FrameDivider).DividerWidth = 0.0; + RoundSigDigits(FrameDivider(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider).DividerWidth, 2) + "]."); + FrameDivider(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider).DividerWidth = 0.0; } } // End of check if window has divider } // End of check if window has a between-glass shade or blind @@ -4945,13 +4838,13 @@ namespace SurfaceGeometry { } // End of check if window has a construction } - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).WindowTypeEQL) { - if (SurfaceTmp(SurfNum).FrameDivider > 0) { + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).WindowTypeEQL) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider > 0) { // Equivalent Layer window does not have frame/divider model - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(FrameField) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(FrameField) + "=\"" + cAlphaArgs(FrameField) + "\""); ShowContinueError("Frame/Divider is not supported in Equivalent Layer Window model."); - SurfaceTmp(SurfNum).FrameDivider = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider = 0; } } } @@ -4988,10 +4881,10 @@ namespace SurfaceGeometry { // Warning if window has multiplier > 1 and SolarDistribution = FullExterior or FullInteriorExterior - if ((SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor) && - SolarDistribution > MinimalShadowing && SurfaceTmp(SurfNum).Multiplier > 1.0) { + if ((state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor) && + SolarDistribution > MinimalShadowing && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier > 1.0) { if (DisplayExtraWarnings) { - ShowWarningError(cRoutineName + ": A Multiplier > 1.0 for window/glass door " + SurfaceTmp(SurfNum).Name); + ShowWarningError(cRoutineName + ": A Multiplier > 1.0 for window/glass door " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); ShowContinueError("in conjunction with SolarDistribution = FullExterior or FullInteriorExterior"); ShowContinueError("can cause inaccurate shadowing on the window and/or"); ShowContinueError("inaccurate interior solar distribution from the window."); @@ -5001,7 +4894,7 @@ namespace SurfaceGeometry { // Require that a construction referenced by a surface that is a window // NOT have a shading device layer; use WindowShadingControl to specify a shading device. - ConstrNum = SurfaceTmp(SurfNum).Construction; + ConstrNum = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; if (ConstrNum > 0) { NumShades = 0; for (Lay = 1; Lay <= state.dataConstruction->Construct(ConstrNum).TotLayers; ++Lay) { @@ -5019,9 +4912,9 @@ namespace SurfaceGeometry { // Disallow glass transmittance dirt factor for interior windows and glass doors - if (SurfaceTmp(SurfNum).ExtBoundCond != ExternalEnvironment && - (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor)) { - ConstrNum = SurfaceTmp(SurfNum).Construction; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond != ExternalEnvironment && + (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor)) { + ConstrNum = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; if (ConstrNum > 0) { for (Lay = 1; Lay <= state.dataConstruction->Construct(ConstrNum).TotLayers; ++Lay) { LayerPtr = state.dataConstruction->Construct(ConstrNum).LayerPoint(Lay); @@ -5041,9 +4934,9 @@ namespace SurfaceGeometry { // (2) if two glazing systems (separated by a mullion) on Data File, create a second window // and adjust the dimensions of the original and second windows to those on the Data File - if (SurfaceTmp(SurfNum).Construction != 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction != 0) { - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).FromWindow5DataFile) { + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).FromWindow5DataFile) { ModifyWindow(state, SurfNum, ErrorsFound, AddedSubSurfaces); @@ -5051,34 +4944,34 @@ namespace SurfaceGeometry { // Calculate net area for base surface (note that ModifyWindow, above, adjusts net area of // base surface for case where window construction is from Window5 Data File // In case there is in error in this window's base surface (i.e. none).. - if (SurfaceTmp(SurfNum).BaseSurf > 0) { - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Area -= SurfaceTmp(SurfNum).Area; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf > 0) { + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Area -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; // Subtract TDD:DIFFUSER area from other side interzone surface - if ((SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser) && - not_blank(SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).ExtBoundCondName)) { // Base surface is an interzone surface + if ((state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_TDD_Diffuser) && + not_blank(state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).ExtBoundCondName)) { // Base surface is an interzone surface // Lookup interzone surface of the base surface // (Interzone surfaces have not been assigned yet, but all base surfaces should already be loaded.) - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).ExtBoundCondName, SurfaceTmp, SurfNum); - if (Found != 0) SurfaceTmp(Found).Area -= SurfaceTmp(SurfNum).Area; + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).ExtBoundCondName, state.dataSurfaceGeometry->SurfaceTmp, SurfNum); + if (Found != 0) state.dataSurfaceGeometry->SurfaceTmp(Found).Area -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; } - if (SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Area <= 0.0) { + if (state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Area <= 0.0) { ShowSevereError(cRoutineName + - ": Surface Openings have too much area for base surface=" + SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Name); - ShowContinueError("Opening Surface creating error=" + SurfaceTmp(SurfNum).Name); + ": Surface Openings have too much area for base surface=" + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Name); + ShowContinueError("Opening Surface creating error=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); ErrorsFound = true; } // Net area of base surface with unity window multipliers (used in shadowing checks) // For Windows, Glass Doors and Doors, just one area is subtracted. For the rest, should be // full area. - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor) { - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= SurfaceTmp(SurfNum).Area / SurfaceTmp(SurfNum).Multiplier; - } else if (SurfaceTmp(SurfNum).Class == SurfaceClass_Door) { // Door, TDD:Diffuser, TDD:DOME - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= SurfaceTmp(SurfNum).Area / SurfaceTmp(SurfNum).Multiplier; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor) { + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area / state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Door) { // Door, TDD:Diffuser, TDD:DOME + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area / state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; } else { - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= SurfaceTmp(SurfNum).Area; + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; } } } @@ -5148,23 +5041,23 @@ namespace SurfaceGeometry { // Tilt and Facing (Azimuth) will be same as the Base Surface - SurfaceTmp(SurfNum).Height = Height; - SurfaceTmp(SurfNum).Width = Length; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height = Height; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Width = Length; - SurfAzimuth = SurfaceTmp(SurfNum).Azimuth; - SurfTilt = SurfaceTmp(SurfNum).Tilt; + SurfAzimuth = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth; + SurfTilt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt; CosSurfAzimuth = std::cos(SurfAzimuth * DataGlobalConstants::DegToRadians()); SinSurfAzimuth = std::sin(SurfAzimuth * DataGlobalConstants::DegToRadians()); CosSurfTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); SinSurfTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); - BaseCosSurfAzimuth = SurfaceTmp(BaseSurfNum).CosAzim; - BaseSinSurfAzimuth = SurfaceTmp(BaseSurfNum).SinAzim; - BaseCosSurfTilt = SurfaceTmp(BaseSurfNum).CosTilt; - BaseSinSurfTilt = SurfaceTmp(BaseSurfNum).SinTilt; + BaseCosSurfAzimuth = state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosAzim; + BaseSinSurfAzimuth = state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinAzim; + BaseCosSurfTilt = state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosTilt; + BaseSinSurfTilt = state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinTilt; - XLLC = SurfaceTmp(BaseSurfNum).Vertex(2).x - XCoord * BaseCosSurfAzimuth - ZCoord * BaseCosSurfTilt * BaseSinSurfAzimuth; - YLLC = SurfaceTmp(BaseSurfNum).Vertex(2).y + XCoord * BaseSinSurfAzimuth - ZCoord * BaseCosSurfTilt * BaseCosSurfAzimuth; - ZLLC = SurfaceTmp(BaseSurfNum).Vertex(2).z + ZCoord * BaseSinSurfTilt; + XLLC = state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).x - XCoord * BaseCosSurfAzimuth - ZCoord * BaseCosSurfTilt * BaseSinSurfAzimuth; + YLLC = state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).y + XCoord * BaseSinSurfAzimuth - ZCoord * BaseCosSurfTilt * BaseCosSurfAzimuth; + ZLLC = state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).z + ZCoord * BaseSinSurfTilt; XX(1) = 0.0; XX(2) = 0.0; @@ -5175,43 +5068,43 @@ namespace SurfaceGeometry { YY(3) = 0.0; YY(2) = 0.0; - for (n = 1; n <= SurfaceTmp(SurfNum).Sides; ++n) { + for (n = 1; n <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++n) { Vrt = n; - SurfaceTmp(SurfNum).Vertex(Vrt).x = XLLC - XX(n) * CosSurfAzimuth - YY(n) * CosSurfTilt * SinSurfAzimuth; - SurfaceTmp(SurfNum).Vertex(Vrt).y = YLLC + XX(n) * SinSurfAzimuth - YY(n) * CosSurfTilt * CosSurfAzimuth; - SurfaceTmp(SurfNum).Vertex(Vrt).z = ZLLC + YY(n) * SinSurfTilt; - } - - CreateNewellAreaVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellAreaVector); - SurfaceTmp(SurfNum).GrossArea = VecLength(SurfaceTmp(SurfNum).NewellAreaVector); - SurfaceTmp(SurfNum).Area = SurfaceTmp(SurfNum).GrossArea; - SurfaceTmp(SurfNum).NetAreaShadowCalc = SurfaceTmp(SurfNum).Area; - CreateNewellSurfaceNormalVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - DetermineAzimuthAndTilt(SurfaceTmp(SurfNum).Vertex, - SurfaceTmp(SurfNum).Sides, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).x = XLLC - XX(n) * CosSurfAzimuth - YY(n) * CosSurfTilt * SinSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).y = YLLC + XX(n) * SinSurfAzimuth - YY(n) * CosSurfTilt * CosSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).z = ZLLC + YY(n) * SinSurfTilt; + } + + CreateNewellAreaVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea = VecLength(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + CreateNewellSurfaceNormalVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + DetermineAzimuthAndTilt(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, SurfAzimuth, SurfTilt, - SurfaceTmp(SurfNum).lcsx, - SurfaceTmp(SurfNum).lcsy, - SurfaceTmp(SurfNum).lcsz, - SurfaceTmp(SurfNum).GrossArea, - SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - SurfaceTmp(SurfNum).Azimuth = SurfAzimuth; - SurfaceTmp(SurfNum).Tilt = SurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsx, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsy, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsz, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = SurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = SurfTilt; // Sine and cosine of azimuth and tilt - SurfaceTmp(SurfNum).SinAzim = SinSurfAzimuth; - SurfaceTmp(SurfNum).CosAzim = CosSurfAzimuth; - SurfaceTmp(SurfNum).SinTilt = SinSurfTilt; - SurfaceTmp(SurfNum).CosTilt = CosSurfTilt; - if (SurfaceTmp(SurfNum).Class != SurfaceClass_Window && SurfaceTmp(SurfNum).Class != SurfaceClass_GlassDoor && - SurfaceTmp(SurfNum).Class != SurfaceClass_Door) - SurfaceTmp(SurfNum).ViewFactorGround = 0.5 * (1.0 - SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim = SinSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim = CosSurfAzimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt = SinSurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt = CosSurfTilt; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Window && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_GlassDoor && + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class != SurfaceClass_Door) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); // Outward normal unit vector (pointing away from room) - SurfaceTmp(SurfNum).OutNormVec = SurfaceTmp(SurfNum).NewellSurfaceNormalVector; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector; for (n = 1; n <= 3; ++n) { - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; } // IF (SurfaceTmp(SurfNum)%Class == SurfaceClass_Roof .and. SurfTilt > 80.) THEN @@ -5228,25 +5121,25 @@ namespace SurfaceGeometry { // ' for Surface='//TRIM(SurfaceTmp(SurfNum)%Name)// & // ', in Zone='//TRIM(SurfaceTmp(SurfNum)%ZoneName)) // ENDIF - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || - SurfaceTmp(SurfNum).Class == SurfaceClass_Door) - SurfaceTmp(SurfNum).Area *= SurfaceTmp(SurfNum).Multiplier; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Door) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area *= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; // Can perform tests on this surface here - SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); // The following IR view factors are modified in subr. SkyDifSolarShading if there are shadowing // surfaces - SurfaceTmp(SurfNum).ViewFactorSkyIR = SurfaceTmp(SurfNum).ViewFactorSky; - SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSkyIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); - Perimeter = distance(SurfaceTmp(SurfNum).Vertex(SurfaceTmp(SurfNum).Sides), SurfaceTmp(SurfNum).Vertex(1)); - for (Vrt = 2; Vrt <= SurfaceTmp(SurfNum).Sides; ++Vrt) { - Perimeter += distance(SurfaceTmp(SurfNum).Vertex(Vrt), SurfaceTmp(SurfNum).Vertex(Vrt - 1)); + Perimeter = distance(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides), state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1)); + for (Vrt = 2; Vrt <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++Vrt) { + Perimeter += distance(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt), state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt - 1)); } - SurfaceTmp(SurfNum).Perimeter = Perimeter; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter = Perimeter; // Call to transform vertices - TransformVertsByAspect(state, SurfNum, SurfaceTmp(SurfNum).Sides); + TransformVertsByAspect(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); } void GetAttShdSurfaceData(EnergyPlusData &state, @@ -5343,104 +5236,104 @@ namespace SurfaceGeometry { cAlphaFieldNames, cNumericFieldNames); - if (GlobalNames::VerifyUniqueInterObjectName(UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + if (GlobalNames::VerifyUniqueInterObjectName(state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type - SurfaceTmp(SurfNum).Class = SurfaceClass_Shading; - SurfaceTmp(SurfNum).HeatTransSurf = false; - SurfaceTmp(SurfNum).BaseSurfName = cAlphaArgs(2); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_Shading; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = cAlphaArgs(2); // The subsurface inherits properties from the base surface // Exterior conditions, Zone, etc. // We can figure out the base surface though, because they've all been entered - Found = UtilityRoutines::FindItemInList(SurfaceTmp(SurfNum).BaseSurfName, SurfaceTmp, TotSurfaces); + Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName, state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); if (Found > 0) { // SurfaceTmp(SurfNum)%BaseSurf=Found - SurfaceTmp(SurfNum).ExtBoundCond = SurfaceTmp(Found).ExtBoundCond; - SurfaceTmp(SurfNum).ExtSolar = SurfaceTmp(Found).ExtSolar; - SurfaceTmp(SurfNum).ExtWind = SurfaceTmp(Found).ExtWind; - SurfaceTmp(SurfNum).Zone = SurfaceTmp(Found).Zone; // Necessary to do relative coordinates in GetVertices below - SurfaceTmp(SurfNum).ZoneName = SurfaceTmp(Found).ZoneName; // Necessary to have surface drawn in OutputReports + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = state.dataSurfaceGeometry->SurfaceTmp(Found).Zone; // Necessary to do relative coordinates in GetVertices below + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(Found).ZoneName; // Necessary to have surface drawn in OutputReports } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ErrorsFound = true; } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnenteredAdjacentZoneSurface) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ShowContinueError("...trying to attach a shading device to an interzone surface."); ErrorsFound = true; - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ShowContinueError("...trying to attach a shading device to an interior surface."); ErrorsFound = true; - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" } if (!lAlphaFieldBlanks(3)) { - SurfaceTmp(SurfNum).SchedShadowSurfIndex = GetScheduleIndex(state, cAlphaArgs(3)); - if (SurfaceTmp(SurfNum).SchedShadowSurfIndex == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(3) + " not found=\"" + + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex = GetScheduleIndex(state, cAlphaArgs(3)); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex == 0) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(3) + " not found=\"" + cAlphaArgs(3)); ErrorsFound = true; } } else { - SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; } - if (SurfaceTmp(SurfNum).SchedShadowSurfIndex != 0) { - if (!CheckScheduleValueMinMax(SurfaceTmp(SurfNum).SchedShadowSurfIndex, ">=", 0.0, "<=", 1.0)) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3) + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex != 0) { + if (!CheckScheduleValueMinMax(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex, ">=", 0.0, "<=", 1.0)) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3) + "\", values not in range [0,1]."); ErrorsFound = true; } - SchedMinValue = GetScheduleMinValue(SurfaceTmp(SurfNum).SchedShadowSurfIndex); - SurfaceTmp(SurfNum).SchedMinValue = SchedMinValue; - SchedMaxValue = GetScheduleMaxValue(SurfaceTmp(SurfNum).SchedShadowSurfIndex); + SchedMinValue = GetScheduleMinValue(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMinValue = SchedMinValue; + SchedMaxValue = GetScheduleMaxValue(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex); if (SchedMinValue == 1.0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", is always transparent."); - SurfaceTmp(SurfNum).IsTransparent = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).IsTransparent = true; } if (SchedMinValue < 0.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", has schedule values < 0."); ShowContinueError("...Schedule values < 0 have no meaning for shading elements."); } if (SchedMaxValue > 1.0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", has schedule values > 1."); ShowContinueError("...Schedule values > 1 have no meaning for shading elements."); } if (std::abs(SchedMinValue - SchedMaxValue) > 1.0e-6) { - SurfaceTmp(SurfNum).ShadowSurfSchedVaries = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfSchedVaries = true; ShadingTransmittanceVaries = true; } } if (lNumericFieldBlanks(1) || rNumericArgs(1) == DataGlobalConstants::AutoCalculate()) { rNumericArgs(1) = (NumNumbers - 1) / 3; - SurfaceTmp(SurfNum).Sides = rNumericArgs(1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = rNumericArgs(1); if (mod(NumNumbers - 1, 3) != 0) { - ShowWarningError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + - " not even multiple of 3. Will read in " + TrimSigDigits(SurfaceTmp(SurfNum).Sides)); + ShowWarningError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + + " not even multiple of 3. Will read in " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); } if (rNumericArgs(1) < 3) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + - " (autocalculate) must be >= 3. Only " + TrimSigDigits(SurfaceTmp(SurfNum).Sides) + " provided."); + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cNumericFieldNames(1) + + " (autocalculate) must be >= 3. Only " + TrimSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + " provided."); ErrorsFound = true; continue; } } else { - SurfaceTmp(SurfNum).Sides = rNumericArgs(1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = rNumericArgs(1); } - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); - GetVertices(state, SurfNum, SurfaceTmp(SurfNum).Sides, rNumericArgs({2, _})); - CheckConvexity(SurfNum, SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); + GetVertices(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, rNumericArgs({2, _})); + CheckConvexity(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); // IF (SurfaceTmp(SurfNum)%Sides == 3) THEN // CALL ShowWarningError(TRIM(cCurrentModuleObject)//'="'//TRIM(SurfaceTmp(SurfNum)%Name)// & // ' should not be triangular.') @@ -5448,12 +5341,12 @@ namespace SurfaceGeometry { // ErrorsFound=.TRUE. // ENDIF // Reset surface to be "detached" - SurfaceTmp(SurfNum).BaseSurf = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = 0; // SurfaceTmp(SurfNum)%BaseSurfName=' ' - SurfaceTmp(SurfNum).Zone = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = 0; // SurfaceTmp(SurfNum)%ZoneName=' ' if (MakeMirroredAttachedShading) { - MakeMirrorSurface(SurfNum); + MakeMirrorSurface(state, SurfNum); } } } @@ -5538,46 +5431,46 @@ namespace SurfaceGeometry { cNumericFieldNames); if (GlobalNames::VerifyUniqueInterObjectName( - UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type - SurfaceTmp(SurfNum).Class = SurfaceClass_Shading; - SurfaceTmp(SurfNum).HeatTransSurf = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1); // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_Shading; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = false; // this object references a window or door.... - Found = UtilityRoutines::FindItemInList(cAlphaArgs(2), SurfaceTmp, TotSurfaces); + Found = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); if (Found > 0) { - BaseSurfNum = SurfaceTmp(Found).BaseSurf; - SurfaceTmp(SurfNum).BaseSurfName = SurfaceTmp(Found).BaseSurfName; - SurfaceTmp(SurfNum).ExtBoundCond = SurfaceTmp(Found).ExtBoundCond; - SurfaceTmp(SurfNum).ExtSolar = SurfaceTmp(Found).ExtSolar; - SurfaceTmp(SurfNum).ExtWind = SurfaceTmp(Found).ExtWind; - SurfaceTmp(SurfNum).Zone = SurfaceTmp(Found).Zone; // Necessary to do relative coordinates in GetVertices below - SurfaceTmp(SurfNum).ZoneName = SurfaceTmp(Found).ZoneName; // Necessary to have surface drawn in OutputReports + BaseSurfNum = state.dataSurfaceGeometry->SurfaceTmp(Found).BaseSurf; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(Found).BaseSurfName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = state.dataSurfaceGeometry->SurfaceTmp(Found).Zone; // Necessary to do relative coordinates in GetVertices below + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(Found).ZoneName; // Necessary to have surface drawn in OutputReports } else { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ErrorsFound = true; continue; } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnenteredAdjacentZoneSurface) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnenteredAdjacentZoneSurface) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ShowContinueError("...trying to attach a shading device to an interzone surface."); ErrorsFound = true; - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" } - if (SurfaceTmp(SurfNum).ExtBoundCond == UnreconciledZoneSurface) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == state.dataSurfaceGeometry->UnreconciledZoneSurface) { + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2)); ShowContinueError("...trying to attach a shading device to an interior surface."); ErrorsFound = true; - SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = ExternalEnvironment; // reset so program won't crash during "add surfaces" } - SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; //===== Overhang ===== @@ -5600,11 +5493,11 @@ namespace SurfaceGeometry { // for projection option: // N5; \field Depth as Fraction of Window/Door Height // \units m - Length = rNumericArgs(3) + rNumericArgs(4) + SurfaceTmp(Found).Width; + Length = rNumericArgs(3) + rNumericArgs(4) + state.dataSurfaceGeometry->SurfaceTmp(Found).Width; if (Item == 1) { Depth = rNumericArgs(5); } else if (Item == 2) { - Depth = rNumericArgs(5) * SurfaceTmp(Found).Height; + Depth = rNumericArgs(5) * state.dataSurfaceGeometry->SurfaceTmp(Found).Height; } if (Length * Depth <= 0.0) { @@ -5613,36 +5506,36 @@ namespace SurfaceGeometry { continue; } - TiltAngle = SurfaceTmp(Found).Tilt + rNumericArgs(2); - SurfaceTmp(SurfNum).Tilt = TiltAngle; - SurfaceTmp(SurfNum).Azimuth = SurfaceTmp(Found).Azimuth; + TiltAngle = state.dataSurfaceGeometry->SurfaceTmp(Found).Tilt + rNumericArgs(2); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = TiltAngle; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = state.dataSurfaceGeometry->SurfaceTmp(Found).Azimuth; // Make it relative to surface origin..... - Xp = SurfaceTmp(Found).Vertex(2).x - SurfaceTmp(BaseSurfNum).Vertex(2).x; - Yp = SurfaceTmp(Found).Vertex(2).y - SurfaceTmp(BaseSurfNum).Vertex(2).y; - Zp = SurfaceTmp(Found).Vertex(2).z - SurfaceTmp(BaseSurfNum).Vertex(2).z; + Xp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).x - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).x; + Yp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).y - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).y; + Zp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).z - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).z; - XLLC = -Xp * SurfaceTmp(BaseSurfNum).CosAzim + Yp * SurfaceTmp(BaseSurfNum).SinAzim; + XLLC = -Xp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosAzim + Yp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinAzim; - YLLC = -Xp * SurfaceTmp(BaseSurfNum).SinAzim * SurfaceTmp(BaseSurfNum).CosTilt - - Yp * SurfaceTmp(BaseSurfNum).CosAzim * SurfaceTmp(BaseSurfNum).CosTilt + Zp * SurfaceTmp(BaseSurfNum).SinTilt; + YLLC = -Xp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinAzim * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosTilt - + Yp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosAzim * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosTilt + Zp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinTilt; - SurfaceTmp(SurfNum).Sides = 4; - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = 4; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); MakeRelativeRectangularVertices( - state, BaseSurfNum, SurfNum, XLLC - rNumericArgs(3), YLLC + SurfaceTmp(Found).Height + rNumericArgs(1), Length, Depth); + state, BaseSurfNum, SurfNum, XLLC - rNumericArgs(3), YLLC + state.dataSurfaceGeometry->SurfaceTmp(Found).Height + rNumericArgs(1), Length, Depth); // Reset surface to be "detached" // SurfaceTmp(SurfNum)%BaseSurfName=' ' // SurfaceTmp(SurfNum)%ZoneName=' ' - SurfaceTmp(SurfNum).BaseSurf = 0; - SurfaceTmp(SurfNum).Zone = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = 0; // and mirror if (MakeMirroredAttachedShading) { - MakeMirrorSurface(SurfNum); + MakeMirrorSurface(state, SurfNum); } } else { // Fins @@ -5668,12 +5561,12 @@ namespace SurfaceGeometry { // for projection option: // N5, \field Left Depth as Fraction of Window/Door Width // \units m - SurfaceTmp(SurfNum).Name = SurfaceTmp(SurfNum).Name + " Left"; - Length = rNumericArgs(2) + rNumericArgs(3) + SurfaceTmp(Found).Height; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + " Left"; + Length = rNumericArgs(2) + rNumericArgs(3) + state.dataSurfaceGeometry->SurfaceTmp(Found).Height; if (Item == 3) { Depth = rNumericArgs(5); } else if (Item == 4) { - Depth = rNumericArgs(5) * SurfaceTmp(Found).Width; + Depth = rNumericArgs(5) * state.dataSurfaceGeometry->SurfaceTmp(Found).Width; } MakeFin = true; @@ -5684,28 +5577,28 @@ namespace SurfaceGeometry { } if (MakeFin) { - TiltAngle = SurfaceTmp(Found).Tilt; - SurfaceTmp(SurfNum).Tilt = TiltAngle; - SurfaceTmp(SurfNum).Azimuth = SurfaceTmp(Found).Azimuth - (180.0 - rNumericArgs(4)); + TiltAngle = state.dataSurfaceGeometry->SurfaceTmp(Found).Tilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = TiltAngle; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = state.dataSurfaceGeometry->SurfaceTmp(Found).Azimuth - (180.0 - rNumericArgs(4)); // Make it relative to surface origin..... - Xp = SurfaceTmp(Found).Vertex(2).x - SurfaceTmp(BaseSurfNum).Vertex(2).x; - Yp = SurfaceTmp(Found).Vertex(2).y - SurfaceTmp(BaseSurfNum).Vertex(2).y; - Zp = SurfaceTmp(Found).Vertex(2).z - SurfaceTmp(BaseSurfNum).Vertex(2).z; + Xp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).x - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).x; + Yp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).y - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).y; + Zp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).z - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).z; - XLLC = -Xp * SurfaceTmp(BaseSurfNum).CosAzim + Yp * SurfaceTmp(BaseSurfNum).SinAzim; + XLLC = -Xp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosAzim + Yp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinAzim; - YLLC = -Xp * SurfaceTmp(BaseSurfNum).SinAzim * SurfaceTmp(BaseSurfNum).CosTilt - - Yp * SurfaceTmp(BaseSurfNum).CosAzim * SurfaceTmp(BaseSurfNum).CosTilt + Zp * SurfaceTmp(BaseSurfNum).SinTilt; + YLLC = -Xp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinAzim * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosTilt - + Yp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosAzim * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosTilt + Zp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinTilt; - SurfaceTmp(SurfNum).CosAzim = std::cos(SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).SinAzim = std::sin(SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).CosTilt = std::cos(SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).SinTilt = std::sin(SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim = std::cos(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim = std::sin(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt = std::cos(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt = std::sin(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).Sides = 4; - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = 4; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); MakeRelativeRectangularVertices(state, BaseSurfNum, SurfNum, XLLC - rNumericArgs(1), YLLC - rNumericArgs(3), -Depth, Length); @@ -5713,12 +5606,12 @@ namespace SurfaceGeometry { // SurfaceTmp(SurfNum)%BaseSurfName=' ' // SurfaceTmp(SurfNum)%ZoneName=' ' - SurfaceTmp(SurfNum).BaseSurf = 0; - SurfaceTmp(SurfNum).Zone = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = 0; // and mirror if (MakeMirroredAttachedShading) { - MakeMirrorSurface(SurfNum); + MakeMirrorSurface(state, SurfNum); } } else { --SurfNum; @@ -5745,23 +5638,23 @@ namespace SurfaceGeometry { // \units m ++SurfNum; - SurfaceTmp(SurfNum).Name = cAlphaArgs(1) + " Right"; // Set the Surface Name in the Derived Type - SurfaceTmp(SurfNum).Class = SurfaceClass_Shading; - SurfaceTmp(SurfNum).HeatTransSurf = false; - BaseSurfNum = SurfaceTmp(Found).BaseSurf; - SurfaceTmp(SurfNum).BaseSurfName = SurfaceTmp(Found).BaseSurfName; - SurfaceTmp(SurfNum).ExtBoundCond = SurfaceTmp(Found).ExtBoundCond; - SurfaceTmp(SurfNum).ExtSolar = SurfaceTmp(Found).ExtSolar; - SurfaceTmp(SurfNum).ExtWind = SurfaceTmp(Found).ExtWind; - SurfaceTmp(SurfNum).Zone = SurfaceTmp(Found).Zone; // Necessary to do relative coordinates in GetVertices below - SurfaceTmp(SurfNum).ZoneName = SurfaceTmp(Found).ZoneName; // Necessary to have surface drawn in OutputReports - - SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; - Length = rNumericArgs(7) + rNumericArgs(8) + SurfaceTmp(Found).Height; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = cAlphaArgs(1) + " Right"; // Set the Surface Name in the Derived Type + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_Shading; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = false; + BaseSurfNum = state.dataSurfaceGeometry->SurfaceTmp(Found).BaseSurf; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(Found).BaseSurfName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(Found).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = state.dataSurfaceGeometry->SurfaceTmp(Found).Zone; // Necessary to do relative coordinates in GetVertices below + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(Found).ZoneName; // Necessary to have surface drawn in OutputReports + + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex = 0; + Length = rNumericArgs(7) + rNumericArgs(8) + state.dataSurfaceGeometry->SurfaceTmp(Found).Height; if (Item == 3) { Depth = rNumericArgs(10); } else if (Item == 4) { - Depth = rNumericArgs(10) * SurfaceTmp(Found).Width; + Depth = rNumericArgs(10) * state.dataSurfaceGeometry->SurfaceTmp(Found).Width; } MakeFin = true; @@ -5774,39 +5667,39 @@ namespace SurfaceGeometry { if (MakeFin) { // Make it relative to surface origin..... - Xp = SurfaceTmp(Found).Vertex(2).x - SurfaceTmp(BaseSurfNum).Vertex(2).x; - Yp = SurfaceTmp(Found).Vertex(2).y - SurfaceTmp(BaseSurfNum).Vertex(2).y; - Zp = SurfaceTmp(Found).Vertex(2).z - SurfaceTmp(BaseSurfNum).Vertex(2).z; + Xp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).x - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).x; + Yp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).y - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).y; + Zp = state.dataSurfaceGeometry->SurfaceTmp(Found).Vertex(2).z - state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).Vertex(2).z; - XLLC = -Xp * SurfaceTmp(BaseSurfNum).CosAzim + Yp * SurfaceTmp(BaseSurfNum).SinAzim; + XLLC = -Xp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosAzim + Yp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinAzim; - YLLC = -Xp * SurfaceTmp(BaseSurfNum).SinAzim * SurfaceTmp(BaseSurfNum).CosTilt - - Yp * SurfaceTmp(BaseSurfNum).CosAzim * SurfaceTmp(BaseSurfNum).CosTilt + Zp * SurfaceTmp(BaseSurfNum).SinTilt; + YLLC = -Xp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinAzim * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosTilt - + Yp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosAzim * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).CosTilt + Zp * state.dataSurfaceGeometry->SurfaceTmp(BaseSurfNum).SinTilt; - TiltAngle = SurfaceTmp(Found).Tilt; - SurfaceTmp(SurfNum).Tilt = TiltAngle; - SurfaceTmp(SurfNum).Azimuth = SurfaceTmp(Found).Azimuth - (180.0 - rNumericArgs(9)); - SurfaceTmp(SurfNum).CosAzim = std::cos(SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).SinAzim = std::sin(SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).CosTilt = std::cos(SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).SinTilt = std::sin(SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); + TiltAngle = state.dataSurfaceGeometry->SurfaceTmp(Found).Tilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = TiltAngle; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = state.dataSurfaceGeometry->SurfaceTmp(Found).Azimuth - (180.0 - rNumericArgs(9)); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim = std::cos(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim = std::sin(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt = std::cos(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt = std::sin(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).Sides = 4; - SurfaceTmp(SurfNum).Vertex.allocate(SurfaceTmp(SurfNum).Sides); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = 4; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); MakeRelativeRectangularVertices( - state, BaseSurfNum, SurfNum, XLLC + SurfaceTmp(Found).Width + rNumericArgs(6), YLLC - rNumericArgs(8), -Depth, Length); + state, BaseSurfNum, SurfNum, XLLC + state.dataSurfaceGeometry->SurfaceTmp(Found).Width + rNumericArgs(6), YLLC - rNumericArgs(8), -Depth, Length); // Reset surface to be "detached" // SurfaceTmp(SurfNum)%BaseSurfName=' ' // SurfaceTmp(SurfNum)%ZoneName=' ' - SurfaceTmp(SurfNum).BaseSurf = 0; - SurfaceTmp(SurfNum).Zone = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = 0; // and mirror if (MakeMirroredAttachedShading) { - MakeMirrorSurface(SurfNum); + MakeMirrorSurface(state, SurfNum); } } else { --SurfNum; @@ -5895,7 +5788,7 @@ namespace SurfaceGeometry { cAlphaFieldNames, cNumericFieldNames); - if (GlobalNames::VerifyUniqueInterObjectName(UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { + if (GlobalNames::VerifyUniqueInterObjectName(state.dataSurfaceGeometry->UniqueSurfaceNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound)) { continue; } @@ -5920,8 +5813,8 @@ namespace SurfaceGeometry { ShowSevereError(cCurrentModuleObject + "=\"" + cAlphaArgs(1) + "\" invalid " + cAlphaFieldNames(3) + "=\"" + cAlphaArgs(3) + "\" not found."); ++SurfNum; - SurfaceTmp(SurfNum).Class += 100; - SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class += 100; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = "Unknown Zone"; ErrorsFound = true; errFlag = true; } @@ -5951,57 +5844,57 @@ namespace SurfaceGeometry { ++SurfNum; - SurfaceTmp(SurfNum).Construction = IntMassObjects(Loop).Construction; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction = IntMassObjects(Loop).Construction; if (!IntMassObjects(Loop).ZoneListActive) { - SurfaceTmp(SurfNum).Zone = IntMassObjects(Loop).ZoneOrZoneListPtr; - SurfaceTmp(SurfNum).Name = IntMassObjects(Loop).Name; - SurfaceTmp(SurfNum).Class = SurfaceClass_IntMass; - SurfaceTmp(SurfNum).ZoneName = IntMassObjects(Loop).ZoneOrZoneListName; - SurfaceTmp(SurfNum).HeatTransSurf = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = IntMassObjects(Loop).ZoneOrZoneListPtr; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = IntMassObjects(Loop).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_IntMass; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = IntMassObjects(Loop).ZoneOrZoneListName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = true; } else { CheckCreatedZoneItemName(RoutineName, cCurrentModuleObject, Zone(ZoneList(IntMassObjects(Loop).ZoneOrZoneListPtr).Zone(Item1)).Name, ZoneList(IntMassObjects(Loop).ZoneOrZoneListPtr).MaxZoneNameLength, IntMassObjects(Loop).Name, - SurfaceTmp, + state.dataSurfaceGeometry->SurfaceTmp, SurfNum - 1, - SurfaceTmp(SurfNum).Name, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name, errFlag); ZoneNum = ZoneList(IntMassObjects(Loop).ZoneOrZoneListPtr).Zone(Item1); - SurfaceTmp(SurfNum).Zone = ZoneNum; - SurfaceTmp(SurfNum).Class = SurfaceClass_IntMass; - SurfaceTmp(SurfNum).ZoneName = Zone(ZoneNum).Name; - SurfaceTmp(SurfNum).HeatTransSurf = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone = ZoneNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class = SurfaceClass_IntMass; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName = Zone(ZoneNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf = true; if (errFlag) ErrorsFound = true; } if (IntMassObjects(Loop).Construction > 0) { if (state.dataConstruction->Construct(IntMassObjects(Loop).Construction).IsUsed) { - SurfaceTmp(SurfNum).ConstructionStoredInputValue = IntMassObjects(Loop).Construction; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ConstructionStoredInputValue = IntMassObjects(Loop).Construction; } } - SurfaceTmp(SurfNum).GrossArea = IntMassObjects(Loop).GrossArea; - SurfaceTmp(SurfNum).Area = SurfaceTmp(SurfNum).GrossArea; - SurfaceTmp(SurfNum).NetAreaShadowCalc = SurfaceTmp(SurfNum).Area; - SurfaceTmp(SurfNum).Width = SurfaceTmp(SurfNum).Area; - SurfaceTmp(SurfNum).Height = 1.0; - SurfaceTmp(SurfNum).Tilt = 90.0; - SurfaceTmp(SurfNum).CosTilt = 0.0; // Tuned Was std::cos( 90.0 * DegToRadians ) - SurfaceTmp(SurfNum).SinTilt = 1.0; // Tuned Was std::sin( 90.0 * DegToRadians ) - SurfaceTmp(SurfNum).Azimuth = 0.0; - SurfaceTmp(SurfNum).CosAzim = 1.0; // Tuned Was std::cos( 0.0 ) - SurfaceTmp(SurfNum).SinAzim = 0.0; // Tuned Was std::sin( 0.0 ) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea = IntMassObjects(Loop).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Width = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height = 1.0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = 90.0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt = 0.0; // Tuned Was std::cos( 90.0 * DegToRadians ) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt = 1.0; // Tuned Was std::sin( 90.0 * DegToRadians ) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = 0.0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim = 1.0; // Tuned Was std::cos( 0.0 ) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim = 0.0; // Tuned Was std::sin( 0.0 ) // Outward normal unit vector (pointing away from room) - SurfaceTmp(SurfNum).OutNormVec = SurfaceTmp(SurfNum).lcsz; - SurfaceTmp(SurfNum).ViewFactorSky = 0.5; - SurfaceTmp(SurfNum).ExtSolar = false; - SurfaceTmp(SurfNum).ExtWind = false; - SurfaceTmp(SurfNum).BaseSurf = SurfNum; - SurfaceTmp(SurfNum).BaseSurfName = SurfaceTmp(SurfNum).Name; - SurfaceTmp(SurfNum).ExtBoundCondName = SurfaceTmp(SurfNum).Name; - SurfaceTmp(SurfNum).ExtBoundCond = UnreconciledZoneSurface; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsz; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky = 0.5; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf = SurfNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond = state.dataSurfaceGeometry->UnreconciledZoneSurface; } } } @@ -6085,14 +5978,14 @@ namespace SurfaceGeometry { // For shading surfaces, initialize value of reflectance values to default values. These values // may be overridden below for shading surfaces with an associated Shading Surface Reflectance object. for (SurfNum = 1; SurfNum <= TotSurfaces; ++SurfNum) { - if (!(SurfaceTmp(SurfNum).Class == SurfaceClass_Shading || SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F || - SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B || SurfaceTmp(SurfNum).Class == SurfaceClass_Overhang || - SurfaceTmp(SurfNum).Class == SurfaceClass_Fin)) + if (!(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Shading || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Overhang || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Fin)) continue; - SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl = 0.2; - SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl = 0.2; - SurfaceTmp(SurfNum).ShadowSurfGlazingFrac = 0.0; - SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl = 0.2; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl = 0.2; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingFrac = 0.0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct = 0; } // Get the total number of Shading Surface Reflectance objects @@ -6114,7 +6007,7 @@ namespace SurfaceGeometry { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - SurfNum = UtilityRoutines::FindItemInList(cAlphaArgs(1), SurfaceTmp, TotSurfaces); + SurfNum = UtilityRoutines::FindItemInList(cAlphaArgs(1), state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); if (SurfNum == 0) { ShowWarningError(cCurrentModuleObject + "=\"" + cAlphaArgs(1) + "\", invalid specification"); ShowContinueError(".. not found " + cAlphaFieldNames(1) + "=\"" + cAlphaArgs(1) + "\"."); @@ -6125,12 +6018,12 @@ namespace SurfaceGeometry { // Check that associated surface is a shading surface WrongSurfaceType = false; if (SurfNum != 0) { - if (!(SurfaceTmp(SurfNum).Class == SurfaceClass_Shading || SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F || - SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B || SurfaceTmp(SurfNum).Class == SurfaceClass_Overhang || - SurfaceTmp(SurfNum).Class == SurfaceClass_Fin)) + if (!(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Shading || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Overhang || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Fin)) WrongSurfaceType = true; if (WrongSurfaceType) { - ShowSevereError("GetShadingSurfReflectanceData: " + cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + + ShowSevereError("GetShadingSurfReflectanceData: " + cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", surface is not a shading surface."); ErrorsFound = true; continue; @@ -6138,31 +6031,31 @@ namespace SurfaceGeometry { } // If associated surface is a shading surface, set reflectance values - SurfaceTmp(SurfNum).ShadowSurfGlazingFrac = rNumericArgs(3); - SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(1); - SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(2); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingFrac = rNumericArgs(3); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(2); if (rNumericArgs(3) > 0.0) { GlConstrNum = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataConstruction->Construct, TotConstructs); if (GlConstrNum == 0) { - ShowSevereError(cCurrentModuleObject + "=\"" + SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + + ShowSevereError(cCurrentModuleObject + "=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", " + cAlphaFieldNames(2) + " not found=" + cAlphaArgs(2)); ErrorsFound = true; } else { state.dataConstruction->Construct(GlConstrNum).IsUsed = true; } - SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct = GlConstrNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct = GlConstrNum; } - SurfNum = UtilityRoutines::FindItemInList("Mir-" + cAlphaArgs(1), SurfaceTmp, TotSurfaces); + SurfNum = UtilityRoutines::FindItemInList("Mir-" + cAlphaArgs(1), state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); if (SurfNum == 0) continue; - SurfaceTmp(SurfNum).ShadowSurfGlazingFrac = rNumericArgs(3); - SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(1); - SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(2); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingFrac = rNumericArgs(3); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl = (1.0 - rNumericArgs(3)) * rNumericArgs(2); if (rNumericArgs(3) > 0.0) { GlConstrNum = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataConstruction->Construct, TotConstructs); if (GlConstrNum != 0) { state.dataConstruction->Construct(GlConstrNum).IsUsed = true; } - SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct = GlConstrNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct = GlConstrNum; } } // End of loop over Shading Surface Reflectance objects @@ -6172,29 +6065,29 @@ namespace SurfaceGeometry { "Visible Reflectance,Surface Glazing Fraction,Surface Glazing Contruction\n"); for (SurfNum = 1; SurfNum <= TotSurfaces; ++SurfNum) { - if (!(SurfaceTmp(SurfNum).Class == SurfaceClass_Shading || SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F || - SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B || SurfaceTmp(SurfNum).Class == SurfaceClass_Overhang || - SurfaceTmp(SurfNum).Class == SurfaceClass_Fin)) + if (!(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Shading || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Overhang || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Fin)) continue; constexpr auto fmt{"ShadingProperty Reflectance,{},{},{:.2R},{:.2R},{:.2R}, {}\n"}; - if (SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct != 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct != 0) { print(state.files.eio, fmt, - SurfaceTmp(SurfNum).Name, - cSurfaceClass(SurfaceTmp(SurfNum).Class), - SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl, - SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl, - SurfaceTmp(SurfNum).ShadowSurfGlazingFrac, - state.dataConstruction->Construct(SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct).Name); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name, + cSurfaceClass(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class), + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingFrac, + state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingConstruct).Name); } else { print(state.files.eio, fmt, - SurfaceTmp(SurfNum).Name, - cSurfaceClass(SurfaceTmp(SurfNum).Class), - SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl, - SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl, - SurfaceTmp(SurfNum).ShadowSurfGlazingFrac, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name, + cSurfaceClass(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class), + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseSolRefl, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfDiffuseVisRefl, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfGlazingFrac, "N/A"); } } @@ -7341,7 +7234,7 @@ namespace SurfaceGeometry { // Setup Kiva instances if (DataHeatBalance::AnyKiva) { - if (!ErrorsFound) ErrorsFound = kivaManager.setupKivaInstances(state); + if (!ErrorsFound) ErrorsFound = state.dataSurfaceGeometry->kivaManager.setupKivaInstances(state); } // test for missing materials for algorithms selected @@ -7563,11 +7456,11 @@ namespace SurfaceGeometry { if (NSides > MaxVerticesPerSurface) MaxVerticesPerSurface = NSides; Ptr = 1; for (n = 1; n <= NSides; ++n) { - SurfaceTmp(SurfNum).Vertex(n).x = Vertices(Ptr); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x = Vertices(Ptr); ++Ptr; - SurfaceTmp(SurfNum).Vertex(n).y = Vertices(Ptr); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y = Vertices(Ptr); ++Ptr; - SurfaceTmp(SurfNum).Vertex(n).z = Vertices(Ptr); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).z = Vertices(Ptr); ++Ptr; } @@ -7578,9 +7471,9 @@ namespace SurfaceGeometry { NSrc = NSides; NTar = 2; for (n = 1; n <= (NSides - 1) / 2; ++n) { - temp = SurfaceTmp(SurfNum).Vertex(NSrc); - SurfaceTmp(SurfNum).Vertex(NSrc) = SurfaceTmp(SurfNum).Vertex(NTar); - SurfaceTmp(SurfNum).Vertex(NTar) = temp; + temp = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NSrc); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NSrc) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NTar); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NTar) = temp; --NSrc; ++NTar; } @@ -7601,9 +7494,9 @@ namespace SurfaceGeometry { NSrc = ThisCorner + 1; if (NSrc > NSides) NSrc = 1; for (n = 1; n <= NSides - 1; ++n) { - temp = SurfaceTmp(SurfNum).Vertex(NTar); - SurfaceTmp(SurfNum).Vertex(NTar) = SurfaceTmp(SurfNum).Vertex(NSrc); - SurfaceTmp(SurfNum).Vertex(NSrc) = temp; + temp = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NTar); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NTar) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NSrc); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NSrc) = temp; ++NTar; ++NSrc; if (NTar > NSides) NTar = 1; @@ -7615,69 +7508,69 @@ namespace SurfaceGeometry { if (!WorldCoordSystem) { // Input in "relative" coordinates, use Building and Zone North Axes and Origins // to translate each point (including rotation for Appendix G) - ZoneNum = SurfaceTmp(SurfNum).Zone; + ZoneNum = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone; if (ZoneNum > 0) { for (n = 1; n <= NSides; ++n) { - Xb = SurfaceTmp(SurfNum).Vertex(n).x * CosZoneRelNorth(ZoneNum) - SurfaceTmp(SurfNum).Vertex(n).y * SinZoneRelNorth(ZoneNum) + + Xb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x * state.dataSurfaceGeometry->CosZoneRelNorth(ZoneNum) - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y * state.dataSurfaceGeometry->SinZoneRelNorth(ZoneNum) + Zone(ZoneNum).OriginX; - Yb = SurfaceTmp(SurfNum).Vertex(n).x * SinZoneRelNorth(ZoneNum) + SurfaceTmp(SurfNum).Vertex(n).y * CosZoneRelNorth(ZoneNum) + + Yb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x * state.dataSurfaceGeometry->SinZoneRelNorth(ZoneNum) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y * state.dataSurfaceGeometry->CosZoneRelNorth(ZoneNum) + Zone(ZoneNum).OriginY; - SurfaceTmp(SurfNum).Vertex(n).x = Xb * CosBldgRelNorth - Yb * SinBldgRelNorth; - SurfaceTmp(SurfNum).Vertex(n).y = Xb * SinBldgRelNorth + Yb * CosBldgRelNorth; - SurfaceTmp(SurfNum).Vertex(n).z += Zone(ZoneNum).OriginZ; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x = Xb * state.dataSurfaceGeometry->CosBldgRelNorth - Yb * state.dataSurfaceGeometry->SinBldgRelNorth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y = Xb * state.dataSurfaceGeometry->SinBldgRelNorth + Yb * state.dataSurfaceGeometry->CosBldgRelNorth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).z += Zone(ZoneNum).OriginZ; } - } else if (SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { for (n = 1; n <= NSides; ++n) { - Xb = SurfaceTmp(SurfNum).Vertex(n).x; - Yb = SurfaceTmp(SurfNum).Vertex(n).y; - SurfaceTmp(SurfNum).Vertex(n).x = Xb * CosBldgRelNorth - Yb * SinBldgRelNorth; - SurfaceTmp(SurfNum).Vertex(n).y = Xb * SinBldgRelNorth + Yb * CosBldgRelNorth; + Xb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x; + Yb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x = Xb * state.dataSurfaceGeometry->CosBldgRelNorth - Yb * state.dataSurfaceGeometry->SinBldgRelNorth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y = Xb * state.dataSurfaceGeometry->SinBldgRelNorth + Yb * state.dataSurfaceGeometry->CosBldgRelNorth; } } } else { // if world coordinate only need to rotate for Appendix G - ZoneNum = SurfaceTmp(SurfNum).Zone; + ZoneNum = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone; if (ZoneNum > 0) { for (n = 1; n <= NSides; ++n) { - Xb = SurfaceTmp(SurfNum).Vertex(n).x; - Yb = SurfaceTmp(SurfNum).Vertex(n).y; - SurfaceTmp(SurfNum).Vertex(n).x = Xb * CosBldgRotAppGonly - Yb * SinBldgRotAppGonly; - SurfaceTmp(SurfNum).Vertex(n).y = Xb * SinBldgRotAppGonly + Yb * CosBldgRotAppGonly; + Xb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x; + Yb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x = Xb * state.dataSurfaceGeometry->CosBldgRotAppGonly - Yb * state.dataSurfaceGeometry->SinBldgRotAppGonly; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y = Xb * state.dataSurfaceGeometry->SinBldgRotAppGonly + Yb * state.dataSurfaceGeometry->CosBldgRotAppGonly; } - } else if (SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_B) { for (n = 1; n <= NSides; ++n) { - Xb = SurfaceTmp(SurfNum).Vertex(n).x; - Yb = SurfaceTmp(SurfNum).Vertex(n).y; - SurfaceTmp(SurfNum).Vertex(n).x = Xb * CosBldgRotAppGonly - Yb * SinBldgRotAppGonly; - SurfaceTmp(SurfNum).Vertex(n).y = Xb * SinBldgRotAppGonly + Yb * CosBldgRotAppGonly; + Xb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x; + Yb = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x = Xb * state.dataSurfaceGeometry->CosBldgRotAppGonly - Yb * state.dataSurfaceGeometry->SinBldgRotAppGonly; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y = Xb * state.dataSurfaceGeometry->SinBldgRotAppGonly + Yb * state.dataSurfaceGeometry->CosBldgRotAppGonly; } } } if (NSides > 2) { - DistanceCheck = distance(SurfaceTmp(SurfNum).Vertex(SurfaceTmp(SurfNum).Sides), SurfaceTmp(SurfNum).Vertex(1)); + DistanceCheck = distance(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides), state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1)); if (DistanceCheck < 0.01) { if (DisplayExtraWarnings) { ShowWarningError(RoutineName + "Distance between two vertices < .01, possibly coincident. for Surface=" + - SurfaceTmp(SurfNum).Name + ", in Zone=" + SurfaceTmp(SurfNum).ZoneName); - ShowContinueError("Vertex [" + RoundSigDigits(SurfaceTmp(SurfNum).Sides) + "]=(" + - RoundSigDigits(SurfaceTmp(SurfNum).Vertex(SurfaceTmp(SurfNum).Sides).x, 2) + ',' + - RoundSigDigits(SurfaceTmp(SurfNum).Vertex(SurfaceTmp(SurfNum).Sides).y, 2) + ',' + - RoundSigDigits(SurfaceTmp(SurfNum).Vertex(SurfaceTmp(SurfNum).Sides).z, 2) + ')'); - ShowContinueError("Vertex [" + RoundSigDigits(1) + "]=(" + RoundSigDigits(SurfaceTmp(SurfNum).Vertex(1).x, 2) + ',' + - RoundSigDigits(SurfaceTmp(SurfNum).Vertex(1).y, 2) + ',' + RoundSigDigits(SurfaceTmp(SurfNum).Vertex(1).z, 2) + + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + ", in Zone=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName); + ShowContinueError("Vertex [" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + "]=(" + + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides).x, 2) + ',' + + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides).y, 2) + ',' + + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides).z, 2) + ')'); + ShowContinueError("Vertex [" + RoundSigDigits(1) + "]=(" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1).x, 2) + ',' + + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1).y, 2) + ',' + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1).z, 2) + ')'); } ++TotalCoincidentVertices; - if (SurfaceTmp(SurfNum).Sides > 3) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides > 3) { if (DisplayExtraWarnings) { - ShowContinueError("Dropping Vertex [" + RoundSigDigits(SurfaceTmp(SurfNum).Sides) + "]."); + ShowContinueError("Dropping Vertex [" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + "]."); } - --SurfaceTmp(SurfNum).Sides; - SurfaceTmp(SurfNum).Vertex.redimension(SurfaceTmp(SurfNum).Sides); + --state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.redimension(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); } else { if (DisplayExtraWarnings) { - ShowContinueError("Cannot Drop Vertex [" + RoundSigDigits(SurfaceTmp(SurfNum).Sides) + + ShowContinueError("Cannot Drop Vertex [" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + "]; Number of Surface Sides at minimum. This surface is now a degenerate surface."); } ++TotalDegenerateSurfaces; @@ -7689,29 +7582,29 @@ namespace SurfaceGeometry { // DO Vrt=2,SurfaceTmp(SurfNum)%Sides Vrt = 2; while (true) { - DistanceCheck = distance(SurfaceTmp(SurfNum).Vertex(Vrt), SurfaceTmp(SurfNum).Vertex(Vrt - 1)); + DistanceCheck = distance(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt), state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt - 1)); if (DistanceCheck < 0.01) { if (DisplayExtraWarnings) { ShowWarningError(RoutineName + "Distance between two vertices < .01, possibly coincident. for Surface=" + - SurfaceTmp(SurfNum).Name + ", in Zone=" + SurfaceTmp(SurfNum).ZoneName); - ShowContinueError("Vertex [" + RoundSigDigits(Vrt) + "]=(" + RoundSigDigits(SurfaceTmp(SurfNum).Vertex(Vrt).x, 2) + ',' + - RoundSigDigits(SurfaceTmp(SurfNum).Vertex(Vrt).y, 2) + ',' + - RoundSigDigits(SurfaceTmp(SurfNum).Vertex(Vrt).z, 2) + ')'); - ShowContinueError("Vertex [" + RoundSigDigits(Vrt - 1) + "]=(" + RoundSigDigits(SurfaceTmp(SurfNum).Vertex(Vrt - 1).x, 2) + - ',' + RoundSigDigits(SurfaceTmp(SurfNum).Vertex(Vrt - 1).y, 2) + ',' + - RoundSigDigits(SurfaceTmp(SurfNum).Vertex(Vrt - 1).z, 2) + ')'); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + ", in Zone=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName); + ShowContinueError("Vertex [" + RoundSigDigits(Vrt) + "]=(" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).x, 2) + ',' + + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).y, 2) + ',' + + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt).z, 2) + ')'); + ShowContinueError("Vertex [" + RoundSigDigits(Vrt - 1) + "]=(" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt - 1).x, 2) + + ',' + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt - 1).y, 2) + ',' + + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(Vrt - 1).z, 2) + ')'); } ++TotalCoincidentVertices; - if (Vrt == SurfaceTmp(SurfNum).Sides) { - if (SurfaceTmp(SurfNum).Sides > 3) { + if (Vrt == state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides > 3) { if (DisplayExtraWarnings) { - ShowContinueError("Dropping Vertex [" + RoundSigDigits(SurfaceTmp(SurfNum).Sides) + "]."); + ShowContinueError("Dropping Vertex [" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + "]."); } - --SurfaceTmp(SurfNum).Sides; - SurfaceTmp(SurfNum).Vertex.redimension(SurfaceTmp(SurfNum).Sides); + --state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.redimension(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); } else { if (DisplayExtraWarnings) { - ShowContinueError("Cannot Drop Vertex [" + RoundSigDigits(SurfaceTmp(SurfNum).Sides) + + ShowContinueError("Cannot Drop Vertex [" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + "]; Number of Surface Sides at minimum. This surface is now a degenerate surface."); } ++TotalDegenerateSurfaces; @@ -7719,20 +7612,20 @@ namespace SurfaceGeometry { } DistanceCheck = 0.0; } else { - if (SurfaceTmp(SurfNum).Sides > 3) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides > 3) { if (DisplayExtraWarnings) { ShowContinueError("Dropping Vertex [" + RoundSigDigits(Vrt) + "]."); } - for (n = Vrt; n <= SurfaceTmp(SurfNum).Sides - 1; ++n) { - SurfaceTmp(SurfNum).Vertex(n).x = SurfaceTmp(SurfNum).Vertex(n + 1).x; - SurfaceTmp(SurfNum).Vertex(n).y = SurfaceTmp(SurfNum).Vertex(n + 1).y; - SurfaceTmp(SurfNum).Vertex(n).z = SurfaceTmp(SurfNum).Vertex(n + 1).z; + for (n = Vrt; n <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides - 1; ++n) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n + 1).x; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n + 1).y; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).z = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n + 1).z; } - --SurfaceTmp(SurfNum).Sides; - SurfaceTmp(SurfNum).Vertex.redimension(SurfaceTmp(SurfNum).Sides); + --state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.redimension(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); } else { if (DisplayExtraWarnings) { - ShowContinueError("Cannot Drop Vertex [" + RoundSigDigits(SurfaceTmp(SurfNum).Sides) + + ShowContinueError("Cannot Drop Vertex [" + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) + "]; Number of Surface Sides at minimum. This surface is now a degenerate surface."); } ++TotalDegenerateSurfaces; @@ -7743,95 +7636,95 @@ namespace SurfaceGeometry { } Perimeter += DistanceCheck; ++Vrt; - if (Vrt > SurfaceTmp(SurfNum).Sides) break; + if (Vrt > state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides) break; } - SurfaceTmp(SurfNum).Perimeter = Perimeter; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter = Perimeter; - CreateNewellSurfaceNormalVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - CreateNewellAreaVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellAreaVector); + CreateNewellSurfaceNormalVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + CreateNewellAreaVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); // For surfaces with subsurfaces, the following two areas are turned into net areas later by // subtracting subsurface areas - SurfaceTmp(SurfNum).GrossArea = VecLength(SurfaceTmp(SurfNum).NewellAreaVector); - SurfaceTmp(SurfNum).Area = SurfaceTmp(SurfNum).GrossArea; - SurfaceTmp(SurfNum).NetAreaShadowCalc = SurfaceTmp(SurfNum).Area; - DetermineAzimuthAndTilt(SurfaceTmp(SurfNum).Vertex, - SurfaceTmp(SurfNum).Sides, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea = VecLength(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + DetermineAzimuthAndTilt(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, SurfWorldAz, SurfTilt, - SurfaceTmp(SurfNum).lcsx, - SurfaceTmp(SurfNum).lcsy, - SurfaceTmp(SurfNum).lcsz, - SurfaceTmp(SurfNum).GrossArea, - SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - dotp = dot(SurfaceTmp(SurfNum).NewellSurfaceNormalVector, TestVector); - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Roof && dotp < -0.000001) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsx, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsy, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsz, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + dotp = dot(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector, TestVector); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Roof && dotp < -0.000001) { TiltString = RoundSigDigits(SurfTilt, 1); ShowWarningError(RoutineName + "Roof/Ceiling is upside down! Tilt angle=[" + TiltString + "], should be near 0, Surface=\"" + - SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + SurfaceTmp(SurfNum).ZoneName + "\"."); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName + "\"."); ShowContinueError("Automatic fix is attempted."); - ReverseAndRecalculate(state, SurfNum, SurfaceTmp(SurfNum).Sides, SurfWorldAz, SurfTilt); - } else if (SurfaceTmp(SurfNum).Class == SurfaceClass_Roof && SurfTilt > 80.0) { + ReverseAndRecalculate(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, SurfWorldAz, SurfTilt); + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Roof && SurfTilt > 80.0) { TiltString = RoundSigDigits(SurfTilt, 1); ShowWarningError(RoutineName + "Roof/Ceiling is not oriented correctly! Tilt angle=[" + TiltString + - "], should be near 0, Surface=\"" + SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + SurfaceTmp(SurfNum).ZoneName + + "], should be near 0, Surface=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName + "\"."); } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && dotp > 0.000001) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && dotp > 0.000001) { TiltString = RoundSigDigits(SurfTilt, 1); ShowWarningError(RoutineName + "Floor is upside down! Tilt angle=[" + TiltString + "], should be near 180, Surface=\"" + - SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + SurfaceTmp(SurfNum).ZoneName + "\"."); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName + "\"."); ShowContinueError("Automatic fix is attempted."); - ReverseAndRecalculate(state, SurfNum, SurfaceTmp(SurfNum).Sides, SurfWorldAz, SurfTilt); - } else if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && SurfTilt < 158.2) { // slope/grade = 40%! + ReverseAndRecalculate(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, SurfWorldAz, SurfTilt); + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && SurfTilt < 158.2) { // slope/grade = 40%! TiltString = RoundSigDigits(SurfTilt, 1); ShowWarningError(RoutineName + "Floor is not oriented correctly! Tilt angle=[" + TiltString + "], should be near 180, Surface=\"" + - SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + SurfaceTmp(SurfNum).ZoneName + "\"."); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", in Zone=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName + "\"."); } - SurfaceTmp(SurfNum).Azimuth = SurfWorldAz; - SurfaceTmp(SurfNum).Tilt = SurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = SurfWorldAz; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = SurfTilt; // Sine and cosine of azimuth and tilt - SurfaceTmp(SurfNum).SinAzim = std::sin(SurfWorldAz * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).CosAzim = std::cos(SurfWorldAz * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).SinTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).CosTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); - if (SurfaceTmp(SurfNum).ViewFactorGround == DataGlobalConstants::AutoCalculate()) { - SurfaceTmp(SurfNum).ViewFactorGround = 0.5 * (1.0 - SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim = std::sin(SurfWorldAz * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim = std::cos(SurfWorldAz * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround == DataGlobalConstants::AutoCalculate()) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); } // Outward normal unit vector (pointing away from room) - SurfaceTmp(SurfNum).OutNormVec = SurfaceTmp(SurfNum).NewellSurfaceNormalVector; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector; for (n = 1; n <= 3; ++n) { - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window || SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || - SurfaceTmp(SurfNum).Class == SurfaceClass_Door) - SurfaceTmp(SurfNum).Area *= SurfaceTmp(SurfNum).Multiplier; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window || state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_GlassDoor || + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Door) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area *= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; // Can perform tests on this surface here - SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); // The following IR view factors are modified in subr. SkyDifSolarShading if there are shadowing // surfaces - SurfaceTmp(SurfNum).ViewFactorSkyIR = SurfaceTmp(SurfNum).ViewFactorSky; - SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSkyIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); // Call to transform vertices - TransformVertsByAspect(state, SurfNum, SurfaceTmp(SurfNum).Sides); + TransformVertsByAspect(state, SurfNum, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides); } else { - ShowFatalError(RoutineName + "Called with less than 2 sides, Surface=" + SurfaceTmp(SurfNum).Name); + ShowFatalError(RoutineName + "Called with less than 2 sides, Surface=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); } // Preliminary Height/Width - temp = SurfaceTmp(SurfNum).Vertex(3) - SurfaceTmp(SurfNum).Vertex(2); + temp = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(3) - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2); ThisWidth = VecLength(temp); - temp = SurfaceTmp(SurfNum).Vertex(2) - SurfaceTmp(SurfNum).Vertex(1); + temp = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2) - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1); ThisHeight = VecLength(temp); - SurfaceTmp(SurfNum).Height = ThisHeight; - SurfaceTmp(SurfNum).Width = ThisWidth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height = ThisHeight; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Width = ThisWidth; } void ReverseAndRecalculate(EnergyPlusData &state, @@ -7883,45 +7776,45 @@ namespace SurfaceGeometry { Array1D Vertices(NSides); // Vertices, in specified order for (n = 1; n <= NSides; ++n) { - Vertices(n) = SurfaceTmp(SurfNum).Vertex(n); + Vertices(n) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n); } RevPtr = NSides; for (n = 1; n <= NSides; ++n) { - SurfaceTmp(SurfNum).Vertex(n) = Vertices(RevPtr); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n) = Vertices(RevPtr); --RevPtr; } - print(state.files.debug, "Reversing Surface Name={}\n", SurfaceTmp(SurfNum).Name); + print(state.files.debug, "Reversing Surface Name={}\n", state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); for (n = 1; n <= NSides; ++n) { print(state.files.debug, "side={:5} abs coord vertex= {:18.13F} {:18.13F} {:18.13F}\n", n, - SurfaceTmp(SurfNum).Vertex(n).x, - SurfaceTmp(SurfNum).Vertex(n).y, - SurfaceTmp(SurfNum).Vertex(n).z); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).z); } - CreateNewellSurfaceNormalVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - DetermineAzimuthAndTilt(SurfaceTmp(SurfNum).Vertex, - SurfaceTmp(SurfNum).Sides, + CreateNewellSurfaceNormalVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + DetermineAzimuthAndTilt(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, SurfAzimuth, SurfTilt, - SurfaceTmp(SurfNum).lcsx, - SurfaceTmp(SurfNum).lcsy, - SurfaceTmp(SurfNum).lcsz, - SurfaceTmp(SurfNum).GrossArea, - SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Roof && SurfTilt > 80.0) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsx, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsy, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsz, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Roof && SurfTilt > 80.0) { TiltString = RoundSigDigits(SurfTilt, 1); ShowWarningError(RoutineName + "Roof/Ceiling is still upside down! Tilt angle=[" + TiltString + "], should be near 0, please fix manually."); } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && SurfTilt < 158.2) { // 40% grade! + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Floor && SurfTilt < 158.2) { // 40% grade! ShowWarningError(RoutineName + "Floor is still upside down! Tilt angle=[" + TiltString + "], should be near 180, please fix manually."); } } - void MakeMirrorSurface(int &SurfNum) // In=>Surface to Mirror, Out=>new Surface index + void MakeMirrorSurface(EnergyPlusData &state, int &SurfNum) // In=>Surface to Mirror, Out=>new Surface index { // SUBROUTINE INFORMATION: @@ -7939,25 +7832,8 @@ namespace SurfaceGeometry { // METHODOLOGY EMPLOYED: // Reverse the vertices in the original surface. Add "bi" to name. - // REFERENCES: - // na - - // Using/Aliasing using namespace Vectors; - // Locals - // SUBROUTINE ARGUMENT DEFINITIONS: - - // SUBROUTINE PARAMETER DEFINITIONS: - // na - - // INTERFACE BLOCK SPECIFICATIONS - // na - - // DERIVED TYPE DEFINITIONS - // na - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int Vert; int NVert; Real64 SurfWorldAz; @@ -7965,100 +7841,100 @@ namespace SurfaceGeometry { int n; // TYPE(Vector) :: temp1 - NVert = SurfaceTmp(SurfNum).Sides; - SurfaceTmp(SurfNum + 1).Vertex.allocate(NVert); - // doesn't work when Vertex are pointers SurfaceTmp(SurfNum+1)=SurfaceTmp(SurfNum) - SurfaceTmp(SurfNum + 1).Name = SurfaceTmp(SurfNum).Name; - SurfaceTmp(SurfNum + 1).Construction = SurfaceTmp(SurfNum).Construction; - SurfaceTmp(SurfNum + 1).ConstructionStoredInputValue = SurfaceTmp(SurfNum).ConstructionStoredInputValue; - SurfaceTmp(SurfNum + 1).Class = SurfaceTmp(SurfNum).Class; - SurfaceTmp(SurfNum + 1).GrossArea = SurfaceTmp(SurfNum).GrossArea; - SurfaceTmp(SurfNum + 1).Area = SurfaceTmp(SurfNum).Area; - SurfaceTmp(SurfNum + 1).Azimuth = SurfaceTmp(SurfNum).Azimuth; - SurfaceTmp(SurfNum + 1).Height = SurfaceTmp(SurfNum).Height; - SurfaceTmp(SurfNum + 1).Reveal = SurfaceTmp(SurfNum).Reveal; - SurfaceTmp(SurfNum + 1).Shape = SurfaceTmp(SurfNum).Shape; - SurfaceTmp(SurfNum + 1).Sides = SurfaceTmp(SurfNum).Sides; - SurfaceTmp(SurfNum + 1).Tilt = SurfaceTmp(SurfNum).Tilt; - SurfaceTmp(SurfNum + 1).Width = SurfaceTmp(SurfNum).Width; - SurfaceTmp(SurfNum + 1).HeatTransSurf = SurfaceTmp(SurfNum).HeatTransSurf; - SurfaceTmp(SurfNum + 1).BaseSurfName = SurfaceTmp(SurfNum).BaseSurfName; - SurfaceTmp(SurfNum + 1).BaseSurf = SurfaceTmp(SurfNum).BaseSurf; - SurfaceTmp(SurfNum + 1).ZoneName = SurfaceTmp(SurfNum).ZoneName; - SurfaceTmp(SurfNum + 1).Zone = SurfaceTmp(SurfNum).Zone; - SurfaceTmp(SurfNum + 1).ExtBoundCondName = SurfaceTmp(SurfNum).ExtBoundCondName; - SurfaceTmp(SurfNum + 1).ExtBoundCond = SurfaceTmp(SurfNum).ExtBoundCond; - SurfaceTmp(SurfNum + 1).ExtSolar = SurfaceTmp(SurfNum).ExtSolar; - SurfaceTmp(SurfNum + 1).ExtWind = SurfaceTmp(SurfNum).ExtWind; - SurfaceTmp(SurfNum + 1).ViewFactorGround = SurfaceTmp(SurfNum).ViewFactorGround; - SurfaceTmp(SurfNum + 1).ViewFactorSky = SurfaceTmp(SurfNum).ViewFactorSky; - SurfaceTmp(SurfNum + 1).ViewFactorGroundIR = SurfaceTmp(SurfNum).ViewFactorGroundIR; - SurfaceTmp(SurfNum + 1).ViewFactorSkyIR = SurfaceTmp(SurfNum).ViewFactorSkyIR; - SurfaceTmp(SurfNum + 1).SchedShadowSurfIndex = SurfaceTmp(SurfNum).SchedShadowSurfIndex; - SurfaceTmp(SurfNum + 1).ShadowSurfSchedVaries = SurfaceTmp(SurfNum).ShadowSurfSchedVaries; - SurfaceTmp(SurfNum + 1).SchedMinValue = SurfaceTmp(SurfNum).SchedMinValue; - SurfaceTmp(SurfNum + 1).IsTransparent = SurfaceTmp(SurfNum).IsTransparent; - SurfaceTmp(SurfNum + 1).ShadowingSurf = SurfaceTmp(SurfNum).ShadowingSurf; - SurfaceTmp(SurfNum + 1).MaterialMovInsulExt = SurfaceTmp(SurfNum).MaterialMovInsulExt; - SurfaceTmp(SurfNum + 1).MaterialMovInsulInt = SurfaceTmp(SurfNum).MaterialMovInsulInt; - SurfaceTmp(SurfNum + 1).SchedMovInsulExt = SurfaceTmp(SurfNum).SchedMovInsulExt; - SurfaceTmp(SurfNum + 1).SchedMovInsulInt = SurfaceTmp(SurfNum).SchedMovInsulInt; - SurfaceTmp(SurfNum + 1).activeWindowShadingControl = SurfaceTmp(SurfNum).activeWindowShadingControl; - SurfaceTmp(SurfNum + 1).windowShadingControlList = SurfaceTmp(SurfNum).windowShadingControlList; - SurfaceTmp(SurfNum + 1).HasShadeControl = SurfaceTmp(SurfNum).HasShadeControl; - SurfaceTmp(SurfNum + 1).activeShadedConstruction = SurfaceTmp(SurfNum).activeShadedConstruction; - SurfaceTmp(SurfNum + 1).FrameDivider = SurfaceTmp(SurfNum).FrameDivider; - SurfaceTmp(SurfNum + 1).Multiplier = SurfaceTmp(SurfNum).Multiplier; - SurfaceTmp(SurfNum + 1).NetAreaShadowCalc = SurfaceTmp(SurfNum).NetAreaShadowCalc; - SurfaceTmp(SurfNum + 1).Perimeter = SurfaceTmp(SurfNum).Perimeter; - - for (Vert = 1; Vert <= SurfaceTmp(SurfNum).Sides; ++Vert) { - SurfaceTmp(SurfNum + 1).Vertex(Vert) = SurfaceTmp(SurfNum).Vertex(NVert); + NVert = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Vertex.allocate(NVert); + // doesn't work when Vertex are pointers state.dataSurfaceGeometry->SurfaceTmp(SurfNum+1)=state.dataSurfaceGeometry->SurfaceTmp(SurfNum) + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Name = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Construction = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ConstructionStoredInputValue = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ConstructionStoredInputValue; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Class = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).GrossArea = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Area = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Azimuth = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Height = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Reveal = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Reveal; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Shape = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Shape; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Sides = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Tilt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Width = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Width; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).HeatTransSurf = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).BaseSurf = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Zone = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ViewFactorGround = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ViewFactorSky = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ViewFactorGroundIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGroundIR; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ViewFactorSkyIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSkyIR; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).SchedShadowSurfIndex = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ShadowSurfSchedVaries = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfSchedVaries; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).SchedMinValue = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMinValue; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).IsTransparent = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).IsTransparent; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).ShadowingSurf = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowingSurf; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).MaterialMovInsulExt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulExt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).MaterialMovInsulInt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulInt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).SchedMovInsulExt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMovInsulExt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).SchedMovInsulInt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMovInsulInt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).activeWindowShadingControl = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeWindowShadingControl; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).windowShadingControlList = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).HasShadeControl = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HasShadeControl; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).activeShadedConstruction = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).FrameDivider = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Multiplier = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Perimeter = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter; + + for (Vert = 1; Vert <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++Vert) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum + 1).Vertex(Vert) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(NVert); --NVert; } ++SurfNum; - SurfaceTmp(SurfNum).Name = "Mir-" + SurfaceTmp(SurfNum - 1).Name; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name = "Mir-" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum - 1).Name; // TH 3/26/2010 - SurfaceTmp(SurfNum).MirroredSurf = true; - - if (SurfaceTmp(SurfNum).Sides > 2) { - CreateNewellAreaVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellAreaVector); - SurfaceTmp(SurfNum).GrossArea = VecLength(SurfaceTmp(SurfNum).NewellAreaVector); - SurfaceTmp(SurfNum).Area = SurfaceTmp(SurfNum).GrossArea; - SurfaceTmp(SurfNum).NetAreaShadowCalc = SurfaceTmp(SurfNum).Area; - CreateNewellSurfaceNormalVector(SurfaceTmp(SurfNum).Vertex, SurfaceTmp(SurfNum).Sides, SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - DetermineAzimuthAndTilt(SurfaceTmp(SurfNum).Vertex, - SurfaceTmp(SurfNum).Sides, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MirroredSurf = true; + + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides > 2) { + CreateNewellAreaVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea = VecLength(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + CreateNewellSurfaceNormalVector(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + DetermineAzimuthAndTilt(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides, SurfWorldAz, SurfTilt, - SurfaceTmp(SurfNum).lcsx, - SurfaceTmp(SurfNum).lcsy, - SurfaceTmp(SurfNum).lcsz, - SurfaceTmp(SurfNum).GrossArea, - SurfaceTmp(SurfNum).NewellSurfaceNormalVector); - SurfaceTmp(SurfNum).Azimuth = SurfWorldAz; - SurfaceTmp(SurfNum).Tilt = SurfTilt; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsx, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsy, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsz, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth = SurfWorldAz; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt = SurfTilt; // Sine and cosine of azimuth and tilt - SurfaceTmp(SurfNum).SinAzim = std::sin(SurfWorldAz * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).CosAzim = std::cos(SurfWorldAz * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).SinTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); - SurfaceTmp(SurfNum).CosTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim = std::sin(SurfWorldAz * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim = std::cos(SurfWorldAz * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt = std::sin(SurfTilt * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt = std::cos(SurfTilt * DataGlobalConstants::DegToRadians()); // Outward normal unit vector (pointing away from room) - SurfaceTmp(SurfNum).OutNormVec = SurfaceTmp(SurfNum).NewellSurfaceNormalVector; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellSurfaceNormalVector; for (n = 1; n <= 3; ++n) { - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; - if (std::abs(SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) - 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = +1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) + 1.0) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = -1.0; + if (std::abs(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n)) < 1.e-06) state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec(n) = 0.0; } // Can perform tests on this surface here - SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky = 0.5 * (1.0 + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); // The following IR view factors are modified in subr. SkyDifSolarShading if there are shadowing // surfaces - SurfaceTmp(SurfNum).ViewFactorSkyIR = SurfaceTmp(SurfNum).ViewFactorSky; - SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - SurfaceTmp(SurfNum).CosTilt); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSkyIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGroundIR = 0.5 * (1.0 - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt); } } @@ -8594,29 +8470,29 @@ namespace SurfaceGeometry { for (int iShadeCtrl = 1; iShadeCtrl <= TotWinShadingControl; ++iShadeCtrl) { int curShadedConstruction = WindowShadingControl(iShadeCtrl).getInputShadedConstruction; for (int jFeneRef = 1; jFeneRef <= WindowShadingControl(iShadeCtrl).FenestrationCount; ++jFeneRef) { - if (UtilityRoutines::SameString(WindowShadingControl(iShadeCtrl).FenestrationName(jFeneRef), SurfaceTmp(SurfNum).Name)) { - SurfaceTmp(SurfNum).HasShadeControl = true; - SurfaceTmp(SurfNum).windowShadingControlList.push_back(iShadeCtrl); - SurfaceTmp(SurfNum).activeWindowShadingControl = iShadeCtrl; - SurfaceTmp(SurfNum).shadedConstructionList.push_back(curShadedConstruction); - SurfaceTmp(SurfNum).activeShadedConstruction = curShadedConstruction; + if (UtilityRoutines::SameString(WindowShadingControl(iShadeCtrl).FenestrationName(jFeneRef), state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name)) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HasShadeControl = true; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList.push_back(iShadeCtrl); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeWindowShadingControl = iShadeCtrl; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedConstructionList.push_back(curShadedConstruction); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction = curShadedConstruction; // check to make the window refenced is an exterior window - if (SurfaceTmp(SurfNum).ExtBoundCond != ExternalEnvironment) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond != ExternalEnvironment) { ErrorsFound = true; - ShowSevereError("InitialAssociateWindowShadingControlFenestration: \"" + SurfaceTmp(SurfNum).Name + "\", invalid " + + ShowSevereError("InitialAssociateWindowShadingControlFenestration: \"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + " because it is not an exterior window."); ShowContinueError(".. It appears on WindowShadingControl object: \"" + WindowShadingControl(iShadeCtrl).Name); } // check to make sure the window is not using equivalent layer window construction - if (state.dataConstruction->Construct(SurfaceTmp(SurfNum).Construction).WindowTypeEQL) { + if (state.dataConstruction->Construct(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction).WindowTypeEQL) { ErrorsFound = true; - ShowSevereError("InitialAssociateWindowShadingControlFenestration: =\"" + SurfaceTmp(SurfNum).Name + "\", invalid " + + ShowSevereError("InitialAssociateWindowShadingControlFenestration: =\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", invalid " + "\"."); ShowContinueError(".. equivalent layer window model does not use shading control object."); ShowContinueError(".. Shading control is set to none or zero, and simulation continues."); ShowContinueError(".. It appears on WindowShadingControl object: \"" + WindowShadingControl(iShadeCtrl).Name); - SurfaceTmp(SurfNum).activeWindowShadingControl = 0; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeWindowShadingControl = 0; } } } @@ -9132,41 +9008,41 @@ namespace SurfaceGeometry { int alpF = 1; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.soilK = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.soilK = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.soilRho = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.soilRho = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.soilCp = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.soilCp = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.groundSolarAbs = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.groundSolarAbs = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.groundThermalAbs = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.groundThermalAbs = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.groundRoughness = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.groundRoughness = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.farFieldWidth = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.farFieldWidth = rNumericArgs(numF); } numF++; if (!lAlphaFieldBlanks(alpF)) { if (UtilityRoutines::SameString(cAlphaArgs(alpF), "ZeroFlux")) { - kivaManager.settings.deepGroundBoundary = HeatBalanceKivaManager::KivaManager::Settings::ZERO_FLUX; + state.dataSurfaceGeometry->kivaManager.settings.deepGroundBoundary = HeatBalanceKivaManager::KivaManager::Settings::ZERO_FLUX; } else if (UtilityRoutines::SameString(cAlphaArgs(alpF), "GroundWater")) { - kivaManager.settings.deepGroundBoundary = HeatBalanceKivaManager::KivaManager::Settings::GROUNDWATER; + state.dataSurfaceGeometry->kivaManager.settings.deepGroundBoundary = HeatBalanceKivaManager::KivaManager::Settings::GROUNDWATER; } else if (UtilityRoutines::SameString(cAlphaArgs(alpF), "Autoselect")) { - kivaManager.settings.deepGroundBoundary = HeatBalanceKivaManager::KivaManager::Settings::AUTO; + state.dataSurfaceGeometry->kivaManager.settings.deepGroundBoundary = HeatBalanceKivaManager::KivaManager::Settings::AUTO; } else { ErrorsFound = true; ShowSevereError("Foundation:Kiva:Settings, " + cAlphaArgs(alpF) + " is not a valid choice for " + cAlphaFieldNames(alpF)); @@ -9175,27 +9051,27 @@ namespace SurfaceGeometry { alpF++; if (lNumericFieldBlanks(numF) || rNumericArgs(numF) == DataGlobalConstants::AutoCalculate()) { - kivaManager.settings.deepGroundDepth = 40.0; + state.dataSurfaceGeometry->kivaManager.settings.deepGroundDepth = 40.0; } else { - kivaManager.settings.deepGroundDepth = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.deepGroundDepth = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.minCellDim = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.minCellDim = rNumericArgs(numF); } numF++; if (!lNumericFieldBlanks(numF)) { - kivaManager.settings.maxGrowthCoeff = rNumericArgs(numF); + state.dataSurfaceGeometry->kivaManager.settings.maxGrowthCoeff = rNumericArgs(numF); } numF++; if (!lAlphaFieldBlanks(alpF)) { if (UtilityRoutines::SameString(cAlphaArgs(alpF), "Hourly")) { - kivaManager.settings.timestepType = HeatBalanceKivaManager::KivaManager::Settings::HOURLY; - kivaManager.timestep = 3600.; // seconds + state.dataSurfaceGeometry->kivaManager.settings.timestepType = HeatBalanceKivaManager::KivaManager::Settings::HOURLY; + state.dataSurfaceGeometry->kivaManager.timestep = 3600.; // seconds } else /* if (UtilityRoutines::SameString(cAlphaArgs( alpF ), "Timestep")) */ { - kivaManager.settings.timestepType = HeatBalanceKivaManager::KivaManager::Settings::TIMESTEP; - kivaManager.timestep = DataGlobals::MinutesPerTimeStep * 60.; + state.dataSurfaceGeometry->kivaManager.settings.timestepType = HeatBalanceKivaManager::KivaManager::Settings::TIMESTEP; + state.dataSurfaceGeometry->kivaManager.timestep = DataGlobals::MinutesPerTimeStep * 60.; } } alpF++; @@ -9208,7 +9084,7 @@ namespace SurfaceGeometry { int TotKivaFnds = inputProcessor->getNumObjectsFound(cCurrentModuleObject); if (TotKivaFnds > 0) { - kivaManager.defineDefaultFoundation(); + state.dataSurfaceGeometry->kivaManager.defineDefaultFoundation(); Array1D_string fndNames; fndNames.allocate(TotKivaFnds + 1); @@ -9247,7 +9123,7 @@ namespace SurfaceGeometry { // Start with copy of default auto &fnd = fndInput.foundation; - fnd = kivaManager.defaultFoundation.foundation; + fnd = state.dataSurfaceGeometry->kivaManager.defaultFoundation.foundation; // Indoor temperature if (!lNumericFieldBlanks(numF)) { @@ -9584,7 +9460,7 @@ namespace SurfaceGeometry { } } - kivaManager.foundationInputs.push_back(fndInput); + state.dataSurfaceGeometry->kivaManager.foundationInputs.push_back(fndInput); } } } @@ -10029,7 +9905,7 @@ namespace SurfaceGeometry { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - SurfNum = UtilityRoutines::FindItemInList(cAlphaArgs(2), SurfaceTmp, TotSurfaces); + SurfNum = UtilityRoutines::FindItemInList(cAlphaArgs(2), state.dataSurfaceGeometry->SurfaceTmp, TotSurfaces); MaterNum = UtilityRoutines::FindItemInList(cAlphaArgs(3), dataMaterial.Material, TotMaterials); SchNum = GetScheduleIndex(state, cAlphaArgs(4)); if (UtilityRoutines::SameString(cAlphaArgs(1), "Outside")) { @@ -10069,16 +9945,16 @@ namespace SurfaceGeometry { { auto const SELECT_CASE_var(InslType); if (SELECT_CASE_var == 1) { - if (SurfaceTmp(SurfNum).MaterialMovInsulExt > 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulExt > 0) { ShowSevereError(cCurrentModuleObject + ", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", already assigned."); ShowContinueError("\"Outside\", was already assigned Material=\"" + - dataMaterial.Material(SurfaceTmp(SurfNum).MaterialMovInsulInt).Name + "\"."); + dataMaterial.Material(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulInt).Name + "\"."); ShowContinueError("attempting to assign Material=\"" + dataMaterial.Material(MaterNum).Name + "\"."); ErrorsFound = true; } - SurfaceTmp(SurfNum).MaterialMovInsulExt = MaterNum; - SurfaceTmp(SurfNum).SchedMovInsulExt = SchNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulExt = MaterNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMovInsulExt = SchNum; if (dataMaterial.Material(MaterNum).Resistance <= 0.0) { if (dataMaterial.Material(MaterNum).Conductivity <= 0.0 || dataMaterial.Material(MaterNum).Thickness <= 0.0) { ShowSevereError(cCurrentModuleObject + ", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + @@ -10104,16 +9980,16 @@ namespace SurfaceGeometry { } } } else if (SELECT_CASE_var == 2) { - if (SurfaceTmp(SurfNum).MaterialMovInsulInt > 0) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulInt > 0) { ShowSevereError(cCurrentModuleObject + ", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\", already assigned."); ShowContinueError("\"Inside\", was already assigned Material=\"" + - dataMaterial.Material(SurfaceTmp(SurfNum).MaterialMovInsulInt).Name + "\"."); + dataMaterial.Material(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulInt).Name + "\"."); ShowContinueError("attempting to assign Material=\"" + dataMaterial.Material(MaterNum).Name + "\"."); ErrorsFound = true; } - SurfaceTmp(SurfNum).MaterialMovInsulInt = MaterNum; - SurfaceTmp(SurfNum).SchedMovInsulInt = SchNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulInt = MaterNum; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMovInsulInt = SchNum; if (dataMaterial.Material(MaterNum).Resistance <= 0.0) { if (dataMaterial.Material(MaterNum).Conductivity <= 0.0 || dataMaterial.Material(MaterNum).Thickness <= 0.0) { ShowSevereError(cCurrentModuleObject + ", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + @@ -10130,7 +10006,7 @@ namespace SurfaceGeometry { } else { } } - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Window) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Window) { ShowSevereError(cCurrentModuleObject + ", " + cAlphaFieldNames(2) + "=\"" + cAlphaArgs(2) + "\""); ShowContinueError("invalid use on a Window. Use WindowShadingControl instead."); ErrorsFound = true; @@ -11010,14 +10886,14 @@ namespace SurfaceGeometry { ErrorInSurface = false; - if (ProcessSurfaceVerticesOneTimeFlag) { - Xpsv.allocate(MaxVerticesPerSurface); - Ypsv.allocate(MaxVerticesPerSurface); - Zpsv.allocate(MaxVerticesPerSurface); - Xpsv = 0.0; - Ypsv = 0.0; - Zpsv = 0.0; - ProcessSurfaceVerticesOneTimeFlag = false; + if (state.dataSurfaceGeometry->ProcessSurfaceVerticesOneTimeFlag) { + state.dataSurfaceGeometry->Xpsv.allocate(MaxVerticesPerSurface); + state.dataSurfaceGeometry->Ypsv.allocate(MaxVerticesPerSurface); + state.dataSurfaceGeometry->Zpsv.allocate(MaxVerticesPerSurface); + state.dataSurfaceGeometry->Xpsv = 0.0; + state.dataSurfaceGeometry->Ypsv = 0.0; + state.dataSurfaceGeometry->Zpsv = 0.0; + state.dataSurfaceGeometry->ProcessSurfaceVerticesOneTimeFlag = false; } // Categorize this surface @@ -11056,9 +10932,9 @@ namespace SurfaceGeometry { SurfWorldAz = Surface(ThisSurf).Azimuth; SurfTilt = Surface(ThisSurf).Tilt; for (n = 1; n <= Surface(ThisSurf).Sides; ++n) { - Xpsv(n) = Surface(ThisSurf).Vertex(n).x; - Ypsv(n) = Surface(ThisSurf).Vertex(n).y; - Zpsv(n) = Surface(ThisSurf).Vertex(n).z; + state.dataSurfaceGeometry->Xpsv(n) = Surface(ThisSurf).Vertex(n).x; + state.dataSurfaceGeometry->Ypsv(n) = Surface(ThisSurf).Vertex(n).y; + state.dataSurfaceGeometry->Zpsv(n) = Surface(ThisSurf).Vertex(n).z; } TVect = Surface(ThisSurf).Vertex(3) - Surface(ThisSurf).Vertex(2); ThisWidth = VecLength(TVect); @@ -11168,18 +11044,18 @@ namespace SurfaceGeometry { } } - Xpsv(1) = XLLC; - Xpsv(2) = XLLC; - Xpsv(3) = XLLC + Surface(ThisSurf).Width; - Xpsv(4) = XLLC + Surface(ThisSurf).Width; - Ypsv(1) = YLLC + Surface(ThisSurf).Height; - Ypsv(4) = YLLC + Surface(ThisSurf).Height; - Ypsv(2) = YLLC; - Ypsv(3) = YLLC; - Zpsv(1) = ZLLC; - Zpsv(2) = ZLLC; - Zpsv(3) = ZLLC; - Zpsv(4) = ZLLC; + state.dataSurfaceGeometry->Xpsv(1) = XLLC; + state.dataSurfaceGeometry->Xpsv(2) = XLLC; + state.dataSurfaceGeometry->Xpsv(3) = XLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Xpsv(4) = XLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Ypsv(1) = YLLC + Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Ypsv(4) = YLLC + Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Ypsv(2) = YLLC; + state.dataSurfaceGeometry->Ypsv(3) = YLLC; + state.dataSurfaceGeometry->Zpsv(1) = ZLLC; + state.dataSurfaceGeometry->Zpsv(2) = ZLLC; + state.dataSurfaceGeometry->Zpsv(3) = ZLLC; + state.dataSurfaceGeometry->Zpsv(4) = ZLLC; if (Surface(ThisSurf).Class == SurfaceClass_Window && Surface(ThisSurf).ExtBoundCond == ExternalEnvironment && Surface(ThisSurf).FrameDivider > 0) { @@ -11269,9 +11145,9 @@ namespace SurfaceGeometry { Xp = Surface(ThisSurf).Vertex(2).x - BaseXLLC; Yp = Surface(ThisSurf).Vertex(2).y - BaseYLLC; Zp = Surface(ThisSurf).Vertex(2).z - BaseZLLC; - Xpsv(2) = -Xp * BaseCosAzimuth + Yp * BaseSinAzimuth; - Ypsv(2) = -Xp * BaseSinAzimuth * BaseCosTilt - Yp * BaseCosAzimuth * BaseCosTilt + Zp * BaseSinTilt; - Zpsv(2) = Xp * BaseSinAzimuth * BaseSinTilt + Yp * BaseCosAzimuth * BaseSinTilt + Zp * BaseCosTilt; + state.dataSurfaceGeometry->Xpsv(2) = -Xp * BaseCosAzimuth + Yp * BaseSinAzimuth; + state.dataSurfaceGeometry->Ypsv(2) = -Xp * BaseSinAzimuth * BaseCosTilt - Yp * BaseCosAzimuth * BaseCosTilt + Zp * BaseSinTilt; + state.dataSurfaceGeometry->Zpsv(2) = Xp * BaseSinAzimuth * BaseSinTilt + Yp * BaseCosAzimuth * BaseSinTilt + Zp * BaseCosTilt; TVect = Surface(ThisSurf).Vertex(3) - Surface(ThisSurf).Vertex(2); ThisWidth = VecLength(TVect); TVect = Surface(ThisSurf).Vertex(2) - Surface(ThisSurf).Vertex(1); @@ -11286,16 +11162,16 @@ namespace SurfaceGeometry { Xp = Surface(ThisSurf).Vertex(1).x - BaseXLLC; Yp = Surface(ThisSurf).Vertex(1).y - BaseYLLC; Zp = Surface(ThisSurf).Vertex(1).z - BaseZLLC; - Xpsv(1) = -Xp * BaseCosAzimuth + Yp * BaseSinAzimuth; - Ypsv(1) = -Xp * BaseSinAzimuth * BaseCosTilt - Yp * BaseCosAzimuth * BaseCosTilt + Zp * BaseSinTilt; - Zpsv(1) = Xp * BaseSinAzimuth * BaseSinTilt + Yp * BaseCosAzimuth * BaseSinTilt + Zp * BaseCosTilt; + state.dataSurfaceGeometry->Xpsv(1) = -Xp * BaseCosAzimuth + Yp * BaseSinAzimuth; + state.dataSurfaceGeometry->Ypsv(1) = -Xp * BaseSinAzimuth * BaseCosTilt - Yp * BaseCosAzimuth * BaseCosTilt + Zp * BaseSinTilt; + state.dataSurfaceGeometry->Zpsv(1) = Xp * BaseSinAzimuth * BaseSinTilt + Yp * BaseCosAzimuth * BaseSinTilt + Zp * BaseCosTilt; Xp = Surface(ThisSurf).Vertex(3).x - BaseXLLC; Yp = Surface(ThisSurf).Vertex(3).y - BaseYLLC; Zp = Surface(ThisSurf).Vertex(3).z - BaseZLLC; - Xpsv(3) = -Xp * BaseCosAzimuth + Yp * BaseSinAzimuth; - Ypsv(3) = -Xp * BaseSinAzimuth * BaseCosTilt - Yp * BaseCosAzimuth * BaseCosTilt + Zp * BaseSinTilt; - Zpsv(3) = Xp * BaseSinAzimuth * BaseSinTilt + Yp * BaseCosAzimuth * BaseSinTilt + Zp * BaseCosTilt; + state.dataSurfaceGeometry->Xpsv(3) = -Xp * BaseCosAzimuth + Yp * BaseSinAzimuth; + state.dataSurfaceGeometry->Ypsv(3) = -Xp * BaseSinAzimuth * BaseCosTilt - Yp * BaseCosAzimuth * BaseCosTilt + Zp * BaseSinTilt; + state.dataSurfaceGeometry->Zpsv(3) = Xp * BaseSinAzimuth * BaseSinTilt + Yp * BaseCosAzimuth * BaseSinTilt + Zp * BaseCosTilt; } else if (SELECT_CASE_var == SurfaceShape::RectangularOverhang) { @@ -11311,18 +11187,18 @@ namespace SurfaceGeometry { ThisHeight = VecLength(TVect); Surface(ThisSurf).Width = ThisWidth; Surface(ThisSurf).Height = ThisHeight; - Xpsv(1) = XLLC; - Xpsv(2) = XLLC; - Xpsv(3) = XLLC + Surface(ThisSurf).Width; - Xpsv(4) = XLLC + Surface(ThisSurf).Width; - Ypsv(1) = YLLC; - Ypsv(2) = YLLC; - Ypsv(3) = YLLC; - Ypsv(4) = YLLC; - Zpsv(1) = Surface(ThisSurf).Height; - Zpsv(4) = Surface(ThisSurf).Height; - Zpsv(2) = 0.0; - Zpsv(3) = 0.0; + state.dataSurfaceGeometry->Xpsv(1) = XLLC; + state.dataSurfaceGeometry->Xpsv(2) = XLLC; + state.dataSurfaceGeometry->Xpsv(3) = XLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Xpsv(4) = XLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Ypsv(1) = YLLC; + state.dataSurfaceGeometry->Ypsv(2) = YLLC; + state.dataSurfaceGeometry->Ypsv(3) = YLLC; + state.dataSurfaceGeometry->Ypsv(4) = YLLC; + state.dataSurfaceGeometry->Zpsv(1) = Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Zpsv(4) = Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Zpsv(2) = 0.0; + state.dataSurfaceGeometry->Zpsv(3) = 0.0; } else if (SELECT_CASE_var == SurfaceShape::RectangularLeftFin) { @@ -11338,18 +11214,18 @@ namespace SurfaceGeometry { ThisHeight = VecLength(TVect); Surface(ThisSurf).Width = ThisWidth; Surface(ThisSurf).Height = ThisHeight; - Xpsv(1) = XLLC; - Xpsv(2) = XLLC; - Xpsv(3) = XLLC; - Xpsv(4) = XLLC; - Ypsv(1) = YLLC; - Ypsv(2) = YLLC; - Ypsv(3) = YLLC + Surface(ThisSurf).Width; - Ypsv(4) = YLLC + Surface(ThisSurf).Width; - Zpsv(1) = Surface(ThisSurf).Height; - Zpsv(4) = Surface(ThisSurf).Height; - Zpsv(2) = 0.0; - Zpsv(3) = 0.0; + state.dataSurfaceGeometry->Xpsv(1) = XLLC; + state.dataSurfaceGeometry->Xpsv(2) = XLLC; + state.dataSurfaceGeometry->Xpsv(3) = XLLC; + state.dataSurfaceGeometry->Xpsv(4) = XLLC; + state.dataSurfaceGeometry->Ypsv(1) = YLLC; + state.dataSurfaceGeometry->Ypsv(2) = YLLC; + state.dataSurfaceGeometry->Ypsv(3) = YLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Ypsv(4) = YLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Zpsv(1) = Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Zpsv(4) = Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Zpsv(2) = 0.0; + state.dataSurfaceGeometry->Zpsv(3) = 0.0; } else if (SELECT_CASE_var == SurfaceShape::RectangularRightFin) { @@ -11365,18 +11241,18 @@ namespace SurfaceGeometry { ThisHeight = VecLength(TVect); Surface(ThisSurf).Width = ThisWidth; Surface(ThisSurf).Height = ThisHeight; - Xpsv(1) = XLLC; - Xpsv(2) = XLLC; - Xpsv(3) = XLLC; - Xpsv(4) = XLLC; - Ypsv(1) = YLLC + Surface(ThisSurf).Width; - Ypsv(2) = YLLC + Surface(ThisSurf).Width; - Ypsv(3) = YLLC; - Ypsv(4) = YLLC; - Zpsv(1) = Surface(ThisSurf).Height; - Zpsv(4) = Surface(ThisSurf).Height; - Zpsv(2) = 0.0; - Zpsv(3) = 0.0; + state.dataSurfaceGeometry->Xpsv(1) = XLLC; + state.dataSurfaceGeometry->Xpsv(2) = XLLC; + state.dataSurfaceGeometry->Xpsv(3) = XLLC; + state.dataSurfaceGeometry->Xpsv(4) = XLLC; + state.dataSurfaceGeometry->Ypsv(1) = YLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Ypsv(2) = YLLC + Surface(ThisSurf).Width; + state.dataSurfaceGeometry->Ypsv(3) = YLLC; + state.dataSurfaceGeometry->Ypsv(4) = YLLC; + state.dataSurfaceGeometry->Zpsv(1) = Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Zpsv(4) = Surface(ThisSurf).Height; + state.dataSurfaceGeometry->Zpsv(2) = 0.0; + state.dataSurfaceGeometry->Zpsv(3) = 0.0; } else { // Error Condition @@ -11388,12 +11264,12 @@ namespace SurfaceGeometry { for (n = 1; n <= Surface(ThisSurf).Sides; ++n) { // if less than 1/10 inch - Xpsv(n) = nint64(10000.0 * Xpsv(n)) / 10000.0; - if (std::abs(Xpsv(n)) < 0.0025) Xpsv(n) = 0.0; - Ypsv(n) = nint64(10000.0 * Ypsv(n)) / 10000.0; - if (std::abs(Ypsv(n)) < 0.0025) Ypsv(n) = 0.0; - Zpsv(n) = nint64(10000.0 * Zpsv(n)) / 10000.0; - if (std::abs(Zpsv(n)) < 0.0025) Zpsv(n) = 0.0; + state.dataSurfaceGeometry->Xpsv(n) = nint64(10000.0 * state.dataSurfaceGeometry->Xpsv(n)) / 10000.0; + if (std::abs(state.dataSurfaceGeometry->Xpsv(n)) < 0.0025) state.dataSurfaceGeometry->Xpsv(n) = 0.0; + state.dataSurfaceGeometry->Ypsv(n) = nint64(10000.0 * state.dataSurfaceGeometry->Ypsv(n)) / 10000.0; + if (std::abs(state.dataSurfaceGeometry->Ypsv(n)) < 0.0025) state.dataSurfaceGeometry->Ypsv(n) = 0.0; + state.dataSurfaceGeometry->Zpsv(n) = nint64(10000.0 * state.dataSurfaceGeometry->Zpsv(n)) / 10000.0; + if (std::abs(state.dataSurfaceGeometry->Zpsv(n)) < 0.0025) state.dataSurfaceGeometry->Zpsv(n) = 0.0; } Surface(ThisSurf).Shape = ThisShape; @@ -11414,9 +11290,9 @@ namespace SurfaceGeometry { for (n = 1; n <= Surface(ThisSurf).Sides; ++n) { // if less than 1/10 inch - ShadeV(ThisSurf).XV(n) = Xpsv(n); - ShadeV(ThisSurf).YV(n) = Ypsv(n); - ShadeV(ThisSurf).ZV(n) = Zpsv(n); + ShadeV(ThisSurf).XV(n) = state.dataSurfaceGeometry->Xpsv(n); + ShadeV(ThisSurf).YV(n) = state.dataSurfaceGeometry->Ypsv(n); + ShadeV(ThisSurf).ZV(n) = state.dataSurfaceGeometry->Zpsv(n); } // Process Surfaces According to Type of Coordinate Origin. @@ -11434,9 +11310,9 @@ namespace SurfaceGeometry { Z0(ThisBaseSurface) = CoordinateTransVector.z; // COMPUTE INVERSE TRANSFORMATION. - X1 = Xpsv(2) - CoordinateTransVector.x; - Y1 = Ypsv(2) - CoordinateTransVector.y; - Z1 = Zpsv(2) - CoordinateTransVector.z; + X1 = state.dataSurfaceGeometry->Xpsv(2) - CoordinateTransVector.x; + Y1 = state.dataSurfaceGeometry->Ypsv(2) - CoordinateTransVector.y; + Z1 = state.dataSurfaceGeometry->Zpsv(2) - CoordinateTransVector.z; // Store the relative coordinate shift values for later use by any subsurfaces Surface(ThisBaseSurface).XShift = Surface(ThisBaseSurface).lcsx.x * X1 + Surface(ThisBaseSurface).lcsx.y * Y1 + Surface(ThisBaseSurface).lcsx.z * Z1; Surface(ThisBaseSurface).YShift = Surface(ThisBaseSurface).lcsy.x * X1 + Surface(ThisBaseSurface).lcsy.y * Y1 + Surface(ThisBaseSurface).lcsy.z * Z1; @@ -11564,7 +11440,7 @@ namespace SurfaceGeometry { // INTEGER :: loop ! DO loop index ShDevName = dataMaterial.Material(ShDevNum).Name; - ConstrNum = SurfaceTmp(SurfNum).Construction; + ConstrNum = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; ConstrName = state.dataConstruction->Construct(ConstrNum).Name; if (WindowShadingControl(WSCPtr).ShadingType == WSC_ST_InteriorShade || WindowShadingControl(WSCPtr).ShadingType == WSC_ST_InteriorBlind) { ConstrNameSh = ConstrName + ':' + ShDevName + ":INT"; @@ -11577,15 +11453,15 @@ namespace SurfaceGeometry { ConstrNewSh = UtilityRoutines::FindItemInList(ConstrNameSh, state.dataConstruction->Construct); if (ConstrNewSh > 0) { - SurfaceTmp(SurfNum).shadedConstructionList[shadeControlIndex] = ConstrNewSh; - SurfaceTmp(SurfNum).activeShadedConstruction = ConstrNewSh; //set the active to the current for now + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedConstructionList[shadeControlIndex] = ConstrNewSh; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction = ConstrNewSh; //set the active to the current for now } else { // Create new construction ConstrNewSh = TotConstructs + 1; - SurfaceTmp(SurfNum).shadedConstructionList[shadeControlIndex] = ConstrNewSh; - SurfaceTmp(SurfNum).activeShadedConstruction = ConstrNewSh; //set the active to the current for now + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedConstructionList[shadeControlIndex] = ConstrNewSh; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction = ConstrNewSh; //set the active to the current for now TotConstructs = ConstrNewSh; state.dataConstruction->Construct.redimension(TotConstructs); NominalRforNominalUCalculation.redimension(TotConstructs); @@ -11955,16 +11831,16 @@ namespace SurfaceGeometry { Vector TVect; rectangularwindow OriginalCoord; - IConst = SurfaceTmp(SurfNum).Construction; + IConst = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; // Height and width of original window - TVect = SurfaceTmp(SurfNum).Vertex(3) - SurfaceTmp(SurfNum).Vertex(2); + TVect = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(3) - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2); W = VecLength(TVect); // SQRT((X(3)-X(2))**2 + (Y(3)-Y(2))**2 + (Z(3)-Z(2))**2) - TVect = SurfaceTmp(SurfNum).Vertex(2) - SurfaceTmp(SurfNum).Vertex(1); + TVect = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2) - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1); H = VecLength(TVect); // SQRT((X(1)-X(2))**2 + (Y(1)-Y(2))**2 + (Z(1)-Z(2))**2) // Save coordinates of original window in case Window 5 data overwrites. - OriginalCoord.Vertex({1, SurfaceTmp(SurfNum).Sides}) = SurfaceTmp(SurfNum).Vertex({1, SurfaceTmp(SurfNum).Sides}); + OriginalCoord.Vertex({1, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides}) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex({1, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides}); // Height and width of first glazing system h1 = state.dataConstruction->Construct(IConst).W5FileGlazingSysHeight; @@ -11981,7 +11857,7 @@ namespace SurfaceGeometry { if (std::abs((H - h1) / H) > 0.10 || std::abs((W - w1) / W) > 0.10) { if (DisplayExtraWarnings) { - ShowWarningError("SurfaceGeometry: ModifyWindow: Window " + SurfaceTmp(SurfNum).Name + + ShowWarningError("SurfaceGeometry: ModifyWindow: Window " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + " uses the Window5 Data File Construction " + state.dataConstruction->Construct(IConst).Name); ShowContinueError("The height " + RoundSigDigits(H, 3) + "(m) or width " + RoundSigDigits(W, 3) + " (m) of this window differs by more than 10%"); @@ -11990,26 +11866,26 @@ namespace SurfaceGeometry { ShowContinueError("This will affect the frame heat transfer calculation if the frame in the Data File entry"); ShowContinueError("is not uniform, i.e., has sections with different geometry and/or thermal properties."); } else { - ++Warning1Count; + ++state.dataSurfaceGeometry->Warning1Count; } } // Calculate net area for base surface - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Area -= SurfaceTmp(SurfNum).Area; - if (SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Area <= 0.0) { - ShowSevereError("Subsurfaces have too much area for base surface=" + SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Name); - ShowContinueError("Subsurface creating error=" + SurfaceTmp(SurfNum).Name); + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Area -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + if (state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Area <= 0.0) { + ShowSevereError("Subsurfaces have too much area for base surface=" + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Name); + ShowContinueError("Subsurface creating error=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); ErrorsFound = true; } // Net area of base surface with unity window multipliers (used in shadowing checks) - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= SurfaceTmp(SurfNum).Area / SurfaceTmp(SurfNum).Multiplier; + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area / state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; } else { // Two glazing systems on Window5 data file for this window // if exterior window, okay. - if (SurfaceTmp(SurfNum).ExtBoundCond == ExternalEnvironment) { + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond == ExternalEnvironment) { // There are two glazing systems (separated by a vertical or horizontal mullion) on the Window5 Data File. // Fill in geometry data for the second window (corresponding to the second glazing system on the data file. // The first glazing system is assumed to be at left for vertical mullion, at bottom for horizontal mullion. @@ -12018,32 +11894,32 @@ namespace SurfaceGeometry { // vertex #2 of the first glazing system. if (DisplayExtraWarnings) { - ShowMessage("SurfaceGeometry: ModifyWindow: Window " + SurfaceTmp(SurfNum).Name + + ShowMessage("SurfaceGeometry: ModifyWindow: Window " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + " has been replaced with the Window 5/6 two glazing system=\"" + state.dataConstruction->Construct(IConst).Name + "\"."); ShowContinueError("Note that originally entered dimensions are overridden."); } else { - ++Warning2Count; + ++state.dataSurfaceGeometry->Warning2Count; } // Allocate another window AddWindow(state, SurfNum, ErrorsFound, AddedSubSurfaces); - } else if (SurfaceTmp(SurfNum).ExtBoundCond > 0) { // Interior window, specified ! not external environment + } else if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond > 0) { // Interior window, specified ! not external environment if (DisplayExtraWarnings) { - ShowWarningError("SurfaceGeometry: ModifyWindow: Interior Window " + SurfaceTmp(SurfNum).Name + + ShowWarningError("SurfaceGeometry: ModifyWindow: Interior Window " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + " has been replaced with the Window 5/6 two glazing system=\"" + state.dataConstruction->Construct(IConst).Name + "\"."); ShowContinueError( "Please check to make sure interior window is correct. Note that originally entered dimensions are overridden."); } else { - ++Warning3Count; + ++state.dataSurfaceGeometry->Warning3Count; } AddWindow(state, SurfNum, ErrorsFound, AddedSubSurfaces); } else { // Interior window, specified not entered - ShowSevereError("SurfaceGeometry: ModifyWindow: Interior Window " + SurfaceTmp(SurfNum).Name + " is a window in an adjacent zone."); + ShowSevereError("SurfaceGeometry: ModifyWindow: Interior Window " + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + " is a window in an adjacent zone."); ShowContinueError("Attempted to add/reverse Window 5/6 multiple glazing system=\"" + state.dataConstruction->Construct(IConst).Name + "\"."); ShowContinueError("Cannot use these Window 5/6 constructs for these Interior Windows. Program will terminate."); ErrorsFound = true; @@ -12119,16 +11995,16 @@ namespace SurfaceGeometry { rectangularwindow NewCoord; rectangularwindow OriginalCoord; - IConst = SurfaceTmp(SurfNum).Construction; + IConst = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Construction; // Height and width of original window - TVect = SurfaceTmp(SurfNum).Vertex(3) - SurfaceTmp(SurfNum).Vertex(2); + TVect = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(3) - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2); W = VecLength(TVect); // SQRT((X(3)-X(2))**2 + (Y(3)-Y(2))**2 + (Z(3)-Z(2))**2) - TVect = SurfaceTmp(SurfNum).Vertex(2) - SurfaceTmp(SurfNum).Vertex(1); + TVect = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2) - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1); H = VecLength(TVect); // SQRT((X(1)-X(2))**2 + (Y(1)-Y(2))**2 + (Z(1)-Z(2))**2) // Save coordinates of original window in case Window 5 data overwrites. - OriginalCoord.Vertex({1, SurfaceTmp(SurfNum).Sides}) = SurfaceTmp(SurfNum).Vertex({1, SurfaceTmp(SurfNum).Sides}); + OriginalCoord.Vertex({1, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides}) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex({1, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides}); // Height and width of first glazing system h1 = state.dataConstruction->Construct(IConst).W5FileGlazingSysHeight; @@ -12138,61 +12014,61 @@ namespace SurfaceGeometry { IConst2 = UtilityRoutines::FindItemInList(Const2Name, state.dataConstruction->Construct); ++AddedSubSurfaces; - SurfaceTmp.redimension(++TotSurfaces); + state.dataSurfaceGeometry->SurfaceTmp.redimension(++TotSurfaces); - SurfaceTmp(TotSurfaces).Vertex.allocate(4); + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex.allocate(4); - SurfaceTmp(TotSurfaces).Name = SurfaceTmp(SurfNum).Name + ":2"; - SurfaceTmp(TotSurfaces).Construction = IConst2; - SurfaceTmp(TotSurfaces).ConstructionStoredInputValue = IConst2; - SurfaceTmp(TotSurfaces).Class = SurfaceTmp(SurfNum).Class; - SurfaceTmp(TotSurfaces).Azimuth = SurfaceTmp(SurfNum).Azimuth; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Name = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + ":2"; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Construction = IConst2; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ConstructionStoredInputValue = IConst2; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Class = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Azimuth = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Azimuth; // Sine and cosine of azimuth and tilt - SurfaceTmp(TotSurfaces).SinAzim = SurfaceTmp(SurfNum).SinAzim; - SurfaceTmp(TotSurfaces).CosAzim = SurfaceTmp(SurfNum).CosAzim; - SurfaceTmp(TotSurfaces).SinTilt = SurfaceTmp(SurfNum).SinTilt; - SurfaceTmp(TotSurfaces).CosTilt = SurfaceTmp(SurfNum).CosTilt; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).SinAzim = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinAzim; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).CosAzim = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosAzim; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).SinTilt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SinTilt; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).CosTilt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).CosTilt; // Outward normal unit vector (pointing away from room) - SurfaceTmp(TotSurfaces).Centroid = SurfaceTmp(SurfNum).Centroid; - SurfaceTmp(TotSurfaces).lcsx = SurfaceTmp(SurfNum).lcsx; - SurfaceTmp(TotSurfaces).lcsy = SurfaceTmp(SurfNum).lcsy; - SurfaceTmp(TotSurfaces).lcsz = SurfaceTmp(SurfNum).lcsz; - SurfaceTmp(TotSurfaces).NewellAreaVector = SurfaceTmp(SurfNum).NewellAreaVector; - SurfaceTmp(TotSurfaces).OutNormVec = SurfaceTmp(SurfNum).OutNormVec; - SurfaceTmp(TotSurfaces).Reveal = SurfaceTmp(SurfNum).Reveal; - SurfaceTmp(TotSurfaces).Shape = SurfaceTmp(SurfNum).Shape; - SurfaceTmp(TotSurfaces).Sides = SurfaceTmp(SurfNum).Sides; - SurfaceTmp(TotSurfaces).Tilt = SurfaceTmp(SurfNum).Tilt; - SurfaceTmp(TotSurfaces).HeatTransSurf = SurfaceTmp(SurfNum).HeatTransSurf; - SurfaceTmp(TotSurfaces).BaseSurfName = SurfaceTmp(SurfNum).BaseSurfName; - SurfaceTmp(TotSurfaces).BaseSurf = SurfaceTmp(SurfNum).BaseSurf; - SurfaceTmp(TotSurfaces).ZoneName = SurfaceTmp(SurfNum).ZoneName; - SurfaceTmp(TotSurfaces).Zone = SurfaceTmp(SurfNum).Zone; - SurfaceTmp(TotSurfaces).ExtBoundCondName = SurfaceTmp(SurfNum).ExtBoundCondName; - SurfaceTmp(TotSurfaces).ExtBoundCond = SurfaceTmp(SurfNum).ExtBoundCond; - SurfaceTmp(TotSurfaces).ExtSolar = SurfaceTmp(SurfNum).ExtSolar; - SurfaceTmp(TotSurfaces).ExtWind = SurfaceTmp(SurfNum).ExtWind; - SurfaceTmp(TotSurfaces).ViewFactorGround = SurfaceTmp(SurfNum).ViewFactorGround; - SurfaceTmp(TotSurfaces).ViewFactorSky = SurfaceTmp(SurfNum).ViewFactorSky; - SurfaceTmp(TotSurfaces).ViewFactorGroundIR = SurfaceTmp(SurfNum).ViewFactorGroundIR; - SurfaceTmp(TotSurfaces).ViewFactorSkyIR = SurfaceTmp(SurfNum).ViewFactorSkyIR; - SurfaceTmp(TotSurfaces).OSCPtr = SurfaceTmp(SurfNum).OSCPtr; - SurfaceTmp(TotSurfaces).SchedShadowSurfIndex = SurfaceTmp(SurfNum).SchedShadowSurfIndex; - SurfaceTmp(TotSurfaces).ShadowSurfSchedVaries = SurfaceTmp(SurfNum).ShadowSurfSchedVaries; - SurfaceTmp(TotSurfaces).MaterialMovInsulExt = SurfaceTmp(SurfNum).MaterialMovInsulExt; - SurfaceTmp(TotSurfaces).MaterialMovInsulInt = SurfaceTmp(SurfNum).MaterialMovInsulInt; - SurfaceTmp(TotSurfaces).SchedMovInsulExt = SurfaceTmp(SurfNum).SchedMovInsulExt; - SurfaceTmp(TotSurfaces).activeWindowShadingControl = SurfaceTmp(SurfNum).activeWindowShadingControl; - SurfaceTmp(TotSurfaces).windowShadingControlList = SurfaceTmp(SurfNum).windowShadingControlList; - SurfaceTmp(TotSurfaces).HasShadeControl = SurfaceTmp(SurfNum).HasShadeControl; - SurfaceTmp(TotSurfaces).activeShadedConstruction = SurfaceTmp(SurfNum).activeShadedConstruction; - SurfaceTmp(TotSurfaces).windowShadingControlList = SurfaceTmp(SurfNum).windowShadingControlList; - SurfaceTmp(TotSurfaces).StormWinConstruction = SurfaceTmp(SurfNum).StormWinConstruction; - SurfaceTmp(TotSurfaces).activeStormWinShadedConstruction = SurfaceTmp(SurfNum).activeStormWinShadedConstruction; - SurfaceTmp(TotSurfaces).shadedStormWinConstructionList = SurfaceTmp(SurfNum).shadedStormWinConstructionList; - SurfaceTmp(TotSurfaces).FrameDivider = SurfaceTmp(SurfNum).FrameDivider; - SurfaceTmp(TotSurfaces).Multiplier = SurfaceTmp(SurfNum).Multiplier; - SurfaceTmp(TotSurfaces).NetAreaShadowCalc = SurfaceTmp(SurfNum).NetAreaShadowCalc; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Centroid = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Centroid; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).lcsx = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsx; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).lcsy = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsy; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).lcsz = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).lcsz; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).NewellAreaVector = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NewellAreaVector; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).OutNormVec = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OutNormVec; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Reveal = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Reveal; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Shape = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Shape; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Sides = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Tilt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Tilt; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).HeatTransSurf = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).BaseSurfName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurfName; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).BaseSurf = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ZoneName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Zone = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ExtBoundCondName = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCondName; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ExtBoundCond = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtBoundCond; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ExtSolar = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ExtWind = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtWind; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ViewFactorGround = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGround; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ViewFactorSky = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSky; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ViewFactorGroundIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorGroundIR; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ViewFactorSkyIR = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ViewFactorSkyIR; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).OSCPtr = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).OSCPtr; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).SchedShadowSurfIndex = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedShadowSurfIndex; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).ShadowSurfSchedVaries = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ShadowSurfSchedVaries; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).MaterialMovInsulExt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulExt; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).MaterialMovInsulInt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).MaterialMovInsulInt; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).SchedMovInsulExt = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).SchedMovInsulExt; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).activeWindowShadingControl = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeWindowShadingControl; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).windowShadingControlList = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).HasShadeControl = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HasShadeControl; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).activeShadedConstruction = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeShadedConstruction; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).windowShadingControlList = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).windowShadingControlList; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).StormWinConstruction = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).StormWinConstruction; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).activeStormWinShadedConstruction = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).activeStormWinShadedConstruction; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).shadedStormWinConstructionList = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).shadedStormWinConstructionList; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).FrameDivider = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).FrameDivider; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Multiplier = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).NetAreaShadowCalc = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc; MulWidth = state.dataConstruction->Construct(IConst).W5FileMullionWidth; w2 = state.dataConstruction->Construct(IConst2).W5FileGlazingSysWidth; @@ -12202,32 +12078,32 @@ namespace SurfaceGeometry { // area of the two glazing systems. Note that for Surface(SurfNum)%Class = 'Window' the effect // of a window multiplier is included in the glazing area. Note that frame areas are subtracted later. - AreaNew = SurfaceTmp(SurfNum).Multiplier * (h1 * w1 + h2 * w2); // both glazing systems + AreaNew = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier * (h1 * w1 + h2 * w2); // both glazing systems // Adjust net area for base surface - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Area -= AreaNew; + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Area -= AreaNew; // Net area of base surface with unity window multipliers (used in shadowing checks) - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= AreaNew / SurfaceTmp(SurfNum).Multiplier; + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).NetAreaShadowCalc -= AreaNew / state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier; // Reset area, etc. of original window - SurfaceTmp(SurfNum).Area = SurfaceTmp(SurfNum).Multiplier * (h1 * w1); - SurfaceTmp(SurfNum).GrossArea = SurfaceTmp(SurfNum).Area; - SurfaceTmp(SurfNum).NetAreaShadowCalc = h1 * w1; - SurfaceTmp(SurfNum).Perimeter = 2 * (h1 + w1); - SurfaceTmp(SurfNum).Height = h1; - SurfaceTmp(SurfNum).Width = w1; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Multiplier * (h1 * w1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).GrossArea = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).NetAreaShadowCalc = h1 * w1; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter = 2 * (h1 + w1); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Height = h1; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Width = w1; // Set area, etc. of new window - SurfaceTmp(TotSurfaces).Area = SurfaceTmp(TotSurfaces).Multiplier * (h2 * w2); - SurfaceTmp(TotSurfaces).GrossArea = SurfaceTmp(TotSurfaces).Area; - SurfaceTmp(TotSurfaces).NetAreaShadowCalc = h2 * w2; - SurfaceTmp(TotSurfaces).Perimeter = 2 * (h2 + w2); - SurfaceTmp(TotSurfaces).Height = h2; - SurfaceTmp(TotSurfaces).Width = w2; - - if (SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Area <= 0.0) { + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Area = state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Multiplier * (h2 * w2); + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).GrossArea = state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Area; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).NetAreaShadowCalc = h2 * w2; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Perimeter = 2 * (h2 + w2); + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Height = h2; + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Width = w2; + + if (state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Area <= 0.0) { ShowSevereError("SurfaceGeometry: ModifyWindow: Subsurfaces have too much area for base surface=" + - SurfaceTmp(SurfaceTmp(SurfNum).BaseSurf).Name); - ShowContinueError("Subsurface (window) creating error=" + SurfaceTmp(SurfNum).Name); + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Name); + ShowContinueError("Subsurface (window) creating error=" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name); ShowContinueError("This window has been replaced by two windows from the Window5 Data File of total area " + RoundSigDigits(AreaNew, 2) + " m2"); ErrorsFound = true; @@ -12295,8 +12171,8 @@ namespace SurfaceGeometry { NewCoord.Vertex(4).y = ya + (dx / W) * (yb - ya); NewCoord.Vertex(4).z = za + (dx / W) * (zb - za); - for (loop = 1; loop <= SurfaceTmp(SurfNum).Sides; ++loop) { - SurfaceTmp(SurfNum).Vertex(loop) = NewCoord.Vertex(loop); + for (loop = 1; loop <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++loop) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(loop) = NewCoord.Vertex(loop); } // Right-hand glazing @@ -12353,8 +12229,8 @@ namespace SurfaceGeometry { NewCoord.Vertex(4).y = ya + (dx / W) * (yb - ya); NewCoord.Vertex(4).z = za + (dx / W) * (zb - za); - for (loop = 1; loop <= SurfaceTmp(TotSurfaces).Sides; ++loop) { - SurfaceTmp(TotSurfaces).Vertex(loop) = NewCoord.Vertex(loop); + for (loop = 1; loop <= state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Sides; ++loop) { + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(loop) = NewCoord.Vertex(loop); } } else { // Horizontal mullion @@ -12416,8 +12292,8 @@ namespace SurfaceGeometry { NewCoord.Vertex(4).y = ya + (dx / W) * (yb - ya); NewCoord.Vertex(4).z = za + (dx / W) * (zb - za); - for (loop = 1; loop <= SurfaceTmp(SurfNum).Sides; ++loop) { - SurfaceTmp(SurfNum).Vertex(loop) = NewCoord.Vertex(loop); + for (loop = 1; loop <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++loop) { + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(loop) = NewCoord.Vertex(loop); } // Top glazing @@ -12474,8 +12350,8 @@ namespace SurfaceGeometry { NewCoord.Vertex(4).y = ya + (dx / W) * (yb - ya); NewCoord.Vertex(4).z = za + (dx / W) * (zb - za); - for (loop = 1; loop <= SurfaceTmp(TotSurfaces).Sides; ++loop) { - SurfaceTmp(TotSurfaces).Vertex(loop) = NewCoord.Vertex(loop); + for (loop = 1; loop <= state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Sides; ++loop) { + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(loop) = NewCoord.Vertex(loop); } } // End of check if vertical or horizontal mullion @@ -12507,25 +12383,10 @@ namespace SurfaceGeometry { // ratio for the entire building based on user input. // This routine is called once for each surface by subroutine GetVertices - // REFERENCES: - // na - - // Using/Aliasing using namespace DataIPShortCuts; - // Locals - // SUBROUTINE ARGUMENT DEFINITIONS: - - // SUBROUTINE PARAMETER DEFINITIONS: static std::string const CurrentModuleObject("GeometryTransform"); - // INTERFACE BLOCK SPECIFICATIONS - // na - - // DERIVED TYPE DEFINITIONS - // na - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Array1D_string cAlphas(1); Array1D rNumerics(2); int NAlphas; @@ -12544,7 +12405,7 @@ namespace SurfaceGeometry { // begin execution // get user input... - if (firstTime) { + if (state.dataSurfaceGeometry->firstTime) { if (inputProcessor->getNumObjectsFound(CurrentModuleObject) == 1) { inputProcessor->getObjectItem(state, CurrentModuleObject, 1, @@ -12563,24 +12424,24 @@ namespace SurfaceGeometry { if (transformPlane != "XY") { ShowWarningError(CurrentModuleObject + ": invalid " + cAlphaFieldNames(1) + "=\"" + cAlphas(1) + "...ignored."); } - firstTime = false; - noTransform = false; + state.dataSurfaceGeometry->firstTime = false; + state.dataSurfaceGeometry->noTransform = false; AspectTransform = true; if (WorldCoordSystem) { ShowWarningError(CurrentModuleObject + ": must use Relative Coordinate System. Transform request ignored."); - noTransform = true; + state.dataSurfaceGeometry->noTransform = true; AspectTransform = false; } } else { - firstTime = false; + state.dataSurfaceGeometry->firstTime = false; } } - if (noTransform) return; + if (state.dataSurfaceGeometry->noTransform) return; // check surface type. - if (!SurfaceTmp(SurfNum).HeatTransSurf) { + if (!state.dataSurfaceGeometry->SurfaceTmp(SurfNum).HeatTransSurf) { // Site Shading do not get transformed. - if (SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F) return; + if (state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Class == SurfaceClass_Detached_F) return; } // testing method of transforming x and y coordinates as follows @@ -12589,18 +12450,18 @@ namespace SurfaceGeometry { // try to first derotate it , transform by aspect and then rotate back. for (n = 1; n <= NSides; ++n) { - Xo = SurfaceTmp(SurfNum).Vertex(n).x; // world coordinates.... shifted by relative north angle... - Yo = SurfaceTmp(SurfNum).Vertex(n).y; + Xo = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x; // world coordinates.... shifted by relative north angle... + Yo = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y; // next derotate the building - XnoRot = Xo * CosBldgRelNorth + Yo * SinBldgRelNorth; - YnoRot = Yo * CosBldgRelNorth - Xo * SinBldgRelNorth; + XnoRot = Xo * state.dataSurfaceGeometry->CosBldgRelNorth + Yo * state.dataSurfaceGeometry->SinBldgRelNorth; + YnoRot = Yo * state.dataSurfaceGeometry->CosBldgRelNorth - Xo * state.dataSurfaceGeometry->SinBldgRelNorth; // translate Xtrans = XnoRot * std::sqrt(NewAspectRatio / OldAspectRatio); Ytrans = YnoRot * std::sqrt(OldAspectRatio / NewAspectRatio); // rerotate - SurfaceTmp(SurfNum).Vertex(n).x = Xtrans * CosBldgRelNorth - Ytrans * SinBldgRelNorth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x = Xtrans * state.dataSurfaceGeometry->CosBldgRelNorth - Ytrans * state.dataSurfaceGeometry->SinBldgRelNorth; - SurfaceTmp(SurfNum).Vertex(n).y = Xtrans * SinBldgRelNorth + Ytrans * CosBldgRelNorth; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y = Xtrans * state.dataSurfaceGeometry->SinBldgRelNorth + Ytrans * state.dataSurfaceGeometry->CosBldgRelNorth; } } @@ -12625,29 +12486,9 @@ namespace SurfaceGeometry { // (Algorithm would need to be changed for higher order // polygons with more than four sides). - // REFERENCES: - // na - - // Using/Aliasing using namespace Vectors; using General::RoundSigDigits; - // Locals - // SUBROUTINE ARGUMENT DEFINITIONS: - // na - - // SUBROUTINE PARAMETER DEFINITIONS: - // na - - // INTERFACE BLOCK SPECIFICATIONS - // na - - // DERIVED TYPE DEFINITIONS - // na - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - - // Object Data static Array1D Triangle1(3); // working struct for a 3-sided surface static Array1D Triangle2(3); // working struct for a 3-sided surface static Vector const zero_vector(0.0); @@ -13157,7 +12998,7 @@ namespace SurfaceGeometry { } } - void CheckConvexity(int const SurfNum, // Current surface number + void CheckConvexity(EnergyPlusData &state, int const SurfNum, // Current surface number int const NSides // Number of sides to figure ) { @@ -13189,19 +13030,8 @@ namespace SurfaceGeometry { using General::RoundSigDigits; using namespace DataErrorTracking; - // Locals - // SUBROUTINE ARGUMENT DEFINITIONS: - - // SUBROUTINE PARAMETER DEFINITIONS: constexpr Real64 TurnThreshold(0.000001); // Sensitivity of convexity test, in radians - // INTERFACE BLOCK SPECIFICATIONS - // na - - // DERIVED TYPE DEFINITIONS - // na - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int n; // Loop index int Np1; // Loop index int Np2; // Loop index @@ -13229,7 +13059,7 @@ namespace SurfaceGeometry { bool SurfCollinearWarning; static std::string ErrLineOut; // Character string for producing error messages - if (CheckConvexityFirstTime) { + if (state.dataSurfaceGeometry->CheckConvexityFirstTime) { ACosZero = std::acos(0.0); X.allocate(MaxVerticesPerSurface + 2); Y.allocate(MaxVerticesPerSurface + 2); @@ -13238,7 +13068,7 @@ namespace SurfaceGeometry { B.allocate(MaxVerticesPerSurface + 2); SurfCollinearVerts.allocate(MaxVerticesPerSurface); VertSize = MaxVerticesPerSurface; - CheckConvexityFirstTime = false; + state.dataSurfaceGeometry->CheckConvexityFirstTime = false; } if (NSides > VertSize) { @@ -13258,16 +13088,16 @@ namespace SurfaceGeometry { } for (n = 1; n <= NSides; ++n) { - X(n) = SurfaceTmp(SurfNum).Vertex(n).x; - Y(n) = SurfaceTmp(SurfNum).Vertex(n).y; - Z(n) = SurfaceTmp(SurfNum).Vertex(n).z; + X(n) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).x; + Y(n) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).y; + Z(n) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n).z; } - X(NSides + 1) = SurfaceTmp(SurfNum).Vertex(1).x; - Y(NSides + 1) = SurfaceTmp(SurfNum).Vertex(1).y; - Z(NSides + 1) = SurfaceTmp(SurfNum).Vertex(1).z; - X(NSides + 2) = SurfaceTmp(SurfNum).Vertex(2).x; - Y(NSides + 2) = SurfaceTmp(SurfNum).Vertex(2).y; - Z(NSides + 2) = SurfaceTmp(SurfNum).Vertex(2).z; + X(NSides + 1) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1).x; + Y(NSides + 1) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1).y; + Z(NSides + 1) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(1).z; + X(NSides + 2) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2).x; + Y(NSides + 2) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2).y; + Z(NSides + 2) = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(2).z; // Determine a suitable plane in which to do the tests Det = 0.0; @@ -13295,10 +13125,10 @@ namespace SurfaceGeometry { B = Z; } else { // This condition should not be reached if the surfaces are guaranteed to be planar already - ShowSevereError("CheckConvexity: Surface=\"" + SurfaceTmp(SurfNum).Name + "\" is non-planar."); + ShowSevereError("CheckConvexity: Surface=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\" is non-planar."); ShowContinueError("Coincident Vertices will be removed as possible."); - for (n = 1; n <= SurfaceTmp(SurfNum).Sides; ++n) { - auto const &point(SurfaceTmp(SurfNum).Vertex(n)); + for (n = 1; n <= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; ++n) { + auto const &point(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(n)); static constexpr auto ErrFmt(" ({:8.3F},{:8.3F},{:8.3F})"); ShowContinueError(format(ErrFmt, point.x, point.y, point.z)); } @@ -13328,7 +13158,7 @@ namespace SurfaceGeometry { } else { // Store the index of the collinear vertex for removal if (!SurfCollinearWarning) { if (DisplayExtraWarnings) { - ShowWarningError("CheckConvexity: Surface=\"" + SurfaceTmp(SurfNum).Name + "\", Collinear points have been removed."); + ShowWarningError("CheckConvexity: Surface=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\", Collinear points have been removed."); } SurfCollinearWarning = true; } @@ -13346,10 +13176,10 @@ namespace SurfaceGeometry { } if (SignFlag != PrevSignFlag) { - if (SolarDistribution != MinimalShadowing && SurfaceTmp(SurfNum).ExtSolar) { + if (SolarDistribution != MinimalShadowing && state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ExtSolar) { if (DisplayExtraWarnings) { - ShowWarningError("CheckConvexity: Zone=\"" + Zone(SurfaceTmp(SurfNum).Zone).Name + "\", Surface=\"" + - SurfaceTmp(SurfNum).Name + "\" is non-convex."); + ShowWarningError("CheckConvexity: Zone=\"" + Zone(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Zone).Name + "\", Surface=\"" + + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\" is non-convex."); Np1 = n + 1; if (Np1 > NSides) Np1 -= NSides; Np2 = n + 2; @@ -13366,7 +13196,7 @@ namespace SurfaceGeometry { // CALL ShowContinueError('...last theta angle=['//TRIM(RoundSigDigits(LastTheta,6))//']') } } - SurfaceTmp(SurfNum).IsConvex = false; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).IsConvex = false; break; } PrevSignFlag = SignFlag; @@ -13376,16 +13206,16 @@ namespace SurfaceGeometry { // must check to make sure don't remove NSides below 3 if (M > 0) { // Remove the collinear points determined above if (NSides - M > 2) { - SurfaceTmp(SurfNum).Sides = NSides - M; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = NSides - M; } else { // too many if (DisplayExtraWarnings) { - ShowWarningError("CheckConvexity: Surface=\"" + SurfaceTmp(SurfNum).Name + "\" has [" + RoundSigDigits(M) + + ShowWarningError("CheckConvexity: Surface=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + "\" has [" + RoundSigDigits(M) + "] collinear points."); ShowContinueError("...too many to remove all. Will leave the surface with 3 sides. But this is now a degenerate surface"); } ++TotalDegenerateSurfaces; - SurfaceTmp(SurfNum).Sides = max(NSides - M, 3); - M = NSides - SurfaceTmp(SurfNum).Sides; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides = max(NSides - M, 3); + M = NSides - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides; } for (J = 1; J <= M; ++J) { Ind = SurfCollinearVerts(J); @@ -13393,24 +13223,24 @@ namespace SurfaceGeometry { Ind = Ind - NSides + M - 1; } for (K = Ind; K <= NSides - 1; ++K) { - SurfaceTmp(SurfNum).Vertex(K - J + 1).x = SurfaceTmp(SurfNum).Vertex(K - J + 2).x; - SurfaceTmp(SurfNum).Vertex(K - J + 1).y = SurfaceTmp(SurfNum).Vertex(K - J + 2).y; - SurfaceTmp(SurfNum).Vertex(K - J + 1).z = SurfaceTmp(SurfNum).Vertex(K - J + 2).z; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(K - J + 1).x = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(K - J + 2).x; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(K - J + 1).y = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(K - J + 2).y; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(K - J + 1).z = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(K - J + 2).z; } } // remove duplicated points and resize Vertex Array1D OldVertex; OldVertex.allocate(NSides); - OldVertex = SurfaceTmp(SurfNum).Vertex; - SurfaceTmp(SurfNum).Vertex.deallocate(); - SurfaceTmp(SurfNum).Vertex.allocate(NSides - M); + OldVertex = state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex; + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.deallocate(); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex.allocate(NSides - M); for (J = 1; J <= NSides - M; ++J) { - SurfaceTmp(SurfNum).Vertex(J) = OldVertex(J); + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Vertex(J) = OldVertex(J); } OldVertex.deallocate(); if (DisplayExtraWarnings) { - ShowWarningError("CheckConvexity: Surface=\"" + SurfaceTmp(SurfNum).Name + - "\": The vertex points has been reprocessed as Sides = " + RoundSigDigits(SurfaceTmp(SurfNum).Sides)); + ShowWarningError("CheckConvexity: Surface=\"" + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name + + "\": The vertex points has been reprocessed as Sides = " + RoundSigDigits(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Sides)); } } } diff --git a/src/EnergyPlus/SurfaceGeometry.hh b/src/EnergyPlus/SurfaceGeometry.hh index 75549e881ae..9b5c944bddc 100644 --- a/src/EnergyPlus/SurfaceGeometry.hh +++ b/src/EnergyPlus/SurfaceGeometry.hh @@ -72,57 +72,12 @@ namespace SurfaceGeometry { using DataSurfaces::SurfaceData; using DataVectorTypes::Vector; - // Data - // MODULE PARAMETER DEFINITIONS - extern Array1D_string const BaseSurfCls; - extern Array1D_string const SubSurfCls; - extern Array1D_int const BaseSurfIDs; - - extern Array1D_int const SubSurfIDs; - - extern int const UnenteredAdjacentZoneSurface; // allows users to enter one zone surface ("Zone") - // referencing another in adjacent zone - extern int const UnreconciledZoneSurface; // interim value between entering surfaces ("Surface") and reconciling - // surface names in other zones - enum enclosureType { RadiantEnclosures, SolarEnclosures }; - // DERIVED TYPE DEFINITIONS - - // MODULE VARIABLE DECLARATIONS: - // Following are used only during getting vertices, so are module variables here. - extern Real64 CosBldgRelNorth; // Cosine of the building rotation (relative north) (includes appendix G rotation) - extern Real64 SinBldgRelNorth; // Sine of the building rotation (relative north) (includes appendix G rotation) - extern Real64 CosBldgRotAppGonly; // Cosine of the building rotation for appendix G only(relative north) - extern Real64 SinBldgRotAppGonly; // Sine of the building rotation for appendix G only (relative north) - extern Array1D CosZoneRelNorth; // Cosine of the zone rotation (relative north) - extern Array1D SinZoneRelNorth; // Sine of the zone rotation (relative north) - - extern bool NoGroundTempObjWarning; // This will cause a warning to be issued if surfaces with "Ground" - // outside environment are used but no ground temperature object was input. - extern bool NoFCGroundTempObjWarning; // This will cause a warning to be issued if surfaces with "GroundFCfactorMethod" - // outside environment are used but no FC ground temperatures was input. - extern bool RectSurfRefWorldCoordSystem; // GlobalGeometryRules=World (true) or Relative (false) - extern int Warning1Count; // counts of Modify Window 5/6 windows - extern int Warning2Count; // counts of overriding exterior windows with Window 5/6 glazing systems - extern int Warning3Count; // counts of overriding interior windows with Window 5/6 glazing systems - - // SUBROUTINE SPECIFICATIONS FOR MODULE SurfaceGeometry - - // Object Data - extern Array1D SurfaceTmp; // Allocated/Deallocated during input processing - extern HeatBalanceKivaManager::KivaManager kivaManager; - - // Functions - - // Clears the global data in HeatBalanceManager. - // Needed for unit tests, should not be normally called. - void clear_state(); - void SetupZoneGeometry(EnergyPlusData &state, bool &ErrorsFound); void AllocateModuleArrays(); @@ -131,7 +86,7 @@ namespace SurfaceGeometry { void GetSurfaceData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input - void checkSubSurfAzTiltNorm(SurfaceData &baseSurface, // Base surface data (in) + void checkSubSurfAzTiltNorm(EnergyPlusData &state, SurfaceData &baseSurface, // Base surface data (in) SurfaceData &subSurface, // Subsurface data (in) bool &surfaceError // True if there is subsurface error that requires a fatal ); @@ -286,8 +241,6 @@ namespace SurfaceGeometry { std::map surfaceMap; }; - extern ExposedFoundationPerimeter exposedFoundationPerimeter; - void GetVertices(EnergyPlusData &state, int const SurfNum, // Current surface number int const NSides, // Number of sides to figure @@ -301,7 +254,7 @@ namespace SurfaceGeometry { Real64 &SurfTilt // Surface tilt ( ); - void MakeMirrorSurface(int &SurfNum); // In=>Surface to Mirror, Out=>new Surface index + void MakeMirrorSurface(EnergyPlusData &state, int &SurfNum); // In=>Surface to Mirror, Out=>new Surface index void GetWindowShadingControlData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input @@ -424,7 +377,7 @@ namespace SurfaceGeometry { SurfaceGeometry::enclosureType const &EnclosureType, // Radiant or Solar bool &ErrorsFound); // Set to true if errors found - void CheckConvexity(int const SurfNum, // Current surface number + void CheckConvexity(EnergyPlusData &state, int const SurfNum, // Current surface number int const NSides // Number of sides to figure ); @@ -440,6 +393,85 @@ namespace SurfaceGeometry { } // namespace SurfaceGeometry +struct SurfaceGeometryData : BaseGlobalStruct { + + Real64 CosBldgRelNorth = 0.0; // Cosine of the building rotation (relative north) (includes appendix G rotation) + Real64 SinBldgRelNorth = 0.0; // Sine of the building rotation (relative north) (includes appendix G rotation) + Real64 CosBldgRotAppGonly = 0.0; // Cosine of the building rotation for appendix G only(relative north) + Real64 SinBldgRotAppGonly = 0.0; // Sine of the building rotation for appendix G only (relative north) + Array1D CosZoneRelNorth; // Cosine of the zone rotation (relative north) + Array1D SinZoneRelNorth; // Sine of the zone rotation (relative north) + + bool NoGroundTempObjWarning = true; // This will cause a warning to be issued if surfaces with "Ground" + // outside environment are used but no ground temperature object was input. + bool NoFCGroundTempObjWarning = true; // This will cause a warning to be issued if surfaces with "GroundFCfactorMethod" + // outside environment are used but no FC ground temperatures was input. + bool RectSurfRefWorldCoordSystem = false; // GlobalGeometryRules:Field Rectangular Surface Coordinate System (A5) = World (true) or Relative (false) + int Warning1Count = 0; // counts of Modify Window 5/6 windows + int Warning2Count = 0; // counts of overriding exterior windows with Window 5/6 glazing systems + int Warning3Count = 0; // counts of overriding interior windows with Window 5/6 glazing systems + + bool ProcessSurfaceVerticesOneTimeFlag = true; + int checkSubSurfAzTiltNormErrCount = 0; + Array1D Xpsv; + Array1D Ypsv; + Array1D Zpsv; + + bool GetSurfaceDataOneTimeFlag = false; + std::unordered_map UniqueSurfaceNames; + bool firstTime = true; + bool noTransform = true; + bool CheckConvexityFirstTime = true; + + Array1D_string const BaseSurfCls; + Array1D_string const SubSurfCls; + Array1D_int const BaseSurfIDs; + Array1D_int const SubSurfIDs; + int const UnenteredAdjacentZoneSurface = -998; // allows users to enter one zone surface ("Zone") + // referencing another in adjacent zone + int const UnreconciledZoneSurface = -999; // interim value between entering surfaces ("Surface") and reconciling + + Array1D SurfaceTmp; // Allocated/Deallocated during input processing + HeatBalanceKivaManager::KivaManager kivaManager; + SurfaceGeometry::ExposedFoundationPerimeter exposedFoundationPerimeter; + + void clear_state() override + { + ProcessSurfaceVerticesOneTimeFlag = true; + checkSubSurfAzTiltNormErrCount = 0; + Xpsv.deallocate(); + Ypsv.deallocate(); + Zpsv.deallocate(); + // Following are used only during getting vertices, so are module variables here. + CosBldgRelNorth = 0.0; + SinBldgRelNorth = 0.0; + CosBldgRotAppGonly = 0.0; + SinBldgRotAppGonly = 0.0; + CosZoneRelNorth.deallocate(); + SinZoneRelNorth.deallocate(); + NoGroundTempObjWarning = true; + NoFCGroundTempObjWarning = true; + RectSurfRefWorldCoordSystem = false; + Warning1Count = 0; + Warning2Count = 0; + Warning3Count = 0; + SurfaceTmp.deallocate(); + GetSurfaceDataOneTimeFlag = false; + UniqueSurfaceNames.clear(); + kivaManager = HeatBalanceKivaManager::KivaManager(); + firstTime = true; + noTransform = true; + CheckConvexityFirstTime = true; + } + + // Default Constructor + SurfaceGeometryData() : + BaseSurfCls(3, {"WALL", "FLOOR", "ROOF"}), + SubSurfCls(6, {"WINDOW", "DOOR", "GLASSDOOR", "SHADING", "TUBULARDAYLIGHTDOME", "TUBULARDAYLIGHTDIFFUSER"}), + BaseSurfIDs(3, {DataSurfaces::SurfaceClass_Wall, DataSurfaces::SurfaceClass_Floor, DataSurfaces::SurfaceClass_Roof}), + SubSurfIDs(6, {DataSurfaces::SurfaceClass_Window, DataSurfaces::SurfaceClass_Door, DataSurfaces::SurfaceClass_GlassDoor, DataSurfaces::SurfaceClass_Shading, DataSurfaces::SurfaceClass_TDD_Dome, DataSurfaces::SurfaceClass_TDD_Diffuser}) + {} +}; } // namespace EnergyPlus #endif diff --git a/src/EnergyPlus/WeatherManager.cc b/src/EnergyPlus/WeatherManager.cc index 6f5e5d970cb..7774dbf4468 100644 --- a/src/EnergyPlus/WeatherManager.cc +++ b/src/EnergyPlus/WeatherManager.cc @@ -274,7 +274,7 @@ namespace WeatherManager { DataEnvironment::varyingOrientationSchedIndex = ScheduleManager::GetScheduleIndex(state, DataIPShortCuts::cAlphaArgs(3)); } - void UpdateLocationAndOrientation() + void UpdateLocationAndOrientation(EnergyPlusData &state) { if (DataEnvironment::varyingLocationSchedIndexLat > 0) { DataEnvironment::Latitude = ScheduleManager::GetCurrentScheduleValue(DataEnvironment::varyingLocationSchedIndexLat); @@ -285,16 +285,16 @@ namespace WeatherManager { CheckLocationValidity(); if (DataEnvironment::varyingOrientationSchedIndex > 0) { DataHeatBalance::BuildingAzimuth = mod(ScheduleManager::GetCurrentScheduleValue(DataEnvironment::varyingOrientationSchedIndex), 360.0); - SurfaceGeometry::CosBldgRelNorth = + state.dataSurfaceGeometry->CosBldgRelNorth = std::cos(-(DataHeatBalance::BuildingAzimuth + DataHeatBalance::BuildingRotationAppendixG) * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinBldgRelNorth = + state.dataSurfaceGeometry->SinBldgRelNorth = std::sin(-(DataHeatBalance::BuildingAzimuth + DataHeatBalance::BuildingRotationAppendixG) * DataGlobalConstants::DegToRadians()); for (size_t SurfNum = 1; SurfNum < DataSurfaces::Surface.size(); ++SurfNum) { for (int n = 1; n <= DataSurfaces::Surface(SurfNum).Sides; ++n) { Real64 Xb = DataSurfaces::Surface(SurfNum).Vertex(n).x; Real64 Yb = DataSurfaces::Surface(SurfNum).Vertex(n).y; - DataSurfaces::Surface(SurfNum).NewVertex(n).x = Xb * SurfaceGeometry::CosBldgRelNorth - Yb * SurfaceGeometry::SinBldgRelNorth; - DataSurfaces::Surface(SurfNum).NewVertex(n).y = Xb * SurfaceGeometry::SinBldgRelNorth + Yb * SurfaceGeometry::CosBldgRelNorth; + DataSurfaces::Surface(SurfNum).NewVertex(n).x = Xb * state.dataSurfaceGeometry->CosBldgRelNorth - Yb * state.dataSurfaceGeometry->SinBldgRelNorth; + DataSurfaces::Surface(SurfNum).NewVertex(n).y = Xb * state.dataSurfaceGeometry->SinBldgRelNorth + Yb * state.dataSurfaceGeometry->CosBldgRelNorth; DataSurfaces::Surface(SurfNum).NewVertex(n).z = DataSurfaces::Surface(SurfNum).Vertex(n).z; } Vectors::CreateNewellSurfaceNormalVector(DataSurfaces::Surface(SurfNum).NewVertex, diff --git a/src/EnergyPlus/WeatherManager.hh b/src/EnergyPlus/WeatherManager.hh index ebb7826f790..751219ba19e 100644 --- a/src/EnergyPlus/WeatherManager.hh +++ b/src/EnergyPlus/WeatherManager.hh @@ -530,7 +530,7 @@ namespace WeatherManager { void ReadVariableLocationOrientation(EnergyPlusData &state); - void UpdateLocationAndOrientation(); + void UpdateLocationAndOrientation(EnergyPlusData &state); void SetupWeekDaysByMonth(EnergyPlusData &state, int StMon, int StDay, int StWeekDay, Array1D_int &WeekDays); From 4fdbdd406d1f08cfa041fd0cb23e0c19b79664e4 Mon Sep 17 00:00:00 2001 From: brianlball Date: Thu, 15 Oct 2020 12:46:38 -0600 Subject: [PATCH 2/6] finish convert SurfaceGeometry --- src/EnergyPlus/ConvectionCoefficients.cc | 2 +- tst/EnergyPlus/unit/AirLoopHVACDOAS.unit.cc | 16 +- .../unit/AirflowNetworkBalanceManager.unit.cc | 56 +-- tst/EnergyPlus/unit/BaseboardRadiator.unit.cc | 22 +- tst/EnergyPlus/unit/DElightManager.unit.cc | 12 +- tst/EnergyPlus/unit/DataSurfaces.unit.cc | 12 +- .../unit/DaylightingManager.unit.cc | 48 +- .../unit/ElectricBaseboardRadiator.unit.cc | 38 +- .../unit/HeatBalanceMovableInsulation.unit.cc | 18 +- .../unit/HeatBalanceSurfaceManager.unit.cc | 20 +- tst/EnergyPlus/unit/OutputReports.unit.cc | 12 +- tst/EnergyPlus/unit/SolarShading.unit.cc | 72 +-- tst/EnergyPlus/unit/SurfaceGeometry.unit.cc | 450 +++++++++--------- tst/EnergyPlus/unit/ThermalChimney.unit.cc | 4 +- .../unit/TranspiredCollector.unit.cc | 12 +- tst/EnergyPlus/unit/UnitarySystem.unit.cc | 4 +- tst/EnergyPlus/unit/WindowManager.unit.cc | 32 +- 17 files changed, 415 insertions(+), 415 deletions(-) diff --git a/src/EnergyPlus/ConvectionCoefficients.cc b/src/EnergyPlus/ConvectionCoefficients.cc index fb2286d7640..d1fdf550360 100644 --- a/src/EnergyPlus/ConvectionCoefficients.cc +++ b/src/EnergyPlus/ConvectionCoefficients.cc @@ -4670,7 +4670,7 @@ namespace ConvectionCoefficients { } else if (SELECT_CASE_var == HcExt_UserCurve) { CalcUserDefinedOutsideHcModel(state, SurfNum, Surface(SurfNum).OutConvHnUserCurveIndex, Hn); if (Surface(SurfNum).ExtBoundCond == DataSurfaces::KivaFoundation) { - HnFn = [=](double Tsurf, double Tamb, double HfTerm, double Roughness, double CosTilt) -> double { + HnFn = [=, &state](double Tsurf, double Tamb, double HfTerm, double Roughness, double CosTilt) -> double { // Remove Hfterm since this is only used for the natural convection portion return state.dataSurfaceGeometry->kivaManager.surfaceConvMap[SurfNum].out(Tsurf, Tamb, HfTerm, Roughness, CosTilt) - HfTerm; }; diff --git a/tst/EnergyPlus/unit/AirLoopHVACDOAS.unit.cc b/tst/EnergyPlus/unit/AirLoopHVACDOAS.unit.cc index 4c51b7f195a..d4ac8ff43c8 100644 --- a/tst/EnergyPlus/unit/AirLoopHVACDOAS.unit.cc +++ b/tst/EnergyPlus/unit/AirLoopHVACDOAS.unit.cc @@ -3964,14 +3964,14 @@ TEST_F(EnergyPlusFixture, AirLoopHVACDOASTest) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; - SurfaceGeometry::CosZoneRelNorth.allocate(6); - SurfaceGeometry::SinZoneRelNorth.allocate(6); - SurfaceGeometry::CosZoneRelNorth = 1.0; - SurfaceGeometry::SinZoneRelNorth = 0.0; - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(6); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(6); + state.dataSurfaceGeometry->CosZoneRelNorth = 1.0; + state.dataSurfaceGeometry->SinZoneRelNorth = 0.0; + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); diff --git a/tst/EnergyPlus/unit/AirflowNetworkBalanceManager.unit.cc b/tst/EnergyPlus/unit/AirflowNetworkBalanceManager.unit.cc index 06dfbbde2cf..f65a6020f0d 100644 --- a/tst/EnergyPlus/unit/AirflowNetworkBalanceManager.unit.cc +++ b/tst/EnergyPlus/unit/AirflowNetworkBalanceManager.unit.cc @@ -2250,8 +2250,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestPressureStat) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -4436,8 +4436,8 @@ TEST_F(EnergyPlusFixture, AirflowNetworkBalanceManager_UserDefinedDuctViewFactor SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -5705,8 +5705,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestExternalNodes) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -6409,8 +6409,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestExternalNodesWithTables) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -7032,8 +7032,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestExternalNodesWithNoInput) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -7721,8 +7721,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestExternalNodesWithSymmetricTable) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -8355,8 +8355,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestExternalNodesWithSymmetricCurve) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -9089,8 +9089,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestExternalNodesWithLocalAirNode) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -9563,8 +9563,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_BasicAdvancedSingleSided) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -13109,8 +13109,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_MultiAirLoopTest) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -13652,8 +13652,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_BasicAdvancedSingleSidedAvoidCrashTest) // Magic to get surfaces read in correctly DataHeatBalance::AnyCTF = true; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, errors); // setup zone geometry and get zone data EXPECT_FALSE(errors); // expect no errors @@ -15582,8 +15582,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestFanModel) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -17165,8 +17165,8 @@ TEST_F(EnergyPlusFixture, AirflowNetworkBalanceManager_DuplicatedNodeNameTest) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -19939,8 +19939,8 @@ std::string const idf_objects = delimited_string({ SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); diff --git a/tst/EnergyPlus/unit/BaseboardRadiator.unit.cc b/tst/EnergyPlus/unit/BaseboardRadiator.unit.cc index 2a2565cde46..d338fb97d3e 100644 --- a/tst/EnergyPlus/unit/BaseboardRadiator.unit.cc +++ b/tst/EnergyPlus/unit/BaseboardRadiator.unit.cc @@ -344,17 +344,17 @@ TEST_F(EnergyPlusFixture, BaseboardConvWater_SizingTest) HeatBalanceManager::GetZoneData(state, errorsFound); ASSERT_FALSE(errorsFound); - SurfaceGeometry::CosZoneRelNorth.allocate(3); - SurfaceGeometry::SinZoneRelNorth.allocate(3); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(3) = std::cos(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(3) = std::sin(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); - - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(3); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(3); + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(3) = std::cos(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(3) = std::sin(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); + + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, errorsFound); ASSERT_FALSE(errorsFound); diff --git a/tst/EnergyPlus/unit/DElightManager.unit.cc b/tst/EnergyPlus/unit/DElightManager.unit.cc index e187e5d97d8..1b7e444b697 100644 --- a/tst/EnergyPlus/unit/DElightManager.unit.cc +++ b/tst/EnergyPlus/unit/DElightManager.unit.cc @@ -316,13 +316,13 @@ TEST_F(EnergyPlusFixture, DElightManagerF_GetInputDElightComplexFenestration_Tes HeatBalanceManager::GetZoneData(state, foundErrors); // read zone data EXPECT_FALSE(foundErrors); // expect no errors - SurfaceGeometry::CosZoneRelNorth.allocate(1); - SurfaceGeometry::SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, foundErrors); // setup zone geometry and get zone data EXPECT_FALSE(foundErrors); // expect no errors diff --git a/tst/EnergyPlus/unit/DataSurfaces.unit.cc b/tst/EnergyPlus/unit/DataSurfaces.unit.cc index 36d2815e910..044eb9e21e4 100644 --- a/tst/EnergyPlus/unit/DataSurfaces.unit.cc +++ b/tst/EnergyPlus/unit/DataSurfaces.unit.cc @@ -174,13 +174,13 @@ TEST_F(EnergyPlusFixture, DataSurfaces_SetSurfaceOutBulbTempAtTest) GetZoneData(state, ErrorsFound); // read zone data EXPECT_FALSE(ErrorsFound); // expect no errors - CosZoneRelNorth.allocate(1); - SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - CosBldgRelNorth = 1.0; - SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; ErrorsFound = false; GetSurfaceData(state, ErrorsFound); // setup zone geometry and get zone data diff --git a/tst/EnergyPlus/unit/DaylightingManager.unit.cc b/tst/EnergyPlus/unit/DaylightingManager.unit.cc index 8c89b173e91..7a34e0fd70a 100644 --- a/tst/EnergyPlus/unit/DaylightingManager.unit.cc +++ b/tst/EnergyPlus/unit/DaylightingManager.unit.cc @@ -821,15 +821,15 @@ TEST_F(EnergyPlusFixture, DaylightingManager_GetDaylParamInGeoTrans_Test) HeatBalanceManager::GetZoneData(state, foundErrors); // read zone data EXPECT_FALSE(foundErrors); // expect no errors - SurfaceGeometry::CosZoneRelNorth.allocate(2); - SurfaceGeometry::SinZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(2); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, foundErrors); // setup zone geometry and get zone data EXPECT_FALSE(foundErrors); // expect no errors @@ -2095,15 +2095,15 @@ TEST_F(EnergyPlusFixture, DaylightingManager_OutputFormats) HeatBalanceManager::GetZoneData(state, foundErrors); // read zone data EXPECT_FALSE(foundErrors); // expect no errors - SurfaceGeometry::CosZoneRelNorth.allocate(2); - SurfaceGeometry::SinZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(2); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, foundErrors); // setup zone geometry and get zone data EXPECT_FALSE(foundErrors); // expect no errors @@ -2840,15 +2840,15 @@ TEST_F(EnergyPlusFixture, DaylightingManager_TDD_NoDaylightingControls) HeatBalanceManager::GetZoneData(state, foundErrors); // read zone data EXPECT_FALSE(foundErrors); // expect no errors - SurfaceGeometry::CosZoneRelNorth.allocate(2); - SurfaceGeometry::SinZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(2); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, foundErrors); // setup zone geometry and get zone data EXPECT_FALSE(foundErrors); // expect no errors diff --git a/tst/EnergyPlus/unit/ElectricBaseboardRadiator.unit.cc b/tst/EnergyPlus/unit/ElectricBaseboardRadiator.unit.cc index 8822231a657..d02a1e875ce 100644 --- a/tst/EnergyPlus/unit/ElectricBaseboardRadiator.unit.cc +++ b/tst/EnergyPlus/unit/ElectricBaseboardRadiator.unit.cc @@ -282,14 +282,14 @@ TEST_F(EnergyPlusFixture, RadConvElecBaseboard_Test1) HeatBalanceManager::GetZoneData(state, errorsFound); ASSERT_FALSE(errorsFound); - SurfaceGeometry::CosZoneRelNorth.allocate(2); - SurfaceGeometry::SinZoneRelNorth.allocate(2); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, errorsFound); ASSERT_FALSE(errorsFound); @@ -573,17 +573,17 @@ TEST_F(EnergyPlusFixture, ElectricBaseboardRadConv_SizingTest) HeatBalanceManager::GetZoneData(state, errorsFound); ASSERT_FALSE(errorsFound); - SurfaceGeometry::CosZoneRelNorth.allocate(3); - SurfaceGeometry::SinZoneRelNorth.allocate(3); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(3) = std::cos(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(3) = std::sin(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); - - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(3); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(3); + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(3) = std::cos(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(3) = std::sin(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); + + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, errorsFound); ASSERT_FALSE(errorsFound); diff --git a/tst/EnergyPlus/unit/HeatBalanceMovableInsulation.unit.cc b/tst/EnergyPlus/unit/HeatBalanceMovableInsulation.unit.cc index 3b42011fb7d..34880cb9ef1 100644 --- a/tst/EnergyPlus/unit/HeatBalanceMovableInsulation.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalanceMovableInsulation.unit.cc @@ -245,15 +245,15 @@ TEST_F(EnergyPlusFixture, SurfaceControlMovableInsulation_InvalidWindowSimpleGla EXPECT_FALSE(ErrorsFound); // set relative coordinate SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); - SurfaceGeometry::CosZoneRelNorth.allocate(2); - SurfaceGeometry::SinZoneRelNorth.allocate(2); - SurfaceGeometry::CosZoneRelNorth = 1.0; - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinZoneRelNorth = 0.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->CosZoneRelNorth = 1.0; + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinZoneRelNorth = 0.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; // set surface data DataSurfaces::TotSurfaces = 1; - SurfaceGeometry::SurfaceTmp.allocate(1); + state.dataSurfaceGeometry->SurfaceTmp.allocate(1); int SurfNum = 0; int TotHTSurfs = DataSurfaces::TotSurfaces = 1; Array1D_string const BaseSurfCls(1, {"WALL"}); @@ -264,8 +264,8 @@ TEST_F(EnergyPlusFixture, SurfaceControlMovableInsulation_InvalidWindowSimpleGla // get movable insulation object data SurfaceGeometry::GetMovableInsulationData(state, ErrorsFound); // check movable insulation material - EXPECT_EQ(SurfaceGeometry::SurfaceTmp(1).BaseSurfName, "ZN001:WALL001"); // base surface name - EXPECT_EQ(SurfaceGeometry::SurfaceTmp(1).MaterialMovInsulExt, 4); // index to movable insulation material + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(1).BaseSurfName, "ZN001:WALL001"); // base surface name + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(1).MaterialMovInsulExt, 4); // index to movable insulation material EXPECT_EQ(dataMaterial.Material(4).Name, "SIMPLEGLAZINGSYSTEM"); // name of movable insulation material EXPECT_EQ(dataMaterial.Material(4).Group, DataHeatBalance::WindowSimpleGlazing); // invalid material group type EXPECT_TRUE(ErrorsFound); // error found due to invalid material diff --git a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc index 80abe8fa07b..c61719018e4 100644 --- a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc @@ -697,8 +697,8 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfTempCalcHeatBalanceI SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -1226,8 +1226,8 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfPropertyLocalEnv) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::SetupZoneGeometry(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -1801,8 +1801,8 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfPropertySrdSurfLWR) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::SetupZoneGeometry(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -2358,8 +2358,8 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfTempCalcHeatBalanceA SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::SetupZoneGeometry(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); @@ -3059,8 +3059,8 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestInitHBInterzoneWindow) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::SetupZoneGeometry(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); diff --git a/tst/EnergyPlus/unit/OutputReports.unit.cc b/tst/EnergyPlus/unit/OutputReports.unit.cc index 1d9eaf6c3cd..2f0a3861da1 100644 --- a/tst/EnergyPlus/unit/OutputReports.unit.cc +++ b/tst/EnergyPlus/unit/OutputReports.unit.cc @@ -135,13 +135,13 @@ TEST_F(EnergyPlusFixture, OutputReports_SurfaceDetailsReport) HeatBalanceManager::GetZoneData(state, foundErrors); // read zone data EXPECT_FALSE(foundErrors); // expect no errors - SurfaceGeometry::CosZoneRelNorth.allocate(1); - SurfaceGeometry::SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, foundErrors); // setup zone geometry and get zone data EXPECT_FALSE(foundErrors); // expect no errors diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index 210df5759db..0ac32d23f52 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -637,13 +637,13 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_FigureSolarBeamAtTimestep) SurfaceGeometry::GetGeometryParameters(state, FoundError); EXPECT_FALSE(FoundError); - SurfaceGeometry::CosZoneRelNorth.allocate(1); - SurfaceGeometry::SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, FoundError); // setup zone geometry and get zone data EXPECT_FALSE(FoundError); // expect no errors @@ -1037,13 +1037,13 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_ExternalShadingIO) SurfaceGeometry::GetGeometryParameters(state, FoundError); EXPECT_FALSE(FoundError); - SurfaceGeometry::CosZoneRelNorth.allocate(1); - SurfaceGeometry::SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; compare_err_stream(""); // just for debugging SurfaceGeometry::SetupZoneGeometry(state, FoundError); // this calls GetSurfaceData() @@ -1450,13 +1450,13 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_DisableGroupSelfShading) SizingManager::GetZoneSizingInput(state); - SurfaceGeometry::CosZoneRelNorth.allocate(1); - SurfaceGeometry::SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; compare_err_stream(""); // just for debugging SurfaceGeometry::SetupZoneGeometry(state, FoundError); // this calls GetSurfaceData() @@ -1818,13 +1818,13 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_PolygonClippingDirect) SurfaceGeometry::GetGeometryParameters(state, FoundError); EXPECT_FALSE(FoundError); - SurfaceGeometry::CosZoneRelNorth.allocate(1); - SurfaceGeometry::SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, FoundError); // setup zone geometry and get zone data EXPECT_FALSE(FoundError); // expect no errors @@ -2225,13 +2225,13 @@ WindowMaterial:SimpleGlazingSystem, SurfaceGeometry::GetGeometryParameters(state, FoundError); EXPECT_FALSE(FoundError); - SurfaceGeometry::CosZoneRelNorth.allocate(1); - SurfaceGeometry::SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, FoundError); // setup zone geometry and get zone data EXPECT_FALSE(FoundError); // expect no errors @@ -2537,13 +2537,13 @@ EXPECT_FALSE(FoundError); SurfaceGeometry::GetGeometryParameters(state, FoundError); EXPECT_FALSE(FoundError); -SurfaceGeometry::CosZoneRelNorth.allocate(1); -SurfaceGeometry::SinZoneRelNorth.allocate(1); +state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); +state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); -SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); -SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); -SurfaceGeometry::CosBldgRelNorth = 1.0; -SurfaceGeometry::SinBldgRelNorth = 0.0; +state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); +state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); +state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; +state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; SurfaceGeometry::GetSurfaceData(state, FoundError); // setup zone geometry and get zone data EXPECT_FALSE(FoundError); // expect no errors diff --git a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc index ee7fe7098e9..9e8920f62c7 100644 --- a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc +++ b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc @@ -479,13 +479,13 @@ TEST_F(EnergyPlusFixture, DataSurfaces_SurfaceShape) GetZoneData(state, ErrorsFound); // read zone data EXPECT_FALSE(ErrorsFound); // expect no errors - CosZoneRelNorth.allocate(1); - SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - CosBldgRelNorth = 1.0; - SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; GetSurfaceData(state, ErrorsFound); // setup zone geometry and get zone data EXPECT_FALSE(ErrorsFound); // expect no errors @@ -577,7 +577,7 @@ TEST_F(EnergyPlusFixture, ConfirmCheckSubSurfAzTiltNorm) SubSurface.NewellSurfaceNormalVector.x = 0.; SubSurface.NewellSurfaceNormalVector.y = 0.; SubSurface.NewellSurfaceNormalVector.z = 1.; - checkSubSurfAzTiltNorm(BaseSurface, SubSurface, surfaceError); + checkSubSurfAzTiltNorm(state, BaseSurface, SubSurface, surfaceError); EXPECT_FALSE(surfaceError); EXPECT_FALSE(has_err_output()); @@ -588,7 +588,7 @@ TEST_F(EnergyPlusFixture, ConfirmCheckSubSurfAzTiltNorm) SubSurface.NewellSurfaceNormalVector.x = 1.; SubSurface.NewellSurfaceNormalVector.y = 0.; SubSurface.NewellSurfaceNormalVector.z = 0.; - checkSubSurfAzTiltNorm(BaseSurface, SubSurface, surfaceError); + checkSubSurfAzTiltNorm(state, BaseSurface, SubSurface, surfaceError); EXPECT_TRUE(surfaceError); EXPECT_TRUE(has_err_output()); @@ -600,7 +600,7 @@ TEST_F(EnergyPlusFixture, ConfirmCheckSubSurfAzTiltNorm) SubSurface.NewellSurfaceNormalVector.y = 1.; // This doesn't match the tilt and azimuth, but want it to be different so tilt and azimuth tests are executed SubSurface.NewellSurfaceNormalVector.z = 1.; - checkSubSurfAzTiltNorm(BaseSurface, SubSurface, surfaceError); + checkSubSurfAzTiltNorm(state, BaseSurface, SubSurface, surfaceError); EXPECT_FALSE(surfaceError); EXPECT_FALSE(has_err_output()); @@ -618,7 +618,7 @@ TEST_F(EnergyPlusFixture, ConfirmCheckSubSurfAzTiltNorm) SubSurface.NewellSurfaceNormalVector.x = 1.; SubSurface.NewellSurfaceNormalVector.y = 1.; SubSurface.NewellSurfaceNormalVector.z = 1.; - checkSubSurfAzTiltNorm(BaseSurface, SubSurface, surfaceError); + checkSubSurfAzTiltNorm(state, BaseSurface, SubSurface, surfaceError); EXPECT_FALSE(surfaceError); EXPECT_TRUE(has_err_output()); } @@ -705,46 +705,46 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_MakeMirrorSurface) EXPECT_EQ(Surface(TotSurfaces).Name, "FRONT-1"); // move surface to SurfaceTmp since MakeMirrorSurface uses that array - SurfaceTmp.allocate(10); - SurfaceTmp(TotSurfaces) = Surface(TotSurfaces); + state.dataSurfaceGeometry->SurfaceTmp.allocate(10); + state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces) = Surface(TotSurfaces); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Name, "FRONT-1"); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Name, "FRONT-1"); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(1).x, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(1).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(1).z, 2.4); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(1).x, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(1).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(1).z, 2.4); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(2).x, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(2).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(2).z, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(2).x, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(2).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(2).z, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(3).x, 30.5); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(3).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(3).z, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(3).x, 30.5); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(3).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(3).z, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(4).x, 30.5); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(4).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(4).z, 2.4); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(4).x, 30.5); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(4).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(4).z, 2.4); - MakeMirrorSurface(TotSurfaces); // This call increments TotSurfaces so the references after this are for the created mirror surface + MakeMirrorSurface(state, TotSurfaces); // This call increments TotSurfaces so the references after this are for the created mirror surface - EXPECT_EQ(SurfaceTmp(TotSurfaces).Name, "Mir-FRONT-1"); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Name, "Mir-FRONT-1"); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(1).x, 30.5); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(1).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(1).z, 2.4); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(1).x, 30.5); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(1).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(1).z, 2.4); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(2).x, 30.5); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(2).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(2).z, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(2).x, 30.5); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(2).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(2).z, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(3).x, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(3).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(3).z, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(3).x, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(3).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(3).z, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(4).x, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(4).y, 0.); - EXPECT_EQ(SurfaceTmp(TotSurfaces).Vertex(4).z, 2.4); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(4).x, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(4).y, 0.); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(TotSurfaces).Vertex(4).z, 2.4); } TEST_F(EnergyPlusFixture, SurfacesGeometry_CalcSurfaceCentroid_NonconvexRealisticZ) @@ -932,12 +932,12 @@ TEST_F(EnergyPlusFixture, MakeEquivalentRectangle) EXPECT_FALSE(ErrorsFound); GetProjectControlData(state, ErrorsFound); // read project control data EXPECT_FALSE(ErrorsFound); - CosZoneRelNorth.allocate(1); - SinZoneRelNorth.allocate(1); - CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - CosBldgRelNorth = 1.0; - SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; GetSurfaceData(state, ErrorsFound); // setup zone geometry and get zone data EXPECT_FALSE(ErrorsFound); // expect no errors @@ -2824,110 +2824,110 @@ TEST_F(EnergyPlusFixture, MakeRectangularVertices) { int surfNum = 1; int zoneNum = 1; - SurfaceTmp.allocate(surfNum); - SurfaceTmp(surfNum).Class = SurfaceClass_Wall; - SurfaceTmp(surfNum).Zone = zoneNum; - SurfaceTmp(surfNum).Azimuth = 0.; - SurfaceTmp(surfNum).Tilt = 90.; - SurfaceTmp(surfNum).Sides = 4; - SurfaceTmp(surfNum).Vertex.allocate(4); + state.dataSurfaceGeometry->SurfaceTmp.allocate(surfNum); + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Class = SurfaceClass_Wall; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Zone = zoneNum; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Azimuth = 0.; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Tilt = 90.; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Sides = 4; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex.allocate(4); Zone.allocate(zoneNum); Zone(zoneNum).RelNorth = 0.; - CosZoneRelNorth.allocate(zoneNum); - SinZoneRelNorth.allocate(zoneNum); - CosZoneRelNorth(zoneNum) = std::cos(-Zone(zoneNum).RelNorth * DataGlobalConstants::DegToRadians()); - SinZoneRelNorth(zoneNum) = std::sin(-Zone(zoneNum).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(zoneNum); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(zoneNum); + state.dataSurfaceGeometry->CosZoneRelNorth(zoneNum) = std::cos(-Zone(zoneNum).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(zoneNum) = std::sin(-Zone(zoneNum).RelNorth * DataGlobalConstants::DegToRadians()); - CosBldgRelNorth = 1.0; - SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; // facing north MakeRectangularVertices(state, 1, 0., 0., 0., 5., 3., false); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(1).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(1).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(1).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).z, 0.001); - EXPECT_NEAR(-5., SurfaceTmp(surfNum).Vertex(3).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).z, 0.001); + EXPECT_NEAR(-5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).z, 0.001); - EXPECT_NEAR(-5., SurfaceTmp(surfNum).Vertex(4).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(4).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(4).z, 0.001); + EXPECT_NEAR(-5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).z, 0.001); // facing east - SurfaceTmp(surfNum).Azimuth = 90.; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Azimuth = 90.; MakeRectangularVertices(state, 1, 0., 0., 0., 5., 3., false); - EXPECT_NEAR(0, SurfaceTmp(surfNum).Vertex(1).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(1).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(1).z, 0.001); + EXPECT_NEAR(0, state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).x, 0.001); - EXPECT_NEAR(5., SurfaceTmp(surfNum).Vertex(3).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).x, 0.001); + EXPECT_NEAR(5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(4).x, 0.001); - EXPECT_NEAR(5., SurfaceTmp(surfNum).Vertex(4).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(4).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).x, 0.001); + EXPECT_NEAR(5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).z, 0.001); // facing south - SurfaceTmp(surfNum).Azimuth = 180.; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Azimuth = 180.; MakeRectangularVertices(state, 1, 0., 0., 0., 5., 3., false); - EXPECT_NEAR(0, SurfaceTmp(surfNum).Vertex(1).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(1).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(1).z, 0.001); + EXPECT_NEAR(0, state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).z, 0.001); - EXPECT_NEAR(5., SurfaceTmp(surfNum).Vertex(3).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).z, 0.001); + EXPECT_NEAR(5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).z, 0.001); - EXPECT_NEAR(5., SurfaceTmp(surfNum).Vertex(4).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(4).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(4).z, 0.001); + EXPECT_NEAR(5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).z, 0.001); // facing west - SurfaceTmp(surfNum).Azimuth = 270.; + state.dataSurfaceGeometry->SurfaceTmp(surfNum).Azimuth = 270.; MakeRectangularVertices(state, 1, 0., 0., 0., 5., 3., false); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(1).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(1).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(1).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(1).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).x, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(2).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).x, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(2).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).x, 0.001); - EXPECT_NEAR(-5., SurfaceTmp(surfNum).Vertex(3).y, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(3).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).x, 0.001); + EXPECT_NEAR(-5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).y, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(3).z, 0.001); - EXPECT_NEAR(0., SurfaceTmp(surfNum).Vertex(4).x, 0.001); - EXPECT_NEAR(-5., SurfaceTmp(surfNum).Vertex(4).y, 0.001); - EXPECT_NEAR(3., SurfaceTmp(surfNum).Vertex(4).z, 0.001); + EXPECT_NEAR(0., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).x, 0.001); + EXPECT_NEAR(-5., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).y, 0.001); + EXPECT_NEAR(3., state.dataSurfaceGeometry->SurfaceTmp(surfNum).Vertex(4).z, 0.001); } TEST_F(EnergyPlusFixture, SurfaceGeometry_VertexNumberMismatchTest) @@ -2990,7 +2990,7 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_VertexNumberMismatchTest) Zone.allocate(2); Zone(1).Name = "ZONE 1"; Zone(2).Name = "ZONE 2"; - SurfaceTmp.allocate(2); + state.dataSurfaceGeometry->SurfaceTmp.allocate(2); int SurfNum = 0; int TotHTSurfs = 2; Array1D_string const BaseSurfCls(3, {"WALL", "FLOOR", "ROOF"}); @@ -2998,13 +2998,13 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_VertexNumberMismatchTest) int NeedToAddSurfaces; GetGeometryParameters(state, ErrorsFound); - CosZoneRelNorth.allocate(2); - SinZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(2); - CosZoneRelNorth = 1.0; - SinZoneRelNorth = 0.0; - SinBldgRelNorth = 0.0; - CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->CosZoneRelNorth = 1.0; + state.dataSurfaceGeometry->SinZoneRelNorth = 0.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; GetHTSurfaceData(state, ErrorsFound, SurfNum, TotHTSurfs, 0, 0, 0, BaseSurfCls, BaseSurfIDs, NeedToAddSurfaces); @@ -3032,9 +3032,9 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_CheckConvexityTest) ShadeV.allocate(TotSurfaces); Surface(1).Vertex.allocate(7); Surface(2).Vertex.allocate(9); - SurfaceTmp.allocate(TotSurfaces); - SurfaceTmp(1).Vertex.allocate(7); - SurfaceTmp(2).Vertex.allocate(9); + state.dataSurfaceGeometry->SurfaceTmp.allocate(TotSurfaces); + state.dataSurfaceGeometry->SurfaceTmp(1).Vertex.allocate(7); + state.dataSurfaceGeometry->SurfaceTmp(2).Vertex.allocate(9); int ThisSurf(0); @@ -3073,9 +3073,9 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_CheckConvexityTest) Surface(ThisSurf).Vertex(7).y = 2.0; Surface(ThisSurf).Vertex(7).z = 3.0; - SurfaceTmp(ThisSurf) = Surface(ThisSurf); - CheckConvexity(ThisSurf, SurfaceTmp(ThisSurf).Sides); - Surface(ThisSurf) = SurfaceTmp(ThisSurf); + state.dataSurfaceGeometry->SurfaceTmp(ThisSurf) = Surface(ThisSurf); + CheckConvexity(state, ThisSurf, state.dataSurfaceGeometry->SurfaceTmp(ThisSurf).Sides); + Surface(ThisSurf) = state.dataSurfaceGeometry->SurfaceTmp(ThisSurf); EXPECT_EQ(4, Surface(ThisSurf).Sides); EXPECT_EQ(10.0, Surface(ThisSurf).Vertex(2).x); EXPECT_EQ(6.0, Surface(ThisSurf).Vertex(2).y); @@ -3125,9 +3125,9 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_CheckConvexityTest) Surface(ThisSurf).Vertex(9).y = 2.0; Surface(ThisSurf).Vertex(9).z = 0.0; - SurfaceTmp(ThisSurf) = Surface(ThisSurf); - CheckConvexity(ThisSurf, SurfaceTmp(ThisSurf).Sides); - Surface(ThisSurf) = SurfaceTmp(ThisSurf); + state.dataSurfaceGeometry->SurfaceTmp(ThisSurf) = Surface(ThisSurf); + CheckConvexity(state, ThisSurf, state.dataSurfaceGeometry->SurfaceTmp(ThisSurf).Sides); + Surface(ThisSurf) = state.dataSurfaceGeometry->SurfaceTmp(ThisSurf); EXPECT_EQ(4, Surface(ThisSurf).Sides); EXPECT_EQ(10.0, Surface(ThisSurf).Vertex(2).x); EXPECT_EQ(8.0, Surface(ThisSurf).Vertex(2).y); @@ -3174,98 +3174,98 @@ TEST_F(EnergyPlusFixture, InitialAssociateWindowShadingControlFenestration_test) state.dataConstruction->Construct.allocate(1); state.dataConstruction->Construct(1).WindowTypeEQL = false; - SurfaceTmp.allocate(9); + state.dataSurfaceGeometry->SurfaceTmp.allocate(9); - SurfaceTmp(1).Name = "Fene-04"; - SurfaceTmp(1).Construction = 1; - SurfaceTmp(1).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(1).Name = "Fene-04"; + state.dataSurfaceGeometry->SurfaceTmp(1).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(1).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(2).Name = "Fene-05"; - SurfaceTmp(2).Construction = 1; - SurfaceTmp(2).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(2).Name = "Fene-05"; + state.dataSurfaceGeometry->SurfaceTmp(2).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(2).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(3).Name = "Fene-06"; - SurfaceTmp(3).Construction = 1; - SurfaceTmp(3).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(3).Name = "Fene-06"; + state.dataSurfaceGeometry->SurfaceTmp(3).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(3).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(4).Name = "Fene-01"; - SurfaceTmp(4).Construction = 1; - SurfaceTmp(4).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(4).Name = "Fene-01"; + state.dataSurfaceGeometry->SurfaceTmp(4).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(4).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(5).Name = "Fene-02"; - SurfaceTmp(5).Construction = 1; - SurfaceTmp(5).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(5).Name = "Fene-02"; + state.dataSurfaceGeometry->SurfaceTmp(5).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(5).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(6).Name = "Fene-03"; - SurfaceTmp(6).Construction = 1; - SurfaceTmp(6).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(6).Name = "Fene-03"; + state.dataSurfaceGeometry->SurfaceTmp(6).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(6).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(7).Name = "Fene-07"; - SurfaceTmp(7).Construction = 1; - SurfaceTmp(7).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(7).Name = "Fene-07"; + state.dataSurfaceGeometry->SurfaceTmp(7).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(7).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(8).Name = "Fene-08"; - SurfaceTmp(8).Construction = 1; - SurfaceTmp(8).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(8).Name = "Fene-08"; + state.dataSurfaceGeometry->SurfaceTmp(8).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(8).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(9).Name = "Fene-09"; - SurfaceTmp(9).Construction = 1; - SurfaceTmp(9).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(9).Name = "Fene-09"; + state.dataSurfaceGeometry->SurfaceTmp(9).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(9).ExtBoundCond = ExternalEnvironment; bool Err = false; int surfNum = 1; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 2); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 2); EXPECT_FALSE(Err); surfNum = 2; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 2); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 2); EXPECT_FALSE(Err); surfNum = 3; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 2); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 2); EXPECT_FALSE(Err); surfNum = 4; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 1); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 1); EXPECT_FALSE(Err); surfNum = 5; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 1); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 1); EXPECT_FALSE(Err); surfNum = 6; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 1); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 1); EXPECT_FALSE(Err); surfNum = 7; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 2); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 2); EXPECT_FALSE(Err); surfNum = 8; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 3); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 3); EXPECT_FALSE(Err); surfNum = 9; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).activeWindowShadingControl, 3); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).activeWindowShadingControl, 3); EXPECT_FALSE(Err); } @@ -3308,67 +3308,67 @@ TEST_F(EnergyPlusFixture, InitialAssociateWindowShadingControlFenestration_Multi state.dataConstruction->Construct.allocate(1); state.dataConstruction->Construct(1).WindowTypeEQL = false; - SurfaceTmp.allocate(5); + state.dataSurfaceGeometry->SurfaceTmp.allocate(5); - SurfaceTmp(1).Name = "Fene-01"; - SurfaceTmp(1).Construction = 1; - SurfaceTmp(1).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(1).Name = "Fene-01"; + state.dataSurfaceGeometry->SurfaceTmp(1).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(1).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(2).Name = "Fene-02"; - SurfaceTmp(2).Construction = 1; - SurfaceTmp(2).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(2).Name = "Fene-02"; + state.dataSurfaceGeometry->SurfaceTmp(2).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(2).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(3).Name = "Fene-03"; - SurfaceTmp(3).Construction = 1; - SurfaceTmp(3).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(3).Name = "Fene-03"; + state.dataSurfaceGeometry->SurfaceTmp(3).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(3).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(4).Name = "Fene-04"; - SurfaceTmp(4).Construction = 1; - SurfaceTmp(4).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(4).Name = "Fene-04"; + state.dataSurfaceGeometry->SurfaceTmp(4).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(4).ExtBoundCond = ExternalEnvironment; - SurfaceTmp(5).Name = "Fene-05"; - SurfaceTmp(5).Construction = 1; - SurfaceTmp(5).ExtBoundCond = ExternalEnvironment; + state.dataSurfaceGeometry->SurfaceTmp(5).Name = "Fene-05"; + state.dataSurfaceGeometry->SurfaceTmp(5).Construction = 1; + state.dataSurfaceGeometry->SurfaceTmp(5).ExtBoundCond = ExternalEnvironment; bool Err = false; int surfNum = 1; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList.size(), 1u); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[0], 1); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList.size(), 1u); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[0], 1); EXPECT_FALSE(Err); surfNum = 2; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList.size(), 2u); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[0], 1); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[1], 2); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList.size(), 2u); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[0], 1); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[1], 2); EXPECT_FALSE(Err); surfNum = 3; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList.size(), 3u); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[0], 1); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[1], 2); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[2], 3); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList.size(), 3u); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[0], 1); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[1], 2); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[2], 3); EXPECT_FALSE(Err); surfNum = 4; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList.size(), 1u); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[0], 2); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList.size(), 1u); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[0], 2); EXPECT_FALSE(Err); surfNum = 5; InitialAssociateWindowShadingControlFenestration(state, Err, surfNum); - EXPECT_TRUE(SurfaceTmp(surfNum).HasShadeControl); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList.size(), 2u); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[0], 2); - EXPECT_EQ(SurfaceTmp(surfNum).windowShadingControlList[1], 3); + EXPECT_TRUE(state.dataSurfaceGeometry->SurfaceTmp(surfNum).HasShadeControl); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList.size(), 2u); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[0], 2); + EXPECT_EQ(state.dataSurfaceGeometry->SurfaceTmp(surfNum).windowShadingControlList[1], 3); EXPECT_FALSE(Err); } @@ -3887,15 +3887,15 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_HeatTransferAlgorithmTest) GetZoneData(state, ErrorsFound); // read zone data EXPECT_FALSE(ErrorsFound); // expect no errors - CosZoneRelNorth.allocate(2); - SinZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(2); - CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - CosZoneRelNorth(2) = CosZoneRelNorth(1); - SinZoneRelNorth(2) = SinZoneRelNorth(1); - CosBldgRelNorth = 1.0; - SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = state.dataSurfaceGeometry->CosZoneRelNorth(1); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = state.dataSurfaceGeometry->SinZoneRelNorth(1); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; GetSurfaceData(state, ErrorsFound); // setup zone geometry and get zone data EXPECT_FALSE(ErrorsFound); // expect no errors @@ -4000,7 +4000,7 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_SurfaceReferencesNonExistingSurface) Zone.allocate(2); Zone(1).Name = "ZONE 1"; Zone(2).Name = "ZONE 2"; - SurfaceTmp.allocate(1); + state.dataSurfaceGeometry->SurfaceTmp.allocate(1); int SurfNum = 0; int TotHTSurfs = 1; Array1D_string const BaseSurfCls(3, {"WALL", "FLOOR", "ROOF"}); @@ -4008,13 +4008,13 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_SurfaceReferencesNonExistingSurface) int NeedToAddSurfaces; GetGeometryParameters(state, ErrorsFound); - CosZoneRelNorth.allocate(1); - SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - CosZoneRelNorth = 1.0; - SinZoneRelNorth = 0.0; - SinBldgRelNorth = 0.0; - CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->CosZoneRelNorth = 1.0; + state.dataSurfaceGeometry->SinZoneRelNorth = 0.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; GetHTSurfaceData(state, ErrorsFound, SurfNum, TotHTSurfs, 0, 0, 0, BaseSurfCls, BaseSurfIDs, NeedToAddSurfaces); @@ -4702,7 +4702,7 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_CreateInternalMassSurfaces) EXPECT_EQ(24, TotalNumOfInternalMassSurfaces); DataSurfaces::TotSurfaces = TotalNumOfInternalMassSurfaces; - SurfaceTmp.allocate(TotSurfaces); + state.dataSurfaceGeometry->SurfaceTmp.allocate(TotSurfaces); int SurfNum = 0; GetIntMassSurfaceData(state, ErrorsFound, SurfNum); @@ -4723,15 +4723,15 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_CreateInternalMassSurfaces) // first zone in the ground floor ZoneList EXPECT_EQ("G SW APARTMENT", Zone(1).Name); EXPECT_EQ("GFLOORZONESINTMASS", DataSurfaces::IntMassObjects(1).Name); - EXPECT_EQ("G SW APARTMENT GFLOORZONESINTMASS", SurfaceTmp(1).Name); + EXPECT_EQ("G SW APARTMENT GFLOORZONESINTMASS", state.dataSurfaceGeometry->SurfaceTmp(1).Name); // first zone in the middle floor ZoneList EXPECT_EQ("M SW APARTMENT", Zone(9).Name); EXPECT_EQ("MFLOORZONESINTMASS", DataSurfaces::IntMassObjects(2).Name); - EXPECT_EQ("M SW APARTMENT MFLOORZONESINTMASS", SurfaceTmp(9).Name); + EXPECT_EQ("M SW APARTMENT MFLOORZONESINTMASS", state.dataSurfaceGeometry->SurfaceTmp(9).Name); // first zone in the top floor ZoneList EXPECT_EQ("T SW APARTMENT", Zone(17).Name); EXPECT_EQ("TFLOORZONESINTMASS", DataSurfaces::IntMassObjects(3).Name); - EXPECT_EQ("T SW APARTMENT TFLOORZONESINTMASS", SurfaceTmp(17).Name); + EXPECT_EQ("T SW APARTMENT TFLOORZONESINTMASS", state.dataSurfaceGeometry->SurfaceTmp(17).Name); } TEST_F(EnergyPlusFixture, WorldCoord_with_RelativeRectSurfCoord_test1) diff --git a/tst/EnergyPlus/unit/ThermalChimney.unit.cc b/tst/EnergyPlus/unit/ThermalChimney.unit.cc index 70e3cc22c8f..f64b8f5e1a0 100644 --- a/tst/EnergyPlus/unit/ThermalChimney.unit.cc +++ b/tst/EnergyPlus/unit/ThermalChimney.unit.cc @@ -1108,8 +1108,8 @@ TEST_F(EnergyPlusFixture, ThermalChimney_EMSAirflow_Test) SurfaceGeometry::GetGeometryParameters(state, localErrorsFound); EXPECT_FALSE(localErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, localErrorsFound); EXPECT_FALSE(localErrorsFound); ScheduleManager::ProcessScheduleInput(state); diff --git a/tst/EnergyPlus/unit/TranspiredCollector.unit.cc b/tst/EnergyPlus/unit/TranspiredCollector.unit.cc index ce661b54534..031162b7a80 100644 --- a/tst/EnergyPlus/unit/TranspiredCollector.unit.cc +++ b/tst/EnergyPlus/unit/TranspiredCollector.unit.cc @@ -221,13 +221,13 @@ TEST_F(EnergyPlusFixture, TranspiredCollectors_InitTranspiredCollectorTest) GetZoneData(state, ErrorsFound); // read zone data EXPECT_FALSE(ErrorsFound); // expect no errors - CosZoneRelNorth.allocate(1); - SinZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(1); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(1); - CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - CosBldgRelNorth = 1.0; - SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; GetSurfaceData(state, ErrorsFound); // setup zone geometry and get zone data EXPECT_FALSE(ErrorsFound); // expect no errors diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index d1d2effb1cc..3c92be88fbb 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -14049,8 +14049,8 @@ TEST_F(EnergyPlusFixture, Test_UnitarySystemModel_SubcoolReheatCoil) SurfaceGeometry::GetGeometryParameters(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, ErrorsFound); EXPECT_FALSE(ErrorsFound); diff --git a/tst/EnergyPlus/unit/WindowManager.unit.cc b/tst/EnergyPlus/unit/WindowManager.unit.cc index 19bd2a171d6..1696ca393e8 100644 --- a/tst/EnergyPlus/unit/WindowManager.unit.cc +++ b/tst/EnergyPlus/unit/WindowManager.unit.cc @@ -2512,23 +2512,23 @@ TEST_F(EnergyPlusFixture, SpectralAngularPropertyTest) SurfaceGeometry::GetGeometryParameters(state, FoundError); EXPECT_FALSE(FoundError); - SurfaceGeometry::CosZoneRelNorth.allocate(4); - SurfaceGeometry::SinZoneRelNorth.allocate(4); + state.dataSurfaceGeometry->CosZoneRelNorth.allocate(4); + state.dataSurfaceGeometry->SinZoneRelNorth.allocate(4); - SurfaceGeometry::CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(3) = std::cos(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosZoneRelNorth(4) = std::cos(-DataHeatBalance::Zone(4).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(3) = std::sin(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::SinZoneRelNorth(4) = std::sin(-DataHeatBalance::Zone(4).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(1) = std::cos(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(2) = std::cos(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(3) = std::cos(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->CosZoneRelNorth(4) = std::cos(-DataHeatBalance::Zone(4).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(1) = std::sin(-DataHeatBalance::Zone(1).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(2) = std::sin(-DataHeatBalance::Zone(2).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(3) = std::sin(-DataHeatBalance::Zone(3).RelNorth * DataGlobalConstants::DegToRadians()); + state.dataSurfaceGeometry->SinZoneRelNorth(4) = std::sin(-DataHeatBalance::Zone(4).RelNorth * DataGlobalConstants::DegToRadians()); - SurfaceGeometry::CosBldgRelNorth = 1.0; - SurfaceGeometry::SinBldgRelNorth = 0.0; + state.dataSurfaceGeometry->CosBldgRelNorth = 1.0; + state.dataSurfaceGeometry->SinBldgRelNorth = 0.0; - SurfaceGeometry::CosBldgRotAppGonly = 1.0; - SurfaceGeometry::SinBldgRotAppGonly = 0.0; + state.dataSurfaceGeometry->CosBldgRotAppGonly = 1.0; + state.dataSurfaceGeometry->SinBldgRotAppGonly = 0.0; SurfaceGeometry::GetSurfaceData(state, FoundError); // setup zone geometry and get zone data EXPECT_FALSE(FoundError); // expect no errors @@ -2559,8 +2559,8 @@ TEST_F(EnergyPlusFixture, SpectralAngularPropertyTest) EXPECT_NEAR(sum, 1.0, 0.0001); } - SurfaceGeometry::CosZoneRelNorth.deallocate(); - SurfaceGeometry::SinZoneRelNorth.deallocate(); + state.dataSurfaceGeometry->CosZoneRelNorth.deallocate(); + state.dataSurfaceGeometry->SinZoneRelNorth.deallocate(); } TEST_F(EnergyPlusFixture, WindowManager_SrdLWRTest) From fa8509a894c11a379dbe61160c89571d23981240 Mon Sep 17 00:00:00 2001 From: brianlball Date: Fri, 16 Oct 2020 10:45:44 -0600 Subject: [PATCH 3/6] add ResetThermalComfortSimpleASH55 and ResetSetPointMet back in --- src/EnergyPlus/OutputReportTabular.cc | 8 +++--- src/EnergyPlus/OutputReportTabular.hh | 4 +-- src/EnergyPlus/SimulationManager.cc | 2 +- src/EnergyPlus/StateManagement.cc | 2 +- src/EnergyPlus/SurfaceGeometry.cc | 1 - src/EnergyPlus/ThermalComfort.cc | 35 +++++++++++++++++++++++++++ src/EnergyPlus/ThermalComfort.hh | 4 +++ 7 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 454b9fbd68e..b73f5f28a43 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -545,7 +545,7 @@ namespace OutputReportTabular { } // namespace // Functions - void clear_state() + void clear_state(EnergyPlusData &state) { GatherMonthlyResultsForTimestepRunOnce = true; UpdateTabularReportsGetInput = true; @@ -723,7 +723,7 @@ namespace OutputReportTabular { TOCEntries.deallocate(); UnitConv.deallocate(); - OutputReportTabular::ResetTabularReports(); + OutputReportTabular::ResetTabularReports(state); numPeopleAdaptive = 0; } @@ -15327,7 +15327,7 @@ namespace OutputReportTabular { //====================================================================================================================== //====================================================================================================================== - void ResetTabularReports() + void ResetTabularReports(EnergyPlusData &state) { // Jason Glazer - October 2015 // Reset all gathering arrays to zero for multi-year simulations @@ -15343,6 +15343,8 @@ namespace OutputReportTabular { ResetPeakDemandGathering(); ResetHeatGainGathering(); ResetRemainingPredefinedEntries(); + ThermalComfort::ResetThermalComfortSimpleASH55(state); + ThermalComfort::ResetSetPointMet(state); ResetAdaptiveComfort(); isFinalYear = true; } diff --git a/src/EnergyPlus/OutputReportTabular.hh b/src/EnergyPlus/OutputReportTabular.hh index 6ffc9847c79..6eb2ed57ee7 100644 --- a/src/EnergyPlus/OutputReportTabular.hh +++ b/src/EnergyPlus/OutputReportTabular.hh @@ -703,7 +703,7 @@ namespace OutputReportTabular { extern Array1D UnitConv; // Functions - void clear_state(); + void clear_state(EnergyPlusData &state); std::ofstream & open_tbl_stream(int const iStyle, std::string const & filename, bool output_to_file = true); @@ -961,7 +961,7 @@ namespace OutputReportTabular { //====================================================================================================================== //====================================================================================================================== - void ResetTabularReports(); + void ResetTabularReports(EnergyPlusData &state); void ResetMonthlyGathering(); diff --git a/src/EnergyPlus/SimulationManager.cc b/src/EnergyPlus/SimulationManager.cc index b34b937b418..1bd634bf9a4 100644 --- a/src/EnergyPlus/SimulationManager.cc +++ b/src/EnergyPlus/SimulationManager.cc @@ -584,7 +584,7 @@ namespace SimulationManager { // for simulations that last longer than a week, identify when the last year of the simulation is started if ((DayOfSim > 365) && ((NumOfDayInEnvrn - DayOfSim) == 364) && !WarmupFlag) { DisplayString("Starting last year of environment at: " + state.dataGlobal->DayOfSimChr); - ResetTabularReports(); + ResetTabularReports(state); } for (HourOfDay = 1; HourOfDay <= 24; ++HourOfDay) { // Begin hour loop ... diff --git a/src/EnergyPlus/StateManagement.cc b/src/EnergyPlus/StateManagement.cc index fbc59ccec27..5864261b084 100644 --- a/src/EnergyPlus/StateManagement.cc +++ b/src/EnergyPlus/StateManagement.cc @@ -332,7 +332,7 @@ void EnergyPlus::clearAllStates(EnergyPlusData &state) OutdoorAirUnit::clear_state(); OutputProcessor::clear_state(); OutputReportPredefined::clear_state(); - OutputReportTabular::clear_state(); + OutputReportTabular::clear_state(state); OutputReportTabularAnnual::clear_state(); OutsideEnergySources::clear_state(); PackagedTerminalHeatPump::clear_state(); diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index a1eea2a3afe..b381ff60729 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -4956,7 +4956,6 @@ namespace SurfaceGeometry { Found = UtilityRoutines::FindItemInList(state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).ExtBoundCondName, state.dataSurfaceGeometry->SurfaceTmp, SurfNum); if (Found != 0) state.dataSurfaceGeometry->SurfaceTmp(Found).Area -= state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Area; } - if (state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Area <= 0.0) { ShowSevereError(cRoutineName + ": Surface Openings have too much area for base surface=" + state.dataSurfaceGeometry->SurfaceTmp(state.dataSurfaceGeometry->SurfaceTmp(SurfNum).BaseSurf).Name); diff --git a/src/EnergyPlus/ThermalComfort.cc b/src/EnergyPlus/ThermalComfort.cc index 7f5f69ecc57..c0066093f00 100644 --- a/src/EnergyPlus/ThermalComfort.cc +++ b/src/EnergyPlus/ThermalComfort.cc @@ -2155,6 +2155,22 @@ namespace ThermalComfort { } } + void ResetThermalComfortSimpleASH55(EnergyPlusData &state) + { + // Jason Glazer - October 2015 + // Reset thermal comfort table gathering arrays to zero for multi-year simulations + // so that only last year is reported in tabular reports + int iZone; + for (iZone = 1; iZone <= NumOfZones; ++iZone) { + state.dataThermalComforts->ThermalComfortInASH55(iZone).totalTimeNotWinter = 0.0; + state.dataThermalComforts->ThermalComfortInASH55(iZone).totalTimeNotSummer = 0.0; + state.dataThermalComforts->ThermalComfortInASH55(iZone).totalTimeNotEither = 0.0; + } + state.dataThermalComforts->TotalAnyZoneTimeNotSimpleASH55Winter = 0.0; + state.dataThermalComforts->TotalAnyZoneTimeNotSimpleASH55Summer = 0.0; + state.dataThermalComforts->TotalAnyZoneTimeNotSimpleASH55Either = 0.0; + } + void CalcIfSetPointMet(EnergyPlusData &state) { // SUBROUTINE INFORMATION: @@ -2320,6 +2336,25 @@ namespace ThermalComfort { } } + void ResetSetPointMet(EnergyPlusData &state) + { + // Jason Glazer - October 2015 + // Reset set point not met table gathering arrays to zero for multi-year simulations + // so that only last year is reported in tabular reports + int iZone; + for (iZone = 1; iZone <= NumOfZones; ++iZone) { + state.dataThermalComforts->ThermalComfortSetPoint(iZone).totalNotMetHeating = 0.0; + state.dataThermalComforts->ThermalComfortSetPoint(iZone).totalNotMetCooling = 0.0; + state.dataThermalComforts->ThermalComfortSetPoint(iZone).totalNotMetHeatingOccupied = 0.0; + state.dataThermalComforts->ThermalComfortSetPoint(iZone).totalNotMetCoolingOccupied = 0.0; + } + state.dataThermalComforts->TotalAnyZoneNotMetHeating = 0.0; + state.dataThermalComforts->TotalAnyZoneNotMetCooling = 0.0; + state.dataThermalComforts->TotalAnyZoneNotMetHeatingOccupied = 0.0; + state.dataThermalComforts->TotalAnyZoneNotMetCoolingOccupied = 0.0; + state.dataThermalComforts->TotalAnyZoneNotMetOccupied = 0.0; + } + void CalcThermalComfortAdaptiveASH55( EnergyPlusData &state, bool const initiate, // true if supposed to initiate diff --git a/src/EnergyPlus/ThermalComfort.hh b/src/EnergyPlus/ThermalComfort.hh index 28b9fdd8750..d4d42e6eb4c 100644 --- a/src/EnergyPlus/ThermalComfort.hh +++ b/src/EnergyPlus/ThermalComfort.hh @@ -196,8 +196,12 @@ namespace ThermalComfort { void CalcThermalComfortSimpleASH55(EnergyPlusData &state); + void ResetThermalComfortSimpleASH55(EnergyPlusData &state); + void CalcIfSetPointMet(EnergyPlusData &state); + void ResetSetPointMet(EnergyPlusData &state); + void CalcThermalComfortAdaptiveASH55( EnergyPlusData &state, bool const initiate, // true if supposed to initiate From c0e64c0b6118d5f7262156ce24582b8e6b926ea3 Mon Sep 17 00:00:00 2001 From: brianlball Date: Fri, 16 Oct 2020 10:47:02 -0600 Subject: [PATCH 4/6] add state to test --- tst/EnergyPlus/unit/OutputReportTabular.unit.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index bff7296e882..cd453b45c94 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -8302,7 +8302,7 @@ TEST_F(EnergyPlusFixture, OutputReportTabularTest_ConfirmConversionFactors) TEST_F(EnergyPlusFixture, OutputReportTabular_GatherHeatGainReport) { - EnergyPlus::OutputReportTabular::clear_state(); + EnergyPlus::OutputReportTabular::clear_state(state); EnergyPlus::DataGlobals::DoWeathSim = true; EnergyPlus::OutputReportPredefined::pdrSensibleGain = 1; From c0b4c131f6ac84a1131ed7a346210c2221c1d245 Mon Sep 17 00:00:00 2001 From: brianlball Date: Fri, 16 Oct 2020 11:11:16 -0600 Subject: [PATCH 5/6] get coeff test to pass --- tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc b/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc index dbec445c6bb..33b797cf052 100644 --- a/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc +++ b/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc @@ -1441,7 +1441,7 @@ TEST_F(ConvectionCoefficientsFixture, ConvectionCoefficientsTest_HConvInDependen DataHeatBalance::HConvIn.allocate(1); - CalcASHRAESimpleIntConvCoeff(1, 20.0, 30.0); + CalcASHRAESimpleIntConvCoeff(state, 1, 20.0, 30.0); ConvectionCoefficient = DataHeatBalance::HConvIn(1); From c77df500d97f4f29748147e2df1929dd724cb1a9 Mon Sep 17 00:00:00 2001 From: brianlball Date: Tue, 20 Oct 2020 10:38:15 -0600 Subject: [PATCH 6/6] @mitchute is the man --- src/EnergyPlus/ConvectionCoefficients.cc | 8 ++++---- src/EnergyPlus/ConvectionCoefficients.hh | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/ConvectionCoefficients.cc b/src/EnergyPlus/ConvectionCoefficients.cc index d1fdf550360..a3d378a769a 100644 --- a/src/EnergyPlus/ConvectionCoefficients.cc +++ b/src/EnergyPlus/ConvectionCoefficients.cc @@ -247,7 +247,7 @@ namespace ConvectionCoefficients { CalcCeilingDiffuserIntConvCoeff(state, ZoneNum, SurfaceTemperatures); } else if (SELECT_CASE_var == TrombeWall) { - CalcTrombeWallIntConvCoeff(ZoneNum, SurfaceTemperatures); + CalcTrombeWallIntConvCoeff(state, ZoneNum, SurfaceTemperatures); } else { } @@ -282,7 +282,7 @@ namespace ConvectionCoefficients { auto const SELECT_CASE_var1(algoNum); if (SELECT_CASE_var1 == ASHRAESimple) { - CalcASHRAESimpleIntConvCoeff(SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); + CalcASHRAESimpleIntConvCoeff(state, SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); // Establish some lower limit to avoid a zero convection coefficient (and potential divide by zero problems) if (HConvIn(SurfNum) < LowHConvLimit) HConvIn(SurfNum) = LowHConvLimit; @@ -2872,7 +2872,7 @@ namespace ConvectionCoefficients { if (ACH > 100.0) ShowWarningError("CeilingDiffuser convection correlation is out of range: ACH > 100"); } - void CalcTrombeWallIntConvCoeff(int const ZoneNum, // Zone number for which coefficients are being calculated + void CalcTrombeWallIntConvCoeff(EnergyPlusData &state, int const ZoneNum, // Zone number for which coefficients are being calculated const Array1D &SurfaceTemperatures // Temperature of surfaces for evaluation of HcIn ) { @@ -2994,7 +2994,7 @@ namespace ConvectionCoefficients { if (!Surface(SurfNum).HeatTransSurf) continue; // Skip non-heat transfer surfaces // Use ASHRAESimple correlation to give values for all the minor surfaces - CalcASHRAESimpleIntConvCoeff(SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); + CalcASHRAESimpleIntConvCoeff(state, SurfNum, SurfaceTemperatures(SurfNum), MAT(ZoneNum)); // assign the convection coefficent to the major surfaces and any subsurfaces on them if ((Surface(SurfNum).BaseSurf == Surf1) || (Surface(SurfNum).BaseSurf == Surf2)) { diff --git a/src/EnergyPlus/ConvectionCoefficients.hh b/src/EnergyPlus/ConvectionCoefficients.hh index 4867bb39a1e..23599a97ad1 100644 --- a/src/EnergyPlus/ConvectionCoefficients.hh +++ b/src/EnergyPlus/ConvectionCoefficients.hh @@ -504,7 +504,7 @@ namespace ConvectionCoefficients { Array1D &SurfaceTemperatures // For CalcASHRAEDetailed, if called ); - void CalcTrombeWallIntConvCoeff(int ZoneNum, // Zone number for which coefficients are being calculated + void CalcTrombeWallIntConvCoeff(EnergyPlusData &state, int ZoneNum, // Zone number for which coefficients are being calculated const Array1D &SurfaceTemperatures // Temperature of surfaces for evaluation of HcIn );