[Paraview] problems generating ghost cells, update on PKdTree questions

Christine Corbett Moran corbett at physik.uzh.ch
Thu Nov 19 18:50:58 EST 2009


I'm having trouble with generating ghost cells, either on my own or
with D3 (via the duplicate boundary points mode). In neither case am I
able to see a single ghost level of value 1 for any of my points on a
test data set, which has 10,000 cells, one point per cell, distributed
on 4 processors. I try both generating ghost cells at level one within
my d3 call in my reader as follows:
		vtkSmartPointer<vtkDistributedDataFilter> d3 = \
		    vtkSmartPointer<vtkDistributedDataFilter>::New();
		d3->AddInput(tipsyReadInitialOutput);
		d3->UpdateInformation();
		vtkStreamingDemandDrivenPipeline* exec = \
		 	static_cast<vtkStreamingDemandDrivenPipeline*>(d3->GetExecutive()); 	
		// adds one ghostlevel
		exec->SetUpdateExtent(exec->GetOutputInformation(0), piece, numPieces, 1);
		d3->Update();
		// changing output to output of d3
	 	output->ShallowCopy(d3->GetOutput());
		output->GetInformation()->Set(
			vtkDataObject::DATA_NUMBER_OF_GHOST_LEVELS(), 1);
And, as far as I can tell, the procedure for a filter requesting ghost
levels is:
		// Requesting one level of ghost cells
                vtkInformation* inInfo =
inputVector[0]->GetInformationObject(0);
		inInfo->Set(
			vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS(),1);
And my reader or D3 would then have to access the inInfo act on this
request. However neither my filter nor D3 are generating any ghost
cells, as is verified by examining:
                 output->GetPointData()->GetArray("vtkGhostLevels")->GetTuple(
				nextHaloId)[0]
Can any one see what's going on? I've read a chunk of vtk source
referencing vtkGhostLevels or using UPDATE_NUMBER_OF_GHOST_LEVELS but
haven't found the clue yet.

An update on my D3/PKd tree question: I decided to run D3
automatically if the user checks a button in my readers and strongly
recommend they run D3 if they don't use my readers. I found that
BuildLocator() or BuildLocatorFromPoints(points) never worked as I had
hoped from the documentation (I wanted to call it once/or on all
processes on the PkD tree generated by D3 and have it build a locator
which works across all processes, i.e. can also find points belonging
to a neighbor process), so instead I build a KdTree locator local to
each process, separate from the PKdTree generated by D3, and
coordinate a search if necessary, I can still make this highly data
parallel for my applications, e.g. finding the mass of all points
within a given radius by doing local searches/consolidation and just
sending the results for a final consolidation to the root.

Christine


More information about the ParaView mailing list