いくつかのFortranコードを読み込もうとしていますが、%
(パーセント記号)の機能を判別できません。
それは次のような行にあります:
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ではレコードと呼ばれます。)!派生型とモジュールの使用例。
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
を持つ派生型a_t
を考えてみましょう。
type a_t
real rho, sigma
end type
type(a_t) a
rho
のコンポーネントsigma
およびa
には、a%rho
およびa%sigma
を使用してアクセスできます。質問に見られるように、これらのコンポーネントは式(a%rho * g
など)で使用される場合もあれば、代入の左側(a%rho=1.
)である場合もあります。
派生型のコンポーネントは、それ自体が派生型のオブジェクトである可能性があります。
type b_t
type(a_t) a
end type
type(b_t) b
したがって、1つの参照に%
が複数表示される場合があります。
b%a%rho = ...
ここでは、それ自体がrho
のコンポーネントである派生型オブジェクトa
のコンポーネントb
が割り当てのターゲットです。 1つの参照で%
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)
コンポーネントx
が参照されるのと同じくらいです。
最後に、Fortran 2008以降、%
を使用して、複雑なオブジェクトの実数部と虚数部にアクセスできます。
complex x, y(3)
x%im = 1.
x%re = 0.
y = (2., 1.)
print *, y(2)%im+y(3)%re