This module set axis Y or axis Latitude.
Y 軸または緯度軸を設定する。
netCDF データから Y 軸を入力する axis_y_netcdf にて、 元データが radians でも degrees でも、そのまま入力されるように なっている。本来は元データの units から判定すべき。
use type_mod, only : INTKIND, STRING use axis_type_mod, only : AXISINFO
private public :: axis_y_init, axis_y_weight, axis_y_spectral ! subroutines public :: axis_y_manual, axis_y_netcdf, axis_y_end ! subroutines
モジュールを初期化し、NAMELIST から値を取得する。 NAMELIST から値が取得できないものに関しては上記のデフォルト値が 用いられる。
NAMELIST ファイルは、メインプログラムにて nmlfile_mod の nmlfile_init で指定されることが想定されているが、 もしもこの初期化ルーチンより以前に指定されていなければ、 nmlfile_init のデフォルトで指定される NAMELIST ファイルを 読む。
subroutine axis_y_init
use type_mod, only: STRING, TOKEN, INTKIND, REKIND, DBKIND, NMLARRAY use nmlfile_mod,only: nmlfile_init, nmlfile_open, nmlfile_close use grid_3d_mod,only: jm, grid_3d_init use spml_mod, only: spml_init use axis_type_mod, only : axis_attrs_copy, axis_attrs_init use gt4_history, only: GT_HISTORY_ATTR use dc_types, only: GT_TOKEN => TOKEN, GT_STRING => STRING use dc_url, only: GT_ATMARK, GT_QUESTION use dc_trace, only: DbgMessage, BeginSub, EndSub use dc_message,only: MessageNotify
Y 軸の次元変数に関する情報を与える。 値を与えないものに関しては以下のデフォルトの値が用いられる。
変数 decision には Y 軸のデータをどのように与えるかを指定する。
'manual'
'spectral'
'foo.nc@lon'
など)
変数 length には、 grid_3d_mod の公開要素 jm と同じ 値を与えなければならない。
character(TOKEN) :: name = 'lat' ! 次元変数名 integer(INTKIND) :: length = 32 ! 次元長 (配列サイズ) character(STRING) :: longname = 'Latitude' ! 次元変数の記述的名称 character(STRING) :: units = 'degrees_north' ! 次元変数の単位 character(TOKEN) :: xtype = 'float' ! 次元変数の型 character(STRING) :: decision = 'spectral' ! 次元データの取得方法 real(REKIND) :: Data(NMLARRAY) = 0.0 ! 次元データ入力用 namelist /axis_y_nml/ & & name , & ! 次元変数名 & length , & ! 次元長 (配列サイズ) & longname , & ! 次元変数の記述的名称 & units , & ! 次元変数の単位 & xtype , & ! 次元変数の型 & decision , & ! 次元データの取得方法 & Data ! 次元データ
Y 軸の次元変数の属性に関する情報を与える。 NAMELIST に複数の axis_y_attr_nml を用意しておく事で 複数の情報を与える事が可能である。 与えない場合には属性情報は付加されない。
attrtype には与える属性値の種類を設定する。 <URL:http://www.gfd-dennou.org/arch/gtool4/gt4f90io-current/doc/gt_history.htm#derived_gthistoryattr> を参照せよ。なお、arraysize に 1 以上の値を設定すると、 配列データが優先されて属性値に設定される。
character(GT_TOKEN) :: attrname = '' ! 属性名 character(GT_TOKEN) :: attrtype = '' ! 属性値の型 character(GT_STRING) :: cvalue = '' ! 属性の値 (文字) integer(INTKIND) :: ivalue = 0 ! 属性の値 (整数) real(REKIND) :: rvalue = 0.0 ! 属性の値 (単精度実数) real(DBKIND) :: dvalue = 0.0d0 ! 属性の値 (倍精度実数) logical :: lvalue = .false.! 属性の値 (論理) integer(INTKIND) :: arraysize= 0 ! 配列のサイズ integer(INTKIND) :: iarray(NMLARRAY) = 0 ! 属性の値 (整数) real(REKIND) :: rarray(NMLARRAY) = 0.0 ! 属性の値 (単精度実数) real(DBKIND) :: darray(NMLARRAY) = 0.0d0! 属性の値 (倍精度実数) namelist /axis_y_attr_nml/ & & attrname , & ! 属性名 & attrtype , & ! 属性値の型 & cvalue , & ! 属性の値 (文字) & ivalue , & ! 属性の値 (整数) & rvalue , & ! 属性の値 (単精度実数) & dvalue , & ! 属性の値 (倍精度実数) & lvalue , & ! 属性の値 (論理) & arraysize , & ! 配列のサイズ & iarray , & ! 属性の値 (整数) & rarray , & ! 属性の値 (単精度実数) & darray ! 属性の値 (倍精度実数)
重みデータとその付加情報を返す。
axis_y_init の NAMELIST axis_y_nml の decision 変数で
'spectral'
以外が与えられた場合は値を代入しないで返す。
また、Y 軸の次元変数に重みデータに関する付加情報を加える。
subroutine axis_y_weight(Dim_Weight)
use constants_mod, only: constants_init, pi use axis_type_mod, only: axis_type_copy, axis_attrs_copy, axis_attrs_init use spml_mod, only: wa_module_y_Lat_Weight => y_Lat_Weight use grid_3d_mod,only: jm use gt4_history,only: GT_HISTORY_ATTR use dc_trace, only: DbgMessage, BeginSub, EndSub
type(AXISINFO), intent(out) :: Dim_Weight ! 次元情報を包括する変数
スペクトル法を用いる場合を想定した Y 軸のデータを返す。
axis_y_init の NAMELIST axis_y_nml の units に
'radian'
または 'rad.'
を与える場合には
単位がラジアンでデータが返される。それ以外では度数でデータが返る。
axis_y_init の NAMELIST axis_y_nml の decision 変数で
'spectral'
以外が与えられた場合は値を代入しないで返す。
subroutine axis_y_spectral(Dim)
use axis_type_mod, only: axis_type_copy use constants_mod, only: constants_init, pi use spml_mod, only: wa_module_y_Lat => y_Lat use dc_string, only: toChar, StrHead, LChar use dc_trace, only: DbgMessage, BeginSub, EndSub
type(AXISINFO), intent(inout) :: Dim ! 次元情報を包括する変数
NAMELIST から代入されたデータを Y 軸データとして返す。
axis_y_init の NAMELIST axis_y_nml の decision 変数で
'manual'
以外が与えられた場合は値を代入しないで返す。
subroutine axis_y_manual(Dim)
use axis_type_mod, only: axis_type_copy use spml_mod, only: wa_module_y_Lat => y_Lat use dc_trace, only: DbgMessage, BeginSub, EndSub
type(AXISINFO), intent(inout) :: Dim ! 次元情報を包括する変数
netCDF データから取得したデータを Y 軸のデータとして返す。
現在、取得先のデータの単位に関わらず、そのままデータが 入力される。Known Bugs 参照。
axis_y_init の NAMELIST axis_y_nml の decision 変数で gtool4 変数以外が与えられた場合は値を代入しないで返す。
subroutine axis_y_netcdf(Dim)
use axis_type_mod, only: axis_type_copy use gt4_history,only: HistoryGet use dc_url , only: UrlSplit use dc_trace, only: DbgMessage, BeginSub, EndSub
type(AXISINFO), intent(inout) :: Dim ! 次元情報を包括する変数
axis_y_init で設定された値を破棄し、デフォルトに戻す。
subroutine axis_y_end()
use dc_trace, only: DbgMessage, BeginSub, EndSub