When I try to compile calrank.for (CALRANK_v7.0.0_L140912.zip) with gfortran I get this error:
> gfortran -m64 -c -o calrank.o calrank.for
calrank.for:1922:32:
write(io,'(2f10.3,1p1000(2x,e16.7,1x,2a10,1x))')
1
Error: Comma required after P descriptor in format string at (1)
When I make a comma I got the same error.
I note only that the code was compiled before with LF95.
subroutine xycout(io,nrank,nsp)
use userinf
use header
use rankdata
implicit none
integer :: io,nrank,nsp
integer :: k,ir,is,i
character(len=20) :: head1,head2,head3
character(len=40) :: add1x,add2x,add3x
character(len=40) :: add1(nsp),add2(nsp)
character(len=40) :: add3(nsp)
......
c --- Loop over receptors to write data records
do ir=1,ntotrec(k)
write(io,'(2f10.3,1p1000(2x,e16.7,1x,2a10,1x))')
& xreckm(ir,k),yreckm(ir,k),
& (xounit(is,k)*rankvalue(ir,is,nrank),
& arankdate(ir,is,nrank),
& aranktime(ir,is,nrank),is=1,nspout(k))
enddo
return
end
Some variables are defined in other place of the code as:
c --- Real arrays for header (derived)
allocate (xreckm(mxrec,k),yreckm(mxrec,k))
c --- Modified units multiplier
allocate (xounit(mxspout,k))
c --- Array of values (all species, receptors) for requested ranks
allocate (rankvalue(ntotrec(k),nspout(k),n_ranks))
allocate (arankdate(ntotrec(k),nspout(k),n_ranks))
allocate (aranktime(ntotrec(k),nspout(k),n_ranks))
c --- Integer arrays for header
deallocate (ndrec,nctrec,nspout,i2dmet,iutmzn)
You should do exactly what the error message says, put a comma after the p descriptor:
write(io,'(2f10.3,1p,1000(2x,e16.7,1x,2a10,1x))')
If you do not know what a p descriptor is, see, for example here, or any tutorial about Fortran edit descriptors. As Steven Lionel comments below, you can use the p descriptor without a comma in front of normal data edit descriptors.