Skip to main content

ShapeMemoryAlloy

Struct ShapeMemoryAlloy 

Source
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: f64

Martensite start temperature (Ms) in K.

§mf: f64

Martensite finish temperature (Mf) in K.

§as_: f64

Austenite start temperature (As) in K.

§af: f64

Austenite finish temperature (Af) in K.

§e_austenite: f64

Elastic modulus of the austenite phase in Pa.

§e_martensite: f64

Elastic modulus of the martensite phase in Pa.

§h_max: f64

Maximum recoverable (transformation) strain ε_L (dimensionless).

Implementations§

Source§

impl ShapeMemoryAlloy

Source

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
Source

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
Source

pub fn nitinol() -> Self

Alias for new_nitinol.

Source

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).

Source

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).

Source

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 · ξ

Source

pub fn recovery_strain(&self, xi_start: f64, xi_end: f64) -> f64

Recoverable strain between two martensite fraction states.

Δε = h_max · (ξ_start − ξ_end)

Source

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

Source§

fn clone(&self) -> ShapeMemoryAlloy

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ShapeMemoryAlloy

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.