[英]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.