なお,このライブラリは 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