プロが教えるわが家の防犯対策術!

以下のプログラムの中で実行結果で最後の  n = ntime (ntime =600) だけ、つまりwth, wphの最後のntimeだけをファイルに書き出したい場合どのようにwrite文を書けばよいのでしょうか?わかる方がいらっしゃたら教えて下さい。よろしくお願いします。
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(mmax), eph(mmax)
real(8) :: ceth, ceph

open(10,file="far_field_eth.dat")
open(20,file="far_field_eph.dat")
theta = 0.0d0
phi = 0.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
write(20,*) eph

enddo

call fft_eth(ntime,eth,ceth)
call fft_eph(ntime,eph,ceph)

close(10)
close(20)

return
end subroutine

A 回答 (5件)

ループが終了した時点では,wth(1:ntime)に値が入っているのだから,その時点でwth(ntime)を出力すればよいだけ。



ついでに
wth = wx(l,n)*dx+wy(l,n)*sy+wz(l,n)*sz
はタイポだよね。
    • good
    • 0

eth(ntime) や eph(ntime) が計算されるのは最後だから, do ループの「中」で出力させてもしょうがない. ループが終わってから出力しないと.


#2 でも「ループが終了した時点で」って言われてるよね.
    • good
    • 0

あ,私も勘違いしてる。

wth(ntime)こんなモノはなかった。

> あと, このサブルーチンの中で l を定義していないんだけどそれは大丈夫?

constsか,fdtdで定義していることを期待します。

この回答への補足

lは別のサブルーチン(出力前のプログラム)でdoループで l = 1, 180という計算をさせています。fdtdで定義しています。

補足日時:2010/01/18 16:06
    • good
    • 0

ああ, eth とか eph じゃないですね. すみません.


... あれ? だとしたら単に「do を抜けてから uth とか wph を表示する」だけでいいような気がするんだけど.... 何か盛大に勘違いしてるのか?
あと, このサブルーチンの中で l を定義していないんだけどそれは大丈夫?

この回答への補足

すみません。こちらのタイプミスです。出力したいのはeth(n), eph(n)の配列の最後の部分の n =ntime だけです。最初のアドバイスだとdoループ内で(今書いてある位置で)eth(ntime), eph(ntime)と書けばよいのでしょうか?よろしくお願いします。

補足日時:2010/01/18 16:02
    • good
    • 0

write(10,*) eth(ntime)


とか
write(20,*) eph(ntime)
とは書けない事情があるのですか?
    • good
    • 0

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