Skip to content

Commit

Permalink
Merge pull request #66 from NREL/development
Browse files Browse the repository at this point in the history
* add pypi workflow

* Update and rename publish-to-test-pypi.yml to publish-to-pypi.yml

* Update publish-to-pypi.yml

https://github.blog/changelog/2023-12-14-github-actions-artifacts-v4-is-now-generally-available/

* Update publish-to-pypi.yml

update actions/setup-python@v5

* Update publish-to-pypi.yml

* Update publish-to-pypi.yml

* update development (#59)

* Reworking of the standoff calculations

overall major reworking of the standoff calculations. Too many things to list.

* standard updates

* Update weather.py

Just added in a print statement to indicate the humidity was finished calculating.

* updates to the standoff calculation

Just a bunch of updates to make it into the tool I want.

* Update xeff_demo.csv

I updated it to have a theoretical measured set of module data.

* Update standards.py

Just small formating issues here.

* Create xeff_demo.xlsx

* Adding calculations to the file

Major revision underway. I have most of the program working but the last few sections are still needing a bit of work.

* Update 4 - Standards.py

Lots of reworking on the code to get it to have more methods for calculations. there is still a lot to be done.

* Update weather.py

Put in defaults in get_NSRDB

* Update standards.py

just working on it

* Update weather.py

Put in code to start a get_satellite function

* Update weather.py

typos fixed

* Update weather.py

fixed now.

* Update weather.py

Hopefully now it is patched correctly.

* Update weather.py

now it could work.

* Update weather.py

* Update weather.py

fixed import nsrdbx as f

* Update weather.py

updated

* Update 4 - Standards.ipynb

update

* standards

* Update xeff_demo.csv

Updated the demo module data to be calculated from the cell temperature instead of the module surface temperature.

* Update xeff_demo.xlsx

* Update xeff_demo.csv

Updated the manufactured module data.

* Update xeff_demo.xlsx

Incldues the modeled POA data from Python and an updated module temperature calculation.

* Update utilities.py

I changed it to instead of just having 180 degrees south be the default azimuth, it will point north or 0 degrees by default in the southern hemisphere.

* Massive changes and a stopping point

It's a complete overhaul. I'm going to merge it now, but I would like it put in the main as is and to have it's name changed to "Standoff.ipynb"

* Update spectral.py

Making the default azimuth be equatorial facing instead of always south. No northern-centric bias here. ;)

* Update temperature.py

I fixed the cell temperature calculation to default to a wind speed factor of 1.7 instead of 1 and to allow that to be passed in. My guess is that this change will cause problems elsewhere.

* Update standards.py

Massive changes here but for the most part it is all about the standoff calculation which is working. One change to be aware of is that the prior calculations were using the module surface temperature for the standoff calculation but now it is using the cell temperature calculation.

* improvement on temperature windspeedfactor fix

* dding pytest coverage instructions

* Wind height added

Added in a field for wind height data to the demonstration weather data.

* Update weather.py

Added in some if/then statements to put in a field for the wind speed measurement height. For the NSRDB it is set for 2m, for PVGIS it is set for 10m.

* Update weather.py

Made it so it would delete the message indicating that Rh was being calculated once it is completed.

* Update standards.py

Created a print statement method to output the results of the standoff calculation.

* Update temperature.py

Changed it to do a wind speed factor calculation based on the wind height in the meta data and the supplied power factor using appropriate defaults.

* Update temperature.py

Got it to correctly use the wind speed exponent.

* Update standards.py

Got it to correctly use the wind speed exponent.

* Update 4 - Standards.ipynb

Got it to correctly use the wind speed exponent.

* Update temperature.py

Fixing wind speed stuff

* Update 4 - Standards.ipynb

Fixing wind speed stuff

* Update fatigue.py

Modified the fatigue calculator to work with the new wind speed exponent method.

* Update test_fatigue.py

Fixed this procedure to call the module temperature function correctly.

* Update humidity.py

It now uses the desired power factor for wind speed height adjustment.

* Update h5_pytest.h5

It now uses the desired power factor for wind speed height adjustment.

* Update meta.json

It now has a field for the wind speed height.

* Update test_humidity.py

It now uses the desired power factor for wind speed height adjustment.

* Update test_standards.py

It now uses the desired power factor for wind speed height adjustment.

* Update test_temperature.py

It now uses the desired power factor for wind speed height adjustment.

* Update standards.py

It now uses the desired power factor for wind speed height adjustment.

I found an error in the standoff calculation. It was previously using the module surface temperature and it should be using the module cell temperature. It makes the required standoff calculations a bit higher.

* Update standards.py

Fixed some documentation for wind speed dependence and made it so the T98 calculation will default to equatorial facing, open rack and latitude tilt.

* Update weather.py

fixed the improper importing NSRDBX as f and did some documentation work.

* Update standards.py

Fixed the functions with capitals issue.

* Update 4 - Standards.ipynb

Fixed the functions with capitals issue.

* deploy to pypi on tag release (#55)

* add pypi workflow

* Update standards.py

I fixed an error check for the case of now wind height specification in the meta data of a dataset by removing it. that error check is managed in temperature.py.

* Update 4 - Standards.ipynb

Just some documentation changes.

* Update temperature.py

just some documentation changes

* run pre-commit hooks

* revert changes in h5_pytest.h5

* update docs conf from main

* Revert "Kempe standoff" (#57)

* run updated pre-commit hooks

* add pre-commit to dependencies

---------

Co-authored-by: MDKempe <[email protected]>
Co-authored-by: Silvana Ovaitt <[email protected]>
Co-authored-by: Kempe <[email protected]>
Co-authored-by: Silvana Ovaitt <[email protected]>

* added codecov to actions

* write coverage report

* update pytest.yml

* add pytest-cov

* add build status to readme

* Kempe standoff pull request (#58)

* Reworking of the standoff calculations

* standard updates

* Update weather.py

* Update xeff_demo.csv

* Create xeff_demo.xlsx

* Put in defaults in get_NSRDB

* typos fixed

* Changed standoff calculation to instead of just having 180 degrees south be the default azimuth, it will point north or 0 degrees by default in the southern hemisphere.

* Update spectral.py

* Massive changes here but for the most part it is all about the standoff calculation which is working. One change to be aware of is that the prior calculations were using the module surface temperature for the standoff calculation but now it is using the cell temperature calculation.

* improvement on temperature windspeedfactor fix

* adding pytest coverage instructions

* Wind height added

* Added in a field for wind height data to the demonstration weather data.

* Added in some if/then statements to put in a field for the wind speed measurement height. For the NSRDB it is set for 2m, for PVGIS it is set for 10m.

* Made it so it would delete the message indicating that Rh was being calculated once it is completed.

* Changed it to do a wind speed factor calculation based on the wind height in the meta data and the supplied power factor using appropriate defaults.

* Modified the fatigue calculator to work with the new wind speed exponent method.

* Update meta.json

* Update test_humidity.py

* Update test_standards.py

* Update test_temperature.py

* Update standards.py

* I found an error in the standoff calculation. It was previously using the module surface temperature and it should be using the module cell temperature. It makes the required standoff calculations a bit higher.

* Update standards.py

* Fixed some documentation for wind speed dependence and made it so the T98 calculation will default to equatorial facing, open rack and latitude tilt.

* Some documentation changes.

* Update temperature.py

* run pre-commit hooks

* adapt wind_height variable name to NSRDB

* keep wind_height in meta

* refactor eff_gap_parameters()

* fix typo in temperature models

* workflow update Node.js 16 to 20

---------

Co-authored-by: MDKempe <[email protected]>
Co-authored-by: Silvana Ovaitt <[email protected]>
Co-authored-by: Kempe <[email protected]>
Co-authored-by: Silvana Ovaitt <[email protected]>
Co-authored-by: Kevin Anderson <[email protected]>

* Readthedocs pr (#61)

* New Sphinx Environment

* User Guide - Package Overview

* Modules API

* API reference

* Monte Carlo User Guide

* include external link aliases

---------

Co-authored-by: tobin-ford <[email protected]>
Co-authored-by: martin-springer <[email protected]>

* update what's new changelog

* updates to change log

* add pull request template

* Update issue templates (#63)

* release notes for 0.2.3

* Monte Carlo PR (#62)

* Added monte-carlo analysis package

---------

Co-authored-by: tobin-ford <[email protected]>
Co-authored-by: Silvana Ovaitt <[email protected]>
Co-authored-by: martin-springer <[email protected]>
Co-authored-by: Kempe <[email protected]>

---------

Co-authored-by: MDKempe <[email protected]>
Co-authored-by: Silvana Ovaitt <[email protected]>
Co-authored-by: Kempe <[email protected]>
Co-authored-by: Silvana Ovaitt <[email protected]>
Co-authored-by: Kevin Anderson <[email protected]>
Co-authored-by: tobin-ford <[email protected]>
Co-authored-by: tobin-ford <[email protected]>
  • Loading branch information
8 people authored Feb 12, 2024
2 parents 3d61998 + afe636e commit 8f123e8
Show file tree
Hide file tree
Showing 15 changed files with 1,509 additions and 3 deletions.
1 change: 1 addition & 0 deletions docs/source/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Modules, methods, classes and attributes are explained here.
fatigue
humidity
letid
montecarlo
spectral
standards
temperature
Expand Down
13 changes: 13 additions & 0 deletions docs/source/whatsnew/releases/v0.3.0.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
v0.3.0 (2024-02-12)
=======================

Enhancements
------------
* Initial integration of the Monte-Carlo analysis package

Contributors
~~~~~~~~~~~~
* Tobin Ford (:ghuser:`tobin-ford`)
* Silvana Ovaitt (:ghuser:`shirubana`)
* Martin Springer (:ghuser:`martin-springer`)
* Mike Kempe (:ghuser:`MDKempe`)
1 change: 1 addition & 0 deletions pvdeg/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from . import geospatial
from . import humidity
from . import letid
from . import montecarlo
from .scenario import Scenario
from . import spectral
from . import standards
Expand Down
54 changes: 53 additions & 1 deletion pvdeg/degradation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import numpy as np
import pandas as pd
from numba import jit
from numba import jit, njit
from rex import NSRDBX
from rex import Outputs
from pathlib import Path
Expand Down Expand Up @@ -722,3 +722,55 @@ def degradation(
degradation = C * data["dD"].sum(axis=0)

return degradation

# change it to take pd.DataFrame? instead of np.ndarray
@njit
def vecArrhenius(
poa_global : np.ndarray,
module_temp : np.ndarray,
ea : float,
x : float,
lnr0 : float
) -> float:

"""
Calculates degradation using :math:`R_D = R_0 * I^X * e^{\\frac{-Ea}{kT}}`
Parameters
----------
poa_global : numpy.ndarray
Plane of array irradiance [W/m^2]
module_temp : numpy.ndarray
Cell temperature [C].
ea : float
Activation energy [kJ/mol]
x : float
Irradiance relation [unitless]
lnR0 : float
prefactor [ln(%/h)]
Returns
----------
degredation : float
Degradation Rate [%/h]
"""

mask = poa_global >= 25
poa_global = poa_global[mask]
module_temp = module_temp[mask]

ea_scaled = ea / 8.31446261815324E-03
R0 = np.exp(lnr0)
poa_global_scaled = poa_global / 1000

degredation = 0
# refactor to list comprehension approach
for entry in range(len(poa_global_scaled)):
degredation += R0 * np.exp(-ea_scaled / (273.15 + module_temp[entry])) * np.power(poa_global_scaled[entry], x)

return (degredation / len(poa_global))
Loading

0 comments on commit 8f123e8

Please sign in to comment.