[petsc-users] Memory corruption with two-dimensional array and PetscMemzero

Christophe Ortiz christophe.ortiz at ciemat.es
Wed May 21 08:49:58 CDT 2014


On Wed, May 21, 2014 at 3:44 PM, Jed Brown <jed at jedbrown.org> wrote:

> Christophe Ortiz <christophe.ortiz at ciemat.es> writes:
> > In some sense, yes. I create and destroy inside FormIJacobian() (my
> > Jacobian evaluation routine). Therefore it is called at each timestep. I
> > guess this takes time. But it is slower than doing the many malloc.
>
> What communicator (you should use VecCreateSeq)?


I used:
  VecCreateSeq(PETSC_COMM_SELF,dof*dof,&X);

inside FormIJacobian()



>  Be sure to profile a
> configure --with-debugging=0.
>
> How many elements do you have on each process?  How big are the
> elements?
>

For the moment, dof is small (dof=4). Still doing some tests with the
classes and methods. But should reach 1000-10000 in production.


>
> > How can I create a global vector that would be passed to FormIJacobian()
> ?
> > Creating it only once instead of doing it at each timestep would save
> time.
>
> You can/should always put this stuff in the user context (which comes in
> via the last argument).
>

Ahhh...did not think about it ! This would allow to create the vector only
once in the main (after dof is determined) and pass it as argument to
FormIJacobian(). I will try. Thanks !


>
> > I need to use this vector (size dof*dof) with classes and methods inside
> > FormIJacobian() to calculate the different blocks that are passed to the
> > Jacobian with MatSetValuesBlocked(). However, I cannot pass it as
> argument
> > of FormIJacobian() since there is no room for it in the arguments.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140521/270f72c8/attachment.html>


More information about the petsc-users mailing list