シミュレーション物理5 運動方程式の方法: サブルーチンの使い方.

Slides:



Advertisements
Similar presentations
計算物理2013年度 磁気相転移の臨界指数を求める. 今回の授業の目的 磁石が温度によって磁化をもったり,もたなかっ たりする様を計算機シミュレーションで調べる これは本当に数値実験。これを発展させて,脳の ニューロンの発火具合などのシミュレーションも 可能となる。
Advertisements

第 5 章 2 次元モデル Chapter 5 2-dimensional model. Contents 1.2 次元モデル 2-dimensional model 2. 弱形式 Weak form 3.FEM 近似 FEM approximation 4. まとめ Summary.
情報処理3 アプリケーション プログラミング 今井孝明.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
Fortran と有限差分法の 入門の入門の…
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓
プログラミング言語としてのR 情報知能学科 白井 英俊.
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
運動方程式の方法: 惑星の軌道 出席のメール(件名に学生番号と氏名)に,中点法をサブルーチンを使って書いたプログラムを添付
英語勉強会.
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
シミュレーション物理3 プログラミングの基本 その2
Step-by-Step Guide on How to Start ALICE Analysis
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
VBA H106077 寺沢友宏.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
基礎プログラミング (第五回) 担当者: 伊藤誠 (量子多体物理研究室) 内容: 1. 先週のおさらいと続き (実習)
§3.3 プログラミング 第10回 今日の目標 高級言語のプログラムを実行するまでの過程を示せる インタープリタの仕組みを説明できる
情報科学1(G1) 2016年度.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
シミュレーション物理7 乱数.
4.2.2 4to1セレクタ.
情報工学科 二宮 洋・鈴木 誠 小林 学・高畠俊徳 火曜日 1コマ目
Northrop Grumman RQ-4 Global Hawk
スクリプト言語を用いたPHITSの連続実行
第7回 条件による繰り返し.
ウイルスについて I98N044 久野耕介 I98N114 藤田和久
図書館職員のための アプリケーション開発講習会
MATLAB測位プログラミングの 基礎とGT (2)
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
第7回 条件による繰り返し.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
デジタル画像とC言語.
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃.
第5回放送授業.
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
情報処理 タイマの基礎 R8C タイマの基礎.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
シミュレーション物理2 プログラミングの基本
基礎プログラミング演習 第12回.
情報とコンピュータ 静岡大学工学部 安藤和敏
シミュレーション物理 大槻東巳.
統計ソフトウエアRの基礎.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
ソフトウエアの正体 vol.1 なるほどIT豆知識
シミュレーション物理4 運動方程式の方法.
目で見る一次変換 河合塾 数学科 生越茂樹 オゴセ シゲキ.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
2008/7/16(情報コース)2008/7/22(通信コース) 住井
1.Scheme の式とプログラム.
Make の使い方.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
モジュール分割.
Molecular Devices Japan
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
シミュレーション物理8 磁性.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

シミュレーション物理5 運動方程式の方法: サブルーチンの使い方

サブルーチン(subroutine) 多くのプログラムは,小さい部分に分割出来る 例えば運動方程式の方法の場合; 初期値を決める 時間発展を行う 結果を書く このとき,時間発展の部分はいろいろなプログラムで同じ構造をしている;時間tの状態を運動方程式に従ってt+dtにするだけ。

サブルーチンを使う理由 スペースの節約 デバッグがしやすい 一度書いて間違いがないことを確かめたらもうそのまま直さないでよい

関数とサブルーチン 関数:exp(x), sin(x)のように変数を与えてある手続きで別の数を出すもの。Fortran90を始め,ほとんどのプログラミング言語では,我々が自分で関数を作ることが出来る。 サブルーチン:変数に対してある手続きを行い,別の変数を作るプロセス。変数は複数でもよい。

関数プログラムの例 ここでは華氏から摂氏の変換プログラムを扱う。 摂氏=(華氏-32)*5/9 (私は華氏68度=摂氏20度として,それからのずれを5/9≒0.5 して,計算している。例えばニュースで華氏80度と言われたら (80-32)*5/9=26.67をやらず,(80-68)/2+20=26と概算してる。)

これをfahrenheit2celsius.f90としてsave program fahrenheit2celsius !------------------------- ! This is a program to convert F to C ! 2005/5/16 Written by T. Ohtsuki implicit none ! Always begin with this statement integer,parameter::double=selected_real_kind(14) real(kind=double):: fahrenheit,celsius !---------main program--------- print *, "Input temperature in Fahrenheit." read *, fahrenheit celsius=f2c(fahrenheit) print *,"It is ",celsius,"degree in celsius" contains !------------------- Subroutines --------------------- function f2c(temperature) ! function to convert fahrenheit to celsius IMPLICIT NONE REAL(kind=double), INTENT(IN) :: temperature REAL(kind=double):: f2c f2c=(temperature-32._double)/1.8_double END function f2c end program fahrenheit2celsius これをfahrenheit2celsius.f90としてsave

別のやり方:ファイルを分ける これはfahrenheit2celsius2.f90としてsave このプログラムではf2cの program fahrenheit2celsius !------------------------- ! This is a program to convert F to C ! 2005/5/16 Written by T. Ohtsuki implicit none ! Always begin with this statement integer,parameter::double=selected_real_kind(14) real(kind=double):: fahrenheit,celsius interface function f2c(temperature) real(kind=double)::f2c real(kind=double),intent(IN)::temperature end function f2c end interface !---------main program--------- print *, "Input temperature in Fahrenheit." read *, fahrenheit celsius=f2c(fahrenheit) print *,"It is ",celsius,"degree in celsius" end program fahrenheit2celsius このプログラムではf2cの 変数の型がわからないので このinterfaceで判断させる

関数を独立させる これはf2c.f90としてsave function f2c(temperature) !------------------------- ! function to convert fahrenheit to celsius IMPLICIT NONE integer,parameter::double=selected_real_kind(14) REAL(kind=double), INTENT(IN) :: temperature REAL(kind=double):: f2c !interfaceを使わない例 f2c=(temperature-32._double)/1.8_double END function f2c 前のをfahrenheit2celsius2.f90, これをf2c.f90と名付ける。 f90 fahrenheit2celsius2.f90 f2c.f90で実行ファイルを作る。

関数のモジュール化 似たような関数をまとめたい モジュール化 例えば華氏摂氏の逆で摂氏華氏を行う関数も一つにしておきたい場合

program fahrenheit2celsius !------------------------- ! This is a program to convert F to C ! 2005/5/16 Written by T. Ohtsuki use temperaturelibs implicit none ! Always begin with this statement integer,parameter::double=selected_real_kind(14) real(kind=double):: fahrenheit,celsius !---------main program--------- print *, "Input temperature in Fahrenheit." read *, fahrenheit celsius=f2c(fahrenheit) print *,"It is ",celsius,"degree in celsius" print *, "Input temperature in Celsius." read *, celsius fahrenheit=c2f(celsius) print *,"It is ",fahrenheit,"degree in fahrenheit." end program fahrenheit2celsius

モジュールとはこんなもの module temperaturelibs implicit none contains function f2c(temperature) !------------------------- ! function to convert fahrenheit to celsius IMPLICIT NONE integer,parameter::double=selected_real_kind(14) REAL(kind=double), INTENT(IN) :: temperature REAL(kind=double):: f2c f2c=(temperature-32._double)/1.8_double END function f2c function c2f(temperature) REAL(kind=double):: c2f c2f=temperature*1.8_double+32 END function c2f end module temperaturelibs

モジュールの形のプログラムのコンパイルの仕方 まず使うモジュールプログラム(ここではtemperaturelibs.f90とする)を、あらかじめコンパイルしておく。 f90 -c temperaturelibs.f90 (-c はコンパイルだけやり、実行ファイルは作るなというオプション) すると、temperaturelibs.o, temperaturelibs.modというファイルができる。 次に f90 fahrenheit2celsius3.f90 temperaturelibs.o というコマンドで実行ファイルを作る。

サブルーチンとは? 関数に似ている 関数よりも広く,手続きを行う。一群の変数をいれると一群の変数を返してくれる 一つの関数の値だけでなく,例えば行列を変数にすると,その固有値,固有ベクトルを返してくれるようなものがサブルーチン 具体的に,f2cをサブルーチンの形で書き直そう。

これはfahrenheit2celsius4.f90としてsave program fahrenheit2celsius !------------------------- ! This is a program to convert F to C ! 2005/5/16 Written by T. Ohtsuki ! 2005/5/17 subroutine version implicit none ! Always begin with this statement integer,parameter::double=selected_real_kind(14) real(kind=double):: fahrenheit,celsius !---------main program--------- print *, "Input temperature in Fahrenheit." read *, fahrenheit call f2c(fahrenheit,celsius) print *,"It is ",celsius,"degree in celsius" end program fahrenheit2celsius これはfahrenheit2celsius4.f90としてsave

subroutine f2c(fah,cel). ------------------------- subroutine f2c(fah,cel) !------------------------- ! function to convert fahrenheit to celsius !------------------------- IMPLICIT NONE integer,parameter::double=selected_real_kind(14) REAL(kind=double), INTENT(IN) :: fah REAL(kind=double),INTENT(OUT):: cel cel=(fah-32._double)/1.8_double END subroutine f2c こちらはf2csubroutine.f90としてsave

課題 中点法のプログラムをサブルーチン化する。 課題  中点法のプログラムをサブルーチン化する。 来週の授業までに出す。出来た人は,落下運動のプログラムにこれを適用し,動作を確認して,来週の出席メールに添付すること。