Lis (線形代数ライブラリ)

Lis (Library of Iterative Solvers for linear systems、発音は[lis]) は、離散化された線形方程式および固有値問題を反復法により解くための並列線形計算ライブラリ。実数または複素数を成分とする行列を扱う。並列コンピュータを主な対象としているが、並列処理を意識することなくライブラリを利用することができる。C言語で実装されているが、C++、Fortranからも利用できる。修正BSDライセンスで提供されるオープンソースソフトウェア。

特徴 
Lisの主な特徴は以下の通り。
 MPI、OpenMPライブラリによる並列実装
 各種疎行列格納形式への対応
 疎行列、密行列を対象とする基本的な線形演算ルーチンの実装
 各種並列反復解法、並列前処理法の実装
 四倍精度浮動小数演算への対応

例 
線形方程式  を解くためのプログラム例（C言語版）を示す。
#include <stdio.h>
#include "lis_config.h"
#include "lis.h"

LIS_INT main(LIS_INT argc, char* argv[])
{
  LIS_MATRIX  A;
  LIS_VECTOR  b, x;
  LIS_SOLVER  solver;
  LIS_INT     iter;
  double      time;

  lis_initialize(&argc, &argv);

  lis_matrix_create(LIS_COMM_WORLD, &A);
  lis_vector_create(LIS_COMM_WORLD, &b);
  lis_vector_create(LIS_COMM_WORLD, &x);

  lis_input_matrix(A, argv[1]);
  lis_input_vector(b, argv[2]);
  lis_vector_duplicate(A, &x);

  lis_solver_create(&solver);
  lis_solver_set_optionC(solver);
  lis_solve(A, b, x, solver);

  lis_solver_get_iter(solver, &iter);
  lis_solver_get_time(solver, &time);
  printf("number of iterations = %d\n", iter);
  printf("elapsed time = %e\n", time);

  lis_output_vector(x, LIS_FMT_MM, argv[3]);

  lis_solver_destroy(solver);
  lis_matrix_destroy(A);
  lis_vector_destroy(b);
  lis_vector_destroy(x);

  lis_finalize();

  return 0;
}

Lisを使用する主なソフトウェア 
 Gerris（流体計算ソフトウェア）
 OpenModelica（物理モデリング言語Modelicaのオープンソース実装）

関連項目

 数値解析ソフトウェア
 線形代数
 共役勾配法
 GMRES法
 ランチョス法
 クリロフ部分空間
 マルチグリッド法（多重格子法）

出典

外部リンク
 公式ホームページ
 ミラーサイト（Netlibプロジェクトによる)
 Freely Available Software for Linear Algebra（テネシー大学ジャック・ドンガラ教授による）

 Fedora Linux版パッケージ（Fedoraプロジェクトによる）
 Gentoo Linux版パッケージ（Gentoo Linuxプロジェクトによる）
 Arch Linux版パッケージ（Arch Linuxコミュニティによる）
 FreeBSD版パッケージ（FreeBSDプロジェクトによる）
 macOS（Homebrew）版パッケージ（Homebrewプロジェクトによる）
 macOS（MacPorts）版パッケージ（MacPortsプロジェクトによる）
 Windows版パッケージ（WHPCプロジェクトによる）
 Mingw-w64版パッケージ（Mingw-w64プロジェクトによる）
 Spack版パッケージ (ローレンス・リバモア国立研究所による）

数値解析ソフトウェア
数値計算ライブラリー
数値線形代数
スーパーコンピュータ
Lis
2005年のソフトウェア