[petsc-users] A question of DMPlexGetAdjacency

Matthew Knepley knepley at gmail.com
Tue Nov 15 02:20:41 CST 2016


On Tue, Nov 15, 2016 at 1:00 AM, leejearl <leejearl at 126.com> wrote:

> Hi Lawrence:
>
>     Thank you for your prompt reply.  It works well, but I encounter
> another problem.
>
>  The code is as follows:
>
>         PetscScalar *arrayConVar, *arrayDeltaX, *arrayDeltaY;
>
>         ierr = DMPlexGetAdjacency(dm, c, &adjSize, &adj); CHKERRQ(ierr);
>
>         /*PetscSynchronizedPrintf(PETSC_COMM_WORLD, "adjSize = %d\n",
> adjSize);*/
>         adjSizeInterior = -1;
>         for(i = 0; i < adjSize; i++)
>         {
>             if(adj[i] < cEndInterior)
>             {
>                 adjSizeInterior++;
>                 /*PetscSynchronizedPrintf(PETSC_COMM_WORLD, "adj[%d]=
> %d\n", i, adj[i]);*/
>             }
>         }
>         /*
>         PetscSynchronizedPrintf(PETSC_COMM_WORLD, "adjSizeInterior =
> %d\n", adjSizeInterior);
>         PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);
>         */
>
>         ierr = PetscMalloc3(adjSizeInterior*4, &arrayConVar,
> adjSizeInterior, &arrayDeltaX, adjSizeInterior, &arrayDeltaY);
> CHKERRQ(ierr);
>
>         PetscFree3(arrayConVar, arrayDeltaX, arrayDeltaY); CHKERRQ(ierr);
>         ierr = PetscFree(adj); CHKERRQ(ierr);
>
> The error messages are like as :
>
> [0]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: Petsc has generated inconsistent data
> [0]PETSC ERROR: Invalid mesh exceeded adjacency allocation (0)
>

You are resetting the size to 0 in your loop. It needs to be set to
PETSC_DETERMINE.

This is a very low level routine with complicated memory management for
efficiency. It is not intended for
most user code. However, here is an example:


https://bitbucket.org/petsc/petsc/src/f98bafe09724ec53686c21e51e969e41f10d977b/src/dm/impls/plex/plexdistribute.c?at=master&fileviewer=file-view-default#plexdistribute.c-570

  Thanks,

     Matt


> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html
> for trouble shooting.
> [0]PETSC ERROR: Petsc Development GIT revision: v3.7.4-1864-ga10654c  GIT
> Date: 2016-11-01 22:25:06 -0500
> [0]PETSC ERROR: ./cavity on a arch-linux2-c-debug named leejearl by
> leejearl Tue Nov 15 14:48:57 2016
> [0]PETSC ERROR: Configure options --prefix=/home/leejearl/Install/Petsc
> --with-mpi-dir=/home/leejearl/Install/openmpi/1.8.5_gnu
> --download-exodusii=../externalpackages/exodus-5.24.tar.bz2
> --download-netcdf=../externalpackages/netcdf-4.3.2.tar.gz
> --download-hdf5=../externalpackages/hdf5-1.8.12.tar.gz
> --download-triangle=../externalpackages/Triangle.tar.gz
> --download-sowing=../externalpackages/git.sowing.tar.gz
> [0]PETSC ERROR: #1 DMPlexGetAdjacency_Cone_Internal() line 193 in
> /home/leejearl/Software/petsc/petsc/src/dm/impls/plex/plexdistribute.c
> [0]PETSC ERROR: #2 DMPlexGetAdjacency_Internal() line 298 in
> /home/leejearl/Software/petsc/petsc/src/dm/impls/plex/plexdistribute.c
> [0]PETSC ERROR: #3 DMPlexGetAdjacency() line 372 in
> /home/leejearl/Software/petsc/petsc/src/dm/impls/plex/plexdistribute.c
> [0]PETSC ERROR: #4 CalcConVarGradient() line 126 in
> /home/leejearl/Desktop/PETSc/GKSCavity_Petsc/cavity.c
>
> It is very strange that PetscMalloc3 can arouse such an error. If I
> comment the statement relative with PetscMalloc3, it is ok! I can not
> understand what happened.
>
> Can anyone figure me out the problems of my codes?
>
> I attach the code and the grid, so you can compile in your workstation.
>
> Thanks
>
> leejearl
>
>
> On 2016年11月14日 23:09, Lawrence Mitchell wrote:
>
>> On 14 Nov 2016, at 14:59, leejearl <leejearl at 126.com> wrote:
>>>
>>> Hi all:
>>>
>>>     I am not sure the using of the function "DMPlexGetAdjacency".
>>>
>>>     My codes are as follows:
>>>
>>>     PetscInt adj, *adjSize=NULL;
>>>
>>>     ierr = DMPlexGetAdjacency(dm, p,  &adj, &adj);
>>>
>>
>> Your calling sequence is wrong:
>>
>> PetscInt adjSize;
>> PetscInt *adj = NULL;
>>
>> ierr = DMPlexGetAdjacency(dm, p, &adjSize, &adj); CHKERRQ(ierr);
>>
>> adjSize is now the size of the adj array.  You should remember to free it
>> afterwards:
>>
>> /* use adj here *
>> ...
>>
>> ierr = PetscFree(adj); CHKERRQ(ierr);
>>
>> Lawrence
>>
>
>


-- 
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/20161115/056d44e3/attachment.html>


More information about the petsc-users mailing list