def blade_fe(blade, root_length=0.0, spin=0.0): # positive blade twist is geometrically a negative x-rotation twist = -np.array(blade['twist']) x = blade['radii'] qn = interleave(root_length + np.array(x), 6) N = BeamFE.centrifugal_force_distribution(qn, blade['density']) fe = BeamFE(x, blade['density'], blade['EA'], blade['EIyy'], blade['EIzz'], twist=twist, axial_force=N * spin**2) fe.set_boundary_conditions('C', 'F') return fe
def test_static_deflection(self): x = array([0.0, 4.0, 10.0]) EI = 144.0 # Using the z axis as the transverse direction gives the same # sign convention as Reddy uses in 2D, namely that rotations # are positive clockwise. fe = BeamFE(x, density=10, EA=0, EIy=EI, EIz=0) fe.set_boundary_conditions('C', 'F') fe.set_dofs([False, False, True, False, True, False]) element = ModalElementFromFE('elem', fe) # Distributed load, linearly interpolated load = np.zeros((3, 3)) load[-1, 2] = -100 # Load in z direction at tip element.apply_distributed_loading(load) defl = -element.applied_stress / np.diag(element.K) # Check against directly calculating static deflection from FE Q = fe.distribute_load(interleave(load, 6)) defl_fe, reactions_fe = fe.static_deflection(Q) assert_aae(dot(element.shapes, defl), defl_fe, decimal=2)