Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner

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

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
Highlighted

Does the traceback

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

Jim Dempsey
 

0 Kudos
Highlighted
Black Belt

var$149 is a temporary

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.

Steve (aka "Doctor Fortran") - https://stevelionel.com/drfortran
0 Kudos
Highlighted
Beginner

Thank you for answering to my

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
Highlighted
Beginner

I have located where the job

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
Highlighted
Black Belt

Nothing was attached.

Nothing was attached.

Steve (aka "Doctor Fortran") - https://stevelionel.com/drfortran
0 Kudos
Highlighted
Beginner

Thank you for your concern.

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