Home > vbmeg > external > iso2mesh > highordertet.m

highordertet

PURPOSE ^

SYNOPSIS ^

function [newnode,newelem]=highordertet(node,elem,order)

DESCRIPTION ^

 [newnode,newelem]=highordertet(node,elem)

 generate high-order straight-edge tetrahedral mesh from
 the 1st order tetrahedral mesh

 author: Qianqian Fang, <q.fang at neu.edu>

 input:
    node: list of nodes
    elem: list of elements (each row are indices of nodes of each element)
    order: optional, the order of the generated mesh; if missing, order=2

 output:
    newnode: all new edge-nodes on the output mesh
    newelem: the indices of the edge nodes for each original tet element

    currently, this function only supports order=2
    to combine the newnode/newelem with the old mesh, one should use

    elemfull=[elem(:,1:4) newelem+size(node,1)]; % 10-node element
    nodefull=[node;newnode];

 -- this function is part of iso2mesh toolbox (http://iso2mesh.sf.net)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [newnode,newelem]=highordertet(node,elem,order)
0002 %
0003 % [newnode,newelem]=highordertet(node,elem)
0004 %
0005 % generate high-order straight-edge tetrahedral mesh from
0006 % the 1st order tetrahedral mesh
0007 %
0008 % author: Qianqian Fang, <q.fang at neu.edu>
0009 %
0010 % input:
0011 %    node: list of nodes
0012 %    elem: list of elements (each row are indices of nodes of each element)
0013 %    order: optional, the order of the generated mesh; if missing, order=2
0014 %
0015 % output:
0016 %    newnode: all new edge-nodes on the output mesh
0017 %    newelem: the indices of the edge nodes for each original tet element
0018 %
0019 %    currently, this function only supports order=2
0020 %    to combine the newnode/newelem with the old mesh, one should use
0021 %
0022 %    elemfull=[elem(:,1:4) newelem+size(node,1)]; % 10-node element
0023 %    nodefull=[node;newnode];
0024 %
0025 % -- this function is part of iso2mesh toolbox (http://iso2mesh.sf.net)
0026 %
0027 
0028 if(nargin<3)
0029     order=2;
0030 end
0031 if(order>=3 || order<=1)
0032     error('currently this function only supports order=2');
0033 end
0034 [edges,idx,newelem]=uniqedges(elem(:,1:4));
0035 newnode=node(edges',1:3);
0036 newnode=reshape(newnode',[3,2,size(edges,1)]);
0037 newnode=squeeze(mean(permute(newnode,[3 2 1]),2));

Generated on Mon 22-May-2023 06:53:56 by m2html © 2005