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