OpenSees Blog 日本語 目次

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

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







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

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


2016年2月9日火曜日

OpenSees Developer : ユークリッドノルムの計算

OpenSees Basic Examples (鉄筋コンクリート門型フレーム: 横荷重解析) 例題



# Create a recorder to monitor element forces in columns
recorder EnvelopeElement -file ele32.txt -time -ele 1 2 forces

で、出力されるele32.txtの中のデータ ユークリッドノルムのソースコードについての解説です。


StaticAnalysis.cpp 
のresult = theIntegrator->commit();
で、ele32.txtへ出力される timestampとユークリッドノルムが計算されています。

StaticAnalysis::analyze(int numSteps)




このcommit( ) が読んでいるファンクションの中に、
軸力、せん断力、曲げモーメント
を計算している部分があり、それは、PDeltaCrdTransf2d.cpp にあります。

(*) StaticAnalysis.cpp については、こちらも参照してください

PDeltaCrdTransf2d::getGlobalResistingForce(const Vector &pb, const Vector &p0)




赤でかこまれた部分で
pl[0], pl[3] が軸力
pl[1], pl[4] がせん断力
pl[2], pl[5] が曲げモーメント
を算出しています。

(特にせん断力 Vは、曲げモーメントの傾きから求めています)

つぎに
緑線の部分で 軸力とせん断力を部材座標系から全体座標系へ変換しています。

最終的に

pg(0), pg(3)  に 軸力
pg(1), pg(4)  に せん断力
pg(2), pg(5)  に 曲げモーメント
を入力して、このfunctionは終了します。

次に、

recorder EnvelopeElement -file ele32.txt -time -ele 1 2 forces
コマンドで、出力されるデータを計算している部分です。



EnvelopeElementRecorder.cpp
EnvelopeElementRecorder::record(int commitTag, double timeStamp)

で、ユークリッドノルムが計算されています。





① から、(最終的に)EnvelopeElementRecorder::record(int commitTag, double timeStamp)
が呼ばれます。

② の
eleInfo.getData();
で、上記の
pg(0), pg(3)  に 軸力
pg(1), pg(4)  に せん断力
pg(2), pg(5)  に 曲げモーメント
の値(ここでは、eleDataの成分になっています。)を取得します。

次に③、
normV += eleData(j) * eleData(j);

で、


の1/2 乗(√)の中身を計算してます。

1/2 乗(√)は、④で計算しています。

# Create a recorder to monitor element forces in columns

recorder EnvelopeElement -file ele32.txt -time -ele 1 2 forces

で、出力されるele32.txtの中のデータ は
<Time Stamp> <ユークリッドノルム> のペアで出力されていますが、
currentData( )に

<ユークリッドノルム>
が保存されることになります。

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