Когда я пытаюсь скомпилировать calrank.for (CALRANK_v7.0.0_L140912.zip) с помощью gfortran, я получаю эту ошибку:
> 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)
Когда я ставлю запятую, я получаю ту же ошибку.
Замечу только, что код ранее был скомпилирован с помощью 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
Некоторые переменные определены в другом месте кода как:
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)