delta-theory 6.9.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- apps/__init__.py +6 -0
- apps/delta_fatigue_app.py +337 -0
- core/Universal_Lindemann.py +422 -0
- core/__init__.py +35 -0
- core/dbt_unified.py +690 -0
- core/materials.py +688 -0
- core/unified_yield_fatigue_v6_9.py +762 -0
- delta_theory-6.9.0.dist-info/METADATA +640 -0
- delta_theory-6.9.0.dist-info/RECORD +15 -0
- delta_theory-6.9.0.dist-info/WHEEL +5 -0
- delta_theory-6.9.0.dist-info/entry_points.txt +3 -0
- delta_theory-6.9.0.dist-info/licenses/LICENSE +26 -0
- delta_theory-6.9.0.dist-info/top_level.txt +3 -0
- validation/__init__.py +10 -0
- validation/fatigue_redis_api.py +334 -0
core/materials.py
ADDED
|
@@ -0,0 +1,688 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
================================================================================
|
|
4
|
+
materials.py - 統合材料データベース
|
|
5
|
+
================================================================================
|
|
6
|
+
|
|
7
|
+
δ理論で使用する全材料パラメータを一元管理
|
|
8
|
+
|
|
9
|
+
統合元:
|
|
10
|
+
- materials.py (MaterialGPU)
|
|
11
|
+
- unified_yield_fatigue_v6_9.py (Material + MATERIALS)
|
|
12
|
+
- dbt_unified.py (Material + MATERIAL_FE)
|
|
13
|
+
- delta_fatigue_app.py (MATERIAL_DB)
|
|
14
|
+
|
|
15
|
+
Author: 環 & ご主人さま (飯泉真道)
|
|
16
|
+
Date: 2026-02-02
|
|
17
|
+
================================================================================
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from dataclasses import dataclass, field
|
|
23
|
+
from typing import ClassVar, Dict, List, Literal, Optional
|
|
24
|
+
import numpy as np
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# ==============================================================================
|
|
28
|
+
# 物理定数
|
|
29
|
+
# ==============================================================================
|
|
30
|
+
eV_to_J: float = 1.602176634e-19 # 1 eV in Joule
|
|
31
|
+
k_B: float = 1.380649e-23 # Boltzmann constant [J/K]
|
|
32
|
+
PI: float = np.pi
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# ==============================================================================
|
|
36
|
+
# 構造プリセット(BCC/FCC/HCP)
|
|
37
|
+
# ==============================================================================
|
|
38
|
+
@dataclass(frozen=True)
|
|
39
|
+
class StructurePreset:
|
|
40
|
+
"""結晶構造に依存するプリセット値"""
|
|
41
|
+
name: str
|
|
42
|
+
Z_bulk: int # バルク配位数
|
|
43
|
+
alpha0: float # 幾何係数 (δ理論)
|
|
44
|
+
M_taylor: float # Taylor因子
|
|
45
|
+
r_th: float # 疲労限度閾値
|
|
46
|
+
n_cl: float # Basquin指数
|
|
47
|
+
desc: str # 説明
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
STRUCTURE_PRESETS: Dict[str, StructurePreset] = {
|
|
51
|
+
"BCC": StructurePreset(
|
|
52
|
+
name="BCC",
|
|
53
|
+
Z_bulk=8,
|
|
54
|
+
alpha0=0.289,
|
|
55
|
+
M_taylor=3.0,
|
|
56
|
+
r_th=0.65,
|
|
57
|
+
n_cl=10.0,
|
|
58
|
+
desc="Body-Centered Cubic - 明確な疲労限度",
|
|
59
|
+
),
|
|
60
|
+
"FCC": StructurePreset(
|
|
61
|
+
name="FCC",
|
|
62
|
+
Z_bulk=12,
|
|
63
|
+
alpha0=0.250,
|
|
64
|
+
M_taylor=3.06,
|
|
65
|
+
r_th=0.02,
|
|
66
|
+
n_cl=7.0,
|
|
67
|
+
desc="Face-Centered Cubic - 疲労限度なし",
|
|
68
|
+
),
|
|
69
|
+
"HCP": StructurePreset(
|
|
70
|
+
name="HCP",
|
|
71
|
+
Z_bulk=12,
|
|
72
|
+
alpha0=0.350,
|
|
73
|
+
M_taylor=4.0,
|
|
74
|
+
r_th=0.20,
|
|
75
|
+
n_cl=9.0,
|
|
76
|
+
desc="Hexagonal Close-Packed - 中間的挙動",
|
|
77
|
+
),
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
# ==============================================================================
|
|
82
|
+
# 統合材料データクラス
|
|
83
|
+
# ==============================================================================
|
|
84
|
+
@dataclass
|
|
85
|
+
class Material:
|
|
86
|
+
"""
|
|
87
|
+
統合材料データベース
|
|
88
|
+
|
|
89
|
+
全てのδ理論モジュールで使用する材料パラメータを一元管理
|
|
90
|
+
|
|
91
|
+
カテゴリ:
|
|
92
|
+
[基本] 結晶構造、格子定数、弾性定数、熱物性
|
|
93
|
+
[δ理論] Lindemann閾値、結合エネルギー、d電子方向性
|
|
94
|
+
[τ/σ] せん断/引張比、双晶因子、圧縮/引張比
|
|
95
|
+
[粒界] 分離仕事、偏析エネルギー (DBT用)
|
|
96
|
+
[疲労] 熱軟化、Born崩壊、A_int (疲労用)
|
|
97
|
+
[表示] プロット色
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
# ==========================================================================
|
|
101
|
+
# [必須] デフォルト値なし(先に定義)
|
|
102
|
+
# ==========================================================================
|
|
103
|
+
name: str # 材料名 (Fe, Cu, Al, ...)
|
|
104
|
+
structure: Literal["BCC", "FCC", "HCP"] # 結晶構造
|
|
105
|
+
a: float # 格子定数 @ 300K [m]
|
|
106
|
+
T_m: float # 融点 [K]
|
|
107
|
+
E: float # ヤング率 [Pa]
|
|
108
|
+
nu: float # ポアソン比
|
|
109
|
+
rho: float # 密度 [kg/m³]
|
|
110
|
+
M_amu: float # 原子質量 [amu]
|
|
111
|
+
delta_L: float # Lindemann閾値
|
|
112
|
+
E_bond_eV: float # 結合エネルギー [eV]
|
|
113
|
+
f_d: float # d電子方向性係数
|
|
114
|
+
|
|
115
|
+
# ==========================================================================
|
|
116
|
+
# [オプション] デフォルト値あり
|
|
117
|
+
# ==========================================================================
|
|
118
|
+
# 熱物性
|
|
119
|
+
alpha_thermal: float = 1.5e-5 # 線膨張係数 [1/K]
|
|
120
|
+
|
|
121
|
+
# τ/σ (v6.9用)
|
|
122
|
+
c_a: float = 1.633 # HCP c/a比 (FCC/BCCは使わない)
|
|
123
|
+
T_twin: float = 1.0 # 双晶因子 (引張)
|
|
124
|
+
R_comp: float = 1.0 # 圧縮/引張 比 (σ_c/σ_t)
|
|
125
|
+
A_texture: float = 1.0 # 集合組織係数
|
|
126
|
+
|
|
127
|
+
# 粒界 (DBT用)
|
|
128
|
+
W_sep0: float = 2.0 # 基準分離仕事 [J/m²]
|
|
129
|
+
delta_sep: float = 0.2e-9 # 分離変位 [m]
|
|
130
|
+
E_seg_eV: float = 0.45 # 偏析エネルギー [eV] (Fe-P系デフォルト)
|
|
131
|
+
|
|
132
|
+
# 疲労
|
|
133
|
+
lambda_base: float = 25.0 # 熱軟化パラメータ
|
|
134
|
+
kappa: float = 1.0 # 非線形熱軟化係数
|
|
135
|
+
fG: float = 0.10 # Born崩壊係数 (融点での G/G₀)
|
|
136
|
+
A_int: float = 1.0 # 内部スケール (Fe=1.0基準)
|
|
137
|
+
|
|
138
|
+
# 表示
|
|
139
|
+
color: str = "#333333" # プロット色
|
|
140
|
+
|
|
141
|
+
# ==========================================================================
|
|
142
|
+
# 計算プロパティ
|
|
143
|
+
# ==========================================================================
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def preset(self) -> StructurePreset:
|
|
147
|
+
"""構造プリセットを取得"""
|
|
148
|
+
return STRUCTURE_PRESETS[self.structure]
|
|
149
|
+
|
|
150
|
+
@property
|
|
151
|
+
def Z_bulk(self) -> int:
|
|
152
|
+
"""バルク配位数"""
|
|
153
|
+
return self.preset.Z_bulk
|
|
154
|
+
|
|
155
|
+
@property
|
|
156
|
+
def alpha0(self) -> float:
|
|
157
|
+
"""幾何係数"""
|
|
158
|
+
return self.preset.alpha0
|
|
159
|
+
|
|
160
|
+
@property
|
|
161
|
+
def M_taylor(self) -> float:
|
|
162
|
+
"""Taylor因子"""
|
|
163
|
+
return self.preset.M_taylor
|
|
164
|
+
|
|
165
|
+
@property
|
|
166
|
+
def r_th(self) -> float:
|
|
167
|
+
"""疲労限度閾値"""
|
|
168
|
+
return self.preset.r_th
|
|
169
|
+
|
|
170
|
+
@property
|
|
171
|
+
def n_cl(self) -> float:
|
|
172
|
+
"""Basquin指数"""
|
|
173
|
+
return self.preset.n_cl
|
|
174
|
+
|
|
175
|
+
@property
|
|
176
|
+
def G(self) -> float:
|
|
177
|
+
"""剛性率 [Pa]"""
|
|
178
|
+
return self.E / (2 * (1 + self.nu))
|
|
179
|
+
|
|
180
|
+
@property
|
|
181
|
+
def b(self) -> float:
|
|
182
|
+
"""バーガースベクトル [m]"""
|
|
183
|
+
if self.structure == "BCC":
|
|
184
|
+
return self.a * np.sqrt(3) / 2
|
|
185
|
+
elif self.structure == "FCC":
|
|
186
|
+
return self.a / np.sqrt(2)
|
|
187
|
+
else: # HCP
|
|
188
|
+
return self.a
|
|
189
|
+
|
|
190
|
+
@property
|
|
191
|
+
def V_act(self) -> float:
|
|
192
|
+
"""活性化体積 [m³]"""
|
|
193
|
+
return self.b ** 3
|
|
194
|
+
|
|
195
|
+
@property
|
|
196
|
+
def E_eff(self) -> float:
|
|
197
|
+
"""有効結合エネルギー [J]"""
|
|
198
|
+
return self.E_bond_eV * eV_to_J * self.alpha0 * self.f_d
|
|
199
|
+
|
|
200
|
+
# ==========================================================================
|
|
201
|
+
# 表示
|
|
202
|
+
# ==========================================================================
|
|
203
|
+
|
|
204
|
+
def __str__(self) -> str:
|
|
205
|
+
return f"Material({self.name}, {self.structure}, T_m={self.T_m}K)"
|
|
206
|
+
|
|
207
|
+
def summary(self) -> str:
|
|
208
|
+
"""詳細サマリー"""
|
|
209
|
+
return f"""
|
|
210
|
+
{'='*60}
|
|
211
|
+
Material: {self.name} ({self.structure})
|
|
212
|
+
{'='*60}
|
|
213
|
+
[基本]
|
|
214
|
+
a = {self.a*1e10:.3f} Å
|
|
215
|
+
T_m = {self.T_m:.0f} K
|
|
216
|
+
E = {self.E/1e9:.0f} GPa
|
|
217
|
+
G = {self.G/1e9:.1f} GPa
|
|
218
|
+
ν = {self.nu}
|
|
219
|
+
ρ = {self.rho} kg/m³
|
|
220
|
+
|
|
221
|
+
[δ理論]
|
|
222
|
+
δ_L = {self.delta_L}
|
|
223
|
+
E_bond = {self.E_bond_eV} eV
|
|
224
|
+
f_d = {self.f_d}
|
|
225
|
+
α₀ = {self.alpha0} (preset)
|
|
226
|
+
b = {self.b*1e10:.3f} Å
|
|
227
|
+
|
|
228
|
+
[τ/σ]
|
|
229
|
+
T_twin = {self.T_twin}
|
|
230
|
+
R_comp = {self.R_comp}
|
|
231
|
+
A_texture = {self.A_texture}
|
|
232
|
+
|
|
233
|
+
[疲労]
|
|
234
|
+
r_th = {self.r_th} (preset)
|
|
235
|
+
n_cl = {self.n_cl} (preset)
|
|
236
|
+
A_int = {self.A_int}
|
|
237
|
+
λ_base = {self.lambda_base}
|
|
238
|
+
fG = {self.fG}
|
|
239
|
+
{'='*60}
|
|
240
|
+
"""
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# ==============================================================================
|
|
244
|
+
# 材料データベース
|
|
245
|
+
# ==============================================================================
|
|
246
|
+
|
|
247
|
+
# --------------------------------------------------------------------------
|
|
248
|
+
# BCC 金属
|
|
249
|
+
# --------------------------------------------------------------------------
|
|
250
|
+
|
|
251
|
+
Fe = Material(
|
|
252
|
+
name="Fe",
|
|
253
|
+
structure="BCC",
|
|
254
|
+
a=2.92e-10,
|
|
255
|
+
T_m=1811,
|
|
256
|
+
alpha_thermal=1.50e-5,
|
|
257
|
+
E=211e9,
|
|
258
|
+
nu=0.29,
|
|
259
|
+
rho=7870,
|
|
260
|
+
M_amu=55.845,
|
|
261
|
+
# δ理論
|
|
262
|
+
delta_L=0.18,
|
|
263
|
+
E_bond_eV=4.28,
|
|
264
|
+
f_d=1.5,
|
|
265
|
+
# τ/σ
|
|
266
|
+
T_twin=1.0,
|
|
267
|
+
R_comp=1.0,
|
|
268
|
+
# 粒界
|
|
269
|
+
W_sep0=2.0,
|
|
270
|
+
delta_sep=0.2e-9,
|
|
271
|
+
E_seg_eV=0.45,
|
|
272
|
+
# 疲労
|
|
273
|
+
lambda_base=49.2,
|
|
274
|
+
kappa=0.573,
|
|
275
|
+
fG=0.027,
|
|
276
|
+
A_int=1.0,
|
|
277
|
+
# 表示
|
|
278
|
+
color="#1f77b4",
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
W = Material(
|
|
282
|
+
name="W",
|
|
283
|
+
structure="BCC",
|
|
284
|
+
a=3.16e-10,
|
|
285
|
+
T_m=3695,
|
|
286
|
+
alpha_thermal=4.51e-6,
|
|
287
|
+
E=411e9,
|
|
288
|
+
nu=0.28,
|
|
289
|
+
rho=19300,
|
|
290
|
+
M_amu=183.84,
|
|
291
|
+
# δ理論
|
|
292
|
+
delta_L=0.16,
|
|
293
|
+
E_bond_eV=8.90,
|
|
294
|
+
f_d=4.7,
|
|
295
|
+
# τ/σ
|
|
296
|
+
T_twin=1.0,
|
|
297
|
+
R_comp=1.0,
|
|
298
|
+
# 疲労
|
|
299
|
+
lambda_base=10.9,
|
|
300
|
+
kappa=2.759,
|
|
301
|
+
fG=0.021,
|
|
302
|
+
A_int=0.85,
|
|
303
|
+
# 表示
|
|
304
|
+
color="#17becf",
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
# --------------------------------------------------------------------------
|
|
308
|
+
# FCC 金属
|
|
309
|
+
# --------------------------------------------------------------------------
|
|
310
|
+
|
|
311
|
+
Cu = Material(
|
|
312
|
+
name="Cu",
|
|
313
|
+
structure="FCC",
|
|
314
|
+
a=3.61e-10,
|
|
315
|
+
T_m=1357,
|
|
316
|
+
alpha_thermal=1.70e-5,
|
|
317
|
+
E=130e9,
|
|
318
|
+
nu=0.34,
|
|
319
|
+
rho=8960,
|
|
320
|
+
M_amu=63.546,
|
|
321
|
+
# δ理論
|
|
322
|
+
delta_L=0.10,
|
|
323
|
+
E_bond_eV=3.49,
|
|
324
|
+
f_d=2.0,
|
|
325
|
+
# τ/σ
|
|
326
|
+
T_twin=1.0,
|
|
327
|
+
R_comp=1.0,
|
|
328
|
+
# 疲労
|
|
329
|
+
lambda_base=26.3,
|
|
330
|
+
kappa=1.713,
|
|
331
|
+
fG=0.101,
|
|
332
|
+
A_int=1.41,
|
|
333
|
+
# 表示
|
|
334
|
+
color="#d62728",
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
Al = Material(
|
|
338
|
+
name="Al",
|
|
339
|
+
structure="FCC",
|
|
340
|
+
a=4.05e-10,
|
|
341
|
+
T_m=933,
|
|
342
|
+
alpha_thermal=2.30e-5,
|
|
343
|
+
E=70e9,
|
|
344
|
+
nu=0.35,
|
|
345
|
+
rho=2700,
|
|
346
|
+
M_amu=26.982,
|
|
347
|
+
# δ理論
|
|
348
|
+
delta_L=0.10,
|
|
349
|
+
E_bond_eV=3.39,
|
|
350
|
+
f_d=1.6,
|
|
351
|
+
# τ/σ
|
|
352
|
+
T_twin=1.0,
|
|
353
|
+
R_comp=1.0,
|
|
354
|
+
# 疲労
|
|
355
|
+
lambda_base=27.3,
|
|
356
|
+
kappa=4.180,
|
|
357
|
+
fG=0.101,
|
|
358
|
+
A_int=0.71,
|
|
359
|
+
# 表示
|
|
360
|
+
color="#2ca02c",
|
|
361
|
+
)
|
|
362
|
+
|
|
363
|
+
Ni = Material(
|
|
364
|
+
name="Ni",
|
|
365
|
+
structure="FCC",
|
|
366
|
+
a=3.52e-10,
|
|
367
|
+
T_m=1728,
|
|
368
|
+
alpha_thermal=1.30e-5,
|
|
369
|
+
E=200e9,
|
|
370
|
+
nu=0.31,
|
|
371
|
+
rho=8900,
|
|
372
|
+
M_amu=58.693,
|
|
373
|
+
# δ理論
|
|
374
|
+
delta_L=0.11,
|
|
375
|
+
E_bond_eV=4.44,
|
|
376
|
+
f_d=2.6,
|
|
377
|
+
# τ/σ
|
|
378
|
+
T_twin=1.0,
|
|
379
|
+
R_comp=1.0,
|
|
380
|
+
# 疲労
|
|
381
|
+
lambda_base=22.6,
|
|
382
|
+
kappa=0.279,
|
|
383
|
+
fG=0.092,
|
|
384
|
+
A_int=1.37,
|
|
385
|
+
# 表示
|
|
386
|
+
color="#ff7f0e",
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
Au = Material(
|
|
390
|
+
name="Au",
|
|
391
|
+
structure="FCC",
|
|
392
|
+
a=4.08e-10,
|
|
393
|
+
T_m=1337,
|
|
394
|
+
alpha_thermal=1.42e-5,
|
|
395
|
+
E=79e9,
|
|
396
|
+
nu=0.44,
|
|
397
|
+
rho=19300,
|
|
398
|
+
M_amu=196.967,
|
|
399
|
+
# δ理論
|
|
400
|
+
delta_L=0.10,
|
|
401
|
+
E_bond_eV=3.81,
|
|
402
|
+
f_d=1.1,
|
|
403
|
+
# τ/σ
|
|
404
|
+
T_twin=1.0,
|
|
405
|
+
R_comp=1.0,
|
|
406
|
+
# 疲労
|
|
407
|
+
lambda_base=25.0,
|
|
408
|
+
kappa=1.5,
|
|
409
|
+
fG=0.101,
|
|
410
|
+
A_int=1.0,
|
|
411
|
+
# 表示
|
|
412
|
+
color="#e377c2",
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
Ag = Material(
|
|
416
|
+
name="Ag",
|
|
417
|
+
structure="FCC",
|
|
418
|
+
a=4.09e-10,
|
|
419
|
+
T_m=1235,
|
|
420
|
+
alpha_thermal=1.89e-5,
|
|
421
|
+
E=83e9,
|
|
422
|
+
nu=0.37,
|
|
423
|
+
rho=10490,
|
|
424
|
+
M_amu=107.868,
|
|
425
|
+
# δ理論
|
|
426
|
+
delta_L=0.10,
|
|
427
|
+
E_bond_eV=2.95,
|
|
428
|
+
f_d=2.0,
|
|
429
|
+
# τ/σ
|
|
430
|
+
T_twin=1.0,
|
|
431
|
+
R_comp=1.0,
|
|
432
|
+
# 疲労
|
|
433
|
+
lambda_base=24.0,
|
|
434
|
+
kappa=1.8,
|
|
435
|
+
fG=0.101,
|
|
436
|
+
A_int=1.0,
|
|
437
|
+
# 表示
|
|
438
|
+
color="#bcbd22",
|
|
439
|
+
)
|
|
440
|
+
|
|
441
|
+
# --------------------------------------------------------------------------
|
|
442
|
+
# HCP 金属
|
|
443
|
+
# --------------------------------------------------------------------------
|
|
444
|
+
|
|
445
|
+
Ti = Material(
|
|
446
|
+
name="Ti",
|
|
447
|
+
structure="HCP",
|
|
448
|
+
a=2.95e-10,
|
|
449
|
+
T_m=1941,
|
|
450
|
+
alpha_thermal=8.60e-6,
|
|
451
|
+
E=116e9,
|
|
452
|
+
nu=0.32,
|
|
453
|
+
rho=4500,
|
|
454
|
+
M_amu=47.867,
|
|
455
|
+
# δ理論
|
|
456
|
+
delta_L=0.10,
|
|
457
|
+
E_bond_eV=4.85,
|
|
458
|
+
f_d=5.7,
|
|
459
|
+
# τ/σ
|
|
460
|
+
c_a=1.587,
|
|
461
|
+
T_twin=1.0,
|
|
462
|
+
R_comp=1.0,
|
|
463
|
+
# 疲労
|
|
464
|
+
lambda_base=43.1,
|
|
465
|
+
kappa=0.771,
|
|
466
|
+
fG=0.101,
|
|
467
|
+
A_int=1.10,
|
|
468
|
+
# 表示
|
|
469
|
+
color="#9467bd",
|
|
470
|
+
)
|
|
471
|
+
|
|
472
|
+
Mg = Material(
|
|
473
|
+
name="Mg",
|
|
474
|
+
structure="HCP",
|
|
475
|
+
a=3.21e-10,
|
|
476
|
+
T_m=923,
|
|
477
|
+
alpha_thermal=2.70e-5,
|
|
478
|
+
E=45e9,
|
|
479
|
+
nu=0.29,
|
|
480
|
+
rho=1740,
|
|
481
|
+
M_amu=24.305,
|
|
482
|
+
# δ理論
|
|
483
|
+
delta_L=0.117,
|
|
484
|
+
E_bond_eV=1.51,
|
|
485
|
+
f_d=8.2,
|
|
486
|
+
# τ/σ
|
|
487
|
+
c_a=1.624,
|
|
488
|
+
T_twin=0.6, # 双晶活性
|
|
489
|
+
R_comp=0.6, # 圧縮異方性
|
|
490
|
+
# 疲労
|
|
491
|
+
lambda_base=7.5,
|
|
492
|
+
kappa=37.568,
|
|
493
|
+
fG=0.082,
|
|
494
|
+
A_int=0.60,
|
|
495
|
+
# 表示
|
|
496
|
+
color="#8c564b",
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
Zn = Material(
|
|
500
|
+
name="Zn",
|
|
501
|
+
structure="HCP",
|
|
502
|
+
a=2.66e-10,
|
|
503
|
+
T_m=693,
|
|
504
|
+
alpha_thermal=3.02e-5,
|
|
505
|
+
E=108e9,
|
|
506
|
+
nu=0.25,
|
|
507
|
+
rho=7140,
|
|
508
|
+
M_amu=65.38,
|
|
509
|
+
# δ理論
|
|
510
|
+
delta_L=0.12,
|
|
511
|
+
E_bond_eV=1.35,
|
|
512
|
+
f_d=2.0,
|
|
513
|
+
# τ/σ
|
|
514
|
+
c_a=1.856,
|
|
515
|
+
T_twin=0.9,
|
|
516
|
+
R_comp=1.2,
|
|
517
|
+
# 疲労
|
|
518
|
+
lambda_base=15.0,
|
|
519
|
+
kappa=5.0,
|
|
520
|
+
fG=0.075,
|
|
521
|
+
A_int=0.75,
|
|
522
|
+
# 表示
|
|
523
|
+
color="#7f7f7f",
|
|
524
|
+
)
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
# ==============================================================================
|
|
528
|
+
# 材料データベース辞書
|
|
529
|
+
# ==============================================================================
|
|
530
|
+
|
|
531
|
+
MATERIALS: Dict[str, Material] = {
|
|
532
|
+
# BCC
|
|
533
|
+
"Fe": Fe, "Iron": Fe, "SECD": Fe,
|
|
534
|
+
"W": W, "Tungsten": W,
|
|
535
|
+
# FCC
|
|
536
|
+
"Cu": Cu, "Copper": Cu, "FCC_Cu": Cu,
|
|
537
|
+
"Al": Al, "Aluminum": Al,
|
|
538
|
+
"Ni": Ni, "Nickel": Ni,
|
|
539
|
+
"Au": Au, "Gold": Au,
|
|
540
|
+
"Ag": Ag, "Silver": Ag,
|
|
541
|
+
# HCP
|
|
542
|
+
"Ti": Ti, "Titanium": Ti,
|
|
543
|
+
"Mg": Mg, "Magnesium": Mg,
|
|
544
|
+
"Zn": Zn, "Zinc": Zn,
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
def get_material(name: str) -> Material:
|
|
549
|
+
"""名前から材料を取得"""
|
|
550
|
+
if name not in MATERIALS:
|
|
551
|
+
available = list_materials()
|
|
552
|
+
raise ValueError(f"Unknown material: {name}. Available: {available}")
|
|
553
|
+
return MATERIALS[name]
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
def list_materials() -> List[str]:
|
|
557
|
+
"""主要材料一覧"""
|
|
558
|
+
return ["Fe", "W", "Cu", "Al", "Ni", "Au", "Ag", "Ti", "Mg", "Zn"]
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
def list_by_structure(structure: str) -> List[str]:
|
|
562
|
+
"""構造別材料一覧"""
|
|
563
|
+
return [name for name in list_materials()
|
|
564
|
+
if MATERIALS[name].structure == structure]
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
# ==============================================================================
|
|
568
|
+
# 後方互換: MaterialGPU クラス (既存コードとの互換用)
|
|
569
|
+
# ==============================================================================
|
|
570
|
+
|
|
571
|
+
class MaterialGPU:
|
|
572
|
+
"""
|
|
573
|
+
後方互換用ラッパー
|
|
574
|
+
|
|
575
|
+
既存の materials.py を使用しているコードのために、
|
|
576
|
+
同じインターフェースを提供
|
|
577
|
+
"""
|
|
578
|
+
|
|
579
|
+
@classmethod
|
|
580
|
+
def Fe(cls) -> Material:
|
|
581
|
+
return Fe
|
|
582
|
+
|
|
583
|
+
@classmethod
|
|
584
|
+
def W(cls) -> Material:
|
|
585
|
+
return W
|
|
586
|
+
|
|
587
|
+
@classmethod
|
|
588
|
+
def Cu(cls) -> Material:
|
|
589
|
+
return Cu
|
|
590
|
+
|
|
591
|
+
@classmethod
|
|
592
|
+
def Al(cls) -> Material:
|
|
593
|
+
return Al
|
|
594
|
+
|
|
595
|
+
@classmethod
|
|
596
|
+
def Ni(cls) -> Material:
|
|
597
|
+
return Ni
|
|
598
|
+
|
|
599
|
+
@classmethod
|
|
600
|
+
def Au(cls) -> Material:
|
|
601
|
+
return Au
|
|
602
|
+
|
|
603
|
+
@classmethod
|
|
604
|
+
def Ag(cls) -> Material:
|
|
605
|
+
return Ag
|
|
606
|
+
|
|
607
|
+
@classmethod
|
|
608
|
+
def Ti(cls) -> Material:
|
|
609
|
+
return Ti
|
|
610
|
+
|
|
611
|
+
@classmethod
|
|
612
|
+
def Mg(cls) -> Material:
|
|
613
|
+
return Mg
|
|
614
|
+
|
|
615
|
+
@classmethod
|
|
616
|
+
def Zn(cls) -> Material:
|
|
617
|
+
return Zn
|
|
618
|
+
|
|
619
|
+
# エイリアス
|
|
620
|
+
@classmethod
|
|
621
|
+
def SECD(cls) -> Material:
|
|
622
|
+
return Fe
|
|
623
|
+
|
|
624
|
+
@classmethod
|
|
625
|
+
def Iron(cls) -> Material:
|
|
626
|
+
return Fe
|
|
627
|
+
|
|
628
|
+
@classmethod
|
|
629
|
+
def Copper(cls) -> Material:
|
|
630
|
+
return Cu
|
|
631
|
+
|
|
632
|
+
@classmethod
|
|
633
|
+
def Aluminum(cls) -> Material:
|
|
634
|
+
return Al
|
|
635
|
+
|
|
636
|
+
@classmethod
|
|
637
|
+
def FCC_Cu(cls) -> Material:
|
|
638
|
+
return Cu
|
|
639
|
+
|
|
640
|
+
@classmethod
|
|
641
|
+
def list_materials(cls) -> List[str]:
|
|
642
|
+
return list_materials()
|
|
643
|
+
|
|
644
|
+
@classmethod
|
|
645
|
+
def get(cls, name: str) -> Material:
|
|
646
|
+
return get_material(name)
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
# ==============================================================================
|
|
650
|
+
# テスト
|
|
651
|
+
# ==============================================================================
|
|
652
|
+
|
|
653
|
+
if __name__ == "__main__":
|
|
654
|
+
print("=" * 60)
|
|
655
|
+
print("統合材料データベース テスト")
|
|
656
|
+
print("=" * 60)
|
|
657
|
+
|
|
658
|
+
print("\n[利用可能な材料]")
|
|
659
|
+
print(f" 全体: {list_materials()}")
|
|
660
|
+
print(f" BCC: {list_by_structure('BCC')}")
|
|
661
|
+
print(f" FCC: {list_by_structure('FCC')}")
|
|
662
|
+
print(f" HCP: {list_by_structure('HCP')}")
|
|
663
|
+
|
|
664
|
+
print("\n[構造プリセット]")
|
|
665
|
+
for name, preset in STRUCTURE_PRESETS.items():
|
|
666
|
+
print(f" {name}: r_th={preset.r_th}, n_cl={preset.n_cl}, α₀={preset.alpha0}")
|
|
667
|
+
|
|
668
|
+
print("\n[材料サマリー: Fe]")
|
|
669
|
+
print(Fe.summary())
|
|
670
|
+
|
|
671
|
+
print("\n[材料サマリー: Cu]")
|
|
672
|
+
print(Cu.summary())
|
|
673
|
+
|
|
674
|
+
print("\n[材料サマリー: Mg]")
|
|
675
|
+
print(Mg.summary())
|
|
676
|
+
|
|
677
|
+
print("\n[計算プロパティ確認]")
|
|
678
|
+
for name in ["Fe", "Cu", "Ti"]:
|
|
679
|
+
mat = get_material(name)
|
|
680
|
+
print(f" {name}: b={mat.b*1e10:.3f}Å, G={mat.G/1e9:.1f}GPa, "
|
|
681
|
+
f"V_act={mat.V_act*1e30:.3f}ų")
|
|
682
|
+
|
|
683
|
+
print("\n[後方互換テスト]")
|
|
684
|
+
mat_gpu = MaterialGPU.get("Fe")
|
|
685
|
+
print(f" MaterialGPU.get('Fe'): {mat_gpu}")
|
|
686
|
+
print(f" MaterialGPU.Fe(): {MaterialGPU.Fe()}")
|
|
687
|
+
|
|
688
|
+
print("\n✅ テスト完了!")
|