Skip to content

Commit

Permalink
Merge pull request #5529 from NREL/5528-Generators-Trap-Neg-SandiaPV-…
Browse files Browse the repository at this point in the history
…Zenith

5528 generators trap neg sandiapv zenith
  • Loading branch information
Myoldmopar committed Mar 24, 2016
2 parents 6f23950 + 64f2e8c commit 89eb18e
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 3 deletions.
16 changes: 15 additions & 1 deletion src/EnergyPlus/ElectricPowerServiceManager.cc
Expand Up @@ -1924,7 +1924,9 @@ namespace EnergyPlus {
electricityProd( 0.0 ),
electProdRate( 0.0 ),
thermalProd( 0.0 ),
thermProdRate( 0.0 )
thermProdRate( 0.0 ),
errCountNegElectProd_( 0 ),
errCountNegThermProd_( 0 )
{

std::string const routineName = "GeneratorController constructor ";
Expand Down Expand Up @@ -2068,6 +2070,18 @@ namespace EnergyPlus {
break;
}
} // end switch

//check if generator production has gone wrong and is negative, reset to zero and warn
if ( electricPowerOutput < 0.0 ) {
if ( errCountNegElectProd_ == 0 ) {
ShowWarningMessage( typeOfName + " named " + name + " is producing negative electric power, check generator inputs." );
ShowContinueError( "Electric power production rate =" + General::RoundSigDigits( electricPowerOutput, 4 ) );
ShowContinueError( "The power will be set to zero, and the simulation continues... " );
}
ShowRecurringWarningErrorAtEnd( typeOfName + " named " + name + " is producing negative electric power ", errCountNegElectProd_,electricPowerOutput, electricPowerOutput );
electricPowerOutput = 0.0;
}

}

DCtoACInverter::DCtoACInverter(
Expand Down
7 changes: 7 additions & 0 deletions src/EnergyPlus/ElectricPowerServiceManager.hh
Expand Up @@ -595,6 +595,13 @@ public: // data // might make this class a friend of ElectPowerLoadCenter?
Real64 electProdRate; // Current AC Electric Production Rate from Equipment (W)
Real64 thermalProd; // Current Thermal energy Produced from Equipment (J)
Real64 thermProdRate; // Current Thermal energy Production Rate from Equipment (W)

private:

int errCountNegElectProd_; // error count for reccuring error when generators produce negative electric power
int errCountNegThermProd_; // error count for reccuring error when generators produce negative thermal power


}; //class GeneratorController

class ElectPowerLoadCenter
Expand Down
4 changes: 2 additions & 2 deletions src/EnergyPlus/Photovoltaics.cc
Expand Up @@ -2145,8 +2145,8 @@ namespace Photovoltaics {
Real64 const AM( 1.0 / ( std::cos( SolZen * DegToRadians ) + 0.5057 * std::pow( 96.08 - SolZen, -1.634 ) ) );
AbsoluteAirMass = std::exp( -0.0001184 * Altitude ) * AM;
} else {
AbsoluteAirMass = 999.0;
// should maybe add a show warning msg.
Real64 const AM( 36.32 ); // evaluated above at SolZen = 89.9 issue #5528
AbsoluteAirMass = std::exp( -0.0001184 * Altitude ) * AM;
}

return AbsoluteAirMass;
Expand Down
1 change: 1 addition & 0 deletions tst/EnergyPlus/unit/CMakeLists.txt
Expand Up @@ -73,6 +73,7 @@ set( test_src
OutputReportData.unit.cc
OutputReportTabular.unit.cc
OutputReportTabularAnnual.unit.cc
Photovoltaics.unit.cc
PierceSurface.unit.cc
ReportSizingManager.unit.cc
RoomAirflowNetwork.unit.cc
Expand Down
87 changes: 87 additions & 0 deletions tst/EnergyPlus/unit/Photovoltaics.unit.cc
@@ -0,0 +1,87 @@
// EnergyPlus, Copyright (c) 1996-2016, The Board of Trustees of the University of Illinois and
// The Regents of the University of California, through Lawrence Berkeley National Laboratory
// (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights
// reserved.
//
// If you have questions about your rights to use or distribute this software, please contact
// Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov.
//
// NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
// U.S. Government consequently retains certain rights. As such, the U.S. Government has been
// granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
// worldwide license in the Software to reproduce, distribute copies to the public, prepare
// derivative works, and perform publicly and display publicly, and to permit others to do so.
//
// Redistribution and use in source and binary forms, with or without modification, are permitted
// provided that the following conditions are met:
//
// (1) Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// (2) Redistributions in binary form must reproduce the above copyright notice, this list of
// conditions and the following disclaimer in the documentation and/or other materials
// provided with the distribution.
//
// (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
// the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific prior
// written permission.
//
// (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
// without changes from the version obtained under this License, or (ii) Licensee makes a
// reference solely to the software portion of its product, Licensee must refer to the
// software as "EnergyPlus version X" software, where "X" is the version number Licensee
// obtained under this License and may not use a different name for the software. Except as
// specifically required in this Section (4), Licensee shall not use in a company name, a
// product name, in advertising, publicity, or other promotional activities any name, trade
// name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
// similar designation, without Lawrence Berkeley National Laboratory's prior written consent.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the
// features, functionality or performance of the source code ("Enhancements") to anyone; however,
// if you choose to make your Enhancements available either publicly, or directly to Lawrence
// Berkeley National Laboratory, without imposing a separate written license agreement for such
// Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free
// perpetual license to install, use, modify, prepare derivative works, incorporate into other
// computer software, distribute, and sublicense such enhancements or derivative works thereof,
// in binary and source code form.

// EnergyPlus::ElectricPowerServiceManager Unit Tests

// Google Test Headers
#include <gtest/gtest.h>

// EnergyPlus Headers
#include <Photovoltaics.hh>

#include "Fixtures/EnergyPlusFixture.hh"

using namespace EnergyPlus;

TEST_F( EnergyPlusFixture, PV_Sandia_AirMassAtHighZenith )
{
// unit test for issue #5528, test behavior of function AbsoluteAirMass at zenith angle above 89.9 degrees.

// first check above the degree threshold, compare to side calc
Real64 zenithAngleDeg = 90.0;
Real64 altitude = 1;
Real64 airMass = Photovoltaics::AbsoluteAirMass( zenithAngleDeg, altitude );
EXPECT_NE( airMass, 999 ); // would have been true before fix
EXPECT_NEAR( airMass, 36.31531 , 0.1 );

// now check below the threshold, compare to side calc spreadhsheet result
zenithAngleDeg = 89.0;
airMass = Photovoltaics::AbsoluteAirMass( zenithAngleDeg, altitude );
EXPECT_NEAR( airMass, 26.24135, 0.1 );

}

2 comments on commit 89eb18e

@nrel-bot
Copy link

Choose a reason for hiding this comment

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

develop (Myoldmopar) - i386-Windows-7-VisualStudio-12: OK (1619 of 1619 tests passed, 0 test warnings)

Build Badge Test Badge

@nrel-bot
Copy link

Choose a reason for hiding this comment

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

develop (Myoldmopar) - Win64-Windows-7-VisualStudio-12: OK (1619 of 1619 tests passed, 0 test warnings)

Build Badge Test Badge

Please sign in to comment.