<div dir="ltr">Hi Jed,<div><br></div><div>I am back to work on this now...</div><div><br></div><div>Thanks for explaining how I can do this. it makes perfectly sense:</div><div><br></div><div>A. Assign entries values = 1, when forming the Adj matrix,</div>
<div><br></div><div>B. Convert the Adj matrix to AIJ matrix, so I can use <span style="font-size:13px;font-family:arial,sans-serif">MatMatTransposeMult (or form AIJ directly): can I preallocate AIJ before calling MatConvert? To avoid slow performance? Is there any conflict between the preallocoation functions and MatConvert?</span></div>
<div><span style="font-size:13px;font-family:arial,sans-serif"><br></span></div><div><span style="font-size:13px;font-family:arial,sans-serif">C. Filter </span>AIJ, to remove entries with values <3 (for 3d problems). What function shall I use to do this operation? </div>
<div><br></div><div>Thank you </div><div><br></div><div>Paolo </div><div>   </div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Nov 3, 2013 at 1:34 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">Paolo Orsini <<a href="mailto:paolo.orsini@gmail.com">paolo.orsini@gmail.com</a>> writes:<br>
<br>
> The computation of the dual graph of the mesh is a bit more complicated<br>
> than multiplying the adjacency matrix by its transpose, but not far off.<br>
> With this operation, also the cells that share only one node are connected<br>
> in the dual graph.<br>
> Instead, the minimum number of common nodes is >1 (2 in 2D probelms, 3 in<br>
> 3D problems). In fact, this is an input of MatMeshToCellGraph, I should<br>
> have understood this before.<br>
><br>
> This can be computed doing the transpose adjacency matrix (Adj_T), then<br>
> doing the multiplication line by line of Adj time Adj_T, and discard the<br>
> non zero entries coming from to elements that share a number of nodes less<br>
> than  the minimum number of common nodes imposed. I have not implement this<br>
> yet, any suggestion is welcome.<br>
<br>
<br>
</div>You can just put in weights of 1.0, call MatMatTransposeMult, and filter<br>
the resulting matrix.  It'll take a bit more memory, but probably not<br>
prohibitively much.<br>
<div class="im"><br>
> I also found out that Schotch has a facility to compute a dual graph from a<br>
> mesh, but not PTScotch.<br>
> Once the graph is computed, PTSchotch can load the central dual graph, and<br>
> distribute it into several processors during the loading.<br>
> Am i right to say that PETSC is interfaced only with PTSchotch and not with<br>
> Scotch?<br>
<br>
</div>Scotch is serial so even if we had a specialized Scotch interface, it<br>
would not be scalable (memory or time).<br>
<div class="im"><br>
> To check if the PTSchotch partition works (within PFLOTRAN ), I am<br>
> computing a DualMat with parmetis, saving it into a file. Then I recompile<br>
> the code (using a petsc compiled with ptscotch), an load the DualMat from a<br>
> file rather then forming a new one. I did a successful test when running on<br>
> one processor. but I am having trouble when try on more.<br>
<br>
</div>Make sure you load on the same communicator with the same sizes set (so<br>
that the distribution matches what you expect).  You'll have to be more<br>
specific if you want more help.<br>
<div class="im"><br>
> I though the the dual graph was computed only once, even during the mpi<br>
> process, instead it seems to be recomputed more than once. Not sure why....<br>
> sure i am missing something ???<br>
<br>
</div>That seems like a question about your program logic.  Should be easy to<br>
figure out if you set a breakpoint in the debugger.<br>
</blockquote></div><br></div>