[NDS32] Implment n10 pipeline.
[official-gcc.git] / gcc / fortran / intrinsic.texi
blobadea02a78e5d66c8d1d093f840744017c51b72ef
1 @ignore
2 Copyright (C) 2005-2018 Free Software Foundation, Inc.
3 This is part of the GNU Fortran manual.   
4 For copying conditions, see the file gfortran.texi.
6 Permission is granted to copy, distribute and/or modify this document
7 under the terms of the GNU Free Documentation License, Version 1.3 or
8 any later version published by the Free Software Foundation; with the
9 Invariant Sections being ``Funding Free Software'', the Front-Cover
10 Texts being (a) (see below), and with the Back-Cover Texts being (b)
11 (see below).  A copy of the license is included in the gfdl(7) man page.
14 Some basic guidelines for editing this document:
16   (1) The intrinsic procedures are to be listed in alphabetical order.
17   (2) The generic name is to be used.
18   (3) The specific names are included in the function index and in a
19       table at the end of the node (See ABS entry).
20   (4) Try to maintain the same style for each entry.
23 @end ignore
25 @tex
26 \gdef\acosd{\mathop{\rm acosd}\nolimits}
27 \gdef\asind{\mathop{\rm asind}\nolimits}
28 \gdef\atand{\mathop{\rm atand}\nolimits}
29 \gdef\acos{\mathop{\rm acos}\nolimits}
30 \gdef\asin{\mathop{\rm asin}\nolimits}
31 \gdef\atan{\mathop{\rm atan}\nolimits}
32 \gdef\acosh{\mathop{\rm acosh}\nolimits}
33 \gdef\asinh{\mathop{\rm asinh}\nolimits}
34 \gdef\atanh{\mathop{\rm atanh}\nolimits}
35 \gdef\cosd{\mathop{\rm cosd}\nolimits}
36 @end tex
39 @node Intrinsic Procedures
40 @chapter Intrinsic Procedures
41 @cindex intrinsic procedures
43 @menu
44 * Introduction:         Introduction to Intrinsics
45 * @code{ABORT}:         ABORT,     Abort the program     
46 * @code{ABS}:           ABS,       Absolute value     
47 * @code{ACCESS}:        ACCESS,    Checks file access modes
48 * @code{ACHAR}:         ACHAR,     Character in @acronym{ASCII} collating sequence
49 * @code{ACOS}:          ACOS,      Arccosine function
50 * @code{ACOSD}:         ACOSD,     Arccosine function, degrees
51 * @code{ACOSH}:         ACOSH,     Inverse hyperbolic cosine function
52 * @code{ADJUSTL}:       ADJUSTL,   Left adjust a string
53 * @code{ADJUSTR}:       ADJUSTR,   Right adjust a string
54 * @code{AIMAG}:         AIMAG,     Imaginary part of complex number
55 * @code{AINT}:          AINT,      Truncate to a whole number
56 * @code{ALARM}:         ALARM,     Set an alarm clock
57 * @code{ALL}:           ALL,       Determine if all values are true
58 * @code{ALLOCATED}:     ALLOCATED, Status of allocatable entity
59 * @code{AND}:           AND,       Bitwise logical AND
60 * @code{ANINT}:         ANINT,     Nearest whole number
61 * @code{ANY}:           ANY,       Determine if any values are true
62 * @code{ASIN}:          ASIN,      Arcsine function
63 * @code{ASIND}:         ASIND,     Arcsine function, degrees
64 * @code{ASINH}:         ASINH,     Inverse hyperbolic sine function
65 * @code{ASSOCIATED}:    ASSOCIATED, Status of a pointer or pointer/target pair
66 * @code{ATAN}:          ATAN,      Arctangent function
67 * @code{ATAND}:         ATAND,     Arctangent function, degrees
68 * @code{ATAN2}:         ATAN2,     Arctangent function
69 * @code{ATAN2D}:        ATAN2D,    Arctangent function, degrees
70 * @code{ATANH}:         ATANH,     Inverse hyperbolic tangent function
71 * @code{ATOMIC_ADD}:    ATOMIC_ADD, Atomic ADD operation
72 * @code{ATOMIC_AND}:    ATOMIC_AND, Atomic bitwise AND operation
73 * @code{ATOMIC_CAS}:    ATOMIC_CAS, Atomic compare and swap
74 * @code{ATOMIC_DEFINE}: ATOMIC_DEFINE, Setting a variable atomically
75 * @code{ATOMIC_FETCH_ADD}: ATOMIC_FETCH_ADD, Atomic ADD operation with prior fetch
76 * @code{ATOMIC_FETCH_AND}: ATOMIC_FETCH_AND, Atomic bitwise AND operation with prior fetch
77 * @code{ATOMIC_FETCH_OR}: ATOMIC_FETCH_OR, Atomic bitwise OR operation with prior fetch
78 * @code{ATOMIC_FETCH_XOR}: ATOMIC_FETCH_XOR, Atomic bitwise XOR operation with prior fetch
79 * @code{ATOMIC_OR}:     ATOMIC_OR, Atomic bitwise OR operation
80 * @code{ATOMIC_REF}:    ATOMIC_REF, Obtaining the value of a variable atomically
81 * @code{ATOMIC_XOR}:    ATOMIC_XOR, Atomic bitwise OR operation
82 * @code{BACKTRACE}:     BACKTRACE, Show a backtrace
83 * @code{BESSEL_J0}:     BESSEL_J0, Bessel function of the first kind of order 0
84 * @code{BESSEL_J1}:     BESSEL_J1, Bessel function of the first kind of order 1
85 * @code{BESSEL_JN}:     BESSEL_JN, Bessel function of the first kind
86 * @code{BESSEL_Y0}:     BESSEL_Y0, Bessel function of the second kind of order 0
87 * @code{BESSEL_Y1}:     BESSEL_Y1, Bessel function of the second kind of order 1
88 * @code{BESSEL_YN}:     BESSEL_YN, Bessel function of the second kind
89 * @code{BGE}:           BGE,       Bitwise greater than or equal to
90 * @code{BGT}:           BGT,       Bitwise greater than
91 * @code{BIT_SIZE}:      BIT_SIZE,  Bit size inquiry function
92 * @code{BLE}:           BLE,       Bitwise less than or equal to
93 * @code{BLT}:           BLT,       Bitwise less than
94 * @code{BTEST}:         BTEST,     Bit test function
95 * @code{C_ASSOCIATED}:  C_ASSOCIATED, Status of a C pointer
96 * @code{C_F_POINTER}:   C_F_POINTER, Convert C into Fortran pointer
97 * @code{C_F_PROCPOINTER}: C_F_PROCPOINTER, Convert C into Fortran procedure pointer
98 * @code{C_FUNLOC}:      C_FUNLOC,  Obtain the C address of a procedure
99 * @code{C_LOC}:         C_LOC,     Obtain the C address of an object
100 * @code{C_SIZEOF}:      C_SIZEOF,  Size in bytes of an expression
101 * @code{CEILING}:       CEILING,   Integer ceiling function
102 * @code{CHAR}:          CHAR,      Integer-to-character conversion function
103 * @code{CHDIR}:         CHDIR,     Change working directory
104 * @code{CHMOD}:         CHMOD,     Change access permissions of files
105 * @code{CMPLX}:         CMPLX,     Complex conversion function
106 * @code{CO_BROADCAST}:  CO_BROADCAST, Copy a value to all images the current set of images
107 * @code{CO_MAX}:        CO_MAX,    Maximal value on the current set of images
108 * @code{CO_MIN}:        CO_MIN,    Minimal value on the current set of images
109 * @code{CO_REDUCE}:     CO_REDUCE, Reduction of values on the current set of images
110 * @code{CO_SUM}:        CO_SUM,    Sum of values on the current set of images
111 * @code{COMMAND_ARGUMENT_COUNT}: COMMAND_ARGUMENT_COUNT, Get number of command line arguments
112 * @code{COMPILER_OPTIONS}: COMPILER_OPTIONS, Options passed to the compiler
113 * @code{COMPILER_VERSION}: COMPILER_VERSION, Compiler version string
114 * @code{COMPLEX}:       COMPLEX,   Complex conversion function
115 * @code{CONJG}:         CONJG,     Complex conjugate function
116 * @code{COS}:           COS,       Cosine function
117 * @code{COSD}:          COSD,      Cosine function, degrees
118 * @code{COSH}:          COSH,      Hyperbolic cosine function
119 * @code{COTAN}:         COTAN,     Cotangent function
120 * @code{COTAND}:        COTAND,    Cotangent function, degrees
121 * @code{COUNT}:         COUNT,     Count occurrences of TRUE in an array
122 * @code{CPU_TIME}:      CPU_TIME,  CPU time subroutine
123 * @code{CSHIFT}:        CSHIFT,    Circular shift elements of an array
124 * @code{CTIME}:         CTIME,     Subroutine (or function) to convert a time into a string
125 * @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine
126 * @code{DBLE}:          DBLE,      Double precision conversion function
127 * @code{DCMPLX}:        DCMPLX,    Double complex conversion function
128 * @code{DIGITS}:        DIGITS,    Significant digits function
129 * @code{DIM}:           DIM,       Positive difference
130 * @code{DOT_PRODUCT}:   DOT_PRODUCT, Dot product function
131 * @code{DPROD}:         DPROD,     Double product function
132 * @code{DREAL}:         DREAL,     Double real part function
133 * @code{DSHIFTL}:       DSHIFTL,   Combined left shift
134 * @code{DSHIFTR}:       DSHIFTR,   Combined right shift
135 * @code{DTIME}:         DTIME,     Execution time subroutine (or function)
136 * @code{EOSHIFT}:       EOSHIFT,   End-off shift elements of an array
137 * @code{EPSILON}:       EPSILON,   Epsilon function
138 * @code{ERF}:           ERF,       Error function
139 * @code{ERFC}:          ERFC,      Complementary error function
140 * @code{ERFC_SCALED}:   ERFC_SCALED, Exponentially-scaled complementary error function
141 * @code{ETIME}:         ETIME,     Execution time subroutine (or function)
142 * @code{EVENT_QUERY}: EVENT_QUERY, Query whether a coarray event has occurred
143 * @code{EXECUTE_COMMAND_LINE}: EXECUTE_COMMAND_LINE, Execute a shell command
144 * @code{EXIT}:          EXIT,      Exit the program with status.
145 * @code{EXP}:           EXP,       Exponential function
146 * @code{EXPONENT}:      EXPONENT,  Exponent function
147 * @code{EXTENDS_TYPE_OF}: EXTENDS_TYPE_OF,  Query dynamic type for extension
148 * @code{FDATE}:         FDATE,     Subroutine (or function) to get the current time as a string
149 * @code{FGET}:          FGET,      Read a single character in stream mode from stdin
150 * @code{FGETC}:         FGETC,     Read a single character in stream mode
151 * @code{FLOOR}:         FLOOR,     Integer floor function
152 * @code{FLUSH}:         FLUSH,     Flush I/O unit(s)
153 * @code{FNUM}:          FNUM,      File number function
154 * @code{FPUT}:          FPUT,      Write a single character in stream mode to stdout
155 * @code{FPUTC}:         FPUTC,     Write a single character in stream mode
156 * @code{FRACTION}:      FRACTION,  Fractional part of the model representation
157 * @code{FREE}:          FREE,      Memory de-allocation subroutine
158 * @code{FSEEK}:         FSEEK,     Low level file positioning subroutine
159 * @code{FSTAT}:         FSTAT,     Get file status
160 * @code{FTELL}:         FTELL,     Current stream position
161 * @code{GAMMA}:         GAMMA,     Gamma function
162 * @code{GERROR}:        GERROR,    Get last system error message
163 * @code{GETARG}:        GETARG,    Get command line arguments
164 * @code{GET_COMMAND}:   GET_COMMAND, Get the entire command line
165 * @code{GET_COMMAND_ARGUMENT}: GET_COMMAND_ARGUMENT, Get command line arguments
166 * @code{GETCWD}:        GETCWD,    Get current working directory
167 * @code{GETENV}:        GETENV,    Get an environmental variable
168 * @code{GET_ENVIRONMENT_VARIABLE}: GET_ENVIRONMENT_VARIABLE, Get an environmental variable
169 * @code{GETGID}:        GETGID,    Group ID function
170 * @code{GETLOG}:        GETLOG,    Get login name
171 * @code{GETPID}:        GETPID,    Process ID function
172 * @code{GETUID}:        GETUID,    User ID function
173 * @code{GMTIME}:        GMTIME,    Convert time to GMT info
174 * @code{HOSTNM}:        HOSTNM,    Get system host name
175 * @code{HUGE}:          HUGE,      Largest number of a kind
176 * @code{HYPOT}:         HYPOT,     Euclidean distance function
177 * @code{IACHAR}:        IACHAR,    Code in @acronym{ASCII} collating sequence
178 * @code{IALL}:          IALL,      Bitwise AND of array elements
179 * @code{IAND}:          IAND,      Bitwise logical and
180 * @code{IANY}:          IANY,      Bitwise OR of array elements
181 * @code{IARGC}:         IARGC,     Get the number of command line arguments
182 * @code{IBCLR}:         IBCLR,     Clear bit
183 * @code{IBITS}:         IBITS,     Bit extraction
184 * @code{IBSET}:         IBSET,     Set bit
185 * @code{ICHAR}:         ICHAR,     Character-to-integer conversion function
186 * @code{IDATE}:         IDATE,     Current local time (day/month/year)
187 * @code{IEOR}:          IEOR,      Bitwise logical exclusive or
188 * @code{IERRNO}:        IERRNO,    Function to get the last system error number
189 * @code{IMAGE_INDEX}:   IMAGE_INDEX, Cosubscript to image index conversion
190 * @code{INDEX}:         INDEX intrinsic, Position of a substring within a string
191 * @code{INT}:           INT,       Convert to integer type
192 * @code{INT2}:          INT2,      Convert to 16-bit integer type
193 * @code{INT8}:          INT8,      Convert to 64-bit integer type
194 * @code{IOR}:           IOR,       Bitwise logical or
195 * @code{IPARITY}:       IPARITY,   Bitwise XOR of array elements
196 * @code{IRAND}:         IRAND,     Integer pseudo-random number
197 * @code{IS_IOSTAT_END}:  IS_IOSTAT_END, Test for end-of-file value
198 * @code{IS_IOSTAT_EOR}:  IS_IOSTAT_EOR, Test for end-of-record value
199 * @code{ISATTY}:        ISATTY,    Whether a unit is a terminal device
200 * @code{ISHFT}:         ISHFT,     Shift bits
201 * @code{ISHFTC}:        ISHFTC,    Shift bits circularly
202 * @code{ISNAN}:         ISNAN,     Tests for a NaN
203 * @code{ITIME}:         ITIME,     Current local time (hour/minutes/seconds)
204 * @code{KILL}:          KILL,      Send a signal to a process
205 * @code{KIND}:          KIND,      Kind of an entity
206 * @code{LBOUND}:        LBOUND,    Lower dimension bounds of an array
207 * @code{LCOBOUND}:      LCOBOUND,  Lower codimension bounds of an array
208 * @code{LEADZ}:         LEADZ,     Number of leading zero bits of an integer
209 * @code{LEN}:           LEN,       Length of a character entity
210 * @code{LEN_TRIM}:      LEN_TRIM,  Length of a character entity without trailing blank characters
211 * @code{LGE}:           LGE,       Lexical greater than or equal
212 * @code{LGT}:           LGT,       Lexical greater than
213 * @code{LINK}:          LINK,      Create a hard link
214 * @code{LLE}:           LLE,       Lexical less than or equal
215 * @code{LLT}:           LLT,       Lexical less than
216 * @code{LNBLNK}:        LNBLNK,    Index of the last non-blank character in a string
217 * @code{LOC}:           LOC,       Returns the address of a variable
218 * @code{LOG}:           LOG,       Logarithm function
219 * @code{LOG10}:         LOG10,     Base 10 logarithm function 
220 * @code{LOG_GAMMA}:     LOG_GAMMA, Logarithm of the Gamma function
221 * @code{LOGICAL}:       LOGICAL,   Convert to logical type
222 * @code{LONG}:          LONG,      Convert to integer type
223 * @code{LSHIFT}:        LSHIFT,    Left shift bits
224 * @code{LSTAT}:         LSTAT,     Get file status
225 * @code{LTIME}:         LTIME,     Convert time to local time info
226 * @code{MALLOC}:        MALLOC,    Dynamic memory allocation function
227 * @code{MASKL}:         MASKL,     Left justified mask
228 * @code{MASKR}:         MASKR,     Right justified mask
229 * @code{MATMUL}:        MATMUL,    matrix multiplication
230 * @code{MAX}:           MAX,       Maximum value of an argument list
231 * @code{MAXEXPONENT}:   MAXEXPONENT, Maximum exponent of a real kind
232 * @code{MAXLOC}:        MAXLOC,    Location of the maximum value within an array
233 * @code{MAXVAL}:        MAXVAL,    Maximum value of an array
234 * @code{MCLOCK}:        MCLOCK,    Time function
235 * @code{MCLOCK8}:       MCLOCK8,   Time function (64-bit)
236 * @code{MERGE}:         MERGE,     Merge arrays
237 * @code{MERGE_BITS}:    MERGE_BITS, Merge of bits under mask
238 * @code{MIN}:           MIN,       Minimum value of an argument list
239 * @code{MINEXPONENT}:   MINEXPONENT, Minimum exponent of a real kind
240 * @code{MINLOC}:        MINLOC,    Location of the minimum value within an array
241 * @code{MINVAL}:        MINVAL,    Minimum value of an array
242 * @code{MOD}:           MOD,       Remainder function
243 * @code{MODULO}:        MODULO,    Modulo function
244 * @code{MOVE_ALLOC}:    MOVE_ALLOC, Move allocation from one object to another
245 * @code{MVBITS}:        MVBITS,    Move bits from one integer to another
246 * @code{NEAREST}:       NEAREST,   Nearest representable number
247 * @code{NEW_LINE}:      NEW_LINE,  New line character
248 * @code{NINT}:          NINT,      Nearest whole number
249 * @code{NORM2}:         NORM2,     Euclidean vector norm
250 * @code{NOT}:           NOT,       Logical negation
251 * @code{NULL}:          NULL,      Function that returns an disassociated pointer
252 * @code{NUM_IMAGES}:    NUM_IMAGES, Number of images
253 * @code{OR}:            OR,        Bitwise logical OR
254 * @code{PACK}:          PACK,      Pack an array into an array of rank one
255 * @code{PARITY}:        PARITY,    Reduction with exclusive OR
256 * @code{PERROR}:        PERROR,    Print system error message
257 * @code{POPCNT}:        POPCNT,    Number of bits set
258 * @code{POPPAR}:        POPPAR,    Parity of the number of bits set
259 * @code{PRECISION}:     PRECISION, Decimal precision of a real kind
260 * @code{PRESENT}:       PRESENT,   Determine whether an optional dummy argument is specified
261 * @code{PRODUCT}:       PRODUCT,   Product of array elements
262 * @code{RADIX}:         RADIX,     Base of a data model
263 * @code{RAN}:           RAN,       Real pseudo-random number
264 * @code{RAND}:          RAND,      Real pseudo-random number
265 * @code{RANDOM_NUMBER}: RANDOM_NUMBER, Pseudo-random number
266 * @code{RANDOM_SEED}:   RANDOM_SEED, Initialize a pseudo-random number sequence
267 * @code{RANGE}:         RANGE,     Decimal exponent range
268 * @code{RANK} :         RANK,      Rank of a data object
269 * @code{REAL}:          REAL,      Convert to real type 
270 * @code{RENAME}:        RENAME,    Rename a file
271 * @code{REPEAT}:        REPEAT,    Repeated string concatenation
272 * @code{RESHAPE}:       RESHAPE,   Function to reshape an array
273 * @code{RRSPACING}:     RRSPACING, Reciprocal of the relative spacing
274 * @code{RSHIFT}:        RSHIFT,    Right shift bits
275 * @code{SAME_TYPE_AS}:  SAME_TYPE_AS,  Query dynamic types for equality
276 * @code{SCALE}:         SCALE,     Scale a real value
277 * @code{SCAN}:          SCAN,      Scan a string for the presence of a set of characters
278 * @code{SECNDS}:        SECNDS,    Time function
279 * @code{SECOND}:        SECOND,    CPU time function
280 * @code{SELECTED_CHAR_KIND}: SELECTED_CHAR_KIND,  Choose character kind
281 * @code{SELECTED_INT_KIND}: SELECTED_INT_KIND,  Choose integer kind
282 * @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND,  Choose real kind
283 * @code{SET_EXPONENT}:  SET_EXPONENT, Set the exponent of the model
284 * @code{SHAPE}:         SHAPE,     Determine the shape of an array
285 * @code{SHIFTA}:        SHIFTA,    Right shift with fill
286 * @code{SHIFTL}:        SHIFTL,    Left shift
287 * @code{SHIFTR}:        SHIFTR,    Right shift
288 * @code{SIGN}:          SIGN,      Sign copying function
289 * @code{SIGNAL}:        SIGNAL,    Signal handling subroutine (or function)
290 * @code{SIN}:           SIN,       Sine function
291 * @code{SIND}:          SIND,      Sine function, degrees
292 * @code{SINH}:          SINH,      Hyperbolic sine function
293 * @code{SIZE}:          SIZE,      Function to determine the size of an array
294 * @code{SIZEOF}:        SIZEOF,    Determine the size in bytes of an expression
295 * @code{SLEEP}:         SLEEP,     Sleep for the specified number of seconds
296 * @code{SPACING}:       SPACING,   Smallest distance between two numbers of a given type
297 * @code{SPREAD}:        SPREAD,    Add a dimension to an array 
298 * @code{SQRT}:          SQRT,      Square-root function
299 * @code{SRAND}:         SRAND,     Reinitialize the random number generator
300 * @code{STAT}:          STAT,      Get file status
301 * @code{STORAGE_SIZE}:  STORAGE_SIZE, Storage size in bits
302 * @code{SUM}:           SUM,       Sum of array elements
303 * @code{SYMLNK}:        SYMLNK,    Create a symbolic link
304 * @code{SYSTEM}:        SYSTEM,    Execute a shell command
305 * @code{SYSTEM_CLOCK}:  SYSTEM_CLOCK, Time function
306 * @code{TAN}:           TAN,       Tangent function
307 * @code{TAND}:          TAND,      Tangent function, degrees
308 * @code{TANH}:          TANH,      Hyperbolic tangent function
309 * @code{THIS_IMAGE}:    THIS_IMAGE, Cosubscript index of this image
310 * @code{TIME}:          TIME,      Time function
311 * @code{TIME8}:         TIME8,     Time function (64-bit)
312 * @code{TINY}:          TINY,      Smallest positive number of a real kind
313 * @code{TRAILZ}:        TRAILZ,    Number of trailing zero bits of an integer
314 * @code{TRANSFER}:      TRANSFER,  Transfer bit patterns
315 * @code{TRANSPOSE}:     TRANSPOSE, Transpose an array of rank two
316 * @code{TRIM}:          TRIM,      Remove trailing blank characters of a string
317 * @code{TTYNAM}:        TTYNAM,    Get the name of a terminal device.
318 * @code{UBOUND}:        UBOUND,    Upper dimension bounds of an array
319 * @code{UCOBOUND}:      UCOBOUND,  Upper codimension bounds of an array
320 * @code{UMASK}:         UMASK,     Set the file creation mask
321 * @code{UNLINK}:        UNLINK,    Remove a file from the file system
322 * @code{UNPACK}:        UNPACK,    Unpack an array of rank one into an array
323 * @code{VERIFY}:        VERIFY,    Scan a string for the absence of a set of characters
324 * @code{XOR}:           XOR,       Bitwise logical exclusive or
325 @end menu
327 @node Introduction to Intrinsics
328 @section Introduction to intrinsic procedures
330 The intrinsic procedures provided by GNU Fortran include all of the
331 intrinsic procedures required by the Fortran 95 standard, a set of
332 intrinsic procedures for backwards compatibility with G77, and a
333 selection of intrinsic procedures from the Fortran 2003 and Fortran 2008
334 standards.  Any conflict between a description here and a description in
335 either the Fortran 95 standard, the Fortran 2003 standard or the Fortran
336 2008 standard is unintentional, and the standard(s) should be considered
337 authoritative.
339 The enumeration of the @code{KIND} type parameter is processor defined in
340 the Fortran 95 standard.  GNU Fortran defines the default integer type and
341 default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)},
342 respectively.  The standard mandates that both data types shall have
343 another kind, which have more precision.  On typical target architectures
344 supported by @command{gfortran}, this kind type parameter is @code{KIND=8}.
345 Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent.
346 In the description of generic intrinsic procedures, the kind type parameter
347 will be specified by @code{KIND=*}, and in the description of specific
348 names for an intrinsic procedure the kind type parameter will be explicitly
349 given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}).  Finally, for
350 brevity the optional @code{KIND=} syntax will be omitted.
352 Many of the intrinsic procedures take one or more optional arguments.
353 This document follows the convention used in the Fortran 95 standard,
354 and denotes such arguments by square brackets.
356 GNU Fortran offers the @option{-std=f95} and @option{-std=gnu} options,
357 which can be used to restrict the set of intrinsic procedures to a 
358 given standard.  By default, @command{gfortran} sets the @option{-std=gnu}
359 option, and so all intrinsic procedures described here are accepted.  There
360 is one caveat.  For a select group of intrinsic procedures, @command{g77}
361 implemented both a function and a subroutine.  Both classes 
362 have been implemented in @command{gfortran} for backwards compatibility
363 with @command{g77}.  It is noted here that these functions and subroutines
364 cannot be intermixed in a given subprogram.  In the descriptions that follow,
365 the applicable standard for each intrinsic procedure is noted.
369 @node ABORT
370 @section @code{ABORT} --- Abort the program
371 @fnindex ABORT
372 @cindex program termination, with core dump
373 @cindex terminate program, with core dump
374 @cindex core, dump
376 @table @asis
377 @item @emph{Description}:
378 @code{ABORT} causes immediate termination of the program.  On operating
379 systems that support a core dump, @code{ABORT} will produce a core dump.
380 It will also print a backtrace, unless @code{-fno-backtrace} is given.
382 @item @emph{Standard}:
383 GNU extension
385 @item @emph{Class}:
386 Subroutine
388 @item @emph{Syntax}:
389 @code{CALL ABORT}
391 @item @emph{Return value}:
392 Does not return.
394 @item @emph{Example}:
395 @smallexample
396 program test_abort
397   integer :: i = 1, j = 2
398   if (i /= j) call abort
399 end program test_abort
400 @end smallexample
402 @item @emph{See also}:
403 @ref{EXIT}, @ref{KILL}, @ref{BACKTRACE}
405 @end table
409 @node ABS
410 @section @code{ABS} --- Absolute value
411 @fnindex ABS
412 @fnindex CABS
413 @fnindex DABS
414 @fnindex IABS
415 @fnindex ZABS
416 @fnindex CDABS
417 @fnindex BABS
418 @fnindex IIABS
419 @fnindex JIABS
420 @fnindex KIABS
421 @cindex absolute value
423 @table @asis
424 @item @emph{Description}:
425 @code{ABS(A)} computes the absolute value of @code{A}.
427 @item @emph{Standard}:
428 Fortran 77 and later, has overloads that are GNU extensions
430 @item @emph{Class}:
431 Elemental function
433 @item @emph{Syntax}:
434 @code{RESULT = ABS(A)}
436 @item @emph{Arguments}:
437 @multitable @columnfractions .15 .70
438 @item @var{A} @tab The type of the argument shall be an @code{INTEGER},
439 @code{REAL}, or @code{COMPLEX}.
440 @end multitable
442 @item @emph{Return value}:
443 The return value is of the same type and
444 kind as the argument except the return value is @code{REAL} for a
445 @code{COMPLEX} argument.
447 @item @emph{Example}:
448 @smallexample
449 program test_abs
450   integer :: i = -1
451   real :: x = -1.e0
452   complex :: z = (-1.e0,0.e0)
453   i = abs(i)
454   x = abs(x)
455   x = abs(z)
456 end program test_abs
457 @end smallexample
459 @item @emph{Specific names}:
460 @multitable @columnfractions .20 .20 .20 .25
461 @item Name            @tab Argument            @tab Return type       @tab Standard
462 @item @code{ABS(A)}   @tab @code{REAL(4) A}    @tab @code{REAL(4)}    @tab Fortran 77 and later
463 @item @code{CABS(A)}  @tab @code{COMPLEX(4) A} @tab @code{REAL(4)}    @tab Fortran 77 and later
464 @item @code{DABS(A)}  @tab @code{REAL(8) A}    @tab @code{REAL(8)}    @tab Fortran 77 and later
465 @item @code{IABS(A)}  @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab Fortran 77 and later
466 @item @code{BABS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
467 @item @code{IIABS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
468 @item @code{JIABS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
469 @item @code{KIABS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
470 @item @code{ZABS(A)}  @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
471 @item @code{CDABS(A)} @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
472 @end multitable
473 @end table
477 @node ACCESS
478 @section @code{ACCESS} --- Checks file access modes
479 @fnindex ACCESS
480 @cindex file system, access mode
482 @table @asis
483 @item @emph{Description}:
484 @code{ACCESS(NAME, MODE)} checks whether the file @var{NAME} 
485 exists, is readable, writable or executable. Except for the
486 executable check, @code{ACCESS} can be replaced by
487 Fortran 95's @code{INQUIRE}.
489 @item @emph{Standard}:
490 GNU extension
492 @item @emph{Class}:
493 Inquiry function
495 @item @emph{Syntax}:
496 @code{RESULT = ACCESS(NAME, MODE)}
498 @item @emph{Arguments}:
499 @multitable @columnfractions .15 .70
500 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
501 file name. Tailing blank are ignored unless the character @code{achar(0)}
502 is present, then all characters up to and excluding @code{achar(0)} are
503 used as file name.
504 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind with the
505 file access mode, may be any concatenation of @code{"r"} (readable),
506 @code{"w"} (writable) and @code{"x"} (executable), or @code{" "} to check
507 for existence.
508 @end multitable
510 @item @emph{Return value}:
511 Returns a scalar @code{INTEGER}, which is @code{0} if the file is
512 accessible in the given mode; otherwise or if an invalid argument
513 has been given for @code{MODE} the value @code{1} is returned.
515 @item @emph{Example}:
516 @smallexample
517 program access_test
518   implicit none
519   character(len=*), parameter :: file  = 'test.dat'
520   character(len=*), parameter :: file2 = 'test.dat  '//achar(0)
521   if(access(file,' ') == 0) print *, trim(file),' is exists'
522   if(access(file,'r') == 0) print *, trim(file),' is readable'
523   if(access(file,'w') == 0) print *, trim(file),' is writable'
524   if(access(file,'x') == 0) print *, trim(file),' is executable'
525   if(access(file2,'rwx') == 0) &
526     print *, trim(file2),' is readable, writable and executable'
527 end program access_test
528 @end smallexample
529 @item @emph{Specific names}:
530 @item @emph{See also}:
532 @end table
536 @node ACHAR
537 @section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence 
538 @fnindex ACHAR
539 @cindex @acronym{ASCII} collating sequence
540 @cindex collating sequence, @acronym{ASCII}
542 @table @asis
543 @item @emph{Description}:
544 @code{ACHAR(I)} returns the character located at position @code{I}
545 in the @acronym{ASCII} collating sequence.
547 @item @emph{Standard}:
548 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
550 @item @emph{Class}:
551 Elemental function
553 @item @emph{Syntax}:
554 @code{RESULT = ACHAR(I [, KIND])}
556 @item @emph{Arguments}:
557 @multitable @columnfractions .15 .70
558 @item @var{I}    @tab The type shall be @code{INTEGER}.
559 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
560 expression indicating the kind parameter of the result.
561 @end multitable
563 @item @emph{Return value}:
564 The return value is of type @code{CHARACTER} with a length of one.
565 If the @var{KIND} argument is present, the return value is of the
566 specified kind and of the default kind otherwise.
568 @item @emph{Example}:
569 @smallexample
570 program test_achar
571   character c
572   c = achar(32)
573 end program test_achar
574 @end smallexample
576 @item @emph{Note}:
577 See @ref{ICHAR} for a discussion of converting between numerical values
578 and formatted string representations.
580 @item @emph{See also}:
581 @ref{CHAR}, @ref{IACHAR}, @ref{ICHAR}
583 @end table
587 @node ACOS
588 @section @code{ACOS} --- Arccosine function 
589 @fnindex ACOS
590 @fnindex DACOS
591 @cindex trigonometric function, cosine, inverse
592 @cindex cosine, inverse
594 @table @asis
595 @item @emph{Description}:
596 @code{ACOS(X)} computes the arccosine of @var{X} (inverse of @code{COS(X)}).
598 @item @emph{Standard}:
599 Fortran 77 and later, for a complex argument Fortran 2008 or later
601 @item @emph{Class}:
602 Elemental function
604 @item @emph{Syntax}:
605 @code{RESULT = ACOS(X)}
607 @item @emph{Arguments}:
608 @multitable @columnfractions .15 .70
609 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
610 less than or equal to one - or the type shall be @code{COMPLEX}.
611 @end multitable
613 @item @emph{Return value}:
614 The return value is of the same type and kind as @var{X}.
615 The real part of the result is in radians and lies in the range
616 @math{0 \leq \Re \acos(x) \leq \pi}.
618 @item @emph{Example}:
619 @smallexample
620 program test_acos
621   real(8) :: x = 0.866_8
622   x = acos(x)
623 end program test_acos
624 @end smallexample
626 @item @emph{Specific names}:
627 @multitable @columnfractions .20 .20 .20 .25
628 @item Name            @tab Argument         @tab Return type     @tab Standard
629 @item @code{ACOS(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}  @tab Fortran 77 and later
630 @item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}  @tab Fortran 77 and later
631 @end multitable
633 @item @emph{See also}:
634 Inverse function: @ref{COS}
635 Degrees function: @ref{ACOSD}
637 @end table
641 @node ACOSD
642 @section @code{ACOSD} --- Arccosine function, degrees
643 @fnindex ACOSD
644 @fnindex DACOSD
645 @cindex trigonometric function, cosine, inverse, degrees
646 @cindex cosine, inverse, degrees
648 @table @asis
649 @item @emph{Description}:
650 @code{ACOSD(X)} computes the arccosine of @var{X} in degrees (inverse of
651 @code{COSD(X)}).
653 This function is for compatibility only and should be avoided in favor of
654 standard constructs wherever possible.
656 @item @emph{Standard}:
657 GNU Extension, enabled with @option{-fdec-math}
659 @item @emph{Class}:
660 Elemental function
662 @item @emph{Syntax}:
663 @code{RESULT = ACOSD(X)}
665 @item @emph{Arguments}:
666 @multitable @columnfractions .15 .70
667 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
668 less than or equal to one - or the type shall be @code{COMPLEX}.
669 @end multitable
671 @item @emph{Return value}:
672 The return value is of the same type and kind as @var{X}.
673 The real part of the result is in degrees and lies in the range
674 @math{0 \leq \Re \acos(x) \leq 180}.
676 @item @emph{Example}:
677 @smallexample
678 program test_acosd
679   real(8) :: x = 0.866_8
680   x = acosd(x)
681 end program test_acosd
682 @end smallexample
684 @item @emph{Specific names}:
685 @multitable @columnfractions .20 .20 .20 .25
686 @item Name            @tab Argument         @tab Return type     @tab Standard
687 @item @code{ACOSD(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}  @tab GNU Extension
688 @item @code{DACOSD(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}  @tab GNU Extension
689 @end multitable
691 @item @emph{See also}:
692 Inverse function: @ref{COSD}
693 Radians function: @ref{ACOS}
695 @end table
699 @node ACOSH
700 @section @code{ACOSH} --- Inverse hyperbolic cosine function
701 @fnindex ACOSH
702 @fnindex DACOSH
703 @cindex area hyperbolic cosine
704 @cindex inverse hyperbolic cosine
705 @cindex hyperbolic function, cosine, inverse
706 @cindex cosine, hyperbolic, inverse
708 @table @asis
709 @item @emph{Description}:
710 @code{ACOSH(X)} computes the inverse hyperbolic cosine of @var{X}.
712 @item @emph{Standard}:
713 Fortran 2008 and later
715 @item @emph{Class}:
716 Elemental function
718 @item @emph{Syntax}:
719 @code{RESULT = ACOSH(X)}
721 @item @emph{Arguments}:
722 @multitable @columnfractions .15 .70
723 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
724 @end multitable
726 @item @emph{Return value}:
727 The return value has the same type and kind as @var{X}. If @var{X} is
728 complex, the imaginary part of the result is in radians and lies between
729 @math{ 0 \leq \Im \acosh(x) \leq \pi}.
731 @item @emph{Example}:
732 @smallexample
733 PROGRAM test_acosh
734   REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)
735   WRITE (*,*) ACOSH(x)
736 END PROGRAM
737 @end smallexample
739 @item @emph{Specific names}:
740 @multitable @columnfractions .20 .20 .20 .25
741 @item Name             @tab Argument          @tab Return type       @tab Standard
742 @item @code{DACOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
743 @end multitable
745 @item @emph{See also}:
746 Inverse function: @ref{COSH}
747 @end table
751 @node ADJUSTL
752 @section @code{ADJUSTL} --- Left adjust a string 
753 @fnindex ADJUSTL
754 @cindex string, adjust left
755 @cindex adjust string
757 @table @asis
758 @item @emph{Description}:
759 @code{ADJUSTL(STRING)} will left adjust a string by removing leading spaces.
760 Spaces are inserted at the end of the string as needed.
762 @item @emph{Standard}:
763 Fortran 90 and later
765 @item @emph{Class}:
766 Elemental function
768 @item @emph{Syntax}:
769 @code{RESULT = ADJUSTL(STRING)}
771 @item @emph{Arguments}:
772 @multitable @columnfractions .15 .70
773 @item @var{STRING} @tab The type shall be @code{CHARACTER}.
774 @end multitable
776 @item @emph{Return value}:
777 The return value is of type @code{CHARACTER} and of the same kind as
778 @var{STRING} where leading spaces are removed and the same number of
779 spaces are inserted on the end of @var{STRING}.
781 @item @emph{Example}:
782 @smallexample
783 program test_adjustl
784   character(len=20) :: str = '   gfortran'
785   str = adjustl(str)
786   print *, str
787 end program test_adjustl
788 @end smallexample
790 @item @emph{See also}:
791 @ref{ADJUSTR}, @ref{TRIM}
792 @end table
796 @node ADJUSTR
797 @section @code{ADJUSTR} --- Right adjust a string 
798 @fnindex ADJUSTR
799 @cindex string, adjust right
800 @cindex adjust string
802 @table @asis
803 @item @emph{Description}:
804 @code{ADJUSTR(STRING)} will right adjust a string by removing trailing spaces.
805 Spaces are inserted at the start of the string as needed.
807 @item @emph{Standard}:
808 Fortran 95 and later
810 @item @emph{Class}:
811 Elemental function
813 @item @emph{Syntax}:
814 @code{RESULT = ADJUSTR(STRING)}
816 @item @emph{Arguments}:
817 @multitable @columnfractions .15 .70
818 @item @var{STR} @tab The type shall be @code{CHARACTER}.
819 @end multitable
821 @item @emph{Return value}:
822 The return value is of type @code{CHARACTER} and of the same kind as
823 @var{STRING} where trailing spaces are removed and the same number of
824 spaces are inserted at the start of @var{STRING}.
826 @item @emph{Example}:
827 @smallexample
828 program test_adjustr
829   character(len=20) :: str = 'gfortran'
830   str = adjustr(str)
831   print *, str
832 end program test_adjustr
833 @end smallexample
835 @item @emph{See also}:
836 @ref{ADJUSTL}, @ref{TRIM}
837 @end table
841 @node AIMAG
842 @section @code{AIMAG} --- Imaginary part of complex number  
843 @fnindex AIMAG
844 @fnindex DIMAG
845 @fnindex IMAG
846 @fnindex IMAGPART
847 @cindex complex numbers, imaginary part
849 @table @asis
850 @item @emph{Description}:
851 @code{AIMAG(Z)} yields the imaginary part of complex argument @code{Z}.
852 The @code{IMAG(Z)} and @code{IMAGPART(Z)} intrinsic functions are provided
853 for compatibility with @command{g77}, and their use in new code is 
854 strongly discouraged.
856 @item @emph{Standard}:
857 Fortran 77 and later, has overloads that are GNU extensions
859 @item @emph{Class}:
860 Elemental function
862 @item @emph{Syntax}:
863 @code{RESULT = AIMAG(Z)}
865 @item @emph{Arguments}:
866 @multitable @columnfractions .15 .70
867 @item @var{Z} @tab The type of the argument shall be @code{COMPLEX}.
868 @end multitable
870 @item @emph{Return value}:
871 The return value is of type @code{REAL} with the
872 kind type parameter of the argument.
874 @item @emph{Example}:
875 @smallexample
876 program test_aimag
877   complex(4) z4
878   complex(8) z8
879   z4 = cmplx(1.e0_4, 0.e0_4)
880   z8 = cmplx(0.e0_8, 1.e0_8)
881   print *, aimag(z4), dimag(z8)
882 end program test_aimag
883 @end smallexample
885 @item @emph{Specific names}:
886 @multitable @columnfractions .20 .20 .20 .25
887 @item Name               @tab Argument            @tab Return type     @tab Standard
888 @item @code{AIMAG(Z)}    @tab @code{COMPLEX Z}    @tab @code{REAL}     @tab GNU extension
889 @item @code{DIMAG(Z)}    @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)}  @tab GNU extension
890 @item @code{IMAG(Z)}     @tab @code{COMPLEX Z}    @tab @code{REAL}     @tab GNU extension
891 @item @code{IMAGPART(Z)} @tab @code{COMPLEX Z}    @tab @code{REAL}     @tab GNU extension
892 @end multitable
893 @end table
897 @node AINT
898 @section @code{AINT} --- Truncate to a whole number
899 @fnindex AINT
900 @fnindex DINT
901 @cindex floor
902 @cindex rounding, floor
904 @table @asis
905 @item @emph{Description}:
906 @code{AINT(A [, KIND])} truncates its argument to a whole number.
908 @item @emph{Standard}:
909 Fortran 77 and later
911 @item @emph{Class}:
912 Elemental function
914 @item @emph{Syntax}:
915 @code{RESULT = AINT(A [, KIND])} 
917 @item @emph{Arguments}:
918 @multitable @columnfractions .15 .70
919 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
920 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
921 expression indicating the kind parameter of the result.
922 @end multitable
924 @item @emph{Return value}:
925 The return value is of type @code{REAL} with the kind type parameter of the
926 argument if the optional @var{KIND} is absent; otherwise, the kind
927 type parameter will be given by @var{KIND}.  If the magnitude of 
928 @var{X} is less than one, @code{AINT(X)} returns zero.  If the
929 magnitude is equal to or greater than one then it returns the largest
930 whole number that does not exceed its magnitude.  The sign is the same
931 as the sign of @var{X}. 
933 @item @emph{Example}:
934 @smallexample
935 program test_aint
936   real(4) x4
937   real(8) x8
938   x4 = 1.234E0_4
939   x8 = 4.321_8
940   print *, aint(x4), dint(x8)
941   x8 = aint(x4,8)
942 end program test_aint
943 @end smallexample
945 @item @emph{Specific names}:
946 @multitable @columnfractions .20 .20 .20 .25
947 @item Name           @tab Argument         @tab Return type      @tab Standard
948 @item @code{AINT(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)}   @tab Fortran 77 and later
949 @item @code{DINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)}   @tab Fortran 77 and later
950 @end multitable
951 @end table
955 @node ALARM
956 @section @code{ALARM} --- Execute a routine after a given delay
957 @fnindex ALARM
958 @cindex delayed execution
960 @table @asis
961 @item @emph{Description}:
962 @code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER}
963 to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to
964 set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is
965 supplied, it will be returned with the number of seconds remaining until
966 any previously scheduled alarm was due to be delivered, or zero if there
967 was no previously scheduled alarm.
969 @item @emph{Standard}:
970 GNU extension
972 @item @emph{Class}:
973 Subroutine
975 @item @emph{Syntax}:
976 @code{CALL ALARM(SECONDS, HANDLER [, STATUS])}
978 @item @emph{Arguments}:
979 @multitable @columnfractions .15 .70
980 @item @var{SECONDS} @tab The type of the argument shall be a scalar
981 @code{INTEGER}. It is @code{INTENT(IN)}.
982 @item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or
983 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar 
984 values may be either @code{SIG_IGN=1} to ignore the alarm generated 
985 or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}.
986 @item @var{STATUS}  @tab (Optional) @var{STATUS} shall be a scalar
987 variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}.
988 @end multitable
990 @item @emph{Example}:
991 @smallexample
992 program test_alarm
993   external handler_print
994   integer i
995   call alarm (3, handler_print, i)
996   print *, i
997   call sleep(10)
998 end program test_alarm
999 @end smallexample
1000 This will cause the external routine @var{handler_print} to be called
1001 after 3 seconds.
1002 @end table
1006 @node ALL
1007 @section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true 
1008 @fnindex ALL
1009 @cindex array, apply condition
1010 @cindex array, condition testing
1012 @table @asis
1013 @item @emph{Description}:
1014 @code{ALL(MASK [, DIM])} determines if all the values are true in @var{MASK}
1015 in the array along dimension @var{DIM}.
1017 @item @emph{Standard}:
1018 Fortran 95 and later
1020 @item @emph{Class}:
1021 Transformational function
1023 @item @emph{Syntax}:
1024 @code{RESULT = ALL(MASK [, DIM])}
1026 @item @emph{Arguments}:
1027 @multitable @columnfractions .15 .70
1028 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
1029 it shall not be scalar.
1030 @item @var{DIM}  @tab (Optional) @var{DIM} shall be a scalar integer
1031 with a value that lies between one and the rank of @var{MASK}.
1032 @end multitable
1034 @item @emph{Return value}:
1035 @code{ALL(MASK)} returns a scalar value of type @code{LOGICAL} where
1036 the kind type parameter is the same as the kind type parameter of
1037 @var{MASK}.  If @var{DIM} is present, then @code{ALL(MASK, DIM)} returns
1038 an array with the rank of @var{MASK} minus 1.  The shape is determined from
1039 the shape of @var{MASK} where the @var{DIM} dimension is elided. 
1041 @table @asis
1042 @item (A)
1043 @code{ALL(MASK)} is true if all elements of @var{MASK} are true.
1044 It also is true if @var{MASK} has zero size; otherwise, it is false.
1045 @item (B)
1046 If the rank of @var{MASK} is one, then @code{ALL(MASK,DIM)} is equivalent
1047 to @code{ALL(MASK)}.  If the rank is greater than one, then @code{ALL(MASK,DIM)}
1048 is determined by applying @code{ALL} to the array sections.
1049 @end table
1051 @item @emph{Example}:
1052 @smallexample
1053 program test_all
1054   logical l
1055   l = all((/.true., .true., .true./))
1056   print *, l
1057   call section
1058   contains
1059     subroutine section
1060       integer a(2,3), b(2,3)
1061       a = 1
1062       b = 1
1063       b(2,2) = 2
1064       print *, all(a .eq. b, 1)
1065       print *, all(a .eq. b, 2)
1066     end subroutine section
1067 end program test_all
1068 @end smallexample
1069 @end table
1073 @node ALLOCATED
1074 @section @code{ALLOCATED} --- Status of an allocatable entity
1075 @fnindex ALLOCATED
1076 @cindex allocation, status
1078 @table @asis
1079 @item @emph{Description}:
1080 @code{ALLOCATED(ARRAY)} and @code{ALLOCATED(SCALAR)} check the allocation
1081 status of @var{ARRAY} and @var{SCALAR}, respectively.
1083 @item @emph{Standard}:
1084 Fortran 95 and later.  Note, the @code{SCALAR=} keyword and allocatable
1085 scalar entities are available in Fortran 2003 and later.
1087 @item @emph{Class}:
1088 Inquiry function
1090 @item @emph{Syntax}:
1091 @multitable @columnfractions .80
1092 @item @code{RESULT = ALLOCATED(ARRAY)}
1093 @item @code{RESULT = ALLOCATED(SCALAR)} 
1094 @end multitable
1096 @item @emph{Arguments}:
1097 @multitable @columnfractions .15 .70
1098 @item @var{ARRAY}    @tab The argument shall be an @code{ALLOCATABLE} array.
1099 @item @var{SCALAR}   @tab The argument shall be an @code{ALLOCATABLE} scalar.
1100 @end multitable
1102 @item @emph{Return value}:
1103 The return value is a scalar @code{LOGICAL} with the default logical
1104 kind type parameter.  If the argument is allocated, then the result is
1105 @code{.TRUE.}; otherwise, it returns @code{.FALSE.} 
1107 @item @emph{Example}:
1108 @smallexample
1109 program test_allocated
1110   integer :: i = 4
1111   real(4), allocatable :: x(:)
1112   if (.not. allocated(x)) allocate(x(i))
1113 end program test_allocated
1114 @end smallexample
1115 @end table
1119 @node AND
1120 @section @code{AND} --- Bitwise logical AND
1121 @fnindex AND
1122 @cindex bitwise logical and
1123 @cindex logical and, bitwise
1125 @table @asis
1126 @item @emph{Description}:
1127 Bitwise logical @code{AND}.
1129 This intrinsic routine is provided for backwards compatibility with 
1130 GNU Fortran 77.  For integer arguments, programmers should consider
1131 the use of the @ref{IAND} intrinsic defined by the Fortran standard.
1133 @item @emph{Standard}:
1134 GNU extension
1136 @item @emph{Class}:
1137 Function
1139 @item @emph{Syntax}:
1140 @code{RESULT = AND(I, J)}
1142 @item @emph{Arguments}:
1143 @multitable @columnfractions .15 .70
1144 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
1145 type or a scalar @code{LOGICAL} type.
1146 @item @var{J} @tab The type shall be the same as the type of @var{I}.
1147 @end multitable
1149 @item @emph{Return value}:
1150 The return type is either a scalar @code{INTEGER} or a scalar
1151 @code{LOGICAL}.  If the kind type parameters differ, then the
1152 smaller kind type is implicitly converted to larger kind, and the 
1153 return has the larger kind.
1155 @item @emph{Example}:
1156 @smallexample
1157 PROGRAM test_and
1158   LOGICAL :: T = .TRUE., F = .FALSE.
1159   INTEGER :: a, b
1160   DATA a / Z'F' /, b / Z'3' /
1162   WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)
1163   WRITE (*,*) AND(a, b)
1164 END PROGRAM
1165 @end smallexample
1167 @item @emph{See also}:
1168 Fortran 95 elemental function: @ref{IAND}
1169 @end table
1173 @node ANINT
1174 @section @code{ANINT} --- Nearest whole number
1175 @fnindex ANINT
1176 @fnindex DNINT
1177 @cindex ceiling
1178 @cindex rounding, ceiling
1180 @table @asis
1181 @item @emph{Description}:
1182 @code{ANINT(A [, KIND])} rounds its argument to the nearest whole number.
1184 @item @emph{Standard}:
1185 Fortran 77 and later
1187 @item @emph{Class}:
1188 Elemental function
1190 @item @emph{Syntax}:
1191 @code{RESULT = ANINT(A [, KIND])}
1193 @item @emph{Arguments}:
1194 @multitable @columnfractions .15 .70
1195 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
1196 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
1197 expression indicating the kind parameter of the result.
1198 @end multitable
1200 @item @emph{Return value}:
1201 The return value is of type real with the kind type parameter of the
1202 argument if the optional @var{KIND} is absent; otherwise, the kind
1203 type parameter will be given by @var{KIND}.  If @var{A} is greater than
1204 zero, @code{ANINT(A)} returns @code{AINT(X+0.5)}.  If @var{A} is
1205 less than or equal to zero then it returns @code{AINT(X-0.5)}.
1207 @item @emph{Example}:
1208 @smallexample
1209 program test_anint
1210   real(4) x4
1211   real(8) x8
1212   x4 = 1.234E0_4
1213   x8 = 4.321_8
1214   print *, anint(x4), dnint(x8)
1215   x8 = anint(x4,8)
1216 end program test_anint
1217 @end smallexample
1219 @item @emph{Specific names}:
1220 @multitable @columnfractions .20 .20 .20 .25
1221 @item Name            @tab Argument         @tab Return type      @tab Standard
1222 @item @code{AINT(A)}  @tab @code{REAL(4) A} @tab @code{REAL(4)}   @tab Fortran 77 and later
1223 @item @code{DNINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)}   @tab Fortran 77 and later
1224 @end multitable
1225 @end table
1229 @node ANY
1230 @section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true 
1231 @fnindex ANY
1232 @cindex array, apply condition
1233 @cindex array, condition testing
1235 @table @asis
1236 @item @emph{Description}:
1237 @code{ANY(MASK [, DIM])} determines if any of the values in the logical array
1238 @var{MASK} along dimension @var{DIM} are @code{.TRUE.}.
1240 @item @emph{Standard}:
1241 Fortran 95 and later
1243 @item @emph{Class}:
1244 Transformational function
1246 @item @emph{Syntax}:
1247 @code{RESULT = ANY(MASK [, DIM])}
1249 @item @emph{Arguments}:
1250 @multitable @columnfractions .15 .70
1251 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
1252 it shall not be scalar.
1253 @item @var{DIM}  @tab (Optional) @var{DIM} shall be a scalar integer
1254 with a value that lies between one and the rank of @var{MASK}.
1255 @end multitable
1257 @item @emph{Return value}:
1258 @code{ANY(MASK)} returns a scalar value of type @code{LOGICAL} where
1259 the kind type parameter is the same as the kind type parameter of
1260 @var{MASK}.  If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns
1261 an array with the rank of @var{MASK} minus 1.  The shape is determined from
1262 the shape of @var{MASK} where the @var{DIM} dimension is elided. 
1264 @table @asis
1265 @item (A)
1266 @code{ANY(MASK)} is true if any element of @var{MASK} is true;
1267 otherwise, it is false.  It also is false if @var{MASK} has zero size.
1268 @item (B)
1269 If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent
1270 to @code{ANY(MASK)}.  If the rank is greater than one, then @code{ANY(MASK,DIM)}
1271 is determined by applying @code{ANY} to the array sections.
1272 @end table
1274 @item @emph{Example}:
1275 @smallexample
1276 program test_any
1277   logical l
1278   l = any((/.true., .true., .true./))
1279   print *, l
1280   call section
1281   contains
1282     subroutine section
1283       integer a(2,3), b(2,3)
1284       a = 1
1285       b = 1
1286       b(2,2) = 2
1287       print *, any(a .eq. b, 1)
1288       print *, any(a .eq. b, 2)
1289     end subroutine section
1290 end program test_any
1291 @end smallexample
1292 @end table
1296 @node ASIN
1297 @section @code{ASIN} --- Arcsine function 
1298 @fnindex ASIN
1299 @fnindex DASIN
1300 @cindex trigonometric function, sine, inverse
1301 @cindex sine, inverse
1303 @table @asis
1304 @item @emph{Description}:
1305 @code{ASIN(X)} computes the arcsine of its @var{X} (inverse of @code{SIN(X)}).
1307 @item @emph{Standard}:
1308 Fortran 77 and later, for a complex argument Fortran 2008 or later
1310 @item @emph{Class}:
1311 Elemental function
1313 @item @emph{Syntax}:
1314 @code{RESULT = ASIN(X)}
1316 @item @emph{Arguments}:
1317 @multitable @columnfractions .15 .70
1318 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
1319 less than or equal to one - or be @code{COMPLEX}.
1320 @end multitable
1322 @item @emph{Return value}:
1323 The return value is of the same type and kind as @var{X}.
1324 The real part of the result is in radians and lies in the range
1325 @math{-\pi/2 \leq \Re \asin(x) \leq \pi/2}.
1327 @item @emph{Example}:
1328 @smallexample
1329 program test_asin
1330   real(8) :: x = 0.866_8
1331   x = asin(x)
1332 end program test_asin
1333 @end smallexample
1335 @item @emph{Specific names}:
1336 @multitable @columnfractions .20 .20 .20 .25
1337 @item Name            @tab Argument          @tab Return type       @tab Standard
1338 @item @code{ASIN(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
1339 @item @code{DASIN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
1340 @end multitable
1342 @item @emph{See also}:
1343 Inverse function: @ref{SIN}
1344 Degrees function: @ref{ASIND}
1346 @end table
1350 @node ASIND
1351 @section @code{ASIND} --- Arcsine function, degrees
1352 @fnindex ASIND
1353 @fnindex DASIND
1354 @cindex trigonometric function, sine, inverse, degrees
1355 @cindex sine, inverse, degrees
1357 @table @asis
1358 @item @emph{Description}:
1359 @code{ASIND(X)} computes the arcsine of its @var{X} in degrees (inverse of
1360 @code{SIND(X)}).
1362 This function is for compatibility only and should be avoided in favor of
1363 standard constructs wherever possible.
1365 @item @emph{Standard}:
1366 GNU Extension, enabled with @option{-fdec-math}.
1368 @item @emph{Class}:
1369 Elemental function
1371 @item @emph{Syntax}:
1372 @code{RESULT = ASIND(X)}
1374 @item @emph{Arguments}:
1375 @multitable @columnfractions .15 .70
1376 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
1377 less than or equal to one - or be @code{COMPLEX}.
1378 @end multitable
1380 @item @emph{Return value}:
1381 The return value is of the same type and kind as @var{X}.
1382 The real part of the result is in degrees and lies in the range
1383 @math{-90 \leq \Re \asin(x) \leq 90}.
1385 @item @emph{Example}:
1386 @smallexample
1387 program test_asind
1388   real(8) :: x = 0.866_8
1389   x = asind(x)
1390 end program test_asind
1391 @end smallexample
1393 @item @emph{Specific names}:
1394 @multitable @columnfractions .20 .20 .20 .25
1395 @item Name            @tab Argument          @tab Return type       @tab Standard
1396 @item @code{ASIND(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab GNU Extension
1397 @item @code{DASIND(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU Extension
1398 @end multitable
1400 @item @emph{See also}:
1401 Inverse function: @ref{SIND}
1402 Radians function: @ref{ASIN}
1404 @end table
1408 @node ASINH
1409 @section @code{ASINH} --- Inverse hyperbolic sine function
1410 @fnindex ASINH
1411 @fnindex DASINH
1412 @cindex area hyperbolic sine
1413 @cindex inverse hyperbolic sine
1414 @cindex hyperbolic function, sine, inverse
1415 @cindex sine, hyperbolic, inverse
1417 @table @asis
1418 @item @emph{Description}:
1419 @code{ASINH(X)} computes the inverse hyperbolic sine of @var{X}.
1421 @item @emph{Standard}:
1422 Fortran 2008 and later
1424 @item @emph{Class}:
1425 Elemental function
1427 @item @emph{Syntax}:
1428 @code{RESULT = ASINH(X)}
1430 @item @emph{Arguments}:
1431 @multitable @columnfractions .15 .70
1432 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1433 @end multitable
1435 @item @emph{Return value}:
1436 The return value is of the same type and kind as  @var{X}. If @var{X} is
1437 complex, the imaginary part of the result is in radians and lies between
1438 @math{-\pi/2 \leq \Im \asinh(x) \leq \pi/2}.
1440 @item @emph{Example}:
1441 @smallexample
1442 PROGRAM test_asinh
1443   REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1444   WRITE (*,*) ASINH(x)
1445 END PROGRAM
1446 @end smallexample
1448 @item @emph{Specific names}:
1449 @multitable @columnfractions .20 .20 .20 .25
1450 @item Name             @tab Argument          @tab Return type       @tab Standard
1451 @item @code{DASINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension.
1452 @end multitable
1454 @item @emph{See also}:
1455 Inverse function: @ref{SINH}
1456 @end table
1460 @node ASSOCIATED
1461 @section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair 
1462 @fnindex ASSOCIATED
1463 @cindex pointer, status
1464 @cindex association status
1466 @table @asis
1467 @item @emph{Description}:
1468 @code{ASSOCIATED(POINTER [, TARGET])} determines the status of the pointer
1469 @var{POINTER} or if @var{POINTER} is associated with the target @var{TARGET}.
1471 @item @emph{Standard}:
1472 Fortran 95 and later
1474 @item @emph{Class}:
1475 Inquiry function
1477 @item @emph{Syntax}:
1478 @code{RESULT = ASSOCIATED(POINTER [, TARGET])}
1480 @item @emph{Arguments}:
1481 @multitable @columnfractions .15 .70
1482 @item @var{POINTER} @tab @var{POINTER} shall have the @code{POINTER} attribute
1483 and it can be of any type.
1484 @item @var{TARGET} @tab (Optional) @var{TARGET} shall be a pointer or
1485 a target.  It must have the same type, kind type parameter, and
1486 array rank as @var{POINTER}.
1487 @end multitable
1488 The association status of neither @var{POINTER} nor @var{TARGET} shall be
1489 undefined.
1491 @item @emph{Return value}:
1492 @code{ASSOCIATED(POINTER)} returns a scalar value of type @code{LOGICAL(4)}.
1493 There are several cases:
1494 @table @asis
1495 @item (A) When the optional @var{TARGET} is not present then
1496 @code{ASSOCIATED(POINTER)} is true if @var{POINTER} is associated with a target; otherwise, it returns false.
1497 @item (B) If @var{TARGET} is present and a scalar target, the result is true if
1498 @var{TARGET} is not a zero-sized storage sequence and the target associated with @var{POINTER} occupies the same storage units.  If @var{POINTER} is
1499 disassociated, the result is false.
1500 @item (C) If @var{TARGET} is present and an array target, the result is true if
1501 @var{TARGET} and @var{POINTER} have the same shape, are not zero-sized arrays,
1502 are arrays whose elements are not zero-sized storage sequences, and
1503 @var{TARGET} and @var{POINTER} occupy the same storage units in array element
1504 order.
1505 As in case(B), the result is false, if @var{POINTER} is disassociated.
1506 @item (D) If @var{TARGET} is present and an scalar pointer, the result is true
1507 if @var{TARGET} is associated with @var{POINTER}, the target associated with
1508 @var{TARGET} are not zero-sized storage sequences and occupy the same storage
1509 units.
1510 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1511 @item (E) If @var{TARGET} is present and an array pointer, the result is true if
1512 target associated with @var{POINTER} and the target associated with @var{TARGET}
1513 have the same shape, are not zero-sized arrays, are arrays whose elements are
1514 not zero-sized storage sequences, and @var{TARGET} and @var{POINTER} occupy
1515 the same storage units in array element order.
1516 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1517 @end table
1519 @item @emph{Example}:
1520 @smallexample
1521 program test_associated
1522    implicit none
1523    real, target  :: tgt(2) = (/1., 2./)
1524    real, pointer :: ptr(:)
1525    ptr => tgt
1526    if (associated(ptr)     .eqv. .false.) call abort
1527    if (associated(ptr,tgt) .eqv. .false.) call abort
1528 end program test_associated
1529 @end smallexample
1531 @item @emph{See also}:
1532 @ref{NULL}
1533 @end table
1537 @node ATAN
1538 @section @code{ATAN} --- Arctangent function 
1539 @fnindex ATAN
1540 @fnindex DATAN
1541 @cindex trigonometric function, tangent, inverse
1542 @cindex tangent, inverse
1544 @table @asis
1545 @item @emph{Description}:
1546 @code{ATAN(X)} computes the arctangent of @var{X}.
1548 @item @emph{Standard}:
1549 Fortran 77 and later, for a complex argument and for two arguments
1550 Fortran 2008 or later
1552 @item @emph{Class}:
1553 Elemental function
1555 @item @emph{Syntax}:
1556 @multitable @columnfractions .80
1557 @item @code{RESULT = ATAN(X)}
1558 @item @code{RESULT = ATAN(Y, X)}
1559 @end multitable
1561 @item @emph{Arguments}:
1562 @multitable @columnfractions .15 .70
1563 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
1564 if @var{Y} is present, @var{X} shall be REAL.
1565 @item @var{Y} shall be of the same type and kind as @var{X}.
1566 @end multitable
1568 @item @emph{Return value}:
1569 The return value is of the same type and kind as @var{X}.
1570 If @var{Y} is present, the result is identical to @code{ATAN2(Y,X)}.
1571 Otherwise, it the arcus tangent of @var{X}, where the real part of
1572 the result is in radians and lies in the range
1573 @math{-\pi/2 \leq \Re \atan(x) \leq \pi/2}.
1575 @item @emph{Example}:
1576 @smallexample
1577 program test_atan
1578   real(8) :: x = 2.866_8
1579   x = atan(x)
1580 end program test_atan
1581 @end smallexample
1583 @item @emph{Specific names}:
1584 @multitable @columnfractions .20 .20 .20 .25
1585 @item Name            @tab Argument          @tab Return type       @tab Standard
1586 @item @code{ATAN(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
1587 @item @code{DATAN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
1588 @end multitable
1590 @item @emph{See also}:
1591 Inverse function: @ref{TAN}
1592 Degrees function: @ref{ATAND}
1594 @end table
1598 @node ATAND
1599 @section @code{ATAND} --- Arctangent function, degrees
1600 @fnindex ATAND
1601 @fnindex DATAND
1602 @cindex trigonometric function, tangent, inverse, degrees
1603 @cindex tangent, inverse, degrees
1605 @table @asis
1606 @item @emph{Description}:
1607 @code{ATAND(X)} computes the arctangent of @var{X} in degrees (inverse of
1608 @ref{TAND}).
1610 This function is for compatibility only and should be avoided in favor of
1611 standard constructs wherever possible.
1613 @item @emph{Standard}:
1614 GNU Extension, enabled with @option{-fdec-math}.
1616 @item @emph{Class}:
1617 Elemental function
1619 @item @emph{Syntax}:
1620 @multitable @columnfractions .80
1621 @item @code{RESULT = ATAND(X)}
1622 @item @code{RESULT = ATAND(Y, X)}
1623 @end multitable
1625 @item @emph{Arguments}:
1626 @multitable @columnfractions .15 .70
1627 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
1628 if @var{Y} is present, @var{X} shall be REAL.
1629 @item @var{Y} shall be of the same type and kind as @var{X}.
1630 @end multitable
1632 @item @emph{Return value}:
1633 The return value is of the same type and kind as @var{X}.
1634 If @var{Y} is present, the result is identical to @code{ATAND2(Y,X)}.
1635 Otherwise, it is the arcus tangent of @var{X}, where the real part of
1636 the result is in degrees and lies in the range
1637 @math{-90 \leq \Re \atand(x) \leq 90}.
1639 @item @emph{Example}:
1640 @smallexample
1641 program test_atand
1642   real(8) :: x = 2.866_8
1643   x = atand(x)
1644 end program test_atand
1645 @end smallexample
1647 @item @emph{Specific names}:
1648 @multitable @columnfractions .20 .20 .20 .25
1649 @item Name            @tab Argument          @tab Return type       @tab Standard
1650 @item @code{ATAND(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab GNU Extension
1651 @item @code{DATAND(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU Extension
1652 @end multitable
1654 @item @emph{See also}:
1655 Inverse function: @ref{TAND}
1656 Radians function: @ref{ATAN}
1658 @end table
1662 @node ATAN2
1663 @section @code{ATAN2} --- Arctangent function 
1664 @fnindex ATAN2
1665 @fnindex DATAN2
1666 @cindex trigonometric function, tangent, inverse
1667 @cindex tangent, inverse
1669 @table @asis
1670 @item @emph{Description}:
1671 @code{ATAN2(Y, X)} computes the principal value of the argument
1672 function of the complex number @math{X + i Y}.  This function can
1673 be used to transform from Cartesian into polar coordinates and
1674 allows to determine the angle in the correct quadrant.
1676 @item @emph{Standard}:
1677 Fortran 77 and later
1679 @item @emph{Class}:
1680 Elemental function
1682 @item @emph{Syntax}:
1683 @code{RESULT = ATAN2(Y, X)}
1685 @item @emph{Arguments}:
1686 @multitable @columnfractions .15 .70
1687 @item @var{Y} @tab The type shall be @code{REAL}.
1688 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
1689 If @var{Y} is zero, then @var{X} must be nonzero.
1690 @end multitable
1692 @item @emph{Return value}:
1693 The return value has the same type and kind type parameter as @var{Y}. It
1694 is the principal value of the complex number @math{X + i Y}.  If @var{X}
1695 is nonzero, then it lies in the range @math{-\pi \le \atan (x) \leq \pi}.
1696 The sign is positive if @var{Y} is positive.  If @var{Y} is zero, then
1697 the return value is zero if @var{X} is strictly positive, @math{\pi} if
1698 @var{X} is negative and @var{Y} is positive zero (or the processor does
1699 not handle signed zeros), and @math{-\pi} if @var{X} is negative and
1700 @var{Y} is negative zero.  Finally, if @var{X} is zero, then the
1701 magnitude of the result is @math{\pi/2}.
1703 @item @emph{Example}:
1704 @smallexample
1705 program test_atan2
1706   real(4) :: x = 1.e0_4, y = 0.5e0_4
1707   x = atan2(y,x)
1708 end program test_atan2
1709 @end smallexample
1711 @item @emph{Specific names}:
1712 @multitable @columnfractions .20 .20 .20 .25
1713 @item Name                @tab Argument            @tab Return type    @tab Standard
1714 @item @code{ATAN2(X, Y)}  @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
1715 @item @code{DATAN2(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab Fortran 77 and later
1716 @end multitable
1718 @item @emph{See also}:
1719 Alias: @ref{ATAN}
1720 Degrees function: @ref{ATAN2D}
1722 @end table
1726 @node ATAN2D
1727 @section @code{ATAN2D} --- Arctangent function, degrees
1728 @fnindex ATAN2D
1729 @fnindex DATAN2D
1730 @cindex trigonometric function, tangent, inverse, degrees
1731 @cindex tangent, inverse, degrees
1733 @table @asis
1734 @item @emph{Description}:
1735 @code{ATAN2D(Y, X)} computes the principal value of the argument
1736 function of the complex number @math{X + i Y} in degrees.  This function can
1737 be used to transform from Cartesian into polar coordinates and
1738 allows to determine the angle in the correct quadrant.
1740 This function is for compatibility only and should be avoided in favor of
1741 standard constructs wherever possible.
1743 @item @emph{Standard}:
1744 GNU Extension, enabled with @option{-fdec-math}.
1746 @item @emph{Class}:
1747 Elemental function
1749 @item @emph{Syntax}:
1750 @code{RESULT = ATAN2D(Y, X)}
1752 @item @emph{Arguments}:
1753 @multitable @columnfractions .15 .70
1754 @item @var{Y} @tab The type shall be @code{REAL}.
1755 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
1756 If @var{Y} is zero, then @var{X} must be nonzero.
1757 @end multitable
1759 @item @emph{Return value}:
1760 The return value has the same type and kind type parameter as @var{Y}. It
1761 is the principal value of the complex number @math{X + i Y}.  If @var{X}
1762 is nonzero, then it lies in the range @math{-180 \le \atan (x) \leq 180}.
1763 The sign is positive if @var{Y} is positive.  If @var{Y} is zero, then
1764 the return value is zero if @var{X} is strictly positive, @math{180} if
1765 @var{X} is negative and @var{Y} is positive zero (or the processor does
1766 not handle signed zeros), and @math{-180} if @var{X} is negative and
1767 @var{Y} is negative zero.  Finally, if @var{X} is zero, then the
1768 magnitude of the result is @math{90}.
1770 @item @emph{Example}:
1771 @smallexample
1772 program test_atan2d
1773   real(4) :: x = 1.e0_4, y = 0.5e0_4
1774   x = atan2d(y,x)
1775 end program test_atan2d
1776 @end smallexample
1778 @item @emph{Specific names}:
1779 @multitable @columnfractions .20 .20 .20 .25
1780 @item Name                @tab Argument            @tab Return type    @tab Standard
1781 @item @code{ATAN2D(X, Y)}  @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab GNU Extension
1782 @item @code{DATAN2D(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab GNU Extension
1783 @end multitable
1785 @item @emph{See also}:
1786 Alias: @ref{ATAND}
1787 Radians function: @ref{ATAN2}
1789 @end table
1793 @node ATANH
1794 @section @code{ATANH} --- Inverse hyperbolic tangent function
1795 @fnindex ATANH
1796 @fnindex DATANH
1797 @cindex area hyperbolic tangent
1798 @cindex inverse hyperbolic tangent
1799 @cindex hyperbolic function, tangent, inverse
1800 @cindex tangent, hyperbolic, inverse
1802 @table @asis
1803 @item @emph{Description}:
1804 @code{ATANH(X)} computes the inverse hyperbolic tangent of @var{X}.
1806 @item @emph{Standard}:
1807 Fortran 2008 and later
1809 @item @emph{Class}:
1810 Elemental function
1812 @item @emph{Syntax}:
1813 @code{RESULT = ATANH(X)}
1815 @item @emph{Arguments}:
1816 @multitable @columnfractions .15 .70
1817 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1818 @end multitable
1820 @item @emph{Return value}:
1821 The return value has same type and kind as @var{X}. If @var{X} is
1822 complex, the imaginary part of the result is in radians and lies between
1823 @math{-\pi/2 \leq \Im \atanh(x) \leq \pi/2}.
1825 @item @emph{Example}:
1826 @smallexample
1827 PROGRAM test_atanh
1828   REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1829   WRITE (*,*) ATANH(x)
1830 END PROGRAM
1831 @end smallexample
1833 @item @emph{Specific names}:
1834 @multitable @columnfractions .20 .20 .20 .25
1835 @item Name             @tab Argument          @tab Return type       @tab Standard
1836 @item @code{DATANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
1837 @end multitable
1839 @item @emph{See also}:
1840 Inverse function: @ref{TANH}
1841 @end table
1845 @node ATOMIC_ADD
1846 @section @code{ATOMIC_ADD} --- Atomic ADD operation
1847 @fnindex ATOMIC_ADD
1848 @cindex Atomic subroutine, add
1850 @table @asis
1851 @item @emph{Description}:
1852 @code{ATOMIC_ADD(ATOM, VALUE)} atomically adds the value of @var{VAR} to the
1853 variable @var{ATOM}. When @var{STAT} is present and the invocation was
1854 successful, it is assigned the value 0. If it is present and the invocation
1855 has failed, it is assigned a positive value; in particular, for a coindexed
1856 @var{ATOM}, if the remote image has stopped, it is assigned the value of
1857 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
1858 failed, the value @code{STAT_FAILED_IMAGE}.
1860 @item @emph{Standard}:
1861 TS 18508 or later
1863 @item @emph{Class}:
1864 Atomic subroutine
1866 @item @emph{Syntax}:
1867 @code{CALL ATOMIC_ADD (ATOM, VALUE [, STAT])}
1869 @item @emph{Arguments}:
1870 @multitable @columnfractions .15 .70
1871 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
1872 type with @code{ATOMIC_INT_KIND} kind.
1873 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
1874 is different, the value is converted to the kind of @var{ATOM}.
1875 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
1876 @end multitable
1878 @item @emph{Example}:
1879 @smallexample
1880 program atomic
1881   use iso_fortran_env
1882   integer(atomic_int_kind) :: atom[*]
1883   call atomic_add (atom[1], this_image())
1884 end program atomic
1885 @end smallexample
1887 @item @emph{See also}:
1888 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_ADD}, @ref{ISO_FORTRAN_ENV},
1889 @ref{ATOMIC_AND}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
1890 @end table
1895 @node ATOMIC_AND
1896 @section @code{ATOMIC_AND} --- Atomic bitwise AND operation
1897 @fnindex ATOMIC_AND
1898 @cindex Atomic subroutine, AND
1900 @table @asis
1901 @item @emph{Description}:
1902 @code{ATOMIC_AND(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
1903 AND between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
1904 and the invocation was successful, it is assigned the value 0. If it is present
1905 and the invocation has failed, it is assigned a positive value; in particular,
1906 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
1907 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
1908 image has failed, the value @code{STAT_FAILED_IMAGE}.
1910 @item @emph{Standard}:
1911 TS 18508 or later
1913 @item @emph{Class}:
1914 Atomic subroutine
1916 @item @emph{Syntax}:
1917 @code{CALL ATOMIC_AND (ATOM, VALUE [, STAT])}
1919 @item @emph{Arguments}:
1920 @multitable @columnfractions .15 .70
1921 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
1922 type with @code{ATOMIC_INT_KIND} kind.
1923 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
1924 is different, the value is converted to the kind of @var{ATOM}.
1925 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
1926 @end multitable
1928 @item @emph{Example}:
1929 @smallexample
1930 program atomic
1931   use iso_fortran_env
1932   integer(atomic_int_kind) :: atom[*]
1933   call atomic_and (atom[1], int(b'10100011101'))
1934 end program atomic
1935 @end smallexample
1937 @item @emph{See also}:
1938 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_AND}, @ref{ISO_FORTRAN_ENV},
1939 @ref{ATOMIC_ADD}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
1940 @end table
1944 @node ATOMIC_CAS
1945 @section @code{ATOMIC_CAS} --- Atomic compare and swap
1946 @fnindex ATOMIC_DEFINE
1947 @cindex Atomic subroutine, compare and swap
1949 @table @asis
1950 @item @emph{Description}:
1951 @code{ATOMIC_CAS} compares the variable @var{ATOM} with the value of
1952 @var{COMPARE}; if the value is the same, @var{ATOM} is set to the value
1953 of @var{NEW}. Additionally, @var{OLD} is set to the value of @var{ATOM}
1954 that was used for the comparison.  When @var{STAT} is present and the invocation
1955 was successful, it is assigned the value 0. If it is present and the invocation
1956 has failed, it is assigned a positive value; in particular, for a coindexed
1957 @var{ATOM}, if the remote image has stopped, it is assigned the value of
1958 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
1959 failed, the value @code{STAT_FAILED_IMAGE}.
1961 @item @emph{Standard}:
1962 TS 18508 or later
1964 @item @emph{Class}:
1965 Atomic subroutine
1967 @item @emph{Syntax}:
1968 @code{CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])}
1970 @item @emph{Arguments}:
1971 @multitable @columnfractions .15 .70
1972 @item @var{ATOM}    @tab Scalar coarray or coindexed variable of either integer
1973 type with @code{ATOMIC_INT_KIND} kind or logical type with
1974 @code{ATOMIC_LOGICAL_KIND} kind.
1975 @item @var{OLD}     @tab Scalar of the same type and kind as @var{ATOM}.
1976 @item @var{COMPARE} @tab Scalar variable of the same type and kind as
1977 @var{ATOM}.
1978 @item @var{NEW}     @tab Scalar variable of the same type as @var{ATOM}. If kind
1979 is different, the value is converted to the kind of @var{ATOM}.
1980 @item @var{STAT}    @tab (optional) Scalar default-kind integer variable.
1981 @end multitable
1983 @item @emph{Example}:
1984 @smallexample
1985 program atomic
1986   use iso_fortran_env
1987   logical(atomic_logical_kind) :: atom[*], prev
1988   call atomic_cas (atom[1], prev, .false., .true.))
1989 end program atomic
1990 @end smallexample
1992 @item @emph{See also}:
1993 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_REF}, @ref{ISO_FORTRAN_ENV}
1994 @end table
1998 @node ATOMIC_DEFINE
1999 @section @code{ATOMIC_DEFINE} --- Setting a variable atomically
2000 @fnindex ATOMIC_DEFINE
2001 @cindex Atomic subroutine, define
2003 @table @asis
2004 @item @emph{Description}:
2005 @code{ATOMIC_DEFINE(ATOM, VALUE)} defines the variable @var{ATOM} with the value
2006 @var{VALUE} atomically. When @var{STAT} is present and the invocation was
2007 successful, it is assigned the value 0. If it is present and the invocation
2008 has failed, it is assigned a positive value; in particular, for a coindexed
2009 @var{ATOM}, if the remote image has stopped, it is assigned the value of
2010 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
2011 failed, the value @code{STAT_FAILED_IMAGE}.
2013 @item @emph{Standard}:
2014 Fortran 2008 and later; with @var{STAT}, TS 18508 or later
2016 @item @emph{Class}:
2017 Atomic subroutine
2019 @item @emph{Syntax}:
2020 @code{CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])}
2022 @item @emph{Arguments}:
2023 @multitable @columnfractions .15 .70
2024 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of either integer
2025 type with @code{ATOMIC_INT_KIND} kind or logical type with
2026 @code{ATOMIC_LOGICAL_KIND} kind.
2028 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2029 is different, the value is converted to the kind of @var{ATOM}.
2030 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2031 @end multitable
2033 @item @emph{Example}:
2034 @smallexample
2035 program atomic
2036   use iso_fortran_env
2037   integer(atomic_int_kind) :: atom[*]
2038   call atomic_define (atom[1], this_image())
2039 end program atomic
2040 @end smallexample
2042 @item @emph{See also}:
2043 @ref{ATOMIC_REF}, @ref{ATOMIC_CAS}, @ref{ISO_FORTRAN_ENV},
2044 @ref{ATOMIC_ADD}, @ref{ATOMIC_AND}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
2045 @end table
2049 @node ATOMIC_FETCH_ADD
2050 @section @code{ATOMIC_FETCH_ADD} --- Atomic ADD operation with prior fetch
2051 @fnindex ATOMIC_FETCH_ADD
2052 @cindex Atomic subroutine, ADD with fetch
2054 @table @asis
2055 @item @emph{Description}:
2056 @code{ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)} atomically stores the value of
2057 @var{ATOM} in @var{OLD} and adds the value of @var{VAR} to the
2058 variable @var{ATOM}. When @var{STAT} is present and the invocation was
2059 successful, it is assigned the value 0. If it is present and the invocation
2060 has failed, it is assigned a positive value; in particular, for a coindexed
2061 @var{ATOM}, if the remote image has stopped, it is assigned the value of
2062 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
2063 failed, the value @code{STAT_FAILED_IMAGE}.
2065 @item @emph{Standard}:
2066 TS 18508 or later
2068 @item @emph{Class}:
2069 Atomic subroutine
2071 @item @emph{Syntax}:
2072 @code{CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])}
2074 @item @emph{Arguments}:
2075 @multitable @columnfractions .15 .70
2076 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
2077 type with @code{ATOMIC_INT_KIND} kind.
2078 @code{ATOMIC_LOGICAL_KIND} kind.
2080 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2081 is different, the value is converted to the kind of @var{ATOM}.
2082 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
2083 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2084 @end multitable
2086 @item @emph{Example}:
2087 @smallexample
2088 program atomic
2089   use iso_fortran_env
2090   integer(atomic_int_kind) :: atom[*], old
2091   call atomic_add (atom[1], this_image(), old)
2092 end program atomic
2093 @end smallexample
2095 @item @emph{See also}:
2096 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_ADD}, @ref{ISO_FORTRAN_ENV},
2097 @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_OR}, @ref{ATOMIC_FETCH_XOR}
2098 @end table
2102 @node ATOMIC_FETCH_AND
2103 @section @code{ATOMIC_FETCH_AND} --- Atomic bitwise AND operation with prior fetch
2104 @fnindex ATOMIC_FETCH_AND
2105 @cindex Atomic subroutine, AND with fetch
2107 @table @asis
2108 @item @emph{Description}:
2109 @code{ATOMIC_AND(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
2110 @var{OLD} and defines @var{ATOM} with the bitwise AND between the values of
2111 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
2112 successful, it is assigned the value 0. If it is present and the invocation has
2113 failed, it is assigned a positive value; in particular, for a coindexed
2114 @var{ATOM}, if the remote image has stopped, it is assigned the value of
2115 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
2116 failed, the value @code{STAT_FAILED_IMAGE}.
2118 @item @emph{Standard}:
2119 TS 18508 or later
2121 @item @emph{Class}:
2122 Atomic subroutine
2124 @item @emph{Syntax}:
2125 @code{CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])}
2127 @item @emph{Arguments}:
2128 @multitable @columnfractions .15 .70
2129 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
2130 type with @code{ATOMIC_INT_KIND} kind.
2131 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2132 is different, the value is converted to the kind of @var{ATOM}.
2133 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
2134 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2135 @end multitable
2137 @item @emph{Example}:
2138 @smallexample
2139 program atomic
2140   use iso_fortran_env
2141   integer(atomic_int_kind) :: atom[*], old
2142   call atomic_fetch_and (atom[1], int(b'10100011101'), old)
2143 end program atomic
2144 @end smallexample
2146 @item @emph{See also}:
2147 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_AND}, @ref{ISO_FORTRAN_ENV},
2148 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_OR}, @ref{ATOMIC_FETCH_XOR}
2149 @end table
2153 @node ATOMIC_FETCH_OR
2154 @section @code{ATOMIC_FETCH_OR} --- Atomic bitwise OR operation with prior fetch
2155 @fnindex ATOMIC_FETCH_OR
2156 @cindex Atomic subroutine, OR with fetch
2158 @table @asis
2159 @item @emph{Description}:
2160 @code{ATOMIC_OR(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
2161 @var{OLD} and defines @var{ATOM} with the bitwise OR between the values of
2162 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
2163 successful, it is assigned the value 0. If it is present and the invocation has
2164 failed, it is assigned a positive value; in particular, for a coindexed
2165 @var{ATOM}, if the remote image has stopped, it is assigned the value of
2166 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
2167 failed, the value @code{STAT_FAILED_IMAGE}.
2169 @item @emph{Standard}:
2170 TS 18508 or later
2172 @item @emph{Class}:
2173 Atomic subroutine
2175 @item @emph{Syntax}:
2176 @code{CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])}
2178 @item @emph{Arguments}:
2179 @multitable @columnfractions .15 .70
2180 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
2181 type with @code{ATOMIC_INT_KIND} kind.
2182 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2183 is different, the value is converted to the kind of @var{ATOM}.
2184 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
2185 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2186 @end multitable
2188 @item @emph{Example}:
2189 @smallexample
2190 program atomic
2191   use iso_fortran_env
2192   integer(atomic_int_kind) :: atom[*], old
2193   call atomic_fetch_or (atom[1], int(b'10100011101'), old)
2194 end program atomic
2195 @end smallexample
2197 @item @emph{See also}:
2198 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_OR}, @ref{ISO_FORTRAN_ENV},
2199 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_XOR}
2200 @end table
2204 @node ATOMIC_FETCH_XOR
2205 @section @code{ATOMIC_FETCH_XOR} --- Atomic bitwise XOR operation with prior fetch
2206 @fnindex ATOMIC_FETCH_XOR
2207 @cindex Atomic subroutine, XOR with fetch
2209 @table @asis
2210 @item @emph{Description}:
2211 @code{ATOMIC_XOR(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
2212 @var{OLD} and defines @var{ATOM} with the bitwise XOR between the values of
2213 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
2214 successful, it is assigned the value 0. If it is present and the invocation has
2215 failed, it is assigned a positive value; in particular, for a coindexed
2216 @var{ATOM}, if the remote image has stopped, it is assigned the value of
2217 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
2218 failed, the value @code{STAT_FAILED_IMAGE}.
2220 @item @emph{Standard}:
2221 TS 18508 or later
2223 @item @emph{Class}:
2224 Atomic subroutine
2226 @item @emph{Syntax}:
2227 @code{CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])}
2229 @item @emph{Arguments}:
2230 @multitable @columnfractions .15 .70
2231 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
2232 type with @code{ATOMIC_INT_KIND} kind.
2233 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2234 is different, the value is converted to the kind of @var{ATOM}.
2235 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
2236 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2237 @end multitable
2239 @item @emph{Example}:
2240 @smallexample
2241 program atomic
2242   use iso_fortran_env
2243   integer(atomic_int_kind) :: atom[*], old
2244   call atomic_fetch_xor (atom[1], int(b'10100011101'), old)
2245 end program atomic
2246 @end smallexample
2248 @item @emph{See also}:
2249 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_XOR}, @ref{ISO_FORTRAN_ENV},
2250 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_OR}
2251 @end table
2255 @node ATOMIC_OR
2256 @section @code{ATOMIC_OR} --- Atomic bitwise OR operation
2257 @fnindex ATOMIC_OR
2258 @cindex Atomic subroutine, OR
2260 @table @asis
2261 @item @emph{Description}:
2262 @code{ATOMIC_OR(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
2263 AND between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
2264 and the invocation was successful, it is assigned the value 0. If it is present
2265 and the invocation has failed, it is assigned a positive value; in particular,
2266 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
2267 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
2268 image has failed, the value @code{STAT_FAILED_IMAGE}.
2270 @item @emph{Standard}:
2271 TS 18508 or later
2273 @item @emph{Class}:
2274 Atomic subroutine
2276 @item @emph{Syntax}:
2277 @code{CALL ATOMIC_OR (ATOM, VALUE [, STAT])}
2279 @item @emph{Arguments}:
2280 @multitable @columnfractions .15 .70
2281 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
2282 type with @code{ATOMIC_INT_KIND} kind.
2283 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2284 is different, the value is converted to the kind of @var{ATOM}.
2285 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2286 @end multitable
2288 @item @emph{Example}:
2289 @smallexample
2290 program atomic
2291   use iso_fortran_env
2292   integer(atomic_int_kind) :: atom[*]
2293   call atomic_or (atom[1], int(b'10100011101'))
2294 end program atomic
2295 @end smallexample
2297 @item @emph{See also}:
2298 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_OR}, @ref{ISO_FORTRAN_ENV},
2299 @ref{ATOMIC_ADD}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
2300 @end table
2304 @node ATOMIC_REF
2305 @section @code{ATOMIC_REF} --- Obtaining the value of a variable atomically
2306 @fnindex ATOMIC_REF
2307 @cindex Atomic subroutine, reference
2309 @table @asis
2310 @item @emph{Description}:
2311 @code{ATOMIC_DEFINE(ATOM, VALUE)} atomically assigns the value of the
2312 variable @var{ATOM} to @var{VALUE}. When @var{STAT} is present and the
2313 invocation was successful, it is assigned the value 0. If it is present and the
2314 invocation has failed, it is assigned a positive value; in particular, for a
2315 coindexed @var{ATOM}, if the remote image has stopped, it is assigned the value
2316 of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image
2317 has failed, the value @code{STAT_FAILED_IMAGE}.
2320 @item @emph{Standard}:
2321 Fortran 2008 and later; with @var{STAT}, TS 18508 or later
2323 @item @emph{Class}:
2324 Atomic subroutine
2326 @item @emph{Syntax}:
2327 @code{CALL ATOMIC_REF(VALUE, ATOM [, STAT])}
2329 @item @emph{Arguments}:
2330 @multitable @columnfractions .15 .70
2331 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2332 is different, the value is converted to the kind of @var{ATOM}.
2333 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of either integer
2334 type with @code{ATOMIC_INT_KIND} kind or logical type with
2335 @code{ATOMIC_LOGICAL_KIND} kind.
2336 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2337 @end multitable
2339 @item @emph{Example}:
2340 @smallexample
2341 program atomic
2342   use iso_fortran_env
2343   logical(atomic_logical_kind) :: atom[*]
2344   logical :: val
2345   call atomic_ref (atom, .false.)
2346   ! ...
2347   call atomic_ref (atom, val)
2348   if (val) then
2349     print *, "Obtained"
2350   end if
2351 end program atomic
2352 @end smallexample
2354 @item @emph{See also}:
2355 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_CAS}, @ref{ISO_FORTRAN_ENV},
2356 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_OR},
2357 @ref{ATOMIC_FETCH_XOR}
2358 @end table
2361 @node ATOMIC_XOR
2362 @section @code{ATOMIC_XOR} --- Atomic bitwise OR operation
2363 @fnindex ATOMIC_XOR
2364 @cindex Atomic subroutine, XOR
2366 @table @asis
2367 @item @emph{Description}:
2368 @code{ATOMIC_AND(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
2369 XOR between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
2370 and the invocation was successful, it is assigned the value 0. If it is present
2371 and the invocation has failed, it is assigned a positive value; in particular,
2372 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
2373 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
2374 image has failed, the value @code{STAT_FAILED_IMAGE}.
2376 @item @emph{Standard}:
2377 TS 18508 or later
2379 @item @emph{Class}:
2380 Atomic subroutine
2382 @item @emph{Syntax}:
2383 @code{CALL ATOMIC_XOR (ATOM, VALUE [, STAT])}
2385 @item @emph{Arguments}:
2386 @multitable @columnfractions .15 .70
2387 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
2388 type with @code{ATOMIC_INT_KIND} kind.
2389 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
2390 is different, the value is converted to the kind of @var{ATOM}.
2391 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
2392 @end multitable
2394 @item @emph{Example}:
2395 @smallexample
2396 program atomic
2397   use iso_fortran_env
2398   integer(atomic_int_kind) :: atom[*]
2399   call atomic_xor (atom[1], int(b'10100011101'))
2400 end program atomic
2401 @end smallexample
2403 @item @emph{See also}:
2404 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_XOR}, @ref{ISO_FORTRAN_ENV},
2405 @ref{ATOMIC_ADD}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
2406 @end table
2409 @node BACKTRACE
2410 @section @code{BACKTRACE} --- Show a backtrace
2411 @fnindex BACKTRACE
2412 @cindex backtrace
2414 @table @asis
2415 @item @emph{Description}:
2416 @code{BACKTRACE} shows a backtrace at an arbitrary place in user code. Program
2417 execution continues normally afterwards. The backtrace information is printed
2418 to the unit corresponding to @code{ERROR_UNIT} in @code{ISO_FORTRAN_ENV}.
2420 @item @emph{Standard}:
2421 GNU Extension
2423 @item @emph{Class}:
2424 Subroutine
2426 @item @emph{Syntax}:
2427 @code{CALL BACKTRACE}
2429 @item @emph{Arguments}:
2430 None
2432 @item @emph{See also}:
2433 @ref{ABORT}
2434 @end table
2438 @node BESSEL_J0
2439 @section @code{BESSEL_J0} --- Bessel function of the first kind of order 0
2440 @fnindex BESSEL_J0
2441 @fnindex BESJ0
2442 @fnindex DBESJ0
2443 @cindex Bessel function, first kind
2445 @table @asis
2446 @item @emph{Description}:
2447 @code{BESSEL_J0(X)} computes the Bessel function of the first kind of
2448 order 0 of @var{X}. This function is available under the name
2449 @code{BESJ0} as a GNU extension.
2451 @item @emph{Standard}:
2452 Fortran 2008 and later
2454 @item @emph{Class}:
2455 Elemental function
2457 @item @emph{Syntax}:
2458 @code{RESULT = BESSEL_J0(X)}
2460 @item @emph{Arguments}:
2461 @multitable @columnfractions .15 .70
2462 @item @var{X} @tab The type shall be @code{REAL}.
2463 @end multitable
2465 @item @emph{Return value}:
2466 The return value is of type @code{REAL} and lies in the
2467 range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. It has the same
2468 kind as @var{X}.
2470 @item @emph{Example}:
2471 @smallexample
2472 program test_besj0
2473   real(8) :: x = 0.0_8
2474   x = bessel_j0(x)
2475 end program test_besj0
2476 @end smallexample
2478 @item @emph{Specific names}:
2479 @multitable @columnfractions .20 .20 .20 .25
2480 @item Name            @tab Argument          @tab Return type       @tab Standard
2481 @item @code{DBESJ0(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}   @tab GNU extension
2482 @end multitable
2483 @end table
2487 @node BESSEL_J1
2488 @section @code{BESSEL_J1} --- Bessel function of the first kind of order 1
2489 @fnindex BESSEL_J1
2490 @fnindex BESJ1
2491 @fnindex DBESJ1
2492 @cindex Bessel function, first kind
2494 @table @asis
2495 @item @emph{Description}:
2496 @code{BESSEL_J1(X)} computes the Bessel function of the first kind of
2497 order 1 of @var{X}. This function is available under the name
2498 @code{BESJ1} as a GNU extension.
2500 @item @emph{Standard}:
2501 Fortran 2008
2503 @item @emph{Class}:
2504 Elemental function
2506 @item @emph{Syntax}:
2507 @code{RESULT = BESSEL_J1(X)}
2509 @item @emph{Arguments}:
2510 @multitable @columnfractions .15 .70
2511 @item @var{X} @tab The type shall be @code{REAL}.
2512 @end multitable
2514 @item @emph{Return value}:
2515 The return value is of type @code{REAL} and lies in the
2516 range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. It has the same
2517 kind as @var{X}.
2519 @item @emph{Example}:
2520 @smallexample
2521 program test_besj1
2522   real(8) :: x = 1.0_8
2523   x = bessel_j1(x)
2524 end program test_besj1
2525 @end smallexample
2527 @item @emph{Specific names}:
2528 @multitable @columnfractions .20 .20 .20 .25
2529 @item Name             @tab Argument          @tab Return type       @tab Standard
2530 @item @code{DBESJ1(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
2531 @end multitable
2532 @end table
2536 @node BESSEL_JN
2537 @section @code{BESSEL_JN} --- Bessel function of the first kind
2538 @fnindex BESSEL_JN
2539 @fnindex BESJN
2540 @fnindex DBESJN
2541 @cindex Bessel function, first kind
2543 @table @asis
2544 @item @emph{Description}:
2545 @code{BESSEL_JN(N, X)} computes the Bessel function of the first kind of
2546 order @var{N} of @var{X}. This function is available under the name
2547 @code{BESJN} as a GNU extension.  If @var{N} and @var{X} are arrays,
2548 their ranks and shapes shall conform.  
2550 @code{BESSEL_JN(N1, N2, X)} returns an array with the Bessel functions
2551 of the first kind of the orders @var{N1} to @var{N2}.
2553 @item @emph{Standard}:
2554 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
2556 @item @emph{Class}:
2557 Elemental function, except for the transformational function
2558 @code{BESSEL_JN(N1, N2, X)}
2560 @item @emph{Syntax}:
2561 @multitable @columnfractions .80
2562 @item @code{RESULT = BESSEL_JN(N, X)}
2563 @item @code{RESULT = BESSEL_JN(N1, N2, X)}
2564 @end multitable
2566 @item @emph{Arguments}:
2567 @multitable @columnfractions .15 .70
2568 @item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER}.
2569 @item @var{N1} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
2570 @item @var{N2} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
2571 @item @var{X} @tab Shall be a scalar or an array of type  @code{REAL};
2572 for @code{BESSEL_JN(N1, N2, X)} it shall be scalar.
2573 @end multitable
2575 @item @emph{Return value}:
2576 The return value is a scalar of type @code{REAL}. It has the same
2577 kind as @var{X}.
2579 @item @emph{Note}:
2580 The transformational function uses a recurrence algorithm which might,
2581 for some values of @var{X}, lead to different results than calls to
2582 the elemental function.
2584 @item @emph{Example}:
2585 @smallexample
2586 program test_besjn
2587   real(8) :: x = 1.0_8
2588   x = bessel_jn(5,x)
2589 end program test_besjn
2590 @end smallexample
2592 @item @emph{Specific names}:
2593 @multitable @columnfractions .20 .20 .20 .25
2594 @item Name                @tab Argument            @tab Return type       @tab Standard
2595 @item @code{DBESJN(N, X)} @tab @code{INTEGER N}    @tab @code{REAL(8)}    @tab GNU extension
2596 @item                     @tab @code{REAL(8) X}    @tab                   @tab
2597 @end multitable
2598 @end table
2602 @node BESSEL_Y0
2603 @section @code{BESSEL_Y0} --- Bessel function of the second kind of order 0
2604 @fnindex BESSEL_Y0
2605 @fnindex BESY0
2606 @fnindex DBESY0
2607 @cindex Bessel function, second kind
2609 @table @asis
2610 @item @emph{Description}:
2611 @code{BESSEL_Y0(X)} computes the Bessel function of the second kind of
2612 order 0 of @var{X}. This function is available under the name
2613 @code{BESY0} as a GNU extension.
2615 @item @emph{Standard}:
2616 Fortran 2008 and later
2618 @item @emph{Class}:
2619 Elemental function
2621 @item @emph{Syntax}:
2622 @code{RESULT = BESSEL_Y0(X)}
2624 @item @emph{Arguments}:
2625 @multitable @columnfractions .15 .70
2626 @item @var{X} @tab The type shall be @code{REAL}.
2627 @end multitable
2629 @item @emph{Return value}:
2630 The return value is of type @code{REAL}. It has the same kind as @var{X}.
2632 @item @emph{Example}:
2633 @smallexample
2634 program test_besy0
2635   real(8) :: x = 0.0_8
2636   x = bessel_y0(x)
2637 end program test_besy0
2638 @end smallexample
2640 @item @emph{Specific names}:
2641 @multitable @columnfractions .20 .20 .20 .25
2642 @item Name            @tab Argument          @tab Return type       @tab Standard
2643 @item @code{DBESY0(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
2644 @end multitable
2645 @end table
2649 @node BESSEL_Y1
2650 @section @code{BESSEL_Y1} --- Bessel function of the second kind of order 1
2651 @fnindex BESSEL_Y1
2652 @fnindex BESY1
2653 @fnindex DBESY1
2654 @cindex Bessel function, second kind
2656 @table @asis
2657 @item @emph{Description}:
2658 @code{BESSEL_Y1(X)} computes the Bessel function of the second kind of
2659 order 1 of @var{X}. This function is available under the name
2660 @code{BESY1} as a GNU extension.
2662 @item @emph{Standard}:
2663 Fortran 2008 and later
2665 @item @emph{Class}:
2666 Elemental function
2668 @item @emph{Syntax}:
2669 @code{RESULT = BESSEL_Y1(X)}
2671 @item @emph{Arguments}:
2672 @multitable @columnfractions .15 .70
2673 @item @var{X} @tab The type shall be @code{REAL}.
2674 @end multitable
2676 @item @emph{Return value}:
2677 The return value is of type @code{REAL}. It has the same kind as @var{X}.
2679 @item @emph{Example}:
2680 @smallexample
2681 program test_besy1
2682   real(8) :: x = 1.0_8
2683   x = bessel_y1(x)
2684 end program test_besy1
2685 @end smallexample
2687 @item @emph{Specific names}:
2688 @multitable @columnfractions .20 .20 .20 .25
2689 @item Name            @tab Argument          @tab Return type       @tab Standard
2690 @item @code{DBESY1(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
2691 @end multitable
2692 @end table
2696 @node BESSEL_YN
2697 @section @code{BESSEL_YN} --- Bessel function of the second kind
2698 @fnindex BESSEL_YN
2699 @fnindex BESYN
2700 @fnindex DBESYN
2701 @cindex Bessel function, second kind
2703 @table @asis
2704 @item @emph{Description}:
2705 @code{BESSEL_YN(N, X)} computes the Bessel function of the second kind of
2706 order @var{N} of @var{X}. This function is available under the name
2707 @code{BESYN} as a GNU extension.  If @var{N} and @var{X} are arrays,
2708 their ranks and shapes shall conform.  
2710 @code{BESSEL_YN(N1, N2, X)} returns an array with the Bessel functions
2711 of the first kind of the orders @var{N1} to @var{N2}.
2713 @item @emph{Standard}:
2714 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
2716 @item @emph{Class}:
2717 Elemental function, except for the transformational function
2718 @code{BESSEL_YN(N1, N2, X)}
2720 @item @emph{Syntax}:
2721 @multitable @columnfractions .80
2722 @item @code{RESULT = BESSEL_YN(N, X)}
2723 @item @code{RESULT = BESSEL_YN(N1, N2, X)}
2724 @end multitable
2726 @item @emph{Arguments}:
2727 @multitable @columnfractions .15 .70
2728 @item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER} .
2729 @item @var{N1} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
2730 @item @var{N2} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
2731 @item @var{X} @tab Shall be a scalar or an array of type  @code{REAL};
2732 for @code{BESSEL_YN(N1, N2, X)} it shall be scalar.
2733 @end multitable
2735 @item @emph{Return value}:
2736 The return value is a scalar of type @code{REAL}. It has the same
2737 kind as @var{X}.
2739 @item @emph{Note}:
2740 The transformational function uses a recurrence algorithm which might,
2741 for some values of @var{X}, lead to different results than calls to
2742 the elemental function.
2744 @item @emph{Example}:
2745 @smallexample
2746 program test_besyn
2747   real(8) :: x = 1.0_8
2748   x = bessel_yn(5,x)
2749 end program test_besyn
2750 @end smallexample
2752 @item @emph{Specific names}:
2753 @multitable @columnfractions .20 .20 .20 .25
2754 @item Name               @tab Argument            @tab Return type     @tab Standard
2755 @item @code{DBESYN(N,X)} @tab @code{INTEGER N} @tab @code{REAL(8)}  @tab GNU extension
2756 @item                    @tab @code{REAL(8) X} @tab                 @tab 
2757 @end multitable
2758 @end table
2762 @node BGE
2763 @section @code{BGE} --- Bitwise greater than or equal to
2764 @fnindex BGE
2765 @cindex bitwise comparison
2767 @table @asis
2768 @item @emph{Description}:
2769 Determines whether an integral is a bitwise greater than or equal to
2770 another.
2772 @item @emph{Standard}:
2773 Fortran 2008 and later
2775 @item @emph{Class}:
2776 Elemental function
2778 @item @emph{Syntax}:
2779 @code{RESULT = BGE(I, J)}
2781 @item @emph{Arguments}:
2782 @multitable @columnfractions .15 .70
2783 @item @var{I} @tab Shall be of @code{INTEGER} type.
2784 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2785 as @var{I}.
2786 @end multitable
2788 @item @emph{Return value}:
2789 The return value is of type @code{LOGICAL} and of the default kind.
2791 @item @emph{See also}:
2792 @ref{BGT}, @ref{BLE}, @ref{BLT}
2793 @end table
2797 @node BGT
2798 @section @code{BGT} --- Bitwise greater than
2799 @fnindex BGT
2800 @cindex bitwise comparison
2802 @table @asis
2803 @item @emph{Description}:
2804 Determines whether an integral is a bitwise greater than another.
2806 @item @emph{Standard}:
2807 Fortran 2008 and later
2809 @item @emph{Class}:
2810 Elemental function
2812 @item @emph{Syntax}:
2813 @code{RESULT = BGT(I, J)}
2815 @item @emph{Arguments}:
2816 @multitable @columnfractions .15 .70
2817 @item @var{I} @tab Shall be of @code{INTEGER} type.
2818 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2819 as @var{I}.
2820 @end multitable
2822 @item @emph{Return value}:
2823 The return value is of type @code{LOGICAL} and of the default kind.
2825 @item @emph{See also}:
2826 @ref{BGE}, @ref{BLE}, @ref{BLT}
2827 @end table
2831 @node BIT_SIZE
2832 @section @code{BIT_SIZE} --- Bit size inquiry function
2833 @fnindex BIT_SIZE
2834 @cindex bits, number of
2835 @cindex size of a variable, in bits
2837 @table @asis
2838 @item @emph{Description}:
2839 @code{BIT_SIZE(I)} returns the number of bits (integer precision plus sign bit)
2840 represented by the type of @var{I}.  The result of @code{BIT_SIZE(I)} is
2841 independent of the actual value of @var{I}.
2843 @item @emph{Standard}:
2844 Fortran 95 and later
2846 @item @emph{Class}:
2847 Inquiry function
2849 @item @emph{Syntax}:
2850 @code{RESULT = BIT_SIZE(I)}
2852 @item @emph{Arguments}:
2853 @multitable @columnfractions .15 .70
2854 @item @var{I} @tab The type shall be @code{INTEGER}.
2855 @end multitable
2857 @item @emph{Return value}:
2858 The return value is of type @code{INTEGER}
2860 @item @emph{Example}:
2861 @smallexample
2862 program test_bit_size
2863     integer :: i = 123
2864     integer :: size
2865     size = bit_size(i)
2866     print *, size
2867 end program test_bit_size
2868 @end smallexample
2869 @end table
2873 @node BLE
2874 @section @code{BLE} --- Bitwise less than or equal to
2875 @fnindex BLE
2876 @cindex bitwise comparison
2878 @table @asis
2879 @item @emph{Description}:
2880 Determines whether an integral is a bitwise less than or equal to
2881 another.
2883 @item @emph{Standard}:
2884 Fortran 2008 and later
2886 @item @emph{Class}:
2887 Elemental function
2889 @item @emph{Syntax}:
2890 @code{RESULT = BLE(I, J)}
2892 @item @emph{Arguments}:
2893 @multitable @columnfractions .15 .70
2894 @item @var{I} @tab Shall be of @code{INTEGER} type.
2895 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2896 as @var{I}.
2897 @end multitable
2899 @item @emph{Return value}:
2900 The return value is of type @code{LOGICAL} and of the default kind.
2902 @item @emph{See also}:
2903 @ref{BGT}, @ref{BGE}, @ref{BLT}
2904 @end table
2908 @node BLT
2909 @section @code{BLT} --- Bitwise less than
2910 @fnindex BLT
2911 @cindex bitwise comparison
2913 @table @asis
2914 @item @emph{Description}:
2915 Determines whether an integral is a bitwise less than another.
2917 @item @emph{Standard}:
2918 Fortran 2008 and later
2920 @item @emph{Class}:
2921 Elemental function
2923 @item @emph{Syntax}:
2924 @code{RESULT = BLT(I, J)}
2926 @item @emph{Arguments}:
2927 @multitable @columnfractions .15 .70
2928 @item @var{I} @tab Shall be of @code{INTEGER} type.
2929 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2930 as @var{I}.
2931 @end multitable
2933 @item @emph{Return value}:
2934 The return value is of type @code{LOGICAL} and of the default kind.
2936 @item @emph{See also}:
2937 @ref{BGE}, @ref{BGT}, @ref{BLE}
2938 @end table
2942 @node BTEST
2943 @section @code{BTEST} --- Bit test function
2944 @fnindex BTEST
2945 @fnindex BBTEST
2946 @fnindex BITEST
2947 @fnindex BJTEST
2948 @fnindex BKTEST
2949 @cindex bits, testing
2951 @table @asis
2952 @item @emph{Description}:
2953 @code{BTEST(I,POS)} returns logical @code{.TRUE.} if the bit at @var{POS}
2954 in @var{I} is set.  The counting of the bits starts at 0.
2956 @item @emph{Standard}:
2957 Fortran 95 and later, has overloads that are GNU extensions
2959 @item @emph{Class}:
2960 Elemental function
2962 @item @emph{Syntax}:
2963 @code{RESULT = BTEST(I, POS)}
2965 @item @emph{Arguments}:
2966 @multitable @columnfractions .15 .70
2967 @item @var{I} @tab The type shall be @code{INTEGER}.
2968 @item @var{POS} @tab The type shall be @code{INTEGER}.
2969 @end multitable
2971 @item @emph{Return value}:
2972 The return value is of type @code{LOGICAL}
2974 @item @emph{Example}:
2975 @smallexample
2976 program test_btest
2977     integer :: i = 32768 + 1024 + 64
2978     integer :: pos
2979     logical :: bool
2980     do pos=0,16
2981         bool = btest(i, pos) 
2982         print *, pos, bool
2983     end do
2984 end program test_btest
2985 @end smallexample
2987 @item @emph{Specific names}:
2988 @multitable @columnfractions .20 .20 .20 .25
2989 @item Name           @tab Argument         @tab Return type             @tab Standard
2990 @item @code{BTEST(I,POS)} @tab @code{INTEGER I,POS} @tab @code{LOGICAL} @tab F95 and later
2991 @item @code{BBTEST(I,POS)} @tab @code{INTEGER(1) I,POS} @tab @code{LOGICAL(1)} @tab GNU extension
2992 @item @code{BITEST(I,POS)} @tab @code{INTEGER(2) I,POS} @tab @code{LOGICAL(2)} @tab GNU extension
2993 @item @code{BJTEST(I,POS)} @tab @code{INTEGER(4) I,POS} @tab @code{LOGICAL(4)} @tab GNU extension
2994 @item @code{BKTEST(I,POS)} @tab @code{INTEGER(8) I,POS} @tab @code{LOGICAL(8)} @tab GNU extension
2995 @end multitable
2996 @end table
2998 @node C_ASSOCIATED
2999 @section @code{C_ASSOCIATED} --- Status of a C pointer
3000 @fnindex C_ASSOCIATED
3001 @cindex association status, C pointer
3002 @cindex pointer, C association status
3004 @table @asis
3005 @item @emph{Description}:
3006 @code{C_ASSOCIATED(c_ptr_1[, c_ptr_2])} determines the status of the C pointer
3007 @var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}.
3009 @item @emph{Standard}:
3010 Fortran 2003 and later
3012 @item @emph{Class}:
3013 Inquiry function
3015 @item @emph{Syntax}:
3016 @code{RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])}
3018 @item @emph{Arguments}:
3019 @multitable @columnfractions .15 .70
3020 @item @var{c_ptr_1} @tab Scalar of the type @code{C_PTR} or @code{C_FUNPTR}.
3021 @item @var{c_ptr_2} @tab (Optional) Scalar of the same type as @var{c_ptr_1}.
3022 @end multitable
3024 @item @emph{Return value}:
3025 The return value is of type @code{LOGICAL}; it is @code{.false.} if either
3026 @var{c_ptr_1} is a C NULL pointer or if @var{c_ptr1} and @var{c_ptr_2}
3027 point to different addresses.
3029 @item @emph{Example}:
3030 @smallexample
3031 subroutine association_test(a,b)
3032   use iso_c_binding, only: c_associated, c_loc, c_ptr
3033   implicit none
3034   real, pointer :: a
3035   type(c_ptr) :: b
3036   if(c_associated(b, c_loc(a))) &
3037      stop 'b and a do not point to same target'
3038 end subroutine association_test
3039 @end smallexample
3041 @item @emph{See also}:
3042 @ref{C_LOC}, @ref{C_FUNLOC}
3043 @end table
3046 @node C_F_POINTER
3047 @section @code{C_F_POINTER} --- Convert C into Fortran pointer
3048 @fnindex C_F_POINTER
3049 @cindex pointer, convert C to Fortran
3051 @table @asis
3052 @item @emph{Description}:
3053 @code{C_F_POINTER(CPTR, FPTR[, SHAPE])} assigns the target of the C pointer
3054 @var{CPTR} to the Fortran pointer @var{FPTR} and specifies its shape.
3056 @item @emph{Standard}:
3057 Fortran 2003 and later
3059 @item @emph{Class}:
3060 Subroutine
3062 @item @emph{Syntax}:
3063 @code{CALL C_F_POINTER(CPTR, FPTR[, SHAPE])}
3065 @item @emph{Arguments}:
3066 @multitable @columnfractions .15 .70
3067 @item @var{CPTR}  @tab scalar of the type @code{C_PTR}. It is
3068 @code{INTENT(IN)}.
3069 @item @var{FPTR}  @tab pointer interoperable with @var{cptr}. It is
3070 @code{INTENT(OUT)}.
3071 @item @var{SHAPE} @tab (Optional) Rank-one array of type @code{INTEGER}
3072 with @code{INTENT(IN)}. It shall be present
3073 if and only if @var{fptr} is an array. The size
3074 must be equal to the rank of @var{fptr}.
3075 @end multitable
3077 @item @emph{Example}:
3078 @smallexample
3079 program main
3080   use iso_c_binding
3081   implicit none
3082   interface
3083     subroutine my_routine(p) bind(c,name='myC_func')
3084       import :: c_ptr
3085       type(c_ptr), intent(out) :: p
3086     end subroutine
3087   end interface
3088   type(c_ptr) :: cptr
3089   real,pointer :: a(:)
3090   call my_routine(cptr)
3091   call c_f_pointer(cptr, a, [12])
3092 end program main
3093 @end smallexample
3095 @item @emph{See also}:
3096 @ref{C_LOC}, @ref{C_F_PROCPOINTER}
3097 @end table
3100 @node C_F_PROCPOINTER
3101 @section @code{C_F_PROCPOINTER} --- Convert C into Fortran procedure pointer
3102 @fnindex C_F_PROCPOINTER
3103 @cindex pointer, C address of pointers
3105 @table @asis
3106 @item @emph{Description}:
3107 @code{C_F_PROCPOINTER(CPTR, FPTR)} Assign the target of the C function pointer
3108 @var{CPTR} to the Fortran procedure pointer @var{FPTR}.
3110 @item @emph{Standard}:
3111 Fortran 2003 and later
3113 @item @emph{Class}:
3114 Subroutine
3116 @item @emph{Syntax}:
3117 @code{CALL C_F_PROCPOINTER(cptr, fptr)}
3119 @item @emph{Arguments}:
3120 @multitable @columnfractions .15 .70
3121 @item @var{CPTR}  @tab scalar of the type @code{C_FUNPTR}. It is
3122 @code{INTENT(IN)}.
3123 @item @var{FPTR}  @tab procedure pointer interoperable with @var{cptr}. It is
3124 @code{INTENT(OUT)}.
3125 @end multitable
3127 @item @emph{Example}:
3128 @smallexample
3129 program main
3130   use iso_c_binding
3131   implicit none
3132   abstract interface
3133     function func(a)
3134       import :: c_float
3135       real(c_float), intent(in) :: a
3136       real(c_float) :: func
3137     end function
3138   end interface
3139   interface
3140      function getIterFunc() bind(c,name="getIterFunc")
3141        import :: c_funptr
3142        type(c_funptr) :: getIterFunc
3143      end function
3144   end interface
3145   type(c_funptr) :: cfunptr
3146   procedure(func), pointer :: myFunc
3147   cfunptr = getIterFunc()
3148   call c_f_procpointer(cfunptr, myFunc)
3149 end program main
3150 @end smallexample
3152 @item @emph{See also}:
3153 @ref{C_LOC}, @ref{C_F_POINTER}
3154 @end table
3157 @node C_FUNLOC
3158 @section @code{C_FUNLOC} --- Obtain the C address of a procedure
3159 @fnindex C_FUNLOC
3160 @cindex pointer, C address of procedures
3162 @table @asis
3163 @item @emph{Description}:
3164 @code{C_FUNLOC(x)} determines the C address of the argument.
3166 @item @emph{Standard}:
3167 Fortran 2003 and later
3169 @item @emph{Class}:
3170 Inquiry function
3172 @item @emph{Syntax}:
3173 @code{RESULT = C_FUNLOC(x)}
3175 @item @emph{Arguments}:
3176 @multitable @columnfractions .15 .70
3177 @item @var{x} @tab Interoperable function or pointer to such function.
3178 @end multitable
3180 @item @emph{Return value}:
3181 The return value is of type @code{C_FUNPTR} and contains the C address
3182 of the argument.
3184 @item @emph{Example}:
3185 @smallexample
3186 module x
3187   use iso_c_binding
3188   implicit none
3189 contains
3190   subroutine sub(a) bind(c)
3191     real(c_float) :: a
3192     a = sqrt(a)+5.0
3193   end subroutine sub
3194 end module x
3195 program main
3196   use iso_c_binding
3197   use x
3198   implicit none
3199   interface
3200     subroutine my_routine(p) bind(c,name='myC_func')
3201       import :: c_funptr
3202       type(c_funptr), intent(in) :: p
3203     end subroutine
3204   end interface
3205   call my_routine(c_funloc(sub))
3206 end program main
3207 @end smallexample
3209 @item @emph{See also}:
3210 @ref{C_ASSOCIATED}, @ref{C_LOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
3211 @end table
3214 @node C_LOC
3215 @section @code{C_LOC} --- Obtain the C address of an object
3216 @fnindex C_LOC
3217 @cindex procedure pointer, convert C to Fortran
3219 @table @asis
3220 @item @emph{Description}:
3221 @code{C_LOC(X)} determines the C address of the argument.
3223 @item @emph{Standard}:
3224 Fortran 2003 and later
3226 @item @emph{Class}:
3227 Inquiry function
3229 @item @emph{Syntax}:
3230 @code{RESULT = C_LOC(X)}
3232 @item @emph{Arguments}:
3233 @multitable @columnfractions .10 .75
3234 @item @var{X} @tab  Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.
3236 @end multitable
3238 @item @emph{Return value}:
3239 The return value is of type @code{C_PTR} and contains the C address
3240 of the argument.
3242 @item @emph{Example}:
3243 @smallexample
3244 subroutine association_test(a,b)
3245   use iso_c_binding, only: c_associated, c_loc, c_ptr
3246   implicit none
3247   real, pointer :: a
3248   type(c_ptr) :: b
3249   if(c_associated(b, c_loc(a))) &
3250      stop 'b and a do not point to same target'
3251 end subroutine association_test
3252 @end smallexample
3254 @item @emph{See also}:
3255 @ref{C_ASSOCIATED}, @ref{C_FUNLOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
3256 @end table
3259 @node C_SIZEOF
3260 @section @code{C_SIZEOF} --- Size in bytes of an expression
3261 @fnindex C_SIZEOF
3262 @cindex expression size
3263 @cindex size of an expression
3265 @table @asis
3266 @item @emph{Description}:
3267 @code{C_SIZEOF(X)} calculates the number of bytes of storage the
3268 expression @code{X} occupies.
3270 @item @emph{Standard}:
3271 Fortran 2008
3273 @item @emph{Class}:
3274 Inquiry function of the module @code{ISO_C_BINDING}
3276 @item @emph{Syntax}:
3277 @code{N = C_SIZEOF(X)}
3279 @item @emph{Arguments}:
3280 @multitable @columnfractions .15 .70
3281 @item @var{X} @tab The argument shall be an interoperable data entity.
3282 @end multitable
3284 @item @emph{Return value}:
3285 The return value is of type integer and of the system-dependent kind
3286 @code{C_SIZE_T} (from the @code{ISO_C_BINDING} module). Its value is the
3287 number of bytes occupied by the argument.  If the argument has the
3288 @code{POINTER} attribute, the number of bytes of the storage area pointed
3289 to is returned.  If the argument is of a derived type with @code{POINTER}
3290 or @code{ALLOCATABLE} components, the return value does not account for
3291 the sizes of the data pointed to by these components.
3293 @item @emph{Example}:
3294 @smallexample
3295    use iso_c_binding
3296    integer(c_int) :: i
3297    real(c_float) :: r, s(5)
3298    print *, (c_sizeof(s)/c_sizeof(r) == 5)
3299    end
3300 @end smallexample
3301 The example will print @code{.TRUE.} unless you are using a platform
3302 where default @code{REAL} variables are unusually padded.
3304 @item @emph{See also}:
3305 @ref{SIZEOF}, @ref{STORAGE_SIZE}
3306 @end table
3309 @node CEILING
3310 @section @code{CEILING} --- Integer ceiling function
3311 @fnindex CEILING
3312 @cindex ceiling
3313 @cindex rounding, ceiling
3315 @table @asis
3316 @item @emph{Description}:
3317 @code{CEILING(A)} returns the least integer greater than or equal to @var{A}.
3319 @item @emph{Standard}:
3320 Fortran 95 and later
3322 @item @emph{Class}:
3323 Elemental function
3325 @item @emph{Syntax}:
3326 @code{RESULT = CEILING(A [, KIND])}
3328 @item @emph{Arguments}:
3329 @multitable @columnfractions .15 .70
3330 @item @var{A} @tab The type shall be @code{REAL}.
3331 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
3332 expression indicating the kind parameter of the result.
3333 @end multitable
3335 @item @emph{Return value}:
3336 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
3337 and a default-kind @code{INTEGER} otherwise.
3339 @item @emph{Example}:
3340 @smallexample
3341 program test_ceiling
3342     real :: x = 63.29
3343     real :: y = -63.59
3344     print *, ceiling(x) ! returns 64
3345     print *, ceiling(y) ! returns -63
3346 end program test_ceiling
3347 @end smallexample
3349 @item @emph{See also}:
3350 @ref{FLOOR}, @ref{NINT}
3352 @end table
3356 @node CHAR
3357 @section @code{CHAR} --- Character conversion function
3358 @fnindex CHAR
3359 @cindex conversion, to character
3361 @table @asis
3362 @item @emph{Description}:
3363 @code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}.
3365 @item @emph{Standard}:
3366 Fortran 77 and later
3368 @item @emph{Class}:
3369 Elemental function
3371 @item @emph{Syntax}:
3372 @code{RESULT = CHAR(I [, KIND])}
3374 @item @emph{Arguments}:
3375 @multitable @columnfractions .15 .70
3376 @item @var{I} @tab The type shall be @code{INTEGER}.
3377 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
3378 expression indicating the kind parameter of the result.
3379 @end multitable
3381 @item @emph{Return value}:
3382 The return value is of type @code{CHARACTER(1)}
3384 @item @emph{Example}:
3385 @smallexample
3386 program test_char
3387     integer :: i = 74
3388     character(1) :: c
3389     c = char(i)
3390     print *, i, c ! returns 'J'
3391 end program test_char
3392 @end smallexample
3394 @item @emph{Specific names}:
3395 @multitable @columnfractions .20 .20 .20 .25
3396 @item Name           @tab Argument         @tab Return type             @tab Standard
3397 @item @code{CHAR(I)} @tab @code{INTEGER I} @tab @code{CHARACTER(LEN=1)} @tab F77 and later
3398 @end multitable
3400 @item @emph{Note}:
3401 See @ref{ICHAR} for a discussion of converting between numerical values
3402 and formatted string representations.
3404 @item @emph{See also}:
3405 @ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR}
3407 @end table
3411 @node CHDIR
3412 @section @code{CHDIR} --- Change working directory
3413 @fnindex CHDIR
3414 @cindex system, working directory
3416 @table @asis
3417 @item @emph{Description}:
3418 Change current working directory to a specified path.
3420 This intrinsic is provided in both subroutine and function forms; however,
3421 only one form can be used in any given program unit.
3423 @item @emph{Standard}:
3424 GNU extension
3426 @item @emph{Class}:
3427 Subroutine, function
3429 @item @emph{Syntax}:
3430 @multitable @columnfractions .80
3431 @item @code{CALL CHDIR(NAME [, STATUS])}
3432 @item @code{STATUS = CHDIR(NAME)}
3433 @end multitable
3435 @item @emph{Arguments}:
3436 @multitable @columnfractions .15 .70
3437 @item @var{NAME}   @tab The type shall be @code{CHARACTER} of default
3438 kind and shall specify a valid path within the file system.
3439 @item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default
3440 kind.  Returns 0 on success, and a system specific and nonzero error code
3441 otherwise.
3442 @end multitable
3444 @item @emph{Example}:
3445 @smallexample
3446 PROGRAM test_chdir
3447   CHARACTER(len=255) :: path
3448   CALL getcwd(path)
3449   WRITE(*,*) TRIM(path)
3450   CALL chdir("/tmp")
3451   CALL getcwd(path)
3452   WRITE(*,*) TRIM(path)
3453 END PROGRAM
3454 @end smallexample
3456 @item @emph{See also}:
3457 @ref{GETCWD}
3458 @end table
3462 @node CHMOD
3463 @section @code{CHMOD} --- Change access permissions of files
3464 @fnindex CHMOD
3465 @cindex file system, change access mode
3467 @table @asis
3468 @item @emph{Description}:
3469 @code{CHMOD} changes the permissions of a file.
3471 This intrinsic is provided in both subroutine and function forms; however,
3472 only one form can be used in any given program unit.
3474 @item @emph{Standard}:
3475 GNU extension
3477 @item @emph{Class}:
3478 Subroutine, function
3480 @item @emph{Syntax}:
3481 @multitable @columnfractions .80
3482 @item @code{CALL CHMOD(NAME, MODE[, STATUS])}
3483 @item @code{STATUS = CHMOD(NAME, MODE)}
3484 @end multitable
3486 @item @emph{Arguments}:
3487 @multitable @columnfractions .15 .70
3489 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
3490 file name. Trailing blanks are ignored unless the character
3491 @code{achar(0)} is present, then all characters up to and excluding
3492 @code{achar(0)} are used as the file name.
3494 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind giving the
3495 file permission. @var{MODE} uses the same syntax as the @code{chmod} utility
3496 as defined by the POSIX standard. The argument shall either be a string of
3497 a nonnegative octal number or a symbolic mode.
3499 @item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is
3500 @code{0} on success and nonzero otherwise.
3501 @end multitable
3503 @item @emph{Return value}:
3504 In either syntax, @var{STATUS} is set to @code{0} on success and nonzero
3505 otherwise.
3507 @item @emph{Example}:
3508 @code{CHMOD} as subroutine
3509 @smallexample
3510 program chmod_test
3511   implicit none
3512   integer :: status
3513   call chmod('test.dat','u+x',status)
3514   print *, 'Status: ', status
3515 end program chmod_test
3516 @end smallexample
3517 @code{CHMOD} as function:
3518 @smallexample
3519 program chmod_test
3520   implicit none
3521   integer :: status
3522   status = chmod('test.dat','u+x')
3523   print *, 'Status: ', status
3524 end program chmod_test
3525 @end smallexample
3527 @end table
3531 @node CMPLX
3532 @section @code{CMPLX} --- Complex conversion function
3533 @fnindex CMPLX
3534 @cindex complex numbers, conversion to
3535 @cindex conversion, to complex
3537 @table @asis
3538 @item @emph{Description}:
3539 @code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to
3540 the real component.  If @var{Y} is present it is converted to the imaginary
3541 component.  If @var{Y} is not present then the imaginary component is set to
3542 0.0.  If @var{X} is complex then @var{Y} must not be present.
3544 @item @emph{Standard}:
3545 Fortran 77 and later
3547 @item @emph{Class}:
3548 Elemental function
3550 @item @emph{Syntax}:
3551 @code{RESULT = CMPLX(X [, Y [, KIND]])}
3553 @item @emph{Arguments}:
3554 @multitable @columnfractions .15 .70
3555 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
3556 or @code{COMPLEX}.
3557 @item @var{Y} @tab (Optional; only allowed if @var{X} is not
3558 @code{COMPLEX}.)  May be @code{INTEGER} or @code{REAL}.
3559 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
3560 expression indicating the kind parameter of the result.
3561 @end multitable
3563 @item @emph{Return value}:
3564 The return value is of @code{COMPLEX} type, with a kind equal to
3565 @var{KIND} if it is specified.  If @var{KIND} is not specified, the
3566 result is of the default @code{COMPLEX} kind, regardless of the kinds of
3567 @var{X} and @var{Y}. 
3569 @item @emph{Example}:
3570 @smallexample
3571 program test_cmplx
3572     integer :: i = 42
3573     real :: x = 3.14
3574     complex :: z
3575     z = cmplx(i, x)
3576     print *, z, cmplx(x)
3577 end program test_cmplx
3578 @end smallexample
3580 @item @emph{See also}:
3581 @ref{COMPLEX}
3582 @end table
3586 @node CO_BROADCAST
3587 @section @code{CO_BROADCAST} --- Copy a value to all images the current set of images
3588 @fnindex CO_BROADCAST
3589 @cindex Collectives, value broadcasting
3591 @table @asis
3592 @item @emph{Description}:
3593 @code{CO_BROADCAST} copies the value of argument @var{A} on the image with
3594 image index @code{SOURCE_IMAGE} to all images in the current team.  @var{A}
3595 becomes defined as if by intrinsic assignment.  If the execution was
3596 successful and @var{STAT} is present, it is assigned the value zero.  If the
3597 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
3598 @var{ERRMSG} gets assigned a value describing the occurred error.
3600 @item @emph{Standard}:
3601 Technical Specification (TS) 18508 or later
3603 @item @emph{Class}:
3604 Collective subroutine
3606 @item @emph{Syntax}:
3607 @code{CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])}
3609 @item @emph{Arguments}:
3610 @multitable @columnfractions .15 .70
3611 @item @var{A}            @tab INTENT(INOUT) argument; shall have the same
3612 dynamic type and type paramters on all images of the current team. If it
3613 is an array, it shall have the same shape on all images.
3614 @item @var{SOURCE_IMAGE} @tab a scalar integer expression.
3615 It shall have the same the same value on all images and refer to an
3616 image of the current team.
3617 @item @var{STAT}         @tab (optional) a scalar integer variable
3618 @item @var{ERRMSG}       @tab (optional) a scalar character variable
3619 @end multitable
3621 @item @emph{Example}:
3622 @smallexample
3623 program test
3624   integer :: val(3)
3625   if (this_image() == 1) then
3626     val = [1, 5, 3]
3627   end if
3628   call co_broadcast (val, source_image=1)
3629   print *, this_image, ":", val
3630 end program test
3631 @end smallexample
3633 @item @emph{See also}:
3634 @ref{CO_MAX}, @ref{CO_MIN}, @ref{CO_SUM}, @ref{CO_REDUCE}
3635 @end table
3639 @node CO_MAX
3640 @section @code{CO_MAX} --- Maximal value on the current set of images
3641 @fnindex CO_MAX
3642 @cindex Collectives, maximal value
3644 @table @asis
3645 @item @emph{Description}:
3646 @code{CO_MAX} determines element-wise the maximal value of @var{A} on all
3647 images of the current team.  If @var{RESULT_IMAGE} is present, the maximum
3648 values are returned in @var{A} on the specified image only and the value
3649 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
3650 not present, the value is returned on all images.  If the execution was
3651 successful and @var{STAT} is present, it is assigned the value zero.  If the
3652 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
3653 @var{ERRMSG} gets assigned a value describing the occurred error.
3655 @item @emph{Standard}:
3656 Technical Specification (TS) 18508 or later
3658 @item @emph{Class}:
3659 Collective subroutine
3661 @item @emph{Syntax}:
3662 @code{CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])}
3664 @item @emph{Arguments}:
3665 @multitable @columnfractions .15 .70
3666 @item @var{A}            @tab shall be an integer, real or character variable,
3667 which has the same type and type parameters on all images of the team.
3668 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
3669 present, it shall have the same the same value on all images and refer to an
3670 image of the current team.
3671 @item @var{STAT}         @tab (optional) a scalar integer variable
3672 @item @var{ERRMSG}       @tab (optional) a scalar character variable
3673 @end multitable
3675 @item @emph{Example}:
3676 @smallexample
3677 program test
3678   integer :: val
3679   val = this_image ()
3680   call co_max (val, result_image=1)
3681   if (this_image() == 1) then
3682     write(*,*) "Maximal value", val  ! prints num_images()
3683   end if
3684 end program test
3685 @end smallexample
3687 @item @emph{See also}:
3688 @ref{CO_MIN}, @ref{CO_SUM}, @ref{CO_REDUCE}, @ref{CO_BROADCAST}
3689 @end table
3693 @node CO_MIN
3694 @section @code{CO_MIN} --- Minimal value on the current set of images
3695 @fnindex CO_MIN
3696 @cindex Collectives, minimal value
3698 @table @asis
3699 @item @emph{Description}:
3700 @code{CO_MIN} determines element-wise the minimal value of @var{A} on all
3701 images of the current team.  If @var{RESULT_IMAGE} is present, the minimal
3702 values are returned in @var{A} on the specified image only and the value
3703 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
3704 not present, the value is returned on all images.  If the execution was
3705 successful and @var{STAT} is present, it is assigned the value zero.  If the
3706 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
3707 @var{ERRMSG} gets assigned a value describing the occurred error.
3709 @item @emph{Standard}:
3710 Technical Specification (TS) 18508 or later
3712 @item @emph{Class}:
3713 Collective subroutine
3715 @item @emph{Syntax}:
3716 @code{CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])}
3718 @item @emph{Arguments}:
3719 @multitable @columnfractions .15 .70
3720 @item @var{A}            @tab shall be an integer, real or character variable,
3721 which has the same type and type parameters on all images of the team.
3722 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
3723 present, it shall have the same the same value on all images and refer to an
3724 image of the current team.
3725 @item @var{STAT}         @tab (optional) a scalar integer variable
3726 @item @var{ERRMSG}       @tab (optional) a scalar character variable
3727 @end multitable
3729 @item @emph{Example}:
3730 @smallexample
3731 program test
3732   integer :: val
3733   val = this_image ()
3734   call co_min (val, result_image=1)
3735   if (this_image() == 1) then
3736     write(*,*) "Minimal value", val  ! prints 1
3737   end if
3738 end program test
3739 @end smallexample
3741 @item @emph{See also}:
3742 @ref{CO_MAX}, @ref{CO_SUM}, @ref{CO_REDUCE}, @ref{CO_BROADCAST}
3743 @end table
3747 @node CO_REDUCE
3748 @section @code{CO_REDUCE} --- Reduction of values on the current set of images
3749 @fnindex CO_REDUCE
3750 @cindex Collectives, generic reduction
3752 @table @asis
3753 @item @emph{Description}:
3754 @code{CO_REDUCE} determines element-wise the reduction of the value of @var{A}
3755 on all images of the current team.  The pure function passed as @var{OPERATOR}
3756 is used to pairwise reduce the values of @var{A} by passing either the value
3757 of @var{A} of different images or the result values of such a reduction as
3758 argument.  If @var{A} is an array, the deduction is done element wise. If
3759 @var{RESULT_IMAGE} is present, the result values are returned in @var{A} on
3760 the specified image only and the value of @var{A} on the other images become
3761 undefined.  If @var{RESULT_IMAGE} is not present, the value is returned on all
3762 images.  If the execution was successful and @var{STAT} is present, it is
3763 assigned the value zero.  If the execution failed, @var{STAT} gets assigned
3764 a nonzero value and, if present, @var{ERRMSG} gets assigned a value describing
3765 the occurred error.
3767 @item @emph{Standard}:
3768 Technical Specification (TS) 18508 or later
3770 @item @emph{Class}:
3771 Collective subroutine
3773 @item @emph{Syntax}:
3774 @code{CALL CO_REDUCE(A, OPERATOR, [, RESULT_IMAGE, STAT, ERRMSG])}
3776 @item @emph{Arguments}:
3777 @multitable @columnfractions .15 .70
3778 @item @var{A}            @tab is an @code{INTENT(INOUT)} argument and shall be
3779 nonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer,
3780 it shall be associated.  @var{A} shall have the same type and type parameters on
3781 all images of the team; if it is an array, it shall have the same shape on all
3782 images.
3783 @item @var{OPERATOR}     @tab pure function with two scalar nonallocatable
3784 arguments, which shall be nonpolymorphic and have the same type and type
3785 parameters as @var{A}.  The function shall return a nonallocatable scalar of
3786 the same type and type parameters as @var{A}.  The function shall be the same on
3787 all images and with regards to the arguments mathematically commutative and
3788 associative.  Note that @var{OPERATOR} may not be an elemental function, unless
3789 it is an intrisic function.
3790 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
3791 present, it shall have the same the same value on all images and refer to an
3792 image of the current team.
3793 @item @var{STAT}         @tab (optional) a scalar integer variable
3794 @item @var{ERRMSG}       @tab (optional) a scalar character variable
3795 @end multitable
3797 @item @emph{Example}:
3798 @smallexample
3799 program test
3800   integer :: val
3801   val = this_image ()
3802   call co_reduce (val, result_image=1, operator=myprod)
3803   if (this_image() == 1) then
3804     write(*,*) "Product value", val  ! prints num_images() factorial
3805   end if
3806 contains
3807   pure function myprod(a, b)
3808     integer, value :: a, b
3809     integer :: myprod
3810     myprod = a * b
3811   end function myprod
3812 end program test
3813 @end smallexample
3815 @item @emph{Note}:
3816 While the rules permit in principle an intrinsic function, none of the
3817 intrinsics in the standard fulfill the criteria of having a specific
3818 function, which takes two arguments of the same type and returning that
3819 type as result.
3821 @item @emph{See also}:
3822 @ref{CO_MIN}, @ref{CO_MAX}, @ref{CO_SUM}, @ref{CO_BROADCAST}
3823 @end table
3827 @node CO_SUM
3828 @section @code{CO_SUM} --- Sum of values on the current set of images
3829 @fnindex CO_SUM
3830 @cindex Collectives, sum of values
3832 @table @asis
3833 @item @emph{Description}:
3834 @code{CO_SUM} sums up the values of each element of @var{A} on all
3835 images of the current team.  If @var{RESULT_IMAGE} is present, the summed-up
3836 values are returned in @var{A} on the specified image only and the value
3837 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
3838 not present, the value is returned on all images.  If the execution was
3839 successful and @var{STAT} is present, it is assigned the value zero.  If the
3840 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
3841 @var{ERRMSG} gets assigned a value describing the occurred error.
3843 @item @emph{Standard}:
3844 Technical Specification (TS) 18508 or later
3846 @item @emph{Class}:
3847 Collective subroutine
3849 @item @emph{Syntax}:
3850 @code{CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])}
3852 @item @emph{Arguments}:
3853 @multitable @columnfractions .15 .70
3854 @item @var{A}            @tab shall be an integer, real or complex variable,
3855 which has the same type and type parameters on all images of the team.
3856 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
3857 present, it shall have the same the same value on all images and refer to an
3858 image of the current team.
3859 @item @var{STAT}         @tab (optional) a scalar integer variable
3860 @item @var{ERRMSG}       @tab (optional) a scalar character variable
3861 @end multitable
3863 @item @emph{Example}:
3864 @smallexample
3865 program test
3866   integer :: val
3867   val = this_image ()
3868   call co_sum (val, result_image=1)
3869   if (this_image() == 1) then
3870     write(*,*) "The sum is ", val ! prints (n**2 + n)/2, with n = num_images()
3871   end if
3872 end program test
3873 @end smallexample
3875 @item @emph{See also}:
3876 @ref{CO_MAX}, @ref{CO_MIN}, @ref{CO_REDUCE}, @ref{CO_BROADCAST}
3877 @end table
3881 @node COMMAND_ARGUMENT_COUNT
3882 @section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
3883 @fnindex COMMAND_ARGUMENT_COUNT
3884 @cindex command-line arguments
3885 @cindex command-line arguments, number of
3886 @cindex arguments, to program
3888 @table @asis
3889 @item @emph{Description}:
3890 @code{COMMAND_ARGUMENT_COUNT} returns the number of arguments passed on the
3891 command line when the containing program was invoked.
3893 @item @emph{Standard}:
3894 Fortran 2003 and later
3896 @item @emph{Class}:
3897 Inquiry function
3899 @item @emph{Syntax}:
3900 @code{RESULT = COMMAND_ARGUMENT_COUNT()}
3902 @item @emph{Arguments}:
3903 @multitable @columnfractions .15 .70
3904 @item None
3905 @end multitable
3907 @item @emph{Return value}:
3908 The return value is an @code{INTEGER} of default kind.
3910 @item @emph{Example}:
3911 @smallexample
3912 program test_command_argument_count
3913     integer :: count
3914     count = command_argument_count()
3915     print *, count
3916 end program test_command_argument_count
3917 @end smallexample
3919 @item @emph{See also}:
3920 @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}
3921 @end table
3925 @node COMPILER_OPTIONS
3926 @section @code{COMPILER_OPTIONS} --- Options passed to the compiler
3927 @fnindex COMPILER_OPTIONS
3928 @cindex flags inquiry function
3929 @cindex options inquiry function
3930 @cindex compiler flags inquiry function
3932 @table @asis
3933 @item @emph{Description}:
3934 @code{COMPILER_OPTIONS} returns a string with the options used for
3935 compiling.
3937 @item @emph{Standard}:
3938 Fortran 2008
3940 @item @emph{Class}:
3941 Inquiry function of the module @code{ISO_FORTRAN_ENV}
3943 @item @emph{Syntax}:
3944 @code{STR = COMPILER_OPTIONS()}
3946 @item @emph{Arguments}:
3947 None.
3949 @item @emph{Return value}:
3950 The return value is a default-kind string with system-dependent length.
3951 It contains the compiler flags used to compile the file, which called
3952 the @code{COMPILER_OPTIONS} intrinsic.
3954 @item @emph{Example}:
3955 @smallexample
3956    use iso_fortran_env
3957    print '(4a)', 'This file was compiled by ', &
3958                  compiler_version(), ' using the options ', &
3959                  compiler_options()
3960    end
3961 @end smallexample
3963 @item @emph{See also}:
3964 @ref{COMPILER_VERSION}, @ref{ISO_FORTRAN_ENV}
3965 @end table
3969 @node COMPILER_VERSION
3970 @section @code{COMPILER_VERSION} --- Compiler version string
3971 @fnindex COMPILER_VERSION
3972 @cindex compiler, name and version
3973 @cindex version of the compiler
3975 @table @asis
3976 @item @emph{Description}:
3977 @code{COMPILER_VERSION} returns a string with the name and the
3978 version of the compiler.
3980 @item @emph{Standard}:
3981 Fortran 2008
3983 @item @emph{Class}:
3984 Inquiry function of the module @code{ISO_FORTRAN_ENV}
3986 @item @emph{Syntax}:
3987 @code{STR = COMPILER_VERSION()}
3989 @item @emph{Arguments}:
3990 None.
3992 @item @emph{Return value}:
3993 The return value is a default-kind string with system-dependent length.
3994 It contains the name of the compiler and its version number.
3996 @item @emph{Example}:
3997 @smallexample
3998    use iso_fortran_env
3999    print '(4a)', 'This file was compiled by ', &
4000                  compiler_version(), ' using the options ', &
4001                  compiler_options()
4002    end
4003 @end smallexample
4005 @item @emph{See also}:
4006 @ref{COMPILER_OPTIONS}, @ref{ISO_FORTRAN_ENV}
4007 @end table
4011 @node COMPLEX
4012 @section @code{COMPLEX} --- Complex conversion function
4013 @fnindex COMPLEX
4014 @cindex complex numbers, conversion to
4015 @cindex conversion, to complex
4017 @table @asis
4018 @item @emph{Description}:
4019 @code{COMPLEX(X, Y)} returns a complex number where @var{X} is converted
4020 to the real component and @var{Y} is converted to the imaginary
4021 component.
4023 @item @emph{Standard}:
4024 GNU extension
4026 @item @emph{Class}:
4027 Elemental function
4029 @item @emph{Syntax}:
4030 @code{RESULT = COMPLEX(X, Y)}
4032 @item @emph{Arguments}:
4033 @multitable @columnfractions .15 .70
4034 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
4035 @item @var{Y} @tab The type may be @code{INTEGER} or @code{REAL}.
4036 @end multitable
4038 @item @emph{Return value}:
4039 If @var{X} and @var{Y} are both of @code{INTEGER} type, then the return
4040 value is of default @code{COMPLEX} type.
4042 If @var{X} and @var{Y} are of @code{REAL} type, or one is of @code{REAL}
4043 type and one is of @code{INTEGER} type, then the return value is of
4044 @code{COMPLEX} type with a kind equal to that of the @code{REAL}
4045 argument with the highest precision.
4047 @item @emph{Example}:
4048 @smallexample
4049 program test_complex
4050     integer :: i = 42
4051     real :: x = 3.14
4052     print *, complex(i, x)
4053 end program test_complex
4054 @end smallexample
4056 @item @emph{See also}:
4057 @ref{CMPLX}
4058 @end table
4062 @node CONJG
4063 @section @code{CONJG} --- Complex conjugate function
4064 @fnindex CONJG
4065 @fnindex DCONJG
4066 @cindex complex conjugate
4068 @table @asis
4069 @item @emph{Description}:
4070 @code{CONJG(Z)} returns the conjugate of @var{Z}.  If @var{Z} is @code{(x, y)}
4071 then the result is @code{(x, -y)}
4073 @item @emph{Standard}:
4074 Fortran 77 and later, has overloads that are GNU extensions
4076 @item @emph{Class}:
4077 Elemental function
4079 @item @emph{Syntax}:
4080 @code{Z = CONJG(Z)}
4082 @item @emph{Arguments}:
4083 @multitable @columnfractions .15 .70
4084 @item @var{Z} @tab The type shall be @code{COMPLEX}.
4085 @end multitable
4087 @item @emph{Return value}:
4088 The return value is of type @code{COMPLEX}.
4090 @item @emph{Example}:
4091 @smallexample
4092 program test_conjg
4093     complex :: z = (2.0, 3.0)
4094     complex(8) :: dz = (2.71_8, -3.14_8)
4095     z= conjg(z)
4096     print *, z
4097     dz = dconjg(dz)
4098     print *, dz
4099 end program test_conjg
4100 @end smallexample
4102 @item @emph{Specific names}:
4103 @multitable @columnfractions .20 .20 .20 .25
4104 @item Name             @tab Argument             @tab Return type       @tab Standard
4105 @item @code{CONJG(Z)}  @tab @code{COMPLEX Z}     @tab @code{COMPLEX}    @tab GNU extension
4106 @item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z}  @tab @code{COMPLEX(8)} @tab GNU extension
4107 @end multitable
4108 @end table
4112 @node COS
4113 @section @code{COS} --- Cosine function
4114 @fnindex COS
4115 @fnindex DCOS
4116 @fnindex CCOS
4117 @fnindex ZCOS
4118 @fnindex CDCOS
4119 @cindex trigonometric function, cosine
4120 @cindex cosine
4122 @table @asis
4123 @item @emph{Description}:
4124 @code{COS(X)} computes the cosine of @var{X}.
4126 @item @emph{Standard}:
4127 Fortran 77 and later, has overloads that are GNU extensions
4129 @item @emph{Class}:
4130 Elemental function
4132 @item @emph{Syntax}:
4133 @code{RESULT = COS(X)}
4135 @item @emph{Arguments}:
4136 @multitable @columnfractions .15 .70
4137 @item @var{X} @tab The type shall be @code{REAL} or
4138 @code{COMPLEX}.
4139 @end multitable
4141 @item @emph{Return value}:
4142 The return value is of the same type and kind as @var{X}. The real part
4143 of the result is in radians. If @var{X} is of the type @code{REAL},
4144 the return value lies in the range @math{ -1 \leq \cos (x) \leq 1}.
4146 @item @emph{Example}:
4147 @smallexample
4148 program test_cos
4149   real :: x = 0.0
4150   x = cos(x)
4151 end program test_cos
4152 @end smallexample
4154 @item @emph{Specific names}:
4155 @multitable @columnfractions .20 .20 .20 .25
4156 @item Name            @tab Argument            @tab Return type       @tab Standard
4157 @item @code{COS(X)}   @tab @code{REAL(4) X}    @tab @code{REAL(4)}    @tab Fortran 77 and later
4158 @item @code{DCOS(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab Fortran 77 and later
4159 @item @code{CCOS(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
4160 @item @code{ZCOS(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4161 @item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4162 @end multitable
4164 @item @emph{See also}:
4165 Inverse function: @ref{ACOS}
4166 Degrees function: @ref{COSD}
4168 @end table
4172 @node COSD
4173 @section @code{COSD} --- Cosine function, degrees
4174 @fnindex COSD
4175 @fnindex DCOSD
4176 @fnindex CCOSD
4177 @fnindex ZCOSD
4178 @fnindex CDCOSD
4179 @cindex trigonometric function, cosine, degrees
4180 @cindex cosine, degrees
4182 @table @asis
4183 @item @emph{Description}:
4184 @code{COSD(X)} computes the cosine of @var{X} in degrees.
4186 This function is for compatibility only and should be avoided in favor of
4187 standard constructs wherever possible.
4189 @item @emph{Standard}:
4190 GNU Extension, enabled with @option{-fdec-math}.
4192 @item @emph{Class}:
4193 Elemental function
4195 @item @emph{Syntax}:
4196 @code{RESULT = COSD(X)}
4198 @item @emph{Arguments}:
4199 @multitable @columnfractions .15 .70
4200 @item @var{X} @tab The type shall be @code{REAL} or
4201 @code{COMPLEX}.
4202 @end multitable
4204 @item @emph{Return value}:
4205 The return value is of the same type and kind as @var{X}. The real part
4206 of the result is in degrees.  If @var{X} is of the type @code{REAL},
4207 the return value lies in the range @math{ -1 \leq \cosd (x) \leq 1}.
4209 @item @emph{Example}:
4210 @smallexample
4211 program test_cosd
4212   real :: x = 0.0
4213   x = cosd(x)
4214 end program test_cosd
4215 @end smallexample
4217 @item @emph{Specific names}:
4218 @multitable @columnfractions .20 .20 .20 .25
4219 @item Name            @tab Argument            @tab Return type       @tab Standard
4220 @item @code{COSD(X)}   @tab @code{REAL(4) X}    @tab @code{REAL(4)}    @tab GNU Extension
4221 @item @code{DCOSD(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab GNU Extension
4222 @item @code{CCOSD(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab GNU Extension
4223 @item @code{ZCOSD(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4224 @item @code{CDCOSD(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4225 @end multitable
4227 @item @emph{See also}:
4228 Inverse function: @ref{ACOSD}
4229 Radians function: @ref{COS}
4231 @end table
4235 @node COSH
4236 @section @code{COSH} --- Hyperbolic cosine function
4237 @fnindex COSH
4238 @fnindex DCOSH
4239 @cindex hyperbolic cosine
4240 @cindex hyperbolic function, cosine
4241 @cindex cosine, hyperbolic
4243 @table @asis
4244 @item @emph{Description}:
4245 @code{COSH(X)} computes the hyperbolic cosine of @var{X}.
4247 @item @emph{Standard}:
4248 Fortran 77 and later, for a complex argument Fortran 2008 or later
4250 @item @emph{Class}:
4251 Elemental function
4253 @item @emph{Syntax}:
4254 @code{X = COSH(X)}
4256 @item @emph{Arguments}:
4257 @multitable @columnfractions .15 .70
4258 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
4259 @end multitable
4261 @item @emph{Return value}:
4262 The return value has same type and kind as @var{X}. If @var{X} is
4263 complex, the imaginary part of the result is in radians. If @var{X}
4264 is @code{REAL}, the return value has a lower bound of one,
4265 @math{\cosh (x) \geq 1}.
4267 @item @emph{Example}:
4268 @smallexample
4269 program test_cosh
4270   real(8) :: x = 1.0_8
4271   x = cosh(x)
4272 end program test_cosh
4273 @end smallexample
4275 @item @emph{Specific names}:
4276 @multitable @columnfractions .20 .20 .20 .25
4277 @item Name            @tab Argument          @tab Return type       @tab Standard
4278 @item @code{COSH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
4279 @item @code{DCOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
4280 @end multitable
4282 @item @emph{See also}:
4283 Inverse function: @ref{ACOSH}
4285 @end table
4289 @node COTAN
4290 @section @code{COTAN} --- Cotangent function
4291 @fnindex COTAN
4292 @fnindex DCOTAN
4293 @cindex trigonometric function, cotangent
4294 @cindex cotangent
4296 @table @asis
4297 @item @emph{Description}:
4298 @code{COTAN(X)} computes the cotangent of @var{X}. Equivalent to @code{COS(x)}
4299 divided by @code{SIN(x)}, or @code{1 / TAN(x)}.
4301 This function is for compatibility only and should be avoided in favor of
4302 standard constructs wherever possible.
4304 @item @emph{Standard}:
4305 GNU Extension, enabled with @option{-fdec-math}.
4307 @item @emph{Class}:
4308 Elemental function
4310 @item @emph{Syntax}:
4311 @code{RESULT = COTAN(X)}
4313 @item @emph{Arguments}:
4314 @multitable @columnfractions .15 .70
4315 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
4316 @end multitable
4318 @item @emph{Return value}:
4319 The return value has same type and kind as @var{X}, and its value is in radians.
4321 @item @emph{Example}:
4322 @smallexample
4323 program test_cotan
4324   real(8) :: x = 0.165_8
4325   x = cotan(x)
4326 end program test_cotan
4327 @end smallexample
4329 @item @emph{Specific names}:
4330 @multitable @columnfractions .20 .20 .20 .25
4331 @item Name            @tab Argument          @tab Return type     @tab Standard
4332 @item @code{COTAN(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU Extension
4333 @item @code{DCOTAN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU Extension
4334 @end multitable
4336 @item @emph{See also}:
4337 Converse function: @ref{TAN}
4338 Degrees function: @ref{COTAND}
4339 @end table
4343 @node COTAND
4344 @section @code{COTAND} --- Cotangent function, degrees
4345 @fnindex COTAND
4346 @fnindex DCOTAND
4347 @cindex trigonometric function, cotangent, degrees
4348 @cindex cotangent, degrees
4350 @table @asis
4351 @item @emph{Description}:
4352 @code{COTAND(X)} computes the cotangent of @var{X} in degrees.  Equivalent to
4353 @code{COSD(x)} divided by @code{SIND(x)}, or @code{1 / TAND(x)}.
4355 @item @emph{Standard}:
4356 GNU Extension, enabled with @option{-fdec-math}.
4358 This function is for compatibility only and should be avoided in favor of
4359 standard constructs wherever possible.
4361 @item @emph{Class}:
4362 Elemental function
4364 @item @emph{Syntax}:
4365 @code{RESULT = COTAND(X)}
4367 @item @emph{Arguments}:
4368 @multitable @columnfractions .15 .70
4369 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
4370 @end multitable
4372 @item @emph{Return value}:
4373 The return value has same type and kind as @var{X}, and its value is in degrees.
4375 @item @emph{Example}:
4376 @smallexample
4377 program test_cotand
4378   real(8) :: x = 0.165_8
4379   x = cotand(x)
4380 end program test_cotand
4381 @end smallexample
4383 @item @emph{Specific names}:
4384 @multitable @columnfractions .20 .20 .20 .25
4385 @item Name            @tab Argument          @tab Return type     @tab Standard
4386 @item @code{COTAND(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU Extension
4387 @item @code{DCOTAND(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU Extension
4388 @end multitable
4390 @item @emph{See also}:
4391 Converse function: @ref{TAND}
4392 Radians function: @ref{COTAN}
4394 @end table
4398 @node COUNT
4399 @section @code{COUNT} --- Count function
4400 @fnindex COUNT
4401 @cindex array, conditionally count elements
4402 @cindex array, element counting
4403 @cindex array, number of elements
4405 @table @asis
4406 @item @emph{Description}:
4408 Counts the number of @code{.TRUE.} elements in a logical @var{MASK},
4409 or, if the @var{DIM} argument is supplied, counts the number of
4410 elements along each row of the array in the @var{DIM} direction.
4411 If the array has zero size, or all of the elements of @var{MASK} are
4412 @code{.FALSE.}, then the result is @code{0}.
4414 @item @emph{Standard}:
4415 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
4417 @item @emph{Class}:
4418 Transformational function
4420 @item @emph{Syntax}:
4421 @code{RESULT = COUNT(MASK [, DIM, KIND])}
4423 @item @emph{Arguments}:
4424 @multitable @columnfractions .15 .70
4425 @item @var{MASK} @tab The type shall be @code{LOGICAL}.
4426 @item @var{DIM}  @tab (Optional) The type shall be @code{INTEGER}.
4427 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
4428 expression indicating the kind parameter of the result.
4429 @end multitable
4431 @item @emph{Return value}:
4432 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
4433 @var{KIND} is absent, the return value is of default integer kind.
4434 If @var{DIM} is present, the result is an array with a rank one less
4435 than the rank of @var{ARRAY}, and a size corresponding to the shape
4436 of @var{ARRAY} with the @var{DIM} dimension removed.
4438 @item @emph{Example}:
4439 @smallexample
4440 program test_count
4441     integer, dimension(2,3) :: a, b
4442     logical, dimension(2,3) :: mask
4443     a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
4444     b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
4445     print '(3i3)', a(1,:)
4446     print '(3i3)', a(2,:)
4447     print *
4448     print '(3i3)', b(1,:)
4449     print '(3i3)', b(2,:)
4450     print *
4451     mask = a.ne.b
4452     print '(3l3)', mask(1,:)
4453     print '(3l3)', mask(2,:)
4454     print *
4455     print '(3i3)', count(mask)
4456     print *
4457     print '(3i3)', count(mask, 1)
4458     print *
4459     print '(3i3)', count(mask, 2)
4460 end program test_count
4461 @end smallexample
4462 @end table
4466 @node CPU_TIME
4467 @section @code{CPU_TIME} --- CPU elapsed time in seconds
4468 @fnindex CPU_TIME
4469 @cindex time, elapsed
4471 @table @asis
4472 @item @emph{Description}:
4473 Returns a @code{REAL} value representing the elapsed CPU time in
4474 seconds.  This is useful for testing segments of code to determine
4475 execution time.
4477 If a time source is available, time will be reported with microsecond
4478 resolution. If no time source is available, @var{TIME} is set to
4479 @code{-1.0}.
4481 Note that @var{TIME} may contain a, system dependent, arbitrary offset
4482 and may not start with @code{0.0}. For @code{CPU_TIME}, the absolute
4483 value is meaningless, only differences between subsequent calls to
4484 this subroutine, as shown in the example below, should be used.
4487 @item @emph{Standard}:
4488 Fortran 95 and later
4490 @item @emph{Class}:
4491 Subroutine
4493 @item @emph{Syntax}:
4494 @code{CALL CPU_TIME(TIME)}
4496 @item @emph{Arguments}:
4497 @multitable @columnfractions .15 .70
4498 @item @var{TIME} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}.
4499 @end multitable
4501 @item @emph{Return value}:
4502 None
4504 @item @emph{Example}:
4505 @smallexample
4506 program test_cpu_time
4507     real :: start, finish
4508     call cpu_time(start)
4509         ! put code to test here
4510     call cpu_time(finish)
4511     print '("Time = ",f6.3," seconds.")',finish-start
4512 end program test_cpu_time
4513 @end smallexample
4515 @item @emph{See also}:
4516 @ref{SYSTEM_CLOCK}, @ref{DATE_AND_TIME}
4517 @end table
4521 @node CSHIFT
4522 @section @code{CSHIFT} --- Circular shift elements of an array
4523 @fnindex CSHIFT
4524 @cindex array, shift circularly
4525 @cindex array, permutation
4526 @cindex array, rotate
4528 @table @asis
4529 @item @emph{Description}:
4530 @code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of
4531 @var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is omitted it is
4532 taken to be @code{1}.  @var{DIM} is a scalar of type @code{INTEGER} in the
4533 range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}.
4534 If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted
4535 by @var{SHIFT} places.  If rank is greater than one, then all complete rank one
4536 sections of @var{ARRAY} along the given dimension are shifted.  Elements
4537 shifted out one end of each rank one section are shifted back in the other end.
4539 @item @emph{Standard}:
4540 Fortran 95 and later
4542 @item @emph{Class}:
4543 Transformational function
4545 @item @emph{Syntax}:
4546 @code{RESULT = CSHIFT(ARRAY, SHIFT [, DIM])}
4548 @item @emph{Arguments}:
4549 @multitable @columnfractions .15 .70
4550 @item @var{ARRAY}  @tab Shall be an array of any type.
4551 @item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
4552 @item @var{DIM}    @tab The type shall be @code{INTEGER}.
4553 @end multitable
4555 @item @emph{Return value}:
4556 Returns an array of same type and rank as the @var{ARRAY} argument.
4558 @item @emph{Example}:
4559 @smallexample
4560 program test_cshift
4561     integer, dimension(3,3) :: a
4562     a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
4563     print '(3i3)', a(1,:)
4564     print '(3i3)', a(2,:)
4565     print '(3i3)', a(3,:)    
4566     a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)
4567     print *
4568     print '(3i3)', a(1,:)
4569     print '(3i3)', a(2,:)
4570     print '(3i3)', a(3,:)
4571 end program test_cshift
4572 @end smallexample
4573 @end table
4577 @node CTIME
4578 @section @code{CTIME} --- Convert a time into a string
4579 @fnindex CTIME
4580 @cindex time, conversion to string
4581 @cindex conversion, to string
4583 @table @asis
4584 @item @emph{Description}:
4585 @code{CTIME} converts a system time value, such as returned by
4586 @ref{TIME8}, to a string. The output will be of the form @samp{Sat
4587 Aug 19 18:13:14 1995}.
4589 This intrinsic is provided in both subroutine and function forms; however,
4590 only one form can be used in any given program unit.
4592 @item @emph{Standard}:
4593 GNU extension
4595 @item @emph{Class}:
4596 Subroutine, function
4598 @item @emph{Syntax}:
4599 @multitable @columnfractions .80
4600 @item @code{CALL CTIME(TIME, RESULT)}.
4601 @item @code{RESULT = CTIME(TIME)}.
4602 @end multitable
4604 @item @emph{Arguments}:
4605 @multitable @columnfractions .15 .70
4606 @item @var{TIME}    @tab The type shall be of type @code{INTEGER}.
4607 @item @var{RESULT}  @tab The type shall be of type @code{CHARACTER} and
4608 of default kind. It is an @code{INTENT(OUT)} argument. If the length
4609 of this variable is too short for the time and date string to fit
4610 completely, it will be blank on procedure return.
4611 @end multitable
4613 @item @emph{Return value}:
4614 The converted date and time as a string. 
4616 @item @emph{Example}:
4617 @smallexample
4618 program test_ctime
4619     integer(8) :: i
4620     character(len=30) :: date
4621     i = time8()
4623     ! Do something, main part of the program
4624     
4625     call ctime(i,date)
4626     print *, 'Program was started on ', date
4627 end program test_ctime
4628 @end smallexample
4630 @item @emph{See Also}:
4631 @ref{DATE_AND_TIME}, @ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
4632 @end table
4636 @node DATE_AND_TIME
4637 @section @code{DATE_AND_TIME} --- Date and time subroutine
4638 @fnindex DATE_AND_TIME
4639 @cindex date, current
4640 @cindex current date
4641 @cindex time, current
4642 @cindex current time
4644 @table @asis
4645 @item @emph{Description}:
4646 @code{DATE_AND_TIME(DATE, TIME, ZONE, VALUES)} gets the corresponding date and
4647 time information from the real-time system clock.  @var{DATE} is
4648 @code{INTENT(OUT)} and has form ccyymmdd.  @var{TIME} is @code{INTENT(OUT)} and
4649 has form hhmmss.sss.  @var{ZONE} is @code{INTENT(OUT)} and has form (+-)hhmm,
4650 representing the difference with respect to Coordinated Universal Time (UTC).
4651 Unavailable time and date parameters return blanks.
4653 @var{VALUES} is @code{INTENT(OUT)} and provides the following:
4655 @multitable @columnfractions .15 .30 .40
4656 @item @tab @code{VALUE(1)}: @tab The year
4657 @item @tab @code{VALUE(2)}: @tab The month
4658 @item @tab @code{VALUE(3)}: @tab The day of the month
4659 @item @tab @code{VALUE(4)}: @tab Time difference with UTC in minutes
4660 @item @tab @code{VALUE(5)}: @tab The hour of the day
4661 @item @tab @code{VALUE(6)}: @tab The minutes of the hour
4662 @item @tab @code{VALUE(7)}: @tab The seconds of the minute
4663 @item @tab @code{VALUE(8)}: @tab The milliseconds of the second
4664 @end multitable
4666 @item @emph{Standard}:
4667 Fortran 95 and later
4669 @item @emph{Class}:
4670 Subroutine
4672 @item @emph{Syntax}:
4673 @code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])}
4675 @item @emph{Arguments}:
4676 @multitable @columnfractions .15 .70
4677 @item @var{DATE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=8)}
4678 or larger, and of default kind.
4679 @item @var{TIME}  @tab (Optional) The type shall be @code{CHARACTER(LEN=10)}
4680 or larger, and of default kind.
4681 @item @var{ZONE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=5)}
4682 or larger, and of default kind.
4683 @item @var{VALUES}@tab (Optional) The type shall be @code{INTEGER(8)}.
4684 @end multitable
4686 @item @emph{Return value}:
4687 None
4689 @item @emph{Example}:
4690 @smallexample
4691 program test_time_and_date
4692     character(8)  :: date
4693     character(10) :: time
4694     character(5)  :: zone
4695     integer,dimension(8) :: values
4696     ! using keyword arguments
4697     call date_and_time(date,time,zone,values)
4698     call date_and_time(DATE=date,ZONE=zone)
4699     call date_and_time(TIME=time)
4700     call date_and_time(VALUES=values)
4701     print '(a,2x,a,2x,a)', date, time, zone
4702     print '(8i5)', values
4703 end program test_time_and_date
4704 @end smallexample
4706 @item @emph{See also}:
4707 @ref{CPU_TIME}, @ref{SYSTEM_CLOCK}
4708 @end table
4712 @node DBLE
4713 @section @code{DBLE} --- Double conversion function
4714 @fnindex DBLE
4715 @cindex conversion, to real
4717 @table @asis
4718 @item @emph{Description}:
4719 @code{DBLE(A)} Converts @var{A} to double precision real type.
4721 @item @emph{Standard}:
4722 Fortran 77 and later
4724 @item @emph{Class}:
4725 Elemental function
4727 @item @emph{Syntax}:
4728 @code{RESULT = DBLE(A)}
4730 @item @emph{Arguments}:
4731 @multitable @columnfractions .15 .70
4732 @item @var{A} @tab The type shall be @code{INTEGER}, @code{REAL},
4733 or @code{COMPLEX}.
4734 @end multitable
4736 @item @emph{Return value}:
4737 The return value is of type double precision real.
4739 @item @emph{Example}:
4740 @smallexample
4741 program test_dble
4742     real    :: x = 2.18
4743     integer :: i = 5
4744     complex :: z = (2.3,1.14)
4745     print *, dble(x), dble(i), dble(z)
4746 end program test_dble
4747 @end smallexample
4749 @item @emph{See also}:
4750 @ref{REAL}
4751 @end table
4755 @node DCMPLX
4756 @section @code{DCMPLX} --- Double complex conversion function
4757 @fnindex DCMPLX
4758 @cindex complex numbers, conversion to
4759 @cindex conversion, to complex
4761 @table @asis
4762 @item @emph{Description}:
4763 @code{DCMPLX(X [,Y])} returns a double complex number where @var{X} is
4764 converted to the real component.  If @var{Y} is present it is converted to the
4765 imaginary component.  If @var{Y} is not present then the imaginary component is
4766 set to 0.0.  If @var{X} is complex then @var{Y} must not be present.
4768 @item @emph{Standard}:
4769 GNU extension
4771 @item @emph{Class}:
4772 Elemental function
4774 @item @emph{Syntax}:
4775 @code{RESULT = DCMPLX(X [, Y])}
4777 @item @emph{Arguments}:
4778 @multitable @columnfractions .15 .70
4779 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
4780 or @code{COMPLEX}.
4781 @item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX}.) May be
4782 @code{INTEGER} or @code{REAL}. 
4783 @end multitable
4785 @item @emph{Return value}:
4786 The return value is of type @code{COMPLEX(8)}
4788 @item @emph{Example}:
4789 @smallexample
4790 program test_dcmplx
4791     integer :: i = 42
4792     real :: x = 3.14
4793     complex :: z
4794     z = cmplx(i, x)
4795     print *, dcmplx(i)
4796     print *, dcmplx(x)
4797     print *, dcmplx(z)
4798     print *, dcmplx(x,i)
4799 end program test_dcmplx
4800 @end smallexample
4801 @end table
4804 @node DIGITS
4805 @section @code{DIGITS} --- Significant binary digits function
4806 @fnindex DIGITS
4807 @cindex model representation, significant digits
4809 @table @asis
4810 @item @emph{Description}:
4811 @code{DIGITS(X)} returns the number of significant binary digits of the internal
4812 model representation of @var{X}.  For example, on a system using a 32-bit
4813 floating point representation, a default real number would likely return 24.
4815 @item @emph{Standard}:
4816 Fortran 95 and later
4818 @item @emph{Class}:
4819 Inquiry function
4821 @item @emph{Syntax}:
4822 @code{RESULT = DIGITS(X)}
4824 @item @emph{Arguments}:
4825 @multitable @columnfractions .15 .70
4826 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
4827 @end multitable
4829 @item @emph{Return value}:
4830 The return value is of type @code{INTEGER}.
4832 @item @emph{Example}:
4833 @smallexample
4834 program test_digits
4835     integer :: i = 12345
4836     real :: x = 3.143
4837     real(8) :: y = 2.33
4838     print *, digits(i)
4839     print *, digits(x)
4840     print *, digits(y)
4841 end program test_digits
4842 @end smallexample
4843 @end table
4847 @node DIM
4848 @section @code{DIM} --- Positive difference
4849 @fnindex DIM
4850 @fnindex IDIM
4851 @fnindex DDIM
4852 @cindex positive difference
4854 @table @asis
4855 @item @emph{Description}:
4856 @code{DIM(X,Y)} returns the difference @code{X-Y} if the result is positive;
4857 otherwise returns zero.
4859 @item @emph{Standard}:
4860 Fortran 77 and later
4862 @item @emph{Class}:
4863 Elemental function
4865 @item @emph{Syntax}:
4866 @code{RESULT = DIM(X, Y)}
4868 @item @emph{Arguments}:
4869 @multitable @columnfractions .15 .70
4870 @item @var{X} @tab The type shall be @code{INTEGER} or @code{REAL}
4871 @item @var{Y} @tab The type shall be the same type and kind as @var{X}.
4872 @end multitable
4874 @item @emph{Return value}:
4875 The return value is of type @code{INTEGER} or @code{REAL}.
4877 @item @emph{Example}:
4878 @smallexample
4879 program test_dim
4880     integer :: i
4881     real(8) :: x
4882     i = dim(4, 15)
4883     x = dim(4.345_8, 2.111_8)
4884     print *, i
4885     print *, x
4886 end program test_dim
4887 @end smallexample
4889 @item @emph{Specific names}:
4890 @multitable @columnfractions .20 .20 .20 .25
4891 @item Name             @tab Argument               @tab Return type       @tab Standard
4892 @item @code{DIM(X,Y)}  @tab @code{REAL(4) X, Y}    @tab @code{REAL(4)}    @tab Fortran 77 and later
4893 @item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X, Y} @tab @code{INTEGER(4)} @tab Fortran 77 and later
4894 @item @code{DDIM(X,Y)} @tab @code{REAL(8) X, Y}    @tab @code{REAL(8)}    @tab Fortran 77 and later
4895 @end multitable
4896 @end table
4900 @node DOT_PRODUCT
4901 @section @code{DOT_PRODUCT} --- Dot product function
4902 @fnindex DOT_PRODUCT
4903 @cindex dot product
4904 @cindex vector product
4905 @cindex product, vector
4907 @table @asis
4908 @item @emph{Description}:
4909 @code{DOT_PRODUCT(VECTOR_A, VECTOR_B)} computes the dot product multiplication
4910 of two vectors @var{VECTOR_A} and @var{VECTOR_B}.  The two vectors may be
4911 either numeric or logical and must be arrays of rank one and of equal size. If
4912 the vectors are @code{INTEGER} or @code{REAL}, the result is
4913 @code{SUM(VECTOR_A*VECTOR_B)}. If the vectors are @code{COMPLEX}, the result
4914 is @code{SUM(CONJG(VECTOR_A)*VECTOR_B)}. If the vectors are @code{LOGICAL},
4915 the result is @code{ANY(VECTOR_A .AND. VECTOR_B)}.  
4917 @item @emph{Standard}:
4918 Fortran 95 and later
4920 @item @emph{Class}:
4921 Transformational function
4923 @item @emph{Syntax}:
4924 @code{RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)}
4926 @item @emph{Arguments}:
4927 @multitable @columnfractions .15 .70
4928 @item @var{VECTOR_A} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
4929 @item @var{VECTOR_B} @tab The type shall be numeric if @var{VECTOR_A} is of numeric type or @code{LOGICAL} if @var{VECTOR_A} is of type @code{LOGICAL}. @var{VECTOR_B} shall be a rank-one array.
4930 @end multitable
4932 @item @emph{Return value}:
4933 If the arguments are numeric, the return value is a scalar of numeric type,
4934 @code{INTEGER}, @code{REAL}, or @code{COMPLEX}.  If the arguments are
4935 @code{LOGICAL}, the return value is @code{.TRUE.} or @code{.FALSE.}.
4937 @item @emph{Example}:
4938 @smallexample
4939 program test_dot_prod
4940     integer, dimension(3) :: a, b
4941     a = (/ 1, 2, 3 /)
4942     b = (/ 4, 5, 6 /)
4943     print '(3i3)', a
4944     print *
4945     print '(3i3)', b
4946     print *
4947     print *, dot_product(a,b)
4948 end program test_dot_prod
4949 @end smallexample
4950 @end table
4954 @node DPROD
4955 @section @code{DPROD} --- Double product function
4956 @fnindex DPROD
4957 @cindex product, double-precision
4959 @table @asis
4960 @item @emph{Description}:
4961 @code{DPROD(X,Y)} returns the product @code{X*Y}.
4963 @item @emph{Standard}:
4964 Fortran 77 and later
4966 @item @emph{Class}:
4967 Elemental function
4969 @item @emph{Syntax}:
4970 @code{RESULT = DPROD(X, Y)}
4972 @item @emph{Arguments}:
4973 @multitable @columnfractions .15 .70
4974 @item @var{X} @tab The type shall be @code{REAL}.
4975 @item @var{Y} @tab The type shall be @code{REAL}.
4976 @end multitable
4978 @item @emph{Return value}:
4979 The return value is of type @code{REAL(8)}.
4981 @item @emph{Example}:
4982 @smallexample
4983 program test_dprod
4984     real :: x = 5.2
4985     real :: y = 2.3
4986     real(8) :: d
4987     d = dprod(x,y)
4988     print *, d
4989 end program test_dprod
4990 @end smallexample
4992 @item @emph{Specific names}:
4993 @multitable @columnfractions .20 .20 .20 .25
4994 @item Name              @tab Argument               @tab Return type       @tab Standard
4995 @item @code{DPROD(X,Y)} @tab @code{REAL(4) X, Y}    @tab @code{REAL(8)}    @tab Fortran 77 and later
4996 @end multitable
4998 @end table
5001 @node DREAL
5002 @section @code{DREAL} --- Double real part function
5003 @fnindex DREAL
5004 @cindex complex numbers, real part
5006 @table @asis
5007 @item @emph{Description}:
5008 @code{DREAL(Z)} returns the real part of complex variable @var{Z}.
5010 @item @emph{Standard}:
5011 GNU extension
5013 @item @emph{Class}:
5014 Elemental function
5016 @item @emph{Syntax}:
5017 @code{RESULT = DREAL(A)}
5019 @item @emph{Arguments}:
5020 @multitable @columnfractions .15 .70
5021 @item @var{A} @tab The type shall be @code{COMPLEX(8)}.
5022 @end multitable
5024 @item @emph{Return value}:
5025 The return value is of type @code{REAL(8)}.
5027 @item @emph{Example}:
5028 @smallexample
5029 program test_dreal
5030     complex(8) :: z = (1.3_8,7.2_8)
5031     print *, dreal(z)
5032 end program test_dreal
5033 @end smallexample
5035 @item @emph{See also}:
5036 @ref{AIMAG}
5038 @end table
5042 @node DSHIFTL
5043 @section @code{DSHIFTL} --- Combined left shift
5044 @fnindex DSHIFTL
5045 @cindex left shift, combined
5046 @cindex shift, left
5048 @table @asis
5049 @item @emph{Description}:
5050 @code{DSHIFTL(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
5051 rightmost @var{SHIFT} bits of the result are the leftmost @var{SHIFT}
5052 bits of @var{J}, and the remaining bits are the rightmost bits of
5053 @var{I}.
5055 @item @emph{Standard}:
5056 Fortran 2008 and later
5058 @item @emph{Class}:
5059 Elemental function
5061 @item @emph{Syntax}:
5062 @code{RESULT = DSHIFTL(I, J, SHIFT)}
5064 @item @emph{Arguments}:
5065 @multitable @columnfractions .15 .70
5066 @item @var{I} @tab Shall be of type @code{INTEGER} or a BOZ constant.
5067 @item @var{J} @tab Shall be of type @code{INTEGER} or a BOZ constant.
5068 If both @var{I} and @var{J} have integer type, then they shall have
5069 the same kind type parameter. @var{I} and @var{J} shall not both be
5070 BOZ constants.
5071 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}. It shall
5072 be nonnegative.  If @var{I} is not a BOZ constant, then @var{SHIFT}
5073 shall be less than or equal to @code{BIT_SIZE(I)}; otherwise,
5074 @var{SHIFT} shall be less than or equal to @code{BIT_SIZE(J)}.
5075 @end multitable
5077 @item @emph{Return value}:
5078 If either @var{I} or @var{J} is a BOZ constant, it is first converted
5079 as if by the intrinsic function @code{INT} to an integer type with the
5080 kind type parameter of the other.
5082 @item @emph{See also}:
5083 @ref{DSHIFTR}
5084 @end table
5087 @node DSHIFTR
5088 @section @code{DSHIFTR} --- Combined right shift
5089 @fnindex DSHIFTR
5090 @cindex right shift, combined
5091 @cindex shift, right
5093 @table @asis
5094 @item @emph{Description}:
5095 @code{DSHIFTR(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
5096 leftmost @var{SHIFT} bits of the result are the rightmost @var{SHIFT}
5097 bits of @var{I}, and the remaining bits are the leftmost bits of
5098 @var{J}.
5100 @item @emph{Standard}:
5101 Fortran 2008 and later
5103 @item @emph{Class}:
5104 Elemental function
5106 @item @emph{Syntax}:
5107 @code{RESULT = DSHIFTR(I, J, SHIFT)}
5109 @item @emph{Arguments}:
5110 @multitable @columnfractions .15 .70
5111 @item @var{I} @tab Shall be of type @code{INTEGER} or a BOZ constant.
5112 @item @var{J} @tab Shall be of type @code{INTEGER} or a BOZ constant.
5113 If both @var{I} and @var{J} have integer type, then they shall have
5114 the same kind type parameter. @var{I} and @var{J} shall not both be
5115 BOZ constants.
5116 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}. It shall
5117 be nonnegative.  If @var{I} is not a BOZ constant, then @var{SHIFT}
5118 shall be less than or equal to @code{BIT_SIZE(I)}; otherwise,
5119 @var{SHIFT} shall be less than or equal to @code{BIT_SIZE(J)}.
5120 @end multitable
5122 @item @emph{Return value}:
5123 If either @var{I} or @var{J} is a BOZ constant, it is first converted
5124 as if by the intrinsic function @code{INT} to an integer type with the
5125 kind type parameter of the other.
5127 @item @emph{See also}:
5128 @ref{DSHIFTL}
5129 @end table
5132 @node DTIME
5133 @section @code{DTIME} --- Execution time subroutine (or function)
5134 @fnindex DTIME
5135 @cindex time, elapsed
5136 @cindex elapsed time
5138 @table @asis
5139 @item @emph{Description}:
5140 @code{DTIME(VALUES, TIME)} initially returns the number of seconds of runtime
5141 since the start of the process's execution in @var{TIME}.  @var{VALUES}
5142 returns the user and system components of this time in @code{VALUES(1)} and
5143 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) +
5144 VALUES(2)}.
5146 Subsequent invocations of @code{DTIME} return values accumulated since the
5147 previous invocation.
5149 On some systems, the underlying timings are represented using types with
5150 sufficiently small limits that overflows (wrap around) are possible, such as
5151 32-bit types. Therefore, the values returned by this intrinsic might be, or
5152 become, negative, or numerically less than previous values, during a single
5153 run of the compiled program.
5155 Please note, that this implementation is thread safe if used within OpenMP
5156 directives, i.e., its state will be consistent while called from multiple
5157 threads. However, if @code{DTIME} is called from multiple threads, the result
5158 is still the time since the last invocation. This may not give the intended
5159 results. If possible, use @code{CPU_TIME} instead.
5161 This intrinsic is provided in both subroutine and function forms; however,
5162 only one form can be used in any given program unit.
5164 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
5166 @multitable @columnfractions .15 .30 .40
5167 @item @tab @code{VALUES(1)}: @tab User time in seconds.
5168 @item @tab @code{VALUES(2)}: @tab System time in seconds.
5169 @item @tab @code{TIME}: @tab Run time since start in seconds.
5170 @end multitable
5172 @item @emph{Standard}:
5173 GNU extension
5175 @item @emph{Class}:
5176 Subroutine, function
5178 @item @emph{Syntax}:
5179 @multitable @columnfractions .80
5180 @item @code{CALL DTIME(VALUES, TIME)}.
5181 @item @code{TIME = DTIME(VALUES)}, (not recommended).
5182 @end multitable
5184 @item @emph{Arguments}:
5185 @multitable @columnfractions .15 .70
5186 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
5187 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
5188 @end multitable
5190 @item @emph{Return value}:
5191 Elapsed time in seconds since the last invocation or since the start of program
5192 execution if not called before.
5194 @item @emph{Example}:
5195 @smallexample
5196 program test_dtime
5197     integer(8) :: i, j
5198     real, dimension(2) :: tarray
5199     real :: result
5200     call dtime(tarray, result)
5201     print *, result
5202     print *, tarray(1)
5203     print *, tarray(2)   
5204     do i=1,100000000    ! Just a delay
5205         j = i * i - i
5206     end do
5207     call dtime(tarray, result)
5208     print *, result
5209     print *, tarray(1)
5210     print *, tarray(2)
5211 end program test_dtime
5212 @end smallexample
5214 @item @emph{See also}:
5215 @ref{CPU_TIME}
5217 @end table
5221 @node EOSHIFT
5222 @section @code{EOSHIFT} --- End-off shift elements of an array
5223 @fnindex EOSHIFT
5224 @cindex array, shift
5226 @table @asis
5227 @item @emph{Description}:
5228 @code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on
5229 elements of @var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is
5230 omitted it is taken to be @code{1}.  @var{DIM} is a scalar of type
5231 @code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the
5232 rank of @var{ARRAY}.  If the rank of @var{ARRAY} is one, then all elements of
5233 @var{ARRAY} are shifted by @var{SHIFT} places.  If rank is greater than one,
5234 then all complete rank one sections of @var{ARRAY} along the given dimension are
5235 shifted.  Elements shifted out one end of each rank one section are dropped.  If
5236 @var{BOUNDARY} is present then the corresponding value of from @var{BOUNDARY}
5237 is copied back in the other end.  If @var{BOUNDARY} is not present then the
5238 following are copied in depending on the type of @var{ARRAY}.
5240 @multitable @columnfractions .15 .80
5241 @item @emph{Array Type} @tab @emph{Boundary Value}
5242 @item Numeric  @tab 0 of the type and kind of @var{ARRAY}.
5243 @item Logical  @tab @code{.FALSE.}.
5244 @item Character(@var{len}) @tab @var{len} blanks.
5245 @end multitable
5247 @item @emph{Standard}:
5248 Fortran 95 and later
5250 @item @emph{Class}:
5251 Transformational function
5253 @item @emph{Syntax}:
5254 @code{RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])}
5256 @item @emph{Arguments}:
5257 @multitable @columnfractions .15 .70
5258 @item @var{ARRAY}  @tab May be any type, not scalar.
5259 @item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
5260 @item @var{BOUNDARY} @tab Same type as @var{ARRAY}. 
5261 @item @var{DIM}    @tab The type shall be @code{INTEGER}.
5262 @end multitable
5264 @item @emph{Return value}:
5265 Returns an array of same type and rank as the @var{ARRAY} argument.
5267 @item @emph{Example}:
5268 @smallexample
5269 program test_eoshift
5270     integer, dimension(3,3) :: a
5271     a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
5272     print '(3i3)', a(1,:)
5273     print '(3i3)', a(2,:)
5274     print '(3i3)', a(3,:)    
5275     a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
5276     print *
5277     print '(3i3)', a(1,:)
5278     print '(3i3)', a(2,:)
5279     print '(3i3)', a(3,:)
5280 end program test_eoshift
5281 @end smallexample
5282 @end table
5286 @node EPSILON
5287 @section @code{EPSILON} --- Epsilon function
5288 @fnindex EPSILON
5289 @cindex model representation, epsilon
5291 @table @asis
5292 @item @emph{Description}:
5293 @code{EPSILON(X)} returns the smallest number @var{E} of the same kind
5294 as @var{X} such that @math{1 + E > 1}.
5296 @item @emph{Standard}:
5297 Fortran 95 and later
5299 @item @emph{Class}:
5300 Inquiry function
5302 @item @emph{Syntax}:
5303 @code{RESULT = EPSILON(X)}
5305 @item @emph{Arguments}:
5306 @multitable @columnfractions .15 .70
5307 @item @var{X} @tab The type shall be @code{REAL}.
5308 @end multitable
5310 @item @emph{Return value}:
5311 The return value is of same type as the argument.
5313 @item @emph{Example}:
5314 @smallexample
5315 program test_epsilon
5316     real :: x = 3.143
5317     real(8) :: y = 2.33
5318     print *, EPSILON(x)
5319     print *, EPSILON(y)
5320 end program test_epsilon
5321 @end smallexample
5322 @end table
5326 @node ERF
5327 @section @code{ERF} --- Error function 
5328 @fnindex ERF
5329 @cindex error function
5331 @table @asis
5332 @item @emph{Description}:
5333 @code{ERF(X)} computes the error function of @var{X}.
5335 @item @emph{Standard}:
5336 Fortran 2008 and later
5338 @item @emph{Class}:
5339 Elemental function
5341 @item @emph{Syntax}:
5342 @code{RESULT = ERF(X)}
5344 @item @emph{Arguments}:
5345 @multitable @columnfractions .15 .70
5346 @item @var{X} @tab The type shall be @code{REAL}.
5347 @end multitable
5349 @item @emph{Return value}:
5350 The return value is of type @code{REAL}, of the same kind as
5351 @var{X} and lies in the range @math{-1 \leq erf (x) \leq 1 }.
5353 @item @emph{Example}:
5354 @smallexample
5355 program test_erf
5356   real(8) :: x = 0.17_8
5357   x = erf(x)
5358 end program test_erf
5359 @end smallexample
5361 @item @emph{Specific names}:
5362 @multitable @columnfractions .20 .20 .20 .25
5363 @item Name            @tab Argument          @tab Return type       @tab Standard
5364 @item @code{DERF(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
5365 @end multitable
5366 @end table
5370 @node ERFC
5371 @section @code{ERFC} --- Error function 
5372 @fnindex ERFC
5373 @cindex error function, complementary
5375 @table @asis
5376 @item @emph{Description}:
5377 @code{ERFC(X)} computes the complementary error function of @var{X}.
5379 @item @emph{Standard}:
5380 Fortran 2008 and later
5382 @item @emph{Class}:
5383 Elemental function
5385 @item @emph{Syntax}:
5386 @code{RESULT = ERFC(X)}
5388 @item @emph{Arguments}:
5389 @multitable @columnfractions .15 .70
5390 @item @var{X} @tab The type shall be @code{REAL}.
5391 @end multitable
5393 @item @emph{Return value}:
5394 The return value is of type @code{REAL} and of the same kind as @var{X}.
5395 It lies in the range @math{ 0 \leq erfc (x) \leq 2 }.
5397 @item @emph{Example}:
5398 @smallexample
5399 program test_erfc
5400   real(8) :: x = 0.17_8
5401   x = erfc(x)
5402 end program test_erfc
5403 @end smallexample
5405 @item @emph{Specific names}:
5406 @multitable @columnfractions .20 .20 .20 .25
5407 @item Name            @tab Argument          @tab Return type       @tab Standard
5408 @item @code{DERFC(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
5409 @end multitable
5410 @end table
5414 @node ERFC_SCALED
5415 @section @code{ERFC_SCALED} --- Error function 
5416 @fnindex ERFC_SCALED
5417 @cindex error function, complementary, exponentially-scaled
5419 @table @asis
5420 @item @emph{Description}:
5421 @code{ERFC_SCALED(X)} computes the exponentially-scaled complementary
5422 error function of @var{X}.
5424 @item @emph{Standard}:
5425 Fortran 2008 and later
5427 @item @emph{Class}:
5428 Elemental function
5430 @item @emph{Syntax}:
5431 @code{RESULT = ERFC_SCALED(X)}
5433 @item @emph{Arguments}:
5434 @multitable @columnfractions .15 .70
5435 @item @var{X} @tab The type shall be @code{REAL}.
5436 @end multitable
5438 @item @emph{Return value}:
5439 The return value is of type @code{REAL} and of the same kind as @var{X}.
5441 @item @emph{Example}:
5442 @smallexample
5443 program test_erfc_scaled
5444   real(8) :: x = 0.17_8
5445   x = erfc_scaled(x)
5446 end program test_erfc_scaled
5447 @end smallexample
5448 @end table
5452 @node ETIME
5453 @section @code{ETIME} --- Execution time subroutine (or function)
5454 @fnindex ETIME
5455 @cindex time, elapsed
5457 @table @asis
5458 @item @emph{Description}:
5459 @code{ETIME(VALUES, TIME)} returns the number of seconds of runtime
5460 since the start of the process's execution in @var{TIME}.  @var{VALUES}
5461 returns the user and system components of this time in @code{VALUES(1)} and
5462 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) + VALUES(2)}.
5464 On some systems, the underlying timings are represented using types with
5465 sufficiently small limits that overflows (wrap around) are possible, such as
5466 32-bit types. Therefore, the values returned by this intrinsic might be, or
5467 become, negative, or numerically less than previous values, during a single
5468 run of the compiled program.
5470 This intrinsic is provided in both subroutine and function forms; however,
5471 only one form can be used in any given program unit.
5473 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
5475 @multitable @columnfractions .15 .30 .60
5476 @item @tab @code{VALUES(1)}: @tab User time in seconds.
5477 @item @tab @code{VALUES(2)}: @tab System time in seconds.
5478 @item @tab @code{TIME}: @tab Run time since start in seconds.
5479 @end multitable
5481 @item @emph{Standard}:
5482 GNU extension
5484 @item @emph{Class}:
5485 Subroutine, function
5487 @item @emph{Syntax}:
5488 @multitable @columnfractions .80
5489 @item @code{CALL ETIME(VALUES, TIME)}.
5490 @item @code{TIME = ETIME(VALUES)}, (not recommended).
5491 @end multitable
5493 @item @emph{Arguments}:
5494 @multitable @columnfractions .15 .70
5495 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
5496 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
5497 @end multitable
5499 @item @emph{Return value}:
5500 Elapsed time in seconds since the start of program execution.
5502 @item @emph{Example}:
5503 @smallexample
5504 program test_etime
5505     integer(8) :: i, j
5506     real, dimension(2) :: tarray
5507     real :: result
5508     call ETIME(tarray, result)
5509     print *, result
5510     print *, tarray(1)
5511     print *, tarray(2)   
5512     do i=1,100000000    ! Just a delay
5513         j = i * i - i
5514     end do
5515     call ETIME(tarray, result)
5516     print *, result
5517     print *, tarray(1)
5518     print *, tarray(2)
5519 end program test_etime
5520 @end smallexample
5522 @item @emph{See also}:
5523 @ref{CPU_TIME}
5525 @end table
5529 @node EVENT_QUERY
5530 @section @code{EVENT_QUERY} --- Query whether a coarray event has occurred
5531 @fnindex EVENT_QUERY
5532 @cindex Events, EVENT_QUERY
5534 @table @asis
5535 @item @emph{Description}:
5536 @code{EVENT_QUERY} assignes the number of events to @var{COUNT} which have been
5537 posted to the @var{EVENT} variable and not yet been removed by calling
5538 @code{EVENT WAIT}. When @var{STAT} is present and the invocation was successful,
5539 it is assigned the value 0. If it is present and the invocation has failed,
5540 it is assigned a positive value and @var{COUNT} is assigned the value @math{-1}.
5542 @item @emph{Standard}:
5543 TS 18508 or later
5545 @item @emph{Class}:
5546  subroutine
5548 @item @emph{Syntax}:
5549 @code{CALL EVENT_QUERY (EVENT, COUNT [, STAT])}
5551 @item @emph{Arguments}:
5552 @multitable @columnfractions .15 .70
5553 @item @var{EVENT}  @tab (intent(IN)) Scalar of type @code{EVENT_TYPE},
5554 defined in @code{ISO_FORTRAN_ENV}; shall not be coindexed.
5555 @item @var{COUNT}  @tab (intent(out))Scalar integer with at least the
5556 precision of default integer.
5557 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
5558 @end multitable
5560 @item @emph{Example}:
5561 @smallexample
5562 program atomic
5563   use iso_fortran_env
5564   implicit none
5565   type(event_type) :: event_value_has_been_set[*]
5566   integer :: cnt
5567   if (this_image() == 1) then
5568     call event_query (event_value_has_been_set, cnt)
5569     if (cnt > 0) write(*,*) "Value has been set"
5570   elseif (this_image() == 2) then
5571     event post (event_value_has_been_set[1])
5572   end if
5573 end program atomic
5574 @end smallexample
5576 @end table
5580 @node EXECUTE_COMMAND_LINE
5581 @section @code{EXECUTE_COMMAND_LINE} --- Execute a shell command
5582 @fnindex EXECUTE_COMMAND_LINE
5583 @cindex system, system call
5584 @cindex command line
5586 @table @asis
5587 @item @emph{Description}:
5588 @code{EXECUTE_COMMAND_LINE} runs a shell command, synchronously or
5589 asynchronously.
5591 The @code{COMMAND} argument is passed to the shell and executed, using
5592 the C library's @code{system} call.  (The shell is @code{sh} on Unix
5593 systems, and @code{cmd.exe} on Windows.)  If @code{WAIT} is present
5594 and has the value false, the execution of the command is asynchronous
5595 if the system supports it; otherwise, the command is executed
5596 synchronously.
5598 The three last arguments allow the user to get status information.  After
5599 synchronous execution, @code{EXITSTAT} contains the integer exit code of
5600 the command, as returned by @code{system}.  @code{CMDSTAT} is set to zero
5601 if the command line was executed (whatever its exit status was).
5602 @code{CMDMSG} is assigned an error message if an error has occurred.
5604 Note that the @code{system} function need not be thread-safe. It is
5605 the responsibility of the user to ensure that @code{system} is not
5606 called concurrently.
5608 @item @emph{Standard}:
5609 Fortran 2008 and later
5611 @item @emph{Class}:
5612 Subroutine
5614 @item @emph{Syntax}:
5615 @code{CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])}
5617 @item @emph{Arguments}:
5618 @multitable @columnfractions .15 .70
5619 @item @var{COMMAND} @tab Shall be a default @code{CHARACTER} scalar.
5620 @item @var{WAIT} @tab (Optional) Shall be a default @code{LOGICAL} scalar.
5621 @item @var{EXITSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
5622 default kind.
5623 @item @var{CMDSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
5624 default kind.
5625 @item @var{CMDMSG} @tab (Optional) Shall be an @code{CHARACTER} scalar of the
5626 default kind.
5627 @end multitable
5629 @item @emph{Example}:
5630 @smallexample
5631 program test_exec
5632   integer :: i
5634   call execute_command_line ("external_prog.exe", exitstat=i)
5635   print *, "Exit status of external_prog.exe was ", i
5637   call execute_command_line ("reindex_files.exe", wait=.false.)
5638   print *, "Now reindexing files in the background"
5640 end program test_exec
5641 @end smallexample
5644 @item @emph{Note}:
5646 Because this intrinsic is implemented in terms of the @code{system}
5647 function call, its behavior with respect to signaling is processor
5648 dependent. In particular, on POSIX-compliant systems, the SIGINT and
5649 SIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As
5650 such, if the parent process is terminated, the child process might not be
5651 terminated alongside.
5654 @item @emph{See also}:
5655 @ref{SYSTEM}
5656 @end table
5660 @node EXIT
5661 @section @code{EXIT} --- Exit the program with status. 
5662 @fnindex EXIT
5663 @cindex program termination
5664 @cindex terminate program
5666 @table @asis
5667 @item @emph{Description}:
5668 @code{EXIT} causes immediate termination of the program with status.  If status
5669 is omitted it returns the canonical @emph{success} for the system.  All Fortran
5670 I/O units are closed. 
5672 @item @emph{Standard}:
5673 GNU extension
5675 @item @emph{Class}:
5676 Subroutine
5678 @item @emph{Syntax}:
5679 @code{CALL EXIT([STATUS])}
5681 @item @emph{Arguments}:
5682 @multitable @columnfractions .15 .70
5683 @item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind.
5684 @end multitable
5686 @item @emph{Return value}:
5687 @code{STATUS} is passed to the parent process on exit.
5689 @item @emph{Example}:
5690 @smallexample
5691 program test_exit
5692   integer :: STATUS = 0
5693   print *, 'This program is going to exit.'
5694   call EXIT(STATUS)
5695 end program test_exit
5696 @end smallexample
5698 @item @emph{See also}:
5699 @ref{ABORT}, @ref{KILL}
5700 @end table
5704 @node EXP
5705 @section @code{EXP} --- Exponential function 
5706 @fnindex EXP
5707 @fnindex DEXP
5708 @fnindex CEXP
5709 @fnindex ZEXP
5710 @fnindex CDEXP
5711 @cindex exponential function
5712 @cindex logarithm function, inverse
5714 @table @asis
5715 @item @emph{Description}:
5716 @code{EXP(X)} computes the base @math{e} exponential of @var{X}.
5718 @item @emph{Standard}:
5719 Fortran 77 and later, has overloads that are GNU extensions
5721 @item @emph{Class}:
5722 Elemental function
5724 @item @emph{Syntax}:
5725 @code{RESULT = EXP(X)}
5727 @item @emph{Arguments}:
5728 @multitable @columnfractions .15 .70
5729 @item @var{X} @tab The type shall be @code{REAL} or
5730 @code{COMPLEX}.
5731 @end multitable
5733 @item @emph{Return value}:
5734 The return value has same type and kind as @var{X}.
5736 @item @emph{Example}:
5737 @smallexample
5738 program test_exp
5739   real :: x = 1.0
5740   x = exp(x)
5741 end program test_exp
5742 @end smallexample
5744 @item @emph{Specific names}:
5745 @multitable @columnfractions .20 .20 .20 .25
5746 @item Name            @tab Argument             @tab Return type         @tab Standard
5747 @item @code{EXP(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}      @tab Fortran 77 and later
5748 @item @code{DEXP(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}      @tab Fortran 77 and later
5749 @item @code{CEXP(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}   @tab Fortran 77 and later
5750 @item @code{ZEXP(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
5751 @item @code{CDEXP(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
5752 @end multitable
5753 @end table
5757 @node EXPONENT
5758 @section @code{EXPONENT} --- Exponent function 
5759 @fnindex EXPONENT
5760 @cindex real number, exponent
5761 @cindex floating point, exponent
5763 @table @asis
5764 @item @emph{Description}:
5765 @code{EXPONENT(X)} returns the value of the exponent part of @var{X}. If @var{X}
5766 is zero the value returned is zero. 
5768 @item @emph{Standard}:
5769 Fortran 95 and later
5771 @item @emph{Class}:
5772 Elemental function
5774 @item @emph{Syntax}:
5775 @code{RESULT = EXPONENT(X)}
5777 @item @emph{Arguments}:
5778 @multitable @columnfractions .15 .70
5779 @item @var{X} @tab The type shall be @code{REAL}.
5780 @end multitable
5782 @item @emph{Return value}:
5783 The return value is of type default @code{INTEGER}.
5785 @item @emph{Example}:
5786 @smallexample
5787 program test_exponent
5788   real :: x = 1.0
5789   integer :: i
5790   i = exponent(x)
5791   print *, i
5792   print *, exponent(0.0)
5793 end program test_exponent
5794 @end smallexample
5795 @end table
5799 @node EXTENDS_TYPE_OF
5800 @section @code{EXTENDS_TYPE_OF} ---  Query dynamic type for extension
5801 @fnindex EXTENDS_TYPE_OF
5803 @table @asis
5804 @item @emph{Description}:
5805 Query dynamic type for extension.
5807 @item @emph{Standard}:
5808 Fortran 2003 and later
5810 @item @emph{Class}:
5811 Inquiry function
5813 @item @emph{Syntax}:
5814 @code{RESULT = EXTENDS_TYPE_OF(A, MOLD)}
5816 @item @emph{Arguments}:
5817 @multitable @columnfractions .15 .70
5818 @item @var{A} @tab Shall be an object of extensible declared type or
5819 unlimited polymorphic. 
5820 @item @var{MOLD} @tab Shall be an object of extensible declared type or
5821 unlimited polymorphic. 
5822 @end multitable
5824 @item @emph{Return value}:
5825 The return value is a scalar of type default logical. It is true if and only if
5826 the dynamic type of A is an extension type of the dynamic type of MOLD.
5829 @item @emph{See also}:
5830 @ref{SAME_TYPE_AS}
5831 @end table
5835 @node FDATE
5836 @section @code{FDATE} --- Get the current time as a string
5837 @fnindex FDATE
5838 @cindex time, current
5839 @cindex current time
5840 @cindex date, current
5841 @cindex current date
5843 @table @asis
5844 @item @emph{Description}:
5845 @code{FDATE(DATE)} returns the current date (using the same format as
5846 @ref{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE,
5847 TIME())}.
5849 This intrinsic is provided in both subroutine and function forms; however,
5850 only one form can be used in any given program unit.
5852 @item @emph{Standard}:
5853 GNU extension
5855 @item @emph{Class}:
5856 Subroutine, function
5858 @item @emph{Syntax}:
5859 @multitable @columnfractions .80
5860 @item @code{CALL FDATE(DATE)}.
5861 @item @code{DATE = FDATE()}.
5862 @end multitable
5864 @item @emph{Arguments}:
5865 @multitable @columnfractions .15 .70
5866 @item @var{DATE}@tab The type shall be of type @code{CHARACTER} of the
5867 default kind. It is an @code{INTENT(OUT)} argument.  If the length of
5868 this variable is too short for the date and time string to fit
5869 completely, it will be blank on procedure return.
5870 @end multitable
5872 @item @emph{Return value}:
5873 The current date and time as a string.
5875 @item @emph{Example}:
5876 @smallexample
5877 program test_fdate
5878     integer(8) :: i, j
5879     character(len=30) :: date
5880     call fdate(date)
5881     print *, 'Program started on ', date
5882     do i = 1, 100000000 ! Just a delay
5883         j = i * i - i
5884     end do
5885     call fdate(date)
5886     print *, 'Program ended on ', date
5887 end program test_fdate
5888 @end smallexample
5890 @item @emph{See also}:
5891 @ref{DATE_AND_TIME}, @ref{CTIME}
5892 @end table
5895 @node FGET
5896 @section @code{FGET} --- Read a single character in stream mode from stdin 
5897 @fnindex FGET
5898 @cindex read character, stream mode
5899 @cindex stream mode, read character
5900 @cindex file operation, read character
5902 @table @asis
5903 @item @emph{Description}:
5904 Read a single character in stream mode from stdin by bypassing normal 
5905 formatted output. Stream I/O should not be mixed with normal record-oriented 
5906 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
5908 This intrinsic is provided in both subroutine and function forms; however,
5909 only one form can be used in any given program unit.
5911 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
5912 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
5913 Programmers should consider the use of new stream IO feature in new code 
5914 for future portability. See also @ref{Fortran 2003 status}.
5916 @item @emph{Standard}:
5917 GNU extension
5919 @item @emph{Class}:
5920 Subroutine, function
5922 @item @emph{Syntax}:
5923 @multitable @columnfractions .80
5924 @item @code{CALL FGET(C [, STATUS])}
5925 @item @code{STATUS = FGET(C)}
5926 @end multitable
5928 @item @emph{Arguments}:
5929 @multitable @columnfractions .15 .70
5930 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
5931 kind.
5932 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
5933 Returns 0 on success, -1 on end-of-file, and a system specific positive
5934 error code otherwise.
5935 @end multitable
5937 @item @emph{Example}:
5938 @smallexample
5939 PROGRAM test_fget
5940   INTEGER, PARAMETER :: strlen = 100
5941   INTEGER :: status, i = 1
5942   CHARACTER(len=strlen) :: str = ""
5944   WRITE (*,*) 'Enter text:'
5945   DO
5946     CALL fget(str(i:i), status)
5947     if (status /= 0 .OR. i > strlen) exit
5948     i = i + 1
5949   END DO
5950   WRITE (*,*) TRIM(str)
5951 END PROGRAM
5952 @end smallexample
5954 @item @emph{See also}:
5955 @ref{FGETC}, @ref{FPUT}, @ref{FPUTC}
5956 @end table
5960 @node FGETC
5961 @section @code{FGETC} --- Read a single character in stream mode
5962 @fnindex FGETC
5963 @cindex read character, stream mode
5964 @cindex stream mode, read character
5965 @cindex file operation, read character
5967 @table @asis
5968 @item @emph{Description}:
5969 Read a single character in stream mode by bypassing normal formatted output. 
5970 Stream I/O should not be mixed with normal record-oriented (formatted or 
5971 unformatted) I/O on the same unit; the results are unpredictable.
5973 This intrinsic is provided in both subroutine and function forms; however,
5974 only one form can be used in any given program unit.
5976 Note that the @code{FGET} intrinsic is provided for backwards compatibility
5977 with @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
5978 Programmers should consider the use of new stream IO feature in new code 
5979 for future portability. See also @ref{Fortran 2003 status}.
5981 @item @emph{Standard}:
5982 GNU extension
5984 @item @emph{Class}:
5985 Subroutine, function
5987 @item @emph{Syntax}:
5988 @multitable @columnfractions .80
5989 @item @code{CALL FGETC(UNIT, C [, STATUS])}
5990 @item @code{STATUS = FGETC(UNIT, C)}
5991 @end multitable
5993 @item @emph{Arguments}:
5994 @multitable @columnfractions .15 .70
5995 @item @var{UNIT}   @tab The type shall be @code{INTEGER}.
5996 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
5997 kind.
5998 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
5999 Returns 0 on success, -1 on end-of-file and a system specific positive
6000 error code otherwise.
6001 @end multitable
6003 @item @emph{Example}:
6004 @smallexample
6005 PROGRAM test_fgetc
6006   INTEGER :: fd = 42, status
6007   CHARACTER :: c
6009   OPEN(UNIT=fd, FILE="/etc/passwd", ACTION="READ", STATUS = "OLD")
6010   DO
6011     CALL fgetc(fd, c, status)
6012     IF (status /= 0) EXIT
6013     call fput(c)
6014   END DO
6015   CLOSE(UNIT=fd)
6016 END PROGRAM
6017 @end smallexample
6019 @item @emph{See also}:
6020 @ref{FGET}, @ref{FPUT}, @ref{FPUTC}
6021 @end table
6025 @node FLOOR
6026 @section @code{FLOOR} --- Integer floor function
6027 @fnindex FLOOR
6028 @cindex floor
6029 @cindex rounding, floor
6031 @table @asis
6032 @item @emph{Description}:
6033 @code{FLOOR(A)} returns the greatest integer less than or equal to @var{X}.
6035 @item @emph{Standard}:
6036 Fortran 95 and later
6038 @item @emph{Class}:
6039 Elemental function
6041 @item @emph{Syntax}:
6042 @code{RESULT = FLOOR(A [, KIND])}
6044 @item @emph{Arguments}:
6045 @multitable @columnfractions .15 .70
6046 @item @var{A} @tab The type shall be @code{REAL}.
6047 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
6048 expression indicating the kind parameter of the result.
6049 @end multitable
6051 @item @emph{Return value}:
6052 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
6053 and of default-kind @code{INTEGER} otherwise.
6055 @item @emph{Example}:
6056 @smallexample
6057 program test_floor
6058     real :: x = 63.29
6059     real :: y = -63.59
6060     print *, floor(x) ! returns 63
6061     print *, floor(y) ! returns -64
6062 end program test_floor
6063 @end smallexample
6065 @item @emph{See also}:
6066 @ref{CEILING}, @ref{NINT}
6068 @end table
6072 @node FLUSH
6073 @section @code{FLUSH} --- Flush I/O unit(s)
6074 @fnindex FLUSH
6075 @cindex file operation, flush
6077 @table @asis
6078 @item @emph{Description}:
6079 Flushes Fortran unit(s) currently open for output. Without the optional
6080 argument, all units are flushed, otherwise just the unit specified.
6082 @item @emph{Standard}:
6083 GNU extension
6085 @item @emph{Class}:
6086 Subroutine
6088 @item @emph{Syntax}:
6089 @code{CALL FLUSH(UNIT)}
6091 @item @emph{Arguments}:
6092 @multitable @columnfractions .15 .70
6093 @item @var{UNIT} @tab (Optional) The type shall be @code{INTEGER}.
6094 @end multitable
6096 @item @emph{Note}:
6097 Beginning with the Fortran 2003 standard, there is a @code{FLUSH}
6098 statement that should be preferred over the @code{FLUSH} intrinsic.
6100 The @code{FLUSH} intrinsic and the Fortran 2003 @code{FLUSH} statement
6101 have identical effect: they flush the runtime library's I/O buffer so
6102 that the data becomes visible to other processes. This does not guarantee
6103 that the data is committed to disk.
6105 On POSIX systems, you can request that all data is transferred  to  the
6106 storage device by calling the @code{fsync} function, with the POSIX file
6107 descriptor of the I/O unit as argument (retrieved with GNU intrinsic
6108 @code{FNUM}). The following example shows how:
6110 @smallexample
6111   ! Declare the interface for POSIX fsync function
6112   interface
6113     function fsync (fd) bind(c,name="fsync")
6114     use iso_c_binding, only: c_int
6115       integer(c_int), value :: fd
6116       integer(c_int) :: fsync
6117     end function fsync
6118   end interface
6120   ! Variable declaration
6121   integer :: ret
6123   ! Opening unit 10
6124   open (10,file="foo")
6126   ! ...
6127   ! Perform I/O on unit 10
6128   ! ...
6130   ! Flush and sync
6131   flush(10)
6132   ret = fsync(fnum(10))
6134   ! Handle possible error
6135   if (ret /= 0) stop "Error calling FSYNC"
6136 @end smallexample
6138 @end table
6142 @node FNUM
6143 @section @code{FNUM} --- File number function
6144 @fnindex FNUM
6145 @cindex file operation, file number
6147 @table @asis
6148 @item @emph{Description}:
6149 @code{FNUM(UNIT)} returns the POSIX file descriptor number corresponding to the
6150 open Fortran I/O unit @code{UNIT}.
6152 @item @emph{Standard}:
6153 GNU extension
6155 @item @emph{Class}:
6156 Function
6158 @item @emph{Syntax}:
6159 @code{RESULT = FNUM(UNIT)}
6161 @item @emph{Arguments}:
6162 @multitable @columnfractions .15 .70
6163 @item @var{UNIT} @tab The type shall be @code{INTEGER}.
6164 @end multitable
6166 @item @emph{Return value}:
6167 The return value is of type @code{INTEGER}
6169 @item @emph{Example}:
6170 @smallexample
6171 program test_fnum
6172   integer :: i
6173   open (unit=10, status = "scratch")
6174   i = fnum(10)
6175   print *, i
6176   close (10)
6177 end program test_fnum
6178 @end smallexample
6179 @end table
6183 @node FPUT
6184 @section @code{FPUT} --- Write a single character in stream mode to stdout 
6185 @fnindex FPUT
6186 @cindex write character, stream mode
6187 @cindex stream mode, write character
6188 @cindex file operation, write character
6190 @table @asis
6191 @item @emph{Description}:
6192 Write a single character in stream mode to stdout by bypassing normal 
6193 formatted output. Stream I/O should not be mixed with normal record-oriented 
6194 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
6196 This intrinsic is provided in both subroutine and function forms; however,
6197 only one form can be used in any given program unit.
6199 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
6200 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
6201 Programmers should consider the use of new stream IO feature in new code 
6202 for future portability. See also @ref{Fortran 2003 status}.
6204 @item @emph{Standard}:
6205 GNU extension
6207 @item @emph{Class}:
6208 Subroutine, function
6210 @item @emph{Syntax}:
6211 @multitable @columnfractions .80
6212 @item @code{CALL FPUT(C [, STATUS])}
6213 @item @code{STATUS = FPUT(C)}
6214 @end multitable
6216 @item @emph{Arguments}:
6217 @multitable @columnfractions .15 .70
6218 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
6219 kind.
6220 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
6221 Returns 0 on success, -1 on end-of-file and a system specific positive
6222 error code otherwise.
6223 @end multitable
6225 @item @emph{Example}:
6226 @smallexample
6227 PROGRAM test_fput
6228   CHARACTER(len=10) :: str = "gfortran"
6229   INTEGER :: i
6230   DO i = 1, len_trim(str)
6231     CALL fput(str(i:i))
6232   END DO
6233 END PROGRAM
6234 @end smallexample
6236 @item @emph{See also}:
6237 @ref{FPUTC}, @ref{FGET}, @ref{FGETC}
6238 @end table
6242 @node FPUTC
6243 @section @code{FPUTC} --- Write a single character in stream mode
6244 @fnindex FPUTC
6245 @cindex write character, stream mode
6246 @cindex stream mode, write character
6247 @cindex file operation, write character
6249 @table @asis
6250 @item @emph{Description}:
6251 Write a single character in stream mode by bypassing normal formatted 
6252 output. Stream I/O should not be mixed with normal record-oriented 
6253 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
6255 This intrinsic is provided in both subroutine and function forms; however,
6256 only one form can be used in any given program unit.
6258 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
6259 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
6260 Programmers should consider the use of new stream IO feature in new code 
6261 for future portability. See also @ref{Fortran 2003 status}.
6263 @item @emph{Standard}:
6264 GNU extension
6266 @item @emph{Class}:
6267 Subroutine, function
6269 @item @emph{Syntax}:
6270 @multitable @columnfractions .80
6271 @item @code{CALL FPUTC(UNIT, C [, STATUS])}
6272 @item @code{STATUS = FPUTC(UNIT, C)}
6273 @end multitable
6275 @item @emph{Arguments}:
6276 @multitable @columnfractions .15 .70
6277 @item @var{UNIT}   @tab The type shall be @code{INTEGER}.
6278 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
6279 kind.
6280 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
6281 Returns 0 on success, -1 on end-of-file and a system specific positive
6282 error code otherwise.
6283 @end multitable
6285 @item @emph{Example}:
6286 @smallexample
6287 PROGRAM test_fputc
6288   CHARACTER(len=10) :: str = "gfortran"
6289   INTEGER :: fd = 42, i
6291   OPEN(UNIT = fd, FILE = "out", ACTION = "WRITE", STATUS="NEW")
6292   DO i = 1, len_trim(str)
6293     CALL fputc(fd, str(i:i))
6294   END DO
6295   CLOSE(fd)
6296 END PROGRAM
6297 @end smallexample
6299 @item @emph{See also}:
6300 @ref{FPUT}, @ref{FGET}, @ref{FGETC}
6301 @end table
6305 @node FRACTION
6306 @section @code{FRACTION} --- Fractional part of the model representation
6307 @fnindex FRACTION
6308 @cindex real number, fraction
6309 @cindex floating point, fraction
6311 @table @asis
6312 @item @emph{Description}:
6313 @code{FRACTION(X)} returns the fractional part of the model
6314 representation of @code{X}.
6316 @item @emph{Standard}:
6317 Fortran 95 and later
6319 @item @emph{Class}:
6320 Elemental function
6322 @item @emph{Syntax}:
6323 @code{Y = FRACTION(X)}
6325 @item @emph{Arguments}:
6326 @multitable @columnfractions .15 .70
6327 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
6328 @end multitable
6330 @item @emph{Return value}:
6331 The return value is of the same type and kind as the argument.
6332 The fractional part of the model representation of @code{X} is returned;
6333 it is @code{X * RADIX(X)**(-EXPONENT(X))}.
6335 @item @emph{Example}:
6336 @smallexample
6337 program test_fraction
6338   real :: x
6339   x = 178.1387e-4
6340   print *, fraction(x), x * radix(x)**(-exponent(x))
6341 end program test_fraction
6342 @end smallexample
6344 @end table
6348 @node FREE
6349 @section @code{FREE} --- Frees memory
6350 @fnindex FREE
6351 @cindex pointer, cray
6353 @table @asis
6354 @item @emph{Description}:
6355 Frees memory previously allocated by @code{MALLOC}. The @code{FREE}
6356 intrinsic is an extension intended to be used with Cray pointers, and is
6357 provided in GNU Fortran to allow user to compile legacy code. For
6358 new code using Fortran 95 pointers, the memory de-allocation intrinsic is
6359 @code{DEALLOCATE}.
6361 @item @emph{Standard}:
6362 GNU extension
6364 @item @emph{Class}:
6365 Subroutine
6367 @item @emph{Syntax}:
6368 @code{CALL FREE(PTR)}
6370 @item @emph{Arguments}:
6371 @multitable @columnfractions .15 .70
6372 @item @var{PTR} @tab The type shall be @code{INTEGER}. It represents the
6373 location of the memory that should be de-allocated.
6374 @end multitable
6376 @item @emph{Return value}:
6377 None
6379 @item @emph{Example}:
6380 See @code{MALLOC} for an example.
6382 @item @emph{See also}:
6383 @ref{MALLOC}
6384 @end table
6388 @node FSEEK
6389 @section @code{FSEEK} --- Low level file positioning subroutine
6390 @fnindex FSEEK
6391 @cindex file operation, seek
6392 @cindex file operation, position
6394 @table @asis
6395 @item @emph{Description}:
6396 Moves @var{UNIT} to the specified @var{OFFSET}. If @var{WHENCE} 
6397 is set to 0, the @var{OFFSET} is taken as an absolute value @code{SEEK_SET},
6398 if set to 1, @var{OFFSET} is taken to be relative to the current position 
6399 @code{SEEK_CUR}, and if set to 2 relative to the end of the file @code{SEEK_END}.
6400 On error, @var{STATUS} is set to a nonzero value. If @var{STATUS} the seek 
6401 fails silently.
6403 This intrinsic routine is not fully backwards compatible with @command{g77}. 
6404 In @command{g77}, the @code{FSEEK} takes a statement label instead of a 
6405 @var{STATUS} variable. If FSEEK is used in old code, change
6406 @smallexample
6407   CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
6408 @end smallexample 
6410 @smallexample
6411   INTEGER :: status
6412   CALL FSEEK(UNIT, OFFSET, WHENCE, status)
6413   IF (status /= 0) GOTO label
6414 @end smallexample 
6416 Please note that GNU Fortran provides the Fortran 2003 Stream facility.
6417 Programmers should consider the use of new stream IO feature in new code 
6418 for future portability. See also @ref{Fortran 2003 status}.
6420 @item @emph{Standard}:
6421 GNU extension
6423 @item @emph{Class}:
6424 Subroutine
6426 @item @emph{Syntax}:
6427 @code{CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])}
6429 @item @emph{Arguments}:
6430 @multitable @columnfractions .15 .70
6431 @item @var{UNIT}   @tab Shall be a scalar of type @code{INTEGER}.
6432 @item @var{OFFSET} @tab Shall be a scalar of type @code{INTEGER}.
6433 @item @var{WHENCE} @tab Shall be a scalar of type @code{INTEGER}.
6434 Its value shall be either 0, 1 or 2.
6435 @item @var{STATUS} @tab (Optional) shall be a scalar of type 
6436 @code{INTEGER(4)}.
6437 @end multitable
6439 @item @emph{Example}:
6440 @smallexample
6441 PROGRAM test_fseek
6442   INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2
6443   INTEGER :: fd, offset, ierr
6445   ierr   = 0
6446   offset = 5
6447   fd     = 10
6449   OPEN(UNIT=fd, FILE="fseek.test")
6450   CALL FSEEK(fd, offset, SEEK_SET, ierr)  ! move to OFFSET
6451   print *, FTELL(fd), ierr
6453   CALL FSEEK(fd, 0, SEEK_END, ierr)       ! move to end
6454   print *, FTELL(fd), ierr
6456   CALL FSEEK(fd, 0, SEEK_SET, ierr)       ! move to beginning
6457   print *, FTELL(fd), ierr
6459   CLOSE(UNIT=fd)
6460 END PROGRAM
6461 @end smallexample
6463 @item @emph{See also}:
6464 @ref{FTELL}
6465 @end table
6469 @node FSTAT
6470 @section @code{FSTAT} --- Get file status
6471 @fnindex FSTAT
6472 @cindex file system, file status
6474 @table @asis
6475 @item @emph{Description}:
6476 @code{FSTAT} is identical to @ref{STAT}, except that information about an 
6477 already opened file is obtained.
6479 The elements in @code{VALUES} are the same as described by @ref{STAT}.
6481 This intrinsic is provided in both subroutine and function forms; however,
6482 only one form can be used in any given program unit.
6484 @item @emph{Standard}:
6485 GNU extension
6487 @item @emph{Class}:
6488 Subroutine, function
6490 @item @emph{Syntax}:
6491 @multitable @columnfractions .80
6492 @item @code{CALL FSTAT(UNIT, VALUES [, STATUS])}
6493 @item @code{STATUS = FSTAT(UNIT, VALUES)}
6494 @end multitable
6496 @item @emph{Arguments}:
6497 @multitable @columnfractions .15 .70
6498 @item @var{UNIT}   @tab An open I/O unit number of type @code{INTEGER}.
6499 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
6500 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
6501 on success and a system specific error code otherwise.
6502 @end multitable
6504 @item @emph{Example}:
6505 See @ref{STAT} for an example.
6507 @item @emph{See also}:
6508 To stat a link: @ref{LSTAT}, to stat a file: @ref{STAT}
6509 @end table
6513 @node FTELL
6514 @section @code{FTELL} --- Current stream position
6515 @fnindex FTELL
6516 @cindex file operation, position
6518 @table @asis
6519 @item @emph{Description}:
6520 Retrieves the current position within an open file.
6522 This intrinsic is provided in both subroutine and function forms; however,
6523 only one form can be used in any given program unit.
6525 @item @emph{Standard}:
6526 GNU extension
6528 @item @emph{Class}:
6529 Subroutine, function
6531 @item @emph{Syntax}:
6532 @multitable @columnfractions .80
6533 @item @code{CALL FTELL(UNIT, OFFSET)}
6534 @item @code{OFFSET = FTELL(UNIT)}
6535 @end multitable
6537 @item @emph{Arguments}:
6538 @multitable @columnfractions .15 .70
6539 @item @var{OFFSET}  @tab Shall of type @code{INTEGER}.
6540 @item @var{UNIT}    @tab Shall of type @code{INTEGER}.
6541 @end multitable
6543 @item @emph{Return value}:
6544 In either syntax, @var{OFFSET} is set to the current offset of unit
6545 number @var{UNIT}, or to @math{-1} if the unit is not currently open.
6547 @item @emph{Example}:
6548 @smallexample
6549 PROGRAM test_ftell
6550   INTEGER :: i
6551   OPEN(10, FILE="temp.dat")
6552   CALL ftell(10,i)
6553   WRITE(*,*) i
6554 END PROGRAM
6555 @end smallexample
6557 @item @emph{See also}:
6558 @ref{FSEEK}
6559 @end table
6563 @node GAMMA
6564 @section @code{GAMMA} --- Gamma function
6565 @fnindex GAMMA
6566 @fnindex DGAMMA
6567 @cindex Gamma function
6568 @cindex Factorial function
6570 @table @asis
6571 @item @emph{Description}:
6572 @code{GAMMA(X)} computes Gamma (@math{\Gamma}) of @var{X}. For positive,
6573 integer values of @var{X} the Gamma function simplifies to the factorial
6574 function @math{\Gamma(x)=(x-1)!}.
6576 @tex
6578 \Gamma(x) = \int_0^\infty t^{x-1}{\rm e}^{-t}\,{\rm d}t
6580 @end tex
6582 @item @emph{Standard}:
6583 Fortran 2008 and later
6585 @item @emph{Class}:
6586 Elemental function
6588 @item @emph{Syntax}:
6589 @code{X = GAMMA(X)}
6591 @item @emph{Arguments}:
6592 @multitable @columnfractions .15 .70
6593 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
6594 nor a negative integer.
6595 @end multitable
6597 @item @emph{Return value}:
6598 The return value is of type @code{REAL} of the same kind as @var{X}.
6600 @item @emph{Example}:
6601 @smallexample
6602 program test_gamma
6603   real :: x = 1.0
6604   x = gamma(x) ! returns 1.0
6605 end program test_gamma
6606 @end smallexample
6608 @item @emph{Specific names}:
6609 @multitable @columnfractions .20 .20 .20 .25
6610 @item Name             @tab Argument         @tab Return type       @tab Standard
6611 @item @code{GAMMA(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
6612 @item @code{DGAMMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU Extension
6613 @end multitable
6615 @item @emph{See also}:
6616 Logarithm of the Gamma function: @ref{LOG_GAMMA}
6618 @end table
6622 @node GERROR
6623 @section @code{GERROR} --- Get last system error message
6624 @fnindex GERROR
6625 @cindex system, error handling
6627 @table @asis
6628 @item @emph{Description}:
6629 Returns the system error message corresponding to the last system error.
6630 This resembles the functionality of @code{strerror(3)} in C.
6632 @item @emph{Standard}:
6633 GNU extension
6635 @item @emph{Class}:
6636 Subroutine
6638 @item @emph{Syntax}:
6639 @code{CALL GERROR(RESULT)}
6641 @item @emph{Arguments}:
6642 @multitable @columnfractions .15 .70
6643 @item @var{RESULT}  @tab Shall of type @code{CHARACTER} and of default
6644 @end multitable
6646 @item @emph{Example}:
6647 @smallexample
6648 PROGRAM test_gerror
6649   CHARACTER(len=100) :: msg
6650   CALL gerror(msg)
6651   WRITE(*,*) msg
6652 END PROGRAM
6653 @end smallexample
6655 @item @emph{See also}:
6656 @ref{IERRNO}, @ref{PERROR}
6657 @end table
6661 @node GETARG
6662 @section @code{GETARG} --- Get command line arguments
6663 @fnindex GETARG
6664 @cindex command-line arguments
6665 @cindex arguments, to program
6667 @table @asis
6668 @item @emph{Description}:
6669 Retrieve the @var{POS}-th argument that was passed on the
6670 command line when the containing program was invoked.
6672 This intrinsic routine is provided for backwards compatibility with 
6673 GNU Fortran 77.  In new code, programmers should consider the use of 
6674 the @ref{GET_COMMAND_ARGUMENT} intrinsic defined by the Fortran 2003 
6675 standard.
6677 @item @emph{Standard}:
6678 GNU extension
6680 @item @emph{Class}:
6681 Subroutine
6683 @item @emph{Syntax}:
6684 @code{CALL GETARG(POS, VALUE)}
6686 @item @emph{Arguments}:
6687 @multitable @columnfractions .15 .70
6688 @item @var{POS}   @tab Shall be of type @code{INTEGER} and not wider than
6689 the default integer kind; @math{@var{POS} \geq 0}
6690 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default
6691 kind.
6692 @item @var{VALUE} @tab Shall be of type @code{CHARACTER}. 
6693 @end multitable
6695 @item @emph{Return value}:
6696 After @code{GETARG} returns, the @var{VALUE} argument holds the
6697 @var{POS}th command line argument. If @var{VALUE} can not hold the
6698 argument, it is truncated to fit the length of @var{VALUE}. If there are
6699 less than @var{POS} arguments specified at the command line, @var{VALUE}
6700 will be filled with blanks. If @math{@var{POS} = 0}, @var{VALUE} is set
6701 to the name of the program (on systems that support this feature).
6703 @item @emph{Example}:
6704 @smallexample
6705 PROGRAM test_getarg
6706   INTEGER :: i
6707   CHARACTER(len=32) :: arg
6709   DO i = 1, iargc()
6710     CALL getarg(i, arg)
6711     WRITE (*,*) arg
6712   END DO
6713 END PROGRAM
6714 @end smallexample
6716 @item @emph{See also}:
6717 GNU Fortran 77 compatibility function: @ref{IARGC}
6719 Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
6720 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
6721 @end table
6725 @node GET_COMMAND
6726 @section @code{GET_COMMAND} --- Get the entire command line
6727 @fnindex GET_COMMAND
6728 @cindex command-line arguments
6729 @cindex arguments, to program
6731 @table @asis
6732 @item @emph{Description}:
6733 Retrieve the entire command line that was used to invoke the program.
6735 @item @emph{Standard}:
6736 Fortran 2003 and later
6738 @item @emph{Class}:
6739 Subroutine
6741 @item @emph{Syntax}:
6742 @code{CALL GET_COMMAND([COMMAND, LENGTH, STATUS])}
6744 @item @emph{Arguments}:
6745 @multitable @columnfractions .15 .70
6746 @item @var{COMMAND} @tab (Optional) shall be of type @code{CHARACTER} and
6747 of default kind.
6748 @item @var{LENGTH} @tab (Optional) Shall be of type @code{INTEGER} and of
6749 default kind.
6750 @item @var{STATUS} @tab (Optional) Shall be of type @code{INTEGER} and of
6751 default kind.
6752 @end multitable
6754 @item @emph{Return value}:
6755 If @var{COMMAND} is present, stores the entire command line that was used
6756 to invoke the program in @var{COMMAND}. If @var{LENGTH} is present, it is
6757 assigned the length of the command line. If @var{STATUS} is present, it
6758 is assigned 0 upon success of the command, -1 if @var{COMMAND} is too
6759 short to store the command line, or a positive value in case of an error.
6761 @item @emph{Example}:
6762 @smallexample
6763 PROGRAM test_get_command
6764   CHARACTER(len=255) :: cmd
6765   CALL get_command(cmd)
6766   WRITE (*,*) TRIM(cmd)
6767 END PROGRAM
6768 @end smallexample
6770 @item @emph{See also}:
6771 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
6772 @end table
6776 @node GET_COMMAND_ARGUMENT
6777 @section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments
6778 @fnindex GET_COMMAND_ARGUMENT
6779 @cindex command-line arguments
6780 @cindex arguments, to program
6782 @table @asis
6783 @item @emph{Description}:
6784 Retrieve the @var{NUMBER}-th argument that was passed on the
6785 command line when the containing program was invoked.
6787 @item @emph{Standard}:
6788 Fortran 2003 and later
6790 @item @emph{Class}:
6791 Subroutine
6793 @item @emph{Syntax}:
6794 @code{CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])}
6796 @item @emph{Arguments}:
6797 @multitable @columnfractions .15 .70
6798 @item @var{NUMBER} @tab Shall be a scalar of type @code{INTEGER} and of
6799 default kind, @math{@var{NUMBER} \geq 0}
6800 @item @var{VALUE}  @tab (Optional) Shall be a scalar of type @code{CHARACTER}
6801 and of default kind.
6802 @item @var{LENGTH} @tab (Optional) Shall be a scalar of type @code{INTEGER}
6803 and of default kind.
6804 @item @var{STATUS} @tab (Optional) Shall be a scalar of type @code{INTEGER}
6805 and of default kind.
6806 @end multitable
6808 @item @emph{Return value}:
6809 After @code{GET_COMMAND_ARGUMENT} returns, the @var{VALUE} argument holds the 
6810 @var{NUMBER}-th command line argument. If @var{VALUE} can not hold the argument, it is 
6811 truncated to fit the length of @var{VALUE}. If there are less than @var{NUMBER}
6812 arguments specified at the command line, @var{VALUE} will be filled with blanks. 
6813 If @math{@var{NUMBER} = 0}, @var{VALUE} is set to the name of the program (on
6814 systems that support this feature). The @var{LENGTH} argument contains the
6815 length of the @var{NUMBER}-th command line argument. If the argument retrieval
6816 fails, @var{STATUS} is a positive number; if @var{VALUE} contains a truncated
6817 command line argument, @var{STATUS} is -1; and otherwise the @var{STATUS} is
6818 zero.
6820 @item @emph{Example}:
6821 @smallexample
6822 PROGRAM test_get_command_argument
6823   INTEGER :: i
6824   CHARACTER(len=32) :: arg
6826   i = 0
6827   DO
6828     CALL get_command_argument(i, arg)
6829     IF (LEN_TRIM(arg) == 0) EXIT
6831     WRITE (*,*) TRIM(arg)
6832     i = i+1
6833   END DO
6834 END PROGRAM
6835 @end smallexample
6837 @item @emph{See also}:
6838 @ref{GET_COMMAND}, @ref{COMMAND_ARGUMENT_COUNT}
6839 @end table
6843 @node GETCWD
6844 @section @code{GETCWD} --- Get current working directory
6845 @fnindex GETCWD
6846 @cindex system, working directory
6848 @table @asis
6849 @item @emph{Description}:
6850 Get current working directory.
6852 This intrinsic is provided in both subroutine and function forms; however,
6853 only one form can be used in any given program unit.
6855 @item @emph{Standard}:
6856 GNU extension
6858 @item @emph{Class}:
6859 Subroutine, function
6861 @item @emph{Syntax}:
6862 @multitable @columnfractions .80
6863 @item @code{CALL GETCWD(C [, STATUS])}
6864 @item @code{STATUS = GETCWD(C)}
6865 @end multitable
6867 @item @emph{Arguments}:
6868 @multitable @columnfractions .15 .70
6869 @item @var{C} @tab The type shall be @code{CHARACTER} and of default kind.
6870 @item @var{STATUS} @tab (Optional) status flag. Returns 0 on success, 
6871 a system specific and nonzero error code otherwise.
6872 @end multitable
6874 @item @emph{Example}:
6875 @smallexample
6876 PROGRAM test_getcwd
6877   CHARACTER(len=255) :: cwd
6878   CALL getcwd(cwd)
6879   WRITE(*,*) TRIM(cwd)
6880 END PROGRAM
6881 @end smallexample
6883 @item @emph{See also}:
6884 @ref{CHDIR}
6885 @end table
6889 @node GETENV
6890 @section @code{GETENV} --- Get an environmental variable
6891 @fnindex GETENV
6892 @cindex environment variable
6894 @table @asis
6895 @item @emph{Description}:
6896 Get the @var{VALUE} of the environmental variable @var{NAME}.
6898 This intrinsic routine is provided for backwards compatibility with
6899 GNU Fortran 77.  In new code, programmers should consider the use of
6900 the @ref{GET_ENVIRONMENT_VARIABLE} intrinsic defined by the Fortran
6901 2003 standard.
6903 Note that @code{GETENV} need not be thread-safe. It is the
6904 responsibility of the user to ensure that the environment is not being
6905 updated concurrently with a call to the @code{GETENV} intrinsic.
6907 @item @emph{Standard}:
6908 GNU extension
6910 @item @emph{Class}:
6911 Subroutine
6913 @item @emph{Syntax}:
6914 @code{CALL GETENV(NAME, VALUE)}
6916 @item @emph{Arguments}:
6917 @multitable @columnfractions .15 .70
6918 @item @var{NAME}  @tab Shall be of type @code{CHARACTER} and of default kind.
6919 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default kind.
6920 @end multitable
6922 @item @emph{Return value}:
6923 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is 
6924 not large enough to hold the data, it is truncated. If @var{NAME}
6925 is not set, @var{VALUE} will be filled with blanks.
6927 @item @emph{Example}:
6928 @smallexample
6929 PROGRAM test_getenv
6930   CHARACTER(len=255) :: homedir
6931   CALL getenv("HOME", homedir)
6932   WRITE (*,*) TRIM(homedir)
6933 END PROGRAM
6934 @end smallexample
6936 @item @emph{See also}:
6937 @ref{GET_ENVIRONMENT_VARIABLE}
6938 @end table
6942 @node GET_ENVIRONMENT_VARIABLE
6943 @section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable
6944 @fnindex GET_ENVIRONMENT_VARIABLE
6945 @cindex environment variable
6947 @table @asis
6948 @item @emph{Description}:
6949 Get the @var{VALUE} of the environmental variable @var{NAME}.
6951 Note that @code{GET_ENVIRONMENT_VARIABLE} need not be thread-safe. It
6952 is the responsibility of the user to ensure that the environment is
6953 not being updated concurrently with a call to the
6954 @code{GET_ENVIRONMENT_VARIABLE} intrinsic.
6956 @item @emph{Standard}:
6957 Fortran 2003 and later
6959 @item @emph{Class}:
6960 Subroutine
6962 @item @emph{Syntax}:
6963 @code{CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)}
6965 @item @emph{Arguments}:
6966 @multitable @columnfractions .15 .70
6967 @item @var{NAME}      @tab Shall be a scalar of type @code{CHARACTER}
6968 and of default kind.
6969 @item @var{VALUE}     @tab (Optional) Shall be a scalar of type @code{CHARACTER}
6970 and of default kind.
6971 @item @var{LENGTH}    @tab (Optional) Shall be a scalar of type @code{INTEGER}
6972 and of default kind.
6973 @item @var{STATUS}    @tab (Optional) Shall be a scalar of type @code{INTEGER}
6974 and of default kind.
6975 @item @var{TRIM_NAME} @tab (Optional) Shall be a scalar of type @code{LOGICAL}
6976 and of default kind.
6977 @end multitable
6979 @item @emph{Return value}:
6980 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is 
6981 not large enough to hold the data, it is truncated. If @var{NAME}
6982 is not set, @var{VALUE} will be filled with blanks. Argument @var{LENGTH}
6983 contains the length needed for storing the environment variable @var{NAME}
6984 or zero if it is not present. @var{STATUS} is -1 if @var{VALUE} is present
6985 but too short for the environment variable; it is 1 if the environment
6986 variable does not exist and 2 if the processor does not support environment
6987 variables; in all other cases @var{STATUS} is zero. If @var{TRIM_NAME} is
6988 present with the value @code{.FALSE.}, the trailing blanks in @var{NAME}
6989 are significant; otherwise they are not part of the environment variable
6990 name.
6992 @item @emph{Example}:
6993 @smallexample
6994 PROGRAM test_getenv
6995   CHARACTER(len=255) :: homedir
6996   CALL get_environment_variable("HOME", homedir)
6997   WRITE (*,*) TRIM(homedir)
6998 END PROGRAM
6999 @end smallexample
7000 @end table
7004 @node GETGID
7005 @section @code{GETGID} --- Group ID function
7006 @fnindex GETGID
7007 @cindex system, group ID
7009 @table @asis
7010 @item @emph{Description}:
7011 Returns the numerical group ID of the current process.
7013 @item @emph{Standard}:
7014 GNU extension
7016 @item @emph{Class}:
7017 Function
7019 @item @emph{Syntax}:
7020 @code{RESULT = GETGID()}
7022 @item @emph{Return value}:
7023 The return value of @code{GETGID} is an @code{INTEGER} of the default
7024 kind.
7027 @item @emph{Example}:
7028 See @code{GETPID} for an example.
7030 @item @emph{See also}:
7031 @ref{GETPID}, @ref{GETUID}
7032 @end table
7036 @node GETLOG
7037 @section @code{GETLOG} --- Get login name
7038 @fnindex GETLOG
7039 @cindex system, login name
7040 @cindex login name
7042 @table @asis
7043 @item @emph{Description}:
7044 Gets the username under which the program is running.
7046 @item @emph{Standard}:
7047 GNU extension
7049 @item @emph{Class}:
7050 Subroutine
7052 @item @emph{Syntax}:
7053 @code{CALL GETLOG(C)}
7055 @item @emph{Arguments}:
7056 @multitable @columnfractions .15 .70
7057 @item @var{C} @tab Shall be of type @code{CHARACTER} and of default kind.
7058 @end multitable
7060 @item @emph{Return value}:
7061 Stores the current user name in @var{LOGIN}.  (On systems where POSIX
7062 functions @code{geteuid} and @code{getpwuid} are not available, and 
7063 the @code{getlogin} function is not implemented either, this will
7064 return a blank string.)
7066 @item @emph{Example}:
7067 @smallexample
7068 PROGRAM TEST_GETLOG
7069   CHARACTER(32) :: login
7070   CALL GETLOG(login)
7071   WRITE(*,*) login
7072 END PROGRAM
7073 @end smallexample
7075 @item @emph{See also}:
7076 @ref{GETUID}
7077 @end table
7081 @node GETPID
7082 @section @code{GETPID} --- Process ID function
7083 @fnindex GETPID
7084 @cindex system, process ID
7085 @cindex process ID
7087 @table @asis
7088 @item @emph{Description}:
7089 Returns the numerical process identifier of the current process.
7091 @item @emph{Standard}:
7092 GNU extension
7094 @item @emph{Class}:
7095 Function
7097 @item @emph{Syntax}:
7098 @code{RESULT = GETPID()}
7100 @item @emph{Return value}:
7101 The return value of @code{GETPID} is an @code{INTEGER} of the default
7102 kind.
7105 @item @emph{Example}:
7106 @smallexample
7107 program info
7108   print *, "The current process ID is ", getpid()
7109   print *, "Your numerical user ID is ", getuid()
7110   print *, "Your numerical group ID is ", getgid()
7111 end program info
7112 @end smallexample
7114 @item @emph{See also}:
7115 @ref{GETGID}, @ref{GETUID}
7116 @end table
7120 @node GETUID
7121 @section @code{GETUID} --- User ID function
7122 @fnindex GETUID
7123 @cindex system, user ID
7124 @cindex user id
7126 @table @asis
7127 @item @emph{Description}:
7128 Returns the numerical user ID of the current process.
7130 @item @emph{Standard}:
7131 GNU extension
7133 @item @emph{Class}:
7134 Function
7136 @item @emph{Syntax}:
7137 @code{RESULT = GETUID()}
7139 @item @emph{Return value}:
7140 The return value of @code{GETUID} is an @code{INTEGER} of the default
7141 kind.
7144 @item @emph{Example}:
7145 See @code{GETPID} for an example.
7147 @item @emph{See also}:
7148 @ref{GETPID}, @ref{GETLOG}
7149 @end table
7153 @node GMTIME
7154 @section @code{GMTIME} --- Convert time to GMT info
7155 @fnindex GMTIME
7156 @cindex time, conversion to GMT info
7158 @table @asis
7159 @item @emph{Description}:
7160 Given a system time value @var{TIME} (as provided by the @ref{TIME}
7161 intrinsic), fills @var{VALUES} with values extracted from it appropriate
7162 to the UTC time zone (Universal Coordinated Time, also known in some
7163 countries as GMT, Greenwich Mean Time), using @code{gmtime(3)}.
7165 This intrinsic routine is provided for backwards compatibility with 
7166 GNU Fortran 77.  In new code, programmers should consider the use of 
7167 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
7168 standard.
7170 @item @emph{Standard}:
7171 GNU extension
7173 @item @emph{Class}:
7174 Subroutine
7176 @item @emph{Syntax}:
7177 @code{CALL GMTIME(TIME, VALUES)}
7179 @item @emph{Arguments}:
7180 @multitable @columnfractions .15 .70
7181 @item @var{TIME}   @tab An @code{INTEGER} scalar expression
7182 corresponding to a system time, with @code{INTENT(IN)}.
7183 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
7184 with @code{INTENT(OUT)}.
7185 @end multitable
7187 @item @emph{Return value}:
7188 The elements of @var{VALUES} are assigned as follows:
7189 @enumerate
7190 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
7191 seconds
7192 @item Minutes after the hour, range 0--59
7193 @item Hours past midnight, range 0--23
7194 @item Day of month, range 1--31
7195 @item Number of months since January, range 0--11
7196 @item Years since 1900
7197 @item Number of days since Sunday, range 0--6
7198 @item Days since January 1, range 0--365
7199 @item Daylight savings indicator: positive if daylight savings is in
7200 effect, zero if not, and negative if the information is not available.
7201 @end enumerate
7203 @item @emph{See also}:
7204 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
7206 @end table
7210 @node HOSTNM
7211 @section @code{HOSTNM} --- Get system host name
7212 @fnindex HOSTNM
7213 @cindex system, host name
7215 @table @asis
7216 @item @emph{Description}:
7217 Retrieves the host name of the system on which the program is running.
7219 This intrinsic is provided in both subroutine and function forms; however,
7220 only one form can be used in any given program unit.
7222 @item @emph{Standard}:
7223 GNU extension
7225 @item @emph{Class}:
7226 Subroutine, function
7228 @item @emph{Syntax}:
7229 @multitable @columnfractions .80
7230 @item @code{CALL HOSTNM(C [, STATUS])}
7231 @item @code{STATUS = HOSTNM(NAME)}
7232 @end multitable
7234 @item @emph{Arguments}:
7235 @multitable @columnfractions .15 .70
7236 @item @var{C}    @tab Shall of type @code{CHARACTER} and of default kind.
7237 @item @var{STATUS}  @tab (Optional) status flag of type @code{INTEGER}.
7238 Returns 0 on success, or a system specific error code otherwise.
7239 @end multitable
7241 @item @emph{Return value}:
7242 In either syntax, @var{NAME} is set to the current hostname if it can
7243 be obtained, or to a blank string otherwise.
7245 @end table
7249 @node HUGE
7250 @section @code{HUGE} --- Largest number of a kind
7251 @fnindex HUGE
7252 @cindex limits, largest number
7253 @cindex model representation, largest number
7255 @table @asis
7256 @item @emph{Description}:
7257 @code{HUGE(X)} returns the largest number that is not an infinity in
7258 the model of the type of @code{X}.
7260 @item @emph{Standard}:
7261 Fortran 95 and later
7263 @item @emph{Class}:
7264 Inquiry function
7266 @item @emph{Syntax}:
7267 @code{RESULT = HUGE(X)}
7269 @item @emph{Arguments}:
7270 @multitable @columnfractions .15 .70
7271 @item @var{X} @tab Shall be of type @code{REAL} or @code{INTEGER}.
7272 @end multitable
7274 @item @emph{Return value}:
7275 The return value is of the same type and kind as @var{X}
7277 @item @emph{Example}:
7278 @smallexample
7279 program test_huge_tiny
7280   print *, huge(0), huge(0.0), huge(0.0d0)
7281   print *, tiny(0.0), tiny(0.0d0)
7282 end program test_huge_tiny
7283 @end smallexample
7284 @end table
7288 @node HYPOT
7289 @section @code{HYPOT} --- Euclidean distance function
7290 @fnindex HYPOT
7291 @cindex Euclidean distance
7293 @table @asis
7294 @item @emph{Description}:
7295 @code{HYPOT(X,Y)} is the Euclidean distance function. It is equal to
7296 @math{\sqrt{X^2 + Y^2}}, without undue underflow or overflow.
7298 @item @emph{Standard}:
7299 Fortran 2008 and later
7301 @item @emph{Class}:
7302 Elemental function
7304 @item @emph{Syntax}:
7305 @code{RESULT = HYPOT(X, Y)}
7307 @item @emph{Arguments}:
7308 @multitable @columnfractions .15 .70
7309 @item @var{X} @tab The type shall be @code{REAL}.
7310 @item @var{Y} @tab The type and kind type parameter shall be the same as
7311 @var{X}.
7312 @end multitable
7314 @item @emph{Return value}:
7315 The return value has the same type and kind type parameter as @var{X}.
7317 @item @emph{Example}:
7318 @smallexample
7319 program test_hypot
7320   real(4) :: x = 1.e0_4, y = 0.5e0_4
7321   x = hypot(x,y)
7322 end program test_hypot
7323 @end smallexample
7324 @end table
7328 @node IACHAR
7329 @section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence 
7330 @fnindex IACHAR
7331 @cindex @acronym{ASCII} collating sequence
7332 @cindex collating sequence, @acronym{ASCII}
7333 @cindex conversion, to integer
7335 @table @asis
7336 @item @emph{Description}:
7337 @code{IACHAR(C)} returns the code for the @acronym{ASCII} character
7338 in the first character position of @code{C}.
7340 @item @emph{Standard}:
7341 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
7343 @item @emph{Class}:
7344 Elemental function
7346 @item @emph{Syntax}:
7347 @code{RESULT = IACHAR(C [, KIND])}
7349 @item @emph{Arguments}:
7350 @multitable @columnfractions .15 .70
7351 @item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
7352 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7353 expression indicating the kind parameter of the result.
7354 @end multitable
7356 @item @emph{Return value}:
7357 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
7358 @var{KIND} is absent, the return value is of default integer kind.
7360 @item @emph{Example}:
7361 @smallexample
7362 program test_iachar
7363   integer i
7364   i = iachar(' ')
7365 end program test_iachar
7366 @end smallexample
7368 @item @emph{Note}:
7369 See @ref{ICHAR} for a discussion of converting between numerical values
7370 and formatted string representations.
7372 @item @emph{See also}:
7373 @ref{ACHAR}, @ref{CHAR}, @ref{ICHAR}
7375 @end table
7379 @node IALL
7380 @section @code{IALL} --- Bitwise AND of array elements
7381 @fnindex IALL
7382 @cindex array, AND
7383 @cindex bits, AND of array elements
7385 @table @asis
7386 @item @emph{Description}:
7387 Reduces with bitwise AND the elements of @var{ARRAY} along dimension @var{DIM}
7388 if the corresponding element in @var{MASK} is @code{TRUE}.
7390 @item @emph{Standard}:
7391 Fortran 2008 and later
7393 @item @emph{Class}:
7394 Transformational function
7396 @item @emph{Syntax}:
7397 @multitable @columnfractions .80
7398 @item @code{RESULT = IALL(ARRAY[, MASK])}
7399 @item @code{RESULT = IALL(ARRAY, DIM[, MASK])}
7400 @end multitable
7402 @item @emph{Arguments}:
7403 @multitable @columnfractions .15 .70
7404 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
7405 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
7406 @code{INTEGER} with a value in the range from 1 to n, where n 
7407 equals the rank of @var{ARRAY}.
7408 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
7409 and either be a scalar or an array of the same shape as @var{ARRAY}.
7410 @end multitable
7412 @item @emph{Return value}:
7413 The result is of the same type as @var{ARRAY}.
7415 If @var{DIM} is absent, a scalar with the bitwise ALL of all elements in
7416 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
7417 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
7418 dimension @var{DIM} dropped is returned.
7420 @item @emph{Example}:
7421 @smallexample
7422 PROGRAM test_iall
7423   INTEGER(1) :: a(2)
7425   a(1) = b'00100100'
7426   a(2) = b'01101010'
7428   ! prints 00100000
7429   PRINT '(b8.8)', IALL(a)
7430 END PROGRAM
7431 @end smallexample
7433 @item @emph{See also}:
7434 @ref{IANY}, @ref{IPARITY}, @ref{IAND}
7435 @end table
7439 @node IAND
7440 @section @code{IAND} --- Bitwise logical and
7441 @fnindex IAND
7442 @fnindex BIAND
7443 @fnindex IIAND
7444 @fnindex JIAND
7445 @fnindex KIAND
7446 @cindex bitwise logical and
7447 @cindex logical and, bitwise
7449 @table @asis
7450 @item @emph{Description}:
7451 Bitwise logical @code{AND}.
7453 @item @emph{Standard}:
7454 Fortran 95 and later, has overloads that are GNU extensions
7456 @item @emph{Class}:
7457 Elemental function
7459 @item @emph{Syntax}:
7460 @code{RESULT = IAND(I, J)}
7462 @item @emph{Arguments}:
7463 @multitable @columnfractions .15 .70
7464 @item @var{I} @tab The type shall be @code{INTEGER}.
7465 @item @var{J} @tab The type shall be @code{INTEGER}, of the same
7466 kind as @var{I}.  (As a GNU extension, different kinds are also 
7467 permitted.)
7468 @end multitable
7470 @item @emph{Return value}:
7471 The return type is @code{INTEGER}, of the same kind as the
7472 arguments.  (If the argument kinds differ, it is of the same kind as
7473 the larger argument.)
7475 @item @emph{Example}:
7476 @smallexample
7477 PROGRAM test_iand
7478   INTEGER :: a, b
7479   DATA a / Z'F' /, b / Z'3' /
7480   WRITE (*,*) IAND(a, b)
7481 END PROGRAM
7482 @end smallexample
7484 @item @emph{Specific names}:
7485 @multitable @columnfractions .20 .20 .20 .25
7486 @item Name            @tab Argument            @tab Return type       @tab Standard
7487 @item @code{IAND(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
7488 @item @code{BIAND(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
7489 @item @code{IIAND(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
7490 @item @code{JIAND(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
7491 @item @code{KIAND(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
7492 @end multitable
7494 @item @emph{See also}:
7495 @ref{IOR}, @ref{IEOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
7497 @end table
7501 @node IANY
7502 @section @code{IANY} --- Bitwise OR of array elements
7503 @fnindex IANY
7504 @cindex array, OR
7505 @cindex bits, OR of array elements
7507 @table @asis
7508 @item @emph{Description}:
7509 Reduces with bitwise OR (inclusive or) the elements of @var{ARRAY} along
7510 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
7512 @item @emph{Standard}:
7513 Fortran 2008 and later
7515 @item @emph{Class}:
7516 Transformational function
7518 @item @emph{Syntax}:
7519 @multitable @columnfractions .80
7520 @item @code{RESULT = IANY(ARRAY[, MASK])}
7521 @item @code{RESULT = IANY(ARRAY, DIM[, MASK])}
7522 @end multitable
7524 @item @emph{Arguments}:
7525 @multitable @columnfractions .15 .70
7526 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
7527 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
7528 @code{INTEGER} with a value in the range from 1 to n, where n 
7529 equals the rank of @var{ARRAY}.
7530 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
7531 and either be a scalar or an array of the same shape as @var{ARRAY}.
7532 @end multitable
7534 @item @emph{Return value}:
7535 The result is of the same type as @var{ARRAY}.
7537 If @var{DIM} is absent, a scalar with the bitwise OR of all elements in
7538 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
7539 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
7540 dimension @var{DIM} dropped is returned.
7542 @item @emph{Example}:
7543 @smallexample
7544 PROGRAM test_iany
7545   INTEGER(1) :: a(2)
7547   a(1) = b'00100100'
7548   a(2) = b'01101010'
7550   ! prints 01101110
7551   PRINT '(b8.8)', IANY(a)
7552 END PROGRAM
7553 @end smallexample
7555 @item @emph{See also}:
7556 @ref{IPARITY}, @ref{IALL}, @ref{IOR}
7557 @end table
7561 @node IARGC
7562 @section @code{IARGC} --- Get the number of command line arguments
7563 @fnindex IARGC
7564 @cindex command-line arguments
7565 @cindex command-line arguments, number of
7566 @cindex arguments, to program
7568 @table @asis
7569 @item @emph{Description}:
7570 @code{IARGC} returns the number of arguments passed on the
7571 command line when the containing program was invoked.
7573 This intrinsic routine is provided for backwards compatibility with 
7574 GNU Fortran 77.  In new code, programmers should consider the use of 
7575 the @ref{COMMAND_ARGUMENT_COUNT} intrinsic defined by the Fortran 2003 
7576 standard.
7578 @item @emph{Standard}:
7579 GNU extension
7581 @item @emph{Class}:
7582 Function
7584 @item @emph{Syntax}:
7585 @code{RESULT = IARGC()}
7587 @item @emph{Arguments}:
7588 None.
7590 @item @emph{Return value}:
7591 The number of command line arguments, type @code{INTEGER(4)}.
7593 @item @emph{Example}:
7594 See @ref{GETARG}
7596 @item @emph{See also}:
7597 GNU Fortran 77 compatibility subroutine: @ref{GETARG}
7599 Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
7600 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
7601 @end table
7605 @node IBCLR
7606 @section @code{IBCLR} --- Clear bit
7607 @fnindex IBCLR
7608 @fnindex BBCLR
7609 @fnindex IIBCLR
7610 @fnindex JIBCLR
7611 @fnindex KIBCLR
7612 @cindex bits, unset
7613 @cindex bits, clear
7615 @table @asis
7616 @item @emph{Description}:
7617 @code{IBCLR} returns the value of @var{I} with the bit at position
7618 @var{POS} set to zero.
7620 @item @emph{Standard}:
7621 Fortran 95 and later, has overloads that are GNU extensions
7623 @item @emph{Class}:
7624 Elemental function
7626 @item @emph{Syntax}:
7627 @code{RESULT = IBCLR(I, POS)}
7629 @item @emph{Arguments}:
7630 @multitable @columnfractions .15 .70
7631 @item @var{I} @tab The type shall be @code{INTEGER}.
7632 @item @var{POS} @tab The type shall be @code{INTEGER}.
7633 @end multitable
7635 @item @emph{Return value}:
7636 The return value is of type @code{INTEGER} and of the same kind as
7637 @var{I}.
7639 @item @emph{Specific names}:
7640 @multitable @columnfractions .20 .20 .20 .25
7641 @item Name            @tab Argument            @tab Return type       @tab Standard
7642 @item @code{IBCLR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
7643 @item @code{BBCLR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
7644 @item @code{IIBCLR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
7645 @item @code{JIBCLR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
7646 @item @code{KIBCLR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
7647 @end multitable
7649 @item @emph{See also}:
7650 @ref{IBITS}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
7652 @end table
7656 @node IBITS
7657 @section @code{IBITS} --- Bit extraction
7658 @fnindex IBITS
7659 @fnindex BBITS
7660 @fnindex IIBITS
7661 @fnindex JIBITS
7662 @fnindex KIBITS
7663 @cindex bits, get
7664 @cindex bits, extract
7666 @table @asis
7667 @item @emph{Description}:
7668 @code{IBITS} extracts a field of length @var{LEN} from @var{I},
7669 starting from bit position @var{POS} and extending left for @var{LEN}
7670 bits.  The result is right-justified and the remaining bits are
7671 zeroed.  The value of @code{POS+LEN} must be less than or equal to the
7672 value @code{BIT_SIZE(I)}.
7674 @item @emph{Standard}:
7675 Fortran 95 and later, has overloads that are GNU extensions
7677 @item @emph{Class}:
7678 Elemental function
7680 @item @emph{Syntax}:
7681 @code{RESULT = IBITS(I, POS, LEN)}
7683 @item @emph{Arguments}:
7684 @multitable @columnfractions .15 .70
7685 @item @var{I}   @tab The type shall be @code{INTEGER}.
7686 @item @var{POS} @tab The type shall be @code{INTEGER}.
7687 @item @var{LEN} @tab The type shall be @code{INTEGER}.
7688 @end multitable
7690 @item @emph{Return value}:
7691 The return value is of type @code{INTEGER} and of the same kind as
7692 @var{I}.
7694 @item @emph{Specific names}:
7695 @multitable @columnfractions .20 .20 .20 .25
7696 @item Name            @tab Argument            @tab Return type       @tab Standard
7697 @item @code{IBITS(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
7698 @item @code{BBITS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
7699 @item @code{IIBITS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
7700 @item @code{JIBITS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
7701 @item @code{KIBITS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
7702 @end multitable
7704 @item @emph{See also}:
7705 @ref{BIT_SIZE}, @ref{IBCLR}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
7706 @end table
7710 @node IBSET
7711 @section @code{IBSET} --- Set bit
7712 @fnindex IBSET
7713 @fnindex BBSET
7714 @fnindex IIBSET
7715 @fnindex JIBSET
7716 @fnindex KIBSET
7717 @cindex bits, set
7719 @table @asis
7720 @item @emph{Description}:
7721 @code{IBSET} returns the value of @var{I} with the bit at position
7722 @var{POS} set to one.
7724 @item @emph{Standard}:
7725 Fortran 95 and later, has overloads that are GNU extensions
7727 @item @emph{Class}:
7728 Elemental function
7730 @item @emph{Syntax}:
7731 @code{RESULT = IBSET(I, POS)}
7733 @item @emph{Arguments}:
7734 @multitable @columnfractions .15 .70
7735 @item @var{I} @tab The type shall be @code{INTEGER}.
7736 @item @var{POS} @tab The type shall be @code{INTEGER}.
7737 @end multitable
7739 @item @emph{Return value}:
7740 The return value is of type @code{INTEGER} and of the same kind as
7741 @var{I}.
7743 @item @emph{Specific names}:
7744 @multitable @columnfractions .20 .20 .20 .25
7745 @item Name            @tab Argument            @tab Return type       @tab Standard
7746 @item @code{IBSET(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
7747 @item @code{BBSET(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
7748 @item @code{IIBSET(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
7749 @item @code{JIBSET(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
7750 @item @code{KIBSET(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
7751 @end multitable
7753 @item @emph{See also}:
7754 @ref{IBCLR}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
7756 @end table
7760 @node ICHAR
7761 @section @code{ICHAR} --- Character-to-integer conversion function
7762 @fnindex ICHAR
7763 @cindex conversion, to integer
7765 @table @asis
7766 @item @emph{Description}:
7767 @code{ICHAR(C)} returns the code for the character in the first character
7768 position of @code{C} in the system's native character set.
7769 The correspondence between characters and their codes is not necessarily
7770 the same across different GNU Fortran implementations.
7772 @item @emph{Standard}:
7773 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
7775 @item @emph{Class}:
7776 Elemental function
7778 @item @emph{Syntax}:
7779 @code{RESULT = ICHAR(C [, KIND])}
7781 @item @emph{Arguments}:
7782 @multitable @columnfractions .15 .70
7783 @item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
7784 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7785 expression indicating the kind parameter of the result.
7786 @end multitable
7788 @item @emph{Return value}:
7789 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
7790 @var{KIND} is absent, the return value is of default integer kind.
7792 @item @emph{Example}:
7793 @smallexample
7794 program test_ichar
7795   integer i
7796   i = ichar(' ')
7797 end program test_ichar
7798 @end smallexample
7800 @item @emph{Specific names}:
7801 @multitable @columnfractions .20 .20 .20 .25
7802 @item Name             @tab Argument             @tab Return type       @tab Standard
7803 @item @code{ICHAR(C)}  @tab @code{CHARACTER C}   @tab @code{INTEGER(4)}    @tab Fortran 77 and later
7804 @end multitable
7806 @item @emph{Note}:
7807 No intrinsic exists to convert between a numeric value and a formatted
7808 character string representation -- for instance, given the
7809 @code{CHARACTER} value @code{'154'}, obtaining an @code{INTEGER} or
7810 @code{REAL} value with the value 154, or vice versa. Instead, this
7811 functionality is provided by internal-file I/O, as in the following
7812 example:
7813 @smallexample
7814 program read_val
7815   integer value
7816   character(len=10) string, string2
7817   string = '154'
7818   
7819   ! Convert a string to a numeric value
7820   read (string,'(I10)') value
7821   print *, value
7822   
7823   ! Convert a value to a formatted string
7824   write (string2,'(I10)') value
7825   print *, string2
7826 end program read_val
7827 @end smallexample
7829 @item @emph{See also}:
7830 @ref{ACHAR}, @ref{CHAR}, @ref{IACHAR}
7832 @end table
7836 @node IDATE
7837 @section @code{IDATE} --- Get current local time subroutine (day/month/year) 
7838 @fnindex IDATE
7839 @cindex date, current
7840 @cindex current date
7842 @table @asis
7843 @item @emph{Description}:
7844 @code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the  
7845 current local time. The day (in the range 1-31), month (in the range 1-12), 
7846 and year appear in elements 1, 2, and 3 of @var{VALUES}, respectively. 
7847 The year has four significant digits.
7849 This intrinsic routine is provided for backwards compatibility with 
7850 GNU Fortran 77.  In new code, programmers should consider the use of 
7851 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
7852 standard.
7854 @item @emph{Standard}:
7855 GNU extension
7857 @item @emph{Class}:
7858 Subroutine
7860 @item @emph{Syntax}:
7861 @code{CALL IDATE(VALUES)}
7863 @item @emph{Arguments}:
7864 @multitable @columnfractions .15 .70
7865 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)} and
7866 the kind shall be the default integer kind.
7867 @end multitable
7869 @item @emph{Return value}:
7870 Does not return anything.
7872 @item @emph{Example}:
7873 @smallexample
7874 program test_idate
7875   integer, dimension(3) :: tarray
7876   call idate(tarray)
7877   print *, tarray(1)
7878   print *, tarray(2)
7879   print *, tarray(3)
7880 end program test_idate
7881 @end smallexample
7883 @item @emph{See also}:
7884 @ref{DATE_AND_TIME}
7885 @end table
7888 @node IEOR
7889 @section @code{IEOR} --- Bitwise logical exclusive or
7890 @fnindex IEOR
7891 @fnindex BIEOR
7892 @fnindex IIEOR
7893 @fnindex JIEOR
7894 @fnindex KIEOR
7895 @cindex bitwise logical exclusive or
7896 @cindex logical exclusive or, bitwise
7898 @table @asis
7899 @item @emph{Description}:
7900 @code{IEOR} returns the bitwise Boolean exclusive-OR of @var{I} and
7901 @var{J}.
7903 @item @emph{Standard}:
7904 Fortran 95 and later, has overloads that are GNU extensions
7906 @item @emph{Class}:
7907 Elemental function
7909 @item @emph{Syntax}:
7910 @code{RESULT = IEOR(I, J)}
7912 @item @emph{Arguments}:
7913 @multitable @columnfractions .15 .70
7914 @item @var{I} @tab The type shall be @code{INTEGER}.
7915 @item @var{J} @tab The type shall be @code{INTEGER}, of the same
7916 kind as @var{I}.  (As a GNU extension, different kinds are also 
7917 permitted.)
7918 @end multitable
7920 @item @emph{Return value}:
7921 The return type is @code{INTEGER}, of the same kind as the
7922 arguments.  (If the argument kinds differ, it is of the same kind as
7923 the larger argument.)
7925 @item @emph{Specific names}:
7926 @multitable @columnfractions .20 .20 .20 .25
7927 @item Name            @tab Argument            @tab Return type       @tab Standard
7928 @item @code{IEOR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
7929 @item @code{BIEOR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
7930 @item @code{IIEOR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
7931 @item @code{JIEOR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
7932 @item @code{KIEOR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
7933 @end multitable
7935 @item @emph{See also}:
7936 @ref{IOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
7937 @end table
7941 @node IERRNO
7942 @section @code{IERRNO} --- Get the last system error number
7943 @fnindex IERRNO
7944 @cindex system, error handling
7946 @table @asis
7947 @item @emph{Description}:
7948 Returns the last system error number, as given by the C @code{errno}
7949 variable.
7951 @item @emph{Standard}:
7952 GNU extension
7954 @item @emph{Class}:
7955 Function
7957 @item @emph{Syntax}:
7958 @code{RESULT = IERRNO()}
7960 @item @emph{Arguments}:
7961 None.
7963 @item @emph{Return value}:
7964 The return value is of type @code{INTEGER} and of the default integer
7965 kind.
7967 @item @emph{See also}:
7968 @ref{PERROR}
7969 @end table
7973 @node IMAGE_INDEX
7974 @section @code{IMAGE_INDEX} --- Function that converts a cosubscript to an image index
7975 @fnindex IMAGE_INDEX
7976 @cindex coarray, @code{IMAGE_INDEX}
7977 @cindex images, cosubscript to image index conversion
7979 @table @asis
7980 @item @emph{Description}:
7981 Returns the image index belonging to a cosubscript.
7983 @item @emph{Standard}:
7984 Fortran 2008 and later
7986 @item @emph{Class}:
7987 Inquiry function.
7989 @item @emph{Syntax}:
7990 @code{RESULT = IMAGE_INDEX(COARRAY, SUB)}
7992 @item @emph{Arguments}: None.
7993 @multitable @columnfractions .15 .70
7994 @item @var{COARRAY} @tab Coarray of any type.
7995 @item @var{SUB}     @tab default integer rank-1 array of a size equal to
7996 the corank of @var{COARRAY}.
7997 @end multitable
8000 @item @emph{Return value}:
8001 Scalar default integer with the value of the image index which corresponds
8002 to the cosubscripts. For invalid cosubscripts the result is zero.
8004 @item @emph{Example}:
8005 @smallexample
8006 INTEGER :: array[2,-1:4,8,*]
8007 ! Writes  28 (or 0 if there are fewer than 28 images)
8008 WRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])
8009 @end smallexample
8011 @item @emph{See also}:
8012 @ref{THIS_IMAGE}, @ref{NUM_IMAGES}
8013 @end table
8017 @node INDEX intrinsic
8018 @section @code{INDEX} --- Position of a substring within a string
8019 @fnindex INDEX
8020 @cindex substring position
8021 @cindex string, find substring
8023 @table @asis
8024 @item @emph{Description}:
8025 Returns the position of the start of the first occurrence of string
8026 @var{SUBSTRING} as a substring in @var{STRING}, counting from one.  If
8027 @var{SUBSTRING} is not present in @var{STRING}, zero is returned.  If 
8028 the @var{BACK} argument is present and true, the return value is the
8029 start of the last occurrence rather than the first.
8031 @item @emph{Standard}:
8032 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
8034 @item @emph{Class}:
8035 Elemental function
8037 @item @emph{Syntax}:
8038 @code{RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])}
8040 @item @emph{Arguments}:
8041 @multitable @columnfractions .15 .70
8042 @item @var{STRING} @tab Shall be a scalar @code{CHARACTER}, with
8043 @code{INTENT(IN)}
8044 @item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER}, with
8045 @code{INTENT(IN)}
8046 @item @var{BACK} @tab (Optional) Shall be a scalar @code{LOGICAL}, with
8047 @code{INTENT(IN)}
8048 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8049 expression indicating the kind parameter of the result.
8050 @end multitable
8052 @item @emph{Return value}:
8053 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
8054 @var{KIND} is absent, the return value is of default integer kind.
8056 @item @emph{Specific names}:
8057 @multitable @columnfractions .20 .20 .20 .25
8058 @item Name                            @tab Argument           @tab Return type       @tab Standard
8059 @item @code{INDEX(STRING, SUBSTRING)} @tab @code{CHARACTER}   @tab @code{INTEGER(4)} @tab Fortran 77 and later
8060 @end multitable
8062 @item @emph{See also}:
8063 @ref{SCAN}, @ref{VERIFY}
8064 @end table
8068 @node INT
8069 @section @code{INT} --- Convert to integer type
8070 @fnindex INT
8071 @fnindex IFIX
8072 @fnindex IDINT
8073 @cindex conversion, to integer
8075 @table @asis
8076 @item @emph{Description}:
8077 Convert to integer type
8079 @item @emph{Standard}:
8080 Fortran 77 and later
8082 @item @emph{Class}:
8083 Elemental function
8085 @item @emph{Syntax}:
8086 @code{RESULT = INT(A [, KIND))}
8088 @item @emph{Arguments}:
8089 @multitable @columnfractions .15 .70
8090 @item @var{A}    @tab Shall be of type @code{INTEGER},
8091 @code{REAL}, or @code{COMPLEX}.
8092 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8093 expression indicating the kind parameter of the result.
8094 @end multitable
8096 @item @emph{Return value}:
8097 These functions return a @code{INTEGER} variable or array under 
8098 the following rules: 
8100 @table @asis
8101 @item (A)
8102 If @var{A} is of type @code{INTEGER}, @code{INT(A) = A} 
8103 @item (B)
8104 If @var{A} is of type @code{REAL} and @math{|A| < 1}, @code{INT(A)}
8105 equals @code{0}. If @math{|A| \geq 1}, then @code{INT(A)} is the integer
8106 whose magnitude is the largest integer that does not exceed the magnitude
8107 of @var{A} and whose sign is the same as the sign of @var{A}.
8108 @item (C)
8109 If @var{A} is of type @code{COMPLEX}, rule B is applied to the real part of @var{A}.
8110 @end table
8112 @item @emph{Example}:
8113 @smallexample
8114 program test_int
8115   integer :: i = 42
8116   complex :: z = (-3.7, 1.0)
8117   print *, int(i)
8118   print *, int(z), int(z,8)
8119 end program
8120 @end smallexample
8122 @item @emph{Specific names}:
8123 @multitable @columnfractions .20 .20 .20 .25
8124 @item Name            @tab Argument          @tab Return type       @tab Standard
8125 @item @code{INT(A)}   @tab @code{REAL(4) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
8126 @item @code{IFIX(A)}  @tab @code{REAL(4) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
8127 @item @code{IDINT(A)} @tab @code{REAL(8) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
8128 @end multitable
8130 @end table
8133 @node INT2
8134 @section @code{INT2} --- Convert to 16-bit integer type
8135 @fnindex INT2
8136 @fnindex SHORT
8137 @cindex conversion, to integer
8139 @table @asis
8140 @item @emph{Description}:
8141 Convert to a @code{KIND=2} integer type. This is equivalent to the
8142 standard @code{INT} intrinsic with an optional argument of
8143 @code{KIND=2}, and is only included for backwards compatibility.
8145 The @code{SHORT} intrinsic is equivalent to @code{INT2}.
8147 @item @emph{Standard}:
8148 GNU extension
8150 @item @emph{Class}:
8151 Elemental function
8153 @item @emph{Syntax}:
8154 @code{RESULT = INT2(A)}
8156 @item @emph{Arguments}:
8157 @multitable @columnfractions .15 .70
8158 @item @var{A}    @tab Shall be of type @code{INTEGER},
8159 @code{REAL}, or @code{COMPLEX}.
8160 @end multitable
8162 @item @emph{Return value}:
8163 The return value is a @code{INTEGER(2)} variable.
8165 @item @emph{See also}:
8166 @ref{INT}, @ref{INT8}, @ref{LONG}
8167 @end table
8171 @node INT8
8172 @section @code{INT8} --- Convert to 64-bit integer type
8173 @fnindex INT8
8174 @cindex conversion, to integer
8176 @table @asis
8177 @item @emph{Description}:
8178 Convert to a @code{KIND=8} integer type. This is equivalent to the
8179 standard @code{INT} intrinsic with an optional argument of
8180 @code{KIND=8}, and is only included for backwards compatibility.
8182 @item @emph{Standard}:
8183 GNU extension
8185 @item @emph{Class}:
8186 Elemental function
8188 @item @emph{Syntax}:
8189 @code{RESULT = INT8(A)}
8191 @item @emph{Arguments}:
8192 @multitable @columnfractions .15 .70
8193 @item @var{A}    @tab Shall be of type @code{INTEGER},
8194 @code{REAL}, or @code{COMPLEX}.
8195 @end multitable
8197 @item @emph{Return value}:
8198 The return value is a @code{INTEGER(8)} variable.
8200 @item @emph{See also}:
8201 @ref{INT}, @ref{INT2}, @ref{LONG}
8202 @end table
8206 @node IOR
8207 @section @code{IOR} --- Bitwise logical or
8208 @fnindex IOR
8209 @fnindex BIOR
8210 @fnindex IIOR
8211 @fnindex JIOR
8212 @fnindex KIOR
8213 @cindex bitwise logical or
8214 @cindex logical or, bitwise
8216 @table @asis
8217 @item @emph{Description}:
8218 @code{IOR} returns the bitwise Boolean inclusive-OR of @var{I} and
8219 @var{J}.
8221 @item @emph{Standard}:
8222 Fortran 95 and later, has overloads that are GNU extensions
8224 @item @emph{Class}:
8225 Elemental function
8227 @item @emph{Syntax}:
8228 @code{RESULT = IOR(I, J)}
8230 @item @emph{Arguments}:
8231 @multitable @columnfractions .15 .70
8232 @item @var{I} @tab The type shall be @code{INTEGER}.
8233 @item @var{J} @tab The type shall be @code{INTEGER}, of the same
8234 kind as @var{I}.  (As a GNU extension, different kinds are also 
8235 permitted.)
8236 @end multitable
8238 @item @emph{Return value}:
8239 The return type is @code{INTEGER}, of the same kind as the
8240 arguments.  (If the argument kinds differ, it is of the same kind as
8241 the larger argument.)
8243 @item @emph{Specific names}:
8244 @multitable @columnfractions .20 .20 .20 .25
8245 @item Name            @tab Argument            @tab Return type       @tab Standard
8246 @item @code{IOR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
8247 @item @code{BIOR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
8248 @item @code{IIOR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
8249 @item @code{JIOR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
8250 @item @code{KIOR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
8251 @end multitable
8253 @item @emph{See also}:
8254 @ref{IEOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
8255 @end table
8259 @node IPARITY
8260 @section @code{IPARITY} --- Bitwise XOR of array elements
8261 @fnindex IPARITY
8262 @cindex array, parity
8263 @cindex array, XOR
8264 @cindex bits, XOR of array elements
8266 @table @asis
8267 @item @emph{Description}:
8268 Reduces with bitwise XOR (exclusive or) the elements of @var{ARRAY} along
8269 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
8271 @item @emph{Standard}:
8272 Fortran 2008 and later
8274 @item @emph{Class}:
8275 Transformational function
8277 @item @emph{Syntax}:
8278 @multitable @columnfractions .80
8279 @item @code{RESULT = IPARITY(ARRAY[, MASK])}
8280 @item @code{RESULT = IPARITY(ARRAY, DIM[, MASK])}
8281 @end multitable
8283 @item @emph{Arguments}:
8284 @multitable @columnfractions .15 .70
8285 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
8286 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
8287 @code{INTEGER} with a value in the range from 1 to n, where n 
8288 equals the rank of @var{ARRAY}.
8289 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
8290 and either be a scalar or an array of the same shape as @var{ARRAY}.
8291 @end multitable
8293 @item @emph{Return value}:
8294 The result is of the same type as @var{ARRAY}.
8296 If @var{DIM} is absent, a scalar with the bitwise XOR of all elements in
8297 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
8298 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
8299 dimension @var{DIM} dropped is returned.
8301 @item @emph{Example}:
8302 @smallexample
8303 PROGRAM test_iparity
8304   INTEGER(1) :: a(2)
8306   a(1) = b'00100100'
8307   a(2) = b'01101010'
8309   ! prints 01001110
8310   PRINT '(b8.8)', IPARITY(a)
8311 END PROGRAM
8312 @end smallexample
8314 @item @emph{See also}:
8315 @ref{IANY}, @ref{IALL}, @ref{IEOR}, @ref{PARITY}
8316 @end table
8320 @node IRAND
8321 @section @code{IRAND} --- Integer pseudo-random number
8322 @fnindex IRAND
8323 @cindex random number generation
8325 @table @asis
8326 @item @emph{Description}:
8327 @code{IRAND(FLAG)} returns a pseudo-random number from a uniform
8328 distribution between 0 and a system-dependent limit (which is in most
8329 cases 2147483647). If @var{FLAG} is 0, the next number
8330 in the current sequence is returned; if @var{FLAG} is 1, the generator
8331 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
8332 it is used as a new seed with @code{SRAND}.
8334 This intrinsic routine is provided for backwards compatibility with
8335 GNU Fortran 77. It implements a simple modulo generator as provided 
8336 by @command{g77}. For new code, one should consider the use of 
8337 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
8339 @item @emph{Standard}:
8340 GNU extension
8342 @item @emph{Class}:
8343 Function
8345 @item @emph{Syntax}:
8346 @code{RESULT = IRAND(I)}
8348 @item @emph{Arguments}:
8349 @multitable @columnfractions .15 .70
8350 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
8351 @end multitable
8353 @item @emph{Return value}:
8354 The return value is of @code{INTEGER(kind=4)} type.
8356 @item @emph{Example}:
8357 @smallexample
8358 program test_irand
8359   integer,parameter :: seed = 86456
8360   
8361   call srand(seed)
8362   print *, irand(), irand(), irand(), irand()
8363   print *, irand(seed), irand(), irand(), irand()
8364 end program test_irand
8365 @end smallexample
8367 @end table
8371 @node IS_IOSTAT_END
8372 @section @code{IS_IOSTAT_END} --- Test for end-of-file value
8373 @fnindex IS_IOSTAT_END
8374 @cindex @code{IOSTAT}, end of file
8376 @table @asis
8377 @item @emph{Description}:
8378 @code{IS_IOSTAT_END} tests whether an variable has the value of the I/O
8379 status ``end of file''. The function is equivalent to comparing the variable
8380 with the @code{IOSTAT_END} parameter of the intrinsic module
8381 @code{ISO_FORTRAN_ENV}.
8383 @item @emph{Standard}:
8384 Fortran 2003 and later
8386 @item @emph{Class}:
8387 Elemental function
8389 @item @emph{Syntax}:
8390 @code{RESULT = IS_IOSTAT_END(I)}
8392 @item @emph{Arguments}:
8393 @multitable @columnfractions .15 .70
8394 @item @var{I} @tab Shall be of the type @code{INTEGER}.
8395 @end multitable
8397 @item @emph{Return value}:
8398 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
8399 @var{I} has the value which indicates an end of file condition for
8400 @code{IOSTAT=} specifiers, and is @code{.FALSE.} otherwise.
8402 @item @emph{Example}:
8403 @smallexample
8404 PROGRAM iostat
8405   IMPLICIT NONE
8406   INTEGER :: stat, i
8407   OPEN(88, FILE='test.dat')
8408   READ(88, *, IOSTAT=stat) i
8409   IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'
8410 END PROGRAM
8411 @end smallexample
8412 @end table
8416 @node IS_IOSTAT_EOR
8417 @section @code{IS_IOSTAT_EOR} --- Test for end-of-record value
8418 @fnindex IS_IOSTAT_EOR
8419 @cindex @code{IOSTAT}, end of record
8421 @table @asis
8422 @item @emph{Description}:
8423 @code{IS_IOSTAT_EOR} tests whether an variable has the value of the I/O
8424 status ``end of record''. The function is equivalent to comparing the
8425 variable with the @code{IOSTAT_EOR} parameter of the intrinsic module
8426 @code{ISO_FORTRAN_ENV}.
8428 @item @emph{Standard}:
8429 Fortran 2003 and later
8431 @item @emph{Class}:
8432 Elemental function
8434 @item @emph{Syntax}:
8435 @code{RESULT = IS_IOSTAT_EOR(I)}
8437 @item @emph{Arguments}:
8438 @multitable @columnfractions .15 .70
8439 @item @var{I} @tab Shall be of the type @code{INTEGER}.
8440 @end multitable
8442 @item @emph{Return value}:
8443 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
8444 @var{I} has the value which indicates an end of file condition for
8445 @code{IOSTAT=} specifiers, and is @code{.FALSE.} otherwise.
8447 @item @emph{Example}:
8448 @smallexample
8449 PROGRAM iostat
8450   IMPLICIT NONE
8451   INTEGER :: stat, i(50)
8452   OPEN(88, FILE='test.dat', FORM='UNFORMATTED')
8453   READ(88, IOSTAT=stat) i
8454   IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'
8455 END PROGRAM
8456 @end smallexample
8457 @end table
8461 @node ISATTY
8462 @section @code{ISATTY} --- Whether a unit is a terminal device.
8463 @fnindex ISATTY
8464 @cindex system, terminal
8466 @table @asis
8467 @item @emph{Description}:
8468 Determine whether a unit is connected to a terminal device.
8470 @item @emph{Standard}:
8471 GNU extension
8473 @item @emph{Class}:
8474 Function
8476 @item @emph{Syntax}:
8477 @code{RESULT = ISATTY(UNIT)}
8479 @item @emph{Arguments}:
8480 @multitable @columnfractions .15 .70
8481 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
8482 @end multitable
8484 @item @emph{Return value}:
8485 Returns @code{.TRUE.} if the @var{UNIT} is connected to a terminal 
8486 device, @code{.FALSE.} otherwise.
8488 @item @emph{Example}:
8489 @smallexample
8490 PROGRAM test_isatty
8491   INTEGER(kind=1) :: unit
8492   DO unit = 1, 10
8493     write(*,*) isatty(unit=unit)
8494   END DO
8495 END PROGRAM
8496 @end smallexample
8497 @item @emph{See also}:
8498 @ref{TTYNAM}
8499 @end table
8503 @node ISHFT
8504 @section @code{ISHFT} --- Shift bits
8505 @fnindex ISHFT
8506 @fnindex BSHFT
8507 @fnindex IISHFT
8508 @fnindex JISHFT
8509 @fnindex KISHFT
8510 @cindex bits, shift
8512 @table @asis
8513 @item @emph{Description}:
8514 @code{ISHFT} returns a value corresponding to @var{I} with all of the
8515 bits shifted @var{SHIFT} places.  A value of @var{SHIFT} greater than
8516 zero corresponds to a left shift, a value of zero corresponds to no
8517 shift, and a value less than zero corresponds to a right shift.  If the
8518 absolute value of @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the
8519 value is undefined.  Bits shifted out from the left end or right end are
8520 lost; zeros are shifted in from the opposite end.
8522 @item @emph{Standard}:
8523 Fortran 95 and later, has overloads that are GNU extensions
8525 @item @emph{Class}:
8526 Elemental function
8528 @item @emph{Syntax}:
8529 @code{RESULT = ISHFT(I, SHIFT)}
8531 @item @emph{Arguments}:
8532 @multitable @columnfractions .15 .70
8533 @item @var{I} @tab The type shall be @code{INTEGER}.
8534 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
8535 @end multitable
8537 @item @emph{Return value}:
8538 The return value is of type @code{INTEGER} and of the same kind as
8539 @var{I}.
8541 @item @emph{Specific names}:
8542 @multitable @columnfractions .20 .20 .20 .25
8543 @item Name            @tab Argument            @tab Return type       @tab Standard
8544 @item @code{ISHFT(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
8545 @item @code{BSHFT(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
8546 @item @code{IISHFT(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
8547 @item @code{JISHFT(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
8548 @item @code{KISHFT(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
8549 @end multitable
8551 @item @emph{See also}:
8552 @ref{ISHFTC}
8553 @end table
8557 @node ISHFTC
8558 @section @code{ISHFTC} --- Shift bits circularly
8559 @fnindex ISHFTC
8560 @fnindex BSHFTC
8561 @fnindex IISHFTC
8562 @fnindex JISHFTC
8563 @fnindex KISHFTC
8564 @cindex bits, shift circular
8566 @table @asis
8567 @item @emph{Description}:
8568 @code{ISHFTC} returns a value corresponding to @var{I} with the
8569 rightmost @var{SIZE} bits shifted circularly @var{SHIFT} places; that
8570 is, bits shifted out one end are shifted into the opposite end.  A value
8571 of @var{SHIFT} greater than zero corresponds to a left shift, a value of
8572 zero corresponds to no shift, and a value less than zero corresponds to
8573 a right shift.  The absolute value of @var{SHIFT} must be less than
8574 @var{SIZE}.  If the @var{SIZE} argument is omitted, it is taken to be
8575 equivalent to @code{BIT_SIZE(I)}.
8577 @item @emph{Standard}:
8578 Fortran 95 and later, has overloads that are GNU extensions
8580 @item @emph{Class}:
8581 Elemental function
8583 @item @emph{Syntax}:
8584 @code{RESULT = ISHFTC(I, SHIFT [, SIZE])}
8586 @item @emph{Arguments}:
8587 @multitable @columnfractions .15 .70
8588 @item @var{I} @tab The type shall be @code{INTEGER}.
8589 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
8590 @item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER};
8591 the value must be greater than zero and less than or equal to
8592 @code{BIT_SIZE(I)}.
8593 @end multitable
8595 @item @emph{Return value}:
8596 The return value is of type @code{INTEGER} and of the same kind as
8597 @var{I}.
8599 @item @emph{Specific names}:
8600 @multitable @columnfractions .20 .20 .20 .25
8601 @item Name            @tab Argument            @tab Return type       @tab Standard
8602 @item @code{ISHFTC(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
8603 @item @code{BSHFTC(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
8604 @item @code{IISHFTC(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
8605 @item @code{JISHFTC(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
8606 @item @code{KISHFTC(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
8607 @end multitable
8609 @item @emph{See also}:
8610 @ref{ISHFT}
8611 @end table
8615 @node ISNAN
8616 @section @code{ISNAN} --- Test for a NaN
8617 @fnindex ISNAN
8618 @cindex IEEE, ISNAN
8620 @table @asis
8621 @item @emph{Description}:
8622 @code{ISNAN} tests whether a floating-point value is an IEEE
8623 Not-a-Number (NaN).
8624 @item @emph{Standard}:
8625 GNU extension
8627 @item @emph{Class}:
8628 Elemental function
8630 @item @emph{Syntax}:
8631 @code{ISNAN(X)}
8633 @item @emph{Arguments}:
8634 @multitable @columnfractions .15 .70
8635 @item @var{X} @tab Variable of the type @code{REAL}.
8637 @end multitable
8639 @item @emph{Return value}:
8640 Returns a default-kind @code{LOGICAL}. The returned value is @code{TRUE}
8641 if @var{X} is a NaN and @code{FALSE} otherwise.
8643 @item @emph{Example}:
8644 @smallexample
8645 program test_nan
8646   implicit none
8647   real :: x
8648   x = -1.0
8649   x = sqrt(x)
8650   if (isnan(x)) stop '"x" is a NaN'
8651 end program test_nan
8652 @end smallexample
8653 @end table
8657 @node ITIME
8658 @section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds) 
8659 @fnindex ITIME
8660 @cindex time, current
8661 @cindex current time
8663 @table @asis
8664 @item @emph{Description}:
8665 @code{ITIME(VALUES)} Fills @var{VALUES} with the numerical values at the  
8666 current local time. The hour (in the range 1-24), minute (in the range 1-60), 
8667 and seconds (in the range 1-60) appear in elements 1, 2, and 3 of @var{VALUES}, 
8668 respectively.
8670 This intrinsic routine is provided for backwards compatibility with 
8671 GNU Fortran 77.  In new code, programmers should consider the use of 
8672 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
8673 standard.
8675 @item @emph{Standard}:
8676 GNU extension
8678 @item @emph{Class}:
8679 Subroutine
8681 @item @emph{Syntax}:
8682 @code{CALL ITIME(VALUES)}
8684 @item @emph{Arguments}:
8685 @multitable @columnfractions .15 .70
8686 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)}
8687 and the kind shall be the default integer kind.
8688 @end multitable
8690 @item @emph{Return value}:
8691 Does not return anything.
8694 @item @emph{Example}:
8695 @smallexample
8696 program test_itime
8697   integer, dimension(3) :: tarray
8698   call itime(tarray)
8699   print *, tarray(1)
8700   print *, tarray(2)
8701   print *, tarray(3)
8702 end program test_itime
8703 @end smallexample
8705 @item @emph{See also}:
8706 @ref{DATE_AND_TIME}
8707 @end table
8711 @node KILL
8712 @section @code{KILL} --- Send a signal to a process
8713 @fnindex KILL
8715 @table @asis
8716 @item @emph{Description}:
8717 @item @emph{Standard}:
8718 Sends the signal specified by @var{SIG} to the process @var{PID}.
8719 See @code{kill(2)}.
8721 This intrinsic is provided in both subroutine and function forms;
8722 however, only one form can be used in any given program unit.
8724 @item @emph{Class}:
8725 Subroutine, function
8727 @item @emph{Syntax}:
8728 @multitable @columnfractions .80
8729 @item @code{CALL KILL(PID, SIG [, STATUS])}
8730 @item @code{STATUS = KILL(PID, SIG)}
8731 @end multitable
8733 @item @emph{Arguments}:
8734 @multitable @columnfractions .15 .70
8735 @item @var{PID} @tab Shall be a scalar @code{INTEGER} with @code{INTENT(IN)}.
8736 @item @var{SIG} @tab Shall be a scalar @code{INTEGER} with @code{INTENT(IN)}.
8737 @item @var{STATUS} @tab [Subroutine](Optional)
8738 Shall be a scalar @code{INTEGER}.
8739 Returns 0 on success; otherwise a system-specific error code is returned.
8740 @item @var{STATUS} @tab [Function] The kind type parameter is that of
8741 @code{pid}.
8742 Returns 0 on success; otherwise a system-specific error code is returned.
8743 @end multitable
8745 @item @emph{See also}:
8746 @ref{ABORT}, @ref{EXIT}
8747 @end table
8750 @node KIND
8751 @section @code{KIND} --- Kind of an entity
8752 @fnindex KIND
8753 @cindex kind
8755 @table @asis
8756 @item @emph{Description}:
8757 @code{KIND(X)} returns the kind value of the entity @var{X}.
8759 @item @emph{Standard}:
8760 Fortran 95 and later
8762 @item @emph{Class}:
8763 Inquiry function
8765 @item @emph{Syntax}:
8766 @code{K = KIND(X)}
8768 @item @emph{Arguments}:
8769 @multitable @columnfractions .15 .70
8770 @item @var{X} @tab Shall be of type @code{LOGICAL}, @code{INTEGER},
8771 @code{REAL}, @code{COMPLEX} or @code{CHARACTER}.
8772 @end multitable
8774 @item @emph{Return value}:
8775 The return value is a scalar of type @code{INTEGER} and of the default
8776 integer kind.
8778 @item @emph{Example}:
8779 @smallexample
8780 program test_kind
8781   integer,parameter :: kc = kind(' ')
8782   integer,parameter :: kl = kind(.true.)
8784   print *, "The default character kind is ", kc
8785   print *, "The default logical kind is ", kl
8786 end program test_kind
8787 @end smallexample
8789 @end table
8793 @node LBOUND
8794 @section @code{LBOUND} --- Lower dimension bounds of an array
8795 @fnindex LBOUND
8796 @cindex array, lower bound
8798 @table @asis
8799 @item @emph{Description}:
8800 Returns the lower bounds of an array, or a single lower bound
8801 along the @var{DIM} dimension.
8802 @item @emph{Standard}:
8803 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
8805 @item @emph{Class}:
8806 Inquiry function
8808 @item @emph{Syntax}:
8809 @code{RESULT = LBOUND(ARRAY [, DIM [, KIND]])}
8811 @item @emph{Arguments}:
8812 @multitable @columnfractions .15 .70
8813 @item @var{ARRAY} @tab Shall be an array, of any type.
8814 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
8815 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8816 expression indicating the kind parameter of the result.
8817 @end multitable
8819 @item @emph{Return value}:
8820 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
8821 @var{KIND} is absent, the return value is of default integer kind.
8822 If @var{DIM} is absent, the result is an array of the lower bounds of
8823 @var{ARRAY}.  If @var{DIM} is present, the result is a scalar
8824 corresponding to the lower bound of the array along that dimension.  If
8825 @var{ARRAY} is an expression rather than a whole array or array
8826 structure component, or if it has a zero extent along the relevant
8827 dimension, the lower bound is taken to be 1.
8829 @item @emph{See also}:
8830 @ref{UBOUND}, @ref{LCOBOUND}
8831 @end table
8835 @node LCOBOUND
8836 @section @code{LCOBOUND} --- Lower codimension bounds of an array
8837 @fnindex LCOBOUND
8838 @cindex coarray, lower bound
8840 @table @asis
8841 @item @emph{Description}:
8842 Returns the lower bounds of a coarray, or a single lower cobound
8843 along the @var{DIM} codimension.
8844 @item @emph{Standard}:
8845 Fortran 2008 and later
8847 @item @emph{Class}:
8848 Inquiry function
8850 @item @emph{Syntax}:
8851 @code{RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])}
8853 @item @emph{Arguments}:
8854 @multitable @columnfractions .15 .70
8855 @item @var{ARRAY} @tab Shall be an coarray, of any type.
8856 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
8857 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8858 expression indicating the kind parameter of the result.
8859 @end multitable
8861 @item @emph{Return value}:
8862 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
8863 @var{KIND} is absent, the return value is of default integer kind.
8864 If @var{DIM} is absent, the result is an array of the lower cobounds of
8865 @var{COARRAY}.  If @var{DIM} is present, the result is a scalar
8866 corresponding to the lower cobound of the array along that codimension.
8868 @item @emph{See also}:
8869 @ref{UCOBOUND}, @ref{LBOUND}
8870 @end table
8874 @node LEADZ
8875 @section @code{LEADZ} --- Number of leading zero bits of an integer
8876 @fnindex LEADZ
8877 @cindex zero bits
8879 @table @asis
8880 @item @emph{Description}:
8881 @code{LEADZ} returns the number of leading zero bits of an integer.
8883 @item @emph{Standard}:
8884 Fortran 2008 and later
8886 @item @emph{Class}:
8887 Elemental function
8889 @item @emph{Syntax}:
8890 @code{RESULT = LEADZ(I)}
8892 @item @emph{Arguments}:
8893 @multitable @columnfractions .15 .70
8894 @item @var{I} @tab Shall be of type @code{INTEGER}.
8895 @end multitable
8897 @item @emph{Return value}:
8898 The type of the return value is the default @code{INTEGER}.
8899 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
8901 @item @emph{Example}:
8902 @smallexample
8903 PROGRAM test_leadz
8904   WRITE (*,*) BIT_SIZE(1)  ! prints 32
8905   WRITE (*,*) LEADZ(1)     ! prints 31
8906 END PROGRAM
8907 @end smallexample
8909 @item @emph{See also}:
8910 @ref{BIT_SIZE}, @ref{TRAILZ}, @ref{POPCNT}, @ref{POPPAR}
8911 @end table
8915 @node LEN
8916 @section @code{LEN} --- Length of a character entity
8917 @fnindex LEN
8918 @cindex string, length
8920 @table @asis
8921 @item @emph{Description}:
8922 Returns the length of a character string.  If @var{STRING} is an array,
8923 the length of an element of @var{STRING} is returned.  Note that
8924 @var{STRING} need not be defined when this intrinsic is invoked, since
8925 only the length, not the content, of @var{STRING} is needed.
8927 @item @emph{Standard}:
8928 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
8930 @item @emph{Class}:
8931 Inquiry function
8933 @item @emph{Syntax}:
8934 @code{L = LEN(STRING [, KIND])}
8936 @item @emph{Arguments}:
8937 @multitable @columnfractions .15 .70
8938 @item @var{STRING} @tab Shall be a scalar or array of type
8939 @code{CHARACTER}, with @code{INTENT(IN)}
8940 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8941 expression indicating the kind parameter of the result.
8942 @end multitable
8944 @item @emph{Return value}:
8945 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
8946 @var{KIND} is absent, the return value is of default integer kind.
8949 @item @emph{Specific names}:
8950 @multitable @columnfractions .20 .20 .20 .25
8951 @item Name               @tab Argument          @tab Return type       @tab Standard
8952 @item @code{LEN(STRING)} @tab @code{CHARACTER}  @tab @code{INTEGER}    @tab Fortran 77 and later
8953 @end multitable
8956 @item @emph{See also}:
8957 @ref{LEN_TRIM}, @ref{ADJUSTL}, @ref{ADJUSTR}
8958 @end table
8962 @node LEN_TRIM
8963 @section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters
8964 @fnindex LEN_TRIM
8965 @cindex string, length, without trailing whitespace
8967 @table @asis
8968 @item @emph{Description}:
8969 Returns the length of a character string, ignoring any trailing blanks.
8971 @item @emph{Standard}:
8972 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
8974 @item @emph{Class}:
8975 Elemental function
8977 @item @emph{Syntax}:
8978 @code{RESULT = LEN_TRIM(STRING [, KIND])}
8980 @item @emph{Arguments}:
8981 @multitable @columnfractions .15 .70
8982 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
8983 with @code{INTENT(IN)}
8984 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8985 expression indicating the kind parameter of the result.
8986 @end multitable
8988 @item @emph{Return value}:
8989 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
8990 @var{KIND} is absent, the return value is of default integer kind.
8992 @item @emph{See also}:
8993 @ref{LEN}, @ref{ADJUSTL}, @ref{ADJUSTR}
8994 @end table
8998 @node LGE
8999 @section @code{LGE} --- Lexical greater than or equal
9000 @fnindex LGE
9001 @cindex lexical comparison of strings
9002 @cindex string, comparison
9004 @table @asis
9005 @item @emph{Description}:
9006 Determines whether one string is lexically greater than or equal to
9007 another string, where the two strings are interpreted as containing
9008 ASCII character codes.  If the String A and String B are not the same
9009 length, the shorter is compared as if spaces were appended to it to form
9010 a value that has the same length as the longer.
9012 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
9013 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
9014 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
9015 that the latter use the processor's character ordering (which is not
9016 ASCII on some targets), whereas the former always use the ASCII
9017 ordering.
9019 @item @emph{Standard}:
9020 Fortran 77 and later
9022 @item @emph{Class}:
9023 Elemental function
9025 @item @emph{Syntax}:
9026 @code{RESULT = LGE(STRING_A, STRING_B)}
9028 @item @emph{Arguments}:
9029 @multitable @columnfractions .15 .70
9030 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
9031 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
9032 @end multitable
9034 @item @emph{Return value}:
9035 Returns @code{.TRUE.} if @code{STRING_A >= STRING_B}, and @code{.FALSE.}
9036 otherwise, based on the ASCII ordering.
9038 @item @emph{Specific names}:
9039 @multitable @columnfractions .20 .20 .20 .25
9040 @item Name                           @tab Argument          @tab Return type       @tab Standard
9041 @item @code{LGE(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
9042 @end multitable
9044 @item @emph{See also}:
9045 @ref{LGT}, @ref{LLE}, @ref{LLT}
9046 @end table
9050 @node LGT
9051 @section @code{LGT} --- Lexical greater than
9052 @fnindex LGT
9053 @cindex lexical comparison of strings
9054 @cindex string, comparison
9056 @table @asis
9057 @item @emph{Description}:
9058 Determines whether one string is lexically greater than another string,
9059 where the two strings are interpreted as containing ASCII character
9060 codes.  If the String A and String B are not the same length, the
9061 shorter is compared as if spaces were appended to it to form a value
9062 that has the same length as the longer.
9064 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
9065 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
9066 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
9067 that the latter use the processor's character ordering (which is not
9068 ASCII on some targets), whereas the former always use the ASCII
9069 ordering.
9071 @item @emph{Standard}:
9072 Fortran 77 and later
9074 @item @emph{Class}:
9075 Elemental function
9077 @item @emph{Syntax}:
9078 @code{RESULT = LGT(STRING_A, STRING_B)}
9080 @item @emph{Arguments}:
9081 @multitable @columnfractions .15 .70
9082 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
9083 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
9084 @end multitable
9086 @item @emph{Return value}:
9087 Returns @code{.TRUE.} if @code{STRING_A > STRING_B}, and @code{.FALSE.}
9088 otherwise, based on the ASCII ordering.
9090 @item @emph{Specific names}:
9091 @multitable @columnfractions .20 .20 .20 .25
9092 @item Name                           @tab Argument          @tab Return type       @tab Standard
9093 @item @code{LGT(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
9094 @end multitable
9096 @item @emph{See also}:
9097 @ref{LGE}, @ref{LLE}, @ref{LLT}
9098 @end table
9102 @node LINK
9103 @section @code{LINK} --- Create a hard link
9104 @fnindex LINK
9105 @cindex file system, create link
9106 @cindex file system, hard link
9108 @table @asis
9109 @item @emph{Description}:
9110 Makes a (hard) link from file @var{PATH1} to @var{PATH2}. A null
9111 character (@code{CHAR(0)}) can be used to mark the end of the names in
9112 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
9113 names are ignored.  If the @var{STATUS} argument is supplied, it
9114 contains 0 on success or a nonzero error code upon return; see
9115 @code{link(2)}.
9117 This intrinsic is provided in both subroutine and function forms;
9118 however, only one form can be used in any given program unit.
9120 @item @emph{Standard}:
9121 GNU extension
9123 @item @emph{Class}:
9124 Subroutine, function
9126 @item @emph{Syntax}:
9127 @multitable @columnfractions .80
9128 @item @code{CALL LINK(PATH1, PATH2 [, STATUS])}
9129 @item @code{STATUS = LINK(PATH1, PATH2)}
9130 @end multitable
9132 @item @emph{Arguments}:
9133 @multitable @columnfractions .15 .70
9134 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
9135 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
9136 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
9137 @end multitable
9139 @item @emph{See also}:
9140 @ref{SYMLNK}, @ref{UNLINK}
9141 @end table
9145 @node LLE
9146 @section @code{LLE} --- Lexical less than or equal
9147 @fnindex LLE
9148 @cindex lexical comparison of strings
9149 @cindex string, comparison
9151 @table @asis
9152 @item @emph{Description}:
9153 Determines whether one string is lexically less than or equal to another
9154 string, where the two strings are interpreted as containing ASCII
9155 character codes.  If the String A and String B are not the same length,
9156 the shorter is compared as if spaces were appended to it to form a value
9157 that has the same length as the longer.
9159 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
9160 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
9161 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
9162 that the latter use the processor's character ordering (which is not
9163 ASCII on some targets), whereas the former always use the ASCII
9164 ordering.
9166 @item @emph{Standard}:
9167 Fortran 77 and later
9169 @item @emph{Class}:
9170 Elemental function
9172 @item @emph{Syntax}:
9173 @code{RESULT = LLE(STRING_A, STRING_B)}
9175 @item @emph{Arguments}:
9176 @multitable @columnfractions .15 .70
9177 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
9178 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
9179 @end multitable
9181 @item @emph{Return value}:
9182 Returns @code{.TRUE.} if @code{STRING_A <= STRING_B}, and @code{.FALSE.}
9183 otherwise, based on the ASCII ordering.
9185 @item @emph{Specific names}:
9186 @multitable @columnfractions .20 .20 .20 .25
9187 @item Name                           @tab Argument          @tab Return type       @tab Standard
9188 @item @code{LLE(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
9189 @end multitable
9191 @item @emph{See also}:
9192 @ref{LGE}, @ref{LGT}, @ref{LLT}
9193 @end table
9197 @node LLT
9198 @section @code{LLT} --- Lexical less than
9199 @fnindex LLT
9200 @cindex lexical comparison of strings
9201 @cindex string, comparison
9203 @table @asis
9204 @item @emph{Description}:
9205 Determines whether one string is lexically less than another string,
9206 where the two strings are interpreted as containing ASCII character
9207 codes.  If the String A and String B are not the same length, the
9208 shorter is compared as if spaces were appended to it to form a value
9209 that has the same length as the longer.
9211 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
9212 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
9213 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
9214 that the latter use the processor's character ordering (which is not
9215 ASCII on some targets), whereas the former always use the ASCII
9216 ordering.
9218 @item @emph{Standard}:
9219 Fortran 77 and later
9221 @item @emph{Class}:
9222 Elemental function
9224 @item @emph{Syntax}:
9225 @code{RESULT = LLT(STRING_A, STRING_B)}
9227 @item @emph{Arguments}:
9228 @multitable @columnfractions .15 .70
9229 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
9230 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
9231 @end multitable
9233 @item @emph{Return value}:
9234 Returns @code{.TRUE.} if @code{STRING_A < STRING_B}, and @code{.FALSE.}
9235 otherwise, based on the ASCII ordering.
9237 @item @emph{Specific names}:
9238 @multitable @columnfractions .20 .20 .20 .25
9239 @item Name                           @tab Argument          @tab Return type       @tab Standard
9240 @item @code{LLT(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
9241 @end multitable
9243 @item @emph{See also}:
9244 @ref{LGE}, @ref{LGT}, @ref{LLE}
9245 @end table
9249 @node LNBLNK
9250 @section @code{LNBLNK} --- Index of the last non-blank character in a string
9251 @fnindex LNBLNK
9252 @cindex string, find non-blank character
9254 @table @asis
9255 @item @emph{Description}:
9256 Returns the length of a character string, ignoring any trailing blanks.
9257 This is identical to the standard @code{LEN_TRIM} intrinsic, and is only
9258 included for backwards compatibility.
9260 @item @emph{Standard}:
9261 GNU extension
9263 @item @emph{Class}:
9264 Elemental function
9266 @item @emph{Syntax}:
9267 @code{RESULT = LNBLNK(STRING)}
9269 @item @emph{Arguments}:
9270 @multitable @columnfractions .15 .70
9271 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
9272 with @code{INTENT(IN)}
9273 @end multitable
9275 @item @emph{Return value}:
9276 The return value is of @code{INTEGER(kind=4)} type.
9278 @item @emph{See also}:
9279 @ref{INDEX intrinsic}, @ref{LEN_TRIM}
9280 @end table
9284 @node LOC
9285 @section @code{LOC} --- Returns the address of a variable
9286 @fnindex LOC
9287 @cindex location of a variable in memory
9289 @table @asis
9290 @item @emph{Description}:
9291 @code{LOC(X)} returns the address of @var{X} as an integer.
9293 @item @emph{Standard}:
9294 GNU extension
9296 @item @emph{Class}:
9297 Inquiry function
9299 @item @emph{Syntax}:
9300 @code{RESULT = LOC(X)}
9302 @item @emph{Arguments}:
9303 @multitable @columnfractions .15 .70
9304 @item @var{X} @tab Variable of any type.
9305 @end multitable
9307 @item @emph{Return value}:
9308 The return value is of type @code{INTEGER}, with a @code{KIND}
9309 corresponding to the size (in bytes) of a memory address on the target
9310 machine.
9312 @item @emph{Example}:
9313 @smallexample
9314 program test_loc
9315   integer :: i
9316   real :: r
9317   i = loc(r)
9318   print *, i
9319 end program test_loc
9320 @end smallexample
9321 @end table
9325 @node LOG
9326 @section @code{LOG} --- Natural logarithm function
9327 @fnindex LOG
9328 @fnindex ALOG
9329 @fnindex DLOG
9330 @fnindex CLOG
9331 @fnindex ZLOG
9332 @fnindex CDLOG
9333 @cindex exponential function, inverse
9334 @cindex logarithm function
9335 @cindex natural logarithm function
9337 @table @asis
9338 @item @emph{Description}:
9339 @code{LOG(X)} computes the natural logarithm of @var{X}, i.e. the
9340 logarithm to the base @math{e}.
9342 @item @emph{Standard}:
9343 Fortran 77 and later
9345 @item @emph{Class}:
9346 Elemental function
9348 @item @emph{Syntax}:
9349 @code{RESULT = LOG(X)}
9351 @item @emph{Arguments}:
9352 @multitable @columnfractions .15 .70
9353 @item @var{X} @tab The type shall be @code{REAL} or
9354 @code{COMPLEX}.
9355 @end multitable
9357 @item @emph{Return value}:
9358 The return value is of type @code{REAL} or @code{COMPLEX}.
9359 The kind type parameter is the same as @var{X}.
9360 If @var{X} is @code{COMPLEX}, the imaginary part @math{\omega} is in the range
9361 @math{-\pi < \omega \leq \pi}.
9363 @item @emph{Example}:
9364 @smallexample
9365 program test_log
9366   real(8) :: x = 2.7182818284590451_8
9367   complex :: z = (1.0, 2.0)
9368   x = log(x)    ! will yield (approximately) 1
9369   z = log(z)
9370 end program test_log
9371 @end smallexample
9373 @item @emph{Specific names}:
9374 @multitable @columnfractions .20 .20 .20 .25
9375 @item Name            @tab Argument          @tab Return type       @tab Standard
9376 @item @code{ALOG(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab f95, gnu
9377 @item @code{DLOG(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab f95, gnu
9378 @item @code{CLOG(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab f95, gnu
9379 @item @code{ZLOG(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
9380 @item @code{CDLOG(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
9381 @end multitable
9382 @end table
9386 @node LOG10
9387 @section @code{LOG10} --- Base 10 logarithm function
9388 @fnindex LOG10
9389 @fnindex ALOG10
9390 @fnindex DLOG10
9391 @cindex exponential function, inverse
9392 @cindex logarithm function with base 10
9393 @cindex base 10 logarithm function
9395 @table @asis
9396 @item @emph{Description}:
9397 @code{LOG10(X)} computes the base 10 logarithm of @var{X}.
9399 @item @emph{Standard}:
9400 Fortran 77 and later
9402 @item @emph{Class}:
9403 Elemental function
9405 @item @emph{Syntax}:
9406 @code{RESULT = LOG10(X)}
9408 @item @emph{Arguments}:
9409 @multitable @columnfractions .15 .70
9410 @item @var{X} @tab The type shall be @code{REAL}.
9411 @end multitable
9413 @item @emph{Return value}:
9414 The return value is of type @code{REAL} or @code{COMPLEX}.
9415 The kind type parameter is the same as @var{X}.
9417 @item @emph{Example}:
9418 @smallexample
9419 program test_log10
9420   real(8) :: x = 10.0_8
9421   x = log10(x)
9422 end program test_log10
9423 @end smallexample
9425 @item @emph{Specific names}:
9426 @multitable @columnfractions .20 .20 .20 .25
9427 @item Name            @tab Argument          @tab Return type       @tab Standard
9428 @item @code{ALOG10(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 95 and later
9429 @item @code{DLOG10(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
9430 @end multitable
9431 @end table
9435 @node LOG_GAMMA
9436 @section @code{LOG_GAMMA} --- Logarithm of the Gamma function
9437 @fnindex LOG_GAMMA
9438 @fnindex LGAMMA
9439 @fnindex ALGAMA
9440 @fnindex DLGAMA
9441 @cindex Gamma function, logarithm of
9443 @table @asis
9444 @item @emph{Description}:
9445 @code{LOG_GAMMA(X)} computes the natural logarithm of the absolute value
9446 of the Gamma (@math{\Gamma}) function.
9448 @item @emph{Standard}:
9449 Fortran 2008 and later
9451 @item @emph{Class}:
9452 Elemental function
9454 @item @emph{Syntax}:
9455 @code{X = LOG_GAMMA(X)}
9457 @item @emph{Arguments}:
9458 @multitable @columnfractions .15 .70
9459 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
9460 nor a negative integer.
9461 @end multitable
9463 @item @emph{Return value}:
9464 The return value is of type @code{REAL} of the same kind as @var{X}.
9466 @item @emph{Example}:
9467 @smallexample
9468 program test_log_gamma
9469   real :: x = 1.0
9470   x = lgamma(x) ! returns 0.0
9471 end program test_log_gamma
9472 @end smallexample
9474 @item @emph{Specific names}:
9475 @multitable @columnfractions .20 .20 .20 .25
9476 @item Name             @tab Argument         @tab Return type       @tab Standard
9477 @item @code{LGAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
9478 @item @code{ALGAMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
9479 @item @code{DLGAMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU Extension
9480 @end multitable
9482 @item @emph{See also}:
9483 Gamma function: @ref{GAMMA}
9485 @end table
9489 @node LOGICAL
9490 @section @code{LOGICAL} --- Convert to logical type
9491 @fnindex LOGICAL
9492 @cindex conversion, to logical
9494 @table @asis
9495 @item @emph{Description}:
9496 Converts one kind of @code{LOGICAL} variable to another.
9498 @item @emph{Standard}:
9499 Fortran 95 and later
9501 @item @emph{Class}:
9502 Elemental function
9504 @item @emph{Syntax}:
9505 @code{RESULT = LOGICAL(L [, KIND])}
9507 @item @emph{Arguments}:
9508 @multitable @columnfractions .15 .70
9509 @item @var{L}    @tab The type shall be @code{LOGICAL}.
9510 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
9511 expression indicating the kind parameter of the result.
9512 @end multitable
9514 @item @emph{Return value}:
9515 The return value is a @code{LOGICAL} value equal to @var{L}, with a
9516 kind corresponding to @var{KIND}, or of the default logical kind if
9517 @var{KIND} is not given.
9519 @item @emph{See also}:
9520 @ref{INT}, @ref{REAL}, @ref{CMPLX}
9521 @end table
9525 @node LONG
9526 @section @code{LONG} --- Convert to integer type
9527 @fnindex LONG
9528 @cindex conversion, to integer
9530 @table @asis
9531 @item @emph{Description}:
9532 Convert to a @code{KIND=4} integer type, which is the same size as a C
9533 @code{long} integer.  This is equivalent to the standard @code{INT}
9534 intrinsic with an optional argument of @code{KIND=4}, and is only
9535 included for backwards compatibility.
9537 @item @emph{Standard}:
9538 GNU extension
9540 @item @emph{Class}:
9541 Elemental function
9543 @item @emph{Syntax}:
9544 @code{RESULT = LONG(A)}
9546 @item @emph{Arguments}:
9547 @multitable @columnfractions .15 .70
9548 @item @var{A}    @tab Shall be of type @code{INTEGER},
9549 @code{REAL}, or @code{COMPLEX}.
9550 @end multitable
9552 @item @emph{Return value}:
9553 The return value is a @code{INTEGER(4)} variable.
9555 @item @emph{See also}:
9556 @ref{INT}, @ref{INT2}, @ref{INT8}
9557 @end table
9561 @node LSHIFT
9562 @section @code{LSHIFT} --- Left shift bits
9563 @fnindex LSHIFT
9564 @cindex bits, shift left
9566 @table @asis
9567 @item @emph{Description}:
9568 @code{LSHIFT} returns a value corresponding to @var{I} with all of the
9569 bits shifted left by @var{SHIFT} places.  If the absolute value of
9570 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined. 
9571 Bits shifted out from the left end are lost; zeros are shifted in from
9572 the opposite end.
9574 This function has been superseded by the @code{ISHFT} intrinsic, which
9575 is standard in Fortran 95 and later, and the @code{SHIFTL} intrinsic,
9576 which is standard in Fortran 2008 and later.
9578 @item @emph{Standard}:
9579 GNU extension
9581 @item @emph{Class}:
9582 Elemental function
9584 @item @emph{Syntax}:
9585 @code{RESULT = LSHIFT(I, SHIFT)}
9587 @item @emph{Arguments}:
9588 @multitable @columnfractions .15 .70
9589 @item @var{I} @tab The type shall be @code{INTEGER}.
9590 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
9591 @end multitable
9593 @item @emph{Return value}:
9594 The return value is of type @code{INTEGER} and of the same kind as
9595 @var{I}.
9597 @item @emph{See also}:
9598 @ref{ISHFT}, @ref{ISHFTC}, @ref{RSHIFT}, @ref{SHIFTA}, @ref{SHIFTL},
9599 @ref{SHIFTR}
9601 @end table
9605 @node LSTAT
9606 @section @code{LSTAT} --- Get file status
9607 @fnindex LSTAT
9608 @cindex file system, file status
9610 @table @asis
9611 @item @emph{Description}:
9612 @code{LSTAT} is identical to @ref{STAT}, except that if path is a
9613 symbolic link, then the link itself is statted, not the file that it
9614 refers to.
9616 The elements in @code{VALUES} are the same as described by @ref{STAT}.
9618 This intrinsic is provided in both subroutine and function forms;
9619 however, only one form can be used in any given program unit.
9621 @item @emph{Standard}:
9622 GNU extension
9624 @item @emph{Class}:
9625 Subroutine, function
9627 @item @emph{Syntax}:
9628 @multitable @columnfractions .80
9629 @item @code{CALL LSTAT(NAME, VALUES [, STATUS])}
9630 @item @code{STATUS = LSTAT(NAME, VALUES)}
9631 @end multitable
9633 @item @emph{Arguments}:
9634 @multitable @columnfractions .15 .70
9635 @item @var{NAME}   @tab The type shall be @code{CHARACTER} of the default
9636 kind, a valid path within the file system.
9637 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
9638 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}.
9639 Returns 0 on success and a system specific error code otherwise.
9640 @end multitable
9642 @item @emph{Example}:
9643 See @ref{STAT} for an example.
9645 @item @emph{See also}:
9646 To stat an open file: @ref{FSTAT}, to stat a file: @ref{STAT}
9647 @end table
9651 @node LTIME
9652 @section @code{LTIME} --- Convert time to local time info
9653 @fnindex LTIME
9654 @cindex time, conversion to local time info
9656 @table @asis
9657 @item @emph{Description}:
9658 Given a system time value @var{TIME} (as provided by the @ref{TIME}
9659 intrinsic), fills @var{VALUES} with values extracted from it appropriate
9660 to the local time zone using @code{localtime(3)}.
9662 This intrinsic routine is provided for backwards compatibility with 
9663 GNU Fortran 77.  In new code, programmers should consider the use of 
9664 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
9665 standard.
9667 @item @emph{Standard}:
9668 GNU extension
9670 @item @emph{Class}:
9671 Subroutine
9673 @item @emph{Syntax}:
9674 @code{CALL LTIME(TIME, VALUES)}
9676 @item @emph{Arguments}:
9677 @multitable @columnfractions .15 .70
9678 @item @var{TIME}  @tab An @code{INTEGER} scalar expression
9679 corresponding to a system time, with @code{INTENT(IN)}.
9680 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
9681 with @code{INTENT(OUT)}.
9682 @end multitable
9684 @item @emph{Return value}:
9685 The elements of @var{VALUES} are assigned as follows:
9686 @enumerate
9687 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
9688 seconds
9689 @item Minutes after the hour, range 0--59
9690 @item Hours past midnight, range 0--23
9691 @item Day of month, range 1--31
9692 @item Number of months since January, range 0--11
9693 @item Years since 1900
9694 @item Number of days since Sunday, range 0--6
9695 @item Days since January 1, range 0--365
9696 @item Daylight savings indicator: positive if daylight savings is in
9697 effect, zero if not, and negative if the information is not available.
9698 @end enumerate
9700 @item @emph{See also}:
9701 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{GMTIME}, @ref{TIME}, @ref{TIME8}
9703 @end table
9707 @node MALLOC
9708 @section @code{MALLOC} --- Allocate dynamic memory
9709 @fnindex MALLOC
9710 @cindex pointer, cray
9712 @table @asis
9713 @item @emph{Description}:
9714 @code{MALLOC(SIZE)} allocates @var{SIZE} bytes of dynamic memory and
9715 returns the address of the allocated memory. The @code{MALLOC} intrinsic
9716 is an extension intended to be used with Cray pointers, and is provided
9717 in GNU Fortran to allow the user to compile legacy code. For new code
9718 using Fortran 95 pointers, the memory allocation intrinsic is
9719 @code{ALLOCATE}.
9721 @item @emph{Standard}:
9722 GNU extension
9724 @item @emph{Class}:
9725 Function
9727 @item @emph{Syntax}:
9728 @code{PTR = MALLOC(SIZE)}
9730 @item @emph{Arguments}:
9731 @multitable @columnfractions .15 .70
9732 @item @var{SIZE} @tab The type shall be @code{INTEGER}.
9733 @end multitable
9735 @item @emph{Return value}:
9736 The return value is of type @code{INTEGER(K)}, with @var{K} such that
9737 variables of type @code{INTEGER(K)} have the same size as
9738 C pointers (@code{sizeof(void *)}).
9740 @item @emph{Example}:
9741 The following example demonstrates the use of @code{MALLOC} and
9742 @code{FREE} with Cray pointers.
9744 @smallexample
9745 program test_malloc
9746   implicit none
9747   integer i
9748   real*8 x(*), z
9749   pointer(ptr_x,x)
9751   ptr_x = malloc(20*8)
9752   do i = 1, 20
9753     x(i) = sqrt(1.0d0 / i)
9754   end do
9755   z = 0
9756   do i = 1, 20
9757     z = z + x(i)
9758     print *, z
9759   end do
9760   call free(ptr_x)
9761 end program test_malloc
9762 @end smallexample
9764 @item @emph{See also}:
9765 @ref{FREE}
9766 @end table
9770 @node MASKL
9771 @section @code{MASKL} --- Left justified mask
9772 @fnindex MASKL
9773 @cindex mask, left justified
9775 @table @asis
9776 @item @emph{Description}:
9777 @code{MASKL(I[, KIND])} has its leftmost @var{I} bits set to 1, and the
9778 remaining bits set to 0.
9780 @item @emph{Standard}:
9781 Fortran 2008 and later
9783 @item @emph{Class}:
9784 Elemental function
9786 @item @emph{Syntax}:
9787 @code{RESULT = MASKL(I[, KIND])}
9789 @item @emph{Arguments}:
9790 @multitable @columnfractions .15 .70
9791 @item @var{I} @tab Shall be of type @code{INTEGER}.
9792 @item @var{KIND} @tab Shall be a scalar constant expression of type
9793 @code{INTEGER}.
9794 @end multitable
9796 @item @emph{Return value}:
9797 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
9798 specifies the kind value of the return type; otherwise, it is of the
9799 default integer kind.
9801 @item @emph{See also}:
9802 @ref{MASKR}
9803 @end table
9807 @node MASKR
9808 @section @code{MASKR} --- Right justified mask
9809 @fnindex MASKR
9810 @cindex mask, right justified
9812 @table @asis
9813 @item @emph{Description}:
9814 @code{MASKL(I[, KIND])} has its rightmost @var{I} bits set to 1, and the
9815 remaining bits set to 0.
9817 @item @emph{Standard}:
9818 Fortran 2008 and later
9820 @item @emph{Class}:
9821 Elemental function
9823 @item @emph{Syntax}:
9824 @code{RESULT = MASKR(I[, KIND])}
9826 @item @emph{Arguments}:
9827 @multitable @columnfractions .15 .70
9828 @item @var{I} @tab Shall be of type @code{INTEGER}.
9829 @item @var{KIND} @tab Shall be a scalar constant expression of type
9830 @code{INTEGER}.
9831 @end multitable
9833 @item @emph{Return value}:
9834 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
9835 specifies the kind value of the return type; otherwise, it is of the
9836 default integer kind.
9838 @item @emph{See also}:
9839 @ref{MASKL}
9840 @end table
9844 @node MATMUL
9845 @section @code{MATMUL} --- matrix multiplication
9846 @fnindex MATMUL
9847 @cindex matrix multiplication
9848 @cindex product, matrix
9850 @table @asis
9851 @item @emph{Description}:
9852 Performs a matrix multiplication on numeric or logical arguments.
9854 @item @emph{Standard}:
9855 Fortran 95 and later
9857 @item @emph{Class}:
9858 Transformational function
9860 @item @emph{Syntax}:
9861 @code{RESULT = MATMUL(MATRIX_A, MATRIX_B)}
9863 @item @emph{Arguments}:
9864 @multitable @columnfractions .15 .70
9865 @item @var{MATRIX_A} @tab An array of @code{INTEGER},
9866 @code{REAL}, @code{COMPLEX}, or @code{LOGICAL} type, with a rank of
9867 one or two.
9868 @item @var{MATRIX_B} @tab An array of @code{INTEGER},
9869 @code{REAL}, or @code{COMPLEX} type if @var{MATRIX_A} is of a numeric
9870 type; otherwise, an array of @code{LOGICAL} type. The rank shall be one
9871 or two, and the first (or only) dimension of @var{MATRIX_B} shall be
9872 equal to the last (or only) dimension of @var{MATRIX_A}.
9873 @var{MATRIX_A} and @var{MATRIX_B} shall not both be rank one arrays.
9874 @end multitable
9876 @item @emph{Return value}:
9877 The matrix product of @var{MATRIX_A} and @var{MATRIX_B}.  The type and
9878 kind of the result follow the usual type and kind promotion rules, as
9879 for the @code{*} or @code{.AND.} operators.
9881 @item @emph{See also}:
9882 @end table
9886 @node MAX
9887 @section @code{MAX} --- Maximum value of an argument list
9888 @fnindex MAX
9889 @fnindex MAX0
9890 @fnindex AMAX0
9891 @fnindex MAX1
9892 @fnindex AMAX1
9893 @fnindex DMAX1
9894 @cindex maximum value
9896 @table @asis
9897 @item @emph{Description}:
9898 Returns the argument with the largest (most positive) value.
9900 @item @emph{Standard}:
9901 Fortran 77 and later
9903 @item @emph{Class}:
9904 Elemental function
9906 @item @emph{Syntax}:
9907 @code{RESULT = MAX(A1, A2 [, A3 [, ...]])}
9909 @item @emph{Arguments}:
9910 @multitable @columnfractions .15 .70
9911 @item @var{A1}          @tab The type shall be @code{INTEGER} or
9912 @code{REAL}.
9913 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
9914 as @var{A1}.  (As a GNU extension, arguments of different kinds are
9915 permitted.)
9916 @end multitable
9918 @item @emph{Return value}:
9919 The return value corresponds to the maximum value among the arguments,
9920 and has the same type and kind as the first argument.
9922 @item @emph{Specific names}:
9923 @multitable @columnfractions .20 .20 .20 .25
9924 @item Name             @tab Argument             @tab Return type         @tab Standard
9925 @item @code{MAX0(A1)}  @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)}   @tab Fortran 77 and later
9926 @item @code{AMAX0(A1)} @tab @code{INTEGER(4) A1} @tab @code{REAL(MAX(X))} @tab Fortran 77 and later
9927 @item @code{MAX1(A1)}  @tab @code{REAL A1}       @tab @code{INT(MAX(X))}  @tab Fortran 77 and later
9928 @item @code{AMAX1(A1)} @tab @code{REAL(4) A1}    @tab @code{REAL(4)}      @tab Fortran 77 and later
9929 @item @code{DMAX1(A1)} @tab @code{REAL(8) A1}    @tab @code{REAL(8)}      @tab Fortran 77 and later
9930 @end multitable
9932 @item @emph{See also}:
9933 @ref{MAXLOC} @ref{MAXVAL}, @ref{MIN}
9935 @end table
9939 @node MAXEXPONENT
9940 @section @code{MAXEXPONENT} --- Maximum exponent of a real kind
9941 @fnindex MAXEXPONENT
9942 @cindex model representation, maximum exponent
9944 @table @asis
9945 @item @emph{Description}:
9946 @code{MAXEXPONENT(X)} returns the maximum exponent in the model of the
9947 type of @code{X}.
9949 @item @emph{Standard}:
9950 Fortran 95 and later
9952 @item @emph{Class}:
9953 Inquiry function
9955 @item @emph{Syntax}:
9956 @code{RESULT = MAXEXPONENT(X)}
9958 @item @emph{Arguments}:
9959 @multitable @columnfractions .15 .70
9960 @item @var{X} @tab Shall be of type @code{REAL}.
9961 @end multitable
9963 @item @emph{Return value}:
9964 The return value is of type @code{INTEGER} and of the default integer
9965 kind.
9967 @item @emph{Example}:
9968 @smallexample
9969 program exponents
9970   real(kind=4) :: x
9971   real(kind=8) :: y
9973   print *, minexponent(x), maxexponent(x)
9974   print *, minexponent(y), maxexponent(y)
9975 end program exponents
9976 @end smallexample
9977 @end table
9981 @node MAXLOC
9982 @section @code{MAXLOC} --- Location of the maximum value within an array
9983 @fnindex MAXLOC
9984 @cindex array, location of maximum element
9986 @table @asis
9987 @item @emph{Description}:
9988 Determines the location of the element in the array with the maximum
9989 value, or, if the @var{DIM} argument is supplied, determines the
9990 locations of the maximum element along each row of the array in the
9991 @var{DIM} direction.  If @var{MASK} is present, only the elements for
9992 which @var{MASK} is @code{.TRUE.} are considered.  If more than one
9993 element in the array has the maximum value, the location returned is
9994 that of the first such element in array element order if the
9995 @var{BACK} is not present, or if it false; otherwise, the location
9996 returned is that of the first such element. If the array has zero
9997 size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
9998 the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
9999 and all of the elements of @var{MASK} along a given row are zero, the
10000 result value for that row is zero.
10002 @item @emph{Standard}:
10003 Fortran 95 and later; @var{ARRAY} of @code{CHARACTER} and the
10004 @var{KIND} argument are available in Fortran 2003 and later.
10005 The @var{BACK} argument is available in Fortran 2008 and later.
10007 @item @emph{Class}:
10008 Transformational function
10010 @item @emph{Syntax}:
10011 @multitable @columnfractions .80
10012 @item @code{RESULT = MAXLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])}
10013 @item @code{RESULT = MAXLOC(ARRAY [, MASK] [,KIND] [,BACK])}
10014 @end multitable
10016 @item @emph{Arguments}:
10017 @multitable @columnfractions .15 .70
10018 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
10019 @code{REAL}.
10020 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
10021 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
10022 inclusive.  It may not be an optional dummy argument.
10023 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
10024 and conformable with @var{ARRAY}.
10025 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
10026 expression indicating the kind parameter of the result.
10027 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
10028 @end multitable
10030 @item @emph{Return value}:
10031 If @var{DIM} is absent, the result is a rank-one array with a length
10032 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
10033 is an array with a rank one less than the rank of @var{ARRAY}, and a
10034 size corresponding to the size of @var{ARRAY} with the @var{DIM}
10035 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
10036 of one, the result is a scalar.   If the optional argument @var{KIND}
10037 is present, the result is an integer of kind @var{KIND}, otherwise it
10038 is of default kind.
10040 @item @emph{See also}:
10041 @ref{MAX}, @ref{MAXVAL}
10043 @end table
10047 @node MAXVAL
10048 @section @code{MAXVAL} --- Maximum value of an array
10049 @fnindex MAXVAL
10050 @cindex array, maximum value
10051 @cindex maximum value
10053 @table @asis
10054 @item @emph{Description}:
10055 Determines the maximum value of the elements in an array value, or, if
10056 the @var{DIM} argument is supplied, determines the maximum value along
10057 each row of the array in the @var{DIM} direction.  If @var{MASK} is
10058 present, only the elements for which @var{MASK} is @code{.TRUE.} are
10059 considered.  If the array has zero size, or all of the elements of
10060 @var{MASK} are @code{.FALSE.}, then the result is @code{-HUGE(ARRAY)}
10061 if @var{ARRAY} is numeric, or a string of nulls if @var{ARRAY} is of character
10062 type.
10064 @item @emph{Standard}:
10065 Fortran 95 and later
10067 @item @emph{Class}:
10068 Transformational function
10070 @item @emph{Syntax}:
10071 @multitable @columnfractions .80
10072 @item @code{RESULT = MAXVAL(ARRAY, DIM [, MASK])}
10073 @item @code{RESULT = MAXVAL(ARRAY [, MASK])}
10074 @end multitable
10076 @item @emph{Arguments}:
10077 @multitable @columnfractions .15 .70
10078 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
10079 @code{REAL}.
10080 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
10081 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
10082 inclusive.  It may not be an optional dummy argument.
10083 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
10084 and conformable with @var{ARRAY}.
10085 @end multitable
10087 @item @emph{Return value}:
10088 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
10089 is a scalar.  If @var{DIM} is present, the result is an array with a
10090 rank one less than the rank of @var{ARRAY}, and a size corresponding to
10091 the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
10092 cases, the result is of the same type and kind as @var{ARRAY}.
10094 @item @emph{See also}:
10095 @ref{MAX}, @ref{MAXLOC}
10096 @end table
10100 @node MCLOCK
10101 @section @code{MCLOCK} --- Time function
10102 @fnindex MCLOCK
10103 @cindex time, clock ticks
10104 @cindex clock ticks
10106 @table @asis
10107 @item @emph{Description}:
10108 Returns the number of clock ticks since the start of the process, based
10109 on the function @code{clock(3)} in the C standard library.
10111 This intrinsic is not fully portable, such as to systems with 32-bit
10112 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
10113 the values returned by this intrinsic might be, or become, negative, or
10114 numerically less than previous values, during a single run of the
10115 compiled program.
10117 @item @emph{Standard}:
10118 GNU extension
10120 @item @emph{Class}:
10121 Function
10123 @item @emph{Syntax}:
10124 @code{RESULT = MCLOCK()}
10126 @item @emph{Return value}:
10127 The return value is a scalar of type @code{INTEGER(4)}, equal to the
10128 number of clock ticks since the start of the process, or @code{-1} if
10129 the system does not support @code{clock(3)}.
10131 @item @emph{See also}:
10132 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME}
10134 @end table
10138 @node MCLOCK8
10139 @section @code{MCLOCK8} --- Time function (64-bit)
10140 @fnindex MCLOCK8
10141 @cindex time, clock ticks
10142 @cindex clock ticks
10144 @table @asis
10145 @item @emph{Description}:
10146 Returns the number of clock ticks since the start of the process, based
10147 on the function @code{clock(3)} in the C standard library.
10149 @emph{Warning:} this intrinsic does not increase the range of the timing
10150 values over that returned by @code{clock(3)}. On a system with a 32-bit
10151 @code{clock(3)}, @code{MCLOCK8} will return a 32-bit value, even though
10152 it is converted to a 64-bit @code{INTEGER(8)} value. That means
10153 overflows of the 32-bit value can still occur. Therefore, the values
10154 returned by this intrinsic might be or become negative or numerically
10155 less than previous values during a single run of the compiled program.
10157 @item @emph{Standard}:
10158 GNU extension
10160 @item @emph{Class}:
10161 Function
10163 @item @emph{Syntax}:
10164 @code{RESULT = MCLOCK8()}
10166 @item @emph{Return value}:
10167 The return value is a scalar of type @code{INTEGER(8)}, equal to the
10168 number of clock ticks since the start of the process, or @code{-1} if
10169 the system does not support @code{clock(3)}.
10171 @item @emph{See also}:
10172 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
10174 @end table
10178 @node MERGE
10179 @section @code{MERGE} --- Merge variables
10180 @fnindex MERGE
10181 @cindex array, merge arrays
10182 @cindex array, combine arrays
10184 @table @asis
10185 @item @emph{Description}:
10186 Select values from two arrays according to a logical mask.  The result
10187 is equal to @var{TSOURCE} if @var{MASK} is @code{.TRUE.}, or equal to
10188 @var{FSOURCE} if it is @code{.FALSE.}.
10190 @item @emph{Standard}:
10191 Fortran 95 and later
10193 @item @emph{Class}:
10194 Elemental function
10196 @item @emph{Syntax}:
10197 @code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)}
10199 @item @emph{Arguments}:
10200 @multitable @columnfractions .15 .70
10201 @item @var{TSOURCE} @tab May be of any type.
10202 @item @var{FSOURCE} @tab Shall be of the same type and type parameters
10203 as @var{TSOURCE}.
10204 @item @var{MASK}    @tab Shall be of type @code{LOGICAL}.
10205 @end multitable
10207 @item @emph{Return value}:
10208 The result is of the same type and type parameters as @var{TSOURCE}.
10210 @end table
10214 @node MERGE_BITS
10215 @section @code{MERGE_BITS} --- Merge of bits under mask
10216 @fnindex MERGE_BITS
10217 @cindex bits, merge
10219 @table @asis
10220 @item @emph{Description}:
10221 @code{MERGE_BITS(I, J, MASK)} merges the bits of @var{I} and @var{J}
10222 as determined by the mask.  The i-th bit of the result is equal to the 
10223 i-th bit of @var{I} if the i-th bit of @var{MASK} is 1; it is equal to
10224 the i-th bit of @var{J} otherwise.
10226 @item @emph{Standard}:
10227 Fortran 2008 and later
10229 @item @emph{Class}:
10230 Elemental function
10232 @item @emph{Syntax}:
10233 @code{RESULT = MERGE_BITS(I, J, MASK)}
10235 @item @emph{Arguments}:
10236 @multitable @columnfractions .15 .70
10237 @item @var{I}    @tab Shall be of type @code{INTEGER}.
10238 @item @var{J}    @tab Shall be of type @code{INTEGER} and of the same
10239 kind as @var{I}.
10240 @item @var{MASK} @tab Shall be of type @code{INTEGER} and of the same
10241 kind as @var{I}.
10242 @end multitable
10244 @item @emph{Return value}:
10245 The result is of the same type and kind as @var{I}.
10247 @end table
10251 @node MIN
10252 @section @code{MIN} --- Minimum value of an argument list
10253 @fnindex MIN
10254 @fnindex MIN0
10255 @fnindex AMIN0
10256 @fnindex MIN1
10257 @fnindex AMIN1
10258 @fnindex DMIN1
10259 @cindex minimum value
10261 @table @asis
10262 @item @emph{Description}:
10263 Returns the argument with the smallest (most negative) value.
10265 @item @emph{Standard}:
10266 Fortran 77 and later
10268 @item @emph{Class}:
10269 Elemental function
10271 @item @emph{Syntax}:
10272 @code{RESULT = MIN(A1, A2 [, A3, ...])}
10274 @item @emph{Arguments}:
10275 @multitable @columnfractions .15 .70
10276 @item @var{A1}          @tab The type shall be @code{INTEGER} or
10277 @code{REAL}.
10278 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
10279 as @var{A1}.  (As a GNU extension, arguments of different kinds are
10280 permitted.)
10281 @end multitable
10283 @item @emph{Return value}:
10284 The return value corresponds to the maximum value among the arguments,
10285 and has the same type and kind as the first argument.
10287 @item @emph{Specific names}:
10288 @multitable @columnfractions .20 .20 .20 .25
10289 @item Name              @tab Argument             @tab Return type        @tab Standard
10290 @item @code{MIN0(A1)}   @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)}  @tab Fortran 77 and later
10291 @item @code{AMIN0(A1)}  @tab @code{INTEGER(4) A1} @tab @code{REAL(4)}     @tab Fortran 77 and later
10292 @item @code{MIN1(A1)}   @tab @code{REAL A1}       @tab @code{INTEGER(4)}  @tab Fortran 77 and later
10293 @item @code{AMIN1(A1)}  @tab @code{REAL(4) A1}    @tab @code{REAL(4)}     @tab Fortran 77 and later
10294 @item @code{DMIN1(A1)}  @tab @code{REAL(8) A1}    @tab @code{REAL(8)}     @tab Fortran 77 and later
10295 @end multitable
10297 @item @emph{See also}:
10298 @ref{MAX}, @ref{MINLOC}, @ref{MINVAL}
10299 @end table
10303 @node MINEXPONENT
10304 @section @code{MINEXPONENT} --- Minimum exponent of a real kind
10305 @fnindex MINEXPONENT
10306 @cindex model representation, minimum exponent
10308 @table @asis
10309 @item @emph{Description}:
10310 @code{MINEXPONENT(X)} returns the minimum exponent in the model of the
10311 type of @code{X}.
10313 @item @emph{Standard}:
10314 Fortran 95 and later
10316 @item @emph{Class}:
10317 Inquiry function
10319 @item @emph{Syntax}:
10320 @code{RESULT = MINEXPONENT(X)}
10322 @item @emph{Arguments}:
10323 @multitable @columnfractions .15 .70
10324 @item @var{X} @tab Shall be of type @code{REAL}.
10325 @end multitable
10327 @item @emph{Return value}:
10328 The return value is of type @code{INTEGER} and of the default integer
10329 kind.
10331 @item @emph{Example}:
10332 See @code{MAXEXPONENT} for an example.
10333 @end table
10337 @node MINLOC
10338 @section @code{MINLOC} --- Location of the minimum value within an array
10339 @fnindex MINLOC
10340 @cindex array, location of minimum element
10342 @table @asis
10343 @item @emph{Description}:
10344 Determines the location of the element in the array with the minimum
10345 value, or, if the @var{DIM} argument is supplied, determines the
10346 locations of the minimum element along each row of the array in the
10347 @var{DIM} direction.  If @var{MASK} is present, only the elements for
10348 which @var{MASK} is @code{.TRUE.} are considered.  If more than one
10349 element in the array has the minimum value, the location returned is
10350 that of the first such element in array element order if the
10351 @var{BACK} is not present, or if it false; otherwise, the location
10352 returned is that of the first such element.  If the array has
10353 zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
10354 the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
10355 and all of the elements of @var{MASK} along a given row are zero, the
10356 result value for that row is zero.
10358 @item @emph{Standard}:
10359 Fortran 95 and later; @var{ARRAY} of @code{CHARACTER} and the
10360 @var{KIND} argument are available in Fortran 2003 and later.
10361 The @var{BACK} argument is available in Fortran 2008 and later.
10363 @item @emph{Class}:
10364 Transformational function
10366 @item @emph{Syntax}:
10367 @multitable @columnfractions .80
10368 @item @code{RESULT = MINLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])}
10369 @item @code{RESULT = MINLOC(ARRAY [, MASK], [,KIND] [,BACK])}
10370 @end multitable
10372 @item @emph{Arguments}:
10373 @multitable @columnfractions .15 .70
10374 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER},
10375 @code{REAL} or @code{CHARACTER}.
10376 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
10377 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
10378 inclusive.  It may not be an optional dummy argument.
10379 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
10380 and conformable with @var{ARRAY}.
10381 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
10382 expression indicating the kind parameter of the result.
10383 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
10384 @end multitable
10386 @item @emph{Return value}:
10387 If @var{DIM} is absent, the result is a rank-one array with a length
10388 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
10389 is an array with a rank one less than the rank of @var{ARRAY}, and a
10390 size corresponding to the size of @var{ARRAY} with the @var{DIM}
10391 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
10392 of one, the result is a scalar.  If the optional argument @var{KIND}
10393 is present, the result is an integer of kind @var{KIND}, otherwise it
10394 is of default kind.
10396 @item @emph{See also}:
10397 @ref{MIN}, @ref{MINVAL}
10399 @end table
10403 @node MINVAL
10404 @section @code{MINVAL} --- Minimum value of an array
10405 @fnindex MINVAL
10406 @cindex array, minimum value
10407 @cindex minimum value
10409 @table @asis
10410 @item @emph{Description}:
10411 Determines the minimum value of the elements in an array value, or, if
10412 the @var{DIM} argument is supplied, determines the minimum value along
10413 each row of the array in the @var{DIM} direction.  If @var{MASK} is
10414 present, only the elements for which @var{MASK} is @code{.TRUE.} are
10415 considered.  If the array has zero size, or all of the elements of
10416 @var{MASK} are @code{.FALSE.}, then the result is @code{HUGE(ARRAY)} if
10417 @var{ARRAY} is numeric, or a string of @code{CHAR(255)} characters if
10418 @var{ARRAY} is of character type.
10420 @item @emph{Standard}:
10421 Fortran 95 and later
10423 @item @emph{Class}:
10424 Transformational function
10426 @item @emph{Syntax}:
10427 @multitable @columnfractions .80
10428 @item @code{RESULT = MINVAL(ARRAY, DIM [, MASK])}
10429 @item @code{RESULT = MINVAL(ARRAY [, MASK])}
10430 @end multitable
10432 @item @emph{Arguments}:
10433 @multitable @columnfractions .15 .70
10434 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
10435 @code{REAL}.
10436 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
10437 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
10438 inclusive.  It may not be an optional dummy argument.
10439 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
10440 and conformable with @var{ARRAY}.
10441 @end multitable
10443 @item @emph{Return value}:
10444 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
10445 is a scalar.  If @var{DIM} is present, the result is an array with a
10446 rank one less than the rank of @var{ARRAY}, and a size corresponding to
10447 the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
10448 cases, the result is of the same type and kind as @var{ARRAY}.
10450 @item @emph{See also}:
10451 @ref{MIN}, @ref{MINLOC}
10453 @end table
10457 @node MOD
10458 @section @code{MOD} --- Remainder function
10459 @fnindex MOD
10460 @fnindex AMOD
10461 @fnindex DMOD
10462 @fnindex BMOD
10463 @fnindex IMOD
10464 @fnindex JMOD
10465 @fnindex KMOD
10466 @cindex remainder
10467 @cindex division, remainder
10469 @table @asis
10470 @item @emph{Description}:
10471 @code{MOD(A,P)} computes the remainder of the division of A by P@. 
10473 @item @emph{Standard}:
10474 Fortran 77 and later, has overloads that are GNU extensions
10476 @item @emph{Class}:
10477 Elemental function
10479 @item @emph{Syntax}:
10480 @code{RESULT = MOD(A, P)}
10482 @item @emph{Arguments}:
10483 @multitable @columnfractions .15 .70
10484 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}.
10485 @item @var{P} @tab Shall be a scalar of the same type and kind as @var{A} 
10486 and not equal to zero.
10487 @end multitable
10489 @item @emph{Return value}:
10490 The return value is the result of @code{A - (INT(A/P) * P)}. The type
10491 and kind of the return value is the same as that of the arguments. The
10492 returned value has the same sign as A and a magnitude less than the
10493 magnitude of P.
10495 @item @emph{Example}:
10496 @smallexample
10497 program test_mod
10498   print *, mod(17,3)
10499   print *, mod(17.5,5.5)
10500   print *, mod(17.5d0,5.5)
10501   print *, mod(17.5,5.5d0)
10503   print *, mod(-17,3)
10504   print *, mod(-17.5,5.5)
10505   print *, mod(-17.5d0,5.5)
10506   print *, mod(-17.5,5.5d0)
10508   print *, mod(17,-3)
10509   print *, mod(17.5,-5.5)
10510   print *, mod(17.5d0,-5.5)
10511   print *, mod(17.5,-5.5d0)
10512 end program test_mod
10513 @end smallexample
10515 @item @emph{Specific names}:
10516 @multitable @columnfractions .20 .20 .20 .25
10517 @item Name             @tab Arguments          @tab Return type    @tab Standard
10518 @item @code{MOD(A,P)}  @tab @code{INTEGER A,P} @tab @code{INTEGER} @tab Fortran 95 and later
10519 @item @code{AMOD(A,P)} @tab @code{REAL(4) A,P} @tab @code{REAL(4)} @tab Fortran 95 and later
10520 @item @code{DMOD(A,P)} @tab @code{REAL(8) A,P} @tab @code{REAL(8)} @tab Fortran 95 and later
10521 @item @code{BMOD(A,P)}  @tab @code{INTEGER(1) A,P} @tab @code{INTEGER(1)} @tab GNU extension
10522 @item @code{IMOD(A,P)}  @tab @code{INTEGER(2) A,P} @tab @code{INTEGER(2)} @tab GNU extension
10523 @item @code{JMOD(A,P)}  @tab @code{INTEGER(4) A,P} @tab @code{INTEGER(4)} @tab GNU extension
10524 @item @code{KMOD(A,P)}  @tab @code{INTEGER(8) A,P} @tab @code{INTEGER(8)} @tab GNU extension
10525 @end multitable
10527 @item @emph{See also}:
10528 @ref{MODULO}
10530 @end table
10534 @node MODULO
10535 @section @code{MODULO} --- Modulo function
10536 @fnindex MODULO
10537 @cindex modulo
10538 @cindex division, modulo
10540 @table @asis
10541 @item @emph{Description}:
10542 @code{MODULO(A,P)} computes the @var{A} modulo @var{P}.
10544 @item @emph{Standard}:
10545 Fortran 95 and later
10547 @item @emph{Class}:
10548 Elemental function
10550 @item @emph{Syntax}:
10551 @code{RESULT = MODULO(A, P)}
10553 @item @emph{Arguments}:
10554 @multitable @columnfractions .15 .70
10555 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}.
10556 @item @var{P} @tab Shall be a scalar of the same type and kind as @var{A}. 
10557 It shall not be zero.
10558 @end multitable
10560 @item @emph{Return value}:
10561 The type and kind of the result are those of the arguments.
10562 @table @asis
10563 @item If @var{A} and @var{P} are of type @code{INTEGER}:
10564 @code{MODULO(A,P)} has the value @var{R} such that @code{A=Q*P+R}, where
10565 @var{Q} is an integer and @var{R} is between 0 (inclusive) and @var{P}
10566 (exclusive).
10567 @item If @var{A} and @var{P} are of type @code{REAL}:
10568 @code{MODULO(A,P)} has the value of @code{A - FLOOR (A / P) * P}.
10569 @end table
10570 The returned value has the same sign as P and a magnitude less than
10571 the magnitude of P.
10573 @item @emph{Example}:
10574 @smallexample
10575 program test_modulo
10576   print *, modulo(17,3)
10577   print *, modulo(17.5,5.5)
10579   print *, modulo(-17,3)
10580   print *, modulo(-17.5,5.5)
10582   print *, modulo(17,-3)
10583   print *, modulo(17.5,-5.5)
10584 end program
10585 @end smallexample
10587 @item @emph{See also}:
10588 @ref{MOD}
10590 @end table
10594 @node MOVE_ALLOC
10595 @section @code{MOVE_ALLOC} --- Move allocation from one object to another
10596 @fnindex MOVE_ALLOC
10597 @cindex moving allocation
10598 @cindex allocation, moving
10600 @table @asis
10601 @item @emph{Description}:
10602 @code{MOVE_ALLOC(FROM, TO)} moves the allocation from @var{FROM} to
10603 @var{TO}.  @var{FROM} will become deallocated in the process.
10605 @item @emph{Standard}:
10606 Fortran 2003 and later
10608 @item @emph{Class}:
10609 Pure subroutine
10611 @item @emph{Syntax}:
10612 @code{CALL MOVE_ALLOC(FROM, TO)}
10614 @item @emph{Arguments}:
10615 @multitable @columnfractions .15 .70
10616 @item @var{FROM}  @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be
10617 of any type and kind.
10618 @item @var{TO} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be
10619 of the same type, kind and rank as @var{FROM}.
10620 @end multitable
10622 @item @emph{Return value}:
10623 None
10625 @item @emph{Example}:
10626 @smallexample
10627 program test_move_alloc
10628     integer, allocatable :: a(:), b(:)
10630     allocate(a(3))
10631     a = [ 1, 2, 3 ]
10632     call move_alloc(a, b)
10633     print *, allocated(a), allocated(b)
10634     print *, b
10635 end program test_move_alloc
10636 @end smallexample
10637 @end table
10641 @node MVBITS
10642 @section @code{MVBITS} --- Move bits from one integer to another
10643 @fnindex MVBITS
10644 @fnindex BMVBITS
10645 @fnindex IMVBITS
10646 @fnindex JMVBITS
10647 @fnindex KMVBITS
10648 @cindex bits, move
10650 @table @asis
10651 @item @emph{Description}:
10652 Moves @var{LEN} bits from positions @var{FROMPOS} through
10653 @code{FROMPOS+LEN-1} of @var{FROM} to positions @var{TOPOS} through
10654 @code{TOPOS+LEN-1} of @var{TO}. The portion of argument @var{TO} not
10655 affected by the movement of bits is unchanged. The values of
10656 @code{FROMPOS+LEN-1} and @code{TOPOS+LEN-1} must be less than
10657 @code{BIT_SIZE(FROM)}.
10659 @item @emph{Standard}:
10660 Fortran 95 and later, has overloads that are GNU extensions
10662 @item @emph{Class}:
10663 Elemental subroutine
10665 @item @emph{Syntax}:
10666 @code{CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
10668 @item @emph{Arguments}:
10669 @multitable @columnfractions .15 .70
10670 @item @var{FROM}    @tab The type shall be @code{INTEGER}.
10671 @item @var{FROMPOS} @tab The type shall be @code{INTEGER}.
10672 @item @var{LEN}     @tab The type shall be @code{INTEGER}.
10673 @item @var{TO}      @tab The type shall be @code{INTEGER}, of the
10674 same kind as @var{FROM}.
10675 @item @var{TOPOS}   @tab The type shall be @code{INTEGER}.
10676 @end multitable
10678 @item @emph{Specific names}:
10679 @multitable @columnfractions .20 .20 .20 .25
10680 @item Name            @tab Argument            @tab Return type       @tab Standard
10681 @item @code{MVBITS(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
10682 @item @code{BMVBITS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
10683 @item @code{IMVBITS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
10684 @item @code{JMVBITS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
10685 @item @code{KMVBITS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
10686 @end multitable
10688 @item @emph{See also}:
10689 @ref{IBCLR}, @ref{IBSET}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
10690 @end table
10694 @node NEAREST
10695 @section @code{NEAREST} --- Nearest representable number
10696 @fnindex NEAREST
10697 @cindex real number, nearest different
10698 @cindex floating point, nearest different
10700 @table @asis
10701 @item @emph{Description}:
10702 @code{NEAREST(X, S)} returns the processor-representable number nearest
10703 to @code{X} in the direction indicated by the sign of @code{S}.
10705 @item @emph{Standard}:
10706 Fortran 95 and later
10708 @item @emph{Class}:
10709 Elemental function
10711 @item @emph{Syntax}:
10712 @code{RESULT = NEAREST(X, S)}
10714 @item @emph{Arguments}:
10715 @multitable @columnfractions .15 .70
10716 @item @var{X} @tab Shall be of type @code{REAL}.
10717 @item @var{S} @tab Shall be of type @code{REAL} and
10718 not equal to zero.
10719 @end multitable
10721 @item @emph{Return value}:
10722 The return value is of the same type as @code{X}. If @code{S} is
10723 positive, @code{NEAREST} returns the processor-representable number
10724 greater than @code{X} and nearest to it. If @code{S} is negative,
10725 @code{NEAREST} returns the processor-representable number smaller than
10726 @code{X} and nearest to it.
10728 @item @emph{Example}:
10729 @smallexample
10730 program test_nearest
10731   real :: x, y
10732   x = nearest(42.0, 1.0)
10733   y = nearest(42.0, -1.0)
10734   write (*,"(3(G20.15))") x, y, x - y
10735 end program test_nearest
10736 @end smallexample
10737 @end table
10741 @node NEW_LINE
10742 @section @code{NEW_LINE} --- New line character
10743 @fnindex NEW_LINE
10744 @cindex newline
10745 @cindex output, newline
10747 @table @asis
10748 @item @emph{Description}:
10749 @code{NEW_LINE(C)} returns the new-line character.
10751 @item @emph{Standard}:
10752 Fortran 2003 and later
10754 @item @emph{Class}:
10755 Inquiry function
10757 @item @emph{Syntax}:
10758 @code{RESULT = NEW_LINE(C)}
10760 @item @emph{Arguments}:
10761 @multitable @columnfractions .15 .70
10762 @item @var{C}    @tab The argument shall be a scalar or array of the
10763 type @code{CHARACTER}.
10764 @end multitable
10766 @item @emph{Return value}:
10767 Returns a @var{CHARACTER} scalar of length one with the new-line character of
10768 the same kind as parameter @var{C}.
10770 @item @emph{Example}:
10771 @smallexample
10772 program newline
10773   implicit none
10774   write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'
10775 end program newline
10776 @end smallexample
10777 @end table
10781 @node NINT
10782 @section @code{NINT} --- Nearest whole number
10783 @fnindex NINT
10784 @fnindex IDNINT
10785 @cindex rounding, nearest whole number
10787 @table @asis
10788 @item @emph{Description}:
10789 @code{NINT(A)} rounds its argument to the nearest whole number.
10791 @item @emph{Standard}:
10792 Fortran 77 and later, with @var{KIND} argument Fortran 90 and later
10794 @item @emph{Class}:
10795 Elemental function
10797 @item @emph{Syntax}:
10798 @code{RESULT = NINT(A [, KIND])}
10800 @item @emph{Arguments}:
10801 @multitable @columnfractions .15 .70
10802 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
10803 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
10804 expression indicating the kind parameter of the result.
10805 @end multitable
10807 @item @emph{Return value}:
10808 Returns @var{A} with the fractional portion of its magnitude eliminated by
10809 rounding to the nearest whole number and with its sign preserved,
10810 converted to an @code{INTEGER} of the default kind.
10812 @item @emph{Example}:
10813 @smallexample
10814 program test_nint
10815   real(4) x4
10816   real(8) x8
10817   x4 = 1.234E0_4
10818   x8 = 4.321_8
10819   print *, nint(x4), idnint(x8)
10820 end program test_nint
10821 @end smallexample
10823 @item @emph{Specific names}:
10824 @multitable @columnfractions .20 .20 .20 .25
10825 @item Name             @tab Argument           @tab Return Type     @tab Standard
10826 @item @code{NINT(A)}   @tab @code{REAL(4) A}   @tab  @code{INTEGER} @tab Fortran 95 and later
10827 @item @code{IDNINT(A)} @tab @code{REAL(8) A}   @tab  @code{INTEGER} @tab Fortran 95 and later
10828 @end multitable
10830 @item @emph{See also}:
10831 @ref{CEILING}, @ref{FLOOR}
10833 @end table
10837 @node NORM2
10838 @section @code{NORM2} --- Euclidean vector norms
10839 @fnindex NORM2
10840 @cindex Euclidean vector norm
10841 @cindex L2 vector norm
10842 @cindex norm, Euclidean
10844 @table @asis
10845 @item @emph{Description}:
10846 Calculates the Euclidean vector norm (@math{L_2} norm) of
10847 of @var{ARRAY} along dimension @var{DIM}.
10849 @item @emph{Standard}:
10850 Fortran 2008 and later
10852 @item @emph{Class}:
10853 Transformational function
10855 @item @emph{Syntax}:
10856 @multitable @columnfractions .80
10857 @item @code{RESULT = NORM2(ARRAY[, DIM])}
10858 @end multitable
10860 @item @emph{Arguments}:
10861 @multitable @columnfractions .15 .70
10862 @item @var{ARRAY} @tab Shall be an array of type @code{REAL}
10863 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
10864 @code{INTEGER} with a value in the range from 1 to n, where n 
10865 equals the rank of @var{ARRAY}.
10866 @end multitable
10868 @item @emph{Return value}:
10869 The result is of the same type as @var{ARRAY}.
10871 If @var{DIM} is absent, a scalar with the square root of the sum of all
10872 elements in @var{ARRAY} squared  is returned. Otherwise, an array of
10873 rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY}, and a
10874 shape similar to that of @var{ARRAY} with dimension @var{DIM} dropped
10875 is returned.
10877 @item @emph{Example}:
10878 @smallexample
10879 PROGRAM test_sum
10880   REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]
10881   print *, NORM2(x)  ! = sqrt(55.) ~ 7.416
10882 END PROGRAM
10883 @end smallexample
10884 @end table
10888 @node NOT
10889 @section @code{NOT} --- Logical negation
10890 @fnindex NOT
10891 @fnindex BNOT
10892 @fnindex INOT
10893 @fnindex JNOT
10894 @fnindex KNOT
10895 @cindex bits, negate
10896 @cindex bitwise logical not
10897 @cindex logical not, bitwise
10899 @table @asis
10900 @item @emph{Description}:
10901 @code{NOT} returns the bitwise Boolean inverse of @var{I}.
10903 @item @emph{Standard}:
10904 Fortran 95 and later, has overloads that are GNU extensions
10906 @item @emph{Class}:
10907 Elemental function
10909 @item @emph{Syntax}:
10910 @code{RESULT = NOT(I)}
10912 @item @emph{Arguments}:
10913 @multitable @columnfractions .15 .70
10914 @item @var{I} @tab The type shall be @code{INTEGER}.
10915 @end multitable
10917 @item @emph{Return value}:
10918 The return type is @code{INTEGER}, of the same kind as the
10919 argument.
10921 @item @emph{Specific names}:
10922 @multitable @columnfractions .20 .20 .20 .25
10923 @item Name            @tab Argument            @tab Return type       @tab Standard
10924 @item @code{NOT(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
10925 @item @code{BNOT(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
10926 @item @code{INOT(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
10927 @item @code{JNOT(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
10928 @item @code{KNOT(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
10929 @end multitable
10931 @item @emph{See also}:
10932 @ref{IAND}, @ref{IEOR}, @ref{IOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}
10934 @end table
10938 @node NULL
10939 @section @code{NULL} --- Function that returns an disassociated pointer
10940 @fnindex NULL
10941 @cindex pointer, status
10942 @cindex pointer, disassociated
10944 @table @asis
10945 @item @emph{Description}:
10946 Returns a disassociated pointer.
10948 If @var{MOLD} is present, a disassociated pointer of the same type is
10949 returned, otherwise the type is determined by context.
10951 In Fortran 95, @var{MOLD} is optional. Please note that Fortran 2003
10952 includes cases where it is required.
10954 @item @emph{Standard}:
10955 Fortran 95 and later
10957 @item @emph{Class}:
10958 Transformational function
10960 @item @emph{Syntax}:
10961 @code{PTR => NULL([MOLD])}
10963 @item @emph{Arguments}:
10964 @multitable @columnfractions .15 .70
10965 @item @var{MOLD} @tab (Optional) shall be a pointer of any association
10966 status and of any type.
10967 @end multitable
10969 @item @emph{Return value}:
10970 A disassociated pointer.
10972 @item @emph{Example}:
10973 @smallexample
10974 REAL, POINTER, DIMENSION(:) :: VEC => NULL ()
10975 @end smallexample
10977 @item @emph{See also}:
10978 @ref{ASSOCIATED}
10979 @end table
10983 @node NUM_IMAGES
10984 @section @code{NUM_IMAGES} --- Function that returns the number of images
10985 @fnindex NUM_IMAGES
10986 @cindex coarray, @code{NUM_IMAGES}
10987 @cindex images, number of
10989 @table @asis
10990 @item @emph{Description}:
10991 Returns the number of images.
10993 @item @emph{Standard}:
10994 Fortran 2008 and later. With @var{DISTANCE} or @var{FAILED} argument, 
10995 Technical Specification (TS) 18508 or later
10998 @item @emph{Class}:
10999 Transformational function
11001 @item @emph{Syntax}:
11002 @code{RESULT = NUM_IMAGES(DISTANCE, FAILED)}
11004 @item @emph{Arguments}:
11005 @multitable @columnfractions .15 .70
11006 @item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer
11007 @item @var{FAILED}   @tab (optional, intent(in)) Scalar logical expression
11008 @end multitable
11010 @item @emph{Return value}:
11011 Scalar default-kind integer.  If @var{DISTANCE} is not present or has value 0,
11012 the number of images in the current team is returned. For values smaller or
11013 equal distance to the initial team, it returns the number of images index
11014 on the ancestor team which has a distance of @var{DISTANCE} from the invoking
11015 team. If @var{DISTANCE} is larger than the distance to the initial team, the
11016 number of images of the initial team is returned. If @var{FAILED} is not present
11017 the total number of images is returned; if it has the value @code{.TRUE.},
11018 the number of failed images is returned, otherwise, the number of images which
11019 do have not the failed status.
11021 @item @emph{Example}:
11022 @smallexample
11023 INTEGER :: value[*]
11024 INTEGER :: i
11025 value = THIS_IMAGE()
11026 SYNC ALL
11027 IF (THIS_IMAGE() == 1) THEN
11028   DO i = 1, NUM_IMAGES()
11029     WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
11030   END DO
11031 END IF
11032 @end smallexample
11034 @item @emph{See also}:
11035 @ref{THIS_IMAGE}, @ref{IMAGE_INDEX}
11036 @end table
11040 @node OR
11041 @section @code{OR} --- Bitwise logical OR
11042 @fnindex OR
11043 @cindex bitwise logical or
11044 @cindex logical or, bitwise
11046 @table @asis
11047 @item @emph{Description}:
11048 Bitwise logical @code{OR}.
11050 This intrinsic routine is provided for backwards compatibility with 
11051 GNU Fortran 77.  For integer arguments, programmers should consider
11052 the use of the @ref{IOR} intrinsic defined by the Fortran standard.
11054 @item @emph{Standard}:
11055 GNU extension
11057 @item @emph{Class}:
11058 Function
11060 @item @emph{Syntax}:
11061 @code{RESULT = OR(I, J)}
11063 @item @emph{Arguments}:
11064 @multitable @columnfractions .15 .70
11065 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
11066 type or a scalar @code{LOGICAL} type.
11067 @item @var{J} @tab The type shall be the same as the type of @var{J}.
11068 @end multitable
11070 @item @emph{Return value}:
11071 The return type is either a scalar @code{INTEGER} or a scalar
11072 @code{LOGICAL}.  If the kind type parameters differ, then the
11073 smaller kind type is implicitly converted to larger kind, and the 
11074 return has the larger kind.
11076 @item @emph{Example}:
11077 @smallexample
11078 PROGRAM test_or
11079   LOGICAL :: T = .TRUE., F = .FALSE.
11080   INTEGER :: a, b
11081   DATA a / Z'F' /, b / Z'3' /
11083   WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)
11084   WRITE (*,*) OR(a, b)
11085 END PROGRAM
11086 @end smallexample
11088 @item @emph{See also}:
11089 Fortran 95 elemental function: @ref{IOR}
11090 @end table
11094 @node PACK
11095 @section @code{PACK} --- Pack an array into an array of rank one
11096 @fnindex PACK
11097 @cindex array, packing
11098 @cindex array, reduce dimension
11099 @cindex array, gather elements
11101 @table @asis
11102 @item @emph{Description}:
11103 Stores the elements of @var{ARRAY} in an array of rank one.
11105 The beginning of the resulting array is made up of elements whose @var{MASK} 
11106 equals @code{TRUE}. Afterwards, positions are filled with elements taken from
11107 @var{VECTOR}.
11109 @item @emph{Standard}:
11110 Fortran 95 and later
11112 @item @emph{Class}:
11113 Transformational function
11115 @item @emph{Syntax}:
11116 @code{RESULT = PACK(ARRAY, MASK[,VECTOR])}
11118 @item @emph{Arguments}:
11119 @multitable @columnfractions .15 .70
11120 @item @var{ARRAY}  @tab Shall be an array of any type.
11121 @item @var{MASK}   @tab Shall be an array of type @code{LOGICAL} and 
11122 of the same size as @var{ARRAY}. Alternatively, it may be a @code{LOGICAL} 
11123 scalar.
11124 @item @var{VECTOR} @tab (Optional) shall be an array of the same type 
11125 as @var{ARRAY} and of rank one. If present, the number of elements in 
11126 @var{VECTOR} shall be equal to or greater than the number of true elements 
11127 in @var{MASK}. If @var{MASK} is scalar, the number of elements in 
11128 @var{VECTOR} shall be equal to or greater than the number of elements in
11129 @var{ARRAY}.
11130 @end multitable
11132 @item @emph{Return value}:
11133 The result is an array of rank one and the same type as that of @var{ARRAY}.
11134 If @var{VECTOR} is present, the result size is that of @var{VECTOR}, the
11135 number of @code{TRUE} values in @var{MASK} otherwise.
11137 @item @emph{Example}:
11138 Gathering nonzero elements from an array:
11139 @smallexample
11140 PROGRAM test_pack_1
11141   INTEGER :: m(6)
11142   m = (/ 1, 0, 0, 0, 5, 0 /)
11143   WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0)  ! "1 5"
11144 END PROGRAM
11145 @end smallexample
11147 Gathering nonzero elements from an array and appending elements from @var{VECTOR}:
11148 @smallexample
11149 PROGRAM test_pack_2
11150   INTEGER :: m(4)
11151   m = (/ 1, 0, 0, 2 /)
11152   WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /))  ! "1 2 3 4"
11153 END PROGRAM
11154 @end smallexample
11156 @item @emph{See also}:
11157 @ref{UNPACK}
11158 @end table
11162 @node PARITY
11163 @section @code{PARITY} --- Reduction with exclusive OR
11164 @fnindex PARITY
11165 @cindex Parity
11166 @cindex Reduction, XOR
11167 @cindex XOR reduction
11169 @table @asis
11170 @item @emph{Description}:
11171 Calculates the parity, i.e. the reduction using @code{.XOR.},
11172 of @var{MASK} along dimension @var{DIM}.
11174 @item @emph{Standard}:
11175 Fortran 2008 and later
11177 @item @emph{Class}:
11178 Transformational function
11180 @item @emph{Syntax}:
11181 @multitable @columnfractions .80
11182 @item @code{RESULT = PARITY(MASK[, DIM])}
11183 @end multitable
11185 @item @emph{Arguments}:
11186 @multitable @columnfractions .15 .70
11187 @item @var{LOGICAL} @tab Shall be an array of type @code{LOGICAL}
11188 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
11189 @code{INTEGER} with a value in the range from 1 to n, where n 
11190 equals the rank of @var{MASK}.
11191 @end multitable
11193 @item @emph{Return value}:
11194 The result is of the same type as @var{MASK}.
11196 If @var{DIM} is absent, a scalar with the parity of all elements in
11197 @var{MASK} is returned, i.e. true if an odd number of elements is
11198 @code{.true.} and false otherwise.  If @var{DIM} is present, an array
11199 of rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY},
11200 and a shape similar to that of @var{MASK} with dimension @var{DIM}
11201 dropped is returned.
11203 @item @emph{Example}:
11204 @smallexample
11205 PROGRAM test_sum
11206   LOGICAL :: x(2) = [ .true., .false. ]
11207   print *, PARITY(x) ! prints "T" (true).
11208 END PROGRAM
11209 @end smallexample
11210 @end table
11214 @node PERROR
11215 @section @code{PERROR} --- Print system error message
11216 @fnindex PERROR
11217 @cindex system, error handling
11219 @table @asis
11220 @item @emph{Description}:
11221 Prints (on the C @code{stderr} stream) a newline-terminated error
11222 message corresponding to the last system error. This is prefixed by
11223 @var{STRING}, a colon and a space. See @code{perror(3)}.
11225 @item @emph{Standard}:
11226 GNU extension
11228 @item @emph{Class}:
11229 Subroutine
11231 @item @emph{Syntax}:
11232 @code{CALL PERROR(STRING)}
11234 @item @emph{Arguments}:
11235 @multitable @columnfractions .15 .70
11236 @item @var{STRING} @tab A scalar of type @code{CHARACTER} and of the
11237 default kind.
11238 @end multitable
11240 @item @emph{See also}:
11241 @ref{IERRNO}
11242 @end table
11246 @node POPCNT
11247 @section @code{POPCNT} --- Number of bits set
11248 @fnindex POPCNT
11249 @cindex binary representation
11250 @cindex bits set
11252 @table @asis
11253 @item @emph{Description}:
11254 @code{POPCNT(I)} returns the number of bits set ('1' bits) in the binary
11255 representation of @code{I}.
11257 @item @emph{Standard}:
11258 Fortran 2008 and later
11260 @item @emph{Class}:
11261 Elemental function
11263 @item @emph{Syntax}:
11264 @code{RESULT = POPCNT(I)}
11266 @item @emph{Arguments}:
11267 @multitable @columnfractions .15 .70
11268 @item @var{I} @tab Shall be of type @code{INTEGER}.
11269 @end multitable
11271 @item @emph{Return value}:
11272 The return value is of type @code{INTEGER} and of the default integer
11273 kind.
11275 @item @emph{See also}:
11276 @ref{POPPAR}, @ref{LEADZ}, @ref{TRAILZ}
11278 @item @emph{Example}:
11279 @smallexample
11280 program test_population
11281   print *, popcnt(127),       poppar(127)
11282   print *, popcnt(huge(0_4)), poppar(huge(0_4))
11283   print *, popcnt(huge(0_8)), poppar(huge(0_8))
11284 end program test_population
11285 @end smallexample
11286 @end table
11289 @node POPPAR
11290 @section @code{POPPAR} --- Parity of the number of bits set
11291 @fnindex POPPAR
11292 @cindex binary representation
11293 @cindex parity
11295 @table @asis
11296 @item @emph{Description}:
11297 @code{POPPAR(I)} returns parity of the integer @code{I}, i.e. the parity
11298 of the number of bits set ('1' bits) in the binary representation of
11299 @code{I}. It is equal to 0 if @code{I} has an even number of bits set,
11300 and 1 for an odd number of '1' bits.
11302 @item @emph{Standard}:
11303 Fortran 2008 and later
11305 @item @emph{Class}:
11306 Elemental function
11308 @item @emph{Syntax}:
11309 @code{RESULT = POPPAR(I)}
11311 @item @emph{Arguments}:
11312 @multitable @columnfractions .15 .70
11313 @item @var{I} @tab Shall be of type @code{INTEGER}.
11314 @end multitable
11316 @item @emph{Return value}:
11317 The return value is of type @code{INTEGER} and of the default integer
11318 kind.
11320 @item @emph{See also}:
11321 @ref{POPCNT}, @ref{LEADZ}, @ref{TRAILZ}
11323 @item @emph{Example}:
11324 @smallexample
11325 program test_population
11326   print *, popcnt(127),       poppar(127)
11327   print *, popcnt(huge(0_4)), poppar(huge(0_4))
11328   print *, popcnt(huge(0_8)), poppar(huge(0_8))
11329 end program test_population
11330 @end smallexample
11331 @end table
11335 @node PRECISION
11336 @section @code{PRECISION} --- Decimal precision of a real kind
11337 @fnindex PRECISION
11338 @cindex model representation, precision
11340 @table @asis
11341 @item @emph{Description}:
11342 @code{PRECISION(X)} returns the decimal precision in the model of the
11343 type of @code{X}.
11345 @item @emph{Standard}:
11346 Fortran 95 and later
11348 @item @emph{Class}:
11349 Inquiry function
11351 @item @emph{Syntax}:
11352 @code{RESULT = PRECISION(X)}
11354 @item @emph{Arguments}:
11355 @multitable @columnfractions .15 .70
11356 @item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}.
11357 @end multitable
11359 @item @emph{Return value}:
11360 The return value is of type @code{INTEGER} and of the default integer
11361 kind.
11363 @item @emph{See also}:
11364 @ref{SELECTED_REAL_KIND}, @ref{RANGE}
11366 @item @emph{Example}:
11367 @smallexample
11368 program prec_and_range
11369   real(kind=4) :: x(2)
11370   complex(kind=8) :: y
11372   print *, precision(x), range(x)
11373   print *, precision(y), range(y)
11374 end program prec_and_range
11375 @end smallexample
11376 @end table
11380 @node PRESENT
11381 @section @code{PRESENT} --- Determine whether an optional dummy argument is specified
11382 @fnindex PRESENT
11384 @table @asis
11385 @item @emph{Description}:
11386 Determines whether an optional dummy argument is present.
11388 @item @emph{Standard}:
11389 Fortran 95 and later
11391 @item @emph{Class}:
11392 Inquiry function
11394 @item @emph{Syntax}:
11395 @code{RESULT = PRESENT(A)}
11397 @item @emph{Arguments}:
11398 @multitable @columnfractions .15 .70
11399 @item @var{A} @tab May be of any type and may be a pointer, scalar or array
11400 value, or a dummy procedure. It shall be the name of an optional dummy argument
11401 accessible within the current subroutine or function.
11402 @end multitable
11404 @item @emph{Return value}:
11405 Returns either @code{TRUE} if the optional argument @var{A} is present, or
11406 @code{FALSE} otherwise.
11408 @item @emph{Example}:
11409 @smallexample
11410 PROGRAM test_present
11411   WRITE(*,*) f(), f(42)      ! "F T"
11412 CONTAINS
11413   LOGICAL FUNCTION f(x)
11414     INTEGER, INTENT(IN), OPTIONAL :: x
11415     f = PRESENT(x)
11416   END FUNCTION
11417 END PROGRAM
11418 @end smallexample
11419 @end table
11423 @node PRODUCT
11424 @section @code{PRODUCT} --- Product of array elements
11425 @fnindex PRODUCT
11426 @cindex array, product
11427 @cindex array, multiply elements
11428 @cindex array, conditionally multiply elements
11429 @cindex multiply array elements
11431 @table @asis
11432 @item @emph{Description}:
11433 Multiplies the elements of @var{ARRAY} along dimension @var{DIM} if
11434 the corresponding element in @var{MASK} is @code{TRUE}.
11436 @item @emph{Standard}:
11437 Fortran 95 and later
11439 @item @emph{Class}:
11440 Transformational function
11442 @item @emph{Syntax}:
11443 @multitable @columnfractions .80
11444 @item @code{RESULT = PRODUCT(ARRAY[, MASK])}
11445 @item @code{RESULT = PRODUCT(ARRAY, DIM[, MASK])}
11446 @end multitable
11448 @item @emph{Arguments}:
11449 @multitable @columnfractions .15 .70
11450 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, 
11451 @code{REAL} or @code{COMPLEX}.
11452 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
11453 @code{INTEGER} with a value in the range from 1 to n, where n 
11454 equals the rank of @var{ARRAY}.
11455 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
11456 and either be a scalar or an array of the same shape as @var{ARRAY}.
11457 @end multitable
11459 @item @emph{Return value}:
11460 The result is of the same type as @var{ARRAY}.
11462 If @var{DIM} is absent, a scalar with the product of all elements in 
11463 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals 
11464 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with 
11465 dimension @var{DIM} dropped is returned.
11468 @item @emph{Example}:
11469 @smallexample
11470 PROGRAM test_product
11471   INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
11472   print *, PRODUCT(x)                    ! all elements, product = 120
11473   print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15
11474 END PROGRAM
11475 @end smallexample
11477 @item @emph{See also}:
11478 @ref{SUM}
11479 @end table
11483 @node RADIX
11484 @section @code{RADIX} --- Base of a model number
11485 @fnindex RADIX
11486 @cindex model representation, base
11487 @cindex model representation, radix
11489 @table @asis
11490 @item @emph{Description}:
11491 @code{RADIX(X)} returns the base of the model representing the entity @var{X}.
11493 @item @emph{Standard}:
11494 Fortran 95 and later
11496 @item @emph{Class}:
11497 Inquiry function
11499 @item @emph{Syntax}:
11500 @code{RESULT = RADIX(X)}
11502 @item @emph{Arguments}:
11503 @multitable @columnfractions .15 .70
11504 @item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
11505 @end multitable
11507 @item @emph{Return value}:
11508 The return value is a scalar of type @code{INTEGER} and of the default
11509 integer kind.
11511 @item @emph{See also}:
11512 @ref{SELECTED_REAL_KIND}
11514 @item @emph{Example}:
11515 @smallexample
11516 program test_radix
11517   print *, "The radix for the default integer kind is", radix(0)
11518   print *, "The radix for the default real kind is", radix(0.0)
11519 end program test_radix
11520 @end smallexample
11522 @end table
11526 @node RAN
11527 @section @code{RAN} --- Real pseudo-random number
11528 @fnindex RAN
11529 @cindex random number generation
11531 @table @asis
11532 @item @emph{Description}:
11533 For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is
11534 provided as an alias for @code{RAND}.  See @ref{RAND} for complete
11535 documentation.
11537 @item @emph{Standard}:
11538 GNU extension
11540 @item @emph{Class}:
11541 Function
11543 @item @emph{See also}:
11544 @ref{RAND}, @ref{RANDOM_NUMBER}
11545 @end table
11549 @node RAND
11550 @section @code{RAND} --- Real pseudo-random number
11551 @fnindex RAND
11552 @cindex random number generation
11554 @table @asis
11555 @item @emph{Description}:
11556 @code{RAND(FLAG)} returns a pseudo-random number from a uniform
11557 distribution between 0 and 1. If @var{FLAG} is 0, the next number
11558 in the current sequence is returned; if @var{FLAG} is 1, the generator
11559 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
11560 it is used as a new seed with @code{SRAND}.
11562 This intrinsic routine is provided for backwards compatibility with
11563 GNU Fortran 77. It implements a simple modulo generator as provided 
11564 by @command{g77}. For new code, one should consider the use of 
11565 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
11567 @item @emph{Standard}:
11568 GNU extension
11570 @item @emph{Class}:
11571 Function
11573 @item @emph{Syntax}:
11574 @code{RESULT = RAND(I)}
11576 @item @emph{Arguments}:
11577 @multitable @columnfractions .15 .70
11578 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
11579 @end multitable
11581 @item @emph{Return value}:
11582 The return value is of @code{REAL} type and the default kind.
11584 @item @emph{Example}:
11585 @smallexample
11586 program test_rand
11587   integer,parameter :: seed = 86456
11588   
11589   call srand(seed)
11590   print *, rand(), rand(), rand(), rand()
11591   print *, rand(seed), rand(), rand(), rand()
11592 end program test_rand
11593 @end smallexample
11595 @item @emph{See also}:
11596 @ref{SRAND}, @ref{RANDOM_NUMBER}
11598 @end table
11602 @node RANDOM_NUMBER
11603 @section @code{RANDOM_NUMBER} --- Pseudo-random number
11604 @fnindex RANDOM_NUMBER
11605 @cindex random number generation
11607 @table @asis
11608 @item @emph{Description}:
11609 Returns a single pseudorandom number or an array of pseudorandom numbers
11610 from the uniform distribution over the range @math{ 0 \leq x < 1}.
11612 The runtime-library implements the xorshift1024* random number
11613 generator (RNG). This generator has a period of @math{2^{1024} - 1},
11614 and when using multiple threads up to @math{2^{512}} threads can each
11615 generate @math{2^{512}} random numbers before any aliasing occurs.
11617 Note that in a multi-threaded program (e.g. using OpenMP directives),
11618 each thread will have its own random number state. For details of the
11619 seeding procedure, see the documentation for the @code{RANDOM_SEED}
11620 intrinsic.
11623 @item @emph{Standard}:
11624 Fortran 95 and later
11626 @item @emph{Class}:
11627 Subroutine
11629 @item @emph{Syntax}:
11630 @code{RANDOM_NUMBER(HARVEST)}
11632 @item @emph{Arguments}:
11633 @multitable @columnfractions .15 .70
11634 @item @var{HARVEST} @tab Shall be a scalar or an array of type @code{REAL}.
11635 @end multitable
11637 @item @emph{Example}:
11638 @smallexample
11639 program test_random_number
11640   REAL :: r(5,5)
11641   CALL RANDOM_NUMBER(r)
11642 end program
11643 @end smallexample
11645 @item @emph{See also}:
11646 @ref{RANDOM_SEED}
11647 @end table
11651 @node RANDOM_SEED
11652 @section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence
11653 @fnindex RANDOM_SEED
11654 @cindex random number generation, seeding
11655 @cindex seeding a random number generator
11657 @table @asis
11658 @item @emph{Description}:
11659 Restarts or queries the state of the pseudorandom number generator used by 
11660 @code{RANDOM_NUMBER}.
11662 If @code{RANDOM_SEED} is called without arguments, it is seeded with
11663 random data retrieved from the operating system.
11665 As an extension to the Fortran standard, the GFortran
11666 @code{RANDOM_NUMBER} supports multiple threads. Each thread in a
11667 multi-threaded program has its own seed.  When @code{RANDOM_SEED} is
11668 called either without arguments or with the @var{PUT} argument, the
11669 given seed is copied into a master seed as well as the seed of the
11670 current thread. When a new thread uses @code{RANDOM_NUMBER} for the
11671 first time, the seed is copied from the master seed, and forwarded
11672 @math{N * 2^{512}} steps to guarantee that the random stream does not
11673 alias any other stream in the system, where @var{N} is the number of
11674 threads that have used @code{RANDOM_NUMBER} so far during the program
11675 execution.
11677 @item @emph{Standard}:
11678 Fortran 95 and later
11680 @item @emph{Class}:
11681 Subroutine
11683 @item @emph{Syntax}:
11684 @code{CALL RANDOM_SEED([SIZE, PUT, GET])}
11686 @item @emph{Arguments}:
11687 @multitable @columnfractions .15 .70
11688 @item @var{SIZE} @tab (Optional) Shall be a scalar and of type default 
11689 @code{INTEGER}, with @code{INTENT(OUT)}. It specifies the minimum size 
11690 of the arrays used with the @var{PUT} and @var{GET} arguments.
11691 @item @var{PUT}  @tab (Optional) Shall be an array of type default 
11692 @code{INTEGER} and rank one. It is @code{INTENT(IN)} and the size of 
11693 the array must be larger than or equal to the number returned by the 
11694 @var{SIZE} argument.
11695 @item @var{GET}  @tab (Optional) Shall be an array of type default 
11696 @code{INTEGER} and rank one. It is @code{INTENT(OUT)} and the size 
11697 of the array must be larger than or equal to the number returned by 
11698 the @var{SIZE} argument.
11699 @end multitable
11701 @item @emph{Example}:
11702 @smallexample
11703 program test_random_seed
11704   implicit none
11705   integer, allocatable :: seed(:)
11706   integer :: n
11708   call random_seed(size = n)
11709   allocate(seed(n))
11710   call random_seed(get=seed)
11711   write (*, *) seed
11712 end program test_random_seed
11713 @end smallexample
11715 @item @emph{See also}:
11716 @ref{RANDOM_NUMBER}
11717 @end table
11721 @node RANGE
11722 @section @code{RANGE} --- Decimal exponent range
11723 @fnindex RANGE
11724 @cindex model representation, range
11726 @table @asis
11727 @item @emph{Description}:
11728 @code{RANGE(X)} returns the decimal exponent range in the model of the
11729 type of @code{X}.
11731 @item @emph{Standard}:
11732 Fortran 95 and later
11734 @item @emph{Class}:
11735 Inquiry function
11737 @item @emph{Syntax}:
11738 @code{RESULT = RANGE(X)}
11740 @item @emph{Arguments}:
11741 @multitable @columnfractions .15 .70
11742 @item @var{X} @tab Shall be of type @code{INTEGER}, @code{REAL}
11743 or @code{COMPLEX}.
11744 @end multitable
11746 @item @emph{Return value}:
11747 The return value is of type @code{INTEGER} and of the default integer
11748 kind.
11750 @item @emph{See also}:
11751 @ref{SELECTED_REAL_KIND}, @ref{PRECISION}
11753 @item @emph{Example}:
11754 See @code{PRECISION} for an example.
11755 @end table
11759 @node RANK
11760 @section @code{RANK} --- Rank of a data object
11761 @fnindex RANK
11762 @cindex rank
11764 @table @asis
11765 @item @emph{Description}:
11766 @code{RANK(A)} returns the rank of a scalar or array data object.
11768 @item @emph{Standard}:
11769 Technical Specification (TS) 29113
11771 @item @emph{Class}:
11772 Inquiry function
11774 @item @emph{Syntax}:
11775 @code{RESULT = RANK(A)}
11777 @item @emph{Arguments}:
11778 @multitable @columnfractions .15 .70
11779 @item @var{A} @tab can be of any type
11780 @end multitable
11782 @item @emph{Return value}:
11783 The return value is of type @code{INTEGER} and of the default integer
11784 kind. For arrays, their rank is returned; for scalars zero is returned.
11786 @item @emph{Example}:
11787 @smallexample
11788 program test_rank
11789   integer :: a
11790   real, allocatable :: b(:,:)
11792   print *, rank(a), rank(b) ! Prints:  0  2
11793 end program test_rank
11794 @end smallexample
11796 @end table
11800 @node REAL
11801 @section @code{REAL} --- Convert to real type 
11802 @fnindex REAL
11803 @fnindex REALPART
11804 @fnindex FLOAT
11805 @fnindex DFLOAT
11806 @fnindex FLOATI
11807 @fnindex FLOATJ
11808 @fnindex FLOATK
11809 @fnindex SNGL
11810 @cindex conversion, to real
11811 @cindex complex numbers, real part
11813 @table @asis
11814 @item @emph{Description}:
11815 @code{REAL(A [, KIND])} converts its argument @var{A} to a real type.  The
11816 @code{REALPART} function is provided for compatibility with @command{g77},
11817 and its use is strongly discouraged.
11819 @item @emph{Standard}:
11820 Fortran 77 and later
11822 @item @emph{Class}:
11823 Elemental function
11825 @item @emph{Syntax}:
11826 @multitable @columnfractions .80
11827 @item @code{RESULT = REAL(A [, KIND])}
11828 @item @code{RESULT = REALPART(Z)}
11829 @end multitable
11831 @item @emph{Arguments}:
11832 @multitable @columnfractions .15 .70
11833 @item @var{A}    @tab Shall be @code{INTEGER}, @code{REAL}, or
11834 @code{COMPLEX}.
11835 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
11836 expression indicating the kind parameter of the result.
11837 @end multitable
11839 @item @emph{Return value}:
11840 These functions return a @code{REAL} variable or array under
11841 the following rules: 
11843 @table @asis
11844 @item (A)
11845 @code{REAL(A)} is converted to a default real type if @var{A} is an 
11846 integer or real variable.
11847 @item (B)
11848 @code{REAL(A)} is converted to a real type with the kind type parameter
11849 of @var{A} if @var{A} is a complex variable.
11850 @item (C)
11851 @code{REAL(A, KIND)} is converted to a real type with kind type
11852 parameter @var{KIND} if @var{A} is a complex, integer, or real
11853 variable.
11854 @end table
11856 @item @emph{Example}:
11857 @smallexample
11858 program test_real
11859   complex :: x = (1.0, 2.0)
11860   print *, real(x), real(x,8), realpart(x)
11861 end program test_real
11862 @end smallexample
11864 @item @emph{Specific names}:
11865 @multitable @columnfractions .20 .20 .20 .25
11866 @item Name             @tab Argument           @tab Return type     @tab Standard
11867 @item @code{FLOAT(A)}  @tab @code{INTEGER(4)}  @tab @code{REAL(4)}  @tab Fortran 77 and later
11868 @item @code{DFLOAT(A)} @tab @code{INTEGER(4)}  @tab @code{REAL(8)}  @tab GNU extension
11869 @item @code{FLOATI(A)} @tab @code{INTEGER(2)}  @tab @code{REAL(4)}  @tab GNU extension
11870 @item @code{FLOATJ(A)} @tab @code{INTEGER(4)}  @tab @code{REAL(4)}  @tab GNU extension
11871 @item @code{FLOATK(A)} @tab @code{INTEGER(8)}  @tab @code{REAL(4)}  @tab GNU extension
11872 @item @code{SNGL(A)}   @tab @code{INTEGER(8)}  @tab @code{REAL(4)}  @tab Fortran 77 and later
11873 @end multitable
11876 @item @emph{See also}:
11877 @ref{DBLE}
11879 @end table
11883 @node RENAME
11884 @section @code{RENAME} --- Rename a file
11885 @fnindex RENAME
11886 @cindex file system, rename file
11888 @table @asis
11889 @item @emph{Description}:
11890 Renames a file from file @var{PATH1} to @var{PATH2}. A null
11891 character (@code{CHAR(0)}) can be used to mark the end of the names in
11892 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
11893 names are ignored.  If the @var{STATUS} argument is supplied, it
11894 contains 0 on success or a nonzero error code upon return; see
11895 @code{rename(2)}.
11897 This intrinsic is provided in both subroutine and function forms;
11898 however, only one form can be used in any given program unit.
11900 @item @emph{Standard}:
11901 GNU extension
11903 @item @emph{Class}:
11904 Subroutine, function
11906 @item @emph{Syntax}:
11907 @multitable @columnfractions .80
11908 @item @code{CALL RENAME(PATH1, PATH2 [, STATUS])}
11909 @item @code{STATUS = RENAME(PATH1, PATH2)}
11910 @end multitable
11912 @item @emph{Arguments}:
11913 @multitable @columnfractions .15 .70
11914 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
11915 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
11916 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
11917 @end multitable
11919 @item @emph{See also}:
11920 @ref{LINK}
11922 @end table
11926 @node REPEAT
11927 @section @code{REPEAT} --- Repeated string concatenation 
11928 @fnindex REPEAT
11929 @cindex string, repeat
11930 @cindex string, concatenate
11932 @table @asis
11933 @item @emph{Description}:
11934 Concatenates @var{NCOPIES} copies of a string.
11936 @item @emph{Standard}:
11937 Fortran 95 and later
11939 @item @emph{Class}:
11940 Transformational function
11942 @item @emph{Syntax}:
11943 @code{RESULT = REPEAT(STRING, NCOPIES)}
11945 @item @emph{Arguments}:
11946 @multitable @columnfractions .15 .70
11947 @item @var{STRING}  @tab Shall be scalar and of type @code{CHARACTER}.
11948 @item @var{NCOPIES} @tab Shall be scalar and of type @code{INTEGER}.
11949 @end multitable
11951 @item @emph{Return value}:
11952 A new scalar of type @code{CHARACTER} built up from @var{NCOPIES} copies 
11953 of @var{STRING}.
11955 @item @emph{Example}:
11956 @smallexample
11957 program test_repeat
11958   write(*,*) repeat("x", 5)   ! "xxxxx"
11959 end program
11960 @end smallexample
11961 @end table
11965 @node RESHAPE
11966 @section @code{RESHAPE} --- Function to reshape an array
11967 @fnindex RESHAPE
11968 @cindex array, change dimensions
11969 @cindex array, transmogrify
11971 @table @asis
11972 @item @emph{Description}:
11973 Reshapes @var{SOURCE} to correspond to @var{SHAPE}. If necessary,
11974 the new array may be padded with elements from @var{PAD} or permuted
11975 as defined by @var{ORDER}.
11977 @item @emph{Standard}:
11978 Fortran 95 and later
11980 @item @emph{Class}:
11981 Transformational function
11983 @item @emph{Syntax}:
11984 @code{RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])}
11986 @item @emph{Arguments}:
11987 @multitable @columnfractions .15 .70
11988 @item @var{SOURCE} @tab Shall be an array of any type.
11989 @item @var{SHAPE}  @tab Shall be of type @code{INTEGER} and an 
11990 array of rank one. Its values must be positive or zero.
11991 @item @var{PAD}    @tab (Optional) shall be an array of the same 
11992 type as @var{SOURCE}.
11993 @item @var{ORDER}  @tab (Optional) shall be of type @code{INTEGER}
11994 and an array of the same shape as @var{SHAPE}. Its values shall
11995 be a permutation of the numbers from 1 to n, where n is the size of 
11996 @var{SHAPE}. If @var{ORDER} is absent, the natural ordering shall
11997 be assumed.
11998 @end multitable
12000 @item @emph{Return value}:
12001 The result is an array of shape @var{SHAPE} with the same type as 
12002 @var{SOURCE}. 
12004 @item @emph{Example}:
12005 @smallexample
12006 PROGRAM test_reshape
12007   INTEGER, DIMENSION(4) :: x
12008   WRITE(*,*) SHAPE(x)                       ! prints "4"
12009   WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/)))    ! prints "2 2"
12010 END PROGRAM
12011 @end smallexample
12013 @item @emph{See also}:
12014 @ref{SHAPE}
12015 @end table
12019 @node RRSPACING
12020 @section @code{RRSPACING} --- Reciprocal of the relative spacing
12021 @fnindex RRSPACING
12022 @cindex real number, relative spacing
12023 @cindex floating point, relative spacing
12026 @table @asis
12027 @item @emph{Description}:
12028 @code{RRSPACING(X)} returns the  reciprocal of the relative spacing of
12029 model numbers near @var{X}.
12031 @item @emph{Standard}:
12032 Fortran 95 and later
12034 @item @emph{Class}:
12035 Elemental function
12037 @item @emph{Syntax}:
12038 @code{RESULT = RRSPACING(X)}
12040 @item @emph{Arguments}:
12041 @multitable @columnfractions .15 .70
12042 @item @var{X} @tab Shall be of type @code{REAL}.
12043 @end multitable
12045 @item @emph{Return value}:
12046 The return value is of the same type and kind as @var{X}.
12047 The value returned is equal to
12048 @code{ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)}.
12050 @item @emph{See also}:
12051 @ref{SPACING}
12052 @end table
12056 @node RSHIFT
12057 @section @code{RSHIFT} --- Right shift bits
12058 @fnindex RSHIFT
12059 @cindex bits, shift right
12061 @table @asis
12062 @item @emph{Description}:
12063 @code{RSHIFT} returns a value corresponding to @var{I} with all of the
12064 bits shifted right by @var{SHIFT} places.  If the absolute value of
12065 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
12066 Bits shifted out from the right end are lost. The fill is arithmetic: the
12067 bits shifted in from the left end are equal to the leftmost bit, which in
12068 two's complement representation is the sign bit.
12070 This function has been superseded by the @code{SHIFTA} intrinsic, which
12071 is standard in Fortran 2008 and later.
12073 @item @emph{Standard}:
12074 GNU extension
12076 @item @emph{Class}:
12077 Elemental function
12079 @item @emph{Syntax}:
12080 @code{RESULT = RSHIFT(I, SHIFT)}
12082 @item @emph{Arguments}:
12083 @multitable @columnfractions .15 .70
12084 @item @var{I} @tab The type shall be @code{INTEGER}.
12085 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
12086 @end multitable
12088 @item @emph{Return value}:
12089 The return value is of type @code{INTEGER} and of the same kind as
12090 @var{I}.
12092 @item @emph{See also}:
12093 @ref{ISHFT}, @ref{ISHFTC}, @ref{LSHIFT}, @ref{SHIFTA}, @ref{SHIFTR},
12094 @ref{SHIFTL}
12096 @end table
12100 @node SAME_TYPE_AS
12101 @section @code{SAME_TYPE_AS} ---  Query dynamic types for equality
12102 @fnindex SAME_TYPE_AS
12104 @table @asis
12105 @item @emph{Description}:
12106 Query dynamic types for equality.
12108 @item @emph{Standard}:
12109 Fortran 2003 and later
12111 @item @emph{Class}:
12112 Inquiry function
12114 @item @emph{Syntax}:
12115 @code{RESULT = SAME_TYPE_AS(A, B)}
12117 @item @emph{Arguments}:
12118 @multitable @columnfractions .15 .70
12119 @item @var{A} @tab Shall be an object of extensible declared type or
12120 unlimited polymorphic.
12121 @item @var{B} @tab Shall be an object of extensible declared type or
12122 unlimited polymorphic.
12123 @end multitable
12125 @item @emph{Return value}:
12126 The return value is a scalar of type default logical. It is true if and
12127 only if the dynamic type of A is the same as the dynamic type of B.
12129 @item @emph{See also}:
12130 @ref{EXTENDS_TYPE_OF}
12132 @end table
12136 @node SCALE
12137 @section @code{SCALE} --- Scale a real value
12138 @fnindex SCALE
12139 @cindex real number, scale
12140 @cindex floating point, scale
12142 @table @asis
12143 @item @emph{Description}:
12144 @code{SCALE(X,I)} returns @code{X * RADIX(X)**I}.
12146 @item @emph{Standard}:
12147 Fortran 95 and later
12149 @item @emph{Class}:
12150 Elemental function
12152 @item @emph{Syntax}:
12153 @code{RESULT = SCALE(X, I)}
12155 @item @emph{Arguments}:
12156 @multitable @columnfractions .15 .70
12157 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
12158 @item @var{I} @tab The type of the argument shall be a @code{INTEGER}.
12159 @end multitable
12161 @item @emph{Return value}:
12162 The return value is of the same type and kind as @var{X}.
12163 Its value is @code{X * RADIX(X)**I}.
12165 @item @emph{Example}:
12166 @smallexample
12167 program test_scale
12168   real :: x = 178.1387e-4
12169   integer :: i = 5
12170   print *, scale(x,i), x*radix(x)**i
12171 end program test_scale
12172 @end smallexample
12174 @end table
12178 @node SCAN
12179 @section @code{SCAN} --- Scan a string for the presence of a set of characters
12180 @fnindex SCAN
12181 @cindex string, find subset
12183 @table @asis
12184 @item @emph{Description}:
12185 Scans a @var{STRING} for any of the characters in a @var{SET} 
12186 of characters.
12188 If @var{BACK} is either absent or equals @code{FALSE}, this function
12189 returns the position of the leftmost character of @var{STRING} that is
12190 in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position
12191 is returned. If no character of @var{SET} is found in @var{STRING}, the 
12192 result is zero.
12194 @item @emph{Standard}:
12195 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
12197 @item @emph{Class}:
12198 Elemental function
12200 @item @emph{Syntax}:
12201 @code{RESULT = SCAN(STRING, SET[, BACK [, KIND]])}
12203 @item @emph{Arguments}:
12204 @multitable @columnfractions .15 .70
12205 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
12206 @item @var{SET}    @tab Shall be of type @code{CHARACTER}.
12207 @item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
12208 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
12209 expression indicating the kind parameter of the result.
12210 @end multitable
12212 @item @emph{Return value}:
12213 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
12214 @var{KIND} is absent, the return value is of default integer kind.
12216 @item @emph{Example}:
12217 @smallexample
12218 PROGRAM test_scan
12219   WRITE(*,*) SCAN("FORTRAN", "AO")          ! 2, found 'O'
12220   WRITE(*,*) SCAN("FORTRAN", "AO", .TRUE.)  ! 6, found 'A'
12221   WRITE(*,*) SCAN("FORTRAN", "C++")         ! 0, found none
12222 END PROGRAM
12223 @end smallexample
12225 @item @emph{See also}:
12226 @ref{INDEX intrinsic}, @ref{VERIFY}
12227 @end table
12231 @node SECNDS
12232 @section @code{SECNDS} --- Time function
12233 @fnindex SECNDS
12234 @cindex time, elapsed
12235 @cindex elapsed time
12237 @table @asis
12238 @item @emph{Description}:
12239 @code{SECNDS(X)} gets the time in seconds from the real-time system clock.
12240 @var{X} is a reference time, also in seconds. If this is zero, the time in
12241 seconds from midnight is returned. This function is non-standard and its
12242 use is discouraged.
12244 @item @emph{Standard}:
12245 GNU extension
12247 @item @emph{Class}:
12248 Function
12250 @item @emph{Syntax}:
12251 @code{RESULT = SECNDS (X)}
12253 @item @emph{Arguments}:
12254 @multitable @columnfractions .15 .70
12255 @item @var{T}     @tab Shall be of type @code{REAL(4)}.
12256 @item @var{X}     @tab Shall be of type @code{REAL(4)}.
12257 @end multitable
12259 @item @emph{Return value}:
12260 None
12262 @item @emph{Example}:
12263 @smallexample
12264 program test_secnds
12265     integer :: i
12266     real(4) :: t1, t2
12267     print *, secnds (0.0)   ! seconds since midnight
12268     t1 = secnds (0.0)       ! reference time
12269     do i = 1, 10000000      ! do something
12270     end do
12271     t2 = secnds (t1)        ! elapsed time
12272     print *, "Something took ", t2, " seconds."
12273 end program test_secnds
12274 @end smallexample
12275 @end table
12279 @node SECOND
12280 @section @code{SECOND} --- CPU time function
12281 @fnindex SECOND
12282 @cindex time, elapsed
12283 @cindex elapsed time
12285 @table @asis
12286 @item @emph{Description}:
12287 Returns a @code{REAL(4)} value representing the elapsed CPU time in
12288 seconds.  This provides the same functionality as the standard
12289 @code{CPU_TIME} intrinsic, and is only included for backwards
12290 compatibility.
12292 This intrinsic is provided in both subroutine and function forms;
12293 however, only one form can be used in any given program unit.
12295 @item @emph{Standard}:
12296 GNU extension
12298 @item @emph{Class}:
12299 Subroutine, function
12301 @item @emph{Syntax}:
12302 @multitable @columnfractions .80
12303 @item @code{CALL SECOND(TIME)}
12304 @item @code{TIME = SECOND()}
12305 @end multitable
12307 @item @emph{Arguments}:
12308 @multitable @columnfractions .15 .70
12309 @item @var{TIME}  @tab Shall be of type @code{REAL(4)}.
12310 @end multitable
12312 @item @emph{Return value}:
12313 In either syntax, @var{TIME} is set to the process's current runtime in
12314 seconds.
12316 @item @emph{See also}:
12317 @ref{CPU_TIME}
12319 @end table
12323 @node SELECTED_CHAR_KIND
12324 @section @code{SELECTED_CHAR_KIND} --- Choose character kind
12325 @fnindex SELECTED_CHAR_KIND
12326 @cindex character kind
12327 @cindex kind, character
12329 @table @asis
12330 @item @emph{Description}:
12332 @code{SELECTED_CHAR_KIND(NAME)} returns the kind value for the character
12333 set named @var{NAME}, if a character set with such a name is supported,
12334 or @math{-1} otherwise. Currently, supported character sets include
12335 ``ASCII'' and ``DEFAULT'', which are equivalent, and ``ISO_10646''
12336 (Universal Character Set, UCS-4) which is commonly known as Unicode.
12338 @item @emph{Standard}:
12339 Fortran 2003 and later
12341 @item @emph{Class}:
12342 Transformational function
12344 @item @emph{Syntax}:
12345 @code{RESULT = SELECTED_CHAR_KIND(NAME)}
12347 @item @emph{Arguments}:
12348 @multitable @columnfractions .15 .70
12349 @item @var{NAME} @tab Shall be a scalar and of the default character type.
12350 @end multitable
12352 @item @emph{Example}:
12353 @smallexample
12354 program character_kind
12355   use iso_fortran_env
12356   implicit none
12357   integer, parameter :: ascii = selected_char_kind ("ascii")
12358   integer, parameter :: ucs4  = selected_char_kind ('ISO_10646')
12360   character(kind=ascii, len=26) :: alphabet
12361   character(kind=ucs4,  len=30) :: hello_world
12363   alphabet = ascii_"abcdefghijklmnopqrstuvwxyz"
12364   hello_world = ucs4_'Hello World and Ni Hao -- ' &
12365                 // char (int (z'4F60'), ucs4)     &
12366                 // char (int (z'597D'), ucs4)
12368   write (*,*) alphabet
12370   open (output_unit, encoding='UTF-8')
12371   write (*,*) trim (hello_world)
12372 end program character_kind
12373 @end smallexample
12374 @end table
12378 @node SELECTED_INT_KIND
12379 @section @code{SELECTED_INT_KIND} --- Choose integer kind
12380 @fnindex SELECTED_INT_KIND
12381 @cindex integer kind
12382 @cindex kind, integer
12384 @table @asis
12385 @item @emph{Description}:
12386 @code{SELECTED_INT_KIND(R)} return the kind value of the smallest integer
12387 type that can represent all values ranging from @math{-10^R} (exclusive)
12388 to @math{10^R} (exclusive). If there is no integer kind that accommodates
12389 this range, @code{SELECTED_INT_KIND} returns @math{-1}.
12391 @item @emph{Standard}:
12392 Fortran 95 and later
12394 @item @emph{Class}:
12395 Transformational function
12397 @item @emph{Syntax}:
12398 @code{RESULT = SELECTED_INT_KIND(R)}
12400 @item @emph{Arguments}:
12401 @multitable @columnfractions .15 .70
12402 @item @var{R} @tab Shall be a scalar and of type @code{INTEGER}.
12403 @end multitable
12405 @item @emph{Example}:
12406 @smallexample
12407 program large_integers
12408   integer,parameter :: k5 = selected_int_kind(5)
12409   integer,parameter :: k15 = selected_int_kind(15)
12410   integer(kind=k5) :: i5
12411   integer(kind=k15) :: i15
12413   print *, huge(i5), huge(i15)
12415   ! The following inequalities are always true
12416   print *, huge(i5) >= 10_k5**5-1
12417   print *, huge(i15) >= 10_k15**15-1
12418 end program large_integers
12419 @end smallexample
12420 @end table
12424 @node SELECTED_REAL_KIND
12425 @section @code{SELECTED_REAL_KIND} --- Choose real kind
12426 @fnindex SELECTED_REAL_KIND
12427 @cindex real kind
12428 @cindex kind, real
12429 @cindex radix, real
12431 @table @asis
12432 @item @emph{Description}:
12433 @code{SELECTED_REAL_KIND(P,R)} returns the kind value of a real data type
12434 with decimal precision of at least @code{P} digits, exponent range of
12435 at least @code{R}, and with a radix of @code{RADIX}.
12437 @item @emph{Standard}:
12438 Fortran 95 and later, with @code{RADIX} Fortran 2008 or later
12440 @item @emph{Class}:
12441 Transformational function
12443 @item @emph{Syntax}:
12444 @code{RESULT = SELECTED_REAL_KIND([P, R, RADIX])}
12446 @item @emph{Arguments}:
12447 @multitable @columnfractions .15 .70
12448 @item @var{P} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
12449 @item @var{R} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
12450 @item @var{RADIX} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
12451 @end multitable
12452 Before Fortran 2008, at least one of the arguments @var{R} or @var{P} shall
12453 be present; since Fortran 2008, they are assumed to be zero if absent.
12455 @item @emph{Return value}:
12457 @code{SELECTED_REAL_KIND} returns the value of the kind type parameter of
12458 a real data type with decimal precision of at least @code{P} digits, a
12459 decimal exponent range of at least @code{R}, and with the requested
12460 @code{RADIX}. If the @code{RADIX} parameter is absent, real kinds with
12461 any radix can be returned. If more than one real data type meet the
12462 criteria, the kind of the data type with the smallest decimal precision
12463 is returned. If no real data type matches the criteria, the result is
12464 @table @asis
12465 @item -1 if the processor does not support a real data type with a
12466 precision greater than or equal to @code{P}, but the @code{R} and
12467 @code{RADIX} requirements can be fulfilled
12468 @item -2 if the processor does not support a real type with an exponent
12469 range greater than or equal to @code{R}, but @code{P} and @code{RADIX}
12470 are fulfillable
12471 @item -3 if @code{RADIX} but not @code{P} and @code{R} requirements
12472 are fulfillable
12473 @item -4 if @code{RADIX} and either @code{P} or @code{R} requirements
12474 are fulfillable
12475 @item -5 if there is no real type with the given @code{RADIX}
12476 @end table
12478 @item @emph{See also}:
12479 @ref{PRECISION}, @ref{RANGE}, @ref{RADIX}
12481 @item @emph{Example}:
12482 @smallexample
12483 program real_kinds
12484   integer,parameter :: p6 = selected_real_kind(6)
12485   integer,parameter :: p10r100 = selected_real_kind(10,100)
12486   integer,parameter :: r400 = selected_real_kind(r=400)
12487   real(kind=p6) :: x
12488   real(kind=p10r100) :: y
12489   real(kind=r400) :: z
12491   print *, precision(x), range(x)
12492   print *, precision(y), range(y)
12493   print *, precision(z), range(z)
12494 end program real_kinds
12495 @end smallexample
12496 @end table
12500 @node SET_EXPONENT
12501 @section @code{SET_EXPONENT} --- Set the exponent of the model
12502 @fnindex SET_EXPONENT
12503 @cindex real number, set exponent
12504 @cindex floating point, set exponent
12506 @table @asis
12507 @item @emph{Description}:
12508 @code{SET_EXPONENT(X, I)} returns the real number whose fractional part
12509 is that that of @var{X} and whose exponent part is @var{I}.
12511 @item @emph{Standard}:
12512 Fortran 95 and later
12514 @item @emph{Class}:
12515 Elemental function
12517 @item @emph{Syntax}:
12518 @code{RESULT = SET_EXPONENT(X, I)}
12520 @item @emph{Arguments}:
12521 @multitable @columnfractions .15 .70
12522 @item @var{X} @tab Shall be of type @code{REAL}.
12523 @item @var{I} @tab Shall be of type @code{INTEGER}.
12524 @end multitable
12526 @item @emph{Return value}:
12527 The return value is of the same type and kind as @var{X}.
12528 The real number whose fractional part
12529 is that that of @var{X} and whose exponent part if @var{I} is returned;
12530 it is @code{FRACTION(X) * RADIX(X)**I}.
12532 @item @emph{Example}:
12533 @smallexample
12534 PROGRAM test_setexp
12535   REAL :: x = 178.1387e-4
12536   INTEGER :: i = 17
12537   PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i
12538 END PROGRAM
12539 @end smallexample
12541 @end table
12545 @node SHAPE
12546 @section @code{SHAPE} --- Determine the shape of an array
12547 @fnindex SHAPE
12548 @cindex array, shape
12550 @table @asis
12551 @item @emph{Description}:
12552 Determines the shape of an array.
12554 @item @emph{Standard}:
12555 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
12557 @item @emph{Class}:
12558 Inquiry function
12560 @item @emph{Syntax}:
12561 @code{RESULT = SHAPE(SOURCE [, KIND])}
12563 @item @emph{Arguments}:
12564 @multitable @columnfractions .15 .70
12565 @item @var{SOURCE} @tab Shall be an array or scalar of any type. 
12566 If @var{SOURCE} is a pointer it must be associated and allocatable 
12567 arrays must be allocated.
12568 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
12569 expression indicating the kind parameter of the result.
12570 @end multitable
12572 @item @emph{Return value}:
12573 An @code{INTEGER} array of rank one with as many elements as @var{SOURCE} 
12574 has dimensions. The elements of the resulting array correspond to the extend
12575 of @var{SOURCE} along the respective dimensions. If @var{SOURCE} is a scalar,
12576 the result is the rank one array of size zero. If @var{KIND} is absent, the
12577 return value has the default integer kind otherwise the specified kind.
12579 @item @emph{Example}:
12580 @smallexample
12581 PROGRAM test_shape
12582   INTEGER, DIMENSION(-1:1, -1:2) :: A
12583   WRITE(*,*) SHAPE(A)             ! (/ 3, 4 /)
12584   WRITE(*,*) SIZE(SHAPE(42))      ! (/ /)
12585 END PROGRAM
12586 @end smallexample
12588 @item @emph{See also}:
12589 @ref{RESHAPE}, @ref{SIZE}
12590 @end table
12594 @node SHIFTA
12595 @section @code{SHIFTA} --- Right shift with fill
12596 @fnindex SHIFTA
12597 @cindex bits, shift right
12598 @cindex shift, right with fill
12600 @table @asis
12601 @item @emph{Description}:
12602 @code{SHIFTA} returns a value corresponding to @var{I} with all of the
12603 bits shifted right by @var{SHIFT} places.  If the absolute value of
12604 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
12605 Bits shifted out from the right end are lost. The fill is arithmetic: the
12606 bits shifted in from the left end are equal to the leftmost bit, which in
12607 two's complement representation is the sign bit.
12609 @item @emph{Standard}:
12610 Fortran 2008 and later
12612 @item @emph{Class}:
12613 Elemental function
12615 @item @emph{Syntax}:
12616 @code{RESULT = SHIFTA(I, SHIFT)}
12618 @item @emph{Arguments}:
12619 @multitable @columnfractions .15 .70
12620 @item @var{I} @tab The type shall be @code{INTEGER}.
12621 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
12622 @end multitable
12624 @item @emph{Return value}:
12625 The return value is of type @code{INTEGER} and of the same kind as
12626 @var{I}.
12628 @item @emph{See also}:
12629 @ref{SHIFTL}, @ref{SHIFTR}
12630 @end table
12634 @node SHIFTL
12635 @section @code{SHIFTL} --- Left shift
12636 @fnindex SHIFTL
12637 @cindex bits, shift left
12638 @cindex shift, left
12640 @table @asis
12641 @item @emph{Description}:
12642 @code{SHIFTL} returns a value corresponding to @var{I} with all of the
12643 bits shifted left by @var{SHIFT} places.  If the absolute value of
12644 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
12645 Bits shifted out from the left end are lost, and bits shifted in from
12646 the right end are set to 0.
12648 @item @emph{Standard}:
12649 Fortran 2008 and later
12651 @item @emph{Class}:
12652 Elemental function
12654 @item @emph{Syntax}:
12655 @code{RESULT = SHIFTL(I, SHIFT)}
12657 @item @emph{Arguments}:
12658 @multitable @columnfractions .15 .70
12659 @item @var{I} @tab The type shall be @code{INTEGER}.
12660 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
12661 @end multitable
12663 @item @emph{Return value}:
12664 The return value is of type @code{INTEGER} and of the same kind as
12665 @var{I}.
12667 @item @emph{See also}:
12668 @ref{SHIFTA}, @ref{SHIFTR}
12669 @end table
12673 @node SHIFTR
12674 @section @code{SHIFTR} --- Right shift
12675 @fnindex SHIFTR
12676 @cindex bits, shift right
12677 @cindex shift, right
12679 @table @asis
12680 @item @emph{Description}:
12681 @code{SHIFTR} returns a value corresponding to @var{I} with all of the
12682 bits shifted right by @var{SHIFT} places.  If the absolute value of
12683 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
12684 Bits shifted out from the right end are lost, and bits shifted in from
12685 the left end are set to 0.
12687 @item @emph{Standard}:
12688 Fortran 2008 and later
12690 @item @emph{Class}:
12691 Elemental function
12693 @item @emph{Syntax}:
12694 @code{RESULT = SHIFTR(I, SHIFT)}
12696 @item @emph{Arguments}:
12697 @multitable @columnfractions .15 .70
12698 @item @var{I} @tab The type shall be @code{INTEGER}.
12699 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
12700 @end multitable
12702 @item @emph{Return value}:
12703 The return value is of type @code{INTEGER} and of the same kind as
12704 @var{I}.
12706 @item @emph{See also}:
12707 @ref{SHIFTA}, @ref{SHIFTL}
12708 @end table
12712 @node SIGN
12713 @section @code{SIGN} --- Sign copying function
12714 @fnindex SIGN
12715 @fnindex ISIGN
12716 @fnindex DSIGN
12717 @cindex sign copying
12719 @table @asis
12720 @item @emph{Description}:
12721 @code{SIGN(A,B)} returns the value of @var{A} with the sign of @var{B}.
12723 @item @emph{Standard}:
12724 Fortran 77 and later
12726 @item @emph{Class}:
12727 Elemental function
12729 @item @emph{Syntax}:
12730 @code{RESULT = SIGN(A, B)}
12732 @item @emph{Arguments}:
12733 @multitable @columnfractions .15 .70
12734 @item @var{A} @tab Shall be of type @code{INTEGER} or @code{REAL}
12735 @item @var{B} @tab Shall be of the same type and kind as @var{A}
12736 @end multitable
12738 @item @emph{Return value}:
12739 The kind of the return value is that of @var{A} and @var{B}.
12740 If @math{B\ge 0} then the result is @code{ABS(A)}, else
12741 it is @code{-ABS(A)}.
12743 @item @emph{Example}:
12744 @smallexample
12745 program test_sign
12746   print *, sign(-12,1)
12747   print *, sign(-12,0)
12748   print *, sign(-12,-1)
12750   print *, sign(-12.,1.)
12751   print *, sign(-12.,0.)
12752   print *, sign(-12.,-1.)
12753 end program test_sign
12754 @end smallexample
12756 @item @emph{Specific names}:
12757 @multitable @columnfractions .20 .20 .20 .25
12758 @item Name              @tab Arguments              @tab Return type       @tab Standard
12759 @item @code{SIGN(A,B)}  @tab @code{REAL(4) A, B}    @tab @code{REAL(4)}    @tab f77, gnu
12760 @item @code{ISIGN(A,B)} @tab @code{INTEGER(4) A, B} @tab @code{INTEGER(4)} @tab f77, gnu
12761 @item @code{DSIGN(A,B)} @tab @code{REAL(8) A, B}    @tab @code{REAL(8)}    @tab f77, gnu
12762 @end multitable
12763 @end table
12767 @node SIGNAL
12768 @section @code{SIGNAL} --- Signal handling subroutine (or function)
12769 @fnindex SIGNAL
12770 @cindex system, signal handling
12772 @table @asis
12773 @item @emph{Description}:
12774 @code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine
12775 @var{HANDLER} to be executed with a single integer argument when signal
12776 @var{NUMBER} occurs.  If @var{HANDLER} is an integer, it can be used to
12777 turn off handling of signal @var{NUMBER} or revert to its default
12778 action.  See @code{signal(2)}.
12780 If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument
12781 is supplied, it is set to the value returned by @code{signal(2)}.
12783 @item @emph{Standard}:
12784 GNU extension
12786 @item @emph{Class}:
12787 Subroutine, function
12789 @item @emph{Syntax}:
12790 @multitable @columnfractions .80
12791 @item @code{CALL SIGNAL(NUMBER, HANDLER [, STATUS])}
12792 @item @code{STATUS = SIGNAL(NUMBER, HANDLER)}
12793 @end multitable
12795 @item @emph{Arguments}:
12796 @multitable @columnfractions .15 .70
12797 @item @var{NUMBER} @tab Shall be a scalar integer, with @code{INTENT(IN)}
12798 @item @var{HANDLER}@tab Signal handler (@code{INTEGER FUNCTION} or
12799 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar.
12800 @code{INTEGER}. It is @code{INTENT(IN)}.
12801 @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
12802 integer. It has @code{INTENT(OUT)}.
12803 @end multitable
12804 @c TODO: What should the interface of the handler be?  Does it take arguments?
12806 @item @emph{Return value}:
12807 The @code{SIGNAL} function returns the value returned by @code{signal(2)}.
12809 @item @emph{Example}:
12810 @smallexample
12811 program test_signal
12812   intrinsic signal
12813   external handler_print
12815   call signal (12, handler_print)
12816   call signal (10, 1)
12818   call sleep (30)
12819 end program test_signal
12820 @end smallexample
12821 @end table
12825 @node SIN
12826 @section @code{SIN} --- Sine function 
12827 @fnindex SIN
12828 @fnindex DSIN
12829 @fnindex CSIN
12830 @fnindex ZSIN
12831 @fnindex CDSIN
12832 @cindex trigonometric function, sine
12833 @cindex sine
12835 @table @asis
12836 @item @emph{Description}:
12837 @code{SIN(X)} computes the sine of @var{X}.
12839 @item @emph{Standard}:
12840 Fortran 77 and later
12842 @item @emph{Class}:
12843 Elemental function
12845 @item @emph{Syntax}:
12846 @code{RESULT = SIN(X)}
12848 @item @emph{Arguments}:
12849 @multitable @columnfractions .15 .70
12850 @item @var{X} @tab The type shall be @code{REAL} or
12851 @code{COMPLEX}.
12852 @end multitable
12854 @item @emph{Return value}:
12855 The return value has same type and kind as @var{X}.
12857 @item @emph{Example}:
12858 @smallexample
12859 program test_sin
12860   real :: x = 0.0
12861   x = sin(x)
12862 end program test_sin
12863 @end smallexample
12865 @item @emph{Specific names}:
12866 @multitable @columnfractions .20 .20 .20 .25
12867 @item Name            @tab Argument             @tab Return type       @tab Standard
12868 @item @code{SIN(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}    @tab f77, gnu
12869 @item @code{DSIN(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}    @tab f95, gnu
12870 @item @code{CSIN(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)} @tab f95, gnu
12871 @item @code{ZSIN(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab f95, gnu
12872 @item @code{CDSIN(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab f95, gnu
12873 @end multitable
12875 @item @emph{See also}:
12876 Inverse function: @ref{ASIN}
12877 Degrees function: @ref{SIND}
12878 @end table
12882 @node SIND
12883 @section @code{SIND} --- Sine function, degrees
12884 @fnindex SIND
12885 @fnindex DSIND
12886 @fnindex CSIND
12887 @fnindex ZSIND
12888 @fnindex CDSIND
12889 @cindex trigonometric function, sine, degrees
12890 @cindex sine, degrees
12892 @table @asis
12893 @item @emph{Description}:
12894 @code{SIND(X)} computes the sine of @var{X} in degrees.
12896 This function is for compatibility only and should be avoided in favor of
12897 standard constructs wherever possible.
12899 @item @emph{Standard}:
12900 GNU Extension, enabled with @option{-fdec-math}.
12902 @item @emph{Class}:
12903 Elemental function
12905 @item @emph{Syntax}:
12906 @code{RESULT = SIND(X)}
12908 @item @emph{Arguments}:
12909 @multitable @columnfractions .15 .70
12910 @item @var{X} @tab The type shall be @code{REAL} or
12911 @code{COMPLEX}.
12912 @end multitable
12914 @item @emph{Return value}:
12915 The return value has same type and kind as @var{X}, and its value is in degrees.
12917 @item @emph{Example}:
12918 @smallexample
12919 program test_sind
12920   real :: x = 0.0
12921   x = sind(x)
12922 end program test_sind
12923 @end smallexample
12925 @item @emph{Specific names}:
12926 @multitable @columnfractions .20 .20 .20 .25
12927 @item Name            @tab Argument             @tab Return type       @tab Standard
12928 @item @code{SIND(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}    @tab GNU Extension
12929 @item @code{DSIND(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}    @tab GNU Extension
12930 @item @code{CSIND(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)} @tab GNU Extension
12931 @item @code{ZSIND(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU Extension
12932 @item @code{CDSIND(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU Extension
12933 @end multitable
12935 @item @emph{See also}:
12936 Inverse function: @ref{ASIND}
12937 Radians function: @ref{SIN}
12939 @end table
12943 @node SINH
12944 @section @code{SINH} --- Hyperbolic sine function 
12945 @fnindex SINH
12946 @fnindex DSINH
12947 @cindex hyperbolic sine
12948 @cindex hyperbolic function, sine
12949 @cindex sine, hyperbolic
12951 @table @asis
12952 @item @emph{Description}:
12953 @code{SINH(X)} computes the hyperbolic sine of @var{X}.
12955 @item @emph{Standard}:
12956 Fortran 95 and later, for a complex argument Fortran 2008 or later
12958 @item @emph{Class}:
12959 Elemental function
12961 @item @emph{Syntax}:
12962 @code{RESULT = SINH(X)}
12964 @item @emph{Arguments}:
12965 @multitable @columnfractions .15 .70
12966 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
12967 @end multitable
12969 @item @emph{Return value}:
12970 The return value has same type and kind as @var{X}.
12972 @item @emph{Example}:
12973 @smallexample
12974 program test_sinh
12975   real(8) :: x = - 1.0_8
12976   x = sinh(x)
12977 end program test_sinh
12978 @end smallexample
12980 @item @emph{Specific names}:
12981 @multitable @columnfractions .20 .20 .20 .25
12982 @item Name            @tab Argument          @tab Return type       @tab Standard
12983 @item @code{SINH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 95 and later
12984 @item @code{DSINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
12985 @end multitable
12987 @item @emph{See also}:
12988 @ref{ASINH}
12989 @end table
12993 @node SIZE
12994 @section @code{SIZE} --- Determine the size of an array
12995 @fnindex SIZE
12996 @cindex array, size
12997 @cindex array, number of elements
12998 @cindex array, count elements
13000 @table @asis
13001 @item @emph{Description}:
13002 Determine the extent of @var{ARRAY} along a specified dimension @var{DIM},
13003 or the total number of elements in @var{ARRAY} if @var{DIM} is absent.
13005 @item @emph{Standard}:
13006 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
13008 @item @emph{Class}:
13009 Inquiry function
13011 @item @emph{Syntax}:
13012 @code{RESULT = SIZE(ARRAY[, DIM [, KIND]])}
13014 @item @emph{Arguments}:
13015 @multitable @columnfractions .15 .70
13016 @item @var{ARRAY} @tab Shall be an array of any type. If @var{ARRAY} is
13017 a pointer it must be associated and allocatable arrays must be allocated.
13018 @item @var{DIM}   @tab (Optional) shall be a scalar of type @code{INTEGER} 
13019 and its value shall be in the range from 1 to n, where n equals the rank 
13020 of @var{ARRAY}.
13021 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
13022 expression indicating the kind parameter of the result.
13023 @end multitable
13025 @item @emph{Return value}:
13026 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
13027 @var{KIND} is absent, the return value is of default integer kind.
13029 @item @emph{Example}:
13030 @smallexample
13031 PROGRAM test_size
13032   WRITE(*,*) SIZE((/ 1, 2 /))    ! 2
13033 END PROGRAM
13034 @end smallexample
13036 @item @emph{See also}:
13037 @ref{SHAPE}, @ref{RESHAPE}
13038 @end table
13041 @node SIZEOF
13042 @section @code{SIZEOF} --- Size in bytes of an expression
13043 @fnindex SIZEOF
13044 @cindex expression size
13045 @cindex size of an expression
13047 @table @asis
13048 @item @emph{Description}:
13049 @code{SIZEOF(X)} calculates the number of bytes of storage the
13050 expression @code{X} occupies.
13052 @item @emph{Standard}:
13053 GNU extension
13055 @item @emph{Class}:
13056 Inquiry function
13058 @item @emph{Syntax}:
13059 @code{N = SIZEOF(X)}
13061 @item @emph{Arguments}:
13062 @multitable @columnfractions .15 .70
13063 @item @var{X} @tab The argument shall be of any type, rank or shape.
13064 @end multitable
13066 @item @emph{Return value}:
13067 The return value is of type integer and of the system-dependent kind
13068 @var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
13069 number of bytes occupied by the argument.  If the argument has the
13070 @code{POINTER} attribute, the number of bytes of the storage area pointed
13071 to is returned.  If the argument is of a derived type with @code{POINTER}
13072 or @code{ALLOCATABLE} components, the return value does not account for
13073 the sizes of the data pointed to by these components. If the argument is
13074 polymorphic, the size according to the dynamic type is returned. The argument
13075 may not be a procedure or procedure pointer. Note that the code assumes for
13076 arrays that those are contiguous; for contiguous arrays, it returns the
13077 storage or an array element multiplied by the size of the array.
13079 @item @emph{Example}:
13080 @smallexample
13081    integer :: i
13082    real :: r, s(5)
13083    print *, (sizeof(s)/sizeof(r) == 5)
13084    end
13085 @end smallexample
13086 The example will print @code{.TRUE.} unless you are using a platform
13087 where default @code{REAL} variables are unusually padded.
13089 @item @emph{See also}:
13090 @ref{C_SIZEOF}, @ref{STORAGE_SIZE}
13091 @end table
13094 @node SLEEP
13095 @section @code{SLEEP} --- Sleep for the specified number of seconds
13096 @fnindex SLEEP
13097 @cindex delayed execution
13099 @table @asis
13100 @item @emph{Description}:
13101 Calling this subroutine causes the process to pause for @var{SECONDS} seconds.
13103 @item @emph{Standard}:
13104 GNU extension
13106 @item @emph{Class}:
13107 Subroutine
13109 @item @emph{Syntax}:
13110 @code{CALL SLEEP(SECONDS)}
13112 @item @emph{Arguments}:
13113 @multitable @columnfractions .15 .70
13114 @item @var{SECONDS} @tab The type shall be of default @code{INTEGER}.
13115 @end multitable
13117 @item @emph{Example}:
13118 @smallexample
13119 program test_sleep
13120   call sleep(5)
13122 @end smallexample
13123 @end table
13127 @node SPACING
13128 @section @code{SPACING} --- Smallest distance between two numbers of a given type
13129 @fnindex SPACING
13130 @cindex real number, relative spacing
13131 @cindex floating point, relative spacing
13133 @table @asis
13134 @item @emph{Description}:
13135 Determines the distance between the argument @var{X} and the nearest 
13136 adjacent number of the same type.
13138 @item @emph{Standard}:
13139 Fortran 95 and later
13141 @item @emph{Class}:
13142 Elemental function
13144 @item @emph{Syntax}:
13145 @code{RESULT = SPACING(X)}
13147 @item @emph{Arguments}:
13148 @multitable @columnfractions .15 .70
13149 @item @var{X} @tab Shall be of type @code{REAL}.
13150 @end multitable
13152 @item @emph{Return value}:
13153 The result is of the same type as the input argument @var{X}.
13155 @item @emph{Example}:
13156 @smallexample
13157 PROGRAM test_spacing
13158   INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)
13159   INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)
13161   WRITE(*,*) spacing(1.0_SGL)      ! "1.1920929E-07"          on i686
13162   WRITE(*,*) spacing(1.0_DBL)      ! "2.220446049250313E-016" on i686
13163 END PROGRAM
13164 @end smallexample
13166 @item @emph{See also}:
13167 @ref{RRSPACING}
13168 @end table
13172 @node SPREAD
13173 @section @code{SPREAD} --- Add a dimension to an array
13174 @fnindex SPREAD
13175 @cindex array, increase dimension
13176 @cindex array, duplicate elements
13177 @cindex array, duplicate dimensions
13179 @table @asis
13180 @item @emph{Description}:
13181 Replicates a @var{SOURCE} array @var{NCOPIES} times along a specified 
13182 dimension @var{DIM}.
13184 @item @emph{Standard}:
13185 Fortran 95 and later
13187 @item @emph{Class}:
13188 Transformational function
13190 @item @emph{Syntax}:
13191 @code{RESULT = SPREAD(SOURCE, DIM, NCOPIES)}
13193 @item @emph{Arguments}:
13194 @multitable @columnfractions .15 .70
13195 @item @var{SOURCE}  @tab Shall be a scalar or an array of any type and 
13196 a rank less than seven.
13197 @item @var{DIM}     @tab Shall be a scalar of type @code{INTEGER} with a 
13198 value in the range from 1 to n+1, where n equals the rank of @var{SOURCE}.
13199 @item @var{NCOPIES} @tab Shall be a scalar of type @code{INTEGER}.
13200 @end multitable
13202 @item @emph{Return value}:
13203 The result is an array of the same type as @var{SOURCE} and has rank n+1
13204 where n equals the rank of @var{SOURCE}.
13206 @item @emph{Example}:
13207 @smallexample
13208 PROGRAM test_spread
13209   INTEGER :: a = 1, b(2) = (/ 1, 2 /)
13210   WRITE(*,*) SPREAD(A, 1, 2)            ! "1 1"
13211   WRITE(*,*) SPREAD(B, 1, 2)            ! "1 1 2 2"
13212 END PROGRAM
13213 @end smallexample
13215 @item @emph{See also}:
13216 @ref{UNPACK}
13217 @end table
13221 @node SQRT
13222 @section @code{SQRT} --- Square-root function
13223 @fnindex SQRT
13224 @fnindex DSQRT
13225 @fnindex CSQRT
13226 @fnindex ZSQRT
13227 @fnindex CDSQRT
13228 @cindex root
13229 @cindex square-root
13231 @table @asis
13232 @item @emph{Description}:
13233 @code{SQRT(X)} computes the square root of @var{X}.
13235 @item @emph{Standard}:
13236 Fortran 77 and later
13238 @item @emph{Class}:
13239 Elemental function
13241 @item @emph{Syntax}:
13242 @code{RESULT = SQRT(X)}
13244 @item @emph{Arguments}:
13245 @multitable @columnfractions .15 .70
13246 @item @var{X} @tab The type shall be @code{REAL} or
13247 @code{COMPLEX}.
13248 @end multitable
13250 @item @emph{Return value}:
13251 The return value is of type @code{REAL} or @code{COMPLEX}.
13252 The kind type parameter is the same as @var{X}.
13254 @item @emph{Example}:
13255 @smallexample
13256 program test_sqrt
13257   real(8) :: x = 2.0_8
13258   complex :: z = (1.0, 2.0)
13259   x = sqrt(x)
13260   z = sqrt(z)
13261 end program test_sqrt
13262 @end smallexample
13264 @item @emph{Specific names}:
13265 @multitable @columnfractions .20 .20 .20 .25
13266 @item Name             @tab Argument             @tab Return type          @tab Standard
13267 @item @code{SQRT(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}       @tab Fortran 95 and later
13268 @item @code{DSQRT(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}       @tab Fortran 95 and later
13269 @item @code{CSQRT(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab Fortran 95 and later
13270 @item @code{ZSQRT(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
13271 @item @code{CDSQRT(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
13272 @end multitable
13273 @end table
13277 @node SRAND
13278 @section @code{SRAND} --- Reinitialize the random number generator
13279 @fnindex SRAND
13280 @cindex random number generation, seeding
13281 @cindex seeding a random number generator
13283 @table @asis
13284 @item @emph{Description}:
13285 @code{SRAND} reinitializes the pseudo-random number generator
13286 called by @code{RAND} and @code{IRAND}. The new seed used by the
13287 generator is specified by the required argument @var{SEED}.
13289 @item @emph{Standard}:
13290 GNU extension
13292 @item @emph{Class}:
13293 Subroutine
13295 @item @emph{Syntax}:
13296 @code{CALL SRAND(SEED)}
13298 @item @emph{Arguments}:
13299 @multitable @columnfractions .15 .70
13300 @item @var{SEED} @tab Shall be a scalar @code{INTEGER(kind=4)}.
13301 @end multitable
13303 @item @emph{Return value}:
13304 Does not return anything.
13306 @item @emph{Example}:
13307 See @code{RAND} and @code{IRAND} for examples.
13309 @item @emph{Notes}:
13310 The Fortran standard specifies the intrinsic subroutines
13311 @code{RANDOM_SEED} to initialize the pseudo-random number
13312 generator and @code{RANDOM_NUMBER} to generate pseudo-random numbers.
13313 These subroutines should be used in new codes.
13315 Please note that in GNU Fortran, these two sets of intrinsics (@code{RAND},
13316 @code{IRAND} and @code{SRAND} on the one hand, @code{RANDOM_NUMBER} and
13317 @code{RANDOM_SEED} on the other hand) access two independent
13318 pseudo-random number generators.
13320 @item @emph{See also}:
13321 @ref{RAND}, @ref{RANDOM_SEED}, @ref{RANDOM_NUMBER}
13323 @end table
13327 @node STAT
13328 @section @code{STAT} --- Get file status
13329 @fnindex STAT
13330 @cindex file system, file status
13332 @table @asis
13333 @item @emph{Description}:
13334 This function returns information about a file. No permissions are required on 
13335 the file itself, but execute (search) permission is required on all of the 
13336 directories in path that lead to the file.
13338 The elements that are obtained and stored in the array @code{VALUES}:
13339 @multitable @columnfractions .15 .70
13340 @item @code{VALUES(1)}   @tab  Device ID 
13341 @item @code{VALUES(2)}   @tab  Inode number 
13342 @item @code{VALUES(3)}   @tab  File mode 
13343 @item @code{VALUES(4)}   @tab  Number of links 
13344 @item @code{VALUES(5)}   @tab  Owner's uid 
13345 @item @code{VALUES(6)}   @tab  Owner's gid 
13346 @item @code{VALUES(7)}   @tab  ID of device containing directory entry for file (0 if not available) 
13347 @item @code{VALUES(8)}   @tab  File size (bytes) 
13348 @item @code{VALUES(9)}   @tab  Last access time 
13349 @item @code{VALUES(10)}  @tab  Last modification time 
13350 @item @code{VALUES(11)}  @tab  Last file status change time 
13351 @item @code{VALUES(12)}  @tab  Preferred I/O block size (-1 if not available) 
13352 @item @code{VALUES(13)}  @tab  Number of blocks allocated (-1 if not available)
13353 @end multitable
13355 Not all these elements are relevant on all systems. 
13356 If an element is not relevant, it is returned as 0.
13358 This intrinsic is provided in both subroutine and function forms; however,
13359 only one form can be used in any given program unit.
13361 @item @emph{Standard}:
13362 GNU extension
13364 @item @emph{Class}:
13365 Subroutine, function
13367 @item @emph{Syntax}:
13368 @multitable @columnfractions .80
13369 @item @code{CALL STAT(NAME, VALUES [, STATUS])}
13370 @item @code{STATUS = STAT(NAME, VALUES)}
13371 @end multitable
13373 @item @emph{Arguments}:
13374 @multitable @columnfractions .15 .70
13375 @item @var{NAME}   @tab The type shall be @code{CHARACTER}, of the
13376 default kind and a valid path within the file system.
13377 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
13378 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
13379 on success and a system specific error code otherwise.
13380 @end multitable
13382 @item @emph{Example}:
13383 @smallexample
13384 PROGRAM test_stat
13385   INTEGER, DIMENSION(13) :: buff
13386   INTEGER :: status
13388   CALL STAT("/etc/passwd", buff, status)
13390   IF (status == 0) THEN
13391     WRITE (*, FMT="('Device ID:',               T30, I19)") buff(1)
13392     WRITE (*, FMT="('Inode number:',            T30, I19)") buff(2)
13393     WRITE (*, FMT="('File mode (octal):',       T30, O19)") buff(3)
13394     WRITE (*, FMT="('Number of links:',         T30, I19)") buff(4)
13395     WRITE (*, FMT="('Owner''s uid:',            T30, I19)") buff(5)
13396     WRITE (*, FMT="('Owner''s gid:',            T30, I19)") buff(6)
13397     WRITE (*, FMT="('Device where located:',    T30, I19)") buff(7)
13398     WRITE (*, FMT="('File size:',               T30, I19)") buff(8)
13399     WRITE (*, FMT="('Last access time:',        T30, A19)") CTIME(buff(9))
13400     WRITE (*, FMT="('Last modification time',   T30, A19)") CTIME(buff(10))
13401     WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11))
13402     WRITE (*, FMT="('Preferred block size:',    T30, I19)") buff(12)
13403     WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13)
13404   END IF
13405 END PROGRAM
13406 @end smallexample
13408 @item @emph{See also}:
13409 To stat an open file: @ref{FSTAT}, to stat a link: @ref{LSTAT}
13410 @end table
13414 @node STORAGE_SIZE
13415 @section @code{STORAGE_SIZE} --- Storage size in bits
13416 @fnindex STORAGE_SIZE
13417 @cindex storage size
13419 @table @asis
13420 @item @emph{Description}:
13421 Returns the storage size of argument @var{A} in bits.
13422 @item @emph{Standard}:
13423 Fortran 2008 and later
13424 @item @emph{Class}:
13425 Inquiry function
13426 @item @emph{Syntax}:
13427 @code{RESULT = STORAGE_SIZE(A [, KIND])}
13429 @item @emph{Arguments}:
13430 @multitable @columnfractions .15 .70
13431 @item @var{A} @tab Shall be a scalar or array of any type.
13432 @item @var{KIND} @tab (Optional) shall be a scalar integer constant expression.
13433 @end multitable
13435 @item @emph{Return Value}:
13436 The result is a scalar integer with the kind type parameter specified by KIND
13437 (or default integer type if KIND is missing). The result value is the size
13438 expressed in bits for an element of an array that has the dynamic type and type
13439 parameters of A.
13441 @item @emph{See also}:
13442 @ref{C_SIZEOF}, @ref{SIZEOF}
13443 @end table
13447 @node SUM
13448 @section @code{SUM} --- Sum of array elements
13449 @fnindex SUM
13450 @cindex array, sum
13451 @cindex array, add elements
13452 @cindex array, conditionally add elements
13453 @cindex sum array elements
13455 @table @asis
13456 @item @emph{Description}:
13457 Adds the elements of @var{ARRAY} along dimension @var{DIM} if
13458 the corresponding element in @var{MASK} is @code{TRUE}.
13460 @item @emph{Standard}:
13461 Fortran 95 and later
13463 @item @emph{Class}:
13464 Transformational function
13466 @item @emph{Syntax}:
13467 @multitable @columnfractions .80
13468 @item @code{RESULT = SUM(ARRAY[, MASK])}
13469 @item @code{RESULT = SUM(ARRAY, DIM[, MASK])}
13470 @end multitable
13472 @item @emph{Arguments}:
13473 @multitable @columnfractions .15 .70
13474 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, 
13475 @code{REAL} or @code{COMPLEX}.
13476 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
13477 @code{INTEGER} with a value in the range from 1 to n, where n 
13478 equals the rank of @var{ARRAY}.
13479 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
13480 and either be a scalar or an array of the same shape as @var{ARRAY}.
13481 @end multitable
13483 @item @emph{Return value}:
13484 The result is of the same type as @var{ARRAY}.
13486 If @var{DIM} is absent, a scalar with the sum of all elements in @var{ARRAY}
13487 is returned. Otherwise, an array of rank n-1, where n equals the rank of 
13488 @var{ARRAY}, and a shape similar to that of @var{ARRAY} with dimension @var{DIM} 
13489 dropped is returned.
13491 @item @emph{Example}:
13492 @smallexample
13493 PROGRAM test_sum
13494   INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
13495   print *, SUM(x)                        ! all elements, sum = 15
13496   print *, SUM(x, MASK=MOD(x, 2)==1)     ! odd elements, sum = 9
13497 END PROGRAM
13498 @end smallexample
13500 @item @emph{See also}:
13501 @ref{PRODUCT}
13502 @end table
13506 @node SYMLNK
13507 @section @code{SYMLNK} --- Create a symbolic link
13508 @fnindex SYMLNK
13509 @cindex file system, create link
13510 @cindex file system, soft link
13512 @table @asis
13513 @item @emph{Description}:
13514 Makes a symbolic link from file @var{PATH1} to @var{PATH2}. A null
13515 character (@code{CHAR(0)}) can be used to mark the end of the names in
13516 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
13517 names are ignored.  If the @var{STATUS} argument is supplied, it
13518 contains 0 on success or a nonzero error code upon return; see
13519 @code{symlink(2)}.  If the system does not supply @code{symlink(2)}, 
13520 @code{ENOSYS} is returned.
13522 This intrinsic is provided in both subroutine and function forms;
13523 however, only one form can be used in any given program unit.
13525 @item @emph{Standard}:
13526 GNU extension
13528 @item @emph{Class}:
13529 Subroutine, function
13531 @item @emph{Syntax}:
13532 @multitable @columnfractions .80
13533 @item @code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
13534 @item @code{STATUS = SYMLNK(PATH1, PATH2)}
13535 @end multitable
13537 @item @emph{Arguments}:
13538 @multitable @columnfractions .15 .70
13539 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
13540 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
13541 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
13542 @end multitable
13544 @item @emph{See also}:
13545 @ref{LINK}, @ref{UNLINK}
13547 @end table
13551 @node SYSTEM
13552 @section @code{SYSTEM} --- Execute a shell command
13553 @fnindex SYSTEM
13554 @cindex system, system call
13556 @table @asis
13557 @item @emph{Description}:
13558 Passes the command @var{COMMAND} to a shell (see @code{system(3)}). If
13559 argument @var{STATUS} is present, it contains the value returned by
13560 @code{system(3)}, which is presumably 0 if the shell command succeeded.
13561 Note that which shell is used to invoke the command is system-dependent
13562 and environment-dependent.
13564 This intrinsic is provided in both subroutine and function forms;
13565 however, only one form can be used in any given program unit.
13567 Note that the @code{system} function need not be thread-safe. It is
13568 the responsibility of the user to ensure that @code{system} is not
13569 called concurrently.
13571 @item @emph{Standard}:
13572 GNU extension
13574 @item @emph{Class}:
13575 Subroutine, function
13577 @item @emph{Syntax}:
13578 @multitable @columnfractions .80
13579 @item @code{CALL SYSTEM(COMMAND [, STATUS])}
13580 @item @code{STATUS = SYSTEM(COMMAND)}
13581 @end multitable
13583 @item @emph{Arguments}:
13584 @multitable @columnfractions .15 .70
13585 @item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type.
13586 @item @var{STATUS}  @tab (Optional) Shall be of default @code{INTEGER} type.
13587 @end multitable
13589 @item @emph{See also}:
13590 @ref{EXECUTE_COMMAND_LINE}, which is part of the Fortran 2008 standard
13591 and should considered in new code for future portability.
13592 @end table
13596 @node SYSTEM_CLOCK
13597 @section @code{SYSTEM_CLOCK} --- Time function
13598 @fnindex SYSTEM_CLOCK
13599 @cindex time, clock ticks
13600 @cindex clock ticks
13602 @table @asis
13603 @item @emph{Description}:
13604 Determines the @var{COUNT} of a processor clock since an unspecified
13605 time in the past modulo @var{COUNT_MAX}, @var{COUNT_RATE} determines
13606 the number of clock ticks per second.  If the platform supports a
13607 monotonic clock, that clock is used and can, depending on the platform
13608 clock implementation, provide up to nanosecond resolution.  If a
13609 monotonic clock is not available, the implementation falls back to a
13610 realtime clock.
13612 @var{COUNT_RATE} is system dependent and can vary depending on the kind of
13613 the arguments. For @var{kind=4} arguments (and smaller integer kinds),
13614 @var{COUNT} represents milliseconds, while for @var{kind=8} arguments (and
13615 larger integer kinds), @var{COUNT} typically represents micro- or
13616 nanoseconds depending on resolution of the underlying platform clock.
13617 @var{COUNT_MAX} usually equals @code{HUGE(COUNT_MAX)}. Note that the
13618 millisecond resolution of the @var{kind=4} version implies that the
13619 @var{COUNT} will wrap around in roughly 25 days. In order to avoid issues
13620 with the wrap around and for more precise timing, please use the
13621 @var{kind=8} version.
13623 If there is no clock, or querying the clock fails, @var{COUNT} is set
13624 to @code{-HUGE(COUNT)}, and @var{COUNT_RATE} and @var{COUNT_MAX} are
13625 set to zero.
13627 When running on a platform using the GNU C library (glibc) version
13628 2.16 or older, or a derivative thereof, the high resolution monotonic
13629 clock is available only when linking with the @var{rt} library.  This
13630 can be done explicitly by adding the @code{-lrt} flag when linking the
13631 application, but is also done implicitly when using OpenMP.
13633 On the Windows platform, the version with @var{kind=4} arguments uses
13634 the @code{GetTickCount} function, whereas the @var{kind=8} version
13635 uses @code{QueryPerformanceCounter} and
13636 @code{QueryPerformanceCounterFrequency}. For more information, and
13637 potential caveats, please see the platform documentation.
13639 @item @emph{Standard}:
13640 Fortran 95 and later
13642 @item @emph{Class}:
13643 Subroutine
13645 @item @emph{Syntax}:
13646 @code{CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])}
13648 @item @emph{Arguments}:
13649 @multitable @columnfractions .15 .70
13650 @item @var{COUNT}      @tab (Optional) shall be a scalar of type 
13651 @code{INTEGER} with @code{INTENT(OUT)}.
13652 @item @var{COUNT_RATE} @tab (Optional) shall be a scalar of type 
13653 @code{INTEGER} or @code{REAL}, with @code{INTENT(OUT)}.
13654 @item @var{COUNT_MAX}  @tab (Optional) shall be a scalar of type 
13655 @code{INTEGER} with @code{INTENT(OUT)}.
13656 @end multitable
13658 @item @emph{Example}:
13659 @smallexample
13660 PROGRAM test_system_clock
13661   INTEGER :: count, count_rate, count_max
13662   CALL SYSTEM_CLOCK(count, count_rate, count_max)
13663   WRITE(*,*) count, count_rate, count_max
13664 END PROGRAM
13665 @end smallexample
13667 @item @emph{See also}:
13668 @ref{DATE_AND_TIME}, @ref{CPU_TIME}
13669 @end table
13673 @node TAN
13674 @section @code{TAN} --- Tangent function
13675 @fnindex TAN
13676 @fnindex DTAN
13677 @cindex trigonometric function, tangent
13678 @cindex tangent
13680 @table @asis
13681 @item @emph{Description}:
13682 @code{TAN(X)} computes the tangent of @var{X}.
13684 @item @emph{Standard}:
13685 Fortran 77 and later, for a complex argument Fortran 2008 or later
13687 @item @emph{Class}:
13688 Elemental function
13690 @item @emph{Syntax}:
13691 @code{RESULT = TAN(X)}
13693 @item @emph{Arguments}:
13694 @multitable @columnfractions .15 .70
13695 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
13696 @end multitable
13698 @item @emph{Return value}:
13699 The return value has same type and kind as @var{X}, and its value is in radians.
13701 @item @emph{Example}:
13702 @smallexample
13703 program test_tan
13704   real(8) :: x = 0.165_8
13705   x = tan(x)
13706 end program test_tan
13707 @end smallexample
13709 @item @emph{Specific names}:
13710 @multitable @columnfractions .20 .20 .20 .25
13711 @item Name            @tab Argument          @tab Return type     @tab Standard
13712 @item @code{TAN(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab Fortran 95 and later
13713 @item @code{DTAN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab Fortran 95 and later
13714 @end multitable
13716 @item @emph{See also}:
13717 Inverse function: @ref{ATAN}
13718 Degrees function: @ref{TAND}
13719 @end table
13723 @node TAND
13724 @section @code{TAND} --- Tangent function, degrees
13725 @fnindex TAND
13726 @fnindex DTAND
13727 @cindex trigonometric function, tangent, degrees
13728 @cindex tangent, degrees
13730 @table @asis
13731 @item @emph{Description}:
13732 @code{TAND(X)} computes the tangent of @var{X} in degrees.
13734 This function is for compatibility only and should be avoided in favor of
13735 standard constructs wherever possible.
13737 @item @emph{Standard}:
13738 GNU Extension, enabled with @option{-fdec-math}.
13740 @item @emph{Class}:
13741 Elemental function
13743 @item @emph{Syntax}:
13744 @code{RESULT = TAND(X)}
13746 @item @emph{Arguments}:
13747 @multitable @columnfractions .15 .70
13748 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
13749 @end multitable
13751 @item @emph{Return value}:
13752 The return value has same type and kind as @var{X}, and its value is in degrees.
13754 @item @emph{Example}:
13755 @smallexample
13756 program test_tand
13757   real(8) :: x = 0.165_8
13758   x = tand(x)
13759 end program test_tand
13760 @end smallexample
13762 @item @emph{Specific names}:
13763 @multitable @columnfractions .20 .20 .20 .25
13764 @item Name            @tab Argument          @tab Return type     @tab Standard
13765 @item @code{TAND(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU Extension
13766 @item @code{DTAND(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU Extension
13767 @end multitable
13769 @item @emph{See also}:
13770 Inverse function: @ref{ATAND}
13771 Radians function: @ref{TAN}
13772 @end table
13776 @node TANH
13777 @section @code{TANH} --- Hyperbolic tangent function 
13778 @fnindex TANH
13779 @fnindex DTANH
13780 @cindex hyperbolic tangent
13781 @cindex hyperbolic function, tangent
13782 @cindex tangent, hyperbolic
13784 @table @asis
13785 @item @emph{Description}:
13786 @code{TANH(X)} computes the hyperbolic tangent of @var{X}.
13788 @item @emph{Standard}:
13789 Fortran 77 and later, for a complex argument Fortran 2008 or later
13791 @item @emph{Class}:
13792 Elemental function
13794 @item @emph{Syntax}:
13795 @code{X = TANH(X)}
13797 @item @emph{Arguments}:
13798 @multitable @columnfractions .15 .70
13799 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
13800 @end multitable
13802 @item @emph{Return value}:
13803 The return value has same type and kind as @var{X}. If @var{X} is
13804 complex, the imaginary part of the result is in radians. If @var{X}
13805 is @code{REAL}, the return value lies in the range
13806 @math{ - 1 \leq tanh(x) \leq 1 }.
13808 @item @emph{Example}:
13809 @smallexample
13810 program test_tanh
13811   real(8) :: x = 2.1_8
13812   x = tanh(x)
13813 end program test_tanh
13814 @end smallexample
13816 @item @emph{Specific names}:
13817 @multitable @columnfractions .20 .20 .20 .25
13818 @item Name            @tab Argument          @tab Return type       @tab Standard
13819 @item @code{TANH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 95 and later
13820 @item @code{DTANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
13821 @end multitable
13823 @item @emph{See also}:
13824 @ref{ATANH}
13825 @end table
13829 @node THIS_IMAGE
13830 @section @code{THIS_IMAGE} --- Function that returns the cosubscript index of this image
13831 @fnindex THIS_IMAGE
13832 @cindex coarray, @code{THIS_IMAGE}
13833 @cindex images, index of this image
13835 @table @asis
13836 @item @emph{Description}:
13837 Returns the cosubscript for this image.
13839 @item @emph{Standard}:
13840 Fortran 2008 and later. With @var{DISTANCE} argument, 
13841 Technical Specification (TS) 18508 or later
13843 @item @emph{Class}:
13844 Transformational function
13846 @item @emph{Syntax}:
13847 @multitable @columnfractions .80
13848 @item @code{RESULT = THIS_IMAGE()}
13849 @item @code{RESULT = THIS_IMAGE(DISTANCE)}
13850 @item @code{RESULT = THIS_IMAGE(COARRAY [, DIM])}
13851 @end multitable
13853 @item @emph{Arguments}:
13854 @multitable @columnfractions .15 .70
13855 @item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer
13856 (not permitted together with @var{COARRAY}).
13857 @item @var{COARRAY} @tab Coarray of any type  (optional; if @var{DIM}
13858 present, required).
13859 @item @var{DIM}     @tab default integer scalar (optional). If present,
13860 @var{DIM} shall be between one and the corank of @var{COARRAY}.
13861 @end multitable
13864 @item @emph{Return value}:
13865 Default integer. If @var{COARRAY} is not present, it is scalar; if
13866 @var{DISTANCE} is not present or has value 0, its value is the image index on
13867 the invoking image for the current team, for values smaller or equal
13868 distance to the initial team, it returns the image index on the ancestor team
13869 which has a distance of @var{DISTANCE} from the invoking team. If
13870 @var{DISTANCE} is larger than the distance to the initial team, the image
13871 index of the initial team is returned. Otherwise when the @var{COARRAY} is
13872 present, if @var{DIM} is not present, a rank-1 array with corank elements is
13873 returned, containing the cosubscripts for @var{COARRAY} specifying the invoking
13874 image. If @var{DIM} is present, a scalar is returned, with the value of
13875 the @var{DIM} element of @code{THIS_IMAGE(COARRAY)}.
13877 @item @emph{Example}:
13878 @smallexample
13879 INTEGER :: value[*]
13880 INTEGER :: i
13881 value = THIS_IMAGE()
13882 SYNC ALL
13883 IF (THIS_IMAGE() == 1) THEN
13884   DO i = 1, NUM_IMAGES()
13885     WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
13886   END DO
13887 END IF
13889 ! Check whether the current image is the initial image
13890 IF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE())
13891   error stop "something is rotten here"
13892 @end smallexample
13894 @item @emph{See also}:
13895 @ref{NUM_IMAGES}, @ref{IMAGE_INDEX}
13896 @end table
13900 @node TIME
13901 @section @code{TIME} --- Time function
13902 @fnindex TIME
13903 @cindex time, current
13904 @cindex current time
13906 @table @asis
13907 @item @emph{Description}:
13908 Returns the current time encoded as an integer (in the manner of the
13909 function @code{time(3)} in the C standard library). This value is
13910 suitable for passing to @ref{CTIME}, @ref{GMTIME}, and @ref{LTIME}.
13912 This intrinsic is not fully portable, such as to systems with 32-bit
13913 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
13914 the values returned by this intrinsic might be, or become, negative, or
13915 numerically less than previous values, during a single run of the
13916 compiled program.
13918 See @ref{TIME8}, for information on a similar intrinsic that might be
13919 portable to more GNU Fortran implementations, though to fewer Fortran
13920 compilers.
13922 @item @emph{Standard}:
13923 GNU extension
13925 @item @emph{Class}:
13926 Function
13928 @item @emph{Syntax}:
13929 @code{RESULT = TIME()}
13931 @item @emph{Return value}:
13932 The return value is a scalar of type @code{INTEGER(4)}.
13934 @item @emph{See also}:
13935 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
13937 @end table
13941 @node TIME8
13942 @section @code{TIME8} --- Time function (64-bit)
13943 @fnindex TIME8
13944 @cindex time, current
13945 @cindex current time
13947 @table @asis
13948 @item @emph{Description}:
13949 Returns the current time encoded as an integer (in the manner of the
13950 function @code{time(3)} in the C standard library). This value is
13951 suitable for passing to @ref{CTIME}, @ref{GMTIME}, and @ref{LTIME}.
13953 @emph{Warning:} this intrinsic does not increase the range of the timing
13954 values over that returned by @code{time(3)}. On a system with a 32-bit
13955 @code{time(3)}, @code{TIME8} will return a 32-bit value, even though
13956 it is converted to a 64-bit @code{INTEGER(8)} value. That means
13957 overflows of the 32-bit value can still occur. Therefore, the values
13958 returned by this intrinsic might be or become negative or numerically
13959 less than previous values during a single run of the compiled program.
13961 @item @emph{Standard}:
13962 GNU extension
13964 @item @emph{Class}:
13965 Function
13967 @item @emph{Syntax}:
13968 @code{RESULT = TIME8()}
13970 @item @emph{Return value}:
13971 The return value is a scalar of type @code{INTEGER(8)}.
13973 @item @emph{See also}:
13974 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK8}, @ref{TIME}
13976 @end table
13980 @node TINY
13981 @section @code{TINY} --- Smallest positive number of a real kind
13982 @fnindex TINY
13983 @cindex limits, smallest number
13984 @cindex model representation, smallest number
13986 @table @asis
13987 @item @emph{Description}:
13988 @code{TINY(X)} returns the smallest positive (non zero) number
13989 in the model of the type of @code{X}.
13991 @item @emph{Standard}:
13992 Fortran 95 and later
13994 @item @emph{Class}:
13995 Inquiry function
13997 @item @emph{Syntax}:
13998 @code{RESULT = TINY(X)}
14000 @item @emph{Arguments}:
14001 @multitable @columnfractions .15 .70
14002 @item @var{X} @tab Shall be of type @code{REAL}.
14003 @end multitable
14005 @item @emph{Return value}:
14006 The return value is of the same type and kind as @var{X}
14008 @item @emph{Example}:
14009 See @code{HUGE} for an example.
14010 @end table
14014 @node TRAILZ
14015 @section @code{TRAILZ} --- Number of trailing zero bits of an integer
14016 @fnindex TRAILZ
14017 @cindex zero bits
14019 @table @asis
14020 @item @emph{Description}:
14021 @code{TRAILZ} returns the number of trailing zero bits of an integer.
14023 @item @emph{Standard}:
14024 Fortran 2008 and later
14026 @item @emph{Class}:
14027 Elemental function
14029 @item @emph{Syntax}:
14030 @code{RESULT = TRAILZ(I)}
14032 @item @emph{Arguments}:
14033 @multitable @columnfractions .15 .70
14034 @item @var{I} @tab Shall be of type @code{INTEGER}.
14035 @end multitable
14037 @item @emph{Return value}:
14038 The type of the return value is the default @code{INTEGER}.
14039 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
14041 @item @emph{Example}:
14042 @smallexample
14043 PROGRAM test_trailz
14044   WRITE (*,*) TRAILZ(8)  ! prints 3
14045 END PROGRAM
14046 @end smallexample
14048 @item @emph{See also}:
14049 @ref{BIT_SIZE}, @ref{LEADZ}, @ref{POPPAR}, @ref{POPCNT}
14050 @end table
14054 @node TRANSFER
14055 @section @code{TRANSFER} --- Transfer bit patterns
14056 @fnindex TRANSFER
14057 @cindex bits, move
14058 @cindex type cast
14060 @table @asis
14061 @item @emph{Description}:
14062 Interprets the bitwise representation of @var{SOURCE} in memory as if it
14063 is the representation of a variable or array of the same type and type
14064 parameters as @var{MOLD}.
14066 This is approximately equivalent to the C concept of @emph{casting} one
14067 type to another.
14069 @item @emph{Standard}:
14070 Fortran 95 and later
14072 @item @emph{Class}:
14073 Transformational function
14075 @item @emph{Syntax}:
14076 @code{RESULT = TRANSFER(SOURCE, MOLD[, SIZE])}
14078 @item @emph{Arguments}:
14079 @multitable @columnfractions .15 .70
14080 @item @var{SOURCE} @tab Shall be a scalar or an array of any type.
14081 @item @var{MOLD}   @tab Shall be a scalar or an array of any type.
14082 @item @var{SIZE}   @tab (Optional) shall be a scalar of type 
14083 @code{INTEGER}.
14084 @end multitable
14086 @item @emph{Return value}:
14087 The result has the same type as @var{MOLD}, with the bit level
14088 representation of @var{SOURCE}.  If @var{SIZE} is present, the result is
14089 a one-dimensional array of length @var{SIZE}.  If @var{SIZE} is absent
14090 but @var{MOLD} is an array (of any size or shape), the result is a one-
14091 dimensional array of the minimum length needed to contain the entirety
14092 of the bitwise representation of @var{SOURCE}.   If @var{SIZE} is absent
14093 and @var{MOLD} is a scalar, the result is a scalar.
14095 If the bitwise representation of the result is longer than that of
14096 @var{SOURCE}, then the leading bits of the result correspond to those of
14097 @var{SOURCE} and any trailing bits are filled arbitrarily.
14099 When the resulting bit representation does not correspond to a valid
14100 representation of a variable of the same type as @var{MOLD}, the results
14101 are undefined, and subsequent operations on the result cannot be
14102 guaranteed to produce sensible behavior.  For example, it is possible to
14103 create @code{LOGICAL} variables for which @code{@var{VAR}} and
14104 @code{.NOT.@var{VAR}} both appear to be true.
14106 @item @emph{Example}:
14107 @smallexample
14108 PROGRAM test_transfer
14109   integer :: x = 2143289344
14110   print *, transfer(x, 1.0)    ! prints "NaN" on i686
14111 END PROGRAM
14112 @end smallexample
14113 @end table
14117 @node TRANSPOSE
14118 @section @code{TRANSPOSE} --- Transpose an array of rank two
14119 @fnindex TRANSPOSE
14120 @cindex array, transpose
14121 @cindex matrix, transpose
14122 @cindex transpose
14124 @table @asis
14125 @item @emph{Description}:
14126 Transpose an array of rank two. Element (i, j) of the result has the value 
14127 @code{MATRIX(j, i)}, for all i, j.
14129 @item @emph{Standard}:
14130 Fortran 95 and later
14132 @item @emph{Class}:
14133 Transformational function
14135 @item @emph{Syntax}:
14136 @code{RESULT = TRANSPOSE(MATRIX)}
14138 @item @emph{Arguments}:
14139 @multitable @columnfractions .15 .70
14140 @item @var{MATRIX} @tab Shall be an array of any type and have a rank of two.
14141 @end multitable
14143 @item @emph{Return value}:
14144 The result has the same type as @var{MATRIX}, and has shape 
14145 @code{(/ m, n /)} if @var{MATRIX} has shape @code{(/ n, m /)}.
14146 @end table
14150 @node TRIM
14151 @section @code{TRIM} --- Remove trailing blank characters of a string
14152 @fnindex TRIM
14153 @cindex string, remove trailing whitespace
14155 @table @asis
14156 @item @emph{Description}:
14157 Removes trailing blank characters of a string.
14159 @item @emph{Standard}:
14160 Fortran 95 and later
14162 @item @emph{Class}:
14163 Transformational function
14165 @item @emph{Syntax}:
14166 @code{RESULT = TRIM(STRING)}
14168 @item @emph{Arguments}:
14169 @multitable @columnfractions .15 .70
14170 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}.
14171 @end multitable
14173 @item @emph{Return value}:
14174 A scalar of type @code{CHARACTER} which length is that of @var{STRING}
14175 less the number of trailing blanks.
14177 @item @emph{Example}:
14178 @smallexample
14179 PROGRAM test_trim
14180   CHARACTER(len=10), PARAMETER :: s = "GFORTRAN  "
14181   WRITE(*,*) LEN(s), LEN(TRIM(s))  ! "10 8", with/without trailing blanks
14182 END PROGRAM
14183 @end smallexample
14185 @item @emph{See also}:
14186 @ref{ADJUSTL}, @ref{ADJUSTR}
14187 @end table
14191 @node TTYNAM
14192 @section @code{TTYNAM} --- Get the name of a terminal device.
14193 @fnindex TTYNAM
14194 @cindex system, terminal
14196 @table @asis
14197 @item @emph{Description}:
14198 Get the name of a terminal device. For more information, 
14199 see @code{ttyname(3)}.
14201 This intrinsic is provided in both subroutine and function forms; 
14202 however, only one form can be used in any given program unit. 
14204 @item @emph{Standard}:
14205 GNU extension
14207 @item @emph{Class}:
14208 Subroutine, function
14210 @item @emph{Syntax}:
14211 @multitable @columnfractions .80
14212 @item @code{CALL TTYNAM(UNIT, NAME)}
14213 @item @code{NAME = TTYNAM(UNIT)}
14214 @end multitable
14216 @item @emph{Arguments}:
14217 @multitable @columnfractions .15 .70
14218 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
14219 @item @var{NAME} @tab Shall be of type @code{CHARACTER}.
14220 @end multitable
14222 @item @emph{Example}:
14223 @smallexample
14224 PROGRAM test_ttynam
14225   INTEGER :: unit
14226   DO unit = 1, 10
14227     IF (isatty(unit=unit)) write(*,*) ttynam(unit)
14228   END DO
14229 END PROGRAM
14230 @end smallexample
14232 @item @emph{See also}:
14233 @ref{ISATTY}
14234 @end table
14238 @node UBOUND
14239 @section @code{UBOUND} --- Upper dimension bounds of an array
14240 @fnindex UBOUND
14241 @cindex array, upper bound
14243 @table @asis
14244 @item @emph{Description}:
14245 Returns the upper bounds of an array, or a single upper bound
14246 along the @var{DIM} dimension.
14247 @item @emph{Standard}:
14248 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
14250 @item @emph{Class}:
14251 Inquiry function
14253 @item @emph{Syntax}:
14254 @code{RESULT = UBOUND(ARRAY [, DIM [, KIND]])}
14256 @item @emph{Arguments}:
14257 @multitable @columnfractions .15 .70
14258 @item @var{ARRAY} @tab Shall be an array, of any type.
14259 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
14260 @item @var{KIND}@tab (Optional) An @code{INTEGER} initialization
14261 expression indicating the kind parameter of the result.
14262 @end multitable
14264 @item @emph{Return value}:
14265 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
14266 @var{KIND} is absent, the return value is of default integer kind.
14267 If @var{DIM} is absent, the result is an array of the upper bounds of
14268 @var{ARRAY}.  If @var{DIM} is present, the result is a scalar
14269 corresponding to the upper bound of the array along that dimension.  If
14270 @var{ARRAY} is an expression rather than a whole array or array
14271 structure component, or if it has a zero extent along the relevant
14272 dimension, the upper bound is taken to be the number of elements along
14273 the relevant dimension.
14275 @item @emph{See also}:
14276 @ref{LBOUND}, @ref{LCOBOUND}
14277 @end table
14281 @node UCOBOUND
14282 @section @code{UCOBOUND} --- Upper codimension bounds of an array
14283 @fnindex UCOBOUND
14284 @cindex coarray, upper bound
14286 @table @asis
14287 @item @emph{Description}:
14288 Returns the upper cobounds of a coarray, or a single upper cobound
14289 along the @var{DIM} codimension.
14290 @item @emph{Standard}:
14291 Fortran 2008 and later
14293 @item @emph{Class}:
14294 Inquiry function
14296 @item @emph{Syntax}:
14297 @code{RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])}
14299 @item @emph{Arguments}:
14300 @multitable @columnfractions .15 .70
14301 @item @var{ARRAY} @tab Shall be an coarray, of any type.
14302 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
14303 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
14304 expression indicating the kind parameter of the result.
14305 @end multitable
14307 @item @emph{Return value}:
14308 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
14309 @var{KIND} is absent, the return value is of default integer kind.
14310 If @var{DIM} is absent, the result is an array of the lower cobounds of
14311 @var{COARRAY}.  If @var{DIM} is present, the result is a scalar
14312 corresponding to the lower cobound of the array along that codimension.
14314 @item @emph{See also}:
14315 @ref{LCOBOUND}, @ref{LBOUND}
14316 @end table
14320 @node UMASK
14321 @section @code{UMASK} --- Set the file creation mask
14322 @fnindex UMASK
14323 @cindex file system, file creation mask
14325 @table @asis
14326 @item @emph{Description}:
14327 Sets the file creation mask to @var{MASK}. If called as a function, it
14328 returns the old value. If called as a subroutine and argument @var{OLD}
14329 if it is supplied, it is set to the old value. See @code{umask(2)}.
14331 @item @emph{Standard}:
14332 GNU extension
14334 @item @emph{Class}:
14335 Subroutine, function
14337 @item @emph{Syntax}:
14338 @multitable @columnfractions .80
14339 @item @code{CALL UMASK(MASK [, OLD])}
14340 @item @code{OLD = UMASK(MASK)}
14341 @end multitable
14343 @item @emph{Arguments}:
14344 @multitable @columnfractions .15 .70
14345 @item @var{MASK} @tab Shall be a scalar of type @code{INTEGER}.
14346 @item @var{OLD} @tab (Optional) Shall be a scalar of type
14347 @code{INTEGER}.
14348 @end multitable
14350 @end table
14354 @node UNLINK
14355 @section @code{UNLINK} --- Remove a file from the file system
14356 @fnindex UNLINK
14357 @cindex file system, remove file
14359 @table @asis
14360 @item @emph{Description}:
14361 Unlinks the file @var{PATH}. A null character (@code{CHAR(0)}) can be
14362 used to mark the end of the name in @var{PATH}; otherwise, trailing
14363 blanks in the file name are ignored.  If the @var{STATUS} argument is
14364 supplied, it contains 0 on success or a nonzero error code upon return;
14365 see @code{unlink(2)}.
14367 This intrinsic is provided in both subroutine and function forms;
14368 however, only one form can be used in any given program unit.
14370 @item @emph{Standard}:
14371 GNU extension
14373 @item @emph{Class}:
14374 Subroutine, function
14376 @item @emph{Syntax}:
14377 @multitable @columnfractions .80
14378 @item @code{CALL UNLINK(PATH [, STATUS])}
14379 @item @code{STATUS = UNLINK(PATH)}
14380 @end multitable
14382 @item @emph{Arguments}:
14383 @multitable @columnfractions .15 .70
14384 @item @var{PATH} @tab Shall be of default @code{CHARACTER} type.
14385 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
14386 @end multitable
14388 @item @emph{See also}:
14389 @ref{LINK}, @ref{SYMLNK}
14390 @end table
14394 @node UNPACK
14395 @section @code{UNPACK} --- Unpack an array of rank one into an array
14396 @fnindex UNPACK
14397 @cindex array, unpacking
14398 @cindex array, increase dimension
14399 @cindex array, scatter elements
14401 @table @asis
14402 @item @emph{Description}:
14403 Store the elements of @var{VECTOR} in an array of higher rank.
14405 @item @emph{Standard}:
14406 Fortran 95 and later
14408 @item @emph{Class}:
14409 Transformational function
14411 @item @emph{Syntax}:
14412 @code{RESULT = UNPACK(VECTOR, MASK, FIELD)}
14414 @item @emph{Arguments}:
14415 @multitable @columnfractions .15 .70
14416 @item @var{VECTOR} @tab Shall be an array of any type and rank one. It 
14417 shall have at least as many elements as @var{MASK} has @code{TRUE} values.
14418 @item @var{MASK}   @tab Shall be an array of type @code{LOGICAL}.
14419 @item @var{FIELD}  @tab Shall be of the same type as @var{VECTOR} and have
14420 the same shape as @var{MASK}.
14421 @end multitable
14423 @item @emph{Return value}:
14424 The resulting array corresponds to @var{FIELD} with @code{TRUE} elements
14425 of @var{MASK} replaced by values from @var{VECTOR} in array element order.
14427 @item @emph{Example}:
14428 @smallexample
14429 PROGRAM test_unpack
14430   integer :: vector(2)  = (/1,1/)
14431   logical :: mask(4)  = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
14432   integer :: field(2,2) = 0, unity(2,2)
14434   ! result: unity matrix
14435   unity = unpack(vector, reshape(mask, (/2,2/)), field)
14436 END PROGRAM
14437 @end smallexample
14439 @item @emph{See also}:
14440 @ref{PACK}, @ref{SPREAD}
14441 @end table
14445 @node VERIFY
14446 @section @code{VERIFY} --- Scan a string for characters not a given set
14447 @fnindex VERIFY
14448 @cindex string, find missing set
14450 @table @asis
14451 @item @emph{Description}:
14452 Verifies that all the characters in @var{STRING} belong to the set of
14453 characters in @var{SET}.
14455 If @var{BACK} is either absent or equals @code{FALSE}, this function
14456 returns the position of the leftmost character of @var{STRING} that is
14457 not in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost
14458 position is returned. If all characters of @var{STRING} are found in
14459 @var{SET}, the result is zero.
14461 @item @emph{Standard}:
14462 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
14464 @item @emph{Class}:
14465 Elemental function
14467 @item @emph{Syntax}:
14468 @code{RESULT = VERIFY(STRING, SET[, BACK [, KIND]])}
14470 @item @emph{Arguments}:
14471 @multitable @columnfractions .15 .70
14472 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
14473 @item @var{SET}    @tab Shall be of type @code{CHARACTER}.
14474 @item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
14475 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
14476 expression indicating the kind parameter of the result.
14477 @end multitable
14479 @item @emph{Return value}:
14480 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
14481 @var{KIND} is absent, the return value is of default integer kind.
14483 @item @emph{Example}:
14484 @smallexample
14485 PROGRAM test_verify
14486   WRITE(*,*) VERIFY("FORTRAN", "AO")           ! 1, found 'F'
14487   WRITE(*,*) VERIFY("FORTRAN", "FOO")          ! 3, found 'R'
14488   WRITE(*,*) VERIFY("FORTRAN", "C++")          ! 1, found 'F'
14489   WRITE(*,*) VERIFY("FORTRAN", "C++", .TRUE.)  ! 7, found 'N'
14490   WRITE(*,*) VERIFY("FORTRAN", "FORTRAN")      ! 0' found none
14491 END PROGRAM
14492 @end smallexample
14494 @item @emph{See also}:
14495 @ref{SCAN}, @ref{INDEX intrinsic}
14496 @end table
14500 @node XOR
14501 @section @code{XOR} --- Bitwise logical exclusive OR
14502 @fnindex XOR
14503 @cindex bitwise logical exclusive or
14504 @cindex logical exclusive or, bitwise
14506 @table @asis
14507 @item @emph{Description}:
14508 Bitwise logical exclusive or. 
14510 This intrinsic routine is provided for backwards compatibility with 
14511 GNU Fortran 77.  For integer arguments, programmers should consider
14512 the use of the @ref{IEOR} intrinsic and for logical arguments the
14513 @code{.NEQV.} operator, which are both defined by the Fortran standard.
14515 @item @emph{Standard}:
14516 GNU extension
14518 @item @emph{Class}:
14519 Function
14521 @item @emph{Syntax}:
14522 @code{RESULT = XOR(I, J)}
14524 @item @emph{Arguments}:
14525 @multitable @columnfractions .15 .70
14526 @item @var{I} @tab The type shall be either  a scalar @code{INTEGER}
14527 type or a scalar @code{LOGICAL} type.
14528 @item @var{J} @tab The type shall be the same as the type of @var{I}.
14529 @end multitable
14531 @item @emph{Return value}:
14532 The return type is either a scalar @code{INTEGER} or a scalar
14533 @code{LOGICAL}.  If the kind type parameters differ, then the
14534 smaller kind type is implicitly converted to larger kind, and the 
14535 return has the larger kind.
14537 @item @emph{Example}:
14538 @smallexample
14539 PROGRAM test_xor
14540   LOGICAL :: T = .TRUE., F = .FALSE.
14541   INTEGER :: a, b
14542   DATA a / Z'F' /, b / Z'3' /
14544   WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)
14545   WRITE (*,*) XOR(a, b)
14546 END PROGRAM
14547 @end smallexample
14549 @item @emph{See also}:
14550 Fortran 95 elemental function: @ref{IEOR}
14551 @end table
14555 @node Intrinsic Modules
14556 @chapter Intrinsic Modules
14557 @cindex intrinsic Modules
14559 @menu
14560 * ISO_FORTRAN_ENV::
14561 * ISO_C_BINDING::
14562 * IEEE modules::
14563 * OpenMP Modules OMP_LIB and OMP_LIB_KINDS::
14564 * OpenACC Module OPENACC::
14565 @end menu
14567 @node ISO_FORTRAN_ENV
14568 @section @code{ISO_FORTRAN_ENV}
14569 @table @asis
14570 @item @emph{Standard}:
14571 Fortran 2003 and later, except when otherwise noted
14572 @end table
14574 The @code{ISO_FORTRAN_ENV} module provides the following scalar default-integer
14575 named constants:
14577 @table @asis
14578 @item @code{ATOMIC_INT_KIND}:
14579 Default-kind integer constant to be used as kind parameter when defining
14580 integer variables used in atomic operations. (Fortran 2008 or later.)
14582 @item @code{ATOMIC_LOGICAL_KIND}:
14583 Default-kind integer constant to be used as kind parameter when defining
14584 logical variables used in atomic operations. (Fortran 2008 or later.)
14586 @item @code{CHARACTER_KINDS}:
14587 Default-kind integer constant array of rank one containing the supported kind
14588 parameters of the @code{CHARACTER} type. (Fortran 2008 or later.)
14590 @item @code{CHARACTER_STORAGE_SIZE}:
14591 Size in bits of the character storage unit.
14593 @item @code{ERROR_UNIT}:
14594 Identifies the preconnected unit used for error reporting.
14596 @item @code{FILE_STORAGE_SIZE}:
14597 Size in bits of the file-storage unit.
14599 @item @code{INPUT_UNIT}:
14600 Identifies the preconnected unit identified by the asterisk
14601 (@code{*}) in @code{READ} statement.
14603 @item @code{INT8}, @code{INT16}, @code{INT32}, @code{INT64}:
14604 Kind type parameters to specify an INTEGER type with a storage
14605 size of 16, 32, and 64 bits. It is negative if a target platform
14606 does not support the particular kind. (Fortran 2008 or later.)
14608 @item @code{INTEGER_KINDS}:
14609 Default-kind integer constant array of rank one containing the supported kind
14610 parameters of the @code{INTEGER} type. (Fortran 2008 or later.)
14612 @item @code{IOSTAT_END}:
14613 The value assigned to the variable passed to the @code{IOSTAT=} specifier of
14614 an input/output statement if an end-of-file condition occurred.
14616 @item @code{IOSTAT_EOR}:
14617 The value assigned to the variable passed to the @code{IOSTAT=} specifier of
14618 an input/output statement if an end-of-record condition occurred.
14620 @item @code{IOSTAT_INQUIRE_INTERNAL_UNIT}:
14621 Scalar default-integer constant, used by @code{INQUIRE} for the
14622 @code{IOSTAT=} specifier to denote an that a unit number identifies an
14623 internal unit. (Fortran 2008 or later.)
14625 @item @code{NUMERIC_STORAGE_SIZE}:
14626 The size in bits of the numeric storage unit.
14628 @item @code{LOGICAL_KINDS}:
14629 Default-kind integer constant array of rank one containing the supported kind
14630 parameters of the @code{LOGICAL} type. (Fortran 2008 or later.)
14632 @item @code{OUTPUT_UNIT}:
14633 Identifies the preconnected unit identified by the asterisk
14634 (@code{*}) in @code{WRITE} statement.
14636 @item @code{REAL32}, @code{REAL64}, @code{REAL128}:
14637 Kind type parameters to specify a REAL type with a storage
14638 size of 32, 64, and 128 bits. It is negative if a target platform
14639 does not support the particular kind. (Fortran 2008 or later.)
14641 @item @code{REAL_KINDS}:
14642 Default-kind integer constant array of rank one containing the supported kind
14643 parameters of the @code{REAL} type. (Fortran 2008 or later.)
14645 @item @code{STAT_LOCKED}:
14646 Scalar default-integer constant used as STAT= return value by @code{LOCK} to
14647 denote that the lock variable is locked by the executing image. (Fortran 2008
14648 or later.)
14650 @item @code{STAT_LOCKED_OTHER_IMAGE}:
14651 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
14652 denote that the lock variable is locked by another image. (Fortran 2008 or
14653 later.)
14655 @item @code{STAT_STOPPED_IMAGE}:
14656 Positive, scalar default-integer constant used as STAT= return value if the
14657 argument in the statement requires synchronisation with an image, which has
14658 initiated the termination of the execution. (Fortran 2008 or later.)
14660 @item @code{STAT_FAILED_IMAGE}:
14661 Positive, scalar default-integer constant used as STAT= return value if the
14662 argument in the statement requires communication with an image, which has
14663 is in the failed state. (TS 18508 or later.)
14665 @item @code{STAT_UNLOCKED}:
14666 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
14667 denote that the lock variable is unlocked. (Fortran 2008 or later.)
14668 @end table
14670 The module provides the following derived type:
14672 @table @asis
14673 @item @code{LOCK_TYPE}:
14674 Derived type with private components to be use with the @code{LOCK} and
14675 @code{UNLOCK} statement. A variable of its type has to be always declared
14676 as coarray and may not appear in a variable-definition context.
14677 (Fortran 2008 or later.)
14678 @end table
14680 The module also provides the following intrinsic procedures:
14681 @ref{COMPILER_OPTIONS} and @ref{COMPILER_VERSION}.
14685 @node ISO_C_BINDING
14686 @section @code{ISO_C_BINDING}
14687 @table @asis
14688 @item @emph{Standard}:
14689 Fortran 2003 and later, GNU extensions
14690 @end table
14692 The following intrinsic procedures are provided by the module; their
14693 definition can be found in the section Intrinsic Procedures of this
14694 manual.
14696 @table @asis
14697 @item @code{C_ASSOCIATED}
14698 @item @code{C_F_POINTER}
14699 @item @code{C_F_PROCPOINTER}
14700 @item @code{C_FUNLOC}
14701 @item @code{C_LOC}
14702 @item @code{C_SIZEOF}
14703 @end table
14704 @c TODO: Vertical spacing between C_FUNLOC and C_LOC wrong in PDF,
14705 @c don't really know why.
14707 The @code{ISO_C_BINDING} module provides the following named constants of
14708 type default integer, which can be used as KIND type parameters.
14710 In addition to the integer named constants required by the Fortran 2003 
14711 standard and @code{C_PTRDIFF_T} of TS 29113, GNU Fortran provides as an
14712 extension named constants for the 128-bit integer types supported by the
14713 C compiler: @code{C_INT128_T, C_INT_LEAST128_T, C_INT_FAST128_T}.
14714 Furthermore, if @code{__float128} is supported in C, the named constants
14715 @code{C_FLOAT128, C_FLOAT128_COMPLEX} are defined.
14717 @multitable @columnfractions .15 .35 .35 .35
14718 @item Fortran Type  @tab Named constant         @tab C type                                @tab Extension
14719 @item @code{INTEGER}@tab @code{C_INT}           @tab @code{int}
14720 @item @code{INTEGER}@tab @code{C_SHORT}         @tab @code{short int}
14721 @item @code{INTEGER}@tab @code{C_LONG}          @tab @code{long int}
14722 @item @code{INTEGER}@tab @code{C_LONG_LONG}     @tab @code{long long int}
14723 @item @code{INTEGER}@tab @code{C_SIGNED_CHAR}   @tab @code{signed char}/@code{unsigned char}
14724 @item @code{INTEGER}@tab @code{C_SIZE_T}        @tab @code{size_t}
14725 @item @code{INTEGER}@tab @code{C_INT8_T}        @tab @code{int8_t}
14726 @item @code{INTEGER}@tab @code{C_INT16_T}       @tab @code{int16_t}
14727 @item @code{INTEGER}@tab @code{C_INT32_T}       @tab @code{int32_t}
14728 @item @code{INTEGER}@tab @code{C_INT64_T}       @tab @code{int64_t}
14729 @item @code{INTEGER}@tab @code{C_INT128_T}      @tab @code{int128_t}                      @tab Ext.
14730 @item @code{INTEGER}@tab @code{C_INT_LEAST8_T}  @tab @code{int_least8_t}
14731 @item @code{INTEGER}@tab @code{C_INT_LEAST16_T} @tab @code{int_least16_t}
14732 @item @code{INTEGER}@tab @code{C_INT_LEAST32_T} @tab @code{int_least32_t}
14733 @item @code{INTEGER}@tab @code{C_INT_LEAST64_T} @tab @code{int_least64_t}
14734 @item @code{INTEGER}@tab @code{C_INT_LEAST128_T}@tab @code{int_least128_t}                @tab Ext.
14735 @item @code{INTEGER}@tab @code{C_INT_FAST8_T}   @tab @code{int_fast8_t}
14736 @item @code{INTEGER}@tab @code{C_INT_FAST16_T}  @tab @code{int_fast16_t}
14737 @item @code{INTEGER}@tab @code{C_INT_FAST32_T}  @tab @code{int_fast32_t}
14738 @item @code{INTEGER}@tab @code{C_INT_FAST64_T}  @tab @code{int_fast64_t}
14739 @item @code{INTEGER}@tab @code{C_INT_FAST128_T} @tab @code{int_fast128_t}                 @tab Ext.
14740 @item @code{INTEGER}@tab @code{C_INTMAX_T}      @tab @code{intmax_t}
14741 @item @code{INTEGER}@tab @code{C_INTPTR_T}      @tab @code{intptr_t}
14742 @item @code{INTEGER}@tab @code{C_PTRDIFF_T}     @tab @code{ptrdiff_t}                     @tab TS 29113
14743 @item @code{REAL}   @tab @code{C_FLOAT}         @tab @code{float}
14744 @item @code{REAL}   @tab @code{C_DOUBLE}        @tab @code{double}
14745 @item @code{REAL}   @tab @code{C_LONG_DOUBLE}   @tab @code{long double}
14746 @item @code{REAL}   @tab @code{C_FLOAT128}      @tab @code{__float128}                    @tab Ext.
14747 @item @code{COMPLEX}@tab @code{C_FLOAT_COMPLEX} @tab @code{float _Complex}
14748 @item @code{COMPLEX}@tab @code{C_DOUBLE_COMPLEX}@tab @code{double _Complex}
14749 @item @code{COMPLEX}@tab @code{C_LONG_DOUBLE_COMPLEX}@tab @code{long double _Complex}
14750 @item @code{REAL}   @tab @code{C_FLOAT128_COMPLEX}   @tab @code{__float128 _Complex}      @tab Ext.
14751 @item @code{LOGICAL}@tab @code{C_BOOL}          @tab @code{_Bool}
14752 @item @code{CHARACTER}@tab @code{C_CHAR}        @tab @code{char}
14753 @end multitable
14755 Additionally, the following parameters of type @code{CHARACTER(KIND=C_CHAR)}
14756 are defined.
14758 @multitable @columnfractions .20 .45 .15
14759 @item Name                     @tab C definition    @tab Value
14760 @item @code{C_NULL_CHAR}       @tab null character  @tab @code{'\0'}
14761 @item @code{C_ALERT}           @tab alert           @tab @code{'\a'}
14762 @item @code{C_BACKSPACE}       @tab backspace       @tab @code{'\b'}
14763 @item @code{C_FORM_FEED}       @tab form feed       @tab @code{'\f'}
14764 @item @code{C_NEW_LINE}        @tab new line        @tab @code{'\n'}
14765 @item @code{C_CARRIAGE_RETURN} @tab carriage return @tab @code{'\r'}
14766 @item @code{C_HORIZONTAL_TAB}  @tab horizontal tab  @tab @code{'\t'}
14767 @item @code{C_VERTICAL_TAB}    @tab vertical tab    @tab @code{'\v'}
14768 @end multitable
14770 Moreover, the following two named constants are defined:
14772 @multitable @columnfractions .20 .80
14773 @item Name                 @tab Type
14774 @item @code{C_NULL_PTR}    @tab @code{C_PTR}
14775 @item @code{C_NULL_FUNPTR} @tab @code{C_FUNPTR}
14776 @end multitable
14778 Both are equivalent to the value @code{NULL} in C.
14782 @node IEEE modules
14783 @section IEEE modules: @code{IEEE_EXCEPTIONS}, @code{IEEE_ARITHMETIC}, and @code{IEEE_FEATURES}
14784 @table @asis
14785 @item @emph{Standard}:
14786 Fortran 2003 and later
14787 @end table
14789 The @code{IEEE_EXCEPTIONS}, @code{IEEE_ARITHMETIC}, and @code{IEEE_FEATURES}
14790 intrinsic modules provide support for exceptions and IEEE arithmetic, as
14791 defined in Fortran 2003 and later standards, and the IEC 60559:1989 standard
14792 (@emph{Binary floating-point arithmetic for microprocessor systems}). These
14793 modules are only provided on the following supported platforms:
14795 @itemize @bullet
14796 @item i386 and x86_64 processors
14797 @item platforms which use the GNU C Library (glibc)
14798 @item platforms with support for SysV/386 routines for floating point
14799 interface (including Solaris and BSDs)
14800 @item platforms with the AIX OS
14801 @end itemize
14803 For full compliance with the Fortran standards, code using the
14804 @code{IEEE_EXCEPTIONS} or @code{IEEE_ARITHMETIC} modules should be compiled
14805 with the following options: @code{-fno-unsafe-math-optimizations
14806 -frounding-math -fsignaling-nans}.
14810 @node OpenMP Modules OMP_LIB and OMP_LIB_KINDS
14811 @section OpenMP Modules @code{OMP_LIB} and @code{OMP_LIB_KINDS}
14812 @table @asis
14813 @item @emph{Standard}:
14814 OpenMP Application Program Interface v4.5
14815 @end table
14818 The OpenMP Fortran runtime library routines are provided both in
14819 a form of two Fortran 90 modules, named @code{OMP_LIB} and 
14820 @code{OMP_LIB_KINDS}, and in a form of a Fortran @code{include} file named
14821 @file{omp_lib.h}. The procedures provided by @code{OMP_LIB} can be found
14822 in the @ref{Top,,Introduction,libgomp,GNU Offloading and Multi
14823 Processing Runtime Library} manual,
14824 the named constants defined in the modules are listed
14825 below.
14827 For details refer to the actual
14828 @uref{http://www.openmp.org/wp-content/uploads/openmp-4.5.pdf,
14829 OpenMP Application Program Interface v4.5}.
14831 @code{OMP_LIB_KINDS} provides the following scalar default-integer
14832 named constants:
14834 @table @asis
14835 @item @code{omp_lock_kind}
14836 @item @code{omp_nest_lock_kind}
14837 @item @code{omp_proc_bind_kind}
14838 @item @code{omp_sched_kind}
14839 @end table
14841 @code{OMP_LIB} provides the scalar default-integer
14842 named constant @code{openmp_version} with a value of the form
14843 @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
14844 of the OpenMP version; for OpenMP v4.5 the value is @code{201511}.
14846 The following scalar integer named constants of the
14847 kind @code{omp_sched_kind}:
14849 @table @asis
14850 @item @code{omp_sched_static}
14851 @item @code{omp_sched_dynamic}
14852 @item @code{omp_sched_guided}
14853 @item @code{omp_sched_auto}
14854 @end table
14856 And the following scalar integer named constants of the 
14857 kind @code{omp_proc_bind_kind}:
14859 @table @asis
14860 @item @code{omp_proc_bind_false}
14861 @item @code{omp_proc_bind_true}
14862 @item @code{omp_proc_bind_master}
14863 @item @code{omp_proc_bind_close}
14864 @item @code{omp_proc_bind_spread}
14865 @end table
14869 @node OpenACC Module OPENACC
14870 @section OpenACC Module @code{OPENACC}
14871 @table @asis
14872 @item @emph{Standard}:
14873 OpenACC Application Programming Interface v2.0
14874 @end table
14877 The OpenACC Fortran runtime library routines are provided both in a
14878 form of a Fortran 90 module, named @code{OPENACC}, and in form of a
14879 Fortran @code{include} file named @file{openacc_lib.h}.  The
14880 procedures provided by @code{OPENACC} can be found in the
14881 @ref{Top,,Introduction,libgomp,GNU Offloading and Multi Processing
14882 Runtime Library} manual, the named constants defined in the modules
14883 are listed below.
14885 For details refer to the actual
14886 @uref{http://www.openacc.org/,
14887 OpenACC Application Programming Interface v2.0}.
14889 @code{OPENACC} provides the scalar default-integer
14890 named constant @code{openacc_version} with a value of the form
14891 @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
14892 of the OpenACC version; for OpenACC v2.0 the value is @code{201306}.