subroutine CheckProgVars( xy_Ps, xyz_U, xyz_V, xyz_Temp, xyzf_QMix )
!
! äº��±å��°ã���¤ã��¢ºèª�
!
! Check values of prognostic variables
!
! �¢ã�¸ã�¥ã�¼ã����� ; USE statements
!
! �¼å��¹è¨å®�
! Grid points settings
!
use gridset, only: imax, jmax, kmax ! ���´å±¤��.
! Number of vertical level
! 座æ����¼ã�¿è¨å®�
! Axes data settings
!
use axesset, only: x_Lon, y_Lat, z_Sigma ! $ \sigma $ ������ (�´æ��). Full $ \sigma $ level
! çµ������¢ã���������¨å®�
! Settings of array for atmospheric composition
!
use composition, only: ncmax, IndexH2OVap
! �¡ã���»ã�¼ã�¸å�ºå��
! Message output
!
use dc_message, only: MessageNotify
! ���»ç���
! Time control
!
use timeset, only: TimeN, TimesetClockStart, TimesetClockStop
! �������°ç�����¼ã���£ã������
! Utilities for debug
!
use dc_trace, only: DbgMessage, BeginSub, EndSub
! �����»æ�°å¦å®��°è¨å®�
! Physical and mathematical constants settings
!
use constants0, only: PI ! $ \pi $ .
! Circular constant
! 宣�� ; Declaration statements
!
implicit none
real(DP), intent(in):: xy_Ps (0:imax-1, 1:jmax)
! $ p_s (t-\Delta t) $ . �°è¡¨�¢æ���. Surface pressure (Pa)
real(DP), intent(in):: xyz_U (0:imax-1, 1:jmax, 1:kmax)
! $ u $ . �±è¥¿é¢���. Eastward wind
real(DP), intent(in):: xyz_V (0:imax-1, 1:jmax, 1:kmax)
! $ v $ . �������. Northward wind
real(DP), intent(in):: xyz_Temp (0:imax-1, 1:jmax, 1:kmax)
! $ T $ . æ¸�º¦ (�´æ�°ã������).
! Temperature (full level)
real(DP), intent(in):: xyzf_QMix(0:imax-1, 1:jmax, 1:kmax, 1:ncmax)
! $ q $ . ��. Specific humidity
! ä½�æ¥å���
! Work variables
!
integer:: i ! çµ�åº��¹å�������� DO ���¼ã�����æ¥å���
! Work variables for DO loop in longitude
integer:: j ! ç·�º¦�¹å�������� DO ���¼ã�����æ¥å���
! Work variables for DO loop in latitude
integer:: k ! ���´æ�¹å�������� DO ���¼ã�����æ¥å���
! Work variables for DO loop in vertical direction
integer:: n ! çµ����¹å�������� DO ���¼ã�����æ¥å���
! Work variables for DO loop in dimension of constituents
real(DP) :: minval, maxval
integer :: mini, minj, mink
integer :: maxi, maxj, maxk
! ���� ; Executable statement
!
! ������確è�
! Initialization check
!
if ( .not. check_prog_vars_inited ) then
call MessageNotify( 'E', module_name, 'This module has not been initialized.' )
end if
! �����������
! Start measurement of computation time
!
call TimesetClockStart( module_name )
i = 0
j = 1
k = 1
minval = xyz_U(i,j,k)
maxval = xyz_U(i,j,k)
mini = i
minj = j
mink = k
maxi = i
maxj = j
maxk = k
do k = 1, kmax
do j = 1, jmax
do i = 0, imax-1
if ( xyz_U (i,j,k) < minval ) then
minval = xyz_U (i,j,k)
mini = i
minj = j
mink = k
end if
if ( maxval < xyz_U (i,j,k) ) then
maxval = xyz_U (i,j,k)
maxi = i
maxj = j
maxk = k
end if
end do
end do
end do
if ( minval < VelMin ) then
call MessageNotify( 'M', module_name, 'Min value : U(%f,%f,%f) = %f.', d = (/ x_Lon(mini)*180.0_DP/PI, y_Lat(minj)*180.0_DP/PI, z_Sigma(mink), minval /) )
end if
if ( VelMax < maxval ) then
call MessageNotify( 'M', module_name, 'Max value : U(%f,%f,%f) = %f.', d = (/ x_Lon(maxi)*180.0_DP/PI, y_Lat(maxj)*180.0_DP/PI, z_Sigma(maxk), maxval /) )
end if
i = 0
j = 1
k = 1
minval = xyz_V(i,j,k)
maxval = xyz_V(i,j,k)
mini = i
minj = j
mink = k
maxi = i
maxj = j
maxk = k
do k = 1, kmax
do j = 1, jmax
do i = 0, imax-1
if ( xyz_V (i,j,k) < minval ) then
minval = xyz_V (i,j,k)
mini = i
minj = j
mink = k
end if
if ( maxval < xyz_V (i,j,k) ) then
maxval = xyz_V (i,j,k)
maxi = i
maxj = j
maxk = k
end if
end do
end do
end do
if ( minval < VelMin ) then
call MessageNotify( 'M', module_name, 'Min value : V(%f,%f,%f) = %f.', d = (/ x_Lon(mini)*180.0_DP/PI, y_Lat(minj)*180.0_DP/PI, z_Sigma(mink), minval /) )
end if
if ( VelMax < maxval ) then
call MessageNotify( 'M', module_name, 'Max value : V(%f,%f,%f) = %f.', d = (/ x_Lon(maxi)*180.0_DP/PI, y_Lat(maxj)*180.0_DP/PI, z_Sigma(maxk), maxval /) )
end if
i = 0
j = 1
k = 1
minval = xyz_Temp(i,j,k)
maxval = xyz_Temp(i,j,k)
mini = i
minj = j
mink = k
maxi = i
maxj = j
maxk = k
do k = 1, kmax
do j = 1, jmax
do i = 0, imax-1
if ( xyz_Temp(i,j,k) < minval ) then
minval = xyz_Temp(i,j,k)
mini = i
minj = j
mink = k
end if
if ( maxval < xyz_Temp(i,j,k) ) then
maxval = xyz_Temp(i,j,k)
maxi = i
maxj = j
maxk = k
end if
end do
end do
end do
if ( minval < TempMin ) then
call MessageNotify( 'M', module_name, 'Min value : T(%f,%f,%f) = %f.', d = (/ x_Lon(mini)*180.0_DP/PI, y_Lat(minj)*180.0_DP/PI, z_Sigma(mink), minval /) )
end if
if ( TempMax < maxval ) then
call MessageNotify( 'M', module_name, 'Max value : T(%f,%f,%f) = %f.', d = (/ x_Lon(maxi)*180.0_DP/PI, y_Lat(maxj)*180.0_DP/PI, z_Sigma(maxk), maxval /) )
end if
! ���¹ã�������¼ã�¿å�ºå��
! History data output
!
! è¨�ç®�����è¨�æ¸������æ�
! Pause measurement of computation time
!
call TimesetClockStop( module_name )
end subroutine CheckProgVars