Ошибка FORTRAN № 6404: это имя не имеет типа и должно иметь явный тип

Я новичок в 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)
  .....
  .....

person Pavigo    schedule 11.12.2011    source источник


Ответы (2)


Нет, это не ошибка компилятора. Вот редактирование вашего кода, который имеет хотя бы шанс скомпилироваться:

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?
person ev-br    schedule 11.12.2011
comment
Спасибо, у меня получилось. Просто изменил его, чтобы правильно представить тип данных. В остальном все так же. - person Pavigo; 12.12.2011
comment
Хотел бы поднять ваш рейтинг, но не могу - мало постов. - person Pavigo; 12.12.2011
comment
@user1092021 user1092021 - Если это отвечает на ваш вопрос, вы можете нажать на галочку, чтобы поднять рейтинг. Это считается уместным. - person xpda; 12.12.2011
comment
Ответ на №5. На самом деле я не знаю, кто это сделал 20 лет назад, я просто должен был исправить это для исследований моей жены по химии. он содержит 40 страниц кода, и переписывание этого кода нерентабельно. - person Pavigo; 17.10.2017

Я заставил его работать. Просто изменил его, чтобы правильно представить тип данных. В остальном все так же.

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
......
......
person Pavigo    schedule 12.12.2011