FEATool Multiphysics  v1.16.5 Finite Element Analysis Toolbox
ex_classicpde2.m File Reference

## Description

EX_CLASSICPDE2 Eigenmodes for a L-shaped membrane.

[ FEA, OUT ] = EX_CLASSICPDE2( VARARGIN ) Eigenmodes for a L-shaped membrane. Accepts the following property/value pairs.

Input       Value/{Default}        Description
-----------------------------------------------------------------------------------
hmax        scalar {0.05}          Grid cell size
sfun        string {sflag1}        Shape function
iplot       scalar 0/{1}           Plot solution (=1)
.
Output      Value/(Size)           Description
-----------------------------------------------------------------------------------
fea         struct                 Problem definition struct
out         struct                 Output struct


# Code listing

 cOptDef = { ...
'hmax',     0.05; ...
'sfun',     'sflag1'; ...
'iplot',    1; ...
'tol',      0.05; ...
'fid',      1 };
[got,opt] = parseopt(cOptDef,varargin{:});
fid       = opt.fid;

% Geometry definition.
gobj = gobj_polygon( [-1  1 1 0 0 -1;
-1 -1 1 1 0  0].', 'P1' );
fea.geom.objects = { gobj };

% Grid generation.
fea.grid = gridgen(fea,'hmax',opt.hmax,'fid',fid);
n_bdr = max(fea.grid.b(3,:));   % Number of boundaries.

% Problem definition.
fea.sdim  = { 'x' 'y' };   % Coordinate names.

fea = addphys( fea, @poisson, {'u'} );
fea.phys.poi.sfun  = { opt.sfun };

fea.phys.poi.bdr.coef{1,end}  = repmat({0},1,n_bdr);

fea = parsephys(fea);

% Parse and solve problem.
fea = parseprob(fea);
[fea.sol.u,fea.sol.l] = solveeig( fea, 'fid', fid, 'neigs', 20 );

% Postprocessing.
if( opt.iplot>0 )
postplot( fea, 'surfexpr', 'u', 'surfhexpr', 'u', 'solnum', 12 )
title(['Solution lambda 12 = ',num2str(fea.sol.l(12))])
end

l_ref = [9.640368;15.197253;19.739209;29.521482;31.914209;41.475693;44.948492;49.348023;49.348023;56.710931;65.376542;71.059312;71.572682;78.956838;89.306363;92.306914;97.380734;98.69605;101.607501;112.369198];
out.err  = norm( l_ref - fea.sol.l )/norm(l_ref);
out.pass = out.err < opt.tol;

if( ~nargout )
clear fea out
end