<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Sep 1, 2014 at 8:44 AM, Florian Lindner <span dir="ltr"><<a href="mailto:mailinglists@xgm.de" target="_blank">mailinglists@xgm.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 01.09.2014 12:45, schrieb Matthew Knepley:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, Sep 1, 2014 at 4:10 AM, Florian Lindner <<a href="mailto:mailinglists@xgm.de" target="_blank">mailinglists@xgm.de</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
I want to set the entire column of a N x M matrix to a N vector. What is<br>
the best way to do that?<br>
<br>
My first guess would be to VecGetArray and use that array for<br>
MatSetValuesLocal with nrow = VecGetLocalSize. What is the best to say<br>
MatSetValuesLocal that I want to set all rows continuesly (same like<br>
passing irow = [0, 1, ..., VecGetLocalSize-1]?<br>
<br>
Any better way?<br>
<br>
</blockquote>
<br>
You are assuming dense storage above, so you can use<br>
<br>
<br>
<a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatDenseGetArray.html+" target="_blank">http://www.mcs.anl.gov/petsc/<u></u>petsc-current/docs/<u></u>manualpages/Mat/<u></u>MatDenseGetArray.html+</a><br>

</blockquote>
<br>
How can you tell that I'm assuming dense storage. My matrix is actually dense, but I try to write my code as generic as possible (being a very petsc newbie). I have that code which crashes at the moment:<br></blockquote>
<div><br></div><div>I recommend running using the debugger so you can get a stack trace, and perhaps see</div><div>exactly what the problem is. You can also run under valgrind as the error says.</div><div><br></div><div>   Matt</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    void set_column_vector(Vector v, int col)<br>
    {<br>
      PetscErrorCode ierr = 0;<br>
      const PetscScalar *vec;<br>
      PetscInt size, mat_rows, mat_cols;<br>
      VecGetLocalSize(v.vector, &size);<br>
      cout << "Vector Size = " << size << endl;<br>
<br>
      MatGetSize(matrix, &mat_rows, &mat_cols);<br>
      cout << "Matrix Rows  = " << mat_rows << " Columns = " << mat_cols << endl;<br>
      PetscInt irow[size];<br>
      for (int i = 0; i < size; i++) {<br>
        irow[i] = i;<br>
      }<br>
<br>
      ierr = VecGetArrayRead(v.vector, &vec); CHKERRV(ierr);<br>
      ierr = MatSetValuesLocal(matrix, size-1, irow, 1, &col, vec, INSERT_VALUES); CHKERRV(ierr);<br>
      ierr = VecRestoreArrayRead(v.vector, &vec); CHKERRV(ierr);<br>
      ierr = MatAssemblyBegin(matrix, MAT_FINAL_ASSEMBLY); CHKERRV(ierr);<br>
      ierr = MatAssemblyEnd(matrix, MAT_FINAL_ASSEMBLY); CHKERRV(ierr);<br>
    }<br>
<br>
v.vector is a Vec, matrix is a Mat. col = 1. It's compiled with mpic++, but started without, just ./a.out. Output is:<br>
<br>
Vector Size = 20<br>
Matrix Rows  = 20 Columns = 5<br>
[0]PETSC ERROR: ------------------------------<u></u>------------------------------<u></u>------------<br>
[0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range<br>
[0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger<br>
[0]PETSC ERROR: or see <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind[0]PETSC" target="_blank">http://www.mcs.anl.gov/petsc/<u></u>documentation/faq.html#<u></u>valgrind[0]PETSC</a> ERROR: or try <a href="http://valgrind.org" target="_blank">http://valgrind.org</a> on GNU/linux and Apple Mac OS X to find memory corruption errors<br>

[0]PETSC ERROR: likely location of problem given in stack below<br>
[0]PETSC ERROR: ---------------------  Stack Frames ------------------------------<u></u>------<br>
[0]PETSC ERROR: Note: The EXACT line numbers in the stack are not available,<br>
[0]PETSC ERROR:       INSTEAD the line number of the start of the function<br>
[0]PETSC ERROR:       is given.<br>
[0]PETSC ERROR: [0] MatSetValuesLocal line 1950 /home/florian/software/petsc/<u></u>src/mat/interface/matrix.c<br>
[0]PETSC ERROR: --------------------- Error Message ------------------------------<u></u>------------------------------<u></u>--<br>
[0]PETSC ERROR: Signal received<br>
[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/<u></u>documentation/faq.html</a> for trouble shooting.<br>
[0]PETSC ERROR: Petsc Release Version 3.5.1, unknown<br>
[0]PETSC ERROR: ./a.out on a arch-linux2-c-debug named asaru by florian Mon Sep  1 15:37:32 2014<br>
[0]PETSC ERROR: Configure options --with-c2html=0<br>
[0]PETSC ERROR: #1 User provided function() line 0 in  unknown file<br>
------------------------------<u></u>------------------------------<u></u>--------------<br>
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD<br>
with errorcode 59.<br>
<br>
NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.<br>
You may or may not see output from other processes, depending on<br>
exactly when Open MPI kills them.<br>
------------------------------<u></u>------------------------------<u></u>--------------<br>
<br>
<br>
Any idea what the problem is?<br>
<br>
Thanks!<span class="HOEnZb"><font color="#888888"><br>
Florian<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener
</div></div>