2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2012/08/16(木) 20:58:00.31 .net
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
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/

776 :デフォルトの名無しさん:2015/02/25(水) 18:07:19.77 ID:q//8/n6w.net
>>775
移住先の候補があるなら教えて欲しい。

777 :デフォルトの名無しさん:2015/02/27(金) 19:13:57.57 ID:8CupuJ11.net
とりあえずおーぷん2chにたてるだけたてといた
http://toro.open☆2ch.net/test/read.cgi/tech/1425031440/
(☆はNGワード対策)
何事もないことが一番だけどそんときは避難所代わりに使ってください 現に今人多杉状態だけど
ここ質問スレだけど他にfortranスレないしfortran全般に関する喋り場ならおーぷんでいいよね?転載嫌いとかアフィリエイト嫌いとかのひとがいたらすまんが

純粋な質問に関してはstackoverflow日本語版も始まったしそっちも賑わってほしいなあと思ってる(現在3件しかない)
本家stackoverflowの方はfortranに関してもかなりお世話になってるし

778 :デフォルトの名無しさん:2015/02/28(土) 14:09:46.29 ID:fZ9CqkAf.net
お若い方。
この世間に疎い爺に何が起きているのか3行くらいで教えてくれんかね?
カチュ〜シャが使えなくなってから専ブラともお別れじゃよアッハッハ

2chがたらこのものでなくなったらしい話は風のうわさに聞いたども、
移住とは何のことじゃね?

779 :デフォルトの名無しさん:2015/02/28(土) 14:12:07.22 ID:ptkFuNoe.net
>>777
おーぷん2chは知らなかった。何かあればそちらを使わせてもらいます。
stackoverflowの方はgoogleでの検索がヒットした時ぐらいしか行かなかったけれど、
日本語版はありがたいね。こちらも覗きに行きます。

780 :デフォルトの名無しさん:2015/02/28(土) 14:20:37.08 ID:ptkFuNoe.net
>>778
私もよく知らないが、現在の専ブラが使っているdatが廃止される。2chを専ブラで利用するためには
2chが提供するAPIが必須となるが、このAPIは2chから使用許諾を受ける必要がある。
よって今のようなオープンソースの専ブラの開発、提供は難しいようだ。

781 :デフォルトの名無しさん:2015/03/09(月) 22:22:14.04 ID:XrkMx/p/.net
>>493
私も見たいと思ったのですが…
該当章はなくなってしまったようですね.
(もう8か月以上だから仕方ないか)

782 :デフォルトの名無しさん:2015/03/09(月) 22:37:50.67 ID:wBxXg+k6.net
おいおいTip集に分離されただけで記事は残ってるぞ
nagのトップページから見てみ

783 :デフォルトの名無しさん:2015/03/10(火) 23:05:49.08 ID:Gi5LttGt.net
Hey!Yo!Brother!

Fortran2003でOOPを勉強してみたいんだが、NAGしか入門する門は無いのかい?
ジーザスは狭き門より入れと言ったが、おじちゃんは滅びの道でもいいから
広き門から入って太い道を通りたいんだYo!

できればジーザスの言葉と同じアラム語かおじちゃんと同じ言葉の日本語で頼むよ!
敵性語はノンノン!

784 :デフォルトの名無しさん:2015/03/15(日) 13:51:14.51 ID:Fao0AffOq
FORTRANはゲームプログラミングに使えないと言われてムカつきます
なんとか美麗なグラフィックのゲームを作って見返したいのですが
キー入力やスプライト周りの便利なライブラリないですか(挫折)

785 :デフォルトの名無しさん:2015/03/17(火) 02:57:32.45 ID:qWCLUX9n.net
>>784
ああ、それは腹立つな
Fortran Graphic、Fortran OpenGLで検索するとそこそこ出てくる
けど、まともにメンテナンスされてるのが無さげでもある……

786 :デフォルトの名無しさん:2015/03/21(土) 20:51:39.73 ID:A7bsOdex.net
プログラム中のx行目?y行目のソースコードを出力させるwrite文の書き方はないでしょうか

787 :デフォルトの名無しさん:2015/03/22(日) 10:00:02.71 ID:upANbGQj.net
>>786
ねーよ

788 :デフォルトの名無しさん:2015/03/22(日) 14:18:33.06 ID:qEVJABmn.net
>>786
プログラム単体では無理
単純に任意のファイルのx行目を表示するプログラムなら簡単
指定行まで読み飛ばして、指定行を十分長い文字列で読み込めば良い
それでソースファイルを読んで表示するならできるけど
ソースファイルは常に必要

789 :デフォルトの名無しさん:2015/03/22(日) 15:16:23.54 ID:lBBw+fHF.net
Quineが書きたいという話ではなくて?

790 :デフォルトの名無しさん:2015/03/22(日) 16:35:49.10 ID:CWUz6yZb.net
>>788
なるほどopenして目的行寸前まで空readしてread×行数すればいいということですね
解決できそうです。ありがとうございました
>>789
初めて聞きました。勉強になりました

791 :デフォルトの名無しさん:2015/03/24(火) 21:45:10.36 ID:Vm8bqf+W.net
>>790
俺にもお礼言えよ、クソ野郎

792 :デフォルトの名無しさん:2015/03/26(木) 23:15:58.87 ID:Gl+r/2fs.net
3次元のスカラーデータを吐く、x,y,zのdoループをompにしようとしたんだけど、スタックオーバーフローだなんて怒られた

どーすんべ?

793 :デフォルトの名無しさん:2015/03/27(金) 02:28:15.56 ID:agfznfe3.net
安直にはコンパイラ、リンカのオプションでスタック増やせ。

794 :デフォルトの名無しさん:2015/04/28(火) 17:28:05.66 ID:iBflpoE2.net
MinGWのGCC4.9.2ののFORTRANで, -fcase-upperのようなオプションってありますかね?
昔のバージョンにはあったみたいなんですが, 現在のは削除されたようで.

795 :デフォルトの名無しさん:2015/05/10(日) 17:08:53.50 ID:xJAFgSar.net
Intel fortran無料版のライセンスが改定されて
オープンソースへの貢献を証明しなきゃならなくなってた
https://software.intel.com/en-us/qualify-for-free-software/opensourcecontributor

796 :デフォルトの名無しさん:2015/05/11(月) 01:08:44.47 ID:54EXtOYg.net
Gfortran とIntel fortran のそれぞれの利点って何かね( ´ ▽ ` )ノ

797 :デフォルトの名無しさん:2015/05/11(月) 01:47:31.11 ID:XHL5HbZn.net
え、gfortranに利点なんかあるの?
ああ、うん、gccツールチェインの一部なのは便利だよね

798 :デフォルトの名無しさん:2015/05/11(月) 06:54:00.10 ID:qOqdHGiK.net
ハードウェアで二倍の性能出す金払うくらいだったら、Intelのコンパイラ買えよ。
ソフトには金出せないってどんだけ唯物論のアカなんだよw

799 :デフォルトの名無しさん:2015/05/11(月) 10:33:22.97 ID:54EXtOYg.net
>>797
なに、そんなレベル違いますのん?

800 :デフォルトの名無しさん:2015/05/13(水) 06:59:19.62 ID:5ad/p9/H.net
>>799
10年くらい前は差は歴然としてました。
最近はどうなのでしょうね?

801 :デフォルトの名無しさん:2015/05/15(金) 02:52:46.16 ID:3VlILQzP.net
intelは自動並列化があるから中級者は使用を薦める

802 :デフォルトの名無しさん:2015/05/31(日) 00:46:49.58 ID:z6xjuO2m.net
このレス数からしてFortran使ってる人はほとんどいないのかな?

803 :デフォルトの名無しさん:2015/05/31(日) 01:15:28.56 ID:dBkTICLM.net
ここでの質問は学生がほとんどのように見える
一般人は使わないだろうから少ないのは確かだろうけど
調べたり相談できる人が多いんじゃない?

804 :デフォルトの名無しさん:2015/05/31(日) 05:24:16.45 ID:z6xjuO2m.net
>>803
なるほど
じゃあ私遠慮無く質問しまくっちゃっおうかな

805 :デフォルトの名無しさん:2015/06/05(金) 00:40:30.28 ID:rgF7y0m6.net
fortran の組み込み関数でminval ってのがありますよね.
ある配列a(要素は一つだけ)に関して
minval(a,dim=1,mask=a>0.0d0)すると値が1e-324みたく値がおかしくなるんですが原因として考えられるものは何でしょう?
ちなみに配列aの中身は
a(1)= 4.2e-2です。
なので期待する値は
minval(a,dim=1,mask=a>0.0d0)=4.2e-2になるはずなんですが。。。

806 :デフォルトの名無しさん:2015/06/05(金) 01:52:18.65 ID:rTO63fPn.net
>>805
なんとなく初期化してない変数が引っかかっている気がする
minvalの動作不良を疑うならコンパイラとか環境を書こう
違うならソースをできるだけ書こう
長くてソース貼れないならこんな感じに晒すと検証が楽
https://ideone.com/JstGnQ

807 :デフォルトの名無しさん:2015/06/05(金) 23:13:40.04 ID:zCKBsI7m.net
>>805
単精度を入れているのに倍精度で値が返ってきているのが気になる。
なんか倍精度と単精度をまぜこぜにしているか、コンパイラが間違っていてまぜこぜにしている。

g95はデフォの変数長を変えたせいで混乱に陥った。その辺かな?
FortranはRealとIntegerの長さが等しくないといけないのにそれを崩した。
まぁ64Bit時代には8バイト整数にしたいのはわかるけど、
そうなると倍精度がRealになって、倍精度が4倍精度になってハードウェア対応せずで憤死する。


https://ideone.com/m11vQN

こんな感じかな?
program test2ch
implicit none
real(8) :: a(1)
real :: b(2)
equivalence(a, b)
b(1) = 4.2e-2
b(2) = 0.0e0
print *, minval(a, dim = 1, mask = a > 0.0)
end program test2ch
実行結果
5.070575254129006E-315

808 :デフォルトの名無しさん:2015/06/06(土) 00:34:55.86 ID:TK6bZDgw.net
>>807
ideoneってfortranいけるのかw

809 :デフォルトの名無しさん:2015/06/06(土) 01:24:14.49 ID:pgwiShP2.net
変数に値が入ってるかどうかの判断ってどうしてる?ポインタとか使わずになんかNull かどうか?っての判断できんのかね?
ちなみにgfortran 4.2 でDebian 8.0 64bit版での話なんだが。

810 :デフォルトの名無しさん:2015/06/06(土) 02:41:06.93 ID:cFX9ZRwg.net
>>809 ??
ASSOCIATED とか ALLOCATED じゃダメなのか?
普通の変数の場合はどうしようもないよな。

811 :デフォルトの名無しさん:2015/06/06(土) 05:09:32.95 ID:pgwiShP2.net
>>810
>>809 ??
>ASSOCIATED とか ALLOCATED じゃダメなのか?
配列やらポインタ使えってこと?

>普通の変数の場合はどうしようもないよな。
やはりそうなのかね?値がない場合をやって見たら、0.00000って表示されたのには吹いた

812 :デフォルトの名無しさん:2015/06/06(土) 12:21:31.78 ID:cFX9ZRwg.net
>>811
変数について何か勘違いしてないか???

ただどうしてもというなら、F2003ならスカラーのALLOCTABLEというのがあるので
それを使えばいい。

813 :デフォルトの名無しさん:2015/06/06(土) 19:54:52.83 ID:pgwiShP2.net
>>812
多分何か勘違いしてるかも。
俺の意識では、変数という箱に計算された数値データが格納されるってイメージなんだよなぁ。

814 :デフォルトの名無しさん:2015/06/06(土) 20:47:16.10 ID:5sLoB1TNv
>>809
>変数に値が入ってるかどうかの判断ってどうしてる?ポインタとか使わずになんかNull かどうか?っての判断できんのかね?
未初期化の変数にはコンパイラが適当な値を入れるはず。
ゼロかも知れないし、そうではないかも知れない。
変数を未初期化のまま使っていないか確認したければ、
コンパイラの警告オプションを探せば該当のオプションがあるかも。
gccなら-Wuninitialized、ifortなら-check uninitとかあるけれど、gfortranで使えるかは知らない。

815 :デフォルトの名無しさん:2015/06/09(火) 15:20:38.21 ID:t89alswU.net
まったくの初心者なのですが質問失礼します
f77形式で書かれたプログラムをf90形式に変換した所plplotという描画用プログラムがエラーだらけで動きません
具体的には、「関数plwid に対する定義されてない参照です」のようなメッセージがいっぱいでてきます
どうしたらよいのか教えていただけませんか?お願いします

816 :デフォルトの名無しさん:2015/06/09(火) 16:35:27.82 ID:a3IapIzqd
>>815
plplotの関数を使うプログラム単位の宣言部でplplotのモジュールをuse文で指定する。
plplotライブラリのインストールディレクトリとライブラリの名前をコンパイラに教える。
すぐに思いつくのはこの二点かな。

817 :デフォルトの名無しさん:2015/06/09(火) 18:47:39.82 ID:t89alswU.net
>>806すみません補足します
OSはLinux beanでコンパイラはgfortranです

818 :デフォルトの名無しさん:2015/06/09(火) 20:02:28.27 ID:PG87IvKa.net
>>815
もとのプログラムはf77で正常にコンパイルできてるの?
gfortranでそのままいけるやろ

819 :デフォルトの名無しさん:2015/06/14(日) 00:09:43.12 ID:1ASDFy3f.net
Fortran未だに使ってる人いますか?
やっぱり昔に構築しちゃった遺産をそのまま使う方ばかりですか?

820 :デフォルトの名無しさん:2015/06/14(日) 00:15:12.75 ID:oyhhJPji.net
天文学の計算で有効数字が16桁以上で計算したいものが
あり、C/C++では桁数の関係で微妙なので、Fortran
の4倍長精度を使って計算しています。
64ビットあるいは80ビットでなくて128ビット
で計算できるのが有りがたいです。

821 :デフォルトの名無しさん:2015/06/14(日) 02:42:35.24 ID:1ASDFy3f.net
>>820
なるほどご丁寧にありがとうございます
そういった分野があるんだと勉強になりました

822 :デフォルトの名無しさん:2015/06/14(日) 16:29:35.57 ID:oyhhJPji.net
>>820
補足します。
NASAが太陽・月・冥王星を含む惑星の位置を計算
するための基礎データを発表しているのですが、
そのデータがたとえば
0.149597870691000015+09
という有効数字18桁で当れられて
います。
この一定間隔で与えられたデータを数値積分して
位置を計算する必要があります。
C++などのlong doubleでは、有効数字が16桁程度
なので、fortranの4倍長kind(16)を指定すると、
三角関数も4倍精度で計算でき、安心できるわけです。

823 :デフォルトの名無しさん:2015/06/17(水) 10:18:52.06 ID:ti+IkGPz.net
ソフトウェアに興味なくて、ほとんどプログラムやったことない学生が、
専門分野の研究に必要になってから勉強を始めて、曲りなりに必要なプログラム
書けるようになるのが早いのはやっぱFortranだな。

余計なことを覚えなくていいし、行列の添え字とかが(1から始まる、カラムメジャー等)、
教科書・文献などの数学の常識に近い点が良いらしい。
式とプログラムで表記が同じである必要は全くないが、
ある程度は形式を保っていないと焦点がボケてダメなようだ。

ソフトウェアの板でいうと叱られるかもしれないが、
時間かけるならプログラム言語の勉強するより専門分野の勉強する方がいい。

824 :デフォルトの名無しさん:2015/06/19(金) 21:01:11.17 ID:DScX6l8h.net
maxvalを使って上から2番めに大きいものなど抽出したりできませんよね?

825 :デフォルトの名無しさん:2015/06/19(金) 22:45:09.43 ID:JdldsSpH.net
挑発されてるようで不快だが

配列に同じ値がないか、重複を排除した2番目に大きい値
(例えば配列a=(/1, 2, 5, 3, 5/)なら3)を返してほしいなら
maxval(a, mask = a < maxval(a))でいい
配列を降順に並べた時の2番目の値(上の例なら5)を返してほしいなら
maxlocで最初の最大値の位置を特定して、それを除外した配列のmaxvalをとる

826 :デフォルトの名無しさん:2015/06/19(金) 23:35:54.73 ID:DScX6l8h.net
>>825
ありがとうございます。書き方悪かったですすいません・・
今のプログラムがスマートに書るようになりそうで大変助かりました

もしかすると、3番目とかなら
b=maxval(a, mask = a < maxval(a)) !b=2番目に大きい
c=maxval(a,mask=a<b) !c=3番目に大きい
で良いでしょうか、試してみます

827 :デフォルトの名無しさん:2015/06/22(月) 00:36:18.06 ID:GDms9OMt.net
イケメンすぎるwwwwwwwwww

828 :デフォルトの名無しさん:2015/07/04(土) 15:09:30.71 ID:s4aH+BtB.net
a(i,j)
b(j,k)という変数があって、
maxval(a(i,j+5:j+10)) - b(j,k)
という計算をしたいのですが、結果がおかしくなります。
もしかするとmaxvalを使って四則演算するときは配列が同じものを使用しないといけないのでしょうか

829 :デフォルトの名無しさん:2015/07/04(土) 15:23:40.44 ID:s4aH+BtB.net
すいませんプログラムミスのだけでした

830 :デフォルトの名無しさん:2015/07/10(金) 19:11:26.54 ID:/GzszqMd.net
次のようなプログラムを試しに走らせたところ、
ファイルの作成には成功するのですがファイルの読み込みでセグメントエラーが出ます。
原因が分かりません、教えてもらえないでしょうか。windows7, 64bit, gfortran を使用しています。
program fileIO
implicit none
integer i, j, k

open(17,file='mydata.dat')
write (17,*) 100, 200, 300
write (17,*) 400
write (17,*) 500, 600
close(17)

! 同じファイルを今度は読み込み用にオープンする
open(18,file='mydata.dat', status='old')
read (18,*) i, j, k
print *, i, j, k
read (18,*) i
print *, i
read (18,*) i, j
print *, i, j
close(18)
end program fileIO

831 :デフォルトの名無しさん:2015/07/10(金) 21:33:48.54 ID:/Va7ypH/.net
>>830
エラー内容書いて
linux のgfortran 、intel fortranなら普通にいけるが

832 :デフォルトの名無しさん:2015/07/10(金) 21:48:52.27 ID:/GzszqMd.net
次のエラーが出ました。

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0 ffffffffffffffff
#1 ffffffffffffffff
#2 ffffffffffffffff
#3 ffffffffffffffff
#4 ffffffffffffffff
#5 ffffffffffffffff
#6 ffffffffffffffff
#7 ffffffffffffffff
#8 ffffffffffffffff
#9 ffffffffffffffff
#10 ffffffffffffffff
#11 ffffffffffffffff
#12 ffffffffffffffff
#13 ffffffffffffffff
#14 ffffffffffffffff
#15 ffffffffffffffff
#16 ffffffffffffffff
#17 ffffffffffffffff
#18 ffffffffffffffff

833 :デフォルトの名無しさん:2015/07/11(土) 01:01:00.88 ID:WfA4pvIG.net
Window7,64bitのgfortranを使ってコンパイル実行して
みましたが,

100 200 300
400
500 600

と出力されて無事終了しました。
ちなみに,gfortran64のVersionは4.9.2です。

834 :デフォルトの名無しさん:2015/07/11(土) 13:28:32.70 ID:RZSlcw3F.net
ソフトのバージョンは
gfortra,64bit, ver 5.1.0 のおそらく最新版です。

とりあえず別のコンパイラを試してみます。

835 :デフォルトの名無しさん:2015/07/11(土) 15:08:28.52 ID:RZSlcw3F.net
FTN95 でうまくいきました

やっぱり gfortran ってクソだわ

836 :デフォルトの名無しさん:2015/07/12(日) 01:05:05.43 ID:yuQPCUFW.net
ファイルggshoki.f90に、800成分の配列を返すサブルーチンggshokiを書き、他のファイルと一緒にコンパイルしたところ、


ggshoki.f90:1:20:

subroutine ggshoki(Z(800))
1
Error: Unexpected junk in formal argument list at (1)


というエラーが出てしまいました。
どう直せばいいのでしょうか。アドバイスお願いします。

837 :デフォルトの名無しさん:2015/07/12(日) 01:10:26.47 ID:yuQPCUFW.net
上げてしまいました、すみません。

OS:Windows8(64bit)
コンパイラ:gfortran
バージョン:fortran90

です。

838 :デフォルトの名無しさん:2015/07/12(日) 01:14:54.68 ID:yuQPCUFW.net
連レスすみません。
バージョンは5.1.0です。

839 :デフォルトの名無しさん:2015/07/12(日) 01:54:09.24 ID:z4R5SLxl.net
>>836
subroutineの内部で宣言するなら書き方が違うはず
引数で宣言するより別の行で宣言した方が見やすくない?
とりあえず自分はこんな感じで書く
https://ideone.com/HCzWB6

840 :デフォルトの名無しさん:2015/07/15(水) 01:28:37.71 ID:yskKzL3L.net
>>839
リンク先のように書いたらうまくいきました。
自分のプログラムの他の部分も確認したところ、配列の書き方が全て間違っていました(配列A(1:N)をA(N)などと書いていました)。
ありがとうございました。

841 :デフォルトの名無しさん:2015/07/28(火) 11:53:11.24 ID:J4RVztBC.net
教えてください。
サブルーチンに渡された配列引数2つが同一かどうか
(値が同じかどうかではなくて、値を格納するアドレスが同じかどうか)
を確認するすべはありますでしょうか…?

ポインタとか使えるのでしょうかね?よく分かっていません。

842 :デフォルトの名無しさん:2015/07/28(火) 12:08:17.55 ID:J4RVztBC.net
自己解決してしまいました…

program test
implicit none
real(8)::a,b
a=1
b=2
call sub(a,b)
call sub(a,a)
end program

subroutine sub(a,b)
real(8),target::a,b
real(8),pointer::p1,p2
write(*,*) '=====',a,b
p1=>a
p2=>b
if(p1.eq.p2)then
write(*,*) 'identical'
else
write(*,*) 'independent'
end if
end subroutine

843 :デフォルトの名無しさん:2015/07/28(火) 12:26:18.89 ID:J4RVztBC.net
いや、すみません間違ってました。値を比較してるだけみたいです。
どうしたらいいんだ。
(日記みたいになってしまってですまんです)

844 :デフォルトの名無しさん:2015/07/28(火) 16:14:57.20 ID:ll5MB+YbM
>>841
試した事がないので自信がないが、組み込み関数associated()を使えばできるかも知れない。
2つの配列引数をpointerで受けてそれぞれを同一targetと比較するとか。
ただ、アドレスが同じか確認するだけなら問題はないと思うが、
一般に1つのルーチンの異なる2つ以上の仮引数で同一実引数を受けるのはあまり行儀が良くないと思う。
上記の方法も配列仮引数ポインターにintent(in)属性を付けた方が良いかも。

845 :デフォルトの名無しさん:2015/07/29(水) 09:56:48.14 ID:2BaiQKnz.net
最近出た『FORTRANハンドブック』
買ったほうがいいかな?

846 :デフォルトの名無しさん:2015/07/29(水) 15:03:19.81 ID:PIi6Yh3/.net
>>843
コンパイラは何?

847 :デフォルトの名無しさん:2015/07/29(水) 23:16:07.78 ID:USyoWCFT.net
ifortです。associated(pointer,target) で行けそうなんですが、
targetの変数にopitional属性がついていて… ><という状況です

848 :デフォルトの名無しさん:2015/07/30(木) 00:48:36.88 ID:5OMMXfec.net
gfortranならlocでアドレス取得できるの確認した
なんか独自拡張みたいだが、ifortにもあるよね

849 :844:2015/07/30(木) 09:50:55.75 ID:NE82NWKL1
>>847
仮引数のoptional属性は省略可能であることを表しているので今回は関係ないです。
仕様書をよく読まずにレスしてしまったけれど、第二仮引数targetはポインターでも良い様です。
中途半端な助言をして申し訳ない。
サンプルコードを貼っておくので、参考にして下さい。

環境: msys2/mingw-w64 gfortran ver5.2
gfortran -pedantic -std=f2008 same_target.f90 -o same_target.exe
注意点
(1)非ポインターの実引数をポインター仮引数に渡せるのはFortran2008以降。intent(in)は必須。
(2)仮引数は形状引き継ぎ配列、または大きさ引き継ぎ配列でなければならない。

program same_target
implicit none
integer, dimension(10), target :: a, b
a = 0
b = 1
print *, "a compares with a."
print *, is_same_array(a, a)
print *, "a compares with b."
print *, is_same_array(a, b)
contains
function is_same_array(a1, a2)
implicit none
logical :: is_same_array
integer, dimension(:), pointer, intent(in) :: a1
integer, dimension(:), pointer, intent(in) :: a2
is_same_array = associated(a1, a2)
end function is_same_array
end program same_target

850 :デフォルトの名無しさん:2015/08/02(日) 15:34:23.65 ID:Gc5k9GMO.net
module内のcontainsのところに書いているfunctionをincというフォルダのsample.f90にまるごと持って行き、
include 'incl/sample.f90'
としたのですが、moduleに書いていた時はは参照できていた変数が
定義されていない参照 となりコンパイルできません。
functionまるごともっていくとかやったらいけないものなのでしょうか?

851 :デフォルトの名無しさん:2015/08/02(日) 16:04:00.19 ID:WYMEG2sEn
>>850
なぜinclude行を使おうと思ったのかとか、フォルダの名前はincなのかinclなのかはさておき、
include行はどこに書いているの?移動した関数を定義していた場所?それとも別?
あと変数はどこで宣言されているの?

852 :デフォルトの名無しさん:2015/08/02(日) 17:13:03.49 ID:5pC+KESf.net
>>850
内部関数を別ファイルにするなら注意が必要
includeを書く位置によるけどエラーになるなら外部関数扱いになっている
内部関数はメインプログラムの変数も参照できる
外部関数の扱いになるとメインの変数、他の内部関数、サブルーチンが参照できなくなる
だから、使っている変数や関数、サブルーチンを確かめないとエラーになる

解決方法はいろいろあるけど変数だけなら引数で渡せば使える
containsの後にinclude文を書けば内部関数扱いになるからそのまま使える

ちなみに、includeは廃止予定とかじゃないけど非推奨らしい
http://www.nag-j.co.jp/fortran/tips/tips_AboutInclude.html
http://www.mri-jma.go.jp/Project/mrinpd/coderule.html

853 :デフォルトの名無しさん:2015/08/02(日) 20:38:11.00 ID:Gc5k9GMO.net
>>852
詳しく教えて頂いてありがとうございます。試してみようと思います。
includeってもう非推奨なんですね。代替はmoduleで分割とかできるのかな
include以外のやり方も考えてみます

854 :デフォルトの名無しさん:2015/08/05(水) 16:55:43.17 ID:OhKwnQSp.net
>>842
Fortranって規約では、引数に番地の重なる変数や配列を送っちゃ駄目じゃなかったけ?

まぁ大抵のコンパイラは無警告で通すけど。
昔だとWATFORなんかが文句を言ってきた。今だとNAGあたりがなんか言いそう。

>>848
loc 相当を規格内でやるには c_loc と transfer で代替するはず。

855 :デフォルトの名無しさん:2015/08/16(日) 01:33:05.77 ID:ZKNwH6b8.net
Fotranで作成された古いプログラムをVBAに移しているのですが
符号がついていないためIF文の解釈がよくわかりません。
どなたか教えて頂けないでしょうか。

IF(J-K) 2,3,2
3 B(J)=1./Y
C(J)=1.
GOTO 4
2 B(J)=-A(K,J)/Y
C(J)=A(J,K)
4 A(K,J)=0.

856 :デフォルトの名無しさん:2015/08/16(日) 01:53:24.79 ID:mdNdQhdt.net
>>855
IF (L) a,b,c

X:負 go to a
X:0 go to b
X:正 go to c

857 :デフォルトの名無しさん:2015/08/16(日) 03:10:40.47 ID:ZKNwH6b8.net
>>856

ご回答ありがとうございました。
助かりましたm(_ _)m

858 :デフォルトの名無しさん:2015/08/16(日) 08:57:02.36 ID:nCIMfI1D.net
>>855
>>856
いわゆる計算型go toはもう忘れられいるのですね。

859 :デフォルトの名無しさん:2015/08/16(日) 09:08:04.74 ID:ZKNwH6b8.net
>>858
私が素人というのもあるのですが、いくつかのFortranのHPみてもIF文の説明には
入っていませんでした。

860 :デフォルトの名無しさん:2015/08/16(日) 12:29:13.36 ID:nCIMfI1D.net
>>869
ただしくは、算術IF文というものです。あるサイトの解説です
古い書き方に算術IFというものがあります。 この書き方はFortranでは廃止予定機能ですが古いプログラムには見かけられる書き方です。
算術IF文は、与えた式が0より小さい場合に最初の文番号へ、 0の場合は2番目の文番号へ、 0よりも大きい場合には3番目の文番号にジャンプします。
if ( 式 ) 文番号1, 文番号2, 文番号3
例)
i = -1
if (i) 100, 200, 300 ! 100へジャンプします

861 :デフォルトの名無しさん:2015/08/16(日) 21:04:42.30 ID:mdNdQhdt.net
古文読解みたいなもんよ。
新たに使うことは無いが、昔のプログラム読む為の教養みたいなもん?

アセンブラから進化したと思えば、まぁこんな命令ありがち感はある。

862 :デフォルトの名無しさん:2015/08/24(月) 05:54:40.65 ID:lgtNqCAf.net
ある参考書にあるプログラム例を映したのですが、実行するとエラーが出ます。内容が外部ファイルへの出力関係なので早急に解決したいのでよろしくお願いします。
プログラム
integer :: n, i, j, fi = 10, fo = 11
open(fi, file = 'input.d')
open(fo, file = 'output.d')
read(fi, *) n
close(fi)

if(n < 3) stop 'stop, n < 3'
d = 10.0d0 / dble(n - 1)
do j = 1, n
y = -5.0d0 + dble(j - 1) *d
do i = 1, n
x = -5.0d0 + dble(i - 1) *d
z = sin(x) * cos(y)
write(fo, '(3e12.4)') x, y, z
enddo
write(fo, *) ' '
enddo
close(fo)
エラーメッセージ
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0 ffffffffffffffff
#1 ffffffffffffffff
#18まで同文
OS:Windows7(64bit)
コンパイラ:gfortran
よろしくお願いします

863 :デフォルトの名無しさん:2015/08/24(月) 06:07:47.38 ID:lgtNqCAf.net
申し訳ありません。確認したところ
コンパイラはtdm64-gcc-4.6.1です。

864 :デフォルトの名無しさん:2015/08/24(月) 07:17:38.92 ID:lgtNqCAf.net
再び申し訳ありません。
gfortranのverを落としたら普通にできました。何度もすみませんでした。

865 :デフォルトの名無しさん:2015/10/14(水) 21:51:47.29 ID:S/4UaJI2.net
intelコンパイラのDAALをFortranから
なにかしらの形で呼び出してうまくいった方いませんか?

866 :デフォルトの名無しさん:2015/11/08(日) 17:44:21.58 ID:jBmnCoB4.net
fortranで簡単なguiウィンドウ作れたりしますか?
ウィンドウがあってこのボタンを押すと〜〜のサブルーチン実行のような・・・

867 :デフォルトの名無しさん:2015/11/08(日) 18:57:35.01 ID:8suWMXlm.net
>>866
visual fortranにRADがあったような気がする
けど、Fortranで計算部分をライブラリ化しておいて
別の言語で作ったGUIで呼び出す方が一般的だと思う

868 :デフォルトの名無しさん:2015/11/09(月) 22:25:56.92 ID:oiX/fj8U.net
>>867
ありがとうございます
やっぱり流行りの言語も使ってみたいと思います

869 :デフォルトの名無しさん:2015/12/15(火) 21:50:10.22 ID:CN0jNpr8.net
基本的な質問かもしれませんがfunctionとsubroutineで作るのってどう切り分けたらよいのですか?

870 :デフォルトの名無しさん:2015/12/15(火) 23:39:50.07 ID:m5pV9CjXc
>>869
よく言われるのは『戻り値が一つの場合』はfunction、それ以外はsubroutine。
またsubroutineには『順番が決まっている一連の処理』を一纏めにするという使い方もある。
こちらの使い方は特定の数学問題を解くモノが多い。

871 :デフォルトの名無しさん:2015/12/15(火) 23:58:59.22 ID:8+9MOK5i.net
>>869
functionを使うのは、返値が一つと自明な(かつ明示したい)ときだけかな。

872 :デフォルトの名無しさん:2015/12/16(水) 00:26:30.43 ID:dxIuSVrg.net
>>871
ありがとうございます
計算速度は関係ありませんか?

873 :デフォルトの名無しさん:2015/12/16(水) 00:28:34.56 ID:dxIuSVrg.net
例えばファンクションのほうがその度に呼び出すために計算速度は遅くなるとかありませんかね・・?

874 :デフォルトの名無しさん:2015/12/16(水) 02:24:06.06 ID:cuafR5Si.net
差は感じたことないな
気になるなら簡単なテストプログラム作ってみたら?

875 :デフォルトの名無しさん:2015/12/16(水) 06:34:20.84 ID:qB4UYIzV.net
中身が分からないunformattedで出力されたファイルを読むにはどうすればいいですか?

876 :デフォルトの名無しさん:2015/12/16(水) 22:57:19.85 ID:a/dQTwEW.net
ACCESS='STREAM' でオープンして嫁  詳しくはマニュアル検索検索

総レス数 1024
362 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★