Changeset 17602
- Timestamp:
- 03/31/14 09:24:22 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/parameterization/contourenvelope.py
r17588 r17602 46 46 47 47 #get nodes inside profile 48 mesh.elementconnectivity=copy.deepcopy(md.mesh.elementconnectivity)48 elementconnectivity=copy.deepcopy(md.mesh.elementconnectivity) 49 49 if m.strcmp(md.mesh.meshtype(),'2Dhorizontal'): 50 mesh.elements=copy.deepcopy(md.mesh.elements)51 mesh.x=copy.deepcopy(md.mesh.x)52 mesh.y=copy.deepcopy(md.mesh.y)53 mesh.numberofvertices=copy.deepcopy(md.mesh.numberofvertices)54 mesh.numberofelements=copy.deepcopy(md.mesh.numberofelements)50 elements=copy.deepcopy(md.mesh.elements) 51 x=copy.deepcopy(md.mesh.x) 52 y=copy.deepcopy(md.mesh.y) 53 numberofvertices=copy.deepcopy(md.mesh.numberofvertices) 54 numberofelements=copy.deepcopy(md.mesh.numberofelements) 55 55 else: 56 mesh.elements=copy.deepcopy(md.mesh.elements2d)57 mesh.x=copy.deepcopy(md.mesh.x2d)58 mesh.y=copy.deepcopy(md.mesh.y2d)59 mesh.numberofvertices=copy.deepcopy(md.mesh.numberofvertices2d)60 mesh.numberofelements=copy.deepcopy(md.mesh.numberofelements2d)56 elements=copy.deepcopy(md.mesh.elements2d) 57 x=copy.deepcopy(md.mesh.x2d) 58 y=copy.deepcopy(md.mesh.y2d) 59 numberofvertices=copy.deepcopy(md.mesh.numberofvertices2d) 60 numberofelements=copy.deepcopy(md.mesh.numberofelements2d) 61 61 62 62 if len(args)==1: … … 64 64 if isfile: 65 65 #get flag list of elements and nodes inside the contour 66 nodein=ContourToMesh( mesh.elements,mesh.x,mesh.y,file,'node',1)67 elemin=(numpy.sum(nodein( mesh.elements),axis=1)==numpy.size(mesh.elements,axis=1))66 nodein=ContourToMesh(elements,x,y,file,'node',1) 67 elemin=(numpy.sum(nodein(elements),axis=1)==numpy.size(elements,axis=1)) 68 68 #modify element connectivity 69 69 elemout=numpy.nonzero(numpy.logical_not(elemin))[0] 70 mesh.elementconnectivity[elemout,:]=071 mesh.elementconnectivity[numpy.nonzero(m.ismember(mesh.elementconnectivity,elemout+1))]=070 elementconnectivity[elemout,:]=0 71 elementconnectivity[numpy.nonzero(m.ismember(elementconnectivity,elemout+1))]=0 72 72 else: 73 73 #get flag list of elements and nodes inside the contour 74 nodein=numpy.zeros( mesh.numberofvertices)75 elemin=numpy.zeros( mesh.numberofelements)74 nodein=numpy.zeros(numberofvertices) 75 elemin=numpy.zeros(numberofelements) 76 76 77 77 pos=numpy.nonzero(flags) 78 78 elemin[pos]=1 79 nodein[ mesh.elements[pos,:]-1]=179 nodein[elements[pos,:]-1]=1 80 80 81 81 #modify element connectivity 82 82 elemout=numpy.nonzero(numpy.logical_not(elemin))[0] 83 mesh.elementconnectivity[elemout,:]=084 mesh.elementconnectivity[numpy.nonzero(m.ismember(mesh.elementconnectivity,elemout+1))]=083 elementconnectivity[elemout,:]=0 84 elementconnectivity[numpy.nonzero(m.ismember(elementconnectivity,elemout+1))]=0 85 85 86 86 #Find element on boundary 87 87 #First: find elements on the boundary of the domain 88 flag=copy.deepcopy( mesh.elementconnectivity)88 flag=copy.deepcopy(elementconnectivity) 89 89 if len(args)==1: 90 90 flag[numpy.nonzero(flag)]=elemin[flag[numpy.nonzero(flag)]] … … 98 98 99 99 for el1 in pos: 100 els2= mesh.elementconnectivity[el1,numpy.nonzero(mesh.elementconnectivity[el1,:])[0]]-1100 els2=elementconnectivity[el1,numpy.nonzero(elementconnectivity[el1,:])[0]]-1 101 101 if numpy.size(els2)>1: 102 flag=numpy.intersect1d(numpy.intersect1d( mesh.elements[els2[0],:],mesh.elements[els2[1],:]),mesh.elements[el1,:])103 nods1= mesh.elements[el1,:]102 flag=numpy.intersect1d(numpy.intersect1d(elements[els2[0],:],elements[els2[1],:]),elements[el1,:]) 103 nods1=elements[el1,:] 104 104 nods1=numpy.delete(nods1,numpy.nonzero(nods1==flag)) 105 105 segments[count,:]=[nods1[0],nods1[1],el1+1] 106 106 107 ord1=numpy.nonzero(nods1[0]== mesh.elements[el1,:])[0][0]108 ord2=numpy.nonzero(nods1[1]== mesh.elements[el1,:])[0][0]107 ord1=numpy.nonzero(nods1[0]==elements[el1,:])[0][0] 108 ord2=numpy.nonzero(nods1[1]==elements[el1,:])[0][0] 109 109 110 110 #swap segment nodes if necessary … … 116 116 count+=1 117 117 else: 118 nods1= mesh.elements[el1,:]119 flag=numpy.setdiff1d(nods1, mesh.elements[els2,:])118 nods1=elements[el1,:] 119 flag=numpy.setdiff1d(nods1,elements[els2,:]) 120 120 for j in xrange(0,3): 121 121 nods=numpy.delete(nods1,j) 122 122 if numpy.any(m.ismember(flag,nods)): 123 123 segments[count,:]=[nods[0],nods[1],el1+1] 124 ord1=numpy.nonzero(nods[0]== mesh.elements[el1,:])[0][0]125 ord2=numpy.nonzero(nods[1]== mesh.elements[el1,:])[0][0]124 ord1=numpy.nonzero(nods[0]==elements[el1,:])[0][0] 125 ord2=numpy.nonzero(nods[1]==elements[el1,:])[0][0] 126 126 if ( (ord1==0 and ord2==1) or (ord1==1 and ord2==2) or (ord1==2 and ord2==0) ): 127 127 temp=segments[count,0]
Note:
See TracChangeset
for help on using the changeset viewer.