アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のプログラムの中で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

A 回答 (2件)

「doループでnが決まる」ってどういう意味? 普通に考えると「何らかの do ループを実行した結果, 最終的に n が求まる」ということになりそうだけど, このプログラムでは「n をループ変数にした do構文」があるだけだよね. それを「doループでnが決まる」と呼ぶのはおかしいです.


しかもその do ループでは n が 1 から ntime まで動いているだけなので, 「n」なんか無視して ntime を使って配列を定義すればいい.
本当に動的にメモリを確保したいなら allocate を使うんだけど, 少なくともこのプログラムを見た限り allocate が必要であるとは思えないなぁ.
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/24 18:36

こんにちは。



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

では。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/24 18:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!