6

FORTRAN は初めてで、このエラー #6404 が表示されます。

my_file.f(11): error #6404: This name does not have a type, and must have an explicit type.
[POTENCIAL]      d=POTENCIAL(1.0,1.0,1.0,1.0,1.4,1.4)

これは ifort コンパイラによるもので、コンパイラのバグでないことを願っています。

私が間違っているアイデアはありますか?

  program iiuu
  implicit none
  REAL*8 d
  d=POTENCIAL(1.0,1.0,1.0,1.0,1.4,1.4)
  write(*,*) 'potential=', d
  END program iiuu

  FUNCTION POTENCIAL(R1,R2,R3,R4,R5,R6)
  REAL*8 R1,R2,R3,R4,R5,R6,V2,V3,V4
  DIMENSION R(6)
  R(1)=R1
  R(2)=R2
  R(3)=R3
  R(4)=R4
  R(5)=R5
  R(6)=R6
  V2=V2BODY(R)
  V3=V3BODY(R)
  V4=V4BODY(R)
  POTENCIAL=V2+V3+V4+VADD(R)
  RETURN
  END

  FUNCTION V2BODY(R)
  .....
  .....
4

2 に答える 2

15

いいえ、コンパイラのバグではありません。少なくともコンパイルの可能性があるコードの編集は次のとおりです。

program iiuu
  implicit none
  REAL*8 d
  d=POTENCIAL(1.0d0,1.0d0,1.0d0,1.0d0,1.4d0,1.4d0)
  write(*,*) 'potential=', d

  contains

  real*8 FUNCTION  POTENCIAL(R1,R2,R3,R4,R5,R6)
  REAL*8 R1,R2,R3,R4,R5,R6,V2,V3,V4
  real*8, DIMENSION(6) :: R
  R(1)=R1
  R(2)=R2
  R(3)=R3
  R(4)=R4
  R(5)=R5
  R(6)=R6
  V2=V2BODY(R)
  V3=V3BODY(R)
  V4=V4BODY(R)
  POTENCIAL=V2+V3+V4+VADD(R)
  END function potencial

  END program iiuu
  1. 関数に戻り値の型がありませpotencialんでした (これは、遭遇した元のエラー メッセージです)
  2. 何も返しませんでした(returnステートメントは必要ありませんでした)
  3. コール ポイントで、コンパイラは関数を探す場所がわかりませんでした。関数をパッケージ化するかmodules、上記の例のようにステートメントをuse使用しますcontains
  4. 1.0は単精度です。1.d0倍精度数であることをコンパイラに伝えるために使用します
  5. potencial関数の引数として配列を使用する代わりに、一体なぜ 6 つの数値を送信するのでしょうか。
于 2011-12-11T11:23:03.427 に答える
2

私はそれを働かせました。正しいデータ型表現に変更しただけです。残りはまだ同じです。

program iiuu
IMPLICIT none
REAL*8 d, POTENCIAL
d=POTENCIAL(1.0d0,1.0d0,1.0d0,1.0d0,1.4d0,1.4d0)  
write(*,*) 'potential=', d
END program iiuu

FUNCTION POTENCIAL(R1,R2,R3,R4,R5,R6)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION R(6)
R(1)=R1
R(2)=R2
......
......
于 2011-12-12T04:17:41.750 に答える