关于fortran90:“%”在Fortran中是什么意思? |
您所在的位置:网站首页 › fortran中的contains › 关于fortran90:“%”在Fortran中是什么意思? |
我正在尝试阅读一些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) aa的组件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 |