c1merg.f 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. *DECK C1MERG
  2. SUBROUTINE C1MERG (TCOS, I1, M1, I2, M2, I3)
  3. C***BEGIN PROLOGUE C1MERG
  4. C***SUBSIDIARY
  5. C***PURPOSE Merge two strings of complex numbers. Each string is
  6. C ascending by the real part.
  7. C***LIBRARY SLATEC
  8. C***TYPE COMPLEX (S1MERG-S, D1MERG-D, C1MERG-C, I1MERG-I)
  9. C***AUTHOR (UNKNOWN)
  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). The ordering
  16. C is on the real part.
  17. C
  18. C***SEE ALSO CMGNBN
  19. C***ROUTINES CALLED CCOPY
  20. C***REVISION HISTORY (YYMMDD)
  21. C 801001 DATE WRITTEN
  22. C 891214 Prologue converted to Version 4.0 format. (BAB)
  23. C 900402 Added TYPE section. (WRB)
  24. C 910408 Modified to use IF-THEN-ELSE. Make it look like MERGE
  25. C which was modified earlier due to compiler problems on
  26. C the IBM RS6000. (RWC)
  27. C 920130 Code name changed from CMPMRG to C1MERG. (WRB)
  28. C***END PROLOGUE C1MERG
  29. INTEGER I1, I2, I3, M1, M2
  30. COMPLEX TCOS(*)
  31. C
  32. INTEGER J1, J2, J3
  33. C
  34. C***FIRST EXECUTABLE STATEMENT C1MERG
  35. IF (M1.EQ.0 .AND. M2.EQ.0) RETURN
  36. C
  37. IF (M1.EQ.0 .AND. M2.NE.0) THEN
  38. CALL CCOPY (M2, TCOS(I2+1), 1, TCOS(I3+1), 1)
  39. RETURN
  40. ENDIF
  41. C
  42. IF (M1.NE.0 .AND. M2.EQ.0) THEN
  43. CALL CCOPY (M1, TCOS(I1+1), 1, TCOS(I3+1), 1)
  44. RETURN
  45. ENDIF
  46. C
  47. J1 = 1
  48. J2 = 1
  49. J3 = 1
  50. C
  51. 10 IF (REAL(TCOS(J1+I1)) .LE. REAL(TCOS(I2+J2))) THEN
  52. TCOS(I3+J3) = TCOS(I1+J1)
  53. J1 = J1+1
  54. IF (J1 .GT. M1) THEN
  55. CALL CCOPY (M2-J2+1, TCOS(I2+J2), 1, TCOS(I3+J3+1), 1)
  56. RETURN
  57. ENDIF
  58. ELSE
  59. TCOS(I3+J3) = TCOS(I2+J2)
  60. J2 = J2+1
  61. IF (J2 .GT. M2) THEN
  62. CALL CCOPY (M1-J1+1, TCOS(I1+J1), 1, TCOS(I3+J3+1), 1)
  63. RETURN
  64. ENDIF
  65. ENDIF
  66. J3 = J3+1
  67. GO TO 10
  68. END