On Tue, 16 Mar 2021, Jacob Faibussowitsch wrote: > > My [partial] change is in branch balay/reorg-f90-for-xlf > > Satish is this branch pushed? I’d like to send it to the ibm folks to see if > it works for them as well.
Sorry - pushed now. From what I remember - it didn't work. Satish > They also added this extra follow up: > > The change we did in the source files is to replace all the "use pet*" > statements in all the Interface blocks with IMPORT statement. > > The nature of this workaround is to reduce the number of symbols that the > compiler have to create, which exceeded the limitation and caused ICE. > > Every USE statement in an interface block opens up the module symbol file and > reads all the symbols from it and creates an entity for each symbol in > compiler. This is unnecessary when the module already has the same USE > statement in the module scope. Instead, users can use IMPORT statement to > make the module symbols accessible inside interface face blocks. > > With the change, the compiler would only read the module symbol file once and > create one set of symbols where the old code reads the module symbol files as > many times as the number of the USE statements in Interface blocks and create > that many sets of duplicate symbols. Replacing those USE statements with > IMPORT statements also shortens the compile time significantly. > > Best regards, > > Jacob Faibussowitsch > (Jacob Fai - booss - oh - vitch) > Cell: (312) 694-3391 > > > On Mar 3, 2021, at 13:43, Satish Balay via petsc-dev > > <petsc-dev@mcs.anl.gov> wrote: > > > > The only change I can get working (i.e avoid compile errors) is to split > > petscvecmod.F90 into 2 source files - but I don't know if this will help > > with xlf.. > > > > My [partial] change is in branch balay/reorg-f90-for-xlf > > > > Satish > > > > On Wed, 3 Mar 2021, Satish Balay via petsc-dev wrote: > > > >> On Wed, 3 Mar 2021, Satish Balay via petsc-dev wrote: > >> > >>> Sure - once any change works locally [for gcc and xlf] > >>> > >>> When I try - I get a bunch of errors.. [yet to digest them.] > >> > >>>>>>> Can you please give the following source code workaround a try? > >>>>>>> Since there is already "use petscvecdefdummy" at the module scope, > >>>>>>> one workaround might be to remove the unnecessary "use > >>>>>>> petscvecdefdummy" in vecnotequal and vecequals > >>>>>>> and all similar procedures. > >>>>>>> > >>>>>>> For example, the test case has: > >>>>>>> module petscvecdef > >>>>>>> use petscvecdefdummy > >>>>>>> ... > >>>>>>> function vecnotequal(A,B) > >>>>>>> use petscvecdefdummy > >>>>>>> logical vecnotequal > >>>>>>> type(tVec), intent(in) :: A,B > >>>>>>> vecnotequal = (A%v .ne. B%v) > >>>>>>> end function > >> > >> > >> Ok - try this suggestion: > >> > >> diff --git a/src/vec/f90-mod/petscvecmod.F90 > >> b/src/vec/f90-mod/petscvecmod.F90 > >> index 0c447156b9..81968c7ca1 100644 > >> --- a/src/vec/f90-mod/petscvecmod.F90 > >> +++ b/src/vec/f90-mod/petscvecmod.F90 > >> @@ -77,7 +77,6 @@ > >> use petscvecdefdummy > >> interface operator(.ne.) > >> function vecnotequal(A,B) > >> - use petscvecdefdummy > >> logical vecnotequal > >> type(tVec), intent(in) :: A,B > >> end function > >> > >> > >>>>>>> > >> FC arch-linux-c-debug/obj/vec/f90-mod/petscvecmod.o > >> /home/balay/petsc/src/vec/f90-mod/petscvecmod.F90:81:22: > >> > >> 81 | type(tVec), intent(in) :: A,B > >> | 1 > >> Error: Derived type ‘tvec’ at (1) is being used before it is defined > >> /home/balay/petsc/include/../src/vec/f90-mod/ftn-auto-interfaces/petscis.h90:2:10: > >> > >> 2 | use petscvecdef > >> | 1 > >> Fatal Error: Cannot open module file ‘petscvecdef.mod’ for reading at (1): > >> No such file or directory > >> <<<<<< > >> > >> Satish > >