la05ed.f 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. *DECK LA05ED
  2. SUBROUTINE LA05ED (A, IRN, IP, N, IW, IA, REALS)
  3. C***BEGIN PROLOGUE LA05ED
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to DSPLP
  6. C***LIBRARY SLATEC
  7. C***TYPE DOUBLE PRECISION (LA05ES-S, LA05ED-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C THIS SUBPROGRAM IS A SLIGHT MODIFICATION OF A SUBPROGRAM
  12. C FROM THE C. 1979 AERE HARWELL LIBRARY. THE NAME OF THE
  13. C CORRESPONDING HARWELL CODE CAN BE OBTAINED BY DELETING
  14. C THE FINAL LETTER =D= IN THE NAMES USED HERE.
  15. C REVISED SEP. 13, 1979.
  16. C
  17. C ROYALTIES HAVE BEEN PAID TO AERE-UK FOR USE OF THEIR CODES
  18. C IN THE PACKAGE GIVEN HERE. ANY PRIMARY USAGE OF THE HARWELL
  19. C SUBROUTINES REQUIRES A ROYALTY AGREEMENT AND PAYMENT BETWEEN
  20. C THE USER AND AERE-UK. ANY USAGE OF THE SANDIA WRITTEN CODES
  21. C DSPLP( ) (WHICH USES THE HARWELL SUBROUTINES) IS PERMITTED.
  22. C
  23. C***SEE ALSO DSPLP
  24. C***ROUTINES CALLED (NONE)
  25. C***COMMON BLOCKS LA05DD
  26. C***REVISION HISTORY (YYMMDD)
  27. C 811215 DATE WRITTEN
  28. C 890831 Modified array declarations. (WRB)
  29. C 891214 Prologue converted to Version 4.0 format. (BAB)
  30. C 900402 Added TYPE section. (WRB)
  31. C***END PROLOGUE LA05ED
  32. LOGICAL REALS
  33. DOUBLE PRECISION A(*),SMALL
  34. INTEGER IRN(*), IW(*)
  35. INTEGER IP(*)
  36. COMMON /LA05DD/ SMALL, LP, LENL, LENU, NCP, LROW, LCOL
  37. C***FIRST EXECUTABLE STATEMENT LA05ED
  38. NCP = NCP + 1
  39. C COMPRESS FILE OF POSITIVE INTEGERS. ENTRY J STARTS AT IRN(IP(J))
  40. C AND CONTAINS IW(J) INTEGERS,J=1,N. OTHER COMPONENTS OF IRN ARE ZERO.
  41. C LENGTH OF COMPRESSED FILE PLACED IN LROW IF REALS IS .TRUE. OR LCOL
  42. C OTHERWISE.
  43. C IF REALS IS .TRUE. ARRAY A CONTAINS A FILE ASSOCIATED WITH IRN
  44. C AND THIS IS COMPRESSED TOO.
  45. C A,IRN,IP,IW,IA ARE INPUT/OUTPUT VARIABLES.
  46. C N,REALS ARE INPUT/UNCHANGED VARIABLES.
  47. C
  48. DO 10 J=1,N
  49. C STORE THE LAST ELEMENT OF ENTRY J IN IW(J) THEN OVERWRITE IT BY -J.
  50. NZ = IW(J)
  51. IF (NZ.LE.0) GO TO 10
  52. K = IP(J) + NZ - 1
  53. IW(J) = IRN(K)
  54. IRN(K) = -J
  55. 10 CONTINUE
  56. C KN IS THE POSITION OF NEXT ENTRY IN COMPRESSED FILE.
  57. KN = 0
  58. IPI = 0
  59. KL = LCOL
  60. IF (REALS) KL = LROW
  61. C LOOP THROUGH THE OLD FILE SKIPPING ZERO (DUMMY) ELEMENTS AND
  62. C MOVING GENUINE ELEMENTS FORWARD. THE ENTRY NUMBER BECOMES
  63. C KNOWN ONLY WHEN ITS END IS DETECTED BY THE PRESENCE OF A NEGATIVE
  64. C INTEGER.
  65. DO 30 K=1,KL
  66. IF (IRN(K).EQ.0) GO TO 30
  67. KN = KN + 1
  68. IF (REALS) A(KN) = A(K)
  69. IF (IRN(K).GE.0) GO TO 20
  70. C END OF ENTRY. RESTORE IRN(K), SET POINTER TO START OF ENTRY AND
  71. C STORE CURRENT KN IN IPI READY FOR USE WHEN NEXT LAST ENTRY
  72. C IS DETECTED.
  73. J = -IRN(K)
  74. IRN(K) = IW(J)
  75. IP(J) = IPI + 1
  76. IW(J) = KN - IPI
  77. IPI = KN
  78. 20 IRN(KN) = IRN(K)
  79. 30 CONTINUE
  80. IF (REALS) LROW = KN
  81. IF (.NOT.REALS) LCOL = KN
  82. RETURN
  83. END