Ok something I have gotten to work, but only doing things by hand in
petscvecmod.F90:
diff --git a/src/vec/f90-mod/petscvecmod.F90 b/src/vec/f90-mod/petscvecmod.F90
index 0c447156b9..ef3e2e2e55 100644
--- a/src/vec/f90-mod/petscvecmod.F90
+++ b/src/vec/f90-mod/petscvecmod.F90
module petscisdef
use petscisdefdummy
interface operator(.ne.)
function isnotequal(A,B)
- use petscisdefdummy
+ import tIS
logical isnotequal
type(tIS), intent(in) :: A,B
end function isnotequal
This works for everything wrapped in a module which contains an interface
block. For dangling functions the following works:
function isnotequal(A,B)
- use petscisdefdummy
+ use petscisdef, only: tIs
logical isnotequal
type(tIS), intent(in) :: A,B
isnotequal = (A%v .ne. B%v)
end function isnotequal
Do our fortran stub generators have any notion of types? Specifically types
that originate from petsc?
Best regards,
Jacob Faibussowitsch
(Jacob Fai - booss - oh - vitch)
Cell: (312) 694-3391
> On Mar 16, 2021, at 11:11, Satish Balay <[email protected]> wrote:
>
> 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
>>> <[email protected]> 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
>>
>>