我最近尝试使用“计数”功能压缩我的程序的旧版本以提高效率。但是,当我尝试编译程序时,每个计数语句都会出现错误:
Error: 'mask' argument of 'count' intrinsic at (1) must be a logical array
我该如何解决这个问题?我的目标是计算(对于 4 列 b c d 和 e)有多少 momenta 适合特定范围,由这些 bin 定义(其中有 20 个。)我从之前的帖子中收到了使用数组进行 bin 计数过程的建议,我以为我做对了,但我得到了一个错误。我将在这里链接我以前的帖子:How to read counts into 1D array?
这是我当前的程序:
program mean_analysis
implicit none
integer i, j, k, N, l
double precision a, b, c, d, e
integer binb(1:20),binc(1:20),bind(1:20),bine(1:20)
real lower(1:20),upper(1:20)
character(100) event
upper(1)=-2.7
lower(1)=-3
open(unit = 7, file="zpc_initial_momenta.dat")
do l=2,20
lower(l)=lower(l-1)+.3
upper(l)=upper(l-1)+.3
end do
do k=1, 10
read(7,'(A)') event
do j=1,4000
read(7,*) a, b, c, d, e
do i=1,20
binb(i)=binb(i)+count(b>=lower(i).and. b<upper(i))
binc(i)=binc(i)+count(c>=lower(i).and. c<upper(i))
bind(i)=bind(i)+count(d>=lower(i).and. d<upper(i))
bine(i)=bine(i)+count(e>=lower(i).and. e<upper(i))
end do
end do
end do
close(7)
open(unit = 8, file="outputanalysis.dat")
Write(8,*) 'The bins in each column are as follows:'
Write(8,*) 'FIRST COLUMN (MOMENTUM IN X DIRECTION)'
write(8,*) binb(1:20)
close(8)
end program
你们有什么建议或我可能错过的东西吗?
Count
和类似的数组函数需要一个数组参数。你那里有标量表达式
b>=lower(i).and. b<upper(i)
数组将是
b>=lower.and. b<upper