58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
#ifndef BEAM_HPP
|
|
#define BEAM_HPP
|
|
#include <Eigen/Dense>
|
|
#include <assert.h>
|
|
#include <cmath>
|
|
#include <iostream>
|
|
|
|
struct RectangularBeamDimensions {
|
|
float b;
|
|
float h;
|
|
RectangularBeamDimensions(const float &width, const float &height)
|
|
: b(width), h(height) {
|
|
assert(width > 0 && height > 0);
|
|
}
|
|
RectangularBeamDimensions() : b(0.01), h(0.01) {}
|
|
};
|
|
|
|
struct CylindricalElementDimensions {
|
|
float od; // Cylinder outside diameter
|
|
float
|
|
id; // Cylinder inside diameter
|
|
// https://www.engineeringtoolbox.com/area-moment-inertia-d_1328.html
|
|
CylindricalElementDimensions(const float &outsideDiameter,
|
|
const float &insideDiameter)
|
|
: od(outsideDiameter), id(insideDiameter) {
|
|
assert(outsideDiameter > 0 && insideDiameter > 0 &&
|
|
outsideDiameter > insideDiameter);
|
|
}
|
|
CylindricalElementDimensions() : od(0.03), id(0.026) {}
|
|
};
|
|
|
|
struct ElementMaterial {
|
|
float poissonsRatio;
|
|
float youngsModulusGPascal;
|
|
ElementMaterial(const float &poissonsRatio, const float &youngsModulusGPascal)
|
|
: poissonsRatio(poissonsRatio),
|
|
youngsModulusGPascal(youngsModulusGPascal) {
|
|
assert(poissonsRatio <= 0.5 && poissonsRatio >= -1);
|
|
}
|
|
ElementMaterial() : poissonsRatio(0.3), youngsModulusGPascal(7.5) {}
|
|
};
|
|
|
|
struct BeamProperties {
|
|
float crossArea;
|
|
float I2;
|
|
float I3;
|
|
float polarInertia;
|
|
BeamProperties(const RectangularBeamDimensions &dimensions,
|
|
const ElementMaterial &material) {
|
|
crossArea = (dimensions.b * dimensions.h);
|
|
I2 = dimensions.b * std::pow(dimensions.h, 3) / 12;
|
|
I3 = dimensions.h * std::pow(dimensions.b, 3) / 12;
|
|
polarInertia = (I2 + I3);
|
|
}
|
|
};
|
|
|
|
#endif // BEAM_HPP
|