summaryrefslogtreecommitdiff
path: root/modules/randlib/src/fortran/genprm.f
blob: dd9dda3afbc091c393d4fb494a0efe5ad8da2e62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
      SUBROUTINE genprm(array,larray)
C**********************************************************************
C
C    SUBROUTINE GENPRM( ARRAY, LARRAY )
C               GENerate random PeRMutation of array
C
C
C                              Arguments
C
C
C     ARRAY <--> On output ARRAY is a random permutation of its
C                 value on input
C                         DOUBLE PRECISION ARRAY( LARRAY )
C
C     LARRAY <--> Length of ARRAY
C                         INTEGER LARRAY
C
C     Modification by Bruno to handle permutation of a double precision 
C     array (15/11/2001) and to handle the changes in ignuin
C
C**********************************************************************
      implicit none
C     .. Scalar Arguments ..
      INTEGER larray
C     ..
C     .. Array Arguments ..
      DOUBLE PRECISION array(larray)
C     ..
C     .. Local Scalars ..
      INTEGER i, iwhich
      DOUBLE PRECISION elt, llarray
C     ..
C     .. External Functions ..
      DOUBLE PRECISION ignuin
      EXTERNAL ignuin
C     ..
C     .. Executable Statements ..
      llarray = dble(larray)
      DO i = 1,larray
         iwhich = int(ignuin(dble(i),llarray))
         elt = array(iwhich)
         array(iwhich) = array(i)
         array(i) = elt
      END DO

      END