数値解析法及び演習 第一回

プログラミングの基本
  1. この授業の目標と今日の目標
  2. エディタを使う
  3. UNIX入門とターミナル
  4. プログラムの作成, コンパイル
  5. メールを出す
  6. 今日の宿題とログアウト

[0] 成績評価方法

この実習では以下の要領で成績を評価します.

  1. 宿題(2点×12=24点),中間試験(36点),期末試験(40点)の合計で成績評価します.合計点が60点以上で合格.
  2. 期日までに3回以上宿題を提出しない場合は不合格.欠席の場合は事前に城野もしくは濱本に連絡をすること.
  3. 授業のはじめに,ポイントを解説します.

[1] この授業の目標と今日の目標

[1.1] 授業の目標

この授業では,プログラミング言語の習得を目標とします.習得すると何ができるようになるのでしょうか? 大きくわけると二つのことができるようになります.

  1. 数値シミュレーション
  2. データ解析

私が最近行った数値シミュレーションの例と研究の背景を下に示します.

研究の背景:地球に落下してくる隕石のうち8割はコンドライト隕石と呼ばれるタイプです.この隕石の中にはコンドリュールとよばれる大きさ0.1-2mm程度の球状の粒子が多数含まれています.形状が球であることから,何らかの加熱イベントによって鉱物が溶融し,表面張力によって球状になったと考えられています.体積の8割以上がコンドリュールである隕石も多く,また形成年代は太陽系形成以後100-300万年程度と測定されています.これらのことから,太陽系形成時において発生した加熱イベントによってコンドリュールは形成されたはずです.しかしその加熱イベントが何であったかは未だに謎です.

太陽系の形成時は,微惑星とよばれる小天体の相互衝突が頻繁におこっていました.衝突すると温度が上昇するので,シリケイトが溶融する可能性があります.そこで微惑星の相互衝突を数値シミュレーションし,どの程度溶融するのかを調べました.それが上の動画です.

衝突のシミュレーション結果を元に,溶融したシリケイトがどの大きさまで分裂するかを流体力学シミュレーションにより求めました.同時に温度低下の速度も算出しました.実験室ではそれぞれ0.1-2mm および 10 - 1000 度/時 と求められています.シミュレーションの結果は上図に示されており,幅広くパラメータを変化させても計測値とちょうどおさまる結果となりました.

[1.2] 今日の目標

  1. この授業の意義を知ること
  2. エディタの使い方を覚える
  3. プログラムの実行のしかたを覚える
  4. メールの出し方を覚える

[2] エディタを使う

[2.1] テキストエディタ

プログラムは「エディタ」とよばれるアプリケーションで作成します。エディタとは、文字列のみ作成できるもので、ワード等のワープロとは根本的に異なります。メモ帳(windows),テキストエディット(Mac)が標準で付属しているエディタです.さまざまなフリーのエディタがありますので好みに応じて使ってください.標準のものでも十分です.以下の解説は,サテライトラボのiMacにインストールされている emacs エディタの解説です.

画面下のアイコンが並んでいる中に,バックがうすむらさき色の上にペンの絵があるアイコンがあります.一度クリックすると起動します.

[2.1.1] Emacsの基本操作

以下で C-x とは CTRLキーを押しながら「x」キーを押すことを意味します. 次の3つは最低限覚えましょう!

[2.1.2] 練習

ここで練習をしてみましょう. test.txtというファイルを開いてください. 今の場合, test.txtはまだ存在しません. その場合は新たにファイルが作成されます. 開くことができたら, ローマ字,かな漢字を入力してみましょう. 一通り書いたらセーブしてみましょう.


[3] 基本的なコマンド

作成したプログラムは,「コンパイル」という作業をすることで実際に動くようになります.この作業は「ターミナル」という画面で行います.この画面での操作は,マウスでクリックといった直感的なものではなく,コマンドを入力することで実行します.windowsの方は gfortran を起動してください.macの方は「ターミナル」を起動してください.

windowsにおけるコマンド

cd いま自分がいるフォルダ名の表示
cd フォルダ名 フォルダ間の移動
cd Mail Mail フォルダに移動
cd ../ 一つ上の階層のフォルダに移動
mkdir フォルダ名 フォルダの作成
mkdir hoge hogeフォルダを作成
del ファイル名 ファイルの削除
del hogehoge ファイルhogehogeを削除
dir ファイルのリスト表示

MacOSにおけるコマンド

pwd いま自分がいるフォルダ名の表示
cd フォルダ名 フォルダ間の移動
cd Mail Mail フォルダに移動
cd ../ 一つ上の階層のフォルダに移動
mkdir フォルダ名 フォルダの作成
mkdir hoge hogeフォルダを作成
rm ファイル名 ファイルの削除
rm hogehoge ファイルhogehogeを削除
ls ファイルのリスト表示

図1: フォルダの階層構造(macの場合)

[4] プログラムの作成, コンパイル

[4.1]ディレクトリを作る

毎週必ず行なう手順を示します.

こうしておくと後で見返すことが容易にできます.

[4.2]プログラムの作成, コンパイル

次のプログラムを書いてみましょう.example1.f90という名前でさきほど作成したフォルダの中に保存してください. もし間違えたら再度 201008 フォルダに保存してください.保存したら,dir (ls:今後,特記しなかぎりwindowsのコマンドをかっこ無しで明記し,かっこの中にmac でのコマンドを書きます) コマンドでファイルが存在していることを確認してください.

  program example1 ! プログラムの開始
  implicit none    ! 暗黙の型宣言を使わない
  double precision a,b,c     ! 倍精度型実数a,b,cを宣言
     
  a = 1.D0         ! aに倍精度の1を代入
  b = 2.D0         ! bに倍精度の2を代入
  c = a + b        ! cにaとbの和を代入

  write(*,*) a,b,c ! a,b,cに格納されている数値をモニタに出力
      
  end program example1 ! プログラム修了

まず覚えてほしいフォートランのきまり:

さて作成したプログラムはこのままでは計算機は理解できません. 実行形式(バイナリ)に変換する必要があります. この操作をコンパイルと呼びます. コンパイルはエディタ上ではできません. ターミナル上で入力します.

gfortran example1.f90
で行われます.すると a.exe (a.out) と言うファイルが作成されます.以下のコマンドで実行してみましょう.
a.exe (./a.out)

[4.3]定数, 変数の型

FORTRANでは定数(1.D0などの具体的な数)および変数(a, bなど定数を格納できる文字)には型が定められています. 常に型を意識して変数および定数を使用してください. 当面登場する型は次の三つです. そのうち使用するのは始めの二つとなります. 注意:宣言文はプログラムの先頭に置いてください! 次のプログラムを実行してください.
  program example2  
  implicit none
  double precision a,b
  real c
  integer n

  a = 2.1D0
  b = 2.1
  c = 2.1
  n = 2.1

  write(*,'(D24.16,1x,D24.16,1x,D24.16)') a,b,c
  write(*,'(I3)') n
  end program example2
モニタ上の表示はどうなったでしょうか? 何桁目まで正しく表示されていますか? nの表示はどうなっていますか? 再度注意点をまとめると: 以上二点をいつも守るように心がけて下さい.

[4.4]書式の指定

write(*,*) の右側*の部分には本来「書式指定子」と呼ばれるものが入る. 書式を指定すると,計算結果の出力を自分の都合に合わせてカスタマイズできる. 使用頻度が高い形式の例を二つ挙げておきます. 以上の記号を, '( )'で囲んで記述してください. 複数ある場合は ,(コンマ)で続けて下さい.

[4.5]read文とwrite文

[4.5.1]モニタに出力, キーボードで入力

前節では画面に結果を出力させました.キーボードから入力もしたいと思います.入力は read文を使って行われます.先ほどのプログラムを

  program example2  
  implicit none
  double precision a,b,c,d 
     
  a = 1.D0
  b = 2.D0
  c = a + b

  read(*,*) d
  write(*,*) d


  write(*,*) a,b,c
      
  end program example2
と変更して実行してみよう.

[4.5.2]ファイルに入出力

計算させた結果は別のファイルに書き出すことがよくあります.そのためにはプログラムの宣言文(double precision 等)の次に
open(1,FILE='test.dat')
を追加してください. こうするとその後write(1,*)とすることによりtest.datに結果が出力されます.

[5] 今日の宿題

[5.1] 今日の宿題

メールを送る.メールに含まれる内容は:
  • 自己紹介文
  • 数値計算を将来何に使うつもりか?
  • 宿題の提出先: 城野(sirono@eps.nagoya-u.ac.jp) 濵本(hamamoto.miki@k.mbox.nagoya-u.ac.jp)

    宿題のしめきり: 10月13日(火曜日)

    [5.2] 提出先

    レポートは毎回とも城野,濵本にメール で送ること.二人以上に同時にメールを送るときは sirono@eps.nagoya-u.ac.jp,hamamoto.miki@k.mbox.nagoya-u.ac.jpとコンマをつけて並べれば良い.

    日程表へ戻る <<