Choosing a Converter Model¶
simses ships ten built-in AC/DC converter loss models, split into two categories. Fit families (Notton, AsymmetricNotton, Rampinelli) are generic parametric forms that require explicit coefficients; the NottonTypeN subclasses are presets of published coefficients. Product models (BonfiglioliTL4Q, BonfiglioliTL4QFieldData, SungrowSC1000TL, SinamicsS120, SinamicsS120Fit) are specific manufacturer hardware with baked-in coefficients. All implement the ConverterLossModel protocol and operate on normalised power (p.u. of the converter's rated max_power).
Comparison¶
Fit families (parametric, require coefficients)¶
| Model | Loss shape | Constructor args |
|---|---|---|
Notton |
η(p) = p / (p + P0 + K·p²), symmetric |
P0: float, K: float |
AsymmetricNotton |
Notton form with independent charge and discharge coefficients | charge: (P0, K), discharge: (P0, K) |
Rampinelli |
η(p) = p / (p + K0 + K1·p + K2·p²), symmetric |
K0: float, K1: float, K2: float |
NottonType1, NottonType2, NottonType3 |
Three published inverter presets from Notton et al. 2010 | (none — no-arg subclasses of Notton) |
Product models (specific hardware, no-arg constructors)¶
| Model | Inherits from | Data source | Direction symmetry |
|---|---|---|---|
FixedEfficiency |
— | User-supplied | Symmetric by default; asymmetric via (charge, discharge) tuple |
BonfiglioliTL4Q |
Notton |
F. Müller thesis — RPS TL-4Q datasheet | Symmetric |
BonfiglioliTL4QFieldData |
AsymmetricNotton |
F. Müller thesis — FCR field data | Asymmetric |
SungrowSC1000TL |
AsymmetricNotton |
F. Müller thesis — FCR field data | Asymmetric |
SinamicsS120 |
— | Schimpe et al. 2018 (measured) | Symmetric by default; asymmetric via use_discharging_curve=True |
SinamicsS120Fit |
— | Schimpe et al. 2018 (parametric fit) | Symmetric |
At runtime all loss models except FixedEfficiency evaluate to linear interpolation on a 201-point internal table (101 per direction, mirrored about zero) — the distinction is how those points were generated.
FixedEfficiency¶
Constant round-trip efficiency. The simplest loss model and the right default when you don't yet have a converter-specific curve or when a single number is all your study needs. Pass a scalar for a symmetric model, or a (charge, discharge) tuple when the two directions differ.
from simses.converter import Converter
from simses.model.converter.fix_efficiency import FixedEfficiency
converter = Converter(
loss_model=FixedEfficiency(0.95), # or (0.96, 0.94) for asymmetry
max_power=100_000, # 100 kW rated
storage=battery,
)
Notton¶
A generic parametric PV-inverter loss family with efficiency η(p) = p / (p + P0 + K·p²), where p is the magnitude of normalised power. Symmetric about zero. Use this when you have a Notton-form fit to measured data, or when you want a physically reasonable two-parameter baseline.
For custom asymmetric ch/dch use AsymmetricNotton. For the three published inverter presets see NottonTypeN below.
Source: Notton, G., Lazarov, V., Stoyanov, L. Optimal sizing of a grid-connected PV system for various PV module technologies and inclinations, inverter efficiency characteristics and locations, Renewable Energy 35(2) (2010) 541–554.
from simses.converter import Converter
from simses.model.converter.notton import Notton
converter = Converter(
loss_model=Notton(P0=0.0072, K=0.0345),
max_power=100_000,
storage=battery,
)
AsymmetricNotton¶
Notton-form fit with independent charge and discharge parameter sets. Each direction takes its own (P0, K) pair — useful for fitting converters whose measured efficiency curves differ between charging and discharging.
from simses.converter import Converter
from simses.model.converter.notton import AsymmetricNotton
converter = Converter(
loss_model=AsymmetricNotton(
charge=(0.0072, 0.0345),
discharge=(0.005, 0.018),
),
max_power=100_000,
storage=battery,
)
NottonTypeN¶
Three published inverter presets from Notton et al. 2010, provided as no-arg subclasses of Notton for convenience:
NottonType1—P0 = 0.0145, K = 0.0437NottonType2—P0 = 0.0072, K = 0.0345NottonType3—P0 = 0.0088, K = 0.1149
from simses.converter import Converter
from simses.model.converter.notton import NottonType2
converter = Converter(
loss_model=NottonType2(),
max_power=100_000,
storage=battery,
)
Rampinelli¶
A three-parameter generalisation of the Notton form: η(p) = p / (p + K0 + K1·p + K2·p²). The extra linear term lets the fit capture a wider range of measured efficiency curves — useful when a two-parameter Notton fit leaves a visible residual at mid-power.
Source: Rampinelli, G. A., Krenzinger, A., Chenlo Romero, F. Mathematical models for efficiency of inverters used in grid connected photovoltaic systems, Renewable and Sustainable Energy Reviews 34 (2014) 578–587.
from simses.converter import Converter
from simses.model.converter.rampinelli import Rampinelli
converter = Converter(
loss_model=Rampinelli(K0=0.003, K1=0.014, K2=0.003),
max_power=100_000,
storage=battery,
)
BonfiglioliTL4Q¶
Bonfiglioli RPS TL-4Q inverter parameterised from the manufacturer datasheet — a Notton subclass with symmetric coefficients P0 = 0.0072, K = 0.034.
See BonfiglioliTL4QFieldData for the asymmetric variant parameterised from FCR field data.
Source: F. Müller (M.Sc. thesis, TUM) — Notton fit of the Bonfiglioli RPS TL-4Q datasheet.
from simses.converter import Converter
from simses.model.converter.bonfiglioli import BonfiglioliTL4Q
converter = Converter(
loss_model=BonfiglioliTL4Q(),
max_power=100_000,
storage=battery,
)
BonfiglioliTL4QFieldData¶
Bonfiglioli RPS TL-4Q inverter parameterised from frequency containment reserve (FCR) battery-system field measurements — an AsymmetricNotton subclass with distinct charge and discharge coefficients. Reflects real deployment losses including auxiliary consumption that the datasheet curves do not capture. Charge: P0 = 0.00195, K = 0.01349. Discharge: P0 = 0.00292, K = 0.03609.
Source: F. Müller (M.Sc. thesis, TUM) — field fit on FCR BESS deployments of the Bonfiglioli RPS TL-4Q.
from simses.converter import Converter
from simses.model.converter.bonfiglioli import BonfiglioliTL4QFieldData
converter = Converter(
loss_model=BonfiglioliTL4QFieldData(),
max_power=100_000,
storage=battery,
)
SungrowSC1000TL¶
Sungrow SC1000TL inverter, an AsymmetricNotton subclass backed by field data from an FCR battery system. Charge: P0 = 0.007701864, K = 0.017290859. Discharge: P0 = 0.005511580, K = 0.018772838.
The original thesis also characterised Rampinelli and rational-form fits of the same measurements; the Notton fit was the default in the legacy simses implementation and is the one ported here.
Source: F. Müller (M.Sc. thesis, TUM) — field fit on a Sungrow SC1000TL inverter.
from simses.converter import Converter
from simses.model.converter.sungrow import SungrowSC1000TL
converter = Converter(
loss_model=SungrowSC1000TL(),
max_power=1_000_000, # 1 MW rated
storage=battery,
)
SinamicsS120¶
Lookup-table model built from measured efficiency curves for the Siemens Sinamics S120, a common utility-scale drive. The bundled CSV carries 1001 sample points, re-sampled down to 101 at construction. The measurement splits into Charging and Discharging columns that differ by a mean of 0.23 % and a maximum of 0.40 %. By default the charging curve is mirrored onto the discharge branch so the model is symmetric about zero; set use_discharging_curve=True to preserve the measured asymmetry.
Source: Schimpe, M., Naumann, M., Truong, N., Hesse, H., Englberger, S., Jossen, A. Energy efficiency evaluation of grid connection scenarios for stationary battery energy storage systems, Energy Procedia 155 (2018) 77–101.
from simses.converter import Converter
from simses.model.converter.sinamics import SinamicsS120
converter = Converter(
loss_model=SinamicsS120(), # or use_discharging_curve=True
max_power=100_000,
storage=battery,
)
SinamicsS120Fit¶
A closed-form parametric fit to the same Schimpe et al. 2018 dataset. The loss curve is a sum of three terms — a saturating exponential (captures the no-load offset), a linear term, and a quadratic — fitted by least squares. Use this when you want a smooth analytical shape (no lookup artefacts) or prefer to avoid the bundled CSV dependency. Symmetric about zero by construction.
Source: same as SinamicsS120.
from simses.converter import Converter
from simses.model.converter.sinamics import SinamicsS120Fit
converter = Converter(
loss_model=SinamicsS120Fit(),
max_power=100_000,
storage=battery,
)
Extending¶
Writing a new converter loss model means implementing ac_to_dc(power_norm) and dc_to_ac(power_norm) on normalised power. See Extending Converter Loss Models for the full walkthrough, including the reciprocity trap and the lookup-table pattern that avoids it.
See Also¶
- Converter concept — how
ConverterLossModelcomposes intoConverter, the two-pass resolution, and sign handling at the AC/DC boundary. ConverterAPI reference.- Models API reference — all ten shipped loss models.