Home > vbmeg > external > iso2mesh > meshinterp.m

meshinterp

PURPOSE ^

SYNOPSIS ^

function newval=meshinterp(fromval,elemid,elembary,fromelem)

DESCRIPTION ^

 newval=meshinterp(fromval,elemid,elembary,fromelem)

 Interpolate nodal values from the source mesh to the target mesh based on
 a linear interpolation

 author: Qianqian Fang (q.fang at neu.edu)

 input:
     fromval: values defined at the source mesh nodes, the row or column
              number must be the same as the source mesh node number, which
              is the same as the elemid length
     elemid: the IDs of the source mesh element that encloses the nodes of
            the target mesh nodes; a vector of length of target mesh node
            count; elemid and elembary can be generated by calling

           [elemid,elembary]=tsearchn(node_src, elem_src, node_target);

           note that the mapping here is inverse to that in meshremap()

     elembary: the bary-centric coordinates of each target mesh nodes
             within the source mesh elements, sum of each row is 1, expect
             3 or 4 columns (or can be N-D)
    fromelem: the element list of the source mesh


 output:
     newval: a 2D array with rows equal to the target mesh nodes (nodeto), 
            and columns equals to the value numbers defined at each source
            mesh node
 example:

    [n1,f1,e1]=meshabox([0 0 0],[10 20 5],1); % target mesh
    [n2,f2,e2]=meshabox([0 0 0],[10 20 5],2); % src mesh
    [id, ww]=tsearchn(n2,e2,n1);              % project target to src mesh
    value_src=n2(:,[2 1 3]);             % create dummy values at src mesh
    newval=meshinterp(value_src,id, ww, e2);

 -- 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 newval=meshinterp(fromval,elemid,elembary,fromelem)
0002 %
0003 % newval=meshinterp(fromval,elemid,elembary,fromelem)
0004 %
0005 % Interpolate nodal values from the source mesh to the target mesh based on
0006 % a linear interpolation
0007 %
0008 % author: Qianqian Fang (q.fang at neu.edu)
0009 %
0010 % input:
0011 %     fromval: values defined at the source mesh nodes, the row or column
0012 %              number must be the same as the source mesh node number, which
0013 %              is the same as the elemid length
0014 %     elemid: the IDs of the source mesh element that encloses the nodes of
0015 %            the target mesh nodes; a vector of length of target mesh node
0016 %            count; elemid and elembary can be generated by calling
0017 %
0018 %           [elemid,elembary]=tsearchn(node_src, elem_src, node_target);
0019 %
0020 %           note that the mapping here is inverse to that in meshremap()
0021 %
0022 %     elembary: the bary-centric coordinates of each target mesh nodes
0023 %             within the source mesh elements, sum of each row is 1, expect
0024 %             3 or 4 columns (or can be N-D)
0025 %    fromelem: the element list of the source mesh
0026 %
0027 %
0028 % output:
0029 %     newval: a 2D array with rows equal to the target mesh nodes (nodeto),
0030 %            and columns equals to the value numbers defined at each source
0031 %            mesh node
0032 % example:
0033 %
0034 %    [n1,f1,e1]=meshabox([0 0 0],[10 20 5],1); % target mesh
0035 %    [n2,f2,e2]=meshabox([0 0 0],[10 20 5],2); % src mesh
0036 %    [id, ww]=tsearchn(n2,e2,n1);              % project target to src mesh
0037 %    value_src=n2(:,[2 1 3]);             % create dummy values at src mesh
0038 %    newval=meshinterp(value_src,id, ww, e2);
0039 %
0040 % -- this function is part of iso2mesh toolbox (http://iso2mesh.sf.net)
0041 %
0042 
0043 if(size(fromval,1)==1)
0044     fromval=fromval(:);
0045 end
0046 
0047 idx=find(~isnan(elemid));
0048 
0049 allval=reshape(fromval(fromelem(elemid(idx),:),:),length(idx),size(elembary,2),size(fromval,2));
0050 tmp=cellfun(@(x) sum(elembary(idx,:).*x,2), num2cell(allval,[1 2]),'UniformOutput',false);
0051 newval=size(length(elemid),size(fromval,2));
0052 newval(idx,:)=squeeze(cat(3,tmp{:}));
0053

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