fea/src/bin/two_d.rs

101 lines
2.7 KiB
Rust

use fea::two_d::beam_elements::*;
use fea::two_d::*;
use ndarray::prelude::*;
fn main() {
let student_id_last_digit = 9_f32;
let d = student_id_last_digit / 100.0;
let r = d / 2.0;
let e = 210e9;
let p = (25.0 - student_id_last_digit) * 1000.0;
let theta = 30.0_f32.to_radians();
let l = 2.0 / theta.cos();
let p1 = Point {
id: 1,
pos: Vector(0.0, 0.0),
bc: BoundaryCondition::Fixed,
beams: vec![],
};
let p2 = Point {
id: 2,
pos: Vector(0.0, l * theta.sin()),
bc: BoundaryCondition::Fixed,
beams: vec![],
};
let l_e3 = 2.0 / theta.sin();
let p3 = Point {
id: 3,
pos: Vector(0.0, (l * theta.sin()) + (l_e3 * theta.cos())),
bc: BoundaryCondition::Fixed,
beams: vec![],
};
let p4 = Point {
id: 4,
pos: Vector(l * theta.cos(), l * theta.sin()),
bc: BoundaryCondition::Force(Vector::from_mag_angle(p, 45_f32.to_radians())),
beams: vec![],
};
let mut w = World::from(vec![p1, p2, p3, p4]);
w.link(
1,
4,
NewBeam {
cross_section: CrossSection::Circular(r),
material: fea::Material {
yield_stress: 95e6,
youngs_modulus: e,
},
},
)
.unwrap();
w.link(
2,
4,
NewBeam {
cross_section: CrossSection::Circular(r),
material: fea::Material {
yield_stress: 95e6,
youngs_modulus: e,
},
},
)
.unwrap();
w.link(
3,
4,
NewBeam {
cross_section: CrossSection::Circular(r),
material: fea::Material {
yield_stress: 95e6,
youngs_modulus: e,
},
},
)
.unwrap();
println!("w = {:?}", w);
println!("w.shape() = {:?}", w.shape());
let stiffness = Array2::from_shape_vec(w.shape(), w.stiffness()).unwrap();
println!("w.stiffness = \n{:?}", stiffness);
println!("w.displacement() = {:?}", w.displacement());
println!("w.force() = {:?}", w.force());
let reduced_stiffness =
Array2::from_shape_vec(w.reduced_shape(), w.reduced_stiffness()).unwrap();
let reduced_force = Array2::from_shape_vec((1, w.reduced_dof()), w.reduced_force()).unwrap();
let reduced_displacement =
Array2::from_shape_vec((1, w.reduced_dof()), w.reduced_displacement()).unwrap();
println!("w.reduced_stiffness() = \n{:?}", reduced_stiffness);
println!("w.reduced_force() = {:?}", reduced_force);
println!("w.reduced_displacement() = {:?}", reduced_displacement);
//println!("soln: {:?}", reduced_force / reduced_stiffness)
}