Skip to content

Commit 38bf749

Browse files
committed
pc - fix fallback creation for AtPoints operator
1 parent 12f29d1 commit 38bf749

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

interface/ceed-preconditioning.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,27 @@ static int CeedOperatorCreateFallback(CeedOperator op) {
136136
CeedCall(CeedCompositeOperatorAddSub(op_fallback, op_sub_fallback));
137137
}
138138
} else {
139+
bool is_at_points = false;
139140
CeedInt num_input_fields, num_output_fields;
140141
CeedQFunction qf_fallback = NULL, dqf_fallback = NULL, dqfT_fallback = NULL;
141142
CeedOperatorField *input_fields, *output_fields;
142143

143144
CeedCall(CeedQFunctionCreateFallback(ceed_fallback, op->qf, &qf_fallback));
144145
CeedCall(CeedQFunctionCreateFallback(ceed_fallback, op->dqf, &dqf_fallback));
145146
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+
}
147160
CeedCall(CeedOperatorGetFields(op, &num_input_fields, &input_fields, &num_output_fields, &output_fields));
148161
for (CeedInt i = 0; i < num_input_fields; i++) {
149162
const char *field_name;

0 commit comments

Comments
 (0)