@@ -136,14 +136,27 @@ static int CeedOperatorCreateFallback(CeedOperator op) {
136
136
CeedCall (CeedCompositeOperatorAddSub (op_fallback , op_sub_fallback ));
137
137
}
138
138
} else {
139
+ bool is_at_points = false;
139
140
CeedInt num_input_fields , num_output_fields ;
140
141
CeedQFunction qf_fallback = NULL , dqf_fallback = NULL , dqfT_fallback = NULL ;
141
142
CeedOperatorField * input_fields , * output_fields ;
142
143
143
144
CeedCall (CeedQFunctionCreateFallback (ceed_fallback , op -> qf , & qf_fallback ));
144
145
CeedCall (CeedQFunctionCreateFallback (ceed_fallback , op -> dqf , & dqf_fallback ));
145
146
CeedCall (CeedQFunctionCreateFallback (ceed_fallback , op -> dqfT , & dqfT_fallback ));
146
- CeedCall (CeedOperatorCreate (ceed_fallback , qf_fallback , dqf_fallback , dqfT_fallback , & op_fallback ));
147
+ CeedCall (CeedOperatorIsAtPoints (op , & is_at_points ));
148
+ if (is_at_points ) {
149
+ CeedVector points ;
150
+ CeedElemRestriction rstr_points ;
151
+
152
+ CeedCall (CeedOperatorCreateAtPoints (ceed_fallback , qf_fallback , dqf_fallback , dqfT_fallback , & op_fallback ));
153
+ CeedCall (CeedOperatorAtPointsGetPoints (op , & rstr_points , & points ));
154
+ CeedCall (CeedOperatorAtPointsSetPoints (op_fallback , rstr_points , points ));
155
+ CeedCall (CeedVectorDestroy (& points ));
156
+ CeedCall (CeedElemRestrictionDestroy (& rstr_points ));
157
+ } else {
158
+ CeedCall (CeedOperatorCreate (ceed_fallback , qf_fallback , dqf_fallback , dqfT_fallback , & op_fallback ));
159
+ }
147
160
CeedCall (CeedOperatorGetFields (op , & num_input_fields , & input_fields , & num_output_fields , & output_fields ));
148
161
for (CeedInt i = 0 ; i < num_input_fields ; i ++ ) {
149
162
const char * field_name ;
0 commit comments