[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/14 08:15 / Filesize : 180 KB / Number-of Response : 532
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

FORTRAN W



1 名前:デフォルトの名無しさん [2006/11/12(日) 17:13:35 ]
FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・FORTRAN関連情報
お約束だが、まずは自分で調べよう
www.google.co.jp/

x86で動作するFortranコンパイラ
www.nminoru.jp/~nminoru/programming/x86-fortran.html

The Fortran Company
www.fortran.com/
Polyhedron Software
www.polyhedron.co.uk/
Google Directory - Fortran
directory.google.com/Top/Computers/Programming/Languages/Fortran/

・前スレ
FORTRAN III
pc8.2ch.net/test/read.cgi/tech/1104724162/
FORTRAN II
pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
pc2.2ch.net/test/read.cgi/tech/1003214738/


512 名前:510 mailto:sage [2009/02/27(金) 19:38:52 ]
的外れな質問してたのかな、ごめん・・・。
>>511の両方のケースとも知りたいので、よかったら教えてほしい。
流体とかの数値計算では行列の反復法とかはサブルーチン内でやるけど、
そういうケースでメモリのアロケーションはどうすべきなのか、という視点で興味があります。

513 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 00:58:18 ]
>>512
引数に載ってれば、Fortranは参照呼出しなんだから配列のコピーが生じるはずもない。
CやPASCALとは違う。(まぁ最近はVALUE属性も出来るようになったが)

ここでは副プログラム内で新たに割り付けられる配列の話だろう。
それが動的に取られるとして、スタックに取られるか、ヒープに取られるかの違い。



514 名前:510 mailto:sage [2009/02/28(土) 01:28:49 ]
>>513
>副プログラム内で新たに割り付けられる配列
あ、そういう話か・・・ありがとう。

自分は一時作業用の配列も全部メイン側で用意してやって引数渡ししてるんだけど、
そういうのはサブルーチン内でスタックやヒープで取ってやる方がいいのかな?
皆さんどうしてますか?

515 名前:デフォルトの名無しさん [2009/03/03(火) 06:16:03 ]
allocatableを副プログラム内で作ってそれ(先頭アドレスやらサイズその他)を
メイン階層や他の副プログラムに行き渡らせるのが割りと
面倒臭いのでメイン階層でやってる。
メイン階層が長くなるのは正直あまり好みではない、けど
まあ好みの問題なだけなので気にしないようにしている。

allocatable使うと場合によってはプログラム内で明示するサイズより大きいメモリを扱えたり
(コンパイラはハンドルできるメモリサイズ < OSがハンドル出来るメモリサイズ、なので)、
格子数(データ数)の違う処理を同じ実行イメージで出来る(コンパイルしなおさなくて良い)のが
いいけど、最近ではサイズをプログラム内で固定変数で明示していちいちコンパイルしている。
その方がミスは少ない気がする。気のせいかもしれないけど。

516 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:11:34 ]
何がスタックやヒープに割り当てられるのか分からんかったのでググった。
ブログだけどw

ttp://monologuemidnight.blogspot.com/2009/01/blog-post_03.html

module中の大域的な変数、save属性付きの変数→.bss
allocatable属性な配列→ヒープ
普通にサイズが宣言されている自動配列→スタック
手続き中の変数(mainでも同様)→スタック

ってことらしいが…。
この辺は規格ではないっぽいので、コンパイラの仕様をちゃんと確認したほうがいいな。

517 名前:デフォルトの名無しさん [2009/03/11(水) 18:46:48 ]
ifortで複数の数字を出力すると勝手に改行されるんだけど、改行を抑制するオプションってある?
gforntranでは改行されないんだけど。
real(8) a(5)
write(*,*) a(:)
とするとa(3)とa(4)の間で改行されちゃう。

518 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 04:57:59 ]
>>517
気持ち悪いけど、下記のようにしてもだめかな?
クラシックな書き方だけど。

  write(*, '(100f10.5)') a(:)


519 名前:デフォルトの名無しさん [2009/03/12(木) 09:37:42 ]
>518
ありがとん。
write(*,'(100f)') a(:)
でいけた。

520 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:01:35 ]
改行抑制なら、write文ならadvance='no'を付ければできるはず
出力するものが決まってるなら、改行してしまう書式の箇所に\(バックスラッシュ)を入れてもいい



521 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 11:34:42 ]
>520
advanceはフォーマット文がいるから、結局519と同じでは?

522 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 03:12:33 ]
>>521
'(100f)' なんて書くよりはスマートな気がするけど?
ま、どうでもいいことだな

523 名前:デフォルトの名無しさん [2009/03/18(水) 04:24:12 ]
do i = 1, 5
  write(*, '(f10.5,$)') a(i)
enddo
write(*,*) ''

はダメかな?
改行するなよ、の$は非標準だけどDEC以来ほぼ標準と思っていいのではないだろうか

524 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 21:51:40 ]
ちょっとテストしてみた@Intel Fortran 10.1

integer::i
integer,parameter::imax=5
real(8)::f(imax)
do i=1,imax ; f(i)=i ; enddo

print *, "print *,f"
print *, f
print *, '---'

print *, "write(*,'(f)') f"
write(*, '(f)') f
print *, '---'

print *, "write(*,'(f)') (f(i),i=1,imax)"
write(*, '(f)') (f(i),i=1,imax)
print *, '---'

print *, "write(*,'(f\)') f"
write(*, '(f\)') f
print *, '---'

print *, "write(*,'(f)',advance='no') f"
write(*, '(f)',advance='no') f
print *, '---'

print *, "write(*,'(f)',advance='no') (f(i),i=1,imax)"
write(*, '(f)',advance='no') (f(i),i=1,imax)
print *, '---'

end

525 名前:>>524の結果 mailto:sage [2009/03/18(水) 21:52:34 ]
print *,f
1.00000000000000 2.00000000000000 3.00000000000000
4.00000000000000 5.00000000000000
---
write(*,'(f)') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
---
write(*,'(f)') (f(i),i=1,imax)
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
---
write(*,'(f\)') f
1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 ---
write(*,'(f)',advance='no') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000 ---
write(*,'(f)',advance='no') (f(i),i=1,imax)
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000 ---

526 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:07:03 ]
ごめん。
print文かwrite文か、また出力並びをfとするか(f(i),i=1,imax)とするかで、
出力結果が違うのかと思ってやってみたが、違いはないっぽい。
というわけで、>>524をもっとすっきりさせた。

integer::i
real(8)::f(3)
do i=1,3 ; f(i)=i ; enddo

print *, "write(*,*) f"
write(*,*) f
print *, '---'

print *, "write(*,'(f)') f"
write(*,'(f)') f
print *, '---'

print *, "write(*,'(f\)') f"
write(*,'(f\)') f
print *, '---'

print *, "write(*,'(f)',advance='no') f"
write(*,'(f)',advance='no') f
print *, '---'

end

527 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:19:08 ]
↑の結果

write(*,*) f
1.00000000000000 2.00000000000000 3.00000000000000
4.00000000000000 5.00000000000000
---
write(*,'(f)') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
---
write(*,'(f\)') f
1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 ---
write(*,'(f)',advance='no') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000 ---


結論
@書式省略すると、適当な位置で改行してくれる(規格で決まってるんかな?)
A書式指定すると、書式の中身が終わる度に改行
B書式に\を付けると改行抑制
C書式にadvance='no'(デフォルトはyes)を付けるとwrite文が終了したときに行う改行を抑制(Aとの違いに注意)

って感じかな。
改行抑制の\と改行指定の/が混ざるとどんな出力になるんだろう。

528 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:20:24 ]
ごめん、>>526
real(8)::f(3)
do i=1,3 ; f(i)=i ; enddo

は↓に修正。

real(8)::f(5)
do i=1,5 ; f(i)=i ; enddo

529 名前:デフォルトの名無しさん [2009/03/22(日) 01:30:43 ]
>@書式省略すると、適当な位置で改行してくれる(規格で決まってるんかな?)
コマンドプロンプトの右端で改行だと思う
違うかなー

530 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:23:20 ]
>>529
他のコンパイラでは改行しないので、コンパイラのせいだと思います。
>>524-528
ありがとうございます。
参考になりました。
write(*,'(f\)') f
が良さそうですね。



531 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:14:13 ]
>>529
Fortranに限らず、プロンプトのサイズは関係ないよ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<180KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef