くだすれFORTRAN(超初心者用)その6

■ このスレッドは過去ログ倉庫に格納されています
2012/08/16(木) 20:58:00.31
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。

●前スレ
くだすれFORTRAN(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1269704830/

●過去スレ
くだすれFORTRAN(超初心者用)その4
http://pc12.2ch.net/test/read.cgi/tech/1232789521/
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
274デフォルトの名無しさん
垢版 |
2013/11/10(日) 07:18:49.19
>>273
言語仕様では拡張子は規定していないのでコンパイラ依存。
275デフォルトの名無しさん
垢版 |
2013/11/10(日) 19:10:31.00
すみません、equivalence が理解できず、もしご存じの方が
いらっしゃいましたら、アドバイスを頂けないでしょうか。

勉強のために下記のテストコードを書いてみました。
まず、整数型配列 a1 と a2、実数型配列 a3 に適当な値を代入し、
その後 equivalence文によって a1(1) と a(1) のアドレスを一致させ
配列 a に配列 a1 〜 a3 の値をコピーしてみました。

最後に write 文で配列 a と、配列 a1 〜 a3 までの値を
それぞれ出力させて比較したのですが、両者では実数型配列
a3 の値だけ異なっています。

私のつたない理解では、おそらく equivalence で実数型配列
a3 の値を整数型配列 a にコピーしたのが原因なのではないかと
思っているのですが、配列 a3 を用いずに 配列 a から実数型を
出力させるにはどのようにしたらよろしいのでしょうか?  
(dble(a(i)) i=201〜300 としても駄目でした。)

お教え頂けますと大変ありがたいです。
どうぞよろしくお願い致します。
276275
垢版 |
2013/11/10(日) 19:11:25.56
なお、コードは以下になります。
どうぞよろしくお願い致します。

program test
implicit none

integer(kind = 4), dimension(300) :: a
integer(kind = 4), dimension(100) :: a1, a2
real(kind = 8), dimension(100) :: a3

equivalence ( a1(1), a(1) )
common /array/ a1, a2, a3
integer(kind = 4) :: i

do i = 1, 100
a1(i) = i*1
a2(i) = i*2
a3(i) = i*3.0d0
end do

do i = 1, 300
write(10, *) a(i)
end do

do i = 1, 100
write(11, *) a1(i), a2(i), a3(i)
end do

end
277269
垢版 |
2013/11/10(日) 23:00:46.41
>>270
やっぱり肝はロジックかぁ。かと言って、違う答えが帰ってきても困るしなぁ。
まぁ、元のソース見れる奴が、クローン作りました、でもこっちのソースは非公開。
なんて言っても、周りから見たら限りなく黒に近いグレーだわな。
割に合わなさそうだし、諦めるかな。

>>275
実数型と整数型だと、メモリの使い方が違うから、
実数型は入っている領域(の一部)を整数型で解釈しても、
実数型で入れた値にはなりません。という説明で良いのかな。
2013/11/10(日) 23:29:50.05
>>275
イマイチ何がしたのか分からんが、こうすれば一応望みの結果は得られる。

do i = 1, 300,2
write(10, *) transfer([a(i),a(i+1)], 0.0d0)
end do

これは、x86のようなリトル・エンディアンCPU向けの場合。
PowerPCとかビッグ・エンディアンの場合は、[a(i+1),a(i)]
2013/11/10(日) 23:56:18.99
[ ]はFortran2003、F90/95なら(/ /)で。配列構成子(array constructor)

倍精度実数と整数をEquivalenceで同じ番地を共有させているから、
整数2個毎が倍精度実数1個に対応している。
(KINDの数字は必ずしもバイト数に対応すると限らないが、慣習から仮定して)

エンディアンによって、メモリー上の倍精度実数の上位と下位が入れ替わるので
適宜対応する必要がある。

それをF90以降のTRANSFER関数で、メモリー内容を第二引数の型で解釈している。

単精度実数なら他に単にFORMATを実数用にして強行突破する方法も考えられる。
倍精度の時は難しいかな??
2013/11/14(木) 00:03:06.56
Fortran2015に関するまとめサイトとかないかね?
今度は何を付け加えるのさ?
2013/11/19(火) 00:19:07.21
すんません。
数値計算する際、expとかの値が大きすぎたり、小さすぎたりしてオーバーフローしたり、exp(x)のx が限りなくゼロに近い時とか、欲しい値が得られません。
みんなはどうやって回避してますか?

よくよく考えたらexp1000 とかオーバーフローしますよね。
2013/11/19(火) 10:23:13.29
ここの人はフォートランはわからないから他いけ
2013/11/19(火) 18:58:29.45
>>281
精度の問題がないなら対数を取って計算すればいいじゃない
というか、それは浮動小数点演算の本質的な問題だから
まず数値計算の基礎を勉強することをお勧めする
2013/11/19(火) 19:01:27.99
書き込んでから気付いたが、もしexp(1000)の値を実際に表示したいのなら
多倍長計算とかしかないな
2013/11/19(火) 23:54:23.18
>>283
何がオススメですか?参考書的なもので。
ちなみにプランク関数とか値がどでかい物やらプランク定数のようなちっこいものまぜまぜして計算することが多いので困ってます。やはり対数でやるべき?
2013/11/21(木) 22:58:26.48
プランク常数とか絡むなら、それを1に規格化して計算するのが常識だろ。
まず少し基礎的な本から読め。
2013/11/23(土) 22:34:38.75
みんなどんな環境でやってるんだろ
Cygwin+Emacs?
2013/11/24(日) 13:01:18.20
コマンドプロンプト+メモ帳 まじで
2013/11/24(日) 17:24:01.41
>>286
え?そうなんですか?
だからその基本的な本というのを紹介してくれませんか?

フォートランの本
2013/11/24(日) 17:42:02.66
>>289
言語の本より数値計算(数学)の本のがいいんでないか?
2013/11/26(火) 01:02:17.85
>>289
伊理正夫の「数値計算の常識」の中に無次元化の章があったはず。
大した事書いてないが常識として程度は知っておくべき。
大体、無次元化していないと、素人・非常識・DQN・支那チョン・ごみ・カス・クズ扱いされる。

この本の前半は面白いし為になるので買って損はない。


シュレディンガー方程式を解きたいんだったら、原子スペクトルの本なら大抵、原子単位系(atomic unit)への変換の章が
頭の方にある(エネルギーをハートリー、長さをボーア半径にする)。この辺は少し詳しい量子力学の本にもある。

まぁ今ではエネルギーの単位をハートリーでなくてリードベルグに取ることが多い気もするが。
クーロン項の分子が1になるか2になるかの違いだ。
2013/11/27(水) 07:09:22.09
>>291
うぉぉ。。。ありがとうございます。
かなり貴重なお話しです。
まずは「数値計算の常識」買ってみます。
293デフォルトの名無しさん
垢版 |
2013/12/31(火) 13:22:54.27
データから近似式を出すソフトみたいのないですかね?できればフリーで。
Fitykではなんだかできなかった…
2014/01/01(水) 00:01:57.16
それはFORTRANスレで聞く内容じゃない
2014/01/01(水) 02:29:24.68
>>294
どこで聞けばいいの?
わからないならレスしないであげれば?、
2014/01/01(水) 12:29:00.04
>>295
何でそう思ったの?
2014/01/01(水) 15:03:32.78
294ではないがプログラム板でフリーソフトのFitykを比較対象にするのは板違いでは?
「関数近似のFORTRANライブラリはありませんか?」ならわかるが
質問内容からすると自分でプログラムを作りたいのではなさそうだが
2014/01/03(金) 08:15:54.32
>>297
すんません、質問者です。
スレ違いなのはわかるんですが、学術的用途に精通してそうな人間が集まる板というかスレ住人が、フォートランスレに1番多いと考えたので質問しました。
今回は目をつむって、近似式出すソフトウェアってなんでしょうか?の質問に答えていただけたら幸いです
2014/01/03(金) 11:47:30.77
君が欲しいソフトは無いよ
どの関数で近似するかは人間が決めること
ソフトが決めることではない
2014/01/03(金) 15:49:36.03
Excelでやれば?あれで十分じゃない。
2014/01/04(土) 13:39:47.75
gnuplot 使ってやったことありますがどうでしょう?私がやったのは多項式だけですが任意の関数に対してフィッティングできるようです。
2014/01/04(土) 16:39:19.25
>301
gnuplotでは,splineとbezier補間してグラフを画く
機能がありますが,それ以外に任意の函数のフィッテイング
機能ってありますか?
2014/01/04(土) 16:43:44.90
>>302
>>301にできるって書いてあるじゃん
2014/01/10(金) 10:31:33.86
正月早々下層階級出身の発達障害みたいなのが湧いたなw

アスペ野郎は、よそのスレに行けよ、HaskellスレとかMLスレに行けば仲間がいっぱいいるぞ。
ここは毎年この時期は卒業研究で焦りまくった学生さんの駆け込み寺なんだからさ。
2014/01/12(日) 15:17:29.69
だなwスレタイくらいは読めよと
306デフォルトの名無しさん
垢版 |
2014/01/14(火) 01:43:43.02
ちょっとお聞きしたいのですが、
読み込むファイルの数値データが"〜〜"のダブルクオーテーションで囲まれているのですが、
これを文字列でなく数値で読み込むことはできないでしょうか?
ファイルの"をすべて消すことも考えたのですが、文字列として読み込みたいところもあるので避けたいです
すいませんがよろしくお願いします。
2014/01/14(火) 06:48:50.39
一度文字列として読み込んで、その文字列から数値として読み込む
例えばこんな感じ(valueが数値の変数、cvalueが文字列の変数)
read(*,*) cvalue
read(cvalue,*) value
308デフォルトの名無しさん
垢版 |
2014/01/14(火) 19:51:34.68
>>307
早速のレスありがとうございました
ためさせていただこうと思います
309デフォルトの名無しさん
垢版 |
2014/01/18(土) 11:40:25.48
すいませんがご教示ください
integer,dimension(99999,20000000)::aaの配列でifortでコンパイルしようとすると
再配置がオーバーフローしないように切り詰められました
と出ます。配列の数を小さくするとコンパイルできます。
配列が大きいから出ているエラーと思うのですが、なにか対策はないでしょうか。よろしくお願いします。
310309
垢版 |
2014/01/18(土) 12:21:08.98
スレを読み直してallocatableを使うことでコンパイルはできました。
すいませんありがとうございました
2014/01/18(土) 13:05:10.95
乙 俺も勉強になった
312デフォルトの名無しさん
垢版 |
2014/01/20(月) 21:57:41.73
すみませんが、ちょっと教えてください。
Intel MKLのpardisoで、LU分解後のLとUを取り出すためにはどうしたらいいのでしょうか?
313デフォルトの名無しさん
垢版 |
2014/01/21(火) 18:52:17.93
すみません。セグメンテーション違反って何ですか?
314デフォルトの名無しさん
垢版 |
2014/01/21(火) 21:15:53.71
OSがゴミってこと
2014/01/30(木) 21:30:13.25
G95をダウンロードしたいのですが、
Windows版のFTPでは、
530 Login authentication failed
(認証に失敗)
とでるのですが、どこで認証を得られるのでしょうか。
2014/01/30(木) 22:40:27.48
httpじゃ何か問題あったの
2014/01/31(金) 00:41:23.05
>316
httpではウンともスンとも言わないのです。
画面がフリーズしたままなので
2014/01/31(金) 01:31:57.39
>>317
リンクが生きているのはcygwinとLinux系だけみたいだね
MinGW版がひつようなら
http://www.fortran.com/the-fortran-company-homepage/whats-new/g95-windows-download/
けど、このページでも言っているようにG95はメンテナンスが停止しているみたいだし
素直にgfortranを使った方が良い
2014/01/31(金) 08:17:46.37
>318
御教示ありがとうございます。
gfortranをダウンロードして使うことにします。
2014/02/03(月) 00:35:08.25
上の方に無次元化の話が出ていましたが、これって数値計算の本ならちゃんと説明されているものですか?
ネットで検索してもあまりヒットしないし、あったとしてもやり方だけでそうする理由はあまり説明されていない気がします。

自分は先輩から教えてもらって初めて知りましたが、周りには知らない人が結構多いです。
伝統芸能の世界じゃないけど、「数値計算のテクニックは見て覚えろ」みたいな風潮を感じています。
とりあえず自分も「数値計算の常識」買ってみます。
2014/02/03(月) 01:43:43.76
数値計算にかぎらず、適切なスケールで物理量を無次元化すると表式がすっきりするから、けっこう使われてるよ。

原子の議論をするときはオングストロームを使う、天文の議論をするときは光年を使う、つまり「対象に合わせた物差しを使いましょう」という程度の話だから、詳しく説明するほどのことではないかも。
「数値計算の常識」でも1ページくらいしか触れてなかった気がする。
2014/02/03(月) 02:32:24.50
でも、無次元化で数式を簡単にすることと、規格化をして数値誤差を防ぐことは別の話ではないのですか?
自分はこのへんの理解がまだ曖昧です。

数値計算系の研究室なので、無次元することが常識なのはよく知っていますが、
ちゃんと教えてもらったことは一度もないです。
自分で書いたコードをたまたま先輩が見る機会があって、そのときに指摘されて知りました。
他の人はどこでそういう常識を知っていったのかが気になります。
2014/02/03(月) 02:41:03.77
他にも数値計算のデバッグテクニックとか先輩から教えてもらう機会はあるんですけど
ちゃんとした理論がよくわかってないのでとりあえずやってる状態なんですよね・・・
本でちゃんと勉強したいんですが、そういうのが書いてあるものが見つからないし。

愚痴ばっかですみません。スレ汚し失礼しました。
2014/02/03(月) 20:33:23.17
あ、ごめん。見なおしたら、「数値計算の常識」では6,7ページくらい使って説明されてたわ。

どこで学んだかと言われると、たしかによくわからない。
口伝かな。
2014/02/03(月) 22:40:36.33
そうですか!とりあえず買ってみます。
2014/02/05(水) 01:20:23.89
物理の本では無次元化が必ず出てくるぞ。
量子力学とか割と基礎的なテキストで。

桁落ちのことを考えると、すべての量のオーダーがそろった方がいいしな。
2014/02/23(日) 23:46:00.03
すみませんが教えていただけないでしょうか

うろ覚えのFORTRAN77思い出しながらプログラムを書きました。
で、gFortran 4.8.2で実行したら、エラーが出てプログラムが途中で止まってしまいました。
どの行が原因なのか調べたら、プリント文に問題がありそうなのです。
その部分を取り出しますと、

program checkdbl
double precision dx
dx = 2.0d0
print *,dx
end

これを実行すると

Program received signal SIGILL: Illegal instruction.
Backtrace for this error:
#0 ffffffff

とメッセージが出て、dxの値が表示されないのです。
(試しに変数dxをrealにして2.0を代入してもダメで、
でも整数にして、2を代入したらちゃんと表示されました)

倍精度の数値を表示させるにはどうしたらいいのでしょうか?

どうぞよろしくお願いいたします
2014/02/24(月) 00:29:23.77
OSはLinuxか?
ライブラリかなんかの整合が取れていない気がする。
2014/02/24(月) 01:05:53.35
プログラム自体の問題ではなく、実行ファイルが不正な命令を実行しようとしたのが原因。
それがコンパイラのバグなのか、コンパイラオプションや実行環境の問題なのかはわからん。
330327
垢版 |
2014/02/24(月) 12:18:08.81
>>328-329
レスありがとうございます
OSはXPでコンパイラオプションは
-oだけ使ってます

文法の間違いでないと分かって
とりあえずひと安心しました
インストールしなおしとか旧バージョン
使うとかしてみます
たいへんどうもありがとうございました
2014/02/24(月) 12:46:33.66
>327

gfortranで実行したら、

2.0000000000000000

と結果がでてきましたよ
332327
垢版 |
2014/02/24(月) 22:42:53.37
>>331
dです
もしよろしかったら、OSとコンパイラのバージョン、
コンパイル・オプション等教えていただけたら嬉しいです
2014/02/25(火) 00:34:40.34
>332

GNU Fortran 4.7.3
Windows 7 64bit
optionなし
です。
334332
垢版 |
2014/02/25(火) 01:16:16.64
>>333
ありがとうございます!
旧バージョンを使うと吉なのかもですね

こちらはその後、(再インストールの前に)プリント文を使わなくてもいいように
プログラムを改造してみたのですが……
ここで新たに、実はプリント文・ライト文に関係なく同じエラーが出ることがわかり、
ちょっとorzorzorz……な心境です

とりあえず、プログラムの作成と並行して、コンパイラの方もなんとかしてみたいです
ちなみに今回のエラーは、文法確認のために作った次のプログラムで出てきました

program checkpwr2

double precision dx, dxp2, dxp2d

dx = 2.0d0

dxp2 = dx**2
dxp2d = dx**2d0 ! ←ここでエラー発生

print *, dxp2, dxp2d

end


もう少しいろいろ調べてみます
長文失礼しました
2014/02/25(火) 01:55:16.47
もうF77のプログラムに手を加える作業はいやだお・・・

今module内のSubroutineからLAPACKのZGEEV呼ぼうとしているんですが、
LAPACKのサブルーチンって外部副プログラムですよね?
毎回interface文を書くのが正しい書き方なんでしょうか?
使ってるのはintel fortran & MKLです。
module
...
contains
subroutien foo
implicit none
interface
subroutine ZGEEV(jobvl, jobvr, ...
...
みたいな感じに。
2014/02/25(火) 04:06:21.32
LAPACK用の95用 INTERFACE MODULEは公式であったろ。NETLIB無間地獄を探せw
2014/02/25(火) 09:23:01.24
>334
こちらでは、正常にコンパイルし、
4.0000000000000000 4.0000000000000000
結果がでます。
ついでに、プログラムを
program checkpwr2

real(16) dx, dxp2, dxp2d

dx = 2.0d0

dxp2 = dx**2
dxp2d = dx**2d0 ! ←ここでエラー発生

print *, dxp2, dxp2d

end
とかえて、実行してみましたが、こちらも
4.00000000000000000000000000000000000 4.00000000000000000000000000000000000
と正常にコンパイルでき、結果もでてきました。

4倍長計算
338334
垢版 |
2014/02/26(水) 21:39:32.88
>>337
お手数おかけしてすみません
やっぱ私の環境がダメすぎってことみたいですねorz

あれから再インストールをしてみたのですが同じエラーがでてまして、
それで、インストール時の環境を変えてみるか、それかバージョンを落としてみるか
してみようと思ってます
うまく行ったらお礼がてら報告したいと思います
たいへんどうもありがとうございました
2014/02/27(木) 00:16:02.97
MinGW-builds
Dual-target(32 & 64-bit) MinGW compilers for 32 and 64-bit windows
http://sourceforge.net/projects/mingwbuilds/


Download mingw-get-setup.exe (86.5 kB)
http://sourceforge.net/projects/mingw/files/

この辺使えば自動でダウンロードしてくれるぞ。
おれは上の奴で入れたかな。win8 64bit
2014/02/27(木) 01:07:55.10
あー書き込みたい
2014/02/27(木) 22:19:15.92
>>335
インテルなら use lapack95 を implicit none の前の行に足し
mkl_lapack95_lp64.lib をコンパイルに足したまえ

ぶっちゃけ interface 書かなくとも呼べる。引数チェックは無論効かないが
2014/02/27(木) 22:23:14.15
>>341 に追加
って総称名じゃなく個別名か

ならば include 'mkl_lapack.fi' で解決する
interface 定義がここに全部書いてある
343338
垢版 |
2014/02/27(木) 23:05:41.71
>>339
レスdです
実は私もそこのを使ってエラってたのですが、でもおかげ様で
「他のサイトから落としたファイルならうまく行くかも」、
ってことに思いいたりました

で、探したところgcc wikiっていうところで非公式ながら
お手軽そうなインストーラを発見、さっそく落として
コンパイルしてみましたら

 完動です!!!!

小数点のあとに0がいっぱい並んでるので、記念にスクショ撮りましたw

たいへんどうもありがとうございました
2014/02/28(金) 01:11:13.40
>343
無事出来てよかったですね!
それにしても、Fortran IVとか、Fortran 77では、せいぜい
2倍長演算しかできなかったのですが、いまでは、4倍長演算
がらくらくできるのですから、隔世の感があります。
2014/02/28(金) 01:24:15.95
Debian 32bit版に gfortran 入れて数値計算してるんですが、配列って2gb までしか割り当てられないのでしょうか?
2014/02/28(金) 20:13:18.20
>>345
32bit版ならできないと思いますよー
2014/02/28(金) 21:27:17.52
>>344
ありがとうございます!
猫に小判って言われないようがんばりますw
2014/03/01(土) 01:45:11.84
4倍長はソフトウェアで計算しているから10倍以上遅いから
むやみに初心者には教えんなw
2014/03/01(土) 05:45:52.65
>336 >341->342
遅くなりましたがレスありがとうございます!
Intelさんの優しさが五臓六腑に染みますわあ
2014/03/01(土) 17:12:18.11
>>346
ありがとうございます。
やはり64bitにするしかなさそうですね。
いちいちdeallocateするの大変なのでw
2014/03/02(日) 15:54:25.99
OS&コンパイラ64bit版にしても、静的な配列は2Gまでだったりすることが多いから、
よく調べた方がいいぞ。むろん動的には2Gを超えて確保できるが。

これは手抜きではなく、まだ整数のデフォは32bitだし、単精度実数とデフォ整数
長さを合わせるという約束とかもあるから色々全体整合で仕方ない事情がある。
2014/03/03(月) 02:46:29.22
>>351
うーん、難しい話ですね。
単純に64bitにしたからって載せてるメモリフルフルで使えるわけではないってことですね?

どうしても配列を一度に百万行ほど読み込ませて数値計算を行いたいのでほとほと困り果ててます。

和書だとあまりフォートランに関して詳しい解説本(オプションやらテクニック的なもの)が少ない気がするのですが、何かオススメありますか?
2014/03/04(火) 23:40:05.16
昔は西村恕彦が粘着していたが、その後は粘着いないね。
・66でJIS FORTRAN全釈―電子計算機プログラム用言語
・77で岩波FORTRAN辞典
・90ではMetcalf&Reid本訳者としてbit 別冊『詳解 Fortran 90』

Metcalf & Reid 本もF2003から Cohen が加わったが、これは東京に住んでるんだから
次世代匂い付き粘着野郎が生まれてもいいはずだ!w

とはいえアメリカ人も粘着ばばあのJ.C.Adamsが死んでからFortran Handbookが
でなくなったので寒い時代になってしまった。
2014/03/07(金) 00:23:39.85
>>350 プログラム終了までほっといていいなら deallocate 不要
サブルーチンで宣言した非 save の allocatable は
サブルーチン抜けると勝手に deallocate したかと
2014/03/07(金) 02:00:33.33
>>354
ん???どういうことでつか?
a.out 実行すると、エラーおきまつよ?
2014/03/08(土) 00:26:57.93
Fortran90 からずっと 6.3.3.1 Deallocation of allocatable arrays で述べてる
return または end で手続きの実行が終了したとき、その手続きの局所変数は deallocate されると

allocate 時の問題じゃないことは当然確認したね?コードうp
2014/03/08(土) 00:46:31.22
>>356
むっちゃコード長いプラスモジュール化してるんでつけどOKでつか?
2014/03/08(土) 02:56:59.79
>>356
あれ自動DeallocationはFortran95からじゃなかったっけ?
おれF90時代に、ベンダー依存の解放エラーに悩まされた記憶がある。

とおもって、アニメを見ながら調べたら
Fortran90 handbook6.5.3.1 では状態不定
Fortran95 handbook6.5.3.1 では自動解放
とあった。

まぁ今時F90コンパイラ使っていないと思うが、>>357さんは念のため
調べた方がいいな。
2014/03/09(日) 00:53:32.50
仕様にあるから…ってもベンダ依存はしゃーないか
http://www.nag.co.uk/sc22wg5/links.html

だがモジュール変数は解放されない
あとむしろそういうコード解析できる機会ないからくれるなら是非
公開したこと他の奴に怒られる事態になっても知らないけど
2014/03/09(日) 03:31:03.92
F90
>Any other allocatable array that is currently allocated becomes
>undefined and the allocation status becomes
>undefined at the execution of a RETURN or END statement.
>
>If an allocatable array has an undefined allocation status,
>the allocatable array must not be subsequently
>referenced, defined, allocated, or deallocated.


F95
>When the execution of a procedure is terminated by execution of
> a RETURN or END statement, an allocatable array that is a local
> variable of the procedure and is not included in the above
>categories has allocation status as follows:
> (1) If it is accessed by use association, its allocation status is processor dependent.
> (2) Otherwise, it is deallocated (as if by a DEALLOCATE statement).

規格を見ると、F90で明示的にDEALLOCATEしないでRETURNすると、ホントは二度といじって
いけないエンガチョになるんだな。F95は気を利かしてDEALLOCATEしてくれる。
2014/03/24(月) 22:03:24.67ID:NcnrpLpF
保守

コンパイラ任せでなく、Fortran 言語の範疇で、まともに
高速化を考える人間ってどれくらいいるのだろうか
2014/03/25(火) 07:28:56.11ID:mXzRLR6s
>>361
そうしたいんですけどねぇ。。。
その前にまずはコンパイラを通すことが出来るってとこまでで必死ですよ。

なーんかいい本ないですかね?
2014/03/25(火) 21:47:05.41ID:jjQiXJR+
とりあえず文法は ggれならぬ nagれ、だな。本は洋書しかないし
http://www.nag-j.co.jp/fortran/

一昔前のベクトル型計算機向けっぽい(最近のアクセラレータで見直されてる)
ループ変数固定とか仮引数の非エリアスとかの暗黙制約、
配列表現の柔軟さに ELEMENTAL & PURE 関数、
Fortran 直じゃないが OpenMP & MPI と割となんでも明示化できるが、
逆に言うと複雑かつこれやっとけばおk的な部分がないのと、
そこまで性能にシビアな世界はニッチかつ閉鎖的すぎる、特に国内事情で。
364デフォルトの名無しさん
垢版 |
2014/03/26(水) 21:12:26.41ID:OKU3OlE2
国内でFortran使ってる人口がそもそも少なそう
2014/03/28(金) 02:08:30.32ID:OEPLP/0i
最近コンピュータというとWEBがらみでテキスト処理機みたいなノリが強いが、
本来の電子計算機としてはFortran不動だべ。

そして日本は結構Fortran市場/ユーザーでかいんでないかな。
Intel Fortranは英語以外には唯一日本語マニュアル等を出しているし。
アメリカ以外でハード・OS・コンパイラまともに作れるの日本ぐらいでね。
2014/03/28(金) 07:40:18.76ID:27mpC+N6
ちょいとスレチかもしれませんが、みなさん変数の命名法ってどうしてますか?
2014/03/29(土) 14:26:34.57ID:iivY7v+4
商業利用は少ないし、研究機関での個人・少人数開発がほとんどだし、明文化されたコーディング規約ってなかなか見つからんよな。
C++も併用してるので、そっちの命名規約と統一してる。
変数大文字6文字縛りは勘弁な。
2014/03/30(日) 02:02:03.27ID:wC7BTSuT
WEB世界の偉い人wでもFortranの知識が66や77時代のイメージ止まりで
とんちんかんな事を言っていて笑える。

アドバイスで数値計算はFortranじゃなくてもいいとか言って、
初心者たぶらかして冬山にTシャツ、サンダルで登山させるような
悪い奴多すぎで草不可避www
2014/04/12(土) 01:07:03.97ID:Ab832t2z
fortran90なんだけど、
三次元配列に二次元配列の要素を代入したいんだけど、どうすればいいかな?

a(i,j)に時間軸tを追加して、
do t=1,100
b(i,j,t)=a(i,j)
end do

こういうイメージで、逐次のa(i,j)を代入したいっす。
2014/04/12(土) 02:03:40.35ID:7FV8vMmK
b(:,:,t)=a
でおk?
2014/04/12(土) 02:56:42.37ID:7b7Ca2J/
え そんなシンプルでおk?
ありがとうございます
2014/04/15(火) 10:35:48.57ID:nSLuXsCJ
b(:,:,t)=a(i,j)ってやれば二次元配列に時間軸を追加したものができるのか
よくある:ってなんの意味なんです?
2014/04/15(火) 19:04:08.61ID:2Visq3rw
b(:,:,t)=a(i,j) だと駄目。
>>370 のとおりじゃないと。

部分配列を指定するのにコロンを使う。
たとえば配列 v の第2成分から第10成分までなら v(2:10)。
コロンの両脇に数字がないのは、成分あるだけ全部という意味。
2014/04/15(火) 19:11:45.41ID:0DdTk08m
ちょうどいい解説があった
http://www.str.ce.akita-u.ac.jp/~gotou/zyouhou/f90/sec6.html#6.4.
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況