@@ -40,25 +40,24 @@ def __init__(self, reference: Reference, order: int, variant: str = "equispaced"
4040        self .variant  =  variant 
4141        poly : typing .List [FunctionInput ] =  []
4242        poly  +=  [
43-             ((p [0 ], p [1 ]), (p [1 ], p [2 ]))
44-             for  p  in  polynomial_set_vector (reference .tdim , 3 , order  -  1 )
43+             ((p [0 ], p [1 ]), (p [1 ], p [2 ])) for  p  in  polynomial_set_vector (reference .tdim , 3 , order )
4544        ]
4645        poly  +=  [
4746            (
4847                (
49-                     (order  -  k  +  1 ) *  (order  -  k  +  2 ) *  x [0 ] **  k  *  x [1 ] **  (order  -  k ),
50-                     - k  *  (order  -  k  +  2 ) *  x [0 ] **  (k  -  1 ) *  x [1 ] **  (order  -  k  +  1 ),
48+                     (order  -  k  +  2 ) *  (order  -  k  +  3 ) *  x [0 ] **  k  *  x [1 ] **  (order  -  k   +   1 ),
49+                     - k  *  (order  -  k  +  3 ) *  x [0 ] **  (k  -  1 ) *  x [1 ] **  (order  -  k  +  2 ),
5150                ),
5251                (
53-                     - k  *  (order  -  k  +  2 ) *  x [0 ] **  (k  -  1 ) *  x [1 ] **  (order  -  k  +  1 ),
54-                     k  *  (k  -  1 ) *  x [0 ] **  (k  -  2 ) *  x [1 ] **  (order  -  k  +  2 ),
52+                     - k  *  (order  -  k  +  3 ) *  x [0 ] **  (k  -  1 ) *  x [1 ] **  (order  -  k  +  2 ),
53+                     k  *  (k  -  1 ) *  x [0 ] **  (k  -  2 ) *  x [1 ] **  (order  -  k  +  3 ),
5554                ),
5655            )
57-             for  k  in  range (order  +  1 )
56+             for  k  in  range (order  +  2 )
5857        ]
5958        poly  +=  [
60-             ((0 , x [0 ] **  order ) , (x [0 ] **  order , - order  *  x [0 ] **  ( order   -   1 )  *  x [1 ])),
61-             ((0 , 0 ), (0 , x [0 ] **  order )),
59+             ((0 , x [0 ] **  ( order   +   1 )) , (x [0 ] **  ( order   +   1 ) , - ( order  +   1 )  *  x [0 ] **  order  *  x [1 ])),
60+             ((0 , 0 ), (0 , x [0 ] **  ( order   +   1 ) )),
6261        ]
6362
6463        dofs : ListOfFunctionals  =  []
@@ -71,7 +70,7 @@ def __init__(self, reference: Reference, order: int, variant: str = "equispaced"
7170                )
7271        for  e_n  in  range (reference .sub_entity_count (1 )):
7372            sub_ref  =  reference .sub_entity (1 , e_n )
74-             sub_e  =  Lagrange (sub_ref .default_reference (), order  -  2 , variant )
73+             sub_e  =  Lagrange (sub_ref .default_reference (), order  -  1 , variant )
7574            for  dof_n , dof  in  enumerate (sub_e .dofs ):
7675                p  =  sub_e .get_basis_function (dof_n ).get_function ()
7776                for  component  in  [sub_ref .normal (), sub_ref .tangent ()]:
@@ -86,7 +85,7 @@ def __init__(self, reference: Reference, order: int, variant: str = "equispaced"
8685                            mapping = "double_contravariant" ,
8786                        )
8887                    )
89-         sub_e  =  Lagrange (reference , order  -  3 , variant )
88+         sub_e  =  Lagrange (reference , order  -  2 , variant )
9089        for  dof_n , dof  in  enumerate (sub_e .dofs ):
9190            p  =  sub_e .get_basis_function (dof_n ).get_function ()
9291            for  component22  in  [((1 , 0 ), (0 , 0 )), ((0 , 1 ), (0 , 0 )), ((0 , 0 ), (0 , 1 ))]:
@@ -100,10 +99,10 @@ def __init__(self, reference: Reference, order: int, variant: str = "equispaced"
10099                    )
101100                )
102101
103-         if  order  >=  4 :
104-             sub_e  =  Lagrange (reference , order  -  4 , variant )
102+         if  order  >=  3 :
103+             sub_e  =  Lagrange (reference , order  -  3 , variant )
105104            for  p , dof  in  zip (sub_e .get_basis_functions (), sub_e .dofs ):
106-                 if  sympy .Poly (p .as_sympy (), x [:2 ]).degree () !=  order  -  4 :
105+                 if  sympy .Poly (p .as_sympy (), x [:2 ]).degree () !=  order  -  3 :
107106                    continue 
108107                f  =  p  *  x [0 ] **  2  *  x [1 ] **  2  *  (1  -  x [0 ] -  x [1 ]) **  2 
109108                J  =  [
@@ -134,26 +133,26 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:
134133
135134    @property  
136135    def  lagrange_subdegree (self ) ->  int :
137-         return  self .order   -   1 
136+         return  self .order 
138137
139138    @property  
140139    def  lagrange_superdegree (self ) ->  typing .Optional [int ]:
141-         return  self .order 
140+         return  self .order   +   1 
142141
143142    @property  
144143    def  polynomial_subdegree (self ) ->  int :
145-         return  self .order   -   1 
144+         return  self .order 
146145
147146    @property  
148147    def  polynomial_superdegree (self ) ->  typing .Optional [int ]:
149-         return  self .order 
148+         return  self .order   +   1 
150149
151150    names  =  ["Arnold-Winther" , "AW" , "conforming Arnold-Winther" ]
152151    references  =  ["triangle" ]
153-     min_order  =  3 
152+     min_order  =  2 
154153    continuity  =  "integral inner H(div)" 
155154    value_type  =  "symmetric matrix" 
156-     last_updated  =  "2024.09 " 
155+     last_updated  =  "2025.03 " 
157156
158157
159158class  NonConformingArnoldWinther (CiarletElement ):
@@ -171,8 +170,7 @@ def __init__(self, reference: Reference, order: int, variant: str = "equispaced"
171170        self .variant  =  variant 
172171        poly : typing .List [FunctionInput ] =  []
173172        poly  +=  [
174-             ((p [0 ], p [1 ]), (p [1 ], p [2 ]))
175-             for  p  in  polynomial_set_vector (reference .tdim , 3 , order  -  1 )
173+             ((p [0 ], p [1 ]), (p [1 ], p [2 ])) for  p  in  polynomial_set_vector (reference .tdim , 3 , order )
176174        ]
177175
178176        poly  +=  [
@@ -235,24 +233,24 @@ def init_kwargs(self) -> typing.Dict[str, typing.Any]:
235233
236234    @property  
237235    def  lagrange_subdegree (self ) ->  int :
238-         return  self .order   -   1 
236+         return  self .order 
239237
240238    @property  
241239    def  lagrange_superdegree (self ) ->  typing .Optional [int ]:
242-         return  self .order 
240+         return  self .order   +   1 
243241
244242    @property  
245243    def  polynomial_subdegree (self ) ->  int :
246-         return  self .order   -   1 
244+         return  self .order 
247245
248246    @property  
249247    def  polynomial_superdegree (self ) ->  typing .Optional [int ]:
250-         return  self .order 
248+         return  self .order   +   1 
251249
252250    names  =  ["nonconforming Arnold-Winther" , "nonconforming AW" ]
253251    references  =  ["triangle" ]
254-     min_order  =  2 
255-     max_order  =  2 
252+     min_order  =  1 
253+     max_order  =  1 
256254    continuity  =  "integral inner H(div)" 
257255    value_type  =  "symmetric matrix" 
258-     last_updated  =  "2024.10 " 
256+     last_updated  =  "2025.03 " 
0 commit comments