Managing Physical Units#
In GDM, all physical quantities are wrapped in pint objects (https://pypi.org/project/Pint/).
Users import physical quantities when building new models or updating model parameters.
Units are validated for all physical quantities.
All quantities are imported from
gdm.quantities.
Creating Quantities#
from gdm.quantities import ReactivePower
power = ReactivePower(800, "kilovar")
print(power)
800 kilovar
The to method can be used for unit conversion
print(power.to("var"))
800000.0 var
The quantitiy models can be used with list and numpy arrays
powers = ReactivePower([400, 200, 100], "kilovar")
print(powers)
print(powers.to("var"))
[400 200 100] kilovar
[400000.0 200000.0 100000.0] var
Validation Limitations#
Warning
Unit validation does not occur until the quantity is added to a data model. In the example below, the rated_voltage object is built with incorrect units. It is only validated when we instantiate the DistributionBus component.
from gdm.distribution.enums import LimitType, Phase, VoltageTypes
from gdm.distribution.components import DistributionSubstation
from gdm.distribution.common.limitset import VoltageLimitSet
from gdm.distribution.components import DistributionFeeder
from gdm.distribution.components import DistributionBus
from gdm.quantities import Voltage
from infrasys import Location
rated_voltage = Voltage(400, "ampere")
try:
bus = DistributionBus(
voltage_type=VoltageTypes.LINE_TO_LINE,
phases=[Phase.A, Phase.B, Phase.C],
rated_voltage=rated_voltage,
name="DistBus1",
substation=DistributionSubstation.example(),
feeder=DistributionFeeder.example(),
voltagelimits=[
VoltageLimitSet(limit_type=LimitType.MIN, value=Voltage(400 * 0.9, "volt")),
VoltageLimitSet(limit_type=LimitType.MAX, value=Voltage(400 * 1.1, "volt")),
],
coordinate=Location(x=20.0, y=30.0),
)
except Exception as e:
print(e)
1 validation error for DistributionBus
rated_voltage
Assertion failed, Unit must be compatible with volt [type=assertion_error, input_value=<Quantity(400, 'ampere')>, input_type=Voltage]
For further information visit https://errors.pydantic.dev/2.12/v/assertion_error