Frotranで構造体

Fortranでも構造体が使えるらしいです。素敵です。変数が増えすぎると氏ねるので、とても良いと思います。でもCのように構造体へのポインタとかいう使い方はおっかないのでできないです。
まあでもFortranの場合はサブルーチンにぶち込んでしまえば問題ないので、まあ良いのかも。
んで、ソースを複数に分割してるのだけど、

module struct_def
  type hoge
    double precision :: A, B, C
    integer :: i, j, k
  end type hoge
  type (hoge) :: fuga
end module struct_def

module SubProgram
  implicit none
contains
  subroutine piyo (fuga)
    use struct_def
    implicit none 
    type (hoge), intent (in) :: fuga

    write (*,99) fuga % A, fuga % i

99 format (I2.2, 2x, E15.5)
    return 
  end subroutine piyo
end module SubProgram

program hogera
  use struct_def
  use SubProgram
  implicit none

  fuga % A = 1.0
  fuga % i = 1

  call piyo (fuga)

end program hogera

みたいな感じ。
構造体の定義は、typeを使って、

type hoge
  double precision :: A, B, C
  integer :: i, j
end type hoge

とか、そんな感じ。C言語でいうところの一種のtypedefみたいな感じなんだろうか。
そして、宣言は、

  type (hoge) :: fuga

で、hogeみたいな構造を持った構造体fugaが定義される。これをプログラムの中で書くと、

program test
  implicit none
  type hoge
    double precision :: A, B, C
    integer :: i, j
  end type hoge
  type (hoge) :: fuga
  ...
end program test

みたいな感じ。
代入とか、その辺の話は、%を使えばおk。この辺はC言語みたいに、値を参照するには.で、アドレスは->とか、そういうのはあるのかないのか良く分からない。というか、Fortranでポインタとか、使わないし。

  fuga % A = 1.0

とかする。
なので、まとめると、

program test
  implicit none
  type hoge
    double precision :: A, B, C
    integer :: i, j
  end type hoge
  type (hoge) :: fuga

  fuga % A = 1.0
  fuga % i = 1
  
  write (*,99) fuga % i, fuga % A

99 format (I2.2, 2x, E15.5)
end program test

みたいな感じ。あとはまあサブルーチンへの代入とか、関数への代入はC言語と同じ感じでやれます。