subroutine SLTTConstInit
! 種別型パラメタ
! Kind type parameter
!
use dc_types, only: STDOUT ! 標準出力の装置番号. Unit number of standard output
! NAMELIST ファイル入力に関するユーティリティ
! Utilities for NAMELIST file input
!
use namelist_util, only: namelist_filename, NmlutilMsg
! ファイル入出力補助
! File I/O support
!
use dc_iounit, only: FileOpen
use gridset , only : jmax
use mpi_wrapper, only : nprocs, myrank
use constants0 , only : PI
!
! local variables
!
integer:: unit_nml ! NAMELIST ファイルオープン用装置番号.
! Unit number for NAMELIST file open
integer:: iostat_nml ! NAMELIST 読み込み時の IOSTAT.
! IOSTAT of NAMELIST read
! NAMELIST 変数群
! NAMELIST group name
!
namelist /sltt_const_nml/ dtiw, dtjw
!
! デフォルト値については初期化手続 "sltt_const#SLTTConstInit"
! のソースコードを参照のこと.
!
! Refer to source codes in the initialization procedure
! "sltt_const#SLTTConstInit" for the default values.
!
! 実行文 ; Executable statement
!
if ( sltt_const_inited ) return
! デフォルト値の設定
! Default values settings
!
dtiw = 2
dtjw = 2
! NAMELIST の読み込み
! NAMELIST is input
!
if ( trim(namelist_filename) /= '' ) then
call FileOpen( unit_nml, namelist_filename, mode = 'r' ) ! (in)
rewind( unit_nml )
read( unit_nml, nml = sltt_const_nml, iostat = iostat_nml ) ! (out)
close( unit_nml )
call NmlutilMsg( iostat_nml, module_name ) ! (in)
if ( iostat_nml == 0 ) write( STDOUT, nml = sltt_const_nml )
end if
PIx2 = PI + PI
PIH = PI / 2.0_DP
!!$ if( jew > jmax/2 ) then
!!$ write( 6, * ) "SLTT ERROR : MYRANK = ", myrank, &
!!$ " JEW = ", jew, " JMAX/2 = ", jmax/2
!!$ write( 6, * ) "SLTT ERROR : JEW MUST BE LESS THAN JMAX."
!!$ stop
!!$ end if
!!$ if( nprocs > 1 ) then
!!$ if( jmax/2 < dtjw ) then
!!$ write( 6, * ) "SLTT ERROR : MYRANK = ", myrank, &
!!$ " JMAX/2 = ", jmax/2, " TRANSFERED J WIDTH = ", dtjw
!!$ write( 6, * ) "SLTT ERROR : JMAX MUST BE GREATER THAN TRANSFERED J WIDTH."
!!$ stop
!!$ end if
!!$ end if
! Set minimum and maximu indices for south-north separate extended arrays
!!$ iexmin = -2 ! width of halo region of dtjw
!!$ iexmax = imax-1+1+2 ! 1 for 360 longitude and width of halo region of dtjw
!!$ if ( myrank == (nprocs-1) ) then
!!$ jexmins = -dtjw ! minimum j of southern array
!!$ jexmaxs = jmax/2+dtjw ! maximum j of southern array
!!$ jexminn = -dtjw+1 ! maximum j of northern array
!!$ jexmaxn = jmax/2+1+dtjw ! maximum j of northern array
!!$ else
!!$ jexmins = -dtjw+1 ! minimum j of southern array
!!$ jexmaxs = jmax/2+dtjw ! maximum j of southern array
!!$ jexminn = -dtjw+1 ! maximum j of northern array
!!$ jexmaxn = jmax/2+dtjw ! maximum j of northern array
!!$ end if
jmaxh = jmax/2
iexmin = 0-dtiw ! width of halo region of dtiw
iexmax = imax-1+dtiw ! 1 for 360 longitude and width of halo region of dtiw
jexmin = -dtjw+1 ! minimum j of southern array
jexmax = jmaxh+dtjw ! maximum j of southern array
jexglobalmin = -dtjw+1
jexglobalmax = jmax_global+dtjw
! 印字 ; Print
!
call MessageNotify( 'M', module_name, '----- Initialization Messages -----' )
call MessageNotify( 'M', module_name, ' dtiw = %d', i = (/ dtiw /) )
call MessageNotify( 'M', module_name, ' dtjw = %d', i = (/ dtjw /) )
call MessageNotify( 'M', module_name, '-- version = %c', c1 = trim(version) )
sltt_const_inited = .true.
end subroutine SLTTConstInit