[英]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_part
和npsortie
是 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
有关如何解决此问题的提示,我将不胜感激。 从文档中我看到它过去是隐式工作的,但这似乎已经改变了。
让我们假设npsortie
和mask_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.