Fortran中的“%”是什么意思/做什么?

时间:2011-11-11 21:22:09

标签: fortran fortran90

我正在尝试阅读一些Fortran代码,但无法确定%(百分号)的作用。

如下所示:

   x = a%rho * g * (-g*a%sigma + m%gb * m%ca * (1.6 * a%rho+g))

它做了什么?

3 个答案:

答案 0 :(得分:28)

在Fortran 90中,它们允许您创建类似于C ++的结构。它基本上充当点(。)运算符。

来自http://www.lahey.com/lookat90.htm

结构(派生类型)

您可以使用派生类型对数据进行分组。这使用户能够将内部类型(包括数组和指针)组合成新类型,使用百分号作为分隔符可以访问其中的各个组件。 (派生类型在VAX Fortran中称为记录。) !使用派生类型和模块的示例。

module pipedef
   type pipe                          ! Define new type 'pipe', which
     real diameter                    ! is made up of two reals, an
     real flowrate                    ! integer, and a character.
     integer length
     character(len=10) :: flowtype
   end type pipe
end module pipedef

program main
   use pipedef                ! Associate module pipedef with main.
   type(pipe) water1, gas1    ! Declare two variables of type 'pipe'.
   water1 = pipe(4.5,44.8,1200,"turbulent") ! Assign value to water1.
   gas1%diameter = 14.9                     ! Assign value to parts
   gas1%flowrate = 91.284                   ! of gas1.
   gas1%length = 2550
   gas1%flowtype = 'laminar'
   .
   .
   .
end program

答案 1 :(得分:3)

它是派生类型的部件标识符。看一下这个。 http://www.lahey.com/lookat90.htm

答案 2 :(得分:2)

%作为令牌有许多密切相关的用途。随着Fortran的发展,这些用途的数量也在增加。

回到Fortran 90,问题中看到的用法%用于访问派生类型的组件。考虑具有该类型的对象a_t的派生类型a

type a_t
  real rho, sigma
end type
type(a_t) a

可以使用rhosigma访问a的{​​{1}}和a%rho个组件。从问题中可以看出,这些组件可以用在表达式中(例如a%sigma),也可以是作业的左侧(a%rho * g)。

派生类型的组件本身可以是派生类型的对象:

a%rho=1.

所以在一个引用中可能会出现多个type b_t type(a_t) a end type type(b_t) b

%

此处,派生类型对象b%a%rho = ... 的组件rho(其本身是a的组件)是分配的目标。人们可以在一个参考中看到相当可怕的b s计数,但零件参考总是从左到右解析。

来到Fortran 2003,然后用其他几种方式看到%与派生类型有关:

  • 引用对象的绑定;
  • 查询参数化类型的参数。

考虑派生类型

%

对象type a_t(n) integer, len :: n=1 real x(n) contains procedure f end type type(a_t(2)) a 具有单个长度类型参数和类型绑定过程。在像

这样的表达式中
a

引用派生类型对象的绑定x = a%f()

f的参数n可能会被引用为

a

可以引用组件print *, a%n, SIZE(a%x)

最后,从Fortran 2008开始,x可用于访问复杂对象的实部和虚部:

%