C++*********************************************************************
C
C    FOUR1A_FP.F                                  
C
C    7/24/00 BIMAL                  ADAPTED TO NEW FOURIER FORMAT               
C                                   OPFILE           NOV 00 ARDEAN LEITH
C                                   OPFILEC          FEB 03 ARDEAN LEITH    
C
C **********************************************************************
C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM.   AUTHOR: J.FRANK  *
C=* Copyright (C) 1985-2005  Health Research Inc.                      *
C=*                                                                    *
C=* HEALTH RESEARCH INCORPORATED (HRI),                                *   
C=* ONE UNIVERSITY PLACE, RENSSELAER, NY 12144-3455.                   *
C=*                                                                    *
C=* Email:  spider@wadsworth.org                                       *
C=*                                                                    *
C=* This program is free software; you can redistribute it and/or      *
C=* modify it under the terms of the GNU General Public License as     *
C=* published by the Free Software Foundation; either version 2 of the *
C=* License, or (at your option) any later version.                    *
C=*                                                                    *
C=* This program is distributed in the hope that it will be useful,    *
C=* but WITHOUT ANY WARRANTY; without even the implied warranty of     *
C=* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *
C=* General Public License for more details.                           *
C=*                                                                    *
C=* You should have received a copy of the GNU General Public License  *
C=* along with this program; if not, write to the                      *
C=* Free Software Foundation, Inc.,                                    *
C=* 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.      *
C=*                                                                    *
C **********************************************************************
C
C  FOUR1A_FP
C
C       2D AND 3D IMAGES OF ANY(EVEN/ODD) DIMENSION IS TAKEN AS INPUT
C       AND INTERPOLATED TO ANY DIMENSION. 
C
C IMAGE_PROCESSING_ROUTINE
C
C23456789012345678901234567890123456789012345678901234567890123456789012
C--*********************************************************************

        SUBROUTINE FOUR1A_FP

        INCLUDE 'CMBLOCK.INC' 
        INCLUDE 'CMLIMIT.INC'

        COMMON /COMMUN/ FILNAM
        CHARACTER (LEN=MAXNAM) ::  FILNAM

        REAL, ALLOCATABLE, DIMENSION(:,:)   :: X  
        REAL, ALLOCATABLE, DIMENSION(:,:)   :: Y     
        REAL, ALLOCATABLE, DIMENSION(:,:,:) :: X3 
        REAL, ALLOCATABLE, DIMENSION(:,:,:) :: Y3 
 
        DATA  LUN1,LUN2/9,10/

        MAXIM   = 0       
        CALL OPFILEC(0,.TRUE.,FILNAM,LUN1,'O',IFORM,NSAM,NROW,NSLICE,
     &             MAXIM,'INPUT',.FALSE.,IRTFLG)
        IF (IRTFLG .NE. 0) RETURN

        NSAMN   = 0 
        NSLICEN = 0
        MAXIM   = 0 
        CALL OPFILEC(LUN1,.TRUE.,FILNAM,LUN2,'U',IFORM,
     &    NSAMN,NROWN,NSLICEN,MAXIM,'INTERPOLATED OUTPUT',.TRUE.,IRTFLG)
        IF (IRTFLG .NE. 0) THEN
           CLOSE(LUN1)
           RETURN
        ENDIF

        IF (NSLICE .GT. 1) THEN
C          3D CASE

           LSD  = NSAM +2-MOD(NSAM,2)
           LSDN = NSAMN+2-MOD(NSAMN,2)

           ALLOCATE (X3(LSD,NROW,NSLICE), STAT=IRTFLG)
           IF (IRTFLG.NE.0) THEN 
              CALL ERRT(46,'FP, X3',IER)
              GOTO 9001
              RETURN
           ENDIF 

           ALLOCATE (Y3(LSDN,NROWN,NSLICEN), STAT=IRTFLG)
           IF (IRTFLG.NE.0) THEN 
              CALL ERRT(46,'FP, Y3',IER)
              GOTO 9000
           ENDIF 

           CALL READV(LUN1,X3,LSD,NROW,NSAM,NROW,NSLICE)

           CALL FINT3(X3,Y3,NSAM,NROW,NSLICE,NSAMN,NROWN,
     &                NSLICEN,LSD,LSDN)

           CALL WRITEV(LUN2,Y3,LSDN,NROWN,NSAMN,NROWN,NSLICEN)

        ELSE
C          2D CASE
           NSLICEN = 1
           LSD     = NSAM +2-MOD(NSAM,2)
           LSDN    = NSAMN+2-MOD(NSAMN,2)

           ALLOCATE (X(LSD,NROW), STAT=IRTFLG)
           IF (IRTFLG.NE.0) THEN 
              CALL ERRT(46,'FP, X',IER)
              GOTO 9000
          ENDIF 

           ALLOCATE (Y(LSDN,NROWN), STAT=IRTFLG)
           IF (IRTFLG.NE.0) THEN 
              CALL ERRT(46,'FP, Y',IER)
              GOTO 9001
           ENDIF 

           CALL READV(LUN1,X,LSD,NROW,NSAM,NROW,NSLICEN)

           CALL FINT(X,Y,NSAM,NROW,NSAMN,NROWN,LSD,LSDN)

           CALL WRITEV(LUN2,Y,LSDN,NROWN,NSAMN,NROWN,NSLICEN)

        ENDIF

9000   IF (NSLICE .EQ. 1) THEN
           IF (ALLOCATED(X)) DEALLOCATE (X)
           IF (ALLOCATED(Y)) DEALLOCATE (Y)
        ELSE
           IF (ALLOCATED(X3)) DEALLOCATE (X3)
           IF (ALLOCATED(Y3)) DEALLOCATE (Y3)
        ENDIF

9001    CLOSE (LUN2)
        CLOSE (LUN1)

        END
