source: trunk/LMDZ.COMMON/libf/misc/i1mach.F @ 3000

Last change on this file since 3000 was 1391, checked in by emillour, 10 years ago

Common dynamical core:
Updates in the dynamics to keeup up with updates in LMDZ5
(up to LMDZ5 trunk rev 2200):

  • compilation:
  • create_make_gcm : added processing of .f & .f90 files (not just .F and .F90)
  • makelmdz: add "mix" option for -io (ouptut with both IOIPSL and XIOS)
  • makelmdz_fcm: add "mix" option for -io
  • filtrez:
  • acc.F and eigen.F : add "implicit none" and variable declarations
  • bibio:
  • handle_err_m.F90: replace "stop" with call to abort_gcm()
  • i1mach.F, j4save.F: add "implicit none" and variable declarations
  • xercnt.F, xermsg.F, xerprn.F, xersve.F, xgetua.F: add "implicit none" and variable declarations
  • dyn3d_common:
  • disvert.F90 : added comments on meaning of "pa" variable
  • grid_atob.F : better control on level of default ouputs
  • infotrac.F90: update Earth-specific stuff (nqo water tracers)
  • interpre.F: correction on the size of input array w
  • juldate.F, massbar.F, ppm3d.F, ran1.F: add "implicit none" and variable declarations
  • sortvarc.F: code cleanup
  • iniacademic.F90: cleanup and extra sanity check.
  • dyn3d:
  • abort_gcm.F: additions for XIOS
  • conf_gcm.F90: transformed to free form from conf_gcm.F
  • gcm.F: added test to check that iphysiq is a multiple of iperiod
  • getparam.F90, guidz_mod.F: update from LMDZ5
  • integrd.F: replace stop with call_abort()
  • dyn3dpar:
  • abort_gcm.F: minor cleanup
  • gcm.F: added test to check that iphysiq is a multiple of iperiod
  • getparam.F90, guide_p_mod.F90: update from LMDZ5
  • integrd_p.F: abort with call_abort when there is negative surface pressure
  • leapfrog_p.F: add INCA specific stuff to keep up with current LMDZ5
  • conf_gcm.F90: transformed to free form from conf_gcm.F

EM

File size: 4.5 KB
Line 
1*DECK I1MACH
2      INTEGER FUNCTION I1MACH (I)
3      IMPLICIT NONE
4C***BEGIN PROLOGUE  I1MACH
5C***PURPOSE  Return integer machine dependent constants.
6C***LIBRARY   SLATEC
7C***CATEGORY  R1
8C***TYPE      INTEGER (I1MACH-I)
9C***KEYWORDS  MACHINE CONSTANTS
10C***AUTHOR  Fox, P. A., (Bell Labs)
11C           Hall, A. D., (Bell Labs)
12C           Schryer, N. L., (Bell Labs)
13C***DESCRIPTION
14C
15C   I1MACH can be used to obtain machine-dependent parameters for the
16C   local machine environment.  It is a function subprogram with one
17C   (input) argument and can be referenced as follows:
18C
19C        K = I1MACH(I)
20C
21C   where I=1,...,16.  The (output) value of K above is determined by
22C   the (input) value of I.  The results for various values of I are
23C   discussed below.
24C
25C   I/O unit numbers:
26C     I1MACH( 1) = the standard input unit.
27C     I1MACH( 2) = the standard output unit.
28C     I1MACH( 3) = the standard punch unit.
29C     I1MACH( 4) = the standard error message unit.
30C
31C   Words:
32C     I1MACH( 5) = the number of bits per integer storage unit.
33C     I1MACH( 6) = the number of characters per integer storage unit.
34C
35C   Integers:
36C     assume integers are represented in the S-digit, base-A form
37C
38C                sign ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) )
39C
40C                where 0 .LE. X(I) .LT. A for I=0,...,S-1.
41C     I1MACH( 7) = A, the base.
42C     I1MACH( 8) = S, the number of base-A digits.
43C     I1MACH( 9) = A**S - 1, the largest magnitude.
44C
45C   Floating-Point Numbers:
46C     Assume floating-point numbers are represented in the T-digit,
47C     base-B form
48C                sign (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
49C
50C                where 0 .LE. X(I) .LT. B for I=1,...,T,
51C                0 .LT. X(1), and EMIN .LE. E .LE. EMAX.
52C     I1MACH(10) = B, the base.
53C
54C   Single-Precision:
55C     I1MACH(11) = T, the number of base-B digits.
56C     I1MACH(12) = EMIN, the smallest exponent E.
57C     I1MACH(13) = EMAX, the largest exponent E.
58C
59C   Double-Precision:
60C     I1MACH(14) = T, the number of base-B digits.
61C     I1MACH(15) = EMIN, the smallest exponent E.
62C     I1MACH(16) = EMAX, the largest exponent E.
63C
64C   To alter this function for a particular environment, the desired
65C   set of DATA statements should be activated by removing the C from
66C   column 1.  Also, the values of I1MACH(1) - I1MACH(4) should be
67C   checked for consistency with the local operating system.
68C
69C***REFERENCES  P. A. Fox, A. D. Hall and N. L. Schryer, Framework for
70C                 a portable library, ACM Transactions on Mathematical
71C                 Software 4, 2 (June 1978), pp. 177-188.
72C***ROUTINES CALLED  (NONE)
73C***REVISION HISTORY  (YYMMDD)
74C   750101  DATE WRITTEN
75C   891012  Added VAX G-floating constants.  (WRB)
76C   891012  REVISION DATE from Version 3.2
77C   891214  Prologue converted to Version 4.0 format.  (BAB)
78C   900618  Added DEC RISC constants.  (WRB)
79C   900723  Added IBM RS 6000 constants.  (WRB)
80C   901009  Correct I1MACH(7) for IBM Mainframes. Should be 2 not 16.
81C           (RWC)
82C   910710  Added HP 730 constants.  (SMR)
83C   911114  Added Convex IEEE constants.  (WRB)
84C   920121  Added SUN -r8 compiler option constants.  (WRB)
85C   920229  Added Touchstone Delta i860 constants.  (WRB)
86C   920501  Reformatted the REFERENCES section.  (WRB)
87C   920625  Added Convex -p8 and -pd8 compiler option constants.
88C           (BKS, WRB)
89C   930201  Added DEC Alpha and SGI constants.  (RWC and WRB)
90C   930618  Corrected I1MACH(5) for Convex -p8 and -pd8 compiler
91C           options.  (DWL, RWC and WRB).
92C   100623  Use Fortran 95 intrinsic functions (Lionel GUEZ)
93C***END PROLOGUE  I1MACH
94C
95      INTEGER IMACH(16),OUTPUT
96      SAVE IMACH
97      EQUIVALENCE (IMACH(4),OUTPUT)
98      INTEGER I
99C***FIRST EXECUTABLE STATEMENT  I1MACH
100      IMACH( 1) =         5
101      IMACH( 2) =         6
102      IMACH( 3) =         6
103      IMACH( 4) =         6
104      IMACH( 5) =        bit_size(0)
105      IMACH( 6) =         IMACH( 5) / 8
106      IMACH( 7) =         radix(0)
107      IMACH( 8) =        digits(0)
108      IMACH( 9) =     huge(0)
109      IMACH(10) =         radix(0.)
110      IMACH(11) =        digits(0.)
111      IMACH(12) =      minexponent(0.)
112      IMACH(13) =       maxexponent(0.)
113      IMACH(14) =        digits(0d0)
114      IMACH(15) =      minexponent(0d0)
115      IMACH(16) =       maxexponent(0d0)
116      IF (I .LT. 1  .OR.  I .GT. 16) GO TO 10
117C
118      I1MACH = IMACH(I)
119      RETURN
120C
121   10 CONTINUE
122      WRITE (UNIT = OUTPUT, FMT = 9000)
123 9000 FORMAT ('1ERROR    1 IN I1MACH - I OUT OF BOUNDS')
124C
125C     CALL FDUMP
126C
127      STOP
128      END
Note: See TracBrowser for help on using the repository browser.