##########################################
Introduction
##########################################
Functionality
=============
**PyPSA can calculate:**
* static power flow (using both the full non-linear network equations and
the linearised network equations)
* linear optimal power flow (least-cost optimisation of power plant and storage
dispatch within network constraints, using the linear network
equations, over several snapshots)
* security-constrained linear optimal power flow
* total electricity/energy system least-cost investment optimisation (using linear
network equations, over several snapshots simultaneously for
optimisation of generation and storage dispatch and investment in
the capacities of generation, storage, transmission and other infrastructure)
**It has models for:**
* meshed multiply-connected AC and DC networks, with controllable
converters between AC and DC networks
* standard types for lines and transformers following the implementation in `pandapower `_
* conventional dispatchable generators with unit commitment
* generators with time-varying power availability, such as
wind and solar generators
* storage units with efficiency losses
* simple hydroelectricity with inflow and spillage
* coupling with other energy carriers
* basic components out of which more complicated assets can be built,
such as Combined Heat and Power (CHP) units, heat pumps, resistive
Power-to-Heat (P2H), Power-to-Gas (P2G), battery electric vehicles
(BEVs), Fischer-Tropsch, direct air capture (DAC), etc.; each of
these is demonstrated in the `examples
`_
Target user group
=================
PyPSA is intended for researchers, planners and utilities who need a
fast, easy-to-use and transparent tool for power system
analysis. PyPSA is free software and can be arbitrarily extended.
Screenshots
===========
* `PyPSA-Eur `_ optimising capacities of generation, storage and transmission lines (9% line volume expansion allowed) for a 95% reduction in CO2 emissions in Europe compared to 1990 levels
.. image:: img/elec_s_256_lv1.09_Co2L-3H.png
:align: center
:width: 700px
* `SciGRID model `_ simulating the German power system for 2015. Interactive plots also be generated with the `plotly `_ library, as shown in this `Notebook `_
.. image:: img/stacked-gen_and_storage-scigrid.png
:align: center
.. image:: img/lmp_and_line-loading.png
:align: right
.. image:: img/reactive-power.png
:align: center
:width: 600px
* Small meshed AC-DC toy model
.. image:: img/ac_dc_meshed.png
:align: center
:width: 400px
Dependencies
============
PyPSA is written and tested to be compatible with Python 3.8 and
above. The last release supporting Python 3.7 was PyPSA 0.21.3.
It leans heavily on the following Python packages:
* `pandas `_ for storing data about components and time series
* `numpy `_ and `scipy `_ for calculations, such as
linear algebra and sparse matrix calculations
* `matplotlib `_ for static plotting
* `cartopy `_ for plotting the baselayer map
* `networkx `_ for some network calculations
* `pyomo `_ for preparing optimisation problems (currently only linear)
* `pytest `_ for unit testing
* `logging `_ for managing messages
The optimisation uses solver interfaces that are independent of the preferred
solver. You can use e.g. one of the free solvers `HiGHS `_,
`GLPK `_ and `CLP/CBC
`_ or commercial solvers like `Gurobi
`_ or `CPLEX
`_ for which free academic
licenses are available.
Other comparable software
=========================
For a full list see :doc:`comparable_software`.
PyPSA is not as fully featured as other power system simulation tools
such as the Matlab-based free software `PSAT
`_ or the commercial package
`DIgSILENT PowerFactory
`_.
However for power flow and optimal power flow over several time
snapshots with variable renewable energy sources and/or storage and/or
mixed AC-DC systems, it offers the flexibility of Python and the
transparency of free software.
Another Python power system tool is `PYPOWER
`_, which is based on the
Matlab-based `MATPOWER `_. In
contrast to PYPOWER, PyPSA has an easier-to-use data model (pandas
DataFrames instead of numpy arrays), support for time-varying data
inputs and support for multiply-connected networks using both AC
and DC. PyPSA uses some of the sparse-matrix constructs from PYPOWER.
Licence
=======
Copyright 2015-2023 :doc:`developers`
PyPSA is licensed under the open source `MIT License `_.