Неверная форма для назначения в Фортране - PullRequest
2 голосов
/ 26 мая 2010

Я не могу заставить этот код компилировать с использованием компилятора minGW g77 или компилятора g95. Кто-нибудь знает почему?


Я получаю эти ошибки с g77:

diff5z10.for: в подпрограмме `diffract ':

diff5z10.for: 579

    Tropo100 = 20.34 - .077 * Dist
             ^

Неверная форма для оператора присваивания в (^)

diff5z10.for: 581

    IF (Freq .GT. 1000)  FreqAdj = 24.5 - 7200/(Freq+3000)
     ^

Неверная форма для оператора присваивания в (^)


и я получаю эти ошибки при компиляции с g95:

В файле diff5z10.for: 574

  CLUTTER = steep*CLUTTER
  1

Ошибка: неклассифицируемый оператор в (1) В файле diff5z10.for: 580

  FreqAdj = 23.978 - 58026.76 / (Freq + 2320)
  1

Ошибка: неклассифицируемый оператор в (1)


вот код из этого раздела программы: (начиная со строки 362)

   Span = .28 - .144 * (Round - 1.2)
   Para = C / Span**2
  IF (Ratio .GT. .4) Para = 6.25 * (C - 1)
  CLUTTER = Para * (RATIO - .4)**2 - C  
  IF (CLUTTER .GT. 0.) CLUTTER = 0.


  CSlope =  SQRT(freq)/350
  steep = 1 + CSlope * (dist - Horizon)
  IF (steep .LT. 0) steep = 0
  IF (steep .GT. 1) steep = 1
  CLUTTER = steep*CLUTTER



 Tropo100 = 20.34 - .077 * Dist
 FreqAdj = 23.978 - 58026.76 / (Freq + 2320)
 IF (Freq .GT. 1000)  FreqAdj = 24.5 - 7200/(Freq+3000)
 TropoFd = Tropo100 - FreqAdj

  FS_field = 106.9 - 20 * LOG10(Dist)     
  Scatter = TropoFd - FS_field         !loss ref to free space
  DiffL = Scatter  -  DLOSS
   Combine = 150/(20 - DiffL) - 5
  IF (DiffL .LT. -10) Combine = 0
  IF (DiffL .GT. 10)  Combine = DiffL
  DLOSS = DLOSS + Combine

  RETURN
  END

Ответы [ 2 ]

0 голосов
/ 26 мая 2010

Вы проверяли свой стиль отступов? Иногда ваш компилятор будет неправильно обрабатывать вкладки, не зная, сколько пробелов нужно заменить. Затем он выдаст на первый взгляд случайные ошибки, потому что не понимает, где находится заголовок строки.

0 голосов
/ 26 мая 2010

Предполагая, что интервал в вашем фрагменте отражает то, что на самом деле находится в исходном коде, ваши компиляторы могут быть перепутаны с символами продолжения строки (которые в архаичном стиле FORTRAN попадают в столбец 6) или символами номера строки (столбцы 1- 5). Есть несколько вещей, которые вы можете попробовать:

  • Включить источник произвольной формы в опциях компиляции
  • Переименуйте файл из myfile.f в myfile.f90 и перекомпилируйте с g95

Как всегда, при работе с кодом более старого стиля также применяются стандартные предупреждения, такие как «Всегда использовать implicit none».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...