Class xyz_bc_module_mpi
In: util/xyz_bc_module_mpi.f90

3 次元 (xyz 方向) 不等間隔交互格子 有限差分モデル用 境界条件モジュール

概要

xyz_bc_module は, 3 次元 (xyz 方向) 不等間隔交互格子を用いた有限差分法に 基づく数値モデルのための, 境界条件設定 Fortran 90 副プログラムを提供 する.

このモジュールは xyz_module の下位モジュールである. 下請けモジュール として data_type, xyz_base_module, x_bc_module, y_bc_module, z_bc_module モジュールを用いている.

手続きの命名法

境界条件を設定する副プログラムは

  Boundary[境界条件を示す文字列][...]_(入力配列の次元情報)

のように命名されている. 境界条件を示す文字列の種類は x_bc_module, y_bc_module, z_bc_module の場合と同じである.

Methods

Included Modules

dc_types xyz_base_module gridset_3d x_bc_module y_bc_module z_bc_module mpi_wrapper

Public Instance methods

Subroutine :
pyz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXAsym_pyz(pyz_Var)
    real(DBKIND),intent(inout) :: pyz_Var(imin:imax,jmin:jmax,kmin:kmax) 
    
    ! x 方向に反対称境界条件を適用する
    pyz_Var(0,:,:) = 0.0d0
    pyz_Var(im,:,:) = 0.0d0
          
    do ix = 1, xmargin-1
      pyz_Var(-ix,:,:) = - pyz_Var(ix,:,:)
    end do
    
    do ix = 1, xmargin
      pyz_Var(im+ix,:,:) = - pyz_Var(im-ix,:,:)
    end do
    
  end subroutine BoundaryXAsym_pyz
Subroutine :
xaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXAsym_xaa(xaa_Var)
    real(DBKIND),intent(inout) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax) 

    do ix = 1, xmargin
      xaa_Var(1-ix,:,:)  = - xaa_Var(ix,:,:)
      xaa_Var(im+ix,:,:) = - xaa_Var(im+1-ix,:,:)
    end do
    
  end subroutine BoundaryXAsym_xaa
Subroutine :
xaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXAsym_xaa(xaa_Var)
    real(DBKIND),intent(inout) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax) 

    do ix = 1, xmargin
      xaa_Var(1-ix,:,:)  = - xaa_Var(ix,:,:)
      xaa_Var(im+ix,:,:) = - xaa_Var(im+1-ix,:,:)
    end do
    
  end subroutine BoundaryXAsym_xaa
Subroutine :
xaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXAsym_xaa(xaa_Var)
    real(DBKIND),intent(inout) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax) 

    do ix = 1, xmargin
      xaa_Var(1-ix,:,:)  = - xaa_Var(ix,:,:)
      xaa_Var(im+ix,:,:) = - xaa_Var(im+1-ix,:,:)
    end do
    
  end subroutine BoundaryXAsym_xaa
Subroutine :
aaa_Var(imin:imax, jmin:jmax, kmin:kmax) :real(8), intent(inout)

[Source]

  subroutine BoundaryXCyc_aaa(aaa_Var)
    
    implicit none
    
    !変数定義
    real(8), intent(inout)  :: aaa_Var(imin:imax, jmin:jmax, kmin:kmax)
    integer            :: idest_a, idep_a, idest_b, idep_b
    integer, parameter :: nvars = 1
!    real(8)            :: sbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: sbuf_b( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_b( XMargin, jm, km, nvars )
    real(8)            :: sbuf_a( XMargin, jm, km )
    real(8)            :: rbuf_a( XMargin, jm, km )
    real(8)            :: sbuf_b( XMargin, jm, km )
    real(8)            :: rbuf_b( XMargin, jm, km )
    integer            :: ireqs_a, ireqr_a, ireqs_b, ireqr_b
    integer            :: i, j, k
    
    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_a)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_a( i, j, k ) = aaa_var( im + 1 - i , j, k ) 
        end do
      end do
    end do

    idest_a = mod(( myrank+1 )       , nprocs)   !送信先
    idep_a  = mod(( myrank-1 )+nprocs, nprocs)   !受信元

    call MPIWrapperISend( idest_a, xmargin, jm, km, sbuf_a, ireqs_a ) !送信
    call MPIWrapperIRecv( idep_a , xmargin, jm, km, rbuf_a, ireqr_a ) !受信
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_b)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_b( i, j, k ) = aaa_var( i, j, k ) 
        end do
      end do
    end do
    
    idest_b = mod(( myrank-1 )+nprocs, nprocs)    !送信先
    idep_b  = mod(( myrank+1 )       , nprocs)    !受信元

    call MPIWrapperISend( idest_b, xmargin, jm, km, sbuf_b, ireqs_b ) !送信
    call MPIWrapperIRecv( idep_b , xmargin, jm, km, rbuf_b, ireqr_b ) !受信

    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_a)を代入する.
    call MPIWrapperWait( ireqs_a )
    call MPIWrapperWait( ireqr_a )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var( 1-i , j, k ) = rbuf_a( i, j, k ) 
        end do
      end do
    end do
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_b)を代入する.
    call MPIWrapperWait( ireqs_b )
    call MPIWrapperWait( ireqr_b )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var(im + i , j, k ) = rbuf_b( i, j, k ) 
        end do
      end do
    end do

  end subroutine BoundaryXCyc_aaa
Subroutine :
aaa_Var(imin:imax, jmin:jmax, kmin:kmax) :real(8), intent(inout)

[Source]

  subroutine BoundaryXCyc_aaa(aaa_Var)
    
    implicit none
    
    !変数定義
    real(8), intent(inout)  :: aaa_Var(imin:imax, jmin:jmax, kmin:kmax)
    integer            :: idest_a, idep_a, idest_b, idep_b
    integer, parameter :: nvars = 1
!    real(8)            :: sbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: sbuf_b( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_b( XMargin, jm, km, nvars )
    real(8)            :: sbuf_a( XMargin, jm, km )
    real(8)            :: rbuf_a( XMargin, jm, km )
    real(8)            :: sbuf_b( XMargin, jm, km )
    real(8)            :: rbuf_b( XMargin, jm, km )
    integer            :: ireqs_a, ireqr_a, ireqs_b, ireqr_b
    integer            :: i, j, k
    
    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_a)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_a( i, j, k ) = aaa_var( im + 1 - i , j, k ) 
        end do
      end do
    end do

    idest_a = mod(( myrank+1 )       , nprocs)   !送信先
    idep_a  = mod(( myrank-1 )+nprocs, nprocs)   !受信元

    call MPIWrapperISend( idest_a, xmargin, jm, km, sbuf_a, ireqs_a ) !送信
    call MPIWrapperIRecv( idep_a , xmargin, jm, km, rbuf_a, ireqr_a ) !受信
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_b)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_b( i, j, k ) = aaa_var( i, j, k ) 
        end do
      end do
    end do
    
    idest_b = mod(( myrank-1 )+nprocs, nprocs)    !送信先
    idep_b  = mod(( myrank+1 )       , nprocs)    !受信元

    call MPIWrapperISend( idest_b, xmargin, jm, km, sbuf_b, ireqs_b ) !送信
    call MPIWrapperIRecv( idep_b , xmargin, jm, km, rbuf_b, ireqr_b ) !受信

    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_a)を代入する.
    call MPIWrapperWait( ireqs_a )
    call MPIWrapperWait( ireqr_a )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var( 1-i , j, k ) = rbuf_a( i, j, k ) 
        end do
      end do
    end do
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_b)を代入する.
    call MPIWrapperWait( ireqs_b )
    call MPIWrapperWait( ireqr_b )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var(im + i , j, k ) = rbuf_b( i, j, k ) 
        end do
      end do
    end do

  end subroutine BoundaryXCyc_aaa
Subroutine :
aaa_Var(imin:imax, jmin:jmax, kmin:kmax) :real(8), intent(inout)

[Source]

  subroutine BoundaryXCyc_aaa(aaa_Var)
    
    implicit none
    
    !変数定義
    real(8), intent(inout)  :: aaa_Var(imin:imax, jmin:jmax, kmin:kmax)
    integer            :: idest_a, idep_a, idest_b, idep_b
    integer, parameter :: nvars = 1
!    real(8)            :: sbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: sbuf_b( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_b( XMargin, jm, km, nvars )
    real(8)            :: sbuf_a( XMargin, jm, km )
    real(8)            :: rbuf_a( XMargin, jm, km )
    real(8)            :: sbuf_b( XMargin, jm, km )
    real(8)            :: rbuf_b( XMargin, jm, km )
    integer            :: ireqs_a, ireqr_a, ireqs_b, ireqr_b
    integer            :: i, j, k
    
    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_a)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_a( i, j, k ) = aaa_var( im + 1 - i , j, k ) 
        end do
      end do
    end do

    idest_a = mod(( myrank+1 )       , nprocs)   !送信先
    idep_a  = mod(( myrank-1 )+nprocs, nprocs)   !受信元

    call MPIWrapperISend( idest_a, xmargin, jm, km, sbuf_a, ireqs_a ) !送信
    call MPIWrapperIRecv( idep_a , xmargin, jm, km, rbuf_a, ireqr_a ) !受信
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_b)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_b( i, j, k ) = aaa_var( i, j, k ) 
        end do
      end do
    end do
    
    idest_b = mod(( myrank-1 )+nprocs, nprocs)    !送信先
    idep_b  = mod(( myrank+1 )       , nprocs)    !受信元

    call MPIWrapperISend( idest_b, xmargin, jm, km, sbuf_b, ireqs_b ) !送信
    call MPIWrapperIRecv( idep_b , xmargin, jm, km, rbuf_b, ireqr_b ) !受信

    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_a)を代入する.
    call MPIWrapperWait( ireqs_a )
    call MPIWrapperWait( ireqr_a )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var( 1-i , j, k ) = rbuf_a( i, j, k ) 
        end do
      end do
    end do
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_b)を代入する.
    call MPIWrapperWait( ireqs_b )
    call MPIWrapperWait( ireqr_b )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var(im + i , j, k ) = rbuf_b( i, j, k ) 
        end do
      end do
    end do

  end subroutine BoundaryXCyc_aaa
Subroutine :
aaa_Var(imin:imax, jmin:jmax, kmin:kmax) :real(8), intent(inout)

[Source]

  subroutine BoundaryXCyc_aaa(aaa_Var)
    
    implicit none
    
    !変数定義
    real(8), intent(inout)  :: aaa_Var(imin:imax, jmin:jmax, kmin:kmax)
    integer            :: idest_a, idep_a, idest_b, idep_b
    integer, parameter :: nvars = 1
!    real(8)            :: sbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_a( XMargin, jm, km, nvars )
!    real(8)            :: sbuf_b( XMargin, jm, km, nvars )
!    real(8)            :: rbuf_b( XMargin, jm, km, nvars )
    real(8)            :: sbuf_a( XMargin, jm, km )
    real(8)            :: rbuf_a( XMargin, jm, km )
    real(8)            :: sbuf_b( XMargin, jm, km )
    real(8)            :: rbuf_b( XMargin, jm, km )
    integer            :: ireqs_a, ireqr_a, ireqs_b, ireqr_b
    integer            :: i, j, k
    
    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_a)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_a( i, j, k ) = aaa_var( im + 1 - i , j, k ) 
        end do
      end do
    end do

    idest_a = mod(( myrank+1 )       , nprocs)   !送信先
    idep_a  = mod(( myrank-1 )+nprocs, nprocs)   !受信元

    call MPIWrapperISend( idest_a, xmargin, jm, km, sbuf_a, ireqs_a ) !送信
    call MPIWrapperIRecv( idep_a , xmargin, jm, km, rbuf_a, ireqr_a ) !受信
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 送信する部分配列(sbuf_b)を用意する
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          sbuf_b( i, j, k ) = aaa_var( i, j, k ) 
        end do
      end do
    end do
    
    idest_b = mod(( myrank-1 )+nprocs, nprocs)    !送信先
    idep_b  = mod(( myrank+1 )       , nprocs)    !受信元

    call MPIWrapperISend( idest_b, xmargin, jm, km, sbuf_b, ireqs_b ) !送信
    call MPIWrapperIRecv( idep_b , xmargin, jm, km, rbuf_b, ireqr_b ) !受信

    !-------------------------------
    ! 配列の右側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_a)を代入する.
    call MPIWrapperWait( ireqs_a )
    call MPIWrapperWait( ireqr_a )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var( 1-i , j, k ) = rbuf_a( i, j, k ) 
        end do
      end do
    end do
    
    !-------------------------------
    ! 配列の左側を, ノード間で通信する.
    ! 受信した部分配列(rbuf_b)を代入する.
    call MPIWrapperWait( ireqs_b )
    call MPIWrapperWait( ireqr_b )
    
    do k = 1, km
      do j = 1, jm
        do i = 1, XMargin
          aaa_var(im + i , j, k ) = rbuf_b( i, j, k ) 
        end do
      end do
    end do

  end subroutine BoundaryXCyc_aaa
Subroutine :
pyz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXSym_pyz(pyz_Var)
    real(DBKIND),intent(inout) :: pyz_Var(imin:imax,jmin:jmax,kmin:kmax) 
    
    ! x 方向に対称境界条件を適用する
    do ix = 1, xmargin-1
      pyz_Var(-ix,:,:)   = pyz_Var(ix,:,:)      
    end do
    
    do ix = 1, xmargin
      pyz_Var(im+ix,:,:) = pyz_Var(im+1-ix,:,:)
    end do
    
    
  end subroutine BoundaryXSym_pyz
Subroutine :
xaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXSym_xaa(xaa_Var)
    real(DBKIND),intent(inout) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
    
    do ix = 1, xmargin
      xaa_Var(1-ix,:,:)  = xaa_Var(ix,:,:)
      xaa_Var(im+ix,:,:) = xaa_Var(im+1-ix,:,:)
    end do
    
  end subroutine BoundaryXSym_xaa
Subroutine :
xaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXSym_xaa(xaa_Var)
    real(DBKIND),intent(inout) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
    
    do ix = 1, xmargin
      xaa_Var(1-ix,:,:)  = xaa_Var(ix,:,:)
      xaa_Var(im+ix,:,:) = xaa_Var(im+1-ix,:,:)
    end do
    
  end subroutine BoundaryXSym_xaa
Subroutine :
xaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

  subroutine BoundaryXSym_xaa(xaa_Var)
    real(DBKIND),intent(inout) :: xaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
    
    do ix = 1, xmargin
      xaa_Var(1-ix,:,:)  = xaa_Var(ix,:,:)
      xaa_Var(im+ix,:,:) = xaa_Var(im+1-ix,:,:)
    end do
    
  end subroutine BoundaryXSym_xaa
Subroutine :
xqz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYASym_xqz(xqz_Var)
      real(DBKIND),intent(inout) :: xqz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      integer           :: ix, kz
      
      ! y 方向に反対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundaryASym_q(xqz_Var(ix,:,kz))
!        end do
!      end do

      xqz_Var(:,0,:) = 0.0d0
      xqz_Var(:,jm,:) = 0.0d0
          
      do jy = 1, ymargin-1
        xqz_Var(:,-jy,:) = - xqz_Var(:,jy,:)
      end do

      do jy = 1, ymargin
        xqz_Var(:,jm+jy,:) = - xqz_Var(:,jm-jy,:)
      end do

    end subroutine BoundaryYAsym_xqz
Subroutine :
aya_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYASym_aya(aya_Var)
      real(DBKIND),intent(inout) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! y 方向に反対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundaryASym_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aya_Var(:,1-jy,:)  = - aya_Var(:,jy,:)
        aya_Var(:,jm+jy,:) = - aya_Var(:,jm+1-jy,:)
      end do

    end subroutine BoundaryYAsym_aya
Subroutine :
aya_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYASym_aya(aya_Var)
      real(DBKIND),intent(inout) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! y 方向に反対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundaryASym_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aya_Var(:,1-jy,:)  = - aya_Var(:,jy,:)
        aya_Var(:,jm+jy,:) = - aya_Var(:,jm+1-jy,:)
      end do

    end subroutine BoundaryYAsym_aya
Subroutine :
aya_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYASym_aya(aya_Var)
      real(DBKIND),intent(inout) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! y 方向に反対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundaryASym_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aya_Var(:,1-jy,:)  = - aya_Var(:,jy,:)
        aya_Var(:,jm+jy,:) = - aya_Var(:,jm+1-jy,:)
      end do

    end subroutine BoundaryYAsym_aya
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      integer           :: ix, kz
      
      ! y 方向に周期境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call BoundaryCyc_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aaa_Var(:,1-jy,:)  = aaa_Var(:,jm+1-jy,:)
        aaa_Var(:,jm+jy,:) = aaa_Var(:,jy,:)
      end do

    end subroutine BoundaryYCyc_aaa
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      integer           :: ix, kz
      
      ! y 方向に周期境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call BoundaryCyc_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aaa_Var(:,1-jy,:)  = aaa_Var(:,jm+1-jy,:)
        aaa_Var(:,jm+jy,:) = aaa_Var(:,jy,:)
      end do

    end subroutine BoundaryYCyc_aaa
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      integer           :: ix, kz
      
      ! y 方向に周期境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call BoundaryCyc_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aaa_Var(:,1-jy,:)  = aaa_Var(:,jm+1-jy,:)
        aaa_Var(:,jm+jy,:) = aaa_Var(:,jy,:)
      end do

    end subroutine BoundaryYCyc_aaa
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      integer           :: ix, kz
      
      ! y 方向に周期境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call BoundaryCyc_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aaa_Var(:,1-jy,:)  = aaa_Var(:,jm+1-jy,:)
        aaa_Var(:,jm+jy,:) = aaa_Var(:,jy,:)
      end do

    end subroutine BoundaryYCyc_aaa
Subroutine :
aya_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYSym_aya(aya_Var)
      real(DBKIND),intent(inout) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! y 方向に対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundarySym_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aya_Var(:,1-jy,:)  = aya_Var(:,jy,:)
        aya_Var(:,jm+jy,:) = aya_Var(:,jm+1-jy,:)
      end do

    end subroutine BoundaryYsym_aya
Subroutine :
xqz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYSym_xqz(xqz_Var)
      real(DBKIND),intent(inout) :: xqz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! y 方向に対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundarySym_q(xqz_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin-1
        xqz_Var(:,-jy,:)   = xqz_Var(:,jy,:)      
      end do

      do jy = 1, ymargin
        xqz_Var(:,jm+jy,:) = xqz_Var(:,jm+1-jy,:)
      end do

    end subroutine BoundaryYsym_xqz
Subroutine :
aya_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYSym_aya(aya_Var)
      real(DBKIND),intent(inout) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! y 方向に対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundarySym_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aya_Var(:,1-jy,:)  = aya_Var(:,jy,:)
        aya_Var(:,jm+jy,:) = aya_Var(:,jm+1-jy,:)
      end do

    end subroutine BoundaryYsym_aya
Subroutine :
aya_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryYSym_aya(aya_Var)
      real(DBKIND),intent(inout) :: aya_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! y 方向に対称境界条件を適用する
!      do kz = kmin, kmax
!        do ix = imin, imax
!          call boundarySym_y(aya_Var(ix,:,kz))
!        end do
!      end do

      do jy = 1, ymargin
        aya_Var(:,1-jy,:)  = aya_Var(:,jy,:)
        aya_Var(:,jm+jy,:) = aya_Var(:,jm+1-jy,:)
      end do

    end subroutine BoundaryYsym_aya
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZAsym_aaz(aaz_Var)
      real(DBKIND),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に反対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryAsym_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaz_Var(:,:,1-kz)  = - aaz_Var(:,:,kz)
        aaz_Var(:,:,km+kz) = - aaz_Var(:,:,km+1-kz)
      end do

    end subroutine BoundaryZAsym_aaz
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZAsym_aaz(aaz_Var)
      real(DBKIND),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に反対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryAsym_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaz_Var(:,:,1-kz)  = - aaz_Var(:,:,kz)
        aaz_Var(:,:,km+kz) = - aaz_Var(:,:,km+1-kz)
      end do

    end subroutine BoundaryZAsym_aaz
Subroutine :
xyr_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZAsym_xyr(xyr_Var)
      real(DBKIND),intent(inout) :: xyr_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に反対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryAsym_r(xyr_Var(ix,jy,:))
!        end do
!      end do

      xyr_Var(:,:,0) = 0.0d0
      xyr_Var(:,:,km) = 0.0d0
          
      do kz = 1, zmargin-1
        xyr_Var(:,:,-kz) = - xyr_Var(:,:,kz)
      end do

      do kz = 1, zmargin
        xyr_Var(:,:,km+kz) = - xyr_Var(:,:,km-kz)
      end do

    end subroutine BoundaryZAsym_xyr
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZAsym_aaz(aaz_Var)
      real(DBKIND),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に反対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryAsym_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaz_Var(:,:,1-kz)  = - aaz_Var(:,:,kz)
        aaz_Var(:,:,km+kz) = - aaz_Var(:,:,km+1-kz)
      end do

    end subroutine BoundaryZAsym_aaz
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に周期境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryCyc_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaa_Var(:,:,1-kz)  = aaa_Var(:,:,km+1-kz)
        aaa_Var(:,:,km+kz) = aaa_Var(:,:,kz)
      end do

    end subroutine BoundaryZCyc_aaa
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に周期境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryCyc_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaa_Var(:,:,1-kz)  = aaa_Var(:,:,km+1-kz)
        aaa_Var(:,:,km+kz) = aaa_Var(:,:,kz)
      end do

    end subroutine BoundaryZCyc_aaa
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に周期境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryCyc_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaa_Var(:,:,1-kz)  = aaa_Var(:,:,km+1-kz)
        aaa_Var(:,:,km+kz) = aaa_Var(:,:,kz)
      end do

    end subroutine BoundaryZCyc_aaa
Subroutine :
aaa_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZCyc_aaa(aaa_Var)
      real(DBKIND),intent(inout) :: aaa_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に周期境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundaryCyc_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaa_Var(:,:,1-kz)  = aaa_Var(:,:,km+1-kz)
        aaa_Var(:,:,km+kz) = aaa_Var(:,:,kz)
      end do

    end subroutine BoundaryZCyc_aaa
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZSym_aaz(aaz_Var)
      real(DBKIND),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundarySym_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaz_Var(:,:,1-kz)  = aaz_Var(:,:,kz)
        aaz_Var(:,:,km+kz) = aaz_Var(:,:,km+1-kz)
      end do


    end subroutine BoundaryZSym_aaz
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZSym_aaz(aaz_Var)
      real(DBKIND),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundarySym_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaz_Var(:,:,1-kz)  = aaz_Var(:,:,kz)
        aaz_Var(:,:,km+kz) = aaz_Var(:,:,km+1-kz)
      end do


    end subroutine BoundaryZSym_aaz
Subroutine :
xyr_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZSym_xyr(xyr_Var)
      real(DBKIND),intent(inout) :: xyr_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundarySym_r(xyr_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin-1
        xyr_Var(:,:,-kz)   = xyr_Var(:,:,kz)      
      end do

      do kz = 1, zmargin
        xyr_Var(:,:,km+kz) = xyr_Var(:,:,km+1-kz)
      end do

    end subroutine BoundaryZSym_xyr
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DBKIND),intent(inout)

[Source]

    subroutine BoundaryZSym_aaz(aaz_Var)
      real(DBKIND),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 
      
      ! z 方向に対称境界条件を適用する
!      do jy = jmin, jmax
!        do ix = imin, imax
!          call boundarySym_z(aaz_Var(ix,jy,:))
!        end do
!      end do

      do kz = 1, zmargin
        aaz_Var(:,:,1-kz)  = aaz_Var(:,:,kz)
        aaz_Var(:,:,km+kz) = aaz_Var(:,:,km+1-kz)
      end do


    end subroutine BoundaryZSym_aaz