gridoxide 0.2.0__tar.gz → 0.3.0__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.
- gridoxide-0.3.0/.dockerignore +10 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/Cargo.lock +18 -4
- {gridoxide-0.2.0 → gridoxide-0.3.0}/Cargo.toml +32 -4
- {gridoxide-0.2.0 → gridoxide-0.3.0}/PKG-INFO +19 -1
- {gridoxide-0.2.0 → gridoxide-0.3.0}/build.rs +19 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/CMakeLists.txt +1 -1
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/Cargo.toml +1 -1
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/jacobian.rs +18 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/mod.rs +1 -1
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/sensitivity.rs +160 -7
- gridoxide-0.3.0/crates/gridoxide-gpu/Cargo.toml +44 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/build.rs +195 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/cuda/kernels.cu +483 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/cuda/kernels.h +128 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/cuda.rs +251 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/cudss.rs +499 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/dc.rs +629 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/device.rs +676 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/gpu.rs +336 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/lib.rs +50 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/newton.rs +727 -0
- gridoxide-0.3.0/crates/gridoxide-gpu/src/uniform.rs +305 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/mod.rs +35 -0
- gridoxide-0.3.0/docker/gpu/Dockerfile +63 -0
- gridoxide-0.3.0/examples/dc_contingencies_bench.rs +53 -0
- gridoxide-0.3.0/examples/gpu_probe_dump.rs +160 -0
- gridoxide-0.3.0/plans/GPU_BATCH_TODO.md +57 -0
- gridoxide-0.3.0/probes/cudss_ubatch/.gitignore +3 -0
- gridoxide-0.3.0/probes/cudss_ubatch/README.md +83 -0
- gridoxide-0.3.0/probes/cudss_ubatch/explore.cpp +189 -0
- gridoxide-0.3.0/probes/cudss_ubatch/probe.cpp +456 -0
- gridoxide-0.3.0/probes/cudss_ubatch/run.sh +93 -0
- gridoxide-0.3.0/probes/cudss_ubatch/stub/cuda_runtime.h +31 -0
- gridoxide-0.3.0/probes/cudss_ubatch/stub/library_types.h +4 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/pyproject.toml +1 -1
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/README.md +18 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/gridoxide/__init__.py +10 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dc.py +36 -0
- gridoxide-0.3.0/python/tests/test_gpu.py +190 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/lib.rs +3 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/python.rs +455 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dc_batch_test.rs +151 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.cargo/config.toml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/book.yml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/build.yml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/publish.yml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/pypi.yml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/python.yml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/release.yml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/vscode.yml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.gitignore +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/.gitmodules +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/LICENSE +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/README.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/examples/powerflow.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/examples/powerflow.cpp +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/gridoxideConfig.cmake.in +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/cbindgen.toml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/ac_sensitivity.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/batch.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/bde.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/branch_flow.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/constrained.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/augmented.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/corrector.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/direction.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/events.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/dc.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/dispatch.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/injection_hessian.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/json.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/lib.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/batch.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/btheta.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/impedance.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/measurement.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/network.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/area.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/qlimits.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/remote.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/slack.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/taps.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/qv.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/ratings.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/roots.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/scenario.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/bad_data.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/batch.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/case.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/constraints.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/functional.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/iterative.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/jacobian.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/nr.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/observability.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/fortescue.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/network.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/solver.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/solver.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/switches.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/bus_view.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/model.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/reduction.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/types.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/Cargo.toml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/build.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/block_sparse.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/PROVENANCE.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/aat.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/core.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/postorder.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/analyze.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/btf/maxtrans.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/btf/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/btf/strongcomp.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/factor.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/ffi_oracle.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/kernel.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/refactor.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/scale.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/solve.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/types.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/lib.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/lu.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/sparse.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/sparse_klu.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/sparse_pardiso.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Doc/License.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Include/amd.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Include/amd_internal.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/README.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd.f +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_1.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_2.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_aat.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_control.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_defaults.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_dump.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_info.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l1.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l2.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_aat.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_control.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_defaults.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_dump.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_info.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_order.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_post_tree.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_postorder.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_preprocess.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_valid.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_order.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_post_tree.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_postorder.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_preprocess.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_valid.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_version.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amdbar.f +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Doc/License.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Include/btf.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Include/btf_internal.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/README.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_l_maxtrans.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_l_order.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_l_strongcomp.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_maxtrans.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_order.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_strongcomp.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_version.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Doc/License.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Include/colamd.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/README.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Source/colamd.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Source/colamd_l.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Source/colamd_version.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Doc/License.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Include/klu.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Include/klu_internal.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Include/klu_version.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/README.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_analyze.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_analyze_given.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_defaults.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_diagnostics.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_dump.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_extract.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_factor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_free_numeric.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_free_symbolic.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_kernel.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_analyze.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_analyze_given.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_defaults.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_diagnostics.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_dump.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_extract.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_factor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_free_numeric.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_free_symbolic.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_kernel.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_memory.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_refactor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_scale.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_solve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_sort.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_tsolve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_memory.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_refactor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_scale.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_solve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_sort.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_tsolve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_version.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_diagnostics.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_dump.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_extract.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_factor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_free_numeric.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_kernel.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_refactor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_scale.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_solve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_sort.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_tsolve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_diagnostics.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_dump.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_extract.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_factor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_free_numeric.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_kernel.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_refactor.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_scale.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_solve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_sort.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_tsolve.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/PROVENANCE.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/SuiteSparse_config/README.txt +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/SuiteSparse_config/SuiteSparse_config.c +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/SuiteSparse_config/SuiteSparse_config.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/.gitignore +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/book.toml +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/README.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/one-node-2ph.json +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/one-node-slg.json +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/pst-worked-example.crac.json +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/two-bus-lmp.json +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/two-bus-lmp.opf.json +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/SUMMARY.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/external_network_injection.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/index.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/node_breaker.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/phase_tap_changer_linear.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/ratio_tap_changer_table.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/shunt_conductance.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/static_var_compensator.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/dae.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/events.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/index.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/initialization.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/input.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/models.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/smallsignal.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/validation.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/building.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/c_api.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/mcp.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/python.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/import/iidm.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/import/matpower.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/import/ucte.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/introduction.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/opf/index.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/opf/worked_example.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/area_interchange.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/continuation.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/dc.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/distributed_slack.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/index.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/linear_impedance.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/multi_island.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/outer_loops.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/q_limits.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/qv.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/tap_control.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/zero_impedance_branches.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/index.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/linear.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/margins.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/search.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/benchmarking.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/feature_comparison.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/provenance.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/resources.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/sensitivity/ac.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/faults.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/index.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/sequence.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/worked_example.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/solvers/backends.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/solvers/klu.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/diagnostics.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/index.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/iterative.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/measurements.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/worked_example.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/theme/custom.css +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/base_mismatch_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bde_check.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_contingency.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_dc.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_network.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_node_breaker.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_se.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/cgmes_area_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/cgmes_microgrid_be_dump.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/cpf_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/dispatch_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/doc_numbers.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/dynamics_scale.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/iidm_area_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/iidm_regulation_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/klu_scaling_stress.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/pf_profile.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/qv_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/remote_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/se_converge.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/se_profile.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/smallsignal_scale.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/switch_ceiling.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/tap_control_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/tap_deadband_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/tap_regulation_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/ucte_area_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/voltage_control_probe.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/include/gridoxide.h +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/include/gridoxide.hpp +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/plans/DYNAMICS_LIBRARY_TODO.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/gridoxide/generate_grid.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/gridoxide/matpower.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/_pglib.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_ac_opf.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_ac_sensitivity.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_continuation.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dc_opf.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dispatch.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dynamics.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_generate_grid.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_gridoxide.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_matpower.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_matpower_opf.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_node_breaker.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_qv.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_short_circuit.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_state_estimation.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_tap_control.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/README.md +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/accuracy_case_suite.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_batch.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_gridoxide_cgmes.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_gridoxide_native.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_lightsim2grid.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pandapower.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pgm.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pypowsybl.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pypowsybl_cgmes.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_se_pgm.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_veragrid.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/cases.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/cgmes_sv.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/check_cgmes_sv_consistency.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/check_dc_matpower.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/check_matpower_residual.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/convert_pandapower_case.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/cross_validate_cgmes_microgrid_be.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/generate_grid.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/iidm_reference.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/jax_oracle.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/matpower_to_pgm.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/run_case_suite.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/se_iterations.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/ucte_reference.py +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/capi/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/capi/powerflow.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/capi/types.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/cgmes.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/arnoldi.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/arpack.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/dae.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/dyd.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/dyr.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/events.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/init.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/integrator.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/json.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/avr.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/gov.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/load.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/machine.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/pss.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/unit.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/shift.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/smallsignal.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/iidm/dynamics.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/iidm/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/load.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/main.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/matpower.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/ac.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/bnb.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/dc.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/highs.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/ipm.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/ipopt.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/model.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/nlp.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/measurement.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/opf.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/se.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/shortcircuit.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/automaton.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/castor.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/costly.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/crac.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/crac_json.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/evaluate.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/limits.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/linear.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/mnec.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/parameters.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/search.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/usage.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/validate.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/src/ucte.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/ac_contingency_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/ac_sensitivity_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/all.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/area_interchange_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/batch_solver_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/bde_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/block_jacobian_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/branch_flow_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/capi_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_area_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_common/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_dispatch_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_fullgrid_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_identity_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_limits_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_be_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_hvdc_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_nl_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_type1_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_type2_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_type3_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_minigrid_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_node_breaker_se_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_node_breaker_solve_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_node_breaker_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_powerflow_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_pst_phase_tap_changer_linear_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_pst_phase_tap_changer_table_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_realgrid_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_remote_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_smallgrid_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_smoke_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_svedala_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_tap_regulation_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_tap_table_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_voltage_base_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_voltage_control_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_continuation_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_dynamics_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_estimate_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_opf_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_qv_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_rao_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_security_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_sensitivity_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_short_circuit_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_solve_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_switches_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/common/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/constrained_switch_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/continuation_events_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/continuation_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dc_powerflow_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dc_sensitivity_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/distributed_slack_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_dyd_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_dyr_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_events_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_json_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_models_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_reference_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_relay_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_ring/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_smallsignal_arpack_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_smallsignal_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/iidm_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/injection_hessian_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/klu_jacobian_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/klu_native_jacobian_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/link_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/matpower_opf_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/matpower_se_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/matpower_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/measurement_residual_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/multi_island_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/openrao/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_ac_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_cross_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_data_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_dc_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_highs_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_ipm_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_ipopt_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_milp_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_nlp_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_pwl_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/outer_loop_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pardiso_jacobian_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/persistent_solver_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pglib/mod.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_asym_line_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_asym_three_winding_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_asym_transformer_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_component_coverage_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_gen_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_line_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_load_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_network_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_node_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_short_circuit_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_shunt_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_source_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_three_winding_transformer_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_transformer_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/power_flow_methods_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/powerflow_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/q_limits_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/qv_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_castor_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_crac_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_cucumber_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_evaluate_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_linear_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_search_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_validate_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/remote_voltage_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/se_batch_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/se_three_phase_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/state_estimation_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/tap_control_test.rs +0 -0
- {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/ucte_test.rs +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# The build context of docker/gpu/Dockerfile: the sources cargo needs, not the
|
|
2
|
+
# build output, local environments or test data (the tests mount the checkout).
|
|
3
|
+
target/
|
|
4
|
+
.venv/
|
|
5
|
+
.git/
|
|
6
|
+
probes/cudss_ubatch/work/
|
|
7
|
+
tests/data/
|
|
8
|
+
docs/book/
|
|
9
|
+
editors/
|
|
10
|
+
scripts/bench/.case-cache/
|
|
@@ -670,13 +670,14 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
|
|
|
670
670
|
|
|
671
671
|
[[package]]
|
|
672
672
|
name = "gridoxide"
|
|
673
|
-
version = "0.
|
|
673
|
+
version = "0.3.0"
|
|
674
674
|
dependencies = [
|
|
675
675
|
"bindgen",
|
|
676
676
|
"cbindgen",
|
|
677
677
|
"cimoxide-model",
|
|
678
678
|
"faer",
|
|
679
679
|
"gridoxide-core",
|
|
680
|
+
"gridoxide-gpu",
|
|
680
681
|
"gridoxide-sparse",
|
|
681
682
|
"num-complex",
|
|
682
683
|
"pyo3",
|
|
@@ -688,7 +689,7 @@ dependencies = [
|
|
|
688
689
|
|
|
689
690
|
[[package]]
|
|
690
691
|
name = "gridoxide-core"
|
|
691
|
-
version = "0.
|
|
692
|
+
version = "0.3.0"
|
|
692
693
|
dependencies = [
|
|
693
694
|
"faer",
|
|
694
695
|
"gridoxide-sparse",
|
|
@@ -698,9 +699,22 @@ dependencies = [
|
|
|
698
699
|
"serde_json",
|
|
699
700
|
]
|
|
700
701
|
|
|
702
|
+
[[package]]
|
|
703
|
+
name = "gridoxide-gpu"
|
|
704
|
+
version = "0.3.0"
|
|
705
|
+
dependencies = [
|
|
706
|
+
"bindgen",
|
|
707
|
+
"cc",
|
|
708
|
+
"gridoxide",
|
|
709
|
+
"gridoxide-core",
|
|
710
|
+
"gridoxide-sparse",
|
|
711
|
+
"num-complex",
|
|
712
|
+
"rayon",
|
|
713
|
+
]
|
|
714
|
+
|
|
701
715
|
[[package]]
|
|
702
716
|
name = "gridoxide-mcp"
|
|
703
|
-
version = "0.
|
|
717
|
+
version = "0.3.0"
|
|
704
718
|
dependencies = [
|
|
705
719
|
"gridoxide",
|
|
706
720
|
"num-complex",
|
|
@@ -709,7 +723,7 @@ dependencies = [
|
|
|
709
723
|
|
|
710
724
|
[[package]]
|
|
711
725
|
name = "gridoxide-sparse"
|
|
712
|
-
version = "0.
|
|
726
|
+
version = "0.3.0"
|
|
713
727
|
dependencies = [
|
|
714
728
|
"bindgen",
|
|
715
729
|
"cc",
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
[workspace]
|
|
2
|
-
|
|
2
|
+
# gridoxide-gpu is an optional dependency of gridoxide (the `gpu` feature): a
|
|
3
|
+
# plain `cargo build` here builds only this root package, and the GPU crate
|
|
4
|
+
# builds without CUDA unless its `cuda` feature is on.
|
|
5
|
+
members = ["crates/gridoxide-core", "crates/gridoxide-sparse", "crates/gridoxide-gpu"]
|
|
3
6
|
|
|
4
7
|
# Shared by every crate in the workspace, so they release in lockstep.
|
|
5
8
|
[workspace.package]
|
|
6
|
-
version = "0.
|
|
9
|
+
version = "0.3.0"
|
|
7
10
|
edition = "2024"
|
|
8
11
|
repository = "https://github.com/m-mirz/gridoxide"
|
|
9
12
|
|
|
@@ -76,10 +79,13 @@ crate-type = ["cdylib", "rlib", "staticlib"]
|
|
|
76
79
|
# The sparse LU backends and the vendored SuiteSparse they build on — see
|
|
77
80
|
# crates/gridoxide-sparse. Its modules are re-exported under their old names
|
|
78
81
|
# in src/lib.rs, so `gridoxide::sparse` and the rest resolve as before.
|
|
79
|
-
gridoxide-sparse = { path = "crates/gridoxide-sparse", version = "0.
|
|
82
|
+
gridoxide-sparse = { path = "crates/gridoxide-sparse", version = "0.3.0" }
|
|
80
83
|
# The solvers — network model, power flow, state estimation, short circuit —
|
|
81
84
|
# re-exported the same way; see crates/gridoxide-core.
|
|
82
|
-
gridoxide-core = { path = "crates/gridoxide-core", version = "0.
|
|
85
|
+
gridoxide-core = { path = "crates/gridoxide-core", version = "0.3.0" }
|
|
86
|
+
# Batched AC power flow on an NVIDIA GPU, re-exported as `gridoxide::gpu`; see
|
|
87
|
+
# the `gpu` feature.
|
|
88
|
+
gridoxide-gpu = { path = "crates/gridoxide-gpu", version = "0.3.0", optional = true }
|
|
83
89
|
faer = "0.24.4"
|
|
84
90
|
num-complex = { version = "0.4.6", features = ["serde"] }
|
|
85
91
|
# Powers `crates/gridoxide-core/src/batch.rs`'s across-scenario parallelism. Not a new build cost:
|
|
@@ -279,6 +285,18 @@ opf-ipopt = ["opf", "dep:bindgen"]
|
|
|
279
285
|
# runner has ARPACK installed — the same local/manual-verification-only position
|
|
280
286
|
# `pardiso`, `opf-highs` and `opf-ipopt` are in.
|
|
281
287
|
smallsignal-arpack = ["dynamics"]
|
|
288
|
+
# Batched AC power flow on one NVIDIA GPU (crates/gridoxide-gpu, re-exported
|
|
289
|
+
# as `gridoxide::gpu`): sweeps and N-1 over cuDSS's uniform batch, every
|
|
290
|
+
# scenario stopped at its own convergence. With `python`, the bindings gain
|
|
291
|
+
# `GpuBatchSolver`. Needs cuDSS 1.0 or later (`CUDSS_DIR`), the CUDA 12
|
|
292
|
+
# toolkit with nvcc and libclang at build time — see
|
|
293
|
+
# crates/gridoxide-gpu/build.rs — and an NVIDIA GPU at run time. Not built or
|
|
294
|
+
# tested in CI, which has no GPU; the published wheel does not ship it.
|
|
295
|
+
#
|
|
296
|
+
# cuDSS is NVIDIA's proprietary library, linked dynamically from the user's
|
|
297
|
+
# install like oneMKL for `pardiso`: nothing of it is redistributed by this
|
|
298
|
+
# crate.
|
|
299
|
+
gpu = ["dep:gridoxide-gpu", "gridoxide-gpu/cuda"]
|
|
282
300
|
# Exports a C ABI (src/capi/) so a C++ project can embed gridoxide, plus the
|
|
283
301
|
# `cbindgen`-generated `include/gridoxide.h` that describes it.
|
|
284
302
|
#
|
|
@@ -406,3 +424,13 @@ required-features = ["cgmes"]
|
|
|
406
424
|
# session with `CARGO_PROFILE_DEV_DEBUG=true`.
|
|
407
425
|
[profile.dev]
|
|
408
426
|
debug = "line-tables-only"
|
|
427
|
+
|
|
428
|
+
[[example]]
|
|
429
|
+
name = "dc_contingencies_bench"
|
|
430
|
+
path = "examples/dc_contingencies_bench.rs"
|
|
431
|
+
required-features = ["matpower"]
|
|
432
|
+
|
|
433
|
+
[[example]]
|
|
434
|
+
name = "gpu_probe_dump"
|
|
435
|
+
path = "examples/gpu_probe_dump.rs"
|
|
436
|
+
required-features = ["matpower"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gridoxide
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Requires-Dist: numpy>=1.24 ; extra == 'matpower'
|
|
@@ -149,6 +149,24 @@ feature to use them:
|
|
|
149
149
|
- `"klu"` — links vendored SuiteSparse C directly (`--features python,klu`).
|
|
150
150
|
- `"pardiso"` — Intel oneMKL's PARDISO solver (`--features python,pardiso`, needs `MKLROOT` set).
|
|
151
151
|
|
|
152
|
+
### Batched power flow on an NVIDIA GPU
|
|
153
|
+
|
|
154
|
+
Not in the published wheel either: `GpuBatchSolver` needs a build with `--features python,gpu`, with
|
|
155
|
+
cuDSS 1.0 or later (`CUDSS_DIR`) and the CUDA 12 toolkit, or the image `docker/gpu/Dockerfile` builds. It
|
|
156
|
+
solves `solve_batch`'s scenarios and `solve_contingencies`' outage lists on the GPU, every scenario to
|
|
157
|
+
its own convergence, from the model's last `solve()`:
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
model = gridoxide.PowerFlowModel.from_matpower("case9241pegase.m")
|
|
161
|
+
model.solve()
|
|
162
|
+
gpu = gridoxide.GpuBatchSolver(model, capacity=1024) # keeps its analysis for every later call
|
|
163
|
+
results = gpu.solve_batch(scenarios) # one BatchResult per scenario, as on the CPU
|
|
164
|
+
outages = gpu.solve_contingencies([[b] for b in range(model.n_branches)])
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Outages that split the network are solved on the CPU. On an A100 the GPU pays only on large networks and
|
|
168
|
+
large batches; the CPU's `solve_batch` on all cores is faster on most cases.
|
|
169
|
+
|
|
152
170
|
## State estimation
|
|
153
171
|
|
|
154
172
|
`StateEstimationModel` recovers the most likely grid state from measurements, rather than computing
|
|
@@ -12,6 +12,25 @@ fn main() {
|
|
|
12
12
|
arpack::build();
|
|
13
13
|
#[cfg(feature = "capi")]
|
|
14
14
|
capi::build();
|
|
15
|
+
#[cfg(feature = "gpu")]
|
|
16
|
+
gpu::build();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/// Puts cuDSS's and the CUDA runtime's library directories on the run path
|
|
20
|
+
/// of this package's artifacts, the Python extension among them, when the
|
|
21
|
+
/// `gpu` feature is enabled. gridoxide-gpu links them, but its run path
|
|
22
|
+
/// reaches only its own tests and examples; it hands the directories on as
|
|
23
|
+
/// `DEP_CUDSS_LIB_DIRS` (see crates/gridoxide-gpu/build.rs). An image that
|
|
24
|
+
/// moves the libraries elsewhere sets `LD_LIBRARY_PATH` instead.
|
|
25
|
+
#[cfg(feature = "gpu")]
|
|
26
|
+
mod gpu {
|
|
27
|
+
pub fn build() {
|
|
28
|
+
let dirs = std::env::var("DEP_CUDSS_LIB_DIRS")
|
|
29
|
+
.expect("gridoxide-gpu's build script sets DEP_CUDSS_LIB_DIRS with its `cuda` feature");
|
|
30
|
+
for dir in dirs.split(':') {
|
|
31
|
+
println!("cargo:rustc-link-arg=-Wl,-rpath,{dir}");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
15
34
|
}
|
|
16
35
|
|
|
17
36
|
/// Generates `include/gridoxide.h` from the C ABI in `src/capi/`, only when
|
|
@@ -12,7 +12,7 @@ categories = ["science", "simulation"]
|
|
|
12
12
|
license = "Apache-2.0"
|
|
13
13
|
|
|
14
14
|
[dependencies]
|
|
15
|
-
gridoxide-sparse = { path = "../gridoxide-sparse", version = "0.
|
|
15
|
+
gridoxide-sparse = { path = "../gridoxide-sparse", version = "0.3.0" }
|
|
16
16
|
faer = "0.24.4"
|
|
17
17
|
num-complex = { version = "0.4.6", features = ["serde"] }
|
|
18
18
|
# The batch solvers — power flow's and state estimation's — run scenarios
|
|
@@ -389,6 +389,24 @@ impl JacobianPattern {
|
|
|
389
389
|
&self.entries
|
|
390
390
|
}
|
|
391
391
|
|
|
392
|
+
/// The fill's first pass, for a device that runs it itself: each
|
|
393
|
+
/// non-slack row bus with its `Y[i][i]`, owning slots `4d..4d + 4`
|
|
394
|
+
/// (H, N, M, L).
|
|
395
|
+
pub fn diag_slots(&self) -> &[(u32, Complex<f64>)] {
|
|
396
|
+
&self.diag
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/// Each off-diagonal `(i, k)` pair with `Y[i][k]`, pair `p` owning slots
|
|
400
|
+
/// `4 · diag_slots().len() + 4p ..` (H, N, M, L).
|
|
401
|
+
pub fn pair_slots(&self) -> &[(u32, u32, Complex<f64>)] {
|
|
402
|
+
&self.pairs
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/// The fill's second pass: the slot each entry copies, in entry order.
|
|
406
|
+
pub fn slot_sources(&self) -> &[u32] {
|
|
407
|
+
&self.src
|
|
408
|
+
}
|
|
409
|
+
|
|
392
410
|
/// Writes this iteration's Jacobian values into `values`, which is
|
|
393
411
|
/// resized to [`len`](Self::len) and otherwise fully overwritten.
|
|
394
412
|
///
|
|
@@ -36,7 +36,7 @@ pub use btheta::{
|
|
|
36
36
|
DcBranch, DcIslandReport, DcIslandStatus, DcSolution, DcSolver, dc_branches, dc_power_flow,
|
|
37
37
|
};
|
|
38
38
|
pub use impedance::{LinearIslandReport, LinearIslandStatus, LinearReport, linear_power_flow};
|
|
39
|
-
pub use sensitivity::{DcSensitivity, DenseMatrix};
|
|
39
|
+
pub use sensitivity::{DcContingencies, DcSensitivity, DenseMatrix};
|
|
40
40
|
|
|
41
41
|
/// Which terms the DC susceptance keeps.
|
|
42
42
|
///
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
//! limitation, as a `TODO PTDF: distributed slack` in the equivalent place.
|
|
50
50
|
|
|
51
51
|
use crate::types::{Bus, BusType};
|
|
52
|
-
use gridoxide_sparse::
|
|
52
|
+
use gridoxide_sparse::klu_native::KluNativeSystem;
|
|
53
53
|
|
|
54
54
|
use super::btheta::{DcBranch, NOT_UNKNOWN, Partition, partition, reduced_b_triplets};
|
|
55
55
|
use crate::network::Verdict;
|
|
@@ -86,10 +86,58 @@ impl DenseMatrix {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
/// Angles and flows after each outage of
|
|
90
|
+
/// [`DcSensitivity::contingencies`], outage after outage.
|
|
91
|
+
#[derive(Clone, Debug)]
|
|
92
|
+
pub struct DcContingencies {
|
|
93
|
+
n_buses: usize,
|
|
94
|
+
n_branches: usize,
|
|
95
|
+
/// Per outage, one angle per bus (radians), outage-major.
|
|
96
|
+
pub angles: Vec<f64>,
|
|
97
|
+
/// Per outage, one from-end flow per flat branch (per unit), outage-major.
|
|
98
|
+
pub flows: Vec<f64>,
|
|
99
|
+
/// Per outage, whether it has a post-outage state; an unsolved outage's
|
|
100
|
+
/// rows are NaN.
|
|
101
|
+
pub solved: Vec<bool>,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
impl DcContingencies {
|
|
105
|
+
/// From buffers computed elsewhere (gridoxide-gpu's device solver), in
|
|
106
|
+
/// this layout: `angles` and `flows` outage-major, NaN rows where
|
|
107
|
+
/// `solved` is false.
|
|
108
|
+
pub fn from_parts(
|
|
109
|
+
n_buses: usize,
|
|
110
|
+
n_branches: usize,
|
|
111
|
+
angles: Vec<f64>,
|
|
112
|
+
flows: Vec<f64>,
|
|
113
|
+
solved: Vec<bool>,
|
|
114
|
+
) -> Self {
|
|
115
|
+
assert_eq!(angles.len(), solved.len() * n_buses);
|
|
116
|
+
assert_eq!(flows.len(), solved.len() * n_branches);
|
|
117
|
+
Self {
|
|
118
|
+
n_buses,
|
|
119
|
+
n_branches,
|
|
120
|
+
angles,
|
|
121
|
+
flows,
|
|
122
|
+
solved,
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/// Outage `k`'s bus angles.
|
|
127
|
+
pub fn angles(&self, k: usize) -> &[f64] {
|
|
128
|
+
&self.angles[k * self.n_buses..(k + 1) * self.n_buses]
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// Outage `k`'s branch flows.
|
|
132
|
+
pub fn flows(&self, k: usize) -> &[f64] {
|
|
133
|
+
&self.flows[k * self.n_branches..(k + 1) * self.n_branches]
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
89
137
|
/// One island's factorized reduced system, plus the bookkeeping to map
|
|
90
138
|
/// between global bus indices and its own rows.
|
|
91
139
|
struct Island {
|
|
92
|
-
factorization:
|
|
140
|
+
factorization: KluNativeSystem,
|
|
93
141
|
/// Reduced row -> global bus index.
|
|
94
142
|
unknown: Vec<usize>,
|
|
95
143
|
/// Positions into `DcSensitivity::branches` for this island's branches.
|
|
@@ -99,10 +147,11 @@ struct Island {
|
|
|
99
147
|
/// Precomputed DC sensitivity factors for one network.
|
|
100
148
|
///
|
|
101
149
|
/// Holds one factorization per island, computed once. Every accessor below is
|
|
102
|
-
/// a solve against those, never a refactorization
|
|
103
|
-
/// [`
|
|
104
|
-
///
|
|
105
|
-
///
|
|
150
|
+
/// a solve against those, never a refactorization: gridoxide's KLU port
|
|
151
|
+
/// ([`KluNativeSystem::solve`]), which solves one right-hand side about twice
|
|
152
|
+
/// as fast as faer's sparse LU on these matrices (290 against 585 µs on
|
|
153
|
+
/// case9241pegase's reduced B) and, unlike faer's solve, never parallelises
|
|
154
|
+
/// on its own, so [`contingencies`](Self::contingencies) owns the threads.
|
|
106
155
|
pub struct DcSensitivity {
|
|
107
156
|
n_buses: usize,
|
|
108
157
|
/// Total flat branch count (lines + transformers), the index space every
|
|
@@ -189,7 +238,7 @@ impl DcSensitivity {
|
|
|
189
238
|
}
|
|
190
239
|
|
|
191
240
|
let triplets = reduced_b_triplets(branches, &island_branches[ci], &reduced_pos);
|
|
192
|
-
let factorization =
|
|
241
|
+
let factorization = KluNativeSystem::new(m, &triplets)?;
|
|
193
242
|
|
|
194
243
|
let idx = islands.len();
|
|
195
244
|
for &i in &c.bus_indices {
|
|
@@ -396,6 +445,110 @@ impl DcSensitivity {
|
|
|
396
445
|
Some(out)
|
|
397
446
|
}
|
|
398
447
|
|
|
448
|
+
/// Every single-branch outage of `outages`, each on its own: the bus
|
|
449
|
+
/// angles and the branch flows after it.
|
|
450
|
+
///
|
|
451
|
+
/// [`outage_flows`](Self::outage_flows) gives the flows; this adds the
|
|
452
|
+
/// angles, from the same solve. The outage is the transfer
|
|
453
|
+
/// `c = f_l / (1 − d_l)` across the branch's terminals that the removed
|
|
454
|
+
/// branch would have carried, so with `θ⁽ˡ⁾` the angle response to a unit
|
|
455
|
+
/// transfer (the solve `outage_flows` already makes):
|
|
456
|
+
///
|
|
457
|
+
/// \\[ \theta^{new} = \theta + c\,\theta^{(l)}, \qquad
|
|
458
|
+
/// f^{new} = f + c\,\psi[:, l], \quad f^{new}_l = 0 \\]
|
|
459
|
+
///
|
|
460
|
+
/// Reference buses keep their angles, and so does every bus outside the
|
|
461
|
+
/// outaged branch's island. `base_angles` and `base_flows` are the base
|
|
462
|
+
/// case's (`Bus::voltage_ang` after a DC solve, per bus, and
|
|
463
|
+
/// [`DcSolution::branch_p`](super::btheta::DcSolution::branch_p)).
|
|
464
|
+
///
|
|
465
|
+
/// The outages run in parallel on the current rayon pool, one triangular
|
|
466
|
+
/// solve each against the factorization computed once in
|
|
467
|
+
/// [`new`](Self::new); install a pool around the call to choose the
|
|
468
|
+
/// thread count. An outage with no post-outage state (a radial branch,
|
|
469
|
+
/// one out of range or carrying no DC flow) is marked unsolved and its
|
|
470
|
+
/// rows are NaN. `None` only if the base vectors have the wrong length.
|
|
471
|
+
pub fn contingencies(
|
|
472
|
+
&self,
|
|
473
|
+
base_angles: &[f64],
|
|
474
|
+
base_flows: &[f64],
|
|
475
|
+
outages: &[usize],
|
|
476
|
+
) -> Option<DcContingencies> {
|
|
477
|
+
use rayon::prelude::*;
|
|
478
|
+
if base_angles.len() != self.n_buses || base_flows.len() != self.n_branches {
|
|
479
|
+
return None;
|
|
480
|
+
}
|
|
481
|
+
let (n, m) = (self.n_buses, self.n_branches);
|
|
482
|
+
// Zeroed, not NaN-filled: a zeroed allocation is mapped lazily, so the
|
|
483
|
+
// workers touch its pages in parallel, where filling 2.9 GB first
|
|
484
|
+
// (case9241pegase's full N-1) took a second on one thread.
|
|
485
|
+
let mut out = DcContingencies {
|
|
486
|
+
n_buses: n,
|
|
487
|
+
n_branches: m,
|
|
488
|
+
angles: vec![0.0; outages.len() * n],
|
|
489
|
+
flows: vec![0.0; outages.len() * m],
|
|
490
|
+
solved: vec![false; outages.len()],
|
|
491
|
+
};
|
|
492
|
+
out.angles
|
|
493
|
+
.par_chunks_mut(n.max(1))
|
|
494
|
+
.zip(out.flows.par_chunks_mut(m.max(1)))
|
|
495
|
+
.zip(out.solved.par_iter_mut())
|
|
496
|
+
.zip(outages.par_iter())
|
|
497
|
+
.for_each(|(((angles, flows), solved), &l)| {
|
|
498
|
+
*solved = self.one_contingency(base_angles, base_flows, l, angles, flows);
|
|
499
|
+
if !*solved {
|
|
500
|
+
angles.fill(f64::NAN);
|
|
501
|
+
flows.fill(f64::NAN);
|
|
502
|
+
}
|
|
503
|
+
});
|
|
504
|
+
Some(out)
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/// One outage of [`contingencies`](Self::contingencies) into its rows;
|
|
508
|
+
/// `false` (rows untouched) if it has no post-outage state.
|
|
509
|
+
fn one_contingency(
|
|
510
|
+
&self,
|
|
511
|
+
base_angles: &[f64],
|
|
512
|
+
base_flows: &[f64],
|
|
513
|
+
l: usize,
|
|
514
|
+
angles: &mut [f64],
|
|
515
|
+
flows: &mut [f64],
|
|
516
|
+
) -> bool {
|
|
517
|
+
let Some((br, island)) = self.branch_and_island(l) else {
|
|
518
|
+
return false;
|
|
519
|
+
};
|
|
520
|
+
let mut rhs = vec![0.0; island.unknown.len()];
|
|
521
|
+
if self.reduced_pos[br.from] != NOT_UNKNOWN {
|
|
522
|
+
rhs[self.reduced_pos[br.from]] += 1.0;
|
|
523
|
+
}
|
|
524
|
+
if self.reduced_pos[br.to] != NOT_UNKNOWN {
|
|
525
|
+
rhs[self.reduced_pos[br.to]] -= 1.0;
|
|
526
|
+
}
|
|
527
|
+
let Some(theta) = island.factorization.solve(&rhs) else {
|
|
528
|
+
return false;
|
|
529
|
+
};
|
|
530
|
+
let angle = |bus: usize| match self.reduced_pos[bus] {
|
|
531
|
+
NOT_UNKNOWN => 0.0,
|
|
532
|
+
r => theta[r],
|
|
533
|
+
};
|
|
534
|
+
let d = br.b * (angle(br.from) - angle(br.to));
|
|
535
|
+
if (1.0 - d).abs() < LODF_BRIDGE_TOL {
|
|
536
|
+
return false;
|
|
537
|
+
}
|
|
538
|
+
let c = base_flows[l] / (1.0 - d);
|
|
539
|
+
angles.copy_from_slice(base_angles);
|
|
540
|
+
for (r, &bus) in island.unknown.iter().enumerate() {
|
|
541
|
+
angles[bus] += c * theta[r];
|
|
542
|
+
}
|
|
543
|
+
flows.copy_from_slice(base_flows);
|
|
544
|
+
for &pos in &island.branch_positions {
|
|
545
|
+
let b = &self.branches[pos];
|
|
546
|
+
flows[b.index] += c * b.b * (angle(b.from) - angle(b.to));
|
|
547
|
+
}
|
|
548
|
+
flows[l] = 0.0;
|
|
549
|
+
true
|
|
550
|
+
}
|
|
551
|
+
|
|
399
552
|
/// Whether removing every branch in `branches` at once would disconnect the
|
|
400
553
|
/// network, leaving no post-outage flows to compute.
|
|
401
554
|
///
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "gridoxide-gpu"
|
|
3
|
+
description = "gridoxide's batched AC power flow for NVIDIA GPUs: an adaptive Newton loop over cuDSS's uniform batch"
|
|
4
|
+
version.workspace = true
|
|
5
|
+
edition.workspace = true
|
|
6
|
+
repository.workspace = true
|
|
7
|
+
license = "Apache-2.0"
|
|
8
|
+
# Links cuDSS (with the `cuda` feature), and hands its library directories to
|
|
9
|
+
# dependents as DEP_CUDSS_LIB_DIRS; see build.rs.
|
|
10
|
+
links = "cudss"
|
|
11
|
+
# The tests and examples need gridoxide, a dev-dependency the published crate
|
|
12
|
+
# cannot carry (see below), so they stay out of the package.
|
|
13
|
+
exclude = ["tests/", "examples/"]
|
|
14
|
+
|
|
15
|
+
[dependencies]
|
|
16
|
+
gridoxide-core = { path = "../gridoxide-core", version = "0.3.0" }
|
|
17
|
+
gridoxide-sparse = { path = "../gridoxide-sparse", version = "0.3.0" }
|
|
18
|
+
num-complex = "0.4.6"
|
|
19
|
+
# The CPU hand-off's scenarios in parallel, on the pool gridoxide's CPU
|
|
20
|
+
# BatchSolver shares (already in the dependency tree).
|
|
21
|
+
rayon = "1.12"
|
|
22
|
+
|
|
23
|
+
[dev-dependencies]
|
|
24
|
+
# The tests and the counting example read MATPOWER cases through gridoxide's
|
|
25
|
+
# reader. A dev-dependency only, and without a version on purpose: gridoxide
|
|
26
|
+
# depends on this crate (its `gpu` feature), so the cycle must not reach the
|
|
27
|
+
# registry, and `cargo publish` drops a dev-dependency that has no version.
|
|
28
|
+
gridoxide = { path = "../..", features = ["matpower"] }
|
|
29
|
+
|
|
30
|
+
[build-dependencies]
|
|
31
|
+
bindgen = { version = "0.72", optional = true }
|
|
32
|
+
cc = { version = "1.2", optional = true }
|
|
33
|
+
|
|
34
|
+
[features]
|
|
35
|
+
default = []
|
|
36
|
+
# The cuDSS backend, `CudssUniformBatch` (src/cudss.rs), and the Newton step's
|
|
37
|
+
# kernels, `DeviceBatch` (src/device.rs, cuda/kernels.cu). Off by default so
|
|
38
|
+
# this crate, and the workspace, build and test without CUDA. Needs libclang
|
|
39
|
+
# (for bindgen), CUDSS_DIR and the CUDA 12 toolkit with nvcc (CUDA_ARCH,
|
|
40
|
+
# default sm_80); build.rs says what each is. On a machine without CUDA it can
|
|
41
|
+
# still be type-checked against the probe's stub headers, nvcc skipped:
|
|
42
|
+
# CUDSS_DIR=<cudss> CUDA_INCLUDE_DIR=$PWD/probes/cudss_ubatch/stub \
|
|
43
|
+
# GRIDOXIDE_GPU_NO_NVCC=1 cargo check -p gridoxide-gpu --features cuda --all-targets
|
|
44
|
+
cuda = ["dep:bindgen", "dep:cc"]
|