FEATool Multiphysics
v1.17.1
Finite Element Analysis Toolbox
|
EX_NAVIERSTOKES9 2D Axisymmetric jet impingement with heat transfer.
[ FEA, OUT ] = EX_NAVIERSTOKES9( VARARGIN ) Sets up and solves stationary axisymmetric flow of a jet impacting in a thin constrained region with a coupled heat transfer mode. Accepts the following property/value pairs.
Input Value/{Default} Description ----------------------------------------------------------------------------------- Re scalar {100} Jet Reynolds number igrid scalar 1/{0} Cell type (0=quadrilaterals, 1=triangles) hmax scalar {0.2} Max grid cell size sf_u string {sflag2} Shape function for velocity sf_p string {sflag1} Shape function for pressure iplot scalar 0/{1} Plot solution and error (=1) . Output Value/(Size) Description ----------------------------------------------------------------------------------- fea struct Problem definition struct out struct Output struct
cOptDef = { ... 'Re', 100; ... 'igrid', 0; ... 'hmax', 0.2; ... 'sf_u', 'sflag1'; ... 'sf_p', 'sflag1'; ... 'iplot', 1; ... 'fid', 1 }; [got,opt] = parseopt( cOptDef, varargin{:} ); fid = opt.fid; % Geometry definition. r = 10; % Radius. l = 3; % Length. gobj = gobj_polygon( [0 0; r 0; r l; 1 l; 0 l] ); fea.geom.objects = { gobj }; fea.sdim = { 'r' 'z' }; % Space coordinate names. % Grid generation. if ( opt.igrid==1 ) fea.grid = gridgen( fea, 'hmax', opt.hmax, 'fid', fid ); else fea.grid = rectgrid( round(r/opt.hmax), round(l/opt.hmax), [0 r;0 l] ); if( opt.igrid<0 ) fea.grid = quad2tri( fea.grid ); end ic = fea.grid.b(1,:); ii = fea.grid.b(2,:); jj = mod(ii,size(fea.grid.c,1)) + 1; p1 = fea.grid.p( :, fea.grid.c(sub2ind(size(fea.grid.c),ii,ic)) ); p2 = fea.grid.p( :, fea.grid.c(sub2ind(size(fea.grid.c),jj,ic)) ); pm = [ p1 + p2 ]'/2; ix4 = find( (pm(:,1)<1) .* (abs(pm(:,2)-3)<eps) ); fea.grid.b(3,ix4) = 4; ix5 = find( pm(:,1)<=eps ); fea.grid.b(3,ix5) = 5; end % Boundary specifications. i_plate = 1; i_inflow = 4; i_outflow = 2; i_symmetry = 5; inflow_bc = -opt.Re; % Problem definition. % Add Navier-Stokes equations physics mode. fea = addphys( fea, {@navierstokes 1} ); fea.phys.ns.eqn.coef{1,end} = { 1 }; fea.phys.ns.eqn.coef{2,end} = { 1 }; fea.phys.ns.sfun = { opt.sf_u opt.sf_u opt.sf_p }; fea.phys.ns.bdr.sel(i_inflow) = 2; fea.phys.ns.bdr.sel(i_outflow) = 3; fea.phys.ns.bdr.coef{2,end}{2,i_inflow} = inflow_bc; fea.phys.ns.bdr.sel(i_symmetry) = 5; % Add heat transfer physics mode. fea = addphys( fea, {@heattransfer 1} ); fea.phys.ht.eqn.coef{4,end} = fea.phys.ns.dvar{1}; fea.phys.ht.eqn.coef{5,end} = fea.phys.ns.dvar{2}; fea.phys.ht.sfun = { opt.sf_u }; fea.phys.ht.bdr.sel(:) = 3; fea.phys.ht.bdr.sel(i_inflow) = 1; fea.phys.ht.bdr.sel(i_plate) = 1; fea.phys.ht.bdr.sel(i_outflow) = 2; fea.phys.ht.bdr.coef{1,end}{1,i_inflow} = 1; % Parse physics modes. fea = parsephys(fea); % Parse and solve problem. fea = parseprob( fea ); % Check and parse problem struct. fea.sol.u = solvestat( fea, 'maxnit', 50, 'fid', fid ); % Error checking. u = evalexpr( 'u', fea.grid.p, fea ); w = evalexpr( 'w', fea.grid.p, fea ); out.err(1) = (max(u) - 75.9)/75.9; out.err(2) = (min(u) + 9.8)/(-9.8); out.err(3) = (max(w) - 7.9)/7.9; out.err(4) = (min(w) + 106)/(-106); out.pass = all( out.err<0.1 ); % Postprocessing. if( opt.iplot>0 ) figure subplot(1,2,1) postplot( fea, 'surfexpr', 'sqrt(u^2+w^2)', ... 'arrowexpr', {'u' 'w'}, 'arrowspacing', [60 20], ... 'isoexpr', 'sqrt(u^2+w^2)' ) title( 'Velocity field' ) subplot(1,2,2) postplot( fea, 'surfexpr', 'T', 'isoexpr', 'T' ) title( 'Temperature' ) end if( nargout==0 ) clear fea out end