• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Fortran99で複数ファイルの読み込み)

Fortran99で複数ファイルの読み込み

このQ&Aのポイント
  • Fortran99で有限要素法の解析プログラムを作成しています。要素番号と節点番号、各節点の座標を三次元の配列にまとめて格納したく、複数のcsvファイルを相互に参照しながら配列に読み込みたいと思っていますが、その方法が分かりません。
  • 具体的には、一つ目のファイル(ex1.csv)の中身が、1 1 2 10 11 20 21 30 31 2 2 3 11 12 21 22 31 32 3 3 4 12 13 22 23 32 33 ........と配列になっており、1列目が要素番号、2~8列目が節点番号としています。二つ目のファイル(ex2.csv)の中身が、1 0 0 0 2 5 0 0 3 10 0 0 4 15 0 0 5 20 0 0 .....となっており、1列目が節点番号、2~4列目がそれぞれ、x, y, z座標となっています。
  • 一つ目のファイルは、 open(10, file = 'ex1.csv', status = 'old', action = 'read', position = 'rewind') do ELEM = 1, MAXELEM read(10, *) (ELEMDATA(ELEM, m, 1), m = 1, 8) enddo close(10) と書き、全ての要素と節点番号を三次元配列の一、二次元目に読み込みました。次に、ex1.csvの節点番号(2~8列目)の番号を読み取り、その番号をex2.csvの1列目から探し出して、配列の三次元目に格納したいと思っています。

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

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

その処理を自分でやるとしたら, どうしますか?

tip-tap-top
質問者

お礼

ご回答まで時間が掛かってしまい、申し訳ございません。 処理する方法を考えていたら時間を食ってしまいました。 それぞれのデータを仮の配列に格納し、 do ELEM = 1, MAXELEM do i = 1, 8 do k = 1, 4 ELEMDATA(ELEM, i, k) = NODE_XYZ( ELEM_NODE(ELEM, i), k ) enddo enddo enddo のように一つに纏めたら出来ました。 ご指導下さいまして、ありがとうございました。

その他の回答 (2)

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.3

まず read(10, *) (ELEMDATA(ELEM, m, 1), m = 1, 8) で一行当たり8個のデータを読んでるけど,データは9個ある。あなたの真の意図は? > 要素番号と節点番号、各節点の座標を三次元の配列にまとめて格納したく、 複数の要素に同じ節点が何度か出ると思うけど,同じ節点の座標を重複して持とうという意図は? 通常のように「各要素に含まれる節点」と「各接点の座標」と言うように2つのデータに分ける方がすっきりすると思うけど。 「まず,両方のファイルを読んで,ファイルの中身すべてを変数に格納する。」と書いたのに「二つ目でどのように検索して読み取れば良いか」と言うようにあくまで処理しながらファイルを読もうとする意図は? #2の人に「その処理を自分でやるとしたら, どうしますか?」と聞かれているのに返事をしない意図は? プログラムは魔法じゃないのだから,自分でやることがわかっていないと何もしてくれませんよ。 わからないことだらけです。

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

まず,両方のファイルを読んで,ファイルの中身すべてを変数に格納する。 そうすれば,あとはその変数を参照しながら,必要な情報を配列に格納していくだけです。 まさか節点番号を探すということができないわけじゃないでしょ。

tip-tap-top
質問者

補足

f272様、ご回答下さいまして、ありがとうございます。 >まさか節点番号を探すということができないわけじゃないでしょ。 Fortranを勉強し始めて間もないため、その「まさか」が分からず、質問させて頂きました。 大変申し訳ございませんが、一つ目のファイルの変数として格納した数値を、二つ目でどのように 検索して読み取れば良いかお教え頂けませんでしょうか。 宜しくお願い致します。

関連するQ&A