OpenSeesPyにおける節点への強制加振

 これまで、Openseespyでは解析モデルの全節点に一様に加振するUniform Excitationコマンドを使って、地震波形を入力した地震応答解析を行ってきました。このコマンドにより、モデル構造物の全節点に入力加速度波形を反映した慣性力が与えられ、地震時に構造物が受ける外力と同様の条件を再現できます。

 一方で、例えば杭などの地中構造物の動的挙動を詳細に調べるため、特定の節点だけに強制変位・強制速度・強制加速度を与える解析を行いたい場合もあります。こうした荷重条件を想定した解析も、Openseespyで実施可能です。今回は特定節点への強制載荷解析について、そのポイントを少し考えてみます。



 実際に多質点モデルで特定節点を加振する場合、OpenseesPyではMulti-Support Excitation Patternコマンドが利用できます。例えば、UniformExcitationによる解析と同様に地震動の入力を再現しようとするため、多質点モデルの基部節点(節点1)のみに強制加速度を与えたいときは、モデル載荷時に以下のように記述することで実行できます。

#unit
m_inch=39.3700787#単位系m→inchへの変換
kN_pond=0.22480894387096#kN→kips
g = 386.0885827#acceleration of gravity(in/s2)
ratio = 0.393700787 #cm/s2→in/s2
#basic
op.wipe()
op.model('basic', '-ndm', 2) #2D3dof

# 節点座標の定義
op.node(1,0,0*m_inch) #節点1の座標設定(節点番号,x座標,y座標)
.....

#boundary 基礎固定
op.fix(1,1,1,1)
.....
#各層の質量を設定, op.mass(2,12000*kN_pond/g,12000*kN_pond/g,0) ..... #弾性要素の設定 op.uniaxialMaterial("Elastic", 11, 5500/(3.200*1/830)*kN_pond/(m_inch)) op.element("zeroLength", 11, 1, 2,"-mat", 11,"-dir", 1) ..... #地動加振の設定 op.timeSeries('Path', 1, '-dt', dt_analysis, '-values', *acc_analysis*-ratio) #節点1への強制加振の実行コマンド op.pattern('MultipleSupport',1) op.groundMotion(1, 'Plain', '-accel', 1, '-int', 'Trapezoidal') op.imposedMotion(1,1,1)

 上記のコマンドではモデルに関する記述は省略しています。モデルのコマンド記述後、timeSeriesコマンドで入力波形を指定し、載荷パターンを設定するPattern commandsの一つであるMulti-Support Excitation Patternを定義します。さらにgroundMotionコマンドとimposedMotionコマンドを用いて、モデルの節点1にX方向の加速度としてtimeSeriesで指定した入力波形を与えています。後ほど説明しますが、強制加振解析で節点加振を行う場合、基本的に変位入力が基本となることから、入力加速度波形より、入力速度、変位波形を内部積分して算出し、その数値積分方法として'Trapezoidal'(台形積分)を使用するように定義しています。

 この加振によって得られた結果を見てみます。

 強制加振時の基部節点の応答値を確認すると、入力波形で加振しているため当然ながら応答加速度は入力地震波の最大加速度と一致していました。一方で、応答変位は数十メートルという現実的ではない過大な値にドリフトしており、OpenSeesPy内部での台形積分による波形の内部積分がうまく機能していない可能性があることが分かります。

 一方で、Uniform Excitationコマンドにより、同様の加速度を入力した解析を実行した場合の結果を同様に見てみると以下の通りとなります。

 上記はプロットのミスではなく、全てゼロになっているのです。Uniform Excitationコマンドによる地動加振では、解析上すべての節点に同じ加速度波形が一様に入力されていますが、その応答値は加速度も含め、入力加速度の影響を除いた相対値として出力されていることがわかります。一方、Multi-Support Excitation Patternコマンドでは、ある節点のみに応答波形を入力する解析を実施していることから、得られる応答加速度は入力加速度と一致しており、応答値は絶対値として出力されていることがわかります。

 さて、先ほどの強制加振における変位の話に戻ります。動的問題で特定の節点を強制加振する場合、加速度波形に加え、速度や変位波形も同時に与える必要があります。今回は節点への入力加速度しか与えていなかったため、Openseespy内部で加速度波形を数値積分し、速度や変位波形を算定していました。

 しかし、特に変位波形では、加速度波形の積分時に長周期成分のドリフトなどが除去できていないと、数値積分の過程でさきほどのように非常に大きな値になってしまいます。そのため、正確な結果を得るには、内部積分による入力波形の誤差を事前に除去しておく必要があります。

 そこで、プログラム外で波形の長周期成分をフィルタリングし、基線補正を行ったうえで波形積分を実施し、入力速度や入力変位波形をプログラムの外部で改めて算定してみます。


 図から、速度波形と変位波形の両方で補正前に比べてドリフトがかなり抑えられていることがわかります。そこで、強制加振解析では、以下のコマンドを使って入力加速度波形に加え、補正後の入力速度と入力変位波形も基部の節点に同時に入力して解析を実行してみます。

#地動加振の設定
op.timeSeries('Path', 1, '-dt', dt_analysis, '-values', *acc_analysis*-ratio) #加速度波形
op.timeSeries('Path', 2, '-dt', dt_analysis, '-values', *vel_analysis*-ratio) #速度波形
op.timeSeries('Path', 3, '-dt', dt_analysis, '-values', *disp_analysis*-ratio) #変位波形

#基部節点への強制加振
op.pattern('MultipleSupport',1) 
op.groundMotion(1, 'Plain', '-accel', 1, '-int', 'Trapezoidal')
op.groundMotion(2, 'Plain', '-vel', 2, '-int', 'Trapezoidal')
op.groundMotion(3, 'Plain', '-disp', 3, '-int', 'Trapezoidal')
op.imposedMotion(1,1,1) #節点1(基部節点)へのX方向加速度入力
op.imposedMotion(1,1,2) #節点1(基部節点)へのX方向速度入力
op.imposedMotion(1,1,3) #節点1(基部節点)へのX方向変位入力

 上記のコマンドを実行した場合、まず基部節点の応答値をみてみますと以下の通りとなります。


 図をみると、コマンド上では加速度・速度・変位を同時に入力しているにもかかわらず、モデル基部の節点には応答変位しか出ていないことがわかります。これはMulti-Support Excitation Patternコマンドによる強制加振が基本的に変位ベースで行われるためです。つまり、OpenSeesPyであらかじめ入力加速度、速度、変位波形を同時に指定していた場合でも、入力変位波形が優先的に使われることになるといえます。したがって、強制加振解析で精度を高めたい場合は、変位波形を優先して入力するのが望ましいということになります。
 
 最後に、上記によるモデル基部への強制変位加振(Multi-Support Excitation)と、一様加振(Uniform Excitation)をした場合の各層の応答値を比較してみます。一様加振をした場合は基部に応答変位が生じているので、基部の変位の影響を除いた相対値で記述します。この2つの解析は載荷する方法(基部の変位加振or全節点慣性力)が違うだけで、本質的には同じ状態を再現することを試みた解析であるため、結果が一致することが望ましいはずです。


 図より、応答のオーダー感は一致していますが、最大加速度、速度応答はやや差が大きいです。これは入力変位を加速度波形を積分して得る過程で出た積分誤差などに起因していると考えられます。

 上記で紹介したコマンドを使えば、例えば地中の杭の各節点にそれぞれの深さに応じた地動応答を与える解析なども可能で、より精密な杭の応答解析に活用できます。