pub struct ShapeMemoryAlloy {
pub ms: f64,
pub mf: f64,
pub as_: f64,
pub af: f64,
pub e_austenite: f64,
pub e_martensite: f64,
pub h_max: f64,
}Expand description
Thermomechanical model of a shape memory alloy.
Transformation temperatures are in kelvin (K); stresses in pascal (Pa); elastic moduli in pascal (Pa); strains dimensionless.
The martensite fraction ξ ∈ [0, 1] describes the phase state:
- ξ = 1 → fully martensitic
- ξ = 0 → fully austenitic
Fields§
§ms: f64Martensite start temperature (Ms) in K.
mf: f64Martensite finish temperature (Mf) in K.
as_: f64Austenite start temperature (As) in K.
af: f64Austenite finish temperature (Af) in K.
e_austenite: f64Elastic modulus of the austenite phase in Pa.
e_martensite: f64Elastic modulus of the martensite phase in Pa.
h_max: f64Maximum recoverable (transformation) strain ε_L (dimensionless).
Implementations§
Source§impl ShapeMemoryAlloy
impl ShapeMemoryAlloy
Sourcepub fn new(
ms: f64,
mf: f64,
as_: f64,
af: f64,
e_austenite: f64,
e_martensite: f64,
h_max: f64,
) -> Self
pub fn new( ms: f64, mf: f64, as_: f64, af: f64, e_austenite: f64, e_martensite: f64, h_max: f64, ) -> Self
Create a new SMA model with the given transformation temperatures and elastic moduli.
§Parameters
ms– martensite start temperature [K]mf– martensite finish temperature [K]as_– austenite start temperature [K]af– austenite finish temperature [K]e_austenite– austenite elastic modulus [Pa]e_martensite– martensite elastic modulus [Pa]h_max– maximum transformation strain
Sourcepub fn new_nitinol() -> Self
pub fn new_nitinol() -> Self
Create a standard Nitinol (NiTi) SMA with typical reported parameters.
- Ms = 291 K, Mf = 273 K, As = 307 K, Af = 325 K
- E_A = 75 GPa, E_M = 28 GPa, ε_L = 0.08
Sourcepub fn nitinol() -> Self
pub fn nitinol() -> Self
Alias for new_nitinol.
Sourcepub fn phase_fraction(&self, temp: f64, stress: f64) -> f64
pub fn phase_fraction(&self, temp: f64, stress: f64) -> f64
Martensite volume fraction ξ for the given temperature and stress.
Uses the Liang-Rogers cosine model:
- Cooling (martensitic): ξ = 0.5 · cos(π · (T − Mf)/(Ms − Mf)) + 0.5
- Heating (austenitic): ξ = 0.5 · cos(π · (T − As)/(Af − As)) + 0.5 (then 1 − value)
The stress shifts the transformation temperatures via the Clausius-Clapeyron slope (~10 MPa/K for NiTi).
Sourcepub fn elastic_modulus(&self, xi: f64) -> f64
pub fn elastic_modulus(&self, xi: f64) -> f64
Effective elastic modulus at a given martensite fraction ξ.
Uses the rule of mixtures: E(ξ) = E_A + ξ · (E_M − E_A).
Sourcepub fn constitutive_response(&self, strain: f64, temp: f64) -> f64
pub fn constitutive_response(&self, strain: f64, temp: f64) -> f64
One-dimensional constitutive stress response (Pa) for a given mechanical strain and temperature.
σ = E(ξ) · ε − E(ξ) · ε_L · ξ
Sourcepub fn recovery_strain(&self, xi_start: f64, xi_end: f64) -> f64
pub fn recovery_strain(&self, xi_start: f64, xi_end: f64) -> f64
Recoverable strain between two martensite fraction states.
Δε = h_max · (ξ_start − ξ_end)
Sourcepub fn critical_stress(&self, temp: f64) -> f64
pub fn critical_stress(&self, temp: f64) -> f64
Critical transformation stress at a given temperature.
Uses the Clausius-Clapeyron relation:
σ_cr = C_M · (T − Ms) for T > Ms (stress-induced martensite).
Returns 0 for T ≤ Ms.
Trait Implementations§
Source§impl Clone for ShapeMemoryAlloy
impl Clone for ShapeMemoryAlloy
Source§fn clone(&self) -> ShapeMemoryAlloy
fn clone(&self) -> ShapeMemoryAlloy
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more