English | 日本語
Newmarkのβ法により1質点系の地震応答解析を行います。 地震の加速度波形から、応答変位、応答速度、応答加速度、絶対応答加速度を求められます。
地震応答解析を行うことが目的であればこのクレートのwasmバージョンを使用して実装された計算サイト を利用することもできます。
use csv::Reader;
use crate::{ResponseAccAnalyzer, ResponseAccAnalyzerParams};
fn example() {
let mut csv = Reader::from_path("benches/seismic_acc_waveform.csv").unwrap();
let data = csv.deserialize::<f64>().map(|x| x.unwrap()).collect::<Vec<_>>();
let params = ResponseAccAnalyzerParams {
// 固有周期 [ms]
natural_period_ms: 500,
// 入力加速度波形の時間刻み [ms]
dt_ms: 10,
// 減衰定数
damping_h: 0.05,
// Newmarkのβ法のβ
beta: 0.25,
// 初期応答変位 [m]
init_x: 0.0,
// 初期応答速度 [m/s]
init_v: 0.0,
// 初期応答加速度 [gal]
init_a: 0.0,
// 初期応答入力加速度 [gal]
init_xg: 0.0,
};
let analyzer = ResponseAccAnalyzer::from_params(params);
let result: Result = analyzer.analyze(&data);
// struct Result {
// /// 応答変位 [m]
// pub x: Vec<f64>,
// /// 応答速度 [m/s]
// pub v: Vec<f64>,
// /// 応答加速度 [gal]
// pub a: Vec<f64>,
// /// 絶対応答加速度 [gal]
// pub abs_acc: Vec<f64>,
// }
}
このプログラムはnpmパッケージとしてnpmに公開されています。 Rustのクレートと同様に使用できます。
このプログラムは、次の数式に基づいて実装されています。
質量 $ m $ とミリ秒単位の固有周期 $ T_{\text{ms}} $ に基づいて剛性係数 $ k $ を計算します:
減衰定数 $ h $、質量 $ m $、および剛性係数 $ k $ に基づいて減衰係数 $ c $ を計算します:
次のステップの加速度 $ a_{n+1} $ を計算します:
ここで、外力 $ p_{n+1} $ は次のように与えられます:
次のステップの速度 $ v_{n+1} $ を計算します:
次のステップの変位 $ x_{n+1} $ を計算します:
最終的な絶対応答加速度 $ a_{\text{abs}} $ を計算します:
以上が、プログラム内で実装されている主要な計算式です。
Note
ここの数式では質量 $ m $を変数として扱っていますが、実際のプログラムでは質量1として計算しています。 これは、質量が絶対応答加速度に影響を与えないためです。 このことは、ドキュメント内のテストコードで確認できます。
以下のいずれかの下でライセンスされています。
- Apache License, Version 2.0, (LICENSE-APACHE または http://www.apache.org/licenses/LICENSE-2.0)
- MITライセンス(LICENSE-MITまたは http://opensource.org/licenses/MIT)
(ドキュメンテーションコメント及びREADMEファイルの英語はDeepLとChatGPTにより翻訳されています。)