Class SetMargin
In: ../src/utils/setmargin2.f90

3 次元 (xyz 方向) 不等間隔交互格子 有限差分モデル用 境界条件モジュール X 方向・Y 方向には MPI を用いた並列化を行えるようにしている

Methods

Included Modules

dc_types gridset namelist_util mpi_wrapper dc_message

Public Instance methods

Subroutine :

初期化

Initialization of SetMargin

[Source]

  subroutine SetMargin_init
    !
    ! 初期化
    !
    ! Initialization of SetMargin 
    !

    ! モジュール引用 ; USE statements
    !
    use dc_message,  only: MessageNotify

    ! 作業変数
    ! Work variables
    !
    integer, parameter :: disp = 1
    integer            :: direction
    integer            :: comm_cart
    logical, parameter :: periodic = .true.

    ! 通信先の取得   
    !
    call MPIWrapperCartCreate(xsub, ysub, periodic, comm_cart)
    direction = 0
    call MPIWrapperCartShift(comm_cart, direction, disp, Urank, Drank)
    direction = 1
    call MPIWrapperCartShift(comm_cart, direction, disp, Lrank, Rrank)
    call MPIWrapperCommFree(comm_cart)

    if (myrank == 0) then 
      call MessageNotify( "M", "SetMargin_init", "Rrank = %d",   i=(/Rrank/) )
      call MessageNotify( "M", "SetMargin_init", "Lrank = %d",   i=(/Lrank/) )
      call MessageNotify( "M", "SetMargin_init", "Urank = %d",   i=(/Urank/) )
      call MessageNotify( "M", "SetMargin_init", "Drank = %d",   i=(/Drank/) )
    end if
    
  end subroutine SetMargin_init
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DP),intent(inout)

[Source]

  subroutine SetMargin_aaz(aaz_Var)

    implicit none
    real(DP),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 


    ! x, y 方向に周期境界条件を適用する
    !
    call XCyclYCycl( aaz_Var(:,:,:) ) !inout
    
    ! z 方向に対象境界条件を適用する
    !
    call ZSym( aaz_Var(:,:,:) ) !inout
       
  end subroutine SetMargin_aaz
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DP),intent(inout)

[Source]

  subroutine SetMargin_aaz(aaz_Var)

    implicit none
    real(DP),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 


    ! x, y 方向に周期境界条件を適用する
    !
    call XCyclYCycl( aaz_Var(:,:,:) ) !inout
    
    ! z 方向に対象境界条件を適用する
    !
    call ZSym( aaz_Var(:,:,:) ) !inout
       
  end subroutine SetMargin_aaz
Subroutine :
aar_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DP),intent(inout)

[Source]

  subroutine SetMargin_aar(aar_Var)

    implicit none
    real(DP),intent(inout) :: aar_Var(imin:imax,jmin:jmax,kmin:kmax) 


    ! x, y 方向に周期境界条件を適用する
    !
    call XCyclYCycl( aar_Var(:,:,:) ) !inout
    
    ! z 方向に対象境界条件を適用する
    !
    call ZAntSym( aar_Var(:,:,:) ) !inout
    
    
  end subroutine SetMargin_aar
Subroutine :
aaz_Var(imin:imax,jmin:jmax,kmin:kmax) :real(DP),intent(inout)

[Source]

  subroutine SetMargin_aaz(aaz_Var)

    implicit none
    real(DP),intent(inout) :: aaz_Var(imin:imax,jmin:jmax,kmin:kmax) 


    ! x, y 方向に周期境界条件を適用する
    !
    call XCyclYCycl( aaz_Var(:,:,:) ) !inout
    
    ! z 方向に対象境界条件を適用する
    !
    call ZSym( aaz_Var(:,:,:) ) !inout
       
  end subroutine SetMargin_aaz
Subroutine :
xyzf_Var(imin:imax,jmin:jmax,kmin:kmax,1:ncmax) :real(DP),intent(inout)

[Source]

  subroutine SetMargin_xyzf(xyzf_Var)

    implicit none
    real(DP),intent(inout) :: xyzf_Var(imin:imax,jmin:jmax,kmin:kmax,1:ncmax) 
    integer                :: s


    do s = 1, ncmax

      ! x, y 方向に周期境界条件を適用する
      !
      call XCyclYCycl( xyzf_Var(:,:,:,s) ) !inout

      ! z 方向に対象境界条件を適用する
      !
      call ZSym( xyzf_Var(:,:,:,s) ) !inout
      
    end do

  end subroutine SetMargin_xyzf