2 Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc.
4 This is part of the GNU Fortran manual.
5 For copying conditions, see the file gfortran.texi.
7 Permission is granted to copy, distribute and/or modify this document
8 under the terms of the GNU Free Documentation License, Version 1.3 or
9 any later version published by the Free Software Foundation; with the
10 Invariant Sections being ``Funding Free Software'', the Front-Cover
11 Texts being (a) (see below), and with the Back-Cover Texts being (b)
12 (see below). A copy of the license is included in the gfdl(7) man page.
15 Some basic guidelines for editing this document:
17 (1) The intrinsic procedures are to be listed in alphabetical order.
18 (2) The generic name is to be used.
19 (3) The specific names are included in the function index and in a
20 table at the end of the node (See ABS entry).
21 (4) Try to maintain the same style for each entry.
27 \gdef\acos{\mathop{\rm acos}\nolimits}
28 \gdef\asin{\mathop{\rm asin}\nolimits}
29 \gdef\atan{\mathop{\rm atan}\nolimits}
30 \gdef\acosh{\mathop{\rm acosh}\nolimits}
31 \gdef\asinh{\mathop{\rm asinh}\nolimits}
32 \gdef\atanh{\mathop{\rm atanh}\nolimits}
36 @node Intrinsic Procedures
37 @chapter Intrinsic Procedures
38 @cindex intrinsic procedures
41 * Introduction: Introduction to Intrinsics
42 * @code{ABORT}: ABORT, Abort the program
43 * @code{ABS}: ABS, Absolute value
44 * @code{ACCESS}: ACCESS, Checks file access modes
45 * @code{ACHAR}: ACHAR, Character in @acronym{ASCII} collating sequence
46 * @code{ACOS}: ACOS, Arccosine function
47 * @code{ACOSH}: ACOSH, Inverse hyperbolic cosine function
48 * @code{ADJUSTL}: ADJUSTL, Left adjust a string
49 * @code{ADJUSTR}: ADJUSTR, Right adjust a string
50 * @code{AIMAG}: AIMAG, Imaginary part of complex number
51 * @code{AINT}: AINT, Truncate to a whole number
52 * @code{ALARM}: ALARM, Set an alarm clock
53 * @code{ALL}: ALL, Determine if all values are true
54 * @code{ALLOCATED}: ALLOCATED, Status of allocatable entity
55 * @code{AND}: AND, Bitwise logical AND
56 * @code{ANINT}: ANINT, Nearest whole number
57 * @code{ANY}: ANY, Determine if any values are true
58 * @code{ASIN}: ASIN, Arcsine function
59 * @code{ASINH}: ASINH, Inverse hyperbolic sine function
60 * @code{ASSOCIATED}: ASSOCIATED, Status of a pointer or pointer/target pair
61 * @code{ATAN}: ATAN, Arctangent function
62 * @code{ATAN2}: ATAN2, Arctangent function
63 * @code{ATANH}: ATANH, Inverse hyperbolic tangent function
64 * @code{BESSEL_J0}: BESSEL_J0, Bessel function of the first kind of order 0
65 * @code{BESSEL_J1}: BESSEL_J1, Bessel function of the first kind of order 1
66 * @code{BESSEL_JN}: BESSEL_JN, Bessel function of the first kind
67 * @code{BESSEL_Y0}: BESSEL_Y0, Bessel function of the second kind of order 0
68 * @code{BESSEL_Y1}: BESSEL_Y1, Bessel function of the second kind of order 1
69 * @code{BESSEL_YN}: BESSEL_YN, Bessel function of the second kind
70 * @code{BGE}: BGE, Bitwise greater than or equal to
71 * @code{BGT}: BGT, Bitwise greater than
72 * @code{BIT_SIZE}: BIT_SIZE, Bit size inquiry function
73 * @code{BLE}: BLE, Bitwise less than or equal to
74 * @code{BLT}: BLT, Bitwise less than
75 * @code{BTEST}: BTEST, Bit test function
76 * @code{C_ASSOCIATED}: C_ASSOCIATED, Status of a C pointer
77 * @code{C_F_POINTER}: C_F_POINTER, Convert C into Fortran pointer
78 * @code{C_F_PROCPOINTER}: C_F_PROCPOINTER, Convert C into Fortran procedure pointer
79 * @code{C_FUNLOC}: C_FUNLOC, Obtain the C address of a procedure
80 * @code{C_LOC}: C_LOC, Obtain the C address of an object
81 * @code{C_SIZEOF}: C_SIZEOF, Size in bytes of an expression
82 * @code{CEILING}: CEILING, Integer ceiling function
83 * @code{CHAR}: CHAR, Integer-to-character conversion function
84 * @code{CHDIR}: CHDIR, Change working directory
85 * @code{CHMOD}: CHMOD, Change access permissions of files
86 * @code{CMPLX}: CMPLX, Complex conversion function
87 * @code{COMMAND_ARGUMENT_COUNT}: COMMAND_ARGUMENT_COUNT, Get number of command line arguments
88 * @code{COMPLEX}: COMPLEX, Complex conversion function
89 * @code{CONJG}: CONJG, Complex conjugate function
90 * @code{COS}: COS, Cosine function
91 * @code{COSH}: COSH, Hyperbolic cosine function
92 * @code{COUNT}: COUNT, Count occurrences of TRUE in an array
93 * @code{CPU_TIME}: CPU_TIME, CPU time subroutine
94 * @code{CSHIFT}: CSHIFT, Circular shift elements of an array
95 * @code{CTIME}: CTIME, Subroutine (or function) to convert a time into a string
96 * @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine
97 * @code{DBLE}: DBLE, Double precision conversion function
98 * @code{DCMPLX}: DCMPLX, Double complex conversion function
99 * @code{DIGITS}: DIGITS, Significant digits function
100 * @code{DIM}: DIM, Positive difference
101 * @code{DOT_PRODUCT}: DOT_PRODUCT, Dot product function
102 * @code{DPROD}: DPROD, Double product function
103 * @code{DREAL}: DREAL, Double real part function
104 * @code{DSHIFTL}: DSHIFTL, Combined left shift
105 * @code{DSHIFTR}: DSHIFTR, Combined right shift
106 * @code{DTIME}: DTIME, Execution time subroutine (or function)
107 * @code{EOSHIFT}: EOSHIFT, End-off shift elements of an array
108 * @code{EPSILON}: EPSILON, Epsilon function
109 * @code{ERF}: ERF, Error function
110 * @code{ERFC}: ERFC, Complementary error function
111 * @code{ERFC_SCALED}: ERFC_SCALED, Exponentially-scaled complementary error function
112 * @code{ETIME}: ETIME, Execution time subroutine (or function)
113 * @code{EXECUTE_COMMAND_LINE}: EXECUTE_COMMAND_LINE, Execute a shell command
114 * @code{EXIT}: EXIT, Exit the program with status.
115 * @code{EXP}: EXP, Exponential function
116 * @code{EXPONENT}: EXPONENT, Exponent function
117 * @code{EXTENDS_TYPE_OF}: EXTENDS_TYPE_OF, Query dynamic type for extension
118 * @code{FDATE}: FDATE, Subroutine (or function) to get the current time as a string
119 * @code{FGET}: FGET, Read a single character in stream mode from stdin
120 * @code{FGETC}: FGETC, Read a single character in stream mode
121 * @code{FLOOR}: FLOOR, Integer floor function
122 * @code{FLUSH}: FLUSH, Flush I/O unit(s)
123 * @code{FNUM}: FNUM, File number function
124 * @code{FPUT}: FPUT, Write a single character in stream mode to stdout
125 * @code{FPUTC}: FPUTC, Write a single character in stream mode
126 * @code{FRACTION}: FRACTION, Fractional part of the model representation
127 * @code{FREE}: FREE, Memory de-allocation subroutine
128 * @code{FSEEK}: FSEEK, Low level file positioning subroutine
129 * @code{FSTAT}: FSTAT, Get file status
130 * @code{FTELL}: FTELL, Current stream position
131 * @code{GAMMA}: GAMMA, Gamma function
132 * @code{GERROR}: GERROR, Get last system error message
133 * @code{GETARG}: GETARG, Get command line arguments
134 * @code{GET_COMMAND}: GET_COMMAND, Get the entire command line
135 * @code{GET_COMMAND_ARGUMENT}: GET_COMMAND_ARGUMENT, Get command line arguments
136 * @code{GETCWD}: GETCWD, Get current working directory
137 * @code{GETENV}: GETENV, Get an environmental variable
138 * @code{GET_ENVIRONMENT_VARIABLE}: GET_ENVIRONMENT_VARIABLE, Get an environmental variable
139 * @code{GETGID}: GETGID, Group ID function
140 * @code{GETLOG}: GETLOG, Get login name
141 * @code{GETPID}: GETPID, Process ID function
142 * @code{GETUID}: GETUID, User ID function
143 * @code{GMTIME}: GMTIME, Convert time to GMT info
144 * @code{HOSTNM}: HOSTNM, Get system host name
145 * @code{HUGE}: HUGE, Largest number of a kind
146 * @code{HYPOT}: HYPOT, Euclidian distance function
147 * @code{IACHAR}: IACHAR, Code in @acronym{ASCII} collating sequence
148 * @code{IALL}: IALL, Bitwise AND of array elements
149 * @code{IAND}: IAND, Bitwise logical and
150 * @code{IANY}: IANY, Bitwise OR of array elements
151 * @code{IARGC}: IARGC, Get the number of command line arguments
152 * @code{IBCLR}: IBCLR, Clear bit
153 * @code{IBITS}: IBITS, Bit extraction
154 * @code{IBSET}: IBSET, Set bit
155 * @code{ICHAR}: ICHAR, Character-to-integer conversion function
156 * @code{IDATE}: IDATE, Current local time (day/month/year)
157 * @code{IEOR}: IEOR, Bitwise logical exclusive or
158 * @code{IERRNO}: IERRNO, Function to get the last system error number
159 * @code{IMAGE_INDEX}: IMAGE_INDEX, Cosubscript to image index convertion
160 * @code{INDEX}: INDEX intrinsic, Position of a substring within a string
161 * @code{INT}: INT, Convert to integer type
162 * @code{INT2}: INT2, Convert to 16-bit integer type
163 * @code{INT8}: INT8, Convert to 64-bit integer type
164 * @code{IOR}: IOR, Bitwise logical or
165 * @code{IPARITY}: IPARITY, Bitwise XOR of array elements
166 * @code{IRAND}: IRAND, Integer pseudo-random number
167 * @code{IS_IOSTAT_END}: IS_IOSTAT_END, Test for end-of-file value
168 * @code{IS_IOSTAT_EOR}: IS_IOSTAT_EOR, Test for end-of-record value
169 * @code{ISATTY}: ISATTY, Whether a unit is a terminal device
170 * @code{ISHFT}: ISHFT, Shift bits
171 * @code{ISHFTC}: ISHFTC, Shift bits circularly
172 * @code{ISNAN}: ISNAN, Tests for a NaN
173 * @code{ITIME}: ITIME, Current local time (hour/minutes/seconds)
174 * @code{KILL}: KILL, Send a signal to a process
175 * @code{KIND}: KIND, Kind of an entity
176 * @code{LBOUND}: LBOUND, Lower dimension bounds of an array
177 * @code{LCOBOUND}: LCOBOUND, Lower codimension bounds of an array
178 * @code{LEADZ}: LEADZ, Number of leading zero bits of an integer
179 * @code{LEN}: LEN, Length of a character entity
180 * @code{LEN_TRIM}: LEN_TRIM, Length of a character entity without trailing blank characters
181 * @code{LGE}: LGE, Lexical greater than or equal
182 * @code{LGT}: LGT, Lexical greater than
183 * @code{LINK}: LINK, Create a hard link
184 * @code{LLE}: LLE, Lexical less than or equal
185 * @code{LLT}: LLT, Lexical less than
186 * @code{LNBLNK}: LNBLNK, Index of the last non-blank character in a string
187 * @code{LOC}: LOC, Returns the address of a variable
188 * @code{LOG}: LOG, Logarithm function
189 * @code{LOG10}: LOG10, Base 10 logarithm function
190 * @code{LOG_GAMMA}: LOG_GAMMA, Logarithm of the Gamma function
191 * @code{LOGICAL}: LOGICAL, Convert to logical type
192 * @code{LONG}: LONG, Convert to integer type
193 * @code{LSHIFT}: LSHIFT, Left shift bits
194 * @code{LSTAT}: LSTAT, Get file status
195 * @code{LTIME}: LTIME, Convert time to local time info
196 * @code{MALLOC}: MALLOC, Dynamic memory allocation function
197 * @code{MASKL}: MASKL, Left justified mask
198 * @code{MASKR}: MASKR, Right justified mask
199 * @code{MATMUL}: MATMUL, matrix multiplication
200 * @code{MAX}: MAX, Maximum value of an argument list
201 * @code{MAXEXPONENT}: MAXEXPONENT, Maximum exponent of a real kind
202 * @code{MAXLOC}: MAXLOC, Location of the maximum value within an array
203 * @code{MAXVAL}: MAXVAL, Maximum value of an array
204 * @code{MCLOCK}: MCLOCK, Time function
205 * @code{MCLOCK8}: MCLOCK8, Time function (64-bit)
206 * @code{MERGE}: MERGE, Merge arrays
207 * @code{MERGE_BITS}: MERGE_BITS, Merge of bits under mask
208 * @code{MIN}: MIN, Minimum value of an argument list
209 * @code{MINEXPONENT}: MINEXPONENT, Minimum exponent of a real kind
210 * @code{MINLOC}: MINLOC, Location of the minimum value within an array
211 * @code{MINVAL}: MINVAL, Minimum value of an array
212 * @code{MOD}: MOD, Remainder function
213 * @code{MODULO}: MODULO, Modulo function
214 * @code{MOVE_ALLOC}: MOVE_ALLOC, Move allocation from one object to another
215 * @code{MVBITS}: MVBITS, Move bits from one integer to another
216 * @code{NEAREST}: NEAREST, Nearest representable number
217 * @code{NEW_LINE}: NEW_LINE, New line character
218 * @code{NINT}: NINT, Nearest whole number
219 * @code{NORM2}: NORM2, Euclidean vector norm
220 * @code{NOT}: NOT, Logical negation
221 * @code{NULL}: NULL, Function that returns an disassociated pointer
222 * @code{NUM_IMAGES}: NUM_IMAGES, Number of images
223 * @code{OR}: OR, Bitwise logical OR
224 * @code{PACK}: PACK, Pack an array into an array of rank one
225 * @code{PARITY}: PARITY, Reduction with exclusive OR
226 * @code{PERROR}: PERROR, Print system error message
227 * @code{POPCNT}: POPCNT, Number of bits set
228 * @code{POPPAR}: POPPAR, Parity of the number of bits set
229 * @code{PRECISION}: PRECISION, Decimal precision of a real kind
230 * @code{PRESENT}: PRESENT, Determine whether an optional dummy argument is specified
231 * @code{PRODUCT}: PRODUCT, Product of array elements
232 * @code{RADIX}: RADIX, Base of a data model
233 * @code{RANDOM_NUMBER}: RANDOM_NUMBER, Pseudo-random number
234 * @code{RANDOM_SEED}: RANDOM_SEED, Initialize a pseudo-random number sequence
235 * @code{RAND}: RAND, Real pseudo-random number
236 * @code{RANGE}: RANGE, Decimal exponent range
237 * @code{RAN}: RAN, Real pseudo-random number
238 * @code{REAL}: REAL, Convert to real type
239 * @code{RENAME}: RENAME, Rename a file
240 * @code{REPEAT}: REPEAT, Repeated string concatenation
241 * @code{RESHAPE}: RESHAPE, Function to reshape an array
242 * @code{RRSPACING}: RRSPACING, Reciprocal of the relative spacing
243 * @code{RSHIFT}: RSHIFT, Right shift bits
244 * @code{SAME_TYPE_AS}: SAME_TYPE_AS, Query dynamic types for equality
245 * @code{SCALE}: SCALE, Scale a real value
246 * @code{SCAN}: SCAN, Scan a string for the presence of a set of characters
247 * @code{SECNDS}: SECNDS, Time function
248 * @code{SECOND}: SECOND, CPU time function
249 * @code{SELECTED_CHAR_KIND}: SELECTED_CHAR_KIND, Choose character kind
250 * @code{SELECTED_INT_KIND}: SELECTED_INT_KIND, Choose integer kind
251 * @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND, Choose real kind
252 * @code{SET_EXPONENT}: SET_EXPONENT, Set the exponent of the model
253 * @code{SHAPE}: SHAPE, Determine the shape of an array
254 * @code{SHIFTA}: SHIFTA, Right shift with fill
255 * @code{SHIFTL}: SHIFTL, Left shift
256 * @code{SHIFTR}: SHIFTR, Right shift
257 * @code{SIGN}: SIGN, Sign copying function
258 * @code{SIGNAL}: SIGNAL, Signal handling subroutine (or function)
259 * @code{SIN}: SIN, Sine function
260 * @code{SINH}: SINH, Hyperbolic sine function
261 * @code{SIZE}: SIZE, Function to determine the size of an array
262 * @code{SIZEOF}: SIZEOF, Determine the size in bytes of an expression
263 * @code{SLEEP}: SLEEP, Sleep for the specified number of seconds
264 * @code{SPACING}: SPACING, Smallest distance between two numbers of a given type
265 * @code{SPREAD}: SPREAD, Add a dimension to an array
266 * @code{SQRT}: SQRT, Square-root function
267 * @code{SRAND}: SRAND, Reinitialize the random number generator
268 * @code{STAT}: STAT, Get file status
269 * @code{STORAGE_SIZE}: STORAGE_SIZE, Storage size in bits
270 * @code{SUM}: SUM, Sum of array elements
271 * @code{SYMLNK}: SYMLNK, Create a symbolic link
272 * @code{SYSTEM}: SYSTEM, Execute a shell command
273 * @code{SYSTEM_CLOCK}: SYSTEM_CLOCK, Time function
274 * @code{TAN}: TAN, Tangent function
275 * @code{TANH}: TANH, Hyperbolic tangent function
276 * @code{THIS_IMAGE}: THIS_IMAGE, Cosubscript index of this image
277 * @code{TIME}: TIME, Time function
278 * @code{TIME8}: TIME8, Time function (64-bit)
279 * @code{TINY}: TINY, Smallest positive number of a real kind
280 * @code{TRAILZ}: TRAILZ, Number of trailing zero bits of an integer
281 * @code{TRANSFER}: TRANSFER, Transfer bit patterns
282 * @code{TRANSPOSE}: TRANSPOSE, Transpose an array of rank two
283 * @code{TRIM}: TRIM, Remove trailing blank characters of a string
284 * @code{TTYNAM}: TTYNAM, Get the name of a terminal device.
285 * @code{UBOUND}: UBOUND, Upper dimension bounds of an array
286 * @code{UCOBOUND}: UCOBOUND, Upper codimension bounds of an array
287 * @code{UMASK}: UMASK, Set the file creation mask
288 * @code{UNLINK}: UNLINK, Remove a file from the file system
289 * @code{UNPACK}: UNPACK, Unpack an array of rank one into an array
290 * @code{VERIFY}: VERIFY, Scan a string for the absence of a set of characters
291 * @code{XOR}: XOR, Bitwise logical exclusive or
294 @node Introduction to Intrinsics
295 @section Introduction to intrinsic procedures
297 The intrinsic procedures provided by GNU Fortran include all of the
298 intrinsic procedures required by the Fortran 95 standard, a set of
299 intrinsic procedures for backwards compatibility with G77, and a
300 selection of intrinsic procedures from the Fortran 2003 and Fortran 2008
301 standards. Any conflict between a description here and a description in
302 either the Fortran 95 standard, the Fortran 2003 standard or the Fortran
303 2008 standard is unintentional, and the standard(s) should be considered
306 The enumeration of the @code{KIND} type parameter is processor defined in
307 the Fortran 95 standard. GNU Fortran defines the default integer type and
308 default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)},
309 respectively. The standard mandates that both data types shall have
310 another kind, which have more precision. On typical target architectures
311 supported by @command{gfortran}, this kind type parameter is @code{KIND=8}.
312 Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent.
313 In the description of generic intrinsic procedures, the kind type parameter
314 will be specified by @code{KIND=*}, and in the description of specific
315 names for an intrinsic procedure the kind type parameter will be explicitly
316 given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}). Finally, for
317 brevity the optional @code{KIND=} syntax will be omitted.
319 Many of the intrinsic procedures take one or more optional arguments.
320 This document follows the convention used in the Fortran 95 standard,
321 and denotes such arguments by square brackets.
323 GNU Fortran offers the @option{-std=f95} and @option{-std=gnu} options,
324 which can be used to restrict the set of intrinsic procedures to a
325 given standard. By default, @command{gfortran} sets the @option{-std=gnu}
326 option, and so all intrinsic procedures described here are accepted. There
327 is one caveat. For a select group of intrinsic procedures, @command{g77}
328 implemented both a function and a subroutine. Both classes
329 have been implemented in @command{gfortran} for backwards compatibility
330 with @command{g77}. It is noted here that these functions and subroutines
331 cannot be intermixed in a given subprogram. In the descriptions that follow,
332 the applicable standard for each intrinsic procedure is noted.
337 @section @code{ABORT} --- Abort the program
339 @cindex program termination, with core dump
340 @cindex terminate program, with core dump
344 @item @emph{Description}:
345 @code{ABORT} causes immediate termination of the program. On operating
346 systems that support a core dump, @code{ABORT} will produce a core dump even if
347 the option @option{-fno-dump-core} is in effect, which is suitable for debugging
349 @c TODO: Check if this (with -fno-dump-core) is correct.
351 @item @emph{Standard}:
360 @item @emph{Return value}:
363 @item @emph{Example}:
366 integer :: i = 1, j = 2
367 if (i /= j) call abort
368 end program test_abort
371 @item @emph{See also}:
372 @ref{EXIT}, @ref{KILL}
379 @section @code{ABS} --- Absolute value
386 @cindex absolute value
389 @item @emph{Description}:
390 @code{ABS(A)} computes the absolute value of @code{A}.
392 @item @emph{Standard}:
393 Fortran 77 and later, has overloads that are GNU extensions
399 @code{RESULT = ABS(A)}
401 @item @emph{Arguments}:
402 @multitable @columnfractions .15 .70
403 @item @var{A} @tab The type of the argument shall be an @code{INTEGER},
404 @code{REAL}, or @code{COMPLEX}.
407 @item @emph{Return value}:
408 The return value is of the same type and
409 kind as the argument except the return value is @code{REAL} for a
410 @code{COMPLEX} argument.
412 @item @emph{Example}:
417 complex :: z = (-1.e0,0.e0)
424 @item @emph{Specific names}:
425 @multitable @columnfractions .20 .20 .20 .25
426 @item Name @tab Argument @tab Return type @tab Standard
427 @item @code{ABS(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
428 @item @code{CABS(A)} @tab @code{COMPLEX(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
429 @item @code{DABS(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)} @tab Fortran 77 and later
430 @item @code{IABS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab Fortran 77 and later
431 @item @code{ZABS(A)} @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
432 @item @code{CDABS(A)} @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
439 @section @code{ACCESS} --- Checks file access modes
441 @cindex file system, access mode
444 @item @emph{Description}:
445 @code{ACCESS(NAME, MODE)} checks whether the file @var{NAME}
446 exists, is readable, writable or executable. Except for the
447 executable check, @code{ACCESS} can be replaced by
448 Fortran 95's @code{INQUIRE}.
450 @item @emph{Standard}:
457 @code{RESULT = ACCESS(NAME, MODE)}
459 @item @emph{Arguments}:
460 @multitable @columnfractions .15 .70
461 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
462 file name. Tailing blank are ignored unless the character @code{achar(0)}
463 is present, then all characters up to and excluding @code{achar(0)} are
465 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind with the
466 file access mode, may be any concatenation of @code{"r"} (readable),
467 @code{"w"} (writable) and @code{"x"} (executable), or @code{" "} to check
471 @item @emph{Return value}:
472 Returns a scalar @code{INTEGER}, which is @code{0} if the file is
473 accessible in the given mode; otherwise or if an invalid argument
474 has been given for @code{MODE} the value @code{1} is returned.
476 @item @emph{Example}:
480 character(len=*), parameter :: file = 'test.dat'
481 character(len=*), parameter :: file2 = 'test.dat '//achar(0)
482 if(access(file,' ') == 0) print *, trim(file),' is exists'
483 if(access(file,'r') == 0) print *, trim(file),' is readable'
484 if(access(file,'w') == 0) print *, trim(file),' is writable'
485 if(access(file,'x') == 0) print *, trim(file),' is executable'
486 if(access(file2,'rwx') == 0) &
487 print *, trim(file2),' is readable, writable and executable'
488 end program access_test
490 @item @emph{Specific names}:
491 @item @emph{See also}:
498 @section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence
500 @cindex @acronym{ASCII} collating sequence
501 @cindex collating sequence, @acronym{ASCII}
504 @item @emph{Description}:
505 @code{ACHAR(I)} returns the character located at position @code{I}
506 in the @acronym{ASCII} collating sequence.
508 @item @emph{Standard}:
509 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
515 @code{RESULT = ACHAR(I [, KIND])}
517 @item @emph{Arguments}:
518 @multitable @columnfractions .15 .70
519 @item @var{I} @tab The type shall be @code{INTEGER}.
520 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
521 expression indicating the kind parameter of the result.
524 @item @emph{Return value}:
525 The return value is of type @code{CHARACTER} with a length of one.
526 If the @var{KIND} argument is present, the return value is of the
527 specified kind and of the default kind otherwise.
529 @item @emph{Example}:
534 end program test_achar
538 See @ref{ICHAR} for a discussion of converting between numerical values
539 and formatted string representations.
541 @item @emph{See also}:
542 @ref{CHAR}, @ref{IACHAR}, @ref{ICHAR}
549 @section @code{ACOS} --- Arccosine function
552 @cindex trigonometric function, cosine, inverse
553 @cindex cosine, inverse
556 @item @emph{Description}:
557 @code{ACOS(X)} computes the arccosine of @var{X} (inverse of @code{COS(X)}).
559 @item @emph{Standard}:
560 Fortran 77 and later, for a complex argument Fortran 2008 or later
566 @code{RESULT = ACOS(X)}
568 @item @emph{Arguments}:
569 @multitable @columnfractions .15 .70
570 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
571 less than or equal to one - or the type shall be @code{COMPLEX}.
574 @item @emph{Return value}:
575 The return value is of the same type and kind as @var{X}.
576 The real part of the result is in radians and lies in the range
577 @math{0 \leq \Re \acos(x) \leq \pi}.
579 @item @emph{Example}:
582 real(8) :: x = 0.866_8
584 end program test_acos
587 @item @emph{Specific names}:
588 @multitable @columnfractions .20 .20 .20 .25
589 @item Name @tab Argument @tab Return type @tab Standard
590 @item @code{ACOS(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
591 @item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
594 @item @emph{See also}:
595 Inverse function: @ref{COS}
602 @section @code{ACOSH} --- Inverse hyperbolic cosine function
605 @cindex area hyperbolic cosine
606 @cindex inverse hyperbolic cosine
607 @cindex hyperbolic function, cosine, inverse
608 @cindex cosine, hyperbolic, inverse
611 @item @emph{Description}:
612 @code{ACOSH(X)} computes the inverse hyperbolic cosine of @var{X}.
614 @item @emph{Standard}:
615 Fortran 2008 and later
621 @code{RESULT = ACOSH(X)}
623 @item @emph{Arguments}:
624 @multitable @columnfractions .15 .70
625 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
628 @item @emph{Return value}:
629 The return value has the same type and kind as @var{X}. If @var{X} is
630 complex, the imaginary part of the result is in radians and lies between
631 @math{ 0 \leq \Im \acosh(x) \leq \pi}.
633 @item @emph{Example}:
636 REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)
641 @item @emph{Specific names}:
642 @multitable @columnfractions .20 .20 .20 .25
643 @item Name @tab Argument @tab Return type @tab Standard
644 @item @code{DACOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
647 @item @emph{See also}:
648 Inverse function: @ref{COSH}
654 @section @code{ADJUSTL} --- Left adjust a string
656 @cindex string, adjust left
657 @cindex adjust string
660 @item @emph{Description}:
661 @code{ADJUSTL(STRING)} will left adjust a string by removing leading spaces.
662 Spaces are inserted at the end of the string as needed.
664 @item @emph{Standard}:
671 @code{RESULT = ADJUSTL(STRING)}
673 @item @emph{Arguments}:
674 @multitable @columnfractions .15 .70
675 @item @var{STRING} @tab The type shall be @code{CHARACTER}.
678 @item @emph{Return value}:
679 The return value is of type @code{CHARACTER} and of the same kind as
680 @var{STRING} where leading spaces are removed and the same number of
681 spaces are inserted on the end of @var{STRING}.
683 @item @emph{Example}:
686 character(len=20) :: str = ' gfortran'
689 end program test_adjustl
692 @item @emph{See also}:
693 @ref{ADJUSTR}, @ref{TRIM}
699 @section @code{ADJUSTR} --- Right adjust a string
701 @cindex string, adjust right
702 @cindex adjust string
705 @item @emph{Description}:
706 @code{ADJUSTR(STRING)} will right adjust a string by removing trailing spaces.
707 Spaces are inserted at the start of the string as needed.
709 @item @emph{Standard}:
716 @code{RESULT = ADJUSTR(STRING)}
718 @item @emph{Arguments}:
719 @multitable @columnfractions .15 .70
720 @item @var{STR} @tab The type shall be @code{CHARACTER}.
723 @item @emph{Return value}:
724 The return value is of type @code{CHARACTER} and of the same kind as
725 @var{STRING} where trailing spaces are removed and the same number of
726 spaces are inserted at the start of @var{STRING}.
728 @item @emph{Example}:
731 character(len=20) :: str = 'gfortran'
734 end program test_adjustr
737 @item @emph{See also}:
738 @ref{ADJUSTL}, @ref{TRIM}
744 @section @code{AIMAG} --- Imaginary part of complex number
749 @cindex complex numbers, imaginary part
752 @item @emph{Description}:
753 @code{AIMAG(Z)} yields the imaginary part of complex argument @code{Z}.
754 The @code{IMAG(Z)} and @code{IMAGPART(Z)} intrinsic functions are provided
755 for compatibility with @command{g77}, and their use in new code is
756 strongly discouraged.
758 @item @emph{Standard}:
759 Fortran 77 and later, has overloads that are GNU extensions
765 @code{RESULT = AIMAG(Z)}
767 @item @emph{Arguments}:
768 @multitable @columnfractions .15 .70
769 @item @var{Z} @tab The type of the argument shall be @code{COMPLEX}.
772 @item @emph{Return value}:
773 The return value is of type @code{REAL} with the
774 kind type parameter of the argument.
776 @item @emph{Example}:
781 z4 = cmplx(1.e0_4, 0.e0_4)
782 z8 = cmplx(0.e0_8, 1.e0_8)
783 print *, aimag(z4), dimag(z8)
784 end program test_aimag
787 @item @emph{Specific names}:
788 @multitable @columnfractions .20 .20 .20 .25
789 @item Name @tab Argument @tab Return type @tab Standard
790 @item @code{AIMAG(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension
791 @item @code{DIMAG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)} @tab GNU extension
792 @item @code{IMAG(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension
793 @item @code{IMAGPART(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension
800 @section @code{AINT} --- Truncate to a whole number
804 @cindex rounding, floor
807 @item @emph{Description}:
808 @code{AINT(A [, KIND])} truncates its argument to a whole number.
810 @item @emph{Standard}:
817 @code{RESULT = AINT(A [, KIND])}
819 @item @emph{Arguments}:
820 @multitable @columnfractions .15 .70
821 @item @var{A} @tab The type of the argument shall be @code{REAL}.
822 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
823 expression indicating the kind parameter of the result.
826 @item @emph{Return value}:
827 The return value is of type @code{REAL} with the kind type parameter of the
828 argument if the optional @var{KIND} is absent; otherwise, the kind
829 type parameter will be given by @var{KIND}. If the magnitude of
830 @var{X} is less than one, @code{AINT(X)} returns zero. If the
831 magnitude is equal to or greater than one then it returns the largest
832 whole number that does not exceed its magnitude. The sign is the same
833 as the sign of @var{X}.
835 @item @emph{Example}:
842 print *, aint(x4), dint(x8)
844 end program test_aint
847 @item @emph{Specific names}:
848 @multitable @columnfractions .20 .20 .20 .25
849 @item Name @tab Argument @tab Return type @tab Standard
850 @item @code{AINT(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
851 @item @code{DINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)} @tab Fortran 77 and later
858 @section @code{ALARM} --- Execute a routine after a given delay
860 @cindex delayed execution
863 @item @emph{Description}:
864 @code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER}
865 to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to
866 set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is
867 supplied, it will be returned with the number of seconds remaining until
868 any previously scheduled alarm was due to be delivered, or zero if there
869 was no previously scheduled alarm.
871 @item @emph{Standard}:
878 @code{CALL ALARM(SECONDS, HANDLER [, STATUS])}
880 @item @emph{Arguments}:
881 @multitable @columnfractions .15 .70
882 @item @var{SECONDS} @tab The type of the argument shall be a scalar
883 @code{INTEGER}. It is @code{INTENT(IN)}.
884 @item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or
885 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar
886 values may be either @code{SIG_IGN=1} to ignore the alarm generated
887 or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}.
888 @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
889 variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}.
892 @item @emph{Example}:
895 external handler_print
897 call alarm (3, handler_print, i)
900 end program test_alarm
902 This will cause the external routine @var{handler_print} to be called
909 @section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true
911 @cindex array, apply condition
912 @cindex array, condition testing
915 @item @emph{Description}:
916 @code{ALL(MASK [, DIM])} determines if all the values are true in @var{MASK}
917 in the array along dimension @var{DIM}.
919 @item @emph{Standard}:
923 Transformational function
926 @code{RESULT = ALL(MASK [, DIM])}
928 @item @emph{Arguments}:
929 @multitable @columnfractions .15 .70
930 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
931 it shall not be scalar.
932 @item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer
933 with a value that lies between one and the rank of @var{MASK}.
936 @item @emph{Return value}:
937 @code{ALL(MASK)} returns a scalar value of type @code{LOGICAL} where
938 the kind type parameter is the same as the kind type parameter of
939 @var{MASK}. If @var{DIM} is present, then @code{ALL(MASK, DIM)} returns
940 an array with the rank of @var{MASK} minus 1. The shape is determined from
941 the shape of @var{MASK} where the @var{DIM} dimension is elided.
945 @code{ALL(MASK)} is true if all elements of @var{MASK} are true.
946 It also is true if @var{MASK} has zero size; otherwise, it is false.
948 If the rank of @var{MASK} is one, then @code{ALL(MASK,DIM)} is equivalent
949 to @code{ALL(MASK)}. If the rank is greater than one, then @code{ALL(MASK,DIM)}
950 is determined by applying @code{ALL} to the array sections.
953 @item @emph{Example}:
957 l = all((/.true., .true., .true./))
962 integer a(2,3), b(2,3)
966 print *, all(a .eq. b, 1)
967 print *, all(a .eq. b, 2)
968 end subroutine section
976 @section @code{ALLOCATED} --- Status of an allocatable entity
978 @cindex allocation, status
981 @item @emph{Description}:
982 @code{ALLOCATED(ARRAY)} and @code{ALLOCATED(SCALAR)} check the allocation
983 status of @var{ARRAY} and @var{SCALAR}, respectively.
985 @item @emph{Standard}:
986 Fortran 95 and later. Note, the @code{SCALAR=} keyword and allocatable
987 scalar entities are available in Fortran 2003 and later.
993 @code{RESULT = ALLOCATED(ARRAY)} or @code{RESULT = ALLOCATED(SCALAR)}
995 @item @emph{Arguments}:
996 @multitable @columnfractions .15 .70
997 @item @var{ARRAY} @tab The argument shall be an @code{ALLOCATABLE} array.
998 @item @var{SCALAR} @tab The argument shall be an @code{ALLOCATABLE} scalar.
1001 @item @emph{Return value}:
1002 The return value is a scalar @code{LOGICAL} with the default logical
1003 kind type parameter. If the argument is allocated, then the result is
1004 @code{.TRUE.}; otherwise, it returns @code{.FALSE.}
1006 @item @emph{Example}:
1008 program test_allocated
1010 real(4), allocatable :: x(:)
1011 if (.not. allocated(x)) allocate(x(i))
1012 end program test_allocated
1019 @section @code{AND} --- Bitwise logical AND
1021 @cindex bitwise logical and
1022 @cindex logical and, bitwise
1025 @item @emph{Description}:
1026 Bitwise logical @code{AND}.
1028 This intrinsic routine is provided for backwards compatibility with
1029 GNU Fortran 77. For integer arguments, programmers should consider
1030 the use of the @ref{IAND} intrinsic defined by the Fortran standard.
1032 @item @emph{Standard}:
1038 @item @emph{Syntax}:
1039 @code{RESULT = AND(I, J)}
1041 @item @emph{Arguments}:
1042 @multitable @columnfractions .15 .70
1043 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
1044 type or a scalar @code{LOGICAL} type.
1045 @item @var{J} @tab The type shall be the same as the type of @var{I}.
1048 @item @emph{Return value}:
1049 The return type is either a scalar @code{INTEGER} or a scalar
1050 @code{LOGICAL}. If the kind type parameters differ, then the
1051 smaller kind type is implicitly converted to larger kind, and the
1052 return has the larger kind.
1054 @item @emph{Example}:
1057 LOGICAL :: T = .TRUE., F = .FALSE.
1059 DATA a / Z'F' /, b / Z'3' /
1061 WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)
1062 WRITE (*,*) AND(a, b)
1066 @item @emph{See also}:
1067 Fortran 95 elemental function: @ref{IAND}
1073 @section @code{ANINT} --- Nearest whole number
1077 @cindex rounding, ceiling
1080 @item @emph{Description}:
1081 @code{ANINT(A [, KIND])} rounds its argument to the nearest whole number.
1083 @item @emph{Standard}:
1084 Fortran 77 and later
1089 @item @emph{Syntax}:
1090 @code{RESULT = ANINT(A [, KIND])}
1092 @item @emph{Arguments}:
1093 @multitable @columnfractions .15 .70
1094 @item @var{A} @tab The type of the argument shall be @code{REAL}.
1095 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
1096 expression indicating the kind parameter of the result.
1099 @item @emph{Return value}:
1100 The return value is of type real with the kind type parameter of the
1101 argument if the optional @var{KIND} is absent; otherwise, the kind
1102 type parameter will be given by @var{KIND}. If @var{A} is greater than
1103 zero, @code{ANINT(A)} returns @code{AINT(X+0.5)}. If @var{A} is
1104 less than or equal to zero then it returns @code{AINT(X-0.5)}.
1106 @item @emph{Example}:
1113 print *, anint(x4), dnint(x8)
1115 end program test_anint
1118 @item @emph{Specific names}:
1119 @multitable @columnfractions .20 .20 .20 .25
1120 @item Name @tab Argument @tab Return type @tab Standard
1121 @item @code{AINT(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
1122 @item @code{DNINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)} @tab Fortran 77 and later
1129 @section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true
1131 @cindex array, apply condition
1132 @cindex array, condition testing
1135 @item @emph{Description}:
1136 @code{ANY(MASK [, DIM])} determines if any of the values in the logical array
1137 @var{MASK} along dimension @var{DIM} are @code{.TRUE.}.
1139 @item @emph{Standard}:
1140 Fortran 95 and later
1143 Transformational function
1145 @item @emph{Syntax}:
1146 @code{RESULT = ANY(MASK [, DIM])}
1148 @item @emph{Arguments}:
1149 @multitable @columnfractions .15 .70
1150 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
1151 it shall not be scalar.
1152 @item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer
1153 with a value that lies between one and the rank of @var{MASK}.
1156 @item @emph{Return value}:
1157 @code{ANY(MASK)} returns a scalar value of type @code{LOGICAL} where
1158 the kind type parameter is the same as the kind type parameter of
1159 @var{MASK}. If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns
1160 an array with the rank of @var{MASK} minus 1. The shape is determined from
1161 the shape of @var{MASK} where the @var{DIM} dimension is elided.
1165 @code{ANY(MASK)} is true if any element of @var{MASK} is true;
1166 otherwise, it is false. It also is false if @var{MASK} has zero size.
1168 If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent
1169 to @code{ANY(MASK)}. If the rank is greater than one, then @code{ANY(MASK,DIM)}
1170 is determined by applying @code{ANY} to the array sections.
1173 @item @emph{Example}:
1177 l = any((/.true., .true., .true./))
1182 integer a(2,3), b(2,3)
1186 print *, any(a .eq. b, 1)
1187 print *, any(a .eq. b, 2)
1188 end subroutine section
1189 end program test_any
1196 @section @code{ASIN} --- Arcsine function
1199 @cindex trigonometric function, sine, inverse
1200 @cindex sine, inverse
1203 @item @emph{Description}:
1204 @code{ASIN(X)} computes the arcsine of its @var{X} (inverse of @code{SIN(X)}).
1206 @item @emph{Standard}:
1207 Fortran 77 and later, for a complex argument Fortran 2008 or later
1212 @item @emph{Syntax}:
1213 @code{RESULT = ASIN(X)}
1215 @item @emph{Arguments}:
1216 @multitable @columnfractions .15 .70
1217 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
1218 less than or equal to one - or be @code{COMPLEX}.
1221 @item @emph{Return value}:
1222 The return value is of the same type and kind as @var{X}.
1223 The real part of the result is in radians and lies in the range
1224 @math{-\pi/2 \leq \Re \asin(x) \leq \pi/2}.
1226 @item @emph{Example}:
1229 real(8) :: x = 0.866_8
1231 end program test_asin
1234 @item @emph{Specific names}:
1235 @multitable @columnfractions .20 .20 .20 .25
1236 @item Name @tab Argument @tab Return type @tab Standard
1237 @item @code{ASIN(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
1238 @item @code{DASIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
1241 @item @emph{See also}:
1242 Inverse function: @ref{SIN}
1249 @section @code{ASINH} --- Inverse hyperbolic sine function
1252 @cindex area hyperbolic sine
1253 @cindex inverse hyperbolic sine
1254 @cindex hyperbolic function, sine, inverse
1255 @cindex sine, hyperbolic, inverse
1258 @item @emph{Description}:
1259 @code{ASINH(X)} computes the inverse hyperbolic sine of @var{X}.
1261 @item @emph{Standard}:
1262 Fortran 2008 and later
1267 @item @emph{Syntax}:
1268 @code{RESULT = ASINH(X)}
1270 @item @emph{Arguments}:
1271 @multitable @columnfractions .15 .70
1272 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1275 @item @emph{Return value}:
1276 The return value is of the same type and kind as @var{X}. If @var{X} is
1277 complex, the imaginary part of the result is in radians and lies between
1278 @math{-\pi/2 \leq \Im \asinh(x) \leq \pi/2}.
1280 @item @emph{Example}:
1283 REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1284 WRITE (*,*) ASINH(x)
1288 @item @emph{Specific names}:
1289 @multitable @columnfractions .20 .20 .20 .25
1290 @item Name @tab Argument @tab Return type @tab Standard
1291 @item @code{DASINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension.
1294 @item @emph{See also}:
1295 Inverse function: @ref{SINH}
1301 @section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair
1303 @cindex pointer, status
1304 @cindex association status
1307 @item @emph{Description}:
1308 @code{ASSOCIATED(POINTER [, TARGET])} determines the status of the pointer
1309 @var{POINTER} or if @var{POINTER} is associated with the target @var{TARGET}.
1311 @item @emph{Standard}:
1312 Fortran 95 and later
1317 @item @emph{Syntax}:
1318 @code{RESULT = ASSOCIATED(POINTER [, TARGET])}
1320 @item @emph{Arguments}:
1321 @multitable @columnfractions .15 .70
1322 @item @var{POINTER} @tab @var{POINTER} shall have the @code{POINTER} attribute
1323 and it can be of any type.
1324 @item @var{TARGET} @tab (Optional) @var{TARGET} shall be a pointer or
1325 a target. It must have the same type, kind type parameter, and
1326 array rank as @var{POINTER}.
1328 The association status of neither @var{POINTER} nor @var{TARGET} shall be
1331 @item @emph{Return value}:
1332 @code{ASSOCIATED(POINTER)} returns a scalar value of type @code{LOGICAL(4)}.
1333 There are several cases:
1335 @item (A) When the optional @var{TARGET} is not present then
1336 @code{ASSOCIATED(POINTER)} is true if @var{POINTER} is associated with a target; otherwise, it returns false.
1337 @item (B) If @var{TARGET} is present and a scalar target, the result is true if
1338 @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
1339 disassociated, the result is false.
1340 @item (C) If @var{TARGET} is present and an array target, the result is true if
1341 @var{TARGET} and @var{POINTER} have the same shape, are not zero-sized arrays,
1342 are arrays whose elements are not zero-sized storage sequences, and
1343 @var{TARGET} and @var{POINTER} occupy the same storage units in array element
1345 As in case(B), the result is false, if @var{POINTER} is disassociated.
1346 @item (D) If @var{TARGET} is present and an scalar pointer, the result is true
1347 if @var{TARGET} is associated with @var{POINTER}, the target associated with
1348 @var{TARGET} are not zero-sized storage sequences and occupy the same storage
1350 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1351 @item (E) If @var{TARGET} is present and an array pointer, the result is true if
1352 target associated with @var{POINTER} and the target associated with @var{TARGET}
1353 have the same shape, are not zero-sized arrays, are arrays whose elements are
1354 not zero-sized storage sequences, and @var{TARGET} and @var{POINTER} occupy
1355 the same storage units in array element order.
1356 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1359 @item @emph{Example}:
1361 program test_associated
1363 real, target :: tgt(2) = (/1., 2./)
1364 real, pointer :: ptr(:)
1366 if (associated(ptr) .eqv. .false.) call abort
1367 if (associated(ptr,tgt) .eqv. .false.) call abort
1368 end program test_associated
1371 @item @emph{See also}:
1378 @section @code{ATAN} --- Arctangent function
1381 @cindex trigonometric function, tangent, inverse
1382 @cindex tangent, inverse
1385 @item @emph{Description}:
1386 @code{ATAN(X)} computes the arctangent of @var{X}.
1388 @item @emph{Standard}:
1389 Fortran 77 and later, for a complex argument and for two arguments
1390 Fortran 2008 or later
1395 @item @emph{Syntax}:
1396 @code{RESULT = ATAN(X)}
1397 @code{RESULT = ATAN(Y, X)}
1399 @item @emph{Arguments}:
1400 @multitable @columnfractions .15 .70
1401 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
1402 if @var{Y} is present, @var{X} shall be REAL.
1403 @item @var{Y} shall be of the same type and kind as @var{X}.
1406 @item @emph{Return value}:
1407 The return value is of the same type and kind as @var{X}.
1408 If @var{Y} is present, the result is identical to @code{ATAN2(Y,X)}.
1409 Otherwise, it the arcus tangent of @var{X}, where the real part of
1410 the result is in radians and lies in the range
1411 @math{-\pi/2 \leq \Re \atan(x) \leq \pi/2}.
1413 @item @emph{Example}:
1416 real(8) :: x = 2.866_8
1418 end program test_atan
1421 @item @emph{Specific names}:
1422 @multitable @columnfractions .20 .20 .20 .25
1423 @item Name @tab Argument @tab Return type @tab Standard
1424 @item @code{ATAN(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
1425 @item @code{DATAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
1428 @item @emph{See also}:
1429 Inverse function: @ref{TAN}
1436 @section @code{ATAN2} --- Arctangent function
1439 @cindex trigonometric function, tangent, inverse
1440 @cindex tangent, inverse
1443 @item @emph{Description}:
1444 @code{ATAN2(Y, X)} computes the principal value of the argument
1445 function of the complex number @math{X + i Y}. This function can
1446 be used to transform from carthesian into polar coordinates and
1447 allows to determine the angle in the correct quadrant.
1449 @item @emph{Standard}:
1450 Fortran 77 and later
1455 @item @emph{Syntax}:
1456 @code{RESULT = ATAN2(Y, X)}
1458 @item @emph{Arguments}:
1459 @multitable @columnfractions .15 .70
1460 @item @var{Y} @tab The type shall be @code{REAL}.
1461 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
1462 If @var{Y} is zero, then @var{X} must be nonzero.
1465 @item @emph{Return value}:
1466 The return value has the same type and kind type parameter as @var{Y}.
1467 It is the principal value of the complex number @math{X + i Y}. If
1468 @var{X} is nonzero, then it lies in the range @math{-\pi \le \atan (x) \leq \pi}.
1469 The sign is positive if @var{Y} is positive. If @var{Y} is zero, then
1470 the return value is zero if @var{X} is positive and @math{\pi} if @var{X}
1471 is negative. Finally, if @var{X} is zero, then the magnitude of the result
1474 @item @emph{Example}:
1477 real(4) :: x = 1.e0_4, y = 0.5e0_4
1479 end program test_atan2
1482 @item @emph{Specific names}:
1483 @multitable @columnfractions .20 .20 .20 .25
1484 @item Name @tab Argument @tab Return type @tab Standard
1485 @item @code{ATAN2(X, Y)} @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
1486 @item @code{DATAN2(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab Fortran 77 and later
1493 @section @code{ATANH} --- Inverse hyperbolic tangent function
1496 @cindex area hyperbolic tangent
1497 @cindex inverse hyperbolic tangent
1498 @cindex hyperbolic function, tangent, inverse
1499 @cindex tangent, hyperbolic, inverse
1502 @item @emph{Description}:
1503 @code{ATANH(X)} computes the inverse hyperbolic tangent of @var{X}.
1505 @item @emph{Standard}:
1506 Fortran 2008 and later
1511 @item @emph{Syntax}:
1512 @code{RESULT = ATANH(X)}
1514 @item @emph{Arguments}:
1515 @multitable @columnfractions .15 .70
1516 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1519 @item @emph{Return value}:
1520 The return value has same type and kind as @var{X}. If @var{X} is
1521 complex, the imaginary part of the result is in radians and lies between
1522 @math{-\pi/2 \leq \Im \atanh(x) \leq \pi/2}.
1524 @item @emph{Example}:
1527 REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1528 WRITE (*,*) ATANH(x)
1532 @item @emph{Specific names}:
1533 @multitable @columnfractions .20 .20 .20 .25
1534 @item Name @tab Argument @tab Return type @tab Standard
1535 @item @code{DATANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1538 @item @emph{See also}:
1539 Inverse function: @ref{TANH}
1545 @section @code{BESSEL_J0} --- Bessel function of the first kind of order 0
1549 @cindex Bessel function, first kind
1552 @item @emph{Description}:
1553 @code{BESSEL_J0(X)} computes the Bessel function of the first kind of
1554 order 0 of @var{X}. This function is available under the name
1555 @code{BESJ0} as a GNU extension.
1557 @item @emph{Standard}:
1558 Fortran 2008 and later
1563 @item @emph{Syntax}:
1564 @code{RESULT = BESSEL_J0(X)}
1566 @item @emph{Arguments}:
1567 @multitable @columnfractions .15 .70
1568 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1571 @item @emph{Return value}:
1572 The return value is of type @code{REAL} and lies in the
1573 range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. It has the same
1576 @item @emph{Example}:
1579 real(8) :: x = 0.0_8
1581 end program test_besj0
1584 @item @emph{Specific names}:
1585 @multitable @columnfractions .20 .20 .20 .25
1586 @item Name @tab Argument @tab Return type @tab Standard
1587 @item @code{DBESJ0(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1594 @section @code{BESSEL_J1} --- Bessel function of the first kind of order 1
1598 @cindex Bessel function, first kind
1601 @item @emph{Description}:
1602 @code{BESSEL_J1(X)} computes the Bessel function of the first kind of
1603 order 1 of @var{X}. This function is available under the name
1604 @code{BESJ1} as a GNU extension.
1606 @item @emph{Standard}:
1612 @item @emph{Syntax}:
1613 @code{RESULT = BESSEL_J1(X)}
1615 @item @emph{Arguments}:
1616 @multitable @columnfractions .15 .70
1617 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1620 @item @emph{Return value}:
1621 The return value is of type @code{REAL} and it lies in the
1622 range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. It has the same
1625 @item @emph{Example}:
1628 real(8) :: x = 1.0_8
1630 end program test_besj1
1633 @item @emph{Specific names}:
1634 @multitable @columnfractions .20 .20 .20 .25
1635 @item Name @tab Argument @tab Return type @tab Standard
1636 @item @code{DBESJ1(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1643 @section @code{BESSEL_JN} --- Bessel function of the first kind
1647 @cindex Bessel function, first kind
1650 @item @emph{Description}:
1651 @code{BESSEL_JN(N, X)} computes the Bessel function of the first kind of
1652 order @var{N} of @var{X}. This function is available under the name
1653 @code{BESJN} as a GNU extension. If @var{N} and @var{X} are arrays,
1654 their ranks and shapes shall conform.
1656 @code{BESSEL_JN(N1, N2, X)} returns an array with the Bessel functions
1657 of the first kind of the orders @var{N1} to @var{N2}.
1659 @item @emph{Standard}:
1660 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
1663 Elemental function, except for the tranformational function
1664 @code{BESSEL_JN(N1, N2, X)}
1666 @item @emph{Syntax}:
1667 @code{RESULT = BESSEL_JN(N, X)}
1668 @code{RESULT = BESSEL_JN(N1, N2, X)}
1670 @item @emph{Arguments}:
1671 @multitable @columnfractions .15 .70
1672 @item @var{N} @tab Shall be a scalar or an array of type @code{INTEGER}.
1673 @item @var{N1} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1674 @item @var{N2} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1675 @item @var{X} @tab Shall be a scalar or an array of type @code{REAL};
1676 for @code{BESSEL_JN(N1, N2, X)} it shall be scalar.
1679 @item @emph{Return value}:
1680 The return value is a scalar of type @code{REAL}. It has the same
1684 The transformational function uses a recurrence algorithm which might,
1685 for some values of @var{X}, lead to different results than calls to
1686 the elemental function.
1688 @item @emph{Example}:
1691 real(8) :: x = 1.0_8
1693 end program test_besjn
1696 @item @emph{Specific names}:
1697 @multitable @columnfractions .20 .20 .20 .25
1698 @item Name @tab Argument @tab Return type @tab Standard
1699 @item @code{DBESJN(N, X)} @tab @code{INTEGER N} @tab @code{REAL(8)} @tab GNU extension
1700 @item @tab @code{REAL(8) X} @tab @tab
1707 @section @code{BESSEL_Y0} --- Bessel function of the second kind of order 0
1711 @cindex Bessel function, second kind
1714 @item @emph{Description}:
1715 @code{BESSEL_Y0(X)} computes the Bessel function of the second kind of
1716 order 0 of @var{X}. This function is available under the name
1717 @code{BESY0} as a GNU extension.
1719 @item @emph{Standard}:
1720 Fortran 2008 and later
1725 @item @emph{Syntax}:
1726 @code{RESULT = BESSEL_Y0(X)}
1728 @item @emph{Arguments}:
1729 @multitable @columnfractions .15 .70
1730 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1733 @item @emph{Return value}:
1734 The return value is a scalar of type @code{REAL}. It has the same
1737 @item @emph{Example}:
1740 real(8) :: x = 0.0_8
1742 end program test_besy0
1745 @item @emph{Specific names}:
1746 @multitable @columnfractions .20 .20 .20 .25
1747 @item Name @tab Argument @tab Return type @tab Standard
1748 @item @code{DBESY0(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1755 @section @code{BESSEL_Y1} --- Bessel function of the second kind of order 1
1759 @cindex Bessel function, second kind
1762 @item @emph{Description}:
1763 @code{BESSEL_Y1(X)} computes the Bessel function of the second kind of
1764 order 1 of @var{X}. This function is available under the name
1765 @code{BESY1} as a GNU extension.
1767 @item @emph{Standard}:
1768 Fortran 2008 and later
1773 @item @emph{Syntax}:
1774 @code{RESULT = BESSEL_Y1(X)}
1776 @item @emph{Arguments}:
1777 @multitable @columnfractions .15 .70
1778 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1781 @item @emph{Return value}:
1782 The return value is a scalar of type @code{REAL}. It has the same
1785 @item @emph{Example}:
1788 real(8) :: x = 1.0_8
1790 end program test_besy1
1793 @item @emph{Specific names}:
1794 @multitable @columnfractions .20 .20 .20 .25
1795 @item Name @tab Argument @tab Return type @tab Standard
1796 @item @code{DBESY1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1803 @section @code{BESSEL_YN} --- Bessel function of the second kind
1807 @cindex Bessel function, second kind
1810 @item @emph{Description}:
1811 @code{BESSEL_YN(N, X)} computes the Bessel function of the second kind of
1812 order @var{N} of @var{X}. This function is available under the name
1813 @code{BESYN} as a GNU extension. If @var{N} and @var{X} are arrays,
1814 their ranks and shapes shall conform.
1816 @code{BESSEL_YN(N1, N2, X)} returns an array with the Bessel functions
1817 of the first kind of the orders @var{N1} to @var{N2}.
1819 @item @emph{Standard}:
1820 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
1823 Elemental function, except for the tranformational function
1824 @code{BESSEL_YN(N1, N2, X)}
1826 @item @emph{Syntax}:
1827 @code{RESULT = BESSEL_YN(N, X)}
1828 @code{RESULT = BESSEL_YN(N1, N2, X)}
1830 @item @emph{Arguments}:
1831 @multitable @columnfractions .15 .70
1832 @item @var{N} @tab Shall be a scalar or an array of type @code{INTEGER} .
1833 @item @var{N1} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1834 @item @var{N2} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1835 @item @var{X} @tab Shall be a scalar or an array of type @code{REAL};
1836 for @code{BESSEL_YN(N1, N2, X)} it shall be scalar.
1839 @item @emph{Return value}:
1840 The return value is a scalar of type @code{REAL}. It has the same
1844 The transformational function uses a recurrence algorithm which might,
1845 for some values of @var{X}, lead to different results than calls to
1846 the elemental function.
1848 @item @emph{Example}:
1851 real(8) :: x = 1.0_8
1853 end program test_besyn
1856 @item @emph{Specific names}:
1857 @multitable @columnfractions .20 .20 .20 .25
1858 @item Name @tab Argument @tab Return type @tab Standard
1859 @item @code{DBESYN(N,X)} @tab @code{INTEGER N} @tab @code{REAL(8)} @tab GNU extension
1860 @item @tab @code{REAL(8) X} @tab @tab
1867 @section @code{BGE} --- Bitwise greater than or equal to
1869 @cindex bitwise comparison
1872 @item @emph{Description}:
1873 Determines whether an integral is a bitwise greater than or equal to
1876 @item @emph{Standard}:
1877 Fortran 2008 and later
1882 @item @emph{Syntax}:
1883 @code{RESULT = BGE(I, J)}
1885 @item @emph{Arguments}:
1886 @multitable @columnfractions .15 .70
1887 @item @var{I} @tab Shall be of @code{INTEGER} type.
1888 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
1892 @item @emph{Return value}:
1893 The return value is of type @code{LOGICAL} and of the default kind.
1895 @item @emph{See also}:
1896 @ref{BGT}, @ref{BLE}, @ref{BLT}
1902 @section @code{BGT} --- Bitwise greater than
1904 @cindex bitwise comparison
1907 @item @emph{Description}:
1908 Determines whether an integral is a bitwise greater than another.
1910 @item @emph{Standard}:
1911 Fortran 2008 and later
1916 @item @emph{Syntax}:
1917 @code{RESULT = BGT(I, J)}
1919 @item @emph{Arguments}:
1920 @multitable @columnfractions .15 .70
1921 @item @var{I} @tab Shall be of @code{INTEGER} type.
1922 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
1926 @item @emph{Return value}:
1927 The return value is of type @code{LOGICAL} and of the default kind.
1929 @item @emph{See also}:
1930 @ref{BGE}, @ref{BLE}, @ref{BLT}
1936 @section @code{BIT_SIZE} --- Bit size inquiry function
1938 @cindex bits, number of
1939 @cindex size of a variable, in bits
1942 @item @emph{Description}:
1943 @code{BIT_SIZE(I)} returns the number of bits (integer precision plus sign bit)
1944 represented by the type of @var{I}. The result of @code{BIT_SIZE(I)} is
1945 independent of the actual value of @var{I}.
1947 @item @emph{Standard}:
1948 Fortran 95 and later
1953 @item @emph{Syntax}:
1954 @code{RESULT = BIT_SIZE(I)}
1956 @item @emph{Arguments}:
1957 @multitable @columnfractions .15 .70
1958 @item @var{I} @tab The type shall be @code{INTEGER}.
1961 @item @emph{Return value}:
1962 The return value is of type @code{INTEGER}
1964 @item @emph{Example}:
1966 program test_bit_size
1971 end program test_bit_size
1978 @section @code{BLE} --- Bitwise less than or equal to
1980 @cindex bitwise comparison
1983 @item @emph{Description}:
1984 Determines whether an integral is a bitwise less than or equal to
1987 @item @emph{Standard}:
1988 Fortran 2008 and later
1993 @item @emph{Syntax}:
1994 @code{RESULT = BLE(I, J)}
1996 @item @emph{Arguments}:
1997 @multitable @columnfractions .15 .70
1998 @item @var{I} @tab Shall be of @code{INTEGER} type.
1999 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2003 @item @emph{Return value}:
2004 The return value is of type @code{LOGICAL} and of the default kind.
2006 @item @emph{See also}:
2007 @ref{BGT}, @ref{BGE}, @ref{BLT}
2013 @section @code{BLT} --- Bitwise less than
2015 @cindex bitwise comparison
2018 @item @emph{Description}:
2019 Determines whether an integral is a bitwise less than another.
2021 @item @emph{Standard}:
2022 Fortran 2008 and later
2027 @item @emph{Syntax}:
2028 @code{RESULT = BLT(I, J)}
2030 @item @emph{Arguments}:
2031 @multitable @columnfractions .15 .70
2032 @item @var{I} @tab Shall be of @code{INTEGER} type.
2033 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2037 @item @emph{Return value}:
2038 The return value is of type @code{LOGICAL} and of the default kind.
2040 @item @emph{See also}:
2041 @ref{BGE}, @ref{BGT}, @ref{BLE}
2047 @section @code{BTEST} --- Bit test function
2049 @cindex bits, testing
2052 @item @emph{Description}:
2053 @code{BTEST(I,POS)} returns logical @code{.TRUE.} if the bit at @var{POS}
2054 in @var{I} is set. The counting of the bits starts at 0.
2056 @item @emph{Standard}:
2057 Fortran 95 and later
2062 @item @emph{Syntax}:
2063 @code{RESULT = BTEST(I, POS)}
2065 @item @emph{Arguments}:
2066 @multitable @columnfractions .15 .70
2067 @item @var{I} @tab The type shall be @code{INTEGER}.
2068 @item @var{POS} @tab The type shall be @code{INTEGER}.
2071 @item @emph{Return value}:
2072 The return value is of type @code{LOGICAL}
2074 @item @emph{Example}:
2077 integer :: i = 32768 + 1024 + 64
2081 bool = btest(i, pos)
2084 end program test_btest
2090 @section @code{C_ASSOCIATED} --- Status of a C pointer
2091 @fnindex C_ASSOCIATED
2092 @cindex association status, C pointer
2093 @cindex pointer, C association status
2096 @item @emph{Description}:
2097 @code{C_ASSOCIATED(c_prt_1[, c_ptr_2])} determines the status of the C pointer
2098 @var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}.
2100 @item @emph{Standard}:
2101 Fortran 2003 and later
2106 @item @emph{Syntax}:
2107 @code{RESULT = C_ASSOCIATED(c_prt_1[, c_ptr_2])}
2109 @item @emph{Arguments}:
2110 @multitable @columnfractions .15 .70
2111 @item @var{c_ptr_1} @tab Scalar of the type @code{C_PTR} or @code{C_FUNPTR}.
2112 @item @var{c_ptr_2} @tab (Optional) Scalar of the same type as @var{c_ptr_1}.
2115 @item @emph{Return value}:
2116 The return value is of type @code{LOGICAL}; it is @code{.false.} if either
2117 @var{c_ptr_1} is a C NULL pointer or if @var{c_ptr1} and @var{c_ptr_2}
2118 point to different addresses.
2120 @item @emph{Example}:
2122 subroutine association_test(a,b)
2123 use iso_c_binding, only: c_associated, c_loc, c_ptr
2127 if(c_associated(b, c_loc(a))) &
2128 stop 'b and a do not point to same target'
2129 end subroutine association_test
2132 @item @emph{See also}:
2133 @ref{C_LOC}, @ref{C_FUNLOC}
2138 @section @code{C_FUNLOC} --- Obtain the C address of a procedure
2140 @cindex pointer, C address of procedures
2143 @item @emph{Description}:
2144 @code{C_FUNLOC(x)} determines the C address of the argument.
2146 @item @emph{Standard}:
2147 Fortran 2003 and later
2152 @item @emph{Syntax}:
2153 @code{RESULT = C_FUNLOC(x)}
2155 @item @emph{Arguments}:
2156 @multitable @columnfractions .15 .70
2157 @item @var{x} @tab Interoperable function or pointer to such function.
2160 @item @emph{Return value}:
2161 The return value is of type @code{C_FUNPTR} and contains the C address
2164 @item @emph{Example}:
2170 subroutine sub(a) bind(c)
2180 subroutine my_routine(p) bind(c,name='myC_func')
2182 type(c_funptr), intent(in) :: p
2185 call my_routine(c_funloc(sub))
2189 @item @emph{See also}:
2190 @ref{C_ASSOCIATED}, @ref{C_LOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
2194 @node C_F_PROCPOINTER
2195 @section @code{C_F_PROCPOINTER} --- Convert C into Fortran procedure pointer
2196 @fnindex C_F_PROCPOINTER
2197 @cindex pointer, C address of pointers
2200 @item @emph{Description}:
2201 @code{C_F_PROCPOINTER(CPTR, FPTR)} Assign the target of the C function pointer
2202 @var{CPTR} to the Fortran procedure pointer @var{FPTR}.
2204 @item @emph{Standard}:
2205 Fortran 2003 and later
2210 @item @emph{Syntax}:
2211 @code{CALL C_F_PROCPOINTER(cptr, fptr)}
2213 @item @emph{Arguments}:
2214 @multitable @columnfractions .15 .70
2215 @item @var{CPTR} @tab scalar of the type @code{C_FUNPTR}. It is
2217 @item @var{FPTR} @tab procedure pointer interoperable with @var{cptr}. It is
2221 @item @emph{Example}:
2229 real(c_float), intent(in) :: a
2230 real(c_float) :: func
2234 function getIterFunc() bind(c,name="getIterFunc")
2236 type(c_funptr) :: getIterFunc
2239 type(c_funptr) :: cfunptr
2240 procedure(func), pointer :: myFunc
2241 cfunptr = getIterFunc()
2242 call c_f_procpointer(cfunptr, myFunc)
2246 @item @emph{See also}:
2247 @ref{C_LOC}, @ref{C_F_POINTER}
2252 @section @code{C_F_POINTER} --- Convert C into Fortran pointer
2253 @fnindex C_F_POINTER
2254 @cindex pointer, convert C to Fortran
2257 @item @emph{Description}:
2258 @code{C_F_POINTER(CPTR, FPTR[, SHAPE])} Assign the target the C pointer
2259 @var{CPTR} to the Fortran pointer @var{FPTR} and specify its
2262 @item @emph{Standard}:
2263 Fortran 2003 and later
2268 @item @emph{Syntax}:
2269 @code{CALL C_F_POINTER(CPTR, FPTR[, SHAPE])}
2271 @item @emph{Arguments}:
2272 @multitable @columnfractions .15 .70
2273 @item @var{CPTR} @tab scalar of the type @code{C_PTR}. It is
2275 @item @var{FPTR} @tab pointer interoperable with @var{cptr}. It is
2277 @item @var{SHAPE} @tab (Optional) Rank-one array of type @code{INTEGER}
2278 with @code{INTENT(IN)}. It shall be present
2279 if and only if @var{fptr} is an array. The size
2280 must be equal to the rank of @var{fptr}.
2283 @item @emph{Example}:
2289 subroutine my_routine(p) bind(c,name='myC_func')
2291 type(c_ptr), intent(out) :: p
2295 real,pointer :: a(:)
2296 call my_routine(cptr)
2297 call c_f_pointer(cptr, a, [12])
2301 @item @emph{See also}:
2302 @ref{C_LOC}, @ref{C_F_PROCPOINTER}
2307 @section @code{C_LOC} --- Obtain the C address of an object
2309 @cindex procedure pointer, convert C to Fortran
2312 @item @emph{Description}:
2313 @code{C_LOC(X)} determines the C address of the argument.
2315 @item @emph{Standard}:
2316 Fortran 2003 and later
2321 @item @emph{Syntax}:
2322 @code{RESULT = C_LOC(X)}
2324 @item @emph{Arguments}:
2325 @multitable @columnfractions .10 .75
2326 @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.
2330 @item @emph{Return value}:
2331 The return value is of type @code{C_PTR} and contains the C address
2334 @item @emph{Example}:
2336 subroutine association_test(a,b)
2337 use iso_c_binding, only: c_associated, c_loc, c_ptr
2341 if(c_associated(b, c_loc(a))) &
2342 stop 'b and a do not point to same target'
2343 end subroutine association_test
2346 @item @emph{See also}:
2347 @ref{C_ASSOCIATED}, @ref{C_FUNLOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
2352 @section @code{C_SIZEOF} --- Size in bytes of an expression
2354 @cindex expression size
2355 @cindex size of an expression
2358 @item @emph{Description}:
2359 @code{C_SIZEOF(X)} calculates the number of bytes of storage the
2360 expression @code{X} occupies.
2362 @item @emph{Standard}:
2368 @item @emph{Syntax}:
2369 @code{N = C_SIZEOF(X)}
2371 @item @emph{Arguments}:
2372 @multitable @columnfractions .15 .70
2373 @item @var{X} @tab The argument shall be an interoperable data entity.
2376 @item @emph{Return value}:
2377 The return value is of type integer and of the system-dependent kind
2378 @var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
2379 number of bytes occupied by the argument. If the argument has the
2380 @code{POINTER} attribute, the number of bytes of the storage area pointed
2381 to is returned. If the argument is of a derived type with @code{POINTER}
2382 or @code{ALLOCATABLE} components, the return value doesn't account for
2383 the sizes of the data pointed to by these components.
2385 @item @emph{Example}:
2389 real(c_float) :: r, s(5)
2390 print *, (c_sizeof(s)/c_sizeof(r) == 5)
2393 The example will print @code{.TRUE.} unless you are using a platform
2394 where default @code{REAL} variables are unusually padded.
2396 @item @emph{See also}:
2397 @ref{SIZEOF}, @ref{STORAGE_SIZE}
2402 @section @code{CEILING} --- Integer ceiling function
2405 @cindex rounding, ceiling
2408 @item @emph{Description}:
2409 @code{CEILING(A)} returns the least integer greater than or equal to @var{A}.
2411 @item @emph{Standard}:
2412 Fortran 95 and later
2417 @item @emph{Syntax}:
2418 @code{RESULT = CEILING(A [, KIND])}
2420 @item @emph{Arguments}:
2421 @multitable @columnfractions .15 .70
2422 @item @var{A} @tab The type shall be @code{REAL}.
2423 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2424 expression indicating the kind parameter of the result.
2427 @item @emph{Return value}:
2428 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
2429 and a default-kind @code{INTEGER} otherwise.
2431 @item @emph{Example}:
2433 program test_ceiling
2436 print *, ceiling(x) ! returns 64
2437 print *, ceiling(y) ! returns -63
2438 end program test_ceiling
2441 @item @emph{See also}:
2442 @ref{FLOOR}, @ref{NINT}
2449 @section @code{CHAR} --- Character conversion function
2451 @cindex conversion, to character
2454 @item @emph{Description}:
2455 @code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}.
2457 @item @emph{Standard}:
2458 Fortran 77 and later
2463 @item @emph{Syntax}:
2464 @code{RESULT = CHAR(I [, KIND])}
2466 @item @emph{Arguments}:
2467 @multitable @columnfractions .15 .70
2468 @item @var{I} @tab The type shall be @code{INTEGER}.
2469 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2470 expression indicating the kind parameter of the result.
2473 @item @emph{Return value}:
2474 The return value is of type @code{CHARACTER(1)}
2476 @item @emph{Example}:
2482 print *, i, c ! returns 'J'
2483 end program test_char
2486 @item @emph{Specific names}:
2487 @multitable @columnfractions .20 .20 .20 .25
2488 @item Name @tab Argument @tab Return type @tab Standard
2489 @item @code{CHAR(I)} @tab @code{INTEGER I} @tab @code{CHARACTER(LEN=1)} @tab F77 and later
2493 See @ref{ICHAR} for a discussion of converting between numerical values
2494 and formatted string representations.
2496 @item @emph{See also}:
2497 @ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR}
2504 @section @code{CHDIR} --- Change working directory
2506 @cindex system, working directory
2509 @item @emph{Description}:
2510 Change current working directory to a specified path.
2512 This intrinsic is provided in both subroutine and function forms; however,
2513 only one form can be used in any given program unit.
2515 @item @emph{Standard}:
2519 Subroutine, function
2521 @item @emph{Syntax}:
2522 @multitable @columnfractions .80
2523 @item @code{CALL CHDIR(NAME [, STATUS])}
2524 @item @code{STATUS = CHDIR(NAME)}
2527 @item @emph{Arguments}:
2528 @multitable @columnfractions .15 .70
2529 @item @var{NAME} @tab The type shall be @code{CHARACTER} of default
2530 kind and shall specify a valid path within the file system.
2531 @item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default
2532 kind. Returns 0 on success, and a system specific and nonzero error code
2536 @item @emph{Example}:
2539 CHARACTER(len=255) :: path
2541 WRITE(*,*) TRIM(path)
2544 WRITE(*,*) TRIM(path)
2548 @item @emph{See also}:
2555 @section @code{CHMOD} --- Change access permissions of files
2557 @cindex file system, change access mode
2560 @item @emph{Description}:
2561 @code{CHMOD} changes the permissions of a file. This function invokes
2562 @code{/bin/chmod} and might therefore not work on all platforms.
2564 This intrinsic is provided in both subroutine and function forms; however,
2565 only one form can be used in any given program unit.
2567 @item @emph{Standard}:
2571 Subroutine, function
2573 @item @emph{Syntax}:
2574 @multitable @columnfractions .80
2575 @item @code{CALL CHMOD(NAME, MODE[, STATUS])}
2576 @item @code{STATUS = CHMOD(NAME, MODE)}
2579 @item @emph{Arguments}:
2580 @multitable @columnfractions .15 .70
2582 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
2583 file name. Trailing blanks are ignored unless the character
2584 @code{achar(0)} is present, then all characters up to and excluding
2585 @code{achar(0)} are used as the file name.
2587 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind giving the
2588 file permission. @var{MODE} uses the same syntax as the @var{MODE}
2589 argument of @code{/bin/chmod}.
2591 @item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is
2592 @code{0} on success and nonzero otherwise.
2595 @item @emph{Return value}:
2596 In either syntax, @var{STATUS} is set to @code{0} on success and nonzero
2599 @item @emph{Example}:
2600 @code{CHMOD} as subroutine
2605 call chmod('test.dat','u+x',status)
2606 print *, 'Status: ', status
2607 end program chmod_test
2609 @code{CHMOD} as function:
2614 status = chmod('test.dat','u+x')
2615 print *, 'Status: ', status
2616 end program chmod_test
2624 @section @code{CMPLX} --- Complex conversion function
2626 @cindex complex numbers, conversion to
2627 @cindex conversion, to complex
2630 @item @emph{Description}:
2631 @code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to
2632 the real component. If @var{Y} is present it is converted to the imaginary
2633 component. If @var{Y} is not present then the imaginary component is set to
2634 0.0. If @var{X} is complex then @var{Y} must not be present.
2636 @item @emph{Standard}:
2637 Fortran 77 and later
2642 @item @emph{Syntax}:
2643 @code{RESULT = CMPLX(X [, Y [, KIND]])}
2645 @item @emph{Arguments}:
2646 @multitable @columnfractions .15 .70
2647 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
2649 @item @var{Y} @tab (Optional; only allowed if @var{X} is not
2650 @code{COMPLEX}.) May be @code{INTEGER} or @code{REAL}.
2651 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2652 expression indicating the kind parameter of the result.
2655 @item @emph{Return value}:
2656 The return value is of @code{COMPLEX} type, with a kind equal to
2657 @var{KIND} if it is specified. If @var{KIND} is not specified, the
2658 result is of the default @code{COMPLEX} kind, regardless of the kinds of
2659 @var{X} and @var{Y}.
2661 @item @emph{Example}:
2668 print *, z, cmplx(x)
2669 end program test_cmplx
2672 @item @emph{See also}:
2678 @node COMMAND_ARGUMENT_COUNT
2679 @section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
2680 @fnindex COMMAND_ARGUMENT_COUNT
2681 @cindex command-line arguments
2682 @cindex command-line arguments, number of
2683 @cindex arguments, to program
2686 @item @emph{Description}:
2687 @code{COMMAND_ARGUMENT_COUNT()} returns the number of arguments passed on the
2688 command line when the containing program was invoked.
2690 @item @emph{Standard}:
2691 Fortran 2003 and later
2696 @item @emph{Syntax}:
2697 @code{RESULT = COMMAND_ARGUMENT_COUNT()}
2699 @item @emph{Arguments}:
2700 @multitable @columnfractions .15 .70
2704 @item @emph{Return value}:
2705 The return value is an @code{INTEGER} of default kind.
2707 @item @emph{Example}:
2709 program test_command_argument_count
2711 count = command_argument_count()
2713 end program test_command_argument_count
2716 @item @emph{See also}:
2717 @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}
2723 @section @code{COMPLEX} --- Complex conversion function
2725 @cindex complex numbers, conversion to
2726 @cindex conversion, to complex
2729 @item @emph{Description}:
2730 @code{COMPLEX(X, Y)} returns a complex number where @var{X} is converted
2731 to the real component and @var{Y} is converted to the imaginary
2734 @item @emph{Standard}:
2740 @item @emph{Syntax}:
2741 @code{RESULT = COMPLEX(X, Y)}
2743 @item @emph{Arguments}:
2744 @multitable @columnfractions .15 .70
2745 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
2746 @item @var{Y} @tab The type may be @code{INTEGER} or @code{REAL}.
2749 @item @emph{Return value}:
2750 If @var{X} and @var{Y} are both of @code{INTEGER} type, then the return
2751 value is of default @code{COMPLEX} type.
2753 If @var{X} and @var{Y} are of @code{REAL} type, or one is of @code{REAL}
2754 type and one is of @code{INTEGER} type, then the return value is of
2755 @code{COMPLEX} type with a kind equal to that of the @code{REAL}
2756 argument with the highest precision.
2758 @item @emph{Example}:
2760 program test_complex
2763 print *, complex(i, x)
2764 end program test_complex
2767 @item @emph{See also}:
2774 @section @code{CONJG} --- Complex conjugate function
2777 @cindex complex conjugate
2780 @item @emph{Description}:
2781 @code{CONJG(Z)} returns the conjugate of @var{Z}. If @var{Z} is @code{(x, y)}
2782 then the result is @code{(x, -y)}
2784 @item @emph{Standard}:
2785 Fortran 77 and later, has overloads that are GNU extensions
2790 @item @emph{Syntax}:
2793 @item @emph{Arguments}:
2794 @multitable @columnfractions .15 .70
2795 @item @var{Z} @tab The type shall be @code{COMPLEX}.
2798 @item @emph{Return value}:
2799 The return value is of type @code{COMPLEX}.
2801 @item @emph{Example}:
2804 complex :: z = (2.0, 3.0)
2805 complex(8) :: dz = (2.71_8, -3.14_8)
2810 end program test_conjg
2813 @item @emph{Specific names}:
2814 @multitable @columnfractions .20 .20 .20 .25
2815 @item Name @tab Argument @tab Return type @tab Standard
2816 @item @code{CONJG(Z)} @tab @code{COMPLEX Z} @tab @code{COMPLEX} @tab GNU extension
2817 @item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension
2824 @section @code{COS} --- Cosine function
2830 @cindex trigonometric function, cosine
2834 @item @emph{Description}:
2835 @code{COS(X)} computes the cosine of @var{X}.
2837 @item @emph{Standard}:
2838 Fortran 77 and later, has overloads that are GNU extensions
2843 @item @emph{Syntax}:
2844 @code{RESULT = COS(X)}
2846 @item @emph{Arguments}:
2847 @multitable @columnfractions .15 .70
2848 @item @var{X} @tab The type shall be @code{REAL} or
2852 @item @emph{Return value}:
2853 The return value is of the same type and kind as @var{X}. The real part
2854 of the result is in radians. If @var{X} is of the type @code{REAL},
2855 the return value lies in the range @math{ -1 \leq \cos (x) \leq 1}.
2857 @item @emph{Example}:
2862 end program test_cos
2865 @item @emph{Specific names}:
2866 @multitable @columnfractions .20 .20 .20 .25
2867 @item Name @tab Argument @tab Return type @tab Standard
2868 @item @code{COS(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
2869 @item @code{DCOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
2870 @item @code{CCOS(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
2871 @item @code{ZCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
2872 @item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
2875 @item @emph{See also}:
2876 Inverse function: @ref{ACOS}
2883 @section @code{COSH} --- Hyperbolic cosine function
2886 @cindex hyperbolic cosine
2887 @cindex hyperbolic function, cosine
2888 @cindex cosine, hyperbolic
2891 @item @emph{Description}:
2892 @code{COSH(X)} computes the hyperbolic cosine of @var{X}.
2894 @item @emph{Standard}:
2895 Fortran 77 and later, for a complex argument Fortran 2008 or later
2900 @item @emph{Syntax}:
2903 @item @emph{Arguments}:
2904 @multitable @columnfractions .15 .70
2905 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
2908 @item @emph{Return value}:
2909 The return value has same type and kind as @var{X}. If @var{X} is
2910 complex, the imaginary part of the result is in radians. If @var{X}
2911 is @code{REAL}, the return value has a lower bound of one,
2912 @math{\cosh (x) \geq 1}.
2914 @item @emph{Example}:
2917 real(8) :: x = 1.0_8
2919 end program test_cosh
2922 @item @emph{Specific names}:
2923 @multitable @columnfractions .20 .20 .20 .25
2924 @item Name @tab Argument @tab Return type @tab Standard
2925 @item @code{COSH(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
2926 @item @code{DCOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
2929 @item @emph{See also}:
2930 Inverse function: @ref{ACOSH}
2937 @section @code{COUNT} --- Count function
2939 @cindex array, conditionally count elements
2940 @cindex array, element counting
2941 @cindex array, number of elements
2944 @item @emph{Description}:
2946 Counts the number of @code{.TRUE.} elements in a logical @var{MASK},
2947 or, if the @var{DIM} argument is supplied, counts the number of
2948 elements along each row of the array in the @var{DIM} direction.
2949 If the array has zero size, or all of the elements of @var{MASK} are
2950 @code{.FALSE.}, then the result is @code{0}.
2952 @item @emph{Standard}:
2953 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
2956 Transformational function
2958 @item @emph{Syntax}:
2959 @code{RESULT = COUNT(MASK [, DIM, KIND])}
2961 @item @emph{Arguments}:
2962 @multitable @columnfractions .15 .70
2963 @item @var{MASK} @tab The type shall be @code{LOGICAL}.
2964 @item @var{DIM} @tab (Optional) The type shall be @code{INTEGER}.
2965 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2966 expression indicating the kind parameter of the result.
2969 @item @emph{Return value}:
2970 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
2971 @var{KIND} is absent, the return value is of default integer kind.
2972 If @var{DIM} is present, the result is an array with a rank one less
2973 than the rank of @var{ARRAY}, and a size corresponding to the shape
2974 of @var{ARRAY} with the @var{DIM} dimension removed.
2976 @item @emph{Example}:
2979 integer, dimension(2,3) :: a, b
2980 logical, dimension(2,3) :: mask
2981 a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
2982 b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
2983 print '(3i3)', a(1,:)
2984 print '(3i3)', a(2,:)
2986 print '(3i3)', b(1,:)
2987 print '(3i3)', b(2,:)
2990 print '(3l3)', mask(1,:)
2991 print '(3l3)', mask(2,:)
2993 print '(3i3)', count(mask)
2995 print '(3i3)', count(mask, 1)
2997 print '(3i3)', count(mask, 2)
2998 end program test_count
3005 @section @code{CPU_TIME} --- CPU elapsed time in seconds
3007 @cindex time, elapsed
3010 @item @emph{Description}:
3011 Returns a @code{REAL} value representing the elapsed CPU time in
3012 seconds. This is useful for testing segments of code to determine
3015 If a time source is available, time will be reported with microsecond
3016 resolution. If no time source is available, @var{TIME} is set to
3019 Note that @var{TIME} may contain a, system dependent, arbitrary offset
3020 and may not start with @code{0.0}. For @code{CPU_TIME}, the absolute
3021 value is meaningless, only differences between subsequent calls to
3022 this subroutine, as shown in the example below, should be used.
3025 @item @emph{Standard}:
3026 Fortran 95 and later
3031 @item @emph{Syntax}:
3032 @code{CALL CPU_TIME(TIME)}
3034 @item @emph{Arguments}:
3035 @multitable @columnfractions .15 .70
3036 @item @var{TIME} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}.
3039 @item @emph{Return value}:
3042 @item @emph{Example}:
3044 program test_cpu_time
3045 real :: start, finish
3046 call cpu_time(start)
3047 ! put code to test here
3048 call cpu_time(finish)
3049 print '("Time = ",f6.3," seconds.")',finish-start
3050 end program test_cpu_time
3053 @item @emph{See also}:
3054 @ref{SYSTEM_CLOCK}, @ref{DATE_AND_TIME}
3060 @section @code{CSHIFT} --- Circular shift elements of an array
3062 @cindex array, shift circularly
3063 @cindex array, permutation
3064 @cindex array, rotate
3067 @item @emph{Description}:
3068 @code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of
3069 @var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is omitted it is
3070 taken to be @code{1}. @var{DIM} is a scalar of type @code{INTEGER} in the
3071 range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}.
3072 If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted
3073 by @var{SHIFT} places. If rank is greater than one, then all complete rank one
3074 sections of @var{ARRAY} along the given dimension are shifted. Elements
3075 shifted out one end of each rank one section are shifted back in the other end.
3077 @item @emph{Standard}:
3078 Fortran 95 and later
3081 Transformational function
3083 @item @emph{Syntax}:
3084 @code{RESULT = CSHIFT(ARRAY, SHIFT [, DIM])}
3086 @item @emph{Arguments}:
3087 @multitable @columnfractions .15 .70
3088 @item @var{ARRAY} @tab Shall be an array of any type.
3089 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
3090 @item @var{DIM} @tab The type shall be @code{INTEGER}.
3093 @item @emph{Return value}:
3094 Returns an array of same type and rank as the @var{ARRAY} argument.
3096 @item @emph{Example}:
3099 integer, dimension(3,3) :: a
3100 a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
3101 print '(3i3)', a(1,:)
3102 print '(3i3)', a(2,:)
3103 print '(3i3)', a(3,:)
3104 a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)
3106 print '(3i3)', a(1,:)
3107 print '(3i3)', a(2,:)
3108 print '(3i3)', a(3,:)
3109 end program test_cshift
3116 @section @code{CTIME} --- Convert a time into a string
3118 @cindex time, conversion to string
3119 @cindex conversion, to string
3122 @item @emph{Description}:
3123 @code{CTIME} converts a system time value, such as returned by
3124 @code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995}.
3126 This intrinsic is provided in both subroutine and function forms; however,
3127 only one form can be used in any given program unit.
3129 @item @emph{Standard}:
3133 Subroutine, function
3135 @item @emph{Syntax}:
3136 @multitable @columnfractions .80
3137 @item @code{CALL CTIME(TIME, RESULT)}.
3138 @item @code{RESULT = CTIME(TIME)}, (not recommended).
3141 @item @emph{Arguments}:
3142 @multitable @columnfractions .15 .70
3143 @item @var{TIME} @tab The type shall be of type @code{INTEGER(KIND=8)}.
3144 @item @var{RESULT} @tab The type shall be of type @code{CHARACTER} and
3148 @item @emph{Return value}:
3149 The converted date and time as a string.
3151 @item @emph{Example}:
3155 character(len=30) :: date
3158 ! Do something, main part of the program
3161 print *, 'Program was started on ', date
3162 end program test_ctime
3165 @item @emph{See Also}:
3166 @ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
3172 @section @code{DATE_AND_TIME} --- Date and time subroutine
3173 @fnindex DATE_AND_TIME
3174 @cindex date, current
3175 @cindex current date
3176 @cindex time, current
3177 @cindex current time
3180 @item @emph{Description}:
3181 @code{DATE_AND_TIME(DATE, TIME, ZONE, VALUES)} gets the corresponding date and
3182 time information from the real-time system clock. @var{DATE} is
3183 @code{INTENT(OUT)} and has form ccyymmdd. @var{TIME} is @code{INTENT(OUT)} and
3184 has form hhmmss.sss. @var{ZONE} is @code{INTENT(OUT)} and has form (+-)hhmm,
3185 representing the difference with respect to Coordinated Universal Time (UTC).
3186 Unavailable time and date parameters return blanks.
3188 @var{VALUES} is @code{INTENT(OUT)} and provides the following:
3190 @multitable @columnfractions .15 .30 .40
3191 @item @tab @code{VALUE(1)}: @tab The year
3192 @item @tab @code{VALUE(2)}: @tab The month
3193 @item @tab @code{VALUE(3)}: @tab The day of the month
3194 @item @tab @code{VALUE(4)}: @tab Time difference with UTC in minutes
3195 @item @tab @code{VALUE(5)}: @tab The hour of the day
3196 @item @tab @code{VALUE(6)}: @tab The minutes of the hour
3197 @item @tab @code{VALUE(7)}: @tab The seconds of the minute
3198 @item @tab @code{VALUE(8)}: @tab The milliseconds of the second
3201 @item @emph{Standard}:
3202 Fortran 95 and later
3207 @item @emph{Syntax}:
3208 @code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])}
3210 @item @emph{Arguments}:
3211 @multitable @columnfractions .15 .70
3212 @item @var{DATE} @tab (Optional) The type shall be @code{CHARACTER(LEN=8)}
3213 or larger, and of default kind.
3214 @item @var{TIME} @tab (Optional) The type shall be @code{CHARACTER(LEN=10)}
3215 or larger, and of default kind.
3216 @item @var{ZONE} @tab (Optional) The type shall be @code{CHARACTER(LEN=5)}
3217 or larger, and of default kind.
3218 @item @var{VALUES}@tab (Optional) The type shall be @code{INTEGER(8)}.
3221 @item @emph{Return value}:
3224 @item @emph{Example}:
3226 program test_time_and_date
3227 character(8) :: date
3228 character(10) :: time
3229 character(5) :: zone
3230 integer,dimension(8) :: values
3231 ! using keyword arguments
3232 call date_and_time(date,time,zone,values)
3233 call date_and_time(DATE=date,ZONE=zone)
3234 call date_and_time(TIME=time)
3235 call date_and_time(VALUES=values)
3236 print '(a,2x,a,2x,a)', date, time, zone
3237 print '(8i5))', values
3238 end program test_time_and_date
3241 @item @emph{See also}:
3242 @ref{CPU_TIME}, @ref{SYSTEM_CLOCK}
3248 @section @code{DBLE} --- Double conversion function
3250 @cindex conversion, to real
3253 @item @emph{Description}:
3254 @code{DBLE(A)} Converts @var{A} to double precision real type.
3256 @item @emph{Standard}:
3257 Fortran 77 and later
3262 @item @emph{Syntax}:
3263 @code{RESULT = DBLE(A)}
3265 @item @emph{Arguments}:
3266 @multitable @columnfractions .15 .70
3267 @item @var{A} @tab The type shall be @code{INTEGER}, @code{REAL},
3271 @item @emph{Return value}:
3272 The return value is of type double precision real.
3274 @item @emph{Example}:
3279 complex :: z = (2.3,1.14)
3280 print *, dble(x), dble(i), dble(z)
3281 end program test_dble
3284 @item @emph{See also}:
3291 @section @code{DCMPLX} --- Double complex conversion function
3293 @cindex complex numbers, conversion to
3294 @cindex conversion, to complex
3297 @item @emph{Description}:
3298 @code{DCMPLX(X [,Y])} returns a double complex number where @var{X} is
3299 converted to the real component. If @var{Y} is present it is converted to the
3300 imaginary component. If @var{Y} is not present then the imaginary component is
3301 set to 0.0. If @var{X} is complex then @var{Y} must not be present.
3303 @item @emph{Standard}:
3309 @item @emph{Syntax}:
3310 @code{RESULT = DCMPLX(X [, Y])}
3312 @item @emph{Arguments}:
3313 @multitable @columnfractions .15 .70
3314 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
3316 @item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX}.) May be
3317 @code{INTEGER} or @code{REAL}.
3320 @item @emph{Return value}:
3321 The return value is of type @code{COMPLEX(8)}
3323 @item @emph{Example}:
3333 print *, dcmplx(x,i)
3334 end program test_dcmplx
3340 @section @code{DIGITS} --- Significant binary digits function
3342 @cindex model representation, significant digits
3345 @item @emph{Description}:
3346 @code{DIGITS(X)} returns the number of significant binary digits of the internal
3347 model representation of @var{X}. For example, on a system using a 32-bit
3348 floating point representation, a default real number would likely return 24.
3350 @item @emph{Standard}:
3351 Fortran 95 and later
3356 @item @emph{Syntax}:
3357 @code{RESULT = DIGITS(X)}
3359 @item @emph{Arguments}:
3360 @multitable @columnfractions .15 .70
3361 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
3364 @item @emph{Return value}:
3365 The return value is of type @code{INTEGER}.
3367 @item @emph{Example}:
3370 integer :: i = 12345
3376 end program test_digits
3383 @section @code{DIM} --- Positive difference
3387 @cindex positive difference
3390 @item @emph{Description}:
3391 @code{DIM(X,Y)} returns the difference @code{X-Y} if the result is positive;
3392 otherwise returns zero.
3394 @item @emph{Standard}:
3395 Fortran 77 and later
3400 @item @emph{Syntax}:
3401 @code{RESULT = DIM(X, Y)}
3403 @item @emph{Arguments}:
3404 @multitable @columnfractions .15 .70
3405 @item @var{X} @tab The type shall be @code{INTEGER} or @code{REAL}
3406 @item @var{Y} @tab The type shall be the same type and kind as @var{X}.
3409 @item @emph{Return value}:
3410 The return value is of type @code{INTEGER} or @code{REAL}.
3412 @item @emph{Example}:
3418 x = dim(4.345_8, 2.111_8)
3421 end program test_dim
3424 @item @emph{Specific names}:
3425 @multitable @columnfractions .20 .20 .20 .25
3426 @item Name @tab Argument @tab Return type @tab Standard
3427 @item @code{DIM(X,Y)} @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
3428 @item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X, Y} @tab @code{INTEGER(4)} @tab Fortran 77 and later
3429 @item @code{DDIM(X,Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab Fortran 77 and later
3436 @section @code{DOT_PRODUCT} --- Dot product function
3437 @fnindex DOT_PRODUCT
3439 @cindex vector product
3440 @cindex product, vector
3443 @item @emph{Description}:
3444 @code{DOT_PRODUCT(VECTOR_A, VECTOR_B)} computes the dot product multiplication
3445 of two vectors @var{VECTOR_A} and @var{VECTOR_B}. The two vectors may be
3446 either numeric or logical and must be arrays of rank one and of equal size. If
3447 the vectors are @code{INTEGER} or @code{REAL}, the result is
3448 @code{SUM(VECTOR_A*VECTOR_B)}. If the vectors are @code{COMPLEX}, the result
3449 is @code{SUM(CONJG(VECTOR_A)*VECTOR_B)}. If the vectors are @code{LOGICAL},
3450 the result is @code{ANY(VECTOR_A .AND. VECTOR_B)}.
3452 @item @emph{Standard}:
3453 Fortran 95 and later
3456 Transformational function
3458 @item @emph{Syntax}:
3459 @code{RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)}
3461 @item @emph{Arguments}:
3462 @multitable @columnfractions .15 .70
3463 @item @var{VECTOR_A} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
3464 @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.
3467 @item @emph{Return value}:
3468 If the arguments are numeric, the return value is a scalar of numeric type,
3469 @code{INTEGER}, @code{REAL}, or @code{COMPLEX}. If the arguments are
3470 @code{LOGICAL}, the return value is @code{.TRUE.} or @code{.FALSE.}.
3472 @item @emph{Example}:
3474 program test_dot_prod
3475 integer, dimension(3) :: a, b
3482 print *, dot_product(a,b)
3483 end program test_dot_prod
3490 @section @code{DPROD} --- Double product function
3492 @cindex product, double-precision
3495 @item @emph{Description}:
3496 @code{DPROD(X,Y)} returns the product @code{X*Y}.
3498 @item @emph{Standard}:
3499 Fortran 77 and later
3504 @item @emph{Syntax}:
3505 @code{RESULT = DPROD(X, Y)}
3507 @item @emph{Arguments}:
3508 @multitable @columnfractions .15 .70
3509 @item @var{X} @tab The type shall be @code{REAL}.
3510 @item @var{Y} @tab The type shall be @code{REAL}.
3513 @item @emph{Return value}:
3514 The return value is of type @code{REAL(8)}.
3516 @item @emph{Example}:
3524 end program test_dprod
3527 @item @emph{Specific names}:
3528 @multitable @columnfractions .20 .20 .20 .25
3529 @item Name @tab Argument @tab Return type @tab Standard
3530 @item @code{DPROD(X,Y)} @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
3537 @section @code{DREAL} --- Double real part function
3539 @cindex complex numbers, real part
3542 @item @emph{Description}:
3543 @code{DREAL(Z)} returns the real part of complex variable @var{Z}.
3545 @item @emph{Standard}:
3551 @item @emph{Syntax}:
3552 @code{RESULT = DREAL(A)}
3554 @item @emph{Arguments}:
3555 @multitable @columnfractions .15 .70
3556 @item @var{A} @tab The type shall be @code{COMPLEX(8)}.
3559 @item @emph{Return value}:
3560 The return value is of type @code{REAL(8)}.
3562 @item @emph{Example}:
3565 complex(8) :: z = (1.3_8,7.2_8)
3567 end program test_dreal
3570 @item @emph{See also}:
3578 @section @code{DSHIFTL} --- Combined left shift
3580 @cindex left shift, combined
3584 @item @emph{Description}:
3585 @code{DSHIFTL(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
3586 rightmost @var{SHIFT} bits of the result are the leftmost @var{SHIFT}
3587 bits of @var{J}, and the remaining bits are the rightmost bits of
3590 @item @emph{Standard}:
3591 Fortran 2008 and later
3596 @item @emph{Syntax}:
3597 @code{RESULT = DSHIFTL(I, J, SHIFT)}
3599 @item @emph{Arguments}:
3600 @multitable @columnfractions .15 .70
3601 @item @var{I} @tab Shall be of type @code{INTEGER}.
3602 @item @var{J} @tab Shall be of type @code{INTEGER}, and of the same kind
3604 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}.
3607 @item @emph{Return value}:
3608 The return value has same type and kind as @var{I}.
3610 @item @emph{See also}:
3618 @section @code{DSHIFTR} --- Combined right shift
3620 @cindex right shift, combined
3621 @cindex shift, right
3624 @item @emph{Description}:
3625 @code{DSHIFTR(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
3626 leftmost @var{SHIFT} bits of the result are the rightmost @var{SHIFT}
3627 bits of @var{I}, and the remaining bits are the leftmost bits of
3630 @item @emph{Standard}:
3631 Fortran 2008 and later
3636 @item @emph{Syntax}:
3637 @code{RESULT = DSHIFTR(I, J, SHIFT)}
3639 @item @emph{Arguments}:
3640 @multitable @columnfractions .15 .70
3641 @item @var{I} @tab Shall be of type @code{INTEGER}.
3642 @item @var{J} @tab Shall be of type @code{INTEGER}, and of the same kind
3644 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}.
3647 @item @emph{Return value}:
3648 The return value has same type and kind as @var{I}.
3650 @item @emph{See also}:
3658 @section @code{DTIME} --- Execution time subroutine (or function)
3660 @cindex time, elapsed
3661 @cindex elapsed time
3664 @item @emph{Description}:
3665 @code{DTIME(VALUES, TIME)} initially returns the number of seconds of runtime
3666 since the start of the process's execution in @var{TIME}. @var{VALUES}
3667 returns the user and system components of this time in @code{VALUES(1)} and
3668 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) +
3671 Subsequent invocations of @code{DTIME} return values accumulated since the
3672 previous invocation.
3674 On some systems, the underlying timings are represented using types with
3675 sufficiently small limits that overflows (wrap around) are possible, such as
3676 32-bit types. Therefore, the values returned by this intrinsic might be, or
3677 become, negative, or numerically less than previous values, during a single
3678 run of the compiled program.
3680 Please note, that this implementation is thread safe if used within OpenMP
3681 directives, i.e., its state will be consistent while called from multiple
3682 threads. However, if @code{DTIME} is called from multiple threads, the result
3683 is still the time since the last invocation. This may not give the intended
3684 results. If possible, use @code{CPU_TIME} instead.
3686 This intrinsic is provided in both subroutine and function forms; however,
3687 only one form can be used in any given program unit.
3689 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
3691 @multitable @columnfractions .15 .30 .40
3692 @item @tab @code{VALUES(1)}: @tab User time in seconds.
3693 @item @tab @code{VALUES(2)}: @tab System time in seconds.
3694 @item @tab @code{TIME}: @tab Run time since start in seconds.
3697 @item @emph{Standard}:
3701 Subroutine, function
3703 @item @emph{Syntax}:
3704 @multitable @columnfractions .80
3705 @item @code{CALL DTIME(VALUES, TIME)}.
3706 @item @code{TIME = DTIME(VALUES)}, (not recommended).
3709 @item @emph{Arguments}:
3710 @multitable @columnfractions .15 .70
3711 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
3712 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
3715 @item @emph{Return value}:
3716 Elapsed time in seconds since the last invocation or since the start of program
3717 execution if not called before.
3719 @item @emph{Example}:
3723 real, dimension(2) :: tarray
3725 call dtime(tarray, result)
3729 do i=1,100000000 ! Just a delay
3732 call dtime(tarray, result)
3736 end program test_dtime
3739 @item @emph{See also}:
3747 @section @code{EOSHIFT} --- End-off shift elements of an array
3749 @cindex array, shift
3752 @item @emph{Description}:
3753 @code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on
3754 elements of @var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is
3755 omitted it is taken to be @code{1}. @var{DIM} is a scalar of type
3756 @code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the
3757 rank of @var{ARRAY}. If the rank of @var{ARRAY} is one, then all elements of
3758 @var{ARRAY} are shifted by @var{SHIFT} places. If rank is greater than one,
3759 then all complete rank one sections of @var{ARRAY} along the given dimension are
3760 shifted. Elements shifted out one end of each rank one section are dropped. If
3761 @var{BOUNDARY} is present then the corresponding value of from @var{BOUNDARY}
3762 is copied back in the other end. If @var{BOUNDARY} is not present then the
3763 following are copied in depending on the type of @var{ARRAY}.
3765 @multitable @columnfractions .15 .80
3766 @item @emph{Array Type} @tab @emph{Boundary Value}
3767 @item Numeric @tab 0 of the type and kind of @var{ARRAY}.
3768 @item Logical @tab @code{.FALSE.}.
3769 @item Character(@var{len}) @tab @var{len} blanks.
3772 @item @emph{Standard}:
3773 Fortran 95 and later
3776 Transformational function
3778 @item @emph{Syntax}:
3779 @code{RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])}
3781 @item @emph{Arguments}:
3782 @multitable @columnfractions .15 .70
3783 @item @var{ARRAY} @tab May be any type, not scalar.
3784 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
3785 @item @var{BOUNDARY} @tab Same type as @var{ARRAY}.
3786 @item @var{DIM} @tab The type shall be @code{INTEGER}.
3789 @item @emph{Return value}:
3790 Returns an array of same type and rank as the @var{ARRAY} argument.
3792 @item @emph{Example}:
3794 program test_eoshift
3795 integer, dimension(3,3) :: a
3796 a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
3797 print '(3i3)', a(1,:)
3798 print '(3i3)', a(2,:)
3799 print '(3i3)', a(3,:)
3800 a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
3802 print '(3i3)', a(1,:)
3803 print '(3i3)', a(2,:)
3804 print '(3i3)', a(3,:)
3805 end program test_eoshift
3812 @section @code{EPSILON} --- Epsilon function
3814 @cindex model representation, epsilon
3817 @item @emph{Description}:
3818 @code{EPSILON(X)} returns the smallest number @var{E} of the same kind
3819 as @var{X} such that @math{1 + E > 1}.
3821 @item @emph{Standard}:
3822 Fortran 95 and later
3827 @item @emph{Syntax}:
3828 @code{RESULT = EPSILON(X)}
3830 @item @emph{Arguments}:
3831 @multitable @columnfractions .15 .70
3832 @item @var{X} @tab The type shall be @code{REAL}.
3835 @item @emph{Return value}:
3836 The return value is of same type as the argument.
3838 @item @emph{Example}:
3840 program test_epsilon
3845 end program test_epsilon
3852 @section @code{ERF} --- Error function
3854 @cindex error function
3857 @item @emph{Description}:
3858 @code{ERF(X)} computes the error function of @var{X}.
3860 @item @emph{Standard}:
3861 Fortran 2008 and later
3866 @item @emph{Syntax}:
3867 @code{RESULT = ERF(X)}
3869 @item @emph{Arguments}:
3870 @multitable @columnfractions .15 .70
3871 @item @var{X} @tab The type shall be @code{REAL}.
3874 @item @emph{Return value}:
3875 The return value is of type @code{REAL}, of the same kind as
3876 @var{X} and lies in the range @math{-1 \leq erf (x) \leq 1 }.
3878 @item @emph{Example}:
3881 real(8) :: x = 0.17_8
3883 end program test_erf
3886 @item @emph{Specific names}:
3887 @multitable @columnfractions .20 .20 .20 .25
3888 @item Name @tab Argument @tab Return type @tab Standard
3889 @item @code{DERF(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
3896 @section @code{ERFC} --- Error function
3898 @cindex error function, complementary
3901 @item @emph{Description}:
3902 @code{ERFC(X)} computes the complementary error function of @var{X}.
3904 @item @emph{Standard}:
3905 Fortran 2008 and later
3910 @item @emph{Syntax}:
3911 @code{RESULT = ERFC(X)}
3913 @item @emph{Arguments}:
3914 @multitable @columnfractions .15 .70
3915 @item @var{X} @tab The type shall be @code{REAL}.
3918 @item @emph{Return value}:
3919 The return value is of type @code{REAL} and of the same kind as @var{X}.
3920 It lies in the range @math{ 0 \leq erfc (x) \leq 2 }.
3922 @item @emph{Example}:
3925 real(8) :: x = 0.17_8
3927 end program test_erfc
3930 @item @emph{Specific names}:
3931 @multitable @columnfractions .20 .20 .20 .25
3932 @item Name @tab Argument @tab Return type @tab Standard
3933 @item @code{DERFC(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
3940 @section @code{ERFC_SCALED} --- Error function
3941 @fnindex ERFC_SCALED
3942 @cindex error function, complementary, exponentially-scaled
3945 @item @emph{Description}:
3946 @code{ERFC_SCALED(X)} computes the exponentially-scaled complementary
3947 error function of @var{X}.
3949 @item @emph{Standard}:
3950 Fortran 2008 and later
3955 @item @emph{Syntax}:
3956 @code{RESULT = ERFC_SCALED(X)}
3958 @item @emph{Arguments}:
3959 @multitable @columnfractions .15 .70
3960 @item @var{X} @tab The type shall be @code{REAL}.
3963 @item @emph{Return value}:
3964 The return value is of type @code{REAL} and of the same kind as @var{X}.
3966 @item @emph{Example}:
3968 program test_erfc_scaled
3969 real(8) :: x = 0.17_8
3971 end program test_erfc_scaled
3978 @section @code{ETIME} --- Execution time subroutine (or function)
3980 @cindex time, elapsed
3983 @item @emph{Description}:
3984 @code{ETIME(VALUES, TIME)} returns the number of seconds of runtime
3985 since the start of the process's execution in @var{TIME}. @var{VALUES}
3986 returns the user and system components of this time in @code{VALUES(1)} and
3987 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) + VALUES(2)}.
3989 On some systems, the underlying timings are represented using types with
3990 sufficiently small limits that overflows (wrap around) are possible, such as
3991 32-bit types. Therefore, the values returned by this intrinsic might be, or
3992 become, negative, or numerically less than previous values, during a single
3993 run of the compiled program.
3995 This intrinsic is provided in both subroutine and function forms; however,
3996 only one form can be used in any given program unit.
3998 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
4000 @multitable @columnfractions .15 .30 .60
4001 @item @tab @code{VALUES(1)}: @tab User time in seconds.
4002 @item @tab @code{VALUES(2)}: @tab System time in seconds.
4003 @item @tab @code{TIME}: @tab Run time since start in seconds.
4006 @item @emph{Standard}:
4010 Subroutine, function
4012 @item @emph{Syntax}:
4013 @multitable @columnfractions .80
4014 @item @code{CALL ETIME(VALUES, TIME)}.
4015 @item @code{TIME = ETIME(VALUES)}, (not recommended).
4018 @item @emph{Arguments}:
4019 @multitable @columnfractions .15 .70
4020 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
4021 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
4024 @item @emph{Return value}:
4025 Elapsed time in seconds since the start of program execution.
4027 @item @emph{Example}:
4031 real, dimension(2) :: tarray
4033 call ETIME(tarray, result)
4037 do i=1,100000000 ! Just a delay
4040 call ETIME(tarray, result)
4044 end program test_etime
4047 @item @emph{See also}:
4054 @node EXECUTE_COMMAND_LINE
4055 @section @code{EXECUTE_COMMAND_LINE} --- Execute a shell command
4056 @fnindex EXECUTE_COMMAND_LINE
4057 @cindex system, system call
4058 @cindex command line
4061 @item @emph{Description}:
4062 @code{EXECUTE_COMMAND_LINE} runs a shell command, synchronously or
4065 The @code{COMMAND} argument is passed to the shell and executed, using
4066 the C library's @code{system()} call. (The shell is @code{sh} on Unix
4067 systems, and @code{cmd.exe} on Windows.) If @code{WAIT} is present and
4068 has the value false, the execution of the command is asynchronous if the
4069 system supports it; otherwise, the command is executed synchronously.
4071 The three last arguments allow the user to get status information. After
4072 synchronous execution, @code{EXITSTAT} contains the integer exit code of
4073 the command, as returned by @code{system}. @code{CMDSTAT} is set to zero
4074 if the command line was executed (whatever its exit status was).
4075 @code{CMDMSG} is assigned an error message if an error has occurred.
4078 @item @emph{Standard}:
4079 Fortran 2008 and later
4084 @item @emph{Syntax}:
4085 @code{CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])}
4087 @item @emph{Arguments}:
4088 @multitable @columnfractions .15 .70
4089 @item @var{COMMAND} @tab Shall be a default @code{CHARACTER} scalar.
4090 @item @var{WAIT} @tab (Optional) Shall be a default @code{LOGICAL} scalar.
4091 @item @var{EXITSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
4093 @item @var{CMDSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
4095 @item @var{CMDMSG} @tab (Optional) Shall be an @code{CHARACTER} scalar of the
4099 @item @emph{Example}:
4104 call execute_command_line ("external_prog.exe", exitstat=i)
4105 print *, "Exit status of external_prog.exe was ", i
4107 call execute_command_line ("reindex_files.exe", wait=.false.)
4108 print *, "Now reindexing files in the background"
4110 end program test_exec
4116 Because this intrinsic is implemented in terms of the @code{system()}
4117 function call, its behavior with respect to signalling is processor
4118 dependent. In particular, on POSIX-compliant systems, the SIGINT and
4119 SIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As
4120 such, if the parent process is terminated, the child process might not be
4121 terminated alongside.
4124 @item @emph{See also}:
4131 @section @code{EXIT} --- Exit the program with status.
4133 @cindex program termination
4134 @cindex terminate program
4137 @item @emph{Description}:
4138 @code{EXIT} causes immediate termination of the program with status. If status
4139 is omitted it returns the canonical @emph{success} for the system. All Fortran
4140 I/O units are closed.
4142 @item @emph{Standard}:
4148 @item @emph{Syntax}:
4149 @code{CALL EXIT([STATUS])}
4151 @item @emph{Arguments}:
4152 @multitable @columnfractions .15 .70
4153 @item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind.
4156 @item @emph{Return value}:
4157 @code{STATUS} is passed to the parent process on exit.
4159 @item @emph{Example}:
4162 integer :: STATUS = 0
4163 print *, 'This program is going to exit.'
4165 end program test_exit
4168 @item @emph{See also}:
4169 @ref{ABORT}, @ref{KILL}
4175 @section @code{EXP} --- Exponential function
4181 @cindex exponential function
4182 @cindex logarithmic function, inverse
4185 @item @emph{Description}:
4186 @code{EXP(X)} computes the base @math{e} exponential of @var{X}.
4188 @item @emph{Standard}:
4189 Fortran 77 and later, has overloads that are GNU extensions
4194 @item @emph{Syntax}:
4195 @code{RESULT = EXP(X)}
4197 @item @emph{Arguments}:
4198 @multitable @columnfractions .15 .70
4199 @item @var{X} @tab The type shall be @code{REAL} or
4203 @item @emph{Return value}:
4204 The return value has same type and kind as @var{X}.
4206 @item @emph{Example}:
4211 end program test_exp
4214 @item @emph{Specific names}:
4215 @multitable @columnfractions .20 .20 .20 .25
4216 @item Name @tab Argument @tab Return type @tab Standard
4217 @item @code{EXP(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
4218 @item @code{DEXP(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
4219 @item @code{CEXP(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
4220 @item @code{ZEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4221 @item @code{CDEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4228 @section @code{EXPONENT} --- Exponent function
4230 @cindex real number, exponent
4231 @cindex floating point, exponent
4234 @item @emph{Description}:
4235 @code{EXPONENT(X)} returns the value of the exponent part of @var{X}. If @var{X}
4236 is zero the value returned is zero.
4238 @item @emph{Standard}:
4239 Fortran 95 and later
4244 @item @emph{Syntax}:
4245 @code{RESULT = EXPONENT(X)}
4247 @item @emph{Arguments}:
4248 @multitable @columnfractions .15 .70
4249 @item @var{X} @tab The type shall be @code{REAL}.
4252 @item @emph{Return value}:
4253 The return value is of type default @code{INTEGER}.
4255 @item @emph{Example}:
4257 program test_exponent
4262 print *, exponent(0.0)
4263 end program test_exponent
4269 @node EXTENDS_TYPE_OF
4270 @section @code{EXTENDS_TYPE_OF} --- Query dynamic type for extension
4271 @fnindex EXTENDS_TYPE_OF
4274 @item @emph{Description}:
4275 Query dynamic type for extension.
4277 @item @emph{Standard}:
4278 Fortran 2003 and later
4283 @item @emph{Syntax}:
4284 @code{RESULT = EXTENDS_TYPE_OF(A, MOLD)}
4286 @item @emph{Arguments}:
4287 @multitable @columnfractions .15 .70
4288 @item @var{A} @tab Shall be an object of extensible declared type or
4289 unlimited polymorphic.
4290 @item @var{MOLD} @tab Shall be an object of extensible declared type or
4291 unlimited polymorphic.
4294 @item @emph{Return value}:
4295 The return value is a scalar of type default logical. It is true if and only if
4296 the dynamic type of A is an extension type of the dynamic type of MOLD.
4299 @item @emph{See also}:
4306 @section @code{FDATE} --- Get the current time as a string
4308 @cindex time, current
4309 @cindex current time
4310 @cindex date, current
4311 @cindex current date
4314 @item @emph{Description}:
4315 @code{FDATE(DATE)} returns the current date (using the same format as
4316 @code{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE,
4319 This intrinsic is provided in both subroutine and function forms; however,
4320 only one form can be used in any given program unit.
4322 @var{DATE} is an @code{INTENT(OUT)} @code{CHARACTER} variable of the
4325 @item @emph{Standard}:
4329 Subroutine, function
4331 @item @emph{Syntax}:
4332 @multitable @columnfractions .80
4333 @item @code{CALL FDATE(DATE)}.
4334 @item @code{DATE = FDATE()}, (not recommended).
4337 @item @emph{Arguments}:
4338 @multitable @columnfractions .15 .70
4339 @item @var{DATE}@tab The type shall be of type @code{CHARACTER} of the
4343 @item @emph{Return value}:
4344 The current date as a string.
4346 @item @emph{Example}:
4350 character(len=30) :: date
4352 print *, 'Program started on ', date
4353 do i = 1, 100000000 ! Just a delay
4357 print *, 'Program ended on ', date
4358 end program test_fdate
4365 @section @code{FGET} --- Read a single character in stream mode from stdin
4367 @cindex read character, stream mode
4368 @cindex stream mode, read character
4369 @cindex file operation, read character
4372 @item @emph{Description}:
4373 Read a single character in stream mode from stdin by bypassing normal
4374 formatted output. Stream I/O should not be mixed with normal record-oriented
4375 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
4377 This intrinsic is provided in both subroutine and function forms; however,
4378 only one form can be used in any given program unit.
4380 Note that the @code{FGET} intrinsic is provided for backwards compatibility with
4381 @command{g77}. GNU Fortran provides the Fortran 2003 Stream facility.
4382 Programmers should consider the use of new stream IO feature in new code
4383 for future portability. See also @ref{Fortran 2003 status}.
4385 @item @emph{Standard}:
4389 Subroutine, function
4391 @item @emph{Syntax}:
4392 @code{CALL FGET(C [, STATUS])}
4394 @item @emph{Arguments}:
4395 @multitable @columnfractions .15 .70
4396 @item @var{C} @tab The type shall be @code{CHARACTER} and of default
4398 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4399 Returns 0 on success, -1 on end-of-file, and a system specific positive
4400 error code otherwise.
4403 @item @emph{Example}:
4406 INTEGER, PARAMETER :: strlen = 100
4407 INTEGER :: status, i = 1
4408 CHARACTER(len=strlen) :: str = ""
4410 WRITE (*,*) 'Enter text:'
4412 CALL fget(str(i:i), status)
4413 if (status /= 0 .OR. i > strlen) exit
4416 WRITE (*,*) TRIM(str)
4420 @item @emph{See also}:
4421 @ref{FGETC}, @ref{FPUT}, @ref{FPUTC}
4427 @section @code{FGETC} --- Read a single character in stream mode
4429 @cindex read character, stream mode
4430 @cindex stream mode, read character
4431 @cindex file operation, read character
4434 @item @emph{Description}:
4435 Read a single character in stream mode by bypassing normal formatted output.
4436 Stream I/O should not be mixed with normal record-oriented (formatted or
4437 unformatted) I/O on the same unit; the results are unpredictable.
4439 This intrinsic is provided in both subroutine and function forms; however,
4440 only one form can be used in any given program unit.
4442 Note that the @code{FGET} intrinsic is provided for backwards compatibility
4443 with @command{g77}. GNU Fortran provides the Fortran 2003 Stream facility.
4444 Programmers should consider the use of new stream IO feature in new code
4445 for future portability. See also @ref{Fortran 2003 status}.
4447 @item @emph{Standard}:
4451 Subroutine, function
4453 @item @emph{Syntax}:
4454 @code{CALL FGETC(UNIT, C [, STATUS])}
4456 @item @emph{Arguments}:
4457 @multitable @columnfractions .15 .70
4458 @item @var{UNIT} @tab The type shall be @code{INTEGER}.
4459 @item @var{C} @tab The type shall be @code{CHARACTER} and of default
4461 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4462 Returns 0 on success, -1 on end-of-file and a system specific positive
4463 error code otherwise.
4466 @item @emph{Example}:
4469 INTEGER :: fd = 42, status
4472 OPEN(UNIT=fd, FILE="/etc/passwd", ACTION="READ", STATUS = "OLD")
4474 CALL fgetc(fd, c, status)
4475 IF (status /= 0) EXIT
4482 @item @emph{See also}:
4483 @ref{FGET}, @ref{FPUT}, @ref{FPUTC}
4489 @section @code{FLOOR} --- Integer floor function
4492 @cindex rounding, floor
4495 @item @emph{Description}:
4496 @code{FLOOR(A)} returns the greatest integer less than or equal to @var{X}.
4498 @item @emph{Standard}:
4499 Fortran 95 and later
4504 @item @emph{Syntax}:
4505 @code{RESULT = FLOOR(A [, KIND])}
4507 @item @emph{Arguments}:
4508 @multitable @columnfractions .15 .70
4509 @item @var{A} @tab The type shall be @code{REAL}.
4510 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
4511 expression indicating the kind parameter of the result.
4514 @item @emph{Return value}:
4515 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
4516 and of default-kind @code{INTEGER} otherwise.
4518 @item @emph{Example}:
4523 print *, floor(x) ! returns 63
4524 print *, floor(y) ! returns -64
4525 end program test_floor
4528 @item @emph{See also}:
4529 @ref{CEILING}, @ref{NINT}
4536 @section @code{FLUSH} --- Flush I/O unit(s)
4538 @cindex file operation, flush
4541 @item @emph{Description}:
4542 Flushes Fortran unit(s) currently open for output. Without the optional
4543 argument, all units are flushed, otherwise just the unit specified.
4545 @item @emph{Standard}:
4551 @item @emph{Syntax}:
4552 @code{CALL FLUSH(UNIT)}
4554 @item @emph{Arguments}:
4555 @multitable @columnfractions .15 .70
4556 @item @var{UNIT} @tab (Optional) The type shall be @code{INTEGER}.
4560 Beginning with the Fortran 2003 standard, there is a @code{FLUSH}
4561 statement that should be preferred over the @code{FLUSH} intrinsic.
4563 The @code{FLUSH} intrinsic and the Fortran 2003 @code{FLUSH} statement
4564 have identical effect: they flush the runtime library's I/O buffer so
4565 that the data becomes visible to other processes. This does not guarantee
4566 that the data is committed to disk.
4568 On POSIX systems, you can request that all data is transferred to the
4569 storage device by calling the @code{fsync} function, with the POSIX file
4570 descriptor of the I/O unit as argument (retrieved with GNU intrinsic
4571 @code{FNUM}). The following example shows how:
4574 ! Declare the interface for POSIX fsync function
4576 function fsync (fd) bind(c,name="fsync")
4577 use iso_c_binding, only: c_int
4578 integer(c_int), value :: fd
4579 integer(c_int) :: fsync
4583 ! Variable declaration
4587 open (10,file="foo")
4590 ! Perform I/O on unit 10
4595 ret = fsync(fnum(10))
4597 ! Handle possible error
4598 if (ret /= 0) stop "Error calling FSYNC"
4606 @section @code{FNUM} --- File number function
4608 @cindex file operation, file number
4611 @item @emph{Description}:
4612 @code{FNUM(UNIT)} returns the POSIX file descriptor number corresponding to the
4613 open Fortran I/O unit @code{UNIT}.
4615 @item @emph{Standard}:
4621 @item @emph{Syntax}:
4622 @code{RESULT = FNUM(UNIT)}
4624 @item @emph{Arguments}:
4625 @multitable @columnfractions .15 .70
4626 @item @var{UNIT} @tab The type shall be @code{INTEGER}.
4629 @item @emph{Return value}:
4630 The return value is of type @code{INTEGER}
4632 @item @emph{Example}:
4636 open (unit=10, status = "scratch")
4640 end program test_fnum
4647 @section @code{FPUT} --- Write a single character in stream mode to stdout
4649 @cindex write character, stream mode
4650 @cindex stream mode, write character
4651 @cindex file operation, write character
4654 @item @emph{Description}:
4655 Write a single character in stream mode to stdout by bypassing normal
4656 formatted output. Stream I/O should not be mixed with normal record-oriented
4657 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
4659 This intrinsic is provided in both subroutine and function forms; however,
4660 only one form can be used in any given program unit.
4662 Note that the @code{FGET} intrinsic is provided for backwards compatibility with
4663 @command{g77}. GNU Fortran provides the Fortran 2003 Stream facility.
4664 Programmers should consider the use of new stream IO feature in new code
4665 for future portability. See also @ref{Fortran 2003 status}.
4667 @item @emph{Standard}:
4671 Subroutine, function
4673 @item @emph{Syntax}:
4674 @code{CALL FPUT(C [, STATUS])}
4676 @item @emph{Arguments}:
4677 @multitable @columnfractions .15 .70
4678 @item @var{C} @tab The type shall be @code{CHARACTER} and of default
4680 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4681 Returns 0 on success, -1 on end-of-file and a system specific positive
4682 error code otherwise.
4685 @item @emph{Example}:
4688 CHARACTER(len=10) :: str = "gfortran"
4690 DO i = 1, len_trim(str)
4696 @item @emph{See also}:
4697 @ref{FPUTC}, @ref{FGET}, @ref{FGETC}
4703 @section @code{FPUTC} --- Write a single character in stream mode
4705 @cindex write character, stream mode
4706 @cindex stream mode, write character
4707 @cindex file operation, write character
4710 @item @emph{Description}:
4711 Write a single character in stream mode by bypassing normal formatted
4712 output. Stream I/O should not be mixed with normal record-oriented
4713 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
4715 This intrinsic is provided in both subroutine and function forms; however,
4716 only one form can be used in any given program unit.
4718 Note that the @code{FGET} intrinsic is provided for backwards compatibility with
4719 @command{g77}. GNU Fortran provides the Fortran 2003 Stream facility.
4720 Programmers should consider the use of new stream IO feature in new code
4721 for future portability. See also @ref{Fortran 2003 status}.
4723 @item @emph{Standard}:
4727 Subroutine, function
4729 @item @emph{Syntax}:
4730 @code{CALL FPUTC(UNIT, C [, STATUS])}
4732 @item @emph{Arguments}:
4733 @multitable @columnfractions .15 .70
4734 @item @var{UNIT} @tab The type shall be @code{INTEGER}.
4735 @item @var{C} @tab The type shall be @code{CHARACTER} and of default
4737 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4738 Returns 0 on success, -1 on end-of-file and a system specific positive
4739 error code otherwise.
4742 @item @emph{Example}:
4745 CHARACTER(len=10) :: str = "gfortran"
4746 INTEGER :: fd = 42, i
4748 OPEN(UNIT = fd, FILE = "out", ACTION = "WRITE", STATUS="NEW")
4749 DO i = 1, len_trim(str)
4750 CALL fputc(fd, str(i:i))
4756 @item @emph{See also}:
4757 @ref{FPUT}, @ref{FGET}, @ref{FGETC}
4763 @section @code{FRACTION} --- Fractional part of the model representation
4765 @cindex real number, fraction
4766 @cindex floating point, fraction
4769 @item @emph{Description}:
4770 @code{FRACTION(X)} returns the fractional part of the model
4771 representation of @code{X}.
4773 @item @emph{Standard}:
4774 Fortran 95 and later
4779 @item @emph{Syntax}:
4780 @code{Y = FRACTION(X)}
4782 @item @emph{Arguments}:
4783 @multitable @columnfractions .15 .70
4784 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
4787 @item @emph{Return value}:
4788 The return value is of the same type and kind as the argument.
4789 The fractional part of the model representation of @code{X} is returned;
4790 it is @code{X * RADIX(X)**(-EXPONENT(X))}.
4792 @item @emph{Example}:
4794 program test_fraction
4797 print *, fraction(x), x * radix(x)**(-exponent(x))
4798 end program test_fraction
4806 @section @code{FREE} --- Frees memory
4808 @cindex pointer, cray
4811 @item @emph{Description}:
4812 Frees memory previously allocated by @code{MALLOC()}. The @code{FREE}
4813 intrinsic is an extension intended to be used with Cray pointers, and is
4814 provided in GNU Fortran to allow user to compile legacy code. For
4815 new code using Fortran 95 pointers, the memory de-allocation intrinsic is
4818 @item @emph{Standard}:
4824 @item @emph{Syntax}:
4825 @code{CALL FREE(PTR)}
4827 @item @emph{Arguments}:
4828 @multitable @columnfractions .15 .70
4829 @item @var{PTR} @tab The type shall be @code{INTEGER}. It represents the
4830 location of the memory that should be de-allocated.
4833 @item @emph{Return value}:
4836 @item @emph{Example}:
4837 See @code{MALLOC} for an example.
4839 @item @emph{See also}:
4846 @section @code{FSEEK} --- Low level file positioning subroutine
4848 @cindex file operation, seek
4849 @cindex file operation, position
4852 @item @emph{Description}:
4853 Moves @var{UNIT} to the specified @var{OFFSET}. If @var{WHENCE}
4854 is set to 0, the @var{OFFSET} is taken as an absolute value @code{SEEK_SET},
4855 if set to 1, @var{OFFSET} is taken to be relative to the current position
4856 @code{SEEK_CUR}, and if set to 2 relative to the end of the file @code{SEEK_END}.
4857 On error, @var{STATUS} is set to a nonzero value. If @var{STATUS} the seek
4860 This intrinsic routine is not fully backwards compatible with @command{g77}.
4861 In @command{g77}, the @code{FSEEK} takes a statement label instead of a
4862 @var{STATUS} variable. If FSEEK is used in old code, change
4864 CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
4869 CALL FSEEK(UNIT, OFFSET, WHENCE, status)
4870 IF (status /= 0) GOTO label
4873 Please note that GNU Fortran provides the Fortran 2003 Stream facility.
4874 Programmers should consider the use of new stream IO feature in new code
4875 for future portability. See also @ref{Fortran 2003 status}.
4877 @item @emph{Standard}:
4883 @item @emph{Syntax}:
4884 @code{CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])}
4886 @item @emph{Arguments}:
4887 @multitable @columnfractions .15 .70
4888 @item @var{UNIT} @tab Shall be a scalar of type @code{INTEGER}.
4889 @item @var{OFFSET} @tab Shall be a scalar of type @code{INTEGER}.
4890 @item @var{WHENCE} @tab Shall be a scalar of type @code{INTEGER}.
4891 Its value shall be either 0, 1 or 2.
4892 @item @var{STATUS} @tab (Optional) shall be a scalar of type
4896 @item @emph{Example}:
4899 INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2
4900 INTEGER :: fd, offset, ierr
4906 OPEN(UNIT=fd, FILE="fseek.test")
4907 CALL FSEEK(fd, offset, SEEK_SET, ierr) ! move to OFFSET
4908 print *, FTELL(fd), ierr
4910 CALL FSEEK(fd, 0, SEEK_END, ierr) ! move to end
4911 print *, FTELL(fd), ierr
4913 CALL FSEEK(fd, 0, SEEK_SET, ierr) ! move to beginning
4914 print *, FTELL(fd), ierr
4920 @item @emph{See also}:
4927 @section @code{FSTAT} --- Get file status
4929 @cindex file system, file status
4932 @item @emph{Description}:
4933 @code{FSTAT} is identical to @ref{STAT}, except that information about an
4934 already opened file is obtained.
4936 The elements in @code{VALUES} are the same as described by @ref{STAT}.
4938 This intrinsic is provided in both subroutine and function forms; however,
4939 only one form can be used in any given program unit.
4941 @item @emph{Standard}:
4945 Subroutine, function
4947 @item @emph{Syntax}:
4948 @code{CALL FSTAT(UNIT, VALUES [, STATUS])}
4950 @item @emph{Arguments}:
4951 @multitable @columnfractions .15 .70
4952 @item @var{UNIT} @tab An open I/O unit number of type @code{INTEGER}.
4953 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
4954 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0
4955 on success and a system specific error code otherwise.
4958 @item @emph{Example}:
4959 See @ref{STAT} for an example.
4961 @item @emph{See also}:
4962 To stat a link: @ref{LSTAT}, to stat a file: @ref{STAT}
4968 @section @code{FTELL} --- Current stream position
4970 @cindex file operation, position
4973 @item @emph{Description}:
4974 Retrieves the current position within an open file.
4976 This intrinsic is provided in both subroutine and function forms; however,
4977 only one form can be used in any given program unit.
4979 @item @emph{Standard}:
4983 Subroutine, function
4985 @item @emph{Syntax}:
4986 @multitable @columnfractions .80
4987 @item @code{CALL FTELL(UNIT, OFFSET)}
4988 @item @code{OFFSET = FTELL(UNIT)}
4991 @item @emph{Arguments}:
4992 @multitable @columnfractions .15 .70
4993 @item @var{OFFSET} @tab Shall of type @code{INTEGER}.
4994 @item @var{UNIT} @tab Shall of type @code{INTEGER}.
4997 @item @emph{Return value}:
4998 In either syntax, @var{OFFSET} is set to the current offset of unit
4999 number @var{UNIT}, or to @math{-1} if the unit is not currently open.
5001 @item @emph{Example}:
5005 OPEN(10, FILE="temp.dat")
5011 @item @emph{See also}:
5018 @section @code{GAMMA} --- Gamma function
5021 @cindex Gamma function
5022 @cindex Factorial function
5025 @item @emph{Description}:
5026 @code{GAMMA(X)} computes Gamma (@math{\Gamma}) of @var{X}. For positive,
5027 integer values of @var{X} the Gamma function simplifies to the factorial
5028 function @math{\Gamma(x)=(x-1)!}.
5032 \Gamma(x) = \int_0^\infty t^{x-1}{\rm e}^{-t}\,{\rm d}t
5036 @item @emph{Standard}:
5037 Fortran 2008 and later
5042 @item @emph{Syntax}:
5045 @item @emph{Arguments}:
5046 @multitable @columnfractions .15 .70
5047 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
5048 nor a negative integer.
5051 @item @emph{Return value}:
5052 The return value is of type @code{REAL} of the same kind as @var{X}.
5054 @item @emph{Example}:
5058 x = gamma(x) ! returns 1.0
5059 end program test_gamma
5062 @item @emph{Specific names}:
5063 @multitable @columnfractions .20 .20 .20 .25
5064 @item Name @tab Argument @tab Return type @tab Standard
5065 @item @code{GAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab GNU Extension
5066 @item @code{DGAMMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU Extension
5069 @item @emph{See also}:
5070 Logarithm of the Gamma function: @ref{LOG_GAMMA}
5077 @section @code{GERROR} --- Get last system error message
5079 @cindex system, error handling
5082 @item @emph{Description}:
5083 Returns the system error message corresponding to the last system error.
5084 This resembles the functionality of @code{strerror(3)} in C.
5086 @item @emph{Standard}:
5092 @item @emph{Syntax}:
5093 @code{CALL GERROR(RESULT)}
5095 @item @emph{Arguments}:
5096 @multitable @columnfractions .15 .70
5097 @item @var{RESULT} @tab Shall of type @code{CHARACTER} and of default
5100 @item @emph{Example}:
5103 CHARACTER(len=100) :: msg
5109 @item @emph{See also}:
5110 @ref{IERRNO}, @ref{PERROR}
5116 @section @code{GETARG} --- Get command line arguments
5118 @cindex command-line arguments
5119 @cindex arguments, to program
5122 @item @emph{Description}:
5123 Retrieve the @var{POS}-th argument that was passed on the
5124 command line when the containing program was invoked.
5126 This intrinsic routine is provided for backwards compatibility with
5127 GNU Fortran 77. In new code, programmers should consider the use of
5128 the @ref{GET_COMMAND_ARGUMENT} intrinsic defined by the Fortran 2003
5131 @item @emph{Standard}:
5137 @item @emph{Syntax}:
5138 @code{CALL GETARG(POS, VALUE)}
5140 @item @emph{Arguments}:
5141 @multitable @columnfractions .15 .70
5142 @item @var{POS} @tab Shall be of type @code{INTEGER} and not wider than
5143 the default integer kind; @math{@var{POS} \geq 0}
5144 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default
5146 @item @var{VALUE} @tab Shall be of type @code{CHARACTER}.
5149 @item @emph{Return value}:
5150 After @code{GETARG} returns, the @var{VALUE} argument holds the
5151 @var{POS}th command line argument. If @var{VALUE} can not hold the
5152 argument, it is truncated to fit the length of @var{VALUE}. If there are
5153 less than @var{POS} arguments specified at the command line, @var{VALUE}
5154 will be filled with blanks. If @math{@var{POS} = 0}, @var{VALUE} is set
5155 to the name of the program (on systems that support this feature).
5157 @item @emph{Example}:
5161 CHARACTER(len=32) :: arg
5170 @item @emph{See also}:
5171 GNU Fortran 77 compatibility function: @ref{IARGC}
5173 Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
5174 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
5180 @section @code{GET_COMMAND} --- Get the entire command line
5181 @fnindex GET_COMMAND
5182 @cindex command-line arguments
5183 @cindex arguments, to program
5186 @item @emph{Description}:
5187 Retrieve the entire command line that was used to invoke the program.
5189 @item @emph{Standard}:
5190 Fortran 2003 and later
5195 @item @emph{Syntax}:
5196 @code{CALL GET_COMMAND([COMMAND, LENGTH, STATUS])}
5198 @item @emph{Arguments}:
5199 @multitable @columnfractions .15 .70
5200 @item @var{COMMAND} @tab (Optional) shall be of type @code{CHARACTER} and
5202 @item @var{LENGTH} @tab (Optional) Shall be of type @code{INTEGER} and of
5204 @item @var{STATUS} @tab (Optional) Shall be of type @code{INTEGER} and of
5208 @item @emph{Return value}:
5209 If @var{COMMAND} is present, stores the entire command line that was used
5210 to invoke the program in @var{COMMAND}. If @var{LENGTH} is present, it is
5211 assigned the length of the command line. If @var{STATUS} is present, it
5212 is assigned 0 upon success of the command, -1 if @var{COMMAND} is too
5213 short to store the command line, or a positive value in case of an error.
5215 @item @emph{Example}:
5217 PROGRAM test_get_command
5218 CHARACTER(len=255) :: cmd
5219 CALL get_command(cmd)
5220 WRITE (*,*) TRIM(cmd)
5224 @item @emph{See also}:
5225 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
5230 @node GET_COMMAND_ARGUMENT
5231 @section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments
5232 @fnindex GET_COMMAND_ARGUMENT
5233 @cindex command-line arguments
5234 @cindex arguments, to program
5237 @item @emph{Description}:
5238 Retrieve the @var{NUMBER}-th argument that was passed on the
5239 command line when the containing program was invoked.
5241 @item @emph{Standard}:
5242 Fortran 2003 and later
5247 @item @emph{Syntax}:
5248 @code{CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])}
5250 @item @emph{Arguments}:
5251 @multitable @columnfractions .15 .70
5252 @item @var{NUMBER} @tab Shall be a scalar of type @code{INTEGER} and of
5253 default kind, @math{@var{NUMBER} \geq 0}
5254 @item @var{VALUE} @tab Shall be a scalar of type @code{CHARACTER}
5255 and of default kind.
5256 @item @var{LENGTH} @tab (Option) Shall be a scalar of type @code{INTEGER}
5257 and of default kind.
5258 @item @var{STATUS} @tab (Option) Shall be a scalar of type @code{INTEGER}
5259 and of default kind.
5262 @item @emph{Return value}:
5263 After @code{GET_COMMAND_ARGUMENT} returns, the @var{VALUE} argument holds the
5264 @var{NUMBER}-th command line argument. If @var{VALUE} can not hold the argument, it is
5265 truncated to fit the length of @var{VALUE}. If there are less than @var{NUMBER}
5266 arguments specified at the command line, @var{VALUE} will be filled with blanks.
5267 If @math{@var{NUMBER} = 0}, @var{VALUE} is set to the name of the program (on
5268 systems that support this feature). The @var{LENGTH} argument contains the
5269 length of the @var{NUMBER}-th command line argument. If the argument retrieval
5270 fails, @var{STATUS} is a positive number; if @var{VALUE} contains a truncated
5271 command line argument, @var{STATUS} is -1; and otherwise the @var{STATUS} is
5274 @item @emph{Example}:
5276 PROGRAM test_get_command_argument
5278 CHARACTER(len=32) :: arg
5282 CALL get_command_argument(i, arg)
5283 IF (LEN_TRIM(arg) == 0) EXIT
5285 WRITE (*,*) TRIM(arg)
5291 @item @emph{See also}:
5292 @ref{GET_COMMAND}, @ref{COMMAND_ARGUMENT_COUNT}
5298 @section @code{GETCWD} --- Get current working directory
5300 @cindex system, working directory
5303 @item @emph{Description}:
5304 Get current working directory.
5306 This intrinsic is provided in both subroutine and function forms; however,
5307 only one form can be used in any given program unit.
5309 @item @emph{Standard}:
5313 Subroutine, function
5315 @item @emph{Syntax}:
5316 @code{CALL GETCWD(C [, STATUS])}
5318 @item @emph{Arguments}:
5319 @multitable @columnfractions .15 .70
5320 @item @var{C} @tab The type shall be @code{CHARACTER} and of default kind.
5321 @item @var{STATUS} @tab (Optional) status flag. Returns 0 on success,
5322 a system specific and nonzero error code otherwise.
5325 @item @emph{Example}:
5328 CHARACTER(len=255) :: cwd
5330 WRITE(*,*) TRIM(cwd)
5334 @item @emph{See also}:
5341 @section @code{GETENV} --- Get an environmental variable
5343 @cindex environment variable
5346 @item @emph{Description}:
5347 Get the @var{VALUE} of the environmental variable @var{NAME}.
5349 This intrinsic routine is provided for backwards compatibility with
5350 GNU Fortran 77. In new code, programmers should consider the use of
5351 the @ref{GET_ENVIRONMENT_VARIABLE} intrinsic defined by the Fortran
5354 @item @emph{Standard}:
5360 @item @emph{Syntax}:
5361 @code{CALL GETENV(NAME, VALUE)}
5363 @item @emph{Arguments}:
5364 @multitable @columnfractions .15 .70
5365 @item @var{NAME} @tab Shall be of type @code{CHARACTER} and of default kind.
5366 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default kind.
5369 @item @emph{Return value}:
5370 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is
5371 not large enough to hold the data, it is truncated. If @var{NAME}
5372 is not set, @var{VALUE} will be filled with blanks.
5374 @item @emph{Example}:
5377 CHARACTER(len=255) :: homedir
5378 CALL getenv("HOME", homedir)
5379 WRITE (*,*) TRIM(homedir)
5383 @item @emph{See also}:
5384 @ref{GET_ENVIRONMENT_VARIABLE}
5389 @node GET_ENVIRONMENT_VARIABLE
5390 @section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable
5391 @fnindex GET_ENVIRONMENT_VARIABLE
5392 @cindex environment variable
5395 @item @emph{Description}:
5396 Get the @var{VALUE} of the environmental variable @var{NAME}.
5398 @item @emph{Standard}:
5399 Fortran 2003 and later
5404 @item @emph{Syntax}:
5405 @code{CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)}
5407 @item @emph{Arguments}:
5408 @multitable @columnfractions .15 .70
5409 @item @var{NAME} @tab Shall be a scalar of type @code{CHARACTER}
5410 and of default kind.
5411 @item @var{VALUE} @tab Shall be a scalar of type @code{CHARACTER}
5412 and of default kind.
5413 @item @var{LENGTH} @tab Shall be a scalar of type @code{INTEGER}
5414 and of default kind.
5415 @item @var{STATUS} @tab Shall be a scalar of type @code{INTEGER}
5416 and of default kind.
5417 @item @var{TRIM_NAME} @tab Shall be a scalar of type @code{LOGICAL}
5418 and of default kind.
5421 @item @emph{Return value}:
5422 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is
5423 not large enough to hold the data, it is truncated. If @var{NAME}
5424 is not set, @var{VALUE} will be filled with blanks. Argument @var{LENGTH}
5425 contains the length needed for storing the environment variable @var{NAME}
5426 or zero if it is not present. @var{STATUS} is -1 if @var{VALUE} is present
5427 but too short for the environment variable; it is 1 if the environment
5428 variable does not exist and 2 if the processor does not support environment
5429 variables; in all other cases @var{STATUS} is zero. If @var{TRIM_NAME} is
5430 present with the value @code{.FALSE.}, the trailing blanks in @var{NAME}
5431 are significant; otherwise they are not part of the environment variable
5434 @item @emph{Example}:
5437 CHARACTER(len=255) :: homedir
5438 CALL get_environment_variable("HOME", homedir)
5439 WRITE (*,*) TRIM(homedir)
5447 @section @code{GETGID} --- Group ID function
5449 @cindex system, group id
5452 @item @emph{Description}:
5453 Returns the numerical group ID of the current process.
5455 @item @emph{Standard}:
5461 @item @emph{Syntax}:
5462 @code{RESULT = GETGID()}
5464 @item @emph{Return value}:
5465 The return value of @code{GETGID} is an @code{INTEGER} of the default
5469 @item @emph{Example}:
5470 See @code{GETPID} for an example.
5472 @item @emph{See also}:
5473 @ref{GETPID}, @ref{GETUID}
5479 @section @code{GETLOG} --- Get login name
5481 @cindex system, login name
5485 @item @emph{Description}:
5486 Gets the username under which the program is running.
5488 @item @emph{Standard}:
5494 @item @emph{Syntax}:
5495 @code{CALL GETLOG(C)}
5497 @item @emph{Arguments}:
5498 @multitable @columnfractions .15 .70
5499 @item @var{C} @tab Shall be of type @code{CHARACTER} and of default kind.
5502 @item @emph{Return value}:
5503 Stores the current user name in @var{LOGIN}. (On systems where POSIX
5504 functions @code{geteuid} and @code{getpwuid} are not available, and
5505 the @code{getlogin} function is not implemented either, this will
5506 return a blank string.)
5508 @item @emph{Example}:
5511 CHARACTER(32) :: login
5517 @item @emph{See also}:
5524 @section @code{GETPID} --- Process ID function
5526 @cindex system, process id
5530 @item @emph{Description}:
5531 Returns the numerical process identifier of the current process.
5533 @item @emph{Standard}:
5539 @item @emph{Syntax}:
5540 @code{RESULT = GETPID()}
5542 @item @emph{Return value}:
5543 The return value of @code{GETPID} is an @code{INTEGER} of the default
5547 @item @emph{Example}:
5550 print *, "The current process ID is ", getpid()
5551 print *, "Your numerical user ID is ", getuid()
5552 print *, "Your numerical group ID is ", getgid()
5556 @item @emph{See also}:
5557 @ref{GETGID}, @ref{GETUID}
5563 @section @code{GETUID} --- User ID function
5565 @cindex system, user id
5569 @item @emph{Description}:
5570 Returns the numerical user ID of the current process.
5572 @item @emph{Standard}:
5578 @item @emph{Syntax}:
5579 @code{RESULT = GETUID()}
5581 @item @emph{Return value}:
5582 The return value of @code{GETUID} is an @code{INTEGER} of the default
5586 @item @emph{Example}:
5587 See @code{GETPID} for an example.
5589 @item @emph{See also}:
5590 @ref{GETPID}, @ref{GETLOG}
5596 @section @code{GMTIME} --- Convert time to GMT info
5598 @cindex time, conversion to GMT info
5601 @item @emph{Description}:
5602 Given a system time value @var{TIME} (as provided by the @code{TIME8()}
5603 intrinsic), fills @var{VALUES} with values extracted from it appropriate
5604 to the UTC time zone (Universal Coordinated Time, also known in some
5605 countries as GMT, Greenwich Mean Time), using @code{gmtime(3)}.
5607 @item @emph{Standard}:
5613 @item @emph{Syntax}:
5614 @code{CALL GMTIME(TIME, VALUES)}
5616 @item @emph{Arguments}:
5617 @multitable @columnfractions .15 .70
5618 @item @var{TIME} @tab An @code{INTEGER} scalar expression
5619 corresponding to a system time, with @code{INTENT(IN)}.
5620 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
5621 with @code{INTENT(OUT)}.
5624 @item @emph{Return value}:
5625 The elements of @var{VALUES} are assigned as follows:
5627 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
5629 @item Minutes after the hour, range 0--59
5630 @item Hours past midnight, range 0--23
5631 @item Day of month, range 0--31
5632 @item Number of months since January, range 0--12
5633 @item Years since 1900
5634 @item Number of days since Sunday, range 0--6
5635 @item Days since January 1
5636 @item Daylight savings indicator: positive if daylight savings is in
5637 effect, zero if not, and negative if the information is not available.
5640 @item @emph{See also}:
5641 @ref{CTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
5648 @section @code{HOSTNM} --- Get system host name
5650 @cindex system, host name
5653 @item @emph{Description}:
5654 Retrieves the host name of the system on which the program is running.
5656 This intrinsic is provided in both subroutine and function forms; however,
5657 only one form can be used in any given program unit.
5659 @item @emph{Standard}:
5663 Subroutine, function
5665 @item @emph{Syntax}:
5666 @multitable @columnfractions .80
5667 @item @code{CALL HOSTNM(C [, STATUS])}
5668 @item @code{STATUS = HOSTNM(NAME)}
5671 @item @emph{Arguments}:
5672 @multitable @columnfractions .15 .70
5673 @item @var{C} @tab Shall of type @code{CHARACTER} and of default kind.
5674 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
5675 Returns 0 on success, or a system specific error code otherwise.
5678 @item @emph{Return value}:
5679 In either syntax, @var{NAME} is set to the current hostname if it can
5680 be obtained, or to a blank string otherwise.
5687 @section @code{HUGE} --- Largest number of a kind
5689 @cindex limits, largest number
5690 @cindex model representation, largest number
5693 @item @emph{Description}:
5694 @code{HUGE(X)} returns the largest number that is not an infinity in
5695 the model of the type of @code{X}.
5697 @item @emph{Standard}:
5698 Fortran 95 and later
5703 @item @emph{Syntax}:
5704 @code{RESULT = HUGE(X)}
5706 @item @emph{Arguments}:
5707 @multitable @columnfractions .15 .70
5708 @item @var{X} @tab Shall be of type @code{REAL} or @code{INTEGER}.
5711 @item @emph{Return value}:
5712 The return value is of the same type and kind as @var{X}
5714 @item @emph{Example}:
5716 program test_huge_tiny
5717 print *, huge(0), huge(0.0), huge(0.0d0)
5718 print *, tiny(0.0), tiny(0.0d0)
5719 end program test_huge_tiny
5726 @section @code{HYPOT} --- Euclidean distance function
5728 @cindex Euclidean distance
5731 @item @emph{Description}:
5732 @code{HYPOT(X,Y)} is the Euclidean distance function. It is equal to
5733 @math{\sqrt{X^2 + Y^2}}, without undue underflow or overflow.
5735 @item @emph{Standard}:
5736 Fortran 2008 and later
5741 @item @emph{Syntax}:
5742 @code{RESULT = HYPOT(X, Y)}
5744 @item @emph{Arguments}:
5745 @multitable @columnfractions .15 .70
5746 @item @var{X} @tab The type shall be @code{REAL}.
5747 @item @var{Y} @tab The type and kind type parameter shall be the same as
5751 @item @emph{Return value}:
5752 The return value has the same type and kind type parameter as @var{X}.
5754 @item @emph{Example}:
5757 real(4) :: x = 1.e0_4, y = 0.5e0_4
5759 end program test_hypot
5766 @section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence
5768 @cindex @acronym{ASCII} collating sequence
5769 @cindex collating sequence, @acronym{ASCII}
5770 @cindex conversion, to integer
5773 @item @emph{Description}:
5774 @code{IACHAR(C)} returns the code for the @acronym{ASCII} character
5775 in the first character position of @code{C}.
5777 @item @emph{Standard}:
5778 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
5783 @item @emph{Syntax}:
5784 @code{RESULT = IACHAR(C [, KIND])}
5786 @item @emph{Arguments}:
5787 @multitable @columnfractions .15 .70
5788 @item @var{C} @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
5789 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
5790 expression indicating the kind parameter of the result.
5793 @item @emph{Return value}:
5794 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
5795 @var{KIND} is absent, the return value is of default integer kind.
5797 @item @emph{Example}:
5802 end program test_iachar
5806 See @ref{ICHAR} for a discussion of converting between numerical values
5807 and formatted string representations.
5809 @item @emph{See also}:
5810 @ref{ACHAR}, @ref{CHAR}, @ref{ICHAR}
5817 @section @code{IALL} --- Bitwise AND of array elements
5820 @cindex bits, AND of array elements
5823 @item @emph{Description}:
5824 Reduces with bitwise AND the elements of @var{ARRAY} along dimension @var{DIM}
5825 if the corresponding element in @var{MASK} is @code{TRUE}.
5827 @item @emph{Standard}:
5828 Fortran 2008 and later
5831 Transformational function
5833 @item @emph{Syntax}:
5834 @multitable @columnfractions .80
5835 @item @code{RESULT = IALL(ARRAY[, MASK])}
5836 @item @code{RESULT = IALL(ARRAY, DIM[, MASK])}
5839 @item @emph{Arguments}:
5840 @multitable @columnfractions .15 .70
5841 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
5842 @item @var{DIM} @tab (Optional) shall be a scalar of type
5843 @code{INTEGER} with a value in the range from 1 to n, where n
5844 equals the rank of @var{ARRAY}.
5845 @item @var{MASK} @tab (Optional) shall be of type @code{LOGICAL}
5846 and either be a scalar or an array of the same shape as @var{ARRAY}.
5849 @item @emph{Return value}:
5850 The result is of the same type as @var{ARRAY}.
5852 If @var{DIM} is absent, a scalar with the bitwise ALL of all elements in
5853 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
5854 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
5855 dimension @var{DIM} dropped is returned.
5857 @item @emph{Example}:
5866 PRINT '(b8.8)', IALL(a)
5870 @item @emph{See also}:
5871 @ref{IANY}, @ref{IPARITY}, @ref{IAND}
5877 @section @code{IAND} --- Bitwise logical and
5879 @cindex bitwise logical and
5880 @cindex logical and, bitwise
5883 @item @emph{Description}:
5884 Bitwise logical @code{AND}.
5886 @item @emph{Standard}:
5887 Fortran 95 and later
5892 @item @emph{Syntax}:
5893 @code{RESULT = IAND(I, J)}
5895 @item @emph{Arguments}:
5896 @multitable @columnfractions .15 .70
5897 @item @var{I} @tab The type shall be @code{INTEGER}.
5898 @item @var{J} @tab The type shall be @code{INTEGER}, of the same
5899 kind as @var{I}. (As a GNU extension, different kinds are also
5903 @item @emph{Return value}:
5904 The return type is @code{INTEGER}, of the same kind as the
5905 arguments. (If the argument kinds differ, it is of the same kind as
5906 the larger argument.)
5908 @item @emph{Example}:
5912 DATA a / Z'F' /, b / Z'3' /
5913 WRITE (*,*) IAND(a, b)
5917 @item @emph{See also}:
5918 @ref{IOR}, @ref{IEOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
5925 @section @code{IANY} --- Bitwise XOR of array elements
5928 @cindex bits, OR of array elements
5931 @item @emph{Description}:
5932 Reduces with bitwise OR (inclusive or) the elements of @var{ARRAY} along
5933 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
5935 @item @emph{Standard}:
5936 Fortran 2008 and later
5939 Transformational function
5941 @item @emph{Syntax}:
5942 @multitable @columnfractions .80
5943 @item @code{RESULT = IANY(ARRAY[, MASK])}
5944 @item @code{RESULT = IANY(ARRAY, DIM[, MASK])}
5947 @item @emph{Arguments}:
5948 @multitable @columnfractions .15 .70
5949 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
5950 @item @var{DIM} @tab (Optional) shall be a scalar of type
5951 @code{INTEGER} with a value in the range from 1 to n, where n
5952 equals the rank of @var{ARRAY}.
5953 @item @var{MASK} @tab (Optional) shall be of type @code{LOGICAL}
5954 and either be a scalar or an array of the same shape as @var{ARRAY}.
5957 @item @emph{Return value}:
5958 The result is of the same type as @var{ARRAY}.
5960 If @var{DIM} is absent, a scalar with the bitwise OR of all elements in
5961 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
5962 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
5963 dimension @var{DIM} dropped is returned.
5965 @item @emph{Example}:
5974 PRINT '(b8.8)', IANY(a)
5978 @item @emph{See also}:
5979 @ref{IPARITY}, @ref{IALL}, @ref{IOR}
5985 @section @code{IARGC} --- Get the number of command line arguments
5987 @cindex command-line arguments
5988 @cindex command-line arguments, number of
5989 @cindex arguments, to program
5992 @item @emph{Description}:
5993 @code{IARGC()} returns the number of arguments passed on the
5994 command line when the containing program was invoked.
5996 This intrinsic routine is provided for backwards compatibility with
5997 GNU Fortran 77. In new code, programmers should consider the use of
5998 the @ref{COMMAND_ARGUMENT_COUNT} intrinsic defined by the Fortran 2003
6001 @item @emph{Standard}:
6007 @item @emph{Syntax}:
6008 @code{RESULT = IARGC()}
6010 @item @emph{Arguments}:
6013 @item @emph{Return value}:
6014 The number of command line arguments, type @code{INTEGER(4)}.
6016 @item @emph{Example}:
6019 @item @emph{See also}:
6020 GNU Fortran 77 compatibility subroutine: @ref{GETARG}
6022 Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
6023 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
6029 @section @code{IBCLR} --- Clear bit
6035 @item @emph{Description}:
6036 @code{IBCLR} returns the value of @var{I} with the bit at position
6037 @var{POS} set to zero.
6039 @item @emph{Standard}:
6040 Fortran 95 and later
6045 @item @emph{Syntax}:
6046 @code{RESULT = IBCLR(I, POS)}
6048 @item @emph{Arguments}:
6049 @multitable @columnfractions .15 .70
6050 @item @var{I} @tab The type shall be @code{INTEGER}.
6051 @item @var{POS} @tab The type shall be @code{INTEGER}.
6054 @item @emph{Return value}:
6055 The return value is of type @code{INTEGER} and of the same kind as
6058 @item @emph{See also}:
6059 @ref{IBITS}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
6066 @section @code{IBITS} --- Bit extraction
6069 @cindex bits, extract
6072 @item @emph{Description}:
6073 @code{IBITS} extracts a field of length @var{LEN} from @var{I},
6074 starting from bit position @var{POS} and extending left for @var{LEN}
6075 bits. The result is right-justified and the remaining bits are
6076 zeroed. The value of @code{POS+LEN} must be less than or equal to the
6077 value @code{BIT_SIZE(I)}.
6079 @item @emph{Standard}:
6080 Fortran 95 and later
6085 @item @emph{Syntax}:
6086 @code{RESULT = IBITS(I, POS, LEN)}
6088 @item @emph{Arguments}:
6089 @multitable @columnfractions .15 .70
6090 @item @var{I} @tab The type shall be @code{INTEGER}.
6091 @item @var{POS} @tab The type shall be @code{INTEGER}.
6092 @item @var{LEN} @tab The type shall be @code{INTEGER}.
6095 @item @emph{Return value}:
6096 The return value is of type @code{INTEGER} and of the same kind as
6099 @item @emph{See also}:
6100 @ref{BIT_SIZE}, @ref{IBCLR}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
6106 @section @code{IBSET} --- Set bit
6111 @item @emph{Description}:
6112 @code{IBSET} returns the value of @var{I} with the bit at position
6113 @var{POS} set to one.
6115 @item @emph{Standard}:
6116 Fortran 95 and later
6121 @item @emph{Syntax}:
6122 @code{RESULT = IBSET(I, POS)}
6124 @item @emph{Arguments}:
6125 @multitable @columnfractions .15 .70
6126 @item @var{I} @tab The type shall be @code{INTEGER}.
6127 @item @var{POS} @tab The type shall be @code{INTEGER}.
6130 @item @emph{Return value}:
6131 The return value is of type @code{INTEGER} and of the same kind as
6134 @item @emph{See also}:
6135 @ref{IBCLR}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
6142 @section @code{ICHAR} --- Character-to-integer conversion function
6144 @cindex conversion, to integer
6147 @item @emph{Description}:
6148 @code{ICHAR(C)} returns the code for the character in the first character
6149 position of @code{C} in the system's native character set.
6150 The correspondence between characters and their codes is not necessarily
6151 the same across different GNU Fortran implementations.
6153 @item @emph{Standard}:
6154 Fortan 95 and later, with @var{KIND} argument Fortran 2003 and later
6159 @item @emph{Syntax}:
6160 @code{RESULT = ICHAR(C [, KIND])}
6162 @item @emph{Arguments}:
6163 @multitable @columnfractions .15 .70
6164 @item @var{C} @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
6165 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
6166 expression indicating the kind parameter of the result.
6169 @item @emph{Return value}:
6170 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
6171 @var{KIND} is absent, the return value is of default integer kind.
6173 @item @emph{Example}:
6178 end program test_ichar
6181 @item @emph{Specific names}:
6182 @multitable @columnfractions .20 .20 .20 .25
6183 @item Name @tab Argument @tab Return type @tab Standard
6184 @item @code{ICHAR(C)} @tab @code{CHARACTER C} @tab @code{INTEGER(4)} @tab Fortran 77 and later
6188 No intrinsic exists to convert between a numeric value and a formatted
6189 character string representation -- for instance, given the
6190 @code{CHARACTER} value @code{'154'}, obtaining an @code{INTEGER} or
6191 @code{REAL} value with the value 154, or vice versa. Instead, this
6192 functionality is provided by internal-file I/O, as in the following
6197 character(len=10) string, string2
6200 ! Convert a string to a numeric value
6201 read (string,'(I10)') value
6204 ! Convert a value to a formatted string
6205 write (string2,'(I10)') value
6207 end program read_val
6210 @item @emph{See also}:
6211 @ref{ACHAR}, @ref{CHAR}, @ref{IACHAR}
6218 @section @code{IDATE} --- Get current local time subroutine (day/month/year)
6220 @cindex date, current
6221 @cindex current date
6224 @item @emph{Description}:
6225 @code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the
6226 current local time. The day (in the range 1-31), month (in the range 1-12),
6227 and year appear in elements 1, 2, and 3 of @var{VALUES}, respectively.
6228 The year has four significant digits.
6230 @item @emph{Standard}:
6236 @item @emph{Syntax}:
6237 @code{CALL IDATE(VALUES)}
6239 @item @emph{Arguments}:
6240 @multitable @columnfractions .15 .70
6241 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)} and
6242 the kind shall be the default integer kind.
6245 @item @emph{Return value}:
6246 Does not return anything.
6248 @item @emph{Example}:
6251 integer, dimension(3) :: tarray
6256 end program test_idate
6263 @section @code{IEOR} --- Bitwise logical exclusive or
6265 @cindex bitwise logical exclusive or
6266 @cindex logical exclusive or, bitwise
6269 @item @emph{Description}:
6270 @code{IEOR} returns the bitwise boolean exclusive-OR of @var{I} and
6273 @item @emph{Standard}:
6274 Fortran 95 and later
6279 @item @emph{Syntax}:
6280 @code{RESULT = IEOR(I, J)}
6282 @item @emph{Arguments}:
6283 @multitable @columnfractions .15 .70
6284 @item @var{I} @tab The type shall be @code{INTEGER}.
6285 @item @var{J} @tab The type shall be @code{INTEGER}, of the same
6286 kind as @var{I}. (As a GNU extension, different kinds are also
6290 @item @emph{Return value}:
6291 The return type is @code{INTEGER}, of the same kind as the
6292 arguments. (If the argument kinds differ, it is of the same kind as
6293 the larger argument.)
6295 @item @emph{See also}:
6296 @ref{IOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
6302 @section @code{IERRNO} --- Get the last system error number
6304 @cindex system, error handling
6307 @item @emph{Description}:
6308 Returns the last system error number, as given by the C @code{errno()}
6311 @item @emph{Standard}:
6317 @item @emph{Syntax}:
6318 @code{RESULT = IERRNO()}
6320 @item @emph{Arguments}:
6323 @item @emph{Return value}:
6324 The return value is of type @code{INTEGER} and of the default integer
6327 @item @emph{See also}:
6334 @section @code{IMAGE_INDEX} --- Function that converts a cosubscript to an image index
6335 @fnindex IMAGE_INDEX
6336 @cindex coarray, IMAGE_INDEX
6337 @cindex images, cosubscript to image index conversion
6340 @item @emph{Description}:
6341 Returns the image index belonging to a cosubscript.
6343 @item @emph{Standard}:
6344 Fortran 2008 and later
6349 @item @emph{Syntax}:
6350 @code{RESULT = IMAGE_INDEX(COARRAY, SUB)}
6352 @item @emph{Arguments}: None.
6353 @multitable @columnfractions .15 .70
6354 @item @var{COARRAY} @tab Coarray of any type.
6355 @item @var{SUB} @tab default integer rank-1 array of a size equal to
6356 the corank of @var{COARRAY}.
6360 @item @emph{Return value}:
6361 Scalar default integer with the value of the image index which corresponds
6362 to the cosubscripts. For invalid cosubscripts the result is zero.
6364 @item @emph{Example}:
6366 INTEGER :: array[2,-1:4,8,*]
6367 ! Writes 28 (or 0 if there are fewer than 28 images)
6368 WRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])
6371 @item @emph{See also}:
6372 @ref{THIS_IMAGE}, @ref{NUM_IMAGES}
6377 @node INDEX intrinsic
6378 @section @code{INDEX} --- Position of a substring within a string
6380 @cindex substring position
6381 @cindex string, find substring
6384 @item @emph{Description}:
6385 Returns the position of the start of the first occurrence of string
6386 @var{SUBSTRING} as a substring in @var{STRING}, counting from one. If
6387 @var{SUBSTRING} is not present in @var{STRING}, zero is returned. If
6388 the @var{BACK} argument is present and true, the return value is the
6389 start of the last occurrence rather than the first.
6391 @item @emph{Standard}:
6392 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
6397 @item @emph{Syntax}:
6398 @code{RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])}
6400 @item @emph{Arguments}:
6401 @multitable @columnfractions .15 .70
6402 @item @var{STRING} @tab Shall be a scalar @code{CHARACTER}, with
6404 @item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER}, with
6406 @item @var{BACK} @tab (Optional) Shall be a scalar @code{LOGICAL}, with
6408 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
6409 expression indicating the kind parameter of the result.
6412 @item @emph{Return value}:
6413 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
6414 @var{KIND} is absent, the return value is of default integer kind.
6416 @item @emph{Specific names}:
6417 @multitable @columnfractions .20 .20 .20 .25
6418 @item Name @tab Argument @tab Return type @tab Standard
6419 @item @code{INDEX(STRING, SUBSTRING)} @tab @code{CHARACTER} @tab @code{INTEGER(4)} @tab Fortran 77 and later
6422 @item @emph{See also}:
6423 @ref{SCAN}, @ref{VERIFY}
6429 @section @code{INT} --- Convert to integer type
6433 @cindex conversion, to integer
6436 @item @emph{Description}:
6437 Convert to integer type
6439 @item @emph{Standard}:
6440 Fortran 77 and later
6445 @item @emph{Syntax}:
6446 @code{RESULT = INT(A [, KIND))}
6448 @item @emph{Arguments}:
6449 @multitable @columnfractions .15 .70
6450 @item @var{A} @tab Shall be of type @code{INTEGER},
6451 @code{REAL}, or @code{COMPLEX}.
6452 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
6453 expression indicating the kind parameter of the result.
6456 @item @emph{Return value}:
6457 These functions return a @code{INTEGER} variable or array under
6458 the following rules:
6462 If @var{A} is of type @code{INTEGER}, @code{INT(A) = A}
6464 If @var{A} is of type @code{REAL} and @math{|A| < 1}, @code{INT(A)} equals @code{0}.
6465 If @math{|A| \geq 1}, then @code{INT(A)} equals the largest integer that does not exceed
6466 the range of @var{A} and whose sign is the same as the sign of @var{A}.
6468 If @var{A} is of type @code{COMPLEX}, rule B is applied to the real part of @var{A}.
6471 @item @emph{Example}:
6475 complex :: z = (-3.7, 1.0)
6477 print *, int(z), int(z,8)
6481 @item @emph{Specific names}:
6482 @multitable @columnfractions .20 .20 .20 .25
6483 @item Name @tab Argument @tab Return type @tab Standard
6484 @item @code{INT(A)} @tab @code{REAL(4) A} @tab @code{INTEGER} @tab Fortran 77 and later
6485 @item @code{IFIX(A)} @tab @code{REAL(4) A} @tab @code{INTEGER} @tab Fortran 77 and later
6486 @item @code{IDINT(A)} @tab @code{REAL(8) A} @tab @code{INTEGER} @tab Fortran 77 and later
6493 @section @code{INT2} --- Convert to 16-bit integer type
6496 @cindex conversion, to integer
6499 @item @emph{Description}:
6500 Convert to a @code{KIND=2} integer type. This is equivalent to the
6501 standard @code{INT} intrinsic with an optional argument of
6502 @code{KIND=2}, and is only included for backwards compatibility.
6504 The @code{SHORT} intrinsic is equivalent to @code{INT2}.
6506 @item @emph{Standard}:
6512 @item @emph{Syntax}:
6513 @code{RESULT = INT2(A)}
6515 @item @emph{Arguments}:
6516 @multitable @columnfractions .15 .70
6517 @item @var{A} @tab Shall be of type @code{INTEGER},
6518 @code{REAL}, or @code{COMPLEX}.
6521 @item @emph{Return value}:
6522 The return value is a @code{INTEGER(2)} variable.
6524 @item @emph{See also}:
6525 @ref{INT}, @ref{INT8}, @ref{LONG}
6531 @section @code{INT8} --- Convert to 64-bit integer type
6533 @cindex conversion, to integer
6536 @item @emph{Description}:
6537 Convert to a @code{KIND=8} integer type. This is equivalent to the
6538 standard @code{INT} intrinsic with an optional argument of
6539 @code{KIND=8}, and is only included for backwards compatibility.
6541 @item @emph{Standard}:
6547 @item @emph{Syntax}:
6548 @code{RESULT = INT8(A)}
6550 @item @emph{Arguments}:
6551 @multitable @columnfractions .15 .70
6552 @item @var{A} @tab Shall be of type @code{INTEGER},
6553 @code{REAL}, or @code{COMPLEX}.
6556 @item @emph{Return value}:
6557 The return value is a @code{INTEGER(8)} variable.
6559 @item @emph{See also}:
6560 @ref{INT}, @ref{INT2}, @ref{LONG}
6566 @section @code{IOR} --- Bitwise logical or
6568 @cindex bitwise logical or
6569 @cindex logical or, bitwise
6572 @item @emph{Description}:
6573 @code{IOR} returns the bitwise boolean inclusive-OR of @var{I} and
6576 @item @emph{Standard}:
6577 Fortran 95 and later
6582 @item @emph{Syntax}:
6583 @code{RESULT = IOR(I, J)}
6585 @item @emph{Arguments}:
6586 @multitable @columnfractions .15 .70
6587 @item @var{I} @tab The type shall be @code{INTEGER}.
6588 @item @var{J} @tab The type shall be @code{INTEGER}, of the same
6589 kind as @var{I}. (As a GNU extension, different kinds are also
6593 @item @emph{Return value}:
6594 The return type is @code{INTEGER}, of the same kind as the
6595 arguments. (If the argument kinds differ, it is of the same kind as
6596 the larger argument.)
6598 @item @emph{See also}:
6599 @ref{IEOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
6605 @section @code{IPARITY} --- Bitwise XOR of array elements
6607 @cindex array, parity
6609 @cindex bits, XOR of array elements
6612 @item @emph{Description}:
6613 Reduces with bitwise XOR (exclusive or) the elements of @var{ARRAY} along
6614 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
6616 @item @emph{Standard}:
6617 Fortran 2008 and later
6620 Transformational function
6622 @item @emph{Syntax}:
6623 @multitable @columnfractions .80
6624 @item @code{RESULT = IPARITY(ARRAY[, MASK])}
6625 @item @code{RESULT = IPARITY(ARRAY, DIM[, MASK])}
6628 @item @emph{Arguments}:
6629 @multitable @columnfractions .15 .70
6630 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
6631 @item @var{DIM} @tab (Optional) shall be a scalar of type
6632 @code{INTEGER} with a value in the range from 1 to n, where n
6633 equals the rank of @var{ARRAY}.
6634 @item @var{MASK} @tab (Optional) shall be of type @code{LOGICAL}
6635 and either be a scalar or an array of the same shape as @var{ARRAY}.
6638 @item @emph{Return value}:
6639 The result is of the same type as @var{ARRAY}.
6641 If @var{DIM} is absent, a scalar with the bitwise XOR of all elements in
6642 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
6643 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
6644 dimension @var{DIM} dropped is returned.
6646 @item @emph{Example}:
6648 PROGRAM test_iparity
6655 PRINT '(b8.8)', IPARITY(a)
6659 @item @emph{See also}:
6660 @ref{IANY}, @ref{IALL}, @ref{IEOR}, @ref{PARITY}
6666 @section @code{IRAND} --- Integer pseudo-random number
6668 @cindex random number generation
6671 @item @emph{Description}:
6672 @code{IRAND(FLAG)} returns a pseudo-random number from a uniform
6673 distribution between 0 and a system-dependent limit (which is in most
6674 cases 2147483647). If @var{FLAG} is 0, the next number
6675 in the current sequence is returned; if @var{FLAG} is 1, the generator
6676 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
6677 it is used as a new seed with @code{SRAND}.
6679 This intrinsic routine is provided for backwards compatibility with
6680 GNU Fortran 77. It implements a simple modulo generator as provided
6681 by @command{g77}. For new code, one should consider the use of
6682 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
6684 @item @emph{Standard}:
6690 @item @emph{Syntax}:
6691 @code{RESULT = IRAND(I)}
6693 @item @emph{Arguments}:
6694 @multitable @columnfractions .15 .70
6695 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
6698 @item @emph{Return value}:
6699 The return value is of @code{INTEGER(kind=4)} type.
6701 @item @emph{Example}:
6704 integer,parameter :: seed = 86456
6707 print *, irand(), irand(), irand(), irand()
6708 print *, irand(seed), irand(), irand(), irand()
6709 end program test_irand
6717 @section @code{IS_IOSTAT_END} --- Test for end-of-file value
6718 @fnindex IS_IOSTAT_END
6719 @cindex IOSTAT, end of file
6722 @item @emph{Description}:
6723 @code{IS_IOSTAT_END} tests whether an variable has the value of the I/O
6724 status ``end of file''. The function is equivalent to comparing the variable
6725 with the @code{IOSTAT_END} parameter of the intrinsic module
6726 @code{ISO_FORTRAN_ENV}.
6728 @item @emph{Standard}:
6729 Fortran 2003 and later
6734 @item @emph{Syntax}:
6735 @code{RESULT = IS_IOSTAT_END(I)}
6737 @item @emph{Arguments}:
6738 @multitable @columnfractions .15 .70
6739 @item @var{I} @tab Shall be of the type @code{INTEGER}.
6742 @item @emph{Return value}:
6743 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
6744 @var{I} has the value which indicates an end of file condition for
6745 IOSTAT= specifiers, and is @code{.FALSE.} otherwise.
6747 @item @emph{Example}:
6752 OPEN(88, FILE='test.dat')
6753 READ(88, *, IOSTAT=stat) i
6754 IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'
6762 @section @code{IS_IOSTAT_EOR} --- Test for end-of-record value
6763 @fnindex IS_IOSTAT_EOR
6764 @cindex IOSTAT, end of record
6767 @item @emph{Description}:
6768 @code{IS_IOSTAT_EOR} tests whether an variable has the value of the I/O
6769 status ``end of record''. The function is equivalent to comparing the
6770 variable with the @code{IOSTAT_EOR} parameter of the intrinsic module
6771 @code{ISO_FORTRAN_ENV}.
6773 @item @emph{Standard}:
6774 Fortran 2003 and later
6779 @item @emph{Syntax}:
6780 @code{RESULT = IS_IOSTAT_EOR(I)}
6782 @item @emph{Arguments}:
6783 @multitable @columnfractions .15 .70
6784 @item @var{I} @tab Shall be of the type @code{INTEGER}.
6787 @item @emph{Return value}:
6788 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
6789 @var{I} has the value which indicates an end of file condition for
6790 IOSTAT= specifiers, and is @code{.FALSE.} otherwise.
6792 @item @emph{Example}:
6796 INTEGER :: stat, i(50)
6797 OPEN(88, FILE='test.dat', FORM='UNFORMATTED')
6798 READ(88, IOSTAT=stat) i
6799 IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'
6807 @section @code{ISATTY} --- Whether a unit is a terminal device.
6809 @cindex system, terminal
6812 @item @emph{Description}:
6813 Determine whether a unit is connected to a terminal device.
6815 @item @emph{Standard}:
6821 @item @emph{Syntax}:
6822 @code{RESULT = ISATTY(UNIT)}
6824 @item @emph{Arguments}:
6825 @multitable @columnfractions .15 .70
6826 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
6829 @item @emph{Return value}:
6830 Returns @code{.TRUE.} if the @var{UNIT} is connected to a terminal
6831 device, @code{.FALSE.} otherwise.
6833 @item @emph{Example}:
6836 INTEGER(kind=1) :: unit
6838 write(*,*) isatty(unit=unit)
6842 @item @emph{See also}:
6849 @section @code{ISHFT} --- Shift bits
6854 @item @emph{Description}:
6855 @code{ISHFT} returns a value corresponding to @var{I} with all of the
6856 bits shifted @var{SHIFT} places. A value of @var{SHIFT} greater than
6857 zero corresponds to a left shift, a value of zero corresponds to no
6858 shift, and a value less than zero corresponds to a right shift. If the
6859 absolute value of @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the
6860 value is undefined. Bits shifted out from the left end or right end are
6861 lost; zeros are shifted in from the opposite end.
6863 @item @emph{Standard}:
6864 Fortran 95 and later
6869 @item @emph{Syntax}:
6870 @code{RESULT = ISHFT(I, SHIFT)}
6872 @item @emph{Arguments}:
6873 @multitable @columnfractions .15 .70
6874 @item @var{I} @tab The type shall be @code{INTEGER}.
6875 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
6878 @item @emph{Return value}:
6879 The return value is of type @code{INTEGER} and of the same kind as
6882 @item @emph{See also}:
6889 @section @code{ISHFTC} --- Shift bits circularly
6891 @cindex bits, shift circular
6894 @item @emph{Description}:
6895 @code{ISHFTC} returns a value corresponding to @var{I} with the
6896 rightmost @var{SIZE} bits shifted circularly @var{SHIFT} places; that
6897 is, bits shifted out one end are shifted into the opposite end. A value
6898 of @var{SHIFT} greater than zero corresponds to a left shift, a value of
6899 zero corresponds to no shift, and a value less than zero corresponds to
6900 a right shift. The absolute value of @var{SHIFT} must be less than
6901 @var{SIZE}. If the @var{SIZE} argument is omitted, it is taken to be
6902 equivalent to @code{BIT_SIZE(I)}.
6904 @item @emph{Standard}:
6905 Fortran 95 and later
6910 @item @emph{Syntax}:
6911 @code{RESULT = ISHFTC(I, SHIFT [, SIZE])}
6913 @item @emph{Arguments}:
6914 @multitable @columnfractions .15 .70
6915 @item @var{I} @tab The type shall be @code{INTEGER}.
6916 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
6917 @item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER};
6918 the value must be greater than zero and less than or equal to
6922 @item @emph{Return value}:
6923 The return value is of type @code{INTEGER} and of the same kind as
6926 @item @emph{See also}:
6933 @section @code{ISNAN} --- Test for a NaN
6938 @item @emph{Description}:
6939 @code{ISNAN} tests whether a floating-point value is an IEEE
6941 @item @emph{Standard}:
6947 @item @emph{Syntax}:
6950 @item @emph{Arguments}:
6951 @multitable @columnfractions .15 .70
6952 @item @var{X} @tab Variable of the type @code{REAL}.
6956 @item @emph{Return value}:
6957 Returns a default-kind @code{LOGICAL}. The returned value is @code{TRUE}
6958 if @var{X} is a NaN and @code{FALSE} otherwise.
6960 @item @emph{Example}:
6967 if (isnan(x)) stop '"x" is a NaN'
6968 end program test_nan
6975 @section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds)
6977 @cindex time, current
6978 @cindex current time
6981 @item @emph{Description}:
6982 @code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the
6983 current local time. The hour (in the range 1-24), minute (in the range 1-60),
6984 and seconds (in the range 1-60) appear in elements 1, 2, and 3 of @var{VALUES},
6987 @item @emph{Standard}:
6993 @item @emph{Syntax}:
6994 @code{CALL ITIME(VALUES)}
6996 @item @emph{Arguments}:
6997 @multitable @columnfractions .15 .70
6998 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)}
6999 and the kind shall be the default integer kind.
7002 @item @emph{Return value}:
7003 Does not return anything.
7006 @item @emph{Example}:
7009 integer, dimension(3) :: tarray
7014 end program test_itime
7021 @section @code{KILL} --- Send a signal to a process
7025 @item @emph{Description}:
7026 @item @emph{Standard}:
7027 Sends the signal specified by @var{SIGNAL} to the process @var{PID}.
7030 This intrinsic is provided in both subroutine and function forms; however,
7031 only one form can be used in any given program unit.
7034 Subroutine, function
7036 @item @emph{Syntax}:
7037 @code{CALL KILL(C, VALUE [, STATUS])}
7039 @item @emph{Arguments}:
7040 @multitable @columnfractions .15 .70
7041 @item @var{C} @tab Shall be a scalar @code{INTEGER}, with
7043 @item @var{VALUE} @tab Shall be a scalar @code{INTEGER}, with
7045 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)} or
7046 @code{INTEGER(8)}. Returns 0 on success, or a system-specific error code
7050 @item @emph{See also}:
7051 @ref{ABORT}, @ref{EXIT}
7057 @section @code{KIND} --- Kind of an entity
7062 @item @emph{Description}:
7063 @code{KIND(X)} returns the kind value of the entity @var{X}.
7065 @item @emph{Standard}:
7066 Fortran 95 and later
7071 @item @emph{Syntax}:
7074 @item @emph{Arguments}:
7075 @multitable @columnfractions .15 .70
7076 @item @var{X} @tab Shall be of type @code{LOGICAL}, @code{INTEGER},
7077 @code{REAL}, @code{COMPLEX} or @code{CHARACTER}.
7080 @item @emph{Return value}:
7081 The return value is a scalar of type @code{INTEGER} and of the default
7084 @item @emph{Example}:
7087 integer,parameter :: kc = kind(' ')
7088 integer,parameter :: kl = kind(.true.)
7090 print *, "The default character kind is ", kc
7091 print *, "The default logical kind is ", kl
7092 end program test_kind
7100 @section @code{LBOUND} --- Lower dimension bounds of an array
7102 @cindex array, lower bound
7105 @item @emph{Description}:
7106 Returns the lower bounds of an array, or a single lower bound
7107 along the @var{DIM} dimension.
7108 @item @emph{Standard}:
7109 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
7114 @item @emph{Syntax}:
7115 @code{RESULT = LBOUND(ARRAY [, DIM [, KIND]])}
7117 @item @emph{Arguments}:
7118 @multitable @columnfractions .15 .70
7119 @item @var{ARRAY} @tab Shall be an array, of any type.
7120 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
7121 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7122 expression indicating the kind parameter of the result.
7125 @item @emph{Return value}:
7126 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
7127 @var{KIND} is absent, the return value is of default integer kind.
7128 If @var{DIM} is absent, the result is an array of the lower bounds of
7129 @var{ARRAY}. If @var{DIM} is present, the result is a scalar
7130 corresponding to the lower bound of the array along that dimension. If
7131 @var{ARRAY} is an expression rather than a whole array or array
7132 structure component, or if it has a zero extent along the relevant
7133 dimension, the lower bound is taken to be 1.
7135 @item @emph{See also}:
7136 @ref{UBOUND}, @ref{LCOBOUND}
7142 @section @code{LCOBOUND} --- Lower codimension bounds of an array
7144 @cindex coarray, lower bound
7147 @item @emph{Description}:
7148 Returns the lower bounds of a coarray, or a single lower cobound
7149 along the @var{DIM} codimension.
7150 @item @emph{Standard}:
7151 Fortran 2008 and later
7156 @item @emph{Syntax}:
7157 @code{RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])}
7159 @item @emph{Arguments}:
7160 @multitable @columnfractions .15 .70
7161 @item @var{ARRAY} @tab Shall be an coarray, of any type.
7162 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
7163 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7164 expression indicating the kind parameter of the result.
7167 @item @emph{Return value}:
7168 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
7169 @var{KIND} is absent, the return value is of default integer kind.
7170 If @var{DIM} is absent, the result is an array of the lower cobounds of
7171 @var{COARRAY}. If @var{DIM} is present, the result is a scalar
7172 corresponding to the lower cobound of the array along that codimension.
7174 @item @emph{See also}:
7175 @ref{UCOBOUND}, @ref{LBOUND}
7181 @section @code{LEADZ} --- Number of leading zero bits of an integer
7186 @item @emph{Description}:
7187 @code{LEADZ} returns the number of leading zero bits of an integer.
7189 @item @emph{Standard}:
7190 Fortran 2008 and later
7195 @item @emph{Syntax}:
7196 @code{RESULT = LEADZ(I)}
7198 @item @emph{Arguments}:
7199 @multitable @columnfractions .15 .70
7200 @item @var{I} @tab Shall be of type @code{INTEGER}.
7203 @item @emph{Return value}:
7204 The type of the return value is the default @code{INTEGER}.
7205 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
7207 @item @emph{Example}:
7210 WRITE (*,*) LEADZ(1) ! prints 8 if BITSIZE(I) has the value 32
7214 @item @emph{See also}:
7215 @ref{BIT_SIZE}, @ref{TRAILZ}, @ref{POPCNT}, @ref{POPPAR}
7221 @section @code{LEN} --- Length of a character entity
7223 @cindex string, length
7226 @item @emph{Description}:
7227 Returns the length of a character string. If @var{STRING} is an array,
7228 the length of an element of @var{STRING} is returned. Note that
7229 @var{STRING} need not be defined when this intrinsic is invoked, since
7230 only the length, not the content, of @var{STRING} is needed.
7232 @item @emph{Standard}:
7233 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
7238 @item @emph{Syntax}:
7239 @code{L = LEN(STRING [, KIND])}
7241 @item @emph{Arguments}:
7242 @multitable @columnfractions .15 .70
7243 @item @var{STRING} @tab Shall be a scalar or array of type
7244 @code{CHARACTER}, with @code{INTENT(IN)}
7245 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7246 expression indicating the kind parameter of the result.
7249 @item @emph{Return value}:
7250 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
7251 @var{KIND} is absent, the return value is of default integer kind.
7254 @item @emph{Specific names}:
7255 @multitable @columnfractions .20 .20 .20 .25
7256 @item Name @tab Argument @tab Return type @tab Standard
7257 @item @code{LEN(STRING)} @tab @code{CHARACTER} @tab @code{INTEGER} @tab Fortran 77 and later
7261 @item @emph{See also}:
7262 @ref{LEN_TRIM}, @ref{ADJUSTL}, @ref{ADJUSTR}
7268 @section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters
7270 @cindex string, length, without trailing whitespace
7273 @item @emph{Description}:
7274 Returns the length of a character string, ignoring any trailing blanks.
7276 @item @emph{Standard}:
7277 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
7282 @item @emph{Syntax}:
7283 @code{RESULT = LEN_TRIM(STRING [, KIND])}
7285 @item @emph{Arguments}:
7286 @multitable @columnfractions .15 .70
7287 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
7288 with @code{INTENT(IN)}
7289 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7290 expression indicating the kind parameter of the result.
7293 @item @emph{Return value}:
7294 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
7295 @var{KIND} is absent, the return value is of default integer kind.
7297 @item @emph{See also}:
7298 @ref{LEN}, @ref{ADJUSTL}, @ref{ADJUSTR}
7304 @section @code{LGE} --- Lexical greater than or equal
7306 @cindex lexical comparison of strings
7307 @cindex string, comparison
7310 @item @emph{Description}:
7311 Determines whether one string is lexically greater than or equal to
7312 another string, where the two strings are interpreted as containing
7313 ASCII character codes. If the String A and String B are not the same
7314 length, the shorter is compared as if spaces were appended to it to form
7315 a value that has the same length as the longer.
7317 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
7318 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
7319 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
7320 that the latter use the processor's character ordering (which is not
7321 ASCII on some targets), whereas the former always use the ASCII
7324 @item @emph{Standard}:
7325 Fortran 77 and later
7330 @item @emph{Syntax}:
7331 @code{RESULT = LGE(STRING_A, STRING_B)}
7333 @item @emph{Arguments}:
7334 @multitable @columnfractions .15 .70
7335 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
7336 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
7339 @item @emph{Return value}:
7340 Returns @code{.TRUE.} if @code{STRING_A >= STRING_B}, and @code{.FALSE.}
7341 otherwise, based on the ASCII ordering.
7343 @item @emph{Specific names}:
7344 @multitable @columnfractions .20 .20 .20 .25
7345 @item Name @tab Argument @tab Return type @tab Standard
7346 @item @code{LGE(STRING_A, STRING_B)} @tab @code{CHARACTER} @tab @code{LOGICAL} @tab Fortran 77 and later
7349 @item @emph{See also}:
7350 @ref{LGT}, @ref{LLE}, @ref{LLT}
7356 @section @code{LGT} --- Lexical greater than
7358 @cindex lexical comparison of strings
7359 @cindex string, comparison
7362 @item @emph{Description}:
7363 Determines whether one string is lexically greater than another string,
7364 where the two strings are interpreted as containing ASCII character
7365 codes. If the String A and String B are not the same length, the
7366 shorter is compared as if spaces were appended to it to form a value
7367 that has the same length as the longer.
7369 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
7370 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
7371 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
7372 that the latter use the processor's character ordering (which is not
7373 ASCII on some targets), whereas the former always use the ASCII
7376 @item @emph{Standard}:
7377 Fortran 77 and later
7382 @item @emph{Syntax}:
7383 @code{RESULT = LGT(STRING_A, STRING_B)}
7385 @item @emph{Arguments}:
7386 @multitable @columnfractions .15 .70
7387 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
7388 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
7391 @item @emph{Return value}:
7392 Returns @code{.TRUE.} if @code{STRING_A > STRING_B}, and @code{.FALSE.}
7393 otherwise, based on the ASCII ordering.
7395 @item @emph{Specific names}:
7396 @multitable @columnfractions .20 .20 .20 .25
7397 @item Name @tab Argument @tab Return type @tab Standard
7398 @item @code{LGT(STRING_A, STRING_B)} @tab @code{CHARACTER} @tab @code{LOGICAL} @tab Fortran 77 and later
7401 @item @emph{See also}:
7402 @ref{LGE}, @ref{LLE}, @ref{LLT}
7408 @section @code{LINK} --- Create a hard link
7410 @cindex file system, create link
7411 @cindex file system, hard link
7414 @item @emph{Description}:
7415 Makes a (hard) link from file @var{PATH1} to @var{PATH2}. A null
7416 character (@code{CHAR(0)}) can be used to mark the end of the names in
7417 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
7418 names are ignored. If the @var{STATUS} argument is supplied, it
7419 contains 0 on success or a nonzero error code upon return; see
7422 This intrinsic is provided in both subroutine and function forms;
7423 however, only one form can be used in any given program unit.
7425 @item @emph{Standard}:
7429 Subroutine, function
7431 @item @emph{Syntax}:
7432 @multitable @columnfractions .80
7433 @item @code{CALL LINK(PATH1, PATH2 [, STATUS])}
7434 @item @code{STATUS = LINK(PATH1, PATH2)}
7437 @item @emph{Arguments}:
7438 @multitable @columnfractions .15 .70
7439 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
7440 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
7441 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
7444 @item @emph{See also}:
7445 @ref{SYMLNK}, @ref{UNLINK}
7451 @section @code{LLE} --- Lexical less than or equal
7453 @cindex lexical comparison of strings
7454 @cindex string, comparison
7457 @item @emph{Description}:
7458 Determines whether one string is lexically less than or equal to another
7459 string, where the two strings are interpreted as containing ASCII
7460 character codes. If the String A and String B are not the same length,
7461 the shorter is compared as if spaces were appended to it to form a value
7462 that has the same length as the longer.
7464 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
7465 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
7466 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
7467 that the latter use the processor's character ordering (which is not
7468 ASCII on some targets), whereas the former always use the ASCII
7471 @item @emph{Standard}:
7472 Fortran 77 and later
7477 @item @emph{Syntax}:
7478 @code{RESULT = LLE(STRING_A, STRING_B)}
7480 @item @emph{Arguments}:
7481 @multitable @columnfractions .15 .70
7482 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
7483 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
7486 @item @emph{Return value}:
7487 Returns @code{.TRUE.} if @code{STRING_A <= STRING_B}, and @code{.FALSE.}
7488 otherwise, based on the ASCII ordering.
7490 @item @emph{Specific names}:
7491 @multitable @columnfractions .20 .20 .20 .25
7492 @item Name @tab Argument @tab Return type @tab Standard
7493 @item @code{LLE(STRING_A, STRING_B)} @tab @code{CHARACTER} @tab @code{LOGICAL} @tab Fortran 77 and later
7496 @item @emph{See also}:
7497 @ref{LGE}, @ref{LGT}, @ref{LLT}
7503 @section @code{LLT} --- Lexical less than
7505 @cindex lexical comparison of strings
7506 @cindex string, comparison
7509 @item @emph{Description}:
7510 Determines whether one string is lexically less than another string,
7511 where the two strings are interpreted as containing ASCII character
7512 codes. If the String A and String B are not the same length, the
7513 shorter is compared as if spaces were appended to it to form a value
7514 that has the same length as the longer.
7516 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
7517 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
7518 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
7519 that the latter use the processor's character ordering (which is not
7520 ASCII on some targets), whereas the former always use the ASCII
7523 @item @emph{Standard}:
7524 Fortran 77 and later
7529 @item @emph{Syntax}:
7530 @code{RESULT = LLT(STRING_A, STRING_B)}
7532 @item @emph{Arguments}:
7533 @multitable @columnfractions .15 .70
7534 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
7535 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
7538 @item @emph{Return value}:
7539 Returns @code{.TRUE.} if @code{STRING_A < STRING_B}, and @code{.FALSE.}
7540 otherwise, based on the ASCII ordering.
7542 @item @emph{Specific names}:
7543 @multitable @columnfractions .20 .20 .20 .25
7544 @item Name @tab Argument @tab Return type @tab Standard
7545 @item @code{LLT(STRING_A, STRING_B)} @tab @code{CHARACTER} @tab @code{LOGICAL} @tab Fortran 77 and later
7548 @item @emph{See also}:
7549 @ref{LGE}, @ref{LGT}, @ref{LLE}
7555 @section @code{LNBLNK} --- Index of the last non-blank character in a string
7557 @cindex string, find non-blank character
7560 @item @emph{Description}:
7561 Returns the length of a character string, ignoring any trailing blanks.
7562 This is identical to the standard @code{LEN_TRIM} intrinsic, and is only
7563 included for backwards compatibility.
7565 @item @emph{Standard}:
7571 @item @emph{Syntax}:
7572 @code{RESULT = LNBLNK(STRING)}
7574 @item @emph{Arguments}:
7575 @multitable @columnfractions .15 .70
7576 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
7577 with @code{INTENT(IN)}
7580 @item @emph{Return value}:
7581 The return value is of @code{INTEGER(kind=4)} type.
7583 @item @emph{See also}:
7584 @ref{INDEX intrinsic}, @ref{LEN_TRIM}
7590 @section @code{LOC} --- Returns the address of a variable
7592 @cindex location of a variable in memory
7595 @item @emph{Description}:
7596 @code{LOC(X)} returns the address of @var{X} as an integer.
7598 @item @emph{Standard}:
7604 @item @emph{Syntax}:
7605 @code{RESULT = LOC(X)}
7607 @item @emph{Arguments}:
7608 @multitable @columnfractions .15 .70
7609 @item @var{X} @tab Variable of any type.
7612 @item @emph{Return value}:
7613 The return value is of type @code{INTEGER}, with a @code{KIND}
7614 corresponding to the size (in bytes) of a memory address on the target
7617 @item @emph{Example}:
7624 end program test_loc
7631 @section @code{LOG} --- Logarithm function
7638 @cindex exponential function, inverse
7639 @cindex logarithmic function
7642 @item @emph{Description}:
7643 @code{LOG(X)} computes the logarithm of @var{X}.
7645 @item @emph{Standard}:
7646 Fortran 77 and later
7651 @item @emph{Syntax}:
7652 @code{RESULT = LOG(X)}
7654 @item @emph{Arguments}:
7655 @multitable @columnfractions .15 .70
7656 @item @var{X} @tab The type shall be @code{REAL} or
7660 @item @emph{Return value}:
7661 The return value is of type @code{REAL} or @code{COMPLEX}.
7662 The kind type parameter is the same as @var{X}.
7663 If @var{X} is @code{COMPLEX}, the imaginary part @math{\omega} is in the range
7664 @math{-\pi \leq \omega \leq \pi}.
7666 @item @emph{Example}:
7669 real(8) :: x = 1.0_8
7670 complex :: z = (1.0, 2.0)
7673 end program test_log
7676 @item @emph{Specific names}:
7677 @multitable @columnfractions .20 .20 .20 .25
7678 @item Name @tab Argument @tab Return type @tab Standard
7679 @item @code{ALOG(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab f95, gnu
7680 @item @code{DLOG(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu
7681 @item @code{CLOG(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu
7682 @item @code{ZLOG(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu
7683 @item @code{CDLOG(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu
7690 @section @code{LOG10} --- Base 10 logarithm function
7694 @cindex exponential function, inverse
7695 @cindex logarithmic function
7698 @item @emph{Description}:
7699 @code{LOG10(X)} computes the base 10 logarithm of @var{X}.
7701 @item @emph{Standard}:
7702 Fortran 77 and later
7707 @item @emph{Syntax}:
7708 @code{RESULT = LOG10(X)}
7710 @item @emph{Arguments}:
7711 @multitable @columnfractions .15 .70
7712 @item @var{X} @tab The type shall be @code{REAL}.
7715 @item @emph{Return value}:
7716 The return value is of type @code{REAL} or @code{COMPLEX}.
7717 The kind type parameter is the same as @var{X}.
7719 @item @emph{Example}:
7722 real(8) :: x = 10.0_8
7724 end program test_log10
7727 @item @emph{Specific names}:
7728 @multitable @columnfractions .20 .20 .20 .25
7729 @item Name @tab Argument @tab Return type @tab Standard
7730 @item @code{ALOG10(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 95 and later
7731 @item @code{DLOG10(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later
7738 @section @code{LOG_GAMMA} --- Logarithm of the Gamma function
7743 @cindex Gamma function, logarithm of
7746 @item @emph{Description}:
7747 @code{LOG_GAMMA(X)} computes the natural logarithm of the absolute value
7748 of the Gamma (@math{\Gamma}) function.
7750 @item @emph{Standard}:
7751 Fortran 2008 and later
7756 @item @emph{Syntax}:
7757 @code{X = LOG_GAMMA(X)}
7759 @item @emph{Arguments}:
7760 @multitable @columnfractions .15 .70
7761 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
7762 nor a negative integer.
7765 @item @emph{Return value}:
7766 The return value is of type @code{REAL} of the same kind as @var{X}.
7768 @item @emph{Example}:
7770 program test_log_gamma
7772 x = lgamma(x) ! returns 0.0
7773 end program test_log_gamma
7776 @item @emph{Specific names}:
7777 @multitable @columnfractions .20 .20 .20 .25
7778 @item Name @tab Argument @tab Return type @tab Standard
7779 @item @code{LGAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab GNU Extension
7780 @item @code{ALGAMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab GNU Extension
7781 @item @code{DLGAMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU Extension
7784 @item @emph{See also}:
7785 Gamma function: @ref{GAMMA}
7792 @section @code{LOGICAL} --- Convert to logical type
7794 @cindex conversion, to logical
7797 @item @emph{Description}:
7798 Converts one kind of @code{LOGICAL} variable to another.
7800 @item @emph{Standard}:
7801 Fortran 95 and later
7806 @item @emph{Syntax}:
7807 @code{RESULT = LOGICAL(L [, KIND])}
7809 @item @emph{Arguments}:
7810 @multitable @columnfractions .15 .70
7811 @item @var{L} @tab The type shall be @code{LOGICAL}.
7812 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7813 expression indicating the kind parameter of the result.
7816 @item @emph{Return value}:
7817 The return value is a @code{LOGICAL} value equal to @var{L}, with a
7818 kind corresponding to @var{KIND}, or of the default logical kind if
7819 @var{KIND} is not given.
7821 @item @emph{See also}:
7822 @ref{INT}, @ref{REAL}, @ref{CMPLX}
7828 @section @code{LONG} --- Convert to integer type
7830 @cindex conversion, to integer
7833 @item @emph{Description}:
7834 Convert to a @code{KIND=4} integer type, which is the same size as a C
7835 @code{long} integer. This is equivalent to the standard @code{INT}
7836 intrinsic with an optional argument of @code{KIND=4}, and is only
7837 included for backwards compatibility.
7839 @item @emph{Standard}:
7845 @item @emph{Syntax}:
7846 @code{RESULT = LONG(A)}
7848 @item @emph{Arguments}:
7849 @multitable @columnfractions .15 .70
7850 @item @var{A} @tab Shall be of type @code{INTEGER},
7851 @code{REAL}, or @code{COMPLEX}.
7854 @item @emph{Return value}:
7855 The return value is a @code{INTEGER(4)} variable.
7857 @item @emph{See also}:
7858 @ref{INT}, @ref{INT2}, @ref{INT8}
7864 @section @code{LSHIFT} --- Left shift bits
7866 @cindex bits, shift left
7869 @item @emph{Description}:
7870 @code{LSHIFT} returns a value corresponding to @var{I} with all of the
7871 bits shifted left by @var{SHIFT} places. If the absolute value of
7872 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
7873 Bits shifted out from the left end are lost; zeros are shifted in from
7876 This function has been superseded by the @code{ISHFT} intrinsic, which
7877 is standard in Fortran 95 and later, and the @code{SHIFTL} intrinsic,
7878 which is standard in Fortran 2008 and later.
7880 @item @emph{Standard}:
7886 @item @emph{Syntax}:
7887 @code{RESULT = LSHIFT(I, SHIFT)}
7889 @item @emph{Arguments}:
7890 @multitable @columnfractions .15 .70
7891 @item @var{I} @tab The type shall be @code{INTEGER}.
7892 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
7895 @item @emph{Return value}:
7896 The return value is of type @code{INTEGER} and of the same kind as
7899 @item @emph{See also}:
7900 @ref{ISHFT}, @ref{ISHFTC}, @ref{RSHIFT}, @ref{SHIFTA}, @ref{SHIFTL},
7908 @section @code{LSTAT} --- Get file status
7910 @cindex file system, file status
7913 @item @emph{Description}:
7914 @code{LSTAT} is identical to @ref{STAT}, except that if path is a
7915 symbolic link, then the link itself is statted, not the file that it
7918 The elements in @code{VALUES} are the same as described by @ref{STAT}.
7920 This intrinsic is provided in both subroutine and function forms;
7921 however, only one form can be used in any given program unit.
7923 @item @emph{Standard}:
7927 Subroutine, function
7929 @item @emph{Syntax}:
7930 @code{CALL LSTAT(NAME, VALUES [, STATUS])}
7932 @item @emph{Arguments}:
7933 @multitable @columnfractions .15 .70
7934 @item @var{NAME} @tab The type shall be @code{CHARACTER} of the default
7935 kind, a valid path within the file system.
7936 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
7937 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}.
7938 Returns 0 on success and a system specific error code otherwise.
7941 @item @emph{Example}:
7942 See @ref{STAT} for an example.
7944 @item @emph{See also}:
7945 To stat an open file: @ref{FSTAT}, to stat a file: @ref{STAT}
7951 @section @code{LTIME} --- Convert time to local time info
7953 @cindex time, conversion to local time info
7956 @item @emph{Description}:
7957 Given a system time value @var{TIME} (as provided by the @code{TIME8()}
7958 intrinsic), fills @var{VALUES} with values extracted from it appropriate
7959 to the local time zone using @code{localtime(3)}.
7961 @item @emph{Standard}:
7967 @item @emph{Syntax}:
7968 @code{CALL LTIME(TIME, VALUES)}
7970 @item @emph{Arguments}:
7971 @multitable @columnfractions .15 .70
7972 @item @var{TIME} @tab An @code{INTEGER} scalar expression
7973 corresponding to a system time, with @code{INTENT(IN)}.
7974 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
7975 with @code{INTENT(OUT)}.
7978 @item @emph{Return value}:
7979 The elements of @var{VALUES} are assigned as follows:
7981 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
7983 @item Minutes after the hour, range 0--59
7984 @item Hours past midnight, range 0--23
7985 @item Day of month, range 0--31
7986 @item Number of months since January, range 0--12
7987 @item Years since 1900
7988 @item Number of days since Sunday, range 0--6
7989 @item Days since January 1
7990 @item Daylight savings indicator: positive if daylight savings is in
7991 effect, zero if not, and negative if the information is not available.
7994 @item @emph{See also}:
7995 @ref{CTIME}, @ref{GMTIME}, @ref{TIME}, @ref{TIME8}
8002 @section @code{MALLOC} --- Allocate dynamic memory
8004 @cindex pointer, cray
8007 @item @emph{Description}:
8008 @code{MALLOC(SIZE)} allocates @var{SIZE} bytes of dynamic memory and
8009 returns the address of the allocated memory. The @code{MALLOC} intrinsic
8010 is an extension intended to be used with Cray pointers, and is provided
8011 in GNU Fortran to allow the user to compile legacy code. For new code
8012 using Fortran 95 pointers, the memory allocation intrinsic is
8015 @item @emph{Standard}:
8021 @item @emph{Syntax}:
8022 @code{PTR = MALLOC(SIZE)}
8024 @item @emph{Arguments}:
8025 @multitable @columnfractions .15 .70
8026 @item @var{SIZE} @tab The type shall be @code{INTEGER}.
8029 @item @emph{Return value}:
8030 The return value is of type @code{INTEGER(K)}, with @var{K} such that
8031 variables of type @code{INTEGER(K)} have the same size as
8032 C pointers (@code{sizeof(void *)}).
8034 @item @emph{Example}:
8035 The following example demonstrates the use of @code{MALLOC} and
8036 @code{FREE} with Cray pointers.
8045 ptr_x = malloc(20*8)
8047 x(i) = sqrt(1.0d0 / i)
8055 end program test_malloc
8058 @item @emph{See also}:
8065 @section @code{MASKL} --- Left justified mask
8067 @cindex mask, left justified
8070 @item @emph{Description}:
8071 @code{MASKL(I[, KIND])} has its leftmost @var{I} bits set to 1, and the
8072 remaining bits set to 0.
8074 @item @emph{Standard}:
8075 Fortran 2008 and later
8080 @item @emph{Syntax}:
8081 @code{RESULT = MASKL(I[, KIND])}
8083 @item @emph{Arguments}:
8084 @multitable @columnfractions .15 .70
8085 @item @var{I} @tab Shall be of type @code{INTEGER}.
8086 @item @var{KIND} @tab Shall be a scalar constant expression of type
8090 @item @emph{Return value}:
8091 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
8092 specifies the kind value of the return type; otherwise, it is of the
8093 default integer kind.
8095 @item @emph{See also}:
8102 @section @code{MASKR} --- Right justified mask
8104 @cindex mask, right justified
8107 @item @emph{Description}:
8108 @code{MASKL(I[, KIND])} has its rightmost @var{I} bits set to 1, and the
8109 remaining bits set to 0.
8111 @item @emph{Standard}:
8112 Fortran 2008 and later
8117 @item @emph{Syntax}:
8118 @code{RESULT = MASKR(I[, KIND])}
8120 @item @emph{Arguments}:
8121 @multitable @columnfractions .15 .70
8122 @item @var{I} @tab Shall be of type @code{INTEGER}.
8123 @item @var{KIND} @tab Shall be a scalar constant expression of type
8127 @item @emph{Return value}:
8128 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
8129 specifies the kind value of the return type; otherwise, it is of the
8130 default integer kind.
8132 @item @emph{See also}:
8139 @section @code{MATMUL} --- matrix multiplication
8141 @cindex matrix multiplication
8142 @cindex product, matrix
8145 @item @emph{Description}:
8146 Performs a matrix multiplication on numeric or logical arguments.
8148 @item @emph{Standard}:
8149 Fortran 95 and later
8152 Transformational function
8154 @item @emph{Syntax}:
8155 @code{RESULT = MATMUL(MATRIX_A, MATRIX_B)}
8157 @item @emph{Arguments}:
8158 @multitable @columnfractions .15 .70
8159 @item @var{MATRIX_A} @tab An array of @code{INTEGER},
8160 @code{REAL}, @code{COMPLEX}, or @code{LOGICAL} type, with a rank of
8162 @item @var{MATRIX_B} @tab An array of @code{INTEGER},
8163 @code{REAL}, or @code{COMPLEX} type if @var{MATRIX_A} is of a numeric
8164 type; otherwise, an array of @code{LOGICAL} type. The rank shall be one
8165 or two, and the first (or only) dimension of @var{MATRIX_B} shall be
8166 equal to the last (or only) dimension of @var{MATRIX_A}.
8169 @item @emph{Return value}:
8170 The matrix product of @var{MATRIX_A} and @var{MATRIX_B}. The type and
8171 kind of the result follow the usual type and kind promotion rules, as
8172 for the @code{*} or @code{.AND.} operators.
8174 @item @emph{See also}:
8180 @section @code{MAX} --- Maximum value of an argument list
8187 @cindex maximum value
8190 @item @emph{Description}:
8191 Returns the argument with the largest (most positive) value.
8193 @item @emph{Standard}:
8194 Fortran 77 and later
8199 @item @emph{Syntax}:
8200 @code{RESULT = MAX(A1, A2 [, A3 [, ...]])}
8202 @item @emph{Arguments}:
8203 @multitable @columnfractions .15 .70
8204 @item @var{A1} @tab The type shall be @code{INTEGER} or
8206 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
8207 as @var{A1}. (As a GNU extension, arguments of different kinds are
8211 @item @emph{Return value}:
8212 The return value corresponds to the maximum value among the arguments,
8213 and has the same type and kind as the first argument.
8215 @item @emph{Specific names}:
8216 @multitable @columnfractions .20 .20 .20 .25
8217 @item Name @tab Argument @tab Return type @tab Standard
8218 @item @code{MAX0(A1)} @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)} @tab Fortran 77 and later
8219 @item @code{AMAX0(A1)} @tab @code{INTEGER(4) A1} @tab @code{REAL(MAX(X))} @tab Fortran 77 and later
8220 @item @code{MAX1(A1)} @tab @code{REAL A1} @tab @code{INT(MAX(X))} @tab Fortran 77 and later
8221 @item @code{AMAX1(A1)} @tab @code{REAL(4) A1} @tab @code{REAL(4)} @tab Fortran 77 and later
8222 @item @code{DMAX1(A1)} @tab @code{REAL(8) A1} @tab @code{REAL(8)} @tab Fortran 77 and later
8225 @item @emph{See also}:
8226 @ref{MAXLOC} @ref{MAXVAL}, @ref{MIN}
8233 @section @code{MAXEXPONENT} --- Maximum exponent of a real kind
8234 @fnindex MAXEXPONENT
8235 @cindex model representation, maximum exponent
8238 @item @emph{Description}:
8239 @code{MAXEXPONENT(X)} returns the maximum exponent in the model of the
8242 @item @emph{Standard}:
8243 Fortran 95 and later
8248 @item @emph{Syntax}:
8249 @code{RESULT = MAXEXPONENT(X)}
8251 @item @emph{Arguments}:
8252 @multitable @columnfractions .15 .70
8253 @item @var{X} @tab Shall be of type @code{REAL}.
8256 @item @emph{Return value}:
8257 The return value is of type @code{INTEGER} and of the default integer
8260 @item @emph{Example}:
8266 print *, minexponent(x), maxexponent(x)
8267 print *, minexponent(y), maxexponent(y)
8268 end program exponents
8275 @section @code{MAXLOC} --- Location of the maximum value within an array
8277 @cindex array, location of maximum element
8280 @item @emph{Description}:
8281 Determines the location of the element in the array with the maximum
8282 value, or, if the @var{DIM} argument is supplied, determines the
8283 locations of the maximum element along each row of the array in the
8284 @var{DIM} direction. If @var{MASK} is present, only the elements for
8285 which @var{MASK} is @code{.TRUE.} are considered. If more than one
8286 element in the array has the maximum value, the location returned is
8287 that of the first such element in array element order. If the array has
8288 zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
8289 the result is an array of zeroes. Similarly, if @var{DIM} is supplied
8290 and all of the elements of @var{MASK} along a given row are zero, the
8291 result value for that row is zero.
8293 @item @emph{Standard}:
8294 Fortran 95 and later
8297 Transformational function
8299 @item @emph{Syntax}:
8300 @multitable @columnfractions .80
8301 @item @code{RESULT = MAXLOC(ARRAY, DIM [, MASK])}
8302 @item @code{RESULT = MAXLOC(ARRAY [, MASK])}
8305 @item @emph{Arguments}:
8306 @multitable @columnfractions .15 .70
8307 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
8309 @item @var{DIM} @tab (Optional) Shall be a scalar of type
8310 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
8311 inclusive. It may not be an optional dummy argument.
8312 @item @var{MASK} @tab Shall be an array of type @code{LOGICAL},
8313 and conformable with @var{ARRAY}.
8316 @item @emph{Return value}:
8317 If @var{DIM} is absent, the result is a rank-one array with a length
8318 equal to the rank of @var{ARRAY}. If @var{DIM} is present, the result
8319 is an array with a rank one less than the rank of @var{ARRAY}, and a
8320 size corresponding to the size of @var{ARRAY} with the @var{DIM}
8321 dimension removed. If @var{DIM} is present and @var{ARRAY} has a rank
8322 of one, the result is a scalar. In all cases, the result is of default
8323 @code{INTEGER} type.
8325 @item @emph{See also}:
8326 @ref{MAX}, @ref{MAXVAL}
8333 @section @code{MAXVAL} --- Maximum value of an array
8335 @cindex array, maximum value
8336 @cindex maximum value
8339 @item @emph{Description}:
8340 Determines the maximum value of the elements in an array value, or, if
8341 the @var{DIM} argument is supplied, determines the maximum value along
8342 each row of the array in the @var{DIM} direction. If @var{MASK} is
8343 present, only the elements for which @var{MASK} is @code{.TRUE.} are
8344 considered. If the array has zero size, or all of the elements of
8345 @var{MASK} are @code{.FALSE.}, then the result is @code{-HUGE(ARRAY)}
8346 if @var{ARRAY} is numeric, or a string of nulls if @var{ARRAY} is of character
8349 @item @emph{Standard}:
8350 Fortran 95 and later
8353 Transformational function
8355 @item @emph{Syntax}:
8356 @multitable @columnfractions .80
8357 @item @code{RESULT = MAXVAL(ARRAY, DIM [, MASK])}
8358 @item @code{RESULT = MAXVAL(ARRAY [, MASK])}
8361 @item @emph{Arguments}:
8362 @multitable @columnfractions .15 .70
8363 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
8365 @item @var{DIM} @tab (Optional) Shall be a scalar of type
8366 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
8367 inclusive. It may not be an optional dummy argument.
8368 @item @var{MASK} @tab Shall be an array of type @code{LOGICAL},
8369 and conformable with @var{ARRAY}.
8372 @item @emph{Return value}:
8373 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
8374 is a scalar. If @var{DIM} is present, the result is an array with a
8375 rank one less than the rank of @var{ARRAY}, and a size corresponding to
8376 the size of @var{ARRAY} with the @var{DIM} dimension removed. In all
8377 cases, the result is of the same type and kind as @var{ARRAY}.
8379 @item @emph{See also}:
8380 @ref{MAX}, @ref{MAXLOC}
8386 @section @code{MCLOCK} --- Time function
8388 @cindex time, clock ticks
8392 @item @emph{Description}:
8393 Returns the number of clock ticks since the start of the process, based
8394 on the UNIX function @code{clock(3)}.
8396 This intrinsic is not fully portable, such as to systems with 32-bit
8397 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
8398 the values returned by this intrinsic might be, or become, negative, or
8399 numerically less than previous values, during a single run of the
8402 @item @emph{Standard}:
8408 @item @emph{Syntax}:
8409 @code{RESULT = MCLOCK()}
8411 @item @emph{Return value}:
8412 The return value is a scalar of type @code{INTEGER(4)}, equal to the
8413 number of clock ticks since the start of the process, or @code{-1} if
8414 the system does not support @code{clock(3)}.
8416 @item @emph{See also}:
8417 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME}
8424 @section @code{MCLOCK8} --- Time function (64-bit)
8426 @cindex time, clock ticks
8430 @item @emph{Description}:
8431 Returns the number of clock ticks since the start of the process, based
8432 on the UNIX function @code{clock(3)}.
8434 @emph{Warning:} this intrinsic does not increase the range of the timing
8435 values over that returned by @code{clock(3)}. On a system with a 32-bit
8436 @code{clock(3)}, @code{MCLOCK8()} will return a 32-bit value, even though
8437 it is converted to a 64-bit @code{INTEGER(8)} value. That means
8438 overflows of the 32-bit value can still occur. Therefore, the values
8439 returned by this intrinsic might be or become negative or numerically
8440 less than previous values during a single run of the compiled program.
8442 @item @emph{Standard}:
8448 @item @emph{Syntax}:
8449 @code{RESULT = MCLOCK8()}
8451 @item @emph{Return value}:
8452 The return value is a scalar of type @code{INTEGER(8)}, equal to the
8453 number of clock ticks since the start of the process, or @code{-1} if
8454 the system does not support @code{clock(3)}.
8456 @item @emph{See also}:
8457 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
8464 @section @code{MERGE} --- Merge variables
8466 @cindex array, merge arrays
8467 @cindex array, combine arrays
8470 @item @emph{Description}:
8471 Select values from two arrays according to a logical mask. The result
8472 is equal to @var{TSOURCE} if @var{MASK} is @code{.TRUE.}, or equal to
8473 @var{FSOURCE} if it is @code{.FALSE.}.
8475 @item @emph{Standard}:
8476 Fortran 95 and later
8481 @item @emph{Syntax}:
8482 @code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)}
8484 @item @emph{Arguments}:
8485 @multitable @columnfractions .15 .70
8486 @item @var{TSOURCE} @tab May be of any type.
8487 @item @var{FSOURCE} @tab Shall be of the same type and type parameters
8489 @item @var{MASK} @tab Shall be of type @code{LOGICAL}.
8492 @item @emph{Return value}:
8493 The result is of the same type and type parameters as @var{TSOURCE}.
8500 @section @code{MERGE_BITS} --- Merge of bits under mask
8505 @item @emph{Description}:
8506 @code{MERGE_BITS(I, J, MASK)} merges the bits of @var{I} and @var{J}
8507 as determined by the mask. The i-th bit of the result is equal to the
8508 i-th bit of @var{I} if the i-th bit of @var{MASK} is 1; it is equal to
8509 the i-th bit of @var{J} otherwise.
8511 @item @emph{Standard}:
8512 Fortran 2008 and later
8517 @item @emph{Syntax}:
8518 @code{RESULT = MERGE_BITS(I, J, MASK)}
8520 @item @emph{Arguments}:
8521 @multitable @columnfractions .15 .70
8522 @item @var{I} @tab Shall be of type @code{INTEGER}.
8523 @item @var{J} @tab Shall be of type @code{INTEGER} and of the same
8525 @item @var{MASK} @tab Shall be of type @code{INTEGER} and of the same
8529 @item @emph{Return value}:
8530 The result is of the same type and kind as @var{I}.
8537 @section @code{MIN} --- Minimum value of an argument list
8544 @cindex minimum value
8547 @item @emph{Description}:
8548 Returns the argument with the smallest (most negative) value.
8550 @item @emph{Standard}:
8551 Fortran 77 and later
8556 @item @emph{Syntax}:
8557 @code{RESULT = MIN(A1, A2 [, A3, ...])}
8559 @item @emph{Arguments}:
8560 @multitable @columnfractions .15 .70
8561 @item @var{A1} @tab The type shall be @code{INTEGER} or
8563 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
8564 as @var{A1}. (As a GNU extension, arguments of different kinds are
8568 @item @emph{Return value}:
8569 The return value corresponds to the maximum value among the arguments,
8570 and has the same type and kind as the first argument.
8572 @item @emph{Specific names}:
8573 @multitable @columnfractions .20 .20 .20 .25
8574 @item Name @tab Argument @tab Return type @tab Standard
8575 @item @code{MIN0(A1)} @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)} @tab Fortran 77 and later
8576 @item @code{AMIN0(A1)} @tab @code{INTEGER(4) A1} @tab @code{REAL(4)} @tab Fortran 77 and later
8577 @item @code{MIN1(A1)} @tab @code{REAL A1} @tab @code{INTEGER(4)} @tab Fortran 77 and later
8578 @item @code{AMIN1(A1)} @tab @code{REAL(4) A1} @tab @code{REAL(4)} @tab Fortran 77 and later
8579 @item @code{DMIN1(A1)} @tab @code{REAL(8) A1} @tab @code{REAL(8)} @tab Fortran 77 and later
8582 @item @emph{See also}:
8583 @ref{MAX}, @ref{MINLOC}, @ref{MINVAL}
8589 @section @code{MINEXPONENT} --- Minimum exponent of a real kind
8590 @fnindex MINEXPONENT
8591 @cindex model representation, minimum exponent
8594 @item @emph{Description}:
8595 @code{MINEXPONENT(X)} returns the minimum exponent in the model of the
8598 @item @emph{Standard}:
8599 Fortran 95 and later
8604 @item @emph{Syntax}:
8605 @code{RESULT = MINEXPONENT(X)}
8607 @item @emph{Arguments}:
8608 @multitable @columnfractions .15 .70
8609 @item @var{X} @tab Shall be of type @code{REAL}.
8612 @item @emph{Return value}:
8613 The return value is of type @code{INTEGER} and of the default integer
8616 @item @emph{Example}:
8617 See @code{MAXEXPONENT} for an example.
8623 @section @code{MINLOC} --- Location of the minimum value within an array
8625 @cindex array, location of minimum element
8628 @item @emph{Description}:
8629 Determines the location of the element in the array with the minimum
8630 value, or, if the @var{DIM} argument is supplied, determines the
8631 locations of the minimum element along each row of the array in the
8632 @var{DIM} direction. If @var{MASK} is present, only the elements for
8633 which @var{MASK} is @code{.TRUE.} are considered. If more than one
8634 element in the array has the minimum value, the location returned is
8635 that of the first such element in array element order. If the array has
8636 zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
8637 the result is an array of zeroes. Similarly, if @var{DIM} is supplied
8638 and all of the elements of @var{MASK} along a given row are zero, the
8639 result value for that row is zero.
8641 @item @emph{Standard}:
8642 Fortran 95 and later
8645 Transformational function
8647 @item @emph{Syntax}:
8648 @multitable @columnfractions .80
8649 @item @code{RESULT = MINLOC(ARRAY, DIM [, MASK])}
8650 @item @code{RESULT = MINLOC(ARRAY [, MASK])}
8653 @item @emph{Arguments}:
8654 @multitable @columnfractions .15 .70
8655 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
8657 @item @var{DIM} @tab (Optional) Shall be a scalar of type
8658 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
8659 inclusive. It may not be an optional dummy argument.
8660 @item @var{MASK} @tab Shall be an array of type @code{LOGICAL},
8661 and conformable with @var{ARRAY}.
8664 @item @emph{Return value}:
8665 If @var{DIM} is absent, the result is a rank-one array with a length
8666 equal to the rank of @var{ARRAY}. If @var{DIM} is present, the result
8667 is an array with a rank one less than the rank of @var{ARRAY}, and a
8668 size corresponding to the size of @var{ARRAY} with the @var{DIM}
8669 dimension removed. If @var{DIM} is present and @var{ARRAY} has a rank
8670 of one, the result is a scalar. In all cases, the result is of default
8671 @code{INTEGER} type.
8673 @item @emph{See also}:
8674 @ref{MIN}, @ref{MINVAL}
8681 @section @code{MINVAL} --- Minimum value of an array
8683 @cindex array, minimum value
8684 @cindex minimum value
8687 @item @emph{Description}:
8688 Determines the minimum value of the elements in an array value, or, if
8689 the @var{DIM} argument is supplied, determines the minimum value along
8690 each row of the array in the @var{DIM} direction. If @var{MASK} is
8691 present, only the elements for which @var{MASK} is @code{.TRUE.} are
8692 considered. If the array has zero size, or all of the elements of
8693 @var{MASK} are @code{.FALSE.}, then the result is @code{HUGE(ARRAY)} if
8694 @var{ARRAY} is numeric, or a string of @code{CHAR(255)} characters if
8695 @var{ARRAY} is of character type.
8697 @item @emph{Standard}:
8698 Fortran 95 and later
8701 Transformational function
8703 @item @emph{Syntax}:
8704 @multitable @columnfractions .80
8705 @item @code{RESULT = MINVAL(ARRAY, DIM [, MASK])}
8706 @item @code{RESULT = MINVAL(ARRAY [, MASK])}
8709 @item @emph{Arguments}:
8710 @multitable @columnfractions .15 .70
8711 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
8713 @item @var{DIM} @tab (Optional) Shall be a scalar of type
8714 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
8715 inclusive. It may not be an optional dummy argument.
8716 @item @var{MASK} @tab Shall be an array of type @code{LOGICAL},
8717 and conformable with @var{ARRAY}.
8720 @item @emph{Return value}:
8721 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
8722 is a scalar. If @var{DIM} is present, the result is an array with a
8723 rank one less than the rank of @var{ARRAY}, and a size corresponding to
8724 the size of @var{ARRAY} with the @var{DIM} dimension removed. In all
8725 cases, the result is of the same type and kind as @var{ARRAY}.
8727 @item @emph{See also}:
8728 @ref{MIN}, @ref{MINLOC}
8735 @section @code{MOD} --- Remainder function
8740 @cindex division, remainder
8743 @item @emph{Description}:
8744 @code{MOD(A,P)} computes the remainder of the division of A by P@. It is
8745 calculated as @code{A - (INT(A/P) * P)}.
8747 @item @emph{Standard}:
8748 Fortran 77 and later
8753 @item @emph{Syntax}:
8754 @code{RESULT = MOD(A, P)}
8756 @item @emph{Arguments}:
8757 @multitable @columnfractions .15 .70
8758 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
8759 @item @var{P} @tab Shall be a scalar of the same type as @var{A} and not
8763 @item @emph{Return value}:
8764 The kind of the return value is the result of cross-promoting
8765 the kinds of the arguments.
8767 @item @emph{Example}:
8771 print *, mod(17.5,5.5)
8772 print *, mod(17.5d0,5.5)
8773 print *, mod(17.5,5.5d0)
8776 print *, mod(-17.5,5.5)
8777 print *, mod(-17.5d0,5.5)
8778 print *, mod(-17.5,5.5d0)
8781 print *, mod(17.5,-5.5)
8782 print *, mod(17.5d0,-5.5)
8783 print *, mod(17.5,-5.5d0)
8784 end program test_mod
8787 @item @emph{Specific names}:
8788 @multitable @columnfractions .20 .20 .20 .25
8789 @item Name @tab Arguments @tab Return type @tab Standard
8790 @item @code{MOD(A,P)} @tab @code{INTEGER A,P} @tab @code{INTEGER} @tab Fortran 95 and later
8791 @item @code{AMOD(A,P)} @tab @code{REAL(4) A,P} @tab @code{REAL(4)} @tab Fortran 95 and later
8792 @item @code{DMOD(A,P)} @tab @code{REAL(8) A,P} @tab @code{REAL(8)} @tab Fortran 95 and later
8799 @section @code{MODULO} --- Modulo function
8802 @cindex division, modulo
8805 @item @emph{Description}:
8806 @code{MODULO(A,P)} computes the @var{A} modulo @var{P}.
8808 @item @emph{Standard}:
8809 Fortran 95 and later
8814 @item @emph{Syntax}:
8815 @code{RESULT = MODULO(A, P)}
8817 @item @emph{Arguments}:
8818 @multitable @columnfractions .15 .70
8819 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
8820 @item @var{P} @tab Shall be a scalar of the same type and kind as @var{A}
8823 @item @emph{Return value}:
8824 The type and kind of the result are those of the arguments.
8826 @item If @var{A} and @var{P} are of type @code{INTEGER}:
8827 @code{MODULO(A,P)} has the value @var{R} such that @code{A=Q*P+R}, where
8828 @var{Q} is an integer and @var{R} is between 0 (inclusive) and @var{P}
8830 @item If @var{A} and @var{P} are of type @code{REAL}:
8831 @code{MODULO(A,P)} has the value of @code{A - FLOOR (A / P) * P}.
8833 In all cases, if @var{P} is zero the result is processor-dependent.
8835 @item @emph{Example}:
8838 print *, modulo(17,3)
8839 print *, modulo(17.5,5.5)
8841 print *, modulo(-17,3)
8842 print *, modulo(-17.5,5.5)
8844 print *, modulo(17,-3)
8845 print *, modulo(17.5,-5.5)
8854 @section @code{MOVE_ALLOC} --- Move allocation from one object to another
8856 @cindex moving allocation
8857 @cindex allocation, moving
8860 @item @emph{Description}:
8861 @code{MOVE_ALLOC(FROM, TO)} moves the allocation from @var{FROM} to
8862 @var{TO}. @var{FROM} will become deallocated in the process.
8864 @item @emph{Standard}:
8865 Fortran 2003 and later
8870 @item @emph{Syntax}:
8871 @code{CALL MOVE_ALLOC(FROM, TO)}
8873 @item @emph{Arguments}:
8874 @multitable @columnfractions .15 .70
8875 @item @var{FROM} @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be
8876 of any type and kind.
8877 @item @var{TO} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be
8878 of the same type, kind and rank as @var{FROM}.
8881 @item @emph{Return value}:
8884 @item @emph{Example}:
8886 program test_move_alloc
8887 integer, allocatable :: a(:), b(:)
8891 call move_alloc(a, b)
8892 print *, allocated(a), allocated(b)
8894 end program test_move_alloc
8901 @section @code{MVBITS} --- Move bits from one integer to another
8906 @item @emph{Description}:
8907 Moves @var{LEN} bits from positions @var{FROMPOS} through
8908 @code{FROMPOS+LEN-1} of @var{FROM} to positions @var{TOPOS} through
8909 @code{TOPOS+LEN-1} of @var{TO}. The portion of argument @var{TO} not
8910 affected by the movement of bits is unchanged. The values of
8911 @code{FROMPOS+LEN-1} and @code{TOPOS+LEN-1} must be less than
8912 @code{BIT_SIZE(FROM)}.
8914 @item @emph{Standard}:
8915 Fortran 95 and later
8918 Elemental subroutine
8920 @item @emph{Syntax}:
8921 @code{CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
8923 @item @emph{Arguments}:
8924 @multitable @columnfractions .15 .70
8925 @item @var{FROM} @tab The type shall be @code{INTEGER}.
8926 @item @var{FROMPOS} @tab The type shall be @code{INTEGER}.
8927 @item @var{LEN} @tab The type shall be @code{INTEGER}.
8928 @item @var{TO} @tab The type shall be @code{INTEGER}, of the
8929 same kind as @var{FROM}.
8930 @item @var{TOPOS} @tab The type shall be @code{INTEGER}.
8933 @item @emph{See also}:
8934 @ref{IBCLR}, @ref{IBSET}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
8940 @section @code{NEAREST} --- Nearest representable number
8942 @cindex real number, nearest different
8943 @cindex floating point, nearest different
8946 @item @emph{Description}:
8947 @code{NEAREST(X, S)} returns the processor-representable number nearest
8948 to @code{X} in the direction indicated by the sign of @code{S}.
8950 @item @emph{Standard}:
8951 Fortran 95 and later
8956 @item @emph{Syntax}:
8957 @code{RESULT = NEAREST(X, S)}
8959 @item @emph{Arguments}:
8960 @multitable @columnfractions .15 .70
8961 @item @var{X} @tab Shall be of type @code{REAL}.
8962 @item @var{S} @tab (Optional) shall be of type @code{REAL} and
8966 @item @emph{Return value}:
8967 The return value is of the same type as @code{X}. If @code{S} is
8968 positive, @code{NEAREST} returns the processor-representable number
8969 greater than @code{X} and nearest to it. If @code{S} is negative,
8970 @code{NEAREST} returns the processor-representable number smaller than
8971 @code{X} and nearest to it.
8973 @item @emph{Example}:
8975 program test_nearest
8977 x = nearest(42.0, 1.0)
8978 y = nearest(42.0, -1.0)
8979 write (*,"(3(G20.15))") x, y, x - y
8980 end program test_nearest
8987 @section @code{NEW_LINE} --- New line character
8990 @cindex output, newline
8993 @item @emph{Description}:
8994 @code{NEW_LINE(C)} returns the new-line character.
8996 @item @emph{Standard}:
8997 Fortran 2003 and later
9002 @item @emph{Syntax}:
9003 @code{RESULT = NEW_LINE(C)}
9005 @item @emph{Arguments}:
9006 @multitable @columnfractions .15 .70
9007 @item @var{C} @tab The argument shall be a scalar or array of the
9008 type @code{CHARACTER}.
9011 @item @emph{Return value}:
9012 Returns a @var{CHARACTER} scalar of length one with the new-line character of
9013 the same kind as parameter @var{C}.
9015 @item @emph{Example}:
9019 write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'
9027 @section @code{NINT} --- Nearest whole number
9030 @cindex rounding, nearest whole number
9033 @item @emph{Description}:
9034 @code{NINT(A)} rounds its argument to the nearest whole number.
9036 @item @emph{Standard}:
9037 Fortran 77 and later, with @var{KIND} argument Fortran 90 and later
9042 @item @emph{Syntax}:
9043 @code{RESULT = NINT(A [, KIND])}
9045 @item @emph{Arguments}:
9046 @multitable @columnfractions .15 .70
9047 @item @var{A} @tab The type of the argument shall be @code{REAL}.
9048 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
9049 expression indicating the kind parameter of the result.
9052 @item @emph{Return value}:
9053 Returns @var{A} with the fractional portion of its magnitude eliminated by
9054 rounding to the nearest whole number and with its sign preserved,
9055 converted to an @code{INTEGER} of the default kind.
9057 @item @emph{Example}:
9064 print *, nint(x4), idnint(x8)
9065 end program test_nint
9068 @item @emph{Specific names}:
9069 @multitable @columnfractions .20 .20 .20 .25
9070 @item Name @tab Argument @tab Return Type @tab Standard
9071 @item @code{NINT(A)} @tab @code{REAL(4) A} @tab @code{INTEGER} @tab Fortran 95 and later
9072 @item @code{IDNINT(A)} @tab @code{REAL(8) A} @tab @code{INTEGER} @tab Fortran 95 and later
9075 @item @emph{See also}:
9076 @ref{CEILING}, @ref{FLOOR}
9083 @section @code{NORM2} --- Euclidean vector norms
9085 @cindex Euclidean vector norm
9086 @cindex L2 vector norm
9087 @cindex norm, Euclidean
9090 @item @emph{Description}:
9091 Calculates the Euclidean vector norm (@math{L_2}) norm of
9092 of @var{ARRAY} along dimension @var{DIM}.
9094 @item @emph{Standard}:
9095 Fortran 2008 and later
9098 Transformational function
9100 @item @emph{Syntax}:
9101 @multitable @columnfractions .80
9102 @item @code{RESULT = NORM2(ARRAY[, DIM])}
9105 @item @emph{Arguments}:
9106 @multitable @columnfractions .15 .70
9107 @item @var{ARRAY} @tab Shall be an array of type @code{REAL}
9108 @item @var{DIM} @tab (Optional) shall be a scalar of type
9109 @code{INTEGER} with a value in the range from 1 to n, where n
9110 equals the rank of @var{ARRAY}.
9113 @item @emph{Return value}:
9114 The result is of the same type as @var{ARRAY}.
9116 If @var{DIM} is absent, a scalar with the square root of the sum of all
9117 elements in @var{ARRAY} squared is returned. Otherwise, an array of
9118 rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY}, and a
9119 shape similar to that of @var{ARRAY} with dimension @var{DIM} dropped
9122 @item @emph{Example}:
9125 REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]
9126 print *, NORM2(x) ! = sqrt(55.) ~ 7.416
9134 @section @code{NOT} --- Logical negation
9136 @cindex bits, negate
9137 @cindex bitwise logical not
9138 @cindex logical not, bitwise
9141 @item @emph{Description}:
9142 @code{NOT} returns the bitwise boolean inverse of @var{I}.
9144 @item @emph{Standard}:
9145 Fortran 95 and later
9150 @item @emph{Syntax}:
9151 @code{RESULT = NOT(I)}
9153 @item @emph{Arguments}:
9154 @multitable @columnfractions .15 .70
9155 @item @var{I} @tab The type shall be @code{INTEGER}.
9158 @item @emph{Return value}:
9159 The return type is @code{INTEGER}, of the same kind as the
9162 @item @emph{See also}:
9163 @ref{IAND}, @ref{IEOR}, @ref{IOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}
9170 @section @code{NULL} --- Function that returns an disassociated pointer
9172 @cindex pointer, status
9173 @cindex pointer, disassociated
9176 @item @emph{Description}:
9177 Returns a disassociated pointer.
9179 If @var{MOLD} is present, a dissassociated pointer of the same type is
9180 returned, otherwise the type is determined by context.
9182 In Fortran 95, @var{MOLD} is optional. Please note that Fortran 2003
9183 includes cases where it is required.
9185 @item @emph{Standard}:
9186 Fortran 95 and later
9189 Transformational function
9191 @item @emph{Syntax}:
9192 @code{PTR => NULL([MOLD])}
9194 @item @emph{Arguments}:
9195 @multitable @columnfractions .15 .70
9196 @item @var{MOLD} @tab (Optional) shall be a pointer of any association
9197 status and of any type.
9200 @item @emph{Return value}:
9201 A disassociated pointer.
9203 @item @emph{Example}:
9205 REAL, POINTER, DIMENSION(:) :: VEC => NULL ()
9208 @item @emph{See also}:
9215 @section @code{NUM_IMAGES} --- Function that returns the number of images
9217 @cindex coarray, NUM_IMAGES
9218 @cindex images, number of
9221 @item @emph{Description}:
9222 Returns the number of images.
9224 @item @emph{Standard}:
9225 Fortran 2008 and later
9228 Transformational function
9230 @item @emph{Syntax}:
9231 @code{RESULT = NUM_IMAGES()}
9233 @item @emph{Arguments}: None.
9235 @item @emph{Return value}:
9236 Scalar default-kind integer.
9238 @item @emph{Example}:
9242 value = THIS_IMAGE()
9244 IF (THIS_IMAGE() == 1) THEN
9245 DO i = 1, NUM_IMAGES()
9246 WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
9251 @item @emph{See also}:
9252 @ref{THIS_IMAGE}, @ref{IMAGE_INDEX}
9258 @section @code{OR} --- Bitwise logical OR
9260 @cindex bitwise logical or
9261 @cindex logical or, bitwise
9264 @item @emph{Description}:
9265 Bitwise logical @code{OR}.
9267 This intrinsic routine is provided for backwards compatibility with
9268 GNU Fortran 77. For integer arguments, programmers should consider
9269 the use of the @ref{IOR} intrinsic defined by the Fortran standard.
9271 @item @emph{Standard}:
9277 @item @emph{Syntax}:
9278 @code{RESULT = OR(I, J)}
9280 @item @emph{Arguments}:
9281 @multitable @columnfractions .15 .70
9282 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
9283 type or a scalar @code{LOGICAL} type.
9284 @item @var{J} @tab The type shall be the same as the type of @var{J}.
9287 @item @emph{Return value}:
9288 The return type is either a scalar @code{INTEGER} or a scalar
9289 @code{LOGICAL}. If the kind type parameters differ, then the
9290 smaller kind type is implicitly converted to larger kind, and the
9291 return has the larger kind.
9293 @item @emph{Example}:
9296 LOGICAL :: T = .TRUE., F = .FALSE.
9298 DATA a / Z'F' /, b / Z'3' /
9300 WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)
9301 WRITE (*,*) OR(a, b)
9305 @item @emph{See also}:
9306 Fortran 95 elemental function: @ref{IOR}
9312 @section @code{PACK} --- Pack an array into an array of rank one
9314 @cindex array, packing
9315 @cindex array, reduce dimension
9316 @cindex array, gather elements
9319 @item @emph{Description}:
9320 Stores the elements of @var{ARRAY} in an array of rank one.
9322 The beginning of the resulting array is made up of elements whose @var{MASK}
9323 equals @code{TRUE}. Afterwards, positions are filled with elements taken from
9326 @item @emph{Standard}:
9327 Fortran 95 and later
9330 Transformational function
9332 @item @emph{Syntax}:
9333 @code{RESULT = PACK(ARRAY, MASK[,VECTOR]}
9335 @item @emph{Arguments}:
9336 @multitable @columnfractions .15 .70
9337 @item @var{ARRAY} @tab Shall be an array of any type.
9338 @item @var{MASK} @tab Shall be an array of type @code{LOGICAL} and
9339 of the same size as @var{ARRAY}. Alternatively, it may be a @code{LOGICAL}
9341 @item @var{VECTOR} @tab (Optional) shall be an array of the same type
9342 as @var{ARRAY} and of rank one. If present, the number of elements in
9343 @var{VECTOR} shall be equal to or greater than the number of true elements
9344 in @var{MASK}. If @var{MASK} is scalar, the number of elements in
9345 @var{VECTOR} shall be equal to or greater than the number of elements in
9349 @item @emph{Return value}:
9350 The result is an array of rank one and the same type as that of @var{ARRAY}.
9351 If @var{VECTOR} is present, the result size is that of @var{VECTOR}, the
9352 number of @code{TRUE} values in @var{MASK} otherwise.
9354 @item @emph{Example}:
9355 Gathering nonzero elements from an array:
9359 m = (/ 1, 0, 0, 0, 5, 0 /)
9360 WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0) ! "1 5"
9364 Gathering nonzero elements from an array and appending elements from @var{VECTOR}:
9368 m = (/ 1, 0, 0, 2 /)
9369 WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /)) ! "1 2 3 4"
9373 @item @emph{See also}:
9380 @section @code{PARITY} --- Reduction with exclusive OR
9383 @cindex Reduction, XOR
9384 @cindex XOR reduction
9387 @item @emph{Description}:
9388 Calculates the partity, i.e. the reduction using @code{.XOR.},
9389 of @var{MASK} along dimension @var{DIM}.
9391 @item @emph{Standard}:
9392 Fortran 2008 and later
9395 Transformational function
9397 @item @emph{Syntax}:
9398 @multitable @columnfractions .80
9399 @item @code{RESULT = PARITY(MASK[, DIM])}
9402 @item @emph{Arguments}:
9403 @multitable @columnfractions .15 .70
9404 @item @var{LOGICAL} @tab Shall be an array of type @code{LOGICAL}
9405 @item @var{DIM} @tab (Optional) shall be a scalar of type
9406 @code{INTEGER} with a value in the range from 1 to n, where n
9407 equals the rank of @var{MASK}.
9410 @item @emph{Return value}:
9411 The result is of the same type as @var{MASK}.
9413 If @var{DIM} is absent, a scalar with the parity of all elements in
9414 @var{MASK} is returned, i.e. true if an odd number of elements is
9415 @code{.true.} and false otherwise. If @var{DIM} is present, an array
9416 of rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY},
9417 and a shape similar to that of @var{MASK} with dimension @var{DIM}
9418 dropped is returned.
9420 @item @emph{Example}:
9423 LOGICAL :: x(2) = [ .true., .false. ]
9424 print *, PARITY(x) ! prints "T" (true).
9432 @section @code{PERROR} --- Print system error message
9434 @cindex system, error handling
9437 @item @emph{Description}:
9438 Prints (on the C @code{stderr} stream) a newline-terminated error
9439 message corresponding to the last system error. This is prefixed by
9440 @var{STRING}, a colon and a space. See @code{perror(3)}.
9442 @item @emph{Standard}:
9448 @item @emph{Syntax}:
9449 @code{CALL PERROR(STRING)}
9451 @item @emph{Arguments}:
9452 @multitable @columnfractions .15 .70
9453 @item @var{STRING} @tab A scalar of type @code{CHARACTER} and of the
9457 @item @emph{See also}:
9464 @section @code{PRECISION} --- Decimal precision of a real kind
9466 @cindex model representation, precision
9469 @item @emph{Description}:
9470 @code{PRECISION(X)} returns the decimal precision in the model of the
9473 @item @emph{Standard}:
9474 Fortran 95 and later
9479 @item @emph{Syntax}:
9480 @code{RESULT = PRECISION(X)}
9482 @item @emph{Arguments}:
9483 @multitable @columnfractions .15 .70
9484 @item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}.
9487 @item @emph{Return value}:
9488 The return value is of type @code{INTEGER} and of the default integer
9491 @item @emph{See also}:
9492 @ref{SELECTED_REAL_KIND}, @ref{RANGE}
9494 @item @emph{Example}:
9496 program prec_and_range
9497 real(kind=4) :: x(2)
9498 complex(kind=8) :: y
9500 print *, precision(x), range(x)
9501 print *, precision(y), range(y)
9502 end program prec_and_range
9509 @section @code{POPCNT} --- Number of bits set
9511 @cindex binary representation
9515 @item @emph{Description}:
9516 @code{POPCNT(I)} returns the number of bits set ('1' bits) in the binary
9517 representation of @code{I}.
9519 @item @emph{Standard}:
9520 Fortran 2008 and later
9525 @item @emph{Syntax}:
9526 @code{RESULT = POPCNT(I)}
9528 @item @emph{Arguments}:
9529 @multitable @columnfractions .15 .70
9530 @item @var{I} @tab Shall be of type @code{INTEGER}.
9533 @item @emph{Return value}:
9534 The return value is of type @code{INTEGER} and of the default integer
9537 @item @emph{See also}:
9538 @ref{POPPAR}, @ref{LEADZ}, @ref{TRAILZ}
9540 @item @emph{Example}:
9542 program test_population
9543 print *, popcnt(127), poppar(127)
9544 print *, popcnt(huge(0_4)), poppar(huge(0_4))
9545 print *, popcnt(huge(0_8)), poppar(huge(0_8))
9546 end program test_population
9552 @section @code{POPPAR} --- Parity of the number of bits set
9554 @cindex binary representation
9558 @item @emph{Description}:
9559 @code{POPPAR(I)} returns parity of the integer @code{I}, i.e. the parity
9560 of the number of bits set ('1' bits) in the binary representation of
9561 @code{I}. It is equal to 0 if @code{I} has an even number of bits set,
9562 and 1 for an odd number of '1' bits.
9564 @item @emph{Standard}:
9565 Fortran 2008 and later
9570 @item @emph{Syntax}:
9571 @code{RESULT = POPPAR(I)}
9573 @item @emph{Arguments}:
9574 @multitable @columnfractions .15 .70
9575 @item @var{I} @tab Shall be of type @code{INTEGER}.
9578 @item @emph{Return value}:
9579 The return value is of type @code{INTEGER} and of the default integer
9582 @item @emph{See also}:
9583 @ref{POPCNT}, @ref{LEADZ}, @ref{TRAILZ}
9585 @item @emph{Example}:
9587 program test_population
9588 print *, popcnt(127), poppar(127)
9589 print *, popcnt(huge(0_4)), poppar(huge(0_4))
9590 print *, popcnt(huge(0_8)), poppar(huge(0_8))
9591 end program test_population
9598 @section @code{PRESENT} --- Determine whether an optional dummy argument is specified
9602 @item @emph{Description}:
9603 Determines whether an optional dummy argument is present.
9605 @item @emph{Standard}:
9606 Fortran 95 and later
9611 @item @emph{Syntax}:
9612 @code{RESULT = PRESENT(A)}
9614 @item @emph{Arguments}:
9615 @multitable @columnfractions .15 .70
9616 @item @var{A} @tab May be of any type and may be a pointer, scalar or array
9617 value, or a dummy procedure. It shall be the name of an optional dummy argument
9618 accessible within the current subroutine or function.
9621 @item @emph{Return value}:
9622 Returns either @code{TRUE} if the optional argument @var{A} is present, or
9623 @code{FALSE} otherwise.
9625 @item @emph{Example}:
9627 PROGRAM test_present
9628 WRITE(*,*) f(), f(42) ! "F T"
9630 LOGICAL FUNCTION f(x)
9631 INTEGER, INTENT(IN), OPTIONAL :: x
9641 @section @code{PRODUCT} --- Product of array elements
9643 @cindex array, product
9644 @cindex array, multiply elements
9645 @cindex array, conditionally multiply elements
9646 @cindex multiply array elements
9649 @item @emph{Description}:
9650 Multiplies the elements of @var{ARRAY} along dimension @var{DIM} if
9651 the corresponding element in @var{MASK} is @code{TRUE}.
9653 @item @emph{Standard}:
9654 Fortran 95 and later
9657 Transformational function
9659 @item @emph{Syntax}:
9660 @multitable @columnfractions .80
9661 @item @code{RESULT = PRODUCT(ARRAY[, MASK])}
9662 @item @code{RESULT = PRODUCT(ARRAY, DIM[, MASK])}
9665 @item @emph{Arguments}:
9666 @multitable @columnfractions .15 .70
9667 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER},
9668 @code{REAL} or @code{COMPLEX}.
9669 @item @var{DIM} @tab (Optional) shall be a scalar of type
9670 @code{INTEGER} with a value in the range from 1 to n, where n
9671 equals the rank of @var{ARRAY}.
9672 @item @var{MASK} @tab (Optional) shall be of type @code{LOGICAL}
9673 and either be a scalar or an array of the same shape as @var{ARRAY}.
9676 @item @emph{Return value}:
9677 The result is of the same type as @var{ARRAY}.
9679 If @var{DIM} is absent, a scalar with the product of all elements in
9680 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
9681 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
9682 dimension @var{DIM} dropped is returned.
9685 @item @emph{Example}:
9687 PROGRAM test_product
9688 INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
9689 print *, PRODUCT(x) ! all elements, product = 120
9690 print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15
9694 @item @emph{See also}:
9701 @section @code{RADIX} --- Base of a model number
9703 @cindex model representation, base
9704 @cindex model representation, radix
9707 @item @emph{Description}:
9708 @code{RADIX(X)} returns the base of the model representing the entity @var{X}.
9710 @item @emph{Standard}:
9711 Fortran 95 and later
9716 @item @emph{Syntax}:
9717 @code{RESULT = RADIX(X)}
9719 @item @emph{Arguments}:
9720 @multitable @columnfractions .15 .70
9721 @item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
9724 @item @emph{Return value}:
9725 The return value is a scalar of type @code{INTEGER} and of the default
9728 @item @emph{See also}:
9729 @ref{SELECTED_REAL_KIND}
9731 @item @emph{Example}:
9734 print *, "The radix for the default integer kind is", radix(0)
9735 print *, "The radix for the default real kind is", radix(0.0)
9736 end program test_radix
9744 @section @code{RAN} --- Real pseudo-random number
9746 @cindex random number generation
9749 @item @emph{Description}:
9750 For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is
9751 provided as an alias for @code{RAND}. See @ref{RAND} for complete
9754 @item @emph{Standard}:
9760 @item @emph{See also}:
9761 @ref{RAND}, @ref{RANDOM_NUMBER}
9767 @section @code{RAND} --- Real pseudo-random number
9769 @cindex random number generation
9772 @item @emph{Description}:
9773 @code{RAND(FLAG)} returns a pseudo-random number from a uniform
9774 distribution between 0 and 1. If @var{FLAG} is 0, the next number
9775 in the current sequence is returned; if @var{FLAG} is 1, the generator
9776 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
9777 it is used as a new seed with @code{SRAND}.
9779 This intrinsic routine is provided for backwards compatibility with
9780 GNU Fortran 77. It implements a simple modulo generator as provided
9781 by @command{g77}. For new code, one should consider the use of
9782 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
9784 @item @emph{Standard}:
9790 @item @emph{Syntax}:
9791 @code{RESULT = RAND(I)}
9793 @item @emph{Arguments}:
9794 @multitable @columnfractions .15 .70
9795 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
9798 @item @emph{Return value}:
9799 The return value is of @code{REAL} type and the default kind.
9801 @item @emph{Example}:
9804 integer,parameter :: seed = 86456
9807 print *, rand(), rand(), rand(), rand()
9808 print *, rand(seed), rand(), rand(), rand()
9809 end program test_rand
9812 @item @emph{See also}:
9813 @ref{SRAND}, @ref{RANDOM_NUMBER}
9820 @section @code{RANDOM_NUMBER} --- Pseudo-random number
9821 @fnindex RANDOM_NUMBER
9822 @cindex random number generation
9825 @item @emph{Description}:
9826 Returns a single pseudorandom number or an array of pseudorandom numbers
9827 from the uniform distribution over the range @math{ 0 \leq x < 1}.
9829 The runtime-library implements George Marsaglia's KISS (Keep It Simple
9830 Stupid) random number generator (RNG). This RNG combines:
9832 @item The congruential generator @math{x(n) = 69069 \cdot x(n-1) + 1327217885}
9833 with a period of @math{2^{32}},
9834 @item A 3-shift shift-register generator with a period of @math{2^{32} - 1},
9835 @item Two 16-bit multiply-with-carry generators with a period of
9836 @math{597273182964842497 > 2^{59}}.
9838 The overall period exceeds @math{2^{123}}.
9840 Please note, this RNG is thread safe if used within OpenMP directives,
9841 i.e., its state will be consistent while called from multiple threads.
9842 However, the KISS generator does not create random numbers in parallel
9843 from multiple sources, but in sequence from a single source. If an
9844 OpenMP-enabled application heavily relies on random numbers, one should
9845 consider employing a dedicated parallel random number generator instead.
9847 @item @emph{Standard}:
9848 Fortran 95 and later
9853 @item @emph{Syntax}:
9854 @code{RANDOM_NUMBER(HARVEST)}
9856 @item @emph{Arguments}:
9857 @multitable @columnfractions .15 .70
9858 @item @var{HARVEST} @tab Shall be a scalar or an array of type @code{REAL}.
9861 @item @emph{Example}:
9863 program test_random_number
9865 CALL init_random_seed() ! see example of RANDOM_SEED
9866 CALL RANDOM_NUMBER(r)
9870 @item @emph{See also}:
9877 @section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence
9878 @fnindex RANDOM_SEED
9879 @cindex random number generation, seeding
9880 @cindex seeding a random number generator
9883 @item @emph{Description}:
9884 Restarts or queries the state of the pseudorandom number generator used by
9885 @code{RANDOM_NUMBER}.
9887 If @code{RANDOM_SEED} is called without arguments, it is initialized to
9888 a default state. The example below shows how to initialize the random
9889 seed based on the system's time.
9891 @item @emph{Standard}:
9892 Fortran 95 and later
9897 @item @emph{Syntax}:
9898 @code{CALL RANDOM_SEED([SIZE, PUT, GET])}
9900 @item @emph{Arguments}:
9901 @multitable @columnfractions .15 .70
9902 @item @var{SIZE} @tab (Optional) Shall be a scalar and of type default
9903 @code{INTEGER}, with @code{INTENT(OUT)}. It specifies the minimum size
9904 of the arrays used with the @var{PUT} and @var{GET} arguments.
9905 @item @var{PUT} @tab (Optional) Shall be an array of type default
9906 @code{INTEGER} and rank one. It is @code{INTENT(IN)} and the size of
9907 the array must be larger than or equal to the number returned by the
9908 @var{SIZE} argument.
9909 @item @var{GET} @tab (Optional) Shall be an array of type default
9910 @code{INTEGER} and rank one. It is @code{INTENT(OUT)} and the size
9911 of the array must be larger than or equal to the number returned by
9912 the @var{SIZE} argument.
9915 @item @emph{Example}:
9917 SUBROUTINE init_random_seed()
9918 INTEGER :: i, n, clock
9919 INTEGER, DIMENSION(:), ALLOCATABLE :: seed
9921 CALL RANDOM_SEED(size = n)
9924 CALL SYSTEM_CLOCK(COUNT=clock)
9926 seed = clock + 37 * (/ (i - 1, i = 1, n) /)
9927 CALL RANDOM_SEED(PUT = seed)
9933 @item @emph{See also}:
9940 @section @code{RANGE} --- Decimal exponent range
9942 @cindex model representation, range
9945 @item @emph{Description}:
9946 @code{RANGE(X)} returns the decimal exponent range in the model of the
9949 @item @emph{Standard}:
9950 Fortran 95 and later
9955 @item @emph{Syntax}:
9956 @code{RESULT = RANGE(X)}
9958 @item @emph{Arguments}:
9959 @multitable @columnfractions .15 .70
9960 @item @var{X} @tab Shall be of type @code{INTEGER}, @code{REAL}
9964 @item @emph{Return value}:
9965 The return value is of type @code{INTEGER} and of the default integer
9968 @item @emph{See also}:
9969 @ref{SELECTED_REAL_KIND}, @ref{PRECISION}
9971 @item @emph{Example}:
9972 See @code{PRECISION} for an example.
9978 @section @code{REAL} --- Convert to real type
9984 @cindex conversion, to real
9985 @cindex complex numbers, real part
9988 @item @emph{Description}:
9989 @code{REAL(A [, KIND])} converts its argument @var{A} to a real type. The
9990 @code{REALPART} function is provided for compatibility with @command{g77},
9991 and its use is strongly discouraged.
9993 @item @emph{Standard}:
9994 Fortran 77 and later
9999 @item @emph{Syntax}:
10000 @multitable @columnfractions .80
10001 @item @code{RESULT = REAL(A [, KIND])}
10002 @item @code{RESULT = REALPART(Z)}
10005 @item @emph{Arguments}:
10006 @multitable @columnfractions .15 .70
10007 @item @var{A} @tab Shall be @code{INTEGER}, @code{REAL}, or
10009 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
10010 expression indicating the kind parameter of the result.
10013 @item @emph{Return value}:
10014 These functions return a @code{REAL} variable or array under
10015 the following rules:
10019 @code{REAL(A)} is converted to a default real type if @var{A} is an
10020 integer or real variable.
10022 @code{REAL(A)} is converted to a real type with the kind type parameter
10023 of @var{A} if @var{A} is a complex variable.
10025 @code{REAL(A, KIND)} is converted to a real type with kind type
10026 parameter @var{KIND} if @var{A} is a complex, integer, or real
10030 @item @emph{Example}:
10033 complex :: x = (1.0, 2.0)
10034 print *, real(x), real(x,8), realpart(x)
10035 end program test_real
10038 @item @emph{Specific names}:
10039 @multitable @columnfractions .20 .20 .20 .25
10040 @item Name @tab Argument @tab Return type @tab Standard
10041 @item @code{FLOAT(A)} @tab @code{INTEGER(4)} @tab @code{REAL(4)} @tab Fortran 77 and later
10042 @item @code{DFLOAT(A)} @tab @code{INTEGER(4)} @tab @code{REAL(8)} @tab GNU extension
10043 @item @code{SNGL(A)} @tab @code{INTEGER(8)} @tab @code{REAL(4)} @tab Fortran 77 and later
10047 @item @emph{See also}:
10055 @section @code{RENAME} --- Rename a file
10057 @cindex file system, rename file
10060 @item @emph{Description}:
10061 Renames a file from file @var{PATH1} to @var{PATH2}. A null
10062 character (@code{CHAR(0)}) can be used to mark the end of the names in
10063 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
10064 names are ignored. If the @var{STATUS} argument is supplied, it
10065 contains 0 on success or a nonzero error code upon return; see
10068 This intrinsic is provided in both subroutine and function forms;
10069 however, only one form can be used in any given program unit.
10071 @item @emph{Standard}:
10074 @item @emph{Class}:
10075 Subroutine, function
10077 @item @emph{Syntax}:
10078 @multitable @columnfractions .80
10079 @item @code{CALL RENAME(PATH1, PATH2 [, STATUS])}
10080 @item @code{STATUS = RENAME(PATH1, PATH2)}
10083 @item @emph{Arguments}:
10084 @multitable @columnfractions .15 .70
10085 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
10086 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
10087 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
10090 @item @emph{See also}:
10098 @section @code{REPEAT} --- Repeated string concatenation
10100 @cindex string, repeat
10101 @cindex string, concatenate
10104 @item @emph{Description}:
10105 Concatenates @var{NCOPIES} copies of a string.
10107 @item @emph{Standard}:
10108 Fortran 95 and later
10110 @item @emph{Class}:
10111 Transformational function
10113 @item @emph{Syntax}:
10114 @code{RESULT = REPEAT(STRING, NCOPIES)}
10116 @item @emph{Arguments}:
10117 @multitable @columnfractions .15 .70
10118 @item @var{STRING} @tab Shall be scalar and of type @code{CHARACTER}.
10119 @item @var{NCOPIES} @tab Shall be scalar and of type @code{INTEGER}.
10122 @item @emph{Return value}:
10123 A new scalar of type @code{CHARACTER} built up from @var{NCOPIES} copies
10126 @item @emph{Example}:
10128 program test_repeat
10129 write(*,*) repeat("x", 5) ! "xxxxx"
10137 @section @code{RESHAPE} --- Function to reshape an array
10139 @cindex array, change dimensions
10140 @cindex array, transmogrify
10143 @item @emph{Description}:
10144 Reshapes @var{SOURCE} to correspond to @var{SHAPE}. If necessary,
10145 the new array may be padded with elements from @var{PAD} or permuted
10146 as defined by @var{ORDER}.
10148 @item @emph{Standard}:
10149 Fortran 95 and later
10151 @item @emph{Class}:
10152 Transformational function
10154 @item @emph{Syntax}:
10155 @code{RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])}
10157 @item @emph{Arguments}:
10158 @multitable @columnfractions .15 .70
10159 @item @var{SOURCE} @tab Shall be an array of any type.
10160 @item @var{SHAPE} @tab Shall be of type @code{INTEGER} and an
10161 array of rank one. Its values must be positive or zero.
10162 @item @var{PAD} @tab (Optional) shall be an array of the same
10163 type as @var{SOURCE}.
10164 @item @var{ORDER} @tab (Optional) shall be of type @code{INTEGER}
10165 and an array of the same shape as @var{SHAPE}. Its values shall
10166 be a permutation of the numbers from 1 to n, where n is the size of
10167 @var{SHAPE}. If @var{ORDER} is absent, the natural ordering shall
10171 @item @emph{Return value}:
10172 The result is an array of shape @var{SHAPE} with the same type as
10175 @item @emph{Example}:
10177 PROGRAM test_reshape
10178 INTEGER, DIMENSION(4) :: x
10179 WRITE(*,*) SHAPE(x) ! prints "4"
10180 WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/))) ! prints "2 2"
10184 @item @emph{See also}:
10191 @section @code{RRSPACING} --- Reciprocal of the relative spacing
10193 @cindex real number, relative spacing
10194 @cindex floating point, relative spacing
10198 @item @emph{Description}:
10199 @code{RRSPACING(X)} returns the reciprocal of the relative spacing of
10200 model numbers near @var{X}.
10202 @item @emph{Standard}:
10203 Fortran 95 and later
10205 @item @emph{Class}:
10208 @item @emph{Syntax}:
10209 @code{RESULT = RRSPACING(X)}
10211 @item @emph{Arguments}:
10212 @multitable @columnfractions .15 .70
10213 @item @var{X} @tab Shall be of type @code{REAL}.
10216 @item @emph{Return value}:
10217 The return value is of the same type and kind as @var{X}.
10218 The value returned is equal to
10219 @code{ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)}.
10221 @item @emph{See also}:
10228 @section @code{RSHIFT} --- Right shift bits
10230 @cindex bits, shift right
10233 @item @emph{Description}:
10234 @code{RSHIFT} returns a value corresponding to @var{I} with all of the
10235 bits shifted right by @var{SHIFT} places. If the absolute value of
10236 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
10237 Bits shifted out from the right end are lost. The fill is arithmetic: the
10238 bits shifted in from the left end are equal to the leftmost bit, which in
10239 two's complement representation is the sign bit.
10241 This function has been superseded by the @code{SHIFTA} intrinsic, which
10242 is standard in Fortran 2008 and later.
10244 @item @emph{Standard}:
10247 @item @emph{Class}:
10250 @item @emph{Syntax}:
10251 @code{RESULT = RSHIFT(I, SHIFT)}
10253 @item @emph{Arguments}:
10254 @multitable @columnfractions .15 .70
10255 @item @var{I} @tab The type shall be @code{INTEGER}.
10256 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
10259 @item @emph{Return value}:
10260 The return value is of type @code{INTEGER} and of the same kind as
10263 @item @emph{See also}:
10264 @ref{ISHFT}, @ref{ISHFTC}, @ref{LSHIFT}, @ref{SHIFTA}, @ref{SHIFTR},
10272 @section @code{SAME_TYPE_AS} --- Query dynamic types for equality
10273 @fnindex SAME_TYPE_AS
10276 @item @emph{Description}:
10277 Query dynamic types for equality.
10279 @item @emph{Standard}:
10280 Fortran 2003 and later
10282 @item @emph{Class}:
10285 @item @emph{Syntax}:
10286 @code{RESULT = SAME_TYPE_AS(A, B)}
10288 @item @emph{Arguments}:
10289 @multitable @columnfractions .15 .70
10290 @item @var{A} @tab Shall be an object of extensible declared type or
10291 unlimited polymorphic.
10292 @item @var{B} @tab Shall be an object of extensible declared type or
10293 unlimited polymorphic.
10296 @item @emph{Return value}:
10297 The return value is a scalar of type default logical. It is true if and
10298 only if the dynamic type of A is the same as the dynamic type of B.
10300 @item @emph{See also}:
10301 @ref{EXTENDS_TYPE_OF}
10308 @section @code{SCALE} --- Scale a real value
10310 @cindex real number, scale
10311 @cindex floating point, scale
10314 @item @emph{Description}:
10315 @code{SCALE(X,I)} returns @code{X * RADIX(X)**I}.
10317 @item @emph{Standard}:
10318 Fortran 95 and later
10320 @item @emph{Class}:
10323 @item @emph{Syntax}:
10324 @code{RESULT = SCALE(X, I)}
10326 @item @emph{Arguments}:
10327 @multitable @columnfractions .15 .70
10328 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
10329 @item @var{I} @tab The type of the argument shall be a @code{INTEGER}.
10332 @item @emph{Return value}:
10333 The return value is of the same type and kind as @var{X}.
10334 Its value is @code{X * RADIX(X)**I}.
10336 @item @emph{Example}:
10339 real :: x = 178.1387e-4
10341 print *, scale(x,i), x*radix(x)**i
10342 end program test_scale
10350 @section @code{SCAN} --- Scan a string for the presence of a set of characters
10352 @cindex string, find subset
10355 @item @emph{Description}:
10356 Scans a @var{STRING} for any of the characters in a @var{SET}
10359 If @var{BACK} is either absent or equals @code{FALSE}, this function
10360 returns the position of the leftmost character of @var{STRING} that is
10361 in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position
10362 is returned. If no character of @var{SET} is found in @var{STRING}, the
10365 @item @emph{Standard}:
10366 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
10368 @item @emph{Class}:
10371 @item @emph{Syntax}:
10372 @code{RESULT = SCAN(STRING, SET[, BACK [, KIND]])}
10374 @item @emph{Arguments}:
10375 @multitable @columnfractions .15 .70
10376 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
10377 @item @var{SET} @tab Shall be of type @code{CHARACTER}.
10378 @item @var{BACK} @tab (Optional) shall be of type @code{LOGICAL}.
10379 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
10380 expression indicating the kind parameter of the result.
10383 @item @emph{Return value}:
10384 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
10385 @var{KIND} is absent, the return value is of default integer kind.
10387 @item @emph{Example}:
10390 WRITE(*,*) SCAN("FORTRAN", "AO") ! 2, found 'O'
10391 WRITE(*,*) SCAN("FORTRAN", "AO", .TRUE.) ! 6, found 'A'
10392 WRITE(*,*) SCAN("FORTRAN", "C++") ! 0, found none
10396 @item @emph{See also}:
10397 @ref{INDEX intrinsic}, @ref{VERIFY}
10403 @section @code{SECNDS} --- Time function
10405 @cindex time, elapsed
10406 @cindex elapsed time
10409 @item @emph{Description}:
10410 @code{SECNDS(X)} gets the time in seconds from the real-time system clock.
10411 @var{X} is a reference time, also in seconds. If this is zero, the time in
10412 seconds from midnight is returned. This function is non-standard and its
10413 use is discouraged.
10415 @item @emph{Standard}:
10418 @item @emph{Class}:
10421 @item @emph{Syntax}:
10422 @code{RESULT = SECNDS (X)}
10424 @item @emph{Arguments}:
10425 @multitable @columnfractions .15 .70
10426 @item @var{T} @tab Shall be of type @code{REAL(4)}.
10427 @item @var{X} @tab Shall be of type @code{REAL(4)}.
10430 @item @emph{Return value}:
10433 @item @emph{Example}:
10435 program test_secnds
10438 print *, secnds (0.0) ! seconds since midnight
10439 t1 = secnds (0.0) ! reference time
10440 do i = 1, 10000000 ! do something
10442 t2 = secnds (t1) ! elapsed time
10443 print *, "Something took ", t2, " seconds."
10444 end program test_secnds
10451 @section @code{SECOND} --- CPU time function
10453 @cindex time, elapsed
10454 @cindex elapsed time
10457 @item @emph{Description}:
10458 Returns a @code{REAL(4)} value representing the elapsed CPU time in
10459 seconds. This provides the same functionality as the standard
10460 @code{CPU_TIME} intrinsic, and is only included for backwards
10463 This intrinsic is provided in both subroutine and function forms;
10464 however, only one form can be used in any given program unit.
10466 @item @emph{Standard}:
10469 @item @emph{Class}:
10470 Subroutine, function
10472 @item @emph{Syntax}:
10473 @multitable @columnfractions .80
10474 @item @code{CALL SECOND(TIME)}
10475 @item @code{TIME = SECOND()}
10478 @item @emph{Arguments}:
10479 @multitable @columnfractions .15 .70
10480 @item @var{TIME} @tab Shall be of type @code{REAL(4)}.
10483 @item @emph{Return value}:
10484 In either syntax, @var{TIME} is set to the process's current runtime in
10487 @item @emph{See also}:
10494 @node SELECTED_CHAR_KIND
10495 @section @code{SELECTED_CHAR_KIND} --- Choose character kind
10496 @fnindex SELECTED_CHAR_KIND
10497 @cindex character kind
10498 @cindex kind, character
10501 @item @emph{Description}:
10503 @code{SELECTED_CHAR_KIND(NAME)} returns the kind value for the character
10504 set named @var{NAME}, if a character set with such a name is supported,
10505 or @math{-1} otherwise. Currently, supported character sets include
10506 ``ASCII'' and ``DEFAULT'', which are equivalent, and ``ISO_10646''
10507 (Universal Character Set, UCS-4) which is commonly known as Unicode.
10509 @item @emph{Standard}:
10510 Fortran 2003 and later
10512 @item @emph{Class}:
10513 Transformational function
10515 @item @emph{Syntax}:
10516 @code{RESULT = SELECTED_CHAR_KIND(NAME)}
10518 @item @emph{Arguments}:
10519 @multitable @columnfractions .15 .70
10520 @item @var{NAME} @tab Shall be a scalar and of the default character type.
10523 @item @emph{Example}:
10525 program character_kind
10526 use iso_fortran_env
10528 integer, parameter :: ascii = selected_char_kind ("ascii")
10529 integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')
10531 character(kind=ascii, len=26) :: alphabet
10532 character(kind=ucs4, len=30) :: hello_world
10534 alphabet = ascii_"abcdefghijklmnopqrstuvwxyz"
10535 hello_world = ucs4_'Hello World and Ni Hao -- ' &
10536 // char (int (z'4F60'), ucs4) &
10537 // char (int (z'597D'), ucs4)
10539 write (*,*) alphabet
10541 open (output_unit, encoding='UTF-8')
10542 write (*,*) trim (hello_world)
10543 end program character_kind
10549 @node SELECTED_INT_KIND
10550 @section @code{SELECTED_INT_KIND} --- Choose integer kind
10551 @fnindex SELECTED_INT_KIND
10552 @cindex integer kind
10553 @cindex kind, integer
10556 @item @emph{Description}:
10557 @code{SELECTED_INT_KIND(R)} return the kind value of the smallest integer
10558 type that can represent all values ranging from @math{-10^R} (exclusive)
10559 to @math{10^R} (exclusive). If there is no integer kind that accommodates
10560 this range, @code{SELECTED_INT_KIND} returns @math{-1}.
10562 @item @emph{Standard}:
10563 Fortran 95 and later
10565 @item @emph{Class}:
10566 Transformational function
10568 @item @emph{Syntax}:
10569 @code{RESULT = SELECTED_INT_KIND(R)}
10571 @item @emph{Arguments}:
10572 @multitable @columnfractions .15 .70
10573 @item @var{R} @tab Shall be a scalar and of type @code{INTEGER}.
10576 @item @emph{Example}:
10578 program large_integers
10579 integer,parameter :: k5 = selected_int_kind(5)
10580 integer,parameter :: k15 = selected_int_kind(15)
10581 integer(kind=k5) :: i5
10582 integer(kind=k15) :: i15
10584 print *, huge(i5), huge(i15)
10586 ! The following inequalities are always true
10587 print *, huge(i5) >= 10_k5**5-1
10588 print *, huge(i15) >= 10_k15**15-1
10589 end program large_integers
10595 @node SELECTED_REAL_KIND
10596 @section @code{SELECTED_REAL_KIND} --- Choose real kind
10597 @fnindex SELECTED_REAL_KIND
10600 @cindex radix, real
10603 @item @emph{Description}:
10604 @code{SELECTED_REAL_KIND(P,R)} returns the kind value of a real data type
10605 with decimal precision of at least @code{P} digits, exponent range of
10606 at least @code{R}, and with a radix of @code{RADIX}.
10608 @item @emph{Standard}:
10609 Fortran 95 and later, with @code{RADIX} Fortran 2008 or later
10611 @item @emph{Class}:
10612 Transformational function
10614 @item @emph{Syntax}:
10615 @code{RESULT = SELECTED_REAL_KIND([P, R, RADIX])}
10617 @item @emph{Arguments}:
10618 @multitable @columnfractions .15 .70
10619 @item @var{P} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
10620 @item @var{R} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
10621 @item @var{RADIX} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
10623 Before Fortran 2008, at least one of the arguments @var{R} or @var{P} shall
10624 be present; since Fortran 2008, they are assumed to be zero if absent.
10626 @item @emph{Return value}:
10628 @code{SELECTED_REAL_KIND} returns the value of the kind type parameter of
10629 a real data type with decimal precision of at least @code{P} digits, a
10630 decimal exponent range of at least @code{R}, and with the requested
10631 @code{RADIX}. If the @code{RADIX} parameter is absent, real kinds with
10632 any radix can be returned. If more than one real data type meet the
10633 criteria, the kind of the data type with the smallest decimal precision
10634 is returned. If no real data type matches the criteria, the result is
10636 @item -1 if the processor does not support a real data type with a
10637 precision greater than or equal to @code{P}, but the @code{R} and
10638 @code{RADIX} requirements can be fulfilled
10639 @item -2 if the processor does not support a real type with an exponent
10640 range greater than or equal to @code{R}, but @code{P} and @code{RADIX}
10642 @item -3 if @code{RADIX} but not @code{P} and @code{R} requirements
10644 @item -4 if @code{RADIX} and either @code{P} or @code{R} requirements
10646 @item -5 if there is no real type with the given @code{RADIX}
10649 @item @emph{See also}:
10650 @ref{PRECISION}, @ref{RANGE}, @ref{RADIX}
10652 @item @emph{Example}:
10655 integer,parameter :: p6 = selected_real_kind(6)
10656 integer,parameter :: p10r100 = selected_real_kind(10,100)
10657 integer,parameter :: r400 = selected_real_kind(r=400)
10659 real(kind=p10r100) :: y
10660 real(kind=r400) :: z
10662 print *, precision(x), range(x)
10663 print *, precision(y), range(y)
10664 print *, precision(z), range(z)
10665 end program real_kinds
10672 @section @code{SET_EXPONENT} --- Set the exponent of the model
10673 @fnindex SET_EXPONENT
10674 @cindex real number, set exponent
10675 @cindex floating point, set exponent
10678 @item @emph{Description}:
10679 @code{SET_EXPONENT(X, I)} returns the real number whose fractional part
10680 is that that of @var{X} and whose exponent part is @var{I}.
10682 @item @emph{Standard}:
10683 Fortran 95 and later
10685 @item @emph{Class}:
10688 @item @emph{Syntax}:
10689 @code{RESULT = SET_EXPONENT(X, I)}
10691 @item @emph{Arguments}:
10692 @multitable @columnfractions .15 .70
10693 @item @var{X} @tab Shall be of type @code{REAL}.
10694 @item @var{I} @tab Shall be of type @code{INTEGER}.
10697 @item @emph{Return value}:
10698 The return value is of the same type and kind as @var{X}.
10699 The real number whose fractional part
10700 is that that of @var{X} and whose exponent part if @var{I} is returned;
10701 it is @code{FRACTION(X) * RADIX(X)**I}.
10703 @item @emph{Example}:
10705 PROGRAM test_setexp
10706 REAL :: x = 178.1387e-4
10708 PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i
10717 @section @code{SHAPE} --- Determine the shape of an array
10719 @cindex array, shape
10722 @item @emph{Description}:
10723 Determines the shape of an array.
10725 @item @emph{Standard}:
10726 Fortran 95 and later
10728 @item @emph{Class}:
10731 @item @emph{Syntax}:
10732 @code{RESULT = SHAPE(SOURCE)}
10734 @item @emph{Arguments}:
10735 @multitable @columnfractions .15 .70
10736 @item @var{SOURCE} @tab Shall be an array or scalar of any type.
10737 If @var{SOURCE} is a pointer it must be associated and allocatable
10738 arrays must be allocated.
10741 @item @emph{Return value}:
10742 An @code{INTEGER} array of rank one with as many elements as @var{SOURCE}
10743 has dimensions. The elements of the resulting array correspond to the extend
10744 of @var{SOURCE} along the respective dimensions. If @var{SOURCE} is a scalar,
10745 the result is the rank one array of size zero.
10747 @item @emph{Example}:
10750 INTEGER, DIMENSION(-1:1, -1:2) :: A
10751 WRITE(*,*) SHAPE(A) ! (/ 3, 4 /)
10752 WRITE(*,*) SIZE(SHAPE(42)) ! (/ /)
10756 @item @emph{See also}:
10757 @ref{RESHAPE}, @ref{SIZE}
10763 @section @code{SHIFTA} --- Right shift with fill
10765 @cindex bits, shift right
10766 @cindex shift, right with fill
10769 @item @emph{Description}:
10770 @code{SHIFTA} returns a value corresponding to @var{I} with all of the
10771 bits shifted right by @var{SHIFT} places. If the absolute value of
10772 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
10773 Bits shifted out from the right end are lost. The fill is arithmetic: the
10774 bits shifted in from the left end are equal to the leftmost bit, which in
10775 two's complement representation is the sign bit.
10777 @item @emph{Standard}:
10778 Fortran 2008 and later
10780 @item @emph{Class}:
10783 @item @emph{Syntax}:
10784 @code{RESULT = SHIFTA(I, SHIFT)}
10786 @item @emph{Arguments}:
10787 @multitable @columnfractions .15 .70
10788 @item @var{I} @tab The type shall be @code{INTEGER}.
10789 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
10792 @item @emph{Return value}:
10793 The return value is of type @code{INTEGER} and of the same kind as
10796 @item @emph{See also}:
10797 @ref{SHIFTL}, @ref{SHIFTR}
10803 @section @code{SHIFTL} --- Left shift
10805 @cindex bits, shift left
10806 @cindex shift, left
10809 @item @emph{Description}:
10810 @code{SHIFTL} returns a value corresponding to @var{I} with all of the
10811 bits shifted left by @var{SHIFT} places. If the absolute value of
10812 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
10813 Bits shifted out from the left end are lost, and bits shifted in from
10814 the right end are set to 0.
10816 @item @emph{Standard}:
10817 Fortran 2008 and later
10819 @item @emph{Class}:
10822 @item @emph{Syntax}:
10823 @code{RESULT = SHIFTL(I, SHIFT)}
10825 @item @emph{Arguments}:
10826 @multitable @columnfractions .15 .70
10827 @item @var{I} @tab The type shall be @code{INTEGER}.
10828 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
10831 @item @emph{Return value}:
10832 The return value is of type @code{INTEGER} and of the same kind as
10835 @item @emph{See also}:
10836 @ref{SHIFTA}, @ref{SHIFTR}
10842 @section @code{SHIFTR} --- Right shift
10844 @cindex bits, shift right
10845 @cindex shift, right
10848 @item @emph{Description}:
10849 @code{SHIFTR} returns a value corresponding to @var{I} with all of the
10850 bits shifted right by @var{SHIFT} places. If the absolute value of
10851 @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
10852 Bits shifted out from the right end are lost, and bits shifted in from
10853 the left end are set to 0.
10855 @item @emph{Standard}:
10856 Fortran 2008 and later
10858 @item @emph{Class}:
10861 @item @emph{Syntax}:
10862 @code{RESULT = SHIFTR(I, SHIFT)}
10864 @item @emph{Arguments}:
10865 @multitable @columnfractions .15 .70
10866 @item @var{I} @tab The type shall be @code{INTEGER}.
10867 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
10870 @item @emph{Return value}:
10871 The return value is of type @code{INTEGER} and of the same kind as
10874 @item @emph{See also}:
10875 @ref{SHIFTA}, @ref{SHIFTL}
10881 @section @code{SIGN} --- Sign copying function
10885 @cindex sign copying
10888 @item @emph{Description}:
10889 @code{SIGN(A,B)} returns the value of @var{A} with the sign of @var{B}.
10891 @item @emph{Standard}:
10892 Fortran 77 and later
10894 @item @emph{Class}:
10897 @item @emph{Syntax}:
10898 @code{RESULT = SIGN(A, B)}
10900 @item @emph{Arguments}:
10901 @multitable @columnfractions .15 .70
10902 @item @var{A} @tab Shall be of type @code{INTEGER} or @code{REAL}
10903 @item @var{B} @tab Shall be of the same type and kind as @var{A}
10906 @item @emph{Return value}:
10907 The kind of the return value is that of @var{A} and @var{B}.
10908 If @math{B\ge 0} then the result is @code{ABS(A)}, else
10909 it is @code{-ABS(A)}.
10911 @item @emph{Example}:
10914 print *, sign(-12,1)
10915 print *, sign(-12,0)
10916 print *, sign(-12,-1)
10918 print *, sign(-12.,1.)
10919 print *, sign(-12.,0.)
10920 print *, sign(-12.,-1.)
10921 end program test_sign
10924 @item @emph{Specific names}:
10925 @multitable @columnfractions .20 .20 .20 .25
10926 @item Name @tab Arguments @tab Return type @tab Standard
10927 @item @code{SIGN(A,B)} @tab @code{REAL(4) A, B} @tab @code{REAL(4)} @tab f77, gnu
10928 @item @code{ISIGN(A,B)} @tab @code{INTEGER(4) A, B} @tab @code{INTEGER(4)} @tab f77, gnu
10929 @item @code{DSIGN(A,B)} @tab @code{REAL(8) A, B} @tab @code{REAL(8)} @tab f77, gnu
10936 @section @code{SIGNAL} --- Signal handling subroutine (or function)
10938 @cindex system, signal handling
10941 @item @emph{Description}:
10942 @code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine
10943 @var{HANDLER} to be executed with a single integer argument when signal
10944 @var{NUMBER} occurs. If @var{HANDLER} is an integer, it can be used to
10945 turn off handling of signal @var{NUMBER} or revert to its default
10946 action. See @code{signal(2)}.
10948 If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument
10949 is supplied, it is set to the value returned by @code{signal(2)}.
10951 @item @emph{Standard}:
10954 @item @emph{Class}:
10955 Subroutine, function
10957 @item @emph{Syntax}:
10958 @multitable @columnfractions .80
10959 @item @code{CALL SIGNAL(NUMBER, HANDLER [, STATUS])}
10960 @item @code{STATUS = SIGNAL(NUMBER, HANDLER)}
10963 @item @emph{Arguments}:
10964 @multitable @columnfractions .15 .70
10965 @item @var{NUMBER} @tab Shall be a scalar integer, with @code{INTENT(IN)}
10966 @item @var{HANDLER}@tab Signal handler (@code{INTEGER FUNCTION} or
10967 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar.
10968 @code{INTEGER}. It is @code{INTENT(IN)}.
10969 @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
10970 integer. It has @code{INTENT(OUT)}.
10972 @c TODO: What should the interface of the handler be? Does it take arguments?
10974 @item @emph{Return value}:
10975 The @code{SIGNAL} function returns the value returned by @code{signal(2)}.
10977 @item @emph{Example}:
10979 program test_signal
10981 external handler_print
10983 call signal (12, handler_print)
10984 call signal (10, 1)
10987 end program test_signal
10994 @section @code{SIN} --- Sine function
11000 @cindex trigonometric function, sine
11004 @item @emph{Description}:
11005 @code{SIN(X)} computes the sine of @var{X}.
11007 @item @emph{Standard}:
11008 Fortran 77 and later
11010 @item @emph{Class}:
11013 @item @emph{Syntax}:
11014 @code{RESULT = SIN(X)}
11016 @item @emph{Arguments}:
11017 @multitable @columnfractions .15 .70
11018 @item @var{X} @tab The type shall be @code{REAL} or
11022 @item @emph{Return value}:
11023 The return value has same type and kind as @var{X}.
11025 @item @emph{Example}:
11030 end program test_sin
11033 @item @emph{Specific names}:
11034 @multitable @columnfractions .20 .20 .20 .25
11035 @item Name @tab Argument @tab Return type @tab Standard
11036 @item @code{SIN(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab f77, gnu
11037 @item @code{DSIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu
11038 @item @code{CSIN(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu
11039 @item @code{ZSIN(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu
11040 @item @code{CDSIN(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu
11043 @item @emph{See also}:
11050 @section @code{SINH} --- Hyperbolic sine function
11053 @cindex hyperbolic sine
11054 @cindex hyperbolic function, sine
11055 @cindex sine, hyperbolic
11058 @item @emph{Description}:
11059 @code{SINH(X)} computes the hyperbolic sine of @var{X}.
11061 @item @emph{Standard}:
11062 Fortran 95 and later, for a complex argument Fortran 2008 or later
11064 @item @emph{Class}:
11067 @item @emph{Syntax}:
11068 @code{RESULT = SINH(X)}
11070 @item @emph{Arguments}:
11071 @multitable @columnfractions .15 .70
11072 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
11075 @item @emph{Return value}:
11076 The return value has same type and kind as @var{X}.
11078 @item @emph{Example}:
11081 real(8) :: x = - 1.0_8
11083 end program test_sinh
11086 @item @emph{Specific names}:
11087 @multitable @columnfractions .20 .20 .20 .25
11088 @item Name @tab Argument @tab Return type @tab Standard
11089 @item @code{SINH(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 95 and later
11090 @item @code{DSINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later
11093 @item @emph{See also}:
11100 @section @code{SIZE} --- Determine the size of an array
11102 @cindex array, size
11103 @cindex array, number of elements
11104 @cindex array, count elements
11107 @item @emph{Description}:
11108 Determine the extent of @var{ARRAY} along a specified dimension @var{DIM},
11109 or the total number of elements in @var{ARRAY} if @var{DIM} is absent.
11111 @item @emph{Standard}:
11112 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
11114 @item @emph{Class}:
11117 @item @emph{Syntax}:
11118 @code{RESULT = SIZE(ARRAY[, DIM [, KIND]])}
11120 @item @emph{Arguments}:
11121 @multitable @columnfractions .15 .70
11122 @item @var{ARRAY} @tab Shall be an array of any type. If @var{ARRAY} is
11123 a pointer it must be associated and allocatable arrays must be allocated.
11124 @item @var{DIM} @tab (Optional) shall be a scalar of type @code{INTEGER}
11125 and its value shall be in the range from 1 to n, where n equals the rank
11127 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
11128 expression indicating the kind parameter of the result.
11131 @item @emph{Return value}:
11132 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
11133 @var{KIND} is absent, the return value is of default integer kind.
11135 @item @emph{Example}:
11138 WRITE(*,*) SIZE((/ 1, 2 /)) ! 2
11142 @item @emph{See also}:
11143 @ref{SHAPE}, @ref{RESHAPE}
11148 @section @code{SIZEOF} --- Size in bytes of an expression
11150 @cindex expression size
11151 @cindex size of an expression
11154 @item @emph{Description}:
11155 @code{SIZEOF(X)} calculates the number of bytes of storage the
11156 expression @code{X} occupies.
11158 @item @emph{Standard}:
11161 @item @emph{Class}:
11164 @item @emph{Syntax}:
11165 @code{N = SIZEOF(X)}
11167 @item @emph{Arguments}:
11168 @multitable @columnfractions .15 .70
11169 @item @var{X} @tab The argument shall be of any type, rank or shape.
11172 @item @emph{Return value}:
11173 The return value is of type integer and of the system-dependent kind
11174 @var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
11175 number of bytes occupied by the argument. If the argument has the
11176 @code{POINTER} attribute, the number of bytes of the storage area pointed
11177 to is returned. If the argument is of a derived type with @code{POINTER}
11178 or @code{ALLOCATABLE} components, the return value doesn't account for
11179 the sizes of the data pointed to by these components. If the argument is
11180 polymorphic, the size according to the declared type is returned.
11182 @item @emph{Example}:
11186 print *, (sizeof(s)/sizeof(r) == 5)
11189 The example will print @code{.TRUE.} unless you are using a platform
11190 where default @code{REAL} variables are unusually padded.
11192 @item @emph{See also}:
11193 @ref{C_SIZEOF}, @ref{STORAGE_SIZE}
11198 @section @code{SLEEP} --- Sleep for the specified number of seconds
11200 @cindex delayed execution
11203 @item @emph{Description}:
11204 Calling this subroutine causes the process to pause for @var{SECONDS} seconds.
11206 @item @emph{Standard}:
11209 @item @emph{Class}:
11212 @item @emph{Syntax}:
11213 @code{CALL SLEEP(SECONDS)}
11215 @item @emph{Arguments}:
11216 @multitable @columnfractions .15 .70
11217 @item @var{SECONDS} @tab The type shall be of default @code{INTEGER}.
11220 @item @emph{Example}:
11231 @section @code{SPACING} --- Smallest distance between two numbers of a given type
11233 @cindex real number, relative spacing
11234 @cindex floating point, relative spacing
11237 @item @emph{Description}:
11238 Determines the distance between the argument @var{X} and the nearest
11239 adjacent number of the same type.
11241 @item @emph{Standard}:
11242 Fortran 95 and later
11244 @item @emph{Class}:
11247 @item @emph{Syntax}:
11248 @code{RESULT = SPACING(X)}
11250 @item @emph{Arguments}:
11251 @multitable @columnfractions .15 .70
11252 @item @var{X} @tab Shall be of type @code{REAL}.
11255 @item @emph{Return value}:
11256 The result is of the same type as the input argument @var{X}.
11258 @item @emph{Example}:
11260 PROGRAM test_spacing
11261 INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)
11262 INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)
11264 WRITE(*,*) spacing(1.0_SGL) ! "1.1920929E-07" on i686
11265 WRITE(*,*) spacing(1.0_DBL) ! "2.220446049250313E-016" on i686
11269 @item @emph{See also}:
11276 @section @code{SPREAD} --- Add a dimension to an array
11278 @cindex array, increase dimension
11279 @cindex array, duplicate elements
11280 @cindex array, duplicate dimensions
11283 @item @emph{Description}:
11284 Replicates a @var{SOURCE} array @var{NCOPIES} times along a specified
11285 dimension @var{DIM}.
11287 @item @emph{Standard}:
11288 Fortran 95 and later
11290 @item @emph{Class}:
11291 Transformational function
11293 @item @emph{Syntax}:
11294 @code{RESULT = SPREAD(SOURCE, DIM, NCOPIES)}
11296 @item @emph{Arguments}:
11297 @multitable @columnfractions .15 .70
11298 @item @var{SOURCE} @tab Shall be a scalar or an array of any type and
11299 a rank less than seven.
11300 @item @var{DIM} @tab Shall be a scalar of type @code{INTEGER} with a
11301 value in the range from 1 to n+1, where n equals the rank of @var{SOURCE}.
11302 @item @var{NCOPIES} @tab Shall be a scalar of type @code{INTEGER}.
11305 @item @emph{Return value}:
11306 The result is an array of the same type as @var{SOURCE} and has rank n+1
11307 where n equals the rank of @var{SOURCE}.
11309 @item @emph{Example}:
11311 PROGRAM test_spread
11312 INTEGER :: a = 1, b(2) = (/ 1, 2 /)
11313 WRITE(*,*) SPREAD(A, 1, 2) ! "1 1"
11314 WRITE(*,*) SPREAD(B, 1, 2) ! "1 1 2 2"
11318 @item @emph{See also}:
11325 @section @code{SQRT} --- Square-root function
11332 @cindex square-root
11335 @item @emph{Description}:
11336 @code{SQRT(X)} computes the square root of @var{X}.
11338 @item @emph{Standard}:
11339 Fortran 77 and later
11341 @item @emph{Class}:
11344 @item @emph{Syntax}:
11345 @code{RESULT = SQRT(X)}
11347 @item @emph{Arguments}:
11348 @multitable @columnfractions .15 .70
11349 @item @var{X} @tab The type shall be @code{REAL} or
11353 @item @emph{Return value}:
11354 The return value is of type @code{REAL} or @code{COMPLEX}.
11355 The kind type parameter is the same as @var{X}.
11357 @item @emph{Example}:
11360 real(8) :: x = 2.0_8
11361 complex :: z = (1.0, 2.0)
11364 end program test_sqrt
11367 @item @emph{Specific names}:
11368 @multitable @columnfractions .20 .20 .20 .25
11369 @item Name @tab Argument @tab Return type @tab Standard
11370 @item @code{SQRT(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 95 and later
11371 @item @code{DSQRT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later
11372 @item @code{CSQRT(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 95 and later
11373 @item @code{ZSQRT(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
11374 @item @code{CDSQRT(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
11381 @section @code{SRAND} --- Reinitialize the random number generator
11383 @cindex random number generation, seeding
11384 @cindex seeding a random number generator
11387 @item @emph{Description}:
11388 @code{SRAND} reinitializes the pseudo-random number generator
11389 called by @code{RAND} and @code{IRAND}. The new seed used by the
11390 generator is specified by the required argument @var{SEED}.
11392 @item @emph{Standard}:
11395 @item @emph{Class}:
11398 @item @emph{Syntax}:
11399 @code{CALL SRAND(SEED)}
11401 @item @emph{Arguments}:
11402 @multitable @columnfractions .15 .70
11403 @item @var{SEED} @tab Shall be a scalar @code{INTEGER(kind=4)}.
11406 @item @emph{Return value}:
11407 Does not return anything.
11409 @item @emph{Example}:
11410 See @code{RAND} and @code{IRAND} for examples.
11412 @item @emph{Notes}:
11413 The Fortran 2003 standard specifies the intrinsic @code{RANDOM_SEED} to
11414 initialize the pseudo-random numbers generator and @code{RANDOM_NUMBER}
11415 to generate pseudo-random numbers. Please note that in
11416 GNU Fortran, these two sets of intrinsics (@code{RAND},
11417 @code{IRAND} and @code{SRAND} on the one hand, @code{RANDOM_NUMBER} and
11418 @code{RANDOM_SEED} on the other hand) access two independent
11419 pseudo-random number generators.
11421 @item @emph{See also}:
11422 @ref{RAND}, @ref{RANDOM_SEED}, @ref{RANDOM_NUMBER}
11429 @section @code{STAT} --- Get file status
11431 @cindex file system, file status
11434 @item @emph{Description}:
11435 This function returns information about a file. No permissions are required on
11436 the file itself, but execute (search) permission is required on all of the
11437 directories in path that lead to the file.
11439 The elements that are obtained and stored in the array @code{VALUES}:
11440 @multitable @columnfractions .15 .70
11441 @item @code{VALUES(1)} @tab Device ID
11442 @item @code{VALUES(2)} @tab Inode number
11443 @item @code{VALUES(3)} @tab File mode
11444 @item @code{VALUES(4)} @tab Number of links
11445 @item @code{VALUES(5)} @tab Owner's uid
11446 @item @code{VALUES(6)} @tab Owner's gid
11447 @item @code{VALUES(7)} @tab ID of device containing directory entry for file (0 if not available)
11448 @item @code{VALUES(8)} @tab File size (bytes)
11449 @item @code{VALUES(9)} @tab Last access time
11450 @item @code{VALUES(10)} @tab Last modification time
11451 @item @code{VALUES(11)} @tab Last file status change time
11452 @item @code{VALUES(12)} @tab Preferred I/O block size (-1 if not available)
11453 @item @code{VALUES(13)} @tab Number of blocks allocated (-1 if not available)
11456 Not all these elements are relevant on all systems.
11457 If an element is not relevant, it is returned as 0.
11459 This intrinsic is provided in both subroutine and function forms; however,
11460 only one form can be used in any given program unit.
11462 @item @emph{Standard}:
11465 @item @emph{Class}:
11466 Subroutine, function
11468 @item @emph{Syntax}:
11469 @code{CALL STAT(NAME, VALUES [, STATUS])}
11471 @item @emph{Arguments}:
11472 @multitable @columnfractions .15 .70
11473 @item @var{NAME} @tab The type shall be @code{CHARACTER}, of the
11474 default kind and a valid path within the file system.
11475 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
11476 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0
11477 on success and a system specific error code otherwise.
11480 @item @emph{Example}:
11483 INTEGER, DIMENSION(13) :: buff
11486 CALL STAT("/etc/passwd", buff, status)
11488 IF (status == 0) THEN
11489 WRITE (*, FMT="('Device ID:', T30, I19)") buff(1)
11490 WRITE (*, FMT="('Inode number:', T30, I19)") buff(2)
11491 WRITE (*, FMT="('File mode (octal):', T30, O19)") buff(3)
11492 WRITE (*, FMT="('Number of links:', T30, I19)") buff(4)
11493 WRITE (*, FMT="('Owner''s uid:', T30, I19)") buff(5)
11494 WRITE (*, FMT="('Owner''s gid:', T30, I19)") buff(6)
11495 WRITE (*, FMT="('Device where located:', T30, I19)") buff(7)
11496 WRITE (*, FMT="('File size:', T30, I19)") buff(8)
11497 WRITE (*, FMT="('Last access time:', T30, A19)") CTIME(buff(9))
11498 WRITE (*, FMT="('Last modification time', T30, A19)") CTIME(buff(10))
11499 WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11))
11500 WRITE (*, FMT="('Preferred block size:', T30, I19)") buff(12)
11501 WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13)
11506 @item @emph{See also}:
11507 To stat an open file: @ref{FSTAT}, to stat a link: @ref{LSTAT}
11513 @section @code{STORAGE_SIZE} --- Storage size in bits
11514 @fnindex STORAGE_SIZE
11515 @cindex storage size
11518 @item @emph{Description}:
11519 Returns the storage size of argument @var{A} in bits.
11520 @item @emph{Standard}:
11521 Fortran 2008 and later
11522 @item @emph{Class}:
11524 @item @emph{Syntax}:
11525 @code{RESULT = STORAGE_SIZE(A [, KIND])}
11527 @item @emph{Arguments}:
11528 @multitable @columnfractions .15 .70
11529 @item @var{A} @tab Shall be a scalar or array of any type.
11530 @item @var{KIND} @tab (Optional) shall be a scalar integer constant expression.
11533 @item @emph{Return Value}:
11534 The result is a scalar integer with the kind type parameter specified by KIND (or default integer type if KIND is missing). The result value is the size expressed in bits for an element of an array that
11535 has the dynamic type and type parameters of A.
11537 @item @emph{See also}:
11538 @ref{C_SIZEOF}, @ref{SIZEOF}
11544 @section @code{SUM} --- Sum of array elements
11547 @cindex array, add elements
11548 @cindex array, conditionally add elements
11549 @cindex sum array elements
11552 @item @emph{Description}:
11553 Adds the elements of @var{ARRAY} along dimension @var{DIM} if
11554 the corresponding element in @var{MASK} is @code{TRUE}.
11556 @item @emph{Standard}:
11557 Fortran 95 and later
11559 @item @emph{Class}:
11560 Transformational function
11562 @item @emph{Syntax}:
11563 @multitable @columnfractions .80
11564 @item @code{RESULT = SUM(ARRAY[, MASK])}
11565 @item @code{RESULT = SUM(ARRAY, DIM[, MASK])}
11568 @item @emph{Arguments}:
11569 @multitable @columnfractions .15 .70
11570 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER},
11571 @code{REAL} or @code{COMPLEX}.
11572 @item @var{DIM} @tab (Optional) shall be a scalar of type
11573 @code{INTEGER} with a value in the range from 1 to n, where n
11574 equals the rank of @var{ARRAY}.
11575 @item @var{MASK} @tab (Optional) shall be of type @code{LOGICAL}
11576 and either be a scalar or an array of the same shape as @var{ARRAY}.
11579 @item @emph{Return value}:
11580 The result is of the same type as @var{ARRAY}.
11582 If @var{DIM} is absent, a scalar with the sum of all elements in @var{ARRAY}
11583 is returned. Otherwise, an array of rank n-1, where n equals the rank of
11584 @var{ARRAY}, and a shape similar to that of @var{ARRAY} with dimension @var{DIM}
11585 dropped is returned.
11587 @item @emph{Example}:
11590 INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
11591 print *, SUM(x) ! all elements, sum = 15
11592 print *, SUM(x, MASK=MOD(x, 2)==1) ! odd elements, sum = 9
11596 @item @emph{See also}:
11603 @section @code{SYMLNK} --- Create a symbolic link
11605 @cindex file system, create link
11606 @cindex file system, soft link
11609 @item @emph{Description}:
11610 Makes a symbolic link from file @var{PATH1} to @var{PATH2}. A null
11611 character (@code{CHAR(0)}) can be used to mark the end of the names in
11612 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
11613 names are ignored. If the @var{STATUS} argument is supplied, it
11614 contains 0 on success or a nonzero error code upon return; see
11615 @code{symlink(2)}. If the system does not supply @code{symlink(2)},
11616 @code{ENOSYS} is returned.
11618 This intrinsic is provided in both subroutine and function forms;
11619 however, only one form can be used in any given program unit.
11621 @item @emph{Standard}:
11624 @item @emph{Class}:
11625 Subroutine, function
11627 @item @emph{Syntax}:
11628 @multitable @columnfractions .80
11629 @item @code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
11630 @item @code{STATUS = SYMLNK(PATH1, PATH2)}
11633 @item @emph{Arguments}:
11634 @multitable @columnfractions .15 .70
11635 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
11636 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
11637 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
11640 @item @emph{See also}:
11641 @ref{LINK}, @ref{UNLINK}
11648 @section @code{SYSTEM} --- Execute a shell command
11650 @cindex system, system call
11653 @item @emph{Description}:
11654 Passes the command @var{COMMAND} to a shell (see @code{system(3)}). If
11655 argument @var{STATUS} is present, it contains the value returned by
11656 @code{system(3)}, which is presumably 0 if the shell command succeeded.
11657 Note that which shell is used to invoke the command is system-dependent
11658 and environment-dependent.
11660 This intrinsic is provided in both subroutine and function forms;
11661 however, only one form can be used in any given program unit.
11663 @item @emph{Standard}:
11666 @item @emph{Class}:
11667 Subroutine, function
11669 @item @emph{Syntax}:
11670 @multitable @columnfractions .80
11671 @item @code{CALL SYSTEM(COMMAND [, STATUS])}
11672 @item @code{STATUS = SYSTEM(COMMAND)}
11675 @item @emph{Arguments}:
11676 @multitable @columnfractions .15 .70
11677 @item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type.
11678 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
11681 @item @emph{See also}:
11682 @ref{EXECUTE_COMMAND_LINE}, which is part of the Fortran 2008 standard
11683 and should considered in new code for future portability.
11689 @section @code{SYSTEM_CLOCK} --- Time function
11690 @fnindex SYSTEM_CLOCK
11691 @cindex time, clock ticks
11692 @cindex clock ticks
11695 @item @emph{Description}:
11696 Determines the @var{COUNT} of milliseconds of wall clock time since
11697 the Epoch (00:00:00 UTC, January 1, 1970) modulo @var{COUNT_MAX},
11698 @var{COUNT_RATE} determines the number of clock ticks per second.
11699 @var{COUNT_RATE} and @var{COUNT_MAX} are constant and specific to
11700 @command{gfortran}.
11702 If there is no clock, @var{COUNT} is set to @code{-HUGE(COUNT)}, and
11703 @var{COUNT_RATE} and @var{COUNT_MAX} are set to zero
11705 @item @emph{Standard}:
11706 Fortran 95 and later
11708 @item @emph{Class}:
11711 @item @emph{Syntax}:
11712 @code{CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])}
11714 @item @emph{Arguments}:
11715 @multitable @columnfractions .15 .70
11716 @item @var{COUNT} @tab (Optional) shall be a scalar of type default
11717 @code{INTEGER} with @code{INTENT(OUT)}.
11718 @item @var{COUNT_RATE} @tab (Optional) shall be a scalar of type default
11719 @code{INTEGER} with @code{INTENT(OUT)}.
11720 @item @var{COUNT_MAX} @tab (Optional) shall be a scalar of type default
11721 @code{INTEGER} with @code{INTENT(OUT)}.
11724 @item @emph{Example}:
11726 PROGRAM test_system_clock
11727 INTEGER :: count, count_rate, count_max
11728 CALL SYSTEM_CLOCK(count, count_rate, count_max)
11729 WRITE(*,*) count, count_rate, count_max
11733 @item @emph{See also}:
11734 @ref{DATE_AND_TIME}, @ref{CPU_TIME}
11740 @section @code{TAN} --- Tangent function
11743 @cindex trigonometric function, tangent
11747 @item @emph{Description}:
11748 @code{TAN(X)} computes the tangent of @var{X}.
11750 @item @emph{Standard}:
11751 Fortran 77 and later, for a complex argument Fortran 2008 or later
11753 @item @emph{Class}:
11756 @item @emph{Syntax}:
11757 @code{RESULT = TAN(X)}
11759 @item @emph{Arguments}:
11760 @multitable @columnfractions .15 .70
11761 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
11764 @item @emph{Return value}:
11765 The return value has same type and kind as @var{X}.
11767 @item @emph{Example}:
11770 real(8) :: x = 0.165_8
11772 end program test_tan
11775 @item @emph{Specific names}:
11776 @multitable @columnfractions .20 .20 .20 .25
11777 @item Name @tab Argument @tab Return type @tab Standard
11778 @item @code{TAN(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 95 and later
11779 @item @code{DTAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later
11782 @item @emph{See also}:
11789 @section @code{TANH} --- Hyperbolic tangent function
11792 @cindex hyperbolic tangent
11793 @cindex hyperbolic function, tangent
11794 @cindex tangent, hyperbolic
11797 @item @emph{Description}:
11798 @code{TANH(X)} computes the hyperbolic tangent of @var{X}.
11800 @item @emph{Standard}:
11801 Fortran 77 and later, for a complex argument Fortran 2008 or later
11803 @item @emph{Class}:
11806 @item @emph{Syntax}:
11809 @item @emph{Arguments}:
11810 @multitable @columnfractions .15 .70
11811 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
11814 @item @emph{Return value}:
11815 The return value has same type and kind as @var{X}. If @var{X} is
11816 complex, the imaginary part of the result is in radians. If @var{X}
11817 is @code{REAL}, the return value lies in the range
11818 @math{ - 1 \leq tanh(x) \leq 1 }.
11820 @item @emph{Example}:
11823 real(8) :: x = 2.1_8
11825 end program test_tanh
11828 @item @emph{Specific names}:
11829 @multitable @columnfractions .20 .20 .20 .25
11830 @item Name @tab Argument @tab Return type @tab Standard
11831 @item @code{TANH(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 95 and later
11832 @item @code{DTANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later
11835 @item @emph{See also}:
11842 @section @code{THIS_IMAGE} --- Function that returns the cosubscript index of this image
11843 @fnindex THIS_IMAGE
11844 @cindex coarray, THIS_IMAGE
11845 @cindex images, index of this image
11848 @item @emph{Description}:
11849 Returns the cosubscript for this image.
11851 @item @emph{Standard}:
11852 Fortran 2008 and later
11854 @item @emph{Class}:
11855 Transformational function
11857 @item @emph{Syntax}:
11858 @multitable @columnfractions .80
11859 @item @code{RESULT = THIS_IMAGE()}
11860 @item @code{RESULT = THIS_IMAGE(COARRAY [, DIM])}
11863 @item @emph{Arguments}:
11864 @multitable @columnfractions .15 .70
11865 @item @var{COARRAY} @tab Coarray of any type (optional; if @var{DIM}
11866 present, required).
11867 @item @var{DIM} @tab default integer scalar (optional). If present,
11868 @var{DIM} shall be between one and the corank of @var{COARRAY}.
11872 @item @emph{Return value}:
11873 Default integer. If @var{COARRAY} is not present, it is scalar and its value
11874 is the index of the invoking image. Otherwise, if @var{DIM} is not present,
11875 a rank-1 array with corank elements is returned, containing the cosubscripts
11876 for @var{COARRAY} specifying the invoking image. If @var{DIM} is present,
11877 a scalar is returned, with the value of the @var{DIM} element of
11878 @code{THIS_IMAGE(COARRAY)}.
11880 @item @emph{Example}:
11882 INTEGER :: value[*]
11884 value = THIS_IMAGE()
11886 IF (THIS_IMAGE() == 1) THEN
11887 DO i = 1, NUM_IMAGES()
11888 WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
11893 @item @emph{See also}:
11894 @ref{NUM_IMAGES}, @ref{IMAGE_INDEX}
11900 @section @code{TIME} --- Time function
11902 @cindex time, current
11903 @cindex current time
11906 @item @emph{Description}:
11907 Returns the current time encoded as an integer (in the manner of the
11908 UNIX function @code{time(3)}). This value is suitable for passing to
11909 @code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}.
11911 This intrinsic is not fully portable, such as to systems with 32-bit
11912 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
11913 the values returned by this intrinsic might be, or become, negative, or
11914 numerically less than previous values, during a single run of the
11917 See @ref{TIME8}, for information on a similar intrinsic that might be
11918 portable to more GNU Fortran implementations, though to fewer Fortran
11921 @item @emph{Standard}:
11924 @item @emph{Class}:
11927 @item @emph{Syntax}:
11928 @code{RESULT = TIME()}
11930 @item @emph{Return value}:
11931 The return value is a scalar of type @code{INTEGER(4)}.
11933 @item @emph{See also}:
11934 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
11941 @section @code{TIME8} --- Time function (64-bit)
11943 @cindex time, current
11944 @cindex current time
11947 @item @emph{Description}:
11948 Returns the current time encoded as an integer (in the manner of the
11949 UNIX function @code{time(3)}). This value is suitable for passing to
11950 @code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}.
11952 @emph{Warning:} this intrinsic does not increase the range of the timing
11953 values over that returned by @code{time(3)}. On a system with a 32-bit
11954 @code{time(3)}, @code{TIME8()} will return a 32-bit value, even though
11955 it is converted to a 64-bit @code{INTEGER(8)} value. That means
11956 overflows of the 32-bit value can still occur. Therefore, the values
11957 returned by this intrinsic might be or become negative or numerically
11958 less than previous values during a single run of the compiled program.
11960 @item @emph{Standard}:
11963 @item @emph{Class}:
11966 @item @emph{Syntax}:
11967 @code{RESULT = TIME8()}
11969 @item @emph{Return value}:
11970 The return value is a scalar of type @code{INTEGER(8)}.
11972 @item @emph{See also}:
11973 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK8}, @ref{TIME}
11980 @section @code{TINY} --- Smallest positive number of a real kind
11982 @cindex limits, smallest number
11983 @cindex model representation, smallest number
11986 @item @emph{Description}:
11987 @code{TINY(X)} returns the smallest positive (non zero) number
11988 in the model of the type of @code{X}.
11990 @item @emph{Standard}:
11991 Fortran 95 and later
11993 @item @emph{Class}:
11996 @item @emph{Syntax}:
11997 @code{RESULT = TINY(X)}
11999 @item @emph{Arguments}:
12000 @multitable @columnfractions .15 .70
12001 @item @var{X} @tab Shall be of type @code{REAL}.
12004 @item @emph{Return value}:
12005 The return value is of the same type and kind as @var{X}
12007 @item @emph{Example}:
12008 See @code{HUGE} for an example.
12014 @section @code{TRAILZ} --- Number of trailing zero bits of an integer
12019 @item @emph{Description}:
12020 @code{TRAILZ} returns the number of trailing zero bits of an integer.
12022 @item @emph{Standard}:
12023 Fortran 2008 and later
12025 @item @emph{Class}:
12028 @item @emph{Syntax}:
12029 @code{RESULT = TRAILZ(I)}
12031 @item @emph{Arguments}:
12032 @multitable @columnfractions .15 .70
12033 @item @var{I} @tab Shall be of type @code{INTEGER}.
12036 @item @emph{Return value}:
12037 The type of the return value is the default @code{INTEGER}.
12038 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
12040 @item @emph{Example}:
12042 PROGRAM test_trailz
12043 WRITE (*,*) TRAILZ(8) ! prints 3
12047 @item @emph{See also}:
12048 @ref{BIT_SIZE}, @ref{LEADZ}, @ref{POPPAR}, @ref{POPCNT}
12054 @section @code{TRANSFER} --- Transfer bit patterns
12060 @item @emph{Description}:
12061 Interprets the bitwise representation of @var{SOURCE} in memory as if it
12062 is the representation of a variable or array of the same type and type
12063 parameters as @var{MOLD}.
12065 This is approximately equivalent to the C concept of @emph{casting} one
12068 @item @emph{Standard}:
12069 Fortran 95 and later
12071 @item @emph{Class}:
12072 Transformational function
12074 @item @emph{Syntax}:
12075 @code{RESULT = TRANSFER(SOURCE, MOLD[, SIZE])}
12077 @item @emph{Arguments}:
12078 @multitable @columnfractions .15 .70
12079 @item @var{SOURCE} @tab Shall be a scalar or an array of any type.
12080 @item @var{MOLD} @tab Shall be a scalar or an array of any type.
12081 @item @var{SIZE} @tab (Optional) shall be a scalar of type
12085 @item @emph{Return value}:
12086 The result has the same type as @var{MOLD}, with the bit level
12087 representation of @var{SOURCE}. If @var{SIZE} is present, the result is
12088 a one-dimensional array of length @var{SIZE}. If @var{SIZE} is absent
12089 but @var{MOLD} is an array (of any size or shape), the result is a one-
12090 dimensional array of the minimum length needed to contain the entirety
12091 of the bitwise representation of @var{SOURCE}. If @var{SIZE} is absent
12092 and @var{MOLD} is a scalar, the result is a scalar.
12094 If the bitwise representation of the result is longer than that of
12095 @var{SOURCE}, then the leading bits of the result correspond to those of
12096 @var{SOURCE} and any trailing bits are filled arbitrarily.
12098 When the resulting bit representation does not correspond to a valid
12099 representation of a variable of the same type as @var{MOLD}, the results
12100 are undefined, and subsequent operations on the result cannot be
12101 guaranteed to produce sensible behavior. For example, it is possible to
12102 create @code{LOGICAL} variables for which @code{@var{VAR}} and
12103 @code{.NOT.@var{VAR}} both appear to be true.
12105 @item @emph{Example}:
12107 PROGRAM test_transfer
12108 integer :: x = 2143289344
12109 print *, transfer(x, 1.0) ! prints "NaN" on i686
12117 @section @code{TRANSPOSE} --- Transpose an array of rank two
12119 @cindex array, transpose
12120 @cindex matrix, transpose
12124 @item @emph{Description}:
12125 Transpose an array of rank two. Element (i, j) of the result has the value
12126 @code{MATRIX(j, i)}, for all i, j.
12128 @item @emph{Standard}:
12129 Fortran 95 and later
12131 @item @emph{Class}:
12132 Transformational function
12134 @item @emph{Syntax}:
12135 @code{RESULT = TRANSPOSE(MATRIX)}
12137 @item @emph{Arguments}:
12138 @multitable @columnfractions .15 .70
12139 @item @var{MATRIX} @tab Shall be an array of any type and have a rank of two.
12142 @item @emph{Return value}:
12143 The result has the same type as @var{MATRIX}, and has shape
12144 @code{(/ m, n /)} if @var{MATRIX} has shape @code{(/ n, m /)}.
12150 @section @code{TRIM} --- Remove trailing blank characters of a string
12152 @cindex string, remove trailing whitespace
12155 @item @emph{Description}:
12156 Removes trailing blank characters of a string.
12158 @item @emph{Standard}:
12159 Fortran 95 and later
12161 @item @emph{Class}:
12162 Transformational function
12164 @item @emph{Syntax}:
12165 @code{RESULT = TRIM(STRING)}
12167 @item @emph{Arguments}:
12168 @multitable @columnfractions .15 .70
12169 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}.
12172 @item @emph{Return value}:
12173 A scalar of type @code{CHARACTER} which length is that of @var{STRING}
12174 less the number of trailing blanks.
12176 @item @emph{Example}:
12179 CHARACTER(len=10), PARAMETER :: s = "GFORTRAN "
12180 WRITE(*,*) LEN(s), LEN(TRIM(s)) ! "10 8", with/without trailing blanks
12184 @item @emph{See also}:
12185 @ref{ADJUSTL}, @ref{ADJUSTR}
12191 @section @code{TTYNAM} --- Get the name of a terminal device.
12193 @cindex system, terminal
12196 @item @emph{Description}:
12197 Get the name of a terminal device. For more information,
12198 see @code{ttyname(3)}.
12200 This intrinsic is provided in both subroutine and function forms;
12201 however, only one form can be used in any given program unit.
12203 @item @emph{Standard}:
12206 @item @emph{Class}:
12207 Subroutine, function
12209 @item @emph{Syntax}:
12210 @multitable @columnfractions .80
12211 @item @code{CALL TTYNAM(UNIT, NAME)}
12212 @item @code{NAME = TTYNAM(UNIT)}
12215 @item @emph{Arguments}:
12216 @multitable @columnfractions .15 .70
12217 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
12218 @item @var{NAME} @tab Shall be of type @code{CHARACTER}.
12221 @item @emph{Example}:
12223 PROGRAM test_ttynam
12226 IF (isatty(unit=unit)) write(*,*) ttynam(unit)
12231 @item @emph{See also}:
12238 @section @code{UBOUND} --- Upper dimension bounds of an array
12240 @cindex array, upper bound
12243 @item @emph{Description}:
12244 Returns the upper bounds of an array, or a single upper bound
12245 along the @var{DIM} dimension.
12246 @item @emph{Standard}:
12247 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
12249 @item @emph{Class}:
12252 @item @emph{Syntax}:
12253 @code{RESULT = UBOUND(ARRAY [, DIM [, KIND]])}
12255 @item @emph{Arguments}:
12256 @multitable @columnfractions .15 .70
12257 @item @var{ARRAY} @tab Shall be an array, of any type.
12258 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
12259 @item @var{KIND}@tab (Optional) An @code{INTEGER} initialization
12260 expression indicating the kind parameter of the result.
12263 @item @emph{Return value}:
12264 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
12265 @var{KIND} is absent, the return value is of default integer kind.
12266 If @var{DIM} is absent, the result is an array of the upper bounds of
12267 @var{ARRAY}. If @var{DIM} is present, the result is a scalar
12268 corresponding to the upper bound of the array along that dimension. If
12269 @var{ARRAY} is an expression rather than a whole array or array
12270 structure component, or if it has a zero extent along the relevant
12271 dimension, the upper bound is taken to be the number of elements along
12272 the relevant dimension.
12274 @item @emph{See also}:
12275 @ref{LBOUND}, @ref{LCOBOUND}
12281 @section @code{UCOBOUND} --- Upper codimension bounds of an array
12283 @cindex coarray, upper bound
12286 @item @emph{Description}:
12287 Returns the upper cobounds of a coarray, or a single upper cobound
12288 along the @var{DIM} codimension.
12289 @item @emph{Standard}:
12290 Fortran 2008 and later
12292 @item @emph{Class}:
12295 @item @emph{Syntax}:
12296 @code{RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])}
12298 @item @emph{Arguments}:
12299 @multitable @columnfractions .15 .70
12300 @item @var{ARRAY} @tab Shall be an coarray, of any type.
12301 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
12302 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
12303 expression indicating the kind parameter of the result.
12306 @item @emph{Return value}:
12307 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
12308 @var{KIND} is absent, the return value is of default integer kind.
12309 If @var{DIM} is absent, the result is an array of the lower cobounds of
12310 @var{COARRAY}. If @var{DIM} is present, the result is a scalar
12311 corresponding to the lower cobound of the array along that codimension.
12313 @item @emph{See also}:
12314 @ref{LCOBOUND}, @ref{LBOUND}
12320 @section @code{UMASK} --- Set the file creation mask
12322 @cindex file system, file creation mask
12325 @item @emph{Description}:
12326 Sets the file creation mask to @var{MASK}. If called as a function, it
12327 returns the old value. If called as a subroutine and argument @var{OLD}
12328 if it is supplied, it is set to the old value. See @code{umask(2)}.
12330 @item @emph{Standard}:
12333 @item @emph{Class}:
12334 Subroutine, function
12336 @item @emph{Syntax}:
12337 @code{CALL UMASK(MASK [, OLD])}
12338 @code{OLD = UMASK(MASK)}
12340 @item @emph{Arguments}:
12341 @multitable @columnfractions .15 .70
12342 @item @var{MASK} @tab Shall be a scalar of type @code{INTEGER}.
12343 @item @var{OLD} @tab (Optional) Shall be a scalar of type
12352 @section @code{UNLINK} --- Remove a file from the file system
12354 @cindex file system, remove file
12357 @item @emph{Description}:
12358 Unlinks the file @var{PATH}. A null character (@code{CHAR(0)}) can be
12359 used to mark the end of the name in @var{PATH}; otherwise, trailing
12360 blanks in the file name are ignored. If the @var{STATUS} argument is
12361 supplied, it contains 0 on success or a nonzero error code upon return;
12362 see @code{unlink(2)}.
12364 This intrinsic is provided in both subroutine and function forms;
12365 however, only one form can be used in any given program unit.
12367 @item @emph{Standard}:
12370 @item @emph{Class}:
12371 Subroutine, function
12373 @item @emph{Syntax}:
12374 @multitable @columnfractions .80
12375 @item @code{CALL UNLINK(PATH [, STATUS])}
12376 @item @code{STATUS = UNLINK(PATH)}
12379 @item @emph{Arguments}:
12380 @multitable @columnfractions .15 .70
12381 @item @var{PATH} @tab Shall be of default @code{CHARACTER} type.
12382 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
12385 @item @emph{See also}:
12386 @ref{LINK}, @ref{SYMLNK}
12392 @section @code{UNPACK} --- Unpack an array of rank one into an array
12394 @cindex array, unpacking
12395 @cindex array, increase dimension
12396 @cindex array, scatter elements
12399 @item @emph{Description}:
12400 Store the elements of @var{VECTOR} in an array of higher rank.
12402 @item @emph{Standard}:
12403 Fortran 95 and later
12405 @item @emph{Class}:
12406 Transformational function
12408 @item @emph{Syntax}:
12409 @code{RESULT = UNPACK(VECTOR, MASK, FIELD)}
12411 @item @emph{Arguments}:
12412 @multitable @columnfractions .15 .70
12413 @item @var{VECTOR} @tab Shall be an array of any type and rank one. It
12414 shall have at least as many elements as @var{MASK} has @code{TRUE} values.
12415 @item @var{MASK} @tab Shall be an array of type @code{LOGICAL}.
12416 @item @var{FIELD} @tab Shall be of the same type as @var{VECTOR} and have
12417 the same shape as @var{MASK}.
12420 @item @emph{Return value}:
12421 The resulting array corresponds to @var{FIELD} with @code{TRUE} elements
12422 of @var{MASK} replaced by values from @var{VECTOR} in array element order.
12424 @item @emph{Example}:
12426 PROGRAM test_unpack
12427 integer :: vector(2) = (/1,1/)
12428 logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
12429 integer :: field(2,2) = 0, unity(2,2)
12431 ! result: unity matrix
12432 unity = unpack(vector, reshape(mask, (/2,2/)), field)
12436 @item @emph{See also}:
12437 @ref{PACK}, @ref{SPREAD}
12443 @section @code{VERIFY} --- Scan a string for the absence of a set of characters
12445 @cindex string, find missing set
12448 @item @emph{Description}:
12449 Verifies that all the characters in a @var{SET} are present in a @var{STRING}.
12451 If @var{BACK} is either absent or equals @code{FALSE}, this function
12452 returns the position of the leftmost character of @var{STRING} that is
12453 not in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position
12454 is returned. If all characters of @var{SET} are found in @var{STRING}, the
12457 @item @emph{Standard}:
12458 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
12460 @item @emph{Class}:
12463 @item @emph{Syntax}:
12464 @code{RESULT = VERIFY(STRING, SET[, BACK [, KIND]])}
12466 @item @emph{Arguments}:
12467 @multitable @columnfractions .15 .70
12468 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
12469 @item @var{SET} @tab Shall be of type @code{CHARACTER}.
12470 @item @var{BACK} @tab (Optional) shall be of type @code{LOGICAL}.
12471 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
12472 expression indicating the kind parameter of the result.
12475 @item @emph{Return value}:
12476 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
12477 @var{KIND} is absent, the return value is of default integer kind.
12479 @item @emph{Example}:
12481 PROGRAM test_verify
12482 WRITE(*,*) VERIFY("FORTRAN", "AO") ! 1, found 'F'
12483 WRITE(*,*) VERIFY("FORTRAN", "FOO") ! 3, found 'R'
12484 WRITE(*,*) VERIFY("FORTRAN", "C++") ! 1, found 'F'
12485 WRITE(*,*) VERIFY("FORTRAN", "C++", .TRUE.) ! 7, found 'N'
12486 WRITE(*,*) VERIFY("FORTRAN", "FORTRAN") ! 0' found none
12490 @item @emph{See also}:
12491 @ref{SCAN}, @ref{INDEX intrinsic}
12497 @section @code{XOR} --- Bitwise logical exclusive OR
12499 @cindex bitwise logical exclusive or
12500 @cindex logical exclusive or, bitwise
12503 @item @emph{Description}:
12504 Bitwise logical exclusive or.
12506 This intrinsic routine is provided for backwards compatibility with
12507 GNU Fortran 77. For integer arguments, programmers should consider
12508 the use of the @ref{IEOR} intrinsic and for logical arguments the
12509 @code{.NEQV.} operator, which are both defined by the Fortran standard.
12511 @item @emph{Standard}:
12514 @item @emph{Class}:
12517 @item @emph{Syntax}:
12518 @code{RESULT = XOR(I, J)}
12520 @item @emph{Arguments}:
12521 @multitable @columnfractions .15 .70
12522 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
12523 type or a scalar @code{LOGICAL} type.
12524 @item @var{J} @tab The type shall be the same as the type of @var{I}.
12527 @item @emph{Return value}:
12528 The return type is either a scalar @code{INTEGER} or a scalar
12529 @code{LOGICAL}. If the kind type parameters differ, then the
12530 smaller kind type is implicitly converted to larger kind, and the
12531 return has the larger kind.
12533 @item @emph{Example}:
12536 LOGICAL :: T = .TRUE., F = .FALSE.
12538 DATA a / Z'F' /, b / Z'3' /
12540 WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)
12541 WRITE (*,*) XOR(a, b)
12545 @item @emph{See also}:
12546 Fortran 95 elemental function: @ref{IEOR}
12551 @node Intrinsic Modules
12552 @chapter Intrinsic Modules
12553 @cindex intrinsic Modules
12556 * ISO_FORTRAN_ENV::
12558 * OpenMP Modules OMP_LIB and OMP_LIB_KINDS::
12561 @node ISO_FORTRAN_ENV
12562 @section @code{ISO_FORTRAN_ENV}
12564 @item @emph{Standard}:
12565 Fortran 2003 and later, except when otherwise noted
12568 The @code{ISO_FORTRAN_ENV} module provides the following scalar default-integer
12572 @item @code{ATOMIC_INT_KIND}:
12573 Default-kind integer constant to be used as kind parameter when defining
12574 integer variables used in atomic operations. (Fortran 2008 or later.)
12576 @item @code{ATOMIC_LOGICAL_KIND}:
12577 Default-kind integer constant to be used as kind parameter when defining
12578 logical variables used in atomic operations. (Fortran 2008 or later.)
12580 @item @code{CHARACTER_STORAGE_SIZE}:
12581 Size in bits of the character storage unit.
12583 @item @code{ERROR_UNIT}:
12584 Identifies the preconnected unit used for error reporting.
12586 @item @code{FILE_STORAGE_SIZE}:
12587 Size in bits of the file-storage unit.
12589 @item @code{INPUT_UNIT}:
12590 Identifies the preconnected unit identified by the asterisk
12591 (@code{*}) in @code{READ} statement.
12593 @item @code{INT8}, @code{INT16}, @code{INT32}, @code{INT64}:
12594 Kind type parameters to specify an INTEGER type with a storage
12595 size of 16, 32, and 64 bits. It is negative if a target platform
12596 does not support the particular kind. (Fortran 2008 or later.)
12598 @item @code{IOSTAT_END}:
12599 The value assigned to the variable passed to the IOSTAT= specifier of
12600 an input/output statement if an end-of-file condition occurred.
12602 @item @code{IOSTAT_EOR}:
12603 The value assigned to the variable passed to the IOSTAT= specifier of
12604 an input/output statement if an end-of-record condition occurred.
12606 @item @code{IOSTAT_INQUIRE_INTERNAL_UNIT}:
12607 Scalar default-integer constant, used by @code{INQUIRE} for the
12608 IOSTAT= specifier to denote an that a unit number identifies an
12609 internal unit. (Fortran 2008 or later.)
12611 @item @code{NUMERIC_STORAGE_SIZE}:
12612 The size in bits of the numeric storage unit.
12614 @item @code{OUTPUT_UNIT}:
12615 Identifies the preconnected unit identified by the asterisk
12616 (@code{*}) in @code{WRITE} statement.
12618 @item @code{REAL32}, @code{REAL64}, @code{REAL128}:
12619 Kind type parameters to specify a REAL type with a storage
12620 size of 32, 64, and 128 bits. It is negative if a target platform
12621 does not support the particular kind. (Fortran 2008 or later.)
12623 @item @code{STAT_LOCKED}:
12624 Scalar default-integer constant used as STAT= return value by @code{LOCK} to
12625 denote that the lock variable is locked by the executing image. (Fortran 2008
12628 @item @code{STAT_LOCKED_OTHER_IMAGE}:
12629 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
12630 denote that the lock variable is locked by another image. (Fortran 2008 or
12633 @item @code{STAT_STOPPED_IMAGE}:
12634 Positive, scalar default-integer constant used as STAT= return value if the
12635 argument in the statement requires synchronisation with an image, which has
12636 initiated the termination of the execution. (Fortran 2008 or later.)
12638 @item @code{STAT_UNLOCKED}:
12639 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
12640 denote that the lock variable is unlocked. (Fortran 2008 or later.)
12645 @node ISO_C_BINDING
12646 @section @code{ISO_C_BINDING}
12648 @item @emph{Standard}:
12649 Fortran 2003 and later, GNU extensions
12652 The following intrinsic procedures are provided by the module; their
12653 definition can be found in the section Intrinsic Procedures of this
12657 @item @code{C_ASSOCIATED}
12658 @item @code{C_F_POINTER}
12659 @item @code{C_F_PROCPOINTER}
12660 @item @code{C_FUNLOC}
12663 @c TODO: Vertical spacing between C_FUNLOC and C_LOC wrong in PDF,
12664 @c don't really know why.
12666 The @code{ISO_C_BINDING} module provides the following named constants of
12667 type default integer, which can be used as KIND type parameters.
12669 In addition to the integer named constants required by the Fortran 2003
12670 standard, GNU Fortran provides as an extension named constants for the
12671 128-bit integer types supported by the C compiler: @code{C_INT128_T,
12672 C_INT_LEAST128_T, C_INT_FAST128_T}.
12674 @multitable @columnfractions .15 .35 .35 .35
12675 @item Fortran Type @tab Named constant @tab C type @tab Extension
12676 @item @code{INTEGER}@tab @code{C_INT} @tab @code{int}
12677 @item @code{INTEGER}@tab @code{C_SHORT} @tab @code{short int}
12678 @item @code{INTEGER}@tab @code{C_LONG} @tab @code{long int}
12679 @item @code{INTEGER}@tab @code{C_LONG_LONG} @tab @code{long long int}
12680 @item @code{INTEGER}@tab @code{C_SIGNED_CHAR} @tab @code{signed char}/@code{unsigned char}
12681 @item @code{INTEGER}@tab @code{C_SIZE_T} @tab @code{size_t}
12682 @item @code{INTEGER}@tab @code{C_INT8_T} @tab @code{int8_t}
12683 @item @code{INTEGER}@tab @code{C_INT16_T} @tab @code{int16_t}
12684 @item @code{INTEGER}@tab @code{C_INT32_T} @tab @code{int32_t}
12685 @item @code{INTEGER}@tab @code{C_INT64_T} @tab @code{int64_t}
12686 @item @code{INTEGER}@tab @code{C_INT128_T} @tab @code{int128_t} @tab Ext.
12687 @item @code{INTEGER}@tab @code{C_INT_LEAST8_T} @tab @code{int_least8_t}
12688 @item @code{INTEGER}@tab @code{C_INT_LEAST16_T} @tab @code{int_least16_t}
12689 @item @code{INTEGER}@tab @code{C_INT_LEAST32_T} @tab @code{int_least32_t}
12690 @item @code{INTEGER}@tab @code{C_INT_LEAST64_T} @tab @code{int_least64_t}
12691 @item @code{INTEGER}@tab @code{C_INT_LEAST128_T}@tab @code{int_least128_t} @tab Ext.
12692 @item @code{INTEGER}@tab @code{C_INT_FAST8_T} @tab @code{int_fast8_t}
12693 @item @code{INTEGER}@tab @code{C_INT_FAST16_T} @tab @code{int_fast16_t}
12694 @item @code{INTEGER}@tab @code{C_INT_FAST32_T} @tab @code{int_fast32_t}
12695 @item @code{INTEGER}@tab @code{C_INT_FAST64_T} @tab @code{int_fast64_t}
12696 @item @code{INTEGER}@tab @code{C_INT_FAST128_T} @tab @code{int_fast128_t} @tab Ext.
12697 @item @code{INTEGER}@tab @code{C_INTMAX_T} @tab @code{intmax_t}
12698 @item @code{INTEGER}@tab @code{C_INTPTR_T} @tab @code{intptr_t}
12699 @item @code{REAL} @tab @code{C_FLOAT} @tab @code{float}
12700 @item @code{REAL} @tab @code{C_DOUBLE} @tab @code{double}
12701 @item @code{REAL} @tab @code{C_LONG_DOUBLE} @tab @code{long double}
12702 @item @code{COMPLEX}@tab @code{C_FLOAT_COMPLEX} @tab @code{float _Complex}
12703 @item @code{COMPLEX}@tab @code{C_DOUBLE_COMPLEX}@tab @code{double _Complex}
12704 @item @code{COMPLEX}@tab @code{C_LONG_DOUBLE_COMPLEX}@tab @code{long double _Complex}
12705 @item @code{LOGICAL}@tab @code{C_BOOL} @tab @code{_Bool}
12706 @item @code{CHARACTER}@tab @code{C_CHAR} @tab @code{char}
12709 Additionally, the following parameters of type @code{CHARACTER(KIND=C_CHAR)}
12712 @multitable @columnfractions .20 .45 .15
12713 @item Name @tab C definition @tab Value
12714 @item @code{C_NULL_CHAR} @tab null character @tab @code{'\0'}
12715 @item @code{C_ALERT} @tab alert @tab @code{'\a'}
12716 @item @code{C_BACKSPACE} @tab backspace @tab @code{'\b'}
12717 @item @code{C_FORM_FEED} @tab form feed @tab @code{'\f'}
12718 @item @code{C_NEW_LINE} @tab new line @tab @code{'\n'}
12719 @item @code{C_CARRIAGE_RETURN} @tab carriage return @tab @code{'\r'}
12720 @item @code{C_HORIZONTAL_TAB} @tab horizontal tab @tab @code{'\t'}
12721 @item @code{C_VERTICAL_TAB} @tab vertical tab @tab @code{'\v'}
12724 Moreover, the following two named constants are defined:
12726 @multitable @columnfractions .20 .80
12727 @item Name @tab Type
12728 @item @code{C_NULL_PTR} @tab @code{C_PTR}
12729 @item @code{C_NULL_FUNPTR} @tab @code{C_FUNPTR}
12732 Both are equivalent to the value @code{NULL} in C.
12734 @node OpenMP Modules OMP_LIB and OMP_LIB_KINDS
12735 @section OpenMP Modules @code{OMP_LIB} and @code{OMP_LIB_KINDS}
12737 @item @emph{Standard}:
12738 OpenMP Application Program Interface v3.0
12742 The OpenMP Fortran runtime library routines are provided both in
12743 a form of two Fortran 90 modules, named @code{OMP_LIB} and
12744 @code{OMP_LIB_KINDS}, and in a form of a Fortran @code{include} file named
12745 @file{omp_lib.h}. The procedures provided by @code{OMP_LIB} can be found
12746 in the @ref{Top,,Introduction,libgomp,GNU OpenMP runtime library} manual,
12747 the named constants defined in the @code{OMP_LIB_KINDS} module are listed
12750 For details refer to the actual
12751 @uref{http://www.openmp.org/mp-documents/spec30.pdf,
12752 OpenMP Application Program Interface v3.0}.
12754 @code{OMP_LIB_KINDS} provides the following scalar default-integer
12758 @item @code{omp_integer_kind}
12759 @item @code{omp_logical_kind}
12760 @item @code{omp_lock_kind}
12761 @item @code{omp_nest_lock_kind}
12762 @item @code{omp_sched_kind}