<div dir="ltr">Hi Ufuk,<div><br></div><div>If there is one vtkStructuredGrid per multi-block you don't need the whole extent. Using a vtkStructuredGrid in a multiblock though will result in each grid block to be considered a separate grid so if you do something like extracting the surface it probably won't look correct unless you generate your own ghost cells (the ghost cell generator filter in PV won't work). </div><div><br></div><div>I only briefly looked through your code snippet but I suspect there's an "off-by-1" bug in the way you're setting your point coordinates for the structured grids but once that's fixed it will work the way you want it to. </div><div><br></div><div>I probably don't know your full use case but I would suggest for non-Catalyst stuff to just avoid the multiblock here and just generate structured grid pieces.</div><div><br></div><div>Best,</div><div>Andy</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 2, 2017 at 8:13 AM, Ufuk Turuncoglu <span dir="ltr"><<a href="mailto:ufuk.turuncoglu@itu.edu.tr" target="_blank">ufuk.turuncoglu@itu.edu.tr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Again,<br>
<br>
I create following test code to write dummy data (checkerboard with 0 and 1) using vtkStructuredGrid in multiblock format. Without extent in left and top of the tiles the data looks correct but there is a gap between pieces (see attached screenshot). To fix the issue, i add a extra piece of code to overlap one row and columns (using hasLeft and hasTop control). The problem is that when i run the code with this modification, i am getting totally wrong grid representation (screen2). I just wonder that do i need to set whole extent in somewhere. I tried to add following to set whole extent to multiblock dataset,<br>
<br>
int extent[6] = {0, N-1, 0, N-1, 0, 0};<br>
mb->GetInformationObject(0)->S<wbr>et(vtkStreamingDemandDrivenPip<wbr>eline::WHOLE_EXTENT(), extent, 6);<br>
<br>
but it won't work as i expected. Any suggestion? Thanks.<br>
<br>
Regards,<br>
<br>
--ufuk<br>
<br>
<br>
#include <iostream><br>
#include "mpi.h"<br>
#include "vtkStructuredGrid.h"<br>
#include "vtkSmartPointer.h"<br>
#include "vtkMultiBlockDataSet.h"<br>
#include "vtkMultiPieceDataSet.h"<br>
#include "vtkNew.h"<br>
#include "vtkXMLPMultiBlockDataWriter.h<wbr>"<br>
#include "vtkMPIController.h"<br>
#include "vtkDoubleArray.h"<br>
#include "vtkDataSet.h"<br>
#include "vtkPointData.h"<br>
#include "vtkInformation.h"<br>
#include "vtkStreamingDemandDrivenPipel<wbr>ine.h"<br>
<br>
using namespace std;<br>
<br>
// global variables<br>
int const N = 10;<br>
int const tileX = 2;<br>
int const tileY = 2;<br>
<br>
int main(int argc, char** argv) {<br>
  // initialize MPI<br>
  MPI_Init(NULL, NULL);<br>
<br>
  // setup global controller, true means initialized externally<br>
  vtkNew<vtkMPIController> controller;<br>
  controller->Initialize(&argc, &argv, true);<br>
vtkMultiProcessController::Set<wbr>GlobalController(controller.<wbr>Get());<br>
<br>
  // get number of processor and rank<br>
  int nproc, myid;<br>
  MPI_Comm_size(MPI_COMM_WORLD, &nproc);<br>
  MPI_Comm_rank(MPI_COMM_WORLD, &myid);<br>
<br>
  // create 2d decomposition parameters<br>
  bool hasLeft = false, hasTop = false;<br>
  if (myid%tileX == 0) hasLeft = true;<br>
  if (myid/tileY == 0) hasTop = true;<br>
<br>
  int istr = myid%tileX*N/tileX;<br>
  int iend = istr+N/tileX-1;<br>
  if (hasLeft) iend = iend+1;<br>
  int jstr = myid/tileX*N/tileY;<br>
  int jend = jstr+N/tileY-1;<br>
  if (hasTop) jend = jend+1;<br>
  int size = (iend-istr+1)*(jend-jstr+1);<br>
  //cout << myid << " of " << nproc << " " << boolalpha << hasLeft << " " << hasTop << endl;<br>
  //cout << myid << " " << istr << " " << iend << " " << jstr << " " << jend << endl;<br>
<br>
  // create structured grid<br>
  vtkSmartPointer<vtkStructuredG<wbr>rid> grid = vtkSmartPointer<vtkStructuredG<wbr>rid>::New();<br>
<br>
  // define grid coordinates<br>
  vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::Ne<wbr>w();<br>
  points->SetNumberOfPoints(size<wbr>);<br>
<br>
  int id = 0;<br>
  for (int i = istr; i <= iend; i++) {<br>
    for (int j = jstr; j <= jend; j++) {<br>
      points->SetPoint(id, i, j, 0);<br>
      id = id+1;<br>
    }<br>
  }<br>
<br>
  grid->SetPoints(points);<br>
  grid->SetExtent(istr, iend, jstr, jend, 0, 0);<br>
  points->Delete();<br>
<br>
  // add field, checkerboard type data with full of 0/1<br>
  vtkSmartPointer<vtkDoubleArray<wbr>> field = vtkSmartPointer<vtkDoubleArray<wbr>>::New();<br>
  field->SetName("dummy");<br>
  field->SetNumberOfComponents(1<wbr>);<br>
  field->SetNumberOfValues(size)<wbr>;<br>
<br>
  id = 0;<br>
  for (int i = istr; i <= iend; i++) {<br>
    for (int j = jstr; j <= jend; j++) {<br>
      int val = (i+j)%2 ? 0 : 1;<br>
      field->SetValue(id, val);<br>
      id = id+1;<br>
    }<br>
  }<br>
<br>
  // create multi block grid<br>
  vtkMultiBlockDataSet* mb = vtkMultiBlockDataSet::New();<br>
  vtkNew<vtkMultiPieceDataSet> mpds;<br>
  mpds->SetNumberOfPieces(nproc)<wbr>;<br>
  mpds->SetPiece(myid, grid.GetPointer());<br>
  mb->SetNumberOfBlocks(1);<br>
  mb->SetBlock(0, mpds.GetPointer());<br>
<br>
  // add field<br>
  vtkDataSet *ds = vtkDataSet::SafeDownCast(mpds-<wbr>>GetPiece(myid));<br>
  ds->GetPointData()->AddArray(f<wbr>ield);<br>
<br>
  // create a writer<br>
  vtkSmartPointer<vtkXMLPMultiBl<wbr>ockDataWriter> mbw = vtkSmartPointer<vtkXMLPMultiBl<wbr>ockDataWriter>::New();<br>
  mbw->SetFileName("test.vtm");<br>
  mbw->SetDataModeToAscii();<br>
  mbw->SetInputData(mb);<br>
  mbw->Write();<br>
<br>
  // finalize the MPI environment.<br>
  MPI_Finalize();<br>
<br>
  return 0;<br>
}<br>
<br>______________________________<wbr>_________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><br></div></div>