[petsc-users] KSPSetComputeRHS and KSPSetComputeOperators
Matthew Knepley
knepley at gmail.com
Thu Nov 21 19:15:22 CST 2013
On Thu, Nov 21, 2013 at 7:08 PM, iwaddington . <iwaddington at gmail.com>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 <knepley at gmail.com>wrote:
>
>> On Thu, Nov 21, 2013 at 6:21 PM, iwaddington . <iwaddington at gmail.com>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 <knepley at gmail.com>wrote:
>>>
>>>> On Thu, Nov 21, 2013 at 5:44 PM, iwaddington . <iwaddington at gmail.com>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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20131121/7a2c66c3/attachment.html>
More information about the petsc-users
mailing list