d1merg.f 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. *DECK D1MERG
  2. SUBROUTINE D1MERG (TCOS, I1, M1, I2, M2, I3)
  3. C***BEGIN PROLOGUE D1MERG
  4. C***SUBSIDIARY
  5. C***PURPOSE Merge two strings of ascending double precision numbers.
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (S1MERG-S, D1MERG-D, CMERGE-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 numbers in the
  13. C array TCOS. The first string is of length M1 and starts at
  14. C TCOS(I1+1). The second string is of length M2 and starts at
  15. C TCOS(I2+1). The merged string goes into TCOS(I3+1).
  16. C
  17. C This routine is currently unused, but was added to complete
  18. C the set of routines S1MERG and C1MERG (both of which are used).
  19. C
  20. C***ROUTINES CALLED DCOPY
  21. C***REVISION HISTORY (YYMMDD)
  22. C 910819 DATE WRITTEN
  23. C***END PROLOGUE D1MERG
  24. INTEGER I1, I2, I3, M1, M2
  25. DOUBLE PRECISION TCOS(*)
  26. C
  27. INTEGER J1, J2, J3
  28. C
  29. C***FIRST EXECUTABLE STATEMENT D1MERG
  30. IF (M1.EQ.0 .AND. M2.EQ.0) RETURN
  31. C
  32. IF (M1.EQ.0 .AND. M2.NE.0) THEN
  33. CALL DCOPY (M2, TCOS(I2+1), 1, TCOS(I3+1), 1)
  34. RETURN
  35. ENDIF
  36. C
  37. IF (M1.NE.0 .AND. M2.EQ.0) THEN
  38. CALL DCOPY (M1, TCOS(I1+1), 1, TCOS(I3+1), 1)
  39. RETURN
  40. ENDIF
  41. C
  42. J1 = 1
  43. J2 = 1
  44. J3 = 1
  45. C
  46. 10 IF (TCOS(I1+J1) .LE. TCOS(I2+J2)) THEN
  47. TCOS(I3+J3) = TCOS(I1+J1)
  48. J1 = J1+1
  49. IF (J1 .GT. M1) THEN
  50. CALL DCOPY (M2-J2+1, TCOS(I2+J2), 1, TCOS(I3+J3+1), 1)
  51. RETURN
  52. ENDIF
  53. ELSE
  54. TCOS(I3+J3) = TCOS(I2+J2)
  55. J2 = J2+1
  56. IF (J2 .GT. M2) THEN
  57. CALL DCOPY (M1-J1+1, TCOS(I1+J1), 1, TCOS(I3+J3+1), 1)
  58. RETURN
  59. ENDIF
  60. ENDIF
  61. J3 = J3+1
  62. GO TO 10
  63. END