|
|
◆ fem3p()
| void fem3p |
( |
int |
n, |
|
|
int |
ne, |
|
|
double |
x[], |
|
|
double |
y[], |
|
|
double |
z[], |
|
|
int |
ldknc, |
|
|
int |
knc[], |
|
|
double |
p[], |
|
|
double |
q[], |
|
|
double |
f[], |
|
|
int |
nb1, |
|
|
int |
ib[], |
|
|
double |
bv[], |
|
|
int |
nb2, |
|
|
int |
ldks2, |
|
|
int |
ks2[], |
|
|
int |
ldalpha, |
|
|
double |
alpha[], |
|
|
int |
ldbeta, |
|
|
double |
beta[], |
|
|
int |
asize, |
|
|
double |
val[], |
|
|
int |
rowptr[], |
|
|
int |
colind[], |
|
|
int |
base, |
|
|
double |
b[], |
|
|
int |
iwork[], |
|
|
int * |
info |
|
) |
| |
ポアソン方程式の有限要素行列の組み立て (3D) (CSR 形式疎行列)
- 目的
- 次のような一般化した三次元のポアソン方程式の有限要素行列の組み立てを行う.
-div(p(x,y,z) grad u(x,y,z)) + q(x,y,z)u(x,y,z) = f(x,y,z)
ディリクレ境界条件: u(x,y,z) = g
自然境界条件: p(x,y,z)*du/dn + α(k,l)*u(x,y,z) + β(k,l) = 0
出力行列は CSR 形式疎行列である.
- 引数
-
| [in] | n | 節点数. (n > 0) |
| [in] | ne | 要素数. (ne > 0) |
| [in] | x[] | 配列 x[lx] (lx >= n)
節点の x 座標. |
| [in] | y[] | 配列 y[ly] (ly >= n)
節点の y 座標. |
| [in] | z[] | 配列 z[lz] (lz >= n)
節点の z 座標. |
| [in] | ldknc | 二次元配列 knc[] の整合寸法. (ldknc >= nn + 1, ただし nn は要素中の節点数) |
| [in] | knc[] | 配列 knc[ldknc*lknc] (lknc >= ne)
コネクション行列: knc[(k-1)*ldknc] は要素 k のタイプ, knc[(k-1)*ldknc + 1], ..., knc[(k-1)*ldknc + nn] は要素 k の節点を表す.
要素タイプの値は次のとおり.
= 4: 4節点4面体.
= 5: 8節点6面体.
= 6: 6節点プリズム.
= 7: 5節点ピラミッド. |
| [in] | p[] | 配列 p[lp] (lp >= n)
各ノードにおける係数 p(x, y, z). |
| [in] | q[] | 配列 q[lq] (lq >= n)
各ノードにおける係数 q(x, y, z). |
| [in] | f[] | 配列 f[lf] (lf >= n)
各ノードにおける係数 f(x, y, z). |
| [in] | nb1 | ディリクレ境界条件の境界の節点数. (nb1 >= 0) |
| [in] | ib[] | 配列 ib[lib] (lib >= nb1)
ディリクレ境界条件の境界の節点の節点番号. |
| [in] | bv[] | 配列 bv[lbv] (lbv >= nb1)
境界の各節点における境界値. |
| [in] | nb2 | 自然境界条件の境界数. (nb2 >= 0) |
| [in] | ldks2 | 二次元配列 ks2[] の整合寸法. (ldks2 >= nns + 1, ただし, nns は境界要素中の節点数) |
| [in] | ks2[] | 配列 ks2[ldks2*lks2] (lks2 >= nb2)
自然境界条件の境界のコネクション行列: ks2[(k-1)*ldks2] は境界要素 k のタイプ, ks2[(k-1)*ldks2 + 1], ..., ks2[(k-1)*ldks2 + nns] は境界要素 k の節点を表す.
要素タイプの値は次のとおり.
= 2: 3節点3角形.
= 3: 4節点4角形. |
| [in] | ldalpha | 二次元配列 alpha[] の整合寸法. (ldalpha >= nns) |
| [in] | alpha[] | 配列 alpha[ldalpha*lalpha] (lalpha >= nb2)
自然境界の各節点における係数 α. |
| [in] | ldbeta | 二次元配列 beta[] の整合寸法. (ldbeta >= nns) |
| [in] | beta[] | 配列 beta[ldbeta*lbeta] (lbeta >= nb2)
自然境界の各節点における係数 β. |
| [in] | asize | 配列 val[] および colind[] のサイズ. 有限要素方程式の係数行列の実際の非ゼロ要素数の数倍必要である. (asize > 0) |
| [out] | val[] | val[lval] (lval >= asize)
組み立てられた有限要素方程式の係数行列 (値). |
| [out] | rowptr[] | rowptr[lrowptr] (lrowptr >= n + 1)
組み立てられた有限要素方程式の係数行列 (行ポインタ). |
| [out] | colind[] | colind[lcolind] (lcolind >= asize)
組み立てられた有限要素方程式の係数行列 (列番号). |
| [in] | base | rowptr[] および colind[] のインデクス形式.
= 0: 0-ベース(C形式): 開始インデクス値が 0.
= 1: 1-ベース(Fortran形式): 開始インデクス値が 1. |
| [out] | b[] | 配列 b[lb] (lb >= n)
有限要素方程式の右辺ベクトル. |
| [out] | iwork[] | 配列 iwork[liwork] (liwork >= 2*n)
作業用配列. |
| [out] | info | リターンコード.
= 0: 正常終了.
= i < 0: (-i)番目の入力パラメータの誤り.
= 11: knc[] において要素タイプが正しくない.
= 12: 4 面体要素の体積が 0 または負.
= 13: ks2[] において境界要素タイプが正しくない.
= 14: Ks2[] において節点番号が正しくない.
= 15: 境界要素の面積が 0 または負.
= 16: A() または Ja() のサイズが不足.
= 17: 行列の組み立て中に内部エラーが発生した. |
|