Changeset 12612


Ignore:
Timestamp:
07/05/12 15:28:36 (13 years ago)
Author:
seroussi
Message:

changes modelextract and contourenvelope for 3d meshes (problem when redoing BC after extraction)

Location:
issm/trunk-jpl/src/m/model
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/model/contourenvelope.m

    r9734 r12612  
    3535%Now, build the connectivity tables for this mesh.
    3636%Computing connectivity
    37 if size(md.mesh.vertexconnectivity,1)~=md.mesh.numberofvertices,
     37if (size(md.mesh.vertexconnectivity,1)~=md.mesh.numberofvertices & size(md.mesh.vertexconnectivity,1)~=md.mesh.numberofvertices2d),
    3838        md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
    3939end
    40 if size(md.mesh.elementconnectivity,1)~=md.mesh.numberofelements,
     40if (size(md.mesh.elementconnectivity,1)~=md.mesh.numberofelements & size(md.mesh.elementconnectivity,1)~=md.mesh.numberofelements2d),
    4141        md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);
    4242end
     
    4444%get nodes inside profile
    4545mesh.elementconnectivity=md.mesh.elementconnectivity;
     46if md.mesh.dimension==2;
     47        mesh.elements=md.mesh.elements;
     48        mesh.x=md.mesh.x;
     49        mesh.y=md.mesh.y;
     50        mesh.numberofvertices=md.mesh.numberofvertices;
     51        mesh.numberofelements=md.mesh.numberofelements;
     52else
     53        mesh.elements=md.mesh.elements2d;
     54        mesh.x=md.mesh.x2d;
     55        mesh.y=md.mesh.y2d;
     56        mesh.numberofvertices=md.mesh.numberofvertices2d;
     57        mesh.numberofelements=md.mesh.numberofelements2d;
     58end
     59
    4660if nargin==2,
     61
    4762        if isfile,
    4863                %get flag list of elements and nodes inside the contour
    49                 nodein=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,file,'node',1);
    50                 elemin=(sum(nodein(md.mesh.elements),2)==size(md.mesh.elements,2));
     64                nodein=ContourToMesh(mesh.elements,mesh.x,mesh.y,file,'node',1);
     65                elemin=(sum(nodein(mesh.elements),2)==size(mesh.elements,2));
    5166                %modify element connectivity
    5267                elemout=find(~elemin);
     
    5570        else
    5671                %get flag list of elements and nodes inside the contour
    57                 nodein=zeros(md.mesh.numberofvertices,1);
    58                 elemin=zeros(md.mesh.numberofelements,1);
     72                nodein=zeros(mesh.numberofvertices,1);
     73                elemin=zeros(mesh.numberofelements,1);
    5974               
    6075                pos=find(flags);
    6176                elemin(pos)=1;
    62                 nodein(md.mesh.elements(pos,:))=1;
     77                nodein(mesh.elements(pos,:))=1;
    6378
    6479                %modify element connectivity
     
    87102        els2=mesh.elementconnectivity(el1,find(mesh.elementconnectivity(el1,:)));
    88103        if length(els2)>1,
    89                 flag=intersect(md.mesh.elements(els2(1),:),md.mesh.elements(els2(2),:));
    90                 nods1=md.mesh.elements(el1,:);
     104                flag=intersect(mesh.elements(els2(1),:),mesh.elements(els2(2),:));
     105                nods1=mesh.elements(el1,:);
    91106                nods1(find(nods1==flag))=[];
    92107                segments(count,:)=[nods1 el1];
    93108
    94                 ord1=find(nods1(1)==md.mesh.elements(el1,:));
    95                 ord2=find(nods1(2)==md.mesh.elements(el1,:));
     109                ord1=find(nods1(1)==mesh.elements(el1,:));
     110                ord2=find(nods1(2)==mesh.elements(el1,:));
    96111
    97112                %swap segment nodes if necessary
     
    104119                count=count+1;
    105120        else
    106                 nods1=md.mesh.elements(el1,:);
    107                 flag=setdiff(nods1,md.mesh.elements(els2,:));
     121                nods1=mesh.elements(el1,:);
     122                flag=setdiff(nods1,mesh.elements(els2,:));
    108123                for j=1:3,
    109124                        nods=nods1; nods(j)=[];
    110125                        if any(ismember(flag,nods)),
    111126                                segments(count,:)=[nods el1];
    112                                 ord1=find(nods(1)==md.mesh.elements(el1,:));
    113                                 ord2=find(nods(2)==md.mesh.elements(el1,:));
     127                                ord1=find(nods(1)==mesh.elements(el1,:));
     128                                ord2=find(nods(2)==mesh.elements(el1,:));
    114129                                if ( (ord1==1 & ord2==2) | (ord1==2 & ord2==3) | (ord1==3 & ord2==1) ),
    115130                                        temp=segments(count,1);
  • issm/trunk-jpl/src/m/model/modelextract.m

    r12576 r12612  
    210210                md2.mesh.segments=contourenvelope(md2);
    211211                md2.mesh.vertexonboundary=zeros(numberofvertices2,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
     212        else
     213                %First do the connectivity for the contourenvelope in 2d
     214                md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d);
     215                md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity);
     216                md2.mesh.segments=contourenvelope(md2);
     217                md2.mesh.vertexonboundary=zeros(numberofvertices2/md2.mesh.numberoflayers,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
     218                md2.mesh.vertexonboundary=repmat(md2.mesh.vertexonboundary,md2.mesh.numberoflayers,1);
     219                %Then do it for 3d as usual
     220                md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
     221                md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
    212222        end
    213223
Note: See TracChangeset for help on using the changeset viewer.