Class roughlen_Matthews
In: surface_properties/roughlen_Matthews.f90

Methods

Included Modules

dc_types gridset

Public Instance methods

Subroutine :
xy_SurfCond( 0:imax-1, 1:jmax ) :integer , intent(in )
xy_SurfRoughLen( 0:imax-1, 1:jmax ) :real(DP), intent(inout)

[Source]

  subroutine SetRoughLenLandMatthews( xy_SurfCond, xy_SurfRoughLen )

    ! モジュール引用 ; USE statements
    !

    ! 格子点設定
    ! Grid points settings
    !
    use gridset, only: imax, jmax, kmax    ! 鉛直層数.
                               ! Number of vertical level

    ! 宣言文 ; Declaration statements
    !
    integer , intent(in   ) :: xy_SurfCond    ( 0:imax-1, 1:jmax )
    real(DP), intent(inout) :: xy_SurfRoughLen( 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
    integer:: l


    if ( .not. roughlen_matthews_inited ) call SetRoughLenInit


    !
    !
    !
    do j = 1, jmax
      do i = 0, imax-1
        if( xy_SurfCond( i, j ) >= 1 ) then
          xy_SurfRoughLen( i, j ) = 0.0d0
        end if
      end do
    end do
    do l = 1, NM84Element
      do j = 1, jmax
        do i = 0, imax-1
          if( xy_SurfCond( i, j ) >= 1 ) then
            xy_SurfRoughLen( i, j ) = xy_SurfRoughLen( i, j ) + DataM84RL( l ) * DataM84Weight( l, DataSurfCond2M84Type( xy_SurfCond( i, j ) ) )
          end if
        end do
      end do
    end do


    !
    ! ice
    !
    do j = 1, jmax
      do i = 0, imax-1

        if( xy_SurfCond( i, j ) == 31 ) then
          xy_SurfRoughLen( i, j ) = z0_ice
        end if

      end do
    end do


  end subroutine SetRoughLenLandMatthews
roughlen_matthews_inited
Variable :
roughlen_matthews_inited = .false. :logical, save, public
: 初期設定フラグ. Initialization flag

Private Instance methods

DataM84RL
Variable :
DataM84RL( NM84Element ) :real(DP) , save
DataM84Weight
Variable :
DataM84Weight( NM84Element, 0:NM84Type ) :real(DP) , save
DataSurfCond2M84Type
Variable :
DataSurfCond2M84Type( 0:NLandUseType ) :integer, save
NLandUseType
Constant :
NLandUseType = 32 :integer, parameter
NM84Element
Constant :
NM84Element = 9 :integer, parameter
NM84Type
Constant :
NM84Type = 22 :integer, parameter
Subroutine :

[Source]

  subroutine SetRoughLenInit

    ! 作業変数
    ! Work variables
    !
    integer:: l
    integer:: m

    !
    ! This table/list is created by using Table 4 of Matthews (1983) and Table 1 of 
    ! Matthews (1984).
    !
    DataSurfCond2M84Type(  0 ) =  0 ! ocean, This is not included in Matthews papers.
    DataSurfCond2M84Type(  1 ) =  1
    DataSurfCond2M84Type(  2 ) =  1
    DataSurfCond2M84Type(  3 ) =  1
    DataSurfCond2M84Type(  4 ) =  1
    DataSurfCond2M84Type(  5 ) =  2
    DataSurfCond2M84Type(  6 ) =  3
    DataSurfCond2M84Type(  7 ) =  4
    DataSurfCond2M84Type(  8 ) =  4
    DataSurfCond2M84Type(  9 ) =  5
    DataSurfCond2M84Type( 10 ) =  6 ! A
    DataSurfCond2M84Type( 11 ) =  6 ! B, This may be 7. I cannot identify.
    DataSurfCond2M84Type( 12 ) =  8 ! C
    DataSurfCond2M84Type( 13 ) =  9 ! D
    DataSurfCond2M84Type( 14 ) = 10 ! E
    DataSurfCond2M84Type( 15 ) = 11 ! F
    DataSurfCond2M84Type( 16 ) = 12 ! G
    DataSurfCond2M84Type( 17 ) = 14 ! H
    DataSurfCond2M84Type( 18 ) = 14 ! I
    DataSurfCond2M84Type( 19 ) = 15 ! J
    DataSurfCond2M84Type( 20 ) = 15 ! K
    DataSurfCond2M84Type( 21 ) =  8 ! L
    DataSurfCond2M84Type( 22 ) = 16 ! M
    DataSurfCond2M84Type( 23 ) = 17 ! N
    DataSurfCond2M84Type( 24 ) = 17 ! O
    DataSurfCond2M84Type( 25 ) = 17 ! P
    DataSurfCond2M84Type( 26 ) = 19 ! Q
    DataSurfCond2M84Type( 27 ) = 19 ! R
    DataSurfCond2M84Type( 28 ) = 19 ! S
    DataSurfCond2M84Type( 29 ) = 19 ! T
    DataSurfCond2M84Type( 30 ) = 20 ! U
    DataSurfCond2M84Type( 31 ) = 21 ! V ice
    DataSurfCond2M84Type( 32 ) = 19 ! W

    do m = 0, NM84Type
      do l = 1, NM84Element
        DataM84Weight( l, m ) = DataM84Weight( l, m ) * 1.0d-2
      end do
    end do
    do l = 1, NM84Element
      DataM84RL( l ) = DataM84RL( l ) * 1.0d-2
    end do

    roughlen_matthews_inited = .true.

  end subroutine SetRoughLenInit
z0_ice
Constant :
z0_ice = 0.01d0 :real(DP) , parameter