Quantcast
Channel: Intel® Fortran Compiler for Linux* and macOS*
Viewing all articles
Browse latest Browse all 2583

Compiler ICE with OpenMP (since version 15...)

$
0
0

Hello,

I have the following piece of code:

    subroutine THOMAS_2D_NewType(IJmin, IJmax,                                &
                         JImin, JImax,                                        &
                         di,    dj,                                           &
                         THOMAS,                                              &
                         ANSWER,                                              &
                         ModelName)

        !Arguments-------------------------------------------------------------
        integer,                         intent(IN) :: IJmin, IJmax
        integer,                         intent(IN) :: JImin, JImax
        integer,                         intent(IN) :: di,    dj
        type(T_THOMAS2D), pointer                   :: THOMAS
        real,    dimension(:,:), pointer            :: ANSWER
        character (len=*), optional                 :: ModelName

        !Local-----------------------------------------------------------------
        integer :: IJ, JI, II, MM, I, J
        type(T_VECGW), pointer                      :: VEC
        integer                                     :: TID
        !$ integer                                  :: CHUNK !
        real                                        :: AUX

        !Begin-----------------------------------------------------------------

        !$ CHUNK = CHUNK_J(IJmin,IJmax) !

        !$OMP PARALLEL PRIVATE(TID,VEC,IJ,I,J,JI,II,MM,AUX)
        TID = 1
        !$ TID = 1 + omp_get_thread_num() !
        VEC => THOMAS%VEC(TID)
        !$OMP DO SCHEDULE(DYNAMIC,CHUNK)
do2 :   do IJ = IJmin, IJmax
            I = IJmin-1 + IJ*dj + di
            J = JImin-1 + IJ*di + dj
            VEC%W(JImin) = -THOMAS%COEF2%F(I, J)/THOMAS%COEF2%E(I, J)
            VEC%G(JImin) =  THOMAS%TI(I, J)     /THOMAS%COEF2%E(I, J)

do3 :       do JI=JImin+1,JImax+1
                I        = IJ*dj + JI*di
                J        = IJ*di + JI*dj
                AUX = THOMAS%COEF2%E(I,J) + THOMAS%COEF2%D(I,J) * VEC%W(JI-1)
                if (abs(AUX) > 0) then
                    VEC%W(JI) = -THOMAS%COEF2%F(I,J) / AUX
                    VEC%G(JI) = (THOMAS%TI(I,J) - THOMAS%COEF2%D(I,J) * VEC%G(JI-1))/ AUX
                else
                    VEC%W(JI) = 0.
                    VEC%G(JI) = 0.
                    write(*,*) 'ModelName I, J: ', trim(ModelName), '', I, J
                    write(*,*) 'Error: Instability in THOMAS2D - ModuleFunctions - ERR10'
                end if
            end do do3

            I = IJ * dj + (JImax+1) * di
            J = IJ * di + (JImax+1) * dj

            ANSWER(I, J) = VEC%G(JImax+1)

do1 :       do II = JImin+1, JImax+1
                MM = JImax+JImin+1-II
                I  = IJ*dj + MM*di
                J  = IJ*di + MM*dj

                ANSWER(I,J) = VEC%W(MM) * ANSWER(I+di,J+dj) + VEC%G(MM)
            end do do1
        end do do2
        !$OMP END DO NOWAIT
        !$OMP END PARALLEL

    end subroutine THOMAS_2D_NewType

It compiles til the fortran version 14.0.3
From version 15 and up (til 16.0.1), this causes an ICE.
The ICE happens only on Linux. On Windows it compiles ok (up to 15.0.4, I do'nt have 16 and 16.0.1 on Windows).

Can you help me figure out if there is something wrong with this code?
Thanks in advance!

Eduardo


Viewing all articles
Browse latest Browse all 2583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>