Yeah, thanks for pointing out my mistake. Next time i'm going to think
one more time before writing ;)

On Fri, Oct 21, 2016 at 12:17 PM, Lawrence Mitchell
<lawrence.mitch...@imperial.ac.uk> wrote:
>
>> On 21 Oct 2016, at 08:26, Julian Andrej <j...@tf.uni-kiel.de> wrote:
>>
>> On Thu, Oct 20, 2016 at 5:18 PM, Matthew Knepley <knep...@gmail.com> wrote:
>>> On Thu, Oct 20, 2016 at 9:42 AM, Julian Andrej <j...@tf.uni-kiel.de> wrote:
>>>>
>>>> Thanks for the suggestion. I guess DMCreateSubDM can work, but is
>>>> cumbersome to handle for the normal solution process since the mass
>>>> matrix for example is not a seperate field.
>>>
>>>
>>> I did not understand what you meant by "parts of the physics". If you just
>>> want to make a different operator, then swap out the PetscDS from the DM.
>>> That holds the pointwise functions and discretizations.
>>>
>>
>> Yes, its basically a different operator! Thats a really smart design,
>> i can just create different PetscDS objects and stick them in to
>> assemble the operator.
>>
>>  /* Assemble mass operator */
>>  DMSetDS(dm, ds_mass);
>>  DMPlexSNESComputeJacobianFEM(dm, dummy, ctx->M, ctx->M, NULL);
>>  /* Assemble laplacian operator */
>>  DMSetDS(dm, ds_laplacian);
>>  DMPlexSNESComputeJacobianFEM(dm, dummy, ctx->J, ctx->J, NULL);
>>
>> There is one thing that bothers me just a bit. Everytime you call
>> DMSetDS the old PetscDS object is destroyed and you have to reacreate
>> the object in case you want to reassemble that operator.
>>
>> src/dm/interface/dm.c:3889:  ierr = PetscDSDestroy(&dm->prob);CHKERRQ(ierr);
>
> All objects in PETSc are refcounted.  So this just drops the reference that 
> the DM is holding to the DS.  As long as you're still holding a reference in 
> your code (you haven't called PetscDSDestroy) then this does not actually 
> deallocate the DS, just decrements the refcount.
>
> Lawrence

Reply via email to