关于fortran90:“%”在Fortran中是什么意思?

您所在的位置:网站首页 fortran中的contains 关于fortran90:“%”在Fortran中是什么意思?

关于fortran90:“%”在Fortran中是什么意思?

2024-04-05 01:33| 来源: 网络整理| 查看: 265

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

它像这样的一行:

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

它有什么作用?

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

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

结构(派生类型)

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

123456789101112131415161718192021module 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 相关讨论 抱歉,答案如何用另一种语言描述,如果不熟悉C ++或点运算符怎么办? 这只是访问模块内部变量的一种方式。 因此,就像在示例中一样,您可以直接从"对象" gas1中修改一个变量,而不必使用整个构造函数,即,无需使用所有需要的变量(water1 = pipe(4.5,44.8,1200,"turbulent"))。

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

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

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

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

a的组件rho和sigma可以通过a%rho和a%sigma访问。从问题中可以看出,这些组件可以在表达式中使用(例如a%rho * g),也可以是赋值的左侧(a%rho=1.)。

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

1234type b_t   type(a_t) a end type type(b_t) b

因此,%可能在单个引用中出现多次:

1b%a%rho = ...

在此,派生类型对象a的组件rho(本身是b的组件)是分配的目标。可以看到一个参考文献中的%令人震惊的数目,但是零件参考文献始终是从左到右解析的。

来到Fortran 2003时,然后可以通过其他几种方式看到%与派生类型有关:

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

考虑派生类型

1234567type a_t(n)   integer, len :: n=1   real x(n)  contains   procedure f end type type(a_t(2)) a

对象a具有单个length-type参数和类型绑定过程。在像这样的表达中

1x = a%f()

引用派生类型对象的绑定f。

a的参数n可以引用为

1print *, a%n, SIZE(a%x)

与可能引用的组件x一样多。

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

12345complex x, y(3) x%im = 1. x%re = 0. y = (2., 1.) print *, y(2)%im+y(3)%re



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3