Ignore:
Timestamp:
02/19/16 16:26:56 (9 years ago)
Author:
dlcheng
Message:

ADD: mesh3dsurface python version. CHG: gmshplanet python fscanf translations and verification

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/mesh/planet/gmsh/gmshplanet.py

    r20177 r20223  
    44from numpy import *
    55from pairoptions import *
     6from mesh3dsurface import *
     7import subprocess
    68
    79def gmshplanet(*varargin):
     
    3032
    3133        #initialize mesh:
    32         #mesh=mesh3dsurface()
    33         mesh=mesh2d()
     34        mesh=mesh3dsurface()
     35       
    3436
    3537        #create .geo file:  {{{
     
    4446        fid.write('resolution=%g;\n'%resolution)
    4547        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')
    8486        fid.write('Physical Volume(2) = 30;\n')
    8587        fid.close()
     
    108110        #call gmsh
    109111        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)
    111113        else:
    112114                #call gmsh
    113                 eval('!gmsh -tol 1e-8 -2 sphere.geo')
     115                subprocess.call('gmsh -tol 1e-8 -2 sphere.geo',shell=True)
    114116
    115117        #import mesh:  {{{
     
    117119
    118120        #Get Mesh format
    119         A=fscanf(fid,'%s',1)
     121        A=fid.readline().strip()
    120122        if not strcmp(A,'$MeshFormat'):
    121123                raise RuntimeError(['Expecting $MeshFormat (', A, ')'])
    122124
    123         A=fscanf(fid,'%f %i %i',[1, 3])
    124         A=fscanf(fid,'%s',1)
     125        A=fid.readline().split()
     126        A=fid.readline().strip()
    125127        if not strcmp(A,'$EndMeshFormat'):
    126128                raise RuntimeError(['Expecting $EndMeshFormat (', A, ')'])
    127129
    128130        #Nodes
    129         A=fscanf(fid,'%s',1)
     131        A=fid.readline().strip()
    130132        if not strcmp(A,'$Nodes'):
    131133                raise RuntimeError(['Expecting $Nodes (', A, ')'])
    132134
    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])
    138144
    139         A=fscanf(fid,'%s',1)
     145        A=fid.readline().strip()
    140146        if not strcmp(A,'$EndNodes'):
    141147                raise RuntimeError(['Expecting $EndNodes (', A, ')'])
    142148
    143149        #Elements
    144         A=fscanf(fid,'%s',1)
     150        A=fid.readline().strip()
    145151        if not strcmp(A,'$Elements'):
    146152                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()
    151159        if not strcmp(A,'$EndElements'):
    152160                raise RuntimeError(['Expecting $EndElements (', A, ')'])
     
    156164        #figure out other fields in mesh3dsurface:
    157165        mesh.r=sqrt(mesh.x**2+mesh.y**2+mesh.z**2)
    158         mesh.lat = asin(mesh.z/mesh.r)/pi*180
    159         mesh.long = atan2(mesh.y,mesh.x)/pi*180
     166        mesh.lat = arcsin(mesh.z/mesh.r)/pi*180
     167        mesh.long = arctan2(mesh.y,mesh.x)/pi*180
    160168
    161169        #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)
    164171
    165172        #return mesh:
Note: See TracChangeset for help on using the changeset viewer.