繁体   English   中英

fortran(std2003)逻辑型到数值型的转换

[英]fortran (std2003)conversion of logical to numeric type

我有一些我尝试编译的旧程序。 我得到一个错误

            if (sum(npsortie>0)) write(*,'(a,i8,a,i8,a,i8,a,i8,a)') &
                  1
Error: 'array' argument of 'sum' intrinsic at (1) must have a numeric type
advect.f90:577:21:


           if(sum(int(mask_part))>0) then
                     1
Error: 'a' argument of 'int' intrinsic at (1) must have a numeric type
advect.f90:580:69:


             meanz=sum(ztra1(1:numpart),DIM=1,MASK=mask_part)/sum(int(mask_part))
                                                                     1
Error: 'a' argument of 'int' intrinsic at (1) must have a numeric type

mask_partnpsortie是 LOGICAL 的 arrays。 我使用 gfortran-7,这是我唯一可以使用的编译器版本,因为库是用这个编译器版本编译的。

编译器的参数是

gfortran-7 -O2 -fopenmp -pedantic -std=f2003 -cpp -Wall -fconvert=swap -fall-intrinsics -fmax-errors=20 -I /usr/include -L /urs/include -c advect.f90

有关如何解决此问题的提示,我将不胜感激。 从文档中我看到它过去是隐式工作的,但这似乎已经改变了。

让我们假设npsortiemask_part确实logical

if (sum(npsortie>0)) ...`

这似乎在查询,是否有任何.true。 逻辑数组的元素。 对于那个应该使用if (any(npsortie))...

if(sum(int(mask_part))>0) ...

这似乎做同样的事情并且if (any(mask_part))...应该是等价的。

meanz=sum(ztra1(1:numpart),DIM=1,MASK=mask_part)/sum(int(mask_part))

这里的sum(int(mask_part))好像是.true的个数。 元素。 为此,请改用count(mask_part) count 内在函数计算数组中真实元素的数量。


如果你有

if (sum(numeric_array>0)) ...

并且您想知道值大于零的数字元素的数量,请使用count(numeric_array>0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM