C+ C NAME: C sort_IPS_data.f C PURPOSE: C Sort then IPS input data into an ascending time series order. C C CATEGORY: C Sorting C CALLING SEQUENCE: C call sort_IPS_data(NL,NLMAX,RA,cfiles,SRCG,SRC,IYRF,IREC,XC,YL,DIST,OBS,DOBS,FREQ,SSIZE,XE,XLS,XCE,XLL,XDL,IYRS,DOYS8) C INPUTS: C NL integer length of the data set C NLMAX integer maximum possible length of the data set (must be 2*NL) C RA (NLMAX) real*8 dummy array to be loaded with times and sorted C C Input dat set to be sorted C C cfiles (NLMAX) character*11 C SRCG (NLMAX) character*115 C SRC (NLMAX) Character*9 C IYRF (NLMAX) integer C IREC (NLMAX) integer C XC (NLMAX) real*4 C YL (NLMAX) real*4 C DIST (NLMAX) real*4 C OBS (NLMAX) real*4 C DOBS (NLMAX) real*4 C FREQ (NLMAX) real*4 C SSIZE (NLMAX) real*4 C XE (NLMAX) real*4 C XLS (NLMAX) real*4 C XCE (NLMAX) real*4 C XLL (NLMAX) real*4 C XDL (NLMAX) real*4 C IYRS (NLMAX) integer Year of the data C DOYS8 (NLMAX) real*8 DOY of the data C C OUTPUTS: C cfiles (NLMAX) character*11 C SRCG (NLMAX) character*115 C SRC (NLMAX) Character*9 C IYRF (NLMAX) integer C IREC (NLMAX) integer C XC (NLMAX) real*4 C YL (NLMAX) real*4 C DIST (NLMAX) real*4 C OBS (NLMAX) real*4 C DOBS (NLMAX) real*4 C XE (NLMAX) real*4 C XLS (NLMAX) real*4 C XCE (NLMAX) real*4 C XLL (NLMAX) real*4 C XDL (NLMAX) real*4 C IYRS (NLMAX) integer Year of the data C DOYS8 (NLMAX) real*8 DOY of the data C C RESTRICTIONS: C To avoid having double arrays for each input parameter, the parameters are first placed into the array at its end, and then recopied C to the beginning of each array. This means each array needs to be double the length of the data set. This is checked and the subroutine C stopped with an error message if the inputs arrays are not double the data set values. C C PROCEDURE: C C MODIFICATION HISTORY: C 2014 B.Jackson (UCSD) C- subroutine sort_IPS_data(NL,NLMAX,RA,cfiles,SRCG,SRC,IYRF,IREC,XC,YL,DIST,OBS,DOBS,FREQ,SSIZE,XE,XLS,XCE,XLL,XDL,IYRS,DOYS8) C real*8 RA (NLMAX) ! Input dummy array to be loaded with times real*8 RV C integer IYRS (NLMAX), & IYRF (NLMAX), & IREC (NLMAX) C real*8 DOYS8 (NLMAX) C character cfiles (NLMAX)*11, & SRCG (NLMAX)*115, & SRC (NLMAX)*9 C real*4 XC (NLMAX), & YL (NLMAX), & DIST (NLMAX), & OBS (NLMAX), & DOBS (NLMAX), & FREQ (NLMAX), & SSIZE (NLMAX), & XE (NLMAX), & XLS (NLMAX), & XCE (NLMAX), & XLL (NLMAX), & XDL (NLMAX) C if(NL*2.gt.NLMAX) then print *, 'The input arrays are not double the length of the data set. The sorting must stop.' stop end if C do I=1, NL RA(I) = dble(IYRS(I)) + DOYS8(I)/400.0d0 end do C call sortr8(1,NL,1,NL,RA) C do I=1, NL RV = dble(IYRS(I)) + DOYS8(I)/400.0d0 do J=1, NL if(RV.eq.RA(J)) then NLEND = NLMAX - NL + J C cfiles (NLEND) = cfiles(I) SRCG (NLEND) = SRCG (I) SRC (NLEND) = SRC (I) IYRF (NLEND) = IYRF (I) IREC (NLEND) = IREC (I) XC (NLEND) = XC (I) YL (NLEND) = YL (I) DIST (NLEND) = DIST (I) OBS (NLEND) = OBS (I) DOBS (NLEND) = DOBS (I) FREQ (NLEND) = FREQ (I) SSIZE (NLEND) = SSIZE (I) XE (NLEND) = XE (I) XLS (NLEND) = XLS (I) XCE (NLEND) = XCE (I) XLL (NLEND) = XLL (I) XDL (NLEND) = XDL (I) DOYS8 (NLEND) = DOYS8 (I) IYRS (NLEND) = IYRS (I) end if end do end do do I=1, NL NLEND = NLMAX - NL + I C cfiles(I) = cfiles(NLEND) SRCG (I) = SRCG (NLEND) SRC (I) = SRC (NLEND) IYRF (I) = IYRF (NLEND) IREC (I) = IREC (NLEND) XC (I) = XC (NLEND) YL (I) = YL (NLEND) DIST (I) = DIST (NLEND) OBS (I) = OBS (NLEND) DOBS (I) = DOBS (NLEND) FREQ (I) = FREQ (NLEND) SSIZE (I) = SSIZE (NLEND) XE (I) = XE (NLEND) XLS (I) = XLS (NLEND) XCE (I) = XCE (NLEND) XLL (I) = XLL (NLEND) XDL (I) = XDL (NLEND) DOYS8 (I) = DOYS8 (NLEND) IYRS (I) = IYRS (NLEND) end do return end