- Timestamp:
- 01/31/19 07:34:11 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/py3/parameterization/contourenvelope.py
r19895 r23670 1 1 import os.path 2 import numpy 2 import numpy as np 3 3 import copy 4 4 from NodeConnectivity import NodeConnectivity … … 40 40 #Now, build the connectivity tables for this mesh. 41 41 #Computing connectivity 42 if n umpy.size(md.mesh.vertexconnectivity,axis=0)!=md.mesh.numberofvertices and numpy.size(md.mesh.vertexconnectivity,axis=0)!=md.mesh.numberofvertices2d:43 [md.mesh.vertexconnectivity]=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices)44 if n umpy.size(md.mesh.elementconnectivity,axis=0)!=md.mesh.numberofelements and numpy.size(md.mesh.elementconnectivity,axis=0)!=md.mesh.numberofelements2d:45 [md.mesh.elementconnectivity]=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity)42 if np.size(md.mesh.vertexconnectivity,axis=0)!=md.mesh.numberofvertices and np.size(md.mesh.vertexconnectivity,axis=0)!=md.mesh.numberofvertices2d: 43 md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices)[0] 44 if np.size(md.mesh.elementconnectivity,axis=0)!=md.mesh.numberofelements and np.size(md.mesh.elementconnectivity,axis=0)!=md.mesh.numberofelements2d: 45 md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity)[0] 46 46 47 47 #get nodes inside profile … … 65 65 #get flag list of elements and nodes inside the contour 66 66 nodein=ContourToMesh(elements,x,y,file,'node',1) 67 elemin=(n umpy.sum(nodein(elements),axis=1)==numpy.size(elements,axis=1))67 elemin=(np.sum(nodein(elements),axis=1)==np.size(elements,axis=1)) 68 68 #modify element connectivity 69 elemout=n umpy.nonzero(numpy.logical_not(elemin))[0]69 elemout=np.nonzero(np.logical_not(elemin))[0] 70 70 elementconnectivity[elemout,:]=0 71 elementconnectivity[n umpy.nonzero(m.ismember(elementconnectivity,elemout+1))]=071 elementconnectivity[np.nonzero(m.ismember(elementconnectivity,elemout+1))]=0 72 72 else: 73 73 #get flag list of elements and nodes inside the contour 74 nodein=n umpy.zeros(numberofvertices)75 elemin=n umpy.zeros(numberofelements)74 nodein=np.zeros(numberofvertices) 75 elemin=np.zeros(numberofelements) 76 76 77 pos=n umpy.nonzero(flags)77 pos=np.nonzero(flags) 78 78 elemin[pos]=1 79 79 nodein[elements[pos,:]-1]=1 80 80 81 81 #modify element connectivity 82 elemout=n umpy.nonzero(numpy.logical_not(elemin))[0]82 elemout=np.nonzero(np.logical_not(elemin))[0] 83 83 elementconnectivity[elemout,:]=0 84 elementconnectivity[n umpy.nonzero(m.ismember(elementconnectivity,elemout+1))]=084 elementconnectivity[np.nonzero(m.ismember(elementconnectivity,elemout+1))]=0 85 85 86 86 #Find element on boundary … … 88 88 flag=copy.deepcopy(elementconnectivity) 89 89 if len(args)==1: 90 flag[n umpy.nonzero(flag)]=elemin[flag[numpy.nonzero(flag)]]91 elementonboundary=n umpy.logical_and(numpy.prod(flag,axis=1)==0,numpy.sum(flag,axis=1)>0)90 flag[np.nonzero(flag)]=elemin[flag[np.nonzero(flag)]] 91 elementonboundary=np.logical_and(np.prod(flag,axis=1)==0,np.sum(flag,axis=1)>0) 92 92 93 93 #Find segments on boundary 94 pos=n umpy.nonzero(elementonboundary)[0]95 num_segments=n umpy.size(pos)96 segments=n umpy.zeros((num_segments*3,3),int)94 pos=np.nonzero(elementonboundary)[0] 95 num_segments=np.size(pos) 96 segments=np.zeros((num_segments*3,3),int) 97 97 count=0 98 98 99 99 for el1 in pos: 100 els2=elementconnectivity[el1,n umpy.nonzero(elementconnectivity[el1,:])[0]]-1101 if n umpy.size(els2)>1:102 flag=n umpy.intersect1d(numpy.intersect1d(elements[els2[0],:],elements[els2[1],:]),elements[el1,:])100 els2=elementconnectivity[el1,np.nonzero(elementconnectivity[el1,:])[0]]-1 101 if np.size(els2)>1: 102 flag=np.intersect1d(np.intersect1d(elements[els2[0],:],elements[els2[1],:]),elements[el1,:]) 103 103 nods1=elements[el1,:] 104 nods1=n umpy.delete(nods1,numpy.nonzero(nods1==flag))104 nods1=np.delete(nods1,np.nonzero(nods1==flag)) 105 105 segments[count,:]=[nods1[0],nods1[1],el1+1] 106 106 107 ord1=n umpy.nonzero(nods1[0]==elements[el1,:])[0][0]108 ord2=n umpy.nonzero(nods1[1]==elements[el1,:])[0][0]107 ord1=np.nonzero(nods1[0]==elements[el1,:])[0][0] 108 ord2=np.nonzero(nods1[1]==elements[el1,:])[0][0] 109 109 110 110 #swap segment nodes if necessary … … 113 113 segments[count,0]=segments[count,1] 114 114 segments[count,1]=temp 115 segments[count,0:2]=n umpy.flipud(segments[count,0:2])115 segments[count,0:2]=np.flipud(segments[count,0:2]) 116 116 count+=1 117 117 else: 118 118 nods1=elements[el1,:] 119 flag=n umpy.setdiff1d(nods1,elements[els2,:])119 flag=np.setdiff1d(nods1,elements[els2,:]) 120 120 for j in range(0,3): 121 nods=n umpy.delete(nods1,j)122 if n umpy.any(m.ismember(flag,nods)):121 nods=np.delete(nods1,j) 122 if np.any(m.ismember(flag,nods)): 123 123 segments[count,:]=[nods[0],nods[1],el1+1] 124 ord1=n umpy.nonzero(nods[0]==elements[el1,:])[0][0]125 ord2=n umpy.nonzero(nods[1]==elements[el1,:])[0][0]124 ord1=np.nonzero(nods[0]==elements[el1,:])[0][0] 125 ord2=np.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] 128 128 segments[count,0]=segments[count,1] 129 129 segments[count,1]=temp 130 segments[count,0:2]=n umpy.flipud(segments[count,0:2])130 segments[count,0:2]=np.flipud(segments[count,0:2]) 131 131 count+=1 132 132 segments=segments[0:count,:]
Note:
See TracChangeset
for help on using the changeset viewer.