OpenSees Blog 日本語 目次

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

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







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

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


2014年10月28日火曜日

OpenSees Basic Examples (C4: 2階建てフレームでの固有値解析) コマンドサマリ



OpenSees Basic Examples  (2階建てフレームでの固有値解析) 解説
のコマンドのサマリは以下の通りです。

このコマンドを ファイル名 EigenAnal_twoStoreyShearFrame7.tcl として、テキストフォーマットで作成し、


OpenSeesの起動環境 で 起動しているOpenSees のコマンドラインに


OpenSees EigenAnal_twoStoreyShearFrame7.tcl  <Enter>

と打ち込んで、実行します。


----- EigenAnal_twoStoreyShearFrame7.tcl 始まり ------


# Eigen analysis of a two-storey shear frame; Example 10.4 from "Dynamics of Structures" book by Anil Chopra - using equalDOF and very high Ib

# units: in, kips

wipe

#input
set m  [expr 100.0/386.0]
set numModes 2

#material
set Ac 63.41
set Ic 320.0
set E 30000.0
set Ib 10e+12
set Ab 63.41

#geometry
set L 288.
set h  144.

# create data directory
file mkdir modes;

# define the model
#---------------------------------
#model builder
model BasicBuilder -ndm 2 -ndf 3

# nodal coordinates:
node 1   0.  0. ;
node 2   $L  0. ;
node 3   0.  $h ;
node 4   $L  $h ;
node 5   0.  [expr 2*$h];
node 6   $L  [expr 2*$h];

# Single point constraints -- Boundary Conditions
fix 1 1 1 1;
fix 2 1 1 1;

# MP constraints
equalDOF 3 4 2 3
equalDOF 5 6 2 3

# assign mass
mass 3 $m 0. 0. ;
mass 4 $m 0. 0. ;
mass 5 [expr $m/2.] 0. 0. ;
mass 6 [expr $m/2.] 0. 0. ;

# define geometric transformation:
set TransfTag 1;
geomTransf Linear $TransfTag ;

# define elements:
# columns
element elasticBeamColumn 1 1 3 $Ac $E  [expr 2.*$Ic] $TransfTag;
element elasticBeamColumn 2 3 5 $Ac $E  $Ic           $TransfTag;
element elasticBeamColumn 3 2 4 $Ac $E  [expr 2.*$Ic] $TransfTag;
element elasticBeamColumn 4 4 6 $Ac $E  $Ic           $TransfTag;
# beams
element elasticBeamColumn 5 3 4 $Ab $E  $Ib           $TransfTag;
element elasticBeamColumn 6 5 6 $Ab $E  $Ib           $TransfTag;

# record eigenvectors
#----------------------
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"
}

# perform eigen analysis
#-----------------------------
set lambda [eigen  $numModes];

# 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)]
}

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


# create display  for mode shapes
#---------------------------------
#                 $windowTitle $xLoc $yLoc $xPixels $yPixels
recorder display "Mode Shape 1"  10    10     500      500     -wipe
prp $h $h 1;                                         # projection reference point (prp); defines the center of projection (viewer eye)
vup  0  1 0;                                         # view-up vector (vup)
vpn  0  0 1;                                         # view-plane normal (vpn)  
viewWindow -200 200 -200 200;                        # coordiantes of the window relative to prp
display -1 5 20;                                     # 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
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


# 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
set res [analyze 1]
if {$res < 0} {
    puts "Modal analysis failed"
}

# 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]
puts "eigenvector 1: [list [expr {$f11/$f21}] [expr {$f21/$f21}] ]"
puts "eigenvector 2: [list [expr {$f12/$f22}] [expr {$f22/$f22}] ]"


after 10000

----- EigenAnal_twoStoreyShearFrame7.tcl 終わり ------



次のページ →
Basic Examples Manual (2階建てフレームでの固有値解析) 
解析結果


Opensees コマンド 日本語解説 : 目次


2014年10月16日木曜日

OpenSees Basic Examples (C3: 2階建てフレームでの固有値解析) 解説(固有値解析)



2)解析結果を記録するレコーダーの設定
Node(節点)について、解析結果を記録するためのファイル名、Node番号を設定します


ここでは、Recorder Node コマンドを使用して、

Node 1から6までの 3つの自由度の値を、1次固有モードから2次固有モードまで出力します。

解析したい固有値の数(numModes)は、2です。
そのため、変数K に 固有値の数を代入して、結果をファイル(modeディレクトリーの下にあるmode1.txt(1次)、mode2.txt(2次)に出力します。


# record eigenvectors
#----------------------

# 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での固有ベクトルとの)を求めます。

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 コマンド 日本語解説 : 目次

2014年10月9日木曜日

OpenSees Basic Examples (C2: 2階建てフレームでの固有値解析) 解説(Node, Element)


0)必要となる数字をシンボルに代入しておき、実行環境を生成します


#input
set m  [expr 100.0/386.0]
set numModes 2      # 解析する固有値モードの数

#material
set Ac 63.41    # Element 1,2,3,4の断面積
set Ic 320.0       #Element 2,4の慣性モーメント
set E 30000.0  # ヤング率
set Ib 10e+12   #Element 5,6の慣性モーメント
set Ab 63.41      Element  5,6の断面積

#geometry
set L 288.
set h  144.

# create data directory "mkdir"のディレクトリを生成します
file mkdir modes; 



1)Model, Node(節点), Element(要素)の設定
解析する時の、次元、節点(Node)、要素(Element)の
Opensees のコマンドは、以下の通りです。

1.1) 今までの設定をクリアします
wipe   

1.2) 2次元、自由度3 で、解析するよう設定します
model BasicBuilder [次元数] [自由度数] 

model BasicBuilder -ndm 2 -ndf 3

(参照ページはここ

1.3) Node(節点) の 座標を設定します
Node [ nodeの番号 ] [ x座標] [y座標] -mass [節点質量(自由度の第1成分:u )]
[節点質量(自由度の第2成分:v )] [節点質量(自由度の第3成分:θ )]

$がついた変数は、0)の所で定義したシンボルの数字がはいります。


# nodal coordinates:
node 1   0.  0. ;
node 2   $L  0. ;
node 3   0.  $h ;
node 4   $L  $h ;
node 5   0.  [expr 2*$h];    #  = 2 x h 
node 6   $L  [expr 2*$h];       #  = 2 x h 


1.4) Nodeのどこを固定するかを設定します
ここでは、nodeの1と2を固定します。

fix [ nodeの番号 ] [ uの固定の定義]  [ vの固定の定義]  [ θの固定の定義] 
0: 固定されていない
1: 固定されている


# Single point constraints -- Boundary Conditions
fix 1 1 1 1;
fix 2 1 1 1;


(参照ページはここ


1.5) 多点拘束(Multi Point Constraint、MPC)の定義
Node 3を主、Node4を従として、2番目の自由度(v)、3番目の自由度(θ)を拘束します
Node 5を主、Node6を従として、2番目の自由度(v)、3番目の自由度(θ)を拘束します

多点拘束を設定する時は、equalDOFコマンドを使用します。


equalDOF [ 主nodeの番号 ] [ 従nodeの番号 ] [ 拘束する自由度の番号 ] [ 拘束する自由度の番号 ]  


# MP constraints
equalDOF 3 4 2 3
equalDOF 5 6 2 3 


1.6) Nodeの質量の定義

Nodeの質量を指定します。

Node3,4  Node5,6 の水平方向のみの質量が定義されています

mass [ nodeの番号 ] [ uの質量]  [ vの質量]  θ回転慣性質量] 


# assign mass
mass 3 $m 0. 0. ;
mass 4 $m 0. 0. ;
mass 5 [expr $m/2.] 0. 0. ;
mass 6 [expr $m/2.] 0. 0. ;

(参照ページはここ


1.7) 座標変換の定義

geomTransf [座標変換の方法] [座標変換方法のID]


# define geometric transformation:
set TransfTag 1;
geomTransf Linear $TransfTag ;


(参照ページはここ




1.8) Element(要素)を設定します。

Element コマンド の中の elasticBeamColum を使用します。

element elasticBeamColumn [ elementの番号 ] [ 片方のnode番号] [片方のnode番号] [ 断面積] [ヤング率] [Z軸の慣性モーメント] [座標変換方法のID]


# define elements:
# columns
element elasticBeamColumn 1 1 3 $Ac $E  [expr 2.*$Ic]  $TransfTag;
element elasticBeamColumn 2 3 5 $Ac $E  $Ic               $TransfTag;
element elasticBeamColumn 3 2 4 $Ac $E  [expr 2.*$Ic]  $TransfTag;
element elasticBeamColumn 4 4 6 $Ac $E  $Ic               $TransfTag;
# beams
element elasticBeamColumn 5 3 4 $Ab $E  $Ib               $TransfTag;
element elasticBeamColumn 6 5 6 $Ab $E  $Ib               $TransfTag;


(参照ページはここ


次のページ →
Basic Examples Manual (2階建てフレームでの固有値解析) 
解説(固有値解析)


Opensees コマンド 日本語解説 : 目次