首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fortran语法基础?

Fortran语法基础?
EN

Stack Overflow用户
提问于 2013-04-13 03:47:53
回答 1查看 477关注 0票数 1

因此,我试图让我的Fortran 95代码只适用于基本的函数和程序定义。实际上,我每说一行“意想不到的”或“未分类的”,都会得到一个错误。我想知道这是不是我的编译器( cygwin终端中使用的gfortran),或者我是否应该在文件的开头放一些东西?如果有人能告诉我什么的话,这就是。

代码语言:javascript
运行
复制
    double precision :: pi = 3.14159265359

    PROGRAM Diffraction
            write (*,*) sinc(0)
            write (*,*) sinc(pi)
            write (*,*) 1_Slit(0, 1, 550E-9)
    end PROGRAM Diffraction

    function SINC(angle) result(sinc)
    double precision :: sinc
    double precision :: angle
    if angle == 0.0 then
            sinc == 1
    else
            sinc = (sin(angle)/angle)
    endif
    end function SINC

    function I(angle, d, wl) result(I)
            double precision :: I_0 = 0.01
            double precision :: angle, d, wl, I
            A = (d * pi)/wl
            B = SIN(angle)
            I = I_0 * (SINC(A*B)**f2)
    return
    end function I

我编译的方式是: gfortran Diffraction.f95

EN

回答 1

Stack Overflow用户

发布于 2013-04-15 21:43:09

一般来说,将所有定义放在主程序或一个模块中是一个好主意。所以你的“浮动”定义有点奇怪。

您的程序应该以PROGRAM [name]开头,然后是您使用的模块。在您的例子中,没有这样的模块。在此之后,编写IMPLICIT NONE是一个很好的实践。这意味着,没有变量具有预定义的类型。否则,每个以IN开头的变量都将是INTEGER类型,其他所有变量都将是REAL类型。

下一部分是变量定义部分,在这里定义变量。(示例中的第一行。)

在此之后,主要部分是执行代码的地方。

最后一部分是CONTAINS部分,您的函数和子例程放在这里,它可以使用程序中定义的每个变量(但这不是很好的做法……)。

因此,您的示例(经过一些更正)将如下所示:

代码语言:javascript
运行
复制
PROGRAM Diffraction
IMPLICIT NONE

double precision :: pi = 3.14159265359d0

  write (*,*) sinc(0.d0)
  write (*,*) sinc(pi)
  write (*,*) one_slit(0.d0, 1.d0, 550.d-9)

CONTAINS

  function SINC(angle) result(snc)
    double precision :: snc
    double precision :: angle

    if (angle == 0.d0) then
      snc = 1.d0
    else
      snc = (sin(angle)/angle)
    endif
  end function SINC

  function one_slit(angle, d, wl) result(I)
    double precision :: I0 = 0.01d0, A, B
    double precision :: angle, d, wl, I, f2=2.d0

      A = (d * pi)/wl
      B = SIN(angle)
      I = I0 * (SINC(A*B)**f2)
  end function one_slit

end PROGRAM Diffraction
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15979724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档