1 """Data structures in Foam-Files that can't be directly represented by Python-Structures"""
2
3 import FoamFileGenerator
4 from copy import deepcopy
5 import string,math
6
9 return "'"+str(self)+"'"
10
11
12 -class Field(FoamDataType):
14 self.val=val
15 self.name=name
16 if self.name==None:
17 self.uniform=True
18 elif type(val) in[list,UnparsedList]:
19 self.uniform=False
20
29
31 if other==None:
32 return 1
33 if self.uniform!=other.uniform:
34 return cmp(self.uniform,other.uniform)
35 elif self.name!=other.name:
36 return cmp(self.name,other.name)
37 else:
38 return cmp(self.val,other.val)
39
41 assert(not self.uniform)
42 return self.val[key]
43
45 assert(not self.uniform)
46 self.val[key]=value
47
50
53
58
61 assert(len(dims)==7)
62 self.dims=list(dims)
63
65 result="[ "
66 for v in self.dims:
67 result+=str(v)+" "
68 result+="]"
69 return result
70
72 if other==None:
73 return 1
74 return cmp(self.dims,other.dims)
75
78
81
85
87 return "("+string.join(map(lambda v:"%g"%v,self.vals))+")"
88
90 if other==None:
91 return 1
92 return cmp(self.vals,other.vals)
93
96
99
101 return len(self.vals)
102
106
108 x=self
109 if type(y)==Vector:
110 return Vector(x[0]+y[0],x[1]+y[1],x[2]+y[2])
111 elif type(y) in [int,float,long]:
112 return Vector(x[0]+y,x[1]+y,x[2]+y)
113 else:
114 return NotImplemented
115
117 x=self
118 if type(y) in [int,float,long]:
119 return Vector(x[0]+y,x[1]+y,x[2]+y)
120 else:
121 return NotImplemented
122
124 x=self
125 if type(y)==Vector:
126 return Vector(x[0]-y[0],x[1]-y[1],x[2]-y[2])
127 elif type(y) in [int,float,long]:
128 return Vector(x[0]-y,x[1]-y,x[2]-y)
129 else:
130 return NotImplemented
131
133 x=self
134 if type(y) in [int,float,long]:
135 return Vector(y-x[0],y-x[1],y-x[2])
136 else:
137 return NotImplemented
138
140 x=self
141 if type(y)==Vector:
142 return Vector(x[0]*y[0],x[1]*y[1],x[2]*y[2])
143 elif type(y) in [int,float,long]:
144 return Vector(x[0]*y,x[1]*y,x[2]*y)
145 else:
146 return NotImplemented
147
149 x=self
150 if type(y) in [int,float,long]:
151 return Vector(y*x[0],y*x[1],y*x[2])
152 else:
153 return NotImplemented
154
156 x=self
157 if type(y)==Vector:
158 return Vector(x[0]/y[0],x[1]/y[1],x[2]/y[2])
159 elif type(y) in [int,float,long]:
160 return Vector(x[0]/y,x[1]/y,x[2]/y)
161 else:
162 return NotImplemented
163
165 x=self
166 if type(y)==Vector:
167 return Vector(x[1]*y[2]-x[2]*y[1],
168 x[2]*y[0]-x[0]*y[2],
169 x[0]*y[1]-x[1]*y[0])
170 else:
171 return NotImplemented
172
174 x=self
175 return math.sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])
176
178 x=self
179 return Vector(-x[0],-x[1],-x[2])
180
182 x=self
183 return Vector( x[0], x[1], x[2])
184
186 - def __init__(self,v1,v2,v3,v4,v5,v6,v7,v8,v9):
188
192
194 """A class that acts like a dictionary, but preserves the order
195 of the entries. Used to beautify the output"""
196
198 dict.__init__(self)
199 self._order=[]
200 self._decoration={}
201
203 dict.__setitem__(self,key,value)
204 if key not in self._order:
205 self._order.append(key)
206
208 dict.__delitem__(self,key)
209 self._order.remove(key)
210 if key in self._decoration:
211 del self._decoration[key]
212
214 new=DictProxy()
215 for k in self._order:
216 new[k]=deepcopy(self[k],memo)
217 return new
218
220 if key in self:
221 self._decoration[key]=text
222
224 if key in self._decoration:
225 return " \t"+self._decoration[key]
226 else:
227 return ""
228
230 """Enables Tuples to be manipulated"""
231
234
236 """A class that encapsulates an unparsed string"""
237
240
243
245 """A class that encapsulates a list that was not parsed for
246 performance reasons"""
247
249 self.data=data
250 self.length=lngth
251
254
256 return cmp(self.data,other.data)
257