On Thu, Nov 21, 2013 at 11:50 PM, iwaddington . <[email protected]>wrote:
> But still regarding the issue of setting the matrix that will be used to > build the preconditioner, what would be the way to do it in the function > that I described you before , without the use of matcopy to make it equal > to the system matrix set with MatSetValuesStencil? My idea is to use the > conjugate gradient method. Sorry to bother so much, but I am learning petsc > all by myself. > > > > On Thu, Nov 21, 2013 at 11:27 PM, Matthew Knepley <[email protected]>wrote: > >> On Thu, Nov 21, 2013 at 7:24 PM, iwaddington . <[email protected]>wrote: >> >>> My idea is to use MatSetValuesStencil to set the system matrix, because >>> I am dealing with a dmda, and regarding the prototype, I know that what is >>> written in the web page is different, but when you look further in the >>> src/ksp/ksp/interface/itfunc.c<http://www.mcs.anl.gov/petsc/petsc-current/src/ksp/ksp/interface/itfunc.c.html#KSPSetComputeOperators>and >>> also the example files you see that my prototype is in fact the right >>> one. >>> >> >> I will fix the docs. Yes, just call MatSetValuesStencil. >> >> Matt >> >> >>> On Thu, Nov 21, 2013 at 11:15 PM, Matthew Knepley <[email protected]>wrote: >>> >>>> On Thu, Nov 21, 2013 at 7:08 PM, iwaddington . >>>> <[email protected]>wrote: >>>> >>>>> Thanks Matthew, but how exactly do I do that in a user defined >>>>> function of the form used by KSPSetComputeOperators: >>>>> >>>> >>>> There are a few problems here: >>>> >>>> 1) Your prototype is wrong: >>>> >>>> >>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/KSPSetComputeOperators.html >>>> >>>> 2) Regardless, people generally use the matrix that is passed in. Thus >>>> you call >>>> >>>> MatSetValues(*J, ...) >>>> >>>> Why are you not doing this? >>>> >>>> 3) It is customary if you have the same system and preconditioner >>>> matrix to assemble into the preconditioner >>>> >>>> Matt >>>> >>>> >>>>> #undef __FUNCT__ >>>>> #define __FUNCT__ "ComputeMatrix" >>>>> PetscErrorCode ComputeMatrix(KSP ksp, Mat J,Mat jac,MatStructure *str, >>>>> void *ctx) >>>>> { >>>>> >>>>> /* variables */ >>>>> >>>>> PetscFunctionBeginUser; >>>>> >>>>> /* Setting the system linear matrix J*/ >>>>> >>>>> /* Now I want to set jac=J which is the preconditioning matrix in this >>>>> part , my first idea was to use matcopy, but I would like something more >>>>> efficient */ >>>>> >>>>> PetscFunctionReturn(0); >>>>> >>>>> } >>>>> >>>>> >>>>> >>>>> >>>>> On Thu, Nov 21, 2013 at 10:26 PM, Matthew Knepley >>>>> <[email protected]>wrote: >>>>> >>>>>> On Thu, Nov 21, 2013 at 6:21 PM, iwaddington . <[email protected] >>>>>> > wrote: >>>>>> >>>>>>> Sorry Matthew, but I didn't understand what you said, because it is >>>>>>> not the case of passing arguments to a function, I have to write the >>>>>>> function which I will later pass to KSPSetComputeOperators, and in >>>>>>> the function I have to set the system linear matrix and preconditioning >>>>>>> matrix. >>>>>>> >>>>>> >>>>>> You can return the same matrix for the system and preconditioner. >>>>>> >>>>>> Matt >>>>>> >>>>>> >>>>>>> On Thu, Nov 21, 2013 at 10:00 PM, Matthew Knepley <[email protected] >>>>>>> > wrote: >>>>>>> >>>>>>>> On Thu, Nov 21, 2013 at 5:44 PM, iwaddington . < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> HI everybody, I have a doubt concerning how the function >>>>>>>>> KSPSetComputeRHS works, because according to its prototype one of its >>>>>>>>> arguments is a pointer to a function that takes a vector object as >>>>>>>>> argument, not a pointer towards a vector object, so how is it able to >>>>>>>>> set >>>>>>>>> the rhs if the passage of the vector is done by value and not by >>>>>>>>> reference ? >>>>>>>>> >>>>>>>> >>>>>>>> The values of the Vec can be set, rather than changing the object >>>>>>>> pointer itself. >>>>>>>> >>>>>>>> >>>>>>>>> Another thing is the functioning of KSPSetComputeOperators. I want >>>>>>>>> to set the linear system matrix and I want the preconditioning matrix >>>>>>>>> to be >>>>>>>>> equal, so can I just set the linar system matrix in the function that >>>>>>>>> is >>>>>>>>> argument of KSPSetComputeOperators, or do I need to make a matcopy in >>>>>>>>> it ? >>>>>>>>> >>>>>>>> >>>>>>>> No, just give the same argument twice. >>>>>>>> >>>>>>>> Matt >>>>>>>> >>>>>>>> -- >>>>>>>> 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 >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> 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 >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> 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 >>>> >>> >>> >> >> >> -- >> 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 >> > >
