SUBROUTINE W3FT00(FLD,B,IA,JA,IB,JB,CIP,CJP,FIPB,FJPB,SC,ARG,LIN)
C$$$   SUBPROGRAM  DOCUMENTATION  BLOCK
C
C SUBPROGRAM: W3FT00         DATA FIELD TRANFORMATION SUBROUTINE
C   AUTHOR: MCDONELL, J.     ORG: W345        DATE: SEPTEMBER, 1974
C           HOWCROFT, J.
C   UPDATE: JONES,R.E.       ORG: W342        DATE: 27 JUN 84
C
C ABSTRACT: TRANSFORMS DATA CONTAINED IN A GRID ARRAY BY TRANSLATION,
C   ROTATION ABOUT A COMMON POINT AND DILATATION TO A NEW GRID ARRAY.
C
C PROGRAM HISTORY LOG:
C   74-09-01  J.MCDONELL
C   84-06-27  R.E.JONES   CHANGE TO IBM VS FORTRAN
C
C USAGE:  CALL W3FT00 (FA,FB,IA,JA,IB,JB,AIP,AJP,BIP,BJP,SC,ARG,LIN)
C
C   INPUT VARIABLES:
C     NAMES  INTERFACE DESCRIPTION OF VARIABLES AND TYPES
C     ------ --------- -----------------------------------------------
C     FA     ARG LIST  REAL  ORIGIONAL FIELD DIMENSIONED (IA,IJ)
C     IA     ARG LIST  INTEGER  I-DIMENSION OF THE INPUT ARRAY FA
C     JA     ARG LIST  INTEGER  J-DIMENSION OF THE INPUT ARRAY FA
C     IB     ARG LIST  INTEGER  I-DIMENSION OF THE OUTPUT ARRAY FB
C     JB     ARG LIST  INTEGER  J-DIMENSION OF THE OUTPUT ARRAY FB
C     AIP    ARG LIST  REAL   COMMON POINT I-COORDINATE OF THE ORIGIONAL
C                      FIELD ASSUMING A RIGHT HAND CARTESIAN COORDINATE
C                      SYSTEM. THE POINT NEED NOT BE IN EITHER GRID AND
C                      CAN HAVE FRACTIONAL INDICES).
C     AJP    ARG LIST  REAL  COMMON POINT J-COORDINATE AS AIP ABOVE
C     BIP    ARG LIST  REAL  COMMON POINT I-COORDINATE FOR TRANSFORMED
C                      GRID
C     BJP    ARG LIST  REAL  COMMON POINT J-COORDINATE FOR TRANSFORMED
C                      GRID
C     SC     ARG LIST  REAL  SCALE CHANGE (DILATION) EXPRESSED AS
C                      A RATIO OF THE TRANSFORMED TO THE ORIGIONAL FIELD
C     ARG    ARG LIST  REAL  DEGREE MEASURE OF THE ANGLE REQUIRED TO
C                      ROTATE THE J-ROW OF THE ORIGIONAL GRID INTO
C                      COINCIDENCE WITH THE NEW GRID. (+ COUNTER-
C                      CLOCKWISE, - CLOCKWISE)
C     LIN    ARG LIST  INTEGER  INTERPOLATION METHOD SWITCH
C                      .EQ. 1 BILINEAR INTERPOLATION
C                      .NE. 1 BIQUADRATIC INTERPOLATION
C
C   OUTPUT VARIABLES:
C     NAMES  INTERFACE DESCRIPTION OF VARIABLES AND TYPES
C     ------ --------- -----------------------------------------------
C     FB     ARG LIST  REAL  TRANSFORMED FIELD DIMENSIONED (IB,JB)
C
C   SUBPROGRAMS CALLED:
C     NAMES                                                   LIBRARY
C     ------------------------------------------------------- --------
C     SIN    COS                                              SYSTEM
C
C   REMARKS: IN GENERAL 'FA' AND 'FB' CANNOT BE EQUIVALENCED
C     ALTHOUGH THERE ARE SITUATIONS IN WHICH IT WOULD BE SAFE TO DO
C     SO. CARE SHOULD BE TAKEN THAT ALL OF THE NEW GRID POINTS LIE
C     WITHIN THE ORIGIONAL GRID, NO ERROR CHECKS ARE MADE.
C
C ATTRIBUTES:
C   LANGUAGE: CRAY CFT77 FORTRAN
C   MACHINE:  CRAY Y-MP8/832
C
C$$$
C
      REAL  B(IB,JB)
      REAL  ERAS(4)
      REAL  FLD(IA,JA)
C
      EQUIVALENCE (CI,STI), (CJ,STJ)
C
      THETA = ARG * (3.14159 / 180.0)
      SINT  = SIN (THETA)
      COST  = COS (THETA)
C
      DO 180 JN = 1,JB
        FJN   = JN
        FJ    = FJN - FJPB
      DO 180 IN = 1,IB
        FIN   = IN
        FI    = FIN - FIPB
        IOFF  = 0
        JOFF  = 0
        KQUAD = 0
        CI    = CIP + SC * (FI * COST - FJ * SINT)
        CJ    = CJP + SC * (FI * SINT + FJ * COST)
        IM    = CI
        JM    = CJ
        IF ((IM - 1).GT.0) GO TO 20
        IF ((IM - 1).EQ.0) GO TO 40
          II   = 1
          IOFF = 1
          GO TO 50
C
 20   CONTINUE
        IF ((IA - IM - 1).GT.0) GO TO 50
        IF ((IA - IM - 1).EQ.0) GO TO 40
          II   = IA
          IOFF = 1
          GO TO 50
C
 40   CONTINUE
        KQUAD = 5
C
 50   CONTINUE
        IF ((JM - 1).GT.0) GO TO 70
        IF ((JM - 1).EQ.0) GO TO 90
        JJ   = 1
        JOFF = 1
        GO TO 100
C
 70   CONTINUE
        IF ((JA - JM - 1).GT.0) GO TO 100
        IF ((JA - JM - 1).EQ.0) GO TO 90
        JJ   = JA
        JOFF = 1
        GO TO 100
C
 90   CONTINUE
        KQUAD = 5
C
 100  CONTINUE
        IF ((IOFF + JOFF) .EQ. 0)  GO TO 120
        IF ((IOFF + JOFF) .EQ. 2)  GO TO 110
        IF (IOFF .EQ. 1)  JJ = CJ
        IF (JOFF .EQ. 1)  II = CI
C
 110  CONTINUE
        B(IN,JN) = FLD(II,JJ)
        GO TO 180
C
 120  CONTINUE
        I     = STI
        J     = STJ
        FIX   = I
        XDELI = STI - FIX
        FJX   = J
        XDELJ = STJ - FJX
        IF ((KQUAD - 5).EQ.0) GO TO 140
C
        IF ((LIN-1).NE.0) GO TO 150
C
 140  CONTINUE
        ERAS(1) = FLD(I,J)
        ERAS(4) = FLD(I,J+1)
        ERAS(2) = ERAS(1) + (FLD(I+1,J)   - ERAS(1)) * XDELI
        ERAS(3) = ERAS(4) + (FLD(I+1,J+1) - ERAS(4)) * XDELI
        DI      = ERAS(2) + (ERAS(3)      - ERAS(2)) * XDELJ
        GO TO 170
C
 150  CONTINUE
        XI2TM = XDELI * (XDELI - 1.0) * 0.25
        XJ2TM = XDELJ * (XDELJ - 1.0) * 0.25
        J1 = J - 1
C
      DO 160 K = 1,4
        ERAS(K) = (FLD(I+1,J1) - FLD(I,J1)) * XDELI + FLD(I,J1) +
     & (FLD(I-1,J1) - FLD(I,J1) - FLD(I+1,J1) + FLD(I+2,J1)) * XI2TM
        J1 = J1 + 1
 160  CONTINUE
C
        DI = ERAS(2) + (ERAS(3) - ERAS(2)) * XDELJ + (ERAS(1) -
     &       ERAS(2) -  ERAS(3) + ERAS(4)) * XJ2TM
C
 170  CONTINUE
        B(IN,JN) = DI
C
 180  CONTINUE
C
      RETURN
      END