Class | composition |
In: |
setup/composition.f90
|
Note that Japanese and English are described in parallel.
組成に関わる配列の設定
Settings of array for atmospheric composition
ncmax : | 微量成分の数 |
———— : | ———— |
ncmax : | Number of minor comstituents |
CompositionInit : | 組成に関わる配列の設定 |
————— : | ———— |
CompositionInit : | Settings of parameters for array for composition |
Subroutine : |
composition モジュールの初期化を行います. NAMELIST#composition_nml の読み込みはこの手続きで行われます.
"composition" module is initialized. NAMELIST#composition_nml is loaded in this procedure.
This procedure input/output NAMELIST#composition_nml .
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, MaxNmlArySize ! ファイル入出力補助 ! 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 character(len=STRING) :: Names (1:MaxNmlArySize) character(len=STRING) :: LongNames (1:MaxNmlArySize) logical :: FlagMassFix(1:MaxNmlArySize) logical :: FlagAdv (1:MaxNmlArySize) logical :: FlagVDiff (1:MaxNmlArySize) integer:: n ! 組成方向に回る DO ループ用作業変数 ! Work variables for DO loop in dimension of constituents ! NAMELIST 変数群 ! NAMELIST group name ! namelist /composition_nml/ ncmax, Names, LongNames, FlagMassFix, FlagAdv, FlagVDiff ! ! デフォルト値については初期化手続 "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 Names (1) = 'QVap' LongNames(1) = 'specific humidity' do n = 2, MaxNmlArySize Names (n) = '' LongNames(n) = '' end do FlagMassFix = .true. FlagAdv = .true. FlagVDiff = .true. ! 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 ! Set variable name of constituents for ouptut ! allocate( a_QMixName ( ncmax ) ) allocate( a_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, ncmax if ( Names(n) == '' ) then write( a_QMixName(n), '(a,i3.3)' ) "QMix", n else a_QMixName(n) = Names(n) end if if ( LongNames(n) == '' ) then a_QMixLongName(n) = a_QMixName(n) else a_QMixLongName(n) = LongNames(n) end if end do allocate( a_FlagMassFix( ncmax ) ) do n = 1, ncmax a_FlagMassFix( n ) = FlagMassFix(n) end do allocate( a_FlagAdv( ncmax ) ) do n = 1, ncmax a_FlagAdv( n ) = FlagAdv(n) end do allocate( a_FlagVDiff( ncmax ) ) do n = 1, ncmax a_FlagVDiff( n ) = FlagVDiff(n) end do IndexH2OVap = -1 do n = 1, ncmax if ( a_QMixName(n) == 'QVap' ) then IndexH2OVap = n exit end if end do ! 水蒸気のインデックスのチェック ! 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 ! 印字 ; Print ! call MessageNotify( 'M', module_name, '----- Initialization Messages -----' ) call MessageNotify( 'M', module_name, ' ncmax = %d', i = (/ ncmax /) ) do n = 1, ncmax call MessageNotify( 'M', module_name, ' QMixName(%d) = %c', i = (/ n /), c1 = trim(a_QMixName(n)) ) end do do n = 1, ncmax call MessageNotify( 'M', module_name, ' QMixLongName(%d) = %c', i = (/ n /), c1 = trim(a_QMixLongName(n)) ) end do do n = 1, ncmax call MessageNotify( 'M', module_name, ' FlagMassFix(%d) = %b', i = (/ n /), l = (/ a_FlagMassFix(n) /) ) end do do n = 1, ncmax call MessageNotify( 'M', module_name, ' FlagAdv(%d) = %b', i = (/ n /), l = (/ a_FlagAdv(n) /) ) end do do n = 1, ncmax call MessageNotify( 'M', module_name, ' FlagVDiff(%d) = %b', i = (/ n /), l = (/ a_FlagVDiff(n) /) ) end do call MessageNotify( 'M', module_name, ' IndexH2OVap = %d', i = (/ IndexH2OVap /) ) call MessageNotify( 'M', module_name, '-- version = %c', c1 = trim(version) ) composition_inited = .true. end subroutine CompositionInit
Function : | |
FlagAdv : | logical |
Index : | integer, intent(in ) |
Name で与えられた名前の成分の移流フラグを返します.
Inquiry of flag for advection of constituent
function CompositionInqFlagAdv( Index ) result( FlagAdv ) ! ! Name で与えられた名前の成分の移流フラグを返します. ! ! Inquiry of flag for advection of constituent ! ! モジュール引用 ; USE statements ! ! メッセージ出力 ! Message output ! use dc_message, only: MessageNotify ! 宣言文 ; Declaration statements ! implicit none integer, intent(in ) :: Index logical :: FlagAdv ! 実行文 ; Executable statement ! ! 初期化 ! Initialization ! if ( .not. composition_inited ) then call MessageNotify( 'E', module_name, 'This module has not been initialized.' ) end if if ( ( Index < 1 ) .or. ( Index > ncmax ) ) then call MessageNotify( 'E', module_name, 'Index is inappropriate, Index = %d', i = (/ Index /) ) end if FlagAdv = a_FlagAdv( Index ) end function CompositionInqFlagAdv
Function : | |
FlagMassFix : | logical |
Index : | integer, intent(in ) |
Name で与えられた名前の成分の移流フラグを返しします.
Inquiry of flag for advection of constituent
function CompositionInqFlagMassFix( Index ) result( FlagMassFix ) ! ! Name で与えられた名前の成分の移流フラグを返しします. ! ! Inquiry of flag for advection of constituent ! ! モジュール引用 ; USE statements ! ! メッセージ出力 ! Message output ! use dc_message, only: MessageNotify ! 宣言文 ; Declaration statements ! implicit none integer, intent(in ) :: Index logical :: FlagMassFix ! 実行文 ; Executable statement ! ! 初期化 ! Initialization ! if ( .not. composition_inited ) then call MessageNotify( 'E', module_name, 'This module has not been initialized.' ) end if if ( ( Index < 1 ) .or. ( Index > ncmax ) ) then call MessageNotify( 'E', module_name, 'Index is inappropriate, Index = %d', i = (/ Index /) ) end if FlagMassFix = a_FlagMassFix( Index ) end function CompositionInqFlagMassFix
Function : | |
FlagVDiff : | logical |
Index : | integer, intent(in ) |
Name で与えられた名前の成分の移流フラグを返しします.
Inquiry of flag for advection of constituent
function CompositionInqFlagVDiff( Index ) result( FlagVDiff ) ! ! Name で与えられた名前の成分の移流フラグを返しします. ! ! Inquiry of flag for advection of constituent ! ! モジュール引用 ; USE statements ! ! メッセージ出力 ! Message output ! use dc_message, only: MessageNotify ! 宣言文 ; Declaration statements ! implicit none integer, intent(in ) :: Index logical :: FlagVDiff ! 実行文 ; Executable statement ! ! 初期化 ! Initialization ! if ( .not. composition_inited ) then call MessageNotify( 'E', module_name, 'This module has not been initialized.' ) end if if ( ( Index < 1 ) .or. ( Index > ncmax ) ) then call MessageNotify( 'E', module_name, 'Index is inappropriate, Index = %d', i = (/ Index /) ) end if FlagVDiff = a_FlagVDiff( Index ) end function CompositionInqFlagVDiff
Function : | |
Index : | integer |
Name : | character(len=*), intent(in ) |
Name で与えられた名前の成分のインデクスを返しします.
Inquiry of index of constituent
function CompositionInqIndex( Name ) result( Index ) ! ! Name で与えられた名前の成分のインデクスを返しします. ! ! Inquiry of index of constituent ! ! モジュール引用 ; USE statements ! ! メッセージ出力 ! Message output ! use dc_message, only: MessageNotify ! 宣言文 ; Declaration statements ! implicit none character(len=*), intent(in ) :: Name integer:: Index integer:: n ! 組成方向に回る DO ループ用作業変数 ! Work variables for DO loop in dimension of constituents ! 実行文 ; Executable statement ! ! 初期化 ! Initialization ! if ( .not. composition_inited ) then call MessageNotify( 'E', module_name, 'This module has not been initialized.' ) end if Index = -1 do n = 1, ncmax if ( a_QMixName(n) == trim( Name ) ) then Index = n exit end if end do !!$ if ( Index == -1 ) then !!$ call MessageNotify( 'E', module_name, & !!$ & 'Cannot find %c in a list of constituents.', c1 = trim( Name ) ) !!$ end if end function CompositionInqIndex
Variable : | |||
a_QMixLongName(:) : | character(STRING), save, public, allocatable
|
Variable : | |||
a_QMixName(:) : | character(STRING), save, public, allocatable
|
Variable : | |||
composition_inited = .false. : | logical , save, public
|
Variable : | |||
a_FlagAdv(:) : | logical , save, allocatable
|
Variable : | |||
a_FlagMassFix(:) : | logical , save, allocatable
|
Variable : | |||
a_FlagVDiff(:) : | logical , save, allocatable
|
Constant : | |||
version = ’$Name: dcpam5-20150201 $’ // ’$Id: composition.f90,v 1.6 2012/09/08 15:25:53 yot Exp $’ : | character(*), parameter
|