なお,このライブラリは Numerical Recipes のアルゴリズムに 基づくものである.
アルゴリズムルーチン
CALL ODRKG(N,FCN,T,DT,X,DX,XOUT,WORK) ルンゲ-クッタ-ギル.
CALL ODRK4(N,FCN,T,DT,X,DX,XOUT,WORK) 4次精度のルンゲ-クッタ.
CALL ODRK2(N,FCN,T,DT,X,DX,XOUT,WORK) 2次精度のルンゲ-クッタ.
CALL ODRK1(N,FCN,T,DT,X,DX,XOUT,WORK) 1次精度のルンゲ-クッタ.
ステッパルーチン
CALL ODRKGR(N,FCN,T,DT,EPSL,X,WORK) 可変幅のきざみを求める.
CALL ODRKGS(N,FCN,T,DT,EPSL,X,WORK) 固定幅のきざみを求める.
CALL ODRK4R(N,FCN,T,DT,EPSL,X,WORK) 可変幅のきざみを求める.
CALL ODRK4S(N,FCN,T,DT,EPSL,X,WORK) 固定幅のきざみを求める.
ドライバルーチン
CALL ODRKDU 固定刻幅で積分を行う.
(N,ALGOR,FCN,T,TEND,ISTEP,X,WOR
K)
CALL ODRKDV 要求精度を満たすように積分を行う
(N,STEPER,FCN,T,TINT,DT,X,WORK) .
内部変数管理ルーチン
CALL ODpGET(CPARA,IPARA) 内部変数を参照する.
CALL ODpSET(CPARA,IPARA) 内部変数を設定する.
特定のアルゴリズムに従い, 与えられたステップ幅で1ステップの積分を行う. 積分アルゴリズムは ODRKGがルンゲ-クッタ-ギル, ODRK4が4次精度のルンゲ-クッタ, ODRK2が2次精度のルンゲ-クッタ, ODRK1が1次精度のルンゲ-クッタ(Euler) である.
CALL ODRKG(N,FCN,T,DT,X,DX,XOUT,WORK)
CALL ODRK4(N,FCN,T,DT,X,DX,XOUT,WORK)
CALL ODRK2(N,FCN,T,DT,X,DX,XOUT,WORK)
CALL ODRK1(N,FCN,T,DT,X,DX,XOUT,WORK)
N (I) 被積分変数(方程式)の数.(i)
FCN 手続き名 DXを計算するサブルーチン名.
T (R) 独立変数tの値.(i)
DT (R) 積分ステップ幅. (i)
X R(N) 被積分変数のt=Tにおける値.(i)
DX R(N) 被積分変数のt=Tにおける微分値.(i)
ODRKGの時はDXの値は 保存されない.
XOUT R(N) 被積分変数のt=T+DTにおける値.(i)
実引数としてXと同じ変数を 指定してもよい.
WORK R(N,M) 作業変数. M=3 (ODRK4)
または 1 (その他のルーチン).
SUBROUTINE FCN(N,T,X,DX)
ODRKG (ODRKGR, ODRKGS) または, ODRK4 (ODRK4R, ODRK4S) により 2ステップの積分を行ない,精度のチェックをして適当なDTを求める. ODRKGSとODRK4Sは与えられたDTで2ステップの積分をした後, 次のステップのためのDTを求めてリターンするが, ODRKGRとODRK4Rは要求精度が満たされないときDTを 小さくして再計算を行う.
CALL ODRKGR(N,FCN,T,DT,EPSL,X,WORK)
CALL ODRKGS(N,FCN,T,DT,EPSL,X,WORK)
CALL ODRK4R(N,FCN,T,DT,EPSL,X,WORK)
CALL ODRK4S(N,FCN,T,DT,EPSL,X,WORK)
N (I) 被積分変数(方程式)の数.(i)
FCN 手続き名 DXを計算するサブルーチン名.
T (R) 独立変数tの値. 2ステップ分の積分幅を加えて
出力される.(i/o)
DT (R) 積分ステップ幅. 適当な値に変更されて出力される.
(i/o)
EPSL (R) 要求精度.(i)
X R(N) 被積分変数のt=Tにおける値を入力し, t=T+ 2 DT
における値 を出力する.
WORK R(N,M) 作業変数. M=7 (ODRK4R), M=5 (ODRK4S, ODRKGR)
, M=3 (ODRKGS).
なお ODRKGS, ODRK4S では, DT を決める際に,小さめの安全率を 使っているので,方程式の性質が時間的に緩やかに変わる場合には 有効である.
SUBROUTINE FCN(N,T,X,DX)
各アルゴリズムルーチンにより,固定刻幅で積分を行う.
CALL ODRKDU(N,ALGOR,FCN,T,TEND,ISTEP,X,WORK)
N (I) 被積分変数(方程式)の数.(i)
ALGOR 手続き名 使用するアルゴリズムルーチン名 (i)
FCN 手続き名 DXを計算するサブルーチン名 (i)
T (R) 積分を始める独立変数tの値. RETURN
時には最後のステップt (TEND) が出力される.(i/o)
TEND (R) 積分を終了する独立変数tの値.(i)
ISTEP (I) ステップ数.(i)
X R(N) 被積分変数のt=Tにおける値を入力し, t=TEND
における値を出力する. (i/o)
WORK R(N,M) 作業変数. M=5 (ODRK4), M=3(その他).
SUBROUTINE FCN(N,T,X,DX)
各ステッパルーチンにより,要求精度を満たすように積分を行う.
CALL ODRKDV(N,STEPER,FCN,T,TINT,DT,X,WORK)
N (I) 被積分変数(方程式)の数.(i)
STEPER 手続き名 使用するスッテパルーチン名.
FCN 手続き名 DXを計算するサブルーチン名 (i)
T (R) 積分を始める独立変数tの値. RETURN
時には最後のステップt (TEND) が出力される.(i/o)
TEND (R) 積分を終了するtの値.(i)
DT (I) ステップ幅の初期値.(i/o)
X R(N) 被積分変数のt=Tにおける値を入力し, t=TEND
における値を出力する. (i/o)
WORK R(N,M) 作業変数. M=7 (ODRK4), M=5(その他).
SUBROUTINE FCN(N,T,X,DX)
ODRKDV で使用する内部変数を参照/設定する.
CALL ODpGET(CPARA,IPARA)
CALL ODpSET(CPARA,IPARA)
CPARA (C*8) 内部変数の名前.(i) IPARA (I,R) 内部変数の値.
以下にCPとして指定できる名前のリストを記す.
'EPSILON' (R) 要求精度. 'MAXSTEP' (I) 最大積分回数. 'NSTEP' (I) 実際に積分した回数.
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:02:35 EDT 1995