1414from  ..geometry  import  SetOfPoints 
1515from  ..piecewise_functions  import  PiecewiseFunction 
1616from  ..references  import  Reference 
17- from  ..symbols  import  x  as  x_variables 
17+ 
18+ 
19+ class  P1IsoP2Interval (CiarletElement ):
20+     """P1-iso-P2 finite element on an interval.""" 
21+ 
22+     def  __init__ (self , reference : Reference , order : int ):
23+         """Create the element. 
24+ 
25+         Args: 
26+             reference: The reference element 
27+             order: The polynomial order 
28+         """ 
29+         zero  =  reference .get_point ((sympy .Integer (0 ), ))
30+         half  =  reference .get_point ((sympy .Rational (1 , 2 ), ))
31+         one  =  reference .get_point ((sympy .Integer (1 ), ))
32+ 
33+         x  =  reference .get_inverse_map_to_self ()[0 ]
34+         poly : typing .List [FunctionInput ] =  [
35+             PiecewiseFunction ({(zero , half ): 1  -  2  *  x , (half , one ): 0 }, 1 ),
36+             PiecewiseFunction ({(zero , half ): 2  *  x , (half , one ): 2  -  2  *  x }, 1 ),
37+             PiecewiseFunction ({(zero , half ): 0 , (half , one ): 2  *  x  -  1 }, 1 ),
38+         ]
39+ 
40+         dofs : ListOfFunctionals  =  []
41+         for  v_n , v  in  enumerate (reference .vertices ):
42+             dofs .append (PointEvaluation (reference , v , entity = (0 , v_n )))
43+         entity  =  reference .sub_entity (1 , 0 )
44+         dofs .append (PointEvaluation (reference , entity .midpoint (), entity = (1 , 0 )))
45+ 
46+         super ().__init__ (
47+             reference , order , poly , dofs , reference .tdim , 1 
48+         )
49+ 
50+     names  =  ["P1-iso-P2" , "P2-iso-P1" , "iso-P2 P1" ]
51+     references  =  ["interval" ]
52+     min_order  =  1 
53+     max_order  =  1 
54+     continuity  =  "C0" 
55+     last_updated  =  "2023.08" 
1856
1957
2058class  P1IsoP2Tri (CiarletElement ):
@@ -37,10 +75,10 @@ def __init__(self, reference: Reference, order: int):
3775            ((zero , half ), (half , half ), (half , zero )),
3876        ]
3977        poly : typing .List [FunctionInput ] =  []
40-         x  =  x_variables [0 ]
41-         y  =  x_variables [1 ]
42-         c  =  1  -  x  -  y 
4378        invmap  =  reference .get_inverse_map_to_self ()
79+         x  =  invmap [0 ]
80+         y  =  invmap [1 ]
81+         c  =  1  -  x  -  y 
4482        for  pieces  in  [
4583            {0 : 2  *  c  -  1 },
4684            {1 : 2  *  x  -  1 },
@@ -52,7 +90,7 @@ def __init__(self, reference: Reference, order: int):
5290            poly .append (PiecewiseFunction ({
5391                tuple (
5492                    reference .get_point (pt ) for  pt  in  q 
55-                 ): pieces [i ]. subs ( x ,  invmap [ 0 ]). subs ( y ,  invmap [ 1 ])  if  i  in  pieces  else  0 
93+                 ): pieces [i ] if  i  in  pieces  else  0 
5694                for  i , q  in  enumerate (tris )
5795            }, 2 ))
5896
@@ -95,9 +133,9 @@ def __init__(self, reference: Reference, order: int):
95133            ((half , half ), (one , half ), (half , one ), (one , one )),
96134        ]
97135        poly : typing .List [FunctionInput ] =  []
98-         x  =  x_variables [0 ]
99-         y  =  x_variables [1 ]
100136        invmap  =  reference .get_inverse_map_to_self ()
137+         x  =  invmap [0 ]
138+         y  =  invmap [1 ]
101139        for  pieces  in  [
102140            {0 : (1  -  2  *  x ) *  (1  -  2  *  y )},
103141            {1 : (2  *  x  -  1 ) *  (1  -  2  *  y )},
@@ -112,7 +150,7 @@ def __init__(self, reference: Reference, order: int):
112150            poly .append (PiecewiseFunction ({
113151                tuple (
114152                    reference .get_point (pt ) for  pt  in  q 
115-                 ): pieces [i ]. subs ( x ,  invmap [ 0 ]). subs ( y ,  invmap [ 1 ])  if  i  in  pieces  else  0 
153+                 ): pieces [i ] if  i  in  pieces  else  0 
116154                for  i , q  in  enumerate (quads )}, 2 ))
117155
118156        dofs : ListOfFunctionals  =  []
0 commit comments