@@ -32,7 +32,7 @@ extern crate lapack_src;
3232use crate :: math;
3333use crate :: polynomials:: { legendre_shape, polynomial_count, tabulate_legendre_polynomials} ;
3434use crate :: reference_cell;
35- use crate :: traits:: { FiniteElement , Map } ;
35+ use crate :: traits:: { FiniteElement , Map , MappedFiniteElement } ;
3636use crate :: types:: { Continuity , DofTransformation , ReferenceCellType , Transformation } ;
3737use itertools:: izip;
3838use num:: { One , Zero } ;
@@ -621,26 +621,27 @@ where
621621 & self . interpolation_weights
622622 }
623623}
624+
624625impl < T : RlstScalar , M : Map > FiniteElement for CiarletElement < T , M > {
625626 type CellType = ReferenceCellType ;
626- type TransformationType = Transformation ;
627627 type T = T ;
628+
628629 fn value_shape ( & self ) -> & [ usize ] {
629630 & self . value_shape
630631 }
632+
631633 fn value_size ( & self ) -> usize {
632634 self . value_size
633635 }
634636
635637 fn cell_type ( & self ) -> ReferenceCellType {
636638 self . cell_type
637639 }
638- fn lagrange_superdegree ( & self ) -> usize {
639- self . embedded_superdegree
640- }
640+
641641 fn dim ( & self ) -> usize {
642642 self . dim
643643 }
644+
644645 fn tabulate <
645646 Array2Impl : ValueArrayImpl < <Self :: T as RlstScalar >:: Real , 2 > ,
646647 Array4MutImpl : MutableArrayImpl < Self :: T , 4 > ,
@@ -681,27 +682,39 @@ impl<T: RlstScalar, M: Map> FiniteElement for CiarletElement<T, M> {
681682 }
682683 }
683684 }
685+
686+ fn tabulate_array_shape ( & self , nderivs : usize , npoints : usize ) -> [ usize ; 4 ] {
687+ let deriv_count = compute_derivative_count ( nderivs, self . cell_type ( ) ) ;
688+ let point_count = npoints;
689+ let basis_count = self . dim ( ) ;
690+ let value_size = self . value_size ( ) ;
691+ [ deriv_count, point_count, basis_count, value_size]
692+ }
693+
684694 fn entity_dofs ( & self , entity_dim : usize , entity_number : usize ) -> Option < & [ usize ] > {
685695 if entity_dim < 4 && entity_number < self . entity_dofs [ entity_dim] . len ( ) {
686696 Some ( & self . entity_dofs [ entity_dim] [ entity_number] )
687697 } else {
688698 None
689699 }
690700 }
701+
691702 fn entity_closure_dofs ( & self , entity_dim : usize , entity_number : usize ) -> Option < & [ usize ] > {
692703 if entity_dim < 4 && entity_number < self . entity_closure_dofs [ entity_dim] . len ( ) {
693704 Some ( & self . entity_closure_dofs [ entity_dim] [ entity_number] )
694705 } else {
695706 None
696707 }
697708 }
698- fn tabulate_array_shape ( & self , nderivs : usize , npoints : usize ) -> [ usize ; 4 ] {
699- let deriv_count = compute_derivative_count ( nderivs, self . cell_type ( ) ) ;
700- let point_count = npoints;
701- let basis_count = self . dim ( ) ;
702- let value_size = self . value_size ( ) ;
703- [ deriv_count, point_count, basis_count, value_size]
709+ }
710+
711+ impl < T : RlstScalar , M : Map > MappedFiniteElement for CiarletElement < T , M > {
712+ type TransformationType = Transformation ;
713+
714+ fn lagrange_superdegree ( & self ) -> usize {
715+ self . embedded_superdegree
704716 }
717+
705718 fn push_forward <
706719 Array3RealImpl : ValueArrayImpl < <Self :: T as RlstScalar >:: Real , 3 > ,
707720 Array4Impl : ValueArrayImpl < Self :: T , 4 > ,
@@ -724,6 +737,7 @@ impl<T: RlstScalar, M: Map> FiniteElement for CiarletElement<T, M> {
724737 physical_values,
725738 )
726739 }
740+
727741 fn pull_back <
728742 Array3RealImpl : ValueArrayImpl < <Self :: T as RlstScalar >:: Real , 3 > ,
729743 Array4Impl : ValueArrayImpl < Self :: T , 4 > ,
@@ -746,9 +760,11 @@ impl<T: RlstScalar, M: Map> FiniteElement for CiarletElement<T, M> {
746760 reference_values,
747761 )
748762 }
763+
749764 fn physical_value_shape ( & self , gdim : usize ) -> Vec < usize > {
750765 self . map . physical_value_shape ( gdim)
751766 }
767+
752768 fn dof_transformation (
753769 & self ,
754770 entity : ReferenceCellType ,
0 commit comments