Skip to main content

squid_n_core/model/
stress_cfg.rs

1//! 応力解析の計算条件の型。
2//!
3//! - [`StressAnalysisCfg`] — 長期応力解析の計算条件(令82条)。
4
5/// 長期応力解析の計算条件(令82条の応力解析)。
6///
7/// 計算条件の指定により、一部の部材(ブレース・柱・制振間柱)について
8/// 長期軸力を負担させないことが可能である。
9///
10/// 制振間柱(damper-equipped mullion column)は本リポジトリに要素種別が未実装のため、
11/// 対象外(既知の制約)。ブレースと柱(鉛直部材)のみ対応する。
12#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
13pub struct StressAnalysisCfg {
14    /// 長期応力解析でブレース(`ElementKind::Brace`)に軸力を負担させない。
15    pub no_long_axial_brace: bool,
16    /// 長期応力解析で柱(鉛直な `ElementKind::Beam`)に軸力を負担させない。
17    pub no_long_axial_column: bool,
18    /// 剛性率・偏心率算定時の雑壁剛性の n 倍法係数(雑壁の剛性評価。RC 規準。
19    /// `Kw' = n·Aw'·ΣKc/ΣAc` の n。入力値)。`None` は雑壁剛性を考慮しない。
20    #[serde(default)]
21    pub misc_wall_n: Option<f64>,
22    /// 層間変形角の制限値の分母(令82条の2)。原則 200(1/200)。帳壁・仕上げ等に
23    /// 著しい損傷の恐れがない場合は 120(1/120)へ緩和できる。
24    #[serde(default = "default_drift_limit_denom")]
25    pub drift_limit_denom: f64,
26    /// 線形(弾性)応力解析で引張専用ブレースを active-set 反復で扱うか。
27    ///
28    /// `false`(既定): 引張専用ブレースは「引張・圧縮が対で存在する」とみなし、
29    /// 弾性剛性を 1/2 にした一括解析で1回だけ解く(従来挙動)。
30    /// `true`: 圧縮側に入ったブレースを無効化しながら収束するまで再解析する
31    /// 真の引張専用解析を行う(active な引張ブレースは全剛性 EA/L を負担し、
32    /// 圧縮ブレースは軸力を負担しない)。
33    #[serde(default)]
34    pub tension_only_iteration: bool,
35    /// 剛域の算定で、部材フェース・部材せいに取り付く壁を考慮するか(技術基準
36    /// 「剛域の計算」。既定は考慮する)。
37    ///
38    /// `true`(既定): 柱には袖壁、梁には腰壁・垂壁を含めた寸法で算定する。
39    /// 対象は現場打ちコンクリート壁で厚さ 100 mm 以上のもの(耐震壁・雑壁を問わない)。
40    /// `false`: 部材の原断面だけで算定する。
41    #[serde(default = "default_rigid_zone_consider_walls")]
42    pub rigid_zone_consider_walls: bool,
43}
44
45fn default_rigid_zone_consider_walls() -> bool {
46    true
47}
48
49fn default_drift_limit_denom() -> f64 {
50    200.0
51}
52
53impl Default for StressAnalysisCfg {
54    fn default() -> Self {
55        StressAnalysisCfg {
56            no_long_axial_brace: false,
57            no_long_axial_column: false,
58            misc_wall_n: None,
59            drift_limit_denom: default_drift_limit_denom(),
60            tension_only_iteration: false,
61            rigid_zone_consider_walls: default_rigid_zone_consider_walls(),
62        }
63    }
64}