Skip to content

Photovoltaic Potential

Goal

  • Calculates the technical potential for photovoltaics on buildings.
    • Roofs and facades can be considered.
    • A simple financial analysis is performed for each suitable surface.
  • It returns:
    • the potential nominal power in kWp
    • the potential yield in MWh/a
    • the number of suitable surfaces
    • a CSV file with detailed information about every potential installation
    • if desired, the total hourly output of those installations.
  • The analysis should be done with LOD2 buildings.
  • Takes geometry (orientation, area) and irradiance into account.
  • Shadowing can be taken into account (see IrradianceProcessor). WARNING: This simulation is only a rough estimate. It might return correct orders of magnitude, provided the 3D-model, weather, irradiance and input parameters are correct.

Technical information

Class PhotovoltaicPotential
Superclass WorkflowStepWithSimStadtGraphics
Author
Maintainer
Source location simstadt/src/main/java/eu/simstadt/workflowsteps/PhotovoltaicPotential.java
Package eu.simstadt.workflowsteps
Project simstadt

Dependencies

Parameters

LOD1? (includeLOD1)

Should LOD1 buildings be considered too?

Detailed roof geometry should be known for any meaningful photovoltaic potential analysis.

It is strongly recommended to only consider LOD2 buildings, so this option is disabled by default.

  • Type : boolean
  • Default : false
  • Getter : isIncludeLOD1()
  • Setter : setIncludeLOD1(boolean)

Facades? (includeFacades)

Should facades be considered?

Shadowing calculations should have been activated in IrradianceProcessor (e.g. with SRA).

Given that no detailed information is known about the facade structure, results should only be used as very rough estimates.

  • Type : boolean
  • Default : false
  • Getter : isIncludeFacades()
  • Setter : setIncludeFacades(boolean)

Tilted roofs? (includeTiltedRoofs)

Should tilted roofs be considered?

Photovoltaic modules are installed differently on tilted and flat roofs, it might make sense to analyze them separately.

  • Type : boolean
  • Default : true
  • Getter : isIncludeTiltedRoofs()
  • Setter : setIncludeTiltedRoofs(boolean)

Flat roofs? (includeFlatRoofs)

Should LOD2 flat roofs be considered?

Photovoltaic modules are installed differently on flat and tilted roofs, it might make sense to analyze them separately.

Note that LOD1 roofs are considered separately, since they all look flat anyway.

  • Type : boolean
  • Default : true
  • Getter : isIncludeFlatRoofs()
  • Setter : setIncludeFlatRoofs(boolean)

Minimum surface area (minimumSurfaceArea)

Required surface area, under which surfaces are not considered.

Set to 0 in order to consider every surface.

  • Type : int
  • Default : 40

  • Unit : [m²]

  • Getter : getMinimumSurfaceArea()
  • Setter : setMinimumSurfaceArea(int)

Minimum roof insolation (minimumRoofInsolation)

Required global insolation (in the plane of array), under which roof surfaces are not considered.

Set to 0 in order to consider every roof surface.

Shadows might be considered, depending on IrradianceProcessor.

  • Type : int
  • Default : 1100

  • Unit : [kWh/(m²·a)]

  • Getter : getMinimumRoofInsolation()
  • Setter : setMinimumRoofInsolation(int)

Minimum facade insolation (minimumFacadeInsolation)

Required global insolation (in the plane of array), under which facade surfaces are not considered.

Should probably be smaller than minimumRoofInsolation.

Set to 0 in order to consider every facade.

Shadows might be considered (and should), depending on IrradianceProcessor.

  • Type : int
  • Default : 800

  • Unit : [kWh/(m²·a)]

  • Getter : getMinimumFacadeInsolation()
  • Setter : setMinimumFacadeInsolation(int)

Module / flat roof area (moduleAreaToFlatRoofArea)

Ratio between installed module area and flat roof area.

By default, 30m² worth of modules will be installed on a 100m² flat roof.

It is smaller than the default for moduleAreaToTiltedRoofArea because spacing between rows is needed in order to avoid self-shading.

This parameter can be overwritten with a generic BoundarySurface attribute in CityGML file:

<gen:doubleAttribute name="moduleAreaToRoofArea"><gen:value>0.6789</gen:value></gen:doubleAttribute>
  • Type : int
  • Default : 30

  • Unit : [%]

  • Getter : getModuleAreaToFlatRoofArea()
  • Setter : setModuleAreaToFlatRoofArea(int)

Module / tilted roof area (moduleAreaToTiltedRoofArea)

Ratio between installed module area and tilted roof area.

By default, 40m² worth of modules will be installed on a 100m² tilted roof.

It is larger than the default for moduleAreaToFlatRoofArea because no spacing is required between modules.

This parameter can be overwritten with a generic BoundarySurface attribute in CityGML file:

<gen:doubleAttribute name="moduleAreaToRoofArea"><gen:value>0.6789</gen:value></gen:doubleAttribute>
  • Type : int
  • Default : 40

  • Unit : [%]

  • Getter : getModuleAreaToTiltedRoofArea()
  • Setter : setModuleAreaToTiltedRoofArea(int)

Module / LOD1 roof area (moduleAreaToLOD1RoofArea)

Ratio between installed module area and LOD1 roof area.

By default, 15m² worth of modules will be installed on a 100m² LOD1 roof.

It is half the default for moduleAreaToFlatRoofArea because the roof geometry is unknown, and half of the LOD1 might point to the wrong azimuth (e.g. north).

  • Type : int
  • Default : 15

  • Unit : [%]

  • Getter : getModuleAreaToLOD1RoofArea()
  • Setter : setModuleAreaToLOD1RoofArea(int)

Module / facade area (moduleAreaToFacadeArea)

Ratio between installed module area and facade area.

By default, 5m² worth of modules will be installed on a 100m² facade.

Window ratios are not known, so this ratio should be low and only considered as a very rough guess.

  • Type : int
  • Default : 5

  • Unit : [%]

  • Getter : getModuleAreaToFacadeArea()
  • Setter : setModuleAreaToFacadeArea(int)

Max flat roof elevation (maximumFlatRoofElevation)

  • Any roof surface at or below this elevation will be considered to be a flat roof, and the photovoltaic modules will be installed on a mounting rack, towards the south (assuming that the location is in the northern hemisphere) and at moduleTiltOnFlatRoof °.

  • Any roof surface over this elevation will be considered to be a tilted roof, and the photovoltaic modules will be installed parallel to the roof structure.

  • Type : int
  • Default : 10

  • Unit : [°]

  • Getter : getMaximumFlatRoofElevation()
  • Setter : setMaximumFlatRoofElevation(int)

Module efficiency (moduleEfficiency)

Module efficiency at STC (Standard Test Conditions. 1000W/m², T_module 25°C, Air-mass 1.5).

It should probably be between 10% and 22%.

  • Type : int
  • Default : 15

  • Unit : [%]

  • Getter : getModuleEfficiency()
  • Setter : setModuleEfficiency(int)

Module tilt on flat roof (moduleTiltOnFlatRoof)

Tilt at which modules will be installed on a flat roof. Modules will be installed towards the south.

The tilt depends on the latitude, and should probably be between 5° and 35°.

  • Type : int
  • Default : 25

  • Unit : [°]

  • Getter : getModuleTiltOnFlatRoof()
  • Setter : setModuleTiltOnFlatRoof(int)

Performance ratio (performanceRatio)

Performance ratio that the potential photovoltaic installation is supposed to achieve. It includes cable losses, MPP mismatch, modules mismatch, thermal losses, ...

This value should probably be between 75% and 95%.

  • Type : int
  • Default : 85

  • Unit : [%]

  • Getter : getPerformanceRatio()
  • Setter : setPerformanceRatio(int)

Calculate hourly values? (calculateHourlyValues)

Should a separate CSV file be written, containing the total AC Power from all potential photovoltaic systems?

  • Type : boolean
  • Default : false
  • Getter : isCalculateHourlyValues()
  • Setter : setCalculateHourlyValues(boolean)

Used in