parent
c075fbbe73
commit
abd46b524a
@ -1,405 +0,0 @@
|
||||
.. _cases:
|
||||
|
||||
***********************
|
||||
Test Cases and Parsers
|
||||
***********************
|
||||
|
||||
Directory
|
||||
=========
|
||||
|
||||
ANDES comes with several test cases in the ``andes/cases/`` folder.
|
||||
Currently, the Kundur's 2-area system, IEEE 14-bus system,
|
||||
NPCC 140-bus system, and the WECC 179-bus system has been verified
|
||||
against DSATools TSAT.
|
||||
|
||||
The test case library will continue to build as more models get implemented.
|
||||
|
||||
A tree view of the test directory is as follows. ::
|
||||
|
||||
cases/
|
||||
├── 5bus/
|
||||
│ └── pjm5bus.xlsx
|
||||
├── GBnetwork/
|
||||
│ ├── GBnetwork.m
|
||||
│ ├── GBnetwork.xlsx
|
||||
│ └── README.md
|
||||
├── ieee14/
|
||||
│ ├── ieee14.dyr
|
||||
│ └── ieee14.raw
|
||||
├── kundur/
|
||||
│ ├── kundur.raw
|
||||
│ ├── kundur_aw.xlsx
|
||||
│ ├── kundur_coi.xlsx
|
||||
│ ├── kundur_coi_empty.xlsx
|
||||
│ ├── kundur_esdc2a.xlsx
|
||||
│ ├── kundur_esst3a.xlsx
|
||||
│ ├── kundur_exdc2_zero_tb.xlsx
|
||||
│ ├── kundur_exst1.xlsx
|
||||
│ ├── kundur_freq.xlsx
|
||||
│ ├── kundur_full.dyr
|
||||
│ ├── kundur_full.xlsx
|
||||
│ ├── kundur_gentrip.xlsx
|
||||
│ ├── kundur_ieeeg1.xlsx
|
||||
│ ├── kundur_ieeest.xlsx
|
||||
│ ├── kundur_sexs.xlsx
|
||||
│ └── kundur_st2cut.xlsx
|
||||
├── matpower/
|
||||
│ ├── case118.m
|
||||
│ ├── case14.m
|
||||
│ ├── case300.m
|
||||
│ └── case5.m
|
||||
├── nordic44/
|
||||
│ ├── N44_BC.dyr
|
||||
│ ├── N44_BC.raw
|
||||
│ └── README.md
|
||||
├── npcc/
|
||||
│ ├── npcc.raw
|
||||
│ └── npcc_full.dyr
|
||||
├── wecc/
|
||||
│ ├── wecc.raw
|
||||
│ ├── wecc.xlsx
|
||||
│ ├── wecc_full.dyr
|
||||
│ ├── wecc_gencls.dyr
|
||||
└── wscc9/
|
||||
├── wscc9.raw
|
||||
└── wscc9.xlsx
|
||||
|
||||
MATPOWER Cases
|
||||
==============================
|
||||
|
||||
MATPOWER cases has been tested in ANDES for power flow calculation.
|
||||
All following cases are calculated with the provided initial values
|
||||
using the full Newton-Raphson iterative approach.
|
||||
|
||||
The numerical library used for sparse matrix factorization is KLU.
|
||||
In addition, Jacobians are updated in place ``spmatrix.ipadd``.
|
||||
Computations are performed on macOS 10.15.4 with i9-9980H, 16 GB
|
||||
2400 MHz DDR4, running ANDES 0.9.1, CVXOPT 1.2.4 and NumPy 1.18.1.
|
||||
|
||||
The statistics of convergence, number of iterations, and solution time
|
||||
(including equation evaluation, Jacobian, and factorization time) are
|
||||
reported in the following table.
|
||||
The computation time may vary depending on operating system and hardware.
|
||||
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| File Name | Converged? | # of Iterations | Time [s] |
|
||||
+==========================+============+=================+==========+
|
||||
| case30.m | 1 | 3 | 0.012 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg500.m | 1 | 3 | 0.019 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case13659pegase.m | 1 | 5 | 0.531 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9Q.m | 1 | 3 | 0.011 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg200.m | 1 | 2 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case24_ieee_rts.m | 1 | 4 | 0.014 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case300.m | 1 | 5 | 0.026 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6495rte.m | 1 | 5 | 0.204 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case39.m | 1 | 1 | 0.009 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case18.m | 1 | 4 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_RTS_GMLC.m | 1 | 3 | 0.014 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case1951rte.m | 1 | 3 | 0.047 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6ww.m | 1 | 3 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case5.m | 1 | 3 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case69.m | 1 | 3 | 0.014 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6515rte.m | 1 | 4 | 0.168 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2383wp.m | 1 | 6 | 0.084 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case30Q.m | 1 | 3 | 0.011 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2868rte.m | 1 | 4 | 0.074 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case1354pegase.m | 1 | 4 | 0.047 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2848rte.m | 1 | 3 | 0.063 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case4_dist.m | 1 | 3 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6470rte.m | 1 | 4 | 0.175 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2746wp.m | 1 | 4 | 0.074 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_SyntheticUSA.m | 1 | 21 | 11.120 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case118.m | 1 | 3 | 0.014 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case30pwl.m | 1 | 3 | 0.021 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case57.m | 1 | 3 | 0.017 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case89pegase.m | 1 | 5 | 0.024 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6468rte.m | 1 | 6 | 0.232 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2746wop.m | 1 | 4 | 0.075 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case85.m | 1 | 3 | 0.011 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case22.m | 1 | 2 | 0.008 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case4gs.m | 1 | 3 | 0.012 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case14.m | 1 | 2 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg10k.m | 1 | 4 | 0.251 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2869pegase.m | 1 | 6 | 0.136 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ieee30.m | 1 | 2 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2737sop.m | 1 | 5 | 0.087 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9target.m | 1 | 5 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case1888rte.m | 1 | 2 | 0.037 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case145.m | 1 | 3 | 0.018 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg2000.m | 1 | 3 | 0.059 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg70k.m | 1 | 15 | 7.043 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9241pegase.m | 1 | 6 | 0.497 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9.m | 1 | 3 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case141.m | 1 | 3 | 0.012 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg25k.m | 1 | 7 | 1.040 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case118.m | 1 | 3 | 0.015 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case1354pegase.m | 1 | 4 | 0.048 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case13659pegase.m | 1 | 5 | 0.523 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case14.m | 1 | 2 | 0.011 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case141.m | 1 | 3 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case145.m | 1 | 3 | 0.017 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case18.m | 1 | 4 | 0.012 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case1888rte.m | 1 | 2 | 0.037 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case1951rte.m | 1 | 3 | 0.052 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case22.m | 1 | 2 | 0.011 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2383wp.m | 1 | 6 | 0.086 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case24_ieee_rts.m | 1 | 4 | 0.015 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2736sp.m | 1 | 4 | 0.074 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2737sop.m | 1 | 5 | 0.108 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2746wop.m | 1 | 4 | 0.093 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2746wp.m | 1 | 4 | 0.089 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2848rte.m | 1 | 3 | 0.065 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2868rte.m | 1 | 4 | 0.079 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case2869pegase.m | 1 | 6 | 0.137 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case30.m | 1 | 3 | 0.033 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case300.m | 1 | 5 | 0.102 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case30Q.m | 1 | 3 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case30pwl.m | 1 | 3 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case39.m | 1 | 1 | 0.008 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case4_dist.m | 1 | 3 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case4gs.m | 1 | 3 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case5.m | 1 | 3 | 0.011 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case57.m | 1 | 3 | 0.015 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6468rte.m | 1 | 6 | 0.229 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6470rte.m | 1 | 4 | 0.170 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6495rte.m | 1 | 5 | 0.198 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6515rte.m | 1 | 4 | 0.169 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case69.m | 1 | 3 | 0.012 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case6ww.m | 1 | 3 | 0.011 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case85.m | 1 | 3 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case89pegase.m | 1 | 5 | 0.020 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9.m | 1 | 3 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9241pegase.m | 1 | 6 | 0.487 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9Q.m | 1 | 3 | 0.013 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case9target.m | 1 | 5 | 0.015 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg10k.m | 1 | 4 | 0.257 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg200.m | 1 | 2 | 0.014 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg2000.m | 1 | 3 | 0.058 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg25k.m | 1 | 7 | 1.118 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg500.m | 1 | 3 | 0.027 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ACTIVSg70k.m | 1 | 15 | 6.931 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_RTS_GMLC.m | 1 | 3 | 0.014 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_SyntheticUSA.m | 1 | 21 | 11.103 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case_ieee30.m | 1 | 2 | 0.010 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case3375wp.m | 0 | - | 0.061 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case33bw.m | 0 | - | 0.007 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case3120sp.m | 0 | - | 0.037 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case3012wp.m | 0 | - | 0.082 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case3120sp.m | 0 | - | 0.039 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case3375wp.m | 0 | - | 0.059 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
| case33bw.m | 0 | - | 0.007 |
|
||||
+--------------------------+------------+-----------------+----------+
|
||||
|
||||
PSS/E Dyr Parser
|
||||
================
|
||||
ANDES supporting parsing PSS/E dynamic files in the format of ``.dyr``.
|
||||
Support new dynamic models can be added by editing the input and output
|
||||
conversion definition file in ``andes/io/psse-dyr.yaml``,
|
||||
which is in the standard YAML format.
|
||||
To add support for a new dynamic model, it is recommended to start with
|
||||
an existing model of similar functionality.
|
||||
|
||||
Consider a ``GENCLS`` entry in a dyr file. The entry looks like ::
|
||||
|
||||
1 'GENCLS' 1 13.0000 0.000000 /
|
||||
|
||||
where the fields are in the order of bus index, model name,
|
||||
generator index on the bus, inertia (H) and damping coefficient (D).
|
||||
|
||||
The input-output conversion definition for GENCLS is as follows ::
|
||||
|
||||
GENCLS:
|
||||
destination: GENCLS
|
||||
inputs:
|
||||
- BUS
|
||||
- ID
|
||||
- H
|
||||
- D
|
||||
find:
|
||||
gen:
|
||||
StaticGen:
|
||||
bus: BUS
|
||||
subidx: ID
|
||||
get:
|
||||
u:
|
||||
StaticGen:
|
||||
src: u
|
||||
idx: gen
|
||||
Sn:
|
||||
StaticGen:
|
||||
src: Sn
|
||||
idx: gen
|
||||
Vn:
|
||||
Bus:
|
||||
src: Vn
|
||||
idx: BUS
|
||||
ra:
|
||||
StaticGen:
|
||||
src: ra
|
||||
idx: gen
|
||||
xs:
|
||||
StaticGen:
|
||||
src: xs
|
||||
idx: gen
|
||||
outputs:
|
||||
u: u
|
||||
bus: BUS
|
||||
gen: gen
|
||||
Sn: Sn
|
||||
Vn: Vn
|
||||
D: D
|
||||
M: "GENCLS.H; lambda x: 2 * x"
|
||||
ra: ra
|
||||
xd1: xs
|
||||
|
||||
It begins with a base-level definition of the model name to be parsed from the
|
||||
dyr file, namely, ``GENCLS``. Five directives can be defined for each model:
|
||||
``destination``, ``inputs``, ``outputs``, ``find`` and ``get``.
|
||||
Note that ``find`` and ``get`` are optional, but the other three are mandatory.
|
||||
|
||||
- ``destination`` is ANDES model to which the original PSS/E model will be
|
||||
converted. In this case, the ANDES model have the same name ``GENCLS``.
|
||||
- ``inputs`` is a list of the parameter names for the PSS/E data.
|
||||
Arbitrary names can be used, but it is recommended to use the same notation
|
||||
following the PSS/E manual.
|
||||
- ``outputs`` is a dictionary where the keys are the ANDES model parameter and
|
||||
the values are the input parameter or lambda functions that processes the inputs
|
||||
(see notes below).
|
||||
- ``find`` is a dictionary with the keys being the temporary parameter name to store
|
||||
the ``idx`` of
|
||||
external devices and the values being the criteria to locate the devices.
|
||||
In the example above, ``GENCLS`` will try to find the ``idx`` of ``StaticGen``
|
||||
with ``bus == BUS`` and the ``subidx == ID``, where ``BUS`` and ``ID`` are from
|
||||
the dyr file.
|
||||
- ``get`` is a dictionary with each key being a temporary parameter name for storing
|
||||
an external parameter and each value being the criteria to find the external parameter.
|
||||
In the example above, a temporary parameter ``u`` is the ``u`` parameter of ``StaticGen``
|
||||
whose ``idx == gen``. Note that ``gen`` is the ``idx`` of ``StaticGen`` retrieved
|
||||
in the above ``find`` section.
|
||||
|
||||
For the ``inputs`` section, one will need to skip the model name
|
||||
because for any model, the second field is always the model name.
|
||||
That is why for ``GENCLS`` below, we only list four input parameters. ::
|
||||
|
||||
1 'GENCLS' 1 13.0000 0.000000 /
|
||||
|
||||
For the ``outputs`` section, the order can be arbitrary, but it is recommended
|
||||
to follow the input order as much as possible for maintainability.
|
||||
In particular, the right-hand-side of the outputs can be either an input parameter name
|
||||
or an anonymous expression that processes the input parameters.
|
||||
For the example of GENCLS, since ANDES internally uses the parameter of ``M = 2H``,
|
||||
the input ``H`` needs to be multiplied by 2.
|
||||
It is done by the following ::
|
||||
|
||||
M: "GENCLS.H; lambda x: 2 * x"
|
||||
|
||||
where the left-hand-side is the output parameter name (destination ANDES model parameter name),
|
||||
and the right-hand-side is arguments and the lambda function separated by semi-colon, all in a
|
||||
pair of double quotation marks.
|
||||
Multiple arguments are accepted and should be separated by comma.
|
||||
Arguments can come from the same model or another model.
|
||||
In the case of the same model, the model name can be neglected, namely, by writing
|
||||
``M: "H; lambda x: 2 * x"``.
|
@ -1,23 +0,0 @@
|
||||
.. role:: raw-html(raw)
|
||||
:format: html
|
||||
|
||||
*******
|
||||
License
|
||||
*******
|
||||
|
||||
GNU Public License v3
|
||||
*********************
|
||||
| Copyright :raw-html:`©` 2015-2020 Hantao Cui.
|
||||
|
||||
ANDES is free software; you can redistribute it and/or modify it under
|
||||
the terms of the
|
||||
`GNU General Public License <http://www.gnu.org/licenses/gpl-3.0.html>`_
|
||||
as published by the Free Software Foundation; either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
ANDES is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the
|
||||
`GNU General Public License <http://www.gnu.org/licenses/gpl-3.0.html>`_
|
||||
for more details.
|
@ -1,51 +0,0 @@
|
||||
.. _faq:
|
||||
|
||||
**************************
|
||||
Frequently Asked Questions
|
||||
**************************
|
||||
|
||||
General
|
||||
=======
|
||||
|
||||
Q: What is the Hybrid Symbolic-Numeric Framework in ANDES?
|
||||
|
||||
A: It is a modeling and simulation framework that uses symbolic computation for descriptive
|
||||
modeling and code generation for fast numerical simulation.
|
||||
The goal of the framework is to reduce the programming efforts associated with implementing
|
||||
complex models and automate the research workflow of modeling, simulation, and documentation.
|
||||
|
||||
The framework reduces the modeling efforts from two aspects:
|
||||
(1) allowing modeling by typing in equations, and (2) allowing modeling using modularized
|
||||
control blocks and discontinuous components.
|
||||
One only needs to describe the model using equations and blocks without having to write the
|
||||
numerical code to implement the computation.
|
||||
The framework automatically generate symbolic expressions, computes partial derivatives,
|
||||
and generates vectorized numerical code.
|
||||
|
||||
Modeling
|
||||
========
|
||||
|
||||
Admittance matrix
|
||||
-----------------
|
||||
|
||||
Q: Where to find the line admittance matrix?
|
||||
|
||||
A: ANDES does not build line admittance matrix for computing
|
||||
line power injections. Instead, line power injections are
|
||||
computed as vectors on the two line terminal. This approach
|
||||
generalizes line as a power injection model.
|
||||
|
||||
Q: Without admittance matrix, how to switch out lines?
|
||||
|
||||
A: Lines can be switched out and in by using ``Toggler``.
|
||||
See the example in ``cases/kundur/kundur_full.xlsx``.
|
||||
One does not need to manually trigger a Jacobian matrix rebuild
|
||||
because ``Toggler`` automatically triggers it using the new
|
||||
connectivity status.
|
||||
|
||||
Reference of the existing model
|
||||
-------------------------------
|
||||
|
||||
Q: Is there any further reference of the existing model?
|
||||
|
||||
A: Most of them can be found online, such as ESIG and PowerWorld.
|
@ -1,195 +0,0 @@
|
||||
.. _install:
|
||||
|
||||
*************************
|
||||
Installation
|
||||
*************************
|
||||
|
||||
ANDES can be installed in Python 3.6+.
|
||||
Please follow the installation guide carefully.
|
||||
|
||||
Environment
|
||||
===========
|
||||
|
||||
Setting Up Miniconda
|
||||
--------------------
|
||||
We recommend the Miniconda distribution that includes the conda package manager and Python.
|
||||
Downloaded and install the latest Miniconda (x64, with Python 3)
|
||||
from https://conda.io/miniconda.html.
|
||||
|
||||
Step 1: Open terminal (on Linux or maxOS) or `Anaconda Prompt` (on Windows, **not the cmd
|
||||
program!!**).
|
||||
Make sure you are in a conda environment - you should see ``(base)`` prepended to the
|
||||
command-line prompt, such as ``(base) C:\Users\user>``.
|
||||
|
||||
Create a conda environment for ANDES (recommended)
|
||||
|
||||
.. code:: bash
|
||||
|
||||
conda create --name andes python=3.7
|
||||
|
||||
Activate the new environment with
|
||||
|
||||
.. code:: bash
|
||||
|
||||
conda activate andes
|
||||
|
||||
You will need to activate the ``andes`` environment every time in a new Anaconda Prompt or
|
||||
shell.
|
||||
|
||||
Step 2: Add the ``conda-forge`` channel and set it as default
|
||||
|
||||
.. code:: bash
|
||||
|
||||
conda config --add channels conda-forge
|
||||
conda config --set channel_priority flexible
|
||||
|
||||
If these steps complete without an error, continue to `Install Andes`_.
|
||||
|
||||
Existing Python Environment (Advanced)
|
||||
--------------------------------------
|
||||
This is for advanced user only and is **not recommended on Microsoft Windows**.
|
||||
Please skip it if you have set up a Conda environment.
|
||||
|
||||
Instead of using Conda, if you prefer an existing Python environment,
|
||||
you can install ANDES with `pip`:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
python3 -m pip install andes
|
||||
|
||||
If you see a `Permission denied` error, you will need to
|
||||
install the packages locally with `--user`
|
||||
|
||||
Install ANDES
|
||||
=============
|
||||
|
||||
ANDES can be installed in the user mode and the development mode.
|
||||
|
||||
- If you want to use ANDES without modifying the source code, install it in the `User Mode`_.
|
||||
- If you want to develop models or routine, install it in the `Development Mode`_.
|
||||
|
||||
User Mode
|
||||
---------
|
||||
.. warning ::
|
||||
Please skip this section and install ANDES in the `Development Mode`_
|
||||
if you want to modify ANDES code or receive unreleased development
|
||||
updates.
|
||||
|
||||
The User Model installation will install the latest stable version.
|
||||
In the Anaconda environment, run
|
||||
|
||||
.. code:: bash
|
||||
|
||||
conda install andes
|
||||
|
||||
You will be prompted to confirm the installation,
|
||||
|
||||
This command installs ANDES into the active environment, which should be called ``andes`` if
|
||||
you followed all the above steps.
|
||||
|
||||
.. note::
|
||||
To use ``andes``, you will need to activate the ``andes`` environment every time in a new Anaconda Prompt or
|
||||
shell.
|
||||
|
||||
|
||||
Development Mode
|
||||
----------------
|
||||
This is for users who want to hack into the code and, for example, develop new models or routines.
|
||||
The usage of ANDES is the same in development mode as in user mode.
|
||||
In addition, changes to source code will be reflected immediately without re-installation.
|
||||
|
||||
Step 1: Get ANDES source code
|
||||
|
||||
As a developer, you are strongly encouraged to clone the source code using ``git``
|
||||
from either your fork or the original repository:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git clone https://github.com/cuihantao/andes
|
||||
|
||||
In this way, you can easily update to the latest source code using ``git``.
|
||||
|
||||
Alternatively, you can download the ANDES source code from
|
||||
https://github.com/cuihantao/andes and extract all files to the path of your choice.
|
||||
Although this will work, this is not recommended since tracking changes and pushing back code
|
||||
would be painful.
|
||||
|
||||
Step 2: Install dependencies
|
||||
|
||||
In the Anaconda environment, use ``cd`` to change directory to the ANDES root folder.
|
||||
|
||||
Install dependencies with
|
||||
|
||||
.. code:: bash
|
||||
|
||||
conda install --file requirements.txt
|
||||
conda install --file requirements-dev.txt
|
||||
|
||||
Step 3: Install ANDES in the development mode using
|
||||
|
||||
.. code:: bash
|
||||
|
||||
python3 -m pip install -e .
|
||||
|
||||
Note the dot at the end. Pip will take care of the rest.
|
||||
|
||||
Updating ANDES
|
||||
==============
|
||||
|
||||
Regular ANDES updates will be pushed to both ``conda-forge`` and Python package index.
|
||||
It is recommended to use the latest version for bug fixes and new features.
|
||||
We also recommended you to check the :ref:`ReleaseNotes` before updating to stay informed
|
||||
of changes that might break your downstream code.
|
||||
|
||||
Depending you how you installed ANDES, you will use one of the following ways to upgrade.
|
||||
|
||||
If you installed it from conda (most common for users), run
|
||||
|
||||
.. code:: bash
|
||||
|
||||
conda install -c conda-forge --yes andes
|
||||
|
||||
If you install it from PyPI (namely, through ``pip``), run
|
||||
|
||||
.. code:: bash
|
||||
|
||||
python3 -m pip install --yes andes
|
||||
|
||||
If you installed ANDES from source code (in the `Development Mode`_),
|
||||
and the source was cloned using ``git``,
|
||||
you can use ``git pull`` to pull in changes from remote. However, if your source
|
||||
code was downloaded, you will have to download the new source code again and manually
|
||||
overwrite the existing one.
|
||||
|
||||
In rare cases, after updating the source code, command-line ``andes`` will complain
|
||||
about missing dependency. If this ever happens, it means the new ANDES has introduced
|
||||
new dependencies. In such cases, reinstall andes in the development mode to fix.
|
||||
Change directory to the ANDES source code folder that contains ``setup.py`` and run
|
||||
|
||||
.. code:: bash
|
||||
|
||||
python3 -m pip install -e .
|
||||
|
||||
Performance Packages
|
||||
====================
|
||||
.. note::
|
||||
|
||||
Performance packages can be safely skipped and will not affect the
|
||||
functionality of ANDES.
|
||||
|
||||
KVXOPT
|
||||
------
|
||||
|
||||
KVXOPT is a fork of the CVXOPT with KLU by Uriel Sandoval (@sanurielf).
|
||||
KVXOPT interfaces to KLU, which is
|
||||
roughly 20% faster than UMFPACK for circuit simulations based on our testing.
|
||||
|
||||
KVXOPT contains inplace add and set functions for sparse matrix
|
||||
contributed by CURENT.
|
||||
These inplace functions significantly speed up large-scale system simulations.
|
||||
|
||||
To install ``KVXOPT`` run
|
||||
|
||||
.. code:: bash
|
||||
|
||||
python -m pip install kvxopt
|
@ -1,112 +0,0 @@
|
||||
.. _misc:
|
||||
|
||||
**********************
|
||||
Miscellaneous
|
||||
**********************
|
||||
|
||||
Notes
|
||||
=====
|
||||
|
||||
Modeling Blocks
|
||||
---------------
|
||||
|
||||
State Freeze
|
||||
````````````
|
||||
|
||||
State freeze is used by converter controllers during fault transients
|
||||
to fix a variable at the pre-fault values. The concept of state freeze
|
||||
is applicable to both state or algebraic variables.
|
||||
For example, in the renewable energy electric control model (REECA),
|
||||
the proportional-integral controllers for reactive power error and voltage
|
||||
error are subject to state freeze when voltage dip is observed.
|
||||
The internal and output states should be frozen when the freeze signal
|
||||
turns one and freed when the signal turns back to zero.
|
||||
|
||||
Freezing a state variable can be easily implemented by multiplying the freeze
|
||||
signal with the right-hand side (RHS) of the differential equation:
|
||||
|
||||
.. math ::
|
||||
T \dot{x} = (1 - z_f) \times f(x)
|
||||
|
||||
where :math:`f(x)` is the original RHS of the differential equation,
|
||||
and :math:`z_f` is the freeze signal. When :math:`z_f` becomes zero
|
||||
the differential equation will evaluate to zero, making the increment
|
||||
zero.
|
||||
|
||||
Freezing an algebraic variable is more complicate to implement.
|
||||
One might consider a similar solution to freezing a differential variable
|
||||
by constructing a piecewise equation, for example,
|
||||
|
||||
.. math::
|
||||
0 = (1 - z_f)\times g(y)
|
||||
|
||||
where :math:`g(y)` is the original RHS of the algebraic equation.
|
||||
One might also need to add a small value to the diagonals of ``dae.gy``
|
||||
associated with the algebraic variable to avoid singularity.
|
||||
The rationale behind this implementation is to zero out the algebraic
|
||||
equation mismatch and thus stop incremental correction:
|
||||
in the frozen state, since :math:`z_f` switches to zero,
|
||||
the algebraic increment should be forced to zero.
|
||||
This method, however, would not work when a dishonest Newton method is
|
||||
used.
|
||||
|
||||
If the Jacobian matrix is not updated after :math:`z_f` switches to one,
|
||||
in the row associated with the equation, the derivatives will remain the
|
||||
same. For the algebraic equation of the PI controller given by
|
||||
|
||||
.. math::
|
||||
|
||||
0 = (K_p u + x_i) - y
|
||||
|
||||
where :math:`K_p` is the proportional gain, :math:`u` is the input,
|
||||
:math:`x_I` is the integrator output, and :math:`y` is the PI controller
|
||||
output, the derivatives w.r.t :math:`u`, :math:`x_i` and :math:`y` are
|
||||
nonzero in the pre-frozen state. These derivative corrects :math:`y`
|
||||
following the changes of :math:`u` and :math:`x`.
|
||||
Although :math:`x` has been frozen, if the Jacobian is not rebuilt,
|
||||
correction will still be made due to the change of :math:`u`.
|
||||
Since this equation is linear, only one iteration is needed to let
|
||||
:math:`y` track the changes of :math:`u`.
|
||||
For nonlinear algebraic variables, this approach will likely give wrong
|
||||
results, since the residual is pegged at zero.
|
||||
|
||||
To correctly freeze an algebraic variable, the freezing signal needs to
|
||||
be passed to an ``EventFlag``, which will set an ``custom_event`` flag
|
||||
if any input changes.
|
||||
``EventFlag`` is a ``VarService`` that will be evaluated at each
|
||||
iteration after discrete components and before equations.
|
||||
|
||||
Per Unit System
|
||||
==============================
|
||||
|
||||
The bases for AC system are
|
||||
|
||||
- :math:`S_b^{ac}`: three-phase power in MVA. By default, :math:`S_b^{ac}=100 MVA` (in ``System.config.mva``).
|
||||
|
||||
- :math:`V_b^{ac}`: phase-to-phase voltage in kV.
|
||||
|
||||
- :math:`I_b^{ac}`: current base :math:`I_b^{ac} = \frac{S_b^{ac}} {\sqrt{3} V_b^{ac}}`
|
||||
|
||||
The bases for DC system are
|
||||
|
||||
- :math:`S_b^{dc}`: power in MVA. It is assumed to be the same as :math:`S_b^{ac}`.
|
||||
|
||||
- :math:`V_b^{dc}`: voltage in kV.
|
||||
|
||||
Some device parameters with specific properties are per unit values under the corresponding
|
||||
device base ``Sn`` and ``Vn`` (if applicable).
|
||||
These properties are documented in :py:mod:`andes.core.param.NumParam`.
|
||||
|
||||
After setting up the system, these parameters will be converted to the system base MVA
|
||||
as specified in the config file (100 MVA by default).
|
||||
The parameter values in the system base will be stored in the ``v`` attribute of the ``NumParam``,
|
||||
and the original inputs in the device base will be stored to the ``vin`` attribute.
|
||||
Values in the ``v`` attribute is what get utilized in computation.
|
||||
Writing new values directly to ``vin`` will not affect the values in ``v`` afterwards.
|
||||
|
||||
Profiling Import
|
||||
========================================
|
||||
To speed up the command-line program, import profiling is used to breakdown the program loading time.
|
||||
|
||||
With tool ``profimp``, ``andes`` can be profiled with ``profimp "import andes" --html > andes_import.htm``. The
|
||||
report can be viewed in any web browser.
|
@ -1,522 +0,0 @@
|
||||
.. _ReleaseNotes:
|
||||
|
||||
=============
|
||||
Release Notes
|
||||
=============
|
||||
|
||||
The APIs before v3.0.0 are in beta and may change without prior notice.
|
||||
|
||||
v1.4 Notes
|
||||
----------
|
||||
|
||||
v1.4.3 (2021-09-25)
|
||||
```````````````````
|
||||
This release features parallel processing that cuts the time for
|
||||
``andes prepare`` by more than half.
|
||||
|
||||
- ``andes prepare`` supports multiprocessing and uses it by default.
|
||||
- Added aliases ``andes st`` and ``andes prep`` for
|
||||
``andes selftest`` and ``andes prepare``.
|
||||
- ``andes.config_logger`` supports setting new ``stream_level`` and
|
||||
``file_level``.
|
||||
|
||||
New exciter models are contributed by Jinning Wang.
|
||||
|
||||
- Added ``AC8B``, ``IEEET3`` and ``ESAC1A``.
|
||||
|
||||
Other changes include disallowing numba's ``nopython`` mode.
|
||||
|
||||
v1.4.2 (2021-09-12)
|
||||
```````````````````
|
||||
- Bug fixes
|
||||
- Dropped support for ``cvxoptklu``.
|
||||
|
||||
v1.4.1 (2021-09-12)
|
||||
```````````````````
|
||||
- Bug fixes.
|
||||
- Overhaul of the ``prepare`` and ``undill`` methods.
|
||||
- ``andes prepare`` can be called for specific models through
|
||||
``-m``, which takes one or many model names as arguments.
|
||||
|
||||
v1.4.0 (2021-09-08)
|
||||
```````````````````
|
||||
This release highlights the distributed energy resource protection model.
|
||||
|
||||
- Added ``DGPRCT1`` model to provide DG models with voltage-
|
||||
and frequency-based protection following IEEE 1547-2018.
|
||||
- ``REECA1E`` supports frequency droop on power.
|
||||
- Throws TypeError if type mismatches when using ExtAlgeb and ExtState.
|
||||
|
||||
v1.3 Notes
|
||||
----------
|
||||
v1.3.12 (2021-08-22)
|
||||
````````````````````
|
||||
Plot enhancements:
|
||||
|
||||
- ``plot()`` takes an argument ``mark`` for masking y-axis data based on
|
||||
the ``left`` and ``right`` range parameters.
|
||||
- ``TDS.plt`` provides a ``panoview`` method for plotting an panoramic view
|
||||
for selected variables and devices of a model.
|
||||
|
||||
Models:
|
||||
|
||||
- Added WIP EV models and protection models.
|
||||
|
||||
Test case:
|
||||
- Added CURENT EI test system.
|
||||
- Added a number of IEEE 14 bus test systems for specific models.
|
||||
|
||||
v1.3.11 (2021-07-27)
|
||||
````````````````````
|
||||
- Added ``REECA1E`` model with inertia emulation.
|
||||
- Fixed an issue where the ``vtype`` of services was ignored.
|
||||
- Changed default DPI for plotting to 100.
|
||||
|
||||
v1.3.10 (2021-06-08)
|
||||
````````````````````
|
||||
- Bug fixes for controllers when generators are off.
|
||||
|
||||
v1.3.9 (2021-06-02)
|
||||
```````````````````
|
||||
- Bug fixes in exciters when generators are offline.
|
||||
- Added `safe_div` function for initialization equations.
|
||||
|
||||
v1.3.8 (2021-06-02)
|
||||
```````````````````
|
||||
- Added ``REGCVSG`` model for voltage-source controlled renewables.
|
||||
- Turbine governors are now aware of the generator connection status.
|
||||
|
||||
v1.3.7 (2021-05-03)
|
||||
```````````````````
|
||||
- Allow manually specifying variables needing initialization
|
||||
preceding a variable. Specify a list of variable names through
|
||||
``BaseVar.deps``.
|
||||
|
||||
v1.3.6 (2021-04-23)
|
||||
```````````````````
|
||||
- Patched ESD1 model. Converted `distributed.py` into a package.
|
||||
- Bug fixes.
|
||||
|
||||
v1.3.5 (2021-03-20)
|
||||
```````````````````
|
||||
- Fixed a bug in connectivity check when bus 0 is islanded.
|
||||
- Updated notebook examples.
|
||||
- Updated tutorials.
|
||||
|
||||
v1.3.4 (2021-03-13)
|
||||
```````````````````
|
||||
- Fixed a bug for the generated renewable energy code.
|
||||
|
||||
v1.3.2 (2021-03-08)
|
||||
```````````````````
|
||||
- Relaxed the version requirements for NumPy and SymPy.
|
||||
|
||||
v1.3.1 (2021-03-07)
|
||||
```````````````````
|
||||
- Writes all generated Python code to ``~/.andes/pycode`` by default.
|
||||
- Uses generated Python code by default instead of `calls.pkl`.
|
||||
- Works with NumPy 1.20; works on Apple Silicon (use `miniforge`) to
|
||||
install native Python and NumPy for Apple Silicon.
|
||||
- Generalized model initialization: automatically determines the
|
||||
initialization sequence and solve equations iteratively when
|
||||
necessary.
|
||||
- In `System.config`, `save_pycode` and `use_pycode` are now
|
||||
deprecated.
|
||||
|
||||
|
||||
v1.3.0 (2021-02-20)
|
||||
```````````````````
|
||||
- Allow `State` variable set `check_init=False` to skip
|
||||
initialization test. One use case is for integrators
|
||||
with non-zero inputs (such as state-of-charge integration).
|
||||
- Solves power flow for systems with multiple areas, each with
|
||||
one Slack generator.
|
||||
- Added `Jumper` for connecting two buses with zero impedance.
|
||||
- `REGCA1` and synchronous generators can take power ratio
|
||||
parameters `gammap` and `gammaq`.
|
||||
- New models: `IEESGO` and `IEEET1`, `EXAC4`.
|
||||
- Refactored exciters, turbine governors, and renewable models
|
||||
into modules.
|
||||
|
||||
|
||||
v1.2 Notes
|
||||
----------
|
||||
v1.2.9 (2021-01-16)
|
||||
```````````````````
|
||||
- Added system connectivity check for islanded buses.
|
||||
- Depend on `openpyxl` for reading excel files since `xlrd` dropped
|
||||
support for any format but `xlsx` since v2.0.0.
|
||||
|
||||
v1.2.7 (2020-12-08)
|
||||
```````````````````
|
||||
- Time-domain integration now evaluates anti-windup limiter before
|
||||
algebraic residuals. It assures that algebraic residuals are
|
||||
calculated with the new state values if pegged at limits.
|
||||
- Fixed the conditions for Iq ramping in REGC;
|
||||
removed ``Iqmax`` and ``Iqmin``.
|
||||
- Added a new plot function ``plotn`` to allow multiple subplots in
|
||||
one figure.
|
||||
- ``TDS.config.g_scale`` is now now used as a factor for scaling
|
||||
algebraic equations for better convergence. Setting it to 1.0
|
||||
functions the same as before.
|
||||
|
||||
v1.2.6 (2020-12-01)
|
||||
```````````````````
|
||||
- Added `TGOV1N` model which sums `pref` and `paux` after
|
||||
the 1/droop block.
|
||||
- Added `ZIP` and `FLoad` for dynamic analysis. Need to be initialized
|
||||
after power flow.
|
||||
- Added `DAETimeSeries.get_data()` method.
|
||||
- Added IEEE 14-bus test cases with solar PV (ieee14_solar.xlsx) and
|
||||
Generic Type 3 wind (ieee14_wt3.xlsx).
|
||||
|
||||
v1.2.5 (2020-11-19)
|
||||
```````````````````
|
||||
- Added `Summary` model to allow arbitrary information for
|
||||
a test case. Works in `xlsx` and `json` formats.
|
||||
- PV reactive power limit works. Automatically determines
|
||||
the number of PVs to convert if `npv2pq=0`.
|
||||
- Limiter and AntiWindup limiter can use `sign_upper=-1` and
|
||||
`sign_lower=-1` to negate the provided limits.
|
||||
- Improved error messages for inconsistent data.
|
||||
- `DAETimeSeries` functions refactored.
|
||||
|
||||
v1.2.4 (2020-11-13)
|
||||
```````````````````
|
||||
- Added switched shunt class `ShuntSw`.
|
||||
- BaseParam takes `inconvert` and `oconvert` for converting parameter
|
||||
elements from and to files.
|
||||
|
||||
v1.2.3 (2020-11-02)
|
||||
```````````````````
|
||||
- Support variable `sys_mva` (system base mva) in equation strings.
|
||||
- Default support for KVXOPT through ``pip`` installation.
|
||||
|
||||
v1.2.2 (2020-11-01)
|
||||
```````````````````
|
||||
New Models:
|
||||
|
||||
- ``PVD1`` model, WECC distributed PV model.
|
||||
Supports multiple PVD1 devices on the same bus.
|
||||
- Added ``ACEc`` model, ACE calculation with continuous freq.
|
||||
|
||||
Changes and fixes:
|
||||
|
||||
- Renamed `TDS._itm_step` to `TDS.itm_step` as a public API.
|
||||
- Allow variable `sys_f` (system frequency) in equation strings.
|
||||
- Fixed ACE equation.
|
||||
measurement.
|
||||
- Support ``kvxopt`` as a drop-in replacement for ``cvxopt``
|
||||
to bring KLU to Windows (and other platforms).
|
||||
- Added ``kvxopt`` as a dependency for PyPI installation.
|
||||
|
||||
v1.2.1 (2020-10-11)
|
||||
```````````````````
|
||||
- Renamed `models.non_jit` to `models.file_classes`.
|
||||
- Removed `models/jit.py` as models have to be loaded and instantiated
|
||||
anyway before undill.
|
||||
- Skip generating empty equation calls.
|
||||
|
||||
v1.2.0 (2020-10-10)
|
||||
```````````````````
|
||||
This version contains major refactor for speed improvement.
|
||||
|
||||
- Refactored Jacobian calls generation so that for each model, one call
|
||||
is generated for each Jacobian type.
|
||||
- Refactored Service equation generation so that the exact arguments are
|
||||
passed.
|
||||
|
||||
Also contains an experimental Python code dump function.
|
||||
|
||||
- Controlled in ``System.config``, one can turn on ``save_pycode`` to dump
|
||||
equation and Jacobian calls to ``~/.andes/pycode``. Requires one call to
|
||||
``andes prepare``.
|
||||
- The Python code dump can be reformatted with ``yapf`` through the config
|
||||
option ``yapf_pycode``. Requires separate installation.
|
||||
- The dumped Python code can be used for subsequent simulations through
|
||||
the config option ``use_pycode``.
|
||||
|
||||
v1.1 Notes
|
||||
----------
|
||||
v1.1.5 (2020-10-08)
|
||||
```````````````````
|
||||
- Allow plotting to existing axes with the same plot API.
|
||||
- Added TGOV1DB model (TGOV1 with an input dead-band).
|
||||
- Added an experimental numba support.
|
||||
- Patched `LazyImport` for a snappier command-line interface.
|
||||
- ``andes selftest -q`` now skips code generation.
|
||||
|
||||
v1.1.4 (2020-09-22)
|
||||
```````````````````
|
||||
- Support `BackRef` for groups.
|
||||
- Added CLI ``--pool`` to use ``multiprocess.Pool`` for multiple cases.
|
||||
When combined with ``--shell``, ``--pool`` returns ``System`` Objects
|
||||
in the list ``system``.
|
||||
- Fixed bugs and improved manual.
|
||||
|
||||
v1.1.3 (2020-09-05)
|
||||
```````````````````
|
||||
- Improved documentation.
|
||||
- Minor bug fixes.
|
||||
|
||||
v1.1.2 (2020-09-03)
|
||||
```````````````````
|
||||
- Patched time-domain for continuing simulation.
|
||||
|
||||
v1.1.1 (2020-09-02)
|
||||
```````````````````
|
||||
- Added back quasi-real-time speed control through `--qrt`
|
||||
and `--kqrt KQRT`.
|
||||
- Patched the time-domain routine for the final step.
|
||||
|
||||
v1.1.0 (2020-09-01)
|
||||
```````````````````
|
||||
- Defaulted `BaseVar.diag_eps` to `System.Config.diag_eps`.
|
||||
- Added option `TDS.config.g_scale` to allow for scaling the
|
||||
algebraic mismatch with step size.
|
||||
- Added induction motor models `Motor3` and `Motor5` (PSAT models).
|
||||
- Allow a PFlow-TDS model to skip TDS initialization by setting
|
||||
`ModelFlags.tds_init` to False.
|
||||
- Added Motor models `Motor3` and `Motor5`.
|
||||
- Imported `get_case` and `list_cases` to the root package level.
|
||||
- Added test cases (Kundur's system) with wind.
|
||||
|
||||
Added Generic Type 3 wind turbine component models:
|
||||
|
||||
- Drive-train models `WTDTA1` (dual-mass model) and `WTDS`
|
||||
(single-mass model).
|
||||
- Aerodynamic model `WTARA1`.
|
||||
- Pitch controller model `WTPTA1`.
|
||||
- Torque (a.k.a. Pref) model `WTTQA1`.
|
||||
|
||||
|
||||
v1.0 Notes
|
||||
----------
|
||||
|
||||
v1.0.8 (2020-07-29)
|
||||
```````````````````
|
||||
New features and models:
|
||||
|
||||
- Added renewable energy models `REECA1` and `REPCA1`.
|
||||
- Added service `EventFlag` which automatically calls events
|
||||
if its input changes.
|
||||
- Added service `ExtendedEvent` which flags an extended event
|
||||
for a given time.
|
||||
- Added service `ApplyFunc` to apply a numeric function.
|
||||
For the most cases where one would need `ApplyFunc`,
|
||||
consider using `ConstService` first.
|
||||
- Allow `selftest -q` for quick selftest by skipping codegen.
|
||||
- Improved time stepping logic and convergence tests.
|
||||
- Updated examples.
|
||||
|
||||
Default behavior changes include:
|
||||
|
||||
- ``andes prepare`` now takes three mutually exclusive arguments,
|
||||
`full`, `quick` and `incremental`. The command-line now defaults
|
||||
to the quick mode. ``andes.prepare()`` still uses the full mode.
|
||||
- ``Model.s_update`` now evaluates the generated and the
|
||||
user-provided calls in sequence for each service in order.
|
||||
- Renamed model `REGCAU1` to `REGCA1`.
|
||||
|
||||
v1.0.7 (2020-07-18)
|
||||
```````````````````
|
||||
- Use in-place assignment when updating Jacobian values in Triplets.
|
||||
- Patched a major but simple bug where the Jacobian refactorization
|
||||
flag is set to the wrong place.
|
||||
- New models: PMU, REGCAU1 (tests pending).
|
||||
- New blocks: DeadBand1, PIFreeze, PITrackAW, PITrackAWFreeze (tests
|
||||
pending), and LagFreeze (tests pending).
|
||||
- `andes plot` supports dashed horizontal and vertical lines through
|
||||
`hline1`, `hline2`, `vline1` and `vline2`.
|
||||
- Discrete: renamed `DeadBand` to `DeadBandRT` (deadband with
|
||||
return).
|
||||
- Service: renamed `FlagNotNone` to `FlagValue` with an option
|
||||
to flip the flags.
|
||||
- Other tweaks.
|
||||
|
||||
v1.0.6 (2020-07-08)
|
||||
```````````````````
|
||||
- Patched step size adjustment algorithm.
|
||||
- Added Area Control Error (ACE) model.
|
||||
|
||||
v1.0.5 (2020-07-02)
|
||||
```````````````````
|
||||
- Minor bug fixes for service initialization.
|
||||
- Added a wrapper to call TDS.fg_update to
|
||||
allow passing variables from caller.
|
||||
- Added pre-event time to the switch_times.
|
||||
|
||||
v1.0.4 (2020-06-26)
|
||||
```````````````````
|
||||
- Implemented compressed NumPy format (npz) for time-domain
|
||||
simulation output data file.
|
||||
- Implemented optional attribute `vtype` for specifying data type
|
||||
for Service.
|
||||
- Patched COI speed initialization.
|
||||
- Patched PSS/E parser for two-winding transformer winding and
|
||||
impedance modes.
|
||||
|
||||
v1.0.3 (2020-06-02)
|
||||
```````````````````
|
||||
- Patches `PQ` model equations where the "or" logic "|" is ignored in
|
||||
equation strings. To adjust PQ load in time domain simulation, refer
|
||||
to the note in `pq.py`.
|
||||
- Allow `Model.alter` to update service values.
|
||||
|
||||
v1.0.2 (2020-06-01)
|
||||
```````````````````
|
||||
- Patches the conda-forge script to use SymPy < 1.6. After SymPy version
|
||||
1.5.1, comparison operations cannot be sympified. Pip installations are
|
||||
not affected.
|
||||
|
||||
v1.0.1 (2020-05-27)
|
||||
```````````````````
|
||||
- Generate one lambda function for each of f and g, instead of generating
|
||||
one for each single f/g equation. Requires to run `andes prepare` after
|
||||
updating.
|
||||
|
||||
v1.0.0 (2020-05-25)
|
||||
```````````````````
|
||||
This release is going to be tagged as v0.9.5 and later tagged as v1.0.0.
|
||||
|
||||
- Added verification results using IEEE 14-bus, NPCC, and WECC systems
|
||||
under folder `examples`.
|
||||
- Patches GENROU and EXDC2 models.
|
||||
- Updated test cases for WECC, NPCC IEEE 14-bus.
|
||||
- Documentation improvements.
|
||||
- Various tweaks.
|
||||
|
||||
Pre-v1.0.0
|
||||
----------
|
||||
|
||||
v0.9.4 (2020-05-20)
|
||||
```````````````````
|
||||
|
||||
- Added exciter models EXST1, ESST3A, ESDC2A, SEXS, and IEEEX1,
|
||||
turbine governor model IEEEG1 (dual-machine support), and stabilizer
|
||||
model ST2CUT.
|
||||
- Added blocks HVGate and LVGate with a work-around for sympy.maximum/
|
||||
minimum.
|
||||
- Added services `PostInitService` (for storing initialized values), and
|
||||
`VarService` (variable services that get updated) after limiters and before
|
||||
equations).
|
||||
- Added service `InitChecker` for checking initialization values against
|
||||
typical values. Warnings will be issued when out of bound or equality/
|
||||
inequality conditions are not met.
|
||||
- Allow internal variables to be associated with a discrete component which
|
||||
will be updated before initialization (through `BaseVar.discrete`).
|
||||
- Allow turbine governors to specify an optional `Tn` (turbine rating). If
|
||||
not provided, turbine rating will fall back to `Sn` (generator rating).
|
||||
- Renamed `OptionalSelect` to `DataSelect`; Added `NumSelect`, the array-based
|
||||
version of `DataSelect`.
|
||||
- Allow to regenerate code for updated models through ``andes prepare -qi``.
|
||||
- Various patches to allow zeroing out time constants in transfer functions.
|
||||
|
||||
v0.9.3 (2020-05-05)
|
||||
```````````````````
|
||||
This version contains bug fixes and performance tweaks.
|
||||
|
||||
- Fixed an `AntiWindup` issue that causes variables to stuck at limits.
|
||||
- Allow ``TDS.run()`` to resume from a stopped simulation and run to the new
|
||||
end time in ``TDS.config.tf``.
|
||||
- Improved TDS data dump speed by not constructing DataFrame by default.
|
||||
- Added tests for `kundur_full.xlsx` and `kundur_aw.xlsx` to ensure
|
||||
results are the same as known values.
|
||||
- Other bug fixes.
|
||||
|
||||
v0.9.1 (2020-05-02)
|
||||
```````````````````
|
||||
This version accelerates computations by about 35%.
|
||||
|
||||
- Models with flag ``collate=False``, which is the new default,
|
||||
will slice DAE arrays for all internal vars to reduce copying back and forth.
|
||||
- The change above greatly reduced computation time.
|
||||
For ``kundur_ieeest.xlsx``, simulation time is down from 2.50 sec to 1.64 sec.
|
||||
- The side-effects include a change in variable ordering in output lst file.
|
||||
It also eliminated the feasibility of evaluating model equations in
|
||||
parallel, which has not been implemented and does not seem promising in Python.
|
||||
- Separated symbolic processor and documentation generator from Model into
|
||||
``SymProcessor`` and ``Documenter`` classes.
|
||||
- ``andes prepare`` now shows progress in the console.
|
||||
- Store exit code in ``System.exit_code`` and returns to system when called
|
||||
from CLI.
|
||||
- Refactored the solver interface.
|
||||
- Patched Config.check for routines.
|
||||
- SciPy Newton-Krylov power flow solver is no longer supported.
|
||||
- Patched a bug in v0.9.0 related to `dae.Tf`.
|
||||
|
||||
v0.8.8 (2020-04-28)
|
||||
```````````````````
|
||||
This update contains a quick but significant fix to boost the simulation speed by avoiding
|
||||
calls to empty user-defined numerical calls.
|
||||
|
||||
- In `Model.flags` and `Block.flags`, added `f_num`, `g_num` and `j_num` to indicate
|
||||
if user-defined numerical calls exist.
|
||||
- In `Model.f_update`, `Model.g_update` and `Model.j_update`, check the above flags
|
||||
to avoid unnecessary calls to empty numeric functions.
|
||||
- For the `kundur_ieeest.xlsx` case, simulation time was reduced from 3.5s to 2.7s.
|
||||
|
||||
v0.8.7 (2020-04-28)
|
||||
```````````````````
|
||||
- Changed `RefParam` to a service type called `BackRef`.
|
||||
- Added `DeviceFinder`, a service type to find device idx when not provided.
|
||||
`DeviceFinder` will also automatically add devices if not found.
|
||||
- Added `OptionalSelect`, a service type to select optional parameters if provided
|
||||
and select fallback ones otherwise.
|
||||
- Added discrete types `Derivative`, `Delay`, and `Average`,
|
||||
- Implemented full IEEEST stabilizer.
|
||||
- Implemented COI for generator speed and angle measurement.
|
||||
|
||||
v0.8.6 (2020-04-21)
|
||||
```````````````````
|
||||
This release contains important documentation fixes and two new blocks.
|
||||
|
||||
- Fixed documentations in `andes doc` to address a misplacement of symbols and equations.
|
||||
- Converted all blocks to the division-free formulation (with `dae.zf` renamed to `dae.Tf`).
|
||||
- Fixed equation errors in the block documentation.
|
||||
- Implemented two new blocks: Lag2ndOrd and LeadLag2ndOrd.
|
||||
- Added a prototype for IEEEST stabilizer with some fixes needed.
|
||||
|
||||
v0.8.5 (2020-04-17)
|
||||
```````````````````
|
||||
- Converted the differential equations to the form of ``T \dot{x} = f(x, y)``, where T is supplied to
|
||||
``t_const`` of ``State/ExtState``.
|
||||
- Added the support for Config fields in documentation (in ``andes doc`` and on readthedocs).
|
||||
- Added Config consistency checking.
|
||||
- Converted `Model.idx` from a list to `DataParam`.
|
||||
- Renamed the API of routines (summary, init, run, report).
|
||||
- Automatically generated indices now start at 1 (i.e., "GENCLS_1" is the first GENCLS device).
|
||||
- Added test cases for WECC system. The model with classical generators is verified against TSAT.
|
||||
- Minor features: `andes -v 1` for debug output with levels and line numbers.
|
||||
|
||||
v0.8.4 (2020-04-07)
|
||||
```````````````````
|
||||
- Added support for JSON case files. Convert existing case file to JSON with ``--convert json``.
|
||||
- Added support for PSS/E dyr files, loadable with ``-addfile ADDFILE``.
|
||||
- Added ``andes plot --xargs`` for searching variable name and plotting. See example 6.
|
||||
- Various bug fixes: Fault power injection fix;
|
||||
|
||||
v0.8.3 (2020-03-25)
|
||||
```````````````````
|
||||
- Improved storage for Jacobian triplets (see ``andes.core.triplet.JacTriplet``).
|
||||
- On-the-fly parameter alteration for power flow calculations (``Model.alter`` method).
|
||||
- Exported frequently used functions to the root package
|
||||
(``andes.config_logger``, ``andes.run``, ``andes.prepare`` and ``andes.load``).
|
||||
- Return a list of System objects when multiprocessing in an interactive environment.
|
||||
- Exported classes to `andes.core`.
|
||||
- Various bug fixes and documentation improvements.
|
||||
|
||||
v0.8.0 (2020-02-12)
|
||||
```````````````````
|
||||
- First release of the hybrid symbolic-numeric framework in ANDES.
|
||||
- A new framework is used to describe DAE models, generate equation documentation, and generate code for
|
||||
numerical simulation.
|
||||
- Models are written in the new framework. Supported models include GENCLS, GENROU, EXDC2, TGOV1, TG2
|
||||
- PSS/E raw parser, MATPOWER parser, and ANDES xlsx parser.
|
||||
- Newton-Raphson power flow, trapezoidal rule for numerical integration, and full eigenvalue analysis.
|
||||
|
||||
v0.6.9 (2020-02-12)
|
||||
```````````````````
|
||||
- Version 0.6.9 is the last version for the numeric-only modeling framework.
|
||||
- This version will not be updated any more.
|
||||
But, models, routines and functions will be ported to the new version.
|
@ -1,59 +0,0 @@
|
||||
.. _troubleshooting:
|
||||
|
||||
**************************
|
||||
Troubleshooting
|
||||
**************************
|
||||
|
||||
Import Errors
|
||||
=============
|
||||
|
||||
ImportError: DLL load failed
|
||||
----------------------------
|
||||
|
||||
Platform: Windows, error message:
|
||||
|
||||
ImportError: DLL load failed: The specified module could not be found.
|
||||
|
||||
This usually happens when andes is not installed in a Conda environment
|
||||
but instead in a system-wide Python whose library path was not correctly
|
||||
set in environment variables.
|
||||
|
||||
The easiest fix is to install andes in a Conda environment.
|
||||
|
||||
|
||||
Runtime Errors
|
||||
==============
|
||||
|
||||
EOFError: Ran out of input
|
||||
--------------------------
|
||||
|
||||
The error message looks like ::
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/home/user/miniconda3/envs/andes/bin/andes", line 11, in <module>
|
||||
load_entry_point('andes', 'console_scripts', 'andes')()
|
||||
File "/home/user/repos/andes/andes/cli.py", line 179, in main
|
||||
return func(cli=True, **vars(args))
|
||||
File "/home/user/repos/andes/andes/main.py", line 514, in run
|
||||
system = run_case(cases[0], codegen=codegen, **kwargs)
|
||||
File "/home/user/repos/andes/andes/main.py", line 304, in run_case
|
||||
system = load(case, codegen=codegen, **kwargs)
|
||||
File "/home/user/repos/andes/andes/main.py", line 284, in load
|
||||
system.undill()
|
||||
File "/home/user/repos/andes/andes/system.py", line 980, in undill
|
||||
loaded_calls = self._load_pkl()
|
||||
File "/home/user/repos/andes/andes/system.py", line 963, in _load_pkl
|
||||
loaded_calls = dill.load(f)
|
||||
File "/home/user/miniconda3/envs/andes/lib/python3.7/site-packages/dill/_dill.py", line 270, in load
|
||||
return Unpickler(file, ignore=ignore, **kwds).load()
|
||||
File "/home/user/miniconda3/envs/andes/lib/python3.7/site-packages/dill/_dill.py", line 473, in load
|
||||
obj = StockUnpickler.load(self)
|
||||
EOFError: Ran out of input
|
||||
|
||||
Resolution:
|
||||
|
||||
The error indicates the file for generated code is corrupt or inaccessible.
|
||||
It can be fixed by running ``andes prepare`` from the command line.
|
||||
|
||||
If the issue persists, try removing ``~/.andes/calls.pkl`` and running
|
||||
``andes prepare`` agian.
|
Loading…
Reference in new issue