iam.schlick_diffuse returns inf and nan at surface_tilt=180

Ouverte Adaptée aux débutants
#2,939 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
backend

Piste de recherche

Commencez par lire pvlib.iam.schlick_diffuse et ses tests pour le cas particulier existant du terme du sol avec surface_tilt=0. Reproduisez le résultat signalé avec surface_tilt=180, puis vérifiez les deux composantes diffuses aux valeurs limites et pour des inclinaisons proches. Le travail est terminé lorsque la fonction renvoie les valeurs attendues pour le ciel et le sol sans avertissement de division par zéro, et que des tests de régression couvrent ce comportement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Describe the bug
pvlib.iam.schlick_diffuse(180) returns {'sky': inf, 'ground': nan} with a RuntimeWarning: divide by zero. Eq 4 for the sky term divides by 1 + cos(surface_tilt), which is 0/0 at 180. The ground term is already special-cased at tilt 0 (surface_tilt < 1e-6); the sky term has no equivalent at 180.

To Reproduce

import pvlib
pvlib.iam.schlick_diffuse(180)
# {'sky': inf, 'ground': nan}

Expected behavior
sky is 0 (a surface facing straight down sees no sky; the value tends to 0 as the tilt approaches 180) and ground is 20/21 = 0.9524, the same as sky at tilt 0. marion_diffuse('schlick', surface_tilt=180) gives 0 and 0.95236.

Versions:

  • pvlib.__version__: 0.16.2.dev19+gc5de586d7
  • pandas.__version__: 3.1.1
  • python: 3.12.12

Additional context
Found while reading the code. PVSystem.get_iam_diffuse(180, iam_model='schlick_diffuse') returns the same. I can open a PR that applies the same 1e-6 clamp to the sky term.

Langage dominant
Python
Étoiles
1.7k
Forks
1.2k
Merge moyen
3 j 4 h
PR mergées (30 j)
8

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de pvlib/pvlib-python

Toutes les issues de pvlib/pvlib-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.