-Fortran- 配列を使った内積を計算するプログラム

ファイルから2次元平面内の位置ベクトルu, vの成分(u1, u2), (v1, v2)を読み取り,2つのベクトルの内積を計算するプログラム例を以下に示します.

program DP
  implicit none
  integer i
  real(8) u(2), v(2), dotp
 
  open(10,file = 'input1.d')
  read(10,*) (u(i), i = 1, 2) !改行の有無に関係なく配列要素の値を読み込む場合
  close(10)
 
  open(11,file = 'input2.d')
  read(11,*) (v(i), i = 1, 2) !改行の有無に関係なく配列要素の値を読み込む場合
  close(11)
 
   write(*,*) 'u_i = ', (u(i), i = 1, 2)
   write(*,*) 'v_i = ', (v(i), i = 1, 2)
 
   dotp = 0.0d0
   do i = 1, 2
     dotp = dotp + u(i) * v(i)
   enddo
 
   write(*,*) 'dot product = ', dotp
 
   open(20,file='output.d')
    write(20,'(2e20.4)') , u(1), u(2)
    write(20,'(2e20.4)') , v(1), v(2)
    write(20,'(e20.4)'), dotp
   close(20)

 

end program DP
 
このプログラムをターミナルからコンパイル,実行すると以下のようになります.
$ gfortran DP.f90
$ ./a.out
 u_i =    1.2000000000000000        3.3999999999999999     
 v_i =    4.0999999999999996        2.6000000000000001     
 dot product =    13.759999999999998     
ターミナルでの実行結果とは別に,'output.d'というファイルが作られ,その中身は,以下のようになります.
          0.1200E+01          0.3400E+01
          0.4100E+01          0.2600E+01
          0.1376E+02
 
--プログラムの簡単な説明--

プログラム中では,配列を利用して,ベクトルの成分を以下のようにあらわしています.
  u1, u2 → u(1), u(2)
  v1, v2 → v(1), v(2)
矢印(→)の右側にあるのは,配列要素(array element)です.

ファイルから成分の値を読み取る際には,改行から1つずつ配列要素の値を読み込む場合と,改行の有無に関係なく配列要素の値を読み込む場合があります(上記のプログラムは後者の例).
改行から一つずつ読み込む場合は,ベクトルuについては

  read(10,*) (u(i), i = 12!改行の有無に関係なく配列要素の値を読み込む場合

の部分を,以下のように書き換えます.

  do i = 1, 2        !改行から1つずつ配列要素の値を読み込む場合
    read(10,*) u(i)
 
  enddo


ベクトルvについても同様で,

  read(11,*) (v(i), i = 1, 2) !改行の有無に関係なく配列要素の値を読み込む場合


の部分を

  do i = 1, 2        !改行から1つずつ配列要素の値を読み込む場合
    read(11,*) v(i)
  enddo


に書き換えます.

read文で書式を指定すると,指定の書式に合わない入力データは読み込めなくなるので,プログラム'DP'のように,並び入力とするのが一般的です.
並び入力では,データの形式に依存せずに変数の型に合わせて入力が行われます.
同一行に書かれたデータ間の区切りとしては,1つ以上のスペース,あるいはタブを入れておけば区切りと見なされます.

ディスプレイ上にも出力した上で,ファイルにも書き出しを行うようにしており,ファイルに出力する際には,'(2e20.4)',  '(e20.4)'として,出力書式を指定しています.
'2e20.4'は,全体の文字数を20個確保して,指数形式で小数点以下4桁までが表示されるようにする書式で,2つの出力が改行なし(並び)で出力されます.
また,'e20.4'は,文字数20を確保して,指数形式で小数点以下4桁までを表示する書式です.