The TELEMAC-MASCARET system  trunk
double_to_integer.f
Go to the documentation of this file.
1 ! ****************************
2  SUBROUTINE double_to_integer
3 ! ****************************
4 !
5  &(x,ix,n,qt,nsum)
6 !
7 !***********************************************************************
8 ! BIEF V7P0 13/01/2014
9 !***********************************************************************
10 !
11 !brief Coding a double precision array as an I8 integer.
12 !
13 !history J-M HERVOUET (EDF R&D, LNHE)
14 !+ 13/01/2014
15 !+ V7P0
16 !+ First version.
17 !
18 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19 !| IX |<--| INTEGER ARRAY CODING THE REAL ARRAY
20 !| N |-->| NUMBER OF POINTS IN THE ARRAYS X AND IX
21 !| NSUM |-->| MAXIMUM NUMBER OF SUMS THAT WILL BE POSSIBLE
22 !| QT |<--| THE QUANTUM USED FOR CODING
23 !| X |-->| DOUBLE PRECISION ARRAY TO BE CODED
24 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 !
27  USE bief, ex_double_to_integer => double_to_integer
28 !
30  IMPLICIT NONE
31 !
32 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33 !
34  INTEGER , INTENT(IN) :: N,NSUM
35  INTEGER(KIND=K8), INTENT(INOUT) :: IX(n)
36  DOUBLE PRECISION, INTENT(IN) :: X(n)
37  DOUBLE PRECISION, INTENT(INOUT) :: QT
38 !
39 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
40 !
41  INTEGER I
42  INTEGER(KIND=K8) IMAX
43  DOUBLE PRECISION XMIN,XMAX,SURQT
44 !
45  INTRINSIC nint,max,abs
46 !
47 !-----------------------------------------------------------------------
48 !
49  CALL mini(xmin,i,x,n)
50  CALL maxi(xmax,i,x,n)
51 !
52  IF(ncsize.GT.1) THEN
53  xmin=p_min(xmin)
54  xmax=p_max(xmax)
55  ENDIF
56 !
57 ! WE WANT A RANGE CENTRED ON 0, THAT CONTAINS [XMIN,XMAX]
58 !
59  xmax=max(abs(xmin),abs(xmax))
60  imax=huge(imax)/nsum
61 !
62  qt=xmax/dble(imax)
63 !
64  IF(qt.EQ.0.d0) THEN
65  surqt=0.d0
66  ELSE
67  surqt=1.d0/qt
68  ENDIF
69 !
70 !-----------------------------------------------------------------------
71 ! CODING
72 !-----------------------------------------------------------------------
73 !
74  DO i=1,n
75  ix(i)=nint(x(i)*surqt)
76  ENDDO
77 !
78 !-----------------------------------------------------------------------
79 !
80  RETURN
81  END
subroutine mini(XMIN, IMIN, X, NPOIN)
Definition: mini.f:7
subroutine double_to_integer(X, IX, N, QT, NSUM)
subroutine maxi(XMAX, IMAX, X, NPOIN)
Definition: maxi.f:7
Definition: bief.f:3