Distribution Solar#

pydantic model gdm.distribution.components.DistributionSolar#

Data model for Solar PV system in distribution system models.

Show JSON schema
{
   "title": "DistributionSolar",
   "description": "Data model for Solar PV system in distribution system models.",
   "type": "object",
   "properties": {
      "uuid": {
         "format": "uuid",
         "title": "Uuid",
         "type": "string"
      },
      "name": {
         "title": "Name",
         "type": "string"
      },
      "substation": {
         "anyOf": [
            {
               "$ref": "#/$defs/DistributionSubstation"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "Name of the substation."
      },
      "feeder": {
         "anyOf": [
            {
               "$ref": "#/$defs/DistributionFeeder"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "Name of the feeder."
      },
      "in_service": {
         "default": true,
         "description": "Is the component in service?",
         "title": "In Service",
         "type": "boolean"
      },
      "bus": {
         "$ref": "#/$defs/DistributionBus",
         "description": "Distribution bus to which this solar array is connected to."
      },
      "phases": {
         "description": "List of phases at which this solar array is connected to in the same order.",
         "items": {
            "$ref": "#/$defs/Phase"
         },
         "title": "Phases",
         "type": "array"
      },
      "irradiance": {
         "description": "Irradiance incident on the PV array.",
         "ge": 0,
         "title": "Irradiance"
      },
      "active_power": {
         "description": "Active power output of the inverter.",
         "ge": 0,
         "title": "Active Power"
      },
      "reactive_power": {
         "description": "Reactive power output of the inverter.",
         "title": "Reactive Power"
      },
      "controller": {
         "anyOf": [
            {
               "$ref": "#/$defs/InverterController"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "description": "Controller settings to control output of the inverter"
      },
      "inverter": {
         "$ref": "#/$defs/InverterEquipment",
         "description": "Inverter equipment for the Distribution Solar PV system."
      },
      "equipment": {
         "$ref": "#/$defs/SolarEquipment",
         "description": "Solar PV model."
      }
   },
   "$defs": {
      "ActivePowerInverterControllerBase": {
         "additionalProperties": false,
         "description": "Data model for Inverter controllers that control active power.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "default": "",
               "description": "Name of the inverter controller.",
               "title": "Name",
               "type": "string"
            }
         },
         "title": "ActivePowerInverterControllerBase",
         "type": "object"
      },
      "Curve": {
         "additionalProperties": false,
         "description": "An interface for representing a curve using x and y points. e.g for volt-var and volt-watt curves.\n\nExamples\n--------\n\nExample of a Curve (Volt-Var IEEE-1547 standard).\n\n>>> Curve(\n        curve_x=[0.5, 0.92, 0.98, 1.02, 1.08, 1.5], curve_y=[1.0, 1.0, 0.0, 0.0, -1.0, -1.0]\n    )\n\nExample of a Curve (Volt-Var Volt-Watt IEEE-1547 standard)\n\n>>> Curve(curve_x=[0.5, 1.06, 1.1, 1.5], curve_y=[1.0, 1.0, 0.0, 0.0])",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "default": "",
               "description": "Name of the curve.",
               "title": "Name",
               "type": "string"
            },
            "curve_x": {
               "anyOf": [
                  {
                     "items": {
                        "type": "number"
                     },
                     "type": "array"
                  },
                  {}
               ],
               "description": "The x values of the curve",
               "title": "Curve X"
            },
            "curve_y": {
               "anyOf": [
                  {
                     "items": {
                        "type": "number"
                     },
                     "type": "array"
                  },
                  {}
               ],
               "description": "The y values of the curve",
               "title": "Curve Y"
            }
         },
         "required": [
            "curve_x",
            "curve_y"
         ],
         "title": "Curve",
         "type": "object"
      },
      "DistributionBus": {
         "additionalProperties": false,
         "description": "Data model for distribution bus.\n\nExamples:\n    >>> from gdm import DistributionBus\n    >>> DistributionBus.example()",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "title": "Name",
               "type": "string"
            },
            "substation": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/DistributionSubstation"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Name of the substation."
            },
            "feeder": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/DistributionFeeder"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Name of the feeder."
            },
            "in_service": {
               "default": true,
               "description": "Is the component in service?",
               "title": "In Service",
               "type": "boolean"
            },
            "voltage_type": {
               "$ref": "#/$defs/VoltageTypes",
               "description": "Voltage types for buses."
            },
            "phases": {
               "description": "List of phases for this bus.",
               "items": {
                  "$ref": "#/$defs/Phase"
               },
               "title": "Phases",
               "type": "array"
            },
            "voltagelimits": {
               "default": [],
               "description": "List of voltage limit sets for this bus.",
               "items": {
                  "$ref": "#/$defs/VoltageLimitSet"
               },
               "title": "Voltagelimits",
               "type": "array"
            },
            "rated_voltage": {
               "default": null,
               "description": "rated voltage for this bus.",
               "title": "Rated Voltage",
               "type": "string"
            },
            "coordinate": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/Location"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Coordinate for the power system bus."
            }
         },
         "required": [
            "name",
            "voltage_type",
            "phases",
            "rated_voltage"
         ],
         "title": "DistributionBus",
         "type": "object"
      },
      "DistributionFeeder": {
         "additionalProperties": false,
         "description": "Class interface for distribution feeder.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "title": "Name",
               "type": "string"
            }
         },
         "required": [
            "name"
         ],
         "title": "DistributionFeeder",
         "type": "object"
      },
      "DistributionSubstation": {
         "additionalProperties": false,
         "description": "Class interface for distribution feeder.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "title": "Name",
               "type": "string"
            },
            "feeders": {
               "description": "List of feeders for this substation.",
               "items": {
                  "$ref": "#/$defs/DistributionFeeder"
               },
               "title": "Feeders",
               "type": "array"
            }
         },
         "required": [
            "name",
            "feeders"
         ],
         "title": "DistributionSubstation",
         "type": "object"
      },
      "InverterController": {
         "additionalProperties": false,
         "description": "Inverter contoller represent the complete control settings for a given\nInverterEquipment. This model may be used with an instance of DistributionSolar,\nDistributionBattery or any other model that has an inverter.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "default": "",
               "description": "Name of the inverter controller.",
               "title": "Name",
               "type": "string"
            },
            "active_power_control": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/ActivePowerInverterControllerBase"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Controller settings to control active power output of the inverter"
            },
            "reactive_power_control": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/ReactivePowerInverterControllerBase"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Controller settings to control reactive power output of the inverter"
            },
            "prioritize_active_power": {
               "description": "If True, the controller tries to prioritize active power.",
               "title": "Prioritize Active Power",
               "type": "boolean"
            },
            "night_mode": {
               "description": "If True, the controller controls reactive power even when there is no active power.",
               "title": "Night Mode",
               "type": "boolean"
            }
         },
         "required": [
            "prioritize_active_power",
            "night_mode"
         ],
         "title": "InverterController",
         "type": "object"
      },
      "InverterEquipment": {
         "additionalProperties": false,
         "description": "Data model for inverter equipment.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "default": "",
               "description": "Name of the inverter controller.",
               "title": "Name",
               "type": "string"
            },
            "rated_apparent_power": {
               "default": null,
               "description": "Apparent power rating for the inverter.",
               "title": "Rated Apparent Power",
               "type": "string"
            },
            "rise_limit": {
               "default": null,
               "description": "The rise in power output allowed per unit of time",
               "title": "Rise Limit",
               "type": "string"
            },
            "fall_limit": {
               "default": null,
               "description": "The fall in power output allowed per unit of time",
               "title": "Fall Limit",
               "type": "string"
            },
            "cutout_percent": {
               "description": "If the per-unit power drops below this value the PV output is turned off.",
               "maximum": 100.0,
               "minimum": 0.0,
               "title": "Cutout Percent",
               "type": "number"
            },
            "cutin_percent": {
               "description": "If the per-unit power rises above this value the PV output is turned on.",
               "maximum": 100.0,
               "minimum": 0.0,
               "title": "Cutin Percent",
               "type": "number"
            },
            "dc_to_ac_efficiency": {
               "description": "DC to AC efficiency of the inverter.",
               "maximum": 100.0,
               "minimum": 0.0,
               "title": "Dc To Ac Efficiency",
               "type": "number"
            },
            "eff_curve": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/Curve"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "Efficency curve for inverter."
            }
         },
         "required": [
            "rated_apparent_power",
            "rise_limit",
            "fall_limit",
            "cutout_percent",
            "cutin_percent",
            "dc_to_ac_efficiency"
         ],
         "title": "InverterEquipment",
         "type": "object"
      },
      "LimitType": {
         "description": "Operational limit types.",
         "enum": [
            "min",
            "max"
         ],
         "title": "LimitType",
         "type": "string"
      },
      "Location": {
         "additionalProperties": false,
         "description": "Specifies geographic location.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "default": "",
               "title": "Name",
               "type": "string"
            },
            "x": {
               "title": "X",
               "type": "number"
            },
            "y": {
               "title": "Y",
               "type": "number"
            },
            "crs": {
               "anyOf": [
                  {
                     "type": "string"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "title": "Crs"
            }
         },
         "required": [
            "x",
            "y"
         ],
         "title": "Location",
         "type": "object"
      },
      "Phase": {
         "description": "This class is used to represent a single phase from a set of possible values.",
         "enum": [
            "A",
            "B",
            "C",
            "N",
            "S1",
            "S2"
         ],
         "title": "Phase",
         "type": "string"
      },
      "ReactivePowerInverterControllerBase": {
         "additionalProperties": false,
         "description": "Data model for Inverter controllers that control reactive power.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "default": "",
               "description": "Name of the inverter controller.",
               "title": "Name",
               "type": "string"
            }
         },
         "title": "ReactivePowerInverterControllerBase",
         "type": "object"
      },
      "SolarEquipment": {
         "additionalProperties": false,
         "description": "Data model for Solar Model.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "title": "Name",
               "type": "string"
            },
            "rated_power": {
               "default": null,
               "description": "Maximum power of the PV array for 1.0 kW/m^2 irradiance.",
               "title": "Rated Power",
               "type": "string"
            },
            "power_temp_curve": {
               "anyOf": [
                  {
                     "$ref": "#/$defs/Curve"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "description": "The power temperature curve for the PV array."
            },
            "resistance": {
               "description": "Percentage internal resistance for the PV array.",
               "maximum": 100.0,
               "minimum": 0.0,
               "title": "Resistance",
               "type": "number"
            },
            "reactance": {
               "description": "Percentage internal reactance for the PV array.",
               "maximum": 100.0,
               "minimum": 0.0,
               "title": "Reactance",
               "type": "number"
            },
            "rated_voltage": {
               "description": "Rated voltage for this solar equipment.",
               "gt": 0,
               "title": "Rated Voltage"
            },
            "voltage_type": {
               "$ref": "#/$defs/VoltageTypes",
               "description": "Rated voltage is line to line or line to neutral."
            }
         },
         "required": [
            "name",
            "rated_power",
            "resistance",
            "reactance",
            "rated_voltage",
            "voltage_type"
         ],
         "title": "SolarEquipment",
         "type": "object"
      },
      "VoltageLimitSet": {
         "additionalProperties": false,
         "description": "Data model for voltage limit set.",
         "properties": {
            "uuid": {
               "format": "uuid",
               "title": "Uuid",
               "type": "string"
            },
            "name": {
               "default": "",
               "description": "Name of the voltage limit set.",
               "title": "Name",
               "type": "string"
            },
            "limit_type": {
               "$ref": "#/$defs/LimitType",
               "description": "Limit type used."
            },
            "value": {
               "default": null,
               "description": "Voltage threshold.",
               "title": "Value",
               "type": "string"
            }
         },
         "required": [
            "limit_type",
            "value"
         ],
         "title": "VoltageLimitSet",
         "type": "object"
      },
      "VoltageTypes": {
         "description": "Identifier of voltage types referenced in distribution models.",
         "enum": [
            "line-to-line",
            "line-to-ground"
         ],
         "title": "VoltageTypes",
         "type": "string"
      }
   },
   "additionalProperties": false,
   "required": [
      "name",
      "bus",
      "phases",
      "irradiance",
      "active_power",
      "reactive_power",
      "inverter",
      "equipment"
   ]
}

Config:
  • str_strip_whitespace: bool = True

  • validate_assignment: bool = True

  • validate_default: bool = True

  • extra: str = forbid

  • use_enum_values: bool = False

  • arbitrary_types_allowed: bool = True

  • populate_by_name: bool = True

Fields:
  • active_power (infrasys.quantities.ActivePower)

  • bus (gdm.distribution.components.distribution_bus.DistributionBus)

  • controller (gdm.distribution.controllers.distribution_inverter_controller.InverterController | None)

  • equipment (gdm.distribution.equipment.solar_equipment.SolarEquipment)

  • feeder (gdm.distribution.components.distribution_feeder.DistributionFeeder | None)

  • in_service (bool)

  • inverter (gdm.distribution.equipment.inverter_equipment.InverterEquipment)

  • irradiance (gdm.quantities.Irradiance)

  • name (str)

  • phases (list[gdm.distribution.enums.Phase])

  • reactive_power (gdm.quantities.ReactivePower)

  • substation (gdm.distribution.components.distribution_substation.DistributionSubstation | None)

  • uuid (uuid.UUID)

Validators:
  • validate_controller_types » all fields

field active_power: Annotated[ActivePower, FieldInfo(annotation=NoneType, required=True, description='Active power output of the inverter.', metadata=[Ge(ge=0)])] [Required]#

Active power output of the inverter.

Constraints:
  • ge = 0

Validated by:
  • validate_controller_types

field bus: Annotated[DistributionBus, FieldInfo(annotation=NoneType, required=True, description='Distribution bus to which this solar array is connected to.')] [Required]#

Distribution bus to which this solar array is connected to.

Validated by:
  • validate_controller_types

field controller: Annotated[InverterController | None, FieldInfo(annotation=NoneType, required=False, default=None, description='Controller settings to control output of the inverter')] = None#

Controller settings to control output of the inverter

Validated by:
  • validate_controller_types

field equipment: Annotated[SolarEquipment, FieldInfo(annotation=NoneType, required=True, description='Solar PV model.')] [Required]#

Solar PV model.

Validated by:
  • validate_controller_types

field feeder: Annotated[DistributionFeeder | None, Field(None, description='Name of the feeder.')] = None#

Name of the feeder.

Validated by:
  • validate_controller_types

field in_service: Annotated[bool, Field(True, description='Is the component in service?')] = True#

Is the component in service?

Validated by:
  • validate_controller_types

field inverter: Annotated[InverterEquipment, FieldInfo(annotation=NoneType, required=True, description='Inverter equipment for the Distribution Solar PV system.')] [Required]#

Inverter equipment for the Distribution Solar PV system.

Validated by:
  • validate_controller_types

field irradiance: Annotated[Irradiance, FieldInfo(annotation=NoneType, required=True, description='Irradiance incident on the PV array.', metadata=[Ge(ge=0)])] [Required]#

Irradiance incident on the PV array.

Constraints:
  • ge = 0

Validated by:
  • validate_controller_types

field phases: Annotated[list[Phase], FieldInfo(annotation=NoneType, required=True, description='List of phases at which this solar array is connected to in the same order.')] [Required]#

List of phases at which this solar array is connected to in the same order.

Validated by:
  • validate_controller_types

field reactive_power: Annotated[ReactivePower, FieldInfo(annotation=NoneType, required=True, description='Reactive power output of the inverter.')] [Required]#

Reactive power output of the inverter.

Validated by:
  • validate_controller_types

field substation: Annotated[DistributionSubstation | None, Field(None, description='Name of the substation.')] = None#

Name of the substation.

Validated by:
  • validate_controller_types

classmethod aggregate(instances: list[DistributionSolar], bus: DistributionBus, name: str, split_phase_mapping: dict[str, set[Phase]]) DistributionSolar#
validator validate_controller_types  »  all fields#