pvlib.shading.masking_angle_passias#
- pvlib.shading.masking_angle_passias(surface_tilt, gcr)[source]#
- The average masking angle over the slant height of a row. - The masking angle is the angle from horizontal where the sky dome is blocked by the row in front. The masking angle is larger near the lower edge of a row than near the upper edge. This function calculates the average masking angle as described in [1]. - Parameters:
- surface_tilt (numeric) – Panel tilt from horizontal [degrees]. 
- gcr (float) – The ground coverage ratio of the array [unitless]. 
 
- Returns:
- mask_angle (numeric) – Average angle from horizontal where diffuse light is blocked by the preceding row [degrees]. 
 - See also - Notes - The pvlib-python authors believe that Eqn. 9 in [1] is incorrect. Here we use an independent equation. First, Eqn. 8 is non-dimensionalized (recasting in terms of GCR): \[\psi(z') = \arctan \left [ \frac{(1 - z') \sin \beta} {\mathrm{GCR}^{-1} + (z' - 1) \cos \beta} \right ]\]- Where \(GCR = B/C\) and \(z' = z/B\). The average masking angle \(\overline{\psi} = \int_0^1 \psi(z') \mathrm{d}z'\) is then evaluated symbolically using Maxima (using \(X = 1/\mathrm{GCR}\)): - load(scifac) /* for the gcfac function */ assume(X>0, cos(beta)>0, cos(beta)-X<0); /* X is 1/GCR */ gcfac(integrate(atan((1-z)*sin(beta)/(X+(z-1)*cos(beta))), z, 0, 1)) - This yields the equation implemented by this function: \[\begin{split}\overline{\psi} = \ &-\frac{X}{2} \sin\beta \log | 2 X \cos\beta - (X^2 + 1)| \\ &+ (X \cos\beta - 1) \arctan \frac{X \cos\beta - 1}{X \sin\beta} \\ &+ (1 - X \cos\beta) \arctan \frac{\cos\beta}{\sin\beta} \\ &+ X \log X \sin\beta\end{split}\]- The pvlib-python authors have validated this equation against numerical integration of \(\overline{\psi} = \int_0^1 \psi(z') \mathrm{d}z'\). - References 
 
    
  
  
