Fortran90 Несоответствие типов / рангов в аргументе - PullRequest
0 голосов
/ 13 марта 2012

Я распределяю размерность некоторых массивов после вычисления шагов, затем отправляю выделенные массивы в функцию, но у меня есть ошибка Несоответствие типа / ранга в аргументе 'a'.

Что такоеЯ делаю неправильно?

Cheers

 integer i, steps, noutput, savestep

double integrationtime, outputstep, timestep, deltat, ain, ein

real, dimension(:), allocatable :: a, e, time

steps=int(integrationtime/timestep)



 allocate(time(steps), a(steps), e(steps))
  time(0)=0.0d0
 a(0)=ain*1.49597870691d11
 e(0)=ein



 call calc (steps, a, e, time)



 stop



  contains



  subroutine calc (steps, a, e, time)

  integer i, steps

  double precision time(steps), a(steps), e(steps)


   do i=1, steps
   time(i)=..


     a(i)=...

   e(i)=...


   end subroutine calc

Я также пытался объявить a, e и time как реальные, выделяемые в calc подпрограммы, но я получаю следующие ошибки: В файле tidalevolution.f90: 84

real, dimension (:), allocatable :: a, e, time 1 Ошибка: атрибут ALLOCATABLE конфликтует с атрибутом DUMMY в (1) в файле tidalevolution.f90: 86

allocate (время (шаги), a (шаги), e (шаги)) 1 Ошибка: синтаксическая ошибка в операторе ALLOCATE при (1)

1 Ответ

2 голосов
/ 13 марта 2012

В вашей основной программе вы определили ae, и time) как действительные переменные одинарной точности:

real, dimension(:), allocatable :: a, e, time

Но вы передаете это в процедурукоторый ожидает массивы двойной точности:

subroutine calc (steps, a, e, time)

    integer i, steps
    double precision time(steps), a(steps), e(steps)
...