DiscontinuityElement Class
This in an abstract class that defines a discontinuity element in a finite element mesh. It provides methods to compute geometric and physical properties of the discontinuity.
Contents
Authors
- Danilo Cavalcanti (dborges@cimne.upc.edu)
Class definition
classdef DiscontinuityElement < handle
Public properties
properties (SetAccess = public, GetAccess = public) shape = []; % Object of the Shape class node = []; % Nodes of the fem mesh t = 1.0; % Thickness mat = []; % Material object intOrder = 2; % Order of the numerical integration dof = []; % Degrees of freedom vector ndof = 1; % Number of dofs nIntPoints = 1; % Number of integration points intPoint = []; % Vector with integration point objects end
Constructor method
methods %------------------------------------------------------------------ function this = DiscontinuityElement(node,mat) if (nargin > 0) this.shape = Shape_Bar(); this.node = node; this.mat = mat; end end end
Abstract methods
methods(Abstract) %------------------------------------------------------------------ % Assemble element matrices and vectors. % Outputs: % Ke : element "stiffness" matrix % Ce : element "damping" matrix % fe : element "external force" vector % fi : element "internal force" vector % dfidu : element matrix of derivative of the internal force wrt displacement [Ke,Ce,fi,fe,dfidu] = elementData(this,ae); end
Public methods
methods %------------------------------------------------------------------ % Compute discontinuity reference point. function Xr = referencePoint(this) Xr = 0.5 * (this.node(1,:) + this.node(2,:)); end %------------------------------------------------------------------ % Compute discontinuity length. function l = ld(this) dx = this.node(2,1) - this.node(1,1); dy = this.node(2,2) - this.node(1,2); l = sqrt(dx.^2 + dy.^2); end %------------------------------------------------------------------ % Compute discontinuity tangential vector. function m = tangentialVector(this) DX = this.node(2,:) - this.node(1,:); m = DX' / norm(DX); end %------------------------------------------------------------------ % Compute discontinuity normal vector. % Defined considering n = ez * m, where ez = [0 0 1]. function n = normalVector(this) m = this.tangentialVector(); n = [-m(2) ; m(1)]; end %------------------------------------------------------------------ % Compute heaviside function associated with the discontinuity at a given point. function h = heaviside(this,X) n = this.normalVector(); Xr = this.referencePoint(); DX = X - Xr; h = max(sign(DX*n),0.0); end %------------------------------------------------------------------ % Initialize degrees of freedom vector. function initializeDofs(this,ndofs) this.dof = 1:this.ndof; this.dof = this.dof + ndofs; end %------------------------------------------------------------------ % Update state variables. function updateStateVar(this) for i = 1:this.nIntPoints this.intPoint(i).updateStateVar(); this.intPoint(i).updateStressVct(); this.intPoint(i).updateStrainVct(); end end end
end