2017-03-14 8 views
1

私は最近、use IFPORTを使用してrandom_seedrandom_number(variable)を呼び出す簡単な確率モデルを書き始めました。私のコードの最後に、私は1つcall system('gnuplot -p plot.gnu')追加 - これを次のエラーが発生します。別のコールを使用してコールシステムエラー

program abc 
use IFPORT 

!declaration and initialization of variables  
call random_seed 

do while (condition) 
    call random_number(ranval) 
    !computation 
    !write on a file 
end do 

call system('gnuplot -p plot.gnu') 
end program abc 

を次のようにコードがある

>ifort example.f90 
error #6552: The CALL statement is invoking a function subprogram as a subroutine. [SYSTEM] 
call system('gnuplot -p plot.gnu') 
-----^ 

このコードはifortを使用してコンパイルすることはできません。私がuse IFPORTとコメントすると、コードがコンパイルされ、call systemはエラーを起こさない。だから、use IFPORTrandom_seedrandom_number()を使用する必要があるかどうかはわかりません。

+0

すべてのFortran質問については、tag [tag:fortran]を使用してください。特定のバージョンのタグを追加するには、その質問が古いFortran 90に固有のものであるが、これはそうではない。 –

+0

'IFPORT'は' random_seed'と 'random_number'と共通していますか?私が知る限り、彼らはまったく関連していません。 –

+0

@VladimirFこのコードは.f90ファイルで書かれているので、Fortran90であるはずです。私は将来気をつけます。ありがとうございました。 – Kiat

答えて

2

いいえ、IFPORTを使用する必要はありません。

random_number()random_seed()固有のFortran 90の手順以降であり、全くモジュールは、それらを呼び出すために使用されなければなりません。

system()は標準ではありませんが、それまでのすべてのコンパイラで組み込みのプロシージャです。ここでも、呼び出すためにモジュールを使用する必要はありません。

system()は、コンパイラによっては、関数としてもサブルーチンとしても使用できます。関数バージョンは

err = system(command) 

と呼ばれ、errは整数変数です。

インテルFortranは、両方のバージョンをサポートしています。ただし、同時に使用できるのは1台だけです! use IFPORTには、明示的な宣言であるsystem()が含まれているようです。


ソリューション:

  1. ないuse IFPORTを行います。 またはuse IFPORT, only:を使用して実際に必要なIFPORTのシンボルのみをインポートしてください。

  2. 使用する必要がある場合は、機能としてsystem()を使用してください。

+0

は、私はそれを明確にしたいあなたにウラジミールF.ありがとうございましたそれで、私はどのモジュールを使用する必要はありませんか? – Kiat

+0

ほぼ。そのリストにはgfortranの非標準拡張が含まれており、インテルを使用しています。 Intelはそれらの一部をまったくサポートしていないかもしれません(しかし、ほとんどの場合)。 –

関連する問題