Elem_Navier Class
This is a sub-class, in the Object Oriented Programming (OOP) paradigm, of super-class Elem in the LESM (Linear Elements Structure Model) program. This sub-class implements abstract methods, declared in super-class Elem, that deal with Navier (Euler-Bernoulli) flexural behavior of linear elements.
Contents
Navier (Euler-Bernoulli) Beam Theory
In Euler-Bernoulli flexural behavior, it is assumed that there is no shear deformation. As consequence, bending of a linear element is such that its cross-section remains plane and normal to the element longitudinal axis.
Class definition
Definition of sub-class Elem_Navier derived from super-class Elem.
classdef Elem_Navier < Elem
Constructor method
methods %------------------------------------------------------------------ function elem = Elem_Navier(anm,mat,sec,nodes,hi,hf,vz,gle,af,sfy,sfz,bmy,bmz,tm,intdispl) include_constants; elem = elem@Elem(MEMBER_NAVIER); if (nargin > 0) % Get nodal coordinates xi = nodes(1).coord(1); yi = nodes(1).coord(2); zi = nodes(1).coord(3); xf = nodes(2).coord(1); yf = nodes(2).coord(2); zf = nodes(2).coord(3); % Calculate element length dx = xf - xi; dy = yf - yi; dz = zf - zi; L = sqrt(dx^2 + dy^2 + dz^2); % Calculate element cosines with global axes cx = dx/L; cy = dy/L; cz = dz/L; % Create load object load = Lelem_Navier(elem); % Set properties elem.anm = anm; elem.load = load; elem.material = mat; elem.section = sec; elem.nodes = nodes; elem.hingei = hi; elem.hingef = hf; elem.length = L; elem.cosine_X = cx; elem.cosine_Y = cy; elem.cosine_Z = cz; elem.vz = vz; elem.gle = gle; elem.axial_force = af; elem.shear_force_Y = sfy; elem.shear_force_Z = sfz; elem.bending_moment_Y = bmy; elem.bending_moment_Z = bmz; elem.torsion_moment = tm; elem.intDispl = intdispl; % Compute and set basis rotation transformation matrix and % d.o.f. rotation transformation matrix elem.T = elem.rotTransMtx(); elem.rot = anm.gblToLocElemRotMtx(elem); end end end
Public methods
Implementation of the abstract methods declared in super-class Elem.
methods %------------------------------------------------------------------ % Generates element flexural stiffness coefficient matrix in local % xy-plane. % Output: % kef: a 4x4 matrix with flexural stiffness coefficients: % D -> transversal displacement in local y-axis % R -> rotation about local z-axis % ini -> initial node % end -> end node % kef = [ k_Dini_Dini k_Dini_Rini k_Dini_Dend k_Dini_Rend; % k_Rini_Dini k_Rini_Rini k_Rini_Dend k_Dini_Rend; % k_Dend_Dini k_Dend_Rini k_Dend_Dend k_Dend_Rend; % k_Rend_Dini k_Rend_Rini k_Rend_Dend k_Rend_Rend ] function kef = flexuralStiffCoeff_XY(elem) include_constants; E = elem.material.elasticity; I = elem.section.inertia_z; L = elem.length; L2 = L^2; L3 = L2 * L; EI = E * I; if (elem.hingei == CONTINUOUS_END) && (elem.hingef == CONTINUOUS_END) kef = [ 12*EI/L3 6*EI/L2 -12*EI/L3 6*EI/L2; 6*EI/L2 4*EI/L -6*EI/L2 2*EI/L; -12*EI/L3 -6*EI/L2 12*EI/L3 -6*EI/L2; 6*EI/L2 2*EI/L -6*EI/L2 4*EI/L ]; elseif (elem.hingei == HINGED_END) && (elem.hingef == CONTINUOUS_END) kef = [ 3*EI/L3 0 -3*EI/L3 3*EI/L2; 0 0 0 0; -3*EI/L3 0 3*EI/L3 -3*EI/L2; 3*EI/L2 0 -3*EI/L2 3*EI/L ]; elseif (elem.hingei == CONTINUOUS_END) && (elem.hingef == HINGED_END) kef = [ 3*EI/L3 3*EI/L2 -3*EI/L3 0; 3*EI/L2 3*EI/L -3*EI/L2 0; -3*EI/L3 -3*EI/L2 3*EI/L3 0; 0 0 0 0 ]; elseif (elem.hingei == HINGED_END) && (elem.hingef == HINGED_END) kef = [ 0 0 0 0; 0 0 0 0; 0 0 0 0; 0 0 0 0 ]; end end %------------------------------------------------------------------ % Generates element flexural stiffness coefficient matrix in local % xz-plane. % Output: % kef: a 4x4 matrix with flexural stiffness coefficients: % D -> transversal displacement in local z-axis % R -> rotation about local y-axis % ini -> initial node % end -> end node % kef = [ k_Dini_Dini k_Dini_Rini k_Dini_Dend k_Dini_Rend; % k_Rini_Dini k_Rini_Rini k_Rini_Dend k_Dini_Rend; % k_Dend_Dini k_Dend_Rini k_Dend_Dend k_Dend_Rend; % k_Rend_Dini k_Rend_Rini k_Rend_Dend k_Rend_Rend ] function kef = flexuralStiffCoeff_XZ(elem) include_constants; E = elem.material.elasticity; I = elem.section.inertia_y; L = elem.length; L2 = L^2; L3 = L2 * L; EI = E * I; if (elem.hingei == CONTINUOUS_END) && (elem.hingef == CONTINUOUS_END) kef = [ 12*EI/L3 -6*EI/L2 -12*EI/L3 -6*EI/L2; -6*EI/L2 4*EI/L 6*EI/L2 2*EI/L; -12*EI/L3 6*EI/L2 12*EI/L3 6*EI/L2; -6*EI/L2 2*EI/L 6*EI/L2 4*EI/L ]; elseif (elem.hingei == HINGED_END) && (elem.hingef == CONTINUOUS_END) kef = [ 3*EI/L3 0 -3*EI/L3 -3.*EI/L2; 0 0 0 0; -3*EI/L3 0 3*EI/L3 3*EI/L2; -3*EI/L2 0 3*EI/L2 3*EI/L ]; elseif (elem.hingei == CONTINUOUS_END) && (elem.hingef == HINGED_END) kef = [ 3*EI/L3 -3*EI/L2 -3*EI/L3 0; -3*EI/L2 3*EI/L 3*EI/L2 0; -3*EI/L3 3*EI/L2 3*EI/L3 0; 0 0 0 0 ]; elseif (elem.hingei == HINGED_END) && (elem.hingef == HINGED_END) kef = [ 0 0 0 0; 0 0 0 0; 0 0 0 0; 0 0 0 0 ]; end end %------------------------------------------------------------------ % Evaluates element flexural displacement shape functions in local % xy-plane at a given cross-section position. % Flexural shape functions give the transversal displacement of an % element subjected to unit nodal displacements and rotations. % Output: % Nv: a 1x4 vector with flexural displacement shape functions: % D -> transversal displacement in local y-axis % R -> rotation about local z-axis % ini -> initial node % end -> end node % Nv = [ N_Dini N_Rini N_Dend N_Rend ] % Input arguments: % x: element cross-section position in local x-axis function Nv = flexuralDisplShapeFcnVector_XY(elem,x) include_constants; L = elem.length; L2 = L * L; L3 = L2 * L; x2 = x * x; x3 = x2 * x; if (elem.hingei == CONTINUOUS_END) && (elem.hingef == CONTINUOUS_END) Nv1 = 1 - 3*x2/L2 + 2*x3/L3; Nv2 = x - 2*x2/L + x3/L2; Nv3 = 3*x2/L2 - 2*x3/L3; Nv4 = -x2/L + x3/L2; elseif (elem.hingei == HINGED_END) && (elem.hingef == CONTINUOUS_END) Nv1 = 1 - 3*x/(2*L) + x3/(2*L3); Nv2 = 0; Nv3 = 3*x/(2*L) - x3/(2*L3); Nv4 = -x/2 + x3/(2*L2); elseif (elem.hingei == CONTINUOUS_END) && (elem.hingef == HINGED_END) Nv1 = 1 - 3*x2/(2*L2) + x3/(2*L3); Nv2 = x - 3*x2/(2*L) + x3/(2*L2); Nv3 = 3*x2/(2*L2) - x3/(2*L3); Nv4 = 0; elseif (elem.hingei == HINGED_END) && (elem.hingef == HINGED_END) Nv1 = 1 - x/L; Nv2 = 0; Nv3 = x/L; Nv4 = 0; end Nv = [ Nv1 Nv2 Nv3 Nv4 ]; end %------------------------------------------------------------------ % Evaluates element flexural displacement shape functions in local % xz-plane at a given cross-section position. % Flexural shape functions give the transversal displacement of an % element subjected to unit nodal displacements and rotations. % Output: % Nw: a 1x4 vector with flexural displacement shape functions: % D -> transversal displacement in local z-axis % R -> rotation about local y-axis % ini -> initial node % end -> end node % Nw = [ N_Dini N_Rini N_Dend N_Rend ] % Input arguments: % x: element cross-section position in local x-axis function Nw = flexuralDisplShapeFcnVector_XZ(elem,x) include_constants; L = elem.length; L2 = L * L; L3 = L2 * L; x2 = x * x; x3 = x2 * x; if (elem.hingei == CONTINUOUS_END) && (elem.hingef == CONTINUOUS_END) Nw1 = 1 - 3*x2/L2 + 2*x3/L3; Nw2 = -x + 2*x2/L - x3/L2; Nw3 = 3*x2/L2 - 2*x3/L3; Nw4 = x2/L - x3/L2; elseif (elem.hingei == HINGED_END) && (elem.hingef == CONTINUOUS_END) Nw1 = 1 - 3*x/(2*L) + x3/(2*L3); Nw2 = 0; Nw3 = 3*x/(2*L) - x3/(2*L3); Nw4 = x/2 - x3/(2*L2); elseif (elem.hingei == CONTINUOUS_END) && (elem.hingef == HINGED_END) Nw1 = 1 - 3*x2/(2*L2) + x3/(2*L3); Nw2 = -x + 3*x2/(2*L) - x3/(2*L2); Nw3 = 3*x2/(2*L2) - x3/(2*L3); Nw4 = 0; elseif (elem.hingei == HINGED_END) && (elem.hingef == HINGED_END) Nw1 = 1 - x/L; Nw2 = 0; Nw3 = x/L; Nw4 = 0; end Nw = [ Nw1 Nw2 Nw3 Nw4 ]; end end
end