計算機プログラミング 後半組) ·...

13
計算機プログラミング (後半組) 担当:城﨑知至 Instructors: Tomoyuki JOHZAKI 1Fortranプログラミングからコンパイル実行まで 簡単なプログラムを用いて Lesson 1 Introduction of Fortran, and how to execute programs Computer Programming (2nd half group) 1

Transcript of 計算機プログラミング 後半組) ·...

  • 計算機プログラミング (後半組)

    担当:城﨑知至

    Instructors: Tomoyuki JOHZAKI

    第1回 Fortranプログラミングからコンパイル実行まで簡単なプログラムを用いて

    Lesson 1  Introduction of Fortran, and how to execute programs

    Computer Programming (2nd half group)

    1

  • 講義の概要

    目的

    ① 科学技術計算用言語であるFORTRAN言語の文法を理解する。

    ② 簡単なFORTRANプログラムの作成能力を修得する。

    ③ 数値計算技法の基礎を修得する。

    ④ コンピュータを使った演習でプログラムの実行処理方法を修得する。

    教科書: 冨田 博之, 齋藤 泰洋「Fortran90/95プログラミング」培風館

    参考書籍: 田口俊弘「Fortranハンドブック」技術評論社、他 、適宜指示

    講義形式: 講義および個人所有PCを用いた演習を行う。

    成績評価: 試験(7割; 期末試験)、各回冒頭の小テスト・レポートなど(3割)

    評点60点以上が合格

    2

    ※ 講義に関する情報http://home.hiroshima‐u.ac.jp/rgdlab/rgdl_html/programming/programming.html

  • スケジュール

    3

    第1回 Fortranプログラミングからコンパイル実行まで 簡単なプログラムを用いて第2回 プログラムの基本構成 自由形式・書き方の約束、構成、四則演算第3回 データの型、精度、異なる型の混合演算第4回 流れを変える if文、case文、組み込み関数第5回 繰り返しと出力の書式 doループ・exit, cycle, 書式の指定第6回 乱数を用いた頻度分布評価第7回 配列データ 配列と配列の演算, 配列の動的割り付け等第8回 総合演習1 乱数を用いたプログラミング例第9回 文字列データとファイルの入出力第10回 出力データの可視化第11回 副プログラム; サブルーティン, 外部関数第12回 関数の数値積分 副プログラムを用いて第13回 モジュール 型宣言の共有化、アクセス制限、手続きモジュール第14回 連立一次方程式の解法とその応用第15回 総合演習

  • なぜシミュレーションが必要か?

    • 計算機の大量・高速な数値データ・画像処理能力を利用した模擬実験やデータ解析

    • どのような場合に必要 もしくは有効か?

    a. 実験が困難、もしくは不可能な場合

    • 原子炉の破壊限界の評価や核爆発現象の予知

    • 地球・宇宙規模の自然現象の理解・解明

    b. 複雑現象の中の本質的要因を抽出

    • 単純化した理想モデルでの数値実験

    c. 解析的に予知不可能な現象・・・多体問題等

    d. 多階層・連結型 大規模計算による実スケールの数値実験

    • 気象予測・血流・宇宙プラズマ・核融合・風洞実験

    e. 大規模データの解析・データマイニング

    4

  • 例えば・・・決定論的問題で解析的に解ける場合

    5

    const.2

    22

    2

    rA

    dtdr

    dtdrmE

    const.2 dtdmrL

    エネルギー保存

    角運動量保存

    中心力場での質量mの粒子の運動(惑星の運動等)

    cos211 22

    2

    mAEL

    AmL

    r

    AmLl

    2

    mAEL

    2

    221

    cos1lr

    )0( ,2 2

    2

    LmAE ・・・円軌道

    )1(0 ,02 2

    2 E

    LmA

    ・・・楕円軌道

    )1( ,0 E ・・・放物線軌道

    )1( ,0 E ・・・双曲線軌道

  • • 距離の逆2乗則に従う力を互いに及ぼしあう2つの物体の運動 “2体問題”は解析的に解くことができる。角運動量とエネルギー保存より:ケプラーの法則など

    • 一方、3つ以上の物体の場合は、解析的には解けない。

    一方・・・解析的に解けない場合

    FBC ∝ 1/rBC2

    FAB ∝ 1/rAB2

    FAC ∝ 1/rAC2そこで数値計算の出番!

    運動方程式は、

    BC

    BC

    BC

    BC

    AC

    AC

    AC

    ACBCAC

    CC

    BC

    BC

    BC

    BC

    AB

    AB

    AB

    ABBCAB

    BB

    AC

    AC

    AC

    AC

    AB

    AB

    AB

    ABACAB

    AA

    rrg

    rrg

    dtdm

    rrg

    rrg

    dtdm

    rrg

    rrg

    dtdm

    rrFFv

    rrFFv

    rrFFv

    22

    22

    22

    初期位置と初期速度が与えられれば、数値的に解くことができる 7

  • 2次元 多体衝突問題

    10

    2次元 x‐y 平面の x = 0 ~ 0.2Å, y = 0 ~ 0.2Åの正方領域に閉じ込められた10個の電子の軌道計算. (1Å = 10‐8cm)

    0.00 0.05 0.10 0.15 0.200

    2

    4

    6

    8

    10

    電子

    間ク

    ーロ

    ンポ

    テン

    シャ

    ル [

    keV

    ]

    距離 [Å]

    • 電子は負の電荷をもつため、電子間には1/r2に比例した斥力が働く。

    ー ー

    • 初速度ゼロで任意の初期位置にある10個の電子に対する運動方程式をFortranにてプログラミングし、数値的に解いて、得られた10個の電子の軌跡をgnuplotで可視化する。

  • 本講義の目的

    1. 何を知りたいか?何を明らかにしたいか?問題設定。

    2. その現象を表す方程式を立てる。

    3. 適切な数値解法を用いて、離散化(+-×÷で表される式に)する。

    4. プログラミング

    5. 試行と実行

    6. 結果の解析・表示(可視化)

    モデ

    ルの

    改良

    本講義では、数値シミュレーションを行う上で必要な、最低限の知識を身につけ、実際にプログラミングを行い、実行して、得られた結果を可視化できるようになることを目的とする。

    シミュレーションの手順

    12

  • プログラミング言語

    コンピュータに,人間の意図を伝える言語で,多数の言語あり

    ハードウェアへの近さによる分類低水準言語・・ハードウェアに近い言語:

    機械語,アセンブラ

    高水準言語・・より人間に近い言語Fortran,C,C++, VBA, BASIC, PASCAL,・・・

    • その他、多数の分類があるが、割愛します。興味があれば、ネットで検索を。

    13

  • 本講義での使用言語:Fortran90/95

    Fortran (FORmula TRANslator): • 計算機歴史の初期に開発された言語で、数式をそのまま書ける(Formula Translator)

    形に設計されている。• 多くの数学関数やサブルーティンがパッケージとして蓄積されている。• スーパーコンピューターや並列計算機を用いた大規模シミュレーションではFortranが

    いまだに主流。• グラフィックスが弱い。(他のソフトを使用する必要がある)

    C, C++:• メインメモリやグラフィックスなどハードウェアを直接操作することで、コンピュータの

    特性をフルに生かしたプログラミングが可能。• 効率的で多彩なデータ処理ができる。• グラフィックスも標準で搭載

    VBA• Excelに装備されたVisual Basicの簡易版• 数値計算結果を直ちにグラフ表示できる。• 大規模計算には適していない。

    ・・・その他多数 14

    高水準言語の一例

  • 本講義での使用言語:Fortran90/95

    15

    世界初の高水準プログラミング言語

    1954年にIBMのジョン・バッカスによって考案された。

    FORTRAN66  FORTRAN77  Fortran90/95  Fortran2003

    • 参考資料:http://site.hpfpc.org/home/seminar/20161125fortranの0.history.pdf高性能Fortran推進会議により作成されたFORTRANにはじまる高水準言語の開発年表

    Fortran = “FORmula TRANslation” (数式翻訳)→数値計算に適した言語

    1. 計算速度が速い(コンパイラによる最適化が容易)

    C/C++でもFortranと同程度に早いコードはかけるが、何も考えずに作ると遅いコードにもなる(コンパイラによる最適化がかかりにくい)

    2. 数値計算プログラムを書きやすい

    各種組み込み関数や配列操作など、数値計算に便利な機能が備わっている。

    数値計算ライブラリが豊富

  • 本講義でのシミュレーション環境

    16

    • 個人所有 PC を使用します。

    • エディタ: TeraPad等各自でインストールプログラムファイルを作成するのに用いる。

    • Fortranコンパイラ: “gfortran” 各自でインストール作成したプログラムを計算機が読める形に翻訳する。

    • 可視化ソフト: gnuplot, paraview各自でインストール実行により得られた結果を可視化(グラフ化)する。

    (本講義ではgnuplotをベースとするが、excel等の他ソフトでもOK)

    ※ 個人PCへのインストール手順http://home.hiroshima‐u.ac.jp/rgdlab/rgdl_html/programming/programming.html

  • Fortranによる実作業の手順

    17

    1. エディタを用いてプログラムを書く (terapad等) 大文字・小文字いずれでもよい。読みやすいプログラムを書く

    半角英数字のみ

    ファイル名を“test.f90”とする。 ”test”は任意。”.f90”を必ずつける

    2. コンパイル (コマンドプロント or ターミナル上で)D:¥tool>gfortran test.f90⏎ 実行ファイル”a.exe”

    (macOSはa.outができる。)D:¥tool>gfortran test.f90 ‐o t1.exe⏎実行ファイル名を”t1.exe”に指定

    実行ファイルの拡張子に制限はない

    3. プログラム実行 (コマンドプロント or ターミナル上で)D:¥tool> a.exe⏎ (macOSでは “./a.out⏎”)

    4. 実行結果の可視化・解析 gnuplot等

    終了

    エラー表示

    間違った結果

    間違いを見つけて修正(

    デバッグ)