質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

解決済

1回答

938閲覧

ソースコードの動作がわからない

him

総合スコア8

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2018/01/26 09:35

Gfortranを使っています。
コードがどのように動作しているかがわからないです。

gforran

1 do 1000 M =1,max 2! 3 resp = 0.0d0 4 if ( i <= 95 .and. i >= 33 .and. j <= 95 .and. j >=33 ) then 5 do 190 i = 33,95 6 do 190 j = 33,95 7 pres = ( h*s(i,j) + dx*p(i,j) ) / ( h + dx ) 8 P(i,j) = P(i,j) + pres 9 resp = resp+pres*pres 10 190 continue 11 else 12 do 200 i = 1, 200 13 do 200 j = 1, 200 14 dpdxx = (p(i+1,j) - 2.0d0*p(i,j) + p(i-1,j))/ ddx 15 dpdyy = (p(i,j+1) - 2.0d0*p(i,j) + p(i,j-1))/ ddy 16 pres = ram*( dpdxx+dpdyy - s(i,j) ) 17 resp = resp+pres*pres 18 P(i,j) = P(i,j) + pres 19 200 continue 20 end if

33<i,j<95の範囲とそれ以外で分けたいのですが
上記のソースコードで正しいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

do の後の番号とcontinueの前の番号は呼応しています。CやJavaの{ }のくくりのようなものです。
したがって、do 1000 に呼応した1000 continue が末尾の方に必要です。スペースをあえて"_"を用いて段分けを強調したコードを示せば、

FORTRAN

1 do 1000 M =1,max 2 3 resp = 0.0d0 4 if ( i <= 95 .and. i >= 33 .and. j <= 95 .and. j >=33 ) then 5 do 190 i = 33,95 6 do 191 j = 33,95 7 pres = ( h*s(i,j) + dx*p(i,j) ) / ( h + dx ) 8 P(i,j) = P(i,j) + pres 9 resp = resp+pres*pres 10 191 continue 11 190 continue 12 13 else 14 do 200 i = 1, 200 15 do 201 j = 1, 200 16 dpdxx = (p(i+1,j) - 2.0d0*p(i,j) + p(i-1,j))/ ddx 17 dpdyy = (p(i,j+1) - 2.0d0*p(i,j) + p(i,j-1))/ ddy 18 pres = ram*( dpdxx+dpdyy - s(i,j) ) 19 resp = resp+pres*pres 20 P(i,j) = P(i,j) + pres 21 201 continue 22 200 continue 23 end if 24 25 1000 continue

のように表現でき、多少は分かりやすいのではないでしょうか。

投稿2018/01/27 02:43

編集2018/01/27 02:44
seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

him

2018/01/27 07:31

回答ありがとうございます。continueの部分を書き足すのをすっかり忘れていました。 自分としてはelse以降でi,jをともに1~200の全範囲で取っているのですが その中にifで設定した33~95の範囲も含まれてしまっているので 上書きされてしまっていないかが心配です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問