Skip to main content

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}