|
|
◆ HBRead()
| Sub HBRead |
( |
Fname As |
String, |
|
|
Title As |
String, |
|
|
Key As |
String, |
|
|
Nrow As |
Long, |
|
|
Ncol As |
Long, |
|
|
Nnz As |
Long, |
|
|
Neltvl As |
Long, |
|
|
Val() As |
Double, |
|
|
Ptr() As |
Long, |
|
|
Ind() As |
Long, |
|
|
Nrhs As |
Long, |
|
|
Nrhsix As |
Long, |
|
|
Rhsval() As |
Double, |
|
|
Rhsptr() As |
Long, |
|
|
Rhsind() As |
Long, |
|
|
Sguess() As |
Double, |
|
|
Xexact() As |
Double, |
|
|
DataType As |
Long, |
|
|
MatShape As |
Long, |
|
|
MatForm As |
Long, |
|
|
RhsForm As |
Long, |
|
|
IniVec As |
Long, |
|
|
SolVec As |
Long, |
|
|
Optional Info As |
Long, |
|
|
Optional Skip As |
Long = 0, |
|
|
Optional Base As |
Long = 0, |
|
|
Optional Format As |
Long = 0, |
|
|
Optional Sort As |
Long = 0 |
|
) |
| |
Harwell-Boeing形式ファイルの読み出し
- 目的
- Harwell-Boeing形式ファイルから疎行列または有限要素行列(非組立形式)を読み出す.
読み出したデータは, データの順番など内容のチェックは行わずにそのまま配列に格納する. 疎行列は CSR, CSC または COO形式で格納される. ただし, オプションで疎行列を行あるいは列内で行番号の昇順に並べ替えることができる.
- 引数
-
| [in] | Fname | 入力ファイル名. |
| [out] | Title | Title 文字列. |
| [out] | Key | Key 文字列. |
| [out] | Nrow | 行列の行数 (疎行列の場合).
変数の数 (Nu) (有限要素行列の場合). |
| [out] | Ncol | 行列の列数 (疎行列の場合).
基本行列の数 (Ne) (有限要素行列の場合). |
| [out] | Nnz | 非ゼロ要素数 (疎行列の場合).
変数インデクス数 (Nind) (有限要素行列の場合). |
| [out] | Neltvl | 使用しない (疎行列の場合).
要素数 (有限要素行列の場合). |
| [out] | Val() | 配列 Val(LVal - 1) (LVal >= Nnz (疎行列の場合), LVal >= Neltvl (有限要素行列の場合))
非ゼロ要素 (疎行列の場合).
要素の数値データ (有限要素行列の場合). |
| [out] | Ptr() | 配列 Ptr(LPtr - 1) (LPtr >= Nrow + 1 (CSR), LPtr >= Ncol + 1 (CSC, 有限要素行列), または LPtr >= Nnz (COO))
行ポインタ(CSRの場合), 列ポインタ(CSC の場合), または 行インデクス(COO の場合) (疎行列の場合).
変数インデクスへのポインタ (有限要素行列の場合). |
| [out] | Ind() | 配列 Ind(LInd - 1) (LInd >= Nnz) 列インデクス(CSR あるいは COO の場合), または 行インデクス(CSC の場合) (疎行列の場合).
変数インデクス (有限要素行列の場合) |
| [out] | Nrhs | 右辺行列の列数. |
| [out] | Nrhsix | 右辺行列の行インデックス数. (RhsForm = 1, MatForm = 0 (疎行列) の場合) |
| [out] | Rhsval() | 配列 Rhsval(LRhsval - 1) (LRhsval >= Nrow*Nrhs (RhsForm = 0 (密行列) の場合), LRhsval >= Nrhsix (RhsForm = 1, MatForm = 0 (疎行列) の場合), LRhsval >= Nu*Nrhs (RhsForm = 1, MatForm = 1 (有限要素行列) の場合))
右辺行列値. |
| [out] | Rhsptr() | 配列 Rhsptr(LRhsptr - 1) (LRhsptr >= Nrow + 1 (CSRの場合), LRhsptr >= Nrhs + 1 (CSCの場合), LRhsptr >= Nrhsix (COOの場合))
右辺行列の行ポインタ(CSRの場合), 列ポインタ(CSC の場合), 行インデクス(COO の場合). (RhsForm = 1, MatForm = 0 (疎行列) の場合) |
| [out] | Rhsind() | 配列 Rhsind(LRhsind - 1) (LRhsind >= Nrhsix)
右辺行列の列インデクス(CSR あるいは COO の場合), または 行インデクス(CSC の場合). (RhsForm = 1, MatForm = 0 (疎行列) の場合) |
| [out] | Sguess() | 配列 Sguess(LSguess - 1) (LSguess >= Nrow*Nrhs)
初期推定ベクトル. (IniVec = 1 の場合) |
| [out] | Xexact() | 配列 Xexact(LXexact - 1) (LXexact >= Nrow*Nrhs)
解ベクトル. (SolVec = 1 の場合) |
| [out] | DataType | 行列のデータ型.
= 0: 実数.
= 2: パターン. |
| [out] | MatShape | 行列の形状.
= 0: 非対称行列.
= 1: 対称行列.
= 2: 歪対称(交代)行列.
= 4: 長方形行列. |
| [out] | MatForm | 行列の格納形式.
= 0: 疎行列.
= 1: 有限要素行列. |
| [out] | RhsForm | 右辺行列の格納形式.
= 0: 密行列.
= 1: 係数行列と同形式. |
| [out] | IniVec | 初期推定ベクトル.
= 0: 格納しない.
= 1: 格納する. |
| [out] | SolVec | 解ベクトル.
= 0: 格納しない.
= 1: 格納する. |
| [out] | Info | (省略可)
= 0: 正常終了.
= i < 0: (-i)番目の入力パラメータの誤り.
= 1: ファイルがオープンできなかった.
= 3: ファイル読み出しエラー.
= 4: 読み出しフォーマットの誤り.
= 5: メモリーエラー. |
| [in] | Skip | (省略可)
一部のデータだけを読み出すときに以下のようにフラグを指定する. (省略時 = 0)
ビット1(最下位ビット) = 1: 行列データを読み出さない.
ビット2 = 1: 右辺行列(初期推定ベクトルと解ベクトルを除く)を読み出さない.
ビット3 = 1: 初期推定ベクトルを読み出さない.
ビット4 = 1: 解ベクトルを読み出さない. |
| [in] | Base | (省略可)
Ptr, Ind, Rhsptr および Rhsind のインデクス形式. (省略時 = 0)
= 0: 0-ベース(C形式): 開始インデクス値が 0.
= 1: 1-ベース(Fortran形式): 開始インデクス値が 1. |
| [in] | Format | (省略可)
疎行列の格納形式. (省略時 = 0)
= 0: CSR形式.
= 1: CSC形式.
= 2: COO形式. |
| [in] | Sort | (省略可)
読み出した疎行列を行内で列番号の昇順(CSR の場合) または 列内で行番号の昇順(CSC の場合)に並べ替えるかどうかを指定. (省略時 = 0)
= 0: 並べ替えを行わない.
= 1: 並べ替えを行う. |
- 使用例
- 次の Harwell-Boeing 形式ファイル (Test_HBWrite.rua) を読み出す.
7 1 2 3 1
RUA 3 3 9 0
(8I10) (8I10) (3D23.15) (3D23.15)
F 1 0
1 4 7 10
1 2 3 1 2 3 1 2
3
2.000000000000000e-01 -3.200000000000000e-01 -8.000000000000000e-01
-1.100000000000000e-01 8.100000000000001e-01 -9.200000000000000e-01
-9.300000000000000e-01 3.700000000000000e-01 -2.900000000000000e-01
-3.727000000000000e-01 4.319000000000000e-01 -1.424700000000000e+00
Sub HBWrite(Fname As String, ByVal Title As String, Key As String, Nrow As Long, Ncol As Long, Nnz As Long, Neltvl As Long, Val() As Double, Ptr() As Long, Ind() As Long, Nrhs As Long, Nrhsix As Long, Rhsval() As Double, Rhsptr() As Long, Rhsind() As Long, Sguess() As Double, Xexact() As Double, DataType As Long, MatShape As Long, MatForm As Long, RhsForm As Long, IniVec As Long, SolVec As Long, Optional Info As Long, Optional Fchk As Long=0, Optional Base As Long=-1, Optional Format As Long=0, Optional IntN As Long=8, Optional IntW As Long=10, Optional DblN As Long=3, Optional DblW As Long=23, Optional DblD As Long=15) Harwell-Boeing形式ファイルへの書き込み
Sub Ex_HBRead()
Dim Title As String, Key As String
Dim M As Long, N As Long, Nnz As Long, Neltvl As Long, Nrhs As Long, Nrhsix As Long
Dim DataType As Long, MatShape As Long, MatForm As Long, RhsForm As Long, IniVec As Long, SolVec As Long
Dim A(8) As Double, Ia(3) As Long, Ja(8) As Long, B(2) As Double, IDummy() As Long, Dummy() As Double
Dim Info As Long
Call HBRead("Test_HBWrite.rua", Title, Key, M, N, Nnz, Neltvl, A(), Ia(), Ja(), Nrhs, Nrhsix, B(), IDummy(), IDummy(), Dummy(), Dummy(), DataType, MatShape, MatForm, RhsForm, IniVec, SolVec, Info)
Debug.Print " HBRead: Info =" + Str(Info)
Debug.Print "Title = """ + Title + """, Key = """ + Key + """, M =" + Str(M) + ", N =" + Str(N) + ", Nnz =" + Str(Nnz) + ", Neltvl =" + Str(Neltvl) + ", Nrhs =" + Str(Nrhs) + ", Nrhsix =" + Str(Nrhsix)
Debug.Print "DataType =" + Str(DataType) + ", MatShape =" + Str(MatShape) + ", MatForm =" + Str(MatForm) + ", RhsForm = " + Str(RhsForm) + ", IniVec =" + Str(IniVec) + ", SolVec = " + Str(SolVec); ""
Debug.Print A(0), A(1), A(2), A(3), A(4), A(5), A(6), A(7), A(8)
Debug.Print Ia(0), Ia(1), Ia(2), Ia(3)
Debug.Print Ja(0), Ja(1), Ja(2), Ja(3), Ja(4), Ja(5), Ja(6), Ja(7), Ja(8)
Debug.Print B(0), B(1), B(2)
End Sub
Sub HBRead(Fname As String, Title As String, Key As String, Nrow As Long, Ncol As Long, Nnz As Long, Neltvl As Long, Val() As Double, Ptr() As Long, Ind() As Long, Nrhs As Long, Nrhsix As Long, Rhsval() As Double, Rhsptr() As Long, Rhsind() As Long, Sguess() As Double, Xexact() As Double, DataType As Long, MatShape As Long, MatForm As Long, RhsForm As Long, IniVec As Long, SolVec As Long, Optional Info As Long, Optional Skip As Long=0, Optional Base As Long=0, Optional Format As Long=0, Optional Sort As Long=0) Harwell-Boeing形式ファイルの読み出し
- 実行結果
Title = "Test HBWrite", Key = "Key", M = 3, N = 3, Nnz = 9, Neltvl = 0, Nrhs = 1, Nrhsix = 0
DataType = 0, MatShape = 0, MatForm = 0, RhsForm = 0, IniVec = 0, SolVec = 0
0.2 -0.11 -0.93 -0.32 0.81 0.37 -0.8 -0.92 -0.29
0 3 6 9
0 1 2 0 1 2 0 1 2
-0.3727 0.4319 -1.4247
|