The reason you cannot condense
read(iu) id2,a4,e4,inc4,capom4,omega4,capm4
array(row,1)=id2
array(row,2)=a4
array(row,3)=e4
array(row,4)=inc4
array(row,5)=capom4
array(row,6)=omega4
array(row,7)=capm4
into
read(iu) (array(row,i), i=1:7)
is because this is causes a mismatch of your data file to your read arguments. In the source provided in the comments below you have these variables declared as:
real*4 ttmp,a4,e4,inc4,capom4,omega4,capm4
integer*2 nleft,nbod2,id2
real*8 array(1e7,8)
This means your read call read(iu) id2,a4,e4,inc4,capom4,omega4,capm4 is requesting 26 bytes (1*2 bytes + 6*4 bytes) and this corresponds to the record size in the unformatted file provided in the comments.
When you change the read to:
read(iu) (array(row,i), i=1:7)
which is completely valid on its own, it no longer matches the binary file and the read fails. This read requests 56 bytes (7*8 bytes) and produces the fatal runtime error you are reporting (you are requesting 56 bytes from a 26 byte record). The temporary variables used in the read are necessary so that you can read a 2 byte integer and 4 byte floats and then assign them to 8 byte real variables. The read cannot accomplish this directly because the underlying binary data in your file are not 8 byte reals.
So what can you do?
In your code you posted below your read is slightly different
read(iu) id2,a4,e4,inc4,capom4,omega4,capm4
array(row,1)=id2
array(row,2)=ttmp
array(row,3)=a4
array(row,4)=e4
array(row,5)=inc4
array(row,6)=capom4
array(row,7)=omega4
array(row,8)=capm4
You could do away with the 6 named temporary variables and instead use an array of 6 reals for this. e.g.
real*4 :: readtemp(6)
.
.
do n=1,nleft+nbod2-1
read(iu) id2,readtemp
array(n,1)=id2
array(n,2)=ttmp
array(n,3:8)= readtemp
end do
This lets you get rid of 6 individual reals in exchange for one array and condenses 6 of the assignments to just 1 assignment. Not a total collapse of the read/assign combo as in the other answer, but this does avoid needing to define a type to accomplish it.