Skip to content

District Heating Generator

Goal

Generates a possible District Heating Network layout (as a minimum spanning tree) and sizes it with a very rough estimate, based on the building heat demands and street layout.

  • This step needs a SimStadtModel as input, coming from MonthlyEnergyBalance.
  • There should be at least one building with a heating demand.
  • The output is a minimum spanning tree, connecting all the buildings with a positive heating demand to a power plant, located at the center of the model (or at the desired location if defined).
  • The tree is available as a PNG diagram and a STANET model in CSV format.
  • If desired, a basic STANET simulation can be launched with the CSV file.

Technical information

Class DistrictHeatingGenerator
Superclass WorkflowStep
Author
Maintainer
Source location simstadt-workflows-energy/src/main/java/de/hftstuttgart/simstadtworkflowsteps/energy/DistrictHeatingGenerator.java
Package de.hftstuttgart.simstadtworkflowsteps.energy
Project simstadt-workflows-energy

Dependencies

Parameters

Pipe cost: Along road (pipeCostAlongRoad)

Specific cost per distance of a pipe, when installed along a road.

If this kind of pipes is preferred, their cost should be lower compared to the others.

This value is used as an edge weight in graph algorithms

The absolute value is not relevant, only the relative value compared to pipeCostNotAlongRoad and pipeCostCrossingBuilding will have an influence on the layout.

At the time of the graph creation, the pipe diameter is not yet known, so it cannot be taken into account into the specific cost.

  • Type : Float
  • Default : 1.0

  • Unit : [1/m]

  • Getter : getPipeCostAlongRoad()
  • Setter : setPipeCostAlongRoad(Float)

Pipe cost: Not along road (pipeCostNotAlongRoad)

Specific cost per distance of a pipe, when installed away from a road.

This value is used as an edge weight in graph algorithms

The absolute value is not relevant, only the relative value compared to pipeCostAlongRoad and pipeCostCrossingBuilding will have an influence on the layout.

At the time of the graph creation, the pipe diameter is not yet known, so it cannot be taken into account into the specific cost.

  • Type : Float
  • Default : 3.0

  • Unit : [1/m]

  • Getter : getPipeCostNotAlongRoad()
  • Setter : setPipeCostNotAlongRoad(Float)

Pipe cost: Crossing building (pipeCostCrossingBuilding)

Specific cost per distance of a pipe, when installed through a building.

This kind of pipes should be avoided, so their cost should be high compared to the others.

This value is used as an edge weight in graph algorithms

The absolute value is not relevant, only the relative value compared to pipeCostAlongRoad and pipeCostNotAlongRoad will have an influence on the layout.

At the time of the graph creation, the pipe diameter is not yet known, so it cannot be taken into account into the specific cost.

  • Type : Float
  • Default : 1000.0

  • Unit : [1/m]

  • Getter : getPipeCostCrossingBuilding()
  • Setter : setPipeCostCrossingBuilding(Float)

Full load hours (fullLoadHours)

In order to design the district heating network and to calculate pipe dimensions, the nominal power of each sub-station should be known.

Monthly energy balance only outputs the average heat demand but does not calculate the required nominal power of heating systems.

In order to convert kWh/a to kW, full load hours must be known :

How many hours the heating system would have taken to cover the required heat demand had it been operating at full capacity (maximum power output) for that time?

A typical value is 2000h/a, which means the heating system would work approximately 23% of the time, and a 10kWp sub-station would be enough to cover a heat demand of 20€‰ 000kWh/a.

  • Type : Integer
  • Default : 2000

  • Unit : [h/a]

  • Getter : getFullLoadHours()
  • Setter : setFullLoadHours(Integer)

Supply pressure (supplyPressure)

Supply pressure.

This parameter is not used for district heating layout, but is forwarded as an input to STANET.

  • Type : Float
  • Default : 6.0

  • Unit : [bar]

  • Getter : getSupplyPressure()
  • Setter : setSupplyPressure(Float)

Return pressure (returnPressure)

Return pressure.

This parameter is not used for district heating layout, but is forwarded as an input to STANET.

  • Type : Float
  • Default : 2.0

  • Unit : [bar]

  • Getter : getReturnPressure()
  • Setter : setReturnPressure(Float)

Supply temperature (supplyTemperature)

Supply temperature.

This parameter is not used for district heating layout, but is forwarded as an input to STANET.

  • Type : Integer
  • Default : 90

  • Unit : [°C]

  • Getter : getSupplyTemperature()
  • Setter : setSupplyTemperature(Integer)

Return temperature (returnTemperature)

Return temperature.

This parameter is not used for district heating layout, but is forwarded as an input to STANET.

  • Type : Integer
  • Default : 55

  • Unit : [°C]

  • Getter : getReturnTemperature()
  • Setter : setReturnTemperature(Integer)

Power plant longitude (powerPlantLongitude)

If latitude and longitude are specified, the power plant (the root of the spanning tree) will be placed at the desired location.

If this parameter is left blank, the power plant will be placed in the middle of the 3D model.

East is positive, West is negative.

Example: 9.179749 (for Stuttgart)

  • Type : String
  • Default : undefined

  • Unit : [°]

  • Getter : getPowerPlantLongitude()
  • Setter : setPowerPlantLongitude(String)

Power plant latitude (powerPlantLatitude)

If latitude and longitude are specified, the power plant (the root of the spanning tree) will be placed at the desired location.

If this parameter is left blank, the power plant will be placed in the middle of the 3D model.

North is positive, South is negative.

Example: 48.7786 (for Stuttgart)

  • Type : String
  • Default : undefined

  • Unit : [°]

  • Getter : getPowerPlantLatitude()
  • Setter : setPowerPlantLatitude(String)

With STANET simulation? (withStanetSimulation)

Should STANET be automatically started at the end of the workflow?

If enabled, and if STANET is installed:

* STANET will be started

* CSV file will be imported

* resulting STANET files will be saved

* Basic simulation will be started

* Results will be displayed in the log console.
  • Type : boolean
  • Default : false
  • Getter : isWithStanetSimulation()
  • Setter : setWithStanetSimulation(boolean)

Used in