2024/11/10

OpenSeesPyによる多質点モデルの時刻歴応答解析④

 では、これまでに設定したモデル、荷重、解析条件に従って、時刻歴応答解析を行い結果を出力します。時刻歴結果の出力にあたっては、各時刻の応答加速度、速度、変位をそれぞれ取得するために以下のコードを記述し、結果出力用のディクショナリを作成します。
  
outputs = {
"time": [],
"rel_accel": [],
"rel_vel": [],
"rel_disp": [],
}

 次に、全解析ステップの解析を解析時間の終了ステップまで指定した時間刻みで実施し、各ステップの解析結果(解析モデルの節点の応答加速度、応答速度、応答変位)をそれぞれ設定したディクショナリに記録します。結果の取得においてはいずれも、OpenSeesPyのOutputcommandを使用しています。

analysis_time = (len(values)) * dt#解析時間の算定
#解析時刻が解析終了時刻になるまで以下をループ
while op.getTime()< analysis_time:
    #現時刻の取得
    curr_time = op.getTime()
    #OpenSeesの構造解析を1ステップ分実行
    op.analyze(1, dt)    #各解析ステップの時刻、節点加速度、節点速度、節点変位の取得(節点4)
    outputs["time"].append(curr_time)
    outputs["rel_disp"].append(op.nodeDisp(4,1)/ratio)
    outputs["rel_vel"].append(op.nodeVel(4,1)/ratio)
    outputs["rel_accel"].append(op.nodeAccel(4, 1) / ratio)

 得られた各節点の応答結果をグラフに書いてみると以下の通りとなります。


 特に節点4の応答時刻歴については、時刻歴の振動外力を入力していることから、入力加速度波形の継続時間(50s)の間、各時刻で変動する波形が得られていることがわかります。また、固定点である基部節点1の応答加速度を見ますと、ゼロになっていることがわかります。
 一方、地震応答解析においては、固定点であったとしても解析上は全節点に地動加速度が入力されているはずです。上記より、Openseesの地震応答解析においては、節点の応答加速度は相対座標系のもとで出力されていることが確認できるかと思います。

 今回は構造減衰や部材の非線形性などは考慮しない極めて単純なモデルで応答解析を実施しました。

 なお、設定した解析モデルの条件を改めて確認する場合、例えば以下のコードを書くことで、OpenSeesPyからのエコーデータを得ることができます。以下のケースではJSON形式でテキストファイルとして出力しています。
 
op.printModel('-JSON', '-file', "model.json")

本例でのエコーデータは以下の通りとなります。エコーデータの単位系はOpenSeesPyの単位系(ヤードポンド法)となります。

{
"StructuralAnalysisModel": {
	"BIM": "unknown",
	"description": "",
	"engineer": "",
	"units": {
		"force": "",
		"length": "",
		"time": "",
		"temperature": ""
	},
	"properties": {
		"uniaxialMaterials": [

		],
		"ndMaterials": [

		],
		"sections": [

		],
		"crdTransformations": [
			{"name": "1", "type": "LinearCrdTransf2d"}
		]
	},
	"geometry": {
		"nodes": [
			{"name": 1, "ndf": 3, "crd": [0, 0]},
			{"name": 2, "ndf": 3, "crd": [0, 157.48], "mass": [0.116455, 0.116455, 0]},
			{"name": 3, "ndf": 3, "crd": [0, 314.961], "mass": [0.116455, 0.116455, 0]},
			{"name": 4, "ndf": 3, "crd": [0, 472.441], "mass": [0.116455, 0.116455, 0]}
		],
		"elements": [
			{"name": 1, "type": "ElasticTimoshenkoBeam2d", "nodes": [1, 2], "E": 29732.7, "G": 11435.7, "A": 474.774, "Avy": 237.387, "Iz": 350013, "massperlength": 0, "crdTransformation": "1"},
			{"name": 2, "type": "ElasticTimoshenkoBeam2d", "nodes": [2, 3], "E": 29732.7, "G": 11435.7, "A": 474.774, "Avy": 237.387, "Iz": 350013, "massperlength": 0, "crdTransformation": "1"},
			{"name": 3, "type": "ElasticTimoshenkoBeam2d", "nodes": [3, 4], "E": 29732.7, "G": 11435.7, "A": 474.774, "Avy": 237.387, "Iz": 350013, "massperlength": 0, "crdTransformation": "1"}
		]
	}
}
}


2024/11/04

OpenSeesPyによる多質点モデルの時刻歴応答解析③

 地震応答解析においては地震荷重や、直接積分手法などの解析条件を定義する必要があり、 ここではそれらをOpenseespyで定義する方法を説明します。

1.時間刻みの設定:

dt = 0.01
ここでは、解析の時間刻み(Δt)を0.01秒に設定しています。この値はシミュレーションの時間解像度を示し、入力する地震波のデータの刻み幅を入力します。

2.外乱となる時刻歴データの読み込み:

motion = pd.read_csv('white_noise.csv')
motion = list(motion['time'])
ratio = 0.393700787 #cm/s2→in/s2
values = [round(float(i)*ratio,4) for i in motion]
op.timeSeries('Path', 1, '-dt', dt, '-values', *values)

地震応答解析においては、外乱データは時刻歴のデータとなります。そこで、その時刻歴のデータを外部csvファイルなどに用意し、そのデータの読み込みをここで定義しています。地震波の加速度入力データは通常gal(cm/s2)で表されることが多いですが、ここでは、単位系はOpenseespyで用いられている単位系(in/s2)に適宜換算する必要があります。ここでは例題としてホワイトノイズ加振を実施するため、適当な乱数に基づいて下図のようなホワイトノイズの時刻歴波形をcsvデータとして用意し入力します。入力データをリスト形式のデータに変換し、単位換算用の係数を乗じた上で、timeSeriesコマンドにて、Path形式でOpenSeesPyに指定した時間刻みの時刻歴荷重として読み込ませています。


3.荷重パターンの設定:
op.pattern('UniformExcitation', 1, 1, '-accel', 1)

一様励振(Uniform Excitation)パターンを荷重パターンとして設定し、入力した構造モデル全体を対象に加振します。ここでは全体座標系X方向に、2で定義した時刻歴荷重データを加速度として入力し加振する設定となっています。

4.時刻歴応答解析の準備:

op.wipeAnalysis()
op.algorithm('RaphsonNewton')
op.system('BandGen')
op.constraints('Plain')
op.integrator('Newmark', 0.5, 0.25,'A')
op.analysis('Transient')

これらの行では、時刻歴応答解析のための設定を行っています。

  • wipeAnalysis() では以前の解析設定をクリアしています。(ここでは以前の解析設定はありませんが、念のため定義します。)
  • algorithm('RaphsonNewton') では、非線形問題を解く際のアルゴリズムを選択定義します。ここではニュートンラプソン法を用いた解法を選択しています。
  • system('BandGen') は、連立方程式を解くための線形ソルバーを定義します。ここでは、とりあえずBandGeneralを定義しています。
  • constraints('Plain') で、制約条件を定義します。
  • integrator('Newmark', 0.5, 0.25,'A') では解析における積分手法を定義しています。ここでは、Newmark、γ=0.5、β=0.25をそれぞれ指定することで、平均加速度法を用いることを定義しています。この手法は通常の動的解析で広く用いられます。
  • analysis('Transient') ではどのような解析を行うかを定義します。Transient Analysisを指定し、時刻歴荷重の入力を想定した時間変化を考慮した解析を行う準備をしています。時刻歴解析を行うことから、結果も時刻歴で出力されることになり、解析結果を記録するコードを書く必要があり、後ほど説明します。
全体として、このコードは地震応答解析の初期設定を行い、地震などの外力に対する構造物の応答を計算するための準備をしています。ここまでで構造モデルと時刻歴解析の荷重条件、解析条件が定義できましたので次は解析を実行し結果を見ていきます。