Skip to content

Commit

Permalink
Address comments, warnings and diffs.
Browse files Browse the repository at this point in the history
  • Loading branch information
rraustad committed Aug 11, 2021
1 parent 98c5f02 commit 0cce7af
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 45 deletions.
1 change: 1 addition & 0 deletions doc/input-output-reference/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ set(INCLUDED_IMAGES
${PROJECT_SOURCE_DIR}/input-output-reference/media/ACStorageBussDiagram.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/AirLoopComponentMatrix.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/ChangeoverBypassVAV-ReturnPlenumOrMixer.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/CoilSystemWater_HeatRecovery.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/DCInverterBussDiagram.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/DCInverterWithACStorageBussDiagram.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/DCInverterWithDCStorageBussDiagram.png
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ \subsubsection{Outputs}\label{outputs-22}

\subsection{CoilSystem:Cooling:Water}\label{coilsystemcoolingwater}

The \hyperref[coilsystemcoolingwater]{CoilSystem:Cooling:Water} object is a coil system wrapper for water cooling coils. Valid water cooling coils are: \hyperref[coilcoolingwater]{Coil:Cooling:Water}, \hyperref[coilcoolingwaterdetailedgeometry]{Coil:Cooling:Water:DetailedGeometry} and \hyperref[coilsystemcoolingwaterheatexchangerassisted]{CoilSystem:Cooling:Water:HeatExchangerAssisted}. This coil system allows users to model the three water cooling coils in airloop main and outdoor air branches. Also this object is designed to model water-side economizers for free pre-cooling when the water-side of the coil is placed on the demand side a condenser loop. As a water-side economizer the \textit{CoilSystem:Cooling:Water} object is placed upstream of packaged DX systems or chilled water main cooling coils. The coil system as a water-side economizer provides free pre-cooling when the condition is favorable. Any remaining system cooling load not met by the water side economizer is provided either by a DX or chilled water cooling coil placed downstream of the water-side economizer coil. The \textit{CoilSystem:Cooling:Water} object does not require \textit{Controller:WaterCoil} and relies on a built-in controller. This coil system uses setpoint based control that varies coil entering water (fluid) mass flow rate to meet user specified temperature or humidity setpoint. The coil system as a water-side economizer can be placed on airloop main or outdoor air system branch. This coil system may also be used to model a wrap-around water coil heat recovery system where a water coil system object is in one air stream (e.g., the outdoor air stream) while another cooling coil object is in different air stream (e.g., exhaust air stream). The two water coils are connected in series on the demand side of a plant loop. For wrap-around heat recovery coils, the supply side of the plant will typically have only a pump to circulate the water. When the outside air system economizer is active the coil will turn off if this coil is configured as a wrap-around heat recovery or water-side economizer coil.
The \hyperref[coilsystemcoolingwater]{CoilSystem:Cooling:Water} object is a coil system wrapper for water cooling coils. Valid water cooling coils are: \hyperref[coilcoolingwater]{Coil:Cooling:Water}, \hyperref[coilcoolingwaterdetailedgeometry]{Coil:Cooling:Water:DetailedGeometry} and \hyperref[coilsystemcoolingwaterheatexchangerassisted]{CoilSystem:Cooling:Water:HeatExchangerAssisted}. This coil system allows users to model the three water cooling coils in airloop main and outdoor air branches. Also this object is designed to model water-side economizers for free pre-cooling when the water-side of the coil is placed on the demand side a condenser loop. As a water-side economizer the \textit{CoilSystem:Cooling:Water} object is placed upstream of packaged DX systems or chilled water main cooling coils. The coil system as a water-side economizer provides free pre-cooling when the condition is favorable. Any remaining system cooling load not met by the water side economizer is provided either by a DX or chilled water cooling coil placed downstream of the water-side economizer coil. The \textit{CoilSystem:Cooling:Water} object does not require \textit{Controller:WaterCoil} and relies on a built-in controller. This coil system uses setpoint based control that varies coil entering water (fluid) mass flow rate to meet user specified temperature or humidity setpoint.\par

Figure~\ref{fig:water-side-economizer-coil-system-upstream-of-packaged-dx-system} below shows packaged DX system serving multiple zones and a coil system water cooling object placed upstream of the packaged system. The water-side of the coil system is connected to the demand side of a condenser or plant loop. This coil system configuration provides free pre-cooling when the condition is favorable to operate and there is cooling or dehumidification demand. In this configuration the packaged DX system can be \textit{AirloopHVAC:UnitarySystem} object.

Expand All @@ -531,9 +531,11 @@ \subsubsection{Water Side Economizer Mode}\label{water-side-economizer-mode}

\subsubsection{Wrap Around Water Coil Heat Recovery Mode}\label{wrap-around-water-coil-heat-recovery-mode}

This coil system may also be used to model a wrap-around water coil heat recovery system where a water coil system object is in one air stream (e.g., the outdoor air stream) while another cooling coil object is in a seperate air stream (e.g., exhaust air stream). The two water coils are connected in series on the demand side of a plant loop where the CoilSystem:Cooling:Water object is upstream of the Coil:Cooling:Water object. For wrap-around heat recovery coils, the supply side of the plant will typically have only a pump to circulate the water.\par

The CoilSystemCooling:Water object is the main controller for the heat recovery loop. Neither this object or other coils in the heat recovery loop require an external controller (Ref: \hyperref[controllerwatercoil]{Controller:WaterCoil}). Do not specify a controller for this object or the associated water coil elsewhere in the input. This object checks that the water coil entering water (fluid) temperature to coil entering air temperature absolute difference is greater than the user specified temperature offset, otherwise the system is disabled. The water loop temperature entering the coil system's coil will be maintained between the entering air temperatures of the water coils (e.g., midway between the outdoor air temperature and exhaust air temperature if the coils are used in the outdoor air system). The coil system will be disabled if the plant loop water temperature falls below the minimum allowed heat recovery loop water temperature (Ref. field \hyperref[field-minimum-water-loop-temperature-for-heat-recovery]{Minimum Water Loop Temperature For Heat Recover}). Figure~\ref{fig:wrap-around-water-coil-heat-recovery-system-in-outdoor-air-system} shows a wrap-around heat recovery coil system in the outdoor air and relief air streams of the outdoor air system.

\textbf{Note - although a plant loop temperature setpoint node name and associated set point manager is required, that set point will not be used.}
\textbf{Note - although a \hyperref[plantloop]{PlantLoop} temperature setpoint node name and associated set point manager is required, that set point will not be used.}

\begin{figure}[hbtp] % fig 143
\centering
Expand Down Expand Up @@ -611,7 +613,7 @@ \subsubsection{Inputs}\label{inputs}

\paragraph{Field: Economizer Lockout}\label{field-economizer-lockout-1007}

The coil system will be disabled when the air loop ecomomizer flag is active. Default is Yes.
When Yes is selected or this field is left blank the coil system will be disabled when the air loop ecomomizer flag is active. Default is Yes.

\paragraph{Field: Minimum Water Loop Temperature For Heat Recovery [C]}\label{field-minimum-water-loop-temperature-for-heat-recovery}

Expand Down
49 changes: 11 additions & 38 deletions src/EnergyPlus/UnitarySystem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1993,7 +1993,8 @@ namespace UnitarySystems {
state.dataSize->DXCoolCap = EqSizing.DesHeatingLoad;
}

if (this->m_OKToPrintSizing && !this->m_IsCoilSystemCoolingDX) PrintFlag = true;
// So far, only AirloopHVAC:UnitarySystem reports sizing information to eio file
if (this->m_OKToPrintSizing && this->m_IsUnitarySystem) PrintFlag = true;
// STEP 5: report system parameters (e.g., air flow rates, capacities, etc.)
if (this->m_FanExists) {

Expand Down Expand Up @@ -2100,7 +2101,6 @@ namespace UnitarySystems {
min(this->m_NoLoadAirFlowRateRatio, state.dataUnitarySystems->designSpecMSHP[MSHPIndex].heatingVolFlowRatio[0]);
}
this->m_NoLoadAirFlowRateRatio = min(NoLoadCoolingAirFlowRateRatio, NoLoadHeatingAirFlowRateRatio);
state.dataUnitarySystems->designSpecMSHP[MSHPIndex].noLoadAirFlowRateRatio = this->m_NoLoadAirFlowRateRatio;
} else {
if (this->m_CoolingCoilType_Num == DataHVACGlobals::Coil_CoolingAirToAirVariableSpeed ||
this->m_HeatingCoilType_Num == DataHVACGlobals::Coil_HeatingAirToAirVariableSpeed) {
Expand Down Expand Up @@ -2290,8 +2290,6 @@ namespace UnitarySystems {
this->MaxNoCoolHeatAirMassFlow = this->m_MaxNoCoolHeatAirVolFlow * state.dataEnvrn->StdRhoAir;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
} else if (this->m_CoolVolumeFlowRate.empty()) {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}

Expand Down Expand Up @@ -2364,8 +2362,6 @@ namespace UnitarySystems {
this->MaxNoCoolHeatAirMassFlow = this->m_MaxNoCoolHeatAirVolFlow * state.dataEnvrn->StdRhoAir;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
} else if (this->m_CoolVolumeFlowRate.empty()) {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}

Expand Down Expand Up @@ -2410,16 +2406,13 @@ namespace UnitarySystems {
this->MaxNoCoolHeatAirMassFlow = this->m_MaxNoCoolHeatAirVolFlow * state.dataEnvrn->StdRhoAir;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
} else if (this->m_CoolVolumeFlowRate.empty()) {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
} else {
for (Iter = this->m_NumOfSpeedCooling; Iter > 0; --Iter) {
this->m_CoolVolumeFlowRate[Iter] = this->m_MaxCoolAirVolFlow * Iter / this->m_NumOfSpeedCooling;
this->m_CoolMassFlowRate[Iter] = this->m_CoolVolumeFlowRate[Iter] * state.dataEnvrn->StdRhoAir;
this->m_MSCoolingSpeedRatio[Iter] = this->m_CoolVolumeFlowRate[Iter] / this->m_DesignFanVolFlowRate;
}
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->m_MaxNoCoolHeatAirVolFlow * state.dataEnvrn->StdRhoAir;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}
Expand Down Expand Up @@ -2448,8 +2441,6 @@ namespace UnitarySystems {
this->MaxNoCoolHeatAirMassFlow = this->m_MaxNoCoolHeatAirVolFlow * state.dataEnvrn->StdRhoAir;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
} else if (this->m_CoolVolumeFlowRate.empty()) {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}
}
Expand Down Expand Up @@ -2512,8 +2503,6 @@ namespace UnitarySystems {
this->m_NoLoadAirFlowRateRatio =
min(this->m_NoLoadAirFlowRateRatio, this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate);
} else {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}
} else if (MSHPIndex > -1) {
Expand All @@ -2522,8 +2511,6 @@ namespace UnitarySystems {
this->MaxNoCoolHeatAirMassFlow = this->m_MaxNoCoolHeatAirVolFlow * state.dataEnvrn->StdRhoAir;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
} else {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}
}
Expand Down Expand Up @@ -2602,8 +2589,6 @@ namespace UnitarySystems {
this->m_NoLoadAirFlowRateRatio =
min(this->m_NoLoadAirFlowRateRatio, this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate);
} else {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}
} else if (MSHPIndex > -1) {
Expand All @@ -2613,8 +2598,6 @@ namespace UnitarySystems {
this->m_NoLoadAirFlowRateRatio = this->m_MSHeatingSpeedRatio[this->m_NumOfSpeedHeating] *
state.dataUnitarySystems->designSpecMSHP[MSHPIndex].noLoadAirFlowRateRatio;
} else {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}
}
Expand Down Expand Up @@ -2662,8 +2645,6 @@ namespace UnitarySystems {
this->m_NoLoadAirFlowRateRatio = this->m_MSHeatingSpeedRatio[this->m_NumOfSpeedHeating] *
state.dataUnitarySystems->designSpecMSHP[MSHPIndex].noLoadAirFlowRateRatio;
} else {
this->m_MaxNoCoolHeatAirVolFlow = this->m_MaxNoCoolHeatAirVolFlow;
this->MaxNoCoolHeatAirMassFlow = this->MaxNoCoolHeatAirMassFlow;
this->m_NoLoadAirFlowRateRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_DesignFanVolFlowRate;
}
}
Expand Down Expand Up @@ -7224,20 +7205,20 @@ namespace UnitarySystems {
}
input_specs.dehumidification_control_type = dehumidControlType;

std::string runOnSensibleLoad("YES");
bool runOnSensibleLoad = true;
if (fields.find("run_on_sensible_load") != fields.end()) {
runOnSensibleLoad = UtilityRoutines::MakeUPPERCase(AsString(fields.at("run_on_sensible_load")));
runOnSensibleLoad = UtilityRoutines::SameString(fields.at("run_on_sensible_load"), "YES");
}
std::string runOnLatentLoad("NO");
bool runOnLatentLoad = false;
if (fields.find("run_on_latent_load") != fields.end()) {
runOnLatentLoad = UtilityRoutines::MakeUPPERCase(AsString(fields.at("run_on_latent_load")));
runOnLatentLoad = UtilityRoutines::SameString(fields.at("run_on_latent_load"), "YES");
}

if (runOnSensibleLoad == "YES" && runOnLatentLoad == "NO") {
if (runOnSensibleLoad && !runOnLatentLoad) {
input_specs.latent_load_control = "SensibleOnlyLoadControl";
} else if (runOnSensibleLoad == "NO" && runOnLatentLoad == "YES") {
} else if (!runOnSensibleLoad && runOnLatentLoad) {
input_specs.latent_load_control = "LatentOnlyLoadControl";
} else if (runOnSensibleLoad == "YES" && runOnLatentLoad == "YES") {
} else if (runOnSensibleLoad && runOnLatentLoad) {
input_specs.latent_load_control = "LatentOrSensibleLoadControl";
}

Expand All @@ -7258,9 +7239,8 @@ namespace UnitarySystems {
if (fields.find("minimum_water_loop_temperature_for_heat_recovery") != fields.end()) {
thisSys.m_minWaterLoopTempForHR = fields.at("minimum_water_loop_temperature_for_heat_recovery");
}
std::string econoFlag;
if (fields.find("economizer_lockout") != fields.end()) { // duplicate above as default
econoFlag = UtilityRoutines::MakeUPPERCase(AsString(fields.at("economizer_lockout")));
std::string econoFlag = UtilityRoutines::MakeUPPERCase(AsString(fields.at("economizer_lockout")));
if (UtilityRoutines::SameString(UtilityRoutines::MakeUPPERCase(econoFlag), "YES")) {

This comment has been minimized.

Copy link
@amirroth

amirroth Aug 11, 2021

Collaborator

You've already upper-cased econoFlag above. And SameString itself also upper-cases both of its arguments. So in this case econoFlag is getting upper-cased three different times. I suggest replacing the two lines with

bool econoFlag = UtilityRoutines::SameString(fields.at("economizer_lockout"), "YES");

thisSys.m_waterSideEconomizerFlag = true;
} else {
Expand All @@ -7275,7 +7255,7 @@ namespace UnitarySystems {
thisSys.m_WaterHRPlantLoopModel = true;
}
if (thisSys.m_WaterHRPlantLoopModel) {
std::string HRcoolingCoilType = "Coil:Cooling:Water";
std::string const HRcoolingCoilType("COIL:COOLING:WATER");

This comment has been minimized.

Copy link
@amirroth

amirroth Aug 11, 2021

Collaborator

If this really is const and literal, then it should be constexpr std::string_view.

This comment has been minimized.

Copy link
@rraustad

rraustad Aug 11, 2021

Author Contributor

At line 7260 below the argument for HRcoolingCoilType is const std::string &CoilType and I get:

3>C:\Users\RRaustad\Documents\MyProjects\EnergyPlusParallel2\src\EnergyPlus\UnitarySystem.cc(7260,140): error C2664: 'int EnergyPlus::WaterCoils::GetCoilInletNode(EnergyPlus::EnergyPlusData &,const std::string &,const std::string &,bool &)': cannot convert argument 2 from 'const std::string_view' to 'const std::string &'
3>C:\Users\RRaustad\Documents\MyProjects\EnergyPlusParallel2\src\EnergyPlus\UnitarySystem.cc(7260,140): message : Reason: cannot convert from 'const std::string_view' to 'const std::string'

This comment has been minimized.

Copy link
@rraustad

rraustad Aug 11, 2021

Author Contributor

via this code change:

constexpr std::string_view HRcoolingCoilType("COIL:COOLING:WATER");

This comment has been minimized.

Copy link
@rraustad

rraustad Aug 11, 2021

Author Contributor

I assume because that argument is a reference and really doesn't need to be. So I can't even AsString that argument.

This comment has been minimized.

Copy link
@amirroth

amirroth Aug 11, 2021

Collaborator

Actually, it's not because it isn't a reference, it's because there is no copy constructor for std::string that takes std::string_view as argument (and so a string parameter cannot automatically make a string out of a string_view argument). Okay ... here's the situation. Leave this for now. However, put a pin in it because it should be fixed. And the specific fix is not to change the type parameter of getCoilInletNode to std::string_view, it's to change it to an enumeration. We should not use constant strings where enumerations will do. I will open up an issue for this. I noticed this with CompType as well. Sorry for the slight goose chase, but it did float this particular issue, so that is good.

bool errFound = false;
thisSys.m_HRcoolCoilAirInNode = WaterCoils::GetCoilInletNode(state, HRcoolingCoilType, HRWaterCoolingCoilName, errFound);
thisSys.m_HRcoolCoilFluidInletNode =
Expand Down Expand Up @@ -9955,13 +9935,6 @@ namespace UnitarySystems {
}
}

// OpMode = UnitarySystem(UnitarySysNum)%FanOpMode
if (allocated(state.dataAirLoop->AirLoopControlInfo) && this->m_AirLoopEquipment) {
state.dataUnitarySystems->economizerFlag = state.dataAirLoop->AirLoopControlInfo(AirLoopNum).EconoActive;
} else {
state.dataUnitarySystems->economizerFlag = false;
}

// System load calculation for cycling fan systems
if (this->ControlZoneMassFlowFrac > 0.0) {
QZnReq = ZoneLoad / this->ControlZoneMassFlowFrac;
Expand Down
8 changes: 4 additions & 4 deletions tst/EnergyPlus/unit/UnitarySystem.unit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15488,10 +15488,10 @@ TEST_F(ZoneUnitarySysTest, UnitarySystemModel_MultiSpeedDXCoilsNoLoadFlowRateSiz
Real64 results_noLoadCoolingFlowRatio = 1.0 / double(state->dataUnitarySystems->designSpecMSHP[MSHPIndex].numOfSpeedHeating);
Real64 results_noLoadFlowRatioMin = min(results_noLoadHeatingFlowRatio, results_noLoadCoolingFlowRatio);

EXPECT_NEAR(results_noLoadFlowRatioMin, thisSys->m_NoLoadAirFlowRateRatio, 0.00001);
EXPECT_NEAR(0.50, thisSys->m_NoLoadAirFlowRateRatio, 0.00001);
EXPECT_NEAR(0.75, thisSys->m_MaxNoCoolHeatAirVolFlow, 0.00001);
EXPECT_NEAR(0.75, thisSys->m_MaxCoolAirVolFlow * thisSys->m_NoLoadAirFlowRateRatio, 0.00001);
EXPECT_NEAR(results_noLoadFlowRatioMin, thisSys->m_NoLoadAirFlowRateRatio / 2.0, 0.00001);
EXPECT_NEAR(1.0, thisSys->m_NoLoadAirFlowRateRatio, 0.00001);
EXPECT_NEAR(1.5, thisSys->m_MaxNoCoolHeatAirVolFlow, 0.00001);
EXPECT_NEAR(1.5, thisSys->m_MaxCoolAirVolFlow * thisSys->m_NoLoadAirFlowRateRatio, 0.00001);
}

TEST_F(ZoneUnitarySysTest, UnitarySystemModel_MultiSpeedDXCoilsDirectSolutionTest)
Expand Down

1 comment on commit 0cce7af

@nrel-bot-3
Copy link

Choose a reason for hiding this comment

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

NFP-runaround-heat-recovery-loop (rraustad) - x86_64-MacOS-10.15-clang-11.0.0: Build Failed

Failures:\n

API Test Summary

  • Failed: 8
  • notrun: 3

integration Test Summary

  • Passed: 2
  • Failed: 725

regression Test Summary

  • Passed: 721
  • Failed: 4

Build Badge Test Badge

Please sign in to comment.