错误:(1) 处固有的“count”的“mask”参数必须是逻辑数组

问题描述 投票:0回答:1

我最近尝试使用“计数”功能压缩我的程序的旧版本以提高效率。但是,当我尝试编译程序时,每个计数语句都会出现错误:

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
            

你们有什么建议或我可能错过的东西吗?

fortran gfortran fortran90
1个回答
0
投票

Count
和类似的数组函数需要一个数组参数。你那里有标量表达式

 b>=lower(i).and. b<upper(i)

数组将是

 b>=lower.and. b<upper 
© www.soinside.com 2019 - 2024. All rights reserved.