「Portable, Extensible Toolkit for Scientific Computation」の版間の差分
ナビゲーションに移動
検索に移動
imported>Ef3 →下位階層のページ: <div style="max-height: 24rem; overflow-y: scroll;"> {{特別:前方一致ページ一覧/{{PAGENAME}}/|hideredirects=yes|stripprefix=yes}} </div> {{DEFAULTSORT:PORTABLE EXTENSIVE TOOLKIT FOR SCIENTIFIC COMPUTATION}} * Category:科学技術計算 Category:C言語 |
(相違点なし)
|
2025年2月1日 (土) 05:22時点における最新版
はじめに
PETSc(Portable, Extensible Toolkit for Scientific Computation)は、科学技術計算のための高性能な数値計算ライブラリです。並列計算をサポートし、線形代数、非線形方程式、微分方程式の解法など、幅広い数値計算問題に対応しています。このハンドブックでは、PETScの基本的な使い方から応用例までを解説します。
PETScの概要
PETScとは
PETScは、C言語で書かれたライブラリで、以下の特徴を持っています。
- 並列計算: MPIを利用した分散メモリ並列計算をサポート。
- 拡張性: 新しいソルバーやデータ構造を簡単に追加可能。
- 柔軟性: 線形代数、非線形方程式、微分方程式など、多様な問題に対応。
主な機能
- 線形代数: 疎行列や密行列の操作、線形ソルバー。
- 非線形方程式: 非線形ソルバーと最適化ツール。
- 微分方程式: 時間依存および時間非依存の微分方程式ソルバー。
PETScのインストール
必要なソフトウェア
- MPI: 並列計算用のライブラリ(例: OpenMPI, MPICH)。
- BLAS/LAPACK: 線形代数計算用のライブラリ。
- コンパイラ: C/C++コンパイラ(例: GCC, Clang)。
インストール手順
- PETScのソースコードをダウンロード:
git clone https://gitlab.com/petsc/petsc.git cd petsc
- 設定とビルド:
./configure --with-mpi-dir=/path/to/mpi --with-blas-lapack-dir=/path/to/blas-lapack make all make install
PETScの基本操作
初期化と終了
PETScを使用する前に、PetscInitializeで初期化し、終了時にPetscFinalizeを呼び出します。
例
#include "petsc.h" int main(int argc, char **argv) { PetscInitialize(&argc, &argv, NULL, NULL); // PETScのコード PetscFinalize(); return 0; }
ベクトルの操作
PETScでは、Vec型を使ってベクトルを操作します。
例: ベクトルの作成と設定
Vec x; PetscInt n = 10; VecCreate(PETSC_COMM_WORLD, &x); VecSetSizes(x, PETSC_DECIDE, n); VecSetFromOptions(x); PetscScalar value = 1.0; VecSet(x, value); VecAssemblyBegin(x); VecAssemblyEnd(x);
行列の操作
PETScでは、Mat型を使って行列を操作します。
例: 疎行列の作成と設定
Mat A; PetscInt m = 10, n = 10; MatCreate(PETSC_COMM_WORLD, &A); MatSetSizes(A, PETSC_DECIDE, PETSC_DECIDE, m, n); MatSetFromOptions(A); MatSetUp(A); PetscInt row = 0, col = 0; PetscScalar val = 1.0; MatSetValue(A, row, col, val, INSERT_VALUES); MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY); MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);
線形ソルバー
線形方程式の解法
PETScは、線形方程式 を解くためのさまざまなソルバーを提供しています。
例: 線形ソルバーの使用
KSP ksp; KSPCreate(PETSC_COMM_WORLD, &ksp); KSPSetOperators(ksp, A, A); KSPSetFromOptions(ksp); KSPSolve(ksp, b, x);
前処理
PETScは、前処理(Preconditioner)をサポートしており、収束性を向上させます。
例: 前処理の設定
PC pc; KSPGetPC(ksp, &pc); PCSetType(pc, PCJACOBI);
非線形ソルバー
非線形方程式の解法
PETScは、非線形方程式 を解くためのソルバーを提供しています。
例: 非線形ソルバーの使用
SNES snes; SNESCreate(PETSC_COMM_WORLD, &snes); SNESSetFunction(snes, r, FormFunction, NULL); SNESSetJacobian(snes, J, J, FormJacobian, NULL); SNESSetFromOptions(snes); SNESSolve(snes, NULL, x);
時間依存問題
時間ステッピング
PETScは、時間依存問題を解くための時間ステッピングソルバーを提供しています。
例: 時間ステッピングの使用
TS ts; TSCreate(PETSC_COMM_WORLD, &ts); TSSetProblemType(ts, TS_NONLINEAR); TSSetRHSFunction(ts, NULL, FormRHSFunction, NULL); TSSetFromOptions(ts); TSSolve(ts, x);
応用例
熱方程式の解法
熱方程式を解くためのPETScのコード例を示します。
例: 熱方程式
// 初期化と設定 PetscInitialize(&argc, &argv, NULL, NULL); // ベクトルと行列の作成 Vec u; Mat A; // ... (省略) // 線形ソルバーの設定 KSP ksp; KSPCreate(PETSC_COMM_WORLD, &ksp); KSPSetOperators(ksp, A, A); KSPSetFromOptions(ksp); // 時間ステッピングの設定 TS ts; TSCreate(PETSC_COMM_WORLD, &ts); TSSetProblemType(ts, TS_NONLINEAR); TSSetRHSFunction(ts, NULL, FormRHSFunction, NULL); TSSetFromOptions(ts); // ソルバーの実行 TSSolve(ts, u); // 終了処理 PetscFinalize();
練習問題
- ベクトル操作: サイズ100のベクトルを作成し、すべての要素を2.0に設定するプログラムを作成してください。
- 行列操作: 10x10の疎行列を作成し、対角要素を1.0、非対角要素を0.0に設定するプログラムを作成してください。
- 線形ソルバー: 線形方程式 を解くプログラムを作成し、解を表示してください。
- 非線形ソルバー: 非線形方程式 を解くプログラムを作成してください。
まとめ
PETScは、科学技術計算のための強力なツールキットです。並列計算をサポートし、線形代数、非線形方程式、微分方程式の解法など、幅広い問題に対応しています。このハンドブックを通じて、PETScの基本的な使い方から応用例までを学び、実際の問題に適用できるようになりましょう。