/[escript]/trunk/pycad/py_src/gmsh.py
ViewVC logotype

Diff of /trunk/pycad/py_src/gmsh.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 999 by gross, Tue Feb 27 08:12:37 2007 UTC revision 1123 by gross, Thu May 3 04:13:52 2007 UTC
# Line 25  __date__="$Date:$" Line 25  __date__="$Date:$"
25  import design  import design
26  import tempfile  import tempfile
27  import os  import os
28    from primitives import Point, Spline, BezierCurve, BSpline, Line, Arc, CurveLoop, RuledSurface, PlaneSurface, SurfaceLoop, Volume, PropertySet
29    
30  class Design(design.Design):  class Design(design.Design):
31      """      """
# Line 74  class Design(design.Design): Line 75  class Design(design.Design):
75         returns the name of the file for the gmsh msh         returns the name of the file for the gmsh msh
76         """         """
77         return self.__mshname         return self.__mshname
78      def setOptions(self,algorithm=None,optimize_quality=True,smoothing=1):      def setOptions(self,algorithm=None,optimize_quality=True,smoothing=1, curvature_based_element_size=False):
79          """          """
80          sets options for the mesh generator          sets options for the mesh generator
81          """          """
82          if algorithm==None: algorithm=self.DELAUNAY          if algorithm==None: algorithm=self.DELAUNAY
83            self.__curvature_based_element_size=curvature_based_element_size
84          self.__algo=algorithm          self.__algo=algorithm
85          self.__optimize_quality=optimize_quality          self.__optimize_quality=optimize_quality
86          self.__smoothing=smoothing          self.__smoothing=smoothing
# Line 89  class Design(design.Design): Line 91  class Design(design.Design):
91          if not self.keepFiles():          if not self.keepFiles():
92                 os.unlink(self.getScriptFileName())                 os.unlink(self.getScriptFileName())
93                 os.unlink(self.getMeshFileName())                 os.unlink(self.getMeshFileName())
     def getScriptString(self):  
         """  
         returns the gmsh script to generate the mesh  
         """  
         prim=self.getAllPrimitives()  
         out="// generated by esys.pycad\n"  
         for p in prim:  
            out+=p.getGmshCommand(self.getElementSize())+"\n"  
         return out  
94      def getCommandString(self):      def getCommandString(self):
95          """          """
96          returns the gmsh comand          returns the gmsh comand
# Line 106  class Design(design.Design): Line 99  class Design(design.Design):
99                opt="-optimize "                opt="-optimize "
100          else:          else:
101                opt=""                opt=""
102          exe="gmsh -%s -algo %s -clcurv -smooth %s %s -v 0 -order %s -o %s %s"%(self.getDim(),          if self.__curvature_based_element_size:
103                  clcurv="-clcurv "
104            else:
105                  clcurv=""
106    
107            exe="gmsh -%s -algo %s %s-smooth %s %s-v 0 -order %s -o %s %s"%(self.getDim(),
108                                                                         self.__algo,                                                                         self.__algo,
109                                                                           clcurv,
110                                                                         self.__smoothing,                                                                         self.__smoothing,
111                                                                         opt,                                                                         opt,
112                                                                         self.getElementOrder(),                                                                         self.getElementOrder(),
# Line 120  class Design(design.Design): Line 119  class Design(design.Design):
119          a mesh file name in gmsh format is returned.          a mesh file name in gmsh format is returned.
120          """          """
121          open(self.getScriptFileName(),"w").write(self.getScriptString())          open(self.getScriptFileName(),"w").write(self.getScriptString())
122          os.system(self.getCommandString())          cmd = self.getCommandString()
123          return self.getMeshFileName()          ret = os.system(cmd) / 256
124        if ret > 0:
125          raise RuntimeError, "Could not build mesh: %s"%cmd
126        else:
127              return self.getMeshFileName()
128    
129        def getScriptString(self):
130            """
131            returns the gmsh script to generate the mesh
132            """
133            h=self.getElementSize()
134            out="// generated by esys.pycad\n"
135            for prim in self.getAllPrimitives():
136               p=prim.getUnderlyingPrimitive()
137               if isinstance(p, Point):
138                   c=p.getCoordinates()
139                   out+="Point(%s) = {%s , %s, %s , %s };\n"%(p.getID(),c[0],c[1],c[2], p.getLocalScale()*h)
140            
141               elif isinstance(p, Spline):
142                   out+="Spline(%s) = {%s};\n"%(p.getID(),self.__mkArgs(p.getControlPoints()))
143        
144               elif isinstance(p, BezierCurve):
145                   out+="Bezier(%s) = {%s};\n"%(p.getID(),self.__mkArgs(p.getControlPoints()))
146    
147               elif isinstance(p, BSpline):
148                   out+="BSpline(%s) = {%s};\n"%(p.getID(),self.__mkArgs(p.getControlPoints()))
149    
150               elif isinstance(p, Line):
151                   out+="Line(%s) = {%s, %s};\n"%(p.getID(),p.getStartPoint().getDirectedID(),p.getEndPoint().getDirectedID())
152    
153               elif isinstance(p, Arc):
154                  out+="Circle(%s) = {%s, %s, %s};\n"%(p.getID(),p.getStartPoint().getDirectedID(),p.getCenterPoint().getDirectedID(),p.getEndPoint().getDirectedID())
155          
156               elif isinstance(p, CurveLoop):
157                   out+="Line Loop(%s) = {%s};\n"%(p.getID(),self.__mkArgs(p.getCurves()))
158          
159               elif isinstance(p, RuledSurface):
160                   out+="Ruled Surface(%s) = {%s};\n"%(p.getID(),p.getBoundaryLoop().getDirectedID())
161          
162               elif isinstance(p, PlaneSurface):
163                   line=self.__mkArgs(p.getHoles())
164                   if len(line)>0:
165                     out+="Plane Surface(%s) = {%s, %s};\n"%(p.getID(),p.getBoundaryLoop().getDirectedID(), line)
166                   else:
167                     out+="Plane Surface(%s) = {%s};\n"%(p.getID(),p.getBoundaryLoop().getDirectedID())
168          
169               elif isinstance(p, SurfaceLoop):
170                   out+="Surface Loop(%s) = {%s};\n"%(p.getID(),self.__mkArgs(p.getSurfaces()))
171          
172               elif isinstance(p, Volume):
173                   line=self.__mkArgs(p.getHoles())
174                   if len(line)>0:
175                     out+="Volume(%s) = {%s, %s};\n"%(p.getID(),p.getSurfaceLoop().getDirectedID(), line)
176                   else:
177                     out+="Volume(%s) = {%s};\n"%(p.getID(),p.getSurfaceLoop().getDirectedID())
178    
179               elif isinstance(p, PropertySet):
180                   if p.getNumItems()>0:
181                  dim=p.getDim()
182                      line="Physical "
183                      if dim==0:
184                          line+="Point"
185                      elif dim==1:
186                          line+="Line"
187                      elif dim==2:
188                          line+="Surface"
189                      else:
190                          line+="Volume"
191                      out+=line+"(" + str(p.getID()) + ") = {"+self.__mkArgs(p.getItems())+"};\n"
192    
193               else:
194                   raise TypeError("unable to pass %s object to gmsh."%str(type(p)))
195            return out
196    
197    
198        def __mkArgs(self,args):
199            line=""
200            for i in args:
201                if len(line)>0:
202                    line+=", %s"%i.getDirectedID()
203                else:
204                    line="%s"%i.getDirectedID()
205            return line

Legend:
Removed from v.999  
changed lines
  Added in v.1123

  ViewVC Help
Powered by ViewVC 1.1.26