!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE WTSATFLD ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma. ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE wtsatfld(nx,ny,nfield, &,27
sfname,satname,latsat,lonsat, &
iyr,imon,iday,ihr,imin,isec,isource, &
dmpfmt,hdf4cmpr, &
fldname,satfld)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Writes remapped satellite data to a file as one or
! more 2-d fields.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Keith Brewster
! 09/20/97
!
! MODIFICATION HISTORY:
!
!
!-----------------------------------------------------------------------
!
! INPUT:
! nx,ny horizontal dimensions
! nfield number of satellite fields to write
! sfname satellite file name (character string)
! satnam satellite name (character*6)
! latsat sub-satellite latitude (degrees N)
! lonsat sub-satellite longitude (degrees E)
! iyr year
! imon month
! iday day
! ihr hour
! imin min
! isec sec
! isource source number
! 1= GVAR raw 2-byte data file
! 2= IDD 1-byte datafeed
! fldname name of variable(s) (character*6 array)
! satfld satellite data
!
! OUTPUT:
! data are written to file
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
INTEGER :: nx,ny
INTEGER :: nfield
CHARACTER (LEN=100) :: sfname
CHARACTER (LEN=6) :: satname
REAL :: latsat
REAL :: lonsat
INTEGER :: iyr,imon,iday,ihr,imin,isec
INTEGER :: isource
CHARACTER (LEN=6) :: fldname(nfield)
REAL :: satfld(nx,ny,nfield)
integer::dmpfmt
integer::hdf4cmpr
!
!-----------------------------------------------------------------------
!
! Misc local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: iunit,myr,itime
INTEGER :: idummy
REAL :: rdummy
INTEGER(2), allocatable :: itmp(:,:,:) ! Temporary array
REAL, allocatable :: hmax(:), hmin(:) ! Temporary array
integer::sd_id,i,istat
!
!-----------------------------------------------------------------------
!
! Include files
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
INCLUDE 'grid.inc'
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF (hdf4cmpr > 3) THEN
ALLOCATE (itmp(nx,ny,nfield),stat=istat)
IF (istat /= 0) THEN
WRITE (6,*) "HDFDUMP: ERROR allocating itmp, returning"
RETURN
END IF
ALLOCATE (hmax(nfield),stat=istat)
IF (istat /= 0) THEN
WRITE (6,*) "HDFDUMP: ERROR allocating hmax, returning"
RETURN
END IF
ALLOCATE (hmin(nfield),stat=istat)
IF (istat /= 0) THEN
WRITE (6,*) "HDFDUMP: ERROR allocating hmin, returning"
RETURN
END IF
ENDIF
!
myr=1900+iyr
IF(myr < 1960) myr=myr+100
CALL ctim2abss
(myr,imon,iday,ihr,imin,isec,itime)
!
IF(dmpfmt==1)THEN
CALL getunit
(iunit)
!
!-----------------------------------------------------------------------
!
! Open file for output
!
!-----------------------------------------------------------------------
!
OPEN(iunit,FILE=sfname,STATUS='unknown', &
FORM='unformatted')
!
!-----------------------------------------------------------------------
!
! Write satellite description variables
!
!-----------------------------------------------------------------------
!
idummy=0
rdummy=0.
WRITE(iunit) satname
WRITE(iunit) nx,ny,nfield,itime,idummy, &
idummy,idummy,idummy,idummy,idummy
!
!-----------------------------------------------------------------------
!
! Write grid description variables
! This should provide enough info to uniquely identify the 2-d grid.
!
!-----------------------------------------------------------------------
!
WRITE(iunit) runname
WRITE(iunit) hdmpfmt,strhopt,mapproj,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
WRITE(iunit) dx,dy,dz,dzmin,ctrlat, &
ctrlon,trulat1,trulat2,trulon,sclfct, &
latsat,lonsat,rdummy,rdummy,rdummy
!
!-----------------------------------------------------------------------
!
! Write 2-d fields.
!
!-----------------------------------------------------------------------
!
WRITE(iunit) fldname
WRITE(iunit) satfld
ELSE !HDF4 format
CALL hdfopen
(trim(sfname), 2, sd_id)
IF (sd_id < 0) THEN
WRITE (6,*) "WTRADCOL: ERROR opening ", &
trim(sfname)," for writing."
istat = 1
STOP
END IF
CALL hdfwrtc
(sd_id, 6, 'satname', satname, istat)
CALL hdfwrti
(sd_id, 'nx', nx, istat)
CALL hdfwrti
(sd_id, 'ny', ny, istat)
CALL hdfwrti
(sd_id, 'nfield', nfield, istat)
CALL hdfwrti
(sd_id, 'itime', itime, istat)
CALL hdfwrtc
(sd_id, 4, 'runname', runname, istat)
CALL hdfwrti
(sd_id, 'hdmpfmt', hdmpfmt, istat)
CALL hdfwrti
(sd_id, 'strhopt', strhopt, istat)
CALL hdfwrti
(sd_id, 'mapproj', mapproj, istat)
CALL hdfwrtr
(sd_id, 'dx', dx, istat)
CALL hdfwrtr
(sd_id, 'dy', dy, istat)
CALL hdfwrtr
(sd_id, 'dz', dz, istat)
CALL hdfwrtr
(sd_id, 'dzmin', dzmin, istat)
CALL hdfwrtr
(sd_id, 'ctrlat', ctrlat, istat)
CALL hdfwrtr
(sd_id, 'ctrlon', ctrlon, istat)
CALL hdfwrtr
(sd_id, 'trulat1', trulat1, istat)
CALL hdfwrtr
(sd_id, 'trulat2', trulat2, istat)
CALL hdfwrtr
(sd_id, 'trulon', trulon, istat)
CALL hdfwrtr
(sd_id, 'sclfct', sclfct, istat)
CALL hdfwrtr
(sd_id, 'latsat', latsat, istat)
CALL hdfwrtr
(sd_id, 'lonsat', lonsat, istat)
DO i = 1,nfield
CALL hdfwrtc
(sd_id, 6, 'fldname', fldname(i), istat)
ENDDO
CALL hdfwrt3d
(satfld,nx,ny,nfield,sd_id,0,hdf4cmpr, &
'satfld','satfld','', &
itmp,hmax,hmin)
ENDIF
!
IF(dmpfmt==1)THEN
CLOSE(iunit)
CALL retunit(iunit)
ELSE
CALL hdfclose
(sd_id,istat)
IF (istat /= 0) THEN
WRITE (6,*) "HDFDUMP: ERROR on closing file ",trim(sfname), &
" (status",istat,")"
DEALLOCATE (itmp,stat=istat)
DEALLOCATE (hmax,stat=istat)
DEALLOCATE (hmin,stat=istat)
ENDIF
ENDIF
!
!-----------------------------------------------------------------------
!
! Report on what data were written
!
!-----------------------------------------------------------------------
!
WRITE(6,'(//a,i2.2,i2.2,i2.2,a1,i2.2,a1,i2.2)') &
' Wrote satellite fields for time ', &
iyr,imon,iday,' ',ihr,':',imin
!
RETURN
END SUBROUTINE wtsatfld