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

forrtl: severe (64): input conversion error

shivali_g_
Beginner
8,418 Views

Hi,

while running executable cras.x i am getting -

"forrtl: severe (64): input conversion error"

this error is coming while reading crastat.in file -

while reading following line -

  ABCD 20120625     2   309 33.901 22.521 20.000 28.048 79.924 -0.004 67.332******* 99.062 38.765

since while reading i have specified f7.3 format and in file crastat.in its ******* there .

Please help me as to how i can ignore this input conversion in ifort.

When i am compiling same program using xlf_r or f77 its ignoring input conversion and running fine.


Regards,
Shivali

0 Kudos
9 Replies
mecej4
Honored Contributor III
8,417 Views

Before attempting to answer your question I should like to see the READ and Format statements concerned, and a copy of the actual input file as an attachment -- the last item is important because posting a few lines inside a post often changes whitespace and the success or failure of the READ statement may depend on the presence or absence of said whitespace, particularly tab (Z'09') characters.

In your position, I would want to track the problem down and fix it, not ignore it. It is possible to ignore the READ error and carry on blithely, but that would probably be an irresponsible thing to do.

0 Kudos
FortranFan
Honored Contributor II
8,417 Views

Shivali,

As pointed out by mecej4, you should try to figure out why the error happens rather than look for ways to get around it.  Have you tried error handling your READ statements?  An option is along the following lines:

   ..

   use, intrinsic :: iso_fortran_env, only : iostat_end, iostat_eor

   ..
   character(len=255) :: errio !.. could be a string of any length
   integer :: istat

   read(unit=lun, fmt=my_format, iostat=istat, iomsg=errio) foo
   select case ( istat )
      case ( 0 )
         !.. normal operation
      case ( iostat_end )
         print *, " end-of-file encountered during read: ", errio
      case ( iostat_eor )
         print *, " end-of-record encountered during read: ", errio
      case default
         print *, " error encountered during read: error message is ", errio
   end select

   .. 

As you indicate, there appears to be an issue with your format statement: perhaps, you can read the record in as a string and process it in chunks based on your expected values (use of internal file reads may come in handy) and skip over regions with asterisks, if that's what is appropriate.

0 Kudos
shivali_g_
Beginner
8,417 Views

I have attached the input file crasinit.in  as crasinit.in.h .

Below are the read and format statements used in the program.

++++++++++++++++++++++++

      open(11,file='crastat.in')
      open(66,file='shivali.pts')
200   format(a7,i4,2i2,2i6,5f7.3,7x,4f7.3,5(49x),35x,4f7.2,4(7x),f8.3,
     >f7.2,7x,8f8.2)
      read(11,200)model,iyr,mm,nn,icra,npts,ro,rf,t,xmea,rmseb,
     >weto,romax,rfmax,wete,xdifcog,ydifcog,xdif,ydif,cca,rmsea,
     >xlncgo,yltcgo,xlncge,yltcge,te,td,tv,tp

      write(66,*) model,iyr,mm,nn,icra,npts,ro,rf,t,xmea,rmseb,
     >weto,romax,rfmax,wete,xdifcog,ydifcog,xdif,ydif,cca,rmsea,
     >xlncgo,yltcgo,xlncge,yltcge,te,td,tv,tp

      end

 

++++++++++++++++++++++++

 

 

0 Kudos
shivali_g_
Beginner
8,417 Views

Hi,

I tried error handling in code , it ran absolutely fine and iostat specifier "istat value is coming 0 for all cases in my crastat.in.

 

 Shivali istat --------------           0
   UKMO         2014           9          25           3          54
   33.57900       17.47800       20.00000       26.53200       41.95700
   57.64600       152.3070       36.68000       25.34500      0.7700000
   2.000000      -1.000000      0.3300000      1.9200001E-02  0.6320000
   60.38000       11.19000       7.380000       81.42000      0.0000000E+00
  0.0000000E+00  0.0000000E+00  0.0000000E+00

 

Thanks ,

Shivali

 

0 Kudos
mecej4
Honored Contributor III
8,419 Views

Line 75 of your data file has asterisks in one field which, when read with the format specification that you listed, will cause an error condition. If you use the IOSTAT= and/or ERR= clauses in the READ statement, you will receive more information about the error. With the short program below, the output was

 Error reading line           75 , iostat =           64
 Number of lines read =         1239

The program to read the file and note errors:

program shivali
implicit none
character*7 model
real ro,rf,t,xmea,rmseb,weto,romax,rfmax,wete,xdifcog,ydifcog,xdif,ydif
real cca,rmsea,xlncgo,yltcgo,xlncge,yltcge,te,td,tv,tp
integer iyr,mm,nn,icra,npts,ist,lno

open(unit=11,file='crastat.in',status='old')
lno=0
do
    read(11,300,err=100,iostat=ist,end=200)model,iyr,mm,nn,icra,npts,ro, &
      rf,t,xmea,rmseb,weto,romax,rfmax,wete,xdifcog,ydifcog, &
      xdif,ydif,cca,rmsea,xlncgo,yltcgo,xlncge,yltcge,te,td,tv,tp
    lno=lno+1
    cycle
 100 write(*,*)'Error reading line ',lno+1,', iostat = ',ist
    lno=lno+1
end do
200 write(*,*)'Number of lines read = ',lno
    close(11)
300   format(a7,i4,2i2,2i6,5f7.3,7x,4f7.3,5(49x),35x,4f7.2,4(7x),f8.3, &
      f7.2,7x,8f8.2)
end

 

0 Kudos
FortranFan
Honored Contributor II
8,419 Views

mecej4 wrote:

Line 75 of your data file has asterisks in one field which, when read with the format specification that you listed, will cause an error condition. If you use the IOSTAT= and/or ERR= clauses in the READ statement, you will receive more information about the error. With the short program below..

@mecej4,

Hats off to you on the outstanding service you provide to Fortranners out there.  If you could charge just a penny for each of your service instances, you could probably own a whole Mediterranean island for yourself!  As a premier educator on the Intel site, may I please suggest to you to look into coding idioms from the latest Fortran standard for which Intel Fortran is offering more and more support?  See below.  If you see value is in these newer idioms (using intrinsic options, doing away with statement and format labels, hard-wired file unit numbers, string facilities, etc.) and if you adopt them in your own code samples and snippets that you use to educate and help others, then the whole Fortran world can start seeing the benefits as well:

program shivali

   !.. Use intrinsic facilities for numeric precision, I/O error handling, etc.
   use, intrinsic :: iso_fortran_env, only : i4 => int32, wp => real32, iostat_end

   implicit none

   !.. File processing variables
   character(len=*), parameter :: crafile = "crastat.in"
   integer(i4) :: craunit
   !.. Line format statement for crastat.in file
   character(len=*), parameter :: cra_line_fmt = &
      "(a7,i4,2i2,2i6,5f7.3,7x,4f7.3,5(49x),35x,4f7.2,4(7x),f8.3,f7.2,7x,8f8.2)"
   character(len=255) :: errio

   !.. Variables to be read from file
   character(len=7) :: model  !.. character* syntax is depracted
   real(wp) :: ro,rf,t,xmea,rmseb,weto,romax,rfmax,wete,xdifcog,ydifcog,xdif,ydif
   real(wp) :: cca,rmsea,xlncgo,yltcgo,xlncge,yltcge,te,td,tv,tp
   integer(i4) :: iyr,mm,nn,icra,npts,ist,lno

   !.. Open the file; notice the newunit facility
   open(newunit=craunit, file=crafile, status='old', iostat=ist, iomsg=errio)
   if (ist /= 0) then
      write(*,*) " error opening file: " // crafile
      stop
   end if

   lno = 0

   loop_read: do

      read (unit=craunit, fmt=cra_line_fmt, iostat=ist, iomsg=errio)    &
         model,iyr,mm,nn,icra,npts,ro,                                  &
         rf,t,xmea,rmseb,weto,romax,rfmax,wete,xdifcog,ydifcog,         &
         xdif,ydif,cca,rmsea,xlncgo,yltcgo,xlncge,yltcge,te,td,tv,tp

      select case ( ist )

         case ( 0 )

            !.. successful; can introduce debug printing of read line here

         case ( iostat_end )

            !.. End of file reached
            write(*,*)'Number of lines read = ',lno
            close(unit=craunit, iostat=ist, iomsg=errio)
            if (ist /= 0) then
               write(*,*) " error opening file: " // crafile
            end if
            exit loop_read

         case default

            !.. Error condition
            write(*,*)'Error reading line ',lno+1,', iostat = ',ist

      end select

      lno = lno + 1

   end do loop_read

   stop

end program shivali

 

0 Kudos
mecej4
Honored Contributor III
8,419 Views

FortranFan: If I may paraphrase/steal from Molière's Le Malade imaginaire:

It may make the patient feel better to have the doctor describe his malady in mellifluous Latin, but he will not be cured as a result.

Many of the code snippets exchanged here have a short-lived, often immediate, purpose. Portable, standard and modern code may be a laudable goal, but insisting on adherence to coding standards is more appropriate in large projects than in a forum such as this. I must admit that I do not have the same evangelical urges as you.

0 Kudos
FortranFan
Honored Contributor II
8,419 Views

mecej4 wrote:

FortranFan: If I may paraphrase/steal from Molière's Le Malade imaginaire:

It may make the patient feel better to have the doctor describe his malady in mellifluous Latin, but he will not be cured as a result. ..

Yes, Molière thinks it is better for the patient to instead receive the message in Old Latin!! :-))

(https://en.wikipedia.org/wiki/Old_Latin) 

0 Kudos
Aman_S_1
Beginner
8,419 Views
This comment has been moved to its own thread
0 Kudos
Reply