4个版本 (2个破坏性更新)
0.3.0 | 2024年6月2日 |
---|---|
0.2.1 | 2024年5月25日 |
0.2.0 | 2024年5月25日 |
0.1.0 | 2024年5月21日 |
#289 in 数学
每月下载量:187次
23KB
153 行
英语 | 日语
地震响应
使用Newmark的β方法,我们将对单自由度(SDOF)系统进行地震响应分析。从地震加速度波形中,我们可以确定响应位移、响应速度、响应加速度和绝对响应加速度。
要进行地震响应分析,您可以使用使用此crate的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 {
// Natural period [ms]
natural_period_ms: 500,
// Time step of the input acceleration waveform [ms]
dt_ms: 10,
// Damping ratio
damping_h: 0.05,
// Newmark's β method parameter
beta: 0.25,
// Initial response displacement [m]
init_x: 0.0,
// Initial response velocity [m/s]
init_v: 0.0,
// Initial response acceleration [gal]
init_a: 0.0,
// Initial input acceleration [gal]
init_xg: 0.0,
};
let analyzer = ResponseAccAnalyzer::from_params(params);
let result: Result = analyzer.analyze(data);
// struct Result {
// /// Response displacement [m]
// pub x: Vec<f64>,
// /// Response velocity [m/s]
// pub v: Vec<f64>,
// /// Response acceleration [gal]
// pub a: Vec<f64>,
// /// Absolute response acceleration [gal]
// pub abs_acc: Vec<f64>,
// }
}
WebAssembly
该程序作为npm包发布。它可以像Rust crate一样使用。
数学公式
该程序基于以下公式实现
刚度系数
刚度系数(k)根据质量(m)和自然周期(T_{\text{ms}})以毫秒为单位计算
$$ k = \frac{4 \pi^2 m}{\left(\frac{T_{\text{ms}}}{1000}\right)^2} $$
阻尼系数
阻尼系数(c)根据阻尼比(h)、质量(m)和刚度系数(k)计算
$$ c = 2h\sqrt{km} $$
逐步计算
响应加速度
下一步的加速度(a_{n+1})计算如下
$$ a_{n+1} = \frac{p_{n+1} - c\left(v_n + \frac{\Delta t}{2}a_n\right) - k\left(x_n + \Delta t v_n + \left(\frac{1}{2} - \beta\right)\Delta t^2 a_n\right)}{m + \frac{\Delta t}{2}c + \beta \Delta t^2 k} $$
这里,外力(p_{n+1})给出为
$$ p_{n+1} = -xg_{n+1} m $$
响应速度
下一步的速度(v_{n+1})计算如下
$$ v_{n+1} = v_n + \frac{\Delta t}{2}(a_n + a_{n+1}) $$
响应位移
下一步的位移(x_{n+1})计算如下
$$ x_{n+1} = x_n + \Delta t v_n + \left(\frac{1}{2} - \beta\right) \Delta t^2 a_n + \beta \Delta t^2 a_{n+1} $$
绝对响应加速度
最终的绝对响应加速度(a_{\text{abs}})计算如下
$$ a_{\text{abs}} = a + xg $$
这些是程序中实现的主要计算。
注意:虽然这里公式将质量(m)视为变量,但实际上程序计算时假设质量为1。这是因为质量不影响绝对响应加速度。这可以在文档中的测试代码中得到证实。
许可协议
以下任一许可协议下获得许可
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
(文档注释和 README 文件翻译由 DeepL 和 ChatGPT 提供。)
依赖项
~1.1–2MB
~38K SLoC