2010-05-25 20 views
2

我无法获得此代码来编译uding g77 minGW编译器或g95编译器。有谁知道为什么?FORTRAN:分配的表单无效


我得到这些错误与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 
+0

你是否在代码中声明了变量(并且你使用'IMPLICIT NONE')?如果是这样,'Tropo100','Dist'等是什么类型?另外,您确定使用g77编译时自由格式源是否已启用? – 2010-05-25 21:32:09

+0

@蒂姆·惠特科姆 - 只要他整洁地干活,他不需要声明变量。好的悲伤,是的,我知道现在推荐它,但是我有大约50mb的fortran代码,没有隐含的痕迹,它们都像瑞士钟。他应该检查类型(并了解它们!) – Rook 2010-05-26 00:31:41

回答

0

假设的间距你的代码片段反映了源代码中的实际内容,你的编译器可能会与续行字符(在第6列中的古代FORTRAN风格)或行号字符(第1-5列)混淆。有几件事情,你可以尝试:

  • 在编译选项启用自由格式源
  • myfile.f文件重命名为myfile.f90与G95

像往常一样,用打交道时重新编译标准警告,例如“总是使用implicit none也适用

+0

男孩,我想念编码卡片套牌。等等...不,我不知道。 – 2010-05-25 21:58:58

+0

你说得对 - 不要旅行! – 2010-05-25 22:02:49

0

你检查了你的缩进样式吗?有时你的编译器会处理badway中的制表符,不知道有多少个spa ces来取代它们。它会输出看似随机的错误,因为它不知道行标题的位置。