pvperfsolar performance modeling

Reference / Rear side and front ground reflection

Model option

bifacialvf 1° sectors (Marion 2017)

Marion's bifacialvf model: six rear cell rows whose field of view is cut into 1° sectors on the sky, the next row and the ground

Inputs used: Bifaciality factor, Height above ground, Transparent fraction of the module plane, Structure shading factor, Ground albedo (bifacial system), Albedo

Method

The rows are taken as unlimited in length, so the model works in the vertical section across them. Each row is a flat slab whose slope length LL is the collector width. Its vertical height is Lsin⁡βL\sin\beta and its horizontal length is Lcos⁡βL\cos\beta (1). The rows stand R=L/GCRR = L/\text{GCR} apart, from the lower edge of one row to the lower edge of the next. On a fixed row the height above ground of the System tab is the height cc of the lower edge. On a tracker it is the height of the axis, and the lower edge stands half the slope length times the sine of the tilt below it.

The ground between two rows is cut into 100 intervals. Each interval sees the sky through three openings between the edges of the neighbouring rows. Its sky configuration factor is the sum of the cosine-weighted widths of the openings (2). The Perez model, with the constants under Settings, splits the diffuse horizontal irradiance into an isotropic part, a circumsolar part and a horizon band (3). The isotropic part reaches an interval in proportion to its sky configuration factor. The direct light and the circumsolar part on the horizontal reach the intervals whose centre lies outside the shadow of the row (4, 5). An interval in the shadow receives the transmission factor times that light.

The rear side is cut into six cell rows. The field of view of a cell row spans 180° from the module plane on the sky side and is cut into 1° sectors. A sector sees the sky, the front side of the next row or the ground (7). Each sector counts with its share of the cosine-weighted field of view times Marion's angle factor of glass for that sector (6). A sector that sees the sky receives the isotropic part of the diffuse light. The sky sectors less than 6° above the horizontal, just above the next row, also receive the horizon band of a vertical plane. A sector that sees the ground receives the albedo times the mean ground irradiance over its projection on the ground, the ground repeating every row distance (8). A projection wider than 0.99 times the row distance reads the mean over the whole row distance. A sector that sees the next row receives the light the next row's front cell rows reflect (9). That reflected light is the sky light, the horizon band and the ground light that their glass sends back, not the direct light. The direct and circumsolar light on the rear plane, tilted 180° minus the tilt, reaches the cell rows the next row leaves lit, through the glass factor of Sjerps-Koomen (11, 12). A cell row's irradiance is the sum of these parts (10).

The rear irradiance is the mean of the six cell rows times one minus the structure shade factor (13). The module converts the front irradiance plus the rear irradiance times the bifaciality factor (14). The six cell rows, after the structure shade, feed the Deline 2020 rear mismatch. The front side keeps the ground-reflected light of the transposition step, and this model adds nothing to it.

The model reads these values. The slope length is the collector width of the Racking tab, and the ground cover ratio is the Racking tab's. The height above ground is the bifacial section's. The transmission factor, when the request does not give one, is 1.3 %. The tilt and the azimuth of the plane are those of each timestep, and a tracker lying flat is taken as facing south. The albedo is the bifacial albedo when it is set, otherwise the site's albedo of the month. The sun's position comes from the sun steps. A timestep is computed when its interval has a sunlit part and the sun stands above the horizon at the evaluation time. The geometry depends on the tilt only. It is computed once for a fixed row and once for each distinct tilt of a tracker.

Settings

Setting Value
Ground intervals across the row distance 100
Cell rows on the rear side 6
Width of a view sector 1°
Height above the horizontal of the sky sectors that receive the horizon band 6°
Projection above which a sector reads the mean ground 0.99 times the row distance
Refractive index of the glass nn 1.526
Transmission factor when not given 1.3 %
Perez sky 1367 W/m², Kasten 1966 air mass, seven-digit coefficients, isotropic sky above 87.5° zenith

The math

  1. The section of a row
  2. The sky each ground interval sees
  3. The parts of the diffuse light
  4. The light on each ground interval
  5. The shadow of the row on the ground
  6. The weight of a view sector
  7. The sectors of a rear cell row
  8. The ground a sector sees
  9. The light a front cell row of the next row reflects
  10. The light on a rear cell row
  11. The rear cell rows the next row shades from the sun
  12. The glass factor on the rear plane
  13. The light on the rear side
  14. The light the module converts
Lv=Lsin⁡β,Lh=Lcos⁡β,R=LGCR,c={Hfixed rowH−L2sin⁡βtracker(1)L_v = L\sin\beta,\qquad L_h = L\cos\beta,\qquad R = \frac{L}{\text{GCR}},\qquad c = \begin{cases} H & \text{fixed row} \\ H - \tfrac{L}{2}\sin\beta & \text{tracker} \end{cases} \tag{1} Fsky(x)=12∑m=13max⁡ ⁣(0, cos⁡ψm,1(x)−cos⁡ψm,2(x))(2)F_{sky}(x) = \tfrac{1}{2}\sum_{m=1}^{3}\max\!\big(0,\ \cos\psi_{m,1}(x) - \cos\psi_{m,2}(x)\big) \tag{2} Diso=D (1−F1),Dcs=D F1 cos⁡θzmax⁡(cos⁡θz, cos⁡85°),Dhb=D F2(3)D_{iso} = D\,(1 - F_1),\qquad D_{cs} = D\,F_1\,\frac{\cos\theta_z}{\max(\cos\theta_z,\ \cos 85°)},\qquad D_{hb} = D\,F_2 \tag{3} Gg(xs)=Fsky(xs) Diso+(DNIcos⁡θz+Dcs)⋅{1xs outside the shadowτxs in the shadow(4)G_g(x_s) = F_{sky}(x_s)\,D_{iso} + \big(\text{DNI}\cos\theta_z + D_{cs}\big)\cdot\begin{cases} 1 & x_s \text{ outside the shadow} \\ \tau & x_s \text{ in the shadow} \end{cases} \tag{4} ℓ(y)=ytan⁡αcos⁡(γ−γs),xsh∈[ℓ(c), Lh+ℓ(c+Lv)] mod R,all shaded when ℓ(Lv)>R−Lh or ℓ(Lv)<−(R+Lh)(5)\ell(y) = \frac{y}{\tan\alpha}\cos(\gamma - \gamma_s),\qquad x_{sh} \in \big[\ell(c),\ L_h + \ell(c + L_v)\big] \bmod R,\qquad \text{all shaded when } \ell(L_v) > R - L_h \text{ or } \ell(L_v) < -(R + L_h) \tag{5} wj=12[cos⁡j°−cos⁡(j+1)°] Mj,rj=12[cos⁡j°−cos⁡(j+1)°] (1−Mj (1−r0)),r0=(n−1n+1)2(6)w_j = \tfrac{1}{2}\big[\cos j° - \cos (j+1)°\big]\,M_j,\qquad r_j = \tfrac{1}{2}\big[\cos j° - \cos (j+1)°\big]\,\big(1 - M_j\,(1 - r_0)\big),\qquad r_0 = \Big(\frac{n - 1}{n + 1}\Big)^2 \tag{6} j1=round⁡(β−εup),j2=round⁡(β+εdn),nh=round⁡(max⁡(0, 6°−εup))(7)j_1 = \operatorname{round}(\beta - \varepsilon_{up}),\qquad j_2 = \operatorname{round}(\beta + \varepsilon_{dn}),\qquad n_h = \operatorname{round}\big(\max(0,\ 6° - \varepsilon_{up})\big) \tag{7} Gˉj=1Xj−Xj+1∫Xj+1XjGg(x) dx,Xj=xk+yktan⁡(εdn+(j−j2)°)(8)\bar G_j = \frac{1}{X_j - X_{j+1}}\int_{X_{j+1}}^{X_j} G_g(x)\,dx,\qquad X_j = x_k + \frac{y_k}{\tan\big(\varepsilon_{dn} + (j - j_2)°\big)} \tag{8} Jm=∑j<j1′rj(Diso+[ j≥j1′−nh′ ] Dhb0.052246)+∑j≥j2′rj albedo Gˉj′(9)J_m = \sum_{j < j'_1} r_j\Big(D_{iso} + [\,j \ge j'_1 - n'_h\,]\,\frac{D_{hb}}{0.052246}\Big) + \sum_{j \ge j'_2} r_j\,\text{albedo}\,\bar G'_j \tag{9} Grear,k=∑j<j1wj(Diso+[ j≥j1−nh ] Dhbkh)+∑j1≤j<j2wj Jˉj+∑j≥j2wj albedo Gˉj+(1−sk) (Gb,r+Dcs,r) K(θr)(10)G_{rear,k} = \sum_{j < j_1} w_j\Big(D_{iso} + [\,j \ge j_1 - n_h\,]\,\frac{D_{hb}}{k_h}\Big) + \sum_{j_1 \le j < j_2} w_j\,\bar J_j + \sum_{j \ge j_2} w_j\,\text{albedo}\,\bar G_j + (1 - s_k)\,\big(G_{b,r} + D_{cs,r}\big)\,K(\theta_r) \tag{10} sk=min⁡(1, max⁡(0, 6 fbk−(k−1))),fbk={ℓ(Lv)+R+Lhℓ(Lv)+Lhℓ(Lv)<−(R+Lh)0ℓ(c+Lv)<0 and ℓ(c)≥Lh+ℓ(c+Lv)1otherwise(11)s_k = \min\big(1,\ \max(0,\ 6\,f_{bk} - (k - 1))\big),\qquad f_{bk} = \begin{cases} \dfrac{\ell(L_v) + R + L_h}{\ell(L_v) + L_h} & \ell(L_v) < -(R + L_h) \\ 0 & \ell(c + L_v) < 0 \text{ and } \ell(c) \ge L_h + \ell(c + L_v) \\ 1 & \text{otherwise} \end{cases} \tag{11} K(θ)=1−12(sin⁡2(θt−θ)sin⁡2(θt+θ)+tan⁡2(θt−θ)tan⁡2(θt+θ))1−r0,sin⁡θt=sin⁡θn(12)K(\theta) = \frac{1 - \tfrac{1}{2}\Big(\dfrac{\sin^2(\theta_t - \theta)}{\sin^2(\theta_t + \theta)} + \dfrac{\tan^2(\theta_t - \theta)}{\tan^2(\theta_t + \theta)}\Big)}{1 - r_0},\qquad \sin\theta_t = \frac{\sin\theta}{n} \tag{12} Grear=(1−fstruct) 16∑k=16Grear,k(13)G_{rear} = (1 - f_{struct})\,\frac{1}{6}\sum_{k=1}^{6} G_{rear,k} \tag{13} G=Gfront+bf Grear(14)G = G_{front} + b_f\,G_{rear} \tag{14}

where

Symbol Meaning Unit
LL the slope length of a row, the collector width m
β\beta the tilt of the module plane from the horizontal at the timestep degrees
Lv, LhL_v,\ L_h the vertical height and the horizontal length of a row m
RR the row distance, from the lower edge of one row to that of the next m
GCR\text{GCR} the ground cover ratio, the collector width over the pitch —
cc the height of the lower edge above the ground m
HH the height above ground of the bifacial section: the lower edge on a fixed row, the axis on a tracker m
Fsky(x)F_{sky}(x) the sky configuration factor of the ground at xx: the share of a uniform sky it sees between the rows —
xx the position on the ground across the rows m
ψm,1, ψm,2\psi_{m,1},\ \psi_{m,2} the angles from the horizontal, at xx, to the two row edges that bound sky opening mm, the openings lying between consecutive rows from the second row behind to the row in front degrees
DD the diffuse horizontal irradiance of the weather file W/m²
F1, F2F_1,\ F_2 the Perez circumsolar and horizon coefficients of the timestep —
DisoD_{iso} the isotropic part of the diffuse light W/m²
DcsD_{cs} the circumsolar part on the horizontal W/m²
DhbD_{hb} the horizon band on a vertical plane W/m²
θz\theta_z the zenith angle of the sun, 90° minus its elevation degrees
Gg(xs)G_g(x_s) the irradiance on ground interval ss W/m²
xsx_s the centre of ground interval ss m
DNI\text{DNI} the direct normal irradiance of the weather file W/m²
τ\tau the transparent fraction of the module plane —
ℓ(y)\ell(y) the horizontal distance across the rows from a point at height yy to its shadow m
α\alpha the elevation of the sun above the horizon degrees
γ\gamma the azimuth the module plane faces degrees
γs\gamma_s the azimuth of the sun degrees
xshx_{sh} the shaded ground, from the lower edge of the row, between the two ends taken in either order m
jj the view sector of a cell row, 0 to 179, counted in degrees from the module plane on the sky side —
wjw_j the share of sector jj in the irradiance a cell row receives through its glass —
MjM_j Marion's angle factor of glass for sector jj, from 0.0576 at the module plane to 0.9881 near the perpendicular —
rjr_j the share of the light from sector jj that a front cell row's glass reflects —
r0r_0 the reflectance of the glass at normal incidence —
nn the refractive index of the glass, 1.526 —
j1, j2j_1,\ j_2 the first sector that sees the next row and the first that sees the ground —
εup, εdn\varepsilon_{up},\ \varepsilon_{dn} the angles from the horizontal, at the cell row, up to the top edge and down to the lower edge of the next row degrees
nhn_h the number of sky sectors next to the next row that receive the horizon band —
Gˉj\bar G_j the mean ground irradiance over the projection of sector jj, the ground repeating every RR, or the mean over RR when the projection is wider than 0.99 R0.99\,R W/m²
XjX_j the ground position where the lower border of sector jj meets the ground m
xk, ykx_k,\ y_k the position of cell row kk across the rows and its height, at (k−12)/6(k - \tfrac{1}{2})/6 of the row from its lower edge m
JmJ_m the light front cell row mm reflects W/m²
j1′, j2′, nh′, Gˉj′j'_1,\ j'_2,\ n'_h,\ \bar G'_j the same quantities for a front cell row, which faces the row ahead —
albedo\text{albedo} the ground albedo: the bifacial albedo when it is set, otherwise the site's albedo of the month —
Grear,kG_{rear,k} the irradiance on rear cell row kk W/m²
khk_h the normalisation of the horizon band on the rear side, 12(cos⁡84°−cos⁡90°)\tfrac{1}{2}(\cos 84° - \cos 90°) —
Jˉj\bar J_j the reflected light JmJ_m of the next row's front cell rows that sector jj overlaps, weighted by the overlap W/m²
Gb,r, Dcs,rG_{b,r},\ D_{cs,r} the direct light and the circumsolar part on the rear plane W/m²
θr\theta_r the angle of incidence of the sun on the rear plane degrees
sks_k the shaded share of rear cell row kk —
fbkf_{bk} the shaded fraction of the rear side, the first case that holds —
K(θ)K(\theta) the transmission of the glass at incidence θ\theta relative to normal incidence —
θt\theta_t the angle of refraction in the glass degrees
GrearG_{rear} the irradiance on the rear side W/m²
fstructf_{struct} the fraction of the rear side shaded by the structure —
GG the irradiance the module model converts W/m²
GfrontG_{front} the effective irradiance on the front side after the shading, soiling and glass-reflection steps W/m²
bfb_f the bifaciality factor of the module: its rear-side efficiency relative to the front —

Note

The option reproduces the function irrad::calc_rear_side of SSC, the SAM Simulation Core. PVWatts version 8 calls it with a 1 m height and a 1.3 % transmission factor. SAM's detailed photovoltaic model calls it with its own inputs, 1.7 m and 1.3 % by default. With SSC's sun and plane angles over the sun-up hours of a typical year in Phoenix, the rear irradiance agrees with SSC within 0.00001 W/m² for a tracker with and without backtracking, a fixed row and the PVWatts tracker. Through the PVWatts and SAM paths, on SSC's own runs of a PVWatts tracker in Phoenix, a PVWatts fixed rack in Des Moines and SAM's default tracker, the rear irradiance agrees within 0.001 W/m² every hour. As in SSC, the rear side is computed on every lit timestep, also when the sun stands below the apparent horizon; the sky and the ground then give diffuse light only. The reference code's details are kept. The sectors that see the next row are projected onto it in metres, while the next row's cell rows are taken as sixths of a 1 m slope, the unit of the bifacialvf code. On a row whose slope length is not 1 m, such a sector reads the cell rows at its projection's distance in metres from the lower edge, counted on a 1 m row. With a slope longer than 1 m, the sectors that see the next row beyond its first metre receive no reflected light. The horizon band is divided by 0.052246 on the front side and by 12(cos⁡84°−cos⁡90°)=0.052264\tfrac{1}{2}(\cos 84° - \cos 90°) = 0.052264 on the rear side. On a tracker the code means to reverse the order of the cell rows after solar noon. The reversal never acts, because it tests the rotation after another function has set it to 0, so the cell rows run from the lower edge of the module at every timestep. The order changes neither the mean nor the Deline 2020 mismatch. A tracker whose lower edge would go below the ground keeps the negative height.

References

  1. Marion et al. 2017, A practical irradiance model for bifacial PV modules, NREL/CP-5J00-67847
  2. NREL bifacialvf, Bifacial PV view factor model for system performance calculation, source code and documentation (github.com/NREL/bifacialvf, bifacialvf.readthedocs.io)
  3. Sjerps-Koomen, Alsema & Turkenburg 1996, A simple model for PV module reflection losses under field conditions, Solar Energy 57(6) 421–432
  4. Perez, Ineichen, Seals, Michalsky & Stewart 1990, Modeling daylight availability and irradiance components from direct and global irradiance, Solar Energy 44(5) 271–289
  5. NREL SAM Simulation Core (SSC) source code, release 2026.7.3, github.com/NatLabRockies/ssc: shared/lib_irradproc.cpp, irrad::calc_rear_side() and the functions it calls (getSkyConfigurationFactors, getGroundShadeFactors, getGroundGHI, getFrontSurfaceIrradiances, getBackSurfaceIrradiances); shared/lib_pv_incidence_modifier.h, MarionAOICorrectionFactorsGlass

API

bifacial.model = bifacialvf

Symbols follow the symbol registry.