簡體   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