FDTD法を用いた計算の中で遠方界を計算するのにフーリエ変換が必要になり以下のプログラムを作ったのですがコンパイルの際に以下のエラーが出てしまいます。文字の定義もいろいろと変えてやってはいるのですが、なかなかうまくいきません。どなたかわかる方がいらっしゃったら教えて下さい。よろしくお願いします。
plane_yz = dy*dz
fac_yz = plane_yz/(4.0d0*pi*c*dt)
ie = nx-6
i = ie+1
do j = 5, ny-5
do k = 5, nz-5
x = (i-0.5d0-ic)*dx
y = (j-jc)*dy
z = (k-kc)*dz
eys = 0.5d0*(ey(i,j,k)+ey(i,j,k+1))
ezs = 0.5d0*(ez(i,j,k)+ez(i,j+1,k))
hys = 0.25d0*(hy(i,j,k)+hy(i,j+1,k)+hy(i-1,j,k)+hy(i-1,j+1,k))
hzs = 0.25d0*(hz(i,j,k)+hz(i,j,k+1)+hz(i-1,j,k)+hz(i-1,j,k+1))
do l = 1, nang
time_e = time-dt
time_h = time-dt/2.0d0
timesh = -(dirs(l,1)*x+dirs(l,2)*y+dirs(l,3)*z)/c+rf/c
tc_e = time_e+timesh
tc_h = time_h+timesh
m_e = int(tc_e/dt+0.5d0)
m_h = int(tc_h/dt+0.5d0)
a_e = (0.5d0+tc_e/dt-m_e)*fac
b_e = (0.5d0-tc_e/dt+m_e)*fac
ab_e = a_e-b_e
a_h = (0.5d0+tc_h/dt-m_h)*fac
b_h = (0.5d0-tc_h/dt+m_h)*fac
ab_h = a_h-b_h
wy(l,m_h-1) = wy(l,m_h-1)-hzs*b_h
wz(l,m_h-1) = wz(l,m_h-1)+hys*b_h
uy(l,m_e-1) = uy(l,m_e-1)+ezs*b_e
uz(l,m_e-1) = uz(l,m_e-1)-eys*b_e
wy(l,m_h) = wy(l,m_h)-hzs*ab_h
wz(l,m_h) = wz(l,m_h)+hys*ab_h
uy(l,m_e) = uy(l,m_e)+ezs*ab_e
uz(l,m_e) = uz(l,m_e)-eys*ab_e
wy(l,m_h+1) = wy(l,m_h+1)+hzs*a_h
wz(l,m_h+1) = wz(l,m_h+1)-hys*a_h
uy(l,m_e+1) = uy(l,m_e+1)-ezs*a_e
uz(l,m_e+1) = uz(l,m_e+1)+eys*a_e
enddo
enddo
enddo
コンパイル後timesh = -(dirs(l,1)*x+dirs(l,2)*y+dirs(l,3)*z)/c+rf/c
1
Error: Unexpected array reference at (1)
In file far_field.f90:48
wy(l,m_h-1) = wy(l,m_h-1)-hzs*b_h
1
Error: Unexpected array reference at (1)
In file far_field.f90:49
wz(l,m_h-1) = wz(l,m_h-1)+hys*b_h
1
Error: Unexpected array reference at (1)
In file far_field.f90:50
uy(l,m_e-1) = uy(l,m_e-1)+ezs*b_e
1
Error: Unexpected array reference at (1)
In file far_field.f90:51
と続きます。
No.4ベストアンサー
- 回答日時:
m_e とか m_h には parameter 属性が付いているので, 後で代入なんてできるわけがありません. そもそもこいつらは「配列の大きさ」を決める定数なんだから, 後で (しかもループの中で) 変更する意味など微塵もないはず.
で, 実際のところ「配列の大きさ」をどうしたいの?
この回答への補足
回答ありがとうございました。m_e, m_hにparameter属性を付けていたのが間違いでした。parameter属性を外してそれぞれm_e(500,500),m_h(500,500)としたらうまくコンパイルできました。内容がちゃんとできているかどうかは心配ですが。ご指摘ありがとうございました。まだまだFortranの知識が足りないようです。
補足日時:2009/12/21 17:34No.3
- 回答日時:
#1 でも言われていますが, 使っているすべての変数の定義を示してください. この部分だけでは正しいかどうか判断できません.
この回答への補足
すみません、宣言文の部分も見せなければわかりませんよね。失礼しました。
以下のように宣言しています。
integer, parameter :: nang = 400
integer, parameter :: l = 500
real(8) :: dirs(l,3)
integer, parameter :: m_e = 400, m_h = 400
integer :: ic, jc, kc
real(8) :: rf
real(8) :: x, y, z
real(8) :: exs, eys, ezs
real(8) :: hxs, hys, hzs
real(8) :: time_e, time_h, timesh
real(8) :: tc_e, tc_h
real(8) :: a_e, b_e, ab_e, a_h, b_h, ab_h
real(8) :: wx(l,m_h), wy(l,m_h), wz(l,m_h)
real(8) :: ux(l,m_e), uy(l,m_e), uz(l,m_e)
このように宣言すると今度は以下の様なエラーが出ました。
In file far_field.f90:40
m_e = int(tc_e/dt+0.5d0)
1
Error: Expected 'm_e' at (1) to be a VARIABLE
In file far_field.f90:41
m_h = int(tc_h/dt+0.5d0)
1
Error: Expected 'm_h' at (1) to be a VARIABLE
In file far_field.f90:81
m_e = int(tc_e/dt+0.5d0)
1
Error: Expected 'm_e' at (1) to be a VARIABLE
In file far_field.f90:82
m_h = int(tc_h/dt+0.5d0)
1
宣言文をかえると宣言文のファイルがエラーになり、宣言文がうまくコンパイルできると今度は実際のプログラムがエラーになってしまいます。
すみません。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 周波数fで表現したフーリエ変換の対称性に関する質問です。 1 2022/09/14 12:27
- 物理学 物体に一定の大きさfの力をx軸の正の向きに加える。またこの物体には抵抗係数がγの速度に比例する抵抗力 2 2023/07/06 04:01
- 物理学 フーリエ変換の振幅について 1 2022/09/04 08:56
- IT・エンジニアリング 三菱製PLC Qシリーズで技術的なことをご教示いただければ幸いです。 下記の回路で0.1秒の値をD0 1 2023/02/27 18:44
- 物理学 サイクロイド運動について質問です。 極板の間隔をd、長さをl、極板Aの電位を0、極板Bの電位をV1と 1 2022/10/09 23:06
- 数学 ロジスティックモデルの方程式を積分したらどうなりますか? dn/dt=rn(1-n/k) nt=?? 2 2023/04/24 17:42
- 工学 過渡現象 RL回路で 回路方程式 Ri+L(di/dt)=E 定常解 is=E/R 過渡解 Ri+L 1 2022/06/08 21:47
- 数学 全てのx>0に対して xe^(-x^2/2)/(1+x)≦∫[x,∞]e^(-t^2/2)dt≦e^ 5 2023/01/13 23:33
- 数学 dx/dt=x-2y +e^t dy/dt=-3x +2y+1 初期値[1,0] [x,y] この連 3 2023/05/15 18:23
- 数学 微分方程式 2 2023/05/08 22:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
VBのFunctionで、配列を引数...
-
VBA 1次元配列を2次元に追加する
-
ListViewで、非表示列って作れ...
-
配列変数の添字が範囲外ですと...
-
for each の現在の配列ポインタ...
-
2次元動的配列の第一引数のみを...
-
2つ以上の変数を比較して最大数...
-
fortranのwrite文について
-
VBAで近似曲線の係数取得
-
subの配列引数をoptionalで使う...
-
VLOOKUP関数で、一番下...
-
【VBA】配列とWorksheetFunctio...
-
Dim は何の略ですか?
-
delphiで配列を、コピーするには。
-
Access 2007 複数のテキストボ...
-
エクセルで最小値から0を除く方法
-
VB6 配列を初期化したい
-
Excel-VBAの配列「Public Const...
-
VBのコントロール配列を二次元...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
for each の現在の配列ポインタ...
-
VBのFunctionで、配列を引数...
-
subの配列引数をoptionalで使う...
-
VB6 配列を初期化したい
-
ListViewで、非表示列って作れ...
-
配列変数の添字が範囲外ですと...
-
Excel-VBAの配列「Public Const...
-
2次元動的配列の第一引数のみを...
-
VBAで近似曲線の係数取得
-
VLOOKUP関数で、一番下...
-
配列に同じ値を入れる方法
-
エクセルで最小値から0を除く方法
-
linest関数に配列を渡す
-
配列を任意の数値で埋める方法
-
Dim は何の略ですか?
-
配列内の内容を全て表示する方法
おすすめ情報