On Mon, Sep 18, 2017 at 6:16 PM, David Gross <[email protected]> wrote:
> Hi Matt, > I took a deeper look into the dev documentation and the src/mat code. > All the source is online, so I think that is a good way to talk about it in email. > From what I understand there are multiple places that the code needs to be > added or referenced in. I created a copy of AXPY in axpy.c > Lets look at MatAXPY(): https://bitbucket.org/petsc/petsc/src/a2d7f5eaef7c3b636ab943ac50d4f7c86905df62/src/mat/utils/axpy.c?at=master&fileviewer=file-view-default#axpy.c-22 You just need to make a copy of this function. You want Z = X * Y, right?, (or maybe Y = X * Y) so its MatPointwiseMult(Mat Z, Mat X, Mat Y) After the initial checks for compatibility, it dispatches https://bitbucket.org/petsc/petsc/src/a2d7f5eaef7c3b636ab943ac50d4f7c86905df62/src/mat/utils/axpy.c?at=master&fileviewer=file-view-default#axpy.c-36 Here lets ignore the version optimized for a particular storage format, and just use the generic version https://bitbucket.org/petsc/petsc/src/a2d7f5eaef7c3b636ab943ac50d4f7c86905df62/src/mat/utils/axpy.c?at=master&fileviewer=file-view-default#axpy.c-58 Here we take advantage of the built-in ADD_VALUES, but there is no MULT_VALUES option. Thus, we would need to get the row of X and Y, compare columns (which come out sorted) and then insert the result. However, the alternative is have it error if MatStructure is DIFFERENT_NONZERO_PATTERN, so you can assume that both rows are identical and dispense with the column checking. > and compiled without issue and could even reference it in my code without > compiler error, but found that it wasn't actually doing anything as best I > can tell. Am I correct in that one must make implementations for each > matrix type in mat/impls? Also I assume that it needs to be added to > matipl.h, include/petscmat.h, and finclude/petscmat.h . > > Is there somewhere that documents the process of adding functions to PETSc > classes? I couldn't find anything in the developers manual. > There is a discussion of this in the tutorials, and in here http://www.mcs.anl.gov/petsc/developers/index.html there is a discussion of adding different types of things. THanks, Matt > Regards, > Dave > > On Thu, Sep 14, 2017 at 10:07 PM, David Gross <[email protected]> > wrote: > >> Hi Matt, >> Noted for the naming convention. >> >> Yes, it is a Newton method (see Pan, V. and Reif, J., Fast and Efficient >> Parallel Solution of Dense Linear Systems, Computers Math. Applications. >> Vol. 17, No. 11, pp. 1481-1491, 1989) >> >> The dense matrix I have is repeatedly inverted while slowly changing such >> that the previous inverse is a near perfect guess for the new inverse. >> >> Regards, >> Dave >> >> On Thu, Sep 14, 2017 at 2:49 AM, Matthew Knepley <[email protected]> >> wrote: >> >>> On Wed, Sep 13, 2017 at 6:14 PM, David Gross <[email protected]> >>> wrote: >>> >>>> Hi Matt, >>>> Thank you for getting back to me. Your answer confirms what I thought >>>> in terms of existing functionality. I think it shouldn't be too hard to >>>> make a copy of MatAXPY to MatAXY where it performs Xij = A*Xij*Yij (or >>>> without the A). I could then do the MatNorm of the resulting matrix to get >>>> what I need. >>>> >>>> Is a MatAXY function desirable as a source contribution? >>>> >>> >>> Yes. I would prefer calling it MatPointwiseMult, since you can see it as >>> VecPointwiseMult on a Vec obtained >>> from forgetting the linear operator structure of the matrix (forgetful >>> functor). >>> >>> >>>> I am hoping to use PETSc for performing basic vector and matrix >>>> operations on dense matrices and 1D vectors. The main uses are matmult, >>>> matmatmult and matrix additions and scaling. The application is for >>>> implementing a parallel version on an existing Pan-Reif matrix inversion >>>> algorithm. >>>> >>> >>> Is this Newton's method on the vector space of matrices? >>> >>> Thanks, >>> >>> Matt >>> >>> >>>> The choice of using PETSc is mostly due to us already using it in the >>>> same program to solve sparse matrices (with MUMPS) with the goal of >>>> avoiding adding yet another package (ex ScaLAPACK/PBLAS) into the code even >>>> if other packages may be more directly oriented towards my application. >>>> >>>> Regards, >>>> Dave >>>> >>>> >>>> >>>> On Mon, Sep 11, 2017 at 2:19 AM, Matthew Knepley <[email protected]> >>>> wrote: >>>> >>>>> On Sun, Sep 10, 2017 at 5:51 PM, David Gross <[email protected]> >>>>> wrote: >>>>> >>>>>> Hello, >>>>>> I was wondering if there was a matrix equivalent to the vecDot >>>>>> function (Frobenius inner product)? As far as I can tell the closest >>>>>> thing >>>>>> is MatNorm with NORM_FROBENIUS, but obviously this is acting on only one >>>>>> matrix. >>>>>> >>>>>> If there is not a built in function, what is the best way to compute >>>>>> this? I am working fortran90. >>>>>> >>>>> >>>>> We do not have this. However, it would be trivial to add since we have >>>>> >>>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpage >>>>> s/Mat/MatAXPY.html >>>>> >>>>> since you just replace + with * in our code. You could argue that we >>>>> should have written for >>>>> a general ring, but C makes this cumbersome. Do you think you could >>>>> make the change? >>>>> >>>>> What are you using this for? >>>>> >>>>> Thanks, >>>>> >>>>> Matt >>>>> >>>>> >>>>>> Regards, >>>>>> Dave >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> What most experimenters take for granted before they begin their >>>>> experiments is infinitely more interesting than any results to which their >>>>> experiments lead. >>>>> -- Norbert Wiener >>>>> >>>>> http://www.caam.rice.edu/~mk51/ >>>>> >>>> >>>> >>> >>> >>> -- >>> What most experimenters take for granted before they begin their >>> experiments is infinitely more interesting than any results to which their >>> experiments lead. >>> -- Norbert Wiener >>> >>> http://www.caam.rice.edu/~mk51/ >>> >> >> > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener http://www.caam.rice.edu/~mk51/
