Télécharger dperm.eso

Retour à la liste

Numérotation des lignes :

  1. C DPERM SOURCE CHAT 05/01/12 22:54:41 5004
  2. SUBROUTINE DPERM (NROW,A,JA,IA,AO,JAO,IAO,PERM,QPERM,JOB)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C NOM : DPERM
  7. C DESCRIPTION : Permutation (lignes et colonnes) d'une matrice Morse.
  8. C
  9. C
  10. C LANGAGE : FORTRAN 77
  11. C ADAPTATION : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  12. C mél : gounand@semt2.smts.cea.fr
  13. C AUTEUR :
  14. C Sparskit : a basic tool kit for sparse matrix computations
  15. C Version 2 (Youcef Saad)
  16. C -> URL : http://www.cs.umn.edu/Research/arpa/SPARSKIT/sparskit.html
  17. C
  18. C***********************************************************************
  19. INTEGER NROW,JA(*),IA(NROW+1),JAO(*),IAO(NROW+1),PERM(NROW),
  20. + QPERM(*),JOB
  21. REAL*8 A(*),AO(*)
  22. c-----------------------------------------------------------------------
  23. c This routine permutes the rows and columns of a matrix stored in CSR
  24. c format. i.e., it computes P A Q, where P, Q are permutation matrices.
  25. c P maps row i into row perm(i) and Q maps column j into column qperm(j):
  26. c a(i,j) becomes a(perm(i),qperm(j)) in new matrix
  27. c In the particular case where Q is the transpose of P (symmetric
  28. c permutation of A) then qperm is not needed.
  29. c note that qperm should be of length ncol (number of columns) but this
  30. c is not checked.
  31. c-----------------------------------------------------------------------
  32. c Y. Saad, Sep. 21 1989 / recoded Jan. 28 1991.
  33. c-----------------------------------------------------------------------
  34. c on entry:
  35. c----------
  36. c n = dimension of the matrix
  37. c a, ja,
  38. c ia = input matrix in a, ja, ia format
  39. c perm = integer array of length n containing the permutation arrays
  40. c for the rows: perm(i) is the destination of row i in the
  41. c permuted matrix -- also the destination of column i in case
  42. c permutation is symmetric (job .le. 2)
  43. c
  44. c qperm = same thing for the columns. This should be provided only
  45. c if job=3 or job=4, i.e., only in the case of a nonsymmetric
  46. c permutation of rows and columns. Otherwise qperm is a dummy
  47. c
  48. c job = integer indicating the work to be done:
  49. c * job = 1,2 permutation is symmetric Ao :== P * A * transp(P)
  50. c job = 1 permute a, ja, ia into ao, jao, iao
  51. c job = 2 permute matrix ignoring real values.
  52. c * job = 3,4 permutation is non-symmetric Ao :== P * A * Q
  53. c job = 3 permute a, ja, ia into ao, jao, iao
  54. c job = 4 permute matrix ignoring real values.
  55. c
  56. c on return:
  57. c-----------
  58. c ao, jao, iao = input matrix in a, ja, ia format
  59. c
  60. c in case job .eq. 2 or job .eq. 4, a and ao are never referred to
  61. c and can be dummy arguments.
  62. c Notes:
  63. c-------
  64. c 1) algorithm is in place (Faux ! vu que RPERM ne l'est pas)
  65. c 2) column indices may not be sorted on return even though they may be
  66. c on entry.
  67. c----------------------------------------------------------------------c
  68. c local variables
  69. INTEGER LOCJOB, MOD
  70. c
  71. c locjob indicates whether or not real values must be copied.
  72. c
  73. LOCJOB = MOD(JOB,2)
  74. c
  75. c permute rows first
  76. c
  77. CALL RPERM (NROW,A,JA,IA,AO,JAO,IAO,PERM,LOCJOB)
  78. c
  79. c then permute columns
  80. c
  81. LOCJOB = 0
  82. c
  83. IF (JOB .LE. 2) THEN
  84. CALL CPERM (NROW,AO,JAO,IAO,AO,JAO,IAO,PERM,LOCJOB)
  85. ELSE
  86. CALL CPERM (NROW,AO,JAO,IAO,AO,JAO,IAO,QPERM,LOCJOB)
  87. ENDIF
  88. c
  89. RETURN
  90. c-------end-of-dperm----------------------------------------------------
  91. c-----------------------------------------------------------------------
  92. END
  93.  
  94.  
  95.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales