Changeset 20223 for issm/trunk-jpl/src/m/mesh/planet/gmsh/gmshplanet.py
- Timestamp:
- 02/19/16 16:26:56 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/mesh/planet/gmsh/gmshplanet.py
r20177 r20223 4 4 from numpy import * 5 5 from pairoptions import * 6 from mesh3dsurface import * 7 import subprocess 6 8 7 9 def gmshplanet(*varargin): … … 30 32 31 33 #initialize mesh: 32 #mesh=mesh3dsurface()33 mesh=mesh2d()34 mesh=mesh3dsurface() 35 34 36 35 37 #create .geo file: {{{ … … 44 46 fid.write('resolution=%g;\n'%resolution) 45 47 fid.write('radius=%g;\n'%radius) 46 fid.write('Point(1) = [0.0,0.0,0.0,resolution];\n')47 fid.write('Point(2) = [radius,0.0,0.0,resolution];\n')48 fid.write('Point(3) = [0,radius,0.0,resolution];\n')49 fid.write('Circle(1) = [2,1,3];\n')50 fid.write('Point(4) = [-radius,0,0.0,resolution];\n')51 fid.write('Point(5) = [0,-radius,0.0,resolution];\n')52 fid.write('Circle(2) = [3,1,4];\n')53 fid.write('Circle(3) = [4,1,5];\n')54 fid.write('Circle(4) = [5,1,2];\n')55 fid.write('Point(6) = [0,0,-radius,resolution];\n')56 fid.write('Point(7) = [0,0,radius,resolution];\n')57 fid.write('Circle(5) = [3,1,6];\n')58 fid.write('Circle(6) = [6,1,5];\n')59 fid.write('Circle(7) = [5,1,7];\n')60 fid.write('Circle(8) = [7,1,3];\n')61 fid.write('Circle(9) = [2,1,7];\n')62 fid.write('Circle(10) = [7,1,4];\n')63 fid.write('Circle(11) = [4,1,6];\n')64 fid.write('Circle(12) = [6,1,2];\n')65 fid.write('Line Loop(13) = [2,8,-10];\n')66 fid.write('Ruled Surface(14) = [13];\n')67 fid.write('Line Loop(15) = [10,3,7];\n')68 fid.write('Ruled Surface(16) = [15];\n')69 fid.write('Line Loop(17) = [-8,-9,1];\n')70 fid.write('Ruled Surface(18) = [17];\n')71 fid.write('Line Loop(19) = [-11,-2,5];\n')72 fid.write('Ruled Surface(20) = [19];\n')73 fid.write('Line Loop(21) = [-5,-12,-1];\n')74 fid.write('Ruled Surface(22) = [21];\n')75 fid.write('Line Loop(23) = [-3,11,6];\n')76 fid.write('Ruled Surface(24) = [23];\n')77 fid.write('Line Loop(25) = [-7,4,9];\n')78 fid.write('Ruled Surface(26) = [25];\n')79 fid.write('Line Loop(27) = [-4,12,-6];\n')80 fid.write('Ruled Surface(28) = [27];\n')81 fid.write('Surface Loop(29) = [28,26,16,14,20,24,22,18];\n')82 fid.write('Volume(30) = [29];\n')83 fid.write('Physical Surface(1) = [28,26,16,14,20,24,22,18];\n')48 fid.write('Point(1) = {0.0,0.0,0.0,resolution};\n') 49 fid.write('Point(2) = {radius,0.0,0.0,resolution};\n') 50 fid.write('Point(3) = {0,radius,0.0,resolution};\n') 51 fid.write('Circle(1) = {2,1,3};\n') 52 fid.write('Point(4) = {-radius,0,0.0,resolution};\n') 53 fid.write('Point(5) = {0,-radius,0.0,resolution};\n') 54 fid.write('Circle(2) = {3,1,4};\n') 55 fid.write('Circle(3) = {4,1,5};\n') 56 fid.write('Circle(4) = {5,1,2};\n') 57 fid.write('Point(6) = {0,0,-radius,resolution};\n') 58 fid.write('Point(7) = {0,0,radius,resolution};\n') 59 fid.write('Circle(5) = {3,1,6};\n') 60 fid.write('Circle(6) = {6,1,5};\n') 61 fid.write('Circle(7) = {5,1,7};\n') 62 fid.write('Circle(8) = {7,1,3};\n') 63 fid.write('Circle(9) = {2,1,7};\n') 64 fid.write('Circle(10) = {7,1,4};\n') 65 fid.write('Circle(11) = {4,1,6};\n') 66 fid.write('Circle(12) = {6,1,2};\n') 67 fid.write('Line Loop(13) = {2,8,-10};\n') 68 fid.write('Ruled Surface(14) = {13};\n') 69 fid.write('Line Loop(15) = {10,3,7};\n') 70 fid.write('Ruled Surface(16) = {15};\n') 71 fid.write('Line Loop(17) = {-8,-9,1};\n') 72 fid.write('Ruled Surface(18) = {17};\n') 73 fid.write('Line Loop(19) = {-11,-2,5};\n') 74 fid.write('Ruled Surface(20) = {19};\n') 75 fid.write('Line Loop(21) = {-5,-12,-1};\n') 76 fid.write('Ruled Surface(22) = {21};\n') 77 fid.write('Line Loop(23) = {-3,11,6};\n') 78 fid.write('Ruled Surface(24) = {23};\n') 79 fid.write('Line Loop(25) = {-7,4,9};\n') 80 fid.write('Ruled Surface(26) = {25};\n') 81 fid.write('Line Loop(27) = {-4,12,-6};\n') 82 fid.write('Ruled Surface(28) = {27};\n') 83 fid.write('Surface Loop(29) = {28,26,16,14,20,24,22,18};\n') 84 fid.write('Volume(30) = {29};\n') 85 fid.write('Physical Surface(1) = {28,26,16,14,20,24,22,18};\n') 84 86 fid.write('Physical Volume(2) = 30;\n') 85 87 fid.close() … … 108 110 #call gmsh 109 111 if options.exist('refine'): 110 eval('!gmsh -tol 1e-8 -2 sphere.geo -bgm sphere.pos')112 subprocess.call('gmsh -tol 1e-8 -2 sphere.geo -bgm sphere.pos',shell=True) 111 113 else: 112 114 #call gmsh 113 eval('!gmsh -tol 1e-8 -2 sphere.geo')115 subprocess.call('gmsh -tol 1e-8 -2 sphere.geo',shell=True) 114 116 115 117 #import mesh: {{{ … … 117 119 118 120 #Get Mesh format 119 A=f scanf(fid,'%s',1)121 A=fid.readline().strip() 120 122 if not strcmp(A,'$MeshFormat'): 121 123 raise RuntimeError(['Expecting $MeshFormat (', A, ')']) 122 124 123 A=f scanf(fid,'%f %i %i',[1, 3])124 A=f scanf(fid,'%s',1)125 A=fid.readline().split() 126 A=fid.readline().strip() 125 127 if not strcmp(A,'$EndMeshFormat'): 126 128 raise RuntimeError(['Expecting $EndMeshFormat (', A, ')']) 127 129 128 130 #Nodes 129 A=f scanf(fid,'%s',1)131 A=fid.readline().strip() 130 132 if not strcmp(A,'$Nodes'): 131 133 raise RuntimeError(['Expecting $Nodes (', A, ')']) 132 134 133 mesh.numberofvertices=fscanf(fid,'%i',1) 134 A=fscanf(fid,'%i %f %f %f',[4, mesh.numberofvertices]) 135 mesh.x = transpose(A[1,:]) 136 mesh.y = transpose(A[2,:]) 137 mesh.z = transpose(A[3,:]) 135 mesh.numberofvertices=int(fid.readline().strip()) 136 mesh.x=empty(mesh.numberofvertices) 137 mesh.y=empty(mesh.numberofvertices) 138 mesh.z=empty(mesh.numberofvertices) 139 for i in range(mesh.numberofvertices): 140 A=fid.readline().split() 141 mesh.x[i]=float(A[0]) 142 mesh.y[i]=float(A[1]) 143 mesh.z[i]=float(A[2]) 138 144 139 A=f scanf(fid,'%s',1)145 A=fid.readline().strip() 140 146 if not strcmp(A,'$EndNodes'): 141 147 raise RuntimeError(['Expecting $EndNodes (', A, ')']) 142 148 143 149 #Elements 144 A=f scanf(fid,'%s',1)150 A=fid.readline().strip() 145 151 if not strcmp(A,'$Elements'): 146 152 raise RuntimeError(['Expecting $Elements (', A, ')']) 147 mesh.numberofelements=fscanf(fid,'%i',1) 148 A=fscanf(fid,'%i %i %i %i %i %i %i %i',[8, mesh.numberofelements]) 149 mesh.elements=transpose(A[6:8,:]) 150 A=fscanf(fid,'%s',1) 153 mesh.numberofelements=int(fid.readline().strip()) 154 mesh.elements=empty([mesh.numberofelements,3]) 155 for i in range(mesh.numberofelements): 156 A=fid.readline().split() 157 mesh.elements[i]=[float(A[5]),float(A[6]),float(A[7])] 158 A=fid.readline().strip() 151 159 if not strcmp(A,'$EndElements'): 152 160 raise RuntimeError(['Expecting $EndElements (', A, ')']) … … 156 164 #figure out other fields in mesh3dsurface: 157 165 mesh.r=sqrt(mesh.x**2+mesh.y**2+mesh.z**2) 158 mesh.lat = a sin(mesh.z/mesh.r)/pi*180159 mesh.long = a tan2(mesh.y,mesh.x)/pi*180166 mesh.lat = arcsin(mesh.z/mesh.r)/pi*180 167 mesh.long = arctan2(mesh.y,mesh.x)/pi*180 160 168 161 169 #erase files: 162 eval('!rm -rf sphere.geo sphere.msh sphere.pos') 163 170 subprocess.call('rm -rf sphere.geo sphere.msh sphere.pos',shell=True) 164 171 165 172 #return mesh:
Note:
See TracChangeset
for help on using the changeset viewer.