<div dir="auto">Okay, thank you so much!<div dir="auto"><br></div><div dir="auto">Eda</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Aug 30, 2020, 9:36 PM Jose E. Roman <<a href="mailto:jroman@dsic.upv.es">jroman@dsic.upv.es</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The user interface of Chaco includes an argument for edge weights (don't know which methods within Chaco take them into account). The original PETSc wrapper to Chaco was developed by a student of mine (together with Scotch, Party and Jostle) at around 2003. At that time, MatPartitioning only had support for vertex weights (edge weight support has been introduced very recently), so we just passed a NULL in this argument.<br>
<br>
Jose<br>
<br>
<br>
> El 30 ago 2020, a las 16:35, Barry Smith <<a href="mailto:bsmith@petsc.dev" target="_blank" rel="noreferrer">bsmith@petsc.dev</a>> escribió:<br>
> <br>
> <br>
> <br>
>> On Aug 30, 2020, at 2:57 AM, Eda Oktay <<a href="mailto:eda.oktay@metu.edu.tr" target="_blank" rel="noreferrer">eda.oktay@metu.edu.tr</a>> wrote:<br>
>> <br>
>> Dear Matt,<br>
>> <br>
>> First of all I figured out that I asked wrongly. It's not ParMETIS giving the same result. It is CHACO. ParMETIS gives different results when I use edge weights. <br>
>> <br>
>> Thanks! <br>
>> <br>
>> Dear Barry,<br>
>> <br>
>> I am trying to partition the matrix to compare the edge cuts when it is partitioned with CHACO, ParMETIS and the spectral partitioning algorithm with the k-means clustering (I wrote this code in PETSc).  In the end, I will conclude that if a linear system is to be solved and the coefficient matrix is large in size, then partitioning the coefficient matrix by using one of these algorithms will help one to solve the linear system faster and with small communication.<br>
>> <br>
>> What is forcing matrix to have all positive values? Isn't it done by using MatPartitioningGetUseEdgeWeights and MatPartitioningSetUseEdgeWeights?<br>
>> <br>
>> I will send the test case but I am already passing my original matrix directly to SetAdjacency (SymmA is my symmetric matrix with positive values):<br>
>> <br>
>>   ierr = MatConvert(SymmA,MATMPIADJ,MAT_INITIAL_MATRIX,&AL);CHKERRQ(ierr);                           <br>
>>   ierr = MatPartitioningCreate(MPI_COMM_WORLD,&part);CHKERRQ(ierr);<br>
>>   ierr = MatPartitioningSetAdjacency(part,AL);CHKERRQ(ierr); <br>
>>    ierr = MatPartitioningSetFromOptions(part);CHKERRQ(ierr);<br>
> <br>
>   You should not need this. Just <br>
> <br>
>     ierr = MatPartitioningCreate(MPI_COMM_WORLD,&part);CHKERRQ(ierr);<br>
>     ierr = MatPartitioningSetAdjacency(part,SymmA);CHKERRQ(ierr); <br>
>     ierr = MatPartitioningSetFromOptions(part);CHKERRQ(ierr);<br>
> <br>
> <br>
>   MatPartitioningSetAdjacency takes any MatType directly.<br>
> <br>
> <br>
>> <br>
>> So, if ParMETIS gives different edge cut as it is expected, MatPartitioningGetUseEdgeWeights and MatPartitioningSetUseEdgeWeights works correctly. Why can't CHACO?<br>
>> <br>
>> Thanks!<br>
>> <br>
>> Eda<br>
>> <br>
>> Barry Smith <<a href="mailto:bsmith@petsc.dev" target="_blank" rel="noreferrer">bsmith@petsc.dev</a>>, 30 Ağu 2020 Paz, 03:00 tarihinde şunu yazdı:<br>
>> <br>
>> <br>
>> > On Aug 29, 2020, at 2:23 PM, Eda Oktay <<a href="mailto:eda.oktay@metu.edu.tr" target="_blank" rel="noreferrer">eda.oktay@metu.edu.tr</a>> wrote:<br>
>> > <br>
>> > Hi all,<br>
>> > <br>
>> > I am trying to partition a sparse matrix by using ParMETIS. I am converting my matrix to adjacency type and then applying partitioning.<br>
>> <br>
>>  You don't need to do this. Just pass your original matrix directly into MatPartitioningSetAdjacency() it will handle any conversions needed.<br>
>> <br>
>>  Edge weights need to be positive, since they represent how much communication is to take place over that link. You may need to force your matrix to have all positive values before giving it to MatPartitioningSetAdjacency and using edge weights. <br>
>> <br>
>>   I this doesn't work than our code is broken, please send us a simple test case<br>
>> <br>
>>   Question: Why are you partitioning a matrix? Is it for load balancing of solves or matrix vector products with the matrix? To reduce interprocess communication during solves or matrix vector products with the matrix? If so the numerical values in the matrix don't affect load balance or interprocess communication for these operations. <br>
>> <br>
>> <br>
>>   Barry<br>
>> <br>
>> <br>
>> <br>
>> <br>
>> > Default, I understood that partitioning doesn't use edge-weights. However, when I used the following codes I saw from ex15 and used "-test_use_edge_weights 1", I am getting the same results as when I don't consider edge weights.<br>
>> > <br>
>> > PetscBool use_edge_weights=PETSC_FALSE;<br>
>> >   PetscOptionsGetBool(NULL,NULL,"-test_use_edge_weights",&use_edge_weights,NULL);<br>
>> >   if (use_edge_weights) {<br>
>> >       MatPartitioningSetUseEdgeWeights(part,use_edge_weights);<br>
>> > <br>
>> >       MatPartitioningGetUseEdgeWeights(part,&use_edge_weights);<br>
>> >       if (!use_edge_weights) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_INCOMP, "use_edge_weights flag does not setup correctly \n");<br>
>> >     }<br>
>> > <br>
>> > My matrix does not consist of 1s and 0s, so I want partitioning to consider all the nonzero elements in the matrix as edge weights. Don't MatPartitioningSetUseEdgeWeights and MatPartitioningGetUseEdgeWeights do that? Should I add something more? In the page of MatPartitioningSetUseEdgeWeights, it is written that "If set use_edge_weights to TRUE, users need to make sure legal edge weights are stored in an ADJ matrix.". How can I make sure of this? <br>
>> > <br>
>> > I am trying to compare the use of ParMETIS with the spectral partitioning algorithm when I used a weighted Laplacian.<br>
>> > <br>
>> > Thanks!<br>
>> > <br>
>> > Eda<br>
>> > <br>
<br>
</blockquote></div>