Другие языки программирования и технологии

Фортран 77. Нужна помощь!!

Преподаватель отжег. Дал программу. Для зачета нужно запустить ее на параллельных компьютерах (фортран 77). Проблема следующая: вообще не можем ее запустить. Видим фортран первый и последний раз в жизни!! Помогите, плиз, исправить ошибку в IMPLICIT REAL*8(a-h,o-z) PARAMETER (n = 11) Код программы: PROGRAMM main INCLUDE 'mpif.h' IMPLICIT REAL*8(a-h,o-z) PARAMETER (n = 11) DIMENSION a(n), b(n) INTEGER istatus(MPI_STATUS_SIZE) CALL MPI_INIT(ierr) CALL MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierr) CALL MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierr) CALL para_range(1, n, nprocs, myrank, ista, iend) ista2 = ista iend1 = iend IF (myrank = 0) ista2 = 2 IF(myrank = nprocs - 1) iend1 = n - 1 inext = myrank + 1 iprev = myrank - 1 IF (myrank == nprocs-1) inext = MPI_PROC_NULL IF (myrank == 0) iprev = MPI_PROC_NULL DO i = ista, iend b(i) = i ENDDO CALL MPI_ISEND(b(iend), 1, MPI_REAL8, inext, 1, MPI_COMM_WORLD, isend1, ierr) CALL MPI_ISEND(b(ista), 1, MPI_REAL8, iprev, 1, MPI_COMM_WORLD, isend2, ierr) CALL MPI_IRECV(b(ista-1), 1, MPI_REAL8, iprev, 1, MPI COMM_WORLD, irecv1, ierr) CALL MPI_IRECV(b(iend+1), 1, MPI_REAL8, inext, 1, MPI COMM_WORLD, irecv2, ierr) CALL MPI_WAIT(isend1, istatus, ierr) CALL MPI_WAIT(isend2, istatus, ierr) CALL MPI_WAIT(irecv1, istatus, ierr) CALL MPI_WAIT(irecv2, istatus, ierr) DO i = ista2, iend1 a(i) = b(i-1) + b(i+1) ENDDO CALL MPI_FINALIZE(ierr) END
А чего ошибочного в
IMPLICIT REAL*8(a-h,o-z)
PARAMETER (n = 11)
??

IMPLICIT REAL*8(a-h,o-z)
Объявляет что все переменные начинающиеся с букв (a-h,o-z) имеют тип REAL*8
разве что пробела вроде не хватает, но может он и не нужен, не помню
IMPLICIT REAL*8 (a-h,o-z)

А
PARAMETER (n = 11)
просто объявляет что есть такая константа n=11

Код программы - это не фортран77, это более поздние расширения тут я пас, лет 20 на фортране не программил

-------
DO i = ista, iend
b(i) = i
ENDDO
...
CALL MPI_IRECV(b(ista-1), 1, MPI_REAL8, iprev, 1,
MPI COMM_WORLD, irecv1, ierr)
CALL MPI_IRECV(b(iend+1), 1, MPI_REAL8, inext, 1,
MPI COMM_WORLD, irecv2, ierr)
-------
b(ista-1)и b(iend+1) вроде же не инициализировано? или MPI_IRECV туда значение вгоняет?
и где проверка на попадание (ista-1)и (iend+1) в границу массива?
Жасулан Мухтаров
Жасулан Мухтаров
75 320
Лучший ответ
это всяко не 77-ой.. .
такие длинные строки (в 72 позиции ну никак не полезут).. .

и я не совсем уверен что означает prograMM с двумя MM

затем, у вас в IF условиях знаки равенства то появляются то исчезают.. .

короче у меня ругается вот так:


C:\CODE\FORTRAN\main.f: In program `main':
C:\CODE\FORTRAN\main.f:3:
IMPLICIT REAL*8(a-h,o-z)
1
mpif.h:30: (continued):
INTEGER MPI_SUCCESS,MPI_ERR_BUFFER,MPI_ERR_COUNT,MPI_ERR_TYPE
2
Statement at (1) invalid in context established by statement at (2)


причём копилил в 77-ом...