You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.2 KiB
Fortran
101 lines
3.2 KiB
Fortran
SUBROUTINE GETGRDELEV(M,IERREL)
|
|
|
|
USE BLK1MOD
|
|
USE BLKMAP
|
|
REAL*8 XXX,YYY
|
|
|
|
XXX=XUSR(M)
|
|
YYY=YUSR(M)
|
|
|
|
! test for XXX and YYY outside grid limits
|
|
|
|
IF(XXX .LT. XXORG-CELLSIZX/2. .OR. XXX .GT. XXORG+(FLOAT(NCOLS1)+0.5)*CELLSIZX) THEN
|
|
WD(M)=-9998.
|
|
RETURN
|
|
ELSE
|
|
IF(YYY .LT. YYORG-CELLSIZY/2. .OR. YYY .GT. YYORG+(FLOAT(NROWS1)+0.5)*CELLSIZY) THEN
|
|
WD(M)=-9998.
|
|
RETURN
|
|
ENDIF
|
|
ENDIF
|
|
! Set row length in bytes and set temp origin
|
|
LENROW=NCOLS1*4
|
|
XORGT=XXORG
|
|
YORGT=YYORG
|
|
! Get row and column from lower left
|
|
|
|
NCOL=INT((XXX-XORGT)/CELLSIZX)+1
|
|
NROWU=INT((YYY-YORGT)/CELLSIZY)+1
|
|
|
|
! Establish fraction within cell
|
|
|
|
XFRAC=(XXX-XORGT-(NCOL-1)*CELLSIZX)/CELLSIZX
|
|
YFRAC=(YYY-YORGT-(NROWU-1)*CELLSIZY)/CELLSIZY
|
|
|
|
! Let fraction overlap outer edge
|
|
|
|
IF(XFRAC .LT. 0.) XFRAC=0.
|
|
IF(YFRAC .LT. 0.) YFRAC=0.
|
|
|
|
! Set up file position across columns, up rows and combine
|
|
NCOLFIL=(NCOL-1)*4
|
|
IF(NGRTYP .EQ. 1) THEN
|
|
NROWFIL=(NROWU-1)*LENROW
|
|
ELSE
|
|
NROWFIL=(NROWS1-NROWU+1)*LENROW
|
|
ENDIF
|
|
NFILPOS=NCOLFIL+NROWFIL
|
|
|
|
! Read lower left the lower right allow fo upper limit
|
|
|
|
READ(203,POS=NFILPOS+1) ELEVLL
|
|
IF(NCOL .LT. NCOLS1) NFILPOS=NFILPOS+4
|
|
READ(203,POS=NFILPOS+1) ELEVLR
|
|
|
|
! Test for point ouside grid
|
|
|
|
IF(ELEVLL .LT. -9000. .OR. ELEVLR .LT. -9000.) THEN
|
|
WD(M)=-9998.
|
|
RETURN
|
|
ENDIF
|
|
|
|
! Now mode to next row up and column
|
|
|
|
IF(NGRTYP .EQ. 1) THEN
|
|
NROWFIL= NROWU*LENROW
|
|
ELSE
|
|
NROWFIL=(NROWS1-NROWU)*LENROW
|
|
ENDIF
|
|
! NROWFIL=(NROWS1-NROWU)*LENROW
|
|
NFILPOS=NCOLFIL+NROWFIL
|
|
READ(203,POS=NFILPOS+1) ELEVUL
|
|
IF(NCOL .LT. NCOLS1) NFILPOS=NFILPOS+4
|
|
READ(203,POS=NFILPOS+1) ELEVUR
|
|
|
|
! Test again
|
|
|
|
IF(ELEVUL .LT. -9000. .OR. ELEVUR .LT. -9000.) THEN
|
|
WD(M)=-9998.
|
|
RETURN
|
|
ENDIF
|
|
! interpolate along along lower and upper level
|
|
|
|
ELEVL=XFRAC*(ELEVLR-ELEVLL)+ELEVLL
|
|
ELEVU=XFRAC*(ELEVUR-ELEVUL)+ELEVUL
|
|
|
|
! Get final value, store and display
|
|
|
|
AMAPVAL=YFRAC*(ELEVU-ELEVL)+ELEVL
|
|
wd(m)=amapval
|
|
FPN = WD(M)*10.
|
|
X = CORD(M,1)
|
|
Y = CORD(M,2) - .11
|
|
IF(X .GT. 0. .AND. X .LT. HSIZE .AND. Y .GT. 0. .AND. Y .LT. 7.5) THEN
|
|
CALL RRED
|
|
CALL NUMBR(X,Y,0.1,FPN,0.0,-1)
|
|
endif
|
|
|
|
RETURN
|
|
|
|
|
|
END |