|
FEATool Multiphysics
v1.17.5
Finite Element Analysis Toolbox
|
EX_LINEARELASTICITY6 NAFEMS LE6 skew plate benchmark.
[ FEA, OUT ] = EX_LINEARELASTICITY6( VARARGIN ) Skew plate under normal pressure (NAFEMS LE6 Benchmark).
[1] National Agency for Finite Element Methods and Standards. The Standard NAFEMS Benchmarks. Rev. 3. United Kingdom: NAFEMS, October 1990.
Accepts the following property/value pairs.
Input Value/{Default} Description
-----------------------------------------------------------------------------------
hmax string {0.05} Grid size
sfun string {sflag2} Shape function
iplot scalar 0/{1} Plot solution (=1)
.
Output Value/(Size) Description
-----------------------------------------------------------------------------------
fea struct Problem definition struct
out struct Output struct
cOptDef = { 'hmax', 0.05;
'sfun', 'sflag2';
'iplot', 1;
'tol', 0.1;
'fid', 1 };
[got,opt] = parseopt(cOptDef,varargin{:});
fid = opt.fid;
E = 210e9;
nu = 0.3;
rho = 7800;
t = 0.01;
load = -0.7e3;
% Grid definition.
fea.sdim = {'x', 'y', 'z'};
a = cos(pi*30/180);
p = [0 1 1+a a;0 0 0.5 0.5]';
geom_2d.objects{1} = gobj_polygon(p);
grid_2d = gridgen( geom_2d, 'hmax', opt.hmax, 'fid', fid );
fea.grid = gridextrude( grid_2d, max(3,ceil(t/opt.hmax)), t );
% Equations and problem definition.
fea = addphys( fea, @linearelasticity );
fea.phys.el.eqn.coef{1,end} = { nu };
fea.phys.el.eqn.coef{2,end} = { E };
fea.phys.el.eqn.coef{3,end} = { rho };
fea.phys.el.sfun = { opt.sfun, opt.sfun, opt.sfun };
% Set/constrain w = 0 on sides (boundaries 1-4).
n_bdr = 6;
bctype = mat2cell( zeros(3,n_bdr), [1 1 1], ones(1,n_bdr) );
[bctype{3,[1:4]}] = deal(1);
fea.phys.el.bdr.coef{1,5} = bctype;
% Set/constrain u, v = 0 on edge 2, x = y = 0.
edg(1).type = 'constraint';
edg(1).index = 2;
edg(1).dvar = 1;
edg(1).expr = 0;
edg(2).type = 'constraint';
edg(2).index = 2;
edg(2).dvar = 2;
edg(2).expr = 0;
% Set/constrain v = 0 on edge 1, x = 0, y = 1.
edg(3).type = 'constraint';
edg(3).index = 1;
edg(3).dvar = 2;
edg(3).expr = 0;
fea.edg = edg;
% Apply vertical load to top boundary.
bccoef = mat2cell( zeros(3,n_bdr), [1 1 1], ones(1,n_bdr) );
bccoef{3,6} = load;
fea.phys.el.bdr.coef{1,end} = bccoef;
% Solve problem.
fea = parsephys( fea );
fea = parseprob( fea );
fea.sol.u = solvestat( fea, 'fid', fid );
% Postprocessing.
if( opt.iplot>0 )
postplot( fea, 'surfexpr', 'sqrt(u^2+v^2+w^2)', ...
'deformexpr', {'u', 'v', 'w'} )
end
% Error checking.
out = [];
p_E = [0.933012701892219; 0.25; 0];
ps1_E = evalexpr( fea.phys.el.eqn.vars{12,2}, p_E, fea );
ps2_E = evalexpr( fea.phys.el.eqn.vars{13,2}, p_E, fea );
ps3_E = evalexpr( fea.phys.el.eqn.vars{14,2}, p_E, fea );
ps_E_max = max([ps1_E,ps2_E,ps3_E]);
ps_E_ref = 0.802e6;
out.w_E = evalexpr( 'w', p_E, fea );
out.ps_E = [ps1_E, ps2_E, ps3_E];
out.err = abs(ps_E_max-ps_E_ref)/ps_E_ref;
out.pass = out.err < opt.tol;
if( nargout==0 )
clear fea out
end