SUBROUTINE CUTIT(KFILDO,XIN,NXIN,NYIN,NXOFF,NYOFF, 1 XOUT,NXOUT,NYOUT,IER) C C OCTOBER 2004 GLAHN MDL MOS-2000 C MODIFIED FROM CUT (LAMPLIB) C NOVEMBER 2004 GLAHN PUT "D" ON ESLEIF ABOVE 106 C NOVEMBER 2004 GLAHN IMPROVED STATEMENT IN PURPOSE C DECEMBER 2004 GLAHN SPLIT IF TEST USING FORMAT 107 FROM C ABOVE; CHANGED FIRST TEST USING C FORMAT 105 FROM NYOUT TO NYOFF C C PURPOSE C TO ACCEPT A GRID OF TYPE REAL DATA XIN(NXIN,NYIN) C AND TO PUT A PORTION OF THAT GRID INTO XOUT(NXOUT,NYOUT) C WITH AN OFFSET OF NXOFF, NYOFF. XIN( , ) AND XOUT( , ) C CAN BE EQUIVALENCED IN THE CALLING PROGRAM. THE GRID c LENGTHS OF THE INPUT AND OUTPUT GRIDS ARE THE SAME. C C DATA SET USE C KFILDO - OUTPUT (PRINT) FILE UNIT NUMBER. C C VARIABLES C KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE. (INPUT) C XIN(IX,JY) = INPUT GRID (IX=1,NXIN) (JY=1,NYIN). (INPUT) C NXIN, NYIN = DIMENSIONS OF XIN( , ). (INPUT) C NXOFF = OFFSET OF OUTPUT GRID WITH REFERENCE TO INPUT C GRID IN GRID LENGTHS IN IX DIRECTION. (INPUT) C NYOFF = OFFSET OF OUTPUT GRID WITH REFERENCE TO INPUT C GRID IN GRID LENGTHS IN JY DIRECTION. (INPUT) C NXOUT(IX,JY) = OUTPUT GRID (IX=1,NXOUT) (JY=1,NYOUT). (OUTPUT) C NXOUT, NYOUT = DIMENSIONS OF XOUT( , ). (INPUT) C IER = ERROR RETURN. C 0 = SUCCESSFUL RETURN. C 194 = OFFSET NXOFF OR NYOFF IS NEGATIVE. C (OUTPUT) C C NONSYSTEM SUBROUTINES CALLED C NONE. C 1 2 3 4 5 6 7 X C DIMENSION XIN(NXIN,NYIN),XOUT(NXOUT*NYOUT) C IER=0 C D WRITE(KFILDO,101)NXIN,NYIN,NXOFF,NYOFF,NXOUT,NYOUT D101 FORMAT(/' IN CUTIT AT 101--NXIN,NYIN,NXOFF,NYOFF,NXOUT,NYOUT', D 1 6I10) IF(NXOFF.LT.0.OR.NYOFF.LT.0)THEN IER=194 WRITE(KFILDO,105)NXOFF,NYOFF,IER 105 FORMAT(/' ****OUTPUT GRID NOT WITHIN', 1 ' INPUT GRID WITH OFFSETS NXOFF, NYOFF =',2I6, 2 ' IN CUTIT. IER =',I4) GO TO 150 C D ELSEIF(NXOFF.EQ.0.AND.NYOFF.EQ.0)THEN D WRITE(KFILDO,106) D106 FORMAT(/' ****BOTH OFFSETS IN CUTIT = 0.', D 1 ' PROCEEDING.') C ENDIF C IF((NXOUT+NXOFF.GT.NXIN).OR.(NYOUT+NYOFF.GT.NYIN))THEN IER=194 WRITE(KFILDO,107)NXOFF,NYOFF,IER 107 FORMAT(/' ****OFFSET NXOFF OR NYOFF =',2I6, 1 ' IS TOO LARGE FOR OUTPUT', 2 ' GRID TO BE WITHIN INPUT GRID IN CUTIT. IER =',I4) GO TO 150 C ENDIF C IOUT=1 C DO 140 JY=1+NYOFF,NYOUT+NYOFF CCCD WRITE(KFILDO,120)JY,(XIN(IX,JY),IX=1+NXOFF,NXOUT+NXOFF) CCCD120 FORMAT(' ROW =',I5,/,(15F8.3)) C DO 130 IX=1+NXOFF,NXOUT+NXOFF XOUT(IOUT)=XIN(IX,JY) IOUT=IOUT+1 130 CONTINUE C 140 CONTINUE C 150 RETURN END