PROGRAM pltsatfld,6
!
!##################################################################
!##################################################################
!###### ######
!###### PROGRAM PLTSATFLD ######
!###### ######
!###### Copyright (c) 1996 ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma. All rights reserved. ######
!###### ######
!##################################################################
!##################################################################
!
! PURPOSE:
!
! Plots data written by remapsat.
!
! AUTHOR:
!
! Keith Brewster, CAPS, September, 1997
!
! LINKING:
!
! ncargf77 -o pltsatmap pltsatmap.f pltmap.f maproj3d.f timelib3d.f
!
!-----------------------------------------------------------------------
!
! Variable Declarations:
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nfield
PARAMETER (nfield=1)
INTEGER :: nx, ny
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc'
!
!-----------------------------------------------------------------------
!
! Read-in data
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=6) :: satname
REAL :: latsat
REAL :: lonsat
INTEGER :: itime
INTEGER :: isource
CHARACTER (LEN=6) :: fldname(nfield)
REAL, ALLOCATABLE :: satfld(:,:,:)
!
!-----------------------------------------------------------------------
!
! Map plotting variables
!
!-----------------------------------------------------------------------
!
INTEGER :: maxpts
PARAMETER (maxpts = 1000)
REAL :: latmap(maxpts),lonmap(maxpts)
REAL :: xmap(maxpts),ymap(maxpts)
!
!-----------------------------------------------------------------------
!
! Misc local variables
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=3) :: chplt
CHARACTER (LEN=18) :: timplt
CHARACTER (LEN=72) :: fname
CHARACTER (LEN=72) :: mapfile
PARAMETER (mapfile='uscounty.mapdata')
REAL :: x,y
REAL :: latnot(2)
REAL :: ctrx,ctry,swx,swy,nex,ney
INTEGER :: i,j,k,iplt
INTEGER :: istatus
!-----------------------------------------------------------------------
!
! NAMELIST declaration
!
!-----------------------------------------------------------------------
NAMELIST /grid_dims/ nx, ny
NAMELIST /fn/ fname
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!-----------------------------------------------------------------------
!
! Get user input
!
!-----------------------------------------------------------------------
!
READ(5,grid_dims,END=100)
WRITE(6,'(/a,a)')' Namelist block grid_dims successfully read.'
READ(5,fn,END=100)
WRITE(6,'(/a,a)')' Namelist block fn successfully read.'
ALLOCATE( satfld(nx,ny,nfield), STAT=istatus)
satfld = 0
!
!-----------------------------------------------------------------------
!
! Read data
!
!-----------------------------------------------------------------------
!
CALL rdsatfld
(nx,ny,nfield, &
fname,satname,latsat,lonsat, &
itime,isource,fldname,satfld)
!
CALL opngks
!
!-----------------------------------------------------------------------
!
! Set up map
!
!-----------------------------------------------------------------------
!
IF(ctrlon > 180.) ctrlon=ctrlon-360.
IF(trulon > 180.) trulon=trulon-360.
latnot(1)=trulat1
latnot(2)=trulat2
CALL setmapr
(mapproj,sclfct,latnot,trulon)
CALL lltoxy
(1,1,ctrlat,ctrlon,ctrx,ctry)
swx=ctrx-((nx-3)/2)*dx
swy=ctry-((ny-3)/2)*dy
nex=swx+(nx-3)*dx
ney=swy+(ny-3)*dy
!
!-----------------------------------------------------------------------
!
! Field loop
!
!-----------------------------------------------------------------------
!
DO k=1,nfield
PRINT *, ' plotting field: ',fldname(k)
!
IF( fldname(k) == 'cttemp' ) THEN
!
!-----------------------------------------------------------------------
!
! Plot cloud-top temperature contours
!
!-----------------------------------------------------------------------
!
CALL set( 0.,1.0,0.0,1.0, &
-.1,1.1,-.1,1.1,1)
CALL wtstr(0.05,1.05,satname,16,0,0)
CALL wtstr(0.6,1.05,timplt,16,0,0)
CALL wtstr(0.9,1.05,fldname(k),16,0,0)
CALL set( 0.05,.95,0.05,0.95, &
swx,nex,swy,ney,1)
CALL conrec(satfld(1,1,k), &
nx,nx,ny,0.,0.,20.,-1,-1,-127)
CALL pltmap
(maxpts,mapfile,latmap,lonmap,xmap,ymap)
CALL frame
!
!-----------------------------------------------------------------------
!
! Plot cloud-top temperature values
!
!-----------------------------------------------------------------------
!
! CALL SET( 0.,1.0,0.0,1.0,
! + -.1,1.1,-.1,1.1,1)
! call wtstr(0.05,1.05,satname,16,0,0)
! call wtstr(0.6,1.05,timplt,16,0,0)
! call wtstr(0.9,1.05,'fldname(k)',16,0,0)
! CALL SET( 0.,1.0,0.0,1.0,
! + swx,nex,swy,ney,1)
! DO 150 j=1,ny
! DO 150 i=1,nx
! IF(satfld(i,j,k).gt.-200. .and.
! + satfld(i,j,k).lt.500.) THEN
! write(chplt,820) nint(satfld(i,j,k))
820 FORMAT(i3)
! x=swx+float(i-1)*dx
! y=swy+float(j-1)*dy
! call wtstr(x,y,chplt,8,0,0)
! END IF
! 150 CONTINUE
! CALL pltmap(maxpts,mapfile,latmap,lonmap,xmap,ymap)
! CALL FRAME
END IF
!
IF( fldname(k) == 'albedo' ) THEN
!
!-----------------------------------------------------------------------
!
! Plot albedo contours
!
!-----------------------------------------------------------------------
!
CALL set( 0.,1.0,0.0,1.0, &
-.1,1.1,-.1,1.1,1)
CALL wtstr(0.1,1.05,satname,16,0,0)
CALL wtstr(0.4,1.05,timplt,16,0,0)
CALL wtstr(0.8,1.05,fldname(k),16,0,0)
CALL set( 0.05,0.95,0.05,0.95, &
swx,nex,swy,ney,1)
CALL conrec(satfld(1,1,k), &
nx,nx,ny,0.0,0.5,0.05,-1,-1,-127)
CALL pltmap
(maxpts,mapfile,latmap,lonmap,xmap,ymap)
CALL frame
!
!-----------------------------------------------------------------------
!
! Plot albedo values
!
!-----------------------------------------------------------------------
!
CALL set( 0.,1.0,0.0,1.0, &
-.1,1.1,-.1,1.1,1)
CALL wtstr(0.1,1.05,satname,16,0,0)
CALL wtstr(0.4,1.05,timplt,16,0,0)
CALL wtstr(0.8,1.05,fldname(k),16,0,0)
CALL set( 0.,1.0,0.0,1.0, &
swx,nex,swy,ney,1)
DO j=1,ny,5
DO i=1,nx,5
IF(satfld(i,j,k) > 0.0 .AND. satfld(i,j,k) < 2.0 ) THEN
iplt=nint(100.*satfld(i,j,k))
IF(iplt > 3 .AND. iplt < 10) THEN
WRITE(chplt,820) iplt
x=swx+FLOAT(i-1)*dx
y=swy+FLOAT(j-1)*dy
CALL wtstr(x,y,chplt,8,0,0)
END IF
END IF
END DO
END DO
CALL pltmap
(maxpts,mapfile,latmap,lonmap,xmap,ymap)
CALL frame
END IF
!
END DO
!
CALL clsgks
!
GOTO 101
100 CONTINUE
WRITE(6,'(/a,a)') 'Error reading NAMELIST file. The program will abort.'
101 CONTINUE
STOP
END PROGRAM pltsatfld
SUBROUTINE satread(nx,ny,varname,DATA)
IMPLICIT NONE
INTEGER :: nx,ny
REAL :: DATA(nx,ny)
CHARACTER (LEN=6) :: varname
CHARACTER (LEN=80) :: fname
INTEGER :: nxin,nyin
INTEGER :: i,j
fname='jian.9804201745.goes08.albedo'
OPEN(3,FILE=fname,STATUS="old",FORM="unformatted")
READ (3) varname
PRINT *, ' varname=',varname
READ (3) nxin,nyin
PRINT *, ' nxin,nyin: ',nxin,nyin
DO j=1,ny
! print *, 'j=',j
READ (3) (DATA(i,j),i=1,nx)
END DO
CLOSE (3)
PRINT *, ' data( 1, 1): ',DATA( 1, 1)
PRINT *, ' data(nx,ny): ',DATA(nx,ny)
RETURN
END SUBROUTINE satread