@@ -156,7 +156,6 @@ static int CeedOperatorBuildKernelFieldData_Cuda_gen(std::ostringstream &code, C
156
156
code << " const CeedInt " << P_name << " = " << (basis == CEED_BASIS_NONE ? Q_1d : P_1d) << " ;\n " ;
157
157
code << " const CeedInt num_comp" << var_suffix << " = " << num_comp << " ;\n " ;
158
158
}
159
- CeedCallBackend (CeedBasisDestroy (&basis));
160
159
161
160
// Load basis data
162
161
code << " // EvalMode: " << CeedEvalModes[eval_mode] << " \n " ;
@@ -240,6 +239,7 @@ static int CeedOperatorBuildKernelFieldData_Cuda_gen(std::ostringstream &code, C
240
239
break ; // TODO: Not implemented
241
240
// LCOV_EXCL_STOP
242
241
}
242
+ CeedCallBackend (CeedBasisDestroy (&basis));
243
243
return CEED_ERROR_SUCCESS;
244
244
}
245
245
@@ -319,10 +319,21 @@ static int CeedOperatorBuildKernelRestriction_Cuda_gen(std::ostringstream &code,
319
319
<< strides[2 ] << " >(data, elem, d" << var_suffix << " , r_e" << var_suffix << " );\n " ;
320
320
break ;
321
321
}
322
+ case CEED_RESTRICTION_POINTS: {
323
+ CeedInt comp_stride;
324
+
325
+ CeedCallBackend (CeedElemRestrictionGetLVectorSize (elem_rstr, &l_size));
326
+ code << " const CeedInt l_size" << var_suffix << " = " << l_size << " ;\n " ;
327
+ CeedCallBackend (CeedElemRestrictionGetCompStride (elem_rstr, &comp_stride));
328
+ code << " // CompStride: " << comp_stride << " \n " ;
329
+ data->indices .inputs [i] = (CeedInt *)rstr_data->d_offsets ;
330
+ code << " ReadLVecStandard" << dim << " d<num_comp" << var_suffix << " , " << comp_stride << " , " << P_name << " >(data, l_size"
331
+ << var_suffix << " , elem, indices.inputs[" << i << " ], d" << var_suffix << " , r_e" << var_suffix << " );\n " ;
332
+ break ;
333
+ }
322
334
// LCOV_EXCL_START
323
335
case CEED_RESTRICTION_ORIENTED:
324
336
case CEED_RESTRICTION_CURL_ORIENTED:
325
- case CEED_RESTRICTION_POINTS:
326
337
break ; // TODO: Not implemented
327
338
// LCOV_EXCL_STOP
328
339
}
@@ -358,10 +369,21 @@ static int CeedOperatorBuildKernelRestriction_Cuda_gen(std::ostringstream &code,
358
369
<< strides[2 ] << " >(data, elem, r_e" << var_suffix << " , d" << var_suffix << " );\n " ;
359
370
break ;
360
371
}
372
+ case CEED_RESTRICTION_POINTS: {
373
+ CeedInt comp_stride;
374
+
375
+ CeedCallBackend (CeedElemRestrictionGetLVectorSize (elem_rstr, &l_size));
376
+ code << " const CeedInt l_size" << var_suffix << " = " << l_size << " ;\n " ;
377
+ CeedCallBackend (CeedElemRestrictionGetCompStride (elem_rstr, &comp_stride));
378
+ code << " // CompStride: " << comp_stride << " \n " ;
379
+ data->indices .outputs [i] = (CeedInt *)rstr_data->d_offsets ;
380
+ code << " WriteLVecAtPoints" << dim << " d<num_comp" << var_suffix << " , " << comp_stride << " , " << P_name << " >(data, l_size" << var_suffix
381
+ << " , elem, indices.outputs[" << i << " ], points.num_per_elem, r_e" << var_suffix << " , d" << var_suffix << " );\n " ;
382
+ break ;
383
+ }
361
384
// LCOV_EXCL_START
362
385
case CEED_RESTRICTION_ORIENTED:
363
386
case CEED_RESTRICTION_CURL_ORIENTED:
364
- case CEED_RESTRICTION_POINTS:
365
387
break ; // TODO: Not implemented
366
388
// LCOV_EXCL_STOP
367
389
}
@@ -406,20 +428,35 @@ static int CeedOperatorBuildKernelBasis_Cuda_gen(std::ostringstream &code, CeedO
406
428
}
407
429
break ;
408
430
case CEED_EVAL_INTERP:
409
- code << " CeedScalar r_q" << var_suffix << " [num_comp" << var_suffix << " *" << Q_name << " ];\n " ;
410
- code << " Interp" << (dim > 1 ? " Tensor" : " " ) << dim << " d<num_comp" << var_suffix << " , P_1d" << var_suffix << " , " << Q_name
411
- << " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , r_q" << var_suffix << " );\n " ;
431
+ if (is_at_points) {
432
+ code << " CeedScalar r_q" << var_suffix << " [num_comp" << var_suffix << " *" << Q_name << " ];\n " ;
433
+ code << " Interp" << (dim > 1 ? " Tensor" : " " ) << dim << " d<num_comp" << var_suffix << " , P_1d" << var_suffix << " , " << Q_name
434
+ << " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , r_q" << var_suffix << " );\n " ;
435
+ } else {
436
+ code << " CeedScalar r_q" << var_suffix << " [num_comp" << var_suffix << " *max_num_points];\n " ;
437
+ code << " Interp" << (dim > 1 ? " Tensor" : " " ) << dim << " d<num_comp" << var_suffix << " , P_1d" << var_suffix << " , " << Q_name
438
+ << " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , r_q" << var_suffix << " );\n " ;
439
+
440
+ code << " InterpAtPoints<" << dim << " , num_comp" << var_suffix << " , max_num_points, " << Q_name
441
+ << " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , r_q" << var_suffix << " );\n " ;
442
+ }
412
443
break ;
413
444
case CEED_EVAL_GRAD:
414
445
if (use_3d_slices) {
415
446
code << " CeedScalar r_q" << var_suffix << " [num_comp" << var_suffix << " *" << Q_name << " ];\n " ;
416
447
code << " Interp" << (dim > 1 ? " Tensor" : " " ) << dim << " d<num_comp" << var_suffix << " , P_1d" << var_suffix << " , " << Q_name
417
448
<< " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , r_q" << var_suffix << " );\n " ;
418
449
} else {
419
- code << " CeedScalar r_q" << var_suffix << " [num_comp" << var_suffix << " *dim*" << Q_name << " ];\n " ;
420
- code << " Grad" << (dim > 1 ? " Tensor" : " " ) << (dim == 3 && Q_1d >= P_1d ? " Collocated" : " " ) << dim << " d<num_comp" << var_suffix
421
- << " , P_1d" << var_suffix << " , " << Q_name << " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , s_G" << var_suffix << " , r_q"
422
- << var_suffix << " );\n " ;
450
+ if (is_at_points) {
451
+ } else {
452
+ code << " CeedScalar r_q" << var_suffix << " [num_comp" << var_suffix << " *dim*max_num_points];\n " ;
453
+ code << " Interp" << (dim > 1 ? " Tensor" : " " ) << dim << " d<num_comp" << var_suffix << " , P_1d" << var_suffix << " , " << Q_name
454
+ << " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , r_q" << var_suffix << " );\n " ;
455
+
456
+ code << " Grad" << (dim > 1 ? " Tensor" : " " ) << (dim == 3 && Q_1d >= P_1d ? " Collocated" : " " ) << dim << " d<num_comp" << var_suffix
457
+ << " , P_1d" << var_suffix << " , " << Q_name << " >(data, r_e" << var_suffix << " , s_B" << var_suffix << " , s_G" << var_suffix << " , r_q"
458
+ << var_suffix << " );\n " ;
459
+ }
423
460
}
424
461
break ;
425
462
case CEED_EVAL_WEIGHT: {
0 commit comments