1 |
gross |
899 |
# $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 |