Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
72d3374
interpolator base class, tests [breaking]
Fuad-HH Jan 18, 2025
a1a4196
working single mesh interpolation class
Fuad-HH Jan 22, 2025
3ea79c2
interpolator test compares each entry with expected
Fuad-HH Jan 22, 2025
c8a268e
interpolator test passes for mesh to mesh
Fuad-HH Jan 23, 2025
ab1e73e
adding c api
Fuad-HH Feb 20, 2025
c392bf4
add omega_h mesh handle struct
Fuad-HH Feb 21, 2025
8b78bf1
fortran api for interpolator
Fuad-HH Feb 21, 2025
69ad666
fortran and c api to read Omega_h mesh from file
Fuad-HH Feb 21, 2025
c87ffef
added test_interpolator_fortran
Fuad-HH Feb 21, 2025
7eeeaee
interpolator frotran api test correction
Fuad-HH Feb 21, 2025
2831e82
added pcms_interpolate function
Fuad-HH Feb 21, 2025
afd2480
test pcms interpolator api
Fuad-HH Feb 21, 2025
fdf58ed
point cloud based search working
Fuad-HH May 6, 2025
28e2406
point cloud search
Fuad-HH May 14, 2025
d4eb4b5
merge c and fortran api with develop
Fuad-HH May 19, 2025
c9557b9
mesh based and mixed interpolator for degas2 xgc coupling
Fuad-HH Sep 16, 2025
ed67fcc
minor parameter changes for better interpolation
Fuad-HH Sep 16, 2025
d8a8413
Merge branch 'mergecfortapi' of github.com:Fuad-HH/pcms into mergecfo…
Fuad-HH Sep 17, 2025
b91712c
get number of mesh elements from interpolation creating call
Fuad-HH Sep 17, 2025
bd842e2
add xgc node to degas2 centroid interpolation
Fuad-HH Sep 21, 2025
bb2dbd5
merge pcms interpolator and its c/fortran API with develop
Fuad-HH Sep 29, 2025
04a178b
fix merging error with interpolator normalization
Fuad-HH Sep 30, 2025
d9bd71f
fix interpolation class test partially (the values)
Fuad-HH Oct 9, 2025
53e53b1
divided point cloud support strcuture search
Fuad-HH Oct 10, 2025
cf8ff02
adj searches use helper functions to adapt radius
Fuad-HH Oct 10, 2025
3269492
clang-format on the changed source files
Fuad-HH Oct 10, 2025
679b493
replace prints with pcms::printInfo or Error
Fuad-HH Oct 14, 2025
5fd2ed2
interpolation parameters exposed to fortran api
Fuad-HH Oct 14, 2025
da24d7a
separate mpi comm for all mesh readers
Fuad-HH Oct 15, 2025
37d7b7f
remove assertion skip
Fuad-HH Nov 3, 2025
ebaa642
add printDebugInfo and fix typo
Fuad-HH Nov 3, 2025
fccd134
check pointers not pointing same array when copying
Fuad-HH Nov 3, 2025
7f9d9e3
add test case to test a real example of interpolation
Fuad-HH Nov 13, 2025
3cbfdf6
better parameters
Fuad-HH Nov 13, 2025
c981b25
add virtual destructor
Fuad-HH Nov 13, 2025
4039ee5
rename MLSMeshInterpolation
Fuad-HH Nov 13, 2025
2fdf849
Unify interpolator handles in C/Fortran API
Fuad-HH Nov 14, 2025
225fdf7
refactor ltx interpolation test, improved verification
Fuad-HH Nov 14, 2025
4013be7
merge develop
Fuad-HH Nov 14, 2025
5120c21
remove MPI_Comm_dup for omega_h reads
Fuad-HH Nov 20, 2025
ceb6334
minor refactorings
Fuad-HH Nov 20, 2025
ce86584
fix node file read
Fuad-HH Nov 20, 2025
0f09569
make decay_factor and lambda parameters
Fuad-HH Nov 21, 2025
833b2c4
remove degas2xgc c/fortran API
Fuad-HH Nov 21, 2025
acfd98d
replace mesh in interpolation test
Fuad-HH Nov 21, 2025
15a42ab
temporary fix for ltx interpolation test
Fuad-HH Nov 21, 2025
ce23d76
add PCMS_PRINT_ENABLED for printDebugInfo
Fuad-HH Nov 21, 2025
a2ab568
add doc to interpolation_base.h
Fuad-HH Nov 21, 2025
cbed4e1
add doc to interpolator.h
Fuad-HH Nov 21, 2025
35d20d4
temporary fix to print fail log
Fuad-HH Nov 21, 2025
b10cfb1
always print log
Fuad-HH Nov 21, 2025
e2f2287
Revert "always print log"
Fuad-HH Nov 21, 2025
38644f0
Revert "temporary fix to print fail log"
Fuad-HH Nov 21, 2025
ccdca5e
rename omega_h mesh handle api
Fuad-HH Dec 5, 2025
d2d3268
divide up mesh and library handle
Fuad-HH Dec 5, 2025
682cf37
separate header for mesh
Fuad-HH Dec 5, 2025
bc94d32
rename mesh and library handle
Fuad-HH Dec 7, 2025
a5d0f17
uint->unsigned
jacobmerson Dec 7, 2025
f7678fe
formatting with clang-format
jacobmerson Dec 7, 2025
fff5adc
add specific versions to workflow for redev and meshfields
jacobmerson Dec 7, 2025
1300e3f
Merge branch 'develop' into mergecfortapi
jacobmerson Dec 7, 2025
7bb09ba
Merge branch 'develop' into mergecfortapi
jacobmerson Dec 9, 2025
45cc9d5
add additional debugging output in ltx testcase
jacobmerson Dec 9, 2025
b59c425
make sure test log is always output
jacobmerson Dec 9, 2025
9e16b03
use git has for omega-h version in workflow until
jacobmerson Dec 9, 2025
fab3d06
change export name
Fuad-HH Dec 9, 2025
e357250
add kokkoskernel hint
Fuad-HH Dec 9, 2025
ea9549b
make cmake verbose
Fuad-HH Dec 9, 2025
ae4b8f4
debug-output
Fuad-HH Dec 9, 2025
e592902
make kokkoskernels private link
jacobmerson Dec 10, 2025
8f8d161
fix build so mls_interpolation.hpp does not need the impl included.
jacobmerson Dec 11, 2025
86715bb
add kokkos kernels link to unit test
jacobmerson Dec 11, 2025
3c8d25f
add interpolator target to pcms::pcms
jacobmerson Dec 11, 2025
4c3f7f6
rework capi targets
jacobmerson Dec 11, 2025
86ce66f
add debugging output to the installation test case
jacobmerson Dec 11, 2025
4189201
rework fortranapi targets
jacobmerson Dec 11, 2025
68774c6
update interpolator targets name
jacobmerson Dec 11, 2025
76b88bd
use pcms::pcms in example build directory
jacobmerson Dec 11, 2025
b7eee41
reorder config file to move interpolator target before c/fortran apis
jacobmerson Dec 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions src/pcms/capi/interpolator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,73 @@ PcmsPointBasedInterpolatorHandle pcms_create_point_based_interpolator(void* sour
return {reinterpret_cast<void*>(interpolator)};
}

PcmsPointBasedInterpolatorHandle pcms_create_degas2xgc_interpolator(const char* xgc_mesh_filename, const char* dg2_mesh_filename, double radius)
{
// use the xgc_mesh_nodes as source points and
// dg2 element centroids as target points
// then, create a point based interpolator like above
auto xgc_fname = std::string(xgc_mesh_filename);
auto dg2_fname = std::string(dg2_mesh_filename);

// trim the filenames since they are coming from c or fortran api which may have extra spaces at the end
xgc_fname = xgc_fname.erase(xgc_fname.find_last_not_of(" \n\r\t")+1);
dg2_fname = dg2_fname.erase(dg2_fname.find_last_not_of(" \n\r\t")+1);
printf("The interpolator got xgc mesh file: %s and dg2 mesh file: %s\n", xgc_fname.c_str(), dg2_fname.c_str());

// read the meshes
auto xgc_mesh_lib = Omega_h::Library();
auto xgc_mesh = Omega_h::binary::read(xgc_fname, xgc_mesh_lib.world());
auto dg2_mesh_lib = Omega_h::Library();
auto dg2_mesh = Omega_h::binary::read(dg2_fname, dg2_mesh_lib.world());

auto xgc_nodes = xgc_mesh.coords();
auto xgc_num_nodes = xgc_mesh.nverts();
OMEGA_H_CHECK_PRINTF(xgc_mesh.dim() == 2, "XGC mesh dimension is not 2D %d\n", xgc_mesh.dim());
OMEGA_H_CHECK_PRINTF(xgc_num_nodes * 2 == xgc_nodes.size(),
"XGC mesh nodes size does not match the number of vertices %d != %d\n", xgc_num_nodes * 2, xgc_nodes.size());
OMEGA_H_CHECK_PRINTF(dg2_mesh.dim() == 2, "DG2 mesh dimension is not 2D %d\n", dg2_mesh.dim());

auto dg2_num_elems = dg2_mesh.nelems();
auto dg2_elem_centroids = getCentroids(dg2_mesh);
OMEGA_H_CHECK_PRINTF(dg2_num_elems * 2 == dg2_elem_centroids.size(),
"DG2 mesh element centroids size does not match the number of elements %d != %d\n", dg2_num_elems * 2, dg2_elem_centroids.size());

Omega_h::HostRead<Omega_h::Real> xgc_nodes_host(xgc_nodes);
Omega_h::HostRead<Omega_h::Real> dg2_elem_centroids_host(dg2_elem_centroids);

return pcms_create_point_based_interpolator(
(void*) dg2_elem_centroids_host.data(), dg2_elem_centroids.size(),
(void*) xgc_nodes_host.data(), xgc_nodes.size(),
radius);
}

PcmsPointBasedInterpolatorHandle pcms_create_degas2xgcnode_interpolator(void* target_points, int target_points_size,
const char* dg2_mesh_filename, double radius)
{
// same as above pcms_create_degas2xgc_interpolator but the target points are provided by the user
// this is useful when the corresponding xgc mesh is not available

auto dg2_fname = std::string(dg2_mesh_filename);
dg2_fname = dg2_fname.erase(dg2_fname.find_last_not_of(" \n\r\t")+1);
printf("The interpolator got dg2 mesh file: %s\n", dg2_fname.c_str());
auto dg2_mesh_lib = Omega_h::Library(nullptr, nullptr, MPI_COMM_SELF);
auto dg2_mesh = Omega_h::binary::read(dg2_fname, dg2_mesh_lib.world());

OMEGA_H_CHECK_PRINTF(dg2_mesh.dim() == 2, "DG2 mesh dimension is not 2D %d\n", dg2_mesh.dim());
auto dg2_num_elems = dg2_mesh.nelems();
auto dg2_elem_centroids = getCentroids(dg2_mesh);
OMEGA_H_CHECK_PRINTF(dg2_num_elems * 2 == dg2_elem_centroids.size(),
"DG2 mesh element centroids size does not match the number of elements %d != %d\n", dg2_num_elems * 2, dg2_elem_centroids.size());

Omega_h::HostRead<Omega_h::Real> dg2_elem_centroids_host(dg2_elem_centroids);
printf("Number of DG2 element centroids: %d\n", dg2_elem_centroids.size()/2);

return pcms_create_point_based_interpolator(
(void*) dg2_elem_centroids_host.data(), dg2_elem_centroids_host.size(),
target_points, target_points_size,
radius);
}

void pcms_destroy_point_based_interpolator(PcmsPointBasedInterpolatorHandle interpolator)
{
if (interpolator.pointer != nullptr) {
Expand Down
3 changes: 3 additions & 0 deletions src/pcms/capi/interpolator.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ enum for interpolation type
PcmsInterpolatorHandle pcms_create_interpolator(PcmsInterpolatorOHMeshHandle oh_mesh, double radius);
PcmsPointBasedInterpolatorHandle pcms_create_point_based_interpolator(void* source_points, int source_points_size,
void* target_points, int target_points_size, double radius);
PcmsPointBasedInterpolatorHandle pcms_create_degas2xgc_interpolator(const char* xgc_mesh_filename, const char* dg2_mesh_filename, double radius);
PcmsPointBasedInterpolatorHandle pcms_create_degas2xgcnode_interpolator(void* target_points, int target_points_size,
const char* dg2_mesh_filename, double radius);
void pcms_destroy_interpolator(PcmsInterpolatorHandle interpolator);
void pcms_destroy_point_based_interpolator(PcmsPointBasedInterpolatorHandle interpolator);

Expand Down
3 changes: 3 additions & 0 deletions src/pcms/fortranapi/interpolator.i
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ typedef struct PcmsPointBasedInterpolatorHandle PcmsPointBasedInterpolatorHandle

PcmsPointBasedInterpolatorHandle pcms_create_point_based_interpolator(void* source_points, int source_points_size,
void* target_points, int target_points_size, double radius);
PcmsPointBasedInterpolatorHandle pcms_create_degas2xgc_interpolator(const char* xgc_mesh_filename, const char* dg2_mesh_filename, double radius);
PcmsPointBasedInterpolatorHandle pcms_create_degas2xgcnode_interpolator(void* target_points, int target_points_size,
const char* dg2_mesh_filename, double radius);
PcmsInterpolatorHandle pcms_create_interpolator(PcmsInterpolatorOHMeshHandle oh_mesh, double radius);
void pcms_destroy_interpolator(PcmsInterpolatorHandle interpolator);
void pcms_destroy_point_based_interpolator(PcmsPointBasedInterpolatorHandle interpolator);
Expand Down
36 changes: 36 additions & 0 deletions src/pcms/fortranapi/interpolator_wrap.c
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,42 @@ SWIGEXPORT SwigClassWrapper _wrap_pcms_create_point_based_interpolator(void cons
}


SWIGEXPORT SwigClassWrapper _wrap_pcms_create_degas2xgc_interpolator(SwigArrayWrapper *farg1, SwigArrayWrapper *farg2, double const *farg3) {
SwigClassWrapper fresult ;
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
double arg3 ;
PcmsPointBasedInterpolatorHandle result;

arg1 = (char *)(farg1->data);
arg2 = (char *)(farg2->data);
arg3 = (double)(*farg3);
result = pcms_create_degas2xgc_interpolator((char const *)arg1,(char const *)arg2,arg3);
fresult.cptr = (PcmsPointBasedInterpolatorHandle *)memcpy((PcmsPointBasedInterpolatorHandle *)calloc(1,sizeof(PcmsPointBasedInterpolatorHandle)),&result,sizeof(PcmsPointBasedInterpolatorHandle));
fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN;
return fresult;
}


SWIGEXPORT SwigClassWrapper _wrap_pcms_create_degas2xgcnode_interpolator(void const **farg1, int const *farg2, SwigArrayWrapper *farg3, double const *farg4) {
SwigClassWrapper fresult ;
void *arg1 = (void *) 0 ;
int arg2 ;
char *arg3 = (char *) 0 ;
double arg4 ;
PcmsPointBasedInterpolatorHandle result;

arg1 = (void *)(*farg1);
arg2 = (int)(*farg2);
arg3 = (char *)(farg3->data);
arg4 = (double)(*farg4);
result = pcms_create_degas2xgcnode_interpolator(arg1,arg2,(char const *)arg3,arg4);
fresult.cptr = (PcmsPointBasedInterpolatorHandle *)memcpy((PcmsPointBasedInterpolatorHandle *)calloc(1,sizeof(PcmsPointBasedInterpolatorHandle)),&result,sizeof(PcmsPointBasedInterpolatorHandle));
fresult.cmemflags = SWIG_MEM_RVALUE | SWIG_MEM_OWN;
return fresult;
}


SWIGEXPORT SwigClassWrapper _wrap_pcms_create_interpolator(SwigClassWrapper *farg1, double const *farg2) {
SwigClassWrapper fresult ;
PcmsInterpolatorOHMeshHandle arg1 ;
Expand Down
115 changes: 93 additions & 22 deletions src/pcms/fortranapi/pcms_interpolator.f90
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,17 @@ module pcms_interpolator
generic :: assignment(=) => swigf_PcmsPointBasedInterpolatorHandle_op_assign__
end type PcmsPointBasedInterpolatorHandle
public :: pcms_create_point_based_interpolator
type, bind(C) :: SwigArrayWrapper
type(C_PTR), public :: data = C_NULL_PTR
integer(C_SIZE_T), public :: size = 0
end type
public :: pcms_create_degas2xgc_interpolator
public :: pcms_create_degas2xgcnode_interpolator
public :: pcms_create_interpolator
public :: pcms_destroy_interpolator
public :: pcms_destroy_point_based_interpolator
public :: pcms_kokkos_initialize_without_args
public :: pcms_kokkos_finalize
type, bind(C) :: SwigArrayWrapper
type(C_PTR), public :: data = C_NULL_PTR
integer(C_SIZE_T), public :: size = 0
end type
public :: read_oh_mesh
public :: release_oh_mesh
public :: pcms_interpolate
Expand Down Expand Up @@ -224,6 +226,31 @@ function swigc_pcms_create_point_based_interpolator(farg1, farg2, farg3, farg4,
type(SwigClassWrapper) :: fresult
end function

function swigc_pcms_create_degas2xgc_interpolator(farg1, farg2, farg3) &
bind(C, name="_wrap_pcms_create_degas2xgc_interpolator") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
import :: swigarraywrapper
import :: swigclasswrapper
type(SwigArrayWrapper) :: farg1
type(SwigArrayWrapper) :: farg2
real(C_DOUBLE), intent(in) :: farg3
type(SwigClassWrapper) :: fresult
end function

function swigc_pcms_create_degas2xgcnode_interpolator(farg1, farg2, farg3, farg4) &
bind(C, name="_wrap_pcms_create_degas2xgcnode_interpolator") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
import :: swigarraywrapper
import :: swigclasswrapper
type(C_PTR), intent(in) :: farg1
integer(C_INT), intent(in) :: farg2
type(SwigArrayWrapper) :: farg3
real(C_DOUBLE), intent(in) :: farg4
type(SwigClassWrapper) :: fresult
end function

function swigc_pcms_create_interpolator(farg1, farg2) &
bind(C, name="_wrap_pcms_create_interpolator") &
result(fresult)
Expand Down Expand Up @@ -538,6 +565,68 @@ function pcms_create_point_based_interpolator(source_points, source_points_size,
swig_result%swigdata = fresult
end function


subroutine SWIGTM_fin_char_Sm_(finp, iminp, temp)
use, intrinsic :: ISO_C_BINDING
character(len=*), intent(in) :: finp
type(SwigArrayWrapper), intent(out) :: iminp
character(kind=C_CHAR), dimension(:), target, allocatable, intent(out) :: temp
integer :: i

allocate(character(kind=C_CHAR) :: temp(len(finp) + 1))
do i=1,len(finp)
temp(i) = char(ichar(finp(i:i)), kind=C_CHAR)
end do
i = len(finp) + 1
temp(i) = C_NULL_CHAR ! C finp compatibility
iminp%data = c_loc(temp)
iminp%size = len(finp, kind=C_SIZE_T)
end subroutine

function pcms_create_degas2xgc_interpolator(xgc_mesh_filename, dg2_mesh_filename, radius) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
type(PcmsPointBasedInterpolatorHandle) :: swig_result
character(len=*), intent(in) :: xgc_mesh_filename
character(len=*), intent(in) :: dg2_mesh_filename
real(C_DOUBLE), intent(in) :: radius
type(SwigClassWrapper) :: fresult
character(kind=C_CHAR), dimension(:), allocatable, target :: farg1_temp
type(SwigArrayWrapper) :: farg1
character(kind=C_CHAR), dimension(:), allocatable, target :: farg2_temp
type(SwigArrayWrapper) :: farg2
real(C_DOUBLE) :: farg3

call SWIGTM_fin_char_Sm_(xgc_mesh_filename, farg1, farg1_temp)
call SWIGTM_fin_char_Sm_(dg2_mesh_filename, farg2, farg2_temp)
farg3 = radius
fresult = swigc_pcms_create_degas2xgc_interpolator(farg1, farg2, farg3)
swig_result%swigdata = fresult
end function

function pcms_create_degas2xgcnode_interpolator(target_points, target_points_size, dg2_mesh_filename, radius) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
type(PcmsPointBasedInterpolatorHandle) :: swig_result
type(C_PTR), intent(in) :: target_points
integer(C_INT), intent(in) :: target_points_size
character(len=*), intent(in) :: dg2_mesh_filename
real(C_DOUBLE), intent(in) :: radius
type(SwigClassWrapper) :: fresult
type(C_PTR) :: farg1
integer(C_INT) :: farg2
character(kind=C_CHAR), dimension(:), allocatable, target :: farg3_temp
type(SwigArrayWrapper) :: farg3
real(C_DOUBLE) :: farg4

farg1 = target_points
farg2 = target_points_size
call SWIGTM_fin_char_Sm_(dg2_mesh_filename, farg3, farg3_temp)
farg4 = radius
fresult = swigc_pcms_create_degas2xgcnode_interpolator(farg1, farg2, farg3, farg4)
swig_result%swigdata = fresult
end function

function pcms_create_interpolator(oh_mesh, radius) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
Expand Down Expand Up @@ -584,24 +673,6 @@ subroutine pcms_kokkos_finalize()
call swigc_pcms_kokkos_finalize()
end subroutine


subroutine SWIGTM_fin_char_Sm_(finp, iminp, temp)
use, intrinsic :: ISO_C_BINDING
character(len=*), intent(in) :: finp
type(SwigArrayWrapper), intent(out) :: iminp
character(kind=C_CHAR), dimension(:), target, allocatable, intent(out) :: temp
integer :: i

allocate(character(kind=C_CHAR) :: temp(len(finp) + 1))
do i=1,len(finp)
temp(i) = char(ichar(finp(i:i)), kind=C_CHAR)
end do
i = len(finp) + 1
temp(i) = C_NULL_CHAR ! C finp compatibility
iminp%data = c_loc(temp)
iminp%size = len(finp, kind=C_SIZE_T)
end subroutine

function read_oh_mesh(filename) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
Expand Down
17 changes: 14 additions & 3 deletions src/pcms/interpolator/interpolation_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ void MLSPointCloudInterpolation::find_supports(uint min_req_supports)
uint min_supports_found = 0;
uint max_supports_found = 0;
// radius adjustment loop
int loop_count = 0;
int max_count = 100;
while (min_supports_found < min_req_supports ||
max_supports_found > 3 * min_req_supports) {
// n^2 search, compare each point with all other points
Expand Down Expand Up @@ -184,6 +186,15 @@ void MLSPointCloudInterpolation::find_supports(uint min_req_supports)
break;
}

loop_count++;
Kokkos::fence();
if (loop_count > 100) {
printf("Loop count exceeded 100 and still not converged.\n"
"Manually check if the number of minimum and maximum supports are reasonable.\n"
"There are situations when it may not converge.\n");
break;
}

Kokkos::Min<uint> min_reducer(min_supports_found);
Kokkos::parallel_reduce(
"find number of supports", num_supports.size(),
Expand All @@ -203,8 +214,8 @@ void MLSPointCloudInterpolation::find_supports(uint min_req_supports)

// increase radius if not enough supports or too many supports
if (min_supports_found < min_req_supports || max_supports_found > 3 * min_req_supports) {
printf("Adjusting radius:(min: %d max: %d) min_req_supports: %d\n",
min_supports_found, max_supports_found, min_req_supports);
printf("Adjusting radius iter %d:(min: %d max: %d) min_req_supports: %d\n",
loop_count, min_supports_found, max_supports_found, min_req_supports);

Kokkos::fence();
Omega_h::parallel_for(
Expand All @@ -227,7 +238,7 @@ void MLSPointCloudInterpolation::find_supports(uint min_req_supports)
});
}
}
printf("Supports found: min: %d max: %d\n", min_supports_found, max_supports_found);
printf("Searched %d times and supports found: min: %d max: %d\n", loop_count, min_supports_found, max_supports_found);

// parallel scan for fill the support index with cumulative sum
auto support_ptr_l = Omega_h::Write<Omega_h::LO>(n_targets + 1, 0);
Expand Down