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
