«Неожиданная ссылка на массив» в Фортране 77 - PullRequest
1 голос
/ 21 января 2011

Я относительно новичок в программировании, и в настоящее время я пытаюсь написать программу с использованием Fortran 77, которая будет использовать метод решения уравнений Рунге-Кутты для определения температуры сферического шара в определенное время.В любом случае, уравнение в порядке, кажется, не вызывает каких-либо проблем, похоже, это программирование самого метода RK.

Когда я говорю это для компиляции, он представляет повторяющиеся ошибки о "неожиданномссылка на массив ".Если кто-то может дать мне несколько советов о том, где я иду не так, будет очень признателен.Я опубликую код и результаты ниже:

  PROGRAM RKSubroutine
  IMPLICIT NONE
  DIMENSION t(3), y(3)

  func=(-2.2067E-12)*((y**4)-(81E8));
  y0=1200;
  h1=240;
  a=0;
  b=480;

  func is name of function to be evaluated
  a & b are the limits of integration
  y0 is the initial condition
  h1 is the stepsize    

  t=[a];
  y=[y0];
  i=1;

  while t(i)<b

  h=h1
  k1=feval(func,t(i), y(i));
  k2=feval(func,t(i)+h/2,y(i)+k1*h/2);
  k3=feval(func,t(i)+h/2,y(i)+k2*h/2);
  k2=feval(func,t(i)+h,y(i)+k3*h);

  y1=y(i)+(k1+2*k2+2*k3+k4)*h/6;

  i=i+1;
  t(i)=t(i-1)+h1;

  stop
  end

После небольшого изменения после предложения Брэдиса, приведенного ниже, теперь я получаю только ошибку, казалось бы, независимо от значения измерения t:

  `In file RK.f:21

  while t(i)<b
         1
  Error: Unexpected array reference at (1)

Большое спасибо!

1 Ответ

0 голосов
/ 21 января 2011

Похоже, вы не объявили ни одной из ваших переменных. Тип каждой переменной объявляется первым символом имени переменной. И если вы явно не назначите измерение (или размер) переменной, она считается скалярной переменной. Поскольку вы ничего не объявляли, компилятор не знает, что t и y должны быть массивами (отсюда и предупреждения "неожиданная ссылка на массив").

Я настоятельно рекомендую вам использовать IMPLICIT NONE, если можете (не уверен, что это стандартно в Fortran 77). В любом случае всегда объявляйте каждую переменную, которую вы используете. В вашем случае вам нужно объявить t и y с нужным размером:

DIMENSION t(n), y(n)

где вы заменяете n на целое число, представляющее фактический размер. Имейте в виду, что поведение программы не определено, если вы обращаетесь к массиву за пределами. Где undefined обычно означает, что ваша программа потерпит крах.

...