.

概要

このパッケージは連立常微分方程式の積分を行うためのものである. ここに含まれるルーチンは大きく3つのレベルにわかれる. 最下層のレベルは, 特定のアルゴリズムに従って1ステップ積分するアルゴリズムルーチンで, その上に精度チェックをしながら2ステップ積分して適当な刻み幅を求める ステッパルーチンがあり, 最上位に実際に与えられた積分区間の積分を行うドライバルーチンがある. ユーザーは通常このドライバルーチンを使って積分を行う. この際,ユーザーは使用するアルゴリズムルーチン,または, ステッパルーチンを目的に応じて指定することができる.

なお,このライブラリは 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)   内部変数を設定する.  
                                                   

サブルーチンの説明

ODRKG/ODRK4/ODRK2/ODRK1

  1. 機能
    特定のアルゴリズムに従い, 与えられたステップ幅で1ステップの積分を行う. 積分アルゴリズムは ODRKGがルンゲ-クッタ-ギル, ODRK4が4次精度のルンゲ-クッタ, ODRK2が2次精度のルンゲ-クッタ, ODRK1が1次精度のルンゲ-クッタ(Euler) である.

  2. 呼び出し方法
    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)

  3. パラメーターの説明
                                                                            
      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 (その他のルーチン).                      
                                                                            
    

  4. 備考
    1. FCN は サブルーチンの形でユーザーが用意する. その形式は以下のとおり.
      SUBROUTINE FCN(N,T,X,DX)

ODRKGR/ODRKGS/ODRK4R/ODRK4S

  1. 機能

    ODRKG (ODRKGR, ODRKGS) または, ODRK4 (ODRK4R, ODRK4S) により 2ステップの積分を行ない,精度のチェックをして適当なDTを求める. ODRKGSODRK4Sは与えられたDTで2ステップの積分をした後, 次のステップのためのDTを求めてリターンするが, ODRKGRODRK4Rは要求精度が満たされないときDTを 小さくして再計算を行う.

  2. 呼び出し方法
    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)

  3. パラメーターの説明
                                                                            
      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).                                     
                                                                            
    

  4. 備考
    1. ODRKGS, ODRK4SODRKGR, ODRK4R に比べて,作業領域が小さくてすむが, 要求精度が満たされたくても,再計算をしないので, 記憶領域が許す限り,ODRKGR, ODRK4R を推奨する.

      なお ODRKGS, ODRK4S では, DT を決める際に,小さめの安全率を 使っているので,方程式の性質が時間的に緩やかに変わる場合には 有効である.

    2. FCN は サブルーチンの形でユーザーが用意する. その形式は以下のとおり.
      SUBROUTINE FCN(N,T,X,DX)

ODRKDU

  1. 機能
    各アルゴリズムルーチンにより,固定刻幅で積分を行う.

  2. 呼び出し方法
    CALL ODRKDU(N,ALGOR,FCN,T,TEND,ISTEP,X,WORK)

  3. パラメーターの説明
                                                                            
      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(その他).             
                                                                            
    

  4. 備考
    1. 使用するアルゴリズムルーチンは,特に支障がない限り, ODRKG (Runge-Kutta-Gill) を推奨する.
    2. FCN は サブルーチンの形でユーザーが用意する. その形式は以下のとおり.
      SUBROUTINE FCN(N,T,X,DX)

ODRKDV

  1. 機能
    各ステッパルーチンにより,要求精度を満たすように積分を行う.

  2. 呼び出し方法
    CALL ODRKDV(N,STEPER,FCN,T,TINT,DT,X,WORK)

  3. パラメーターの説明
                                                                            
      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(その他).            
                                                                            
    

  4. 備考
    1. 精度は ODpGET/ODpSET の 管理する内部変数 'EPSILON'によって指定できる. 最初の呼び出し時に,引数 DT に適当な値を代入しておくと 要求精度を満たすように DT が設定されて返って来るので, これを,そのまま次回の呼び出し時に指定すればよい.
    2. ODRKDVODpGET/ODpSET の管理する内部変数 'MAXSTEP' で指定された 回数だけ積分しても TEND に到達しないときは, エラーメッセージを出力して,実行を中止する. 'MAXSTEP'ODISET で変更可能である.
    3. 使用するステッパルーチンは,特に支障がない限り, ODRKGR (Runge-Kutta-Gill 再計算)を推奨する.
    4. FCN は サブルーチンの形でユーザーが用意する. その形式は以下のとおり.
      SUBROUTINE FCN(N,T,X,DX)

ODpGET/ODpSET

  1. 機能
    ODRKDV で使用する内部変数を参照/設定する.

  2. 呼び出し方法
    CALL ODpGET(CPARA,IPARA)
    CALL ODpSET(CPARA,IPARA)

  3. パラメーターの説明
                                           
      CPARA   (C*8)   内部変数の名前.(i)  
                                           
      IPARA   (I,R)   内部変数の値.       
                                           
    

    以下にCPとして指定できる名前のリストを記す.

                                              
      'EPSILON'   (R)   要求精度.            
                                              
      'MAXSTEP'   (I)   最大積分回数.        
                                              
      'NSTEP'     (I)   実際に積分した回数.  
                                              
    

  4. 備考
    1. IPARAとしては適切な型の定数または変数を 指定すること.


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:02:35 EDT 1995