2)解析結果を記録するレコーダーの設定
Node(節点)について、解析結果を記録するためのファイル名、Node番号を設定します
ここでは、Recorder Node コマンドを使用して、
Node 1から6までの 3つの自由度の値を、1次固有モードから2次固有モードまで出力します。
解析したい固有値の数(numModes)は、2です。
そのため、変数K に 固有値の数を代入して、結果をファイル(modeディレクトリーの下にあるmode1.txt(1次)、mode2.txt(2次)に出力します。
#----------------------
# kに初期値として1をセットし、recorder...部分のコマンドを 1 づつk ≦ 2になるまで kを増加させて実行します。
for { set k 1 } { $k <= $numModes } { incr k } {
recorder Node -file [format "modes/mode%i.txt" $k] -nodeRange 1 6 -dof 1 2 3 "eigen $k"
}
シンボル lambda に 解析したい固有値の数(numModes) 入れます
# perform eigen analysis
#-----------------------------
set lambda [eigen $numModes];
固有振動数ω 固有周期T 固有周波数 f
を下記式を使って求め、 それぞれの1次、2次の値を、omega[2], T[2], f[2] の行列の中に格納します。
# calculate frequencies and periods of the structure
#---------------------------------------------------
set omega {}
set f {}
set T {}
set pi 3.141593
foreach lam $lambda {
lappend omega [expr sqrt($lam)]
lappend f [expr sqrt($lam)/(2*$pi)]
lappend T [expr (2*$pi)/sqrt($lam)]
}
次に、
最初に、modeディレクトリの中にPeriods.txt というファイルを作成し
書き込みモード("w")で、ファイルをOpenします。
($periodのシンボルの中に、ファイル名が格納されています)
書き込むデータ領域は、 Periods[ ]です。
この領域に、先ほど 固有周期 T[ ] の中に格納した、1次、2次の固有周期を代入するとともに、ディスプレイ上で表示します。
(OpenSeesを起動したときに、プロンプトに表示されます ここ参照)
最後にファイルをCloseします。
puts "periods are $T"
# write the output file cosisting of periods
#--------------------------------------------
set period "modes/Periods.txt"
set Periods [open $period "w"]
foreach t $T {
puts $Periods " $t"
}
close $Periods
3) 振動モード形のグラフ表示
1次振動モード形を表示します。
振動モード形は、別Windowでグラフとして表示されます。
最初に、Windowsの大きさと位置とタイトルを設定します
recorder display [windowのタイトル] [Windowの左上のX位置] [Windowの左上のY位置] [Windowの幅] [Windowの高さ] -wipe
# create display for mode shapes
#---------------------------------
# $windowTitle $xLoc $yLoc $xPixels $yPixels
recorder display "Mode Shape 1" 10 10 500 500 -wipe
# record eigenvectors の所で求めているRecorder Nodeの値からグラフを作成します
# projection reference point (prp); defines the center of projection (viewer eye)
prp $h $h 1;
vup 0 1 0; # view-up vector (vup)
vpn 0 0 1; # view-plane normal (vpn)
viewWindow -200 200 -200 200; # coordinates of the window relative to prp
# the 1st arg. is the tag for display mode (ex. -1 is for the first mode shape)
# the 2nd arg. is magnification factor for nodes, the 3rd arg. is magnif. factor of deformed shape
display -1 5 20;
2次振動モード形を表示します。
recorder display "Mode Shape 2" 10 510 500 500 -wipe
prp $h $h 1;
vup 0 1 0;
vpn 0 0 1;
viewWindow -200 200 -200 200
display -2 5 20
4)OpenSeesで用意されているツールの設定
有限要素法で使用する連立方程式の解法を設定します。
ここで使用しているコマンドについての
参照ページは ここ 、 ここ と ここ
# Convergence test で、Energy Increment Testを行っています
OpenSeesでの解説は、ここです。
# Run a one step gravity load with no loading (to record eigenvectors)
#-----------------------------------------------------------------------
integrator LoadControl 0 1 0 0
# Convergence test
# tolerance maxIter displayCode
test EnergyIncr 1.0e-10 100 0
# Solution algorithm
algorithm Newton
# DOF numberer
numberer RCM
# Constraint handler
constraints Transformation
# System of equations solver
system ProfileSPD
analysis Static
5) 固有ベクトル(固有振動モード)値の取得
analyze 1 で 1ステップ分OpenSeesを実行します
set res [analyze 1]
if {$res < 0} {
puts "Modal analysis failed"
}
f11, f21, f12, f22 に 指定したnodeの固有ベクトル(固有振動モード)値をnodeEigenvectorを使って取得します。
nodeEigenvector [Nodeの値] [固有値] [対象となる自由度]
f11には、
Node3、X方向の1次固有ベクトル(固有振動モード)の値が入ります
f12には、
Node3、X方向の2次固有ベクトル(固有振動モード)の値が入ります
f21には
Node5、X方向の1次固有ベクトル(固有振動モード)の値が入ります
f22には
Node5、X方向の2次固有ベクトル(固有振動モード)の値が入ります
# get values of eigenvectors for translational DOFs
#---------------------------------------------------
set f11 [nodeEigenvector 3 1 1]
set f21 [nodeEigenvector 5 1 1]
set f12 [nodeEigenvector 3 2 1]
set f22 [nodeEigenvector 5 2 1]
また、1次、2次それぞれのNode3での固有ベクトルの比率(Node5での固有ベクトルとの)を求めます。
また、1次、2次それぞれのNode3での固有ベクトルの比率(Node5での固有ベクトルとの)を求めます。
puts "eigenvector 1: [list [expr {$f11/$f21}] [expr {$f21/$f21}] ]"
puts "eigenvector 2: [list [expr {$f12/$f22}] [expr {$f22/$f22}] ]"
ちなみに f11, f21, f12, f22 の値は、上記のコマンドでは表示しませんが、下記の様になっています
f11 = -0.80208062768966204000
f21 = -1.60416125541353030000
f12 = -1.13431330181963320000
f22 = 1.13431330179544520000
また、
Node3とNode5での固有ベクトルの比率をグラフ化すると以下のようになります。
6) これは追加
実際に、このTCLコマンドを実行すると、3)で表示させた振動モード形のグラフが、
あっと言う間に消えてしまうので、下記のコマンドを追加しました。
これは、次のコマンドの実行まで、10000msec 待つというコマンドです。
after 10000
次のページ →
Basic Examples Manual (2階建てフレームでの固有値解析)
コマンドサマリ
Opensees コマンド 日本語解説 : 目次 |
このコメントは投稿者によって削除されました。
返信削除はじめまして
返信削除kindl版の説明書を購入させていただいたものです。
現在、openseesで簡単な2質点系の固有値解析を試みています。
プログラムの流れとしては、今回の2層フレームを2質点形に直して書いています。
結果はモード表示画面が一瞬表示されエラーが出て強制終了となります。
この2層フレーム問題と固有値計算の部分で違ってくるのでしょうか?
set lambda [eigen $numModes] ;
のところでエラーが出てしまいます。
突然で大変申し訳ありませんが、何かお気づきの点があれば宜しくお願い致します。
荒井様
返信削除set lambda [eigen $numModes] ;
で、エラーになるということですが
こちらは、lambda というシンボルに、何かしらの値をセットするという部分です
ですので、これ自体がエラーを起こすことはないのではないか、と考えます。
次に
[eigen $numModes]
の部分ですが、こちらは 固有値をnumModesという名前のシンボルの中に入っている値でセットする
という意味です
ここでは 最初にnumModesには
set numModes 2
と2をセットしていますので、
[eigen 2]
という意味に なります。
荒井様の tclスクリプトが、上記のコマンドとして、値などのセットも含めて希望する形になっているかどうかを、ご確認されてはと思います。
早速のご返信ありがとうございます。
削除エラーを探すためにプログラムのはじめからAなどのダミーを入力していったところ
set lambda [eigen $numModes] ;
で止まってしまいます。
opensees ではフレーム解析ではなく単純な2質点系の固有値解析はできないのでしょうか
勝手ながらエラーを載せさせていただきます。
OpenSees > source c.tcl
ArpackSolver::Error with _saupd info = -9999
Could not build an Arnoldi factorization.IPARAM(5) the size of the current Arnol
di factorization: is 2factorization. The user is advised to check thatenough wor
kspace and array storage has been allocated.
WARNING DirectIntegrationAnalysis::eigen() - EigenSOE failed in solve()
invalid command name "X"
なにかお気づきの点があれば教えていただきたいです。
よろしくお願い致します。
OpenSeesのすべてのソースコードを読んでいるわけではありませんので、フレーム解析以外、どの程度の網羅性ががあるのかは、調査しておりません。
返信削除OpenSeesには、ユーザーのためのフォーラムが用意されています。
こちらで質問されることをお勧めします
http://opensees.berkeley.edu/community/viewforum.php?f=2