C+ C NAME: C FlipFlop C PURPOSE: C Rearrange 2D array C CALLING SEQUENCE: subroutine FlipFlop(N,NX,NY,Z) C INPUTS: C N integer 0,1,2,3 C NX integer horizontal array dim C NY integer vertical array dim C Z(NX,NY) real 2D array C OUTPUTS: C Z(NX,NY) real rearranged array C PROCEDURE: C > N = 1 : produces a mirror image (map 1,..,NX to NX,..,1) C > N = 2 : flips array upside down (map 1,..,NY to NY,..,1) C > N = 3 : mirror image and upside down C > All other values: array unchanged C MODIFICATION HISTORY: C JUL-1995, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- integer N integer NX integer NY real Z(NX,NY) integer VMIRROR integer HMIRROR if (N .eq. 1) then ! Mirror image NX1 = NX+1 do J=1,NY do I=1,NX/2 HMIRROR = NX1-I TMP = Z(I,J) Z(I,J) = Z(HMIRROR,J) Z(HMIRROR,J) = TMP end do end do else if (N .eq. 2) then ! Flip upside down NY1 = NY+1 do I=1,NX do J=1,NY/2 VMIRROR = NY1-J TMP = Z(I,J) Z(I,J) = Z(I,VMIRROR) Z(I,VMIRROR) = TMP end do end do else if (N .eq. 3) then ! Mirror and flip upside down NY1 = NY+1 NX1 = NX+1 do J=1,NY/2 VMIRROR = NY1-J do I=1,NX HMIRROR = NX1-I TMP = Z(I,J) Z(I,J) = Z(HMIRROR,VMIRROR) Z(HMIRROR,VMIRROR) = TMP end do end do if (NY/2*2 .ne. NY) then J = NY/2+1 do I=1,NX/2 HMIRROR = NX1-I TMP = Z(I,J) Z(I,J) = Z(HMIRROR,J) Z(HMIRROR,J) = TMP end do end if end if return end