subroutine CompositionInit
!
! composition モジュールの初期化を行います.
! NAMELIST#composition_nml の読み込みはこの手続きで行われます.
!
! "composition" module is initialized.
! NAMELIST#composition_nml is loaded in this procedure.
!
! モジュール引用 ; USE statements
!
! NAMELIST ファイル入力に関するユーティリティ
! Utilities for NAMELIST file input
!
use namelist_util, only: namelist_filename, NmlutilMsg
! ファイル入出力補助
! File I/O support
!
use dc_iounit, only: FileOpen
! 種別型パラメタ
! Kind type parameter
!
use dc_types, only: STDOUT ! 標準出力の装置番号. Unit number of standard output
! メッセージ出力
! Message output
!
use dc_message, only: MessageNotify
! 宣言文 ; Declaration statements
!
implicit none
integer:: unit_nml ! NAMELIST ファイルオープン用装置番号.
! Unit number for NAMELIST file open
integer:: iostat_nml ! NAMELIST 読み込み時の IOSTAT.
! IOSTAT of NAMELIST read
integer:: n ! 組成方向に回る DO ループ用作業変数
! Work variables for DO loop in dimension of constituents
! NAMELIST 変数群
! NAMELIST group name
!
namelist /composition_nml/ ncmax, IndexH2OVap
!
! デフォルト値については初期化手続 "composition#CompositionInit"
! のソースコードを参照のこと.
!
! Refer to source codes in the initialization procedure
! "composition#CompositionInit" for the default values.
!
! 実行文 ; Executable statement
!
if ( composition_inited ) return
!!$ call InitCheck
! デフォルト値の設定
! Default values settings
!
ncmax = 1
IndexH2OVap = 1
! 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 = composition_nml, iostat = iostat_nml )
close( unit_nml )
call NmlutilMsg( iostat_nml, module_name ) ! (in)
if ( iostat_nml == 0 ) write( STDOUT, nml = composition_nml )
end if
! 配列サイズのチェック
! Check number of array size
!
if ( ncmax < 1 ) then
call MessageNotify( 'E', module_name, 'number of composition has to be greater than 0. ' // 'ncmax=%d' , i = (/ ncmax /) )
end if
! 水蒸気のインデックスのチェック
! Check index for water vapor
!
if ( ( IndexH2OVap < 1 ) .or. ( IndexH2OVap > ncmax ) ) then
call MessageNotify( 'E', module_name, 'IndexH2OVap has to be greater than or equal to 1 and less than or equal to ncmax. ' // 'IndexH2OVap=%d' , i = (/ IndexH2OVap /) )
end if
! Set variable name of constituents for ouptut
!
allocate( QMixName ( ncmax ) )
allocate( QMixLongName( ncmax ) )
if ( ncmax > 99 ) then
call MessageNotify( 'E', module_name, 'number of composition greater than 99 is inappropriate for current version. ' // 'ncmax=%d' , i = (/ ncmax /) )
end if
do n = 1, IndexH2OVap-1
write( QMixName(n), '(a,i3.3)' ) "QMix", n
QMixLongName(n) = QMixName(n)
end do
n = IndexH2OVap
QMixName (n) = "QVap"
QMixLongName(n) = "specific humidity"
do n = IndexH2OVap+1, ncmax
write( QMixName(n), '(a,i3.3)' ) "QMix", n
QMixLongName(n) = QMixName(n)
end do
! 印字 ; Print
!
call MessageNotify( 'M', module_name, '----- Initialization Messages -----' )
call MessageNotify( 'M', module_name, ' ncmax = %d', i = (/ ncmax /) )
call MessageNotify( 'M', module_name, ' IndexH2OVap = %d', i = (/ IndexH2OVap /) )
do n = 1, ncmax
call MessageNotify( 'M', module_name, ' QMixName(%d) = %c', i = (/ n /), c1 = trim(QMixName(n)) )
end do
do n = 1, ncmax
call MessageNotify( 'M', module_name, ' QMixLongName(%d) = %c', i = (/ n /), c1 = trim(QMixLongName(n)) )
end do
call MessageNotify( 'M', module_name, '-- version = %c', c1 = trim(version) )
composition_inited = .true.
end subroutine CompositionInit