Smart questions
Smart answers
Smart people
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Member Login

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips now!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

Join Tek-Tips
*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

LINK TO THIS FORUM!

Add Stickiness To Your Site By Linking To This Professionally Managed Technical Forum.
Just copy and paste the
code below into your site.

Partner With Us!

"Best Of Breed" Forums Add Stickiness To Your Site
Partner Button
(Download This Button Today!)

Feedback

"...I just wanted to say how much I have enjoyed these forums. I am a new user and have a lot of elementary questions. I get quick answers with a friendly attitude..."

Geography

Where in the world do Tek-Tips members come from?

Eror when reading list, Fortran 77

stenssok (TechnicalUser)
21 Jun 12 9:40
Hello,

I'm trying to run a simulation program, written in Fortran 77 for the g77 compiler ( I use gcc version 3.4.6). I get the following error message when running the program:

invalid number: incomprehensible list input
apparent state: unit 3 named combin.fig
last format: list io
lately reading sequential formatted external IO
Aborted


The error is for the following READ statement:

Code:

CODE --> Fortran

READ(3,*) ((XPOS(J,IL),YPOS(J,IL),J=1,NABUR(IL)),IL=1,NL)

and the list it is trying to read, from the file combin.fig (unit 3), looks like this:

-1, 0.625, 2, 0.625, 0, 1.625, 1, 1.625,
-1, -0.375, 0, -0.375, 1, -0.375, 2, -0.375
-1, 0.375, 2, 0.375, 0, -0.625, 1, -0.625,
-1, 1.375, 0, 1.375, 1, 1.375, 2, 1.375

Maybe I should also give you the values of the variables:

NABUR = 8 8 0 0
NL = 2

I'm not very experienced in Fortran (or programming) so please keep it simple.

My OS is 64-bit Ubuntu 11.10 Oneric, but I compile in a chroot (32-bit Ubuntu 10.04 Natty) because the program doesn't compile in a 64-bit OS. Normally I can run the program in both systems.

Thanks
Katarina
melmacianalf (TechnicalUser)
21 Jun 12 10:06
Did you declare XPOS and YPOS as real data?

Here is what I did

CODE --> f77

program main
implicit none
integer :: J, IL
integer, parameter :: NABUR(4) = (/8, 8, 0, 0/)
integer, parameter :: NL = 2
real :: XPOS(8,2), YPOS(8,2)

open(unit=3, file='combin.fig')
read(3,*) ( (XPOS(J,IL), YPOS(J,IL), J=1,NABUR(IL)), IL=1,NL )
write(*,*) ( (XPOS(J,IL), YPOS(J,IL), J=1,NABUR(IL)), IL=1,NL )
close(3)

end program main

I compiled it with gfortran and it prints the following

CODE --> output

-1.00000000 0.62500000 2.0000000 0.62500000 0.0000000 1.6250000 1.00000000 1.6250000 -1.00000000 -0.37500000 0.0000000 -0.37500000 1.00000000 -0.37500000 2.0000000 -0.37500000 -1.00000000 0.37500000 2.0000000 0.37500000 0.0000000 -0.62500000 1.00000000 -0.62500000 -1.00000000 1.3750000 0.0000000 1.3750000 1.00000000 1.3750000 2.0000000 1.3750000

Gordon Shumway

stenssok (TechnicalUser)
21 Jun 12 10:24

This is where they are declared (I think):

CODE -->

COMMON /COMFIG/ NL,NLS,NIND,NA,MODX,MODY,MODZ,APC(NLMAX),
+ NABUR(NLMAX),LATTICE,XPOS(NABURMAX,NLMAX),YPOS(NABURMAX,NLMAX),
+ DUNIT, XUNIT, YUNIT, ZPOS(NLMAX)

I never programmed in Fortran, all I've learnt is from searching for errors, so I don't really know what that means, but it's the only place I can find those variables.

Thanks
melmacianalf (TechnicalUser)
21 Jun 12 10:39
what are the values of NABURMAX and NLMAX?

Gordon Shumway

stenssok (TechnicalUser)
21 Jun 12 10:43

NABURMAX = 16
NLMAX = 4
stenssok (TechnicalUser)
21 Jun 12 10:52
No sorry, I looked up what common blocks are and I found the variables:

CODE --> Fortran

REAL APC,XPOS,YPOS,DUNIT,XUNIT,YUNIT,ZPOS,XATOM0,YATOM0,UZ,DUZ

So yes they are declared as real.

Katarina
melmacianalf (TechnicalUser)
21 Jun 12 10:54
stenssok:

From all the informations that you had given, I am able to read and print the data using f77 without any problem. I see the following options

1. Add the statement

CODE --> f77

REWIND(3)
just above the read statement and try again

2. Perhaps you can try to post the full code or more code segments

3. Wait for an old timer (may be in another few minutes) to figure out what is going on in your code and help you


Gordon Shumway

stenssok (TechnicalUser)
21 Jun 12 12:13

Yea, I think it's because everything is in different files and it uses these common blocks that seem a bit tricky. Here's the piece of code where the error occures:

CODE --> f77

C ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBROUTINE COMBIN(NAME)
SUBROUTINE COMBIN(NAME)
CHARACTER*10 NAME
CHARACTER*4 STARS
CHARACTER*10 RNAME
C usage: CALL COMBIN(NAME)
C READ COMMON BLOCK COMFIG FROM FILE combin.fig FOR THE CRYSTAL TYPE
C AND PROJECTION REQUESTED BY PARAMETER NAME.

INCLUDE 'flux3com.for'

OPEN(UNIT=3,FILE='combin.fig',STATUS='OLD')
REWIND 3
1 READ(3,2,END=1999) STARS,RNAME
2 FORMAT(A4,A10)
IF(STARS .NE. '****') GOTO 1
IF(RNAME .NE. NAME) GOTO 1

VERSION(6:15)=NAME
READ(3,*) NL,NLS
WRITE (*,*) NL,NLS
c READ(3,*) ( (IP(J,K),J=1,3), K=1,2),
c + NIND, MODX, MODY, MODZ,
c + (APC(IL),IL=1,NL), (NABUR(IL),IL=1,NL), LATTICE,
c + ((XPOS(J,IL),YPOS(J,IL),J=1,NABUR(IL)),IL=1,NL),
c + XUNIT, YUNIT, DUNIT,
c + (ZPOS(IL),IL=1,NL),
c + ((IATOM(K,IL),K=0,MODZ-1),IL=1,NL),
c + (XATOM0(I),YATOM0(I),I=1,NIND)

C read/write sequence for debugging:
READ(3,*) ( (IP(J,K),J=1,3), K=1,2)
WRITE(*,*) ( (IP(J,K),J=1,3), K=1,2)
READ(3,*) NIND, MODX, MODY, MODZ
WRITE(*,*)NIND, MODX, MODY, MODZ
READ(3,*) (APC(IL),IL=1,NL)
WRITE(*,*)(APC(IL),IL=1,NL)
READ(3,*) (NABUR(IL),IL=1,NL)
WRITE(*,*)(NABUR(IL),IL=1,NL)
READ(3,*) LATTICE
WRITE(*,*)LATTICE
READ(3,*) ((XPOS(J,IL),YPOS(J,IL),J=1,NABUR(IL)),IL=1,NL)
WRITE(*,*) ((XPOS(J,IL),YPOS(J,IL),J=1,NABUR(IL)),IL=1,NL)
READ(3,*) XUNIT, YUNIT, DUNIT
WRITE(*,*) XUNIT, YUNIT, DUNIT
READ(3,*) (ZPOS(IL),IL=1,NL)
WRITE(*,*) (ZPOS(IL),IL=1,NL)
READ(3,*) ((IATOM(K,IL),K=0,MODZ-1),IL=1,NL)
WRITE(*,*) ((IATOM(K,IL),K=0,MODZ-1),IL=1,NL)
READ(3,*) (XATOM0(I),YATOM0(I),I=1,NIND)
WRITE(*,*) (XATOM0(I),YATOM0(I),I=1,NIND)

CLOSE(3)

And this is where the COMMON block is:

CODE --> f77

C NAMAX is the maximum number of lattice parameters in the crystal
C 1<=IA<=NAMAX will be the actual value during the run
PARAMETER(NAMAX=2)
C NABURMAX is the maximum number of neighbouring rows/atom species for the force field
PARAMETER(NABURMAX=16)
C MAXIATOM+1 is the maximum number of atoms within the z-unit cell
PARAMETER(MAXIATOM=23)
C NANGMAX is the maximum number of angles in one simulation run
PARAMETER(NANGMAX=10000)
CHARACTER*28 VERSION
CHARACTER*70 INFILE,OUTFILE,EFILE,STATFILE,YLDFILE,LOGFILE
CHARACTER*5 C_SYMM
COMMON /COMVRS/ VERSION
C NIND : number of different sites where collisions occur
C MODX,MODY,MODZ : period of X,Y,Z in units XUNIT,YUNIT,DUNIT
C APC(L): atoms per (3-dimensional) unit cell of kind L.
C NABUR(L): number of surrounding atom rows to take along.
C LATTICE : a flag used in subroutine BBLOOP, to identify the lattice
C XPOS,YPOS : the coordinates of the surrounding atom rows
C XUNIT,YUNIT,DUNIT: units for X,Y,Z (in units of the lattice constant)
C ZPOS(L): spacing between atoms of kind L in the atom rows
C IATOM(J,L): if non-zero an atom of kind L is present at Z=J
C its x,y coordinates are stored in
C XATOM(k),YATOM(k), where k=IATOM(J,L)
C
COMMON /COMFIG/ NL,NLS,NIND,NA,MODX,MODY,MODZ,APC(NLMAX),
+ NABUR(NLMAX),LATTICE,XPOS(NABURMAX,NLMAX),YPOS(NABURMAX,NLMAX),
+ DUNIT, XUNIT, YUNIT, ZPOS(NLMAX),
+ IATOM(0:MAXIATOM,1:NLMAX),
+ XATOM0(NPMAX), YATOM0(NPMAX), IP(3,2) , NFX, NFY, C_SYMM

COMMON /ESPEC/TF0,TM,ZVAL(NLMAX),AVZVAL,TAPC,UCVOL,E0,ES,RENRGY,
+ ICRATE(0:2048),LOSS
COMMON /FILES/INFILE,OUTFILE,EFILE,STATFILE,YLDFILE,LOGFILE
COMMON /LUNITS/LU(3),LU1,LU2
COMMON /STATUS/NSTART,NRSTART,KREP

And finaly, where the variables XPOS and YPOS are declared (this file is in another directory):

CODE --> f77

C NLS(L) is number of atom species as read from file COMBIN.FIG
C NLA(L) is the actual number of atom species in layer L
C (these may be different e.g. GaAs structure for Si: NLB=2 NLA=1)
C NIND : number of different sites where collisions occur
C MODX,MODY,MODZ : period of X,Y,Z in units XUNIT,YUNIT,DUNIT
C APC(L): atoms per (3-dimensional) unit cell of kind L.
C NABUR(L): number of surrounding atom rows to take along.
C LATTICE : a flag used in subroutine BBLOOP, to identify the lattice
C XPOS,YPOS : the coordinates of the surrounding atom rows
C DUNIT,XUNIT,YUNIT: units for Z,X,Y (in units of the lattice constant)
C ZPOS(L): spacing between atoms of kind L in the atom rows
C IATOM(J,L): if non-zero an atom of kind L is present at Z=J
C its x,y coordinates are stored in
C XATOM(k),YATOM(k), where k=IATOM(J,L)
C NLC is number of lattice constants (1 for cubic, 2 for hexagonal)
C UZ(L): z coordinates for MODZ+1 planes from z=0 to z=1
C DUZ(L): MODZ steps between consecutive planes from z=0 to z=UD

INTEGER NABURMAX, MAXIATOM, MAXIND,MODZMAX
PARAMETER (NABURMAX=50,MAXIATOM=50,MAXIND=50,MODZMAX=50)

CHARACTER*10 CONFIGID, CSYMM
COMMON /CONFIG/ CONFIGID(NLAYER), CSYMM(NLAYER)

INTEGER NLS, NLC,NLZ
INTEGER NIND,MODX,MODY,MODZ,NABUR,LATTICE,IATOM,IP
REAL APC,XPOS,YPOS,DUNIT,XUNIT,YUNIT,ZPOS,XATOM0,YATOM0,UZ,DUZ
COMMON /COMFIG/
+ NLS(NLAYER),NLC(NLAYER),NLZ(NLAYER),
+ IP(3,2,NLAYER),
+ NIND(NLAYER),MODX(NLAYER),MODY(NLAYER),MODZ(NLAYER),
+ APC(NL,NLAYER),NABUR(NL,NLAYER),LATTICE(NLAYER),
+ XPOS(NABURMAX,NL,NLAYER),YPOS(NABURMAX,NL,NLAYER),
+ XUNIT(3,NLAYER), YUNIT(3,NLAYER),DUNIT(3,NLAYER),
+ ZPOS(NL,NLAYER),
+ IATOM(0:MAXIATOM,1:NL,NLAYER),
+ XATOM0(MAXIND,NLAYER), YATOM0(MAXIND,NLAYER),
+ UZ(0:MODZMAX,NLAYER),DUZ(0:MODZMAX,NLAYER)

The program is originally written in 1987, So yea, let's hope for the old timers :)

Thank you anyway
Katarina
melmacianalf (TechnicalUser)
22 Jun 12 5:21
stenssok:

It is still not clear where the error lies.

can you also post the full input from "combin.fig"

In your first post you said that the error lies in the following statement

CODE --> f77

READ(3,*) ((XPOS(J,IL),YPOS(J,IL),J=1,NABUR(IL)),IL=1,NL)

Did u arrive at this conclusion b'coz only at this line your WRITE statement prints wrong values?

Did u WRITE all the data that you READ also before this line. Can u check if the code WRITEs correct data.

Why not WRITE all the data including the following and check if everything else is READ correctly.

CODE --> f77

READ(3,2,END=1999) STARS,RNAME

CODE --> f77

c READ(3,*) ( (IP(J,K),J=1,3), K=1,2), c + NIND, MODX, MODY, MODZ, c + (APC(IL),IL=1,NL), (NABUR(IL),IL=1,NL), LATTICE, c + ((XPOS(J,IL),YPOS(J,IL),J=1,NABUR(IL)),IL=1,NL), c + XUNIT, YUNIT, DUNIT, c + (ZPOS(IL),IL=1,NL), c + ((IATOM(K,IL),K=0,MODZ-1),IL=1,NL), c + (XATOM0(I),YATOM0(I),I=1,NIND)

Gordon Shumway

stenssok (TechnicalUser)
22 Jun 12 6:38

I've written out the 6 lines before this one and they're all correct (that's how I found in what statement the error occured).

Actually I think I might have found the problem. The XPOS, YPOS variables are not declared in the same way in the 2 different files:

CODE --> f77

COMMON /COMFIG/ NL,NLS,NIND,NA,MODX,MODY,MODZ,APC(NLMAX),
+ NABUR(NLMAX),LATTICE,XPOS(NABURMAX,NLMAX),YPOS(NABURMAX,NLMAX),

versus

CODE --> f77

COMMON /COMFIG/
+ NLS(NLAYER),NLC(NLAYER),NLZ(NLAYER),
+ IP(3,2,NLAYER),
+ NIND(NLAYER),MODX(NLAYER),MODY(NLAYER),MODZ(NLAYER),
+ APC(NL,NLAYER),NABUR(NL,NLAYER),LATTICE(NLAYER),
+ XPOS(NABURMAX,NL,NLAYER),YPOS(NABURMAX,NL,NLAYER),

Probably because I'm using an older version of one of the programs in the package (it's the only version that gives the output format I need), and the common block is changed in the newer version.

Thanks for your help.
melmacianalf (TechnicalUser)
22 Jun 12 6:43
You are right, I missed it. This is most likely the source of error.

Gordon Shumway

Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members!

Back To Forum

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close