@@ -41,29 +41,54 @@ static int CeedOperatorSetupFields_Blocked(CeedQFunction qf, CeedOperator op, bo
4141 CeedCallBackend (CeedQFunctionFieldGetEvalMode (qf_fields [i ], & eval_mode ));
4242
4343 if (eval_mode != CEED_EVAL_WEIGHT ) {
44+ Ceed ceed_rstr ;
4445 CeedCallBackend (CeedOperatorFieldGetElemRestriction (op_fields [i ], & r ));
45- CeedCallBackend (CeedElemRestrictionGetCeed (r , & ceed ));
46+ CeedCallBackend (CeedElemRestrictionGetCeed (r , & ceed_rstr ));
4647 CeedSize l_size ;
4748 CeedInt num_elem , elem_size , comp_stride ;
4849 CeedCallBackend (CeedElemRestrictionGetNumElements (r , & num_elem ));
4950 CeedCallBackend (CeedElemRestrictionGetElementSize (r , & elem_size ));
5051 CeedCallBackend (CeedElemRestrictionGetLVectorSize (r , & l_size ));
5152 CeedCallBackend (CeedElemRestrictionGetNumComponents (r , & num_comp ));
52-
53- bool strided ;
54- CeedCallBackend (CeedElemRestrictionIsStrided (r , & strided ));
55- if (strided ) {
56- CeedInt strides [3 ];
57- CeedCallBackend (CeedElemRestrictionGetStrides (r , & strides ));
58- CeedCallBackend (
59- CeedElemRestrictionCreateBlockedStrided (ceed , num_elem , elem_size , blk_size , num_comp , l_size , strides , & blk_restr [i + start_e ]));
60- } else {
61- const CeedInt * offsets = NULL ;
62- CeedCallBackend (CeedElemRestrictionGetOffsets (r , CEED_MEM_HOST , & offsets ));
63- CeedCallBackend (CeedElemRestrictionGetCompStride (r , & comp_stride ));
64- CeedCallBackend (CeedElemRestrictionCreateBlocked (ceed , num_elem , elem_size , blk_size , num_comp , comp_stride , l_size , CEED_MEM_HOST ,
65- CEED_COPY_VALUES , offsets , & blk_restr [i + start_e ]));
66- CeedCallBackend (CeedElemRestrictionRestoreOffsets (r , & offsets ));
53+ CeedCallBackend (CeedElemRestrictionGetCompStride (r , & comp_stride ));
54+
55+ CeedRestrictionType rstr_type ;
56+ CeedCallBackend (CeedElemRestrictionGetType (r , & rstr_type ));
57+ switch (rstr_type ) {
58+ case CEED_RESTRICTION_STANDARD : {
59+ const CeedInt * offsets = NULL ;
60+ CeedCallBackend (CeedElemRestrictionGetOffsets (r , CEED_MEM_HOST , & offsets ));
61+ CeedCallBackend (CeedElemRestrictionCreateBlocked (ceed_rstr , num_elem , elem_size , blk_size , num_comp , comp_stride , l_size , CEED_MEM_HOST ,
62+ CEED_COPY_VALUES , offsets , & blk_restr [i + start_e ]));
63+ CeedCallBackend (CeedElemRestrictionRestoreOffsets (r , & offsets ));
64+ } break ;
65+ case CEED_RESTRICTION_ORIENTED : {
66+ const CeedInt * offsets = NULL ;
67+ const bool * orients = NULL ;
68+ CeedCallBackend (CeedElemRestrictionGetOffsets (r , CEED_MEM_HOST , & offsets ));
69+ CeedCallBackend (CeedElemRestrictionGetOrientations (r , CEED_MEM_HOST , & orients ));
70+ CeedCallBackend (CeedElemRestrictionCreateBlockedOriented (ceed_rstr , num_elem , elem_size , blk_size , num_comp , comp_stride , l_size ,
71+ CEED_MEM_HOST , CEED_COPY_VALUES , offsets , orients , & blk_restr [i + start_e ]));
72+ CeedCallBackend (CeedElemRestrictionRestoreOffsets (r , & offsets ));
73+ CeedCallBackend (CeedElemRestrictionRestoreOrientations (r , & orients ));
74+ } break ;
75+ case CEED_RESTRICTION_CURL_ORIENTED : {
76+ const CeedInt * offsets = NULL ;
77+ const CeedInt8 * curl_orients = NULL ;
78+ CeedCallBackend (CeedElemRestrictionGetOffsets (r , CEED_MEM_HOST , & offsets ));
79+ CeedCallBackend (CeedElemRestrictionGetCurlOrientations (r , CEED_MEM_HOST , & curl_orients ));
80+ CeedCallBackend (CeedElemRestrictionCreateBlockedCurlOriented (ceed_rstr , num_elem , elem_size , blk_size , num_comp , comp_stride , l_size ,
81+ CEED_MEM_HOST , CEED_COPY_VALUES , offsets , curl_orients ,
82+ & blk_restr [i + start_e ]));
83+ CeedCallBackend (CeedElemRestrictionRestoreOffsets (r , & offsets ));
84+ CeedCallBackend (CeedElemRestrictionRestoreCurlOrientations (r , & curl_orients ));
85+ } break ;
86+ case CEED_RESTRICTION_STRIDED : {
87+ CeedInt strides [3 ];
88+ CeedCallBackend (CeedElemRestrictionGetStrides (r , & strides ));
89+ CeedCallBackend (
90+ CeedElemRestrictionCreateBlockedStrided (ceed_rstr , num_elem , elem_size , blk_size , num_comp , l_size , strides , & blk_restr [i + start_e ]));
91+ } break ;
6792 }
6893 CeedCallBackend (CeedElemRestrictionCreateVector (blk_restr [i + start_e ], NULL , & e_vecs_full [i + start_e ]));
6994 }
0 commit comments