<div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Yes I was just hoping there'd be more than that. <br></div><div><br></div><div>I have tried using one of them as basis:</div><div><br></div><div>import PetscBinaryIO<br>import numpy as np<br>import scipy.sparse<br><br>b_vector = np.array(np.fromfile('Vector_b.bin'      ,dtype=np.dtype((np.float64,2))));<br>A_matrix = np.array(np.fromfile('Matrix_A_cmplx.bin',dtype=np.dtype((np.float64,2))));<br>A_indexs = np.array(np.fromfile('Matrix_A_int.bin'  ,dtype=np.dtype((np.int32       ,2))));<br><br>b_vector = b_vector[:,0] + 1j*b_vector[:,1]<br>A_matrix = A_matrix[:,0] + 1j*A_matrix[:,1]<br><br>A_matrix = scipy.sparse.csr_matrix((A_matrix, (A_indexs[:,0]-1, A_indexs[:,1]-1))) <br><br>vec = b_vector.view(PetscBinaryIO.Vec)<br><br>io = PetscBinaryIO.PetscBinaryIO()<br>io.writeBinaryFile('Vector_b.dat', [vec,])<br>io.writeMatSciPy('Matrix_A.dat', A_matrix)</div><div><br></div><div>I was able to do it convert and read the Vector_b in fine. <br></div><div>So what I am having trouble with is actually converting the scipy.sparse.csr_matrix into the PETSc format. I thought the writeMatSciPy would do that by calling writeMatSparse?</div><div>Maybe I have misunderstood something here? <br></div><div><br></div><div>All the best,</div><div>S<br></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 8, 2018 at 10:10 AM Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Thu, Nov 8, 2018 at 4:56 AM Sal Am via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Thanks, I missed that,</div><div><br></div><div>I do care about scalability, the long term plan is to make it fully compatible on a cluster so I guess I would need to convert it to PETSc binary format before reading it in. <br></div><div><br></div><div>Is this the file you were referring to <a href="https://github.com/erdc/petsc-dev/blob/master/bin/pythonscripts/PetscBinaryIO.py" target="_blank">https://github.com/erdc/petsc-dev/blob/master/bin/pythonscripts/PetscBinaryIO.py</a></div><div><br></div><div>Cannot seem to find docs on how to use it, do you happen to have any examples? </div></div></div></blockquote><div><br></div><div>The documentation is at the top of the file. You can see it by clicking the link.</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"><div dir="ltr"><div dir="ltr"><div>All the best,</div><div>S<br></div><div><br></div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Nov 7, 2018 at 4:07 PM Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Please always use "reply-all" so that your messages go to the list.<br>
This is standard mailing list etiquette.  It is important to preserve<br>
threading for people who find this discussion later and so that we do<br>
not waste our time re-answering the same questions that have already<br>
been answered in private side-conversations.  You'll likely get an<br>
answer faster that way too.<br>
<br>
Sal Am <<a href="mailto:tempohoper@gmail.com" target="_blank">tempohoper@gmail.com</a>> writes:<br>
<br>
> Thank you Jed for the quick response!<br>
><br>
>><br>
>> Yes, of course the formats would have to match.  I would recommend<br>
>> writing the files in an existing format such as PETSc's binary format.<br>
>><br>
><br>
> Unfortunately I do not think I can change the source code to output those<br>
> two files in PETSc format and it would probably take a very long time<br>
> converting everything into PETSc (it is not even my code).<br>
<br>
File-based workflows are very often bottlenecks.  You can also use any<br>
convenient software (e.g., Python or Matlab/Octave) to convert your<br>
custom binary formats to PETSc binary format (see PetscBinaryIO provided<br>
with PETSc), at which point you'll be able to read in parallel.  If you<br>
don't care about scalability or only need to read once, then you can<br>
write code of the type you propose.<br>
<br>
> Do you have any other suggestions on how to read in those two complex<br>
> binary files? Also why would it be more difficult to parallelise as<br>
> I thought getting the two files in PETSc vector format would allow me to<br>
> use the rest of PETSc library the usual way?<br>
><br>
> Kind regards,<br>
> S<br>
><br>
><br>
> On Mon, Nov 5, 2018 at 4:49 PM Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br>
><br>
>> Sal Am via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> writes:<br>
>><br>
>> > Hi,<br>
>> ><br>
>> > I am trying to solve a Ax=b complex system. the vector b and "matrix" A<br>
>> are<br>
>> > both binary and NOT created by PETSc. So I keep getting error messages<br>
>> that<br>
>> > they are not correct format when I read the files with<br>
>> PetscViewBinaryOpen,<br>
>> > after some digging it seems that one cannot just read a binary file that<br>
>> > was created by another software.<br>
>><br>
>> Yes, of course the formats would have to match.  I would recommend<br>
>> writing the files in an existing format such as PETSc's binary format.<br>
>> While the method you describe can be made to work, it will be more work<br>
>> to make it parallel.<br>
>><br>
>> > How would I go on to solve this problem?<br>
>> ><br>
>> > More info and trials:<br>
>> ><br>
>> > "matrix" A consists of two files, one that contains row column index<br>
>> > numbers and one that contains the non-zero values. So what I would have<br>
>> to<br>
>> > do is multiply the last term in a+b with PETSC_i to get a real +<br>
>> imaginary<br>
>> > vector A.<br>
>> ><br>
>> > vector b is in binary, so what I have done so far (not sure if it works)<br>
>> is:<br>
>> ><br>
>> > std::ifstream input("Vector_b.bin", std::ios::binary );<br>
>> > while (input.read(reinterpret_cast<char*>(&v), sizeof(float)))<br>
>> >      ierr    = VecSetValues(u,1,&iglobal,&v,INSERT_VALUES);CHKERRQ(ierr);<br>
>> ><br>
>> > where v is a PetscScalar.<br>
>> ><br>
>> > Once I am able to read both matrices I think I can figure out the solvers<br>
>> > to solve the system.<br>
>> ><br>
>> > All the best,<br>
>> > S<br>
>><br>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_-657465001372628774gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>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><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>