<div dir="ltr"><div dir="ltr">On Sat, Feb 12, 2022 at 8:21 AM Samar Khatiwala <<a href="mailto:samar.khatiwala@earth.ox.ac.uk">samar.khatiwala@earth.ox.ac.uk</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
I’d like to create an array of Vecs in petsc4py by calling VecDuplicateVecs but I can’t find the corresponding method (I’ve tried various iterations such as q = x.duplicateVecs(4), etc). <br>
Is this not implemented in petsc4py? One workaround I’ve come up with is something like:<br>
<br>
q={}<br>
for i in range(0, 3):<br>
    q[i]=x.duplicate()<br>
<br>
Is there another/better way? And how do I then use PETSc functions that operate on Vecs (e.g., VecMAXPY)? Would I just call VecAXPY in a loop as above?<br></blockquote><div><br></div><div>I don't think so, but maybe Lisandro has a suggestion. You can do this in one line</div><div><br></div><div>q = [x.duplicate() for i in range(0, 3)]</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Ultimately, what I really want to do is wrap my own C functions with Cython that take an array of Vecs as an argument and then operate on them. (The function needs the entire array <br>
of Vecs to do its thing so I can’t loop over the elements of the array.) For instance, I want to pass the q above to myCfunc(Vec *q, Vec *qout). How do I go about doing that?<br></blockquote><div><br></div><div>I think you can do the same thing as VecMAXPY,</div><div><br></div><div>    def maxpy(self, alphas, vecs):<br>        cdef PetscInt n = 0<br>        cdef PetscScalar *a = NULL<br>        cdef PetscVec *v = NULL<br>        cdef object tmp1 = iarray_s(alphas, &n, &a)<br>        cdef object tmp2 = oarray_p(empty_p(n),NULL, <void**>&v)<br>        assert n == len(vecs)<br>        cdef Py_ssize_t i=0<br>        for i from 0 <= i < n:<br>            v[i] = (<Vec?>(vecs[i])).vec<br>        CHKERR( VecMAXPY(self.vec, n, a, v) )<br></div><div> </div><div>  Thanks,</div><div><br></div><div>     Matt</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Thanks very much!<br>
<br>
Best,<br>
<br>
Samar<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="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>