[petsc-dev] Fortran interface problem in v.3.10.2

Martin Diehl m.diehl at mpie.de
Mon Oct 22 08:55:07 CDT 2018


On Sat, 2018-10-20 at 17:51 +0000, Smith, Barry F. wrote:
> > On Oct 20, 2018, at 12:43 PM, Martin Diehl <m.diehl at mpie.de> wrote:
> > 
> > From: "Smith, Barry F." <bsmith at mcs.anl.gov> 
> > To: Martin Diehl <m.diehl at mpie.de> 
> > Cc: Adrian Croucher <a.croucher at auckland.ac.nz>, For users of the
> > development version of PETSc <petsc-dev at mcs.anl.gov> 
> > Sent: 10/20/2018 6:22 PM 
> > Subject: Re: [petsc-dev] Fortran interface problem in v.3.10.2 
> > 
> > 
> > 
> > > On Oct 20, 2018, at 6:13 AM, Martin Diehl <m.diehl at mpie.de>
> > > wrote: 
> > > 
> > > Barry, Adrian, 
> > > 
> > > I looked into this and found the following on type(*) from IBM 
> > > 
> > > 
https://www.ibm.com/support/knowledgecenter/SSAT4T_15.1.4/com.ibm.xlf1514.lelinux.doc/language_ref/assumedtypeobj.html
> > >  
> > > 
> > > To summarize, type(*) is exactly meant for C interfaces with
> > > void* 
> > > dummy arguments (sorry for the Fortran speak, I don't know if
> > > dummy 
> > > argument is a term common in C programming). 
> > > 
> > > The last statement is 
> > > "An assumed-type dummy argument cannot correspond to an actual
> > > argument 
> > > of a derived type that has type parameters, type-bound
> > > procedures, or 
> > > final subroutines." 
> > > which seems to be the reason why the code does not compile. 
> > 
> >    I am now concerned that our use of type(*) in PETSc Fortran
> > interfaces is just wrong and I see no good solution except to not
> > have interface definitions for any Fortran stub routines that have
> > void *arguments.
> > To my understanding, it is fine. type(*) was meant for interfacing
> > *void and that's what you use it for. However, it imposes some
> > restrictions on the actual argument. For that reason, Intel Fortran
> > does not compile the example code, with or without explicit
> > interface. GNU fortran compiles the code without interface,
> > presumably because it cannot detect that the code is not standard
> > conforming.
> 
>    I'm sorry, I don't understand. Are you saying that the example
> code is not correct Fortran?
In the case that your interface has a type(*) argument, it is not valid
Fortran because 'context_type' contains the type-bound procedure
'context_init'. That is why the GNU compiler complains when the
interface exists. Apparently, without the interface it accepts it, so
not having an interface would be a solution in that case. However, the
Intel compiler will fail during linking with or without interface, so
it does not seem to be a general solution.
At the moment, I believe that one simply has to live with the
limitations that type(*) imposes on the data that can be passed to
void*. To clarify this, I opened a thread in the Intel developer zone
and will keep you updated

https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/798744


> > 
> > I propose to further clarify the situation I'll present the problem
> > at the Intel Developer Zone forum.
> > 
> > > 
> > > 
> > > Then, I tried the following things: 
> > > 
> > > 1) Compiling your code with the current PETSc master and gfortran
> > > 8.2 
> > > to check whether this issue has been fixed by the GCC
> > > developers. 
> > > 
> > > It still gives the same error 
> > > 
> > > 
> > > 2) Compiling your code with the Intel Fortran compiler (18.0.1)
> > > an the 
> > > current PETSc master. 
> > > 
> > > It gives a very cryptic error 
> > > /usr/bin/x86_64-linux-gnu-ld: test_snes.o: undefined reference
> > > to 
> > > symbol 'for_set_reentrancy' 
> > > /opt/intel/compilers_and_libraries_2018/linux/lib/intel64/libifco
> > > remt.s 
> > > o.5: error adding symbols: DSO missing from command line 
> > > See also https://software.intel.com/en-us/node/679295 
> > > 
> > > 
> > > 3) Compiling your code with the Intel Fortran compiler and either
> > > PETSc 
> > > 3.10.0 or the PETSc master without the Fortran interface for 
> > > SNESsetConvergenceTest 
> > > 
> > > It still gives the same error as for 2) 
> > > 
> > > 
> > > Do you have access to any other compilers to check whether they
> > > can 
> > > compile your application/test_example? 
> > > 
> > > best regards 
> > > Martin 
> > > 
> > > 
> > > 
> > > 
> > > On Fri, 2018-10-19 at 19:52 +0000, Smith, Barry F. wrote: 
> > > > 
> > > >  Adrian, 
> > > > 
> > > >  I goggled a bit but couldn't understand anything I found. My
> > > > guess 
> > > > is that 
> > > > 
> > > > type(*) 
> > > > 
> > > > doesn't work for certain derived types (why not?) perhaps those
> > > > that 
> > > > contain procedures. If I remove the procedure from the 
> > > > routine it all compiles, thus producing some evidence my theory
> > > > is 
> > > > correct. 
> > > > 
> > > >  So we have a problem. The type checking one user wants is
> > > > causing 
> > > > another users code to not build. 
> > > > 
> > > >  Here is a short term fix you can do.  After you run
> > > > ./configure 
> > > > edit $PETSC_ARCH/include/petscconf.h locate 
> > > > 
> > > > #ifndef PETSC_HAVE_FORTRAN_TYPE_STAR 
> > > > #define PETSC_HAVE_FORTRAN_TYPE_STAR 1 
> > > > #endif 
> > > > 
> > > > then run make. This will turn off the type checking for all
> > > > routines 
> > > > that have type(*) arguments which includes
> > > > SNESSetConvergenceTest 
> > > > 
> > > >  I don't have a good long term solution at the moment. Maybe a 
> > > > Fortran expert has some idea. 
> > > > 
> > > >   Barry 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > > On Oct 18, 2018, at 10:14 PM, Adrian Croucher < 
> > > > 
> > > > a.croucher at auckland.ac.nz> wrote: 
> > > > > 
> > > > > hi Barry, 
> > > > > 
> > > > > On 18/10/18 11:34 AM, Smith, Barry F. wrote: 
> > > > > >   Sorry about this problem. I think the change was only 
> > > > 
> > > > introduced in master and should not affect 3.10.x Please
> > > > confirm that 
> > > > master is where the failed compile is? 
> > > > > 
> > > > > Yes, it's on master. I have tracked down the commit at which
> > > > > it 
> > > > 
> > > > started to fail: 6f222c9d1e, "type checking for Fortran" (Fri
> > > > Sep 
> > > > 28). 
> > > > > 
> > > > > >   Please send us the calling sequence of your routine that
> > > > > > won't 
> > > > 
> > > > compile (cut and paste). 
> > > > > 
> > > > > I've attached a minimal example program which fails with the 
> > > > 
> > > > following error: 
> > > > > 
> > > > >   call SNESSetConvergenceTest(snes, convergence, context, & 
> > > > >                                                 1 
> > > > > Error: Actual argument at (1) to assumed-type dummy is of
> > > > > derived 
> > > > 
> > > > type with type-bound or FINAL procedures 
> > > > > 
> > > > > Cheers, Adrian 
> > > > > 
> > > > > > > On Oct 17, 2018, at 5:21 PM, Adrian Croucher < 
> > > > 
> > > > a.croucher at auckland.ac.nz> wrote: 
> > > > > > > 
> > > > > > > hi 
> > > > > > > 
> > > > > > > A colleague has just reported that my code no longer
> > > > > > > builds with 
> > > > 
> > > > PETSc 3.10.2, though it builds OK with 3.10.1. 
> > > > > > > 
> > > > > > > The problem appears to be the Fortran interface to 
> > > > 
> > > > SNESSetConvergenceTest(), which was changed at commit f9a1a4d. 
> > > > > > > 
> > > > > > > It now complains about the context argument we are
> > > > > > > passing in to 
> > > > 
> > > > this function ('cctx' in the interface, which is declared there
> > > > as 
> > > > type(*)). The error is: 
> > > > > > > 
> > > > > > > "Error: Actual argument at (1) to assumed-type dummy is
> > > > > > > of 
> > > > 
> > > > derived type with type-bound or FINAL procedures" 
> > > > > > > 
> > > > > > > This is true, the argument being passed in is of derived
> > > > > > > type 
> > > > 
> > > > with type-bound procedures. Previously this didn't bother it,
> > > > but it 
> > > > looks like it does now. 
> > > > > > > 
> > > > > > > Is its complaint legitimate? or perhaps a compiler bug?
> > > > > > > (this is 
> > > > 
> > > > using gcc 6.3.0) 
> > > > > > > 
> > > > > > > - Adrian 
> > > > > > > 
> > > > > 
> > > > > -- 
> > > > > Dr Adrian Croucher 
> > > > > Senior Research Fellow 
> > > > > Department of Engineering Science 
> > > > > University of Auckland, New Zealand 
> > > > > email: a.croucher at auckland.ac.nz 
> > > > > tel: +64 (0)9 923 4611 
> > > > > 
> > > > > <test_snes.F90> 
> > > 
> > > -- 
> > > ----------------------------------------------- 
> > > Max-Planck-Institut für Eisenforschung GmbH 
> > > Max-Planck-Straße 1 
> > > D-40237 Düsseldorf 
> > > 
> > > Handelsregister B 2533 
> > > Amtsgericht Düsseldorf 
> > > 
> > > Geschäftsführung 
> > > Prof. Dr. Gerhard Dehm 
> > > Prof. Dr. Jörg Neugebauer 
> > > Prof. Dr. Dierk Raabe 
> > > Dr. Kai de Weldige 
> > > 
> > > Ust.-Id.-Nr.: DE 11 93 58 514 
> > > Steuernummer: 105 5891 1000 
> > > ------------------------------------------------- 
> > > Please consider that invitations and e-mails of our institute
> > > are 
> > > only valid if they end with …@mpie.de. 
> > > If you are not sure of the validity please contact rco at mpie.de 
> > > 
> > > Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-
> > > Mails 
> > > aus unserem Haus nur mit der Endung …@mpie.de gültig sind. 
> > > In Zweifelsfällen wenden Sie sich bitte an rco at mpie.de 
> > > 
> > > 
> > > 
> > > ------------------------------------------------- 
> > > Max-Planck-Institut für Eisenforschung GmbH 
> > > Max-Planck-Straße 1 
> > > D-40237 Düsseldorf 
> > > 
> > > Handelsregister B 2533 
> > > Amtsgericht Düsseldorf 
> > > 
> > > Geschäftsführung 
> > > Prof. Dr. Gerhard Dehm 
> > > Prof. Dr. Jörg Neugebauer 
> > > Prof. Dr. Dierk Raabe 
> > > Dr. Kai de Weldige 
> > > 
> > > Ust.-Id.-Nr.: DE 11 93 58 514 
> > > Steuernummer: 105 5891 1000 
> > > 
> > > 
> > > Please consider that invitations and e-mails of our institute
> > > are 
> > > only valid if they end with …@mpie.de. 
> > > If you are not sure of the validity please contact rco at mpie.de 
> > > 
> > > Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-
> > > Mails 
> > > aus unserem Haus nur mit der Endung …@mpie.de gültig sind. 
> > > In Zweifelsfällen wenden Sie sich bitte an rco at mpie.de 
> > > ------------------------------------------------- 
> > 
> > 
> > 
> > -------------------------------------------------
> > Max-Planck-Institut für Eisenforschung GmbH
> > Max-Planck-Straße 1
> > D-40237 Düsseldorf
> >  
> > Handelsregister B 2533 
> > Amtsgericht Düsseldorf
> >  
> > Geschäftsführung
> > Prof. Dr. Gerhard Dehm
> > Prof. Dr. Jörg Neugebauer
> > Prof. Dr. Dierk Raabe
> > Dr. Kai de Weldige
> >  
> > Ust.-Id.-Nr.: DE 11 93 58 514 
> > Steuernummer: 105 5891 1000
> > 
> > 
> > Please consider that invitations and e-mails of our institute are 
> > only valid if they end with …@mpie.de. 
> > If you are not sure of the validity please contact rco at mpie.de
> > 
> > Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-Mails
> > aus unserem Haus nur mit der Endung …@mpie.de gültig sind. 
> > In Zweifelsfällen wenden Sie sich bitte an rco at mpie.de
> > -------------------------------------------------
> 
> 
-- 
-----------------------------------------------
Max-Planck-Institut für Eisenforschung GmbH
Max-Planck-Straße 1
D-40237 Düsseldorf

Handelsregister B 2533
Amtsgericht Düsseldorf
  
Geschäftsführung
Prof. Dr. Gerhard Dehm
Prof. Dr. Jörg Neugebauer
Prof. Dr. Dierk Raabe
Dr. Kai de Weldige

Ust.-Id.-Nr.: DE 11 93 58 514
Steuernummer: 105 5891 1000
-------------------------------------------------
Please consider that invitations and e-mails of our institute are
only valid if they end with …@mpie.de.
If you are not sure of the validity please contact rco at mpie.de

Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-Mails
aus unserem Haus nur mit der Endung …@mpie.de gültig sind.
In Zweifelsfällen wenden Sie sich bitte an rco at mpie.de



-------------------------------------------------
Max-Planck-Institut für Eisenforschung GmbH
Max-Planck-Straße 1
D-40237 Düsseldorf
 
Handelsregister B 2533 
Amtsgericht Düsseldorf
 
Geschäftsführung
Prof. Dr. Gerhard Dehm
Prof. Dr. Jörg Neugebauer
Prof. Dr. Dierk Raabe
Dr. Kai de Weldige
 
Ust.-Id.-Nr.: DE 11 93 58 514 
Steuernummer: 105 5891 1000


Please consider that invitations and e-mails of our institute are 
only valid if they end with …@mpie.de. 
If you are not sure of the validity please contact rco at mpie.de

Bitte beachten Sie, dass Einladungen zu Veranstaltungen und E-Mails
aus unserem Haus nur mit der Endung …@mpie.de gültig sind. 
In Zweifelsfällen wenden Sie sich bitte an rco at mpie.de
-------------------------------------------------



More information about the petsc-dev mailing list