########################################## 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 `_.