pvperfsolar performance modeling

Reference

API field

Battery storage

A battery charged from the system and discharged to the grid connection; empty = no battery

What it is

A battery added to the system, described by its power rating, its energy capacity, where it connects (the coupling) and the rule that decides when it charges and discharges (the dispatch). The solar results are computed first and do not change: the battery result is a separate storage block in the response and a separate group of rows below the energy injected into the grid.

Typical values and how to get it

Right-size rule: a first battery for a system has a power of 0.5 times the system AC nameplate, rounded to two significant figures with halves rounded up (1,250 kW gives 1,300 kW), a capacity of 4 hours at that power, and an interconnect target of 0.8 times the system AC nameplate, not rounded. The system AC nameplate is the number of inverters (array.n_inverters) times the inverter's nominal AC power (inverter.p_nom_ac_w), in kW, without the power factor; the run reports it as summary.p_nom_ac_kw. A 4,009 kW system gets 2,000 kW, 8,000 kWh and a 3,207.2 kW target. A system without an AC nameplate gets fixed values: 1,000 kW, 4,000 kWh and an 800 kW target. The rule sets these three values only; the round-trip and AC conversion efficiencies stay as entered (Round-trip efficiency page). It is the same for both couplings and every dispatch. With DC coupling the power is read as DC power at the inverter input and the target caps only the discharge (Interconnect target page). The rule does not look at the surplus: the daily full cycle and timed discharge fill about one capacity a day, while under clip capture a capacity above the largest daily total of the surplus, times the charge efficiency, is never filled (Energy diverted to storage page). The 4-hour duration follows the utility-scale PV-plus-battery reference systems of the NREL Annual Technology Baseline; the half-power ratio is a starting value. Replace the values with the project's once the battery is specified.

References

  1. NREL, Annual Technology Baseline, Utility-Scale PV-Plus-Battery (atb.nrel.gov/electricity, the utility-scale PV-plus-battery technology page)
  2. DiOrio, Dobos & Janzou 2015, "Technoeconomic Modeling of Battery Energy Storage in SAM", NREL/TP-6A20-64641
  3. Denholm, Eichman & Margolis 2017, "Evaluating the Technical and Economic Performance of PV Plus Storage Power Plants", NREL/TP-6A20-68737
  4. DiOrio, Denholm & Hobbs 2020, "A model for evaluating the configuration and dispatch of PV plus battery power plants", Applied Energy 262 114465

API

storage

The storage block of the response gives the annual balances in kWh. An energy named below with a series is the sum of that hourly series (with include_series); e_loss_conversion_kwh, delta_soc_kwh and e_above_target_kwh have none. e_solar_kwh is the grid injection before the battery (the sum of the run's series p_grid_w) and e_poi_kwh the grid injection with it (series storage.p_poi_w). e_charge_kwh (series storage.p_charge_ac_w) is the grid injection given up to charge: with AC coupling the AC energy diverted, metered before the charge loss; with DC coupling the injection lost because the battery took DC power the inverter could have converted. Energy stored from above the AC ceiling costs nothing at the grid connection. Where the input-current limit binds, taking the surplus lowers the bus voltage and with it the inverter's input, which gives up some injection in that hour. e_discharge_kwh (series storage.p_discharge_ac_w) is the grid injection the battery adds: with AC coupling the energy delivered, after the discharge loss; with DC coupling the extra injection after the inverter and the AC losses. e_loss_conversion_kwh is the conversion loss of the battery system: with AC coupling the charge and discharge halves of the round trip and the battery inverter's conversion on discharge; with DC coupling the two halves on the DC side, while the PV inverter's and the AC losses on the battery's energy are inside e_poi_kwh. delta_soc_kwh is the stored energy at the end less at the start (soc_end_kwh less soc_start_kwh), and e_curtailed_after_storage_kwh (series storage.p_curtailed_w) the energy cut at the grid power limitation. e_above_target_kwh is the grid injection after the battery above the interconnect target, summed over every timestep. With AC coupling it counts the injection the battery left, whatever the reason (full, at its charge power, not charging in that hour); with DC coupling, where the battery never charges against the target, it is a plain tally at the grid connection; with AC-coupled timed discharge and no target it is 0. equivalent_full_cycles is the energy drawn from the cells divided by the usable capacity, mean_soc_fraction the mean state of charge as a fraction of the capacity, and soc_profile_pct the mean state of charge at the end of each hour, by hour of the day, in % of the capacity (series storage.soc_kwh, in kWh at the end of each timestep). monthly holds twelve rows (month, e_solar_kwh, e_charge_kwh, e_discharge_kwh, e_poi_kwh, and with DC coupling e_charge_dc_kwh and e_discharge_dc_kwh). The curtailment, the conversion loss and the change in stored energy are annual only, so a month's POI balance closes when nothing is curtailed; the series storage.p_curtailed_w gives the curtailment by hour.

usable_kwh is the capacity between the floor and the ceiling of the state-of-charge window, eta_charge and eta_discharge the charge and discharge efficiencies (Round-trip efficiency page), and soc_start_kwh the stored energy before the first timestep. The block repeats the inputs as used: coupling, dispatch, power_kw, capacity_kwh, round_trip_efficiency, interconnect_limit_kw (with DC coupling an empty target resolved to the system AC nameplate) and ac_conversion_efficiency (with AC coupling an empty value resolved to the PV inverter's peak; null with DC coupling).

DC coupling adds the battery's own DC figures: e_charge_dc_kwh (series storage.p_charge_dc_w), the DC energy into the battery before the charge loss; e_clip_captured_dc_kwh (series storage.p_clip_captured_dc_w), the part of it taken from the array power the inverter cannot take, above its AC ceiling or its input-current limit; e_inverter_input_given_up_dc_kwh (series storage.p_inverter_input_given_up_dc_w), the part of the captured energy that is inverter input given up at the lower bus voltage where the current limit binds, so captured less given up is the extra array energy the battery harvests; e_discharge_dc_kwh (series storage.p_discharge_dc_w), the DC energy delivered to the inverter input after the discharge loss. The captured energy can fall well short of the inverter's clipping rows. With the Model tab's MPPT minimum loss row step at its default, Inverter Loss over nominal inv. power can also hold the loss of running at the MPPT MPPT minimum while the output stays below the ceiling, and the battery cannot take that energy: only the array power above the inverter's capability at the bus voltage is captured.

For both couplings e_solar_kwh − e_charge_kwh + e_discharge_kwh − e_curtailed_after_storage_kwh = e_poi_kwh. The conversion loss closes with AC coupling as e_charge_kwh − e_discharge_kwh − delta_soc_kwh = e_loss_conversion_kwh, and with DC coupling on the DC figures, e_charge_dc_kwh − e_discharge_dc_kwh − delta_soc_kwh = e_loss_conversion_kwh. No fixed factor links a DC-coupled e_charge_kwh and e_discharge_kwh to the DC figures. The injection given up comes from the DC power diverted below the capability (e_charge_dc_kwh − e_clip_captured_dc_kwh) plus the input given up, and the injection added from e_discharge_dc_kwh, each through the inverter efficiency at that hour's input and voltage and through the AC losses; the hourly series give the ratio hour by hour.