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