[petsc-users] Strange compiling error in DMPlexDistribute after updating PETSc to V3.11.0

Smith, Barry F. bsmith at mcs.anl.gov
Sat Apr 6 02:13:51 CDT 2019



> On Apr 5, 2019, at 4:05 PM, Danyang Su via petsc-users <petsc-users at mcs.anl.gov> wrote:
> 
> Hi Satish,
> 
> Because of the intent(out) declaration, I use a temporary solution that passing a PetscSF type variable to DMPlexDistribute instead of passing PETSC_NULL_SF. But I am still confused how the example works without problem.

   Yes this is strange. I cannot explain the inconsistent behavior between the two codes. Any chance you can send us your code (petsc-maint at mcs.anl.gov) so we can reproduce the problem?

   The intent(out) is obviously wrong in the interface definition since the function need not return the value. Could you please try removing the intent from the interface definition in http://bitbucket.org/petsc/petsc/commits/fdb49207a8b58c421782c7e45b1394c0a6567048, run make again on PETSc and see if that allows you to use PETSC_NULL_SF in your code? 

   We would like to fix PETSc to handle this case

   Thanks

     Barry

> 
> Thanks,
> 
> Danyang
> 
> On 2019-04-05 2:00 p.m., Balay, Satish wrote:
>> Ah - the message about distributed_dm - not PETSC_NULL_SF. So I'm off base here..
>> 
>> Satish
>> 
>> 
>> On Fri, 5 Apr 2019, Balay, Satish via petsc-users wrote:
>> 
>>> A fortran interface definition was added in petsc-3.11 so the compile now checks if its used correctly.
>>> 
>>> http://bitbucket.org/petsc/petsc/commits/fdb49207a8b58c421782c7e45b1394c0a6567048
>>> 
>>> +          PetscSF, intent(out) :: sf
>>> 
>>> So this should be inout?
>>> 
>>> [All auto-generated stubs don't quantify intent()]
>>> 
>>> Satish
>>> 
>>> On Fri, 5 Apr 2019, Danyang Su via petsc-users wrote:
>>> 
>>>> Hi All,
>>>> 
>>>> I got a strange error in calling DMPlexDistribute after updating PETSc to
>>>> V3.11.0. There sounds no change in the interface of DMPlexDistribute as
>>>> documented in
>>>> 
>>>> https://www.mcs.anl.gov/petsc/petsc-3.10/docs/manualpages/DMPLEX/DMPlexDistribute.html#DMPlexDistribute
>>>> 
>>>> https://www.mcs.anl.gov/petsc/petsc-3.11/docs/manualpages/DMPLEX/DMPlexDistribute.html#DMPlexDistribute
>>>> 
>>>> The code section is shown below.
>>>> 
>>>>       !c distribute mesh over processes
>>>>       call
>>>> DMPlexDistribute(dm,stencil_width,PETSC_NULL_SF,distributed_dm,ierr)
>>>> 
>>>> When I use PETSc V3.10 and earlier versions, it works fine. After updating to
>>>> latest PETSc V3.11.0, I got the following error during compiling
>>>> 
>>>>       call
>>>> DMPlexDistribute(dm,stencil_width,PETSC_NULL_SF,distributed_dm,ierr)
>>>>                                                                      1
>>>> Error: Non-variable expression in variable definition context (actual argument
>>>> to INTENT = OUT/INOUT) at (1)
>>>> /home/dsu/Soft/PETSc/petsc-3.11.0/linux-gnu-opt/lib/petsc/conf/petscrules:31:
>>>> recipe for target '../../solver/solver_ddmethod.o' failed
>>>> 
>>>> The fortran example
>>>> /home/dsu/Soft/PETSc/petsc-3.11.0/src/dm/label/examples/tutorials/ex1f90.F90
>>>> which also uses DMPlexDistribute can be compiled without problem. Is there any
>>>> updates in the compiler flags I need to change?
>>>> 
>>>> Thanks,
>>>> 
>>>> Danyang
>>>> 
>>>> 
>>>> 



More information about the petsc-users mailing list