Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Boundary Run-Time Check Failure for variable 'var$149'

Suehiro_I_
Beginner
652 Views

How can I find what is the variable 'var$149'?

 

The option to make the load module is

ifort -o molyx.x -V -g -debug extended -save-temps -traceback -warn all -warn nointerfaces  -I/opt/intel/compilers_and_librar\

ies/mac/mkl/include/intel64/lp64  -I/opt/intel/compilers_and_libraries/mac/mkl/include   -extend-source 132 -\

zero  -qopt-report=5     -qopt-report-phase=all      -Wl,-stack_size -Wl,0x40000000  -check stack -check uninit -check pointe\

rs -check contiguous -check bounds -check nobounds \

 

 

0 Kudos
6 Replies
jimdempseyatthecove
Honored Contributor III
652 Views

Does the traceback information yield a hint as to the location of the error?

Jim Dempsey
 

0 Kudos
Steve_Lionel
Honored Contributor III
652 Views

var$149 is a temporary variable created by the compiler. I think the message suggests that something wrote into stack storage before or after where var$149 was allocated due to an error. This check doesn't get made until after a procedure return, I think. A traceback will at least tell you the approximate location of the call that triggered the check, but it will be more work to take it from there.

0 Kudos
Suehiro_I_
Beginner
652 Views

Thank you for answering to my question.  Unfortunately there were no traceback messages for this error, even though all codes were compiled with option "traceback" .    For the other errors, I do have traceback messages, but not for this case.

0 Kudos
Suehiro_I_
Beginner
652 Views

I have located where the job stopped.   The variable is a local allocatable array "ch".

I inserted "deallocate (ch), then the job stopped without any messages.

I inserted a write sentence to examine the parameters for "ch".

The code (main_basis_inp.f90) and output file (0214waterSTO-6G.txt) are attached.

Lines 103-105 in main_basis_inp.f90 are where the job stopped.

Lines 264-265 in 0214waterSTO-6G.txt are the output for Lines 103-104 in the code.

In all subroutines having "ch" in the argment,  "Intent(in):: ch" is declared.

Any suggestion is welcome !

 

0 Kudos
Steve_Lionel
Honored Contributor III
652 Views

Nothing was attached.

0 Kudos
Suehiro_I_
Beginner
652 Views

Thank you for your concern.

It seems I fixed the problem.

I added "intent(out)" in  the subroutines, redbas, and read_basis_files, which are called before ending the current subroutine, where the job stops.

The part of source is,

      allocate (ch(mapdat))  ! local
!  Examine whether $jpbfile.BASIS exists.
      inquire (file=bssfile, EXIST=Lexist)
      if (Lexist) then
              write(iwrit2, '(/,3x, A, A, A)') 'The basis set ', trim(bssfile), &
     &        ' is already created but is not reused.'
!  03 feb. 2014   only warining
      end if

!    for general basis sets on the diretory
      call redbas(ch)
      call read_basis_file(ch)
! close the input text data file
      text_data = trim(jobname)//'.'//trim(task_dat)
      call fmclose(trim(text_data))

!   ---   test of read
      if (Ltest1.ge.1.or.lucard(cprint).eq.'YES') then
          call red_bas_f(bssfile, .true.)
          call wrt_bas(iwrit2,nbasis, nshell, nprimit, &
               katom, kng,kstart,ktype,kloc,kmin,kmax, &
               ex, cs, cp, cd, cf, cg, .true.)
      end if

!xw      if (trim(smash).ne.''.or.trim(smash).ne.'NO') then
      if (trim(smash).ne.'') then
           call wrt_smash_basis(smash)
      end if
!xw      if (trim(gaussian).ne.''.or.trim(smash).ne.'NO') then
      if (trim(gaussian).ne.'') then
           call wrt_gaussian_basis(gaussian)
      end if
      if (trim(molden).ne.'') then
           write (iwrit2,'(/,3X,A, A)' )  &
                'The basis set file for MOLDEN is output on. ', &
                molden
           call wrt_molden_basis(molden)
      end if

      if (lucard(molpro).eq.'YES') then
            write (iwrit2,'(/,3X,A)' ) &
               'The file for MOLPRO is created. '
           if (idcard('MOLP_MEM', nnd, ch).eq.0) then
              molp_mem = 8000
              write (iwrit2, '(/, 3x, A, I0)') 'Memory for molpro is the default value, ', molp_mem
           else
              molp_mem = icard('MOLP_MEM', nnd, ch)
              write (iwrit2,'(/,3x, A, I0)')  'Memory for molpro is the input value, ', molp_mem
           end if
                call wrt_molproin(jobname, molp_mem, nshell, &
                katom, kng, kstart,  &
                 ex, cs, cp, cd, cf, cg)
      end if

!2018/02/14 added
      write(6,'(3x, A)') 'A local array ch is deallocated'
      write(6,'(3x, 2(A, I0, 3x))') 'MxLen = ', MxLen, ' mapdat = ', mapdat
      deallocate(ch)
!     for ending
        call end_basis
!  the above call caused "Boundary Run-Time Check Failure for variable 'var$138'"
!  No !!
       write(6,*) 'in main_basis_inp'

      end subroutine main_basis_inp

0 Kudos
Reply