ltbams 1.0.8__tar.gz → 1.0.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ltbams-1.0.8/ltbams.egg-info → ltbams-1.0.9}/PKG-INFO +3 -3
- {ltbams-1.0.8 → ltbams-1.0.9}/README.md +2 -2
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/_version.py +3 -3
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/matpower.py +170 -18
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/pypower.py +14 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/group.py +0 -69
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/report.py +3 -4
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/shared.py +4 -1
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/matpower.rst +135 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/pypower.rst +1 -2
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/release-notes.rst +8 -0
- {ltbams-1.0.8 → ltbams-1.0.9/ltbams.egg-info}/PKG-INFO +3 -3
- ltbams-1.0.9/tests/test_io.py +130 -0
- ltbams-1.0.8/tests/test_io.py +0 -56
- {ltbams-1.0.8 → ltbams-1.0.9}/CONTRIBUTING.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/LICENSE +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/MANIFEST.in +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/__main__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/5bus/pjm5bus_ev.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/hawaii40/Hawaii40.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee123/ieee123.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14.json +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14.raw +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14_conn.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee14/ieee14_uced.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/benchmark.json +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case118.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case14.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case300.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case39.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case5.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/matpower/case_ACTIVSg2000.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/npcc/npcc.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/npcc/npcc_uced.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/pglib/pglib_opf_case39_epri__api.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/wecc/wecc.m +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cases/wecc/wecc_uced.xlsx +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/cli.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/documenter.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/matprocessor.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/model.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/param.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/service.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/symprocessor.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/core/var.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/extension/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/extension/eva.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/interface.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/json.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/psse.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/io/xlsx.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/main.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/area.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/bus.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/cost.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/esd1.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/ev.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/distributed/pvd1.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/info.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/line.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/renewable/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/renewable/regc.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/reserve.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/shunt.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/static/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/static/gen.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/static/pq.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/timeslot.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/models/zone.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/constraint.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/exprcalc.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/expression.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/objective.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/omodel.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/optzbase.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/param.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/opt/var.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/_compat.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/pips.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/ppoption.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/ppver.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/core/solver.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/eps.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/idx.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/io.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/make/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/make/matrices.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/make/pdv.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/cpf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/cpf_callbacks.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/opf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/opffcns.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/routines/pflow.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/toggle.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/pypower/utils.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/acopf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/cpf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcopf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcopf2.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcpf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dcpf0.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/dopf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/ed.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/pflow.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/pflow0.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/routine.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/rted.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/type.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/routines/uc.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/system.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/utils/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/utils/misc.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ams/utils/paths.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/Makefile +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/make.bat +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/base.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/class.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/module.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/_templates/autosummary/module_toctree.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/api.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/conf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/examples/index.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/genmodelref.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/genroutineref.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/copyright.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/index.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/psse.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/xlsx.png +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/formats/xlsx.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/index.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/install.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/overview.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/testcase.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/getting_started/verification.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/curent.ico +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/dcopf_time.png +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/images/sponsors/doe.png +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/index.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/example.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/index.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/model.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/routine.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/docs/source/modeling/system.rst +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/SOURCES.txt +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/dependency_links.txt +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/entry_points.txt +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/requires.txt +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/ltbams.egg-info/top_level.txt +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/pyproject.toml +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/requirements-dev.txt +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/requirements.txt +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/setup.cfg +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/setup.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/__init__.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_1st_system.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_addressing.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_case.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_cli.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_export_csv.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_group.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_interface.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_jumper.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_known_good.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_matp.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_model.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_omodel.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_paths.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_report.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_repr.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_routine.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_dcopf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_dcopf2.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_dcpf.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_ed.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_pflow.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_rted.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_rtn_uc.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/tests/test_service.py +0 -0
- {ltbams-1.0.8 → ltbams-1.0.9}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ltbams
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.9
|
4
4
|
Summary: Python software for scheduling modeling and co-simulation with dynamics.
|
5
5
|
Home-page: https://github.com/CURENT/ams
|
6
6
|
Author: Jinning Wang
|
@@ -52,9 +52,9 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
52
52
|
|
53
53
|
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
54
54
|
|
55
|
-
| | Stable |
|
55
|
+
| | Stable | Develop |
|
56
56
|
|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
|
57
|
-
| Documentation | [](https://ams.readthedocs.io/en/stable/?badge=stable) | [](https://ams.readthedocs.io/en/stable/?badge=stable) | [](https://ams.readthedocs.io/en/develop/?badge=develop) |
|
58
58
|
|
59
59
|
|
60
60
|
| Badges | | |
|
@@ -24,9 +24,9 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
24
24
|
|
25
25
|
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
26
26
|
|
27
|
-
| | Stable |
|
27
|
+
| | Stable | Develop |
|
28
28
|
|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
|
29
|
-
| Documentation | [](https://ams.readthedocs.io/en/stable/?badge=stable) | [](https://ams.readthedocs.io/en/stable/?badge=stable) | [](https://ams.readthedocs.io/en/develop/?badge=develop) |
|
30
30
|
|
31
31
|
|
32
32
|
| Badges | | |
|
@@ -8,11 +8,11 @@ import json
|
|
8
8
|
|
9
9
|
version_json = '''
|
10
10
|
{
|
11
|
-
"date": "2025-04-
|
11
|
+
"date": "2025-04-23T12:23:08-0400",
|
12
12
|
"dirty": false,
|
13
13
|
"error": null,
|
14
|
-
"full-revisionid": "
|
15
|
-
"version": "1.0.
|
14
|
+
"full-revisionid": "248188b6caf31eaf1089b55a84e41aaa6115df78",
|
15
|
+
"version": "1.0.9"
|
16
16
|
}
|
17
17
|
''' # END VERSION_JSON
|
18
18
|
|
@@ -6,8 +6,12 @@ import re
|
|
6
6
|
import numpy as np
|
7
7
|
|
8
8
|
from andes.io import read_file_like
|
9
|
+
from andes.io.xlsx import confirm_overwrite
|
9
10
|
from andes.shared import deg2rad, rad2deg
|
10
11
|
|
12
|
+
from ams import __version__ as version
|
13
|
+
from ams.shared import copyright_msg, nowarranty_msg, report_time
|
14
|
+
|
11
15
|
logger = logging.getLogger(__name__)
|
12
16
|
|
13
17
|
|
@@ -396,14 +400,24 @@ def mpc2system(mpc: dict, system) -> bool:
|
|
396
400
|
c2=c2, c1=c1, c0=c0
|
397
401
|
)
|
398
402
|
|
403
|
+
# --- Area ---
|
404
|
+
area_id = np.unique(system.Bus.area.v).astype(int)
|
405
|
+
for area in area_id:
|
406
|
+
area_idx = f'AREA_{area}'
|
407
|
+
system.add('Area', idx=area_idx, name=area)
|
408
|
+
bus_area = system.Bus.area.v
|
409
|
+
bus_area = [f'AREA_{int(area)}' for area in bus_area]
|
410
|
+
system.Bus.area.v = bus_area
|
411
|
+
|
399
412
|
# --- Zone ---
|
400
413
|
zone_id = np.unique(system.Bus.zone.v).astype(int)
|
401
414
|
for zone in zone_id:
|
402
415
|
zone_idx = f'ZONE_{zone}'
|
403
|
-
system.add('Zone', idx=zone_idx, name=
|
416
|
+
system.add('Zone', idx=zone_idx, name=zone)
|
404
417
|
bus_zone = system.Bus.zone.v
|
405
418
|
bus_zone = [f'ZONE_{int(zone)}' for zone in bus_zone]
|
406
419
|
system.Bus.zone.v = bus_zone
|
420
|
+
|
407
421
|
return True
|
408
422
|
|
409
423
|
|
@@ -429,25 +443,29 @@ def _get_bus_id_caller(bus):
|
|
429
443
|
|
430
444
|
def system2mpc(system) -> dict:
|
431
445
|
"""
|
432
|
-
Convert
|
446
|
+
Convert a **setup** AMS system to a MATPOWER mpc dictionary.
|
447
|
+
|
448
|
+
This function is revised from ``andes.io.matpower.system2mpc``.
|
433
449
|
|
434
|
-
In the ``gen`` section, slack generators
|
450
|
+
In the ``gen`` section, slack generators are listed before PV generators.
|
435
451
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
452
|
+
In the converted MPC, the indices of area (bus[:, 6]) and zone (bus[:, 10])
|
453
|
+
may differ from the original MPC. However, the mapping relationship is preserved.
|
454
|
+
For example, if the original MPC numbers areas starting from 1, the converted
|
455
|
+
MPC may number them starting from 0.
|
456
|
+
|
457
|
+
The coefficients ``c2`` and ``c1`` in the generator cost data are scaled by
|
458
|
+
``base_mva`` to match MATPOWER's unit convention (MW).
|
441
459
|
|
442
460
|
Parameters
|
443
461
|
----------
|
444
462
|
system : ams.core.system.System
|
445
|
-
AMS system
|
463
|
+
The AMS system to be converted.
|
446
464
|
|
447
465
|
Returns
|
448
466
|
-------
|
449
|
-
mpc: dict
|
450
|
-
MATPOWER
|
467
|
+
mpc : dict
|
468
|
+
A dictionary in MATPOWER format representing the converted AMS system.
|
451
469
|
"""
|
452
470
|
|
453
471
|
mpc = dict(version='2',
|
@@ -458,12 +476,16 @@ def system2mpc(system) -> dict:
|
|
458
476
|
gencost=np.zeros((system.GCost.n, 7), dtype=np.float64),
|
459
477
|
)
|
460
478
|
|
479
|
+
if not system.is_setup:
|
480
|
+
logger.warning("System is not setup and will be setup now.")
|
481
|
+
system.setup()
|
482
|
+
|
461
483
|
if system.Bus.name.v is not None:
|
462
484
|
mpc['bus_name'] = system.Bus.name.v
|
463
485
|
|
464
486
|
base_mva = system.config.mva
|
465
487
|
|
466
|
-
# ---
|
488
|
+
# --- Bus ---
|
467
489
|
bus = mpc['bus']
|
468
490
|
gen = mpc['gen']
|
469
491
|
|
@@ -471,18 +493,16 @@ def system2mpc(system) -> dict:
|
|
471
493
|
|
472
494
|
bus[:, 0] = to_busid(system.Bus.idx.v)
|
473
495
|
bus[:, 1] = 1
|
496
|
+
if system.Area.n > 0:
|
497
|
+
bus[:, 6] = system.Area.idx2uid(system.Bus.area.v)
|
474
498
|
bus[:, 7] = system.Bus.v0.v
|
475
499
|
bus[:, 8] = system.Bus.a0.v * rad2deg
|
476
500
|
bus[:, 9] = system.Bus.Vn.v
|
501
|
+
if system.Zone.n > 0:
|
502
|
+
bus[:, 10] = system.Zone.idx2uid(system.Bus.zone.v)
|
477
503
|
bus[:, 11] = system.Bus.vmax.v
|
478
504
|
bus[:, 12] = system.Bus.vmin.v
|
479
505
|
|
480
|
-
# --- zone ---
|
481
|
-
ZONE_I = system.Zone.idx.v
|
482
|
-
if len(ZONE_I) > 0:
|
483
|
-
mapping = {busi0: i for i, busi0 in enumerate(ZONE_I)}
|
484
|
-
bus[:, 10] = np.array([mapping[busi0] for busi0 in system.Bus.zone.v])
|
485
|
-
|
486
506
|
# --- PQ ---
|
487
507
|
if system.PQ.n > 0:
|
488
508
|
pq_pos = system.Bus.idx2uid(system.PQ.bus.v)
|
@@ -568,4 +588,136 @@ def system2mpc(system) -> dict:
|
|
568
588
|
else:
|
569
589
|
mpc.pop('gencost')
|
570
590
|
|
591
|
+
# --- gentype ---
|
592
|
+
stg = system.StaticGen.get_all_idxes()
|
593
|
+
gentype = system.StaticGen.get(src='gentype', attr='v', idx=stg)
|
594
|
+
if any(gentype):
|
595
|
+
mpc['gentype'] = np.array(gentype)
|
596
|
+
|
597
|
+
# --- genfuel ---
|
598
|
+
genfuel = system.StaticGen.get(src='genfuel', attr='v', idx=stg)
|
599
|
+
if any(genfuel):
|
600
|
+
mpc['genfuel'] = np.array(genfuel)
|
601
|
+
|
602
|
+
# --- Bus Name ---
|
603
|
+
if any(system.Bus.name.v):
|
604
|
+
mpc['bus_name'] = np.array(system.Bus.name.v)
|
605
|
+
|
571
606
|
return mpc
|
607
|
+
|
608
|
+
|
609
|
+
def mpc2m(mpc: dict, outfile: str) -> str:
|
610
|
+
"""
|
611
|
+
Write a MATPOWER mpc dict to a M-file.
|
612
|
+
|
613
|
+
Parameters
|
614
|
+
----------
|
615
|
+
mpc : dict
|
616
|
+
MATPOWER mpc dictionary.
|
617
|
+
outfile : str
|
618
|
+
Path to the output M-file.
|
619
|
+
"""
|
620
|
+
with open(outfile, 'w') as f:
|
621
|
+
# Add version info
|
622
|
+
f.write(f"%% Converted by AMS {version}\n")
|
623
|
+
f.write(f"%% {copyright_msg}\n\n")
|
624
|
+
f.write(f"%% {nowarranty_msg}\n")
|
625
|
+
f.write(f"%% Convert time: {report_time}\n\n")
|
626
|
+
|
627
|
+
f.write("function mpc = mpc_case\n")
|
628
|
+
f.write("mpc.version = '2';\n\n")
|
629
|
+
|
630
|
+
# Write baseMVA
|
631
|
+
f.write(f"%% system MVA base\nmpc.baseMVA = {mpc['baseMVA']};\n\n")
|
632
|
+
|
633
|
+
# Write bus data
|
634
|
+
f.write("%% bus data\n")
|
635
|
+
f.write("%% bus_i type Pd Qd Gs Bs area Vm Va baseKV zone Vmax Vmin\n")
|
636
|
+
f.write("mpc.bus = [\n")
|
637
|
+
for row in mpc['bus']:
|
638
|
+
f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
|
639
|
+
f.write("];\n\n")
|
640
|
+
|
641
|
+
# Write generator data
|
642
|
+
f.write("%% generator data\n")
|
643
|
+
f.write("%% bus Pg Qg Qmax Qmin Vg mBase status Pmax Pmin\n")
|
644
|
+
f.write("%% Pc1 Pc2 Qc1min Qc1max Qc2min Qc2max ramp_agc ramp_10 ramp_30 ramp_q apf\n")
|
645
|
+
f.write("mpc.gen = [\n")
|
646
|
+
for row in mpc['gen']:
|
647
|
+
f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
|
648
|
+
f.write("];\n\n")
|
649
|
+
|
650
|
+
# Write branch data
|
651
|
+
f.write("%% branch data\n")
|
652
|
+
f.write("%% fbus tbus r x b rateA rateB rateC ratio angle status angmin angmax PF QF PT QT\n")
|
653
|
+
f.write("mpc.branch = [\n")
|
654
|
+
for row in mpc['branch']:
|
655
|
+
f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
|
656
|
+
f.write("];\n\n")
|
657
|
+
|
658
|
+
# Write generator cost data if available
|
659
|
+
if 'gencost' in mpc:
|
660
|
+
f.write("%% generator cost data\n")
|
661
|
+
f.write("%% 1 startup shutdown n x1 y1 ... xn yn\n")
|
662
|
+
f.write("%% 2 startup shutdown n c(n-1) ... c0\n")
|
663
|
+
f.write("mpc.gencost = [\n")
|
664
|
+
for row in mpc['gencost']:
|
665
|
+
f.write(" " + "\t".join(f"{val:.6g}" for val in row) + ";\n")
|
666
|
+
f.write("];\n\n")
|
667
|
+
|
668
|
+
# Write bus names if available and not all None
|
669
|
+
if 'bus_name' in mpc and any(mpc['bus_name']):
|
670
|
+
f.write("%% bus names\n")
|
671
|
+
f.write("mpc.bus_name = {\n")
|
672
|
+
for name in mpc['bus_name']:
|
673
|
+
f.write(f" '{name}';\n")
|
674
|
+
f.write("};\n\n")
|
675
|
+
|
676
|
+
# Write generator types if available and not all None
|
677
|
+
if 'gentype' in mpc and any(mpc['gentype']):
|
678
|
+
f.write("%% generator types\n")
|
679
|
+
f.write("mpc.gentype = {\n")
|
680
|
+
for gentype in mpc['gentype']:
|
681
|
+
f.write(f" '{gentype}';\n")
|
682
|
+
f.write("};\n\n")
|
683
|
+
|
684
|
+
# Write generator fuels if available and not all None
|
685
|
+
if 'genfuel' in mpc and any(mpc['genfuel']):
|
686
|
+
f.write("%% generator fuels\n")
|
687
|
+
f.write("mpc.genfuel = {\n")
|
688
|
+
for genfuel in mpc['genfuel']:
|
689
|
+
f.write(f" '{genfuel}';\n")
|
690
|
+
f.write("};\n\n")
|
691
|
+
|
692
|
+
logger.info(f"Finished writing MATPOWER case to {outfile}")
|
693
|
+
return outfile
|
694
|
+
|
695
|
+
|
696
|
+
def write(system, outfile: str, overwrite: bool = None) -> bool:
|
697
|
+
"""
|
698
|
+
Export an AMS system to a MATPOWER mpc file.
|
699
|
+
|
700
|
+
This function converts an AMS system object into a MATPOWER-compatible
|
701
|
+
mpc dictionary and writes it to a specified output file in MATPOWER format.
|
702
|
+
|
703
|
+
Parameters
|
704
|
+
----------
|
705
|
+
system : ams.system.System
|
706
|
+
A loaded system.
|
707
|
+
outfile : str
|
708
|
+
Path to the output file.
|
709
|
+
overwrite : bool, optional
|
710
|
+
None to prompt for overwrite selection; True to overwrite; False to not overwrite.
|
711
|
+
|
712
|
+
Returns
|
713
|
+
-------
|
714
|
+
bool
|
715
|
+
True if the file was successfully written, False otherwise.
|
716
|
+
"""
|
717
|
+
if not confirm_overwrite(outfile, overwrite=overwrite):
|
718
|
+
return False
|
719
|
+
|
720
|
+
mpc = system2mpc(system)
|
721
|
+
mpc2m(mpc, outfile)
|
722
|
+
logger.info('MATPOWER m case file written to "%s"', outfile)
|
723
|
+
return True
|
@@ -101,3 +101,17 @@ def system2ppc(system) -> dict:
|
|
101
101
|
mpc['branch'][:, 0] = np.array([bus_map[busi0] for busi0 in mpc['branch'][:, 0].astype(int)])
|
102
102
|
mpc['branch'][:, 1] = np.array([bus_map[busi0] for busi0 in mpc['branch'][:, 1].astype(int)])
|
103
103
|
return mpc
|
104
|
+
|
105
|
+
|
106
|
+
def ppc2py(ppc: dict, outfile: str) -> str:
|
107
|
+
"""
|
108
|
+
Placeholder.
|
109
|
+
"""
|
110
|
+
return NotImplemented
|
111
|
+
|
112
|
+
|
113
|
+
def write(system, outfile: str) -> bool:
|
114
|
+
"""
|
115
|
+
Placeholder.
|
116
|
+
"""
|
117
|
+
return NotImplemented
|
@@ -179,75 +179,6 @@ class StaticGen(GroupBase):
|
|
179
179
|
|
180
180
|
The generator types and fuel types are referenced from MATPOWER.
|
181
181
|
|
182
|
-
Generator Types
|
183
|
-
---------------
|
184
|
-
The following codes represent the types of generators:
|
185
|
-
- BA : Energy Storage, Battery
|
186
|
-
- CE : Energy Storage, Compressed Air
|
187
|
-
- CP : Energy Storage, Concentrated Solar Power
|
188
|
-
- FW : Energy Storage, Flywheel
|
189
|
-
- PS : Hydraulic Turbine, Reversible (pumped storage)
|
190
|
-
- ES : Energy Storage, Other
|
191
|
-
- ST : Steam Turbine (includes nuclear, geothermal, and solar steam)
|
192
|
-
- GT : Combustion (Gas) Turbine
|
193
|
-
- IC : Internal Combustion Engine (diesel, piston, reciprocating)
|
194
|
-
- CA : Combined Cycle Steam Part
|
195
|
-
- CT : Combined Cycle Combustion Turbine Part
|
196
|
-
- CS : Combined Cycle Single Shaft
|
197
|
-
- CC : Combined Cycle Total Unit
|
198
|
-
- HA : Hydrokinetic, Axial Flow Turbine
|
199
|
-
- HB : Hydrokinetic, Wave Buoy
|
200
|
-
- HK : Hydrokinetic, Other
|
201
|
-
- HY : Hydroelectric Turbine
|
202
|
-
- BT : Turbines Used in a Binary Cycle
|
203
|
-
- PV : Photovoltaic
|
204
|
-
- WT : Wind Turbine, Onshore
|
205
|
-
- WS : Wind Turbine, Offshore
|
206
|
-
- FC : Fuel Cell
|
207
|
-
- OT : Other
|
208
|
-
- UN : Unknown
|
209
|
-
- JE : Jet Engine
|
210
|
-
- NB : ST - Boiling Water Nuclear Reactor
|
211
|
-
- NG : ST - Graphite Nuclear Reactor
|
212
|
-
- NH : ST - High Temperature Gas Nuclear Reactor
|
213
|
-
- NP : ST - Pressurized Water Nuclear Reactor
|
214
|
-
- IT : Internal Combustion Turbo Charged
|
215
|
-
- SC : Synchronous Condenser
|
216
|
-
- DC : DC ties
|
217
|
-
- MP : Motor/Pump
|
218
|
-
- W1 : Wind Turbine, Type 1
|
219
|
-
- W2 : Wind Turbine, Type 2
|
220
|
-
- W3 : Wind Turbine, Type 3
|
221
|
-
- W4 : Wind Turbine, Type 4
|
222
|
-
- SV : Static Var Compensator
|
223
|
-
- DL : Dispatchable Load
|
224
|
-
|
225
|
-
Fuel Types
|
226
|
-
----------
|
227
|
-
The following codes represent the fuel types:
|
228
|
-
- biomass : Biomass
|
229
|
-
- coal : Coal
|
230
|
-
- dfo : Distillate Fuel Oil
|
231
|
-
- geothermal : Geothermal
|
232
|
-
- hydro : Hydro
|
233
|
-
- hydrops : Hydro Pumped Storage
|
234
|
-
- jetfuel : Jet Fuel
|
235
|
-
- lng : Liquefied Natural Gas
|
236
|
-
- ng : Natural Gas
|
237
|
-
- nuclear : Nuclear
|
238
|
-
- oil : Unspecified Oil
|
239
|
-
- refuse : Refuse, Municipal Solid Waste
|
240
|
-
- rfo : Residual Fuel Oil
|
241
|
-
- solar : Solar
|
242
|
-
- syncgen : Synchronous Condenser
|
243
|
-
- wasteheat : Waste Heat
|
244
|
-
- wind : Wind
|
245
|
-
- wood : Wood or Wood Waste
|
246
|
-
- other : Other
|
247
|
-
- unknown : Unknown
|
248
|
-
- dl : Dispatchable Load
|
249
|
-
- ess : Energy Storage System
|
250
|
-
|
251
182
|
Notes
|
252
183
|
-----
|
253
184
|
For co-simulation with ANDES, refer to the `ANDES StaticGen Documentation
|
@@ -3,7 +3,6 @@ Module for report generation.
|
|
3
3
|
"""
|
4
4
|
import logging
|
5
5
|
from collections import OrderedDict
|
6
|
-
from time import strftime
|
7
6
|
from typing import List, Dict, Optional
|
8
7
|
|
9
8
|
from andes.io.txt import dump_data
|
@@ -11,7 +10,7 @@ from andes.shared import np
|
|
11
10
|
from andes.utils.misc import elapsed
|
12
11
|
|
13
12
|
from ams import __version__ as version
|
14
|
-
from ams.shared import copyright_msg
|
13
|
+
from ams.shared import copyright_msg, nowarranty_msg, report_time
|
15
14
|
|
16
15
|
logger = logging.getLogger(__name__)
|
17
16
|
|
@@ -23,9 +22,9 @@ def report_info(system) -> list:
|
|
23
22
|
info = list()
|
24
23
|
info.append('AMS' + ' ' + version + '\n')
|
25
24
|
info.append(f'{copyright_msg}\n\n')
|
26
|
-
info.append(
|
25
|
+
info.append(f"{nowarranty_msg}\n")
|
27
26
|
info.append('Case file: ' + str(system.files.case) + '\n')
|
28
|
-
info.append('Report time:
|
27
|
+
info.append(f'Report time: {report_time}\n\n')
|
29
28
|
return info
|
30
29
|
|
31
30
|
|
@@ -7,6 +7,7 @@ import logging
|
|
7
7
|
import unittest
|
8
8
|
from functools import wraps
|
9
9
|
from collections import OrderedDict
|
10
|
+
from time import strftime
|
10
11
|
|
11
12
|
import cvxpy as cp
|
12
13
|
|
@@ -35,7 +36,9 @@ _prefix = r" - --------------> | " # NOQA
|
|
35
36
|
_max_length = 80 # NOQA
|
36
37
|
|
37
38
|
# NOTE: copyright
|
38
|
-
copyright_msg =
|
39
|
+
copyright_msg = "Copyright (C) 2023-2025 Jinning Wang"
|
40
|
+
nowarranty_msg = "AMS comes with ABSOLUTELY NO WARRANTY"
|
41
|
+
report_time = strftime("%m/%d/%Y %I:%M:%S %p")
|
39
42
|
|
40
43
|
# NOTE: copied from CVXPY documentation, last checked on 2024/10/30, v1.5
|
41
44
|
mip_solvers = ['CBC', 'COPT', 'GLPK_MI', 'CPLEX', 'GUROBI',
|
@@ -181,3 +181,138 @@ Generator Cost Data
|
|
181
181
|
|
182
182
|
#. Not currently used by any Matpower functions.
|
183
183
|
#. MODEL = 1, :math:`f(p)` is defined by the coordinates :math:`(p_1, f_1), (p_2, f_2), . . . , (p_N , f_N)`; MODEL = 2, :math:`f(p) = c_{n}p^{n} + ... + c_{1}p^{1} + c_{0}`.
|
184
|
+
|
185
|
+
|
186
|
+
Generator Types
|
187
|
+
~~~~~~~~~~~~~~~~~~~~
|
188
|
+
+------+---------------------------------------------------------------+
|
189
|
+
| code | description |
|
190
|
+
+------+---------------------------------------------------------------+
|
191
|
+
| BA | Energy Storage, Battery |
|
192
|
+
+------+---------------------------------------------------------------+
|
193
|
+
| CE | Energy Storage, Compressed Air |
|
194
|
+
+------+---------------------------------------------------------------+
|
195
|
+
| CP | Energy Storage, Concentrated Solar Power |
|
196
|
+
+------+---------------------------------------------------------------+
|
197
|
+
| FW | Energy Storage, Flywheel |
|
198
|
+
+------+---------------------------------------------------------------+
|
199
|
+
| PS | Hydraulic Turbine, Reversible (pumped storage) |
|
200
|
+
+------+---------------------------------------------------------------+
|
201
|
+
| ES | Energy Storage, Other |
|
202
|
+
+------+---------------------------------------------------------------+
|
203
|
+
| ST | Steam Turbine (includes nuclear, geothermal, and solar steam) |
|
204
|
+
+------+---------------------------------------------------------------+
|
205
|
+
| GT | Combustion (Gas) Turbine |
|
206
|
+
+------+---------------------------------------------------------------+
|
207
|
+
| IC | Internal Combustion Engine (diesel, piston, reciprocating) |
|
208
|
+
+------+---------------------------------------------------------------+
|
209
|
+
| CA | Combined Cycle Steam Part |
|
210
|
+
+------+---------------------------------------------------------------+
|
211
|
+
| CT | Combined Cycle Combustion Turbine Part |
|
212
|
+
+------+---------------------------------------------------------------+
|
213
|
+
| CS | Combined Cycle Single Shaft |
|
214
|
+
+------+---------------------------------------------------------------+
|
215
|
+
| CC | Combined Cycle Total Unit |
|
216
|
+
+------+---------------------------------------------------------------+
|
217
|
+
| HA | Hydrokinetic, Axial Flow Turbine |
|
218
|
+
+------+---------------------------------------------------------------+
|
219
|
+
| HB | Hydrokinetic, Wave Buoy |
|
220
|
+
+------+---------------------------------------------------------------+
|
221
|
+
| HK | Hydrokinetic, Other |
|
222
|
+
+------+---------------------------------------------------------------+
|
223
|
+
| HY | Hydroelectric Turbine |
|
224
|
+
+------+---------------------------------------------------------------+
|
225
|
+
| BT | Turbines Used in a Binary Cycle |
|
226
|
+
+------+---------------------------------------------------------------+
|
227
|
+
| PV | Photovoltaic |
|
228
|
+
+------+---------------------------------------------------------------+
|
229
|
+
| WT | Wind Turbine, Onshore |
|
230
|
+
+------+---------------------------------------------------------------+
|
231
|
+
| WS | Wind Turbine, Offshore |
|
232
|
+
+------+---------------------------------------------------------------+
|
233
|
+
| FC | Fuel Cell |
|
234
|
+
+------+---------------------------------------------------------------+
|
235
|
+
| OT | Other |
|
236
|
+
+------+---------------------------------------------------------------+
|
237
|
+
| UN | Unknown |
|
238
|
+
+------+---------------------------------------------------------------+
|
239
|
+
| JE | Jet Engine |
|
240
|
+
+------+---------------------------------------------------------------+
|
241
|
+
| NB | ST - Boiling Water Nuclear Reactor |
|
242
|
+
+------+---------------------------------------------------------------+
|
243
|
+
| NG | ST - Graphite Nuclear Reactor |
|
244
|
+
+------+---------------------------------------------------------------+
|
245
|
+
| NH | ST - High Temperature Gas Nuclear Reactor |
|
246
|
+
+------+---------------------------------------------------------------+
|
247
|
+
| NP | ST - Pressurized Water Nuclear Reactor |
|
248
|
+
+------+---------------------------------------------------------------+
|
249
|
+
| IT | Internal Combustion Turbo Charged |
|
250
|
+
+------+---------------------------------------------------------------+
|
251
|
+
| SC | Synchronous Condenser |
|
252
|
+
+------+---------------------------------------------------------------+
|
253
|
+
| DC | DC ties |
|
254
|
+
+------+---------------------------------------------------------------+
|
255
|
+
| MP | Motor/Pump |
|
256
|
+
+------+---------------------------------------------------------------+
|
257
|
+
| W1 | Wind Turbine, Type 1 |
|
258
|
+
+------+---------------------------------------------------------------+
|
259
|
+
| W2 | Wind Turbine, Type 2 |
|
260
|
+
+------+---------------------------------------------------------------+
|
261
|
+
| W3 | Wind Turbine, Type 3 |
|
262
|
+
+------+---------------------------------------------------------------+
|
263
|
+
| W4 | Wind Turbine, Type 4 |
|
264
|
+
+------+---------------------------------------------------------------+
|
265
|
+
| SV | Static Var Compensator |
|
266
|
+
+------+---------------------------------------------------------------+
|
267
|
+
| DL | Dispatchable Load |
|
268
|
+
+------+---------------------------------------------------------------+
|
269
|
+
|
270
|
+
Fuel Types
|
271
|
+
~~~~~~~~~~~~~~~~
|
272
|
+
+-------------+---------------------------------------+
|
273
|
+
| code | description |
|
274
|
+
+-------------+---------------------------------------+
|
275
|
+
| biomass | Biomass |
|
276
|
+
+-------------+---------------------------------------+
|
277
|
+
| coal | Coal |
|
278
|
+
+-------------+---------------------------------------+
|
279
|
+
| dfo | Distillate Fuel Oil |
|
280
|
+
+-------------+---------------------------------------+
|
281
|
+
| geothermal | Geothermal |
|
282
|
+
+-------------+---------------------------------------+
|
283
|
+
| hydro | Hydro |
|
284
|
+
+-------------+---------------------------------------+
|
285
|
+
| hydrops | Hydro Pumped Storage |
|
286
|
+
+-------------+---------------------------------------+
|
287
|
+
| jetfuel | Jet Fuel |
|
288
|
+
+-------------+---------------------------------------+
|
289
|
+
| lng | Liquefied Natural Gas |
|
290
|
+
+-------------+---------------------------------------+
|
291
|
+
| ng | Natural Gas |
|
292
|
+
+-------------+---------------------------------------+
|
293
|
+
| nuclear | Nuclear |
|
294
|
+
+-------------+---------------------------------------+
|
295
|
+
| oil | Unspecified Oil |
|
296
|
+
+-------------+---------------------------------------+
|
297
|
+
| refuse | Refuse, Municipal Solid Waste |
|
298
|
+
+-------------+---------------------------------------+
|
299
|
+
| rfo | Residual Fuel Oil |
|
300
|
+
+-------------+---------------------------------------+
|
301
|
+
| solar | Solar |
|
302
|
+
+-------------+---------------------------------------+
|
303
|
+
| syncgen | Synchronous Condenser |
|
304
|
+
+-------------+---------------------------------------+
|
305
|
+
| wasteheat | Waste Heat |
|
306
|
+
+-------------+---------------------------------------+
|
307
|
+
| wind | Wind |
|
308
|
+
+-------------+---------------------------------------+
|
309
|
+
| wood | Wood or Wood Waste |
|
310
|
+
+-------------+---------------------------------------+
|
311
|
+
| other | Other |
|
312
|
+
+-------------+---------------------------------------+
|
313
|
+
| unknown | Unknown |
|
314
|
+
+-------------+---------------------------------------+
|
315
|
+
| dl | Dispatchable Load |
|
316
|
+
+-------------+---------------------------------------+
|
317
|
+
| ess | Energy Storage System |
|
318
|
+
+-------------+---------------------------------------+
|
@@ -3,8 +3,7 @@
|
|
3
3
|
PYPOWER
|
4
4
|
--------
|
5
5
|
|
6
|
-
AMS
|
7
|
-
in version 2 for scheduling modeling and analysis. PYPOWER cases follow the same format as MATPOWER.
|
6
|
+
AMS supports PYPOWER PY case file. PYPOWER cases follow a similar format as MATPOWER.
|
8
7
|
|
9
8
|
The PYPOWER case is defined as a Python dictionary that includes ``bus``, ``gen``, ``branch``,
|
10
9
|
``areas``, and ``gencost``.
|
@@ -9,6 +9,14 @@ The APIs before v3.0.0 are in beta and may change without prior notice.
|
|
9
9
|
v1.0
|
10
10
|
==========
|
11
11
|
|
12
|
+
v1.0.9 (2024-04-23)
|
13
|
+
--------------------
|
14
|
+
|
15
|
+
Improve MATPOWER file converter:
|
16
|
+
|
17
|
+
- Add a M file case writer
|
18
|
+
- Include Area and Zone in both MATPOWER read and write
|
19
|
+
|
12
20
|
v1.0.8 (2024-04-20)
|
13
21
|
--------------------
|
14
22
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ltbams
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.9
|
4
4
|
Summary: Python software for scheduling modeling and co-simulation with dynamics.
|
5
5
|
Home-page: https://github.com/CURENT/ams
|
6
6
|
Author: Jinning Wang
|
@@ -52,9 +52,9 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
52
52
|
|
53
53
|
<img src="docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png" alt="CURENT ERC Logo" width="300" height="auto">
|
54
54
|
|
55
|
-
| | Stable |
|
55
|
+
| | Stable | Develop |
|
56
56
|
|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
|
57
|
-
| Documentation | [](https://ams.readthedocs.io/en/stable/?badge=stable) | [](https://ams.readthedocs.io/en/stable/?badge=stable) | [](https://ams.readthedocs.io/en/develop/?badge=develop) |
|
58
58
|
|
59
59
|
|
60
60
|
| Badges | | |
|