OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [fortran/] [intrinsic.texi] - Blame information for rev 327

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 285 jeremybenn
@ignore
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.
6
 
7
Permission is granted to copy, distribute and/or modify this document
8
under the terms of the GNU Free Documentation License, Version 1.2 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.
13
 
14
 
15
Some basic guidelines for editing this document:
16
 
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.
22
 
23
 
24
@end ignore
25
 
26
@tex
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}
33
@end tex
34
 
35
 
36
@node Intrinsic Procedures
37
@chapter Intrinsic Procedures
38
@cindex intrinsic procedures
39
 
40
@menu
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,     Hyperbolic arccosine 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,     Hyperbolic arcsine 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,     Hyperbolic arctangent 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{BIT_SIZE}:      BIT_SIZE,  Bit size inquiry function
71
* @code{BTEST}:         BTEST,     Bit test function
72
* @code{C_ASSOCIATED}:  C_ASSOCIATED, Status of a C pointer
73
* @code{C_F_POINTER}:   C_F_POINTER, Convert C into Fortran pointer
74
* @code{C_F_PROCPOINTER}: C_F_PROCPOINTER, Convert C into Fortran procedure pointer
75
* @code{C_FUNLOC}:      C_FUNLOC,  Obtain the C address of a procedure
76
* @code{C_LOC}:         C_LOC,     Obtain the C address of an object
77
* @code{C_SIZEOF}:      C_SIZEOF,  Size in bytes of an expression
78
* @code{CEILING}:       CEILING,   Integer ceiling function
79
* @code{CHAR}:          CHAR,      Integer-to-character conversion function
80
* @code{CHDIR}:         CHDIR,     Change working directory
81
* @code{CHMOD}:         CHMOD,     Change access permissions of files
82
* @code{CMPLX}:         CMPLX,     Complex conversion function
83
* @code{COMMAND_ARGUMENT_COUNT}: COMMAND_ARGUMENT_COUNT, Get number of command line arguments
84
* @code{COMPLEX}:       COMPLEX,   Complex conversion function
85
* @code{CONJG}:         CONJG,     Complex conjugate function
86
* @code{COS}:           COS,       Cosine function
87
* @code{COSH}:          COSH,      Hyperbolic cosine function
88
* @code{COUNT}:         COUNT,     Count occurrences of TRUE in an array
89
* @code{CPU_TIME}:      CPU_TIME,  CPU time subroutine
90
* @code{CSHIFT}:        CSHIFT,    Circular shift elements of an array
91
* @code{CTIME}:         CTIME,     Subroutine (or function) to convert a time into a string
92
* @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine
93
* @code{DBLE}:          DBLE,      Double precision conversion function
94
* @code{DCMPLX}:        DCMPLX,    Double complex conversion function
95
* @code{DFLOAT}:        DFLOAT,    Double precision conversion function
96
* @code{DIGITS}:        DIGITS,    Significant digits function
97
* @code{DIM}:           DIM,       Positive difference
98
* @code{DOT_PRODUCT}:   DOT_PRODUCT, Dot product function
99
* @code{DPROD}:         DPROD,     Double product function
100
* @code{DREAL}:         DREAL,     Double real part function
101
* @code{DTIME}:         DTIME,     Execution time subroutine (or function)
102
* @code{EOSHIFT}:       EOSHIFT,   End-off shift elements of an array
103
* @code{EPSILON}:       EPSILON,   Epsilon function
104
* @code{ERF}:           ERF,       Error function
105
* @code{ERFC}:          ERFC,      Complementary error function
106
* @code{ERFC_SCALED}:   ERFC_SCALED, Exponentially-scaled complementary error function
107
* @code{ETIME}:         ETIME,     Execution time subroutine (or function)
108
* @code{EXIT}:          EXIT,      Exit the program with status.
109
* @code{EXP}:           EXP,       Exponential function
110
* @code{EXPONENT}:      EXPONENT,  Exponent function
111
* @code{FDATE}:         FDATE,     Subroutine (or function) to get the current time as a string
112
* @code{FGET}:          FGET,      Read a single character in stream mode from stdin
113
* @code{FGETC}:         FGETC,     Read a single character in stream mode
114
* @code{FLOAT}:         FLOAT,     Convert integer to default real
115
* @code{FLOOR}:         FLOOR,     Integer floor function
116
* @code{FLUSH}:         FLUSH,     Flush I/O unit(s)
117
* @code{FNUM}:          FNUM,      File number function
118
* @code{FPUT}:          FPUT,      Write a single character in stream mode to stdout
119
* @code{FPUTC}:         FPUTC,     Write a single character in stream mode
120
* @code{FRACTION}:      FRACTION,  Fractional part of the model representation
121
* @code{FREE}:          FREE,      Memory de-allocation subroutine
122
* @code{FSEEK}:         FSEEK,     Low level file positioning subroutine
123
* @code{FSTAT}:         FSTAT,     Get file status
124
* @code{FTELL}:         FTELL,     Current stream position
125
* @code{GAMMA}:         GAMMA,     Gamma function
126
* @code{GERROR}:        GERROR,    Get last system error message
127
* @code{GETARG}:        GETARG,    Get command line arguments
128
* @code{GET_COMMAND}:   GET_COMMAND, Get the entire command line
129
* @code{GET_COMMAND_ARGUMENT}: GET_COMMAND_ARGUMENT, Get command line arguments
130
* @code{GETCWD}:        GETCWD,    Get current working directory
131
* @code{GETENV}:        GETENV,    Get an environmental variable
132
* @code{GET_ENVIRONMENT_VARIABLE}: GET_ENVIRONMENT_VARIABLE, Get an environmental variable
133
* @code{GETGID}:        GETGID,    Group ID function
134
* @code{GETLOG}:        GETLOG,    Get login name
135
* @code{GETPID}:        GETPID,    Process ID function
136
* @code{GETUID}:        GETUID,    User ID function
137
* @code{GMTIME}:        GMTIME,    Convert time to GMT info
138
* @code{HOSTNM}:        HOSTNM,    Get system host name
139
* @code{HUGE}:          HUGE,      Largest number of a kind
140
* @code{HYPOT}:         HYPOT,     Euclidian distance function
141
* @code{IACHAR}:        IACHAR,    Code in @acronym{ASCII} collating sequence
142
* @code{IAND}:          IAND,      Bitwise logical and
143
* @code{IARGC}:         IARGC,     Get the number of command line arguments
144
* @code{IBCLR}:         IBCLR,     Clear bit
145
* @code{IBITS}:         IBITS,     Bit extraction
146
* @code{IBSET}:         IBSET,     Set bit
147
* @code{ICHAR}:         ICHAR,     Character-to-integer conversion function
148
* @code{IDATE}:         IDATE,     Current local time (day/month/year)
149
* @code{IEOR}:          IEOR,      Bitwise logical exclusive or
150
* @code{IERRNO}:        IERRNO,    Function to get the last system error number
151
* @code{INDEX}:         INDEX intrinsic, Position of a substring within a string
152
* @code{INT}:           INT,       Convert to integer type
153
* @code{INT2}:          INT2,      Convert to 16-bit integer type
154
* @code{INT8}:          INT8,      Convert to 64-bit integer type
155
* @code{IOR}:           IOR,       Bitwise logical or
156
* @code{IRAND}:         IRAND,     Integer pseudo-random number
157
* @code{IS_IOSTAT_END}:  IS_IOSTAT_END, Test for end-of-file value
158
* @code{IS_IOSTAT_EOR}:  IS_IOSTAT_EOR, Test for end-of-record value
159
* @code{ISATTY}:        ISATTY,    Whether a unit is a terminal device
160
* @code{ISHFT}:         ISHFT,     Shift bits
161
* @code{ISHFTC}:        ISHFTC,    Shift bits circularly
162
* @code{ISNAN}:         ISNAN,     Tests for a NaN
163
* @code{ITIME}:         ITIME,     Current local time (hour/minutes/seconds)
164
* @code{KILL}:          KILL,      Send a signal to a process
165
* @code{KIND}:          KIND,      Kind of an entity
166
* @code{LBOUND}:        LBOUND,    Lower dimension bounds of an array
167
* @code{LEADZ}:         LEADZ,     Number of leading zero bits of an integer
168
* @code{LEN}:           LEN,       Length of a character entity
169
* @code{LEN_TRIM}:      LEN_TRIM,  Length of a character entity without trailing blank characters
170
* @code{LGE}:           LGE,       Lexical greater than or equal
171
* @code{LGT}:           LGT,       Lexical greater than
172
* @code{LINK}:          LINK,      Create a hard link
173
* @code{LLE}:           LLE,       Lexical less than or equal
174
* @code{LLT}:           LLT,       Lexical less than
175
* @code{LNBLNK}:        LNBLNK,    Index of the last non-blank character in a string
176
* @code{LOC}:           LOC,       Returns the address of a variable
177
* @code{LOG}:           LOG,       Logarithm function
178
* @code{LOG10}:         LOG10,     Base 10 logarithm function
179
* @code{LOG_GAMMA}:     LOG_GAMMA, Logarithm of the Gamma function
180
* @code{LOGICAL}:       LOGICAL,   Convert to logical type
181
* @code{LONG}:          LONG,      Convert to integer type
182
* @code{LSHIFT}:        LSHIFT,    Left shift bits
183
* @code{LSTAT}:         LSTAT,     Get file status
184
* @code{LTIME}:         LTIME,     Convert time to local time info
185
* @code{MALLOC}:        MALLOC,    Dynamic memory allocation function
186
* @code{MATMUL}:        MATMUL,    matrix multiplication
187
* @code{MAX}:           MAX,       Maximum value of an argument list
188
* @code{MAXEXPONENT}:   MAXEXPONENT, Maximum exponent of a real kind
189
* @code{MAXLOC}:        MAXLOC,    Location of the maximum value within an array
190
* @code{MAXVAL}:        MAXVAL,    Maximum value of an array
191
* @code{MCLOCK}:        MCLOCK,    Time function
192
* @code{MCLOCK8}:       MCLOCK8,   Time function (64-bit)
193
* @code{MERGE}:         MERGE,     Merge arrays
194
* @code{MIN}:           MIN,       Minimum value of an argument list
195
* @code{MINEXPONENT}:   MINEXPONENT, Minimum exponent of a real kind
196
* @code{MINLOC}:        MINLOC,    Location of the minimum value within an array
197
* @code{MINVAL}:        MINVAL,    Minimum value of an array
198
* @code{MOD}:           MOD,       Remainder function
199
* @code{MODULO}:        MODULO,    Modulo function
200
* @code{MOVE_ALLOC}:    MOVE_ALLOC, Move allocation from one object to another
201
* @code{MVBITS}:        MVBITS,    Move bits from one integer to another
202
* @code{NEAREST}:       NEAREST,   Nearest representable number
203
* @code{NEW_LINE}:      NEW_LINE,  New line character
204
* @code{NINT}:          NINT,      Nearest whole number
205
* @code{NOT}:           NOT,       Logical negation
206
* @code{NULL}:          NULL,      Function that returns an disassociated pointer
207
* @code{OR}:            OR,        Bitwise logical OR
208
* @code{PACK}:          PACK,      Pack an array into an array of rank one
209
* @code{PERROR}:        PERROR,    Print system error message
210
* @code{PRECISION}:     PRECISION, Decimal precision of a real kind
211
* @code{PRESENT}:       PRESENT,   Determine whether an optional dummy argument is specified
212
* @code{PRODUCT}:       PRODUCT,   Product of array elements
213
* @code{RADIX}:         RADIX,     Base of a data model
214
* @code{RANDOM_NUMBER}: RANDOM_NUMBER, Pseudo-random number
215
* @code{RANDOM_SEED}:   RANDOM_SEED, Initialize a pseudo-random number sequence
216
* @code{RAND}:          RAND,      Real pseudo-random number
217
* @code{RANGE}:         RANGE,     Decimal exponent range
218
* @code{RAN}:           RAN,       Real pseudo-random number
219
* @code{REAL}:          REAL,      Convert to real type
220
* @code{RENAME}:        RENAME,    Rename a file
221
* @code{REPEAT}:        REPEAT,    Repeated string concatenation
222
* @code{RESHAPE}:       RESHAPE,   Function to reshape an array
223
* @code{RRSPACING}:     RRSPACING, Reciprocal of the relative spacing
224
* @code{RSHIFT}:        RSHIFT,    Right shift bits
225
* @code{SCALE}:         SCALE,     Scale a real value
226
* @code{SCAN}:          SCAN,      Scan a string for the presence of a set of characters
227
* @code{SECNDS}:        SECNDS,    Time function
228
* @code{SECOND}:        SECOND,    CPU time function
229
* @code{SELECTED_CHAR_KIND}: SELECTED_CHAR_KIND,  Choose character kind
230
* @code{SELECTED_INT_KIND}: SELECTED_INT_KIND,  Choose integer kind
231
* @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND,  Choose real kind
232
* @code{SET_EXPONENT}:  SET_EXPONENT, Set the exponent of the model
233
* @code{SHAPE}:         SHAPE,     Determine the shape of an array
234
* @code{SIGN}:          SIGN,      Sign copying function
235
* @code{SIGNAL}:        SIGNAL,    Signal handling subroutine (or function)
236
* @code{SIN}:           SIN,       Sine function
237
* @code{SINH}:          SINH,      Hyperbolic sine function
238
* @code{SIZE}:          SIZE,      Function to determine the size of an array
239
* @code{SIZEOF}:        SIZEOF,    Determine the size in bytes of an expression
240
* @code{SLEEP}:         SLEEP,     Sleep for the specified number of seconds
241
* @code{SNGL}:          SNGL,      Convert double precision real to default real
242
* @code{SPACING}:       SPACING,   Smallest distance between two numbers of a given type
243
* @code{SPREAD}:        SPREAD,    Add a dimension to an array
244
* @code{SQRT}:          SQRT,      Square-root function
245
* @code{SRAND}:         SRAND,     Reinitialize the random number generator
246
* @code{STAT}:          STAT,      Get file status
247
* @code{SUM}:           SUM,       Sum of array elements
248
* @code{SYMLNK}:        SYMLNK,    Create a symbolic link
249
* @code{SYSTEM}:        SYSTEM,    Execute a shell command
250
* @code{SYSTEM_CLOCK}:  SYSTEM_CLOCK, Time function
251
* @code{TAN}:           TAN,       Tangent function
252
* @code{TANH}:          TANH,      Hyperbolic tangent function
253
* @code{TIME}:          TIME,      Time function
254
* @code{TIME8}:         TIME8,     Time function (64-bit)
255
* @code{TINY}:          TINY,      Smallest positive number of a real kind
256
* @code{TRAILZ}:        TRAILZ,    Number of trailing zero bits of an integer
257
* @code{TRANSFER}:      TRANSFER,  Transfer bit patterns
258
* @code{TRANSPOSE}:     TRANSPOSE, Transpose an array of rank two
259
* @code{TRIM}:          TRIM,      Remove trailing blank characters of a string
260
* @code{TTYNAM}:        TTYNAM,    Get the name of a terminal device.
261
* @code{UBOUND}:        UBOUND,    Upper dimension bounds of an array
262
* @code{UMASK}:         UMASK,     Set the file creation mask
263
* @code{UNLINK}:        UNLINK,    Remove a file from the file system
264
* @code{UNPACK}:        UNPACK,    Unpack an array of rank one into an array
265
* @code{VERIFY}:        VERIFY,    Scan a string for the absence of a set of characters
266
* @code{XOR}:           XOR,       Bitwise logical exclusive or
267
@end menu
268
 
269
@node Introduction to Intrinsics
270
@section Introduction to intrinsic procedures
271
 
272
The intrinsic procedures provided by GNU Fortran include all of the
273
intrinsic procedures required by the Fortran 95 standard, a set of
274
intrinsic procedures for backwards compatibility with G77, and a
275
selection of intrinsic procedures from the Fortran 2003 and Fortran 2008
276
standards.  Any conflict between a description here and a description in
277
either the Fortran 95 standard, the Fortran 2003 standard or the Fortran
278
2008 standard is unintentional, and the standard(s) should be considered
279
authoritative.
280
 
281
The enumeration of the @code{KIND} type parameter is processor defined in
282
the Fortran 95 standard.  GNU Fortran defines the default integer type and
283
default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)},
284
respectively.  The standard mandates that both data types shall have
285
another kind, which have more precision.  On typical target architectures
286
supported by @command{gfortran}, this kind type parameter is @code{KIND=8}.
287
Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent.
288
In the description of generic intrinsic procedures, the kind type parameter
289
will be specified by @code{KIND=*}, and in the description of specific
290
names for an intrinsic procedure the kind type parameter will be explicitly
291
given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}).  Finally, for
292
brevity the optional @code{KIND=} syntax will be omitted.
293
 
294
Many of the intrinsic procedures take one or more optional arguments.
295
This document follows the convention used in the Fortran 95 standard,
296
and denotes such arguments by square brackets.
297
 
298
GNU Fortran offers the @option{-std=f95} and @option{-std=gnu} options,
299
which can be used to restrict the set of intrinsic procedures to a
300
given standard.  By default, @command{gfortran} sets the @option{-std=gnu}
301
option, and so all intrinsic procedures described here are accepted.  There
302
is one caveat.  For a select group of intrinsic procedures, @command{g77}
303
implemented both a function and a subroutine.  Both classes
304
have been implemented in @command{gfortran} for backwards compatibility
305
with @command{g77}.  It is noted here that these functions and subroutines
306
cannot be intermixed in a given subprogram.  In the descriptions that follow,
307
the applicable standard for each intrinsic procedure is noted.
308
 
309
 
310
 
311
@node ABORT
312
@section @code{ABORT} --- Abort the program
313
@fnindex ABORT
314
@cindex program termination, with core dump
315
@cindex terminate program, with core dump
316
@cindex core, dump
317
 
318
@table @asis
319
@item @emph{Description}:
320
@code{ABORT} causes immediate termination of the program.  On operating
321
systems that support a core dump, @code{ABORT} will produce a core dump even if
322
the option @option{-fno-dump-core} is in effect, which is suitable for debugging
323
purposes.
324
@c TODO: Check if this (with -fno-dump-core) is correct.
325
 
326
@item @emph{Standard}:
327
GNU extension
328
 
329
@item @emph{Class}:
330
Subroutine
331
 
332
@item @emph{Syntax}:
333
@code{CALL ABORT}
334
 
335
@item @emph{Return value}:
336
Does not return.
337
 
338
@item @emph{Example}:
339
@smallexample
340
program test_abort
341
  integer :: i = 1, j = 2
342
  if (i /= j) call abort
343
end program test_abort
344
@end smallexample
345
 
346
@item @emph{See also}:
347
@ref{EXIT}, @ref{KILL}
348
 
349
@end table
350
 
351
 
352
 
353
@node ABS
354
@section @code{ABS} --- Absolute value
355
@fnindex ABS
356
@fnindex CABS
357
@fnindex DABS
358
@fnindex IABS
359
@fnindex ZABS
360
@fnindex CDABS
361
@cindex absolute value
362
 
363
@table @asis
364
@item @emph{Description}:
365
@code{ABS(A)} computes the absolute value of @code{A}.
366
 
367
@item @emph{Standard}:
368
Fortran 77 and later, has overloads that are GNU extensions
369
 
370
@item @emph{Class}:
371
Elemental function
372
 
373
@item @emph{Syntax}:
374
@code{RESULT = ABS(A)}
375
 
376
@item @emph{Arguments}:
377
@multitable @columnfractions .15 .70
378
@item @var{A} @tab The type of the argument shall be an @code{INTEGER},
379
@code{REAL}, or @code{COMPLEX}.
380
@end multitable
381
 
382
@item @emph{Return value}:
383
The return value is of the same type and
384
kind as the argument except the return value is @code{REAL} for a
385
@code{COMPLEX} argument.
386
 
387
@item @emph{Example}:
388
@smallexample
389
program test_abs
390
  integer :: i = -1
391
  real :: x = -1.e0
392
  complex :: z = (-1.e0,0.e0)
393
  i = abs(i)
394
  x = abs(x)
395
  x = abs(z)
396
end program test_abs
397
@end smallexample
398
 
399
@item @emph{Specific names}:
400
@multitable @columnfractions .20 .20 .20 .25
401
@item Name            @tab Argument            @tab Return type       @tab Standard
402
@item @code{CABS(A)}  @tab @code{COMPLEX(4) Z} @tab @code{REAL(4)}    @tab Fortran 77 and later
403
@item @code{DABS(A)}  @tab @code{REAL(8)    X} @tab @code{REAL(8)}    @tab Fortran 77 and later
404
@item @code{IABS(A)}  @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)} @tab Fortran 77 and later
405
@item @code{ZABS(A)}  @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension
406
@item @code{CDABS(A)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension
407
@end multitable
408
@end table
409
 
410
 
411
 
412
@node ACCESS
413
@section @code{ACCESS} --- Checks file access modes
414
@fnindex ACCESS
415
@cindex file system, access mode
416
 
417
@table @asis
418
@item @emph{Description}:
419
@code{ACCESS(NAME, MODE)} checks whether the file @var{NAME}
420
exists, is readable, writable or executable. Except for the
421
executable check, @code{ACCESS} can be replaced by
422
Fortran 95's @code{INQUIRE}.
423
 
424
@item @emph{Standard}:
425
GNU extension
426
 
427
@item @emph{Class}:
428
Inquiry function
429
 
430
@item @emph{Syntax}:
431
@code{RESULT = ACCESS(NAME, MODE)}
432
 
433
@item @emph{Arguments}:
434
@multitable @columnfractions .15 .70
435
@item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
436
file name. Tailing blank are ignored unless the character @code{achar(0)}
437
is present, then all characters up to and excluding @code{achar(0)} are
438
used as file name.
439
@item @var{MODE} @tab Scalar @code{CHARACTER} of default kind with the
440
file access mode, may be any concatenation of @code{"r"} (readable),
441
@code{"w"} (writable) and @code{"x"} (executable), or @code{" "} to check
442
for existence.
443
@end multitable
444
 
445
@item @emph{Return value}:
446
Returns a scalar @code{INTEGER}, which is @code{0} if the file is
447
accessible in the given mode; otherwise or if an invalid argument
448
has been given for @code{MODE} the value @code{1} is returned.
449
 
450
@item @emph{Example}:
451
@smallexample
452
program access_test
453
  implicit none
454
  character(len=*), parameter :: file  = 'test.dat'
455
  character(len=*), parameter :: file2 = 'test.dat  '//achar(0)
456
  if(access(file,' ') == 0) print *, trim(file),' is exists'
457
  if(access(file,'r') == 0) print *, trim(file),' is readable'
458
  if(access(file,'w') == 0) print *, trim(file),' is writable'
459
  if(access(file,'x') == 0) print *, trim(file),' is executable'
460
  if(access(file2,'rwx') == 0) &
461
    print *, trim(file2),' is readable, writable and executable'
462
end program access_test
463
@end smallexample
464
@item @emph{Specific names}:
465
@item @emph{See also}:
466
 
467
@end table
468
 
469
 
470
 
471
@node ACHAR
472
@section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence
473
@fnindex ACHAR
474
@cindex @acronym{ASCII} collating sequence
475
@cindex collating sequence, @acronym{ASCII}
476
 
477
@table @asis
478
@item @emph{Description}:
479
@code{ACHAR(I)} returns the character located at position @code{I}
480
in the @acronym{ASCII} collating sequence.
481
 
482
@item @emph{Standard}:
483
Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
484
 
485
@item @emph{Class}:
486
Elemental function
487
 
488
@item @emph{Syntax}:
489
@code{RESULT = ACHAR(I [, KIND])}
490
 
491
@item @emph{Arguments}:
492
@multitable @columnfractions .15 .70
493
@item @var{I}    @tab The type shall be @code{INTEGER}.
494
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
495
expression indicating the kind parameter of the result.
496
@end multitable
497
 
498
@item @emph{Return value}:
499
The return value is of type @code{CHARACTER} with a length of one.
500
If the @var{KIND} argument is present, the return value is of the
501
specified kind and of the default kind otherwise.
502
 
503
@item @emph{Example}:
504
@smallexample
505
program test_achar
506
  character c
507
  c = achar(32)
508
end program test_achar
509
@end smallexample
510
 
511
@item @emph{Note}:
512
See @ref{ICHAR} for a discussion of converting between numerical values
513
and formatted string representations.
514
 
515
@item @emph{See also}:
516
@ref{CHAR}, @ref{IACHAR}, @ref{ICHAR}
517
 
518
@end table
519
 
520
 
521
 
522
@node ACOS
523
@section @code{ACOS} --- Arccosine function
524
@fnindex ACOS
525
@fnindex DACOS
526
@cindex trigonometric function, cosine, inverse
527
@cindex cosine, inverse
528
 
529
@table @asis
530
@item @emph{Description}:
531
@code{ACOS(X)} computes the arccosine of @var{X} (inverse of @code{COS(X)}).
532
 
533
@item @emph{Standard}:
534
Fortran 77 and later, for a complex argument Fortran 2008 or later
535
 
536
@item @emph{Class}:
537
Elemental function
538
 
539
@item @emph{Syntax}:
540
@code{RESULT = ACOS(X)}
541
 
542
@item @emph{Arguments}:
543
@multitable @columnfractions .15 .70
544
@item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
545
less than or equal to one - or the type shall be @code{COMPLEX}.
546
@end multitable
547
 
548
@item @emph{Return value}:
549
The return value is of the same type and kind as @var{X}.
550
The real part of the result is in radians and lies in the range
551
@math{0 \leq \Re \acos(x) \leq \pi}.
552
 
553
@item @emph{Example}:
554
@smallexample
555
program test_acos
556
  real(8) :: x = 0.866_8
557
  x = acos(x)
558
end program test_acos
559
@end smallexample
560
 
561
@item @emph{Specific names}:
562
@multitable @columnfractions .20 .20 .20 .25
563
@item Name            @tab Argument          @tab Return type       @tab Standard
564
@item @code{DACOS(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
565
@end multitable
566
 
567
@item @emph{See also}:
568
Inverse function: @ref{COS}
569
 
570
@end table
571
 
572
 
573
 
574
@node ACOSH
575
@section @code{ACOSH} --- Hyperbolic arccosine function
576
@fnindex ACOSH
577
@fnindex DACOSH
578
@cindex area hyperbolic cosine
579
@cindex hyperbolic arccosine
580
@cindex hyperbolic function, cosine, inverse
581
@cindex cosine, hyperbolic, inverse
582
 
583
@table @asis
584
@item @emph{Description}:
585
@code{ACOSH(X)} computes the hyperbolic arccosine of @var{X} (inverse of
586
@code{COSH(X)}).
587
 
588
@item @emph{Standard}:
589
Fortran 2008 and later
590
 
591
@item @emph{Class}:
592
Elemental function
593
 
594
@item @emph{Syntax}:
595
@code{RESULT = ACOSH(X)}
596
 
597
@item @emph{Arguments}:
598
@multitable @columnfractions .15 .70
599
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
600
@end multitable
601
 
602
@item @emph{Return value}:
603
The return value has the same type and kind as @var{X}. If @var{X} is
604
complex, the imaginary part of the result is in radians and lies between
605
@math{ 0 \leq \Im \acosh(x) \leq \pi}.
606
 
607
@item @emph{Example}:
608
@smallexample
609
PROGRAM test_acosh
610
  REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)
611
  WRITE (*,*) ACOSH(x)
612
END PROGRAM
613
@end smallexample
614
 
615
@item @emph{Specific names}:
616
@multitable @columnfractions .20 .20 .20 .25
617
@item Name             @tab Argument          @tab Return type       @tab Standard
618
@item @code{DACOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
619
@end multitable
620
 
621
@item @emph{See also}:
622
Inverse function: @ref{COSH}
623
@end table
624
 
625
 
626
 
627
@node ADJUSTL
628
@section @code{ADJUSTL} --- Left adjust a string
629
@fnindex ADJUSTL
630
@cindex string, adjust left
631
@cindex adjust string
632
 
633
@table @asis
634
@item @emph{Description}:
635
@code{ADJUSTL(STRING)} will left adjust a string by removing leading spaces.
636
Spaces are inserted at the end of the string as needed.
637
 
638
@item @emph{Standard}:
639
Fortran 90 and later
640
 
641
@item @emph{Class}:
642
Elemental function
643
 
644
@item @emph{Syntax}:
645
@code{RESULT = ADJUSTL(STRING)}
646
 
647
@item @emph{Arguments}:
648
@multitable @columnfractions .15 .70
649
@item @var{STRING} @tab The type shall be @code{CHARACTER}.
650
@end multitable
651
 
652
@item @emph{Return value}:
653
The return value is of type @code{CHARACTER} and of the same kind as
654
@var{STRING} where leading spaces are removed and the same number of
655
spaces are inserted on the end of @var{STRING}.
656
 
657
@item @emph{Example}:
658
@smallexample
659
program test_adjustl
660
  character(len=20) :: str = '   gfortran'
661
  str = adjustl(str)
662
  print *, str
663
end program test_adjustl
664
@end smallexample
665
 
666
@item @emph{See also}:
667
@ref{ADJUSTR}, @ref{TRIM}
668
@end table
669
 
670
 
671
 
672
@node ADJUSTR
673
@section @code{ADJUSTR} --- Right adjust a string
674
@fnindex ADJUSTR
675
@cindex string, adjust right
676
@cindex adjust string
677
 
678
@table @asis
679
@item @emph{Description}:
680
@code{ADJUSTR(STRING)} will right adjust a string by removing trailing spaces.
681
Spaces are inserted at the start of the string as needed.
682
 
683
@item @emph{Standard}:
684
Fortran 95 and later
685
 
686
@item @emph{Class}:
687
Elemental function
688
 
689
@item @emph{Syntax}:
690
@code{RESULT = ADJUSTR(STRING)}
691
 
692
@item @emph{Arguments}:
693
@multitable @columnfractions .15 .70
694
@item @var{STR} @tab The type shall be @code{CHARACTER}.
695
@end multitable
696
 
697
@item @emph{Return value}:
698
The return value is of type @code{CHARACTER} and of the same kind as
699
@var{STRING} where trailing spaces are removed and the same number of
700
spaces are inserted at the start of @var{STRING}.
701
 
702
@item @emph{Example}:
703
@smallexample
704
program test_adjustr
705
  character(len=20) :: str = 'gfortran'
706
  str = adjustr(str)
707
  print *, str
708
end program test_adjustr
709
@end smallexample
710
 
711
@item @emph{See also}:
712
@ref{ADJUSTL}, @ref{TRIM}
713
@end table
714
 
715
 
716
 
717
@node AIMAG
718
@section @code{AIMAG} --- Imaginary part of complex number
719
@fnindex AIMAG
720
@fnindex DIMAG
721
@fnindex IMAG
722
@fnindex IMAGPART
723
@cindex complex numbers, imaginary part
724
 
725
@table @asis
726
@item @emph{Description}:
727
@code{AIMAG(Z)} yields the imaginary part of complex argument @code{Z}.
728
The @code{IMAG(Z)} and @code{IMAGPART(Z)} intrinsic functions are provided
729
for compatibility with @command{g77}, and their use in new code is
730
strongly discouraged.
731
 
732
@item @emph{Standard}:
733
Fortran 77 and later, has overloads that are GNU extensions
734
 
735
@item @emph{Class}:
736
Elemental function
737
 
738
@item @emph{Syntax}:
739
@code{RESULT = AIMAG(Z)}
740
 
741
@item @emph{Arguments}:
742
@multitable @columnfractions .15 .70
743
@item @var{Z} @tab The type of the argument shall be @code{COMPLEX}.
744
@end multitable
745
 
746
@item @emph{Return value}:
747
The return value is of type @code{REAL} with the
748
kind type parameter of the argument.
749
 
750
@item @emph{Example}:
751
@smallexample
752
program test_aimag
753
  complex(4) z4
754
  complex(8) z8
755
  z4 = cmplx(1.e0_4, 0.e0_4)
756
  z8 = cmplx(0.e0_8, 1.e0_8)
757
  print *, aimag(z4), dimag(z8)
758
end program test_aimag
759
@end smallexample
760
 
761
@item @emph{Specific names}:
762
@multitable @columnfractions .20 .20 .20 .25
763
@item Name            @tab Argument            @tab Return type       @tab Standard
764
@item @code{DIMAG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)}    @tab GNU extension
765
@item @code{IMAG(Z)}  @tab @code{COMPLEX Z} @tab @code{REAL}    @tab GNU extension
766
@item @code{IMAGPART(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension
767
@end multitable
768
@end table
769
 
770
 
771
 
772
@node AINT
773
@section @code{AINT} --- Truncate to a whole number
774
@fnindex AINT
775
@fnindex DINT
776
@cindex floor
777
@cindex rounding, floor
778
 
779
@table @asis
780
@item @emph{Description}:
781
@code{AINT(A [, KIND])} truncates its argument to a whole number.
782
 
783
@item @emph{Standard}:
784
Fortran 77 and later
785
 
786
@item @emph{Class}:
787
Elemental function
788
 
789
@item @emph{Syntax}:
790
@code{RESULT = AINT(A [, KIND])}
791
 
792
@item @emph{Arguments}:
793
@multitable @columnfractions .15 .70
794
@item @var{A}    @tab The type of the argument shall be @code{REAL}.
795
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
796
expression indicating the kind parameter of the result.
797
@end multitable
798
 
799
@item @emph{Return value}:
800
The return value is of type @code{REAL} with the kind type parameter of the
801
argument if the optional @var{KIND} is absent; otherwise, the kind
802
type parameter will be given by @var{KIND}.  If the magnitude of
803
@var{X} is less than one, @code{AINT(X)} returns zero.  If the
804
magnitude is equal to or greater than one then it returns the largest
805
whole number that does not exceed its magnitude.  The sign is the same
806
as the sign of @var{X}.
807
 
808
@item @emph{Example}:
809
@smallexample
810
program test_aint
811
  real(4) x4
812
  real(8) x8
813
  x4 = 1.234E0_4
814
  x8 = 4.321_8
815
  print *, aint(x4), dint(x8)
816
  x8 = aint(x4,8)
817
end program test_aint
818
@end smallexample
819
 
820
@item @emph{Specific names}:
821
@multitable @columnfractions .20 .20 .20 .25
822
@item Name           @tab Argument         @tab Return type      @tab Standard
823
@item @code{DINT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}   @tab Fortran 77 and later
824
@end multitable
825
@end table
826
 
827
 
828
 
829
@node ALARM
830
@section @code{ALARM} --- Execute a routine after a given delay
831
@fnindex ALARM
832
@cindex delayed execution
833
 
834
@table @asis
835
@item @emph{Description}:
836
@code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER}
837
to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to
838
set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is
839
supplied, it will be returned with the number of seconds remaining until
840
any previously scheduled alarm was due to be delivered, or zero if there
841
was no previously scheduled alarm.
842
 
843
@item @emph{Standard}:
844
GNU extension
845
 
846
@item @emph{Class}:
847
Subroutine
848
 
849
@item @emph{Syntax}:
850
@code{CALL ALARM(SECONDS, HANDLER [, STATUS])}
851
 
852
@item @emph{Arguments}:
853
@multitable @columnfractions .15 .70
854
@item @var{SECONDS} @tab The type of the argument shall be a scalar
855
@code{INTEGER}. It is @code{INTENT(IN)}.
856
@item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or
857
@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar
858
values may be either @code{SIG_IGN=1} to ignore the alarm generated
859
or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}.
860
@item @var{STATUS}  @tab (Optional) @var{STATUS} shall be a scalar
861
variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}.
862
@end multitable
863
 
864
@item @emph{Example}:
865
@smallexample
866
program test_alarm
867
  external handler_print
868
  integer i
869
  call alarm (3, handler_print, i)
870
  print *, i
871
  call sleep(10)
872
end program test_alarm
873
@end smallexample
874
This will cause the external routine @var{handler_print} to be called
875
after 3 seconds.
876
@end table
877
 
878
 
879
 
880
@node ALL
881
@section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true
882
@fnindex ALL
883
@cindex array, apply condition
884
@cindex array, condition testing
885
 
886
@table @asis
887
@item @emph{Description}:
888
@code{ALL(MASK [, DIM])} determines if all the values are true in @var{MASK}
889
in the array along dimension @var{DIM}.
890
 
891
@item @emph{Standard}:
892
Fortran 95 and later
893
 
894
@item @emph{Class}:
895
Transformational function
896
 
897
@item @emph{Syntax}:
898
@code{RESULT = ALL(MASK [, DIM])}
899
 
900
@item @emph{Arguments}:
901
@multitable @columnfractions .15 .70
902
@item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
903
it shall not be scalar.
904
@item @var{DIM}  @tab (Optional) @var{DIM} shall be a scalar integer
905
with a value that lies between one and the rank of @var{MASK}.
906
@end multitable
907
 
908
@item @emph{Return value}:
909
@code{ALL(MASK)} returns a scalar value of type @code{LOGICAL} where
910
the kind type parameter is the same as the kind type parameter of
911
@var{MASK}.  If @var{DIM} is present, then @code{ALL(MASK, DIM)} returns
912
an array with the rank of @var{MASK} minus 1.  The shape is determined from
913
the shape of @var{MASK} where the @var{DIM} dimension is elided.
914
 
915
@table @asis
916
@item (A)
917
@code{ALL(MASK)} is true if all elements of @var{MASK} are true.
918
It also is true if @var{MASK} has zero size; otherwise, it is false.
919
@item (B)
920
If the rank of @var{MASK} is one, then @code{ALL(MASK,DIM)} is equivalent
921
to @code{ALL(MASK)}.  If the rank is greater than one, then @code{ALL(MASK,DIM)}
922
is determined by applying @code{ALL} to the array sections.
923
@end table
924
 
925
@item @emph{Example}:
926
@smallexample
927
program test_all
928
  logical l
929
  l = all((/.true., .true., .true./))
930
  print *, l
931
  call section
932
  contains
933
    subroutine section
934
      integer a(2,3), b(2,3)
935
      a = 1
936
      b = 1
937
      b(2,2) = 2
938
      print *, all(a .eq. b, 1)
939
      print *, all(a .eq. b, 2)
940
    end subroutine section
941
end program test_all
942
@end smallexample
943
@end table
944
 
945
 
946
 
947
@node ALLOCATED
948
@section @code{ALLOCATED} --- Status of an allocatable entity
949
@fnindex ALLOCATED
950
@cindex allocation, status
951
 
952
@table @asis
953
@item @emph{Description}:
954
@code{ALLOCATED(ARRAY)} checks the status of whether @var{X} is allocated.
955
 
956
@item @emph{Standard}:
957
Fortran 95 and later
958
 
959
@item @emph{Class}:
960
Inquiry function
961
 
962
@item @emph{Syntax}:
963
@code{RESULT = ALLOCATED(ARRAY)}
964
 
965
@item @emph{Arguments}:
966
@multitable @columnfractions .15 .70
967
@item @var{ARRAY}    @tab The argument shall be an @code{ALLOCATABLE} array.
968
@end multitable
969
 
970
@item @emph{Return value}:
971
The return value is a scalar @code{LOGICAL} with the default logical
972
kind type parameter.  If @var{ARRAY} is allocated, @code{ALLOCATED(ARRAY)}
973
is @code{.TRUE.}; otherwise, it returns @code{.FALSE.}
974
 
975
@item @emph{Example}:
976
@smallexample
977
program test_allocated
978
  integer :: i = 4
979
  real(4), allocatable :: x(:)
980
  if (.not. allocated(x)) allocate(x(i))
981
end program test_allocated
982
@end smallexample
983
@end table
984
 
985
 
986
 
987
@node AND
988
@section @code{AND} --- Bitwise logical AND
989
@fnindex AND
990
@cindex bitwise logical and
991
@cindex logical and, bitwise
992
 
993
@table @asis
994
@item @emph{Description}:
995
Bitwise logical @code{AND}.
996
 
997
This intrinsic routine is provided for backwards compatibility with
998
GNU Fortran 77.  For integer arguments, programmers should consider
999
the use of the @ref{IAND} intrinsic defined by the Fortran standard.
1000
 
1001
@item @emph{Standard}:
1002
GNU extension
1003
 
1004
@item @emph{Class}:
1005
Function
1006
 
1007
@item @emph{Syntax}:
1008
@code{RESULT = AND(I, J)}
1009
 
1010
@item @emph{Arguments}:
1011
@multitable @columnfractions .15 .70
1012
@item @var{I} @tab The type shall be either a scalar @code{INTEGER}
1013
type or a scalar @code{LOGICAL} type.
1014
@item @var{J} @tab The type shall be the same as the type of @var{I}.
1015
@end multitable
1016
 
1017
@item @emph{Return value}:
1018
The return type is either a scalar @code{INTEGER} or a scalar
1019
@code{LOGICAL}.  If the kind type parameters differ, then the
1020
smaller kind type is implicitly converted to larger kind, and the
1021
return has the larger kind.
1022
 
1023
@item @emph{Example}:
1024
@smallexample
1025
PROGRAM test_and
1026
  LOGICAL :: T = .TRUE., F = .FALSE.
1027
  INTEGER :: a, b
1028
  DATA a / Z'F' /, b / Z'3' /
1029
 
1030
  WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)
1031
  WRITE (*,*) AND(a, b)
1032
END PROGRAM
1033
@end smallexample
1034
 
1035
@item @emph{See also}:
1036
Fortran 95 elemental function: @ref{IAND}
1037
@end table
1038
 
1039
 
1040
 
1041
@node ANINT
1042
@section @code{ANINT} --- Nearest whole number
1043
@fnindex ANINT
1044
@fnindex DNINT
1045
@cindex ceiling
1046
@cindex rounding, ceiling
1047
 
1048
@table @asis
1049
@item @emph{Description}:
1050
@code{ANINT(A [, KIND])} rounds its argument to the nearest whole number.
1051
 
1052
@item @emph{Standard}:
1053
Fortran 77 and later
1054
 
1055
@item @emph{Class}:
1056
Elemental function
1057
 
1058
@item @emph{Syntax}:
1059
@code{RESULT = ANINT(A [, KIND])}
1060
 
1061
@item @emph{Arguments}:
1062
@multitable @columnfractions .15 .70
1063
@item @var{A}    @tab The type of the argument shall be @code{REAL}.
1064
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
1065
expression indicating the kind parameter of the result.
1066
@end multitable
1067
 
1068
@item @emph{Return value}:
1069
The return value is of type real with the kind type parameter of the
1070
argument if the optional @var{KIND} is absent; otherwise, the kind
1071
type parameter will be given by @var{KIND}.  If @var{A} is greater than
1072
zero, @code{ANINT(A)} returns @code{AINT(X+0.5)}.  If @var{A} is
1073
less than or equal to zero then it returns @code{AINT(X-0.5)}.
1074
 
1075
@item @emph{Example}:
1076
@smallexample
1077
program test_anint
1078
  real(4) x4
1079
  real(8) x8
1080
  x4 = 1.234E0_4
1081
  x8 = 4.321_8
1082
  print *, anint(x4), dnint(x8)
1083
  x8 = anint(x4,8)
1084
end program test_anint
1085
@end smallexample
1086
 
1087
@item @emph{Specific names}:
1088
@multitable @columnfractions .20 .20 .20 .25
1089
@item Name            @tab Argument         @tab Return type      @tab Standard
1090
@item @code{DNINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)}   @tab Fortran 77 and later
1091
@end multitable
1092
@end table
1093
 
1094
 
1095
 
1096
@node ANY
1097
@section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true
1098
@fnindex ANY
1099
@cindex array, apply condition
1100
@cindex array, condition testing
1101
 
1102
@table @asis
1103
@item @emph{Description}:
1104
@code{ANY(MASK [, DIM])} determines if any of the values in the logical array
1105
@var{MASK} along dimension @var{DIM} are @code{.TRUE.}.
1106
 
1107
@item @emph{Standard}:
1108
Fortran 95 and later
1109
 
1110
@item @emph{Class}:
1111
Transformational function
1112
 
1113
@item @emph{Syntax}:
1114
@code{RESULT = ANY(MASK [, DIM])}
1115
 
1116
@item @emph{Arguments}:
1117
@multitable @columnfractions .15 .70
1118
@item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
1119
it shall not be scalar.
1120
@item @var{DIM}  @tab (Optional) @var{DIM} shall be a scalar integer
1121
with a value that lies between one and the rank of @var{MASK}.
1122
@end multitable
1123
 
1124
@item @emph{Return value}:
1125
@code{ANY(MASK)} returns a scalar value of type @code{LOGICAL} where
1126
the kind type parameter is the same as the kind type parameter of
1127
@var{MASK}.  If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns
1128
an array with the rank of @var{MASK} minus 1.  The shape is determined from
1129
the shape of @var{MASK} where the @var{DIM} dimension is elided.
1130
 
1131
@table @asis
1132
@item (A)
1133
@code{ANY(MASK)} is true if any element of @var{MASK} is true;
1134
otherwise, it is false.  It also is false if @var{MASK} has zero size.
1135
@item (B)
1136
If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent
1137
to @code{ANY(MASK)}.  If the rank is greater than one, then @code{ANY(MASK,DIM)}
1138
is determined by applying @code{ANY} to the array sections.
1139
@end table
1140
 
1141
@item @emph{Example}:
1142
@smallexample
1143
program test_any
1144
  logical l
1145
  l = any((/.true., .true., .true./))
1146
  print *, l
1147
  call section
1148
  contains
1149
    subroutine section
1150
      integer a(2,3), b(2,3)
1151
      a = 1
1152
      b = 1
1153
      b(2,2) = 2
1154
      print *, any(a .eq. b, 1)
1155
      print *, any(a .eq. b, 2)
1156
    end subroutine section
1157
end program test_any
1158
@end smallexample
1159
@end table
1160
 
1161
 
1162
 
1163
@node ASIN
1164
@section @code{ASIN} --- Arcsine function
1165
@fnindex ASIN
1166
@fnindex DASIN
1167
@cindex trigonometric function, sine, inverse
1168
@cindex sine, inverse
1169
 
1170
@table @asis
1171
@item @emph{Description}:
1172
@code{ASIN(X)} computes the arcsine of its @var{X} (inverse of @code{SIN(X)}).
1173
 
1174
@item @emph{Standard}:
1175
Fortran 77 and later, for a complex argument Fortran 2008 or later
1176
 
1177
@item @emph{Class}:
1178
Elemental function
1179
 
1180
@item @emph{Syntax}:
1181
@code{RESULT = ASIN(X)}
1182
 
1183
@item @emph{Arguments}:
1184
@multitable @columnfractions .15 .70
1185
@item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
1186
less than or equal to one - or be @code{COMPLEX}.
1187
@end multitable
1188
 
1189
@item @emph{Return value}:
1190
The return value is of the same type and kind as @var{X}.
1191
The real part of the result is in radians and lies in the range
1192
@math{-\pi/2 \leq \Re \asin(x) \leq \pi/2}.
1193
 
1194
@item @emph{Example}:
1195
@smallexample
1196
program test_asin
1197
  real(8) :: x = 0.866_8
1198
  x = asin(x)
1199
end program test_asin
1200
@end smallexample
1201
 
1202
@item @emph{Specific names}:
1203
@multitable @columnfractions .20 .20 .20 .25
1204
@item Name            @tab Argument          @tab Return type       @tab Standard
1205
@item @code{DASIN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
1206
@end multitable
1207
 
1208
@item @emph{See also}:
1209
Inverse function: @ref{SIN}
1210
 
1211
@end table
1212
 
1213
 
1214
 
1215
@node ASINH
1216
@section @code{ASINH} --- Hyperbolic arcsine function
1217
@fnindex ASINH
1218
@fnindex DASINH
1219
@cindex area hyperbolic sine
1220
@cindex hyperbolic arcsine
1221
@cindex hyperbolic function, sine, inverse
1222
@cindex sine, hyperbolic, inverse
1223
 
1224
@table @asis
1225
@item @emph{Description}:
1226
@code{ASINH(X)} computes the hyperbolic arcsine of @var{X} (inverse of @code{SINH(X)}).
1227
 
1228
@item @emph{Standard}:
1229
Fortran 2008 and later
1230
 
1231
@item @emph{Class}:
1232
Elemental function
1233
 
1234
@item @emph{Syntax}:
1235
@code{RESULT = ASINH(X)}
1236
 
1237
@item @emph{Arguments}:
1238
@multitable @columnfractions .15 .70
1239
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1240
@end multitable
1241
 
1242
@item @emph{Return value}:
1243
The return value is of the same type and kind as  @var{X}. If @var{X} is
1244
complex, the imaginary part of the result is in radians and lies between
1245
@math{-\pi/2 \leq \Im \asinh(x) \leq \pi/2}.
1246
 
1247
@item @emph{Example}:
1248
@smallexample
1249
PROGRAM test_asinh
1250
  REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1251
  WRITE (*,*) ASINH(x)
1252
END PROGRAM
1253
@end smallexample
1254
 
1255
@item @emph{Specific names}:
1256
@multitable @columnfractions .20 .20 .20 .25
1257
@item Name             @tab Argument          @tab Return type       @tab Standard
1258
@item @code{DASINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension.
1259
@end multitable
1260
 
1261
@item @emph{See also}:
1262
Inverse function: @ref{SINH}
1263
@end table
1264
 
1265
 
1266
 
1267
@node ASSOCIATED
1268
@section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair
1269
@fnindex ASSOCIATED
1270
@cindex pointer, status
1271
@cindex association status
1272
 
1273
@table @asis
1274
@item @emph{Description}:
1275
@code{ASSOCIATED(POINTER [, TARGET])} determines the status of the pointer
1276
@var{POINTER} or if @var{POINTER} is associated with the target @var{TARGET}.
1277
 
1278
@item @emph{Standard}:
1279
Fortran 95 and later
1280
 
1281
@item @emph{Class}:
1282
Inquiry function
1283
 
1284
@item @emph{Syntax}:
1285
@code{RESULT = ASSOCIATED(POINTER [, TARGET])}
1286
 
1287
@item @emph{Arguments}:
1288
@multitable @columnfractions .15 .70
1289
@item @var{POINTER} @tab @var{POINTER} shall have the @code{POINTER} attribute
1290
and it can be of any type.
1291
@item @var{TARGET} @tab (Optional) @var{TARGET} shall be a pointer or
1292
a target.  It must have the same type, kind type parameter, and
1293
array rank as @var{POINTER}.
1294
@end multitable
1295
The association status of neither @var{POINTER} nor @var{TARGET} shall be
1296
undefined.
1297
 
1298
@item @emph{Return value}:
1299
@code{ASSOCIATED(POINTER)} returns a scalar value of type @code{LOGICAL(4)}.
1300
There are several cases:
1301
@table @asis
1302
@item (A) When the optional @var{TARGET} is not present then
1303
@code{ASSOCIATED(POINTER)} is true if @var{POINTER} is associated with a target; otherwise, it returns false.
1304
@item (B) If @var{TARGET} is present and a scalar target, the result is true if
1305
@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
1306
disassociated, the result is false.
1307
@item (C) If @var{TARGET} is present and an array target, the result is true if
1308
@var{TARGET} and @var{POINTER} have the same shape, are not zero-sized arrays,
1309
are arrays whose elements are not zero-sized storage sequences, and
1310
@var{TARGET} and @var{POINTER} occupy the same storage units in array element
1311
order.
1312
As in case(B), the result is false, if @var{POINTER} is disassociated.
1313
@item (D) If @var{TARGET} is present and an scalar pointer, the result is true
1314
if @var{TARGET} is associated with @var{POINTER}, the target associated with
1315
@var{TARGET} are not zero-sized storage sequences and occupy the same storage
1316
units.
1317
The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1318
@item (E) If @var{TARGET} is present and an array pointer, the result is true if
1319
target associated with @var{POINTER} and the target associated with @var{TARGET}
1320
have the same shape, are not zero-sized arrays, are arrays whose elements are
1321
not zero-sized storage sequences, and @var{TARGET} and @var{POINTER} occupy
1322
the same storage units in array element order.
1323
The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
1324
@end table
1325
 
1326
@item @emph{Example}:
1327
@smallexample
1328
program test_associated
1329
   implicit none
1330
   real, target  :: tgt(2) = (/1., 2./)
1331
   real, pointer :: ptr(:)
1332
   ptr => tgt
1333
   if (associated(ptr)     .eqv. .false.) call abort
1334
   if (associated(ptr,tgt) .eqv. .false.) call abort
1335
end program test_associated
1336
@end smallexample
1337
 
1338
@item @emph{See also}:
1339
@ref{NULL}
1340
@end table
1341
 
1342
 
1343
 
1344
@node ATAN
1345
@section @code{ATAN} --- Arctangent function
1346
@fnindex ATAN
1347
@fnindex DATAN
1348
@cindex trigonometric function, tangent, inverse
1349
@cindex tangent, inverse
1350
 
1351
@table @asis
1352
@item @emph{Description}:
1353
@code{ATAN(X)} computes the arctangent of @var{X}.
1354
 
1355
@item @emph{Standard}:
1356
Fortran 77 and later, for a complex argument and for two arguments
1357
Fortran 2008 or later
1358
 
1359
@item @emph{Class}:
1360
Elemental function
1361
 
1362
@item @emph{Syntax}:
1363
@code{RESULT = ATAN(X)}
1364
@code{RESULT = ATAN(Y, X)}
1365
 
1366
@item @emph{Arguments}:
1367
@multitable @columnfractions .15 .70
1368
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
1369
if @var{Y} is present, @var{X} shall be REAL.
1370
@item @var{Y} shall be of the same type and kind as @var{X}.
1371
@end multitable
1372
 
1373
@item @emph{Return value}:
1374
The return value is of the same type and kind as @var{X}.
1375
If @var{Y} is present, the result is identical to @code{ATAN2(Y,X)}.
1376
Otherwise, it the arcus tangent of @var{X}, where the real part of
1377
the result is in radians and lies in the range
1378
@math{-\pi/2 \leq \Re \atan(x) \leq \pi/2}.
1379
 
1380
@item @emph{Example}:
1381
@smallexample
1382
program test_atan
1383
  real(8) :: x = 2.866_8
1384
  x = atan(x)
1385
end program test_atan
1386
@end smallexample
1387
 
1388
@item @emph{Specific names}:
1389
@multitable @columnfractions .20 .20 .20 .25
1390
@item Name            @tab Argument          @tab Return type       @tab Standard
1391
@item @code{DATAN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
1392
@end multitable
1393
 
1394
@item @emph{See also}:
1395
Inverse function: @ref{TAN}
1396
 
1397
@end table
1398
 
1399
 
1400
 
1401
@node ATAN2
1402
@section @code{ATAN2} --- Arctangent function
1403
@fnindex ATAN2
1404
@fnindex DATAN2
1405
@cindex trigonometric function, tangent, inverse
1406
@cindex tangent, inverse
1407
 
1408
@table @asis
1409
@item @emph{Description}:
1410
@code{ATAN2(Y, X)} computes the principal value of the argument
1411
function of the complex number @math{X + i Y}. This function can
1412
be used to transform from carthesian into polar coordinates and
1413
allows to determine the angle in the correct quadrant.
1414
 
1415
@item @emph{Standard}:
1416
Fortran 77 and later
1417
 
1418
@item @emph{Class}:
1419
Elemental function
1420
 
1421
@item @emph{Syntax}:
1422
@code{RESULT = ATAN2(Y, X)}
1423
 
1424
@item @emph{Arguments}:
1425
@multitable @columnfractions .15 .70
1426
@item @var{Y} @tab The type shall be @code{REAL}.
1427
@item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
1428
If @var{Y} is zero, then @var{X} must be nonzero.
1429
@end multitable
1430
 
1431
@item @emph{Return value}:
1432
The return value has the same type and kind type parameter as @var{Y}.
1433
It is the principal value of the complex number @math{X + i Y}.  If
1434
@var{X} is nonzero, then it lies in the range @math{-\pi \le \atan (x) \leq \pi}.
1435
The sign is positive if @var{Y} is positive.  If @var{Y} is zero, then
1436
the return value is zero if @var{X} is positive and @math{\pi} if @var{X}
1437
is negative.  Finally, if @var{X} is zero, then the magnitude of the result
1438
is @math{\pi/2}.
1439
 
1440
@item @emph{Example}:
1441
@smallexample
1442
program test_atan2
1443
  real(4) :: x = 1.e0_4, y = 0.5e0_4
1444
  x = atan2(y,x)
1445
end program test_atan2
1446
@end smallexample
1447
 
1448
@item @emph{Specific names}:
1449
@multitable @columnfractions .20 .20 .20 .25
1450
@item Name            @tab Argument          @tab Return type    @tab Standard
1451
@item @code{DATAN2(X, Y)} @tab @code{REAL(8) X}, @code{REAL(8) Y} @tab @code{REAL(8)} @tab Fortran 77 and later
1452
@end multitable
1453
@end table
1454
 
1455
 
1456
 
1457
@node ATANH
1458
@section @code{ATANH} --- Hyperbolic arctangent function
1459
@fnindex ASINH
1460
@fnindex DASINH
1461
@cindex area hyperbolic tangent
1462
@cindex hyperbolic arctangent
1463
@cindex hyperbolic function, tangent, inverse
1464
@cindex tangent, hyperbolic, inverse
1465
 
1466
@table @asis
1467
@item @emph{Description}:
1468
@code{ATANH(X)} computes the hyperbolic arctangent of @var{X} (inverse
1469
of @code{TANH(X)}).
1470
 
1471
@item @emph{Standard}:
1472
Fortran 2008 and later
1473
 
1474
@item @emph{Class}:
1475
Elemental function
1476
 
1477
@item @emph{Syntax}:
1478
@code{RESULT = ATANH(X)}
1479
 
1480
@item @emph{Arguments}:
1481
@multitable @columnfractions .15 .70
1482
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
1483
@end multitable
1484
 
1485
@item @emph{Return value}:
1486
The return value has same type and kind as @var{X}. If @var{X} is
1487
complex, the imaginary part of the result is in radians and lies between
1488
@math{-\pi/2 \leq \Im \atanh(x) \leq \pi/2}.
1489
 
1490
@item @emph{Example}:
1491
@smallexample
1492
PROGRAM test_atanh
1493
  REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
1494
  WRITE (*,*) ATANH(x)
1495
END PROGRAM
1496
@end smallexample
1497
 
1498
@item @emph{Specific names}:
1499
@multitable @columnfractions .20 .20 .20 .25
1500
@item Name             @tab Argument          @tab Return type       @tab Standard
1501
@item @code{DATANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
1502
@end multitable
1503
 
1504
@item @emph{See also}:
1505
Inverse function: @ref{TANH}
1506
@end table
1507
 
1508
 
1509
 
1510
@node BESSEL_J0
1511
@section @code{BESSEL_J0} --- Bessel function of the first kind of order 0
1512
@fnindex BESSEL_J0
1513
@fnindex BESJ0
1514
@fnindex DBESJ0
1515
@cindex Bessel function, first kind
1516
 
1517
@table @asis
1518
@item @emph{Description}:
1519
@code{BESSEL_J0(X)} computes the Bessel function of the first kind of
1520
order 0 of @var{X}. This function is available under the name
1521
@code{BESJ0} as a GNU extension.
1522
 
1523
@item @emph{Standard}:
1524
Fortran 2008 and later
1525
 
1526
@item @emph{Class}:
1527
Elemental function
1528
 
1529
@item @emph{Syntax}:
1530
@code{RESULT = BESSEL_J0(X)}
1531
 
1532
@item @emph{Arguments}:
1533
@multitable @columnfractions .15 .70
1534
@item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1535
@end multitable
1536
 
1537
@item @emph{Return value}:
1538
The return value is of type @code{REAL} and lies in the
1539
range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. It has the same
1540
kind as @var{X}.
1541
 
1542
@item @emph{Example}:
1543
@smallexample
1544
program test_besj0
1545
  real(8) :: x = 0.0_8
1546
  x = bessel_j0(x)
1547
end program test_besj0
1548
@end smallexample
1549
 
1550
@item @emph{Specific names}:
1551
@multitable @columnfractions .20 .20 .20 .25
1552
@item Name            @tab Argument          @tab Return type       @tab Standard
1553
@item @code{DBESJ0(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}   @tab GNU extension
1554
@end multitable
1555
@end table
1556
 
1557
 
1558
 
1559
@node BESSEL_J1
1560
@section @code{BESSEL_J1} --- Bessel function of the first kind of order 1
1561
@fnindex BESSEL_J1
1562
@fnindex BESJ1
1563
@fnindex DBESJ1
1564
@cindex Bessel function, first kind
1565
 
1566
@table @asis
1567
@item @emph{Description}:
1568
@code{BESSEL_J1(X)} computes the Bessel function of the first kind of
1569
order 1 of @var{X}. This function is available under the name
1570
@code{BESJ1} as a GNU extension.
1571
 
1572
@item @emph{Standard}:
1573
Fortran 2008
1574
 
1575
@item @emph{Class}:
1576
Elemental function
1577
 
1578
@item @emph{Syntax}:
1579
@code{RESULT = BESSEL_J1(X)}
1580
 
1581
@item @emph{Arguments}:
1582
@multitable @columnfractions .15 .70
1583
@item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1584
@end multitable
1585
 
1586
@item @emph{Return value}:
1587
The return value is of type @code{REAL} and it lies in the
1588
range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. It has the same
1589
kind as @var{X}.
1590
 
1591
@item @emph{Example}:
1592
@smallexample
1593
program test_besj1
1594
  real(8) :: x = 1.0_8
1595
  x = bessel_j1(x)
1596
end program test_besj1
1597
@end smallexample
1598
 
1599
@item @emph{Specific names}:
1600
@multitable @columnfractions .20 .20 .20 .25
1601
@item Name            @tab Argument          @tab Return type       @tab Standard
1602
@item @code{DBESJ1(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
1603
@end multitable
1604
@end table
1605
 
1606
 
1607
 
1608
@node BESSEL_JN
1609
@section @code{BESSEL_JN} --- Bessel function of the first kind
1610
@fnindex BESSEL_JN
1611
@fnindex BESJN
1612
@fnindex DBESJN
1613
@cindex Bessel function, first kind
1614
 
1615
@table @asis
1616
@item @emph{Description}:
1617
@code{BESSEL_JN(N, X)} computes the Bessel function of the first kind of
1618
order @var{N} of @var{X}. This function is available under the name
1619
@code{BESJN} as a GNU extension.
1620
 
1621
If both arguments are arrays, their ranks and shapes shall conform.
1622
 
1623
@item @emph{Standard}:
1624
Fortran 2008 and later
1625
 
1626
@item @emph{Class}:
1627
Elemental function
1628
 
1629
@item @emph{Syntax}:
1630
@code{RESULT = BESSEL_JN(N, X)}
1631
 
1632
@item @emph{Arguments}:
1633
@multitable @columnfractions .15 .70
1634
@item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER}.
1635
@item @var{X} @tab Shall be a scalar or an array of type  @code{REAL}.
1636
@end multitable
1637
 
1638
@item @emph{Return value}:
1639
The return value is a scalar of type @code{REAL}. It has the same
1640
kind as @var{X}.
1641
 
1642
@item @emph{Example}:
1643
@smallexample
1644
program test_besjn
1645
  real(8) :: x = 1.0_8
1646
  x = bessel_jn(5,x)
1647
end program test_besjn
1648
@end smallexample
1649
 
1650
@item @emph{Specific names}:
1651
@multitable @columnfractions .20 .20 .20 .25
1652
@item Name                @tab Argument            @tab Return type       @tab Standard
1653
@item @code{DBESJN(N, X)} @tab @code{INTEGER N}    @tab @code{REAL(8)}    @tab GNU extension
1654
@item                     @tab @code{REAL(8) X}    @tab                   @tab
1655
@end multitable
1656
@end table
1657
 
1658
 
1659
 
1660
@node BESSEL_Y0
1661
@section @code{BESSEL_Y0} --- Bessel function of the second kind of order 0
1662
@fnindex BESSEL_Y0
1663
@fnindex BESY0
1664
@fnindex DBESY0
1665
@cindex Bessel function, second kind
1666
 
1667
@table @asis
1668
@item @emph{Description}:
1669
@code{BESSEL_Y0(X)} computes the Bessel function of the second kind of
1670
order 0 of @var{X}. This function is available under the name
1671
@code{BESY0} as a GNU extension.
1672
 
1673
@item @emph{Standard}:
1674
Fortran 2008 and later
1675
 
1676
@item @emph{Class}:
1677
Elemental function
1678
 
1679
@item @emph{Syntax}:
1680
@code{RESULT = BESSEL_Y0(X)}
1681
 
1682
@item @emph{Arguments}:
1683
@multitable @columnfractions .15 .70
1684
@item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar.
1685
@end multitable
1686
 
1687
@item @emph{Return value}:
1688
The return value is a scalar of type @code{REAL}. It has the same
1689
kind as @var{X}.
1690
 
1691
@item @emph{Example}:
1692
@smallexample
1693
program test_besy0
1694
  real(8) :: x = 0.0_8
1695
  x = bessel_y0(x)
1696
end program test_besy0
1697
@end smallexample
1698
 
1699
@item @emph{Specific names}:
1700
@multitable @columnfractions .20 .20 .20 .25
1701
@item Name            @tab Argument          @tab Return type       @tab Standard
1702
@item @code{DBESY0(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
1703
@end multitable
1704
@end table
1705
 
1706
 
1707
 
1708
@node BESSEL_Y1
1709
@section @code{BESSEL_Y1} --- Bessel function of the second kind of order 1
1710
@fnindex BESSEL_Y1
1711
@fnindex BESY1
1712
@fnindex DBESY1
1713
@cindex Bessel function, second kind
1714
 
1715
@table @asis
1716
@item @emph{Description}:
1717
@code{BESSEL_Y1(X)} computes the Bessel function of the second kind of
1718
order 1 of @var{X}. This function is available under the name
1719
@code{BESY1} as a GNU extension.
1720
 
1721
@item @emph{Standard}:
1722
Fortran 2008 and later
1723
 
1724
@item @emph{Class}:
1725
Elemental function
1726
 
1727
@item @emph{Syntax}:
1728
@code{RESULT = BESSEL_Y1(X)}
1729
 
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.
1733
@end multitable
1734
 
1735
@item @emph{Return value}:
1736
The return value is a scalar of type @code{REAL}. It has the same
1737
kind as @var{X}.
1738
 
1739
@item @emph{Example}:
1740
@smallexample
1741
program test_besy1
1742
  real(8) :: x = 1.0_8
1743
  x = bessel_y1(x)
1744
end program test_besy1
1745
@end smallexample
1746
 
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{DBESY1(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
1751
@end multitable
1752
@end table
1753
 
1754
 
1755
 
1756
@node BESSEL_YN
1757
@section @code{BESSEL_YN} --- Bessel function of the second kind
1758
@fnindex BESSEL_YN
1759
@fnindex BESYN
1760
@fnindex DBESYN
1761
@cindex Bessel function, second kind
1762
 
1763
@table @asis
1764
@item @emph{Description}:
1765
@code{BESSEL_YN(N, X)} computes the Bessel function of the second kind of
1766
order @var{N} of @var{X}. This function is available under the name
1767
@code{BESYN} as a GNU extension.
1768
 
1769
If both arguments are arrays, their ranks and shapes shall conform.
1770
 
1771
@item @emph{Standard}:
1772
Fortran 2008 and later
1773
 
1774
@item @emph{Class}:
1775
Elemental function
1776
 
1777
@item @emph{Syntax}:
1778
@code{RESULT = BESSEL_YN(N, X)}
1779
 
1780
@item @emph{Arguments}:
1781
@multitable @columnfractions .15 .70
1782
@item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER}.
1783
@item @var{X} @tab Shall be a scalar or an array of type  @code{REAL}.
1784
@end multitable
1785
 
1786
@item @emph{Return value}:
1787
The return value is a scalar of type @code{REAL}. It has the same
1788
kind as @var{X}.
1789
 
1790
@item @emph{Example}:
1791
@smallexample
1792
program test_besyn
1793
  real(8) :: x = 1.0_8
1794
  x = bessel_yn(5,x)
1795
end program test_besyn
1796
@end smallexample
1797
 
1798
@item @emph{Specific names}:
1799
@multitable @columnfractions .20 .20 .20 .25
1800
@item Name               @tab Argument            @tab Return type     @tab Standard
1801
@item @code{DBESYN(N,X)} @tab @code{INTEGER N} @tab @code{REAL(8)}  @tab GNU extension
1802
@item                    @tab @code{REAL(8)    X} @tab                 @tab
1803
@end multitable
1804
@end table
1805
 
1806
 
1807
 
1808
@node BIT_SIZE
1809
@section @code{BIT_SIZE} --- Bit size inquiry function
1810
@fnindex BIT_SIZE
1811
@cindex bits, number of
1812
@cindex size of a variable, in bits
1813
 
1814
@table @asis
1815
@item @emph{Description}:
1816
@code{BIT_SIZE(I)} returns the number of bits (integer precision plus sign bit)
1817
represented by the type of @var{I}.  The result of @code{BIT_SIZE(I)} is
1818
independent of the actual value of @var{I}.
1819
 
1820
@item @emph{Standard}:
1821
Fortran 95 and later
1822
 
1823
@item @emph{Class}:
1824
Inquiry function
1825
 
1826
@item @emph{Syntax}:
1827
@code{RESULT = BIT_SIZE(I)}
1828
 
1829
@item @emph{Arguments}:
1830
@multitable @columnfractions .15 .70
1831
@item @var{I} @tab The type shall be @code{INTEGER}.
1832
@end multitable
1833
 
1834
@item @emph{Return value}:
1835
The return value is of type @code{INTEGER}
1836
 
1837
@item @emph{Example}:
1838
@smallexample
1839
program test_bit_size
1840
    integer :: i = 123
1841
    integer :: size
1842
    size = bit_size(i)
1843
    print *, size
1844
end program test_bit_size
1845
@end smallexample
1846
@end table
1847
 
1848
 
1849
 
1850
@node BTEST
1851
@section @code{BTEST} --- Bit test function
1852
@fnindex BTEST
1853
@cindex bits, testing
1854
 
1855
@table @asis
1856
@item @emph{Description}:
1857
@code{BTEST(I,POS)} returns logical @code{.TRUE.} if the bit at @var{POS}
1858
in @var{I} is set.  The counting of the bits starts at 0.
1859
 
1860
@item @emph{Standard}:
1861
Fortran 95 and later
1862
 
1863
@item @emph{Class}:
1864
Elemental function
1865
 
1866
@item @emph{Syntax}:
1867
@code{RESULT = BTEST(I, POS)}
1868
 
1869
@item @emph{Arguments}:
1870
@multitable @columnfractions .15 .70
1871
@item @var{I} @tab The type shall be @code{INTEGER}.
1872
@item @var{POS} @tab The type shall be @code{INTEGER}.
1873
@end multitable
1874
 
1875
@item @emph{Return value}:
1876
The return value is of type @code{LOGICAL}
1877
 
1878
@item @emph{Example}:
1879
@smallexample
1880
program test_btest
1881
    integer :: i = 32768 + 1024 + 64
1882
    integer :: pos
1883
    logical :: bool
1884
    do pos=0,16
1885
        bool = btest(i, pos)
1886
        print *, pos, bool
1887
    end do
1888
end program test_btest
1889
@end smallexample
1890
@end table
1891
 
1892
 
1893
@node C_ASSOCIATED
1894
@section @code{C_ASSOCIATED} --- Status of a C pointer
1895
@fnindex C_ASSOCIATED
1896
@cindex association status, C pointer
1897
@cindex pointer, C association status
1898
 
1899
@table @asis
1900
@item @emph{Description}:
1901
@code{C_ASSOCIATED(c_prt_1[, c_ptr_2])} determines the status of the C pointer
1902
@var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}.
1903
 
1904
@item @emph{Standard}:
1905
Fortran 2003 and later
1906
 
1907
@item @emph{Class}:
1908
Inquiry function
1909
 
1910
@item @emph{Syntax}:
1911
@code{RESULT = C_ASSOCIATED(c_prt_1[, c_ptr_2])}
1912
 
1913
@item @emph{Arguments}:
1914
@multitable @columnfractions .15 .70
1915
@item @var{c_ptr_1} @tab Scalar of the type @code{C_PTR} or @code{C_FUNPTR}.
1916
@item @var{c_ptr_2} @tab (Optional) Scalar of the same type as @var{c_ptr_1}.
1917
@end multitable
1918
 
1919
@item @emph{Return value}:
1920
The return value is of type @code{LOGICAL}; it is @code{.false.} if either
1921
@var{c_ptr_1} is a C NULL pointer or if @var{c_ptr1} and @var{c_ptr_2}
1922
point to different addresses.
1923
 
1924
@item @emph{Example}:
1925
@smallexample
1926
subroutine association_test(a,b)
1927
  use iso_c_binding, only: c_associated, c_loc, c_ptr
1928
  implicit none
1929
  real, pointer :: a
1930
  type(c_ptr) :: b
1931
  if(c_associated(b, c_loc(a))) &
1932
     stop 'b and a do not point to same target'
1933
end subroutine association_test
1934
@end smallexample
1935
 
1936
@item @emph{See also}:
1937
@ref{C_LOC}, @ref{C_FUNLOC}
1938
@end table
1939
 
1940
 
1941
@node C_FUNLOC
1942
@section @code{C_FUNLOC} --- Obtain the C address of a procedure
1943
@fnindex C_FUNLOC
1944
@cindex pointer, C address of procedures
1945
 
1946
@table @asis
1947
@item @emph{Description}:
1948
@code{C_FUNLOC(x)} determines the C address of the argument.
1949
 
1950
@item @emph{Standard}:
1951
Fortran 2003 and later
1952
 
1953
@item @emph{Class}:
1954
Inquiry function
1955
 
1956
@item @emph{Syntax}:
1957
@code{RESULT = C_FUNLOC(x)}
1958
 
1959
@item @emph{Arguments}:
1960
@multitable @columnfractions .15 .70
1961
@item @var{x} @tab Interoperable function or pointer to such function.
1962
@end multitable
1963
 
1964
@item @emph{Return value}:
1965
The return value is of type @code{C_FUNPTR} and contains the C address
1966
of the argument.
1967
 
1968
@item @emph{Example}:
1969
@smallexample
1970
module x
1971
  use iso_c_binding
1972
  implicit none
1973
contains
1974
  subroutine sub(a) bind(c)
1975
    real(c_float) :: a
1976
    a = sqrt(a)+5.0
1977
  end subroutine sub
1978
end module x
1979
program main
1980
  use iso_c_binding
1981
  use x
1982
  implicit none
1983
  interface
1984
    subroutine my_routine(p) bind(c,name='myC_func')
1985
      import :: c_funptr
1986
      type(c_funptr), intent(in) :: p
1987
    end subroutine
1988
  end interface
1989
  call my_routine(c_funloc(sub))
1990
end program main
1991
@end smallexample
1992
 
1993
@item @emph{See also}:
1994
@ref{C_ASSOCIATED}, @ref{C_LOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
1995
@end table
1996
 
1997
 
1998
@node C_F_PROCPOINTER
1999
@section @code{C_F_PROCPOINTER} --- Convert C into Fortran procedure pointer
2000
@fnindex C_F_PROCPOINTER
2001
@cindex pointer, C address of pointers
2002
 
2003
@table @asis
2004
@item @emph{Description}:
2005
@code{C_F_PROCPOINTER(CPTR, FPTR)} Assign the target of the C function pointer
2006
@var{CPTR} to the Fortran procedure pointer @var{FPTR}.
2007
 
2008
@item @emph{Standard}:
2009
Fortran 2003 and later
2010
 
2011
@item @emph{Class}:
2012
Subroutine
2013
 
2014
@item @emph{Syntax}:
2015
@code{CALL C_F_PROCPOINTER(cptr, fptr)}
2016
 
2017
@item @emph{Arguments}:
2018
@multitable @columnfractions .15 .70
2019
@item @var{CPTR}  @tab scalar of the type @code{C_FUNPTR}. It is
2020
@code{INTENT(IN)}.
2021
@item @var{FPTR}  @tab procedure pointer interoperable with @var{cptr}. It is
2022
@code{INTENT(OUT)}.
2023
@end multitable
2024
 
2025
@item @emph{Example}:
2026
@smallexample
2027
program main
2028
  use iso_c_binding
2029
  implicit none
2030
  abstract interface
2031
    function func(a)
2032
      import :: c_float
2033
      real(c_float), intent(in) :: a
2034
      real(c_float) :: func
2035
    end function
2036
  end interface
2037
  interface
2038
     function getIterFunc() bind(c,name="getIterFunc")
2039
       import :: c_funptr
2040
       type(c_funptr) :: getIterFunc
2041
     end function
2042
  end interface
2043
  type(c_funptr) :: cfunptr
2044
  procedure(func), pointer :: myFunc
2045
  cfunptr = getIterFunc()
2046
  call c_f_procpointer(cfunptr, myFunc)
2047
end program main
2048
@end smallexample
2049
 
2050
@item @emph{See also}:
2051
@ref{C_LOC}, @ref{C_F_POINTER}
2052
@end table
2053
 
2054
 
2055
@node C_F_POINTER
2056
@section @code{C_F_POINTER} --- Convert C into Fortran pointer
2057
@fnindex C_F_POINTER
2058
@cindex pointer, convert C to Fortran
2059
 
2060
@table @asis
2061
@item @emph{Description}:
2062
@code{C_F_POINTER(CPTR, FPTR[, SHAPE])} Assign the target the C pointer
2063
@var{CPTR} to the Fortran pointer @var{FPTR} and specify its
2064
shape.
2065
 
2066
@item @emph{Standard}:
2067
Fortran 2003 and later
2068
 
2069
@item @emph{Class}:
2070
Subroutine
2071
 
2072
@item @emph{Syntax}:
2073
@code{CALL C_F_POINTER(CPTR, FPTR[, SHAPE])}
2074
 
2075
@item @emph{Arguments}:
2076
@multitable @columnfractions .15 .70
2077
@item @var{CPTR}  @tab scalar of the type @code{C_PTR}. It is
2078
@code{INTENT(IN)}.
2079
@item @var{FPTR}  @tab pointer interoperable with @var{cptr}. It is
2080
@code{INTENT(OUT)}.
2081
@item @var{SHAPE} @tab (Optional) Rank-one array of type @code{INTEGER}
2082
with @code{INTENT(IN)}. It shall be present
2083
if and only if @var{fptr} is an array. The size
2084
must be equal to the rank of @var{fptr}.
2085
@end multitable
2086
 
2087
@item @emph{Example}:
2088
@smallexample
2089
program main
2090
  use iso_c_binding
2091
  implicit none
2092
  interface
2093
    subroutine my_routine(p) bind(c,name='myC_func')
2094
      import :: c_ptr
2095
      type(c_ptr), intent(out) :: p
2096
    end subroutine
2097
  end interface
2098
  type(c_ptr) :: cptr
2099
  real,pointer :: a(:)
2100
  call my_routine(cptr)
2101
  call c_f_pointer(cptr, a, [12])
2102
end program main
2103
@end smallexample
2104
 
2105
@item @emph{See also}:
2106
@ref{C_LOC}, @ref{C_F_PROCPOINTER}
2107
@end table
2108
 
2109
 
2110
@node C_LOC
2111
@section @code{C_LOC} --- Obtain the C address of an object
2112
@fnindex C_LOC
2113
@cindex procedure pointer, convert C to Fortran
2114
 
2115
@table @asis
2116
@item @emph{Description}:
2117
@code{C_LOC(X)} determines the C address of the argument.
2118
 
2119
@item @emph{Standard}:
2120
Fortran 2003 and later
2121
 
2122
@item @emph{Class}:
2123
Inquiry function
2124
 
2125
@item @emph{Syntax}:
2126
@code{RESULT = C_LOC(X)}
2127
 
2128
@item @emph{Arguments}:
2129
@multitable @columnfractions .15 .70
2130
@item @var{X} @tab Associated scalar pointer or interoperable scalar
2131
or allocated allocatable variable with @code{TARGET} attribute.
2132
@end multitable
2133
 
2134
@item @emph{Return value}:
2135
The return value is of type @code{C_PTR} and contains the C address
2136
of the argument.
2137
 
2138
@item @emph{Example}:
2139
@smallexample
2140
subroutine association_test(a,b)
2141
  use iso_c_binding, only: c_associated, c_loc, c_ptr
2142
  implicit none
2143
  real, pointer :: a
2144
  type(c_ptr) :: b
2145
  if(c_associated(b, c_loc(a))) &
2146
     stop 'b and a do not point to same target'
2147
end subroutine association_test
2148
@end smallexample
2149
 
2150
@item @emph{See also}:
2151
@ref{C_ASSOCIATED}, @ref{C_FUNLOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
2152
@end table
2153
 
2154
 
2155
@node C_SIZEOF
2156
@section @code{C_SIZEOF} --- Size in bytes of an expression
2157
@fnindex C_SIZEOF
2158
@cindex expression size
2159
@cindex size of an expression
2160
 
2161
@table @asis
2162
@item @emph{Description}:
2163
@code{C_SIZEOF(X)} calculates the number of bytes of storage the
2164
expression @code{X} occupies.
2165
 
2166
@item @emph{Standard}:
2167
Fortran 2008
2168
 
2169
@item @emph{Class}:
2170
Intrinsic function
2171
 
2172
@item @emph{Syntax}:
2173
@code{N = C_SIZEOF(X)}
2174
 
2175
@item @emph{Arguments}:
2176
@multitable @columnfractions .15 .70
2177
@item @var{X} @tab The argument shall be of any type, rank or shape.
2178
@end multitable
2179
 
2180
@item @emph{Return value}:
2181
The return value is of type integer and of the system-dependent kind
2182
@var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
2183
number of bytes occupied by the argument.  If the argument has the
2184
@code{POINTER} attribute, the number of bytes of the storage area pointed
2185
to is returned.  If the argument is of a derived type with @code{POINTER}
2186
or @code{ALLOCATABLE} components, the return value doesn't account for
2187
the sizes of the data pointed to by these components.
2188
 
2189
@item @emph{Example}:
2190
@smallexample
2191
   use iso_c_binding
2192
   integer(c_int) :: i
2193
   real(c_float) :: r, s(5)
2194
   print *, (c_sizeof(s)/c_sizeof(r) == 5)
2195
   end
2196
@end smallexample
2197
The example will print @code{.TRUE.} unless you are using a platform
2198
where default @code{REAL} variables are unusually padded.
2199
 
2200
@item @emph{See also}:
2201
@ref{SIZEOF}
2202
@end table
2203
 
2204
 
2205
@node CEILING
2206
@section @code{CEILING} --- Integer ceiling function
2207
@fnindex CEILING
2208
@cindex ceiling
2209
@cindex rounding, ceiling
2210
 
2211
@table @asis
2212
@item @emph{Description}:
2213
@code{CEILING(A)} returns the least integer greater than or equal to @var{A}.
2214
 
2215
@item @emph{Standard}:
2216
Fortran 95 and later
2217
 
2218
@item @emph{Class}:
2219
Elemental function
2220
 
2221
@item @emph{Syntax}:
2222
@code{RESULT = CEILING(A [, KIND])}
2223
 
2224
@item @emph{Arguments}:
2225
@multitable @columnfractions .15 .70
2226
@item @var{A} @tab The type shall be @code{REAL}.
2227
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2228
expression indicating the kind parameter of the result.
2229
@end multitable
2230
 
2231
@item @emph{Return value}:
2232
The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
2233
and a default-kind @code{INTEGER} otherwise.
2234
 
2235
@item @emph{Example}:
2236
@smallexample
2237
program test_ceiling
2238
    real :: x = 63.29
2239
    real :: y = -63.59
2240
    print *, ceiling(x) ! returns 64
2241
    print *, ceiling(y) ! returns -63
2242
end program test_ceiling
2243
@end smallexample
2244
 
2245
@item @emph{See also}:
2246
@ref{FLOOR}, @ref{NINT}
2247
 
2248
@end table
2249
 
2250
 
2251
 
2252
@node CHAR
2253
@section @code{CHAR} --- Character conversion function
2254
@fnindex CHAR
2255
@cindex conversion, to character
2256
 
2257
@table @asis
2258
@item @emph{Description}:
2259
@code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}.
2260
 
2261
@item @emph{Standard}:
2262
Fortran 77 and later
2263
 
2264
@item @emph{Class}:
2265
Elemental function
2266
 
2267
@item @emph{Syntax}:
2268
@code{RESULT = CHAR(I [, KIND])}
2269
 
2270
@item @emph{Arguments}:
2271
@multitable @columnfractions .15 .70
2272
@item @var{I} @tab The type shall be @code{INTEGER}.
2273
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2274
expression indicating the kind parameter of the result.
2275
@end multitable
2276
 
2277
@item @emph{Return value}:
2278
The return value is of type @code{CHARACTER(1)}
2279
 
2280
@item @emph{Example}:
2281
@smallexample
2282
program test_char
2283
    integer :: i = 74
2284
    character(1) :: c
2285
    c = char(i)
2286
    print *, i, c ! returns 'J'
2287
end program test_char
2288
@end smallexample
2289
 
2290
@item @emph{Note}:
2291
See @ref{ICHAR} for a discussion of converting between numerical values
2292
and formatted string representations.
2293
 
2294
@item @emph{See also}:
2295
@ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR}
2296
 
2297
@end table
2298
 
2299
 
2300
 
2301
@node CHDIR
2302
@section @code{CHDIR} --- Change working directory
2303
@fnindex CHDIR
2304
@cindex system, working directory
2305
 
2306
@table @asis
2307
@item @emph{Description}:
2308
Change current working directory to a specified path.
2309
 
2310
This intrinsic is provided in both subroutine and function forms; however,
2311
only one form can be used in any given program unit.
2312
 
2313
@item @emph{Standard}:
2314
GNU extension
2315
 
2316
@item @emph{Class}:
2317
Subroutine, function
2318
 
2319
@item @emph{Syntax}:
2320
@multitable @columnfractions .80
2321
@item @code{CALL CHDIR(NAME [, STATUS])}
2322
@item @code{STATUS = CHDIR(NAME)}
2323
@end multitable
2324
 
2325
@item @emph{Arguments}:
2326
@multitable @columnfractions .15 .70
2327
@item @var{NAME}   @tab The type shall be @code{CHARACTER} of default
2328
kind and shall specify a valid path within the file system.
2329
@item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default
2330
kind.  Returns 0 on success, and a system specific and nonzero error code
2331
otherwise.
2332
@end multitable
2333
 
2334
@item @emph{Example}:
2335
@smallexample
2336
PROGRAM test_chdir
2337
  CHARACTER(len=255) :: path
2338
  CALL getcwd(path)
2339
  WRITE(*,*) TRIM(path)
2340
  CALL chdir("/tmp")
2341
  CALL getcwd(path)
2342
  WRITE(*,*) TRIM(path)
2343
END PROGRAM
2344
@end smallexample
2345
 
2346
@item @emph{See also}:
2347
@ref{GETCWD}
2348
@end table
2349
 
2350
 
2351
 
2352
@node CHMOD
2353
@section @code{CHMOD} --- Change access permissions of files
2354
@fnindex CHMOD
2355
@cindex file system, change access mode
2356
 
2357
@table @asis
2358
@item @emph{Description}:
2359
@code{CHMOD} changes the permissions of a file. This function invokes
2360
@code{/bin/chmod} and might therefore not work on all platforms.
2361
 
2362
This intrinsic is provided in both subroutine and function forms; however,
2363
only one form can be used in any given program unit.
2364
 
2365
@item @emph{Standard}:
2366
GNU extension
2367
 
2368
@item @emph{Class}:
2369
Subroutine, function
2370
 
2371
@item @emph{Syntax}:
2372
@multitable @columnfractions .80
2373
@item @code{CALL CHMOD(NAME, MODE[, STATUS])}
2374
@item @code{STATUS = CHMOD(NAME, MODE)}
2375
@end multitable
2376
 
2377
@item @emph{Arguments}:
2378
@multitable @columnfractions .15 .70
2379
 
2380
@item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
2381
file name. Trailing blanks are ignored unless the character
2382
@code{achar(0)} is present, then all characters up to and excluding
2383
@code{achar(0)} are used as the file name.
2384
 
2385
@item @var{MODE} @tab Scalar @code{CHARACTER} of default kind giving the
2386
file permission. @var{MODE} uses the same syntax as the @var{MODE}
2387
argument of @code{/bin/chmod}.
2388
 
2389
@item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is
2390
@code{0} on success and nonzero otherwise.
2391
@end multitable
2392
 
2393
@item @emph{Return value}:
2394
In either syntax, @var{STATUS} is set to @code{0} on success and nonzero
2395
otherwise.
2396
 
2397
@item @emph{Example}:
2398
@code{CHMOD} as subroutine
2399
@smallexample
2400
program chmod_test
2401
  implicit none
2402
  integer :: status
2403
  call chmod('test.dat','u+x',status)
2404
  print *, 'Status: ', status
2405
end program chmod_test
2406
@end smallexample
2407
@code{CHMOD} as function:
2408
@smallexample
2409
program chmod_test
2410
  implicit none
2411
  integer :: status
2412
  status = chmod('test.dat','u+x')
2413
  print *, 'Status: ', status
2414
end program chmod_test
2415
@end smallexample
2416
 
2417
@end table
2418
 
2419
 
2420
 
2421
@node CMPLX
2422
@section @code{CMPLX} --- Complex conversion function
2423
@fnindex CMPLX
2424
@cindex complex numbers, conversion to
2425
@cindex conversion, to complex
2426
 
2427
@table @asis
2428
@item @emph{Description}:
2429
@code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to
2430
the real component.  If @var{Y} is present it is converted to the imaginary
2431
component.  If @var{Y} is not present then the imaginary component is set to
2432
0.0.  If @var{X} is complex then @var{Y} must not be present.
2433
 
2434
@item @emph{Standard}:
2435
Fortran 77 and later
2436
 
2437
@item @emph{Class}:
2438
Elemental function
2439
 
2440
@item @emph{Syntax}:
2441
@code{RESULT = CMPLX(X [, Y [, KIND]])}
2442
 
2443
@item @emph{Arguments}:
2444
@multitable @columnfractions .15 .70
2445
@item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
2446
or @code{COMPLEX}.
2447
@item @var{Y} @tab (Optional; only allowed if @var{X} is not
2448
@code{COMPLEX}.)  May be @code{INTEGER} or @code{REAL}.
2449
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2450
expression indicating the kind parameter of the result.
2451
@end multitable
2452
 
2453
@item @emph{Return value}:
2454
The return value is of @code{COMPLEX} type, with a kind equal to
2455
@var{KIND} if it is specified.  If @var{KIND} is not specified, the
2456
result is of the default @code{COMPLEX} kind, regardless of the kinds of
2457
@var{X} and @var{Y}.
2458
 
2459
@item @emph{Example}:
2460
@smallexample
2461
program test_cmplx
2462
    integer :: i = 42
2463
    real :: x = 3.14
2464
    complex :: z
2465
    z = cmplx(i, x)
2466
    print *, z, cmplx(x)
2467
end program test_cmplx
2468
@end smallexample
2469
 
2470
@item @emph{See also}:
2471
@ref{COMPLEX}
2472
@end table
2473
 
2474
 
2475
 
2476
@node COMMAND_ARGUMENT_COUNT
2477
@section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
2478
@fnindex COMMAND_ARGUMENT_COUNT
2479
@cindex command-line arguments
2480
@cindex command-line arguments, number of
2481
@cindex arguments, to program
2482
 
2483
@table @asis
2484
@item @emph{Description}:
2485
@code{COMMAND_ARGUMENT_COUNT()} returns the number of arguments passed on the
2486
command line when the containing program was invoked.
2487
 
2488
@item @emph{Standard}:
2489
Fortran 2003 and later
2490
 
2491
@item @emph{Class}:
2492
Inquiry function
2493
 
2494
@item @emph{Syntax}:
2495
@code{RESULT = COMMAND_ARGUMENT_COUNT()}
2496
 
2497
@item @emph{Arguments}:
2498
@multitable @columnfractions .15 .70
2499
@item None
2500
@end multitable
2501
 
2502
@item @emph{Return value}:
2503
The return value is an @code{INTEGER} of default kind.
2504
 
2505
@item @emph{Example}:
2506
@smallexample
2507
program test_command_argument_count
2508
    integer :: count
2509
    count = command_argument_count()
2510
    print *, count
2511
end program test_command_argument_count
2512
@end smallexample
2513
 
2514
@item @emph{See also}:
2515
@ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}
2516
@end table
2517
 
2518
 
2519
 
2520
@node COMPLEX
2521
@section @code{COMPLEX} --- Complex conversion function
2522
@fnindex COMPLEX
2523
@cindex complex numbers, conversion to
2524
@cindex conversion, to complex
2525
 
2526
@table @asis
2527
@item @emph{Description}:
2528
@code{COMPLEX(X, Y)} returns a complex number where @var{X} is converted
2529
to the real component and @var{Y} is converted to the imaginary
2530
component.
2531
 
2532
@item @emph{Standard}:
2533
GNU extension
2534
 
2535
@item @emph{Class}:
2536
Elemental function
2537
 
2538
@item @emph{Syntax}:
2539
@code{RESULT = COMPLEX(X, Y)}
2540
 
2541
@item @emph{Arguments}:
2542
@multitable @columnfractions .15 .70
2543
@item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
2544
@item @var{Y} @tab The type may be @code{INTEGER} or @code{REAL}.
2545
@end multitable
2546
 
2547
@item @emph{Return value}:
2548
If @var{X} and @var{Y} are both of @code{INTEGER} type, then the return
2549
value is of default @code{COMPLEX} type.
2550
 
2551
If @var{X} and @var{Y} are of @code{REAL} type, or one is of @code{REAL}
2552
type and one is of @code{INTEGER} type, then the return value is of
2553
@code{COMPLEX} type with a kind equal to that of the @code{REAL}
2554
argument with the highest precision.
2555
 
2556
@item @emph{Example}:
2557
@smallexample
2558
program test_complex
2559
    integer :: i = 42
2560
    real :: x = 3.14
2561
    print *, complex(i, x)
2562
end program test_complex
2563
@end smallexample
2564
 
2565
@item @emph{See also}:
2566
@ref{CMPLX}
2567
@end table
2568
 
2569
 
2570
 
2571
@node CONJG
2572
@section @code{CONJG} --- Complex conjugate function
2573
@fnindex CONJG
2574
@fnindex DCONJG
2575
@cindex complex conjugate
2576
 
2577
@table @asis
2578
@item @emph{Description}:
2579
@code{CONJG(Z)} returns the conjugate of @var{Z}.  If @var{Z} is @code{(x, y)}
2580
then the result is @code{(x, -y)}
2581
 
2582
@item @emph{Standard}:
2583
Fortran 77 and later, has overloads that are GNU extensions
2584
 
2585
@item @emph{Class}:
2586
Elemental function
2587
 
2588
@item @emph{Syntax}:
2589
@code{Z = CONJG(Z)}
2590
 
2591
@item @emph{Arguments}:
2592
@multitable @columnfractions .15 .70
2593
@item @var{Z} @tab The type shall be @code{COMPLEX}.
2594
@end multitable
2595
 
2596
@item @emph{Return value}:
2597
The return value is of type @code{COMPLEX}.
2598
 
2599
@item @emph{Example}:
2600
@smallexample
2601
program test_conjg
2602
    complex :: z = (2.0, 3.0)
2603
    complex(8) :: dz = (2.71_8, -3.14_8)
2604
    z= conjg(z)
2605
    print *, z
2606
    dz = dconjg(dz)
2607
    print *, dz
2608
end program test_conjg
2609
@end smallexample
2610
 
2611
@item @emph{Specific names}:
2612
@multitable @columnfractions .20 .20 .20 .25
2613
@item Name             @tab Argument             @tab Return type          @tab Standard
2614
@item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z}  @tab @code{COMPLEX(8)}    @tab GNU extension
2615
@end multitable
2616
@end table
2617
 
2618
 
2619
 
2620
@node COS
2621
@section @code{COS} --- Cosine function
2622
@fnindex COS
2623
@fnindex DCOS
2624
@fnindex CCOS
2625
@fnindex ZCOS
2626
@fnindex CDCOS
2627
@cindex trigonometric function, cosine
2628
@cindex cosine
2629
 
2630
@table @asis
2631
@item @emph{Description}:
2632
@code{COS(X)} computes the cosine of @var{X}.
2633
 
2634
@item @emph{Standard}:
2635
Fortran 77 and later, has overloads that are GNU extensions
2636
 
2637
@item @emph{Class}:
2638
Elemental function
2639
 
2640
@item @emph{Syntax}:
2641
@code{RESULT = COS(X)}
2642
 
2643
@item @emph{Arguments}:
2644
@multitable @columnfractions .15 .70
2645
@item @var{X} @tab The type shall be @code{REAL} or
2646
@code{COMPLEX}.
2647
@end multitable
2648
 
2649
@item @emph{Return value}:
2650
The return value is of the same type and kind as @var{X}. The real part
2651
of the result is in radians. If @var{X} is of the type @code{REAL},
2652
the return value lies in the range @math{ -1 \leq \cos (x) \leq 1}.
2653
 
2654
@item @emph{Example}:
2655
@smallexample
2656
program test_cos
2657
  real :: x = 0.0
2658
  x = cos(x)
2659
end program test_cos
2660
@end smallexample
2661
 
2662
@item @emph{Specific names}:
2663
@multitable @columnfractions .20 .20 .20 .25
2664
@item Name            @tab Argument            @tab Return type       @tab Standard
2665
@item @code{DCOS(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab Fortran 77 and later
2666
@item @code{CCOS(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
2667
@item @code{ZCOS(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
2668
@item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
2669
@end multitable
2670
 
2671
@item @emph{See also}:
2672
Inverse function: @ref{ACOS}
2673
 
2674
@end table
2675
 
2676
 
2677
 
2678
@node COSH
2679
@section @code{COSH} --- Hyperbolic cosine function
2680
@fnindex COSH
2681
@fnindex DCOSH
2682
@cindex hyperbolic cosine
2683
@cindex hyperbolic function, cosine
2684
@cindex cosine, hyperbolic
2685
 
2686
@table @asis
2687
@item @emph{Description}:
2688
@code{COSH(X)} computes the hyperbolic cosine of @var{X}.
2689
 
2690
@item @emph{Standard}:
2691
Fortran 77 and later, for a complex argument Fortran 2008 or later
2692
 
2693
@item @emph{Class}:
2694
Elemental function
2695
 
2696
@item @emph{Syntax}:
2697
@code{X = COSH(X)}
2698
 
2699
@item @emph{Arguments}:
2700
@multitable @columnfractions .15 .70
2701
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
2702
@end multitable
2703
 
2704
@item @emph{Return value}:
2705
The return value has same type and kind as @var{X}. If @var{X} is
2706
complex, the imaginary part of the result is in radians. If @var{X}
2707
is @code{REAL}, the return value has a lower bound of one,
2708
@math{\cosh (x) \geq 1}.
2709
 
2710
@item @emph{Example}:
2711
@smallexample
2712
program test_cosh
2713
  real(8) :: x = 1.0_8
2714
  x = cosh(x)
2715
end program test_cosh
2716
@end smallexample
2717
 
2718
@item @emph{Specific names}:
2719
@multitable @columnfractions .20 .20 .20 .25
2720
@item Name            @tab Argument          @tab Return type       @tab Standard
2721
@item @code{DCOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
2722
@end multitable
2723
 
2724
@item @emph{See also}:
2725
Inverse function: @ref{ACOSH}
2726
 
2727
@end table
2728
 
2729
 
2730
 
2731
@node COUNT
2732
@section @code{COUNT} --- Count function
2733
@fnindex COUNT
2734
@cindex array, conditionally count elements
2735
@cindex array, element counting
2736
@cindex array, number of elements
2737
 
2738
@table @asis
2739
@item @emph{Description}:
2740
 
2741
Counts the number of @code{.TRUE.} elements in a logical @var{MASK},
2742
or, if the @var{DIM} argument is supplied, counts the number of
2743
elements along each row of the array in the @var{DIM} direction.
2744
If the array has zero size, or all of the elements of @var{MASK} are
2745
@code{.FALSE.}, then the result is @code{0}.
2746
 
2747
@item @emph{Standard}:
2748
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
2749
 
2750
@item @emph{Class}:
2751
Transformational function
2752
 
2753
@item @emph{Syntax}:
2754
@code{RESULT = COUNT(MASK [, DIM, KIND])}
2755
 
2756
@item @emph{Arguments}:
2757
@multitable @columnfractions .15 .70
2758
@item @var{MASK} @tab The type shall be @code{LOGICAL}.
2759
@item @var{DIM}  @tab (Optional) The type shall be @code{INTEGER}.
2760
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
2761
expression indicating the kind parameter of the result.
2762
@end multitable
2763
 
2764
@item @emph{Return value}:
2765
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
2766
@var{KIND} is absent, the return value is of default integer kind.
2767
If @var{DIM} is present, the result is an array with a rank one less
2768
than the rank of @var{ARRAY}, and a size corresponding to the shape
2769
of @var{ARRAY} with the @var{DIM} dimension removed.
2770
 
2771
@item @emph{Example}:
2772
@smallexample
2773
program test_count
2774
    integer, dimension(2,3) :: a, b
2775
    logical, dimension(2,3) :: mask
2776
    a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
2777
    b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
2778
    print '(3i3)', a(1,:)
2779
    print '(3i3)', a(2,:)
2780
    print *
2781
    print '(3i3)', b(1,:)
2782
    print '(3i3)', b(2,:)
2783
    print *
2784
    mask = a.ne.b
2785
    print '(3l3)', mask(1,:)
2786
    print '(3l3)', mask(2,:)
2787
    print *
2788
    print '(3i3)', count(mask)
2789
    print *
2790
    print '(3i3)', count(mask, 1)
2791
    print *
2792
    print '(3i3)', count(mask, 2)
2793
end program test_count
2794
@end smallexample
2795
@end table
2796
 
2797
 
2798
 
2799
@node CPU_TIME
2800
@section @code{CPU_TIME} --- CPU elapsed time in seconds
2801
@fnindex CPU_TIME
2802
@cindex time, elapsed
2803
 
2804
@table @asis
2805
@item @emph{Description}:
2806
Returns a @code{REAL} value representing the elapsed CPU time in
2807
seconds.  This is useful for testing segments of code to determine
2808
execution time.
2809
 
2810
If a time source is available, time will be reported with microsecond
2811
resolution. If no time source is available, @var{TIME} is set to
2812
@code{-1.0}.
2813
 
2814
Note that @var{TIME} may contain a, system dependent, arbitrary offset
2815
and may not start with @code{0.0}. For @code{CPU_TIME}, the absolute
2816
value is meaningless, only differences between subsequent calls to
2817
this subroutine, as shown in the example below, should be used.
2818
 
2819
 
2820
@item @emph{Standard}:
2821
Fortran 95 and later
2822
 
2823
@item @emph{Class}:
2824
Subroutine
2825
 
2826
@item @emph{Syntax}:
2827
@code{CALL CPU_TIME(TIME)}
2828
 
2829
@item @emph{Arguments}:
2830
@multitable @columnfractions .15 .70
2831
@item @var{TIME} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}.
2832
@end multitable
2833
 
2834
@item @emph{Return value}:
2835
None
2836
 
2837
@item @emph{Example}:
2838
@smallexample
2839
program test_cpu_time
2840
    real :: start, finish
2841
    call cpu_time(start)
2842
        ! put code to test here
2843
    call cpu_time(finish)
2844
    print '("Time = ",f6.3," seconds.")',finish-start
2845
end program test_cpu_time
2846
@end smallexample
2847
 
2848
@item @emph{See also}:
2849
@ref{SYSTEM_CLOCK}, @ref{DATE_AND_TIME}
2850
@end table
2851
 
2852
 
2853
 
2854
@node CSHIFT
2855
@section @code{CSHIFT} --- Circular shift elements of an array
2856
@fnindex CSHIFT
2857
@cindex array, shift circularly
2858
@cindex array, permutation
2859
@cindex array, rotate
2860
 
2861
@table @asis
2862
@item @emph{Description}:
2863
@code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of
2864
@var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is omitted it is
2865
taken to be @code{1}.  @var{DIM} is a scalar of type @code{INTEGER} in the
2866
range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}.
2867
If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted
2868
by @var{SHIFT} places.  If rank is greater than one, then all complete rank one
2869
sections of @var{ARRAY} along the given dimension are shifted.  Elements
2870
shifted out one end of each rank one section are shifted back in the other end.
2871
 
2872
@item @emph{Standard}:
2873
Fortran 95 and later
2874
 
2875
@item @emph{Class}:
2876
Transformational function
2877
 
2878
@item @emph{Syntax}:
2879
@code{RESULT = CSHIFT(ARRAY, SHIFT [, DIM])}
2880
 
2881
@item @emph{Arguments}:
2882
@multitable @columnfractions .15 .70
2883
@item @var{ARRAY}  @tab Shall be an array of any type.
2884
@item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
2885
@item @var{DIM}    @tab The type shall be @code{INTEGER}.
2886
@end multitable
2887
 
2888
@item @emph{Return value}:
2889
Returns an array of same type and rank as the @var{ARRAY} argument.
2890
 
2891
@item @emph{Example}:
2892
@smallexample
2893
program test_cshift
2894
    integer, dimension(3,3) :: a
2895
    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
2896
    print '(3i3)', a(1,:)
2897
    print '(3i3)', a(2,:)
2898
    print '(3i3)', a(3,:)
2899
    a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)
2900
    print *
2901
    print '(3i3)', a(1,:)
2902
    print '(3i3)', a(2,:)
2903
    print '(3i3)', a(3,:)
2904
end program test_cshift
2905
@end smallexample
2906
@end table
2907
 
2908
 
2909
 
2910
@node CTIME
2911
@section @code{CTIME} --- Convert a time into a string
2912
@fnindex CTIME
2913
@cindex time, conversion to string
2914
@cindex conversion, to string
2915
 
2916
@table @asis
2917
@item @emph{Description}:
2918
@code{CTIME} converts a system time value, such as returned by
2919
@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995}.
2920
 
2921
This intrinsic is provided in both subroutine and function forms; however,
2922
only one form can be used in any given program unit.
2923
 
2924
@item @emph{Standard}:
2925
GNU extension
2926
 
2927
@item @emph{Class}:
2928
Subroutine, function
2929
 
2930
@item @emph{Syntax}:
2931
@multitable @columnfractions .80
2932
@item @code{CALL CTIME(TIME, RESULT)}.
2933
@item @code{RESULT = CTIME(TIME)}, (not recommended).
2934
@end multitable
2935
 
2936
@item @emph{Arguments}:
2937
@multitable @columnfractions .15 .70
2938
@item @var{TIME}    @tab The type shall be of type @code{INTEGER(KIND=8)}.
2939
@item @var{RESULT}  @tab The type shall be of type @code{CHARACTER} and
2940
of default kind.
2941
@end multitable
2942
 
2943
@item @emph{Return value}:
2944
The converted date and time as a string.
2945
 
2946
@item @emph{Example}:
2947
@smallexample
2948
program test_ctime
2949
    integer(8) :: i
2950
    character(len=30) :: date
2951
    i = time8()
2952
 
2953
    ! Do something, main part of the program
2954
 
2955
    call ctime(i,date)
2956
    print *, 'Program was started on ', date
2957
end program test_ctime
2958
@end smallexample
2959
 
2960
@item @emph{See Also}:
2961
@ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
2962
@end table
2963
 
2964
 
2965
 
2966
@node DATE_AND_TIME
2967
@section @code{DATE_AND_TIME} --- Date and time subroutine
2968
@fnindex DATE_AND_TIME
2969
@cindex date, current
2970
@cindex current date
2971
@cindex time, current
2972
@cindex current time
2973
 
2974
@table @asis
2975
@item @emph{Description}:
2976
@code{DATE_AND_TIME(DATE, TIME, ZONE, VALUES)} gets the corresponding date and
2977
time information from the real-time system clock.  @var{DATE} is
2978
@code{INTENT(OUT)} and has form ccyymmdd.  @var{TIME} is @code{INTENT(OUT)} and
2979
has form hhmmss.sss.  @var{ZONE} is @code{INTENT(OUT)} and has form (+-)hhmm,
2980
representing the difference with respect to Coordinated Universal Time (UTC).
2981
Unavailable time and date parameters return blanks.
2982
 
2983
@var{VALUES} is @code{INTENT(OUT)} and provides the following:
2984
 
2985
@multitable @columnfractions .15 .30 .40
2986
@item @tab @code{VALUE(1)}: @tab The year
2987
@item @tab @code{VALUE(2)}: @tab The month
2988
@item @tab @code{VALUE(3)}: @tab The day of the month
2989
@item @tab @code{VALUE(4)}: @tab Time difference with UTC in minutes
2990
@item @tab @code{VALUE(5)}: @tab The hour of the day
2991
@item @tab @code{VALUE(6)}: @tab The minutes of the hour
2992
@item @tab @code{VALUE(7)}: @tab The seconds of the minute
2993
@item @tab @code{VALUE(8)}: @tab The milliseconds of the second
2994
@end multitable
2995
 
2996
@item @emph{Standard}:
2997
Fortran 95 and later
2998
 
2999
@item @emph{Class}:
3000
Subroutine
3001
 
3002
@item @emph{Syntax}:
3003
@code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])}
3004
 
3005
@item @emph{Arguments}:
3006
@multitable @columnfractions .15 .70
3007
@item @var{DATE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=8)}
3008
or larger, and of default kind.
3009
@item @var{TIME}  @tab (Optional) The type shall be @code{CHARACTER(LEN=10)}
3010
or larger, and of default kind.
3011
@item @var{ZONE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=5)}
3012
or larger, and of default kind.
3013
@item @var{VALUES}@tab (Optional) The type shall be @code{INTEGER(8)}.
3014
@end multitable
3015
 
3016
@item @emph{Return value}:
3017
None
3018
 
3019
@item @emph{Example}:
3020
@smallexample
3021
program test_time_and_date
3022
    character(8)  :: date
3023
    character(10) :: time
3024
    character(5)  :: zone
3025
    integer,dimension(8) :: values
3026
    ! using keyword arguments
3027
    call date_and_time(date,time,zone,values)
3028
    call date_and_time(DATE=date,ZONE=zone)
3029
    call date_and_time(TIME=time)
3030
    call date_and_time(VALUES=values)
3031
    print '(a,2x,a,2x,a)', date, time, zone
3032
    print '(8i5))', values
3033
end program test_time_and_date
3034
@end smallexample
3035
 
3036
@item @emph{See also}:
3037
@ref{CPU_TIME}, @ref{SYSTEM_CLOCK}
3038
@end table
3039
 
3040
 
3041
 
3042
@node DBLE
3043
@section @code{DBLE} --- Double conversion function
3044
@fnindex DBLE
3045
@cindex conversion, to real
3046
 
3047
@table @asis
3048
@item @emph{Description}:
3049
@code{DBLE(A)} Converts @var{A} to double precision real type.
3050
 
3051
@item @emph{Standard}:
3052
Fortran 77 and later
3053
 
3054
@item @emph{Class}:
3055
Elemental function
3056
 
3057
@item @emph{Syntax}:
3058
@code{RESULT = DBLE(A)}
3059
 
3060
@item @emph{Arguments}:
3061
@multitable @columnfractions .15 .70
3062
@item @var{A} @tab The type shall be @code{INTEGER}, @code{REAL},
3063
or @code{COMPLEX}.
3064
@end multitable
3065
 
3066
@item @emph{Return value}:
3067
The return value is of type double precision real.
3068
 
3069
@item @emph{Example}:
3070
@smallexample
3071
program test_dble
3072
    real    :: x = 2.18
3073
    integer :: i = 5
3074
    complex :: z = (2.3,1.14)
3075
    print *, dble(x), dble(i), dble(z)
3076
end program test_dble
3077
@end smallexample
3078
 
3079
@item @emph{See also}:
3080
@ref{DFLOAT}, @ref{FLOAT}, @ref{REAL}
3081
@end table
3082
 
3083
 
3084
 
3085
@node DCMPLX
3086
@section @code{DCMPLX} --- Double complex conversion function
3087
@fnindex DCMPLX
3088
@cindex complex numbers, conversion to
3089
@cindex conversion, to complex
3090
 
3091
@table @asis
3092
@item @emph{Description}:
3093
@code{DCMPLX(X [,Y])} returns a double complex number where @var{X} is
3094
converted to the real component.  If @var{Y} is present it is converted to the
3095
imaginary component.  If @var{Y} is not present then the imaginary component is
3096
set to 0.0.  If @var{X} is complex then @var{Y} must not be present.
3097
 
3098
@item @emph{Standard}:
3099
GNU extension
3100
 
3101
@item @emph{Class}:
3102
Elemental function
3103
 
3104
@item @emph{Syntax}:
3105
@code{RESULT = DCMPLX(X [, Y])}
3106
 
3107
@item @emph{Arguments}:
3108
@multitable @columnfractions .15 .70
3109
@item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
3110
or @code{COMPLEX}.
3111
@item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX}.) May be
3112
@code{INTEGER} or @code{REAL}.
3113
@end multitable
3114
 
3115
@item @emph{Return value}:
3116
The return value is of type @code{COMPLEX(8)}
3117
 
3118
@item @emph{Example}:
3119
@smallexample
3120
program test_dcmplx
3121
    integer :: i = 42
3122
    real :: x = 3.14
3123
    complex :: z
3124
    z = cmplx(i, x)
3125
    print *, dcmplx(i)
3126
    print *, dcmplx(x)
3127
    print *, dcmplx(z)
3128
    print *, dcmplx(x,i)
3129
end program test_dcmplx
3130
@end smallexample
3131
@end table
3132
 
3133
 
3134
 
3135
@node DFLOAT
3136
@section @code{DFLOAT} --- Double conversion function
3137
@fnindex DFLOAT
3138
@cindex conversion, to real
3139
 
3140
@table @asis
3141
@item @emph{Description}:
3142
@code{DFLOAT(A)} Converts @var{A} to double precision real type.
3143
 
3144
@item @emph{Standard}:
3145
GNU extension
3146
 
3147
@item @emph{Class}:
3148
Elemental function
3149
 
3150
@item @emph{Syntax}:
3151
@code{RESULT = DFLOAT(A)}
3152
 
3153
@item @emph{Arguments}:
3154
@multitable @columnfractions .15 .70
3155
@item @var{A} @tab The type shall be @code{INTEGER}.
3156
@end multitable
3157
 
3158
@item @emph{Return value}:
3159
The return value is of type double precision real.
3160
 
3161
@item @emph{Example}:
3162
@smallexample
3163
program test_dfloat
3164
    integer :: i = 5
3165
    print *, dfloat(i)
3166
end program test_dfloat
3167
@end smallexample
3168
 
3169
@item @emph{See also}:
3170
@ref{DBLE}, @ref{FLOAT}, @ref{REAL}
3171
@end table
3172
 
3173
 
3174
 
3175
@node DIGITS
3176
@section @code{DIGITS} --- Significant binary digits function
3177
@fnindex DIGITS
3178
@cindex model representation, significant digits
3179
 
3180
@table @asis
3181
@item @emph{Description}:
3182
@code{DIGITS(X)} returns the number of significant binary digits of the internal
3183
model representation of @var{X}.  For example, on a system using a 32-bit
3184
floating point representation, a default real number would likely return 24.
3185
 
3186
@item @emph{Standard}:
3187
Fortran 95 and later
3188
 
3189
@item @emph{Class}:
3190
Inquiry function
3191
 
3192
@item @emph{Syntax}:
3193
@code{RESULT = DIGITS(X)}
3194
 
3195
@item @emph{Arguments}:
3196
@multitable @columnfractions .15 .70
3197
@item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
3198
@end multitable
3199
 
3200
@item @emph{Return value}:
3201
The return value is of type @code{INTEGER}.
3202
 
3203
@item @emph{Example}:
3204
@smallexample
3205
program test_digits
3206
    integer :: i = 12345
3207
    real :: x = 3.143
3208
    real(8) :: y = 2.33
3209
    print *, digits(i)
3210
    print *, digits(x)
3211
    print *, digits(y)
3212
end program test_digits
3213
@end smallexample
3214
@end table
3215
 
3216
 
3217
 
3218
@node DIM
3219
@section @code{DIM} --- Positive difference
3220
@fnindex DIM
3221
@fnindex IDIM
3222
@fnindex DDIM
3223
@cindex positive difference
3224
 
3225
@table @asis
3226
@item @emph{Description}:
3227
@code{DIM(X,Y)} returns the difference @code{X-Y} if the result is positive;
3228
otherwise returns zero.
3229
 
3230
@item @emph{Standard}:
3231
Fortran 77 and later
3232
 
3233
@item @emph{Class}:
3234
Elemental function
3235
 
3236
@item @emph{Syntax}:
3237
@code{RESULT = DIM(X, Y)}
3238
 
3239
@item @emph{Arguments}:
3240
@multitable @columnfractions .15 .70
3241
@item @var{X} @tab The type shall be @code{INTEGER} or @code{REAL}
3242
@item @var{Y} @tab The type shall be the same type and kind as @var{X}.
3243
@end multitable
3244
 
3245
@item @emph{Return value}:
3246
The return value is of type @code{INTEGER} or @code{REAL}.
3247
 
3248
@item @emph{Example}:
3249
@smallexample
3250
program test_dim
3251
    integer :: i
3252
    real(8) :: x
3253
    i = dim(4, 15)
3254
    x = dim(4.345_8, 2.111_8)
3255
    print *, i
3256
    print *, x
3257
end program test_dim
3258
@end smallexample
3259
 
3260
@item @emph{Specific names}:
3261
@multitable @columnfractions .20 .20 .20 .25
3262
@item Name             @tab Argument              @tab Return type       @tab Standard
3263
@item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X,Y} @tab @code{INTEGER(4)} @tab Fortran 77 and later
3264
@item @code{DDIM(X,Y)} @tab @code{REAL(8) X,Y}    @tab @code{REAL(8)}    @tab Fortran 77 and later
3265
@end multitable
3266
@end table
3267
 
3268
 
3269
 
3270
@node DOT_PRODUCT
3271
@section @code{DOT_PRODUCT} --- Dot product function
3272
@fnindex DOT_PRODUCT
3273
@cindex dot product
3274
@cindex vector product
3275
@cindex product, vector
3276
 
3277
@table @asis
3278
@item @emph{Description}:
3279
@code{DOT_PRODUCT(VECTOR_A, VECTOR_B)} computes the dot product multiplication
3280
of two vectors @var{VECTOR_A} and @var{VECTOR_B}.  The two vectors may be
3281
either numeric or logical and must be arrays of rank one and of equal size. If
3282
the vectors are @code{INTEGER} or @code{REAL}, the result is
3283
@code{SUM(VECTOR_A*VECTOR_B)}. If the vectors are @code{COMPLEX}, the result
3284
is @code{SUM(CONJG(VECTOR_A)*VECTOR_B)}. If the vectors are @code{LOGICAL},
3285
the result is @code{ANY(VECTOR_A .AND. VECTOR_B)}.
3286
 
3287
@item @emph{Standard}:
3288
Fortran 95 and later
3289
 
3290
@item @emph{Class}:
3291
Transformational function
3292
 
3293
@item @emph{Syntax}:
3294
@code{RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)}
3295
 
3296
@item @emph{Arguments}:
3297
@multitable @columnfractions .15 .70
3298
@item @var{VECTOR_A} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
3299
@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.
3300
@end multitable
3301
 
3302
@item @emph{Return value}:
3303
If the arguments are numeric, the return value is a scalar of numeric type,
3304
@code{INTEGER}, @code{REAL}, or @code{COMPLEX}.  If the arguments are
3305
@code{LOGICAL}, the return value is @code{.TRUE.} or @code{.FALSE.}.
3306
 
3307
@item @emph{Example}:
3308
@smallexample
3309
program test_dot_prod
3310
    integer, dimension(3) :: a, b
3311
    a = (/ 1, 2, 3 /)
3312
    b = (/ 4, 5, 6 /)
3313
    print '(3i3)', a
3314
    print *
3315
    print '(3i3)', b
3316
    print *
3317
    print *, dot_product(a,b)
3318
end program test_dot_prod
3319
@end smallexample
3320
@end table
3321
 
3322
 
3323
 
3324
@node DPROD
3325
@section @code{DPROD} --- Double product function
3326
@fnindex DPROD
3327
@cindex product, double-precision
3328
 
3329
@table @asis
3330
@item @emph{Description}:
3331
@code{DPROD(X,Y)} returns the product @code{X*Y}.
3332
 
3333
@item @emph{Standard}:
3334
Fortran 77 and later
3335
 
3336
@item @emph{Class}:
3337
Elemental function
3338
 
3339
@item @emph{Syntax}:
3340
@code{RESULT = DPROD(X, Y)}
3341
 
3342
@item @emph{Arguments}:
3343
@multitable @columnfractions .15 .70
3344
@item @var{X} @tab The type shall be @code{REAL}.
3345
@item @var{Y} @tab The type shall be @code{REAL}.
3346
@end multitable
3347
 
3348
@item @emph{Return value}:
3349
The return value is of type @code{REAL(8)}.
3350
 
3351
@item @emph{Example}:
3352
@smallexample
3353
program test_dprod
3354
    real :: x = 5.2
3355
    real :: y = 2.3
3356
    real(8) :: d
3357
    d = dprod(x,y)
3358
    print *, d
3359
end program test_dprod
3360
@end smallexample
3361
@end table
3362
 
3363
 
3364
 
3365
@node DREAL
3366
@section @code{DREAL} --- Double real part function
3367
@fnindex DREAL
3368
@cindex complex numbers, real part
3369
 
3370
@table @asis
3371
@item @emph{Description}:
3372
@code{DREAL(Z)} returns the real part of complex variable @var{Z}.
3373
 
3374
@item @emph{Standard}:
3375
GNU extension
3376
 
3377
@item @emph{Class}:
3378
Elemental function
3379
 
3380
@item @emph{Syntax}:
3381
@code{RESULT = DREAL(A)}
3382
 
3383
@item @emph{Arguments}:
3384
@multitable @columnfractions .15 .70
3385
@item @var{A} @tab The type shall be @code{COMPLEX(8)}.
3386
@end multitable
3387
 
3388
@item @emph{Return value}:
3389
The return value is of type @code{REAL(8)}.
3390
 
3391
@item @emph{Example}:
3392
@smallexample
3393
program test_dreal
3394
    complex(8) :: z = (1.3_8,7.2_8)
3395
    print *, dreal(z)
3396
end program test_dreal
3397
@end smallexample
3398
 
3399
@item @emph{See also}:
3400
@ref{AIMAG}
3401
 
3402
@end table
3403
 
3404
 
3405
 
3406
@node DTIME
3407
@section @code{DTIME} --- Execution time subroutine (or function)
3408
@fnindex DTIME
3409
@cindex time, elapsed
3410
@cindex elapsed time
3411
 
3412
@table @asis
3413
@item @emph{Description}:
3414
@code{DTIME(VALUES, TIME)} initially returns the number of seconds of runtime
3415
since the start of the process's execution in @var{TIME}.  @var{VALUES}
3416
returns the user and system components of this time in @code{VALUES(1)} and
3417
@code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) +
3418
VALUES(2)}.
3419
 
3420
Subsequent invocations of @code{DTIME} return values accumulated since the
3421
previous invocation.
3422
 
3423
On some systems, the underlying timings are represented using types with
3424
sufficiently small limits that overflows (wrap around) are possible, such as
3425
32-bit types. Therefore, the values returned by this intrinsic might be, or
3426
become, negative, or numerically less than previous values, during a single
3427
run of the compiled program.
3428
 
3429
Please note, that this implementation is thread safe if used within OpenMP
3430
directives, i.e., its state will be consistent while called from multiple
3431
threads. However, if @code{DTIME} is called from multiple threads, the result
3432
is still the time since the last invocation. This may not give the intended
3433
results. If possible, use @code{CPU_TIME} instead.
3434
 
3435
This intrinsic is provided in both subroutine and function forms; however,
3436
only one form can be used in any given program unit.
3437
 
3438
@var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
3439
 
3440
@multitable @columnfractions .15 .30 .40
3441
@item @tab @code{VALUES(1)}: @tab User time in seconds.
3442
@item @tab @code{VALUES(2)}: @tab System time in seconds.
3443
@item @tab @code{TIME}: @tab Run time since start in seconds.
3444
@end multitable
3445
 
3446
@item @emph{Standard}:
3447
GNU extension
3448
 
3449
@item @emph{Class}:
3450
Subroutine, function
3451
 
3452
@item @emph{Syntax}:
3453
@multitable @columnfractions .80
3454
@item @code{CALL DTIME(VALUES, TIME)}.
3455
@item @code{TIME = DTIME(VALUES)}, (not recommended).
3456
@end multitable
3457
 
3458
@item @emph{Arguments}:
3459
@multitable @columnfractions .15 .70
3460
@item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
3461
@item @var{TIME}@tab The type shall be @code{REAL(4)}.
3462
@end multitable
3463
 
3464
@item @emph{Return value}:
3465
Elapsed time in seconds since the last invocation or since the start of program
3466
execution if not called before.
3467
 
3468
@item @emph{Example}:
3469
@smallexample
3470
program test_dtime
3471
    integer(8) :: i, j
3472
    real, dimension(2) :: tarray
3473
    real :: result
3474
    call dtime(tarray, result)
3475
    print *, result
3476
    print *, tarray(1)
3477
    print *, tarray(2)
3478
    do i=1,100000000    ! Just a delay
3479
        j = i * i - i
3480
    end do
3481
    call dtime(tarray, result)
3482
    print *, result
3483
    print *, tarray(1)
3484
    print *, tarray(2)
3485
end program test_dtime
3486
@end smallexample
3487
 
3488
@item @emph{See also}:
3489
@ref{CPU_TIME}
3490
 
3491
@end table
3492
 
3493
 
3494
 
3495
@node EOSHIFT
3496
@section @code{EOSHIFT} --- End-off shift elements of an array
3497
@fnindex EOSHIFT
3498
@cindex array, shift
3499
 
3500
@table @asis
3501
@item @emph{Description}:
3502
@code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on
3503
elements of @var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is
3504
omitted it is taken to be @code{1}.  @var{DIM} is a scalar of type
3505
@code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the
3506
rank of @var{ARRAY}.  If the rank of @var{ARRAY} is one, then all elements of
3507
@var{ARRAY} are shifted by @var{SHIFT} places.  If rank is greater than one,
3508
then all complete rank one sections of @var{ARRAY} along the given dimension are
3509
shifted.  Elements shifted out one end of each rank one section are dropped.  If
3510
@var{BOUNDARY} is present then the corresponding value of from @var{BOUNDARY}
3511
is copied back in the other end.  If @var{BOUNDARY} is not present then the
3512
following are copied in depending on the type of @var{ARRAY}.
3513
 
3514
@multitable @columnfractions .15 .80
3515
@item @emph{Array Type} @tab @emph{Boundary Value}
3516
@item Numeric  @tab 0 of the type and kind of @var{ARRAY}.
3517
@item Logical  @tab @code{.FALSE.}.
3518
@item Character(@var{len}) @tab @var{len} blanks.
3519
@end multitable
3520
 
3521
@item @emph{Standard}:
3522
Fortran 95 and later
3523
 
3524
@item @emph{Class}:
3525
Transformational function
3526
 
3527
@item @emph{Syntax}:
3528
@code{RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])}
3529
 
3530
@item @emph{Arguments}:
3531
@multitable @columnfractions .15 .70
3532
@item @var{ARRAY}  @tab May be any type, not scalar.
3533
@item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
3534
@item @var{BOUNDARY} @tab Same type as @var{ARRAY}.
3535
@item @var{DIM}    @tab The type shall be @code{INTEGER}.
3536
@end multitable
3537
 
3538
@item @emph{Return value}:
3539
Returns an array of same type and rank as the @var{ARRAY} argument.
3540
 
3541
@item @emph{Example}:
3542
@smallexample
3543
program test_eoshift
3544
    integer, dimension(3,3) :: a
3545
    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
3546
    print '(3i3)', a(1,:)
3547
    print '(3i3)', a(2,:)
3548
    print '(3i3)', a(3,:)
3549
    a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
3550
    print *
3551
    print '(3i3)', a(1,:)
3552
    print '(3i3)', a(2,:)
3553
    print '(3i3)', a(3,:)
3554
end program test_eoshift
3555
@end smallexample
3556
@end table
3557
 
3558
 
3559
 
3560
@node EPSILON
3561
@section @code{EPSILON} --- Epsilon function
3562
@fnindex EPSILON
3563
@cindex model representation, epsilon
3564
 
3565
@table @asis
3566
@item @emph{Description}:
3567
@code{EPSILON(X)} returns the smallest number @var{E} of the same kind
3568
as @var{X} such that @math{1 + E > 1}.
3569
 
3570
@item @emph{Standard}:
3571
Fortran 95 and later
3572
 
3573
@item @emph{Class}:
3574
Inquiry function
3575
 
3576
@item @emph{Syntax}:
3577
@code{RESULT = EPSILON(X)}
3578
 
3579
@item @emph{Arguments}:
3580
@multitable @columnfractions .15 .70
3581
@item @var{X} @tab The type shall be @code{REAL}.
3582
@end multitable
3583
 
3584
@item @emph{Return value}:
3585
The return value is of same type as the argument.
3586
 
3587
@item @emph{Example}:
3588
@smallexample
3589
program test_epsilon
3590
    real :: x = 3.143
3591
    real(8) :: y = 2.33
3592
    print *, EPSILON(x)
3593
    print *, EPSILON(y)
3594
end program test_epsilon
3595
@end smallexample
3596
@end table
3597
 
3598
 
3599
 
3600
@node ERF
3601
@section @code{ERF} --- Error function
3602
@fnindex ERF
3603
@cindex error function
3604
 
3605
@table @asis
3606
@item @emph{Description}:
3607
@code{ERF(X)} computes the error function of @var{X}.
3608
 
3609
@item @emph{Standard}:
3610
Fortran 2008 and later
3611
 
3612
@item @emph{Class}:
3613
Elemental function
3614
 
3615
@item @emph{Syntax}:
3616
@code{RESULT = ERF(X)}
3617
 
3618
@item @emph{Arguments}:
3619
@multitable @columnfractions .15 .70
3620
@item @var{X} @tab The type shall be @code{REAL}.
3621
@end multitable
3622
 
3623
@item @emph{Return value}:
3624
The return value is of type @code{REAL}, of the same kind as
3625
@var{X} and lies in the range @math{-1 \leq erf (x) \leq 1 }.
3626
 
3627
@item @emph{Example}:
3628
@smallexample
3629
program test_erf
3630
  real(8) :: x = 0.17_8
3631
  x = erf(x)
3632
end program test_erf
3633
@end smallexample
3634
 
3635
@item @emph{Specific names}:
3636
@multitable @columnfractions .20 .20 .20 .25
3637
@item Name            @tab Argument          @tab Return type       @tab Standard
3638
@item @code{DERF(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
3639
@end multitable
3640
@end table
3641
 
3642
 
3643
 
3644
@node ERFC
3645
@section @code{ERFC} --- Error function
3646
@fnindex ERFC
3647
@cindex error function, complementary
3648
 
3649
@table @asis
3650
@item @emph{Description}:
3651
@code{ERFC(X)} computes the complementary error function of @var{X}.
3652
 
3653
@item @emph{Standard}:
3654
Fortran 2008 and later
3655
 
3656
@item @emph{Class}:
3657
Elemental function
3658
 
3659
@item @emph{Syntax}:
3660
@code{RESULT = ERFC(X)}
3661
 
3662
@item @emph{Arguments}:
3663
@multitable @columnfractions .15 .70
3664
@item @var{X} @tab The type shall be @code{REAL}.
3665
@end multitable
3666
 
3667
@item @emph{Return value}:
3668
The return value is of type @code{REAL} and of the same kind as @var{X}.
3669
It lies in the range @math{ 0 \leq erfc (x) \leq 2 }.
3670
 
3671
@item @emph{Example}:
3672
@smallexample
3673
program test_erfc
3674
  real(8) :: x = 0.17_8
3675
  x = erfc(x)
3676
end program test_erfc
3677
@end smallexample
3678
 
3679
@item @emph{Specific names}:
3680
@multitable @columnfractions .20 .20 .20 .25
3681
@item Name            @tab Argument          @tab Return type       @tab Standard
3682
@item @code{DERFC(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
3683
@end multitable
3684
@end table
3685
 
3686
 
3687
 
3688
@node ERFC_SCALED
3689
@section @code{ERFC_SCALED} --- Error function
3690
@fnindex ERFC_SCALED
3691
@cindex error function, complementary, exponentially-scaled
3692
 
3693
@table @asis
3694
@item @emph{Description}:
3695
@code{ERFC_SCALED(X)} computes the exponentially-scaled complementary
3696
error function of @var{X}.
3697
 
3698
@item @emph{Standard}:
3699
Fortran 2008 and later
3700
 
3701
@item @emph{Class}:
3702
Elemental function
3703
 
3704
@item @emph{Syntax}:
3705
@code{RESULT = ERFC_SCALED(X)}
3706
 
3707
@item @emph{Arguments}:
3708
@multitable @columnfractions .15 .70
3709
@item @var{X} @tab The type shall be @code{REAL}.
3710
@end multitable
3711
 
3712
@item @emph{Return value}:
3713
The return value is of type @code{REAL} and of the same kind as @var{X}.
3714
 
3715
@item @emph{Example}:
3716
@smallexample
3717
program test_erfc_scaled
3718
  real(8) :: x = 0.17_8
3719
  x = erfc_scaled(x)
3720
end program test_erfc_scaled
3721
@end smallexample
3722
@end table
3723
 
3724
 
3725
 
3726
@node ETIME
3727
@section @code{ETIME} --- Execution time subroutine (or function)
3728
@fnindex ETIME
3729
@cindex time, elapsed
3730
 
3731
@table @asis
3732
@item @emph{Description}:
3733
@code{ETIME(VALUES, TIME)} returns the number of seconds of runtime
3734
since the start of the process's execution in @var{TIME}.  @var{VALUES}
3735
returns the user and system components of this time in @code{VALUES(1)} and
3736
@code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) + VALUES(2)}.
3737
 
3738
On some systems, the underlying timings are represented using types with
3739
sufficiently small limits that overflows (wrap around) are possible, such as
3740
32-bit types. Therefore, the values returned by this intrinsic might be, or
3741
become, negative, or numerically less than previous values, during a single
3742
run of the compiled program.
3743
 
3744
This intrinsic is provided in both subroutine and function forms; however,
3745
only one form can be used in any given program unit.
3746
 
3747
@var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
3748
 
3749
@multitable @columnfractions .15 .30 .60
3750
@item @tab @code{VALUES(1)}: @tab User time in seconds.
3751
@item @tab @code{VALUES(2)}: @tab System time in seconds.
3752
@item @tab @code{TIME}: @tab Run time since start in seconds.
3753
@end multitable
3754
 
3755
@item @emph{Standard}:
3756
GNU extension
3757
 
3758
@item @emph{Class}:
3759
Subroutine, function
3760
 
3761
@item @emph{Syntax}:
3762
@multitable @columnfractions .80
3763
@item @code{CALL ETIME(VALUES, TIME)}.
3764
@item @code{TIME = ETIME(VALUES)}, (not recommended).
3765
@end multitable
3766
 
3767
@item @emph{Arguments}:
3768
@multitable @columnfractions .15 .70
3769
@item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
3770
@item @var{TIME}@tab The type shall be @code{REAL(4)}.
3771
@end multitable
3772
 
3773
@item @emph{Return value}:
3774
Elapsed time in seconds since the start of program execution.
3775
 
3776
@item @emph{Example}:
3777
@smallexample
3778
program test_etime
3779
    integer(8) :: i, j
3780
    real, dimension(2) :: tarray
3781
    real :: result
3782
    call ETIME(tarray, result)
3783
    print *, result
3784
    print *, tarray(1)
3785
    print *, tarray(2)
3786
    do i=1,100000000    ! Just a delay
3787
        j = i * i - i
3788
    end do
3789
    call ETIME(tarray, result)
3790
    print *, result
3791
    print *, tarray(1)
3792
    print *, tarray(2)
3793
end program test_etime
3794
@end smallexample
3795
 
3796
@item @emph{See also}:
3797
@ref{CPU_TIME}
3798
 
3799
@end table
3800
 
3801
 
3802
 
3803
@node EXIT
3804
@section @code{EXIT} --- Exit the program with status.
3805
@fnindex EXIT
3806
@cindex program termination
3807
@cindex terminate program
3808
 
3809
@table @asis
3810
@item @emph{Description}:
3811
@code{EXIT} causes immediate termination of the program with status.  If status
3812
is omitted it returns the canonical @emph{success} for the system.  All Fortran
3813
I/O units are closed.
3814
 
3815
@item @emph{Standard}:
3816
GNU extension
3817
 
3818
@item @emph{Class}:
3819
Subroutine
3820
 
3821
@item @emph{Syntax}:
3822
@code{CALL EXIT([STATUS])}
3823
 
3824
@item @emph{Arguments}:
3825
@multitable @columnfractions .15 .70
3826
@item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind.
3827
@end multitable
3828
 
3829
@item @emph{Return value}:
3830
@code{STATUS} is passed to the parent process on exit.
3831
 
3832
@item @emph{Example}:
3833
@smallexample
3834
program test_exit
3835
  integer :: STATUS = 0
3836
  print *, 'This program is going to exit.'
3837
  call EXIT(STATUS)
3838
end program test_exit
3839
@end smallexample
3840
 
3841
@item @emph{See also}:
3842
@ref{ABORT}, @ref{KILL}
3843
@end table
3844
 
3845
 
3846
 
3847
@node EXP
3848
@section @code{EXP} --- Exponential function
3849
@fnindex EXP
3850
@fnindex DEXP
3851
@fnindex CEXP
3852
@fnindex ZEXP
3853
@fnindex CDEXP
3854
@cindex exponential function
3855
@cindex logarithmic function, inverse
3856
 
3857
@table @asis
3858
@item @emph{Description}:
3859
@code{EXP(X)} computes the base @math{e} exponential of @var{X}.
3860
 
3861
@item @emph{Standard}:
3862
Fortran 77 and later, has overloads that are GNU extensions
3863
 
3864
@item @emph{Class}:
3865
Elemental function
3866
 
3867
@item @emph{Syntax}:
3868
@code{RESULT = EXP(X)}
3869
 
3870
@item @emph{Arguments}:
3871
@multitable @columnfractions .15 .70
3872
@item @var{X} @tab The type shall be @code{REAL} or
3873
@code{COMPLEX}.
3874
@end multitable
3875
 
3876
@item @emph{Return value}:
3877
The return value has same type and kind as @var{X}.
3878
 
3879
@item @emph{Example}:
3880
@smallexample
3881
program test_exp
3882
  real :: x = 1.0
3883
  x = exp(x)
3884
end program test_exp
3885
@end smallexample
3886
 
3887
@item @emph{Specific names}:
3888
@multitable @columnfractions .20 .20 .20 .25
3889
@item Name            @tab Argument             @tab Return type         @tab Standard
3890
@item @code{DEXP(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}      @tab Fortran 77 and later
3891
@item @code{CEXP(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}   @tab Fortran 77 and later
3892
@item @code{ZEXP(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
3893
@item @code{CDEXP(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
3894
@end multitable
3895
@end table
3896
 
3897
 
3898
 
3899
@node EXPONENT
3900
@section @code{EXPONENT} --- Exponent function
3901
@fnindex EXPONENT
3902
@cindex real number, exponent
3903
@cindex floating point, exponent
3904
 
3905
@table @asis
3906
@item @emph{Description}:
3907
@code{EXPONENT(X)} returns the value of the exponent part of @var{X}. If @var{X}
3908
is zero the value returned is zero.
3909
 
3910
@item @emph{Standard}:
3911
Fortran 95 and later
3912
 
3913
@item @emph{Class}:
3914
Elemental function
3915
 
3916
@item @emph{Syntax}:
3917
@code{RESULT = EXPONENT(X)}
3918
 
3919
@item @emph{Arguments}:
3920
@multitable @columnfractions .15 .70
3921
@item @var{X} @tab The type shall be @code{REAL}.
3922
@end multitable
3923
 
3924
@item @emph{Return value}:
3925
The return value is of type default @code{INTEGER}.
3926
 
3927
@item @emph{Example}:
3928
@smallexample
3929
program test_exponent
3930
  real :: x = 1.0
3931
  integer :: i
3932
  i = exponent(x)
3933
  print *, i
3934
  print *, exponent(0.0)
3935
end program test_exponent
3936
@end smallexample
3937
@end table
3938
 
3939
 
3940
 
3941
@node FDATE
3942
@section @code{FDATE} --- Get the current time as a string
3943
@fnindex FDATE
3944
@cindex time, current
3945
@cindex current time
3946
@cindex date, current
3947
@cindex current date
3948
 
3949
@table @asis
3950
@item @emph{Description}:
3951
@code{FDATE(DATE)} returns the current date (using the same format as
3952
@code{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE,
3953
TIME())}.
3954
 
3955
This intrinsic is provided in both subroutine and function forms; however,
3956
only one form can be used in any given program unit.
3957
 
3958
@var{DATE} is an @code{INTENT(OUT)} @code{CHARACTER} variable of the
3959
default kind.
3960
 
3961
@item @emph{Standard}:
3962
GNU extension
3963
 
3964
@item @emph{Class}:
3965
Subroutine, function
3966
 
3967
@item @emph{Syntax}:
3968
@multitable @columnfractions .80
3969
@item @code{CALL FDATE(DATE)}.
3970
@item @code{DATE = FDATE()}, (not recommended).
3971
@end multitable
3972
 
3973
@item @emph{Arguments}:
3974
@multitable @columnfractions .15 .70
3975
@item @var{DATE}@tab The type shall be of type @code{CHARACTER} of the
3976
default kind
3977
@end multitable
3978
 
3979
@item @emph{Return value}:
3980
The current date as a string.
3981
 
3982
@item @emph{Example}:
3983
@smallexample
3984
program test_fdate
3985
    integer(8) :: i, j
3986
    character(len=30) :: date
3987
    call fdate(date)
3988
    print *, 'Program started on ', date
3989
    do i = 1, 100000000 ! Just a delay
3990
        j = i * i - i
3991
    end do
3992
    call fdate(date)
3993
    print *, 'Program ended on ', date
3994
end program test_fdate
3995
@end smallexample
3996
@end table
3997
 
3998
 
3999
 
4000
@node FLOAT
4001
@section @code{FLOAT} --- Convert integer to default real
4002
@fnindex FLOAT
4003
@cindex conversion, to real
4004
 
4005
@table @asis
4006
@item @emph{Description}:
4007
@code{FLOAT(A)} converts the integer @var{A} to a default real value.
4008
 
4009
@item @emph{Standard}:
4010
Fortran 77 and later
4011
 
4012
@item @emph{Class}:
4013
Elemental function
4014
 
4015
@item @emph{Syntax}:
4016
@code{RESULT = FLOAT(A)}
4017
 
4018
@item @emph{Arguments}:
4019
@multitable @columnfractions .15 .70
4020
@item @var{A} @tab The type shall be @code{INTEGER}.
4021
@end multitable
4022
 
4023
@item @emph{Return value}:
4024
The return value is of type default @code{REAL}.
4025
 
4026
@item @emph{Example}:
4027
@smallexample
4028
program test_float
4029
    integer :: i = 1
4030
    if (float(i) /= 1.) call abort
4031
end program test_float
4032
@end smallexample
4033
 
4034
@item @emph{See also}:
4035
@ref{DBLE}, @ref{DFLOAT}, @ref{REAL}
4036
@end table
4037
 
4038
 
4039
 
4040
@node FGET
4041
@section @code{FGET} --- Read a single character in stream mode from stdin
4042
@fnindex FGET
4043
@cindex read character, stream mode
4044
@cindex stream mode, read character
4045
@cindex file operation, read character
4046
 
4047
@table @asis
4048
@item @emph{Description}:
4049
Read a single character in stream mode from stdin by bypassing normal
4050
formatted output. Stream I/O should not be mixed with normal record-oriented
4051
(formatted or unformatted) I/O on the same unit; the results are unpredictable.
4052
 
4053
This intrinsic is provided in both subroutine and function forms; however,
4054
only one form can be used in any given program unit.
4055
 
4056
Note that the @code{FGET} intrinsic is provided for backwards compatibility with
4057
@command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
4058
Programmers should consider the use of new stream IO feature in new code
4059
for future portability. See also @ref{Fortran 2003 status}.
4060
 
4061
@item @emph{Standard}:
4062
GNU extension
4063
 
4064
@item @emph{Class}:
4065
Subroutine, function
4066
 
4067
@item @emph{Syntax}:
4068
@code{CALL FGET(C [, STATUS])}
4069
 
4070
@item @emph{Arguments}:
4071
@multitable @columnfractions .15 .70
4072
@item @var{C}      @tab The type shall be @code{CHARACTER} and of default
4073
kind.
4074
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4075
Returns 0 on success, -1 on end-of-file, and a system specific positive
4076
error code otherwise.
4077
@end multitable
4078
 
4079
@item @emph{Example}:
4080
@smallexample
4081
PROGRAM test_fget
4082
  INTEGER, PARAMETER :: strlen = 100
4083
  INTEGER :: status, i = 1
4084
  CHARACTER(len=strlen) :: str = ""
4085
 
4086
  WRITE (*,*) 'Enter text:'
4087
  DO
4088
    CALL fget(str(i:i), status)
4089
    if (status /= 0 .OR. i > strlen) exit
4090
    i = i + 1
4091
  END DO
4092
  WRITE (*,*) TRIM(str)
4093
END PROGRAM
4094
@end smallexample
4095
 
4096
@item @emph{See also}:
4097
@ref{FGETC}, @ref{FPUT}, @ref{FPUTC}
4098
@end table
4099
 
4100
 
4101
 
4102
@node FGETC
4103
@section @code{FGETC} --- Read a single character in stream mode
4104
@fnindex FGETC
4105
@cindex read character, stream mode
4106
@cindex stream mode, read character
4107
@cindex file operation, read character
4108
 
4109
@table @asis
4110
@item @emph{Description}:
4111
Read a single character in stream mode by bypassing normal formatted output.
4112
Stream I/O should not be mixed with normal record-oriented (formatted or
4113
unformatted) I/O on the same unit; the results are unpredictable.
4114
 
4115
This intrinsic is provided in both subroutine and function forms; however,
4116
only one form can be used in any given program unit.
4117
 
4118
Note that the @code{FGET} intrinsic is provided for backwards compatibility
4119
with @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
4120
Programmers should consider the use of new stream IO feature in new code
4121
for future portability. See also @ref{Fortran 2003 status}.
4122
 
4123
@item @emph{Standard}:
4124
GNU extension
4125
 
4126
@item @emph{Class}:
4127
Subroutine, function
4128
 
4129
@item @emph{Syntax}:
4130
@code{CALL FGETC(UNIT, C [, STATUS])}
4131
 
4132
@item @emph{Arguments}:
4133
@multitable @columnfractions .15 .70
4134
@item @var{UNIT}   @tab The type shall be @code{INTEGER}.
4135
@item @var{C}      @tab The type shall be @code{CHARACTER} and of default
4136
kind.
4137
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4138
Returns 0 on success, -1 on end-of-file and a system specific positive
4139
error code otherwise.
4140
@end multitable
4141
 
4142
@item @emph{Example}:
4143
@smallexample
4144
PROGRAM test_fgetc
4145
  INTEGER :: fd = 42, status
4146
  CHARACTER :: c
4147
 
4148
  OPEN(UNIT=fd, FILE="/etc/passwd", ACTION="READ", STATUS = "OLD")
4149
  DO
4150
    CALL fgetc(fd, c, status)
4151
    IF (status /= 0) EXIT
4152
    call fput(c)
4153
  END DO
4154
  CLOSE(UNIT=fd)
4155
END PROGRAM
4156
@end smallexample
4157
 
4158
@item @emph{See also}:
4159
@ref{FGET}, @ref{FPUT}, @ref{FPUTC}
4160
@end table
4161
 
4162
 
4163
 
4164
@node FLOOR
4165
@section @code{FLOOR} --- Integer floor function
4166
@fnindex FLOOR
4167
@cindex floor
4168
@cindex rounding, floor
4169
 
4170
@table @asis
4171
@item @emph{Description}:
4172
@code{FLOOR(A)} returns the greatest integer less than or equal to @var{X}.
4173
 
4174
@item @emph{Standard}:
4175
Fortran 95 and later
4176
 
4177
@item @emph{Class}:
4178
Elemental function
4179
 
4180
@item @emph{Syntax}:
4181
@code{RESULT = FLOOR(A [, KIND])}
4182
 
4183
@item @emph{Arguments}:
4184
@multitable @columnfractions .15 .70
4185
@item @var{A} @tab The type shall be @code{REAL}.
4186
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
4187
expression indicating the kind parameter of the result.
4188
@end multitable
4189
 
4190
@item @emph{Return value}:
4191
The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
4192
and of default-kind @code{INTEGER} otherwise.
4193
 
4194
@item @emph{Example}:
4195
@smallexample
4196
program test_floor
4197
    real :: x = 63.29
4198
    real :: y = -63.59
4199
    print *, floor(x) ! returns 63
4200
    print *, floor(y) ! returns -64
4201
end program test_floor
4202
@end smallexample
4203
 
4204
@item @emph{See also}:
4205
@ref{CEILING}, @ref{NINT}
4206
 
4207
@end table
4208
 
4209
 
4210
 
4211
@node FLUSH
4212
@section @code{FLUSH} --- Flush I/O unit(s)
4213
@fnindex FLUSH
4214
@cindex file operation, flush
4215
 
4216
@table @asis
4217
@item @emph{Description}:
4218
Flushes Fortran unit(s) currently open for output. Without the optional
4219
argument, all units are flushed, otherwise just the unit specified.
4220
 
4221
@item @emph{Standard}:
4222
GNU extension
4223
 
4224
@item @emph{Class}:
4225
Subroutine
4226
 
4227
@item @emph{Syntax}:
4228
@code{CALL FLUSH(UNIT)}
4229
 
4230
@item @emph{Arguments}:
4231
@multitable @columnfractions .15 .70
4232
@item @var{UNIT} @tab (Optional) The type shall be @code{INTEGER}.
4233
@end multitable
4234
 
4235
@item @emph{Note}:
4236
Beginning with the Fortran 2003 standard, there is a @code{FLUSH}
4237
statement that should be preferred over the @code{FLUSH} intrinsic.
4238
 
4239
@end table
4240
 
4241
 
4242
 
4243
@node FNUM
4244
@section @code{FNUM} --- File number function
4245
@fnindex FNUM
4246
@cindex file operation, file number
4247
 
4248
@table @asis
4249
@item @emph{Description}:
4250
@code{FNUM(UNIT)} returns the POSIX file descriptor number corresponding to the
4251
open Fortran I/O unit @code{UNIT}.
4252
 
4253
@item @emph{Standard}:
4254
GNU extension
4255
 
4256
@item @emph{Class}:
4257
Function
4258
 
4259
@item @emph{Syntax}:
4260
@code{RESULT = FNUM(UNIT)}
4261
 
4262
@item @emph{Arguments}:
4263
@multitable @columnfractions .15 .70
4264
@item @var{UNIT} @tab The type shall be @code{INTEGER}.
4265
@end multitable
4266
 
4267
@item @emph{Return value}:
4268
The return value is of type @code{INTEGER}
4269
 
4270
@item @emph{Example}:
4271
@smallexample
4272
program test_fnum
4273
  integer :: i
4274
  open (unit=10, status = "scratch")
4275
  i = fnum(10)
4276
  print *, i
4277
  close (10)
4278
end program test_fnum
4279
@end smallexample
4280
@end table
4281
 
4282
 
4283
 
4284
@node FPUT
4285
@section @code{FPUT} --- Write a single character in stream mode to stdout
4286
@fnindex FPUT
4287
@cindex write character, stream mode
4288
@cindex stream mode, write character
4289
@cindex file operation, write character
4290
 
4291
@table @asis
4292
@item @emph{Description}:
4293
Write a single character in stream mode to stdout by bypassing normal
4294
formatted output. Stream I/O should not be mixed with normal record-oriented
4295
(formatted or unformatted) I/O on the same unit; the results are unpredictable.
4296
 
4297
This intrinsic is provided in both subroutine and function forms; however,
4298
only one form can be used in any given program unit.
4299
 
4300
Note that the @code{FGET} intrinsic is provided for backwards compatibility with
4301
@command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
4302
Programmers should consider the use of new stream IO feature in new code
4303
for future portability. See also @ref{Fortran 2003 status}.
4304
 
4305
@item @emph{Standard}:
4306
GNU extension
4307
 
4308
@item @emph{Class}:
4309
Subroutine, function
4310
 
4311
@item @emph{Syntax}:
4312
@code{CALL FPUT(C [, STATUS])}
4313
 
4314
@item @emph{Arguments}:
4315
@multitable @columnfractions .15 .70
4316
@item @var{C}      @tab The type shall be @code{CHARACTER} and of default
4317
kind.
4318
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4319
Returns 0 on success, -1 on end-of-file and a system specific positive
4320
error code otherwise.
4321
@end multitable
4322
 
4323
@item @emph{Example}:
4324
@smallexample
4325
PROGRAM test_fput
4326
  CHARACTER(len=10) :: str = "gfortran"
4327
  INTEGER :: i
4328
  DO i = 1, len_trim(str)
4329
    CALL fput(str(i:i))
4330
  END DO
4331
END PROGRAM
4332
@end smallexample
4333
 
4334
@item @emph{See also}:
4335
@ref{FPUTC}, @ref{FGET}, @ref{FGETC}
4336
@end table
4337
 
4338
 
4339
 
4340
@node FPUTC
4341
@section @code{FPUTC} --- Write a single character in stream mode
4342
@fnindex FPUTC
4343
@cindex write character, stream mode
4344
@cindex stream mode, write character
4345
@cindex file operation, write character
4346
 
4347
@table @asis
4348
@item @emph{Description}:
4349
Write a single character in stream mode by bypassing normal formatted
4350
output. Stream I/O should not be mixed with normal record-oriented
4351
(formatted or unformatted) I/O on the same unit; the results are unpredictable.
4352
 
4353
This intrinsic is provided in both subroutine and function forms; however,
4354
only one form can be used in any given program unit.
4355
 
4356
Note that the @code{FGET} intrinsic is provided for backwards compatibility with
4357
@command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
4358
Programmers should consider the use of new stream IO feature in new code
4359
for future portability. See also @ref{Fortran 2003 status}.
4360
 
4361
@item @emph{Standard}:
4362
GNU extension
4363
 
4364
@item @emph{Class}:
4365
Subroutine, function
4366
 
4367
@item @emph{Syntax}:
4368
@code{CALL FPUTC(UNIT, C [, STATUS])}
4369
 
4370
@item @emph{Arguments}:
4371
@multitable @columnfractions .15 .70
4372
@item @var{UNIT}   @tab The type shall be @code{INTEGER}.
4373
@item @var{C}      @tab The type shall be @code{CHARACTER} and of default
4374
kind.
4375
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
4376
Returns 0 on success, -1 on end-of-file and a system specific positive
4377
error code otherwise.
4378
@end multitable
4379
 
4380
@item @emph{Example}:
4381
@smallexample
4382
PROGRAM test_fputc
4383
  CHARACTER(len=10) :: str = "gfortran"
4384
  INTEGER :: fd = 42, i
4385
 
4386
  OPEN(UNIT = fd, FILE = "out", ACTION = "WRITE", STATUS="NEW")
4387
  DO i = 1, len_trim(str)
4388
    CALL fputc(fd, str(i:i))
4389
  END DO
4390
  CLOSE(fd)
4391
END PROGRAM
4392
@end smallexample
4393
 
4394
@item @emph{See also}:
4395
@ref{FPUT}, @ref{FGET}, @ref{FGETC}
4396
@end table
4397
 
4398
 
4399
 
4400
@node FRACTION
4401
@section @code{FRACTION} --- Fractional part of the model representation
4402
@fnindex FRACTION
4403
@cindex real number, fraction
4404
@cindex floating point, fraction
4405
 
4406
@table @asis
4407
@item @emph{Description}:
4408
@code{FRACTION(X)} returns the fractional part of the model
4409
representation of @code{X}.
4410
 
4411
@item @emph{Standard}:
4412
Fortran 95 and later
4413
 
4414
@item @emph{Class}:
4415
Elemental function
4416
 
4417
@item @emph{Syntax}:
4418
@code{Y = FRACTION(X)}
4419
 
4420
@item @emph{Arguments}:
4421
@multitable @columnfractions .15 .70
4422
@item @var{X} @tab The type of the argument shall be a @code{REAL}.
4423
@end multitable
4424
 
4425
@item @emph{Return value}:
4426
The return value is of the same type and kind as the argument.
4427
The fractional part of the model representation of @code{X} is returned;
4428
it is @code{X * RADIX(X)**(-EXPONENT(X))}.
4429
 
4430
@item @emph{Example}:
4431
@smallexample
4432
program test_fraction
4433
  real :: x
4434
  x = 178.1387e-4
4435
  print *, fraction(x), x * radix(x)**(-exponent(x))
4436
end program test_fraction
4437
@end smallexample
4438
 
4439
@end table
4440
 
4441
 
4442
 
4443
@node FREE
4444
@section @code{FREE} --- Frees memory
4445
@fnindex FREE
4446
@cindex pointer, cray
4447
 
4448
@table @asis
4449
@item @emph{Description}:
4450
Frees memory previously allocated by @code{MALLOC()}. The @code{FREE}
4451
intrinsic is an extension intended to be used with Cray pointers, and is
4452
provided in GNU Fortran to allow user to compile legacy code. For
4453
new code using Fortran 95 pointers, the memory de-allocation intrinsic is
4454
@code{DEALLOCATE}.
4455
 
4456
@item @emph{Standard}:
4457
GNU extension
4458
 
4459
@item @emph{Class}:
4460
Subroutine
4461
 
4462
@item @emph{Syntax}:
4463
@code{CALL FREE(PTR)}
4464
 
4465
@item @emph{Arguments}:
4466
@multitable @columnfractions .15 .70
4467
@item @var{PTR} @tab The type shall be @code{INTEGER}. It represents the
4468
location of the memory that should be de-allocated.
4469
@end multitable
4470
 
4471
@item @emph{Return value}:
4472
None
4473
 
4474
@item @emph{Example}:
4475
See @code{MALLOC} for an example.
4476
 
4477
@item @emph{See also}:
4478
@ref{MALLOC}
4479
@end table
4480
 
4481
 
4482
 
4483
@node FSEEK
4484
@section @code{FSEEK} --- Low level file positioning subroutine
4485
@fnindex FSEEK
4486
@cindex file operation, seek
4487
@cindex file operation, position
4488
 
4489
@table @asis
4490
@item @emph{Description}:
4491
Moves @var{UNIT} to the specified @var{OFFSET}. If @var{WHENCE}
4492
is set to 0, the @var{OFFSET} is taken as an absolute value @code{SEEK_SET},
4493
if set to 1, @var{OFFSET} is taken to be relative to the current position
4494
@code{SEEK_CUR}, and if set to 2 relative to the end of the file @code{SEEK_END}.
4495
On error, @var{STATUS} is set to a nonzero value. If @var{STATUS} the seek
4496
fails silently.
4497
 
4498
This intrinsic routine is not fully backwards compatible with @command{g77}.
4499
In @command{g77}, the @code{FSEEK} takes a statement label instead of a
4500
@var{STATUS} variable. If FSEEK is used in old code, change
4501
@smallexample
4502
  CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
4503
@end smallexample
4504
to
4505
@smallexample
4506
  INTEGER :: status
4507
  CALL FSEEK(UNIT, OFFSET, WHENCE, status)
4508
  IF (status /= 0) GOTO label
4509
@end smallexample
4510
 
4511
Please note that GNU Fortran provides the Fortran 2003 Stream facility.
4512
Programmers should consider the use of new stream IO feature in new code
4513
for future portability. See also @ref{Fortran 2003 status}.
4514
 
4515
@item @emph{Standard}:
4516
GNU extension
4517
 
4518
@item @emph{Class}:
4519
Subroutine
4520
 
4521
@item @emph{Syntax}:
4522
@code{CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])}
4523
 
4524
@item @emph{Arguments}:
4525
@multitable @columnfractions .15 .70
4526
@item @var{UNIT}   @tab Shall be a scalar of type @code{INTEGER}.
4527
@item @var{OFFSET} @tab Shall be a scalar of type @code{INTEGER}.
4528
@item @var{WHENCE} @tab Shall be a scalar of type @code{INTEGER}.
4529
Its value shall be either 0, 1 or 2.
4530
@item @var{STATUS} @tab (Optional) shall be a scalar of type
4531
@code{INTEGER(4)}.
4532
@end multitable
4533
 
4534
@item @emph{Example}:
4535
@smallexample
4536
PROGRAM test_fseek
4537
  INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2
4538
  INTEGER :: fd, offset, ierr
4539
 
4540
  ierr   = 0
4541
  offset = 5
4542
  fd     = 10
4543
 
4544
  OPEN(UNIT=fd, FILE="fseek.test")
4545
  CALL FSEEK(fd, offset, SEEK_SET, ierr)  ! move to OFFSET
4546
  print *, FTELL(fd), ierr
4547
 
4548
  CALL FSEEK(fd, 0, SEEK_END, ierr)       ! move to end
4549
  print *, FTELL(fd), ierr
4550
 
4551
  CALL FSEEK(fd, 0, SEEK_SET, ierr)       ! move to beginning
4552
  print *, FTELL(fd), ierr
4553
 
4554
  CLOSE(UNIT=fd)
4555
END PROGRAM
4556
@end smallexample
4557
 
4558
@item @emph{See also}:
4559
@ref{FTELL}
4560
@end table
4561
 
4562
 
4563
 
4564
@node FSTAT
4565
@section @code{FSTAT} --- Get file status
4566
@fnindex FSTAT
4567
@cindex file system, file status
4568
 
4569
@table @asis
4570
@item @emph{Description}:
4571
@code{FSTAT} is identical to @ref{STAT}, except that information about an
4572
already opened file is obtained.
4573
 
4574
The elements in @code{VALUES} are the same as described by @ref{STAT}.
4575
 
4576
This intrinsic is provided in both subroutine and function forms; however,
4577
only one form can be used in any given program unit.
4578
 
4579
@item @emph{Standard}:
4580
GNU extension
4581
 
4582
@item @emph{Class}:
4583
Subroutine, function
4584
 
4585
@item @emph{Syntax}:
4586
@code{CALL FSTAT(UNIT, VALUES [, STATUS])}
4587
 
4588
@item @emph{Arguments}:
4589
@multitable @columnfractions .15 .70
4590
@item @var{UNIT}   @tab An open I/O unit number of type @code{INTEGER}.
4591
@item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
4592
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0
4593
on success and a system specific error code otherwise.
4594
@end multitable
4595
 
4596
@item @emph{Example}:
4597
See @ref{STAT} for an example.
4598
 
4599
@item @emph{See also}:
4600
To stat a link: @ref{LSTAT}, to stat a file: @ref{STAT}
4601
@end table
4602
 
4603
 
4604
 
4605
@node FTELL
4606
@section @code{FTELL} --- Current stream position
4607
@fnindex FTELL
4608
@cindex file operation, position
4609
 
4610
@table @asis
4611
@item @emph{Description}:
4612
Retrieves the current position within an open file.
4613
 
4614
This intrinsic is provided in both subroutine and function forms; however,
4615
only one form can be used in any given program unit.
4616
 
4617
@item @emph{Standard}:
4618
GNU extension
4619
 
4620
@item @emph{Class}:
4621
Subroutine, function
4622
 
4623
@item @emph{Syntax}:
4624
@multitable @columnfractions .80
4625
@item @code{CALL FTELL(UNIT, OFFSET)}
4626
@item @code{OFFSET = FTELL(UNIT)}
4627
@end multitable
4628
 
4629
@item @emph{Arguments}:
4630
@multitable @columnfractions .15 .70
4631
@item @var{OFFSET}  @tab Shall of type @code{INTEGER}.
4632
@item @var{UNIT}    @tab Shall of type @code{INTEGER}.
4633
@end multitable
4634
 
4635
@item @emph{Return value}:
4636
In either syntax, @var{OFFSET} is set to the current offset of unit
4637
number @var{UNIT}, or to @math{-1} if the unit is not currently open.
4638
 
4639
@item @emph{Example}:
4640
@smallexample
4641
PROGRAM test_ftell
4642
  INTEGER :: i
4643
  OPEN(10, FILE="temp.dat")
4644
  CALL ftell(10,i)
4645
  WRITE(*,*) i
4646
END PROGRAM
4647
@end smallexample
4648
 
4649
@item @emph{See also}:
4650
@ref{FSEEK}
4651
@end table
4652
 
4653
 
4654
 
4655
@node GAMMA
4656
@section @code{GAMMA} --- Gamma function
4657
@fnindex GAMMA
4658
@fnindex DGAMMA
4659
@cindex Gamma function
4660
@cindex Factorial function
4661
 
4662
@table @asis
4663
@item @emph{Description}:
4664
@code{GAMMA(X)} computes Gamma (@math{\Gamma}) of @var{X}. For positive,
4665
integer values of @var{X} the Gamma function simplifies to the factorial
4666
function @math{\Gamma(x)=(x-1)!}.
4667
 
4668
@tex
4669
$$
4670
\Gamma(x) = \int_0^\infty t^{x-1}{\rm e}^{-t}\,{\rm d}t
4671
$$
4672
@end tex
4673
 
4674
@item @emph{Standard}:
4675
Fortran 2008 and later
4676
 
4677
@item @emph{Class}:
4678
Elemental function
4679
 
4680
@item @emph{Syntax}:
4681
@code{X = GAMMA(X)}
4682
 
4683
@item @emph{Arguments}:
4684
@multitable @columnfractions .15 .70
4685
@item @var{X} @tab Shall be of type @code{REAL} and neither zero
4686
nor a negative integer.
4687
@end multitable
4688
 
4689
@item @emph{Return value}:
4690
The return value is of type @code{REAL} of the same kind as @var{X}.
4691
 
4692
@item @emph{Example}:
4693
@smallexample
4694
program test_gamma
4695
  real :: x = 1.0
4696
  x = gamma(x) ! returns 1.0
4697
end program test_gamma
4698
@end smallexample
4699
 
4700
@item @emph{Specific names}:
4701
@multitable @columnfractions .20 .20 .20 .25
4702
@item Name             @tab Argument         @tab Return type       @tab Standard
4703
@item @code{GAMMA(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
4704
@item @code{DGAMMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU Extension
4705
@end multitable
4706
 
4707
@item @emph{See also}:
4708
Logarithm of the Gamma function: @ref{LOG_GAMMA}
4709
 
4710
@end table
4711
 
4712
 
4713
 
4714
@node GERROR
4715
@section @code{GERROR} --- Get last system error message
4716
@fnindex GERROR
4717
@cindex system, error handling
4718
 
4719
@table @asis
4720
@item @emph{Description}:
4721
Returns the system error message corresponding to the last system error.
4722
This resembles the functionality of @code{strerror(3)} in C.
4723
 
4724
@item @emph{Standard}:
4725
GNU extension
4726
 
4727
@item @emph{Class}:
4728
Subroutine
4729
 
4730
@item @emph{Syntax}:
4731
@code{CALL GERROR(RESULT)}
4732
 
4733
@item @emph{Arguments}:
4734
@multitable @columnfractions .15 .70
4735
@item @var{RESULT}  @tab Shall of type @code{CHARACTER} and of default
4736
@end multitable
4737
 
4738
@item @emph{Example}:
4739
@smallexample
4740
PROGRAM test_gerror
4741
  CHARACTER(len=100) :: msg
4742
  CALL gerror(msg)
4743
  WRITE(*,*) msg
4744
END PROGRAM
4745
@end smallexample
4746
 
4747
@item @emph{See also}:
4748
@ref{IERRNO}, @ref{PERROR}
4749
@end table
4750
 
4751
 
4752
 
4753
@node GETARG
4754
@section @code{GETARG} --- Get command line arguments
4755
@fnindex GETARG
4756
@cindex command-line arguments
4757
@cindex arguments, to program
4758
 
4759
@table @asis
4760
@item @emph{Description}:
4761
Retrieve the @var{POS}-th argument that was passed on the
4762
command line when the containing program was invoked.
4763
 
4764
This intrinsic routine is provided for backwards compatibility with
4765
GNU Fortran 77.  In new code, programmers should consider the use of
4766
the @ref{GET_COMMAND_ARGUMENT} intrinsic defined by the Fortran 2003
4767
standard.
4768
 
4769
@item @emph{Standard}:
4770
GNU extension
4771
 
4772
@item @emph{Class}:
4773
Subroutine
4774
 
4775
@item @emph{Syntax}:
4776
@code{CALL GETARG(POS, VALUE)}
4777
 
4778
@item @emph{Arguments}:
4779
@multitable @columnfractions .15 .70
4780
@item @var{POS}   @tab Shall be of type @code{INTEGER} and not wider than
4781
the default integer kind; @math{@var{POS} \geq 0}
4782
@item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default
4783
kind.
4784
@item @var{VALUE} @tab Shall be of type @code{CHARACTER}.
4785
@end multitable
4786
 
4787
@item @emph{Return value}:
4788
After @code{GETARG} returns, the @var{VALUE} argument holds the
4789
@var{POS}th command line argument. If @var{VALUE} can not hold the
4790
argument, it is truncated to fit the length of @var{VALUE}. If there are
4791
less than @var{POS} arguments specified at the command line, @var{VALUE}
4792
will be filled with blanks. If @math{@var{POS} = 0}, @var{VALUE} is set
4793
to the name of the program (on systems that support this feature).
4794
 
4795
@item @emph{Example}:
4796
@smallexample
4797
PROGRAM test_getarg
4798
  INTEGER :: i
4799
  CHARACTER(len=32) :: arg
4800
 
4801
  DO i = 1, iargc()
4802
    CALL getarg(i, arg)
4803
    WRITE (*,*) arg
4804
  END DO
4805
END PROGRAM
4806
@end smallexample
4807
 
4808
@item @emph{See also}:
4809
GNU Fortran 77 compatibility function: @ref{IARGC}
4810
 
4811
Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
4812
@ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
4813
@end table
4814
 
4815
 
4816
 
4817
@node GET_COMMAND
4818
@section @code{GET_COMMAND} --- Get the entire command line
4819
@fnindex GET_COMMAND
4820
@cindex command-line arguments
4821
@cindex arguments, to program
4822
 
4823
@table @asis
4824
@item @emph{Description}:
4825
Retrieve the entire command line that was used to invoke the program.
4826
 
4827
@item @emph{Standard}:
4828
Fortran 2003 and later
4829
 
4830
@item @emph{Class}:
4831
Subroutine
4832
 
4833
@item @emph{Syntax}:
4834
@code{CALL GET_COMMAND([COMMAND, LENGTH, STATUS])}
4835
 
4836
@item @emph{Arguments}:
4837
@multitable @columnfractions .15 .70
4838
@item @var{COMMAND} @tab (Optional) shall be of type @code{CHARACTER} and
4839
of default kind.
4840
@item @var{LENGTH} @tab (Optional) Shall be of type @code{INTEGER} and of
4841
default kind.
4842
@item @var{STATUS} @tab (Optional) Shall be of type @code{INTEGER} and of
4843
default kind.
4844
@end multitable
4845
 
4846
@item @emph{Return value}:
4847
If @var{COMMAND} is present, stores the entire command line that was used
4848
to invoke the program in @var{COMMAND}. If @var{LENGTH} is present, it is
4849
assigned the length of the command line. If @var{STATUS} is present, it
4850
is assigned 0 upon success of the command, -1 if @var{COMMAND} is too
4851
short to store the command line, or a positive value in case of an error.
4852
 
4853
@item @emph{Example}:
4854
@smallexample
4855
PROGRAM test_get_command
4856
  CHARACTER(len=255) :: cmd
4857
  CALL get_command(cmd)
4858
  WRITE (*,*) TRIM(cmd)
4859
END PROGRAM
4860
@end smallexample
4861
 
4862
@item @emph{See also}:
4863
@ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
4864
@end table
4865
 
4866
 
4867
 
4868
@node GET_COMMAND_ARGUMENT
4869
@section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments
4870
@fnindex GET_COMMAND_ARGUMENT
4871
@cindex command-line arguments
4872
@cindex arguments, to program
4873
 
4874
@table @asis
4875
@item @emph{Description}:
4876
Retrieve the @var{NUMBER}-th argument that was passed on the
4877
command line when the containing program was invoked.
4878
 
4879
@item @emph{Standard}:
4880
Fortran 2003 and later
4881
 
4882
@item @emph{Class}:
4883
Subroutine
4884
 
4885
@item @emph{Syntax}:
4886
@code{CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])}
4887
 
4888
@item @emph{Arguments}:
4889
@multitable @columnfractions .15 .70
4890
@item @var{NUMBER} @tab Shall be a scalar of type @code{INTEGER} and of
4891
default kind, @math{@var{NUMBER} \geq 0}
4892
@item @var{VALUE}  @tab Shall be a scalar of type @code{CHARACTER}
4893
and of default kind.
4894
@item @var{LENGTH} @tab (Option) Shall be a scalar of type @code{INTEGER}
4895
and of default kind.
4896
@item @var{STATUS} @tab (Option) Shall be a scalar of type @code{INTEGER}
4897
and of default kind.
4898
@end multitable
4899
 
4900
@item @emph{Return value}:
4901
After @code{GET_COMMAND_ARGUMENT} returns, the @var{VALUE} argument holds the
4902
@var{NUMBER}-th command line argument. If @var{VALUE} can not hold the argument, it is
4903
truncated to fit the length of @var{VALUE}. If there are less than @var{NUMBER}
4904
arguments specified at the command line, @var{VALUE} will be filled with blanks.
4905
If @math{@var{NUMBER} = 0}, @var{VALUE} is set to the name of the program (on
4906
systems that support this feature). The @var{LENGTH} argument contains the
4907
length of the @var{NUMBER}-th command line argument. If the argument retrieval
4908
fails, @var{STATUS} is a positive number; if @var{VALUE} contains a truncated
4909
command line argument, @var{STATUS} is -1; and otherwise the @var{STATUS} is
4910
zero.
4911
 
4912
@item @emph{Example}:
4913
@smallexample
4914
PROGRAM test_get_command_argument
4915
  INTEGER :: i
4916
  CHARACTER(len=32) :: arg
4917
 
4918
  i = 0
4919
  DO
4920
    CALL get_command_argument(i, arg)
4921
    IF (LEN_TRIM(arg) == 0) EXIT
4922
 
4923
    WRITE (*,*) TRIM(arg)
4924
    i = i+1
4925
  END DO
4926
END PROGRAM
4927
@end smallexample
4928
 
4929
@item @emph{See also}:
4930
@ref{GET_COMMAND}, @ref{COMMAND_ARGUMENT_COUNT}
4931
@end table
4932
 
4933
 
4934
 
4935
@node GETCWD
4936
@section @code{GETCWD} --- Get current working directory
4937
@fnindex GETCWD
4938
@cindex system, working directory
4939
 
4940
@table @asis
4941
@item @emph{Description}:
4942
Get current working directory.
4943
 
4944
This intrinsic is provided in both subroutine and function forms; however,
4945
only one form can be used in any given program unit.
4946
 
4947
@item @emph{Standard}:
4948
GNU extension
4949
 
4950
@item @emph{Class}:
4951
Subroutine, function
4952
 
4953
@item @emph{Syntax}:
4954
@code{CALL GETCWD(C [, STATUS])}
4955
 
4956
@item @emph{Arguments}:
4957
@multitable @columnfractions .15 .70
4958
@item @var{C} @tab The type shall be @code{CHARACTER} and of default kind.
4959
@item @var{STATUS} @tab (Optional) status flag. Returns 0 on success,
4960
a system specific and nonzero error code otherwise.
4961
@end multitable
4962
 
4963
@item @emph{Example}:
4964
@smallexample
4965
PROGRAM test_getcwd
4966
  CHARACTER(len=255) :: cwd
4967
  CALL getcwd(cwd)
4968
  WRITE(*,*) TRIM(cwd)
4969
END PROGRAM
4970
@end smallexample
4971
 
4972
@item @emph{See also}:
4973
@ref{CHDIR}
4974
@end table
4975
 
4976
 
4977
 
4978
@node GETENV
4979
@section @code{GETENV} --- Get an environmental variable
4980
@fnindex GETENV
4981
@cindex environment variable
4982
 
4983
@table @asis
4984
@item @emph{Description}:
4985
Get the @var{VALUE} of the environmental variable @var{NAME}.
4986
 
4987
This intrinsic routine is provided for backwards compatibility with
4988
GNU Fortran 77.  In new code, programmers should consider the use of
4989
the @ref{GET_ENVIRONMENT_VARIABLE} intrinsic defined by the Fortran
4990
2003 standard.
4991
 
4992
@item @emph{Standard}:
4993
GNU extension
4994
 
4995
@item @emph{Class}:
4996
Subroutine
4997
 
4998
@item @emph{Syntax}:
4999
@code{CALL GETENV(NAME, VALUE)}
5000
 
5001
@item @emph{Arguments}:
5002
@multitable @columnfractions .15 .70
5003
@item @var{NAME}  @tab Shall be of type @code{CHARACTER} and of default kind.
5004
@item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default kind.
5005
@end multitable
5006
 
5007
@item @emph{Return value}:
5008
Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is
5009
not large enough to hold the data, it is truncated. If @var{NAME}
5010
is not set, @var{VALUE} will be filled with blanks.
5011
 
5012
@item @emph{Example}:
5013
@smallexample
5014
PROGRAM test_getenv
5015
  CHARACTER(len=255) :: homedir
5016
  CALL getenv("HOME", homedir)
5017
  WRITE (*,*) TRIM(homedir)
5018
END PROGRAM
5019
@end smallexample
5020
 
5021
@item @emph{See also}:
5022
@ref{GET_ENVIRONMENT_VARIABLE}
5023
@end table
5024
 
5025
 
5026
 
5027
@node GET_ENVIRONMENT_VARIABLE
5028
@section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable
5029
@fnindex GET_ENVIRONMENT_VARIABLE
5030
@cindex environment variable
5031
 
5032
@table @asis
5033
@item @emph{Description}:
5034
Get the @var{VALUE} of the environmental variable @var{NAME}.
5035
 
5036
@item @emph{Standard}:
5037
Fortran 2003 and later
5038
 
5039
@item @emph{Class}:
5040
Subroutine
5041
 
5042
@item @emph{Syntax}:
5043
@code{CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)}
5044
 
5045
@item @emph{Arguments}:
5046
@multitable @columnfractions .15 .70
5047
@item @var{NAME}      @tab Shall be a scalar of type @code{CHARACTER}
5048
and of default kind.
5049
@item @var{VALUE}     @tab Shall be a scalar of type @code{CHARACTER}
5050
and of default kind.
5051
@item @var{LENGTH}    @tab Shall be a scalar of type @code{INTEGER}
5052
and of default kind.
5053
@item @var{STATUS}    @tab Shall be a scalar of type @code{INTEGER}
5054
and of default kind.
5055
@item @var{TRIM_NAME} @tab Shall be a scalar of type @code{LOGICAL}
5056
and of default kind.
5057
@end multitable
5058
 
5059
@item @emph{Return value}:
5060
Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is
5061
not large enough to hold the data, it is truncated. If @var{NAME}
5062
is not set, @var{VALUE} will be filled with blanks. Argument @var{LENGTH}
5063
contains the length needed for storing the environment variable @var{NAME}
5064
or zero if it is not present. @var{STATUS} is -1 if @var{VALUE} is present
5065
but too short for the environment variable; it is 1 if the environment
5066
variable does not exist and 2 if the processor does not support environment
5067
variables; in all other cases @var{STATUS} is zero. If @var{TRIM_NAME} is
5068
present with the value @code{.FALSE.}, the trailing blanks in @var{NAME}
5069
are significant; otherwise they are not part of the environment variable
5070
name.
5071
 
5072
@item @emph{Example}:
5073
@smallexample
5074
PROGRAM test_getenv
5075
  CHARACTER(len=255) :: homedir
5076
  CALL get_environment_variable("HOME", homedir)
5077
  WRITE (*,*) TRIM(homedir)
5078
END PROGRAM
5079
@end smallexample
5080
@end table
5081
 
5082
 
5083
 
5084
@node GETGID
5085
@section @code{GETGID} --- Group ID function
5086
@fnindex GETGID
5087
@cindex system, group id
5088
 
5089
@table @asis
5090
@item @emph{Description}:
5091
Returns the numerical group ID of the current process.
5092
 
5093
@item @emph{Standard}:
5094
GNU extension
5095
 
5096
@item @emph{Class}:
5097
Function
5098
 
5099
@item @emph{Syntax}:
5100
@code{RESULT = GETGID()}
5101
 
5102
@item @emph{Return value}:
5103
The return value of @code{GETGID} is an @code{INTEGER} of the default
5104
kind.
5105
 
5106
 
5107
@item @emph{Example}:
5108
See @code{GETPID} for an example.
5109
 
5110
@item @emph{See also}:
5111
@ref{GETPID}, @ref{GETUID}
5112
@end table
5113
 
5114
 
5115
 
5116
@node GETLOG
5117
@section @code{GETLOG} --- Get login name
5118
@fnindex GETLOG
5119
@cindex system, login name
5120
@cindex login name
5121
 
5122
@table @asis
5123
@item @emph{Description}:
5124
Gets the username under which the program is running.
5125
 
5126
@item @emph{Standard}:
5127
GNU extension
5128
 
5129
@item @emph{Class}:
5130
Subroutine
5131
 
5132
@item @emph{Syntax}:
5133
@code{CALL GETLOG(C)}
5134
 
5135
@item @emph{Arguments}:
5136
@multitable @columnfractions .15 .70
5137
@item @var{C} @tab Shall be of type @code{CHARACTER} and of default kind.
5138
@end multitable
5139
 
5140
@item @emph{Return value}:
5141
Stores the current user name in @var{LOGIN}.  (On systems where POSIX
5142
functions @code{geteuid} and @code{getpwuid} are not available, and
5143
the @code{getlogin} function is not implemented either, this will
5144
return a blank string.)
5145
 
5146
@item @emph{Example}:
5147
@smallexample
5148
PROGRAM TEST_GETLOG
5149
  CHARACTER(32) :: login
5150
  CALL GETLOG(login)
5151
  WRITE(*,*) login
5152
END PROGRAM
5153
@end smallexample
5154
 
5155
@item @emph{See also}:
5156
@ref{GETUID}
5157
@end table
5158
 
5159
 
5160
 
5161
@node GETPID
5162
@section @code{GETPID} --- Process ID function
5163
@fnindex GETPID
5164
@cindex system, process id
5165
@cindex process id
5166
 
5167
@table @asis
5168
@item @emph{Description}:
5169
Returns the numerical process identifier of the current process.
5170
 
5171
@item @emph{Standard}:
5172
GNU extension
5173
 
5174
@item @emph{Class}:
5175
Function
5176
 
5177
@item @emph{Syntax}:
5178
@code{RESULT = GETPID()}
5179
 
5180
@item @emph{Return value}:
5181
The return value of @code{GETPID} is an @code{INTEGER} of the default
5182
kind.
5183
 
5184
 
5185
@item @emph{Example}:
5186
@smallexample
5187
program info
5188
  print *, "The current process ID is ", getpid()
5189
  print *, "Your numerical user ID is ", getuid()
5190
  print *, "Your numerical group ID is ", getgid()
5191
end program info
5192
@end smallexample
5193
 
5194
@item @emph{See also}:
5195
@ref{GETGID}, @ref{GETUID}
5196
@end table
5197
 
5198
 
5199
 
5200
@node GETUID
5201
@section @code{GETUID} --- User ID function
5202
@fnindex GETUID
5203
@cindex system, user id
5204
@cindex user id
5205
 
5206
@table @asis
5207
@item @emph{Description}:
5208
Returns the numerical user ID of the current process.
5209
 
5210
@item @emph{Standard}:
5211
GNU extension
5212
 
5213
@item @emph{Class}:
5214
Function
5215
 
5216
@item @emph{Syntax}:
5217
@code{RESULT = GETUID()}
5218
 
5219
@item @emph{Return value}:
5220
The return value of @code{GETUID} is an @code{INTEGER} of the default
5221
kind.
5222
 
5223
 
5224
@item @emph{Example}:
5225
See @code{GETPID} for an example.
5226
 
5227
@item @emph{See also}:
5228
@ref{GETPID}, @ref{GETLOG}
5229
@end table
5230
 
5231
 
5232
 
5233
@node GMTIME
5234
@section @code{GMTIME} --- Convert time to GMT info
5235
@fnindex GMTIME
5236
@cindex time, conversion to GMT info
5237
 
5238
@table @asis
5239
@item @emph{Description}:
5240
Given a system time value @var{TIME} (as provided by the @code{TIME8()}
5241
intrinsic), fills @var{VALUES} with values extracted from it appropriate
5242
to the UTC time zone (Universal Coordinated Time, also known in some
5243
countries as GMT, Greenwich Mean Time), using @code{gmtime(3)}.
5244
 
5245
@item @emph{Standard}:
5246
GNU extension
5247
 
5248
@item @emph{Class}:
5249
Subroutine
5250
 
5251
@item @emph{Syntax}:
5252
@code{CALL GMTIME(TIME, VALUES)}
5253
 
5254
@item @emph{Arguments}:
5255
@multitable @columnfractions .15 .70
5256
@item @var{TIME}   @tab An @code{INTEGER} scalar expression
5257
corresponding to a system time, with @code{INTENT(IN)}.
5258
@item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
5259
with @code{INTENT(OUT)}.
5260
@end multitable
5261
 
5262
@item @emph{Return value}:
5263
The elements of @var{VALUES} are assigned as follows:
5264
@enumerate
5265
@item Seconds after the minute, range 0--59 or 0--61 to allow for leap
5266
seconds
5267
@item Minutes after the hour, range 0--59
5268
@item Hours past midnight, range 0--23
5269
@item Day of month, range 0--31
5270
@item Number of months since January, range 0--12
5271
@item Years since 1900
5272
@item Number of days since Sunday, range 0--6
5273
@item Days since January 1
5274
@item Daylight savings indicator: positive if daylight savings is in
5275
effect, zero if not, and negative if the information is not available.
5276
@end enumerate
5277
 
5278
@item @emph{See also}:
5279
@ref{CTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
5280
 
5281
@end table
5282
 
5283
 
5284
 
5285
@node HOSTNM
5286
@section @code{HOSTNM} --- Get system host name
5287
@fnindex HOSTNM
5288
@cindex system, host name
5289
 
5290
@table @asis
5291
@item @emph{Description}:
5292
Retrieves the host name of the system on which the program is running.
5293
 
5294
This intrinsic is provided in both subroutine and function forms; however,
5295
only one form can be used in any given program unit.
5296
 
5297
@item @emph{Standard}:
5298
GNU extension
5299
 
5300
@item @emph{Class}:
5301
Subroutine, function
5302
 
5303
@item @emph{Syntax}:
5304
@multitable @columnfractions .80
5305
@item @code{CALL HOSTNM(C [, STATUS])}
5306
@item @code{STATUS = HOSTNM(NAME)}
5307
@end multitable
5308
 
5309
@item @emph{Arguments}:
5310
@multitable @columnfractions .15 .70
5311
@item @var{C}    @tab Shall of type @code{CHARACTER} and of default kind.
5312
@item @var{STATUS}  @tab (Optional) status flag of type @code{INTEGER}.
5313
Returns 0 on success, or a system specific error code otherwise.
5314
@end multitable
5315
 
5316
@item @emph{Return value}:
5317
In either syntax, @var{NAME} is set to the current hostname if it can
5318
be obtained, or to a blank string otherwise.
5319
 
5320
@end table
5321
 
5322
 
5323
 
5324
@node HUGE
5325
@section @code{HUGE} --- Largest number of a kind
5326
@fnindex HUGE
5327
@cindex limits, largest number
5328
@cindex model representation, largest number
5329
 
5330
@table @asis
5331
@item @emph{Description}:
5332
@code{HUGE(X)} returns the largest number that is not an infinity in
5333
the model of the type of @code{X}.
5334
 
5335
@item @emph{Standard}:
5336
Fortran 95 and later
5337
 
5338
@item @emph{Class}:
5339
Inquiry function
5340
 
5341
@item @emph{Syntax}:
5342
@code{RESULT = HUGE(X)}
5343
 
5344
@item @emph{Arguments}:
5345
@multitable @columnfractions .15 .70
5346
@item @var{X} @tab Shall be of type @code{REAL} or @code{INTEGER}.
5347
@end multitable
5348
 
5349
@item @emph{Return value}:
5350
The return value is of the same type and kind as @var{X}
5351
 
5352
@item @emph{Example}:
5353
@smallexample
5354
program test_huge_tiny
5355
  print *, huge(0), huge(0.0), huge(0.0d0)
5356
  print *, tiny(0.0), tiny(0.0d0)
5357
end program test_huge_tiny
5358
@end smallexample
5359
@end table
5360
 
5361
 
5362
 
5363
@node HYPOT
5364
@section @code{HYPOT} --- Euclidean distance function
5365
@fnindex HYPOT
5366
@cindex Euclidean distance
5367
 
5368
@table @asis
5369
@item @emph{Description}:
5370
@code{HYPOT(X,Y)} is the Euclidean distance function. It is equal to
5371
@math{\sqrt{X^2 + Y^2}}, without undue underflow or overflow.
5372
 
5373
@item @emph{Standard}:
5374
Fortran 2008 and later
5375
 
5376
@item @emph{Class}:
5377
Elemental function
5378
 
5379
@item @emph{Syntax}:
5380
@code{RESULT = HYPOT(X, Y)}
5381
 
5382
@item @emph{Arguments}:
5383
@multitable @columnfractions .15 .70
5384
@item @var{X} @tab The type shall be @code{REAL}.
5385
@item @var{Y} @tab The type and kind type parameter shall be the same as
5386
@var{X}.
5387
@end multitable
5388
 
5389
@item @emph{Return value}:
5390
The return value has the same type and kind type parameter as @var{X}.
5391
 
5392
@item @emph{Example}:
5393
@smallexample
5394
program test_hypot
5395
  real(4) :: x = 1.e0_4, y = 0.5e0_4
5396
  x = hypot(x,y)
5397
end program test_hypot
5398
@end smallexample
5399
@end table
5400
 
5401
 
5402
 
5403
@node IACHAR
5404
@section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence
5405
@fnindex IACHAR
5406
@cindex @acronym{ASCII} collating sequence
5407
@cindex collating sequence, @acronym{ASCII}
5408
@cindex conversion, to integer
5409
 
5410
@table @asis
5411
@item @emph{Description}:
5412
@code{IACHAR(C)} returns the code for the @acronym{ASCII} character
5413
in the first character position of @code{C}.
5414
 
5415
@item @emph{Standard}:
5416
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
5417
 
5418
@item @emph{Class}:
5419
Elemental function
5420
 
5421
@item @emph{Syntax}:
5422
@code{RESULT = IACHAR(C [, KIND])}
5423
 
5424
@item @emph{Arguments}:
5425
@multitable @columnfractions .15 .70
5426
@item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
5427
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
5428
expression indicating the kind parameter of the result.
5429
@end multitable
5430
 
5431
@item @emph{Return value}:
5432
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
5433
@var{KIND} is absent, the return value is of default integer kind.
5434
 
5435
@item @emph{Example}:
5436
@smallexample
5437
program test_iachar
5438
  integer i
5439
  i = iachar(' ')
5440
end program test_iachar
5441
@end smallexample
5442
 
5443
@item @emph{Note}:
5444
See @ref{ICHAR} for a discussion of converting between numerical values
5445
and formatted string representations.
5446
 
5447
@item @emph{See also}:
5448
@ref{ACHAR}, @ref{CHAR}, @ref{ICHAR}
5449
 
5450
@end table
5451
 
5452
 
5453
 
5454
@node IAND
5455
@section @code{IAND} --- Bitwise logical and
5456
@fnindex IAND
5457
@cindex bitwise logical and
5458
@cindex logical and, bitwise
5459
 
5460
@table @asis
5461
@item @emph{Description}:
5462
Bitwise logical @code{AND}.
5463
 
5464
@item @emph{Standard}:
5465
Fortran 95 and later
5466
 
5467
@item @emph{Class}:
5468
Elemental function
5469
 
5470
@item @emph{Syntax}:
5471
@code{RESULT = IAND(I, J)}
5472
 
5473
@item @emph{Arguments}:
5474
@multitable @columnfractions .15 .70
5475
@item @var{I} @tab The type shall be @code{INTEGER}.
5476
@item @var{J} @tab The type shall be @code{INTEGER}, of the same
5477
kind as @var{I}.  (As a GNU extension, different kinds are also
5478
permitted.)
5479
@end multitable
5480
 
5481
@item @emph{Return value}:
5482
The return type is @code{INTEGER}, of the same kind as the
5483
arguments.  (If the argument kinds differ, it is of the same kind as
5484
the larger argument.)
5485
 
5486
@item @emph{Example}:
5487
@smallexample
5488
PROGRAM test_iand
5489
  INTEGER :: a, b
5490
  DATA a / Z'F' /, b / Z'3' /
5491
  WRITE (*,*) IAND(a, b)
5492
END PROGRAM
5493
@end smallexample
5494
 
5495
@item @emph{See also}:
5496
@ref{IOR}, @ref{IEOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
5497
 
5498
@end table
5499
 
5500
 
5501
 
5502
@node IARGC
5503
@section @code{IARGC} --- Get the number of command line arguments
5504
@fnindex IARGC
5505
@cindex command-line arguments
5506
@cindex command-line arguments, number of
5507
@cindex arguments, to program
5508
 
5509
@table @asis
5510
@item @emph{Description}:
5511
@code{IARGC()} returns the number of arguments passed on the
5512
command line when the containing program was invoked.
5513
 
5514
This intrinsic routine is provided for backwards compatibility with
5515
GNU Fortran 77.  In new code, programmers should consider the use of
5516
the @ref{COMMAND_ARGUMENT_COUNT} intrinsic defined by the Fortran 2003
5517
standard.
5518
 
5519
@item @emph{Standard}:
5520
GNU extension
5521
 
5522
@item @emph{Class}:
5523
Function
5524
 
5525
@item @emph{Syntax}:
5526
@code{RESULT = IARGC()}
5527
 
5528
@item @emph{Arguments}:
5529
None.
5530
 
5531
@item @emph{Return value}:
5532
The number of command line arguments, type @code{INTEGER(4)}.
5533
 
5534
@item @emph{Example}:
5535
See @ref{GETARG}
5536
 
5537
@item @emph{See also}:
5538
GNU Fortran 77 compatibility subroutine: @ref{GETARG}
5539
 
5540
Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
5541
@ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
5542
@end table
5543
 
5544
 
5545
 
5546
@node IBCLR
5547
@section @code{IBCLR} --- Clear bit
5548
@fnindex IBCLR
5549
@cindex bits, unset
5550
@cindex bits, clear
5551
 
5552
@table @asis
5553
@item @emph{Description}:
5554
@code{IBCLR} returns the value of @var{I} with the bit at position
5555
@var{POS} set to zero.
5556
 
5557
@item @emph{Standard}:
5558
Fortran 95 and later
5559
 
5560
@item @emph{Class}:
5561
Elemental function
5562
 
5563
@item @emph{Syntax}:
5564
@code{RESULT = IBCLR(I, POS)}
5565
 
5566
@item @emph{Arguments}:
5567
@multitable @columnfractions .15 .70
5568
@item @var{I} @tab The type shall be @code{INTEGER}.
5569
@item @var{POS} @tab The type shall be @code{INTEGER}.
5570
@end multitable
5571
 
5572
@item @emph{Return value}:
5573
The return value is of type @code{INTEGER} and of the same kind as
5574
@var{I}.
5575
 
5576
@item @emph{See also}:
5577
@ref{IBITS}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
5578
 
5579
@end table
5580
 
5581
 
5582
 
5583
@node IBITS
5584
@section @code{IBITS} --- Bit extraction
5585
@fnindex IBITS
5586
@cindex bits, get
5587
@cindex bits, extract
5588
 
5589
@table @asis
5590
@item @emph{Description}:
5591
@code{IBITS} extracts a field of length @var{LEN} from @var{I},
5592
starting from bit position @var{POS} and extending left for @var{LEN}
5593
bits.  The result is right-justified and the remaining bits are
5594
zeroed.  The value of @code{POS+LEN} must be less than or equal to the
5595
value @code{BIT_SIZE(I)}.
5596
 
5597
@item @emph{Standard}:
5598
Fortran 95 and later
5599
 
5600
@item @emph{Class}:
5601
Elemental function
5602
 
5603
@item @emph{Syntax}:
5604
@code{RESULT = IBITS(I, POS, LEN)}
5605
 
5606
@item @emph{Arguments}:
5607
@multitable @columnfractions .15 .70
5608
@item @var{I}   @tab The type shall be @code{INTEGER}.
5609
@item @var{POS} @tab The type shall be @code{INTEGER}.
5610
@item @var{LEN} @tab The type shall be @code{INTEGER}.
5611
@end multitable
5612
 
5613
@item @emph{Return value}:
5614
The return value is of type @code{INTEGER} and of the same kind as
5615
@var{I}.
5616
 
5617
@item @emph{See also}:
5618
@ref{BIT_SIZE}, @ref{IBCLR}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
5619
@end table
5620
 
5621
 
5622
 
5623
@node IBSET
5624
@section @code{IBSET} --- Set bit
5625
@fnindex IBSET
5626
@cindex bits, set
5627
 
5628
@table @asis
5629
@item @emph{Description}:
5630
@code{IBSET} returns the value of @var{I} with the bit at position
5631
@var{POS} set to one.
5632
 
5633
@item @emph{Standard}:
5634
Fortran 95 and later
5635
 
5636
@item @emph{Class}:
5637
Elemental function
5638
 
5639
@item @emph{Syntax}:
5640
@code{RESULT = IBSET(I, POS)}
5641
 
5642
@item @emph{Arguments}:
5643
@multitable @columnfractions .15 .70
5644
@item @var{I} @tab The type shall be @code{INTEGER}.
5645
@item @var{POS} @tab The type shall be @code{INTEGER}.
5646
@end multitable
5647
 
5648
@item @emph{Return value}:
5649
The return value is of type @code{INTEGER} and of the same kind as
5650
@var{I}.
5651
 
5652
@item @emph{See also}:
5653
@ref{IBCLR}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
5654
 
5655
@end table
5656
 
5657
 
5658
 
5659
@node ICHAR
5660
@section @code{ICHAR} --- Character-to-integer conversion function
5661
@fnindex ICHAR
5662
@cindex conversion, to integer
5663
 
5664
@table @asis
5665
@item @emph{Description}:
5666
@code{ICHAR(C)} returns the code for the character in the first character
5667
position of @code{C} in the system's native character set.
5668
The correspondence between characters and their codes is not necessarily
5669
the same across different GNU Fortran implementations.
5670
 
5671
@item @emph{Standard}:
5672
Fortan 95 and later, with @var{KIND} argument Fortran 2003 and later
5673
 
5674
@item @emph{Class}:
5675
Elemental function
5676
 
5677
@item @emph{Syntax}:
5678
@code{RESULT = ICHAR(C [, KIND])}
5679
 
5680
@item @emph{Arguments}:
5681
@multitable @columnfractions .15 .70
5682
@item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
5683
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
5684
expression indicating the kind parameter of the result.
5685
@end multitable
5686
 
5687
@item @emph{Return value}:
5688
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
5689
@var{KIND} is absent, the return value is of default integer kind.
5690
 
5691
@item @emph{Example}:
5692
@smallexample
5693
program test_ichar
5694
  integer i
5695
  i = ichar(' ')
5696
end program test_ichar
5697
@end smallexample
5698
 
5699
@item @emph{Note}:
5700
No intrinsic exists to convert between a numeric value and a formatted
5701
character string representation -- for instance, given the
5702
@code{CHARACTER} value @code{'154'}, obtaining an @code{INTEGER} or
5703
@code{REAL} value with the value 154, or vice versa. Instead, this
5704
functionality is provided by internal-file I/O, as in the following
5705
example:
5706
@smallexample
5707
program read_val
5708
  integer value
5709
  character(len=10) string, string2
5710
  string = '154'
5711
 
5712
  ! Convert a string to a numeric value
5713
  read (string,'(I10)') value
5714
  print *, value
5715
 
5716
  ! Convert a value to a formatted string
5717
  write (string2,'(I10)') value
5718
  print *, string2
5719
end program read_val
5720
@end smallexample
5721
 
5722
@item @emph{See also}:
5723
@ref{ACHAR}, @ref{CHAR}, @ref{IACHAR}
5724
 
5725
@end table
5726
 
5727
 
5728
 
5729
@node IDATE
5730
@section @code{IDATE} --- Get current local time subroutine (day/month/year)
5731
@fnindex IDATE
5732
@cindex date, current
5733
@cindex current date
5734
 
5735
@table @asis
5736
@item @emph{Description}:
5737
@code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the
5738
current local time. The day (in the range 1-31), month (in the range 1-12),
5739
and year appear in elements 1, 2, and 3 of @var{VALUES}, respectively.
5740
The year has four significant digits.
5741
 
5742
@item @emph{Standard}:
5743
GNU extension
5744
 
5745
@item @emph{Class}:
5746
Subroutine
5747
 
5748
@item @emph{Syntax}:
5749
@code{CALL IDATE(VALUES)}
5750
 
5751
@item @emph{Arguments}:
5752
@multitable @columnfractions .15 .70
5753
@item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)} and
5754
the kind shall be the default integer kind.
5755
@end multitable
5756
 
5757
@item @emph{Return value}:
5758
Does not return anything.
5759
 
5760
@item @emph{Example}:
5761
@smallexample
5762
program test_idate
5763
  integer, dimension(3) :: tarray
5764
  call idate(tarray)
5765
  print *, tarray(1)
5766
  print *, tarray(2)
5767
  print *, tarray(3)
5768
end program test_idate
5769
@end smallexample
5770
@end table
5771
 
5772
 
5773
 
5774
@node IEOR
5775
@section @code{IEOR} --- Bitwise logical exclusive or
5776
@fnindex IEOR
5777
@cindex bitwise logical exclusive or
5778
@cindex logical exclusive or, bitwise
5779
 
5780
@table @asis
5781
@item @emph{Description}:
5782
@code{IEOR} returns the bitwise boolean exclusive-OR of @var{I} and
5783
@var{J}.
5784
 
5785
@item @emph{Standard}:
5786
Fortran 95 and later
5787
 
5788
@item @emph{Class}:
5789
Elemental function
5790
 
5791
@item @emph{Syntax}:
5792
@code{RESULT = IEOR(I, J)}
5793
 
5794
@item @emph{Arguments}:
5795
@multitable @columnfractions .15 .70
5796
@item @var{I} @tab The type shall be @code{INTEGER}.
5797
@item @var{J} @tab The type shall be @code{INTEGER}, of the same
5798
kind as @var{I}.  (As a GNU extension, different kinds are also
5799
permitted.)
5800
@end multitable
5801
 
5802
@item @emph{Return value}:
5803
The return type is @code{INTEGER}, of the same kind as the
5804
arguments.  (If the argument kinds differ, it is of the same kind as
5805
the larger argument.)
5806
 
5807
@item @emph{See also}:
5808
@ref{IOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
5809
@end table
5810
 
5811
 
5812
 
5813
@node IERRNO
5814
@section @code{IERRNO} --- Get the last system error number
5815
@fnindex IERRNO
5816
@cindex system, error handling
5817
 
5818
@table @asis
5819
@item @emph{Description}:
5820
Returns the last system error number, as given by the C @code{errno()}
5821
function.
5822
 
5823
@item @emph{Standard}:
5824
GNU extension
5825
 
5826
@item @emph{Class}:
5827
Function
5828
 
5829
@item @emph{Syntax}:
5830
@code{RESULT = IERRNO()}
5831
 
5832
@item @emph{Arguments}:
5833
None.
5834
 
5835
@item @emph{Return value}:
5836
The return value is of type @code{INTEGER} and of the default integer
5837
kind.
5838
 
5839
@item @emph{See also}:
5840
@ref{PERROR}
5841
@end table
5842
 
5843
 
5844
 
5845
@node INDEX intrinsic
5846
@section @code{INDEX} --- Position of a substring within a string
5847
@fnindex INDEX
5848
@cindex substring position
5849
@cindex string, find substring
5850
 
5851
@table @asis
5852
@item @emph{Description}:
5853
Returns the position of the start of the first occurrence of string
5854
@var{SUBSTRING} as a substring in @var{STRING}, counting from one.  If
5855
@var{SUBSTRING} is not present in @var{STRING}, zero is returned.  If
5856
the @var{BACK} argument is present and true, the return value is the
5857
start of the last occurrence rather than the first.
5858
 
5859
@item @emph{Standard}:
5860
Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
5861
 
5862
@item @emph{Class}:
5863
Elemental function
5864
 
5865
@item @emph{Syntax}:
5866
@code{RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])}
5867
 
5868
@item @emph{Arguments}:
5869
@multitable @columnfractions .15 .70
5870
@item @var{STRING} @tab Shall be a scalar @code{CHARACTER}, with
5871
@code{INTENT(IN)}
5872
@item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER}, with
5873
@code{INTENT(IN)}
5874
@item @var{BACK} @tab (Optional) Shall be a scalar @code{LOGICAL}, with
5875
@code{INTENT(IN)}
5876
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
5877
expression indicating the kind parameter of the result.
5878
@end multitable
5879
 
5880
@item @emph{Return value}:
5881
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
5882
@var{KIND} is absent, the return value is of default integer kind.
5883
 
5884
@item @emph{See also}:
5885
@ref{SCAN}, @ref{VERIFY}
5886
@end table
5887
 
5888
 
5889
 
5890
@node INT
5891
@section @code{INT} --- Convert to integer type
5892
@fnindex INT
5893
@fnindex IFIX
5894
@fnindex IDINT
5895
@cindex conversion, to integer
5896
 
5897
@table @asis
5898
@item @emph{Description}:
5899
Convert to integer type
5900
 
5901
@item @emph{Standard}:
5902
Fortran 77 and later
5903
 
5904
@item @emph{Class}:
5905
Elemental function
5906
 
5907
@item @emph{Syntax}:
5908
@code{RESULT = INT(A [, KIND))}
5909
 
5910
@item @emph{Arguments}:
5911
@multitable @columnfractions .15 .70
5912
@item @var{A}    @tab Shall be of type @code{INTEGER},
5913
@code{REAL}, or @code{COMPLEX}.
5914
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
5915
expression indicating the kind parameter of the result.
5916
@end multitable
5917
 
5918
@item @emph{Return value}:
5919
These functions return a @code{INTEGER} variable or array under
5920
the following rules:
5921
 
5922
@table @asis
5923
@item (A)
5924
If @var{A} is of type @code{INTEGER}, @code{INT(A) = A}
5925
@item (B)
5926
If @var{A} is of type @code{REAL} and @math{|A| < 1}, @code{INT(A)} equals @code{0}.
5927
If @math{|A| \geq 1}, then @code{INT(A)} equals the largest integer that does not exceed
5928
the range of @var{A} and whose sign is the same as the sign of @var{A}.
5929
@item (C)
5930
If @var{A} is of type @code{COMPLEX}, rule B is applied to the real part of @var{A}.
5931
@end table
5932
 
5933
@item @emph{Example}:
5934
@smallexample
5935
program test_int
5936
  integer :: i = 42
5937
  complex :: z = (-3.7, 1.0)
5938
  print *, int(i)
5939
  print *, int(z), int(z,8)
5940
end program
5941
@end smallexample
5942
 
5943
@item @emph{Specific names}:
5944
@multitable @columnfractions .20 .20 .20 .25
5945
@item Name             @tab Argument            @tab Return type       @tab Standard
5946
@item @code{IFIX(A)}   @tab @code{REAL(4) A}    @tab @code{INTEGER}    @tab Fortran 77 and later
5947
@item @code{IDINT(A)}  @tab @code{REAL(8) A}    @tab @code{INTEGER}    @tab Fortran 77 and later
5948
@end multitable
5949
 
5950
@end table
5951
 
5952
 
5953
 
5954
@node INT2
5955
@section @code{INT2} --- Convert to 16-bit integer type
5956
@fnindex INT2
5957
@fnindex SHORT
5958
@cindex conversion, to integer
5959
 
5960
@table @asis
5961
@item @emph{Description}:
5962
Convert to a @code{KIND=2} integer type. This is equivalent to the
5963
standard @code{INT} intrinsic with an optional argument of
5964
@code{KIND=2}, and is only included for backwards compatibility.
5965
 
5966
The @code{SHORT} intrinsic is equivalent to @code{INT2}.
5967
 
5968
@item @emph{Standard}:
5969
GNU extension
5970
 
5971
@item @emph{Class}:
5972
Elemental function
5973
 
5974
@item @emph{Syntax}:
5975
@code{RESULT = INT2(A)}
5976
 
5977
@item @emph{Arguments}:
5978
@multitable @columnfractions .15 .70
5979
@item @var{A}    @tab Shall be of type @code{INTEGER},
5980
@code{REAL}, or @code{COMPLEX}.
5981
@end multitable
5982
 
5983
@item @emph{Return value}:
5984
The return value is a @code{INTEGER(2)} variable.
5985
 
5986
@item @emph{See also}:
5987
@ref{INT}, @ref{INT8}, @ref{LONG}
5988
@end table
5989
 
5990
 
5991
 
5992
@node INT8
5993
@section @code{INT8} --- Convert to 64-bit integer type
5994
@fnindex INT8
5995
@cindex conversion, to integer
5996
 
5997
@table @asis
5998
@item @emph{Description}:
5999
Convert to a @code{KIND=8} integer type. This is equivalent to the
6000
standard @code{INT} intrinsic with an optional argument of
6001
@code{KIND=8}, and is only included for backwards compatibility.
6002
 
6003
@item @emph{Standard}:
6004
GNU extension
6005
 
6006
@item @emph{Class}:
6007
Elemental function
6008
 
6009
@item @emph{Syntax}:
6010
@code{RESULT = INT8(A)}
6011
 
6012
@item @emph{Arguments}:
6013
@multitable @columnfractions .15 .70
6014
@item @var{A}    @tab Shall be of type @code{INTEGER},
6015
@code{REAL}, or @code{COMPLEX}.
6016
@end multitable
6017
 
6018
@item @emph{Return value}:
6019
The return value is a @code{INTEGER(8)} variable.
6020
 
6021
@item @emph{See also}:
6022
@ref{INT}, @ref{INT2}, @ref{LONG}
6023
@end table
6024
 
6025
 
6026
 
6027
@node IOR
6028
@section @code{IOR} --- Bitwise logical or
6029
@fnindex IOR
6030
@cindex bitwise logical or
6031
@cindex logical or, bitwise
6032
 
6033
@table @asis
6034
@item @emph{Description}:
6035
@code{IOR} returns the bitwise boolean inclusive-OR of @var{I} and
6036
@var{J}.
6037
 
6038
@item @emph{Standard}:
6039
Fortran 95 and later
6040
 
6041
@item @emph{Class}:
6042
Elemental function
6043
 
6044
@item @emph{Syntax}:
6045
@code{RESULT = IOR(I, J)}
6046
 
6047
@item @emph{Arguments}:
6048
@multitable @columnfractions .15 .70
6049
@item @var{I} @tab The type shall be @code{INTEGER}.
6050
@item @var{J} @tab The type shall be @code{INTEGER}, of the same
6051
kind as @var{I}.  (As a GNU extension, different kinds are also
6052
permitted.)
6053
@end multitable
6054
 
6055
@item @emph{Return value}:
6056
The return type is @code{INTEGER}, of the same kind as the
6057
arguments.  (If the argument kinds differ, it is of the same kind as
6058
the larger argument.)
6059
 
6060
@item @emph{See also}:
6061
@ref{IEOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
6062
@end table
6063
 
6064
 
6065
 
6066
@node IRAND
6067
@section @code{IRAND} --- Integer pseudo-random number
6068
@fnindex IRAND
6069
@cindex random number generation
6070
 
6071
@table @asis
6072
@item @emph{Description}:
6073
@code{IRAND(FLAG)} returns a pseudo-random number from a uniform
6074
distribution between 0 and a system-dependent limit (which is in most
6075
cases 2147483647). If @var{FLAG} is 0, the next number
6076
in the current sequence is returned; if @var{FLAG} is 1, the generator
6077
is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
6078
it is used as a new seed with @code{SRAND}.
6079
 
6080
This intrinsic routine is provided for backwards compatibility with
6081
GNU Fortran 77. It implements a simple modulo generator as provided
6082
by @command{g77}. For new code, one should consider the use of
6083
@ref{RANDOM_NUMBER} as it implements a superior algorithm.
6084
 
6085
@item @emph{Standard}:
6086
GNU extension
6087
 
6088
@item @emph{Class}:
6089
Function
6090
 
6091
@item @emph{Syntax}:
6092
@code{RESULT = IRAND(I)}
6093
 
6094
@item @emph{Arguments}:
6095
@multitable @columnfractions .15 .70
6096
@item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
6097
@end multitable
6098
 
6099
@item @emph{Return value}:
6100
The return value is of @code{INTEGER(kind=4)} type.
6101
 
6102
@item @emph{Example}:
6103
@smallexample
6104
program test_irand
6105
  integer,parameter :: seed = 86456
6106
 
6107
  call srand(seed)
6108
  print *, irand(), irand(), irand(), irand()
6109
  print *, irand(seed), irand(), irand(), irand()
6110
end program test_irand
6111
@end smallexample
6112
 
6113
@end table
6114
 
6115
 
6116
 
6117
@node IS_IOSTAT_END
6118
@section @code{IS_IOSTAT_END} --- Test for end-of-file value
6119
@fnindex IS_IOSTAT_END
6120
@cindex IOSTAT, end of file
6121
 
6122
@table @asis
6123
@item @emph{Description}:
6124
@code{IS_IOSTAT_END} tests whether an variable has the value of the I/O
6125
status ``end of file''. The function is equivalent to comparing the variable
6126
with the @code{IOSTAT_END} parameter of the intrinsic module
6127
@code{ISO_FORTRAN_ENV}.
6128
 
6129
@item @emph{Standard}:
6130
Fortran 2003 and later
6131
 
6132
@item @emph{Class}:
6133
Elemental function
6134
 
6135
@item @emph{Syntax}:
6136
@code{RESULT = IS_IOSTAT_END(I)}
6137
 
6138
@item @emph{Arguments}:
6139
@multitable @columnfractions .15 .70
6140
@item @var{I} @tab Shall be of the type @code{INTEGER}.
6141
@end multitable
6142
 
6143
@item @emph{Return value}:
6144
Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
6145
@var{I} has the value which indicates an end of file condition for
6146
IOSTAT= specifiers, and is @code{.FALSE.} otherwise.
6147
 
6148
@item @emph{Example}:
6149
@smallexample
6150
PROGRAM iostat
6151
  IMPLICIT NONE
6152
  INTEGER :: stat, i
6153
  OPEN(88, FILE='test.dat')
6154
  READ(88, *, IOSTAT=stat) i
6155
  IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'
6156
END PROGRAM
6157
@end smallexample
6158
@end table
6159
 
6160
 
6161
 
6162
@node IS_IOSTAT_EOR
6163
@section @code{IS_IOSTAT_EOR} --- Test for end-of-record value
6164
@fnindex IS_IOSTAT_EOR
6165
@cindex IOSTAT, end of record
6166
 
6167
@table @asis
6168
@item @emph{Description}:
6169
@code{IS_IOSTAT_EOR} tests whether an variable has the value of the I/O
6170
status ``end of record''. The function is equivalent to comparing the
6171
variable with the @code{IOSTAT_EOR} parameter of the intrinsic module
6172
@code{ISO_FORTRAN_ENV}.
6173
 
6174
@item @emph{Standard}:
6175
Fortran 2003 and later
6176
 
6177
@item @emph{Class}:
6178
Elemental function
6179
 
6180
@item @emph{Syntax}:
6181
@code{RESULT = IS_IOSTAT_EOR(I)}
6182
 
6183
@item @emph{Arguments}:
6184
@multitable @columnfractions .15 .70
6185
@item @var{I} @tab Shall be of the type @code{INTEGER}.
6186
@end multitable
6187
 
6188
@item @emph{Return value}:
6189
Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
6190
@var{I} has the value which indicates an end of file condition for
6191
IOSTAT= specifiers, and is @code{.FALSE.} otherwise.
6192
 
6193
@item @emph{Example}:
6194
@smallexample
6195
PROGRAM iostat
6196
  IMPLICIT NONE
6197
  INTEGER :: stat, i(50)
6198
  OPEN(88, FILE='test.dat', FORM='UNFORMATTED')
6199
  READ(88, IOSTAT=stat) i
6200
  IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'
6201
END PROGRAM
6202
@end smallexample
6203
@end table
6204
 
6205
 
6206
 
6207
@node ISATTY
6208
@section @code{ISATTY} --- Whether a unit is a terminal device.
6209
@fnindex ISATTY
6210
@cindex system, terminal
6211
 
6212
@table @asis
6213
@item @emph{Description}:
6214
Determine whether a unit is connected to a terminal device.
6215
 
6216
@item @emph{Standard}:
6217
GNU extension
6218
 
6219
@item @emph{Class}:
6220
Function
6221
 
6222
@item @emph{Syntax}:
6223
@code{RESULT = ISATTY(UNIT)}
6224
 
6225
@item @emph{Arguments}:
6226
@multitable @columnfractions .15 .70
6227
@item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
6228
@end multitable
6229
 
6230
@item @emph{Return value}:
6231
Returns @code{.TRUE.} if the @var{UNIT} is connected to a terminal
6232
device, @code{.FALSE.} otherwise.
6233
 
6234
@item @emph{Example}:
6235
@smallexample
6236
PROGRAM test_isatty
6237
  INTEGER(kind=1) :: unit
6238
  DO unit = 1, 10
6239
    write(*,*) isatty(unit=unit)
6240
  END DO
6241
END PROGRAM
6242
@end smallexample
6243
@item @emph{See also}:
6244
@ref{TTYNAM}
6245
@end table
6246
 
6247
 
6248
 
6249
@node ISHFT
6250
@section @code{ISHFT} --- Shift bits
6251
@fnindex ISHFT
6252
@cindex bits, shift
6253
 
6254
@table @asis
6255
@item @emph{Description}:
6256
@code{ISHFT} returns a value corresponding to @var{I} with all of the
6257
bits shifted @var{SHIFT} places.  A value of @var{SHIFT} greater than
6258
zero corresponds to a left shift, a value of zero corresponds to no
6259
shift, and a value less than zero corresponds to a right shift.  If the
6260
absolute value of @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the
6261
value is undefined.  Bits shifted out from the left end or right end are
6262
lost; zeros are shifted in from the opposite end.
6263
 
6264
@item @emph{Standard}:
6265
Fortran 95 and later
6266
 
6267
@item @emph{Class}:
6268
Elemental function
6269
 
6270
@item @emph{Syntax}:
6271
@code{RESULT = ISHFT(I, SHIFT)}
6272
 
6273
@item @emph{Arguments}:
6274
@multitable @columnfractions .15 .70
6275
@item @var{I} @tab The type shall be @code{INTEGER}.
6276
@item @var{SHIFT} @tab The type shall be @code{INTEGER}.
6277
@end multitable
6278
 
6279
@item @emph{Return value}:
6280
The return value is of type @code{INTEGER} and of the same kind as
6281
@var{I}.
6282
 
6283
@item @emph{See also}:
6284
@ref{ISHFTC}
6285
@end table
6286
 
6287
 
6288
 
6289
@node ISHFTC
6290
@section @code{ISHFTC} --- Shift bits circularly
6291
@fnindex ISHFTC
6292
@cindex bits, shift circular
6293
 
6294
@table @asis
6295
@item @emph{Description}:
6296
@code{ISHFTC} returns a value corresponding to @var{I} with the
6297
rightmost @var{SIZE} bits shifted circularly @var{SHIFT} places; that
6298
is, bits shifted out one end are shifted into the opposite end.  A value
6299
of @var{SHIFT} greater than zero corresponds to a left shift, a value of
6300
zero corresponds to no shift, and a value less than zero corresponds to
6301
a right shift.  The absolute value of @var{SHIFT} must be less than
6302
@var{SIZE}.  If the @var{SIZE} argument is omitted, it is taken to be
6303
equivalent to @code{BIT_SIZE(I)}.
6304
 
6305
@item @emph{Standard}:
6306
Fortran 95 and later
6307
 
6308
@item @emph{Class}:
6309
Elemental function
6310
 
6311
@item @emph{Syntax}:
6312
@code{RESULT = ISHFTC(I, SHIFT [, SIZE])}
6313
 
6314
@item @emph{Arguments}:
6315
@multitable @columnfractions .15 .70
6316
@item @var{I} @tab The type shall be @code{INTEGER}.
6317
@item @var{SHIFT} @tab The type shall be @code{INTEGER}.
6318
@item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER};
6319
the value must be greater than zero and less than or equal to
6320
@code{BIT_SIZE(I)}.
6321
@end multitable
6322
 
6323
@item @emph{Return value}:
6324
The return value is of type @code{INTEGER} and of the same kind as
6325
@var{I}.
6326
 
6327
@item @emph{See also}:
6328
@ref{ISHFT}
6329
@end table
6330
 
6331
 
6332
 
6333
@node ISNAN
6334
@section @code{ISNAN} --- Test for a NaN
6335
@fnindex ISNAN
6336
@cindex IEEE, ISNAN
6337
 
6338
@table @asis
6339
@item @emph{Description}:
6340
@code{ISNAN} tests whether a floating-point value is an IEEE
6341
Not-a-Number (NaN).
6342
@item @emph{Standard}:
6343
GNU extension
6344
 
6345
@item @emph{Class}:
6346
Elemental function
6347
 
6348
@item @emph{Syntax}:
6349
@code{ISNAN(X)}
6350
 
6351
@item @emph{Arguments}:
6352
@multitable @columnfractions .15 .70
6353
@item @var{X} @tab Variable of the type @code{REAL}.
6354
 
6355
@end multitable
6356
 
6357
@item @emph{Return value}:
6358
Returns a default-kind @code{LOGICAL}. The returned value is @code{TRUE}
6359
if @var{X} is a NaN and @code{FALSE} otherwise.
6360
 
6361
@item @emph{Example}:
6362
@smallexample
6363
program test_nan
6364
  implicit none
6365
  real :: x
6366
  x = -1.0
6367
  x = sqrt(x)
6368
  if (isnan(x)) stop '"x" is a NaN'
6369
end program test_nan
6370
@end smallexample
6371
@end table
6372
 
6373
 
6374
 
6375
@node ITIME
6376
@section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds)
6377
@fnindex ITIME
6378
@cindex time, current
6379
@cindex current time
6380
 
6381
@table @asis
6382
@item @emph{Description}:
6383
@code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the
6384
current local time. The hour (in the range 1-24), minute (in the range 1-60),
6385
and seconds (in the range 1-60) appear in elements 1, 2, and 3 of @var{VALUES},
6386
respectively.
6387
 
6388
@item @emph{Standard}:
6389
GNU extension
6390
 
6391
@item @emph{Class}:
6392
Subroutine
6393
 
6394
@item @emph{Syntax}:
6395
@code{CALL ITIME(VALUES)}
6396
 
6397
@item @emph{Arguments}:
6398
@multitable @columnfractions .15 .70
6399
@item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)}
6400
and the kind shall be the default integer kind.
6401
@end multitable
6402
 
6403
@item @emph{Return value}:
6404
Does not return anything.
6405
 
6406
 
6407
@item @emph{Example}:
6408
@smallexample
6409
program test_itime
6410
  integer, dimension(3) :: tarray
6411
  call itime(tarray)
6412
  print *, tarray(1)
6413
  print *, tarray(2)
6414
  print *, tarray(3)
6415
end program test_itime
6416
@end smallexample
6417
@end table
6418
 
6419
 
6420
 
6421
@node KILL
6422
@section @code{KILL} --- Send a signal to a process
6423
@fnindex KILL
6424
 
6425
@table @asis
6426
@item @emph{Description}:
6427
@item @emph{Standard}:
6428
Sends the signal specified by @var{SIGNAL} to the process @var{PID}.
6429
See @code{kill(2)}.
6430
 
6431
This intrinsic is provided in both subroutine and function forms; however,
6432
only one form can be used in any given program unit.
6433
 
6434
@item @emph{Class}:
6435
Subroutine, function
6436
 
6437
@item @emph{Syntax}:
6438
@code{CALL KILL(C, VALUE [, STATUS])}
6439
 
6440
@item @emph{Arguments}:
6441
@multitable @columnfractions .15 .70
6442
@item @var{C} @tab Shall be a scalar @code{INTEGER}, with
6443
@code{INTENT(IN)}
6444
@item @var{VALUE} @tab Shall be a scalar @code{INTEGER}, with
6445
@code{INTENT(IN)}
6446
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)} or
6447
@code{INTEGER(8)}. Returns 0 on success, or a system-specific error code
6448
otherwise.
6449
@end multitable
6450
 
6451
@item @emph{See also}:
6452
@ref{ABORT}, @ref{EXIT}
6453
@end table
6454
 
6455
 
6456
 
6457
@node KIND
6458
@section @code{KIND} --- Kind of an entity
6459
@fnindex KIND
6460
@cindex kind
6461
 
6462
@table @asis
6463
@item @emph{Description}:
6464
@code{KIND(X)} returns the kind value of the entity @var{X}.
6465
 
6466
@item @emph{Standard}:
6467
Fortran 95 and later
6468
 
6469
@item @emph{Class}:
6470
Inquiry function
6471
 
6472
@item @emph{Syntax}:
6473
@code{K = KIND(X)}
6474
 
6475
@item @emph{Arguments}:
6476
@multitable @columnfractions .15 .70
6477
@item @var{X} @tab Shall be of type @code{LOGICAL}, @code{INTEGER},
6478
@code{REAL}, @code{COMPLEX} or @code{CHARACTER}.
6479
@end multitable
6480
 
6481
@item @emph{Return value}:
6482
The return value is a scalar of type @code{INTEGER} and of the default
6483
integer kind.
6484
 
6485
@item @emph{Example}:
6486
@smallexample
6487
program test_kind
6488
  integer,parameter :: kc = kind(' ')
6489
  integer,parameter :: kl = kind(.true.)
6490
 
6491
  print *, "The default character kind is ", kc
6492
  print *, "The default logical kind is ", kl
6493
end program test_kind
6494
@end smallexample
6495
 
6496
@end table
6497
 
6498
 
6499
 
6500
@node LBOUND
6501
@section @code{LBOUND} --- Lower dimension bounds of an array
6502
@fnindex LBOUND
6503
@cindex array, lower bound
6504
 
6505
@table @asis
6506
@item @emph{Description}:
6507
Returns the lower bounds of an array, or a single lower bound
6508
along the @var{DIM} dimension.
6509
@item @emph{Standard}:
6510
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
6511
 
6512
@item @emph{Class}:
6513
Inquiry function
6514
 
6515
@item @emph{Syntax}:
6516
@code{RESULT = LBOUND(ARRAY [, DIM [, KIND]])}
6517
 
6518
@item @emph{Arguments}:
6519
@multitable @columnfractions .15 .70
6520
@item @var{ARRAY} @tab Shall be an array, of any type.
6521
@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
6522
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
6523
expression indicating the kind parameter of the result.
6524
@end multitable
6525
 
6526
@item @emph{Return value}:
6527
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
6528
@var{KIND} is absent, the return value is of default integer kind.
6529
If @var{DIM} is absent, the result is an array of the lower bounds of
6530
@var{ARRAY}.  If @var{DIM} is present, the result is a scalar
6531
corresponding to the lower bound of the array along that dimension.  If
6532
@var{ARRAY} is an expression rather than a whole array or array
6533
structure component, or if it has a zero extent along the relevant
6534
dimension, the lower bound is taken to be 1.
6535
 
6536
@item @emph{See also}:
6537
@ref{UBOUND}
6538
@end table
6539
 
6540
 
6541
 
6542
@node LEADZ
6543
@section @code{LEADZ} --- Number of leading zero bits of an integer
6544
@fnindex LEADZ
6545
@cindex zero bits
6546
 
6547
@table @asis
6548
@item @emph{Description}:
6549
@code{LEADZ} returns the number of leading zero bits of an integer.
6550
 
6551
@item @emph{Standard}:
6552
Fortran 2008 and later
6553
 
6554
@item @emph{Class}:
6555
Elemental function
6556
 
6557
@item @emph{Syntax}:
6558
@code{RESULT = LEADZ(I)}
6559
 
6560
@item @emph{Arguments}:
6561
@multitable @columnfractions .15 .70
6562
@item @var{I} @tab Shall be of type @code{INTEGER}.
6563
@end multitable
6564
 
6565
@item @emph{Return value}:
6566
The type of the return value is the default @code{INTEGER}.
6567
If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
6568
 
6569
@item @emph{Example}:
6570
@smallexample
6571
PROGRAM test_leadz
6572
  WRITE (*,*) LEADZ(1)  ! prints 8 if BITSIZE(I) has the value 32
6573
END PROGRAM
6574
@end smallexample
6575
 
6576
@item @emph{See also}:
6577
@ref{BIT_SIZE}, @ref{TRAILZ}
6578
@end table
6579
 
6580
 
6581
 
6582
@node LEN
6583
@section @code{LEN} --- Length of a character entity
6584
@fnindex LEN
6585
@cindex string, length
6586
 
6587
@table @asis
6588
@item @emph{Description}:
6589
Returns the length of a character string.  If @var{STRING} is an array,
6590
the length of an element of @var{STRING} is returned.  Note that
6591
@var{STRING} need not be defined when this intrinsic is invoked, since
6592
only the length, not the content, of @var{STRING} is needed.
6593
 
6594
@item @emph{Standard}:
6595
Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
6596
 
6597
@item @emph{Class}:
6598
Inquiry function
6599
 
6600
@item @emph{Syntax}:
6601
@code{L = LEN(STRING [, KIND])}
6602
 
6603
@item @emph{Arguments}:
6604
@multitable @columnfractions .15 .70
6605
@item @var{STRING} @tab Shall be a scalar or array of type
6606
@code{CHARACTER}, with @code{INTENT(IN)}
6607
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
6608
expression indicating the kind parameter of the result.
6609
@end multitable
6610
 
6611
@item @emph{Return value}:
6612
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
6613
@var{KIND} is absent, the return value is of default integer kind.
6614
 
6615
@item @emph{See also}:
6616
@ref{LEN_TRIM}, @ref{ADJUSTL}, @ref{ADJUSTR}
6617
@end table
6618
 
6619
 
6620
 
6621
@node LEN_TRIM
6622
@section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters
6623
@fnindex LEN_TRIM
6624
@cindex string, length, without trailing whitespace
6625
 
6626
@table @asis
6627
@item @emph{Description}:
6628
Returns the length of a character string, ignoring any trailing blanks.
6629
 
6630
@item @emph{Standard}:
6631
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
6632
 
6633
@item @emph{Class}:
6634
Elemental function
6635
 
6636
@item @emph{Syntax}:
6637
@code{RESULT = LEN_TRIM(STRING [, KIND])}
6638
 
6639
@item @emph{Arguments}:
6640
@multitable @columnfractions .15 .70
6641
@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
6642
with @code{INTENT(IN)}
6643
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
6644
expression indicating the kind parameter of the result.
6645
@end multitable
6646
 
6647
@item @emph{Return value}:
6648
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
6649
@var{KIND} is absent, the return value is of default integer kind.
6650
 
6651
@item @emph{See also}:
6652
@ref{LEN}, @ref{ADJUSTL}, @ref{ADJUSTR}
6653
@end table
6654
 
6655
 
6656
 
6657
@node LGE
6658
@section @code{LGE} --- Lexical greater than or equal
6659
@fnindex LGE
6660
@cindex lexical comparison of strings
6661
@cindex string, comparison
6662
 
6663
@table @asis
6664
@item @emph{Description}:
6665
Determines whether one string is lexically greater than or equal to
6666
another string, where the two strings are interpreted as containing
6667
ASCII character codes.  If the String A and String B are not the same
6668
length, the shorter is compared as if spaces were appended to it to form
6669
a value that has the same length as the longer.
6670
 
6671
In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
6672
@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
6673
operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
6674
that the latter use the processor's character ordering (which is not
6675
ASCII on some targets), whereas the former always use the ASCII
6676
ordering.
6677
 
6678
@item @emph{Standard}:
6679
Fortran 77 and later
6680
 
6681
@item @emph{Class}:
6682
Elemental function
6683
 
6684
@item @emph{Syntax}:
6685
@code{RESULT = LGE(STRING_A, STRING_B)}
6686
 
6687
@item @emph{Arguments}:
6688
@multitable @columnfractions .15 .70
6689
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
6690
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
6691
@end multitable
6692
 
6693
@item @emph{Return value}:
6694
Returns @code{.TRUE.} if @code{STRING_A >= STRING_B}, and @code{.FALSE.}
6695
otherwise, based on the ASCII ordering.
6696
 
6697
@item @emph{See also}:
6698
@ref{LGT}, @ref{LLE}, @ref{LLT}
6699
@end table
6700
 
6701
 
6702
 
6703
@node LGT
6704
@section @code{LGT} --- Lexical greater than
6705
@fnindex LGT
6706
@cindex lexical comparison of strings
6707
@cindex string, comparison
6708
 
6709
@table @asis
6710
@item @emph{Description}:
6711
Determines whether one string is lexically greater than another string,
6712
where the two strings are interpreted as containing ASCII character
6713
codes.  If the String A and String B are not the same length, the
6714
shorter is compared as if spaces were appended to it to form a value
6715
that has the same length as the longer.
6716
 
6717
In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
6718
@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
6719
operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
6720
that the latter use the processor's character ordering (which is not
6721
ASCII on some targets), whereas the former always use the ASCII
6722
ordering.
6723
 
6724
@item @emph{Standard}:
6725
Fortran 77 and later
6726
 
6727
@item @emph{Class}:
6728
Elemental function
6729
 
6730
@item @emph{Syntax}:
6731
@code{RESULT = LGT(STRING_A, STRING_B)}
6732
 
6733
@item @emph{Arguments}:
6734
@multitable @columnfractions .15 .70
6735
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
6736
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
6737
@end multitable
6738
 
6739
@item @emph{Return value}:
6740
Returns @code{.TRUE.} if @code{STRING_A > STRING_B}, and @code{.FALSE.}
6741
otherwise, based on the ASCII ordering.
6742
 
6743
@item @emph{See also}:
6744
@ref{LGE}, @ref{LLE}, @ref{LLT}
6745
@end table
6746
 
6747
 
6748
 
6749
@node LINK
6750
@section @code{LINK} --- Create a hard link
6751
@fnindex LINK
6752
@cindex file system, create link
6753
@cindex file system, hard link
6754
 
6755
@table @asis
6756
@item @emph{Description}:
6757
Makes a (hard) link from file @var{PATH1} to @var{PATH2}. A null
6758
character (@code{CHAR(0)}) can be used to mark the end of the names in
6759
@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
6760
names are ignored.  If the @var{STATUS} argument is supplied, it
6761
contains 0 on success or a nonzero error code upon return; see
6762
@code{link(2)}.
6763
 
6764
This intrinsic is provided in both subroutine and function forms;
6765
however, only one form can be used in any given program unit.
6766
 
6767
@item @emph{Standard}:
6768
GNU extension
6769
 
6770
@item @emph{Class}:
6771
Subroutine, function
6772
 
6773
@item @emph{Syntax}:
6774
@multitable @columnfractions .80
6775
@item @code{CALL LINK(PATH1, PATH2 [, STATUS])}
6776
@item @code{STATUS = LINK(PATH1, PATH2)}
6777
@end multitable
6778
 
6779
@item @emph{Arguments}:
6780
@multitable @columnfractions .15 .70
6781
@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
6782
@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
6783
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
6784
@end multitable
6785
 
6786
@item @emph{See also}:
6787
@ref{SYMLNK}, @ref{UNLINK}
6788
@end table
6789
 
6790
 
6791
 
6792
@node LLE
6793
@section @code{LLE} --- Lexical less than or equal
6794
@fnindex LLE
6795
@cindex lexical comparison of strings
6796
@cindex string, comparison
6797
 
6798
@table @asis
6799
@item @emph{Description}:
6800
Determines whether one string is lexically less than or equal to another
6801
string, where the two strings are interpreted as containing ASCII
6802
character codes.  If the String A and String B are not the same length,
6803
the shorter is compared as if spaces were appended to it to form a value
6804
that has the same length as the longer.
6805
 
6806
In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
6807
@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
6808
operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
6809
that the latter use the processor's character ordering (which is not
6810
ASCII on some targets), whereas the former always use the ASCII
6811
ordering.
6812
 
6813
@item @emph{Standard}:
6814
Fortran 77 and later
6815
 
6816
@item @emph{Class}:
6817
Elemental function
6818
 
6819
@item @emph{Syntax}:
6820
@code{RESULT = LLE(STRING_A, STRING_B)}
6821
 
6822
@item @emph{Arguments}:
6823
@multitable @columnfractions .15 .70
6824
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
6825
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
6826
@end multitable
6827
 
6828
@item @emph{Return value}:
6829
Returns @code{.TRUE.} if @code{STRING_A <= STRING_B}, and @code{.FALSE.}
6830
otherwise, based on the ASCII ordering.
6831
 
6832
@item @emph{See also}:
6833
@ref{LGE}, @ref{LGT}, @ref{LLT}
6834
@end table
6835
 
6836
 
6837
 
6838
@node LLT
6839
@section @code{LLT} --- Lexical less than
6840
@fnindex LLT
6841
@cindex lexical comparison of strings
6842
@cindex string, comparison
6843
 
6844
@table @asis
6845
@item @emph{Description}:
6846
Determines whether one string is lexically less than another string,
6847
where the two strings are interpreted as containing ASCII character
6848
codes.  If the String A and String B are not the same length, the
6849
shorter is compared as if spaces were appended to it to form a value
6850
that has the same length as the longer.
6851
 
6852
In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
6853
@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
6854
operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
6855
that the latter use the processor's character ordering (which is not
6856
ASCII on some targets), whereas the former always use the ASCII
6857
ordering.
6858
 
6859
@item @emph{Standard}:
6860
Fortran 77 and later
6861
 
6862
@item @emph{Class}:
6863
Elemental function
6864
 
6865
@item @emph{Syntax}:
6866
@code{RESULT = LLT(STRING_A, STRING_B)}
6867
 
6868
@item @emph{Arguments}:
6869
@multitable @columnfractions .15 .70
6870
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
6871
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
6872
@end multitable
6873
 
6874
@item @emph{Return value}:
6875
Returns @code{.TRUE.} if @code{STRING_A < STRING_B}, and @code{.FALSE.}
6876
otherwise, based on the ASCII ordering.
6877
 
6878
@item @emph{See also}:
6879
@ref{LGE}, @ref{LGT}, @ref{LLE}
6880
@end table
6881
 
6882
 
6883
 
6884
@node LNBLNK
6885
@section @code{LNBLNK} --- Index of the last non-blank character in a string
6886
@fnindex LNBLNK
6887
@cindex string, find non-blank character
6888
 
6889
@table @asis
6890
@item @emph{Description}:
6891
Returns the length of a character string, ignoring any trailing blanks.
6892
This is identical to the standard @code{LEN_TRIM} intrinsic, and is only
6893
included for backwards compatibility.
6894
 
6895
@item @emph{Standard}:
6896
GNU extension
6897
 
6898
@item @emph{Class}:
6899
Elemental function
6900
 
6901
@item @emph{Syntax}:
6902
@code{RESULT = LNBLNK(STRING)}
6903
 
6904
@item @emph{Arguments}:
6905
@multitable @columnfractions .15 .70
6906
@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
6907
with @code{INTENT(IN)}
6908
@end multitable
6909
 
6910
@item @emph{Return value}:
6911
The return value is of @code{INTEGER(kind=4)} type.
6912
 
6913
@item @emph{See also}:
6914
@ref{INDEX intrinsic}, @ref{LEN_TRIM}
6915
@end table
6916
 
6917
 
6918
 
6919
@node LOC
6920
@section @code{LOC} --- Returns the address of a variable
6921
@fnindex LOC
6922
@cindex location of a variable in memory
6923
 
6924
@table @asis
6925
@item @emph{Description}:
6926
@code{LOC(X)} returns the address of @var{X} as an integer.
6927
 
6928
@item @emph{Standard}:
6929
GNU extension
6930
 
6931
@item @emph{Class}:
6932
Inquiry function
6933
 
6934
@item @emph{Syntax}:
6935
@code{RESULT = LOC(X)}
6936
 
6937
@item @emph{Arguments}:
6938
@multitable @columnfractions .15 .70
6939
@item @var{X} @tab Variable of any type.
6940
@end multitable
6941
 
6942
@item @emph{Return value}:
6943
The return value is of type @code{INTEGER}, with a @code{KIND}
6944
corresponding to the size (in bytes) of a memory address on the target
6945
machine.
6946
 
6947
@item @emph{Example}:
6948
@smallexample
6949
program test_loc
6950
  integer :: i
6951
  real :: r
6952
  i = loc(r)
6953
  print *, i
6954
end program test_loc
6955
@end smallexample
6956
@end table
6957
 
6958
 
6959
 
6960
@node LOG
6961
@section @code{LOG} --- Logarithm function
6962
@fnindex LOG
6963
@fnindex ALOG
6964
@fnindex DLOG
6965
@fnindex CLOG
6966
@fnindex ZLOG
6967
@fnindex CDLOG
6968
@cindex exponential function, inverse
6969
@cindex logarithmic function
6970
 
6971
@table @asis
6972
@item @emph{Description}:
6973
@code{LOG(X)} computes the logarithm of @var{X}.
6974
 
6975
@item @emph{Standard}:
6976
Fortran 77 and later
6977
 
6978
@item @emph{Class}:
6979
Elemental function
6980
 
6981
@item @emph{Syntax}:
6982
@code{RESULT = LOG(X)}
6983
 
6984
@item @emph{Arguments}:
6985
@multitable @columnfractions .15 .70
6986
@item @var{X} @tab The type shall be @code{REAL} or
6987
@code{COMPLEX}.
6988
@end multitable
6989
 
6990
@item @emph{Return value}:
6991
The return value is of type @code{REAL} or @code{COMPLEX}.
6992
The kind type parameter is the same as @var{X}.
6993
If @var{X} is @code{COMPLEX}, the imaginary part @math{\omega} is in the range
6994
@math{-\pi \leq \omega \leq \pi}.
6995
 
6996
@item @emph{Example}:
6997
@smallexample
6998
program test_log
6999
  real(8) :: x = 1.0_8
7000
  complex :: z = (1.0, 2.0)
7001
  x = log(x)
7002
  z = log(z)
7003
end program test_log
7004
@end smallexample
7005
 
7006
@item @emph{Specific names}:
7007
@multitable @columnfractions .20 .20 .20 .25
7008
@item Name            @tab Argument          @tab Return type       @tab Standard
7009
@item @code{ALOG(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab f95, gnu
7010
@item @code{DLOG(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab f95, gnu
7011
@item @code{CLOG(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab f95, gnu
7012
@item @code{ZLOG(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
7013
@item @code{CDLOG(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
7014
@end multitable
7015
@end table
7016
 
7017
 
7018
 
7019
@node LOG10
7020
@section @code{LOG10} --- Base 10 logarithm function
7021
@fnindex LOG10
7022
@fnindex ALOG10
7023
@fnindex DLOG10
7024
@cindex exponential function, inverse
7025
@cindex logarithmic function
7026
 
7027
@table @asis
7028
@item @emph{Description}:
7029
@code{LOG10(X)} computes the base 10 logarithm of @var{X}.
7030
 
7031
@item @emph{Standard}:
7032
Fortran 77 and later
7033
 
7034
@item @emph{Class}:
7035
Elemental function
7036
 
7037
@item @emph{Syntax}:
7038
@code{RESULT = LOG10(X)}
7039
 
7040
@item @emph{Arguments}:
7041
@multitable @columnfractions .15 .70
7042
@item @var{X} @tab The type shall be @code{REAL}.
7043
@end multitable
7044
 
7045
@item @emph{Return value}:
7046
The return value is of type @code{REAL} or @code{COMPLEX}.
7047
The kind type parameter is the same as @var{X}.
7048
 
7049
@item @emph{Example}:
7050
@smallexample
7051
program test_log10
7052
  real(8) :: x = 10.0_8
7053
  x = log10(x)
7054
end program test_log10
7055
@end smallexample
7056
 
7057
@item @emph{Specific names}:
7058
@multitable @columnfractions .20 .20 .20 .25
7059
@item Name            @tab Argument          @tab Return type       @tab Standard
7060
@item @code{ALOG10(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 95 and later
7061
@item @code{DLOG10(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
7062
@end multitable
7063
@end table
7064
 
7065
 
7066
 
7067
@node LOG_GAMMA
7068
@section @code{LOG_GAMMA} --- Logarithm of the Gamma function
7069
@fnindex LOG_GAMMA
7070
@fnindex LGAMMA
7071
@fnindex ALGAMA
7072
@fnindex DLGAMA
7073
@cindex Gamma function, logarithm of
7074
 
7075
@table @asis
7076
@item @emph{Description}:
7077
@code{LOG_GAMMA(X)} computes the natural logarithm of the absolute value
7078
of the Gamma (@math{\Gamma}) function.
7079
 
7080
@item @emph{Standard}:
7081
Fortran 2008 and later
7082
 
7083
@item @emph{Class}:
7084
Elemental function
7085
 
7086
@item @emph{Syntax}:
7087
@code{X = LOG_GAMMA(X)}
7088
 
7089
@item @emph{Arguments}:
7090
@multitable @columnfractions .15 .70
7091
@item @var{X} @tab Shall be of type @code{REAL} and neither zero
7092
nor a negative integer.
7093
@end multitable
7094
 
7095
@item @emph{Return value}:
7096
The return value is of type @code{REAL} of the same kind as @var{X}.
7097
 
7098
@item @emph{Example}:
7099
@smallexample
7100
program test_log_gamma
7101
  real :: x = 1.0
7102
  x = lgamma(x) ! returns 0.0
7103
end program test_log_gamma
7104
@end smallexample
7105
 
7106
@item @emph{Specific names}:
7107
@multitable @columnfractions .20 .20 .20 .25
7108
@item Name             @tab Argument         @tab Return type       @tab Standard
7109
@item @code{LGAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
7110
@item @code{ALGAMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
7111
@item @code{DLGAMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU Extension
7112
@end multitable
7113
 
7114
@item @emph{See also}:
7115
Gamma function: @ref{GAMMA}
7116
 
7117
@end table
7118
 
7119
 
7120
 
7121
@node LOGICAL
7122
@section @code{LOGICAL} --- Convert to logical type
7123
@fnindex LOGICAL
7124
@cindex conversion, to logical
7125
 
7126
@table @asis
7127
@item @emph{Description}:
7128
Converts one kind of @code{LOGICAL} variable to another.
7129
 
7130
@item @emph{Standard}:
7131
Fortran 95 and later
7132
 
7133
@item @emph{Class}:
7134
Elemental function
7135
 
7136
@item @emph{Syntax}:
7137
@code{RESULT = LOGICAL(L [, KIND])}
7138
 
7139
@item @emph{Arguments}:
7140
@multitable @columnfractions .15 .70
7141
@item @var{L}    @tab The type shall be @code{LOGICAL}.
7142
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
7143
expression indicating the kind parameter of the result.
7144
@end multitable
7145
 
7146
@item @emph{Return value}:
7147
The return value is a @code{LOGICAL} value equal to @var{L}, with a
7148
kind corresponding to @var{KIND}, or of the default logical kind if
7149
@var{KIND} is not given.
7150
 
7151
@item @emph{See also}:
7152
@ref{INT}, @ref{REAL}, @ref{CMPLX}
7153
@end table
7154
 
7155
 
7156
 
7157
@node LONG
7158
@section @code{LONG} --- Convert to integer type
7159
@fnindex LONG
7160
@cindex conversion, to integer
7161
 
7162
@table @asis
7163
@item @emph{Description}:
7164
Convert to a @code{KIND=4} integer type, which is the same size as a C
7165
@code{long} integer.  This is equivalent to the standard @code{INT}
7166
intrinsic with an optional argument of @code{KIND=4}, and is only
7167
included for backwards compatibility.
7168
 
7169
@item @emph{Standard}:
7170
GNU extension
7171
 
7172
@item @emph{Class}:
7173
Elemental function
7174
 
7175
@item @emph{Syntax}:
7176
@code{RESULT = LONG(A)}
7177
 
7178
@item @emph{Arguments}:
7179
@multitable @columnfractions .15 .70
7180
@item @var{A}    @tab Shall be of type @code{INTEGER},
7181
@code{REAL}, or @code{COMPLEX}.
7182
@end multitable
7183
 
7184
@item @emph{Return value}:
7185
The return value is a @code{INTEGER(4)} variable.
7186
 
7187
@item @emph{See also}:
7188
@ref{INT}, @ref{INT2}, @ref{INT8}
7189
@end table
7190
 
7191
 
7192
 
7193
@node LSHIFT
7194
@section @code{LSHIFT} --- Left shift bits
7195
@fnindex LSHIFT
7196
@cindex bits, shift left
7197
 
7198
@table @asis
7199
@item @emph{Description}:
7200
@code{LSHIFT} returns a value corresponding to @var{I} with all of the
7201
bits shifted left by @var{SHIFT} places.  If the absolute value of
7202
@var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
7203
Bits shifted out from the left end are lost; zeros are shifted in from
7204
the opposite end.
7205
 
7206
This function has been superseded by the @code{ISHFT} intrinsic, which
7207
is standard in Fortran 95 and later.
7208
 
7209
@item @emph{Standard}:
7210
GNU extension
7211
 
7212
@item @emph{Class}:
7213
Elemental function
7214
 
7215
@item @emph{Syntax}:
7216
@code{RESULT = LSHIFT(I, SHIFT)}
7217
 
7218
@item @emph{Arguments}:
7219
@multitable @columnfractions .15 .70
7220
@item @var{I} @tab The type shall be @code{INTEGER}.
7221
@item @var{SHIFT} @tab The type shall be @code{INTEGER}.
7222
@end multitable
7223
 
7224
@item @emph{Return value}:
7225
The return value is of type @code{INTEGER} and of the same kind as
7226
@var{I}.
7227
 
7228
@item @emph{See also}:
7229
@ref{ISHFT}, @ref{ISHFTC}, @ref{RSHIFT}
7230
 
7231
@end table
7232
 
7233
 
7234
 
7235
@node LSTAT
7236
@section @code{LSTAT} --- Get file status
7237
@fnindex LSTAT
7238
@cindex file system, file status
7239
 
7240
@table @asis
7241
@item @emph{Description}:
7242
@code{LSTAT} is identical to @ref{STAT}, except that if path is a
7243
symbolic link, then the link itself is statted, not the file that it
7244
refers to.
7245
 
7246
The elements in @code{VALUES} are the same as described by @ref{STAT}.
7247
 
7248
This intrinsic is provided in both subroutine and function forms;
7249
however, only one form can be used in any given program unit.
7250
 
7251
@item @emph{Standard}:
7252
GNU extension
7253
 
7254
@item @emph{Class}:
7255
Subroutine, function
7256
 
7257
@item @emph{Syntax}:
7258
@code{CALL LSTAT(NAME, VALUES [, STATUS])}
7259
 
7260
@item @emph{Arguments}:
7261
@multitable @columnfractions .15 .70
7262
@item @var{NAME}   @tab The type shall be @code{CHARACTER} of the default
7263
kind, a valid path within the file system.
7264
@item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
7265
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}.
7266
Returns 0 on success and a system specific error code otherwise.
7267
@end multitable
7268
 
7269
@item @emph{Example}:
7270
See @ref{STAT} for an example.
7271
 
7272
@item @emph{See also}:
7273
To stat an open file: @ref{FSTAT}, to stat a file: @ref{STAT}
7274
@end table
7275
 
7276
 
7277
 
7278
@node LTIME
7279
@section @code{LTIME} --- Convert time to local time info
7280
@fnindex LTIME
7281
@cindex time, conversion to local time info
7282
 
7283
@table @asis
7284
@item @emph{Description}:
7285
Given a system time value @var{TIME} (as provided by the @code{TIME8()}
7286
intrinsic), fills @var{VALUES} with values extracted from it appropriate
7287
to the local time zone using @code{localtime(3)}.
7288
 
7289
@item @emph{Standard}:
7290
GNU extension
7291
 
7292
@item @emph{Class}:
7293
Subroutine
7294
 
7295
@item @emph{Syntax}:
7296
@code{CALL LTIME(TIME, VALUES)}
7297
 
7298
@item @emph{Arguments}:
7299
@multitable @columnfractions .15 .70
7300
@item @var{TIME}  @tab An @code{INTEGER} scalar expression
7301
corresponding to a system time, with @code{INTENT(IN)}.
7302
@item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
7303
with @code{INTENT(OUT)}.
7304
@end multitable
7305
 
7306
@item @emph{Return value}:
7307
The elements of @var{VALUES} are assigned as follows:
7308
@enumerate
7309
@item Seconds after the minute, range 0--59 or 0--61 to allow for leap
7310
seconds
7311
@item Minutes after the hour, range 0--59
7312
@item Hours past midnight, range 0--23
7313
@item Day of month, range 0--31
7314
@item Number of months since January, range 0--12
7315
@item Years since 1900
7316
@item Number of days since Sunday, range 0--6
7317
@item Days since January 1
7318
@item Daylight savings indicator: positive if daylight savings is in
7319
effect, zero if not, and negative if the information is not available.
7320
@end enumerate
7321
 
7322
@item @emph{See also}:
7323
@ref{CTIME}, @ref{GMTIME}, @ref{TIME}, @ref{TIME8}
7324
 
7325
@end table
7326
 
7327
 
7328
 
7329
@node MALLOC
7330
@section @code{MALLOC} --- Allocate dynamic memory
7331
@fnindex MALLOC
7332
@cindex pointer, cray
7333
 
7334
@table @asis
7335
@item @emph{Description}:
7336
@code{MALLOC(SIZE)} allocates @var{SIZE} bytes of dynamic memory and
7337
returns the address of the allocated memory. The @code{MALLOC} intrinsic
7338
is an extension intended to be used with Cray pointers, and is provided
7339
in GNU Fortran to allow the user to compile legacy code. For new code
7340
using Fortran 95 pointers, the memory allocation intrinsic is
7341
@code{ALLOCATE}.
7342
 
7343
@item @emph{Standard}:
7344
GNU extension
7345
 
7346
@item @emph{Class}:
7347
Function
7348
 
7349
@item @emph{Syntax}:
7350
@code{PTR = MALLOC(SIZE)}
7351
 
7352
@item @emph{Arguments}:
7353
@multitable @columnfractions .15 .70
7354
@item @var{SIZE} @tab The type shall be @code{INTEGER}.
7355
@end multitable
7356
 
7357
@item @emph{Return value}:
7358
The return value is of type @code{INTEGER(K)}, with @var{K} such that
7359
variables of type @code{INTEGER(K)} have the same size as
7360
C pointers (@code{sizeof(void *)}).
7361
 
7362
@item @emph{Example}:
7363
The following example demonstrates the use of @code{MALLOC} and
7364
@code{FREE} with Cray pointers.
7365
 
7366
@smallexample
7367
program test_malloc
7368
  implicit none
7369
  integer i
7370
  real*8 x(*), z
7371
  pointer(ptr_x,x)
7372
 
7373
  ptr_x = malloc(20*8)
7374
  do i = 1, 20
7375
    x(i) = sqrt(1.0d0 / i)
7376
  end do
7377
  z = 0
7378
  do i = 1, 20
7379
    z = z + x(i)
7380
    print *, z
7381
  end do
7382
  call free(ptr_x)
7383
end program test_malloc
7384
@end smallexample
7385
 
7386
@item @emph{See also}:
7387
@ref{FREE}
7388
@end table
7389
 
7390
 
7391
 
7392
@node MATMUL
7393
@section @code{MATMUL} --- matrix multiplication
7394
@fnindex MATMUL
7395
@cindex matrix multiplication
7396
@cindex product, matrix
7397
 
7398
@table @asis
7399
@item @emph{Description}:
7400
Performs a matrix multiplication on numeric or logical arguments.
7401
 
7402
@item @emph{Standard}:
7403
Fortran 95 and later
7404
 
7405
@item @emph{Class}:
7406
Transformational function
7407
 
7408
@item @emph{Syntax}:
7409
@code{RESULT = MATMUL(MATRIX_A, MATRIX_B)}
7410
 
7411
@item @emph{Arguments}:
7412
@multitable @columnfractions .15 .70
7413
@item @var{MATRIX_A} @tab An array of @code{INTEGER},
7414
@code{REAL}, @code{COMPLEX}, or @code{LOGICAL} type, with a rank of
7415
one or two.
7416
@item @var{MATRIX_B} @tab An array of @code{INTEGER},
7417
@code{REAL}, or @code{COMPLEX} type if @var{MATRIX_A} is of a numeric
7418
type; otherwise, an array of @code{LOGICAL} type. The rank shall be one
7419
or two, and the first (or only) dimension of @var{MATRIX_B} shall be
7420
equal to the last (or only) dimension of @var{MATRIX_A}.
7421
@end multitable
7422
 
7423
@item @emph{Return value}:
7424
The matrix product of @var{MATRIX_A} and @var{MATRIX_B}.  The type and
7425
kind of the result follow the usual type and kind promotion rules, as
7426
for the @code{*} or @code{.AND.} operators.
7427
 
7428
@item @emph{See also}:
7429
@end table
7430
 
7431
 
7432
 
7433
@node MAX
7434
@section @code{MAX} --- Maximum value of an argument list
7435
@fnindex MAX
7436
@fnindex MAX0
7437
@fnindex AMAX0
7438
@fnindex MAX1
7439
@fnindex AMAX1
7440
@fnindex DMAX1
7441
@cindex maximum value
7442
 
7443
@table @asis
7444
@item @emph{Description}:
7445
Returns the argument with the largest (most positive) value.
7446
 
7447
@item @emph{Standard}:
7448
Fortran 77 and later
7449
 
7450
@item @emph{Class}:
7451
Elemental function
7452
 
7453
@item @emph{Syntax}:
7454
@code{RESULT = MAX(A1, A2 [, A3 [, ...]])}
7455
 
7456
@item @emph{Arguments}:
7457
@multitable @columnfractions .15 .70
7458
@item @var{A1}          @tab The type shall be @code{INTEGER} or
7459
@code{REAL}.
7460
@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
7461
as @var{A1}.  (As a GNU extension, arguments of different kinds are
7462
permitted.)
7463
@end multitable
7464
 
7465
@item @emph{Return value}:
7466
The return value corresponds to the maximum value among the arguments,
7467
and has the same type and kind as the first argument.
7468
 
7469
@item @emph{Specific names}:
7470
@multitable @columnfractions .20 .20 .20 .25
7471
@item Name             @tab Argument            @tab Return type         @tab Standard
7472
@item @code{MAX0(I)}   @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)}   @tab Fortran 77 and later
7473
@item @code{AMAX0(I)}  @tab @code{INTEGER(4) I} @tab @code{REAL(MAX(X))} @tab Fortran 77 and later
7474
@item @code{MAX1(X)}   @tab @code{REAL X}    @tab @code{INT(MAX(X))}  @tab Fortran 77 and later
7475
@item @code{AMAX1(X)}  @tab @code{REAL(4)    X} @tab @code{REAL(4)}      @tab Fortran 77 and later
7476
@item @code{DMAX1(X)}  @tab @code{REAL(8)    X} @tab @code{REAL(8)}      @tab Fortran 77 and later
7477
@end multitable
7478
 
7479
@item @emph{See also}:
7480
@ref{MAXLOC} @ref{MAXVAL}, @ref{MIN}
7481
 
7482
@end table
7483
 
7484
 
7485
 
7486
@node MAXEXPONENT
7487
@section @code{MAXEXPONENT} --- Maximum exponent of a real kind
7488
@fnindex MAXEXPONENT
7489
@cindex model representation, maximum exponent
7490
 
7491
@table @asis
7492
@item @emph{Description}:
7493
@code{MAXEXPONENT(X)} returns the maximum exponent in the model of the
7494
type of @code{X}.
7495
 
7496
@item @emph{Standard}:
7497
Fortran 95 and later
7498
 
7499
@item @emph{Class}:
7500
Inquiry function
7501
 
7502
@item @emph{Syntax}:
7503
@code{RESULT = MAXEXPONENT(X)}
7504
 
7505
@item @emph{Arguments}:
7506
@multitable @columnfractions .15 .70
7507
@item @var{X} @tab Shall be of type @code{REAL}.
7508
@end multitable
7509
 
7510
@item @emph{Return value}:
7511
The return value is of type @code{INTEGER} and of the default integer
7512
kind.
7513
 
7514
@item @emph{Example}:
7515
@smallexample
7516
program exponents
7517
  real(kind=4) :: x
7518
  real(kind=8) :: y
7519
 
7520
  print *, minexponent(x), maxexponent(x)
7521
  print *, minexponent(y), maxexponent(y)
7522
end program exponents
7523
@end smallexample
7524
@end table
7525
 
7526
 
7527
 
7528
@node MAXLOC
7529
@section @code{MAXLOC} --- Location of the maximum value within an array
7530
@fnindex MAXLOC
7531
@cindex array, location of maximum element
7532
 
7533
@table @asis
7534
@item @emph{Description}:
7535
Determines the location of the element in the array with the maximum
7536
value, or, if the @var{DIM} argument is supplied, determines the
7537
locations of the maximum element along each row of the array in the
7538
@var{DIM} direction.  If @var{MASK} is present, only the elements for
7539
which @var{MASK} is @code{.TRUE.} are considered.  If more than one
7540
element in the array has the maximum value, the location returned is
7541
that of the first such element in array element order.  If the array has
7542
zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
7543
the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
7544
and all of the elements of @var{MASK} along a given row are zero, the
7545
result value for that row is zero.
7546
 
7547
@item @emph{Standard}:
7548
Fortran 95 and later
7549
 
7550
@item @emph{Class}:
7551
Transformational function
7552
 
7553
@item @emph{Syntax}:
7554
@multitable @columnfractions .80
7555
@item @code{RESULT = MAXLOC(ARRAY, DIM [, MASK])}
7556
@item @code{RESULT = MAXLOC(ARRAY [, MASK])}
7557
@end multitable
7558
 
7559
@item @emph{Arguments}:
7560
@multitable @columnfractions .15 .70
7561
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
7562
@code{REAL}.
7563
@item @var{DIM}   @tab (Optional) Shall be a scalar of type
7564
@code{INTEGER}, with a value between one and the rank of @var{ARRAY},
7565
inclusive.  It may not be an optional dummy argument.
7566
@item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
7567
and conformable with @var{ARRAY}.
7568
@end multitable
7569
 
7570
@item @emph{Return value}:
7571
If @var{DIM} is absent, the result is a rank-one array with a length
7572
equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
7573
is an array with a rank one less than the rank of @var{ARRAY}, and a
7574
size corresponding to the size of @var{ARRAY} with the @var{DIM}
7575
dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
7576
of one, the result is a scalar.  In all cases, the result is of default
7577
@code{INTEGER} type.
7578
 
7579
@item @emph{See also}:
7580
@ref{MAX}, @ref{MAXVAL}
7581
 
7582
@end table
7583
 
7584
 
7585
 
7586
@node MAXVAL
7587
@section @code{MAXVAL} --- Maximum value of an array
7588
@fnindex MAXVAL
7589
@cindex array, maximum value
7590
@cindex maximum value
7591
 
7592
@table @asis
7593
@item @emph{Description}:
7594
Determines the maximum value of the elements in an array value, or, if
7595
the @var{DIM} argument is supplied, determines the maximum value along
7596
each row of the array in the @var{DIM} direction.  If @var{MASK} is
7597
present, only the elements for which @var{MASK} is @code{.TRUE.} are
7598
considered.  If the array has zero size, or all of the elements of
7599
@var{MASK} are @code{.FALSE.}, then the result is @code{-HUGE(ARRAY)}
7600
if @var{ARRAY} is numeric, or a string of nulls if @var{ARRAY} is of character
7601
type.
7602
 
7603
@item @emph{Standard}:
7604
Fortran 95 and later
7605
 
7606
@item @emph{Class}:
7607
Transformational function
7608
 
7609
@item @emph{Syntax}:
7610
@multitable @columnfractions .80
7611
@item @code{RESULT = MAXVAL(ARRAY, DIM [, MASK])}
7612
@item @code{RESULT = MAXVAL(ARRAY [, MASK])}
7613
@end multitable
7614
 
7615
@item @emph{Arguments}:
7616
@multitable @columnfractions .15 .70
7617
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
7618
@code{REAL}.
7619
@item @var{DIM}   @tab (Optional) Shall be a scalar of type
7620
@code{INTEGER}, with a value between one and the rank of @var{ARRAY},
7621
inclusive.  It may not be an optional dummy argument.
7622
@item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
7623
and conformable with @var{ARRAY}.
7624
@end multitable
7625
 
7626
@item @emph{Return value}:
7627
If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
7628
is a scalar.  If @var{DIM} is present, the result is an array with a
7629
rank one less than the rank of @var{ARRAY}, and a size corresponding to
7630
the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
7631
cases, the result is of the same type and kind as @var{ARRAY}.
7632
 
7633
@item @emph{See also}:
7634
@ref{MAX}, @ref{MAXLOC}
7635
@end table
7636
 
7637
 
7638
 
7639
@node MCLOCK
7640
@section @code{MCLOCK} --- Time function
7641
@fnindex MCLOCK
7642
@cindex time, clock ticks
7643
@cindex clock ticks
7644
 
7645
@table @asis
7646
@item @emph{Description}:
7647
Returns the number of clock ticks since the start of the process, based
7648
on the UNIX function @code{clock(3)}.
7649
 
7650
This intrinsic is not fully portable, such as to systems with 32-bit
7651
@code{INTEGER} types but supporting times wider than 32 bits. Therefore,
7652
the values returned by this intrinsic might be, or become, negative, or
7653
numerically less than previous values, during a single run of the
7654
compiled program.
7655
 
7656
@item @emph{Standard}:
7657
GNU extension
7658
 
7659
@item @emph{Class}:
7660
Function
7661
 
7662
@item @emph{Syntax}:
7663
@code{RESULT = MCLOCK()}
7664
 
7665
@item @emph{Return value}:
7666
The return value is a scalar of type @code{INTEGER(4)}, equal to the
7667
number of clock ticks since the start of the process, or @code{-1} if
7668
the system does not support @code{clock(3)}.
7669
 
7670
@item @emph{See also}:
7671
@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME}
7672
 
7673
@end table
7674
 
7675
 
7676
 
7677
@node MCLOCK8
7678
@section @code{MCLOCK8} --- Time function (64-bit)
7679
@fnindex MCLOCK8
7680
@cindex time, clock ticks
7681
@cindex clock ticks
7682
 
7683
@table @asis
7684
@item @emph{Description}:
7685
Returns the number of clock ticks since the start of the process, based
7686
on the UNIX function @code{clock(3)}.
7687
 
7688
@emph{Warning:} this intrinsic does not increase the range of the timing
7689
values over that returned by @code{clock(3)}. On a system with a 32-bit
7690
@code{clock(3)}, @code{MCLOCK8()} will return a 32-bit value, even though
7691
it is converted to a 64-bit @code{INTEGER(8)} value. That means
7692
overflows of the 32-bit value can still occur. Therefore, the values
7693
returned by this intrinsic might be or become negative or numerically
7694
less than previous values during a single run of the compiled program.
7695
 
7696
@item @emph{Standard}:
7697
GNU extension
7698
 
7699
@item @emph{Class}:
7700
Function
7701
 
7702
@item @emph{Syntax}:
7703
@code{RESULT = MCLOCK8()}
7704
 
7705
@item @emph{Return value}:
7706
The return value is a scalar of type @code{INTEGER(8)}, equal to the
7707
number of clock ticks since the start of the process, or @code{-1} if
7708
the system does not support @code{clock(3)}.
7709
 
7710
@item @emph{See also}:
7711
@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
7712
 
7713
@end table
7714
 
7715
 
7716
 
7717
@node MERGE
7718
@section @code{MERGE} --- Merge variables
7719
@fnindex MERGE
7720
@cindex array, merge arrays
7721
@cindex array, combine arrays
7722
 
7723
@table @asis
7724
@item @emph{Description}:
7725
Select values from two arrays according to a logical mask.  The result
7726
is equal to @var{TSOURCE} if @var{MASK} is @code{.TRUE.}, or equal to
7727
@var{FSOURCE} if it is @code{.FALSE.}.
7728
 
7729
@item @emph{Standard}:
7730
Fortran 95 and later
7731
 
7732
@item @emph{Class}:
7733
Elemental function
7734
 
7735
@item @emph{Syntax}:
7736
@code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)}
7737
 
7738
@item @emph{Arguments}:
7739
@multitable @columnfractions .15 .70
7740
@item @var{TSOURCE} @tab May be of any type.
7741
@item @var{FSOURCE} @tab Shall be of the same type and type parameters
7742
as @var{TSOURCE}.
7743
@item @var{MASK}    @tab Shall be of type @code{LOGICAL}.
7744
@end multitable
7745
 
7746
@item @emph{Return value}:
7747
The result is of the same type and type parameters as @var{TSOURCE}.
7748
 
7749
@end table
7750
 
7751
 
7752
 
7753
@node MIN
7754
@section @code{MIN} --- Minimum value of an argument list
7755
@fnindex MIN
7756
@fnindex MIN0
7757
@fnindex AMIN0
7758
@fnindex MIN1
7759
@fnindex AMIN1
7760
@fnindex DMIN1
7761
@cindex minimum value
7762
 
7763
@table @asis
7764
@item @emph{Description}:
7765
Returns the argument with the smallest (most negative) value.
7766
 
7767
@item @emph{Standard}:
7768
Fortran 77 and later
7769
 
7770
@item @emph{Class}:
7771
Elemental function
7772
 
7773
@item @emph{Syntax}:
7774
@code{RESULT = MIN(A1, A2 [, A3, ...])}
7775
 
7776
@item @emph{Arguments}:
7777
@multitable @columnfractions .15 .70
7778
@item @var{A1}          @tab The type shall be @code{INTEGER} or
7779
@code{REAL}.
7780
@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
7781
as @var{A1}.  (As a GNU extension, arguments of different kinds are
7782
permitted.)
7783
@end multitable
7784
 
7785
@item @emph{Return value}:
7786
The return value corresponds to the maximum value among the arguments,
7787
and has the same type and kind as the first argument.
7788
 
7789
@item @emph{Specific names}:
7790
@multitable @columnfractions .20 .20 .20 .25
7791
@item Name             @tab Argument            @tab Return type         @tab Standard
7792
@item @code{MIN0(I)}   @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)}   @tab Fortran 77 and later
7793
@item @code{AMIN0(I)}  @tab @code{INTEGER(4) I} @tab @code{REAL(MIN(X))} @tab Fortran 77 and later
7794
@item @code{MIN1(X)}   @tab @code{REAL X}    @tab @code{INT(MIN(X))}  @tab Fortran 77 and later
7795
@item @code{AMIN1(X)}  @tab @code{REAL(4)    X} @tab @code{REAL(4)}      @tab Fortran 77 and later
7796
@item @code{DMIN1(X)}  @tab @code{REAL(8)    X} @tab @code{REAL(8)}      @tab Fortran 77 and later
7797
@end multitable
7798
 
7799
@item @emph{See also}:
7800
@ref{MAX}, @ref{MINLOC}, @ref{MINVAL}
7801
@end table
7802
 
7803
 
7804
 
7805
@node MINEXPONENT
7806
@section @code{MINEXPONENT} --- Minimum exponent of a real kind
7807
@fnindex MINEXPONENT
7808
@cindex model representation, minimum exponent
7809
 
7810
@table @asis
7811
@item @emph{Description}:
7812
@code{MINEXPONENT(X)} returns the minimum exponent in the model of the
7813
type of @code{X}.
7814
 
7815
@item @emph{Standard}:
7816
Fortran 95 and later
7817
 
7818
@item @emph{Class}:
7819
Inquiry function
7820
 
7821
@item @emph{Syntax}:
7822
@code{RESULT = MINEXPONENT(X)}
7823
 
7824
@item @emph{Arguments}:
7825
@multitable @columnfractions .15 .70
7826
@item @var{X} @tab Shall be of type @code{REAL}.
7827
@end multitable
7828
 
7829
@item @emph{Return value}:
7830
The return value is of type @code{INTEGER} and of the default integer
7831
kind.
7832
 
7833
@item @emph{Example}:
7834
See @code{MAXEXPONENT} for an example.
7835
@end table
7836
 
7837
 
7838
 
7839
@node MINLOC
7840
@section @code{MINLOC} --- Location of the minimum value within an array
7841
@fnindex MINLOC
7842
@cindex array, location of minimum element
7843
 
7844
@table @asis
7845
@item @emph{Description}:
7846
Determines the location of the element in the array with the minimum
7847
value, or, if the @var{DIM} argument is supplied, determines the
7848
locations of the minimum element along each row of the array in the
7849
@var{DIM} direction.  If @var{MASK} is present, only the elements for
7850
which @var{MASK} is @code{.TRUE.} are considered.  If more than one
7851
element in the array has the minimum value, the location returned is
7852
that of the first such element in array element order.  If the array has
7853
zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
7854
the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
7855
and all of the elements of @var{MASK} along a given row are zero, the
7856
result value for that row is zero.
7857
 
7858
@item @emph{Standard}:
7859
Fortran 95 and later
7860
 
7861
@item @emph{Class}:
7862
Transformational function
7863
 
7864
@item @emph{Syntax}:
7865
@multitable @columnfractions .80
7866
@item @code{RESULT = MINLOC(ARRAY, DIM [, MASK])}
7867
@item @code{RESULT = MINLOC(ARRAY [, MASK])}
7868
@end multitable
7869
 
7870
@item @emph{Arguments}:
7871
@multitable @columnfractions .15 .70
7872
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
7873
@code{REAL}.
7874
@item @var{DIM}   @tab (Optional) Shall be a scalar of type
7875
@code{INTEGER}, with a value between one and the rank of @var{ARRAY},
7876
inclusive.  It may not be an optional dummy argument.
7877
@item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
7878
and conformable with @var{ARRAY}.
7879
@end multitable
7880
 
7881
@item @emph{Return value}:
7882
If @var{DIM} is absent, the result is a rank-one array with a length
7883
equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
7884
is an array with a rank one less than the rank of @var{ARRAY}, and a
7885
size corresponding to the size of @var{ARRAY} with the @var{DIM}
7886
dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
7887
of one, the result is a scalar.  In all cases, the result is of default
7888
@code{INTEGER} type.
7889
 
7890
@item @emph{See also}:
7891
@ref{MIN}, @ref{MINVAL}
7892
 
7893
@end table
7894
 
7895
 
7896
 
7897
@node MINVAL
7898
@section @code{MINVAL} --- Minimum value of an array
7899
@fnindex MINVAL
7900
@cindex array, minimum value
7901
@cindex minimum value
7902
 
7903
@table @asis
7904
@item @emph{Description}:
7905
Determines the minimum value of the elements in an array value, or, if
7906
the @var{DIM} argument is supplied, determines the minimum value along
7907
each row of the array in the @var{DIM} direction.  If @var{MASK} is
7908
present, only the elements for which @var{MASK} is @code{.TRUE.} are
7909
considered.  If the array has zero size, or all of the elements of
7910
@var{MASK} are @code{.FALSE.}, then the result is @code{HUGE(ARRAY)} if
7911
@var{ARRAY} is numeric, or a string of @code{CHAR(255)} characters if
7912
@var{ARRAY} is of character type.
7913
 
7914
@item @emph{Standard}:
7915
Fortran 95 and later
7916
 
7917
@item @emph{Class}:
7918
Transformational function
7919
 
7920
@item @emph{Syntax}:
7921
@multitable @columnfractions .80
7922
@item @code{RESULT = MINVAL(ARRAY, DIM [, MASK])}
7923
@item @code{RESULT = MINVAL(ARRAY [, MASK])}
7924
@end multitable
7925
 
7926
@item @emph{Arguments}:
7927
@multitable @columnfractions .15 .70
7928
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
7929
@code{REAL}.
7930
@item @var{DIM}   @tab (Optional) Shall be a scalar of type
7931
@code{INTEGER}, with a value between one and the rank of @var{ARRAY},
7932
inclusive.  It may not be an optional dummy argument.
7933
@item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
7934
and conformable with @var{ARRAY}.
7935
@end multitable
7936
 
7937
@item @emph{Return value}:
7938
If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
7939
is a scalar.  If @var{DIM} is present, the result is an array with a
7940
rank one less than the rank of @var{ARRAY}, and a size corresponding to
7941
the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
7942
cases, the result is of the same type and kind as @var{ARRAY}.
7943
 
7944
@item @emph{See also}:
7945
@ref{MIN}, @ref{MINLOC}
7946
 
7947
@end table
7948
 
7949
 
7950
 
7951
@node MOD
7952
@section @code{MOD} --- Remainder function
7953
@fnindex MOD
7954
@fnindex AMOD
7955
@fnindex DMOD
7956
@cindex remainder
7957
@cindex division, remainder
7958
 
7959
@table @asis
7960
@item @emph{Description}:
7961
@code{MOD(A,P)} computes the remainder of the division of A by P@. It is
7962
calculated as @code{A - (INT(A/P) * P)}.
7963
 
7964
@item @emph{Standard}:
7965
Fortran 77 and later
7966
 
7967
@item @emph{Class}:
7968
Elemental function
7969
 
7970
@item @emph{Syntax}:
7971
@code{RESULT = MOD(A, P)}
7972
 
7973
@item @emph{Arguments}:
7974
@multitable @columnfractions .15 .70
7975
@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
7976
@item @var{P} @tab Shall be a scalar of the same type as @var{A} and not
7977
equal to zero
7978
@end multitable
7979
 
7980
@item @emph{Return value}:
7981
The kind of the return value is the result of cross-promoting
7982
the kinds of the arguments.
7983
 
7984
@item @emph{Example}:
7985
@smallexample
7986
program test_mod
7987
  print *, mod(17,3)
7988
  print *, mod(17.5,5.5)
7989
  print *, mod(17.5d0,5.5)
7990
  print *, mod(17.5,5.5d0)
7991
 
7992
  print *, mod(-17,3)
7993
  print *, mod(-17.5,5.5)
7994
  print *, mod(-17.5d0,5.5)
7995
  print *, mod(-17.5,5.5d0)
7996
 
7997
  print *, mod(17,-3)
7998
  print *, mod(17.5,-5.5)
7999
  print *, mod(17.5d0,-5.5)
8000
  print *, mod(17.5,-5.5d0)
8001
end program test_mod
8002
@end smallexample
8003
 
8004
@item @emph{Specific names}:
8005
@multitable @columnfractions .20 .20 .20 .25
8006
@item Name             @tab Arguments      @tab Return type    @tab Standard
8007
@item @code{AMOD(A,P)} @tab @code{REAL(4)} @tab @code{REAL(4)} @tab Fortran 95 and later
8008
@item @code{DMOD(A,P)} @tab @code{REAL(8)} @tab @code{REAL(8)} @tab Fortran 95 and later
8009
@end multitable
8010
@end table
8011
 
8012
 
8013
 
8014
@node MODULO
8015
@section @code{MODULO} --- Modulo function
8016
@fnindex MODULO
8017
@cindex modulo
8018
@cindex division, modulo
8019
 
8020
@table @asis
8021
@item @emph{Description}:
8022
@code{MODULO(A,P)} computes the @var{A} modulo @var{P}.
8023
 
8024
@item @emph{Standard}:
8025
Fortran 95 and later
8026
 
8027
@item @emph{Class}:
8028
Elemental function
8029
 
8030
@item @emph{Syntax}:
8031
@code{RESULT = MODULO(A, P)}
8032
 
8033
@item @emph{Arguments}:
8034
@multitable @columnfractions .15 .70
8035
@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
8036
@item @var{P} @tab Shall be a scalar of the same type and kind as @var{A}
8037
@end multitable
8038
 
8039
@item @emph{Return value}:
8040
The type and kind of the result are those of the arguments.
8041
@table @asis
8042
@item If @var{A} and @var{P} are of type @code{INTEGER}:
8043
@code{MODULO(A,P)} has the value @var{R} such that @code{A=Q*P+R}, where
8044
@var{Q} is an integer and @var{R} is between 0 (inclusive) and @var{P}
8045
(exclusive).
8046
@item If @var{A} and @var{P} are of type @code{REAL}:
8047
@code{MODULO(A,P)} has the value of @code{A - FLOOR (A / P) * P}.
8048
@end table
8049
In all cases, if @var{P} is zero the result is processor-dependent.
8050
 
8051
@item @emph{Example}:
8052
@smallexample
8053
program test_modulo
8054
  print *, modulo(17,3)
8055
  print *, modulo(17.5,5.5)
8056
 
8057
  print *, modulo(-17,3)
8058
  print *, modulo(-17.5,5.5)
8059
 
8060
  print *, modulo(17,-3)
8061
  print *, modulo(17.5,-5.5)
8062
end program
8063
@end smallexample
8064
 
8065
@end table
8066
 
8067
 
8068
 
8069
@node MOVE_ALLOC
8070
@section @code{MOVE_ALLOC} --- Move allocation from one object to another
8071
@fnindex MOVE_ALLOC
8072
@cindex moving allocation
8073
@cindex allocation, moving
8074
 
8075
@table @asis
8076
@item @emph{Description}:
8077
@code{MOVE_ALLOC(FROM, TO)} moves the allocation from @var{FROM} to
8078
@var{TO}.  @var{FROM} will become deallocated in the process.
8079
 
8080
@item @emph{Standard}:
8081
Fortran 2003 and later
8082
 
8083
@item @emph{Class}:
8084
Subroutine
8085
 
8086
@item @emph{Syntax}:
8087
@code{CALL MOVE_ALLOC(FROM, TO)}
8088
 
8089
@item @emph{Arguments}:
8090
@multitable @columnfractions .15 .70
8091
@item @var{FROM}  @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be
8092
of any type and kind.
8093
@item @var{TO} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be
8094
of the same type, kind and rank as @var{FROM}.
8095
@end multitable
8096
 
8097
@item @emph{Return value}:
8098
None
8099
 
8100
@item @emph{Example}:
8101
@smallexample
8102
program test_move_alloc
8103
    integer, allocatable :: a(:), b(:)
8104
 
8105
    allocate(a(3))
8106
    a = [ 1, 2, 3 ]
8107
    call move_alloc(a, b)
8108
    print *, allocated(a), allocated(b)
8109
    print *, b
8110
end program test_move_alloc
8111
@end smallexample
8112
@end table
8113
 
8114
 
8115
 
8116
@node MVBITS
8117
@section @code{MVBITS} --- Move bits from one integer to another
8118
@fnindex MVBITS
8119
@cindex bits, move
8120
 
8121
@table @asis
8122
@item @emph{Description}:
8123
Moves @var{LEN} bits from positions @var{FROMPOS} through
8124
@code{FROMPOS+LEN-1} of @var{FROM} to positions @var{TOPOS} through
8125
@code{TOPOS+LEN-1} of @var{TO}. The portion of argument @var{TO} not
8126
affected by the movement of bits is unchanged. The values of
8127
@code{FROMPOS+LEN-1} and @code{TOPOS+LEN-1} must be less than
8128
@code{BIT_SIZE(FROM)}.
8129
 
8130
@item @emph{Standard}:
8131
Fortran 95 and later
8132
 
8133
@item @emph{Class}:
8134
Elemental subroutine
8135
 
8136
@item @emph{Syntax}:
8137
@code{CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
8138
 
8139
@item @emph{Arguments}:
8140
@multitable @columnfractions .15 .70
8141
@item @var{FROM}    @tab The type shall be @code{INTEGER}.
8142
@item @var{FROMPOS} @tab The type shall be @code{INTEGER}.
8143
@item @var{LEN}     @tab The type shall be @code{INTEGER}.
8144
@item @var{TO}      @tab The type shall be @code{INTEGER}, of the
8145
same kind as @var{FROM}.
8146
@item @var{TOPOS}   @tab The type shall be @code{INTEGER}.
8147
@end multitable
8148
 
8149
@item @emph{See also}:
8150
@ref{IBCLR}, @ref{IBSET}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
8151
@end table
8152
 
8153
 
8154
 
8155
@node NEAREST
8156
@section @code{NEAREST} --- Nearest representable number
8157
@fnindex NEAREST
8158
@cindex real number, nearest different
8159
@cindex floating point, nearest different
8160
 
8161
@table @asis
8162
@item @emph{Description}:
8163
@code{NEAREST(X, S)} returns the processor-representable number nearest
8164
to @code{X} in the direction indicated by the sign of @code{S}.
8165
 
8166
@item @emph{Standard}:
8167
Fortran 95 and later
8168
 
8169
@item @emph{Class}:
8170
Elemental function
8171
 
8172
@item @emph{Syntax}:
8173
@code{RESULT = NEAREST(X, S)}
8174
 
8175
@item @emph{Arguments}:
8176
@multitable @columnfractions .15 .70
8177
@item @var{X} @tab Shall be of type @code{REAL}.
8178
@item @var{S} @tab (Optional) shall be of type @code{REAL} and
8179
not equal to zero.
8180
@end multitable
8181
 
8182
@item @emph{Return value}:
8183
The return value is of the same type as @code{X}. If @code{S} is
8184
positive, @code{NEAREST} returns the processor-representable number
8185
greater than @code{X} and nearest to it. If @code{S} is negative,
8186
@code{NEAREST} returns the processor-representable number smaller than
8187
@code{X} and nearest to it.
8188
 
8189
@item @emph{Example}:
8190
@smallexample
8191
program test_nearest
8192
  real :: x, y
8193
  x = nearest(42.0, 1.0)
8194
  y = nearest(42.0, -1.0)
8195
  write (*,"(3(G20.15))") x, y, x - y
8196
end program test_nearest
8197
@end smallexample
8198
@end table
8199
 
8200
 
8201
 
8202
@node NEW_LINE
8203
@section @code{NEW_LINE} --- New line character
8204
@fnindex NEW_LINE
8205
@cindex newline
8206
@cindex output, newline
8207
 
8208
@table @asis
8209
@item @emph{Description}:
8210
@code{NEW_LINE(C)} returns the new-line character.
8211
 
8212
@item @emph{Standard}:
8213
Fortran 2003 and later
8214
 
8215
@item @emph{Class}:
8216
Inquiry function
8217
 
8218
@item @emph{Syntax}:
8219
@code{RESULT = NEW_LINE(C)}
8220
 
8221
@item @emph{Arguments}:
8222
@multitable @columnfractions .15 .70
8223
@item @var{C}    @tab The argument shall be a scalar or array of the
8224
type @code{CHARACTER}.
8225
@end multitable
8226
 
8227
@item @emph{Return value}:
8228
Returns a @var{CHARACTER} scalar of length one with the new-line character of
8229
the same kind as parameter @var{C}.
8230
 
8231
@item @emph{Example}:
8232
@smallexample
8233
program newline
8234
  implicit none
8235
  write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'
8236
end program newline
8237
@end smallexample
8238
@end table
8239
 
8240
 
8241
 
8242
@node NINT
8243
@section @code{NINT} --- Nearest whole number
8244
@fnindex NINT
8245
@fnindex IDNINT
8246
@cindex rounding, nearest whole number
8247
 
8248
@table @asis
8249
@item @emph{Description}:
8250
@code{NINT(A)} rounds its argument to the nearest whole number.
8251
 
8252
@item @emph{Standard}:
8253
Fortran 77 and later, with @var{KIND} argument Fortran 90 and later
8254
 
8255
@item @emph{Class}:
8256
Elemental function
8257
 
8258
@item @emph{Syntax}:
8259
@code{RESULT = NINT(A [, KIND])}
8260
 
8261
@item @emph{Arguments}:
8262
@multitable @columnfractions .15 .70
8263
@item @var{A}    @tab The type of the argument shall be @code{REAL}.
8264
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8265
expression indicating the kind parameter of the result.
8266
@end multitable
8267
 
8268
@item @emph{Return value}:
8269
Returns @var{A} with the fractional portion of its magnitude eliminated by
8270
rounding to the nearest whole number and with its sign preserved,
8271
converted to an @code{INTEGER} of the default kind.
8272
 
8273
@item @emph{Example}:
8274
@smallexample
8275
program test_nint
8276
  real(4) x4
8277
  real(8) x8
8278
  x4 = 1.234E0_4
8279
  x8 = 4.321_8
8280
  print *, nint(x4), idnint(x8)
8281
end program test_nint
8282
@end smallexample
8283
 
8284
@item @emph{Specific names}:
8285
@multitable @columnfractions .25 .25 .25
8286
@item Name             @tab Argument         @tab Standard
8287
@item @code{IDNINT(X)} @tab @code{REAL(8)}   @tab Fortran 95 and later
8288
@end multitable
8289
 
8290
@item @emph{See also}:
8291
@ref{CEILING}, @ref{FLOOR}
8292
 
8293
@end table
8294
 
8295
 
8296
 
8297
@node NOT
8298
@section @code{NOT} --- Logical negation
8299
@fnindex NOT
8300
@cindex bits, negate
8301
@cindex bitwise logical not
8302
@cindex logical not, bitwise
8303
 
8304
@table @asis
8305
@item @emph{Description}:
8306
@code{NOT} returns the bitwise boolean inverse of @var{I}.
8307
 
8308
@item @emph{Standard}:
8309
Fortran 95 and later
8310
 
8311
@item @emph{Class}:
8312
Elemental function
8313
 
8314
@item @emph{Syntax}:
8315
@code{RESULT = NOT(I)}
8316
 
8317
@item @emph{Arguments}:
8318
@multitable @columnfractions .15 .70
8319
@item @var{I} @tab The type shall be @code{INTEGER}.
8320
@end multitable
8321
 
8322
@item @emph{Return value}:
8323
The return type is @code{INTEGER}, of the same kind as the
8324
argument.
8325
 
8326
@item @emph{See also}:
8327
@ref{IAND}, @ref{IEOR}, @ref{IOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}
8328
 
8329
@end table
8330
 
8331
 
8332
 
8333
@node NULL
8334
@section @code{NULL} --- Function that returns an disassociated pointer
8335
@fnindex NULL
8336
@cindex pointer, status
8337
@cindex pointer, disassociated
8338
 
8339
@table @asis
8340
@item @emph{Description}:
8341
Returns a disassociated pointer.
8342
 
8343
If @var{MOLD} is present, a dissassociated pointer of the same type is
8344
returned, otherwise the type is determined by context.
8345
 
8346
In Fortran 95, @var{MOLD} is optional. Please note that Fortran 2003
8347
includes cases where it is required.
8348
 
8349
@item @emph{Standard}:
8350
Fortran 95 and later
8351
 
8352
@item @emph{Class}:
8353
Transformational function
8354
 
8355
@item @emph{Syntax}:
8356
@code{PTR => NULL([MOLD])}
8357
 
8358
@item @emph{Arguments}:
8359
@multitable @columnfractions .15 .70
8360
@item @var{MOLD} @tab (Optional) shall be a pointer of any association
8361
status and of any type.
8362
@end multitable
8363
 
8364
@item @emph{Return value}:
8365
A disassociated pointer.
8366
 
8367
@item @emph{Example}:
8368
@smallexample
8369
REAL, POINTER, DIMENSION(:) :: VEC => NULL ()
8370
@end smallexample
8371
 
8372
@item @emph{See also}:
8373
@ref{ASSOCIATED}
8374
@end table
8375
 
8376
 
8377
 
8378
@node OR
8379
@section @code{OR} --- Bitwise logical OR
8380
@fnindex OR
8381
@cindex bitwise logical or
8382
@cindex logical or, bitwise
8383
 
8384
@table @asis
8385
@item @emph{Description}:
8386
Bitwise logical @code{OR}.
8387
 
8388
This intrinsic routine is provided for backwards compatibility with
8389
GNU Fortran 77.  For integer arguments, programmers should consider
8390
the use of the @ref{IOR} intrinsic defined by the Fortran standard.
8391
 
8392
@item @emph{Standard}:
8393
GNU extension
8394
 
8395
@item @emph{Class}:
8396
Function
8397
 
8398
@item @emph{Syntax}:
8399
@code{RESULT = OR(I, J)}
8400
 
8401
@item @emph{Arguments}:
8402
@multitable @columnfractions .15 .70
8403
@item @var{I} @tab The type shall be either a scalar @code{INTEGER}
8404
type or a scalar @code{LOGICAL} type.
8405
@item @var{J} @tab The type shall be the same as the type of @var{J}.
8406
@end multitable
8407
 
8408
@item @emph{Return value}:
8409
The return type is either a scalar @code{INTEGER} or a scalar
8410
@code{LOGICAL}.  If the kind type parameters differ, then the
8411
smaller kind type is implicitly converted to larger kind, and the
8412
return has the larger kind.
8413
 
8414
@item @emph{Example}:
8415
@smallexample
8416
PROGRAM test_or
8417
  LOGICAL :: T = .TRUE., F = .FALSE.
8418
  INTEGER :: a, b
8419
  DATA a / Z'F' /, b / Z'3' /
8420
 
8421
  WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)
8422
  WRITE (*,*) OR(a, b)
8423
END PROGRAM
8424
@end smallexample
8425
 
8426
@item @emph{See also}:
8427
Fortran 95 elemental function: @ref{IOR}
8428
@end table
8429
 
8430
 
8431
 
8432
@node PACK
8433
@section @code{PACK} --- Pack an array into an array of rank one
8434
@fnindex PACK
8435
@cindex array, packing
8436
@cindex array, reduce dimension
8437
@cindex array, gather elements
8438
 
8439
@table @asis
8440
@item @emph{Description}:
8441
Stores the elements of @var{ARRAY} in an array of rank one.
8442
 
8443
The beginning of the resulting array is made up of elements whose @var{MASK}
8444
equals @code{TRUE}. Afterwards, positions are filled with elements taken from
8445
@var{VECTOR}.
8446
 
8447
@item @emph{Standard}:
8448
Fortran 95 and later
8449
 
8450
@item @emph{Class}:
8451
Transformational function
8452
 
8453
@item @emph{Syntax}:
8454
@code{RESULT = PACK(ARRAY, MASK[,VECTOR]}
8455
 
8456
@item @emph{Arguments}:
8457
@multitable @columnfractions .15 .70
8458
@item @var{ARRAY}  @tab Shall be an array of any type.
8459
@item @var{MASK}   @tab Shall be an array of type @code{LOGICAL} and
8460
of the same size as @var{ARRAY}. Alternatively, it may be a @code{LOGICAL}
8461
scalar.
8462
@item @var{VECTOR} @tab (Optional) shall be an array of the same type
8463
as @var{ARRAY} and of rank one. If present, the number of elements in
8464
@var{VECTOR} shall be equal to or greater than the number of true elements
8465
in @var{MASK}. If @var{MASK} is scalar, the number of elements in
8466
@var{VECTOR} shall be equal to or greater than the number of elements in
8467
@var{ARRAY}.
8468
@end multitable
8469
 
8470
@item @emph{Return value}:
8471
The result is an array of rank one and the same type as that of @var{ARRAY}.
8472
If @var{VECTOR} is present, the result size is that of @var{VECTOR}, the
8473
number of @code{TRUE} values in @var{MASK} otherwise.
8474
 
8475
@item @emph{Example}:
8476
Gathering nonzero elements from an array:
8477
@smallexample
8478
PROGRAM test_pack_1
8479
  INTEGER :: m(6)
8480
  m = (/ 1, 0, 0, 0, 5, 0 /)
8481
  WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0)  ! "1 5"
8482
END PROGRAM
8483
@end smallexample
8484
 
8485
Gathering nonzero elements from an array and appending elements from @var{VECTOR}:
8486
@smallexample
8487
PROGRAM test_pack_2
8488
  INTEGER :: m(4)
8489
  m = (/ 1, 0, 0, 2 /)
8490
  WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /))  ! "1 2 3 4"
8491
END PROGRAM
8492
@end smallexample
8493
 
8494
@item @emph{See also}:
8495
@ref{UNPACK}
8496
@end table
8497
 
8498
 
8499
 
8500
@node PERROR
8501
@section @code{PERROR} --- Print system error message
8502
@fnindex PERROR
8503
@cindex system, error handling
8504
 
8505
@table @asis
8506
@item @emph{Description}:
8507
Prints (on the C @code{stderr} stream) a newline-terminated error
8508
message corresponding to the last system error. This is prefixed by
8509
@var{STRING}, a colon and a space. See @code{perror(3)}.
8510
 
8511
@item @emph{Standard}:
8512
GNU extension
8513
 
8514
@item @emph{Class}:
8515
Subroutine
8516
 
8517
@item @emph{Syntax}:
8518
@code{CALL PERROR(STRING)}
8519
 
8520
@item @emph{Arguments}:
8521
@multitable @columnfractions .15 .70
8522
@item @var{STRING} @tab A scalar of type @code{CHARACTER} and of the
8523
default kind.
8524
@end multitable
8525
 
8526
@item @emph{See also}:
8527
@ref{IERRNO}
8528
@end table
8529
 
8530
 
8531
 
8532
@node PRECISION
8533
@section @code{PRECISION} --- Decimal precision of a real kind
8534
@fnindex PRECISION
8535
@cindex model representation, precision
8536
 
8537
@table @asis
8538
@item @emph{Description}:
8539
@code{PRECISION(X)} returns the decimal precision in the model of the
8540
type of @code{X}.
8541
 
8542
@item @emph{Standard}:
8543
Fortran 95 and later
8544
 
8545
@item @emph{Class}:
8546
Inquiry function
8547
 
8548
@item @emph{Syntax}:
8549
@code{RESULT = PRECISION(X)}
8550
 
8551
@item @emph{Arguments}:
8552
@multitable @columnfractions .15 .70
8553
@item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}.
8554
@end multitable
8555
 
8556
@item @emph{Return value}:
8557
The return value is of type @code{INTEGER} and of the default integer
8558
kind.
8559
 
8560
@item @emph{Example}:
8561
@smallexample
8562
program prec_and_range
8563
  real(kind=4) :: x(2)
8564
  complex(kind=8) :: y
8565
 
8566
  print *, precision(x), range(x)
8567
  print *, precision(y), range(y)
8568
end program prec_and_range
8569
@end smallexample
8570
@end table
8571
 
8572
 
8573
 
8574
@node PRESENT
8575
@section @code{PRESENT} --- Determine whether an optional dummy argument is specified
8576
@fnindex PRESENT
8577
 
8578
@table @asis
8579
@item @emph{Description}:
8580
Determines whether an optional dummy argument is present.
8581
 
8582
@item @emph{Standard}:
8583
Fortran 95 and later
8584
 
8585
@item @emph{Class}:
8586
Inquiry function
8587
 
8588
@item @emph{Syntax}:
8589
@code{RESULT = PRESENT(A)}
8590
 
8591
@item @emph{Arguments}:
8592
@multitable @columnfractions .15 .70
8593
@item @var{A} @tab May be of any type and may be a pointer, scalar or array
8594
value, or a dummy procedure. It shall be the name of an optional dummy argument
8595
accessible within the current subroutine or function.
8596
@end multitable
8597
 
8598
@item @emph{Return value}:
8599
Returns either @code{TRUE} if the optional argument @var{A} is present, or
8600
@code{FALSE} otherwise.
8601
 
8602
@item @emph{Example}:
8603
@smallexample
8604
PROGRAM test_present
8605
  WRITE(*,*) f(), f(42)      ! "F T"
8606
CONTAINS
8607
  LOGICAL FUNCTION f(x)
8608
    INTEGER, INTENT(IN), OPTIONAL :: x
8609
    f = PRESENT(x)
8610
  END FUNCTION
8611
END PROGRAM
8612
@end smallexample
8613
@end table
8614
 
8615
 
8616
 
8617
@node PRODUCT
8618
@section @code{PRODUCT} --- Product of array elements
8619
@fnindex PRODUCT
8620
@cindex array, product
8621
@cindex array, multiply elements
8622
@cindex array, conditionally multiply elements
8623
@cindex multiply array elements
8624
 
8625
@table @asis
8626
@item @emph{Description}:
8627
Multiplies the elements of @var{ARRAY} along dimension @var{DIM} if
8628
the corresponding element in @var{MASK} is @code{TRUE}.
8629
 
8630
@item @emph{Standard}:
8631
Fortran 95 and later
8632
 
8633
@item @emph{Class}:
8634
Transformational function
8635
 
8636
@item @emph{Syntax}:
8637
@multitable @columnfractions .80
8638
@item @code{RESULT = PRODUCT(ARRAY[, MASK])}
8639
@item @code{RESULT = PRODUCT(ARRAY, DIM[, MASK])}
8640
@end multitable
8641
 
8642
@item @emph{Arguments}:
8643
@multitable @columnfractions .15 .70
8644
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER},
8645
@code{REAL} or @code{COMPLEX}.
8646
@item @var{DIM}   @tab (Optional) shall be a scalar of type
8647
@code{INTEGER} with a value in the range from 1 to n, where n
8648
equals the rank of @var{ARRAY}.
8649
@item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL}
8650
and either be a scalar or an array of the same shape as @var{ARRAY}.
8651
@end multitable
8652
 
8653
@item @emph{Return value}:
8654
The result is of the same type as @var{ARRAY}.
8655
 
8656
If @var{DIM} is absent, a scalar with the product of all elements in
8657
@var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
8658
the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
8659
dimension @var{DIM} dropped is returned.
8660
 
8661
 
8662
@item @emph{Example}:
8663
@smallexample
8664
PROGRAM test_product
8665
  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
8666
  print *, PRODUCT(x)                    ! all elements, product = 120
8667
  print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15
8668
END PROGRAM
8669
@end smallexample
8670
 
8671
@item @emph{See also}:
8672
@ref{SUM}
8673
@end table
8674
 
8675
 
8676
 
8677
@node RADIX
8678
@section @code{RADIX} --- Base of a model number
8679
@fnindex RADIX
8680
@cindex model representation, base
8681
@cindex model representation, radix
8682
 
8683
@table @asis
8684
@item @emph{Description}:
8685
@code{RADIX(X)} returns the base of the model representing the entity @var{X}.
8686
 
8687
@item @emph{Standard}:
8688
Fortran 95 and later
8689
 
8690
@item @emph{Class}:
8691
Inquiry function
8692
 
8693
@item @emph{Syntax}:
8694
@code{RESULT = RADIX(X)}
8695
 
8696
@item @emph{Arguments}:
8697
@multitable @columnfractions .15 .70
8698
@item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
8699
@end multitable
8700
 
8701
@item @emph{Return value}:
8702
The return value is a scalar of type @code{INTEGER} and of the default
8703
integer kind.
8704
 
8705
@item @emph{Example}:
8706
@smallexample
8707
program test_radix
8708
  print *, "The radix for the default integer kind is", radix(0)
8709
  print *, "The radix for the default real kind is", radix(0.0)
8710
end program test_radix
8711
@end smallexample
8712
 
8713
@end table
8714
 
8715
 
8716
 
8717
@node RAN
8718
@section @code{RAN} --- Real pseudo-random number
8719
@fnindex RAN
8720
@cindex random number generation
8721
 
8722
@table @asis
8723
@item @emph{Description}:
8724
For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is
8725
provided as an alias for @code{RAND}.  See @ref{RAND} for complete
8726
documentation.
8727
 
8728
@item @emph{Standard}:
8729
GNU extension
8730
 
8731
@item @emph{Class}:
8732
Function
8733
 
8734
@item @emph{See also}:
8735
@ref{RAND}, @ref{RANDOM_NUMBER}
8736
@end table
8737
 
8738
 
8739
 
8740
@node RAND
8741
@section @code{RAND} --- Real pseudo-random number
8742
@fnindex RAND
8743
@cindex random number generation
8744
 
8745
@table @asis
8746
@item @emph{Description}:
8747
@code{RAND(FLAG)} returns a pseudo-random number from a uniform
8748
distribution between 0 and 1. If @var{FLAG} is 0, the next number
8749
in the current sequence is returned; if @var{FLAG} is 1, the generator
8750
is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
8751
it is used as a new seed with @code{SRAND}.
8752
 
8753
This intrinsic routine is provided for backwards compatibility with
8754
GNU Fortran 77. It implements a simple modulo generator as provided
8755
by @command{g77}. For new code, one should consider the use of
8756
@ref{RANDOM_NUMBER} as it implements a superior algorithm.
8757
 
8758
@item @emph{Standard}:
8759
GNU extension
8760
 
8761
@item @emph{Class}:
8762
Function
8763
 
8764
@item @emph{Syntax}:
8765
@code{RESULT = RAND(I)}
8766
 
8767
@item @emph{Arguments}:
8768
@multitable @columnfractions .15 .70
8769
@item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
8770
@end multitable
8771
 
8772
@item @emph{Return value}:
8773
The return value is of @code{REAL} type and the default kind.
8774
 
8775
@item @emph{Example}:
8776
@smallexample
8777
program test_rand
8778
  integer,parameter :: seed = 86456
8779
 
8780
  call srand(seed)
8781
  print *, rand(), rand(), rand(), rand()
8782
  print *, rand(seed), rand(), rand(), rand()
8783
end program test_rand
8784
@end smallexample
8785
 
8786
@item @emph{See also}:
8787
@ref{SRAND}, @ref{RANDOM_NUMBER}
8788
 
8789
@end table
8790
 
8791
 
8792
 
8793
@node RANDOM_NUMBER
8794
@section @code{RANDOM_NUMBER} --- Pseudo-random number
8795
@fnindex RANDOM_NUMBER
8796
@cindex random number generation
8797
 
8798
@table @asis
8799
@item @emph{Description}:
8800
Returns a single pseudorandom number or an array of pseudorandom numbers
8801
from the uniform distribution over the range @math{ 0 \leq x < 1}.
8802
 
8803
The runtime-library implements George Marsaglia's KISS (Keep It Simple
8804
Stupid) random number generator (RNG). This RNG combines:
8805
@enumerate
8806
@item The congruential generator @math{x(n) = 69069 \cdot x(n-1) + 1327217885}
8807
with a period of @math{2^{32}},
8808
@item A 3-shift shift-register generator with a period of @math{2^{32} - 1},
8809
@item  Two 16-bit multiply-with-carry generators with a period of
8810
@math{597273182964842497 > 2^{59}}.
8811
@end enumerate
8812
The overall period exceeds @math{2^{123}}.
8813
 
8814
Please note, this RNG is thread safe if used within OpenMP directives,
8815
i.e., its state will be consistent while called from multiple threads.
8816
However, the KISS generator does not create random numbers in parallel
8817
from multiple sources, but in sequence from a single source. If an
8818
OpenMP-enabled application heavily relies on random numbers, one should
8819
consider employing a dedicated parallel random number generator instead.
8820
 
8821
@item @emph{Standard}:
8822
Fortran 95 and later
8823
 
8824
@item @emph{Class}:
8825
Subroutine
8826
 
8827
@item @emph{Syntax}:
8828
@code{RANDOM_NUMBER(HARVEST)}
8829
 
8830
@item @emph{Arguments}:
8831
@multitable @columnfractions .15 .70
8832
@item @var{HARVEST} @tab Shall be a scalar or an array of type @code{REAL}.
8833
@end multitable
8834
 
8835
@item @emph{Example}:
8836
@smallexample
8837
program test_random_number
8838
  REAL :: r(5,5)
8839
  CALL init_random_seed()         ! see example of RANDOM_SEED
8840
  CALL RANDOM_NUMBER(r)
8841
end program
8842
@end smallexample
8843
 
8844
@item @emph{See also}:
8845
@ref{RANDOM_SEED}
8846
@end table
8847
 
8848
 
8849
 
8850
@node RANDOM_SEED
8851
@section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence
8852
@fnindex RANDOM_SEED
8853
@cindex random number generation, seeding
8854
@cindex seeding a random number generator
8855
 
8856
@table @asis
8857
@item @emph{Description}:
8858
Restarts or queries the state of the pseudorandom number generator used by
8859
@code{RANDOM_NUMBER}.
8860
 
8861
If @code{RANDOM_SEED} is called without arguments, it is initialized to
8862
a default state. The example below shows how to initialize the random
8863
seed based on the system's time.
8864
 
8865
@item @emph{Standard}:
8866
Fortran 95 and later
8867
 
8868
@item @emph{Class}:
8869
Subroutine
8870
 
8871
@item @emph{Syntax}:
8872
@code{CALL RANDOM_SEED([SIZE, PUT, GET])}
8873
 
8874
@item @emph{Arguments}:
8875
@multitable @columnfractions .15 .70
8876
@item @var{SIZE} @tab (Optional) Shall be a scalar and of type default
8877
@code{INTEGER}, with @code{INTENT(OUT)}. It specifies the minimum size
8878
of the arrays used with the @var{PUT} and @var{GET} arguments.
8879
@item @var{PUT}  @tab (Optional) Shall be an array of type default
8880
@code{INTEGER} and rank one. It is @code{INTENT(IN)} and the size of
8881
the array must be larger than or equal to the number returned by the
8882
@var{SIZE} argument.
8883
@item @var{GET}  @tab (Optional) Shall be an array of type default
8884
@code{INTEGER} and rank one. It is @code{INTENT(OUT)} and the size
8885
of the array must be larger than or equal to the number returned by
8886
the @var{SIZE} argument.
8887
@end multitable
8888
 
8889
@item @emph{Example}:
8890
@smallexample
8891
SUBROUTINE init_random_seed()
8892
  INTEGER :: i, n, clock
8893
  INTEGER, DIMENSION(:), ALLOCATABLE :: seed
8894
 
8895
  CALL RANDOM_SEED(size = n)
8896
  ALLOCATE(seed(n))
8897
 
8898
  CALL SYSTEM_CLOCK(COUNT=clock)
8899
 
8900
  seed = clock + 37 * (/ (i - 1, i = 1, n) /)
8901
  CALL RANDOM_SEED(PUT = seed)
8902
 
8903
  DEALLOCATE(seed)
8904
END SUBROUTINE
8905
@end smallexample
8906
 
8907
@item @emph{See also}:
8908
@ref{RANDOM_NUMBER}
8909
@end table
8910
 
8911
 
8912
 
8913
@node RANGE
8914
@section @code{RANGE} --- Decimal exponent range
8915
@fnindex RANGE
8916
@cindex model representation, range
8917
 
8918
@table @asis
8919
@item @emph{Description}:
8920
@code{RANGE(X)} returns the decimal exponent range in the model of the
8921
type of @code{X}.
8922
 
8923
@item @emph{Standard}:
8924
Fortran 95 and later
8925
 
8926
@item @emph{Class}:
8927
Inquiry function
8928
 
8929
@item @emph{Syntax}:
8930
@code{RESULT = RANGE(X)}
8931
 
8932
@item @emph{Arguments}:
8933
@multitable @columnfractions .15 .70
8934
@item @var{X} @tab Shall be of type @code{INTEGER}, @code{REAL}
8935
or @code{COMPLEX}.
8936
@end multitable
8937
 
8938
@item @emph{Return value}:
8939
The return value is of type @code{INTEGER} and of the default integer
8940
kind.
8941
 
8942
@item @emph{Example}:
8943
See @code{PRECISION} for an example.
8944
@end table
8945
 
8946
 
8947
 
8948
@node REAL
8949
@section @code{REAL} --- Convert to real type
8950
@fnindex REAL
8951
@fnindex REALPART
8952
@cindex conversion, to real
8953
@cindex complex numbers, real part
8954
 
8955
@table @asis
8956
@item @emph{Description}:
8957
@code{REAL(A [, KIND])} converts its argument @var{A} to a real type.  The
8958
@code{REALPART} function is provided for compatibility with @command{g77},
8959
and its use is strongly discouraged.
8960
 
8961
@item @emph{Standard}:
8962
Fortran 77 and later
8963
 
8964
@item @emph{Class}:
8965
Elemental function
8966
 
8967
@item @emph{Syntax}:
8968
@multitable @columnfractions .80
8969
@item @code{RESULT = REAL(A [, KIND])}
8970
@item @code{RESULT = REALPART(Z)}
8971
@end multitable
8972
 
8973
@item @emph{Arguments}:
8974
@multitable @columnfractions .15 .70
8975
@item @var{A}    @tab Shall be @code{INTEGER}, @code{REAL}, or
8976
@code{COMPLEX}.
8977
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
8978
expression indicating the kind parameter of the result.
8979
@end multitable
8980
 
8981
@item @emph{Return value}:
8982
These functions return a @code{REAL} variable or array under
8983
the following rules:
8984
 
8985
@table @asis
8986
@item (A)
8987
@code{REAL(A)} is converted to a default real type if @var{A} is an
8988
integer or real variable.
8989
@item (B)
8990
@code{REAL(A)} is converted to a real type with the kind type parameter
8991
of @var{A} if @var{A} is a complex variable.
8992
@item (C)
8993
@code{REAL(A, KIND)} is converted to a real type with kind type
8994
parameter @var{KIND} if @var{A} is a complex, integer, or real
8995
variable.
8996
@end table
8997
 
8998
@item @emph{Example}:
8999
@smallexample
9000
program test_real
9001
  complex :: x = (1.0, 2.0)
9002
  print *, real(x), real(x,8), realpart(x)
9003
end program test_real
9004
@end smallexample
9005
 
9006
@item @emph{See also}:
9007
@ref{DBLE}, @ref{DFLOAT}, @ref{FLOAT}
9008
 
9009
@end table
9010
 
9011
 
9012
 
9013
@node RENAME
9014
@section @code{RENAME} --- Rename a file
9015
@fnindex RENAME
9016
@cindex file system, rename file
9017
 
9018
@table @asis
9019
@item @emph{Description}:
9020
Renames a file from file @var{PATH1} to @var{PATH2}. A null
9021
character (@code{CHAR(0)}) can be used to mark the end of the names in
9022
@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
9023
names are ignored.  If the @var{STATUS} argument is supplied, it
9024
contains 0 on success or a nonzero error code upon return; see
9025
@code{rename(2)}.
9026
 
9027
This intrinsic is provided in both subroutine and function forms;
9028
however, only one form can be used in any given program unit.
9029
 
9030
@item @emph{Standard}:
9031
GNU extension
9032
 
9033
@item @emph{Class}:
9034
Subroutine, function
9035
 
9036
@item @emph{Syntax}:
9037
@multitable @columnfractions .80
9038
@item @code{CALL RENAME(PATH1, PATH2 [, STATUS])}
9039
@item @code{STATUS = RENAME(PATH1, PATH2)}
9040
@end multitable
9041
 
9042
@item @emph{Arguments}:
9043
@multitable @columnfractions .15 .70
9044
@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
9045
@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
9046
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
9047
@end multitable
9048
 
9049
@item @emph{See also}:
9050
@ref{LINK}
9051
 
9052
@end table
9053
 
9054
 
9055
 
9056
@node REPEAT
9057
@section @code{REPEAT} --- Repeated string concatenation
9058
@fnindex REPEAT
9059
@cindex string, repeat
9060
@cindex string, concatenate
9061
 
9062
@table @asis
9063
@item @emph{Description}:
9064
Concatenates @var{NCOPIES} copies of a string.
9065
 
9066
@item @emph{Standard}:
9067
Fortran 95 and later
9068
 
9069
@item @emph{Class}:
9070
Transformational function
9071
 
9072
@item @emph{Syntax}:
9073
@code{RESULT = REPEAT(STRING, NCOPIES)}
9074
 
9075
@item @emph{Arguments}:
9076
@multitable @columnfractions .15 .70
9077
@item @var{STRING}  @tab Shall be scalar and of type @code{CHARACTER}.
9078
@item @var{NCOPIES} @tab Shall be scalar and of type @code{INTEGER}.
9079
@end multitable
9080
 
9081
@item @emph{Return value}:
9082
A new scalar of type @code{CHARACTER} built up from @var{NCOPIES} copies
9083
of @var{STRING}.
9084
 
9085
@item @emph{Example}:
9086
@smallexample
9087
program test_repeat
9088
  write(*,*) repeat("x", 5)   ! "xxxxx"
9089
end program
9090
@end smallexample
9091
@end table
9092
 
9093
 
9094
 
9095
@node RESHAPE
9096
@section @code{RESHAPE} --- Function to reshape an array
9097
@fnindex RESHAPE
9098
@cindex array, change dimensions
9099
@cindex array, transmogrify
9100
 
9101
@table @asis
9102
@item @emph{Description}:
9103
Reshapes @var{SOURCE} to correspond to @var{SHAPE}. If necessary,
9104
the new array may be padded with elements from @var{PAD} or permuted
9105
as defined by @var{ORDER}.
9106
 
9107
@item @emph{Standard}:
9108
Fortran 95 and later
9109
 
9110
@item @emph{Class}:
9111
Transformational function
9112
 
9113
@item @emph{Syntax}:
9114
@code{RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])}
9115
 
9116
@item @emph{Arguments}:
9117
@multitable @columnfractions .15 .70
9118
@item @var{SOURCE} @tab Shall be an array of any type.
9119
@item @var{SHAPE}  @tab Shall be of type @code{INTEGER} and an
9120
array of rank one. Its values must be positive or zero.
9121
@item @var{PAD}    @tab (Optional) shall be an array of the same
9122
type as @var{SOURCE}.
9123
@item @var{ORDER}  @tab (Optional) shall be of type @code{INTEGER}
9124
and an array of the same shape as @var{SHAPE}. Its values shall
9125
be a permutation of the numbers from 1 to n, where n is the size of
9126
@var{SHAPE}. If @var{ORDER} is absent, the natural ordering shall
9127
be assumed.
9128
@end multitable
9129
 
9130
@item @emph{Return value}:
9131
The result is an array of shape @var{SHAPE} with the same type as
9132
@var{SOURCE}.
9133
 
9134
@item @emph{Example}:
9135
@smallexample
9136
PROGRAM test_reshape
9137
  INTEGER, DIMENSION(4) :: x
9138
  WRITE(*,*) SHAPE(x)                       ! prints "4"
9139
  WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/)))    ! prints "2 2"
9140
END PROGRAM
9141
@end smallexample
9142
 
9143
@item @emph{See also}:
9144
@ref{SHAPE}
9145
@end table
9146
 
9147
 
9148
 
9149
@node RRSPACING
9150
@section @code{RRSPACING} --- Reciprocal of the relative spacing
9151
@fnindex RRSPACING
9152
@cindex real number, relative spacing
9153
@cindex floating point, relative spacing
9154
 
9155
 
9156
@table @asis
9157
@item @emph{Description}:
9158
@code{RRSPACING(X)} returns the  reciprocal of the relative spacing of
9159
model numbers near @var{X}.
9160
 
9161
@item @emph{Standard}:
9162
Fortran 95 and later
9163
 
9164
@item @emph{Class}:
9165
Elemental function
9166
 
9167
@item @emph{Syntax}:
9168
@code{RESULT = RRSPACING(X)}
9169
 
9170
@item @emph{Arguments}:
9171
@multitable @columnfractions .15 .70
9172
@item @var{X} @tab Shall be of type @code{REAL}.
9173
@end multitable
9174
 
9175
@item @emph{Return value}:
9176
The return value is of the same type and kind as @var{X}.
9177
The value returned is equal to
9178
@code{ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)}.
9179
 
9180
@item @emph{See also}:
9181
@ref{SPACING}
9182
@end table
9183
 
9184
 
9185
 
9186
@node RSHIFT
9187
@section @code{RSHIFT} --- Right shift bits
9188
@fnindex RSHIFT
9189
@cindex bits, shift right
9190
 
9191
@table @asis
9192
@item @emph{Description}:
9193
@code{RSHIFT} returns a value corresponding to @var{I} with all of the
9194
bits shifted right by @var{SHIFT} places.  If the absolute value of
9195
@var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
9196
Bits shifted out from the left end are lost; zeros are shifted in from
9197
the opposite end.
9198
 
9199
This function has been superseded by the @code{ISHFT} intrinsic, which
9200
is standard in Fortran 95 and later.
9201
 
9202
@item @emph{Standard}:
9203
GNU extension
9204
 
9205
@item @emph{Class}:
9206
Elemental function
9207
 
9208
@item @emph{Syntax}:
9209
@code{RESULT = RSHIFT(I, SHIFT)}
9210
 
9211
@item @emph{Arguments}:
9212
@multitable @columnfractions .15 .70
9213
@item @var{I} @tab The type shall be @code{INTEGER}.
9214
@item @var{SHIFT} @tab The type shall be @code{INTEGER}.
9215
@end multitable
9216
 
9217
@item @emph{Return value}:
9218
The return value is of type @code{INTEGER} and of the same kind as
9219
@var{I}.
9220
 
9221
@item @emph{See also}:
9222
@ref{ISHFT}, @ref{ISHFTC}, @ref{LSHIFT}
9223
 
9224
@end table
9225
 
9226
 
9227
 
9228
@node SCALE
9229
@section @code{SCALE} --- Scale a real value
9230
@fnindex SCALE
9231
@cindex real number, scale
9232
@cindex floating point, scale
9233
 
9234
@table @asis
9235
@item @emph{Description}:
9236
@code{SCALE(X,I)} returns @code{X * RADIX(X)**I}.
9237
 
9238
@item @emph{Standard}:
9239
Fortran 95 and later
9240
 
9241
@item @emph{Class}:
9242
Elemental function
9243
 
9244
@item @emph{Syntax}:
9245
@code{RESULT = SCALE(X, I)}
9246
 
9247
@item @emph{Arguments}:
9248
@multitable @columnfractions .15 .70
9249
@item @var{X} @tab The type of the argument shall be a @code{REAL}.
9250
@item @var{I} @tab The type of the argument shall be a @code{INTEGER}.
9251
@end multitable
9252
 
9253
@item @emph{Return value}:
9254
The return value is of the same type and kind as @var{X}.
9255
Its value is @code{X * RADIX(X)**I}.
9256
 
9257
@item @emph{Example}:
9258
@smallexample
9259
program test_scale
9260
  real :: x = 178.1387e-4
9261
  integer :: i = 5
9262
  print *, scale(x,i), x*radix(x)**i
9263
end program test_scale
9264
@end smallexample
9265
 
9266
@end table
9267
 
9268
 
9269
 
9270
@node SCAN
9271
@section @code{SCAN} --- Scan a string for the presence of a set of characters
9272
@fnindex SCAN
9273
@cindex string, find subset
9274
 
9275
@table @asis
9276
@item @emph{Description}:
9277
Scans a @var{STRING} for any of the characters in a @var{SET}
9278
of characters.
9279
 
9280
If @var{BACK} is either absent or equals @code{FALSE}, this function
9281
returns the position of the leftmost character of @var{STRING} that is
9282
in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position
9283
is returned. If no character of @var{SET} is found in @var{STRING}, the
9284
result is zero.
9285
 
9286
@item @emph{Standard}:
9287
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
9288
 
9289
@item @emph{Class}:
9290
Elemental function
9291
 
9292
@item @emph{Syntax}:
9293
@code{RESULT = SCAN(STRING, SET[, BACK [, KIND]])}
9294
 
9295
@item @emph{Arguments}:
9296
@multitable @columnfractions .15 .70
9297
@item @var{STRING} @tab Shall be of type @code{CHARACTER}.
9298
@item @var{SET}    @tab Shall be of type @code{CHARACTER}.
9299
@item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
9300
@item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
9301
expression indicating the kind parameter of the result.
9302
@end multitable
9303
 
9304
@item @emph{Return value}:
9305
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
9306
@var{KIND} is absent, the return value is of default integer kind.
9307
 
9308
@item @emph{Example}:
9309
@smallexample
9310
PROGRAM test_scan
9311
  WRITE(*,*) SCAN("FORTRAN", "AO")          ! 2, found 'O'
9312
  WRITE(*,*) SCAN("FORTRAN", "AO", .TRUE.)  ! 6, found 'A'
9313
  WRITE(*,*) SCAN("FORTRAN", "C++")         ! 0, found none
9314
END PROGRAM
9315
@end smallexample
9316
 
9317
@item @emph{See also}:
9318
@ref{INDEX intrinsic}, @ref{VERIFY}
9319
@end table
9320
 
9321
 
9322
 
9323
@node SECNDS
9324
@section @code{SECNDS} --- Time function
9325
@fnindex SECNDS
9326
@cindex time, elapsed
9327
@cindex elapsed time
9328
 
9329
@table @asis
9330
@item @emph{Description}:
9331
@code{SECNDS(X)} gets the time in seconds from the real-time system clock.
9332
@var{X} is a reference time, also in seconds. If this is zero, the time in
9333
seconds from midnight is returned. This function is non-standard and its
9334
use is discouraged.
9335
 
9336
@item @emph{Standard}:
9337
GNU extension
9338
 
9339
@item @emph{Class}:
9340
Function
9341
 
9342
@item @emph{Syntax}:
9343
@code{RESULT = SECNDS (X)}
9344
 
9345
@item @emph{Arguments}:
9346
@multitable @columnfractions .15 .70
9347
@item @var{T}     @tab Shall be of type @code{REAL(4)}.
9348
@item @var{X}     @tab Shall be of type @code{REAL(4)}.
9349
@end multitable
9350
 
9351
@item @emph{Return value}:
9352
None
9353
 
9354
@item @emph{Example}:
9355
@smallexample
9356
program test_secnds
9357
    integer :: i
9358
    real(4) :: t1, t2
9359
    print *, secnds (0.0)   ! seconds since midnight
9360
    t1 = secnds (0.0)       ! reference time
9361
    do i = 1, 10000000      ! do something
9362
    end do
9363
    t2 = secnds (t1)        ! elapsed time
9364
    print *, "Something took ", t2, " seconds."
9365
end program test_secnds
9366
@end smallexample
9367
@end table
9368
 
9369
 
9370
 
9371
@node SECOND
9372
@section @code{SECOND} --- CPU time function
9373
@fnindex SECOND
9374
@cindex time, elapsed
9375
@cindex elapsed time
9376
 
9377
@table @asis
9378
@item @emph{Description}:
9379
Returns a @code{REAL(4)} value representing the elapsed CPU time in
9380
seconds.  This provides the same functionality as the standard
9381
@code{CPU_TIME} intrinsic, and is only included for backwards
9382
compatibility.
9383
 
9384
This intrinsic is provided in both subroutine and function forms;
9385
however, only one form can be used in any given program unit.
9386
 
9387
@item @emph{Standard}:
9388
GNU extension
9389
 
9390
@item @emph{Class}:
9391
Subroutine, function
9392
 
9393
@item @emph{Syntax}:
9394
@multitable @columnfractions .80
9395
@item @code{CALL SECOND(TIME)}
9396
@item @code{TIME = SECOND()}
9397
@end multitable
9398
 
9399
@item @emph{Arguments}:
9400
@multitable @columnfractions .15 .70
9401
@item @var{TIME}  @tab Shall be of type @code{REAL(4)}.
9402
@end multitable
9403
 
9404
@item @emph{Return value}:
9405
In either syntax, @var{TIME} is set to the process's current runtime in
9406
seconds.
9407
 
9408
@item @emph{See also}:
9409
@ref{CPU_TIME}
9410
 
9411
@end table
9412
 
9413
 
9414
 
9415
@node SELECTED_CHAR_KIND
9416
@section @code{SELECTED_CHAR_KIND} --- Choose character kind
9417
@fnindex SELECTED_CHAR_KIND
9418
@cindex character kind
9419
@cindex kind, character
9420
 
9421
@table @asis
9422
@item @emph{Description}:
9423
 
9424
@code{SELECTED_CHAR_KIND(NAME)} returns the kind value for the character
9425
set named @var{NAME}, if a character set with such a name is supported,
9426
or @math{-1} otherwise. Currently, supported character sets include
9427
``ASCII'' and ``DEFAULT'', which are equivalent.
9428
 
9429
@item @emph{Standard}:
9430
Fortran 2003 and later
9431
 
9432
@item @emph{Class}:
9433
Transformational function
9434
 
9435
@item @emph{Syntax}:
9436
@code{RESULT = SELECTED_CHAR_KIND(NAME)}
9437
 
9438
@item @emph{Arguments}:
9439
@multitable @columnfractions .15 .70
9440
@item @var{NAME} @tab Shall be a scalar and of the default character type.
9441
@end multitable
9442
 
9443
@item @emph{Example}:
9444
@smallexample
9445
program ascii_kind
9446
  integer,parameter :: ascii = selected_char_kind("ascii")
9447
  character(kind=ascii, len=26) :: s
9448
 
9449
  s = ascii_"abcdefghijklmnopqrstuvwxyz"
9450
  print *, s
9451
end program ascii_kind
9452
@end smallexample
9453
@end table
9454
 
9455
 
9456
 
9457
@node SELECTED_INT_KIND
9458
@section @code{SELECTED_INT_KIND} --- Choose integer kind
9459
@fnindex SELECTED_INT_KIND
9460
@cindex integer kind
9461
@cindex kind, integer
9462
 
9463
@table @asis
9464
@item @emph{Description}:
9465
@code{SELECTED_INT_KIND(R)} return the kind value of the smallest integer
9466
type that can represent all values ranging from @math{-10^R} (exclusive)
9467
to @math{10^R} (exclusive). If there is no integer kind that accommodates
9468
this range, @code{SELECTED_INT_KIND} returns @math{-1}.
9469
 
9470
@item @emph{Standard}:
9471
Fortran 95 and later
9472
 
9473
@item @emph{Class}:
9474
Transformational function
9475
 
9476
@item @emph{Syntax}:
9477
@code{RESULT = SELECTED_INT_KIND(R)}
9478
 
9479
@item @emph{Arguments}:
9480
@multitable @columnfractions .15 .70
9481
@item @var{R} @tab Shall be a scalar and of type @code{INTEGER}.
9482
@end multitable
9483
 
9484
@item @emph{Example}:
9485
@smallexample
9486
program large_integers
9487
  integer,parameter :: k5 = selected_int_kind(5)
9488
  integer,parameter :: k15 = selected_int_kind(15)
9489
  integer(kind=k5) :: i5
9490
  integer(kind=k15) :: i15
9491
 
9492
  print *, huge(i5), huge(i15)
9493
 
9494
  ! The following inequalities are always true
9495
  print *, huge(i5) >= 10_k5**5-1
9496
  print *, huge(i15) >= 10_k15**15-1
9497
end program large_integers
9498
@end smallexample
9499
@end table
9500
 
9501
 
9502
 
9503
@node SELECTED_REAL_KIND
9504
@section @code{SELECTED_REAL_KIND} --- Choose real kind
9505
@fnindex SELECTED_REAL_KIND
9506
@cindex real kind
9507
@cindex kind, real
9508
 
9509
@table @asis
9510
@item @emph{Description}:
9511
@code{SELECTED_REAL_KIND(P,R)} returns the kind value of a real data type
9512
with decimal precision of at least @code{P} digits and exponent
9513
range greater at least @code{R}.
9514
 
9515
@item @emph{Standard}:
9516
Fortran 95 and later
9517
 
9518
@item @emph{Class}:
9519
Transformational function
9520
 
9521
@item @emph{Syntax}:
9522
@code{RESULT = SELECTED_REAL_KIND([P, R])}
9523
 
9524
@item @emph{Arguments}:
9525
@multitable @columnfractions .15 .70
9526
@item @var{P} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
9527
@item @var{R} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
9528
@end multitable
9529
At least one argument shall be present.
9530
 
9531
@item @emph{Return value}:
9532
 
9533
@code{SELECTED_REAL_KIND} returns the value of the kind type parameter of
9534
a real data type with decimal precision of at least @code{P} digits and a
9535
decimal exponent range of at least @code{R}. If more than one real data
9536
type meet the criteria, the kind of the data type with the smallest
9537
decimal precision is returned. If no real data type matches the criteria,
9538
the result is
9539
@table @asis
9540
@item -1 if the processor does not support a real data type with a
9541
precision greater than or equal to @code{P}
9542
@item -2 if the processor does not support a real type with an exponent
9543
range greater than or equal to @code{R}
9544
@item -3 if neither is supported.
9545
@end table
9546
 
9547
@item @emph{Example}:
9548
@smallexample
9549
program real_kinds
9550
  integer,parameter :: p6 = selected_real_kind(6)
9551
  integer,parameter :: p10r100 = selected_real_kind(10,100)
9552
  integer,parameter :: r400 = selected_real_kind(r=400)
9553
  real(kind=p6) :: x
9554
  real(kind=p10r100) :: y
9555
  real(kind=r400) :: z
9556
 
9557
  print *, precision(x), range(x)
9558
  print *, precision(y), range(y)
9559
  print *, precision(z), range(z)
9560
end program real_kinds
9561
@end smallexample
9562
@end table
9563
 
9564
 
9565
 
9566
@node SET_EXPONENT
9567
@section @code{SET_EXPONENT} --- Set the exponent of the model
9568
@fnindex SET_EXPONENT
9569
@cindex real number, set exponent
9570
@cindex floating point, set exponent
9571
 
9572
@table @asis
9573
@item @emph{Description}:
9574
@code{SET_EXPONENT(X, I)} returns the real number whose fractional part
9575
is that that of @var{X} and whose exponent part is @var{I}.
9576
 
9577
@item @emph{Standard}:
9578
Fortran 95 and later
9579
 
9580
@item @emph{Class}:
9581
Elemental function
9582
 
9583
@item @emph{Syntax}:
9584
@code{RESULT = SET_EXPONENT(X, I)}
9585
 
9586
@item @emph{Arguments}:
9587
@multitable @columnfractions .15 .70
9588
@item @var{X} @tab Shall be of type @code{REAL}.
9589
@item @var{I} @tab Shall be of type @code{INTEGER}.
9590
@end multitable
9591
 
9592
@item @emph{Return value}:
9593
The return value is of the same type and kind as @var{X}.
9594
The real number whose fractional part
9595
is that that of @var{X} and whose exponent part if @var{I} is returned;
9596
it is @code{FRACTION(X) * RADIX(X)**I}.
9597
 
9598
@item @emph{Example}:
9599
@smallexample
9600
PROGRAM test_setexp
9601
  REAL :: x = 178.1387e-4
9602
  INTEGER :: i = 17
9603
  PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i
9604
END PROGRAM
9605
@end smallexample
9606
 
9607
@end table
9608
 
9609
 
9610
 
9611
@node SHAPE
9612
@section @code{SHAPE} --- Determine the shape of an array
9613
@fnindex SHAPE
9614
@cindex array, shape
9615
 
9616
@table @asis
9617
@item @emph{Description}:
9618
Determines the shape of an array.
9619
 
9620
@item @emph{Standard}:
9621
Fortran 95 and later
9622
 
9623
@item @emph{Class}:
9624
Inquiry function
9625
 
9626
@item @emph{Syntax}:
9627
@code{RESULT = SHAPE(SOURCE)}
9628
 
9629
@item @emph{Arguments}:
9630
@multitable @columnfractions .15 .70
9631
@item @var{SOURCE} @tab Shall be an array or scalar of any type.
9632
If @var{SOURCE} is a pointer it must be associated and allocatable
9633
arrays must be allocated.
9634
@end multitable
9635
 
9636
@item @emph{Return value}:
9637
An @code{INTEGER} array of rank one with as many elements as @var{SOURCE}
9638
has dimensions. The elements of the resulting array correspond to the extend
9639
of @var{SOURCE} along the respective dimensions. If @var{SOURCE} is a scalar,
9640
the result is the rank one array of size zero.
9641
 
9642
@item @emph{Example}:
9643
@smallexample
9644
PROGRAM test_shape
9645
  INTEGER, DIMENSION(-1:1, -1:2) :: A
9646
  WRITE(*,*) SHAPE(A)             ! (/ 3, 4 /)
9647
  WRITE(*,*) SIZE(SHAPE(42))      ! (/ /)
9648
END PROGRAM
9649
@end smallexample
9650
 
9651
@item @emph{See also}:
9652
@ref{RESHAPE}, @ref{SIZE}
9653
@end table
9654
 
9655
 
9656
 
9657
@node SIGN
9658
@section @code{SIGN} --- Sign copying function
9659
@fnindex SIGN
9660
@fnindex ISIGN
9661
@fnindex DSIGN
9662
@cindex sign copying
9663
 
9664
@table @asis
9665
@item @emph{Description}:
9666
@code{SIGN(A,B)} returns the value of @var{A} with the sign of @var{B}.
9667
 
9668
@item @emph{Standard}:
9669
Fortran 77 and later
9670
 
9671
@item @emph{Class}:
9672
Elemental function
9673
 
9674
@item @emph{Syntax}:
9675
@code{RESULT = SIGN(A, B)}
9676
 
9677
@item @emph{Arguments}:
9678
@multitable @columnfractions .15 .70
9679
@item @var{A} @tab Shall be of type @code{INTEGER} or @code{REAL}
9680
@item @var{B} @tab Shall be of the same type and kind as @var{A}
9681
@end multitable
9682
 
9683
@item @emph{Return value}:
9684
The kind of the return value is that of @var{A} and @var{B}.
9685
If @math{B\ge 0} then the result is @code{ABS(A)}, else
9686
it is @code{-ABS(A)}.
9687
 
9688
@item @emph{Example}:
9689
@smallexample
9690
program test_sign
9691
  print *, sign(-12,1)
9692
  print *, sign(-12,0)
9693
  print *, sign(-12,-1)
9694
 
9695
  print *, sign(-12.,1.)
9696
  print *, sign(-12.,0.)
9697
  print *, sign(-12.,-1.)
9698
end program test_sign
9699
@end smallexample
9700
 
9701
@item @emph{Specific names}:
9702
@multitable @columnfractions .20 .20 .20 .25
9703
@item Name              @tab Arguments      @tab Return type    @tab Standard
9704
@item @code{ISIGN(A,P)} @tab @code{INTEGER(4)} @tab @code{INTEGER(4)} @tab f95, gnu
9705
@item @code{DSIGN(A,P)} @tab @code{REAL(8)} @tab @code{REAL(8)} @tab f95, gnu
9706
@end multitable
9707
@end table
9708
 
9709
 
9710
 
9711
@node SIGNAL
9712
@section @code{SIGNAL} --- Signal handling subroutine (or function)
9713
@fnindex SIGNAL
9714
@cindex system, signal handling
9715
 
9716
@table @asis
9717
@item @emph{Description}:
9718
@code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine
9719
@var{HANDLER} to be executed with a single integer argument when signal
9720
@var{NUMBER} occurs.  If @var{HANDLER} is an integer, it can be used to
9721
turn off handling of signal @var{NUMBER} or revert to its default
9722
action.  See @code{signal(2)}.
9723
 
9724
If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument
9725
is supplied, it is set to the value returned by @code{signal(2)}.
9726
 
9727
@item @emph{Standard}:
9728
GNU extension
9729
 
9730
@item @emph{Class}:
9731
Subroutine, function
9732
 
9733
@item @emph{Syntax}:
9734
@multitable @columnfractions .80
9735
@item @code{CALL SIGNAL(NUMBER, HANDLER [, STATUS])}
9736
@item @code{STATUS = SIGNAL(NUMBER, HANDLER)}
9737
@end multitable
9738
 
9739
@item @emph{Arguments}:
9740
@multitable @columnfractions .15 .70
9741
@item @var{NUMBER} @tab Shall be a scalar integer, with @code{INTENT(IN)}
9742
@item @var{HANDLER}@tab Signal handler (@code{INTEGER FUNCTION} or
9743
@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar.
9744
@code{INTEGER}. It is @code{INTENT(IN)}.
9745
@item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
9746
integer. It has @code{INTENT(OUT)}.
9747
@end multitable
9748
@c TODO: What should the interface of the handler be?  Does it take arguments?
9749
 
9750
@item @emph{Return value}:
9751
The @code{SIGNAL} function returns the value returned by @code{signal(2)}.
9752
 
9753
@item @emph{Example}:
9754
@smallexample
9755
program test_signal
9756
  intrinsic signal
9757
  external handler_print
9758
 
9759
  call signal (12, handler_print)
9760
  call signal (10, 1)
9761
 
9762
  call sleep (30)
9763
end program test_signal
9764
@end smallexample
9765
@end table
9766
 
9767
 
9768
 
9769
@node SIN
9770
@section @code{SIN} --- Sine function
9771
@fnindex SIN
9772
@fnindex DSIN
9773
@fnindex CSIN
9774
@fnindex ZSIN
9775
@fnindex CDSIN
9776
@cindex trigonometric function, sine
9777
@cindex sine
9778
 
9779
@table @asis
9780
@item @emph{Description}:
9781
@code{SIN(X)} computes the sine of @var{X}.
9782
 
9783
@item @emph{Standard}:
9784
Fortran 77 and later
9785
 
9786
@item @emph{Class}:
9787
Elemental function
9788
 
9789
@item @emph{Syntax}:
9790
@code{RESULT = SIN(X)}
9791
 
9792
@item @emph{Arguments}:
9793
@multitable @columnfractions .15 .70
9794
@item @var{X} @tab The type shall be @code{REAL} or
9795
@code{COMPLEX}.
9796
@end multitable
9797
 
9798
@item @emph{Return value}:
9799
The return value has same type and kind as @var{X}.
9800
 
9801
@item @emph{Example}:
9802
@smallexample
9803
program test_sin
9804
  real :: x = 0.0
9805
  x = sin(x)
9806
end program test_sin
9807
@end smallexample
9808
 
9809
@item @emph{Specific names}:
9810
@multitable @columnfractions .20 .20 .20 .25
9811
@item Name            @tab Argument          @tab Return type       @tab Standard
9812
@item @code{DSIN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab f95, gnu
9813
@item @code{CSIN(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab f95, gnu
9814
@item @code{ZSIN(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
9815
@item @code{CDSIN(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
9816
@end multitable
9817
 
9818
@item @emph{See also}:
9819
@ref{ASIN}
9820
@end table
9821
 
9822
 
9823
 
9824
@node SINH
9825
@section @code{SINH} --- Hyperbolic sine function
9826
@fnindex SINH
9827
@fnindex DSINH
9828
@cindex hyperbolic sine
9829
@cindex hyperbolic function, sine
9830
@cindex sine, hyperbolic
9831
 
9832
@table @asis
9833
@item @emph{Description}:
9834
@code{SINH(X)} computes the hyperbolic sine of @var{X}.
9835
 
9836
@item @emph{Standard}:
9837
Fortran 95 and later, for a complex argument Fortran 2008 or later
9838
 
9839
@item @emph{Class}:
9840
Elemental function
9841
 
9842
@item @emph{Syntax}:
9843
@code{RESULT = SINH(X)}
9844
 
9845
@item @emph{Arguments}:
9846
@multitable @columnfractions .15 .70
9847
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
9848
@end multitable
9849
 
9850
@item @emph{Return value}:
9851
The return value has same type and kind as @var{X}.
9852
 
9853
@item @emph{Example}:
9854
@smallexample
9855
program test_sinh
9856
  real(8) :: x = - 1.0_8
9857
  x = sinh(x)
9858
end program test_sinh
9859
@end smallexample
9860
 
9861
@item @emph{Specific names}:
9862
@multitable @columnfractions .20 .20 .20 .25
9863
@item Name            @tab Argument          @tab Return type       @tab Standard
9864
@item @code{DSINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
9865
@end multitable
9866
 
9867
@item @emph{See also}:
9868
@ref{ASINH}
9869
@end table
9870
 
9871
 
9872
 
9873
@node SIZE
9874
@section @code{SIZE} --- Determine the size of an array
9875
@fnindex SIZE
9876
@cindex array, size
9877
@cindex array, number of elements
9878
@cindex array, count elements
9879
 
9880
@table @asis
9881
@item @emph{Description}:
9882
Determine the extent of @var{ARRAY} along a specified dimension @var{DIM},
9883
or the total number of elements in @var{ARRAY} if @var{DIM} is absent.
9884
 
9885
@item @emph{Standard}:
9886
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
9887
 
9888
@item @emph{Class}:
9889
Inquiry function
9890
 
9891
@item @emph{Syntax}:
9892
@code{RESULT = SIZE(ARRAY[, DIM [, KIND]])}
9893
 
9894
@item @emph{Arguments}:
9895
@multitable @columnfractions .15 .70
9896
@item @var{ARRAY} @tab Shall be an array of any type. If @var{ARRAY} is
9897
a pointer it must be associated and allocatable arrays must be allocated.
9898
@item @var{DIM}   @tab (Optional) shall be a scalar of type @code{INTEGER}
9899
and its value shall be in the range from 1 to n, where n equals the rank
9900
of @var{ARRAY}.
9901
@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
9902
expression indicating the kind parameter of the result.
9903
@end multitable
9904
 
9905
@item @emph{Return value}:
9906
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
9907
@var{KIND} is absent, the return value is of default integer kind.
9908
 
9909
@item @emph{Example}:
9910
@smallexample
9911
PROGRAM test_size
9912
  WRITE(*,*) SIZE((/ 1, 2 /))    ! 2
9913
END PROGRAM
9914
@end smallexample
9915
 
9916
@item @emph{See also}:
9917
@ref{SHAPE}, @ref{RESHAPE}
9918
@end table
9919
 
9920
 
9921
@node SIZEOF
9922
@section @code{SIZEOF} --- Size in bytes of an expression
9923
@fnindex SIZEOF
9924
@cindex expression size
9925
@cindex size of an expression
9926
 
9927
@table @asis
9928
@item @emph{Description}:
9929
@code{SIZEOF(X)} calculates the number of bytes of storage the
9930
expression @code{X} occupies.
9931
 
9932
@item @emph{Standard}:
9933
GNU extension
9934
 
9935
@item @emph{Class}:
9936
Intrinsic function
9937
 
9938
@item @emph{Syntax}:
9939
@code{N = SIZEOF(X)}
9940
 
9941
@item @emph{Arguments}:
9942
@multitable @columnfractions .15 .70
9943
@item @var{X} @tab The argument shall be of any type, rank or shape.
9944
@end multitable
9945
 
9946
@item @emph{Return value}:
9947
The return value is of type integer and of the system-dependent kind
9948
@var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
9949
number of bytes occupied by the argument.  If the argument has the
9950
@code{POINTER} attribute, the number of bytes of the storage area pointed
9951
to is returned.  If the argument is of a derived type with @code{POINTER}
9952
or @code{ALLOCATABLE} components, the return value doesn't account for
9953
the sizes of the data pointed to by these components.
9954
 
9955
@item @emph{Example}:
9956
@smallexample
9957
   integer :: i
9958
   real :: r, s(5)
9959
   print *, (sizeof(s)/sizeof(r) == 5)
9960
   end
9961
@end smallexample
9962
The example will print @code{.TRUE.} unless you are using a platform
9963
where default @code{REAL} variables are unusually padded.
9964
 
9965
@item @emph{See also}:
9966
@ref{C_SIZEOF}
9967
@end table
9968
 
9969
 
9970
@node SLEEP
9971
@section @code{SLEEP} --- Sleep for the specified number of seconds
9972
@fnindex SLEEP
9973
@cindex delayed execution
9974
 
9975
@table @asis
9976
@item @emph{Description}:
9977
Calling this subroutine causes the process to pause for @var{SECONDS} seconds.
9978
 
9979
@item @emph{Standard}:
9980
GNU extension
9981
 
9982
@item @emph{Class}:
9983
Subroutine
9984
 
9985
@item @emph{Syntax}:
9986
@code{CALL SLEEP(SECONDS)}
9987
 
9988
@item @emph{Arguments}:
9989
@multitable @columnfractions .15 .70
9990
@item @var{SECONDS} @tab The type shall be of default @code{INTEGER}.
9991
@end multitable
9992
 
9993
@item @emph{Example}:
9994
@smallexample
9995
program test_sleep
9996
  call sleep(5)
9997
end
9998
@end smallexample
9999
@end table
10000
 
10001
 
10002
 
10003
@node SNGL
10004
@section @code{SNGL} --- Convert double precision real to default real
10005
@fnindex SNGL
10006
@cindex conversion, to real
10007
 
10008
@table @asis
10009
@item @emph{Description}:
10010
@code{SNGL(A)} converts the double precision real @var{A}
10011
to a default real value. This is an archaic form of @code{REAL}
10012
that is specific to one type for @var{A}.
10013
 
10014
@item @emph{Standard}:
10015
Fortran 77 and later
10016
 
10017
@item @emph{Class}:
10018
Elemental function
10019
 
10020
@item @emph{Syntax}:
10021
@code{RESULT = SNGL(A)}
10022
 
10023
@item @emph{Arguments}:
10024
@multitable @columnfractions .15 .70
10025
@item @var{A} @tab The type shall be a double precision @code{REAL}.
10026
@end multitable
10027
 
10028
@item @emph{Return value}:
10029
The return value is of type default @code{REAL}.
10030
 
10031
@item @emph{See also}:
10032
@ref{DBLE}
10033
@end table
10034
 
10035
 
10036
 
10037
@node SPACING
10038
@section @code{SPACING} --- Smallest distance between two numbers of a given type
10039
@fnindex SPACING
10040
@cindex real number, relative spacing
10041
@cindex floating point, relative spacing
10042
 
10043
@table @asis
10044
@item @emph{Description}:
10045
Determines the distance between the argument @var{X} and the nearest
10046
adjacent number of the same type.
10047
 
10048
@item @emph{Standard}:
10049
Fortran 95 and later
10050
 
10051
@item @emph{Class}:
10052
Elemental function
10053
 
10054
@item @emph{Syntax}:
10055
@code{RESULT = SPACING(X)}
10056
 
10057
@item @emph{Arguments}:
10058
@multitable @columnfractions .15 .70
10059
@item @var{X} @tab Shall be of type @code{REAL}.
10060
@end multitable
10061
 
10062
@item @emph{Return value}:
10063
The result is of the same type as the input argument @var{X}.
10064
 
10065
@item @emph{Example}:
10066
@smallexample
10067
PROGRAM test_spacing
10068
  INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)
10069
  INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)
10070
 
10071
  WRITE(*,*) spacing(1.0_SGL)      ! "1.1920929E-07"          on i686
10072
  WRITE(*,*) spacing(1.0_DBL)      ! "2.220446049250313E-016" on i686
10073
END PROGRAM
10074
@end smallexample
10075
 
10076
@item @emph{See also}:
10077
@ref{RRSPACING}
10078
@end table
10079
 
10080
 
10081
 
10082
@node SPREAD
10083
@section @code{SPREAD} --- Add a dimension to an array
10084
@fnindex SPREAD
10085
@cindex array, increase dimension
10086
@cindex array, duplicate elements
10087
@cindex array, duplicate dimensions
10088
 
10089
@table @asis
10090
@item @emph{Description}:
10091
Replicates a @var{SOURCE} array @var{NCOPIES} times along a specified
10092
dimension @var{DIM}.
10093
 
10094
@item @emph{Standard}:
10095
Fortran 95 and later
10096
 
10097
@item @emph{Class}:
10098
Transformational function
10099
 
10100
@item @emph{Syntax}:
10101
@code{RESULT = SPREAD(SOURCE, DIM, NCOPIES)}
10102
 
10103
@item @emph{Arguments}:
10104
@multitable @columnfractions .15 .70
10105
@item @var{SOURCE}  @tab Shall be a scalar or an array of any type and
10106
a rank less than seven.
10107
@item @var{DIM}     @tab Shall be a scalar of type @code{INTEGER} with a
10108
value in the range from 1 to n+1, where n equals the rank of @var{SOURCE}.
10109
@item @var{NCOPIES} @tab Shall be a scalar of type @code{INTEGER}.
10110
@end multitable
10111
 
10112
@item @emph{Return value}:
10113
The result is an array of the same type as @var{SOURCE} and has rank n+1
10114
where n equals the rank of @var{SOURCE}.
10115
 
10116
@item @emph{Example}:
10117
@smallexample
10118
PROGRAM test_spread
10119
  INTEGER :: a = 1, b(2) = (/ 1, 2 /)
10120
  WRITE(*,*) SPREAD(A, 1, 2)            ! "1 1"
10121
  WRITE(*,*) SPREAD(B, 1, 2)            ! "1 1 2 2"
10122
END PROGRAM
10123
@end smallexample
10124
 
10125
@item @emph{See also}:
10126
@ref{UNPACK}
10127
@end table
10128
 
10129
 
10130
 
10131
@node SQRT
10132
@section @code{SQRT} --- Square-root function
10133
@fnindex SQRT
10134
@fnindex DSQRT
10135
@fnindex CSQRT
10136
@fnindex ZSQRT
10137
@fnindex CDSQRT
10138
@cindex root
10139
@cindex square-root
10140
 
10141
@table @asis
10142
@item @emph{Description}:
10143
@code{SQRT(X)} computes the square root of @var{X}.
10144
 
10145
@item @emph{Standard}:
10146
Fortran 77 and later
10147
 
10148
@item @emph{Class}:
10149
Elemental function
10150
 
10151
@item @emph{Syntax}:
10152
@code{RESULT = SQRT(X)}
10153
 
10154
@item @emph{Arguments}:
10155
@multitable @columnfractions .15 .70
10156
@item @var{X} @tab The type shall be @code{REAL} or
10157
@code{COMPLEX}.
10158
@end multitable
10159
 
10160
@item @emph{Return value}:
10161
The return value is of type @code{REAL} or @code{COMPLEX}.
10162
The kind type parameter is the same as @var{X}.
10163
 
10164
@item @emph{Example}:
10165
@smallexample
10166
program test_sqrt
10167
  real(8) :: x = 2.0_8
10168
  complex :: z = (1.0, 2.0)
10169
  x = sqrt(x)
10170
  z = sqrt(z)
10171
end program test_sqrt
10172
@end smallexample
10173
 
10174
@item @emph{Specific names}:
10175
@multitable @columnfractions .20 .20 .20 .25
10176
@item Name             @tab Argument             @tab Return type          @tab Standard
10177
@item @code{DSQRT(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}       @tab Fortran 95 and later
10178
@item @code{CSQRT(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab Fortran 95 and later
10179
@item @code{ZSQRT(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
10180
@item @code{CDSQRT(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
10181
@end multitable
10182
@end table
10183
 
10184
 
10185
 
10186
@node SRAND
10187
@section @code{SRAND} --- Reinitialize the random number generator
10188
@fnindex SRAND
10189
@cindex random number generation, seeding
10190
@cindex seeding a random number generator
10191
 
10192
@table @asis
10193
@item @emph{Description}:
10194
@code{SRAND} reinitializes the pseudo-random number generator
10195
called by @code{RAND} and @code{IRAND}. The new seed used by the
10196
generator is specified by the required argument @var{SEED}.
10197
 
10198
@item @emph{Standard}:
10199
GNU extension
10200
 
10201
@item @emph{Class}:
10202
Subroutine
10203
 
10204
@item @emph{Syntax}:
10205
@code{CALL SRAND(SEED)}
10206
 
10207
@item @emph{Arguments}:
10208
@multitable @columnfractions .15 .70
10209
@item @var{SEED} @tab Shall be a scalar @code{INTEGER(kind=4)}.
10210
@end multitable
10211
 
10212
@item @emph{Return value}:
10213
Does not return anything.
10214
 
10215
@item @emph{Example}:
10216
See @code{RAND} and @code{IRAND} for examples.
10217
 
10218
@item @emph{Notes}:
10219
The Fortran 2003 standard specifies the intrinsic @code{RANDOM_SEED} to
10220
initialize the pseudo-random numbers generator and @code{RANDOM_NUMBER}
10221
to generate pseudo-random numbers. Please note that in
10222
GNU Fortran, these two sets of intrinsics (@code{RAND},
10223
@code{IRAND} and @code{SRAND} on the one hand, @code{RANDOM_NUMBER} and
10224
@code{RANDOM_SEED} on the other hand) access two independent
10225
pseudo-random number generators.
10226
 
10227
@item @emph{See also}:
10228
@ref{RAND}, @ref{RANDOM_SEED}, @ref{RANDOM_NUMBER}
10229
 
10230
@end table
10231
 
10232
 
10233
 
10234
@node STAT
10235
@section @code{STAT} --- Get file status
10236
@fnindex STAT
10237
@cindex file system, file status
10238
 
10239
@table @asis
10240
@item @emph{Description}:
10241
This function returns information about a file. No permissions are required on
10242
the file itself, but execute (search) permission is required on all of the
10243
directories in path that lead to the file.
10244
 
10245
The elements that are obtained and stored in the array @code{VALUES}:
10246
@multitable @columnfractions .15 .70
10247
@item @code{VALUES(1)}   @tab  Device ID
10248
@item @code{VALUES(2)}   @tab  Inode number
10249
@item @code{VALUES(3)}   @tab  File mode
10250
@item @code{VALUES(4)}   @tab  Number of links
10251
@item @code{VALUES(5)}   @tab  Owner's uid
10252
@item @code{VALUES(6)}   @tab  Owner's gid
10253
@item @code{VALUES(7)}   @tab  ID of device containing directory entry for file (0 if not available)
10254
@item @code{VALUES(8)}   @tab  File size (bytes)
10255
@item @code{VALUES(9)}   @tab  Last access time
10256
@item @code{VALUES(10)}  @tab  Last modification time
10257
@item @code{VALUES(11)}  @tab  Last file status change time
10258
@item @code{VALUES(12)}  @tab  Preferred I/O block size (-1 if not available)
10259
@item @code{VALUES(13)}  @tab  Number of blocks allocated (-1 if not available)
10260
@end multitable
10261
 
10262
Not all these elements are relevant on all systems.
10263
If an element is not relevant, it is returned as 0.
10264
 
10265
This intrinsic is provided in both subroutine and function forms; however,
10266
only one form can be used in any given program unit.
10267
 
10268
@item @emph{Standard}:
10269
GNU extension
10270
 
10271
@item @emph{Class}:
10272
Subroutine, function
10273
 
10274
@item @emph{Syntax}:
10275
@code{CALL STAT(NAME, VALUES [, STATUS])}
10276
 
10277
@item @emph{Arguments}:
10278
@multitable @columnfractions .15 .70
10279
@item @var{NAME}   @tab The type shall be @code{CHARACTER}, of the
10280
default kind and a valid path within the file system.
10281
@item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
10282
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0
10283
on success and a system specific error code otherwise.
10284
@end multitable
10285
 
10286
@item @emph{Example}:
10287
@smallexample
10288
PROGRAM test_stat
10289
  INTEGER, DIMENSION(13) :: buff
10290
  INTEGER :: status
10291
 
10292
  CALL STAT("/etc/passwd", buff, status)
10293
 
10294
  IF (status == 0) THEN
10295
    WRITE (*, FMT="('Device ID:',               T30, I19)") buff(1)
10296
    WRITE (*, FMT="('Inode number:',            T30, I19)") buff(2)
10297
    WRITE (*, FMT="('File mode (octal):',       T30, O19)") buff(3)
10298
    WRITE (*, FMT="('Number of links:',         T30, I19)") buff(4)
10299
    WRITE (*, FMT="('Owner''s uid:',            T30, I19)") buff(5)
10300
    WRITE (*, FMT="('Owner''s gid:',            T30, I19)") buff(6)
10301
    WRITE (*, FMT="('Device where located:',    T30, I19)") buff(7)
10302
    WRITE (*, FMT="('File size:',               T30, I19)") buff(8)
10303
    WRITE (*, FMT="('Last access time:',        T30, A19)") CTIME(buff(9))
10304
    WRITE (*, FMT="('Last modification time',   T30, A19)") CTIME(buff(10))
10305
    WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11))
10306
    WRITE (*, FMT="('Preferred block size:',    T30, I19)") buff(12)
10307
    WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13)
10308
  END IF
10309
END PROGRAM
10310
@end smallexample
10311
 
10312
@item @emph{See also}:
10313
To stat an open file: @ref{FSTAT}, to stat a link: @ref{LSTAT}
10314
@end table
10315
 
10316
 
10317
 
10318
@node SUM
10319
@section @code{SUM} --- Sum of array elements
10320
@fnindex SUM
10321
@cindex array, sum
10322
@cindex array, add elements
10323
@cindex array, conditionally add elements
10324
@cindex sum array elements
10325
 
10326
@table @asis
10327
@item @emph{Description}:
10328
Adds the elements of @var{ARRAY} along dimension @var{DIM} if
10329
the corresponding element in @var{MASK} is @code{TRUE}.
10330
 
10331
@item @emph{Standard}:
10332
Fortran 95 and later
10333
 
10334
@item @emph{Class}:
10335
Transformational function
10336
 
10337
@item @emph{Syntax}:
10338
@multitable @columnfractions .80
10339
@item @code{RESULT = SUM(ARRAY[, MASK])}
10340
@item @code{RESULT = SUM(ARRAY, DIM[, MASK])}
10341
@end multitable
10342
 
10343
@item @emph{Arguments}:
10344
@multitable @columnfractions .15 .70
10345
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER},
10346
@code{REAL} or @code{COMPLEX}.
10347
@item @var{DIM}   @tab (Optional) shall be a scalar of type
10348
@code{INTEGER} with a value in the range from 1 to n, where n
10349
equals the rank of @var{ARRAY}.
10350
@item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL}
10351
and either be a scalar or an array of the same shape as @var{ARRAY}.
10352
@end multitable
10353
 
10354
@item @emph{Return value}:
10355
The result is of the same type as @var{ARRAY}.
10356
 
10357
If @var{DIM} is absent, a scalar with the sum of all elements in @var{ARRAY}
10358
is returned. Otherwise, an array of rank n-1, where n equals the rank of
10359
@var{ARRAY},and a shape similar to that of @var{ARRAY} with dimension @var{DIM}
10360
dropped is returned.
10361
 
10362
@item @emph{Example}:
10363
@smallexample
10364
PROGRAM test_sum
10365
  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
10366
  print *, SUM(x)                        ! all elements, sum = 15
10367
  print *, SUM(x, MASK=MOD(x, 2)==1)     ! odd elements, sum = 9
10368
END PROGRAM
10369
@end smallexample
10370
 
10371
@item @emph{See also}:
10372
@ref{PRODUCT}
10373
@end table
10374
 
10375
 
10376
 
10377
@node SYMLNK
10378
@section @code{SYMLNK} --- Create a symbolic link
10379
@fnindex SYMLNK
10380
@cindex file system, create link
10381
@cindex file system, soft link
10382
 
10383
@table @asis
10384
@item @emph{Description}:
10385
Makes a symbolic link from file @var{PATH1} to @var{PATH2}. A null
10386
character (@code{CHAR(0)}) can be used to mark the end of the names in
10387
@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
10388
names are ignored.  If the @var{STATUS} argument is supplied, it
10389
contains 0 on success or a nonzero error code upon return; see
10390
@code{symlink(2)}.  If the system does not supply @code{symlink(2)},
10391
@code{ENOSYS} is returned.
10392
 
10393
This intrinsic is provided in both subroutine and function forms;
10394
however, only one form can be used in any given program unit.
10395
 
10396
@item @emph{Standard}:
10397
GNU extension
10398
 
10399
@item @emph{Class}:
10400
Subroutine, function
10401
 
10402
@item @emph{Syntax}:
10403
@multitable @columnfractions .80
10404
@item @code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
10405
@item @code{STATUS = SYMLNK(PATH1, PATH2)}
10406
@end multitable
10407
 
10408
@item @emph{Arguments}:
10409
@multitable @columnfractions .15 .70
10410
@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
10411
@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
10412
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
10413
@end multitable
10414
 
10415
@item @emph{See also}:
10416
@ref{LINK}, @ref{UNLINK}
10417
 
10418
@end table
10419
 
10420
 
10421
 
10422
@node SYSTEM
10423
@section @code{SYSTEM} --- Execute a shell command
10424
@fnindex SYSTEM
10425
@cindex system, system call
10426
 
10427
@table @asis
10428
@item @emph{Description}:
10429
Passes the command @var{COMMAND} to a shell (see @code{system(3)}). If
10430
argument @var{STATUS} is present, it contains the value returned by
10431
@code{system(3)}, which is presumably 0 if the shell command succeeded.
10432
Note that which shell is used to invoke the command is system-dependent
10433
and environment-dependent.
10434
 
10435
This intrinsic is provided in both subroutine and function forms;
10436
however, only one form can be used in any given program unit.
10437
 
10438
@item @emph{Standard}:
10439
GNU extension
10440
 
10441
@item @emph{Class}:
10442
Subroutine, function
10443
 
10444
@item @emph{Syntax}:
10445
@multitable @columnfractions .80
10446
@item @code{CALL SYSTEM(COMMAND [, STATUS])}
10447
@item @code{STATUS = SYSTEM(COMMAND)}
10448
@end multitable
10449
 
10450
@item @emph{Arguments}:
10451
@multitable @columnfractions .15 .70
10452
@item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type.
10453
@item @var{STATUS}  @tab (Optional) Shall be of default @code{INTEGER} type.
10454
@end multitable
10455
 
10456
@item @emph{See also}:
10457
@end table
10458
 
10459
 
10460
 
10461
@node SYSTEM_CLOCK
10462
@section @code{SYSTEM_CLOCK} --- Time function
10463
@fnindex SYSTEM_CLOCK
10464
@cindex time, clock ticks
10465
@cindex clock ticks
10466
 
10467
@table @asis
10468
@item @emph{Description}:
10469
Determines the @var{COUNT} of milliseconds of wall clock time since
10470
the Epoch (00:00:00 UTC, January 1, 1970) modulo @var{COUNT_MAX},
10471
@var{COUNT_RATE} determines the number of clock ticks per second.
10472
@var{COUNT_RATE} and @var{COUNT_MAX} are constant and specific to
10473
@command{gfortran}.
10474
 
10475
If there is no clock, @var{COUNT} is set to @code{-HUGE(COUNT)}, and
10476
@var{COUNT_RATE} and @var{COUNT_MAX} are set to zero
10477
 
10478
@item @emph{Standard}:
10479
Fortran 95 and later
10480
 
10481
@item @emph{Class}:
10482
Subroutine
10483
 
10484
@item @emph{Syntax}:
10485
@code{CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])}
10486
 
10487
@item @emph{Arguments}:
10488
@item @emph{Arguments}:
10489
@multitable @columnfractions .15 .70
10490
@item @var{COUNT}      @tab (Optional) shall be a scalar of type default
10491
@code{INTEGER} with @code{INTENT(OUT)}.
10492
@item @var{COUNT_RATE} @tab (Optional) shall be a scalar of type default
10493
@code{INTEGER} with @code{INTENT(OUT)}.
10494
@item @var{COUNT_MAX}  @tab (Optional) shall be a scalar of type default
10495
@code{INTEGER} with @code{INTENT(OUT)}.
10496
@end multitable
10497
 
10498
@item @emph{Example}:
10499
@smallexample
10500
PROGRAM test_system_clock
10501
  INTEGER :: count, count_rate, count_max
10502
  CALL SYSTEM_CLOCK(count, count_rate, count_max)
10503
  WRITE(*,*) count, count_rate, count_max
10504
END PROGRAM
10505
@end smallexample
10506
 
10507
@item @emph{See also}:
10508
@ref{DATE_AND_TIME}, @ref{CPU_TIME}
10509
@end table
10510
 
10511
 
10512
 
10513
@node TAN
10514
@section @code{TAN} --- Tangent function
10515
@fnindex TAN
10516
@fnindex DTAN
10517
@cindex trigonometric function, tangent
10518
@cindex tangent
10519
 
10520
@table @asis
10521
@item @emph{Description}:
10522
@code{TAN(X)} computes the tangent of @var{X}.
10523
 
10524
@item @emph{Standard}:
10525
Fortran 77 and later, for a complex argument Fortran 2008 or later
10526
 
10527
@item @emph{Class}:
10528
Elemental function
10529
 
10530
@item @emph{Syntax}:
10531
@code{RESULT = TAN(X)}
10532
 
10533
@item @emph{Arguments}:
10534
@multitable @columnfractions .15 .70
10535
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
10536
@end multitable
10537
 
10538
@item @emph{Return value}:
10539
The return value has same type and kind as @var{X}.
10540
 
10541
@item @emph{Example}:
10542
@smallexample
10543
program test_tan
10544
  real(8) :: x = 0.165_8
10545
  x = tan(x)
10546
end program test_tan
10547
@end smallexample
10548
 
10549
@item @emph{Specific names}:
10550
@multitable @columnfractions .20 .20 .20 .25
10551
@item Name            @tab Argument          @tab Return type       @tab Standard
10552
@item @code{DTAN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
10553
@end multitable
10554
 
10555
@item @emph{See also}:
10556
@ref{ATAN}
10557
@end table
10558
 
10559
 
10560
 
10561
@node TANH
10562
@section @code{TANH} --- Hyperbolic tangent function
10563
@fnindex TANH
10564
@fnindex DTANH
10565
@cindex hyperbolic tangent
10566
@cindex hyperbolic function, tangent
10567
@cindex tangent, hyperbolic
10568
 
10569
@table @asis
10570
@item @emph{Description}:
10571
@code{TANH(X)} computes the hyperbolic tangent of @var{X}.
10572
 
10573
@item @emph{Standard}:
10574
Fortran 77 and later, for a complex argument Fortran 2008 or later
10575
 
10576
@item @emph{Class}:
10577
Elemental function
10578
 
10579
@item @emph{Syntax}:
10580
@code{X = TANH(X)}
10581
 
10582
@item @emph{Arguments}:
10583
@multitable @columnfractions .15 .70
10584
@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
10585
@end multitable
10586
 
10587
@item @emph{Return value}:
10588
The return value has same type and kind as @var{X}. If @var{X} is
10589
complex, the imaginary part of the result is in radians. If @var{X}
10590
is @code{REAL}, the return value lies in the range
10591
@math{ - 1 \leq tanh(x) \leq 1 }.
10592
 
10593
@item @emph{Example}:
10594
@smallexample
10595
program test_tanh
10596
  real(8) :: x = 2.1_8
10597
  x = tanh(x)
10598
end program test_tanh
10599
@end smallexample
10600
 
10601
@item @emph{Specific names}:
10602
@multitable @columnfractions .20 .20 .20 .25
10603
@item Name            @tab Argument          @tab Return type       @tab Standard
10604
@item @code{DTANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
10605
@end multitable
10606
 
10607
@item @emph{See also}:
10608
@ref{ATANH}
10609
@end table
10610
 
10611
 
10612
 
10613
@node TIME
10614
@section @code{TIME} --- Time function
10615
@fnindex TIME
10616
@cindex time, current
10617
@cindex current time
10618
 
10619
@table @asis
10620
@item @emph{Description}:
10621
Returns the current time encoded as an integer (in the manner of the
10622
UNIX function @code{time(3)}). This value is suitable for passing to
10623
@code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}.
10624
 
10625
This intrinsic is not fully portable, such as to systems with 32-bit
10626
@code{INTEGER} types but supporting times wider than 32 bits. Therefore,
10627
the values returned by this intrinsic might be, or become, negative, or
10628
numerically less than previous values, during a single run of the
10629
compiled program.
10630
 
10631
See @ref{TIME8}, for information on a similar intrinsic that might be
10632
portable to more GNU Fortran implementations, though to fewer Fortran
10633
compilers.
10634
 
10635
@item @emph{Standard}:
10636
GNU extension
10637
 
10638
@item @emph{Class}:
10639
Function
10640
 
10641
@item @emph{Syntax}:
10642
@code{RESULT = TIME()}
10643
 
10644
@item @emph{Return value}:
10645
The return value is a scalar of type @code{INTEGER(4)}.
10646
 
10647
@item @emph{See also}:
10648
@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
10649
 
10650
@end table
10651
 
10652
 
10653
 
10654
@node TIME8
10655
@section @code{TIME8} --- Time function (64-bit)
10656
@fnindex TIME8
10657
@cindex time, current
10658
@cindex current time
10659
 
10660
@table @asis
10661
@item @emph{Description}:
10662
Returns the current time encoded as an integer (in the manner of the
10663
UNIX function @code{time(3)}). This value is suitable for passing to
10664
@code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}.
10665
 
10666
@emph{Warning:} this intrinsic does not increase the range of the timing
10667
values over that returned by @code{time(3)}. On a system with a 32-bit
10668
@code{time(3)}, @code{TIME8()} will return a 32-bit value, even though
10669
it is converted to a 64-bit @code{INTEGER(8)} value. That means
10670
overflows of the 32-bit value can still occur. Therefore, the values
10671
returned by this intrinsic might be or become negative or numerically
10672
less than previous values during a single run of the compiled program.
10673
 
10674
@item @emph{Standard}:
10675
GNU extension
10676
 
10677
@item @emph{Class}:
10678
Function
10679
 
10680
@item @emph{Syntax}:
10681
@code{RESULT = TIME8()}
10682
 
10683
@item @emph{Return value}:
10684
The return value is a scalar of type @code{INTEGER(8)}.
10685
 
10686
@item @emph{See also}:
10687
@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK8}, @ref{TIME}
10688
 
10689
@end table
10690
 
10691
 
10692
 
10693
@node TINY
10694
@section @code{TINY} --- Smallest positive number of a real kind
10695
@fnindex TINY
10696
@cindex limits, smallest number
10697
@cindex model representation, smallest number
10698
 
10699
@table @asis
10700
@item @emph{Description}:
10701
@code{TINY(X)} returns the smallest positive (non zero) number
10702
in the model of the type of @code{X}.
10703
 
10704
@item @emph{Standard}:
10705
Fortran 95 and later
10706
 
10707
@item @emph{Class}:
10708
Inquiry function
10709
 
10710
@item @emph{Syntax}:
10711
@code{RESULT = TINY(X)}
10712
 
10713
@item @emph{Arguments}:
10714
@multitable @columnfractions .15 .70
10715
@item @var{X} @tab Shall be of type @code{REAL}.
10716
@end multitable
10717
 
10718
@item @emph{Return value}:
10719
The return value is of the same type and kind as @var{X}
10720
 
10721
@item @emph{Example}:
10722
See @code{HUGE} for an example.
10723
@end table
10724
 
10725
 
10726
 
10727
@node TRAILZ
10728
@section @code{TRAILZ} --- Number of trailing zero bits of an integer
10729
@fnindex TRAILZ
10730
@cindex zero bits
10731
 
10732
@table @asis
10733
@item @emph{Description}:
10734
@code{TRAILZ} returns the number of trailing zero bits of an integer.
10735
 
10736
@item @emph{Standard}:
10737
Fortran 2008 and later
10738
 
10739
@item @emph{Class}:
10740
Elemental function
10741
 
10742
@item @emph{Syntax}:
10743
@code{RESULT = TRAILZ(I)}
10744
 
10745
@item @emph{Arguments}:
10746
@multitable @columnfractions .15 .70
10747
@item @var{I} @tab Shall be of type @code{INTEGER}.
10748
@end multitable
10749
 
10750
@item @emph{Return value}:
10751
The type of the return value is the default @code{INTEGER}.
10752
If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
10753
 
10754
@item @emph{Example}:
10755
@smallexample
10756
PROGRAM test_trailz
10757
  WRITE (*,*) TRAILZ(8)  ! prints 3
10758
END PROGRAM
10759
@end smallexample
10760
 
10761
@item @emph{See also}:
10762
@ref{BIT_SIZE}, @ref{LEADZ}
10763
@end table
10764
 
10765
 
10766
 
10767
@node TRANSFER
10768
@section @code{TRANSFER} --- Transfer bit patterns
10769
@fnindex TRANSFER
10770
@cindex bits, move
10771
@cindex type cast
10772
 
10773
@table @asis
10774
@item @emph{Description}:
10775
Interprets the bitwise representation of @var{SOURCE} in memory as if it
10776
is the representation of a variable or array of the same type and type
10777
parameters as @var{MOLD}.
10778
 
10779
This is approximately equivalent to the C concept of @emph{casting} one
10780
type to another.
10781
 
10782
@item @emph{Standard}:
10783
Fortran 95 and later
10784
 
10785
@item @emph{Class}:
10786
Transformational function
10787
 
10788
@item @emph{Syntax}:
10789
@code{RESULT = TRANSFER(SOURCE, MOLD[, SIZE])}
10790
 
10791
@item @emph{Arguments}:
10792
@multitable @columnfractions .15 .70
10793
@item @var{SOURCE} @tab Shall be a scalar or an array of any type.
10794
@item @var{MOLD}   @tab Shall be a scalar or an array of any type.
10795
@item @var{SIZE}   @tab (Optional) shall be a scalar of type
10796
@code{INTEGER}.
10797
@end multitable
10798
 
10799
@item @emph{Return value}:
10800
The result has the same type as @var{MOLD}, with the bit level
10801
representation of @var{SOURCE}.  If @var{SIZE} is present, the result is
10802
a one-dimensional array of length @var{SIZE}.  If @var{SIZE} is absent
10803
but @var{MOLD} is an array (of any size or shape), the result is a one-
10804
dimensional array of the minimum length needed to contain the entirety
10805
of the bitwise representation of @var{SOURCE}.   If @var{SIZE} is absent
10806
and @var{MOLD} is a scalar, the result is a scalar.
10807
 
10808
If the bitwise representation of the result is longer than that of
10809
@var{SOURCE}, then the leading bits of the result correspond to those of
10810
@var{SOURCE} and any trailing bits are filled arbitrarily.
10811
 
10812
When the resulting bit representation does not correspond to a valid
10813
representation of a variable of the same type as @var{MOLD}, the results
10814
are undefined, and subsequent operations on the result cannot be
10815
guaranteed to produce sensible behavior.  For example, it is possible to
10816
create @code{LOGICAL} variables for which @code{@var{VAR}} and
10817
@code{.NOT.@var{VAR}} both appear to be true.
10818
 
10819
@item @emph{Example}:
10820
@smallexample
10821
PROGRAM test_transfer
10822
  integer :: x = 2143289344
10823
  print *, transfer(x, 1.0)    ! prints "NaN" on i686
10824
END PROGRAM
10825
@end smallexample
10826
@end table
10827
 
10828
 
10829
 
10830
@node TRANSPOSE
10831
@section @code{TRANSPOSE} --- Transpose an array of rank two
10832
@fnindex TRANSPOSE
10833
@cindex array, transpose
10834
@cindex matrix, transpose
10835
@cindex transpose
10836
 
10837
@table @asis
10838
@item @emph{Description}:
10839
Transpose an array of rank two. Element (i, j) of the result has the value
10840
@code{MATRIX(j, i)}, for all i, j.
10841
 
10842
@item @emph{Standard}:
10843
Fortran 95 and later
10844
 
10845
@item @emph{Class}:
10846
Transformational function
10847
 
10848
@item @emph{Syntax}:
10849
@code{RESULT = TRANSPOSE(MATRIX)}
10850
 
10851
@item @emph{Arguments}:
10852
@multitable @columnfractions .15 .70
10853
@item @var{MATRIX} @tab Shall be an array of any type and have a rank of two.
10854
@end multitable
10855
 
10856
@item @emph{Return value}:
10857
The result has the same type as @var{MATRIX}, and has shape
10858
@code{(/ m, n /)} if @var{MATRIX} has shape @code{(/ n, m /)}.
10859
@end table
10860
 
10861
 
10862
 
10863
@node TRIM
10864
@section @code{TRIM} --- Remove trailing blank characters of a string
10865
@fnindex TRIM
10866
@cindex string, remove trailing whitespace
10867
 
10868
@table @asis
10869
@item @emph{Description}:
10870
Removes trailing blank characters of a string.
10871
 
10872
@item @emph{Standard}:
10873
Fortran 95 and later
10874
 
10875
@item @emph{Class}:
10876
Transformational function
10877
 
10878
@item @emph{Syntax}:
10879
@code{RESULT = TRIM(STRING)}
10880
 
10881
@item @emph{Arguments}:
10882
@multitable @columnfractions .15 .70
10883
@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}.
10884
@end multitable
10885
 
10886
@item @emph{Return value}:
10887
A scalar of type @code{CHARACTER} which length is that of @var{STRING}
10888
less the number of trailing blanks.
10889
 
10890
@item @emph{Example}:
10891
@smallexample
10892
PROGRAM test_trim
10893
  CHARACTER(len=10), PARAMETER :: s = "GFORTRAN  "
10894
  WRITE(*,*) LEN(s), LEN(TRIM(s))  ! "10 8", with/without trailing blanks
10895
END PROGRAM
10896
@end smallexample
10897
 
10898
@item @emph{See also}:
10899
@ref{ADJUSTL}, @ref{ADJUSTR}
10900
@end table
10901
 
10902
 
10903
 
10904
@node TTYNAM
10905
@section @code{TTYNAM} --- Get the name of a terminal device.
10906
@fnindex TTYNAM
10907
@cindex system, terminal
10908
 
10909
@table @asis
10910
@item @emph{Description}:
10911
Get the name of a terminal device. For more information,
10912
see @code{ttyname(3)}.
10913
 
10914
This intrinsic is provided in both subroutine and function forms;
10915
however, only one form can be used in any given program unit.
10916
 
10917
@item @emph{Standard}:
10918
GNU extension
10919
 
10920
@item @emph{Class}:
10921
Subroutine, function
10922
 
10923
@item @emph{Syntax}:
10924
@multitable @columnfractions .80
10925
@item @code{CALL TTYNAM(UNIT, NAME)}
10926
@item @code{NAME = TTYNAM(UNIT)}
10927
@end multitable
10928
 
10929
@item @emph{Arguments}:
10930
@multitable @columnfractions .15 .70
10931
@item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
10932
@item @var{NAME} @tab Shall be of type @code{CHARACTER}.
10933
@end multitable
10934
 
10935
@item @emph{Example}:
10936
@smallexample
10937
PROGRAM test_ttynam
10938
  INTEGER :: unit
10939
  DO unit = 1, 10
10940
    IF (isatty(unit=unit)) write(*,*) ttynam(unit)
10941
  END DO
10942
END PROGRAM
10943
@end smallexample
10944
 
10945
@item @emph{See also}:
10946
@ref{ISATTY}
10947
@end table
10948
 
10949
 
10950
 
10951
@node UBOUND
10952
@section @code{UBOUND} --- Upper dimension bounds of an array
10953
@fnindex UBOUND
10954
@cindex array, upper bound
10955
 
10956
@table @asis
10957
@item @emph{Description}:
10958
Returns the upper bounds of an array, or a single upper bound
10959
along the @var{DIM} dimension.
10960
@item @emph{Standard}:
10961
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
10962
 
10963
@item @emph{Class}:
10964
Inquiry function
10965
 
10966
@item @emph{Syntax}:
10967
@code{RESULT = UBOUND(ARRAY [, DIM [, KIND]])}
10968
 
10969
@item @emph{Arguments}:
10970
@multitable @columnfractions .15 .70
10971
@item @var{ARRAY} @tab Shall be an array, of any type.
10972
@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
10973
@item @var{KIND}@tab (Optional) An @code{INTEGER} initialization
10974
expression indicating the kind parameter of the result.
10975
@end multitable
10976
 
10977
@item @emph{Return value}:
10978
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
10979
@var{KIND} is absent, the return value is of default integer kind.
10980
If @var{DIM} is absent, the result is an array of the upper bounds of
10981
@var{ARRAY}.  If @var{DIM} is present, the result is a scalar
10982
corresponding to the upper bound of the array along that dimension.  If
10983
@var{ARRAY} is an expression rather than a whole array or array
10984
structure component, or if it has a zero extent along the relevant
10985
dimension, the upper bound is taken to be the number of elements along
10986
the relevant dimension.
10987
 
10988
@item @emph{See also}:
10989
@ref{LBOUND}
10990
@end table
10991
 
10992
 
10993
 
10994
@node UMASK
10995
@section @code{UMASK} --- Set the file creation mask
10996
@fnindex UMASK
10997
@cindex file system, file creation mask
10998
 
10999
@table @asis
11000
@item @emph{Description}:
11001
Sets the file creation mask to @var{MASK}. If called as a function, it
11002
returns the old value. If called as a subroutine and argument @var{OLD}
11003
if it is supplied, it is set to the old value. See @code{umask(2)}.
11004
 
11005
@item @emph{Standard}:
11006
GNU extension
11007
 
11008
@item @emph{Class}:
11009
Subroutine, function
11010
 
11011
@item @emph{Syntax}:
11012
@code{CALL UMASK(MASK [, OLD])}
11013
@code{OLD = UMASK(MASK)}
11014
 
11015
@item @emph{Arguments}:
11016
@multitable @columnfractions .15 .70
11017
@item @var{MASK} @tab Shall be a scalar of type @code{INTEGER}.
11018
@item @var{OLD} @tab (Optional) Shall be a scalar of type
11019
@code{INTEGER}.
11020
@end multitable
11021
 
11022
@end table
11023
 
11024
 
11025
 
11026
@node UNLINK
11027
@section @code{UNLINK} --- Remove a file from the file system
11028
@fnindex UNLINK
11029
@cindex file system, remove file
11030
 
11031
@table @asis
11032
@item @emph{Description}:
11033
Unlinks the file @var{PATH}. A null character (@code{CHAR(0)}) can be
11034
used to mark the end of the name in @var{PATH}; otherwise, trailing
11035
blanks in the file name are ignored.  If the @var{STATUS} argument is
11036
supplied, it contains 0 on success or a nonzero error code upon return;
11037
see @code{unlink(2)}.
11038
 
11039
This intrinsic is provided in both subroutine and function forms;
11040
however, only one form can be used in any given program unit.
11041
 
11042
@item @emph{Standard}:
11043
GNU extension
11044
 
11045
@item @emph{Class}:
11046
Subroutine, function
11047
 
11048
@item @emph{Syntax}:
11049
@multitable @columnfractions .80
11050
@item @code{CALL UNLINK(PATH [, STATUS])}
11051
@item @code{STATUS = UNLINK(PATH)}
11052
@end multitable
11053
 
11054
@item @emph{Arguments}:
11055
@multitable @columnfractions .15 .70
11056
@item @var{PATH} @tab Shall be of default @code{CHARACTER} type.
11057
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
11058
@end multitable
11059
 
11060
@item @emph{See also}:
11061
@ref{LINK}, @ref{SYMLNK}
11062
@end table
11063
 
11064
 
11065
 
11066
@node UNPACK
11067
@section @code{UNPACK} --- Unpack an array of rank one into an array
11068
@fnindex UNPACK
11069
@cindex array, unpacking
11070
@cindex array, increase dimension
11071
@cindex array, scatter elements
11072
 
11073
@table @asis
11074
@item @emph{Description}:
11075
Store the elements of @var{VECTOR} in an array of higher rank.
11076
 
11077
@item @emph{Standard}:
11078
Fortran 95 and later
11079
 
11080
@item @emph{Class}:
11081
Transformational function
11082
 
11083
@item @emph{Syntax}:
11084
@code{RESULT = UNPACK(VECTOR, MASK, FIELD)}
11085
 
11086
@item @emph{Arguments}:
11087
@multitable @columnfractions .15 .70
11088
@item @var{VECTOR} @tab Shall be an array of any type and rank one. It
11089
shall have at least as many elements as @var{MASK} has @code{TRUE} values.
11090
@item @var{MASK}   @tab Shall be an array of type @code{LOGICAL}.
11091
@item @var{FIELD}  @tab Shall be of the same type as @var{VECTOR} and have
11092
the same shape as @var{MASK}.
11093
@end multitable
11094
 
11095
@item @emph{Return value}:
11096
The resulting array corresponds to @var{FIELD} with @code{TRUE} elements
11097
of @var{MASK} replaced by values from @var{VECTOR} in array element order.
11098
 
11099
@item @emph{Example}:
11100
@smallexample
11101
PROGRAM test_unpack
11102
  integer :: vector(2)  = (/1,1/)
11103
  logical :: mask(4)  = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
11104
  integer :: field(2,2) = 0, unity(2,2)
11105
 
11106
  ! result: unity matrix
11107
  unity = unpack(vector, reshape(mask, (/2,2/)), field)
11108
END PROGRAM
11109
@end smallexample
11110
 
11111
@item @emph{See also}:
11112
@ref{PACK}, @ref{SPREAD}
11113
@end table
11114
 
11115
 
11116
 
11117
@node VERIFY
11118
@section @code{VERIFY} --- Scan a string for the absence of a set of characters
11119
@fnindex VERIFY
11120
@cindex string, find missing set
11121
 
11122
@table @asis
11123
@item @emph{Description}:
11124
Verifies that all the characters in a @var{SET} are present in a @var{STRING}.
11125
 
11126
If @var{BACK} is either absent or equals @code{FALSE}, this function
11127
returns the position of the leftmost character of @var{STRING} that is
11128
not in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position
11129
is returned. If all characters of @var{SET} are found in @var{STRING}, the
11130
result is zero.
11131
 
11132
@item @emph{Standard}:
11133
Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
11134
 
11135
@item @emph{Class}:
11136
Elemental function
11137
 
11138
@item @emph{Syntax}:
11139
@code{RESULT = VERIFY(STRING, SET[, BACK [, KIND]])}
11140
 
11141
@item @emph{Arguments}:
11142
@multitable @columnfractions .15 .70
11143
@item @var{STRING} @tab Shall be of type @code{CHARACTER}.
11144
@item @var{SET}    @tab Shall be of type @code{CHARACTER}.
11145
@item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
11146
@item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
11147
expression indicating the kind parameter of the result.
11148
@end multitable
11149
 
11150
@item @emph{Return value}:
11151
The return value is of type @code{INTEGER} and of kind @var{KIND}. If
11152
@var{KIND} is absent, the return value is of default integer kind.
11153
 
11154
@item @emph{Example}:
11155
@smallexample
11156
PROGRAM test_verify
11157
  WRITE(*,*) VERIFY("FORTRAN", "AO")           ! 1, found 'F'
11158
  WRITE(*,*) VERIFY("FORTRAN", "FOO")          ! 3, found 'R'
11159
  WRITE(*,*) VERIFY("FORTRAN", "C++")          ! 1, found 'F'
11160
  WRITE(*,*) VERIFY("FORTRAN", "C++", .TRUE.)  ! 7, found 'N'
11161
  WRITE(*,*) VERIFY("FORTRAN", "FORTRAN")      ! 0' found none
11162
END PROGRAM
11163
@end smallexample
11164
 
11165
@item @emph{See also}:
11166
@ref{SCAN}, @ref{INDEX intrinsic}
11167
@end table
11168
 
11169
 
11170
 
11171
@node XOR
11172
@section @code{XOR} --- Bitwise logical exclusive OR
11173
@fnindex XOR
11174
@cindex bitwise logical exclusive or
11175
@cindex logical exclusive or, bitwise
11176
 
11177
@table @asis
11178
@item @emph{Description}:
11179
Bitwise logical exclusive or.
11180
 
11181
This intrinsic routine is provided for backwards compatibility with
11182
GNU Fortran 77.  For integer arguments, programmers should consider
11183
the use of the @ref{IEOR} intrinsic and for logical arguments the
11184
@code{.NEQV.} operator, which are both defined by the Fortran standard.
11185
 
11186
@item @emph{Standard}:
11187
GNU extension
11188
 
11189
@item @emph{Class}:
11190
Function
11191
 
11192
@item @emph{Syntax}:
11193
@code{RESULT = XOR(I, J)}
11194
 
11195
@item @emph{Arguments}:
11196
@multitable @columnfractions .15 .70
11197
@item @var{I} @tab The type shall be either  a scalar @code{INTEGER}
11198
type or a scalar @code{LOGICAL} type.
11199
@item @var{J} @tab The type shall be the same as the type of @var{I}.
11200
@end multitable
11201
 
11202
@item @emph{Return value}:
11203
The return type is either a scalar @code{INTEGER} or a scalar
11204
@code{LOGICAL}.  If the kind type parameters differ, then the
11205
smaller kind type is implicitly converted to larger kind, and the
11206
return has the larger kind.
11207
 
11208
@item @emph{Example}:
11209
@smallexample
11210
PROGRAM test_xor
11211
  LOGICAL :: T = .TRUE., F = .FALSE.
11212
  INTEGER :: a, b
11213
  DATA a / Z'F' /, b / Z'3' /
11214
 
11215
  WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)
11216
  WRITE (*,*) XOR(a, b)
11217
END PROGRAM
11218
@end smallexample
11219
 
11220
@item @emph{See also}:
11221
Fortran 95 elemental function: @ref{IEOR}
11222
@end table
11223
 
11224
 
11225
 
11226
@node Intrinsic Modules
11227
@chapter Intrinsic Modules
11228
@cindex intrinsic Modules
11229
 
11230
@menu
11231
* ISO_FORTRAN_ENV::
11232
* ISO_C_BINDING::
11233
* OpenMP Modules OMP_LIB and OMP_LIB_KINDS::
11234
@end menu
11235
 
11236
@node ISO_FORTRAN_ENV
11237
@section @code{ISO_FORTRAN_ENV}
11238
@table @asis
11239
@item @emph{Standard}:
11240
Fortran 2003 and later; @code{INT8}, @code{INT16}, @code{INT32}, @code{INT64},
11241
@code{REAL32}, @code{REAL64}, @code{REAL128} are Fortran 2008 or later
11242
@end table
11243
 
11244
The @code{ISO_FORTRAN_ENV} module provides the following scalar default-integer
11245
named constants:
11246
 
11247
@table @asis
11248
@item @code{CHARACTER_STORAGE_SIZE}:
11249
Size in bits of the character storage unit.
11250
 
11251
@item @code{ERROR_UNIT}:
11252
Identifies the preconnected unit used for error reporting.
11253
 
11254
@item @code{FILE_STORAGE_SIZE}:
11255
Size in bits of the file-storage unit.
11256
 
11257
@item @code{INPUT_UNIT}:
11258
Identifies the preconnected unit identified by the asterisk
11259
(@code{*}) in @code{READ} statement.
11260
 
11261
@item @code{INT8}, @code{INT16}, @code{INT32}, @code{INT64}
11262
Kind type parameters to specify an INTEGER type with a storage
11263
size of 16, 32, and 64 bits. It is negative if a target platform
11264
does not support the particular kind.
11265
 
11266
@item @code{IOSTAT_END}:
11267
The value assigned to the variable passed to the IOSTAT= specifier of
11268
an input/output statement if an end-of-file condition occurred.
11269
 
11270
@item @code{IOSTAT_EOR}:
11271
The value assigned to the variable passed to the IOSTAT= specifier of
11272
an input/output statement if an end-of-record condition occurred.
11273
 
11274
@item @code{NUMERIC_STORAGE_SIZE}:
11275
The size in bits of the numeric storage unit.
11276
 
11277
@item @code{OUTPUT_UNIT}:
11278
Identifies the preconnected unit identified by the asterisk
11279
(@code{*}) in @code{WRITE} statement.
11280
 
11281
@item @code{REAL32}, @code{REAL64}, @code{REAL128}
11282
Kind type parameters to specify a REAL type with a storage
11283
size of 32, 64, and 128 bits. It is negative if a target platform
11284
does not support the particular kind.
11285
@end table
11286
 
11287
 
11288
 
11289
@node ISO_C_BINDING
11290
@section @code{ISO_C_BINDING}
11291
@table @asis
11292
@item @emph{Standard}:
11293
Fortran 2003 and later, GNU extensions
11294
@end table
11295
 
11296
The following intrinsic procedures are provided by the module; their
11297
definition can be found in the section Intrinsic Procedures of this
11298
manual.
11299
 
11300
@table @asis
11301
@item @code{C_ASSOCIATED}
11302
@item @code{C_F_POINTER}
11303
@item @code{C_F_PROCPOINTER}
11304
@item @code{C_FUNLOC}
11305
@item @code{C_LOC}
11306
@end table
11307
@c TODO: Vertical spacing between C_FUNLOC and C_LOC wrong in PDF,
11308
@c don't really know why.
11309
 
11310
The @code{ISO_C_BINDING} module provides the following named constants of
11311
type default integer, which can be used as KIND type parameters.
11312
 
11313
In addition to the integer named constants required by the Fortran 2003
11314
standard, GNU Fortran provides as an extension named constants for the
11315
128-bit integer types supported by the C compiler: @code{C_INT128_T,
11316
C_INT_LEAST128_T, C_INT_FAST128_T}.
11317
 
11318
@multitable @columnfractions .15 .35 .35 .35
11319
@item Fortran Type  @tab Named constant         @tab C type                                @tab Extension
11320
@item @code{INTEGER}@tab @code{C_INT}           @tab @code{int}
11321
@item @code{INTEGER}@tab @code{C_SHORT}         @tab @code{short int}
11322
@item @code{INTEGER}@tab @code{C_LONG}          @tab @code{long int}
11323
@item @code{INTEGER}@tab @code{C_LONG_LONG}     @tab @code{long long int}
11324
@item @code{INTEGER}@tab @code{C_SIGNED_CHAR}   @tab @code{signed char}/@code{unsigned char}
11325
@item @code{INTEGER}@tab @code{C_SIZE_T}        @tab @code{size_t}
11326
@item @code{INTEGER}@tab @code{C_INT8_T}        @tab @code{int8_t}
11327
@item @code{INTEGER}@tab @code{C_INT16_T}       @tab @code{int16_t}
11328
@item @code{INTEGER}@tab @code{C_INT32_T}       @tab @code{int32_t}
11329
@item @code{INTEGER}@tab @code{C_INT64_T}       @tab @code{int64_t}
11330
@item @code{INTEGER}@tab @code{C_INT128_T}      @tab @code{int128_t}                      @tab Ext.
11331
@item @code{INTEGER}@tab @code{C_INT_LEAST8_T}  @tab @code{int_least8_t}
11332
@item @code{INTEGER}@tab @code{C_INT_LEAST16_T} @tab @code{int_least16_t}
11333
@item @code{INTEGER}@tab @code{C_INT_LEAST32_T} @tab @code{int_least32_t}
11334
@item @code{INTEGER}@tab @code{C_INT_LEAST64_T} @tab @code{int_least64_t}
11335
@item @code{INTEGER}@tab @code{C_INT_LEAST128_T}@tab @code{int_least128_t}                @tab Ext.
11336
@item @code{INTEGER}@tab @code{C_INT_FAST8_T}   @tab @code{int_fast8_t}
11337
@item @code{INTEGER}@tab @code{C_INT_FAST16_T}  @tab @code{int_fast16_t}
11338
@item @code{INTEGER}@tab @code{C_INT_FAST32_T}  @tab @code{int_fast32_t}
11339
@item @code{INTEGER}@tab @code{C_INT_FAST64_T}  @tab @code{int_fast64_t}
11340
@item @code{INTEGER}@tab @code{C_INT_FAST128_T} @tab @code{int_fast128_t}                 @tab Ext.
11341
@item @code{INTEGER}@tab @code{C_INTMAX_T}      @tab @code{intmax_t}
11342
@item @code{INTEGER}@tab @code{C_INTPTR_T}      @tab @code{intptr_t}
11343
@item @code{REAL}   @tab @code{C_FLOAT}         @tab @code{float}
11344
@item @code{REAL}   @tab @code{C_DOUBLE}        @tab @code{double}
11345
@item @code{REAL}   @tab @code{C_LONG_DOUBLE}   @tab @code{long double}
11346
@item @code{COMPLEX}@tab @code{C_FLOAT_COMPLEX} @tab @code{float _Complex}
11347
@item @code{COMPLEX}@tab @code{C_DOUBLE_COMPLEX}@tab @code{double _Complex}
11348
@item @code{COMPLEX}@tab @code{C_LONG_DOUBLE_COMPLEX}@tab @code{long double _Complex}
11349
@item @code{LOGICAL}@tab @code{C_BOOL}          @tab @code{_Bool}
11350
@item @code{CHARACTER}@tab @code{C_CHAR}        @tab @code{char}
11351
@end multitable
11352
 
11353
Additionally, the following parameters of type @code{CHARACTER(KIND=C_CHAR)}
11354
are defined.
11355
 
11356
@multitable @columnfractions .20 .45 .15
11357
@item Name                     @tab C definition    @tab Value
11358
@item @code{C_NULL_CHAR}       @tab null character  @tab @code{'\0'}
11359
@item @code{C_ALERT}           @tab alert           @tab @code{'\a'}
11360
@item @code{C_BACKSPACE}       @tab backspace       @tab @code{'\b'}
11361
@item @code{C_FORM_FEED}       @tab form feed       @tab @code{'\f'}
11362
@item @code{C_NEW_LINE}        @tab new line        @tab @code{'\n'}
11363
@item @code{C_CARRIAGE_RETURN} @tab carriage return @tab @code{'\r'}
11364
@item @code{C_HORIZONTAL_TAB}  @tab horizontal tab  @tab @code{'\t'}
11365
@item @code{C_VERTICAL_TAB}    @tab vertical tab    @tab @code{'\v'}
11366
@end multitable
11367
 
11368
@node OpenMP Modules OMP_LIB and OMP_LIB_KINDS
11369
@section OpenMP Modules @code{OMP_LIB} and @code{OMP_LIB_KINDS}
11370
@table @asis
11371
@item @emph{Standard}:
11372
OpenMP Application Program Interface v3.0
11373
@end table
11374
 
11375
 
11376
The OpenMP Fortran runtime library routines are provided both in
11377
a form of two Fortran 90 modules, named @code{OMP_LIB} and
11378
@code{OMP_LIB_KINDS}, and in a form of a Fortran @code{include} file named
11379
@file{omp_lib.h}. The procedures provided by @code{OMP_LIB} can be found
11380
in the @ref{Top,,Introduction,libgomp,GNU OpenMP runtime library} manual,
11381
the named constants defined in the @code{OMP_LIB_KINDS} module are listed
11382
below.
11383
 
11384
For details refer to the actual
11385
@uref{http://www.openmp.org/mp-documents/spec30.pdf,
11386
OpenMP Application Program Interface v3.0}.
11387
 
11388
@code{OMP_LIB_KINDS} provides the following scalar default-integer
11389
named constants:
11390
 
11391
@table @asis
11392
@item @code{omp_integer_kind}
11393
@item @code{omp_logical_kind}
11394
@item @code{omp_lock_kind}
11395
@item @code{omp_nest_lock_kind}
11396
@item @code{omp_sched_kind}
11397
@end table

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.