Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:34:00 2011
FILE NAME: xyz_deriv_c4_module.f90
PROGRAM NAME: xyz_deriv_c4_module
DIAGNOSTIC LIST

  LINE  LEVEL( NO.): DIAGNOSTIC MESSAGE

   106  vec  (   4): Vectorized array expression.
   106  vec  (   4): Vectorized array expression.
   110  vec  (   1): Vectorized loop.
   110  vec  (   1): Vectorized loop.
   128  vec  (   4): Vectorized array expression.
   128  vec  (   4): Vectorized array expression.
   132  vec  (   1): Vectorized loop.
   132  vec  (   1): Vectorized loop.
   150  vec  (   4): Vectorized array expression.
   150  vec  (   4): Vectorized array expression.
   157  vec  (   3): Unvectorized loop.
   158  vec  (   4): Vectorized array expression.
   158  vec  (   4): Vectorized array expression.
   175  vec  (   4): Vectorized array expression.
   175  vec  (   4): Vectorized array expression.
   182  vec  (   3): Unvectorized loop.
   183  vec  (   4): Vectorized array expression.
   183  vec  (   4): Vectorized array expression.
   200  vec  (   4): Vectorized array expression.
   200  vec  (   4): Vectorized array expression.
   204  vec  (   3): Unvectorized loop.
   205  vec  (   4): Vectorized array expression.
   222  vec  (   4): Vectorized array expression.
   222  vec  (   4): Vectorized array expression.
   227  vec  (   3): Unvectorized loop.
   228  vec  (   4): Vectorized array expression.
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:34:00 2011
FILE NAME: xyz_deriv_c4_module.f90
PROGRAM NAME: xyz_deriv_c4_module
TRANSFORMATION LIST

  LINE                   FORTRAN STATEMENT

     1  !---------------------------------------------------------------------
     2  !     Copyright (C) GFD Dennou Club, 2006. All rights reserved.
     3  !---------------------------------------------------------------------
     4  !
     5  != 3 次元 (xyz 方向) 不等間隔交互格子 微分演算モジュール
     6  !
     7  !* 履歴
     8  !  * 2007/07/15 (小高正嗣) : 3D deepconv へ移植, dc_types を Use.
     9  !  * 2007/06/27 (小高正嗣) : 1 次元微分演算モジュールに依存しないよう修正
    10  !  * 2006/06/07 (小高正嗣) : 新規作成
    11  !
    12  
    13  module xyz_deriv_c4_module
    14    != 3 次元 (xyz 方向) 不等間隔交互格子 微分演算モジュール
    15    !
    16    !== 機能
    17    !
    18    ! xyz_deriv_module は, 3 次元 (xyz 方向) 不等間隔交互格子を用いた有限差分
    19    ! 法に基づく数値モデルのための, 微分演算を行う Fortran90 関数を提供する.
    20    ! 微分演算は 4 次精度中心差分を用いて行う.
    21    !
    22    ! このモジュールは下請けモジュールとして xyz_base_module, data_type
    23    ! モジュールを用いている.
    24    !
    25    ! モジュール内の変数と手続きの命名方法については xyz_module を参照のこと.
    26    !
    27    !
    28    !== 変数, 手続きの要約
    29    !
    30    !=== 1 階微分
    31    !
    32    ! xyz_dx_pyz, pyz_dx_xyz :: x 方向 1 階微分を計算する
    33    ! xyz_dy_xqz, xqz_dy_xyz :: y 方向 1 階微分を計算する
    34    ! xyz_dz_xyr, xyr_dz_xyz :: z 方向 1 階微分を計算する
    35    !
    36    !
    37    !== 備考
    38    !
    39    ! 差分式は格子間隔を一定とした
    40    !
    41    !    du/dx(i) = 9/8*[u(i)-u(i-1)]/dx(i) - 1/24*[u(i+1)-u(i-2)]/dx(i)
    42    !
    43    ! を用いている. 不等間隔格子の場合は精度が落ちることに注意.
    44    !
    45  
    46    use dc_types,   only : DP
    47    use dc_message, only : MessageNotify
    48    use gridset,    only : imin, imax, jmin, jmax, kmin, kmax
    49    use axesset,    only : x_dx, p_dx, y_dy, q_dy, z_dz, r_dz
    50  
    51    implicit none
    52    private
    53    public :: xyz_c4dx_pyz, pyz_c4dx_xyz, pyr_c4dx_xyr, pqz_c4dx_xqz, &
    54      &       xyz_c4dy_xqz, xqz_c4dy_xyz, pqz_c4dy_pyz, xqr_c4dy_xyr, &
    55      &       xyz_c4dz_xyr, xyr_c4dz_xyz, pyr_c4dz_pyz, xqr_c4dz_xqz
    56  
    57    interface pyz_c4dx_xyz
    58      module procedure paa_c4dx_xaa
    59    end interface
    60  
    61    interface pyr_c4dx_xyr
    62      module procedure paa_c4dx_xaa
    63    end interface
    64  
    65    interface pqz_c4dx_xqz
    66      module procedure paa_c4dx_xaa
    67    end interface
    68  
    69    interface xqz_c4dy_xyz
    70      module procedure aqa_c4dy_aya
    71    end interface
    72  
    73    interface pqz_c4dy_pyz
    74      module procedure aqa_c4dy_aya
    75    end interface
    76  
    77    interface xqr_c4dy_xyr
    78      module procedure aqa_c4dy_aya
    79    end interface
    80  
    81    interface xyr_c4dz_xyz
    82      module procedure aar_c4dz_aaz
    83    end interface
    84  
    85    interface pyr_c4dz_pyz
    86      module procedure aar_c4dz_aaz
    87    end interface
    88  
    89    interface xqr_c4dz_xqz
    90      module procedure aar_c4dz_aaz
    91    end interface
    92  
    93  
    94    contains
    95  !--------------------------------------------------------------------
    96      function xyz_c4dx_pyz(pyz_Var)
    97        ! 半整数格子点上の 1 階微分を計算する
    98  
    99        real(DP),intent(in) :: pyz_Var(imin:imax,jmin:jmax,kmin:kmax)
   100        real(DP)            :: xyz_c4dx_pyz(imin:imax,jmin:jmax,kmin:kmax)
   101        integer                 :: ix
   102  
   103        ! 初期化
   104        ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   105        !
   106        xyz_c4dx_pyz = 0.0d0
     .        if (xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.U2 + 1 -                     
     .       1   xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2 .gt. 0) then               
     .           J1 = and(xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.U2 + 1 -             
     .       1      xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,3)                      
     .  !CDIR    NODEP                                                          
     .           do t101 = 1, J1                                                
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L1                      
     .                 xyz_c4dx_pyz(xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t101 = J1 + 1, xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.U2 + 1 -    
     .       1      xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2, 4                      
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L1                      
     .                 xyz_c4dx_pyz(xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dx_pyz(xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t99+         
     .       2            xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dx_pyz(xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+1+xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dx_pyz(xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+2+xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   107  
   108        ! 1 階微分の計算
   109        !
   110        do ix = imin+2, imax-1
   111          xyz_c4dx_pyz(ix,:,:) = &
   112            &   ((pyz_Var(ix,:,:)   - pyz_Var(ix-1,:,:))*9.0d0/(8.0d0*x_dx(ix)) &
   113            & - ((pyz_Var(ix+1,:,:) - pyz_Var(ix-2,:,:))/(24.0d0*x_dx(ix))))
   114        end do
     .  !CDIR NODEP                                                             
     .        do t108 = 1, kmax + 1 - kmin                                      
     .           if (jmax + 1 - jmin .gt. 0) then                               
     .              J2 = and(jmax + 1 - jmin,3)                                 
     .  !CDIR       NODEP                                                       
     .              do t110 = 1, J2                                             
     .  !CDIR          NODEP                                                    
     .                 do ix = 1, imax - imin - 2                               
     .                    xyz_c4dx_pyz(imin+1+ix,t110-1+                        
     .       1               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) = (pyz_var(   
     .       3               imin+1+ix,t110-1+t19,t108-1+t21)-pyz_var(imin+ix,  
     .       4               t110-1+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*x_dx(imin+1+ix)) - (pyz_var( 
     .       6               imin+2+ix,t110-1+t19,t108-1+t21)-pyz_var(imin+ix-1,
     .       7               t110-1+t19,t108-1+t21))/(2.40000000000000e+001*x_dx
     .       8               (imin+1+ix))                                       
     .                 end do                                                   
     .              end do                                                      
     .  !CDIR       NODEP                                                       
     .              do t110 = J2 + 1, jmax + 1 - jmin, 4                        
     .  !CDIR          NODEP                                                    
     .                 do ix = 1, imax - imin - 2                               
     .                    D1 = x_dx(imin+1+ix)                                  
     .                    xyz_c4dx_pyz(imin+1+ix,t110-1+                        
     .       1               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) = (pyz_var(   
     .       3               imin+1+ix,t110-1+t19,t108-1+t21)-pyz_var(imin+ix,  
     .       4               t110-1+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*D1) - (pyz_var(imin+2+ix,t110
     .       6               -1+t19,t108-1+t21)-pyz_var(imin+ix-1,t110-1+t19,   
     .       7               t108-1+t21))/(2.40000000000000e+001*D1)            
     .                    xyz_c4dx_pyz(imin+1+ix,t110+                          
     .       1               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) = (pyz_var(   
     .       3               imin+1+ix,t110+t19,t108-1+t21)-pyz_var(imin+ix,t110
     .       4               +t19,t108-1+t21))*9.00000000000000e+000/(          
     .       5               8.00000000000000e+000*D1) - (pyz_var(imin+2+ix,t110
     .       6               +t19,t108-1+t21)-pyz_var(imin+ix-1,t110+t19,t108-1+
     .       7               t21))/(2.40000000000000e+001*D1)                   
     .                    xyz_c4dx_pyz(imin+1+ix,t110+1+                        
     .       1               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) = (pyz_var(   
     .       3               imin+1+ix,t110+1+t19,t108-1+t21)-pyz_var(imin+ix,  
     .       4               t110+1+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*D1) - (pyz_var(imin+2+ix,t110
     .       6               +1+t19,t108-1+t21)-pyz_var(imin+ix-1,t110+1+t19,   
     .       7               t108-1+t21))/(2.40000000000000e+001*D1)            
     .                    xyz_c4dx_pyz(imin+1+ix,t110+2+                        
     .       1               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               xyz_c4dx_pyz.DESCRIPT.RETVAL.DSC.L3) = (pyz_var(   
     .       3               imin+1+ix,t110+2+t19,t108-1+t21)-pyz_var(imin+ix,  
     .       4               t110+2+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*D1) - (pyz_var(imin+2+ix,t110
     .       6               +2+t19,t108-1+t21)-pyz_var(imin+ix-1,t110+2+t19,   
     .       7               t108-1+t21))/(2.40000000000000e+001*D1)            
     .                 end do                                                   
     .              end do                                                      
     .           endif                                                          
     .        end do                                                            
   115  
   116      end function xyz_c4dx_pyz
   117  !--------------------------------------------------------------------
   118      function paa_c4dx_xaa(xaa_Var)
   119        ! 半整数格子点上の 1 階微分を計算する
   120  
   121        real(DP),intent(in) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax)
   122        real(DP)            :: paa_c4dx_xaa(imin:imax,jmin:jmax,kmin:kmax)
   123        integer                 :: ix
   124  
   125        ! 初期化
   126        ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   127        !
   128        paa_c4dx_xaa = 0.0d0
     .        if (paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.U2 + 1 -                     
     .       1   paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2 .gt. 0) then               
     .           J1 = and(paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.U2 + 1 -             
     .       1      paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,3)                      
     .  !CDIR    NODEP                                                          
     .           do t101 = 1, J1                                                
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L1                      
     .                 paa_c4dx_xaa(paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t101 = J1 + 1, paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.U2 + 1 -    
     .       1      paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2, 4                      
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L1                      
     .                 paa_c4dx_xaa(paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 paa_c4dx_xaa(paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t99+         
     .       2            paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 paa_c4dx_xaa(paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+1+paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 paa_c4dx_xaa(paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+2+paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   129  
   130        ! 1 階微分の計算
   131        !
   132        do ix = imin+1, imax-2
   133          paa_c4dx_xaa(ix,:,:) = &
   134            &   ((xaa_Var(ix+1,:,:) - xaa_Var(ix,:,:))*9.0d0/(8.0d0*p_dx(ix)) &
   135            & - ((xaa_Var(ix+2,:,:) - xaa_Var(ix-1,:,:))/(24.0d0*p_dx(ix))))
   136        end do
     .  !CDIR NODEP                                                             
     .        do t108 = 1, kmax + 1 - kmin                                      
     .           if (jmax + 1 - jmin .gt. 0) then                               
     .              J2 = and(jmax + 1 - jmin,3)                                 
     .  !CDIR       NODEP                                                       
     .              do t110 = 1, J2                                             
     .  !CDIR          NODEP                                                    
     .                 do ix = 1, imax - imin - 2                               
     .                    paa_c4dx_xaa(imin+ix,t110-1+                          
     .       1               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) = (xaa_var(   
     .       3               imin+1+ix,t110-1+t19,t108-1+t21)-xaa_var(imin+ix,  
     .       4               t110-1+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*p_dx(imin+ix)) - (xaa_var(   
     .       6               imin+2+ix,t110-1+t19,t108-1+t21)-xaa_var(imin+ix-1,
     .       7               t110-1+t19,t108-1+t21))/(2.40000000000000e+001*p_dx
     .       8               (imin+ix))                                         
     .                 end do                                                   
     .              end do                                                      
     .  !CDIR       NODEP                                                       
     .              do t110 = J2 + 1, jmax + 1 - jmin, 4                        
     .  !CDIR          NODEP                                                    
     .                 do ix = 1, imax - imin - 2                               
     .                    D1 = p_dx(imin+ix)                                    
     .                    paa_c4dx_xaa(imin+ix,t110-1+                          
     .       1               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) = (xaa_var(   
     .       3               imin+1+ix,t110-1+t19,t108-1+t21)-xaa_var(imin+ix,  
     .       4               t110-1+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*D1) - (xaa_var(imin+2+ix,t110
     .       6               -1+t19,t108-1+t21)-xaa_var(imin+ix-1,t110-1+t19,   
     .       7               t108-1+t21))/(2.40000000000000e+001*D1)            
     .                    paa_c4dx_xaa(imin+ix,t110+                            
     .       1               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) = (xaa_var(   
     .       3               imin+1+ix,t110+t19,t108-1+t21)-xaa_var(imin+ix,t110
     .       4               +t19,t108-1+t21))*9.00000000000000e+000/(          
     .       5               8.00000000000000e+000*D1) - (xaa_var(imin+2+ix,t110
     .       6               +t19,t108-1+t21)-xaa_var(imin+ix-1,t110+t19,t108-1+
     .       7               t21))/(2.40000000000000e+001*D1)                   
     .                    paa_c4dx_xaa(imin+ix,t110+1+                          
     .       1               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) = (xaa_var(   
     .       3               imin+1+ix,t110+1+t19,t108-1+t21)-xaa_var(imin+ix,  
     .       4               t110+1+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*D1) - (xaa_var(imin+2+ix,t110
     .       6               +1+t19,t108-1+t21)-xaa_var(imin+ix-1,t110+1+t19,   
     .       7               t108-1+t21))/(2.40000000000000e+001*D1)            
     .                    paa_c4dx_xaa(imin+ix,t110+2+                          
     .       1               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L2,t108-1+        
     .       2               paa_c4dx_xaa.DESCRIPT.RETVAL.DSC.L3) = (xaa_var(   
     .       3               imin+1+ix,t110+2+t19,t108-1+t21)-xaa_var(imin+ix,  
     .       4               t110+2+t19,t108-1+t21))*9.00000000000000e+000/(    
     .       5               8.00000000000000e+000*D1) - (xaa_var(imin+2+ix,t110
     .       6               +2+t19,t108-1+t21)-xaa_var(imin+ix-1,t110+2+t19,   
     .       7               t108-1+t21))/(2.40000000000000e+001*D1)            
     .                 end do                                                   
     .              end do                                                      
     .           endif                                                          
     .        end do                                                            
   137  
   138      end function paa_c4dx_xaa
   139  !--------------------------------------------------------------------
   140      function xyz_c4dy_xqz(xqz_Var)
   141        ! 半整数格子点上の 1 階微分を計算する
   142  
   143        real(DP),intent(in) :: xqz_Var(imin:imax,jmin:jmax,kmin:kmax)
   144        real(DP)            :: xyz_c4dy_xqz(imin:imax,jmin:jmax,kmin:kmax)
   145        integer                 :: jy
   146  
   147        ! 初期化
   148        ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   149        !
   150        xyz_c4dy_xqz = 0.0d0
     .        if (xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.U2 + 1 -                     
     .       1   xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2 .gt. 0) then               
     .           J1 = and(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.U2 + 1 -             
     .       1      xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2,3)                      
     .  !CDIR    NODEP                                                          
     .           do t103 = 1, J1                                                
     .  !CDIR       NODEP                                                       
     .              do t105 = 1, xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1                      
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103-1+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t103 = J1 + 1, xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.U2 + 1 -    
     .       1      xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2, 4                      
     .  !CDIR       NODEP                                                       
     .              do t105 = 1, xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1                      
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103-1+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2,t101+        
     .       2            xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103+1+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103+2+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   151  
   152        ! y 方向一様な場合は微分はゼロ.
   153        if (jmin == jmax) return
   154  
   155        ! 1 階微分の計算
   156        !
   157        do jy = jmin+2, jmax-1
   158          xyz_c4dy_xqz(:,jy,:) = &
     .        if (kmax + 1 - kmin .gt. 0) then                                  
     .           J2 = and(kmax + 1 - kmin,3)                                    
     .  !CDIR    NODEP                                                          
     .           do t110 = 1, J2                                                
     .              D2 = 9.00000000000000e+000/(8.00000000000000e+000*y_dy(jy)) 
     .              D3 = 1.D0/(2.40000000000000e+001*y_dy(jy))                  
     .  !CDIR       NODEP                                                       
     .              do t112 = 1, imax + 1 - imin                                
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110-1+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            xqz_var(t17+t112-1,jy,t110-1+t21)-xqz_var(t17+t112-1, 
     .       3            jy-1,t110-1+t21))*D2 - (xqz_var(t17+t112-1,jy+1,t110-1
     .       4            +t21)-xqz_var(t17+t112-1,jy-2,t110-1+t21))*D3         
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t110 = J2 + 1, kmax + 1 - kmin, 4                           
     .              D1 = y_dy(jy)                                               
     .  !CDIR       NODEP                                                       
     .              do t112 = 1, imax + 1 - imin                                
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110-1+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            xqz_var(t17+t112-1,jy,t110-1+t21)-xqz_var(t17+t112-1, 
     .       3            jy-1,t110-1+t21))*9.00000000000000e+000/(             
     .       4            8.00000000000000e+000*D1) - (xqz_var(t17+t112-1,jy+1, 
     .       5            t110-1+t21)-xqz_var(t17+t112-1,jy-2,t110-1+t21))/(    
     .       6            2.40000000000000e+001*D1)                             
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) = (      
     .       2            xqz_var(t17+t112-1,jy,t110+t21)-xqz_var(t17+t112-1,jy-
     .       3            1,t110+t21))*9.00000000000000e+000/(                  
     .       4            8.00000000000000e+000*D1) - (xqz_var(t17+t112-1,jy+1, 
     .       5            t110+t21)-xqz_var(t17+t112-1,jy-2,t110+t21))/(        
     .       6            2.40000000000000e+001*D1)                             
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110+1+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            xqz_var(t17+t112-1,jy,t110+1+t21)-xqz_var(t17+t112-1, 
     .       3            jy-1,t110+1+t21))*9.00000000000000e+000/(             
     .       4            8.00000000000000e+000*D1) - (xqz_var(t17+t112-1,jy+1, 
     .       5            t110+1+t21)-xqz_var(t17+t112-1,jy-2,t110+1+t21))/(    
     .       6            2.40000000000000e+001*D1)                             
     .                 xyz_c4dy_xqz(xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110+2+xyz_c4dy_xqz.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            xqz_var(t17+t112-1,jy,t110+2+t21)-xqz_var(t17+t112-1, 
     .       3            jy-1,t110+2+t21))*9.00000000000000e+000/(             
     .       4            8.00000000000000e+000*D1) - (xqz_var(t17+t112-1,jy+1, 
     .       5            t110+2+t21)-xqz_var(t17+t112-1,jy-2,t110+2+t21))/(    
     .       6            2.40000000000000e+001*D1)                             
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   159            &   ((xqz_Var(:,jy,:)   - xqz_Var(:,jy-1,:))*9.0d0/(8.0d0*y_dy(jy)) &
   160            & - ((xqz_Var(:,jy+1,:) - xqz_Var(:,jy-2,:))/(24.0d0*y_dy(jy))))
   161        end do
   162  
   163      end function xyz_c4dy_xqz
   164  !--------------------------------------------------------------------
   165      function aqa_c4dy_aya(aya_Var)
   166        ! 半整数格子点上の 1 階微分を計算する
   167  
   168        real(DP),intent(in) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax)
   169        real(DP)            :: aqa_c4dy_aya(imin:imax,jmin:jmax,kmin:kmax)
   170        integer                 :: jy
   171  
   172        ! 初期化
   173        ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   174        !
   175        aqa_c4dy_aya = 0.0d0
     .        if (aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.U2 + 1 -                     
     .       1   aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2 .gt. 0) then               
     .           J1 = and(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.U2 + 1 -             
     .       1      aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2,3)                      
     .  !CDIR    NODEP                                                          
     .           do t103 = 1, J1                                                
     .  !CDIR       NODEP                                                       
     .              do t105 = 1, aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1                      
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103-1+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t103 = J1 + 1, aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.U2 + 1 -    
     .       1      aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2, 4                      
     .  !CDIR       NODEP                                                       
     .              do t105 = 1, aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1                      
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103-1+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2,t101+        
     .       2            aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103+1+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t105-1, 
     .       1            t103+2+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L2,t101+      
     .       2            aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   176  
   177        ! y 方向一様な場合は微分はゼロ.
   178        if (jmin == jmax) return
   179  
   180        ! 1 階微分の計算
   181        !
   182        do jy = jmin+1, jmax-2
   183          aqa_c4dy_aya(:,jy,:) = &
     .        if (kmax + 1 - kmin .gt. 0) then                                  
     .           J2 = and(kmax + 1 - kmin,3)                                    
     .  !CDIR    NODEP                                                          
     .           do t110 = 1, J2                                                
     .              D2 = 9.00000000000000e+000/(8.00000000000000e+000*q_dy(jy)) 
     .              D3 = 1.D0/(2.40000000000000e+001*q_dy(jy))                  
     .  !CDIR       NODEP                                                       
     .              do t112 = 1, imax + 1 - imin                                
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110-1+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            aya_var(t17+t112-1,jy+1,t110-1+t21)-aya_var(t17+t112-1
     .       3            ,jy,t110-1+t21))*D2 - (aya_var(t17+t112-1,jy+2,t110-1+
     .       4            t21)-aya_var(t17+t112-1,jy-1,t110-1+t21))*D3          
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t110 = J2 + 1, kmax + 1 - kmin, 4                           
     .              D1 = q_dy(jy)                                               
     .  !CDIR       NODEP                                                       
     .              do t112 = 1, imax + 1 - imin                                
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110-1+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            aya_var(t17+t112-1,jy+1,t110-1+t21)-aya_var(t17+t112-1
     .       3            ,jy,t110-1+t21))*9.00000000000000e+000/(              
     .       4            8.00000000000000e+000*D1) - (aya_var(t17+t112-1,jy+2, 
     .       5            t110-1+t21)-aya_var(t17+t112-1,jy-1,t110-1+t21))/(    
     .       6            2.40000000000000e+001*D1)                             
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) = (      
     .       2            aya_var(t17+t112-1,jy+1,t110+t21)-aya_var(t17+t112-1, 
     .       3            jy,t110+t21))*9.00000000000000e+000/(                 
     .       4            8.00000000000000e+000*D1) - (aya_var(t17+t112-1,jy+2, 
     .       5            t110+t21)-aya_var(t17+t112-1,jy-1,t110+t21))/(        
     .       6            2.40000000000000e+001*D1)                             
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110+1+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            aya_var(t17+t112-1,jy+1,t110+1+t21)-aya_var(t17+t112-1
     .       3            ,jy,t110+1+t21))*9.00000000000000e+000/(              
     .       4            8.00000000000000e+000*D1) - (aya_var(t17+t112-1,jy+2, 
     .       5            t110+1+t21)-aya_var(t17+t112-1,jy-1,t110+1+t21))/(    
     .       6            2.40000000000000e+001*D1)                             
     .                 aqa_c4dy_aya(aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L1+t112-1, 
     .       1            jy,t110+2+aqa_c4dy_aya.DESCRIPT.RETVAL.DSC.L3) = (    
     .       2            aya_var(t17+t112-1,jy+1,t110+2+t21)-aya_var(t17+t112-1
     .       3            ,jy,t110+2+t21))*9.00000000000000e+000/(              
     .       4            8.00000000000000e+000*D1) - (aya_var(t17+t112-1,jy+2, 
     .       5            t110+2+t21)-aya_var(t17+t112-1,jy-1,t110+2+t21))/(    
     .       6            2.40000000000000e+001*D1)                             
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   184            &   ((aya_Var(:,jy+1,:) - aya_Var(:,jy,:))*9.0d0/(8.0d0*q_dy(jy)) &
   185            & - ((aya_Var(:,jy+2,:) - aya_Var(:,jy-1,:))/(24.0d0*q_dy(jy))))
   186        end do
   187  
   188      end function aqa_c4dy_aya
   189  !--------------------------------------------------------------------
   190      function xyz_c4dz_xyr(xyr_Var)
   191        ! 半整数格子点上の 1 階微分を計算する
   192  
   193        real(DP),intent(in) :: xyr_Var(imin:imax,jmin:jmax,kmin:kmax)
   194        real(DP)            :: xyz_c4dz_xyr(imin:imax,jmin:jmax,kmin:kmax)
   195        integer                 :: kz
   196  
   197        ! 初期化
   198        ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   199        !
   200        xyz_c4dz_xyr = 0.0d0
     .        if (xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.U2 + 1 -                     
     .       1   xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2 .gt. 0) then               
     .           J1 = and(xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.U2 + 1 -             
     .       1      xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2,3)                      
     .  !CDIR    NODEP                                                          
     .           do t101 = 1, J1                                                
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1                      
     .                 xyz_c4dz_xyr(xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t101 = J1 + 1, xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.U2 + 1 -    
     .       1      xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2, 4                      
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1                      
     .                 xyz_c4dz_xyr(xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dz_xyr(xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2,t99+         
     .       2            xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dz_xyr(xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+1+xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 xyz_c4dz_xyr(xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+2+xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   201  
   202        ! 1 階微分の計算
   203        !
   204        do kz = kmin+2, kmax-1
   205          xyz_c4dz_xyr(:,:,kz) = &
     .        D1 = 9.00000000000000e+000/(8.00000000000000e+000*z_dz(kz))       
     .        D2 = 1.D0/(2.40000000000000e+001*z_dz(kz))                        
     .  !CDIR NODEP                                                             
     .  !CDIR NOASSUME                                                          
     .        do t108 = 1, (jmax + 1 - jmin)*(imax + 1 - imin)                  
     .           xyz_c4dz_xyr(xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L1+t108-1,       
     .       1      xyz_c4dz_xyr.DESCRIPT.RETVAL.DSC.L2,kz) = (xyr_var(t17+t108-
     .       2      1,t19,kz)-xyr_var(t17+t108-1,t19,kz-1))*D1 - (xyr_var(t17+  
     .       3      t108-1,t19,kz+1)-xyr_var(t17+t108-1,t19,kz-2))*D2           
     .        end do                                                            
   206            &   ((xyr_Var(:,:,kz)   - xyr_Var(:,:,kz-1))*9.0d0/(8.0d0*z_dz(kz)) &
   207            & - ((xyr_Var(:,:,kz+1) - xyr_Var(:,:,kz-2))/(24.0d0*z_dz(kz))))
   208        end do
   209  
   210      end function xyz_c4dz_xyr
   211  !--------------------------------------------------------------------
   212      function aar_c4dz_aaz(aaz_Var)
   213        ! 半整数格子点上の 1 階微分を計算する
   214  
   215        real(DP),intent(in) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax)
   216        real(DP)            :: aar_c4dz_aaz(imin:imax,jmin:jmax,kmin:kmax)
   217        integer                 :: kz
   218  
   219        ! 初期化
   220        ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   221        !
   222        aar_c4dz_aaz = 0.0d0
     .        if (aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.U2 + 1 -                     
     .       1   aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2 .gt. 0) then               
     .           J1 = and(aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.U2 + 1 -             
     .       1      aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2,3)                      
     .  !CDIR    NODEP                                                          
     .           do t101 = 1, J1                                                
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1                      
     .                 aar_c4dz_aaz(aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .  !CDIR    NODEP                                                          
     .           do t101 = J1 + 1, aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.U2 + 1 -    
     .       1      aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2, 4                      
     .  !CDIR       NODEP                                                       
     .              do t103 = 1, aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.U1 + 1 -      
     .       1         aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1                      
     .                 aar_c4dz_aaz(aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101-1+aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 aar_c4dz_aaz(aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2,t99+         
     .       2            aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 aar_c4dz_aaz(aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+1+aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .                 aar_c4dz_aaz(aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1+t103-1, 
     .       1            t101+2+aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2,t99+       
     .       2            aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L3) =                
     .       3            0.0000000000000000e+000                               
     .              end do                                                      
     .           end do                                                         
     .        endif                                                             
   223  
   224        ! 1 階微分の計算
   225        ! * r_c4dz_z を用いて計算
   226        !
   227        do kz = kmin+1, kmax-2
   228          aar_c4dz_aaz(:,:,kz) = &
     .        D1 = 9.00000000000000e+000/(8.00000000000000e+000*r_dz(kz))       
     .        D2 = 1.D0/(2.40000000000000e+001*r_dz(kz))                        
     .  !CDIR NODEP                                                             
     .  !CDIR NOASSUME                                                          
     .        do t108 = 1, (jmax + 1 - jmin)*(imax + 1 - imin)                  
     .           aar_c4dz_aaz(aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L1+t108-1,       
     .       1      aar_c4dz_aaz.DESCRIPT.RETVAL.DSC.L2,kz) = (aaz_var(t17+t108-
     .       2      1,t19,kz+1)-aaz_var(t17+t108-1,t19,kz))*D1 - (aaz_var(t17+  
     .       3      t108-1,t19,kz+2)-aaz_var(t17+t108-1,t19,kz-1))*D2           
     .        end do                                                            
   229            &   ((aaz_Var(:,:,kz+1) - aaz_Var(:,:,kz))*9.0d0/(8.0d0*r_dz(kz)) &
   230            & - ((aaz_Var(:,:,kz+2) - aaz_Var(:,:,kz-1))/(24.0d0*r_dz(kz))))
   231        end do
   232  
   233      end function aar_c4dz_aaz
   234  !--------------------------------------------------------------------
   235  end module xyz_deriv_c4_module
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:34:00 2011
FILE NAME: xyz_deriv_c4_module.f90
PROGRAM NAME: xyz_deriv_c4_module
FORMAT LIST

  LINE    LOOP     FORTRAN STATEMENT

     1:            !---------------------------------------------------------------------
     2:            !     Copyright (C) GFD Dennou Club, 2006. All rights reserved.
     3:            !---------------------------------------------------------------------
     4:            !
     5:            != 3 次元 (xyz 方向) 不等間隔交互格子 微分演算モジュール
     6:            !
     7:            !* 履歴
     8:            !  * 2007/07/15 (小高正嗣) : 3D deepconv へ移植, dc_types を Use.
     9:            !  * 2007/06/27 (小高正嗣) : 1 次元微分演算モジュールに依存しないよう修正
    10:            !  * 2006/06/07 (小高正嗣) : 新規作成
    11:            !
    12:            
    13:            module xyz_deriv_c4_module
    14:              != 3 次元 (xyz 方向) 不等間隔交互格子 微分演算モジュール
    15:              !
    16:              !== 機能
    17:              !
    18:              ! xyz_deriv_module は, 3 次元 (xyz 方向) 不等間隔交互格子を用いた有限差分
    19:              ! 法に基づく数値モデルのための, 微分演算を行う Fortran90 関数を提供する. 
    20:              ! 微分演算は 4 次精度中心差分を用いて行う.
    21:              !
    22:              ! このモジュールは下請けモジュールとして xyz_base_module, data_type 
    23:              ! モジュールを用いている. 
    24:              !
    25:              ! モジュール内の変数と手続きの命名方法については xyz_module を参照のこと.
    26:              !
    27:              !
    28:              !== 変数, 手続きの要約
    29:              !
    30:              !=== 1 階微分
    31:              !
    32:              ! xyz_dx_pyz, pyz_dx_xyz :: x 方向 1 階微分を計算する
    33:              ! xyz_dy_xqz, xqz_dy_xyz :: y 方向 1 階微分を計算する
    34:              ! xyz_dz_xyr, xyr_dz_xyz :: z 方向 1 階微分を計算する
    35:              !
    36:              !
    37:              !== 備考
    38:              !
    39:              ! 差分式は格子間隔を一定とした
    40:              !
    41:              !    du/dx(i) = 9/8*[u(i)-u(i-1)]/dx(i) - 1/24*[u(i+1)-u(i-2)]/dx(i)
    42:              ! 
    43:              ! を用いている. 不等間隔格子の場合は精度が落ちることに注意.
    44:              !
    45:            
    46:              use dc_types,   only : DP
    47:              use dc_message, only : MessageNotify
    48:              use gridset,    only : imin, imax, jmin, jmax, kmin, kmax
    49:              use axesset,    only : x_dx, p_dx, y_dy, q_dy, z_dz, r_dz       
    50:            
    51:              implicit none
    52:              private
    53:              public :: xyz_c4dx_pyz, pyz_c4dx_xyz, pyr_c4dx_xyr, pqz_c4dx_xqz, &
    54:                &       xyz_c4dy_xqz, xqz_c4dy_xyz, pqz_c4dy_pyz, xqr_c4dy_xyr, &
    55:                &       xyz_c4dz_xyr, xyr_c4dz_xyz, pyr_c4dz_pyz, xqr_c4dz_xqz
    56:            
    57:              interface pyz_c4dx_xyz
    58:                module procedure paa_c4dx_xaa
    59:              end interface
    60:            
    61:              interface pyr_c4dx_xyr
    62:                module procedure paa_c4dx_xaa
    63:              end interface
    64:            
    65:              interface pqz_c4dx_xqz
    66:                module procedure paa_c4dx_xaa
    67:              end interface
    68:             
    69:              interface xqz_c4dy_xyz
    70:                module procedure aqa_c4dy_aya
    71:              end interface
    72:            
    73:              interface pqz_c4dy_pyz
    74:                module procedure aqa_c4dy_aya
    75:              end interface
    76:            
    77:              interface xqr_c4dy_xyr
    78:                module procedure aqa_c4dy_aya
    79:              end interface
    80:            
    81:              interface xyr_c4dz_xyz
    82:                module procedure aar_c4dz_aaz
    83:              end interface
    84:            
    85:              interface pyr_c4dz_pyz
    86:                module procedure aar_c4dz_aaz
    87:              end interface
    88:            
    89:              interface xqr_c4dz_xqz
    90:                module procedure aar_c4dz_aaz
    91:              end interface
    92:            
    93:            
    94:              contains
    95:            !--------------------------------------------------------------------
    96:                function xyz_c4dx_pyz(pyz_Var)
    97:                  ! 半整数格子点上の 1 階微分を計算する
    98:              
    99:                  real(DP),intent(in) :: pyz_Var(imin:imax,jmin:jmax,kmin:kmax) 
   100:                  real(DP)            :: xyz_c4dx_pyz(imin:imax,jmin:jmax,kmin:kmax)
   101:                  integer                 :: ix                          
   102:            
   103:                  ! 初期化
   104:                  ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   105:                  !
   106: ++V====          xyz_c4dx_pyz = 0.0d0
   107:            
   108:                  ! 1 階微分の計算
   109:                  !
   110: X------>         do ix = imin+2, imax-1
   111: |++====            xyz_c4dx_pyz(ix,:,:) = &
   112: |                    &   ((pyz_Var(ix,:,:)   - pyz_Var(ix-1,:,:))*9.0d0/(8.0d0*x_dx(ix)) &
   113: |                    & - ((pyz_Var(ix+1,:,:) - pyz_Var(ix-2,:,:))/(24.0d0*x_dx(ix))))
   114: X------          end do
   115:            
   116:                end function xyz_c4dx_pyz
   117:            !--------------------------------------------------------------------
   118:                function paa_c4dx_xaa(xaa_Var)
   119:                  ! 半整数格子点上の 1 階微分を計算する
   120:              
   121:                  real(DP),intent(in) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
   122:                  real(DP)            :: paa_c4dx_xaa(imin:imax,jmin:jmax,kmin:kmax)
   123:                  integer                 :: ix                          
   124:            
   125:                  ! 初期化
   126:                  ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   127:                  !
   128: ++V====          paa_c4dx_xaa = 0.0d0
   129:            
   130:                  ! 1 階微分の計算
   131:                  !
   132: X------>         do ix = imin+1, imax-2
   133: |++====            paa_c4dx_xaa(ix,:,:) = &
   134: |                    &   ((xaa_Var(ix+1,:,:) - xaa_Var(ix,:,:))*9.0d0/(8.0d0*p_dx(ix)) &
   135: |                    & - ((xaa_Var(ix+2,:,:) - xaa_Var(ix-1,:,:))/(24.0d0*p_dx(ix))))
   136: X------          end do
   137:            
   138:                end function paa_c4dx_xaa
   139:            !--------------------------------------------------------------------
   140:                function xyz_c4dy_xqz(xqz_Var)
   141:                  ! 半整数格子点上の 1 階微分を計算する
   142:              
   143:                  real(DP),intent(in) :: xqz_Var(imin:imax,jmin:jmax,kmin:kmax) 
   144:                  real(DP)            :: xyz_c4dy_xqz(imin:imax,jmin:jmax,kmin:kmax)
   145:                  integer                 :: jy                          
   146:            
   147:                  ! 初期化
   148:                  ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   149:                  !
   150: ++V====          xyz_c4dy_xqz = 0.0d0
   151:            
   152:                  ! y 方向一様な場合は微分はゼロ.
   153:                  if (jmin == jmax) return
   154:            
   155:                  ! 1 階微分の計算
   156:                  !
   157: +------>         do jy = jmin+2, jmax-1
   158: |+V====            xyz_c4dy_xqz(:,jy,:) = &
   159: |                    &   ((xqz_Var(:,jy,:)   - xqz_Var(:,jy-1,:))*9.0d0/(8.0d0*y_dy(jy)) &
   160: |                    & - ((xqz_Var(:,jy+1,:) - xqz_Var(:,jy-2,:))/(24.0d0*y_dy(jy))))
   161: +------          end do
   162:            
   163:                end function xyz_c4dy_xqz
   164:            !--------------------------------------------------------------------
   165:                function aqa_c4dy_aya(aya_Var)
   166:                  ! 半整数格子点上の 1 階微分を計算する
   167:              
   168:                  real(DP),intent(in) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax) 
   169:                  real(DP)            :: aqa_c4dy_aya(imin:imax,jmin:jmax,kmin:kmax)
   170:                  integer                 :: jy                          
   171:            
   172:                  ! 初期化
   173:                  ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   174:                  !
   175: ++V====          aqa_c4dy_aya = 0.0d0
   176:            
   177:                  ! y 方向一様な場合は微分はゼロ.
   178:                  if (jmin == jmax) return
   179:            
   180:                  ! 1 階微分の計算
   181:                  !
   182: +------>         do jy = jmin+1, jmax-2
   183: |+V====            aqa_c4dy_aya(:,jy,:) = &
   184: |                    &   ((aya_Var(:,jy+1,:) - aya_Var(:,jy,:))*9.0d0/(8.0d0*q_dy(jy)) &
   185: |                    & - ((aya_Var(:,jy+2,:) - aya_Var(:,jy-1,:))/(24.0d0*q_dy(jy))))
   186: +------          end do
   187:            
   188:                end function aqa_c4dy_aya
   189:            !--------------------------------------------------------------------
   190:                function xyz_c4dz_xyr(xyr_Var)
   191:                  ! 半整数格子点上の 1 階微分を計算する
   192:              
   193:                  real(DP),intent(in) :: xyr_Var(imin:imax,jmin:jmax,kmin:kmax) 
   194:                  real(DP)            :: xyz_c4dz_xyr(imin:imax,jmin:jmax,kmin:kmax)
   195:                  integer                 :: kz
   196:            
   197:                  ! 初期化
   198:                  ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   199:                  !
   200: ++V====          xyz_c4dz_xyr = 0.0d0
   201:            
   202:                  ! 1 階微分の計算
   203:                  !
   204: +------>         do kz = kmin+2, kmax-1
   205: |W+====            xyz_c4dz_xyr(:,:,kz) = &
   206: |                    &   ((xyr_Var(:,:,kz)   - xyr_Var(:,:,kz-1))*9.0d0/(8.0d0*z_dz(kz)) &
   207: |                    & - ((xyr_Var(:,:,kz+1) - xyr_Var(:,:,kz-2))/(24.0d0*z_dz(kz))))
   208: +------          end do
   209:            
   210:                end function xyz_c4dz_xyr
   211:            !--------------------------------------------------------------------
   212:                function aar_c4dz_aaz(aaz_Var)
   213:                  ! 半整数格子点上の 1 階微分を計算する
   214:              
   215:                  real(DP),intent(in) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 
   216:                  real(DP)            :: aar_c4dz_aaz(imin:imax,jmin:jmax,kmin:kmax)
   217:                  integer                 :: kz
   218:            
   219:                  ! 初期化
   220:                  ! * 0 割りを防ぐためにはマシンイプシロン値を用いるべき
   221:                  !
   222: ++V====          aar_c4dz_aaz = 0.0d0
   223:            
   224:                  ! 1 階微分の計算
   225:                  ! * r_c4dz_z を用いて計算
   226:                  !
   227: +------>         do kz = kmin+1, kmax-2
   228: |W*====            aar_c4dz_aaz(:,:,kz) = &
   229: |                    &   ((aaz_Var(:,:,kz+1) - aaz_Var(:,:,kz))*9.0d0/(8.0d0*r_dz(kz)) &
   230: |                    & - ((aaz_Var(:,:,kz+2) - aaz_Var(:,:,kz-1))/(24.0d0*r_dz(kz))))
   231: +------          end do
   232:            
   233:                end function aar_c4dz_aaz
   234:            !--------------------------------------------------------------------
   235:            end module xyz_deriv_c4_module
