i1merg.f 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. *DECK I1MERG
  2. SUBROUTINE I1MERG (ICOS, I1, M1, I2, M2, I3)
  3. C***BEGIN PROLOGUE I1MERG
  4. C***SUBSIDIARY
  5. C***PURPOSE Merge two strings of ascending integers.
  6. C***LIBRARY SLATEC
  7. C***TYPE INTEGER (S1MERG-S, D1MERG-D, C1MERG-C, I1MERG-I)
  8. C***AUTHOR Boland, W. Robert, (LANL)
  9. C Clemens, Reginald, (PLK)
  10. C***DESCRIPTION
  11. C
  12. C This subroutine merges two ascending strings of integers in the
  13. C array ICOS. The first string is of length M1 and starts at
  14. C ICOS(I1+1). The second string is of length M2 and starts at
  15. C ICOS(I2+1). The merged string goes into ICOS(I3+1).
  16. C
  17. C***ROUTINES CALLED ICOPY
  18. C***REVISION HISTORY (YYMMDD)
  19. C 920202 DATE WRITTEN
  20. C***END PROLOGUE I1MERG
  21. INTEGER I1, I2, I3, M1, M2
  22. REAL ICOS(*)
  23. C
  24. INTEGER J1, J2, J3
  25. C
  26. C***FIRST EXECUTABLE STATEMENT I1MERG
  27. IF (M1.EQ.0 .AND. M2.EQ.0) RETURN
  28. C
  29. IF (M1.EQ.0 .AND. M2.NE.0) THEN
  30. CALL ICOPY (M2, ICOS(I2+1), 1, ICOS(I3+1), 1)
  31. RETURN
  32. ENDIF
  33. C
  34. IF (M1.NE.0 .AND. M2.EQ.0) THEN
  35. CALL ICOPY (M1, ICOS(I1+1), 1, ICOS(I3+1), 1)
  36. RETURN
  37. ENDIF
  38. C
  39. J1 = 1
  40. J2 = 1
  41. J3 = 1
  42. C
  43. 10 IF (ICOS(I1+J1) .LE. ICOS(I2+J2)) THEN
  44. ICOS(I3+J3) = ICOS(I1+J1)
  45. J1 = J1+1
  46. IF (J1 .GT. M1) THEN
  47. CALL ICOPY (M2-J2+1, ICOS(I2+J2), 1, ICOS(I3+J3+1), 1)
  48. RETURN
  49. ENDIF
  50. ELSE
  51. ICOS(I3+J3) = ICOS(I2+J2)
  52. J2 = J2+1
  53. IF (J2 .GT. M2) THEN
  54. CALL ICOPY (M1-J1+1, ICOS(I1+J1), 1, ICOS(I3+J3+1), 1)
  55. RETURN
  56. ENDIF
  57. ENDIF
  58. J3 = J3+1
  59. GO TO 10
  60. END