@@ -141,31 +141,36 @@ def xi_tetrahedron(eta):
141141
142142
143143class ExpansionSet (object ):
144- def __new__ (cls , ref_el , * args , ** kwargs ):
144+ def __new__ (cls , * args , ** kwargs ):
145145 """Returns an ExpansionSet instance appopriate for the given
146146 reference element."""
147147 if cls is not ExpansionSet :
148148 return super (ExpansionSet , cls ).__new__ (cls )
149+ ref_el = args [0 ]
149150 if ref_el .get_shape () == reference_element .POINT :
150- return PointExpansionSet (ref_el )
151+ return PointExpansionSet (* args , ** kwargs )
151152 elif ref_el .get_shape () == reference_element .LINE :
152- return LineExpansionSet (ref_el )
153+ return LineExpansionSet (* args , ** kwargs )
153154 elif ref_el .get_shape () == reference_element .TRIANGLE :
154- return TriangleExpansionSet (ref_el )
155+ return TriangleExpansionSet (* args , ** kwargs )
155156 elif ref_el .get_shape () == reference_element .TETRAHEDRON :
156- return TetrahedronExpansionSet (ref_el )
157+ return TetrahedronExpansionSet (* args , ** kwargs )
157158 else :
158159 raise ValueError ("Invalid reference element type." )
159160
160- def __init__ (self , ref_el ):
161+ def __init__ (self , ref_el , scale = None ):
162+ if isinstance (scale , str ) and scale .lower () == "l2 piola" :
163+ scale = 1.0 / ref_el .volume ()
164+ elif scale is None :
165+ scale = math .sqrt (1.0 / ref_el .volume ())
161166 self .ref_el = ref_el
167+ self .scale = scale
162168 dim = ref_el .get_spatial_dimension ()
163169 self .base_ref_el = reference_element .default_simplex (dim )
164170 v1 = ref_el .get_vertices ()
165171 v2 = self .base_ref_el .get_vertices ()
166172 self .A , self .b = reference_element .make_affine_mapping (v1 , v2 )
167173 self .mapping = lambda x : numpy .dot (self .A , x ) + self .b
168- self .scale = numpy .sqrt (1.0 / ref_el .volume ())
169174 self ._dmats_cache = {}
170175
171176 def get_num_members (self , n ):
@@ -266,10 +271,10 @@ def tabulate_jet(self, n, pts, order=1):
266271
267272class PointExpansionSet (ExpansionSet ):
268273 """Evaluates the point basis on a point reference element."""
269- def __init__ (self , ref_el ):
274+ def __init__ (self , ref_el , ** kwargs ):
270275 if ref_el .get_spatial_dimension () != 0 :
271276 raise ValueError ("Must have a point" )
272- super (PointExpansionSet , self ).__init__ (ref_el )
277+ super (PointExpansionSet , self ).__init__ (ref_el , ** kwargs )
273278
274279 def tabulate (self , n , pts ):
275280 """Returns a numpy array A[i,j] = phi_i(pts[j]) = 1.0."""
@@ -279,10 +284,10 @@ def tabulate(self, n, pts):
279284
280285class LineExpansionSet (ExpansionSet ):
281286 """Evaluates the Legendre basis on a line reference element."""
282- def __init__ (self , ref_el ):
287+ def __init__ (self , ref_el , ** kwargs ):
283288 if ref_el .get_spatial_dimension () != 1 :
284289 raise Exception ("Must have a line" )
285- super (LineExpansionSet , self ).__init__ (ref_el )
290+ super (LineExpansionSet , self ).__init__ (ref_el , ** kwargs )
286291
287292 def _tabulate (self , n , pts , order = 0 ):
288293 """Returns a tuple of (vals, derivs) such that
@@ -306,18 +311,18 @@ def _tabulate(self, n, pts, order=0):
306311class TriangleExpansionSet (ExpansionSet ):
307312 """Evaluates the orthonormal Dubiner basis on a triangular
308313 reference element."""
309- def __init__ (self , ref_el ):
314+ def __init__ (self , ref_el , ** kwargs ):
310315 if ref_el .get_spatial_dimension () != 2 :
311316 raise Exception ("Must have a triangle" )
312- super (TriangleExpansionSet , self ).__init__ (ref_el )
317+ super (TriangleExpansionSet , self ).__init__ (ref_el , ** kwargs )
313318
314319
315320class TetrahedronExpansionSet (ExpansionSet ):
316321 """Collapsed orthonormal polynomial expansion on a tetrahedron."""
317- def __init__ (self , ref_el ):
322+ def __init__ (self , ref_el , ** kwargs ):
318323 if ref_el .get_spatial_dimension () != 3 :
319324 raise Exception ("Must be a tetrahedron" )
320- super (TetrahedronExpansionSet , self ).__init__ (ref_el )
325+ super (TetrahedronExpansionSet , self ).__init__ (ref_el , ** kwargs )
321326
322327
323328def polynomial_dimension (ref_el , degree ):
0 commit comments