Microsoft PowerPoint - 3D-FEM-2.ppt [互換モード]

Similar documents
Microsoft PowerPoint - FEM3D-C [互換モード]

Microsoft PowerPoint - 03-FEM3D-C.ppt [互換モード]

Microsoft PowerPoint - 03-FEM3D-F.ppt [互換モード]

Microsoft PowerPoint - FEM3D-F [互換モード]

Microsoft PowerPoint - 3D-FEM-1.ppt [互換モード]

パソコンシミュレータの現状

FEM原理講座 (サンプルテキスト)

Microsoft PowerPoint - 3D-FEM-1.ppt [互換モード]

Microsoft PowerPoint - elast.ppt [互換モード]

Microsoft PowerPoint - FEM3D-C.ppt [互換モード]

<4D F736F F F696E74202D20906C8D488AC28BAB90DD8C7689F090CD8D488A D91E F1>

(Microsoft PowerPoint - \221\34613\211\361)

Microsoft PowerPoint - シミュレーション工学-2010-第1回.ppt

Microsoft PowerPoint - 08-pFEM3D-2C.ppt [互換モード]

Microsoft Word - 1B2011.doc

テンソル ( その ) テンソル ( その ) スカラー ( 階のテンソル ) スカラー ( 階のテンソル ) 階数 ベクトル ( 階のテンソル ) ベクトル ( 階のテンソル ) 行列表現 シンボリック表現 [ ]

OpenFOAM(R) ソースコード入門 pt1 熱伝導方程式の解法から有限体積法の実装について考える 前編 : 有限体積法の基礎確認 2013/11/17 オープンCAE 富山富山県立大学中川慎二

構造力学Ⅰ第12回

Microsoft PowerPoint - 3Dp-2.ppt [互換モード]

Microsoft PowerPoint - 08-pFEM3D-2F.ppt [互換モード]

位相最適化?

NS NS Scalar turbulence 5 6 FEM NS Mesh (A )

行列、ベクトル

09.pptx

memo

Microsoft PowerPoint - H22制御工学I-10回.ppt

Microsoft PowerPoint - 10.pptx

FrontISTR による熱応力解析 東京大学新領域創成科学研究科人間環境学専攻橋本学 2014 年 10 月 31 日第 15 回 FrontISTR 研究会 < 機能 例題 定式化 プログラム解説編 熱応力解析 / 弾塑性解析 >

連立方程式の解法

<4D F736F F F696E74202D E94D58B9393AE82F AC82B782E982BD82DF82CC8AEE E707074>

静的弾性問題の有限要素法解析アルゴリズム

< B795FB8C6094C28F6F97CD97E12E786477>

<4D F736F F D208D5C91A297CD8A7793FC96E591E631318FCD2E646F63>

スライド 1

Microsoft PowerPoint - 10.pptx

Microsoft PowerPoint - Eigen.pptx

第1章 単 位

5-仮想仕事式と種々の応力.ppt

スライド 1

解析力学B - 第11回: 正準変換

Microsoft PowerPoint - 2_FrontISTRと利用可能なソフトウェア.pptx

技術者のための構造力学 2014/06/11 1. はじめに 資料 2 節点座標系による傾斜支持節点節点の処理 三好崇夫加藤久人 従来, マトリックス変位法に基づく骨組解析を紹介する教科書においては, 全体座標系に対して傾斜 した斜面上の支持条件を考慮する処理方法として, 一旦, 傾斜支持を無視した

SPACEstJ User's Manual

Microsoft PowerPoint - zairiki_3

Microsoft PowerPoint - SolverDirect.ppt [互換モード]

Microsoft PowerPoint - 08-pFEM3D-2F.ppt [互換モード]

[Problem D] ぐらぐら 一般に n 個の物体があり i 番目の物体の重心の x 座標を x i, 重さを w i とすると 全体の n 重心の x 座標と重さ w は x = ( x w ) / w, w = w となる i= 1 i i n i= 1 i 良さそうな方法は思いつかなかった

PowerPoint Presentation

耳桁の剛性の考慮分配係数の計算条件は 主桁本数 n 格子剛度 zです 通常の並列鋼桁橋では 主桁はすべて同じ断面を使います しかし 分配の効率を上げる場合 耳桁 ( 幅員端側の桁 ) の断面を大きくすることがあります 最近の桁橋では 上下線を別橋梁とすることがあり また 防音壁などの敷設が片側に有る

73

Microsoft PowerPoint - Lec17 [互換モード]

Microsoft PowerPoint - H22制御工学I-2回.ppt

memo

画像解析論(2) 講義内容


PowerPoint Presentation

例 e 指数関数的に減衰する信号を h( a < + a a すると, それらのラプラス変換は, H ( ) { e } e インパルス応答が h( a < ( ただし a >, U( ) { } となるシステムにステップ信号 ( y( のラプラス変換 Y () は, Y ( ) H ( ) X (

<4D F736F F D2097CD8A7793FC96E582BD82ED82DD8A E6318FCD2E646F63>

<4D F736F F D208D5C91A297CD8A7793FC96E591E631308FCD2E646F63>

...Y..FEM.pm5

行列の反復解法 1. 点 Jacobi 法 数値解法の重要な概念の一つである反復法を取り上げ 連立一次方程式 Au=b の反復解法を調べる 行列のスペクトル半径と収束行列の定義を与える 行列のスペクトル半径行列 Aの固有値の絶対値の最大値でもって 行列 Aのスペクトル半径 r(a) を与える 収束行

cp-7. 配列

破壊の予測

xyz,, uvw,, Bernoulli-Euler u c c c v, w θ x c c c dv ( x) dw uxyz (,, ) = u( x) y z + ω( yz, ) φ dx dx c vxyz (,, ) = v( x) zθ x ( x) c wxyz (,, ) =

板バネの元は固定にします x[0] は常に0です : > x[0]:=t->0; (1.2) 初期値の設定をします 以降 for 文処理のため 空集合を生成しておきます : > init:={}: 30 番目 ( 端 ) 以外については 初期高さおよび初速は全て 0 にします 初期高さを x[j]

前期募集 令和 2 年度山梨大学大学院医工農学総合教育部修士課程工学専攻 入学試験問題 No.1/2 コース等 メカトロニクス工学コース 試験科目 数学 問 1 図 1 は, 原点 O の直交座標系 x,y,z に関して, 線分 OA,OB,OC を 3 辺にもつ平行六面体を示す. ここで, 点 A

슬라이드 1

多次元レーザー分光で探る凝縮分子系の超高速動力学

Microsoft Word - kogi10ex_main.docx

PowerPoint Presentation

Microsoft PowerPoint - Eigen.ppt [互換モード]

応用数学Ⅱ 偏微分方程式(2) 波動方程式(12/13)

FrontISTR に実装されている定式化を十分に理解し, 解きたい問題に対してソースコードを自由にカスタマイズ ( 要素タイプを追加, 材料の種類を追加, ユーザサブルーチンを追加 ) できるようになること を最終目標とします 第 3 回, 第 7 回, 第 10 回の研究会では,FrontIST

Microsoft PowerPoint - H21生物計算化学2.ppt

gengo1-11

2 1 κ c(t) = (x(t), y(t)) ( ) det(c (t), c x (t)) = det (t) x (t) y (t) y = x (t)y (t) x (t)y (t), (t) c (t) = (x (t)) 2 + (y (t)) 2. c (t) =

PowerPoint Presentation

変 位 変位とは 物体中のある点が変形後に 別の点に異動したときの位置の変化で あり ベクトル量である 変位には 物体の変形の他に剛体運動 剛体変位 が含まれている 剛体変位 P(x, y, z) 平行移動と回転 P! (x + u, y + v, z + w) Q(x + d x, y + dy,

今後の予定 6/29 パターン形成第 11 回 7/6 データ解析第 12 回 7/13 群れ行動 ( 久保先生 ) 第 13 回 7/17 ( 金 ) 休講 7/20 まとめ第 14 回 7/27 休講?

数学 t t t t t 加法定理 t t t 倍角公式加法定理で α=β と置く. 三角関数

に対して 例 2: に対して 逆行列は常に存在するとは限らない 逆行列が存在する行列を正則行列 (regular matrix) という 正則である 逆行列が存在する 一般に 正則行列 A の逆行列 A -1 も正則であり (A -1 ) -1 =A が成り立つ また 2 つの正則行列 A B の積

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

x, y x 3 y xy 3 x 2 y + xy 2 x 3 + y 3 = x 3 y xy 3 x 2 y + xy 2 x 3 + y 3 = 15 xy (x y) (x + y) xy (x y) (x y) ( x 2 + xy + y 2) = 15 (x y)

偏微分方程式、連立1次方程式、乱数

以下 変数の上のドットは時間に関する微分を表わしている (ex. 2 dx d x x, x 2 dt dt ) 付録 E 非線形微分方程式の平衡点の安定性解析 E-1) 非線形方程式の線形近似特に言及してこなかったが これまでは線形微分方程式 ( x や x, x などがすべて 1 次で なおかつ

スライド 1

Microsoft Word - スーパーナビ 第6回 数学.docx

2018/6/12 表面の電子状態 表面に局在する電子状態 表面電子状態表面準位 1. ショックレー状態 ( 準位 ) 2. タム状態 ( 準位 ) 3. 鏡像状態 ( 準位 ) 4. 表面バンドのナローイング 5. 吸着子の状態密度 鏡像力によるポテンシャル 表面からzの位置の電子に働く力とポテン

Microsoft Word ã‡»ã…«ã‡ªã…¼ã…‹ã…žã…‹ã…³ã†¨åłºæœ›å•¤(佒芤喋çfl�)

Note.tex 2008/09/19( )

4 小川/小川

Microsoft PowerPoint - 講義PPT2019.ppt [互換モード]

有限要素法法による弾弾性変形解析 (Gmsh+Calculix)) 海洋エネルギギー研究センター今井 問題断面が1mmx1mm 長さ 20mmm の鋼の一端端を固定 他他端に点荷重重をかけた場場合の先端変変位および最大応力を求求める P Equation Chapter 1 Section 1 l

02: 変数と標準入出力

Microsoft PowerPoint - fuseitei_6

ଗȨɍɫȮĘർǻ 図 : a)3 次元自由粒子の波数空間におけるエネルギー固有値の分布の様子 b) マクロなサイズの系 L ) における W E) と ΩE) の対応 として与えられる 周期境界条件を満たす波数 kn は kn = πn, L n = 0, ±, ±, 7) となる 長さ L の有限

<4D F736F F D208D5C91A297CD8A7793FC96E591E6398FCD2E646F63>

02: 変数と標準入出力


線形弾性体 線形弾性体 応力テンソル とひずみテンソルソル の各成分が線形関係を有する固体. kl 応力テンソル O kl ひずみテンソル

Transcription:

三次元弾性解析コード (2/3) マトリクス生成 22 年夏学期 中島研吾 科学技術計算 Ⅰ(482-27) コンピュータ科学特別講義 Ⅰ(48-24)

FEM3D-Prt2 2 初期化 有限要素法の処理 : プログラム 制御変数読み込み 座標読み込み 要素生成 (: 節点数 ICELTOT: 要素数 ) 配列初期化 ( 全体マトリクス 要素マトリクス ) 要素 全体マトリクスマッピング (IndeItem) マトリクス生成 要素単位の処理 (do cel ICELTOT) 要素マトリクス計算 全体マトリクスへの重ね合わせ 境界条件の処理 連立一次方程式 共役勾配法 (CG) 応力計算

FEM3D-Prt2 3 test メインプログラム nput_cntl 制御データ入力 nput_grd メッシュファイル入力 fnd_node 節点探索 mt_con 行列コネクティビティ生成 msort ソート mt_con 行列コネクティビティ生成 mt_ss_mnss mn 係数行列生成 cob ヤコビアン計算 mt_ss_bc 境界条件処理 三次元弾性解析コードfem3d の構成 solve33 線形ソルバー制御 recover_stress 応力計算 output_ucd 可視化処理 cg_3 CG 法計算 cob ヤコビアン計算

FEM3D-Prt2 4 fem3d: いくつかの特徴 非対角成分 上三角 下三角を分けて記憶 ndeltemlal ndeutemuau U ブロックとして記憶 ベクトル : 節点 3 成分 行列 : 各ブロック9 成分 行列の各成分ではなく 節点上の3 変数に基づくブロックとして処理する L

FEM3D-Prt2 5 ブロックとして記憶 (/3) 記憶容量が減る nde tem に関する記憶容量を削減できる

FEM3D-Prt2 6 ブロックとして記憶 (2/3) 計算効率 間接参照 ( メモリに負担 ) と計算の比が大きくなる ベクトル スカラー共に効く :2 倍以上の性能 連続領域 キャッシュに載る ループあたりの計算量増加 do 3* do Y() D()*X() X X(3*-2) do k nde(-) nde() X2 X(3*-) kk tem(k) X3 X(3*) enddo enddo Y() Y() AMAT(k)*X(kk) Y(3*-2) D(9*-8)*XD(9*-7)*X2D(9*-6)*X3 Y(3*-) D(9*-5)*XD(9*-4)*X2D(9*-3)*X3 Y(3*I ) D(9*-2)*XD(9*-)*X2D(9*I )*X3 do k nde(-) nde() enddo enddo kk tem(k) X X(3*kk-2) X2 X(3*kk-) X3 X(3*kk) Y(3*-2) Y(3*-2)AMAT(9*k-8)*XAMAT(9*k-7)*X2 & AMAT(9*k-6)*X3 Y(3*-) Y(3*-)AMAT(9*k-5)*XAMAT(9*k-4)*X2 & AMAT(9*k-3)*X3 Y(3*I ) Y(3*I )AMAT(9*k-2)*XAMAT(9*k-)*X2 & AMAT(9*k )*X3

FEM3D-Prt2 7 ブロックとして記憶 (3/3) 計算の安定化 対角成分で割るのではなく 対角ブロックの完全 LU 分解を求めて解く 特に悪条件問題で有効

FEM3D-Prt2 8 Globl 変数表 :pfem_utl.h/f(/3) 変数名種別サイズ I/O 内容 fnme C [8] I メッシュファイル名 P I I 節点数 ICELTOT I I 要素数 ODGRPtot I I 節点グループ数 XYZ R [][3] I 節点座標 ICELOD I [ICELTOT][8] I 要素コネクティビティ ODGRP_IDEX I [ODGRPtot] I 各節点グループに含まれる節点数 ( 累積 ) ODGRP_ITEM I [ODGRP_IDEX[ODG RPTOT]] I 節点グループに含まれる節点 ODGRP_AME C8 [ODGRP_IDEX[ODG RPTOT]] I 節点グループ名 L U I O 各節点非対角成分数 ( 上三角 下三角 ) PL PU I O 非対角成分総数 ( 上三角 下三角 ) D R [9*] O 全体行列 : 対角ブロック BX R [3*] O 右辺ベクトル 未知数ベクトル

FEM3D-Prt2 9 Globl 変数表 :pfem_utl.h/f(2/3) 変数名種別サイズ I/O 内容 ALUG R [9*] O 全体行列 : 対角ブロックの完全 LU 分解 ALAU R [9*PL][9*PU] O 全体行列 : 上 下三角ブロック成分 ndel ndeu I [] O 全体行列 : 非零非対角ブロック数 teml temu I [PL] [PU] O 全体行列 : 上 下三角ブロック ( 列番号 ) IL IU I [] O 各節点の上 下三角ブロック数 IALIAUIAU I [][L][][U][][U] O 各節点の上 下三角ブロック ( 列番号 ) IWKX I [][2] O ワーク用配列 METHOD I I 反復解法 ( に固定 ) PRECOD I I 前処理手法 (: ブロック SSOR: ブロック対角スケーリング ) ITER ITERctul I I 反復回数の上限 実際の反復回数 RESID R I 打ち切り誤差 (.e-8 に設定 ) SIGMA_DIAG R I LU 分解時の対角成分係数 (. に設定 ) pfemirr I [] O 諸定数 ( 整数 ) pfemrrr R [] O 諸定数 ( 実数 )

FEM3D-Prt2 Globl 変数表 :pfem_utl.h/f(3/3) 変数名種別サイズ I/O 内容 O8th R I.25 PQ PE PT R [2][2][8] O 各ガウス積分点における η ζ ( ~ 8) POS WEI R [2] O 各ガウス積分点の座標 重み係数 COL COL2 I [] O ソート用ワーク配列 SHAPE R [2][2][2][8] O 各ガウス積分点における形状関数 (~8) PX PY PZ R [2][2][2][8] O 各ガウス積分点における ( ~ 8 ) DETJ R [2][2][2] O 各ガウス積分点におけるヤコビアン行列式 ELAST POISSO R I ヤング率 ポアソン比 SIGMA_ TAU_ R [][3] O 節点における垂直 せん断応力成分

FEM3D-Prt2 用語の定義 ブロック ( 節点 ): 成分 ( 自由度 ):

FEM3D-Prt2 2 マトリクス生成まで 一次元のときは ndetemに関連した情報を簡単に作ることができた 非ゼロ非対角成分の数は 2 番号が自分に対して : と- 三次元の場合はもっと複雑 非ゼロ非対角ブロックの数は 7~26( 現在の形状 ) 実際はもっと複雑 前以て 非ゼロ非対角ブロックの数はわからない move

FEM3D-Prt2 3 マトリクス生成まで 一次元のときは ndetemに関連した情報を簡単に作ることができた 非ゼロ非対角成分の数は 2 番号が自分に対して : と- 三次元の場合はもっと複雑 非ゼロ非対角ブロックの数は非対角ブ 7~26( ( 現在の形状 ) 実際はもっと複雑 前以て 非ゼロ非対角ブロックの数はわからない非対角ブ IL[]IU[]IAL[][L]IAU[][U] を使って非ゼロ非対角ブロック数 ( 上下 ) を予備的に勘定する

FEM3D-Prt2 4 全体処理 #nclude <stdo.h> #nclude <stdlb.h> 3 4 5 6 FILE* fp_log; #defne GLOBAL_VALUE_DEFIE #nclude "pfem_utl.h" 7 8 9 etern vod IPUT_CTL(); etern vod IPUT_GRID(); etern vod MAT_CO(); etern vod MAT_CO(); etern vod MAT_ASS_MAI(); etern vod MAT_ASS_BC(); ASS etern vod SOLVE33(); etern vod RECOVER_STRESS(); etern vod OUTPUT_UCD(); nt mn() { /** Logfle for debug **/ f( (fp_logfopen("log.log""w")) ULL){ fprntf(stdout"nput fle cnnot be opened! n"); et(); 9 2 4 5 2 6 5 6 7 8 3 2 3 4 IPUT_CTL(); IPUT_GRID(); MAT_CO(); MAT_CO(); MAT_ASS_MAI(); MAT_ASS_BC() ; SOLVE33(); RECOVER_STRESS(); OUTPUT_UCD() ; MAT_CO: ILIU IAL IAU 生成 MAT_CO: nde tem 生成 とりあえず から始まる節点番号を記憶

FEM3D-Prt2 5 MAT_CO: 全体構成 do cel ICELTOT 8 節点相互の関係から ILIUIALIAU を生成 (FID_ODE) enddo 3 4 5 6 ( ) 8 7 ( ) ( ) 5 6 ) ( ) 4 3 ( ) 2 ( η ζ ) ( ) ( ) 7 8 9 9 2 4 5 6 5 6 7 8 2 3 2 3 4

FEM3D-Prt2 6 行列コネクティビティ生成 : MAT_CO(/4) ( ) #nclude <stdo.h> #nclude "pfem_utl.h h" #nclude "llocte.h" etern FILE *fp_log; etern vod msort(nt* nt* nt); sttc vod FID_TS_ODE (ntnt); vod MAT_CO() { nt kceln; nt nn2n3n4n5n6n7n8; nt ; 2 256;( この変数は使用しない ) U 26; L 26; IL(KIT* )llocte_vector(seof(kit)); IAL(KIT**)llocte _ mtr(seof(kit)l); ( ) IU(KIT* )llocte_vector(seof(kit)); IAU(KIT**)llocte_mtr(seof(KIT)U); for(;<;) IL[]; for(;<;) for(;<l;) IAL[][]; for(;<;) IU[]; for(;<;) for(;<u;) IAU[][]; UL: 各節点における ( 上下 ) 非ゼロ非対角ブロックの最大数 ( 接続する節点数 ) 今の問題の場合はわかっているので このようにできる 不明の場合の実装 : レポート課題

FEM3D-Prt2 7 行列コネクティビティ生成 : MAT_CO(/4) ( ) #nclude <stdo.h> #nclude "pfem_utl.h h" #nclude "llocte.h" etern FILE *fp_log; etern vod msort(nt* nt* nt); sttc vod FID_TS_ODE (ntnt); vod MAT_CO() { nt kceln; nt nn2n3n4n5n6n7n8; nt ; 2 256;( この変数は使用しない ) U 26; L 26; 変数名サイズ内容各節点の上 下三角ブ IL IU [] ロック数 [][L] 各節点の上 下三角ブ IALIAU [][U] ロック ( 列番号 ) IL(KIT* )llocte_vector(seof(kit)); IAL(KIT**)llocte _ mtr(seof(kit)l); ( ) IU(KIT* )llocte_vector(seof(kit)); IAU(KIT**)llocte_mtr(seof(KIT)U); for(;<;) IL[]; for(;<;) for(;<l;) IAL[][]; for(;<;) IU[]; for(;<;) for(;<u;) IAU[][];

FEM3D-Prt2 8 行列コネクティビティ生成 : MAT_CO(2/4):( ) から始まる番号 for( cel;cel< ICELTOT;cel){ nicelod[cel][]; n2icelod[cel][]; n3icelod[cel][2]; n4icelod[cel][3]; n5icelod[cel][4]; n6icelod[cel][5]; n7icelod[cel][6]; n8icelod[cel][7]; FID_TS_ODE (nn2); FID_TS_ODE (nn3); FID_TS_ODE (nn4); FID_TS_ODE (nn5); FID_TS_ODE (nn6); FID_TS_ODE (nn7); FID_TS_ODE (nn8); ( ) 8 7 ( ) ( ) 5 6 ) ( ) 4 3 ( ) 2 ( η ζ ) ( ) ( ) FID_ TS_ ODE (n2n); FID_TS_ODE (n2n3); FID_TS_ODE (n2n4); FID_TS_ODE (n2n5); FID_TS_ODE (n2n6); FID_TS_ODE (n2n7); FID_TS_ODE ODE (n2n8); n8); FID_TS_ODE (n3n); FID_TS_ODE (n3n2); FID_TS_ODE (n3n4); FID_TS_ODE (n3n5); FID_TS_ODE ODE (n3n6); n6); FID_TS_ODE (n3n7); FID_TS_ODE (n3n8);

FEM3D-Prt2 9 節点探索 :FID_TS_ODE ILIUIALIAU 探索 : 一次元ではこの部分は手動 sttc vod FID_TS_ODE (nt pnt p2) { nt kkcou; f( p > p2 ){ for(kk;kk<il[p-];kk){ f(p2 IAL[p-][kk-]) return; couil[p-]; ] IAL[p-][cou-]p2; IL[p-]cou; return; f( p2 > p ) { for(kk;kk<iu[p-];kk){ f(p2 IAU[p-][kk-]) return; couiu[p-]; IAU[p-][cou-]p2; ][cou ] p2; IU[p-]cou; return; 変数名サイズ内容 IL IU [] 各節点の上 下三角ブロック数 IALIAU [][L] [][U] 各節点の上 下三角ブロック ( 列番号 )

FEM3D-Prt2 2 節点探索 :FID_TS_ODE 一次元ではこの部分は手動 sttc vod FID_TS_ODE (nt pnt p2) { nt kkcou; f( p > p2 ){ for(kk;kk<il[p-];kk){ f(p2 IAL[p-][kk-]) return; couil[p-]; ] IAL[p-][cou-]p2; IL[p-]cou; return; 既に IALIAUIAU に含まれている場合は 次のペアへ f( p2 > p ) { for(kk;kk<iu[p-];kk){ f(p2 IAU[p-][kk-]) return; couiu[p-]; 3 4 5 6 IAU[p-][cou-]p2; ][cou ] p2; IU[p-]cou; 8 return; 7 9 9 2 4 5 6 5 6 7 8 2 3 2 3 4

FEM3D-Prt2 2 節点探索 :FID_TS_ODE 一次元ではこの部分は手動 sttc vod FID_TS_ODE (nt pnt p2) { nt kkcou; f( p > p2 ){ for(kk;kk<il[p-];kk){ f(p2 IAL[p-][kk-]) return; couil[p-]; ] IAL[p-][cou-]p2; IL[p-]cou; return; IALIAUIAU に含まれていない場合は IL IUにを加えて IALIAUに格納 f( p2 > p ) { for(kk;kk<iu[p-];kk){ f(p2 IAU[p-][kk-]) return; couiu[p-]; 3 4 5 6 IAU[p-][cou-]p2; ][cou ] p2; IU[p-]cou; 8 return; 7 9 9 2 4 5 6 5 6 7 8 2 3 2 3 4

FEM3D-Prt2 22 行列コネクティビティ生成 : MAT_CO(3/4) ( ) FID_TS_ODE (n4n); FID_TS_ODE ODE (n4n2); FID_TS_ODE (n4n3); FID_TS_ODE (n4n5); FID_TS_ODE (n4n6); FID_TS_ODE (n4n7); FID_TS_ODE (n4n8); FID_TS_ODE (n5n); FID_TS_ODE (n5n2); FID_TS_ODE (n5n3); FID_TS_ODE (n5n4); FID_TS_ODE (n5n6); FID_TS_ODE ODE (n5n7); n7); FID_TS_ODE (n5n8); FID_TS_ODE (n6n); FID_TS_ODE (n6n2); FID_TS_ODE (n6n3); FID_TS_ODE ODE (n6n4); n4); FID_TS_ODE (n6n5); FID_TS_ODE (n6n7); FID_TS_ODE (n6n8); ( ) 8 7 ( ) ( ) 5 6 ) ( ) 4 3 ( ) 2 ( η ζ ) ( ) ( ) FID_TS_ODE (n7n); FID_TS_ODE ODE (n7n2); 72); FID_TS_ODE (n7n3); FID_TS_ODE (n7n4); FID_TS_ODE (n7n5); FID_TS_ODE (n7n6); FID_TS_ODE (n7n8);

FEM3D-Prt2 23 行列コネクティビティ生成 : MAT_CO(4/4) ( ) FID_TS_ODE (n8n); FID_TS_ODE ODE (n8n2); n2); FID_TS_ODE (n8n3); FID_TS_ODE (n8n4); FID_TS_ODE (n8n5); FID_TS_ODE (n8n6); FID_TS_ODE (n8n7); for(n;n<;n){ IL[n]; for (k;k<;k){ COL[k]IAL[n][k]; msort(colcol2); for(k;k>;k--){ IAL[n][-k] COL[COL2[k-]-]; 各節点において IAL[][k]IAU[][k] が小さい番号から大きい番号に並ぶようにソート ( 単純なバブルソート ) せいぜい 程度のものをソートする IU[n]; for (k;k<;k){ COL[k]IAU[n][k]; msort(colcol2); for(k;k>;k--){ IAU[n][-k] COL[COL2[k-]-];

FEM3D-Prt2 24 CRS 形式への変換 :MAT_CO #nclude <stdo.h> #nclude "pfem_utl.h" #nclude "llocte.h" etern FILE* fp_log; vod MAT_CO() { nt kkk; ndel(kit*)llocte_vector(seof(kit)); ndeu(kit*)llocte_vector(seof(kit)); ); for(;<;) ndel[]; for(;<;) ndeu[]; C ndel[ ] IL[ k] for(;<;){ ndel[]ndel[]il[]; k ndeu[]ndeu[]iu[]; PLndeL[]; ndeu[ ] PUndeU[]; IU[ k] k teml(kit*)llocte_vector(seof(kit)pl); temu(kit*)llocte_vector(seof(kit)pu); PU); ndel[] ndeu[] for(;<;){ for(k;k<il[];k){ kkkndel[]; teml[kk]ial[][k]; for(k;k<iu[];k){ kkkndeu[]; temu[kk]iau[][k]; dellocte_vector(il); dellocte_vector(iu); dellocte_vector(ial); dellocte_vector(iau); FORTRA ndel[ ] ndeu[ ] k k IL[ k ] IU[ k] ndel[] ndeu[]

FEM3D-Prt2 25 CRS 形式への変換 :MAT_CO #nclude <stdo.h> #nclude "pfem_utl.h" #nclude "llocte.h" etern FILE* fp_log; vod MAT_CO() { nt kkk; ndel(kit*)llocte_vector(seof(kit)); ndeu(kit*)llocte_vector(seof(kit)); ); for(;<;) ndel[]; for(;<;) ndeu[]; for(;<;){ ndel[]ndel[]il[]; ndeu[]ndeu[]iu[]; PLndeL[]; PUndeU[]; teml(kit*)llocte_vector(seof(kit)pl); temu(kit*)llocte_vector(seof(kit)pu); PU); for(;<;){ for(k;k<il[];k){ kkkndel[]; teml[kk]ial[][k]; for(k;k<iu[];k){ kkkndeu[]; temu[kk]iau[][k]; dellocte_vector(il); dellocte_vector(iu); dellocte_vector(ial); dellocte_vector(iau); PLndeL[] teml のサイズ非ゼロ非対角ブロック ( 下三角 ) 総数 PUndeU[] temuのサイズ非ゼロ非対角ブロック ( 上三角 ) 総数

FEM3D-Prt2 26 CRS 形式への変換 :MAT_CO #nclude <stdo.h> #nclude "pfem_utl.h" #nclude "llocte.h" etern FILE* fp_log; vod MAT_CO() { nt kkk; ndel(kit*)llocte_vector(seof(kit)); ndeu(kit*)llocte_vector(seof(kit)); ); for(;<;) ndel[]; for(;<;) ndeu[]; for(;<;){ ndel[]ndel[]il[]; ndeu[]ndeu[]iu[]; PLndeL[]; PUndeU[]; teml(kit*)llocte_vector(seof(kit)pl); temu(kit*)llocte_vector(seof(kit)pu); PU); for(;<;){ for(k;k<il[];k){ kkkndel[]; teml[kk]ial[][k]; for(k;k<iu[];k){ kkkndeu[]; temu[kk]iau[][k]; dellocte_vector(il); dellocte_vector(iu); dellocte_vector(ial); dellocte_vector(iau); temltemuにもから始まる節点番号を記憶

FEM3D-Prt2 27 CRS 形式への変換 :MAT_CO #nclude <stdo.h> #nclude "pfem_utl.h" #nclude "llocte.h" etern FILE* fp_log; vod MAT_CO() { nt kkk; ndel(kit*)llocte_vector(seof(kit)); ndeu(kit*)llocte_vector(seof(kit)); ); for(;<;) ndel[]; for(;<;) ndeu[]; for(;<;){ ndel[]ndel[]il[]; ndeu[]ndeu[]iu[]; PLndeL[]; PUndeU[]; teml(kit*)llocte_vector(seof(kit)pl); temu(kit*)llocte_vector(seof(kit)pu); PU); for(;<;){ for(k;k<il[];k){ kkkndel[]; teml[kk]ial[][k]; for(k;k<iu[];k){ kkkndeu[]; temu[kk]iau[][k]; dellocte_vector(il); dellocte_vector(iu); dellocte_vector(ial); dellocte_vector(iau); これらはもはや不要

FEM3D-Prt2 28 全体処理 #nclude <stdo.h> #nclude <stdlb.h> FILE* fp_log; #defne GLOBAL_VALUE_DEFIE #nclude "pfem_utl.h" etern vod IPUT_CTL(); etern vod IPUT_GRID(); etern vod MAT_CO(); etern vod MAT_CO(); etern vod MAT_ASS_MAI(); etern vod MAT_ASS_BC(); ASS etern vod SOLVE33(); etern vod RECOVER_STRESS(); etern vod OUTPUT_UCD(); nt mn() { /** Logfle for debug **/ f( (fp_logfopen("log.log""w")) ULL){ fprntf(stdout"nput fle cnnot be opened! n"); et(); IPUT_CTL(); IPUT_GRID(); MAT_CO(); MAT_CO(); MAT_ASS_MAI(); MAT_ASS_BC() ; SOLVE33(); RECOVER_STRESS(); OUTPUT_UCD() ;

FEM3D-Prt2 29 MAT_ ASS_ MAI: 全体構成 do kpn 2 ガウス積分点番号 (ζ 方向 ) do pn 2 ガウス積分点番号 (η 方向 ) do pn 2 ガウス積分点番号 ( 方向 ) ガウス積分点 (8 個 ) における形状関数 およびその 自然座標系 における微分の算出 enddo enddo enddo do cel ICELTOT 要素ループ 8 節点の座標から ガウス積分点における 形状関数の 全体座標系 における微分 およびヤコビアンを算出 (JACOBI) do e 8 局所節点番号 do e 8 局所節点番号全体節点番号 :p p A pp の temltemu におけるアドレス :kk do kpn 2 ガウス積分点番号 (ζ 方向 ) do pn 2 ガウス積分点番号 (η 方向 ) do pn 2 ガウス積分点番号 ( 方向 ) enddo enddo enddo enddo enddo enddo 要素積分 要素行列成分計算 全体行列への足しこみ e e

FEM3D-Prt2 3 ブロックとして記憶

FEM3D-Prt2 3 係数行列 :MAT_ASS_MAI(/7) #nclude <stdo.h> #nclude <mth.h> #nclude "pfem_utl.h" #nclude "llocte.h" etern FILE *fp_log; etern vod JACOBI(); vod MAT_ASS_MAI() { nt kkk; nt ppkp; nt pnpnkpn; nt cel; nt ee; nt SE; nt nn2n3n4n5n6n7n8; double vlavlbvlx; double QPQMEPEMTPTM; double XX2X3X4X5X6X7X8; double YY2Y3Y4Y5Y6Y7Y8; double ZZ2Z3Z4Z5Z6Z7Z8; double PXPYPZPXPYPZ; double VOL; double coef; double 232222333233; KIT nodlocal[8]; AL(KREAL*) llocte_vector(seof(kreal)9*pl); AU(KREAL*) llocte_vector(seof(kreal)9*pu); B (KREAL*) llocte_vector(seof(kreal)3* ); D (KREAL*) llocte_vector(seof(kreal)9*); X (KREAL*) llocte_vector(seof(kreal)3*); 下三角ブロック上三角ブロック右辺ベクトル対角ブロック未知数ベクトル for(;<9*pl;) AL[].; for(;<9*pu;) AU[].; ; for(;<3* ;) B[].; for(;<9* ;) D[].; for(;<3* ;) X[].;

FEM3D-Prt2 32 係数行列 :MAT_ASS_MAI(2/7) /*** ***/ WEI[].e; WEI[].e; POS[] -.577352692e; POS[].577352692e; POS: WEI: 積分点座標重み係数 IIT. PQ - st-order dervtve of shpe functon b QSI PE - st-order dervtve of shpe functon b ETA PT - st-order dervtve of shpe functon b ZET vla POISSO / (.e-poisso); vlb (.e-2.e*poisso)/(2.e*(.e-poisso)); vlx ELAST*(.e-POISSO)/((.ePOISSO)*(.e-2.e*POISSO)); vla vla * vlx; vlb vlb * vlx; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ QP.e POS[p]; QM.e - POS[p]; EP.e POS[p]; EM.e - POS[p]; TP.e POS[kp]; TM.e - POS[kp]; SHAPE[p][p][kp][] O8th * QM * EM * TM; SHAPE[p][p][kp][] O8th * QP * EM * TM; SHAPE[p][p][kp][2] O8th * QP * EP * TM; SHAPE[p][p][kp][3] O8th * QM * EP * TM; SHAPE[p][p][kp][4] O8th * QM * EM * TP; SHAPE[p][p][kp][5] O8th * QP * EM * TP; SHAPE[p][p][kp][6] O8th * QP * EP * TP; SHAPE[p][p][kp][7] O8th * QM * EP * TP;

FEM3D-Prt2 33 係数行列 :MAT_ASS_MAI(2/7) WEI[].e; WEI[].e; POS[] -.577352692e; POS[].577352692e; /*** ***/ IIT. PQ - st-order dervtve of shpe functon b QSI PE - st-order dervtve of shpe functon b ETA PT - st-order dervtve of shpe functon b ZET vla POISSO / (.e-poisso); vlb (.e-2.e*poisso)/(2.e*(.e-poisso)); vlx ELAST*(.e-POISSO)/((.ePOISSO)*(.e-2.e*POISSO)); vla vla * vlx; vlb vlb * vlx; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ QP.e POS[p]; QM.e - POS[p]; EP.e POS[p]; EM.e - POS[p]; TP.e POS[kp]; TM.e - POS[kp]; SHAPE[p][p][kp][] O8th * QM * EM * TM; SHAPE[p][p][kp][] O8th * QP * EM * TM; SHAPE[p][p][kp][2] O8th * QP * EP * TM; SHAPE[p][p][kp][3] O8th * QM * EP * TM; SHAPE[p][p][kp][4] O8th * QM * EM * TP; SHAPE[p][p][kp][5] O8th * QP * EM * TP; SHAPE[p][p][kp][6] O8th * QP * EP * TP; SHAPE[p][p][kp][7] O8th * QM * EP * TP;

FEM3D-Prt2 34 ひずみ 応力関係ず関係 ν ν ν ε ε ν ν ν ν ν ν σ σ ( )( ) ( ) ( ) E γ ε ν ν ν ν τ σ 2 2 2 2 ( ) ( ) γ γ ν ν τ τ 2 2 2 2 2 [ ] D { [ ]{ ε σ D

FEM3D-Prt2 35 係数行列 :MAT_ASS_MAI(2/7) WEI[].e; WEI[].e; POS[] -.577352692e; POS[].577352692e; /*** ***/ IIT. PQ - st-order dervtve of shpe functon b QSI PE - st-order dervtve of shpe functon b ETA PT - st-order dervtve of shpe functon b ZET vla POISSO / (.e-poisso); vlb (.e-2.e*poisso)/(2.e*(.e-poisso)); vlx ELAST*(.e-POISSO)/((.ePOISSO)*(.e-2.e*POISSO)); vla vla * vlx; vlb vlb * vlx; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ QP.e POS[p]; QM.e - POS[p]; EP.e POS[p]; EM.e - POS[p]; TP.e POS[kp]; TM.e - POS[kp]; vlx vla vlb SHAPE[p][p][kp][] O8th * QM * EM * TM; SHAPE[p][p][kp][] O8th * QP * EM * TM; SHAPE[p][p][kp][2] O8th * QP * EP * TM; SHAPE[p][p][kp][3] O8th * QM * EP * TM; SHAPE[p][p][kp][4] O8th * QM * EM * TP; SHAPE[p][p][kp][5] O8th * QP * EM * TP; SHAPE[p][p][kp][6] O8th * QP * EP * TP; SHAPE[p][p][kp][7] O8th * QM * EP * TP; E( ν ) ( ν )( 2ν ) ν E( ν ) ( ν ) ( ν )( 2ν ) ( 2ν ) E( ν ) 2( ν )( ν )( 2ν )

FEM3D-Prt2 36 係数行列 :MAT_ASS_MAI(2/7) WEI[].e; WEI[].e; POS[] -.577352692e; POS[].577352692e; /*** ***/ IIT. PQ - st-order dervtve of shpe functon b QSI PE - st-order dervtve of shpe functon b ETA PT - st-order dervtve of shpe functon b ZET vla POISSO / (.e-poisso); vlb (.e-2.e*poisso)/(2.e*(.e-poisso)); vlx ELAST*(.e-POISSO)/((.ePOISSO)*(.e-2.e*POISSO)); vla vla * vlx; vlb vlb * vlx; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ QP.e POS[p]; QM.e - POS[p]; EP.e POS[p]; EM.e - POS[p]; TP.e POS[kp]; TM.e - POS[kp]; vlx vla vlb SHAPE[p][p][kp][] O8th * QM * EM * TM; SHAPE[p][p][kp][] O8th * QP * EM * TM; SHAPE[p][p][kp][2] O8th * QP * EP * TM; SHAPE[p][p][kp][3] O8th * QM * EP * TM; SHAPE[p][p][kp][4] O8th * QM * EM * TP; SHAPE[p][p][kp][5] O8th * QP * EM * TP; SHAPE[p][p][kp][6] O8th * QP * EP * TP; SHAPE[p][p][kp][7] O8th * QM * EP * TP; E( ν ) ( ν )( 2ν ) ν E( ν ) Eν ( ν ) ( ν )( 2ν ) ( ν )( 2ν ) ( 2ν ) E( ν ) E 2( ν )( ν )( 2ν ) 2( ν )

FEM3D-Prt2 37 ひずみ 応力関係ず関係 ε ε σ σ vla vlx vla vla vla vlx γ ε τ σ lb vlb vlx vla vla γ γ τ τ vlb vlb [ ] D { [ ]{ ε σ D

FEM3D-Prt2 38 係数行列 :MAT_ASS_MAI(2/7) WEI[].e; WEI[].e; POS[] -.577352692e; POS[].577352692e; /*** ***/ IIT. PQ - st-order dervtve of shpe functon b QSI PE - st-order dervtve of shpe functon b ETA PT - st-order dervtve of shpe functon b ZET vla POISSO / (.e-poisso); vlb (.e-2.e*poisso)/(2.e*(.e-poisso)); vlx ELAST*(.e-POISSO)/((.ePOISSO)*(.e-2.e*POISSO)); vla vla * vlx; vlb vlb * vlx; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ QP.e POS[p]; QM.e - POS[p]; EP.e POS[p]; EM.e - POS[p]; TP.e POS[kp]; TM.e - POS[kp]; QP EP TP k () ( ) QM( ) ( ) () ( η ) EM() ( η ) ( ) ( ζ ) TM ( k ) ( ζ ) k ζ k SHAPE[p][p][kp][] O8th * QM * EM * TM; SHAPE[p][p][kp][] O8th * QP * EM * TM; SHAPE[p][p][kp][2] O8th * QP * EP * TM; SHAPE[p][p][kp][3] O8th * QM * EP * TM; SHAPE[p][p][kp][4] O8th * QM * EM * TP; SHAPE[p][p][kp][5] O8th * QP * EM * TP; SHAPE[p][p][kp][6] O8th * QP * EP * TP; SHAPE[p][p][kp][7] O8th * QM * EP * TP;

FEM3D-Prt2 39 係数行列 :MAT_ASS_MAI(2/7) WEI[].e; WEI[].e; POS[] -.577352692e; POS[].577352692e; /*** ***/ IIT. PQ - st-order dervtve of shpe functon b QSI PE - st-order dervtve of shpe functon b ETA PT - st-order dervtve of shpe functon b ZET vla POISSO / (.e-poisso); vlb (.e-2.e*poisso)/(2.e*(.e-poisso)); vlx ELAST*(.e-POISSO)/((.ePOISSO)*(.e-2.e*POISSO)); vla vla * vlx; vlb vlb * vlx; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ QP.e POS[p]; QM.e - POS[p]; EP.e POS[p]; EM.e - POS[p]; TP.e POS[kp]; TM.e - POS[kp]; SHAPE[p][p][kp][] O8th * QM * EM * TM; SHAPE[p][p][kp][] O8th * QP * EM * TM; SHAPE[p][p][kp][2] O8th * QP * EP * TM; SHAPE[p][p][kp][3] O8th * QM * EP * TM; SHAPE[p][p][kp][4] O8th * QM * EM * TP; SHAPE[p][p][kp][5] O8th * QP * EM * TP; SHAPE[p][p][kp][6] O8th * QP * EP * TP; SHAPE[p][p][kp][7] O8th * QM * EP * TP; ( ) 8 4 ( ) 7 3 ( ) ( ) 5 6 ( ) ( η ζ ) ( ) 2 ( ) ( )

FEM3D-Prt2 4 係数行列 :MAT_ASS_MAI(2/7) /*** ***/ WEI[].e; WEI[].e; POS[] -.577352692e; POS[].577352692e; IIT. PQ - st-order dervtve of shpe functon b QSI PE - st-order dervtve of shpe functon b ETA PT - st-order dervtve of shpe functon b ZET vla POISSO / (.e-poisso); 3 vlb (.e-2.e*poisso)/(2.e*(.e-poisso)); vlx ELAST*(.e-POISSO)/((.ePOISSO)*(.e-2.e*POISSO)); vla vla * vlx; vlb vlb * vlx; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ QP.e POS[p]; QM.e - POS[p]; EP.e POS[p]; EM.e - POS[p]; TP.e POS[kp]; TM.e - POS[kp]; SHAPE[p][p][kp][] O8th * QM * EM * TM; SHAPE[p][p][kp][] O8th * QP * EM * TM; SHAPE[p][p][kp][2] O8th * QP * EP * TM; SHAPE[p][p][kp][3] O8th * QM * EP * TM; SHAPE[p][p][kp][4] O8th * QM * EM * TP; SHAPE[p][p][kp][5] O8th * QP * EM * TP; SHAPE[p][p][kp][6] O8th * QP * EP * TP; SHAPE[p][p][kp][7] O8th * QM * EP * TP; 8 ( η ζ ) 8 ( η ζ ) 8 ( η ζ ) 8 ( η ζ ) 2 4 ( )( η)( ζ ) ( )( η)( ζ ) ( )( η )( ζ ) ( )( η)( ζ ) 5 ( η ζ ) 8 6( η ζ ) η ζ 8 7 ( η ζ ) η ζ 8 8( η ζ ) η ζ 8 ( )( η)( ζ ) ( )( )( ) ( )( )( ) ( )( )( )

FEM3D-Prt2 4 係数行列 :MAT_ASS_MAI(3/7) PQ[p][kp][] - O8th * EM * TM; PQ[p][kp][] O8th * EM * TM; PQ[p][kp][2] O8th * EP * TM; PQ[p][kp][3] - O8th * EP * TM; PQ[p][kp][4] - O8th * EM * TP; PQ[p][kp][5] O8th * EM * TP; PQ[p][kp][6] ][6] O8th * EP * TP; PQ[p][kp][7] - O8th * EP * TP; PE[p][kp][] - O8th * QM * TM; PE[p][kp][] - O8th * QP * TM; PE[p][kp][2] O8th * QP * TM; PE[p][kp][3] O8th * QM * TM; PE[p][kp][4] ][4] - O8th * QM * TP; PE[p][kp][5] - O8th * QP * TP; PE[p][kp][6] O8th * QP * TP; PE[p][kp][7] O8th * QM * TP; PT[p][p][] - O8th * QM * EM; [ p][p][ ] PT[p][p][2] - O8th * QP * EP; PT[p][p][3] - O8th * QM * EP; PT[p][p][4] O8th * QM * EM; PT[p][p][5] O8th * QP * EM; PT[p][p][6] O8th * QP * EP; PT[p][p][7] O8th * QM * EP; PQ( k) l ( η η ζ ζ k ) l PE ( k ) ( η η ζ ζ k ) η PT ( ) l ( η η ζ ζ k ) ζ ( ( )( ) PT[p][p][] - O8th * QP * EM; η ζ k ) η ζ k for( cel;cel< ICELTOT;cel){ nicelod[cel][]; n2icelod[cel][]; n3icelod[cel][2]; n4icelod[cel][3]; n5icelod[cel][4]; n6icelod[cel][5]; n7icelod[cel][6]; n8icelod[cel][7]; ( k η ζ ) 2 ( η ζ k ) 8 8 3 ( η ζ k ) 8 3 ( η ζ k ) 8 ( η )( ζ ) ( η )( ζ ) ( η )( ζ ) における形状関数の一階微分 k k k

FEM3D-Prt2 42 係数行列 :MAT_ASS_MAI(3/7) PQ[p][kp][] - O8th * EM * TM; PQ[p][kp][] O8th * EM * TM; PQ[p][kp][2] O8th * EP * TM; PQ[p][kp][3] - O8th * EP * TM; PQ[p][kp][4] - O8th * EM * TP; PQ[p][kp][5] O8th * EM * TP; PQ[p][kp][6] ][6] O8th * EP * TP; PQ[p][kp][7] - O8th * EP * TP; PE[p][kp][] - O8th * QM * TM; PE[p][kp][] - O8th * QP * TM; PE[p][kp][2] O8th * QP * TM; PE[p][kp][3] O8th * QM * TM; PE[p][kp][4] ][4] - O8th * QM * TP; PE[p][kp][5] - O8th * QP * TP; PE[p][kp][6] O8th * QP * TP; PE[p][kp][7] O8th * QM * TP; PT[p][p][] - O8th * QM * EM; PT[p][p][] ] - O8th * QP * EM; PT[p][p][2] - O8th * QP * EP; PT[p][p][3] - O8th * QM * EP; PT[p][p][4] O8th * QM * EM; PT[p][p][5] O8th * QP * EM; PT[p][p][6] O8th * QP * EP; PT[p][p][7] O8th * QM * EP; for( cel;cel< ICELTOT;cel){ n ICELOD[cel][]; n2icelod[cel][]; n3icelod[cel][2]; n4icelod[cel][3]; n5icelod[cel][4]; n6icelod[cel][5]; n7icelod[cel][6]; n8icelod[cel][7]; ( ) ( ) nicelod[cel][]; ( ) 8 7 ( ) 5 6 ( ) 4 2 ( η ζ ) ( ) ( ) 3 ( )

FEM3D-Prt2 43 係数行列 :MAT_ASS_MAI(4/7) /** ** JACOBIA & IVERSE JACOBIA **/ nodlocal[] n; nodlocal[] n2; nodlocal[2] n3; nodlocal[3] n4; nodlocal[4] n5; nodlocal[5] n6; nodlocal[6] n7; nodlocal[7] n8; XXYZ[n-][]; XYZ[ ][] X2XYZ[n2-][]; X3XYZ[n3-][]; X4XYZ[n4-][]; X5XYZ[n5-][]; X6XYZ[n6-][]; ] X7XYZ[n7-][]; X8XYZ[n8-][]; 8 節点の節点番号 ( ) 8 7 ( ) ( ) 5 6 ( ) 8 節点の X 座標 ( ) 4 3 2 ( η ζ ) ( ) ( ) ( ) YXYZ[n-][]; Y2XYZ[n2-][]; Y3XYZ[n3-][]; Y4XYZ[n4-][]; Y5XYZ[n5-][]; Y6XYZ[n6-][]; Y7XYZ[n7-][]; Y8XYZ[n8-][]; ZXYZ[n-][2]; Z2XYZ[n2-][2]; Z3XYZ[n3-][2]; Z4XYZ[n4-][2]; Z5XYZ[n5-][2]; Z6XYZ[n6-][2]; Z7XYZ[n7-][2]; Z8XYZ[n8-][2]; 8 節点の Y 座標 8 節点の Z 座標 座標値 : 節点番号から 引く JACOBI(DETJ PQ PE PT PX PY PZ X X2 X3 X4 X5 X6 X7 X8 Y Y2 Y3 Y4 Y5 Y6 Y7 Y8 Z Z2 Z3 Z4 Z5 Z6 Z7 Z8);

FEM3D-Prt2 44 #nclude <stdo.h> #nclude <mth.h> #nclude "precson.h" #nclude "llocte.h" /*** *** JACOBI ***/ JACOBI(/4) vod JACOBI( KREAL DETJ[2][2][2] KREAL PQ[2][2][8]KREAL PE[2][2][8]KREAL PT[2][2][8] KREAL PX[2][2][2][8]KREAL PY[2][2][2][8]KREAL PZ[2][2][2][8] KREAL XKREAL X2KREAL X3KREAL X4KREAL X5KREAL X6KREAL X7KREAL X8 { /** **/ KREAL YKREAL Y2KREAL Y3KREAL Y4KREAL Y5KREAL Y6KREAL Y7KREAL Y8 KREAL ZKREAL Z2KREAL Z3KREAL Z4KREAL Z5KREAL Z6KREAL Z7KREAL Z8) clcultes JACOBIA & IVERSE JACOBIA d/d d/d & d/d nt ppkp; double dxdqdydqdzdqdxdedydedzdedxdtdydtdzdt; double coef; double 232222333233; for(p;p<2;p){ for(p;p<2;p){ for(kp;kp<2;kp){ PX[p][p][kp][].; PX[p][p][kp][].; PX[p][p][kp][2].; ; PX[p][p][kp][3].; PX[p][p][kp][4].; PX[p][p][kp][5].; PX[p][p][kp][6].; PX[p][p][kp][7].; η ζ l l l 入力 ( )( l ~ 8) 出力 l l l det J l l l 各ガウス積分点 [p][p][kp] における値

FEM3D-Prt2 45 自然座標系における偏微分 (/4) 自然座標系における偏微分 (/4) 偏微分の公式より以下のようになる : ζ η ) ( η η η η ζ η ) ( ζ ζ ζ ζ ζ η η η η η ) ( ζ ζ ζ ζ は定義より簡単に求められるが ζ η は定義より簡単に求められるが を実際の計算で使用する

FEM3D-Prt2 46 自然座標系における偏微分 (2/4) 自然座標系における偏微分 (2/4) マトリックス表示すると : [ ] J η η η η ζ ζ ζ ζ [ ] J : ヤコビのマトリクス J J J [ ] J : ヤコビのマトリクス (Jcob mtr Jcobn) [ ] 23 22 2 3 2 J J J J J J J J J J ) 33 32 3 J J J

FEM3D-Prt2 47 自然座標系における偏微分 (3/4) 自然座標系における偏微分 (3/4) の定義より簡単に求められる J J 8 8 2 8 8 J 8 8 3 J J 8 8 22 8 8 2 η η η η η η J 8 8 23 η η η J J 8 8 32 8 8 3 ζ ζ ζ ζ ζ ζ J 8 8 33 ζ ζ ζ

FEM3D-Prt2 48 JACOBI(2/4) PY[p][p][kp][].; ; PY[p][p][kp][].; PY[p][p][kp][2].; PY[p][p][kp][3].; PY[p][p][kp][4].; PY[p][p][kp][5].; PY[p][p][kp][6].; ][k ][6] ; PY[p][p][kp][7].; ][k ][3] 2 3 PZ[p][p][kp][3].; [ J ] J J J PZ[p][p][kp][].; PZ[p][p][kp][].; PZ[p][p][kp][2].; PZ[p][p][kp][4].; PZ[p][p][kp][5].; PZ[p][p][kp][6].; PZ[p][p][kp][7].; J J 2 3 J J 22 32 J J 23 33 /** **/ DETERMIAT of the JACOBIA dxdq PQ[p][kp][]*X PQ[p][kp][]*X2 PQ[p][kp][2]*X3 PQ[p][kp][3]*X4 PQ[p][kp][4]*X5 PQ[p][kp][5]*X6 PQ[p][kp][6]*X7 PQ[p][kp][7]*X8; dydq PQ[p][kp][]*Y PQ[p][kp][]*Y2 PQ[p][kp][2]*Y3 PQ[p][kp][3]*Y4 PQ[p][kp][4]*Y5 PQ[p][kp][5]*Y6 PQ[p][kp][6]*Y7 PQ[p][kp][7]*Y8; dzdq PQ[p][kp][]*Z PQ[p][kp][]*Z2 PQ[p][kp][2]*Z3 PQ[p][kp][3]*Z4 PQ[p][kp][4]*Z5 PQ[p][kp][5]*Z6 PQ[p][kp][6]*Z7 PQ[p][kp][7]*Z8; dxde PE[p][kp][]*X PE[p][kp][]*X2 PE[p][kp][2]*X3 PE[p][kp][3]*X4 PE[p][kp][4]*X5 PE[p][kp][5]*X6 PE[p][kp][6]*X7 PE[p][kp][7]*X8; dxdq J dydq J 2 dzdq J 3

FEM3D-Prt2 49 JACOBI(3/4) dyde PE[p][kp][]*Y PE[p][kp][]*Y2 PE[p][kp][2]*Y3 PE[p][kp][3]*Y4 PE[p][kp][4]*Y5 PE[p][kp][5]*Y6 PE[p][kp][6]*Y7 PE[p][kp][7]*Y8; dzde PE[p][kp][]*Z PE[p][kp][]*Z2 PE[p][kp][2]*Z3 PE[p][kp][3]*Z4 PE[p][kp][4]*Z5 ][4] PE[p][kp][5]*Z6 ][5] PE[p][kp][6]*Z7 PE[p][kp][7]*Z8; dxdt PT[p][p][]*X PT[p][p][]*X2 PT[p][p][2]*X3 PT[p][p][3]*X4 PT[p][p][4]*X5 PT[p][p][5]*X6 PT[p][p][6]*X7 PT[p][p][7]*X8; dydt PT[p][p][]*Y ][] PT[p][p][]*Y2 ][] PT[p][p][2]*Y3 PT[p][p][3]*Y4 PT[p][p][4]*Y5 PT[p][p][5]*Y6 PT[p][p][6]*Y7 PT[p][p][7]*Y8; dzdt PT[p][p][]*Z PT[p][p][]*Z2 PT[p][p][2]*Z3 ] PT[p][p][3]*Z4 ] PT[p][p][4]*Z5 PT[p][p][5]*Z6 PT[p][p][6]*Z7 PT[p][p][7]*Z8; DETJ[p][p][kp] dxdq*(dyde*dzdt-dzde*dydt) dydq*(dzde*dxdt-dxde*dzdt) dzdq*(dxde*dydt-dyde*dxdt); J /** J2 J3 IVERSE JACOBIA [ J ] **/ J 2 J 22 J 23 coef. / DETJ[p][p][kp]; coef * ( dyde*dzdt - dzde*dydt ); J3 J32 J33 2 coef * ( dzdq*dydt - dydq*dzdt ); 3 coef * ( dydq*dzde - dzdq*dyde ); 2 coef * ( dzde*dxdt - dxde*dzdt ); 22 coef * ( dxdq*dzdt - dzdq*dxdt ); 23 coef * ( dzdq*dxde - dxdq*dzde ); 3 coef * ( dxde*dydt - dyde*dxdt ); 32 coef * ( dydq*dxdt - dxdq*dydt ); 33 coef * ( dxdq*dyde - dydq*dxde ); DETJ[p][p][kp]fbs(DETJ[p][p][kp]);

FEM3D-Prt2 5 自然座標系における偏微分 (4/4) 自然座標系における偏微分 (4/4) 従って下記のように偏微分を計算できる ヤコビアン (3 3 行列 ) の逆行列を求める [ ] η η η η η J ζ ζ ζ ζ ζ

FEM3D-Prt2 5 /** **/ IVERSE JACOBIA JACOBI(3/4) dyde PE[p][kp][]*Y PE[p][kp][]*Y2 PE[p][kp][2]*Y3 PE[p][kp][3]*Y4 PE[p][kp][4]*Y5 PE[p][kp][5]*Y6 PE[p][kp][6]*Y7 PE[p][kp][7]*Y8; dzde PE[p][kp][]*Z PE[p][kp][]*Z2 PE[p][kp][2]*Z3 PE[p][kp][3]*Z4 PE[p][kp][4]*Z5 ][4] PE[p][kp][5]*Z6 ][5] PE[p][kp][6]*Z7 PE[p][kp][7]*Z8; dxdt PT[p][p][]*X PT[p][p][]*X2 PT[p][p][2]*X3 PT[p][p][3]*X4 PT[p][p][4]*X5 PT[p][p][5]*X6 PT[p][p][6]*X7 PT[p][p][7]*X8; dydt PT[p][p][]*Y ][] PT[p][p][]*Y2 ][] PT[p][p][2]*Y3 PT[p][p][3]*Y4 PT[p][p][4]*Y5 PT[p][p][5]*Y6 PT[p][p][6]*Y7 PT[p][p][7]*Y8; dzdt PT[p][p][]*Z PT[p][p][]*Z2 PT[p][p][2]*Z3 ] PT[p][p][3]*Z4 ] PT[p][p][4]*Z5 PT[p][p][5]*Z6 PT[p][p][6]*Z7 PT[p][p][7]*Z8; DETJ[p][p][kp] dxdq*(dyde*dzdt-dzde*dydt) dydq*(dzde*dxdt-dxde*dzdt) dzdq*(dxde*dydt-dyde*dxdt); coef. / DETJ[p][p][kp]; coef * ( dyde*dzdt - dzde*dydt ); 2-2 coef * ( dzdq*dydt dydq*dzdt ); 3 3 coef * ( dydq*dzde - dzdq*dyde ); [ J ] 2 coef * ( dzde*dxdt - dxde*dzdt ); 2 22 23 22 coef * ( dxdq*dzdt - dzdq*dxdt ); 23 coef * ( dzdq*dxde - dxdq*dzde ); 3 32 33 3 coef * ( dxde*dydt - dyde*dxdt ); 32 coef * ( dydq*dxdt - dxdq*dydt ); 33 coef * ( dxdq*dyde - dydq*dxde ); DETJ[p][p][kp]fbs(DETJ[p][p][kp]);

FEM3D-Prt2 52 /** set the d/dx d/dy & d/dz components JACOBI(4/4) **/ PX[p][p][kp][]*PQ[p][kp][]2*PE[p][kp][]3*PT[p][p][]; PX[p][p][kp][]*PQ[p][kp][]2*PE[p][kp][]3*PT[p][p][]; PX[p][p][kp][2]*PQ[p][kp][2]2*PE[p][kp][2]3*PT[p][p][2]; PX[p][p][kp][3]*PQ[p][kp][3]2*PE[p][kp][3]3*PT[p][p][3]; ][k ][3] PQ[ ][k ][3] 2 PE[ ][k ][3] 3 PT[ ][3]; PX[p][p][kp][4]*PQ[p][kp][4]2*PE[p][kp][4]3*PT[p][p][4]; PX[p][p][kp][5]*PQ[p][kp][5]2*PE[p][kp][5]3*PT[p][p][5]; PX[p][p][kp][6]*PQ[p][kp][6]2*PE[p][kp][6]3*PT[p][p][6]; PX[p][p][kp][7]*PQ[p][kp][7]2*PE[p][kp][7]3*PT[p][p][7]; PY[p][p][kp][]2*PQ[p][kp][]22*PE[p][kp][]23*PT[p][p][]; PY[p][p][kp][]2*PQ[p][kp][]22*PE[p][kp][]23*PT[p][p][]; ][k ][] PQ[ ][k ][] 22 PE[ ][k ][] 23 PT[ ][] PY[p][p][kp][2]2*PQ[p][kp][2]22*PE[p][kp][2]23*PT[p][p][2]; PY[p][p][kp][3]2*PQ[p][kp][3]22*PE[p][kp][3]23*PT[p][p][3]; PY[p][p][kp][4]2*PQ[p][kp][4]22*PE[p][kp][4]23*PT[p][p][4]; PY[p][p][kp][5]2*PQ[p][kp][5]22*PE[p][kp][5]23*PT[p][p][5]; PY[p][p][kp][6]2*PQ[p][kp][6]22*PE[p][kp][6]23*PT[p][p][6]; ] [p][ ] [ ] [ ] PY[p][p][kp][7]2*PQ[p][kp][7]22*PE[p][kp][7]23*PT[p][p][7]; PZ[p][p][kp][]3*PQ[p][kp][]32*PE[p][kp][]33*PT[p][p][]; PZ[p][p][kp][]3*PQ[p][kp][]32*PE[p][kp][]33*PT[p][p][]; PZ[p][p][kp][2]3*PQ[p][kp][2]32*PE[p][kp][2]33*PT[p][p][2]; PZ[p][p][kp][3]3*PQ[p][kp][3]32*PE[p][kp][3]33*PT[p][p][3]; PZ[p][p][kp][4]3*PQ[p][kp][4]32*PE[p][kp][4]33*PT[p][p][4]; PQ[p][kp][4] 32 PE[p][kp][4] 33 PT[p][p][4]; PZ[p][p][kp][5]3*PQ[p][kp][5]32*PE[p][kp][5]33*PT[p][p][5]; PZ[p][p][kp][6]3*PQ[p][kp][6]32*PE[p][kp][6]33*PT[p][p][6]; PZ[p][p][kp][7]3*PQ[p][kp][7]32*PE[p][kp][7]33*PT[p][p][7]; η ζ η ζ η ζ η ζ 2 3 2 22 32 3 23 33 η ζ

FEM3D-Prt2 53 係数行列 :MAT_ASS_MAI(5/7) /** **/ COSTRUCT the GLOBAL MATRIX for(e;e<8;e){ pnodlocal[e]; for(e;e<8;e){ pnodlocal[e]; kk; f( p > p ){ SndeU[p-]; EndeU[p ]; for( ks;k<e;k){ f( temu[k-] p ){ kkk; brek; f( p < p ){ SndeL[p-]; EndeL[p ndel[p ]; for( ks;k<e;k){ f( teml[k-] p ){ kkk; brek; PX.e; PY.e; PZ.e; PX.e; PY.e; PZ.e; VOL.e; 全体行列の非対角ブロック A p p kk:temltemu におけるアドレス p nodlocal[e] p nodlocal[e] から始まる節点番号

FEM3D-Prt2 54 要素マトリクス :24 24 行列 各節点上の (uvw) 成分が物理的にも強くカップルしているので3 自由度をまとめて扱う :8 8 行列 e e ( ) 8 7 ( ) ( ) 5 6 ) ( ) 4 3 ( ) 2 ( η ζ ) ( ) ( ) e e e e e e 2 3 e e e e 2 22 e e 32 e e e e e e 3 23 33 ( K8) e e

FEM3D-Prt2 55 全体マトリクス p p p p p p p p

FEM3D-Prt2 56 係数行列 :MAT_ASS_MAI(5/7) /** **/ COSTRUCT the GLOBAL MATRIX for(e;e<8;e){ pnodlocal[e]; for(e;e<8;e){ pnodlocal[e]; kk; f( p > p ){ SndeU[p-]; EndeU[p ]; for( ks;k<e;k){ f( temu[k-] p ){ kkk; brek; 要素マトリクス ( e ~ e ) 全体マトリクス ( p ~ p ) の関係 kk:temuteml におけるアドレスに を足した値 ( から始まる ) f( p < p ){ SndeL[p-]; EndeL[p ndel[p ]; for( ks;k<e;k){ f( teml[k-] p ){ kkk; brek; PX.e; PY.e; PZ.e; PX.e; PY.e; PZ.e; VOL.e;

FEM3D-Prt2 57 係数行列 :MAT_ASS_MAI(6/7).e; 2.e; 3.e; 2.e; 22.e; 23.e; 3.e; 32.e; 33.e; for(pn;pn<2;pn){ for(pn;pn<2;pn){ for(kpn;kpn<2;kpn){ coef -fbs(detj[pn][pn][kpn])*wei[pn]*wei[pn]*wei[kpn]; VOLcoef; PX PX[pn][pn][kpn][e]; PY PY[pn][pn][kpn][e]; PZ PZ[pn][pn][kpn][e]; PX PX[pn][pn][kpn][e]; PY PY[pn][pn][kpn][e]; PZ PZ[pn][pn][kpn][e]; (vlx*px*pxvlb*(py*pypz*pz))*coef; 22 (vlx*py*pyvlb*(pz*pzpx*px))*coef; 33 (vlx*pz*pzvlb*(px*pxpy*py))*coef; 2 (vla*px*py vlb*px*py)*coef; 3 (vla*px*pz vlb*px*pz)*coef; 2 (vla*py*px vlb*py*px)*coef; 23 (vla*py*pz vlb*py*pz)*coef; 3 (vla*pz*px vlb*pz*px)*coef; 32 (vla*pz*py PY vlb*pz*py)*coef; PY)

FEM3D-Prt2 58 係数行列 :MAT_ASS_MAI(6/7).e; 2.e; 3.e; 2.e; 22.e; 23.e; 3.e; 32.e; 33.e; for(pn;pn<2;pn){ ( ) J W W W ζ dt f for(pn ;pn<2;pn ){ for(pn;pn<2;pn){ for(kpn;kpn<2;kpn){ coef -fbs(detj[pn][pn][kpn])*wei[pn]*wei[pn]*wei[kpn]; VOLcoef; dv b D V ( ) k k J W W W ζ η coef det VOLcoef; PX PX[pn][pn][kpn][e]; PY PY[pn][pn][kpn][e]; PZ PZ[pn][pn][kpn][e]; PX PX[pn][pn][kpn][e]; PY PY[pn][pn][kpn][e]; ζ η d d d J b D ddd b D det PY PY[pn][pn][kpn][e]; PZ PZ[pn][pn][kpn][e]; (vlx*px*pxvlb*(py*pypz*pz))*coef; 22 (vlx*py*pyvlb*(pz*pzpx*px))*coef; 33 (vlx*pz*pzvlb*(px*pxpy*py))*coef; ζ η d d d J b D det 2 (vla*px*py vlb*px*py)*coef; 3 (vla*px*pz vlb*px*pz)*coef; 2 (vla*py*px vlb*py*px)*coef; 23 (vla*py*pz vlb*py*pz)*coef; 3 (vla*pz*px vlb*pz*px)*coef; 32 ( la PZ PY lb PZ PY) f ) ( ζ η f 32 (vla*pz*py vlb*pz*py)*coef; [ ] M L f W W W d d d f I ) ( ) ( ζ η ζ η ζ η [ ] k k k f W W W ) ( ζ η

FEM3D-Prt2 59 係数行列 :MAT_ASS_MAI(6/7) for(pn;pn<2;pn){ for(pn;pn<2;pn){ for(kpn;kpn<2;kpn){ coef -fbs(detj[pn][pn][kpn])*wei[pn]*wei[pn]*wei[kpn]; PX PX[pn][pn][kpn][e]; PY PY[pn][pn][kpn][e]; PZ PZ[pn][pn][kpn][e]; PX PX[pn][pn][kpn][e]; PY PY[pn][pn][kpn][e]; PZ PZ[pn][pn][kpn][e]; (vlx*px*pxvlb*(py*pypz*pz))*coef; 22 (vlx*py*pyvlb*(pz*pzpx*px))*coef; 33 (vlx*pz*pzvlb*(px*pxpy*py))*coef; σ vlx σ vla σ vla τ τ τ vla vlx vla 2 (vla*px*py vlb*px*py)*coef; 3 (vla*px*pz vlb*px*pz)*coef; 2 (vla*py*px vlb*py*px)*coef; 23 (vla*py*pz vlb*py*pz)*coef; 3 (vla*pz*px vlb*pz*px)*coef; 32 (vla*pz*py vlb*pz*py)*coef; vla vla vlx vlb vlb ε ε ε γ γ vlb γ

FEM3D-Prt2 6 X- 方向のつりあい式 (3/3) X 方向のつりあい式 (3/3) ( ) ν ν E b E ( )E ( )( ) ( )( ) ( ) ν ν ν ν ν ν ν 2 2 2 E b E E D とすると [ ] [ ] [ ] [ ] [ ] { { { { { V b U b W V U D τ σ [ ] [ ] { { W b U b τ ( ) * ( ) [ ] [ ] [ ] [ ] [ ] [ ] ( ) { { * V T T T U dv b D [ ] [ ] [ ] [ ] ( ) { { [ ] [ ] [ ] [ ] { { V T T V T T V W dv b V dv b [ ] { V T dv X

FEM3D-Prt2 6 Y- 方向のつりあい式 [ ][ ] [ ] [ ] [ ] [ ] ( ) { { T T T T V T T T V dv b D [ ] [ ] [ ] [ ] ( ) { { [ ] [ ] [ ] [ ] { { [ ] { T V T T V T T dv Y W dv b U dv b [ ] { V dv Y Z- 方向のつりあい式 [ ][ ] [ ] [ ] [ ] [ ] ( ) { { T T T T V T T T V dv b U dv b W dv b D [ ] [ ] [ ] [ ] ( ) { { [ ] [ ] [ ] [ ] { { [ ] { T V T T V T T dv Z V dv b U dv b [ ] { V dv Z

FEM3D-Prt2 62 要素マトリクス :- 成分 X 方向 (/3) 2 3 2 22 32 3 23 33 u v w vlxd; vla; vlbb ( K8) ( ) 8 7 ( ) 4 3 ( ) ( ) 5 6 ( ) 2 ( η ζ ) ( ) ( ) ( ) { vlx ( ) vlb V { vla vlb 2 { vla vlb 3 V V dv dv dv

FEM3D-Prt2 63 要素マトリクス :- 成分 X 方向 (/3) 2 3 2 22 32 3 23 33 u v w vlxd; vla; vlbb ( K8) ( ) 8 7 ( ) 4 3 ( ) ( ) 5 6 ( ) 2 ( η ζ ) ( ) ( ) ( ) T [ ] [ ] [ ] T [ ] T b [ ] [ ] { D ( ) dv { U V T T [ ] [ ] b [ ] [ ] { ( ) dv { V V V T T [ ] [ ] b[ ] [ ] { dv{ W

FEM3D-Prt2 64 要素マトリクス :- 成分 Y 方向 (2/3) 2 3 2 22 32 3 23 33 u v w vlxd; vla; vlbb ( K8) ( ) 8 7 ( ) 4 3 ( ) ( ) 5 6 ( ) 2 ( η ζ ) ( ) ( ) ( ) { vla vlb 2 22 V dv { vlx ( ) vlb { vla vlb 23 V V dv dv

FEM3D-Prt2 65 要素マトリクス :- 成分 Y 方向 (2/3) 2 3 2 22 32 3 23 33 u v w vlxd; vla; vlbb ( K8) ( ) 8 7 ( ) 4 3 ( ) ( ) 5 6 ( ) 2 ( η ζ ) ( ) ( ) ( ) { [ ] [ ] ([ ] [ ]) T T b dv{ U V { D ( ) dv { V [ ] T [ T T ] b [ ] [ ] [ ] [ ] V b T T { [ ] [ ] [ ] [ ] dv { W V

FEM3D-Prt2 66 要素マトリクス :- 成分 Z 方向 (3/3) 2 3 2 22 32 3 23 33 u v w vlxd; vla; vlbb ( K8) ( ) 8 7 ( ) 4 3 ( ) ( ) 5 6 ( ) 2 ( η ζ ) ( ) ( ) ( ) { vla vlb 3 V { vla vlb 32 33 V dv dv { vld ( ) vlb V dv

FEM3D-Prt2 67 要素マトリクス :- 成分 Z 方向 (3/3) 2 3 2 22 32 3 23 33 u v w vlxd; vla; vlbb ( K8) ( ) 8 7 ( ) 4 3 ( ) ( ) 5 6 ( ) 2 ( η ζ ) ( ) ( ) ( ) T T [ ] [ ] b [ ] [ ] V { ( ) dv{ U T T [ ] [ ] b[ ] [ ] { dv { V V V T T T [ ] [ ] b [ ] [ ] [ ] [ ] { D ( ) dv { W

FEM3D-Prt2 68 係数行列 :MAT_ASS_MAI(7/7) for(cel;cel<iceltot;cel){ for(e;e<8;e){ pnodlocal[e]; p p for(e;e<8;e){ <8 pnodlocal[e]; f (p > p) { AU[9*kk-9]; p p AU[9*kk-8]2; AU[9*kk-7]3; AU[9*kk-6]2; AU[9*kk-5]22; AU[9*kk-4]23; AU[9*kk-3]3; AU[9*kk-2]32; p p AU[9*kk-]33; f (p < p) { AL[9*kk-9]; AL[9*kk-8]2; AL[9*kk-7]3; AL[9*kk-6]2; p p AL[9*kk-5]22; AL[9*kk-4]23; AL[9*kk-3]3; AL[9*kk-2]32; AL[9*kk-]33; f (p p) { D[9*p-9]; -9-8 -7 要素マトリクス D[9*p-8]2; ( e ~ e ) D[9*p-7]3; 全体マトリクス D[9*p-6]2; ( p ~ p ) の関係 -6-5 -4 D[9*p-5]22; D[9*p-4]23; D[9*p-3]3; kk:temuteml D[9*p-2]32; におけるアドレス -3-2 - に を足した値 D[9*p-]33; ( から始まる )

FEM3D-Prt2 69 要素マトリクス :24 24 行列 各節点上の (uvw) 成分が物理的にも強くカップルしているので3 自由度をまとめて扱う :8 8 行列 e e ( ) 8 7 ( ) ( ) 5 6 ) ( ) 4 3 ( ) 2 ( η ζ ) ( ) ( ) e e e e e e 2 3 e e e e 2 22 e e 32 e e e e e e 3 23 33 ( K8) e e

FEM3D-Prt2 7 係数行列 :MAT_ASS_MAI(7/7) for(cel;cel<iceltot;cel){ for(e;e<8;e){ pnodlocal[e]; for(e;e<8;e){ <8 pnodlocal[e]; f (p > p) { AU[9*kk-9]; AU[9*kk-8]2; AU[9*kk-7]3; AU[9*kk-6]2; AU[9*kk-5]22; AU[9*kk-4]23; AU[9*kk-3]3; AU[9*kk-2]32; AU[9*kk-]33; f (p < p) { AL[9*kk-9]; AL[9*kk-8]2; AL[9*kk-7]3; AL[9*kk-6]2; AL[9*kk-5]22; AL[9*kk-4]23; AL[9*kk-3]3; AL[9*kk-2]32; AL[9*kk-]33; f (p p) { D[9*p-9]; D[9*p-8]2; D[9*p-7]3; D[9*p-6]2; D[9*p-5]22; D[9*p-4]23; D[9*p-3]3; D[9*p-2]32; D[9*p-]33;

FEM3D-Prt2 7 MAT_ ASS_ BC: 全体構成 do 節点ループ ( ディリクレ ) 境界条件を設定する節点をマーク (IWKX) enddo do 節点ループ f (IWKX().eq.) then マークされた節点だったら対応する右辺ベクトル (B) の成分 対角ブロック (D) の成分の修正 ( 行 列 ) do k ndel(-) ndel() 下三角ブロック対応する非対角 ( 下三角 ) ブロック (AL) の成分の修正 ( 行 ) enddo do k ndeu(-) ndeu() 上三角ブロック対応する非対角 ( 上三角 ) ブロック (AU) の成分の修正 ( 行 ) enddo endf enddo do 節点ループ do k ndel(-) ndel() 下三角ブロック f (IWKX(temL(k)).eq.) then 対応する非対角ブロックの節点がマークされていたら対応する右辺ベクトル 非対角 ( 下三角 ) ブロック (AL) の成分の修正 ( 列 ) endf enddo do k ndeu(-) ndeu() 上三角ブロック f (IWKX(temU(k)).eq.) then 対応する非対角ブロックの節点がマークされていたら対応する右辺ベクトル 非対角 ( 上三角 ) ブロック (AU) の成分の修正 ( 列 ) endf enddo enddo

FEM3D-Prt2 72 境界条件 :MAT_ASS_BC(/9) #nclude <stdo.h> #nclude <stdlb.h> #nclude <strng.h> #nclude "pfem_utl.h" #nclude "llocte.h" etern FILE *fp_log; vod MAT_ASS_BC() ASS { nt knbbcel; nt nn2n3n4n5n6n7n8; nt qq2q3q4q5q6q7q8; nt SE; double STRESSVAL; IWKX(KIT**) llocte_mtr(seof(kit)2); for(;<;) for(;<2;) IWKX[][];

FEM3D-Prt2 73 境界条件 :MAT_ASS_BC(2/9) /** **/ ZZm for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"zm") ) brek; for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ] ){ B[3*n ] B[3*n ] - D[9*n2]*.e; B[3*n] B[3*n] - D[9*n5]*.e; D[9*n2].e; D[9*n5].e; D[9*n6].e; D[9*n7].e; D[9*n8].e; B[3*n2].e; S ndel[n]; E ndel[n]; for(ks;k<e;k){ AL[9*k-3].e; AL[9*k-2].e; AL[9*k-].e; S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ AU[9*k-3].e; AU[9*k-2].e; AU[9*k-].e; X Z Y U Z Z Y X

FEM3D-Prt2 74 境界条件 :MAT_ASS_BC(2/9) /** **/ ZZm for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"zm") ) brek; for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ] ){ B[3*n ] B[3*n ] - D[9*n2]*.e; B[3*n] B[3*n] - D[9*n5]*.e; D[9*n2].e; D[9*n5].e; D[9*n6].e; D[9*n7].e; D[9*n8].e; B[3*n2].e; S ndel[n]; E ndel[n]; for(ks;k<e;k){ S ndeu[n]; E ndeu[n]; AL[9*k-3].e; AL[9*k-2].e; AL[9*k-].e; for(ks;k<e;k){ AU[9*k-3].e; AU[9*k-2].e; AU[9*k-].e; 節点グループ名が Zm である節点において : IWKX[n-][] とする n:から始まる節点番号

FEM3D-Prt2 75 境界条件 :MAT_ASS_BC(2/9) /** **/ ZZm for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"zm") ) brek; for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ] ){ B[3*n ] B[3*n ] - D[9*n2]*.e; B[3*n] B[3*n] - D[9*n5]*.e; D[9*n2].e; D[9*n5].e; D[9*n6].e; D[9*n7].e; D[9*n8].e; B[3*n2].e; S ndel[n]; E ndel[n]; for(ks;k<e;k){ S ndeu[n]; E ndeu[n]; AL[9*k-3].e; AL[9*k-2].e; AL[9*k-].e; for(ks;k<e;k){ AU[9*k-3].e; AU[9*k-2].e; AU[9*k-].e; 節点グループ名が Zm である節点では Z 方向変位成分 にすなわち : B[3*n2]. (n ~-) FORTRA では B[3*n-2]. (n )

FEM3D-Prt2 76 境界条件 :MAT_ASS_BC(3/9) for(n;n<;n){ S ndel[n]; E ndel[n]; for(ks;k<e;k){ f (IWKX[temL[k-]-][] ) { B[3*n ] B[3*n ] - AL[9*k-7]*.e; B[3*n] B[3*n] - AL[9*k-4]*.e; B[3*n2] B[3*n2] - AL[9*k-]*.e; AL[9*k-7].e; AL[9*k-4].e; AL[9*k-].e; S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ f (IWKX[temU[k-]-][] [ ][ ] ) { B[3*n ] B[3*n ] - AU[9*k-7]*.e; B[3*n] B[3*n] - AU[9*k-4]*.e; B[3*n2] B[3*n2] - AU[9*k-]*.e; AU[9*k-7].e; AU[9*k-4].e; AU[9*k-].e;

FEM3D-Prt2 77 一次元 で成立する方程式 u F ( mn ) m 方向にのみ自由度 ( 変位 u) 一様な : 断面積 A ヤング率 E 境界条件 :u( 固定 ) m : 大きさ F の力 ( 軸力 ) m 自重によるたわみ等はナシ : バネと同じ

FEM3D-Prt2 78 一次元 /* // --------------------- プログラム :d.c(6/7) 境界条件 // BOUDARY condtons // --------------------- */ u /* XXmn */ ; S Inde[]; AMt[S] ;.; Dg[ ].; Rhs [ ].; /* XXm */ / X Xm / -; Rhs[] F; for(k;k<plu;k){ f(item[k]){amt[k].; 対角成分 右辺 非対角成分

FEM3D-Prt2 79 一次元 /* // --------------------- プログラム :d.c(6/7) 境界条件 // BOUDARY condtons // --------------------- */ u /* XXmn */ ; S Inde[]; AMt[S] ;.; Dg[ ].; Rhs [ ].; /* XXm */ / X Xm / -; Rhs[] F; for(k;k<plu;k){ f(item[k]){amt[k].; 対角成分 右辺 非対角成分 ゼロクリア

FEM3D-Prt2 8 一次元 /* // --------------------- プログラム :d.c(6/7) 境界条件 // BOUDARY condtons // --------------------- */ u /* XXmn */ ; S Inde[]; AMt[S] ;.; Dg[ ].; Rhs [ ].; for(k;k<plu;k){ f(item[k]){amt[k].; ; /* XXm */ -; Rhs[] F; 行列の対称性を保つため 第一種境界条件を適用している節点に対応する 列 を 右辺に移項して消去する ( 今の場合は非対角成分をにするだけで良い ) 対角成分 右辺 非対角成分 消去 ゼロクリア

FEM3D-Prt2 8 一次元 /* // --------------------- プログラム :d.c(6/7) 境界条件 // BOUDARY condtons // --------------------- */ u /* XXmn */ ; S Inde[]; AMt[S] ;.; Dg[ ].; Rhs [ ].; for(k;k<plu;k){ f(item[k]){amt[k].; /* XXm */ -; Rhs[] F; 行列の対称性を保つため 第一種境界条件を適用している節点に対応する 列 を 右辺に移項して消去する ( 今の場合は非対角成分をにするだけで良い ) 対角成分 右辺 非対角成分 消去 ゼロクリア

FEM3D-Prt2 82 一次元 第一種境界条件が u の場合 /* // --------------------- // BOUDARY condtons // --------------------- */ /* XXmn */ ; S Inde[]; AMt[S].; Dg[ ].; Rhs [ ] Umn; 行列の対称性を保つため 第一種境界条件を適用している節点に対応する 列 を 右辺に移項して消去する for(;<;){ for (kinde[];k<inde[];k){ f(item[k]){ Rhs [] Rhs[] Amt[k]*Umn; AMt[k].; Inde[ ] Amt k u Item [ k ] k Inde[ ] Dg u Rhs

FEM3D-Prt2 83 一次元 第一種境界条件が u の場合 /* // --------------------- // BOUDARY condtons // --------------------- */ /* XXmn */ ; S Inde[]; AMt[S].; Dg[ ].; Rhs [ ] Umn; 行列の対称性を保つため 第一種境界条件を適用している節点に対応する 列 を 右辺に移項して消去する for(;<;){ for (kinde[];k<inde[];k){ f(item[k]){ Rhs [] Rhs[] Amt[k]*Umn; AMt[k].; Dg Rhs u Inde[ ] Amtk uitem [ k ] k Inde[ ] k k Amt k s u s Item[ k s ] Rhs Amt k s u mn where Item[ k s ]

FEM3D-Prt2 84 全体マトリクス p p p p p p p p

FEM3D-Prt2 85 同じことをやればよい 自分の 行 : 対角成分 それ以外 p p p p p p p p

FEM3D-Prt2 86 同じことをやればよい 自分の 列 : 右辺へ移項 非対角成分 p p p p p p p p

FEM3D-Prt2 87 境界条件 :MAT_ASS_BC(2/9) /** **/ ZZm for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"zm") ) brek; for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ] ){ B[3*n ] B[3*n ] - D[9*n2]*.e; B[3*n] B[3*n] - D[9*n5]*.e; D[9*n2].e; D[9*n5].e; D[9*n6].e; D[9*n7].e; D[9*n8].e; B[3*n2].e; S ndel[n]; E ndel[n]; for(ks;k<e;k){ S ndeu[n]; E ndeu[n]; AL[9*k-3].e; AL[9*k-2].e; AL[9*k-].e; for(ks;k<e;k){ AU[9*k-3].e; AU[9*k-2].e; AU[9*k-].e; 節点グループ名が Zm である節点において : IWKX[n-][] とする n:から始まる節点番号

FEM3D-Prt2 88 境界条件 :MAT_ASS_BC(2/9) /** **/ ZZm for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"zm") ) brek; for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ] ){ B[3*n ] B[3*n ] - D[9*n2]*.e; B[3*n] B[3*n] - D[9*n5]*.e; D[9*n2].e; D[9*n5].e; D[9*n6].e; D[9*n7].e; D[9*n8].e; B[3*n2].e; S ndel[n]; E ndel[n]; for(ks;k<e;k){ AL[9*k-3].e; AL[9*k-2].e; AL[9*k-].e; B[3*n] B[3*n] を変更してからD[9*n6] D[9*n7] をゼロクリア S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ AU[9*k-3].e; AU[9*k-2].e; AU[9*k-].e; p p 2 3 4 5 6 7 8 2 p p p p p p

FEM3D-Prt2 89 境界条件 :MAT_ASS_BC(2/9) /** **/ ZZm for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"zm") ) brek; for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; p p p p for(n;n<;n){ f( IWKX[n][] ] ){ B[3*n ] B[3*n ] - D[9*n2]*.e; B[3*n] B[3*n] - D[9*n5]*.e; D[9*n2].e; D[9*n5].e; D[9*n6].e; D[9*n7].e; D[9*n8].e; B[3*n2].e; S ndel[n]; E ndel[n]; for(ks;k<e;k){ AL[9*k-3].e; AL[9*k-2].e; AL[9*k-].e; S ndeu[n]; E ndeu[n]; k strts from for(ks;k<e;k){ AU[9*k-3].e; AU[9*k-2].e; AU[9*k-].e; p p p -9-8 -7-6 -5-4 -3-2 - p

FEM3D-Prt2 9 境界条件 :MAT_ASS_BC(3/9) for(n;n<;n){ S ndel[n]; E ndel[n]; for(ks;k<e;k){ f (IWKX[temL[k-]-][] ) { B[3*n ] B[3*n ] - AL[9*k-7]*.e; k strts from S ndeu[n]; E ndeu[n]; B[3*n] B[3*n] - AL[9*k-4]*.e; B[3*n2] B[3*n2] - AL[9*k-]*.e; AL[9*k-7].e; AL[9*k-4].e; AL[9*k-].e; 右辺を変更してからゼロクリア for(ks;k<e;k){ f (IWKX[temU[k-]-][] [ ][ ] ) { B[3*n ] B[3*n ] - AU[9*k-7]*.e; B[3*n] B[3*n] - AU[9*k-4]*.e; B[3*n2] B[3*n2] - AU[9*k-]*.e; AU[9*k-7].e; AU[9*k-4].e; AU[9*k-].e; p p p p -9-8 -7-6 -5-4 -3-2 - p p

FEM3D-Prt2 9 w@zmn 自分の 行 : 対角成分 それ以外 p p p p p p p p

FEM3D-Prt2 92 境界条件 :MAT_ASS_BC(4/9) /** **/ ZZmn for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"zmn") ) brek; w@zmn for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ] ){ D[9*n2].e; D[9*n5].e; D[9*n6].e; D[9*n7].e; D[9*n8].e; B[3*n2].e; S ndel[n]; E ndel[n]; for(ks;k<e;k){ AL[9*k-3].e; AL[9*k-2].e; AL[9*k-].e; S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ AU[9*k-3].e; AU[9*k-2].e; AU[9*k-].e; k strts from 2 3 4 5 6 7 8-9 -8-7 -6-5 -4-3 -2 -

FEM3D-Prt2 93 w@zmn 自分の 列 : 右辺へ移項 非対角成分 p p p p p p p p

FEM3D-Prt2 94 境界条件 :MAT_ASS_BC(5/9) for(n;n<;n){ S ndel[n]; E ndel[n]; for(ks;k<e;k){ f (IWKX[temL[k-]-][] ) { AL[9*k-7].e; AL[9*k-4].e; ; AL[9*k-].e; S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ f (IWKX[temU[k-]-][] ) { AU[9*k-7].e; AU[9*k-4].e; AU[9*k-].e; w@zmn -9-8 -7-6 -5-4 -3-2 - k strts t from

FEM3D-Prt2 95 u@xmn 自分の 行 : 対角成分 それ以外 p p p p p p p p

FEM3D-Prt2 96 境界条件 :MAT_ASS_BC(6/9) /** **/ XXmn for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"xmn") ) brek; for( bodgrp_idex[b];b<odgrp_idex[b];b){ nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ] ){ D[9*n ].e; D[9*n].e; D[9*n2].e; D[9*n3].e; D[9*n6].e; B[3*n ].e; u@xmn 2 3 4 5 6 7 8 k strts from S ndel[n]; E ndel[n]; for(ks;k<e;k){ AL[9*k-9].e; AL[9*k-8].e; AL[9*k-7].e; S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ AU[9*k-9].e; AU[9*k-8].e; AU[9*k-7].e; -9-8 -7-6 -5-4 -3-2 -

FEM3D-Prt2 97 u@xmn 自分の 列 : 右辺へ移項 非対角成分 p p p p p p p p

FEM3D-Prt2 98 境界条件 :MAT_ASS_BC(7/9) for(n;n<;n){ S ndel[n]; E ndel[n]; for(ks;k<e;k){ f (IWKX[temL[k-]-][] ) { AL[9*k-9].e; AL[9*k-6].e; ; AL[9*k-3].e; u@xmn -9-8 -7 S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ f (IWKX[temU[k-]-][] ) { AU[9*k-9].e; AU[9*k-6].e; AU[9*k-3].e; -6-5 -4-3 -2 - k strts from

FEM3D-Prt2 99 v@ymn 自分の 行 : 対角成分 それ以外 p p p p p p p p

FEM3D-Prt2 境界条件 :MAT_ASS_BC(8/9) /** **/ YYmn for(n;n<;n) IWKX[n][]; b-; for( b;b<odgrptot;b){ f( strcmp(odgrp_ame[b].nme"ymn") ) brek; v@ymn for( bodgrp_idex[b];b<odgrp_idex[b];b){ b<odgrp nodgrp_item[b]; IWKX[n-][]; for(n;n<;n){ f( IWKX[n][] ){ D[9*n].e; D[9*n4].e; D[9*n7].e; D[9*n3].e; D[9*n5].e; B[3*n].e; 2 3 4 5 6 7 8 k strts from S ndel[n]; E ndel[n]; for(ks;k<e;k){ AL[9*k-6].e; AL[9*k-5].e; AL[9*k-4].e; S ndeu[n]; E ndeu[n]; for(ks;k<e;k){ AU[9*k-6].e; AU[9*k-5].e; AU[9*k-4].e; -9-8 -7-6 -5-4 -3-2 -

FEM3D-Prt2 v@ymn 自分の 列 : 右辺へ移項 非対角成分 p p p p p p p p

FEM3D-Prt2 2 境界条件 :MAT_ASS_BC(9/9) for(n;n<;n){ S ndel[n]; E ndel[n]; for(ks;k<e;k){ f (IWKX[temL[k-]-][] ) { AL[9*k-8].e; AL[9*k-5].e; AL[9*k-2].e; S d ndeu[n]; U[] E ndeu[n]; for(ks;k<e;k){ f (IWKX[temU[k-]-][] ) { AU[9*k-8].e; AU[9*k-5].e; AU[9*k-2].e; v@ymn -9-8 -7-6 -5-4 -3-2 - k strts from