diff --git a/Filters/ParallelDIY2/Testing/Cxx/TestGenerateGlobalIds.cxx b/Filters/ParallelDIY2/Testing/Cxx/TestGenerateGlobalIds.cxx index ef4a10047ef35883228cf2445cce1a104b3107a3..5d115d605ab829702fae6c214317f35359a9bd1c 100644 --- a/Filters/ParallelDIY2/Testing/Cxx/TestGenerateGlobalIds.cxx +++ b/Filters/ParallelDIY2/Testing/Cxx/TestGenerateGlobalIds.cxx @@ -35,14 +35,13 @@ namespace { -static const int nblocks = 3; static int whole_extent[] = { 0, 99, 0, 99, 0, 99 }; vtkSmartPointer CreateDataSet( - vtkMultiProcessController* contr, int ghost_level) + vtkMultiProcessController* contr, int ghost_level, int nblocks) { - const int num_ranks = contr->GetNumberOfProcesses(); - const int rank = contr->GetLocalProcessId(); + const int num_ranks = contr ? contr->GetNumberOfProcesses() : 1; + const int rank = contr ? contr->GetLocalProcessId() : 0; const int total_nblocks = nblocks * num_ranks; vtkNew translator; @@ -68,10 +67,10 @@ vtkSmartPointer CreateDataSet( return mb; } -bool ValidateDataset( - vtkMultiBlockDataSet* mb, vtkMultiProcessController* contr, int vtkNotUsed(ghost_level)) +bool ValidateDataset(vtkMultiBlockDataSet* mb, vtkMultiProcessController* contr, + int vtkNotUsed(ghost_level), int nblocks) { - const int num_ranks = contr->GetNumberOfProcesses(); + const int num_ranks = contr ? contr->GetNumberOfProcesses() : 1; const int total_nblocks = nblocks * num_ranks; vtkIdType local_non_duplicated_points = 0; @@ -144,27 +143,41 @@ int TestGenerateGlobalIds(int argc, char* argv[]) vtkMultiProcessController::SetGlobalController(contr); int status = EXIT_SUCCESS; - if (auto dataset = CreateDataSet(contr, 0)) // no cell overlap + if (auto dataset = CreateDataSet(contr, 0, 3)) // no cell overlap { vtkNew generator; generator->SetInputDataObject(dataset); generator->Update(); if (!ValidateDataset( - vtkMultiBlockDataSet::SafeDownCast(generator->GetOutputDataObject(0)), contr, 0)) + vtkMultiBlockDataSet::SafeDownCast(generator->GetOutputDataObject(0)), contr, 0, 3)) { status = EXIT_FAILURE; } } - if (auto dataset = CreateDataSet(contr, 1)) // cell overlap + if (auto dataset = CreateDataSet(contr, 1, 3)) // cell overlap { vtkNew generator; generator->SetInputDataObject(dataset); generator->Update(); if (!ValidateDataset( - vtkMultiBlockDataSet::SafeDownCast(generator->GetOutputDataObject(0)), contr, 1)) + vtkMultiBlockDataSet::SafeDownCast(generator->GetOutputDataObject(0)), contr, 1, 3)) + { + status = EXIT_FAILURE; + } + } + + // test a dataset with 1 block per rank. + if (auto dataset = CreateDataSet(contr, 1, 1)) + { + vtkNew generator; + generator->SetInputDataObject(dataset); + generator->Update(); + + if (!ValidateDataset( + vtkMultiBlockDataSet::SafeDownCast(generator->GetOutputDataObject(0)), contr, 1, 1)) { status = EXIT_FAILURE; } diff --git a/Filters/ParallelDIY2/vtkGenerateGlobalIds.cxx b/Filters/ParallelDIY2/vtkGenerateGlobalIds.cxx index 4b32ad91d53fdd34982a81aa11bf66b686d291a2..708b24f7a0347b039ccfd0d2eb39beccbdd441a6 100644 --- a/Filters/ParallelDIY2/vtkGenerateGlobalIds.cxx +++ b/Filters/ParallelDIY2/vtkGenerateGlobalIds.cxx @@ -176,11 +176,14 @@ static bool GenerateIds(vtkDataObject* dobj, vtkGenerateGlobalIds* self, bool ce vtkLogEndScope("populate master"); self->UpdateProgress(0.25); - vtkLogStartScope(TRACE, "kdtree"); - // use diy::kdtree to shuffle points around so that all spatially co-located - // points are within a block. - diy::kdtree(master, assigner, 3, gdomain, &ElementBlockT::Elements, /*hist_bins=*/512); - vtkLogEndScope("kdtree"); + if (assigner.nblocks() > 1) + { + vtkLogStartScope(TRACE, "kdtree"); + // use diy::kdtree to shuffle points around so that all spatially co-located + // points are within a block. + diy::kdtree(master, assigner, 3, gdomain, &ElementBlockT::Elements, /*hist_bins=*/512); + vtkLogEndScope("kdtree"); + } self->UpdateProgress(0.50); vtkLogStartScope(TRACE, "merge-points");