Skip to content

SuperInstance/solid-mechanics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

solid-mechanics

Solid mechanics in Rust. Stress, strain, and structural analysis.

What This Does

  • Stress and strain tensors — Cauchy stress and infinitesimal strain as symmetric 3×3 matrices, with hydrostatic/deviatoric decomposition, principal values, invariants, traction vectors
  • Constitutive relations — isotropic Hooke's law, Lamé parameters, 6×6 Voigt stiffness/compliance, orthotropic elasticity
  • Mohr's circle — 2D and 3D construction, stress transformation, principal stresses
  • Beam mechanics — Euler-Bernoulli beam: deflection, bending moment, shear force for simply-supported and cantilever beams
  • Finite elements — 1D bar elements, global stiffness assembly, displacement solution, stress recovery
  • Yield criteria — von Mises and Tresca
  • Plane stress and plane strain — 2D stress-strain conversion, out-of-plane response, 3×3 stiffness matrices
  • Energy methods — strain energy density, Castigliano's theorem, complementary energy

Install

[dependencies]
solid-mechanics = "0.1.0"

Requires Rust 2021 edition. Depends on nalgebra and serde.

Quick Start

Stress Tensor and Principal Stresses

use solid_mechanics::tensor::StressTensor;

let sigma = StressTensor::from_components(80.0, -40.0, 20.0, 30.0, 0.0, 0.0);
println!("Hydrostatic stress: {}", sigma.hydrostatic());
println!("Von Mises: {}", sigma.von_mises());
println!("Principal stresses: {:?}", sigma.principal_stresses());

Hooke's Law

use solid_mechanics::{StressTensor, StrainTensor, HookeIsotropic};

let steel = HookeIsotropic::new(200e9, 0.3);
let stress = StressTensor::uniaxial(100e6);
let strain = steel.strain_from_stress(&stress);

Mohr's Circle

use solid_mechanics::MohrCircle;

let mc = MohrCircle::from_2d(80.0, -40.0, 30.0);
println!("σ₁ = {}, σ₂ = {}", mc.sigma1, mc.sigma2);

Beam Deflection

use solid_mechanics::EulerBernoulliBeam;

let beam = EulerBernoulliBeam::new(200e9, 1e-4, 5.0);
println!("Max deflection: {}", beam.max_deflection_centered_point(10000.0));

1D Finite Element Analysis

use solid_mechanics::fem::{BarElement1D, FemAssembler1D};

let fem = FemAssembler1D::uniform_bar(200e9, 1e-4, 5.0, 10);
let mut forces = vec![0.0; 11];
forces[10] = 50000.0;
let u = fem.solve(&forces, &[0]).unwrap();

Yield Criteria

use solid_mechanics::{VonMises, Tresca, StressTensor};

let vm = VonMises::new(250e6);
let stress = StressTensor::from_components(200e6, 100e6, -50e6, 60e6, 0.0, 0.0);
println!("Von Mises equivalent: {}", VonMises::equivalent_stress(&stress));
println!("Safety factor: {}", vm.safety_factor(&stress));

License

MIT OR Apache-2.0

About

Solid mechanics in Rust — stress/strain tensors, beam theory, FEM basics, yield criteria, energy methods

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages