source: issm/trunk/src/m/parameterization/reinitializelevelset.m

Last change on this file was 27035, checked in by Mathieu Morlighem, 3 years ago

merged trunk-jpl and trunk for revision 27033

File size: 1.1 KB
RevLine 
[22452]1function levelsetnew = reinitializelevelset(md,levelset)
2%REINITIALIZELEVELSET - reinitialize levelset as a signed distance function
3%
4% Usage:
5% levelsetnew = reinitializelevelset(md,levelset)
6
[24686]7% if md is 3d, levelset should be projected on a 2d mesh
[22452]8
[24686]9if isempty(levelset), error('levelset provided is empty'); end
10if dimension(md.mesh)==3,
11 if length(levelset)~=md.mesh.numberofvertices2d, error('levelset provided should be specified at the 2d vertices of the mesh'); end
12else
13 if length(levelset)~=md.mesh.numberofvertices, error('levelset provided should be specified at the vertices of the mesh'); end
14end
15
[22452]16%First: extract segments
[27035]17contours=isoline(md,levelset,'value',0);
[22452]18
19%Now, make this a distance field (might not be closed)
[24686]20levelsetnew=abs(ExpToLevelSet(md.mesh.x,md.mesh.y,contours)); % levelsetnew comes on the 3d vertices, if mesh is 3d
[22452]21
22%Finally, change sign
[24686]23pos=find(levelset<0); % if mesh is 3d, it refers to the vertices on the base
24if dimension(md.mesh)==3
25 for i=1:md.mesh.numberoflayers
26 pos3d=pos+(i-1)*md.mesh.numberofvertices2d;
27 levelsetnew(pos3d)=-levelsetnew(pos3d);
28 end
29else
30 levelsetnew(pos)=-levelsetnew(pos);
31end
Note: See TracBrowser for help on using the repository browser.