LCOV - code coverage report
Current view: top level - EnergyPlus - EMSManager.hh (source / functions) Coverage Total Hit
Test: lcov.output.filtered Lines: 100.0 % 12 12
Test Date: 2025-05-22 16:09:37 Functions: 100.0 % 3 3

            Line data    Source code
       1              : // EnergyPlus, Copyright (c) 1996-2025, The Board of Trustees of the University of Illinois,
       2              : // The Regents of the University of California, through Lawrence Berkeley National Laboratory
       3              : // (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge
       4              : // National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other
       5              : // contributors. All rights reserved.
       6              : //
       7              : // NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
       8              : // U.S. Government consequently retains certain rights. As such, the U.S. Government has been
       9              : // granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
      10              : // worldwide license in the Software to reproduce, distribute copies to the public, prepare
      11              : // derivative works, and perform publicly and display publicly, and to permit others to do so.
      12              : //
      13              : // Redistribution and use in source and binary forms, with or without modification, are permitted
      14              : // provided that the following conditions are met:
      15              : //
      16              : // (1) Redistributions of source code must retain the above copyright notice, this list of
      17              : //     conditions and the following disclaimer.
      18              : //
      19              : // (2) Redistributions in binary form must reproduce the above copyright notice, this list of
      20              : //     conditions and the following disclaimer in the documentation and/or other materials
      21              : //     provided with the distribution.
      22              : //
      23              : // (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
      24              : //     the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
      25              : //     used to endorse or promote products derived from this software without specific prior
      26              : //     written permission.
      27              : //
      28              : // (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
      29              : //     without changes from the version obtained under this License, or (ii) Licensee makes a
      30              : //     reference solely to the software portion of its product, Licensee must refer to the
      31              : //     software as "EnergyPlus version X" software, where "X" is the version number Licensee
      32              : //     obtained under this License and may not use a different name for the software. Except as
      33              : //     specifically required in this Section (4), Licensee shall not use in a company name, a
      34              : //     product name, in advertising, publicity, or other promotional activities any name, trade
      35              : //     name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
      36              : //     similar designation, without the U.S. Department of Energy's prior written consent.
      37              : //
      38              : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
      39              : // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
      40              : // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
      41              : // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      42              : // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
      43              : // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      44              : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
      45              : // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      46              : // POSSIBILITY OF SUCH DAMAGE.
      47              : 
      48              : #ifndef EMSManager_hh_INCLUDED
      49              : #define EMSManager_hh_INCLUDED
      50              : 
      51              : // ObjexxFCL Headers
      52              : #include <ObjexxFCL/Optional.hh>
      53              : 
      54              : // EnergyPlus Headers
      55              : #include <EnergyPlus/Data/BaseData.hh>
      56              : #include <EnergyPlus/DataGlobalConstants.hh>
      57              : #include <EnergyPlus/DataHVACGlobals.hh>
      58              : #include <EnergyPlus/EnergyPlus.hh>
      59              : #include <EnergyPlus/OutputProcessor.hh>
      60              : 
      61              : namespace EnergyPlus {
      62              : 
      63              : // Forward declarations
      64              : struct EnergyPlusData;
      65              : 
      66              : // note there are routines that lie outside of the Module at the end of this file
      67              : 
      68              : namespace EMSManager {
      69              : 
      70              :     // Parameters for EMS Calling Points
      71              :     enum class EMSCallFrom
      72              :     {
      73              :         Invalid = -1,
      74              :         ZoneSizing,
      75              :         SystemSizing,
      76              :         BeginNewEnvironment,
      77              :         BeginNewEnvironmentAfterWarmUp,
      78              :         BeginTimestepBeforePredictor,
      79              :         BeforeHVACManagers,
      80              :         AfterHVACManagers,
      81              :         HVACIterationLoop,
      82              :         EndSystemTimestepBeforeHVACReporting,
      83              :         EndSystemTimestepAfterHVACReporting,
      84              :         EndZoneTimestepBeforeZoneReporting,
      85              :         EndZoneTimestepAfterZoneReporting,
      86              :         SetupSimulation,
      87              :         ExternalInterface,
      88              :         ComponentGetInput,
      89              :         UserDefinedComponentModel,
      90              :         UnitarySystemSizing,
      91              :         BeginZoneTimestepBeforeInitHeatBalance,
      92              :         BeginZoneTimestepAfterInitHeatBalance,
      93              :         BeginZoneTimestepBeforeSetCurrentWeather,
      94              :         Num
      95              :     };
      96              : 
      97              :     void CheckIfAnyEMS(EnergyPlusData &state);
      98              : 
      99              :     void ManageEMS(EnergyPlusData &state,
     100              :                    EMSCallFrom iCalledFrom,                              // indicates where subroutine was called from, parameters in DataGlobals.
     101              :                    bool &anyProgramRan,                                  // true if any Erl programs ran for this call
     102              :                    ObjexxFCL::Optional_int_const ProgramManagerToRun = _ // specific program manager to run
     103              :     );
     104              : 
     105              :     void InitEMS(EnergyPlusData &state, EMSCallFrom iCalledFrom); // indicates where subroutine was called from, parameters in DataGlobals.
     106              : 
     107              :     void ReportEMS(EnergyPlusData &state);
     108              : 
     109              :     void GetEMSInput(EnergyPlusData &state);
     110              : 
     111              :     void ProcessEMSInput(EnergyPlusData &state, bool reportErrors); // .  If true, then report out errors ,otherwise setup what we can
     112              : 
     113              :     void GetVariableTypeAndIndex(
     114              :         EnergyPlusData &state, std::string const &VarName, std::string const &VarKeyName, OutputProcessor::VariableType &VarType, int &VarIndex);
     115              : 
     116              :     void EchoOutActuatorKeyChoices(EnergyPlusData &state);
     117              : 
     118              :     void EchoOutInternalVariableChoices(EnergyPlusData &state);
     119              : 
     120              :     void SetupNodeSetPointsAsActuators(EnergyPlusData &state);
     121              : 
     122              :     void UpdateEMSTrendVariables(EnergyPlusData &state);
     123              : 
     124              :     bool CheckIfNodeSetPointManaged(EnergyPlusData &state,
     125              :                                     int NodeNum, // index of node being checked.
     126              :                                     HVAC::CtrlVarType SetPointType,
     127              :                                     bool byHandle = false);
     128              : 
     129              :     bool CheckIfNodeSetPointManagedByEMS(EnergyPlusData &state,
     130              :                                          int NodeNum, // index of node being checked.
     131              :                                          HVAC::CtrlVarType SetPointType,
     132              :                                          bool &ErrorFlag);
     133              : 
     134              :     bool CheckIfNodeMoreInfoSensedByEMS(EnergyPlusData &state,
     135              :                                         int nodeNum, // index of node being checked.
     136              :                                         std::string const &varName);
     137              : 
     138              :     bool isScheduleManaged(EnergyPlusData &state, Sched::Schedule *const sched);
     139              : 
     140              :     void SetupPrimaryAirSystemAvailMgrAsActuators(EnergyPlusData &state);
     141              : 
     142              :     void SetupWindowShadingControlActuators(EnergyPlusData &state);
     143              : 
     144              :     void SetupThermostatActuators(EnergyPlusData &state);
     145              : 
     146              :     void SetupSurfaceConvectionActuators(EnergyPlusData &state);
     147              : 
     148              :     void SetupSurfaceConstructionActuators(EnergyPlusData &state);
     149              : 
     150              :     void SetupSurfaceOutdoorBoundaryConditionActuators(EnergyPlusData &state);
     151              : 
     152              :     void SetupZoneOutdoorBoundaryConditionActuators(EnergyPlusData &state);
     153              : 
     154              :     void SetupZoneInfoAsInternalDataAvail(EnergyPlusData &state);
     155              : 
     156              :     void checkForUnusedActuatorsAtEnd(EnergyPlusData &state);
     157              : 
     158              :     void checkSetpointNodesAtEnd(EnergyPlusData &state);
     159              : 
     160              : } // namespace EMSManager
     161              : 
     162              : // Moved these setup EMS actuator routines out of module to solve circular use problems between
     163              : //  ScheduleManager and OutputProcessor. Followed pattern used for SetupOutputVariable
     164              : 
     165              : void SetupEMSActuator(EnergyPlusData &state,
     166              :                       std::string_view cComponentTypeName,
     167              :                       std::string_view cUniqueIDName,
     168              :                       std::string_view cControlTypeName,
     169              :                       std::string_view cUnits,
     170              :                       bool &lEMSActuated,
     171              :                       Real64 &rValue);
     172              : 
     173              : void SetupEMSActuator(EnergyPlusData &state,
     174              :                       std::string_view cComponentTypeName,
     175              :                       std::string_view cUniqueIDName,
     176              :                       std::string_view cControlTypeName,
     177              :                       std::string_view cUnits,
     178              :                       bool &lEMSActuated,
     179              :                       int &iValue);
     180              : 
     181              : void SetupEMSActuator(EnergyPlusData &state,
     182              :                       std::string_view cComponentTypeName,
     183              :                       std::string_view cUniqueIDName,
     184              :                       std::string_view cControlTypeName,
     185              :                       std::string_view cUnits,
     186              :                       bool &lEMSActuated,
     187              :                       bool &lValue);
     188              : 
     189              : void SetupEMSInternalVariable(
     190              :     EnergyPlusData &state, std::string_view cDataTypeName, std::string_view cUniqueIDName, std::string_view cUnits, Real64 &rValue);
     191              : 
     192              : void SetupEMSInternalVariable(
     193              :     EnergyPlusData &state, std::string_view cDataTypeName, std::string_view cUniqueIDName, std::string_view cUnits, int &iValue);
     194              : 
     195              : struct EMSManagerData : BaseGlobalStruct
     196              : {
     197              : 
     198              :     bool GetEMSUserInput = true; // Flag to prevent input from being read multiple times
     199              :     bool ZoneThermostatActuatorsHaveBeenSetup = false;
     200              :     bool FinishProcessingUserInput = true; // Flag to indicate still need to process input
     201              :     bool lDummy = false;                   // dummy pointer location
     202              :     bool lDummy2 = false;                  // dummy pointer location
     203              : 
     204         2126 :     void init_constant_state([[maybe_unused]] EnergyPlusData &state) override
     205              :     {
     206         2126 :     }
     207              : 
     208         1153 :     void init_state([[maybe_unused]] EnergyPlusData &state) override
     209              :     {
     210         1153 :         EMSManager::CheckIfAnyEMS(state);
     211         1153 :     }
     212              : 
     213         2100 :     void clear_state() override
     214              :     {
     215         2100 :         GetEMSUserInput = true;
     216         2100 :         ZoneThermostatActuatorsHaveBeenSetup = false;
     217         2100 :         FinishProcessingUserInput = true;
     218         2100 :         this->lDummy = false;
     219         2100 :         this->lDummy2 = false;
     220         2100 :     }
     221              : };
     222              : 
     223              : } // namespace EnergyPlus
     224              : 
     225              : #endif
        

Generated by: LCOV version 2.0-1