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{COMPILER_VERSION}: COMPILER_VERSION, Compiler version string
90 * @code{COMPILER_OPTIONS}: COMPILER_OPTIONS, Options passed to the compiler
91 * @code{CONJG}: CONJG, Complex conjugate function
92 * @code{COS}: COS, Cosine function
93 * @code{COSH}: COSH, Hyperbolic cosine function
94 * @code{COUNT}: COUNT, Count occurrences of TRUE in an array
95 * @code{CPU_TIME}: CPU_TIME, CPU time subroutine
96 * @code{CSHIFT}: CSHIFT, Circular shift elements of an array
97 * @code{CTIME}: CTIME, Subroutine (or function) to convert a time into a string
98 * @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine
99 * @code{DBLE}: DBLE, Double precision conversion function
100 * @code{DCMPLX}: DCMPLX, Double complex conversion function
101 * @code{DIGITS}: DIGITS, Significant digits function
102 * @code{DIM}: DIM, Positive difference
103 * @code{DOT_PRODUCT}: DOT_PRODUCT, Dot product function
104 * @code{DPROD}: DPROD, Double product function
105 * @code{DREAL}: DREAL, Double real part function
106 * @code{DSHIFTL}: DSHIFTL, Combined left shift
107 * @code{DSHIFTR}: DSHIFTR, Combined right shift
108 * @code{DTIME}: DTIME, Execution time subroutine (or function)
109 * @code{EOSHIFT}: EOSHIFT, End-off shift elements of an array
110 * @code{EPSILON}: EPSILON, Epsilon function
111 * @code{ERF}: ERF, Error function
112 * @code{ERFC}: ERFC, Complementary error function
113 * @code{ERFC_SCALED}: ERFC_SCALED, Exponentially-scaled complementary error function
114 * @code{ETIME}: ETIME, Execution time subroutine (or function)
115 * @code{EXECUTE_COMMAND_LINE}: EXECUTE_COMMAND_LINE, Execute a shell command
116 * @code{EXIT}: EXIT, Exit the program with status.
117 * @code{EXP}: EXP, Exponential function
118 * @code{EXPONENT}: EXPONENT, Exponent function
119 * @code{EXTENDS_TYPE_OF}: EXTENDS_TYPE_OF, Query dynamic type for extension
120 * @code{FDATE}: FDATE, Subroutine (or function) to get the current time as a string
121 * @code{FGET}: FGET, Read a single character in stream mode from stdin
122 * @code{FGETC}: FGETC, Read a single character in stream mode
123 * @code{FLOOR}: FLOOR, Integer floor function
124 * @code{FLUSH}: FLUSH, Flush I/O unit(s)
125 * @code{FNUM}: FNUM, File number function
126 * @code{FPUT}: FPUT, Write a single character in stream mode to stdout
127 * @code{FPUTC}: FPUTC, Write a single character in stream mode
128 * @code{FRACTION}: FRACTION, Fractional part of the model representation
129 * @code{FREE}: FREE, Memory de-allocation subroutine
130 * @code{FSEEK}: FSEEK, Low level file positioning subroutine
131 * @code{FSTAT}: FSTAT, Get file status
132 * @code{FTELL}: FTELL, Current stream position
133 * @code{GAMMA}: GAMMA, Gamma function
134 * @code{GERROR}: GERROR, Get last system error message
135 * @code{GETARG}: GETARG, Get command line arguments
136 * @code{GET_COMMAND}: GET_COMMAND, Get the entire command line
137 * @code{GET_COMMAND_ARGUMENT}: GET_COMMAND_ARGUMENT, Get command line arguments
138 * @code{GETCWD}: GETCWD, Get current working directory
139 * @code{GETENV}: GETENV, Get an environmental variable
140 * @code{GET_ENVIRONMENT_VARIABLE}: GET_ENVIRONMENT_VARIABLE, Get an environmental variable
141 * @code{GETGID}: GETGID, Group ID function
142 * @code{GETLOG}: GETLOG, Get login name
143 * @code{GETPID}: GETPID, Process ID function
144 * @code{GETUID}: GETUID, User ID function
145 * @code{GMTIME}: GMTIME, Convert time to GMT info
146 * @code{HOSTNM}: HOSTNM, Get system host name
147 * @code{HUGE}: HUGE, Largest number of a kind
148 * @code{HYPOT}: HYPOT, Euclidean distance function
149 * @code{IACHAR}: IACHAR, Code in @acronym{ASCII} collating sequence
150 * @code{IALL}: IALL, Bitwise AND of array elements
151 * @code{IAND}: IAND, Bitwise logical and
152 * @code{IANY}: IANY, Bitwise OR of array elements
153 * @code{IARGC}: IARGC, Get the number of command line arguments
154 * @code{IBCLR}: IBCLR, Clear bit
155 * @code{IBITS}: IBITS, Bit extraction
156 * @code{IBSET}: IBSET, Set bit
157 * @code{ICHAR}: ICHAR, Character-to-integer conversion function
158 * @code{IDATE}: IDATE, Current local time (day/month/year)
159 * @code{IEOR}: IEOR, Bitwise logical exclusive or
160 * @code{IERRNO}: IERRNO, Function to get the last system error number
161 * @code{IMAGE_INDEX}: IMAGE_INDEX, Cosubscript to image index conversion
162 * @code{INDEX}: INDEX intrinsic, Position of a substring within a string
163 * @code{INT}: INT, Convert to integer type
164 * @code{INT2}: INT2, Convert to 16-bit integer type
165 * @code{INT8}: INT8, Convert to 64-bit integer type
166 * @code{IOR}: IOR, Bitwise logical or
167 * @code{IPARITY}: IPARITY, Bitwise XOR of array elements
168 * @code{IRAND}: IRAND, Integer pseudo-random number
169 * @code{IS_IOSTAT_END}: IS_IOSTAT_END, Test for end-of-file value
170 * @code{IS_IOSTAT_EOR}: IS_IOSTAT_EOR, Test for end-of-record value
171 * @code{ISATTY}: ISATTY, Whether a unit is a terminal device
172 * @code{ISHFT}: ISHFT, Shift bits
173 * @code{ISHFTC}: ISHFTC, Shift bits circularly
174 * @code{ISNAN}: ISNAN, Tests for a NaN
175 * @code{ITIME}: ITIME, Current local time (hour/minutes/seconds)
176 * @code{KILL}: KILL, Send a signal to a process
177 * @code{KIND}: KIND, Kind of an entity
178 * @code{LBOUND}: LBOUND, Lower dimension bounds of an array
179 * @code{LCOBOUND}: LCOBOUND, Lower codimension bounds of an array
180 * @code{LEADZ}: LEADZ, Number of leading zero bits of an integer
181 * @code{LEN}: LEN, Length of a character entity
182 * @code{LEN_TRIM}: LEN_TRIM, Length of a character entity without trailing blank characters
183 * @code{LGE}: LGE, Lexical greater than or equal
184 * @code{LGT}: LGT, Lexical greater than
185 * @code{LINK}: LINK, Create a hard link
186 * @code{LLE}: LLE, Lexical less than or equal
187 * @code{LLT}: LLT, Lexical less than
188 * @code{LNBLNK}: LNBLNK, Index of the last non-blank character in a string
189 * @code{LOC}: LOC, Returns the address of a variable
190 * @code{LOG}: LOG, Logarithm function
191 * @code{LOG10}: LOG10, Base 10 logarithm function
192 * @code{LOG_GAMMA}: LOG_GAMMA, Logarithm of the Gamma function
193 * @code{LOGICAL}: LOGICAL, Convert to logical type
194 * @code{LONG}: LONG, Convert to integer type
195 * @code{LSHIFT}: LSHIFT, Left shift bits
196 * @code{LSTAT}: LSTAT, Get file status
197 * @code{LTIME}: LTIME, Convert time to local time info
198 * @code{MALLOC}: MALLOC, Dynamic memory allocation function
199 * @code{MASKL}: MASKL, Left justified mask
200 * @code{MASKR}: MASKR, Right justified mask
201 * @code{MATMUL}: MATMUL, matrix multiplication
202 * @code{MAX}: MAX, Maximum value of an argument list
203 * @code{MAXEXPONENT}: MAXEXPONENT, Maximum exponent of a real kind
204 * @code{MAXLOC}: MAXLOC, Location of the maximum value within an array
205 * @code{MAXVAL}: MAXVAL, Maximum value of an array
206 * @code{MCLOCK}: MCLOCK, Time function
207 * @code{MCLOCK8}: MCLOCK8, Time function (64-bit)
208 * @code{MERGE}: MERGE, Merge arrays
209 * @code{MERGE_BITS}: MERGE_BITS, Merge of bits under mask
210 * @code{MIN}: MIN, Minimum value of an argument list
211 * @code{MINEXPONENT}: MINEXPONENT, Minimum exponent of a real kind
212 * @code{MINLOC}: MINLOC, Location of the minimum value within an array
213 * @code{MINVAL}: MINVAL, Minimum value of an array
214 * @code{MOD}: MOD, Remainder function
215 * @code{MODULO}: MODULO, Modulo function
216 * @code{MOVE_ALLOC}: MOVE_ALLOC, Move allocation from one object to another
217 * @code{MVBITS}: MVBITS, Move bits from one integer to another
218 * @code{NEAREST}: NEAREST, Nearest representable number
219 * @code{NEW_LINE}: NEW_LINE, New line character
220 * @code{NINT}: NINT, Nearest whole number
221 * @code{NORM2}: NORM2, Euclidean vector norm
222 * @code{NOT}: NOT, Logical negation
223 * @code{NULL}: NULL, Function that returns an disassociated pointer
224 * @code{NUM_IMAGES}: NUM_IMAGES, Number of images
225 * @code{OR}: OR, Bitwise logical OR
226 * @code{PACK}: PACK, Pack an array into an array of rank one
227 * @code{PARITY}: PARITY, Reduction with exclusive OR
228 * @code{PERROR}: PERROR, Print system error message
229 * @code{POPCNT}: POPCNT, Number of bits set
230 * @code{POPPAR}: POPPAR, Parity of the number of bits set
231 * @code{PRECISION}: PRECISION, Decimal precision of a real kind
232 * @code{PRESENT}: PRESENT, Determine whether an optional dummy argument is specified
233 * @code{PRODUCT}: PRODUCT, Product of array elements
234 * @code{RADIX}: RADIX, Base of a data model
235 * @code{RANDOM_NUMBER}: RANDOM_NUMBER, Pseudo-random number
236 * @code{RANDOM_SEED}: RANDOM_SEED, Initialize a pseudo-random number sequence
237 * @code{RAND}: RAND, Real pseudo-random number
238 * @code{RANGE}: RANGE, Decimal exponent range
239 * @code{RAN}: RAN, Real pseudo-random number
240 * @code{REAL}: REAL, Convert to real type
241 * @code{RENAME}: RENAME, Rename a file
242 * @code{REPEAT}: REPEAT, Repeated string concatenation
243 * @code{RESHAPE}: RESHAPE, Function to reshape an array
244 * @code{RRSPACING}: RRSPACING, Reciprocal of the relative spacing
245 * @code{RSHIFT}: RSHIFT, Right shift bits
246 * @code{SAME_TYPE_AS}: SAME_TYPE_AS, Query dynamic types for equality
247 * @code{SCALE}: SCALE, Scale a real value
248 * @code{SCAN}: SCAN, Scan a string for the presence of a set of characters
249 * @code{SECNDS}: SECNDS, Time function
250 * @code{SECOND}: SECOND, CPU time function
251 * @code{SELECTED_CHAR_KIND}: SELECTED_CHAR_KIND, Choose character kind
252 * @code{SELECTED_INT_KIND}: SELECTED_INT_KIND, Choose integer kind
253 * @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND, Choose real kind
254 * @code{SET_EXPONENT}: SET_EXPONENT, Set the exponent of the model
255 * @code{SHAPE}: SHAPE, Determine the shape of an array
256 * @code{SHIFTA}: SHIFTA, Right shift with fill
257 * @code{SHIFTL}: SHIFTL, Left shift
258 * @code{SHIFTR}: SHIFTR, Right shift
259 * @code{SIGN}: SIGN, Sign copying function
260 * @code{SIGNAL}: SIGNAL, Signal handling subroutine (or function)
261 * @code{SIN}: SIN, Sine function
262 * @code{SINH}: SINH, Hyperbolic sine function
263 * @code{SIZE}: SIZE, Function to determine the size of an array
264 * @code{SIZEOF}: SIZEOF, Determine the size in bytes of an expression
265 * @code{SLEEP}: SLEEP, Sleep for the specified number of seconds
266 * @code{SPACING}: SPACING, Smallest distance between two numbers of a given type
267 * @code{SPREAD}: SPREAD, Add a dimension to an array
268 * @code{SQRT}: SQRT, Square-root function
269 * @code{SRAND}: SRAND, Reinitialize the random number generator
270 * @code{STAT}: STAT, Get file status
271 * @code{STORAGE_SIZE}: STORAGE_SIZE, Storage size in bits
272 * @code{SUM}: SUM, Sum of array elements
273 * @code{SYMLNK}: SYMLNK, Create a symbolic link
274 * @code{SYSTEM}: SYSTEM, Execute a shell command
275 * @code{SYSTEM_CLOCK}: SYSTEM_CLOCK, Time function
276 * @code{TAN}: TAN, Tangent function
277 * @code{TANH}: TANH, Hyperbolic tangent function
278 * @code{THIS_IMAGE}: THIS_IMAGE, Cosubscript index of this image
279 * @code{TIME}: TIME, Time function
280 * @code{TIME8}: TIME8, Time function (64-bit)
281 * @code{TINY}: TINY, Smallest positive number of a real kind
282 * @code{TRAILZ}: TRAILZ, Number of trailing zero bits of an integer
283 * @code{TRANSFER}: TRANSFER, Transfer bit patterns
284 * @code{TRANSPOSE}: TRANSPOSE, Transpose an array of rank two
285 * @code{TRIM}: TRIM, Remove trailing blank characters of a string
286 * @code{TTYNAM}: TTYNAM, Get the name of a terminal device.
287 * @code{UBOUND}: UBOUND, Upper dimension bounds of an array
288 * @code{UCOBOUND}: UCOBOUND, Upper codimension bounds of an array
289 * @code{UMASK}: UMASK, Set the file creation mask
290 * @code{UNLINK}: UNLINK, Remove a file from the file system
291 * @code{UNPACK}: UNPACK, Unpack an array of rank one into an array
292 * @code{VERIFY}: VERIFY, Scan a string for the absence of a set of characters
293 * @code{XOR}: XOR, Bitwise logical exclusive or
296 @node Introduction to Intrinsics
297 @section Introduction to intrinsic procedures
299 The intrinsic procedures provided by GNU Fortran include all of the
300 intrinsic procedures required by the Fortran 95 standard, a set of
301 intrinsic procedures for backwards compatibility with G77, and a
302 selection of intrinsic procedures from the Fortran 2003 and Fortran 2008
303 standards. Any conflict between a description here and a description in
304 either the Fortran 95 standard, the Fortran 2003 standard or the Fortran
305 2008 standard is unintentional, and the standard(s) should be considered
308 The enumeration of the @code{KIND} type parameter is processor defined in
309 the Fortran 95 standard. GNU Fortran defines the default integer type and
310 default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)},
311 respectively. The standard mandates that both data types shall have
312 another kind, which have more precision. On typical target architectures
313 supported by @command{gfortran}, this kind type parameter is @code{KIND=8}.
314 Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent.
315 In the description of generic intrinsic procedures, the kind type parameter
316 will be specified by @code{KIND=*}, and in the description of specific
317 names for an intrinsic procedure the kind type parameter will be explicitly
318 given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}). Finally, for
319 brevity the optional @code{KIND=} syntax will be omitted.
321 Many of the intrinsic procedures take one or more optional arguments.
322 This document follows the convention used in the Fortran 95 standard,
323 and denotes such arguments by square brackets.
325 GNU Fortran offers the @option{-std=f95} and @option{-std=gnu} options,
326 which can be used to restrict the set of intrinsic procedures to a
327 given standard. By default, @command{gfortran} sets the @option{-std=gnu}
328 option, and so all intrinsic procedures described here are accepted. There
329 is one caveat. For a select group of intrinsic procedures, @command{g77}
330 implemented both a function and a subroutine. Both classes
331 have been implemented in @command{gfortran} for backwards compatibility
332 with @command{g77}. It is noted here that these functions and subroutines
333 cannot be intermixed in a given subprogram. In the descriptions that follow,
334 the applicable standard for each intrinsic procedure is noted.
339 @section @code{ABORT} --- Abort the program
341 @cindex program termination, with core dump
342 @cindex terminate program, with core dump
346 @item @emph{Description}:
347 @code{ABORT} causes immediate termination of the program. On operating
348 systems that support a core dump, @code{ABORT} will produce a core dump even if
349 the option @option{-fno-dump-core} is in effect, which is suitable for debugging
351 @c TODO: Check if this (with -fno-dump-core) is correct.
353 @item @emph{Standard}:
362 @item @emph{Return value}:
365 @item @emph{Example}:
368 integer :: i = 1, j = 2
369 if (i /= j) call abort
370 end program test_abort
373 @item @emph{See also}:
374 @ref{EXIT}, @ref{KILL}
381 @section @code{ABS} --- Absolute value
388 @cindex absolute value
391 @item @emph{Description}:
392 @code{ABS(A)} computes the absolute value of @code{A}.
394 @item @emph{Standard}:
395 Fortran 77 and later, has overloads that are GNU extensions
401 @code{RESULT = ABS(A)}
403 @item @emph{Arguments}:
404 @multitable @columnfractions .15 .70
405 @item @var{A} @tab The type of the argument shall be an @code{INTEGER},
406 @code{REAL}, or @code{COMPLEX}.
409 @item @emph{Return value}:
410 The return value is of the same type and
411 kind as the argument except the return value is @code{REAL} for a
412 @code{COMPLEX} argument.
414 @item @emph{Example}:
419 complex :: z = (-1.e0,0.e0)
426 @item @emph{Specific names}:
427 @multitable @columnfractions .20 .20 .20 .25
428 @item Name @tab Argument @tab Return type @tab Standard
429 @item @code{ABS(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
430 @item @code{CABS(A)} @tab @code{COMPLEX(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
431 @item @code{DABS(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)} @tab Fortran 77 and later
432 @item @code{IABS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab Fortran 77 and later
433 @item @code{ZABS(A)} @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
434 @item @code{CDABS(A)} @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
441 @section @code{ACCESS} --- Checks file access modes
443 @cindex file system, access mode
446 @item @emph{Description}:
447 @code{ACCESS(NAME, MODE)} checks whether the file @var{NAME}
448 exists, is readable, writable or executable. Except for the
449 executable check, @code{ACCESS} can be replaced by
450 Fortran 95's @code{INQUIRE}.
452 @item @emph{Standard}:
459 @code{RESULT = ACCESS(NAME, MODE)}
461 @item @emph{Arguments}:
462 @multitable @columnfractions .15 .70
463 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
464 file name. Tailing blank are ignored unless the character @code{achar(0)}
465 is present, then all characters up to and excluding @code{achar(0)} are
467 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind with the
468 file access mode, may be any concatenation of @code{"r"} (readable),
469 @code{"w"} (writable) and @code{"x"} (executable), or @code{" "} to check
473 @item @emph{Return value}:
474 Returns a scalar @code{INTEGER}, which is @code{0} if the file is
475 accessible in the given mode; otherwise or if an invalid argument
476 has been given for @code{MODE} the value @code{1} is returned.
478 @item @emph{Example}:
482 character(len=*), parameter :: file = 'test.dat'
483 character(len=*), parameter :: file2 = 'test.dat '//achar(0)
484 if(access(file,' ') == 0) print *, trim(file),' is exists'
485 if(access(file,'r') == 0) print *, trim(file),' is readable'
486 if(access(file,'w') == 0) print *, trim(file),' is writable'
487 if(access(file,'x') == 0) print *, trim(file),' is executable'
488 if(access(file2,'rwx') == 0) &
489 print *, trim(file2),' is readable, writable and executable'
490 end program access_test
492 @item @emph{Specific names}:
493 @item @emph{See also}:
500 @section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence
502 @cindex @acronym{ASCII} collating sequence
503 @cindex collating sequence, @acronym{ASCII}
506 @item @emph{Description}:
507 @code{ACHAR(I)} returns the character located at position @code{I}
508 in the @acronym{ASCII} collating sequence.
510 @item @emph{Standard}:
511 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
517 @code{RESULT = ACHAR(I [, KIND])}
519 @item @emph{Arguments}:
520 @multitable @columnfractions .15 .70
521 @item @var{I} @tab The type shall be @code{INTEGER}.
522 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
523 expression indicating the kind parameter of the result.
526 @item @emph{Return value}:
527 The return value is of type @code{CHARACTER} with a length of one.
528 If the @var{KIND} argument is present, the return value is of the
529 specified kind and of the default kind otherwise.
531 @item @emph{Example}:
536 end program test_achar
540 See @ref{ICHAR} for a discussion of converting between numerical values
541 and formatted string representations.
543 @item @emph{See also}:
544 @ref{CHAR}, @ref{IACHAR}, @ref{ICHAR}
551 @section @code{ACOS} --- Arccosine function
554 @cindex trigonometric function, cosine, inverse
555 @cindex cosine, inverse
558 @item @emph{Description}:
559 @code{ACOS(X)} computes the arccosine of @var{X} (inverse of @code{COS(X)}).
561 @item @emph{Standard}:
562 Fortran 77 and later, for a complex argument Fortran 2008 or later
568 @code{RESULT = ACOS(X)}
570 @item @emph{Arguments}:
571 @multitable @columnfractions .15 .70
572 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
573 less than or equal to one - or the type shall be @code{COMPLEX}.
576 @item @emph{Return value}:
577 The return value is of the same type and kind as @var{X}.
578 The real part of the result is in radians and lies in the range
579 @math{0 \leq \Re \acos(x) \leq \pi}.
581 @item @emph{Example}:
584 real(8) :: x = 0.866_8
586 end program test_acos
589 @item @emph{Specific names}:
590 @multitable @columnfractions .20 .20 .20 .25
591 @item Name @tab Argument @tab Return type @tab Standard
592 @item @code{ACOS(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
593 @item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
596 @item @emph{See also}:
597 Inverse function: @ref{COS}
604 @section @code{ACOSH} --- Inverse hyperbolic cosine function
607 @cindex area hyperbolic cosine
608 @cindex inverse hyperbolic cosine
609 @cindex hyperbolic function, cosine, inverse
610 @cindex cosine, hyperbolic, inverse
613 @item @emph{Description}:
614 @code{ACOSH(X)} computes the inverse hyperbolic cosine of @var{X}.
616 @item @emph{Standard}:
617 Fortran 2008 and later
623 @code{RESULT = ACOSH(X)}
625 @item @emph{Arguments}:
626 @multitable @columnfractions .15 .70
627 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
630 @item @emph{Return value}:
631 The return value has the same type and kind as @var{X}. If @var{X} is
632 complex, the imaginary part of the result is in radians and lies between
633 @math{ 0 \leq \Im \acosh(x) \leq \pi}.
635 @item @emph{Example}:
638 REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)
643 @item @emph{Specific names}:
644 @multitable @columnfractions .20 .20 .20 .25
645 @item Name @tab Argument @tab Return type @tab Standard
646 @item @code{DACOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
649 @item @emph{See also}:
650 Inverse function: @ref{COSH}
656 @section @code{ADJUSTL} --- Left adjust a string
658 @cindex string, adjust left
659 @cindex adjust string
662 @item @emph{Description}:
663 @code{ADJUSTL(STRING)} will left adjust a string by removing leading spaces.
664 Spaces are inserted at the end of the string as needed.
666 @item @emph{Standard}:
673 @code{RESULT = ADJUSTL(STRING)}
675 @item @emph{Arguments}:
676 @multitable @columnfractions .15 .70
677 @item @var{STRING} @tab The type shall be @code{CHARACTER}.
680 @item @emph{Return value}:
681 The return value is of type @code{CHARACTER} and of the same kind as
682 @var{STRING} where leading spaces are removed and the same number of
683 spaces are inserted on the end of @var{STRING}.
685 @item @emph{Example}:
688 character(len=20) :: str = ' gfortran'
691 end program test_adjustl
694 @item @emph{See also}:
695 @ref{ADJUSTR}, @ref{TRIM}
701 @section @code{ADJUSTR} --- Right adjust a string
703 @cindex string, adjust right
704 @cindex adjust string
707 @item @emph{Description}:
708 @code{ADJUSTR(STRING)} will right adjust a string by removing trailing spaces.
709 Spaces are inserted at the start of the string as needed.
711 @item @emph{Standard}:
718 @code{RESULT = ADJUSTR(STRING)}
720 @item @emph{Arguments}:
721 @multitable @columnfractions .15 .70
722 @item @var{STR} @tab The type shall be @code{CHARACTER}.
725 @item @emph{Return value}:
726 The return value is of type @code{CHARACTER} and of the same kind as
727 @var{STRING} where trailing spaces are removed and the same number of
728 spaces are inserted at the start of @var{STRING}.
730 @item @emph{Example}:
733 character(len=20) :: str = 'gfortran'
736 end program test_adjustr
739 @item @emph{See also}:
740 @ref{ADJUSTL}, @ref{TRIM}
746 @section @code{AIMAG} --- Imaginary part of complex number
751 @cindex complex numbers, imaginary part
754 @item @emph{Description}:
755 @code{AIMAG(Z)} yields the imaginary part of complex argument @code{Z}.
756 The @code{IMAG(Z)} and @code{IMAGPART(Z)} intrinsic functions are provided
757 for compatibility with @command{g77}, and their use in new code is
758 strongly discouraged.
760 @item @emph{Standard}:
761 Fortran 77 and later, has overloads that are GNU extensions
767 @code{RESULT = AIMAG(Z)}
769 @item @emph{Arguments}:
770 @multitable @columnfractions .15 .70
771 @item @var{Z} @tab The type of the argument shall be @code{COMPLEX}.
774 @item @emph{Return value}:
775 The return value is of type @code{REAL} with the
776 kind type parameter of the argument.
778 @item @emph{Example}:
783 z4 = cmplx(1.e0_4, 0.e0_4)
784 z8 = cmplx(0.e0_8, 1.e0_8)
785 print *, aimag(z4), dimag(z8)
786 end program test_aimag
789 @item @emph{Specific names}:
790 @multitable @columnfractions .20 .20 .20 .25
791 @item Name @tab Argument @tab Return type @tab Standard
792 @item @code{AIMAG(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension
793 @item @code{DIMAG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)} @tab GNU extension
794 @item @code{IMAG(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension
795 @item @code{IMAGPART(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension
802 @section @code{AINT} --- Truncate to a whole number
806 @cindex rounding, floor
809 @item @emph{Description}:
810 @code{AINT(A [, KIND])} truncates its argument to a whole number.
812 @item @emph{Standard}:
819 @code{RESULT = AINT(A [, KIND])}
821 @item @emph{Arguments}:
822 @multitable @columnfractions .15 .70
823 @item @var{A} @tab The type of the argument shall be @code{REAL}.
824 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
825 expression indicating the kind parameter of the result.
828 @item @emph{Return value}:
829 The return value is of type @code{REAL} with the kind type parameter of the
830 argument if the optional @var{KIND} is absent; otherwise, the kind
831 type parameter will be given by @var{KIND}. If the magnitude of
832 @var{X} is less than one, @code{AINT(X)} returns zero. If the
833 magnitude is equal to or greater than one then it returns the largest
834 whole number that does not exceed its magnitude. The sign is the same
835 as the sign of @var{X}.
837 @item @emph{Example}:
844 print *, aint(x4), dint(x8)
846 end program test_aint
849 @item @emph{Specific names}:
850 @multitable @columnfractions .20 .20 .20 .25
851 @item Name @tab Argument @tab Return type @tab Standard
852 @item @code{AINT(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
853 @item @code{DINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)} @tab Fortran 77 and later
860 @section @code{ALARM} --- Execute a routine after a given delay
862 @cindex delayed execution
865 @item @emph{Description}:
866 @code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER}
867 to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to
868 set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is
869 supplied, it will be returned with the number of seconds remaining until
870 any previously scheduled alarm was due to be delivered, or zero if there
871 was no previously scheduled alarm.
873 @item @emph{Standard}:
880 @code{CALL ALARM(SECONDS, HANDLER [, STATUS])}
882 @item @emph{Arguments}:
883 @multitable @columnfractions .15 .70
884 @item @var{SECONDS} @tab The type of the argument shall be a scalar
885 @code{INTEGER}. It is @code{INTENT(IN)}.
886 @item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or
887 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar
888 values may be either @code{SIG_IGN=1} to ignore the alarm generated
889 or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}.
890 @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
891 variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}.
894 @item @emph{Example}:
897 external handler_print
899 call alarm (3, handler_print, i)
902 end program test_alarm
904 This will cause the external routine @var{handler_print} to be called
911 @section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true
913 @cindex array, apply condition
914 @cindex array, condition testing
917 @item @emph{Description}:
918 @code{ALL(MASK [, DIM])} determines if all the values are true in @var{MASK}
919 in the array along dimension @var{DIM}.
921 @item @emph{Standard}:
925 Transformational function
928 @code{RESULT = ALL(MASK [, DIM])}
930 @item @emph{Arguments}:
931 @multitable @columnfractions .15 .70
932 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
933 it shall not be scalar.
934 @item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer
935 with a value that lies between one and the rank of @var{MASK}.
938 @item @emph{Return value}:
939 @code{ALL(MASK)} returns a scalar value of type @code{LOGICAL} where
940 the kind type parameter is the same as the kind type parameter of
941 @var{MASK}. If @var{DIM} is present, then @code{ALL(MASK, DIM)} returns
942 an array with the rank of @var{MASK} minus 1. The shape is determined from
943 the shape of @var{MASK} where the @var{DIM} dimension is elided.
947 @code{ALL(MASK)} is true if all elements of @var{MASK} are true.
948 It also is true if @var{MASK} has zero size; otherwise, it is false.
950 If the rank of @var{MASK} is one, then @code{ALL(MASK,DIM)} is equivalent
951 to @code{ALL(MASK)}. If the rank is greater than one, then @code{ALL(MASK,DIM)}
952 is determined by applying @code{ALL} to the array sections.
955 @item @emph{Example}:
959 l = all((/.true., .true., .true./))
964 integer a(2,3), b(2,3)
968 print *, all(a .eq. b, 1)
969 print *, all(a .eq. b, 2)
970 end subroutine section
978 @section @code{ALLOCATED} --- Status of an allocatable entity
980 @cindex allocation, status
983 @item @emph{Description}:
984 @code{ALLOCATED(ARRAY)} and @code{ALLOCATED(SCALAR)} check the allocation
985 status of @var{ARRAY} and @var{SCALAR}, respectively.
987 @item @emph{Standard}:
988 Fortran 95 and later. Note, the @code{SCALAR=} keyword and allocatable
989 scalar entities are available in Fortran 2003 and later.
995 @code{RESULT = ALLOCATED(ARRAY)} or @code{RESULT = ALLOCATED(SCALAR)}
997 @item @emph{Arguments}:
998 @multitable @columnfractions .15 .70
999 @item @var{ARRAY} @tab The argument shall be an @code{ALLOCATABLE} array.
1000 @item @var{SCALAR} @tab The argument shall be an @code{ALLOCATABLE} scalar.
1003 @item @emph{Return value}:
1004 The return value is a scalar @code{LOGICAL} with the default logical
1005 kind type parameter. If the argument is allocated, then the result is
1006 @code{.TRUE.}; otherwise, it returns @code{.FALSE.}
1008 @item @emph{Example}:
1010 program test_allocated
1012 real(4), allocatable :: x(:)
1013 if (.not. allocated(x)) allocate(x(i))
1014 end program test_allocated
1021 @section @code{AND} --- Bitwise logical AND
1023 @cindex bitwise logical and
1024 @cindex logical and, bitwise
1027 @item @emph{Description}:
1028 Bitwise logical @code{AND}.
1030 This intrinsic routine is provided for backwards compatibility with
1031 GNU Fortran 77. For integer arguments, programmers should consider
1032 the use of the @ref{IAND} intrinsic defined by the Fortran standard.
1034 @item @emph{Standard}:
1040 @item @emph{Syntax}:
1041 @code{RESULT = AND(I, J)}
1043 @item @emph{Arguments}:
1044 @multitable @columnfractions .15 .70
1045 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
1046 type or a scalar @code{LOGICAL} type.
1047 @item @var{J} @tab The type shall be the same as the type of @var{I}.
1050 @item @emph{Return value}:
1051 The return type is either a scalar @code{INTEGER} or a scalar
1052 @code{LOGICAL}. If the kind type parameters differ, then the
1053 smaller kind type is implicitly converted to larger kind, and the
1054 return has the larger kind.
1056 @item @emph{Example}:
1059 LOGICAL :: T = .TRUE., F = .FALSE.
1061 DATA a / Z'F' /, b / Z'3' /
1063 WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)
1064 WRITE (*,*) AND(a, b)
1068 @item @emph{See also}:
1069 Fortran 95 elemental function: @ref{IAND}
1075 @section @code{ANINT} --- Nearest whole number
1079 @cindex rounding, ceiling
1082 @item @emph{Description}:
1083 @code{ANINT(A [, KIND])} rounds its argument to the nearest whole number.
1085 @item @emph{Standard}:
1086 Fortran 77 and later
1091 @item @emph{Syntax}:
1092 @code{RESULT = ANINT(A [, KIND])}
1094 @item @emph{Arguments}:
1095 @multitable @columnfractions .15 .70
1096 @item @var{A} @tab The type of the argument shall be @code{REAL}.
1097 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
1098 expression indicating the kind parameter of the result.
1101 @item @emph{Return value}:
1102 The return value is of type real with the kind type parameter of the
1103 argument if the optional @var{KIND} is absent; otherwise, the kind
1104 type parameter will be given by @var{KIND}. If @var{A} is greater than
1105 zero, @code{ANINT(A)} returns @code{AINT(X+0.5)}. If @var{A} is
1106 less than or equal to zero then it returns @code{AINT(X-0.5)}.
1108 @item @emph{Example}:
1115 print *, anint(x4), dnint(x8)
1117 end program test_anint
1120 @item @emph{Specific names}:
1121 @multitable @columnfractions .20 .20 .20 .25
1122 @item Name @tab Argument @tab Return type @tab Standard
1123 @item @code{AINT(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)} @tab Fortran 77 and later
1124 @item @code{DNINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)} @tab Fortran 77 and later
1131 @section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true
1133 @cindex array, apply condition
1134 @cindex array, condition testing
1137 @item @emph{Description}:
1138 @code{ANY(MASK [, DIM])} determines if any of the values in the logical array
1139 @var{MASK} along dimension @var{DIM} are @code{.TRUE.}.
1141 @item @emph{Standard}:
1142 Fortran 95 and later
1145 Transformational function
1147 @item @emph{Syntax}:
1148 @code{RESULT = ANY(MASK [, DIM])}
1150 @item @emph{Arguments}:
1151 @multitable @columnfractions .15 .70
1152 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
1153 it shall not be scalar.
1154 @item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer
1155 with a value that lies between one and the rank of @var{MASK}.
1158 @item @emph{Return value}:
1159 @code{ANY(MASK)} returns a scalar value of type @code{LOGICAL} where
1160 the kind type parameter is the same as the kind type parameter of
1161 @var{MASK}. If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns
1162 an array with the rank of @var{MASK} minus 1. The shape is determined from
1163 the shape of @var{MASK} where the @var{DIM} dimension is elided.
1167 @code{ANY(MASK)} is true if any element of @var{MASK} is true;
1168 otherwise, it is false. It also is false if @var{MASK} has zero size.
1170 If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent
1171 to @code{ANY(MASK)}. If the rank is greater than one, then @code{ANY(MASK,DIM)}
1172 is determined by applying @code{ANY} to the array sections.
1175 @item @emph{Example}:
1179 l = any((/.true., .true., .true./))
1184 integer a(2,3), b(2,3)
1188 print *, any(a .eq. b, 1)
1189 print *, any(a .eq. b, 2)
1190 end subroutine section
1191 end program test_any
1198 @section @code{ASIN} --- Arcsine function
1201 @cindex trigonometric function, sine, inverse
1202 @cindex sine, inverse
1205 @item @emph{Description}:
1206 @code{ASIN(X)} computes the arcsine of its @var{X} (inverse of @code{SIN(X)}).
1208 @item @emph{Standard}:
1209 Fortran 77 and later, for a complex argument Fortran 2008 or later
1214 @item @emph{Syntax}:
1215 @code{RESULT = ASIN(X)}
1217 @item @emph{Arguments}:
1218 @multitable @columnfractions .15 .70
1219 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
1220 less than or equal to one - or be @code{COMPLEX}.
1223 @item @emph{Return value}:
1224 The return value is of the same type and kind as @var{X}.
1225 The real part of the result is in radians and lies in the range
1226 @math{-\pi/2 \leq \Re \asin(x) \leq \pi/2}.
1228 @item @emph{Example}:
1231 real(8) :: x = 0.866_8
1233 end program test_asin
1236 @item @emph{Specific names}:
1237 @multitable @columnfractions .20 .20 .20 .25
1238 @item Name @tab Argument @tab Return type @tab Standard
1239 @item @code{ASIN(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
1240 @item @code{DASIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
1243 @item @emph{See also}:
1244 Inverse function: @ref{SIN}
1251 @section @code{ASINH} --- Inverse hyperbolic sine function
1254 @cindex area hyperbolic sine
1255 @cindex inverse hyperbolic sine
1256 @cindex hyperbolic function, sine, inverse
1257 @cindex sine, hyperbolic, inverse
1260 @item @emph{Description}:
1261 @code{ASINH(X)} computes the inverse hyperbolic sine of @var{X}.
1263 @item @emph{Standard}:
1264 Fortran 2008 and later
1269 @item @emph{Syntax}:
1270 @code{RESULT = ASINH(X)}
1272 @item @emph{Arguments}:
1273 @multitable @columnfractions .15 .70
1274 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1277 @item @emph{Return value}:
1278 The return value is of the same type and kind as @var{X}. If @var{X} is
1279 complex, the imaginary part of the result is in radians and lies between
1280 @math{-\pi/2 \leq \Im \asinh(x) \leq \pi/2}.
1282 @item @emph{Example}:
1285 REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1286 WRITE (*,*) ASINH(x)
1290 @item @emph{Specific names}:
1291 @multitable @columnfractions .20 .20 .20 .25
1292 @item Name @tab Argument @tab Return type @tab Standard
1293 @item @code{DASINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension.
1296 @item @emph{See also}:
1297 Inverse function: @ref{SINH}
1303 @section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair
1305 @cindex pointer, status
1306 @cindex association status
1309 @item @emph{Description}:
1310 @code{ASSOCIATED(POINTER [, TARGET])} determines the status of the pointer
1311 @var{POINTER} or if @var{POINTER} is associated with the target @var{TARGET}.
1313 @item @emph{Standard}:
1314 Fortran 95 and later
1319 @item @emph{Syntax}:
1320 @code{RESULT = ASSOCIATED(POINTER [, TARGET])}
1322 @item @emph{Arguments}:
1323 @multitable @columnfractions .15 .70
1324 @item @var{POINTER} @tab @var{POINTER} shall have the @code{POINTER} attribute
1325 and it can be of any type.
1326 @item @var{TARGET} @tab (Optional) @var{TARGET} shall be a pointer or
1327 a target. It must have the same type, kind type parameter, and
1328 array rank as @var{POINTER}.
1330 The association status of neither @var{POINTER} nor @var{TARGET} shall be
1333 @item @emph{Return value}:
1334 @code{ASSOCIATED(POINTER)} returns a scalar value of type @code{LOGICAL(4)}.
1335 There are several cases:
1337 @item (A) When the optional @var{TARGET} is not present then
1338 @code{ASSOCIATED(POINTER)} is true if @var{POINTER} is associated with a target; otherwise, it returns false.
1339 @item (B) If @var{TARGET} is present and a scalar target, the result is true if
1340 @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
1341 disassociated, the result is false.
1342 @item (C) If @var{TARGET} is present and an array target, the result is true if
1343 @var{TARGET} and @var{POINTER} have the same shape, are not zero-sized arrays,
1344 are arrays whose elements are not zero-sized storage sequences, and
1345 @var{TARGET} and @var{POINTER} occupy the same storage units in array element
1347 As in case(B), the result is false, if @var{POINTER} is disassociated.
1348 @item (D) If @var{TARGET} is present and an scalar pointer, the result is true
1349 if @var{TARGET} is associated with @var{POINTER}, the target associated with
1350 @var{TARGET} are not zero-sized storage sequences and occupy the same storage
1352 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1353 @item (E) If @var{TARGET} is present and an array pointer, the result is true if
1354 target associated with @var{POINTER} and the target associated with @var{TARGET}
1355 have the same shape, are not zero-sized arrays, are arrays whose elements are
1356 not zero-sized storage sequences, and @var{TARGET} and @var{POINTER} occupy
1357 the same storage units in array element order.
1358 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1361 @item @emph{Example}:
1363 program test_associated
1365 real, target :: tgt(2) = (/1., 2./)
1366 real, pointer :: ptr(:)
1368 if (associated(ptr) .eqv. .false.) call abort
1369 if (associated(ptr,tgt) .eqv. .false.) call abort
1370 end program test_associated
1373 @item @emph{See also}:
1380 @section @code{ATAN} --- Arctangent function
1383 @cindex trigonometric function, tangent, inverse
1384 @cindex tangent, inverse
1387 @item @emph{Description}:
1388 @code{ATAN(X)} computes the arctangent of @var{X}.
1390 @item @emph{Standard}:
1391 Fortran 77 and later, for a complex argument and for two arguments
1392 Fortran 2008 or later
1397 @item @emph{Syntax}:
1398 @code{RESULT = ATAN(X)}
1399 @code{RESULT = ATAN(Y, X)}
1401 @item @emph{Arguments}:
1402 @multitable @columnfractions .15 .70
1403 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
1404 if @var{Y} is present, @var{X} shall be REAL.
1405 @item @var{Y} shall be of the same type and kind as @var{X}.
1408 @item @emph{Return value}:
1409 The return value is of the same type and kind as @var{X}.
1410 If @var{Y} is present, the result is identical to @code{ATAN2(Y,X)}.
1411 Otherwise, it the arcus tangent of @var{X}, where the real part of
1412 the result is in radians and lies in the range
1413 @math{-\pi/2 \leq \Re \atan(x) \leq \pi/2}.
1415 @item @emph{Example}:
1418 real(8) :: x = 2.866_8
1420 end program test_atan
1423 @item @emph{Specific names}:
1424 @multitable @columnfractions .20 .20 .20 .25
1425 @item Name @tab Argument @tab Return type @tab Standard
1426 @item @code{ATAN(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
1427 @item @code{DATAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
1430 @item @emph{See also}:
1431 Inverse function: @ref{TAN}
1438 @section @code{ATAN2} --- Arctangent function
1441 @cindex trigonometric function, tangent, inverse
1442 @cindex tangent, inverse
1445 @item @emph{Description}:
1446 @code{ATAN2(Y, X)} computes the principal value of the argument
1447 function of the complex number @math{X + i Y}. This function can
1448 be used to transform from Cartesian into polar coordinates and
1449 allows to determine the angle in the correct quadrant.
1451 @item @emph{Standard}:
1452 Fortran 77 and later
1457 @item @emph{Syntax}:
1458 @code{RESULT = ATAN2(Y, X)}
1460 @item @emph{Arguments}:
1461 @multitable @columnfractions .15 .70
1462 @item @var{Y} @tab The type shall be @code{REAL}.
1463 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
1464 If @var{Y} is zero, then @var{X} must be nonzero.
1467 @item @emph{Return value}:
1468 The return value has the same type and kind type parameter as @var{Y}.
1469 It is the principal value of the complex number @math{X + i Y}. If
1470 @var{X} is nonzero, then it lies in the range @math{-\pi \le \atan (x) \leq \pi}.
1471 The sign is positive if @var{Y} is positive. If @var{Y} is zero, then
1472 the return value is zero if @var{X} is positive and @math{\pi} if @var{X}
1473 is negative. Finally, if @var{X} is zero, then the magnitude of the result
1476 @item @emph{Example}:
1479 real(4) :: x = 1.e0_4, y = 0.5e0_4
1481 end program test_atan2
1484 @item @emph{Specific names}:
1485 @multitable @columnfractions .20 .20 .20 .25
1486 @item Name @tab Argument @tab Return type @tab Standard
1487 @item @code{ATAN2(X, Y)} @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
1488 @item @code{DATAN2(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab Fortran 77 and later
1495 @section @code{ATANH} --- Inverse hyperbolic tangent function
1498 @cindex area hyperbolic tangent
1499 @cindex inverse hyperbolic tangent
1500 @cindex hyperbolic function, tangent, inverse
1501 @cindex tangent, hyperbolic, inverse
1504 @item @emph{Description}:
1505 @code{ATANH(X)} computes the inverse hyperbolic tangent of @var{X}.
1507 @item @emph{Standard}:
1508 Fortran 2008 and later
1513 @item @emph{Syntax}:
1514 @code{RESULT = ATANH(X)}
1516 @item @emph{Arguments}:
1517 @multitable @columnfractions .15 .70
1518 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1521 @item @emph{Return value}:
1522 The return value has same type and kind as @var{X}. If @var{X} is
1523 complex, the imaginary part of the result is in radians and lies between
1524 @math{-\pi/2 \leq \Im \atanh(x) \leq \pi/2}.
1526 @item @emph{Example}:
1529 REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1530 WRITE (*,*) ATANH(x)
1534 @item @emph{Specific names}:
1535 @multitable @columnfractions .20 .20 .20 .25
1536 @item Name @tab Argument @tab Return type @tab Standard
1537 @item @code{DATANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1540 @item @emph{See also}:
1541 Inverse function: @ref{TANH}
1547 @section @code{BESSEL_J0} --- Bessel function of the first kind of order 0
1551 @cindex Bessel function, first kind
1554 @item @emph{Description}:
1555 @code{BESSEL_J0(X)} computes the Bessel function of the first kind of
1556 order 0 of @var{X}. This function is available under the name
1557 @code{BESJ0} as a GNU extension.
1559 @item @emph{Standard}:
1560 Fortran 2008 and later
1565 @item @emph{Syntax}:
1566 @code{RESULT = BESSEL_J0(X)}
1568 @item @emph{Arguments}:
1569 @multitable @columnfractions .15 .70
1570 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1573 @item @emph{Return value}:
1574 The return value is of type @code{REAL} and lies in the
1575 range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. It has the same
1578 @item @emph{Example}:
1581 real(8) :: x = 0.0_8
1583 end program test_besj0
1586 @item @emph{Specific names}:
1587 @multitable @columnfractions .20 .20 .20 .25
1588 @item Name @tab Argument @tab Return type @tab Standard
1589 @item @code{DBESJ0(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1596 @section @code{BESSEL_J1} --- Bessel function of the first kind of order 1
1600 @cindex Bessel function, first kind
1603 @item @emph{Description}:
1604 @code{BESSEL_J1(X)} computes the Bessel function of the first kind of
1605 order 1 of @var{X}. This function is available under the name
1606 @code{BESJ1} as a GNU extension.
1608 @item @emph{Standard}:
1614 @item @emph{Syntax}:
1615 @code{RESULT = BESSEL_J1(X)}
1617 @item @emph{Arguments}:
1618 @multitable @columnfractions .15 .70
1619 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1622 @item @emph{Return value}:
1623 The return value is of type @code{REAL} and it lies in the
1624 range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. It has the same
1627 @item @emph{Example}:
1630 real(8) :: x = 1.0_8
1632 end program test_besj1
1635 @item @emph{Specific names}:
1636 @multitable @columnfractions .20 .20 .20 .25
1637 @item Name @tab Argument @tab Return type @tab Standard
1638 @item @code{DBESJ1(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1645 @section @code{BESSEL_JN} --- Bessel function of the first kind
1649 @cindex Bessel function, first kind
1652 @item @emph{Description}:
1653 @code{BESSEL_JN(N, X)} computes the Bessel function of the first kind of
1654 order @var{N} of @var{X}. This function is available under the name
1655 @code{BESJN} as a GNU extension. If @var{N} and @var{X} are arrays,
1656 their ranks and shapes shall conform.
1658 @code{BESSEL_JN(N1, N2, X)} returns an array with the Bessel functions
1659 of the first kind of the orders @var{N1} to @var{N2}.
1661 @item @emph{Standard}:
1662 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
1665 Elemental function, except for the transformational function
1666 @code{BESSEL_JN(N1, N2, X)}
1668 @item @emph{Syntax}:
1669 @code{RESULT = BESSEL_JN(N, X)}
1670 @code{RESULT = BESSEL_JN(N1, N2, X)}
1672 @item @emph{Arguments}:
1673 @multitable @columnfractions .15 .70
1674 @item @var{N} @tab Shall be a scalar or an array of type @code{INTEGER}.
1675 @item @var{N1} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1676 @item @var{N2} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1677 @item @var{X} @tab Shall be a scalar or an array of type @code{REAL};
1678 for @code{BESSEL_JN(N1, N2, X)} it shall be scalar.
1681 @item @emph{Return value}:
1682 The return value is a scalar of type @code{REAL}. It has the same
1686 The transformational function uses a recurrence algorithm which might,
1687 for some values of @var{X}, lead to different results than calls to
1688 the elemental function.
1690 @item @emph{Example}:
1693 real(8) :: x = 1.0_8
1695 end program test_besjn
1698 @item @emph{Specific names}:
1699 @multitable @columnfractions .20 .20 .20 .25
1700 @item Name @tab Argument @tab Return type @tab Standard
1701 @item @code{DBESJN(N, X)} @tab @code{INTEGER N} @tab @code{REAL(8)} @tab GNU extension
1702 @item @tab @code{REAL(8) X} @tab @tab
1709 @section @code{BESSEL_Y0} --- Bessel function of the second kind of order 0
1713 @cindex Bessel function, second kind
1716 @item @emph{Description}:
1717 @code{BESSEL_Y0(X)} computes the Bessel function of the second kind of
1718 order 0 of @var{X}. This function is available under the name
1719 @code{BESY0} as a GNU extension.
1721 @item @emph{Standard}:
1722 Fortran 2008 and later
1727 @item @emph{Syntax}:
1728 @code{RESULT = BESSEL_Y0(X)}
1730 @item @emph{Arguments}:
1731 @multitable @columnfractions .15 .70
1732 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1735 @item @emph{Return value}:
1736 The return value is a scalar of type @code{REAL}. It has the same
1739 @item @emph{Example}:
1742 real(8) :: x = 0.0_8
1744 end program test_besy0
1747 @item @emph{Specific names}:
1748 @multitable @columnfractions .20 .20 .20 .25
1749 @item Name @tab Argument @tab Return type @tab Standard
1750 @item @code{DBESY0(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1757 @section @code{BESSEL_Y1} --- Bessel function of the second kind of order 1
1761 @cindex Bessel function, second kind
1764 @item @emph{Description}:
1765 @code{BESSEL_Y1(X)} computes the Bessel function of the second kind of
1766 order 1 of @var{X}. This function is available under the name
1767 @code{BESY1} as a GNU extension.
1769 @item @emph{Standard}:
1770 Fortran 2008 and later
1775 @item @emph{Syntax}:
1776 @code{RESULT = BESSEL_Y1(X)}
1778 @item @emph{Arguments}:
1779 @multitable @columnfractions .15 .70
1780 @item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1783 @item @emph{Return value}:
1784 The return value is a scalar of type @code{REAL}. It has the same
1787 @item @emph{Example}:
1790 real(8) :: x = 1.0_8
1792 end program test_besy1
1795 @item @emph{Specific names}:
1796 @multitable @columnfractions .20 .20 .20 .25
1797 @item Name @tab Argument @tab Return type @tab Standard
1798 @item @code{DBESY1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
1805 @section @code{BESSEL_YN} --- Bessel function of the second kind
1809 @cindex Bessel function, second kind
1812 @item @emph{Description}:
1813 @code{BESSEL_YN(N, X)} computes the Bessel function of the second kind of
1814 order @var{N} of @var{X}. This function is available under the name
1815 @code{BESYN} as a GNU extension. If @var{N} and @var{X} are arrays,
1816 their ranks and shapes shall conform.
1818 @code{BESSEL_YN(N1, N2, X)} returns an array with the Bessel functions
1819 of the first kind of the orders @var{N1} to @var{N2}.
1821 @item @emph{Standard}:
1822 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
1825 Elemental function, except for the transformational function
1826 @code{BESSEL_YN(N1, N2, X)}
1828 @item @emph{Syntax}:
1829 @code{RESULT = BESSEL_YN(N, X)}
1830 @code{RESULT = BESSEL_YN(N1, N2, X)}
1832 @item @emph{Arguments}:
1833 @multitable @columnfractions .15 .70
1834 @item @var{N} @tab Shall be a scalar or an array of type @code{INTEGER} .
1835 @item @var{N1} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1836 @item @var{N2} @tab Shall be a non-negative scalar of type @code{INTEGER}.
1837 @item @var{X} @tab Shall be a scalar or an array of type @code{REAL};
1838 for @code{BESSEL_YN(N1, N2, X)} it shall be scalar.
1841 @item @emph{Return value}:
1842 The return value is a scalar of type @code{REAL}. It has the same
1846 The transformational function uses a recurrence algorithm which might,
1847 for some values of @var{X}, lead to different results than calls to
1848 the elemental function.
1850 @item @emph{Example}:
1853 real(8) :: x = 1.0_8
1855 end program test_besyn
1858 @item @emph{Specific names}:
1859 @multitable @columnfractions .20 .20 .20 .25
1860 @item Name @tab Argument @tab Return type @tab Standard
1861 @item @code{DBESYN(N,X)} @tab @code{INTEGER N} @tab @code{REAL(8)} @tab GNU extension
1862 @item @tab @code{REAL(8) X} @tab @tab
1869 @section @code{BGE} --- Bitwise greater than or equal to
1871 @cindex bitwise comparison
1874 @item @emph{Description}:
1875 Determines whether an integral is a bitwise greater than or equal to
1878 @item @emph{Standard}:
1879 Fortran 2008 and later
1884 @item @emph{Syntax}:
1885 @code{RESULT = BGE(I, J)}
1887 @item @emph{Arguments}:
1888 @multitable @columnfractions .15 .70
1889 @item @var{I} @tab Shall be of @code{INTEGER} type.
1890 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
1894 @item @emph{Return value}:
1895 The return value is of type @code{LOGICAL} and of the default kind.
1897 @item @emph{See also}:
1898 @ref{BGT}, @ref{BLE}, @ref{BLT}
1904 @section @code{BGT} --- Bitwise greater than
1906 @cindex bitwise comparison
1909 @item @emph{Description}:
1910 Determines whether an integral is a bitwise greater than another.
1912 @item @emph{Standard}:
1913 Fortran 2008 and later
1918 @item @emph{Syntax}:
1919 @code{RESULT = BGT(I, J)}
1921 @item @emph{Arguments}:
1922 @multitable @columnfractions .15 .70
1923 @item @var{I} @tab Shall be of @code{INTEGER} type.
1924 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
1928 @item @emph{Return value}:
1929 The return value is of type @code{LOGICAL} and of the default kind.
1931 @item @emph{See also}:
1932 @ref{BGE}, @ref{BLE}, @ref{BLT}
1938 @section @code{BIT_SIZE} --- Bit size inquiry function
1940 @cindex bits, number of
1941 @cindex size of a variable, in bits
1944 @item @emph{Description}:
1945 @code{BIT_SIZE(I)} returns the number of bits (integer precision plus sign bit)
1946 represented by the type of @var{I}. The result of @code{BIT_SIZE(I)} is
1947 independent of the actual value of @var{I}.
1949 @item @emph{Standard}:
1950 Fortran 95 and later
1955 @item @emph{Syntax}:
1956 @code{RESULT = BIT_SIZE(I)}
1958 @item @emph{Arguments}:
1959 @multitable @columnfractions .15 .70
1960 @item @var{I} @tab The type shall be @code{INTEGER}.
1963 @item @emph{Return value}:
1964 The return value is of type @code{INTEGER}
1966 @item @emph{Example}:
1968 program test_bit_size
1973 end program test_bit_size
1980 @section @code{BLE} --- Bitwise less than or equal to
1982 @cindex bitwise comparison
1985 @item @emph{Description}:
1986 Determines whether an integral is a bitwise less than or equal to
1989 @item @emph{Standard}:
1990 Fortran 2008 and later
1995 @item @emph{Syntax}:
1996 @code{RESULT = BLE(I, J)}
1998 @item @emph{Arguments}:
1999 @multitable @columnfractions .15 .70
2000 @item @var{I} @tab Shall be of @code{INTEGER} type.
2001 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2005 @item @emph{Return value}:
2006 The return value is of type @code{LOGICAL} and of the default kind.
2008 @item @emph{See also}:
2009 @ref{BGT}, @ref{BGE}, @ref{BLT}
2015 @section @code{BLT} --- Bitwise less than
2017 @cindex bitwise comparison
2020 @item @emph{Description}:
2021 Determines whether an integral is a bitwise less than another.
2023 @item @emph{Standard}:
2024 Fortran 2008 and later
2029 @item @emph{Syntax}:
2030 @code{RESULT = BLT(I, J)}
2032 @item @emph{Arguments}:
2033 @multitable @columnfractions .15 .70
2034 @item @var{I} @tab Shall be of @code{INTEGER} type.
2035 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
2039 @item @emph{Return value}:
2040 The return value is of type @code{LOGICAL} and of the default kind.
2042 @item @emph{See also}:
2043 @ref{BGE}, @ref{BGT}, @ref{BLE}
2049 @section @code{BTEST} --- Bit test function
2051 @cindex bits, testing
2054 @item @emph{Description}:
2055 @code{BTEST(I,POS)} returns logical @code{.TRUE.} if the bit at @var{POS}
2056 in @var{I} is set. The counting of the bits starts at 0.
2058 @item @emph{Standard}:
2059 Fortran 95 and later
2064 @item @emph{Syntax}:
2065 @code{RESULT = BTEST(I, POS)}
2067 @item @emph{Arguments}:
2068 @multitable @columnfractions .15 .70
2069 @item @var{I} @tab The type shall be @code{INTEGER}.
2070 @item @var{POS} @tab The type shall be @code{INTEGER}.
2073 @item @emph{Return value}:
2074 The return value is of type @code{LOGICAL}
2076 @item @emph{Example}:
2079 integer :: i = 32768 + 1024 + 64
2083 bool = btest(i, pos)
2086 end program test_btest
2092 @section @code{C_ASSOCIATED} --- Status of a C pointer
2093 @fnindex C_ASSOCIATED
2094 @cindex association status, C pointer
2095 @cindex pointer, C association status
2098 @item @emph{Description}:
2099 @code{C_ASSOCIATED(c_prt_1[, c_ptr_2])} determines the status of the C pointer
2100 @var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}.
2102 @item @emph{Standard}:
2103 Fortran 2003 and later
2108 @item @emph{Syntax}:
2109 @code{RESULT = C_ASSOCIATED(c_prt_1[, c_ptr_2])}
2111 @item @emph{Arguments}:
2112 @multitable @columnfractions .15 .70
2113 @item @var{c_ptr_1} @tab Scalar of the type @code{C_PTR} or @code{C_FUNPTR}.
2114 @item @var{c_ptr_2} @tab (Optional) Scalar of the same type as @var{c_ptr_1}.
2117 @item @emph{Return value}:
2118 The return value is of type @code{LOGICAL}; it is @code{.false.} if either
2119 @var{c_ptr_1} is a C NULL pointer or if @var{c_ptr1} and @var{c_ptr_2}
2120 point to different addresses.
2122 @item @emph{Example}:
2124 subroutine association_test(a,b)
2125 use iso_c_binding, only: c_associated, c_loc, c_ptr
2129 if(c_associated(b, c_loc(a))) &
2130 stop 'b and a do not point to same target'
2131 end subroutine association_test
2134 @item @emph{See also}:
2135 @ref{C_LOC}, @ref{C_FUNLOC}
2140 @section @code{C_FUNLOC} --- Obtain the C address of a procedure
2142 @cindex pointer, C address of procedures
2145 @item @emph{Description}:
2146 @code{C_FUNLOC(x)} determines the C address of the argument.
2148 @item @emph{Standard}:
2149 Fortran 2003 and later
2154 @item @emph{Syntax}:
2155 @code{RESULT = C_FUNLOC(x)}
2157 @item @emph{Arguments}:
2158 @multitable @columnfractions .15 .70
2159 @item @var{x} @tab Interoperable function or pointer to such function.
2162 @item @emph{Return value}:
2163 The return value is of type @code{C_FUNPTR} and contains the C address
2166 @item @emph{Example}:
2172 subroutine sub(a) bind(c)
2182 subroutine my_routine(p) bind(c,name='myC_func')
2184 type(c_funptr), intent(in) :: p
2187 call my_routine(c_funloc(sub))
2191 @item @emph{See also}:
2192 @ref{C_ASSOCIATED}, @ref{C_LOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
2196 @node C_F_PROCPOINTER
2197 @section @code{C_F_PROCPOINTER} --- Convert C into Fortran procedure pointer
2198 @fnindex C_F_PROCPOINTER
2199 @cindex pointer, C address of pointers
2202 @item @emph{Description}:
2203 @code{C_F_PROCPOINTER(CPTR, FPTR)} Assign the target of the C function pointer
2204 @var{CPTR} to the Fortran procedure pointer @var{FPTR}.
2206 @item @emph{Standard}:
2207 Fortran 2003 and later
2212 @item @emph{Syntax}:
2213 @code{CALL C_F_PROCPOINTER(cptr, fptr)}
2215 @item @emph{Arguments}:
2216 @multitable @columnfractions .15 .70
2217 @item @var{CPTR} @tab scalar of the type @code{C_FUNPTR}. It is
2219 @item @var{FPTR} @tab procedure pointer interoperable with @var{cptr}. It is
2223 @item @emph{Example}:
2231 real(c_float), intent(in) :: a
2232 real(c_float) :: func
2236 function getIterFunc() bind(c,name="getIterFunc")
2238 type(c_funptr) :: getIterFunc
2241 type(c_funptr) :: cfunptr
2242 procedure(func), pointer :: myFunc
2243 cfunptr = getIterFunc()
2244 call c_f_procpointer(cfunptr, myFunc)
2248 @item @emph{See also}:
2249 @ref{C_LOC}, @ref{C_F_POINTER}
2254 @section @code{C_F_POINTER} --- Convert C into Fortran pointer
2255 @fnindex C_F_POINTER
2256 @cindex pointer, convert C to Fortran
2259 @item @emph{Description}:
2260 @code{C_F_POINTER(CPTR, FPTR[, SHAPE])} Assign the target the C pointer
2261 @var{CPTR} to the Fortran pointer @var{FPTR} and specify its
2264 @item @emph{Standard}:
2265 Fortran 2003 and later
2270 @item @emph{Syntax}:
2271 @code{CALL C_F_POINTER(CPTR, FPTR[, SHAPE])}
2273 @item @emph{Arguments}:
2274 @multitable @columnfractions .15 .70
2275 @item @var{CPTR} @tab scalar of the type @code{C_PTR}. It is
2277 @item @var{FPTR} @tab pointer interoperable with @var{cptr}. It is
2279 @item @var{SHAPE} @tab (Optional) Rank-one array of type @code{INTEGER}
2280 with @code{INTENT(IN)}. It shall be present
2281 if and only if @var{fptr} is an array. The size
2282 must be equal to the rank of @var{fptr}.
2285 @item @emph{Example}:
2291 subroutine my_routine(p) bind(c,name='myC_func')
2293 type(c_ptr), intent(out) :: p
2297 real,pointer :: a(:)
2298 call my_routine(cptr)
2299 call c_f_pointer(cptr, a, [12])
2303 @item @emph{See also}:
2304 @ref{C_LOC}, @ref{C_F_PROCPOINTER}
2309 @section @code{C_LOC} --- Obtain the C address of an object
2311 @cindex procedure pointer, convert C to Fortran
2314 @item @emph{Description}:
2315 @code{C_LOC(X)} determines the C address of the argument.
2317 @item @emph{Standard}:
2318 Fortran 2003 and later
2323 @item @emph{Syntax}:
2324 @code{RESULT = C_LOC(X)}
2326 @item @emph{Arguments}:
2327 @multitable @columnfractions .10 .75
2328 @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.
2332 @item @emph{Return value}:
2333 The return value is of type @code{C_PTR} and contains the C address
2336 @item @emph{Example}:
2338 subroutine association_test(a,b)
2339 use iso_c_binding, only: c_associated, c_loc, c_ptr
2343 if(c_associated(b, c_loc(a))) &
2344 stop 'b and a do not point to same target'
2345 end subroutine association_test
2348 @item @emph{See also}:
2349 @ref{C_ASSOCIATED}, @ref{C_FUNLOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
2354 @section @code{C_SIZEOF} --- Size in bytes of an expression
2356 @cindex expression size
2357 @cindex size of an expression
2360 @item @emph{Description}:
2361 @code{C_SIZEOF(X)} calculates the number of bytes of storage the
2362 expression @code{X} occupies.
2364 @item @emph{Standard}:
2368 Inquiry function of the module @code{ISO_C_BINDING}
2370 @item @emph{Syntax}:
2371 @code{N = C_SIZEOF(X)}
2373 @item @emph{Arguments}:
2374 @multitable @columnfractions .15 .70
2375 @item @var{X} @tab The argument shall be an interoperable data entity.
2378 @item @emph{Return value}:
2379 The return value is of type integer and of the system-dependent kind
2380 @code{C_SIZE_T} (from the @code{ISO_C_BINDING} module). Its value is the
2381 number of bytes occupied by the argument. If the argument has the
2382 @code{POINTER} attribute, the number of bytes of the storage area pointed
2383 to is returned. If the argument is of a derived type with @code{POINTER}
2384 or @code{ALLOCATABLE} components, the return value doesn't account for
2385 the sizes of the data pointed to by these components.
2387 @item @emph{Example}:
2391 real(c_float) :: r, s(5)
2392 print *, (c_sizeof(s)/c_sizeof(r) == 5)
2395 The example will print @code{.TRUE.} unless you are using a platform
2396 where default @code{REAL} variables are unusually padded.
2398 @item @emph{See also}:
2399 @ref{SIZEOF}, @ref{STORAGE_SIZE}
2404 @section @code{CEILING} --- Integer ceiling function
2407 @cindex rounding, ceiling
2410 @item @emph{Description}:
2411 @code{CEILING(A)} returns the least integer greater than or equal to @var{A}.
2413 @item @emph{Standard}:
2414 Fortran 95 and later
2419 @item @emph{Syntax}:
2420 @code{RESULT = CEILING(A [, KIND])}
2422 @item @emph{Arguments}:
2423 @multitable @columnfractions .15 .70
2424 @item @var{A} @tab The type shall be @code{REAL}.
2425 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2426 expression indicating the kind parameter of the result.
2429 @item @emph{Return value}:
2430 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
2431 and a default-kind @code{INTEGER} otherwise.
2433 @item @emph{Example}:
2435 program test_ceiling
2438 print *, ceiling(x) ! returns 64
2439 print *, ceiling(y) ! returns -63
2440 end program test_ceiling
2443 @item @emph{See also}:
2444 @ref{FLOOR}, @ref{NINT}
2451 @section @code{CHAR} --- Character conversion function
2453 @cindex conversion, to character
2456 @item @emph{Description}:
2457 @code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}.
2459 @item @emph{Standard}:
2460 Fortran 77 and later
2465 @item @emph{Syntax}:
2466 @code{RESULT = CHAR(I [, KIND])}
2468 @item @emph{Arguments}:
2469 @multitable @columnfractions .15 .70
2470 @item @var{I} @tab The type shall be @code{INTEGER}.
2471 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2472 expression indicating the kind parameter of the result.
2475 @item @emph{Return value}:
2476 The return value is of type @code{CHARACTER(1)}
2478 @item @emph{Example}:
2484 print *, i, c ! returns 'J'
2485 end program test_char
2488 @item @emph{Specific names}:
2489 @multitable @columnfractions .20 .20 .20 .25
2490 @item Name @tab Argument @tab Return type @tab Standard
2491 @item @code{CHAR(I)} @tab @code{INTEGER I} @tab @code{CHARACTER(LEN=1)} @tab F77 and later
2495 See @ref{ICHAR} for a discussion of converting between numerical values
2496 and formatted string representations.
2498 @item @emph{See also}:
2499 @ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR}
2506 @section @code{CHDIR} --- Change working directory
2508 @cindex system, working directory
2511 @item @emph{Description}:
2512 Change current working directory to a specified path.
2514 This intrinsic is provided in both subroutine and function forms; however,
2515 only one form can be used in any given program unit.
2517 @item @emph{Standard}:
2521 Subroutine, function
2523 @item @emph{Syntax}:
2524 @multitable @columnfractions .80
2525 @item @code{CALL CHDIR(NAME [, STATUS])}
2526 @item @code{STATUS = CHDIR(NAME)}
2529 @item @emph{Arguments}:
2530 @multitable @columnfractions .15 .70
2531 @item @var{NAME} @tab The type shall be @code{CHARACTER} of default
2532 kind and shall specify a valid path within the file system.
2533 @item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default
2534 kind. Returns 0 on success, and a system specific and nonzero error code
2538 @item @emph{Example}:
2541 CHARACTER(len=255) :: path
2543 WRITE(*,*) TRIM(path)
2546 WRITE(*,*) TRIM(path)
2550 @item @emph{See also}:
2557 @section @code{CHMOD} --- Change access permissions of files
2559 @cindex file system, change access mode
2562 @item @emph{Description}:
2563 @code{CHMOD} changes the permissions of a file. This function invokes
2564 @code{/bin/chmod} and might therefore not work on all platforms.
2566 This intrinsic is provided in both subroutine and function forms; however,
2567 only one form can be used in any given program unit.
2569 @item @emph{Standard}:
2573 Subroutine, function
2575 @item @emph{Syntax}:
2576 @multitable @columnfractions .80
2577 @item @code{CALL CHMOD(NAME, MODE[, STATUS])}
2578 @item @code{STATUS = CHMOD(NAME, MODE)}
2581 @item @emph{Arguments}:
2582 @multitable @columnfractions .15 .70
2584 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
2585 file name. Trailing blanks are ignored unless the character
2586 @code{achar(0)} is present, then all characters up to and excluding
2587 @code{achar(0)} are used as the file name.
2589 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind giving the
2590 file permission. @var{MODE} uses the same syntax as the @var{MODE}
2591 argument of @code{/bin/chmod}.
2593 @item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is
2594 @code{0} on success and nonzero otherwise.
2597 @item @emph{Return value}:
2598 In either syntax, @var{STATUS} is set to @code{0} on success and nonzero
2601 @item @emph{Example}:
2602 @code{CHMOD} as subroutine
2607 call chmod('test.dat','u+x',status)
2608 print *, 'Status: ', status
2609 end program chmod_test
2611 @code{CHMOD} as function:
2616 status = chmod('test.dat','u+x')
2617 print *, 'Status: ', status
2618 end program chmod_test
2626 @section @code{CMPLX} --- Complex conversion function
2628 @cindex complex numbers, conversion to
2629 @cindex conversion, to complex
2632 @item @emph{Description}:
2633 @code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to
2634 the real component. If @var{Y} is present it is converted to the imaginary
2635 component. If @var{Y} is not present then the imaginary component is set to
2636 0.0. If @var{X} is complex then @var{Y} must not be present.
2638 @item @emph{Standard}:
2639 Fortran 77 and later
2644 @item @emph{Syntax}:
2645 @code{RESULT = CMPLX(X [, Y [, KIND]])}
2647 @item @emph{Arguments}:
2648 @multitable @columnfractions .15 .70
2649 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
2651 @item @var{Y} @tab (Optional; only allowed if @var{X} is not
2652 @code{COMPLEX}.) May be @code{INTEGER} or @code{REAL}.
2653 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2654 expression indicating the kind parameter of the result.
2657 @item @emph{Return value}:
2658 The return value is of @code{COMPLEX} type, with a kind equal to
2659 @var{KIND} if it is specified. If @var{KIND} is not specified, the
2660 result is of the default @code{COMPLEX} kind, regardless of the kinds of
2661 @var{X} and @var{Y}.
2663 @item @emph{Example}:
2670 print *, z, cmplx(x)
2671 end program test_cmplx
2674 @item @emph{See also}:
2680 @node COMMAND_ARGUMENT_COUNT
2681 @section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
2682 @fnindex COMMAND_ARGUMENT_COUNT
2683 @cindex command-line arguments
2684 @cindex command-line arguments, number of
2685 @cindex arguments, to program
2688 @item @emph{Description}:
2689 @code{COMMAND_ARGUMENT_COUNT()} returns the number of arguments passed on the
2690 command line when the containing program was invoked.
2692 @item @emph{Standard}:
2693 Fortran 2003 and later
2698 @item @emph{Syntax}:
2699 @code{RESULT = COMMAND_ARGUMENT_COUNT()}
2701 @item @emph{Arguments}:
2702 @multitable @columnfractions .15 .70
2706 @item @emph{Return value}:
2707 The return value is an @code{INTEGER} of default kind.
2709 @item @emph{Example}:
2711 program test_command_argument_count
2713 count = command_argument_count()
2715 end program test_command_argument_count
2718 @item @emph{See also}:
2719 @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}
2724 @node COMPILER_OPTIONS
2725 @section @code{COMPILER_OPTIONS} --- Options passed to the compiler
2726 @fnindex COMPILER_OPTIONS
2727 @cindex flags inquiry function
2728 @cindex options inquiry function
2729 @cindex compiler flags inquiry function
2732 @item @emph{Description}:
2733 @code{COMPILER_OPTIONS()} returns a string with the options used for
2736 @item @emph{Standard}:
2740 Inquiry function of the module @code{ISO_FORTRAN_ENV}
2742 @item @emph{Syntax}:
2743 @code{STR = COMPILER_OPTIONS()}
2745 @item @emph{Arguments}:
2748 @item @emph{Return value}:
2749 The return value is a default-kind string with system-dependent length.
2750 It contains the compiler flags used to compile the file, which called
2751 the @code{COMPILER_OPTIONS} intrinsic.
2753 @item @emph{Example}:
2756 print '(4a)', 'This file was compiled by ', &
2757 compiler_version(), ' using the the options ', &
2762 @item @emph{See also}:
2763 @ref{COMPILER_VERSION}, @ref{ISO_FORTRAN_ENV}
2768 @node COMPILER_VERSION
2769 @section @code{COMPILER_VERSION} --- Compiler version string
2770 @fnindex COMPILER_VERSION
2771 @cindex compiler, name and version
2772 @cindex version of the compiler
2775 @item @emph{Description}:
2776 @code{COMPILER_VERSION()} returns a string with the name and the
2777 version of the compiler.
2779 @item @emph{Standard}:
2783 Inquiry function of the module @code{ISO_FORTRAN_ENV}
2785 @item @emph{Syntax}:
2786 @code{STR = COMPILER_VERSION()}
2788 @item @emph{Arguments}:
2791 @item @emph{Return value}:
2792 The return value is a default-kind string with system-dependent length.
2793 It contains the name of the compiler and its version number.
2795 @item @emph{Example}:
2798 print '(4a)', 'This file was compiled by ', &
2799 compiler_version(), ' using the the options ', &
2804 @item @emph{See also}:
2805 @ref{COMPILER_OPTIONS}, @ref{ISO_FORTRAN_ENV}
2811 @section @code{COMPLEX} --- Complex conversion function
2813 @cindex complex numbers, conversion to
2814 @cindex conversion, to complex
2817 @item @emph{Description}:
2818 @code{COMPLEX(X, Y)} returns a complex number where @var{X} is converted
2819 to the real component and @var{Y} is converted to the imaginary
2822 @item @emph{Standard}:
2828 @item @emph{Syntax}:
2829 @code{RESULT = COMPLEX(X, Y)}
2831 @item @emph{Arguments}:
2832 @multitable @columnfractions .15 .70
2833 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
2834 @item @var{Y} @tab The type may be @code{INTEGER} or @code{REAL}.
2837 @item @emph{Return value}:
2838 If @var{X} and @var{Y} are both of @code{INTEGER} type, then the return
2839 value is of default @code{COMPLEX} type.
2841 If @var{X} and @var{Y} are of @code{REAL} type, or one is of @code{REAL}
2842 type and one is of @code{INTEGER} type, then the return value is of
2843 @code{COMPLEX} type with a kind equal to that of the @code{REAL}
2844 argument with the highest precision.
2846 @item @emph{Example}:
2848 program test_complex
2851 print *, complex(i, x)
2852 end program test_complex
2855 @item @emph{See also}:
2862 @section @code{CONJG} --- Complex conjugate function
2865 @cindex complex conjugate
2868 @item @emph{Description}:
2869 @code{CONJG(Z)} returns the conjugate of @var{Z}. If @var{Z} is @code{(x, y)}
2870 then the result is @code{(x, -y)}
2872 @item @emph{Standard}:
2873 Fortran 77 and later, has overloads that are GNU extensions
2878 @item @emph{Syntax}:
2881 @item @emph{Arguments}:
2882 @multitable @columnfractions .15 .70
2883 @item @var{Z} @tab The type shall be @code{COMPLEX}.
2886 @item @emph{Return value}:
2887 The return value is of type @code{COMPLEX}.
2889 @item @emph{Example}:
2892 complex :: z = (2.0, 3.0)
2893 complex(8) :: dz = (2.71_8, -3.14_8)
2898 end program test_conjg
2901 @item @emph{Specific names}:
2902 @multitable @columnfractions .20 .20 .20 .25
2903 @item Name @tab Argument @tab Return type @tab Standard
2904 @item @code{CONJG(Z)} @tab @code{COMPLEX Z} @tab @code{COMPLEX} @tab GNU extension
2905 @item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension
2912 @section @code{COS} --- Cosine function
2918 @cindex trigonometric function, cosine
2922 @item @emph{Description}:
2923 @code{COS(X)} computes the cosine of @var{X}.
2925 @item @emph{Standard}:
2926 Fortran 77 and later, has overloads that are GNU extensions
2931 @item @emph{Syntax}:
2932 @code{RESULT = COS(X)}
2934 @item @emph{Arguments}:
2935 @multitable @columnfractions .15 .70
2936 @item @var{X} @tab The type shall be @code{REAL} or
2940 @item @emph{Return value}:
2941 The return value is of the same type and kind as @var{X}. The real part
2942 of the result is in radians. If @var{X} is of the type @code{REAL},
2943 the return value lies in the range @math{ -1 \leq \cos (x) \leq 1}.
2945 @item @emph{Example}:
2950 end program test_cos
2953 @item @emph{Specific names}:
2954 @multitable @columnfractions .20 .20 .20 .25
2955 @item Name @tab Argument @tab Return type @tab Standard
2956 @item @code{COS(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
2957 @item @code{DCOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
2958 @item @code{CCOS(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
2959 @item @code{ZCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
2960 @item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
2963 @item @emph{See also}:
2964 Inverse function: @ref{ACOS}
2971 @section @code{COSH} --- Hyperbolic cosine function
2974 @cindex hyperbolic cosine
2975 @cindex hyperbolic function, cosine
2976 @cindex cosine, hyperbolic
2979 @item @emph{Description}:
2980 @code{COSH(X)} computes the hyperbolic cosine of @var{X}.
2982 @item @emph{Standard}:
2983 Fortran 77 and later, for a complex argument Fortran 2008 or later
2988 @item @emph{Syntax}:
2991 @item @emph{Arguments}:
2992 @multitable @columnfractions .15 .70
2993 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
2996 @item @emph{Return value}:
2997 The return value has same type and kind as @var{X}. If @var{X} is
2998 complex, the imaginary part of the result is in radians. If @var{X}
2999 is @code{REAL}, the return value has a lower bound of one,
3000 @math{\cosh (x) \geq 1}.
3002 @item @emph{Example}:
3005 real(8) :: x = 1.0_8
3007 end program test_cosh
3010 @item @emph{Specific names}:
3011 @multitable @columnfractions .20 .20 .20 .25
3012 @item Name @tab Argument @tab Return type @tab Standard
3013 @item @code{COSH(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
3014 @item @code{DCOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
3017 @item @emph{See also}:
3018 Inverse function: @ref{ACOSH}
3025 @section @code{COUNT} --- Count function
3027 @cindex array, conditionally count elements
3028 @cindex array, element counting
3029 @cindex array, number of elements
3032 @item @emph{Description}:
3034 Counts the number of @code{.TRUE.} elements in a logical @var{MASK},
3035 or, if the @var{DIM} argument is supplied, counts the number of
3036 elements along each row of the array in the @var{DIM} direction.
3037 If the array has zero size, or all of the elements of @var{MASK} are
3038 @code{.FALSE.}, then the result is @code{0}.
3040 @item @emph{Standard}:
3041 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
3044 Transformational function
3046 @item @emph{Syntax}:
3047 @code{RESULT = COUNT(MASK [, DIM, KIND])}
3049 @item @emph{Arguments}:
3050 @multitable @columnfractions .15 .70
3051 @item @var{MASK} @tab The type shall be @code{LOGICAL}.
3052 @item @var{DIM} @tab (Optional) The type shall be @code{INTEGER}.
3053 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
3054 expression indicating the kind parameter of the result.
3057 @item @emph{Return value}:
3058 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
3059 @var{KIND} is absent, the return value is of default integer kind.
3060 If @var{DIM} is present, the result is an array with a rank one less
3061 than the rank of @var{ARRAY}, and a size corresponding to the shape
3062 of @var{ARRAY} with the @var{DIM} dimension removed.
3064 @item @emph{Example}:
3067 integer, dimension(2,3) :: a, b
3068 logical, dimension(2,3) :: mask
3069 a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
3070 b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
3071 print '(3i3)', a(1,:)
3072 print '(3i3)', a(2,:)
3074 print '(3i3)', b(1,:)
3075 print '(3i3)', b(2,:)
3078 print '(3l3)', mask(1,:)
3079 print '(3l3)', mask(2,:)
3081 print '(3i3)', count(mask)
3083 print '(3i3)', count(mask, 1)
3085 print '(3i3)', count(mask, 2)
3086 end program test_count
3093 @section @code{CPU_TIME} --- CPU elapsed time in seconds
3095 @cindex time, elapsed
3098 @item @emph{Description}:
3099 Returns a @code{REAL} value representing the elapsed CPU time in
3100 seconds. This is useful for testing segments of code to determine
3103 If a time source is available, time will be reported with microsecond
3104 resolution. If no time source is available, @var{TIME} is set to
3107 Note that @var{TIME} may contain a, system dependent, arbitrary offset
3108 and may not start with @code{0.0}. For @code{CPU_TIME}, the absolute
3109 value is meaningless, only differences between subsequent calls to
3110 this subroutine, as shown in the example below, should be used.
3113 @item @emph{Standard}:
3114 Fortran 95 and later
3119 @item @emph{Syntax}:
3120 @code{CALL CPU_TIME(TIME)}
3122 @item @emph{Arguments}:
3123 @multitable @columnfractions .15 .70
3124 @item @var{TIME} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}.
3127 @item @emph{Return value}:
3130 @item @emph{Example}:
3132 program test_cpu_time
3133 real :: start, finish
3134 call cpu_time(start)
3135 ! put code to test here
3136 call cpu_time(finish)
3137 print '("Time = ",f6.3," seconds.")',finish-start
3138 end program test_cpu_time
3141 @item @emph{See also}:
3142 @ref{SYSTEM_CLOCK}, @ref{DATE_AND_TIME}
3148 @section @code{CSHIFT} --- Circular shift elements of an array
3150 @cindex array, shift circularly
3151 @cindex array, permutation
3152 @cindex array, rotate
3155 @item @emph{Description}:
3156 @code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of
3157 @var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is omitted it is
3158 taken to be @code{1}. @var{DIM} is a scalar of type @code{INTEGER} in the
3159 range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}.
3160 If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted
3161 by @var{SHIFT} places. If rank is greater than one, then all complete rank one
3162 sections of @var{ARRAY} along the given dimension are shifted. Elements
3163 shifted out one end of each rank one section are shifted back in the other end.
3165 @item @emph{Standard}:
3166 Fortran 95 and later
3169 Transformational function
3171 @item @emph{Syntax}:
3172 @code{RESULT = CSHIFT(ARRAY, SHIFT [, DIM])}
3174 @item @emph{Arguments}:
3175 @multitable @columnfractions .15 .70
3176 @item @var{ARRAY} @tab Shall be an array of any type.
3177 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
3178 @item @var{DIM} @tab The type shall be @code{INTEGER}.
3181 @item @emph{Return value}:
3182 Returns an array of same type and rank as the @var{ARRAY} argument.
3184 @item @emph{Example}:
3187 integer, dimension(3,3) :: a
3188 a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
3189 print '(3i3)', a(1,:)
3190 print '(3i3)', a(2,:)
3191 print '(3i3)', a(3,:)
3192 a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)
3194 print '(3i3)', a(1,:)
3195 print '(3i3)', a(2,:)
3196 print '(3i3)', a(3,:)
3197 end program test_cshift
3204 @section @code{CTIME} --- Convert a time into a string
3206 @cindex time, conversion to string
3207 @cindex conversion, to string
3210 @item @emph{Description}:
3211 @code{CTIME} converts a system time value, such as returned by
3212 @code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995}.
3214 This intrinsic is provided in both subroutine and function forms; however,
3215 only one form can be used in any given program unit.
3217 @item @emph{Standard}:
3221 Subroutine, function
3223 @item @emph{Syntax}:
3224 @multitable @columnfractions .80
3225 @item @code{CALL CTIME(TIME, RESULT)}.
3226 @item @code{RESULT = CTIME(TIME)}, (not recommended).
3229 @item @emph{Arguments}:
3230 @multitable @columnfractions .15 .70
3231 @item @var{TIME} @tab The type shall be of type @code{INTEGER(KIND=8)}.
3232 @item @var{RESULT} @tab The type shall be of type @code{CHARACTER} and
3236 @item @emph{Return value}:
3237 The converted date and time as a string.
3239 @item @emph{Example}:
3243 character(len=30) :: date
3246 ! Do something, main part of the program
3249 print *, 'Program was started on ', date
3250 end program test_ctime
3253 @item @emph{See Also}:
3254 @ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
3260 @section @code{DATE_AND_TIME} --- Date and time subroutine
3261 @fnindex DATE_AND_TIME
3262 @cindex date, current
3263 @cindex current date
3264 @cindex time, current
3265 @cindex current time
3268 @item @emph{Description}:
3269 @code{DATE_AND_TIME(DATE, TIME, ZONE, VALUES)} gets the corresponding date and
3270 time information from the real-time system clock. @var{DATE} is
3271 @code{INTENT(OUT)} and has form ccyymmdd. @var{TIME} is @code{INTENT(OUT)} and
3272 has form hhmmss.sss. @var{ZONE} is @code{INTENT(OUT)} and has form (+-)hhmm,
3273 representing the difference with respect to Coordinated Universal Time (UTC).
3274 Unavailable time and date parameters return blanks.
3276 @var{VALUES} is @code{INTENT(OUT)} and provides the following:
3278 @multitable @columnfractions .15 .30 .40
3279 @item @tab @code{VALUE(1)}: @tab The year
3280 @item @tab @code{VALUE(2)}: @tab The month
3281 @item @tab @code{VALUE(3)}: @tab The day of the month
3282 @item @tab @code{VALUE(4)}: @tab Time difference with UTC in minutes
3283 @item @tab @code{VALUE(5)}: @tab The hour of the day
3284 @item @tab @code{VALUE(6)}: @tab The minutes of the hour
3285 @item @tab @code{VALUE(7)}: @tab The seconds of the minute
3286 @item @tab @code{VALUE(8)}: @tab The milliseconds of the second
3289 @item @emph{Standard}:
3290 Fortran 95 and later
3295 @item @emph{Syntax}:
3296 @code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])}
3298 @item @emph{Arguments}:
3299 @multitable @columnfractions .15 .70
3300 @item @var{DATE} @tab (Optional) The type shall be @code{CHARACTER(LEN=8)}
3301 or larger, and of default kind.
3302 @item @var{TIME} @tab (Optional) The type shall be @code{CHARACTER(LEN=10)}
3303 or larger, and of default kind.
3304 @item @var{ZONE} @tab (Optional) The type shall be @code{CHARACTER(LEN=5)}
3305 or larger, and of default kind.
3306 @item @var{VALUES}@tab (Optional) The type shall be @code{INTEGER(8)}.
3309 @item @emph{Return value}:
3312 @item @emph{Example}:
3314 program test_time_and_date
3315 character(8) :: date
3316 character(10) :: time
3317 character(5) :: zone
3318 integer,dimension(8) :: values
3319 ! using keyword arguments
3320 call date_and_time(date,time,zone,values)
3321 call date_and_time(DATE=date,ZONE=zone)
3322 call date_and_time(TIME=time)
3323 call date_and_time(VALUES=values)
3324 print '(a,2x,a,2x,a)', date, time, zone
3325 print '(8i5))', values
3326 end program test_time_and_date
3329 @item @emph{See also}:
3330 @ref{CPU_TIME}, @ref{SYSTEM_CLOCK}
3336 @section @code{DBLE} --- Double conversion function
3338 @cindex conversion, to real
3341 @item @emph{Description}:
3342 @code{DBLE(A)} Converts @var{A} to double precision real type.
3344 @item @emph{Standard}:
3345 Fortran 77 and later
3350 @item @emph{Syntax}:
3351 @code{RESULT = DBLE(A)}
3353 @item @emph{Arguments}:
3354 @multitable @columnfractions .15 .70
3355 @item @var{A} @tab The type shall be @code{INTEGER}, @code{REAL},
3359 @item @emph{Return value}:
3360 The return value is of type double precision real.
3362 @item @emph{Example}:
3367 complex :: z = (2.3,1.14)
3368 print *, dble(x), dble(i), dble(z)
3369 end program test_dble
3372 @item @emph{See also}:
3379 @section @code{DCMPLX} --- Double complex conversion function
3381 @cindex complex numbers, conversion to
3382 @cindex conversion, to complex
3385 @item @emph{Description}:
3386 @code{DCMPLX(X [,Y])} returns a double complex number where @var{X} is
3387 converted to the real component. If @var{Y} is present it is converted to the
3388 imaginary component. If @var{Y} is not present then the imaginary component is
3389 set to 0.0. If @var{X} is complex then @var{Y} must not be present.
3391 @item @emph{Standard}:
3397 @item @emph{Syntax}:
3398 @code{RESULT = DCMPLX(X [, Y])}
3400 @item @emph{Arguments}:
3401 @multitable @columnfractions .15 .70
3402 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
3404 @item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX}.) May be
3405 @code{INTEGER} or @code{REAL}.
3408 @item @emph{Return value}:
3409 The return value is of type @code{COMPLEX(8)}
3411 @item @emph{Example}:
3421 print *, dcmplx(x,i)
3422 end program test_dcmplx
3428 @section @code{DIGITS} --- Significant binary digits function
3430 @cindex model representation, significant digits
3433 @item @emph{Description}:
3434 @code{DIGITS(X)} returns the number of significant binary digits of the internal
3435 model representation of @var{X}. For example, on a system using a 32-bit
3436 floating point representation, a default real number would likely return 24.
3438 @item @emph{Standard}:
3439 Fortran 95 and later
3444 @item @emph{Syntax}:
3445 @code{RESULT = DIGITS(X)}
3447 @item @emph{Arguments}:
3448 @multitable @columnfractions .15 .70
3449 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
3452 @item @emph{Return value}:
3453 The return value is of type @code{INTEGER}.
3455 @item @emph{Example}:
3458 integer :: i = 12345
3464 end program test_digits
3471 @section @code{DIM} --- Positive difference
3475 @cindex positive difference
3478 @item @emph{Description}:
3479 @code{DIM(X,Y)} returns the difference @code{X-Y} if the result is positive;
3480 otherwise returns zero.
3482 @item @emph{Standard}:
3483 Fortran 77 and later
3488 @item @emph{Syntax}:
3489 @code{RESULT = DIM(X, Y)}
3491 @item @emph{Arguments}:
3492 @multitable @columnfractions .15 .70
3493 @item @var{X} @tab The type shall be @code{INTEGER} or @code{REAL}
3494 @item @var{Y} @tab The type shall be the same type and kind as @var{X}.
3497 @item @emph{Return value}:
3498 The return value is of type @code{INTEGER} or @code{REAL}.
3500 @item @emph{Example}:
3506 x = dim(4.345_8, 2.111_8)
3509 end program test_dim
3512 @item @emph{Specific names}:
3513 @multitable @columnfractions .20 .20 .20 .25
3514 @item Name @tab Argument @tab Return type @tab Standard
3515 @item @code{DIM(X,Y)} @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
3516 @item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X, Y} @tab @code{INTEGER(4)} @tab Fortran 77 and later
3517 @item @code{DDIM(X,Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab Fortran 77 and later
3524 @section @code{DOT_PRODUCT} --- Dot product function
3525 @fnindex DOT_PRODUCT
3527 @cindex vector product
3528 @cindex product, vector
3531 @item @emph{Description}:
3532 @code{DOT_PRODUCT(VECTOR_A, VECTOR_B)} computes the dot product multiplication
3533 of two vectors @var{VECTOR_A} and @var{VECTOR_B}. The two vectors may be
3534 either numeric or logical and must be arrays of rank one and of equal size. If
3535 the vectors are @code{INTEGER} or @code{REAL}, the result is
3536 @code{SUM(VECTOR_A*VECTOR_B)}. If the vectors are @code{COMPLEX}, the result
3537 is @code{SUM(CONJG(VECTOR_A)*VECTOR_B)}. If the vectors are @code{LOGICAL},
3538 the result is @code{ANY(VECTOR_A .AND. VECTOR_B)}.
3540 @item @emph{Standard}:
3541 Fortran 95 and later
3544 Transformational function
3546 @item @emph{Syntax}:
3547 @code{RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)}
3549 @item @emph{Arguments}:
3550 @multitable @columnfractions .15 .70
3551 @item @var{VECTOR_A} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
3552 @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.
3555 @item @emph{Return value}:
3556 If the arguments are numeric, the return value is a scalar of numeric type,
3557 @code{INTEGER}, @code{REAL}, or @code{COMPLEX}. If the arguments are
3558 @code{LOGICAL}, the return value is @code{.TRUE.} or @code{.FALSE.}.
3560 @item @emph{Example}:
3562 program test_dot_prod
3563 integer, dimension(3) :: a, b
3570 print *, dot_product(a,b)
3571 end program test_dot_prod
3578 @section @code{DPROD} --- Double product function
3580 @cindex product, double-precision
3583 @item @emph{Description}:
3584 @code{DPROD(X,Y)} returns the product @code{X*Y}.
3586 @item @emph{Standard}:
3587 Fortran 77 and later
3592 @item @emph{Syntax}:
3593 @code{RESULT = DPROD(X, Y)}
3595 @item @emph{Arguments}:
3596 @multitable @columnfractions .15 .70
3597 @item @var{X} @tab The type shall be @code{REAL}.
3598 @item @var{Y} @tab The type shall be @code{REAL}.
3601 @item @emph{Return value}:
3602 The return value is of type @code{REAL(8)}.
3604 @item @emph{Example}:
3612 end program test_dprod
3615 @item @emph{Specific names}:
3616 @multitable @columnfractions .20 .20 .20 .25
3617 @item Name @tab Argument @tab Return type @tab Standard
3618 @item @code{DPROD(X,Y)} @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
3625 @section @code{DREAL} --- Double real part function
3627 @cindex complex numbers, real part
3630 @item @emph{Description}:
3631 @code{DREAL(Z)} returns the real part of complex variable @var{Z}.
3633 @item @emph{Standard}:
3639 @item @emph{Syntax}:
3640 @code{RESULT = DREAL(A)}
3642 @item @emph{Arguments}:
3643 @multitable @columnfractions .15 .70
3644 @item @var{A} @tab The type shall be @code{COMPLEX(8)}.
3647 @item @emph{Return value}:
3648 The return value is of type @code{REAL(8)}.
3650 @item @emph{Example}:
3653 complex(8) :: z = (1.3_8,7.2_8)
3655 end program test_dreal
3658 @item @emph{See also}:
3666 @section @code{DSHIFTL} --- Combined left shift
3668 @cindex left shift, combined
3672 @item @emph{Description}:
3673 @code{DSHIFTL(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
3674 rightmost @var{SHIFT} bits of the result are the leftmost @var{SHIFT}
3675 bits of @var{J}, and the remaining bits are the rightmost bits of
3678 @item @emph{Standard}:
3679 Fortran 2008 and later
3684 @item @emph{Syntax}:
3685 @code{RESULT = DSHIFTL(I, J, SHIFT)}
3687 @item @emph{Arguments}:
3688 @multitable @columnfractions .15 .70
3689 @item @var{I} @tab Shall be of type @code{INTEGER}.
3690 @item @var{J} @tab Shall be of type @code{INTEGER}, and of the same kind
3692 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}.
3695 @item @emph{Return value}:
3696 The return value has same type and kind as @var{I}.
3698 @item @emph{See also}:
3706 @section @code{DSHIFTR} --- Combined right shift
3708 @cindex right shift, combined
3709 @cindex shift, right
3712 @item @emph{Description}:
3713 @code{DSHIFTR(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
3714 leftmost @var{SHIFT} bits of the result are the rightmost @var{SHIFT}
3715 bits of @var{I}, and the remaining bits are the leftmost bits of
3718 @item @emph{Standard}:
3719 Fortran 2008 and later
3724 @item @emph{Syntax}:
3725 @code{RESULT = DSHIFTR(I, J, SHIFT)}
3727 @item @emph{Arguments}:
3728 @multitable @columnfractions .15 .70
3729 @item @var{I} @tab Shall be of type @code{INTEGER}.
3730 @item @var{J} @tab Shall be of type @code{INTEGER}, and of the same kind
3732 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}.
3735 @item @emph{Return value}:
3736 The return value has same type and kind as @var{I}.
3738 @item @emph{See also}:
3746 @section @code{DTIME} --- Execution time subroutine (or function)
3748 @cindex time, elapsed
3749 @cindex elapsed time
3752 @item @emph{Description}:
3753 @code{DTIME(VALUES, TIME)} initially returns the number of seconds of runtime
3754 since the start of the process's execution in @var{TIME}. @var{VALUES}
3755 returns the user and system components of this time in @code{VALUES(1)} and
3756 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) +
3759 Subsequent invocations of @code{DTIME} return values accumulated since the
3760 previous invocation.
3762 On some systems, the underlying timings are represented using types with
3763 sufficiently small limits that overflows (wrap around) are possible, such as
3764 32-bit types. Therefore, the values returned by this intrinsic might be, or
3765 become, negative, or numerically less than previous values, during a single
3766 run of the compiled program.
3768 Please note, that this implementation is thread safe if used within OpenMP
3769 directives, i.e., its state will be consistent while called from multiple
3770 threads. However, if @code{DTIME} is called from multiple threads, the result
3771 is still the time since the last invocation. This may not give the intended
3772 results. If possible, use @code{CPU_TIME} instead.
3774 This intrinsic is provided in both subroutine and function forms; however,
3775 only one form can be used in any given program unit.
3777 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
3779 @multitable @columnfractions .15 .30 .40
3780 @item @tab @code{VALUES(1)}: @tab User time in seconds.
3781 @item @tab @code{VALUES(2)}: @tab System time in seconds.
3782 @item @tab @code{TIME}: @tab Run time since start in seconds.
3785 @item @emph{Standard}:
3789 Subroutine, function
3791 @item @emph{Syntax}:
3792 @multitable @columnfractions .80
3793 @item @code{CALL DTIME(VALUES, TIME)}.
3794 @item @code{TIME = DTIME(VALUES)}, (not recommended).
3797 @item @emph{Arguments}:
3798 @multitable @columnfractions .15 .70
3799 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
3800 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
3803 @item @emph{Return value}:
3804 Elapsed time in seconds since the last invocation or since the start of program
3805 execution if not called before.
3807 @item @emph{Example}:
3811 real, dimension(2) :: tarray
3813 call dtime(tarray, result)
3817 do i=1,100000000 ! Just a delay
3820 call dtime(tarray, result)
3824 end program test_dtime
3827 @item @emph{See also}:
3835 @section @code{EOSHIFT} --- End-off shift elements of an array
3837 @cindex array, shift
3840 @item @emph{Description}:
3841 @code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on
3842 elements of @var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is
3843 omitted it is taken to be @code{1}. @var{DIM} is a scalar of type
3844 @code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the
3845 rank of @var{ARRAY}. If the rank of @var{ARRAY} is one, then all elements of
3846 @var{ARRAY} are shifted by @var{SHIFT} places. If rank is greater than one,
3847 then all complete rank one sections of @var{ARRAY} along the given dimension are
3848 shifted. Elements shifted out one end of each rank one section are dropped. If
3849 @var{BOUNDARY} is present then the corresponding value of from @var{BOUNDARY}
3850 is copied back in the other end. If @var{BOUNDARY} is not present then the
3851 following are copied in depending on the type of @var{ARRAY}.
3853 @multitable @columnfractions .15 .80
3854 @item @emph{Array Type} @tab @emph{Boundary Value}
3855 @item Numeric @tab 0 of the type and kind of @var{ARRAY}.
3856 @item Logical @tab @code{.FALSE.}.
3857 @item Character(@var{len}) @tab @var{len} blanks.
3860 @item @emph{Standard}:
3861 Fortran 95 and later
3864 Transformational function
3866 @item @emph{Syntax}:
3867 @code{RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])}
3869 @item @emph{Arguments}:
3870 @multitable @columnfractions .15 .70
3871 @item @var{ARRAY} @tab May be any type, not scalar.
3872 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
3873 @item @var{BOUNDARY} @tab Same type as @var{ARRAY}.
3874 @item @var{DIM} @tab The type shall be @code{INTEGER}.
3877 @item @emph{Return value}:
3878 Returns an array of same type and rank as the @var{ARRAY} argument.
3880 @item @emph{Example}:
3882 program test_eoshift
3883 integer, dimension(3,3) :: a
3884 a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
3885 print '(3i3)', a(1,:)
3886 print '(3i3)', a(2,:)
3887 print '(3i3)', a(3,:)
3888 a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
3890 print '(3i3)', a(1,:)
3891 print '(3i3)', a(2,:)
3892 print '(3i3)', a(3,:)
3893 end program test_eoshift
3900 @section @code{EPSILON} --- Epsilon function
3902 @cindex model representation, epsilon
3905 @item @emph{Description}:
3906 @code{EPSILON(X)} returns the smallest number @var{E} of the same kind
3907 as @var{X} such that @math{1 + E > 1}.
3909 @item @emph{Standard}:
3910 Fortran 95 and later
3915 @item @emph{Syntax}:
3916 @code{RESULT = EPSILON(X)}
3918 @item @emph{Arguments}:
3919 @multitable @columnfractions .15 .70
3920 @item @var{X} @tab The type shall be @code{REAL}.
3923 @item @emph{Return value}:
3924 The return value is of same type as the argument.
3926 @item @emph{Example}:
3928 program test_epsilon
3933 end program test_epsilon
3940 @section @code{ERF} --- Error function
3942 @cindex error function
3945 @item @emph{Description}:
3946 @code{ERF(X)} computes the error function of @var{X}.
3948 @item @emph{Standard}:
3949 Fortran 2008 and later
3954 @item @emph{Syntax}:
3955 @code{RESULT = ERF(X)}
3957 @item @emph{Arguments}:
3958 @multitable @columnfractions .15 .70
3959 @item @var{X} @tab The type shall be @code{REAL}.
3962 @item @emph{Return value}:
3963 The return value is of type @code{REAL}, of the same kind as
3964 @var{X} and lies in the range @math{-1 \leq erf (x) \leq 1 }.
3966 @item @emph{Example}:
3969 real(8) :: x = 0.17_8
3971 end program test_erf
3974 @item @emph{Specific names}:
3975 @multitable @columnfractions .20 .20 .20 .25
3976 @item Name @tab Argument @tab Return type @tab Standard
3977 @item @code{DERF(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
3984 @section @code{ERFC} --- Error function
3986 @cindex error function, complementary
3989 @item @emph{Description}:
3990 @code{ERFC(X)} computes the complementary error function of @var{X}.
3992 @item @emph{Standard}:
3993 Fortran 2008 and later
3998 @item @emph{Syntax}:
3999 @code{RESULT = ERFC(X)}
4001 @item @emph{Arguments}:
4002 @multitable @columnfractions .15 .70
4003 @item @var{X} @tab The type shall be @code{REAL}.
4006 @item @emph{Return value}:
4007 The return value is of type @code{REAL} and of the same kind as @var{X}.
4008 It lies in the range @math{ 0 \leq erfc (x) \leq 2 }.
4010 @item @emph{Example}:
4013 real(8) :: x = 0.17_8
4015 end program test_erfc
4018 @item @emph{Specific names}:
4019 @multitable @columnfractions .20 .20 .20 .25
4020 @item Name @tab Argument @tab Return type @tab Standard
4021 @item @code{DERFC(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
4028 @section @code{ERFC_SCALED} --- Error function
4029 @fnindex ERFC_SCALED
4030 @cindex error function, complementary, exponentially-scaled
4033 @item @emph{Description}:
4034 @code{ERFC_SCALED(X)} computes the exponentially-scaled complementary
4035 error function of @var{X}.
4037 @item @emph{Standard}:
4038 Fortran 2008 and later
4043 @item @emph{Syntax}:
4044 @code{RESULT = ERFC_SCALED(X)}
4046 @item @emph{Arguments}:
4047 @multitable @columnfractions .15 .70
4048 @item @var{X} @tab The type shall be @code{REAL}.
4051 @item @emph{Return value}:
4052 The return value is of type @code{REAL} and of the same kind as @var{X}.
4054 @item @emph{Example}:
4056 program test_erfc_scaled
4057 real(8) :: x = 0.17_8
4059 end program test_erfc_scaled
4066 @section @code{ETIME} --- Execution time subroutine (or function)
4068 @cindex time, elapsed
4071 @item @emph{Description}:
4072 @code{ETIME(VALUES, TIME)} returns the number of seconds of runtime
4073 since the start of the process's execution in @var{TIME}. @var{VALUES}
4074 returns the user and system components of this time in @code{VALUES(1)} and
4075 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) + VALUES(2)}.
4077 On some systems, the underlying timings are represented using types with
4078 sufficiently small limits that overflows (wrap around) are possible, such as
4079 32-bit types. Therefore, the values returned by this intrinsic might be, or
4080 become, negative, or numerically less than previous values, during a single
4081 run of the compiled program.
4083 This intrinsic is provided in both subroutine and function forms; however,
4084 only one form can be used in any given program unit.
4086 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
4088 @multitable @columnfractions .15 .30 .60
4089 @item @tab @code{VALUES(1)}: @tab User time in seconds.
4090 @item @tab @code{VALUES(2)}: @tab System time in seconds.
4091 @item @tab @code{TIME}: @tab Run time since start in seconds.
4094 @item @emph{Standard}:
4098 Subroutine, function
4100 @item @emph{Syntax}:
4101 @multitable @columnfractions .80
4102 @item @code{CALL ETIME(VALUES, TIME)}.
4103 @item @code{TIME = ETIME(VALUES)}, (not recommended).
4106 @item @emph{Arguments}:
4107 @multitable @columnfractions .15 .70
4108 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
4109 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
4112 @item @emph{Return value}:
4113 Elapsed time in seconds since the start of program execution.
4115 @item @emph{Example}:
4119 real, dimension(2) :: tarray
4121 call ETIME(tarray, result)
4125 do i=1,100000000 ! Just a delay
4128 call ETIME(tarray, result)
4132 end program test_etime
4135 @item @emph{See also}:
4142 @node EXECUTE_COMMAND_LINE
4143 @section @code{EXECUTE_COMMAND_LINE} --- Execute a shell command
4144 @fnindex EXECUTE_COMMAND_LINE
4145 @cindex system, system call
4146 @cindex command line
4149 @item @emph{Description}:
4150 @code{EXECUTE_COMMAND_LINE} runs a shell command, synchronously or
4153 The @code{COMMAND} argument is passed to the shell and executed, using
4154 the C library's @code{system} call. (The shell is @code{sh} on Unix
4155 systems, and @code{cmd.exe} on Windows.) If @code{WAIT} is present
4156 and has the value false, the execution of the command is asynchronous
4157 if the system supports it; otherwise, the command is executed
4160 The three last arguments allow the user to get status information. After
4161 synchronous execution, @code{EXITSTAT} contains the integer exit code of
4162 the command, as returned by @code{system}. @code{CMDSTAT} is set to zero
4163 if the command line was executed (whatever its exit status was).
4164 @code{CMDMSG} is assigned an error message if an error has occurred.
4166 Note that the @code{system} call need not be thread-safe. It is the
4167 responsibility of the user to ensure that @code{system} is not called
4170 @item @emph{Standard}:
4171 Fortran 2008 and later
4176 @item @emph{Syntax}:
4177 @code{CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])}
4179 @item @emph{Arguments}:
4180 @multitable @columnfractions .15 .70
4181 @item @var{COMMAND} @tab Shall be a default @code{CHARACTER} scalar.
4182 @item @var{WAIT} @tab (Optional) Shall be a default @code{LOGICAL} scalar.
4183 @item @var{EXITSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
4185 @item @var{CMDSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
4187 @item @var{CMDMSG} @tab (Optional) Shall be an @code{CHARACTER} scalar of the
4191 @item @emph{Example}:
4196 call execute_command_line ("external_prog.exe", exitstat=i)
4197 print *, "Exit status of external_prog.exe was ", i
4199 call execute_command_line ("reindex_files.exe", wait=.false.)
4200 print *, "Now reindexing files in the background"
4202 end program test_exec
4208 Because this intrinsic is implemented in terms of the @code{system}
4209 function call, its behavior with respect to signaling is processor
4210 dependent. In particular, on POSIX-compliant systems, the SIGINT and
4211 SIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As
4212 such, if the parent process is terminated, the child process might not be
4213 terminated alongside.
4216 @item @emph{See also}:
4223 @section @code{EXIT} --- Exit the program with status.
4225 @cindex program termination
4226 @cindex terminate program
4229 @item @emph{Description}:
4230 @code{EXIT} causes immediate termination of the program with status. If status
4231 is omitted it returns the canonical @emph{success} for the system. All Fortran
4232 I/O units are closed.
4234 @item @emph{Standard}:
4240 @item @emph{Syntax}:
4241 @code{CALL EXIT([STATUS])}
4243 @item @emph{Arguments}:
4244 @multitable @columnfractions .15 .70
4245 @item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind.
4248 @item @emph{Return value}:
4249 @code{STATUS} is passed to the parent process on exit.
4251 @item @emph{Example}:
4254 integer :: STATUS = 0
4255 print *, 'This program is going to exit.'
4257 end program test_exit
4260 @item @emph{See also}:
4261 @ref{ABORT}, @ref{KILL}
4267 @section @code{EXP} --- Exponential function
4273 @cindex exponential function
4274 @cindex logarithmic function, inverse
4277 @item @emph{Description}:
4278 @code{EXP(X)} computes the base @math{e} exponential of @var{X}.
4280 @item @emph{Standard}:
4281 Fortran 77 and later, has overloads that are GNU extensions
4286 @item @emph{Syntax}:
4287 @code{RESULT = EXP(X)}
4289 @item @emph{Arguments}:
4290 @multitable @columnfractions .15 .70
4291 @item @var{X} @tab The type shall be @code{REAL} or
4295 @item @emph{Return value}:
4296 The return value has same type and kind as @var{X}.
4298 @item @emph{Example}:
4303 end program test_exp
4306 @item @emph{Specific names}:
4307 @multitable @columnfractions .20 .20 .20 .25
4308 @item Name @tab Argument @tab Return type @tab Standard
4309 @item @code{EXP(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later
4310 @item @code{DEXP(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later
4311 @item @code{CEXP(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
4312 @item @code{ZEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4313 @item @code{CDEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
4320 @section @code{EXPONENT} --- Exponent function
4322 @cindex real number, exponent
4323 @cindex floating point, exponent
4326 @item @emph{Description}:
4327 @code{EXPONENT(X)} returns the value of the exponent part of @var{X}. If @var{X}
4328 is zero the value returned is zero.
4330 @item @emph{Standard}:
4331 Fortran 95 and later
4336 @item @emph{Syntax}:
4337 @code{RESULT = EXPONENT(X)}
4339 @item @emph{Arguments}:
4340 @multitable @columnfractions .15 .70
4341 @item @var{X} @tab The type shall be @code{REAL}.
4344 @item @emph{Return value}:
4345 The return value is of type default @code{INTEGER}.
4347 @item @emph{Example}:
4349 program test_exponent
4354 print *, exponent(0.0)
4355 end program test_exponent
4361 @node EXTENDS_TYPE_OF
4362 @section @code{EXTENDS_TYPE_OF} --- Query dynamic type for extension
4363 @fnindex EXTENDS_TYPE_OF
4366 @item @emph{Description}:
4367 Query dynamic type for extension.
4369 @item @emph{Standard}:
4370 Fortran 2003 and later
4375 @item @emph{Syntax}:
4376 @code{RESULT = EXTENDS_TYPE_OF(A, MOLD)}
4378 @item @emph{Arguments}:
4379 @multitable @columnfractions .15 .70
4380 @item @var{A} @tab Shall be an object of extensible declared type or
4381 unlimited polymorphic.
4382 @item @var{MOLD} @tab Shall be an object of extensible declared type or
4383 unlimited polymorphic.
4386 @item @emph{Return value}:
4387 The return value is a scalar of type default logical. It is true if and only if
4388 the dynamic type of A is an extension type of the dynamic type of MOLD.
4391 @item @emph{See also}:
4398 @section @code{FDATE} --- Get the current time as a string
4400 @cindex time, current
4401 @cindex current time
4402 @cindex date, current
4403 @cindex current date
4406 @item @emph{Description}:
4407 @code{FDATE(DATE)} returns the current date (using the same format as
4408 @code{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE,