Fortran

【バーンズリーのシダで学ぶFortran入門】乱数生成

こんにちは(@t_kun_kamakiri

本記事ではFortranの乱数生成について解説を行います。
プログラミングで以下の美しい模様を再現します。

実例を交えながら確認した方が理解しやすいし、何より楽しいと思うのでこちらに書いた「バーンズリーのシダ」のコードを例に確認していくことにします。

バーンズリーのシダ(Barnsley fern)は、イギリスの数学者マイケル・バーンズリーにちなんで名づけられたフラクタル構造を持つセイヨウメシダですね。

環境

  • WSL(ubuntu 20.04.4 LTS)
  • gfortran 9.4.0
  • paraview

Fortranで遊んでみたい方にはちょうど良い題材かと思います。
コードももう少しきれいに機能ごとに各自好きなようにまとめてもらえればと思います_(._.)_

シダ生成の変換式

変換式の流れは以下となっています。

初期座標$(x,y)=(0,0)$から上記のように出現確率によって変わる座標変換式により座標変換を行います。そして、変換された座標を1.0という値を設けてラベリングします。

そして変換された座標をもってもう一度出現確率によって変わる座標変換式により座標変換を行います。そして、変換された座標を1.0という値を設けてラベリングします。

これを複数回(気が済むまで)繰り返していきます。

Fortranコード

Fortranコードはあえてベタ書きにした状態で残しています。
初学者がmoduleやsubroutineを使ったコードを見ると理解が難しかったりするので、最初から最後まで流れがわかるようにベタ書きにしています。
本当は機能ごとにコードを整理して汎用性を考慮した使いやすく且つ見やすいコードを目指すべきですが、ここではあまりこだわらないことにします。

こちらのコードを実行してparaviewで可視化するときれいな植物模様ができます。

乱数の生成

乱数の生成は以下の部分です。

これによりrandom_valueには 0から1までの実数の乱数が一様分布で出現します。

一様分布に従う乱数を使って確率に応じてif文で場合分けをして座標変換を行っています。

アニメーション

今回の結果を動画にしたい場合のプログラムは以下となります。
上記のプログラム同様ベタ書きしています。

全体のコード

 

アニメーションの結果はこちらです。

勉強会資料

参考書

Fortranは日本の書籍がかなり少ないのですが以下のようなサイトがあり、とても参考になります。

その他出版されている参考書を挙げておきます。

数値計算のためのFortran90/95プログラミング入門(第2版)

数値計算のためのFortran90/95プログラミング入門(第2版)

牛島 省
3,410円(10/08 00:41時点)
Amazonの情報を掲載しています

こちらの参考書は文法からちょっとした応用(偏微分方程式を解く)まで解説がありFortranを使う人にとって手元に置いておきたい参考書ですね。OpenMPによる並列計算の解説もあります。
しかし、Fortran90/95の記述のみなのでForran2003以降を学ぶにはやはり上記のサイトを参考にした方が良いでしょう。

Fortran ハンドブック

Fortran ハンドブック

田口俊弘
3,344円(10/07 21:03時点)
発売日: 2015/07/22
Amazonの情報を掲載しています

こちらはFortranのコード集となっています。
Fortranは科学計算のためのプログラミング言語ですので数値計算の参考コードがいっぱい載っているこちらの参考書はとても勉強になります。
Fortran文法の解説はありませんが、数値計算の勉強にはとても良いです。

C & Fortran 演習で学ぶ数値計算

C & Fortran 演習で学ぶ数値計算

片桐 孝洋, 大島 聡史
2,970円(10/07 16:27時点)
Amazonの情報を掲載しています

こちらはC言語とFortranの両方を学びながら数計算の基礎力を身に付けるための参考書です。問題演習の全てにサンプルコードがあるため本書を読みながらサンプルコードをじっくり眺めるだけでも大変力が付きます。

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。

COMMENT

メールアドレスが公開されることはありません。