<div dir="ltr"><div>Hi,</div><div><br></div><div>I have experienced a similar situation with a vtkUnstructuredGrid, and written a programmable filter something like:</div><div>----</div><div>import numpy as np</div><div><br></div><div>input = self.GetInput()</div><div>output = self.GetOutput()</div><div><br></div><div>numCells = input.GetNumberOfCells()</div><div><br></div><div>volChange = vtk.vtkFloatArray()</div><div>volChange.SetName("volumeChange")</div><div>volChange.SetNumberOfComponents(1)</div><div>volChange.SetNumberOfTuples(numCells)</div><div><br></div><div>for cellId in range(numCells):</div><div>  cell = input.GetCell(cellId)</div><div><br></div><div>  maxVol = -vtk.VTK_DOUBLE_MAX</div><div>  minVol = vtk.VTK_DOUBLE_MAX</div><div><br></div><div>  nFaces = cell.GetNumberOfFaces()</div><div>  for faceId in range(nFaces):</div><div>    pntIds = cell.GetFace(faceId).GetPointIds()</div><div><br></div><div>    neighbors = vtk.vtkIdList()</div><div>    input.GetCellNeighbors(cellId, pntIds, neighbors)</div><div><br></div><div>    numNei = neighbors.GetNumberOfIds()</div><div>    for num in range(numNei):</div><div>      neiId = neighbors.GetId(num)</div><div>      nei = input.GetCell(neiId)</div><div>      if nei.GetCellType() == vtk.VTK_TETRA:</div><div>        p1 = input.GetPoint(nei.GetPointId(0))</div><div>        p2 = input.GetPoint(nei.GetPointId(1))</div><div>        p3 = input.GetPoint(nei.GetPointId(2))</div><div>        p4 = input.GetPoint(nei.GetPointId(3))</div><div>        vol = vtk.vtkTetra.ComputeVolume(p1, p2, p3, p4)</div><div>        maxVol = np.maximum(maxVol, vol)</div><div>        minVol = np.minimum(minVol, vol)</div><div><br></div><div>  input.GetCell(cellId)</div><div>  #print(str(cellId) + ':' + str(maxVol/minVol))</div><div>  volChange.SetValue(cellId, maxVol/minVol)</div><div><br></div><div>output.GetCellData().AddArray(volChange)</div><div>----</div><div><br></div><div>Notice this computes the volumes of all cells that neighbor a cell on its faces.</div><div><br></div><div>Thanks,</div><div class="gmail_extra"><br><div class="gmail_quote">2018-02-15 23:17 GMT+09:00 Dennis Conklin <span dir="ltr"><<a href="mailto:dennis_conklin@goodyear.com" target="_blank">dennis_conklin@goodyear.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div class="m_-2503720935839202512WordSection1">
<p class="MsoNormal">Andy,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks for that hint – I think I get the idea.   This is a “as time is available” project, so I’ll start exploring it, but I appreciate being pointed in the right direction.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Dennis<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Andy Bauer [mailto:<a href="mailto:andy.bauer@kitware.com" target="_blank">andy.bauer@kitware.com</a><wbr>] <br>
<b>Sent:</b> Wednesday, February 14, 2018 1:51 PM<br>
<b>To:</b> Dennis Conklin <<a href="mailto:dennis_conklin@goodyear.com" target="_blank">dennis_conklin@goodyear.com</a>><br>
<b>Cc:</b> Paraview (<a href="mailto:paraview@paraview.org" target="_blank">paraview@paraview.org</a>) <<a href="mailto:paraview@paraview.org" target="_blank">paraview@paraview.org</a>><br>
<b>Subject:</b> [EXT] Re: [Paraview] Good neighbor filter<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<table class="m_-2503720935839202512MsoNormalTable" border="1" cellspacing="1" cellpadding="0" style="background:lightgrey;border:outset gray 1.0pt">
<tbody>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal"> <strong><span style="font-family:"Calibri",sans-serif;color:red">WARNING - External email; exercise caution.</span></strong><u></u><u></u></p>
</td>
</tr>
</tbody>
</table><div><div class="h5">
<p> <u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hi Dennis,<u></u><u></u></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt">I'm assuming you're dealing with a vtkUnstructuredGrid (for the topologically regular grids you should just use the extent information). You'll want to look at the GetCellNeighbors() method --
<a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.vtk.org%2Fdoc%2Fnightly%2Fhtml%2FclassvtkUnstructuredGrid.html%23ac532485599a5d92acf4d9ca1e8818bfc&data=01%7C01%7Cdennis_conklin%40goodyear.com%7Cf1004f8cac4a459ffdb908d573dbed3d%7C939e896692854a9a9f040887efe8aae0%7C0&sdata=L4bbRrKp82mtwWrnYEN6BqxNWNOkPVGp9Oa%2BMj7I7KU%3D&reserved=0" target="_blank">
https://www.vtk.org/doc/<wbr>nightly/html/<wbr>classvtkUnstructuredGrid.html#<wbr>ac532485599a5d92acf4d9ca1e8818<wbr>bfc</a>. Here, cellId is the cell you want to get the neighbors from, ptIds is the list of points that need to be shared by both cells and cellIds is the return
 list. You'll have to iterate over all points of the cell you're interested in (i.e. call GetCellNeighbors() 8 times for a hex).
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The basic algorithm is:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">loop over cells:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  for each cell, loop over all of its points<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    for each point call GeCellNeighbors(cellid, point id list with a single point)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">      loop through cellids to compare cell sizes<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Please let me know if this isn't clear enough to get you going...<u></u><u></u></p>
</div>
<p class="MsoNormal">Cheers,<u></u><u></u></p>
</div>
<p class="MsoNormal">Andy <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Wed, Feb 14, 2018 at 1:38 PM, Dennis Conklin <<a href="mailto:dennis_conklin@goodyear.com" target="_blank">dennis_conklin@goodyear.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">All,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">I am looking to calculate a mesh quality measure that would be the ratio of the max/min of the element volumes of each element and all it’s neighbors (other elements with common
 nodes).  I intend to use this to quantify grid refinement transitions and perhaps establish some design standards for them.    I have tried Gradient of Element Volume, but I need to eliminate the distance part of that to get the number that I want.    So,
 if I have a hex element in a regular grid,  I would expect to have 26 “neighbor” elements plus the original element.    The number I want is  (max of 27 element volumes)/(min of 27 element volumes).    This quantity will highlight mesh refinement transitions.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">My question (at last) is:    how do I find all the neighbor elements (share at least 1 node) of each element in my model?   I’d like to do this in a Programmable Filter.  I’m afraid
 I don’t know much about how connectivity is implemented in vtk.<u></u><u></u></p>
<p class="MsoNormal"><span style="color:#888888"> <u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#888888">Dennis<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
______________________________<wbr>_________________<br>
Powered by <a href="https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.kitware.com&data=01%7C01%7Cdennis_conklin%40goodyear.com%7Cf1004f8cac4a459ffdb908d573dbed3d%7C939e896692854a9a9f040887efe8aae0%7C0&sdata=1eTG5HFDLMAHdr2ttVYYFysnAKRt41UJMUv%2FGjjbiyc%3D&reserved=0" target="_blank">
www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.kitware.com%2Fopensource%2Fopensource.html&data=01%7C01%7Cdennis_conklin%40goodyear.com%7Cf1004f8cac4a459ffdb908d573dbed3d%7C939e896692854a9a9f040887efe8aae0%7C0&sdata=iXXmPAu3kwVyoiPGrJHLNwfXs4F2ELee3iatafqFl8o%3D&reserved=0" target="_blank">
http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the ParaView Wiki at: <a href="https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fparaview.org%2FWiki%2FParaView&data=01%7C01%7Cdennis_conklin%40goodyear.com%7Cf1004f8cac4a459ffdb908d573dbed3d%7C939e896692854a9a9f040887efe8aae0%7C0&sdata=AgCLTZ66JhdDdSQjpheyLuA3rvncYV%2FARBgs9jRtcTg%3D&reserved=0" target="_blank">
http://paraview.org/Wiki/<wbr>ParaView</a><br>
<br>
Search the list archives at: <a href="https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmarkmail.org%2Fsearch%2F%3Fq%3DParaView&data=01%7C01%7Cdennis_conklin%40goodyear.com%7Cf1004f8cac4a459ffdb908d573dbed3d%7C939e896692854a9a9f040887efe8aae0%7C0&sdata=XPSUQSMnug1qBDAhkYAgiyJI6EmAc8pbGqAORcHOBbk%3D&reserved=0" target="_blank">
http://markmail.org/search/?q=<wbr>ParaView</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpublic.kitware.com%2Fmailman%2Flistinfo%2Fparaview&data=01%7C01%7Cdennis_conklin%40goodyear.com%7Cf1004f8cac4a459ffdb908d573dbed3d%7C939e896692854a9a9f040887efe8aae0%7C0&sdata=iVoYqLJsOxIyl52xlsPTWq2GwotTF3sDRuOkoTafr40%3D&reserved=0" target="_blank">https://public.kitware.com/<wbr>mailman/listinfo/paraview</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div></div></div>
</div>

<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 ParaView Wiki at: <a href="http://paraview.org/Wiki/ParaView" rel="noreferrer" target="_blank">http://paraview.org/Wiki/<wbr>ParaView</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=ParaView" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>ParaView</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="https://public.kitware.com/mailman/listinfo/paraview" rel="noreferrer" target="_blank">https://public.kitware.com/<wbr>mailman/listinfo/paraview</a><br>
<br></blockquote></div><br></div></div>