power_mismatch_deline docstring: the rear-to-total RMAD conversion has an extra bifaciality factor
Los mantenedores suelen responder en 1 día
Ya se ha fusionado un pull request relacionado.
- #2930 de @echedey-ls — fusionado
Evaluación
- Dificultad
- 1/5
- Tiempo estimado
- Menos de una hora
- Aptitud para principiantes
- 85/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- documentation
Línea de trabajo
Edita la sección Notes del docstring de pvlib.bifacial.power_mismatch_deline en pvlib/bifacial/loss_models.py, líneas 118-132, eliminando el factor de bifacialidad adicional de la fórmula de conversión RMAD como muestra la derivación del issue. El código de la función no se ve afectado; verifica la fórmula corregida con el fragmento de reproducción del issue y luego compila la documentación para comprobar que la fórmula matemática se renderiza correctamente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
The Notes of pvlib.bifacial.power_mismatch_deline convert the RMAD of the rear irradiance to the RMAD of the total irradiance with one bifaciality factor too many. The docstring says
$$RMAD(k \cdot X + c) = RMAD(X) \cdot k \frac{k \bar{X}}{k \bar{X} + c} = RMAD(X) \cdot \frac{k}{1 + \frac{c}{k \bar{X}}}$$
and so
$$RMAD_{total} = RMAD_{rear} \frac{\phi_{Bifi}}{1 + \frac{G_{front}}{\phi_{Bifi} \bar{G}_{rear}}}$$
RMAD doesn't change with scale, though. For $Y = kX + c$, each $|Y_i - Y_j| = k |X_i - X_j|$ and $\bar{Y} = k\bar{X} + c$, so
$$RMAD(k \cdot X + c) = \frac{k \sum_i \sum_j |X_i - X_j|}{n^2 (k \bar{X} + c)} = RMAD(X) \cdot \frac{k \bar{X}}{k \bar{X} + c} = \frac{RMAD(X)}{1 + \frac{c}{k \bar{X}}}$$
which gives
$$RMAD_{total} = \frac{RMAD_{rear}}{1 + \frac{G_{front}}{\phi_{Bifi} \bar{G}_{rear}}}$$
Following the docstring understates the total RMAD by the factor $\phi_{Bifi}$, about 30 % for a bifaciality of 0.7, and so the mismatch loss as well. The function's code isn't affected: it takes the total RMAD as given. Only the formula in the Notes is.
To Reproduce
import numpy as np
rng = np.random.default_rng(0)
g_rear = rng.uniform(80, 160, 72) # W/m2, one value per cell
g_front = 900.0 # W/m2, uniform front
phi = 0.7 # bifaciality
g_total = g_front + phi * g_rear # Eq. (2) of Deline et al. (2020)
def rmad(x):
x = np.asarray(x, dtype=float)
return np.abs(x[:, None] - x[None, :]).sum() / (x.size**2 * x.mean())
rmad_rear = rmad(g_rear)
print(rmad(g_total)) # 0.0193862763
print(rmad_rear / (1 + g_front / (phi * g_rear.mean()))) # 0.0193862763
print(rmad_rear * phi / (1 + g_front / (phi * g_rear.mean()))) # 0.0135703934, the docstring's form
Expected behavior
The Notes would read $RMAD(k \cdot X + c) = RMAD(X) \cdot \frac{k \bar{X}}{k \bar{X} + c} = \frac{RMAD(X)}{1 + \frac{c}{k \bar{X}}}$, and $RMAD_{total} = \frac{RMAD_{rear}}{1 + \frac{G_{front}}{\phi_{Bifi} \bar{G}_{rear}}}$. The text is in pvlib/bifacial/loss_models.py, lines 118–132 on main today.
Versions:
pvlib.__version__: 0.16.1 (the same text is onmain)pandas.__version__: 3.0.6- python: 3.12.15
- Lenguaje dominante
- Python
- Estrellas
- 1.7k
- Forks
- 1.2k
- Merge medio
- 3 d 6 h
- PR fusionados (30 d)
- 12
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pvlib/pvlib-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
pvlib/pvlib-python#2935 ·
Los mantenedores suelen responder en 1 día
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
pvlib/pvlib-python#2921 · 2 comentarios · 2 reacciones ·
Los mantenedores suelen responder en 1 día
-
Possibility of beam irradiance from behind plane of arrayQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
pvlib/pvlib-python#2903 · 5 comentarios · 2 reacciones ·
Los mantenedores suelen responder en 1 día
-
use offset parameter instead of calculating bday in cdromPosiblemente ocupada @chenyi6758-source la tomó hace 15 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
pvlib/pvlib-python#2902 ·
Los mantenedores suelen responder en 1 día
-
Add an example or documentation on using 'bhi' from ERA5Quizá libre de nuevo @anshurajbisoyi98-ctrl la tomó hace 30 días y no hay ningún pull request abierto. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
pvlib/pvlib-python#2880 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de pvlib/pvlib-python
Issues similares
-
New InternshipAbiertonew_internship
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
get_graph warns that the oneway column is missing when no way has a oneway tagPosiblemente ocupada @HTenkanen la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cython/cython#8110 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
fix: security 🔐 style: article/section 📝 system: data-mgmt 🗃️ system: security 🔐 system: software 💻
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
uabrc/uabrc.github.io#1267 ·
-
Link Checker ReportAbiertoBot Type: Bug Type: Documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día