Class dycore_in_mod
In: dynamics/dycore_in.f90

begin

begin

Dependency

Methods

Included Modules

dycore_type_mod dycore_grid_mod nmlfile_mod axis_x_mod axis_y_mod axis_z_mod dc_trace dc_message dc_string gt4_history dc_error

Public Instance methods

Subroutine :
Dims :type(DYCORE_DIMS), intent(out)
: 次元データ全種 =end —— 作業用内部変数 ——

Dependency

Dependency

[Source]

  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 :

Dependency

Dependency

[Source]

  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 :

Dependency

Dependency

[Source]

  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)
: 格子点データ全種 (t-Δt)
Vars :type(DYCORE_VARS), intent(out)
: 格子点データ全種 (t) =end —— 作業用内部変数 ——

Dependency

Dependency

[Source]

  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

[Validate]