WANtaroHP (F90 Miscellany)

 


バブルソートおよびシェルソート

プログラム概要

  • 昇順(小さい順)に並び替えるソートプログラムです.
  • バブルソートとシェルソートが含まれています.

ソースコードと関連文書

FilenameDescription
f90_SORT.txtプログラムソースコード


文字列ソート

プログラム概要

  • 文字列を昇順(小さい順)に並び替えるソートプログラムです.
  • バブルソートが用いられています.

ソースコードと関連文書

FilenameDescription
f90_CHAR_SORT.txtprogram for sorting of character strings


乱数

プログラム概要

  • 区間(0.1]の一様乱数と,平均=0・標準偏差=1の正規乱数を与えるプログラムです.
  • 一様乱数は,Fortran90の組み込みサブルーチン 'random_number()' を使って得ています.
  • 正規乱数は,Box-Muller 法により得ています.

ソースコードと関連文書

FilenameDescription
f90_RAND.txt乱数発生プログラムソースコード
fig_RU.pngGMTによる一様乱数のヒストグラム作図例
fig_RN.pngGMTによる正規乱数のヒストグラム作図例


日付と時間を得る

プログラム概要

  • 組み込みサブルーチン 'date_and time' を用いてプログラム実行時の日付と時間を得るプログラムです.

ソースコードと関連文書

FilenameDescription
f90_DATE.txtプログラムソースコード


計算時間を得る

プログラム概要

  • 組み込みサブルーチン 'system_clock' を用いて,計算時間を得るプログラムです.
  • 参考に Fortran95 の組み込みサブルーチン 'cpu_time' の使用事例も示しています.

ソースコードと関連文書

FilenameDescription
f90_TIME.txtプログラムソースコード


10進数を16進数に変換する

プログラム概要

  • 10進数を16進数に変換するプログラムです.

ソースコードと関連文書

FilenameDescription
f90_10to16.txtプログラムソースコード


色一覧の作成

プログラム概要

  • このプログラムは色の gif 画像短冊を作成しそれを表示する HTML ファイルを作成するものです.
  • このプログラムは,GMT,gnuplotおよびImageMagickに色一覧に対応するものです.
  • フォントの gif 画像短冊は ImageMagick を用いて作成しています.
  • ImageMagick コマンドの実行は Fortran プログラムの中で作成したバッチファイルを実行することで行っています.
  • フォント名は gawk の関数 asort を用いて昇順に並べ替えてあります.
  • Fortran プログラム実行用コマンドは以下のとおりです.
gfortran -o f90_COL_HTML.exe f90_COL_HTML.f90

f90_COL_HTML n c:\WANtaroHP_COL\col_inp_GPL.txt c:\WANtaroHP_COL\zesubGPLcol.html
f90_COL_HTML n c:\WANtaroHP_COL\col_inp_GMT.txt c:\WANtaroHP_COL\zesubGMTcol.html
f90_COL_HTML n c:\WANtaroHP_COL\col_inp_IMK.txt c:\WANtaroHP_COL\zesubIMKcol.html

上記コマンド中,引数 n は gif 画像を作成するためのフラグです. この場合は,フォントの gif 画像短冊は作成されません. もし y が入力されれば,Imagemagick は大量のフォントの gif 画像短冊を作成します.

ソースコードと関連文書

FilenameDescription
f90_COL_HTML.txtProgram to create gif image and show them by HTML
col_inp_GMT.txtInput data for GMT color
col_inp_GPL.txtInput data for gnuplot color
col_inp_IMK.txtInput data for ImageMagick color

HTML 色一覧のため のawk スクリプト

HTML 色一覧に対しては,以下の awk スクリプトとデータが用いられています.awk スクリプト実行用バッチコマンドは以下のとおりです.

gawk -f awk_html_col.awk dat_html_col.txt > zesubHTMLcol.html
FilenameDescription
awk_html_col.txtAwk script to show color strips by HTML
dat_html_col.txtInput data for HTML color


フォント一覧の作成

プログラム概要

  • このプログラムはフォントの gif 画像短冊を作成しそれを表示する HTML ファイルを作成するものです.
  • 有効なフォントは,PC にインストールされているもののみです.
  • フォントの gif 画像短冊は ImageMagick を用いて作成しています.
  • ImageMagick コマンドの実行は Fortran プログラムの中で作成したバッチファイルを実行することで行っています.
  • フォント名は gawk の関数 asort を用いて昇順に並べ替えてあります.
  • Fortran プログラム実行用コマンドは以下のとおりです.
gfortran -o f90_IMFONT.exe f90_IMFONT.f90

f90_IMFONT n c:\WANtaroHP_Font\inp_fname.txt c:\WANtaroHP_Font\zesubIMKfont.html

上記コマンド中,引数 n は gif 画像を作成するためのフラグです. この場合は,フォント短冊gif画像は作成されません. もし y が入力されれば,Imagemagick は大量のフォントの gif 画像短冊を作成します.

ソースコードと関連文書

FilenameDescription
bat_makedat.txt入力データ作成用バッチファイル(awkスクリプトを含む)
f90_IMFONT.txtProgram to create gif image and show them by HTML
inp_fname.txtInput data of font name


緯度と経度から2点間の距離を計算する

プログラム概要

  • このプログラムは,緯度と経度から2点間の距離を計算するものです.
  • このプログラム作成には下記のサイトを参考にしました.
Links
Lambert-Andyer の公式
Hubeny の公式
おもしろい実験
国土交通省国土地理院: 距離計算

コマンドライン入出力

サンプルバッチファイルと結果

バッチファイル
gfortran -o f90_DIST.exe f90_DIST.f90

rem distance from Kuala Lumpur to Tokyo
f90_DIST 101.55 3.117 139.76 35.69

rem distance from Kuala Lumpur to Jakarta
f90_DIST 101.55 3.117 106.833 -6.183

rem distance from Kuala Lumpur to Bangkok
f90_DIST 101.55 3.117 100.567 13.733

rem distance from Kuala Lumpur to Vientiane
f90_DIST 101.55 3.117 102.567 17.95

rem distance from Kuala Lumpur to Ha Noi
f90_DIST 101.55 3.117 105.800 21.017

rem distance from Kuala Lumpur to Seoul
f90_DIST 101.55 3.117 126.967 37.567

rem distance from Kuala Lumpur to Beijing
f90_DIST 101.55 3.117 116.283 39.933
結果
LocationLon(deg)Lat(deg)GSI(km)L-A(km)Hubeny(km)
Kuala Lumpur101.550 3.117--- --- ---
Tokyo 139.76035.6905332.8715332.8375395.254
Jakarta 106.833-6.1831184.2511184.2311184.532
Bangkok 100.56713.7331179.1831179.1061179.090
Vientiane 102.56717.9501644.5671644.5331644.471
Ha Noi 105.80021.0172033.1512033.1502033.494
Seoul 126.96737.5674612.7714612.7814646.478
Beijing 116.28339.9334339.9044339.8204352.810
L-A: Lambert-Andyer の公式
Hubeny: Hubeny の公式
GSI: 国土交通省国土地理院 (日本) の計算サイト
http://vldb.gsi.go.jp/sokuchi/surveycalc/bl2stf.html

Source code by f90

FilenameDescription
f90_DIST.txtProgram to calculate the distance between 2 points

ファイル入力と距離行列出力

実行用バッチファイル

gfortran -o f90_DIST1.exe f90_DIST1.f90

f90_DIST1 inp_city.txt out_city.csv

Source code by f90

FilenameDescription
f90_DIST1.txtProgram to calculate the distance between 2 points (Lambert-Andyer の公式)
inp_city.txtInput data sample
out_city.txtOutput data sample


カレンダー

プログラム概要

  • このプログラムは各月毎あるいは各年のカレンダーを表示する HTML ファイルを作成するものです.
  • 用いた数学的なテクニックは,Zellerの公式による曜日の確定と閏年の判定です。関連する Web page の url を以下に示します.
    • http://ja.wikipedia.org/wiki/ツェラーの公式
    • http://en.wikipedia.org/wiki/Zeller%27s_congruence
    • http://ja.wikipedia.org/wiki/閏年
    • http://en.wikipedia.org/wiki/Leap_year
  • 別途用意したファイルからの入力により,簡単な予定や実績のコメントを入力できます.
  • html 文書の table の各要素(日付欄)は,ImageMagick で作成した画像を背景にしています.

実行用バッチファイル

01 | rem **************************
02 | rem Required files
03 | rem   inp_2013_2nd_half.txt
04 | rem   f90_CALDAT.f90
05 | rem   f90_CALENDER.f90
06 | rem   f90_CALSMALL.f90
07 | rem **************************
08 |
09 | gfortran -o f90_CALDAT.exe f90_CALDAT.f90
10 | f90_CALDAT 240 60 192 64 255 192
11 | rem f90_CALDAT 240 60 255 255 255 255
12 |
13 | gfortran -o f90_CALENDER.exe f90_CALENDER.f90
14 | f90_CALENDER 20130125 inp_2013_2nd_half.txt cal_201301.html
15 | f90_CALENDER 20130225 inp_2013_2nd_half.txt cal_201302.html
16 | f90_CALENDER 20130325 inp_2013_2nd_half.txt cal_201303.html
17 | f90_CALENDER 20130425 inp_2013_2nd_half.txt cal_201304.html
18 | f90_CALENDER 20130525 inp_2013_2nd_half.txt cal_201305.html
19 | f90_CALENDER 20130625 inp_2013_2nd_half.txt cal_201306.html
20 | f90_CALENDER 20130725 inp_2013_2nd_half.txt cal_201307.html
21 | f90_CALENDER 20130825 inp_2013_2nd_half.txt cal_201308.html
22 | f90_CALENDER 20130925 inp_2013_2nd_half.txt cal_201309.html
23 | f90_CALENDER 20131025 inp_2013_2nd_half.txt cal_201310.html
24 | f90_CALENDER 20131125 inp_2013_2nd_half.txt cal_201311.html
25 | f90_CALENDER 20131225 inp_2013_2nd_half.txt cal_201312.html
26 |
27 | gfortran -o f90_CALSMALL.exe f90_CALSMALL.f90
28 | f90_CALSMALL 2011 cal_all_2011.html
29 | f90_CALSMALL 2012 cal_all_2012.html
30 | f90_CALSMALL 2013 cal_all_2013.html
31 | f90_CALSMALL 2014 cal_all_2014.html
32 |
33 | del img1.png
34 | del img2.png
35 | del imgm.png
36 | del temp1.png
37 | del temp2.png
38 | del tempi.png
01-07
コメント
09-10
プログラムf90_CALDATのコンパイルと実行
13-25
プログラムf90_CALENDERのコンパイルと実行
27-31
プログラムf90_CALSMALLのコンパイルと実行
33-38
作業用ファイルの削除

f90_CALDATのコマンドライン引数

このプログラムはカレンダーの色を定義し,カレンダー表示のためのトップページ(html)を作成します.

f90_CALDAT Hmax Hmin Smax Smin Vmax Vmin
f90_CALDAT実行プログラム
Hmax, HminHSVカラーモデルにおける H の最大値と最小値
Smax, SminHSVカラーモデルにおける S の最大値と最小値
Vmax, VminHSVカラーモデルにおける V の最大値と最小値

上記バッチファイルに示した事例では,前橋の月平均気温を以下のような関係で,HSVモデルに対応させている.

Temperature Min. ⇐ Middle ⇒ Max.
Hue Max. ⇐ Middle ⇒ Min.
Saturation Min. ⇐ Middle ⇒ Max.
Value Min. ⇐ Middle ⇒ Max.

データとして用いた前橋の月平均気温は,プログラム f90_CALDAT.f90 中の以下のコードで指定している.

real(4)::Te(1:12)=(/3.3,3.6,6.9,12.9,17.7,21.2,24.7,26.1,21.9,16.1,10.5,5.8/)

f90_CALENDERのコマンドライン引数

このプログラムは指定した月のカレンダー(html)を作成します.

f90_CALENDER yyyymmdd fnameR fnameW
f90_CALENDER実行プログラム
yyyymmdd 日付指定 (yyyy: 西暦, mm: 月, dd: 日)
fnameR コメント入力データファイル (テキストファイル)
fnameW 出力ファイル (htmlファイル)

f90_CALSMALLのコマンドライン引数

このプログラムは,指定した年の全日のカレンダー(html)を作成します.

f90_CALSMALL yyyy fnameW
f90_CALSMALL実行プログラム
yyyy 西暦年指定
fnameW 出力ファイル (htmlファイル)

Source code by f90 and related documents

FilenameDescription
f90_CALDAT.txtF90 プログラムソース
f90_CALENDER.txtF90 プログラムソース (月単位)
f90_CALSMALL.txtF90 プログラムソース (年単位)
inp_2013_2nd_half.txtコメント入力用ファイル
cal_main.htmlカレンダー表示のための Top page


HSV カラーモデルによる色相環

プログラム概要

  • このプログラムは,GMT により色相環図を出力するためのデータ作成用プログラムです.
  • 色相 (H: hue) の決定は,こちらのサイト(http://homepage3.nifty.com/ishidate/vcpp_color/vcpp_color.htm)を参考に行っています.
  • HSV から RGB への変換は,こちらのサイト(http://www.technotype.net/tutorial/tutorial.php?fileId={Image%20processing}§ionId={-converting-between-rgb-and-hsv-color-space})を参考に行っています.
Difinition of Hue
Range of angleRGBColoe name
0/60 max min->maxmin Red->Yellow
60/120 max->minmax min Yellow->Lime
120/180min max min->maxGreen->Cyan
180/240min max->minmax Cyan->Blue
240/300min->maxmin max Blue->Magenta
300/360max min max->minMagenta->Red
Range of variables
R G B H S V
Max.255 255 255 359 255 255
Min.0 0 0 0 0 0
Kindintegerintegerintegerintegerintegerinteger
R: red, G: green, B: blue
H: hue, S: saturation, V: value
colcurc0 colcurc1 colcurc2
colcurc3 colcurc4 colcurc5

実行用バッチファイル

gfortran -o f90_COLCIRC.exe f90_COLCIRC.f90

f90_COLCIRC 1 255 255 > bat_gmt_exe.bat
set fig=fig_gmt_colcirc1.eps
call bat_gmt_colcirc

f90_COLCIRC 1 128 255 > bat_gmt_exe.bat
set fig=fig_gmt_colcirc2.eps
call bat_gmt_colcirc

f90_COLCIRC 1 255 192 > bat_gmt_exe.bat
set fig=fig_gmt_colcirc3.eps
call bat_gmt_colcirc

f90_COLCIRC 1 128 192 > bat_gmt_exe.bat
set fig=fig_gmt_colcirc4.eps
call bat_gmt_colcirc

f90_COLCIRC 60 255 255 > bat_gmt_exe.bat
set fig=fig_gmt_colcirc0.eps
call bat_gmt_colcirc

del _*

実行用プログラム名は,f90_COLCIRC,コマンドライン引数の並びは,「H値の増分,S値,V値」および「出力ファイル名」(ここではファイル名 bat_gmt_exe.bat) です. 出力ファイルには,GMTで実行するバッチコマンドの一部が出力されます.

ソースコードと関連文書

FilenameDescription
f90_COLCIRC.txtProgram to create a part of GMT commands
bat_gmt_colcirc.txtBatch file for GMT execution (control)
bat_gmt_exe.txtSample of GMT commands created by Fortran program


HSV カラーモデルによる色短冊

プログラム概要

  • このプログラムは,ImageMagick により色短冊を作成すると共に,それらを表示する html ファイルを作成します.
  • 作成した色短冊は,以下に示すとおりです.
H S=255S=128S= 64S= 64S= 32S= 16
(deg)V=255V=255V=255V=192V=192V=192
0 LM LM LM LM LM LM
30 LM LM LM LM LM LM
60 LM LM LM LM LM LM
90 LM LM LM LM LM LM
120 LM LM LM LM LM LM
150 LM LM LM LM LM LM
180 LM LM LM LM LM LM
210 LM LM LM LM LM LM
240 LM LM LM LM LM LM
270 LM LM LM LM LM LM
300 LM LM LM LM LM LM
330 LM LM LM LM LM LM

実行用バッチファイル

gfortran -o f90_HSVrgbHEX.exe f90_HSVrgbHEX.f90

f90_HSVrgbHEX

ソースコードと関連文書

FilenameDescription
f90_HSVrgbHEX.txtProgram to create a part of GMT commands
bat_imk_ctl.txtBatch file for ImageMagick by F90 program (control)
bat_imk_exe.txtImageMagick commands


多角形領域の内外判定

プログラム概要

  • このプログラムは,指定した点が,予め定義した多角形領域に含まれるか否かを判定するためのものです.
  • このプログラムの作成目的は,有限要素法の要素に対し,領域指定を行うことです.

入力データ事例

2                         定義する領域の数
8                         1つ目の領域を定義する座標点数
0.7  0.0                 領域を指定する座標点の(x,y)座標
0.1  0.1                 同上
0.0  0.7                 同上
-0.1  0.1                 同上 (作図事例中の青の十字を定義)
-0.7  0.0                 同上
-0.1 -0.1                 同上
0.0 -0.7                 同上
0.1 -0.1                 同上
8                         2つ目の領域を定義する座標点数
0.50  0.50               領域を指定する座標点の(x,y)座標
0.05  0.00               同上
0.50 -0.50               同上
0.00 -0.05               同上 (作図事例中の緑のXを定義)
-0.50 -0.50               同上
-0.05  0.00               同上
-0.50  0.50               同上
0.00  0.05               同上
200000                    内外判定を行う入力座標点数
-0.524425 -0.417869       判定を行う座標点の(x,y)座標
0.691628 -0.695583        以下,合計200,000個の(x,y)座標
0.171075 -0.613049        座標点範囲:(x,y)=(-1 / 1, -1 / 1)
・・・・・

実行用バッチファイル

gfortran -o f90_DOMAIN.exe f90_DOMAIN.f90

f90_DOMAIN inp_dom2.txt

rem *** GMT commands for drawing ***
set range=-1/1/-1/1
set paper=10/10
set inp0=_mat_00.txt
set inp1=_mat_01.txt
set inp2=_mat_02.txt
set fig=fig_gmt_dom2.eps
psxy %inp1% -R%range% -JX%paper% -SC0.01 -G0/0/255 -P -K > %fig%
psxy %inp2% -R -J -SC0.01 -G0/255/0 -O -K >> %fig%
psxy %inp0% -R -J -SC0.01 -G255/0/0 -O >> %fig%

実行結果作図事例

以下のルールに基づいて処理した結果を図化したものを示します.

  • 後から領域定義したものが優先される.
  • 領域境界線上の点はその領域に含まれる.ただし後からの定義が優先される.
  • 領域境界点は時計回り・反時計回りいずれも可.境界が閉じる1点前までの座標を入力する.

入力は,上述入力データ事例に示したものです.

  • 青十字と緑X字に含まれない領域は赤い点で表示しています.
  • 判定を行った点数は20万個です.
  • 乱数により -1 から 1 の範囲で (x,y) 座標を指定しました.
LM

ソースコードと関連文書

FilenameDescription
f90_DOMAIN.txtf90 program code


pic
inserted by FC2 system