ltbams 1.0.3a1__tar.gz → 1.0.5__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.3a1/ltbams.egg-info → ltbams-1.0.5}/PKG-INFO +11 -5
- {ltbams-1.0.3a1 → ltbams-1.0.5}/README.md +9 -3
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/_version.py +3 -3
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/matprocessor.py +0 -19
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/exprcalc.py +3 -1
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/__init__.py +1 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/dcopf.py +6 -2
- ltbams-1.0.5/ams/routines/dcopf2.py +95 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/routine.py +2 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/examples/index.rst +2 -1
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/release-notes.rst +18 -3
- {ltbams-1.0.3a1 → ltbams-1.0.5/ltbams.egg-info}/PKG-INFO +11 -5
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ltbams.egg-info/SOURCES.txt +2 -0
- ltbams-1.0.5/tests/test_rtn_dcopf2.py +103 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/CONTRIBUTING.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/LICENSE +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/MANIFEST.in +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/__main__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/5bus/pjm5bus_demo.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/5bus/pjm5bus_jumper.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/5bus/pjm5bus_uced.json +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/5bus/pjm5bus_uced.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/5bus/pjm5bus_uced_esd1.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/5bus/pjm5bus_uced_ev.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee123/ieee123.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee123/ieee123_regcv1.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee14/ieee14.json +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee14/ieee14.raw +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee14/ieee14_conn.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee14/ieee14_uced.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee39/ieee39.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee39/ieee39_uced.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee39/ieee39_uced_esd1.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee39/ieee39_uced_pvd1.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/ieee39/ieee39_uced_vis.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/matpower/benchmark.json +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/matpower/case118.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/matpower/case14.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/matpower/case300.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/matpower/case39.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/matpower/case5.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/matpower/case_ACTIVSg2000.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/npcc/npcc.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/npcc/npcc_uced.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/pglib/pglib_opf_case39_epri__api.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/wecc/wecc.m +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cases/wecc/wecc_uced.xlsx +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/cli.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/documenter.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/model.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/param.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/service.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/symprocessor.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/core/var.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/extension/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/extension/eva.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/interface.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/io/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/io/json.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/io/matpower.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/io/psse.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/io/pypower.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/io/xlsx.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/main.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/area.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/bus.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/cost.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/distributed/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/distributed/esd1.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/distributed/ev.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/distributed/pvd1.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/group.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/info.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/line.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/renewable/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/renewable/regc.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/reserve.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/shunt.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/static/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/static/gen.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/static/pq.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/timeslot.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/models/zone.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/constraint.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/expression.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/objective.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/omodel.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/optzbase.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/param.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/opt/var.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/_compat.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/core/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/core/pips.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/core/ppoption.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/core/ppver.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/core/solver.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/eps.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/idx.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/io.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/make/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/make/matrices.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/make/pdv.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/routines/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/routines/cpf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/routines/cpf_callbacks.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/routines/opf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/routines/opffcns.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/routines/pflow.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/toggle.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/pypower/utils.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/report.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/acopf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/cpf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/dcpf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/dcpf0.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/dopf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/ed.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/pflow.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/pflow0.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/rted.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/type.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/routines/uc.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/shared.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/system.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/utils/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/utils/misc.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ams/utils/paths.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/Makefile +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/make.bat +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/_templates/autosummary/base.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/_templates/autosummary/class.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/_templates/autosummary/module.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/_templates/autosummary/module_toctree.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/api.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/conf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/genmodelref.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/genroutineref.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/copyright.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/formats/index.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/formats/matpower.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/formats/psse.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/formats/pypower.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/formats/xlsx.png +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/formats/xlsx.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/index.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/install.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/overview.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/testcase.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/getting_started/verification.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/images/curent.ico +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/images/dcopf_time.png +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/images/sponsors/CURENT_Logo_NameOnTrans.png +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/images/sponsors/CURENT_Logo_Transparent.png +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/images/sponsors/CURENT_Logo_Transparent_Name.png +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/images/sponsors/doe.png +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/index.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/modeling/example.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/modeling/index.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/modeling/model.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/modeling/routine.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/docs/source/modeling/system.rst +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ltbams.egg-info/dependency_links.txt +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ltbams.egg-info/entry_points.txt +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ltbams.egg-info/requires.txt +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/ltbams.egg-info/top_level.txt +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/pyproject.toml +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/requirements-dev.txt +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/requirements.txt +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/setup.cfg +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/setup.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/__init__.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_1st_system.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_addressing.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_andes_mats.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_case.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_cli.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_export_csv.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_group.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_interface.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_io.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_jumper.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_known_good.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_matp.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_model.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_omodel.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_paths.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_report.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_repr.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_routine.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_rtn_dcopf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_rtn_dcpf.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_rtn_ed.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_rtn_pflow.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_rtn_rted.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_rtn_uc.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/tests/test_service.py +0 -0
- {ltbams-1.0.3a1 → ltbams-1.0.5}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: ltbams
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.5
|
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
|
@@ -33,11 +33,17 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
33
33
|
[](https://github.com/CURENT/ams/blob/master/LICENSE)
|
34
34
|

|
35
35
|
[](https://www.python.org/)
|
36
|
+
[](https://ieeexplore.ieee.org/document/10836855)
|
36
37
|
[](https://www.repostatus.org/#active)
|
37
|
-
](https://codecov.io/gh/CURENT/ams)
|
39
|
+
|
40
|
+
[](https://github.com/CURENT/ams/tags)
|
41
|
+

|
38
42
|
[](https://github.com/CURENT/ams/commits/master/)
|
39
43
|
[](https://github.com/CURENT/ams/commits/develop/)
|
44
|
+
|
40
45
|
[](https://libraries.io/pypi/ltbams)
|
46
|
+

|
41
47
|
[](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams)
|
42
48
|
|
43
49
|
[](https://github.com/CURENT/ams/actions/workflows/compatibility.yml)
|
@@ -146,7 +152,7 @@ pip install git+https://github.com/CURENT/ams.git
|
|
146
152
|
- `cvxpy` is distributed with the open source solvers CLARABEL, OSQP, and SCS, but MIP-capable solvers need separate installation
|
147
153
|
- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above**
|
148
154
|
- If the solver `SCIP` encounters an import error caused by a missing `libscip.9.1.dylib`, try reinstalling its Python interface by running `pip install pyscipopt --no-binary scip --force`
|
149
|
-
- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries
|
155
|
+
- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries, more detailes can be found in this closed issue [Bug with dependency kvxopt 1.3.2.0](https://github.com/CURENT/andes/issues/508)
|
150
156
|
- Versions **1.0.0** and **1.0.1** are only available on PyPI
|
151
157
|
- Version **0.9.9** has known issues and has been yanked from PyPI
|
152
158
|
|
@@ -212,4 +218,4 @@ Some commercial solvers provide academic licenses, such as COPT, GUROBI, CPLEX,
|
|
212
218
|
[Binder]: https://mybinder.org/v2/gh/curent/ams/master
|
213
219
|
[LTB Repository]: https://github.com/CURENT
|
214
220
|
[benchmark]: https://github.com/CURENT/demo/tree/master/demo/ams_benchmark
|
215
|
-
[paper]: https://ieeexplore.ieee.org/document/
|
221
|
+
[paper]: https://ieeexplore.ieee.org/document/10836855
|
@@ -5,11 +5,17 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
5
5
|
[](https://github.com/CURENT/ams/blob/master/LICENSE)
|
6
6
|

|
7
7
|
[](https://www.python.org/)
|
8
|
+
[](https://ieeexplore.ieee.org/document/10836855)
|
8
9
|
[](https://www.repostatus.org/#active)
|
9
|
-
](https://codecov.io/gh/CURENT/ams)
|
11
|
+
|
12
|
+
[](https://github.com/CURENT/ams/tags)
|
13
|
+

|
10
14
|
[](https://github.com/CURENT/ams/commits/master/)
|
11
15
|
[](https://github.com/CURENT/ams/commits/develop/)
|
16
|
+
|
12
17
|
[](https://libraries.io/pypi/ltbams)
|
18
|
+

|
13
19
|
[](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams)
|
14
20
|
|
15
21
|
[](https://github.com/CURENT/ams/actions/workflows/compatibility.yml)
|
@@ -118,7 +124,7 @@ pip install git+https://github.com/CURENT/ams.git
|
|
118
124
|
- `cvxpy` is distributed with the open source solvers CLARABEL, OSQP, and SCS, but MIP-capable solvers need separate installation
|
119
125
|
- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above**
|
120
126
|
- If the solver `SCIP` encounters an import error caused by a missing `libscip.9.1.dylib`, try reinstalling its Python interface by running `pip install pyscipopt --no-binary scip --force`
|
121
|
-
- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries
|
127
|
+
- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries, more detailes can be found in this closed issue [Bug with dependency kvxopt 1.3.2.0](https://github.com/CURENT/andes/issues/508)
|
122
128
|
- Versions **1.0.0** and **1.0.1** are only available on PyPI
|
123
129
|
- Version **0.9.9** has known issues and has been yanked from PyPI
|
124
130
|
|
@@ -184,4 +190,4 @@ Some commercial solvers provide academic licenses, such as COPT, GUROBI, CPLEX,
|
|
184
190
|
[Binder]: https://mybinder.org/v2/gh/curent/ams/master
|
185
191
|
[LTB Repository]: https://github.com/CURENT
|
186
192
|
[benchmark]: https://github.com/CURENT/demo/tree/master/demo/ams_benchmark
|
187
|
-
[paper]: https://ieeexplore.ieee.org/document/
|
193
|
+
[paper]: https://ieeexplore.ieee.org/document/10836855
|
@@ -8,11 +8,11 @@ import json
|
|
8
8
|
|
9
9
|
version_json = '''
|
10
10
|
{
|
11
|
-
"date": "2025-
|
11
|
+
"date": "2025-04-09T22:08:11-0400",
|
12
12
|
"dirty": false,
|
13
13
|
"error": null,
|
14
|
-
"full-revisionid": "
|
15
|
-
"version": "1.0.
|
14
|
+
"full-revisionid": "115b1575b21ff871fe878121b3ca1cb6020b1a93",
|
15
|
+
"version": "1.0.5"
|
16
16
|
}
|
17
17
|
''' # END VERSION_JSON
|
18
18
|
|
@@ -485,25 +485,6 @@ class MatProcessor:
|
|
485
485
|
If True, use UMFPACK as the solver. Effective only when (`incremental=True`)
|
486
486
|
& (`line` contains a single line or `step` is 1). Default is True.
|
487
487
|
|
488
|
-
Parameters
|
489
|
-
----------
|
490
|
-
line: int, str, list, optional
|
491
|
-
Lines index for which the PTDF is calculated. It takes both single
|
492
|
-
or multiple line indices. Note that if `line` is given, the PTDF will
|
493
|
-
not be stored in the MParam.
|
494
|
-
no_store : bool, optional
|
495
|
-
If False, the PTDF will be stored into `MatProcessor.PTDF._v`.
|
496
|
-
incremental : bool, optional
|
497
|
-
If True, the sparse PTDF will be calculated in chunks to save memory.
|
498
|
-
step : int, optional
|
499
|
-
Step for incremental calculation.
|
500
|
-
no_tqdm : bool, optional
|
501
|
-
If True, the progress bar will be disabled.
|
502
|
-
permc_spec : str, optional
|
503
|
-
How to permute the columns of the matrix for sparsity preservation. (default: 'COLAMD')
|
504
|
-
use_umfpack : bool, optional
|
505
|
-
If True, use UMFPACK as the solver. (default: True)
|
506
|
-
|
507
488
|
Returns
|
508
489
|
-------
|
509
490
|
PTDF : np.ndarray or scipy.sparse.lil_matrix
|
@@ -8,6 +8,8 @@ import re
|
|
8
8
|
|
9
9
|
import numpy as np
|
10
10
|
|
11
|
+
from ams.shared import sps # NOQA
|
12
|
+
|
11
13
|
import cvxpy as cp
|
12
14
|
|
13
15
|
from ams.utils import pretty_long_message
|
@@ -68,7 +70,7 @@ class ExpressionCalc(OptzBase):
|
|
68
70
|
msg = f" - Expression <{self.name}>: {self.code}"
|
69
71
|
logger.debug(pretty_long_message(msg, _prefix, max_length=_max_length))
|
70
72
|
try:
|
71
|
-
local_vars = {'self': self, 'np': np, 'cp': cp}
|
73
|
+
local_vars = {'self': self, 'np': np, 'cp': cp, 'sps': sps}
|
72
74
|
self.optz = self._evaluate_expression(self.code, local_vars=local_vars)
|
73
75
|
except Exception as e:
|
74
76
|
raise Exception(f"Error in evaluating ExpressionCalc <{self.name}>.\n{e}")
|
@@ -19,7 +19,11 @@ class DCOPF(DCPFBase):
|
|
19
19
|
"""
|
20
20
|
DC optimal power flow (DCOPF).
|
21
21
|
|
22
|
-
|
22
|
+
Notes
|
23
|
+
-----
|
24
|
+
1. The nodal price is calculated as ``pi`` in ``pic``.
|
25
|
+
1. Devices online status of `StaticGen`, `StaticLoad`, and `Shunt` are considered in the connectivity
|
26
|
+
matrices `Cft`, `Cg`, `Cl`, and `Csh`.
|
23
27
|
|
24
28
|
References
|
25
29
|
----------
|
@@ -153,7 +157,7 @@ class DCOPF(DCPFBase):
|
|
153
157
|
Parameters
|
154
158
|
----------
|
155
159
|
kloss : float, optional
|
156
|
-
The loss factor for the conversion. Defaults to 1.
|
160
|
+
The loss factor for the conversion. Defaults to 1.0.
|
157
161
|
"""
|
158
162
|
exec_time = self.exec_time
|
159
163
|
if self.exec_time == 0 or self.exit_code != 0:
|
@@ -0,0 +1,95 @@
|
|
1
|
+
"""
|
2
|
+
DCOPF routines.
|
3
|
+
"""
|
4
|
+
import logging
|
5
|
+
|
6
|
+
import numpy as np
|
7
|
+
from ams.core.param import RParam
|
8
|
+
from ams.core.service import NumOp
|
9
|
+
|
10
|
+
from ams.routines.dcopf import DCOPF
|
11
|
+
from ams.opt import ExpressionCalc
|
12
|
+
|
13
|
+
from ams.shared import sps
|
14
|
+
|
15
|
+
|
16
|
+
logger = logging.getLogger(__name__)
|
17
|
+
|
18
|
+
|
19
|
+
class DCOPF2(DCOPF):
|
20
|
+
"""
|
21
|
+
DC optimal power flow (DCOPF) using PTDF.
|
22
|
+
For large cases, it is recommended to build the PTDF first, especially when incremental
|
23
|
+
build is necessary.
|
24
|
+
|
25
|
+
Notes
|
26
|
+
-----
|
27
|
+
1. This routine requires PTDF matrix.
|
28
|
+
1. Nodal price ``pi`` is calculated with three parts.
|
29
|
+
1. Bus angle ``aBus`` is calculated after solving the problem.
|
30
|
+
"""
|
31
|
+
|
32
|
+
def __init__(self, system, config):
|
33
|
+
DCOPF.__init__(self, system, config)
|
34
|
+
self.info = 'DCOPF using PTDF'
|
35
|
+
self.type = 'DCED'
|
36
|
+
|
37
|
+
# NOTE: in this way, we still follow the implementation that devices
|
38
|
+
# connectivity status is considered in connection matrix
|
39
|
+
self.ued = NumOp(u=self.Cl,
|
40
|
+
name='ued', tex_name=r'u_{e,d}',
|
41
|
+
info='Effective load connection status',
|
42
|
+
fun=np.sum, args=dict(axis=0),
|
43
|
+
no_parse=True)
|
44
|
+
self.uesh = NumOp(u=self.Csh,
|
45
|
+
name='uesh', tex_name=r'u_{e,sh}',
|
46
|
+
info='Effective shunt connection status',
|
47
|
+
fun=np.sum, args=dict(axis=0),
|
48
|
+
no_parse=True)
|
49
|
+
|
50
|
+
self.PTDF = RParam(info='PTDF',
|
51
|
+
name='PTDF', tex_name=r'P_{TDF}',
|
52
|
+
model='mats', src='PTDF',
|
53
|
+
no_parse=True, sparse=True)
|
54
|
+
|
55
|
+
# --- rewrite Expression plf: line flow---
|
56
|
+
self.plf.e_str = 'PTDF @ (Cg@pg - Cl@pd - Csh@gsh - Pbusinj)'
|
57
|
+
|
58
|
+
# --- rewrite nodal price ---
|
59
|
+
self.Cft = RParam(info='Line connection matrix',
|
60
|
+
name='Cft', tex_name=r'C_{ft}',
|
61
|
+
model='mats', src='Cft',
|
62
|
+
no_parse=True, sparse=True,)
|
63
|
+
self.pilb = ExpressionCalc(info='Congestion price, dual of <plflb>',
|
64
|
+
name='pilb',
|
65
|
+
model='Line', src=None,
|
66
|
+
e_str='plflb.dual_variables[0]')
|
67
|
+
self.piub = ExpressionCalc(info='Congestion price, dual of <plfub>',
|
68
|
+
name='piub',
|
69
|
+
model='Line', src=None,
|
70
|
+
e_str='plfub.dual_variables[0]')
|
71
|
+
self.pib = ExpressionCalc(info='Energy price, dual of <pb>',
|
72
|
+
name='pib',
|
73
|
+
model='Bus', src=None,
|
74
|
+
e_str='pb.dual_variables[0]')
|
75
|
+
pi = 'pb.dual_variables[0] + Cft@(plfub.dual_variables[0] - plflb.dual_variables[0])'
|
76
|
+
self.pi.e_str = pi
|
77
|
+
|
78
|
+
def _post_solve(self):
|
79
|
+
"""Calculate aBus"""
|
80
|
+
super()._post_solve()
|
81
|
+
sys = self.system
|
82
|
+
Pbus = sys.mats.Cg._v @ self.pg.v
|
83
|
+
Pbus -= sys.mats.Cl._v @ self.pd.v
|
84
|
+
Pbus -= sys.mats.Csh._v @ self.gsh.v
|
85
|
+
Pbus -= self.Pbusinj.v
|
86
|
+
aBus = sps.linalg.spsolve(sys.mats.Bbus._v, Pbus)
|
87
|
+
slack0_uid = sys.Bus.idx2uid(sys.Slack.bus.v[0])
|
88
|
+
self.aBus.v = aBus - aBus[slack0_uid]
|
89
|
+
return super()._post_solve()
|
90
|
+
|
91
|
+
def init(self, **kwargs):
|
92
|
+
if self.system.mats.PTDF._v is None:
|
93
|
+
logger.warning('PTDF is not available, build it now')
|
94
|
+
self.system.mats.build_ptdf()
|
95
|
+
return super().init(**kwargs)
|
@@ -585,6 +585,8 @@ class RoutineBase:
|
|
585
585
|
True to rebuild the system matrices. Set to False to speed up the process
|
586
586
|
if no system matrices are changed.
|
587
587
|
"""
|
588
|
+
if not self.initialized:
|
589
|
+
return self.init()
|
588
590
|
t0, _ = elapsed()
|
589
591
|
re_finalize = False
|
590
592
|
# sanitize input
|
@@ -6,17 +6,29 @@ Release notes
|
|
6
6
|
|
7
7
|
The APIs before v3.0.0 are in beta and may change without prior notice.
|
8
8
|
|
9
|
-
|
9
|
+
v1.0
|
10
10
|
==========
|
11
11
|
|
12
|
-
v1.0.
|
12
|
+
v1.0.5 (2024-04-09)
|
13
|
+
--------------------
|
14
|
+
|
15
|
+
- Include sensitivity matrices calculation demo in documentation
|
16
|
+
- Add ``DCOPF2``, a PTDF-based DCOPF routine
|
17
|
+
- Fix bug when update routine parameters before it is initialized
|
18
|
+
|
19
|
+
v1.0.4 (2024-04-05)
|
20
|
+
--------------------
|
13
21
|
|
22
|
+
- Fix format in release notes
|
23
|
+
- Add badges of GitHub relesase and commits in README
|
24
|
+
- Add a demo to show sensitivity matrices calculation
|
25
|
+
|
26
|
+
v1.0.3 (2024-03-17)
|
14
27
|
--------------------
|
15
28
|
|
16
29
|
- Bug fix in function ``ams.interface.parse_addfile``, released in v1.0.3a1
|
17
30
|
|
18
31
|
v1.0.2 (2024-02-01)
|
19
|
-
|
20
32
|
--------------------
|
21
33
|
|
22
34
|
- Enhance the GitHub Actions workflow file
|
@@ -41,6 +53,9 @@ v1.0.0 (2024-01-24)
|
|
41
53
|
- Deprecate method ``get_idx`` and suggest using ``get_all_idxes`` instead
|
42
54
|
- Remove module ``benchmarks.py`` and its tests for simplicity
|
43
55
|
|
56
|
+
Pre-v1.0
|
57
|
+
==========
|
58
|
+
|
44
59
|
v0.9.13 (2024-12-05)
|
45
60
|
--------------------
|
46
61
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: ltbams
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.5
|
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
|
@@ -33,11 +33,17 @@ Python Software for Power System Scheduling Modeling and Co-Simulation with Dyna
|
|
33
33
|
[](https://github.com/CURENT/ams/blob/master/LICENSE)
|
34
34
|

|
35
35
|
[](https://www.python.org/)
|
36
|
+
[](https://ieeexplore.ieee.org/document/10836855)
|
36
37
|
[](https://www.repostatus.org/#active)
|
37
|
-
](https://codecov.io/gh/CURENT/ams)
|
39
|
+
|
40
|
+
[](https://github.com/CURENT/ams/tags)
|
41
|
+

|
38
42
|
[](https://github.com/CURENT/ams/commits/master/)
|
39
43
|
[](https://github.com/CURENT/ams/commits/develop/)
|
44
|
+
|
40
45
|
[](https://libraries.io/pypi/ltbams)
|
46
|
+

|
41
47
|
[](https://mango-dune-07a8b7110.1.azurestaticapps.net/?repo=CURENT%2Fams)
|
42
48
|
|
43
49
|
[](https://github.com/CURENT/ams/actions/workflows/compatibility.yml)
|
@@ -146,7 +152,7 @@ pip install git+https://github.com/CURENT/ams.git
|
|
146
152
|
- `cvxpy` is distributed with the open source solvers CLARABEL, OSQP, and SCS, but MIP-capable solvers need separate installation
|
147
153
|
- `cvxpy` versions **below 1.5** are incompatible with `numpy` versions **2.0 and above**
|
148
154
|
- If the solver `SCIP` encounters an import error caused by a missing `libscip.9.1.dylib`, try reinstalling its Python interface by running `pip install pyscipopt --no-binary scip --force`
|
149
|
-
- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries
|
155
|
+
- `kvxopt` is recommended to install via `conda` as sometimes ``pip`` struggles to set the correct path for compiled libraries, more detailes can be found in this closed issue [Bug with dependency kvxopt 1.3.2.0](https://github.com/CURENT/andes/issues/508)
|
150
156
|
- Versions **1.0.0** and **1.0.1** are only available on PyPI
|
151
157
|
- Version **0.9.9** has known issues and has been yanked from PyPI
|
152
158
|
|
@@ -212,4 +218,4 @@ Some commercial solvers provide academic licenses, such as COPT, GUROBI, CPLEX,
|
|
212
218
|
[Binder]: https://mybinder.org/v2/gh/curent/ams/master
|
213
219
|
[LTB Repository]: https://github.com/CURENT
|
214
220
|
[benchmark]: https://github.com/CURENT/demo/tree/master/demo/ams_benchmark
|
215
|
-
[paper]: https://ieeexplore.ieee.org/document/
|
221
|
+
[paper]: https://ieeexplore.ieee.org/document/10836855
|
@@ -116,6 +116,7 @@ ams/routines/__init__.py
|
|
116
116
|
ams/routines/acopf.py
|
117
117
|
ams/routines/cpf.py
|
118
118
|
ams/routines/dcopf.py
|
119
|
+
ams/routines/dcopf2.py
|
119
120
|
ams/routines/dcpf.py
|
120
121
|
ams/routines/dcpf0.py
|
121
122
|
ams/routines/dopf.py
|
@@ -191,6 +192,7 @@ tests/test_report.py
|
|
191
192
|
tests/test_repr.py
|
192
193
|
tests/test_routine.py
|
193
194
|
tests/test_rtn_dcopf.py
|
195
|
+
tests/test_rtn_dcopf2.py
|
194
196
|
tests/test_rtn_dcpf.py
|
195
197
|
tests/test_rtn_ed.py
|
196
198
|
tests/test_rtn_pflow.py
|
@@ -0,0 +1,103 @@
|
|
1
|
+
import unittest
|
2
|
+
import numpy as np
|
3
|
+
|
4
|
+
import ams
|
5
|
+
|
6
|
+
|
7
|
+
class TestDCOPF2(unittest.TestCase):
|
8
|
+
"""
|
9
|
+
Test routine `DCOPF2`.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def setUp(self) -> None:
|
13
|
+
self.ss = ams.load(ams.get_case("5bus/pjm5bus_demo.xlsx"),
|
14
|
+
setup=True, default_config=True, no_output=True)
|
15
|
+
# decrease load first
|
16
|
+
self.ss.PQ.set(src='p0', attr='v', idx=['PQ_1', 'PQ_2'], value=[0.3, 0.3])
|
17
|
+
# build PTDF
|
18
|
+
self.ss.mats.build_ptdf()
|
19
|
+
|
20
|
+
def test_init(self):
|
21
|
+
"""
|
22
|
+
Test initialization.
|
23
|
+
"""
|
24
|
+
self.ss.DCOPF2.init()
|
25
|
+
self.assertTrue(self.ss.DCOPF2.initialized, "DCOPF2 initialization failed!")
|
26
|
+
|
27
|
+
def test_trip_gen(self):
|
28
|
+
"""
|
29
|
+
Test generator tripping.
|
30
|
+
"""
|
31
|
+
stg = 'PV_1'
|
32
|
+
self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=0)
|
33
|
+
|
34
|
+
self.ss.DCOPF2.update()
|
35
|
+
self.ss.DCOPF2.run(solver='CLARABEL')
|
36
|
+
self.assertTrue(self.ss.DCOPF2.converged, "DCOPF2 did not converge under generator trip!")
|
37
|
+
self.assertAlmostEqual(self.ss.DCOPF2.get(src='pg', attr='v', idx=stg),
|
38
|
+
0, places=6,
|
39
|
+
msg="Generator trip does not take effect!")
|
40
|
+
|
41
|
+
self.ss.StaticGen.set(src='u', idx=stg, attr='v', value=1) # reset
|
42
|
+
|
43
|
+
def test_trip_line(self):
|
44
|
+
"""
|
45
|
+
Test line tripping.
|
46
|
+
"""
|
47
|
+
self.ss.Line.set(src='u', attr='v', idx='Line_3', value=0)
|
48
|
+
|
49
|
+
self.ss.DCOPF2.update()
|
50
|
+
self.ss.DCOPF2.run(solver='CLARABEL')
|
51
|
+
self.assertTrue(self.ss.DCOPF2.converged, "DCOPF2 did not converge under line trip!")
|
52
|
+
self.assertAlmostEqual(self.ss.DCOPF2.get(src='plf', attr='v', idx='Line_3'),
|
53
|
+
0, places=6,
|
54
|
+
msg="Line trip does not take effect!")
|
55
|
+
|
56
|
+
self.ss.Line.alter(src='u', idx='Line_3', value=1) # reset
|
57
|
+
|
58
|
+
def test_set_load(self):
|
59
|
+
"""
|
60
|
+
Test setting and tripping load.
|
61
|
+
"""
|
62
|
+
# --- run DCOPF2 ---
|
63
|
+
self.ss.DCOPF2.run(solver='CLARABEL')
|
64
|
+
pgs = self.ss.DCOPF2.pg.v.sum()
|
65
|
+
|
66
|
+
# --- set load ---
|
67
|
+
self.ss.PQ.set(src='p0', attr='v', idx='PQ_1', value=0.1)
|
68
|
+
self.ss.DCOPF2.update()
|
69
|
+
|
70
|
+
self.ss.DCOPF2.run(solver='CLARABEL')
|
71
|
+
pgs_pqt = self.ss.DCOPF2.pg.v.sum()
|
72
|
+
self.assertLess(pgs_pqt, pgs, "Load set does not take effect!")
|
73
|
+
|
74
|
+
# --- trip load ---
|
75
|
+
self.ss.PQ.set(src='u', attr='v', idx='PQ_2', value=0)
|
76
|
+
self.ss.DCOPF2.update()
|
77
|
+
|
78
|
+
self.ss.DCOPF2.run(solver='CLARABEL')
|
79
|
+
pgs_pqt2 = self.ss.DCOPF2.pg.v.sum()
|
80
|
+
self.assertLess(pgs_pqt2, pgs_pqt, "Load trip does not take effect!")
|
81
|
+
|
82
|
+
def test_dc2ac(self):
|
83
|
+
"""
|
84
|
+
Test `DCOPF2.dc2ac()` method.
|
85
|
+
"""
|
86
|
+
self.ss.DCOPF2.run(solver='CLARABEL')
|
87
|
+
self.ss.DCOPF2.dc2ac()
|
88
|
+
self.assertTrue(self.ss.DCOPF2.converted, "AC conversion failed!")
|
89
|
+
self.assertTrue(self.ss.DCOPF2.exec_time > 0, "Execution time is not greater than 0.")
|
90
|
+
|
91
|
+
stg_idx = self.ss.StaticGen.get_all_idxes()
|
92
|
+
pg_dcopf = self.ss.DCOPF2.get(src='pg', attr='v', idx=stg_idx)
|
93
|
+
pg_acopf = self.ss.ACOPF.get(src='pg', attr='v', idx=stg_idx)
|
94
|
+
np.testing.assert_almost_equal(pg_dcopf, pg_acopf, decimal=3)
|
95
|
+
|
96
|
+
bus_idx = self.ss.Bus.get_all_idxes()
|
97
|
+
v_dcopf = self.ss.DCOPF2.get(src='vBus', attr='v', idx=bus_idx)
|
98
|
+
v_acopf = self.ss.ACOPF.get(src='vBus', attr='v', idx=bus_idx)
|
99
|
+
np.testing.assert_almost_equal(v_dcopf, v_acopf, decimal=3)
|
100
|
+
|
101
|
+
a_dcopf = self.ss.DCOPF2.get(src='aBus', attr='v', idx=bus_idx)
|
102
|
+
a_acopf = self.ss.ACOPF.get(src='aBus', attr='v', idx=bus_idx)
|
103
|
+
np.testing.assert_almost_equal(a_dcopf, a_acopf, decimal=3)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|