Package PyFoam :: Package Basics :: Module DataStructures
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Basics.DataStructures

  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 
  6   
7 -class Field:
8 - def __init__(self,val,name=None):
9 self.val=val 10 self.name=name 11 if self.name==None: 12 self.uniform=True 13 else: 14 assert(type(val)==list) 15 self.uniform=False
16
17 - def __str__(self):
18 result="" 19 if self.uniform: 20 result+="uniform " 21 else: 22 result+="nonuniform "+self.name+" " 23 result+=str(FoamFileGenerator.FoamFileGenerator(self.val)) 24 return result
25
26 - def __cmp__(self,other):
27 if other==None: 28 return 1 29 if self.uniform!=other.uniform: 30 return cmp(self.uniform,other.uniform) 31 elif self.name!=other.name: 32 return cmp(self.name,other.name) 33 else: 34 return cmp(self.val,other.val)
35
36 - def __getitem__(self,key):
37 assert(not self.uniform) 38 return self.val[key]
39
40 - def __setitem__(self,key,value):
41 assert(not self.uniform) 42 self.val[key]=value
43
44 - def isUniform(self):
45 return self.uniform
46
47 - def value(self):
48 return self.val
49
50 - def setUniform(self,data):
51 self.val=data 52 self.uniform=True 53 self.name=None
54
55 -class Dimension:
56 - def __init__(self,*dims):
57 assert(len(dims)==7) 58 self.dims=list(dims)
59
60 - def __str__(self):
61 result="[ " 62 for v in self.dims: 63 result+=str(v)+" " 64 result+="]" 65 return result
66
67 - def __cmp__(self,other):
68 if other==None: 69 return 1 70 return cmp(self.dims,other.dims)
71
72 - def __getitem__(self,key):
73 return self.dims[key]
74
75 - def __setitem__(self,key,value):
76 self.dims[key]=value
77
78 -class FixedLength:
79 - def __init__(self,vals):
80 self.vals=vals[:]
81
82 - def __str__(self):
83 return "("+string.join(map(lambda v:"%g"%v,self.vals))+")"
84
85 - def __cmp__(self,other):
86 if other==None: 87 return 1 88 return cmp(self.vals,other.vals)
89
90 - def __getitem__(self,key):
91 return self.vals[key]
92
93 - def __setitem__(self,key,value):
94 self.vals[key]=value
95
96 -class Vector(FixedLength):
97 - def __init__(self,x,y,z):
98 FixedLength.__init__(self,[x,y,z])
99
100 -class Tensor(FixedLength):
101 - def __init__(self,v1,v2,v3,v4,v5,v6,v7,v8,v9):
102 FixedLength.__init__(self,[v1,v2,v3,v4,v5,v6,v7,v8,v9])
103
104 -class SymmTensor(FixedLength):
105 - def __init__(self,v1,v2,v3,v4,v5,v6):
106 FixedLength.__init__(self,[v1,v2,v3,v4,v5,v6])
107
108 -class DictProxy(dict):
109 """A class that acts like a dictionary, but preserves the order 110 of the entries. Used to beautify the output""" 111
112 - def __init__(self):
113 dict.__init__(self) 114 self._order=[]
115
116 - def __setitem__(self,key,value):
117 dict.__setitem__(self,key,value) 118 if key not in self._order: 119 self._order.append(key)
120
121 - def __delitem__(self,key):
122 dict.__delitem__(self,key) 123 self._order.remove(key)
124
125 - def __deepcopy__(self,memo):
126 new=DictProxy() 127 for k in self._order: 128 new[k]=deepcopy(self[k],memo) 129 return new
130