1 |
# $Id:$ |
2 |
|
3 |
""" |
4 |
Geometrical Elementries |
5 |
|
6 |
the concept is inspired by gmsh and very much focused on the fact that |
7 |
the classes are used to wrk with gmsh. |
8 |
|
9 |
@var __author__: name of author |
10 |
@var __copyright__: copyrights |
11 |
@var __license__: licence agreement |
12 |
@var __url__: url entry point on documentation |
13 |
@var __version__: version |
14 |
@var __date__: date of the version |
15 |
""" |
16 |
|
17 |
|
18 |
__author__="Lutz Gross, l.gross@uq.edu.au" |
19 |
__copyright__=""" Copyright (c) 2006 by ACcESS MNRF |
20 |
http://www.access.edu.au |
21 |
Primary Business: Queensland, Australia""" |
22 |
__license__="""Licensed under the Open Software License version 3.0 |
23 |
http://www.opensource.org/licenses/osl-3.0.php""" |
24 |
__url__="http://www.iservo.edu.au/esys/escript" |
25 |
__version__="$Revision:$" |
26 |
__date__="$Date:$" |
27 |
|
28 |
from primitives import Primitive, PrimitiveStack |
29 |
from datetime import date |
30 |
import tempfile |
31 |
import os |
32 |
|
33 |
class Design(object): |
34 |
""" |
35 |
template for elementary geometrical object |
36 |
""" |
37 |
def __init__(self,dim=3,scale=1.,element_order=1,keep_tmp_files=False): |
38 |
""" |
39 |
""" |
40 |
self.__items=[] |
41 |
self.setScale(scale) |
42 |
self.setDim(dim) |
43 |
self.setElementOrder(element_order) |
44 |
self.setKeepTmpFiles(keep_tmp_files) |
45 |
def addPrimitive(self,item): |
46 |
self.addPrimitives(item) |
47 |
def addPrimitives(self,*items): |
48 |
for i in range(len(items)): |
49 |
if not isinstance(items[i],Primitive): |
50 |
raise TypeError("%s-th argument is not a Primitive object"%i) |
51 |
for i in items: |
52 |
self.__items.append(i) |
53 |
def setKeepTmpFiles(self,flag=None): |
54 |
if flag==None: |
55 |
if self.__keep_tmp_files==True: |
56 |
self.__keep_tmp_files=False |
57 |
else: |
58 |
self.__keep_tmp_files=True |
59 |
else: |
60 |
self.__keep_tmp_files=flag |
61 |
def keepTmpFiles(self,scale=1.): |
62 |
return self.__keep_tmp_files |
63 |
def setScale(self,scale=1.): |
64 |
self.__scale=scale |
65 |
def getScale(self,scale=1.): |
66 |
return self.__scale |
67 |
def setDim(self,dim=3): |
68 |
self.__dim=dim |
69 |
def getDim(self,dim=3): |
70 |
return self.__dim |
71 |
def setElementOrder(self,order=1): |
72 |
self.__order=order |
73 |
def getElementOrder(self,order=1): |
74 |
return self.__order |
75 |
def getPrimitives(self): |
76 |
return self.__items |
77 |
def getGmshScript(self): |
78 |
ps=PrimitiveStack(*tuple(self.getPrimitives())) |
79 |
return "// generated by esys.pycad\nscale = %s;\n%s"%(self.getScale(),ps.getGmshCommands()) |
80 |
def writeGmshScript(self,file): |
81 |
file.write(self.getGmshScript()) |
82 |
def writeGmshMesh(self,filename): |
83 |
scriptname=tempfile.mkstemp(suffix=".geo")[1] |
84 |
self.writeGmshScript(open(scriptname,"w")) |
85 |
exe="gmsh -%s -smooth 2 -optimize -v 0 -order %s -o %s %s"%(self.getDim(),self.getElementOrder(),filename,scriptname) |
86 |
os.system(exe) |
87 |
if not self.keepTmpFiles(): os.unlink(scriptname) |
88 |
return exe |
89 |
def writeFinleyMesh(self,filename): |
90 |
mshname=tempfile.mkstemp(suffix=".msh")[1] |
91 |
exe=self.writeGmshMesh(mshname) |
92 |
f=open(mshname,"r") |
93 |
line=f.readline().split() |
94 |
while len(line)>0: |
95 |
print line |
96 |
line=f.readline().split() |
97 |
if not self.keepTmpFiles(): os.unlink(mshname) |
98 |
return exe |