[petsc-users] A question of DMPlexGetAdjacency
leejearl
leejearl at 126.com
Tue Nov 15 06:07:50 CST 2016
Hi, Matt:
Thank you for your kind reply. Since it is a low level routine, is
there any method which I can used for creating a
dynamic array?
Thanks
leejearl
On 2016年11月15日 16:20, Matthew Knepley wrote:
> On Tue, Nov 15, 2016 at 1:00 AM, leejearl <leejearl at 126.com
> <mailto: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
> <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
> <mailto: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/7c301508/attachment.html>
More information about the petsc-users
mailing list