Что означает " % " / do в Fortran?
Я пытаюсь прочитать некоторый код Fortran, но не могу определить, что %
(знак процента) делает.
это в строку:
x = a%rho * g * (-g*a%sigma + m%gb * m%ca * (1.6 * a%rho+g))
что он делает?
3 ответов
в 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
это идентификатор детали для производного типа. Проверить это. http://www.lahey.com/lookat90.htm
%
как токен имеет ряд тесно связанных применений. По мере того как Fortran начинало те пользы увеличивали в отсчете.
возвращаясь к Fortran 90, и использование видно в вопросе,%
используется для доступа к компонентам производного типа. Рассмотрим производный тип a_t
с объектом a
такого типа:
type a_t
real rho, sigma
end type
type(a_t) a
компоненты rho
и sigma
of a
можно получить с помощью 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
имеет один параметр типа length и процедуру с привязкой к типу. В выражении типа
x = a%f()
обязательный f
объекта производного типа ссылается.
параметр n
of a
можно ссылаться как
print *, a%n, SIZE(a%x)
как компонент x
могут быть ссылки.
наконец, из Fortran 2008,%
может использоваться для доступа к реальным и мнимым частям сложного объекта:
complex x, y(3)
x%im = 1.
x%re = 0.
y = (2., 1.)
print *, y(2)%im+y(3)%re