• ベストアンサー

fortran 配列宣言

以下のプログラムの中でeth(n), eph(n)は、配列なのですが、配列宣言はどのようにしたらよいのでしょうか?doループでnが決まるのでどのように配列宣言したらよいかわかりません。いろいろと試してはみたのですがコンパイルの際エラーがでてしまいます。わかる方がいらっしゃったら教えて下さい。よろしくお願いします。 subroutine far_output use consts use fdtd implicit none integer :: n, i, td real(8) :: s real(8) :: theta, phi real(8) :: sx, sy, sz, px, py real(8) :: wth, wph, uth, uph real(8) :: eth(1000), eph(1000) open(10,file="far_field.dat") ! s = pi/180.0d0 phi = 0.0d0 ! do i = 0, 180 ! td = i ! theta = s*td theta = pi/3.0d0 sx = cos(theta)*cos(phi) sy = cos(theta)*sin(phi) sz = -sin(theta) px = -sin(phi) py = cos(phi) do n = 1, ntime wth = wx(l,n)*dx+wy(l,n)*sy+wz(l,n)*sz wph = wx(l,n)*px+wy(l,n)*py uth = ux(l,n)*sx+uy(l,n)*sy+uz(l,n)*sz uph = ux(l,n)*px+uy(l,n)*py eth(n) = -z0*wth-uph eph(n) = -z0*wph+uth write(10,*) eth, eph enddo ! enddo close(10) return end subroutine

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「doループでnが決まる」ってどういう意味? 普通に考えると「何らかの do ループを実行した結果, 最終的に n が求まる」ということになりそうだけど, このプログラムでは「n をループ変数にした do構文」があるだけだよね. それを「doループでnが決まる」と呼ぶのはおかしいです. しかもその do ループでは n が 1 から ntime まで動いているだけなので, 「n」なんか無視して ntime を使って配列を定義すればいい. 本当に動的にメモリを確保したいなら allocate を使うんだけど, 少なくともこのプログラムを見た限り allocate が必要であるとは思えないなぁ.

528612
質問者

お礼

そうですね、doループを実行した結果nが求まるといった表現が正しいですね。勉強不足ですみません。ご指摘ありがとうございました。

その他の回答 (1)

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  Fortran90から動的配列が使えるようになりました。  下記サイトをご参照ください。   http://yebisu.cc.kyushu-u.ac.jp/~watanabe/RESERCH/GECP/Fortran90.html   より具体的な例はこちら。    http://www.nag-j.co.jp/fortran/FI_12.html#AUTOTOC_12_9 では。

528612
質問者

お礼

参考になりました。ありがとうございました。

関連するQ&A