Skip to content

Releases: dss-extensions/klusolve

KLUSolveX (DSS-Extensions KLUSolve) v1.1.0

07 Dec 06:44
Compare
Choose a tag to compare

KLUSolveX Version 1.1 adds new functions and restores nearly full compatibility with the original KLUSolve, including Windows x86/32-bit calling convention. Besides AltDSS/DSS C-API, KLUSolveX can now be used with the official binaries, or be used in build process for OpenDSS-C to allow easier customization.

  • Several changes to CMakeLists.txt, including new options.
  • Remove support for ancient MSVC versions (2008 and earlier).
  • Implement SetMatrixElement, add it to klusolvex.map.
  • Remove unused targets from CMake, including METIS EXEs.
  • Remove ifdefs for MSVC 2008.
  • Suppress useless .exp files from MSVC.
  • Some work related to METIS for future Diakoptics use (WIP, probably incomplete).
  • Remove legacy stack stuff, use std::vector instead.
  • Implement real (float64) handling, using float64 sparse matrices and solver.
  • New SaveAsMarketFiles; update Eigen to v3.4.0 for a fix in related functions.
  • Remove klu.h from the main header.
  • Adjustments for easier integration with the official OpenDSS:
    • Use "unsigned int" instead of signed integers to appease OpenDSS-C.
    • Use "complex" instead of plain "double" in the header.
    • Use "stdcall" convention for Windows x86 (32-bit) build.

For this release, we finally fully migrated to GitHub Actions.

Currently, ARM builds for Linux will be added manually later. GitHub Actions has plans to support ARM CI workers in 2025.

KLUSolveX 1.0.0a1 (preview)

06 Aug 06:50
Compare
Choose a tag to compare

DSS-Extensions: KLUSolveX

This is a fork of KLUSolve used by DSS C-API. See the original at SourceForge. As explicit in LICENSE, this work uses the same license, LGPL 2.1 or later.

Changes include:

  • Uses a CMake building script.
  • Uses either system SuiteSparse libraries (when compatible) or downloads upstream SuiteSparse source-code. The SuiteSparse source code is not included in the KLUSolveX repository anymore.
  • Adds a dependency on Eigen, dropping the customized CZSparse.
  • Introduces some dense matrix functions (e.g. mvmult) to be used in the DSS C-API, an alternative OpenDSS library, for better performance.
  • Introduces reuse of the symbolic and numeric factorization steps from KLU when the sparse matrix is unchanged.
  • Changes calling convention to CDECL on Windows -- so far this is the only change that breaks compatibility with KLUSolve.

For binary distributions, basic descriptions of the dependencies and licensing information is reproduced below. When building from source, be sure to check the licenses of the components.

This is a preview release to be used by the preview release of DSS C-API 0.11.0.

EDIT: added ARM64 (built on manylinux_wheel_fpc322_aarch64 ) and ARM32 (armv7l, "Raspbian GNU/Linux 10 (buster)") binaries on 2021-10-12.

EDIT: added ARM64 mac M1 binary, untested, on 2022-03-08.

EDIT: added new ARM64 mac binary. The previous one was working correctly, but had issues threading with recent Julia versions. The old binary is kept as klusolvex_1.0.0a1_darwin_arm64-previous.tar.gz. The new binary is built with GCC 12 from Homebrew, adding -static-libgcc -static-libstdc++ to the linker flags.

Legacy DSS-Extensions KLUSolve 1.1.0a2

04 Mar 05:52
Compare
Choose a tag to compare
Pre-release

Fixes output path on Linux.

Update on 2019-11: This version was released before the major refactor and library rename. Check newer releases for updated versions

Legacy DSS-Extensions KLUSolve 1.1.0a1

04 Mar 05:18
cf52383
Compare
Choose a tag to compare
Pre-release

Update on 2019-11: This version was released before the major refactor and library rename. Check newer releases for updated versions

This is a pre-release for testing and finishing the integration with the DSS extensions.

The original KLUSolve was tagged 1.0. Besides the building system changes (uses CMake and the upstream KLU/SuiteSparse) we already had in place, this version introduces a version of the MVMult function using the Eigen C++ library.

MVMult represents the b=prod(A, x), which is used extensively in OpenDSS. The original version from OpenDSS is a Pascal function, which was not optimized. The version built here can bring a nice performance increase, without any other change.