Class physics_ground_mod
In: physics/physics_ground.f90

Methods

Included Modules

type_mod grid_3d_mod nmlfile_mod dc_trace dc_message constants_mod

Public Instance methods

Subroutine :
xy_SurfTemp(im,jm) :real(DBKIND), intent(out)
: 地表面温度
xy_SurfAlbedo(im,jm) :real(DBKIND), intent(out)
: 地表アルベド
xy_SurfHumidCoeff(im,jm) :real(DBKIND), intent(out)
: 地表湿潤度
xy_SurfRoughLength(im,jm) :real(DBKIND), intent(out)
: 地表粗度長
xy_SurfCondition(im,jm) :integer(INTKIND), intent(out)
: 地表状態 1 未満は SST 固定. 1 以上は swamp
xy_SurfHeatCapacity(im,jm) :real(DBKIND), intent(out)
: 地表熱容量
xy_GroundTempFlux(im,jm) :real(DBKIND), intent(out)
: 地中熱フラックス
y_Lat(:) :real(DBKIND), intent(in)
: 緯度座標

(in) 緯度座標

地表面パラメータの設定

TODO (2006-8-16 石渡)

  • 他にも設定できるパラメータを増やすべきだ. 例えば, AGCM5 では
        REAL       GRZSD  ( IDIM*JDIM )    !" 地表高度分散 = 0.0
    

    というのが設定できるようになっている.

  • 設定方法として何を用意するべきか決めないといけない. 考えられる方法は以下の通り.
    • namelist で読み込んだデフォルト値(single value)で全部埋める.
    • nc ファイルから分布を読み込む
    • モデルの中で分布を計算する 例えば, SST の場合は SurfCond にも依存する, アルベドは SST に依存するetc
  • パラメータ毎に設定サブルーチンを用意するべきかもしれない.

This procedure input/output NAMELIST#ground_nml .

[Source]

  subroutine physics_ground( xy_SurfTemp   , xy_SurfAlbedo, xy_SurfHumidCoeff, xy_SurfRoughLength, xy_SurfCondition, xy_SurfHeatCapacity, xy_GroundTempFlux, y_Lat         ) ! (in) 緯度座標
    !
    != 地表面パラメータの設定
    ! 
    != TODO (2006-8-16 石渡)
    ! * 他にも設定できるパラメータを増やすべきだ.
    !   例えば, AGCM5 では
    !       REAL       GRZSD  ( IDIM*JDIM )    !" 地表高度分散 = 0.0
    !   というのが設定できるようになっている.
    ! * 設定方法として何を用意するべきか決めないといけない.
    !   考えられる方法は以下の通り.
    !   * namelist で読み込んだデフォルト値(single value)で全部埋める.
    !   * nc ファイルから分布を読み込む
    !   * モデルの中で分布を計算する
    !     例えば, SST の場合は SurfCond にも依存する, 
    !     アルベドは SST に依存するetc
    ! * パラメータ毎に設定サブルーチンを用意するべきかもしれない.
    !
    use type_mod,      only: REKIND, DBKIND, INTKIND, TOKEN, STRING
    use grid_3d_mod,   only: im, jm, km
    use nmlfile_mod, only : nmlfile_init, nmlfile_open, nmlfile_close
    use dc_trace,      only: SetDebug, BeginSub, EndSub, DbgMessage, DataDump
    use dc_message , only : MessageNotify
 
    implicit none
    real(DBKIND), intent(in) :: y_Lat(:)               ! 緯度座標
    real(DBKIND), intent(out) :: xy_SurfTemp(im,jm)       ! 地表面温度
    real(DBKIND), intent(out) :: xy_SurfAlbedo(im,jm)        ! 地表アルベド
    real(DBKIND), intent(out) :: xy_SurfHumidCoeff(im,jm)    ! 地表湿潤度
    real(DBKIND), intent(out) :: xy_SurfRoughLength(im,jm)   ! 地表粗度長
    real(DBKIND), intent(out) :: xy_SurfHeatCapacity(im,jm)  ! 地表熱容量
    real(DBKIND), intent(out) :: xy_GroundTempFlux(im,jm) ! 地中熱フラックス
    integer(INTKIND), intent(out) :: xy_SurfCondition(im,jm)    ! 地表状態
                                       ! 1 未満は SST 固定. 1 以上は swamp

    character(STRING),  parameter:: subname = "physics_ground"
    integer(INTKIND) :: DefaultSurfCondition ! 地表状態デフォルト値
    real(DBKIND) :: xy_SeaSurfaceTemp(im,jm)            ! 海表面温度
    integer(INTKIND)            :: nmlstat, nmlunit
    logical                     :: nmlreadable

    ! Hosaka et al. (1998) SST 用パラメータ
    !   (2006-8-16 石渡)  あくまで暫定処理
    real(DBKIND), parameter :: TEQ   = 302.0d0
    real(DBKIND), parameter :: ALAT0 =   0.0d0
    real(DBKIND), parameter :: ALAT1 =  30.0d0
    real(DBKIND), parameter :: ALPHA =  60.0d0
    real(DBKIND), parameter :: BETA  =  32.0d0
    real(DBKIND), parameter :: GAMMA =   0.0d0
    real(DBKIND), parameter :: ALACON = 7.0d0

    namelist /ground_nml/ DefaultSurfCondition ! 地表状態デフォルト値

    continue

    !   開始処理
    call BeginSub(subname)

    ! 地表状態の設定
    DefaultSurfCondition = 0 
    call nmlfile_init
    call nmlfile_open(nmlunit, nmlreadable)
    if (nmlreadable) then
       read(nmlunit, nml=ground_nml, iostat=nmlstat)
       call DbgMessage('Stat of NAMELIST ground_nml Input is <%d>', i=(/nmlstat/))
       write(0, nml=ground_nml)
    else
       call DbgMessage('Not Read NAMELIST ground_nml')
       call MessageNotify('W', subname, 'Can not Read NAMELIST ground_nml. Force Use Default Value.')
    end if
    call nmlfile_close
    ! ファイルからも入力できるようにするべし.
    xy_SurfCondition = DefaultSurfCondition


    ! その他の地表面パラメータの設定.
    ! 地表状態と同様に処理するべき.
    xy_SurfAlbedo = 0.15         ! 地表アルベド
    xy_SurfHumidCoeff = 1.0      ! 地表湿潤度
    xy_SurfRoughLength = 0.0001  ! 地表粗度長
    xy_SurfHeatCapacity = 0.0    ! 地表熱容量
    xy_GroundTempFlux  = 0.0     ! 地中熱フラックス

    !----------------------------------------------------------------
    !   地表面温度の設定
    !----------------------------------------------------------------
    
    !----- 海面温度の設定 -----
    ! Hosaka et al. (1998) の SST 分布を与えてしまう.
    ! これは暫定的処置. 
    ! 本当は
    !   1. SST ファイルが指定されていればそれを入力
    !   2. そうでなければデフォルトの分布を与える
    ! とするべき.
    
    call mksst( xy_SeaSurfaceTemp                           , y_Lat                                       , TEQ , ALAT0 , ALAT1 , ALPHA , BETA  , GAMMA , ALACON                                       )


    !----- 地表面温度を海面温度で置き換え-----
    !   (2006-8-16 石渡) 本当は xy_SurfCondition を参照して
    !      SST 固定グリッドだけ SST 値を与えるように
    !      しないといけない.
    xy_SurfTemp = xy_SeaSurfaceTemp


    !   終了処理
    call EndSub(subname)

  end subroutine physics_ground

[Validate]