1 function ngrid = remove_duplicate_vertices(grid , epsilon )
2 %
function ngrid = remove_duplicate_vertices(grid [, epsilon])
3 % method to be used,
if a vertex list in the grid should be compressed
5 % This might be required after refinement of a grid, merging of grids, etc.
6 % Duplicate detection is based on l2-error deviation thresholded by
'epsilon'.
9 % epsilon: l2-error deviation threshold. (Default =
'1e-6')
12 % ngrid: the compressed grid
14 % Bernard Haasdonk 15.3.2007
16 % detect duplicates in current vertex list wrt. epsilon derivation
22 [un_id, dupl_id, un_id_of_dupl] = ...
23 detect_duplicate_rows(grid.vertex, epsilon);
24 % i.e. vector with index dupl_id(1) is identical to vector un_id_of_dupl(1)
28 % only perform compression, if required
30 % generate compressed vertex list
31 ngrid.vertex = ngrid.vertex(un_id,:);
33 % construct vertex-index-translation map
34 % such that new_id(dupl_id(1)) = un_id_of_dupl(1)
35 % and new_id(un_id(1)) = un_id(1);
36 new_id = -ones(max(max(grid.vertexindex)),1);
37 new_id(un_id) = 1:length(un_id);
38 new_id(dupl_id) = new_id(un_id_of_dupl);
40 % perform vertex-index-translation
41 vertexindex_vector = new_id(grid.vertexindex(:));
42 ngrid.vertexindex = reshape(vertexindex_vector, ...
43 size(grid.vertexindex));
45 if ~isempty(find(vertexindex_vector <= 0,1))
46 error('translation map erroneous');
49 ngrid.nvertices = size(ngrid.vertex,1);