新規記事の投稿を行うことで、非表示にすることが可能です。
2021年01月07日
windows10でfortranの複素数のプログラミング
昔のスペクトル解析の専門書の巻末に書かれた
fortranのプログラムをwindows10のsurface proで回すために始めた勉強は、
現在、本の巻末の例題を3つ再現できたところである。
(ここには書かないが。)
次は複素数の計算が出てきたのでfortranの複素数のプログラミングを
調べて覚える。
(複素数のコードの書き方知らないと覚えようとしている
複素数の高速フーリエ変換はできないから。)
あぁ、、とうとう自分は複素数の計算をプログラミングできるように
なるのだ、、。
大学受験の時に複素数の問題は解けたけど、
大学の専門分野の講義の時は複素数を使った技術計算は
よく理解できなかった。そんな13〜14年前にできなかったことを
今日、明日で超えれるのだと思うと感慨深い。いつの歳になっても
日々勉強である。
で、調べると下記サイトを見つける。
>大気海洋科学のための計算機講習会
>稲津 將(北海道大学地球環境科学研究科)
>Fortran 複素数
>https://www.sci.hokudai.ac.jp/~inaz/doc/B/Education/node6.html
複素数の変数の宣言の仕方は分かった。
次に、プログラミングの前に複素数の足し算、引き算、掛け算、割り算
をおさらいせねば。
足し算、引き算は実部、虚部をそのまま足し引きするだけだが、
掛け算、割り算ってどうやるのだったか、、。
もう13、14年も経っているから覚えてない。
で、検索すると下記のサイトが出てきた。
>マナペディア
>複素数の四則計算
>OKボーイ
>https://manapedia.jp/text/52
割り算がちょっと面倒だな。
分母に共役複素数を掛けてたか。
ではfortranの
・足し算、引き算、掛け算、割り算
・共益複素数を出力するconjg関数
・2乗(x^2)
・指数関数(e^x)
を試してみる。
下記のようにコードを書いてみた。
(1〜27行目)
(28〜51行目)
その際、複素数のformat文は
どうやって書けばいいか分からなかったので
下記のサイトを参考にした。
(実部、虚部をコンマで区切ってカッコで囲めばいい)
>早稲田大学 理工情報関連科目・情報教育ウェブサイト FORTRANプログラミング入門
>2019年度春学期・Fortranプログラミング入門
>Format文の書式
>http://www-it.sci.waseda.ac.jp/FPR1/class02/Fortran/Japan/3_2fmt.pdf
ついでに下記のURLを貼っておこう。
(C、Fortran、JAVAのプログラミング言語の講義が聴けるから。)
>早稲田大学理工メディアセンター
>http://www.waseda.jp/mse/web/infotechedu/
で、回した結果は下記。
よしよし、うまくいった。
同じ計算をエクセルでやったのが下記。
数値も合っている。
※指数関数部分はIMEXP関数にCOMPLEX関数の複素数を代入し、
その実部と虚部をそれぞれIMREAL関数、IMAGINARY関数で
セルに出力した。
これで、複素数のコードに必要な内容は把握できただろう。
(追記)
実数、整数から複素数を作るcmplx関数が必要だったので追記する。
cmplx関数がないと、
整数または実数変数を組み合わせて複素数を作ることができない。
c=(a,2.0)やc=(a,b)とするとエラーになる。
(数値だけならいけるが、変数が入るとカッコだけではだめになる。)
c=cmplx(a,2.0)やc=cmplx(a,b)とするとエラーでなくなる。
それを使って下記のコードを書いた。
で実行すると下記のようになる。
fortranのプログラムをwindows10のsurface proで回すために始めた勉強は、
現在、本の巻末の例題を3つ再現できたところである。
(ここには書かないが。)
次は複素数の計算が出てきたのでfortranの複素数のプログラミングを
調べて覚える。
(複素数のコードの書き方知らないと覚えようとしている
複素数の高速フーリエ変換はできないから。)
あぁ、、とうとう自分は複素数の計算をプログラミングできるように
なるのだ、、。
大学受験の時に複素数の問題は解けたけど、
大学の専門分野の講義の時は複素数を使った技術計算は
よく理解できなかった。そんな13〜14年前にできなかったことを
今日、明日で超えれるのだと思うと感慨深い。いつの歳になっても
日々勉強である。
で、調べると下記サイトを見つける。
>大気海洋科学のための計算機講習会
>稲津 將(北海道大学地球環境科学研究科)
>Fortran 複素数
>https://www.sci.hokudai.ac.jp/~inaz/doc/B/Education/node6.html
複素数の変数の宣言の仕方は分かった。
次に、プログラミングの前に複素数の足し算、引き算、掛け算、割り算
をおさらいせねば。
足し算、引き算は実部、虚部をそのまま足し引きするだけだが、
掛け算、割り算ってどうやるのだったか、、。
もう13、14年も経っているから覚えてない。
で、検索すると下記のサイトが出てきた。
>マナペディア
>複素数の四則計算
>OKボーイ
>https://manapedia.jp/text/52
割り算がちょっと面倒だな。
分母に共役複素数を掛けてたか。
ではfortranの
・足し算、引き算、掛け算、割り算
・共益複素数を出力するconjg関数
・2乗(x^2)
・指数関数(e^x)
を試してみる。
下記のようにコードを書いてみた。
(1〜27行目)
(28〜51行目)
その際、複素数のformat文は
どうやって書けばいいか分からなかったので
下記のサイトを参考にした。
(実部、虚部をコンマで区切ってカッコで囲めばいい)
>早稲田大学 理工情報関連科目・情報教育ウェブサイト FORTRANプログラミング入門
>2019年度春学期・Fortranプログラミング入門
>Format文の書式
>http://www-it.sci.waseda.ac.jp/FPR1/class02/Fortran/Japan/3_2fmt.pdf
ついでに下記のURLを貼っておこう。
(C、Fortran、JAVAのプログラミング言語の講義が聴けるから。)
>早稲田大学理工メディアセンター
>http://www.waseda.jp/mse/web/infotechedu/
で、回した結果は下記。
よしよし、うまくいった。
同じ計算をエクセルでやったのが下記。
数値も合っている。
※指数関数部分はIMEXP関数にCOMPLEX関数の複素数を代入し、
その実部と虚部をそれぞれIMREAL関数、IMAGINARY関数で
セルに出力した。
これで、複素数のコードに必要な内容は把握できただろう。
(追記)
実数、整数から複素数を作るcmplx関数が必要だったので追記する。
cmplx関数がないと、
整数または実数変数を組み合わせて複素数を作ることができない。
c=(a,2.0)やc=(a,b)とするとエラーになる。
(数値だけならいけるが、変数が入るとカッコだけではだめになる。)
c=cmplx(a,2.0)やc=cmplx(a,b)とするとエラーでなくなる。
それを使って下記のコードを書いた。
で実行すると下記のようになる。
2021年01月02日
fortranのformat文覚える
windows10で化石言語であるfortranを回す。
古い本の巻末に書かれているプログラムを読むべく始めたが、
1個書けた。で回った。
(ここにはソースは書かないが。)
1個読めたら全部読めるね。
複数例題が書いてあっても同じ著者がプログラムを書いてるから。
英語とかと違ってプログラムはコードに使っているキーワードが少ないんだよな。
ただ、1個引っかかったのが、
本質的な計算部分ではなく、
画面やテキストファイルに出力する際の
書式のformat文である。
普通はformatの中は数値の全桁数、小数点以下の桁数が
書いてあるはずだが、
本の巻末のプログラムだと、
format文の中に文字が書いてあり、その文字が見出しの様に
画面やファイルにも出力されている。
この形式をマスターせねば本の巻末のプログラムを覚えたことにはならない。
で、下記のサイトを参考にした。
>福岡大学電気工学科
>FORTRAN 言語の構文
>http://tepe.tec.fukuoka-u.ac.jp/HP98/studfile/ssm/ssmdata/ssm-08.pdf
で、自分も書いてみた。
で、回した結果は下記。
うん。本の巻末のプログラムもこれで読めるかな。
format文にスラッシュ( / )入れると改行もできるんだな。
で、本の巻末のプログラムを見返した。
なんかformat文に「 TR5 」とか、「 T 」とかある。
これはなんだ。
検索するもなかなか出てこない。
途中で、どうやらformatの記号のアルファベットは
「編集記述子」と言うようだ。
「 f8.3 」とかは「F形式の編集記述子」または「F形編集記述子」と言うらしい。
ということで「T形編集記述子」で検索したら下記のサイトが引っかかった。
>東京理科大学 山本研究室ホームページ
>Fortranマニュアル 入出力編集
>https://www.rs.kagu.tus.ac.jp/yama/f90/FORMAT.html
上記サイトを参考に、さっきのコードを改造してみた。
で、回してみるとこんな感じ。
令和の時代にFortranの勉強をしているのは自分くらいだろうな。
でも、専門の本ってどんどん古くなる。
新しく発売される本には式の根拠とか、基準値の理由とか書いてないんだよな。
プラグラミングもブラックボックス。
計算根拠が分かっている人はどんどん定年になり、退職していく。
ちょっとでいいからそういう根拠とかが分かったらいいなと思う。
(追記)
もう1回、本の巻末のプログラムを見返したら、
配列をDo文を使わずにformat文の書式だけで羅列している。
こんな機能があるんだな。
で、自分もさっきのコードの一番下に配列をDo文を使わずに羅列して書いてみる。
で、実行して結果を出力してみる。
よしよし。
format文をマスターしたぞ。
write文の横が数値だけになってすっきりしたな。
古い本の巻末に書かれているプログラムを読むべく始めたが、
1個書けた。で回った。
(ここにはソースは書かないが。)
1個読めたら全部読めるね。
複数例題が書いてあっても同じ著者がプログラムを書いてるから。
英語とかと違ってプログラムはコードに使っているキーワードが少ないんだよな。
ただ、1個引っかかったのが、
本質的な計算部分ではなく、
画面やテキストファイルに出力する際の
書式のformat文である。
普通はformatの中は数値の全桁数、小数点以下の桁数が
書いてあるはずだが、
本の巻末のプログラムだと、
format文の中に文字が書いてあり、その文字が見出しの様に
画面やファイルにも出力されている。
この形式をマスターせねば本の巻末のプログラムを覚えたことにはならない。
で、下記のサイトを参考にした。
>福岡大学電気工学科
>FORTRAN 言語の構文
>http://tepe.tec.fukuoka-u.ac.jp/HP98/studfile/ssm/ssmdata/ssm-08.pdf
で、自分も書いてみた。
で、回した結果は下記。
うん。本の巻末のプログラムもこれで読めるかな。
format文にスラッシュ( / )入れると改行もできるんだな。
で、本の巻末のプログラムを見返した。
なんかformat文に「 TR5 」とか、「 T 」とかある。
これはなんだ。
検索するもなかなか出てこない。
途中で、どうやらformatの記号のアルファベットは
「編集記述子」と言うようだ。
「 f8.3 」とかは「F形式の編集記述子」または「F形編集記述子」と言うらしい。
ということで「T形編集記述子」で検索したら下記のサイトが引っかかった。
>東京理科大学 山本研究室ホームページ
>Fortranマニュアル 入出力編集
>https://www.rs.kagu.tus.ac.jp/yama/f90/FORMAT.html
上記サイトを参考に、さっきのコードを改造してみた。
で、回してみるとこんな感じ。
令和の時代にFortranの勉強をしているのは自分くらいだろうな。
でも、専門の本ってどんどん古くなる。
新しく発売される本には式の根拠とか、基準値の理由とか書いてないんだよな。
プラグラミングもブラックボックス。
計算根拠が分かっている人はどんどん定年になり、退職していく。
ちょっとでいいからそういう根拠とかが分かったらいいなと思う。
(追記)
もう1回、本の巻末のプログラムを見返したら、
配列をDo文を使わずにformat文の書式だけで羅列している。
こんな機能があるんだな。
で、自分もさっきのコードの一番下に配列をDo文を使わずに羅列して書いてみる。
で、実行して結果を出力してみる。
よしよし。
format文をマスターしたぞ。
write文の横が数値だけになってすっきりしたな。
2021年01月01日
将棋覚えたい
自分は先のことが考えられない。
もう少し言うと「先の先」のことを考えるのが苦手だ。
「これをするとどうなるか」は想像してぼんやり答えれるけど、
「これをするとこうなって、その次にこうなって、その次にこうなって、、」
を順序立てて考えるのは不得手だ。
一方、起こったことを思い出すのは得意である。
よく覚えているね、と言われる。
Gメールなり、evernoteなり検索すれば思い出すヒントは出てくる時代であり、
もしかしたら自分の人間としての記憶力は年齢とともに下がっているかもしれないが。
先のことを「順序だてて」とか「論理的に」考えるのは苦手である。
複数パターンとかもできない。
でも、こういうのって、一定のレベルなら「慣れ」「訓練」で
多少は出来るようになる気がする。
とりあえず、1月1日なので、将棋をしてみることにした。
(昔おばあちゃんの家で百人一首とか将棋とかしてたから。
自分はオセロをしてて、将棋は他の人がやってるのを見てるだけだった。)
最も好きな漫画である「NARUTO」のシカマルのイメージである。
先のことを頭の中で順番に考えることを覚えたいのだ。
(プログラミングだけやっててもしんどいので気晴らしである)
こういうのはゲーム感覚でやるのがきっといいのだろう。
遊びから楽しんで覚えるのだ。
どこでもできる方がいいのでiphoneアプリでやることにする。
で、選んだのが下記のアプリ。
>App Storeプレビュー
>詰将棋 神の1手【初級編】-将棋が上達する無料1手詰み将棋ゲーム
>https://apps.apple.com/jp/app/jie-jiang-qi-shenno1shou-chu/id1145170346
※今、書いていて思ったが「初級編」とあるから、続編があるのか?
神の一手って、、碁のイメージだけど、、。
でも藤井聡太棋聖の将棋でも神の一手という言葉がよく聞かれるな。
タイトル画面はこんな感じ。
ゲーム画面はこんな感じ。
1手だけの詰め将棋が50問ある。
1手だけなら初めての自分でも気軽にできた。
せっかくなので50問全部解いてみた。(下記が全部終わった画面)
よい頭の体操になった。
しばらく詰将棋を趣味にしよう。
※最近、youtubeだけ見てても、最近見るものが減ってきた。
新しいのがアップロードされるより、自分が見る量が上回ってしまった。
このままではつまらない時間が増えてしまうが、
youtube、プログラミング、詰将棋、3つあったら多少改善されるだろう。
(追記)
勢い余って、次のアプリを始めた。
>詰将棋
>UNBARANCE Corporation
>https://www.unbalance.co.jp/sp/app/tsumes/
500円の有料アプリである。
いや、、今だけ110円と書かれている。(1/11までらしい。)
知らずにポチっとしていた。。
有料とか関係ない。
求めているのは自分にあった詰将棋アプリである。
色々他のアプリもダウンロードしたが、
無料のアプリは広告がうざいので有料でも全くかまわない。
(無料のものは1日の回数制限まであるものもある。
なんで回数を制限されないといけないのか。。。)
で、この有料詰将棋アプリのタイトル画面は下記画像。
操作画面はこんな感じ。
このアプリの一手詰の17問をすべて終わらせた。
(全然自慢にはならない。むしろ恥ずかしいが。)
完了状態の画面が下記画像。
次は三手詰になるのか。
一気に難しい、、というかできる気がしない。
(先の先を読めないからこれを始めたのだから。)
しばらく格闘は続く。
(追記その2)
三手詰も全42問終えた、、、。
将棋のプロは天才だな。。
1手先もなかなか読めねえ。。
いい頭の体操になったな。。
(追記その3)
そのままyoutube見る合間に将棋をやってみた。
5手詰を12問までやった。
結構、がんばった。
ただ、詰将棋ばかりやっても、
自分がどれくらいやれるのか実戦しないと分からない。
なので、実戦用のアプリをインストールした。
>AI将棋 ZERO
>https://apps.apple.com/jp/app/ai%E5%B0%86%E6%A3%8B-zero/id1325489888
タイトル画面はこんな感じ。
で、自分はほぼ初めてだから、
入門編でやってみた。
で、結果、勝った!やったね。
詰将棋やった分はちょっとだけ活きたな。
※正月の深夜に何やってんだろう。。
で、勝った時の画面を記念に残した。
持ち駒いっぱいあるな。。。取りすぎだな。
相手の飛車、角がすごい怖いんだよな。。取らないと安心できなかった。
これじゃ入門編でしか勝てないな。。
もう少し言うと「先の先」のことを考えるのが苦手だ。
「これをするとどうなるか」は想像してぼんやり答えれるけど、
「これをするとこうなって、その次にこうなって、その次にこうなって、、」
を順序立てて考えるのは不得手だ。
一方、起こったことを思い出すのは得意である。
よく覚えているね、と言われる。
Gメールなり、evernoteなり検索すれば思い出すヒントは出てくる時代であり、
もしかしたら自分の人間としての記憶力は年齢とともに下がっているかもしれないが。
先のことを「順序だてて」とか「論理的に」考えるのは苦手である。
複数パターンとかもできない。
でも、こういうのって、一定のレベルなら「慣れ」「訓練」で
多少は出来るようになる気がする。
とりあえず、1月1日なので、将棋をしてみることにした。
(昔おばあちゃんの家で百人一首とか将棋とかしてたから。
自分はオセロをしてて、将棋は他の人がやってるのを見てるだけだった。)
最も好きな漫画である「NARUTO」のシカマルのイメージである。
先のことを頭の中で順番に考えることを覚えたいのだ。
(プログラミングだけやっててもしんどいので気晴らしである)
こういうのはゲーム感覚でやるのがきっといいのだろう。
遊びから楽しんで覚えるのだ。
どこでもできる方がいいのでiphoneアプリでやることにする。
で、選んだのが下記のアプリ。
>App Storeプレビュー
>詰将棋 神の1手【初級編】-将棋が上達する無料1手詰み将棋ゲーム
>https://apps.apple.com/jp/app/jie-jiang-qi-shenno1shou-chu/id1145170346
※今、書いていて思ったが「初級編」とあるから、続編があるのか?
神の一手って、、碁のイメージだけど、、。
でも藤井聡太棋聖の将棋でも神の一手という言葉がよく聞かれるな。
タイトル画面はこんな感じ。
ゲーム画面はこんな感じ。
1手だけの詰め将棋が50問ある。
1手だけなら初めての自分でも気軽にできた。
せっかくなので50問全部解いてみた。(下記が全部終わった画面)
よい頭の体操になった。
しばらく詰将棋を趣味にしよう。
※最近、youtubeだけ見てても、最近見るものが減ってきた。
新しいのがアップロードされるより、自分が見る量が上回ってしまった。
このままではつまらない時間が増えてしまうが、
youtube、プログラミング、詰将棋、3つあったら多少改善されるだろう。
(追記)
勢い余って、次のアプリを始めた。
>詰将棋
>UNBARANCE Corporation
>https://www.unbalance.co.jp/sp/app/tsumes/
500円の有料アプリである。
いや、、今だけ110円と書かれている。(1/11までらしい。)
知らずにポチっとしていた。。
有料とか関係ない。
求めているのは自分にあった詰将棋アプリである。
色々他のアプリもダウンロードしたが、
無料のアプリは広告がうざいので有料でも全くかまわない。
(無料のものは1日の回数制限まであるものもある。
なんで回数を制限されないといけないのか。。。)
で、この有料詰将棋アプリのタイトル画面は下記画像。
操作画面はこんな感じ。
このアプリの一手詰の17問をすべて終わらせた。
(全然自慢にはならない。むしろ恥ずかしいが。)
完了状態の画面が下記画像。
次は三手詰になるのか。
一気に難しい、、というかできる気がしない。
(先の先を読めないからこれを始めたのだから。)
しばらく格闘は続く。
(追記その2)
三手詰も全42問終えた、、、。
将棋のプロは天才だな。。
1手先もなかなか読めねえ。。
いい頭の体操になったな。。
(追記その3)
そのままyoutube見る合間に将棋をやってみた。
5手詰を12問までやった。
結構、がんばった。
ただ、詰将棋ばかりやっても、
自分がどれくらいやれるのか実戦しないと分からない。
なので、実戦用のアプリをインストールした。
>AI将棋 ZERO
>https://apps.apple.com/jp/app/ai%E5%B0%86%E6%A3%8B-zero/id1325489888
タイトル画面はこんな感じ。
で、自分はほぼ初めてだから、
入門編でやってみた。
で、結果、勝った!やったね。
詰将棋やった分はちょっとだけ活きたな。
※正月の深夜に何やってんだろう。。
で、勝った時の画面を記念に残した。
持ち駒いっぱいあるな。。。取りすぎだな。
相手の飛車、角がすごい怖いんだよな。。取らないと安心できなかった。
これじゃ入門編でしか勝てないな。。
2020年12月30日
fortranのif文、行番号、go to
windows10でfortran使って波形データ読み込み
スペクトル解析の古い本の巻末に載っているfortranのプログラムを解読して
windows10のsurface proで回してみようとして始めた
この作業。
前回はサブルーチンの書き方、使い方を覚えた。
本の巻末に載っているプログラムで波の解析をするのに、
そういえば波形データの読み込みのプログラムが載ってない。
なので、自力で書くしかない。
で、試行錯誤して書いてみた。
かなり苦戦した。(下記画像)
これがメインのプログラム。
で、これがテキストファイルを読み込むサブルーチン。
で、こちらが、読み込んだ配列を確認用にテキストファイルに出力するプログラム。
波形データは固定長で、1個のデータが8文字(うち3桁が少数)、
1行あたり9個のデータがあり、299行あるデータを読み込むプログラムである。
よくわからないが、
サブルーチンだと配列のサイズの宣言に9*mと式を入れても回るのに、
メインのプログラムだと配列のサイズの宣言に整数を入れないと回らない。(そこは諦めた)
これによりdoループ、formatも勉強した。
どうやら行の最初にある数値はdoループ、format、あとgo toで使うようだ。
go toとif文くらいを覚えたら、あとは
計算内容の理解だけだと思う。
というか、昔のプログラムはどんだけgo to文があるんだ。。かなり多いなあ。
糖質減らしている状態で、つかれた。。
細かいことは書けそうにない。(エラーつぶしに苦労した。。)
化石プログラムにここまで労力を使うとは、、無駄な気がしてきた。。
(こんなことはこの令和の時代に同じ職の人は誰もやらないな。)
でも、やる。
windows10のsurface proで回してみようとして始めた
この作業。
前回はサブルーチンの書き方、使い方を覚えた。
本の巻末に載っているプログラムで波の解析をするのに、
そういえば波形データの読み込みのプログラムが載ってない。
なので、自力で書くしかない。
で、試行錯誤して書いてみた。
かなり苦戦した。(下記画像)
これがメインのプログラム。
で、これがテキストファイルを読み込むサブルーチン。
で、こちらが、読み込んだ配列を確認用にテキストファイルに出力するプログラム。
波形データは固定長で、1個のデータが8文字(うち3桁が少数)、
1行あたり9個のデータがあり、299行あるデータを読み込むプログラムである。
よくわからないが、
サブルーチンだと配列のサイズの宣言に9*mと式を入れても回るのに、
メインのプログラムだと配列のサイズの宣言に整数を入れないと回らない。(そこは諦めた)
これによりdoループ、formatも勉強した。
どうやら行の最初にある数値はdoループ、format、あとgo toで使うようだ。
go toとif文くらいを覚えたら、あとは
計算内容の理解だけだと思う。
というか、昔のプログラムはどんだけgo to文があるんだ。。かなり多いなあ。
糖質減らしている状態で、つかれた。。
細かいことは書けそうにない。(エラーつぶしに苦労した。。)
化石プログラムにここまで労力を使うとは、、無駄な気がしてきた。。
(こんなことはこの令和の時代に同じ職の人は誰もやらないな。)
でも、やる。
2020年12月27日
fortranのプログラムの形式
スペクトル解析の古い本の巻末に載っているfortranのプログラムを解読して
windows10のsurface proで回してみようとして始めた
この作業。
巻末に載っているプログラムには
なんか1文字目にCという文字や、
各行の最初に3桁の番号や*(アスタリスク)がある。
なんだろう。
で、下記のサイトを見てみる。
>JAMSTEC 国立研究開発法人 海洋研究開発機構
>EARTH SIMULATOR
>参考資料 Fortran90を用いたプログラミングの記述方法
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/index.html
>2章:Fortran90プログラミング基礎
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap2/page1.html
どうやら自由形式と固定形式があるらしい。
Cと*とか3桁の数値とかが行の最初に書いてあるのは固定形式らしい。
今回はどっちで書いたらよいのだろう。
あと、Cや*は注釈行(コメント?)らしい。
あと、拡張子についても説明が書いてある。
ファイル名はtest.f90にしているが、
どうやら.f90は自由形式らしい。(固定形式は.fのようだ。)
なので、MinGW-64では.fでもプログラムが回るのかを確かめてみる。
コードを固定形式で書いてみた。(下記画像)
で、回してみる。
正しく出力された。
どうやら固定形式にも対応しているようだ。
なので、今後は固定形式で書いていくことにする。
(本の巻末のプログラムを写すだけでいいから。もちろん勉強+理解しながら打つが。)
で、本の巻末のコードの中身を再度見ていくと、
最初にSUBROUTINEと書いてある、、、
これはvbaでいうsubプロシージャと違うのだろうか。
よくわからないので、先ほどの海洋研究開発機構のサイトをまた見てみる。
(なんでかわからんがこんな組織のホームぺージにfortranのまとめサイトがあるとは。
ありがたや。)
>JAMSTEC 国立研究開発法人 海洋研究開発機構
>EARTH SIMULATOR
>参考資料 Fortran90を用いたプログラミングの記述方法
>4章:関数とサブルーチン
>4.2 副プログラム
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap4/page2.html
>4.3 サブルーチン
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap4/page3.html
うーん、「内部関数、外部関数」と「サブルーチン」
の違いが分からん。
(文関数はなんとなくわかった)
これは実際にいくつか簡単なプログラムを書いてみるしかないな。
といっても、正式なfortranのプログラムの構成を知らん。
ということで今度は下記を見てみる。
>JAMSTEC 国立研究開発法人 海洋研究開発機構
>EARTH SIMULATOR
>参考資料 Fortran90を用いたプログラミングの記述方法
>2章:Fortran90プログラミング基礎
>2.1 プログラムの基本構成
>2.1.2 プログラムの構成について
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap2/page1.html
前回書いた、テキストファイルに’Hello World!’を出力するプログラムに
見出しや、暗黙の型宣言無効の「implicit none」を付け加えてみる。(下記画像)
回してみても、前回と変わらずテキストファイルに’Hello World!’が出力された。
スペクトル解析の本の巻末に載っているプログラムは全部サブルーチンとして書かれており、
それを回すためのメインのプログラムは自分で書くことになっているから、
fortranのメインのプログラムの書き方を覚えておかないとね。
そういえば無意識にコードを小文字で書いている、、
本の巻末に載っているプログラムは全部大文字だけど。いいのかな。
まあ、大文字と小文字は区別しないらしいからまあいいか。
Atomの予測変換は小文字になるから、小文字で書き続けることにした。
で、今度は変数の宣言と数値計算をちょっと取り入れて
結果をテキストファイルに出力してみる。
変数の宣言は、x1は宣言時に初期値を設定してみて、
y1はx1を使ったべき乗の数式で決まるようにした。(下記画像)
べき乗ってvbaだとA^Bとかになるけど、
fortranだとA**Bになるんだな。知らなかった。
また、宣言時に初期値を設定するコロン2つは、
各サイトだとコロンとコロンの間に半角スペースがあるけど、
実際コンパイルしたらエラーになって、
半角スペースを抜いたら回った。なんでかはわからんがまあいいや。
結果もきちんと出力された。よしよし。(下記画像)
次は外部関数のプログラムを書いてみる。
どのプログラミング言語の例題でもよくある、
数値を入れ替えるswap関数である。
これにより、外部関数の引数がvbaで言う「値渡し」なのか「参照渡し」なのかを
確認したい。(下記画像)
もし関数内ではxとyを入れ替えたのに、
メインのプログラムの中では値が入れ替わってなければ「値渡し」、
メインのプログラムの中でも値が入れ替わっていれば「参照渡し」ということだ。
で、回してみる。
、、お、値が入れ替わっている。
3つの数値のうち、1つ目がx1、2つ目がy1で、当初の値から入れ替わっている。
3つ目の数値はswap関数の戻り値で、1.0が入っているので
プログラムがきちんと回ったことを示している。(下記画像)
下記サイトによると、
引数の場合につけると言われている「intent(in)」をつけると値を変更できないらしい。
今回はつけていないが、付けるとエラーになる。
あと、今回もうひとつ注意すべきは、
下記のサイトによるとメインのプログラムの冒頭で関数名の型の宣言が必要という事だ。
(これを知らなくて何度やってもエラーで困ってたので、下記サイトのおかげで助かった、、、)
>筑波大学 計算科学研究センター 原子核物理研究部門 日野原 伸生 計算物理学II
>Fortranの文法まとめ
>https://wwwnucl.ph.tsukuba.ac.jp/~hinohara/compphys2-20/doc/fortran.pdf
で、次に、同じ内容を内部関数として記述してみる。
特筆すべきは
・mainのプログラムの冒頭の関数名の型宣言は不要
・mainのプログラムのstopのあとにcontainsを記載し、
end programとの間に関数を記載する。
(stopの位置に迷ったが、下記サイトを参考にした。)
・関数の中身は外部関数の時と同じ。
>Takanobu Amano @ U-Tokyo Fortran演習 (地球惑星物理学演習)
>7. 関数とサブルーチン
>https://amanotk.github.io/fortran-resume-public/chap07.html
で、解析を回したところ、きちんと回った。
(外部関数のときと同じで引数に使った数値がmainプログラム内でも入れ替わっている。)
よし、最後にサブルーチンで書いてみよう。
特筆すべきは
・引数に戻り値用の変数を用意してあげないとサブルーチン内で初めて登場する変数は
返せない。(retはプログラムがきちんと回ったことの確認出力用なのでintent(out)を記載した。)
・main関数内でcallで呼びだす。
・retを引数に増やしたから、mainプログラム冒頭でも型を宣言。
かな。
実際に回してみると、きちんと回った。
で、はき出されたテキストファイルを見ても、
main関数側のx1とy1はきちんと入れ替わっていた。(参照渡しということ)
最後の戻り値であるretも1.0になっている。
よしよし。できたぞ。
これでサブルーチンが使えるぞ。
次に、サブルーチンだけ別ファイルに書いてみたい。
まずこれがmainプログラム(test.f)。
で、次がサブルーチン(sub01.f)。
で、コンパイルするときのBATファイルの中身は、ソースファイル名を2つ並べるだけ。
で、はき出されたa.exeを実行すると、きちんと同じ結果が出た。
(しつこいので出力の画像は貼らないが。)
これで本の巻末に書いてあるサブルーチンを使えるようになる第1歩が終わったな。
windows10のsurface proで回してみようとして始めた
この作業。
巻末に載っているプログラムには
なんか1文字目にCという文字や、
各行の最初に3桁の番号や*(アスタリスク)がある。
なんだろう。
で、下記のサイトを見てみる。
>JAMSTEC 国立研究開発法人 海洋研究開発機構
>EARTH SIMULATOR
>参考資料 Fortran90を用いたプログラミングの記述方法
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/index.html
>2章:Fortran90プログラミング基礎
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap2/page1.html
どうやら自由形式と固定形式があるらしい。
Cと*とか3桁の数値とかが行の最初に書いてあるのは固定形式らしい。
今回はどっちで書いたらよいのだろう。
あと、Cや*は注釈行(コメント?)らしい。
あと、拡張子についても説明が書いてある。
ファイル名はtest.f90にしているが、
どうやら.f90は自由形式らしい。(固定形式は.fのようだ。)
なので、MinGW-64では.fでもプログラムが回るのかを確かめてみる。
コードを固定形式で書いてみた。(下記画像)
で、回してみる。
正しく出力された。
どうやら固定形式にも対応しているようだ。
なので、今後は固定形式で書いていくことにする。
(本の巻末のプログラムを写すだけでいいから。もちろん勉強+理解しながら打つが。)
で、本の巻末のコードの中身を再度見ていくと、
最初にSUBROUTINEと書いてある、、、
これはvbaでいうsubプロシージャと違うのだろうか。
よくわからないので、先ほどの海洋研究開発機構のサイトをまた見てみる。
(なんでかわからんがこんな組織のホームぺージにfortranのまとめサイトがあるとは。
ありがたや。)
>JAMSTEC 国立研究開発法人 海洋研究開発機構
>EARTH SIMULATOR
>参考資料 Fortran90を用いたプログラミングの記述方法
>4章:関数とサブルーチン
>4.2 副プログラム
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap4/page2.html
>4.3 サブルーチン
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap4/page3.html
うーん、「内部関数、外部関数」と「サブルーチン」
の違いが分からん。
(文関数はなんとなくわかった)
これは実際にいくつか簡単なプログラムを書いてみるしかないな。
といっても、正式なfortranのプログラムの構成を知らん。
ということで今度は下記を見てみる。
>JAMSTEC 国立研究開発法人 海洋研究開発機構
>EARTH SIMULATOR
>参考資料 Fortran90を用いたプログラミングの記述方法
>2章:Fortran90プログラミング基礎
>2.1 プログラムの基本構成
>2.1.2 プログラムの構成について
>https://www.jamstec.go.jp/es/jp/simschool/f90learning/chap2/page1.html
前回書いた、テキストファイルに’Hello World!’を出力するプログラムに
見出しや、暗黙の型宣言無効の「implicit none」を付け加えてみる。(下記画像)
回してみても、前回と変わらずテキストファイルに’Hello World!’が出力された。
スペクトル解析の本の巻末に載っているプログラムは全部サブルーチンとして書かれており、
それを回すためのメインのプログラムは自分で書くことになっているから、
fortranのメインのプログラムの書き方を覚えておかないとね。
そういえば無意識にコードを小文字で書いている、、
本の巻末に載っているプログラムは全部大文字だけど。いいのかな。
まあ、大文字と小文字は区別しないらしいからまあいいか。
Atomの予測変換は小文字になるから、小文字で書き続けることにした。
で、今度は変数の宣言と数値計算をちょっと取り入れて
結果をテキストファイルに出力してみる。
変数の宣言は、x1は宣言時に初期値を設定してみて、
y1はx1を使ったべき乗の数式で決まるようにした。(下記画像)
べき乗ってvbaだとA^Bとかになるけど、
fortranだとA**Bになるんだな。知らなかった。
また、宣言時に初期値を設定するコロン2つは、
各サイトだとコロンとコロンの間に半角スペースがあるけど、
実際コンパイルしたらエラーになって、
半角スペースを抜いたら回った。なんでかはわからんがまあいいや。
結果もきちんと出力された。よしよし。(下記画像)
次は外部関数のプログラムを書いてみる。
どのプログラミング言語の例題でもよくある、
数値を入れ替えるswap関数である。
これにより、外部関数の引数がvbaで言う「値渡し」なのか「参照渡し」なのかを
確認したい。(下記画像)
もし関数内ではxとyを入れ替えたのに、
メインのプログラムの中では値が入れ替わってなければ「値渡し」、
メインのプログラムの中でも値が入れ替わっていれば「参照渡し」ということだ。
で、回してみる。
、、お、値が入れ替わっている。
3つの数値のうち、1つ目がx1、2つ目がy1で、当初の値から入れ替わっている。
3つ目の数値はswap関数の戻り値で、1.0が入っているので
プログラムがきちんと回ったことを示している。(下記画像)
下記サイトによると、
引数の場合につけると言われている「intent(in)」をつけると値を変更できないらしい。
今回はつけていないが、付けるとエラーになる。
あと、今回もうひとつ注意すべきは、
下記のサイトによるとメインのプログラムの冒頭で関数名の型の宣言が必要という事だ。
(これを知らなくて何度やってもエラーで困ってたので、下記サイトのおかげで助かった、、、)
>筑波大学 計算科学研究センター 原子核物理研究部門 日野原 伸生 計算物理学II
>Fortranの文法まとめ
>https://wwwnucl.ph.tsukuba.ac.jp/~hinohara/compphys2-20/doc/fortran.pdf
で、次に、同じ内容を内部関数として記述してみる。
特筆すべきは
・mainのプログラムの冒頭の関数名の型宣言は不要
・mainのプログラムのstopのあとにcontainsを記載し、
end programとの間に関数を記載する。
(stopの位置に迷ったが、下記サイトを参考にした。)
・関数の中身は外部関数の時と同じ。
>Takanobu Amano @ U-Tokyo Fortran演習 (地球惑星物理学演習)
>7. 関数とサブルーチン
>https://amanotk.github.io/fortran-resume-public/chap07.html
で、解析を回したところ、きちんと回った。
(外部関数のときと同じで引数に使った数値がmainプログラム内でも入れ替わっている。)
よし、最後にサブルーチンで書いてみよう。
特筆すべきは
・引数に戻り値用の変数を用意してあげないとサブルーチン内で初めて登場する変数は
返せない。(retはプログラムがきちんと回ったことの確認出力用なのでintent(out)を記載した。)
・main関数内でcallで呼びだす。
・retを引数に増やしたから、mainプログラム冒頭でも型を宣言。
かな。
実際に回してみると、きちんと回った。
で、はき出されたテキストファイルを見ても、
main関数側のx1とy1はきちんと入れ替わっていた。(参照渡しということ)
最後の戻り値であるretも1.0になっている。
よしよし。できたぞ。
これでサブルーチンが使えるぞ。
次に、サブルーチンだけ別ファイルに書いてみたい。
まずこれがmainプログラム(test.f)。
で、次がサブルーチン(sub01.f)。
で、コンパイルするときのBATファイルの中身は、ソースファイル名を2つ並べるだけ。
で、はき出されたa.exeを実行すると、きちんと同じ結果が出た。
(しつこいので出力の画像は貼らないが。)
これで本の巻末に書いてあるサブルーチンを使えるようになる第1歩が終わったな。
2020年12月26日
fortranのエディタにAtom使いたい
前回、windows10 64bitのsurface proで
fortranのプログラムをメモ帳で数行書いて、
テキストファイルをはき出してみた。
>fortranでテキストファイル出力してみる
>https://fanblogs.jp/mountain4101/archive/70/0
まあ3、4行のはじめてのコードならよいが、
本当に使うなら、ちゃんとしたテキストエディタがほしい。
きっときちんとしたエディタにはエラーチェック機能が
あるのではないだろうか。
ということで、ネットで検索してみると、
Atomというエディタがよいようである。
ダウンロードしようとサイトに行くと、
やけにかわいい画面。(下記画像)
バージョンは1.53.0
さっそくダウンロードしてインストールを試みる。
で、下記のサイトを参考にした。
>エンジニアの入り口
>【すぐわかる!】Atomエディタのインストールと日本語化、便利な使い方
>https://eng-entrance.com/atom-editor
インストールしようとすると
これまたおしゃれな画面が立ち上がった。
で、終わると以下の画面があがった。
「Register as default atom:// URI handler?」
と聞かれるので、ここは「No,Never」を選ぶらしい。
上記サイトのとおりに
「Japanese-menu」のpackageをインストール。
お、日本語になった。
よくわからないが、文字コードを「Japanese(Shift JIS)」にしてみる。
次に上記サイトのとおり「auto-encoding」をインストールした。
ずっと画面左の方に
「Your project is currently empty」
と表示されているのでフォルダの場所を設定してみる。
とりあえずデスクトップでatomのいう名前のフォルダにしてみた。
画面真ん中に「Telemetry Consent」というタブがあるが、
これは「No, do not send my usage data」を選んだ。
これで上記サイトに書いてあることはやった気がするが、
そういえば、fortran関連の設定をしていないから、
何のプログラミング言語に使うかが設定されていないはず。
で、下記サイトに書いてある5項目くらいのうち
・ファイルの種類別にアイコンを変えるという「file-icons」のインストール
・Fortranのシンタックスを有効にするという「language-fortran」のインストール
をやってみる。
>カオスラボ
>Atomの設定
>http://chaoscloud950.blog60.fc2.com/blog-entry-52.html
今までインストールしたパッケージは下記画像の4つだ。
次に下記のサイトを参考にしてエディタの設定をした。
>WebDesigner's Memorandum ウェブデザイナーの備忘録
>テキストエディタのAtomをインストールしたら最低限設定しておきたいアレコレ
>https://webrandum.net/atom-base-setting/
・インデントガイドを表示
・不可視文字を追加
・ソフトタブ
にチェックを入れた。
編集画面はこんな感じ。
とりあえず、これで始めれるだろう。
メモ帳よりはだいぶましだと思うので。
使いながら便利なパッケージがあれば追加するだな。
fortranのプログラムをメモ帳で数行書いて、
テキストファイルをはき出してみた。
>fortranでテキストファイル出力してみる
>https://fanblogs.jp/mountain4101/archive/70/0
まあ3、4行のはじめてのコードならよいが、
本当に使うなら、ちゃんとしたテキストエディタがほしい。
きっときちんとしたエディタにはエラーチェック機能が
あるのではないだろうか。
ということで、ネットで検索してみると、
Atomというエディタがよいようである。
ダウンロードしようとサイトに行くと、
やけにかわいい画面。(下記画像)
バージョンは1.53.0
さっそくダウンロードしてインストールを試みる。
で、下記のサイトを参考にした。
>エンジニアの入り口
>【すぐわかる!】Atomエディタのインストールと日本語化、便利な使い方
>https://eng-entrance.com/atom-editor
インストールしようとすると
これまたおしゃれな画面が立ち上がった。
で、終わると以下の画面があがった。
「Register as default atom:// URI handler?」
と聞かれるので、ここは「No,Never」を選ぶらしい。
上記サイトのとおりに
「Japanese-menu」のpackageをインストール。
お、日本語になった。
よくわからないが、文字コードを「Japanese(Shift JIS)」にしてみる。
次に上記サイトのとおり「auto-encoding」をインストールした。
ずっと画面左の方に
「Your project is currently empty」
と表示されているのでフォルダの場所を設定してみる。
とりあえずデスクトップでatomのいう名前のフォルダにしてみた。
画面真ん中に「Telemetry Consent」というタブがあるが、
これは「No, do not send my usage data」を選んだ。
これで上記サイトに書いてあることはやった気がするが、
そういえば、fortran関連の設定をしていないから、
何のプログラミング言語に使うかが設定されていないはず。
で、下記サイトに書いてある5項目くらいのうち
・ファイルの種類別にアイコンを変えるという「file-icons」のインストール
・Fortranのシンタックスを有効にするという「language-fortran」のインストール
をやってみる。
>カオスラボ
>Atomの設定
>http://chaoscloud950.blog60.fc2.com/blog-entry-52.html
今までインストールしたパッケージは下記画像の4つだ。
次に下記のサイトを参考にしてエディタの設定をした。
>WebDesigner's Memorandum ウェブデザイナーの備忘録
>テキストエディタのAtomをインストールしたら最低限設定しておきたいアレコレ
>https://webrandum.net/atom-base-setting/
・インデントガイドを表示
・不可視文字を追加
・ソフトタブ
にチェックを入れた。
編集画面はこんな感じ。
とりあえず、これで始めれるだろう。
メモ帳よりはだいぶましだと思うので。
使いながら便利なパッケージがあれば追加するだな。
2020年12月24日
fortranでテキストファイル出力してみる
昨日からfortranを始めた。
まず初めてコンパイル、実行したとき、
いちいちコマンドプロンプトに打ち込むのが面倒だった。
なので下記の画像のBATファイルを作成した。
このBATファイルをダブルクリックすれば
test.f90がコンパイルされ、
a.exeがフォルダ内に出力されるようなった。(下記画像)
ついでに、
a.exeをコマンドプロンプトから実行する
BATファイルを作成してみた。
で、このBATファイルをダブルクリックすると、
コマンドプロンプトが立上り、
Hello World!の文字が出た!
よしよし。
じゃあ、BATファイルを介さず、a.exeをそのままダブルクリックしてもいいかと思ったが、
ダブルクリックするとエラーで実行されない。(下記画像)
きちんとコマンドプロンプト上で実行すると実行できた。
これはコマンドプロンプト上でPASSを指定しているからである。
(環境変数でPASSを登録しても実行できる)
でもexeファイルをダブルクリックして実行できないなんて変だ、と思い
検索して調べると下記のサイトが見つかった。
>プログラミングやってみる!
>.dllが見つかりません。
>http://proprog583.blog.fc2.com/blog-entry-3.html
どうやら
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
のなかにある
・libgcc_s_seh-1.dll
・libquadmath-0.dll
・libwinpthread-1.dll
の3つがa.exeと同じフォルダにあると動くようなので
コピーしてみる。
でダブルクリックしたところ、上記サイトにあるようにエラーなく動いたが、
コマンドプロンプトが出ない(一瞬で消えている?)ので
exeファイルをダブルクリックだとHello World!の文字が見れず
プログラムが本当に想定通りに動いたか確かめれない。
なので、、、
実行されるとtextファイルをはき出すプログラムを書きたい。
(そうすればきちんと実行されたか分かるので。)
で、下記のサイトを参考にしてプログラムを書いてみた。(下記画像)
>nag
>Fortran 入門
>15 ファイル操作
>https://www.nag-j.co.jp/fortran/FI_15.html
writeのカッコの中の意味は以下のサイトを参考にした。
>[itbase2018]Fortran 実習 入出力
>https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?%5Bitbase2018%5DFortran+%E5%AE%9F%E7%BF%92+%E5%85%A5%E5%87%BA%E5%8A%9B
で、コンパイルしてみる。
先ほど作ったtest.batファイルをダブルクリックするとa.exeがはき出され、
a.exeをダブルクリックするとoutput.txtがはき出される。(下記画像)
ちなみに
・libgcc_s_seh-1.dll
・libquadmath-0.dll
・libwinpthread-1.dll
の3つはフォルダ内に入れっぱなし。
理由は、素人の素朴な印象として
exeファイルって環境変数でPATHを設定しないと使えないなんて
変だな、って思ったから。
(便利なプログラム作っても、環境変数を設定しないといけないとコピペで渡せないよね。
まあ、PATHを指定したa.batを一緒に入れておけばいいわけだが。)
で、はき出されたoutput.txtの中身を開くとこうなっている。
なんか、、
1文字目になぞのスペースがある、、
どうしてだろう。
'hello, world!'と打ったから、
1文字目にスペースは入れてないのに!
そんなことが気になるのはA型だからなのか、それとも糖質制限してイライラしているのか。
で、色々調べてみる。
どうやら、書式を指定しないと1文字目にスペースが入るようだ。
なので文字列としての’(a)’をwriteのカッコ内に入力してみる。
で、コンパイルして、実行して、はき出されたテキストファイルを見てみる。
やった!できてる。(下記画像)
1文字目にスペースなしになってる!
よしよし。
今回はここまでだな。
まず初めてコンパイル、実行したとき、
いちいちコマンドプロンプトに打ち込むのが面倒だった。
なので下記の画像のBATファイルを作成した。
このBATファイルをダブルクリックすれば
test.f90がコンパイルされ、
a.exeがフォルダ内に出力されるようなった。(下記画像)
ついでに、
a.exeをコマンドプロンプトから実行する
BATファイルを作成してみた。
で、このBATファイルをダブルクリックすると、
コマンドプロンプトが立上り、
Hello World!の文字が出た!
よしよし。
じゃあ、BATファイルを介さず、a.exeをそのままダブルクリックしてもいいかと思ったが、
ダブルクリックするとエラーで実行されない。(下記画像)
きちんとコマンドプロンプト上で実行すると実行できた。
これはコマンドプロンプト上でPASSを指定しているからである。
(環境変数でPASSを登録しても実行できる)
でもexeファイルをダブルクリックして実行できないなんて変だ、と思い
検索して調べると下記のサイトが見つかった。
>プログラミングやってみる!
>.dllが見つかりません。
>http://proprog583.blog.fc2.com/blog-entry-3.html
どうやら
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
のなかにある
・libgcc_s_seh-1.dll
・libquadmath-0.dll
・libwinpthread-1.dll
の3つがa.exeと同じフォルダにあると動くようなので
コピーしてみる。
でダブルクリックしたところ、上記サイトにあるようにエラーなく動いたが、
コマンドプロンプトが出ない(一瞬で消えている?)ので
exeファイルをダブルクリックだとHello World!の文字が見れず
プログラムが本当に想定通りに動いたか確かめれない。
なので、、、
実行されるとtextファイルをはき出すプログラムを書きたい。
(そうすればきちんと実行されたか分かるので。)
で、下記のサイトを参考にしてプログラムを書いてみた。(下記画像)
>nag
>Fortran 入門
>15 ファイル操作
>https://www.nag-j.co.jp/fortran/FI_15.html
writeのカッコの中の意味は以下のサイトを参考にした。
>[itbase2018]Fortran 実習 入出力
>https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?%5Bitbase2018%5DFortran+%E5%AE%9F%E7%BF%92+%E5%85%A5%E5%87%BA%E5%8A%9B
で、コンパイルしてみる。
先ほど作ったtest.batファイルをダブルクリックするとa.exeがはき出され、
a.exeをダブルクリックするとoutput.txtがはき出される。(下記画像)
ちなみに
・libgcc_s_seh-1.dll
・libquadmath-0.dll
・libwinpthread-1.dll
の3つはフォルダ内に入れっぱなし。
理由は、素人の素朴な印象として
exeファイルって環境変数でPATHを設定しないと使えないなんて
変だな、って思ったから。
(便利なプログラム作っても、環境変数を設定しないといけないとコピペで渡せないよね。
まあ、PATHを指定したa.batを一緒に入れておけばいいわけだが。)
で、はき出されたoutput.txtの中身を開くとこうなっている。
なんか、、
1文字目になぞのスペースがある、、
どうしてだろう。
'hello, world!'と打ったから、
1文字目にスペースは入れてないのに!
そんなことが気になるのはA型だからなのか、それとも糖質制限してイライラしているのか。
で、色々調べてみる。
どうやら、書式を指定しないと1文字目にスペースが入るようだ。
なので文字列としての’(a)’をwriteのカッコ内に入力してみる。
で、コンパイルして、実行して、はき出されたテキストファイルを見てみる。
やった!できてる。(下記画像)
1文字目にスペースなしになってる!
よしよし。
今回はここまでだな。
2020年12月23日
windows10でfortran
久しぶりに記事を書いてみることにした。
ここ2年間とても忙しかったが、この年末は落ち着いている。
怪我のせいでしばらく運動はできないし、
コロナのせいで外出もあまりできない(気乗りがしない)。
ふと昔の専門書を読んでいる。(スペクトル解析の本)
大学院の時に勧められたとても良い本らしい。
ただ、自分は大学院の時は読んでも理解できなかった。(優秀ではなかったのだ)
大学院の時が23〜24歳、今はもう37歳のおじさんだ。
一応、専門分野の職に就いているが、
その本の内容は使うことはない。
ただ、
・理解出来たらワンランク上の目線で仕事ができるかもしれない、、
・今の自分なら大学院の時より理解できるのでは、、、
・これらの内容が理解できる大学の先生はかっこよかったな、、
などという根拠のない好奇心で当時の専門書を読んでいる。
古いので巻末に載っているプログラムがfortranで書かれている。
大学の時は世間がC言語やC++を使っているときに
2006年〜2007年当時、自分の周りの研究室の大学院生はなぜかfortranを使っていた。
自分はC++は使ったことあるがfortranは使ったことない。
会社に入ってからは仕事でexcelを多用する関係で、新入社員の時からvbaを少しずつ覚えた。
そしてあれから13年経った今、世間ではpythonがはやっている。
(自分は遊びでいじったことがある程度である)
そんな時代にfortranを覚えても無駄なのだが、
あえて無駄なことをしてみる。
このwindows10、64bitのsurface proで
古い専門書の巻末に載っているfortranのプログラムを回してみたい。
(ここでワンピースのポーネグリフを連想した自分は気持ち悪いと思う。
考古学者の気持ちはこんな感じなのだろうか。)
まず、googleで「fortran free windows10」で検索してみる。
すると、下記のサイトが引っかかる。
>TIM Labs タイムインターメディア技術者ブログ
>Windows10でFORTRANを動かさねばならない(上)
>http://labs.timedia.co.jp/2017/06/gnufortran.html
どうやらgfortranというものを使えばよいらしい。
今度は「gfortran windows10 64bit」で検索してみる。
すると、下記のサイトが引っかかる。
>あらきけいすけの雑記帳
>64bit の Windows10 上でフリーの fortran コンパイラを導入して、簡単なプログラムを作成する
>https://arakik10.hatenadiary.org/entry/20160101/p1
MinGW-w64というのをインストールするのが簡単らしい。
でインストールしてみる。
上記サイトにあるとおりに
インストールの際、versionは最新の8.1.0で、
Architectureはx86_64にした。
上記サイトに記載の通り、デスクトップにfortフォルダを作成して
mingw-w64.batのファイルをfortフォルダへ移動し、設定もした。
でmingw-w64.batを実行して表示されたコマンドプロンプトに「gfortran[enter]」と打ったが
以下の写真のようにエラーになる。
なんかおかしい。
もしかしてと思い、「gfortran」と打ってenterキーを押すとなんか動いた。(下記画像)
[enter]ってキーを打つことなのね。
そのまま上記サイトの通りに入力ファイルをメモ帳で作成する。(下記画像)
そして上記サイトの通りにコマンドプロンプトに「gfortran test.f90」と打ってみた。
おー、ちゃんとexeファイルが出力された。感動である。(下記画像)
そしてa.exeをダブルクリックしてみる。
なぜかエラー。(下記画像)
どうやらコマンドプロンプトで実行しないといけないようだ。
(パスを通せば行けるのだろうか?)
とりあえず、mingw-w64.batでコマンドプロンプトを立ち上げ、
「a.exe」と打ってみる。
「Hello world!」が表示された!
やったね。(下記画像)
なんかいちいちコマンドプロンプトを起動するのは面倒だ。
(入力ファイル名固定でバッチファイルを作ってしまったほうがよいのか?)
とりあえずfortranが使える環境ができた。
今日はここまでだ。
またいろいろやっていこう。
ここ2年間とても忙しかったが、この年末は落ち着いている。
怪我のせいでしばらく運動はできないし、
コロナのせいで外出もあまりできない(気乗りがしない)。
ふと昔の専門書を読んでいる。(スペクトル解析の本)
大学院の時に勧められたとても良い本らしい。
ただ、自分は大学院の時は読んでも理解できなかった。(優秀ではなかったのだ)
大学院の時が23〜24歳、今はもう37歳のおじさんだ。
一応、専門分野の職に就いているが、
その本の内容は使うことはない。
ただ、
・理解出来たらワンランク上の目線で仕事ができるかもしれない、、
・今の自分なら大学院の時より理解できるのでは、、、
・これらの内容が理解できる大学の先生はかっこよかったな、、
などという根拠のない好奇心で当時の専門書を読んでいる。
古いので巻末に載っているプログラムがfortranで書かれている。
大学の時は世間がC言語やC++を使っているときに
2006年〜2007年当時、自分の周りの研究室の大学院生はなぜかfortranを使っていた。
自分はC++は使ったことあるがfortranは使ったことない。
会社に入ってからは仕事でexcelを多用する関係で、新入社員の時からvbaを少しずつ覚えた。
そしてあれから13年経った今、世間ではpythonがはやっている。
(自分は遊びでいじったことがある程度である)
そんな時代にfortranを覚えても無駄なのだが、
あえて無駄なことをしてみる。
このwindows10、64bitのsurface proで
古い専門書の巻末に載っているfortranのプログラムを回してみたい。
(ここでワンピースのポーネグリフを連想した自分は気持ち悪いと思う。
考古学者の気持ちはこんな感じなのだろうか。)
まず、googleで「fortran free windows10」で検索してみる。
すると、下記のサイトが引っかかる。
>TIM Labs タイムインターメディア技術者ブログ
>Windows10でFORTRANを動かさねばならない(上)
>http://labs.timedia.co.jp/2017/06/gnufortran.html
どうやらgfortranというものを使えばよいらしい。
今度は「gfortran windows10 64bit」で検索してみる。
すると、下記のサイトが引っかかる。
>あらきけいすけの雑記帳
>64bit の Windows10 上でフリーの fortran コンパイラを導入して、簡単なプログラムを作成する
>https://arakik10.hatenadiary.org/entry/20160101/p1
MinGW-w64というのをインストールするのが簡単らしい。
でインストールしてみる。
上記サイトにあるとおりに
インストールの際、versionは最新の8.1.0で、
Architectureはx86_64にした。
上記サイトに記載の通り、デスクトップにfortフォルダを作成して
mingw-w64.batのファイルをfortフォルダへ移動し、設定もした。
でmingw-w64.batを実行して表示されたコマンドプロンプトに「gfortran[enter]」と打ったが
以下の写真のようにエラーになる。
なんかおかしい。
もしかしてと思い、「gfortran」と打ってenterキーを押すとなんか動いた。(下記画像)
[enter]ってキーを打つことなのね。
そのまま上記サイトの通りに入力ファイルをメモ帳で作成する。(下記画像)
そして上記サイトの通りにコマンドプロンプトに「gfortran test.f90」と打ってみた。
おー、ちゃんとexeファイルが出力された。感動である。(下記画像)
そしてa.exeをダブルクリックしてみる。
なぜかエラー。(下記画像)
どうやらコマンドプロンプトで実行しないといけないようだ。
(パスを通せば行けるのだろうか?)
とりあえず、mingw-w64.batでコマンドプロンプトを立ち上げ、
「a.exe」と打ってみる。
「Hello world!」が表示された!
やったね。(下記画像)
なんかいちいちコマンドプロンプトを起動するのは面倒だ。
(入力ファイル名固定でバッチファイルを作ってしまったほうがよいのか?)
とりあえずfortranが使える環境ができた。
今日はここまでだ。
またいろいろやっていこう。
2018年12月23日
持ち運べるホワイトボード買った
以前ホワイトボードがまわりにある部屋で仕事をした。
なぜか部下が気に入ったらしい。
今は廻りに壁もホワイトボードもないデスクの島にいる。
ホワイトボードの代わりに
デスクのつい立にピンでスケジュール等貼っていたが
部下はホワイトボードがいいと言ってお気に召さない。
(ホワイトボードならなんでもいいようだ、、)
そんなこんなで三連休に小さなホワイトボードを
買うことになった。
出かけた際に、携帯で「ホワイトボード」と検索すると
どうやら最近はノートのような持ち運べるホワイトボードが
あるらしい。
名前は「ミーティングボード 発泡美人」というらしい。
で、丸善に行くと、同じものが売っていた。
いい品ぞろえだ。
で買った。
ついでにペンと磁石も買ってみた。
ペンはイレーサーと磁石付きのものにした。
カラーの磁石はけっこう強力だ。
パステルカラーはamazonにはないらしい。
丸善の店頭にはあったので、今日買い物に来てよかった。
組み立てると置き型にできるようだ。
連休があけたらこれをデスクに置こう。
なぜか部下が気に入ったらしい。
今は廻りに壁もホワイトボードもないデスクの島にいる。
ホワイトボードの代わりに
デスクのつい立にピンでスケジュール等貼っていたが
部下はホワイトボードがいいと言ってお気に召さない。
(ホワイトボードならなんでもいいようだ、、)
そんなこんなで三連休に小さなホワイトボードを
買うことになった。
出かけた際に、携帯で「ホワイトボード」と検索すると
どうやら最近はノートのような持ち運べるホワイトボードが
あるらしい。
名前は「ミーティングボード 発泡美人」というらしい。
で、丸善に行くと、同じものが売っていた。
いい品ぞろえだ。
で買った。
ついでにペンと磁石も買ってみた。
ペンはイレーサーと磁石付きのものにした。
カラーの磁石はけっこう強力だ。
パステルカラーはamazonにはないらしい。
丸善の店頭にはあったので、今日買い物に来てよかった。
組み立てると置き型にできるようだ。
連休があけたらこれをデスクに置こう。