[petsc-users] How much memory does TS use (in terms of # of matrices)

Aron Ahmadia aron.ahmadia at kaust.edu.sa
Wed May 16 09:22:13 CDT 2012


You do realize that MatDuplicate is making a copy, right?

A

On Wed, May 16, 2012 at 5:17 PM, Andrew Spott <andrew.spott at gmail.com>wrote:

> Ok, so now I'm leaking memory without even creating the extra matrix:
>
> PetscErrorCode HamiltonianJ(TS timeStepContext, PetscReal t, Vec u, Mat
> *A, Mat *B, MatStructure *flag, void* context)
> {
>     PetscErrorCode  err;
>     Context         *cntx = (Context*)context;
>     PetscScalar     ef = eField(t, cntx->params);
>     //if (cntx->rank == 0) std::cout << "ef: " << ef;
>
>     err = MatDuplicate(cntx->energy_eigenstates,MAT_COPY_VALUES,A);
>     err = MatAXPY(*A, ef, cntx->dipole_matrix, DIFFERENT_NONZERO_PATTERN);
>
> err = MatAssemblyBegin(*A, MAT_FINAL_ASSEMBLY);
> err = MatAssemblyEnd(*A, MAT_FINAL_ASSEMBLY);
>
>     *flag = DIFFERENT_NONZERO_PATTERN;
>
>     // absorb!
>
>     return err;
> }
>
> I'm honestly stumped now…
>
> -Andrew
>
>
> On May 16, 2012, at 7:17 AM, Jed Brown wrote:
>
> On Wed, May 16, 2012 at 7:08 AM, Andrew Spott <andrew.spott at gmail.com>wrote:
>
>> Not until you pointed it out… :).  Though it probably should have been.
>>  It was late.
>>
>> Though I'm not sure how to fix that… should I do a MatDestroy(A) at the
>> beginning of that function every time?.
>>
>> Is *A a pointer to the last used matrix, should I just do the mat
>> duplicate into A?
>>
>
> Do you really mean to only change A (the operator), but not B (the
> preconditioning matrix)?
>
> Why do you want to create a new matrix instead of reusing those?
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120516/fe67eab7/attachment-0001.htm>


More information about the petsc-users mailing list