squid_n_core/model/hysteresis.rs
1//! 部材の履歴則(復元力特性)の型。
2//!
3//! - [`HysteresisModel`] — 履歴則の種別(武田型・標準型等)。
4//! - [`default_member_hysteresis`] — 構造種別ごとの既定履歴則。
5//! - [`MemberHysteresisAttr`] — 部材個別の履歴則指定。
6
7use super::*;
8
9/// 部材の復元力特性(履歴則)。各履歴則の原典(武田モデル等)に基づく
10/// 履歴特性で、既定の非線形特性は本実装の既定として与える。
11/// 材端集中バネ(`ConcentratedSpringBeam`)の曲げ履歴に適用され、`Auto` は
12/// 構造種別ごとの既定([`default_member_hysteresis`])へ解決される。
13#[derive(Clone, Copy, Debug, PartialEq, Eq, Default, serde::Serialize, serde::Deserialize)]
14pub enum HysteresisModel {
15 /// 既定(構造種別で自動判定: RC/SRC/CFT=武田型、S=標準型)。
16 #[default]
17 Auto,
18 /// 逆行型(常にスケルトン上、履歴ループなし)。
19 Retrograde,
20 /// 標準型(Masing 則。除荷開始剛性=初期剛性)。
21 Standard,
22 /// 原点指向型(除荷・再載荷は原点指向の割線)。
23 OriginOriented,
24 /// 最大点指向型(Clough 系。反対側の最大経験点を指向)。
25 MaxPointOriented,
26 /// 武田型(剛性低下型トリリニア。RC/SRC/CFT 梁の既定)。
27 Takeda,
28 /// 辻・山田型(バイリニア+β 混合硬化。座屈補剛ブレース等)。
29 TsujiYamada,
30 /// 鉄骨大梁の座屈考慮履歴(耐力劣化型+RO 除荷。局部/横/連成座屈)。
31 SteelBuckling,
32 /// Karsan–Jirsa 型(Yassin 1994 / Concrete02 系。残留塑性ひずみを通る割線
33 /// 除荷・ひび割れ開閉。ファイバー断面・MS のコンクリートの時刻歴既定)。
34 KarsanJirsa,
35}
36
37impl HysteresisModel {
38 /// 表示用の日本語名。
39 pub fn label(&self) -> &'static str {
40 match self {
41 HysteresisModel::Auto => "自動",
42 HysteresisModel::Retrograde => "逆行型",
43 HysteresisModel::Standard => "標準型",
44 HysteresisModel::OriginOriented => "原点指向型",
45 HysteresisModel::MaxPointOriented => "最大点指向型",
46 HysteresisModel::Takeda => "武田型",
47 HysteresisModel::TsujiYamada => "辻・山田型",
48 HysteresisModel::SteelBuckling => "座屈考慮型",
49 HysteresisModel::KarsanJirsa => "Karsan-Jirsa型",
50 }
51 }
52
53 /// UI・列挙用の全候補。
54 pub const ALL: [HysteresisModel; 9] = [
55 HysteresisModel::Auto,
56 HysteresisModel::Retrograde,
57 HysteresisModel::Standard,
58 HysteresisModel::OriginOriented,
59 HysteresisModel::MaxPointOriented,
60 HysteresisModel::Takeda,
61 HysteresisModel::TsujiYamada,
62 HysteresisModel::SteelBuckling,
63 HysteresisModel::KarsanJirsa,
64 ];
65}
66
67/// 非線形解析の種別。履歴則の既定(`Auto` の解決先)と、部材個別指定の
68/// どちらのスロット(増分用/時刻歴用)を参照するかの切替に用いる。
69#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
70pub enum AnalysisKind {
71 /// 増分解析(保有水平耐力計算・プッシュオーバー)。
72 Incremental,
73 /// 時刻歴応答解析(非線形動的解析)。
74 TimeHistory,
75}
76
77/// 既定の部材曲げ履歴則(本実装の既定の非線形特性。各履歴則の原典による)。
78/// 材端集中バネの曲げは **RC/SRC/CFT 造=武田型(トリリニア)**、
79/// **S 造=標準型(バイリニア)** を既定とする(増分・時刻歴共通)。
80/// ブレースの軸は S 造=標準型。`rc_like` は RC/SRC/CFT(コンクリート系)か否か。
81pub fn default_member_hysteresis(rc_like: bool) -> HysteresisModel {
82 if rc_like {
83 HysteresisModel::Takeda
84 } else {
85 HysteresisModel::Standard
86 }
87}
88
89/// ファイバー断面・MS 要素のコンクリート除荷則の既定。
90/// - 増分解析: 逆行型(除荷が稀で骨格追従が主目的のため、包絡線を可逆に辿る)
91/// - 時刻歴応答解析: Karsan–Jirsa 型(Yassin 1994。残留塑性ひずみ・ひび割れ開閉を
92/// 表現し、履歴吸収エネルギーの評価が原点指向型より現実的)
93pub fn default_fiber_concrete_hysteresis(kind: AnalysisKind) -> HysteresisModel {
94 match kind {
95 AnalysisKind::Incremental => HysteresisModel::Retrograde,
96 AnalysisKind::TimeHistory => HysteresisModel::KarsanJirsa,
97 }
98}
99
100/// 部材の履歴則の指定(要素 ID と履歴則の対。`Model::member_hysteresis_attrs`)。
101/// 各履歴則の原典による履歴特性。既定(Auto)と異なる履歴則を
102/// 部材個別に指定する場合に用いる。
103///
104/// 増分解析用(`rule`)と時刻歴応答解析用(`rule_th`)を別々に指定できる。
105/// `rule_th = None` は「時刻歴も増分用と同じ指定に従う」(旧形式のファイルは
106/// この解釈で読み込まれ、従来と同じ挙動になる)。
107#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
108pub struct MemberHysteresisAttr {
109 pub elem: ElemId,
110 /// 増分解析(保有水平耐力計算)用の履歴則。
111 pub rule: HysteresisModel,
112 /// 時刻歴応答解析用の履歴則(`None` = 増分用と同じ)。
113 #[serde(default)]
114 pub rule_th: Option<HysteresisModel>,
115}