Skip to main content

A python package containing infrastructure to develop a dots calculation service

Project description

dots-infrastructure

This package provides the infrastructure to develop dots calculation services an example of how a calculation function can be developed can be found in the Dots calculation service template. This package implements helics as a co-simulation engine.

Contents

  • Federate structure
  • Publication/subscription
  • Threading

Federate structure

When defining a calculation service you have to create a python class that inherits from HelicsSimulationExecutor. This class will have the necesairy functions to define a calculation service. To add new calculations to a calculation service use the add_calculation of the HelicsSimulationExecutor class. This will instantiate a new instance of the HelicsFederateExecutor class which is responsible for the life cycle of a helics federate. To clarify please refer to the class diagram below:

dots component diagram

Once all calculations are defined, initiate the newly created subtype of HelicsSimulationExecutor and call upon the start_simulation function. This will start up the helics federates that will be part of the co-simulations federation. Each calculation within a calculation service will be handled by a seperate helics federate.

Publication/subscription

One of the major features of this package is managing the publications and subscriptions of a calculation service. Publications and subscriptions types are defined by the calculation service itself and are coupled to the simulation's esdl file. What is important to consider here is that a calculation service simulates multiple instances of the same esdl type. Hence, calculation services are defined as a simulator for a specific esdl type. The simulation's esdl file determines which publication the calculation service will subscribe to.

Consider an esdl file that has a house that is connected to two pv panels and a seperate pv panel that is not connected to anything. See the below description of the topology:

pv panel (id:1) -- House (id: 1) -- pv panel (id: 2)

pv panel (id: 3)

Now take the calculation service that is developed for the house. This service might want the output of the pv panel calculation services connected to it. As long as the house service specifies that it needs input from the pv panels the package will make sure the house service subscribes to the output of pv panels with id 1 and id 2. The subscription key will look like: PVPanel/{Outputname}/{PVPanelId}. When all the inputs for a calculation service have been received the calculation service' calculation function will be called with the new input values in the form of a dictionary.

The house calculation service might also want to output values to different calulation services. As long as the house calculation service specifies that the service outputs specific values the publications will be registered within the helics federation and other calculation services might subscribe to it. The publication key will be similar to the example of the subscription key.

Finally, as mentioned earlier a calculation service might simulate multiple instances of the same esdl type. So lets consider a calculation service for the pv panels in the above example. The associated calculation functions will be called three times in a single time step by this infrastructure package because there are three pv panels. Each call to the calculation functions has different parameters that are unique to the single instance of a pv panel.

Threading

When defining calculations for a calculation service it is important to know how threading is taken care of in this package. Each calculation might have a specific helics execution period (or frequency) and corresponding offset. Therefore, in order for helics to properly scedule the different calculations of a calculation service each calculation is handled by a seperate helics federate that is running on a sperate thread.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dots_infrastructure-1.0.5.tar.gz (120.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dots_infrastructure-1.0.5-py3-none-any.whl (25.3 kB view details)

Uploaded Python 3

File details

Details for the file dots_infrastructure-1.0.5.tar.gz.

File metadata

  • Download URL: dots_infrastructure-1.0.5.tar.gz
  • Upload date:
  • Size: 120.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for dots_infrastructure-1.0.5.tar.gz
Algorithm Hash digest
SHA256 b55fd4781b48fe01d7b63a142ebd3382a098ef35e6b04ef79141087460ac7ff2
MD5 a30858f0a34a1626074925495e6b688c
BLAKE2b-256 844c7c1a32d5177928c2b17b177d2dd56a13522cfb2205b79e6953bf309b6364

See more details on using hashes here.

Provenance

The following attestation bundles were made for dots_infrastructure-1.0.5.tar.gz:

Publisher: pypi-publish.yml on dots-energy/dots-infrastructure

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dots_infrastructure-1.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for dots_infrastructure-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ca4d8830d6c65496f64cc95841703af83c840738b9fc288173de99a45b288ad9
MD5 4a0e1db8115603fb665cb93c6a51ab28
BLAKE2b-256 fc409167a376e22be853c5e978fdce3c2ce2c4b85cc6c05432a181187fa099e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for dots_infrastructure-1.0.5-py3-none-any.whl:

Publisher: pypi-publish.yml on dots-energy/dots-infrastructure

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page