OpenSees Blog 日本語 目次

最初に「このブログをみるためのガイド」をご覧ください。

Update中OpenSees コマンド 日本語解説 の 目次 OpenSeesコマンド はじめての方は「ここから
このblogで使用しているOpenSeesコマンド集は「ここ」 Update中
OpenSees のソースコード 解析に挑戦してみる 目次最初のページは「ソースコードのダウンロードとビルド」
Appendix:C言語での 「有限要素法における平面トラスの解析」目次最初のページは「Microsoft Visual Studioの導入方法」







目次の中で、更新したページにはNewがついています

このブログ内の単語を検索したい場合は、左上OpenSeesロゴの上に検索窓から検索できます。


2015年5月26日火曜日

OpenSees Developer : 構造計算(静的・非線形解析) 3


、「軸力、せん断力、曲げを受ける部際が任意の方向を向いている場合の剛性マトリクス」を作成する部分についてのプログラムです。


theIncIntegrator->formTangent(incrTangent)は、
C:\OpenSees-work\OpenSees5621\OpenSees\SRC\analysis\integrator\IncrementalIntegrator.cpp
または
\analysis\integrator\プロジェクトのIncrementalIntegrator.cpp
にあります。



この枠で囲まれた
theSOE->addA(elePtr->getTangent(this),elePtr->getID())
で、
「軸力、せん断力、曲げを受ける部際が任意の方向を向いている場合の剛性マトリクス」の場合の
全体座標系における、全体の剛性マトリクス
が作成されます。

while((elePtr = theEles2()) != 0)
で、elementがある限り(つまり、すべてのelementに対して)
theSOE->addA(elePtr->getTangent(this),elePtr->getID())
マトリクスを加算(赤字部分)しています。
(つまり、すべての要素剛性マトリクスを足し合わせているということで、これから全体の剛性マトリクスが計算されている、ということです)

また
theSOE->addA(elePtr->getTangent(this),elePtr->getID())
各要素剛性マトリクス(赤字)は、elePrtのクラスに代入されます。

ここで使用しているtcl スクリプトファイルは、Gravity Load  です。

このtclスクリプトファイルの中で、elementは、以下の様にセットしています。


# element connectivity:
element elasticBeamColumn 1 1 3 3600 4227 1080000 1
element elasticBeamColumn 2 2 4 3600 4227 1080000 1
element elasticBeamColumn 3 3 4 5760 4227 4423680 1



elasticBeamColumnは、 、「軸力、せん断力、曲げを受ける部際が任意の方向を向いている場合の剛性マトリクス」を求める、という意味ですので、
elePtr->getTangent(this)で、求める要素剛性マトリクスは、、「軸力、せん断力、曲げを受ける部際が任意の方向を向いている場合の剛性マトリクス」を求める
elasticBeamColumnクラスを使用して、求めています。

elasticBeamColumnクラスでの、剛性マトリクスの説明については
 elasticBeamColumnでの剛性マトリクス
を参照してください。

以上の様に、
elePtr->getTangent(this)
で、各要素での「平面トラスの剛性マトリクス」を算出し、
theSOE->addA(.....)
で、すべての要素剛性マトリクスを足し合わせる事によって
全体座標系における、全体の剛性マトリクスを算出しています。

なお、算出された全体座標系における、全体の剛性マトリクスは、
OpenSees Developer :構造計算(静的・非線形解析)4
で解説している 実帯連立一次方程式を解くための
連立方程式用のマトリクスのクラスのメモリ(theSOE)にダイレクトに代入されています。

次のページ →
OpenSees Developer :構造計算(静的・非線形解析)4


OpenSees のソースコード解析に挑戦してみる : 目次

2015年5月21日木曜日

OpenSees Developer : 構造計算(静的・非線形解析) 2



C:\OpenSees-work\OpenSees5621\OpenSees\SRC\analysis\analysis\StaticAnalysis.cpp
または
analysis\analysisプロジェクトのStaticAnalysis.cpp
の中の


result = theStaticAnalysis->analyze(numIncr);
に、
「軸力、せん断力、曲げを受ける部際が任意の方向を向いている場合の剛性マトリクス」

実帯連立一次方程式を解く
工程があります。

下記が theStaticAnalysis->analyze のソースコードです。



(1) のnumStepsには
analyze 1
と、tcl コマンドでセットした 1 の数字、アナライズしたい数がnumStepsに入っています。

例えば、時系列で10こ分解析をしたい場合は、
analyze 10
と、書きますが、この時numStepsには10が入ることになり、このループを10回分まわすことによって、変位の計算などを行うことになります。

(2) では、この tcl スクリプトの最初の方でセットしている、初期値としてのNodeやElementの値が入っているメモリのポインタを呼び出しています。

(3)では、 
変位の計算の結果、Nodeなどの値が変化しますが、これがcommit( )で許容できるまで、
Domain(Node や Elementの値)を変位に沿って変化させています。



(4) のtheAlgorithm->solveCurrentStep() で、


「軸力、せん断力、曲げを受ける部際が任意の方向を向いている場合の剛性マトリクス」作成

実帯連立一次方程式を解くこと

を行っています。

このtheAlgorithm->solveCurrentStep()は、
C:\OpenSees-work\OpenSees5621\OpenSees\SRC\analysis\algorithm\equiSolnAlgo\ModifiedNewton.cpp

または
aanalysis\algorithm\equiSolnAlgoプロジェクトのModifiedNewton.cpp
の中にあります



(5)の部分で、「軸力、せん断力、曲げを受ける部際が任意の方向を向いている場合の剛性マトリクス」作成
(6)の部分で、実帯連立一次方程式を解く

を行っています。
次のページ →
OpenSees Developer :構造計算(静的・非線形解析)3


OpenSees のソースコード解析に挑戦してみる : 目次



2015年5月12日火曜日

OpenSees Developer :構造計算(静的・線形解析)3


平面トラスの剛性マトリクスを作成する部分についてのプログラムです。


theIncIntegrator->formTangent(incrTangent)は、
C:\OpenSees-work\OpenSees5621\OpenSees\SRC\analysis\integrator\IncrementalIntegrator.cpp
または
\analysis\integrator\プロジェクトのIncrementalIntegrator.cpp
にあります。




この枠で囲まれた
theSOE->addA(elePtr->getTangent(this),elePtr->getID())
で、
平面トラスの剛性マトリクスの場合の
全体座標系における、全体の剛性マトリクス
が作成されます。

while((elePtr = theEles2()) != 0)
で、elementがある限り(つまり、すべてのelementに対して)
theSOE->addA(elePtr->getTangent(this),elePtr->getID())
マトリクスを加算(赤字部分)しています。
(つまり、すべての要素剛性マトリクスを足し合わせているということで、これから全体の剛性マトリクスが計算されている、ということです)

また
theSOE->addA(elePtr->getTangent(this),elePtr->getID())
各要素剛性マトリクス(赤字)は、elePrtのクラスに代入されます。

ここで使用しているtcl スクリプトファイルは、OpenSees Basic Examples (基本的なトラス解析)
です。

このtclスクリプトファイルの中で、elementは、以下の様にセットしています。

element Truss 1 1 4 10.0 1
element Truss 2 2 4  5.0 1
element Truss 3 3 4  5.0 1


Trussは、 「平面トラスの剛性マトリクス」を求める、という意味ですので、
elePtr->getTangent(this)で、求める要素剛性マトリクスは、「平面トラスの剛性マトリクス」を求める
Trussクラスを使用して、求めています。

Trussクラスでの、剛性マトリクスの説明については
Trussでの剛性マトリクス
を参照してください。

以上の様に、
elePtr->getTangent(this)
で、各要素での「平面トラスの剛性マトリクス」を算出し、
theSOE->addA(.....)
で、すべての要素剛性マトリクスを足し合わせる事によって
全体座標系における、全体の剛性マトリクスを算出しています。

なお、算出された全体座標系における、全体の剛性マトリクスは、
OpenSees Developer :構造計算(静的・線形解析)4 
で解説している 実対称正定値帯連立一次方程式を解くための
連立方程式用のマトリクスのクラスのメモリ(theSOE)にダイレクトに代入されています。

次のページ →

OpenSees Developer :構造計算(静的・線形解析)4

OpenSees のソースコード解析に挑戦してみる : 目次

2015年5月7日木曜日

OpenSees Developer :構造計算(静的・線形解析)4


OpenSees Developer :構造計算(静的・線形解析)3
で求めた平面トラスの剛性マトリクスを利用して、
実対称正定値帯連立一次方程式を解く
部分についてのプログラムです。


theSOE->solve()は、
C:\OpenSees-work\OpenSees5621\OpenSees\SRC\system_of_eqn\linearSOE\bandSPD\BandSPDLinLapackSolver.cpp
または
\system_of_eqn\linearSOE\bandSPDプロジェクトのBandSPDLinLapackSolver.cpp
にあります。

LAPACKライブラリの実対称正定値帯連立一次方程式DPBSV を呼ぶことによって、変位を計算が行われます。

ここで DPBSV の
Aptrに線形剛性マトリックス(入力)
Xptrに外力(入力) と 変位(出力)
が 該当することになります。



次のページ →
OpenSees Developer : 計算結果表示例(静的・線形解析)

OpenSees のソースコード解析に挑戦してみる : 目次