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.
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 :
Here , , and the thin-film recombination term is omitted for crystalline silicon. The avalanche term is evaluated on the physical side .
Default cell parameters are the illustrative pvlib shading example (attached source s3, page 1): A, A, , Ω, Ω, A/K, , , 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: , , and is constant. Saturation current uses , 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 . Effective irradiance is . 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 ; 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 , so they include the complete generating branch. Global MPPT selects the largest sampled ; 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 , gain is relative to the selected string MPPT, and break-even efficiency is .
The Sun Position workflow supplies solar elevation and plane-of-array irradiance. For the optional horizontal-plane construction, elementary ray geometry gives and normalized band width . 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
| Input | Symbol | Unit | Default |
|---|---|---|---|
| Modules in the series string | N_mod | 3 | |
| Modules with this shadow All shaded modules share the pictured shadow; the other modules are fully illuminated. | N_shade | 1 | |
| 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_rows | 12 | |
| Unshaded plane-of-array irradiance | G_poa | W/m^2 | 1000 |
| Diffuse fraction of irradiance 0.2 means 20%. Diffuse light reaches every cell, including cells in shadow. | f_diff | 0.2 | |
| Cell temperature Uniform cell temperature, not air temperature. No hot-spot thermal prediction. | T_cell | °C | 25 |
| Shadow travel direction Along rows affects all three substrings together. Across columns can bypass substrings one at a time. | axis_shadow | Along rows (all substrings) | |
| Shadow width source | width_mode | Fraction of module dimension | |
| Shadow band width / module dimension | w_input | 0.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_elev | deg | 30 |
| Obstacle height above horizontal plane | H_obstacle | m | 0.2 |
| Module dimension along shadow travel | L_axis | m | 2 |
| 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. | edge | 0.14 | |
| Beam transmission inside shadow 0 blocks all direct beam; 1 is transparent. Diffuse light is unchanged. | t_beam | 0 | |
| 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_mode | Global 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_opt | 0.98 | |
| Bypass diode forward voltage | V_bypass | V | 0.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_cell | false | |
| Cell photocurrent at 1000 W/m², 25 °C | I_L_custom | A | 8.24 |
| Cell saturation current at 25 °C | I_0_custom | A | 2.36e-9 |
| Cell diode ideality factor | n_custom | 1.3 | |
| Cell series resistance | R_s_custom | ohm | 0.00181 |
| Cell shunt resistance at 1000 W/m² | R_sh_custom | ohm | 1000 |
| Photocurrent temperature coefficient | alpha_custom | A/K | 0.0042 |
| Bishop avalanche factor | b_custom | 0.002 | |
| Bishop avalanche exponent | m_custom | 3 | |
| Cell avalanche breakdown voltage | V_br_custom | V | -15 |
Results
With the default inputs above, the calc gives:
| Result | Value |
|---|---|
| String power at selected MPPT | 686.8 W |
| Power with module optimizers | 765.8 W |
| Optimizer gain over selected MPPT | 78.9 W |
| Global string maximum power | 686.8 W |
| Local peak from open circuit | 254.2 W |
| String MPP voltage | 88 V |
| Bypass diodes on per shaded module | 3 |
| Power peaks | 2 |
| 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.
| Result | Source | This calc |
|---|---|---|
| Global string maximum power | 342.2 W | 342.2 W |
| String open-circuit voltage | 43.056 V | 43.056 V |
| String MPP voltage | 35.973 V | 35.979 V |
| Current at selected string MPPT point | 9.513 ± 0.01 A | 9.512 A |
| String short-circuit current | 9.999 A | 9.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.
| Result | Source | This calc |
|---|---|---|
| Shaded module power loss | 0.8 ± 0.05 | 0.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.
| Result | Source | This calc |
|---|---|---|
| Most negative shaded-module terminal voltage on sweep | -1.5 V | -1.5 V |
Related Resources
Related articles
Related courses
IEC Electrical Schematics and Industrial Control Panels
5
Original price was: 42 €.21 €Current price is: 21 €.
Basic Electrical Controls & Diagram Reading
7
Original price was: 32 €.18 €Current price is: 18 €.
Modeling Electrical Motor Faults with FEM Simulation using ANSYS MAXWELL
3
Original price was: 50 €.15 €Current price is: 15 €.







Responses