このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
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/
くだすれFORTRAN(超初心者用)その6
レス数が1000を超えています。これ以上書き込みはできません。
2012/08/16(木) 20:58:00.31
2012/08/16(木) 21:32:02.53
, r‐‐ 、_
, ´ ̄ ´ ̄  ̄ミ 、 ____/: : : : ヽ、
__./ `¨ \/: : : : : : : : :: : : : : : : : : : : }
/ /// // / ,.、 / / : : : : : : : : : : : : : : : /
_,ァ≫イ/ / / / <、\>′ ヽ{ : :\ フ: : : : :/
イ/| //ー-、 />/`Y ∧\.:: : : :ヽ /: : : :/ ) (
彡' ノ,イ{/{__///「/¨ヽ.! ! | .}} /: : :.i /: : : : :/ ( )
彡' ノ }イ:::} ´´ r=ミ、 }ノ 1 小 /: : : : :/ ( ノ こ、これは>>1乙じゃなくて
片ソ /:::しヘ从 j/从.ゝ 彡/: : : : :/ |\ レンコンしそ餃子の湯気なんだからね
{:::::、 廴::/}{/ ,'{/ / ,': : : : / ( (. |: : \ 今後は、気をつけなさい!!
ヽ ー ::::: ∨{彡'.:.:.:.:. :/i: : : : :{ ( ) |: : : :.ヽ
\__ イ≦_¨\ \_ {: : : : :丶_______.ノ: : : : : }
、____xー|. |, -、` ヽ _.: '.: : : : : : : : : : : : : : : : : : : : : : /_
/ // / ー / /》ー--、 l-‐ \: : : : : : : : : : : : : : : : : : イ ゙ ヽ
ノ // /ヘ/ /// \ / /,,r"i/ ,r"i/,,r"i/,,r"i 、 ヽ
/ // ,'⌒/. /// }/ ./ /#; / /#.; / //#; / ,/#; / .," i |
V // i / /// `ヽi. /#; / ,/#; ./ /#;; / ,/#; / .,' / /
片厶≦j/ヘ //〈 /. |〃/ ,|〃/ ,|〃/ , |〃/ .,"..;;/ /
`ー'⌒Y⌒ヽ // ヽ-====< ヽ ヽゝ' `ヽゝ~ ヽゝ ~ヽゝ' " /
゙ ー-- 、、... _ __,,,,, .... --―"
, ´ ̄ ´ ̄  ̄ミ 、 ____/: : : : ヽ、
__./ `¨ \/: : : : : : : : :: : : : : : : : : : : }
/ /// // / ,.、 / / : : : : : : : : : : : : : : : /
_,ァ≫イ/ / / / <、\>′ ヽ{ : :\ フ: : : : :/
イ/| //ー-、 />/`Y ∧\.:: : : :ヽ /: : : :/ ) (
彡' ノ,イ{/{__///「/¨ヽ.! ! | .}} /: : :.i /: : : : :/ ( )
彡' ノ }イ:::} ´´ r=ミ、 }ノ 1 小 /: : : : :/ ( ノ こ、これは>>1乙じゃなくて
片ソ /:::しヘ从 j/从.ゝ 彡/: : : : :/ |\ レンコンしそ餃子の湯気なんだからね
{:::::、 廴::/}{/ ,'{/ / ,': : : : / ( (. |: : \ 今後は、気をつけなさい!!
ヽ ー ::::: ∨{彡'.:.:.:.:. :/i: : : : :{ ( ) |: : : :.ヽ
\__ イ≦_¨\ \_ {: : : : :丶_______.ノ: : : : : }
、____xー|. |, -、` ヽ _.: '.: : : : : : : : : : : : : : : : : : : : : : /_
/ // / ー / /》ー--、 l-‐ \: : : : : : : : : : : : : : : : : : イ ゙ ヽ
ノ // /ヘ/ /// \ / /,,r"i/ ,r"i/,,r"i/,,r"i 、 ヽ
/ // ,'⌒/. /// }/ ./ /#; / /#.; / //#; / ,/#; / .," i |
V // i / /// `ヽi. /#; / ,/#; ./ /#;; / ,/#; / .,' / /
片厶≦j/ヘ //〈 /. |〃/ ,|〃/ ,|〃/ , |〃/ .,"..;;/ /
`ー'⌒Y⌒ヽ // ヽ-====< ヽ ヽゝ' `ヽゝ~ ヽゝ ~ヽゝ' " /
゙ ー-- 、、... _ __,,,,, .... --―"
2012/08/17(金) 02:14:17.73
> 初心者に適切な指導もなくプログラム書かせているのはアカハラの域に達してるな。
これって割と多いような気がするな。
まあ分野によっちゃいずれ必要になることが前前から分かっていそうな気もするのだが
それも指導のうちと言えばそうだ
これって割と多いような気がするな。
まあ分野によっちゃいずれ必要になることが前前から分かっていそうな気もするのだが
それも指導のうちと言えばそうだ
4デフォルトの名無しさん
2012/08/17(金) 04:02:00.57 do i=2,1000
write(*,*) '1otsu'
enddo
write(*,*) '1otsu'
enddo
2012/08/17(金) 19:12:19.36
>>3
昔は先輩が教えることが前提となっていたから成立したが、
最近、先輩がいなかったり、知らなかったりで、伝承が途切れている。
時代の変化に、サヨクかぶれの爺さんたちの現状認識が追いついていない。
連中は鳩山みたいに夢を見て、管みたいに怒鳴り散らしてるからw
昔は先輩が教えることが前提となっていたから成立したが、
最近、先輩がいなかったり、知らなかったりで、伝承が途切れている。
時代の変化に、サヨクかぶれの爺さんたちの現状認識が追いついていない。
連中は鳩山みたいに夢を見て、管みたいに怒鳴り散らしてるからw
2012/08/17(金) 20:00:57.70
前スレくだすれFORTRAN(超初心者用)その5の>>999さん
アドバイスありがとうございます。引き続きよろしくお願いします。
変更点の件ですが、
入力文
character (len = 20) :: filenm
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(11,file= TRIM(filenm) )
出力文
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file=filenm)
close(14)
という修正をくわえればよろしいでしょうか?
アドバイスありがとうございます。引き続きよろしくお願いします。
変更点の件ですが、
入力文
character (len = 20) :: filenm
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(11,file= TRIM(filenm) )
出力文
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file=filenm)
close(14)
という修正をくわえればよろしいでしょうか?
2012/08/17(金) 20:51:34.50
>>6
それだと出力してない。
OPEN と CLOSE の間で出力する。
ただ一度に欲張らず、まず固定された入力ファイルと出力ファイルで
ちゃんと計算できるプログラムをつくって確認しておくべき。
その後、色々ループさせたり、ファイル名を変えたり出来るようにすべき。
ものには順番があり、近くから遠くへ及ぼすべしとは、四書のはじめ大学にも書いてあるw
それだと出力してない。
OPEN と CLOSE の間で出力する。
ただ一度に欲張らず、まず固定された入力ファイルと出力ファイルで
ちゃんと計算できるプログラムをつくって確認しておくべき。
その後、色々ループさせたり、ファイル名を変えたり出来るようにすべき。
ものには順番があり、近くから遠くへ及ぼすべしとは、四書のはじめ大学にも書いてあるw
2012/08/17(金) 21:14:43.76
これまでの教えていただいたプログラムが下記になります。
program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(11,file= TRIM(filenm) )
open(12, file = 'input2.txt')
open(13, file = 'input3.txt')
!
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(11,file= TRIM(filenm) )
open(12, file = 'input2.txt')
open(13, file = 'input3.txt')
!
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
2012/08/17(金) 21:16:18.67
! exel data y
do i = 1, ndata
read(12, *) (y(j, i), j = 1, 3)
end do
!
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
stop
end program test
do i = 1, ndata
read(12, *) (y(j, i), j = 1, 3)
end do
!
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
stop
end program test
2012/08/17(金) 21:38:35.93
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file=filenm)
write(*,*) 'result=', s ! <--だから結果を書きだせってw
close(14)
read(*,'(a)') filenm
open(14,file=filenm)
write(*,*) 'result=', s ! <--だから結果を書きだせってw
close(14)
2012/08/17(金) 21:39:27.86
write(14,*) 'result=', s ! <--だから結果を書きだせってw
思わず間違えたwwww
思わず間違えたwwww
2012/08/17(金) 21:52:24.90
2012/08/17(金) 22:03:15.16
そうそう。欲しい結果を書きだす。
本来は、入力ファイル名や計算したカラム(列)番号のような
付加的な情報も書いておくべきだろうが・・・
open(14,file = trim(filenm) ) ! <- こっちもTRIMで尻の空白を削っておくべし。
本来は、入力ファイル名や計算したカラム(列)番号のような
付加的な情報も書いておくべきだろうが・・・
open(14,file = trim(filenm) ) ! <- こっちもTRIMで尻の空白を削っておくべし。
1412
2012/08/17(金) 22:16:41.91 >>13
最後の方は、こういう感じでプログラムすればうまく動きますかね。
print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file = trim(filenm) ) ! <- TRIMで尻の空白を削る。
write(14,*) 'result=', s ! <--結果を書きだす。
close(14)
stop
end program test
こちらの掲示板に来て良かったです。
色々こんなデキの悪い自分に付き合ってくださってありがとうございました。
最後の方は、こういう感じでプログラムすればうまく動きますかね。
print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm
open(14,file = trim(filenm) ) ! <- TRIMで尻の空白を削る。
write(14,*) 'result=', s ! <--結果を書きだす。
close(14)
stop
end program test
こちらの掲示板に来て良かったです。
色々こんなデキの悪い自分に付き合ってくださってありがとうございました。
2012/08/17(金) 23:15:49.56
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= TRIM(filenm_in) )
・・・・
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=trim(filenm_out))
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)
として、読み込んだファイルと、使ったコラムも出力ファイルに書きだしておくと、
あとで何の計算したのかヒントになっていいぞ。
とろくさいと、どのファイルに何を書きだしたかすぐ忘れるだろうから、こうしておけwww
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= TRIM(filenm_in) )
・・・・
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=trim(filenm_out))
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)
として、読み込んだファイルと、使ったコラムも出力ファイルに書きだしておくと、
あとで何の計算したのかヒントになっていいぞ。
とろくさいと、どのファイルに何を書きだしたかすぐ忘れるだろうから、こうしておけwww
1612
2012/08/17(金) 23:31:33.54 >>15
度々すみません。親切にありがとうございます。
プログラムに組み込ませていただきます!
今日もかれこれ5時間くらいネカフェにいますが、
そろそろおいとまします。自転車こいで橋を越えた甲斐がありました。
また色々教えてください。
度々すみません。親切にありがとうございます。
プログラムに組み込ませていただきます!
今日もかれこれ5時間くらいネカフェにいますが、
そろそろおいとまします。自転車こいで橋を越えた甲斐がありました。
また色々教えてください。
1712
2012/08/17(金) 23:46:42.05 最後にプログラム全体を書き込ませてください。
program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= TRIM(filenm_in) )
open(12, file = 'input2.txt')
open(13, file = 'input3.txt')
!
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
! exel data y
do i = 1, ndata
read(12, *) (y(j, i), j = 1, 3)
end do
program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= TRIM(filenm_in) )
open(12, file = 'input2.txt')
open(13, file = 'input3.txt')
!
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
! exel data y
do i = 1, ndata
read(12, *) (y(j, i), j = 1, 3)
end do
1812
2012/08/17(金) 23:47:39.05 !
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=trim(filenm_out))
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)
stop
end program test
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
print *, 'input column '
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=trim(filenm_out))
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)
stop
end program test
1912
2012/08/17(金) 23:48:58.52 本日もどうもありがとうございました。
お先に失礼します。
お先に失礼します。
20sage
2012/08/21(火) 14:51:00.60 わからないので教えてください。
メモ帳(a.txt)のなかにデータがあります。
A B C D
1 1 1 1
2 2 2 2
‥‥‥‥
100 100 100 100
みたいな感じでデ−タがあるのですが、
B列の1行から100行まで
D列の1行から100行までのデータを取り出して
計算(B*D)する際に連動させたいのですが
どのようにプログラミングしたらいいでしょうか。
連動というのは、B列10行の時にD列10行の値を使うということです。
上手く説明できませんがお願いします。
メモ帳(a.txt)のなかにデータがあります。
A B C D
1 1 1 1
2 2 2 2
‥‥‥‥
100 100 100 100
みたいな感じでデ−タがあるのですが、
B列の1行から100行まで
D列の1行から100行までのデータを取り出して
計算(B*D)する際に連動させたいのですが
どのようにプログラミングしたらいいでしょうか。
連動というのは、B列10行の時にD列10行の値を使うということです。
上手く説明できませんがお願いします。
2012/08/22(水) 00:48:53.83
program test
implicit none
integer, parameter :: ndat = 100
real :: x(4, ndat), y(ndat)
open(10, file = 'a.txt', status = old)
do i = 1, ndat
read(10, *) x(:, i)
end do
y = x(2, :) * x(4, :) ! B * D
print *, y
stop
end program test
implicit none
integer, parameter :: ndat = 100
real :: x(4, ndat), y(ndat)
open(10, file = 'a.txt', status = old)
do i = 1, ndat
read(10, *) x(:, i)
end do
y = x(2, :) * x(4, :) ! B * D
print *, y
stop
end program test
2212
2012/08/23(木) 20:46:06.15 以前こちらの掲示板でお世話になった>>12です。お久しぶりです。
すみませんが、壁にぶち当たってしまいまして、お力をお貸しください。
コンパイルした後、作成したアプリの方で3,6,9,12,18列を同時に読み込んで一つのメモ帳に
書き込めるようにプログラムしたいのですが、可能でしょうか?
以下に現在のプログラムデータを載せさせていただきます。以前アドバイスしていただいた「trim」
なんですが、buildしたらエラーになってしまったので、そこを入力と出力の両方消したら
コンパイルしてくれたので、バージョンが20年前のものだからではないかと思います。
あと、師に確認してもらったところ計算結果が誤っていると指摘されたのですが、もし
おかしなところがあったらアドバイスお願いします。一週間やってみたのですが、どうにも自分
では原因を見つけられないでいます。
一個一個メモ帳やエクセルのデータを読み込んだらclose
すべきという指摘がありました。あと、fortranでは原則iを実数にしないといけないと指摘されたので、
変更しました。これもソフトが古いからなのでしょうか?
program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata) ,i!iを実数にしたつもりです。これくらいで計算結果は変動しますか?
integer :: j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
open(12, file = 'mydata1.csv')
open(13, file = 'mydata2.csv')
すみませんが、壁にぶち当たってしまいまして、お力をお貸しください。
コンパイルした後、作成したアプリの方で3,6,9,12,18列を同時に読み込んで一つのメモ帳に
書き込めるようにプログラムしたいのですが、可能でしょうか?
以下に現在のプログラムデータを載せさせていただきます。以前アドバイスしていただいた「trim」
なんですが、buildしたらエラーになってしまったので、そこを入力と出力の両方消したら
コンパイルしてくれたので、バージョンが20年前のものだからではないかと思います。
あと、師に確認してもらったところ計算結果が誤っていると指摘されたのですが、もし
おかしなところがあったらアドバイスお願いします。一週間やってみたのですが、どうにも自分
では原因を見つけられないでいます。
一個一個メモ帳やエクセルのデータを読み込んだらclose
すべきという指摘がありました。あと、fortranでは原則iを実数にしないといけないと指摘されたので、
変更しました。これもソフトが古いからなのでしょうか?
program test
implicit none
integer, parameter :: ndata = 400
real :: a(18, ndata), x(3, ndata), y(3, ndata)
real :: s, sx, sy, tx(ndata), ty(ndata) ,i!iを実数にしたつもりです。これくらいで計算結果は変動しますか?
integer :: j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
open(12, file = 'mydata1.csv')
open(13, file = 'mydata2.csv')
2312
2012/08/23(木) 20:50:05.82 do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do !ここはclose(11)とか不要でしょうか?
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
! exel data y
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
print *, 'input column ' !ここの読み込み時に3,6,9,12,15,18列を同時に読み込み計算させたいと考えています。
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)
stop
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do !ここはclose(11)とか不要でしょうか?
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
! exel data y
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
print *, 'input column ' !ここの読み込み時に3,6,9,12,15,18列を同時に読み込み計算させたいと考えています。
read *, icol
sx = sum( tx * a(icol, :) )
sy = sum( ty * a(icol, :) )
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s ! <--結果を書き出すプログラム。
close(14)
stop
2412
2012/08/23(木) 21:03:18.85自分の作りたいプログラムの内容を載せさせてください。連投になってしまい、すみません。3つのファイル(メモ帳1つ、エクセルファイル2つ) を読み込み
対応した列の積分および除算を行い結果を新規ファイルに書き出せるようにしたいと考えています。
メモ帳のデータで読み込みたいデータが1〜18列あり、メモ帳内のデータすべてを読み込み、上から「いらない行1〜6」を読み飛ばすようにプログラミングし、
1〜18列の中の任意の列のみを計算に組み込ませたいと考えています。(一度の計算処理で3列目のみとか6列目のみ指定して計算させたいです。)
いらない行1
いらない行2
いらない行3
いらない行4
いらない行5
いらない行6
1 .000E+00 .121E+06→→→.115E+07 .000E+00 .703E+06 .703E+06(18列)
2.
3.
↓
↓
↓
(全部で400行のデータが存在します。)
さらに以下のエクセルデータx,yを読み込んで合計値を算出、除算を行いたいと考えています。
エクセルデータxを組み込んだ計算式:sx=s+(real(i)*50.0-25.0)*?*x3
エクセルデータyを組み込んだ計算式:sy=s+(real(i)*50.0-25.0)*?*y3
(x3,y3は上記エクセルデータの左から3行目のデータを読み込ませているつもりです。)
(?にはメモ帳の1〜18列を任意で選択できるようにプログラムしたいです。)
を作ってこれら二つを除算し、その結果を記録していくようにプログラムしたいと考えています。
プログラミングでいうと、下記エクセルデータの各行にx1,x2,x3,y1,y2,y3と名前を付け、x3,y3のみ読み込んで
計算過程に組み込ませたいです。
2512
2012/08/23(木) 21:04:12.98 エクセルデータx
2.50E+01 5.31E-01 2.75E-01
5.00E+01 2.27E-01 4.22E-02
↓ ↓ ↓
(x1 x2 x3)
(1〜400個まで存在します。)
-------------------------------------------
エクセルデータy
2.50E+01 5.04E-01 2.70E-01
5.00E+01 2.08E-01 4.10E-02
↓ ↓ ↓
(y1 y2 y3)
(こちらも1〜400個まで存在します。)
一回の計算でアプリケーション内で変更するパラメーターは以下の3つにしたいと考えます。
「入力するメモ帳のファイル名、各メモ帳の1〜18列のどの列を入力するか、結果を出力する新規ファイル名」
(一回の計算で指定した1列だけの算出結果だけでなく、メモ帳内の3,6,9,12,15,18列をそれぞれの計算結果を一度に同じメモ帳の中で算出結果を
表示させたいと考えています。
稚拙な文章で申し訳ありませんが、よろしくお願いします。
2.50E+01 5.31E-01 2.75E-01
5.00E+01 2.27E-01 4.22E-02
↓ ↓ ↓
(x1 x2 x3)
(1〜400個まで存在します。)
-------------------------------------------
エクセルデータy
2.50E+01 5.04E-01 2.70E-01
5.00E+01 2.08E-01 4.10E-02
↓ ↓ ↓
(y1 y2 y3)
(こちらも1〜400個まで存在します。)
一回の計算でアプリケーション内で変更するパラメーターは以下の3つにしたいと考えます。
「入力するメモ帳のファイル名、各メモ帳の1〜18列のどの列を入力するか、結果を出力する新規ファイル名」
(一回の計算で指定した1列だけの算出結果だけでなく、メモ帳内の3,6,9,12,15,18列をそれぞれの計算結果を一度に同じメモ帳の中で算出結果を
表示させたいと考えています。
稚拙な文章で申し訳ありませんが、よろしくお願いします。
2012/08/24(金) 16:55:29.16
>>20
Fortran で i は整数だぞ。聞き間違いか、そのおっさんがアホかどっちかだ。
後者の場合、かなりキているwww
すぐ学生相談所に駆け込んで指導教官を変える実績作りを始めるべきw
close は、プログラムが終われば自動で閉じられるので、今の場合
たいした問題じゃない。
TRIMに関しては、コンパイラが手元にないのでよく分からんが、
エラーが出るとは思えない。まぁそれで動くというならよし、
文字列の尻に空白がついて困るというなら、なんとか考えるべしw
データを一度に計算したいというなら、大した計算量ではないので
計算は全データについて実行して、出力の所で選択するようにすればよい。
そのために、配列を拡張しておく必要がある。s, sx, sy
program test
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j, icol
Fortran で i は整数だぞ。聞き間違いか、そのおっさんがアホかどっちかだ。
後者の場合、かなりキているwww
すぐ学生相談所に駆け込んで指導教官を変える実績作りを始めるべきw
close は、プログラムが終われば自動で閉じられるので、今の場合
たいした問題じゃない。
TRIMに関しては、コンパイラが手元にないのでよく分からんが、
エラーが出るとは思えない。まぁそれで動くというならよし、
文字列の尻に空白がついて困るというなら、なんとか考えるべしw
データを一度に計算したいというなら、大した計算量ではないので
計算は全データについて実行して、出力の所で選択するようにすればよい。
そのために、配列を拡張しておく必要がある。s, sx, sy
program test
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j, icol
2012/08/24(金) 16:56:50.09
! exel data y <----EXCELな
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(11)
close(12)
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end program test
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(11)
close(12)
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end program test
2012/08/25(土) 00:14:21.45
> i
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
↑強いて言えばこの実数計算に i が入ることが気に入らないんじゃないか
整数*実数は実数計算になるはずなので的外れだが。
> エクセルデータxを組み込んだ計算式:sx=s+(real(i)*50.0-25.0)*?*x3
> エクセルデータyを組み込んだ計算式:sy=s+(real(i)*50.0-25.0)*?*y3
-----------------------------------↑
この s って sx か sy の誤記?それとも別の変数?
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
↑強いて言えばこの実数計算に i が入ることが気に入らないんじゃないか
整数*実数は実数計算になるはずなので的外れだが。
> エクセルデータxを組み込んだ計算式:sx=s+(real(i)*50.0-25.0)*?*x3
> エクセルデータyを組み込んだ計算式:sy=s+(real(i)*50.0-25.0)*?*y3
-----------------------------------↑
この s って sx か sy の誤記?それとも別の変数?
2012/08/28(火) 04:12:53.24
>>27>>28
返信遅くなってすみません。家の方で一週間以上経っても書き込み規制が解除されないみたいで、
またネカフェからです。月曜日に現状の報告会があったので、準備やらなんやらで閲覧が
遅れてしまい、申し訳ありません。
毎回教えていただきありがとうございます。
>この s って sx か sy の誤記?それとも別の変数?
この質問なんですが、私の持っているfortranの本にシグマ(Σ)を使った合計値の算出のプログラム例に記されていたので
そのまま作ったものです。ですので、この形で載っていただけので、そのまま使っています。sは一応s=s+1みたいな感じで
s=1とすると右辺に数値が代入され、左辺にs=2と計算させるような感じで入力した値を表現したつもりです。
返信遅くなってすみません。家の方で一週間以上経っても書き込み規制が解除されないみたいで、
またネカフェからです。月曜日に現状の報告会があったので、準備やらなんやらで閲覧が
遅れてしまい、申し訳ありません。
毎回教えていただきありがとうございます。
>この s って sx か sy の誤記?それとも別の変数?
この質問なんですが、私の持っているfortranの本にシグマ(Σ)を使った合計値の算出のプログラム例に記されていたので
そのまま作ったものです。ですので、この形で載っていただけので、そのまま使っています。sは一応s=s+1みたいな感じで
s=1とすると右辺に数値が代入され、左辺にs=2と計算させるような感じで入力した値を表現したつもりです。
3012
2012/08/28(火) 04:34:43.09 以下に順序を変更してみたプログラムデータをコピペします。
program test
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
close(11)
open(12, file = 'mydata1.csv')
! excel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
close(12)
program test
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
close(11)
open(12, file = 'mydata1.csv')
! excel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
close(12)
3112
2012/08/28(火) 04:41:41.98 ! excel data y
open(13, file = 'mydata2.csv')
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end program test
こういう順序の違いで計算結果って違ってきますか?
あと、最近ビルドした後コンパイルエラーばかり出てしまいますが、workplaceは一回ごとにこちらもcloseしないと
前のデータが残ってしまい、正しい計算ができない原因と考えられますか?
すみません、どんなことでも結構なので教えていただけると幸いです。よろしくお願いします。
open(13, file = 'mydata2.csv')
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end program test
こういう順序の違いで計算結果って違ってきますか?
あと、最近ビルドした後コンパイルエラーばかり出てしまいますが、workplaceは一回ごとにこちらもcloseしないと
前のデータが残ってしまい、正しい計算ができない原因と考えられますか?
すみません、どんなことでも結構なので教えていただけると幸いです。よろしくお願いします。
3212
2012/08/29(水) 16:39:14.45 program test
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
open(12, file = 'mydata1.csv')
open(13, file = 'mydata2.csv')
!メモ帳
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do !
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j, icol
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
open(12, file = 'mydata1.csv')
open(13, file = 'mydata2.csv')
!メモ帳
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do !
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
3312
2012/08/29(水) 16:39:45.01 ! excel data y
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(11)
close(12)
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end program test
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(11)
close(12)
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.', icol
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end program test
3412
2012/08/29(水) 16:42:53.89 上記で試してみたのですが、以下のようなエラーが起きてしまいました。(泣)
mydata1,2は自分で読み込みたいファイルを書いたのですが、、、
-------------------Configuration: 2012 - Win32 Debug--------------------
Compiling Fortran...
E:\2012.f90
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR3852: syntax error
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(24): error FOR3541: duplicated DO index variable - I
E:\2012.f90(29): error FOR3541: duplicated DO index variable - I
E:\2012.f90(36): error FOR3541: duplicated DO index variable - I
E:\2012.f90(41): error FOR3541: duplicated DO index variable - I
E:\2012.f90(55): error FOR3596: missing END DO statement
E:\2012.f90(55): warning FOR4265: symbol ICOL referenced but not set
Error executing fl32.exe.
012.exe - 12 error(s), 1 warning(s)
mydata1,2は自分で読み込みたいファイルを書いたのですが、、、
-------------------Configuration: 2012 - Win32 Debug--------------------
Compiling Fortran...
E:\2012.f90
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR3852: syntax error
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(22): error FOR2934: lexical error: Invalid character
E:\2012.f90(24): error FOR3541: duplicated DO index variable - I
E:\2012.f90(29): error FOR3541: duplicated DO index variable - I
E:\2012.f90(36): error FOR3541: duplicated DO index variable - I
E:\2012.f90(41): error FOR3541: duplicated DO index variable - I
E:\2012.f90(55): error FOR3596: missing END DO statement
E:\2012.f90(55): warning FOR4265: symbol ICOL referenced but not set
Error executing fl32.exe.
012.exe - 12 error(s), 1 warning(s)
2012/08/29(水) 17:11:03.66
>>34
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do !
↑
ここに全角文字の空白が入っている。それでエラーが出ている。
削れ。
残りのエラーは、それを直せば消える。
あんま全角文字は使わない方がいい。
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do !
↑
ここに全角文字の空白が入っている。それでエラーが出ている。
削れ。
残りのエラーは、それを直せば消える。
あんま全角文字は使わない方がいい。
2012/08/29(水) 17:48:31.37
lexical error: Invalid character
エラーメッセージの意味を調べておくといいよ
エラーメッセージの意味を調べておくといいよ
3712
2012/08/29(水) 19:26:06.86 program test
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
open(12, file = 'waterdata.csv')
open(13, file = 'polystyrene.csv')
!メモ帳
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
implicit none
integer, parameter :: ncolumn = 18, ndata = 400
real :: a(ncolumn, ndata), x(3, ndata), y(3, ndata)
real :: s(ncolumn), sx(ncolumn), sy(ncolumn), tx(ndata), ty(ndata)
integer :: i, j
character (len = 20) :: filenm_in, filenm_out
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_in
open(11,file= filenm_in)
open(12, file = 'waterdata.csv')
open(13, file = 'polystyrene.csv')
!メモ帳
do i = 1, 6 ! skip 6 lines
read(11, *)
end do
do i = 1, ndata
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
3812
2012/08/29(水) 19:28:30.86 ! excel data y
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(11)
close(12)
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.'
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end
do i = 1, ndata
read(13, *) (y(j, i), j = 1, 3)
end do
close(11)
close(12)
close(13)
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) )
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
write(*,'(a,$)') 'File Name : '
read(*,'(a)') filenm_out
open(14,file=filenm_out)
write(14, *) 'input file name', filenm_in
write(14, *) 'column no.'
write(14,*) 'result=', s(3:18:3) ! <--結果を書き出すプログラム。
close(14)
stop
end
3912
2012/08/29(水) 19:32:33.20 >>35
上記でコンパイルすることができ、ご指摘本当にありがとうございました。
「icol」なんですが、warningがでてしまって、式に直接関係しない変数なので
消してみたら消えました。たぶん、自分の使っているバージョンが古いため
警告がでちゃったと思います。
(ncolumn, ndata)に関してですが、(18,400)に変更しても問題ないでしょうか?
師からわかっている値なのでこっちにした方がよいと言われました。
あと、本日コンパイルまで無事こぎつけることができたのですが、どうも計算結果がおかしい
ということだったので、師が今日初めて細かくプログラム内容を見てくれたのですが、
私の説明不足ですみません。以下にメモ帳のデータのところで追記させてください。
>>36
そうしてみます。
上記でコンパイルすることができ、ご指摘本当にありがとうございました。
「icol」なんですが、warningがでてしまって、式に直接関係しない変数なので
消してみたら消えました。たぶん、自分の使っているバージョンが古いため
警告がでちゃったと思います。
(ncolumn, ndata)に関してですが、(18,400)に変更しても問題ないでしょうか?
師からわかっている値なのでこっちにした方がよいと言われました。
あと、本日コンパイルまで無事こぎつけることができたのですが、どうも計算結果がおかしい
ということだったので、師が今日初めて細かくプログラム内容を見てくれたのですが、
私の説明不足ですみません。以下にメモ帳のデータのところで追記させてください。
>>36
そうしてみます。
4012
2012/08/29(水) 19:52:05.28 連投になって本当にすみません。
メモ帳のデータの全体像を以下に記載します。
いらない行1
いらない行2
いらない行3
いらない行4
いらない行5
いらない行6
1 .000E+00 .121E+06→→→.115E+07 .000E+00 .703E+06 .703E+06(18列)←ここが合計19列でした。すみません。
2.
3.
↓
↓
↓
400
(全部で400行のデータが存在します。)
(18列)と説明してたのですが、ここが(19列)なので計算値が一個ずつずれて計算されていたため計算結果
が正しく算出されなかったのではないかという指摘を受けました。左端に1-400の整数部分の縦列 を除く2-19列
の指数表示のデータを読み込めるようにしたいです。
先ほど説明不足と書きましたが、僕の説明の間違いです。すいませんでした。
なのでこの部分を変更すればいいでしょうか?
do i = 1, ndata
read(11,*)!ここに一個整数のみ読み込まないように適当な変数をつけるべきでしょうか?
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
メモ帳のデータの全体像を以下に記載します。
いらない行1
いらない行2
いらない行3
いらない行4
いらない行5
いらない行6
1 .000E+00 .121E+06→→→.115E+07 .000E+00 .703E+06 .703E+06(18列)←ここが合計19列でした。すみません。
2.
3.
↓
↓
↓
400
(全部で400行のデータが存在します。)
(18列)と説明してたのですが、ここが(19列)なので計算値が一個ずつずれて計算されていたため計算結果
が正しく算出されなかったのではないかという指摘を受けました。左端に1-400の整数部分の縦列 を除く2-19列
の指数表示のデータを読み込めるようにしたいです。
先ほど説明不足と書きましたが、僕の説明の間違いです。すいませんでした。
なのでこの部分を変更すればいいでしょうか?
do i = 1, ndata
read(11,*)!ここに一個整数のみ読み込まないように適当な変数をつけるべきでしょうか?
read(11, *) (a(j, i), j = 1, 18)
end do
! exel data x
do i = 1, ndata
read(12, *) (x(j, i), j = 1, 3)
end do
4112
2012/08/29(水) 20:19:49.562012/08/29(水) 20:42:53.64
real :: dummy
read(11, *) dummy, (a(j, i), j = 1, 18)
または
integer :: idummy
read(11, *) idummy, (a(j, i), j = 1, 18)
read(11, *) dummy, (a(j, i), j = 1, 18)
または
integer :: idummy
read(11, *) idummy, (a(j, i), j = 1, 18)
2012/08/29(水) 20:46:18.21
>(ncolumn, ndata)に関してですが、(18,400)に変更しても問題ないでしょうか?
>師からわかっている値なのでこっちにした方がよいと言われました。
今時の常識では、数値述べたうちは避けて、常数にする。
Fortranの場合はparameterにするのがふつう。
>師からわかっている値なのでこっちにした方がよいと言われました。
今時の常識では、数値述べたうちは避けて、常数にする。
Fortranの場合はparameterにするのがふつう。
2012/08/29(水) 21:38:00.28
>>43
ありがとうございます。
parameterというのはC言語でいうconstのような、
変数として宣言はするが変更はできないものと捉えて問題ないでしょうか?
となりますと「不要な6行」もそれに倣って
integer, parameter :: ncolumn = 18, ndata = 400, gomi = 6
^^^^^^^^^
などとしておくべきでしょうか?
>>36
エラーの意味がやっと分かりました。
関数や変数に使えない文字を、クォートの外に書いてしまうと発生するエラーなんですね。
シンタックスエラーと似ていると思いました。
特に全角空白は識別しづらいので気を付けるよう留意します。
>>42
なるほど、ダミーを用意するのですか。こういう発想は素晴らしいと思います。
読み捨てるだけのために宣言される変数・・・儚いですね。
プログラミング自体が初めてなので右も左もわからない状態だったのですが、
みなさんのおかげで金輪際ここに来ることはないと思います。
長々とお付き合いいただきありがとうございました。
ありがとうございます。
parameterというのはC言語でいうconstのような、
変数として宣言はするが変更はできないものと捉えて問題ないでしょうか?
となりますと「不要な6行」もそれに倣って
integer, parameter :: ncolumn = 18, ndata = 400, gomi = 6
^^^^^^^^^
などとしておくべきでしょうか?
>>36
エラーの意味がやっと分かりました。
関数や変数に使えない文字を、クォートの外に書いてしまうと発生するエラーなんですね。
シンタックスエラーと似ていると思いました。
特に全角空白は識別しづらいので気を付けるよう留意します。
>>42
なるほど、ダミーを用意するのですか。こういう発想は素晴らしいと思います。
読み捨てるだけのために宣言される変数・・・儚いですね。
プログラミング自体が初めてなので右も左もわからない状態だったのですが、
みなさんのおかげで金輪際ここに来ることはないと思います。
長々とお付き合いいただきありがとうございました。
2012/08/29(水) 21:48:48.84
> FOR4265: symbol ICOL referenced but not set
参照しているけど値が入ってない、だとさ。
> 全角空白
IME から空白文字の入力を常に半角にすると良いぞ。
> 常数
定数じゃないのと思ったがどっちでもいいのか
函数と関数のような。
この 400 とか 18 とか何の数だったっけ?
とならんように意味のある変数(名前)で置く。
18 列じゃなくて 19 列だったときも ndata の値を変えるだけだ。
参照しているけど値が入ってない、だとさ。
> 全角空白
IME から空白文字の入力を常に半角にすると良いぞ。
> 常数
定数じゃないのと思ったがどっちでもいいのか
函数と関数のような。
この 400 とか 18 とか何の数だったっけ?
とならんように意味のある変数(名前)で置く。
18 列じゃなくて 19 列だったときも ndata の値を変えるだけだ。
4612
2012/08/29(水) 23:48:03.00 電車で帰宅してる間に携帯で見てたのですが、規制がかかっているので我慢できずに
ネカフェから書き込みます。
>>44
勝手に解決させないでください。あと僕になりすまさないでください。
初心者にしてはずいぶんとわかっている余裕感がうかがえますよ。
なんですか、この子供のような文章は?
>プログラミング自体が初めてなので右も左もわからない状態だったのですが
integer, parameter :: ncolumn = 18, ndata = 400, gomi = 6
^^^^^^^^^
などとしておくべきでしょうか?
>>36
エラーの意味がやっと分かりました。
関数や変数に使えない文字を、クォートの外に書いてしまうと発生するエラーなんですね。
シンタックスエラーと似ていると思いました。
特に全角空白は識別しづらいので気を付けるよう留意します。
うそですよね、少なくとも初心者にはこんなこと言えませんよ。書き込みの時間帯も僕の書き込めない時間ですし。
「あと金輪際この掲示板にこない」と随分と礼儀知らずな事をおっしゃっていますが、>>44さんが
金輪際このスレに来ないってことですよね?
僕は初心者だし、これからもfortranでつまずいたらこちらで伺うつもりなので勘弁してください。
とりあえず、すべてのファイルで計算実行して違う値が出たので、グラフを手書き
で作成して師に明日持っていこうと思います。確認してもらったらまた報告します。
本日はどうもありがとうございました。
スレ嵐はやめてください、迷惑です。44さん、時間がないのであなたとも言い争っている暇はないですが、迷惑行為だけは
よそのvisual basicの方にでもいってやってきてください。
僕が書き込めるのは、17〜21時,それから帰宅の間は書き込めないので23時以降になります。
ネカフェから書き込みます。
>>44
勝手に解決させないでください。あと僕になりすまさないでください。
初心者にしてはずいぶんとわかっている余裕感がうかがえますよ。
なんですか、この子供のような文章は?
>プログラミング自体が初めてなので右も左もわからない状態だったのですが
integer, parameter :: ncolumn = 18, ndata = 400, gomi = 6
^^^^^^^^^
などとしておくべきでしょうか?
>>36
エラーの意味がやっと分かりました。
関数や変数に使えない文字を、クォートの外に書いてしまうと発生するエラーなんですね。
シンタックスエラーと似ていると思いました。
特に全角空白は識別しづらいので気を付けるよう留意します。
うそですよね、少なくとも初心者にはこんなこと言えませんよ。書き込みの時間帯も僕の書き込めない時間ですし。
「あと金輪際この掲示板にこない」と随分と礼儀知らずな事をおっしゃっていますが、>>44さんが
金輪際このスレに来ないってことですよね?
僕は初心者だし、これからもfortranでつまずいたらこちらで伺うつもりなので勘弁してください。
とりあえず、すべてのファイルで計算実行して違う値が出たので、グラフを手書き
で作成して師に明日持っていこうと思います。確認してもらったらまた報告します。
本日はどうもありがとうございました。
スレ嵐はやめてください、迷惑です。44さん、時間がないのであなたとも言い争っている暇はないですが、迷惑行為だけは
よそのvisual basicの方にでもいってやってきてください。
僕が書き込めるのは、17〜21時,それから帰宅の間は書き込めないので23時以降になります。
2012/08/30(木) 01:04:47.20
我々がこの「師」とやらと話し合った方が早いな
2012/08/30(木) 01:26:24.03
> よそのvisual basicの方にでもいってやってきてください。
失礼しちゃうわw
失礼しちゃうわw
2012/08/30(木) 01:30:42.54
2012/08/30(木) 18:36:51.49
>>44
>parameterというのはC言語でいうconstのような、
>変数として宣言はするが変更はできないものと捉えて問題ないでしょうか?
間違っとる。parameterはread onlyのprotecrted変数とは違う。
parameterはコンパイル時に確定している値で宣言のサイズにも使える。
実行時にならないと確定しない変数とは違う。
>integer, parameter :: ncolumn = 18, ndata = 400, gomi = 6
> ^^^^^^^^^
>などとしておくべきでしょうか?
考え方は正しいが、ngomiのように先頭文字をi-nの間で始めるのが、
Gentlemanのたしなみ。さらに常数なので、i,j,kを避けるのが育ちの良さ。
>エラーの意味がやっと分かりました。
>関数や変数に使えない文字を、クォートの外に書いてしまうと発生するエラーなんですね。
違う。関数や変数に使えなくても普通にシンタックスエラーが出る記号文字もある。
全角文字は、二つの1バイト文字に解釈されて、そもそもFortran規格で
許されない文字に対応してしまうことがある。
またクォート以外にもコメントでは許されている。
>parameterというのはC言語でいうconstのような、
>変数として宣言はするが変更はできないものと捉えて問題ないでしょうか?
間違っとる。parameterはread onlyのprotecrted変数とは違う。
parameterはコンパイル時に確定している値で宣言のサイズにも使える。
実行時にならないと確定しない変数とは違う。
>integer, parameter :: ncolumn = 18, ndata = 400, gomi = 6
> ^^^^^^^^^
>などとしておくべきでしょうか?
考え方は正しいが、ngomiのように先頭文字をi-nの間で始めるのが、
Gentlemanのたしなみ。さらに常数なので、i,j,kを避けるのが育ちの良さ。
>エラーの意味がやっと分かりました。
>関数や変数に使えない文字を、クォートの外に書いてしまうと発生するエラーなんですね。
違う。関数や変数に使えなくても普通にシンタックスエラーが出る記号文字もある。
全角文字は、二つの1バイト文字に解釈されて、そもそもFortran規格で
許されない文字に対応してしまうことがある。
またクォート以外にもコメントでは許されている。
5212
2012/08/30(木) 19:24:39.72 お世話になります。
今日、師に計算結果をプロットしたグラフ用紙とそのプログラムを見せに行ったのですが、
確かに計算結果は正しい方向に向かっているが、ちょっと違うと言われました。
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) ) ←ここが師は不明だと言っていました。
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
プログラムを確認してもらったところ、
上記より上に関しては正しいが、上記の方法はわしは知らん、もし間違っているなら
ここだろうとのことでした。
また、iを整数にしないと計算結果は正しく出ない場合があるから直してと言われました。
(i * 50.0 - 25.0)←この部分なんですが、指数表示のデータがExcelデータx,yの1列目に
すでに表示されているので、Excelデータの1列目を3列全部読み込んでいるので
1,3列読み込んで、対応した値同士で計算させた方が良いというアドバイスを受けました。
下記にエクセルデータの全体像を記載します。
今日、師に計算結果をプロットしたグラフ用紙とそのプログラムを見せに行ったのですが、
確かに計算結果は正しい方向に向かっているが、ちょっと違うと言われました。
do i = 1, ndata
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
end do
do i = 1, ncolumn
sx(i) = sum( tx * a(i, :) ) ←ここが師は不明だと言っていました。
sy(i) = sum( ty * a(i, :) )
end do
s = sx / sy
プログラムを確認してもらったところ、
上記より上に関しては正しいが、上記の方法はわしは知らん、もし間違っているなら
ここだろうとのことでした。
また、iを整数にしないと計算結果は正しく出ない場合があるから直してと言われました。
(i * 50.0 - 25.0)←この部分なんですが、指数表示のデータがExcelデータx,yの1列目に
すでに表示されているので、Excelデータの1列目を3列全部読み込んでいるので
1,3列読み込んで、対応した値同士で計算させた方が良いというアドバイスを受けました。
下記にエクセルデータの全体像を記載します。
5312
2012/08/30(木) 19:25:33.04 エクセルデータx
1列目 2列目 3列目
2.50E+01 5.31E-01 2.75E-01
5.00E+01 2.27E-01 4.22E-02
↓ ↓ ↓
(x1 x2 x3)
(1〜400個まで存在します。)
-------------------------------------------
エクセルデータy
1列目 2列目 3列目
2.50E+01 5.04E-01 2.70E-01
5.00E+01 2.08E-01 4.10E-02
↓ ↓ ↓
(y1 y2 y3)
(こちらも1〜400個まで存在します。)
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
ここを下記のように修正すれば良いでしょうか?
tx(i) = x(1, i)* x(3, i)
ty(i) = x(1, i)* y(3, i)
1列目 2列目 3列目
2.50E+01 5.31E-01 2.75E-01
5.00E+01 2.27E-01 4.22E-02
↓ ↓ ↓
(x1 x2 x3)
(1〜400個まで存在します。)
-------------------------------------------
エクセルデータy
1列目 2列目 3列目
2.50E+01 5.04E-01 2.70E-01
5.00E+01 2.08E-01 4.10E-02
↓ ↓ ↓
(y1 y2 y3)
(こちらも1〜400個まで存在します。)
tx(i) = (i * 50.0 - 25.0) * x(3, i)
ty(i) = (i * 50.0 - 25.0) * y(3, i)
ここを下記のように修正すれば良いでしょうか?
tx(i) = x(1, i)* x(3, i)
ty(i) = x(1, i)* y(3, i)
2012/08/30(木) 20:25:51.02
修正すれば良いでしょうかじゃなくてまずはやってみろよ
前向きな姿勢は結構だけど結局は質問するばかり、
理解する力が著しく欠如しているのではないか
前向きな姿勢は結構だけど結局は質問するばかり、
理解する力が著しく欠如しているのではないか
5512
2012/08/30(木) 20:56:06.80 報告します。
先ほど、ビルドに成功して同じファイルを読み込んだのですが、微妙に値がズレてきました!
もう一回明日師に確認してもらいます。
result= 1.035215 1.035760 1.036275 1.036669
1.036880 1.036755
result= 1.035272 1.036202 1.037060 1.037667
1.037912 1.037520
先ほど、ビルドに成功して同じファイルを読み込んだのですが、微妙に値がズレてきました!
もう一回明日師に確認してもらいます。
result= 1.035215 1.035760 1.036275 1.036669
1.036880 1.036755
result= 1.035272 1.036202 1.037060 1.037667
1.037912 1.037520
2012/08/31(金) 11:37:20.94
tx(i) = x(1, i)* x(3, i)
ty(i) = x(1, i)* y(3, i)
↑
同じ数字が入っているはずだが、y(1、i)にした方がいいかな。
あと、
>エクセルデータy
>1列目 2列目 3列目
>2.50E+01 5.04E-01 2.70E-01
>5.00E+01 2.08E-01 4.10E-02
この数字が本当だとすると、 1カラム目は(i * 50.0 - 25.0) になっていないw
ty(i) = x(1, i)* y(3, i)
↑
同じ数字が入っているはずだが、y(1、i)にした方がいいかな。
あと、
>エクセルデータy
>1列目 2列目 3列目
>2.50E+01 5.04E-01 2.70E-01
>5.00E+01 2.08E-01 4.10E-02
この数字が本当だとすると、 1カラム目は(i * 50.0 - 25.0) になっていないw
5712
2012/08/31(金) 19:58:38.13 >>56
アドバイス有難うございます。
tx(i) = x(1, i)* x(3, i)
ty(i) = y(1, i)* y(3, i)
これに直してコンパイルしたところ、うまく結果が算出され、
師に確認してもらったところ、まぁいいんじゃないという
評価のグラフが書けました。
みなさんのおかげでここまで
来ることができ、大変感謝しています。
まだ別のデータが後200ほど残っているので、頑張ってタイピングしようと
思います。またやっていて困った時は相談にのってやってください。
ありがとうございました。
アドバイス有難うございます。
tx(i) = x(1, i)* x(3, i)
ty(i) = y(1, i)* y(3, i)
これに直してコンパイルしたところ、うまく結果が算出され、
師に確認してもらったところ、まぁいいんじゃないという
評価のグラフが書けました。
みなさんのおかげでここまで
来ることができ、大変感謝しています。
まだ別のデータが後200ほど残っているので、頑張ってタイピングしようと
思います。またやっていて困った時は相談にのってやってください。
ありがとうございました。
2012/09/05(水) 15:32:34.90
コンパイラを Intel visual fortran から PGI visual fortran に変更したところ、
ビルド時に
Unable to open MODULE file ifport.mod
でエラーになります。
ifport では access と DELFILESQQ を使用しているのですが、
PGIのコンパイラで使用できる同種のライブラリはありますでしょうか。
ビルド時に
Unable to open MODULE file ifport.mod
でエラーになります。
ifport では access と DELFILESQQ を使用しているのですが、
PGIのコンパイラで使用できる同種のライブラリはありますでしょうか。
2012/09/05(水) 22:38:16.39
2012/09/07(金) 20:00:53.25
それで>>58は解決したのかよ。
PGIのCUDA対応に興味あるから、色々反応するの待ってんだけど。
PGIのCUDA対応に興味あるから、色々反応するの待ってんだけど。
2012/09/15(土) 18:54:35.08
急に質問してしまい申し訳ありません。
先月からfortranについて勉強し始めました。
ですが行き詰ってしまいました。
このような記述でディスプレイに計算結果を表示したのですが・・・
何故か表示される結果がCとDが2つづつ表示されるようになっています。
記述
WRITE(6,50)A,B
WRITE(6,60)C,D
50 FORMAT('|A|=',F16.12,' |B|=',F16.12)
60 FORMAT('C =',F16.12,' D =',F16.12)
結果
|A|= 0.999681111435 |B|= 0.025044224242
C = 0.025079839523 D = 0.000000000000
C = -0.000632444304 D = 0.000000000000
おそらくwrite文のフォーマットの記述がおかしいと思うのですが
どこがおかしいのか分からず質問させていただきました。
おかしな点を指摘していただけると幸いです。
先月からfortranについて勉強し始めました。
ですが行き詰ってしまいました。
このような記述でディスプレイに計算結果を表示したのですが・・・
何故か表示される結果がCとDが2つづつ表示されるようになっています。
記述
WRITE(6,50)A,B
WRITE(6,60)C,D
50 FORMAT('|A|=',F16.12,' |B|=',F16.12)
60 FORMAT('C =',F16.12,' D =',F16.12)
結果
|A|= 0.999681111435 |B|= 0.025044224242
C = 0.025079839523 D = 0.000000000000
C = -0.000632444304 D = 0.000000000000
おそらくwrite文のフォーマットの記述がおかしいと思うのですが
どこがおかしいのか分からず質問させていただきました。
おかしな点を指摘していただけると幸いです。
2012/09/15(土) 19:24:02.52
たぶんおかしくない。それより WRITE(6,60) でソースコードを検索してみるべき。
2012/09/15(土) 19:31:56.26
↑すまん適当言った。C と D は複素数か配列じゃないだろうか。
6562
2012/09/16(日) 17:07:32.38 >>64
ありがとうございます!無事解が一つのみ表示されました。
ご指摘の通りCとDが複素数で宣言されていました・・・・
それにすら気づかず、write文のせいにしていたのが恥ずかしいです。
大変助かりました!
ありがとうございます!無事解が一つのみ表示されました。
ご指摘の通りCとDが複素数で宣言されていました・・・・
それにすら気づかず、write文のせいにしていたのが恥ずかしいです。
大変助かりました!
2012/09/18(火) 19:39:09.67
すみません、質問です。
求めたい値=
(a*固定した数値1*メモ帳データx+b*固定した数値2*メモ帳データy+(1-a-b)*固定した数値1)/固定した数値1
a=1-exp(-11.88×s)
b=exp(-11.88×s)×1-exp(-11.88×t)
固定した数値1,固定した数値2,s,tはその都度自分の方で入力しようと思います。
メモ帳のデータx,yはどれも以下のような形式になっています。
1.010629 1.010828 1.011074 1.011356 1.012
1.010916 1.012412 1.014304 1.016474 1.012
1.011208 1.013878 1.017139 1.02069 1.012
1.011433 1.014934 1.019081 1.022747 1.012
1.011525 1.015284 1.019623 1.024372 1.012
1.011341 1.014313 1.017726 1.021465 1.012
ここから何行目の何列目を指定して一つの数値を計算式に代入して「求めたい値」を算出したいのですが
可能でしょうか?
6766
2012/09/18(火) 19:44:05.52 すみません、追記です。
メモ帳データの数値はすべて使用して計算結果として算出したいので、
一枚のメモ帳に結果がすべて表示できる方法があったらお願いします。
メモ帳データの数値はすべて使用して計算結果として算出したいので、
一枚のメモ帳に結果がすべて表示できる方法があったらお願いします。
2012/09/18(火) 19:50:35.33
この辺を見ておくといいよ
http://www.nag-j.co.jp/fortran/index.html
http://www.nag-j.co.jp/fortran/index.html
2012/09/19(水) 03:23:00.74
とりあえずファイルのデータを全部2次元配列に放り込んで
結果も2次元配列の内容を全部吐き出す感じでいいだろ。
x, y に任意の組み合わせを取るなら単純じゃなくなるが。
結果も2次元配列の内容を全部吐き出す感じでいいだろ。
x, y に任意の組み合わせを取るなら単純じゃなくなるが。
70デフォルトの名無しさん
2012/09/21(金) 20:29:19.20 プログラムの歴史を学ぼうと思って、FORTRANからやってみようと思いました。
FOTRANのバージョンとか歴史はある程度理解したんですが、
WikipediaのFORTRANの歴史に載っています所謂IBM 704用のFORTRANの最初期の形なんてのは今のPCじゃ動かないんでしょうか?
標準入出力の関係もまだなかったみたいですし、多分そもそも現代のコンピュータ上では実装できないんでしょうけど。
FORTRANの歴史
http://ja.wikipedia.org/wiki/FORTRAN#FORTRAN.E3.81.AE.E6.AD.B4.E5.8F.B2
まぁ、今は諦めまして、Linuxにgfortranを入れたとこです。
Wikipediaの項目を見てたら下記リンクにあるのが昔の正規のドキュメントかなと思っているのですが、
さすがにコンパイラはIBMのものでしょうし、見ることができないですよね。出来たら初期の高級言語のコンパイラのソースも見てみたいんですけど。まぁ、見たってきっとわかりませんがね。アセンブラなんでしょうか?機械語?
Index of /pdf/ibm/704
http://www.bitsavers.org/pdf/ibm/704/
それで、これが一番最初のFORTRANの正式なドキュメントかな?と思っているのですが、当たりですかね?
http://www.bitsavers.org/pdf/ibm/704/FORTRAN_paper_1957.pdf
FOTRANのバージョンとか歴史はある程度理解したんですが、
WikipediaのFORTRANの歴史に載っています所謂IBM 704用のFORTRANの最初期の形なんてのは今のPCじゃ動かないんでしょうか?
標準入出力の関係もまだなかったみたいですし、多分そもそも現代のコンピュータ上では実装できないんでしょうけど。
FORTRANの歴史
http://ja.wikipedia.org/wiki/FORTRAN#FORTRAN.E3.81.AE.E6.AD.B4.E5.8F.B2
まぁ、今は諦めまして、Linuxにgfortranを入れたとこです。
Wikipediaの項目を見てたら下記リンクにあるのが昔の正規のドキュメントかなと思っているのですが、
さすがにコンパイラはIBMのものでしょうし、見ることができないですよね。出来たら初期の高級言語のコンパイラのソースも見てみたいんですけど。まぁ、見たってきっとわかりませんがね。アセンブラなんでしょうか?機械語?
Index of /pdf/ibm/704
http://www.bitsavers.org/pdf/ibm/704/
それで、これが一番最初のFORTRANの正式なドキュメントかな?と思っているのですが、当たりですかね?
http://www.bitsavers.org/pdf/ibm/704/FORTRAN_paper_1957.pdf
2012/09/22(土) 12:09:47.77
もともとが業務用だからね。
2012/09/24(月) 18:53:46.75
>>70
FORTRANの歴史を知りたいなら、Comuter History Museumをチェックしなければ
いかんがねー。
http://www.computerhistory.org/collections/fortranarchive/
たしか、バッカスのFORTRANコンパイラを作りたいと上申書みたいなメモから
あった気がする。マニュアルの類も文法書の他運用書などたくさんある。
704のエミュはなかったが、後のIBM360やIBM1130のエミュは存在している。
その上でFORTRANIVは動いている。FORTRANIIも動いていたかもしれない。
この時代のソフトウェアは著作権の概念がなかったのかパブリックドメインに
なっているよう。時代の進んだIBM370とかFORTRAN77のFORT VSとかのエミュはない。
昔のFORTRANのマシンコードなんかはパンチカードだか、ダンプリストだかが
うpされていた気がするので機械語レベルでは転がってる気がした。
FORTRANの歴史を知りたいなら、Comuter History Museumをチェックしなければ
いかんがねー。
http://www.computerhistory.org/collections/fortranarchive/
たしか、バッカスのFORTRANコンパイラを作りたいと上申書みたいなメモから
あった気がする。マニュアルの類も文法書の他運用書などたくさんある。
704のエミュはなかったが、後のIBM360やIBM1130のエミュは存在している。
その上でFORTRANIVは動いている。FORTRANIIも動いていたかもしれない。
この時代のソフトウェアは著作権の概念がなかったのかパブリックドメインに
なっているよう。時代の進んだIBM370とかFORTRAN77のFORT VSとかのエミュはない。
昔のFORTRANのマシンコードなんかはパンチカードだか、ダンプリストだかが
うpされていた気がするので機械語レベルでは転がってる気がした。
2012/09/24(月) 18:57:59.58
エミュとかはComputerHistoryMuseumではなく、民間のおっさん達がやってる。
ググれば出てくる。
ググれば出てくる。
2012/09/24(月) 19:22:07.62
>もともとが業務用だからね。
?
もしかして“適用業務”のことかw
?
もしかして“適用業務”のことかw
7666
2012/09/26(水) 19:24:13.20 結局、自分でプログラム組めるほど頭良くないので電卓で手打ち
でやってたんですが、エクセルでやることにしました。
フォートランは、エクセルと比べどういう計算処理をする場合に
特化しているんでしょうか?計算するんだったらfortranが一番
おすすめだそうなのでやってみたんですがチンプンカンプンです。
(>_<)
でやってたんですが、エクセルでやることにしました。
フォートランは、エクセルと比べどういう計算処理をする場合に
特化しているんでしょうか?計算するんだったらfortranが一番
おすすめだそうなのでやってみたんですがチンプンカンプンです。
(>_<)
2012/09/26(水) 21:49:19.25
Excel でできる程度の計算なら Excel でやれば良し。
Excel とか無い時代の産物なので、伝統か信仰によって勧められる事が多い。
Excel とか無い時代の産物なので、伝統か信仰によって勧められる事が多い。
2012/10/16(火) 20:22:35.55
質問があります
FORTRANを使って連番ファイルを読み込ませるためのgnuplotのバッチファイルを書きだそうとしているのですが、writeでどうやって書き出すのかわかりません
どういうことかというと、たとえば
plot "output[i].txt" u1:2
をi=1,10でwriteで出力するとき
write(filenumber,*) "plot "output[" i "].txt u 1:2"
となるためwriteで文字を出力するために使う”と、出力する文字の一つとして扱いたい”が干渉してしまうんです。
”を文字として出力するためにはどうしたらよいでしょうか?
どなたかわかる方がいたら教えていただけませんか?
FORTRANを使って連番ファイルを読み込ませるためのgnuplotのバッチファイルを書きだそうとしているのですが、writeでどうやって書き出すのかわかりません
どういうことかというと、たとえば
plot "output[i].txt" u1:2
をi=1,10でwriteで出力するとき
write(filenumber,*) "plot "output[" i "].txt u 1:2"
となるためwriteで文字を出力するために使う”と、出力する文字の一つとして扱いたい”が干渉してしまうんです。
”を文字として出力するためにはどうしたらよいでしょうか?
どなたかわかる方がいたら教えていただけませんか?
79デフォルトの名無しさん
2012/10/16(火) 21:27:08.312012/10/16(火) 22:41:51.19
言ってる意味わからんw
do i = 1, 10
write(filenumber, '(a, i2,2, a)') 'plot "output[', i, '].txt" u 1 :2'
end do
これでどうだ?番号は 01,02,... ,10 となるが。
do i = 1, 10
write(filenumber, '(a, i2,2, a)') 'plot "output[', i, '].txt" u 1 :2'
end do
これでどうだ?番号は 01,02,... ,10 となるが。
2012/10/16(火) 22:54:18.30
すまんこ。
>'(a, i2,2, a)')
i2.2 ↑ ピリオドな
ついでに。。。0が余計ならformatを動的に生成すればおk
integer :: i, klen, filenumber = 9
character (len = 80) :: fmt
do i = 1, 10
klen = int(log10(real(i))) + 1
write(fmt, '(a, i1, a)') '(a, i', klen, ', a)'
write(filenumber, fmt) 'plot "output[', i, '].txt" u 1 :2'
end do
>'(a, i2,2, a)')
i2.2 ↑ ピリオドな
ついでに。。。0が余計ならformatを動的に生成すればおk
integer :: i, klen, filenumber = 9
character (len = 80) :: fmt
do i = 1, 10
klen = int(log10(real(i))) + 1
write(fmt, '(a, i1, a)') '(a, i', klen, ', a)'
write(filenumber, fmt) 'plot "output[', i, '].txt" u 1 :2'
end do
2012/10/16(火) 23:03:43.98
'(a, i0, a)'
でいいんじゃないの?
でいいんじゃないの?
2012/10/16(火) 23:35:22.01
2012/10/17(水) 00:21:39.81
>>78
思いつくものを挙げてみると...
write(filenumber, '(a, i0, a)') 'plot "output[', i, '].txt" u 1:2'
write(filenumber, '(a, i0, a)') "plot ""output[", i, "].txt"" u 1:2"
write(filenumber, '(a, i0, a)') "plot " // char(34) // "output[", i, "].txt" // char(34) // " u 1:2"
write(filenumber, '(a, a1, a, i0, a, a1, a)') "plot ", 34, "output[", i, "].txt", 34, " u 1:2"
write(filenumber, '(13hplot "output[, i0, 12h].txt" u 1:2)') i
思いつくものを挙げてみると...
write(filenumber, '(a, i0, a)') 'plot "output[', i, '].txt" u 1:2'
write(filenumber, '(a, i0, a)') "plot ""output[", i, "].txt"" u 1:2"
write(filenumber, '(a, i0, a)') "plot " // char(34) // "output[", i, "].txt" // char(34) // " u 1:2"
write(filenumber, '(a, a1, a, i0, a, a1, a)') "plot ", 34, "output[", i, "].txt", 34, " u 1:2"
write(filenumber, '(13hplot "output[, i0, 12h].txt" u 1:2)') i
2012/11/18(日) 12:45:02.25
バッチファイルをそのまま生成させるって頭いいな
86デフォルトの名無しさん
2012/11/23(金) 13:59:34.03 質問です。
配列を引数にする関数を定義したいのですが、
やり方がよくわかりません。
function FD(w)
implicit none
integer :: i
integer,parameter :: n = 10
real(8) :: w(0:n),FD(0:n)
do i = 0, n
FD(i) = exp( - w(i))
enddo
end function FD
が関数で、これをメインプログラムで使いたいのですが、
x = FD(w)
のような省略形だとちゃんと計算できるんですけど、
do i = 0, m
x(i) = FD(w(i))
enddo
みたいに配列を明示しようとすると
配列の形状が準拠していません。
とエラーが出ます。
()を省略しないで書く方法はないですか?
配列を引数にする関数を定義したいのですが、
やり方がよくわかりません。
function FD(w)
implicit none
integer :: i
integer,parameter :: n = 10
real(8) :: w(0:n),FD(0:n)
do i = 0, n
FD(i) = exp( - w(i))
enddo
end function FD
が関数で、これをメインプログラムで使いたいのですが、
x = FD(w)
のような省略形だとちゃんと計算できるんですけど、
do i = 0, m
x(i) = FD(w(i))
enddo
みたいに配列を明示しようとすると
配列の形状が準拠していません。
とエラーが出ます。
()を省略しないで書く方法はないですか?
2012/11/23(金) 16:37:12.25
>>86
w(i)は配列ではなく配列の要素(1個の変数)ですので
当然エラーとなります。
do i = 0, m
x(i) = FD(w(i))
enddo
の3行を、
x(:) = FD(w(:))
にすれば()付きの書き方にはなります。
w(i)は配列ではなく配列の要素(1個の変数)ですので
当然エラーとなります。
do i = 0, m
x(i) = FD(w(i))
enddo
の3行を、
x(:) = FD(w(:))
にすれば()付きの書き方にはなります。
2012/11/23(金) 18:30:14.20
>>87
回答ありがとうございます。
まだ、違いがよくわからないのですが
例えば、
do i = 0, m
x(i) = FD(w(i)) + y(i+1)
enddo
とか
do i = 0, m/2
x(i) = FD(w(i))
enddo
do i = m/2, m
y(i) = FD(w(i))
enddo
のようなことは関数の場合、出来ないのですか?
(:)だと出来ることが制限されてしまうような気がするんです。
回答ありがとうございます。
まだ、違いがよくわからないのですが
例えば、
do i = 0, m
x(i) = FD(w(i)) + y(i+1)
enddo
とか
do i = 0, m/2
x(i) = FD(w(i))
enddo
do i = m/2, m
y(i) = FD(w(i))
enddo
のようなことは関数の場合、出来ないのですか?
(:)だと出来ることが制限されてしまうような気がするんです。
2012/11/23(金) 19:46:12.45
>88
x(0:m) = FD(w(0:m)) + y(1:m+1)
とか
x(0:m/2) = FD(w(0:m/2))
y(m/2:m) = FD(w(m/2:m))
となるかな
x(0:m) = FD(w(0:m)) + y(1:m+1)
とか
x(0:m/2) = FD(w(0:m/2))
y(m/2:m) = FD(w(m/2:m))
となるかな
2012/11/24(土) 14:54:58.79
それか関数の方を 配列じゃなくて 数値を引数とするように変更するかだな
2012/11/26(月) 19:24:40.40
fortran95 以降になるが、ELEMENTAL属性を使えばできる。
これはスカラーに対して定義しておくと、配列も受け付けるというもの。
ただし副作用のない PURE な副プログラムな必要がある。
elemental pure real(8) function FD(w)
implicit none
integer :: i
real(8), intent(in) :: w
FD = exp( - w )
end function FD
これでメインルーチン側で
x = FD( w )
と呼んでも
do i = 1, 10
x(i) = FD( w(i) )
end do
と呼んでもよろしい。
PURE が何かはマニュアルを見るか、鋼鉄天使くるみPUREを見る事。
シスタープリンセスREPUREでもいい。
これはスカラーに対して定義しておくと、配列も受け付けるというもの。
ただし副作用のない PURE な副プログラムな必要がある。
elemental pure real(8) function FD(w)
implicit none
integer :: i
real(8), intent(in) :: w
FD = exp( - w )
end function FD
これでメインルーチン側で
x = FD( w )
と呼んでも
do i = 1, 10
x(i) = FD( w(i) )
end do
と呼んでもよろしい。
PURE が何かはマニュアルを見るか、鋼鉄天使くるみPUREを見る事。
シスタープリンセスREPUREでもいい。
2012/12/01(土) 20:48:26.42
ELEMENTAL属性ってのは初めて聞いた 勉強になります
兄ぃありがとう
兄ぃありがとう
2012/12/02(日) 15:08:21.56
(ELEMENTALはPUREでもあるから強調しなくてもいいんだけどな…
94デフォルトの名無しさん
2012/12/02(日) 16:57:51.30 x(:)=fd(w(:))
x=fd(w)
って同じ?
: つけとかないと配列であることを
忘れちゃうので
つける習慣にしているけど。
x=fd(w)
って同じ?
: つけとかないと配列であることを
忘れちゃうので
つける習慣にしているけど。
2012/12/02(日) 17:13:25.97
同じだけど、括弧をつけて配列であることを明示したほうがいいね
2012/12/03(月) 19:08:16.44
>>93
どっこい、それがF2008でELEMENTALだがI/Oを許すという風になったので、
ELEMENTALだからと言ってPUREとは言えなくなったのだよ。
妹たちの未来を考えて、ここはPURE。
>>95
これもF2003からは同じではなくなったのだよ。
RAEL,ALLOCATABLE :: a(:)
REAL :: x(100)
a = x
F2003では代入時に割り付け配列は、(再)割り付けされる。
a = x(1:10)
とすると、a はサイズ100から10に再割り付けされる。
a(:) = x(1:10)
の時は、元のサイズ100のまま代入される。
抽象度の高い記法の方が良いのだから、括弧をつけない方が正しいと思う。
F77からの移行期には、括弧を書いて置く方がわかり易かったのは理解できるが
数学だって行列を記号1個で書いて間違わないのだからだいじょぶDEATH
どっこい、それがF2008でELEMENTALだがI/Oを許すという風になったので、
ELEMENTALだからと言ってPUREとは言えなくなったのだよ。
妹たちの未来を考えて、ここはPURE。
>>95
これもF2003からは同じではなくなったのだよ。
RAEL,ALLOCATABLE :: a(:)
REAL :: x(100)
a = x
F2003では代入時に割り付け配列は、(再)割り付けされる。
a = x(1:10)
とすると、a はサイズ100から10に再割り付けされる。
a(:) = x(1:10)
の時は、元のサイズ100のまま代入される。
抽象度の高い記法の方が良いのだから、括弧をつけない方が正しいと思う。
F77からの移行期には、括弧を書いて置く方がわかり易かったのは理解できるが
数学だって行列を記号1個で書いて間違わないのだからだいじょぶDEATH
2012/12/03(月) 23:06:44.99
(キリッ
2012/12/04(火) 13:45:46.84
>>96
2003使ったことないけど、うーんと、
要は allocatable な変数は
allocate() 使わなくても、
: 無しで左辺において、
固定サイズ(か既に大きさの確定した配列)が右辺に来る代入式で
随時 deallocate して再び allocate した事にする、
ということなのかな?
・・・・すくなくともワシには危険な香りがするw
2003使ったことないけど、うーんと、
要は allocatable な変数は
allocate() 使わなくても、
: 無しで左辺において、
固定サイズ(か既に大きさの確定した配列)が右辺に来る代入式で
随時 deallocate して再び allocate した事にする、
ということなのかな?
・・・・すくなくともワシには危険な香りがするw
2012/12/04(火) 13:48:18.15
ふとおもったけど、文字列で
mojiretsu='abcdefg'
write(*,*) mojiretu(2:4)
で bcd が表示できる例のように
文字列の番地管理の表記法って77からある(とおもうw)けど
これってかなり時代先取りだよね。偶然なのか
規格策定の時にすでにベクトル表現の思考が始まっていたのか
しらないけど。
mojiretsu='abcdefg'
write(*,*) mojiretu(2:4)
で bcd が表示できる例のように
文字列の番地管理の表記法って77からある(とおもうw)けど
これってかなり時代先取りだよね。偶然なのか
規格策定の時にすでにベクトル表現の思考が始まっていたのか
しらないけど。
100デフォルトの名無しさん
2012/12/04(火) 17:50:34.81101デフォルトの名無しさん
2012/12/05(水) 13:45:40.15 へえ、しらんかった。
でも、どういう場面でつかうんだろう?
i=2
write(*,*) 'shit'(i:4)
とか、・・・英語複数形 s をだしたり隠したり、かな?
でも正直なところ、なくても困らんな。
でも、どういう場面でつかうんだろう?
i=2
write(*,*) 'shit'(i:4)
とか、・・・英語複数形 s をだしたり隠したり、かな?
でも正直なところ、なくても困らんな。
10288
2012/12/05(水) 18:22:09.77 88です。みなさんありがとうございます。
お礼が遅くなってすみませんでした。
まだ難しくてよくわからないので、素直に括弧つけます。
お礼が遅くなってすみませんでした。
まだ難しくてよくわからないので、素直に括弧つけます。
103デフォルトの名無しさん
2012/12/06(木) 14:46:49.96 >>100 最近の言語は動的なんちゃらで、みんなそんな感じだから流行り
だろうね・・・でも量が多いと遅くなりそう。
そういう動的なことは Interactive な言語処理系でやればいいことで、
やることの量がだいたい前もって決まっていることを
なるべく早くたくさんがーっと処理したい、というのが Fortran 人wなので
・・・でもこのままでは老害って言われるし・・・うーん、むつかしいね。
だろうね・・・でも量が多いと遅くなりそう。
そういう動的なことは Interactive な言語処理系でやればいいことで、
やることの量がだいたい前もって決まっていることを
なるべく早くたくさんがーっと処理したい、というのが Fortran 人wなので
・・・でもこのままでは老害って言われるし・・・うーん、むつかしいね。
104デフォルトの名無しさん
2012/12/06(木) 15:58:43.84 ヤングの諸君を引き寄せるには、ある程度流行りの機能を入れないとまずいんだろう。
それに動的自動割り付けは、FUNCTIONで不定個数を返せるようになったので、
それを受け取るには無いと困るというのがあると思う。
REAL :: x(10)
REAL, ALLOCATABLE :: y(:)
CALL RANDOM_NUMBER(x)
! f90
ALLOCATE( y( COUNT(x > 0.5) ) )
y = f(x, 0.5)
PRINT *, y
! f2003
y = f(x, 0.5)
PRINT *, y
CONTAINS
FUNCTION f(x, a)
REAL, ALLOCATABLE :: f(:)
REAL, INTENT(IN) :: x(:), a
f = PACK(x, x > a)
END FUNCTION
END
この例はあらかじめ必要な配列の大きさが分かるが、計算してみないと
必要な配列の大きさが分からない場合は、大きめに取っておくか
二回計算する必要がある。
それに動的自動割り付けは、FUNCTIONで不定個数を返せるようになったので、
それを受け取るには無いと困るというのがあると思う。
REAL :: x(10)
REAL, ALLOCATABLE :: y(:)
CALL RANDOM_NUMBER(x)
! f90
ALLOCATE( y( COUNT(x > 0.5) ) )
y = f(x, 0.5)
PRINT *, y
! f2003
y = f(x, 0.5)
PRINT *, y
CONTAINS
FUNCTION f(x, a)
REAL, ALLOCATABLE :: f(:)
REAL, INTENT(IN) :: x(:), a
f = PACK(x, x > a)
END FUNCTION
END
この例はあらかじめ必要な配列の大きさが分かるが、計算してみないと
必要な配列の大きさが分からない場合は、大きめに取っておくか
二回計算する必要がある。
105デフォルトの名無しさん
2012/12/06(木) 17:15:11.18 可変長文字列も動的割り付けで可能になった。
program varchar
implicit none
character(len = :), allocatable :: text
text = 'automatic allocation'
print *, text
text = 'variable length text'
print *, text
stop
end program varchar
program varchar
implicit none
character(len = :), allocatable :: text
text = 'automatic allocation'
print *, text
text = 'variable length text'
print *, text
stop
end program varchar
106デフォルトの名無しさん
2012/12/06(木) 17:49:33.18 長さ同じだぞw
107デフォルトの名無しさん
2012/12/08(土) 17:47:52.98 モジュール内で定義したグローバル変数を
プログラム内で変更しないようにするにはどうしたらよいでしょうか?
(変更があったらエラーを吐くようにしたい)
parameter属性を付けるのが近いと思いますが、
そのグローバル変数はファイルからreadで読み込みます。
つまり、最初に一回だけファイルで読み込んで、
その後は変更せずに、各サブルーチンで参照できるようにしたいです。
プログラム内で変更しないようにするにはどうしたらよいでしょうか?
(変更があったらエラーを吐くようにしたい)
parameter属性を付けるのが近いと思いますが、
そのグローバル変数はファイルからreadで読み込みます。
つまり、最初に一回だけファイルで読み込んで、
その後は変更せずに、各サブルーチンで参照できるようにしたいです。
108デフォルトの名無しさん
2012/12/08(土) 23:34:47.37 >>107
ttp://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_4_3.html
ttp://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_4_3.html
109デフォルトの名無しさん
2012/12/10(月) 21:50:33.71 F2003でいいならprotected属性だな。
F90だったら、privateで隠匿して、値を使うところでは関数・サブルーチンで
値を取ってくるかな。
F90だったら、privateで隠匿して、値を使うところでは関数・サブルーチンで
値を取ってくるかな。
110デフォルトの名無しさん
2012/12/11(火) 12:57:04.37 protected つかわない、つかいたくない、つかえない
という時には他には intent(in) をあちこちに配置して
いちどどこかプログラム内で初期値設定した後は変えないようにする、って
手もあるけどこれは107さんの要望とはマッチしないなぁ。
protected がいちばん素直だとおもう。
という時には他には intent(in) をあちこちに配置して
いちどどこかプログラム内で初期値設定した後は変えないようにする、って
手もあるけどこれは107さんの要望とはマッチしないなぁ。
protected がいちばん素直だとおもう。
111デフォルトの名無しさん
2012/12/15(土) 21:23:37.92 もりあがってますね
112デフォルトの名無しさん
2012/12/16(日) 16:37:19.87 月に一個くらい質問というかお題投下があって
2週間くらいで20スレいく程度で
まったりと
2週間くらいで20スレいく程度で
まったりと
113デフォルトの名無しさん
2012/12/18(火) 04:20:26.48 f90から外部モジュールでf77を呼べますか? つまり固定形式で書かれたコードを外部モジュールで呼べるかってことなんですけど
114デフォルトの名無しさん
2012/12/18(火) 14:41:34.63 ん、コンパイル別々にしてリンクすればいいとおもうよん。
f77の継続行記号(6ケタ目の空白以外の任意文字)を継続前の行の最後の & に置き換える
だけで、原則f77はf90で解釈できるので、
そこだけいじって同じファイルに追加しちゃうという手もあるけどね。
f77の継続行記号(6ケタ目の空白以外の任意文字)を継続前の行の最後の & に置き換える
だけで、原則f77はf90で解釈できるので、
そこだけいじって同じファイルに追加しちゃうという手もあるけどね。
115デフォルトの名無しさん
2012/12/18(火) 14:41:50.10 呼べる。
module f77module
contains
.....
ここにサブルーチン、関数ならべる。
....
end module f77module
固定フォーマットの独立したファイルにして分割コンパイルすればよし。
module f77module
contains
.....
ここにサブルーチン、関数ならべる。
....
end module f77module
固定フォーマットの独立したファイルにして分割コンパイルすればよし。
116デフォルトの名無しさん
2012/12/19(水) 01:27:05.28 旧形式のコードて今でも普通に書かれてるの?
仕方なく再利用してるだけで、新しいコードは全部新しい文法で書くべき?
仕方なく再利用してるだけで、新しいコードは全部新しい文法で書くべき?
117デフォルトの名無しさん
2012/12/19(水) 13:23:10.08 > 旧形式のコードて今でも普通に書かれてるの?
わしゃバリバリ固定書式で書いている。
左7つ開けとかないとムズムズするのでw
> 新しいコードは全部新しい文法で書くべき?
書くべきだとおもう!
思うが・・・・
わしゃバリバリ固定書式で書いている。
左7つ開けとかないとムズムズするのでw
> 新しいコードは全部新しい文法で書くべき?
書くべきだとおもう!
思うが・・・・
118デフォルトの名無しさん
2012/12/19(水) 17:31:47.38 >>115
おおー、ありがとーございます。
おおー、ありがとーございます。
119デフォルトの名無しさん
2012/12/20(木) 00:16:24.69120デフォルトの名無しさん
2012/12/20(木) 00:56:53.25 新しい文法使ってもそれはそれで保守できるかという
自由形式として解釈できない固定形式の文法が継続行の扱いくらいかと
自由形式として解釈できない固定形式の文法が継続行の扱いくらいかと
121デフォルトの名無しさん
2012/12/20(木) 18:26:13.33 素直に固定形式のファイルと自由形式のファイルと分けた方が良いと思うズラ
f77時代は1個のファイルにまとめた方が、引数チェックや最適化のメリットが
あったが、f90以降は、MODULEとか使えば、分割コンパイルにそれほど害はないズラ
f77時代は1個のファイルにまとめた方が、引数チェックや最適化のメリットが
あったが、f90以降は、MODULEとか使えば、分割コンパイルにそれほど害はないズラ
122デフォルトの名無しさん
2012/12/21(金) 15:22:10.79 インテルだと
ifort -ipo
でファイルがバラバラでも最適処理してくれるよね。
ifort -ipo
でファイルがバラバラでも最適処理してくれるよね。
123デフォルトの名無しさん
2012/12/22(土) 20:57:03.97 コンパイラが偉い
124デフォルトの名無しさん
2012/12/23(日) 16:26:05.54125デフォルトの名無しさん
2012/12/25(火) 20:09:46.90 年内にインテルFortranの更新来ないのかな?二か月に一回の周期来てんだが。
block..end block を早く入れて欲しいわ。
たまに loop index を局所的に確保したい。頭部の宣言部が重くなりがち。
block..end block を早く入れて欲しいわ。
たまに loop index を局所的に確保したい。頭部の宣言部が重くなりがち。
126デフォルトの名無しさん
2013/01/04(金) 12:57:56.98 下記のようなループの外でopenしてループの中で書き足していくプログラムを書いているのですが,
ifortでコンパイルした場合,実行の途中でもファイルが更新されていくのですがpgiでコンパイルした場合はプログラム終了まではファイルが更新されず,
プログラム終了時に全部書き込まれます.pgiでコンパイルした場合でもプログラムの途中で適宜ファイルが更新されるようにできるのでしょうか
open(1000, file='data.dat')
do j = 1, N
write(1000, *), j
enddo
close(1000)
ifortでコンパイルした場合,実行の途中でもファイルが更新されていくのですがpgiでコンパイルした場合はプログラム終了まではファイルが更新されず,
プログラム終了時に全部書き込まれます.pgiでコンパイルした場合でもプログラムの途中で適宜ファイルが更新されるようにできるのでしょうか
open(1000, file='data.dat')
do j = 1, N
write(1000, *), j
enddo
close(1000)
127デフォルトの名無しさん
2013/01/04(金) 16:35:30.00 fortran2003のFLUSH命令を使え。
128デフォルトの名無しさん
2013/01/04(金) 17:18:02.62 >>127
うぉー!ありがとうございます
うぉー!ありがとうございます
129デフォルトの名無しさん
2013/01/09(水) 11:54:21.56 linuxでfortran 77のコンパイラってありますか?
gfortranというのを使うらしいのでそれをインストールして試したのですが知人に貰ったfortran 77のコードがコンパイルできませんでした
gfortranというのを使うらしいのでそれをインストールして試したのですが知人に貰ったfortran 77のコードがコンパイルできませんでした
130デフォルトの名無しさん
2013/01/09(水) 12:25:08.67 >>129
gfortranは77に対応していません。
フリーってことでおk?
fortran77対応のフリーのコンパイラはg77が有名かな。
linuxならintel fortranもnon commercial版になるけどフリーであったはず。
研究や企業での利用はできないから注意。
個人的にはfortran77をいつまでも使っていないで、
90に書き換えて、折角インストールしたgfortranを使った方が良いと思う。
書き換え方は拡張子を変えるのと、改行の&ぐらいでとりあえずは動くでしょ
gfortranは77に対応していません。
フリーってことでおk?
fortran77対応のフリーのコンパイラはg77が有名かな。
linuxならintel fortranもnon commercial版になるけどフリーであったはず。
研究や企業での利用はできないから注意。
個人的にはfortran77をいつまでも使っていないで、
90に書き換えて、折角インストールしたgfortranを使った方が良いと思う。
書き換え方は拡張子を変えるのと、改行の&ぐらいでとりあえずは動くでしょ
131デフォルトの名無しさん
2013/01/09(水) 12:36:06.11132デフォルトの名無しさん
2013/01/09(水) 17:25:39.34 gfortran って f77 コンパイルできないの?
f90 は f77 完全包括しているし、廃止事項をホントに廃止している
処理系はめったにないからオプション変えれば行けるんでね?
誰かおしへて。
f90 は f77 完全包括しているし、廃止事項をホントに廃止している
処理系はめったにないからオプション変えれば行けるんでね?
誰かおしへて。
133デフォルトの名無しさん
2013/01/10(木) 00:32:04.71 はじめからコードを倍精度で書くのと、コードは単精度でかいて倍精度はコンパイラのオプションに任せるのってどっちがやってる人多いのかな。
後者のメリットはコードがすっきりすることくらいか。
後者のメリットはコードがすっきりすることくらいか。
134デフォルトの名無しさん
2013/01/10(木) 18:29:17.78 AUTODBLは、べた書きの定数の桁がどう扱われるのかよく分からんとか
微妙な精度の問題が気になってIMPLICIT DOUBLE(A-H,O-Z)に乗り換えたわ。
あと、昔のプログラムだと整数とからんだCOMMONやEQUIVALENCEの整合が狂って
謎な挙動をしたりするから困る。
微妙な精度の問題が気になってIMPLICIT DOUBLE(A-H,O-Z)に乗り換えたわ。
あと、昔のプログラムだと整数とからんだCOMMONやEQUIVALENCEの整合が狂って
謎な挙動をしたりするから困る。
135デフォルトの名無しさん
2013/01/11(金) 01:47:02.97 >>132
g77の拡張機能つかってるコードをそうと知らずにgfortranでコンパイルしようとして互換性ないと勘違いした
g77の拡張機能つかってるコードをそうと知らずにgfortranでコンパイルしようとして互換性ないと勘違いした
136デフォルトの名無しさん
2013/01/12(土) 13:32:51.48 >>133
以前、同じことが気になったので、
中くらいの長さ200行ぐらいの単精度コードを手でw 倍精度化したのと、
コンパイルオプションで倍精度化したのを比べたことがある。
gfortran と ifort ではそれぞれで
実行バイナリが冒頭の一部分(コンパイル時刻?)以外は同一だった。
なので自作コードだけなら、違いはないか気にならない程度だとおもう。
third party library で
単精度と倍精度でサブルーチン名が違う場合があるので
その場合にどうなるか、はしらない。
以前、同じことが気になったので、
中くらいの長さ200行ぐらいの単精度コードを手でw 倍精度化したのと、
コンパイルオプションで倍精度化したのを比べたことがある。
gfortran と ifort ではそれぞれで
実行バイナリが冒頭の一部分(コンパイル時刻?)以外は同一だった。
なので自作コードだけなら、違いはないか気にならない程度だとおもう。
third party library で
単精度と倍精度でサブルーチン名が違う場合があるので
その場合にどうなるか、はしらない。
137デフォルトの名無しさん
2013/01/12(土) 13:34:36.19 あと、OpenMP で並列化したやつもまったく同じだった。
MPI で並列したやつはまるで駄目だったので
これは泣く泣く手で倍精度に揃えたw
MPI で並列したやつはまるで駄目だったので
これは泣く泣く手で倍精度に揃えたw
138デフォルトの名無しさん
2013/01/12(土) 14:57:23.92 third party というかソースのない、かつ組み込みでない関数/サブルーチンは
変換できないし、規定されていない方の値を渡すと意味不明な挙動になるぞ。
なお対応する interface 定義が提供される module を use して総称名で呼ぶと
コンパイル時に型にあった引数定義のサブルーチンが選ばれるようになる。
MPI はこういうトリックとは関係なく、1要素の大きさを渡すあたりに工夫が要るかと。
変換できないし、規定されていない方の値を渡すと意味不明な挙動になるぞ。
なお対応する interface 定義が提供される module を use して総称名で呼ぶと
コンパイル時に型にあった引数定義のサブルーチンが選ばれるようになる。
MPI はこういうトリックとは関係なく、1要素の大きさを渡すあたりに工夫が要るかと。
139デフォルトの名無しさん
2013/01/14(月) 23:43:04.50 知り合いのMPIのコードは倍精度はコンパイルオプションに任せてたな
140デフォルトの名無しさん
2013/01/15(火) 12:54:37.70 mpi_float を mpi_double に置き換えてくれるのかな?
MPI で単精度か倍精度が気になるのはその点くらいだよね
MPI で単精度か倍精度が気になるのはその点くらいだよね
141デフォルトの名無しさん
2013/02/09(土) 03:59:15.05 emacsのfortranモードについてなのですが、
変数宣言のあとに「::」をつけると、変数名に色がつくのが気に入っています。
ですが、改行すると色わけされません。
解決方法はありますでしょうか?
例、
integer :: i& ←色がつく
,j ←色がつかない
変数宣言のあとに「::」をつけると、変数名に色がつくのが気に入っています。
ですが、改行すると色わけされません。
解決方法はありますでしょうか?
例、
integer :: i& ←色がつく
,j ←色がつかない
142デフォルトの名無しさん
2013/02/09(土) 04:25:01.37143デフォルトの名無しさん
2013/02/09(土) 04:40:54.90144デフォルトの名無しさん
2013/02/09(土) 08:39:18.75 >>141
emacsの事は良く知らないけれど、f90.el内の
;; Variable declarations (avoid the real function call)
の次の行を編集すれば良いのでは?
あとemacsスレの方がレスが付き易いかも知れないね
emacsの事は良く知らないけれど、f90.el内の
;; Variable declarations (avoid the real function call)
の次の行を編集すれば良いのでは?
あとemacsスレの方がレスが付き易いかも知れないね
145デフォルトの名無しさん
2013/02/15(金) 04:06:55.05 >>144
返信遅くなってすみません。ありがとうございました。
返信遅くなってすみません。ありがとうございました。
146デフォルトの名無しさん
2013/02/15(金) 11:05:49.33 ずっと、fortran90メインで書いてたけど、Javaを触ってみようと奮闘したら、
訳わからん。書籍も分厚いのに、全部書いてある本ってあるの?少し違う事を
しようとしたら、必ずネットで調べらなあかん。fortranなら簡単に書けるのに。
Javaって新しい言語だから素人にもある程度優しいもんだと思ってたのは間違い
なの?自分がアホなんだろうなあ。プロの人ってすごいなあと、自らのアホさ
加減にへこむ日々。fortranで簡単にGUI使えたらJavaなんて要らないのに。
アホな書き込みすいません。
ああああああああ、だめだw。いらつかない。いらつかない。
訳わからん。書籍も分厚いのに、全部書いてある本ってあるの?少し違う事を
しようとしたら、必ずネットで調べらなあかん。fortranなら簡単に書けるのに。
Javaって新しい言語だから素人にもある程度優しいもんだと思ってたのは間違い
なの?自分がアホなんだろうなあ。プロの人ってすごいなあと、自らのアホさ
加減にへこむ日々。fortranで簡単にGUI使えたらJavaなんて要らないのに。
アホな書き込みすいません。
ああああああああ、だめだw。いらつかない。いらつかない。
147デフォルトの名無しさん
2013/02/15(金) 20:00:07.57 Fortranとかいうアホ言語使ってるからそうなるんだ
C++を使いなさい
C++が使えるようになればJavaなんか簡単
C++を使いなさい
C++が使えるようになればJavaなんか簡単
148デフォルトの名無しさん
2013/02/16(土) 12:55:18.74149デフォルトの名無しさん
2013/02/17(日) 23:13:36.88 >>146
なんでやねん
俺にすればJavaの方がFORTRANよりずっと簡単に思えるぞ
C#もだいたい似てる
使うコンピュータがメインフレームならJava、WindowsならC#がGUIが一番楽
というかメインフレームにはMonoすらない事が多いし
C#はDelphiの流れを受け継いでいるのとJavaやC++の良いとこ取りしている
ある意味卑怯な(?)言語なのでGUIはこれが一番早く完成する
なんでやねん
俺にすればJavaの方がFORTRANよりずっと簡単に思えるぞ
C#もだいたい似てる
使うコンピュータがメインフレームならJava、WindowsならC#がGUIが一番楽
というかメインフレームにはMonoすらない事が多いし
C#はDelphiの流れを受け継いでいるのとJavaやC++の良いとこ取りしている
ある意味卑怯な(?)言語なのでGUIはこれが一番早く完成する
150デフォルトの名無しさん
2013/02/21(木) 10:17:06.63 ファイルを読み込んでcharacter型の変数に代入しようとしています。
一行の文字数が不定なときはどうすればいいですか?
あらかじめ要素数をおおきめに用意する以外でおねがいします。
一行の文字数が不定なときはどうすればいいですか?
あらかじめ要素数をおおきめに用意する以外でおねがいします。
151150
2013/02/21(木) 10:35:58.49 コンパイラーはintelの9.0です
あと、intelの非商用のコンパイラってもう配布されてないんですか?
あと、intelの非商用のコンパイラってもう配布されてないんですか?
152デフォルトの名無しさん
2013/02/21(木) 23:40:21.69153デフォルトの名無しさん
2013/02/22(金) 01:40:20.99 1文字づつ読んで改行まで貯めこむしか無いんでないかな。
IVF9.0では無理だと思うがF2003なら、可変長文字列ではなく文字配列ならIVF9でも可かな。
program test
implicit none
character :: ch
character(:), allocatable :: buf
buf = ''
do
read(9, '(a)', end = 999, advance = 'no', eor = 8) ch
buf = buf // ch
cycle
8 print *, buf
buf = ''
end do
999 stop
end program test
IVF9.0では無理だと思うがF2003なら、可変長文字列ではなく文字配列ならIVF9でも可かな。
program test
implicit none
character :: ch
character(:), allocatable :: buf
buf = ''
do
read(9, '(a)', end = 999, advance = 'no', eor = 8) ch
buf = buf // ch
cycle
8 print *, buf
buf = ''
end do
999 stop
end program test
154150
2013/02/22(金) 15:25:21.78155デフォルトの名無しさん
2013/02/22(金) 17:32:58.14 >>154
>は代入するたびにallocateしなおしてるやつですか
そう。大量で負荷が重いなら大きなbufferを取るしかない。
IntelFortranの場合F2003文法はデフォではOFFになっているので
standard-semantics をONにする必要があるかも。
配列の場合
buff = [buff, ch]
で配列要素数を拡張していけるが、この場合はオプション必要。
>は代入するたびにallocateしなおしてるやつですか
そう。大量で負荷が重いなら大きなbufferを取るしかない。
IntelFortranの場合F2003文法はデフォではOFFになっているので
standard-semantics をONにする必要があるかも。
配列の場合
buff = [buff, ch]
で配列要素数を拡張していけるが、この場合はオプション必要。
156デフォルトの名無しさん
2013/02/25(月) 11:52:14.65 実行時間を計測することはできると思いますが
使用したメモリの最大値を計測することはできませんか?
コンパイラはintelです
使用したメモリの最大値を計測することはできませんか?
コンパイラはintelです
157デフォルトの名無しさん
2013/02/25(月) 15:41:26.94 Linux なら ps をじっと眺めているw
Windows なら task manager のグラフを眺める。
Windows なら task manager のグラフを眺める。
158デフォルトの名無しさん
2013/02/28(木) 02:15:09.70 include文やuse文で読み込むインクルードファイル、モジュールファイルを
別ディレクトリにおいてコンパイルしたいのですが、
インクルードパスの設定方法がわかりません。
コンパイラはifortです。
ifort -I***
***に絶対パスを入れたり、相対パスを入れたりしたのですがダメです。
そもそも、-I/でタブ補完しようとすると
-I/ is not found.と出てきます。
何か別の設定が必要なのでしょうか?
インクルードファイルがあるディレクトリは、カレントディレクトリの中にあります。
別ディレクトリにおいてコンパイルしたいのですが、
インクルードパスの設定方法がわかりません。
コンパイラはifortです。
ifort -I***
***に絶対パスを入れたり、相対パスを入れたりしたのですがダメです。
そもそも、-I/でタブ補完しようとすると
-I/ is not found.と出てきます。
何か別の設定が必要なのでしょうか?
インクルードファイルがあるディレクトリは、カレントディレクトリの中にあります。
159デフォルトの名無しさん
2013/02/28(木) 11:49:02.22 fortranの出力指定子でマニアックなものまで全部のってるサイトを教えてもらえないでしょうか
例えば0.005を↓のように出力する指定子を探しています
5.000000000000000-3
例えば0.005を↓のように出力する指定子を探しています
5.000000000000000-3
160デフォルトの名無しさん
2013/03/01(金) 01:51:15.14 >>159
EN(工学用)なら3乗おきに出力できたはず
0.005なら単純に科学系のES記述子でもできる
いつから在るか知らないけど、最近の本(自分が買ったのは5年前)には普通に載ってたよ
Webサイトなら"Fortran 編集記述子"で検索すれば色々出てくるけど、
自分の環境で使える記述子を全部知りたいならコンパイラのリファレンスが一番確実
EN(工学用)なら3乗おきに出力できたはず
0.005なら単純に科学系のES記述子でもできる
いつから在るか知らないけど、最近の本(自分が買ったのは5年前)には普通に載ってたよ
Webサイトなら"Fortran 編集記述子"で検索すれば色々出てくるけど、
自分の環境で使える記述子を全部知りたいならコンパイラのリファレンスが一番確実
161デフォルトの名無しさん
2013/03/01(金) 17:51:51.58 少しはマニュアル読めよwww
162デフォルトの名無しさん
2013/03/02(土) 17:11:35.24 さっき始めたんですがわからないので教えてください
あるモジュールにサブルーチンが二つある時にこの二つのサブルーチンを違うファイルに記述することは出来ますか?
C++でいう名前空間のように分離できるか?ということです
あるモジュールにサブルーチンが二つある時にこの二つのサブルーチンを違うファイルに記述することは出来ますか?
C++でいう名前空間のように分離できるか?ということです
163デフォルトの名無しさん
2013/03/04(月) 19:17:12.36 名前空間を分けたいなら、まぁmoduleを二個使え。
USEでエイリアスをつけろ。
どうしてもというなら、一個のモジュールを二個のファイルに書くことは、
includeを使えば出来ることはできる。
またFortran2008で導入されるsubmoduleを使う手も考えられる。が、実装している
処理系はまだないと思う。
USEでエイリアスをつけろ。
どうしてもというなら、一個のモジュールを二個のファイルに書くことは、
includeを使えば出来ることはできる。
またFortran2008で導入されるsubmoduleを使う手も考えられる。が、実装している
処理系はまだないと思う。
164デフォルトの名無しさん
2013/03/06(水) 03:56:33.28 Fortranのcharacterって文字コード決まってたりする?環境依存?
165デフォルトの名無しさん
2013/03/06(水) 15:22:28.31 内部コードは環境依存。
というか昔はIBMのEBCDICこそが本物コードでASCIIは安物ミニコンとかのパチモン文字コードだった。
ANSI FORTRAN77の時に内部コードの他にASCIIコードに対応させる関数が導入されてる。
というか昔はIBMのEBCDICこそが本物コードでASCIIは安物ミニコンとかのパチモン文字コードだった。
ANSI FORTRAN77の時に内部コードの他にASCIIコードに対応させる関数が導入されてる。
166デフォルトの名無しさん
2013/03/07(木) 16:59:58.06 スレチかもしれないけど
リスト構造を無限ループで回してるところを
openmpで並列化したいんだけどできます?
リスト構造を無限ループで回してるところを
openmpで並列化したいんだけどできます?
167デフォルトの名無しさん
2013/03/07(木) 18:31:50.73 リスト構造といっても色々あるから答えようもないぜw
Fortranはデータパラレルには強いがタスク・パラレルは弱いけど、
OpenMPの新しい版ではタスク・パラレルできるから
リスト構造で枝分かれするところでタスク分割すればいいんでね?
順序入れ替えが無い線形リスト構造なら、配列に直せば元々高速になるし、
並列化の余地も大いにあると思う。
Fortranはデータパラレルには強いがタスク・パラレルは弱いけど、
OpenMPの新しい版ではタスク・パラレルできるから
リスト構造で枝分かれするところでタスク分割すればいいんでね?
順序入れ替えが無い線形リスト構造なら、配列に直せば元々高速になるし、
並列化の余地も大いにあると思う。
168デフォルトの名無しさん
2013/04/03(水) 15:36:38.02 print '(g20.12)', 1.d-100
とすると
0.100000000000E-99
と返してくれるのですが,
print '(g20.12)', 1.d-101
とすると
0.100000000000-100
のようにEが消えてしまいます.
これだとプロットのソフトによっては0.100000000000-100を-99.9と解釈してしまい困ってます.
どうすれば3桁以上の指数部分も正しく書けますか.
コンパイラはifortです.
とすると
0.100000000000E-99
と返してくれるのですが,
print '(g20.12)', 1.d-101
とすると
0.100000000000-100
のようにEが消えてしまいます.
これだとプロットのソフトによっては0.100000000000-100を-99.9と解釈してしまい困ってます.
どうすれば3桁以上の指数部分も正しく書けますか.
コンパイラはifortです.
169デフォルトの名無しさん
2013/04/03(水) 18:33:16.72 >>168
こんなかんじかな。
program p
implicit none
integer :: i1,i2
real(8) :: d1,d2
character(10) :: s1
d1=-1d-105
i1=log10(abs(d1))
d2=d1*10d0**(-i1)
write(*,"(g25.16,f25.15,a)")d1,d2,"E"//i2s(i1)
contains
function i2s(ival)
integer, intent(in) :: ival
character(int(log10(dble(abs(ival))))+2) :: i2s
character(12) :: s1
write(s1,"(i12)")abs(ival)
if(ival.ge.0)then
i2s="+"//s1(12-int(log10(dble(abs(ival)))):12)
else
i2s="-"//s1(12-int(log10(dble(abs(ival)))):12)
end if
end function
end program
こんなかんじかな。
program p
implicit none
integer :: i1,i2
real(8) :: d1,d2
character(10) :: s1
d1=-1d-105
i1=log10(abs(d1))
d2=d1*10d0**(-i1)
write(*,"(g25.16,f25.15,a)")d1,d2,"E"//i2s(i1)
contains
function i2s(ival)
integer, intent(in) :: ival
character(int(log10(dble(abs(ival))))+2) :: i2s
character(12) :: s1
write(s1,"(i12)")abs(ival)
if(ival.ge.0)then
i2s="+"//s1(12-int(log10(dble(abs(ival)))):12)
else
i2s="-"//s1(12-int(log10(dble(abs(ival)))):12)
end if
end function
end program
170デフォルトの名無しさん
2013/04/03(水) 19:16:56.67 >>168
'(g20.12e3)'で指数部の桁数を指定するとか
'(g20.12e3)'で指数部の桁数を指定するとか
172169
2013/04/03(水) 20:12:16.82 ごめんミス。171は169です。
173デフォルトの名無しさん
2013/04/22(月) 08:17:30.46 知らない仕様っていっぱいありそう
174デフォルトの名無しさん
2013/05/05(日) 23:04:55.44 f90って継続記号は行頭ではなく行末でないといけないんですよね?
例えば、
equation = A&
+ B&
+ C
みたいな式があってCの寄与をみるためにコメントアウトするとき
たまにBの後ろの&をコメントアウトしわすれて面倒だったりしませんか?
絶対文頭につける仕様のほうが便利だと思うんですが・・・。
例えば、
equation = A&
+ B&
+ C
みたいな式があってCの寄与をみるためにコメントアウトするとき
たまにBの後ろの&をコメントアウトしわすれて面倒だったりしませんか?
絶対文頭につける仕様のほうが便利だと思うんですが・・・。
175デフォルトの名無しさん
2013/05/06(月) 08:39:40.01 セミコロンで文末にできた気がする
equation = A&
+ B&
; ! + C B から継続→文末、C の除外
equation = A&
+ B&
; ! + C B から継続→文末、C の除外
176デフォルトの名無しさん
2013/05/08(水) 18:56:23.29 10.000
100.00
1000.0
100000
浮動小数点を上記のように書き出したいのですが
どのように書式を指定すればよろしいでしょうか
100.00
1000.0
100000
浮動小数点を上記のように書き出したいのですが
どのように書式を指定すればよろしいでしょうか
177デフォルトの名無しさん
2013/05/15(水) 05:10:28.17178デフォルトの名無しさん
2013/05/15(水) 05:16:35.51 私も質問です。
サブルーチンの引数に配列を使ったときに、実引数と仮引数でサイズのチェックが行われるような書き方、
あるいはコンパイルオプションはありますでしょうか?
例えば、実引数がa(0:imax)で仮引数がb(1:imax)のとき、エラーが出ずにコンパイルが通ってしまうことがあります。
その場合、実行結果がめちゃくちゃになるのにエラーが出ないのでデバッグに苦労しています。
内部サブルーチンのときはコンパイルエラーが出ますよね?
外部サブルーチン、あるいはモジュールでもエラーが出るようにできますでしょうか?
サブルーチンの引数に配列を使ったときに、実引数と仮引数でサイズのチェックが行われるような書き方、
あるいはコンパイルオプションはありますでしょうか?
例えば、実引数がa(0:imax)で仮引数がb(1:imax)のとき、エラーが出ずにコンパイルが通ってしまうことがあります。
その場合、実行結果がめちゃくちゃになるのにエラーが出ないのでデバッグに苦労しています。
内部サブルーチンのときはコンパイルエラーが出ますよね?
外部サブルーチン、あるいはモジュールでもエラーが出るようにできますでしょうか?
179デフォルトの名無しさん
2013/05/15(水) 23:02:48.29 あるプログラム単位は、外部サブルーチンがどんな引数を取るかは知らん。
だから引数の整合性を確認するのは、プログラマの責任だった…のが FORTRAN77
Fortran90 から、interface ブロックで、外部サブルーチンがどんな引数を取るつもりか
定義をプログラムに書けるようになり、コンパイラのチェックを受けられるようになってる。
これだけではあまり意味はないが、module で定義を書き、その内容を use 文で
取り込むことで、複数ファイル間での一貫性が取れる構造となる。また、モジュール内
サブルーチンはわざわざ interface を書かんでも use されたプログラム単位からの
参照に対してチェックがかかるはず。
ちなみにインテル Fortran なら /warn:interface でうるさく言ってくるようだ。
だから引数の整合性を確認するのは、プログラマの責任だった…のが FORTRAN77
Fortran90 から、interface ブロックで、外部サブルーチンがどんな引数を取るつもりか
定義をプログラムに書けるようになり、コンパイラのチェックを受けられるようになってる。
これだけではあまり意味はないが、module で定義を書き、その内容を use 文で
取り込むことで、複数ファイル間での一貫性が取れる構造となる。また、モジュール内
サブルーチンはわざわざ interface を書かんでも use されたプログラム単位からの
参照に対してチェックがかかるはず。
ちなみにインテル Fortran なら /warn:interface でうるさく言ってくるようだ。
180デフォルトの名無しさん
2013/05/16(木) 03:39:55.72 >>179
ありがとうございます。具体例をあげます。
module_Aのなかに、サブルーチン1とサブルーチン2がcontainsされています。
module_Bのなかに、サブルーチン3がcontainsされています。
ケース1、
サブルーチン1でuse module_Bとして、サブルーチン3を呼び出します。
実引数はmodule_Aで宣言しており、x(0:imax)です。
仮引数はサブルーチン3で宣言しており、intent(out)属性をつけてx(1:imax)です。
この場合、コンパイルしてもエラーが出ませんでした。
ありがとうございます。具体例をあげます。
module_Aのなかに、サブルーチン1とサブルーチン2がcontainsされています。
module_Bのなかに、サブルーチン3がcontainsされています。
ケース1、
サブルーチン1でuse module_Bとして、サブルーチン3を呼び出します。
実引数はmodule_Aで宣言しており、x(0:imax)です。
仮引数はサブルーチン3で宣言しており、intent(out)属性をつけてx(1:imax)です。
この場合、コンパイルしてもエラーが出ませんでした。
181デフォルトの名無しさん
2013/05/16(木) 03:42:38.83 つづき、
ケース2,
サブルーチン1でサブルーチン2を呼び出します。
実引数はintent(inout) :: y(1:imax)で仮引数はintent(in) :: y(0:imax)です。
この場合もエラーが出ません。
コンパイラはifortです。
できれば、これらのケースでのinterfaceの使い方を教えていただきたいです。
ケース2,
サブルーチン1でサブルーチン2を呼び出します。
実引数はintent(inout) :: y(1:imax)で仮引数はintent(in) :: y(0:imax)です。
この場合もエラーが出ません。
コンパイラはifortです。
できれば、これらのケースでのinterfaceの使い方を教えていただきたいです。
182デフォルトの名無しさん
2013/05/17(金) 10:56:33.57 ftn95 で、以下のエラーメッセージの原因がわかりません。
(メッセージの意味ではありません)
Error 29, Call to missing rotine : _EXSUB at 0x00******.
主プログラム(main.f90)
program main
use interface_mod
implicit none
integer :: a,b
a=3; b=5
call exsub1(a)
call exsub2(b)
end program
外部サブルーチン(exsub.f90)
subroutine exsub1(r)
implicit none
integer, intent(in) :: r
real(8),dimension(r):: w
print *,w
end subroutine
subroutine exsub2(s)
implicit none
integer, intent(in) :: s
real(8),dimension(s):: x
print *,x
end subroutine
(メッセージの意味ではありません)
Error 29, Call to missing rotine : _EXSUB at 0x00******.
主プログラム(main.f90)
program main
use interface_mod
implicit none
integer :: a,b
a=3; b=5
call exsub1(a)
call exsub2(b)
end program
外部サブルーチン(exsub.f90)
subroutine exsub1(r)
implicit none
integer, intent(in) :: r
real(8),dimension(r):: w
print *,w
end subroutine
subroutine exsub2(s)
implicit none
integer, intent(in) :: s
real(8),dimension(s):: x
print *,x
end subroutine
183182
2013/05/17(金) 10:57:14.45 (うえのつづきです)
インターフェイスモジュール(ifmod.f90)
module interface_mod
interface
subroutine exsub1(r)
integer,intent(in)::r
end subroutine
subroutine exsub2(s)
integer, intent(in) :: s
end subroutine
end interface
endmodule interface_mod
インターフェイスモジュール(ifmod.f90)
module interface_mod
interface
subroutine exsub1(r)
integer,intent(in)::r
end subroutine
subroutine exsub2(s)
integer, intent(in) :: s
end subroutine
end interface
endmodule interface_mod
184デフォルトの名無しさん
2013/05/17(金) 12:40:14.55 質問です。 計算の結果を.datファイルに書き込むプログラムを作成したのですが
datファイルの中身を確認すると文字化けしています。何がいけないのでしょうか?
OSはWindow7 64bit、コンパイラはFortran90です。「あらきけいすけの雑記帳」を参考にしました。
プログラムすべて乗せるとちょっと長いので関係有りそうな部分だけ。
最初はこのように宣言
open(1, file='1.dat', status='replace',access='direct',recl=4)
その後doで回しながら計算結果を書き込む
write(1,rec=(it-1)*39*39+(iz-2)*39+(ix-1)) p2(ix,iz)
datファイルの中身を確認すると文字化けしています。何がいけないのでしょうか?
OSはWindow7 64bit、コンパイラはFortran90です。「あらきけいすけの雑記帳」を参考にしました。
プログラムすべて乗せるとちょっと長いので関係有りそうな部分だけ。
最初はこのように宣言
open(1, file='1.dat', status='replace',access='direct',recl=4)
その後doで回しながら計算結果を書き込む
write(1,rec=(it-1)*39*39+(iz-2)*39+(ix-1)) p2(ix,iz)
185デフォルトの名無しさん
2013/05/17(金) 16:50:59.44 direct access なら内部コードで書かれるんだから当然じゃ
186デフォルトの名無しさん
2013/05/17(金) 18:02:03.27 >>182
そこに張られているものは問題ないと思う。
エラーメッセージはサブルーチンexsubが無いと言っているので、
call しているプログラムが exsub1,exsub2 になっておらずexsub になっていると思われる。
たぶんファイルのセーブ違い、コンパイル違い。
インターフェース+野良サブルーチンにするより、
サブルーチンは module に入れて module を use するのがふつう。
インターフェースは、外部ライブラリとか、関数引数みたいな場合以外は
出番なくてよし。
>>180-181
最新版の intel compiler ならエラーを出す。
ただし宣言元の配列の方が大きくて、サブルーチン側の配列がその中に納まるなら
問題は無いので何も警告しない。
そもそも66時代には、サブルーチン側の配列を10とかに宣言して
サイズの不整合を気にしなかったし、77で整合配列が導入されても
66時代からの習慣などで、整合性は気にしなかった。
配列サイズの整合に姑根性でうるさくされると、昔のプログラムが動かなくなるので
皆困る。おおらかに行こうぜ!
気になるなら、仮引数の終端の方を宣言しなければ、自動でコンパイラ様が
適宜取り計らってくれる。
real, intent(in) :: x(0:) みたいな。
>>184
書いたファイルの中身が見たければアクセスとか指定せずデフォでいけ。
(シーケンシャルアクセス)
write文は自由フォーマットwrite(1,*)で。
そこに張られているものは問題ないと思う。
エラーメッセージはサブルーチンexsubが無いと言っているので、
call しているプログラムが exsub1,exsub2 になっておらずexsub になっていると思われる。
たぶんファイルのセーブ違い、コンパイル違い。
インターフェース+野良サブルーチンにするより、
サブルーチンは module に入れて module を use するのがふつう。
インターフェースは、外部ライブラリとか、関数引数みたいな場合以外は
出番なくてよし。
>>180-181
最新版の intel compiler ならエラーを出す。
ただし宣言元の配列の方が大きくて、サブルーチン側の配列がその中に納まるなら
問題は無いので何も警告しない。
そもそも66時代には、サブルーチン側の配列を10とかに宣言して
サイズの不整合を気にしなかったし、77で整合配列が導入されても
66時代からの習慣などで、整合性は気にしなかった。
配列サイズの整合に姑根性でうるさくされると、昔のプログラムが動かなくなるので
皆困る。おおらかに行こうぜ!
気になるなら、仮引数の終端の方を宣言しなければ、自動でコンパイラ様が
適宜取り計らってくれる。
real, intent(in) :: x(0:) みたいな。
>>184
書いたファイルの中身が見たければアクセスとか指定せずデフォでいけ。
(シーケンシャルアクセス)
write文は自由フォーマットwrite(1,*)で。
187デフォルトの名無しさん
2013/05/17(金) 18:14:46.78188デフォルトの名無しさん
2013/05/17(金) 18:29:07.70 direct access は、大量のレコード長(データの長さ)が等しいデータを
書き出しておいて、読み出し/書き換え時に、ランダム位置に直接そのデータを
読みに行くときに使うもの。
普通に不定長のデータをファイルにだらだら書き出して、読み出す時も前から順番に
たらたら読み飛ばしつつ、欲しいデータを探して行くときは、
デフォルトのシーケンシャル・アクセスファイルでいい。
また、人間がファイルを覗いたりするなら、フォーマットを指定して/自由形式にして
読み書きすればいい。
write(1, '(2f15.7)') x,y
write(1, *) x,y
ファイルサイズを小さくかつ高速にアクセスしたいときは、
write文でフォーマットを指定せず、内部表現で読み書きするが、
write(1) x,y
書き出しておいて、読み出し/書き換え時に、ランダム位置に直接そのデータを
読みに行くときに使うもの。
普通に不定長のデータをファイルにだらだら書き出して、読み出す時も前から順番に
たらたら読み飛ばしつつ、欲しいデータを探して行くときは、
デフォルトのシーケンシャル・アクセスファイルでいい。
また、人間がファイルを覗いたりするなら、フォーマットを指定して/自由形式にして
読み書きすればいい。
write(1, '(2f15.7)') x,y
write(1, *) x,y
ファイルサイズを小さくかつ高速にアクセスしたいときは、
write文でフォーマットを指定せず、内部表現で読み書きするが、
write(1) x,y
189182
2013/05/17(金) 18:52:41.78 >>186
ご指摘ありがとうございます。U島氏の本にて学習中の身です。
ソースを見直し改めてコンパイル、ビルドしましたが、
外部サブルーチンが読めないと警告してきます(もちろん実行はエラー)。
gfortranですと何の問題もないのですが・・・
上に貼ったものは、gfortranで通ったものを試したもので、
実は、ftn95環境下では、real(8)は、real(kind(1d0))へと正されました。
ひょっとするとまだ、当方が何か見落としているのでしょうか??
ご指摘ありがとうございます。U島氏の本にて学習中の身です。
ソースを見直し改めてコンパイル、ビルドしましたが、
外部サブルーチンが読めないと警告してきます(もちろん実行はエラー)。
gfortranですと何の問題もないのですが・・・
上に貼ったものは、gfortranで通ったものを試したもので、
実は、ftn95環境下では、real(8)は、real(kind(1d0))へと正されました。
ひょっとするとまだ、当方が何か見落としているのでしょうか??
190デフォルトの名無しさん
2013/05/17(金) 19:57:06.24 >>189
手元にFTN95の環境が無いので何とも言えないが、
gfortranで行くならftn95の問題かもしれない。
1個のファイルにまとめてみたらどうかな?
ただし、順番に依存するので、メインルーチンは最後に置かないと駄目だと思うが。
まぁサブルーチンをmoduleに入れた方がinterfaceも要らないし楽だと思うが。
手元にFTN95の環境が無いので何とも言えないが、
gfortranで行くならftn95の問題かもしれない。
1個のファイルにまとめてみたらどうかな?
ただし、順番に依存するので、メインルーチンは最後に置かないと駄目だと思うが。
まぁサブルーチンをmoduleに入れた方がinterfaceも要らないし楽だと思うが。
191HIROSHI
2013/05/19(日) 23:30:26.19 COMPAQ VISUAL FORTRAN6.6が WIN7 32 HOMEで起動しなくなりました。WIN32 PROでも起動しないことが他にあるのですが、しつこく起動することで使える状態です。
そこであきらめてDOSプロンプトでコンパイル しようと考えています。MAIN.F SUB1.F SUB2.Fのテキスト文がある場合のリンクの方法をお教えください。コピペでまとめてやればいいのですが
細かく ライブラリ化(というのですか) していきたいもので よろしくお願いします。
具体的に 例文で書いてもらったら助かります。
そこであきらめてDOSプロンプトでコンパイル しようと考えています。MAIN.F SUB1.F SUB2.Fのテキスト文がある場合のリンクの方法をお教えください。コピペでまとめてやればいいのですが
細かく ライブラリ化(というのですか) していきたいもので よろしくお願いします。
具体的に 例文で書いてもらったら助かります。
192デフォルトの名無しさん
2013/05/20(月) 16:32:18.84 CVFは先祖がDEC Visual Fortran (DVF)なので、
dfでコンパイラドライバが起動する。
df sub1.f sub2.f main.f
で sub1.exe が出来上がると思う。
デフォでは実行ファイルの名前は先頭のファイル名になる。
moduleなどは先にコンパイルされている必要があるので、main program は
最後に来ることになる。
df /help もしくは-help でヘルプが出るだろう。
CVFは10年以上前のコンパイラなので、目的にもよるが
無理して使うよりは新しいのを手に入れた方がよいかもしれない。
同じプログラムでも、最近のコンパイラではめちゃくちゃ速く実行することが多い。
dfでコンパイラドライバが起動する。
df sub1.f sub2.f main.f
で sub1.exe が出来上がると思う。
デフォでは実行ファイルの名前は先頭のファイル名になる。
moduleなどは先にコンパイルされている必要があるので、main program は
最後に来ることになる。
df /help もしくは-help でヘルプが出るだろう。
CVFは10年以上前のコンパイラなので、目的にもよるが
無理して使うよりは新しいのを手に入れた方がよいかもしれない。
同じプログラムでも、最近のコンパイラではめちゃくちゃ速く実行することが多い。
193デフォルトの名無しさん
2013/05/21(火) 05:28:14.57194デフォルトの名無しさん
2013/05/21(火) 15:15:10.76 >>193
正直Fortranではああいう書き方はあまりしないので、チェックにかからない。
66ならサイズは気にしないで、sub(x); x(10)
77なら整合配列で、sub(n, x); real x(n)
90なら形状引継ぎ配列で、sub(x); real, intent(in out) :: x(:)
配列を0から始めると苦難の道が待っているので、数学的要請でない限り
避けるのが吉。
正直Fortranではああいう書き方はあまりしないので、チェックにかからない。
66ならサイズは気にしないで、sub(x); x(10)
77なら整合配列で、sub(n, x); real x(n)
90なら形状引継ぎ配列で、sub(x); real, intent(in out) :: x(:)
配列を0から始めると苦難の道が待っているので、数学的要請でない限り
避けるのが吉。
195デフォルトの名無しさん
2013/05/22(水) 22:19:07.20 4バイト整数の変数が,4バイトを超えたときエラーにならず変な値(マイナスになるはずのない値がマイナス)でそのまま計算が進んでしまいます。
プログラムのどのあたりで超えるか知りたいので,エラーで終了するようにするオプション又はデバッグオプションなどありませんか?
コンパイラ : intel fortran version 12 (CentOS 5)
プログラムのどのあたりで超えるか知りたいので,エラーで終了するようにするオプション又はデバッグオプションなどありませんか?
コンパイラ : intel fortran version 12 (CentOS 5)
196デフォルトの名無しさん
2013/05/23(木) 01:46:16.08 >>195
昔のDEC Fortranにはinteger overflowの実行時チェックオプションがあったが、intel fortran になってから
そのオプションは無くなった。今もないんじゃないかと思う。
最近配列サイズが4byte整数を超えることが多くなってきたので、このチェックのあるコンパイラがあってもおかしくない気はする。
gfortranとかfreeのfortranも含めて
コンパイラオプションの説明を、便器を舐めるように注意深く読んで見るといいのではないか。
昔のDEC Fortranにはinteger overflowの実行時チェックオプションがあったが、intel fortran になってから
そのオプションは無くなった。今もないんじゃないかと思う。
最近配列サイズが4byte整数を超えることが多くなってきたので、このチェックのあるコンパイラがあってもおかしくない気はする。
gfortranとかfreeのfortranも含めて
コンパイラオプションの説明を、便器を舐めるように注意深く読んで見るといいのではないか。
197デフォルトの名無しさん
2013/05/23(木) 17:36:14.83198デフォルトの名無しさん
2013/05/24(金) 03:07:21.20 貰い物の古いコードが、グローバル変数をCOMMON文でインクルードしている形式なのですが、
そこのCOMMON文に新しく変数を付け足したところ、
>COMMON のために、オブジェクトのアライメントが型と一致していません
>パフォーマンスに影響を与える可能性があります。
という警告が出ました。
変数の付け足す位置を変えたら出なくなったのですが、どういう意味かわかる方いらっしゃいますか?
そこのCOMMON文に新しく変数を付け足したところ、
>COMMON のために、オブジェクトのアライメントが型と一致していません
>パフォーマンスに影響を与える可能性があります。
という警告が出ました。
変数の付け足す位置を変えたら出なくなったのですが、どういう意味かわかる方いらっしゃいますか?
199デフォルトの名無しさん
2013/05/24(金) 16:05:35.20 >>198
32bitコンピュータとか64bitコンピュータと呼ばれるように、コンピュータは
ビットの塊を一括して処理する。メモリーアクセスは、0番地から32や64bit
の区切りで一括でなされる。この境界をまたぐと、本来1回で読み書き
できるデータに2回読み書きにいかなければならない。
そういうわけで、最近のFortranコンパイラは、自動的に境界合せをするようになっている。
ところがCOMMON文は、同じメモリー領域の割り付けだから、
コンパイラが変数の位置を勝手にずらすと、対応がずれてしまう可能性が出る。
それでアクセスが遅くなるよと警告している。
COMMON文はグローバル変数というよりも、メモリー割り付けの手動制御と
理解した方が良い。COMMONにあるのがREALとINTEGERだけの場合は、
ズレが起きることは(例外的な場合以外)ないが、文字列などがあると
すぐずれて色々警告される。文字変数は後ろの方に置くのが吉。
FORTRANコンパイラではREALとINTEGERのデフォサイズが共通であるという
(暗黙の?)約束がある。COMMON文での共有があるためだと思うが。
AUTODBLEをつかったりするとずれる可能性が出る。
以前GFORTRANだったかg95だったかが、この約束を破ってド顰蹙を買っていた。
32bitコンピュータとか64bitコンピュータと呼ばれるように、コンピュータは
ビットの塊を一括して処理する。メモリーアクセスは、0番地から32や64bit
の区切りで一括でなされる。この境界をまたぐと、本来1回で読み書き
できるデータに2回読み書きにいかなければならない。
そういうわけで、最近のFortranコンパイラは、自動的に境界合せをするようになっている。
ところがCOMMON文は、同じメモリー領域の割り付けだから、
コンパイラが変数の位置を勝手にずらすと、対応がずれてしまう可能性が出る。
それでアクセスが遅くなるよと警告している。
COMMON文はグローバル変数というよりも、メモリー割り付けの手動制御と
理解した方が良い。COMMONにあるのがREALとINTEGERだけの場合は、
ズレが起きることは(例外的な場合以外)ないが、文字列などがあると
すぐずれて色々警告される。文字変数は後ろの方に置くのが吉。
FORTRANコンパイラではREALとINTEGERのデフォサイズが共通であるという
(暗黙の?)約束がある。COMMON文での共有があるためだと思うが。
AUTODBLEをつかったりするとずれる可能性が出る。
以前GFORTRANだったかg95だったかが、この約束を破ってド顰蹙を買っていた。
200デフォルトの名無しさん
2013/05/28(火) 02:56:21.83 はじめまして、こんにちは
現在、フォートランで数値計算をするプログラムを作っています。
今日、プログラム内で使っている配列のサイズを極端に大きくしたところ、スタックオーバーフローというエラーになりました。
解決策としては、コンパイルオプションでスタックを初めから大きくするというものがあるそうなのですが、この方法にデメリットはないのでしょうか?
また、これ以外の方法で、皆さんならどのようにオーバーフローを回避しますか?
現在、フォートランで数値計算をするプログラムを作っています。
今日、プログラム内で使っている配列のサイズを極端に大きくしたところ、スタックオーバーフローというエラーになりました。
解決策としては、コンパイルオプションでスタックを初めから大きくするというものがあるそうなのですが、この方法にデメリットはないのでしょうか?
また、これ以外の方法で、皆さんならどのようにオーバーフローを回避しますか?
201デフォルトの名無しさん
2013/05/28(火) 14:05:42.30202デフォルトの名無しさん
2013/05/30(木) 12:08:48.19 次のようなデータをファイルから読み込みたいのですが,read文と書式をどう書けばよいか教えてください.
データの並びは
(親核種)(娘核種)(娘核種の比率)(孫核種)(孫核種の比率)(ひ孫核種)(ひ孫核種の比率)…
となっており,何世代まで子孫の核種があるかはファイルを読むまで分からないとします.
データの並びは
(親核種)(娘核種)(娘核種の比率)(孫核種)(孫核種の比率)(ひ孫核種)(ひ孫核種の比率)…
となっており,何世代まで子孫の核種があるかはファイルを読むまで分からないとします.
203202
2013/05/30(木) 12:11:04.67 ---------データの例(はじまり)-------------
Pb-202 Tl-202 1
Pb-210 Bi-210 1 Po-210 1
Pb-212 Bi-212 1 Tl-208 0.40 Po-212 0.71
Bi-210m Ti-206 1
Bi-212 Tl-208 0.36 Po-212 0.65
At-211 Po-211 0.58
Rn-222 Po-218 1 Pb-214 1 Bi-214 1 Po-214 1
---------データの例(おわり)-------------
Pb-202 Tl-202 1
Pb-210 Bi-210 1 Po-210 1
Pb-212 Bi-212 1 Tl-208 0.40 Po-212 0.71
Bi-210m Ti-206 1
Bi-212 Tl-208 0.36 Po-212 0.65
At-211 Po-211 0.58
Rn-222 Po-218 1 Pb-214 1 Bi-214 1 Po-214 1
---------データの例(おわり)-------------
204202
2013/05/30(木) 12:13:11.61 read(unit=10,fmt='(A,100(:,A,E))') parent, ( progeny(i), progeny_ratio(i), i = 1, 100 )
このように書きましたが,Eに長さの指定がない,とエラーが出ます.
自分が分からない点は以下の二つだと思っています.
1. 任意の桁数の小数を読み込む方法がわからない
2. 一行に任意の個数だけデータが並ぶ場合のreadの仕方がわからない
コンパイラはgfortranを使っています.
このように書きましたが,Eに長さの指定がない,とエラーが出ます.
自分が分からない点は以下の二つだと思っています.
1. 任意の桁数の小数を読み込む方法がわからない
2. 一行に任意の個数だけデータが並ぶ場合のreadの仕方がわからない
コンパイラはgfortranを使っています.
205デフォルトの名無しさん
2013/05/30(木) 19:01:21.13 >>204
結構めんどい。
1.任意の桁数の小数を読む最も楽な方法は、自由形式を使うことで、
空白とかコンマが区切りに入っていれば自動で切り分けてくれる。
自由形式を使わない場合は、動的にFORMAT生成する方法がある。
2.任意個のデータを読むのは、エラー上等で読み込んで、iostatで
エラーコードを調べて、END OF RECORD ならおkとか。
しかし、今の場合文字列処理の方が問題。固定長ならまだやりようがあるが、
Bi-210m みたいに長さの違うのが混じると苦しい。
結局、1行ごと文字列として読み込んで、空白をトークンとして自分でパース
していくのが素朴。
Fortran2003/08なら、もう少し柔軟なIOできるかもしれない。
結構めんどい。
1.任意の桁数の小数を読む最も楽な方法は、自由形式を使うことで、
空白とかコンマが区切りに入っていれば自動で切り分けてくれる。
自由形式を使わない場合は、動的にFORMAT生成する方法がある。
2.任意個のデータを読むのは、エラー上等で読み込んで、iostatで
エラーコードを調べて、END OF RECORD ならおkとか。
しかし、今の場合文字列処理の方が問題。固定長ならまだやりようがあるが、
Bi-210m みたいに長さの違うのが混じると苦しい。
結局、1行ごと文字列として読み込んで、空白をトークンとして自分でパース
していくのが素朴。
Fortran2003/08なら、もう少し柔軟なIOできるかもしれない。
206デフォルトの名無しさん
2013/05/30(木) 19:03:15.49 program twochan
implicit none
integer, parameter :: nmax = 100
character (len = 136) :: buff
character (len = 10) :: parent, progeny(nmax)
real :: progeny_ratio(nmax)
integer :: i, k
do
read(10, '(a)', end = 999) buff
buff = adjustl(buff)
k = index(buff, ' ')
parent = buff(1:k - 1)
buff = adjustl(buff(k:))
i = 0
do while(trim(buff) /= '')
i = i + 1
k = index(buff, ' ')
progeny(i) = adjustl(buff(1: k - 1))
buff = adjustl(buff(k:))
k = index(buff, ' ')
read(buff(:k - 1), *) progeny_ratio(i)
buff = adjustl(buff(k:))
end do
print *, parent, (progeny(k), progeny_ratio(k), k = 1, i)
end do
999 stop
end program twochan
>>206 専ブラインデント用引用符
implicit none
integer, parameter :: nmax = 100
character (len = 136) :: buff
character (len = 10) :: parent, progeny(nmax)
real :: progeny_ratio(nmax)
integer :: i, k
do
read(10, '(a)', end = 999) buff
buff = adjustl(buff)
k = index(buff, ' ')
parent = buff(1:k - 1)
buff = adjustl(buff(k:))
i = 0
do while(trim(buff) /= '')
i = i + 1
k = index(buff, ' ')
progeny(i) = adjustl(buff(1: k - 1))
buff = adjustl(buff(k:))
k = index(buff, ' ')
read(buff(:k - 1), *) progeny_ratio(i)
buff = adjustl(buff(k:))
end do
print *, parent, (progeny(k), progeny_ratio(k), k = 1, i)
end do
999 stop
end program twochan
>>206 専ブラインデント用引用符
207デフォルトの名無しさん
2013/05/30(木) 19:04:54.82 実行結果
Pb-202 Tl-202 1.000000
Pb-210 Bi-210 1.000000 Po-210 1.000000
Pb-212 Bi-212 1.000000 Tl-208 0.4000000 Po-212
0.7100000
Bi-210m Ti-206 1.000000
Bi-212 Tl-208 0.3600000 Po-212 0.6500000
At-211 Po-211 0.5800000
Rn-222 Po-218 1.000000 Pb-214 1.000000 Bi-214
1.000000 Po-214 1.000000
Pb-202 Tl-202 1.000000
Pb-210 Bi-210 1.000000 Po-210 1.000000
Pb-212 Bi-212 1.000000 Tl-208 0.4000000 Po-212
0.7100000
Bi-210m Ti-206 1.000000
Bi-212 Tl-208 0.3600000 Po-212 0.6500000
At-211 Po-211 0.5800000
Rn-222 Po-218 1.000000 Pb-214 1.000000 Bi-214
1.000000 Po-214 1.000000
208202
2013/05/31(金) 21:54:18.32 すばらしいです!ありがとうございました.
実は,自分もほぼ丸一日試行錯誤した末にできたのですが,
なぜ自分のプログラムがうまく動くのか説明できません.
教えてもらった方法をこれから読んで勉強しようと思います.
実は,自分もほぼ丸一日試行錯誤した末にできたのですが,
なぜ自分のプログラムがうまく動くのか説明できません.
教えてもらった方法をこれから読んで勉強しようと思います.
209デフォルトの名無しさん
2013/06/11(火) 09:28:34.46 gfortranで通常の宣言型を超えて桁数の上限なしの計算をしたいのですが、
質問1)GMPというのを使えば良いのですか?
(既にPCに入っているとしたら、Ubuntuの場合は、どこのなんてファイル群?)
質問2)GMPを使うとして、どのようにソースを書けば良いですか?
(FMLIBの場合は、最初にuse FMZMとして、型宣言の時にtype(IM)とか)
質問2)他にもっと多倍数演算に向いたツールはありますか?
質問1)GMPというのを使えば良いのですか?
(既にPCに入っているとしたら、Ubuntuの場合は、どこのなんてファイル群?)
質問2)GMPを使うとして、どのようにソースを書けば良いですか?
(FMLIBの場合は、最初にuse FMZMとして、型宣言の時にtype(IM)とか)
質問2)他にもっと多倍数演算に向いたツールはありますか?
210デフォルトの名無しさん
2013/06/11(火) 19:54:51.69 質問です学校で COMMAND入力に「XX<YY.dat」という操作をしたのですがどういう意味でしょうか?
211デフォルトの名無しさん
2013/06/11(火) 20:48:28.96 >210
XXというプログラムにYY.datというデータを入力したと
いうことです。
XX>YY.datとすると、XXというプログラムの出力を
YY.datというファイルに出力することを意味します。
XXというプログラムにYY.datというデータを入力したと
いうことです。
XX>YY.datとすると、XXというプログラムの出力を
YY.datというファイルに出力することを意味します。
212デフォルトの名無しさん
2013/06/12(水) 15:25:51.17213デフォルトの名無しさん
2013/06/15(土) 12:45:05.08214デフォルトの名無しさん
2013/06/17(月) 11:48:46.18 C program main
implicit real*8 (a-h, o-z)
real*8 aa
parameter (c=1.0D0, aa=1.0D0, nmax=200, dx=aa/nmax)
integer n
real*8 x(0:1000)
real*8 y(0:1000)
real*8 k1,k2,k3,k4
open(11, file='0606-1.4data', status='unknown')
C * initial value of y
y(0)=1.0D0
x(0)=0.0D0
n=0
C * solution at x(n)=(n+1)*dx
1 q=1.0d0
p=1.0d0-q
a=q*0.50d0
b=q*0.50d0
implicit real*8 (a-h, o-z)
real*8 aa
parameter (c=1.0D0, aa=1.0D0, nmax=200, dx=aa/nmax)
integer n
real*8 x(0:1000)
real*8 y(0:1000)
real*8 k1,k2,k3,k4
open(11, file='0606-1.4data', status='unknown')
C * initial value of y
y(0)=1.0D0
x(0)=0.0D0
n=0
C * solution at x(n)=(n+1)*dx
1 q=1.0d0
p=1.0d0-q
a=q*0.50d0
b=q*0.50d0
215デフォルトの名無しさん
2013/06/17(月) 11:56:31.99 k1 = func(x(n),y(n))
k2 = func(x(n)+b*dx,y(n)+a*k1*dx)
g = p*k1 + q*k2
y(n+1) = y(n) + g*dx
x(n)=(n+1)*dx
ERR=abs(exp(x(n))-y(n+1))
if (mod(n+1,10).eq.0) then
write(6,200) x(n+1), y(n+1), ERR
write(11,200) x(n+1), y(n+1), ERR
end if
if(n==nmax) then
stop 'ended'
end if
n=n+1
go to 1
close(11)
200 format('x=', E13.6, ' result y=', E13.6, ' error ERR=', E13.6)
stop
end
k2 = func(x(n)+b*dx,y(n)+a*k1*dx)
g = p*k1 + q*k2
y(n+1) = y(n) + g*dx
x(n)=(n+1)*dx
ERR=abs(exp(x(n))-y(n+1))
if (mod(n+1,10).eq.0) then
write(6,200) x(n+1), y(n+1), ERR
write(11,200) x(n+1), y(n+1), ERR
end if
if(n==nmax) then
stop 'ended'
end if
n=n+1
go to 1
close(11)
200 format('x=', E13.6, ' result y=', E13.6, ' error ERR=', E13.6)
stop
end
216デフォルトの名無しさん
2013/06/17(月) 11:59:42.72 real*8 function func(x(n),y(n))
implicit real*8 x,y
integer n
real*8 x(0:1000)
real*8 y(0:1000)
func = y(n)
return
end function func
214-216はつながっています。
関数の副プログラムを利用したいのですが、認識してくれません。
どうすればよいでしょうか?
エラー箇所は、Two Main Programsというやつのみでした。
implicit real*8 x,y
integer n
real*8 x(0:1000)
real*8 y(0:1000)
func = y(n)
return
end function func
214-216はつながっています。
関数の副プログラムを利用したいのですが、認識してくれません。
どうすればよいでしょうか?
エラー箇所は、Two Main Programsというやつのみでした。
217デフォルトの名無しさん
2013/06/18(火) 14:40:19.36 >>216
関数の定義の所がおかしい。x(n),y(n)→x,y
IMPLICIT文の文法がおかしい。括弧で変数をくくる必要あり。
real*8 function func(x,y)
implicit real*8 (x,y)
今のコンパイラは多少のエラーがあっても、適宜仮定してコンパイルを
続行するが、いまfunction定義の頭部が無視されてコンパイル続行されたため
end文が2回出てきて二個メインプログラムがあるように解釈されたと思われ。
F77的な古典的な書き方をしていて、77本を真面目に勉強しているのだと思うが、
(それはそれで大変結構だが)
副プログラムをMODULEに入れるとかF90以降の現代風にすると、
もっとエラーが容易に見つかる確率が上がると思う。
関数の定義の所がおかしい。x(n),y(n)→x,y
IMPLICIT文の文法がおかしい。括弧で変数をくくる必要あり。
real*8 function func(x,y)
implicit real*8 (x,y)
今のコンパイラは多少のエラーがあっても、適宜仮定してコンパイルを
続行するが、いまfunction定義の頭部が無視されてコンパイル続行されたため
end文が2回出てきて二個メインプログラムがあるように解釈されたと思われ。
F77的な古典的な書き方をしていて、77本を真面目に勉強しているのだと思うが、
(それはそれで大変結構だが)
副プログラムをMODULEに入れるとかF90以降の現代風にすると、
もっとエラーが容易に見つかる確率が上がると思う。
218デフォルトの名無しさん
2013/07/01(月) NY:AN:NY.AN 最近の大学では数値計算+Fortranの教科書は何を使ってるんだい?
コンピュータの数値計算一切やらないまま入ってくる学生がいて自習してほしいんだが
ヤングに嫌がられないお勧めあるかね?
コンピュータの数値計算一切やらないまま入ってくる学生がいて自習してほしいんだが
ヤングに嫌がられないお勧めあるかね?
219デフォルトの名無しさん
2013/07/05(金) NY:AN:NY.AN ナウいヤング向けの言語はJavaとかか
220デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN 自由端反射のプログラムで質問です。
program wave
implicit none
real,dimension(5,0:30)::f
integer::i,n,p,q,r,s,t,u,k
do s=0,30
do q=1,5
f(q,s)=0
end do
end do
do n=1,300
f(3,30)=0
f(3,0)=exp(-((n-30.)/10.)**2)
do k=0,28
f(3,k+1)=2*f(4,k)-f(5,k)+(f(4,k+1)-2*f(4,k)+f(4,k-1))/4.
end do
program wave
implicit none
real,dimension(5,0:30)::f
integer::i,n,p,q,r,s,t,u,k
do s=0,30
do q=1,5
f(q,s)=0
end do
end do
do n=1,300
f(3,30)=0
f(3,0)=exp(-((n-30.)/10.)**2)
do k=0,28
f(3,k+1)=2*f(4,k)-f(5,k)+(f(4,k+1)-2*f(4,k)+f(4,k-1))/4.
end do
221デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN do p=0,30
f(1,p)=n
f(2,p)=p
write(*,*)f(1,p),f(2,p),f(3,p)
end do
write(*,*)
do t=0,30
f(5,t)=f(4,t)
f(4,t)=f(3,t)
end do
end do
end program wave
f(1,p)=n
f(2,p)=p
write(*,*)f(1,p),f(2,p),f(3,p)
end do
write(*,*)
do t=0,30
f(5,t)=f(4,t)
f(4,t)=f(3,t)
end do
end do
end program wave
222デフォルトの名無しさん
2013/07/11(木) NY:AN:NY.AN というプログラムを出力した結果たしか
1. 0. 0.00223
1. 1. 1.4848
ってなって最初fを全部0にしたのにf(3.2)が1.4848となります、何が悪いでしょうか?
1. 0. 0.00223
1. 1. 1.4848
ってなって最初fを全部0にしたのにf(3.2)が1.4848となります、何が悪いでしょうか?
223デフォルトの名無しさん
2013/07/12(金) NY:AN:NY.AN >>222
do k=0,28
f(3,k+1)=2*f(4,k)-f(5,k)+(f(4,k+1)-2*f(4,k)+f(4,k-1))/4.
end do
これでk=0の時、f(4,k-1)→f(4,-1)で配列はみだしだからじゃないか?
まずdebug mode サブスクリプト・チェックをかけて実行しろ!
do k=0,28
f(3,k+1)=2*f(4,k)-f(5,k)+(f(4,k+1)-2*f(4,k)+f(4,k-1))/4.
end do
これでk=0の時、f(4,k-1)→f(4,-1)で配列はみだしだからじゃないか?
まずdebug mode サブスクリプト・チェックをかけて実行しろ!
224デフォルトの名無しさん
2013/08/02(金) NY:AN:NY.ANID:Kz7Qk8/h! openmp を使って並列化しようと思ってるんですが、スレッドセーフな副プログラムを作るのに気をつけるのってどういう点ですか?
save と common を使わなければいいだけでしょうか。
save を避けなければならないばあい、擬似乱数のように前の状態を保存しておかなければならないような副プログラムはどうやって作ったらいいでしょうか。
save と common を使わなければいいだけでしょうか。
save を避けなければならないばあい、擬似乱数のように前の状態を保存しておかなければならないような副プログラムはどうやって作ったらいいでしょうか。
225デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN 引数で前の状態を渡し、引数に次の状態を戻す
呼び出し元スレッドと内容を共有するので、実引数は
private なのか share なのか明らかにすること
呼び出し元スレッドと内容を共有するので、実引数は
private なのか share なのか明らかにすること
226デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.ANID:zEmYUazP! なるほど。ありがとうございます。
227デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN OpenMPとの整合はよく分からんが、F95以降では
pure接頭子で依存性の無さを保証できる。
というかコンパイラがチェックしてくれる。
pure接頭子で依存性の無さを保証できる。
というかコンパイラがチェックしてくれる。
228デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN Visual Basicで下記のバイナリ出力したグリッドをfortranで読み込ませようとしてますが,
できません.input statement requires too much data, unit 10
とでます.
できません.input statement requires too much data, unit 10
とでます.
229デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN Dim doutpgrid As New System.IO.BinaryWriter(New System.IO.FileStream(Outputfile, IO.FileMode.Create, IO.FileAccess.Write))
For i = 1 To nz
For k = 1 To ny
For j = 1 To nx
doutpgrid.Write(nheader)
doutpgrid.Write(dblX(j, k, i)) : doutpgrid.Write(dbly(j, k, i)) : doutpgrid.Write(dblz(j, k, i))
doutpgrid.Write(nfooter)
Next j
Next k
Next l
For i = 1 To nz
For k = 1 To ny
For j = 1 To nx
doutpgrid.Write(nheader)
doutpgrid.Write(dblX(j, k, i)) : doutpgrid.Write(dbly(j, k, i)) : doutpgrid.Write(dblz(j, k, i))
doutpgrid.Write(nfooter)
Next j
Next k
Next l
230デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN open(10,file='grid.dat',form='unformatted')
do 115 k=1,kmax1
do 115 j=1,jmax1
do 115 i=1,imax1
read(10) xd(i,j,k),yd(i,j,k),zd(i,j,k)
115 continue
close(10)
です.誰か教えてくださいnheaderなどはinteger, dblXはdoubleです.
do 115 k=1,kmax1
do 115 j=1,jmax1
do 115 i=1,imax1
read(10) xd(i,j,k),yd(i,j,k),zd(i,j,k)
115 continue
close(10)
です.誰か教えてくださいnheaderなどはinteger, dblXはdoubleです.
231デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN VBの事は、よく分からんが、少なくともFortran側でnheaderとnfooterを読むか
読み飛ばすかしないと、つじつまが合わないだろう。
いきなりエラーが出るなら、nheaderのintegerを三個の倍精度で読もうとして
要素が足りないと叱られたと思われる。
バイナリだとずれたまま読みそうな気もするが・・・
読み飛ばすかしないと、つじつまが合わないだろう。
いきなりエラーが出るなら、nheaderのintegerを三個の倍精度で読もうとして
要素が足りないと叱られたと思われる。
バイナリだとずれたまま読みそうな気もするが・・・
232デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN unformatted で sequential なファイルは次のレコード(記録)の組を飛ばすのに
何バイト読み進めればいいかを各レコードの前後に整数値として記録しているらしい
レコードは1文の read/write で扱われる単位とみていいはず
(このせいで妙にファイルサイズが膨らんだりする)
>>229 nheader と nfooter の値を確認
何バイト読み進めればいいかを各レコードの前後に整数値として記録しているらしい
レコードは1文の read/write で扱われる単位とみていいはず
(このせいで妙にファイルサイズが膨らんだりする)
>>229 nheader と nfooter の値を確認
233デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN シーケンシャルなUnformattedなら、Fortran独自の形式だからVBの出力は
読めない気もする。
>>232の言うとおり、Fortranでは読みとばしとBACKSPACEでの逆行のために、
各レコードの前後にレコード長が記録されている。
F2003からの機能だが、STREAMモードで読むか、あるいはF77にこだわるなら
DIRECT形式で無理やり読む方法がある。どちらも読み込み単位が処理系によって
BYTEだったりWORDだったり依存性がるので調べる必要がある。
またDIRECT形式は大抵は普通にべた書きだが、処理系によってはヘッダが付いたりするので
これも調べる必要がある。
よく分かんないんだったら、素直に書式付とかCVS形式とかで出して
読むのが吉。
読めない気もする。
>>232の言うとおり、Fortranでは読みとばしとBACKSPACEでの逆行のために、
各レコードの前後にレコード長が記録されている。
F2003からの機能だが、STREAMモードで読むか、あるいはF77にこだわるなら
DIRECT形式で無理やり読む方法がある。どちらも読み込み単位が処理系によって
BYTEだったりWORDだったり依存性がるので調べる必要がある。
またDIRECT形式は大抵は普通にべた書きだが、処理系によってはヘッダが付いたりするので
これも調べる必要がある。
よく分かんないんだったら、素直に書式付とかCVS形式とかで出して
読むのが吉。
234デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN gfortranでポインタの初期値をnullにするコンパイルオプションをおしえていただけないでしょうか。
Linux上でintel fortran compilerでコンパイルしていたものを
windows上で動作させるために、g95とgfortranでコンパイルしようとしました。
ifortではデフォルトでポインタはallocateされていないのですが
g95やgfortranではそうではないようです。
g95では-fpointer=nullで初期値をnullにできるのですが
私のソースコードをコンパイルすると、コンパイラの内部エラーと言われます。
gfortranでは上記に対応するコンパイルオプションはないでしょうか
Linux上でintel fortran compilerでコンパイルしていたものを
windows上で動作させるために、g95とgfortranでコンパイルしようとしました。
ifortではデフォルトでポインタはallocateされていないのですが
g95やgfortranではそうではないようです。
g95では-fpointer=nullで初期値をnullにできるのですが
私のソースコードをコンパイルすると、コンパイラの内部エラーと言われます。
gfortranでは上記に対応するコンパイルオプションはないでしょうか
235デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN internal compilation error って要するにコンパイラーのバグなんじゃ…
236デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN 初心者というか入り口にすら立ってないため質問させていただきます。
MUMPSっていうライブラリをMinGW環境で使いたいため
g95ってコンパイラをダウンロードしようとしているのですが
公式ページでもファイルが見つかりません。となって困ってます
みなさん、g95はどこから入手されているのでしょうか?
それともg95-MingW.exeが消されたのには何か理由があるのでしょうか?
MUMPSっていうライブラリをMinGW環境で使いたいため
g95ってコンパイラをダウンロードしようとしているのですが
公式ページでもファイルが見つかりません。となって困ってます
みなさん、g95はどこから入手されているのでしょうか?
それともg95-MingW.exeが消されたのには何か理由があるのでしょうか?
237デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN g95は最近メンテされてないから、gFortranでいけ。
たぶん大丈夫。
たぶん大丈夫。
238デフォルトの名無しさん
2013/09/10(火) 14:58:43.49 do 1100 III=1,400
*
if(QQP(III).eq.0.) go to 1100
NP=ifix(QPP*QQP(III))
*
do 1000 I=1,NP
*
E0=float(III)*50.-25. !
* Incident point 4mmφ
60 do IJK=1,2
IY(KR)=mod(IY(KR)+IY(JR),mmd)
X(IJK)=float(IY(KR)+1)/dmd
JR=JR-1
if(JR.eq.0) JR=55
KR=KR-1
if(KR.eq.0) KR=55
end do
*
if(QQP(III).eq.0.) go to 1100
NP=ifix(QPP*QQP(III))
*
do 1000 I=1,NP
*
E0=float(III)*50.-25. !
* Incident point 4mmφ
60 do IJK=1,2
IY(KR)=mod(IY(KR)+IY(JR),mmd)
X(IJK)=float(IY(KR)+1)/dmd
JR=JR-1
if(JR.eq.0) JR=55
KR=KR-1
if(KR.eq.0) KR=55
end do
239デフォルトの名無しさん
2013/09/10(火) 15:00:46.05 CX00=(1.-X(1))*0.4
CY00=(1.-X(2))*0.4
*
CX0=25.+CX00 !
CY0=25.+CY00 !
CZ0=0. !
*
CA2=1.
SA2=0.
CB2=1.
SB2=0.
*
JJJ=1
JJJJ=0
*
* --------------------------------------------------------------
*
70 JJJJJ=0
*
if(E0.lt.10.) go to 880
*
XE0=log(E0)
ka=2
72 if(E0.lt.ATTEN(5,ka)) then
XAT11=log(ATTEN(1,ka))
CY00=(1.-X(2))*0.4
*
CX0=25.+CX00 !
CY0=25.+CY00 !
CZ0=0. !
*
CA2=1.
SA2=0.
CB2=1.
SB2=0.
*
JJJ=1
JJJJ=0
*
* --------------------------------------------------------------
*
70 JJJJJ=0
*
if(E0.lt.10.) go to 880
*
XE0=log(E0)
ka=2
72 if(E0.lt.ATTEN(5,ka)) then
XAT11=log(ATTEN(1,ka))
240デフォルトの名無しさん
2013/09/20(金) 09:08:24.47 なんだどうした?
241デフォルトの名無しさん
2013/09/26(木) 12:57:51.56 pointer(pvar,var(*))
これってどういう意図ですか?
これってどういう意図ですか?
242デフォルトの名無しさん
2013/09/26(木) 13:30:22.80 メモリポインタ
243デフォルトの名無しさん
2013/09/26(木) 22:50:44.43 それはクレイ・ポインタと呼ばれるもので、クレイのFortranにあった非標準命令。
だがクレイが普及していたアメリカでは準標準みたいになったので、いまでも結構多くのFortranで使える。
まぁFortran2003の命令で、(工夫すれば)置き換え可能なので、もうあまり使われない。
POINTER (pointer, pointee)
ポインタ(整数変数)にはポイントされるもの(pointee)の番地が入るようになる。
だがクレイが普及していたアメリカでは準標準みたいになったので、いまでも結構多くのFortranで使える。
まぁFortran2003の命令で、(工夫すれば)置き換え可能なので、もうあまり使われない。
POINTER (pointer, pointee)
ポインタ(整数変数)にはポイントされるもの(pointee)の番地が入るようになる。
244デフォルトの名無しさん
2013/10/01(火) 12:17:05.23245デフォルトの名無しさん
2013/10/02(水) 00:38:14.04 >>244
両方非標準。
FORTRAN77以前では動的にメモリーを確保するための拡張命令があったり、
あるいはCのルーチンをリンクしていた。
Fotran90以降ではallocate命令が入った。
そのプログラムが書かれた対象マシンが分かるなら、ググればそれ用のFORTRAN77のリファレンス・マニュアルが落ちていると思う。
両方非標準。
FORTRAN77以前では動的にメモリーを確保するための拡張命令があったり、
あるいはCのルーチンをリンクしていた。
Fotran90以降ではallocate命令が入った。
そのプログラムが書かれた対象マシンが分かるなら、ググればそれ用のFORTRAN77のリファレンス・マニュアルが落ちていると思う。
246デフォルトの名無しさん
2013/10/08(火) 10:10:31.65247デフォルトの名無しさん
2013/10/13(日) 00:13:41.19 77で書いてあるプログラムが今のコンパイラで動くようにデバックしているのですが
common文で宣言している変数をmoduleでグローバル変数に変えたら、equivalence文でエラーが出てしまいます。
そこでこのequivalence文のところを変えようと思うのですが、90/95ので代わりとなる構文ってありますか?
common文で宣言している変数をmoduleでグローバル変数に変えたら、equivalence文でエラーが出てしまいます。
そこでこのequivalence文のところを変えようと思うのですが、90/95ので代わりとなる構文ってありますか?
248デフォルトの名無しさん
2013/10/13(日) 01:48:53.15 >>247
直接の代替はない。
Fortran90/95で推奨されているEQUIVALENCEの代替は、TRANSFER関数でメモリー内容を別メモリーに
移せというもの。EQUIVALENCEのメモリー共有とは違い、二つの変数間の型変換を伴わない内容の代入にあたる。
古い時代にCOMMONやEQUIVALENCEがあったのはメモリーが少なくて、同じ領域を使いまわしたかったから。
COMMONやEQUIVALENCEによるメモリー共用が、コンパイラの最適化を妨げるから廃止に向かった。
COMMONを単なるグローバル変数とみなすと、移植で非常にめんどくさいことになることがままある。
なおFORTRAN77はFortran90に完全に含まれているので、今のコンパイラでも多少のオプション変更で書き直さなくても動くはず。
直接の代替はない。
Fortran90/95で推奨されているEQUIVALENCEの代替は、TRANSFER関数でメモリー内容を別メモリーに
移せというもの。EQUIVALENCEのメモリー共有とは違い、二つの変数間の型変換を伴わない内容の代入にあたる。
古い時代にCOMMONやEQUIVALENCEがあったのはメモリーが少なくて、同じ領域を使いまわしたかったから。
COMMONやEQUIVALENCEによるメモリー共用が、コンパイラの最適化を妨げるから廃止に向かった。
COMMONを単なるグローバル変数とみなすと、移植で非常にめんどくさいことになることがままある。
なおFORTRAN77はFortran90に完全に含まれているので、今のコンパイラでも多少のオプション変更で書き直さなくても動くはず。
249デフォルトの名無しさん
2013/10/13(日) 13:51:31.72250デフォルトの名無しさん
2013/10/15(火) 22:40:32.54 初期値も何も与えてない変数の値って0ですよね?
それが0ではなくとてつもなくおおきな値になることってありますか?
それが0ではなくとてつもなくおおきな値になることってありますか?
251デフォルトの名無しさん
2013/10/15(火) 22:51:06.34 いいえ
はい
はい
252デフォルトの名無しさん
2013/10/15(火) 23:17:41.03 >>251
まじっすか
まじっすか
253デフォルトの名無しさん
2013/10/16(水) 01:37:15.62 変数がゼロになってるなんて思ってたのかよw
コップや皿を洗わないで飲み食いするタイプか?
コップや皿を洗わないで飲み食いするタイプか?
254デフォルトの名無しさん
2013/10/16(水) 01:42:01.37 規格上は不定らしいよ。
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14106144349
ttp://ruby.gfd-dennou.org/products/ruby-dcl/ruby-dcl-doc/math1/node9.html
超初心者用スレなのに、みんな厳しいね…
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14106144349
ttp://ruby.gfd-dennou.org/products/ruby-dcl/ruby-dcl-doc/math1/node9.html
超初心者用スレなのに、みんな厳しいね…
255デフォルトの名無しさん
2013/10/16(水) 02:01:47.72 初心者スレだったか、めんごめんご、すまんこ、おまんこ。
昔の日本の大型計算機のFORTRANは0クリアしていることが多かった。
IBMはごみだらけの状態でよこしてた。
今もリンカのオプションでゼロクリアできるものが多い。
昔の日本の大型計算機のFORTRANは0クリアしていることが多かった。
IBMはごみだらけの状態でよこしてた。
今もリンカのオプションでゼロクリアできるものが多い。
256デフォルトの名無しさん
2013/10/16(水) 23:48:35.58 なるほろ〜不定なんですね。
いや実は昔のプログラムを今のコンパイラで動かしているところなんですが
通常なら0であるぺき変数が変な値になってしまいうまく動かなかったんです。
オプションで0クリアにしたらうごくかもしれません。ありがとうございました。
いや実は昔のプログラムを今のコンパイラで動かしているところなんですが
通常なら0であるぺき変数が変な値になってしまいうまく動かなかったんです。
オプションで0クリアにしたらうごくかもしれません。ありがとうございました。
257デフォルトの名無しさん
2013/11/07(木) 23:56:00.54 ほ
258デフォルトの名無しさん
2013/11/08(金) 11:47:40.89 デバッグしているのですが
THDFEというサブルーチンで仮引数(x)を動的割付け配列で宣言し直したところ
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
とエラーが出たんですが。意味がわかりません。詳しく教えて下さいm(__)m
THDFEというサブルーチンで仮引数(x)を動的割付け配列で宣言し直したところ
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
とエラーが出たんですが。意味がわかりません。詳しく教えて下さいm(__)m
259デフォルトの名無しさん
2013/11/09(土) 00:08:06.89 この質問じゃ情報少なすぎ。
せめてエラーメッセージそのものを貼るべき。
まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
せめてエラーメッセージそのものを貼るべき。
まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
260デフォルトの名無しさん
2013/11/09(土) 10:26:20.66 >>259
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
一応これがエラーメッセージそのものなんです。
>>まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
THDFEは外部副プログラムなんですが。このブロックでの仮引数は割付属性を持たないってことでいいんでしょうか?
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
一応これがエラーメッセージそのものなんです。
>>まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
THDFEは外部副プログラムなんですが。このブロックでの仮引数は割付属性を持たないってことでいいんでしょうか?
261デフォルトの名無しさん
2013/11/09(土) 13:01:13.70 それはエラーメッセージそのものじゃないだろ。
エラー番号とか全部込々で貼れよ。
質問の仕方が悪いといつまでも答えが出ないぞ。
大体、サブルーチン側で文句を言われているのか、呼び出し側で文句を言われているのか
それすら判然としないだろ。
エラー番号とか全部込々で貼れよ。
質問の仕方が悪いといつまでも答えが出ないぞ。
大体、サブルーチン側で文句を言われているのか、呼び出し側で文句を言われているのか
それすら判然としないだろ。
262デフォルトの名無しさん
2013/11/09(土) 16:41:00.84 >>261
すみません・・・
これがエラーメッセージです。
実行時エラー: ../sorcefile(先生)/HTHDFE.f90(1): THDFEにおいて存在しないもしくは誤った引用仕様ブロックです - 仮引数X(第3番目)は割付け配列です
致命的なエラーでプログラムが終了しました
サブルーチン(THDFE)側のほうでエラーメッセージがでます。
すみません・・・
これがエラーメッセージです。
実行時エラー: ../sorcefile(先生)/HTHDFE.f90(1): THDFEにおいて存在しないもしくは誤った引用仕様ブロックです - 仮引数X(第3番目)は割付け配列です
致命的なエラーでプログラムが終了しました
サブルーチン(THDFE)側のほうでエラーメッセージがでます。
263デフォルトの名無しさん
2013/11/09(土) 19:18:40.37 >>262
interface文を書いてないとか?
それと仮引数に割り付け配列を指定できるのはFortran2003以降のはず。
Fortran95の拡張仕様TR15581をコンパイラがサポートしていれば問題ないけど。
interface文を書いてないとか?
それと仮引数に割り付け配列を指定できるのはFortran2003以降のはず。
Fortran95の拡張仕様TR15581をコンパイラがサポートしていれば問題ないけど。
264デフォルトの名無しさん
2013/11/09(土) 19:54:41.21265デフォルトの名無しさん
2013/11/09(土) 20:33:20.29 integerfaceじゃなくてinterfaceなw
266デフォルトの名無しさん
2013/11/09(土) 21:14:09.73 >>264
手元にあるFortran2003の言語仕様(draft)の257頁から抜粋すると
"A procedure shall have an explicit interface if it is referenced and
The procedure has a dummy argument that has the ALLOCATABLE attribute"
となっている。"explicit interface"が必須だからinterface文を書けばいいと思う。
それと、紛らわしいのでFortran2003ならファイルの拡張子も変えたら?
手元にあるFortran2003の言語仕様(draft)の257頁から抜粋すると
"A procedure shall have an explicit interface if it is referenced and
The procedure has a dummy argument that has the ALLOCATABLE attribute"
となっている。"explicit interface"が必須だからinterface文を書けばいいと思う。
それと、紛らわしいのでFortran2003ならファイルの拡張子も変えたら?
267デフォルトの名無しさん
2013/11/10(日) 00:04:40.45268デフォルトの名無しさん
2013/11/10(日) 00:04:41.77 interface 書くより、サブルーチンをmoduleに入れたほうが楽でいいぞ。
269デフォルトの名無しさん
2013/11/10(日) 00:13:46.52 スレ違いかもしれないけど、とあるf77プログラムのクローンを作りたいのだけど、
どこまでやれば別のプログラムと認められるんだろう?
入出力仕様や数式まで立ち帰って、スクラッチから書けば完璧なんだろうけど、
作業量的に厳しいというのが本音。
固定形式から自由形式に書き換えた程度じゃダメかな。
参考になるようなサイトとか有れば教えてください。
どこまでやれば別のプログラムと認められるんだろう?
入出力仕様や数式まで立ち帰って、スクラッチから書けば完璧なんだろうけど、
作業量的に厳しいというのが本音。
固定形式から自由形式に書き換えた程度じゃダメかな。
参考になるようなサイトとか有れば教えてください。
270デフォルトの名無しさん
2013/11/10(日) 00:23:01.23 引用とか数行とかの範疇を超えて、見ながら書いたのなら原型を留めてなくても派生物じゃね?
極端な話他言語に移植しても、ロジックが同じなら派生物
極端な話他言語に移植しても、ロジックが同じなら派生物
271デフォルトの名無しさん
2013/11/10(日) 00:28:13.72 横からすまんが、Intel Fortranではソース・ファイルの拡張子は、
固定形式が.fないし.forで、自由形式は.f90になっていて、
.f95とか.f03とかは、存在が間違っているとされているんだが、
ホントのとこはどうなの?
固定形式が.fないし.forで、自由形式は.f90になっていて、
.f95とか.f03とかは、存在が間違っているとされているんだが、
ホントのとこはどうなの?
272デフォルトの名無しさん
2013/11/10(日) 00:35:04.17 >>271
Intel Fortran compiler 14.0のリファレンスではそうなっている。
Intel Fortran compiler 14.0のリファレンスではそうなっている。
273デフォルトの名無しさん
2013/11/10(日) 02:11:25.87274デフォルトの名無しさん
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 としても駄目でした。)
お教え頂けますと大変ありがたいです。
どうぞよろしくお願い致します。
いらっしゃいましたら、アドバイスを頂けないでしょうか。
勉強のために下記のテストコードを書いてみました。
まず、整数型配列 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
どうぞよろしくお願い致します。
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.41278デフォルトの名無しさん
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)]
イマイチ何がしたのか分からんが、こうすれば一応望みの結果は得られる。
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)]
279デフォルトの名無しさん
2013/11/10(日) 23:56:18.99 [ ]はFortran2003、F90/95なら(/ /)で。配列構成子(array constructor)
倍精度実数と整数をEquivalenceで同じ番地を共有させているから、
整数2個毎が倍精度実数1個に対応している。
(KINDの数字は必ずしもバイト数に対応すると限らないが、慣習から仮定して)
エンディアンによって、メモリー上の倍精度実数の上位と下位が入れ替わるので
適宜対応する必要がある。
それをF90以降のTRANSFER関数で、メモリー内容を第二引数の型で解釈している。
単精度実数なら他に単にFORMATを実数用にして強行突破する方法も考えられる。
倍精度の時は難しいかな??
倍精度実数と整数をEquivalenceで同じ番地を共有させているから、
整数2個毎が倍精度実数1個に対応している。
(KINDの数字は必ずしもバイト数に対応すると限らないが、慣習から仮定して)
エンディアンによって、メモリー上の倍精度実数の上位と下位が入れ替わるので
適宜対応する必要がある。
それをF90以降のTRANSFER関数で、メモリー内容を第二引数の型で解釈している。
単精度実数なら他に単にFORMATを実数用にして強行突破する方法も考えられる。
倍精度の時は難しいかな??
280デフォルトの名無しさん
2013/11/14(木) 00:03:06.56 Fortran2015に関するまとめサイトとかないかね?
今度は何を付け加えるのさ?
今度は何を付け加えるのさ?
281デフォルトの名無しさん
2013/11/19(火) 00:19:07.21 すんません。
数値計算する際、expとかの値が大きすぎたり、小さすぎたりしてオーバーフローしたり、exp(x)のx が限りなくゼロに近い時とか、欲しい値が得られません。
みんなはどうやって回避してますか?
よくよく考えたらexp1000 とかオーバーフローしますよね。
数値計算する際、expとかの値が大きすぎたり、小さすぎたりしてオーバーフローしたり、exp(x)のx が限りなくゼロに近い時とか、欲しい値が得られません。
みんなはどうやって回避してますか?
よくよく考えたらexp1000 とかオーバーフローしますよね。
282デフォルトの名無しさん
2013/11/19(火) 10:23:13.29 ここの人はフォートランはわからないから他いけ
283デフォルトの名無しさん
2013/11/19(火) 18:58:29.45284デフォルトの名無しさん
2013/11/19(火) 19:01:27.99 書き込んでから気付いたが、もしexp(1000)の値を実際に表示したいのなら
多倍長計算とかしかないな
多倍長計算とかしかないな
285デフォルトの名無しさん
2013/11/19(火) 23:54:23.18286デフォルトの名無しさん
2013/11/21(木) 22:58:26.48 プランク常数とか絡むなら、それを1に規格化して計算するのが常識だろ。
まず少し基礎的な本から読め。
まず少し基礎的な本から読め。
287デフォルトの名無しさん
2013/11/23(土) 22:34:38.75 みんなどんな環境でやってるんだろ
Cygwin+Emacs?
Cygwin+Emacs?
288デフォルトの名無しさん
2013/11/24(日) 13:01:18.20 コマンドプロンプト+メモ帳 まじで
289デフォルトの名無しさん
2013/11/24(日) 17:24:01.41290デフォルトの名無しさん
2013/11/24(日) 17:42:02.66 >>289
言語の本より数値計算(数学)の本のがいいんでないか?
言語の本より数値計算(数学)の本のがいいんでないか?
291デフォルトの名無しさん
2013/11/26(火) 01:02:17.85 >>289
伊理正夫の「数値計算の常識」の中に無次元化の章があったはず。
大した事書いてないが常識として程度は知っておくべき。
大体、無次元化していないと、素人・非常識・DQN・支那チョン・ごみ・カス・クズ扱いされる。
この本の前半は面白いし為になるので買って損はない。
シュレディンガー方程式を解きたいんだったら、原子スペクトルの本なら大抵、原子単位系(atomic unit)への変換の章が
頭の方にある(エネルギーをハートリー、長さをボーア半径にする)。この辺は少し詳しい量子力学の本にもある。
まぁ今ではエネルギーの単位をハートリーでなくてリードベルグに取ることが多い気もするが。
クーロン項の分子が1になるか2になるかの違いだ。
伊理正夫の「数値計算の常識」の中に無次元化の章があったはず。
大した事書いてないが常識として程度は知っておくべき。
大体、無次元化していないと、素人・非常識・DQN・支那チョン・ごみ・カス・クズ扱いされる。
この本の前半は面白いし為になるので買って損はない。
シュレディンガー方程式を解きたいんだったら、原子スペクトルの本なら大抵、原子単位系(atomic unit)への変換の章が
頭の方にある(エネルギーをハートリー、長さをボーア半径にする)。この辺は少し詳しい量子力学の本にもある。
まぁ今ではエネルギーの単位をハートリーでなくてリードベルグに取ることが多い気もするが。
クーロン項の分子が1になるか2になるかの違いだ。
292デフォルトの名無しさん
2013/11/27(水) 07:09:22.09293デフォルトの名無しさん
2013/12/31(火) 13:22:54.27 データから近似式を出すソフトみたいのないですかね?できればフリーで。
Fitykではなんだかできなかった…
Fitykではなんだかできなかった…
294デフォルトの名無しさん
2014/01/01(水) 00:01:57.16 それはFORTRANスレで聞く内容じゃない
295デフォルトの名無しさん
2014/01/01(水) 02:29:24.68296デフォルトの名無しさん
2014/01/01(水) 12:29:00.04 >>295
何でそう思ったの?
何でそう思ったの?
297デフォルトの名無しさん
2014/01/01(水) 15:03:32.78 294ではないがプログラム板でフリーソフトのFitykを比較対象にするのは板違いでは?
「関数近似のFORTRANライブラリはありませんか?」ならわかるが
質問内容からすると自分でプログラムを作りたいのではなさそうだが
「関数近似のFORTRANライブラリはありませんか?」ならわかるが
質問内容からすると自分でプログラムを作りたいのではなさそうだが
298デフォルトの名無しさん
2014/01/03(金) 08:15:54.32 >>297
すんません、質問者です。
スレ違いなのはわかるんですが、学術的用途に精通してそうな人間が集まる板というかスレ住人が、フォートランスレに1番多いと考えたので質問しました。
今回は目をつむって、近似式出すソフトウェアってなんでしょうか?の質問に答えていただけたら幸いです
すんません、質問者です。
スレ違いなのはわかるんですが、学術的用途に精通してそうな人間が集まる板というかスレ住人が、フォートランスレに1番多いと考えたので質問しました。
今回は目をつむって、近似式出すソフトウェアってなんでしょうか?の質問に答えていただけたら幸いです
299デフォルトの名無しさん
2014/01/03(金) 11:47:30.77 君が欲しいソフトは無いよ
どの関数で近似するかは人間が決めること
ソフトが決めることではない
どの関数で近似するかは人間が決めること
ソフトが決めることではない
300デフォルトの名無しさん
2014/01/03(金) 15:49:36.03 Excelでやれば?あれで十分じゃない。
301デフォルトの名無しさん
2014/01/04(土) 13:39:47.75 gnuplot 使ってやったことありますがどうでしょう?私がやったのは多項式だけですが任意の関数に対してフィッティングできるようです。
302デフォルトの名無しさん
2014/01/04(土) 16:39:19.25 >301
gnuplotでは,splineとbezier補間してグラフを画く
機能がありますが,それ以外に任意の函数のフィッテイング
機能ってありますか?
gnuplotでは,splineとbezier補間してグラフを画く
機能がありますが,それ以外に任意の函数のフィッテイング
機能ってありますか?
303デフォルトの名無しさん
2014/01/04(土) 16:43:44.90304デフォルトの名無しさん
2014/01/10(金) 10:31:33.86 正月早々下層階級出身の発達障害みたいなのが湧いたなw
アスペ野郎は、よそのスレに行けよ、HaskellスレとかMLスレに行けば仲間がいっぱいいるぞ。
ここは毎年この時期は卒業研究で焦りまくった学生さんの駆け込み寺なんだからさ。
アスペ野郎は、よそのスレに行けよ、HaskellスレとかMLスレに行けば仲間がいっぱいいるぞ。
ここは毎年この時期は卒業研究で焦りまくった学生さんの駆け込み寺なんだからさ。
305デフォルトの名無しさん
2014/01/12(日) 15:17:29.69 だなwスレタイくらいは読めよと
306デフォルトの名無しさん
2014/01/14(火) 01:43:43.02 ちょっとお聞きしたいのですが、
読み込むファイルの数値データが"〜〜"のダブルクオーテーションで囲まれているのですが、
これを文字列でなく数値で読み込むことはできないでしょうか?
ファイルの"をすべて消すことも考えたのですが、文字列として読み込みたいところもあるので避けたいです
すいませんがよろしくお願いします。
読み込むファイルの数値データが"〜〜"のダブルクオーテーションで囲まれているのですが、
これを文字列でなく数値で読み込むことはできないでしょうか?
ファイルの"をすべて消すことも考えたのですが、文字列として読み込みたいところもあるので避けたいです
すいませんがよろしくお願いします。
307デフォルトの名無しさん
2014/01/14(火) 06:48:50.39 一度文字列として読み込んで、その文字列から数値として読み込む
例えばこんな感じ(valueが数値の変数、cvalueが文字列の変数)
read(*,*) cvalue
read(cvalue,*) value
例えばこんな感じ(valueが数値の変数、cvalueが文字列の変数)
read(*,*) cvalue
read(cvalue,*) value
308デフォルトの名無しさん
2014/01/14(火) 19:51:34.68309デフォルトの名無しさん
2014/01/18(土) 11:40:25.48 すいませんがご教示ください
integer,dimension(99999,20000000)::aaの配列でifortでコンパイルしようとすると
再配置がオーバーフローしないように切り詰められました
と出ます。配列の数を小さくするとコンパイルできます。
配列が大きいから出ているエラーと思うのですが、なにか対策はないでしょうか。よろしくお願いします。
integer,dimension(99999,20000000)::aaの配列でifortでコンパイルしようとすると
再配置がオーバーフローしないように切り詰められました
と出ます。配列の数を小さくするとコンパイルできます。
配列が大きいから出ているエラーと思うのですが、なにか対策はないでしょうか。よろしくお願いします。
310309
2014/01/18(土) 12:21:08.98 スレを読み直してallocatableを使うことでコンパイルはできました。
すいませんありがとうございました
すいませんありがとうございました
311デフォルトの名無しさん
2014/01/18(土) 13:05:10.95 乙 俺も勉強になった
312デフォルトの名無しさん
2014/01/20(月) 21:57:41.73 すみませんが、ちょっと教えてください。
Intel MKLのpardisoで、LU分解後のLとUを取り出すためにはどうしたらいいのでしょうか?
Intel MKLのpardisoで、LU分解後のLとUを取り出すためにはどうしたらいいのでしょうか?
313デフォルトの名無しさん
2014/01/21(火) 18:52:17.93 すみません。セグメンテーション違反って何ですか?
314デフォルトの名無しさん
2014/01/21(火) 21:15:53.71 OSがゴミってこと
315デフォルトの名無しさん
2014/01/30(木) 21:30:13.25 G95をダウンロードしたいのですが、
Windows版のFTPでは、
530 Login authentication failed
(認証に失敗)
とでるのですが、どこで認証を得られるのでしょうか。
Windows版のFTPでは、
530 Login authentication failed
(認証に失敗)
とでるのですが、どこで認証を得られるのでしょうか。
316デフォルトの名無しさん
2014/01/30(木) 22:40:27.48 httpじゃ何か問題あったの
317デフォルトの名無しさん
2014/01/31(金) 00:41:23.05 >316
httpではウンともスンとも言わないのです。
画面がフリーズしたままなので
httpではウンともスンとも言わないのです。
画面がフリーズしたままなので
318デフォルトの名無しさん
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を使った方が良い
リンクが生きているのはcygwinとLinux系だけみたいだね
MinGW版がひつようなら
http://www.fortran.com/the-fortran-company-homepage/whats-new/g95-windows-download/
けど、このページでも言っているようにG95はメンテナンスが停止しているみたいだし
素直にgfortranを使った方が良い
319デフォルトの名無しさん
2014/01/31(金) 08:17:46.37 >318
御教示ありがとうございます。
gfortranをダウンロードして使うことにします。
御教示ありがとうございます。
gfortranをダウンロードして使うことにします。
320デフォルトの名無しさん
2014/02/03(月) 00:35:08.25 上の方に無次元化の話が出ていましたが、これって数値計算の本ならちゃんと説明されているものですか?
ネットで検索してもあまりヒットしないし、あったとしてもやり方だけでそうする理由はあまり説明されていない気がします。
自分は先輩から教えてもらって初めて知りましたが、周りには知らない人が結構多いです。
伝統芸能の世界じゃないけど、「数値計算のテクニックは見て覚えろ」みたいな風潮を感じています。
とりあえず自分も「数値計算の常識」買ってみます。
ネットで検索してもあまりヒットしないし、あったとしてもやり方だけでそうする理由はあまり説明されていない気がします。
自分は先輩から教えてもらって初めて知りましたが、周りには知らない人が結構多いです。
伝統芸能の世界じゃないけど、「数値計算のテクニックは見て覚えろ」みたいな風潮を感じています。
とりあえず自分も「数値計算の常識」買ってみます。
321デフォルトの名無しさん
2014/02/03(月) 01:43:43.76 数値計算にかぎらず、適切なスケールで物理量を無次元化すると表式がすっきりするから、けっこう使われてるよ。
原子の議論をするときはオングストロームを使う、天文の議論をするときは光年を使う、つまり「対象に合わせた物差しを使いましょう」という程度の話だから、詳しく説明するほどのことではないかも。
「数値計算の常識」でも1ページくらいしか触れてなかった気がする。
原子の議論をするときはオングストロームを使う、天文の議論をするときは光年を使う、つまり「対象に合わせた物差しを使いましょう」という程度の話だから、詳しく説明するほどのことではないかも。
「数値計算の常識」でも1ページくらいしか触れてなかった気がする。
322デフォルトの名無しさん
2014/02/03(月) 02:32:24.50 でも、無次元化で数式を簡単にすることと、規格化をして数値誤差を防ぐことは別の話ではないのですか?
自分はこのへんの理解がまだ曖昧です。
数値計算系の研究室なので、無次元することが常識なのはよく知っていますが、
ちゃんと教えてもらったことは一度もないです。
自分で書いたコードをたまたま先輩が見る機会があって、そのときに指摘されて知りました。
他の人はどこでそういう常識を知っていったのかが気になります。
自分はこのへんの理解がまだ曖昧です。
数値計算系の研究室なので、無次元することが常識なのはよく知っていますが、
ちゃんと教えてもらったことは一度もないです。
自分で書いたコードをたまたま先輩が見る機会があって、そのときに指摘されて知りました。
他の人はどこでそういう常識を知っていったのかが気になります。
323デフォルトの名無しさん
2014/02/03(月) 02:41:03.77 他にも数値計算のデバッグテクニックとか先輩から教えてもらう機会はあるんですけど
ちゃんとした理論がよくわかってないのでとりあえずやってる状態なんですよね・・・
本でちゃんと勉強したいんですが、そういうのが書いてあるものが見つからないし。
愚痴ばっかですみません。スレ汚し失礼しました。
ちゃんとした理論がよくわかってないのでとりあえずやってる状態なんですよね・・・
本でちゃんと勉強したいんですが、そういうのが書いてあるものが見つからないし。
愚痴ばっかですみません。スレ汚し失礼しました。
324デフォルトの名無しさん
2014/02/03(月) 20:33:23.17 あ、ごめん。見なおしたら、「数値計算の常識」では6,7ページくらい使って説明されてたわ。
どこで学んだかと言われると、たしかによくわからない。
口伝かな。
どこで学んだかと言われると、たしかによくわからない。
口伝かな。
325デフォルトの名無しさん
2014/02/03(月) 22:40:36.33 そうですか!とりあえず買ってみます。
326デフォルトの名無しさん
2014/02/05(水) 01:20:23.89 物理の本では無次元化が必ず出てくるぞ。
量子力学とか割と基礎的なテキストで。
桁落ちのことを考えると、すべての量のオーダーがそろった方がいいしな。
量子力学とか割と基礎的なテキストで。
桁落ちのことを考えると、すべての量のオーダーがそろった方がいいしな。
327デフォルトの名無しさん
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を代入したらちゃんと表示されました)
倍精度の数値を表示させるにはどうしたらいいのでしょうか?
どうぞよろしくお願いいたします
うろ覚えの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を代入したらちゃんと表示されました)
倍精度の数値を表示させるにはどうしたらいいのでしょうか?
どうぞよろしくお願いいたします
328デフォルトの名無しさん
2014/02/24(月) 00:29:23.77 OSはLinuxか?
ライブラリかなんかの整合が取れていない気がする。
ライブラリかなんかの整合が取れていない気がする。
329デフォルトの名無しさん
2014/02/24(月) 01:05:53.35 プログラム自体の問題ではなく、実行ファイルが不正な命令を実行しようとしたのが原因。
それがコンパイラのバグなのか、コンパイラオプションや実行環境の問題なのかはわからん。
それがコンパイラのバグなのか、コンパイラオプションや実行環境の問題なのかはわからん。
330327
2014/02/24(月) 12:18:08.81 >>328-329
レスありがとうございます
OSはXPでコンパイラオプションは
-oだけ使ってます
文法の間違いでないと分かって
とりあえずひと安心しました
インストールしなおしとか旧バージョン
使うとかしてみます
たいへんどうもありがとうございました
レスありがとうございます
OSはXPでコンパイラオプションは
-oだけ使ってます
文法の間違いでないと分かって
とりあえずひと安心しました
インストールしなおしとか旧バージョン
使うとかしてみます
たいへんどうもありがとうございました
331デフォルトの名無しさん
2014/02/24(月) 12:46:33.66 >327
gfortranで実行したら、
2.0000000000000000
と結果がでてきましたよ
gfortranで実行したら、
2.0000000000000000
と結果がでてきましたよ
333デフォルトの名無しさん
2014/02/25(火) 00:34:40.34 >332
GNU Fortran 4.7.3
Windows 7 64bit
optionなし
です。
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
もう少しいろいろ調べてみます
長文失礼しました
ありがとうございます!
旧バージョンを使うと吉なのかもですね
こちらはその後、(再インストールの前に)プリント文を使わなくてもいいように
プログラムを改造してみたのですが……
ここで新たに、実はプリント文・ライト文に関係なく同じエラーが出ることがわかり、
ちょっとorzorzorz……な心境です
とりあえず、プログラムの作成と並行して、コンパイラの方もなんとかしてみたいです
ちなみに今回のエラーは、文法確認のために作った次のプログラムで出てきました
program checkpwr2
double precision dx, dxp2, dxp2d
dx = 2.0d0
dxp2 = dx**2
dxp2d = dx**2d0 ! ←ここでエラー発生
print *, dxp2, dxp2d
end
もう少しいろいろ調べてみます
長文失礼しました
335デフォルトの名無しさん
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, ...
...
みたいな感じに。
今module内のSubroutineからLAPACKのZGEEV呼ぼうとしているんですが、
LAPACKのサブルーチンって外部副プログラムですよね?
毎回interface文を書くのが正しい書き方なんでしょうか?
使ってるのはintel fortran & MKLです。
module
...
contains
subroutien foo
implicit none
interface
subroutine ZGEEV(jobvl, jobvr, ...
...
みたいな感じに。
336デフォルトの名無しさん
2014/02/25(火) 04:06:21.32 LAPACK用の95用 INTERFACE MODULEは公式であったろ。NETLIB無間地獄を探せw
337デフォルトの名無しさん
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倍長計算
こちらでは、正常にコンパイルし、
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
あれから再インストールをしてみたのですが同じエラーがでてまして、
それで、インストール時の環境を変えてみるか、それかバージョンを落としてみるか
してみようと思ってます
うまく行ったらお礼がてら報告したいと思います
たいへんどうもありがとうございました
お手数おかけしてすみません
やっぱ私の環境がダメすぎってことみたいですねorz
あれから再インストールをしてみたのですが同じエラーがでてまして、
それで、インストール時の環境を変えてみるか、それかバージョンを落としてみるか
してみようと思ってます
うまく行ったらお礼がてら報告したいと思います
たいへんどうもありがとうございました
339デフォルトの名無しさん
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
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
340デフォルトの名無しさん
2014/02/27(木) 01:07:55.10 あー書き込みたい
341デフォルトの名無しさん
2014/02/27(木) 22:19:15.92 >>335
インテルなら use lapack95 を implicit none の前の行に足し
mkl_lapack95_lp64.lib をコンパイルに足したまえ
ぶっちゃけ interface 書かなくとも呼べる。引数チェックは無論効かないが
インテルなら use lapack95 を implicit none の前の行に足し
mkl_lapack95_lp64.lib をコンパイルに足したまえ
ぶっちゃけ interface 書かなくとも呼べる。引数チェックは無論効かないが
342デフォルトの名無しさん
2014/02/27(木) 22:23:14.15343338
2014/02/27(木) 23:05:41.71 >>339
レスdです
実は私もそこのを使ってエラってたのですが、でもおかげ様で
「他のサイトから落としたファイルならうまく行くかも」、
ってことに思いいたりました
で、探したところgcc wikiっていうところで非公式ながら
お手軽そうなインストーラを発見、さっそく落として
コンパイルしてみましたら
完動です!!!!
小数点のあとに0がいっぱい並んでるので、記念にスクショ撮りましたw
たいへんどうもありがとうございました
レスdです
実は私もそこのを使ってエラってたのですが、でもおかげ様で
「他のサイトから落としたファイルならうまく行くかも」、
ってことに思いいたりました
で、探したところgcc wikiっていうところで非公式ながら
お手軽そうなインストーラを発見、さっそく落として
コンパイルしてみましたら
完動です!!!!
小数点のあとに0がいっぱい並んでるので、記念にスクショ撮りましたw
たいへんどうもありがとうございました
344デフォルトの名無しさん
2014/02/28(金) 01:11:13.40 >343
無事出来てよかったですね!
それにしても、Fortran IVとか、Fortran 77では、せいぜい
2倍長演算しかできなかったのですが、いまでは、4倍長演算
がらくらくできるのですから、隔世の感があります。
無事出来てよかったですね!
それにしても、Fortran IVとか、Fortran 77では、せいぜい
2倍長演算しかできなかったのですが、いまでは、4倍長演算
がらくらくできるのですから、隔世の感があります。
345デフォルトの名無しさん
2014/02/28(金) 01:24:15.95 Debian 32bit版に gfortran 入れて数値計算してるんですが、配列って2gb までしか割り当てられないのでしょうか?
346デフォルトの名無しさん
2014/02/28(金) 20:13:18.20 >>345
32bit版ならできないと思いますよー
32bit版ならできないと思いますよー
347デフォルトの名無しさん
2014/02/28(金) 21:27:17.52348デフォルトの名無しさん
2014/03/01(土) 01:45:11.84 4倍長はソフトウェアで計算しているから10倍以上遅いから
むやみに初心者には教えんなw
むやみに初心者には教えんなw
349デフォルトの名無しさん
2014/03/01(土) 05:45:52.65 >336 >341->342
遅くなりましたがレスありがとうございます!
Intelさんの優しさが五臓六腑に染みますわあ
遅くなりましたがレスありがとうございます!
Intelさんの優しさが五臓六腑に染みますわあ
350デフォルトの名無しさん
2014/03/01(土) 17:12:18.11351デフォルトの名無しさん
2014/03/02(日) 15:54:25.99 OS&コンパイラ64bit版にしても、静的な配列は2Gまでだったりすることが多いから、
よく調べた方がいいぞ。むろん動的には2Gを超えて確保できるが。
これは手抜きではなく、まだ整数のデフォは32bitだし、単精度実数とデフォ整数
長さを合わせるという約束とかもあるから色々全体整合で仕方ない事情がある。
よく調べた方がいいぞ。むろん動的には2Gを超えて確保できるが。
これは手抜きではなく、まだ整数のデフォは32bitだし、単精度実数とデフォ整数
長さを合わせるという約束とかもあるから色々全体整合で仕方ない事情がある。
352デフォルトの名無しさん
2014/03/03(月) 02:46:29.22 >>351
うーん、難しい話ですね。
単純に64bitにしたからって載せてるメモリフルフルで使えるわけではないってことですね?
どうしても配列を一度に百万行ほど読み込ませて数値計算を行いたいのでほとほと困り果ててます。
和書だとあまりフォートランに関して詳しい解説本(オプションやらテクニック的なもの)が少ない気がするのですが、何かオススメありますか?
うーん、難しい話ですね。
単純に64bitにしたからって載せてるメモリフルフルで使えるわけではないってことですね?
どうしても配列を一度に百万行ほど読み込ませて数値計算を行いたいのでほとほと困り果ててます。
和書だとあまりフォートランに関して詳しい解説本(オプションやらテクニック的なもの)が少ない気がするのですが、何かオススメありますか?
353デフォルトの名無しさん
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が
でなくなったので寒い時代になってしまった。
・66でJIS FORTRAN全釈―電子計算機プログラム用言語
・77で岩波FORTRAN辞典
・90ではMetcalf&Reid本訳者としてbit 別冊『詳解 Fortran 90』
Metcalf & Reid 本もF2003から Cohen が加わったが、これは東京に住んでるんだから
次世代匂い付き粘着野郎が生まれてもいいはずだ!w
とはいえアメリカ人も粘着ばばあのJ.C.Adamsが死んでからFortran Handbookが
でなくなったので寒い時代になってしまった。
354デフォルトの名無しさん
2014/03/07(金) 00:23:39.85 >>350 プログラム終了までほっといていいなら deallocate 不要
サブルーチンで宣言した非 save の allocatable は
サブルーチン抜けると勝手に deallocate したかと
サブルーチンで宣言した非 save の allocatable は
サブルーチン抜けると勝手に deallocate したかと
355デフォルトの名無しさん
2014/03/07(金) 02:00:33.33356デフォルトの名無しさん
2014/03/08(土) 00:26:57.93 Fortran90 からずっと 6.3.3.1 Deallocation of allocatable arrays で述べてる
return または end で手続きの実行が終了したとき、その手続きの局所変数は deallocate されると
allocate 時の問題じゃないことは当然確認したね?コードうp
return または end で手続きの実行が終了したとき、その手続きの局所変数は deallocate されると
allocate 時の問題じゃないことは当然確認したね?コードうp
357デフォルトの名無しさん
2014/03/08(土) 00:46:31.22 >>356
むっちゃコード長いプラスモジュール化してるんでつけどOKでつか?
むっちゃコード長いプラスモジュール化してるんでつけどOKでつか?
358デフォルトの名無しさん
2014/03/08(土) 02:56:59.79359デフォルトの名無しさん
2014/03/09(日) 00:53:32.50 仕様にあるから…ってもベンダ依存はしゃーないか
http://www.nag.co.uk/sc22wg5/links.html
だがモジュール変数は解放されない
あとむしろそういうコード解析できる機会ないからくれるなら是非
公開したこと他の奴に怒られる事態になっても知らないけど
http://www.nag.co.uk/sc22wg5/links.html
だがモジュール変数は解放されない
あとむしろそういうコード解析できる機会ないからくれるなら是非
公開したこと他の奴に怒られる事態になっても知らないけど
360デフォルトの名無しさん
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してくれる。
>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してくれる。
361デフォルトの名無しさん
2014/03/24(月) 22:03:24.67ID:NcnrpLpF 保守
コンパイラ任せでなく、Fortran 言語の範疇で、まともに
高速化を考える人間ってどれくらいいるのだろうか
コンパイラ任せでなく、Fortran 言語の範疇で、まともに
高速化を考える人間ってどれくらいいるのだろうか
362デフォルトの名無しさん
2014/03/25(火) 07:28:56.11ID:mXzRLR6s363デフォルトの名無しさん
2014/03/25(火) 21:47:05.41ID:jjQiXJR+ とりあえず文法は ggれならぬ nagれ、だな。本は洋書しかないし
http://www.nag-j.co.jp/fortran/
一昔前のベクトル型計算機向けっぽい(最近のアクセラレータで見直されてる)
ループ変数固定とか仮引数の非エリアスとかの暗黙制約、
配列表現の柔軟さに ELEMENTAL & PURE 関数、
Fortran 直じゃないが OpenMP & MPI と割となんでも明示化できるが、
逆に言うと複雑かつこれやっとけばおk的な部分がないのと、
そこまで性能にシビアな世界はニッチかつ閉鎖的すぎる、特に国内事情で。
http://www.nag-j.co.jp/fortran/
一昔前のベクトル型計算機向けっぽい(最近のアクセラレータで見直されてる)
ループ変数固定とか仮引数の非エリアスとかの暗黙制約、
配列表現の柔軟さに ELEMENTAL & PURE 関数、
Fortran 直じゃないが OpenMP & MPI と割となんでも明示化できるが、
逆に言うと複雑かつこれやっとけばおk的な部分がないのと、
そこまで性能にシビアな世界はニッチかつ閉鎖的すぎる、特に国内事情で。
364デフォルトの名無しさん
2014/03/26(水) 21:12:26.41ID:OKU3OlE2 国内でFortran使ってる人口がそもそも少なそう
365デフォルトの名無しさん
2014/03/28(金) 02:08:30.32ID:OEPLP/0i 最近コンピュータというとWEBがらみでテキスト処理機みたいなノリが強いが、
本来の電子計算機としてはFortran不動だべ。
そして日本は結構Fortran市場/ユーザーでかいんでないかな。
Intel Fortranは英語以外には唯一日本語マニュアル等を出しているし。
アメリカ以外でハード・OS・コンパイラまともに作れるの日本ぐらいでね。
本来の電子計算機としてはFortran不動だべ。
そして日本は結構Fortran市場/ユーザーでかいんでないかな。
Intel Fortranは英語以外には唯一日本語マニュアル等を出しているし。
アメリカ以外でハード・OS・コンパイラまともに作れるの日本ぐらいでね。
366デフォルトの名無しさん
2014/03/28(金) 07:40:18.76ID:27mpC+N6 ちょいとスレチかもしれませんが、みなさん変数の命名法ってどうしてますか?
ん
ん
367デフォルトの名無しさん
2014/03/29(土) 14:26:34.57ID:iivY7v+4 商業利用は少ないし、研究機関での個人・少人数開発がほとんどだし、明文化されたコーディング規約ってなかなか見つからんよな。
C++も併用してるので、そっちの命名規約と統一してる。
変数大文字6文字縛りは勘弁な。
C++も併用してるので、そっちの命名規約と統一してる。
変数大文字6文字縛りは勘弁な。
368デフォルトの名無しさん
2014/03/30(日) 02:02:03.27ID:wC7BTSuT WEB世界の偉い人wでもFortranの知識が66や77時代のイメージ止まりで
とんちんかんな事を言っていて笑える。
アドバイスで数値計算はFortranじゃなくてもいいとか言って、
初心者たぶらかして冬山にTシャツ、サンダルで登山させるような
悪い奴多すぎで草不可避www
とんちんかんな事を言っていて笑える。
アドバイスで数値計算はFortranじゃなくてもいいとか言って、
初心者たぶらかして冬山にTシャツ、サンダルで登山させるような
悪い奴多すぎで草不可避www
369デフォルトの名無しさん
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)を代入したいっす。
三次元配列に二次元配列の要素を代入したいんだけど、どうすればいいかな?
a(i,j)に時間軸tを追加して、
do t=1,100
b(i,j,t)=a(i,j)
end do
こういうイメージで、逐次のa(i,j)を代入したいっす。
370デフォルトの名無しさん
2014/04/12(土) 02:03:40.35ID:7FV8vMmK b(:,:,t)=a
でおk?
でおk?
371デフォルトの名無しさん
2014/04/12(土) 02:56:42.37ID:7b7Ca2J/ え そんなシンプルでおk?
ありがとうございます
ありがとうございます
372デフォルトの名無しさん
2014/04/15(火) 10:35:48.57ID:nSLuXsCJ b(:,:,t)=a(i,j)ってやれば二次元配列に時間軸を追加したものができるのか
よくある:ってなんの意味なんです?
よくある:ってなんの意味なんです?
373デフォルトの名無しさん
2014/04/15(火) 19:04:08.61ID:2Visq3rw b(:,:,t)=a(i,j) だと駄目。
>>370 のとおりじゃないと。
部分配列を指定するのにコロンを使う。
たとえば配列 v の第2成分から第10成分までなら v(2:10)。
コロンの両脇に数字がないのは、成分あるだけ全部という意味。
>>370 のとおりじゃないと。
部分配列を指定するのにコロンを使う。
たとえば配列 v の第2成分から第10成分までなら v(2:10)。
コロンの両脇に数字がないのは、成分あるだけ全部という意味。
374デフォルトの名無しさん
2014/04/15(火) 19:11:45.41ID:0DdTk08m ちょうどいい解説があった
http://www.str.ce.akita-u.ac.jp/~gotou/zyouhou/f90/sec6.html#6.4.
http://www.str.ce.akita-u.ac.jp/~gotou/zyouhou/f90/sec6.html#6.4.
375デフォルトの名無しさん
2014/04/15(火) 21:45:58.64ID:y6pD2KFL376デフォルトの名無しさん
2014/04/15(火) 22:23:43.96ID:2Visq3rw >>375
373 で俺が言いたかったことは、配列 a について
「a」や「a(:, :)」と書くと配列全体を意味する。
「a(i, j)」と書くのは(前もって i, j に整数が代入されていれば)成分 a(i, j) つまりただひとつの数字を意味する。
ということ。
したがって b(:, :, t) = a と書けば配列全体の代入なので
b(1, 1, t) = a(1, 1)
b(1, 2, t) = a(1, 2) のように配列の対応する成分が代入されるが、b(:, :, t) = a(i, j) と書けば
b(1, 1, t) = a(i, j)
b(1, 2, t) = a(i, j)...
のように、ただひとつの同じ数字が代入される。
373 で俺が言いたかったことは、配列 a について
「a」や「a(:, :)」と書くと配列全体を意味する。
「a(i, j)」と書くのは(前もって i, j に整数が代入されていれば)成分 a(i, j) つまりただひとつの数字を意味する。
ということ。
したがって b(:, :, t) = a と書けば配列全体の代入なので
b(1, 1, t) = a(1, 1)
b(1, 2, t) = a(1, 2) のように配列の対応する成分が代入されるが、b(:, :, t) = a(i, j) と書けば
b(1, 1, t) = a(i, j)
b(1, 2, t) = a(i, j)...
のように、ただひとつの同じ数字が代入される。
377デフォルトの名無しさん
2014/04/15(火) 22:26:34.41ID:y6pD2KFL >>376
なるほど、よくわかりました。ありがとうございます。数日前にfortranをはじめましたがプログラミング自体がほぼ初なのでとても勉強になりました。
人の書いたプログラムのある一つのサブルーチンを修正したいのですが、変数の名前の設定の仕方も人それぞれだし、読むというのはとても大変ですね。
なるほど、よくわかりました。ありがとうございます。数日前にfortranをはじめましたがプログラミング自体がほぼ初なのでとても勉強になりました。
人の書いたプログラムのある一つのサブルーチンを修正したいのですが、変数の名前の設定の仕方も人それぞれだし、読むというのはとても大変ですね。
378デフォルトの名無しさん
2014/04/15(火) 22:33:12.92ID:pcXih3Yx >>377
追記の質問なのですが、bは三次元配列でaは二次元配列ですが、こちらが指示しなくても、aをbの:,:部分に入れるのですね。
これは次元の違うものを代入をするとき、どのように対応するのかは次元で決まるということでしょうか。
aは1次元、2次元成分をもつ配列だから、それを代入する先もbの1次元、2次元成分に代入するということですよね?
追記の質問なのですが、bは三次元配列でaは二次元配列ですが、こちらが指示しなくても、aをbの:,:部分に入れるのですね。
これは次元の違うものを代入をするとき、どのように対応するのかは次元で決まるということでしょうか。
aは1次元、2次元成分をもつ配列だから、それを代入する先もbの1次元、2次元成分に代入するということですよね?
379デフォルトの名無しさん
2014/04/15(火) 22:51:15.04ID:2Visq3rw b(:, :, t) と a(:, :) は同じ次元です。
>>369,370 のレスを踏まえて書いているので、
do t=1,100
b(:, :,t)=a
end do
のように使うことを想定しています。
b(:, :, :) は3次元配列だけど、b(:, :, 1), b(:, :, 2), ..., b(:, :, 100) はそれぞれ2次元配列です。
なので b(:, :, t) = a は2次元配列を2次元配列に代入していることになります。
>>369,370 のレスを踏まえて書いているので、
do t=1,100
b(:, :,t)=a
end do
のように使うことを想定しています。
b(:, :, :) は3次元配列だけど、b(:, :, 1), b(:, :, 2), ..., b(:, :, 100) はそれぞれ2次元配列です。
なので b(:, :, t) = a は2次元配列を2次元配列に代入していることになります。
380デフォルトの名無しさん
2014/04/16(水) 01:41:26.57ID:9gYQIu+P >>379
>b(:, :, :) は3次元配列だけど、b(:, :, 1), >b(:, :, 2), ..., b(:, :, 100) はそれぞれ2次元配>列です。
配列については調べましたが、意味がわかりませんでした。なぜ二次元配列なのでしょうか
integer a
dimension a(2,3,1)
私はこれは3次元の配列だと思っています。
配列の次元は,で区切った数で決まるのではないのですか
>b(:, :, :) は3次元配列だけど、b(:, :, 1), >b(:, :, 2), ..., b(:, :, 100) はそれぞれ2次元配>列です。
配列については調べましたが、意味がわかりませんでした。なぜ二次元配列なのでしょうか
integer a
dimension a(2,3,1)
私はこれは3次元の配列だと思っています。
配列の次元は,で区切った数で決まるのではないのですか
381勝手に横レス
2014/04/16(水) 03:26:06.14ID:k2nSQYfZ >>380
:は指定した配列の範囲を一度に指定する表記
配列の宣言を
real, dimension(1:5,1:5) :: a
real, dimension(1:5,1:5,1:10) :: b
としたとき
aと書いた場合は配列全体を指すので5×5の2次元配列を指す
a(1,1)は添え字を具体的な数で指定しているので一つの変数を指している
a(:,:)は添え字が全て:なので二つの添え字が全範囲を指定している
そのためaと書いた場合と同じ5×5の2次元配列を指す
a(:,1)と書いた場合は一つ目の添え字は全範囲を、
二つ目の添え字は具体的な数なので一つの成分を指定している
そのため5つの要素の1次元配列を指す
b(:,:,1)の場合bの最後の添え字は具体的な数なので
次元が一つ下がり、5×5の2次元配列となる
宣言の次元と計算途中で使われる次元は一致しなくて良い
NAGのサイトで部分配列で調べると良いよ
:は指定した配列の範囲を一度に指定する表記
配列の宣言を
real, dimension(1:5,1:5) :: a
real, dimension(1:5,1:5,1:10) :: b
としたとき
aと書いた場合は配列全体を指すので5×5の2次元配列を指す
a(1,1)は添え字を具体的な数で指定しているので一つの変数を指している
a(:,:)は添え字が全て:なので二つの添え字が全範囲を指定している
そのためaと書いた場合と同じ5×5の2次元配列を指す
a(:,1)と書いた場合は一つ目の添え字は全範囲を、
二つ目の添え字は具体的な数なので一つの成分を指定している
そのため5つの要素の1次元配列を指す
b(:,:,1)の場合bの最後の添え字は具体的な数なので
次元が一つ下がり、5×5の2次元配列となる
宣言の次元と計算途中で使われる次元は一致しなくて良い
NAGのサイトで部分配列で調べると良いよ
382デフォルトの名無しさん
2014/04/17(木) 22:25:20.75ID:TQr8bRVR >>381
遅くなりました。非常にわかりやすい解説ありがとうございます。NAGで少しずつ勉強しています
遅くなりました。非常にわかりやすい解説ありがとうございます。NAGで少しずつ勉強しています
383デフォルトの名無しさん
2014/04/20(日) 11:29:29.42ID:LM2YJqRp すみません
fortranを始めようと思ってるものですが
おすすめの開発環境を教えていただけないでしょうか?
今はgfortranとvimでプログラミングを始めようかと思っているのですが
いちいちvimで書いて保存してvimをぬけてコンパイルして実行するのが手間だなと感じています。
vimを抜けずに書いたプログラムをコンパイル、実行できればいいのですが。
そこでおすすめの開発環境を教えていただきたいのです。
fortranを始めようと思ってるものですが
おすすめの開発環境を教えていただけないでしょうか?
今はgfortranとvimでプログラミングを始めようかと思っているのですが
いちいちvimで書いて保存してvimをぬけてコンパイルして実行するのが手間だなと感じています。
vimを抜けずに書いたプログラムをコンパイル、実行できればいいのですが。
そこでおすすめの開発環境を教えていただきたいのです。
384デフォルトの名無しさん
2014/04/20(日) 11:40:02.65ID:rCakeQE3 小規模ならエディタ+コマンドラインでいいと思うけど
gfortranで統合開発環境ならeclipseが無難
https://www.eclipse.org/downloads/
ここからEclipse for Parallel Application Developersをダウンロード
gfortranで統合開発環境ならeclipseが無難
https://www.eclipse.org/downloads/
ここからEclipse for Parallel Application Developersをダウンロード
385デフォルトの名無しさん
2014/04/21(月) 08:18:52.31ID:9DEaCYEm >>384
小規模でもエクリプス使う利点ある?
小規模でもエクリプス使う利点ある?
386デフォルトの名無しさん
2014/04/21(月) 11:58:42.13ID:INTGmmt1 否定するだけじゃなく、代替案を示せよ!
サヨクちゃんかよw
サヨクちゃんかよw
387デフォルトの名無しさん
2014/04/21(月) 13:10:45.24ID:9DEaCYEm388デフォルトの名無しさん
2014/04/22(火) 18:21:36.11ID:i3jJvf/a Gfortran 使いです。
Cycle 文についての質問だけど、
do a = 1, 5
If ( a .ge. 3) then
a = a + 1
cycle
endif
enddo
とかだったら a = 12 になるのかな?
Cycle 文についての質問だけど、
do a = 1, 5
If ( a .ge. 3) then
a = a + 1
cycle
endif
enddo
とかだったら a = 12 になるのかな?
389デフォルトの名無しさん
2014/04/23(水) 00:33:33.39ID:cH3Ejolk do 変数をいじっちゃいけないはず。
自分のおちんちん/おまんこはいじってもいいよ。
自分のおちんちん/おまんこはいじってもいいよ。
390デフォルトの名無しさん
2014/04/23(水) 00:35:19.04ID:4m41LpoI ループ中でループ変数(この場合は a)は変更できない
391デフォルトの名無しさん
2014/04/23(水) 02:10:49.07ID:2MktZpH7 間違えた
a = {1, 3, 4, 6, 7}の配列として,
do i = 1, 5
If ( mod(a) .eq. 0) then
write(*,*) a
cycle
endif
enddo
とかだったらターミナルに
4
6
って表示されるのかな?
つまりはcycleってのはdo の文頭に戻るでOK?
a = {1, 3, 4, 6, 7}の配列として,
do i = 1, 5
If ( mod(a) .eq. 0) then
write(*,*) a
cycle
endif
enddo
とかだったらターミナルに
4
6
って表示されるのかな?
つまりはcycleってのはdo の文頭に戻るでOK?
392デフォルトの名無しさん
2014/04/23(水) 02:47:07.80ID:cH3Ejolk おじちゃん、少しは文法書読みなよw
4
6
って表示されるよ!
でも間違いありすぎ。
a = [1,3,4,6,7] !
または (/ 1,3,4,6,7 /) な。EBCDIC には [,] 記号がないから、
大かっこは最近まで使わなかったのよ。
do i = 1, 5
if (mod(a(i), 2) == 0) then
write(*, *) a(i)
cycle
end if
end do
まぁ、この場合CYCLEの意味ないけどw
4
6
って表示されるよ!
でも間違いありすぎ。
a = [1,3,4,6,7] !
または (/ 1,3,4,6,7 /) な。EBCDIC には [,] 記号がないから、
大かっこは最近まで使わなかったのよ。
do i = 1, 5
if (mod(a(i), 2) == 0) then
write(*, *) a(i)
cycle
end if
end do
まぁ、この場合CYCLEの意味ないけどw
393デフォルトの名無しさん
2014/04/23(水) 04:13:45.15ID:2MktZpH7394デフォルトの名無しさん
2014/04/24(木) 04:26:06.40ID:PfDx1Fno 試した奴いるかい?
登録がめんどくさいんですけど。
インテル ソフトウェア開発製品 バージョン 2015 ベータ版 提供開始
インテル Parallel Studio XE、Cluster Studio XE に含まれるインテル コンパイラーやライブラリー、チューニング・ツールの次期バージョンのベータ・プログラムがはじまりました。
新機能や強化された機能はこちら【ベータ期間: 7月 11日(金)まで】
HTTPS software.intel.com/en-us/articles/intel-software-development-tools-2015-beta
登録がめんどくさいんですけど。
インテル ソフトウェア開発製品 バージョン 2015 ベータ版 提供開始
インテル Parallel Studio XE、Cluster Studio XE に含まれるインテル コンパイラーやライブラリー、チューニング・ツールの次期バージョンのベータ・プログラムがはじまりました。
新機能や強化された機能はこちら【ベータ期間: 7月 11日(金)まで】
HTTPS software.intel.com/en-us/articles/intel-software-development-tools-2015-beta
395デフォルトの名無しさん
2014/04/25(金) 18:01:43.49ID:nDom0mhY ちょっとお聞きしたいのですが、
構造体の1成分だけfunctionで計算するような
書き方はできないでしょうか
たとえば
function aaa(i,j)%a
ーーー
end functionなど・・
構造体初めて使うのでまだよくわかっておらずすいません
よろしくおねがいします
構造体の1成分だけfunctionで計算するような
書き方はできないでしょうか
たとえば
function aaa(i,j)%a
ーーー
end functionなど・・
構造体初めて使うのでまだよくわかっておらずすいません
よろしくおねがいします
396デフォルトの名無しさん
2014/04/25(金) 19:31:14.66ID:9DVeZXXS 「構造体の1成分だけfunctionで計算する」っていうのがよくわからない。
(1)function の引数として構造体の1成分を使うのか、(2)function の戻り値として構造体の1成分を得たいのか。
いずれにせよ、関数定義では構造体をあらわに使う必要がなさそう。
たとえば構造体の1成分 aaa(i,j)%a が real のばあいなら、関数定義は
function f(x)
real f, x
f = x**2
end function
のようにして、(1)なら呼び出し時に
b = f(aaa(i, j)%a)
のようにすればいいし、(2)なら呼び出し時に
aaa(i, j)%a = f(c)
のようにすればいいのではないでしょうか。
(1)function の引数として構造体の1成分を使うのか、(2)function の戻り値として構造体の1成分を得たいのか。
いずれにせよ、関数定義では構造体をあらわに使う必要がなさそう。
たとえば構造体の1成分 aaa(i,j)%a が real のばあいなら、関数定義は
function f(x)
real f, x
f = x**2
end function
のようにして、(1)なら呼び出し時に
b = f(aaa(i, j)%a)
のようにすればいいし、(2)なら呼び出し時に
aaa(i, j)%a = f(c)
のようにすればいいのではないでしょうか。
397デフォルトの名無しさん
2014/04/25(金) 19:54:42.69ID:nDom0mhY >>396
早速のレスありがとうございます
まだよくわかっておらずすいません
やりたかったことはおっしゃっていただいたまさに(2)です
教えていただいたやり方でできそうです
とても助かりました。ありがとうございました
また機会がありましたらよろしくおねがいします
早速のレスありがとうございます
まだよくわかっておらずすいません
やりたかったことはおっしゃっていただいたまさに(2)です
教えていただいたやり方でできそうです
とても助かりました。ありがとうございました
また機会がありましたらよろしくおねがいします
398デフォルトの名無しさん
2014/05/02(金) 21:33:28.65ID:ZxAJrCZC399デフォルトの名無しさん
2014/05/08(木) 01:43:46.59ID:akP1EH34 連休を利用してFortran2003用のCheet Sheetを作ってみた。
自分が使っていたメモと、このスレに出たこと等をギリギリ突っ込んでみた。
ttp://www.pdf-archive.com/2014/05/07/f2003quickref/f2003quickref.pdf
一応、プログラム片は、Intel Fortran 2015ベータで動くことを確かめたつもり。
誤り等があったら、やさしく指摘してくれ。
豆本になっているので両面印刷して、以下のサイトを参考にして本にしてくれ。
ttp://k.e-kuchikomi.info/K_140266/
自分が使っていたメモと、このスレに出たこと等をギリギリ突っ込んでみた。
ttp://www.pdf-archive.com/2014/05/07/f2003quickref/f2003quickref.pdf
一応、プログラム片は、Intel Fortran 2015ベータで動くことを確かめたつもり。
誤り等があったら、やさしく指摘してくれ。
豆本になっているので両面印刷して、以下のサイトを参考にして本にしてくれ。
ttp://k.e-kuchikomi.info/K_140266/
400デフォルトの名無しさん
2014/05/08(木) 22:20:11.32ID:GsOSKq7r intel fortranを使っていて、-parallelが速く使っているのですが、
以下のようなサブルーチンで、依存関係で自動並列化がされていないのですが、
並列化するためになにかヒントをご教授いただけないでしょうか。
(宣言後)
a=0
do k=1,kmax
do j=1,jmax
do i=1,imax
if(logical(j,i,k))then
a(j,k)=a(j,k)+1
endif
enddo
enddo
enddo
logicalはファンクションで別ファイルで書いています
勉強不足で申し訳ありませんがよろしくお願いします
以下のようなサブルーチンで、依存関係で自動並列化がされていないのですが、
並列化するためになにかヒントをご教授いただけないでしょうか。
(宣言後)
a=0
do k=1,kmax
do j=1,jmax
do i=1,imax
if(logical(j,i,k))then
a(j,k)=a(j,k)+1
endif
enddo
enddo
enddo
logicalはファンクションで別ファイルで書いています
勉強不足で申し訳ありませんがよろしくお願いします
401デフォルトの名無しさん
2014/05/08(木) 23:40:27.39ID:akP1EH34 LOGICALをPURE宣言すればいい。
PUREでないならコンパイラは判断できないので自動並列化は無理だろう。
手動でコンパイラ支持行で明示してやれ。
しかし、iは関数内にいれて
forall(j=1:jmax,k=1:kmax) a(j,k)=ifun(j,k)
pure function ifun(j,k)
...
do i = 1, imax
if (...) ifun = ifun + 1
end
みたいにしたほういい。
PUREでないならコンパイラは判断できないので自動並列化は無理だろう。
手動でコンパイラ支持行で明示してやれ。
しかし、iは関数内にいれて
forall(j=1:jmax,k=1:kmax) a(j,k)=ifun(j,k)
pure function ifun(j,k)
...
do i = 1, imax
if (...) ifun = ifun + 1
end
みたいにしたほういい。
402デフォルトの名無しさん
2014/05/09(金) 22:46:22.53ID:yQPNJst2 >>401
ご教授ありがとうございます
forallやpureなど使ったことがなく、書き方例など大変勉強になりました
ご教示いただいた内容で書いたのですが他との兼ね合いの依存関係なのかまた出てしまいました
(col. 58) remark: 並列依存関係: FLOW の依存関係が var$649 行 343 と var$649 行 91 の間に仮定されました。
などなど
どうも他のサブルーチンの書き方も並列化に悪いようで、教えていただいた並列化方法を頼りにまず勉強しなおして、
他のプログラム部分もいい機会なので見直そうと思います。
ありがとうございました。
ご教授ありがとうございます
forallやpureなど使ったことがなく、書き方例など大変勉強になりました
ご教示いただいた内容で書いたのですが他との兼ね合いの依存関係なのかまた出てしまいました
(col. 58) remark: 並列依存関係: FLOW の依存関係が var$649 行 343 と var$649 行 91 の間に仮定されました。
などなど
どうも他のサブルーチンの書き方も並列化に悪いようで、教えていただいた並列化方法を頼りにまず勉強しなおして、
他のプログラム部分もいい機会なので見直そうと思います。
ありがとうございました。
403デフォルトの名無しさん
2014/05/10(土) 00:07:21.90ID:ZxmW9Mt1 Linux 使いでEclipse + photran のフォートラン統合開発環境を構築しようかと考えているのですが、なかなかうまくいきません。
例えば、今までターミナル上で
Gfortran hoge.f90 main.f90 でコンパイルできたてのに、eclipse だと ant build not found とかででうまくいきません。
ちなみにhoge.f90 はモジュールファイルで、main.f90がメインプログラムです。
エクリプスでもhero.f90 (メインプログラム単体)単体のコンパイルは出来ています。
もしかして複数ファイルを同時に今コンパイルできないとか?
例えば、今までターミナル上で
Gfortran hoge.f90 main.f90 でコンパイルできたてのに、eclipse だと ant build not found とかででうまくいきません。
ちなみにhoge.f90 はモジュールファイルで、main.f90がメインプログラムです。
エクリプスでもhero.f90 (メインプログラム単体)単体のコンパイルは出来ています。
もしかして複数ファイルを同時に今コンパイルできないとか?
404デフォルトの名無しさん
2014/05/10(土) 01:44:31.61ID:X6uqaHXX プロジェクトにソースファイルを全部入れてビルドするだけだが駄目かい?
405デフォルトの名無しさん
2014/05/10(土) 05:24:00.09ID:ZxmW9Mt1406デフォルトの名無しさん
2014/05/11(日) 09:02:09.98ID:4C2ZppHJ407デフォルトの名無しさん
2014/05/11(日) 10:52:57.57ID:wJQWAvOW >>399
乙。いただいた
乙。いただいた
408デフォルトの名無しさん
2014/05/11(日) 12:54:27.66ID:a5cPk+x+409デフォルトの名無しさん
2014/05/11(日) 17:20:58.15ID:cyBk1jZ9 Implementing the Standards...including Fortran 2003
http://www.fortran.bcs.org/2007/jubilee/f50.pdf
Fortran 2003 and Beyond
パワポ
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_slides.pdf
PDF
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_paper.pdf
Intel Parallel Universe issue 11 p.22
https://software.intel.com/sites/default/files/parallel_mag_issue11.pdf
http://www.fortran.bcs.org/2007/jubilee/f50.pdf
Fortran 2003 and Beyond
パワポ
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_slides.pdf
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_paper.pdf
Intel Parallel Universe issue 11 p.22
https://software.intel.com/sites/default/files/parallel_mag_issue11.pdf
410デフォルトの名無しさん
2014/05/13(火) 00:50:14.94ID:X5XVCl1f fortranまとめwikiないよなそういえば
411デフォルトの名無しさん
2014/05/13(火) 11:18:46.53ID:Ml4tWcMx sin波のようななめらかな波形データから尖頭値を抽出するにはどうすればよいでしょうか。
波形データの入っている配列aから抽出したいのですが、sin波のような綺麗な周期を持っておらず、地震の観測波形のように不規則に連続して変化していっています。
波形データの入っている配列aから抽出したいのですが、sin波のような綺麗な周期を持っておらず、地震の観測波形のように不規則に連続して変化していっています。
412デフォルトの名無しさん
2014/05/14(水) 12:56:39.35ID:wOYwf617 こんなの来てた。
MODERN FORTRAN FOR SCIENTISTS AND ENGINEERS
By Damian Rouson
http://jolts.stanford.edu/72/modern_fortran_for_scientists_and_engineers
MODERN FORTRAN FOR SCIENTISTS AND ENGINEERS
By Damian Rouson
http://jolts.stanford.edu/72/modern_fortran_for_scientists_and_engineers
413デフォルトの名無しさん
2014/05/15(木) 01:14:31.34ID:cUF0eH5o >>406
いえ、そんなことおっしゃらず…
今までエディタ使って作成してたフォートランファイルをエクリプスのプロジェクトフォルダに入れてビルドしようとしてもうんともすんとも言わないです。
で、デバッグできないという…
いえ、そんなことおっしゃらず…
今までエディタ使って作成してたフォートランファイルをエクリプスのプロジェクトフォルダに入れてビルドしようとしてもうんともすんとも言わないです。
で、デバッグできないという…
414デフォルトの名無しさん
2014/05/15(木) 02:31:06.49ID:klLDqCtV Fortran90/95による実践プログラミング [単行本(ソフトカバー)]
安田 清和 (著), 水野 正隆 (著), 小野 英樹 (著)
http://www.amazon.co.jp/gp/product/4872594738
いつの間にかこんなのが出版されているんだが、見たやつ中身はどうよ?
目次からすると、おっおぅ!…ってかんじなんだがw
安田 清和 (著), 水野 正隆 (著), 小野 英樹 (著)
http://www.amazon.co.jp/gp/product/4872594738
いつの間にかこんなのが出版されているんだが、見たやつ中身はどうよ?
目次からすると、おっおぅ!…ってかんじなんだがw
415デフォルトの名無しさん
2014/05/16(金) 01:40:42.79ID:USQ/ZI5B なんかエクリプスとフォトランの詳しいマニュアルないかな?
本家でもversion古いし
本家でもversion古いし
416デフォルトの名無しさん
2014/05/16(金) 01:49:02.89ID:pE1PewlD417デフォルトの名無しさん
2014/05/16(金) 02:01:11.54ID:USQ/ZI5B418デフォルトの名無しさん
2014/05/16(金) 02:08:04.34ID:cU3+Idig fortranで書いたプログラムの出力ファイルを読み込んで、それを元にしたグラフを書かせたいのですが、1)それに適したグラフ描画ソフト2)そういったことを解説してある本はないでしょうか?
現状はExcelVBAで出力csvファイルを呼び出し、所定のExcelシートで編集してグラフにするためのデータを作成し、そのあと手動でグラフを作成しています。
Excelを挟まず、csvファイルをもとにグラフを描画してくれるプログラムがあるととてもありがたいのですが、何かできないでしょうか
現状はExcelVBAで出力csvファイルを呼び出し、所定のExcelシートで編集してグラフにするためのデータを作成し、そのあと手動でグラフを作成しています。
Excelを挟まず、csvファイルをもとにグラフを描画してくれるプログラムがあるととてもありがたいのですが、何かできないでしょうか
419デフォルトの名無しさん
2014/05/16(金) 07:25:49.77ID:USQ/ZI5B >>418
Gnuplot, R とか(´・_・`)
Gnuplot, R とか(´・_・`)
420デフォルトの名無しさん
2014/05/16(金) 15:01:20.39ID:GjdBspSJ 現在,windowsで大学の課題でmingwを使用してコードのコンパイルや実行しようとしています。
コンパイル自体は成功したようにみえたのですが実行する際に
「コンピュータにlibquadmath-0.dllがないため,プログラムを開始できません.
この問題を解決するには,プログラムを再インストールしてみてくだい.」
と表示され実行できません。
因みにコンパイルしたコード(hello.f90)は以下のようになります。
program hello
print *, 'Hello World!'
end program hello
またC言語(C++)のコードのコンパイルや実行には成功しています。
コンパイル自体は成功したようにみえたのですが実行する際に
「コンピュータにlibquadmath-0.dllがないため,プログラムを開始できません.
この問題を解決するには,プログラムを再インストールしてみてくだい.」
と表示され実行できません。
因みにコンパイルしたコード(hello.f90)は以下のようになります。
program hello
print *, 'Hello World!'
end program hello
またC言語(C++)のコードのコンパイルや実行には成功しています。
421デフォルトの名無しさん
2014/05/16(金) 19:43:53.43ID:xH+zzs4U path
422デフォルトの名無しさん
2014/05/16(金) 19:48:37.92ID:xH+zzs4U423デフォルトの名無しさん
2014/05/16(金) 21:38:59.32ID:HsLYY/75 >>420
以前、似たような(同じ?)エラーメッセージに遭遇した事があったが
その時は件のライブラリを強制再インストールしたら直ったように思う。
mingw-get update
mingw-get --reinstall upgrade mingw32-libquadmath
これを実行してMinGW(MSYS)のターミナルを再起動すればどうかな。
以前、似たような(同じ?)エラーメッセージに遭遇した事があったが
その時は件のライブラリを強制再インストールしたら直ったように思う。
mingw-get update
mingw-get --reinstall upgrade mingw32-libquadmath
これを実行してMinGW(MSYS)のターミナルを再起動すればどうかな。
424デフォルトの名無しさん
2014/05/17(土) 06:32:26.00ID:97dT5LKY >>419
gnuplotですかありがとうございます
gnuplotですかありがとうございます
425デフォルトの名無しさん
2014/05/17(土) 07:18:10.88ID:ScBioaGh 清書にはmatplotlibでね?
426デフォルトの名無しさん
2014/05/17(土) 14:11:28.79ID:6t+Gfvcv >>414
今日日出すなら2003と2008解説してほしい
今日日出すなら2003と2008解説してほしい
428デフォルトの名無しさん
2014/05/18(日) 18:58:17.41ID:8yAoHmFE >>426
ですよねー
ですよねー
429デフォルトの名無しさん
2014/05/30(金) 03:00:46.51ID:r0FrxYTY メモ帳のインプットファイルから一行ずつ読み込んでプログラムを回す時、読み込める一行の長さの限界というのは決まっているのでしょうか
例えば
有効数字8桁の数字を10個、一行に並べて書いた時はエラーで読みませんが、それらの桁を4桁まで減らして並べて書いたらプログラムが回るのです。
Excelで作ったものをメモ帳にはっつけて使っているので、セル間をタブキーによる空白で置き換えられます。
その空白を半角スペースに置き直して一行の長さを短くしても読むようになるので、読み込める一行に限りがあるように感じます。
CHARACTER CARD 100
という部分を200に変えても意味がなかったのでどこを変えれば読み込める一行を長くできるのかがわかりません。
例えば
有効数字8桁の数字を10個、一行に並べて書いた時はエラーで読みませんが、それらの桁を4桁まで減らして並べて書いたらプログラムが回るのです。
Excelで作ったものをメモ帳にはっつけて使っているので、セル間をタブキーによる空白で置き換えられます。
その空白を半角スペースに置き直して一行の長さを短くしても読むようになるので、読み込める一行に限りがあるように感じます。
CHARACTER CARD 100
という部分を200に変えても意味がなかったのでどこを変えれば読み込める一行を長くできるのかがわかりません。
430デフォルトの名無しさん
2014/05/30(金) 03:29:52.60ID:thFm9kuD read文が書かれた行をコピペして.
普通はcharacterなんか使わずにこう書く.
real(8) :: val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
open(10,file='ファイル名')
read(10,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
write(*,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
普通はcharacterなんか使わずにこう書く.
real(8) :: val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
open(10,file='ファイル名')
read(10,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
write(*,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
431デフォルトの名無しさん
2014/05/30(金) 08:44:23.58ID:U3Y1cq1n >>430
20年以上前に書かれたプログラムを少し編集しようとしています。読み込み部分は他の人が書いていて、初心者の私はそれを少し編集したいのですが、自信がないです
とにかくやりたいことはinputファイルのうちあるブロックの読み込み部で1行につき10個読んでいるところを14個読むようにしたいのです
CHARACTER CARD 100という意味もよくわかっていません。調べてもCARDの意味が出ませんでした。
input.txtを読み込むよう指示するのですが、全体としてそのinputは数千行とあります。それでもそのような記述で大丈夫なのでしょうか。
20年以上前に書かれたプログラムを少し編集しようとしています。読み込み部分は他の人が書いていて、初心者の私はそれを少し編集したいのですが、自信がないです
とにかくやりたいことはinputファイルのうちあるブロックの読み込み部で1行につき10個読んでいるところを14個読むようにしたいのです
CHARACTER CARD 100という意味もよくわかっていません。調べてもCARDの意味が出ませんでした。
input.txtを読み込むよう指示するのですが、全体としてそのinputは数千行とあります。それでもそのような記述で大丈夫なのでしょうか。
432デフォルトの名無しさん
2014/05/30(金) 15:49:55.31ID:dCRThtZs どのような記述だよ
433デフォルトの名無しさん
2014/05/30(金) 19:59:51.61ID:1KLLWRFX >>431
あなたのすることは数字の大きさをかえるような小手先の対応ではなくて、
昔のプログラムの動作なり、コードを理解することではないでしょうか?
10から14に数を増やすためにすることが読み込み箇所の変更だけですむのかなと心配になります。
10前提で処理がコードとして記述されていないか、計算式があるなら数を増やして大丈夫なのか、
チェックすることはいろいろあると思います。
あなたに指示をされた先輩なり上司のかたが変更方針がわかっておられて、指示をされてればいいのですが。
あなたのすることは数字の大きさをかえるような小手先の対応ではなくて、
昔のプログラムの動作なり、コードを理解することではないでしょうか?
10から14に数を増やすためにすることが読み込み箇所の変更だけですむのかなと心配になります。
10前提で処理がコードとして記述されていないか、計算式があるなら数を増やして大丈夫なのか、
チェックすることはいろいろあると思います。
あなたに指示をされた先輩なり上司のかたが変更方針がわかっておられて、指示をされてればいいのですが。
434デフォルトの名無しさん
2014/05/31(土) 00:38:02.07ID:8hxwwbXy >>433
配列の上限や各プログラムでのループ処理で何個読めるのかを確認しました。その点は修正しても大丈夫でした。
しかしinputファイルから読み込む一行があまりに長いとエラーを起こすのは改善できませんでした。
配列の上限や各プログラムでのループ処理で何個読めるのかを確認しました。その点は修正しても大丈夫でした。
しかしinputファイルから読み込む一行があまりに長いとエラーを起こすのは改善できませんでした。
435デフォルトの名無しさん
2014/05/31(土) 01:01:49.98ID:yeEEhfSt どこからどこへどれだけデータを読み込むか書いてあるのが read 文なので
それが出ないとどうにも。それに input.txt が長くいろいろブロックがあるなら
対応する read 文もいくつもあるうちのどれかってとこだな。
それが出ないとどうにも。それに input.txt が長くいろいろブロックがあるなら
対応する read 文もいくつもあるうちのどれかってとこだな。
436デフォルトの名無しさん
2014/05/31(土) 01:45:38.26ID:3e7Yho2f 最初の質問
>読み込める一行の長さの限界というのは決まっているのでしょうか
に答えるとすれば,
「データをどう読むようにコーディングされているかによります」
かな.
何度もread文を書くように言われているのに書かないってことは,
知的財産の流出とかなんかを気にしているのかな?
ソースコードをほんの一部でも書けないなら,先輩なりに聞いた方がよい.
>読み込める一行の長さの限界というのは決まっているのでしょうか
に答えるとすれば,
「データをどう読むようにコーディングされているかによります」
かな.
何度もread文を書くように言われているのに書かないってことは,
知的財産の流出とかなんかを気にしているのかな?
ソースコードをほんの一部でも書けないなら,先輩なりに聞いた方がよい.
437デフォルトの名無しさん
2014/06/02(月) 00:07:12.28ID:vUSkffdq あ
438デフォルトの名無しさん
2014/06/02(月) 00:13:33.24ID:BIE796Bm439デフォルトの名無しさん
2014/06/02(月) 01:34:45.52ID:mPD7/eRQ 何度も書けと言われているものを書かないのはなんでだろう
書けば直したりしてくれるかも知れないのに
書かれている文はFortranの文法に合わないし
cardに一度読み込ませて、その後各変数に値を分配しているように思えるけど、これだけでは分からない
読み込みができているかreadの後に変数の値の確認とかしてなさそうだし
単純に1行でどこかまで読めるかテストプログラム組んで確認してなさそうだし
書けば直したりしてくれるかも知れないのに
書かれている文はFortranの文法に合わないし
cardに一度読み込ませて、その後各変数に値を分配しているように思えるけど、これだけでは分からない
読み込みができているかreadの後に変数の値の確認とかしてなさそうだし
単純に1行でどこかまで読めるかテストプログラム組んで確認してなさそうだし
440デフォルトの名無しさん
2014/06/02(月) 01:57:55.06ID:GuhykFKN プログラム作成者が存在するなら、現状どういう処理をしているのかを
コードと向き合いながら作成者に聞いて理解する。
200に増やせばなんとかなると結論つける根拠をプログラム作成者に確認する。
ソースを変更するのはそれからだと思うけど。
読み込める文字数に制限があると疑うなら、現在読み込めてるデータの文字列長の
範囲内で10から14に入力データ数を変更したコードでテストしてみる。
入力文字列長の制限なのかコードの変更ミスなのか切り分けができてない。
コードと向き合いながら作成者に聞いて理解する。
200に増やせばなんとかなると結論つける根拠をプログラム作成者に確認する。
ソースを変更するのはそれからだと思うけど。
読み込める文字数に制限があると疑うなら、現在読み込めてるデータの文字列長の
範囲内で10から14に入力データ数を変更したコードでテストしてみる。
入力文字列長の制限なのかコードの変更ミスなのか切り分けができてない。
441デフォルトの名無しさん
2014/06/02(月) 08:47:31.90ID:xxg6z98O card と云うと、FORTRAN IV時代の1枚80コラムのIBMカー
を思い出す。
最初の5コラムがラベル番号6コラム目がコメント用7コラム
から72コラムまでにステートメントを書く(打つ)
というものだった。
もしかして、
read card 100
というのは、データカードを100枚読み込むということ
でしょうか。
character 100
というのはデータカードが2枚ひと組になっていて、
2枚合わせて100文字をひと固まりとして処理する
ということかなとも思いますが、いずれにしても
FORTRAN IVの正規の文法には、このようなステートメント
はなかったと思います。
ある機種特有の方言かもしれません
を思い出す。
最初の5コラムがラベル番号6コラム目がコメント用7コラム
から72コラムまでにステートメントを書く(打つ)
というものだった。
もしかして、
read card 100
というのは、データカードを100枚読み込むということ
でしょうか。
character 100
というのはデータカードが2枚ひと組になっていて、
2枚合わせて100文字をひと固まりとして処理する
ということかなとも思いますが、いずれにしても
FORTRAN IVの正規の文法には、このようなステートメント
はなかったと思います。
ある機種特有の方言かもしれません
442デフォルトの名無しさん
2014/06/02(月) 09:19:02.24ID:/Y6F3YHx >>439
1万行超えるのでいったいどこを抜き出せばよいのかわかりません。全てを貼ることはできませんし、各サブルーチンに出てきているread文はこれです。
ご指摘の通りインプットファイルから取り込んだものを各変数へ分配していっています。
アウトプットファイルから、入力した値と読み込んだ値が一致しているかどうかは確認済です。
ただ、問題となっている入力部分における一行が長いと、そこを読み込めずにプログラムがそこで止まってしまうのです。入力する変数の個数の問題ではなく一行の長さに問題があるのではないかと考えているのです。
>>440
10→14に変えても読むことはためしてわかりました。有効桁数を減らして、一行の長さを短くすれば読むのです。
>>441
7マス目からプログラムを打ち始めていた頃に作られたものです。read cardというのはインプットファイルを読むという意味だそうです。いくら調べてもcardという命令分はないのでよくわかりませんが、read文といえばこれぐらいなのです
データカードというのはインプットファイルのことですよね?
今はabsoft11.0,fortran95でやっているのでそのようなことは気にしなくてよくなっています
1万行超えるのでいったいどこを抜き出せばよいのかわかりません。全てを貼ることはできませんし、各サブルーチンに出てきているread文はこれです。
ご指摘の通りインプットファイルから取り込んだものを各変数へ分配していっています。
アウトプットファイルから、入力した値と読み込んだ値が一致しているかどうかは確認済です。
ただ、問題となっている入力部分における一行が長いと、そこを読み込めずにプログラムがそこで止まってしまうのです。入力する変数の個数の問題ではなく一行の長さに問題があるのではないかと考えているのです。
>>440
10→14に変えても読むことはためしてわかりました。有効桁数を減らして、一行の長さを短くすれば読むのです。
>>441
7マス目からプログラムを打ち始めていた頃に作られたものです。read cardというのはインプットファイルを読むという意味だそうです。いくら調べてもcardという命令分はないのでよくわかりませんが、read文といえばこれぐらいなのです
データカードというのはインプットファイルのことですよね?
今はabsoft11.0,fortran95でやっているのでそのようなことは気にしなくてよくなっています
443デフォルトの名無しさん
2014/06/02(月) 10:21:47.52ID:yv/nHUfZ 昔は
_______read 6 100
とか書いてたな
_______read 6 100
とか書いてたな
444デフォルトの名無しさん
2014/06/02(月) 23:06:26.34ID:Ij4SzyXz 1つ言えるのは card とはそのプログラム内で定義された何らかの名前
そして今のところの常識的にその文法は Fortran とは異なるように見える
100 はその数字のラベルが付けられた行であるようにも考えられるが
その場合は 200 など別に変えられた場合にコンパイルエラーか
実行時の動作がぶっ壊れるだろうから、おそらく数値とみるべきか
そして今のところの常識的にその文法は Fortran とは異なるように見える
100 はその数字のラベルが付けられた行であるようにも考えられるが
その場合は 200 など別に変えられた場合にコンパイルエラーか
実行時の動作がぶっ壊れるだろうから、おそらく数値とみるべきか
445デフォルトの名無しさん
2014/06/03(火) 07:56:10.35ID:Bql6ya1H あ
446デフォルトの名無しさん
2014/06/04(水) 08:41:52.08ID:cjdS4ahW あ
447デフォルトの名無しさん
2014/06/04(水) 21:26:40.68ID:bCq7kX8R common/mat/a(20)
common/mat/a1,a2,…a25
と記述してもプログラムが動くのですがなぜでしょうか
matには20個の変数しか入れないから、a1〜a20までしか読み込まないと思ったのですが、なぜか読みます
common/mat/a1,a2,…a25
と記述してもプログラムが動くのですがなぜでしょうか
matには20個の変数しか入れないから、a1〜a20までしか読み込まないと思ったのですが、なぜか読みます
448デフォルトの名無しさん
2014/06/04(水) 23:26:31.63ID:OlqsO7Ca 文法上では、大きさの違う COMMON ブロックは、無名 COMMON ブロックでしか
許されていないのだが、まぁ昔はよくやられていた。
66時代は静的にメモリー領域が確保されるので、問題は少ない。
77時代には、文法上は COMMON ブロックも SAVE 指定しないと、
解放されるのでまずいのだが、過去との互換性から普通は静的に
確保されていたのでまぁ大丈夫だった。
COMMON 文はメモリー上の番地の共有になっている。それは先頭で位置合わせが
なされるので、より大きい方でメモリーが確保されていれば、一方が小さくても
問題ない。ただ、小さい大きさで確保されていると、エラーが出なくても
はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。
許されていないのだが、まぁ昔はよくやられていた。
66時代は静的にメモリー領域が確保されるので、問題は少ない。
77時代には、文法上は COMMON ブロックも SAVE 指定しないと、
解放されるのでまずいのだが、過去との互換性から普通は静的に
確保されていたのでまぁ大丈夫だった。
COMMON 文はメモリー上の番地の共有になっている。それは先頭で位置合わせが
なされるので、より大きい方でメモリーが確保されていれば、一方が小さくても
問題ない。ただ、小さい大きさで確保されていると、エラーが出なくても
はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。
449デフォルトの名無しさん
2014/06/04(水) 23:52:50.09ID:lml6F2RD >>448
すみません、あまり理解できず、いくつか教えてほしいことがあります。
common文はプログラム中に出てくる共通の変数を定義するために使うものだと考えています。
最初に定義する時に
common/mat/a(20)
としていれば20個の要素を入れる事ができます。その後別のサブルーチンで
common/mat/a1,a2,…a25
とすればa(20)に具体的に値を格納していっているものだと考えています。
プログラムでは共通してすべて、最大で20個の値を初期化したり記憶したり格納したりするよう記述されています。
しかしあるサブルーチンでmatを呼び出して25個の値を定義して放り込んで操作していても普通に使えているのです。
「先頭で一合わせがなされるので(どこの先頭でしょうか)、より大きい方(どこより大きいのでしょうか)でメモリーが確保されていれば」
のメモリーとははじめにglobal defineで定義する最大記憶容量のことでしょうか?
じつはこれもこの20を使って上限を決めており、ある程度は余裕をもたせているのですが、
条件を変えたりすれば、すりきりいっぱいになるかもしれないです。
「ただ、小さい大きさで確保されていると、エラーが出なくても はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。 」というのは小さい大きさというのはどこより小さいのでしょうか。はみ出して読み書きしているだけというのは今現在読み書きできていることとどうなのでしょうか。
すみません、あまり理解できず、いくつか教えてほしいことがあります。
common文はプログラム中に出てくる共通の変数を定義するために使うものだと考えています。
最初に定義する時に
common/mat/a(20)
としていれば20個の要素を入れる事ができます。その後別のサブルーチンで
common/mat/a1,a2,…a25
とすればa(20)に具体的に値を格納していっているものだと考えています。
プログラムでは共通してすべて、最大で20個の値を初期化したり記憶したり格納したりするよう記述されています。
しかしあるサブルーチンでmatを呼び出して25個の値を定義して放り込んで操作していても普通に使えているのです。
「先頭で一合わせがなされるので(どこの先頭でしょうか)、より大きい方(どこより大きいのでしょうか)でメモリーが確保されていれば」
のメモリーとははじめにglobal defineで定義する最大記憶容量のことでしょうか?
じつはこれもこの20を使って上限を決めており、ある程度は余裕をもたせているのですが、
条件を変えたりすれば、すりきりいっぱいになるかもしれないです。
「ただ、小さい大きさで確保されていると、エラーが出なくても はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。 」というのは小さい大きさというのはどこより小さいのでしょうか。はみ出して読み書きしているだけというのは今現在読み書きできていることとどうなのでしょうか。
450デフォルトの名無しさん
2014/06/04(水) 23:54:33.80ID:OlqsO7Ca character 命令があるということは FORTRAN77 だな。
文法的に成り立つ解釈としては、FORTRAN77では空白は無視されるから、
CHARACTER card 100 とは今でいうcharacter(len=1) :: card100
read card 100 は、read card100 だが、この時 card100 には Format文が
入らないとだめなので、1文字では無理w
CHARACTER CARD*100 の間違いかとも思ったが、READ CARD 100が成り立たず
終了w
文法的に成り立つ解釈としては、FORTRAN77では空白は無視されるから、
CHARACTER card 100 とは今でいうcharacter(len=1) :: card100
read card 100 は、read card100 だが、この時 card100 には Format文が
入らないとだめなので、1文字では無理w
CHARACTER CARD*100 の間違いかとも思ったが、READ CARD 100が成り立たず
終了w
451デフォルトの名無しさん
2014/06/05(木) 00:08:43.48ID:m2ykd6YT 同じプログラム単位に書いたなら
common/mat/a(20)
common/mat/a1,a2,…a25
は
common/mat/a(20),a1,a2,…a25
と同じだったかと
違うプログラム単位に書いたなら多分未定義だが
重なるメモリはそれっぽく読めて、多い分はそのまま使えるっぽい
common/mat/a(20)
common/mat/a1,a2,…a25
は
common/mat/a(20),a1,a2,…a25
と同じだったかと
違うプログラム単位に書いたなら多分未定義だが
重なるメモリはそれっぽく読めて、多い分はそのまま使えるっぽい
452デフォルトの名無しさん
2014/06/05(木) 00:38:07.03ID:a9B4CiIQ >>451のいう通り、同じプログラム単位に書かれたら、後ろに追加になる。
COMMONはグローバル変数とは違う。メモリー領域の共有。
COMMON/mat/a(20)とCOMMON/mat/a1,a2,....,a25が別々のプログラム単位に
あらわれたら、それはa(1)とa1の番地が等しくて、メモリー領域を共有している。
(ポインター風にいえば同じ番地を差している。)同様にa(2)はa2、a(3)はa3...
a(20)はa20とメモリー領域を共有している。
さてa21に対応する配列要素はないのだが、メモリー上では配列をはみ出した
a(21)にあたる番地を差すことになる。(配列はメモリー上で連続に確保される。
COMMON変数は、普通は、宣言順に詰めてメモリー上に配置される)
だから、コンパイラが気を利かせて、名前付きCOMMONであっても、
最大サイズのCOMMONブロックの大きさを確保してくれていれば、
なんら問題は生じない。しかし、昔のHITACとか気の利かない堅物は、
最初に出会ったCOMMONブロックの大きさで領域確保するので、ちとまずい。
(ACOS>FACOM>HITACの順でけつの穴が小さい。)
COMMONブロックの大きさが違っていいのは、名前付きCOMMONのみ。
今の質問者の場合はmatという名前がついているので、本来はサイズが違う
のは許されていない。が、昔はよく使われていた。
だから別に驚くことでも何でもない。
ちなみに無名COMMONとは(COMMON //a(20) とか COMMON a(20)とか)
COMMONはグローバル変数とは違う。メモリー領域の共有。
COMMON/mat/a(20)とCOMMON/mat/a1,a2,....,a25が別々のプログラム単位に
あらわれたら、それはa(1)とa1の番地が等しくて、メモリー領域を共有している。
(ポインター風にいえば同じ番地を差している。)同様にa(2)はa2、a(3)はa3...
a(20)はa20とメモリー領域を共有している。
さてa21に対応する配列要素はないのだが、メモリー上では配列をはみ出した
a(21)にあたる番地を差すことになる。(配列はメモリー上で連続に確保される。
COMMON変数は、普通は、宣言順に詰めてメモリー上に配置される)
だから、コンパイラが気を利かせて、名前付きCOMMONであっても、
最大サイズのCOMMONブロックの大きさを確保してくれていれば、
なんら問題は生じない。しかし、昔のHITACとか気の利かない堅物は、
最初に出会ったCOMMONブロックの大きさで領域確保するので、ちとまずい。
(ACOS>FACOM>HITACの順でけつの穴が小さい。)
COMMONブロックの大きさが違っていいのは、名前付きCOMMONのみ。
今の質問者の場合はmatという名前がついているので、本来はサイズが違う
のは許されていない。が、昔はよく使われていた。
だから別に驚くことでも何でもない。
ちなみに無名COMMONとは(COMMON //a(20) とか COMMON a(20)とか)
453デフォルトの名無しさん
2014/06/05(木) 01:27:46.66ID:a9B4CiIQ コンパイラのオプションでMAPファイルを書かせれば確かめられる。
Intel Fortranの場合、/MAPでいく。gfortran はちょっと見た感じ見つからんw
昔のコンパイラなら必ずあった。
MAPファイル内を探すと
0004:00000aa0 _MAT 00406aa0 <common>
0004:00000b20 ___native_startup_state 00406b20 <common>
0004:00000b24 ___native_startup_lock 00406b24 <common>
0004:00000b28 ___onexitend 00406b28 <common>
0004:00000b2c ___onexitbegin 00406b2c <common>
0004:00000b30 __NoHeapEnableTerminationOnCorruption 00406b30 <common>
0004:00000b34 ___dyn_tls_init_callback 00406b34 <common>
こんな感じの出力がある。
ここで実験した感じでは、単精度4バイト*8個=32バイトづつ、
領域を確保していっている。COMMONでa1..a25 の場合、本来は4*25バイト
あれば十分だが、8の倍数ごと確保しているようなので、
番地 00406aa0 から 00406b20 まで4*32バイト確保している。
COMMMONの現れる順番に関わらず、最大のサイズをとってくれている模様。
Intel子は気が利くなw 心ぴょんぴょん待ち〜
Intel Fortranの場合、/MAPでいく。gfortran はちょっと見た感じ見つからんw
昔のコンパイラなら必ずあった。
MAPファイル内を探すと
0004:00000aa0 _MAT 00406aa0 <common>
0004:00000b20 ___native_startup_state 00406b20 <common>
0004:00000b24 ___native_startup_lock 00406b24 <common>
0004:00000b28 ___onexitend 00406b28 <common>
0004:00000b2c ___onexitbegin 00406b2c <common>
0004:00000b30 __NoHeapEnableTerminationOnCorruption 00406b30 <common>
0004:00000b34 ___dyn_tls_init_callback 00406b34 <common>
こんな感じの出力がある。
ここで実験した感じでは、単精度4バイト*8個=32バイトづつ、
領域を確保していっている。COMMONでa1..a25 の場合、本来は4*25バイト
あれば十分だが、8の倍数ごと確保しているようなので、
番地 00406aa0 から 00406b20 まで4*32バイト確保している。
COMMMONの現れる順番に関わらず、最大のサイズをとってくれている模様。
Intel子は気が利くなw 心ぴょんぴょん待ち〜
454453
2014/06/05(木) 01:28:36.28ID:a9B4CiIQ テストプログラム
subroutine sub()
common/mat/a(20)
a = 1.0
print *, a
end
program Console1
real a
common/mat/a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,&
a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,&
a21,a22,a23,a24,a25
a = 0.0
print *, (Z'b20'-Z'aa0') / 4
end program Console1
subroutine sub()
common/mat/a(20)
a = 1.0
print *, a
end
program Console1
real a
common/mat/a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,&
a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,&
a21,a22,a23,a24,a25
a = 0.0
print *, (Z'b20'-Z'aa0') / 4
end program Console1
455デフォルトの名無しさん
2014/06/05(木) 01:40:20.97ID:ivUEXHmG Emacsでfortran のコマンド自動補完できるのかな?
456デフォルトの名無しさん
2014/06/05(木) 11:54:05.31ID:qVumrB9V457デフォルトの名無しさん
2014/06/05(木) 22:09:23.11ID:m2ykd6YT common/mat/a(20)
→ real * 20個 = 80 byte → 32 byte 単位で3つ分 (96 byte)
common/mat/a1,a2,…a25
→ real * 25個 = 100 byte → 32 byte 単位で4つ分 (128 byte)
Intelの場合は、プログラムのつじつま合わせに /mat/ には4つ分のメモリが必要だと判断した、ということ
32byte単位なのは、そうしたほうが「自分とこの最適化に有利」だから
気を利かせて余分に取ってるわけではない
→ real * 20個 = 80 byte → 32 byte 単位で3つ分 (96 byte)
common/mat/a1,a2,…a25
→ real * 25個 = 100 byte → 32 byte 単位で4つ分 (128 byte)
Intelの場合は、プログラムのつじつま合わせに /mat/ には4つ分のメモリが必要だと判断した、ということ
32byte単位なのは、そうしたほうが「自分とこの最適化に有利」だから
気を利かせて余分に取ってるわけではない
458453
2014/06/05(木) 23:04:15.60ID:a9B4CiIQ >>456
虚心に読めよw
1.名前付きCOMMONで長さがそろわないのは文法違反。
2.ゆえにそれがどう扱われるかは、処理系依存。
3.したがって、自分の利用しているコンパイラがどう扱っているか調べる必要あり。
4.調べる方法の一例はMAPファイルを書かせること。実例をIntelCompilerで示した。
結論:そなたの使っているコンパイラがわからなければここでは答えようがない。
大抵の処理系では適当に慮ってやってくれるが、昔のHITACのような凡例も
あるので何とも言えない。NAGとか文法にうるさいのを売りにしている処理系では
期待薄。
>>457
うむ。DECのαとか、64bit時代になってから、COMMON文の中までPaddingして
メモリー・アラインメントをそろえてくるので、昔のプログラムを動かそうとすると
やっかい。
Intelが32バイトづつ増やしているのは、AVXとかベクトル化の単位に合わせている
可能性が高いと思う。
虚心に読めよw
1.名前付きCOMMONで長さがそろわないのは文法違反。
2.ゆえにそれがどう扱われるかは、処理系依存。
3.したがって、自分の利用しているコンパイラがどう扱っているか調べる必要あり。
4.調べる方法の一例はMAPファイルを書かせること。実例をIntelCompilerで示した。
結論:そなたの使っているコンパイラがわからなければここでは答えようがない。
大抵の処理系では適当に慮ってやってくれるが、昔のHITACのような凡例も
あるので何とも言えない。NAGとか文法にうるさいのを売りにしている処理系では
期待薄。
>>457
うむ。DECのαとか、64bit時代になってから、COMMON文の中までPaddingして
メモリー・アラインメントをそろえてくるので、昔のプログラムを動かそうとすると
やっかい。
Intelが32バイトづつ増やしているのは、AVXとかベクトル化の単位に合わせている
可能性が高いと思う。
459デフォルトの名無しさん
2014/06/05(木) 23:32:23.89ID:ivUEXHmG 誰かいまっくすでフォートランのコマンド自動補完する方法しらんかいの?
460デフォルトの名無しさん
2014/06/06(金) 03:54:07.35ID:jaKSg6aA みんな Stallman のデブが嫌いだからな
それにスクリーンエディターに頼るのは甘え
俺は甘えん坊だがw
それにスクリーンエディターに頼るのは甘え
俺は甘えん坊だがw
461デフォルトの名無しさん
2014/06/06(金) 16:41:53.21ID:J0jnFElL 甘いと言うより古いな
462デフォルトの名無しさん
2014/06/06(金) 22:53:03.99ID:Bx53wjCJ メモ帳からデータを読み込む際、TABキーによる空白や全角による空白、半角による空白で違いはあるのですか?
数値を1 2 3 4と1行に入力したとき勝手に1、2、3、4と区別して読んでくれるのでどうやって判断しているのだろうと疑問に思いました。
試しにすべてのTABキースベースを半角1スペースに置換して読み込ませたところ、エラーで読みませんでした。
数値を1 2 3 4と1行に入力したとき勝手に1、2、3、4と区別して読んでくれるのでどうやって判断しているのだろうと疑問に思いました。
試しにすべてのTABキースベースを半角1スペースに置換して読み込ませたところ、エラーで読みませんでした。
463デフォルトの名無しさん
2014/06/08(日) 11:12:25.46ID:dwjjMbeb >>460
みんななに使ってるのかな?
みんななに使ってるのかな?
464デフォルトの名無しさん
2014/06/09(月) 23:14:56.35ID:p2A2eKRk >>429ですが、解決しました。
CHARACTER*120という部分だけを変えていて、FORMAT文まで変えていなかったりときちんとすべて変えていなかったのが原因でした。
そこここにローカルな記述方法が多く困りましたが、とても助かりました。ありがとうございました。
CHARACTER*120という部分だけを変えていて、FORMAT文まで変えていなかったりときちんとすべて変えていなかったのが原因でした。
そこここにローカルな記述方法が多く困りましたが、とても助かりました。ありがとうございました。
465デフォルトの名無しさん
2014/06/10(火) 00:00:20.47ID:uCkYRtw5 みんなずっこけるよ…
466デフォルトの名無しさん
2014/06/11(水) 22:05:12.93ID:HeH2upb6 プログラムが長くなってきて、
いくつかのファイルに分けてサブルーチンを書いているのですが、
わかりやすい整理方法、命名方法などないでしょうか
同じ機能群のサブルーチンは
同じファイルにまとめるぐらいはしているのですが
だんだん分からなくなってきて
多分このまま続けたら発散するんだろうな・・と思います
スレ違いかもしれませんがもしコツなどありましたらお願いします
いくつかのファイルに分けてサブルーチンを書いているのですが、
わかりやすい整理方法、命名方法などないでしょうか
同じ機能群のサブルーチンは
同じファイルにまとめるぐらいはしているのですが
だんだん分からなくなってきて
多分このまま続けたら発散するんだろうな・・と思います
スレ違いかもしれませんがもしコツなどありましたらお願いします
467デフォルトの名無しさん
2014/06/12(木) 00:49:36.30ID:iuJue+V7 あるプログラムの一部を修正している途中なのですが、触っていないところでエラーが起きるようになり、困っています。
build自体は問題がなくて、build後のプログラムを実行すると以下のエラーメッセージが出て止まります
illegal character in numeric input
read(unit=1,...)
修正前のプログラムでは滞りなく回るのですが修正中のプログラムでは回らなくなっています。
触っていないところなのでどこから手をつけて良いかわかりません。
build自体は問題がなくて、build後のプログラムを実行すると以下のエラーメッセージが出て止まります
illegal character in numeric input
read(unit=1,...)
修正前のプログラムでは滞りなく回るのですが修正中のプログラムでは回らなくなっています。
触っていないところなのでどこから手をつけて良いかわかりません。
468デフォルトの名無しさん
2014/06/12(木) 01:11:55.34ID:37CEZRmy >>467に追記です。
修正前のプログラムは
absoft fortran 9.0(windows7)
修正後のプログラムは
absoft fortran11.0(windows8)で作られています
修正前のバージョンに自信がないですが、バージョンが異なるのは確かです
もともと、修正後のプログラムはビルドできるのに、そのプログラムをwindws7、9.0のパソコンでビルドしようとするとなぜかビルドできないという状況です
そこがエラーを起こす原因なのかもしれません
プログラムが止まるところはインプットファイル中にある、ある数を0にしておけば回るようになり、0じゃなくて数を与えるとエラーを吐きます。
修正前のプログラムは
absoft fortran 9.0(windows7)
修正後のプログラムは
absoft fortran11.0(windows8)で作られています
修正前のバージョンに自信がないですが、バージョンが異なるのは確かです
もともと、修正後のプログラムはビルドできるのに、そのプログラムをwindws7、9.0のパソコンでビルドしようとするとなぜかビルドできないという状況です
そこがエラーを起こす原因なのかもしれません
プログラムが止まるところはインプットファイル中にある、ある数を0にしておけば回るようになり、0じゃなくて数を与えるとエラーを吐きます。
469デフォルトの名無しさん
2014/06/12(木) 02:49:22.16ID:KPlz8uhx おおかた、全角文字でも入っているのだろう。
470デフォルトの名無しさん
2014/06/12(木) 07:38:50.36ID:IkGTnMqV >>469
どうすればそこを見つけられるのでしょうか
どうすればそこを見つけられるのでしょうか
471デフォルトの名無しさん
2014/06/12(木) 22:00:13.35ID:1yO42ooY >>468ですが、修正は関係ないことがわかりました。
もともとの渡されたソースファイルをabsoft fortran 11.0でbuildするとbuild自体はうまくいきますが、同じ箇所でruntime errorとなりました
コピーして新規ファイルを作ってbuildしても同様の結果となりました。.f95.f77.fの3パターンで新規ファイルを作ってbuildしましたが、同じ結果でした
verはおそらく9.0で拡張子は.fで渡されています。
.fファイルだけでなくguiやgviという拡張しのついたファイルも一緒に渡されているのですが、それを11.0では必要としていないので使っていません。
これが何か悪さをしているのでしょうか?
もともとの渡されたソースファイルをabsoft fortran 11.0でbuildするとbuild自体はうまくいきますが、同じ箇所でruntime errorとなりました
コピーして新規ファイルを作ってbuildしても同様の結果となりました。.f95.f77.fの3パターンで新規ファイルを作ってbuildしましたが、同じ結果でした
verはおそらく9.0で拡張子は.fで渡されています。
.fファイルだけでなくguiやgviという拡張しのついたファイルも一緒に渡されているのですが、それを11.0では必要としていないので使っていません。
これが何か悪さをしているのでしょうか?
472デフォルトの名無しさん
2014/06/13(金) 08:46:16.45ID:YPxIZA8y もともとのファイルは9.0でビルドすると正しく動くということ?
環境を変えるときコンパイラが生成したものを運んだりしてないか
ある数が0の時回るとあるけど、その変数周りを調べていくしかないと思う
なんの数字か知らないが、例えばその数が読み込むデータの数を表してて、その数字と実際のデータ数があってない
そして型の合わない次のデータを読もうとしてとまるとか
環境を変えるときコンパイラが生成したものを運んだりしてないか
ある数が0の時回るとあるけど、その変数周りを調べていくしかないと思う
なんの数字か知らないが、例えばその数が読み込むデータの数を表してて、その数字と実際のデータ数があってない
そして型の合わない次のデータを読もうとしてとまるとか
473デフォルトの名無しさん
2014/06/13(金) 08:59:26.44ID:XnqRfLRO >>472
はい。同じ読み込みデータでも正しく動きます。
runtime error
illegal character in numeric input
ある数というのは出力してほしいデータを指定する数です。
データの種類が5種類ほどあって、ある1種のデータを出力するよう指示をすると止まってしまいます。
一行中に
300 400 200 0 0
というように出力してほしいデータの数を指定しますが、みぎから2番目のデータを変えるとダメです
正しいアウトプットでは
<< 出力するデータの情報 >>
出力データ
...
というように進むのですが、ある数字では
>>
だけが延々と繰り返されたり、別の数字では上記の通りruntime error illegal character in numeric inputと出て止まったり
というような感じです
はい。同じ読み込みデータでも正しく動きます。
runtime error
illegal character in numeric input
ある数というのは出力してほしいデータを指定する数です。
データの種類が5種類ほどあって、ある1種のデータを出力するよう指示をすると止まってしまいます。
一行中に
300 400 200 0 0
というように出力してほしいデータの数を指定しますが、みぎから2番目のデータを変えるとダメです
正しいアウトプットでは
<< 出力するデータの情報 >>
出力データ
...
というように進むのですが、ある数字では
>>
だけが延々と繰り返されたり、別の数字では上記の通りruntime error illegal character in numeric inputと出て止まったり
というような感じです
474デフォルトの名無しさん
2014/06/13(金) 09:10:39.79ID:YPxIZA8y475デフォルトの名無しさん
2014/06/15(日) 17:47:40.77ID:QZWVyVFy476デフォルトの名無しさん
2014/06/16(月) 04:00:13.60ID:fWvfMn7M477デフォルトの名無しさん
2014/06/16(月) 10:00:44.78ID:juShtlay cuda fortranについて初歩的な質問なのですが、
PGI workstationで、-cublasとオプションを付けてコンパイルしようとすると、
『fatal error LNK1104: cannnot open file 'libcublas.lib'』とエラーが出てしまいます。
この場合、どうしたら良いですかね?
どなたか教えてくださると助かります。
PGI workstationで、-cublasとオプションを付けてコンパイルしようとすると、
『fatal error LNK1104: cannnot open file 'libcublas.lib'』とエラーが出てしまいます。
この場合、どうしたら良いですかね?
どなたか教えてくださると助かります。
478デフォルトの名無しさん
2014/06/16(月) 10:13:18.23ID:3pyBJ4C4479デフォルトの名無しさん
2014/06/16(月) 15:38:44.47ID:juShtlay >>478
探して見たところ、'libcublas.ipl'、'libcublasemu.lib'という名前のファイルしか見つかりませでした。
そこで、これらのファイルが保存されているフォルダのパスを追加してコンパイルしたところ、
『error lnk2019: unresolved external symbol referenced in function』
というようなエラーが出てきてしまったのですが、
どうすれば良いか教えていただけませんか?
探して見たところ、'libcublas.ipl'、'libcublasemu.lib'という名前のファイルしか見つかりませでした。
そこで、これらのファイルが保存されているフォルダのパスを追加してコンパイルしたところ、
『error lnk2019: unresolved external symbol referenced in function』
というようなエラーが出てきてしまったのですが、
どうすれば良いか教えていただけませんか?
480デフォルトの名無しさん
2014/06/16(月) 15:50:37.89ID:Q+b6M39D481デフォルトの名無しさん
2014/06/16(月) 16:27:09.31ID:juShtlay コード中の'cublas'を'cublasemu'に変更し、
'-lcublas'を'-lcublasemu'に変更してコンパイルしたところ、
『unable to open MODULE file cublasemu.mod
compilation aborted』
と出てしまいました。。。
'-lcublas'を'-lcublasemu'に変更してコンパイルしたところ、
『unable to open MODULE file cublasemu.mod
compilation aborted』
と出てしまいました。。。
482デフォルトの名無しさん
2014/06/16(月) 16:43:59.97ID:vxzjg7XS483デフォルトの名無しさん
2014/06/16(月) 16:54:43.67ID:juShtlay >>482
元のコードでやってもやはり出てしまいますね。
元のコードでやってもやはり出てしまいますね。
484デフォルトの名無しさん
2014/06/16(月) 17:46:47.99ID:vxzjg7XS >>483
use cublasemuになっていませんか?
use cublasemuになっていませんか?
485デフォルトの名無しさん
2014/06/17(火) 09:43:20.11ID:W5zFtzyB >>484
いえ、ちゃんとuse cublasってなっています。
いえ、ちゃんとuse cublasってなっています。
486デフォルトの名無しさん
2014/06/17(火) 13:19:25.73ID:gUXRuUGZ use cudafor
use cublas
が指定されている
-Mcudaまたは-Mcuda:4.0あるいは-Mcuda=emu
unresolved external symbolと言われたら
libが足りないので-lで追加
*.libがないと言われたら
-Lなどでパス追加
*.modがないと言われたら
-Iでパス追加
参考
http://www.softek.co.jp/SPG/Pgi/TIPS/opt_cudaF.html
http://www.softek.co.jp/SPG/Pgi/TIPS/public/accel/cublas40.html
use cublas
が指定されている
-Mcudaまたは-Mcuda:4.0あるいは-Mcuda=emu
unresolved external symbolと言われたら
libが足りないので-lで追加
*.libがないと言われたら
-Lなどでパス追加
*.modがないと言われたら
-Iでパス追加
参考
http://www.softek.co.jp/SPG/Pgi/TIPS/opt_cudaF.html
http://www.softek.co.jp/SPG/Pgi/TIPS/public/accel/cublas40.html
487デフォルトの名無しさん
2014/06/17(火) 16:58:12.46ID:W5zFtzyB >>486
-Lパスでディレクトリを指定して、-cublasemuをつけてコンパイルしたところ、
"libcublasemu.lib : error lnk2019: unresolved external symbol referenced in function"
が、ものすごい数のが出てきたのですが、どうしたらいいですかね?
一個ずつ-lで追加していくしか無いのでしょうか。
-Lパスでディレクトリを指定して、-cublasemuをつけてコンパイルしたところ、
"libcublasemu.lib : error lnk2019: unresolved external symbol referenced in function"
が、ものすごい数のが出てきたのですが、どうしたらいいですかね?
一個ずつ-lで追加していくしか無いのでしょうか。
488デフォルトの名無しさん
2014/06/17(火) 17:24:37.11ID:AhgC7kyl cublas使わなければ普通に動くの?
489デフォルトの名無しさん
2014/06/18(水) 11:22:33.36ID:nvOujYC+ >>488
はい。cublasが関わるところを全てコメントアウトしたところ、動きました。
はい。cublasが関わるところを全てコメントアウトしたところ、動きました。
490デフォルトの名無しさん
2014/06/18(水) 18:11:03.14ID:s+RQ8hIL >>489
可能な限り少しずつコメントアウトを外していき
その都度コンパイルが通るようにオプションを調整してみてください
最初はuse cublasだけなど
大量のエラーが少しずつ出ることを期待します
cublasは呼び出し方法が旧いものや新しいもので3種あるようですが
呼び出し方と CUDA toolkit のバージョン指定はあっていますか?
pgi cuda Fortranはデバッグ用にGPUを使わないエミュレートモードが用意されています
コンパイルオプションとリンクするライブラリの両方で切替えるようです
どちらを使用していますか?
cublasemuはエミュレートモード用で
オプションに-Mcuda=emuを併せて指定します
可能な限り少しずつコメントアウトを外していき
その都度コンパイルが通るようにオプションを調整してみてください
最初はuse cublasだけなど
大量のエラーが少しずつ出ることを期待します
cublasは呼び出し方法が旧いものや新しいもので3種あるようですが
呼び出し方と CUDA toolkit のバージョン指定はあっていますか?
pgi cuda Fortranはデバッグ用にGPUを使わないエミュレートモードが用意されています
コンパイルオプションとリンクするライブラリの両方で切替えるようです
どちらを使用していますか?
cublasemuはエミュレートモード用で
オプションに-Mcuda=emuを併せて指定します
491デフォルトの名無しさん
2014/06/20(金) 16:00:17.10ID:utkwlJ0p Cのatoiとかatofのように,文字列としての数字の列を
integerなりrealの値に変換してくれる函数はあるでしょうか。
当方は,MinGWのgfortran95を使っています。
integerなりrealの値に変換してくれる函数はあるでしょうか。
当方は,MinGWのgfortran95を使っています。
492デフォルトの名無しさん
2014/06/20(金) 19:25:02.85ID:bxod4dQ6 >>491
内部ファイルを使うのがセオリー
NAG Fortran入門 19.5 数値と文字の変換を行う方法
ttp://www.nag-j.co.jp/fortran/FI_18.html#ConvertingBetweenNumbersAndStrings
内部ファイルを使うのがセオリー
NAG Fortran入門 19.5 数値と文字の変換を行う方法
ttp://www.nag-j.co.jp/fortran/FI_18.html#ConvertingBetweenNumbersAndStrings
493デフォルトの名無しさん
2014/06/20(金) 21:53:29.14ID:utkwlJ0p >492
ありがとうございます。
こういう裏ワザがあったのですね。
さっそく使わせていただきます。
ありがとうございます。
こういう裏ワザがあったのですね。
さっそく使わせていただきます。
494デフォルトの名無しさん
2014/06/21(土) 17:36:05.91ID:L2qICpES 裏ワザというかFORTRAN77の頃からあったし、
66時代にはENCODE/DECODE関数が用意されていたんだがな。
マニュアルをよく読めば、内部ファイルの項目が昔から書いてある。
66時代にはENCODE/DECODE関数が用意されていたんだがな。
マニュアルをよく読めば、内部ファイルの項目が昔から書いてある。
495デフォルトの名無しさん
2014/06/21(土) 20:05:31.04ID:6Ae9RUEd >464
そうでしたか。なにしろわたしが FORTRANを学生時代に始めた
ころはFORTRAN IVのころで80桁のパンチカードにパンチした
カードデックを窓口の届けると2日程で,棚にカードとラインプリ
ンタで打ち出した結果がおいてあるという時代(東大の計算センター
にあったHITAC 5020)のころで,FORTRAN77の出る前
ダイクストラの構造化プログラミングが騒がれ始めて,
カーニハンとリッチーの『ソフトウエア作法』をよんで,
構造化出来るRATFORを大学にあった小さなコンピュータで
実験しているころからの進歩を知りませんでした。
その後,CおよびC++に興味が移りFROTRANをご無沙汰してい
たのですが,最近のFORTRANで128bit処理ができることを
知り,まいもどってきた次第です。
市販のfortran90,95の入門書を見てみたのですが,見当ら
なかったので,質問したしだいです。
そうでしたか。なにしろわたしが FORTRANを学生時代に始めた
ころはFORTRAN IVのころで80桁のパンチカードにパンチした
カードデックを窓口の届けると2日程で,棚にカードとラインプリ
ンタで打ち出した結果がおいてあるという時代(東大の計算センター
にあったHITAC 5020)のころで,FORTRAN77の出る前
ダイクストラの構造化プログラミングが騒がれ始めて,
カーニハンとリッチーの『ソフトウエア作法』をよんで,
構造化出来るRATFORを大学にあった小さなコンピュータで
実験しているころからの進歩を知りませんでした。
その後,CおよびC++に興味が移りFROTRANをご無沙汰してい
たのですが,最近のFORTRANで128bit処理ができることを
知り,まいもどってきた次第です。
市販のfortran90,95の入門書を見てみたのですが,見当ら
なかったので,質問したしだいです。
496デフォルトの名無しさん
2014/06/21(土) 22:49:19.55ID:jwjy0CXq はろけくも来つるものかなフォートラン
あっ季語がない
あっ季語がない
497デフォルトの名無しさん
2014/06/24(火) 20:49:58.43ID:vNnfb12N Gfortran 使ってるんだが、データを読み込ませる際、2行ごとにデータを読み込ませることって可能?
498デフォルトの名無しさん
2014/06/25(水) 01:47:13.51ID:2uAyyXu5 素直に全部読みなさい
変数に入った値は、必ず使えとも使うなとも言われてないだろう
変数に入った値は、必ず使えとも使うなとも言われてないだろう
499デフォルトの名無しさん
2014/06/26(木) 00:45:30.86ID:oXHKxD2l まぁ空のread文で1行飛ばせるけどな。
Fortmatの/でも行けたっけかな?曖昧みー
Fortmatの/でも行けたっけかな?曖昧みー
500デフォルトの名無しさん
2014/06/26(木) 01:01:48.05ID:pqUjp/UA awkなりsedなりで一行飛ばしの中間ファイル作って、それをデータファイルにするとかじゃだめなの?
入力関係でつまづくなら、fortranにあわせたファイルを作成する方が早いのではと思ってしまう。
バイナリデータだとテキストみたいにいかないのか。バイナリデータだったらごめん。
入力関係でつまづくなら、fortranにあわせたファイルを作成する方が早いのではと思ってしまう。
バイナリデータだとテキストみたいにいかないのか。バイナリデータだったらごめん。
501デフォルトの名無しさん
2014/06/26(木) 08:16:37.95ID:MILdybit >>498->>500
レスどもです。直接n行ごとに読み込むという作業はできないみたいですね。
私も中間ファイルを作って…と思いましたが、読み込みデータをいじってはいけないらしく断念しました。
解決案は以下の通り、(n行ごとに読みたい場合)
If(mod(i,n) .eq. 0) then
Read(20,*) hoge(i)
Else
Read(20, *)
Endif
レスどもです。直接n行ごとに読み込むという作業はできないみたいですね。
私も中間ファイルを作って…と思いましたが、読み込みデータをいじってはいけないらしく断念しました。
解決案は以下の通り、(n行ごとに読みたい場合)
If(mod(i,n) .eq. 0) then
Read(20,*) hoge(i)
Else
Read(20, *)
Endif
502デフォルトの名無しさん
2014/06/26(木) 21:08:20.99ID:2skFYUOi 詰めないと使いにくくない?
i=1
do m=1, linenum
if(mod(m,n) .eq. 1) then
read(20,*) hoge(i)
i = i +1
else
read(20,*)
endif
enddo
i=1
do m=1, linenum
if(mod(m,n) .eq. 1) then
read(20,*) hoge(i)
i = i +1
else
read(20,*)
endif
enddo
503デフォルトの名無しさん
2014/06/27(金) 00:10:25.56ID:kJEq6I8z >>499の言うとおり、formatを'(i,5/)'とかにすれば良いのでは?
504デフォルトの名無しさん
2014/06/27(金) 00:38:41.62ID:iFH1F/Cx505デフォルトの名無しさん
2014/06/27(金) 00:42:32.62ID:P3Dz9sSW formatのスラッシュでskipできるぞ。
program test
implicit none
character(len = 132) :: text
open(10, file = 'test.f90')
1 read(10, '(a, /)', end = 999) text
print *, trim(text)
goto 1
999 stop
end program test
program test
implicit none
character(len = 132) :: text
open(10, file = 'test.f90')
1 read(10, '(a, /)', end = 999) text
print *, trim(text)
goto 1
999 stop
end program test
506デフォルトの名無しさん
2014/06/27(金) 01:05:20.13ID:iFH1F/Cx >>505
おお!スラがスキップすると言う指示内容なんですね。
おお!スラがスキップすると言う指示内容なんですね。
507デフォルトの名無しさん
2014/06/27(金) 02:12:24.88ID:P3Dz9sSW508デフォルトの名無しさん
2014/06/27(金) 09:18:57.76ID:F3h4qtWf 久しぶりにfortranのプログラム見たが、FORTRAN77の時代と違って気持ち悪い。
これならC++の方がまだいい。テンプレート関係を除けば。
でも、fortranは4倍精度計算ができるからなあ。
並列処理やGPGPUに対応したライブラリも出ているし。
まあ、年寄はfortranからMatlabに移行しているみたいだが。
これならC++の方がまだいい。テンプレート関係を除けば。
でも、fortranは4倍精度計算ができるからなあ。
並列処理やGPGPUに対応したライブラリも出ているし。
まあ、年寄はfortranからMatlabに移行しているみたいだが。
509デフォルトの名無しさん
2014/06/28(土) 00:46:11.64ID:PIVLw57u おじいちゃん。
あんま結論を急がない方がいい。
配列演算気持ちいい。PUREでELEMENTALなら最高。
4倍精度は精度は4倍だが計算時間は10倍超だから、
10倍の時間の合間にアルゴリズム見直した方が吉。
あんま結論を急がない方がいい。
配列演算気持ちいい。PUREでELEMENTALなら最高。
4倍精度は精度は4倍だが計算時間は10倍超だから、
10倍の時間の合間にアルゴリズム見直した方が吉。
510デフォルトの名無しさん
2014/06/28(土) 02:59:17.00ID:EHQFW5QP gccにもquadmathがあるんだからあまりFORTRANを高く評価しない方がいいよ
511デフォルトの名無しさん
2014/06/28(土) 13:41:05.28ID:1f0E4KM2 並列計算させてdoループの中でwrite文でファイル書き込みしたら中身の順番めちゃくちゃで泣きました。
どーにもなんないんですかね?
どーにもなんないんですかね?
512デフォルトの名無しさん
2014/06/28(土) 15:42:05.65ID:cJj78OR7 >>510
そもそもlibquadmathはFortranのために追加されたんだが
そもそもlibquadmathはFortranのために追加されたんだが
513デフォルトの名無しさん
2014/06/28(土) 16:56:46.35ID:DtEJ1AXR >>511
write文だけ逐次処理させるか、ループの外に出すしかないと思う。
write文だけ逐次処理させるか、ループの外に出すしかないと思う。
514デフォルトの名無しさん
2014/06/28(土) 22:06:02.07ID:mzWdk+zj >>509
はぁ。。。
配列演算気持ちいい、って何? それ。
C**なら行列演算クラスライブラリ作って、演算子オーバーロード使えば終わりじゃん。
まさか、行列積が「・」でできると言うんじゃないだろな?
>4倍精度は精度は4倍だが計算時間は10倍超だから、
>10倍の時間の合間にアルゴリズム見直した方が吉。
何言ってんだ?この馬鹿。
物理計算によっては4倍精度の計算が必要なの。計算時間やアルゴリズム
の問題じゃない。人の言ってることをそのまま受け売りするな。阿呆
はぁ。。。
配列演算気持ちいい、って何? それ。
C**なら行列演算クラスライブラリ作って、演算子オーバーロード使えば終わりじゃん。
まさか、行列積が「・」でできると言うんじゃないだろな?
>4倍精度は精度は4倍だが計算時間は10倍超だから、
>10倍の時間の合間にアルゴリズム見直した方が吉。
何言ってんだ?この馬鹿。
物理計算によっては4倍精度の計算が必要なの。計算時間やアルゴリズム
の問題じゃない。人の言ってることをそのまま受け売りするな。阿呆
515デフォルトの名無しさん
2014/06/28(土) 22:07:05.28ID:mzWdk+zj516デフォルトの名無しさん
2014/06/29(日) 00:26:55.37ID:S1guW8MB517デフォルトの名無しさん
2014/06/29(日) 10:07:26.16ID:zjmbmtCs libquadmathの中を覗いてみたら、x86版はFPU使ってるけどx64版はSSE2使ってるな
518デフォルトの名無しさん
2014/06/29(日) 12:17:10.06ID:eLJ+YA5h519デフォルトの名無しさん
2014/06/29(日) 12:46:18.15ID:eLJ+YA5h > C++なら行列演算クラスライブラリ作って、演算子オーバーロード使えば終わりじゃん。
> まさか、行列積が「・」でできると言うんじゃないだろな?
冗長だけど、〜すれば終わり、程度には書けますぜセンセー。
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
y = matmul(A, x)
end function
!----====----====----====----====----====----====----====
program test
interface operator(.dot.)
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
end function
end interface
double precision :: A(2,2), x(2,2), y(2,2)
A = reshape( (/1.D0, 1.D0, 1.D0, 1.D0/), (/2,2/) )
x = reshape( (/1.D0, 3.D0, 2.D0, 4.D0/), (/2,2/) )
y = A .dot. x
write (*, '(2F8.3)'), transpose(A); print *
write (*, '(2F8.3)'), transpose(x); print *
write (*, '(2F8.3)'), transpose(y)
end
> まさか、行列積が「・」でできると言うんじゃないだろな?
冗長だけど、〜すれば終わり、程度には書けますぜセンセー。
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
y = matmul(A, x)
end function
!----====----====----====----====----====----====----====
program test
interface operator(.dot.)
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
end function
end interface
double precision :: A(2,2), x(2,2), y(2,2)
A = reshape( (/1.D0, 1.D0, 1.D0, 1.D0/), (/2,2/) )
x = reshape( (/1.D0, 3.D0, 2.D0, 4.D0/), (/2,2/) )
y = A .dot. x
write (*, '(2F8.3)'), transpose(A); print *
write (*, '(2F8.3)'), transpose(x); print *
write (*, '(2F8.3)'), transpose(y)
end
520デフォルトの名無しさん
2014/06/29(日) 13:09:54.23ID:RUBiLoi5 クラスライブラリで演算子オーバーロードって・・・遅そう。
素人が書いたマクロじゃ最適化効かないでしょ。
ソースの見かけで書けたって意味ないの。
大体、高速行列演算ライブラリを自分で作れるくらいなら、四倍精度のライブラリ
も自作すればいい。昔の爺さん世代はよく倍精度・四倍精度自作ライブラリを自慢していたw
まぁC++のBlitzなんて10年以上前から夢を語ってノロノロ開発して
ようやく最近なんですけどね。
素人が書いたマクロじゃ最適化効かないでしょ。
ソースの見かけで書けたって意味ないの。
大体、高速行列演算ライブラリを自分で作れるくらいなら、四倍精度のライブラリ
も自作すればいい。昔の爺さん世代はよく倍精度・四倍精度自作ライブラリを自慢していたw
まぁC++のBlitzなんて10年以上前から夢を語ってノロノロ開発して
ようやく最近なんですけどね。
521デフォルトの名無しさん
2014/06/29(日) 14:46:16.10ID:qF+KN0J6522デフォルトの名無しさん
2014/06/29(日) 15:59:56.49ID:l4jNLVEs 並列化は普通に物理の数値計算につかうけど、、、
523デフォルトの名無しさん
2014/06/29(日) 17:26:15.54ID:rvrpBbGm >>519
あ、そう。matlabみたいに糞な「:」が好きなのね。もういいから、死んでね
お爺ちゃんからこんな言葉を言われたお前はすでに終わっている。
>>520
その通り。面倒くさかったから書かなかったけど。
とにかく、一時オブジェクトの生成と.消滅、データのコピーが頻繁におきる。
それを避けるために右辺値参照が使えるかどうか。でも行列乗算や線形連立代数方程式
を解く場合には使えないかも。まだ、やってみてないからわからんが。
作業用行列のポインタ値を管理するグローバルオブジェクトを使うと
上の問題は回避できるが、残念ながらマルチスレッドには対応できてない。
これをどのようにグローバルスレッド対応にしたらいいか、戦略が
立たない状態です。
あ、そう。matlabみたいに糞な「:」が好きなのね。もういいから、死んでね
お爺ちゃんからこんな言葉を言われたお前はすでに終わっている。
>>520
その通り。面倒くさかったから書かなかったけど。
とにかく、一時オブジェクトの生成と.消滅、データのコピーが頻繁におきる。
それを避けるために右辺値参照が使えるかどうか。でも行列乗算や線形連立代数方程式
を解く場合には使えないかも。まだ、やってみてないからわからんが。
作業用行列のポインタ値を管理するグローバルオブジェクトを使うと
上の問題は回避できるが、残念ながらマルチスレッドには対応できてない。
これをどのようにグローバルスレッド対応にしたらいいか、戦略が
立たない状態です。
524デフォルトの名無しさん
2014/06/29(日) 17:29:17.08ID:rvrpBbGm525デフォルトの名無しさん
2014/06/29(日) 17:34:36.24ID:qF+KN0J6526デフォルトの名無しさん
2014/06/29(日) 17:57:50.26ID:RUBiLoi5 David BaileyがFortran用とC++用の4倍、8倍、多倍精度ルーチン公開してた気がする。
http://crd-legacy.lbl.gov/~dhbailey/
http://crd-legacy.lbl.gov/~dhbailey/
527デフォルトの名無しさん
2014/06/29(日) 17:59:34.52ID:rvrpBbGm 間違えた
グローバルスレッド対応→スレッド対応
グローバルスレッド対応→スレッド対応
528デフォルトの名無しさん
2014/06/29(日) 21:18:38.95ID:UItnk67i529デフォルトの名無しさん
2014/06/29(日) 21:46:47.56ID:eLJ+YA5h はいはいソーデスネーでっかい一時領域作ってなにしてんでしょーねorz
pure で elemental とゆーと配列を引数に放り込むとその全要素に
関数定義された処理が適用される、各処理は独立なのでまとめるなり
並列化なりをコンパイラーに期待、かな。演算子全然関係ないしorz
過去のシサンガーとかもう辛いだけ。
どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
>>521
出力の順序だけ重要ならバッファして後から並べ替えるとか
浮動小数点演算的に結果を変えられないなら仕方ないかもだが
だって人口少ないし交流少ないし機会もないし意味すらないかもしれない、
たまに発言すれば馬鹿にされるから凄い人しか残らないわけで。
pure で elemental とゆーと配列を引数に放り込むとその全要素に
関数定義された処理が適用される、各処理は独立なのでまとめるなり
並列化なりをコンパイラーに期待、かな。演算子全然関係ないしorz
過去のシサンガーとかもう辛いだけ。
どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
>>521
出力の順序だけ重要ならバッファして後から並べ替えるとか
浮動小数点演算的に結果を変えられないなら仕方ないかもだが
だって人口少ないし交流少ないし機会もないし意味すらないかもしれない、
たまに発言すれば馬鹿にされるから凄い人しか残らないわけで。
530デフォルトの名無しさん
2014/06/30(月) 00:33:26.64ID:8S3fud89531デフォルトの名無しさん
2014/06/30(月) 02:26:19.67ID:fawqTnic Fortranの強みは常に時代の最先端ハードウェアに対応していることじゃないかな。
最近でもIntelはDECのFortran買ったし、NvidiaはPGIを買収したし。
両社ともGPUアクセレレータを含む自分らの最新ハードとセットで、
同じタイミングで対応したコンパイラを出してきている。
本来ハードウェアとソフトウェアは表裏一体、精神と肉体のような
不可分の関係にあるはず。そしてFortranは未だその密接さを保っている。
ソフトウェアの人たちは、ソフトウェア単体での独立価値を信じたいようだけど
現実は違っている。
この現実認識の歪が過剰なFortranディスカウントキャンペーンとして噴出して
いるのではないだろうか・・・と新聞並に論理を飛躍させて終わるw
最近でもIntelはDECのFortran買ったし、NvidiaはPGIを買収したし。
両社ともGPUアクセレレータを含む自分らの最新ハードとセットで、
同じタイミングで対応したコンパイラを出してきている。
本来ハードウェアとソフトウェアは表裏一体、精神と肉体のような
不可分の関係にあるはず。そしてFortranは未だその密接さを保っている。
ソフトウェアの人たちは、ソフトウェア単体での独立価値を信じたいようだけど
現実は違っている。
この現実認識の歪が過剰なFortranディスカウントキャンペーンとして噴出して
いるのではないだろうか・・・と新聞並に論理を飛躍させて終わるw
532デフォルトの名無しさん
2014/06/30(月) 13:21:06.69ID:V1UUNHQo >>529
そういうのに向かない計算アルゴリズム(隣のセルの計算結果を使う。つまり独立ではない。
そうなると同期の問題も発生する)もあるんだ。
>過去のシサンガーとかもう辛いだけ。
>どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
で、お前何が言いたいんや?日本語大丈夫か?
そういうのに向かない計算アルゴリズム(隣のセルの計算結果を使う。つまり独立ではない。
そうなると同期の問題も発生する)もあるんだ。
>過去のシサンガーとかもう辛いだけ。
>どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
で、お前何が言いたいんや?日本語大丈夫か?
533デフォルトの名無しさん
2014/07/01(火) 01:36:55.46ID:DMO1kVAm 1 :デフォルトの名無しさん:2012/08/16(木) 20:58:00.31
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
534デフォルトの名無しさん
2014/07/03(木) 20:06:28.12ID:Ct9dkTzH つかぬことをお聞きしますが
皆さんのfortranの本の勉強履歴はどんな流れですか?
私は冨田さんfortran90の本→辞書的にfortran90入門をかいつまむぐらいしか
やっておらずとりあえず拙いなりに読み書きはするのですが
なにか良い本あればおしえていただけないでしょうか
皆さんのfortranの本の勉強履歴はどんな流れですか?
私は冨田さんfortran90の本→辞書的にfortran90入門をかいつまむぐらいしか
やっておらずとりあえず拙いなりに読み書きはするのですが
なにか良い本あればおしえていただけないでしょうか
535デフォルトの名無しさん
2014/07/04(金) 01:38:26.65ID:41RxNfGp 故岡村先生の授業テキスト
やーっふぉ、やっふぉ、ふぉーとらんらんらん
やーっふぉ、やっふぉ、ふぉーとらんらんらん
536デフォルトの名無しさん
2014/07/04(金) 01:45:11.81ID:cNJNO1xN Fortran95/2003 Explained --> Modern Fortran Explained
537デフォルトの名無しさん
2014/07/05(土) 07:04:30.09ID:sNpoyHpR emacsでコメントアウトに使う関数fortran-comment-regionのデフォルトの動作が
行頭にCを挿入するのではなく,C$$(自由形式では!!$)を挿入するのは何か理由があるのでしょうか?
$つけたほうがメリットとかあるの?
行頭にCを挿入するのではなく,C$$(自由形式では!!$)を挿入するのは何か理由があるのでしょうか?
$つけたほうがメリットとかあるの?
538デフォルトの名無しさん
2014/07/07(月) 01:06:30.37ID:1zKRZTH9 absoft 9.0でf77fileをコンパイル成功、プログラム自体も上手く行く
absoft11.0でコンパイル成功、プログラム自体もインプットファイルのある部分の記述次第で上手く行く
ある記述部というのはアウトプットするデータ個数を指定するところです。20個程度なら上手くいくのですが数百個と増やすとうまくいきません。
エラーメッセージは
illegal character in numeric input
で、インプットファイルにおかしい部分があると言っています。しかし9.0でコンパイルしたものはきちんとうまくいくのです
何かアドバイスいただけないでしょうか。プログラム自体は3万行程度あるというのと内容だけに書き写すのは難しいです。
absoft11.0でコンパイル成功、プログラム自体もインプットファイルのある部分の記述次第で上手く行く
ある記述部というのはアウトプットするデータ個数を指定するところです。20個程度なら上手くいくのですが数百個と増やすとうまくいきません。
エラーメッセージは
illegal character in numeric input
で、インプットファイルにおかしい部分があると言っています。しかし9.0でコンパイルしたものはきちんとうまくいくのです
何かアドバイスいただけないでしょうか。プログラム自体は3万行程度あるというのと内容だけに書き写すのは難しいです。
539デフォルトの名無しさん
2014/07/07(月) 01:25:39.47ID:VWd7ewX/540デフォルトの名無しさん
2014/07/07(月) 09:24:44.41ID:1zKRZTH9541デフォルトの名無しさん
2014/07/08(火) 00:03:54.23ID:DZPoMbBV Gfortran で定義してない変数があってもたまにエラーはかない時あって焦った。
デバッグで小一時間汗流したわ。
gfortranってたまにアホな子になるの?
デバッグで小一時間汗流したわ。
gfortranってたまにアホな子になるの?
542デフォルトの名無しさん
2014/07/08(火) 23:44:01.37ID:0sSau+NY543デフォルトの名無しさん
2014/07/09(水) 03:16:15.11ID:i/yEgb7/ >>538
出ているエラーメッセージは、入力ファイルの問題で、数字の代わりに
(たぶん)文字が来ているということ。
F77時代(かそれ以前)のプログラムの用だから、入力ファイルの数値の
フォーマットも指定されていると推測される。数値が指定カラムから
はみ出していないか見て味噌。
以前
300 400 200 0 0
これで右から2番目でおかしくなると言っていたが、たぶん4カラムづつ
入力にとってある。300 400 200 000 000 ならたぶん動くだろう。
今は 0 0 を読んで、数値Formatがおかしいと文句を言われているのだと思う。
出ているエラーメッセージは、入力ファイルの問題で、数字の代わりに
(たぶん)文字が来ているということ。
F77時代(かそれ以前)のプログラムの用だから、入力ファイルの数値の
フォーマットも指定されていると推測される。数値が指定カラムから
はみ出していないか見て味噌。
以前
300 400 200 0 0
これで右から2番目でおかしくなると言っていたが、たぶん4カラムづつ
入力にとってある。300 400 200 000 000 ならたぶん動くだろう。
今は 0 0 を読んで、数値Formatがおかしいと文句を言われているのだと思う。
544デフォルトの名無しさん
2014/07/09(水) 03:17:43.97ID:i/yEgb7/ ではなぜ Absoft9 ではよくて、11では駄目なのかと問うかもしれない。
考えられることとしては、入力データの空白の扱いのデフォルトが変わった
ことが考えられる。FORTRAN最初期からの伝統で、入力データの空白は
数値としてはゼロを意味している。文法書のFORMAT分のところをよく読むと、
BZとBNというオプションがある。BZはBLANK ZEROでBNはBLANK NULL(NONE)
を意味していて、解釈を変えられる。昔のデフォルトはBZだった。
しかしF95かF2003くらいでたしかデフォルトをBNにしていた気がする。
今、手元に資料がないので確認できないがw
というわけで、absoft9は空白を0として読んで、0 0 を000と解釈したが、
Absoft11は0 0を数値として解釈不能とみなして、illegal character in numeric input
の実行時エラーをはいているのだろう。
またそうだとするとAbsoft9では0入力の実行回数が1回少ないはずである。
ちなみに、なぜ空白がゼロなのか?これは昔は、紙テープ、パンチカードの
穴あき不良や読み取り不良が多くて、パンチカードのスペース(穴なし)
が出やすかったからと聞いたことがある。ホントかは知らない。
あとメール欄にsage と書くように。
スレが上がると、冷やかしが紛れ込んできてスレが荒れる原因になる。
考えられることとしては、入力データの空白の扱いのデフォルトが変わった
ことが考えられる。FORTRAN最初期からの伝統で、入力データの空白は
数値としてはゼロを意味している。文法書のFORMAT分のところをよく読むと、
BZとBNというオプションがある。BZはBLANK ZEROでBNはBLANK NULL(NONE)
を意味していて、解釈を変えられる。昔のデフォルトはBZだった。
しかしF95かF2003くらいでたしかデフォルトをBNにしていた気がする。
今、手元に資料がないので確認できないがw
というわけで、absoft9は空白を0として読んで、0 0 を000と解釈したが、
Absoft11は0 0を数値として解釈不能とみなして、illegal character in numeric input
の実行時エラーをはいているのだろう。
またそうだとするとAbsoft9では0入力の実行回数が1回少ないはずである。
ちなみに、なぜ空白がゼロなのか?これは昔は、紙テープ、パンチカードの
穴あき不良や読み取り不良が多くて、パンチカードのスペース(穴なし)
が出やすかったからと聞いたことがある。ホントかは知らない。
あとメール欄にsage と書くように。
スレが上がると、冷やかしが紛れ込んできてスレが荒れる原因になる。
545デフォルトの名無しさん
2014/07/09(水) 04:42:58.29ID:2jkWCmKB546デフォルトの名無しさん
2014/07/10(木) 18:28:18.82ID:pJ0O1Ur0 FORTRAN77のCOMMON文とEQUIVALENCE文について質問です.
!---
DIMENSION A(4)
EQUIVALENCE (A, V1)
COMMON /VS/ V1, V2, V3, V4
のようなコードをfortran90風に書き直したいのですがAをCOMMONブロックの変数で置換する以外にいい方法は無いでしょうか?
できればSubroutine等を増やすのではなく,Moduleの変数宣言部分だけで解決したいのですが...
!---
DIMENSION A(4)
EQUIVALENCE (A, V1)
COMMON /VS/ V1, V2, V3, V4
のようなコードをfortran90風に書き直したいのですがAをCOMMONブロックの変数で置換する以外にいい方法は無いでしょうか?
できればSubroutine等を増やすのではなく,Moduleの変数宣言部分だけで解決したいのですが...
547デフォルトの名無しさん
2014/07/10(木) 20:24:35.98ID:2hSWNwRP548デフォルトの名無しさん
2014/07/10(木) 22:05:54.56ID:pJ0O1Ur0 >>547
ありがとうございます
早速以下のように使ってみたんですが
module VS
real :: V1, V2, V3, V4
end module VS
program
use VS, A => V1
...
A(1) = 1.0d0
...
end program
↑コードのA(1)に代入する部分で
error #6410: この名前は配列または関数として宣言されていません。
とgfortranのコンパイルエラーになります
dimension A(4)などと変数宣言すると
error #6401: この名前の属性が USE 文によってアクセス可能な属性と矛盾しています。
でコンパイルエラーになります
あと
use VS, A(1) => V1
のような書き方もだめでした
nag-j.co.jpのコード例だとAは変数とは扱われていないように思うのですがAを配列として扱うことはできないでしょうか?
ありがとうございます
早速以下のように使ってみたんですが
module VS
real :: V1, V2, V3, V4
end module VS
program
use VS, A => V1
...
A(1) = 1.0d0
...
end program
↑コードのA(1)に代入する部分で
error #6410: この名前は配列または関数として宣言されていません。
とgfortranのコンパイルエラーになります
dimension A(4)などと変数宣言すると
error #6401: この名前の属性が USE 文によってアクセス可能な属性と矛盾しています。
でコンパイルエラーになります
あと
use VS, A(1) => V1
のような書き方もだめでした
nag-j.co.jpのコード例だとAは変数とは扱われていないように思うのですがAを配列として扱うことはできないでしょうか?
549デフォルトの名無しさん
2014/07/10(木) 22:50:41.50ID:Te+Dpsre >>546
無理なんじゃないかな。
それはそれで最小にまとまっている。
最適化に問題があるとはいえ、無理してCOMMONやEQUIVALENCEを直す必要もない。
そのコードが意味しているのは、V1,V2,V3,V4を4つの実数変数として共有しているが、
これをエイリアスとして配列に結び付けて使いたいということになっている。
ところが、COMMONでないとV1,V2,V3,V4のメモリー上の番地が連続することを保証できない。
だから配列へのポインタを充てることができない。
(TYPEの中に入れれば、sequence属性で番地の連続性を保証できるが…
f2003のC言語との互換性機能も使えるかもしれないが、COMMONよりひどい気もする。)
ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
(配列へのポインタはある。これを使うにはV1~V4が連続した番地にいる必要がある。)
実変数へのポインタを要素として持つ構造体を定義して、その配列を作れば
いいが、それでは大幅な書き換えで意味がない。
あとは、Fortranの規格を外れるが、どの処理系もほぼ必ず持っている
Cray Pointer を使う手もあるが、これもModuleの中では納まらない。
実行文が必要。
COMMONとかEQUIVALENCEはメモリーの番地共有だから、便利なことができる。
最適化を抑止してしまうから、主要部分には使わない方がいいが、
技巧的小技としては、うまく使うと短く書けるので、使えばいいんでね?
無理なんじゃないかな。
それはそれで最小にまとまっている。
最適化に問題があるとはいえ、無理してCOMMONやEQUIVALENCEを直す必要もない。
そのコードが意味しているのは、V1,V2,V3,V4を4つの実数変数として共有しているが、
これをエイリアスとして配列に結び付けて使いたいということになっている。
ところが、COMMONでないとV1,V2,V3,V4のメモリー上の番地が連続することを保証できない。
だから配列へのポインタを充てることができない。
(TYPEの中に入れれば、sequence属性で番地の連続性を保証できるが…
f2003のC言語との互換性機能も使えるかもしれないが、COMMONよりひどい気もする。)
ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
(配列へのポインタはある。これを使うにはV1~V4が連続した番地にいる必要がある。)
実変数へのポインタを要素として持つ構造体を定義して、その配列を作れば
いいが、それでは大幅な書き換えで意味がない。
あとは、Fortranの規格を外れるが、どの処理系もほぼ必ず持っている
Cray Pointer を使う手もあるが、これもModuleの中では納まらない。
実行文が必要。
COMMONとかEQUIVALENCEはメモリーの番地共有だから、便利なことができる。
最適化を抑止してしまうから、主要部分には使わない方がいいが、
技巧的小技としては、うまく使うと短く書けるので、使えばいいんでね?
550549
2014/07/10(木) 22:53:27.62ID:Te+Dpsre 修正ミスwww
>ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
ばらばらの番地いる変数を個々に、ポインタの配列の要素に結び付けようにも、
Fortranにはポインタの配列はない。
>ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
ばらばらの番地いる変数を個々に、ポインタの配列の要素に結び付けようにも、
Fortranにはポインタの配列はない。
551デフォルトの名無しさん
2014/07/11(金) 03:55:49.85ID:wFVmEw9F ちょいと手間だがこれじゃダメかい
module VS
real :: A(4)
real :: V1, V2, V3, V4
equivalence (V1, A(1)), (V2, A(2)), (V3, A(3)), (V4, A(4))
end module VS
module VS
real :: A(4)
real :: V1, V2, V3, V4
equivalence (V1, A(1)), (V2, A(2)), (V3, A(3)), (V4, A(4))
end module VS
552デフォルトの名無しさん
2014/07/11(金) 04:36:13.83ID:gSvcXiep553デフォルトの名無しさん
2014/07/11(金) 09:33:00.25ID:cGGfPMzQ554デフォルトの名無しさん
2014/07/11(金) 15:22:52.88ID:RyCozEJp >552
equivacenle(A, V1)
A(1)==V1 にはなるが、V2,V3,V4がV1の直後に連続的に配列されていなければ
A(2),A(3),A(4)とV2,V3,V4は全くの無関係となってしまいます。
MAPファイルを書かせてみれば、位置関係は分かります。
最近のコンパイラはかなりソース上の順番とは無関係に自由に
並べ替えるので、うまくいかない可能性大かと。
EQUIVALENCEはDeprecated Listに上がっていました。
この先廃止の見込みが高いので避けた方がいいリストかな?
deprecated -> obsolescent -> deleted の三弾活用の1段目。
equivacenle(A, V1)
A(1)==V1 にはなるが、V2,V3,V4がV1の直後に連続的に配列されていなければ
A(2),A(3),A(4)とV2,V3,V4は全くの無関係となってしまいます。
MAPファイルを書かせてみれば、位置関係は分かります。
最近のコンパイラはかなりソース上の順番とは無関係に自由に
並べ替えるので、うまくいかない可能性大かと。
EQUIVALENCEはDeprecated Listに上がっていました。
この先廃止の見込みが高いので避けた方がいいリストかな?
deprecated -> obsolescent -> deleted の三弾活用の1段目。
555デフォルトの名無しさん
2014/07/12(土) 03:13:21.15ID:hZ9DjkyP 555
556デフォルトの名無しさん
2014/07/12(土) 11:23:27.92ID:Rc8WL8IV >>555
ダミアンもどき
ダミアンもどき
557デフォルトの名無しさん
2014/07/13(日) 00:10:07.50ID:+Eo/x1ZD サブルーチンの内部ではうまく計算されているのに、
メインでwriteするとよくわからない大きな数値になってしまっているのですが、
なにか解決のヒントないでしょうか?
断片的で申し訳ありません
メインでwriteするとよくわからない大きな数値になってしまっているのですが、
なにか解決のヒントないでしょうか?
断片的で申し訳ありません
558デフォルトの名無しさん
2014/07/13(日) 00:31:08.73ID:+Eo/x1ZD すいません自己解決しました
配列宣言の量が少なかったボンミスです
allocatable使わないとこういうことになるんでしょうか
お騒がせしました
配列宣言の量が少なかったボンミスです
allocatable使わないとこういうことになるんでしょうか
お騒がせしました
559デフォルトの名無しさん
2014/07/19(土) 14:16:39.37ID:BjGmX3Lx 2014年になってもFORTRANが選ばれる理由
ttp://developers.slashdot.jp/story/14/05/12/0410259/2014%E5%B9%B4%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%82FORTRAN%E3%81%8C%E9%81%B8%E3%81%B0%E3%82%8C%E3%82%8B%E7%90%86%E7%94%B1
まだ残っていきそうな感じだね
ttp://developers.slashdot.jp/story/14/05/12/0410259/2014%E5%B9%B4%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%82FORTRAN%E3%81%8C%E9%81%B8%E3%81%B0%E3%82%8C%E3%82%8B%E7%90%86%E7%94%B1
まだ残っていきそうな感じだね
560デフォルトの名無しさん
2014/07/20(日) 02:33:05.33ID:RXdcC8ex FORTRANで書かれたBLAS/LAPACKをライブラリとして呼び出しているLLが
FORTRANと同等のスピードが出ることを大々的に喧伝すると、
それに釣られて、もうFORTRANは要らないのだ!とか言い出す人が、
情強を誇るネットの有名人にも多いので草不可避w
FORTRANと同等のスピードが出ることを大々的に喧伝すると、
それに釣られて、もうFORTRANは要らないのだ!とか言い出す人が、
情強を誇るネットの有名人にも多いので草不可避w
561デフォルトの名無しさん
2014/07/27(日) 19:42:35.57ID:fTZkfzZt >>553の問題は解決したのかいな?
562デフォルトの名無しさん
2014/08/04(月) 11:41:31.29ID:IXwYtmhs バイナリ出力をするときにOPEN文に指定する
form='binary'はFortranの標準ではなく、独自拡張みたいですが、
標準のコーディングだけで'binary'と完全に等価なバイナリ出力をする方法はありますか?
form='unformatted'を指定すると、write文を書くたびに
データの最初と最後に4バイトのレコード長がつき、
form='binary'を指定すると前後4バイトがつかないみたいです。
form='binary'はFortranの標準ではなく、独自拡張みたいですが、
標準のコーディングだけで'binary'と完全に等価なバイナリ出力をする方法はありますか?
form='unformatted'を指定すると、write文を書くたびに
データの最初と最後に4バイトのレコード長がつき、
form='binary'を指定すると前後4バイトがつかないみたいです。
563デフォルトの名無しさん
2014/08/04(月) 17:53:28.34ID:fzuw5J0Z Fortran2003以降ならストリームが使える
http://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_7_1.html#AUTOTOC_7_1
http://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_7_1.html#AUTOTOC_7_1
565デフォルトの名無しさん
2014/08/05(火) 02:23:56.59ID:BDydvxMf directファイルを使うテクニックもある。
確実ではないが、大抵の処理系では、バイトまたはワード単位でべた書き
しているので、binaryの代わりに使える。
バイトかワードかは処理系によるが、コンパイラのオプションでどっちにも
できることが多い。
まぁ今の時代は素直に stream だろうが。
確実ではないが、大抵の処理系では、バイトまたはワード単位でべた書き
しているので、binaryの代わりに使える。
バイトかワードかは処理系によるが、コンパイラのオプションでどっちにも
できることが多い。
まぁ今の時代は素直に stream だろうが。
566562
2014/08/07(木) 21:48:00.99ID:ZvlX+BXk >>565
またまたありがとうございます。今日、会社でstreamを試してみたら、
コンパイラが古いためか(Windows版Intel Fortran 9.1)、
コンパイル時に「streamなんて知らないよ」って言われました。
directで試してみることにします。
またまたありがとうございます。今日、会社でstreamを試してみたら、
コンパイラが古いためか(Windows版Intel Fortran 9.1)、
コンパイル時に「streamなんて知らないよ」って言われました。
directで試してみることにします。
567デフォルトの名無しさん
2014/08/13(水) 10:42:21.52ID:KHi6ZJrR 構造型にSave属性つけられないんですけど
構造型をModuleに入れてグローバル変数として使いまわすのは危険(未定義になる可能性があるん)でしょうか
あとFortranの質問じゃないかもしれませんが
Intel MKLのBLAS/Lapack95はpure procedureであるとInterface定義に明記されてるけど
BLAS/Lapack77はPureなんでしょうか
構造型をModuleに入れてグローバル変数として使いまわすのは危険(未定義になる可能性があるん)でしょうか
あとFortranの質問じゃないかもしれませんが
Intel MKLのBLAS/Lapack95はpure procedureであるとInterface定義に明記されてるけど
BLAS/Lapack77はPureなんでしょうか
568デフォルトの名無しさん
2014/08/13(水) 11:45:31.24ID:KHi6ZJrR ↑すみません 多分自己解決しました
構造体の定義のあと変数宣言したものにはsave属性つけられますね(定義しかしてなかった)
BLAS77は間違った引数渡すと標準出力(か標準エラー出力)になんか表示されるのでpureじゃないってことでしょうかね
構造体の定義のあと変数宣言したものにはsave属性つけられますね(定義しかしてなかった)
BLAS77は間違った引数渡すと標準出力(か標準エラー出力)になんか表示されるのでpureじゃないってことでしょうかね
569デフォルトの名無しさん
2014/08/13(水) 12:55:08.27ID:RBRmoRtS >>568
そもそもFORTRAN77には言語仕様上pureは存在しない。
Lapack95はFortran95以降のプログラムからLAPACKのprocedureを
利用し易くするためのラッパーライブラリに過ぎない。
そもそもFORTRAN77には言語仕様上pureは存在しない。
Lapack95はFortran95以降のプログラムからLAPACKのprocedureを
利用し易くするためのラッパーライブラリに過ぎない。
570デフォルトの名無しさん
2014/08/13(水) 22:38:10.66ID:/aB3oPfT (コンパイル済みの)外部サブルーチンが真にpureかどうかは開発者/提供者の責任かと
例外処理は pure 要件から外していいと判断し、
pure と明記しておくことで最適化を妨げないようにしたのだろう
例外処理は pure 要件から外していいと判断し、
pure と明記しておくことで最適化を妨げないようにしたのだろう
571デフォルトの名無しさん
2014/08/14(木) 02:43:06.91ID:EFpyKW9s Fortranの組み込みサブルーチンで、乱数がサブルーチンで関数になっていないから
他言語に比べて使いにくいなと思っていたが、FORTRAN は PURE じゃないものは
関数にしない方針で一貫していて、乱数はPURE(参照透明)じゃないから
関数にしなかったんだと分かって、なんか納得した。時刻サブルーチンとかも。
最近関数型、関数型うるさいけど、他言語は意外にその辺一貫してないよな。
まぁFORTRANの場合、依存性があると最適化の邪魔になるから、
依存性を嫌っているだけだけどw 結果的にはより徹底している。
他言語に比べて使いにくいなと思っていたが、FORTRAN は PURE じゃないものは
関数にしない方針で一貫していて、乱数はPURE(参照透明)じゃないから
関数にしなかったんだと分かって、なんか納得した。時刻サブルーチンとかも。
最近関数型、関数型うるさいけど、他言語は意外にその辺一貫してないよな。
まぁFORTRANの場合、依存性があると最適化の邪魔になるから、
依存性を嫌っているだけだけどw 結果的にはより徹底している。
572デフォルトの名無しさん
2014/08/21(木) 12:25:07.46ID:J2kSTdr3 マットラボてどうなん?フォートランと比べて何か秀でた点ある?
573デフォルトの名無しさん
2014/08/21(木) 22:20:31.76ID:f+zPplkQ そんなん解決したい問題,実装したい理論によりけりやろ
まあ計算規模が小さくて使いたいライブラリがMATLABにあるならそっち使ったほうが幸せになれるぞきっと
まあ計算規模が小さくて使いたいライブラリがMATLABにあるならそっち使ったほうが幸せになれるぞきっと
574デフォルトの名無しさん
2014/08/23(土) 12:29:18.39ID:r0lW6Kse575デフォルトの名無しさん
2014/08/24(日) 20:56:38.40ID:JVJfgdMr MINUIT使えば
576デフォルトの名無しさん
2014/08/28(木) 13:13:31.88ID:G1Zq4e11 MATLABって個人使用なら五千円に値下げになってなかったけ?
577デフォルトの名無しさん
2014/08/30(土) 13:35:28.03ID:SJevJ5zH578デフォルトの名無しさん
2014/08/31(日) 23:33:34.12ID:ChHwlQ4k 興味でお聞きしたいのですがfortranで株の発注のようなことはできたりしませんか?
例えば証券ホームページににログインし発注操作するなど・・
そういう言語じゃないのかもしれませんが・・
例えば証券ホームページににログインし発注操作するなど・・
そういう言語じゃないのかもしれませんが・・
579デフォルトの名無しさん
2014/08/31(日) 23:49:50.53ID:lawRyb1w fortranからC言語の関数呼び出せるので...
それじゃ邪道ですかw
まあHFTも金勘定も数値計算だしいいんじゃないでしょうかね
それじゃ邪道ですかw
まあHFTも金勘定も数値計算だしいいんじゃないでしょうかね
580デフォルトの名無しさん
2014/09/01(月) 03:24:17.76ID:xOVRhMZQ そう言えば、Fortranって少数第n位以下を切り捨てみたいな関数ないんだね…
Excelで言うrounddownみたいなやつ。
今、ファイル書き出すのに一々四捨五入されちまって困りマクリングでつ、はい(´・_・`)
Excelで言うrounddownみたいなやつ。
今、ファイル書き出すのに一々四捨五入されちまって困りマクリングでつ、はい(´・_・`)
581デフォルトの名無しさん
2014/09/01(月) 13:00:12.21ID:3fk/vRi5 >>580
簡単だし自作したら良いじゃない?
簡単だし自作したら良いじゃない?
582デフォルトの名無しさん
2014/09/01(月) 22:10:23.80ID:wdLC/vQV583デフォルトの名無しさん
2014/09/02(火) 07:37:26.28ID:ADLMggi1584デフォルトの名無しさん
2014/09/02(火) 08:58:57.02ID:wSUV6Pdf そんなに端数が気になるならもうひと桁増やして丸めればよかろうに
585デフォルトの名無しさん
2014/09/02(火) 20:48:24.61ID:vngmZpQR むしろ、簡単に実装できるのにわざわざ関数がある言語のが珍しいかと
586デフォルトの名無しさん
2014/09/02(火) 21:36:00.72ID:2O5G2v8m >>584
0.4999999999を小数点以下3桁で切り捨て表示するために4桁で文字列化しても内部処理が丸めだと0.500になってしまうかもしれんぞ
素直に1000倍して切り捨てて1000で割るがよろしい
0.4999999999を小数点以下3桁で切り捨て表示するために4桁で文字列化しても内部処理が丸めだと0.500になってしまうかもしれんぞ
素直に1000倍して切り捨てて1000で割るがよろしい
587デフォルトの名無しさん
2014/09/03(水) 02:46:13.39ID:TB1UfkpT >>580
なぬ?途中の計算の話じゃなくて、I/O 時の話か?
それならあるぞ。F2003もしくはF2008の機能だと思うが。
write(*, '(rd, f15.1)') 1.45 ! 1.4
write(*, '(ru, f15.1)') 1.45 ! 1.5
このほか rz, rn, rc もある。
それぞれ round up, round down, round to zero, round to nearest, round to compatible
最後の二つは最近接への丸めだが、等距離の時に、偶数への丸めかゼロから遠い方への丸めかだと思う
まぁ詳しくはマニュアルとIEEE754-2008の仕様をよく読んでくれ。
なぬ?途中の計算の話じゃなくて、I/O 時の話か?
それならあるぞ。F2003もしくはF2008の機能だと思うが。
write(*, '(rd, f15.1)') 1.45 ! 1.4
write(*, '(ru, f15.1)') 1.45 ! 1.5
このほか rz, rn, rc もある。
それぞれ round up, round down, round to zero, round to nearest, round to compatible
最後の二つは最近接への丸めだが、等距離の時に、偶数への丸めかゼロから遠い方への丸めかだと思う
まぁ詳しくはマニュアルとIEEE754-2008の仕様をよく読んでくれ。
588デフォルトの名無しさん
2014/09/03(水) 13:00:08.93ID:TB1UfkpT 昼休みに調べたら rd ru の類はF2003だった。
あと rp processor dependent という処理系依存型もあるようだ。
あとOPEN文で指定する方法もある。
しかし、正直いって>>580の基本的発想が間違っている。
他の人達のアドバイスにあるように、そもそも内部二進表現を十進表現に
直すときに丸めなどが入ってしまう。そのうえでさらに十進表現を
丸めようとするのが Fortran 的センスではおかしい。
だからみんな当惑した反応しか返さない。
とはいえ自然科学ではない商習慣等での丸め等もあるようだから
別にそれがいけないわけでなく、それに合った言語例えば
BCD演算できるCOBOLなどで計算すべきのみ。
あと rp processor dependent という処理系依存型もあるようだ。
あとOPEN文で指定する方法もある。
しかし、正直いって>>580の基本的発想が間違っている。
他の人達のアドバイスにあるように、そもそも内部二進表現を十進表現に
直すときに丸めなどが入ってしまう。そのうえでさらに十進表現を
丸めようとするのが Fortran 的センスではおかしい。
だからみんな当惑した反応しか返さない。
とはいえ自然科学ではない商習慣等での丸め等もあるようだから
別にそれがいけないわけでなく、それに合った言語例えば
BCD演算できるCOBOLなどで計算すべきのみ。
589デフォルトの名無しさん
2014/09/03(水) 22:10:06.94ID:aKlULROR 2015出たんだね
590デフォルトの名無しさん
2014/09/04(木) 02:18:06.97ID:dS3FSElc Fortran コンパイラメーカ
Intel PGI Pathscale (Intel NVidia AMD/ATI) アクセレレータ御三家
Absoft NAG 独自色
Lahey/Fujitsu Silverfrost 斜陽族
GFortran g95 GNU Free系
こんなとこか?
Intel PGI Pathscale (Intel NVidia AMD/ATI) アクセレレータ御三家
Absoft NAG 独自色
Lahey/Fujitsu Silverfrost 斜陽族
GFortran g95 GNU Free系
こんなとこか?
591デフォルトの名無しさん
2014/09/04(木) 02:51:19.67ID:Yy5o2rJg Free系にOpen64と(一応)dragoneggがあるぞ
dragoneggはgcc4.8.3以降はサポートしてないしflangは開発止まってるし
この辺が活発化すれば若い人がたくさん来ると思うんだけどな
dragoneggはgcc4.8.3以降はサポートしてないしflangは開発止まってるし
この辺が活発化すれば若い人がたくさん来ると思うんだけどな
592デフォルトの名無しさん
2014/09/05(金) 04:17:28.12ID:tI2mbO8v GNUでFortranやAdaが熱心にサポートされているのは、米国防総省あたりからの
金が流れているからなのかな?
意識高いw進歩的wCS学科若年層には人気は全くないのに。
それともおっさん層しかやってないからなのか?
そのわりにGNU COBOLとかPL/IとかALGOL、PASCAL、Modula-2とかやらないし。
金が流れているからなのかな?
意識高いw進歩的wCS学科若年層には人気は全くないのに。
それともおっさん層しかやってないからなのか?
そのわりにGNU COBOLとかPL/IとかALGOL、PASCAL、Modula-2とかやらないし。
593デフォルトの名無しさん
2014/09/05(金) 08:06:03.87ID:DENIJuH5 >>587
でもfortran95でしょ、ほとんどサポしてるのは
でもfortran95でしょ、ほとんどサポしてるのは
594デフォルトの名無しさん
2014/09/07(日) 03:06:28.08ID:5kwVdIF1 Cray, IBM, PGI, Intel が F2003 完全対応したな。
NAGはあと一歩。
GFortranは進捗どうですか?
スパコンだと SXは90 Hitachiも90? Fujitsuは95?
それぞれつまみ食い的に拡張してあるが。
NAGはあと一歩。
GFortranは進捗どうですか?
スパコンだと SXは90 Hitachiも90? Fujitsuは95?
それぞれつまみ食い的に拡張してあるが。
595デフォルトの名無しさん
2014/09/07(日) 04:28:58.48ID:+IELT+xO 日立のはコンパイルオプション-hf95で問題なく使えてたがあれ完全準拠じゃなかったのかな
まあ完全準拠だったらわざわざfortran90コンパイラとは名乗らないか
まあ完全準拠だったらわざわざfortran90コンパイラとは名乗らないか
596デフォルトの名無しさん
2014/09/10(水) 14:57:01.18ID:rySPmzVQ そういや、fortranのデータの取り扱い方について詳しくかいせつしてる本てあまりないね。
597デフォルトの名無しさん
2014/09/13(土) 13:38:42.01ID:xbN/YUGu fortranのデータってなんじゃい?ファイルのことか?
598デフォルトの名無しさん
2014/09/13(土) 20:59:58.06ID:1ASLKxa3 >>596
format read writeのことなら、コンパイラーの取扱説明書が(独自仕様拡張部分も含めて)もっとも詳しいよね。
format read writeのことなら、コンパイラーの取扱説明書が(独自仕様拡張部分も含めて)もっとも詳しいよね。
599デフォルトの名無しさん
2014/09/14(日) 15:27:09.67ID:aEQdUpNg intel fortranはIMSLも非商用は無償にしてくれないかな・・
600デフォルトの名無しさん
2014/09/15(月) 02:35:29.49ID:0r1HU9OA IMSLは会社が違うから無理だべ。
IntelはCPU売るためにソフトのコンパイラを撒き餌としてばら撒いてもペイするが、
IMSLの方としては特に得しないし。
富士通がLaheyにOEM供給した時にコンパイラにSSL2とかただでバンドルしていたが。
NECがASLをちょー高値で売っていたことを考えれば、ちょー太っ腹だった。
それはそうと日本の大学の大型計算機センターにたまっていたライブラリも、
NETLIBみたいにネットに公開して吐き出せばいいのに。
IntelはCPU売るためにソフトのコンパイラを撒き餌としてばら撒いてもペイするが、
IMSLの方としては特に得しないし。
富士通がLaheyにOEM供給した時にコンパイラにSSL2とかただでバンドルしていたが。
NECがASLをちょー高値で売っていたことを考えれば、ちょー太っ腹だった。
それはそうと日本の大学の大型計算機センターにたまっていたライブラリも、
NETLIBみたいにネットに公開して吐き出せばいいのに。
601デフォルトの名無しさん
2014/09/15(月) 09:55:29.48ID:SmofGg9r602デフォルトの名無しさん
2014/09/15(月) 11:07:29.74ID:WIy8nvhC GForce思い出したわ
603538
2014/09/16(火) 03:14:29.14ID:EYsbMZCB604デフォルトの名無しさん
2014/09/17(水) 01:15:32.64ID:OkbA3cQE >>603
当該 READ 文の FORMAT 文を見ると分かる。
たぶん昔のプログラムだから READ(99, 1000) N,B,C... みたいになっているだろう。
その場合行番号付で 1000 FORMAT(1H , 云々) となっている FORMAT文を見ればいい。
その行と引用しているREAD文を2chにコピペすればいい。
どの行かわからんというならDEBUGオプションでtracebackをオンにしてやれば
エラーで死んだところで行番号が出るはず。
当該 READ 文の FORMAT 文を見ると分かる。
たぶん昔のプログラムだから READ(99, 1000) N,B,C... みたいになっているだろう。
その場合行番号付で 1000 FORMAT(1H , 云々) となっている FORMAT文を見ればいい。
その行と引用しているREAD文を2chにコピペすればいい。
どの行かわからんというならDEBUGオプションでtracebackをオンにしてやれば
エラーで死んだところで行番号が出るはず。
605デフォルトの名無しさん
2014/09/18(木) 00:30:49.37ID:+0AmgyUa Fortranってどの程度配列メモリに記憶出来てるのかな?
例えば
do i = 1, 100
Read(20,*) (a(i,j),j=1,20
End do
で write(*,*) a(99,15)とかどこまで記憶出来てるもんなんやろ?
例えば
do i = 1, 100
Read(20,*) (a(i,j),j=1,20
End do
で write(*,*) a(99,15)とかどこまで記憶出来てるもんなんやろ?
606デフォルトの名無しさん
2014/09/18(木) 21:41:43.06ID:16BBiZdw eclipseである程度長いサブルーチンも何十個か呼び出しているプログラムで
call systemが通らくなるのですがなにか原因ありますか?
ブラウザソフト立ち上げながらでもダメだったのでメモリがらみと思うのですが
ざっくりしすぎですいませんがなにかヒントあればおねがいします・・
call systemが通らくなるのですがなにか原因ありますか?
ブラウザソフト立ち上げながらでもダメだったのでメモリがらみと思うのですが
ざっくりしすぎですいませんがなにかヒントあればおねがいします・・
607デフォルトの名無しさん
2014/09/19(金) 00:43:16.70ID:0+vn6Zlr608デフォルトの名無しさん
2014/09/19(金) 01:31:53.81ID:3dCDoxc8 >>607
ありがとうございました
ps alxで見るとrssがまさに満杯でいっぱいのようでした
cat /proc/meminfoで見るとフリーが10Gぐらい残っていて
大丈夫と思っていたのですが違いが分かっておらず
違いを勉強しようと思います
もしご存知でしたらまた教えていただけると幸いです
ありがとうございました
ps alxで見るとrssがまさに満杯でいっぱいのようでした
cat /proc/meminfoで見るとフリーが10Gぐらい残っていて
大丈夫と思っていたのですが違いが分かっておらず
違いを勉強しようと思います
もしご存知でしたらまた教えていただけると幸いです
609デフォルトの名無しさん
2014/09/19(金) 03:08:40.00ID:f7fTMqdH >>607
そうなの?
そうなの?
610デフォルトの名無しさん
2014/09/19(金) 22:55:20.41ID:0+vn6Zlr611デフォルトの名無しさん
2014/09/20(土) 20:11:45.61ID:onD5DKrz >>610
ありがとうございます。べんきょうになりました。
メモリ節約のために可能な限りallocatableに変更したら余裕ができて解決しました。
個人利用のプログラムには必要ないと思っていましたが大事でした
ありがとうございました
ありがとうございます。べんきょうになりました。
メモリ節約のために可能な限りallocatableに変更したら余裕ができて解決しました。
個人利用のプログラムには必要ないと思っていましたが大事でした
ありがとうございました
612デフォルトの名無しさん
2014/09/22(月) 04:03:57.88ID:Huxb6fEK 配列a=/2,3,4,5,8,5,4......./みないなのがあったとして, 最大値の8すなわち,a(5)までをファイルに書き込みたいんだけど…
do i = 1, maxloc(a)
write(20,*) a(i)
Enddo
ではエラーになるよね。おそらくmaxloc(a)がrank 1 でdo loop にはrank 0 (スカラー値)じゃなきゃいかんってことなんだろう
配列をスカラー値に戻す関数ってないのかね?
do i = 1, maxloc(a)
write(20,*) a(i)
Enddo
ではエラーになるよね。おそらくmaxloc(a)がrank 1 でdo loop にはrank 0 (スカラー値)じゃなきゃいかんってことなんだろう
配列をスカラー値に戻す関数ってないのかね?
613デフォルトの名無しさん
2014/09/22(月) 08:08:38.00ID:/rW2WBkU 配列は要素を指定すればスカラーになるだろ
614デフォルトの名無しさん
2014/09/23(火) 00:55:12.38ID:07zJk+Gd >>612
次元を指定すればおk。1次元でもあえて1を指定すればスカラーで返してくれる。
do i = 1, maxloc(a, 1)
1要素配列を返す奴らに使える、基本的なテクニックですぞい。
改行要らなければ
write(20,*) a(:maxloc(a, 1))
で1行で済む。
次元を指定すればおk。1次元でもあえて1を指定すればスカラーで返してくれる。
do i = 1, maxloc(a, 1)
1要素配列を返す奴らに使える、基本的なテクニックですぞい。
改行要らなければ
write(20,*) a(:maxloc(a, 1))
で1行で済む。
615デフォルトの名無しさん
2014/09/23(火) 02:10:29.02ID:UZWdIj2A >>614
いやぁ助かります。
ここは参考書に載ってないテクを知ってる方がたくさんいるからやめられない…
このようなテクって自分で見出すもの?それとも何か参考書みたいのってあるのですか?
あと、科学数値計算やってる方に聞きたいのですが、最適な刻み幅ってどう決定してますか?
対数刻みやらなんやらありますが、結局自己流やらなんやらでしっくりしたものに出会えず時間を無駄にしてる感たっぷりなんです
いやぁ助かります。
ここは参考書に載ってないテクを知ってる方がたくさんいるからやめられない…
このようなテクって自分で見出すもの?それとも何か参考書みたいのってあるのですか?
あと、科学数値計算やってる方に聞きたいのですが、最適な刻み幅ってどう決定してますか?
対数刻みやらなんやらありますが、結局自己流やらなんやらでしっくりしたものに出会えず時間を無駄にしてる感たっぷりなんです
616デフォルトの名無しさん
2014/09/23(火) 12:59:19.57ID:07zJk+Gd >>615
maxloc とかに dim 引数が入ったのは F95 以降で、
F90 時代は要素1個の配列を返されて誰もが窮していた。
Numerical Recipes の F90 版では、SUM(MAXLOC(a)) みたいな形でこの問題を
避けていたが、俺的にはこれは無いなって感じだった。(元々あんまいい本じゃなかったし)
仕方ないから律儀に要素1個の配列を宣言して使っていて、もう解決策はないと諦めていた。
なので f95 が出てからも、この方法に全く気付かずにいた。
ある日、他人のソース眺めていて、1次元配列なのに maxloc の類で dim
引数指定していたのがあって、こいつ馬鹿じゃねーのwwwと思ってよく見たら
このスカラー返しのテクニックだった。馬鹿なのは私でした。
たぶん10年以上無駄な1要素配列のプログラム書いていたwww
maxloc とかに dim 引数が入ったのは F95 以降で、
F90 時代は要素1個の配列を返されて誰もが窮していた。
Numerical Recipes の F90 版では、SUM(MAXLOC(a)) みたいな形でこの問題を
避けていたが、俺的にはこれは無いなって感じだった。(元々あんまいい本じゃなかったし)
仕方ないから律儀に要素1個の配列を宣言して使っていて、もう解決策はないと諦めていた。
なので f95 が出てからも、この方法に全く気付かずにいた。
ある日、他人のソース眺めていて、1次元配列なのに maxloc の類で dim
引数指定していたのがあって、こいつ馬鹿じゃねーのwwwと思ってよく見たら
このスカラー返しのテクニックだった。馬鹿なのは私でした。
たぶん10年以上無駄な1要素配列のプログラム書いていたwww
617デフォルトの名無しさん
2014/09/26(金) 01:28:02.38ID:sHXJvEEg618デフォルトの名無しさん
2014/09/26(金) 02:38:03.65ID:jeu5JnPX >>617
配列 a(7) = (/ 2,3,4,5,8,5,4 )/ があるとする。
最大値の位置を返す組み込み関数 maxloc に a を渡すと maxloc(a) は
1次元で1要素の配列 (/5/) を返す。
これを左辺で取るには integer :: m(1) が必要。スカラー変数では受け取れない。
m = maxloc( a ) !ok ; integer :: n ; n = maxloc(a) !error
要するに do i = 1, maxloc(a) は、do i = 1, m(:) と同じ意味になり文法エラーが出る。
>>612 の質問は、do i = 1, m(1) に当たる事を実行したいので、
配列をスカラー値に戻す方法はないか?と質問している。
それに対する>>614の答えは、maxloc( a, dim = 1 ) を使えと言っている。
これは配列の要素を返す。普通は多次元配列に対して用いて、行や列の成分を
取りだすのに使う。
配列 a(7) = (/ 2,3,4,5,8,5,4 )/ があるとする。
最大値の位置を返す組み込み関数 maxloc に a を渡すと maxloc(a) は
1次元で1要素の配列 (/5/) を返す。
これを左辺で取るには integer :: m(1) が必要。スカラー変数では受け取れない。
m = maxloc( a ) !ok ; integer :: n ; n = maxloc(a) !error
要するに do i = 1, maxloc(a) は、do i = 1, m(:) と同じ意味になり文法エラーが出る。
>>612 の質問は、do i = 1, m(1) に当たる事を実行したいので、
配列をスカラー値に戻す方法はないか?と質問している。
それに対する>>614の答えは、maxloc( a, dim = 1 ) を使えと言っている。
これは配列の要素を返す。普通は多次元配列に対して用いて、行や列の成分を
取りだすのに使う。
619デフォルトの名無しさん
2014/09/28(日) 02:23:58.55ID:qwG5nd4I >>618
1次元配列の特定の1つの値を返すのに、それは1次元の1要素の「配列」として返されるからdo文では使えないということですね。それが配列の次元(dimension)を1と言うと解決するあたりがしっくりきませんね・・・。
1次元配列の特定の1つの値を返すのに、それは1次元の1要素の「配列」として返されるからdo文では使えないということですね。それが配列の次元(dimension)を1と言うと解決するあたりがしっくりきませんね・・・。
620デフォルトの名無しさん
2014/09/28(日) 03:11:58.13ID:W6jZi88T >>619
多次元配列を maxloc に渡すと、最大値の座標を (/ 1, 2, 3 /) みたいな感じで
一次元配列で返す。 この成分を取り出すのが dim 引数。
1要素配列でも成分取り出せる。
まぁしっくりくるまで文法書を舐めるように読んでくれprpr
多次元配列を maxloc に渡すと、最大値の座標を (/ 1, 2, 3 /) みたいな感じで
一次元配列で返す。 この成分を取り出すのが dim 引数。
1要素配列でも成分取り出せる。
まぁしっくりくるまで文法書を舐めるように読んでくれprpr
621デフォルトの名無しさん
2014/10/08(水) 00:58:36.59ID:9VdrGSON x(100)があるとして、計算しているのになぜか例えばx(40)から値が0になってしまいます
考えられる原因ないでしょうか
無茶ぶりですいません
考えられる原因ないでしょうか
無茶ぶりですいません
622デフォルトの名無しさん
2014/10/08(水) 01:09:28.89ID:fqHZeb8H さすがに無理
もう少しヒントをくれ玉へ
もう少しヒントをくれ玉へ
623デフォルトの名無しさん
2014/10/08(水) 07:15:04.02ID:90i0u9P7624デフォルトの名無しさん
2014/10/08(水) 08:00:58.16ID:99q9svOz 今時逝ってよしとかねえよ
625デフォルトの名無しさん
2014/10/08(水) 20:12:54.14ID:9VdrGSON626デフォルトの名無しさん
2014/10/09(木) 00:38:44.90ID:n00d9Wif627デフォルトの名無しさん
2014/10/09(木) 02:25:56.01ID:FBZt25be >>625
xが途中で変わってしまうなら
xの代入文や計算式が間違ってないか探す(特に範囲指定)
途中で変数を書き出し、変数の変化を追う
デバッガを使って変数に代入されるタイミングを調べる
くらいしか思い付かない
実は0になる計算をしていたなんてことはないよね
xが途中で変わってしまうなら
xの代入文や計算式が間違ってないか探す(特に範囲指定)
途中で変数を書き出し、変数の変化を追う
デバッガを使って変数に代入されるタイミングを調べる
くらいしか思い付かない
実は0になる計算をしていたなんてことはないよね
628デフォルトの名無しさん
2014/10/10(金) 03:19:01.38ID:OpKqoeIe まぁ大方書き込んだつもりになっているが、ループが39までしか回ってないという
パターンだろう。
初期値に1e38とかNaNとか書いておけばいい。
パターンだろう。
初期値に1e38とかNaNとか書いておけばいい。
629デフォルトの名無しさん
2014/10/11(土) 16:00:47.58ID:C1s+VS97 >逝ってよし
逝ってよし ってフレーズ最後に見たの何年前だろう?10年くらい前?
ちょっとクスッと来てしまった。
悪くないよ〜
逝ってよし ってフレーズ最後に見たの何年前だろう?10年くらい前?
ちょっとクスッと来てしまった。
悪くないよ〜
630デフォルトの名無しさん
2014/10/12(日) 11:19:06.43ID:Zy5yf7AD631デフォルトの名無しさん
2014/10/12(日) 22:43:53.80ID:q3BSJrqr gfortranで
call system(cd ..)
とやっても上のディレクトリに移動できません。
他のコマンドは動くのですが…
これは仕様なのでしょうか?
call system(cd ..)
とやっても上のディレクトリに移動できません。
他のコマンドは動くのですが…
これは仕様なのでしょうか?
632デフォルトの名無しさん
2014/10/13(月) 20:38:43.03ID:qvDo+/hC >>631
systemからのcd実行なら仕様。
別のshellが起動してcdを実行して処理を終了するので、呼び出しもとのshellとは無関係。
GNUならディレクトリを変更したい場合はCHDIRが使える。
systemからのcd実行なら仕様。
別のshellが起動してcdを実行して処理を終了するので、呼び出しもとのshellとは無関係。
GNUならディレクトリを変更したい場合はCHDIRが使える。
633デフォルトの名無しさん
2014/10/13(月) 21:42:58.17ID:BJqw9Buj634デフォルトの名無しさん
2014/10/14(火) 10:25:49.65ID:gGwwURe/ とか言って失敗しましたw CHDIRをつかうとshからpremission deniedと怒られます。
if (IPTCMD(1:3).eq.'cd ') then
DSTDIR=IPTCMD(4:)
call CHDIR(DSTDIR)
end if
のようなコードです。SELinuxのせいかと思いましたが違いました。
ご教示いただければ幸いです。
if (IPTCMD(1:3).eq.'cd ') then
DSTDIR=IPTCMD(4:)
call CHDIR(DSTDIR)
end if
のようなコードです。SELinuxのせいかと思いましたが違いました。
ご教示いただければ幸いです。
635デフォルトの名無しさん
2014/10/14(火) 10:53:43.84ID:gGwwURe/ 追加すると、cdコマンドは成功しています。でも、
sh: 1: ..: Permission denied
と怒られますw
sh: 1: ..: Permission denied
と怒られますw
636デフォルトの名無しさん
2014/10/17(金) 08:36:55.32ID:/3IlFIL9 素朴な疑問なんですが
write( *,101) n
write(10,101) n
こういう式って一行にまとめられないんですか
write( *,101) n
write(10,101) n
こういう式って一行にまとめられないんですか
637デフォルトの名無しさん
2014/10/17(金) 14:01:54.72ID:5NvG3gNF >>636
write ... ; write ,,,
write ... ; write ,,,
638デフォルトの名無しさん
2014/10/18(土) 03:21:07.25ID:1z7UQB1P 言い換えます
write( *,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 10,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 11,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
みたいな文を一行でまとめたいのです
write(10,101) n
write( *,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 10,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
write( 11,101) a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
みたいな文を一行でまとめたいのです
write(10,101) n
639デフォルトの名無しさん
2014/10/18(土) 04:32:28.37ID:pf8oYVZE 10,11だと外部ファイルか
それだと複数の装置番号に同時に出力する方法はない(0以上のスカラーでなければならない)
変数をまとめたいなら配列nにa-zを代入すればできる
それだと複数の装置番号に同時に出力する方法はない(0以上のスカラーでなければならない)
変数をまとめたいなら配列nにa-zを代入すればできる
640デフォルトの名無しさん
2014/10/18(土) 06:08:15.41ID:5RvmRbo5 >>638
出力するユニットが同じならサブルーチンでまとめれば良いんじゃない?
出力するユニットが同じならサブルーチンでまとめれば良いんじゃない?
641デフォルトの名無しさん
2014/10/18(土) 07:53:57.67ID:py32Gd52 fortranからRを呼び出すようなことはできないでしょうか?
system call?からRを呼び出すぐらいしかないでしょうかね?
system call?からRを呼び出すぐらいしかないでしょうかね?
642デフォルトの名無しさん
2014/10/18(土) 08:55:47.73ID:XNaq3m/i gnuplotでもそうだが
Rのソースをfortranで生成するようにして
system callから実行させればいいだろ
Rのソースをfortranで生成するようにして
system callから実行させればいいだろ
643デフォルトの名無しさん
2014/10/18(土) 09:10:45.91ID:XNaq3m/i644デフォルトの名無しさん
2014/10/18(土) 09:18:33.82ID:XNaq3m/i 考えてみれば四行に増えたなwwwwwww
645デフォルトの名無しさん
2014/10/19(日) 01:11:43.08ID:66Dn4RCH たしか coarray を使うとプロセスが複数走って、それぞれのプロセスで
別々にI/Oできるから形式上は1行でできるぞ。
まぁこれがやりたいことではないのは重々承知だがwww
別々にI/Oできるから形式上は1行でできるぞ。
まぁこれがやりたいことではないのは重々承知だがwww
646デフォルトの名無しさん
2014/10/19(日) 13:24:38.74ID:jrAJRFBN647デフォルトの名無しさん
2014/10/20(月) 00:32:03.39ID:w06RwgSj 配列内の最大最小を、区間指定でできませんか?
maxだとできなかったんですが
maxだとできなかったんですが
648デフォルトの名無しさん
2014/10/20(月) 01:10:20.17ID:Q283dmtl 区間指定ってなんだよw
maxlocのことか?それともmaxval(a(20:20))のことか?
他人に理解できる表現で頼むぜw
maxlocのことか?それともmaxval(a(20:20))のことか?
他人に理解できる表現で頼むぜw
649デフォルトの名無しさん
2014/10/21(火) 04:04:46.35ID:dBWrLa1J >>647
部分配列に代入して、maxを使うという意味?
部分配列に代入して、maxを使うという意味?
650デフォルトの名無しさん
2014/10/21(火) 08:48:40.55ID:RmR2qSHy >615
亀レスですが、最適な刻み幅については、
森口繁一『数値計算術』に
「題4章 刻み幅の自動調節」
という記述があります。
ご参考までに
亀レスですが、最適な刻み幅については、
森口繁一『数値計算術』に
「題4章 刻み幅の自動調節」
という記述があります。
ご参考までに
651デフォルトの名無しさん
2014/10/22(水) 21:06:47.85ID:ZWb1Adxr652デフォルトの名無しさん
2014/10/23(木) 00:20:38.34ID:uxreCuFc653デフォルトの名無しさん
2014/10/23(木) 00:27:54.57ID:ULvaqeb6 ならば MAXVAL(a(10:20)) だ。
654デフォルトの名無しさん
2014/10/23(木) 08:52:15.53ID:afuBwKUi >652
p.195〜206
なおプログラムはpascalで書かれています
p.195〜206
なおプログラムはpascalで書かれています
655デフォルトの名無しさん
2014/10/23(木) 23:13:40.41ID:lbc4SK47 >>653
できました!ありがとうございました
できました!ありがとうございました
656ホモおじさん
2014/10/24(金) 00:54:53.39ID:vm5n6mmb657デフォルトの名無しさん
2014/10/24(金) 01:31:35.96ID:IV+qiUp4658ホモおじさん
2014/10/24(金) 03:18:53.64ID:vm5n6mmb >>657
xが大きい方で計算したいなら通分して 1/(1-exp(-x)) の形で計算するのが定石だが、
どっちにしろ x=20〜30くらいでもう 1/1=1 でその先は無理に計算しなくてもいい。
この辺は数値計算術にいっぱい書いてある。
森口繁一の本は古いけど結構面白い。
数値計算術〜計算数学夜話<<数値計算工学の感じで真面目になる。
それにつけても蔵王のお釜が白濁液まみれというニュースが興味深いよね。
xが大きい方で計算したいなら通分して 1/(1-exp(-x)) の形で計算するのが定石だが、
どっちにしろ x=20〜30くらいでもう 1/1=1 でその先は無理に計算しなくてもいい。
この辺は数値計算術にいっぱい書いてある。
森口繁一の本は古いけど結構面白い。
数値計算術〜計算数学夜話<<数値計算工学の感じで真面目になる。
それにつけても蔵王のお釜が白濁液まみれというニュースが興味深いよね。
659デフォルトの名無しさん
2014/10/28(火) 00:52:02.95ID:UO1zyFOr Fortran で realloc に相当することをやりたんだけど、どうしたらいいでしょうぁ。
660デフォルトの名無しさん
2014/10/28(火) 03:20:58.44ID:1iw7NGT6 >>659
宣言でallocatable
使う前にallocateで割り当て
大きさ変える前にdeallocateしてallocateで再割り当て
中身を確実に保存したかったらdeallocate前に別の変数にコピー
これで一応配列の大きさを変えれる
宣言でallocatable
使う前にallocateで割り当て
大きさ変える前にdeallocateしてallocateで再割り当て
中身を確実に保存したかったらdeallocate前に別の変数にコピー
これで一応配列の大きさを変えれる
661デフォルトの名無しさん
2014/10/28(火) 03:55:09.13ID:2ZNKkFIp Fortran2003なら move_alloc を使う。
alloctae(tmp(new_size))
new_size(1:size(array)) = array
call move_alloc(tmp, array)
move_alloc は番地(ポインタ)を写すだけなのでメモリー内容のコピーは1回で済む。
modern fortran explained 15.5.3 Transferring an allocation 参照
alloctae(tmp(new_size))
new_size(1:size(array)) = array
call move_alloc(tmp, array)
move_alloc は番地(ポインタ)を写すだけなのでメモリー内容のコピーは1回で済む。
modern fortran explained 15.5.3 Transferring an allocation 参照
662デフォルトの名無しさん
2014/10/29(水) 00:46:52.02ID:RDb2D61y ちょっとスレチかもしれませんが…
無限級数の和が1になるものうち、\Sigma^{\infty}_{0} (1/2)^n よりも収束速度がゆっくりなものって何かありますか?
刻み幅に使いたいんですが中々思いつかないですm(__)m
無限級数の和が1になるものうち、\Sigma^{\infty}_{0} (1/2)^n よりも収束速度がゆっくりなものって何かありますか?
刻み幅に使いたいんですが中々思いつかないですm(__)m
663デフォルトの名無しさん
2014/10/29(水) 12:33:02.25ID:HQN23iJw 質問がおかしいので、たぶん刻み幅っていうより問題設定が間違っている。
664デフォルトの名無しさん
2014/10/30(木) 00:25:40.34ID:BI8qle6I >>663
つまりは足し上げて1に収束するような数列を知りたいんです。
(1/2)+(1/2)^2+(1/2)^3+(1/2)^4+.....+(1/2)^n->1 ですよね?
これだと収束スピードが速すぎるので、もう少し緩めに収束する数列を知りたいんです
つまりは足し上げて1に収束するような数列を知りたいんです。
(1/2)+(1/2)^2+(1/2)^3+(1/2)^4+.....+(1/2)^n->1 ですよね?
これだと収束スピードが速すぎるので、もう少し緩めに収束する数列を知りたいんです
665デフォルトの名無しさん
2014/10/30(木) 22:03:37.99ID:jLdY1ojF intel fortran compilerが、非商用版があると聞いたんですけど
ホームページに行ってもありませんでした
もう非商用版は終了したんでしょうか
ホームページに行ってもありませんでした
もう非商用版は終了したんでしょうか
666デフォルトの名無しさん
2014/10/30(木) 23:06:25.70ID:BI8qle6I >>665
ありますよ
ありますよ
667デフォルトの名無しさん
2014/10/30(木) 23:08:34.49ID:jLdY1ojF668デフォルトの名無しさん
2014/10/30(木) 23:46:30.56ID:BI8qle6I >>667
ttp://pen.agbi.tsukuba.ac.jp/~RStiger/hiki2/?Fortran+(Intel+Parallel+Studio+XE)+%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8
この辺参考にしましたよ(^^)
ttp://pen.agbi.tsukuba.ac.jp/~RStiger/hiki2/?Fortran+(Intel+Parallel+Studio+XE)+%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8
この辺参考にしましたよ(^^)
669デフォルトの名無しさん
2014/10/31(金) 06:45:08.15ID:vB//dhHV 非商用ページにたどり着く方法, 頻繁に変わって不便だよなあ
ライセンス登録して.licファイルなりシリアルコードなり持ってるなら直接DLするって手もあるが
ttp://registrationcenter-download.intel.com/akdlm/irc_nas/4584/parallel_studio_xe_2015.tgz
ライセンス登録して.licファイルなりシリアルコードなり持ってるなら直接DLするって手もあるが
ttp://registrationcenter-download.intel.com/akdlm/irc_nas/4584/parallel_studio_xe_2015.tgz
670デフォルトの名無しさん
2014/10/31(金) 18:03:58.39ID:NN74lK+x671デフォルトの名無しさん
2014/11/01(土) 22:28:08.66ID:wAFS/Rlb amazon ec2で計算してる人いる?
672デフォルトの名無しさん
2014/11/02(日) 10:01:51.45ID:P1O0Zm4b >669
御呈示のアドレスはLinux版ですが、Windows版
について情報をおもちではないでしょうか
御呈示のアドレスはLinux版ですが、Windows版
について情報をおもちではないでしょうか
673デフォルトの名無しさん
2014/11/02(日) 10:23:39.60ID:Y+tjsjxk674デフォルトの名無しさん
2014/11/02(日) 20:58:20.47ID:r8jFoIGa 乞食か
675デフォルトの名無しさん
2014/11/06(木) 01:07:08.08ID:NBIHQ5C4 Linux版以外も学生非商用は無料だろ。
676デフォルトの名無しさん
2014/11/06(木) 07:51:33.96ID:lC8feXNL >>675
嘘つくなよ、ゴミ屑
嘘つくなよ、ゴミ屑
677デフォルトの名無しさん
2014/11/16(日) 23:31:47.83ID:jtA73LXf 2つの実測値の相関係数を出したいのですが、
fortranでできないでしょうか
実測値は単純な直線傾向ではないです
エクセルで手動でやることも考えたのですが、
実測値が100ケースほどあって、
今後も増えることを考えるとプログラムで作りたいと思いました
もしよければアドバイスいただけないでしょうか
fortranでできないでしょうか
実測値は単純な直線傾向ではないです
エクセルで手動でやることも考えたのですが、
実測値が100ケースほどあって、
今後も増えることを考えるとプログラムで作りたいと思いました
もしよければアドバイスいただけないでしょうか
678デフォルトの名無しさん
2014/11/17(月) 09:46:48.96ID:vGRlOVoS679デフォルトの名無しさん
2014/11/17(月) 13:53:58.07ID:jwH5O+V+ >>678
Octave でもいいんじゃないの?
Octave でもいいんじゃないの?
680デフォルトの名無しさん
2014/11/17(月) 18:52:41.93ID:yxNOhCMR681デフォルトの名無しさん
2014/12/13(土) 01:43:27.96ID:IhMrPb/B Fortranで書かれている遺伝的アルゴリズムのライブラリが
手に入るところはないでしょうか
手に入るところはないでしょうか
2014/12/13(土) 18:32:39.00ID:ycSbkqQR
683デフォルトの名無しさん
2014/12/15(月) 00:30:38.37ID:+0+wnp46 MPICH または OPENMPI で Fortran2008 bindings を使う方法を教えろ下さい。
ドキュメントにはサポートと書いてあるが、インストールしても MPI_F08.MOD が
生成されない@Ubuntu
どうか助けろ下さい。こっちのスレへ行けという指示でもおk
ドキュメントにはサポートと書いてあるが、インストールしても MPI_F08.MOD が
生成されない@Ubuntu
どうか助けろ下さい。こっちのスレへ行けという指示でもおk
684デフォルトの名無しさん
2014/12/15(月) 19:55:14.30ID:oICLvczS ランダム生成のコードのについて質問です。
ifortではコンパイルできたのですが、gfortranではエラーが出ました。
以下がエラーメッセージです。
""$ gfortran routine.f90
routine.f90:32.25:
call random_seed( put = (/c * 999/) )
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (1/12)""
putの大きさが本質的に小さすぎる、や(=c とした時)本質的に配列である。といったメッセージだと思い、いじってみたのですが解決方法が分かりません。よろしくお願いします。
あと / ~ / のスラッシュの意味もよろしければお願いします。
ifortではコンパイルできたのですが、gfortranではエラーが出ました。
以下がエラーメッセージです。
""$ gfortran routine.f90
routine.f90:32.25:
call random_seed( put = (/c * 999/) )
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (1/12)""
putの大きさが本質的に小さすぎる、や(=c とした時)本質的に配列である。といったメッセージだと思い、いじってみたのですが解決方法が分かりません。よろしくお願いします。
あと / ~ / のスラッシュの意味もよろしければお願いします。
685デフォルトの名無しさん
2014/12/15(月) 20:47:21.21ID:vJVAgy9L 試しにgfortran4.9でrandom_seed(size=i)(iはinteger)を実行したらi=12だった
つまりgfortranの場合はputの引数が大きさ12以上の1次元整数配列でなければならない
(/c*999/)は大きさ1の1次元配列で、その値がc*999という意味だからエラーになる
つまりgfortranの場合はputの引数が大きさ12以上の1次元整数配列でなければならない
(/c*999/)は大きさ1の1次元配列で、その値がc*999という意味だからエラーになる
686デフォルトの名無しさん
2014/12/15(月) 20:51:20.48ID:waUBgqmC687デフォルトの名無しさん
2014/12/15(月) 22:17:44.08ID:oICLvczS >>685
丁寧な説明ありがとうございます。
cを配列にすると上あるシステムクロックのcountの取得のところでエラーが出てと堂々めぐりをしてましたが、シードが12の配列でも要素一つ変えれば乱数にはなるということなんですね。
スラッシュが配列を表しているとは気づきませんでした。勉強になります。
丁寧な説明ありがとうございます。
cを配列にすると上あるシステムクロックのcountの取得のところでエラーが出てと堂々めぐりをしてましたが、シードが12の配列でも要素一つ変えれば乱数にはなるということなんですね。
スラッシュが配列を表しているとは気づきませんでした。勉強になります。
688デフォルトの名無しさん
2014/12/17(水) 02:40:01.63ID:5R4Eyqcc LU分解のサブルーチンが作れません(ToT)
サンプルがあったらください…
サンプルがあったらください…
689デフォルトの名無しさん
2014/12/17(水) 02:41:44.43ID:5R4Eyqcc >>688
検索して、それっぽいのが出てきたんですがメインプログラムに噛ませてもうまくいきませんでした…
検索して、それっぽいのが出てきたんですがメインプログラムに噛ませてもうまくいきませんでした…
690デフォルトの名無しさん
2014/12/18(木) 08:43:35.24ID:BU61zCPz >>689
なら氏ね
なら氏ね
691デフォルトの名無しさん
2014/12/18(木) 14:54:41.87ID:8HGauugM MacOSX10.10.1, gfortran4.9にてコンパイル後、実行時に発生する下記のエラーの解決策はあるのでしょうか?
At line 68 of file test.f90 (unit = 1, file = 'parameter.txt')
Fortran runtime error: Cannot match namelist object name 44
namelistの不一致は見当たらず、Windows7, g95では正常に動作しました。
At line 68 of file test.f90 (unit = 1, file = 'parameter.txt')
Fortran runtime error: Cannot match namelist object name 44
namelistの不一致は見当たらず、Windows7, g95では正常に動作しました。
692デフォルトの名無しさん
2014/12/18(木) 23:40:19.37ID:jd6kmeGe 計算流体力学を習い初めの学生なんですが、Radeonでfortranの計算をする場合にはどのソフトをインストールすればいいのでしょうか?
MinGW Command PromptとTDM-GCC-64というのを使っています。
出来ればインストール方法が書かれたページも一緒に知りたいです。
MinGW Command PromptとTDM-GCC-64というのを使っています。
出来ればインストール方法が書かれたページも一緒に知りたいです。
693デフォルトの名無しさん
2014/12/19(金) 20:10:17.60ID:nJn0njjQ open文で開いたcsvファイルをread(51,*)〜〜などで
読み込む操作が何回かある場合、
並列化はできたりしないでしょうか
読み書きはやっぱり並列化は無理でしょうか
読み込む操作が何回かある場合、
並列化はできたりしないでしょうか
読み書きはやっぱり並列化は無理でしょうか
694デフォルトの名無しさん
2014/12/20(土) 11:31:57.54ID:9/Q8xBDD 『if … else if … end if』と『select case …』はどっちが速いのか,ふと思って計測してみた.
cygwin gcc 4.8.3@core-i5で繰り返し計測してみたけど,時間差はばらつきの範囲内で有意な差はなさそうな感じ.
二つの構文ともCPU時間同じ,機能も同じで,いまいち,使い分け方が分からないんだよねぇ...
使ったコードはこれ↓
module mod_util
implicit none
integer(kind=4) :: t1, t2, t_rate, t_max, t_diff
contains
real(8) function elapsedTime()
implicit none
call SYSTEM_CLOCK(t2, t_rate, t_max)
if ( t2 < t1 ) then
t_diff = t_max - t1 + t2
else
t_diff = t2 - t1
endif
elapsedTime = t_diff/real(t_rate)
end function elapsedTime
end module mod_util
cygwin gcc 4.8.3@core-i5で繰り返し計測してみたけど,時間差はばらつきの範囲内で有意な差はなさそうな感じ.
二つの構文ともCPU時間同じ,機能も同じで,いまいち,使い分け方が分からないんだよねぇ...
使ったコードはこれ↓
module mod_util
implicit none
integer(kind=4) :: t1, t2, t_rate, t_max, t_diff
contains
real(8) function elapsedTime()
implicit none
call SYSTEM_CLOCK(t2, t_rate, t_max)
if ( t2 < t1 ) then
t_diff = t_max - t1 + t2
else
t_diff = t2 - t1
endif
elapsedTime = t_diff/real(t_rate)
end function elapsedTime
end module mod_util
695694
2014/12/20(土) 11:33:00.40ID:9/Q8xBDD program testSelectIf
use mod_util, only : t1, elapsedTime
implicit none
real (kind=8) :: randX
integer(kind=4) :: i, j, randI
#ifdef ifelse
write(*,'("# if ... else if ... ")')
#else
write(*,'("# select case")')
#endif
call init_randomSeed(972384)
call SYSTEM_CLOCK(t1)
do i = 1, 100000000
call random_number(randX)
randI = int( randX * 10, kind=4 )
#ifdef ifelse
if ( randI == 1 ) then; j = j + 1
else if ( randI == 2 ) then; j = j - 2
else if ( randI == 3 ) then; j = j + 3
else if ( randI == 4 ) then; j = j - 4
else if ( randI == 5 ) then; j = j + 5
else if ( randI == 6 ) then; j = j - 6
else if ( randI == 7 ) then; j = j + 7
else if ( randI == 8 ) then; j = j - 8
else if ( randI == 9 ) then; j = j + 9
else if ( randI ==10 ) then; j = j - 10
use mod_util, only : t1, elapsedTime
implicit none
real (kind=8) :: randX
integer(kind=4) :: i, j, randI
#ifdef ifelse
write(*,'("# if ... else if ... ")')
#else
write(*,'("# select case")')
#endif
call init_randomSeed(972384)
call SYSTEM_CLOCK(t1)
do i = 1, 100000000
call random_number(randX)
randI = int( randX * 10, kind=4 )
#ifdef ifelse
if ( randI == 1 ) then; j = j + 1
else if ( randI == 2 ) then; j = j - 2
else if ( randI == 3 ) then; j = j + 3
else if ( randI == 4 ) then; j = j - 4
else if ( randI == 5 ) then; j = j + 5
else if ( randI == 6 ) then; j = j - 6
else if ( randI == 7 ) then; j = j + 7
else if ( randI == 8 ) then; j = j - 8
else if ( randI == 9 ) then; j = j + 9
else if ( randI ==10 ) then; j = j - 10
696694
2014/12/20(土) 11:33:45.85ID:9/Q8xBDD end if
#else
select case (randI)
case ( 1 ); j = j + 1
case ( 2 ); j = j - 2
case ( 3 ); j = j + 3
case ( 4 ); j = j - 4
case ( 5 ); j = j + 5
case ( 6 ); j = j - 6
case ( 7 ); j = j + 7
case ( 8 ); j = j - 8
case ( 9 ); j = j + 9
case ( 10 ); j = j - 10
end select
#endif
end do
write(*,'("j=",I0)') j
write(*,'("#time:", F10.3)') elapsedTime()
end program testSelectIf
#else
select case (randI)
case ( 1 ); j = j + 1
case ( 2 ); j = j - 2
case ( 3 ); j = j + 3
case ( 4 ); j = j - 4
case ( 5 ); j = j + 5
case ( 6 ); j = j - 6
case ( 7 ); j = j + 7
case ( 8 ); j = j - 8
case ( 9 ); j = j + 9
case ( 10 ); j = j - 10
end select
#endif
end do
write(*,'("j=",I0)') j
write(*,'("#time:", F10.3)') elapsedTime()
end program testSelectIf
697デフォルトの名無しさん
2014/12/21(日) 02:39:49.62ID:+T8Tju2f >>693
I/O中に計算とかしたいという意味での並列化なら、F2003でasynchronous I/Oが出来る
ようになった。同じファイルの別々の位置のデータを並列に読み出したいという意味なら
そもそもハードウェア的に無理だろう。
>>694
最適化の問題というより、計算型GOTOの後継機能といったものではないか?
構造化プログラミングがホットだった時代は、GOTO 文を追放するための基本構造
のひとつとされていた気がする。
CASE文の中に入るのが、整数型、文字型、論理型のように離散値をとる場合に
限られるので、IF..ELSE IFの連鎖との使い分けは、比較で=が意味を持つ型か
或いは実数型などのように=があったとしても基本的に<、>的な大小比較しか
意味を持たない場合を、意識して明示的に区別していますよというアピールではないか。
I/O中に計算とかしたいという意味での並列化なら、F2003でasynchronous I/Oが出来る
ようになった。同じファイルの別々の位置のデータを並列に読み出したいという意味なら
そもそもハードウェア的に無理だろう。
>>694
最適化の問題というより、計算型GOTOの後継機能といったものではないか?
構造化プログラミングがホットだった時代は、GOTO 文を追放するための基本構造
のひとつとされていた気がする。
CASE文の中に入るのが、整数型、文字型、論理型のように離散値をとる場合に
限られるので、IF..ELSE IFの連鎖との使い分けは、比較で=が意味を持つ型か
或いは実数型などのように=があったとしても基本的に<、>的な大小比較しか
意味を持たない場合を、意識して明示的に区別していますよというアピールではないか。
698694
2014/12/22(月) 19:17:39.41ID:mnW7xu7L699デフォルトの名無しさん
2014/12/22(月) 21:51:51.17ID:KCseyMpL >>697
ありがとうございます
やりたかったことはcsvファイルがいくつかあり、
それを順番に読み込みreadするdoループを並列化できないかなということでした
教えていただいた後者の方にあたりそうな気がしまして、
勉強になりました。
ありがとうございます
やりたかったことはcsvファイルがいくつかあり、
それを順番に読み込みreadするdoループを並列化できないかなということでした
教えていただいた後者の方にあたりそうな気がしまして、
勉強になりました。
700デフォルトの名無しさん
2014/12/23(火) 16:29:15.14ID:gTJoh1O6 永らくFORTRAN77で飯を食ってたのですが,より新しいFORTRANへ移行してみたくなりました
なにか良書はありましょうか?
職業プログラマで社内で請負で流体や構造体のメッシャーを組んでます
まあ,ベースのプログラムも77,新規も77縛りの事が多いので特に困ってはないのです
しかし,昔,汎用機世代の6しか書けないような先輩方を古臭いと笑っていたのですが自分もそんな年になってしまい
後輩らに笑われたくないので,ちょっと勉強しておきたいと考えています
世の90の初心本(それ以降は書店でも見ないなー)等は基本的な制御構文等が厚く書かれており
ホントに身に着けたい新たな概念のintent等がおざなりになってしまっています
古臭い77書きに光を......
#C++もやってるのでクラスの概念なんかも問題はありません
なにか良書はありましょうか?
職業プログラマで社内で請負で流体や構造体のメッシャーを組んでます
まあ,ベースのプログラムも77,新規も77縛りの事が多いので特に困ってはないのです
しかし,昔,汎用機世代の6しか書けないような先輩方を古臭いと笑っていたのですが自分もそんな年になってしまい
後輩らに笑われたくないので,ちょっと勉強しておきたいと考えています
世の90の初心本(それ以降は書店でも見ないなー)等は基本的な制御構文等が厚く書かれており
ホントに身に着けたい新たな概念のintent等がおざなりになってしまっています
古臭い77書きに光を......
#C++もやってるのでクラスの概念なんかも問題はありません
701デフォルトの名無しさん
2014/12/23(火) 16:43:41.88ID:AyCexUV4 日本語の書籍に関しては仰る通りで、特に2003以降は全くないはず
まずはnagのサイトにあるFortran入門とFortran 2003入門が無難かと
ただ、これらは規格を網羅してるわけではないので
完全な仕様を知りたい場合はコンパイラのマニュアルや
JIS規格(JIS X 3001-1:2009)も参照する必要あり
まずはnagのサイトにあるFortran入門とFortran 2003入門が無難かと
ただ、これらは規格を網羅してるわけではないので
完全な仕様を知りたい場合はコンパイラのマニュアルや
JIS規格(JIS X 3001-1:2009)も参照する必要あり
702デフォルトの名無しさん
2014/12/23(火) 20:48:23.28ID:gTJoh1O6 >694
selectは単一の変数でしか使えないよ
selectはどうかするとジャンプテーブルで一発の比較で処理してくれる可能性が高い
最近のコンパイラはelseifでもそうするとか聞くけど,どうだろうね?
elseifは良く引っかかるのを前に持って来て早めに引っ掛ける事ができるとかも聞くねー
個人的には,読みやすさを優先するなー
#Cのswitchの議論と同じなので探してみると良いよ
selectは単一の変数でしか使えないよ
selectはどうかするとジャンプテーブルで一発の比較で処理してくれる可能性が高い
最近のコンパイラはelseifでもそうするとか聞くけど,どうだろうね?
elseifは良く引っかかるのを前に持って来て早めに引っ掛ける事ができるとかも聞くねー
個人的には,読みやすさを優先するなー
#Cのswitchの議論と同じなので探してみると良いよ
703700
2014/12/23(火) 20:51:07.24ID:gTJoh1O6 ありがとうございます
まずはサイトのそれらを読んでみます
その後は......JISかー,読みやすさを優先してくれないからなー
コンパイラのマニュアルは殆ど英語になるのが悲しい
まずはサイトのそれらを読んでみます
その後は......JISかー,読みやすさを優先してくれないからなー
コンパイラのマニュアルは殆ど英語になるのが悲しい
704デフォルトの名無しさん
2014/12/23(火) 23:30:23.88ID:pDBo2/8d >700,703
Fortran90の日本語の解説本で良いなら、
bit別冊 詳解Fortran90 1993年12月号別冊 共立出版
という本があります。これは『Fortran90 Explained』の日本語訳です。
但し、雑誌の別冊ということもあり入手は極めて困難でしょう。
あるとすれば、理工系の大学図書館が一番可能性が高いと思います。
参考までにどうぞ。
Fortran90の日本語の解説本で良いなら、
bit別冊 詳解Fortran90 1993年12月号別冊 共立出版
という本があります。これは『Fortran90 Explained』の日本語訳です。
但し、雑誌の別冊ということもあり入手は極めて困難でしょう。
あるとすれば、理工系の大学図書館が一番可能性が高いと思います。
参考までにどうぞ。
705デフォルトの名無しさん
2014/12/29(月) 01:02:13.12ID:hjLOuT9S Fortranを使われている方は他にはどんな言語を扱っているのですか?
pythonとかでしょうか
pythonとかでしょうか
706デフォルトの名無しさん
2014/12/29(月) 09:04:30.59ID:6EMRS7hN >>705
perl
perl
707デフォルトの名無しさん
2015/01/04(日) 14:13:23.64ID:OaA6oEKz >>700
おいらもFORTRAN77使いなんで、小文字のプログラムに違和感ありまくり
おいらもFORTRAN77使いなんで、小文字のプログラムに違和感ありまくり
708デフォルトの名無しさん
2015/01/04(日) 16:56:46.08ID:Ydg+fj8+ >>707
こっちはfortran90からの新参なんで、77のソース見ると大文字、goto文ありでなかなか新鮮です。
ところでfortran2003の機能すべてカバーしてるコンパイラは商用しかないのかな。
gfortran使いなんでカナピー(´・_・`)
こっちはfortran90からの新参なんで、77のソース見ると大文字、goto文ありでなかなか新鮮です。
ところでfortran2003の機能すべてカバーしてるコンパイラは商用しかないのかな。
gfortran使いなんでカナピー(´・_・`)
709デフォルトの名無しさん
2015/01/04(日) 20:02:59.44ID:1HVLEOms 商用だけですな
しかし商用Fortranコンパイラは趣味で買うには高すぎるので
gfortranが対応してる範囲で書いてます
しかし商用Fortranコンパイラは趣味で買うには高すぎるので
gfortranが対応してる範囲で書いてます
710デフォルトの名無しさん
2015/01/04(日) 23:43:36.28ID:YPIAtxeL711デフォルトの名無しさん
2015/01/04(日) 23:48:08.93ID:YPIAtxeL712デフォルトの名無しさん
2015/01/05(月) 11:27:48.33ID:dcVDuqIP >>710
勉強用なら
VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
で、とりあえずLinux環境作っちゃうのも手なんかね
…もちろん、LinuxやBSDに詳しい人にはこの構成では不満が出てくるだろうが
(特にUbuntuの標準GUI、嫌いな人結構多いしな)
知らん人がサクッとUnix系の環境作るには楽だと思った
勉強用なら
VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
で、とりあえずLinux環境作っちゃうのも手なんかね
…もちろん、LinuxやBSDに詳しい人にはこの構成では不満が出てくるだろうが
(特にUbuntuの標準GUI、嫌いな人結構多いしな)
知らん人がサクッとUnix系の環境作るには楽だと思った
713デフォルトの名無しさん
2015/01/05(月) 12:04:08.73ID:IJbwWfwV >>712
>VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
>で、とりあえずLinux環境作っちゃうのも手なんかね
Fortranの勉強のためならこれが正解だと思う。わざわざLinux用の領域をハードディスク上に
確保して…というのは面倒だしね。自分も次は仮想マシンを使うと思う。
UbuntuのGUIが気に入らない場合は、VirtualBoxにインストールできるか知らないけれど、
RHELクローンやOpenSUSEもあることだし。
>VirtualBox(個人使用は無料だったハズ) + Ubuntu日本語Remix仮想ハードディスクイメージ
>で、とりあえずLinux環境作っちゃうのも手なんかね
Fortranの勉強のためならこれが正解だと思う。わざわざLinux用の領域をハードディスク上に
確保して…というのは面倒だしね。自分も次は仮想マシンを使うと思う。
UbuntuのGUIが気に入らない場合は、VirtualBoxにインストールできるか知らないけれど、
RHELクローンやOpenSUSEもあることだし。
714デフォルトの名無しさん
2015/01/05(月) 12:13:27.17ID:K2pJxzU2 VirtualBoxに入れるLinuxなんて、GUI抜きで容量減らしてインストールして
sshでもっと使い易い端末エミュレーターから操作するのが普通じゃないか
sshでもっと使い易い端末エミュレーターから操作するのが普通じゃないか
715デフォルトの名無しさん
2015/01/05(月) 12:35:46.63ID:dcVDuqIP >>714
もちろんそれが理想的だし、解ってりゃ大したことないんだけどね
もちろんそれが理想的だし、解ってりゃ大したことないんだけどね
716デフォルトの名無しさん
2015/01/07(水) 02:53:13.20ID:2xplb8o3 でも最近の Linux intel fortran も windows と同じ GUI でインストールできる
ようになってるし〜 楽ちんしたいのよ〜
ようになってるし〜 楽ちんしたいのよ〜
717デフォルトの名無しさん
2015/01/09(金) 00:18:45.90ID:osa1YwUn ifortやgfortranのオプションについて教えてください.
Makefileを書くとき,コンパイルオプションやリンクオプションをCFLAGSとLDFLAGSに分けて書くのが一般的みたいですが,
Intel Fortranコンパイラのユーザー・リファレンス・ガイドやgfortran/gccのマニュアルを読んでも,
どのオプションがコンパイルオプションで,どれがリンクオプションか明記されていませんよね?
コンパイラとリンカに与えるべきオプションは,それぞれ,どうやって見分けたら良いんでしょうか?
Makefileを書くとき,コンパイルオプションやリンクオプションをCFLAGSとLDFLAGSに分けて書くのが一般的みたいですが,
Intel Fortranコンパイラのユーザー・リファレンス・ガイドやgfortran/gccのマニュアルを読んでも,
どのオプションがコンパイルオプションで,どれがリンクオプションか明記されていませんよね?
コンパイラとリンカに与えるべきオプションは,それぞれ,どうやって見分けたら良いんでしょうか?
718デフォルトの名無しさん
2015/01/16(金) 00:14:55.27ID:ZBkPwkB6 intel fortranの非商用版終了したっぽいな
719デフォルトの名無しさん
2015/01/16(金) 07:28:02.50ID:zC22PbLh720デフォルトの名無しさん
2015/01/16(金) 10:37:10.07ID:gldaWoEV721デフォルトの名無しさん
2015/01/16(金) 11:08:31.95ID:pdIo+qaj >>720
ありがとうm(__)m
ありがとうm(__)m
722デフォルトの名無しさん
2015/01/20(火) 00:53:26.59ID:jj5OmV/0 薄汚い乞食が多すぎたんだな
723デフォルトの名無しさん
2015/01/20(火) 02:58:09.86ID:jVCDWxyp >>722
確かに研究用途で無償版使われているって書いてるな
確かに研究用途で無償版使われているって書いてるな
724デフォルトの名無しさん
2015/01/20(火) 16:42:37.43ID:kWeIi6xm すみません。本読んだりGoogle等で調べましたが、いまいちわからなかったので質問させてください。
result.datというデータの中にある本来17行21列で表示するデータが
#(A,B)
(1,0)
・
・
・
(17,0)
(0,1)
・
・
・
(17,1)
(0,2)
・
・
・
(17,2)
・
・
・
(17,20)
というように1列で表示されているデータがあります。
openを使ってこれを読み込んで本来の17行21列の形にして別のデータとして出力したいのですが、
どなたか知恵をお貸しいただけませんか?またできればデータの(A,B)のAの部分だけ、Bの部分だけを取り出したいのですが、
どうすればよいのでしょうか?
result.datというデータの中にある本来17行21列で表示するデータが
#(A,B)
(1,0)
・
・
・
(17,0)
(0,1)
・
・
・
(17,1)
(0,2)
・
・
・
(17,2)
・
・
・
(17,20)
というように1列で表示されているデータがあります。
openを使ってこれを読み込んで本来の17行21列の形にして別のデータとして出力したいのですが、
どなたか知恵をお貸しいただけませんか?またできればデータの(A,B)のAの部分だけ、Bの部分だけを取り出したいのですが、
どうすればよいのでしょうか?
725デフォルトの名無しさん
2015/01/20(火) 17:17:10.54ID:zoNsgUGG >>724
過去レスヨメカス
過去レスヨメカス
726デフォルトの名無しさん
2015/01/20(火) 17:19:19.79ID:mCR0Xk39 >>725
ソウイワナイデオシエロヨ
ソウイワナイデオシエロヨ
727デフォルトの名無しさん
2015/01/20(火) 17:39:47.89ID:kWeIi6xm728デフォルトの名無しさん
2015/01/24(土) 14:38:14.65ID:vOXkay9k cosやexpとかの組み込み関数が学校のifortだと通るんだけど家のgfortranだと通らない助けて
no implicit typeって言われる
no implicit typeって言われる
729デフォルトの名無しさん
2015/01/24(土) 16:14:31.36ID:YsJc5wwN730デフォルトの名無しさん
2015/01/24(土) 17:04:25.97ID:vOXkay9k 4倍精度から倍精度にしたら実行できました
gcc4.6以降は4倍もサポートしてるそうなんですがおかしいですね…
ありがとうございました
gcc4.6以降は4倍もサポートしてるそうなんですがおかしいですね…
ありがとうございました
731デフォルトの名無しさん
2015/01/25(日) 14:22:03.88ID:mPYFAplZ >728
fortran 4.8.1
で
program test
real(16) :: D2R
D2R = 0.0174532925199432957692369076848861271344_16
write(*, *) '1/e= ',1/exp(1.0_16)
write(*,*) 'cos(30)= ',cos(30.0*D2R)
end program test
を実行すると
1/e= 0.367879441171442321595523770161460873
cos(30)= 0.866025403784438646763723170752936161
という答えが得られます
少なくとも30桁以上の精度がでているとおもいますが、
fortran 4.8.1
で
program test
real(16) :: D2R
D2R = 0.0174532925199432957692369076848861271344_16
write(*, *) '1/e= ',1/exp(1.0_16)
write(*,*) 'cos(30)= ',cos(30.0*D2R)
end program test
を実行すると
1/e= 0.367879441171442321595523770161460873
cos(30)= 0.866025403784438646763723170752936161
という答えが得られます
少なくとも30桁以上の精度がでているとおもいますが、
732デフォルトの名無しさん
2015/01/25(日) 14:24:04.46ID:mPYFAplZ >731
>fortran 4.8.1
は
gfortran 4.8.1
のtypoです。しつれいしました。
>fortran 4.8.1
は
gfortran 4.8.1
のtypoです。しつれいしました。
733デフォルトの名無しさん
2015/01/27(火) 15:08:58.38ID:TDQ9+ev7 >>730
もう解決しているかも知れないけれど、処理系がFortran2008と4倍精度をサポートしていれば
iso_fortran_envモジュールのreal128という定数を使う言語仕様に準拠した方法がある。
program qfloat
use iso_fortran_env
implicit none
real(kind = real128) :: q
q = 1 / exp(1.0_real128)
print *, q
end program qfloat
もう解決しているかも知れないけれど、処理系がFortran2008と4倍精度をサポートしていれば
iso_fortran_envモジュールのreal128という定数を使う言語仕様に準拠した方法がある。
program qfloat
use iso_fortran_env
implicit none
real(kind = real128) :: q
q = 1 / exp(1.0_real128)
print *, q
end program qfloat
734デフォルトの名無しさん
2015/01/30(金) 19:29:21.36ID:CPtXDESF 超初心者です。質問させていただきます。
forrtl:severe(24): end-of-file during read,unit 110,file C:tkshmd\www01.dat
というエラーが出たのですがどうすれば解決できますか?
教授から卒業研究用に渡されたもので、自分で書いたものではありません
11年前に卒業した先輩が書いたものらしいのです
fortranに関する知識は一切ございません。すみません
forrtl:severe(24): end-of-file during read,unit 110,file C:tkshmd\www01.dat
というエラーが出たのですがどうすれば解決できますか?
教授から卒業研究用に渡されたもので、自分で書いたものではありません
11年前に卒業した先輩が書いたものらしいのです
fortranに関する知識は一切ございません。すみません
735デフォルトの名無しさん
2015/01/30(金) 19:35:01.91ID:QUUDxgkN736デフォルトの名無しさん
2015/01/30(金) 20:02:06.39ID:JnK0Au4d >>734
データの読み込み中にEOFが来た
つまり、読み込む変数に対してファイルのデータ数が足りない
先ずは実行できるデータファイルを貰って
自分の環境でプログラムが動くことを確認したら?
自分の計算はその実行できるファイルをいじってする
何より教授に聞けよ
データの読み込み中にEOFが来た
つまり、読み込む変数に対してファイルのデータ数が足りない
先ずは実行できるデータファイルを貰って
自分の環境でプログラムが動くことを確認したら?
自分の計算はその実行できるファイルをいじってする
何より教授に聞けよ
737デフォルトの名無しさん
2015/01/30(金) 20:49:39.27ID:ExkW5Q4r >>734
736で解決すると思ったけど
フォルダアドレス名、もしかして名前の母音抜き?
違ったらごめんね
もしそうだったとしたら、今後フォルダ名の投稿の時とか気をつけてね
私、昔似たようなことやっちゃったので。
関係ないが気になったのでつい
736で解決すると思ったけど
フォルダアドレス名、もしかして名前の母音抜き?
違ったらごめんね
もしそうだったとしたら、今後フォルダ名の投稿の時とか気をつけてね
私、昔似たようなことやっちゃったので。
関係ないが気になったのでつい
738デフォルトの名無しさん
2015/02/04(水) 05:53:12.64ID:Y9ZHS9LP ちょいとみなさんのお知恵拝借させてもらえたら幸い。
二分法かなんか使ってイテレーションさせようかと思ってるんだけど、ある解に収束するまでの途中のデータが出力ファイルに書き込まれて困ってる。
収束した時のみの結果を出力させたいんだけどどうしたもんだろ?
すごく簡略化した例だけど
do i = 1, imax
....
! F(x(i),y(i),z(i)) は非線形で数値計算でその都度計算するしかない
F(x(i),y(i),z(i))= .........
write(15,*) x(i),y(i),z(i)
! イテレーションする部分
If(s(x(i),y(i),z(i)) < 1.0d-5) then
Exit
Else
....
Endif
Enddo
二分法かなんか使ってイテレーションさせようかと思ってるんだけど、ある解に収束するまでの途中のデータが出力ファイルに書き込まれて困ってる。
収束した時のみの結果を出力させたいんだけどどうしたもんだろ?
すごく簡略化した例だけど
do i = 1, imax
....
! F(x(i),y(i),z(i)) は非線形で数値計算でその都度計算するしかない
F(x(i),y(i),z(i))= .........
write(15,*) x(i),y(i),z(i)
! イテレーションする部分
If(s(x(i),y(i),z(i)) < 1.0d-5) then
Exit
Else
....
Endif
Enddo
739738
2015/02/04(水) 05:54:22.46ID:Y9ZHS9LP 連投すんません
S(x(i),y(i),z(i))は新しい関数ですm(__)m
よろしくお願い申し上げます。
S(x(i),y(i),z(i))は新しい関数ですm(__)m
よろしくお願い申し上げます。
740デフォルトの名無しさん
2015/02/04(水) 21:13:09.14ID:uLg2ampX >>738
収束ループを出てから、書いたら?
収束ループを出てから、書いたら?
741デフォルトの名無しさん
2015/02/04(水) 21:21:39.45ID:1jln5owW 求めた解はどこかで使うんでしょ?なら,使う直前にwrite文を書けばいいのではないか?
というか,
>二分法かなんか
『なんか』ってなんだ?そんなきき方でどう答えろというんだろうか?
その例の書き方だと,そもそも二分法の使い方を理解しているのかと,そっちの方が心配になる.
というか,
>二分法かなんか
『なんか』ってなんだ?そんなきき方でどう答えろというんだろうか?
その例の書き方だと,そもそも二分法の使い方を理解しているのかと,そっちの方が心配になる.
743デフォルトの名無しさん
2015/02/11(水) 01:54:42.49ID:rsWy3Hp4 debugをしたら
user breakpoint called from code at 0x7c94120e
と出てきたのですが、どういった意味なんでしょうか
user breakpoint called from code at 0x7c94120e
と出てきたのですが、どういった意味なんでしょうか
744デフォルトの名無しさん
2015/02/11(水) 02:18:15.77ID:947xRA4B 環境書こうよ……
まず、>>1の注意事項を読んでくれ
まず、>>1の注意事項を読んでくれ
745デフォルトの名無しさん
2015/02/11(水) 02:35:40.04ID:+/9jIDfQ >>743
回線切って逝ってよし
回線切って逝ってよし
746デフォルトの名無しさん
2015/02/11(水) 10:40:19.88ID:I3RcppAe747デフォルトの名無しさん
2015/02/11(水) 22:51:10.13ID:pX2dRfIb コンパイラはどれを使っていますか?
748デフォルトの名無しさん
2015/02/11(水) 23:16:27.84ID:LIuSSWm5 g95
749デフォルトの名無しさん
2015/02/15(日) 01:10:05.40ID:g8pHAe2n Rの関数(cor(x,y)など)をFortranプログラム上で使えるようにできないでしょうか
Rに入っている関数のsoファイルを利用してなどできたりしないでしょうか
Rに入っている関数のsoファイルを利用してなどできたりしないでしょうか
750デフォルトの名無しさん
2015/02/15(日) 13:38:58.18ID:TAercYgC >>749 あなたは Fortran ではなく R を使うべきなのではないのでしょうか
751デフォルトの名無しさん
2015/02/15(日) 14:45:03.59ID:83OS2d7V Rがコマンドから使えるなら普通にSYSTEMすればいいんじゃないの
752デフォルトの名無しさん
2015/02/15(日) 22:02:11.88ID:g8pHAe2n753デフォルトの名無しさん
2015/02/15(日) 22:03:52.96ID:/BGdl65O そもそもFORTRANにはRなんか手も足もでないような統計ライブラリが存在するはずだが
754デフォルトの名無しさん
2015/02/16(月) 00:11:19.19ID:cFBQlJ5l755デフォルトの名無しさん
2015/02/16(月) 04:49:19.07ID:OLD7Gvb9 相関係数求めるだけだろ?
http://tama.green.gifu-u.ac.jp/~tama/soft/sample_prog/correlation/
http://tama.green.gifu-u.ac.jp/~tama/soft/sample_prog/correlation/
756デフォルトの名無しさん
2015/02/19(木) 01:32:20.14ID:Q9g/vdpG 今更ながらなんだがフォートランとオクターブの組み合わせ最高だよな。
今まではfortran とgnuplot だったけど
今まではfortran とgnuplot だったけど
757デフォルトの名無しさん
2015/02/19(木) 21:39:16.47ID:8T3EPm25 お絵かきできんの?
758デフォルトの名無しさん
2015/02/21(土) 13:41:52.59ID:cqnG5WW8 オクターブってMATLABのパチモンだっけ?
最近もメンテされてるの?
最近もメンテされてるの?
759デフォルトの名無しさん
2015/02/21(土) 20:21:39.11ID:vWiUl97q760デフォルトの名無しさん
2015/02/22(日) 06:07:07.89ID:Dll6CUOh お絵かきとは2chのお絵かき機能のこと。
この板はできないのか?
この板はできないのか?
761デフォルトの名無しさん
2015/02/24(火) 12:10:45.71ID:dL6o6kyB 3/3から2chのapi始動するけど移住しなくても大丈夫かね
とりあえずdat廃止されるまではここはNavi2chで巡回するけど
とりあえずdat廃止されるまではここはNavi2chで巡回するけど
762デフォルトの名無しさん
2015/02/25(水) 18:07:19.77ID:q//8/n6w >>761
移住先の候補があるなら教えて欲しい。
移住先の候補があるなら教えて欲しい。
763デフォルトの名無しさん
2015/02/27(金) 19:13:57.57ID:8CupuJ11 とりあえずおーぷん2chにたてるだけたてといた
http://toro.open☆2ch.net/test/read.cgi/tech/1425031440/
(☆はNGワード対策)
何事もないことが一番だけどそんときは避難所代わりに使ってください 現に今人多杉状態だけど
ここ質問スレだけど他にfortranスレないしfortran全般に関する喋り場ならおーぷんでいいよね?転載嫌いとかアフィリエイト嫌いとかのひとがいたらすまんが
純粋な質問に関してはstackoverflow日本語版も始まったしそっちも賑わってほしいなあと思ってる(現在3件しかない)
本家stackoverflowの方はfortranに関してもかなりお世話になってるし
http://toro.open☆2ch.net/test/read.cgi/tech/1425031440/
(☆はNGワード対策)
何事もないことが一番だけどそんときは避難所代わりに使ってください 現に今人多杉状態だけど
ここ質問スレだけど他にfortranスレないしfortran全般に関する喋り場ならおーぷんでいいよね?転載嫌いとかアフィリエイト嫌いとかのひとがいたらすまんが
純粋な質問に関してはstackoverflow日本語版も始まったしそっちも賑わってほしいなあと思ってる(現在3件しかない)
本家stackoverflowの方はfortranに関してもかなりお世話になってるし
764デフォルトの名無しさん
2015/02/28(土) 14:09:46.29ID:fZ9CqkAf お若い方。
この世間に疎い爺に何が起きているのか3行くらいで教えてくれんかね?
カチュ〜シャが使えなくなってから専ブラともお別れじゃよアッハッハ
2chがたらこのものでなくなったらしい話は風のうわさに聞いたども、
移住とは何のことじゃね?
この世間に疎い爺に何が起きているのか3行くらいで教えてくれんかね?
カチュ〜シャが使えなくなってから専ブラともお別れじゃよアッハッハ
2chがたらこのものでなくなったらしい話は風のうわさに聞いたども、
移住とは何のことじゃね?
765デフォルトの名無しさん
2015/02/28(土) 14:12:07.22ID:ptkFuNoe >>763
おーぷん2chは知らなかった。何かあればそちらを使わせてもらいます。
stackoverflowの方はgoogleでの検索がヒットした時ぐらいしか行かなかったけれど、
日本語版はありがたいね。こちらも覗きに行きます。
おーぷん2chは知らなかった。何かあればそちらを使わせてもらいます。
stackoverflowの方はgoogleでの検索がヒットした時ぐらいしか行かなかったけれど、
日本語版はありがたいね。こちらも覗きに行きます。
766デフォルトの名無しさん
2015/02/28(土) 14:20:37.08ID:ptkFuNoe >>764
私もよく知らないが、現在の専ブラが使っているdatが廃止される。2chを専ブラで利用するためには
2chが提供するAPIが必須となるが、このAPIは2chから使用許諾を受ける必要がある。
よって今のようなオープンソースの専ブラの開発、提供は難しいようだ。
私もよく知らないが、現在の専ブラが使っているdatが廃止される。2chを専ブラで利用するためには
2chが提供するAPIが必須となるが、このAPIは2chから使用許諾を受ける必要がある。
よって今のようなオープンソースの専ブラの開発、提供は難しいようだ。
767デフォルトの名無しさん
2015/03/09(月) 22:22:14.04ID:XrkMx/p/768デフォルトの名無しさん
2015/03/09(月) 22:37:50.67ID:wBxXg+k6 おいおいTip集に分離されただけで記事は残ってるぞ
nagのトップページから見てみ
nagのトップページから見てみ
769デフォルトの名無しさん
2015/03/10(火) 23:05:49.08ID:Gi5LttGt Hey!Yo!Brother!
Fortran2003でOOPを勉強してみたいんだが、NAGしか入門する門は無いのかい?
ジーザスは狭き門より入れと言ったが、おじちゃんは滅びの道でもいいから
広き門から入って太い道を通りたいんだYo!
できればジーザスの言葉と同じアラム語かおじちゃんと同じ言葉の日本語で頼むよ!
敵性語はノンノン!
Fortran2003でOOPを勉強してみたいんだが、NAGしか入門する門は無いのかい?
ジーザスは狭き門より入れと言ったが、おじちゃんは滅びの道でもいいから
広き門から入って太い道を通りたいんだYo!
できればジーザスの言葉と同じアラム語かおじちゃんと同じ言葉の日本語で頼むよ!
敵性語はノンノン!
770デフォルトの名無しさん
2015/03/17(火) 02:57:32.45ID:qWCLUX9n771デフォルトの名無しさん
2015/03/21(土) 20:51:39.73ID:A7bsOdex プログラム中のx行目?y行目のソースコードを出力させるwrite文の書き方はないでしょうか
772デフォルトの名無しさん
2015/03/22(日) 10:00:02.71ID:upANbGQj >>771
ねーよ
ねーよ
773デフォルトの名無しさん
2015/03/22(日) 14:18:33.06ID:qEVJABmn >>771
プログラム単体では無理
単純に任意のファイルのx行目を表示するプログラムなら簡単
指定行まで読み飛ばして、指定行を十分長い文字列で読み込めば良い
それでソースファイルを読んで表示するならできるけど
ソースファイルは常に必要
プログラム単体では無理
単純に任意のファイルのx行目を表示するプログラムなら簡単
指定行まで読み飛ばして、指定行を十分長い文字列で読み込めば良い
それでソースファイルを読んで表示するならできるけど
ソースファイルは常に必要
774デフォルトの名無しさん
2015/03/22(日) 15:16:23.54ID:lBBw+fHF Quineが書きたいという話ではなくて?
775デフォルトの名無しさん
2015/03/22(日) 16:35:49.10ID:CWUz6yZb776デフォルトの名無しさん
2015/03/24(火) 21:45:10.36ID:Vm8bqf+W >>775
俺にもお礼言えよ、クソ野郎
俺にもお礼言えよ、クソ野郎
777デフォルトの名無しさん
2015/03/26(木) 23:15:58.87ID:Gl+r/2fs 3次元のスカラーデータを吐く、x,y,zのdoループをompにしようとしたんだけど、スタックオーバーフローだなんて怒られた
どーすんべ?
どーすんべ?
778デフォルトの名無しさん
2015/03/27(金) 02:28:15.56ID:agfznfe3 安直にはコンパイラ、リンカのオプションでスタック増やせ。
779デフォルトの名無しさん
2015/04/28(火) 17:28:05.66ID:iBflpoE2 MinGWのGCC4.9.2ののFORTRANで, -fcase-upperのようなオプションってありますかね?
昔のバージョンにはあったみたいなんですが, 現在のは削除されたようで.
昔のバージョンにはあったみたいなんですが, 現在のは削除されたようで.
780デフォルトの名無しさん
2015/05/10(日) 17:08:53.50ID:xJAFgSar Intel fortran無料版のライセンスが改定されて
オープンソースへの貢献を証明しなきゃならなくなってた
https://software.intel.com/en-us/qualify-for-free-software/opensourcecontributor
オープンソースへの貢献を証明しなきゃならなくなってた
https://software.intel.com/en-us/qualify-for-free-software/opensourcecontributor
781デフォルトの名無しさん
2015/05/11(月) 01:08:44.47ID:54EXtOYg Gfortran とIntel fortran のそれぞれの利点って何かね( ´ ▽ ` )ノ
782デフォルトの名無しさん
2015/05/11(月) 01:47:31.11ID:XHL5HbZn え、gfortranに利点なんかあるの?
ああ、うん、gccツールチェインの一部なのは便利だよね
ああ、うん、gccツールチェインの一部なのは便利だよね
783デフォルトの名無しさん
2015/05/11(月) 06:54:00.10ID:qOqdHGiK ハードウェアで二倍の性能出す金払うくらいだったら、Intelのコンパイラ買えよ。
ソフトには金出せないってどんだけ唯物論のアカなんだよw
ソフトには金出せないってどんだけ唯物論のアカなんだよw
784デフォルトの名無しさん
2015/05/11(月) 10:33:22.97ID:54EXtOYg >>782
なに、そんなレベル違いますのん?
なに、そんなレベル違いますのん?
785デフォルトの名無しさん
2015/05/13(水) 06:59:19.62ID:5ad/p9/H786デフォルトの名無しさん
2015/05/15(金) 02:52:46.16ID:3VlILQzP intelは自動並列化があるから中級者は使用を薦める
787デフォルトの名無しさん
2015/05/31(日) 00:46:49.58ID:z6xjuO2m このレス数からしてFortran使ってる人はほとんどいないのかな?
788デフォルトの名無しさん
2015/05/31(日) 01:15:28.56ID:dBkTICLM ここでの質問は学生がほとんどのように見える
一般人は使わないだろうから少ないのは確かだろうけど
調べたり相談できる人が多いんじゃない?
一般人は使わないだろうから少ないのは確かだろうけど
調べたり相談できる人が多いんじゃない?
789デフォルトの名無しさん
2015/05/31(日) 05:24:16.45ID:z6xjuO2m790デフォルトの名無しさん
2015/06/05(金) 00:40:30.28ID:rgF7y0m6 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になるはずなんですが。。。
ある配列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になるはずなんですが。。。
791デフォルトの名無しさん
2015/06/05(金) 01:52:18.65ID:rTO63fPn >>790
なんとなく初期化してない変数が引っかかっている気がする
minvalの動作不良を疑うならコンパイラとか環境を書こう
違うならソースをできるだけ書こう
長くてソース貼れないならこんな感じに晒すと検証が楽
https://ideone.com/JstGnQ
なんとなく初期化してない変数が引っかかっている気がする
minvalの動作不良を疑うならコンパイラとか環境を書こう
違うならソースをできるだけ書こう
長くてソース貼れないならこんな感じに晒すと検証が楽
https://ideone.com/JstGnQ
792デフォルトの名無しさん
2015/06/05(金) 23:13:40.04ID:zCKBsI7m >>790
単精度を入れているのに倍精度で値が返ってきているのが気になる。
なんか倍精度と単精度をまぜこぜにしているか、コンパイラが間違っていてまぜこぜにしている。
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
単精度を入れているのに倍精度で値が返ってきているのが気になる。
なんか倍精度と単精度をまぜこぜにしているか、コンパイラが間違っていてまぜこぜにしている。
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
793デフォルトの名無しさん
2015/06/06(土) 00:34:55.86ID:TK6bZDgw >>792
ideoneってfortranいけるのかw
ideoneってfortranいけるのかw
794デフォルトの名無しさん
2015/06/06(土) 01:24:14.49ID:pgwiShP2 変数に値が入ってるかどうかの判断ってどうしてる?ポインタとか使わずになんかNull かどうか?っての判断できんのかね?
ちなみにgfortran 4.2 でDebian 8.0 64bit版での話なんだが。
ちなみにgfortran 4.2 でDebian 8.0 64bit版での話なんだが。
795デフォルトの名無しさん
2015/06/06(土) 02:41:06.93ID:cFX9ZRwg796デフォルトの名無しさん
2015/06/06(土) 05:09:32.95ID:pgwiShP2797デフォルトの名無しさん
2015/06/06(土) 12:21:31.78ID:cFX9ZRwg798デフォルトの名無しさん
2015/06/06(土) 19:54:52.83ID:pgwiShP2799デフォルトの名無しさん
2015/06/09(火) 15:20:38.21ID:t89alswU まったくの初心者なのですが質問失礼します
f77形式で書かれたプログラムをf90形式に変換した所plplotという描画用プログラムがエラーだらけで動きません
具体的には、「関数plwid に対する定義されてない参照です」のようなメッセージがいっぱいでてきます
どうしたらよいのか教えていただけませんか?お願いします
f77形式で書かれたプログラムをf90形式に変換した所plplotという描画用プログラムがエラーだらけで動きません
具体的には、「関数plwid に対する定義されてない参照です」のようなメッセージがいっぱいでてきます
どうしたらよいのか教えていただけませんか?お願いします
800デフォルトの名無しさん
2015/06/09(火) 18:47:39.82ID:t89alswU >>791すみません補足します
OSはLinux beanでコンパイラはgfortranです
OSはLinux beanでコンパイラはgfortranです
801デフォルトの名無しさん
2015/06/09(火) 20:02:28.27ID:PG87IvKa802デフォルトの名無しさん
2015/06/14(日) 00:09:43.12ID:1ASDFy3f Fortran未だに使ってる人いますか?
やっぱり昔に構築しちゃった遺産をそのまま使う方ばかりですか?
やっぱり昔に構築しちゃった遺産をそのまま使う方ばかりですか?
803デフォルトの名無しさん
2015/06/14(日) 00:15:12.75ID:oyhhJPji 天文学の計算で有効数字が16桁以上で計算したいものが
あり、C/C++では桁数の関係で微妙なので、Fortran
の4倍長精度を使って計算しています。
64ビットあるいは80ビットでなくて128ビット
で計算できるのが有りがたいです。
あり、C/C++では桁数の関係で微妙なので、Fortran
の4倍長精度を使って計算しています。
64ビットあるいは80ビットでなくて128ビット
で計算できるのが有りがたいです。
804デフォルトの名無しさん
2015/06/14(日) 02:42:35.24ID:1ASDFy3f805デフォルトの名無しさん
2015/06/14(日) 16:29:35.57ID:oyhhJPji >>803
補足します。
NASAが太陽・月・冥王星を含む惑星の位置を計算
するための基礎データを発表しているのですが、
そのデータがたとえば
0.149597870691000015+09
という有効数字18桁で当れられて
います。
この一定間隔で与えられたデータを数値積分して
位置を計算する必要があります。
C++などのlong doubleでは、有効数字が16桁程度
なので、fortranの4倍長kind(16)を指定すると、
三角関数も4倍精度で計算でき、安心できるわけです。
補足します。
NASAが太陽・月・冥王星を含む惑星の位置を計算
するための基礎データを発表しているのですが、
そのデータがたとえば
0.149597870691000015+09
という有効数字18桁で当れられて
います。
この一定間隔で与えられたデータを数値積分して
位置を計算する必要があります。
C++などのlong doubleでは、有効数字が16桁程度
なので、fortranの4倍長kind(16)を指定すると、
三角関数も4倍精度で計算でき、安心できるわけです。
806デフォルトの名無しさん
2015/06/17(水) 10:18:52.06ID:ti+IkGPz ソフトウェアに興味なくて、ほとんどプログラムやったことない学生が、
専門分野の研究に必要になってから勉強を始めて、曲りなりに必要なプログラム
書けるようになるのが早いのはやっぱFortranだな。
余計なことを覚えなくていいし、行列の添え字とかが(1から始まる、カラムメジャー等)、
教科書・文献などの数学の常識に近い点が良いらしい。
式とプログラムで表記が同じである必要は全くないが、
ある程度は形式を保っていないと焦点がボケてダメなようだ。
ソフトウェアの板でいうと叱られるかもしれないが、
時間かけるならプログラム言語の勉強するより専門分野の勉強する方がいい。
専門分野の研究に必要になってから勉強を始めて、曲りなりに必要なプログラム
書けるようになるのが早いのはやっぱFortranだな。
余計なことを覚えなくていいし、行列の添え字とかが(1から始まる、カラムメジャー等)、
教科書・文献などの数学の常識に近い点が良いらしい。
式とプログラムで表記が同じである必要は全くないが、
ある程度は形式を保っていないと焦点がボケてダメなようだ。
ソフトウェアの板でいうと叱られるかもしれないが、
時間かけるならプログラム言語の勉強するより専門分野の勉強する方がいい。
807デフォルトの名無しさん
2015/06/19(金) 21:01:11.17ID:DScX6l8h maxvalを使って上から2番めに大きいものなど抽出したりできませんよね?
808デフォルトの名無しさん
2015/06/19(金) 22:45:09.43ID:JdldsSpH 挑発されてるようで不快だが
配列に同じ値がないか、重複を排除した2番目に大きい値
(例えば配列a=(/1, 2, 5, 3, 5/)なら3)を返してほしいなら
maxval(a, mask = a < maxval(a))でいい
配列を降順に並べた時の2番目の値(上の例なら5)を返してほしいなら
maxlocで最初の最大値の位置を特定して、それを除外した配列のmaxvalをとる
配列に同じ値がないか、重複を排除した2番目に大きい値
(例えば配列a=(/1, 2, 5, 3, 5/)なら3)を返してほしいなら
maxval(a, mask = a < maxval(a))でいい
配列を降順に並べた時の2番目の値(上の例なら5)を返してほしいなら
maxlocで最初の最大値の位置を特定して、それを除外した配列のmaxvalをとる
809デフォルトの名無しさん
2015/06/19(金) 23:35:54.73ID:DScX6l8h >>808
ありがとうございます。書き方悪かったですすいません・・
今のプログラムがスマートに書るようになりそうで大変助かりました
もしかすると、3番目とかなら
b=maxval(a, mask = a < maxval(a)) !b=2番目に大きい
c=maxval(a,mask=a<b) !c=3番目に大きい
で良いでしょうか、試してみます
ありがとうございます。書き方悪かったですすいません・・
今のプログラムがスマートに書るようになりそうで大変助かりました
もしかすると、3番目とかなら
b=maxval(a, mask = a < maxval(a)) !b=2番目に大きい
c=maxval(a,mask=a<b) !c=3番目に大きい
で良いでしょうか、試してみます
810デフォルトの名無しさん
2015/06/22(月) 00:36:18.06ID:GDms9OMt イケメンすぎるwwwwwwwwww
811デフォルトの名無しさん
2015/07/04(土) 15:09:30.71ID:s4aH+BtB a(i,j)
b(j,k)という変数があって、
maxval(a(i,j+5:j+10)) - b(j,k)
という計算をしたいのですが、結果がおかしくなります。
もしかするとmaxvalを使って四則演算するときは配列が同じものを使用しないといけないのでしょうか
b(j,k)という変数があって、
maxval(a(i,j+5:j+10)) - b(j,k)
という計算をしたいのですが、結果がおかしくなります。
もしかするとmaxvalを使って四則演算するときは配列が同じものを使用しないといけないのでしょうか
812デフォルトの名無しさん
2015/07/04(土) 15:23:40.44ID:s4aH+BtB すいませんプログラムミスのだけでした
813デフォルトの名無しさん
2015/07/10(金) 19:11:26.54ID:/GzszqMd 次のようなプログラムを試しに走らせたところ、
ファイルの作成には成功するのですがファイルの読み込みでセグメントエラーが出ます。
原因が分かりません、教えてもらえないでしょうか。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
ファイルの作成には成功するのですがファイルの読み込みでセグメントエラーが出ます。
原因が分かりません、教えてもらえないでしょうか。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
814デフォルトの名無しさん
2015/07/10(金) 21:33:48.54ID:/Va7ypH/815デフォルトの名無しさん
2015/07/10(金) 21:48:52.27ID:/GzszqMd 次のエラーが出ました。
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
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
816デフォルトの名無しさん
2015/07/11(土) 01:01:00.88ID:WfA4pvIG Window7,64bitのgfortranを使ってコンパイル実行して
みましたが,
100 200 300
400
500 600
と出力されて無事終了しました。
ちなみに,gfortran64のVersionは4.9.2です。
みましたが,
100 200 300
400
500 600
と出力されて無事終了しました。
ちなみに,gfortran64のVersionは4.9.2です。
817デフォルトの名無しさん
2015/07/11(土) 13:28:32.70ID:RZSlcw3F ソフトのバージョンは
gfortra,64bit, ver 5.1.0 のおそらく最新版です。
とりあえず別のコンパイラを試してみます。
gfortra,64bit, ver 5.1.0 のおそらく最新版です。
とりあえず別のコンパイラを試してみます。
818デフォルトの名無しさん
2015/07/11(土) 15:08:28.52ID:RZSlcw3F FTN95 でうまくいきました
やっぱり gfortran ってクソだわ
やっぱり gfortran ってクソだわ
819デフォルトの名無しさん
2015/07/12(日) 01:05:05.43ID:yuQPCUFW ファイルggshoki.f90に、800成分の配列を返すサブルーチンggshokiを書き、他のファイルと一緒にコンパイルしたところ、
ggshoki.f90:1:20:
subroutine ggshoki(Z(800))
1
Error: Unexpected junk in formal argument list at (1)
というエラーが出てしまいました。
どう直せばいいのでしょうか。アドバイスお願いします。
ggshoki.f90:1:20:
subroutine ggshoki(Z(800))
1
Error: Unexpected junk in formal argument list at (1)
というエラーが出てしまいました。
どう直せばいいのでしょうか。アドバイスお願いします。
820デフォルトの名無しさん
2015/07/12(日) 01:10:26.47ID:yuQPCUFW 上げてしまいました、すみません。
OS:Windows8(64bit)
コンパイラ:gfortran
バージョン:fortran90
です。
OS:Windows8(64bit)
コンパイラ:gfortran
バージョン:fortran90
です。
821デフォルトの名無しさん
2015/07/12(日) 01:14:54.68ID:yuQPCUFW 連レスすみません。
バージョンは5.1.0です。
バージョンは5.1.0です。
822デフォルトの名無しさん
2015/07/12(日) 01:54:09.24ID:z4R5SLxl >>819
subroutineの内部で宣言するなら書き方が違うはず
引数で宣言するより別の行で宣言した方が見やすくない?
とりあえず自分はこんな感じで書く
https://ideone.com/HCzWB6
subroutineの内部で宣言するなら書き方が違うはず
引数で宣言するより別の行で宣言した方が見やすくない?
とりあえず自分はこんな感じで書く
https://ideone.com/HCzWB6
823デフォルトの名無しさん
2015/07/15(水) 01:28:37.71ID:yskKzL3L >>822
リンク先のように書いたらうまくいきました。
自分のプログラムの他の部分も確認したところ、配列の書き方が全て間違っていました(配列A(1:N)をA(N)などと書いていました)。
ありがとうございました。
リンク先のように書いたらうまくいきました。
自分のプログラムの他の部分も確認したところ、配列の書き方が全て間違っていました(配列A(1:N)をA(N)などと書いていました)。
ありがとうございました。
824デフォルトの名無しさん
2015/07/28(火) 11:53:11.24ID:J4RVztBC 教えてください。
サブルーチンに渡された配列引数2つが同一かどうか
(値が同じかどうかではなくて、値を格納するアドレスが同じかどうか)
を確認するすべはありますでしょうか…?
ポインタとか使えるのでしょうかね?よく分かっていません。
サブルーチンに渡された配列引数2つが同一かどうか
(値が同じかどうかではなくて、値を格納するアドレスが同じかどうか)
を確認するすべはありますでしょうか…?
ポインタとか使えるのでしょうかね?よく分かっていません。
825デフォルトの名無しさん
2015/07/28(火) 12:08:17.55ID:J4RVztBC 自己解決してしまいました…
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
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
826デフォルトの名無しさん
2015/07/28(火) 12:26:18.89ID:J4RVztBC いや、すみません間違ってました。値を比較してるだけみたいです。
どうしたらいいんだ。
(日記みたいになってしまってですまんです)
どうしたらいいんだ。
(日記みたいになってしまってですまんです)
827デフォルトの名無しさん
2015/07/29(水) 09:56:48.14ID:2BaiQKnz 最近出た『FORTRANハンドブック』
買ったほうがいいかな?
買ったほうがいいかな?
828デフォルトの名無しさん
2015/07/29(水) 15:03:19.81ID:PIi6Yh3/ >>826
コンパイラは何?
コンパイラは何?
829デフォルトの名無しさん
2015/07/29(水) 23:16:07.78ID:USyoWCFT ifortです。associated(pointer,target) で行けそうなんですが、
targetの変数にopitional属性がついていて… ><という状況です
targetの変数にopitional属性がついていて… ><という状況です
830デフォルトの名無しさん
2015/07/30(木) 00:48:36.88ID:5OMMXfec gfortranならlocでアドレス取得できるの確認した
なんか独自拡張みたいだが、ifortにもあるよね
なんか独自拡張みたいだが、ifortにもあるよね
831デフォルトの名無しさん
2015/08/02(日) 15:34:23.65ID:Gc5k9GMO module内のcontainsのところに書いているfunctionをincというフォルダのsample.f90にまるごと持って行き、
include 'incl/sample.f90'
としたのですが、moduleに書いていた時はは参照できていた変数が
定義されていない参照 となりコンパイルできません。
functionまるごともっていくとかやったらいけないものなのでしょうか?
include 'incl/sample.f90'
としたのですが、moduleに書いていた時はは参照できていた変数が
定義されていない参照 となりコンパイルできません。
functionまるごともっていくとかやったらいけないものなのでしょうか?
832デフォルトの名無しさん
2015/08/02(日) 17:13:03.49ID:5pC+KESf >>831
内部関数を別ファイルにするなら注意が必要
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
内部関数を別ファイルにするなら注意が必要
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
833デフォルトの名無しさん
2015/08/02(日) 20:38:11.00ID:Gc5k9GMO >>832
詳しく教えて頂いてありがとうございます。試してみようと思います。
includeってもう非推奨なんですね。代替はmoduleで分割とかできるのかな
include以外のやり方も考えてみます
詳しく教えて頂いてありがとうございます。試してみようと思います。
includeってもう非推奨なんですね。代替はmoduleで分割とかできるのかな
include以外のやり方も考えてみます
834デフォルトの名無しさん
2015/08/05(水) 16:55:43.17ID:OhKwnQSp835デフォルトの名無しさん
2015/08/16(日) 01:33:05.77ID:ZKNwH6b8 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.
符号がついていないため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.
836デフォルトの名無しさん
2015/08/16(日) 01:53:24.79ID:mdNdQhdt837デフォルトの名無しさん
2015/08/16(日) 03:10:40.47ID:ZKNwH6b8838デフォルトの名無しさん
2015/08/16(日) 08:57:02.36ID:nCIMfI1D839デフォルトの名無しさん
2015/08/16(日) 09:08:04.74ID:ZKNwH6b8840デフォルトの名無しさん
2015/08/16(日) 12:29:13.36ID:nCIMfI1D >>869
ただしくは、算術IF文というものです。あるサイトの解説です
古い書き方に算術IFというものがあります。 この書き方はFortranでは廃止予定機能ですが古いプログラムには見かけられる書き方です。
算術IF文は、与えた式が0より小さい場合に最初の文番号へ、 0の場合は2番目の文番号へ、 0よりも大きい場合には3番目の文番号にジャンプします。
if ( 式 ) 文番号1, 文番号2, 文番号3
例)
i = -1
if (i) 100, 200, 300 ! 100へジャンプします
ただしくは、算術IF文というものです。あるサイトの解説です
古い書き方に算術IFというものがあります。 この書き方はFortranでは廃止予定機能ですが古いプログラムには見かけられる書き方です。
算術IF文は、与えた式が0より小さい場合に最初の文番号へ、 0の場合は2番目の文番号へ、 0よりも大きい場合には3番目の文番号にジャンプします。
if ( 式 ) 文番号1, 文番号2, 文番号3
例)
i = -1
if (i) 100, 200, 300 ! 100へジャンプします
841デフォルトの名無しさん
2015/08/16(日) 21:04:42.30ID:mdNdQhdt 古文読解みたいなもんよ。
新たに使うことは無いが、昔のプログラム読む為の教養みたいなもん?
アセンブラから進化したと思えば、まぁこんな命令ありがち感はある。
新たに使うことは無いが、昔のプログラム読む為の教養みたいなもん?
アセンブラから進化したと思えば、まぁこんな命令ありがち感はある。
842デフォルトの名無しさん
2015/08/24(月) 05:54:40.65ID:lgtNqCAf ある参考書にあるプログラム例を映したのですが、実行するとエラーが出ます。内容が外部ファイルへの出力関係なので早急に解決したいのでよろしくお願いします。
プログラム
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
よろしくお願いします
プログラム
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
よろしくお願いします
843デフォルトの名無しさん
2015/08/24(月) 06:07:47.38ID:lgtNqCAf 申し訳ありません。確認したところ
コンパイラはtdm64-gcc-4.6.1です。
コンパイラはtdm64-gcc-4.6.1です。
844デフォルトの名無しさん
2015/08/24(月) 07:17:38.92ID:lgtNqCAf 再び申し訳ありません。
gfortranのverを落としたら普通にできました。何度もすみませんでした。
gfortranのverを落としたら普通にできました。何度もすみませんでした。
845デフォルトの名無しさん
2015/10/14(水) 21:51:47.29ID:S/4UaJI2 intelコンパイラのDAALをFortranから
なにかしらの形で呼び出してうまくいった方いませんか?
なにかしらの形で呼び出してうまくいった方いませんか?
846デフォルトの名無しさん
2015/11/08(日) 17:44:21.58ID:jBmnCoB4 fortranで簡単なguiウィンドウ作れたりしますか?
ウィンドウがあってこのボタンを押すと〜〜のサブルーチン実行のような・・・
ウィンドウがあってこのボタンを押すと〜〜のサブルーチン実行のような・・・
847デフォルトの名無しさん
2015/11/08(日) 18:57:35.01ID:8suWMXlm848デフォルトの名無しさん
2015/11/09(月) 22:25:56.92ID:oiX/fj8U849デフォルトの名無しさん
2015/12/15(火) 21:50:10.22ID:CN0jNpr8 基本的な質問かもしれませんがfunctionとsubroutineで作るのってどう切り分けたらよいのですか?
850デフォルトの名無しさん
2015/12/15(火) 23:58:59.22ID:8+9MOK5i >>849
functionを使うのは、返値が一つと自明な(かつ明示したい)ときだけかな。
functionを使うのは、返値が一つと自明な(かつ明示したい)ときだけかな。
851デフォルトの名無しさん
2015/12/16(水) 00:26:30.43ID:dxIuSVrg852デフォルトの名無しさん
2015/12/16(水) 00:28:34.56ID:dxIuSVrg 例えばファンクションのほうがその度に呼び出すために計算速度は遅くなるとかありませんかね・・?
853デフォルトの名無しさん
2015/12/16(水) 02:24:06.06ID:cuafR5Si 差は感じたことないな
気になるなら簡単なテストプログラム作ってみたら?
気になるなら簡単なテストプログラム作ってみたら?
854デフォルトの名無しさん
2015/12/16(水) 06:34:20.84ID:qB4UYIzV 中身が分からないunformattedで出力されたファイルを読むにはどうすればいいですか?
855デフォルトの名無しさん
2015/12/16(水) 22:57:19.85ID:a/dQTwEW ACCESS='STREAM' でオープンして嫁 詳しくはマニュアル検索検索
856デフォルトの名無しさん
2015/12/16(水) 23:02:21.81ID:a/dQTwEW >>849
function は副作用(PURE の時)がないとき、それ以外なら SUBROUTINE が基本かな。
コンパイラの最適化の観点から、数学的な意味での関数になっているときに使うのがいい。
function は副作用(PURE の時)がないとき、それ以外なら SUBROUTINE が基本かな。
コンパイラの最適化の観点から、数学的な意味での関数になっているときに使うのがいい。
857デフォルトの名無しさん
2015/12/25(金) 14:17:27.29ID:H3s+gts8 今二分法のプログラム書いているんだけど、うまく収束しなくて困ってるのでここで質問させてください
ある区間[a, b] の間に解があるとして、f(xsol) =0となる点を見つけようとしてます。
関数f(x) は数値計算によってしか求められない(xの多項式では記述できない)とします。
x -> xsol に近づいていると思うのですがどうしても0 に漸近しません。 収束条件は 10^{-1}程度の荒いものでも収束しません。
考えられる原因の1つとして情報桁落ちかな?と思いましたが回避する方法はあるでしょうか?
ある程度計算を進めると、区間[x1, x2]において、その中点 (x1+x2)/2の値が一定となってしまいます。
ある区間[a, b] の間に解があるとして、f(xsol) =0となる点を見つけようとしてます。
関数f(x) は数値計算によってしか求められない(xの多項式では記述できない)とします。
x -> xsol に近づいていると思うのですがどうしても0 に漸近しません。 収束条件は 10^{-1}程度の荒いものでも収束しません。
考えられる原因の1つとして情報桁落ちかな?と思いましたが回避する方法はあるでしょうか?
ある程度計算を進めると、区間[x1, x2]において、その中点 (x1+x2)/2の値が一定となってしまいます。
858デフォルトの名無しさん
2015/12/25(金) 14:24:09.90ID:H3s+gts8859デフォルトの名無しさん
2015/12/25(金) 16:39:31.63ID:em+Cn0F1860デフォルトの名無しさん
2015/12/25(金) 16:47:13.93ID:VJyAJ/uW861デフォルトの名無しさん
2015/12/25(金) 19:21:54.92ID:H3s+gts8862デフォルトの名無しさん
2015/12/25(金) 19:22:26.63ID:H3s+gts8 >>861
すみません、16倍精度の間違えです
すみません、16倍精度の間違えです
863デフォルトの名無しさん
2015/12/26(土) 01:22:24.79ID:ybGnykyB >>859,861
ちょーーー!!
8倍精度とか16倍精度と違うから!
普通はバイト数だから8で倍精度、16で4倍精度。
まぁ数値はベンダー依存で規定されていないから、あんたらのコンパイラが
8倍精度や16倍精度なのかもしれないがさw
そもそも二分法の場合必ず半分になるんだから、まともなら x1=x2 にならないはずがない.
ならないとすればプログラムが間違っているか、関数値の正負が x1 と x2 の間で
複数回反転しているかのどっちかだろ。つまり与えた区間の初期値が間違っている。
まずグラフを書かせろよ。
適当に数値いれて手で方眼紙にプロットしろ。話はそれからだ。
ちょーーー!!
8倍精度とか16倍精度と違うから!
普通はバイト数だから8で倍精度、16で4倍精度。
まぁ数値はベンダー依存で規定されていないから、あんたらのコンパイラが
8倍精度や16倍精度なのかもしれないがさw
そもそも二分法の場合必ず半分になるんだから、まともなら x1=x2 にならないはずがない.
ならないとすればプログラムが間違っているか、関数値の正負が x1 と x2 の間で
複数回反転しているかのどっちかだろ。つまり与えた区間の初期値が間違っている。
まずグラフを書かせろよ。
適当に数値いれて手で方眼紙にプロットしろ。話はそれからだ。
864デフォルトの名無しさん
2015/12/27(日) 14:58:58.66ID:j4SegU7G >>857
関数f(x)がもともと収束しない形である可能性はないのか?
関数f(x)がもともと収束しない形である可能性はないのか?
865デフォルトの名無しさん
2015/12/27(日) 19:35:54.52ID:yJZ4hzCz >>863
すんません、完璧勘違いしてました!
やはり4倍精度で正しかったですm(_ _)m
勉強になりましたm(_ _)m
>そもそも二分法の場合必ず半分になるんだから、まともなら x1=x2 にならないはずがない.
>ならないとすればプログラムが間違っているか、関数値の正負が x1 と x2 の間で
>複数回反転しているかのどっちかだろ。つまり与えた区間の初期値が間違っている。
初期値問題ですか。。。。
>まずグラフを書かせろよ。
>適当に数値いれて手で方眼紙にプロットしろ。話はそれからだ。
グラフなんですが、f(x)が非線形なので数値計算のみでしかもとまらないです。
すんません、完璧勘違いしてました!
やはり4倍精度で正しかったですm(_ _)m
勉強になりましたm(_ _)m
>そもそも二分法の場合必ず半分になるんだから、まともなら x1=x2 にならないはずがない.
>ならないとすればプログラムが間違っているか、関数値の正負が x1 と x2 の間で
>複数回反転しているかのどっちかだろ。つまり与えた区間の初期値が間違っている。
初期値問題ですか。。。。
>まずグラフを書かせろよ。
>適当に数値いれて手で方眼紙にプロットしろ。話はそれからだ。
グラフなんですが、f(x)が非線形なので数値計算のみでしかもとまらないです。
866デフォルトの名無しさん
2015/12/27(日) 23:19:57.50ID:XJXVRFXp >>865
沢山の点で計算してEXCEL等でプロットすればいいのでは。
沢山の点で計算してEXCEL等でプロットすればいいのでは。
867デフォルトの名無しさん
2015/12/28(月) 02:36:39.69ID:lnQX/VRo >>865
まずは4次のルングクッタでグラフ描いてみてはどうだ?
まずは4次のルングクッタでグラフ描いてみてはどうだ?
868デフォルトの名無しさん
2016/01/09(土) 11:18:03.65ID:i1gHiPMA implicit な〜ん(笑)
869デフォルトの名無しさん
2016/01/18(月) 02:16:26.16ID:trNoq0XT fortranだと変数がからかどうか判定できないんだっけ?
空だと 0.00が代入されんのかな
空だと 0.00が代入されんのかな
870デフォルトの名無しさん
2016/01/18(月) 15:21:34.93ID:1WswQHMD 空ってなんだ? 初期化されていないということか?
Fortranでは初期化されていない変数の値は不定だぞ。ごみが入っている。
0.0は初期か忘れに気づきにくいから、むちゃくちゃな値が入っていたほうが親切。
allocatableがallloctaeされているかいないかならallocated関数かな。
Fortranでは初期化されていない変数の値は不定だぞ。ごみが入っている。
0.0は初期か忘れに気づきにくいから、むちゃくちゃな値が入っていたほうが親切。
allocatableがallloctaeされているかいないかならallocated関数かな。
871デフォルトの名無しさん
2016/01/19(火) 00:06:44.55ID:yHbL6fBI >>870
e-307くらいが入る
e-307くらいが入る
872デフォルトの名無しさん
2016/01/19(火) 01:44:03.17ID:3ZSQATy/ >>870
allocatable で配列宣言してないとそれ使えないよね?
例えば、
program main
implicit none
double precision:: a, stat
do
read(20,*,iostat=stat) a
if(stat<0)exit
enddo
rnd program main
fort.20 ファイルの中身が空(null)だとしたら変数aにはゴミが入るわけよね?
変数aに何の数値も代入されていないと自動的に確認するためにはどんなコーディングが必要だろう、この場合。
allocatable で配列宣言してないとそれ使えないよね?
例えば、
program main
implicit none
double precision:: a, stat
do
read(20,*,iostat=stat) a
if(stat<0)exit
enddo
rnd program main
fort.20 ファイルの中身が空(null)だとしたら変数aにはゴミが入るわけよね?
変数aに何の数値も代入されていないと自動的に確認するためにはどんなコーディングが必要だろう、この場合。
873デフォルトの名無しさん
2016/01/19(火) 06:58:03.23ID:MMA3M4fE Fortranのレベルでどうこうではなく、Undefined Behavior Sanitizerでも使えばいいんじゃないの
874デフォルトの名無しさん
2016/01/19(火) 09:26:07.32ID:3ZSQATy/875デフォルトの名無しさん
2016/01/20(水) 00:17:10.04ID:0BkO9wkB いまさらfortranで機械学習とかディープラーニングライブラリ作って公開する猛者いませんか?
いたら面白いのになあ
いたら面白いのになあ
876デフォルトの名無しさん
2016/01/22(金) 21:17:23.35ID:SxQo3Wt7 iMacだがLAPACKのコンパイルが上手くいかない。MacBookAirの時は上手く言ったのだが誰か教えてくれないか?
877デフォルトの名無しさん
2016/01/22(金) 22:42:37.27ID:rL4grHGE >>872
Fortran2003 ならスカラーの allocatable もある。
I/O では無理だが、例えば Function からの代入ならば、希望のことはできる。
スカラーへの allocatable 変数が返り値の Function からの自動再割り付けで、
右辺の関数の返り値が空なら、左辺の allocatable スカラーが allocate されないし、
値をもっていれば NULL だろうとallocate されるので allocataed 関数を使えば判別できると思う。
Fortran2003 ならスカラーの allocatable もある。
I/O では無理だが、例えば Function からの代入ならば、希望のことはできる。
スカラーへの allocatable 変数が返り値の Function からの自動再割り付けで、
右辺の関数の返り値が空なら、左辺の allocatable スカラーが allocate されないし、
値をもっていれば NULL だろうとallocate されるので allocataed 関数を使えば判別できると思う。
878デフォルトの名無しさん
2016/02/05(金) 09:02:45.47ID:wvmc5Sx8 Fortranって何を使ってデバッグするんでしょうか
879デフォルトの名無しさん
2016/02/08(月) 00:08:26.47ID:wknTPR3t >>878
dddとかやん?
dddとかやん?
880デフォルトの名無しさん
2016/02/10(水) 08:13:25.94ID:ZRcL4yE9881デフォルトの名無しさん
2016/02/12(金) 04:12:40.41ID:vptI0fCP 数値計算するときの刻み幅の決め方が難しすぎるなぁ
等幅だとものすごい配列使うからメモリがオーバーフローするしなんかいい方法ないすかね?
てか、刻み幅に関する詳しい本とかないのかなぁ
等幅だとものすごい配列使うからメモリがオーバーフローするしなんかいい方法ないすかね?
てか、刻み幅に関する詳しい本とかないのかなぁ
882デフォルトの名無しさん
2016/02/12(金) 08:22:40.80ID:1ZkcdkFj >>881
森口繁一先生の
『計算数学夜話』
に、「刻み幅の自動選択」
という話が掲載されていたはずです。
変化がなだらかな区間は刻み幅を広く、
変化が急な区間は刻み幅を狭くするのを
自動化するという話です。
森口繁一先生の
『計算数学夜話』
に、「刻み幅の自動選択」
という話が掲載されていたはずです。
変化がなだらかな区間は刻み幅を広く、
変化が急な区間は刻み幅を狭くするのを
自動化するという話です。
883デフォルトの名無しさん
2016/02/14(日) 06:02:56.78ID:5/5WMEda884デフォルトの名無しさん
2016/02/15(月) 02:04:22.84ID:sHvN+vmN 桁の大きなものと桁の小さなものが混じった数値計算をするとき、規格化するのは常識だと思うんだが。
ある変数の取りうる範囲が極端に振れる場合(例えば、1d-20 < x < 1d8) だとどうすりゃいいんやろか。
ある変数の取りうる範囲が極端に振れる場合(例えば、1d-20 < x < 1d8) だとどうすりゃいいんやろか。
885デフォルトの名無しさん
2016/02/17(水) 11:45:41.36ID:8sdmbRj5 対数を取れw
886デフォルトの名無しさん
2016/02/17(水) 12:17:59.53ID:IDaBzq+u887デフォルトの名無しさん
2016/02/17(水) 12:40:39.87ID:5aqj+faD logかました状態だと値の範囲が狭くなるというだけじゃ?
888デフォルトの名無しさん
2016/02/17(水) 18:55:07.86ID:NfIkV94M そもそも問題がわからないから答えようがないな。
たとえば被積分関数が 1d-20 から 1d8 まで振れる場合は小さい値はどうでもいいし。
たとえば被積分関数が 1d-20 から 1d8 まで振れる場合は小さい値はどうでもいいし。
889デフォルトの名無しさん
2016/04/25(月) 20:15:29.39ID:ABiBIEuQ 一次元ポアソン方程式
d^2φ/dx^2=cos(x) (0≦x<2π)
を解くプログラミングがわかりません。差分法を使えばいいというのはなんとなくわかったのですが、差分法がいまいちよくわかっていないです。
どなたかご教授ねがえないでしょうか。
d^2φ/dx^2=cos(x) (0≦x<2π)
を解くプログラミングがわかりません。差分法を使えばいいというのはなんとなくわかったのですが、差分法がいまいちよくわかっていないです。
どなたかご教授ねがえないでしょうか。
890デフォルトの名無しさん
2016/04/25(月) 21:42:21.21ID:0jtmrtsy ネットでも本でもいいから微分方程式の数値解法について調べること。
いろんな計算方法があるし、特定の言語にこだわる必要もない。
そういえば数値計算のスレって今ないよね。
いろんな計算方法があるし、特定の言語にこだわる必要もない。
そういえば数値計算のスレって今ないよね。
891デフォルトの名無しさん
2016/04/25(月) 21:53:17.04ID:2LxfGMmK >>889
そもそもその式は解析的に解ける。
そもそもその式は解析的に解ける。
892デフォルトの名無しさん
2016/04/25(月) 21:53:33.26ID:2LxfGMmK >>890
欲しいなそんなスレ
欲しいなそんなスレ
893デフォルトの名無しさん
2016/05/01(日) 14:42:40.23ID:tKi6j9CT 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
@
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
@
894デフォルトの名無しさん
2016/05/01(日) 18:07:45.37ID:XA7YY+e1 言語はなんでも大丈夫ってレベルじゃねーぞ
895デフォルトの名無しさん
2016/05/17(火) 20:55:20.04ID:MgCDmrcL Fortran2015の調子はどうだい?
896デフォルトの名無しさん
2016/05/21(土) 18:12:16.63ID:h3OgqWhP ChromebookでFortranって動かせる?
897デフォルトの名無しさん
2016/07/18(月) 20:31:12.72ID:apSB7g7B898デフォルトの名無しさん
2016/07/19(火) 14:21:12.91ID:qfWdnT3p >>897
逝ってよし
逝ってよし
900デフォルトの名無しさん
2016/07/19(火) 22:17:37.41ID:WRFubhA/ >>898
オマエモナー
オマエモナー
901デフォルトの名無しさん
2016/07/19(火) 22:18:11.36ID:WRFubhA/ >>897
自己解決しますた
自己解決しますた
902デフォルトの名無しさん
2016/07/28(木) 19:47:05.10ID:nObYn5cT 0度〜90度まで30度間隔で正弦と余弦を出力する。但し書式は整数5桁、関数値は10桁で小数点以下6桁とする。
下記でコンパイラしても上手くいかないのですがどこをどのようにすれば宜しいでしょうか?
http://i.imgur.com/xwAoCXH.jpg
下記でコンパイラしても上手くいかないのですがどこをどのようにすれば宜しいでしょうか?
http://i.imgur.com/xwAoCXH.jpg
903デフォルトの名無しさん
2016/07/28(木) 22:14:51.73ID:E8ct0ihN 古風な書き方だな
大学の講義か何かで習ってるの?
k が正しく表示されない点については、フォーマット文の f2.0 を i5 に書き換えたらどう?
どの段階でどのように失敗するのか書いてくれるとチェックしやすい
あと、プログラムをコピペしてくれるとこちらが入力する手間が省ける
大学の講義か何かで習ってるの?
k が正しく表示されない点については、フォーマット文の f2.0 を i5 に書き換えたらどう?
どの段階でどのように失敗するのか書いてくれるとチェックしやすい
あと、プログラムをコピペしてくれるとこちらが入力する手間が省ける
904デフォルトの名無しさん
2016/07/29(金) 07:39:07.85ID:1zITvd9X >903
確かにFortran IVみたいな書き方ですね。
フォーマット文を
100 format ( i5,2f10.6)
に替えたら
k sin cos
0 0.000000 1.000000
30 0.500000 0.996812
60 0.866025 0.987268
90 1.000000 0.971430
と結果がでます。
それにしても,
pi = acos(-1.0)
は
DOループの前に出すのがいいのじゃないですか。
確かにFortran IVみたいな書き方ですね。
フォーマット文を
100 format ( i5,2f10.6)
に替えたら
k sin cos
0 0.000000 1.000000
30 0.500000 0.996812
60 0.866025 0.987268
90 1.000000 0.971430
と結果がでます。
それにしても,
pi = acos(-1.0)
は
DOループの前に出すのがいいのじゃないですか。
906デフォルトの名無しさん
2016/07/30(土) 00:26:31.27ID:CH8BIOrU >>903
大学ですね
大学ですね
907デフォルトの名無しさん
2016/07/30(土) 01:16:36.18ID:CH8BIOrU 重力のみが作用する振り子の運動を解析するプログラムを完成させよ。
real L
data g, L / 9.8, 1.0 /
write (*,*) ’ Δt (sec) =’
read (*,*) dt
*initial
2 write (*,*) ’ θ0 (radian) =’
read (*,*) s0
s =❔
v =❔
t =❔
vL=v
* repeat
1 a= ❔
v =❔
w=❔
s =❔
t =❔
write (*,’(3f8.4)’)
if (vL.gt.0.0.and.v.lt.0.0) go to 2
vL=v
go to 1
end
知り合いとやってるのですが出来る気配がありません。
❔部分に何が入るか教えて下さい。
Δ、θは置き換えますよね?
real L
data g, L / 9.8, 1.0 /
write (*,*) ’ Δt (sec) =’
read (*,*) dt
*initial
2 write (*,*) ’ θ0 (radian) =’
read (*,*) s0
s =❔
v =❔
t =❔
vL=v
* repeat
1 a= ❔
v =❔
w=❔
s =❔
t =❔
write (*,’(3f8.4)’)
if (vL.gt.0.0.and.v.lt.0.0) go to 2
vL=v
go to 1
end
知り合いとやってるのですが出来る気配がありません。
❔部分に何が入るか教えて下さい。
Δ、θは置き換えますよね?
908デフォルトの名無しさん
2016/07/30(土) 01:17:58.34ID:CH8BIOrU909デフォルトの名無しさん
2016/07/30(土) 18:19:30.33ID:MnenPn8v >>907
回線切って氏ね
回線切って氏ね
910デフォルトの名無しさん
2016/07/31(日) 23:35:51.92ID:TkjN2Ici911デフォルトの名無しさん
2016/08/01(月) 00:02:16.74ID:018Zh5sQ たぶん運動方程式をたててオイラー法で解くだけでしょ
どの段階で躓いているか分からないと答えようがない
どの段階で躓いているか分からないと答えようがない
912デフォルトの名無しさん
2016/08/01(月) 01:25:45.70ID:qXp6EaAl 宿題全部やってちょうだい感が出てるから、やってくれる人は少なそう
913デフォルトの名無しさん
2016/08/01(月) 12:05:07.12ID:tW3kuaWv エセ左翼の目的は、わざと突っ込みどころが多い主張をすることで自分たちへ注意を向けさせ、
カルトへ向かう非難の矛先を逸らすこと。
国益に反することを言ったり、主張が食い違うもの同士の対立を煽ろうとするので放置し難いが、
主義思想についての洗脳を受けているわけではなく、フリをしているだけなので、
言い負かされてもダメージを負った様子もなく、論点をすり替えられるかスルーされる。
まともに相手をしてはならない。
サヨに対する危機意識が強すぎると、普段は常識的に振舞っている
(又は、サヨから不当に叩かれている)政治家などがズレたことをやろうとした時でも、
許容したり擁護してしまいがちになるので注意が必要。
カルトへ向かう非難の矛先を逸らすこと。
国益に反することを言ったり、主張が食い違うもの同士の対立を煽ろうとするので放置し難いが、
主義思想についての洗脳を受けているわけではなく、フリをしているだけなので、
言い負かされてもダメージを負った様子もなく、論点をすり替えられるかスルーされる。
まともに相手をしてはならない。
サヨに対する危機意識が強すぎると、普段は常識的に振舞っている
(又は、サヨから不当に叩かれている)政治家などがズレたことをやろうとした時でも、
許容したり擁護してしまいがちになるので注意が必要。
914デフォルトの名無しさん
2016/08/01(月) 22:50:33.91ID:qgzcRfyo 時間、速度、角度を出力するつもりでやったのですがコンパイルした時の値が違います
おそらく運動方程式が間違っているのだと思いますが(t,s辺りが違い気がする)どこがどう違うか教えて下さい
real L
data g, L / 9.8, 1.0 /
write (*,*) ’ Δt (sec) =’
read (*,*) dt
*initial
2 write (*,*) ’ θ0 (radian) =’
read (*,*) s0
s =s0
v =0
t =0
vL=v
* repeat
1 a= −g*sin(s)
v =a*t
w=v/L
s =s0+v*t/L
t =t+dt
write(*,*)’t,v,s’
write (*,’(3f8.4)’)t,v,s
if (vL.gt.0.0.and.v.lt.0.0) go to 2
vL=v
go to 1
end
おそらく運動方程式が間違っているのだと思いますが(t,s辺りが違い気がする)どこがどう違うか教えて下さい
real L
data g, L / 9.8, 1.0 /
write (*,*) ’ Δt (sec) =’
read (*,*) dt
*initial
2 write (*,*) ’ θ0 (radian) =’
read (*,*) s0
s =s0
v =0
t =0
vL=v
* repeat
1 a= −g*sin(s)
v =a*t
w=v/L
s =s0+v*t/L
t =t+dt
write(*,*)’t,v,s’
write (*,’(3f8.4)’)t,v,s
if (vL.gt.0.0.and.v.lt.0.0) go to 2
vL=v
go to 1
end
915デフォルトの名無しさん
2016/08/02(火) 00:16:36.76ID:lf/Rfa1x >914
プログラムの問題ではなくて,数式の問題なんだから,物理板で質問した
ほうがいいのじゃないの。
プログラムの問題ではなくて,数式の問題なんだから,物理板で質問した
ほうがいいのじゃないの。
916デフォルトの名無しさん
2016/08/02(火) 01:31:13.87ID:pyAOnFQt >>914
それFortran以前に運動方程式が全然違う。
v=Lω
dθ/dt = ω
として
dθ^2/dt^2 = -(g/L)sinθ
という微分方程式をルンゲクッタ法で解く。
解析力学、振り子とかで検索したら
ttp://homepage1.nifty.com/gfk/furiko.htm
出てくるだろ、ちゃんと調べろ。
それ以前に理学部とかだったら勉強不足だぞ。
それFortran以前に運動方程式が全然違う。
v=Lω
dθ/dt = ω
として
dθ^2/dt^2 = -(g/L)sinθ
という微分方程式をルンゲクッタ法で解く。
解析力学、振り子とかで検索したら
ttp://homepage1.nifty.com/gfk/furiko.htm
出てくるだろ、ちゃんと調べろ。
それ以前に理学部とかだったら勉強不足だぞ。
917デフォルトの名無しさん
2016/08/02(火) 16:12:24.48ID:+RnVB/b2 どなたか「=>」の意味を教えてください
大なりイコールのような条件式ではなく、記号が逆になっている方です。
具体的には、
DO I =1,NCNEST_NUM
D=>NCNEST_DATA(I)
G=>NCNEST_GRIDS(I)
CALL ASSIGN2BLOCK(D,G)
END DO
のようになっています。データの書き込み系だと睨んでいます。
よろしくお願いします。
大なりイコールのような条件式ではなく、記号が逆になっている方です。
具体的には、
DO I =1,NCNEST_NUM
D=>NCNEST_DATA(I)
G=>NCNEST_GRIDS(I)
CALL ASSIGN2BLOCK(D,G)
END DO
のようになっています。データの書き込み系だと睨んでいます。
よろしくお願いします。
918デフォルトの名無しさん
2016/08/02(火) 16:20:52.36ID:e4r/z1Wx919デフォルトの名無しさん
2016/08/02(火) 16:23:27.42ID:W78wvcm1 ⇒
920デフォルトの名無しさん
2016/08/02(火) 16:50:17.87ID:+RnVB/b2 >918
すばやい反応ありがとうございます。
「FORTRAN =>」で検索しても出てこなかったので、非常にありがたいです。
すばやい反応ありがとうございます。
「FORTRAN =>」で検索しても出てこなかったので、非常にありがたいです。
921デフォルトの名無しさん
2016/08/05(金) 23:42:07.06ID:y4inqjRe coarrayをwindows7,gfortranで
gfortran coarray.f90 -fcoarray=lib -lcaf_mpi
と打つと、
cannot find -lcaf-mpi
とでてコンパイルできん
https://gcc.gnu.org/wiki/CoarrayLib
を参考にMPICH2の拡張子msiのやつ(ちょいバージョン古い)を管理者権限でインストールしてPATHも通している
mpiexecも出来てるから、インストールに失敗してはいない
助けてくださいお願いします
gfortran coarray.f90 -fcoarray=lib -lcaf_mpi
と打つと、
cannot find -lcaf-mpi
とでてコンパイルできん
https://gcc.gnu.org/wiki/CoarrayLib
を参考にMPICH2の拡張子msiのやつ(ちょいバージョン古い)を管理者権限でインストールしてPATHも通している
mpiexecも出来てるから、インストールに失敗してはいない
助けてくださいお願いします
922デフォルトの名無しさん
2016/08/07(日) 15:55:29.04ID:2PwL22wv caf-mpi.a もしくは caf-mpi.so はたしかにあるの?
バージョン番号付いたやつにリンクしてる?
ってWindowsか、、、Windowsの場合 .lib だったりするのかな
バージョン番号付いたやつにリンクしてる?
ってWindowsか、、、Windowsの場合 .lib だったりするのかな
923921
2016/08/07(日) 19:58:54.32ID:6Zl4UqYG 今のところwindowsだと無理っぽいね
mpif90がないからlcaf_mpi.aも取れない
おとなしく仮想化使います
mpif90がないからlcaf_mpi.aも取れない
おとなしく仮想化使います
924デフォルトの名無しさん
2016/09/06(火) 22:18:19.77ID:VT4c30Iu 大気の温度構造を求めるために、4次のrunnge-kutta 法で数値計算しているんですが、ある値に収束するまで繰り返し計算させているせいか精度がどうしても出ません。
動かす範囲が大きいため、刻み幅のとり方が非常に難しく難儀してます。
例えば、積分範囲が 3.0d9 から3.0d6 まで計算しなきゃいけないのですが、ところどころに物理状態が変わるいわゆる境界があるので一律に刻み幅を設定するわけにもいきません。
色々書籍見てみたんですけど、刻み幅のとり方って
h = -1とか撮ってみても恐ろしく時間がかかるため現実的じゃありません。
なにか妙案はないでしょうか?
もしくは推薦図書あれば嬉しいです。
ちなみに今あるのは「数値計算術 」森口繁一 です。
動かす範囲が大きいため、刻み幅のとり方が非常に難しく難儀してます。
例えば、積分範囲が 3.0d9 から3.0d6 まで計算しなきゃいけないのですが、ところどころに物理状態が変わるいわゆる境界があるので一律に刻み幅を設定するわけにもいきません。
色々書籍見てみたんですけど、刻み幅のとり方って
h = -1とか撮ってみても恐ろしく時間がかかるため現実的じゃありません。
なにか妙案はないでしょうか?
もしくは推薦図書あれば嬉しいです。
ちなみに今あるのは「数値計算術 」森口繁一 です。
925デフォルトの名無しさん
2016/09/07(水) 10:09:47.11ID:ihxbaE2x >>924
藪下信『計算物理(I)』(地人書館、1982)には、
「ルンゲ・クッタ法は弱不安定であることが知られている。ずなわち、ステップ幅hをあまり大きくとり過ぎると
、微分方程式の解と、それに対応する数値解とが、定性的に異なった振舞いをする。ただそれは
弱不安定性なので、hを小さくとることによって、安定にすることができる。理論的に詳しいことは、
ここでは説明しないが、結果だけをまとめて書いておこう。
(1) 一般の従属変数yに対する式
dy.dx=ay+b, (a<0)
に於て、ルンゲ・クッタ法が安定であるための条件は
|ha|<2.7
となることである。
(2) n個の従属変数(y1, y2, ,,,,,,,yn)に対する微分方程式
dy・cx=A;y+b
を考える。ただし、Aはn×nの行列である。Aの固有値の中の負のものがあるとき、
Aの固有値のうち絶対値が最大ものをλとする。
安定性の条件は、
|hλ|<2.7
となることである。」
とあります。参考になるでしょうか。
森口繁一先生の本で、「刻み幅」を自動的に変更するという手法について書かれた本が
あったと思います。『計算数学夜話(?)』とかいう本かもしれません。
藪下信『計算物理(I)』(地人書館、1982)には、
「ルンゲ・クッタ法は弱不安定であることが知られている。ずなわち、ステップ幅hをあまり大きくとり過ぎると
、微分方程式の解と、それに対応する数値解とが、定性的に異なった振舞いをする。ただそれは
弱不安定性なので、hを小さくとることによって、安定にすることができる。理論的に詳しいことは、
ここでは説明しないが、結果だけをまとめて書いておこう。
(1) 一般の従属変数yに対する式
dy.dx=ay+b, (a<0)
に於て、ルンゲ・クッタ法が安定であるための条件は
|ha|<2.7
となることである。
(2) n個の従属変数(y1, y2, ,,,,,,,yn)に対する微分方程式
dy・cx=A;y+b
を考える。ただし、Aはn×nの行列である。Aの固有値の中の負のものがあるとき、
Aの固有値のうち絶対値が最大ものをλとする。
安定性の条件は、
|hλ|<2.7
となることである。」
とあります。参考になるでしょうか。
森口繁一先生の本で、「刻み幅」を自動的に変更するという手法について書かれた本が
あったと思います。『計算数学夜話(?)』とかいう本かもしれません。
926デフォルトの名無しさん
2016/12/03(土) 20:32:29.57ID:HN6NcG00 >>924
最適解を求める方法は、刻み値の変更方法を含めて
UP応用数学選書7 最小二乗法による実験データ解析 プログラムSALS
https://www.utp.or.jp/bd/978-4-13-064067-1.html
にくわしい。大学系の図書館ならおいてあるはず。
境界値があって、連続計算できない場合に
最小二乗法だと、不安定になりやすいので、収束が悪いけど、絶対値法
残差二乗和の極小値ではなく、残差絶対値和の極小値を求めると、収束まで2-3倍の回数を計算しなければならないけど、安定しやすい。
残差が増加したときに、一旦計算を打ち切って、解を出力する。
出力した解を初期値として、刻み幅を1/10位(2進数の関係で1/8か1/16)に減らして、再度計算する。
収束で、計算機Eの1024倍ぐらいまでが積分を求めた時の1桁の精度になる(こっちの経験値、問題と演算系によっては大幅に変わる)ので
Y=F(X)の、Xを少しずらした時の値を計算して、このくらいずれる値を見つけておいてくれ。
左(0)から近づけた場合と右(∞)から近づけた場合に、不連続点の付近で、制度が大きく変わる。
こっちが取り扱った問題では、右からは1程度、左からは1E-12程度、計算機Eの影響を受ける。
こんな場合には、最小二乗法・絶対値法ともに使えない。OR https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BA%E3%83%BB%E3%83%AA%E3%82%B5%E3%83%BC%E3%83%81 を使う。
一次方程式の場合には、計算方法が規定されているが、
他の場合には、
適当な初期値を使って計算して、少しずらした値を計算して、極小値を初期値にして再度計算、
の繰り返しになる。不連続点は計算しない。
「少しずらした値」は1/1024を使って、その後1/2づつ減らした。
収束はかなり悪い。3000-5000回の繰り返し演算が必要だった。
計算機Eによる影響は、この方法で求めた。
なお、温度の変化を追いかける計算ではないので、参考にならないかもしれない。
最適解を求める方法は、刻み値の変更方法を含めて
UP応用数学選書7 最小二乗法による実験データ解析 プログラムSALS
https://www.utp.or.jp/bd/978-4-13-064067-1.html
にくわしい。大学系の図書館ならおいてあるはず。
境界値があって、連続計算できない場合に
最小二乗法だと、不安定になりやすいので、収束が悪いけど、絶対値法
残差二乗和の極小値ではなく、残差絶対値和の極小値を求めると、収束まで2-3倍の回数を計算しなければならないけど、安定しやすい。
残差が増加したときに、一旦計算を打ち切って、解を出力する。
出力した解を初期値として、刻み幅を1/10位(2進数の関係で1/8か1/16)に減らして、再度計算する。
収束で、計算機Eの1024倍ぐらいまでが積分を求めた時の1桁の精度になる(こっちの経験値、問題と演算系によっては大幅に変わる)ので
Y=F(X)の、Xを少しずらした時の値を計算して、このくらいずれる値を見つけておいてくれ。
左(0)から近づけた場合と右(∞)から近づけた場合に、不連続点の付近で、制度が大きく変わる。
こっちが取り扱った問題では、右からは1程度、左からは1E-12程度、計算機Eの影響を受ける。
こんな場合には、最小二乗法・絶対値法ともに使えない。OR https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BA%E3%83%BB%E3%83%AA%E3%82%B5%E3%83%BC%E3%83%81 を使う。
一次方程式の場合には、計算方法が規定されているが、
他の場合には、
適当な初期値を使って計算して、少しずらした値を計算して、極小値を初期値にして再度計算、
の繰り返しになる。不連続点は計算しない。
「少しずらした値」は1/1024を使って、その後1/2づつ減らした。
収束はかなり悪い。3000-5000回の繰り返し演算が必要だった。
計算機Eによる影響は、この方法で求めた。
なお、温度の変化を追いかける計算ではないので、参考にならないかもしれない。
927デフォルトの名無しさん
2017/03/24(金) 22:05:30.22ID:rSyKPFXl どなたかご存知の方いらっしゃいますでしょうか?
コンパイラのバグではなく何らかの仕様なのかと思うのですが分かりませんでした。
●質問
実数型の変数をwrite文で桁数を指定して出力させる時、
桁数以下の値は四捨五入されて出力すると思うのですが、
下記プログラム例のように”切り捨て”られる(と思われる)場合があります。
なぜこのような処理がされるかご存じであれば教えて頂きたいです。
●プログラム
PROGRAM TEST
IMPLICIT NONE
REAL*8 VAL1
VAL1=0.125D0
WRITE(6,'(D13.2)')VAL1
END PROGRAM
●結果
0.12D+00
●問題点
・0.125の小数点第3位を四捨五入すると0.13となるが結果は0.12となってしまう
●確認したこと
・変数VAL1の桁を増やして確認すると0.12500000000・・・と続く
・0.125は2進数で正確に表す事ができる
・下記のように2進数で正確に表せない数値だと四捨五入が理解できる
入力値 VAL1=0.555D0
結果 0.56D0
結果(桁を増やす)0.555000000000000048849813083507D+00
・2進数で正確に表せる数値でも正しく四捨五入されるものもある
入力値 VAL1=0.375D0
結果 0.38D0
その他 0.0625D0も正しく四捨五入される ⇒ 0.63D-1 と出力される
・Fortranコンパイラは、Compacfortranやredhatのgfortran、IntelFortranを試したがいずれも同じ結果だった
・単純な数値なので32bitや64bit環境の問題では無いと思います
・.f90でのみ試しています
コンパイラのバグではなく何らかの仕様なのかと思うのですが分かりませんでした。
●質問
実数型の変数をwrite文で桁数を指定して出力させる時、
桁数以下の値は四捨五入されて出力すると思うのですが、
下記プログラム例のように”切り捨て”られる(と思われる)場合があります。
なぜこのような処理がされるかご存じであれば教えて頂きたいです。
●プログラム
PROGRAM TEST
IMPLICIT NONE
REAL*8 VAL1
VAL1=0.125D0
WRITE(6,'(D13.2)')VAL1
END PROGRAM
●結果
0.12D+00
●問題点
・0.125の小数点第3位を四捨五入すると0.13となるが結果は0.12となってしまう
●確認したこと
・変数VAL1の桁を増やして確認すると0.12500000000・・・と続く
・0.125は2進数で正確に表す事ができる
・下記のように2進数で正確に表せない数値だと四捨五入が理解できる
入力値 VAL1=0.555D0
結果 0.56D0
結果(桁を増やす)0.555000000000000048849813083507D+00
・2進数で正確に表せる数値でも正しく四捨五入されるものもある
入力値 VAL1=0.375D0
結果 0.38D0
その他 0.0625D0も正しく四捨五入される ⇒ 0.63D-1 と出力される
・Fortranコンパイラは、Compacfortranやredhatのgfortran、IntelFortranを試したがいずれも同じ結果だった
・単純な数値なので32bitや64bit環境の問題では無いと思います
・.f90でのみ試しています
928デフォルトの名無しさん
2017/03/24(金) 23:03:11.52ID:L8cPMEns 丸めモードについて読むこと
IEEE754のNEARESTなら正しい動作
http://www.ibm.com/support/knowledgecenter/ja/SSGH4D_12.1.0/com.ibm.xlf121.aix.doc/language_ref/write.html
IEEE754のNEARESTなら正しい動作
http://www.ibm.com/support/knowledgecenter/ja/SSGH4D_12.1.0/com.ibm.xlf121.aix.doc/language_ref/write.html
929デフォルトの名無しさん
2017/03/25(土) 04:11:14.28ID:ESyR2hOs どうもありがとうございます。
ROUNDで丸め誤差を色々定義出来るのですね。
来週試してみます。
ROUNDで丸め誤差を色々定義出来るのですね。
来週試してみます。
930デフォルトの名無しさん
2017/12/10(日) 04:57:11.71ID:cAgVc7bQ fortranにはなんで引用仕様宣言なるものがあるんですか?
関数の引数等を関数の定義からコンパイラ勝手に読み取れば良いと思うんですが、moduleでできて手続きだとわざわざ自前で書かなきゃいけない理由って何かあるんですか?
関数の引数等を関数の定義からコンパイラ勝手に読み取れば良いと思うんですが、moduleでできて手続きだとわざわざ自前で書かなきゃいけない理由って何かあるんですか?
931デフォルトの名無しさん
2018/02/26(月) 23:36:28.70ID:TZ3KPlNh 普段形状引き継ぎ配列を使っているのですが、blasやlapackを使ってarray-temporariesをつけてコンパイルすると、コンパイル時にarray-temporariesのワーニングが出ます。
blasでは形状引き継ぎ配列を使っていないしモジュール内にあるわけでもないので当然と言えば当然なのですが、こういう時にどうするのが良いのか分からず困っています。ベストプラクティスのようなものはあるのでしょうか?
blasでは形状引き継ぎ配列を使っていないしモジュール内にあるわけでもないので当然と言えば当然なのですが、こういう時にどうするのが良いのか分からず困っています。ベストプラクティスのようなものはあるのでしょうか?
932デフォルトの名無しさん
2018/04/29(日) 22:24:59.24ID:tKjITkqe 永い時を経て多分自己解決出来ました
Contiguous なんていうオプションがあるのですね
Contiguous なんていうオプションがあるのですね
933デフォルトの名無しさん
2018/05/12(土) 20:03:53.83ID:F3K2afGN このスレ人おんの?
934デフォルトの名無しさん
2018/05/13(日) 14:08:02.04ID:44h/7/Ui 一応
935デフォルトの名無しさん
2018/05/13(日) 14:33:38.53ID:NXXuYZ+p おおー。人おった!
936デフォルトの名無しさん
2018/05/23(水) 19:23:38.59ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
SAWKX
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
SAWKX
937デフォルトの名無しさん
2018/05/24(木) 10:43:20.36ID:cPlRxlDn SAWKX
938デフォルトの名無しさん
2018/07/04(水) 22:53:55.75ID:gFgZc5FG DG2
939デフォルトの名無しさん
2018/07/06(金) 12:32:29.62ID:uTPDH9XV DG2
940デフォルトの名無しさん
2018/10/01(月) 21:14:37.76ID:/InadKmT FORTRAN案件が一部に有るな
鉄道ダイヤシステムだが
鉄道ダイヤシステムだが
941デフォルトの名無しさん
2018/12/10(月) 01:43:09.35ID:Y2cLB9FR 何故文関数、
f(x) = 1. / x
のような記法が非推奨と言われるのでしょうか?(nag等のサイトより)
他の言語のlambda式などと比べて、Fortranでは非常に簡潔に簡易な関数を定義できるものだなあ、
と感心していたのですが…
f(x) = 1. / x
のような記法が非推奨と言われるのでしょうか?(nag等のサイトより)
他の言語のlambda式などと比べて、Fortranでは非常に簡潔に簡易な関数を定義できるものだなあ、
と感心していたのですが…
942デフォルトの名無しさん
2018/12/10(月) 02:41:51.30ID:O61+1QOk >>941
書き易さより読み易さが優先
気象庁の標準コーディングルールより
文関数
文関数は引用仕様が暗黙的であり、デバッグがしずらくなる。また、文関数 自体や文関数定義が後続する文関数を引用してはならないなどの制限がある。 内部関数として書いた方がよい。
http://www.mri-jma.go.jp/Project/mrinpd/coderule.html
関数、変数は明示的な宣言をしてから使うのが今風
個人で読み返さないプログラムなら何やっても正常動作すれば良いよ
書き易さより読み易さが優先
気象庁の標準コーディングルールより
文関数
文関数は引用仕様が暗黙的であり、デバッグがしずらくなる。また、文関数 自体や文関数定義が後続する文関数を引用してはならないなどの制限がある。 内部関数として書いた方がよい。
http://www.mri-jma.go.jp/Project/mrinpd/coderule.html
関数、変数は明示的な宣言をしてから使うのが今風
個人で読み返さないプログラムなら何やっても正常動作すれば良いよ
943デフォルトの名無しさん
2018/12/10(月) 13:01:17.07ID:Y2cLB9FR >>942
ありがとう、正直大きなプログラム書かないので実感が湧かないけど、そういうものか
ありがとう、正直大きなプログラム書かないので実感が湧かないけど、そういうものか
944デフォルトの名無しさん
2019/01/13(日) 22:58:00.85ID:6mqjNodn 中学校の技術の教科書に載ってるってバズってるな
945デフォルトの名無しさん
2019/01/16(水) 19:01:22.83ID:xonbbP95 2018も出たことだし若い血も入ってくる
乗ってるな
乗ってるな
946デフォルトの名無しさん
2019/01/24(木) 20:16:05.77ID:oJ91kE1a 本当に初歩的でかつ自分勝手で申し訳ないのですが、fortran90でn次正方行列の逆行列を求めるプログラムを教えていただけませんか?
947デフォルトの名無しさん
2019/01/24(木) 20:26:04.65ID:/BXejuIU それは数値計算の永遠の課題で万能の処方箋は無い
勉強の為ならWikipediaでも見ながら愚直にガウスの掃き出し法でも実装してみたら
勉強の為ならWikipediaでも見ながら愚直にガウスの掃き出し法でも実装してみたら
948デフォルトの名無しさん
2019/01/24(木) 20:38:47.14ID:/BXejuIU 求めたいだけなら大体の環境でmklが一番いいライブラリ
有名なので比較的読みやすいのはLINPACKだけど77仕様
モダンで簡単な実装ならあちこちのブログに載ってるからググれ
有名なので比較的読みやすいのはLINPACKだけど77仕様
モダンで簡単な実装ならあちこちのブログに載ってるからググれ
949デフォルトの名無しさん
2019/01/24(木) 20:44:04.96ID:/BXejuIU950デフォルトの名無しさん
2019/01/25(金) 11:23:51.25ID:nTExwXep >>946
宿題は宿題スレへ
宿題は宿題スレへ
951デフォルトの名無しさん
2019/01/25(金) 11:43:59.45ID:e9L7JHld スレ索してみたけどFortranスレもしかしてここしか無くね
ぜひLINPACK読んで逆行列の疑問書いてくれ
布教のチャンス
ぜひLINPACK読んで逆行列の疑問書いてくれ
布教のチャンス
952デフォルトの名無しさん
2019/01/25(金) 12:51:00.49ID:A2tc5P4M Lapackでええやん
953デフォルトの名無しさん
2019/01/25(金) 13:01:21.60ID:e9L7JHld LAPACKは使うけどコードは最適化されてて汚い
954デフォルトの名無しさん
2019/01/25(金) 21:25:43.75ID:5qMgZ1Mp Matrix Computationsに載ってるよ。
955デフォルトの名無しさん
2019/01/26(土) 02:23:28.24ID:Z89DHn3T 質問です。
ファイル名 *.f90 とは別に、プログラム名 program * がありますが、この二つが同じ名前だと、何らかの不具合・不便に繋がったりするのでしょうか。
私は、修正前後を比較するためにバージョン違いを作るような場合を除き、基本的に両者を同じ名前にしているのですが……
ファイル名 *.f90 とは別に、プログラム名 program * がありますが、この二つが同じ名前だと、何らかの不具合・不便に繋がったりするのでしょうか。
私は、修正前後を比較するためにバージョン違いを作るような場合を除き、基本的に両者を同じ名前にしているのですが……
956デフォルトの名無しさん
2019/01/26(土) 11:12:15.29ID:yVAkGzul むしろ同じにしといた方が無難
957デフォルトの名無しさん
2019/01/26(土) 13:43:45.62ID:Z89DHn3T >>956
安心しました、ありがとうございます。
安心しました、ありがとうございます。
958デフォルトの名無しさん
2019/01/26(土) 13:53:32.02ID:6SK3WITg ファイルシステムの無い時代、例えばパンチの名残だろうかね
959デフォルトの名無しさん
2019/02/08(金) 00:44:25.09ID:YfKMGwNZ 環境はCygwin、f90、gfortranです。
open文のaction指定子に関する質問です。
ミス防止のため、念には念を入れて
「readもwriteもするファイルでも、場面に応じてaction='read'と'write'を切り替える」
と理想的なんじゃないだろうか、とふと思いまして、
open(100,file='foo.dat',status='old',action='read')
〜
open(100,action='write',position='append')
〜
close(100)
という記述を試してみたのですが、実行時にエラーになってしまいました。
(Fortran runtime error: Cannot change ACTION parameter in OPEN statement)
「open文で既に開いているファイルを開き直してもよい」って仕様はこういう用途のためのものではないんですね……
一度closeすれば事は足るのですが、それだと今度は「同じfile名を二回記述しなければならない」という無駄が解消できず……
何か、巧い方法はないのでしょうか。
open文のaction指定子に関する質問です。
ミス防止のため、念には念を入れて
「readもwriteもするファイルでも、場面に応じてaction='read'と'write'を切り替える」
と理想的なんじゃないだろうか、とふと思いまして、
open(100,file='foo.dat',status='old',action='read')
〜
open(100,action='write',position='append')
〜
close(100)
という記述を試してみたのですが、実行時にエラーになってしまいました。
(Fortran runtime error: Cannot change ACTION parameter in OPEN statement)
「open文で既に開いているファイルを開き直してもよい」って仕様はこういう用途のためのものではないんですね……
一度closeすれば事は足るのですが、それだと今度は「同じfile名を二回記述しなければならない」という無駄が解消できず……
何か、巧い方法はないのでしょうか。
960デフォルトの名無しさん
2019/02/08(金) 01:15:11.98ID:YfKMGwNZ すみません、一応自己解決しました。
指定子に文字型の変数を与えることができる、ということに先ほど気づきました。
なので「一度closeする」で問題ありませんでした。
name1 = 'foo.dat'としておいて、
open文に file=name1 とでも書けば済む話でした(つまるところ、ファイル名変更時の手間が一番の問題だと考えていたので)。
指定子に文字型の変数を与えることができる、ということに先ほど気づきました。
なので「一度closeする」で問題ありませんでした。
name1 = 'foo.dat'としておいて、
open文に file=name1 とでも書けば済む話でした(つまるところ、ファイル名変更時の手間が一番の問題だと考えていたので)。
961Linux ペンギン
2019/02/08(金) 23:01:52.12ID:DyJ7QOpE lapack インスコ方法教えてんか?
962デフォルトの名無しさん
2019/02/28(木) 02:25:49.99ID:43+kEwYn963デフォルトの名無しさん
2019/02/28(木) 13:08:32.71ID:43+kEwYn >>956
遅レスだけど、program名って何か意味あるんかね?
program書かないでも動くし(endは必要)、programは他から呼ばれないし
moduleやsubroutineの名前は呼ぶのに大事だけど
ファイル名はinclude "fname"で使うから意味ある
遅レスだけど、program名って何か意味あるんかね?
program書かないでも動くし(endは必要)、programは他から呼ばれないし
moduleやsubroutineの名前は呼ぶのに大事だけど
ファイル名はinclude "fname"で使うから意味ある
964デフォルトの名無しさん
2019/05/02(木) 22:03:24.81ID:bI33l//4 他人が作ったコードで、
real*4 宣言を全部real*8に書き換えたら、
計算結果がNaNになっちゃったんだけど、
どんな原因が考えられますか?
real*4 宣言を全部real*8に書き換えたら、
計算結果がNaNになっちゃったんだけど、
どんな原因が考えられますか?
965デフォルトの名無しさん
2019/05/03(金) 14:28:23.81ID:3Vz/qKoh 色々
教えて欲しかったらソース出せ
教えて欲しかったらソース出せ
966デフォルトの名無しさん
2019/06/19(水) 04:49:42.26ID:tVNS+22r 【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
967デフォルトの名無しさん
2019/06/22(土) 10:06:49.78ID:ecTKxvDL Fortranは1956年?だかに作られたそうだけど
当初からクラス設計とかあったの?
当初からクラス設計とかあったの?
968デフォルトの名無しさん
2019/06/22(土) 10:33:22.05ID:fiI8bn9U データベースに合わせたORMみたいな
メンバーとか何かあった気がするが
クラスは無いんじゃね
メンバーとか何かあった気がするが
クラスは無いんじゃね
969デフォルトの名無しさん
2019/07/15(月) 18:22:34.81ID:totsCoub970デフォルトの名無しさん
2019/09/20(金) 07:30:20.40ID:TGCjU1pt Moduleで継承みたいなことってできないんでしょうか?
module mod1
integer,parameter :: val1 = 20
end
module mod2
use mod1
end
program main
use mod2
print *, val1
end
みたいな
このままだとエラーですけど
module mod1
integer,parameter :: val1 = 20
end
module mod2
use mod1
end
program main
use mod2
print *, val1
end
みたいな
このままだとエラーですけど
971デフォルトの名無しさん
2019/09/20(金) 09:23:13.89ID:Y6O3yJb6 >>970
gfortran8.1で試したけど普通に動くよ
gfortran8.1で試したけど普通に動くよ
972デフォルトの名無しさん
2019/09/20(金) 11:49:11.89ID:TGCjU1pt973デフォルトの名無しさん
2019/12/05(木) 20:26:57.24ID:5HmbMnOR 今更fortran使う必要が出たんですけど宣言全部冒頭でやらなきゃいけないとか読みにくいにもほどがあるなこの言語……
ただdllでもない生のCファイル普通に使えるのちょっと強すぎじゃない。何これ
ただdllでもない生のCファイル普通に使えるのちょっと強すぎじゃない。何これ
974デフォルトの名無しさん
2019/12/06(金) 10:25:38.93ID:uUae0oO6 JULIAやれ
975デフォルトの名無しさん
2019/12/09(月) 23:37:38.73ID:PezMDr0C C++に移植する作業をしてるんだが、fortranは配列が1スタートなのと行優先なのまじで糞だと思う
976デフォルトの名無しさん
2019/12/10(火) 06:15:05.25ID:ehgh8Gwn 配列の下限もレイアウトも両方オプションで変更できるっしょ
977デフォルトの名無しさん
2019/12/10(火) 13:53:20.70ID:48kVELqA openglも行優先だっけ
978デフォルトの名無しさん
2019/12/14(土) 01:16:23.48ID:llZnx091 read/writeの装置番号というのに衝撃を受けたんだけど
いや整数を振るって……えぇ……他の言語でこんなん見たことねぇよ……
いや整数を振るって……えぇ……他の言語でこんなん見たことねぇよ……
979デフォルトの名無しさん
2019/12/14(土) 02:29:00.89ID:U3Y+OMfv ここで言語仕様に文句言ってもどうしようもないだろ……
整数型の変数も使えるから自分で値を付けれるハンドルと考えれば良い
整数型の変数も使えるから自分で値を付けれるハンドルと考えれば良い
980デフォルトの名無しさん
2019/12/14(土) 10:56:06.61ID:oHNLq8G6 Cでもstdin=0,stdout=1,stderr=2とかやってるやん?
981デフォルトの名無しさん
2019/12/14(土) 19:35:25.64ID:ygJNOGBg ハンドルを整数値で管理するなんて普通だろ。
982デフォルトの名無しさん
2019/12/15(日) 02:31:50.39ID:XiowEuWl subroutineとfunctionの使い分けってどうしてます?FORTRANのコード規約みたいなのがあまり見当たらなくてわかんなくて
たとえばnameとageを持ったpersonタイプを作るとしてsubroutine getperson(name, age, person) intent(in)name, age intent(out)person
なのかgetname(name, age)ファンクションを定義してperson = getPerson(name, age)みたいなのがいいのか
他の言語の言い方になるけど前者は参照渡し的というか。今いじってるのがほぼ全部subroutineで処理してるからこういうのがfortranの書き方なのかなぁって
個人的には後者の方がいいのではと思うんですよね
たとえばnameとageを持ったpersonタイプを作るとしてsubroutine getperson(name, age, person) intent(in)name, age intent(out)person
なのかgetname(name, age)ファンクションを定義してperson = getPerson(name, age)みたいなのがいいのか
他の言語の言い方になるけど前者は参照渡し的というか。今いじってるのがほぼ全部subroutineで処理してるからこういうのがfortranの書き方なのかなぁって
個人的には後者の方がいいのではと思うんですよね
983デフォルトの名無しさん
2019/12/15(日) 08:10:55.00ID:ZURMU7Y0 副作用が無いならfunction、あるならsubroutine
例えばsinやcosはfunctionだけどrandom_numberは内部状態を書き換えるのでsubroutine
例えばsinやcosはfunctionだけどrandom_numberは内部状態を書き換えるのでsubroutine
984デフォルトの名無しさん
2019/12/15(日) 12:59:16.65ID:o9m7qUoD 戻り値の有無やろ
985デフォルトの名無しさん
2019/12/15(日) 13:03:16.56ID:PY/OteEv 返り値が複数かどうかだろ
986デフォルトの名無しさん
2019/12/15(日) 20:36:28.41ID:AalVXpZd 副作用はpure修飾で区別するのでは
987デフォルトの名無しさん
2019/12/15(日) 23:49:42.99ID:BpbcQxvZ 前提として初心者がどちらにするか迷った時の話で
非pure関数を同じ文中で複数呼んだら評価順の影響を受けて悩みの種になるというのがあるから
副作用があれば全部subroutineぐらいの割り切りでいいと思う
非pure関数を同じ文中で複数呼んだら評価順の影響を受けて悩みの種になるというのがあるから
副作用があれば全部subroutineぐらいの割り切りでいいと思う
988デフォルトの名無しさん
2019/12/16(月) 08:12:12.88ID:CEJg7/0A >985
複数の返り値を構造体にすれば、関数でいけるのではないでしょうかね
複数の返り値を構造体にすれば、関数でいけるのではないでしょうかね
989デフォルトの名無しさん
2020/01/09(木) 14:06:43.45ID:Rw5gLjBx cigwin64ターミナルでコンパイルしようとすると
Winmain関数への定義がされてないって言われるんだけどどうしたらいいですか?
Winmain関数への定義がされてないって言われるんだけどどうしたらいいですか?
990デフォルトの名無しさん
2020/01/10(金) 22:03:41.01ID:odrNzs9Z Winmain関数を定義したらよいのでは。
991mac
2020/02/01(土) 22:13:14.55ID:Q+QKuWIk macのOSをCatalinaにしてからfortranでコンパイルできなくなりました。
大学の宿題ができなくて困っています。助けてくだいさい!
gfortran main.f90 でコンパイル後のエラー文は以下です。
dyld: Library not loaded: /usr/local/opt/isl/lib/libisl.21.dylib
Referenced from: /usr/local/Cellar/gcc/9.1.0/libexec/gcc/x86_64-apple-darwin18/9.1.0/f951
Reason: image not found
gfortran: internal compiler error: Abort trap: 6 signal terminated program f951
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://github.com/Homebrew/homebrew-core/issues> for instructions.
大学の宿題ができなくて困っています。助けてくだいさい!
gfortran main.f90 でコンパイル後のエラー文は以下です。
dyld: Library not loaded: /usr/local/opt/isl/lib/libisl.21.dylib
Referenced from: /usr/local/Cellar/gcc/9.1.0/libexec/gcc/x86_64-apple-darwin18/9.1.0/f951
Reason: image not found
gfortran: internal compiler error: Abort trap: 6 signal terminated program f951
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://github.com/Homebrew/homebrew-core/issues> for instructions.
992デフォルトの名無しさん
2020/02/02(日) 14:51:51.31ID:5oKX1F3M >>991
エラーログよく読めよカスガキ
エラーログよく読めよカスガキ
993mac
2020/02/03(月) 06:48:44.07ID:lEGOKPCQ 読んでみました。
libisl.21.dylib を読み込もうとしているのですが、
libisl.22.dylib におそらく対応ファイルが変わってしまったようです。
読み込み先を libisl.21.dylib → libisl.22.dylib に変更するにはどうしたら良いのでしょうか?
libisl.21.dylib を読み込もうとしているのですが、
libisl.22.dylib におそらく対応ファイルが変わってしまったようです。
読み込み先を libisl.21.dylib → libisl.22.dylib に変更するにはどうしたら良いのでしょうか?
994デフォルトの名無しさん
2020/02/03(月) 11:41:24.71ID:62FLJlST libisl.22.dylib を libisl.21.dylib に rename
995mac
2020/02/04(火) 13:54:57.85ID:5KrL780U コンパイルできるようになりました!
ありがとうございます!
ありがとうございます!
996デフォルトの名無しさん
2020/02/05(水) 02:53:14.67ID:hA2ZuT5R 並列計算のコマンドを do loop 内に入れると,配列ごとに計算できないのね。。。
なんか妙案あるのかな
なんか妙案あるのかな
997デフォルトの名無しさん
2020/02/27(木) 21:39:58.16ID:LK+QpBx6 ifortで-ipoを指定すると謎のセグフォが発生する
998デフォルトの名無しさん
2020/04/06(月) 04:39:32.64ID:D5KfSo1y うめ
999デフォルトの名無しさん
2020/04/06(月) 04:39:41.11ID:D5KfSo1y うめ
1000デフォルトの名無しさん
2020/04/06(月) 04:39:53.59ID:D5KfSo1y うめ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2789日 7時間 41分 53秒
新しいスレッドを立ててください。
life time: 2789日 7時間 41分 53秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 東大前駅切りつけ男「東大を目指した教育熱心な世間の親たちに、あまりに度が過ぎると子供がぐれて、私のように罪を犯すと示したかった」 [Hitzeschleier★]
- 大阪 刃物持った男に切りつけられ男性搬送 30代の男を逮捕 阿倍野区 [少考さん★]
- 東大前駅切りつけ男「東大を目指した教育熱心な世間の親たちに、あまりに度が過ぎると子供がぐれて私のように罪を犯すと示したかった ★2 [Hitzeschleier★]
- 【野球】「楽天時代に先輩がやっているのを見て始めた」プロ野球 巨人・オコエ瑠偉選手 オンラインカジノ賭博疑いで書類送検 警視庁 [Ailuropoda melanoleuca★]
- オートレースで3億6500万円が的中、申告せず7700万円脱税…無職男(51)が起訴事実認める [おっさん友の会★]
- パキスタンの中国製戦闘機「殲10」がインドの仏製「ラファール」を撃墜 米当局者★2 [夜のけいちゃん★]
- 能登の公務員「え?スポ少の準公金で俺の車をレストアしたらダメなんすか?じゃあ返します」素直だから警察沙汰にならず [389326466]
- 【悲報】米農家「米の高騰が不思議。30キロ9000円で出荷してるのになぜあんなに高くなるのか」 [567462986]
- 暇空茜さん、完璧に自己分析してしまう……これ怖いくらいに自分を客観視してる…… [158478931]
- 【動画】ジャップさん、綺麗に事故る [834922174]
- 【動画】オートマチックでロシアンルーレットに挑戦した男性が死亡 [834922174]
- 自民・西田昌司氏「ひめゆりの塔」発言を謝罪、お詫び、訂正、削除を発表 [256556981]