| Class | intavr_operate |
| In: |
util/intavr_operate.f90
|
Note that Japanese and English are described in parallel.
積分で用いる座標重みを考慮した積分や平均操作のための関数を提供します. SPMODEL ライブラリ の w_integral_module.f90 を参考に作成しました.
Functions for integral or average operation with weight for integration are provided This program is created referring to "w_integral_module.f90" in SPMODEL library
| IntLonLat_xy : | 緯度経度積分 |
| y_IntLon_xy, IntLon_x : | 経度積分 |
| ya_IntLon_xya : | 経度積分 (多層用) |
| x_IntLat_xy, IntLat_y : | 緯度積分 |
| xa_IntLat_xya : | 緯度積分 (多層用) |
| AvrLonLat_xy : | 緯度経度平均 |
| y_AvrLon_xy, AvrLon_x : | 経度平均 |
| ya_AvrLon_xya : | 経度平均 (多層用) |
| x_AvrLat_xy, AvrLat_y : | 緯度平均 |
| xa_AvrLat_xya : | 緯度平均 (多層用) |
| ——————— : | ——————— |
| y_IntLon_xy, IntLon_x : | Meridional integral |
| ya_IntLon_xya : | Meridional integral (for multi layer) |
| x_IntLat_xy, IntLat_y : | Zonal integral |
| xa_IntLat_xya : | Zonal integral (for multi layer) |
| AvrLonLat_xy : | Zonal and meridional average |
| y_AvrLon_xy, AvrLon_x : | Meridional average |
| ya_AvrLon_xya : | Meridional average (for multi layer) |
| x_AvrLat_xy, AvrLat_y : | Zonal average |
| xa_AvrLat_xya : | Zonal average (for multi layer) |
| Function : | |
| AvrLat_y : | real(DP) |
| y_Data(1:jmax) : | real(DP), intent(in) |
1 次元緯度格子点データの緯度方向平均(1 層用).
実際には格子点データ各点毎に y_Lat_Weight を掛けた 総和を計算し, y_Lat_Weight の総和で割ることで 平均している.
Meridonal mean of 1-dimensional (latitude) grid data.
Practically, the sum total of grid data is calculated by multiplying in each grid "y_Lat_Weight" and deviding by the sum total of "y_Lat_Weight".
function AvrLat_y( y_Data )
!
! 1 次元緯度格子点データの緯度方向平均(1 層用).
!
! 実際には格子点データ各点毎に y_Lat_Weight を掛けた
! 総和を計算し, y_Lat_Weight の総和で割ることで
! 平均している.
!
! Meridonal mean of 1-dimensional (latitude)
! grid data.
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "y_Lat_Weight"
! and deviding by the sum total of "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: y_Data (1:jmax)
real(DP):: AvrLat_y
! 作業変数
! Work variables
!
! 実行文 ; Executable statement
!
AvrLat_y = IntLat_y( y_Data ) / sum( y_Lat_Weight )
end function AvrLat_y
| Function : | |
| AvrLonLat_xy : | real(DP) |
| xy_Data(0:imax-1, 1:jmax) : | real(DP), intent(in) |
2 次元緯度経度格子点データの全領域平均(1 層用).
実際には格子点データ各点毎に x_Lon_Weight, y_Lat_Weight を掛けた 総和を計算し, x_Lon_Weight * y_Lat_Weight の総和で割ることで 平均している.
Global mean of 2-dimensional (latitude and longitude) grid data.
Practically, the mean grid data is calculated by multiplying in each grid "x_Lon_Weight" and "y_Lat_Weight" and deviding by the sum total of "x_Lon_Weight" * "y_Lat_Weight".
function AvrLonLat_xy( xy_Data )
!
! 2 次元緯度経度格子点データの全領域平均(1 層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight, y_Lat_Weight を掛けた
! 総和を計算し, x_Lon_Weight * y_Lat_Weight の総和で割ることで
! 平均している.
!
! Global mean of 2-dimensional (latitude and longitude)
! grid data.
!
! Practically, the mean grid data is calculated
! by multiplying in each grid "x_Lon_Weight" and "y_Lat_Weight"
! and deviding by the sum total of "x_Lon_Weight" * "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: xy_Data (0:imax-1, 1:jmax)
real(DP):: AvrLonLat_xy
! 実行文 ; Executable statement
!
AvrLonLat_xy = AvrLon_x( x_AvrLat_xy( xy_Data ) )
end function AvrLonLat_xy
| Function : | |
| AvrLon_x : | real(DP) |
| x_Data(0:imax-1) : | real(DP), intent(in) |
1 次元経度格子点データの経度方向平均(1 層用).
実際には格子点データ各点毎に x_Lon_Weight を掛けた 総和を計算し, x_Lon_Weight の総和で割ることで 平均している.
Zonal mean of 1-dimensional (longitude) grid data.
Practically, the sum total of grid data is calculated by multiplying in each grid "x_Lon_Weight" and deviding by the sum total of "x_Lon_Weight".
function AvrLon_x( x_Data )
!
! 1 次元経度格子点データの経度方向平均(1 層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight を掛けた
! 総和を計算し, x_Lon_Weight の総和で割ることで
! 平均している.
!
! Zonal mean of 1-dimensional (longitude)
! grid data.
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "x_Lon_Weight"
! and deviding by the sum total of "x_Lon_Weight".
!
implicit none
real(DP), intent(in):: x_Data (0:imax-1)
real(DP):: AvrLon_x
! 作業変数
! Work variables
!
! 実行文 ; Executable statement
!
AvrLon_x = IntLon_x( x_Data ) / sum( x_Lon_Weight )
end function AvrLon_x
| Function : | |
| IntLat_y : | real(DP) |
| y_Data(1:jmax) : | real(DP), intent(in) |
1 次元緯度格子点データの緯度方向積分(1 層用).
実際には格子点データ各点毎に y_Lat_Weight を掛けた 総和を計算している.
Meridonal integration of 1-dimensional (latitude) grid data.
Practically, the sum total of grid data is calculated by multiplying in each grid "y_Lat_Weight".
function IntLat_y( y_Data )
!
! 1 次元緯度格子点データの緯度方向積分(1 層用).
!
! 実際には格子点データ各点毎に y_Lat_Weight を掛けた
! 総和を計算している.
!
! Meridonal integration of 1-dimensional (latitude)
! grid data.
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: y_Data (1:jmax)
real(DP):: IntLat_y
! 作業変数
! Work variables
!
! 実行文 ; Executable statement
!
IntLat_y = sum( y_Data * y_Lat_Weight )
end function IntLat_y
| Function : | |
| IntLonLat_xy : | real(DP) |
| xy_Data(0:imax-1, 1:jmax) : | real(DP), intent(in) |
2 次元緯度経度格子点データの全領域積分(1 層用).
実際には格子点データ各点毎に x_Lon_Weight, y_Lat_Weight を掛けた 総和を計算している.
Global integration of 2-dimensional (latitude and longitude) grid data.
Practically, the sum total of grid data is calculated by multiplying in each grid "x_Lon_Weight" and "y_Lat_Weight".
function IntLonLat_xy( xy_Data )
!
! 2 次元緯度経度格子点データの全領域積分(1 層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight, y_Lat_Weight を掛けた
! 総和を計算している.
!
! Global integration of 2-dimensional (latitude and longitude)
! grid data.
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "x_Lon_Weight" and "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: xy_Data (0:imax-1, 1:jmax)
real(DP):: IntLonLat_xy
! 実行文 ; Executable statement
!
IntLonLat_xy = IntLon_x( x_IntLat_xy( xy_Data ) )
end function IntLonLat_xy
| Function : | |
| IntLon_x : | real(DP) |
| x_Data(0:imax-1) : | real(DP), intent(in) |
1 次元経度格子点データの経度方向積分(1 層用).
実際には格子点データ各点毎に x_Lon_Weight を掛けた 総和を計算している.
Zonal integration of 1-dimensional (longitude) grid data.
Practically, the sum total of grid data is calculated by multiplying in each grid "x_Lon_Weight".
function IntLon_x( x_Data )
!
! 1 次元経度格子点データの経度方向積分(1 層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight を掛けた
! 総和を計算している.
!
! Zonal integration of 1-dimensional (longitude)
! grid data.
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "x_Lon_Weight".
!
implicit none
real(DP), intent(in):: x_Data (0:imax-1)
real(DP):: IntLon_x
! 作業変数
! Work variables
!
! 実行文 ; Executable statement
!
IntLon_x = sum( x_Data * x_Lon_Weight )
end function IntLon_x
| Variable : | |||
| intavr_operate_inited = .false. : | logical, save, public
|
| Function : | |
| x_AvrLat_xy(0:imax-1) : | real(DP) |
| xy_Data(0:imax-1, 1:jmax) : | real(DP), intent(in) |
2 次元緯度経度格子点データの緯度方向平均(1 層用).
実際には格子点データ各点毎に y_Lat_Weight を掛けた 総和を計算し, y_Lat_Weight の総和で割ることで 平均している.
Meridional mean of 2-dimensional (latitude and longitude) grid data.
Practically, the mean grid data is calculated by multiplying in each grid "y_Lat_Weight" and deviding by the sum total of "y_Lat_Weight".
function x_AvrLat_xy( xy_Data )
!
! 2 次元緯度経度格子点データの緯度方向平均(1 層用).
!
! 実際には格子点データ各点毎に y_Lat_Weight を掛けた
! 総和を計算し, y_Lat_Weight の総和で割ることで
! 平均している.
!
! Meridional mean of 2-dimensional (latitude and longitude)
! grid data.
!
! Practically, the mean grid data is calculated
! by multiplying in each grid "y_Lat_Weight"
! and deviding by the sum total of "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: xy_Data (0:imax-1, 1:jmax)
real(DP):: x_AvrLat_xy (0:imax-1)
! 作業変数
! Work variables
!
! 実行文 ; Executable statement
!
x_AvrLat_xy = x_IntLat_xy ( xy_Data ) / sum( y_Lat_Weight )
end function x_AvrLat_xy
| Function : | |
| x_IntLat_xy(0:imax-1) : | real(DP) |
| xy_Data(0:imax-1, 1:jmax) : | real(DP), intent(in) |
2 次元緯度経度格子点データの緯度方向積分(1 層用).
実際には格子点データ各点毎に y_Lat_Weight を掛けた 総和を計算している.
Meridional integration of 2-dimensional (latitude and longitude) grid data.
Practically, the sum total of grid data is calculated by multiplying in each grid "y_Lat_Weight".
function x_IntLat_xy( xy_Data )
!
! 2 次元緯度経度格子点データの緯度方向積分(1 層用).
!
! 実際には格子点データ各点毎に y_Lat_Weight を掛けた
! 総和を計算している.
!
! Meridional integration of 2-dimensional (latitude and longitude)
! grid data.
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: xy_Data (0:imax-1, 1:jmax)
real(DP):: x_IntLat_xy (0:imax-1)
! 作業変数
! Work variables
!
integer:: j ! 緯度方向に回る DO ループ用作業変数
! Work variables for DO loop in latitude
! 実行文 ; Executable statement
!
x_IntLat_xy = 0.0_DP
do j = 1, jmax
x_IntLat_xy = x_IntLat_xy + xy_Data (:,j) * y_Lat_Weight(j)
enddo
end function x_IntLat_xy
| Function : | |
| xa_AvrLat_xya(0:imax-1, 1:kmax) : | real(DP) |
| xya_Data(0:imax-1, 1:jmax, 1:kmax) : | real(DP), intent(in) |
3 次元緯度経度格子点データの緯度方向平均(多層用).
実際には格子点データ各点毎に y_Lat_Weight を掛けた 総和を計算し, y_Lat_Weight の総和で割ることで 平均している.
Meridional mean of 3-dimensional (latitude and longitude) grid data. (for multi layer)
Practically, the mean grid data is calculated by multiplying in each grid "y_Lat_Weight" and deviding by the sum total of "y_Lat_Weight".
function xa_AvrLat_xya( xya_Data )
!
! 3 次元緯度経度格子点データの緯度方向平均(多層用).
!
! 実際には格子点データ各点毎に y_Lat_Weight を掛けた
! 総和を計算し, y_Lat_Weight の総和で割ることで
! 平均している.
!
! Meridional mean of 3-dimensional (latitude and longitude)
! grid data. (for multi layer)
!
! Practically, the mean grid data is calculated
! by multiplying in each grid "y_Lat_Weight"
! and deviding by the sum total of "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: xya_Data (0:imax-1, 1:jmax, 1:kmax)
real(DP):: xa_AvrLat_xya (0:imax-1, 1:kmax)
! 作業変数
! Work variables
!
integer:: k ! 鉛直方向に回る DO ループ用作業変数
! Work variables for DO loop in vertical direction
! 実行文 ; Executable statement
!
do k = 1, kmax
xa_AvrLat_xya(:,k) = x_AvrLat_xy( xya_Data(:,:,k) )
end do
end function xa_AvrLat_xya
| Function : | |
| xa_IntLat_xya(0:imax-1, 1:kmax) : | real(DP) |
| xya_Data(0:imax-1, 1:jmax, 1:kmax) : | real(DP), intent(in) |
3 次元緯度経度格子点データの緯度方向積分(多層用).
実際には格子点データ各点毎に y_Lat_Weight を掛けた 総和を計算している.
Meridional integration of 3-dimensional (latitude and longitude) grid data. (for multi layer)
Practically, the sum total of grid data is calculated by multiplying in each grid "y_Lat_Weight".
function xa_IntLat_xya( xya_Data )
!
! 3 次元緯度経度格子点データの緯度方向積分(多層用).
!
! 実際には格子点データ各点毎に y_Lat_Weight を掛けた
! 総和を計算している.
!
! Meridional integration of 3-dimensional (latitude and longitude)
! grid data. (for multi layer)
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "y_Lat_Weight".
!
implicit none
real(DP), intent(in):: xya_Data (0:imax-1, 1:jmax, 1:kmax)
real(DP):: xa_IntLat_xya (0:imax-1, 1:kmax)
! 作業変数
! Work variables
!
integer:: k ! 鉛直方向に回る DO ループ用作業変数
! Work variables for DO loop in vertical direction
! 実行文 ; Executable statement
!
do k = 1, kmax
xa_IntLat_xya(:,k) = x_IntLat_xy( xya_Data(:,:,k) )
end do
end function xa_IntLat_xya
| Function : | |
| y_AvrLon_xy(1:jmax) : | real(DP) |
| xy_Data(0:imax-1, 1:jmax) : | real(DP), intent(in) |
2 次元緯度経度格子点データの経度方向平均(1 層用).
実際には格子点データ各点毎に x_Lon_Weight を掛けた 総和を計算し, x_Lon_Weight の総和で割ることで 平均している.
Zonal mean of 2-dimensional (latitude and longitude) grid data.
Practically, the mean grid data is calculated by multiplying in each grid "x_Lon_Weight" and deviding by the sum total of "x_Lon_Weight".
function y_AvrLon_xy( xy_Data )
!
! 2 次元緯度経度格子点データの経度方向平均(1 層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight を掛けた
! 総和を計算し, x_Lon_Weight の総和で割ることで
! 平均している.
!
! Zonal mean of 2-dimensional (latitude and longitude)
! grid data.
!
! Practically, the mean grid data is calculated
! by multiplying in each grid "x_Lon_Weight"
! and deviding by the sum total of "x_Lon_Weight".
!
implicit none
real(DP), intent(in):: xy_Data (0:imax-1, 1:jmax)
real(DP):: y_AvrLon_xy (1:jmax)
! 作業変数
! Work variables
!
! 実行文 ; Executable statement
!
y_AvrLon_xy = y_IntLon_xy( xy_Data ) / sum( x_Lon_Weight )
end function y_AvrLon_xy
| Function : | |
| y_IntLon_xy(1:jmax) : | real(DP) |
| xy_Data(0:imax-1, 1:jmax) : | real(DP), intent(in) |
2 次元緯度経度格子点データの経度方向積分(1 層用).
実際には格子点データ各点毎に x_Lon_Weight を掛けた 総和を計算している.
Zonal integration of 2-dimensional (latitude and longitude) grid data.
Practically, the sum total of grid data is calculated by multiplying in each grid "x_Lon_Weight".
function y_IntLon_xy( xy_Data )
!
! 2 次元緯度経度格子点データの経度方向積分(1 層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight を掛けた
! 総和を計算している.
!
! Zonal integration of 2-dimensional (latitude and longitude)
! grid data.
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "x_Lon_Weight".
!
implicit none
real(DP), intent(in):: xy_Data (0:imax-1, 1:jmax)
real(DP):: y_IntLon_xy (1:jmax)
! 作業変数
! Work variables
!
integer:: i ! 経度方向に回る DO ループ用作業変数
! Work variables for DO loop in longitude
! 実行文 ; Executable statement
!
y_IntLon_xy = 0.0_DP
do i = 0, imax - 1
y_IntLon_xy = y_IntLon_xy + xy_Data (i,:) * x_Lon_Weight(i)
enddo
end function y_IntLon_xy
| Function : | |
| ya_AvrLon_xya(1:jmax, 1:kmax) : | real(DP) |
| xya_Data(0:imax-1, 1:jmax, 1:kmax) : | real(DP), intent(in) |
3 次元緯度経度格子点データの経度方向平均(多層用).
実際には格子点データ各点毎に x_Lon_Weight を掛けた 総和を計算し, x_Lon_Weight の総和で割ることで 平均している.
Zonal mean of 3-dimensional (latitude and longitude) grid data. (for multi layer)
Practically, the mean grid data is calculated by multiplying in each grid "x_Lon_Weight" and deviding by the sum total of "x_Lon_Weight".
function ya_AvrLon_xya( xya_Data )
!
! 3 次元緯度経度格子点データの経度方向平均(多層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight を掛けた
! 総和を計算し, x_Lon_Weight の総和で割ることで
! 平均している.
!
! Zonal mean of 3-dimensional (latitude and longitude)
! grid data. (for multi layer)
!
! Practically, the mean grid data is calculated
! by multiplying in each grid "x_Lon_Weight"
! and deviding by the sum total of "x_Lon_Weight".
!
implicit none
real(DP), intent(in):: xya_Data (0:imax-1, 1:jmax, 1:kmax)
real(DP):: ya_AvrLon_xya (1:jmax, 1:kmax)
! 作業変数
! Work variables
!
integer:: k ! 鉛直方向に回る DO ループ用作業変数
! Work variables for DO loop in vertical direction
! 実行文 ; Executable statement
!
do k = 1, kmax
ya_AvrLon_xya(:,k) = y_AvrLon_xy( xya_Data(:,:,k) )
end do
end function ya_AvrLon_xya
| Function : | |
| ya_IntLon_xya(1:jmax,1:kmax) : | real(DP) |
| xya_Data(0:imax-1, 1:jmax, 1:kmax) : | real(DP), intent(in) |
3 次元緯度経度格子点データの経度方向積分(多層用).
実際には格子点データ各点毎に x_Lon_Weight を掛けた 総和を計算している.
Zonal integration of 3-dimensional (latitude and longitude) grid data. (for multi layer)
Practically, the sum total of grid data is calculated by multiplying in each grid "x_Lon_Weight".
function ya_IntLon_xya( xya_Data )
!
! 3 次元緯度経度格子点データの経度方向積分(多層用).
!
! 実際には格子点データ各点毎に x_Lon_Weight を掛けた
! 総和を計算している.
!
! Zonal integration of 3-dimensional (latitude and longitude)
! grid data. (for multi layer)
!
! Practically, the sum total of grid data is calculated
! by multiplying in each grid "x_Lon_Weight".
!
implicit none
real(DP), intent(in):: xya_Data (0:imax-1, 1:jmax, 1:kmax)
real(DP):: ya_IntLon_xya (1:jmax,1:kmax)
! 作業変数
! Work variables
!
integer:: k ! 鉛直方向に回る DO ループ用作業変数
! Work variables for DO loop in vertical direction
! 実行文 ; Executable statement
!
do k = 1, kmax
ya_IntLon_xya(:,k) = y_IntLon_xy( xya_Data(:,:,k) )
end do
end function ya_IntLon_xya
| Subroutine : |
依存モジュールの初期化チェック
Check initialization of dependency modules
subroutine InitCheck
!
! 依存モジュールの初期化チェック
!
! Check initialization of dependency modules
! モジュール引用 ; USE statements
!
! 格子点設定
! Grid points settings
!
use gridset, only: gridset_inited
! 物理定数設定
! Physical constants settings
!
use constants, only: constants_inited
! 座標データ設定
! Axes data settings
!
use axesset, only: axesset_inited
! 実行文 ; Executable statement
!
if ( .not. gridset_inited ) call MessageNotify( 'E', module_name, '"gridset" module is not initialized.' )
if ( .not. constants_inited ) call MessageNotify( 'E', module_name, '"constants" module is not initialized.' )
if ( .not. axesset_inited ) call MessageNotify( 'E', module_name, '"axesset" module is not initialized.' )
end subroutine InitCheck
| Subroutine : |
intavr_operate モジュールの初期化を行います. NAMELIST#intavr_operate_nml の読み込みはこの手続きで行われます.
"intavr_operate" module is initialized. "NAMELIST#intavr_operate_nml" is loaded in this procedure.
subroutine IntAvrOprInit
!
! intavr_operate モジュールの初期化を行います.
! NAMELIST#intavr_operate_nml の読み込みはこの手続きで行われます.
!
! "intavr_operate" module is initialized.
! "NAMELIST#intavr_operate_nml" is loaded in this procedure.
!
! モジュール引用 ; USE statements
!
! 宣言文 ; Declaration statements
!
implicit none
!!$ integer:: unit_nml ! NAMELIST ファイルオープン用装置番号.
!!$ ! Unit number for NAMELIST file open
!!$ integer:: iostat_nml ! NAMELIST 読み込み時の IOSTAT.
!!$ ! IOSTAT of NAMELIST read
! NAMELIST 変数群
! NAMELIST group name
!
!!$ namelist /intavr_operate_nml/
!
! デフォルト値については初期化手続 "intavr_operate#IntAvrOprInit"
! のソースコードを参照のこと.
!
! Refer to source codes in the initialization procedure
! "intavr_operate#IntAvrOprInit" for the default values.
!
! 実行文 ; Executable statement
!
if ( intavr_operate_inited ) return
call InitCheck
! デフォルト値の設定
! Default values settings
!
!!$ ! NAMELIST の読み込み
!!$ ! NAMELIST is input
!!$ !
!!$ if ( trim(namelist_filename) /= '' ) then
!!$ call FileOpen( unit_nml, & ! (out)
!!$ & namelist_filename, mode = 'r' ) ! (in)
!!$
!!$ rewind( unit_nml )
!!$ read( unit_nml, & ! (in)
!!$ & nml = intavr_operate_nml, & ! (out)
!!$ & iostat = iostat_nml ) ! (out)
!!$ close( unit_nml )
!!$
!!$ call NmlutilMsg( iostat_nml, module_name ) ! (in)
!!$ end if
! 印字 ; Print
!
call MessageNotify( 'M', module_name, '----- Initialization Messages -----' )
call MessageNotify( 'M', module_name, '-- version = %c', c1 = trim(version) )
intavr_operate_inited = .true.
end subroutine IntAvrOprInit
| Constant : | |||
| module_name = ‘intavr_operate‘ : | character(*), parameter
|
| Constant : | |||
| version = ’$Name: dcpam5-20100224 $’ // ’$Id: intavr_operate.f90,v 1.2 2009-02-18 10:23:53 morikawa Exp $’ : | character(*), parameter
|