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

Danyang Su danyang.su at gmail.com
Sat Apr 6 13:33:29 CDT 2019


On 2019-04-06 12:13 a.m., Smith, Barry F. wrote:
>
>> 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

Hi Barry,

After changing "PetscSF, intent(out) :: sf" to "PetscSF :: sf" in 
DMPlexDistribute interface, it allows me to use PETSC_NULL_SF in my code.

Thanks,

Danyang

>> 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