PV Partial Shading Calculator: Bypass Diodes and Optimizers

Sweep a shadow across solar cells and watch the P–V peaks change. Compare bypass diodes, global or local MPPT, and module optimizer power after conversion losses.

#Bishop 1988 #bypass diodes #MPPT #optimizers #partial shading #photovoltaics

This partial shading solar calculator shows why a small shadow can cause a large power loss, why bypass diodes create several power peaks, and when module optimizers can recover some of the lost output. It is for engineers checking a wiring concept, students studying photovoltaic mismatch, and homeowners comparing shade-management ideas before a detailed design.

Start with the number of modules in one series string and the number receiving the pictured shadow. Every affected module has the same shadow; all remaining modules receive uniform light. The default module has 72 full cells in six columns, connected as three down-and-back substrings. Each substring has one antiparallel bypass diode. Set ten rows for a 60-cell version. This wiring assumption matters: modern half-cut modules with parallel paths can respond differently.

Enter irradiance in the module plane, the diffuse fraction and cell temperature. A diffuse fraction of 0.2 means 20% of the unshaded irradiance remains available even when an opaque object blocks the direct beam. Beam transmission describes a translucent shadow. Temperature is the cell temperature, which can be much higher than the air temperature.

Press ▶ to sweep the shadow band over the cells. The leading edge is a fraction of the module dimension, not a clock time. Compare a band moving up the rows with one crossing the columns. The first can affect all three substrings together; the second can allow individual substrings to bypass in sequence. The drawing shows which diodes conduct at the selected string operating point. The P–V and I–V curves and the peak table update with the shadow.

Choose global MPPT to select the highest power peak. The local-search option selects the first peak reached from open circuit, illustrating a possible tracking trap. It does not reproduce a particular inverter’s firmware, scan timing or transient response. The optimizer comparison independently maximizes each module’s power and applies the entered conversion efficiency to every module. A negative gain means insertion loss outweighs the recovered mismatch. Break-even efficiency is the minimum efficiency needed to beat the selected string operating point.

For a geometric estimate, reuse geometric solar elevation and panel-plane irradiance from the WiredWhite Sun Position and Solar Irradiance calculator. The obstacle-height option projects a shadow onto a horizontal receiving plane; it does not solve tilted-roof or three-dimensional obstruction geometry.

“Optimierer lohnt sich” requires more than one power snapshot. Annual value depends on the shade schedule, weather, inverter operating limits, optimizer efficiency over its load range, equipment cost and lifetime. This tool estimates instantaneous DC power, not annual energy or financial payback. It excludes parallel half-cell circuits, hot-spot temperature and protection design. Installation work and electrical connections belong to a qualified person.

How it is calculated

The forward and reverse cell characteristic follows Bishop (1988), as documented by pvlib. With junction voltage Vd=V+IRsV_d=V+IR_s:

I=IL−I0[exp⁡(Vd/aT)−1]−VdRsh[1+b(1−VdVbr)−m].I=I_L-I_0\left[\exp(V_d/a_T)-1\right]-\frac{V_d}{R_{sh}}\left[1+b\left(1-\frac{V_d}{V_{br}}\right)^{-m}\right].

Here aT=nkT/qa_T=nkT/q, Vbr<0V_{br}<0, and the thin-film recombination term is omitted for crystalline silicon. The avalanche term is evaluated on the physical side Vd>VbrV_d>V_{br}.

Default cell parameters are the illustrative pvlib shading example (attached source s3, page 1): IL,ref=8.24I_{L,ref}=8.24 A, I0,ref=2.36×10−9I_{0,ref}=2.36\times10^{-9} A, n=1.3n=1.3, Rs=0.00181R_s=0.00181 Ω, Rsh,ref=1000R_{sh,ref}=1000 Ω, αsc=0.0042\alpha_{sc}=0.0042 A/K, b=0.002b=0.002, m=3m=3, Vbr=−15V_{br}=-15 V. They are not a commercial panel specification. Optional custom values are per full cell, not per module.

The De Soto temperature and irradiance translations are used: IL=(G/Gref)[IL,ref+αsc(T−Tref)]I_L=(G/G_{ref})[I_{L,ref}+\alpha_{sc}(T-T_{ref})], Rsh=Rsh,refGref/GR_{sh}=R_{sh,ref}G_{ref}/G, and RsR_s is constant. Saturation current uses I0=I0,ref(T/Tref)3exp⁡[Eg,ref/(kTref)−Eg(T)/(kT)]I_0=I_{0,ref}(T/T_{ref})^3\exp[E_{g,ref}/(kT_{ref})-E_g(T)/(kT)], with the silicon defaults 1.121 eV and relative bandgap coefficient −0.0002677 K⁻¹. Bandgap divided by elementary charge is stored in volts so the exponent is dimensionless.

The moving band’s overlap with each rectangular cell determines its blocked area fraction cc. Effective irradiance is G(c)=GPOA[1−c(1−fdiff)(1−tbeam)]G(c)=G_{POA}[1-c(1-f_{diff})(1-t_{beam})]. A partially covered cell is represented by its area-average irradiance. Diode and avalanche current terms are cached on a 1041-point junction-voltage grid, with logarithmic spacing near reverse breakdown. Inversion by linear interpolation gives each cell’s terminal voltage at a common string current. The current search combines 801 full-range samples, 200 low-current samples and every third illuminated/shaded cell junction-current knot. These knots resolve the steep voltage change near photocurrent. Samples closer than 10⁻¹⁰ of the largest sampled current are merged before assembling the string curve.

The illuminated-to-shaded cell-current difference is independent of sweep position. At each position only the two boundary-cell current arrays are formed, then reused by substring assembly and every short-circuit root trial. The full-light and full-shadow cell characteristics stay cached throughout the play. Peak lookup uses Boolean index selection to skip flat slopes without repeated filtering of the full sample grid.

Cell voltages add in each two-column substring. The constant-drop diode approximation clamps its terminal voltage to max⁡(Vsubstring,−Vf)\max(V_{substring},-V_f); three substrings add to one module, and modules add in series. Raw, unclamped trial voltages determine the diode state; they are not the actual cell voltages while the diode carries current. The model does not calculate hot-spot heating.

The short-circuit endpoint is solved with Brent’s method on the assembled cell circuit, using the two samples bracketing zero string voltage. Both charts retain every positive-voltage sample and append (0,Isc)(0,I_{sc}), so they include the complete generating branch. Global MPPT selects the largest sampled VIVI; the local option selects the highest-voltage sampled local maximum. A peak requires a positive slope followed by a negative slope; flat differences below 10⁻¹⁰ of peak power are ignored. Independently maximizing module power provides the optimizer input-power bound. Optimizer DC output is ηopt∑Pmpp,module\eta_{opt}\sum P_{mpp,module}, gain is relative to the selected string MPPT, and break-even efficiency is Pstring/∑Pmpp,moduleP_{string}/\sum P_{mpp,module}.

The Sun Position workflow supplies solar elevation and plane-of-array irradiance. For the optional horizontal-plane construction, elementary ray geometry gives Lshadow=H/tan⁡αL_{shadow}=H/\tan\alpha and normalized band width Lshadow/LaxisL_{shadow}/L_{axis}. The sweep position is independent of solar time.

Published references check the unshaded numerical solver, the rounded bottom-edge shading example and the reverse clamp. Physics properties also check bounds, local/global ordering, the independent-module upper bound, series scaling and the effect of diffuse light.

Assumptions

  • One series string. A chosen number of modules share exactly the same rectangular shadow; the others are identical and unshaded. Six columns form three full-cell, down-and-back substrings, with one diode per substring.
  • Uniform cell temperature, identical cell parameters and constant wiring resistance contained in the cell series resistance. Irradiance affects photocurrent and shunt resistance; diffuse light is not blocked.
  • The Bishop and De Soto parameters characterize illustrative crystalline silicon. They are not fitted to a named module; custom values require an appropriate cell characterization.
  • Constant bypass-diode forward voltage; reverse leakage, thermal feedback and diode failure are excluded. Avalanche current is an electrical model, not a safe operating limit.
  • Module optimizers are fitted to all modules, each reaches its own global MPP, and their constant conversion efficiency is applied to the total power. Voltage/current ratios, string voltage limits, clipping, start-up thresholds and load-dependent efficiency are excluded. This makes the result an idealized DC comparison.
  • The local MPPT result is a static example of a basin reached from open circuit. Actual inverter firmware may escape it during a scan.
  • Shadow motion is geometric. The horizontal-plane projection uses a two-dimensional ray section with the obstacle oriented across the rays. It supplies an illustrative band width; no daily or annual shadow schedule is inferred.
  • Fractions are entered as 0–1 numbers; 0.98 means 98%. Power gains are also shown as percentages.

Where it applies

Screening and teaching for full-cell crystalline-silicon modules with 48–84 series cells in the stated six-column wiring, 1–30 series modules, 100–1400 W/m² plane-of-array irradiance, diffuse fraction 0.01–1 and uniform cell temperature −10 to 80 °C. Positive diffuse light avoids extrapolating the De Soto shunt law to complete darkness. Custom parameter ranges are numerical exploration limits, not guaranteed fits for real cells.

The Sun Position geometry option is restricted to a horizontal receiving plane and solar elevation 5–85°. Keep the projected band no wider than the chosen module dimension. Use a site shade model for tilted panels, trees, multiple objects and annual energy.

MPP and peak locations are sampled; very close or narrow peaks may merge, especially with extreme custom parameters. The standard numerical benchmark agrees within 0.02 W in power and 0.03 V in sampled MPP voltage; this is numerical verification, not a field-accuracy claim. The published “roughly 80%” shading example is deliberately checked with a five percentage-point tolerance.

No prediction of hot-spot temperature, reverse-bias safety, diode rating, insulation, fire protection, equipment compatibility, AC output, annual yield or payback. Half-cut parallel substrings, shingled cells and thin-film modules require their own circuit topology and parameters. Check the module and inverter manufacturers’ requirements. Installation work belongs to a qualified person.

References

  • Bishop, J.W. (1988). Computer simulation of the effects of electrical mismatches in photovoltaic cell interconnection circuits. Solar Cells 25, 73–89. DOI: https://doi.org/10.1016/0379-6787(88)90059-2 (bibliographic link; no paywalled full text attached).
  • pvlib, Bishop 1988 equation and parameter definitions: https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.singlediode.bishop88.html
  • pvlib, Calculating power loss from partial module shading, parameters and 72-cell worked example: https://pvlib-python.readthedocs.io/en/stable/gallery/shading/plot_partial_module_shading_simple.html ; open source text attached as s3, pp. 1–3.
  • De Soto, W.; Klein, S.A.; Beckman, W.A. (2006). Improvement and validation of a model for photovoltaic array performance. DOI: https://doi.org/10.1016/j.solener.2005.06.010 ; open implementation and silicon defaults: https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.pvsystem.calcparams_desoto.html
  • pvlib published single-diode benchmark, test_batzelis, retrieved 27 October 2026: https://raw.githubusercontent.com/pvlib/pvlib-python/main/tests/test_singlediode.py ; attached as s4, p. 6.
  • Deline, C. (2011). Performance and Economic Analysis of Distributed Power Electronics in Photovoltaic Systems. NREL/TP-5200-50003. DOI: https://doi.org/10.2172/1004490 ; https://research-hub.nlr.gov/en/publications/performance-and-economic-analysis-of-distributed-power-electronic/ . Supports the need to account for mismatch recovery and insertion losses; no field gain is assumed here.
  • WiredWhite companion calculator: Sun Position and Solar Irradiance Calculator (catalog file sun-position-and-solar-irradiance.wwcalc.json). Reuse its geometric elevation and panel-plane irradiance; electrical shading is calculated here.

Inputs

InputSymbolUnitDefault
Modules in the series stringN_mod3
Modules with this shadow
All shaded modules share the pictured shadow; the other modules are fully illuminated.
N_shade1
Cell rows per column
Six columns, wired as three down-and-back substrings. 10 rows gives 60 full cells; 12 gives 72. Half-cut parallel circuits are excluded.
N_rows12
Unshaded plane-of-array irradianceG_poaW/m^21000
Diffuse fraction of irradiance
0.2 means 20%. Diffuse light reaches every cell, including cells in shadow.
f_diff0.2
Cell temperature
Uniform cell temperature, not air temperature. No hot-spot thermal prediction.
T_cell°C25
Shadow travel direction
Along rows affects all three substrings together. Across columns can bypass substrings one at a time.
axis_shadowAlong rows (all substrings)
Shadow width sourcewidth_modeFraction of module dimension
Shadow band width / module dimensionw_input0.2
Sun elevation from Sun Position
Use geometric elevation from the WiredWhite Sun Position and Solar Irradiance calculator. This geometry assumes a horizontal receiving plane.
sun_elevdeg30
Obstacle height above horizontal planeH_obstaclem0.2
Module dimension along shadow travelL_axism2
Shadow leading edge · ▶ sweep
Position / module dimension: 0 starts entry, 1 reaches the far edge, 1 + band width finishes exit. Animation shows geometric positions, not clock time.
edge0.14
Beam transmission inside shadow
0 blocks all direct beam; 1 is transparent. Diffuse light is unchanged.
t_beam0
String MPPT behaviour
Global MPPT searches all power peaks. Local MPPT selects the first peak reached from open circuit, illustrating a possible tracking trap. It does not reproduce a particular inverter's firmware.
mppt_modeGlobal MPPT (highest peak)
Optimizer conversion efficiency
0.98 means 98%, applied to every module. Ideal independent module MPPT with no voltage, current or start-up limits.
eta_opt0.98
Bypass diode forward voltageV_bypassV0.5
Use custom cell electrical parameters
Default illustrative full-cell silicon parameters come from the pvlib partial module shading example. These are not a particular commercial panel.
custom_cellfalse
Cell photocurrent at 1000 W/m², 25 °CI_L_customA8.24
Cell saturation current at 25 °CI_0_customA2.36e-9
Cell diode ideality factorn_custom1.3
Cell series resistanceR_s_customohm0.00181
Cell shunt resistance at 1000 W/m²R_sh_customohm1000
Photocurrent temperature coefficientalpha_customA/K0.0042
Bishop avalanche factorb_custom0.002
Bishop avalanche exponentm_custom3
Cell avalanche breakdown voltageV_br_customV-15

Results

With the default inputs above, the calc gives:

ResultValue
String power at selected MPPT686.8 W
Power with module optimizers765.8 W
Optimizer gain over selected MPPT78.9 W
Global string maximum power686.8 W
Local peak from open circuit254.2 W
String MPP voltage88 V
Bypass diodes on per shaded module3
Power peaks2
Optimizer gain (%)11.49
Shading loss at global MPPT (%)34.45
Selected MPPT loss relative to global maximum (%)0
Break-even optimizer efficiency (%)87.9

Checked against sources

Each case below was calculated by this calc and agrees with the value from its source (within the tolerance where one is shown).

pvlib exact single-diode benchmark — full module

Source: Independent published numerical values in pvlib tests/test_singlediode.py, test_batzelis (retrieved 27 October 2026), source s4 p. 6. Its module parameters are represented by 72 equivalent series cells: Rs=0.2/72 ohm, Rsh=3000/72 ohm, and n=1.7/(72 kT/q), with avalanche factor zero. Expected numbers are copied from the published fixture, not generated by this calculator. Tolerances allow the sampled current grid. The published fixture also supplies i_sc=9.999333377550565 A, checking the solved short-circuit endpoint.

Inputs: Use custom cell electrical parameters = yes; Modules in the series string = 1; Shadow leading edge · ▶ sweep = 0; Cell photocurrent at 1000 W/m², 25 °C = 10 A; Cell saturation current at 25 °C = 1 × 10⁻¹⁰ A; Cell series resistance = 0.002778 Ω; Cell shunt resistance at 1000 W/m² = 41.667 Ω; Cell diode ideality factor = 0.919; Photocurrent temperature coefficient = 0 A/K; Bishop avalanche factor = 0; the others as above.

ResultSourceThis calc
Global string maximum power342.2 W342.2 W
String open-circuit voltage43.056 V43.056 V
String MPP voltage35.973 V35.979 V
Current at selected string MPPT point9.513 ± 0.01 A9.512 A
String short-circuit current9.999 A9.999 A

pvlib worked example — bottom 10% shaded

Source: pvlib partial module shading worked example, s3 p. 3 and https://pvlib-python.readthedocs.io/en/stable/gallery/shading/plot_partial_module_shading_simple.html . Published wording is roughly 80% loss, not an exact table value. This calculator predicts about 76.2% loss; the five percentage-point tolerance reflects the source's rounding. No parameter is fitted to 80%. 72 cells, three 24-cell substrings, 800 W/m² beam and 200 W/m² diffuse, 25 °C.

Inputs: Modules in the series string = 1; Shadow leading edge · ▶ sweep = 0.1; Shadow band width / module dimension = 0.1; the others as above.

ResultSourceThis calc
Shaded module power loss0.8 ± 0.050.7619

pvlib worked example — three bypass diodes limit reverse voltage

Source: pvlib worked example s3 p. 3 explicitly states that three diodes at 0.5 V limit module reverse voltage to 1.5 V. The negative sign here follows the generating-terminal voltage convention. This is a reverse-clamp check, separate from the power-loss reference.

Inputs: Modules in the series string = 1; Shadow leading edge · ▶ sweep = 0.1; Shadow band width / module dimension = 0.1; the others as above.

ResultSourceThis calc
Most negative shaded-module terminal voltage on sweep-1.5 V-1.5 V

Related Resources

Responses

Your email address will not be published. Required fields are marked *

L ading...