アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2020年12月30日

fortranのif文、行番号、go to

前の記事の最後で少し触れたが、
昔のfortranのプログラムってif文とgo toが多いな。
if書くだけで結構たいへんだな。

で、簡単なif文+go to文の組合せの例題を書いてみた。
キーボードからx1とy1を取得し、
大小の判定を返すプログラム。

goto_01.JPG

昔の人はelseifとかelseとか
無かったんだな、きっと。大変だな。

で、実行すると下記のようになる。(2ケース)

goto_02.JPG

goto_03.JPG

ふう、これで一通り、必要なスキルは習得したぞ。
これらを組み合わせて、本の巻末のプログラムの中身を勉強して、自分のものにするぞ。

ん、ここ数日で結構書けるようになったな。
posted by iyoder at 19:06 | Comment(0) | TrackBack(0) | プログラム

windows10でfortran使って波形データ読み込み

スペクトル解析の古い本の巻末に載っているfortranのプログラムを解読して
windows10のsurface proで回してみようとして始めた
この作業。
前回はサブルーチンの書き方、使い方を覚えた。

本の巻末に載っているプログラムで波の解析をするのに、
そういえば波形データの読み込みのプログラムが載ってない。

なので、自力で書くしかない。
で、試行錯誤して書いてみた。
かなり苦戦した。(下記画像)

これがメインのプログラム。

テキストファイル_01.JPG

で、これがテキストファイルを読み込むサブルーチン。

テキストファイル_02.JPG

で、こちらが、読み込んだ配列を確認用にテキストファイルに出力するプログラム。

テキストファイル_03.JPG

波形データは固定長で、1個のデータが8文字(うち3桁が少数)、
1行あたり9個のデータがあり、299行あるデータを読み込むプログラムである。

よくわからないが、
サブルーチンだと配列のサイズの宣言に9*mと式を入れても回るのに、
メインのプログラムだと配列のサイズの宣言に整数を入れないと回らない。(そこは諦めた)

これによりdoループ、formatも勉強した。
どうやら行の最初にある数値はdoループ、format、あとgo toで使うようだ。

go toとif文くらいを覚えたら、あとは
計算内容の理解だけだと思う。
というか、昔のプログラムはどんだけgo to文があるんだ。。かなり多いなあ。

糖質減らしている状態で、つかれた。。
細かいことは書けそうにない。(エラーつぶしに苦労した。。)

化石プログラムにここまで労力を使うとは、、無駄な気がしてきた。。
(こんなことはこの令和の時代に同じ職の人は誰もやらないな。)

でも、やる。
posted by iyoder at 16:39 | Comment(0) | TrackBack(0) | プログラム

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でもプログラムが回るのかを確かめてみる。
コードを固定形式で書いてみた。(下記画像)

固定形式_01.JPG

で、回してみる。
正しく出力された。

固定形式_02.JPG

どうやら固定形式にも対応しているようだ。
なので、今後は固定形式で書いていくことにする。
(本の巻末のプログラムを写すだけでいいから。もちろん勉強+理解しながら打つが。)

で、本の巻末のコードの中身を再度見ていくと、
最初に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」を付け加えてみる。(下記画像)

固定形式_03.JPG

回してみても、前回と変わらずテキストファイルに’Hello World!’が出力された。

固定形式_04.JPG


スペクトル解析の本の巻末に載っているプログラムは全部サブルーチンとして書かれており、
それを回すためのメインのプログラムは自分で書くことになっているから、
fortranのメインのプログラムの書き方を覚えておかないとね。

そういえば無意識にコードを小文字で書いている、、
本の巻末に載っているプログラムは全部大文字だけど。いいのかな。
まあ、大文字と小文字は区別しないらしいからまあいいか。
Atomの予測変換は小文字になるから、小文字で書き続けることにした。


で、今度は変数の宣言と数値計算をちょっと取り入れて
結果をテキストファイルに出力してみる。
変数の宣言は、x1は宣言時に初期値を設定してみて、
y1はx1を使ったべき乗の数式で決まるようにした。(下記画像)

固定形式_05.JPG

べき乗ってvbaだとA^Bとかになるけど、
fortranだとA**Bになるんだな。知らなかった。

また、宣言時に初期値を設定するコロン2つは、
各サイトだとコロンとコロンの間に半角スペースがあるけど、
実際コンパイルしたらエラーになって、
半角スペースを抜いたら回った。なんでかはわからんがまあいいや。
結果もきちんと出力された。よしよし。(下記画像)

固定形式_06.JPG

次は外部関数のプログラムを書いてみる。
どのプログラミング言語の例題でもよくある、
数値を入れ替えるswap関数である。
これにより、外部関数の引数がvbaで言う「値渡し」なのか「参照渡し」なのかを
確認したい。(下記画像)

固定形式_07.JPG



もし関数内ではxとyを入れ替えたのに、
メインのプログラムの中では値が入れ替わってなければ「値渡し」、
メインのプログラムの中でも値が入れ替わっていれば「参照渡し」ということだ。

で、回してみる。

、、お、値が入れ替わっている。
3つの数値のうち、1つ目がx1、2つ目がy1で、当初の値から入れ替わっている。
3つ目の数値はswap関数の戻り値で、1.0が入っているので
プログラムがきちんと回ったことを示している。(下記画像)

固定形式_08.JPG

下記サイトによると、
引数の場合につけると言われている「intent(in)」をつけると値を変更できないらしい。
今回はつけていないが、付けるとエラーになる。

あと、今回もうひとつ注意すべきは、
下記のサイトによるとメインのプログラムの冒頭で関数名の型の宣言が必要という事だ。
(これを知らなくて何度やってもエラーで困ってたので、下記サイトのおかげで助かった、、、)

>筑波大学 計算科学研究センター 原子核物理研究部門 日野原 伸生 計算物理学II
>Fortranの文法まとめ
https://wwwnucl.ph.tsukuba.ac.jp/~hinohara/compphys2-20/doc/fortran.pdf


で、次に、同じ内容を内部関数として記述してみる。

固定形式_09.JPG

特筆すべきは
・mainのプログラムの冒頭の関数名の型宣言は不要
・mainのプログラムのstopのあとにcontainsを記載し、
 end programとの間に関数を記載する。
 (stopの位置に迷ったが、下記サイトを参考にした。)
・関数の中身は外部関数の時と同じ。

>Takanobu Amano @ U-Tokyo Fortran演習 (地球惑星物理学演習)
>7. 関数とサブルーチン
https://amanotk.github.io/fortran-resume-public/chap07.html

で、解析を回したところ、きちんと回った。
(外部関数のときと同じで引数に使った数値がmainプログラム内でも入れ替わっている。)

固定形式_10.JPG

よし、最後にサブルーチンで書いてみよう。

固定形式_11.JPG

特筆すべきは
・引数に戻り値用の変数を用意してあげないとサブルーチン内で初めて登場する変数は
 返せない。(retはプログラムがきちんと回ったことの確認出力用なのでintent(out)を記載した。)
・main関数内でcallで呼びだす。
・retを引数に増やしたから、mainプログラム冒頭でも型を宣言。
かな。

実際に回してみると、きちんと回った。
で、はき出されたテキストファイルを見ても、
main関数側のx1とy1はきちんと入れ替わっていた。(参照渡しということ)
最後の戻り値であるretも1.0になっている。

固定形式_12.JPG


よしよし。できたぞ。

これでサブルーチンが使えるぞ。

次に、サブルーチンだけ別ファイルに書いてみたい。

まずこれがmainプログラム(test.f)。

固定形式_13.JPG

で、次がサブルーチン(sub01.f)。

固定形式_14.JPG

で、コンパイルするときのBATファイルの中身は、ソースファイル名を2つ並べるだけ。

固定形式_15.JPG

で、はき出されたa.exeを実行すると、きちんと同じ結果が出た。
(しつこいので出力の画像は貼らないが。)

これで本の巻末に書いてあるサブルーチンを使えるようになる第1歩が終わったな。

posted by iyoder at 17:59 | Comment(0) | TrackBack(0) | プログラム

2020年12月26日

fortranのエディタにAtom使いたい

前回、windows10 64bitのsurface proで
fortranのプログラムをメモ帳で数行書いて、
テキストファイルをはき出してみた。

>fortranでテキストファイル出力してみる
https://fanblogs.jp/mountain4101/archive/70/0

まあ3、4行のはじめてのコードならよいが、
本当に使うなら、ちゃんとしたテキストエディタがほしい。
きっときちんとしたエディタにはエラーチェック機能が
あるのではないだろうか。

ということで、ネットで検索してみると、
Atomというエディタがよいようである。
ダウンロードしようとサイトに行くと、
やけにかわいい画面。(下記画像)

atom_01.JPG

バージョンは1.53.0
さっそくダウンロードしてインストールを試みる。
で、下記のサイトを参考にした。

>エンジニアの入り口
>【すぐわかる!】Atomエディタのインストールと日本語化、便利な使い方
https://eng-entrance.com/atom-editor

インストールしようとすると
これまたおしゃれな画面が立ち上がった。

atom_02.JPG

で、終わると以下の画面があがった。

atom_03.JPG

「Register as default atom:// URI handler?」
と聞かれるので、ここは「No,Never」を選ぶらしい。

上記サイトのとおりに
「Japanese-menu」のpackageをインストール。

お、日本語になった。

atom_04.JPG

よくわからないが、文字コードを「Japanese(Shift JIS)」にしてみる。

atom_05.JPG

次に上記サイトのとおり「auto-encoding」をインストールした。

ずっと画面左の方に
「Your project is currently empty」
と表示されているのでフォルダの場所を設定してみる。
とりあえずデスクトップでatomのいう名前のフォルダにしてみた。

atom_06.JPG

画面真ん中に「Telemetry Consent」というタブがあるが、
これは「No, do not send my usage data」を選んだ。

atom_07.JPG

これで上記サイトに書いてあることはやった気がするが、
そういえば、fortran関連の設定をしていないから、
何のプログラミング言語に使うかが設定されていないはず。

で、下記サイトに書いてある5項目くらいのうち
・ファイルの種類別にアイコンを変えるという「file-icons」のインストール
・Fortranのシンタックスを有効にするという「language-fortran」のインストール
をやってみる。

>カオスラボ
>Atomの設定
http://chaoscloud950.blog60.fc2.com/blog-entry-52.html

今までインストールしたパッケージは下記画像の4つだ。

atom_08.JPG

次に下記のサイトを参考にしてエディタの設定をした。

>WebDesigner's Memorandum ウェブデザイナーの備忘録
>テキストエディタのAtomをインストールしたら最低限設定しておきたいアレコレ
https://webrandum.net/atom-base-setting/

・インデントガイドを表示
・不可視文字を追加
・ソフトタブ
にチェックを入れた。

atom_10.JPG


編集画面はこんな感じ。

atom_09.JPG


とりあえず、これで始めれるだろう。
メモ帳よりはだいぶましだと思うので。

使いながら便利なパッケージがあれば追加するだな。


posted by iyoder at 04:16 | Comment(0) | TrackBack(0) | プログラム

2020年12月24日

fortranでテキストファイル出力してみる

昨日からfortranを始めた。

まず初めてコンパイル、実行したとき、
いちいちコマンドプロンプトに打ち込むのが面倒だった。
なので下記の画像のBATファイルを作成した。

fortran_08.JPG

このBATファイルをダブルクリックすれば
test.f90がコンパイルされ、
a.exeがフォルダ内に出力されるようなった。(下記画像)

fortran_09.JPG


ついでに、
a.exeをコマンドプロンプトから実行する
BATファイルを作成してみた。

fortran_11.JPG

で、このBATファイルをダブルクリックすると、

コマンドプロンプトが立上り、
Hello World!の文字が出た!

fortran_12.JPG


よしよし。

じゃあ、BATファイルを介さず、a.exeをそのままダブルクリックしてもいいかと思ったが、
ダブルクリックするとエラーで実行されない。(下記画像)

fortran_10.JPG


きちんとコマンドプロンプト上で実行すると実行できた。
これはコマンドプロンプト上で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

fortran_13.JPG

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がはき出される。(下記画像)

fortran_14.JPG

ちなみに
・libgcc_s_seh-1.dll
・libquadmath-0.dll
・libwinpthread-1.dll
の3つはフォルダ内に入れっぱなし。
理由は、素人の素朴な印象として
exeファイルって環境変数でPATHを設定しないと使えないなんて
変だな、って思ったから。
(便利なプログラム作っても、環境変数を設定しないといけないとコピペで渡せないよね。
 まあ、PATHを指定したa.batを一緒に入れておけばいいわけだが。)

で、はき出されたoutput.txtの中身を開くとこうなっている。

fortran_15.JPG

なんか、、
1文字目になぞのスペースがある、、
どうしてだろう。

'hello, world!'と打ったから、
1文字目にスペースは入れてないのに!
そんなことが気になるのはA型だからなのか、それとも糖質制限してイライラしているのか。

で、色々調べてみる。

どうやら、書式を指定しないと1文字目にスペースが入るようだ。
なので文字列としての’(a)’をwriteのカッコ内に入力してみる。

fortran_16.JPG

で、コンパイルして、実行して、はき出されたテキストファイルを見てみる。

やった!できてる。(下記画像)
1文字目にスペースなしになってる!

fortran_17.JPG


よしよし。
今回はここまでだな。




posted by iyoder at 23:04 | Comment(0) | TrackBack(0) | プログラム

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にした。

fortran_01.JPG

上記サイトに記載の通り、デスクトップにfortフォルダを作成して
mingw-w64.batのファイルをfortフォルダへ移動し、設定もした。
でmingw-w64.batを実行して表示されたコマンドプロンプトに「gfortran[enter]」と打ったが
以下の写真のようにエラーになる。
なんかおかしい。

fortran_02.JPG

もしかしてと思い、「gfortran」と打ってenterキーを押すとなんか動いた。(下記画像)
[enter]ってキーを打つことなのね。

fortran_03.JPG

そのまま上記サイトの通りに入力ファイルをメモ帳で作成する。(下記画像)

fortran_04.JPG

そして上記サイトの通りにコマンドプロンプトに「gfortran test.f90」と打ってみた。

おー、ちゃんとexeファイルが出力された。感動である。(下記画像)

fortran_05.JPG

そしてa.exeをダブルクリックしてみる。
なぜかエラー。(下記画像)

fortran_06.JPG

どうやらコマンドプロンプトで実行しないといけないようだ。
(パスを通せば行けるのだろうか?)

とりあえず、mingw-w64.batでコマンドプロンプトを立ち上げ、
「a.exe」と打ってみる。


「Hello world!」が表示された!
 やったね。(下記画像)


fortran_07.JPG


なんかいちいちコマンドプロンプトを起動するのは面倒だ。
(入力ファイル名固定でバッチファイルを作ってしまったほうがよいのか?)

とりあえずfortranが使える環境ができた。
今日はここまでだ。
またいろいろやっていこう。














posted by iyoder at 02:59 | Comment(0) | TrackBack(0) | プログラム
最新記事
<< 2020年12月 >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
カテゴリーアーカイブ
ファン
プロフィール
最新コメント
×

この広告は30日以上新しい記事の更新がないブログに表示されております。