Subroutine : |
|
xy_SurfCond( 0:imax-1, 1:jmax ) : | integer , intent(in )
|
xy_SurfSnow( 0:imax-1, 1:jmax ) : | real(DP), intent(in ), optional
|
xy_SeaIceConc( 0:imax-1, 1:jmax ) : | real(DP), intent(in ), optional
|
xy_SurfAlbedo( 0:imax-1, 1:jmax ) : | real(DP), intent(inout)
|
subroutine ModAlbedoDueToSnowSeaIce( xy_SurfCond, xy_SurfSnow, xy_SeaIceConc, xy_SurfAlbedo )
! 格子点設定
! Grid points settings
!
use gridset, only: imax, jmax, kmax ! 鉛直層数.
! Number of vertical level
! 雪と海氷の定数の設定
! Setting constants of snow and sea ice
!
use constants_snowseaice, only: SnowThreshold => ThresholdSurfSnow, SnowAlbedo, SeaIceThreshold, SeaIceAlbedo
integer , intent(in ) :: xy_SurfCond ( 0:imax-1, 1:jmax )
real(DP), intent(in ), optional :: xy_SurfSnow ( 0:imax-1, 1:jmax )
real(DP), intent(in ), optional :: xy_SeaIceConc( 0:imax-1, 1:jmax )
real(DP), intent(inout) :: xy_SurfAlbedo( 0:imax-1, 1:jmax )
! 作業変数
! Work variables
!
integer:: i ! 経度方向に回る DO ループ用作業変数
! Work variables for DO loop in longitude
integer:: j ! 緯度方向に回る DO ループ用作業変数
! Work variables for DO loop in latitude
! 初期化
! Initialization
!
if ( .not. modify_albedo_snowseaice_inited ) call ModAlbedoSnowSeaIceInit
if ( present( xy_SurfSnow ) ) then
! modify surface albedo on the snow covered ground
!
do j = 1, jmax
do i = 0, imax-1
if ( xy_SurfCond(i,j) > 0 .and. xy_SurfSnow(i,j) > SnowThreshold ) then
xy_SurfAlbedo(i,j) = SnowAlbedo
end if
end do
end do
end if
if ( present( xy_SeaIceConc ) ) then
! modify surface albedo on the sea ice
!
do j = 1, jmax
do i = 0, imax-1
if ( xy_SurfCond(i,j) == 0 .and. xy_SeaIceConc(i,j) > SeaIceThreshold ) then
xy_SurfAlbedo(i,j) = SeaIceAlbedo
end if
end do
end do
end if
end subroutine ModAlbedoDueToSnowSeaIce