[petsc-users] How much memory does TS use (in terms of # of matrices)
Andrew Spott
andrew.spott at gmail.com
Wed May 16 09:17:46 CDT 2012
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/4e40476a/attachment.htm>
More information about the petsc-users
mailing list