| Class | dycore_in_mod |
| In: |
dynamics/dycore_in.f90
|
| Subroutine : | |||
| Dims : | type(DYCORE_DIMS), intent(out)
|
subroutine dycore_in_dims(Dims)
!==== Dependency
use dycore_type_mod, only: DYCORE_DIMS
use dycore_grid_mod, only: im, jm, km
use axis_x_mod, only: axis_x_spectral, axis_x_manual, axis_x_netcdf
use axis_y_mod, only: axis_y_spectral, axis_y_manual, axis_y_netcdf
use axis_z_mod, only: axis_z_manual, axis_z_netcdf, axis_z_sigmahalf_manual, axis_z_sigmahalf_netcdf
use gt4_history,only: HistoryGetPointer
use dc_trace, only: BeginSub, EndSub, DbgMessage
use dc_string, only: toChar
!=end
implicit none
!=begin
!==== Output
!
type(DYCORE_DIMS), intent(out):: Dims ! 次元データ全種
!=end
!----- 作業用内部変数 -----
character(len = *), parameter:: subname = "dycore_in_dims"
continue
!----------------------------------------------------------------
! Check Initialization
!----------------------------------------------------------------
call BeginSub(subname)
if (.not. dycore_in_initialized) then
call EndSub( subname, 'Call dycocre_in_init before call %c', c1=trim(subname) )
return
endif
!----------------------------------------------------------------
! 軸データ生成
!----------------------------------------------------------------
call axis_x_spectral(Dims%x_Lon) ! 経度座標データ取得
call axis_x_manual(Dims%x_Lon) ! 経度座標データ取得
call axis_x_netcdf(Dims%x_Lon) ! 経度座標データ取得
call axis_y_spectral(Dims%y_Lat) ! 緯度座標データ取得
call axis_y_manual(Dims%y_Lat) ! 緯度座標データ取得
call axis_y_netcdf(Dims%y_Lat) ! 緯度座標データ取得
call axis_z_sigmahalf_manual ( Dims%z_Sigma , Dims%r_Sigma ) ! 半整数σレベル座標データ取得
call axis_z_sigmahalf_netcdf ( Dims%z_Sigma , Dims%r_Sigma ) ! 半整数σレベル座標データ取得
call axis_z_manual ( Dims%z_Sigma ) ! 整数σレベル座標データ取得
call axis_z_netcdf ( Dims%z_Sigma ) ! 整数σレベル座標データ取得
call EndSub(subname)
end subroutine dycore_in_dims
| Subroutine : |
subroutine dycore_in_end
!==== Dependency
use dc_trace, only: BeginSub, EndSub, DbgMessage
use dc_error, only: StoreError, USR_ECHAR
use dc_string, only: toChar
!=end
implicit none
character(STRING), parameter:: subname = "dycore_in_end"
continue
!----------------------------------------------------------------
! Check Initialization
!----------------------------------------------------------------
call BeginSub(subname)
if ( .not. dycore_in_initialized) then
call EndSub( subname, 'dycore_in_init was not called', c1=trim(subname) )
return
else
dycore_in_initialized = .false.
endif
!-----------------------------------------------------------------
! Initialize information for data input
!-----------------------------------------------------------------
input_file_save = 'init.nc'
vlonname_save = 'vlon'
vlatname_save = 'vlat'
vorname_save = 'vor'
divname_save = 'div'
psname_save = 'ps'
tempname_save = 'temp'
qvapname_save = 'qvap'
input_time_save = 0.0d0
call EndSub(subname)
end subroutine dycore_in_end
| Subroutine : |
This procedure input/output NAMELIST#dycore_in_nml .
subroutine dycore_in_init
!==== Dependency
use dycore_type_mod, only : STRING, DBKIND, INTKIND
use nmlfile_mod, only : nmlfile_init, nmlfile_open, nmlfile_close
use axis_x_mod, only: axis_x_init
use axis_y_mod, only: axis_y_init
use axis_z_mod, only: axis_z_init
use dc_trace, only: BeginSub, EndSub, DbgMessage
use dc_message,only: MessageNotify
use dc_string, only: toChar
!=end
implicit none
!=begin
!
!==== NAMELIST
!
character(STRING) :: input_file = 'init.nc' , vlonname = 'vlon' , vlatname = 'vlat' , vorname = 'vor' , divname = 'div' , psname = 'ps' , tempname = 'temp' , qvapname = 'qvap' ! 比湿の変数名
real(DBKIND) :: input_time(2) = (/0,0/) ! 入力データの時刻
namelist /dycore_in_nml/ input_file , input_time , vlonname , vlatname , vorname , divname , psname , tempname , qvapname ! 比湿の変数名
!=end
integer(INTKIND) :: nmlstat, nmlunit
logical :: nmlreadable
character(STRING), parameter:: subname = "dycore_in_init"
continue
!----------------------------------------------------------------
! Check Initialization
!----------------------------------------------------------------
call BeginSub(subname)
if (dycore_in_initialized) then
call EndSub( subname, '%c is already called', c1=trim(subname) )
return
else
dycore_in_initialized = .true.
endif
!----------------------------------------------------------------
! Version identifier
!----------------------------------------------------------------
call DbgMessage('%c :: %c', c1=trim(version), c2=trim(tagname))
!----------------------------------------------------------------
! axis_x_mod, axis_y_mod, axis_z_mod の初期化
!----------------------------------------------------------------
call axis_x_init
call axis_y_init
call axis_z_init
!----------------------------------------------------------------
! read dycore_in_nml
!----------------------------------------------------------------
! Initialization
input_file = 'init.nc' ! 初期値ファイル
vlonname = 'vlon' ! 速度経度成分の変数名
vlatname = 'vlat' ! 速度緯度成分の変数名
vorname = 'vor' ! 渦度の変数名
divname = 'div' ! 発散の変数名
psname = 'ps' ! 地表面気圧の変数名
tempname = 'temp' ! 温度の変数名
qvapname = 'qvap' ! 比湿の変数名
input_time(:) = 0.0d0 ! 入力データの時刻
call nmlfile_init
call nmlfile_open(nmlunit, nmlreadable)
if (nmlreadable) then
read(nmlunit, nml=dycore_in_nml, iostat=nmlstat)
call DbgMessage('Stat of NAMELIST dycore_in_nml Input is <%d>', i=(/nmlstat/))
write(0, nml=dycore_in_nml)
else
call DbgMessage('Not Read NAMELIST dycore_in_nml')
call MessageNotify('W', subname, 'Can not Read NAMELIST dycore_in_nml. Force Use Default Value.')
end if
call nmlfile_close
!----------------------------------------------------------------
! receive NAMELIST information
!----------------------------------------------------------------
input_file_save = input_file
vlonname_save = vlonname
vlatname_save = vlatname
vorname_save = vorname
divname_save = divname
psname_save = psname
tempname_save = tempname
qvapname_save = qvapname
input_time_save = input_time
!----------------------------------------------------------------
! 例外処理
!----------------------------------------------------------------
if (input_file == '') then
call MessageNotify('E', subname, message='Input File Name is Vacancy.')
endif
!!$ if (vloname == '' .or. vlatname == '' .or. vorname == '' &
!!$ & divname == '' .or. psname == '' .or. tempname == '' &
!!$ & qvapname == '') then
!!$ ! 変数名の入力が無かったらデフォルトの値を入れるようにする。
!!$ !call MessageNotify('E', subname, 'Variable Name is Vacancy.')
!!$ endif
call EndSub( subname, '[%c], [%c]', c1='input_file=<' // trim(input_file) // '>, ' // 'input_time=<' // trim(toChar(input_time)) // '>, ', c2='vlonname=<' // trim(vlonname) // '>, ' // 'vlatname=<' // trim(vlatname) // '>, ' // 'vorname=<' // trim(vorname) // '>, ' // 'divname=<' // trim(divname) // '>, ' // 'psname=<' // trim(psname) // '>, ' // 'tempname=<' // trim(tempname) // '>, ' // 'qvapname=<' // trim(qvapname) // '>, ' )
end subroutine dycore_in_init
| Subroutine : | |||
| Vars_B : | type(DYCORE_VARS), intent(out)
| ||
| Vars : | type(DYCORE_VARS), intent(out)
|
subroutine dycore_in_vars(Vars_B, Vars)
!==== Dependency
use dycore_type_mod, only: DYCORE_VARS
use dycore_grid_mod, only: im, jm, km
use gt4_history, only: HistoryGetPointer
use dc_trace, only: BeginSub, EndSub, DbgMessage
use dc_string, only: toChar
!=end
implicit none
!=begin
!==== Output
!
type(DYCORE_VARS), intent(out):: Vars_B ! 格子点データ全種 (t-Δt)
type(DYCORE_VARS), intent(out):: Vars ! 格子点データ全種 (t)
!=end
!----- 作業用内部変数 -----
character(len = *), parameter:: subname = "dycore_in_vars"
continue
!----------------------------------------------------------------
! Check Initialization
!----------------------------------------------------------------
call BeginSub(subname)
if (.not. dycore_in_initialized) then
call EndSub( subname, 'Call dycocre_in_init before call %c', c1=trim(subname) )
return
endif
!---------------------------------------------------------------------
! HistoryGetPointer [in gt4f90io] による入力 (Vars_B へ)
!---------------------------------------------------------------------
!----- 格子点データ(速度経度成分) -----
if (.not. trim(vlonname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(vlonname_save) , array=Vars_B%xyz_VelLon , time=input_time_save(1) )
call DbgMessage('Input VelLon_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(vlonname_save) , c3=toChar( input_time_save(1) ) )
else
call DbgMessage('Not Input VelLon_B data')
endif
!----- 格子点データ(速度緯度成分) -----
if (.not. trim(vlatname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(vlatname_save) , array=Vars_B%xyz_VelLat , time=input_time_save(1) )
call DbgMessage('Input VelLat_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(vlatname_save) , c3=toChar( input_time_save(1) ) )
else
call DbgMessage('Not Input VelLat_B data')
endif
!----- 格子点データ(渦度成分) -----
if (.not. trim(vorname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(vorname_save) , array=Vars_B%xyz_Vor , time=input_time_save(1) )
call DbgMessage('Input Vor_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(vorname_save) , c3=toChar( input_time_save(1) ) )
else
call DbgMessage('Not Input Vor_B data')
endif
!----- 格子点データ(発散成分) -----
if (.not. trim(divname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(divname_save) , array=Vars_B%xyz_Div , time=input_time_save(1) )
call DbgMessage('Input Div_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(divname_save) , c3=toChar( input_time_save(1) ) )
else
call DbgMessage('Not Input Div_B data')
endif
!----- 格子点データ(温度成分) -----
if (.not. trim(tempname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(tempname_save) , array=Vars_B%xyz_Temp , time=input_time_save(1) )
call DbgMessage('Input Temp_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(tempname_save) , c3=toChar( input_time_save(1) ) )
else
call DbgMessage('Not Input Temp_B data')
endif
!----- 格子点データ(比湿成分) -----
if (.not. trim(qvapname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(qvapname_save) , array=Vars_B%xyz_QVap , time=input_time_save(1) )
call DbgMessage('Input QVap_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(qvapname_save) , c3=toChar( input_time_save(1) ) )
else
call DbgMessage('Not Input QVap_B data')
endif
!----- 格子点データ(地表面気圧成分) -----
if (.not. trim(psname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(psname_save) , array=Vars_B%xy_Ps , time=input_time_save(1) )
call DbgMessage('Input Ps_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(psname_save) , c3=toChar( input_time_save(1) ) )
else
call DbgMessage('Not Input Ps_B data')
endif
!---------------------------------------------------------------------
! HistoryGetPointer [in gt4f90io] による入力 (Vars へ)
!---------------------------------------------------------------------
!----- 格子点データ(速度経度成分) -----
if (.not. trim(vlonname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(vlonname_save) , array=Vars%xyz_VelLon , time=input_time_save(2) )
call DbgMessage('Input VelLon_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(vlonname_save) , c3=toChar( input_time_save(2) ) )
else
call DbgMessage('Not Input VelLon_B data')
endif
!----- 格子点データ(速度緯度成分) -----
if (.not. trim(vlatname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(vlatname_save) , array=Vars%xyz_VelLat , time=input_time_save(2) )
call DbgMessage('Input VelLat_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(vlatname_save) , c3=toChar( input_time_save(2) ) )
else
call DbgMessage('Not Input VelLat_B data')
endif
!----- 格子点データ(渦度成分) -----
if (.not. trim(vorname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(vorname_save) , array=Vars%xyz_Vor , time=input_time_save(2) )
call DbgMessage('Input Vor_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(vorname_save) , c3=toChar( input_time_save(2) ) )
else
call DbgMessage('Not Input Vor_B data')
endif
!----- 格子点データ(発散成分) -----
if (.not. trim(divname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(divname_save) , array=Vars%xyz_Div , time=input_time_save(2) )
call DbgMessage('Input Div_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(divname_save) , c3=toChar( input_time_save(2) ) )
else
call DbgMessage('Not Input Div_B data')
endif
!----- 格子点データ(温度成分) -----
if (.not. trim(tempname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(tempname_save) , array=Vars%xyz_Temp , time=input_time_save(2) )
call DbgMessage('Input Temp_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(tempname_save) , c3=toChar( input_time_save(2) ) )
else
call DbgMessage('Not Input Temp_B data')
endif
!----- 格子点データ(比湿成分) -----
if (.not. trim(qvapname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(qvapname_save) , array=Vars%xyz_QVap , time=input_time_save(2) )
call DbgMessage('Input QVap_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(qvapname_save) , c3=toChar( input_time_save(2) ) )
else
call DbgMessage('Not Input QVap_B data')
endif
!----- 格子点データ(地表面気圧成分) -----
if (.not. trim(psname_save) == '') then
call HistoryGetPointer( file=trim(input_file_save) , varname=trim(psname_save) , array=Vars%xy_Ps , time=input_time_save(2) )
call DbgMessage('Input Ps_B data from %c@%c,time=%c' , c1=trim(input_file_save), c2=trim(psname_save) , c3=toChar( input_time_save(2) ) )
else
call DbgMessage('Not Input Ps_B data')
endif
call EndSub(subname)
end subroutine dycore_in_vars