[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
20010912: Update to imcalib.f
- Subject: 20010912: Update to imcalib.f
- Date: Wed, 12 Sep 2001 14:15:19 -0600
Sean,
I looked in the logs and see you have downloaded both the
source and linux binary distributions for gempak.
If you want to update your source distribution, I have attatched a
copy of $GEMPAK/source/gemlib/im/imcalib.f
Here are the update instructions:
1) move your current imcalib.f routine to imcalib.f.old
cd $GEMPAK/source/gemlib/im
mv imcalib.f imcalib.f.old
2) store the attatched imcalib.f routine to: $GEMPAK/source/gemlib/im/imcalib.f
3) rebuild the gemlib.a
cd $GEMPAK/source/gemlib/im
make clean
make all
make clean
4) rebuild the programs and GUIs
cd $NAWIPS
make clean
make all
make install
make clean
The above won't take too long since all you have to do is relink programs.
Steve Chiswell
Unidata User Support
SUBROUTINE IM_CALIB(imgfil, ioff, iret)
C************************************************************************
C* IM_CALIB *
C* *
C* This subroutine reads the calibration block of an AREA file, and *
C* stores the colorbar levels in the appropriate common block variables.*
C* If the calibration block is a PROD, then the pixel and data values *
C* are retrieved for the colorbar levels. *
C* *
C* IM_DROP ( IRET ) *
C* *
C* Input parameters: *
C* IMGFIL CHAR* Image file *
C* IOFF INTEGER Calibration block offset *
C* *
C* Output parameters: *
C* IRET INTEGER Return code *
C* 0 = normal return *
C** *
C* Log: *
C* Chiz/Unidata 07/00 Created for CIMSS products *
C* Initially, only PROD is handled.*
C************************************************************************
CHARACTER*(*) imgfil
INTEGER ioff, iret
INTEGER iarray(16)
CHARACTER tval*4
INCLUDE 'IMGDEF.CMN'
C
C* Attempt to open the image file
C
CALL FL_DOPN (imgfil, 1, .false., lunf, iret)
if (iret .ne. 0) return
istart = (ioff / 4) + 1
C
C* See if this is a known Calibration type
C
CALL FL_READ (lunf, istart, 1, iarray, iret)
CALL ST_ITOC ( iarray (1), 1, tval, ier )
if(tval .eq. 'PROD') then
cmcalb = tval
c debug statements
c do i=istart,istart+7
c CALL FL_READ (lunf, i, 1, iarray, iret)
c
c if (iret .ne. 0) then
c write(*,*) 'flread failed ',ioff,iret
c endif
c
c CALL ST_ITOC ( iarray (1), 1, tval, ier )
c if(ier.ne.0) tval = ' '
c write(*,*) i,' ',iarray(1),tval,' ',ier
c end do
C
C* Read in min and max pixel and corresponding data
C* values. Scale value is for data points.
C
CALL FL_READ (lunf, istart+1, 1, iminval, iret)
CALL FL_READ (lunf, istart+2, 1, imaxval, iret)
CALL FL_READ (lunf, istart+3, 1, iminpix, iret)
CALL FL_READ (lunf, istart+4, 1, imaxpix, iret)
CALL FL_READ (lunf, istart+5, 1, iarray, iret)
CALL ST_ITOC ( iarray (1), 1, tval, ier )
if(ier .eq. 0) then
cmbunt = tval
else
cmbunt = 'Unk'
endif
CALL FL_READ (lunf, istart+6, 1, iscaleval, iret)
C
C* Swap calibration values if necessary, don't need to swap ascii text
C
if(imbswp .eq. 1) then
ier = MV_SWP4 ( 1, iminval, iminval)
ier = MV_SWP4 ( 1, imaxval, imaxval)
ier = MV_SWP4 ( 1, iminpix, iminpix)
ier = MV_SWP4 ( 1, imaxpix, imaxpix)
ier = MV_SWP4 ( 1, iscaleval, iscaleval)
endif
if(iscaleval .eq. 0) iscaleval = 1
C
C* Determine colorbar levels and store commonblock values.
C
ratio = float(imaxval - iminval)/float(imaxpix - iminpix)
immnpx = iminpix
immxpx = imaxpix
iminpix = iminpix + 1
imaxpix = imaxpix + 1
do i=1,256
if(i.eq.iminpix) then
CALL ST_INCH ( iminval/iscaleval, cmblev (i), ier )
else if(i.eq.imaxpix) then
CALL ST_INCH ( imaxval/iscaleval, cmblev (i), ier )
else if((i.gt.iminpix).and.(i.lt.imaxpix)) then
IF ( mod ( i-1,16) .eq. 0) THEN
level = nint( (i-iminpix) * ratio) + iminval
CALL ST_INCH ( level/iscaleval,
+ cmblev (i), ier )
ELSE
cmblev (i) = ' '
END IF
else
cmblev(i) = ' '
endif
end do
endif
CALL FL_CLOS (lunf, iret)
iret = 0
RETURN
END