Class axesset
In: setup/axesset.F90

座æ����¼ã�¿è¨­å®�

Axes data settings

Note that Japanese and English are described in parallel.

座æ����¼ã�¿ã��¨­å®������³ä�管ã��è¡����¾ã��.

ç·�º¦ $ varphi $ �����³ç�åº� $ lambda $ ���¼å��¹ã��, gridset �¢ã�¸ã�¥ã�¼ã���§è¨­å®��������¼å��¹æ�°ã����, SPMODEL ���¤ã������ ��������±ºå®������¾ã��. ç·�º¦���¼å��¹ã���ç½��������¹ç·¯åº�, çµ�åº����¼å��¹ã���ç½�������������������������¾ã��.

���´Ï����¼å��¹ã��, ���´æ�°ã������ (��層ã���) ���¤ã���� NAMELIST#Sigma ����å®����¾ã��. �´æ�°ã������ (��層ã��¸­å¿���) ��, ���´æ�°ã�������� constants �¢ã�¸ã�¥ã�¼ã���§è¨­å®�������ä¹¾ç�¥å¤§æ°�����§æ��� $ C_p $ ������ ä¹¾ç�¥å¤§æ°����ä½�å®��� $ R $ ��������±ºå®����¾ã��. ���´Ï����¼å��¹ã���¤ã������, sigma_data �¢ã�¸ã�¥ã�¼ã���§ç������������� ������使ç���������������½ã�§ã��.

Axes data is set and stored.

Grid points of latitude $ varphi $ and longitude $ lambda $ are determined with number of grid points configured in "gridset" module by SPMODEL Library Grid points of latitude becomes Gaussian latitude, and grid points of latitude becomes equally spaced.

Variables List

x_Lon :çµ�åº�º§æ¨�
x_Lon_Weight :çµ�åº�º§æ¨�����
DeltaLon :çµ�åº��¼å��¹é����
InvDeltaLon :çµ�åº��¼å��¹é����������
y_Lat :ç·�º¦åº§æ�
y_Lat_Weight :ç·�º¦åº§æ�����
z_Sigma :$ sigma $ ������ (�´æ��)
r_Sigma :$ sigma $ ������ (���´æ��)
z_DelSigma :$ Delta sigma $ (�´æ��)
r_DelSigma :$ Delta sigma $ (���´æ��)
w_Number :�¹ã�����������¼ã�¿ã��·»å­����
spml_inited :SPML ���¤ã������������設å�������
———— :————
x_Lon :Longitude
x_Lon_Weight :Weight of longitude
DeltaLon :Interval of longitude grids
InvDeltaLon :Inverse of DeltaLon
y_Lat :Latitude
y_Lat_Weight :Weight of latitude
z_Sigma :Full $ sigma $ level
r_Sigma :Half $ sigma $ level
z_DelSigma :$ Delta sigma $ (Full)
r_DelSigma :$ Delta sigma $ (Half)
w_Number :Subscript of spectral data
spml_inited :Initialization flag of SPML library

Procedures List

AxessetInit :座æ����¼ã�¿ã��¨­å®�
AxessetFinalize :çµ�äº����� (�¢ã�¸ã�¥ã�¼ã����������°ã���²ã��ä»���解é��)
———— :————
AxessetInit :Settings of axes data
AxessetFinalize :Termination (deallocate variables in this module)

Methods

Included Modules

gridset dc_types namelist_util constants0 constants wa_mpi_module_sjpack wa_mpi_module wa_zonal_module wa_module_sjpack wa_zonal_module_sjpack wa_module sigma_data dc_iounit dc_message dc_string

Public Instance methods

Subroutine :

�¢ã�¸ã�¥ã�¼ã����������°ã���²ã��ä»���解é�¤ã��è¡����¾ã��.

Deallocate variables in this module.

[Source]

  subroutine AxessetFinalize
    !
    ! �¢ã�¸ã�¥ã�¼ã����������°ã���²ã��ä»���解é�¤ã��è¡����¾ã��. 
    !
    ! Deallocate variables in this module. 
    !

    ! �¢ã�¸ã�¥ã�¼ã����� ; USE statements
    !

    ! 宣�� ; Declaration statements
    !
    implicit none

    ! ���� ; Executable statement
    !

    if ( .not. axesset_inited ) return

    ! �²ã��ä»���解é��
    ! Deallocation
    !
    if ( allocated( z_Sigma    ) ) deallocate( z_Sigma    )
    if ( allocated( r_Sigma    ) ) deallocate( r_Sigma    )
    if ( allocated( z_DelSigma ) ) deallocate( z_DelSigma )
    if ( allocated( r_DelSigma ) ) deallocate( r_DelSigma )
    if ( allocated( w_Number   ) ) deallocate( w_Number   )

    if ( allocated( r_SSDepth ) ) deallocate( r_SSDepth )
    if ( allocated( z_SSDepth ) ) deallocate( z_SSDepth )

    if ( allocated( x_Lon        ) ) deallocate( x_Lon        )
    if ( allocated( x_Lon_Weight ) ) deallocate( x_Lon_Weight )
    if ( allocated( y_Lat        ) ) deallocate( y_Lat        )
    if ( allocated( y_Lat_Weight ) ) deallocate( y_Lat_Weight )

    axesset_inited = .false.

  end subroutine AxessetFinalize
Subroutine :

axesset �¢ã�¸ã�¥ã�¼ã������������è¡����¾ã��. NAMELIST#axesset_nml ����¿è¾¼�¿ã��������ç¶����§è�����¾ã��.

"axesset" module is initialized. NAMELIST#axesset_nml is loaded in this procedure.

This procedure input/output NAMELIST#axesset_nml .

[Source]

  subroutine AxessetInit
    !
    ! axesset �¢ã�¸ã�¥ã�¼ã������������è¡����¾ã��. 
    ! NAMELIST#axesset_nml ����¿è¾¼�¿ã��������ç¶����§è�����¾ã��. 
    !
    ! "axesset" module is initialized. 
    ! NAMELIST#axesset_nml is loaded in this procedure. 
    !

    ! �¢ã�¸ã�¥ã�¼ã����� ; USE statements
    !

    ! �����»æ�°å­¦å®��°è¨­å®�
    ! Physical and mathematical constants settings
    !
    use constants0, only: PI      ! $ \pi $ .
                                  ! �����.  Circular constant

    ! ����å®��°è¨­å®�
    ! Physical constants settings
    !
    use constants, only: CpDry, GasRDry  ! $ R $ [J kg-1 K-1]. 
                                  ! 乾�大��������. 
                                  ! Gas constant of air

    ! �¼å��¹æ�°ã�»æ��大波�°è¨­å®�
    ! Number of grid points and maximum truncated wavenumber settings
    !
    use gridset, only: GridsetCheckNumberOfLatGrid

    ! SPMODEL ���¤ã������, ���¢ä����馹������¢è����½æ�°å���������解ã��(å¤�層å�å¿�) 
    ! SPMODEL library, problems on sphere are solved with spherical harmonics 
    ! (multi layer is supported)
    !
#ifdef LIB_MPI
#ifdef SJPACK
    use wa_mpi_module_sjpack, only: wa_mpi_Initial, spml_x_Lon        => x_Lon, spml_x_Lon_Weight => x_Lon_Weight, spml_y_Lat        => v_Lat, spml_y_Lat_Weight => v_Lat_Weight, spml_jc => jc
#else
    use wa_mpi_module, only: wa_mpi_Initial, spml_x_Lon        => x_Lon, spml_x_Lon_Weight => x_Lon_Weight, spml_y_Lat        => v_Lat, spml_y_Lat_Weight => v_Lat_Weight, spml_jc => jc
#endif
#elif AXISYMMETRY
    use wa_zonal_module, only: wa_Initial, spml_x_Lon        => x_Lon, spml_x_Lon_Weight => x_Lon_Weight, spml_y_Lat        => y_Lat, spml_y_Lat_Weight => y_Lat_Weight
                              ! $ \Delta \varphi $ [rad.] . 
                              ! ç·�º¦åº§æ�����. 
                              ! Weight of latitude
#elif SJPACK
    use wa_module_sjpack, only: wa_Initial, spml_x_Lon        => x_Lon, spml_x_Lon_Weight => x_Lon_Weight, spml_y_Lat        => y_Lat, spml_y_Lat_Weight => y_Lat_Weight
                              ! $ \Delta \varphi $ [rad.] . 
                              ! ç·�º¦åº§æ�����. 
                              ! Weight of latitude
#elif AXISYMMETRY_SJPACK
    use wa_zonal_module_sjpack, only: wa_Initial, spml_x_Lon        => x_Lon, spml_x_Lon_Weight => x_Lon_Weight, spml_y_Lat        => y_Lat, spml_y_Lat_Weight => y_Lat_Weight
                              ! $ \Delta \varphi $ [rad.] . 
                              ! ç·�º¦åº§æ�����. 
                              ! Weight of latitude
#else
    use wa_module, only: wa_Initial, spml_x_Lon        => x_Lon, spml_x_Lon_Weight => x_Lon_Weight, spml_y_Lat        => y_Lat, spml_y_Lat_Weight => y_Lat_Weight
                              ! $ \Delta \varphi $ [rad.] . 
                              ! ç·�º¦åº§æ�����. 
                              ! Weight of latitude
#endif

    ! ���´Ï����������¼ã�¿æ���
    ! Prepare vertical sigma level data
    !
    use sigma_data, only: SigmaDataGetHalf

    ! NAMELIST ���¡ã�¤ã���¥å�����¢ã�������¼ã���£ã������
    ! Utilities for NAMELIST file input
    !
    use namelist_util, only: namelist_filename, NmlutilMsg, NmlutilAryValid

    ! ���¡ã�¤ã���¥å�ºå��è£���
    ! File I/O support
    !
    use dc_iounit, only: FileOpen

    ! ç¨��¥å�������¡ã��
    ! Kind type parameter
    !
    use dc_types, only: STDOUT, TOKEN      ! �­ã�¼ã���¼ã��.   Keywords. 

    ! �¡ã���»ã�¼ã�¸å�ºå��
    ! Message output
    !
    use dc_message, only: MessageNotify

    ! ��������
    ! Character handling
    !
    use dc_string, only: CPrintf

    ! OpenMP
    !
    !$ use omp_lib


    ! 宣�� ; Declaration statements
    !
    implicit none

    ! �業��
    ! Work variables
    !
    logical:: flag_generate_sigma
                              ! ���´å±¤�°ã������������������������
                              ! Flag for generation of sigma levels internally
    integer:: i               ! �¹ã����������·»å­���垩�§å���� DO ���¼ã�����業å���
                              ! Work variables for DO loop in subscript of spectral data
    integer:: k               ! ���´æ�¹å�������� DO ���¼ã�����業å���
                              ! Work variables for DO loop in vertical direction
    real(DP):: Kappa          ! $ \kappa = R / C_p $ .
                              ! ä¹¾ç�¥å¤§æ°���������, æ°�ä½�å®��°ã����§æ��±ã�������æ¯�.
                              ! Ratio of gas constant to specific heat in dry air

    real(DP):: LonInDeg       ! Longitude in unit of degree of a grid point in 1D mode
    real(DP):: LatInDeg       ! Latitude in unit of degree of a grid point in 1D mode

    integer:: unit_nml        ! NAMELIST ���¡ã�¤ã�����¼ã���³ç���ç½����. 
                              ! Unit number for NAMELIST file open
    integer:: iostat_nml      ! NAMELIST 読ã�¿è¾¼�¿æ���� IOSTAT. 
                              ! IOSTAT of NAMELIST read

    integer:: OMPNumThreads
                              ! OpenMP �§ã����大ã�¹ã��������.
                              ! openmp_threads �� 1 ����大ã�����¤ã����å®������� 
                              ! ISPACK[http://www.gfd-dennou.org/library/ispack/] 
                              ! �����¢è����½æ�°å��� OpenMP ä¸���è¨�ç®�
                              ! ���¼ã���³ã������������. ä¸���è¨�ç®���å®�è¡���������,
                              ! å®�è¡������°å�å¤��� OMP_NUM_THREADS 
                              ! �� OMPNumThreads 以ä����°å���¨­å®�����
                              ! ç­����·ã�¹ã�����������æº�����å¿�è¦�������.
                              !
                              ! OMPNumThreads �� 1 ����大ã�����¤ã��
                              ! ��å®����������°ä¸¦��è¨�ç®����¼ã���³ã���¼ã�°ã������.

    character(TOKEN):: rank_str
                              ! ���³ã����. Rank number
    integer:: myrank_mpi      ! ç·���­ã�»ã�¹æ��. Number of total processes
    integer:: nprocs_mpi      ! ��º«�����­ã�»ã��. Number of my process
    integer:: ra              ! MPI �����³ã���°æ�¹å�������� DO ���¼ã�����業å���
                              ! Work variables for DO loop in rank number of MPI direction

    ! NAMELIST å¤��°ç¾¤
    ! NAMELIST group name
    !
    namelist /axesset_nml/ Sigma, Depth, flag_generate_sigma, LonInDeg, LatInDeg
          !
          ! �����������¤ã���¤ã��������������ç¶� "axesset#AxessetInit" 
          ! ���½ã�¼ã�¹ã�³ã�¼ã�������§ã������. 
          !
          ! Refer to source codes in the initialization procedure
          ! "axesset#AxessetInit" for the default values. 
          !

    ! ���� ; Executable statement
    !

    if ( axesset_inited ) return


    !
    ! Set number of OpenMP threads
    !
    OMPNumThreads = 1
    !$ OMPNumThreads = omp_get_max_threads()


    ! �²ã��ä»���
    ! Allocation
    !
    allocate( z_Sigma      (1:kmax)   )
    allocate( r_Sigma      (0:kmax)   )
    allocate( z_DelSigma   (1:kmax)   )
    allocate( r_DelSigma   (0:kmax)   )
    allocate( w_Number     (1:(nmax+1)**2) )

    allocate( r_SSDepth( 0:kslmax ) )
    allocate( z_SSDepth( 1:kslmax ) )

    ! �����������¤ã��¨­å®�
    ! Default values settings
    !

    ! Sigma (���´æ�°ã�������) �������� (�¡å�¹ã����) ��¨­å®�
    ! Setting of initial value (invalid value) of "Sigma" (half level sigma)
    !
    Sigma = -999.0d0

    ! �°ä���±¤������¢æ·±���������� (�¡å�¹ã����) ��¨­å®�
    ! Setting of initial value (invalid value) of depth of subsurface layer interface
    !
    Depth = -999.0d0

    ! ���´å±¤�°ã�����������������������°ã��¨­å®�
    ! Setting of flag for generation of sigma levels internally
    !
    flag_generate_sigma = .false.

    ! Longitude in unit of degree of a grid point in 1D mode
    !
    LonInDeg = 0.0_DP

    ! Latitude in unit of degree of a grid point in 1D mode
    !
    LatInDeg  = 0.0_DP

    ! NAMELIST ����¿è¾¼��
    ! NAMELIST is input
    !
    if ( trim(namelist_filename) /= '' ) then
      call FileOpen( unit_nml, namelist_filename, mode = 'r' ) ! (in)

      rewind( unit_nml )
      read( unit_nml, nml = axesset_nml, iostat = iostat_nml ) ! (out)
      close( unit_nml )

      call NmlutilMsg( iostat_nml, module_name ) ! (in)
    end if

    ! Sigma (���´æ�°ã�������) ������設å�
    ! Automation setting of "Sigma" (half level sigma)
    !
    if ( all( Sigma == -999.0d0 ) ) then
      if ( flag_generate_sigma ) then
        call SigmaDataGetHalf( Sigma(1:kmax+1) ) ! (out)
      else
        call MessageNotify( 'E', module_name, '  Sigma levels have to be specified if flag_generate_sigma is not true.' )
      end if
    end if

    ! Sigma (���´æ�°ã�������) ���§ã����
    ! Check "Sigma" (half level sigma)
    !
    if ( Sigma(1) /= 1.0_DP ) then
      call MessageNotify( 'E', module_name, '  Sigma(1) is not 1, but is %f', d = (/ Sigma(1) /) )
    end if
    if ( Sigma(kmax+1) /= 0.0_DP ) then
      call MessageNotify( 'E', module_name, '  Sigma(kmax+1) is not 0, but is %f', d = (/ Sigma(kmax+1) /) )
    end if
    do k = 1, kmax
      if ( Sigma(k+1) > Sigma(k) ) then
        call MessageNotify( 'M', module_name, '  Sigma(%d) = %f > Sigma(%d) = %f', i = (/ k+1, k /), d = (/ Sigma(k+1), Sigma(k) /) )
        call MessageNotify( 'E', module_name, '  Value of Sigma has to decrease with index.' )
      end if
    end do

    ! r_Sigma (���´æ�°ã�������) 設å�
    ! Setting of "r_Sigma" (half level sigma)
    !
    r_Sigma(0:kmax) = Sigma(1:kmax+1)

    ! z_DelSigma (�´æ�°ã������ $ \Delta \sigma $ ) 設å�
    ! Setting of "z_DelSigma" (full level $ \Delta \sigma $ )
    !
    do k = 1, kmax
      z_DelSigma(k) = r_Sigma(k-1) - r_Sigma(k)
    enddo

    ! z_Sigma (�´æ�°ã�������) 設å�
    ! Setting of "z_Sigma" (full level sigma)
    !
    Kappa = GasRDry / CpDry
    do k = 1, kmax
      z_Sigma(k) = ( (   r_Sigma(k-1) ** ( 1.0_DP + Kappa ) - r_Sigma(k)   ** ( 1.0_DP + Kappa ) ) / ( z_DelSigma(k) * ( 1.0_DP + Kappa ) ) ) ** ( 1.0_DP / Kappa )
    enddo

    ! r_DelSigma (���´æ�°ã������ $ \Delta \sigma $ ) 設å�
    ! Setting of "r_DelSigma" (half level $ \Delta \sigma $ )
    !
    r_DelSigma(0)    = r_Sigma(0)    - z_Sigma(1)
    r_DelSigma(kmax) = z_Sigma(kmax) - r_Sigma(kmax)
    do k = 1, kmax - 1
      r_DelSigma(k) = z_Sigma(k) - z_Sigma(k+1)
    end do


    ! �°ä���±¤������¢æ·±�������§ã����
    ! Check depth of subsurface layer interface
    !
    if ( all( Depth == -999.0d0 ) ) then
      Depth(0+1:kslmax+1 ) = 0.0_DP
      call MessageNotify( 'W', module_name, 'Depth is not found in namelist file.' )
    end if
    !
    if ( Depth(0+1) /= 0.0_DP ) then
      call MessageNotify( 'E', module_name, '  Depth(0) is not zero, but is %f', d = (/ Depth(0+1) /) )
    end if
    if ( kslmax >= 1 ) then
      if ( all( Depth(1+1:kslmax+1) >= 0.0_DP ) ) then
        do k = 0, kslmax
          call MessageNotify( 'M', module_name, '  Depth(%d) = %f', i = (/ k /), d = (/ Depth(k+1) /) )
        end do
        call MessageNotify( 'E', module_name, '  Depth has to be zero or negative.' )
      end if
    end if
    do k = 0, kslmax-1
      if ( Depth(k+1+1) > Depth(k+1) ) then
        call MessageNotify( 'M', module_name, '  Depth(%d) = %f > Depth(%d) = %f', i = (/ k+1, k /), d = (/ Depth(k+1+1), Depth(k+1) /) )
        call MessageNotify( 'E', module_name, '  Value of Depth has to decrease with index.' )
      end if
    end do

    r_SSDepth(0:kslmax) = Depth(1:kslmax+1)

    do k = 0, kslmax
      call MessageNotify( 'M', module_name, '  r_SSDepth(%d) = %f', i = (/ k /), d = (/ r_SSDepth(k) /) )
    end do

    ! �°ä������´å±¤��¸­å¿��¹ã��¨­å®�
    ! Set midpoint of subsurface grid
    !
    do k = 1, kslmax
      z_SSDepth( k ) = ( r_SSDepth( k-1 ) + r_SSDepth( k ) ) / 2.0d0
    end do

    ! ç·�º¦çµ�åº���¨­å®�
    ! Settings of longitude and latitude
    !
    allocate( x_Lon        (0:imax-1) )
    allocate( x_Lon_Weight (0:imax-1) )
    allocate( y_Lat        (1:jmax)   )
    allocate( y_Lat_Weight (1:jmax)   )

    if ( ( imax == 1 ) .and. ( jmax == 1 ) ) then

      x_Lon          = LonInDeg * PI / 180.0_DP
      x_Lon_Weight   = 1.0_DP
      y_Lat          = LatInDeg * PI / 180.0_DP
      y_Lat_Weight   = 1.0_DP

    else
      if ( .not. spml_inited ) then
#ifdef LIB_MPI
        call wa_mpi_Initial( nmax, imax, jmax_global, kmax, OMPNumThreads ) ! (in)
        ! Check number of latitudinal grid on each process
        call GridsetCheckNumberOfLatGrid( spml_jc )
#else
        call wa_Initial( nmax, imax, jmax_global, kmax, OMPNumThreads ) ! (in)
#endif
        spml_inited = .true.
      end if

      x_Lon          = spml_x_Lon
      x_Lon_Weight   = spml_x_Lon_Weight
      y_Lat          = spml_y_Lat
      y_Lat_Weight   = spml_y_Lat_Weight
    end if

    if ( imax /= 1  ) then
      ! DeltaLon, InvDeltaLon����
      ! Caluculate DeltaLon and InvDeltaLon
      DeltaLon = x_Lon(1) - x_Lon(0)
      InvDeltaLon = 1.0_DP/DeltaLon
    else
      DeltaLon = 0.0_DP
      InvDeltaLon = 0.0_DP ! not used
    endif



    ! �¹ã�����������¼ã�¿ã��·»å­���垩��¨­å®�
    ! Settings of subscript of spectral data
    !
    do i = 1, size(w_Number)
      w_Number(i) = i
    end do

    ! ���³ã�����¢ã�������±ã���å¾�
    ! Get information about rank
    !
    myrank_mpi = -1
    nprocs_mpi = 1
    rank_str = ''


    ! �°å� ; Print
    !
    call MessageNotify( 'M', module_name, '----- Initialization Messages -----' )

#ifdef SJPACK
    call MessageNotify( 'M', module_name, 'SJPACK : %c', c1 = 'used.' )
#else
    call MessageNotify( 'M', module_name, 'SJPACK : %c', c1 = 'not used.' )
#endif

    call MessageNotify( 'M', module_name, 'OMPNumThreads = %d', i = (/OMPNumThreads/) )

    do ra = 0, nprocs_mpi - 1

      call MessageNotify( 'M', module_name, 'Axes:%c', c1 = trim(rank_str), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '  x_Lon(%d:%d) [deg.] = %*f', i = (/ 0, imax - 1/), d = format_print(x_Lon / PI * 180.0_DP, imax), n =(/ imax /), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '  y_Lat(%d:%d) [deg.] = %*f', i = (/ 1, jmax/), d = format_print(y_Lat / PI * 180.0_DP, jmax), n =(/ jmax /), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '  z_Sigma(%d:%d) = %*f', i = (/ 1, kmax /), d = format_print(z_Sigma, kmax), n =(/ kmax /), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '  r_Sigma(%d:%d) = %*f', i = (/ 0, kmax /), d = format_print(r_Sigma, kmax+1), n =(/ kmax+1 /), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '  w_Number(%d:%d) = %d .. %d', i = (/ 1, size(w_Number), 1, size(w_Number) /), rank_mpi = -1 )
  !
      call MessageNotify( 'M', module_name, 'Weight:' )
      call MessageNotify( 'M', module_name, '  x_Lon_Weight(%d:%d) = %*f', i = (/ 0, imax - 1/), d = format_print(x_Lon_Weight, imax), n =(/ imax /), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '  y_Lat_Weight(%d:%d) = %*f', i = (/ 1, jmax/), d = format_print(y_Lat_Weight, jmax), n =(/ jmax /), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '  z_DelSigma(%d:%d) = %*f', i = (/ 1, kmax /), d = format_print(z_DelSigma, kmax), n =(/ kmax /), rank_mpi = -1 )
      call MessageNotify( 'M', module_name, '' )
    end do

    call MessageNotify( 'M', module_name, '-- version = %c', c1 = trim(version), rank_mpi = -1 )

    axesset_inited = .true.

  end subroutine AxessetInit
AxnameR
Constant :
AxnameR = ‘sigm‘ :character(STRING), parameter, public
: axis name for r
AxnameSSR
Constant :
AxnameSSR = ‘sszi‘ :character(STRING), parameter, public
: axis name for r (subsurface)
AxnameSSZ
Constant :
AxnameSSZ = ‘ssz‘ :character(STRING), parameter, public
: axis name for z (subsurface)
AxnameT
Constant :
AxnameT = ‘time‘ :character(STRING), parameter, public
: axis name for t
AxnameWN
Constant :
AxnameWN = ‘wn‘ :character(STRING), parameter, public
: axis name for wavenumber
AxnameX
Constant :
AxnameX = ‘lon‘ :character(STRING), parameter, public
: axis name for x
AxnameY
Constant :
AxnameY = ‘lat‘ :character(STRING), parameter, public
: axis name for y
AxnameZ
Constant :
AxnameZ = ‘sig‘ :character(STRING), parameter, public
: axis name for z
DeltaLon
Variable :
DeltaLon :real(DP), save, public
: çµ�åº��¼å��¹é����. grid interval in longitude
InvDeltaLon
Variable :
InvDeltaLon :real(DP), save, public
: çµ�åº��¼å��¹é����������. Inverse of the grid interval in longitude
axesset_inited
Variable :
axesset_inited = .false. :logical, save, public
: ����設������. Initialization flag
r_DelSigma
Variable :
r_DelSigma(:) :real(DP), allocatable, save, public
: $ Delta sigma $ (���´æ��). $ Delta sigma $ (half)
r_SSDepth
Variable :
r_SSDepth(:) :real(DP), allocatable, save, public
: �°ä���±¤������¢ã��·±�� subsurface grid on interface of layer
r_Sigma
Variable :
r_Sigma(:) :real(DP), allocatable, save, public
: $ sigma $ ������ (���´æ��). Half $ sigma $ level
spml_inited
Variable :
spml_inited = .false. :logical, save, public
: SPML ���¤ã������������設å�������. Initialization flag of SPML library
w_Number
Variable :
w_Number(:) :integer, allocatable, save, public
: �¹ã�����������¼ã�¿ã��·»å­����. Subscript of spectral data
x_Lon
Variable :
x_Lon(:) :real(DP), allocatable, save, public
: $ lambda $ [rad.] . ��. Longitude
x_Lon_Weight
Variable :
x_Lon_Weight(:) :real(DP), allocatable, save, public
: $ Delta lambda $ [rad.] . çµ�åº�º§æ¨�����. Weight of longitude
y_Lat
Variable :
y_Lat(:) :real(DP), allocatable, save, public
: $ varphi $ [rad.] . ç·�º¦. Latitude
y_Lat_Weight
Variable :
y_Lat_Weight(:) :real(DP), allocatable, save, public
: $ Delta varphi $ [rad.] . ç·�º¦åº§æ�����. Weight of latitude
z_DelSigma
Variable :
z_DelSigma(:) :real(DP), allocatable, save, public
: $ Delta sigma $ (�´æ��). $ Delta sigma $ (Full)
z_SSDepth
Variable :
z_SSDepth(:) :real(DP), allocatable, save, public
: �°ä����¼å��¹ã��·±�� subsurface grid at midpoint of layer
z_Sigma
Variable :
z_Sigma(:) :real(DP), allocatable, save, public
: $ sigma $ ������ (�´æ��). Full $ sigma $ level

Private Instance methods

Depth
Variable :
Depth(1:MaxNmlArySize) :real(DP), save
: �¥å��������, �°ä������´å±¤å¢��� array for input, layer interface of subsurface vertical layer
Sigma
Variable :
Sigma(1:MaxNmlArySize) :real(DP), save
: $ sigma $ ������ (���´æ��). Half $ sigma $ level
Function :
result(size) :real(DP)
ary(size) :real(DP), intent(in)
size :integer, intent(in)

æ¨�æº��ºå���������������������������¹æ�°å�������½ã���������.

Effective digit is reduced for output to standard output and returned.

[Source]

  function format_print( ary, size ) result(result)
    !
    ! æ¨�æº��ºå���������������������������¹æ�°å�������½ã���������. 
    !
    ! Effective digit is reduced for output to standard output and returned. 
    !

    ! 宣�� ; Declaration statements
    !
    implicit none
    integer, intent(in):: size
    real(DP), intent(in):: ary(size)
    real(DP):: result(size)

    ! ���� ; Executable statement
    !
    result(1:size) = int( ary(1:size) * 1000.0_DP ) / 1000.0_DP

  end function format_print
module_name
Constant :
module_name = ‘axesset :character(*), parameter
: �¢ã�¸ã�¥ã�¼ã������ç§�. Module name
version
Constant :
version = ’$Name: $’ // ’$Id: axesset.F90,v 1.20 2014/05/07 09:39:21 murashin Exp $’ :character(*), parameter
: �¢ã�¸ã�¥ã�¼ã�������¼ã�¸ã�§ã�� Module version