program map04
use dcl
integer,parameter :: nx=36, ny=36
real,parameter :: xmin= 0, xmax=360, ymin=-90, ymax=+90
real,parameter :: pi=3.141592, drad=pi/180, dz=0.05
integer,parameter :: fact=10
real,dimension(0:nx,0:ny) :: p,u,v
real :: alon(0:nx), alat(0:ny)
rmiss = DclGetReal( 'GLOBAL:RMISS' )
call DclSetParm( 'GLOBAL:lmiss', .true. )
alon = xmin + (xmax-xmin) * (/(i, i=0,nx)/) /nx
alat = ymin + (ymax-ymin) * (/(j, j=0,ny)/) /ny
do j = 0, ny
do i = 0, nx
slat = sin(alat(j)*drad)
p(i,j) = cos(alon(i)*drad) * (1-slat**2) * sin(2*pi*slat) + dz
end do
end do
do j = 1, ny-1
do i = 0, nx
u(i,j) = ( p(i,j-1) - p(i,j+1) ) * fact
v(i,j) = ( p(modulo(i,nx)+1,j) - p(modulo(i-1,nx),j) )* fact
end do
end do
u(:,1) = rmiss; u(:,ny) = rmiss
v(:,1) = rmiss; v(:,ny) = rmiss
call DclOpenGraphics()
call DclNewFrame
call DclSetWindow( xmin, xmax, ymin, ymax )
call DclSetViewPort( 0.1, 0.9, 0.1, 0.9 )
call DclSetSimilarity( 0.4, 0.0, 0.0 )
call DclSetMapProjectionAngle( 165.0, 60.0, 0.0 )
call DclSetMapProjectionWindow( -180.0, 180.0, 0.0, 90.0 )
call DclSetTransNumber( 30 )
call DclSetTransFunction
call DclSetParm( 'GRAPH:lclip', .true. )
call DclDrawMap( 'coast_world' )
call DclDrawGlobe()
call DclDrawContour( p )
do j=0,ny
do i=0,nx
if (.not.(u(i,j).eq.rmiss .or. v(i,j).eq.rmiss)) then
call DclDrawArrow( &
alon(i),alat(j),alon(i)+u(i,j),alat(j)+v(i,j), 1, 3 )
end if
end do
end do
call DclCloseGraphics
end program
|