Home | History | Annotate | Line # | Download | only in fortran
      1 @ignore
      2 Copyright (C) 2005-2022 Free Software Foundation, Inc.
      3 This is part of the GNU Fortran manual.   
      4 For copying conditions, see the file gfortran.texi.
      5 
      6 Permission is granted to copy, distribute and/or modify this document
      7 under the terms of the GNU Free Documentation License, Version 1.3 or
      8 any later version published by the Free Software Foundation; with the
      9 Invariant Sections being ``Funding Free Software'', the Front-Cover
     10 Texts being (a) (see below), and with the Back-Cover Texts being (b)
     11 (see below).  A copy of the license is included in the gfdl(7) man page.
     12 
     13 
     14 Some basic guidelines for editing this document:
     15 
     16   (1) The intrinsic procedures are to be listed in alphabetical order.
     17   (2) The generic name is to be used.
     18   (3) The specific names are included in the function index and in a
     19       table at the end of the node (See ABS entry).
     20   (4) Try to maintain the same style for each entry.
     21 
     22 
     23 @end ignore
     24 
     25 @tex
     26 \gdef\acosd{\mathop{\rm acosd}\nolimits}
     27 \gdef\asind{\mathop{\rm asind}\nolimits}
     28 \gdef\atand{\mathop{\rm atand}\nolimits}
     29 \gdef\acos{\mathop{\rm acos}\nolimits}
     30 \gdef\asin{\mathop{\rm asin}\nolimits}
     31 \gdef\atan{\mathop{\rm atan}\nolimits}
     32 \gdef\acosh{\mathop{\rm acosh}\nolimits}
     33 \gdef\asinh{\mathop{\rm asinh}\nolimits}
     34 \gdef\atanh{\mathop{\rm atanh}\nolimits}
     35 \gdef\cosd{\mathop{\rm cosd}\nolimits}
     36 @end tex
     37 
     38 
     39 @node Intrinsic Procedures
     40 @chapter Intrinsic Procedures
     41 @cindex intrinsic procedures
     42 
     43 @menu
     44 * Introduction:         Introduction to Intrinsics
     45 * @code{ABORT}:         ABORT,     Abort the program     
     46 * @code{ABS}:           ABS,       Absolute value     
     47 * @code{ACCESS}:        ACCESS,    Checks file access modes
     48 * @code{ACHAR}:         ACHAR,     Character in @acronym{ASCII} collating sequence
     49 * @code{ACOS}:          ACOS,      Arccosine function
     50 * @code{ACOSD}:         ACOSD,     Arccosine function, degrees
     51 * @code{ACOSH}:         ACOSH,     Inverse hyperbolic cosine function
     52 * @code{ADJUSTL}:       ADJUSTL,   Left adjust a string
     53 * @code{ADJUSTR}:       ADJUSTR,   Right adjust a string
     54 * @code{AIMAG}:         AIMAG,     Imaginary part of complex number
     55 * @code{AINT}:          AINT,      Truncate to a whole number
     56 * @code{ALARM}:         ALARM,     Set an alarm clock
     57 * @code{ALL}:           ALL,       Determine if all values are true
     58 * @code{ALLOCATED}:     ALLOCATED, Status of allocatable entity
     59 * @code{AND}:           AND,       Bitwise logical AND
     60 * @code{ANINT}:         ANINT,     Nearest whole number
     61 * @code{ANY}:           ANY,       Determine if any values are true
     62 * @code{ASIN}:          ASIN,      Arcsine function
     63 * @code{ASIND}:         ASIND,     Arcsine function, degrees
     64 * @code{ASINH}:         ASINH,     Inverse hyperbolic sine function
     65 * @code{ASSOCIATED}:    ASSOCIATED, Status of a pointer or pointer/target pair
     66 * @code{ATAN}:          ATAN,      Arctangent function
     67 * @code{ATAND}:         ATAND,     Arctangent function, degrees
     68 * @code{ATAN2}:         ATAN2,     Arctangent function
     69 * @code{ATAN2D}:        ATAN2D,    Arctangent function, degrees
     70 * @code{ATANH}:         ATANH,     Inverse hyperbolic tangent function
     71 * @code{ATOMIC_ADD}:    ATOMIC_ADD, Atomic ADD operation
     72 * @code{ATOMIC_AND}:    ATOMIC_AND, Atomic bitwise AND operation
     73 * @code{ATOMIC_CAS}:    ATOMIC_CAS, Atomic compare and swap
     74 * @code{ATOMIC_DEFINE}: ATOMIC_DEFINE, Setting a variable atomically
     75 * @code{ATOMIC_FETCH_ADD}: ATOMIC_FETCH_ADD, Atomic ADD operation with prior fetch
     76 * @code{ATOMIC_FETCH_AND}: ATOMIC_FETCH_AND, Atomic bitwise AND operation with prior fetch
     77 * @code{ATOMIC_FETCH_OR}: ATOMIC_FETCH_OR, Atomic bitwise OR operation with prior fetch
     78 * @code{ATOMIC_FETCH_XOR}: ATOMIC_FETCH_XOR, Atomic bitwise XOR operation with prior fetch
     79 * @code{ATOMIC_OR}:     ATOMIC_OR, Atomic bitwise OR operation
     80 * @code{ATOMIC_REF}:    ATOMIC_REF, Obtaining the value of a variable atomically
     81 * @code{ATOMIC_XOR}:    ATOMIC_XOR, Atomic bitwise OR operation
     82 * @code{BACKTRACE}:     BACKTRACE, Show a backtrace
     83 * @code{BESSEL_J0}:     BESSEL_J0, Bessel function of the first kind of order 0
     84 * @code{BESSEL_J1}:     BESSEL_J1, Bessel function of the first kind of order 1
     85 * @code{BESSEL_JN}:     BESSEL_JN, Bessel function of the first kind
     86 * @code{BESSEL_Y0}:     BESSEL_Y0, Bessel function of the second kind of order 0
     87 * @code{BESSEL_Y1}:     BESSEL_Y1, Bessel function of the second kind of order 1
     88 * @code{BESSEL_YN}:     BESSEL_YN, Bessel function of the second kind
     89 * @code{BGE}:           BGE,       Bitwise greater than or equal to
     90 * @code{BGT}:           BGT,       Bitwise greater than
     91 * @code{BIT_SIZE}:      BIT_SIZE,  Bit size inquiry function
     92 * @code{BLE}:           BLE,       Bitwise less than or equal to
     93 * @code{BLT}:           BLT,       Bitwise less than
     94 * @code{BTEST}:         BTEST,     Bit test function
     95 * @code{C_ASSOCIATED}:  C_ASSOCIATED, Status of a C pointer
     96 * @code{C_F_POINTER}:   C_F_POINTER, Convert C into Fortran pointer
     97 * @code{C_F_PROCPOINTER}: C_F_PROCPOINTER, Convert C into Fortran procedure pointer
     98 * @code{C_FUNLOC}:      C_FUNLOC,  Obtain the C address of a procedure
     99 * @code{C_LOC}:         C_LOC,     Obtain the C address of an object
    100 * @code{C_SIZEOF}:      C_SIZEOF,  Size in bytes of an expression
    101 * @code{CEILING}:       CEILING,   Integer ceiling function
    102 * @code{CHAR}:          CHAR,      Integer-to-character conversion function
    103 * @code{CHDIR}:         CHDIR,     Change working directory
    104 * @code{CHMOD}:         CHMOD,     Change access permissions of files
    105 * @code{CMPLX}:         CMPLX,     Complex conversion function
    106 * @code{CO_BROADCAST}:  CO_BROADCAST, Copy a value to all images the current set of images
    107 * @code{CO_MAX}:        CO_MAX,    Maximal value on the current set of images
    108 * @code{CO_MIN}:        CO_MIN,    Minimal value on the current set of images
    109 * @code{CO_REDUCE}:     CO_REDUCE, Reduction of values on the current set of images
    110 * @code{CO_SUM}:        CO_SUM,    Sum of values on the current set of images
    111 * @code{COMMAND_ARGUMENT_COUNT}: COMMAND_ARGUMENT_COUNT, Get number of command line arguments
    112 * @code{COMPILER_OPTIONS}: COMPILER_OPTIONS, Options passed to the compiler
    113 * @code{COMPILER_VERSION}: COMPILER_VERSION, Compiler version string
    114 * @code{COMPLEX}:       COMPLEX,   Complex conversion function
    115 * @code{CONJG}:         CONJG,     Complex conjugate function
    116 * @code{COS}:           COS,       Cosine function
    117 * @code{COSD}:          COSD,      Cosine function, degrees
    118 * @code{COSH}:          COSH,      Hyperbolic cosine function
    119 * @code{COTAN}:         COTAN,     Cotangent function
    120 * @code{COTAND}:        COTAND,    Cotangent function, degrees
    121 * @code{COUNT}:         COUNT,     Count occurrences of TRUE in an array
    122 * @code{CPU_TIME}:      CPU_TIME,  CPU time subroutine
    123 * @code{CSHIFT}:        CSHIFT,    Circular shift elements of an array
    124 * @code{CTIME}:         CTIME,     Subroutine (or function) to convert a time into a string
    125 * @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine
    126 * @code{DBLE}:          DBLE,      Double precision conversion function
    127 * @code{DCMPLX}:        DCMPLX,    Double complex conversion function
    128 * @code{DIGITS}:        DIGITS,    Significant digits function
    129 * @code{DIM}:           DIM,       Positive difference
    130 * @code{DOT_PRODUCT}:   DOT_PRODUCT, Dot product function
    131 * @code{DPROD}:         DPROD,     Double product function
    132 * @code{DREAL}:         DREAL,     Double real part function
    133 * @code{DSHIFTL}:       DSHIFTL,   Combined left shift
    134 * @code{DSHIFTR}:       DSHIFTR,   Combined right shift
    135 * @code{DTIME}:         DTIME,     Execution time subroutine (or function)
    136 * @code{EOSHIFT}:       EOSHIFT,   End-off shift elements of an array
    137 * @code{EPSILON}:       EPSILON,   Epsilon function
    138 * @code{ERF}:           ERF,       Error function
    139 * @code{ERFC}:          ERFC,      Complementary error function
    140 * @code{ERFC_SCALED}:   ERFC_SCALED, Exponentially-scaled complementary error function
    141 * @code{ETIME}:         ETIME,     Execution time subroutine (or function)
    142 * @code{EVENT_QUERY}: EVENT_QUERY, Query whether a coarray event has occurred
    143 * @code{EXECUTE_COMMAND_LINE}: EXECUTE_COMMAND_LINE, Execute a shell command
    144 * @code{EXIT}:          EXIT,      Exit the program with status.
    145 * @code{EXP}:           EXP,       Exponential function
    146 * @code{EXPONENT}:      EXPONENT,  Exponent function
    147 * @code{EXTENDS_TYPE_OF}: EXTENDS_TYPE_OF,  Query dynamic type for extension
    148 * @code{FDATE}:         FDATE,     Subroutine (or function) to get the current time as a string
    149 * @code{FGET}:          FGET,      Read a single character in stream mode from stdin
    150 * @code{FGETC}:         FGETC,     Read a single character in stream mode
    151 * @code{FINDLOC}:       FINDLOC,   Search an array for a value
    152 * @code{FLOOR}:         FLOOR,     Integer floor function
    153 * @code{FLUSH}:         FLUSH,     Flush I/O unit(s)
    154 * @code{FNUM}:          FNUM,      File number function
    155 * @code{FPUT}:          FPUT,      Write a single character in stream mode to stdout
    156 * @code{FPUTC}:         FPUTC,     Write a single character in stream mode
    157 * @code{FRACTION}:      FRACTION,  Fractional part of the model representation
    158 * @code{FREE}:          FREE,      Memory de-allocation subroutine
    159 * @code{FSEEK}:         FSEEK,     Low level file positioning subroutine
    160 * @code{FSTAT}:         FSTAT,     Get file status
    161 * @code{FTELL}:         FTELL,     Current stream position
    162 * @code{GAMMA}:         GAMMA,     Gamma function
    163 * @code{GERROR}:        GERROR,    Get last system error message
    164 * @code{GETARG}:        GETARG,    Get command line arguments
    165 * @code{GET_COMMAND}:   GET_COMMAND, Get the entire command line
    166 * @code{GET_COMMAND_ARGUMENT}: GET_COMMAND_ARGUMENT, Get command line arguments
    167 * @code{GETCWD}:        GETCWD,    Get current working directory
    168 * @code{GETENV}:        GETENV,    Get an environmental variable
    169 * @code{GET_ENVIRONMENT_VARIABLE}: GET_ENVIRONMENT_VARIABLE, Get an environmental variable
    170 * @code{GETGID}:        GETGID,    Group ID function
    171 * @code{GETLOG}:        GETLOG,    Get login name
    172 * @code{GETPID}:        GETPID,    Process ID function
    173 * @code{GETUID}:        GETUID,    User ID function
    174 * @code{GMTIME}:        GMTIME,    Convert time to GMT info
    175 * @code{HOSTNM}:        HOSTNM,    Get system host name
    176 * @code{HUGE}:          HUGE,      Largest number of a kind
    177 * @code{HYPOT}:         HYPOT,     Euclidean distance function
    178 * @code{IACHAR}:        IACHAR,    Code in @acronym{ASCII} collating sequence
    179 * @code{IALL}:          IALL,      Bitwise AND of array elements
    180 * @code{IAND}:          IAND,      Bitwise logical and
    181 * @code{IANY}:          IANY,      Bitwise OR of array elements
    182 * @code{IARGC}:         IARGC,     Get the number of command line arguments
    183 * @code{IBCLR}:         IBCLR,     Clear bit
    184 * @code{IBITS}:         IBITS,     Bit extraction
    185 * @code{IBSET}:         IBSET,     Set bit
    186 * @code{ICHAR}:         ICHAR,     Character-to-integer conversion function
    187 * @code{IDATE}:         IDATE,     Current local time (day/month/year)
    188 * @code{IEOR}:          IEOR,      Bitwise logical exclusive or
    189 * @code{IERRNO}:        IERRNO,    Function to get the last system error number
    190 * @code{IMAGE_INDEX}:   IMAGE_INDEX, Cosubscript to image index conversion
    191 * @code{INDEX}:         INDEX intrinsic, Position of a substring within a string
    192 * @code{INT}:           INT,       Convert to integer type
    193 * @code{INT2}:          INT2,      Convert to 16-bit integer type
    194 * @code{INT8}:          INT8,      Convert to 64-bit integer type
    195 * @code{IOR}:           IOR,       Bitwise logical or
    196 * @code{IPARITY}:       IPARITY,   Bitwise XOR of array elements
    197 * @code{IRAND}:         IRAND,     Integer pseudo-random number
    198 * @code{IS_CONTIGUOUS}:  IS_CONTIGUOUS, Test whether an array is contiguous
    199 * @code{IS_IOSTAT_END}:  IS_IOSTAT_END, Test for end-of-file value
    200 * @code{IS_IOSTAT_EOR}:  IS_IOSTAT_EOR, Test for end-of-record value
    201 * @code{ISATTY}:        ISATTY,    Whether a unit is a terminal device
    202 * @code{ISHFT}:         ISHFT,     Shift bits
    203 * @code{ISHFTC}:        ISHFTC,    Shift bits circularly
    204 * @code{ISNAN}:         ISNAN,     Tests for a NaN
    205 * @code{ITIME}:         ITIME,     Current local time (hour/minutes/seconds)
    206 * @code{KILL}:          KILL,      Send a signal to a process
    207 * @code{KIND}:          KIND,      Kind of an entity
    208 * @code{LBOUND}:        LBOUND,    Lower dimension bounds of an array
    209 * @code{LCOBOUND}:      LCOBOUND,  Lower codimension bounds of an array
    210 * @code{LEADZ}:         LEADZ,     Number of leading zero bits of an integer
    211 * @code{LEN}:           LEN,       Length of a character entity
    212 * @code{LEN_TRIM}:      LEN_TRIM,  Length of a character entity without trailing blank characters
    213 * @code{LGE}:           LGE,       Lexical greater than or equal
    214 * @code{LGT}:           LGT,       Lexical greater than
    215 * @code{LINK}:          LINK,      Create a hard link
    216 * @code{LLE}:           LLE,       Lexical less than or equal
    217 * @code{LLT}:           LLT,       Lexical less than
    218 * @code{LNBLNK}:        LNBLNK,    Index of the last non-blank character in a string
    219 * @code{LOC}:           LOC,       Returns the address of a variable
    220 * @code{LOG}:           LOG,       Logarithm function
    221 * @code{LOG10}:         LOG10,     Base 10 logarithm function
    222 * @code{LOG_GAMMA}:     LOG_GAMMA, Logarithm of the Gamma function
    223 * @code{LOGICAL}:       LOGICAL,   Convert to logical type
    224 * @code{LSHIFT}:        LSHIFT,    Left shift bits
    225 * @code{LSTAT}:         LSTAT,     Get file status
    226 * @code{LTIME}:         LTIME,     Convert time to local time info
    227 * @code{MALLOC}:        MALLOC,    Dynamic memory allocation function
    228 * @code{MASKL}:         MASKL,     Left justified mask
    229 * @code{MASKR}:         MASKR,     Right justified mask
    230 * @code{MATMUL}:        MATMUL,    matrix multiplication
    231 * @code{MAX}:           MAX,       Maximum value of an argument list
    232 * @code{MAXEXPONENT}:   MAXEXPONENT, Maximum exponent of a real kind
    233 * @code{MAXLOC}:        MAXLOC,    Location of the maximum value within an array
    234 * @code{MAXVAL}:        MAXVAL,    Maximum value of an array
    235 * @code{MCLOCK}:        MCLOCK,    Time function
    236 * @code{MCLOCK8}:       MCLOCK8,   Time function (64-bit)
    237 * @code{MERGE}:         MERGE,     Merge arrays
    238 * @code{MERGE_BITS}:    MERGE_BITS, Merge of bits under mask
    239 * @code{MIN}:           MIN,       Minimum value of an argument list
    240 * @code{MINEXPONENT}:   MINEXPONENT, Minimum exponent of a real kind
    241 * @code{MINLOC}:        MINLOC,    Location of the minimum value within an array
    242 * @code{MINVAL}:        MINVAL,    Minimum value of an array
    243 * @code{MOD}:           MOD,       Remainder function
    244 * @code{MODULO}:        MODULO,    Modulo function
    245 * @code{MOVE_ALLOC}:    MOVE_ALLOC, Move allocation from one object to another
    246 * @code{MVBITS}:        MVBITS,    Move bits from one integer to another
    247 * @code{NEAREST}:       NEAREST,   Nearest representable number
    248 * @code{NEW_LINE}:      NEW_LINE,  New line character
    249 * @code{NINT}:          NINT,      Nearest whole number
    250 * @code{NORM2}:         NORM2,     Euclidean vector norm
    251 * @code{NOT}:           NOT,       Logical negation
    252 * @code{NULL}:          NULL,      Function that returns an disassociated pointer
    253 * @code{NUM_IMAGES}:    NUM_IMAGES, Number of images
    254 * @code{OR}:            OR,        Bitwise logical OR
    255 * @code{PACK}:          PACK,      Pack an array into an array of rank one
    256 * @code{PARITY}:        PARITY,    Reduction with exclusive OR
    257 * @code{PERROR}:        PERROR,    Print system error message
    258 * @code{POPCNT}:        POPCNT,    Number of bits set
    259 * @code{POPPAR}:        POPPAR,    Parity of the number of bits set
    260 * @code{PRECISION}:     PRECISION, Decimal precision of a real kind
    261 * @code{PRESENT}:       PRESENT,   Determine whether an optional dummy argument is specified
    262 * @code{PRODUCT}:       PRODUCT,   Product of array elements
    263 * @code{RADIX}:         RADIX,     Base of a data model
    264 * @code{RAN}:           RAN,       Real pseudo-random number
    265 * @code{RAND}:          RAND,      Real pseudo-random number
    266 * @code{RANDOM_INIT}:   RANDOM_INIT, Initialize pseudo-random number generator
    267 * @code{RANDOM_NUMBER}: RANDOM_NUMBER, Pseudo-random number
    268 * @code{RANDOM_SEED}:   RANDOM_SEED, Initialize a pseudo-random number sequence
    269 * @code{RANGE}:         RANGE,     Decimal exponent range
    270 * @code{RANK} :         RANK,      Rank of a data object
    271 * @code{REAL}:          REAL,      Convert to real type 
    272 * @code{RENAME}:        RENAME,    Rename a file
    273 * @code{REPEAT}:        REPEAT,    Repeated string concatenation
    274 * @code{RESHAPE}:       RESHAPE,   Function to reshape an array
    275 * @code{RRSPACING}:     RRSPACING, Reciprocal of the relative spacing
    276 * @code{RSHIFT}:        RSHIFT,    Right shift bits
    277 * @code{SAME_TYPE_AS}:  SAME_TYPE_AS,  Query dynamic types for equality
    278 * @code{SCALE}:         SCALE,     Scale a real value
    279 * @code{SCAN}:          SCAN,      Scan a string for the presence of a set of characters
    280 * @code{SECNDS}:        SECNDS,    Time function
    281 * @code{SECOND}:        SECOND,    CPU time function
    282 * @code{SELECTED_CHAR_KIND}: SELECTED_CHAR_KIND,  Choose character kind
    283 * @code{SELECTED_INT_KIND}: SELECTED_INT_KIND,  Choose integer kind
    284 * @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND,  Choose real kind
    285 * @code{SET_EXPONENT}:  SET_EXPONENT, Set the exponent of the model
    286 * @code{SHAPE}:         SHAPE,     Determine the shape of an array
    287 * @code{SHIFTA}:        SHIFTA,    Right shift with fill
    288 * @code{SHIFTL}:        SHIFTL,    Left shift
    289 * @code{SHIFTR}:        SHIFTR,    Right shift
    290 * @code{SIGN}:          SIGN,      Sign copying function
    291 * @code{SIGNAL}:        SIGNAL,    Signal handling subroutine (or function)
    292 * @code{SIN}:           SIN,       Sine function
    293 * @code{SIND}:          SIND,      Sine function, degrees
    294 * @code{SINH}:          SINH,      Hyperbolic sine function
    295 * @code{SIZE}:          SIZE,      Function to determine the size of an array
    296 * @code{SIZEOF}:        SIZEOF,    Determine the size in bytes of an expression
    297 * @code{SLEEP}:         SLEEP,     Sleep for the specified number of seconds
    298 * @code{SPACING}:       SPACING,   Smallest distance between two numbers of a given type
    299 * @code{SPREAD}:        SPREAD,    Add a dimension to an array 
    300 * @code{SQRT}:          SQRT,      Square-root function
    301 * @code{SRAND}:         SRAND,     Reinitialize the random number generator
    302 * @code{STAT}:          STAT,      Get file status
    303 * @code{STORAGE_SIZE}:  STORAGE_SIZE, Storage size in bits
    304 * @code{SUM}:           SUM,       Sum of array elements
    305 * @code{SYMLNK}:        SYMLNK,    Create a symbolic link
    306 * @code{SYSTEM}:        SYSTEM,    Execute a shell command
    307 * @code{SYSTEM_CLOCK}:  SYSTEM_CLOCK, Time function
    308 * @code{TAN}:           TAN,       Tangent function
    309 * @code{TAND}:          TAND,      Tangent function, degrees
    310 * @code{TANH}:          TANH,      Hyperbolic tangent function
    311 * @code{THIS_IMAGE}:    THIS_IMAGE, Cosubscript index of this image
    312 * @code{TIME}:          TIME,      Time function
    313 * @code{TIME8}:         TIME8,     Time function (64-bit)
    314 * @code{TINY}:          TINY,      Smallest positive number of a real kind
    315 * @code{TRAILZ}:        TRAILZ,    Number of trailing zero bits of an integer
    316 * @code{TRANSFER}:      TRANSFER,  Transfer bit patterns
    317 * @code{TRANSPOSE}:     TRANSPOSE, Transpose an array of rank two
    318 * @code{TRIM}:          TRIM,      Remove trailing blank characters of a string
    319 * @code{TTYNAM}:        TTYNAM,    Get the name of a terminal device.
    320 * @code{UBOUND}:        UBOUND,    Upper dimension bounds of an array
    321 * @code{UCOBOUND}:      UCOBOUND,  Upper codimension bounds of an array
    322 * @code{UMASK}:         UMASK,     Set the file creation mask
    323 * @code{UNLINK}:        UNLINK,    Remove a file from the file system
    324 * @code{UNPACK}:        UNPACK,    Unpack an array of rank one into an array
    325 * @code{VERIFY}:        VERIFY,    Scan a string for the absence of a set of characters
    326 * @code{XOR}:           XOR,       Bitwise logical exclusive or
    327 @end menu
    328 
    329 @node Introduction to Intrinsics
    330 @section Introduction to intrinsic procedures
    331 
    332 The intrinsic procedures provided by GNU Fortran include procedures required
    333 by the Fortran 95 and later supported standards, and a set of intrinsic
    334 procedures for backwards compatibility with G77.  Any conflict between
    335 a description here and a description in the Fortran standards is
    336 unintentional, and the standard(s) should be considered authoritative.
    337 
    338 The enumeration of the @code{KIND} type parameter is processor defined in
    339 the Fortran 95 standard.  GNU Fortran defines the default integer type and
    340 default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)},
    341 respectively.  The standard mandates that both data types shall have
    342 another kind, which have more precision.  On typical target architectures
    343 supported by @command{gfortran}, this kind type parameter is @code{KIND=8}.
    344 Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent.
    345 In the description of generic intrinsic procedures, the kind type parameter
    346 will be specified by @code{KIND=*}, and in the description of specific
    347 names for an intrinsic procedure the kind type parameter will be explicitly
    348 given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}).  Finally, for
    349 brevity the optional @code{KIND=} syntax will be omitted.
    350 
    351 Many of the intrinsic procedures take one or more optional arguments.
    352 This document follows the convention used in the Fortran 95 standard,
    353 and denotes such arguments by square brackets.
    354 
    355 GNU Fortran offers the @option{-std=} command-line option,
    356 which can be used to restrict the set of intrinsic procedures to a 
    357 given standard.  By default, @command{gfortran} sets the @option{-std=gnu}
    358 option, and so all intrinsic procedures described here are accepted.  There
    359 is one caveat.  For a select group of intrinsic procedures, @command{g77}
    360 implemented both a function and a subroutine.  Both classes 
    361 have been implemented in @command{gfortran} for backwards compatibility
    362 with @command{g77}.  It is noted here that these functions and subroutines
    363 cannot be intermixed in a given subprogram.  In the descriptions that follow,
    364 the applicable standard for each intrinsic procedure is noted.
    365 
    366 
    367 
    368 @node ABORT
    369 @section @code{ABORT} --- Abort the program
    370 @fnindex ABORT
    371 @cindex program termination, with core dump
    372 @cindex terminate program, with core dump
    373 @cindex core, dump
    374 
    375 @table @asis
    376 @item @emph{Description}:
    377 @code{ABORT} causes immediate termination of the program.  On operating
    378 systems that support a core dump, @code{ABORT} will produce a core dump.
    379 It will also print a backtrace, unless @code{-fno-backtrace} is given.
    380 
    381 @item @emph{Standard}:
    382 GNU extension
    383 
    384 @item @emph{Class}:
    385 Subroutine
    386 
    387 @item @emph{Syntax}:
    388 @code{CALL ABORT}
    389 
    390 @item @emph{Return value}:
    391 Does not return.
    392 
    393 @item @emph{Example}:
    394 @smallexample
    395 program test_abort
    396   integer :: i = 1, j = 2
    397   if (i /= j) call abort
    398 end program test_abort
    399 @end smallexample
    400 
    401 @item @emph{See also}:
    402 @ref{EXIT}, @gol
    403 @ref{KILL}, @gol
    404 @ref{BACKTRACE}
    405 @end table
    406 
    407 
    408 
    409 @node ABS
    410 @section @code{ABS} --- Absolute value
    411 @fnindex ABS
    412 @fnindex CABS
    413 @fnindex DABS
    414 @fnindex IABS
    415 @fnindex ZABS
    416 @fnindex CDABS
    417 @fnindex BABS
    418 @fnindex IIABS
    419 @fnindex JIABS
    420 @fnindex KIABS
    421 @cindex absolute value
    422 
    423 @table @asis
    424 @item @emph{Description}:
    425 @code{ABS(A)} computes the absolute value of @code{A}.
    426 
    427 @item @emph{Standard}:
    428 Fortran 77 and later, has overloads that are GNU extensions
    429 
    430 @item @emph{Class}:
    431 Elemental function
    432 
    433 @item @emph{Syntax}:
    434 @code{RESULT = ABS(A)}
    435 
    436 @item @emph{Arguments}:
    437 @multitable @columnfractions .15 .70
    438 @item @var{A} @tab The type of the argument shall be an @code{INTEGER},
    439 @code{REAL}, or @code{COMPLEX}.
    440 @end multitable
    441 
    442 @item @emph{Return value}:
    443 The return value is of the same type and
    444 kind as the argument except the return value is @code{REAL} for a
    445 @code{COMPLEX} argument.
    446 
    447 @item @emph{Example}:
    448 @smallexample
    449 program test_abs
    450   integer :: i = -1
    451   real :: x = -1.e0
    452   complex :: z = (-1.e0,0.e0)
    453   i = abs(i)
    454   x = abs(x)
    455   x = abs(z)
    456 end program test_abs
    457 @end smallexample
    458 
    459 @item @emph{Specific names}:
    460 @multitable @columnfractions .20 .23 .20 .33
    461 @headitem Name            @tab Argument            @tab Return type       @tab Standard
    462 @item @code{ABS(A)}   @tab @code{REAL(4) A}    @tab @code{REAL(4)}    @tab Fortran 77 and later
    463 @item @code{CABS(A)}  @tab @code{COMPLEX(4) A} @tab @code{REAL(4)}    @tab Fortran 77 and later
    464 @item @code{DABS(A)}  @tab @code{REAL(8) A}    @tab @code{REAL(8)}    @tab Fortran 77 and later
    465 @item @code{IABS(A)}  @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab Fortran 77 and later
    466 @item @code{BABS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
    467 @item @code{IIABS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
    468 @item @code{JIABS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
    469 @item @code{KIABS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
    470 @item @code{ZABS(A)}  @tab @code{COMPLEX(8) A} @tab @code{REAL(8)} @tab GNU extension
    471 @item @code{CDABS(A)} @tab @code{COMPLEX(8) A} @tab @code{REAL(8)} @tab GNU extension
    472 @end multitable
    473 @end table
    474 
    475 
    476 
    477 @node ACCESS
    478 @section @code{ACCESS} --- Checks file access modes
    479 @fnindex ACCESS
    480 @cindex file system, access mode
    481 
    482 @table @asis
    483 @item @emph{Description}:
    484 @code{ACCESS(NAME, MODE)} checks whether the file @var{NAME} 
    485 exists, is readable, writable or executable. Except for the
    486 executable check, @code{ACCESS} can be replaced by
    487 Fortran 95's @code{INQUIRE}.
    488 
    489 @item @emph{Standard}:
    490 GNU extension
    491 
    492 @item @emph{Class}:
    493 Inquiry function
    494 
    495 @item @emph{Syntax}:
    496 @code{RESULT = ACCESS(NAME, MODE)}
    497 
    498 @item @emph{Arguments}:
    499 @multitable @columnfractions .15 .70
    500 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
    501 file name. Trailing blank are ignored unless the character @code{achar(0)}
    502 is present, then all characters up to and excluding @code{achar(0)} are
    503 used as file name.
    504 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind with the
    505 file access mode, may be any concatenation of @code{"r"} (readable),
    506 @code{"w"} (writable) and @code{"x"} (executable), or @code{" "} to check
    507 for existence.
    508 @end multitable
    509 
    510 @item @emph{Return value}:
    511 Returns a scalar @code{INTEGER}, which is @code{0} if the file is
    512 accessible in the given mode; otherwise or if an invalid argument
    513 has been given for @code{MODE} the value @code{1} is returned.
    514 
    515 @item @emph{Example}:
    516 @smallexample
    517 program access_test
    518   implicit none
    519   character(len=*), parameter :: file  = 'test.dat'
    520   character(len=*), parameter :: file2 = 'test.dat  '//achar(0)
    521   if(access(file,' ') == 0) print *, trim(file),' is exists'
    522   if(access(file,'r') == 0) print *, trim(file),' is readable'
    523   if(access(file,'w') == 0) print *, trim(file),' is writable'
    524   if(access(file,'x') == 0) print *, trim(file),' is executable'
    525   if(access(file2,'rwx') == 0) &
    526     print *, trim(file2),' is readable, writable and executable'
    527 end program access_test
    528 @end smallexample
    529 @end table
    530 
    531 
    532 
    533 @node ACHAR
    534 @section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence 
    535 @fnindex ACHAR
    536 @cindex @acronym{ASCII} collating sequence
    537 @cindex collating sequence, @acronym{ASCII}
    538 
    539 @table @asis
    540 @item @emph{Description}:
    541 @code{ACHAR(I)} returns the character located at position @code{I}
    542 in the @acronym{ASCII} collating sequence.
    543 
    544 @item @emph{Standard}:
    545 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
    546 
    547 @item @emph{Class}:
    548 Elemental function
    549 
    550 @item @emph{Syntax}:
    551 @code{RESULT = ACHAR(I [, KIND])}
    552 
    553 @item @emph{Arguments}:
    554 @multitable @columnfractions .15 .70
    555 @item @var{I}    @tab The type shall be @code{INTEGER}.
    556 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
    557 expression indicating the kind parameter of the result.
    558 @end multitable
    559 
    560 @item @emph{Return value}:
    561 The return value is of type @code{CHARACTER} with a length of one.
    562 If the @var{KIND} argument is present, the return value is of the
    563 specified kind and of the default kind otherwise.
    564 
    565 @item @emph{Example}:
    566 @smallexample
    567 program test_achar
    568   character c
    569   c = achar(32)
    570 end program test_achar
    571 @end smallexample
    572 
    573 @item @emph{Note}:
    574 See @ref{ICHAR} for a discussion of converting between numerical values
    575 and formatted string representations.
    576 
    577 @item @emph{See also}:
    578 @ref{CHAR}, @gol
    579 @ref{IACHAR}, @gol
    580 @ref{ICHAR}
    581 @end table
    582 
    583 
    584 
    585 @node ACOS
    586 @section @code{ACOS} --- Arccosine function 
    587 @fnindex ACOS
    588 @fnindex DACOS
    589 @cindex trigonometric function, cosine, inverse
    590 @cindex cosine, inverse
    591 
    592 @table @asis
    593 @item @emph{Description}:
    594 @code{ACOS(X)} computes the arccosine of @var{X} (inverse of @code{COS(X)}).
    595 
    596 @item @emph{Standard}:
    597 Fortran 77 and later, for a complex argument Fortran 2008 or later
    598 
    599 @item @emph{Class}:
    600 Elemental function
    601 
    602 @item @emph{Syntax}:
    603 @code{RESULT = ACOS(X)}
    604 
    605 @item @emph{Arguments}:
    606 @multitable @columnfractions .15 .70
    607 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
    608 less than or equal to one - or the type shall be @code{COMPLEX}.
    609 @end multitable
    610 
    611 @item @emph{Return value}:
    612 The return value is of the same type and kind as @var{X}.
    613 The real part of the result is in radians and lies in the range
    614 @math{0 \leq \Re \acos(x) \leq \pi}.
    615 
    616 @item @emph{Example}:
    617 @smallexample
    618 program test_acos
    619   real(8) :: x = 0.866_8
    620   x = acos(x)
    621 end program test_acos
    622 @end smallexample
    623 
    624 @item @emph{Specific names}:
    625 @multitable @columnfractions .20 .23 .20 .33
    626 @headitem Name            @tab Argument         @tab Return type     @tab Standard
    627 @item @code{ACOS(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}  @tab Fortran 77 and later
    628 @item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}  @tab Fortran 77 and later
    629 @end multitable
    630 
    631 @item @emph{See also}:
    632 Inverse function: @gol
    633 @ref{COS} @gol
    634 Degrees function: @gol
    635 @ref{ACOSD}
    636 @end table
    637 
    638 
    639 
    640 @node ACOSD
    641 @section @code{ACOSD} --- Arccosine function, degrees
    642 @fnindex ACOSD
    643 @fnindex DACOSD
    644 @cindex trigonometric function, cosine, inverse, degrees
    645 @cindex cosine, inverse, degrees
    646 
    647 @table @asis
    648 @item @emph{Description}:
    649 @code{ACOSD(X)} computes the arccosine of @var{X} in degrees (inverse of
    650 @code{COSD(X)}).
    651 
    652 This function is for compatibility only and should be avoided in favor of
    653 standard constructs wherever possible.
    654 
    655 @item @emph{Standard}:
    656 GNU extension, enabled with @option{-fdec-math}
    657 
    658 @item @emph{Class}:
    659 Elemental function
    660 
    661 @item @emph{Syntax}:
    662 @code{RESULT = ACOSD(X)}
    663 
    664 @item @emph{Arguments}:
    665 @multitable @columnfractions .15 .70
    666 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
    667 less than or equal to one - or the type shall be @code{COMPLEX}.
    668 @end multitable
    669 
    670 @item @emph{Return value}:
    671 The return value is of the same type and kind as @var{X}.
    672 The real part of the result is in degrees and lies in the range
    673 @math{0 \leq \Re \acos(x) \leq 180}.
    674 
    675 @item @emph{Example}:
    676 @smallexample
    677 program test_acosd
    678   real(8) :: x = 0.866_8
    679   x = acosd(x)
    680 end program test_acosd
    681 @end smallexample
    682 
    683 @item @emph{Specific names}:
    684 @multitable @columnfractions .20 .23 .20 .33
    685 @headitem Name            @tab Argument         @tab Return type     @tab Standard
    686 @item @code{ACOSD(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}  @tab GNU extension
    687 @item @code{DACOSD(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}  @tab GNU extension
    688 @end multitable
    689 
    690 @item @emph{See also}:
    691 Inverse function: @gol
    692 @ref{COSD} @gol
    693 Radians function: @gol
    694 @ref{ACOS} @gol
    695 @end table
    696 
    697 
    698 
    699 @node ACOSH
    700 @section @code{ACOSH} --- Inverse hyperbolic cosine function
    701 @fnindex ACOSH
    702 @fnindex DACOSH
    703 @cindex area hyperbolic cosine
    704 @cindex inverse hyperbolic cosine
    705 @cindex hyperbolic function, cosine, inverse
    706 @cindex cosine, hyperbolic, inverse
    707 
    708 @table @asis
    709 @item @emph{Description}:
    710 @code{ACOSH(X)} computes the inverse hyperbolic cosine of @var{X}.
    711 
    712 @item @emph{Standard}:
    713 Fortran 2008 and later
    714 
    715 @item @emph{Class}:
    716 Elemental function
    717 
    718 @item @emph{Syntax}:
    719 @code{RESULT = ACOSH(X)}
    720 
    721 @item @emph{Arguments}:
    722 @multitable @columnfractions .15 .70
    723 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
    724 @end multitable
    725 
    726 @item @emph{Return value}:
    727 The return value has the same type and kind as @var{X}. If @var{X} is
    728 complex, the imaginary part of the result is in radians and lies between
    729 @math{ 0 \leq \Im \acosh(x) \leq \pi}.
    730 
    731 @item @emph{Example}:
    732 @smallexample
    733 PROGRAM test_acosh
    734   REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)
    735   WRITE (*,*) ACOSH(x)
    736 END PROGRAM
    737 @end smallexample
    738 
    739 @item @emph{Specific names}:
    740 @multitable @columnfractions .20 .23 .20 .33
    741 @headitem Name             @tab Argument          @tab Return type       @tab Standard
    742 @item @code{DACOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
    743 @end multitable
    744 
    745 @item @emph{See also}:
    746 Inverse function: @gol
    747 @ref{COSH}
    748 @end table
    749 
    750 
    751 
    752 @node ADJUSTL
    753 @section @code{ADJUSTL} --- Left adjust a string 
    754 @fnindex ADJUSTL
    755 @cindex string, adjust left
    756 @cindex adjust string
    757 
    758 @table @asis
    759 @item @emph{Description}:
    760 @code{ADJUSTL(STRING)} will left adjust a string by removing leading spaces.
    761 Spaces are inserted at the end of the string as needed.
    762 
    763 @item @emph{Standard}:
    764 Fortran 90 and later
    765 
    766 @item @emph{Class}:
    767 Elemental function
    768 
    769 @item @emph{Syntax}:
    770 @code{RESULT = ADJUSTL(STRING)}
    771 
    772 @item @emph{Arguments}:
    773 @multitable @columnfractions .15 .70
    774 @item @var{STRING} @tab The type shall be @code{CHARACTER}.
    775 @end multitable
    776 
    777 @item @emph{Return value}:
    778 The return value is of type @code{CHARACTER} and of the same kind as
    779 @var{STRING} where leading spaces are removed and the same number of
    780 spaces are inserted on the end of @var{STRING}.
    781 
    782 @item @emph{Example}:
    783 @smallexample
    784 program test_adjustl
    785   character(len=20) :: str = '   gfortran'
    786   str = adjustl(str)
    787   print *, str
    788 end program test_adjustl
    789 @end smallexample
    790 
    791 @item @emph{See also}:
    792 @ref{ADJUSTR}, @gol
    793 @ref{TRIM}
    794 @end table
    795 
    796 
    797 
    798 @node ADJUSTR
    799 @section @code{ADJUSTR} --- Right adjust a string 
    800 @fnindex ADJUSTR
    801 @cindex string, adjust right
    802 @cindex adjust string
    803 
    804 @table @asis
    805 @item @emph{Description}:
    806 @code{ADJUSTR(STRING)} will right adjust a string by removing trailing spaces.
    807 Spaces are inserted at the start of the string as needed.
    808 
    809 @item @emph{Standard}:
    810 Fortran 90 and later
    811 
    812 @item @emph{Class}:
    813 Elemental function
    814 
    815 @item @emph{Syntax}:
    816 @code{RESULT = ADJUSTR(STRING)}
    817 
    818 @item @emph{Arguments}:
    819 @multitable @columnfractions .15 .70
    820 @item @var{STR} @tab The type shall be @code{CHARACTER}.
    821 @end multitable
    822 
    823 @item @emph{Return value}:
    824 The return value is of type @code{CHARACTER} and of the same kind as
    825 @var{STRING} where trailing spaces are removed and the same number of
    826 spaces are inserted at the start of @var{STRING}.
    827 
    828 @item @emph{Example}:
    829 @smallexample
    830 program test_adjustr
    831   character(len=20) :: str = 'gfortran'
    832   str = adjustr(str)
    833   print *, str
    834 end program test_adjustr
    835 @end smallexample
    836 
    837 @item @emph{See also}:
    838 @ref{ADJUSTL}, @gol
    839 @ref{TRIM}
    840 @end table
    841 
    842 
    843 
    844 @node AIMAG
    845 @section @code{AIMAG} --- Imaginary part of complex number  
    846 @fnindex AIMAG
    847 @fnindex DIMAG
    848 @fnindex IMAG
    849 @fnindex IMAGPART
    850 @cindex complex numbers, imaginary part
    851 
    852 @table @asis
    853 @item @emph{Description}:
    854 @code{AIMAG(Z)} yields the imaginary part of complex argument @code{Z}.
    855 The @code{IMAG(Z)} and @code{IMAGPART(Z)} intrinsic functions are provided
    856 for compatibility with @command{g77}, and their use in new code is 
    857 strongly discouraged.
    858 
    859 @item @emph{Standard}:
    860 Fortran 77 and later, has overloads that are GNU extensions
    861 
    862 @item @emph{Class}:
    863 Elemental function
    864 
    865 @item @emph{Syntax}:
    866 @code{RESULT = AIMAG(Z)}
    867 
    868 @item @emph{Arguments}:
    869 @multitable @columnfractions .15 .70
    870 @item @var{Z} @tab The type of the argument shall be @code{COMPLEX}.
    871 @end multitable
    872 
    873 @item @emph{Return value}:
    874 The return value is of type @code{REAL} with the
    875 kind type parameter of the argument.
    876 
    877 @item @emph{Example}:
    878 @smallexample
    879 program test_aimag
    880   complex(4) z4
    881   complex(8) z8
    882   z4 = cmplx(1.e0_4, 0.e0_4)
    883   z8 = cmplx(0.e0_8, 1.e0_8)
    884   print *, aimag(z4), dimag(z8)
    885 end program test_aimag
    886 @end smallexample
    887 
    888 @item @emph{Specific names}:
    889 @multitable @columnfractions .20 .23 .20 .33
    890 @headitem Name               @tab Argument            @tab Return type     @tab Standard
    891 @item @code{AIMAG(Z)}    @tab @code{COMPLEX Z}    @tab @code{REAL}     @tab Fortran 77 and later
    892 @item @code{DIMAG(Z)}    @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)}  @tab GNU extension
    893 @item @code{IMAG(Z)}     @tab @code{COMPLEX Z}    @tab @code{REAL}     @tab GNU extension
    894 @item @code{IMAGPART(Z)} @tab @code{COMPLEX Z}    @tab @code{REAL}     @tab GNU extension
    895 @end multitable
    896 @end table
    897 
    898 
    899 
    900 @node AINT
    901 @section @code{AINT} --- Truncate to a whole number
    902 @fnindex AINT
    903 @fnindex DINT
    904 @cindex floor
    905 @cindex rounding, floor
    906 
    907 @table @asis
    908 @item @emph{Description}:
    909 @code{AINT(A [, KIND])} truncates its argument to a whole number.
    910 
    911 @item @emph{Standard}:
    912 Fortran 77 and later
    913 
    914 @item @emph{Class}:
    915 Elemental function
    916 
    917 @item @emph{Syntax}:
    918 @code{RESULT = AINT(A [, KIND])} 
    919 
    920 @item @emph{Arguments}:
    921 @multitable @columnfractions .15 .70
    922 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
    923 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
    924 expression indicating the kind parameter of the result.
    925 @end multitable
    926 
    927 @item @emph{Return value}:
    928 The return value is of type @code{REAL} with the kind type parameter of the
    929 argument if the optional @var{KIND} is absent; otherwise, the kind
    930 type parameter will be given by @var{KIND}.  If the magnitude of 
    931 @var{X} is less than one, @code{AINT(X)} returns zero.  If the
    932 magnitude is equal to or greater than one then it returns the largest
    933 whole number that does not exceed its magnitude.  The sign is the same
    934 as the sign of @var{X}. 
    935 
    936 @item @emph{Example}:
    937 @smallexample
    938 program test_aint
    939   real(4) x4
    940   real(8) x8
    941   x4 = 1.234E0_4
    942   x8 = 4.321_8
    943   print *, aint(x4), dint(x8)
    944   x8 = aint(x4,8)
    945 end program test_aint
    946 @end smallexample
    947 
    948 @item @emph{Specific names}:
    949 @multitable @columnfractions .20 .23 .20 .33
    950 @headitem Name           @tab Argument         @tab Return type      @tab Standard
    951 @item @code{AINT(A)} @tab @code{REAL(4) A} @tab @code{REAL(4)}   @tab Fortran 77 and later
    952 @item @code{DINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)}   @tab Fortran 77 and later
    953 @end multitable
    954 @end table
    955 
    956 
    957 
    958 @node ALARM
    959 @section @code{ALARM} --- Execute a routine after a given delay
    960 @fnindex ALARM
    961 @cindex delayed execution
    962 
    963 @table @asis
    964 @item @emph{Description}:
    965 @code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER}
    966 to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to
    967 set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is
    968 supplied, it will be returned with the number of seconds remaining until
    969 any previously scheduled alarm was due to be delivered, or zero if there
    970 was no previously scheduled alarm.
    971 
    972 @item @emph{Standard}:
    973 GNU extension
    974 
    975 @item @emph{Class}:
    976 Subroutine
    977 
    978 @item @emph{Syntax}:
    979 @code{CALL ALARM(SECONDS, HANDLER [, STATUS])}
    980 
    981 @item @emph{Arguments}:
    982 @multitable @columnfractions .15 .70
    983 @item @var{SECONDS} @tab The type of the argument shall be a scalar
    984 @code{INTEGER}. It is @code{INTENT(IN)}.
    985 @item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or
    986 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar 
    987 values may be either @code{SIG_IGN=1} to ignore the alarm generated 
    988 or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}.
    989 @item @var{STATUS}  @tab (Optional) @var{STATUS} shall be a scalar
    990 variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}.
    991 @end multitable
    992 
    993 @item @emph{Example}:
    994 @smallexample
    995 program test_alarm
    996   external handler_print
    997   integer i
    998   call alarm (3, handler_print, i)
    999   print *, i
   1000   call sleep(10)
   1001 end program test_alarm
   1002 @end smallexample
   1003 This will cause the external routine @var{handler_print} to be called
   1004 after 3 seconds.
   1005 @end table
   1006 
   1007 
   1008 
   1009 @node ALL
   1010 @section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true 
   1011 @fnindex ALL
   1012 @cindex array, apply condition
   1013 @cindex array, condition testing
   1014 
   1015 @table @asis
   1016 @item @emph{Description}:
   1017 @code{ALL(MASK [, DIM])} determines if all the values are true in @var{MASK}
   1018 in the array along dimension @var{DIM}.
   1019 
   1020 @item @emph{Standard}:
   1021 Fortran 90 and later
   1022 
   1023 @item @emph{Class}:
   1024 Transformational function
   1025 
   1026 @item @emph{Syntax}:
   1027 @code{RESULT = ALL(MASK [, DIM])}
   1028 
   1029 @item @emph{Arguments}:
   1030 @multitable @columnfractions .15 .70
   1031 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
   1032 it shall not be scalar.
   1033 @item @var{DIM}  @tab (Optional) @var{DIM} shall be a scalar integer
   1034 with a value that lies between one and the rank of @var{MASK}.
   1035 @end multitable
   1036 
   1037 @item @emph{Return value}:
   1038 @code{ALL(MASK)} returns a scalar value of type @code{LOGICAL} where
   1039 the kind type parameter is the same as the kind type parameter of
   1040 @var{MASK}.  If @var{DIM} is present, then @code{ALL(MASK, DIM)} returns
   1041 an array with the rank of @var{MASK} minus 1.  The shape is determined from
   1042 the shape of @var{MASK} where the @var{DIM} dimension is elided. 
   1043 
   1044 @table @asis
   1045 @item (A)
   1046 @code{ALL(MASK)} is true if all elements of @var{MASK} are true.
   1047 It also is true if @var{MASK} has zero size; otherwise, it is false.
   1048 @item (B)
   1049 If the rank of @var{MASK} is one, then @code{ALL(MASK,DIM)} is equivalent
   1050 to @code{ALL(MASK)}.  If the rank is greater than one, then @code{ALL(MASK,DIM)}
   1051 is determined by applying @code{ALL} to the array sections.
   1052 @end table
   1053 
   1054 @item @emph{Example}:
   1055 @smallexample
   1056 program test_all
   1057   logical l
   1058   l = all((/.true., .true., .true./))
   1059   print *, l
   1060   call section
   1061   contains
   1062     subroutine section
   1063       integer a(2,3), b(2,3)
   1064       a = 1
   1065       b = 1
   1066       b(2,2) = 2
   1067       print *, all(a .eq. b, 1)
   1068       print *, all(a .eq. b, 2)
   1069     end subroutine section
   1070 end program test_all
   1071 @end smallexample
   1072 @end table
   1073 
   1074 
   1075 
   1076 @node ALLOCATED
   1077 @section @code{ALLOCATED} --- Status of an allocatable entity
   1078 @fnindex ALLOCATED
   1079 @cindex allocation, status
   1080 
   1081 @table @asis
   1082 @item @emph{Description}:
   1083 @code{ALLOCATED(ARRAY)} and @code{ALLOCATED(SCALAR)} check the allocation
   1084 status of @var{ARRAY} and @var{SCALAR}, respectively.
   1085 
   1086 @item @emph{Standard}:
   1087 Fortran 90 and later.  Note, the @code{SCALAR=} keyword and allocatable
   1088 scalar entities are available in Fortran 2003 and later.
   1089 
   1090 @item @emph{Class}:
   1091 Inquiry function
   1092 
   1093 @item @emph{Syntax}:
   1094 @multitable @columnfractions .80
   1095 @item @code{RESULT = ALLOCATED(ARRAY)}
   1096 @item @code{RESULT = ALLOCATED(SCALAR)} 
   1097 @end multitable
   1098 
   1099 @item @emph{Arguments}:
   1100 @multitable @columnfractions .15 .70
   1101 @item @var{ARRAY}    @tab The argument shall be an @code{ALLOCATABLE} array.
   1102 @item @var{SCALAR}   @tab The argument shall be an @code{ALLOCATABLE} scalar.
   1103 @end multitable
   1104 
   1105 @item @emph{Return value}:
   1106 The return value is a scalar @code{LOGICAL} with the default logical
   1107 kind type parameter.  If the argument is allocated, then the result is
   1108 @code{.TRUE.}; otherwise, it returns @code{.FALSE.} 
   1109 
   1110 @item @emph{Example}:
   1111 @smallexample
   1112 program test_allocated
   1113   integer :: i = 4
   1114   real(4), allocatable :: x(:)
   1115   if (.not. allocated(x)) allocate(x(i))
   1116 end program test_allocated
   1117 @end smallexample
   1118 @end table
   1119 
   1120 
   1121 
   1122 @node AND
   1123 @section @code{AND} --- Bitwise logical AND
   1124 @fnindex AND
   1125 @cindex bitwise logical and
   1126 @cindex logical and, bitwise
   1127 
   1128 @table @asis
   1129 @item @emph{Description}:
   1130 Bitwise logical @code{AND}.
   1131 
   1132 This intrinsic routine is provided for backwards compatibility with 
   1133 GNU Fortran 77.  For integer arguments, programmers should consider
   1134 the use of the @ref{IAND} intrinsic defined by the Fortran standard.
   1135 
   1136 @item @emph{Standard}:
   1137 GNU extension
   1138 
   1139 @item @emph{Class}:
   1140 Function
   1141 
   1142 @item @emph{Syntax}:
   1143 @code{RESULT = AND(I, J)}
   1144 
   1145 @item @emph{Arguments}:
   1146 @multitable @columnfractions .15 .70
   1147 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
   1148 type or a scalar @code{LOGICAL} type or a boz-literal-constant.
   1149 @item @var{J} @tab The type shall be the same as the type of @var{I} or
   1150 a boz-literal-constant. @var{I} and @var{J} shall not both be
   1151 boz-literal-constants.  If either @var{I} or @var{J} is a
   1152 boz-literal-constant, then the other argument must be a scalar @code{INTEGER}.
   1153 @end multitable
   1154 
   1155 @item @emph{Return value}:
   1156 The return type is either a scalar @code{INTEGER} or a scalar
   1157 @code{LOGICAL}.  If the kind type parameters differ, then the
   1158 smaller kind type is implicitly converted to larger kind, and the 
   1159 return has the larger kind.  A boz-literal-constant is 
   1160 converted to an @code{INTEGER} with the kind type parameter of
   1161 the other argument as-if a call to @ref{INT} occurred.
   1162 
   1163 @item @emph{Example}:
   1164 @smallexample
   1165 PROGRAM test_and
   1166   LOGICAL :: T = .TRUE., F = .FALSE.
   1167   INTEGER :: a, b
   1168   DATA a / Z'F' /, b / Z'3' /
   1169 
   1170   WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)
   1171   WRITE (*,*) AND(a, b)
   1172 END PROGRAM
   1173 @end smallexample
   1174 
   1175 @item @emph{See also}:
   1176 Fortran 95 elemental function: @gol
   1177 @ref{IAND}
   1178 @end table
   1179 
   1180 
   1181 
   1182 @node ANINT
   1183 @section @code{ANINT} --- Nearest whole number
   1184 @fnindex ANINT
   1185 @fnindex DNINT
   1186 @cindex ceiling
   1187 @cindex rounding, ceiling
   1188 
   1189 @table @asis
   1190 @item @emph{Description}:
   1191 @code{ANINT(A [, KIND])} rounds its argument to the nearest whole number.
   1192 
   1193 @item @emph{Standard}:
   1194 Fortran 77 and later
   1195 
   1196 @item @emph{Class}:
   1197 Elemental function
   1198 
   1199 @item @emph{Syntax}:
   1200 @code{RESULT = ANINT(A [, KIND])}
   1201 
   1202 @item @emph{Arguments}:
   1203 @multitable @columnfractions .15 .70
   1204 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
   1205 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   1206 expression indicating the kind parameter of the result.
   1207 @end multitable
   1208 
   1209 @item @emph{Return value}:
   1210 The return value is of type real with the kind type parameter of the
   1211 argument if the optional @var{KIND} is absent; otherwise, the kind
   1212 type parameter will be given by @var{KIND}.  If @var{A} is greater than
   1213 zero, @code{ANINT(A)} returns @code{AINT(X+0.5)}.  If @var{A} is
   1214 less than or equal to zero then it returns @code{AINT(X-0.5)}.
   1215 
   1216 @item @emph{Example}:
   1217 @smallexample
   1218 program test_anint
   1219   real(4) x4
   1220   real(8) x8
   1221   x4 = 1.234E0_4
   1222   x8 = 4.321_8
   1223   print *, anint(x4), dnint(x8)
   1224   x8 = anint(x4,8)
   1225 end program test_anint
   1226 @end smallexample
   1227 
   1228 @item @emph{Specific names}:
   1229 @multitable @columnfractions .20 .23 .20 .33
   1230 @headitem Name            @tab Argument         @tab Return type      @tab Standard
   1231 @item @code{ANINT(A)}  @tab @code{REAL(4) A} @tab @code{REAL(4)}   @tab Fortran 77 and later
   1232 @item @code{DNINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)}   @tab Fortran 77 and later
   1233 @end multitable
   1234 @end table
   1235 
   1236 
   1237 
   1238 @node ANY
   1239 @section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true 
   1240 @fnindex ANY
   1241 @cindex array, apply condition
   1242 @cindex array, condition testing
   1243 
   1244 @table @asis
   1245 @item @emph{Description}:
   1246 @code{ANY(MASK [, DIM])} determines if any of the values in the logical array
   1247 @var{MASK} along dimension @var{DIM} are @code{.TRUE.}.
   1248 
   1249 @item @emph{Standard}:
   1250 Fortran 90 and later
   1251 
   1252 @item @emph{Class}:
   1253 Transformational function
   1254 
   1255 @item @emph{Syntax}:
   1256 @code{RESULT = ANY(MASK [, DIM])}
   1257 
   1258 @item @emph{Arguments}:
   1259 @multitable @columnfractions .15 .70
   1260 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
   1261 it shall not be scalar.
   1262 @item @var{DIM}  @tab (Optional) @var{DIM} shall be a scalar integer
   1263 with a value that lies between one and the rank of @var{MASK}.
   1264 @end multitable
   1265 
   1266 @item @emph{Return value}:
   1267 @code{ANY(MASK)} returns a scalar value of type @code{LOGICAL} where
   1268 the kind type parameter is the same as the kind type parameter of
   1269 @var{MASK}.  If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns
   1270 an array with the rank of @var{MASK} minus 1.  The shape is determined from
   1271 the shape of @var{MASK} where the @var{DIM} dimension is elided. 
   1272 
   1273 @table @asis
   1274 @item (A)
   1275 @code{ANY(MASK)} is true if any element of @var{MASK} is true;
   1276 otherwise, it is false.  It also is false if @var{MASK} has zero size.
   1277 @item (B)
   1278 If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent
   1279 to @code{ANY(MASK)}.  If the rank is greater than one, then @code{ANY(MASK,DIM)}
   1280 is determined by applying @code{ANY} to the array sections.
   1281 @end table
   1282 
   1283 @item @emph{Example}:
   1284 @smallexample
   1285 program test_any
   1286   logical l
   1287   l = any((/.true., .true., .true./))
   1288   print *, l
   1289   call section
   1290   contains
   1291     subroutine section
   1292       integer a(2,3), b(2,3)
   1293       a = 1
   1294       b = 1
   1295       b(2,2) = 2
   1296       print *, any(a .eq. b, 1)
   1297       print *, any(a .eq. b, 2)
   1298     end subroutine section
   1299 end program test_any
   1300 @end smallexample
   1301 @end table
   1302 
   1303 
   1304 
   1305 @node ASIN
   1306 @section @code{ASIN} --- Arcsine function 
   1307 @fnindex ASIN
   1308 @fnindex DASIN
   1309 @cindex trigonometric function, sine, inverse
   1310 @cindex sine, inverse
   1311 
   1312 @table @asis
   1313 @item @emph{Description}:
   1314 @code{ASIN(X)} computes the arcsine of its @var{X} (inverse of @code{SIN(X)}).
   1315 
   1316 @item @emph{Standard}:
   1317 Fortran 77 and later, for a complex argument Fortran 2008 or later
   1318 
   1319 @item @emph{Class}:
   1320 Elemental function
   1321 
   1322 @item @emph{Syntax}:
   1323 @code{RESULT = ASIN(X)}
   1324 
   1325 @item @emph{Arguments}:
   1326 @multitable @columnfractions .15 .70
   1327 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
   1328 less than or equal to one - or be @code{COMPLEX}.
   1329 @end multitable
   1330 
   1331 @item @emph{Return value}:
   1332 The return value is of the same type and kind as @var{X}.
   1333 The real part of the result is in radians and lies in the range
   1334 @math{-\pi/2 \leq \Re \asin(x) \leq \pi/2}.
   1335 
   1336 @item @emph{Example}:
   1337 @smallexample
   1338 program test_asin
   1339   real(8) :: x = 0.866_8
   1340   x = asin(x)
   1341 end program test_asin
   1342 @end smallexample
   1343 
   1344 @item @emph{Specific names}:
   1345 @multitable @columnfractions .20 .23 .20 .33
   1346 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   1347 @item @code{ASIN(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   1348 @item @code{DASIN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   1349 @end multitable
   1350 
   1351 @item @emph{See also}:
   1352 Inverse function: @gol
   1353 @ref{SIN} @gol
   1354 Degrees function: @gol
   1355 @ref{ASIND}
   1356 @end table
   1357 
   1358 
   1359 
   1360 @node ASIND
   1361 @section @code{ASIND} --- Arcsine function, degrees
   1362 @fnindex ASIND
   1363 @fnindex DASIND
   1364 @cindex trigonometric function, sine, inverse, degrees
   1365 @cindex sine, inverse, degrees
   1366 
   1367 @table @asis
   1368 @item @emph{Description}:
   1369 @code{ASIND(X)} computes the arcsine of its @var{X} in degrees (inverse of
   1370 @code{SIND(X)}).
   1371 
   1372 This function is for compatibility only and should be avoided in favor of
   1373 standard constructs wherever possible.
   1374 
   1375 @item @emph{Standard}:
   1376 GNU extension, enabled with @option{-fdec-math}.
   1377 
   1378 @item @emph{Class}:
   1379 Elemental function
   1380 
   1381 @item @emph{Syntax}:
   1382 @code{RESULT = ASIND(X)}
   1383 
   1384 @item @emph{Arguments}:
   1385 @multitable @columnfractions .15 .70
   1386 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
   1387 less than or equal to one - or be @code{COMPLEX}.
   1388 @end multitable
   1389 
   1390 @item @emph{Return value}:
   1391 The return value is of the same type and kind as @var{X}.
   1392 The real part of the result is in degrees and lies in the range
   1393 @math{-90 \leq \Re \asin(x) \leq 90}.
   1394 
   1395 @item @emph{Example}:
   1396 @smallexample
   1397 program test_asind
   1398   real(8) :: x = 0.866_8
   1399   x = asind(x)
   1400 end program test_asind
   1401 @end smallexample
   1402 
   1403 @item @emph{Specific names}:
   1404 @multitable @columnfractions .20 .23 .20 .33
   1405 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   1406 @item @code{ASIND(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab GNU extension
   1407 @item @code{DASIND(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   1408 @end multitable
   1409 
   1410 @item @emph{See also}:
   1411 Inverse function: @gol
   1412 @ref{SIND} @gol
   1413 Radians function: @gol
   1414 @ref{ASIN}
   1415 @end table
   1416 
   1417 
   1418 
   1419 @node ASINH
   1420 @section @code{ASINH} --- Inverse hyperbolic sine function
   1421 @fnindex ASINH
   1422 @fnindex DASINH
   1423 @cindex area hyperbolic sine
   1424 @cindex inverse hyperbolic sine
   1425 @cindex hyperbolic function, sine, inverse
   1426 @cindex sine, hyperbolic, inverse
   1427 
   1428 @table @asis
   1429 @item @emph{Description}:
   1430 @code{ASINH(X)} computes the inverse hyperbolic sine of @var{X}.
   1431 
   1432 @item @emph{Standard}:
   1433 Fortran 2008 and later
   1434 
   1435 @item @emph{Class}:
   1436 Elemental function
   1437 
   1438 @item @emph{Syntax}:
   1439 @code{RESULT = ASINH(X)}
   1440 
   1441 @item @emph{Arguments}:
   1442 @multitable @columnfractions .15 .70
   1443 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   1444 @end multitable
   1445 
   1446 @item @emph{Return value}:
   1447 The return value is of the same type and kind as  @var{X}. If @var{X} is
   1448 complex, the imaginary part of the result is in radians and lies between
   1449 @math{-\pi/2 \leq \Im \asinh(x) \leq \pi/2}.
   1450 
   1451 @item @emph{Example}:
   1452 @smallexample
   1453 PROGRAM test_asinh
   1454   REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
   1455   WRITE (*,*) ASINH(x)
   1456 END PROGRAM
   1457 @end smallexample
   1458 
   1459 @item @emph{Specific names}:
   1460 @multitable @columnfractions .20 .23 .20 .33
   1461 @headitem Name             @tab Argument          @tab Return type       @tab Standard
   1462 @item @code{DASINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension.
   1463 @end multitable
   1464 
   1465 @item @emph{See also}:
   1466 Inverse function: @gol
   1467 @ref{SINH}
   1468 @end table
   1469 
   1470 
   1471 
   1472 @node ASSOCIATED
   1473 @section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair 
   1474 @fnindex ASSOCIATED
   1475 @cindex pointer, status
   1476 @cindex association status
   1477 
   1478 @table @asis
   1479 @item @emph{Description}:
   1480 @code{ASSOCIATED(POINTER [, TARGET])} determines the status of the pointer
   1481 @var{POINTER} or if @var{POINTER} is associated with the target @var{TARGET}.
   1482 
   1483 @item @emph{Standard}:
   1484 Fortran 90 and later
   1485 
   1486 @item @emph{Class}:
   1487 Inquiry function
   1488 
   1489 @item @emph{Syntax}:
   1490 @code{RESULT = ASSOCIATED(POINTER [, TARGET])}
   1491 
   1492 @item @emph{Arguments}:
   1493 @multitable @columnfractions .15 .70
   1494 @item @var{POINTER} @tab @var{POINTER} shall have the @code{POINTER} attribute
   1495 and it can be of any type.
   1496 @item @var{TARGET} @tab (Optional) @var{TARGET} shall be a pointer or
   1497 a target.  It must have the same type, kind type parameter, and
   1498 array rank as @var{POINTER}.
   1499 @end multitable
   1500 The association status of neither @var{POINTER} nor @var{TARGET} shall be
   1501 undefined.
   1502 
   1503 @item @emph{Return value}:
   1504 @code{ASSOCIATED(POINTER)} returns a scalar value of type @code{LOGICAL(4)}.
   1505 There are several cases:
   1506 @table @asis
   1507 @item (A) When the optional @var{TARGET} is not present then
   1508 @code{ASSOCIATED(POINTER)} is true if @var{POINTER} is associated with a target; otherwise, it returns false.
   1509 @item (B) If @var{TARGET} is present and a scalar target, the result is true if
   1510 @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
   1511 disassociated, the result is false.
   1512 @item (C) If @var{TARGET} is present and an array target, the result is true if
   1513 @var{TARGET} and @var{POINTER} have the same shape, are not zero-sized arrays,
   1514 are arrays whose elements are not zero-sized storage sequences, and
   1515 @var{TARGET} and @var{POINTER} occupy the same storage units in array element
   1516 order.
   1517 As in case(B), the result is false, if @var{POINTER} is disassociated.
   1518 @item (D) If @var{TARGET} is present and an scalar pointer, the result is true
   1519 if @var{TARGET} is associated with @var{POINTER}, the target associated with
   1520 @var{TARGET} are not zero-sized storage sequences and occupy the same storage
   1521 units.
   1522 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
   1523 @item (E) If @var{TARGET} is present and an array pointer, the result is true if
   1524 target associated with @var{POINTER} and the target associated with @var{TARGET}
   1525 have the same shape, are not zero-sized arrays, are arrays whose elements are
   1526 not zero-sized storage sequences, and @var{TARGET} and @var{POINTER} occupy
   1527 the same storage units in array element order.
   1528 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
   1529 @end table
   1530 
   1531 @item @emph{Example}:
   1532 @smallexample
   1533 program test_associated
   1534    implicit none
   1535    real, target  :: tgt(2) = (/1., 2./)
   1536    real, pointer :: ptr(:)
   1537    ptr => tgt
   1538    if (associated(ptr)     .eqv. .false.) call abort
   1539    if (associated(ptr,tgt) .eqv. .false.) call abort
   1540 end program test_associated
   1541 @end smallexample
   1542 
   1543 @item @emph{See also}:
   1544 @ref{NULL}
   1545 @end table
   1546 
   1547 
   1548 
   1549 @node ATAN
   1550 @section @code{ATAN} --- Arctangent function 
   1551 @fnindex ATAN
   1552 @fnindex DATAN
   1553 @cindex trigonometric function, tangent, inverse
   1554 @cindex tangent, inverse
   1555 
   1556 @table @asis
   1557 @item @emph{Description}:
   1558 @code{ATAN(X)} computes the arctangent of @var{X}.
   1559 
   1560 @item @emph{Standard}:
   1561 Fortran 77 and later, for a complex argument and for two arguments
   1562 Fortran 2008 or later
   1563 
   1564 @item @emph{Class}:
   1565 Elemental function
   1566 
   1567 @item @emph{Syntax}:
   1568 @multitable @columnfractions .80
   1569 @item @code{RESULT = ATAN(X)}
   1570 @item @code{RESULT = ATAN(Y, X)}
   1571 @end multitable
   1572 
   1573 @item @emph{Arguments}:
   1574 @multitable @columnfractions .15 .70
   1575 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
   1576 if @var{Y} is present, @var{X} shall be REAL.
   1577 @item @var{Y} @tab The type and kind type parameter shall be the same as @var{X}.
   1578 @end multitable
   1579 
   1580 @item @emph{Return value}:
   1581 The return value is of the same type and kind as @var{X}.
   1582 If @var{Y} is present, the result is identical to @code{ATAN2(Y,X)}.
   1583 Otherwise, it the arcus tangent of @var{X}, where the real part of
   1584 the result is in radians and lies in the range
   1585 @math{-\pi/2 \leq \Re \atan(x) \leq \pi/2}.
   1586 
   1587 @item @emph{Example}:
   1588 @smallexample
   1589 program test_atan
   1590   real(8) :: x = 2.866_8
   1591   x = atan(x)
   1592 end program test_atan
   1593 @end smallexample
   1594 
   1595 @item @emph{Specific names}:
   1596 @multitable @columnfractions .20 .23 .20 .33
   1597 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   1598 @item @code{ATAN(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   1599 @item @code{DATAN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   1600 @end multitable
   1601 
   1602 @item @emph{See also}:
   1603 Inverse function: @gol
   1604 @ref{TAN} @gol
   1605 Degrees function: @gol
   1606 @ref{ATAND}
   1607 @end table
   1608 
   1609 
   1610 
   1611 @node ATAND
   1612 @section @code{ATAND} --- Arctangent function, degrees
   1613 @fnindex ATAND
   1614 @fnindex DATAND
   1615 @cindex trigonometric function, tangent, inverse, degrees
   1616 @cindex tangent, inverse, degrees
   1617 
   1618 @table @asis
   1619 @item @emph{Description}:
   1620 @code{ATAND(X)} computes the arctangent of @var{X} in degrees (inverse of
   1621 @ref{TAND}).
   1622 
   1623 This function is for compatibility only and should be avoided in favor of
   1624 standard constructs wherever possible.
   1625 
   1626 @item @emph{Standard}:
   1627 GNU extension, enabled with @option{-fdec-math}.
   1628 
   1629 @item @emph{Class}:
   1630 Elemental function
   1631 
   1632 @item @emph{Syntax}:
   1633 @multitable @columnfractions .80
   1634 @item @code{RESULT = ATAND(X)}
   1635 @item @code{RESULT = ATAND(Y, X)}
   1636 @end multitable
   1637 
   1638 @item @emph{Arguments}:
   1639 @multitable @columnfractions .15 .70
   1640 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
   1641 if @var{Y} is present, @var{X} shall be REAL.
   1642 @item @var{Y} @tab The type and kind type parameter shall be the same as @var{X}.
   1643 @end multitable
   1644 
   1645 @item @emph{Return value}:
   1646 The return value is of the same type and kind as @var{X}.
   1647 If @var{Y} is present, the result is identical to @code{ATAND2(Y,X)}.
   1648 Otherwise, it is the arcus tangent of @var{X}, where the real part of
   1649 the result is in degrees and lies in the range
   1650 @math{-90 \leq \Re \atand(x) \leq 90}.
   1651 
   1652 @item @emph{Example}:
   1653 @smallexample
   1654 program test_atand
   1655   real(8) :: x = 2.866_8
   1656   x = atand(x)
   1657 end program test_atand
   1658 @end smallexample
   1659 
   1660 @item @emph{Specific names}:
   1661 @multitable @columnfractions .23 .23 .20 .30
   1662 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   1663 @item @code{ATAND(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab GNU extension
   1664 @item @code{DATAND(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   1665 @end multitable
   1666 
   1667 @item @emph{See also}:
   1668 Inverse function: @gol
   1669 @ref{TAND} @gol
   1670 Radians function: @gol
   1671 @ref{ATAN}
   1672 @end table
   1673 
   1674 
   1675 
   1676 @node ATAN2
   1677 @section @code{ATAN2} --- Arctangent function 
   1678 @fnindex ATAN2
   1679 @fnindex DATAN2
   1680 @cindex trigonometric function, tangent, inverse
   1681 @cindex tangent, inverse
   1682 
   1683 @table @asis
   1684 @item @emph{Description}:
   1685 @code{ATAN2(Y, X)} computes the principal value of the argument
   1686 function of the complex number @math{X + i Y}.  This function can
   1687 be used to transform from Cartesian into polar coordinates and
   1688 allows to determine the angle in the correct quadrant.
   1689 
   1690 @item @emph{Standard}:
   1691 Fortran 77 and later
   1692 
   1693 @item @emph{Class}:
   1694 Elemental function
   1695 
   1696 @item @emph{Syntax}:
   1697 @code{RESULT = ATAN2(Y, X)}
   1698 
   1699 @item @emph{Arguments}:
   1700 @multitable @columnfractions .15 .70
   1701 @item @var{Y} @tab The type shall be @code{REAL}.
   1702 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
   1703 If @var{Y} is zero, then @var{X} must be nonzero.
   1704 @end multitable
   1705 
   1706 @item @emph{Return value}:
   1707 The return value has the same type and kind type parameter as @var{Y}. It
   1708 is the principal value of the complex number @math{X + i Y}.  If @var{X}
   1709 is nonzero, then it lies in the range @math{-\pi \le \atan (x) \leq \pi}.
   1710 The sign is positive if @var{Y} is positive.  If @var{Y} is zero, then
   1711 the return value is zero if @var{X} is strictly positive, @math{\pi} if
   1712 @var{X} is negative and @var{Y} is positive zero (or the processor does
   1713 not handle signed zeros), and @math{-\pi} if @var{X} is negative and
   1714 @var{Y} is negative zero.  Finally, if @var{X} is zero, then the
   1715 magnitude of the result is @math{\pi/2}.
   1716 
   1717 @item @emph{Example}:
   1718 @smallexample
   1719 program test_atan2
   1720   real(4) :: x = 1.e0_4, y = 0.5e0_4
   1721   x = atan2(y,x)
   1722 end program test_atan2
   1723 @end smallexample
   1724 
   1725 @item @emph{Specific names}:
   1726 @multitable @columnfractions .22 .22 .20 .32
   1727 @headitem Name                @tab Argument            @tab Return type    @tab Standard
   1728 @item @code{ATAN2(X, Y)}  @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
   1729 @item @code{DATAN2(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab Fortran 77 and later
   1730 @end multitable
   1731 
   1732 @item @emph{See also}:
   1733 Alias: @gol
   1734 @ref{ATAN} @gol
   1735 Degrees function: @gol
   1736 @ref{ATAN2D}
   1737 @end table
   1738 
   1739 
   1740 
   1741 @node ATAN2D
   1742 @section @code{ATAN2D} --- Arctangent function, degrees
   1743 @fnindex ATAN2D
   1744 @fnindex DATAN2D
   1745 @cindex trigonometric function, tangent, inverse, degrees
   1746 @cindex tangent, inverse, degrees
   1747 
   1748 @table @asis
   1749 @item @emph{Description}:
   1750 @code{ATAN2D(Y, X)} computes the principal value of the argument
   1751 function of the complex number @math{X + i Y} in degrees.  This function can
   1752 be used to transform from Cartesian into polar coordinates and
   1753 allows to determine the angle in the correct quadrant.
   1754 
   1755 This function is for compatibility only and should be avoided in favor of
   1756 standard constructs wherever possible.
   1757 
   1758 @item @emph{Standard}:
   1759 GNU extension, enabled with @option{-fdec-math}.
   1760 
   1761 @item @emph{Class}:
   1762 Elemental function
   1763 
   1764 @item @emph{Syntax}:
   1765 @code{RESULT = ATAN2D(Y, X)}
   1766 
   1767 @item @emph{Arguments}:
   1768 @multitable @columnfractions .15 .70
   1769 @item @var{Y} @tab The type shall be @code{REAL}.
   1770 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
   1771 If @var{Y} is zero, then @var{X} must be nonzero.
   1772 @end multitable
   1773 
   1774 @item @emph{Return value}:
   1775 The return value has the same type and kind type parameter as @var{Y}. It
   1776 is the principal value of the complex number @math{X + i Y}.  If @var{X}
   1777 is nonzero, then it lies in the range @math{-180 \le \atan (x) \leq 180}.
   1778 The sign is positive if @var{Y} is positive.  If @var{Y} is zero, then
   1779 the return value is zero if @var{X} is strictly positive, @math{180} if
   1780 @var{X} is negative and @var{Y} is positive zero (or the processor does
   1781 not handle signed zeros), and @math{-180} if @var{X} is negative and
   1782 @var{Y} is negative zero.  Finally, if @var{X} is zero, then the
   1783 magnitude of the result is @math{90}.
   1784 
   1785 @item @emph{Example}:
   1786 @smallexample
   1787 program test_atan2d
   1788   real(4) :: x = 1.e0_4, y = 0.5e0_4
   1789   x = atan2d(y,x)
   1790 end program test_atan2d
   1791 @end smallexample
   1792 
   1793 @item @emph{Specific names}:
   1794 @multitable @columnfractions .23 .23 .20 .30
   1795 @headitem Name                @tab Argument            @tab Return type    @tab Standard
   1796 @item @code{ATAN2D(X, Y)}  @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab GNU extension
   1797 @item @code{DATAN2D(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab GNU extension
   1798 @end multitable
   1799 
   1800 @item @emph{See also}:
   1801 Alias: @gol
   1802 @ref{ATAND} @gol
   1803 Radians function: @gol
   1804 @ref{ATAN2}
   1805 @end table
   1806 
   1807 
   1808 
   1809 @node ATANH
   1810 @section @code{ATANH} --- Inverse hyperbolic tangent function
   1811 @fnindex ATANH
   1812 @fnindex DATANH
   1813 @cindex area hyperbolic tangent
   1814 @cindex inverse hyperbolic tangent
   1815 @cindex hyperbolic function, tangent, inverse
   1816 @cindex tangent, hyperbolic, inverse
   1817 
   1818 @table @asis
   1819 @item @emph{Description}:
   1820 @code{ATANH(X)} computes the inverse hyperbolic tangent of @var{X}.
   1821 
   1822 @item @emph{Standard}:
   1823 Fortran 2008 and later
   1824 
   1825 @item @emph{Class}:
   1826 Elemental function
   1827 
   1828 @item @emph{Syntax}:
   1829 @code{RESULT = ATANH(X)}
   1830 
   1831 @item @emph{Arguments}:
   1832 @multitable @columnfractions .15 .70
   1833 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   1834 @end multitable
   1835 
   1836 @item @emph{Return value}:
   1837 The return value has same type and kind as @var{X}. If @var{X} is
   1838 complex, the imaginary part of the result is in radians and lies between
   1839 @math{-\pi/2 \leq \Im \atanh(x) \leq \pi/2}.
   1840 
   1841 @item @emph{Example}:
   1842 @smallexample
   1843 PROGRAM test_atanh
   1844   REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
   1845   WRITE (*,*) ATANH(x)
   1846 END PROGRAM
   1847 @end smallexample
   1848 
   1849 @item @emph{Specific names}:
   1850 @multitable @columnfractions .20 .23 .20 .33
   1851 @headitem Name             @tab Argument          @tab Return type       @tab Standard
   1852 @item @code{DATANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   1853 @end multitable
   1854 
   1855 @item @emph{See also}:
   1856 Inverse function: @gol
   1857 @ref{TANH}
   1858 @end table
   1859 
   1860 
   1861 
   1862 @node ATOMIC_ADD
   1863 @section @code{ATOMIC_ADD} --- Atomic ADD operation
   1864 @fnindex ATOMIC_ADD
   1865 @cindex Atomic subroutine, add
   1866 
   1867 @table @asis
   1868 @item @emph{Description}:
   1869 @code{ATOMIC_ADD(ATOM, VALUE)} atomically adds the value of @var{VALUE} to the
   1870 variable @var{ATOM}. When @var{STAT} is present and the invocation was
   1871 successful, it is assigned the value 0. If it is present and the invocation
   1872 has failed, it is assigned a positive value; in particular, for a coindexed
   1873 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   1874 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   1875 failed, the value @code{STAT_FAILED_IMAGE}.
   1876 
   1877 @item @emph{Standard}:
   1878 TS 18508 or later
   1879 
   1880 @item @emph{Class}:
   1881 Atomic subroutine
   1882 
   1883 @item @emph{Syntax}:
   1884 @code{CALL ATOMIC_ADD (ATOM, VALUE [, STAT])}
   1885 
   1886 @item @emph{Arguments}:
   1887 @multitable @columnfractions .15 .70
   1888 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   1889 type with @code{ATOMIC_INT_KIND} kind.
   1890 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   1891 is different, the value is converted to the kind of @var{ATOM}.
   1892 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   1893 @end multitable
   1894 
   1895 @item @emph{Example}:
   1896 @smallexample
   1897 program atomic
   1898   use iso_fortran_env
   1899   integer(atomic_int_kind) :: atom[*]
   1900   call atomic_add (atom[1], this_image())
   1901 end program atomic
   1902 @end smallexample
   1903 
   1904 @item @emph{See also}:
   1905 @ref{ATOMIC_DEFINE}, @gol
   1906 @ref{ATOMIC_FETCH_ADD}, @gol
   1907 @ref{ISO_FORTRAN_ENV}, @gol
   1908 @ref{ATOMIC_AND}, @gol
   1909 @ref{ATOMIC_OR}, @gol
   1910 @ref{ATOMIC_XOR}
   1911 @end table
   1912 
   1913 
   1914 
   1915 
   1916 @node ATOMIC_AND
   1917 @section @code{ATOMIC_AND} --- Atomic bitwise AND operation
   1918 @fnindex ATOMIC_AND
   1919 @cindex Atomic subroutine, AND
   1920 
   1921 @table @asis
   1922 @item @emph{Description}:
   1923 @code{ATOMIC_AND(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
   1924 AND between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
   1925 and the invocation was successful, it is assigned the value 0. If it is present
   1926 and the invocation has failed, it is assigned a positive value; in particular,
   1927 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
   1928 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
   1929 image has failed, the value @code{STAT_FAILED_IMAGE}.
   1930 
   1931 @item @emph{Standard}:
   1932 TS 18508 or later
   1933 
   1934 @item @emph{Class}:
   1935 Atomic subroutine
   1936 
   1937 @item @emph{Syntax}:
   1938 @code{CALL ATOMIC_AND (ATOM, VALUE [, STAT])}
   1939 
   1940 @item @emph{Arguments}:
   1941 @multitable @columnfractions .15 .70
   1942 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   1943 type with @code{ATOMIC_INT_KIND} kind.
   1944 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   1945 is different, the value is converted to the kind of @var{ATOM}.
   1946 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   1947 @end multitable
   1948 
   1949 @item @emph{Example}:
   1950 @smallexample
   1951 program atomic
   1952   use iso_fortran_env
   1953   integer(atomic_int_kind) :: atom[*]
   1954   call atomic_and (atom[1], int(b'10100011101'))
   1955 end program atomic
   1956 @end smallexample
   1957 
   1958 @item @emph{See also}:
   1959 @ref{ATOMIC_DEFINE}, @gol
   1960 @ref{ATOMIC_FETCH_AND}, @gol
   1961 @ref{ISO_FORTRAN_ENV}, @gol
   1962 @ref{ATOMIC_ADD}, @gol
   1963 @ref{ATOMIC_OR}, @gol
   1964 @ref{ATOMIC_XOR}
   1965 @end table
   1966 
   1967 
   1968 
   1969 @node ATOMIC_CAS
   1970 @section @code{ATOMIC_CAS} --- Atomic compare and swap
   1971 @fnindex ATOMIC_DEFINE
   1972 @cindex Atomic subroutine, compare and swap
   1973 
   1974 @table @asis
   1975 @item @emph{Description}:
   1976 @code{ATOMIC_CAS} compares the variable @var{ATOM} with the value of
   1977 @var{COMPARE}; if the value is the same, @var{ATOM} is set to the value
   1978 of @var{NEW}. Additionally, @var{OLD} is set to the value of @var{ATOM}
   1979 that was used for the comparison.  When @var{STAT} is present and the invocation
   1980 was successful, it is assigned the value 0. If it is present and the invocation
   1981 has failed, it is assigned a positive value; in particular, for a coindexed
   1982 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   1983 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   1984 failed, the value @code{STAT_FAILED_IMAGE}.
   1985 
   1986 @item @emph{Standard}:
   1987 TS 18508 or later
   1988 
   1989 @item @emph{Class}:
   1990 Atomic subroutine
   1991 
   1992 @item @emph{Syntax}:
   1993 @code{CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])}
   1994 
   1995 @item @emph{Arguments}:
   1996 @multitable @columnfractions .15 .70
   1997 @item @var{ATOM}    @tab Scalar coarray or coindexed variable of either integer
   1998 type with @code{ATOMIC_INT_KIND} kind or logical type with
   1999 @code{ATOMIC_LOGICAL_KIND} kind.
   2000 @item @var{OLD}     @tab Scalar of the same type and kind as @var{ATOM}.
   2001 @item @var{COMPARE} @tab Scalar variable of the same type and kind as
   2002 @var{ATOM}.
   2003 @item @var{NEW}     @tab Scalar variable of the same type as @var{ATOM}. If kind
   2004 is different, the value is converted to the kind of @var{ATOM}.
   2005 @item @var{STAT}    @tab (optional) Scalar default-kind integer variable.
   2006 @end multitable
   2007 
   2008 @item @emph{Example}:
   2009 @smallexample
   2010 program atomic
   2011   use iso_fortran_env
   2012   logical(atomic_logical_kind) :: atom[*], prev
   2013   call atomic_cas (atom[1], prev, .false., .true.))
   2014 end program atomic
   2015 @end smallexample
   2016 
   2017 @item @emph{See also}:
   2018 @ref{ATOMIC_DEFINE}, @gol
   2019 @ref{ATOMIC_REF}, @gol
   2020 @ref{ISO_FORTRAN_ENV}
   2021 @end table
   2022 
   2023 
   2024 
   2025 @node ATOMIC_DEFINE
   2026 @section @code{ATOMIC_DEFINE} --- Setting a variable atomically
   2027 @fnindex ATOMIC_DEFINE
   2028 @cindex Atomic subroutine, define
   2029 
   2030 @table @asis
   2031 @item @emph{Description}:
   2032 @code{ATOMIC_DEFINE(ATOM, VALUE)} defines the variable @var{ATOM} with the value
   2033 @var{VALUE} atomically. When @var{STAT} is present and the invocation was
   2034 successful, it is assigned the value 0. If it is present and the invocation
   2035 has failed, it is assigned a positive value; in particular, for a coindexed
   2036 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2037 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2038 failed, the value @code{STAT_FAILED_IMAGE}.
   2039 
   2040 @item @emph{Standard}:
   2041 Fortran 2008 and later; with @var{STAT}, TS 18508 or later
   2042 
   2043 @item @emph{Class}:
   2044 Atomic subroutine
   2045 
   2046 @item @emph{Syntax}:
   2047 @code{CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])}
   2048 
   2049 @item @emph{Arguments}:
   2050 @multitable @columnfractions .15 .70
   2051 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of either integer
   2052 type with @code{ATOMIC_INT_KIND} kind or logical type with
   2053 @code{ATOMIC_LOGICAL_KIND} kind.
   2054 
   2055 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2056 is different, the value is converted to the kind of @var{ATOM}.
   2057 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2058 @end multitable
   2059 
   2060 @item @emph{Example}:
   2061 @smallexample
   2062 program atomic
   2063   use iso_fortran_env
   2064   integer(atomic_int_kind) :: atom[*]
   2065   call atomic_define (atom[1], this_image())
   2066 end program atomic
   2067 @end smallexample
   2068 
   2069 @item @emph{See also}:
   2070 @ref{ATOMIC_REF}, @gol
   2071 @ref{ATOMIC_CAS}, @gol
   2072 @ref{ISO_FORTRAN_ENV}, @gol
   2073 @ref{ATOMIC_ADD}, @gol
   2074 @ref{ATOMIC_AND}, @gol
   2075 @ref{ATOMIC_OR}, @gol
   2076 @ref{ATOMIC_XOR}
   2077 @end table
   2078 
   2079 
   2080 
   2081 @node ATOMIC_FETCH_ADD
   2082 @section @code{ATOMIC_FETCH_ADD} --- Atomic ADD operation with prior fetch
   2083 @fnindex ATOMIC_FETCH_ADD
   2084 @cindex Atomic subroutine, ADD with fetch
   2085 
   2086 @table @asis
   2087 @item @emph{Description}:
   2088 @code{ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)} atomically stores the value of
   2089 @var{ATOM} in @var{OLD} and adds the value of @var{VALUE} to the
   2090 variable @var{ATOM}. When @var{STAT} is present and the invocation was
   2091 successful, it is assigned the value 0. If it is present and the invocation
   2092 has failed, it is assigned a positive value; in particular, for a coindexed
   2093 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2094 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2095 failed, the value @code{STAT_FAILED_IMAGE}.
   2096 
   2097 @item @emph{Standard}:
   2098 TS 18508 or later
   2099 
   2100 @item @emph{Class}:
   2101 Atomic subroutine
   2102 
   2103 @item @emph{Syntax}:
   2104 @code{CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])}
   2105 
   2106 @item @emph{Arguments}:
   2107 @multitable @columnfractions .15 .70
   2108 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2109 type with @code{ATOMIC_INT_KIND} kind.
   2110 @code{ATOMIC_LOGICAL_KIND} kind.
   2111 
   2112 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2113 is different, the value is converted to the kind of @var{ATOM}.
   2114 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2115 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2116 @end multitable
   2117 
   2118 @item @emph{Example}:
   2119 @smallexample
   2120 program atomic
   2121   use iso_fortran_env
   2122   integer(atomic_int_kind) :: atom[*], old
   2123   call atomic_add (atom[1], this_image(), old)
   2124 end program atomic
   2125 @end smallexample
   2126 
   2127 @item @emph{See also}:
   2128 @ref{ATOMIC_DEFINE}, @gol
   2129 @ref{ATOMIC_ADD}, @gol
   2130 @ref{ISO_FORTRAN_ENV}, @gol
   2131 @ref{ATOMIC_FETCH_AND}, @gol
   2132 @ref{ATOMIC_FETCH_OR}, @gol
   2133 @ref{ATOMIC_FETCH_XOR}
   2134 @end table
   2135 
   2136 
   2137 
   2138 @node ATOMIC_FETCH_AND
   2139 @section @code{ATOMIC_FETCH_AND} --- Atomic bitwise AND operation with prior fetch
   2140 @fnindex ATOMIC_FETCH_AND
   2141 @cindex Atomic subroutine, AND with fetch
   2142 
   2143 @table @asis
   2144 @item @emph{Description}:
   2145 @code{ATOMIC_AND(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
   2146 @var{OLD} and defines @var{ATOM} with the bitwise AND between the values of
   2147 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
   2148 successful, it is assigned the value 0. If it is present and the invocation has
   2149 failed, it is assigned a positive value; in particular, for a coindexed
   2150 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2151 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2152 failed, the value @code{STAT_FAILED_IMAGE}.
   2153 
   2154 @item @emph{Standard}:
   2155 TS 18508 or later
   2156 
   2157 @item @emph{Class}:
   2158 Atomic subroutine
   2159 
   2160 @item @emph{Syntax}:
   2161 @code{CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])}
   2162 
   2163 @item @emph{Arguments}:
   2164 @multitable @columnfractions .15 .70
   2165 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2166 type with @code{ATOMIC_INT_KIND} kind.
   2167 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2168 is different, the value is converted to the kind of @var{ATOM}.
   2169 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2170 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2171 @end multitable
   2172 
   2173 @item @emph{Example}:
   2174 @smallexample
   2175 program atomic
   2176   use iso_fortran_env
   2177   integer(atomic_int_kind) :: atom[*], old
   2178   call atomic_fetch_and (atom[1], int(b'10100011101'), old)
   2179 end program atomic
   2180 @end smallexample
   2181 
   2182 @item @emph{See also}:
   2183 @ref{ATOMIC_DEFINE}, @gol
   2184 @ref{ATOMIC_AND}, @gol
   2185 @ref{ISO_FORTRAN_ENV}, @gol
   2186 @ref{ATOMIC_FETCH_ADD}, @gol
   2187 @ref{ATOMIC_FETCH_OR}, @gol
   2188 @ref{ATOMIC_FETCH_XOR}
   2189 @end table
   2190 
   2191 
   2192 
   2193 @node ATOMIC_FETCH_OR
   2194 @section @code{ATOMIC_FETCH_OR} --- Atomic bitwise OR operation with prior fetch
   2195 @fnindex ATOMIC_FETCH_OR
   2196 @cindex Atomic subroutine, OR with fetch
   2197 
   2198 @table @asis
   2199 @item @emph{Description}:
   2200 @code{ATOMIC_OR(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
   2201 @var{OLD} and defines @var{ATOM} with the bitwise OR between the values of
   2202 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
   2203 successful, it is assigned the value 0. If it is present and the invocation has
   2204 failed, it is assigned a positive value; in particular, for a coindexed
   2205 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2206 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2207 failed, the value @code{STAT_FAILED_IMAGE}.
   2208 
   2209 @item @emph{Standard}:
   2210 TS 18508 or later
   2211 
   2212 @item @emph{Class}:
   2213 Atomic subroutine
   2214 
   2215 @item @emph{Syntax}:
   2216 @code{CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])}
   2217 
   2218 @item @emph{Arguments}:
   2219 @multitable @columnfractions .15 .70
   2220 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2221 type with @code{ATOMIC_INT_KIND} kind.
   2222 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2223 is different, the value is converted to the kind of @var{ATOM}.
   2224 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2225 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2226 @end multitable
   2227 
   2228 @item @emph{Example}:
   2229 @smallexample
   2230 program atomic
   2231   use iso_fortran_env
   2232   integer(atomic_int_kind) :: atom[*], old
   2233   call atomic_fetch_or (atom[1], int(b'10100011101'), old)
   2234 end program atomic
   2235 @end smallexample
   2236 
   2237 @item @emph{See also}:
   2238 @ref{ATOMIC_DEFINE}, @gol
   2239 @ref{ATOMIC_OR}, @gol
   2240 @ref{ISO_FORTRAN_ENV}, @gol
   2241 @ref{ATOMIC_FETCH_ADD}, @gol
   2242 @ref{ATOMIC_FETCH_AND}, @gol
   2243 @ref{ATOMIC_FETCH_XOR}
   2244 @end table
   2245 
   2246 
   2247 
   2248 @node ATOMIC_FETCH_XOR
   2249 @section @code{ATOMIC_FETCH_XOR} --- Atomic bitwise XOR operation with prior fetch
   2250 @fnindex ATOMIC_FETCH_XOR
   2251 @cindex Atomic subroutine, XOR with fetch
   2252 
   2253 @table @asis
   2254 @item @emph{Description}:
   2255 @code{ATOMIC_XOR(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
   2256 @var{OLD} and defines @var{ATOM} with the bitwise XOR between the values of
   2257 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
   2258 successful, it is assigned the value 0. If it is present and the invocation has
   2259 failed, it is assigned a positive value; in particular, for a coindexed
   2260 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2261 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2262 failed, the value @code{STAT_FAILED_IMAGE}.
   2263 
   2264 @item @emph{Standard}:
   2265 TS 18508 or later
   2266 
   2267 @item @emph{Class}:
   2268 Atomic subroutine
   2269 
   2270 @item @emph{Syntax}:
   2271 @code{CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])}
   2272 
   2273 @item @emph{Arguments}:
   2274 @multitable @columnfractions .15 .70
   2275 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2276 type with @code{ATOMIC_INT_KIND} kind.
   2277 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2278 is different, the value is converted to the kind of @var{ATOM}.
   2279 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2280 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2281 @end multitable
   2282 
   2283 @item @emph{Example}:
   2284 @smallexample
   2285 program atomic
   2286   use iso_fortran_env
   2287   integer(atomic_int_kind) :: atom[*], old
   2288   call atomic_fetch_xor (atom[1], int(b'10100011101'), old)
   2289 end program atomic
   2290 @end smallexample
   2291 
   2292 @item @emph{See also}:
   2293 @ref{ATOMIC_DEFINE}, @gol
   2294 @ref{ATOMIC_XOR}, @gol
   2295 @ref{ISO_FORTRAN_ENV}, @gol
   2296 @ref{ATOMIC_FETCH_ADD}, @gol
   2297 @ref{ATOMIC_FETCH_AND}, @gol
   2298 @ref{ATOMIC_FETCH_OR}
   2299 @end table
   2300 
   2301 
   2302 
   2303 @node ATOMIC_OR
   2304 @section @code{ATOMIC_OR} --- Atomic bitwise OR operation
   2305 @fnindex ATOMIC_OR
   2306 @cindex Atomic subroutine, OR
   2307 
   2308 @table @asis
   2309 @item @emph{Description}:
   2310 @code{ATOMIC_OR(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
   2311 AND between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
   2312 and the invocation was successful, it is assigned the value 0. If it is present
   2313 and the invocation has failed, it is assigned a positive value; in particular,
   2314 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
   2315 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
   2316 image has failed, the value @code{STAT_FAILED_IMAGE}.
   2317 
   2318 @item @emph{Standard}:
   2319 TS 18508 or later
   2320 
   2321 @item @emph{Class}:
   2322 Atomic subroutine
   2323 
   2324 @item @emph{Syntax}:
   2325 @code{CALL ATOMIC_OR (ATOM, VALUE [, STAT])}
   2326 
   2327 @item @emph{Arguments}:
   2328 @multitable @columnfractions .15 .70
   2329 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2330 type with @code{ATOMIC_INT_KIND} kind.
   2331 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2332 is different, the value is converted to the kind of @var{ATOM}.
   2333 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2334 @end multitable
   2335 
   2336 @item @emph{Example}:
   2337 @smallexample
   2338 program atomic
   2339   use iso_fortran_env
   2340   integer(atomic_int_kind) :: atom[*]
   2341   call atomic_or (atom[1], int(b'10100011101'))
   2342 end program atomic
   2343 @end smallexample
   2344 
   2345 @item @emph{See also}:
   2346 @ref{ATOMIC_DEFINE}, @gol
   2347 @ref{ATOMIC_FETCH_OR}, @gol
   2348 @ref{ISO_FORTRAN_ENV}, @gol
   2349 @ref{ATOMIC_ADD}, @gol
   2350 @ref{ATOMIC_OR}, @gol
   2351 @ref{ATOMIC_XOR}
   2352 @end table
   2353 
   2354 
   2355 
   2356 @node ATOMIC_REF
   2357 @section @code{ATOMIC_REF} --- Obtaining the value of a variable atomically
   2358 @fnindex ATOMIC_REF
   2359 @cindex Atomic subroutine, reference
   2360 
   2361 @table @asis
   2362 @item @emph{Description}:
   2363 @code{ATOMIC_DEFINE(ATOM, VALUE)} atomically assigns the value of the
   2364 variable @var{ATOM} to @var{VALUE}. When @var{STAT} is present and the
   2365 invocation was successful, it is assigned the value 0. If it is present and the
   2366 invocation has failed, it is assigned a positive value; in particular, for a
   2367 coindexed @var{ATOM}, if the remote image has stopped, it is assigned the value
   2368 of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image
   2369 has failed, the value @code{STAT_FAILED_IMAGE}.
   2370 
   2371 
   2372 @item @emph{Standard}:
   2373 Fortran 2008 and later; with @var{STAT}, TS 18508 or later
   2374 
   2375 @item @emph{Class}:
   2376 Atomic subroutine
   2377 
   2378 @item @emph{Syntax}:
   2379 @code{CALL ATOMIC_REF(VALUE, ATOM [, STAT])}
   2380 
   2381 @item @emph{Arguments}:
   2382 @multitable @columnfractions .15 .70
   2383 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2384 is different, the value is converted to the kind of @var{ATOM}.
   2385 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of either integer
   2386 type with @code{ATOMIC_INT_KIND} kind or logical type with
   2387 @code{ATOMIC_LOGICAL_KIND} kind.
   2388 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2389 @end multitable
   2390 
   2391 @item @emph{Example}:
   2392 @smallexample
   2393 program atomic
   2394   use iso_fortran_env
   2395   logical(atomic_logical_kind) :: atom[*]
   2396   logical :: val
   2397   call atomic_ref (atom, .false.)
   2398   ! ...
   2399   call atomic_ref (atom, val)
   2400   if (val) then
   2401     print *, "Obtained"
   2402   end if
   2403 end program atomic
   2404 @end smallexample
   2405 
   2406 @item @emph{See also}:
   2407 @ref{ATOMIC_DEFINE}, @gol
   2408 @ref{ATOMIC_CAS}, @gol
   2409 @ref{ISO_FORTRAN_ENV}, @gol
   2410 @ref{ATOMIC_FETCH_ADD}, @gol
   2411 @ref{ATOMIC_FETCH_AND}, @gol
   2412 @ref{ATOMIC_FETCH_OR}, @gol
   2413 @ref{ATOMIC_FETCH_XOR}
   2414 @end table
   2415 
   2416 
   2417 @node ATOMIC_XOR
   2418 @section @code{ATOMIC_XOR} --- Atomic bitwise OR operation
   2419 @fnindex ATOMIC_XOR
   2420 @cindex Atomic subroutine, XOR
   2421 
   2422 @table @asis
   2423 @item @emph{Description}:
   2424 @code{ATOMIC_AND(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
   2425 XOR between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
   2426 and the invocation was successful, it is assigned the value 0. If it is present
   2427 and the invocation has failed, it is assigned a positive value; in particular,
   2428 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
   2429 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
   2430 image has failed, the value @code{STAT_FAILED_IMAGE}.
   2431 
   2432 @item @emph{Standard}:
   2433 TS 18508 or later
   2434 
   2435 @item @emph{Class}:
   2436 Atomic subroutine
   2437 
   2438 @item @emph{Syntax}:
   2439 @code{CALL ATOMIC_XOR (ATOM, VALUE [, STAT])}
   2440 
   2441 @item @emph{Arguments}:
   2442 @multitable @columnfractions .15 .70
   2443 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2444 type with @code{ATOMIC_INT_KIND} kind.
   2445 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2446 is different, the value is converted to the kind of @var{ATOM}.
   2447 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2448 @end multitable
   2449 
   2450 @item @emph{Example}:
   2451 @smallexample
   2452 program atomic
   2453   use iso_fortran_env
   2454   integer(atomic_int_kind) :: atom[*]
   2455   call atomic_xor (atom[1], int(b'10100011101'))
   2456 end program atomic
   2457 @end smallexample
   2458 
   2459 @item @emph{See also}:
   2460 @ref{ATOMIC_DEFINE}, @gol
   2461 @ref{ATOMIC_FETCH_XOR}, @gol
   2462 @ref{ISO_FORTRAN_ENV}, @gol
   2463 @ref{ATOMIC_ADD}, @gol
   2464 @ref{ATOMIC_OR}, @gol
   2465 @ref{ATOMIC_XOR}
   2466 @end table
   2467 
   2468 
   2469 @node BACKTRACE
   2470 @section @code{BACKTRACE} --- Show a backtrace
   2471 @fnindex BACKTRACE
   2472 @cindex backtrace
   2473 
   2474 @table @asis
   2475 @item @emph{Description}:
   2476 @code{BACKTRACE} shows a backtrace at an arbitrary place in user code. Program
   2477 execution continues normally afterwards. The backtrace information is printed
   2478 to the unit corresponding to @code{ERROR_UNIT} in @code{ISO_FORTRAN_ENV}.
   2479 
   2480 @item @emph{Standard}:
   2481 GNU extension
   2482 
   2483 @item @emph{Class}:
   2484 Subroutine
   2485 
   2486 @item @emph{Syntax}:
   2487 @code{CALL BACKTRACE}
   2488 
   2489 @item @emph{Arguments}:
   2490 None
   2491 
   2492 @item @emph{See also}:
   2493 @ref{ABORT}
   2494 @end table
   2495 
   2496 
   2497 
   2498 @node BESSEL_J0
   2499 @section @code{BESSEL_J0} --- Bessel function of the first kind of order 0
   2500 @fnindex BESSEL_J0
   2501 @fnindex BESJ0
   2502 @fnindex DBESJ0
   2503 @cindex Bessel function, first kind
   2504 
   2505 @table @asis
   2506 @item @emph{Description}:
   2507 @code{BESSEL_J0(X)} computes the Bessel function of the first kind of
   2508 order 0 of @var{X}. This function is available under the name
   2509 @code{BESJ0} as a GNU extension.
   2510 
   2511 @item @emph{Standard}:
   2512 Fortran 2008 and later
   2513 
   2514 @item @emph{Class}:
   2515 Elemental function
   2516 
   2517 @item @emph{Syntax}:
   2518 @code{RESULT = BESSEL_J0(X)}
   2519 
   2520 @item @emph{Arguments}:
   2521 @multitable @columnfractions .15 .70
   2522 @item @var{X} @tab The type shall be @code{REAL}.
   2523 @end multitable
   2524 
   2525 @item @emph{Return value}:
   2526 The return value is of type @code{REAL} and lies in the
   2527 range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. It has the same
   2528 kind as @var{X}.
   2529 
   2530 @item @emph{Example}:
   2531 @smallexample
   2532 program test_besj0
   2533   real(8) :: x = 0.0_8
   2534   x = bessel_j0(x)
   2535 end program test_besj0
   2536 @end smallexample
   2537 
   2538 @item @emph{Specific names}:
   2539 @multitable @columnfractions .21 .22 .20 .33
   2540 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   2541 @item @code{DBESJ0(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}   @tab GNU extension
   2542 @end multitable
   2543 @end table
   2544 
   2545 
   2546 
   2547 @node BESSEL_J1
   2548 @section @code{BESSEL_J1} --- Bessel function of the first kind of order 1
   2549 @fnindex BESSEL_J1
   2550 @fnindex BESJ1
   2551 @fnindex DBESJ1
   2552 @cindex Bessel function, first kind
   2553 
   2554 @table @asis
   2555 @item @emph{Description}:
   2556 @code{BESSEL_J1(X)} computes the Bessel function of the first kind of
   2557 order 1 of @var{X}. This function is available under the name
   2558 @code{BESJ1} as a GNU extension.
   2559 
   2560 @item @emph{Standard}:
   2561 Fortran 2008
   2562 
   2563 @item @emph{Class}:
   2564 Elemental function
   2565 
   2566 @item @emph{Syntax}:
   2567 @code{RESULT = BESSEL_J1(X)}
   2568 
   2569 @item @emph{Arguments}:
   2570 @multitable @columnfractions .15 .70
   2571 @item @var{X} @tab The type shall be @code{REAL}.
   2572 @end multitable
   2573 
   2574 @item @emph{Return value}:
   2575 The return value is of type @code{REAL} and lies in the
   2576 range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. It has the same
   2577 kind as @var{X}.
   2578 
   2579 @item @emph{Example}:
   2580 @smallexample
   2581 program test_besj1
   2582   real(8) :: x = 1.0_8
   2583   x = bessel_j1(x)
   2584 end program test_besj1
   2585 @end smallexample
   2586 
   2587 @item @emph{Specific names}:
   2588 @multitable @columnfractions .20 .23 .20 .33
   2589 @headitem Name             @tab Argument          @tab Return type       @tab Standard
   2590 @item @code{DBESJ1(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   2591 @end multitable
   2592 @end table
   2593 
   2594 
   2595 
   2596 @node BESSEL_JN
   2597 @section @code{BESSEL_JN} --- Bessel function of the first kind
   2598 @fnindex BESSEL_JN
   2599 @fnindex BESJN
   2600 @fnindex DBESJN
   2601 @cindex Bessel function, first kind
   2602 
   2603 @table @asis
   2604 @item @emph{Description}:
   2605 @code{BESSEL_JN(N, X)} computes the Bessel function of the first kind of
   2606 order @var{N} of @var{X}. This function is available under the name
   2607 @code{BESJN} as a GNU extension.  If @var{N} and @var{X} are arrays,
   2608 their ranks and shapes shall conform.  
   2609 
   2610 @code{BESSEL_JN(N1, N2, X)} returns an array with the Bessel functions
   2611 of the first kind of the orders @var{N1} to @var{N2}.
   2612 
   2613 @item @emph{Standard}:
   2614 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
   2615 
   2616 @item @emph{Class}:
   2617 Elemental function, except for the transformational function
   2618 @code{BESSEL_JN(N1, N2, X)}
   2619 
   2620 @item @emph{Syntax}:
   2621 @multitable @columnfractions .80
   2622 @item @code{RESULT = BESSEL_JN(N, X)}
   2623 @item @code{RESULT = BESSEL_JN(N1, N2, X)}
   2624 @end multitable
   2625 
   2626 @item @emph{Arguments}:
   2627 @multitable @columnfractions .15 .70
   2628 @item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER}.
   2629 @item @var{N1} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2630 @item @var{N2} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2631 @item @var{X} @tab Shall be a scalar or an array of type  @code{REAL};
   2632 for @code{BESSEL_JN(N1, N2, X)} it shall be scalar.
   2633 @end multitable
   2634 
   2635 @item @emph{Return value}:
   2636 The return value is a scalar of type @code{REAL}. It has the same
   2637 kind as @var{X}.
   2638 
   2639 @item @emph{Note}:
   2640 The transformational function uses a recurrence algorithm which might,
   2641 for some values of @var{X}, lead to different results than calls to
   2642 the elemental function.
   2643 
   2644 @item @emph{Example}:
   2645 @smallexample
   2646 program test_besjn
   2647   real(8) :: x = 1.0_8
   2648   x = bessel_jn(5,x)
   2649 end program test_besjn
   2650 @end smallexample
   2651 
   2652 @item @emph{Specific names}:
   2653 @multitable @columnfractions .22 .22 .20 .32
   2654 @headitem Name                @tab Argument            @tab Return type       @tab Standard
   2655 @item @code{DBESJN(N, X)} @tab @code{INTEGER N}    @tab @code{REAL(8)}    @tab GNU extension
   2656 @item                     @tab @code{REAL(8) X}    @tab                   @tab
   2657 @end multitable
   2658 @end table
   2659 
   2660 
   2661 
   2662 @node BESSEL_Y0
   2663 @section @code{BESSEL_Y0} --- Bessel function of the second kind of order 0
   2664 @fnindex BESSEL_Y0
   2665 @fnindex BESY0
   2666 @fnindex DBESY0
   2667 @cindex Bessel function, second kind
   2668 
   2669 @table @asis
   2670 @item @emph{Description}:
   2671 @code{BESSEL_Y0(X)} computes the Bessel function of the second kind of
   2672 order 0 of @var{X}. This function is available under the name
   2673 @code{BESY0} as a GNU extension.
   2674 
   2675 @item @emph{Standard}:
   2676 Fortran 2008 and later
   2677 
   2678 @item @emph{Class}:
   2679 Elemental function
   2680 
   2681 @item @emph{Syntax}:
   2682 @code{RESULT = BESSEL_Y0(X)}
   2683 
   2684 @item @emph{Arguments}:
   2685 @multitable @columnfractions .15 .70
   2686 @item @var{X} @tab The type shall be @code{REAL}.
   2687 @end multitable
   2688 
   2689 @item @emph{Return value}:
   2690 The return value is of type @code{REAL}. It has the same kind as @var{X}.
   2691 
   2692 @item @emph{Example}:
   2693 @smallexample
   2694 program test_besy0
   2695   real(8) :: x = 0.0_8
   2696   x = bessel_y0(x)
   2697 end program test_besy0
   2698 @end smallexample
   2699 
   2700 @item @emph{Specific names}:
   2701 @multitable @columnfractions .20 .23 .20 .33
   2702 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   2703 @item @code{DBESY0(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   2704 @end multitable
   2705 @end table
   2706 
   2707 
   2708 
   2709 @node BESSEL_Y1
   2710 @section @code{BESSEL_Y1} --- Bessel function of the second kind of order 1
   2711 @fnindex BESSEL_Y1
   2712 @fnindex BESY1
   2713 @fnindex DBESY1
   2714 @cindex Bessel function, second kind
   2715 
   2716 @table @asis
   2717 @item @emph{Description}:
   2718 @code{BESSEL_Y1(X)} computes the Bessel function of the second kind of
   2719 order 1 of @var{X}. This function is available under the name
   2720 @code{BESY1} as a GNU extension.
   2721 
   2722 @item @emph{Standard}:
   2723 Fortran 2008 and later
   2724 
   2725 @item @emph{Class}:
   2726 Elemental function
   2727 
   2728 @item @emph{Syntax}:
   2729 @code{RESULT = BESSEL_Y1(X)}
   2730 
   2731 @item @emph{Arguments}:
   2732 @multitable @columnfractions .15 .70
   2733 @item @var{X} @tab The type shall be @code{REAL}.
   2734 @end multitable
   2735 
   2736 @item @emph{Return value}:
   2737 The return value is of type @code{REAL}. It has the same kind as @var{X}.
   2738 
   2739 @item @emph{Example}:
   2740 @smallexample
   2741 program test_besy1
   2742   real(8) :: x = 1.0_8
   2743   x = bessel_y1(x)
   2744 end program test_besy1
   2745 @end smallexample
   2746 
   2747 @item @emph{Specific names}:
   2748 @multitable @columnfractions .20 .23 .20 .33
   2749 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   2750 @item @code{DBESY1(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   2751 @end multitable
   2752 @end table
   2753 
   2754 
   2755 
   2756 @node BESSEL_YN
   2757 @section @code{BESSEL_YN} --- Bessel function of the second kind
   2758 @fnindex BESSEL_YN
   2759 @fnindex BESYN
   2760 @fnindex DBESYN
   2761 @cindex Bessel function, second kind
   2762 
   2763 @table @asis
   2764 @item @emph{Description}:
   2765 @code{BESSEL_YN(N, X)} computes the Bessel function of the second kind of
   2766 order @var{N} of @var{X}. This function is available under the name
   2767 @code{BESYN} as a GNU extension.  If @var{N} and @var{X} are arrays,
   2768 their ranks and shapes shall conform.  
   2769 
   2770 @code{BESSEL_YN(N1, N2, X)} returns an array with the Bessel functions
   2771 of the first kind of the orders @var{N1} to @var{N2}.
   2772 
   2773 @item @emph{Standard}:
   2774 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
   2775 
   2776 @item @emph{Class}:
   2777 Elemental function, except for the transformational function
   2778 @code{BESSEL_YN(N1, N2, X)}
   2779 
   2780 @item @emph{Syntax}:
   2781 @multitable @columnfractions .80
   2782 @item @code{RESULT = BESSEL_YN(N, X)}
   2783 @item @code{RESULT = BESSEL_YN(N1, N2, X)}
   2784 @end multitable
   2785 
   2786 @item @emph{Arguments}:
   2787 @multitable @columnfractions .15 .70
   2788 @item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER} .
   2789 @item @var{N1} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2790 @item @var{N2} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2791 @item @var{X} @tab Shall be a scalar or an array of type  @code{REAL};
   2792 for @code{BESSEL_YN(N1, N2, X)} it shall be scalar.
   2793 @end multitable
   2794 
   2795 @item @emph{Return value}:
   2796 The return value is a scalar of type @code{REAL}. It has the same
   2797 kind as @var{X}.
   2798 
   2799 @item @emph{Note}:
   2800 The transformational function uses a recurrence algorithm which might,
   2801 for some values of @var{X}, lead to different results than calls to
   2802 the elemental function.
   2803 
   2804 @item @emph{Example}:
   2805 @smallexample
   2806 program test_besyn
   2807   real(8) :: x = 1.0_8
   2808   x = bessel_yn(5,x)
   2809 end program test_besyn
   2810 @end smallexample
   2811 
   2812 @item @emph{Specific names}:
   2813 @multitable @columnfractions .20 .23 .20 .33
   2814 @headitem Name               @tab Argument            @tab Return type     @tab Standard
   2815 @item @code{DBESYN(N,X)} @tab @code{INTEGER N} @tab @code{REAL(8)}  @tab GNU extension
   2816 @item                    @tab @code{REAL(8) X} @tab                 @tab
   2817 @end multitable
   2818 @end table
   2819 
   2820 
   2821 
   2822 @node BGE
   2823 @section @code{BGE} --- Bitwise greater than or equal to
   2824 @fnindex BGE
   2825 @cindex bitwise comparison
   2826 
   2827 @table @asis
   2828 @item @emph{Description}:
   2829 Determines whether an integral is a bitwise greater than or equal to
   2830 another.
   2831 
   2832 @item @emph{Standard}:
   2833 Fortran 2008 and later
   2834 
   2835 @item @emph{Class}:
   2836 Elemental function
   2837 
   2838 @item @emph{Syntax}:
   2839 @code{RESULT = BGE(I, J)}
   2840 
   2841 @item @emph{Arguments}:
   2842 @multitable @columnfractions .15 .70
   2843 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2844 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2845 as @var{I}.
   2846 @end multitable
   2847 
   2848 @item @emph{Return value}:
   2849 The return value is of type @code{LOGICAL} and of the default kind.
   2850 
   2851 @item @emph{See also}:
   2852 @ref{BGT}, @gol
   2853 @ref{BLE}, @gol
   2854 @ref{BLT}
   2855 @end table
   2856 
   2857 
   2858 
   2859 @node BGT
   2860 @section @code{BGT} --- Bitwise greater than
   2861 @fnindex BGT
   2862 @cindex bitwise comparison
   2863 
   2864 @table @asis
   2865 @item @emph{Description}:
   2866 Determines whether an integral is a bitwise greater than another.
   2867 
   2868 @item @emph{Standard}:
   2869 Fortran 2008 and later
   2870 
   2871 @item @emph{Class}:
   2872 Elemental function
   2873 
   2874 @item @emph{Syntax}:
   2875 @code{RESULT = BGT(I, J)}
   2876 
   2877 @item @emph{Arguments}:
   2878 @multitable @columnfractions .15 .70
   2879 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2880 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2881 as @var{I}.
   2882 @end multitable
   2883 
   2884 @item @emph{Return value}:
   2885 The return value is of type @code{LOGICAL} and of the default kind.
   2886 
   2887 @item @emph{See also}:
   2888 @ref{BGE}, @gol
   2889 @ref{BLE}, @gol
   2890 @ref{BLT}
   2891 @end table
   2892 
   2893 
   2894 
   2895 @node BIT_SIZE
   2896 @section @code{BIT_SIZE} --- Bit size inquiry function
   2897 @fnindex BIT_SIZE
   2898 @cindex bits, number of
   2899 @cindex size of a variable, in bits
   2900 
   2901 @table @asis
   2902 @item @emph{Description}:
   2903 @code{BIT_SIZE(I)} returns the number of bits (integer precision plus sign bit)
   2904 represented by the type of @var{I}.  The result of @code{BIT_SIZE(I)} is
   2905 independent of the actual value of @var{I}.
   2906 
   2907 @item @emph{Standard}:
   2908 Fortran 90 and later
   2909 
   2910 @item @emph{Class}:
   2911 Inquiry function
   2912 
   2913 @item @emph{Syntax}:
   2914 @code{RESULT = BIT_SIZE(I)}
   2915 
   2916 @item @emph{Arguments}:
   2917 @multitable @columnfractions .15 .70
   2918 @item @var{I} @tab The type shall be @code{INTEGER}.
   2919 @end multitable
   2920 
   2921 @item @emph{Return value}:
   2922 The return value is of type @code{INTEGER}
   2923 
   2924 @item @emph{Example}:
   2925 @smallexample
   2926 program test_bit_size
   2927     integer :: i = 123
   2928     integer :: size
   2929     size = bit_size(i)
   2930     print *, size
   2931 end program test_bit_size
   2932 @end smallexample
   2933 @end table
   2934 
   2935 
   2936 
   2937 @node BLE
   2938 @section @code{BLE} --- Bitwise less than or equal to
   2939 @fnindex BLE
   2940 @cindex bitwise comparison
   2941 
   2942 @table @asis
   2943 @item @emph{Description}:
   2944 Determines whether an integral is a bitwise less than or equal to
   2945 another.
   2946 
   2947 @item @emph{Standard}:
   2948 Fortran 2008 and later
   2949 
   2950 @item @emph{Class}:
   2951 Elemental function
   2952 
   2953 @item @emph{Syntax}:
   2954 @code{RESULT = BLE(I, J)}
   2955 
   2956 @item @emph{Arguments}:
   2957 @multitable @columnfractions .15 .70
   2958 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2959 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2960 as @var{I}.
   2961 @end multitable
   2962 
   2963 @item @emph{Return value}:
   2964 The return value is of type @code{LOGICAL} and of the default kind.
   2965 
   2966 @item @emph{See also}:
   2967 @ref{BGT}, @gol
   2968 @ref{BGE}, @gol
   2969 @ref{BLT}
   2970 @end table
   2971 
   2972 
   2973 
   2974 @node BLT
   2975 @section @code{BLT} --- Bitwise less than
   2976 @fnindex BLT
   2977 @cindex bitwise comparison
   2978 
   2979 @table @asis
   2980 @item @emph{Description}:
   2981 Determines whether an integral is a bitwise less than another.
   2982 
   2983 @item @emph{Standard}:
   2984 Fortran 2008 and later
   2985 
   2986 @item @emph{Class}:
   2987 Elemental function
   2988 
   2989 @item @emph{Syntax}:
   2990 @code{RESULT = BLT(I, J)}
   2991 
   2992 @item @emph{Arguments}:
   2993 @multitable @columnfractions .15 .70
   2994 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2995 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2996 as @var{I}.
   2997 @end multitable
   2998 
   2999 @item @emph{Return value}:
   3000 The return value is of type @code{LOGICAL} and of the default kind.
   3001 
   3002 @item @emph{See also}:
   3003 @ref{BGE}, @gol
   3004 @ref{BGT}, @gol
   3005 @ref{BLE}
   3006 @end table
   3007 
   3008 
   3009 
   3010 @node BTEST
   3011 @section @code{BTEST} --- Bit test function
   3012 @fnindex BTEST
   3013 @fnindex BBTEST
   3014 @fnindex BITEST
   3015 @fnindex BJTEST
   3016 @fnindex BKTEST
   3017 @cindex bits, testing
   3018 
   3019 @table @asis
   3020 @item @emph{Description}:
   3021 @code{BTEST(I,POS)} returns logical @code{.TRUE.} if the bit at @var{POS}
   3022 in @var{I} is set.  The counting of the bits starts at 0.
   3023 
   3024 @item @emph{Standard}:
   3025 Fortran 90 and later, has overloads that are GNU extensions
   3026 
   3027 @item @emph{Class}:
   3028 Elemental function
   3029 
   3030 @item @emph{Syntax}:
   3031 @code{RESULT = BTEST(I, POS)}
   3032 
   3033 @item @emph{Arguments}:
   3034 @multitable @columnfractions .15 .70
   3035 @item @var{I} @tab The type shall be @code{INTEGER}.
   3036 @item @var{POS} @tab The type shall be @code{INTEGER}.
   3037 @end multitable
   3038 
   3039 @item @emph{Return value}:
   3040 The return value is of type @code{LOGICAL}
   3041 
   3042 @item @emph{Example}:
   3043 @smallexample
   3044 program test_btest
   3045     integer :: i = 32768 + 1024 + 64
   3046     integer :: pos
   3047     logical :: bool
   3048     do pos=0,16
   3049         bool = btest(i, pos) 
   3050         print *, pos, bool
   3051     end do
   3052 end program test_btest
   3053 @end smallexample
   3054 
   3055 @item @emph{Specific names}:
   3056 @multitable @columnfractions .21 .28 .18 .30
   3057 @headitem Name           @tab Argument         @tab Return type             @tab Standard
   3058 @item @code{BTEST(I,POS)} @tab @code{INTEGER I,POS} @tab @code{LOGICAL} @tab Fortran 95 and later
   3059 @item @code{BBTEST(I,POS)} @tab @code{INTEGER(1) I,POS} @tab @code{LOGICAL(1)} @tab GNU extension
   3060 @item @code{BITEST(I,POS)} @tab @code{INTEGER(2) I,POS} @tab @code{LOGICAL(2)} @tab GNU extension
   3061 @item @code{BJTEST(I,POS)} @tab @code{INTEGER(4) I,POS} @tab @code{LOGICAL(4)} @tab GNU extension
   3062 @item @code{BKTEST(I,POS)} @tab @code{INTEGER(8) I,POS} @tab @code{LOGICAL(8)} @tab GNU extension
   3063 @end multitable
   3064 @end table
   3065 
   3066 @node C_ASSOCIATED
   3067 @section @code{C_ASSOCIATED} --- Status of a C pointer
   3068 @fnindex C_ASSOCIATED
   3069 @cindex association status, C pointer
   3070 @cindex pointer, C association status
   3071 
   3072 @table @asis
   3073 @item @emph{Description}:
   3074 @code{C_ASSOCIATED(c_ptr_1[, c_ptr_2])} determines the status of the C pointer
   3075 @var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}.
   3076 
   3077 @item @emph{Standard}:
   3078 Fortran 2003 and later
   3079 
   3080 @item @emph{Class}:
   3081 Inquiry function
   3082 
   3083 @item @emph{Syntax}:
   3084 @code{RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])}
   3085 
   3086 @item @emph{Arguments}:
   3087 @multitable @columnfractions .15 .70
   3088 @item @var{c_ptr_1} @tab Scalar of the type @code{C_PTR} or @code{C_FUNPTR}.
   3089 @item @var{c_ptr_2} @tab (Optional) Scalar of the same type as @var{c_ptr_1}.
   3090 @end multitable
   3091 
   3092 @item @emph{Return value}:
   3093 The return value is of type @code{LOGICAL}; it is @code{.false.} if either
   3094 @var{c_ptr_1} is a C NULL pointer or if @var{c_ptr1} and @var{c_ptr_2}
   3095 point to different addresses.
   3096 
   3097 @item @emph{Example}:
   3098 @smallexample
   3099 subroutine association_test(a,b)
   3100   use iso_c_binding, only: c_associated, c_loc, c_ptr
   3101   implicit none
   3102   real, pointer :: a
   3103   type(c_ptr) :: b
   3104   if(c_associated(b, c_loc(a))) &
   3105      stop 'b and a do not point to same target'
   3106 end subroutine association_test
   3107 @end smallexample
   3108 
   3109 @item @emph{See also}:
   3110 @ref{C_LOC}, @gol
   3111 @ref{C_FUNLOC}
   3112 @end table
   3113 
   3114 
   3115 @node C_F_POINTER
   3116 @section @code{C_F_POINTER} --- Convert C into Fortran pointer
   3117 @fnindex C_F_POINTER
   3118 @cindex pointer, convert C to Fortran
   3119 
   3120 @table @asis
   3121 @item @emph{Description}:
   3122 @code{C_F_POINTER(CPTR, FPTR[, SHAPE])} assigns the target of the C pointer
   3123 @var{CPTR} to the Fortran pointer @var{FPTR} and specifies its shape.
   3124 
   3125 @item @emph{Standard}:
   3126 Fortran 2003 and later
   3127 
   3128 @item @emph{Class}:
   3129 Subroutine
   3130 
   3131 @item @emph{Syntax}:
   3132 @code{CALL C_F_POINTER(CPTR, FPTR[, SHAPE])}
   3133 
   3134 @item @emph{Arguments}:
   3135 @multitable @columnfractions .15 .70
   3136 @item @var{CPTR}  @tab scalar of the type @code{C_PTR}. It is
   3137 @code{INTENT(IN)}.
   3138 @item @var{FPTR}  @tab pointer interoperable with @var{cptr}. It is
   3139 @code{INTENT(OUT)}.
   3140 @item @var{SHAPE} @tab (Optional) Rank-one array of type @code{INTEGER}
   3141 with @code{INTENT(IN)}. It shall be present
   3142 if and only if @var{fptr} is an array. The size
   3143 must be equal to the rank of @var{fptr}.
   3144 @end multitable
   3145 
   3146 @item @emph{Example}:
   3147 @smallexample
   3148 program main
   3149   use iso_c_binding
   3150   implicit none
   3151   interface
   3152     subroutine my_routine(p) bind(c,name='myC_func')
   3153       import :: c_ptr
   3154       type(c_ptr), intent(out) :: p
   3155     end subroutine
   3156   end interface
   3157   type(c_ptr) :: cptr
   3158   real,pointer :: a(:)
   3159   call my_routine(cptr)
   3160   call c_f_pointer(cptr, a, [12])
   3161 end program main
   3162 @end smallexample
   3163 
   3164 @item @emph{See also}:
   3165 @ref{C_LOC}, @gol
   3166 @ref{C_F_PROCPOINTER}
   3167 @end table
   3168 
   3169 
   3170 @node C_F_PROCPOINTER
   3171 @section @code{C_F_PROCPOINTER} --- Convert C into Fortran procedure pointer
   3172 @fnindex C_F_PROCPOINTER
   3173 @cindex pointer, C address of pointers
   3174 
   3175 @table @asis
   3176 @item @emph{Description}:
   3177 @code{C_F_PROCPOINTER(CPTR, FPTR)} Assign the target of the C function pointer
   3178 @var{CPTR} to the Fortran procedure pointer @var{FPTR}.
   3179 
   3180 @item @emph{Standard}:
   3181 Fortran 2003 and later
   3182 
   3183 @item @emph{Class}:
   3184 Subroutine
   3185 
   3186 @item @emph{Syntax}:
   3187 @code{CALL C_F_PROCPOINTER(cptr, fptr)}
   3188 
   3189 @item @emph{Arguments}:
   3190 @multitable @columnfractions .15 .70
   3191 @item @var{CPTR}  @tab scalar of the type @code{C_FUNPTR}. It is
   3192 @code{INTENT(IN)}.
   3193 @item @var{FPTR}  @tab procedure pointer interoperable with @var{cptr}. It is
   3194 @code{INTENT(OUT)}.
   3195 @end multitable
   3196 
   3197 @item @emph{Example}:
   3198 @smallexample
   3199 program main
   3200   use iso_c_binding
   3201   implicit none
   3202   abstract interface
   3203     function func(a)
   3204       import :: c_float
   3205       real(c_float), intent(in) :: a
   3206       real(c_float) :: func
   3207     end function
   3208   end interface
   3209   interface
   3210      function getIterFunc() bind(c,name="getIterFunc")
   3211        import :: c_funptr
   3212        type(c_funptr) :: getIterFunc
   3213      end function
   3214   end interface
   3215   type(c_funptr) :: cfunptr
   3216   procedure(func), pointer :: myFunc
   3217   cfunptr = getIterFunc()
   3218   call c_f_procpointer(cfunptr, myFunc)
   3219 end program main
   3220 @end smallexample
   3221 
   3222 @item @emph{See also}:
   3223 @ref{C_LOC}, @gol
   3224 @ref{C_F_POINTER}
   3225 @end table
   3226 
   3227 
   3228 @node C_FUNLOC
   3229 @section @code{C_FUNLOC} --- Obtain the C address of a procedure
   3230 @fnindex C_FUNLOC
   3231 @cindex pointer, C address of procedures
   3232 
   3233 @table @asis
   3234 @item @emph{Description}:
   3235 @code{C_FUNLOC(x)} determines the C address of the argument.
   3236 
   3237 @item @emph{Standard}:
   3238 Fortran 2003 and later
   3239 
   3240 @item @emph{Class}:
   3241 Inquiry function
   3242 
   3243 @item @emph{Syntax}:
   3244 @code{RESULT = C_FUNLOC(x)}
   3245 
   3246 @item @emph{Arguments}:
   3247 @multitable @columnfractions .15 .70
   3248 @item @var{x} @tab Interoperable function or pointer to such function.
   3249 @end multitable
   3250 
   3251 @item @emph{Return value}:
   3252 The return value is of type @code{C_FUNPTR} and contains the C address
   3253 of the argument.
   3254 
   3255 @item @emph{Example}:
   3256 @smallexample
   3257 module x
   3258   use iso_c_binding
   3259   implicit none
   3260 contains
   3261   subroutine sub(a) bind(c)
   3262     real(c_float) :: a
   3263     a = sqrt(a)+5.0
   3264   end subroutine sub
   3265 end module x
   3266 program main
   3267   use iso_c_binding
   3268   use x
   3269   implicit none
   3270   interface
   3271     subroutine my_routine(p) bind(c,name='myC_func')
   3272       import :: c_funptr
   3273       type(c_funptr), intent(in) :: p
   3274     end subroutine
   3275   end interface
   3276   call my_routine(c_funloc(sub))
   3277 end program main
   3278 @end smallexample
   3279 
   3280 @item @emph{See also}:
   3281 @ref{C_ASSOCIATED}, @gol
   3282 @ref{C_LOC}, @gol
   3283 @ref{C_F_POINTER}, @gol
   3284 @ref{C_F_PROCPOINTER}
   3285 @end table
   3286 
   3287 
   3288 @node C_LOC
   3289 @section @code{C_LOC} --- Obtain the C address of an object
   3290 @fnindex C_LOC
   3291 @cindex procedure pointer, convert C to Fortran
   3292 
   3293 @table @asis
   3294 @item @emph{Description}:
   3295 @code{C_LOC(X)} determines the C address of the argument.
   3296 
   3297 @item @emph{Standard}:
   3298 Fortran 2003 and later
   3299 
   3300 @item @emph{Class}:
   3301 Inquiry function
   3302 
   3303 @item @emph{Syntax}:
   3304 @code{RESULT = C_LOC(X)}
   3305 
   3306 @item @emph{Arguments}:
   3307 @multitable @columnfractions .10 .75
   3308 @item @var{X} @tab  Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.
   3309 
   3310 @end multitable
   3311 
   3312 @item @emph{Return value}:
   3313 The return value is of type @code{C_PTR} and contains the C address
   3314 of the argument.
   3315 
   3316 @item @emph{Example}:
   3317 @smallexample
   3318 subroutine association_test(a,b)
   3319   use iso_c_binding, only: c_associated, c_loc, c_ptr
   3320   implicit none
   3321   real, pointer :: a
   3322   type(c_ptr) :: b
   3323   if(c_associated(b, c_loc(a))) &
   3324      stop 'b and a do not point to same target'
   3325 end subroutine association_test
   3326 @end smallexample
   3327 
   3328 @item @emph{See also}:
   3329 @ref{C_ASSOCIATED}, @gol
   3330 @ref{C_FUNLOC}, @gol
   3331 @ref{C_F_POINTER}, @gol
   3332 @ref{C_F_PROCPOINTER}
   3333 @end table
   3334 
   3335 
   3336 @node C_SIZEOF
   3337 @section @code{C_SIZEOF} --- Size in bytes of an expression
   3338 @fnindex C_SIZEOF
   3339 @cindex expression size
   3340 @cindex size of an expression
   3341 
   3342 @table @asis
   3343 @item @emph{Description}:
   3344 @code{C_SIZEOF(X)} calculates the number of bytes of storage the
   3345 expression @code{X} occupies.
   3346 
   3347 @item @emph{Standard}:
   3348 Fortran 2008
   3349 
   3350 @item @emph{Class}:
   3351 Inquiry function of the module @code{ISO_C_BINDING}
   3352 
   3353 @item @emph{Syntax}:
   3354 @code{N = C_SIZEOF(X)}
   3355 
   3356 @item @emph{Arguments}:
   3357 @multitable @columnfractions .15 .70
   3358 @item @var{X} @tab The argument shall be an interoperable data entity.
   3359 @end multitable
   3360 
   3361 @item @emph{Return value}:
   3362 The return value is of type integer and of the system-dependent kind
   3363 @code{C_SIZE_T} (from the @code{ISO_C_BINDING} module). Its value is the
   3364 number of bytes occupied by the argument.  If the argument has the
   3365 @code{POINTER} attribute, the number of bytes of the storage area pointed
   3366 to is returned.  If the argument is of a derived type with @code{POINTER}
   3367 or @code{ALLOCATABLE} components, the return value does not account for
   3368 the sizes of the data pointed to by these components.
   3369 
   3370 @item @emph{Example}:
   3371 @smallexample
   3372    use iso_c_binding
   3373    integer(c_int) :: i
   3374    real(c_float) :: r, s(5)
   3375    print *, (c_sizeof(s)/c_sizeof(r) == 5)
   3376    end
   3377 @end smallexample
   3378 The example will print @code{T} unless you are using a platform
   3379 where default @code{REAL} variables are unusually padded.
   3380 
   3381 @item @emph{See also}:
   3382 @ref{SIZEOF}, @gol
   3383 @ref{STORAGE_SIZE}
   3384 @end table
   3385 
   3386 
   3387 @node CEILING
   3388 @section @code{CEILING} --- Integer ceiling function
   3389 @fnindex CEILING
   3390 @cindex ceiling
   3391 @cindex rounding, ceiling
   3392 
   3393 @table @asis
   3394 @item @emph{Description}:
   3395 @code{CEILING(A)} returns the least integer greater than or equal to @var{A}.
   3396 
   3397 @item @emph{Standard}:
   3398 Fortran 95 and later
   3399 
   3400 @item @emph{Class}:
   3401 Elemental function
   3402 
   3403 @item @emph{Syntax}:
   3404 @code{RESULT = CEILING(A [, KIND])}
   3405 
   3406 @item @emph{Arguments}:
   3407 @multitable @columnfractions .15 .70
   3408 @item @var{A} @tab The type shall be @code{REAL}.
   3409 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   3410 expression indicating the kind parameter of the result.
   3411 @end multitable
   3412 
   3413 @item @emph{Return value}:
   3414 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
   3415 and a default-kind @code{INTEGER} otherwise.
   3416 
   3417 @item @emph{Example}:
   3418 @smallexample
   3419 program test_ceiling
   3420     real :: x = 63.29
   3421     real :: y = -63.59
   3422     print *, ceiling(x) ! returns 64
   3423     print *, ceiling(y) ! returns -63
   3424 end program test_ceiling
   3425 @end smallexample
   3426 
   3427 @item @emph{See also}:
   3428 @ref{FLOOR}, @gol
   3429 @ref{NINT}
   3430 @end table
   3431 
   3432 
   3433 
   3434 @node CHAR
   3435 @section @code{CHAR} --- Character conversion function
   3436 @fnindex CHAR
   3437 @cindex conversion, to character
   3438 
   3439 @table @asis
   3440 @item @emph{Description}:
   3441 @code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}.
   3442 
   3443 @item @emph{Standard}:
   3444 Fortran 77 and later
   3445 
   3446 @item @emph{Class}:
   3447 Elemental function
   3448 
   3449 @item @emph{Syntax}:
   3450 @code{RESULT = CHAR(I [, KIND])}
   3451 
   3452 @item @emph{Arguments}:
   3453 @multitable @columnfractions .15 .70
   3454 @item @var{I} @tab The type shall be @code{INTEGER}.
   3455 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   3456 expression indicating the kind parameter of the result.
   3457 @end multitable
   3458 
   3459 @item @emph{Return value}:
   3460 The return value is of type @code{CHARACTER(1)}
   3461 
   3462 @item @emph{Example}:
   3463 @smallexample
   3464 program test_char
   3465     integer :: i = 74
   3466     character(1) :: c
   3467     c = char(i)
   3468     print *, i, c ! returns 'J'
   3469 end program test_char
   3470 @end smallexample
   3471 
   3472 @item @emph{Specific names}:
   3473 @multitable @columnfractions .19 .19 .25 .33
   3474 @headitem Name           @tab Argument         @tab Return type             @tab Standard
   3475 @item @code{CHAR(I)} @tab @code{INTEGER I} @tab @code{CHARACTER(LEN=1)} @tab Fortran 77 and later
   3476 @end multitable
   3477 
   3478 @item @emph{Note}:
   3479 See @ref{ICHAR} for a discussion of converting between numerical values
   3480 and formatted string representations.
   3481 
   3482 @item @emph{See also}:
   3483 @ref{ACHAR}, @gol
   3484 @ref{IACHAR}, @gol
   3485 @ref{ICHAR}
   3486 
   3487 @end table
   3488 
   3489 
   3490 
   3491 @node CHDIR
   3492 @section @code{CHDIR} --- Change working directory
   3493 @fnindex CHDIR
   3494 @cindex system, working directory
   3495 
   3496 @table @asis
   3497 @item @emph{Description}:
   3498 Change current working directory to a specified path.
   3499 
   3500 This intrinsic is provided in both subroutine and function forms; however,
   3501 only one form can be used in any given program unit.
   3502 
   3503 @item @emph{Standard}:
   3504 GNU extension
   3505 
   3506 @item @emph{Class}:
   3507 Subroutine, function
   3508 
   3509 @item @emph{Syntax}:
   3510 @multitable @columnfractions .80
   3511 @item @code{CALL CHDIR(NAME [, STATUS])}
   3512 @item @code{STATUS = CHDIR(NAME)}
   3513 @end multitable
   3514 
   3515 @item @emph{Arguments}:
   3516 @multitable @columnfractions .15 .70
   3517 @item @var{NAME}   @tab The type shall be @code{CHARACTER} of default
   3518 kind and shall specify a valid path within the file system.
   3519 @item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default
   3520 kind.  Returns 0 on success, and a system specific and nonzero error code
   3521 otherwise.
   3522 @end multitable
   3523 
   3524 @item @emph{Example}:
   3525 @smallexample
   3526 PROGRAM test_chdir
   3527   CHARACTER(len=255) :: path
   3528   CALL getcwd(path)
   3529   WRITE(*,*) TRIM(path)
   3530   CALL chdir("/tmp")
   3531   CALL getcwd(path)
   3532   WRITE(*,*) TRIM(path)
   3533 END PROGRAM
   3534 @end smallexample
   3535 
   3536 @item @emph{See also}:
   3537 @ref{GETCWD}
   3538 @end table
   3539 
   3540 
   3541 
   3542 @node CHMOD
   3543 @section @code{CHMOD} --- Change access permissions of files
   3544 @fnindex CHMOD
   3545 @cindex file system, change access mode
   3546 
   3547 @table @asis
   3548 @item @emph{Description}:
   3549 @code{CHMOD} changes the permissions of a file.
   3550 
   3551 This intrinsic is provided in both subroutine and function forms; however,
   3552 only one form can be used in any given program unit.
   3553 
   3554 @item @emph{Standard}:
   3555 GNU extension
   3556 
   3557 @item @emph{Class}:
   3558 Subroutine, function
   3559 
   3560 @item @emph{Syntax}:
   3561 @multitable @columnfractions .80
   3562 @item @code{CALL CHMOD(NAME, MODE[, STATUS])}
   3563 @item @code{STATUS = CHMOD(NAME, MODE)}
   3564 @end multitable
   3565 
   3566 @item @emph{Arguments}:
   3567 @multitable @columnfractions .15 .70
   3568 
   3569 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
   3570 file name. Trailing blanks are ignored unless the character
   3571 @code{achar(0)} is present, then all characters up to and excluding
   3572 @code{achar(0)} are used as the file name.
   3573 
   3574 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind giving the
   3575 file permission. @var{MODE} uses the same syntax as the @code{chmod} utility
   3576 as defined by the POSIX standard. The argument shall either be a string of
   3577 a nonnegative octal number or a symbolic mode.
   3578 
   3579 @item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is
   3580 @code{0} on success and nonzero otherwise.
   3581 @end multitable
   3582 
   3583 @item @emph{Return value}:
   3584 In either syntax, @var{STATUS} is set to @code{0} on success and nonzero
   3585 otherwise.
   3586 
   3587 @item @emph{Example}:
   3588 @code{CHMOD} as subroutine
   3589 @smallexample
   3590 program chmod_test
   3591   implicit none
   3592   integer :: status
   3593   call chmod('test.dat','u+x',status)
   3594   print *, 'Status: ', status
   3595 end program chmod_test
   3596 @end smallexample
   3597 @code{CHMOD} as function:
   3598 @smallexample
   3599 program chmod_test
   3600   implicit none
   3601   integer :: status
   3602   status = chmod('test.dat','u+x')
   3603   print *, 'Status: ', status
   3604 end program chmod_test
   3605 @end smallexample
   3606 
   3607 @end table
   3608 
   3609 
   3610 
   3611 @node CMPLX
   3612 @section @code{CMPLX} --- Complex conversion function
   3613 @fnindex CMPLX
   3614 @cindex complex numbers, conversion to
   3615 @cindex conversion, to complex
   3616 
   3617 @table @asis
   3618 @item @emph{Description}:
   3619 @code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to
   3620 the real component.  If @var{Y} is present it is converted to the imaginary
   3621 component.  If @var{Y} is not present then the imaginary component is set to
   3622 0.0.  If @var{X} is complex then @var{Y} must not be present.
   3623 
   3624 @item @emph{Standard}:
   3625 Fortran 77 and later
   3626 
   3627 @item @emph{Class}:
   3628 Elemental function
   3629 
   3630 @item @emph{Syntax}:
   3631 @code{RESULT = CMPLX(X [, Y [, KIND]])}
   3632 
   3633 @item @emph{Arguments}:
   3634 @multitable @columnfractions .15 .70
   3635 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
   3636 or @code{COMPLEX}.
   3637 @item @var{Y} @tab (Optional; only allowed if @var{X} is not
   3638 @code{COMPLEX}.)  May be @code{INTEGER} or @code{REAL}.
   3639 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   3640 expression indicating the kind parameter of the result.
   3641 @end multitable
   3642 
   3643 @item @emph{Return value}:
   3644 The return value is of @code{COMPLEX} type, with a kind equal to
   3645 @var{KIND} if it is specified.  If @var{KIND} is not specified, the
   3646 result is of the default @code{COMPLEX} kind, regardless of the kinds of
   3647 @var{X} and @var{Y}. 
   3648 
   3649 @item @emph{Example}:
   3650 @smallexample
   3651 program test_cmplx
   3652     integer :: i = 42
   3653     real :: x = 3.14
   3654     complex :: z
   3655     z = cmplx(i, x)
   3656     print *, z, cmplx(x)
   3657 end program test_cmplx
   3658 @end smallexample
   3659 
   3660 @item @emph{See also}:
   3661 @ref{COMPLEX}
   3662 @end table
   3663 
   3664 
   3665 
   3666 @node CO_BROADCAST
   3667 @section @code{CO_BROADCAST} --- Copy a value to all images the current set of images
   3668 @fnindex CO_BROADCAST
   3669 @cindex Collectives, value broadcasting
   3670 
   3671 @table @asis
   3672 @item @emph{Description}:
   3673 @code{CO_BROADCAST} copies the value of argument @var{A} on the image with
   3674 image index @code{SOURCE_IMAGE} to all images in the current team.  @var{A}
   3675 becomes defined as if by intrinsic assignment.  If the execution was
   3676 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3677 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3678 @var{ERRMSG} gets assigned a value describing the occurred error.
   3679 
   3680 @item @emph{Standard}:
   3681 Technical Specification (TS) 18508 or later
   3682 
   3683 @item @emph{Class}:
   3684 Collective subroutine
   3685 
   3686 @item @emph{Syntax}:
   3687 @code{CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])}
   3688 
   3689 @item @emph{Arguments}:
   3690 @multitable @columnfractions .20 .65
   3691 @item @var{A}            @tab INTENT(INOUT) argument; shall have the same
   3692 dynamic type and type parameters on all images of the current team. If it
   3693 is an array, it shall have the same shape on all images.
   3694 @item @var{SOURCE_IMAGE} @tab a scalar integer expression.
   3695 It shall have the same value on all images and refer to an
   3696 image of the current team.
   3697 @item @var{STAT}         @tab (optional) a scalar integer variable
   3698 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3699 @end multitable
   3700 
   3701 @item @emph{Example}:
   3702 @smallexample
   3703 program test
   3704   integer :: val(3)
   3705   if (this_image() == 1) then
   3706     val = [1, 5, 3]
   3707   end if
   3708   call co_broadcast (val, source_image=1)
   3709   print *, this_image, ":", val
   3710 end program test
   3711 @end smallexample
   3712 
   3713 @item @emph{See also}:
   3714 @ref{CO_MAX}, @gol
   3715 @ref{CO_MIN}, @gol
   3716 @ref{CO_SUM}, @gol
   3717 @ref{CO_REDUCE}
   3718 @end table
   3719 
   3720 
   3721 
   3722 @node CO_MAX
   3723 @section @code{CO_MAX} --- Maximal value on the current set of images
   3724 @fnindex CO_MAX
   3725 @cindex Collectives, maximal value
   3726 
   3727 @table @asis
   3728 @item @emph{Description}:
   3729 @code{CO_MAX} determines element-wise the maximal value of @var{A} on all
   3730 images of the current team.  If @var{RESULT_IMAGE} is present, the maximum
   3731 values are returned in @var{A} on the specified image only and the value
   3732 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
   3733 not present, the value is returned on all images.  If the execution was
   3734 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3735 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3736 @var{ERRMSG} gets assigned a value describing the occurred error.
   3737 
   3738 @item @emph{Standard}:
   3739 Technical Specification (TS) 18508 or later
   3740 
   3741 @item @emph{Class}:
   3742 Collective subroutine
   3743 
   3744 @item @emph{Syntax}:
   3745 @code{CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])}
   3746 
   3747 @item @emph{Arguments}:
   3748 @multitable @columnfractions .20 .65
   3749 @item @var{A}            @tab shall be an integer, real or character variable,
   3750 which has the same type and type parameters on all images of the team.
   3751 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3752 present, it shall have the same value on all images and refer to an
   3753 image of the current team.
   3754 @item @var{STAT}         @tab (optional) a scalar integer variable
   3755 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3756 @end multitable
   3757 
   3758 @item @emph{Example}:
   3759 @smallexample
   3760 program test
   3761   integer :: val
   3762   val = this_image ()
   3763   call co_max (val, result_image=1)
   3764   if (this_image() == 1) then
   3765     write(*,*) "Maximal value", val  ! prints num_images()
   3766   end if
   3767 end program test
   3768 @end smallexample
   3769 
   3770 @item @emph{See also}:
   3771 @ref{CO_MIN}, @gol
   3772 @ref{CO_SUM}, @gol
   3773 @ref{CO_REDUCE}, @gol
   3774 @ref{CO_BROADCAST}
   3775 @end table
   3776 
   3777 
   3778 
   3779 @node CO_MIN
   3780 @section @code{CO_MIN} --- Minimal value on the current set of images
   3781 @fnindex CO_MIN
   3782 @cindex Collectives, minimal value
   3783 
   3784 @table @asis
   3785 @item @emph{Description}:
   3786 @code{CO_MIN} determines element-wise the minimal value of @var{A} on all
   3787 images of the current team.  If @var{RESULT_IMAGE} is present, the minimal
   3788 values are returned in @var{A} on the specified image only and the value
   3789 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
   3790 not present, the value is returned on all images.  If the execution was
   3791 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3792 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3793 @var{ERRMSG} gets assigned a value describing the occurred error.
   3794 
   3795 @item @emph{Standard}:
   3796 Technical Specification (TS) 18508 or later
   3797 
   3798 @item @emph{Class}:
   3799 Collective subroutine
   3800 
   3801 @item @emph{Syntax}:
   3802 @code{CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])}
   3803 
   3804 @item @emph{Arguments}:
   3805 @multitable @columnfractions .20 .65
   3806 @item @var{A}            @tab shall be an integer, real or character variable,
   3807 which has the same type and type parameters on all images of the team.
   3808 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3809 present, it shall have the same value on all images and refer to an
   3810 image of the current team.
   3811 @item @var{STAT}         @tab (optional) a scalar integer variable
   3812 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3813 @end multitable
   3814 
   3815 @item @emph{Example}:
   3816 @smallexample
   3817 program test
   3818   integer :: val
   3819   val = this_image ()
   3820   call co_min (val, result_image=1)
   3821   if (this_image() == 1) then
   3822     write(*,*) "Minimal value", val  ! prints 1
   3823   end if
   3824 end program test
   3825 @end smallexample
   3826 
   3827 @item @emph{See also}:
   3828 @ref{CO_MAX}, @gol
   3829 @ref{CO_SUM}, @gol
   3830 @ref{CO_REDUCE}, @gol
   3831 @ref{CO_BROADCAST}
   3832 @end table
   3833 
   3834 
   3835 
   3836 @node CO_REDUCE
   3837 @section @code{CO_REDUCE} --- Reduction of values on the current set of images
   3838 @fnindex CO_REDUCE
   3839 @cindex Collectives, generic reduction
   3840 
   3841 @table @asis
   3842 @item @emph{Description}:
   3843 @code{CO_REDUCE} determines element-wise the reduction of the value of @var{A}
   3844 on all images of the current team.  The pure function passed as @var{OPERATION}
   3845 is used to pairwise reduce the values of @var{A} by passing either the value
   3846 of @var{A} of different images or the result values of such a reduction as
   3847 argument.  If @var{A} is an array, the deduction is done element wise. If
   3848 @var{RESULT_IMAGE} is present, the result values are returned in @var{A} on
   3849 the specified image only and the value of @var{A} on the other images become
   3850 undefined.  If @var{RESULT_IMAGE} is not present, the value is returned on all
   3851 images.  If the execution was successful and @var{STAT} is present, it is
   3852 assigned the value zero.  If the execution failed, @var{STAT} gets assigned
   3853 a nonzero value and, if present, @var{ERRMSG} gets assigned a value describing
   3854 the occurred error.
   3855 
   3856 @item @emph{Standard}:
   3857 Technical Specification (TS) 18508 or later
   3858 
   3859 @item @emph{Class}:
   3860 Collective subroutine
   3861 
   3862 @item @emph{Syntax}:
   3863 @code{CALL CO_REDUCE(A, OPERATION, [, RESULT_IMAGE, STAT, ERRMSG])}
   3864 
   3865 @item @emph{Arguments}:
   3866 @multitable @columnfractions .20 .65
   3867 @item @var{A}            @tab is an @code{INTENT(INOUT)} argument and shall be
   3868 nonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer,
   3869 it shall be associated.  @var{A} shall have the same type and type parameters on
   3870 all images of the team; if it is an array, it shall have the same shape on all
   3871 images.
   3872 @item @var{OPERATION}     @tab pure function with two scalar nonallocatable
   3873 arguments, which shall be nonpolymorphic and have the same type and type
   3874 parameters as @var{A}.  The function shall return a nonallocatable scalar of
   3875 the same type and type parameters as @var{A}.  The function shall be the same on
   3876 all images and with regards to the arguments mathematically commutative and
   3877 associative.  Note that @var{OPERATION} may not be an elemental function, unless
   3878 it is an intrisic function.
   3879 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3880 present, it shall have the same value on all images and refer to an
   3881 image of the current team.
   3882 @item @var{STAT}         @tab (optional) a scalar integer variable
   3883 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3884 @end multitable
   3885 
   3886 @item @emph{Example}:
   3887 @smallexample
   3888 program test
   3889   integer :: val
   3890   val = this_image ()
   3891   call co_reduce (val, result_image=1, operation=myprod)
   3892   if (this_image() == 1) then
   3893     write(*,*) "Product value", val  ! prints num_images() factorial
   3894   end if
   3895 contains
   3896   pure function myprod(a, b)
   3897     integer, value :: a, b
   3898     integer :: myprod
   3899     myprod = a * b
   3900   end function myprod
   3901 end program test
   3902 @end smallexample
   3903 
   3904 @item @emph{Note}:
   3905 While the rules permit in principle an intrinsic function, none of the
   3906 intrinsics in the standard fulfill the criteria of having a specific
   3907 function, which takes two arguments of the same type and returning that
   3908 type as result.
   3909 
   3910 @item @emph{See also}:
   3911 @ref{CO_MIN}, @gol
   3912 @ref{CO_MAX}, @gol
   3913 @ref{CO_SUM}, @gol
   3914 @ref{CO_BROADCAST}
   3915 @end table
   3916 
   3917 
   3918 
   3919 @node CO_SUM
   3920 @section @code{CO_SUM} --- Sum of values on the current set of images
   3921 @fnindex CO_SUM
   3922 @cindex Collectives, sum of values
   3923 
   3924 @table @asis
   3925 @item @emph{Description}:
   3926 @code{CO_SUM} sums up the values of each element of @var{A} on all
   3927 images of the current team.  If @var{RESULT_IMAGE} is present, the summed-up
   3928 values are returned in @var{A} on the specified image only and the value
   3929 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
   3930 not present, the value is returned on all images.  If the execution was
   3931 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3932 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3933 @var{ERRMSG} gets assigned a value describing the occurred error.
   3934 
   3935 @item @emph{Standard}:
   3936 Technical Specification (TS) 18508 or later
   3937 
   3938 @item @emph{Class}:
   3939 Collective subroutine
   3940 
   3941 @item @emph{Syntax}:
   3942 @code{CALL CO_SUM(A [, RESULT_IMAGE, STAT, ERRMSG])}
   3943 
   3944 @item @emph{Arguments}:
   3945 @multitable @columnfractions .20 .65
   3946 @item @var{A}            @tab shall be an integer, real or complex variable,
   3947 which has the same type and type parameters on all images of the team.
   3948 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3949 present, it shall have the same value on all images and refer to an
   3950 image of the current team.
   3951 @item @var{STAT}         @tab (optional) a scalar integer variable
   3952 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3953 @end multitable
   3954 
   3955 @item @emph{Example}:
   3956 @smallexample
   3957 program test
   3958   integer :: val
   3959   val = this_image ()
   3960   call co_sum (val, result_image=1)
   3961   if (this_image() == 1) then
   3962     write(*,*) "The sum is ", val ! prints (n**2 + n)/2,
   3963                                   ! with n = num_images()
   3964   end if
   3965 end program test
   3966 @end smallexample
   3967 
   3968 @item @emph{See also}:
   3969 @ref{CO_MAX}, @gol
   3970 @ref{CO_MIN}, @gol
   3971 @ref{CO_REDUCE}, @gol
   3972 @ref{CO_BROADCAST}
   3973 @end table
   3974 
   3975 
   3976 
   3977 @node COMMAND_ARGUMENT_COUNT
   3978 @section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
   3979 @fnindex COMMAND_ARGUMENT_COUNT
   3980 @cindex command-line arguments
   3981 @cindex command-line arguments, number of
   3982 @cindex arguments, to program
   3983 
   3984 @table @asis
   3985 @item @emph{Description}:
   3986 @code{COMMAND_ARGUMENT_COUNT} returns the number of arguments passed on the
   3987 command line when the containing program was invoked.
   3988 
   3989 @item @emph{Standard}:
   3990 Fortran 2003 and later
   3991 
   3992 @item @emph{Class}:
   3993 Inquiry function
   3994 
   3995 @item @emph{Syntax}:
   3996 @code{RESULT = COMMAND_ARGUMENT_COUNT()}
   3997 
   3998 @item @emph{Arguments}:
   3999 @multitable @columnfractions .15 .70
   4000 @item None
   4001 @end multitable
   4002 
   4003 @item @emph{Return value}:
   4004 The return value is an @code{INTEGER} of default kind.
   4005 
   4006 @item @emph{Example}:
   4007 @smallexample
   4008 program test_command_argument_count
   4009     integer :: count
   4010     count = command_argument_count()
   4011     print *, count
   4012 end program test_command_argument_count
   4013 @end smallexample
   4014 
   4015 @item @emph{See also}:
   4016 @ref{GET_COMMAND}, @gol
   4017 @ref{GET_COMMAND_ARGUMENT}
   4018 @end table
   4019 
   4020 
   4021 
   4022 @node COMPILER_OPTIONS
   4023 @section @code{COMPILER_OPTIONS} --- Options passed to the compiler
   4024 @fnindex COMPILER_OPTIONS
   4025 @cindex flags inquiry function
   4026 @cindex options inquiry function
   4027 @cindex compiler flags inquiry function
   4028 
   4029 @table @asis
   4030 @item @emph{Description}:
   4031 @code{COMPILER_OPTIONS} returns a string with the options used for
   4032 compiling.
   4033 
   4034 @item @emph{Standard}:
   4035 Fortran 2008
   4036 
   4037 @item @emph{Class}:
   4038 Inquiry function of the module @code{ISO_FORTRAN_ENV}
   4039 
   4040 @item @emph{Syntax}:
   4041 @code{STR = COMPILER_OPTIONS()}
   4042 
   4043 @item @emph{Arguments}:
   4044 None
   4045 
   4046 @item @emph{Return value}:
   4047 The return value is a default-kind string with system-dependent length.
   4048 It contains the compiler flags used to compile the file, which called
   4049 the @code{COMPILER_OPTIONS} intrinsic.
   4050 
   4051 @item @emph{Example}:
   4052 @smallexample
   4053    use iso_fortran_env
   4054    print '(4a)', 'This file was compiled by ', &
   4055                  compiler_version(), ' using the options ', &
   4056                  compiler_options()
   4057    end
   4058 @end smallexample
   4059 
   4060 @item @emph{See also}:
   4061 @ref{COMPILER_VERSION}, @gol
   4062 @ref{ISO_FORTRAN_ENV}
   4063 @end table
   4064 
   4065 
   4066 
   4067 @node COMPILER_VERSION
   4068 @section @code{COMPILER_VERSION} --- Compiler version string
   4069 @fnindex COMPILER_VERSION
   4070 @cindex compiler, name and version
   4071 @cindex version of the compiler
   4072 
   4073 @table @asis
   4074 @item @emph{Description}:
   4075 @code{COMPILER_VERSION} returns a string with the name and the
   4076 version of the compiler.
   4077 
   4078 @item @emph{Standard}:
   4079 Fortran 2008
   4080 
   4081 @item @emph{Class}:
   4082 Inquiry function of the module @code{ISO_FORTRAN_ENV}
   4083 
   4084 @item @emph{Syntax}:
   4085 @code{STR = COMPILER_VERSION()}
   4086 
   4087 @item @emph{Arguments}:
   4088 None
   4089 
   4090 @item @emph{Return value}:
   4091 The return value is a default-kind string with system-dependent length.
   4092 It contains the name of the compiler and its version number.
   4093 
   4094 @item @emph{Example}:
   4095 @smallexample
   4096    use iso_fortran_env
   4097    print '(4a)', 'This file was compiled by ', &
   4098                  compiler_version(), ' using the options ', &
   4099                  compiler_options()
   4100    end
   4101 @end smallexample
   4102 
   4103 @item @emph{See also}:
   4104 @ref{COMPILER_OPTIONS}, @gol
   4105 @ref{ISO_FORTRAN_ENV}
   4106 @end table
   4107 
   4108 
   4109 
   4110 @node COMPLEX
   4111 @section @code{COMPLEX} --- Complex conversion function
   4112 @fnindex COMPLEX
   4113 @cindex complex numbers, conversion to
   4114 @cindex conversion, to complex
   4115 
   4116 @table @asis
   4117 @item @emph{Description}:
   4118 @code{COMPLEX(X, Y)} returns a complex number where @var{X} is converted
   4119 to the real component and @var{Y} is converted to the imaginary
   4120 component.
   4121 
   4122 @item @emph{Standard}:
   4123 GNU extension
   4124 
   4125 @item @emph{Class}:
   4126 Elemental function
   4127 
   4128 @item @emph{Syntax}:
   4129 @code{RESULT = COMPLEX(X, Y)}
   4130 
   4131 @item @emph{Arguments}:
   4132 @multitable @columnfractions .15 .70
   4133 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
   4134 @item @var{Y} @tab The type may be @code{INTEGER} or @code{REAL}.
   4135 @end multitable
   4136 
   4137 @item @emph{Return value}:
   4138 If @var{X} and @var{Y} are both of @code{INTEGER} type, then the return
   4139 value is of default @code{COMPLEX} type.
   4140 
   4141 If @var{X} and @var{Y} are of @code{REAL} type, or one is of @code{REAL}
   4142 type and one is of @code{INTEGER} type, then the return value is of
   4143 @code{COMPLEX} type with a kind equal to that of the @code{REAL}
   4144 argument with the highest precision.
   4145 
   4146 @item @emph{Example}:
   4147 @smallexample
   4148 program test_complex
   4149     integer :: i = 42
   4150     real :: x = 3.14
   4151     print *, complex(i, x)
   4152 end program test_complex
   4153 @end smallexample
   4154 
   4155 @item @emph{See also}:
   4156 @ref{CMPLX}
   4157 @end table
   4158 
   4159 
   4160 
   4161 @node CONJG
   4162 @section @code{CONJG} --- Complex conjugate function
   4163 @fnindex CONJG
   4164 @fnindex DCONJG
   4165 @cindex complex conjugate
   4166 
   4167 @table @asis
   4168 @item @emph{Description}:
   4169 @code{CONJG(Z)} returns the conjugate of @var{Z}.  If @var{Z} is @code{(x, y)}
   4170 then the result is @code{(x, -y)}
   4171 
   4172 @item @emph{Standard}:
   4173 Fortran 77 and later, has an overload that is a GNU extension
   4174 
   4175 @item @emph{Class}:
   4176 Elemental function
   4177 
   4178 @item @emph{Syntax}:
   4179 @code{Z = CONJG(Z)}
   4180 
   4181 @item @emph{Arguments}:
   4182 @multitable @columnfractions .15 .70
   4183 @item @var{Z} @tab The type shall be @code{COMPLEX}.
   4184 @end multitable
   4185 
   4186 @item @emph{Return value}:
   4187 The return value is of type @code{COMPLEX}.
   4188 
   4189 @item @emph{Example}:
   4190 @smallexample
   4191 program test_conjg
   4192     complex :: z = (2.0, 3.0)
   4193     complex(8) :: dz = (2.71_8, -3.14_8)
   4194     z= conjg(z)
   4195     print *, z
   4196     dz = dconjg(dz)
   4197     print *, dz
   4198 end program test_conjg
   4199 @end smallexample
   4200 
   4201 @item @emph{Specific names}:
   4202 @multitable @columnfractions .20 .23 .20 .33
   4203 @headitem Name             @tab Argument             @tab Return type       @tab Standard
   4204 @item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z}  @tab @code{COMPLEX(8)} @tab GNU extension
   4205 @end multitable
   4206 @end table
   4207 
   4208 
   4209 
   4210 @node COS
   4211 @section @code{COS} --- Cosine function
   4212 @fnindex COS
   4213 @fnindex DCOS
   4214 @fnindex CCOS
   4215 @fnindex ZCOS
   4216 @fnindex CDCOS
   4217 @cindex trigonometric function, cosine
   4218 @cindex cosine
   4219 
   4220 @table @asis
   4221 @item @emph{Description}:
   4222 @code{COS(X)} computes the cosine of @var{X}.
   4223 
   4224 @item @emph{Standard}:
   4225 Fortran 77 and later, has overloads that are GNU extensions
   4226 
   4227 @item @emph{Class}:
   4228 Elemental function
   4229 
   4230 @item @emph{Syntax}:
   4231 @code{RESULT = COS(X)}
   4232 
   4233 @item @emph{Arguments}:
   4234 @multitable @columnfractions .15 .70
   4235 @item @var{X} @tab The type shall be @code{REAL} or
   4236 @code{COMPLEX}.
   4237 @end multitable
   4238 
   4239 @item @emph{Return value}:
   4240 The return value is of the same type and kind as @var{X}. The real part
   4241 of the result is in radians. If @var{X} is of the type @code{REAL},
   4242 the return value lies in the range @math{ -1 \leq \cos (x) \leq 1}.
   4243 
   4244 @item @emph{Example}:
   4245 @smallexample
   4246 program test_cos
   4247   real :: x = 0.0
   4248   x = cos(x)
   4249 end program test_cos
   4250 @end smallexample
   4251 
   4252 @item @emph{Specific names}:
   4253 @multitable @columnfractions .20 .23 .20 .33
   4254 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   4255 @item @code{COS(X)}   @tab @code{REAL(4) X}    @tab @code{REAL(4)}    @tab Fortran 77 and later
   4256 @item @code{DCOS(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab Fortran 77 and later
   4257 @item @code{CCOS(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
   4258 @item @code{ZCOS(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4259 @item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4260 @end multitable
   4261 
   4262 @item @emph{See also}:
   4263 Inverse function: @gol
   4264 @ref{ACOS} @gol
   4265 Degrees function: @gol
   4266 @ref{COSD}
   4267 @end table
   4268 
   4269 
   4270 
   4271 @node COSD
   4272 @section @code{COSD} --- Cosine function, degrees
   4273 @fnindex COSD
   4274 @fnindex DCOSD
   4275 @fnindex CCOSD
   4276 @fnindex ZCOSD
   4277 @fnindex CDCOSD
   4278 @cindex trigonometric function, cosine, degrees
   4279 @cindex cosine, degrees
   4280 
   4281 @table @asis
   4282 @item @emph{Description}:
   4283 @code{COSD(X)} computes the cosine of @var{X} in degrees.
   4284 
   4285 This function is for compatibility only and should be avoided in favor of
   4286 standard constructs wherever possible.
   4287 
   4288 @item @emph{Standard}:
   4289 GNU extension, enabled with @option{-fdec-math}.
   4290 
   4291 @item @emph{Class}:
   4292 Elemental function
   4293 
   4294 @item @emph{Syntax}:
   4295 @code{RESULT = COSD(X)}
   4296 
   4297 @item @emph{Arguments}:
   4298 @multitable @columnfractions .15 .70
   4299 @item @var{X} @tab The type shall be @code{REAL} or
   4300 @code{COMPLEX}.
   4301 @end multitable
   4302 
   4303 @item @emph{Return value}:
   4304 The return value is of the same type and kind as @var{X}. The real part
   4305 of the result is in degrees.  If @var{X} is of the type @code{REAL},
   4306 the return value lies in the range @math{ -1 \leq \cosd (x) \leq 1}.
   4307 
   4308 @item @emph{Example}:
   4309 @smallexample
   4310 program test_cosd
   4311   real :: x = 0.0
   4312   x = cosd(x)
   4313 end program test_cosd
   4314 @end smallexample
   4315 
   4316 @item @emph{Specific names}:
   4317 @multitable @columnfractions .20 .23 .20 .33
   4318 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   4319 @item @code{COSD(X)}   @tab @code{REAL(4) X}    @tab @code{REAL(4)}    @tab GNU extension
   4320 @item @code{DCOSD(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab GNU extension
   4321 @item @code{CCOSD(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab GNU extension
   4322 @item @code{ZCOSD(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4323 @item @code{CDCOSD(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4324 @end multitable
   4325 
   4326 @item @emph{See also}:
   4327 Inverse function: @gol
   4328 @ref{ACOSD} @gol
   4329 Radians function: @gol
   4330 @ref{COS}
   4331 @end table
   4332 
   4333 
   4334 
   4335 @node COSH
   4336 @section @code{COSH} --- Hyperbolic cosine function
   4337 @fnindex COSH
   4338 @fnindex DCOSH
   4339 @cindex hyperbolic cosine
   4340 @cindex hyperbolic function, cosine
   4341 @cindex cosine, hyperbolic
   4342 
   4343 @table @asis
   4344 @item @emph{Description}:
   4345 @code{COSH(X)} computes the hyperbolic cosine of @var{X}.
   4346 
   4347 @item @emph{Standard}:
   4348 Fortran 77 and later, for a complex argument Fortran 2008 or later
   4349 
   4350 @item @emph{Class}:
   4351 Elemental function
   4352 
   4353 @item @emph{Syntax}:
   4354 @code{X = COSH(X)}
   4355 
   4356 @item @emph{Arguments}:
   4357 @multitable @columnfractions .15 .70
   4358 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   4359 @end multitable
   4360 
   4361 @item @emph{Return value}:
   4362 The return value has same type and kind as @var{X}. If @var{X} is
   4363 complex, the imaginary part of the result is in radians. If @var{X}
   4364 is @code{REAL}, the return value has a lower bound of one,
   4365 @math{\cosh (x) \geq 1}.
   4366 
   4367 @item @emph{Example}:
   4368 @smallexample
   4369 program test_cosh
   4370   real(8) :: x = 1.0_8
   4371   x = cosh(x)
   4372 end program test_cosh
   4373 @end smallexample
   4374 
   4375 @item @emph{Specific names}:
   4376 @multitable @columnfractions .20 .23 .20 .33
   4377 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   4378 @item @code{COSH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   4379 @item @code{DCOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   4380 @end multitable
   4381 
   4382 @item @emph{See also}:
   4383 Inverse function: @gol
   4384 @ref{ACOSH}
   4385 @end table
   4386 
   4387 
   4388 
   4389 @node COTAN
   4390 @section @code{COTAN} --- Cotangent function
   4391 @fnindex COTAN
   4392 @fnindex DCOTAN
   4393 @cindex trigonometric function, cotangent
   4394 @cindex cotangent
   4395 
   4396 @table @asis
   4397 @item @emph{Description}:
   4398 @code{COTAN(X)} computes the cotangent of @var{X}. Equivalent to @code{COS(x)}
   4399 divided by @code{SIN(x)}, or @code{1 / TAN(x)}.
   4400 
   4401 This function is for compatibility only and should be avoided in favor of
   4402 standard constructs wherever possible.
   4403 
   4404 @item @emph{Standard}:
   4405 GNU extension, enabled with @option{-fdec-math}.
   4406 
   4407 @item @emph{Class}:
   4408 Elemental function
   4409 
   4410 @item @emph{Syntax}:
   4411 @code{RESULT = COTAN(X)}
   4412 
   4413 @item @emph{Arguments}:
   4414 @multitable @columnfractions .15 .70
   4415 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   4416 @end multitable
   4417 
   4418 @item @emph{Return value}:
   4419 The return value has same type and kind as @var{X}, and its value is in radians.
   4420 
   4421 @item @emph{Example}:
   4422 @smallexample
   4423 program test_cotan
   4424   real(8) :: x = 0.165_8
   4425   x = cotan(x)
   4426 end program test_cotan
   4427 @end smallexample
   4428 
   4429 @item @emph{Specific names}:
   4430 @multitable @columnfractions .20 .23 .20 .33
   4431 @headitem Name            @tab Argument          @tab Return type     @tab Standard
   4432 @item @code{COTAN(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU extension
   4433 @item @code{DCOTAN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU extension
   4434 @end multitable
   4435 
   4436 @item @emph{See also}:
   4437 Converse function: @gol
   4438 @ref{TAN} @gol
   4439 Degrees function: @gol
   4440 @ref{COTAND}
   4441 @end table
   4442 
   4443 
   4444 
   4445 @node COTAND
   4446 @section @code{COTAND} --- Cotangent function, degrees
   4447 @fnindex COTAND
   4448 @fnindex DCOTAND
   4449 @cindex trigonometric function, cotangent, degrees
   4450 @cindex cotangent, degrees
   4451 
   4452 @table @asis
   4453 @item @emph{Description}:
   4454 @code{COTAND(X)} computes the cotangent of @var{X} in degrees.  Equivalent to
   4455 @code{COSD(x)} divided by @code{SIND(x)}, or @code{1 / TAND(x)}.
   4456 
   4457 @item @emph{Standard}:
   4458 GNU extension, enabled with @option{-fdec-math}.
   4459 
   4460 This function is for compatibility only and should be avoided in favor of
   4461 standard constructs wherever possible.
   4462 
   4463 @item @emph{Class}:
   4464 Elemental function
   4465 
   4466 @item @emph{Syntax}:
   4467 @code{RESULT = COTAND(X)}
   4468 
   4469 @item @emph{Arguments}:
   4470 @multitable @columnfractions .15 .70
   4471 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   4472 @end multitable
   4473 
   4474 @item @emph{Return value}:
   4475 The return value has same type and kind as @var{X}, and its value is in degrees.
   4476 
   4477 @item @emph{Example}:
   4478 @smallexample
   4479 program test_cotand
   4480   real(8) :: x = 0.165_8
   4481   x = cotand(x)
   4482 end program test_cotand
   4483 @end smallexample
   4484 
   4485 @item @emph{Specific names}:
   4486 @multitable @columnfractions .20 .23 .20 .33
   4487 @headitem Name            @tab Argument          @tab Return type     @tab Standard
   4488 @item @code{COTAND(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU extension
   4489 @item @code{DCOTAND(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU extension
   4490 @end multitable
   4491 
   4492 @item @emph{See also}:
   4493 Converse function: @gol
   4494 @ref{TAND} @gol
   4495 Radians function: @gol
   4496 @ref{COTAN}
   4497 @end table
   4498 
   4499 
   4500 
   4501 @node COUNT
   4502 @section @code{COUNT} --- Count function
   4503 @fnindex COUNT
   4504 @cindex array, conditionally count elements
   4505 @cindex array, element counting
   4506 @cindex array, number of elements
   4507 
   4508 @table @asis
   4509 @item @emph{Description}:
   4510 
   4511 Counts the number of @code{.TRUE.} elements in a logical @var{MASK},
   4512 or, if the @var{DIM} argument is supplied, counts the number of
   4513 elements along each row of the array in the @var{DIM} direction.
   4514 If the array has zero size, or all of the elements of @var{MASK} are
   4515 @code{.FALSE.}, then the result is @code{0}.
   4516 
   4517 @item @emph{Standard}:
   4518 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   4519 
   4520 @item @emph{Class}:
   4521 Transformational function
   4522 
   4523 @item @emph{Syntax}:
   4524 @code{RESULT = COUNT(MASK [, DIM, KIND])}
   4525 
   4526 @item @emph{Arguments}:
   4527 @multitable @columnfractions .15 .70
   4528 @item @var{MASK} @tab The type shall be @code{LOGICAL}.
   4529 @item @var{DIM}  @tab (Optional) The type shall be @code{INTEGER}.
   4530 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   4531 expression indicating the kind parameter of the result.
   4532 @end multitable
   4533 
   4534 @item @emph{Return value}:
   4535 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   4536 @var{KIND} is absent, the return value is of default integer kind.
   4537 If @var{DIM} is present, the result is an array with a rank one less
   4538 than the rank of @var{ARRAY}, and a size corresponding to the shape
   4539 of @var{ARRAY} with the @var{DIM} dimension removed.
   4540 
   4541 @item @emph{Example}:
   4542 @smallexample
   4543 program test_count
   4544     integer, dimension(2,3) :: a, b
   4545     logical, dimension(2,3) :: mask
   4546     a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
   4547     b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
   4548     print '(3i3)', a(1,:)
   4549     print '(3i3)', a(2,:)
   4550     print *
   4551     print '(3i3)', b(1,:)
   4552     print '(3i3)', b(2,:)
   4553     print *
   4554     mask = a.ne.b
   4555     print '(3l3)', mask(1,:)
   4556     print '(3l3)', mask(2,:)
   4557     print *
   4558     print '(3i3)', count(mask)
   4559     print *
   4560     print '(3i3)', count(mask, 1)
   4561     print *
   4562     print '(3i3)', count(mask, 2)
   4563 end program test_count
   4564 @end smallexample
   4565 @end table
   4566 
   4567 
   4568 
   4569 @node CPU_TIME
   4570 @section @code{CPU_TIME} --- CPU elapsed time in seconds
   4571 @fnindex CPU_TIME
   4572 @cindex time, elapsed
   4573 
   4574 @table @asis
   4575 @item @emph{Description}:
   4576 Returns a @code{REAL} value representing the elapsed CPU time in
   4577 seconds.  This is useful for testing segments of code to determine
   4578 execution time.
   4579 
   4580 If a time source is available, time will be reported with microsecond
   4581 resolution. If no time source is available, @var{TIME} is set to
   4582 @code{-1.0}.
   4583 
   4584 Note that @var{TIME} may contain a, system dependent, arbitrary offset
   4585 and may not start with @code{0.0}. For @code{CPU_TIME}, the absolute
   4586 value is meaningless, only differences between subsequent calls to
   4587 this subroutine, as shown in the example below, should be used.
   4588 
   4589 
   4590 @item @emph{Standard}:
   4591 Fortran 95 and later
   4592 
   4593 @item @emph{Class}:
   4594 Subroutine
   4595 
   4596 @item @emph{Syntax}:
   4597 @code{CALL CPU_TIME(TIME)}
   4598 
   4599 @item @emph{Arguments}:
   4600 @multitable @columnfractions .15 .70
   4601 @item @var{TIME} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}.
   4602 @end multitable
   4603 
   4604 @item @emph{Return value}:
   4605 None
   4606 
   4607 @item @emph{Example}:
   4608 @smallexample
   4609 program test_cpu_time
   4610     real :: start, finish
   4611     call cpu_time(start)
   4612         ! put code to test here
   4613     call cpu_time(finish)
   4614     print '("Time = ",f6.3," seconds.")',finish-start
   4615 end program test_cpu_time
   4616 @end smallexample
   4617 
   4618 @item @emph{See also}:
   4619 @ref{SYSTEM_CLOCK}, @gol
   4620 @ref{DATE_AND_TIME}
   4621 @end table
   4622 
   4623 
   4624 
   4625 @node CSHIFT
   4626 @section @code{CSHIFT} --- Circular shift elements of an array
   4627 @fnindex CSHIFT
   4628 @cindex array, shift circularly
   4629 @cindex array, permutation
   4630 @cindex array, rotate
   4631 
   4632 @table @asis
   4633 @item @emph{Description}:
   4634 @code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of
   4635 @var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is omitted it is
   4636 taken to be @code{1}.  @var{DIM} is a scalar of type @code{INTEGER} in the
   4637 range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}.
   4638 If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted
   4639 by @var{SHIFT} places.  If rank is greater than one, then all complete rank one
   4640 sections of @var{ARRAY} along the given dimension are shifted.  Elements
   4641 shifted out one end of each rank one section are shifted back in the other end.
   4642 
   4643 @item @emph{Standard}:
   4644 Fortran 90 and later
   4645 
   4646 @item @emph{Class}:
   4647 Transformational function
   4648 
   4649 @item @emph{Syntax}:
   4650 @code{RESULT = CSHIFT(ARRAY, SHIFT [, DIM])}
   4651 
   4652 @item @emph{Arguments}:
   4653 @multitable @columnfractions .15 .70
   4654 @item @var{ARRAY}  @tab Shall be an array of any type.
   4655 @item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
   4656 @item @var{DIM}    @tab The type shall be @code{INTEGER}.
   4657 @end multitable
   4658 
   4659 @item @emph{Return value}:
   4660 Returns an array of same type and rank as the @var{ARRAY} argument.
   4661 
   4662 @item @emph{Example}:
   4663 @smallexample
   4664 program test_cshift
   4665     integer, dimension(3,3) :: a
   4666     a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
   4667     print '(3i3)', a(1,:)
   4668     print '(3i3)', a(2,:)
   4669     print '(3i3)', a(3,:)    
   4670     a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)
   4671     print *
   4672     print '(3i3)', a(1,:)
   4673     print '(3i3)', a(2,:)
   4674     print '(3i3)', a(3,:)
   4675 end program test_cshift
   4676 @end smallexample
   4677 @end table
   4678 
   4679 
   4680 
   4681 @node CTIME
   4682 @section @code{CTIME} --- Convert a time into a string
   4683 @fnindex CTIME
   4684 @cindex time, conversion to string
   4685 @cindex conversion, to string
   4686 
   4687 @table @asis
   4688 @item @emph{Description}:
   4689 @code{CTIME} converts a system time value, such as returned by
   4690 @ref{TIME8}, to a string. The output will be of the form @samp{Sat
   4691 Aug 19 18:13:14 1995}.
   4692 
   4693 This intrinsic is provided in both subroutine and function forms; however,
   4694 only one form can be used in any given program unit.
   4695 
   4696 @item @emph{Standard}:
   4697 GNU extension
   4698 
   4699 @item @emph{Class}:
   4700 Subroutine, function
   4701 
   4702 @item @emph{Syntax}:
   4703 @multitable @columnfractions .80
   4704 @item @code{CALL CTIME(TIME, RESULT)}.
   4705 @item @code{RESULT = CTIME(TIME)}.
   4706 @end multitable
   4707 
   4708 @item @emph{Arguments}:
   4709 @multitable @columnfractions .15 .70
   4710 @item @var{TIME}    @tab The type shall be of type @code{INTEGER}.
   4711 @item @var{RESULT}  @tab The type shall be of type @code{CHARACTER} and
   4712 of default kind. It is an @code{INTENT(OUT)} argument. If the length
   4713 of this variable is too short for the time and date string to fit
   4714 completely, it will be blank on procedure return.
   4715 @end multitable
   4716 
   4717 @item @emph{Return value}:
   4718 The converted date and time as a string. 
   4719 
   4720 @item @emph{Example}:
   4721 @smallexample
   4722 program test_ctime
   4723     integer(8) :: i
   4724     character(len=30) :: date
   4725     i = time8()
   4726 
   4727     ! Do something, main part of the program
   4728     
   4729     call ctime(i,date)
   4730     print *, 'Program was started on ', date
   4731 end program test_ctime
   4732 @end smallexample
   4733 
   4734 @item @emph{See Also}:
   4735 @ref{DATE_AND_TIME}, @gol
   4736 @ref{GMTIME}, @gol
   4737 @ref{LTIME}, @gol
   4738 @ref{TIME}, @gol
   4739 @ref{TIME8}
   4740 @end table
   4741 
   4742 
   4743 
   4744 @node DATE_AND_TIME
   4745 @section @code{DATE_AND_TIME} --- Date and time subroutine
   4746 @fnindex DATE_AND_TIME
   4747 @cindex date, current
   4748 @cindex current date
   4749 @cindex time, current
   4750 @cindex current time
   4751 
   4752 @table @asis
   4753 @item @emph{Description}:
   4754 @code{DATE_AND_TIME(DATE, TIME, ZONE, VALUES)} gets the corresponding date and
   4755 time information from the real-time system clock.  @var{DATE} is
   4756 @code{INTENT(OUT)} and has form ccyymmdd.  @var{TIME} is @code{INTENT(OUT)} and
   4757 has form hhmmss.sss.  @var{ZONE} is @code{INTENT(OUT)} and has form (+-)hhmm,
   4758 representing the difference with respect to Coordinated Universal Time (UTC).
   4759 Unavailable time and date parameters return blanks.
   4760 
   4761 @var{VALUES} is @code{INTENT(OUT)} and provides the following:
   4762 
   4763 @multitable @columnfractions .15 .70
   4764 @item @code{VALUE(1)}: @tab The year
   4765 @item @code{VALUE(2)}: @tab The month
   4766 @item @code{VALUE(3)}: @tab The day of the month
   4767 @item @code{VALUE(4)}: @tab Time difference with UTC in minutes
   4768 @item @code{VALUE(5)}: @tab The hour of the day
   4769 @item @code{VALUE(6)}: @tab The minutes of the hour
   4770 @item @code{VALUE(7)}: @tab The seconds of the minute
   4771 @item @code{VALUE(8)}: @tab The milliseconds of the second
   4772 @end multitable
   4773 
   4774 @item @emph{Standard}:
   4775 Fortran 90 and later
   4776 
   4777 @item @emph{Class}:
   4778 Subroutine
   4779 
   4780 @item @emph{Syntax}:
   4781 @code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])}
   4782 
   4783 @item @emph{Arguments}:
   4784 @multitable @columnfractions .15 .70
   4785 @item @var{DATE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=8)}
   4786 or larger, and of default kind.
   4787 @item @var{TIME}  @tab (Optional) The type shall be @code{CHARACTER(LEN=10)}
   4788 or larger, and of default kind.
   4789 @item @var{ZONE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=5)}
   4790 or larger, and of default kind.
   4791 @item @var{VALUES}@tab (Optional) The type shall be @code{INTEGER(8)}.
   4792 @end multitable
   4793 
   4794 @item @emph{Return value}:
   4795 None
   4796 
   4797 @item @emph{Example}:
   4798 @smallexample
   4799 program test_time_and_date
   4800     character(8)  :: date
   4801     character(10) :: time
   4802     character(5)  :: zone
   4803     integer,dimension(8) :: values
   4804     ! using keyword arguments
   4805     call date_and_time(date,time,zone,values)
   4806     call date_and_time(DATE=date,ZONE=zone)
   4807     call date_and_time(TIME=time)
   4808     call date_and_time(VALUES=values)
   4809     print '(a,2x,a,2x,a)', date, time, zone
   4810     print '(8i5)', values
   4811 end program test_time_and_date
   4812 @end smallexample
   4813 
   4814 @item @emph{See also}:
   4815 @ref{CPU_TIME}, @gol
   4816 @ref{SYSTEM_CLOCK}
   4817 @end table
   4818 
   4819 
   4820 
   4821 @node DBLE
   4822 @section @code{DBLE} --- Double conversion function
   4823 @fnindex DBLE
   4824 @cindex conversion, to real
   4825 
   4826 @table @asis
   4827 @item @emph{Description}:
   4828 @code{DBLE(A)} Converts @var{A} to double precision real type.
   4829 
   4830 @item @emph{Standard}:
   4831 Fortran 77 and later
   4832 
   4833 @item @emph{Class}:
   4834 Elemental function
   4835 
   4836 @item @emph{Syntax}:
   4837 @code{RESULT = DBLE(A)}
   4838 
   4839 @item @emph{Arguments}:
   4840 @multitable @columnfractions .15 .70
   4841 @item @var{A} @tab The type shall be @code{INTEGER}, @code{REAL},
   4842 or @code{COMPLEX}.
   4843 @end multitable
   4844 
   4845 @item @emph{Return value}:
   4846 The return value is of type double precision real.
   4847 
   4848 @item @emph{Example}:
   4849 @smallexample
   4850 program test_dble
   4851     real    :: x = 2.18
   4852     integer :: i = 5
   4853     complex :: z = (2.3,1.14)
   4854     print *, dble(x), dble(i), dble(z)
   4855 end program test_dble
   4856 @end smallexample
   4857 
   4858 @item @emph{See also}:
   4859 @ref{REAL}
   4860 @end table
   4861 
   4862 
   4863 
   4864 @node DCMPLX
   4865 @section @code{DCMPLX} --- Double complex conversion function
   4866 @fnindex DCMPLX
   4867 @cindex complex numbers, conversion to
   4868 @cindex conversion, to complex
   4869 
   4870 @table @asis
   4871 @item @emph{Description}:
   4872 @code{DCMPLX(X [,Y])} returns a double complex number where @var{X} is
   4873 converted to the real component.  If @var{Y} is present it is converted to the
   4874 imaginary component.  If @var{Y} is not present then the imaginary component is
   4875 set to 0.0.  If @var{X} is complex then @var{Y} must not be present.
   4876 
   4877 @item @emph{Standard}:
   4878 GNU extension
   4879 
   4880 @item @emph{Class}:
   4881 Elemental function
   4882 
   4883 @item @emph{Syntax}:
   4884 @code{RESULT = DCMPLX(X [, Y])}
   4885 
   4886 @item @emph{Arguments}:
   4887 @multitable @columnfractions .15 .70
   4888 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
   4889 or @code{COMPLEX}.
   4890 @item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX}.) May be
   4891 @code{INTEGER} or @code{REAL}. 
   4892 @end multitable
   4893 
   4894 @item @emph{Return value}:
   4895 The return value is of type @code{COMPLEX(8)}
   4896 
   4897 @item @emph{Example}:
   4898 @smallexample
   4899 program test_dcmplx
   4900     integer :: i = 42
   4901     real :: x = 3.14
   4902     complex :: z
   4903     z = cmplx(i, x)
   4904     print *, dcmplx(i)
   4905     print *, dcmplx(x)
   4906     print *, dcmplx(z)
   4907     print *, dcmplx(x,i)
   4908 end program test_dcmplx
   4909 @end smallexample
   4910 @end table
   4911 
   4912 
   4913 @node DIGITS
   4914 @section @code{DIGITS} --- Significant binary digits function
   4915 @fnindex DIGITS
   4916 @cindex model representation, significant digits
   4917 
   4918 @table @asis
   4919 @item @emph{Description}:
   4920 @code{DIGITS(X)} returns the number of significant binary digits of the internal
   4921 model representation of @var{X}.  For example, on a system using a 32-bit
   4922 floating point representation, a default real number would likely return 24.
   4923 
   4924 @item @emph{Standard}:
   4925 Fortran 90 and later
   4926 
   4927 @item @emph{Class}:
   4928 Inquiry function
   4929 
   4930 @item @emph{Syntax}:
   4931 @code{RESULT = DIGITS(X)}
   4932 
   4933 @item @emph{Arguments}:
   4934 @multitable @columnfractions .15 .70
   4935 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
   4936 @end multitable
   4937 
   4938 @item @emph{Return value}:
   4939 The return value is of type @code{INTEGER}.
   4940 
   4941 @item @emph{Example}:
   4942 @smallexample
   4943 program test_digits
   4944     integer :: i = 12345
   4945     real :: x = 3.143
   4946     real(8) :: y = 2.33
   4947     print *, digits(i)
   4948     print *, digits(x)
   4949     print *, digits(y)
   4950 end program test_digits
   4951 @end smallexample
   4952 @end table
   4953 
   4954 
   4955 
   4956 @node DIM
   4957 @section @code{DIM} --- Positive difference
   4958 @fnindex DIM
   4959 @fnindex IDIM
   4960 @fnindex DDIM
   4961 @cindex positive difference
   4962 
   4963 @table @asis
   4964 @item @emph{Description}:
   4965 @code{DIM(X,Y)} returns the difference @code{X-Y} if the result is positive;
   4966 otherwise returns zero.
   4967 
   4968 @item @emph{Standard}:
   4969 Fortran 77 and later
   4970 
   4971 @item @emph{Class}:
   4972 Elemental function
   4973 
   4974 @item @emph{Syntax}:
   4975 @code{RESULT = DIM(X, Y)}
   4976 
   4977 @item @emph{Arguments}:
   4978 @multitable @columnfractions .15 .70
   4979 @item @var{X} @tab The type shall be @code{INTEGER} or @code{REAL}
   4980 @item @var{Y} @tab The type shall be the same type and kind as @var{X}.  (As
   4981 a GNU extension, arguments of different kinds are permitted.)
   4982 @end multitable
   4983 
   4984 @item @emph{Return value}:
   4985 The return value is of type @code{INTEGER} or @code{REAL}.  (As a GNU
   4986 extension, kind is the largest kind of the actual arguments.)
   4987 
   4988 @item @emph{Example}:
   4989 @smallexample
   4990 program test_dim
   4991     integer :: i
   4992     real(8) :: x
   4993     i = dim(4, 15)
   4994     x = dim(4.345_8, 2.111_8)
   4995     print *, i
   4996     print *, x
   4997 end program test_dim
   4998 @end smallexample
   4999 
   5000 @item @emph{Specific names}:
   5001 @multitable @columnfractions .20 .26 .20 .30
   5002 @headitem Name             @tab Argument               @tab Return type       @tab Standard
   5003 @item @code{DIM(X,Y)}  @tab @code{REAL(4) X, Y}    @tab @code{REAL(4)}    @tab Fortran 77 and later
   5004 @item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X, Y} @tab @code{INTEGER(4)} @tab Fortran 77 and later
   5005 @item @code{DDIM(X,Y)} @tab @code{REAL(8) X, Y}    @tab @code{REAL(8)}    @tab Fortran 77 and later
   5006 @end multitable
   5007 @end table
   5008 
   5009 
   5010 
   5011 @node DOT_PRODUCT
   5012 @section @code{DOT_PRODUCT} --- Dot product function
   5013 @fnindex DOT_PRODUCT
   5014 @cindex dot product
   5015 @cindex vector product
   5016 @cindex product, vector
   5017 
   5018 @table @asis
   5019 @item @emph{Description}:
   5020 @code{DOT_PRODUCT(VECTOR_A, VECTOR_B)} computes the dot product multiplication
   5021 of two vectors @var{VECTOR_A} and @var{VECTOR_B}.  The two vectors may be
   5022 either numeric or logical and must be arrays of rank one and of equal size. If
   5023 the vectors are @code{INTEGER} or @code{REAL}, the result is
   5024 @code{SUM(VECTOR_A*VECTOR_B)}. If the vectors are @code{COMPLEX}, the result
   5025 is @code{SUM(CONJG(VECTOR_A)*VECTOR_B)}. If the vectors are @code{LOGICAL},
   5026 the result is @code{ANY(VECTOR_A .AND. VECTOR_B)}.  
   5027 
   5028 @item @emph{Standard}:
   5029 Fortran 90 and later
   5030 
   5031 @item @emph{Class}:
   5032 Transformational function
   5033 
   5034 @item @emph{Syntax}:
   5035 @code{RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)}
   5036 
   5037 @item @emph{Arguments}:
   5038 @multitable @columnfractions .15 .70
   5039 @item @var{VECTOR_A} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
   5040 @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.
   5041 @end multitable
   5042 
   5043 @item @emph{Return value}:
   5044 If the arguments are numeric, the return value is a scalar of numeric type,
   5045 @code{INTEGER}, @code{REAL}, or @code{COMPLEX}.  If the arguments are
   5046 @code{LOGICAL}, the return value is @code{.TRUE.} or @code{.FALSE.}.
   5047 
   5048 @item @emph{Example}:
   5049 @smallexample
   5050 program test_dot_prod
   5051     integer, dimension(3) :: a, b
   5052     a = (/ 1, 2, 3 /)
   5053     b = (/ 4, 5, 6 /)
   5054     print '(3i3)', a
   5055     print *
   5056     print '(3i3)', b
   5057     print *
   5058     print *, dot_product(a,b)
   5059 end program test_dot_prod
   5060 @end smallexample
   5061 @end table
   5062 
   5063 
   5064 
   5065 @node DPROD
   5066 @section @code{DPROD} --- Double product function
   5067 @fnindex DPROD
   5068 @cindex product, double-precision
   5069 
   5070 @table @asis
   5071 @item @emph{Description}:
   5072 @code{DPROD(X,Y)} returns the product @code{X*Y}.
   5073 
   5074 @item @emph{Standard}:
   5075 Fortran 77 and later
   5076 
   5077 @item @emph{Class}:
   5078 Elemental function
   5079 
   5080 @item @emph{Syntax}:
   5081 @code{RESULT = DPROD(X, Y)}
   5082 
   5083 @item @emph{Arguments}:
   5084 @multitable @columnfractions .15 .70
   5085 @item @var{X} @tab The type shall be @code{REAL}.
   5086 @item @var{Y} @tab The type shall be @code{REAL}.
   5087 @end multitable
   5088 
   5089 @item @emph{Return value}:
   5090 The return value is of type @code{REAL(8)}.
   5091 
   5092 @item @emph{Example}:
   5093 @smallexample
   5094 program test_dprod
   5095     real :: x = 5.2
   5096     real :: y = 2.3
   5097     real(8) :: d
   5098     d = dprod(x,y)
   5099     print *, d
   5100 end program test_dprod
   5101 @end smallexample
   5102 
   5103 @item @emph{Specific names}:
   5104 @multitable @columnfractions .20 .23 .20 .33
   5105 @headitem Name              @tab Argument               @tab Return type       @tab Standard
   5106 @item @code{DPROD(X,Y)} @tab @code{REAL(4) X, Y}    @tab @code{REAL(8)}    @tab Fortran 77 and later
   5107 @end multitable
   5108 
   5109 @end table
   5110 
   5111 
   5112 @node DREAL
   5113 @section @code{DREAL} --- Double real part function
   5114 @fnindex DREAL
   5115 @cindex complex numbers, real part
   5116 
   5117 @table @asis
   5118 @item @emph{Description}:
   5119 @code{DREAL(Z)} returns the real part of complex variable @var{Z}.
   5120 
   5121 @item @emph{Standard}:
   5122 GNU extension
   5123 
   5124 @item @emph{Class}:
   5125 Elemental function
   5126 
   5127 @item @emph{Syntax}:
   5128 @code{RESULT = DREAL(A)}
   5129 
   5130 @item @emph{Arguments}:
   5131 @multitable @columnfractions .15 .70
   5132 @item @var{A} @tab The type shall be @code{COMPLEX(8)}.
   5133 @end multitable
   5134 
   5135 @item @emph{Return value}:
   5136 The return value is of type @code{REAL(8)}.
   5137 
   5138 @item @emph{Example}:
   5139 @smallexample
   5140 program test_dreal
   5141     complex(8) :: z = (1.3_8,7.2_8)
   5142     print *, dreal(z)
   5143 end program test_dreal
   5144 @end smallexample
   5145 
   5146 @item @emph{See also}:
   5147 @ref{AIMAG}
   5148 
   5149 @end table
   5150 
   5151 
   5152 
   5153 @node DSHIFTL
   5154 @section @code{DSHIFTL} --- Combined left shift
   5155 @fnindex DSHIFTL
   5156 @cindex left shift, combined
   5157 @cindex shift, left
   5158 
   5159 @table @asis
   5160 @item @emph{Description}:
   5161 @code{DSHIFTL(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
   5162 rightmost @var{SHIFT} bits of the result are the leftmost @var{SHIFT}
   5163 bits of @var{J}, and the remaining bits are the rightmost bits of
   5164 @var{I}.
   5165 
   5166 @item @emph{Standard}:
   5167 Fortran 2008 and later
   5168 
   5169 @item @emph{Class}:
   5170 Elemental function
   5171 
   5172 @item @emph{Syntax}:
   5173 @code{RESULT = DSHIFTL(I, J, SHIFT)}
   5174 
   5175 @item @emph{Arguments}:
   5176 @multitable @columnfractions .15 .70
   5177 @item @var{I} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5178 @item @var{J} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5179 If both @var{I} and @var{J} have integer type, then they shall have
   5180 the same kind type parameter. @var{I} and @var{J} shall not both be
   5181 BOZ constants.
   5182 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}. It shall
   5183 be nonnegative.  If @var{I} is not a BOZ constant, then @var{SHIFT}
   5184 shall be less than or equal to @code{BIT_SIZE(I)}; otherwise,
   5185 @var{SHIFT} shall be less than or equal to @code{BIT_SIZE(J)}.
   5186 @end multitable
   5187 
   5188 @item @emph{Return value}:
   5189 If either @var{I} or @var{J} is a BOZ constant, it is first converted
   5190 as if by the intrinsic function @code{INT} to an integer type with the
   5191 kind type parameter of the other.
   5192 
   5193 @item @emph{See also}:
   5194 @ref{DSHIFTR}
   5195 @end table
   5196 
   5197 
   5198 @node DSHIFTR
   5199 @section @code{DSHIFTR} --- Combined right shift
   5200 @fnindex DSHIFTR
   5201 @cindex right shift, combined
   5202 @cindex shift, right
   5203 
   5204 @table @asis
   5205 @item @emph{Description}:
   5206 @code{DSHIFTR(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
   5207 leftmost @var{SHIFT} bits of the result are the rightmost @var{SHIFT}
   5208 bits of @var{I}, and the remaining bits are the leftmost bits of
   5209 @var{J}.
   5210 
   5211 @item @emph{Standard}:
   5212 Fortran 2008 and later
   5213 
   5214 @item @emph{Class}:
   5215 Elemental function
   5216 
   5217 @item @emph{Syntax}:
   5218 @code{RESULT = DSHIFTR(I, J, SHIFT)}
   5219 
   5220 @item @emph{Arguments}:
   5221 @multitable @columnfractions .15 .70
   5222 @item @var{I} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5223 @item @var{J} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5224 If both @var{I} and @var{J} have integer type, then they shall have
   5225 the same kind type parameter. @var{I} and @var{J} shall not both be
   5226 BOZ constants.
   5227 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}. It shall
   5228 be nonnegative.  If @var{I} is not a BOZ constant, then @var{SHIFT}
   5229 shall be less than or equal to @code{BIT_SIZE(I)}; otherwise,
   5230 @var{SHIFT} shall be less than or equal to @code{BIT_SIZE(J)}.
   5231 @end multitable
   5232 
   5233 @item @emph{Return value}:
   5234 If either @var{I} or @var{J} is a BOZ constant, it is first converted
   5235 as if by the intrinsic function @code{INT} to an integer type with the
   5236 kind type parameter of the other.
   5237 
   5238 @item @emph{See also}:
   5239 @ref{DSHIFTL}
   5240 @end table
   5241 
   5242 
   5243 @node DTIME
   5244 @section @code{DTIME} --- Execution time subroutine (or function)
   5245 @fnindex DTIME
   5246 @cindex time, elapsed
   5247 @cindex elapsed time
   5248 
   5249 @table @asis
   5250 @item @emph{Description}:
   5251 @code{DTIME(VALUES, TIME)} initially returns the number of seconds of runtime
   5252 since the start of the process's execution in @var{TIME}.  @var{VALUES}
   5253 returns the user and system components of this time in @code{VALUES(1)} and
   5254 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) +
   5255 VALUES(2)}.
   5256 
   5257 Subsequent invocations of @code{DTIME} return values accumulated since the
   5258 previous invocation.
   5259 
   5260 On some systems, the underlying timings are represented using types with
   5261 sufficiently small limits that overflows (wrap around) are possible, such as
   5262 32-bit types. Therefore, the values returned by this intrinsic might be, or
   5263 become, negative, or numerically less than previous values, during a single
   5264 run of the compiled program.
   5265 
   5266 Please note, that this implementation is thread safe if used within OpenMP
   5267 directives, i.e., its state will be consistent while called from multiple
   5268 threads. However, if @code{DTIME} is called from multiple threads, the result
   5269 is still the time since the last invocation. This may not give the intended
   5270 results. If possible, use @code{CPU_TIME} instead.
   5271 
   5272 This intrinsic is provided in both subroutine and function forms; however,
   5273 only one form can be used in any given program unit.
   5274 
   5275 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
   5276 
   5277 @multitable @columnfractions .15 .70
   5278 @item @code{VALUES(1)}: @tab User time in seconds.
   5279 @item @code{VALUES(2)}: @tab System time in seconds.
   5280 @item @code{TIME}: @tab Run time since start in seconds.
   5281 @end multitable
   5282 
   5283 @item @emph{Standard}:
   5284 GNU extension
   5285 
   5286 @item @emph{Class}:
   5287 Subroutine, function
   5288 
   5289 @item @emph{Syntax}:
   5290 @multitable @columnfractions .80
   5291 @item @code{CALL DTIME(VALUES, TIME)}.
   5292 @item @code{TIME = DTIME(VALUES)}, (not recommended).
   5293 @end multitable
   5294 
   5295 @item @emph{Arguments}:
   5296 @multitable @columnfractions .15 .70
   5297 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
   5298 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
   5299 @end multitable
   5300 
   5301 @item @emph{Return value}:
   5302 Elapsed time in seconds since the last invocation or since the start of program
   5303 execution if not called before.
   5304 
   5305 @item @emph{Example}:
   5306 @smallexample
   5307 program test_dtime
   5308     integer(8) :: i, j
   5309     real, dimension(2) :: tarray
   5310     real :: result
   5311     call dtime(tarray, result)
   5312     print *, result
   5313     print *, tarray(1)
   5314     print *, tarray(2)   
   5315     do i=1,100000000    ! Just a delay
   5316         j = i * i - i
   5317     end do
   5318     call dtime(tarray, result)
   5319     print *, result
   5320     print *, tarray(1)
   5321     print *, tarray(2)
   5322 end program test_dtime
   5323 @end smallexample
   5324 
   5325 @item @emph{See also}:
   5326 @ref{CPU_TIME}
   5327 
   5328 @end table
   5329 
   5330 
   5331 
   5332 @node EOSHIFT
   5333 @section @code{EOSHIFT} --- End-off shift elements of an array
   5334 @fnindex EOSHIFT
   5335 @cindex array, shift
   5336 
   5337 @table @asis
   5338 @item @emph{Description}:
   5339 @code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on
   5340 elements of @var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is
   5341 omitted it is taken to be @code{1}.  @var{DIM} is a scalar of type
   5342 @code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the
   5343 rank of @var{ARRAY}.  If the rank of @var{ARRAY} is one, then all elements of
   5344 @var{ARRAY} are shifted by @var{SHIFT} places.  If rank is greater than one,
   5345 then all complete rank one sections of @var{ARRAY} along the given dimension are
   5346 shifted.  Elements shifted out one end of each rank one section are dropped.  If
   5347 @var{BOUNDARY} is present then the corresponding value of from @var{BOUNDARY}
   5348 is copied back in the other end.  If @var{BOUNDARY} is not present then the
   5349 following are copied in depending on the type of @var{ARRAY}.
   5350 
   5351 @multitable @columnfractions .15 .80
   5352 @item @emph{Array Type} @tab @emph{Boundary Value}
   5353 @item Numeric  @tab 0 of the type and kind of @var{ARRAY}.
   5354 @item Logical  @tab @code{.FALSE.}.
   5355 @item Character(@var{len}) @tab @var{len} blanks.
   5356 @end multitable
   5357 
   5358 @item @emph{Standard}:
   5359 Fortran 90 and later
   5360 
   5361 @item @emph{Class}:
   5362 Transformational function
   5363 
   5364 @item @emph{Syntax}:
   5365 @code{RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])}
   5366 
   5367 @item @emph{Arguments}:
   5368 @multitable @columnfractions .15 .70
   5369 @item @var{ARRAY}  @tab May be any type, not scalar.
   5370 @item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
   5371 @item @var{BOUNDARY} @tab Same type as @var{ARRAY}. 
   5372 @item @var{DIM}    @tab The type shall be @code{INTEGER}.
   5373 @end multitable
   5374 
   5375 @item @emph{Return value}:
   5376 Returns an array of same type and rank as the @var{ARRAY} argument.
   5377 
   5378 @item @emph{Example}:
   5379 @smallexample
   5380 program test_eoshift
   5381     integer, dimension(3,3) :: a
   5382     a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
   5383     print '(3i3)', a(1,:)
   5384     print '(3i3)', a(2,:)
   5385     print '(3i3)', a(3,:)    
   5386     a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
   5387     print *
   5388     print '(3i3)', a(1,:)
   5389     print '(3i3)', a(2,:)
   5390     print '(3i3)', a(3,:)
   5391 end program test_eoshift
   5392 @end smallexample
   5393 @end table
   5394 
   5395 
   5396 
   5397 @node EPSILON
   5398 @section @code{EPSILON} --- Epsilon function
   5399 @fnindex EPSILON
   5400 @cindex model representation, epsilon
   5401 
   5402 @table @asis
   5403 @item @emph{Description}:
   5404 @code{EPSILON(X)} returns the smallest number @var{E} of the same kind
   5405 as @var{X} such that @math{1 + E > 1}.
   5406 
   5407 @item @emph{Standard}:
   5408 Fortran 90 and later
   5409 
   5410 @item @emph{Class}:
   5411 Inquiry function
   5412 
   5413 @item @emph{Syntax}:
   5414 @code{RESULT = EPSILON(X)}
   5415 
   5416 @item @emph{Arguments}:
   5417 @multitable @columnfractions .15 .70
   5418 @item @var{X} @tab The type shall be @code{REAL}.
   5419 @end multitable
   5420 
   5421 @item @emph{Return value}:
   5422 The return value is of same type as the argument.
   5423 
   5424 @item @emph{Example}:
   5425 @smallexample
   5426 program test_epsilon
   5427     real :: x = 3.143
   5428     real(8) :: y = 2.33
   5429     print *, EPSILON(x)
   5430     print *, EPSILON(y)
   5431 end program test_epsilon
   5432 @end smallexample
   5433 @end table
   5434 
   5435 
   5436 
   5437 @node ERF
   5438 @section @code{ERF} --- Error function 
   5439 @fnindex ERF
   5440 @cindex error function
   5441 
   5442 @table @asis
   5443 @item @emph{Description}:
   5444 @code{ERF(X)} computes the error function of @var{X}.
   5445 
   5446 @item @emph{Standard}:
   5447 Fortran 2008 and later
   5448 
   5449 @item @emph{Class}:
   5450 Elemental function
   5451 
   5452 @item @emph{Syntax}:
   5453 @code{RESULT = ERF(X)}
   5454 
   5455 @item @emph{Arguments}:
   5456 @multitable @columnfractions .15 .70
   5457 @item @var{X} @tab The type shall be @code{REAL}.
   5458 @end multitable
   5459 
   5460 @item @emph{Return value}:
   5461 The return value is of type @code{REAL}, of the same kind as
   5462 @var{X} and lies in the range @math{-1 \leq erf (x) \leq 1 }.
   5463 
   5464 @item @emph{Example}:
   5465 @smallexample
   5466 program test_erf
   5467   real(8) :: x = 0.17_8
   5468   x = erf(x)
   5469 end program test_erf
   5470 @end smallexample
   5471 
   5472 @item @emph{Specific names}:
   5473 @multitable @columnfractions .20 .23 .20 .33
   5474 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   5475 @item @code{DERF(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   5476 @end multitable
   5477 @end table
   5478 
   5479 
   5480 
   5481 @node ERFC
   5482 @section @code{ERFC} --- Error function 
   5483 @fnindex ERFC
   5484 @cindex error function, complementary
   5485 
   5486 @table @asis
   5487 @item @emph{Description}:
   5488 @code{ERFC(X)} computes the complementary error function of @var{X}.
   5489 
   5490 @item @emph{Standard}:
   5491 Fortran 2008 and later
   5492 
   5493 @item @emph{Class}:
   5494 Elemental function
   5495 
   5496 @item @emph{Syntax}:
   5497 @code{RESULT = ERFC(X)}
   5498 
   5499 @item @emph{Arguments}:
   5500 @multitable @columnfractions .15 .70
   5501 @item @var{X} @tab The type shall be @code{REAL}.
   5502 @end multitable
   5503 
   5504 @item @emph{Return value}:
   5505 The return value is of type @code{REAL} and of the same kind as @var{X}.
   5506 It lies in the range @math{ 0 \leq erfc (x) \leq 2 }.
   5507 
   5508 @item @emph{Example}:
   5509 @smallexample
   5510 program test_erfc
   5511   real(8) :: x = 0.17_8
   5512   x = erfc(x)
   5513 end program test_erfc
   5514 @end smallexample
   5515 
   5516 @item @emph{Specific names}:
   5517 @multitable @columnfractions .20 .23 .20 .33
   5518 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   5519 @item @code{DERFC(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   5520 @end multitable
   5521 @end table
   5522 
   5523 
   5524 
   5525 @node ERFC_SCALED
   5526 @section @code{ERFC_SCALED} --- Error function 
   5527 @fnindex ERFC_SCALED
   5528 @cindex error function, complementary, exponentially-scaled
   5529 
   5530 @table @asis
   5531 @item @emph{Description}:
   5532 @code{ERFC_SCALED(X)} computes the exponentially-scaled complementary
   5533 error function of @var{X}.
   5534 
   5535 @item @emph{Standard}:
   5536 Fortran 2008 and later
   5537 
   5538 @item @emph{Class}:
   5539 Elemental function
   5540 
   5541 @item @emph{Syntax}:
   5542 @code{RESULT = ERFC_SCALED(X)}
   5543 
   5544 @item @emph{Arguments}:
   5545 @multitable @columnfractions .15 .70
   5546 @item @var{X} @tab The type shall be @code{REAL}.
   5547 @end multitable
   5548 
   5549 @item @emph{Return value}:
   5550 The return value is of type @code{REAL} and of the same kind as @var{X}.
   5551 
   5552 @item @emph{Example}:
   5553 @smallexample
   5554 program test_erfc_scaled
   5555   real(8) :: x = 0.17_8
   5556   x = erfc_scaled(x)
   5557 end program test_erfc_scaled
   5558 @end smallexample
   5559 @end table
   5560 
   5561 
   5562 
   5563 @node ETIME
   5564 @section @code{ETIME} --- Execution time subroutine (or function)
   5565 @fnindex ETIME
   5566 @cindex time, elapsed
   5567 
   5568 @table @asis
   5569 @item @emph{Description}:
   5570 @code{ETIME(VALUES, TIME)} returns the number of seconds of runtime
   5571 since the start of the process's execution in @var{TIME}.  @var{VALUES}
   5572 returns the user and system components of this time in @code{VALUES(1)} and
   5573 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) + VALUES(2)}.
   5574 
   5575 On some systems, the underlying timings are represented using types with
   5576 sufficiently small limits that overflows (wrap around) are possible, such as
   5577 32-bit types. Therefore, the values returned by this intrinsic might be, or
   5578 become, negative, or numerically less than previous values, during a single
   5579 run of the compiled program.
   5580 
   5581 This intrinsic is provided in both subroutine and function forms; however,
   5582 only one form can be used in any given program unit.
   5583 
   5584 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
   5585 
   5586 @multitable @columnfractions .15 .70
   5587 @item @code{VALUES(1)}: @tab User time in seconds.
   5588 @item @code{VALUES(2)}: @tab System time in seconds.
   5589 @item @code{TIME}: @tab Run time since start in seconds.
   5590 @end multitable
   5591 
   5592 @item @emph{Standard}:
   5593 GNU extension
   5594 
   5595 @item @emph{Class}:
   5596 Subroutine, function
   5597 
   5598 @item @emph{Syntax}:
   5599 @multitable @columnfractions .80
   5600 @item @code{CALL ETIME(VALUES, TIME)}.
   5601 @item @code{TIME = ETIME(VALUES)}, (not recommended).
   5602 @end multitable
   5603 
   5604 @item @emph{Arguments}:
   5605 @multitable @columnfractions .15 .70
   5606 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
   5607 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
   5608 @end multitable
   5609 
   5610 @item @emph{Return value}:
   5611 Elapsed time in seconds since the start of program execution.
   5612 
   5613 @item @emph{Example}:
   5614 @smallexample
   5615 program test_etime
   5616     integer(8) :: i, j
   5617     real, dimension(2) :: tarray
   5618     real :: result
   5619     call ETIME(tarray, result)
   5620     print *, result
   5621     print *, tarray(1)
   5622     print *, tarray(2)   
   5623     do i=1,100000000    ! Just a delay
   5624         j = i * i - i
   5625     end do
   5626     call ETIME(tarray, result)
   5627     print *, result
   5628     print *, tarray(1)
   5629     print *, tarray(2)
   5630 end program test_etime
   5631 @end smallexample
   5632 
   5633 @item @emph{See also}:
   5634 @ref{CPU_TIME}
   5635 
   5636 @end table
   5637 
   5638 
   5639 
   5640 @node EVENT_QUERY
   5641 @section @code{EVENT_QUERY} --- Query whether a coarray event has occurred
   5642 @fnindex EVENT_QUERY
   5643 @cindex Events, EVENT_QUERY
   5644 
   5645 @table @asis
   5646 @item @emph{Description}:
   5647 @code{EVENT_QUERY} assignes the number of events to @var{COUNT} which have been
   5648 posted to the @var{EVENT} variable and not yet been removed by calling
   5649 @code{EVENT WAIT}. When @var{STAT} is present and the invocation was successful,
   5650 it is assigned the value 0. If it is present and the invocation has failed,
   5651 it is assigned a positive value and @var{COUNT} is assigned the value @math{-1}.
   5652 
   5653 @item @emph{Standard}:
   5654 TS 18508 or later
   5655 
   5656 @item @emph{Class}:
   5657  subroutine
   5658 
   5659 @item @emph{Syntax}:
   5660 @code{CALL EVENT_QUERY (EVENT, COUNT [, STAT])}
   5661 
   5662 @item @emph{Arguments}:
   5663 @multitable @columnfractions .15 .70
   5664 @item @var{EVENT}  @tab (intent(IN)) Scalar of type @code{EVENT_TYPE},
   5665 defined in @code{ISO_FORTRAN_ENV}; shall not be coindexed.
   5666 @item @var{COUNT}  @tab (intent(out))Scalar integer with at least the
   5667 precision of default integer.
   5668 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   5669 @end multitable
   5670 
   5671 @item @emph{Example}:
   5672 @smallexample
   5673 program atomic
   5674   use iso_fortran_env
   5675   implicit none
   5676   type(event_type) :: event_value_has_been_set[*]
   5677   integer :: cnt
   5678   if (this_image() == 1) then
   5679     call event_query (event_value_has_been_set, cnt)
   5680     if (cnt > 0) write(*,*) "Value has been set"
   5681   elseif (this_image() == 2) then
   5682     event post (event_value_has_been_set[1])
   5683   end if
   5684 end program atomic
   5685 @end smallexample
   5686 
   5687 @end table
   5688 
   5689 
   5690 
   5691 @node EXECUTE_COMMAND_LINE
   5692 @section @code{EXECUTE_COMMAND_LINE} --- Execute a shell command
   5693 @fnindex EXECUTE_COMMAND_LINE
   5694 @cindex system, system call
   5695 @cindex command line
   5696 
   5697 @table @asis
   5698 @item @emph{Description}:
   5699 @code{EXECUTE_COMMAND_LINE} runs a shell command, synchronously or
   5700 asynchronously.
   5701 
   5702 The @code{COMMAND} argument is passed to the shell and executed (The
   5703 shell is @code{sh} on Unix systems, and @code{cmd.exe} on Windows.).
   5704 If @code{WAIT} is present and has the value false, the execution of
   5705 the command is asynchronous if the system supports it; otherwise, the
   5706 command is executed synchronously using the C library's @code{system}
   5707 call.
   5708 
   5709 The three last arguments allow the user to get status information.  After
   5710 synchronous execution, @code{EXITSTAT} contains the integer exit code of
   5711 the command, as returned by @code{system}.  @code{CMDSTAT} is set to zero
   5712 if the command line was executed (whatever its exit status was).
   5713 @code{CMDMSG} is assigned an error message if an error has occurred.
   5714 
   5715 Note that the @code{system} function need not be thread-safe. It is
   5716 the responsibility of the user to ensure that @code{system} is not
   5717 called concurrently.
   5718 
   5719 For asynchronous execution on supported targets, the POSIX
   5720 @code{posix_spawn} or @code{fork} functions are used.  Also, a signal
   5721 handler for the @code{SIGCHLD} signal is installed.
   5722 
   5723 @item @emph{Standard}:
   5724 Fortran 2008 and later
   5725 
   5726 @item @emph{Class}:
   5727 Subroutine
   5728 
   5729 @item @emph{Syntax}:
   5730 @code{CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])}
   5731 
   5732 @item @emph{Arguments}:
   5733 @multitable @columnfractions .15 .70
   5734 @item @var{COMMAND} @tab Shall be a default @code{CHARACTER} scalar.
   5735 @item @var{WAIT} @tab (Optional) Shall be a default @code{LOGICAL} scalar.
   5736 @item @var{EXITSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
   5737 default kind.
   5738 @item @var{CMDSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
   5739 default kind.
   5740 @item @var{CMDMSG} @tab (Optional) Shall be an @code{CHARACTER} scalar of the
   5741 default kind.
   5742 @end multitable
   5743 
   5744 @item @emph{Example}:
   5745 @smallexample
   5746 program test_exec
   5747   integer :: i
   5748 
   5749   call execute_command_line ("external_prog.exe", exitstat=i)
   5750   print *, "Exit status of external_prog.exe was ", i
   5751 
   5752   call execute_command_line ("reindex_files.exe", wait=.false.)
   5753   print *, "Now reindexing files in the background"
   5754 
   5755 end program test_exec
   5756 @end smallexample
   5757 
   5758 
   5759 @item @emph{Note}:
   5760 
   5761 Because this intrinsic is implemented in terms of the @code{system}
   5762 function call, its behavior with respect to signaling is processor
   5763 dependent. In particular, on POSIX-compliant systems, the SIGINT and
   5764 SIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As
   5765 such, if the parent process is terminated, the child process might not be
   5766 terminated alongside.
   5767 
   5768 
   5769 @item @emph{See also}:
   5770 @ref{SYSTEM}
   5771 @end table
   5772 
   5773 
   5774 
   5775 @node EXIT
   5776 @section @code{EXIT} --- Exit the program with status. 
   5777 @fnindex EXIT
   5778 @cindex program termination
   5779 @cindex terminate program
   5780 
   5781 @table @asis
   5782 @item @emph{Description}:
   5783 @code{EXIT} causes immediate termination of the program with status.  If status
   5784 is omitted it returns the canonical @emph{success} for the system.  All Fortran
   5785 I/O units are closed. 
   5786 
   5787 @item @emph{Standard}:
   5788 GNU extension
   5789 
   5790 @item @emph{Class}:
   5791 Subroutine
   5792 
   5793 @item @emph{Syntax}:
   5794 @code{CALL EXIT([STATUS])}
   5795 
   5796 @item @emph{Arguments}:
   5797 @multitable @columnfractions .15 .70
   5798 @item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind.
   5799 @end multitable
   5800 
   5801 @item @emph{Return value}:
   5802 @code{STATUS} is passed to the parent process on exit.
   5803 
   5804 @item @emph{Example}:
   5805 @smallexample
   5806 program test_exit
   5807   integer :: STATUS = 0
   5808   print *, 'This program is going to exit.'
   5809   call EXIT(STATUS)
   5810 end program test_exit
   5811 @end smallexample
   5812 
   5813 @item @emph{See also}:
   5814 @ref{ABORT}, @gol
   5815 @ref{KILL}
   5816 @end table
   5817 
   5818 
   5819 
   5820 @node EXP
   5821 @section @code{EXP} --- Exponential function 
   5822 @fnindex EXP
   5823 @fnindex DEXP
   5824 @fnindex CEXP
   5825 @fnindex ZEXP
   5826 @fnindex CDEXP
   5827 @cindex exponential function
   5828 @cindex logarithm function, inverse
   5829 
   5830 @table @asis
   5831 @item @emph{Description}:
   5832 @code{EXP(X)} computes the base @math{e} exponential of @var{X}.
   5833 
   5834 @item @emph{Standard}:
   5835 Fortran 77 and later, has overloads that are GNU extensions
   5836 
   5837 @item @emph{Class}:
   5838 Elemental function
   5839 
   5840 @item @emph{Syntax}:
   5841 @code{RESULT = EXP(X)}
   5842 
   5843 @item @emph{Arguments}:
   5844 @multitable @columnfractions .15 .70
   5845 @item @var{X} @tab The type shall be @code{REAL} or
   5846 @code{COMPLEX}.
   5847 @end multitable
   5848 
   5849 @item @emph{Return value}:
   5850 The return value has same type and kind as @var{X}.
   5851 
   5852 @item @emph{Example}:
   5853 @smallexample
   5854 program test_exp
   5855   real :: x = 1.0
   5856   x = exp(x)
   5857 end program test_exp
   5858 @end smallexample
   5859 
   5860 @item @emph{Specific names}:
   5861 @multitable @columnfractions .20 .23 .20 .33
   5862 @headitem Name            @tab Argument             @tab Return type         @tab Standard
   5863 @item @code{EXP(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}      @tab Fortran 77 and later
   5864 @item @code{DEXP(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}      @tab Fortran 77 and later
   5865 @item @code{CEXP(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}   @tab Fortran 77 and later
   5866 @item @code{ZEXP(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
   5867 @item @code{CDEXP(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
   5868 @end multitable
   5869 @end table
   5870 
   5871 
   5872 
   5873 @node EXPONENT
   5874 @section @code{EXPONENT} --- Exponent function 
   5875 @fnindex EXPONENT
   5876 @cindex real number, exponent
   5877 @cindex floating point, exponent
   5878 
   5879 @table @asis
   5880 @item @emph{Description}:
   5881 @code{EXPONENT(X)} returns the value of the exponent part of @var{X}. If @var{X}
   5882 is zero the value returned is zero. 
   5883 
   5884 @item @emph{Standard}:
   5885 Fortran 90 and later
   5886 
   5887 @item @emph{Class}:
   5888 Elemental function
   5889 
   5890 @item @emph{Syntax}:
   5891 @code{RESULT = EXPONENT(X)}
   5892 
   5893 @item @emph{Arguments}:
   5894 @multitable @columnfractions .15 .70
   5895 @item @var{X} @tab The type shall be @code{REAL}.
   5896 @end multitable
   5897 
   5898 @item @emph{Return value}:
   5899 The return value is of type default @code{INTEGER}.
   5900 
   5901 @item @emph{Example}:
   5902 @smallexample
   5903 program test_exponent
   5904   real :: x = 1.0
   5905   integer :: i
   5906   i = exponent(x)
   5907   print *, i
   5908   print *, exponent(0.0)
   5909 end program test_exponent
   5910 @end smallexample
   5911 @end table
   5912 
   5913 
   5914 
   5915 @node EXTENDS_TYPE_OF
   5916 @section @code{EXTENDS_TYPE_OF} ---  Query dynamic type for extension
   5917 @fnindex EXTENDS_TYPE_OF
   5918 
   5919 @table @asis
   5920 @item @emph{Description}:
   5921 Query dynamic type for extension.
   5922 
   5923 @item @emph{Standard}:
   5924 Fortran 2003 and later
   5925 
   5926 @item @emph{Class}:
   5927 Inquiry function
   5928 
   5929 @item @emph{Syntax}:
   5930 @code{RESULT = EXTENDS_TYPE_OF(A, MOLD)}
   5931 
   5932 @item @emph{Arguments}:
   5933 @multitable @columnfractions .15 .70
   5934 @item @var{A} @tab Shall be an object of extensible declared type or
   5935 unlimited polymorphic. 
   5936 @item @var{MOLD} @tab Shall be an object of extensible declared type or
   5937 unlimited polymorphic. 
   5938 @end multitable
   5939 
   5940 @item @emph{Return value}:
   5941 The return value is a scalar of type default logical. It is true if and only if
   5942 the dynamic type of A is an extension type of the dynamic type of MOLD.
   5943 
   5944 
   5945 @item @emph{See also}:
   5946 @ref{SAME_TYPE_AS}
   5947 @end table
   5948 
   5949 
   5950 
   5951 @node FDATE
   5952 @section @code{FDATE} --- Get the current time as a string
   5953 @fnindex FDATE
   5954 @cindex time, current
   5955 @cindex current time
   5956 @cindex date, current
   5957 @cindex current date
   5958 
   5959 @table @asis
   5960 @item @emph{Description}:
   5961 @code{FDATE(DATE)} returns the current date (using the same format as
   5962 @ref{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE,
   5963 TIME())}.
   5964 
   5965 This intrinsic is provided in both subroutine and function forms; however,
   5966 only one form can be used in any given program unit.
   5967 
   5968 @item @emph{Standard}:
   5969 GNU extension
   5970 
   5971 @item @emph{Class}:
   5972 Subroutine, function
   5973 
   5974 @item @emph{Syntax}:
   5975 @multitable @columnfractions .80
   5976 @item @code{CALL FDATE(DATE)}.
   5977 @item @code{DATE = FDATE()}.
   5978 @end multitable
   5979 
   5980 @item @emph{Arguments}:
   5981 @multitable @columnfractions .15 .70
   5982 @item @var{DATE}@tab The type shall be of type @code{CHARACTER} of the
   5983 default kind. It is an @code{INTENT(OUT)} argument.  If the length of
   5984 this variable is too short for the date and time string to fit
   5985 completely, it will be blank on procedure return.
   5986 @end multitable
   5987 
   5988 @item @emph{Return value}:
   5989 The current date and time as a string.
   5990 
   5991 @item @emph{Example}:
   5992 @smallexample
   5993 program test_fdate
   5994     integer(8) :: i, j
   5995     character(len=30) :: date
   5996     call fdate(date)
   5997     print *, 'Program started on ', date
   5998     do i = 1, 100000000 ! Just a delay
   5999         j = i * i - i
   6000     end do
   6001     call fdate(date)
   6002     print *, 'Program ended on ', date
   6003 end program test_fdate
   6004 @end smallexample
   6005 
   6006 @item @emph{See also}:
   6007 @ref{DATE_AND_TIME}, @gol
   6008 @ref{CTIME}
   6009 @end table
   6010 
   6011 
   6012 @node FGET
   6013 @section @code{FGET} --- Read a single character in stream mode from stdin 
   6014 @fnindex FGET
   6015 @cindex read character, stream mode
   6016 @cindex stream mode, read character
   6017 @cindex file operation, read character
   6018 
   6019 @table @asis
   6020 @item @emph{Description}:
   6021 Read a single character in stream mode from stdin by bypassing normal 
   6022 formatted output. Stream I/O should not be mixed with normal record-oriented 
   6023 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
   6024 
   6025 This intrinsic is provided in both subroutine and function forms; however,
   6026 only one form can be used in any given program unit.
   6027 
   6028 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
   6029 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   6030 Programmers should consider the use of new stream IO feature in new code 
   6031 for future portability. See also @ref{Fortran 2003 status}.
   6032 
   6033 @item @emph{Standard}:
   6034 GNU extension
   6035 
   6036 @item @emph{Class}:
   6037 Subroutine, function
   6038 
   6039 @item @emph{Syntax}:
   6040 @multitable @columnfractions .80
   6041 @item @code{CALL FGET(C [, STATUS])}
   6042 @item @code{STATUS = FGET(C)}
   6043 @end multitable
   6044 
   6045 @item @emph{Arguments}:
   6046 @multitable @columnfractions .15 .70
   6047 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   6048 kind.
   6049 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   6050 Returns 0 on success, -1 on end-of-file, and a system specific positive
   6051 error code otherwise.
   6052 @end multitable
   6053 
   6054 @item @emph{Example}:
   6055 @smallexample
   6056 PROGRAM test_fget
   6057   INTEGER, PARAMETER :: strlen = 100
   6058   INTEGER :: status, i = 1
   6059   CHARACTER(len=strlen) :: str = ""
   6060 
   6061   WRITE (*,*) 'Enter text:'
   6062   DO
   6063     CALL fget(str(i:i), status)
   6064     if (status /= 0 .OR. i > strlen) exit
   6065     i = i + 1
   6066   END DO
   6067   WRITE (*,*) TRIM(str)
   6068 END PROGRAM
   6069 @end smallexample
   6070 
   6071 @item @emph{See also}:
   6072 @ref{FGETC}, @gol
   6073 @ref{FPUT}, @gol
   6074 @ref{FPUTC}
   6075 @end table
   6076 
   6077 
   6078 
   6079 @node FGETC
   6080 @section @code{FGETC} --- Read a single character in stream mode
   6081 @fnindex FGETC
   6082 @cindex read character, stream mode
   6083 @cindex stream mode, read character
   6084 @cindex file operation, read character
   6085 
   6086 @table @asis
   6087 @item @emph{Description}:
   6088 Read a single character in stream mode by bypassing normal formatted output. 
   6089 Stream I/O should not be mixed with normal record-oriented (formatted or 
   6090 unformatted) I/O on the same unit; the results are unpredictable.
   6091 
   6092 This intrinsic is provided in both subroutine and function forms; however,
   6093 only one form can be used in any given program unit.
   6094 
   6095 Note that the @code{FGET} intrinsic is provided for backwards compatibility
   6096 with @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   6097 Programmers should consider the use of new stream IO feature in new code 
   6098 for future portability. See also @ref{Fortran 2003 status}.
   6099 
   6100 @item @emph{Standard}:
   6101 GNU extension
   6102 
   6103 @item @emph{Class}:
   6104 Subroutine, function
   6105 
   6106 @item @emph{Syntax}:
   6107 @multitable @columnfractions .80
   6108 @item @code{CALL FGETC(UNIT, C [, STATUS])}
   6109 @item @code{STATUS = FGETC(UNIT, C)}
   6110 @end multitable
   6111 
   6112 @item @emph{Arguments}:
   6113 @multitable @columnfractions .15 .70
   6114 @item @var{UNIT}   @tab The type shall be @code{INTEGER}.
   6115 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   6116 kind.
   6117 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   6118 Returns 0 on success, -1 on end-of-file and a system specific positive
   6119 error code otherwise.
   6120 @end multitable
   6121 
   6122 @item @emph{Example}:
   6123 @smallexample
   6124 PROGRAM test_fgetc
   6125   INTEGER :: fd = 42, status
   6126   CHARACTER :: c
   6127 
   6128   OPEN(UNIT=fd, FILE="/etc/passwd", ACTION="READ", STATUS = "OLD")
   6129   DO
   6130     CALL fgetc(fd, c, status)
   6131     IF (status /= 0) EXIT
   6132     call fput(c)
   6133   END DO
   6134   CLOSE(UNIT=fd)
   6135 END PROGRAM
   6136 @end smallexample
   6137 
   6138 @item @emph{See also}:
   6139 @ref{FGET}, @gol
   6140 @ref{FPUT}, @gol
   6141 @ref{FPUTC}
   6142 @end table
   6143 
   6144 @node FINDLOC
   6145 @section @code{FINDLOC} --- Search an array for a value
   6146 @fnindex FINDLOC
   6147 @cindex findloc
   6148 
   6149 @table @asis
   6150 @item @emph{Description}:
   6151 Determines the location of the element in the array with the value
   6152 given in the @var{VALUE} argument, or, if the @var{DIM} argument is
   6153 supplied, determines the locations of the elements equal to the
   6154 @var{VALUE} argument element along each
   6155 row of the array in the @var{DIM} direction.  If @var{MASK} is
   6156 present, only the elements for which @var{MASK} is @code{.TRUE.} are
   6157 considered.  If more than one element in the array has the value
   6158 @var{VALUE}, the location returned is that of the first such element
   6159 in array element order if the @var{BACK} is not present or if it is
   6160 @code{.FALSE.}. If @var{BACK} is true, the location returned is that
   6161 of the last such element. If the array has zero size, or all of the
   6162 elements of @var{MASK} are @code{.FALSE.}, then the result is an array
   6163 of zeroes.  Similarly, if @var{DIM} is supplied and all of the
   6164 elements of @var{MASK} along a given row are zero, the result value
   6165 for that row is zero.
   6166 
   6167 @item @emph{Standard}:
   6168 Fortran 2008 and later.
   6169 
   6170 @item @emph{Class}:
   6171 Transformational function
   6172 
   6173 @item @emph{Syntax}:
   6174 @multitable @columnfractions .80
   6175 @item @code{RESULT = FINDLOC(ARRAY, VALUE, DIM [, MASK] [,KIND] [,BACK])}
   6176 @item @code{RESULT = FINDLOC(ARRAY, VALUE, [, MASK] [,KIND] [,BACK])}
   6177 @end multitable
   6178 
   6179 @item @emph{Arguments}:
   6180 @multitable @columnfractions .15 .70
   6181 @item @var{ARRAY} @tab Shall be an array of intrinsic type.
   6182 @item @var{VALUE} @tab A scalar of intrinsic type which is in type
   6183 conformance with @var{ARRAY}.
   6184 @item @var{DIM} @tab (Optional) Shall be a scalar of type
   6185 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   6186 inclusive.  It may not be an optional dummy argument.
   6187 @item @var{MASK} @tab (Optional) Shall be of type @code{LOGICAL},
   6188 and conformable with @var{ARRAY}.
   6189 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   6190 expression indicating the kind parameter of the result.
   6191 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
   6192 @end multitable
   6193 
   6194 @item @emph{Return value}:
   6195 If @var{DIM} is absent, the result is a rank-one array with a length
   6196 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
   6197 is an array with a rank one less than the rank of @var{ARRAY}, and a
   6198 size corresponding to the size of @var{ARRAY} with the @var{DIM}
   6199 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
   6200 of one, the result is a scalar.  If the optional argument @var{KIND}
   6201 is present, the result is an integer of kind @var{KIND}, otherwise it
   6202 is of default kind.
   6203 
   6204 @item @emph{See also}:
   6205 @ref{MAXLOC}, @gol
   6206 @ref{MINLOC}
   6207 
   6208 @end table
   6209 
   6210 @node FLOOR
   6211 @section @code{FLOOR} --- Integer floor function
   6212 @fnindex FLOOR
   6213 @cindex floor
   6214 @cindex rounding, floor
   6215 
   6216 @table @asis
   6217 @item @emph{Description}:
   6218 @code{FLOOR(A)} returns the greatest integer less than or equal to @var{X}.
   6219 
   6220 @item @emph{Standard}:
   6221 Fortran 95 and later
   6222 
   6223 @item @emph{Class}:
   6224 Elemental function
   6225 
   6226 @item @emph{Syntax}:
   6227 @code{RESULT = FLOOR(A [, KIND])}
   6228 
   6229 @item @emph{Arguments}:
   6230 @multitable @columnfractions .15 .70
   6231 @item @var{A} @tab The type shall be @code{REAL}.
   6232 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   6233 expression indicating the kind parameter of the result.
   6234 @end multitable
   6235 
   6236 @item @emph{Return value}:
   6237 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
   6238 and of default-kind @code{INTEGER} otherwise.
   6239 
   6240 @item @emph{Example}:
   6241 @smallexample
   6242 program test_floor
   6243     real :: x = 63.29
   6244     real :: y = -63.59
   6245     print *, floor(x) ! returns 63
   6246     print *, floor(y) ! returns -64
   6247 end program test_floor
   6248 @end smallexample
   6249 
   6250 @item @emph{See also}:
   6251 @ref{CEILING}, @gol
   6252 @ref{NINT}
   6253 @end table
   6254 
   6255 
   6256 
   6257 @node FLUSH
   6258 @section @code{FLUSH} --- Flush I/O unit(s)
   6259 @fnindex FLUSH
   6260 @cindex file operation, flush
   6261 
   6262 @table @asis
   6263 @item @emph{Description}:
   6264 Flushes Fortran unit(s) currently open for output. Without the optional
   6265 argument, all units are flushed, otherwise just the unit specified.
   6266 
   6267 @item @emph{Standard}:
   6268 GNU extension
   6269 
   6270 @item @emph{Class}:
   6271 Subroutine
   6272 
   6273 @item @emph{Syntax}:
   6274 @code{CALL FLUSH(UNIT)}
   6275 
   6276 @item @emph{Arguments}:
   6277 @multitable @columnfractions .15 .70
   6278 @item @var{UNIT} @tab (Optional) The type shall be @code{INTEGER}.
   6279 @end multitable
   6280 
   6281 @item @emph{Note}:
   6282 Beginning with the Fortran 2003 standard, there is a @code{FLUSH}
   6283 statement that should be preferred over the @code{FLUSH} intrinsic.
   6284 
   6285 The @code{FLUSH} intrinsic and the Fortran 2003 @code{FLUSH} statement
   6286 have identical effect: they flush the runtime library's I/O buffer so
   6287 that the data becomes visible to other processes. This does not guarantee
   6288 that the data is committed to disk.
   6289 
   6290 On POSIX systems, you can request that all data is transferred  to  the
   6291 storage device by calling the @code{fsync} function, with the POSIX file
   6292 descriptor of the I/O unit as argument (retrieved with GNU intrinsic
   6293 @code{FNUM}). The following example shows how:
   6294 
   6295 @smallexample
   6296   ! Declare the interface for POSIX fsync function
   6297   interface
   6298     function fsync (fd) bind(c,name="fsync")
   6299     use iso_c_binding, only: c_int
   6300       integer(c_int), value :: fd
   6301       integer(c_int) :: fsync
   6302     end function fsync
   6303   end interface
   6304 
   6305   ! Variable declaration
   6306   integer :: ret
   6307 
   6308   ! Opening unit 10
   6309   open (10,file="foo")
   6310 
   6311   ! ...
   6312   ! Perform I/O on unit 10
   6313   ! ...
   6314 
   6315   ! Flush and sync
   6316   flush(10)
   6317   ret = fsync(fnum(10))
   6318 
   6319   ! Handle possible error
   6320   if (ret /= 0) stop "Error calling FSYNC"
   6321 @end smallexample
   6322 
   6323 @end table
   6324 
   6325 
   6326 
   6327 @node FNUM
   6328 @section @code{FNUM} --- File number function
   6329 @fnindex FNUM
   6330 @cindex file operation, file number
   6331 
   6332 @table @asis
   6333 @item @emph{Description}:
   6334 @code{FNUM(UNIT)} returns the POSIX file descriptor number corresponding to the
   6335 open Fortran I/O unit @code{UNIT}.
   6336 
   6337 @item @emph{Standard}:
   6338 GNU extension
   6339 
   6340 @item @emph{Class}:
   6341 Function
   6342 
   6343 @item @emph{Syntax}:
   6344 @code{RESULT = FNUM(UNIT)}
   6345 
   6346 @item @emph{Arguments}:
   6347 @multitable @columnfractions .15 .70
   6348 @item @var{UNIT} @tab The type shall be @code{INTEGER}.
   6349 @end multitable
   6350 
   6351 @item @emph{Return value}:
   6352 The return value is of type @code{INTEGER}
   6353 
   6354 @item @emph{Example}:
   6355 @smallexample
   6356 program test_fnum
   6357   integer :: i
   6358   open (unit=10, status = "scratch")
   6359   i = fnum(10)
   6360   print *, i
   6361   close (10)
   6362 end program test_fnum
   6363 @end smallexample
   6364 @end table
   6365 
   6366 
   6367 
   6368 @node FPUT
   6369 @section @code{FPUT} --- Write a single character in stream mode to stdout 
   6370 @fnindex FPUT
   6371 @cindex write character, stream mode
   6372 @cindex stream mode, write character
   6373 @cindex file operation, write character
   6374 
   6375 @table @asis
   6376 @item @emph{Description}:
   6377 Write a single character in stream mode to stdout by bypassing normal 
   6378 formatted output. Stream I/O should not be mixed with normal record-oriented 
   6379 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
   6380 
   6381 This intrinsic is provided in both subroutine and function forms; however,
   6382 only one form can be used in any given program unit.
   6383 
   6384 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
   6385 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   6386 Programmers should consider the use of new stream IO feature in new code 
   6387 for future portability. See also @ref{Fortran 2003 status}.
   6388 
   6389 @item @emph{Standard}:
   6390 GNU extension
   6391 
   6392 @item @emph{Class}:
   6393 Subroutine, function
   6394 
   6395 @item @emph{Syntax}:
   6396 @multitable @columnfractions .80
   6397 @item @code{CALL FPUT(C [, STATUS])}
   6398 @item @code{STATUS = FPUT(C)}
   6399 @end multitable
   6400 
   6401 @item @emph{Arguments}:
   6402 @multitable @columnfractions .15 .70
   6403 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   6404 kind.
   6405 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   6406 Returns 0 on success, -1 on end-of-file and a system specific positive
   6407 error code otherwise.
   6408 @end multitable
   6409 
   6410 @item @emph{Example}:
   6411 @smallexample
   6412 PROGRAM test_fput
   6413   CHARACTER(len=10) :: str = "gfortran"
   6414   INTEGER :: i
   6415   DO i = 1, len_trim(str)
   6416     CALL fput(str(i:i))
   6417   END DO
   6418 END PROGRAM
   6419 @end smallexample
   6420 
   6421 @item @emph{See also}:
   6422 @ref{FPUTC}, @gol
   6423 @ref{FGET}, @gol
   6424 @ref{FGETC}
   6425 @end table
   6426 
   6427 
   6428 
   6429 @node FPUTC
   6430 @section @code{FPUTC} --- Write a single character in stream mode
   6431 @fnindex FPUTC
   6432 @cindex write character, stream mode
   6433 @cindex stream mode, write character
   6434 @cindex file operation, write character
   6435 
   6436 @table @asis
   6437 @item @emph{Description}:
   6438 Write a single character in stream mode by bypassing normal formatted 
   6439 output. Stream I/O should not be mixed with normal record-oriented 
   6440 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
   6441 
   6442 This intrinsic is provided in both subroutine and function forms; however,
   6443 only one form can be used in any given program unit.
   6444 
   6445 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
   6446 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   6447 Programmers should consider the use of new stream IO feature in new code 
   6448 for future portability. See also @ref{Fortran 2003 status}.
   6449 
   6450 @item @emph{Standard}:
   6451 GNU extension
   6452 
   6453 @item @emph{Class}:
   6454 Subroutine, function
   6455 
   6456 @item @emph{Syntax}:
   6457 @multitable @columnfractions .80
   6458 @item @code{CALL FPUTC(UNIT, C [, STATUS])}
   6459 @item @code{STATUS = FPUTC(UNIT, C)}
   6460 @end multitable
   6461 
   6462 @item @emph{Arguments}:
   6463 @multitable @columnfractions .15 .70
   6464 @item @var{UNIT}   @tab The type shall be @code{INTEGER}.
   6465 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   6466 kind.
   6467 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   6468 Returns 0 on success, -1 on end-of-file and a system specific positive
   6469 error code otherwise.
   6470 @end multitable
   6471 
   6472 @item @emph{Example}:
   6473 @smallexample
   6474 PROGRAM test_fputc
   6475   CHARACTER(len=10) :: str = "gfortran"
   6476   INTEGER :: fd = 42, i
   6477 
   6478   OPEN(UNIT = fd, FILE = "out", ACTION = "WRITE", STATUS="NEW")
   6479   DO i = 1, len_trim(str)
   6480     CALL fputc(fd, str(i:i))
   6481   END DO
   6482   CLOSE(fd)
   6483 END PROGRAM
   6484 @end smallexample
   6485 
   6486 @item @emph{See also}:
   6487 @ref{FPUT}, @gol
   6488 @ref{FGET}, @gol
   6489 @ref{FGETC}
   6490 @end table
   6491 
   6492 
   6493 
   6494 @node FRACTION
   6495 @section @code{FRACTION} --- Fractional part of the model representation
   6496 @fnindex FRACTION
   6497 @cindex real number, fraction
   6498 @cindex floating point, fraction
   6499 
   6500 @table @asis
   6501 @item @emph{Description}:
   6502 @code{FRACTION(X)} returns the fractional part of the model
   6503 representation of @code{X}.
   6504 
   6505 @item @emph{Standard}:
   6506 Fortran 90 and later
   6507 
   6508 @item @emph{Class}:
   6509 Elemental function
   6510 
   6511 @item @emph{Syntax}:
   6512 @code{Y = FRACTION(X)}
   6513 
   6514 @item @emph{Arguments}:
   6515 @multitable @columnfractions .15 .70
   6516 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
   6517 @end multitable
   6518 
   6519 @item @emph{Return value}:
   6520 The return value is of the same type and kind as the argument.
   6521 The fractional part of the model representation of @code{X} is returned;
   6522 it is @code{X * RADIX(X)**(-EXPONENT(X))}.
   6523 
   6524 @item @emph{Example}:
   6525 @smallexample
   6526 program test_fraction
   6527   real :: x
   6528   x = 178.1387e-4
   6529   print *, fraction(x), x * radix(x)**(-exponent(x))
   6530 end program test_fraction
   6531 @end smallexample
   6532 
   6533 @end table
   6534 
   6535 
   6536 
   6537 @node FREE
   6538 @section @code{FREE} --- Frees memory
   6539 @fnindex FREE
   6540 @cindex pointer, cray
   6541 
   6542 @table @asis
   6543 @item @emph{Description}:
   6544 Frees memory previously allocated by @code{MALLOC}. The @code{FREE}
   6545 intrinsic is an extension intended to be used with Cray pointers, and is
   6546 provided in GNU Fortran to allow user to compile legacy code. For
   6547 new code using Fortran 95 pointers, the memory de-allocation intrinsic is
   6548 @code{DEALLOCATE}.
   6549 
   6550 @item @emph{Standard}:
   6551 GNU extension
   6552 
   6553 @item @emph{Class}:
   6554 Subroutine
   6555 
   6556 @item @emph{Syntax}:
   6557 @code{CALL FREE(PTR)}
   6558 
   6559 @item @emph{Arguments}:
   6560 @multitable @columnfractions .15 .70
   6561 @item @var{PTR} @tab The type shall be @code{INTEGER}. It represents the
   6562 location of the memory that should be de-allocated.
   6563 @end multitable
   6564 
   6565 @item @emph{Return value}:
   6566 None
   6567 
   6568 @item @emph{Example}:
   6569 See @code{MALLOC} for an example.
   6570 
   6571 @item @emph{See also}:
   6572 @ref{MALLOC}
   6573 @end table
   6574 
   6575 
   6576 
   6577 @node FSEEK
   6578 @section @code{FSEEK} --- Low level file positioning subroutine
   6579 @fnindex FSEEK
   6580 @cindex file operation, seek
   6581 @cindex file operation, position
   6582 
   6583 @table @asis
   6584 @item @emph{Description}:
   6585 Moves @var{UNIT} to the specified @var{OFFSET}. If @var{WHENCE} 
   6586 is set to 0, the @var{OFFSET} is taken as an absolute value @code{SEEK_SET},
   6587 if set to 1, @var{OFFSET} is taken to be relative to the current position 
   6588 @code{SEEK_CUR}, and if set to 2 relative to the end of the file @code{SEEK_END}.
   6589 On error, @var{STATUS} is set to a nonzero value. If @var{STATUS} the seek 
   6590 fails silently.
   6591 
   6592 This intrinsic routine is not fully backwards compatible with @command{g77}. 
   6593 In @command{g77}, the @code{FSEEK} takes a statement label instead of a 
   6594 @var{STATUS} variable. If FSEEK is used in old code, change
   6595 @smallexample
   6596   CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
   6597 @end smallexample 
   6598 to
   6599 @smallexample
   6600   INTEGER :: status
   6601   CALL FSEEK(UNIT, OFFSET, WHENCE, status)
   6602   IF (status /= 0) GOTO label
   6603 @end smallexample 
   6604 
   6605 Please note that GNU Fortran provides the Fortran 2003 Stream facility.
   6606 Programmers should consider the use of new stream IO feature in new code 
   6607 for future portability. See also @ref{Fortran 2003 status}.
   6608 
   6609 @item @emph{Standard}:
   6610 GNU extension
   6611 
   6612 @item @emph{Class}:
   6613 Subroutine
   6614 
   6615 @item @emph{Syntax}:
   6616 @code{CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])}
   6617 
   6618 @item @emph{Arguments}:
   6619 @multitable @columnfractions .15 .70
   6620 @item @var{UNIT}   @tab Shall be a scalar of type @code{INTEGER}.
   6621 @item @var{OFFSET} @tab Shall be a scalar of type @code{INTEGER}.
   6622 @item @var{WHENCE} @tab Shall be a scalar of type @code{INTEGER}.
   6623 Its value shall be either 0, 1 or 2.
   6624 @item @var{STATUS} @tab (Optional) shall be a scalar of type 
   6625 @code{INTEGER(4)}.
   6626 @end multitable
   6627 
   6628 @item @emph{Example}:
   6629 @smallexample
   6630 PROGRAM test_fseek
   6631   INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2
   6632   INTEGER :: fd, offset, ierr
   6633 
   6634   ierr   = 0
   6635   offset = 5
   6636   fd     = 10
   6637 
   6638   OPEN(UNIT=fd, FILE="fseek.test")
   6639   CALL FSEEK(fd, offset, SEEK_SET, ierr)  ! move to OFFSET
   6640   print *, FTELL(fd), ierr
   6641 
   6642   CALL FSEEK(fd, 0, SEEK_END, ierr)       ! move to end
   6643   print *, FTELL(fd), ierr
   6644 
   6645   CALL FSEEK(fd, 0, SEEK_SET, ierr)       ! move to beginning
   6646   print *, FTELL(fd), ierr
   6647 
   6648   CLOSE(UNIT=fd)
   6649 END PROGRAM
   6650 @end smallexample
   6651 
   6652 @item @emph{See also}:
   6653 @ref{FTELL}
   6654 @end table
   6655 
   6656 
   6657 
   6658 @node FSTAT
   6659 @section @code{FSTAT} --- Get file status
   6660 @fnindex FSTAT
   6661 @cindex file system, file status
   6662 
   6663 @table @asis
   6664 @item @emph{Description}:
   6665 @code{FSTAT} is identical to @ref{STAT}, except that information about an 
   6666 already opened file is obtained.
   6667 
   6668 The elements in @code{VALUES} are the same as described by @ref{STAT}.
   6669 
   6670 This intrinsic is provided in both subroutine and function forms; however,
   6671 only one form can be used in any given program unit.
   6672 
   6673 @item @emph{Standard}:
   6674 GNU extension
   6675 
   6676 @item @emph{Class}:
   6677 Subroutine, function
   6678 
   6679 @item @emph{Syntax}:
   6680 @multitable @columnfractions .80
   6681 @item @code{CALL FSTAT(UNIT, VALUES [, STATUS])}
   6682 @item @code{STATUS = FSTAT(UNIT, VALUES)}
   6683 @end multitable
   6684 
   6685 @item @emph{Arguments}:
   6686 @multitable @columnfractions .15 .70
   6687 @item @var{UNIT}   @tab An open I/O unit number of type @code{INTEGER}.
   6688 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
   6689 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
   6690 on success and a system specific error code otherwise.
   6691 @end multitable
   6692 
   6693 @item @emph{Example}:
   6694 See @ref{STAT} for an example.
   6695 
   6696 @item @emph{See also}:
   6697 To stat a link: @gol
   6698 @ref{LSTAT} @gol
   6699 To stat a file: @gol
   6700 @ref{STAT}
   6701 @end table
   6702 
   6703 
   6704 
   6705 @node FTELL
   6706 @section @code{FTELL} --- Current stream position
   6707 @fnindex FTELL
   6708 @cindex file operation, position
   6709 
   6710 @table @asis
   6711 @item @emph{Description}:
   6712 Retrieves the current position within an open file.
   6713 
   6714 This intrinsic is provided in both subroutine and function forms; however,
   6715 only one form can be used in any given program unit.
   6716 
   6717 @item @emph{Standard}:
   6718 GNU extension
   6719 
   6720 @item @emph{Class}:
   6721 Subroutine, function
   6722 
   6723 @item @emph{Syntax}:
   6724 @multitable @columnfractions .80
   6725 @item @code{CALL FTELL(UNIT, OFFSET)}
   6726 @item @code{OFFSET = FTELL(UNIT)}
   6727 @end multitable
   6728 
   6729 @item @emph{Arguments}:
   6730 @multitable @columnfractions .15 .70
   6731 @item @var{OFFSET}  @tab Shall of type @code{INTEGER}.
   6732 @item @var{UNIT}    @tab Shall of type @code{INTEGER}.
   6733 @end multitable
   6734 
   6735 @item @emph{Return value}:
   6736 In either syntax, @var{OFFSET} is set to the current offset of unit
   6737 number @var{UNIT}, or to @math{-1} if the unit is not currently open.
   6738 
   6739 @item @emph{Example}:
   6740 @smallexample
   6741 PROGRAM test_ftell
   6742   INTEGER :: i
   6743   OPEN(10, FILE="temp.dat")
   6744   CALL ftell(10,i)
   6745   WRITE(*,*) i
   6746 END PROGRAM
   6747 @end smallexample
   6748 
   6749 @item @emph{See also}:
   6750 @ref{FSEEK}
   6751 @end table
   6752 
   6753 
   6754 
   6755 @node GAMMA
   6756 @section @code{GAMMA} --- Gamma function
   6757 @fnindex GAMMA
   6758 @fnindex DGAMMA
   6759 @cindex Gamma function
   6760 @cindex Factorial function
   6761 
   6762 @table @asis
   6763 @item @emph{Description}:
   6764 @code{GAMMA(X)} computes Gamma (@math{\Gamma}) of @var{X}. For positive,
   6765 integer values of @var{X} the Gamma function simplifies to the factorial
   6766 function @math{\Gamma(x)=(x-1)!}.
   6767 
   6768 @tex
   6769 $$
   6770 \Gamma(x) = \int_0^\infty t^{x-1}{\rm e}^{-t}\,{\rm d}t
   6771 $$
   6772 @end tex
   6773 
   6774 @item @emph{Standard}:
   6775 Fortran 2008 and later
   6776 
   6777 @item @emph{Class}:
   6778 Elemental function
   6779 
   6780 @item @emph{Syntax}:
   6781 @code{X = GAMMA(X)}
   6782 
   6783 @item @emph{Arguments}:
   6784 @multitable @columnfractions .15 .70
   6785 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
   6786 nor a negative integer.
   6787 @end multitable
   6788 
   6789 @item @emph{Return value}:
   6790 The return value is of type @code{REAL} of the same kind as @var{X}.
   6791 
   6792 @item @emph{Example}:
   6793 @smallexample
   6794 program test_gamma
   6795   real :: x = 1.0
   6796   x = gamma(x) ! returns 1.0
   6797 end program test_gamma
   6798 @end smallexample
   6799 
   6800 @item @emph{Specific names}:
   6801 @multitable @columnfractions .20 .23 .20 .33
   6802 @headitem Name             @tab Argument         @tab Return type       @tab Standard
   6803 @item @code{DGAMMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU extension
   6804 @end multitable
   6805 
   6806 @item @emph{See also}:
   6807 Logarithm of the Gamma function: @gol
   6808 @ref{LOG_GAMMA}
   6809 @end table
   6810 
   6811 
   6812 
   6813 @node GERROR
   6814 @section @code{GERROR} --- Get last system error message
   6815 @fnindex GERROR
   6816 @cindex system, error handling
   6817 
   6818 @table @asis
   6819 @item @emph{Description}:
   6820 Returns the system error message corresponding to the last system error.
   6821 This resembles the functionality of @code{strerror(3)} in C.
   6822 
   6823 @item @emph{Standard}:
   6824 GNU extension
   6825 
   6826 @item @emph{Class}:
   6827 Subroutine
   6828 
   6829 @item @emph{Syntax}:
   6830 @code{CALL GERROR(RESULT)}
   6831 
   6832 @item @emph{Arguments}:
   6833 @multitable @columnfractions .15 .70
   6834 @item @var{RESULT}  @tab Shall be of type @code{CHARACTER} and of default kind.
   6835 @end multitable
   6836 
   6837 @item @emph{Example}:
   6838 @smallexample
   6839 PROGRAM test_gerror
   6840   CHARACTER(len=100) :: msg
   6841   CALL gerror(msg)
   6842   WRITE(*,*) msg
   6843 END PROGRAM
   6844 @end smallexample
   6845 
   6846 @item @emph{See also}:
   6847 @ref{IERRNO}, @gol
   6848 @ref{PERROR}
   6849 @end table
   6850 
   6851 
   6852 
   6853 @node GETARG
   6854 @section @code{GETARG} --- Get command line arguments
   6855 @fnindex GETARG
   6856 @cindex command-line arguments
   6857 @cindex arguments, to program
   6858 
   6859 @table @asis
   6860 @item @emph{Description}:
   6861 Retrieve the @var{POS}-th argument that was passed on the
   6862 command line when the containing program was invoked.
   6863 
   6864 This intrinsic routine is provided for backwards compatibility with 
   6865 GNU Fortran 77.  In new code, programmers should consider the use of 
   6866 the @ref{GET_COMMAND_ARGUMENT} intrinsic defined by the Fortran 2003 
   6867 standard.
   6868 
   6869 @item @emph{Standard}:
   6870 GNU extension
   6871 
   6872 @item @emph{Class}:
   6873 Subroutine
   6874 
   6875 @item @emph{Syntax}:
   6876 @code{CALL GETARG(POS, VALUE)}
   6877 
   6878 @item @emph{Arguments}:
   6879 @multitable @columnfractions .15 .70
   6880 @item @var{POS}   @tab Shall be of type @code{INTEGER} and not wider than
   6881 the default integer kind; @math{@var{POS} \geq 0}
   6882 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default
   6883 kind.
   6884 @end multitable
   6885 
   6886 @item @emph{Return value}:
   6887 After @code{GETARG} returns, the @var{VALUE} argument holds the
   6888 @var{POS}th command line argument. If @var{VALUE} cannot hold the
   6889 argument, it is truncated to fit the length of @var{VALUE}. If there are
   6890 less than @var{POS} arguments specified at the command line, @var{VALUE}
   6891 will be filled with blanks. If @math{@var{POS} = 0}, @var{VALUE} is set
   6892 to the name of the program (on systems that support this feature).
   6893 
   6894 @item @emph{Example}:
   6895 @smallexample
   6896 PROGRAM test_getarg
   6897   INTEGER :: i
   6898   CHARACTER(len=32) :: arg
   6899 
   6900   DO i = 1, iargc()
   6901     CALL getarg(i, arg)
   6902     WRITE (*,*) arg
   6903   END DO
   6904 END PROGRAM
   6905 @end smallexample
   6906 
   6907 @item @emph{See also}:
   6908 GNU Fortran 77 compatibility function: @gol
   6909 @ref{IARGC} @gol
   6910 Fortran 2003 functions and subroutines: @gol
   6911 @ref{GET_COMMAND}, @gol
   6912 @ref{GET_COMMAND_ARGUMENT}, @gol
   6913 @ref{COMMAND_ARGUMENT_COUNT}
   6914 @end table
   6915 
   6916 
   6917 
   6918 @node GET_COMMAND
   6919 @section @code{GET_COMMAND} --- Get the entire command line
   6920 @fnindex GET_COMMAND
   6921 @cindex command-line arguments
   6922 @cindex arguments, to program
   6923 
   6924 @table @asis
   6925 @item @emph{Description}:
   6926 Retrieve the entire command line that was used to invoke the program.
   6927 
   6928 @item @emph{Standard}:
   6929 Fortran 2003 and later
   6930 
   6931 @item @emph{Class}:
   6932 Subroutine
   6933 
   6934 @item @emph{Syntax}:
   6935 @code{CALL GET_COMMAND([COMMAND, LENGTH, STATUS])}
   6936 
   6937 @item @emph{Arguments}:
   6938 @multitable @columnfractions .15 .70
   6939 @item @var{COMMAND} @tab (Optional) shall be of type @code{CHARACTER} and
   6940 of default kind.
   6941 @item @var{LENGTH} @tab (Optional) Shall be of type @code{INTEGER} and of
   6942 default kind.
   6943 @item @var{STATUS} @tab (Optional) Shall be of type @code{INTEGER} and of
   6944 default kind.
   6945 @end multitable
   6946 
   6947 @item @emph{Return value}:
   6948 If @var{COMMAND} is present, stores the entire command line that was used
   6949 to invoke the program in @var{COMMAND}. If @var{LENGTH} is present, it is
   6950 assigned the length of the command line. If @var{STATUS} is present, it
   6951 is assigned 0 upon success of the command, -1 if @var{COMMAND} is too
   6952 short to store the command line, or a positive value in case of an error.
   6953 
   6954 @item @emph{Example}:
   6955 @smallexample
   6956 PROGRAM test_get_command
   6957   CHARACTER(len=255) :: cmd
   6958   CALL get_command(cmd)
   6959   WRITE (*,*) TRIM(cmd)
   6960 END PROGRAM
   6961 @end smallexample
   6962 
   6963 @item @emph{See also}:
   6964 @ref{GET_COMMAND_ARGUMENT}, @gol
   6965 @ref{COMMAND_ARGUMENT_COUNT}
   6966 @end table
   6967 
   6968 
   6969 
   6970 @node GET_COMMAND_ARGUMENT
   6971 @section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments
   6972 @fnindex GET_COMMAND_ARGUMENT
   6973 @cindex command-line arguments
   6974 @cindex arguments, to program
   6975 
   6976 @table @asis
   6977 @item @emph{Description}:
   6978 Retrieve the @var{NUMBER}-th argument that was passed on the
   6979 command line when the containing program was invoked.
   6980 
   6981 @item @emph{Standard}:
   6982 Fortran 2003 and later
   6983 
   6984 @item @emph{Class}:
   6985 Subroutine
   6986 
   6987 @item @emph{Syntax}:
   6988 @code{CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])}
   6989 
   6990 @item @emph{Arguments}:
   6991 @multitable @columnfractions .15 .70
   6992 @item @var{NUMBER} @tab Shall be a scalar of type @code{INTEGER} and of
   6993 default kind, @math{@var{NUMBER} \geq 0}
   6994 @item @var{VALUE}  @tab (Optional) Shall be a scalar of type @code{CHARACTER}
   6995 and of default kind.
   6996 @item @var{LENGTH} @tab (Optional) Shall be a scalar of type @code{INTEGER}
   6997 and of default kind.
   6998 @item @var{STATUS} @tab (Optional) Shall be a scalar of type @code{INTEGER}
   6999 and of default kind.
   7000 @end multitable
   7001 
   7002 @item @emph{Return value}:
   7003 After @code{GET_COMMAND_ARGUMENT} returns, the @var{VALUE} argument holds the 
   7004 @var{NUMBER}-th command line argument. If @var{VALUE} cannot hold the argument, it is 
   7005 truncated to fit the length of @var{VALUE}. If there are less than @var{NUMBER}
   7006 arguments specified at the command line, @var{VALUE} will be filled with blanks. 
   7007 If @math{@var{NUMBER} = 0}, @var{VALUE} is set to the name of the program (on
   7008 systems that support this feature). The @var{LENGTH} argument contains the
   7009 length of the @var{NUMBER}-th command line argument. If the argument retrieval
   7010 fails, @var{STATUS} is a positive number; if @var{VALUE} contains a truncated
   7011 command line argument, @var{STATUS} is -1; and otherwise the @var{STATUS} is
   7012 zero.
   7013 
   7014 @item @emph{Example}:
   7015 @smallexample
   7016 PROGRAM test_get_command_argument
   7017   INTEGER :: i
   7018   CHARACTER(len=32) :: arg
   7019 
   7020   i = 0
   7021   DO
   7022     CALL get_command_argument(i, arg)
   7023     IF (LEN_TRIM(arg) == 0) EXIT
   7024 
   7025     WRITE (*,*) TRIM(arg)
   7026     i = i+1
   7027   END DO
   7028 END PROGRAM
   7029 @end smallexample
   7030 
   7031 @item @emph{See also}:
   7032 @ref{GET_COMMAND}, @gol
   7033 @ref{COMMAND_ARGUMENT_COUNT}
   7034 @end table
   7035 
   7036 
   7037 
   7038 @node GETCWD
   7039 @section @code{GETCWD} --- Get current working directory
   7040 @fnindex GETCWD
   7041 @cindex system, working directory
   7042 
   7043 @table @asis
   7044 @item @emph{Description}:
   7045 Get current working directory.
   7046 
   7047 This intrinsic is provided in both subroutine and function forms; however,
   7048 only one form can be used in any given program unit.
   7049 
   7050 @item @emph{Standard}:
   7051 GNU extension
   7052 
   7053 @item @emph{Class}:
   7054 Subroutine, function
   7055 
   7056 @item @emph{Syntax}:
   7057 @multitable @columnfractions .80
   7058 @item @code{CALL GETCWD(C [, STATUS])}
   7059 @item @code{STATUS = GETCWD(C)}
   7060 @end multitable
   7061 
   7062 @item @emph{Arguments}:
   7063 @multitable @columnfractions .15 .70
   7064 @item @var{C} @tab The type shall be @code{CHARACTER} and of default kind.
   7065 @item @var{STATUS} @tab (Optional) status flag. Returns 0 on success, 
   7066 a system specific and nonzero error code otherwise.
   7067 @end multitable
   7068 
   7069 @item @emph{Example}:
   7070 @smallexample
   7071 PROGRAM test_getcwd
   7072   CHARACTER(len=255) :: cwd
   7073   CALL getcwd(cwd)
   7074   WRITE(*,*) TRIM(cwd)
   7075 END PROGRAM
   7076 @end smallexample
   7077 
   7078 @item @emph{See also}:
   7079 @ref{CHDIR}
   7080 @end table
   7081 
   7082 
   7083 
   7084 @node GETENV
   7085 @section @code{GETENV} --- Get an environmental variable
   7086 @fnindex GETENV
   7087 @cindex environment variable
   7088 
   7089 @table @asis
   7090 @item @emph{Description}:
   7091 Get the @var{VALUE} of the environmental variable @var{NAME}.
   7092 
   7093 This intrinsic routine is provided for backwards compatibility with
   7094 GNU Fortran 77.  In new code, programmers should consider the use of
   7095 the @ref{GET_ENVIRONMENT_VARIABLE} intrinsic defined by the Fortran
   7096 2003 standard.
   7097 
   7098 Note that @code{GETENV} need not be thread-safe. It is the
   7099 responsibility of the user to ensure that the environment is not being
   7100 updated concurrently with a call to the @code{GETENV} intrinsic.
   7101 
   7102 @item @emph{Standard}:
   7103 GNU extension
   7104 
   7105 @item @emph{Class}:
   7106 Subroutine
   7107 
   7108 @item @emph{Syntax}:
   7109 @code{CALL GETENV(NAME, VALUE)}
   7110 
   7111 @item @emph{Arguments}:
   7112 @multitable @columnfractions .15 .70
   7113 @item @var{NAME}  @tab Shall be of type @code{CHARACTER} and of default kind.
   7114 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default kind.
   7115 @end multitable
   7116 
   7117 @item @emph{Return value}:
   7118 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is 
   7119 not large enough to hold the data, it is truncated. If @var{NAME}
   7120 is not set, @var{VALUE} will be filled with blanks.
   7121 
   7122 @item @emph{Example}:
   7123 @smallexample
   7124 PROGRAM test_getenv
   7125   CHARACTER(len=255) :: homedir
   7126   CALL getenv("HOME", homedir)
   7127   WRITE (*,*) TRIM(homedir)
   7128 END PROGRAM
   7129 @end smallexample
   7130 
   7131 @item @emph{See also}:
   7132 @ref{GET_ENVIRONMENT_VARIABLE}
   7133 @end table
   7134 
   7135 
   7136 
   7137 @node GET_ENVIRONMENT_VARIABLE
   7138 @section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable
   7139 @fnindex GET_ENVIRONMENT_VARIABLE
   7140 @cindex environment variable
   7141 
   7142 @table @asis
   7143 @item @emph{Description}:
   7144 Get the @var{VALUE} of the environmental variable @var{NAME}.
   7145 
   7146 Note that @code{GET_ENVIRONMENT_VARIABLE} need not be thread-safe. It
   7147 is the responsibility of the user to ensure that the environment is
   7148 not being updated concurrently with a call to the
   7149 @code{GET_ENVIRONMENT_VARIABLE} intrinsic.
   7150 
   7151 @item @emph{Standard}:
   7152 Fortran 2003 and later
   7153 
   7154 @item @emph{Class}:
   7155 Subroutine
   7156 
   7157 @item @emph{Syntax}:
   7158 @code{CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)}
   7159 
   7160 @item @emph{Arguments}:
   7161 @multitable @columnfractions .15 .70
   7162 @item @var{NAME}      @tab Shall be a scalar of type @code{CHARACTER}
   7163 and of default kind.
   7164 @item @var{VALUE}     @tab (Optional) Shall be a scalar of type @code{CHARACTER}
   7165 and of default kind.
   7166 @item @var{LENGTH}    @tab (Optional) Shall be a scalar of type @code{INTEGER}
   7167 and of default kind.
   7168 @item @var{STATUS}    @tab (Optional) Shall be a scalar of type @code{INTEGER}
   7169 and of default kind.
   7170 @item @var{TRIM_NAME} @tab (Optional) Shall be a scalar of type @code{LOGICAL}
   7171 and of default kind.
   7172 @end multitable
   7173 
   7174 @item @emph{Return value}:
   7175 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is 
   7176 not large enough to hold the data, it is truncated. If @var{NAME}
   7177 is not set, @var{VALUE} will be filled with blanks. Argument @var{LENGTH}
   7178 contains the length needed for storing the environment variable @var{NAME}
   7179 or zero if it is not present. @var{STATUS} is -1 if @var{VALUE} is present
   7180 but too short for the environment variable; it is 1 if the environment
   7181 variable does not exist and 2 if the processor does not support environment
   7182 variables; in all other cases @var{STATUS} is zero. If @var{TRIM_NAME} is
   7183 present with the value @code{.FALSE.}, the trailing blanks in @var{NAME}
   7184 are significant; otherwise they are not part of the environment variable
   7185 name.
   7186 
   7187 @item @emph{Example}:
   7188 @smallexample
   7189 PROGRAM test_getenv
   7190   CHARACTER(len=255) :: homedir
   7191   CALL get_environment_variable("HOME", homedir)
   7192   WRITE (*,*) TRIM(homedir)
   7193 END PROGRAM
   7194 @end smallexample
   7195 @end table
   7196 
   7197 
   7198 
   7199 @node GETGID
   7200 @section @code{GETGID} --- Group ID function
   7201 @fnindex GETGID
   7202 @cindex system, group ID
   7203 
   7204 @table @asis
   7205 @item @emph{Description}:
   7206 Returns the numerical group ID of the current process.
   7207 
   7208 @item @emph{Standard}:
   7209 GNU extension
   7210 
   7211 @item @emph{Class}:
   7212 Function
   7213 
   7214 @item @emph{Syntax}:
   7215 @code{RESULT = GETGID()}
   7216 
   7217 @item @emph{Return value}:
   7218 The return value of @code{GETGID} is an @code{INTEGER} of the default
   7219 kind.
   7220 
   7221 
   7222 @item @emph{Example}:
   7223 See @code{GETPID} for an example.
   7224 
   7225 @item @emph{See also}:
   7226 @ref{GETPID}, @gol
   7227 @ref{GETUID}
   7228 @end table
   7229 
   7230 
   7231 
   7232 @node GETLOG
   7233 @section @code{GETLOG} --- Get login name
   7234 @fnindex GETLOG
   7235 @cindex system, login name
   7236 @cindex login name
   7237 
   7238 @table @asis
   7239 @item @emph{Description}:
   7240 Gets the username under which the program is running.
   7241 
   7242 @item @emph{Standard}:
   7243 GNU extension
   7244 
   7245 @item @emph{Class}:
   7246 Subroutine
   7247 
   7248 @item @emph{Syntax}:
   7249 @code{CALL GETLOG(C)}
   7250 
   7251 @item @emph{Arguments}:
   7252 @multitable @columnfractions .15 .70
   7253 @item @var{C} @tab Shall be of type @code{CHARACTER} and of default kind.
   7254 @end multitable
   7255 
   7256 @item @emph{Return value}:
   7257 Stores the current user name in @var{C}.  (On systems where POSIX
   7258 functions @code{geteuid} and @code{getpwuid} are not available, and 
   7259 the @code{getlogin} function is not implemented either, this will
   7260 return a blank string.)
   7261 
   7262 @item @emph{Example}:
   7263 @smallexample
   7264 PROGRAM TEST_GETLOG
   7265   CHARACTER(32) :: login
   7266   CALL GETLOG(login)
   7267   WRITE(*,*) login
   7268 END PROGRAM
   7269 @end smallexample
   7270 
   7271 @item @emph{See also}:
   7272 @ref{GETUID}
   7273 @end table
   7274 
   7275 
   7276 
   7277 @node GETPID
   7278 @section @code{GETPID} --- Process ID function
   7279 @fnindex GETPID
   7280 @cindex system, process ID
   7281 @cindex process ID
   7282 
   7283 @table @asis
   7284 @item @emph{Description}:
   7285 Returns the numerical process identifier of the current process.
   7286 
   7287 @item @emph{Standard}:
   7288 GNU extension
   7289 
   7290 @item @emph{Class}:
   7291 Function
   7292 
   7293 @item @emph{Syntax}:
   7294 @code{RESULT = GETPID()}
   7295 
   7296 @item @emph{Return value}:
   7297 The return value of @code{GETPID} is an @code{INTEGER} of the default
   7298 kind.
   7299 
   7300 
   7301 @item @emph{Example}:
   7302 @smallexample
   7303 program info
   7304   print *, "The current process ID is ", getpid()
   7305   print *, "Your numerical user ID is ", getuid()
   7306   print *, "Your numerical group ID is ", getgid()
   7307 end program info
   7308 @end smallexample
   7309 
   7310 @item @emph{See also}:
   7311 @ref{GETGID}, @gol
   7312 @ref{GETUID}
   7313 @end table
   7314 
   7315 
   7316 
   7317 @node GETUID
   7318 @section @code{GETUID} --- User ID function
   7319 @fnindex GETUID
   7320 @cindex system, user ID
   7321 @cindex user id
   7322 
   7323 @table @asis
   7324 @item @emph{Description}:
   7325 Returns the numerical user ID of the current process.
   7326 
   7327 @item @emph{Standard}:
   7328 GNU extension
   7329 
   7330 @item @emph{Class}:
   7331 Function
   7332 
   7333 @item @emph{Syntax}:
   7334 @code{RESULT = GETUID()}
   7335 
   7336 @item @emph{Return value}:
   7337 The return value of @code{GETUID} is an @code{INTEGER} of the default
   7338 kind.
   7339 
   7340 
   7341 @item @emph{Example}:
   7342 See @code{GETPID} for an example.
   7343 
   7344 @item @emph{See also}:
   7345 @ref{GETPID}, @gol
   7346 @ref{GETLOG}
   7347 @end table
   7348 
   7349 
   7350 
   7351 @node GMTIME
   7352 @section @code{GMTIME} --- Convert time to GMT info
   7353 @fnindex GMTIME
   7354 @cindex time, conversion to GMT info
   7355 
   7356 @table @asis
   7357 @item @emph{Description}:
   7358 Given a system time value @var{TIME} (as provided by the @ref{TIME}
   7359 intrinsic), fills @var{VALUES} with values extracted from it appropriate
   7360 to the UTC time zone (Universal Coordinated Time, also known in some
   7361 countries as GMT, Greenwich Mean Time), using @code{gmtime(3)}.
   7362 
   7363 This intrinsic routine is provided for backwards compatibility with 
   7364 GNU Fortran 77.  In new code, programmers should consider the use of 
   7365 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   7366 standard.
   7367 
   7368 @item @emph{Standard}:
   7369 GNU extension
   7370 
   7371 @item @emph{Class}:
   7372 Subroutine
   7373 
   7374 @item @emph{Syntax}:
   7375 @code{CALL GMTIME(TIME, VALUES)}
   7376 
   7377 @item @emph{Arguments}:
   7378 @multitable @columnfractions .15 .70
   7379 @item @var{TIME}   @tab An @code{INTEGER} scalar expression
   7380 corresponding to a system time, with @code{INTENT(IN)}.
   7381 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
   7382 with @code{INTENT(OUT)}.
   7383 @end multitable
   7384 
   7385 @item @emph{Return value}:
   7386 The elements of @var{VALUES} are assigned as follows:
   7387 @enumerate
   7388 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
   7389 seconds
   7390 @item Minutes after the hour, range 0--59
   7391 @item Hours past midnight, range 0--23
   7392 @item Day of month, range 1--31
   7393 @item Number of months since January, range 0--11
   7394 @item Years since 1900
   7395 @item Number of days since Sunday, range 0--6
   7396 @item Days since January 1, range 0--365
   7397 @item Daylight savings indicator: positive if daylight savings is in
   7398 effect, zero if not, and negative if the information is not available.
   7399 @end enumerate
   7400 
   7401 @item @emph{See also}:
   7402 @ref{DATE_AND_TIME}, @gol
   7403 @ref{CTIME}, @gol
   7404 @ref{LTIME}, @gol
   7405 @ref{TIME}, @gol
   7406 @ref{TIME8}
   7407 @end table
   7408 
   7409 
   7410 
   7411 @node HOSTNM
   7412 @section @code{HOSTNM} --- Get system host name
   7413 @fnindex HOSTNM
   7414 @cindex system, host name
   7415 
   7416 @table @asis
   7417 @item @emph{Description}:
   7418 Retrieves the host name of the system on which the program is running.
   7419 
   7420 This intrinsic is provided in both subroutine and function forms; however,
   7421 only one form can be used in any given program unit.
   7422 
   7423 @item @emph{Standard}:
   7424 GNU extension
   7425 
   7426 @item @emph{Class}:
   7427 Subroutine, function
   7428 
   7429 @item @emph{Syntax}:
   7430 @multitable @columnfractions .80
   7431 @item @code{CALL HOSTNM(C [, STATUS])}
   7432 @item @code{STATUS = HOSTNM(NAME)}
   7433 @end multitable
   7434 
   7435 @item @emph{Arguments}:
   7436 @multitable @columnfractions .15 .70
   7437 @item @var{C}    @tab Shall of type @code{CHARACTER} and of default kind.
   7438 @item @var{STATUS}  @tab (Optional) status flag of type @code{INTEGER}.
   7439 Returns 0 on success, or a system specific error code otherwise.
   7440 @end multitable
   7441 
   7442 @item @emph{Return value}:
   7443 In either syntax, @var{NAME} is set to the current hostname if it can
   7444 be obtained, or to a blank string otherwise.
   7445 
   7446 @end table
   7447 
   7448 
   7449 
   7450 @node HUGE
   7451 @section @code{HUGE} --- Largest number of a kind
   7452 @fnindex HUGE
   7453 @cindex limits, largest number
   7454 @cindex model representation, largest number
   7455 
   7456 @table @asis
   7457 @item @emph{Description}:
   7458 @code{HUGE(X)} returns the largest number that is not an infinity in
   7459 the model of the type of @code{X}.
   7460 
   7461 @item @emph{Standard}:
   7462 Fortran 90 and later
   7463 
   7464 @item @emph{Class}:
   7465 Inquiry function
   7466 
   7467 @item @emph{Syntax}:
   7468 @code{RESULT = HUGE(X)}
   7469 
   7470 @item @emph{Arguments}:
   7471 @multitable @columnfractions .15 .70
   7472 @item @var{X} @tab Shall be of type @code{REAL} or @code{INTEGER}.
   7473 @end multitable
   7474 
   7475 @item @emph{Return value}:
   7476 The return value is of the same type and kind as @var{X}
   7477 
   7478 @item @emph{Example}:
   7479 @smallexample
   7480 program test_huge_tiny
   7481   print *, huge(0), huge(0.0), huge(0.0d0)
   7482   print *, tiny(0.0), tiny(0.0d0)
   7483 end program test_huge_tiny
   7484 @end smallexample
   7485 @end table
   7486 
   7487 
   7488 
   7489 @node HYPOT
   7490 @section @code{HYPOT} --- Euclidean distance function
   7491 @fnindex HYPOT
   7492 @cindex Euclidean distance
   7493 
   7494 @table @asis
   7495 @item @emph{Description}:
   7496 @code{HYPOT(X,Y)} is the Euclidean distance function. It is equal to
   7497 @math{\sqrt{X^2 + Y^2}}, without undue underflow or overflow.
   7498 
   7499 @item @emph{Standard}:
   7500 Fortran 2008 and later
   7501 
   7502 @item @emph{Class}:
   7503 Elemental function
   7504 
   7505 @item @emph{Syntax}:
   7506 @code{RESULT = HYPOT(X, Y)}
   7507 
   7508 @item @emph{Arguments}:
   7509 @multitable @columnfractions .15 .70
   7510 @item @var{X} @tab The type shall be @code{REAL}.
   7511 @item @var{Y} @tab The type and kind type parameter shall be the same as
   7512 @var{X}.
   7513 @end multitable
   7514 
   7515 @item @emph{Return value}:
   7516 The return value has the same type and kind type parameter as @var{X}.
   7517 
   7518 @item @emph{Example}:
   7519 @smallexample
   7520 program test_hypot
   7521   real(4) :: x = 1.e0_4, y = 0.5e0_4
   7522   x = hypot(x,y)
   7523 end program test_hypot
   7524 @end smallexample
   7525 @end table
   7526 
   7527 
   7528 
   7529 @node IACHAR
   7530 @section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence 
   7531 @fnindex IACHAR
   7532 @cindex @acronym{ASCII} collating sequence
   7533 @cindex collating sequence, @acronym{ASCII}
   7534 @cindex conversion, to integer
   7535 
   7536 @table @asis
   7537 @item @emph{Description}:
   7538 @code{IACHAR(C)} returns the code for the @acronym{ASCII} character
   7539 in the first character position of @code{C}.
   7540 
   7541 @item @emph{Standard}:
   7542 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   7543 
   7544 @item @emph{Class}:
   7545 Elemental function
   7546 
   7547 @item @emph{Syntax}:
   7548 @code{RESULT = IACHAR(C [, KIND])}
   7549 
   7550 @item @emph{Arguments}:
   7551 @multitable @columnfractions .15 .70
   7552 @item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
   7553 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   7554 expression indicating the kind parameter of the result.
   7555 @end multitable
   7556 
   7557 @item @emph{Return value}:
   7558 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   7559 @var{KIND} is absent, the return value is of default integer kind.
   7560 
   7561 @item @emph{Example}:
   7562 @smallexample
   7563 program test_iachar
   7564   integer i
   7565   i = iachar(' ')
   7566 end program test_iachar
   7567 @end smallexample
   7568 
   7569 @item @emph{Note}:
   7570 See @ref{ICHAR} for a discussion of converting between numerical values
   7571 and formatted string representations.
   7572 
   7573 @item @emph{See also}:
   7574 @ref{ACHAR}, @gol
   7575 @ref{CHAR}, @gol
   7576 @ref{ICHAR}
   7577 @end table
   7578 
   7579 
   7580 
   7581 @node IALL
   7582 @section @code{IALL} --- Bitwise AND of array elements
   7583 @fnindex IALL
   7584 @cindex array, AND
   7585 @cindex bits, AND of array elements
   7586 
   7587 @table @asis
   7588 @item @emph{Description}:
   7589 Reduces with bitwise AND the elements of @var{ARRAY} along dimension @var{DIM}
   7590 if the corresponding element in @var{MASK} is @code{TRUE}.
   7591 
   7592 @item @emph{Standard}:
   7593 Fortran 2008 and later
   7594 
   7595 @item @emph{Class}:
   7596 Transformational function
   7597 
   7598 @item @emph{Syntax}:
   7599 @multitable @columnfractions .80
   7600 @item @code{RESULT = IALL(ARRAY[, MASK])}
   7601 @item @code{RESULT = IALL(ARRAY, DIM[, MASK])}
   7602 @end multitable
   7603 
   7604 @item @emph{Arguments}:
   7605 @multitable @columnfractions .15 .70
   7606 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
   7607 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   7608 @code{INTEGER} with a value in the range from 1 to n, where n 
   7609 equals the rank of @var{ARRAY}.
   7610 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   7611 and either be a scalar or an array of the same shape as @var{ARRAY}.
   7612 @end multitable
   7613 
   7614 @item @emph{Return value}:
   7615 The result is of the same type as @var{ARRAY}.
   7616 
   7617 If @var{DIM} is absent, a scalar with the bitwise ALL of all elements in
   7618 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
   7619 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
   7620 dimension @var{DIM} dropped is returned.
   7621 
   7622 @item @emph{Example}:
   7623 @smallexample
   7624 PROGRAM test_iall
   7625   INTEGER(1) :: a(2)
   7626 
   7627   a(1) = b'00100100'
   7628   a(2) = b'01101010'
   7629 
   7630   ! prints 00100000
   7631   PRINT '(b8.8)', IALL(a)
   7632 END PROGRAM
   7633 @end smallexample
   7634 
   7635 @item @emph{See also}:
   7636 @ref{IANY}, @gol
   7637 @ref{IPARITY}, @gol
   7638 @ref{IAND}
   7639 @end table
   7640 
   7641 
   7642 
   7643 @node IAND
   7644 @section @code{IAND} --- Bitwise logical and
   7645 @fnindex IAND
   7646 @fnindex BIAND
   7647 @fnindex IIAND
   7648 @fnindex JIAND
   7649 @fnindex KIAND
   7650 @cindex bitwise logical and
   7651 @cindex logical and, bitwise
   7652 
   7653 @table @asis
   7654 @item @emph{Description}:
   7655 Bitwise logical @code{AND}.
   7656 
   7657 @item @emph{Standard}:
   7658 Fortran 90 and later, with boz-literal-constant Fortran 2008 and later, has overloads that are GNU extensions
   7659 
   7660 @item @emph{Class}:
   7661 Elemental function
   7662 
   7663 @item @emph{Syntax}:
   7664 @code{RESULT = IAND(I, J)}
   7665 
   7666 @item @emph{Arguments}:
   7667 @multitable @columnfractions .15 .70
   7668 @item @var{I} @tab The type shall be @code{INTEGER} or a boz-literal-constant.
   7669 @item @var{J} @tab The type shall be @code{INTEGER} with the same
   7670 kind type parameter as @var{I} or a boz-literal-constant.
   7671 @var{I} and @var{J} shall not both be boz-literal-constants.
   7672 @end multitable
   7673 
   7674 @item @emph{Return value}:
   7675 The return type is @code{INTEGER} with the kind type parameter of the
   7676 arguments.
   7677 A boz-literal-constant is converted to an @code{INTEGER} with the kind
   7678 type parameter of the other argument as-if a call to @ref{INT} occurred.
   7679 
   7680 @item @emph{Example}:
   7681 @smallexample
   7682 PROGRAM test_iand
   7683   INTEGER :: a, b
   7684   DATA a / Z'F' /, b / Z'3' /
   7685   WRITE (*,*) IAND(a, b)
   7686 END PROGRAM
   7687 @end smallexample
   7688 
   7689 @item @emph{Specific names}:
   7690 @multitable @columnfractions .20 .23 .20 .33
   7691 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   7692 @item @code{IAND(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   7693 @item @code{BIAND(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7694 @item @code{IIAND(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7695 @item @code{JIAND(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7696 @item @code{KIAND(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7697 @end multitable
   7698 
   7699 @item @emph{See also}:
   7700 @ref{IOR}, @gol
   7701 @ref{IEOR}, @gol
   7702 @ref{IBITS}, @gol
   7703 @ref{IBSET}, @gol
   7704 @ref{IBCLR}, @gol
   7705 @ref{NOT}
   7706 @end table
   7707 
   7708 
   7709 
   7710 @node IANY
   7711 @section @code{IANY} --- Bitwise OR of array elements
   7712 @fnindex IANY
   7713 @cindex array, OR
   7714 @cindex bits, OR of array elements
   7715 
   7716 @table @asis
   7717 @item @emph{Description}:
   7718 Reduces with bitwise OR (inclusive or) the elements of @var{ARRAY} along
   7719 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
   7720 
   7721 @item @emph{Standard}:
   7722 Fortran 2008 and later
   7723 
   7724 @item @emph{Class}:
   7725 Transformational function
   7726 
   7727 @item @emph{Syntax}:
   7728 @multitable @columnfractions .80
   7729 @item @code{RESULT = IANY(ARRAY[, MASK])}
   7730 @item @code{RESULT = IANY(ARRAY, DIM[, MASK])}
   7731 @end multitable
   7732 
   7733 @item @emph{Arguments}:
   7734 @multitable @columnfractions .15 .70
   7735 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
   7736 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   7737 @code{INTEGER} with a value in the range from 1 to n, where n 
   7738 equals the rank of @var{ARRAY}.
   7739 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   7740 and either be a scalar or an array of the same shape as @var{ARRAY}.
   7741 @end multitable
   7742 
   7743 @item @emph{Return value}:
   7744 The result is of the same type as @var{ARRAY}.
   7745 
   7746 If @var{DIM} is absent, a scalar with the bitwise OR of all elements in
   7747 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
   7748 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
   7749 dimension @var{DIM} dropped is returned.
   7750 
   7751 @item @emph{Example}:
   7752 @smallexample
   7753 PROGRAM test_iany
   7754   INTEGER(1) :: a(2)
   7755 
   7756   a(1) = b'00100100'
   7757   a(2) = b'01101010'
   7758 
   7759   ! prints 01101110
   7760   PRINT '(b8.8)', IANY(a)
   7761 END PROGRAM
   7762 @end smallexample
   7763 
   7764 @item @emph{See also}:
   7765 @ref{IPARITY}, @gol
   7766 @ref{IALL}, @gol
   7767 @ref{IOR}
   7768 @end table
   7769 
   7770 
   7771 
   7772 @node IARGC
   7773 @section @code{IARGC} --- Get the number of command line arguments
   7774 @fnindex IARGC
   7775 @cindex command-line arguments
   7776 @cindex command-line arguments, number of
   7777 @cindex arguments, to program
   7778 
   7779 @table @asis
   7780 @item @emph{Description}:
   7781 @code{IARGC} returns the number of arguments passed on the
   7782 command line when the containing program was invoked.
   7783 
   7784 This intrinsic routine is provided for backwards compatibility with 
   7785 GNU Fortran 77.  In new code, programmers should consider the use of 
   7786 the @ref{COMMAND_ARGUMENT_COUNT} intrinsic defined by the Fortran 2003 
   7787 standard.
   7788 
   7789 @item @emph{Standard}:
   7790 GNU extension
   7791 
   7792 @item @emph{Class}:
   7793 Function
   7794 
   7795 @item @emph{Syntax}:
   7796 @code{RESULT = IARGC()}
   7797 
   7798 @item @emph{Arguments}:
   7799 None
   7800 
   7801 @item @emph{Return value}:
   7802 The number of command line arguments, type @code{INTEGER(4)}.
   7803 
   7804 @item @emph{Example}:
   7805 See @ref{GETARG}
   7806 
   7807 @item @emph{See also}:
   7808 GNU Fortran 77 compatibility subroutine: @gol
   7809 @ref{GETARG} @gol
   7810 Fortran 2003 functions and subroutines: @gol
   7811 @ref{GET_COMMAND}, @gol
   7812 @ref{GET_COMMAND_ARGUMENT}, @gol
   7813 @ref{COMMAND_ARGUMENT_COUNT}
   7814 @end table
   7815 
   7816 
   7817 
   7818 @node IBCLR
   7819 @section @code{IBCLR} --- Clear bit
   7820 @fnindex IBCLR
   7821 @fnindex BBCLR
   7822 @fnindex IIBCLR
   7823 @fnindex JIBCLR
   7824 @fnindex KIBCLR
   7825 @cindex bits, unset
   7826 @cindex bits, clear
   7827 
   7828 @table @asis
   7829 @item @emph{Description}:
   7830 @code{IBCLR} returns the value of @var{I} with the bit at position
   7831 @var{POS} set to zero.
   7832 
   7833 @item @emph{Standard}:
   7834 Fortran 90 and later, has overloads that are GNU extensions
   7835 
   7836 @item @emph{Class}:
   7837 Elemental function
   7838 
   7839 @item @emph{Syntax}:
   7840 @code{RESULT = IBCLR(I, POS)}
   7841 
   7842 @item @emph{Arguments}:
   7843 @multitable @columnfractions .15 .70
   7844 @item @var{I} @tab The type shall be @code{INTEGER}.
   7845 @item @var{POS} @tab The type shall be @code{INTEGER}.
   7846 @end multitable
   7847 
   7848 @item @emph{Return value}:
   7849 The return value is of type @code{INTEGER} and of the same kind as
   7850 @var{I}.
   7851 
   7852 @item @emph{Specific names}:
   7853 @multitable @columnfractions .20 .23 .20 .33
   7854 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   7855 @item @code{IBCLR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   7856 @item @code{BBCLR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7857 @item @code{IIBCLR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7858 @item @code{JIBCLR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7859 @item @code{KIBCLR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7860 @end multitable
   7861 
   7862 @item @emph{See also}:
   7863 @ref{IBITS}, @gol
   7864 @ref{IBSET}, @gol
   7865 @ref{IAND}, @gol
   7866 @ref{IOR}, @gol
   7867 @ref{IEOR}, @gol
   7868 @ref{MVBITS}
   7869 @end table
   7870 
   7871 
   7872 
   7873 @node IBITS
   7874 @section @code{IBITS} --- Bit extraction
   7875 @fnindex IBITS
   7876 @fnindex BBITS
   7877 @fnindex IIBITS
   7878 @fnindex JIBITS
   7879 @fnindex KIBITS
   7880 @cindex bits, get
   7881 @cindex bits, extract
   7882 
   7883 @table @asis
   7884 @item @emph{Description}:
   7885 @code{IBITS} extracts a field of length @var{LEN} from @var{I},
   7886 starting from bit position @var{POS} and extending left for @var{LEN}
   7887 bits.  The result is right-justified and the remaining bits are
   7888 zeroed.  The value of @code{POS+LEN} must be less than or equal to the
   7889 value @code{BIT_SIZE(I)}.
   7890 
   7891 @item @emph{Standard}:
   7892 Fortran 90 and later, has overloads that are GNU extensions
   7893 
   7894 @item @emph{Class}:
   7895 Elemental function
   7896 
   7897 @item @emph{Syntax}:
   7898 @code{RESULT = IBITS(I, POS, LEN)}
   7899 
   7900 @item @emph{Arguments}:
   7901 @multitable @columnfractions .15 .70
   7902 @item @var{I}   @tab The type shall be @code{INTEGER}.
   7903 @item @var{POS} @tab The type shall be @code{INTEGER}.
   7904 @item @var{LEN} @tab The type shall be @code{INTEGER}.
   7905 @end multitable
   7906 
   7907 @item @emph{Return value}:
   7908 The return value is of type @code{INTEGER} and of the same kind as
   7909 @var{I}.
   7910 
   7911 @item @emph{Specific names}:
   7912 @multitable @columnfractions .20 .23 .20 .33
   7913 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   7914 @item @code{IBITS(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   7915 @item @code{BBITS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7916 @item @code{IIBITS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7917 @item @code{JIBITS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7918 @item @code{KIBITS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7919 @end multitable
   7920 
   7921 @item @emph{See also}:
   7922 @ref{BIT_SIZE}, @gol
   7923 @ref{IBCLR}, @gol
   7924 @ref{IBSET}, @gol
   7925 @ref{IAND}, @gol
   7926 @ref{IOR}, @gol
   7927 @ref{IEOR}
   7928 @end table
   7929 
   7930 
   7931 
   7932 @node IBSET
   7933 @section @code{IBSET} --- Set bit
   7934 @fnindex IBSET
   7935 @fnindex BBSET
   7936 @fnindex IIBSET
   7937 @fnindex JIBSET
   7938 @fnindex KIBSET
   7939 @cindex bits, set
   7940 
   7941 @table @asis
   7942 @item @emph{Description}:
   7943 @code{IBSET} returns the value of @var{I} with the bit at position
   7944 @var{POS} set to one.
   7945 
   7946 @item @emph{Standard}:
   7947 Fortran 90 and later, has overloads that are GNU extensions
   7948 
   7949 @item @emph{Class}:
   7950 Elemental function
   7951 
   7952 @item @emph{Syntax}:
   7953 @code{RESULT = IBSET(I, POS)}
   7954 
   7955 @item @emph{Arguments}:
   7956 @multitable @columnfractions .15 .70
   7957 @item @var{I} @tab The type shall be @code{INTEGER}.
   7958 @item @var{POS} @tab The type shall be @code{INTEGER}.
   7959 @end multitable
   7960 
   7961 @item @emph{Return value}:
   7962 The return value is of type @code{INTEGER} and of the same kind as
   7963 @var{I}.
   7964 
   7965 @item @emph{Specific names}:
   7966 @multitable @columnfractions .20 .23 .20 .33
   7967 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   7968 @item @code{IBSET(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   7969 @item @code{BBSET(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7970 @item @code{IIBSET(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7971 @item @code{JIBSET(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7972 @item @code{KIBSET(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7973 @end multitable
   7974 
   7975 @item @emph{See also}:
   7976 @ref{IBCLR}, @gol
   7977 @ref{IBITS}, @gol
   7978 @ref{IAND}, @gol
   7979 @ref{IOR}, @gol
   7980 @ref{IEOR}, @gol
   7981 @ref{MVBITS}
   7982 @end table
   7983 
   7984 
   7985 
   7986 @node ICHAR
   7987 @section @code{ICHAR} --- Character-to-integer conversion function
   7988 @fnindex ICHAR
   7989 @cindex conversion, to integer
   7990 
   7991 @table @asis
   7992 @item @emph{Description}:
   7993 @code{ICHAR(C)} returns the code for the character in the first character
   7994 position of @code{C} in the system's native character set.
   7995 The correspondence between characters and their codes is not necessarily
   7996 the same across different GNU Fortran implementations.
   7997 
   7998 @item @emph{Standard}:
   7999 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
   8000 
   8001 @item @emph{Class}:
   8002 Elemental function
   8003 
   8004 @item @emph{Syntax}:
   8005 @code{RESULT = ICHAR(C [, KIND])}
   8006 
   8007 @item @emph{Arguments}:
   8008 @multitable @columnfractions .15 .70
   8009 @item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
   8010 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   8011 expression indicating the kind parameter of the result.
   8012 @end multitable
   8013 
   8014 @item @emph{Return value}:
   8015 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   8016 @var{KIND} is absent, the return value is of default integer kind.
   8017 
   8018 @item @emph{Example}:
   8019 @smallexample
   8020 program test_ichar
   8021   integer i
   8022   i = ichar(' ')
   8023 end program test_ichar
   8024 @end smallexample
   8025 
   8026 @item @emph{Specific names}:
   8027 @multitable @columnfractions .20 .23 .20 .33
   8028 @headitem Name             @tab Argument             @tab Return type       @tab Standard
   8029 @item @code{ICHAR(C)}  @tab @code{CHARACTER C}   @tab @code{INTEGER(4)}    @tab Fortran 77 and later
   8030 @end multitable
   8031 
   8032 @item @emph{Note}:
   8033 No intrinsic exists to convert between a numeric value and a formatted
   8034 character string representation -- for instance, given the
   8035 @code{CHARACTER} value @code{'154'}, obtaining an @code{INTEGER} or
   8036 @code{REAL} value with the value 154, or vice versa. Instead, this
   8037 functionality is provided by internal-file I/O, as in the following
   8038 example:
   8039 @smallexample
   8040 program read_val
   8041   integer value
   8042   character(len=10) string, string2
   8043   string = '154'
   8044   
   8045   ! Convert a string to a numeric value
   8046   read (string,'(I10)') value
   8047   print *, value
   8048   
   8049   ! Convert a value to a formatted string
   8050   write (string2,'(I10)') value
   8051   print *, string2
   8052 end program read_val
   8053 @end smallexample
   8054 
   8055 @item @emph{See also}:
   8056 @ref{ACHAR}, @gol
   8057 @ref{CHAR}, @gol
   8058 @ref{IACHAR}
   8059 @end table
   8060 
   8061 
   8062 
   8063 @node IDATE
   8064 @section @code{IDATE} --- Get current local time subroutine (day/month/year) 
   8065 @fnindex IDATE
   8066 @cindex date, current
   8067 @cindex current date
   8068 
   8069 @table @asis
   8070 @item @emph{Description}:
   8071 @code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the  
   8072 current local time. The day (in the range 1-31), month (in the range 1-12), 
   8073 and year appear in elements 1, 2, and 3 of @var{VALUES}, respectively. 
   8074 The year has four significant digits.
   8075 
   8076 This intrinsic routine is provided for backwards compatibility with 
   8077 GNU Fortran 77.  In new code, programmers should consider the use of 
   8078 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   8079 standard.
   8080 
   8081 @item @emph{Standard}:
   8082 GNU extension
   8083 
   8084 @item @emph{Class}:
   8085 Subroutine
   8086 
   8087 @item @emph{Syntax}:
   8088 @code{CALL IDATE(VALUES)}
   8089 
   8090 @item @emph{Arguments}:
   8091 @multitable @columnfractions .15 .70
   8092 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)} and
   8093 the kind shall be the default integer kind.
   8094 @end multitable
   8095 
   8096 @item @emph{Return value}:
   8097 Does not return anything.
   8098 
   8099 @item @emph{Example}:
   8100 @smallexample
   8101 program test_idate
   8102   integer, dimension(3) :: tarray
   8103   call idate(tarray)
   8104   print *, tarray(1)
   8105   print *, tarray(2)
   8106   print *, tarray(3)
   8107 end program test_idate
   8108 @end smallexample
   8109 
   8110 @item @emph{See also}:
   8111 @ref{DATE_AND_TIME}
   8112 @end table
   8113 
   8114 
   8115 @node IEOR
   8116 @section @code{IEOR} --- Bitwise logical exclusive or
   8117 @fnindex IEOR
   8118 @fnindex BIEOR
   8119 @fnindex IIEOR
   8120 @fnindex JIEOR
   8121 @fnindex KIEOR
   8122 @cindex bitwise logical exclusive or
   8123 @cindex logical exclusive or, bitwise
   8124 
   8125 @table @asis
   8126 @item @emph{Description}:
   8127 @code{IEOR} returns the bitwise Boolean exclusive-OR of @var{I} and
   8128 @var{J}.
   8129 
   8130 @item @emph{Standard}:
   8131 Fortran 90 and later, with boz-literal-constant Fortran 2008 and later, has overloads that are GNU extensions
   8132 
   8133 @item @emph{Class}:
   8134 Elemental function
   8135 
   8136 @item @emph{Syntax}:
   8137 @code{RESULT = IEOR(I, J)}
   8138 
   8139 @item @emph{Arguments}:
   8140 @multitable @columnfractions .15 .70
   8141 @item @var{I} @tab The type shall be @code{INTEGER} or a boz-literal-constant.
   8142 @item @var{J} @tab The type shall be @code{INTEGER} with the same
   8143 kind type parameter as @var{I} or a boz-literal-constant.
   8144 @var{I} and @var{J} shall not both be boz-literal-constants.
   8145 @end multitable
   8146 
   8147 @item @emph{Return value}:
   8148 The return type is @code{INTEGER} with the kind type parameter of the
   8149 arguments.
   8150 A boz-literal-constant is converted to an @code{INTEGER} with the kind
   8151 type parameter of the other argument as-if a call to @ref{INT} occurred.
   8152 
   8153 @item @emph{Specific names}:
   8154 @multitable @columnfractions .20 .23 .20 .33
   8155 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   8156 @item @code{IEOR(A)}  @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   8157 @item @code{BIEOR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8158 @item @code{IIEOR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8159 @item @code{JIEOR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8160 @item @code{KIEOR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8161 @end multitable
   8162 
   8163 @item @emph{See also}:
   8164 @ref{IOR}, @gol
   8165 @ref{IAND}, @gol
   8166 @ref{IBITS}, @gol
   8167 @ref{IBSET}, @gol
   8168 @ref{IBCLR}, @gol
   8169 @ref{NOT}
   8170 @end table
   8171 
   8172 
   8173 
   8174 @node IERRNO
   8175 @section @code{IERRNO} --- Get the last system error number
   8176 @fnindex IERRNO
   8177 @cindex system, error handling
   8178 
   8179 @table @asis
   8180 @item @emph{Description}:
   8181 Returns the last system error number, as given by the C @code{errno}
   8182 variable.
   8183 
   8184 @item @emph{Standard}:
   8185 GNU extension
   8186 
   8187 @item @emph{Class}:
   8188 Function
   8189 
   8190 @item @emph{Syntax}:
   8191 @code{RESULT = IERRNO()}
   8192 
   8193 @item @emph{Arguments}:
   8194 None
   8195 
   8196 @item @emph{Return value}:
   8197 The return value is of type @code{INTEGER} and of the default integer
   8198 kind.
   8199 
   8200 @item @emph{See also}:
   8201 @ref{PERROR}
   8202 @end table
   8203 
   8204 
   8205 
   8206 @node IMAGE_INDEX
   8207 @section @code{IMAGE_INDEX} --- Function that converts a cosubscript to an image index
   8208 @fnindex IMAGE_INDEX
   8209 @cindex coarray, @code{IMAGE_INDEX}
   8210 @cindex images, cosubscript to image index conversion
   8211 
   8212 @table @asis
   8213 @item @emph{Description}:
   8214 Returns the image index belonging to a cosubscript.
   8215 
   8216 @item @emph{Standard}:
   8217 Fortran 2008 and later
   8218 
   8219 @item @emph{Class}:
   8220 Inquiry function.
   8221 
   8222 @item @emph{Syntax}:
   8223 @code{RESULT = IMAGE_INDEX(COARRAY, SUB)}
   8224 
   8225 @item @emph{Arguments}:
   8226 @multitable @columnfractions .15 .70
   8227 @item @var{COARRAY} @tab Coarray of any type.
   8228 @item @var{SUB}     @tab default integer rank-1 array of a size equal to
   8229 the corank of @var{COARRAY}.
   8230 @end multitable
   8231 
   8232 
   8233 @item @emph{Return value}:
   8234 Scalar default integer with the value of the image index which corresponds
   8235 to the cosubscripts. For invalid cosubscripts the result is zero.
   8236 
   8237 @item @emph{Example}:
   8238 @smallexample
   8239 INTEGER :: array[2,-1:4,8,*]
   8240 ! Writes  28 (or 0 if there are fewer than 28 images)
   8241 WRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])
   8242 @end smallexample
   8243 
   8244 @item @emph{See also}:
   8245 @ref{THIS_IMAGE}, @gol
   8246 @ref{NUM_IMAGES}
   8247 @end table
   8248 
   8249 
   8250 
   8251 @node INDEX intrinsic
   8252 @section @code{INDEX} --- Position of a substring within a string
   8253 @fnindex INDEX
   8254 @cindex substring position
   8255 @cindex string, find substring
   8256 
   8257 @table @asis
   8258 @item @emph{Description}:
   8259 Returns the position of the start of the first occurrence of string
   8260 @var{SUBSTRING} as a substring in @var{STRING}, counting from one.  If
   8261 @var{SUBSTRING} is not present in @var{STRING}, zero is returned.  If 
   8262 the @var{BACK} argument is present and true, the return value is the
   8263 start of the last occurrence rather than the first.
   8264 
   8265 @item @emph{Standard}:
   8266 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
   8267 
   8268 @item @emph{Class}:
   8269 Elemental function
   8270 
   8271 @item @emph{Syntax}:
   8272 @code{RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])}
   8273 
   8274 @item @emph{Arguments}:
   8275 @multitable @columnfractions .15 .70
   8276 @item @var{STRING} @tab Shall be a scalar @code{CHARACTER}, with
   8277 @code{INTENT(IN)}
   8278 @item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER}, with
   8279 @code{INTENT(IN)}
   8280 @item @var{BACK} @tab (Optional) Shall be a scalar @code{LOGICAL}, with
   8281 @code{INTENT(IN)}
   8282 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   8283 expression indicating the kind parameter of the result.
   8284 @end multitable
   8285 
   8286 @item @emph{Return value}:
   8287 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   8288 @var{KIND} is absent, the return value is of default integer kind.
   8289 
   8290 @item @emph{Specific names}:
   8291 @multitable @columnfractions .35 .15 .17 .30
   8292 @headitem Name                            @tab Argument           @tab Return type       @tab Standard
   8293 @item @code{INDEX(STRING,SUBSTRING)} @tab @code{CHARACTER}   @tab @code{INTEGER(4)} @tab Fortran 77 and later
   8294 @end multitable
   8295 
   8296 @item @emph{See also}:
   8297 @ref{SCAN}, @gol
   8298 @ref{VERIFY}
   8299 @end table
   8300 
   8301 
   8302 
   8303 @node INT
   8304 @section @code{INT} --- Convert to integer type
   8305 @fnindex INT
   8306 @fnindex IFIX
   8307 @fnindex IDINT
   8308 @cindex conversion, to integer
   8309 
   8310 @table @asis
   8311 @item @emph{Description}:
   8312 Convert to integer type
   8313 
   8314 @item @emph{Standard}:
   8315 Fortran 77 and later, with boz-literal-constant Fortran 2008 and later.
   8316 
   8317 @item @emph{Class}:
   8318 Elemental function
   8319 
   8320 @item @emph{Syntax}:
   8321 @code{RESULT = INT(A [, KIND))}
   8322 
   8323 @item @emph{Arguments}:
   8324 @multitable @columnfractions .15 .70
   8325 @item @var{A}    @tab Shall be of type @code{INTEGER},
   8326 @code{REAL}, or @code{COMPLEX} or a boz-literal-constant.
   8327 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   8328 expression indicating the kind parameter of the result.
   8329 @end multitable
   8330 
   8331 @item @emph{Return value}:
   8332 These functions return a @code{INTEGER} variable or array under 
   8333 the following rules: 
   8334 
   8335 @table @asis
   8336 @item (A)
   8337 If @var{A} is of type @code{INTEGER}, @code{INT(A) = A} 
   8338 @item (B)
   8339 If @var{A} is of type @code{REAL} and @math{|A| < 1}, @code{INT(A)}
   8340 equals @code{0}. If @math{|A| \geq 1}, then @code{INT(A)} is the integer
   8341 whose magnitude is the largest integer that does not exceed the magnitude
   8342 of @var{A} and whose sign is the same as the sign of @var{A}.
   8343 @item (C)
   8344 If @var{A} is of type @code{COMPLEX}, rule B is applied to the real part of @var{A}.
   8345 @end table
   8346 
   8347 @item @emph{Example}:
   8348 @smallexample
   8349 program test_int
   8350   integer :: i = 42
   8351   complex :: z = (-3.7, 1.0)
   8352   print *, int(i)
   8353   print *, int(z), int(z,8)
   8354 end program
   8355 @end smallexample
   8356 
   8357 @item @emph{Specific names}:
   8358 @multitable @columnfractions .20 .23 .20 .33
   8359 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   8360 @item @code{INT(A)}   @tab @code{REAL(4) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
   8361 @item @code{IFIX(A)}  @tab @code{REAL(4) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
   8362 @item @code{IDINT(A)} @tab @code{REAL(8) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
   8363 @end multitable
   8364 
   8365 @end table
   8366 
   8367 
   8368 @node INT2
   8369 @section @code{INT2} --- Convert to 16-bit integer type
   8370 @fnindex INT2
   8371 @cindex conversion, to integer
   8372 
   8373 @table @asis
   8374 @item @emph{Description}:
   8375 Convert to a @code{KIND=2} integer type. This is equivalent to the
   8376 standard @code{INT} intrinsic with an optional argument of
   8377 @code{KIND=2}, and is only included for backwards compatibility.
   8378 
   8379 @item @emph{Standard}:
   8380 GNU extension
   8381 
   8382 @item @emph{Class}:
   8383 Elemental function
   8384 
   8385 @item @emph{Syntax}:
   8386 @code{RESULT = INT2(A)}
   8387 
   8388 @item @emph{Arguments}:
   8389 @multitable @columnfractions .15 .70
   8390 @item @var{A}    @tab Shall be of type @code{INTEGER},
   8391 @code{REAL}, or @code{COMPLEX}.
   8392 @end multitable
   8393 
   8394 @item @emph{Return value}:
   8395 The return value is a @code{INTEGER(2)} variable.
   8396 
   8397 @item @emph{See also}:
   8398 @ref{INT}, @gol
   8399 @ref{INT8}
   8400 @end table
   8401 
   8402 
   8403 
   8404 @node INT8
   8405 @section @code{INT8} --- Convert to 64-bit integer type
   8406 @fnindex INT8
   8407 @cindex conversion, to integer
   8408 
   8409 @table @asis
   8410 @item @emph{Description}:
   8411 Convert to a @code{KIND=8} integer type. This is equivalent to the
   8412 standard @code{INT} intrinsic with an optional argument of
   8413 @code{KIND=8}, and is only included for backwards compatibility.
   8414 
   8415 @item @emph{Standard}:
   8416 GNU extension
   8417 
   8418 @item @emph{Class}:
   8419 Elemental function
   8420 
   8421 @item @emph{Syntax}:
   8422 @code{RESULT = INT8(A)}
   8423 
   8424 @item @emph{Arguments}:
   8425 @multitable @columnfractions .15 .70
   8426 @item @var{A}    @tab Shall be of type @code{INTEGER},
   8427 @code{REAL}, or @code{COMPLEX}.
   8428 @end multitable
   8429 
   8430 @item @emph{Return value}:
   8431 The return value is a @code{INTEGER(8)} variable.
   8432 
   8433 @item @emph{See also}:
   8434 @ref{INT}, @gol
   8435 @ref{INT2}
   8436 @end table
   8437 
   8438 
   8439 
   8440 @node IOR
   8441 @section @code{IOR} --- Bitwise logical or
   8442 @fnindex IOR
   8443 @fnindex BIOR
   8444 @fnindex IIOR
   8445 @fnindex JIOR
   8446 @fnindex KIOR
   8447 @cindex bitwise logical or
   8448 @cindex logical or, bitwise
   8449 
   8450 @table @asis
   8451 @item @emph{Description}:
   8452 @code{IOR} returns the bitwise Boolean inclusive-OR of @var{I} and
   8453 @var{J}.
   8454 
   8455 @item @emph{Standard}:
   8456 Fortran 90 and later, with boz-literal-constant Fortran 2008 and later, has overloads that are GNU extensions
   8457 
   8458 @item @emph{Class}:
   8459 Elemental function
   8460 
   8461 @item @emph{Syntax}:
   8462 @code{RESULT = IOR(I, J)}
   8463 
   8464 @item @emph{Arguments}:
   8465 @multitable @columnfractions .15 .70
   8466 @item @var{I} @tab The type shall be @code{INTEGER} or a boz-literal-constant.
   8467 @item @var{J} @tab The type shall be @code{INTEGER} with the same
   8468 kind type parameter as @var{I} or a boz-literal-constant.
   8469 @var{I} and @var{J} shall not both be boz-literal-constants.
   8470 @end multitable
   8471 
   8472 @item @emph{Return value}:
   8473 The return type is @code{INTEGER} with the kind type parameter of the
   8474 arguments.
   8475 A boz-literal-constant is converted to an @code{INTEGER} with the kind
   8476 type parameter of the other argument as-if a call to @ref{INT} occurred.
   8477 
   8478 @item @emph{Specific names}:
   8479 @multitable @columnfractions .20 .23 .20 .33
   8480 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   8481 @item @code{IOR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   8482 @item @code{BIOR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8483 @item @code{IIOR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8484 @item @code{JIOR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8485 @item @code{KIOR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8486 @end multitable
   8487 
   8488 @item @emph{See also}:
   8489 @ref{IEOR}, @gol
   8490 @ref{IAND}, @gol
   8491 @ref{IBITS}, @gol
   8492 @ref{IBSET}, @gol
   8493 @ref{IBCLR}, @gol
   8494 @ref{NOT}
   8495 @end table
   8496 
   8497 
   8498 
   8499 @node IPARITY
   8500 @section @code{IPARITY} --- Bitwise XOR of array elements
   8501 @fnindex IPARITY
   8502 @cindex array, parity
   8503 @cindex array, XOR
   8504 @cindex bits, XOR of array elements
   8505 
   8506 @table @asis
   8507 @item @emph{Description}:
   8508 Reduces with bitwise XOR (exclusive or) the elements of @var{ARRAY} along
   8509 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
   8510 
   8511 @item @emph{Standard}:
   8512 Fortran 2008 and later
   8513 
   8514 @item @emph{Class}:
   8515 Transformational function
   8516 
   8517 @item @emph{Syntax}:
   8518 @multitable @columnfractions .80
   8519 @item @code{RESULT = IPARITY(ARRAY[, MASK])}
   8520 @item @code{RESULT = IPARITY(ARRAY, DIM[, MASK])}
   8521 @end multitable
   8522 
   8523 @item @emph{Arguments}:
   8524 @multitable @columnfractions .15 .70
   8525 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
   8526 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   8527 @code{INTEGER} with a value in the range from 1 to n, where n 
   8528 equals the rank of @var{ARRAY}.
   8529 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   8530 and either be a scalar or an array of the same shape as @var{ARRAY}.
   8531 @end multitable
   8532 
   8533 @item @emph{Return value}:
   8534 The result is of the same type as @var{ARRAY}.
   8535 
   8536 If @var{DIM} is absent, a scalar with the bitwise XOR of all elements in
   8537 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
   8538 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
   8539 dimension @var{DIM} dropped is returned.
   8540 
   8541 @item @emph{Example}:
   8542 @smallexample
   8543 PROGRAM test_iparity
   8544   INTEGER(1) :: a(2)
   8545 
   8546   a(1) = int(b'00100100', 1)
   8547   a(2) = int(b'01101010', 1)
   8548 
   8549   ! prints 01001110
   8550   PRINT '(b8.8)', IPARITY(a)
   8551 END PROGRAM
   8552 @end smallexample
   8553 
   8554 @item @emph{See also}:
   8555 @ref{IANY}, @gol
   8556 @ref{IALL}, @gol
   8557 @ref{IEOR}, @gol
   8558 @ref{PARITY}
   8559 @end table
   8560 
   8561 
   8562 
   8563 @node IRAND
   8564 @section @code{IRAND} --- Integer pseudo-random number
   8565 @fnindex IRAND
   8566 @cindex random number generation
   8567 
   8568 @table @asis
   8569 @item @emph{Description}:
   8570 @code{IRAND(FLAG)} returns a pseudo-random number from a uniform
   8571 distribution between 0 and a system-dependent limit (which is in most
   8572 cases 2147483647). If @var{FLAG} is 0, the next number
   8573 in the current sequence is returned; if @var{FLAG} is 1, the generator
   8574 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
   8575 it is used as a new seed with @code{SRAND}.
   8576 
   8577 This intrinsic routine is provided for backwards compatibility with
   8578 GNU Fortran 77. It implements a simple modulo generator as provided 
   8579 by @command{g77}. For new code, one should consider the use of 
   8580 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
   8581 
   8582 @item @emph{Standard}:
   8583 GNU extension
   8584 
   8585 @item @emph{Class}:
   8586 Function
   8587 
   8588 @item @emph{Syntax}:
   8589 @code{RESULT = IRAND(I)}
   8590 
   8591 @item @emph{Arguments}:
   8592 @multitable @columnfractions .15 .70
   8593 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
   8594 @end multitable
   8595 
   8596 @item @emph{Return value}:
   8597 The return value is of @code{INTEGER(kind=4)} type.
   8598 
   8599 @item @emph{Example}:
   8600 @smallexample
   8601 program test_irand
   8602   integer,parameter :: seed = 86456
   8603   
   8604   call srand(seed)
   8605   print *, irand(), irand(), irand(), irand()
   8606   print *, irand(seed), irand(), irand(), irand()
   8607 end program test_irand
   8608 @end smallexample
   8609 
   8610 @end table
   8611 
   8612 
   8613 
   8614 @node IS_CONTIGUOUS
   8615 @section @code{IS_CONTIGUOUS} --- Test whether an array is contiguous
   8616 @fnindex IS_IOSTAT_EOR
   8617 @cindex array, contiguity
   8618 
   8619 @table @asis
   8620 @item @emph{Description}:
   8621 @code{IS_CONTIGUOUS} tests whether an array is contiguous.
   8622 
   8623 @item @emph{Standard}:
   8624 Fortran 2008 and later
   8625 
   8626 @item @emph{Class}:
   8627 Inquiry function
   8628 
   8629 @item @emph{Syntax}:
   8630 @code{RESULT = IS_CONTIGUOUS(ARRAY)}
   8631 
   8632 @item @emph{Arguments}:
   8633 @multitable @columnfractions .15 .70
   8634 @item @var{ARRAY} @tab Shall be an array of any type.
   8635 @end multitable
   8636 
   8637 @item @emph{Return value}:
   8638 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
   8639 @var{ARRAY} is contiguous and false otherwise.
   8640 
   8641 @item @emph{Example}:
   8642 @smallexample
   8643 program test
   8644   integer :: a(10)
   8645   a = [1,2,3,4,5,6,7,8,9,10]
   8646   call sub (a)      ! every element, is contiguous
   8647   call sub (a(::2)) ! every other element, is noncontiguous
   8648 contains
   8649   subroutine sub (x)
   8650     integer :: x(:)
   8651     if (is_contiguous (x)) then
   8652       write (*,*) 'X is contiguous'
   8653     else
   8654       write (*,*) 'X is not contiguous'
   8655     end if
   8656   end subroutine sub
   8657 end program test
   8658 @end smallexample
   8659 @end table
   8660 
   8661 
   8662 
   8663 @node IS_IOSTAT_END
   8664 @section @code{IS_IOSTAT_END} --- Test for end-of-file value
   8665 @fnindex IS_IOSTAT_END
   8666 @cindex @code{IOSTAT}, end of file
   8667 
   8668 @table @asis
   8669 @item @emph{Description}:
   8670 @code{IS_IOSTAT_END} tests whether an variable has the value of the I/O
   8671 status ``end of file''. The function is equivalent to comparing the variable
   8672 with the @code{IOSTAT_END} parameter of the intrinsic module
   8673 @code{ISO_FORTRAN_ENV}.
   8674 
   8675 @item @emph{Standard}:
   8676 Fortran 2003 and later
   8677 
   8678 @item @emph{Class}:
   8679 Elemental function
   8680 
   8681 @item @emph{Syntax}:
   8682 @code{RESULT = IS_IOSTAT_END(I)}
   8683 
   8684 @item @emph{Arguments}:
   8685 @multitable @columnfractions .15 .70
   8686 @item @var{I} @tab Shall be of the type @code{INTEGER}.
   8687 @end multitable
   8688 
   8689 @item @emph{Return value}:
   8690 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
   8691 @var{I} has the value which indicates an end of file condition for
   8692 @code{IOSTAT=} specifiers, and is @code{.FALSE.} otherwise.
   8693 
   8694 @item @emph{Example}:
   8695 @smallexample
   8696 PROGRAM iostat
   8697   IMPLICIT NONE
   8698   INTEGER :: stat, i
   8699   OPEN(88, FILE='test.dat')
   8700   READ(88, *, IOSTAT=stat) i
   8701   IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'
   8702 END PROGRAM
   8703 @end smallexample
   8704 @end table
   8705 
   8706 
   8707 
   8708 @node IS_IOSTAT_EOR
   8709 @section @code{IS_IOSTAT_EOR} --- Test for end-of-record value
   8710 @fnindex IS_IOSTAT_EOR
   8711 @cindex @code{IOSTAT}, end of record
   8712 
   8713 @table @asis
   8714 @item @emph{Description}:
   8715 @code{IS_IOSTAT_EOR} tests whether an variable has the value of the I/O
   8716 status ``end of record''. The function is equivalent to comparing the
   8717 variable with the @code{IOSTAT_EOR} parameter of the intrinsic module
   8718 @code{ISO_FORTRAN_ENV}.
   8719 
   8720 @item @emph{Standard}:
   8721 Fortran 2003 and later
   8722 
   8723 @item @emph{Class}:
   8724 Elemental function
   8725 
   8726 @item @emph{Syntax}:
   8727 @code{RESULT = IS_IOSTAT_EOR(I)}
   8728 
   8729 @item @emph{Arguments}:
   8730 @multitable @columnfractions .15 .70
   8731 @item @var{I} @tab Shall be of the type @code{INTEGER}.
   8732 @end multitable
   8733 
   8734 @item @emph{Return value}:
   8735 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
   8736 @var{I} has the value which indicates an end of file condition for
   8737 @code{IOSTAT=} specifiers, and is @code{.FALSE.} otherwise.
   8738 
   8739 @item @emph{Example}:
   8740 @smallexample
   8741 PROGRAM iostat
   8742   IMPLICIT NONE
   8743   INTEGER :: stat, i(50)
   8744   OPEN(88, FILE='test.dat', FORM='UNFORMATTED')
   8745   READ(88, IOSTAT=stat) i
   8746   IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'
   8747 END PROGRAM
   8748 @end smallexample
   8749 @end table
   8750 
   8751 
   8752 @node ISATTY
   8753 @section @code{ISATTY} --- Whether a unit is a terminal device.
   8754 @fnindex ISATTY
   8755 @cindex system, terminal
   8756 
   8757 @table @asis
   8758 @item @emph{Description}:
   8759 Determine whether a unit is connected to a terminal device.
   8760 
   8761 @item @emph{Standard}:
   8762 GNU extension
   8763 
   8764 @item @emph{Class}:
   8765 Function
   8766 
   8767 @item @emph{Syntax}:
   8768 @code{RESULT = ISATTY(UNIT)}
   8769 
   8770 @item @emph{Arguments}:
   8771 @multitable @columnfractions .15 .70
   8772 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
   8773 @end multitable
   8774 
   8775 @item @emph{Return value}:
   8776 Returns @code{.TRUE.} if the @var{UNIT} is connected to a terminal 
   8777 device, @code{.FALSE.} otherwise.
   8778 
   8779 @item @emph{Example}:
   8780 @smallexample
   8781 PROGRAM test_isatty
   8782   INTEGER(kind=1) :: unit
   8783   DO unit = 1, 10
   8784     write(*,*) isatty(unit=unit)
   8785   END DO
   8786 END PROGRAM
   8787 @end smallexample
   8788 @item @emph{See also}:
   8789 @ref{TTYNAM}
   8790 @end table
   8791 
   8792 
   8793 
   8794 @node ISHFT
   8795 @section @code{ISHFT} --- Shift bits
   8796 @fnindex ISHFT
   8797 @fnindex BSHFT
   8798 @fnindex IISHFT
   8799 @fnindex JISHFT
   8800 @fnindex KISHFT
   8801 @cindex bits, shift
   8802 
   8803 @table @asis
   8804 @item @emph{Description}:
   8805 @code{ISHFT} returns a value corresponding to @var{I} with all of the
   8806 bits shifted @var{SHIFT} places.  A value of @var{SHIFT} greater than
   8807 zero corresponds to a left shift, a value of zero corresponds to no
   8808 shift, and a value less than zero corresponds to a right shift.  If the
   8809 absolute value of @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the
   8810 value is undefined.  Bits shifted out from the left end or right end are
   8811 lost; zeros are shifted in from the opposite end.
   8812 
   8813 @item @emph{Standard}:
   8814 Fortran 90 and later, has overloads that are GNU extensions
   8815 
   8816 @item @emph{Class}:
   8817 Elemental function
   8818 
   8819 @item @emph{Syntax}:
   8820 @code{RESULT = ISHFT(I, SHIFT)}
   8821 
   8822 @item @emph{Arguments}:
   8823 @multitable @columnfractions .15 .70
   8824 @item @var{I} @tab The type shall be @code{INTEGER}.
   8825 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   8826 @end multitable
   8827 
   8828 @item @emph{Return value}:
   8829 The return value is of type @code{INTEGER} and of the same kind as
   8830 @var{I}.
   8831 
   8832 @item @emph{Specific names}:
   8833 @multitable @columnfractions .20 .23 .20 .33
   8834 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   8835 @item @code{ISHFT(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   8836 @item @code{BSHFT(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8837 @item @code{IISHFT(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8838 @item @code{JISHFT(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8839 @item @code{KISHFT(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8840 @end multitable
   8841 
   8842 @item @emph{See also}:
   8843 @ref{ISHFTC}
   8844 @end table
   8845 
   8846 
   8847 
   8848 @node ISHFTC
   8849 @section @code{ISHFTC} --- Shift bits circularly
   8850 @fnindex ISHFTC
   8851 @fnindex BSHFTC
   8852 @fnindex IISHFTC
   8853 @fnindex JISHFTC
   8854 @fnindex KISHFTC
   8855 @cindex bits, shift circular
   8856 
   8857 @table @asis
   8858 @item @emph{Description}:
   8859 @code{ISHFTC} returns a value corresponding to @var{I} with the
   8860 rightmost @var{SIZE} bits shifted circularly @var{SHIFT} places; that
   8861 is, bits shifted out one end are shifted into the opposite end.  A value
   8862 of @var{SHIFT} greater than zero corresponds to a left shift, a value of
   8863 zero corresponds to no shift, and a value less than zero corresponds to
   8864 a right shift.  The absolute value of @var{SHIFT} must be less than
   8865 @var{SIZE}.  If the @var{SIZE} argument is omitted, it is taken to be
   8866 equivalent to @code{BIT_SIZE(I)}.
   8867 
   8868 @item @emph{Standard}:
   8869 Fortran 90 and later, has overloads that are GNU extensions
   8870 
   8871 @item @emph{Class}:
   8872 Elemental function
   8873 
   8874 @item @emph{Syntax}:
   8875 @code{RESULT = ISHFTC(I, SHIFT [, SIZE])}
   8876 
   8877 @item @emph{Arguments}:
   8878 @multitable @columnfractions .15 .70
   8879 @item @var{I} @tab The type shall be @code{INTEGER}.
   8880 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   8881 @item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER};
   8882 the value must be greater than zero and less than or equal to
   8883 @code{BIT_SIZE(I)}.
   8884 @end multitable
   8885 
   8886 @item @emph{Return value}:
   8887 The return value is of type @code{INTEGER} and of the same kind as
   8888 @var{I}.
   8889 
   8890 @item @emph{Specific names}:
   8891 @multitable @columnfractions .20 .23 .20 .33
   8892 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   8893 @item @code{ISHFTC(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   8894 @item @code{BSHFTC(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8895 @item @code{IISHFTC(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8896 @item @code{JISHFTC(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8897 @item @code{KISHFTC(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8898 @end multitable
   8899 
   8900 @item @emph{See also}:
   8901 @ref{ISHFT}
   8902 @end table
   8903 
   8904 
   8905 
   8906 @node ISNAN
   8907 @section @code{ISNAN} --- Test for a NaN
   8908 @fnindex ISNAN
   8909 @cindex IEEE, ISNAN
   8910 
   8911 @table @asis
   8912 @item @emph{Description}:
   8913 @code{ISNAN} tests whether a floating-point value is an IEEE
   8914 Not-a-Number (NaN).
   8915 @item @emph{Standard}:
   8916 GNU extension
   8917 
   8918 @item @emph{Class}:
   8919 Elemental function
   8920 
   8921 @item @emph{Syntax}:
   8922 @code{ISNAN(X)}
   8923 
   8924 @item @emph{Arguments}:
   8925 @multitable @columnfractions .15 .70
   8926 @item @var{X} @tab Variable of the type @code{REAL}.
   8927 
   8928 @end multitable
   8929 
   8930 @item @emph{Return value}:
   8931 Returns a default-kind @code{LOGICAL}. The returned value is @code{TRUE}
   8932 if @var{X} is a NaN and @code{FALSE} otherwise.
   8933 
   8934 @item @emph{Example}:
   8935 @smallexample
   8936 program test_nan
   8937   implicit none
   8938   real :: x
   8939   x = -1.0
   8940   x = sqrt(x)
   8941   if (isnan(x)) stop '"x" is a NaN'
   8942 end program test_nan
   8943 @end smallexample
   8944 @end table
   8945 
   8946 
   8947 
   8948 @node ITIME
   8949 @section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds) 
   8950 @fnindex ITIME
   8951 @cindex time, current
   8952 @cindex current time
   8953 
   8954 @table @asis
   8955 @item @emph{Description}:
   8956 @code{ITIME(VALUES)} Fills @var{VALUES} with the numerical values at the  
   8957 current local time. The hour (in the range 1-24), minute (in the range 1-60), 
   8958 and seconds (in the range 1-60) appear in elements 1, 2, and 3 of @var{VALUES}, 
   8959 respectively.
   8960 
   8961 This intrinsic routine is provided for backwards compatibility with 
   8962 GNU Fortran 77.  In new code, programmers should consider the use of 
   8963 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   8964 standard.
   8965 
   8966 @item @emph{Standard}:
   8967 GNU extension
   8968 
   8969 @item @emph{Class}:
   8970 Subroutine
   8971 
   8972 @item @emph{Syntax}:
   8973 @code{CALL ITIME(VALUES)}
   8974 
   8975 @item @emph{Arguments}:
   8976 @multitable @columnfractions .15 .70
   8977 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)}
   8978 and the kind shall be the default integer kind.
   8979 @end multitable
   8980 
   8981 @item @emph{Return value}:
   8982 Does not return anything.
   8983 
   8984 
   8985 @item @emph{Example}:
   8986 @smallexample
   8987 program test_itime
   8988   integer, dimension(3) :: tarray
   8989   call itime(tarray)
   8990   print *, tarray(1)
   8991   print *, tarray(2)
   8992   print *, tarray(3)
   8993 end program test_itime
   8994 @end smallexample
   8995 
   8996 @item @emph{See also}:
   8997 @ref{DATE_AND_TIME}
   8998 @end table
   8999 
   9000 
   9001 
   9002 @node KILL
   9003 @section @code{KILL} --- Send a signal to a process
   9004 @fnindex KILL
   9005 
   9006 @table @asis
   9007 @item @emph{Description}:
   9008 Sends the signal specified by @var{SIG} to the process @var{PID}.
   9009 See @code{kill(2)}.
   9010 
   9011 This intrinsic is provided in both subroutine and function forms;
   9012 however, only one form can be used in any given program unit.
   9013 @item @emph{Standard}:
   9014 GNU extension
   9015 
   9016 @item @emph{Standard}:
   9017 GNU extension
   9018 
   9019 @item @emph{Class}:
   9020 Subroutine, function
   9021 
   9022 @item @emph{Syntax}:
   9023 @multitable @columnfractions .80
   9024 @item @code{CALL KILL(PID, SIG [, STATUS])}
   9025 @item @code{STATUS = KILL(PID, SIG)}
   9026 @end multitable
   9027 
   9028 @item @emph{Arguments}:
   9029 @multitable @columnfractions .15 .70
   9030 @item @var{PID} @tab Shall be a scalar @code{INTEGER} with @code{INTENT(IN)}.
   9031 @item @var{SIG} @tab Shall be a scalar @code{INTEGER} with @code{INTENT(IN)}.
   9032 @item @var{STATUS} @tab [Subroutine](Optional)
   9033 Shall be a scalar @code{INTEGER}.
   9034 Returns 0 on success; otherwise a system-specific error code is returned.
   9035 @item @var{STATUS} @tab [Function] The kind type parameter is that of
   9036 @code{pid}.
   9037 Returns 0 on success; otherwise a system-specific error code is returned.
   9038 @end multitable
   9039 
   9040 @item @emph{See also}:
   9041 @ref{ABORT}, @gol
   9042 @ref{EXIT}
   9043 @end table
   9044 
   9045 
   9046 @node KIND
   9047 @section @code{KIND} --- Kind of an entity
   9048 @fnindex KIND
   9049 @cindex kind
   9050 
   9051 @table @asis
   9052 @item @emph{Description}:
   9053 @code{KIND(X)} returns the kind value of the entity @var{X}.
   9054 
   9055 @item @emph{Standard}:
   9056 Fortran 95 and later
   9057 
   9058 @item @emph{Class}:
   9059 Inquiry function
   9060 
   9061 @item @emph{Syntax}:
   9062 @code{K = KIND(X)}
   9063 
   9064 @item @emph{Arguments}:
   9065 @multitable @columnfractions .15 .70
   9066 @item @var{X} @tab Shall be of type @code{LOGICAL}, @code{INTEGER},
   9067 @code{REAL}, @code{COMPLEX} or @code{CHARACTER}.  It may be scalar or
   9068 array valued.
   9069 @end multitable
   9070 
   9071 @item @emph{Return value}:
   9072 The return value is a scalar of type @code{INTEGER} and of the default
   9073 integer kind.
   9074 
   9075 @item @emph{Example}:
   9076 @smallexample
   9077 program test_kind
   9078   integer,parameter :: kc = kind(' ')
   9079   integer,parameter :: kl = kind(.true.)
   9080 
   9081   print *, "The default character kind is ", kc
   9082   print *, "The default logical kind is ", kl
   9083 end program test_kind
   9084 @end smallexample
   9085 
   9086 @end table
   9087 
   9088 
   9089 
   9090 @node LBOUND
   9091 @section @code{LBOUND} --- Lower dimension bounds of an array
   9092 @fnindex LBOUND
   9093 @cindex array, lower bound
   9094 
   9095 @table @asis
   9096 @item @emph{Description}:
   9097 Returns the lower bounds of an array, or a single lower bound
   9098 along the @var{DIM} dimension.
   9099 @item @emph{Standard}:
   9100 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   9101 
   9102 @item @emph{Class}:
   9103 Inquiry function
   9104 
   9105 @item @emph{Syntax}:
   9106 @code{RESULT = LBOUND(ARRAY [, DIM [, KIND]])}
   9107 
   9108 @item @emph{Arguments}:
   9109 @multitable @columnfractions .15 .70
   9110 @item @var{ARRAY} @tab Shall be an array, of any type.
   9111 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   9112 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9113 expression indicating the kind parameter of the result.
   9114 @end multitable
   9115 
   9116 @item @emph{Return value}:
   9117 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   9118 @var{KIND} is absent, the return value is of default integer kind.
   9119 If @var{DIM} is absent, the result is an array of the lower bounds of
   9120 @var{ARRAY}.  If @var{DIM} is present, the result is a scalar
   9121 corresponding to the lower bound of the array along that dimension.  If
   9122 @var{ARRAY} is an expression rather than a whole array or array
   9123 structure component, or if it has a zero extent along the relevant
   9124 dimension, the lower bound is taken to be 1.
   9125 
   9126 @item @emph{See also}:
   9127 @ref{UBOUND}, @gol
   9128 @ref{LCOBOUND}
   9129 @end table
   9130 
   9131 
   9132 
   9133 @node LCOBOUND
   9134 @section @code{LCOBOUND} --- Lower codimension bounds of an array
   9135 @fnindex LCOBOUND
   9136 @cindex coarray, lower bound
   9137 
   9138 @table @asis
   9139 @item @emph{Description}:
   9140 Returns the lower bounds of a coarray, or a single lower cobound
   9141 along the @var{DIM} codimension.
   9142 @item @emph{Standard}:
   9143 Fortran 2008 and later
   9144 
   9145 @item @emph{Class}:
   9146 Inquiry function
   9147 
   9148 @item @emph{Syntax}:
   9149 @code{RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])}
   9150 
   9151 @item @emph{Arguments}:
   9152 @multitable @columnfractions .15 .70
   9153 @item @var{ARRAY} @tab Shall be an coarray, of any type.
   9154 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   9155 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9156 expression indicating the kind parameter of the result.
   9157 @end multitable
   9158 
   9159 @item @emph{Return value}:
   9160 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   9161 @var{KIND} is absent, the return value is of default integer kind.
   9162 If @var{DIM} is absent, the result is an array of the lower cobounds of
   9163 @var{COARRAY}.  If @var{DIM} is present, the result is a scalar
   9164 corresponding to the lower cobound of the array along that codimension.
   9165 
   9166 @item @emph{See also}:
   9167 @ref{UCOBOUND}, @gol
   9168 @ref{LBOUND}
   9169 @end table
   9170 
   9171 
   9172 
   9173 @node LEADZ
   9174 @section @code{LEADZ} --- Number of leading zero bits of an integer
   9175 @fnindex LEADZ
   9176 @cindex zero bits
   9177 
   9178 @table @asis
   9179 @item @emph{Description}:
   9180 @code{LEADZ} returns the number of leading zero bits of an integer.
   9181 
   9182 @item @emph{Standard}:
   9183 Fortran 2008 and later
   9184 
   9185 @item @emph{Class}:
   9186 Elemental function
   9187 
   9188 @item @emph{Syntax}:
   9189 @code{RESULT = LEADZ(I)}
   9190 
   9191 @item @emph{Arguments}:
   9192 @multitable @columnfractions .15 .70
   9193 @item @var{I} @tab Shall be of type @code{INTEGER}.
   9194 @end multitable
   9195 
   9196 @item @emph{Return value}:
   9197 The type of the return value is the default @code{INTEGER}.
   9198 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
   9199 
   9200 @item @emph{Example}:
   9201 @smallexample
   9202 PROGRAM test_leadz
   9203   WRITE (*,*) BIT_SIZE(1)  ! prints 32
   9204   WRITE (*,*) LEADZ(1)     ! prints 31
   9205 END PROGRAM
   9206 @end smallexample
   9207 
   9208 @item @emph{See also}:
   9209 @ref{BIT_SIZE}, @gol
   9210 @ref{TRAILZ}, @gol
   9211 @ref{POPCNT}, @gol
   9212 @ref{POPPAR}
   9213 @end table
   9214 
   9215 
   9216 
   9217 @node LEN
   9218 @section @code{LEN} --- Length of a character entity
   9219 @fnindex LEN
   9220 @cindex string, length
   9221 
   9222 @table @asis
   9223 @item @emph{Description}:
   9224 Returns the length of a character string.  If @var{STRING} is an array,
   9225 the length of an element of @var{STRING} is returned.  Note that
   9226 @var{STRING} need not be defined when this intrinsic is invoked, since
   9227 only the length, not the content, of @var{STRING} is needed.
   9228 
   9229 @item @emph{Standard}:
   9230 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
   9231 
   9232 @item @emph{Class}:
   9233 Inquiry function
   9234 
   9235 @item @emph{Syntax}:
   9236 @code{L = LEN(STRING [, KIND])}
   9237 
   9238 @item @emph{Arguments}:
   9239 @multitable @columnfractions .15 .70
   9240 @item @var{STRING} @tab Shall be a scalar or array of type
   9241 @code{CHARACTER}, with @code{INTENT(IN)}
   9242 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9243 expression indicating the kind parameter of the result.
   9244 @end multitable
   9245 
   9246 @item @emph{Return value}:
   9247 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   9248 @var{KIND} is absent, the return value is of default integer kind.
   9249 
   9250 
   9251 @item @emph{Specific names}:
   9252 @multitable @columnfractions .20 .23 .20 .33
   9253 @headitem Name               @tab Argument          @tab Return type       @tab Standard
   9254 @item @code{LEN(STRING)} @tab @code{CHARACTER}  @tab @code{INTEGER}    @tab Fortran 77 and later
   9255 @end multitable
   9256 
   9257 
   9258 @item @emph{See also}:
   9259 @ref{LEN_TRIM}, @gol
   9260 @ref{ADJUSTL}, @gol
   9261 @ref{ADJUSTR}
   9262 @end table
   9263 
   9264 
   9265 
   9266 @node LEN_TRIM
   9267 @section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters
   9268 @fnindex LEN_TRIM
   9269 @cindex string, length, without trailing whitespace
   9270 
   9271 @table @asis
   9272 @item @emph{Description}:
   9273 Returns the length of a character string, ignoring any trailing blanks.
   9274 
   9275 @item @emph{Standard}:
   9276 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   9277 
   9278 @item @emph{Class}:
   9279 Elemental function
   9280 
   9281 @item @emph{Syntax}:
   9282 @code{RESULT = LEN_TRIM(STRING [, KIND])}
   9283 
   9284 @item @emph{Arguments}:
   9285 @multitable @columnfractions .15 .70
   9286 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
   9287 with @code{INTENT(IN)}
   9288 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9289 expression indicating the kind parameter of the result.
   9290 @end multitable
   9291 
   9292 @item @emph{Return value}:
   9293 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   9294 @var{KIND} is absent, the return value is of default integer kind.
   9295 
   9296 @item @emph{See also}:
   9297 @ref{LEN}, @gol
   9298 @ref{ADJUSTL}, @gol
   9299 @ref{ADJUSTR}
   9300 @end table
   9301 
   9302 
   9303 
   9304 @node LGE
   9305 @section @code{LGE} --- Lexical greater than or equal
   9306 @fnindex LGE
   9307 @cindex lexical comparison of strings
   9308 @cindex string, comparison
   9309 
   9310 @table @asis
   9311 @item @emph{Description}:
   9312 Determines whether one string is lexically greater than or equal to
   9313 another string, where the two strings are interpreted as containing
   9314 ASCII character codes.  If the String A and String B are not the same
   9315 length, the shorter is compared as if spaces were appended to it to form
   9316 a value that has the same length as the longer.
   9317 
   9318 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9319 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9320 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9321 that the latter use the processor's character ordering (which is not
   9322 ASCII on some targets), whereas the former always use the ASCII
   9323 ordering.
   9324 
   9325 @item @emph{Standard}:
   9326 Fortran 77 and later
   9327 
   9328 @item @emph{Class}:
   9329 Elemental function
   9330 
   9331 @item @emph{Syntax}:
   9332 @code{RESULT = LGE(STRING_A, STRING_B)}
   9333 
   9334 @item @emph{Arguments}:
   9335 @multitable @columnfractions .15 .70
   9336 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9337 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9338 @end multitable
   9339 
   9340 @item @emph{Return value}:
   9341 Returns @code{.TRUE.} if @code{STRING_A >= STRING_B}, and @code{.FALSE.}
   9342 otherwise, based on the ASCII ordering.
   9343 
   9344 @item @emph{Specific names}:
   9345 @multitable @columnfractions .34 .16 .17 .30
   9346 @headitem Name                           @tab Argument          @tab Return type       @tab Standard
   9347 @item @code{LGE(STRING_A,STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9348 @end multitable
   9349 
   9350 @item @emph{See also}:
   9351 @ref{LGT}, @gol
   9352 @ref{LLE}, @gol
   9353 @ref{LLT}
   9354 @end table
   9355 
   9356 
   9357 
   9358 @node LGT
   9359 @section @code{LGT} --- Lexical greater than
   9360 @fnindex LGT
   9361 @cindex lexical comparison of strings
   9362 @cindex string, comparison
   9363 
   9364 @table @asis
   9365 @item @emph{Description}:
   9366 Determines whether one string is lexically greater than another string,
   9367 where the two strings are interpreted as containing ASCII character
   9368 codes.  If the String A and String B are not the same length, the
   9369 shorter is compared as if spaces were appended to it to form a value
   9370 that has the same length as the longer.
   9371 
   9372 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9373 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9374 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9375 that the latter use the processor's character ordering (which is not
   9376 ASCII on some targets), whereas the former always use the ASCII
   9377 ordering.
   9378 
   9379 @item @emph{Standard}:
   9380 Fortran 77 and later
   9381 
   9382 @item @emph{Class}:
   9383 Elemental function
   9384 
   9385 @item @emph{Syntax}:
   9386 @code{RESULT = LGT(STRING_A, STRING_B)}
   9387 
   9388 @item @emph{Arguments}:
   9389 @multitable @columnfractions .15 .70
   9390 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9391 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9392 @end multitable
   9393 
   9394 @item @emph{Return value}:
   9395 Returns @code{.TRUE.} if @code{STRING_A > STRING_B}, and @code{.FALSE.}
   9396 otherwise, based on the ASCII ordering.
   9397 
   9398 @item @emph{Specific names}:
   9399 @multitable @columnfractions .34 .16 .17 .30
   9400 @headitem Name                           @tab Argument          @tab Return type       @tab Standard
   9401 @item @code{LGT(STRING_A,STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9402 @end multitable
   9403 
   9404 @item @emph{See also}:
   9405 @ref{LGE}, @gol
   9406 @ref{LLE}, @gol
   9407 @ref{LLT}
   9408 @end table
   9409 
   9410 
   9411 
   9412 @node LINK
   9413 @section @code{LINK} --- Create a hard link
   9414 @fnindex LINK
   9415 @cindex file system, create link
   9416 @cindex file system, hard link
   9417 
   9418 @table @asis
   9419 @item @emph{Description}:
   9420 Makes a (hard) link from file @var{PATH1} to @var{PATH2}. A null
   9421 character (@code{CHAR(0)}) can be used to mark the end of the names in
   9422 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
   9423 names are ignored.  If the @var{STATUS} argument is supplied, it
   9424 contains 0 on success or a nonzero error code upon return; see
   9425 @code{link(2)}.
   9426 
   9427 This intrinsic is provided in both subroutine and function forms;
   9428 however, only one form can be used in any given program unit.
   9429 
   9430 @item @emph{Standard}:
   9431 GNU extension
   9432 
   9433 @item @emph{Class}:
   9434 Subroutine, function
   9435 
   9436 @item @emph{Syntax}:
   9437 @multitable @columnfractions .80
   9438 @item @code{CALL LINK(PATH1, PATH2 [, STATUS])}
   9439 @item @code{STATUS = LINK(PATH1, PATH2)}
   9440 @end multitable
   9441 
   9442 @item @emph{Arguments}:
   9443 @multitable @columnfractions .15 .70
   9444 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
   9445 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
   9446 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   9447 @end multitable
   9448 
   9449 @item @emph{See also}:
   9450 @ref{SYMLNK}, @gol
   9451 @ref{UNLINK}
   9452 @end table
   9453 
   9454 
   9455 
   9456 @node LLE
   9457 @section @code{LLE} --- Lexical less than or equal
   9458 @fnindex LLE
   9459 @cindex lexical comparison of strings
   9460 @cindex string, comparison
   9461 
   9462 @table @asis
   9463 @item @emph{Description}:
   9464 Determines whether one string is lexically less than or equal to another
   9465 string, where the two strings are interpreted as containing ASCII
   9466 character codes.  If the String A and String B are not the same length,
   9467 the shorter is compared as if spaces were appended to it to form a value
   9468 that has the same length as the longer.
   9469 
   9470 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9471 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9472 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9473 that the latter use the processor's character ordering (which is not
   9474 ASCII on some targets), whereas the former always use the ASCII
   9475 ordering.
   9476 
   9477 @item @emph{Standard}:
   9478 Fortran 77 and later
   9479 
   9480 @item @emph{Class}:
   9481 Elemental function
   9482 
   9483 @item @emph{Syntax}:
   9484 @code{RESULT = LLE(STRING_A, STRING_B)}
   9485 
   9486 @item @emph{Arguments}:
   9487 @multitable @columnfractions .15 .70
   9488 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9489 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9490 @end multitable
   9491 
   9492 @item @emph{Return value}:
   9493 Returns @code{.TRUE.} if @code{STRING_A <= STRING_B}, and @code{.FALSE.}
   9494 otherwise, based on the ASCII ordering.
   9495 
   9496 @item @emph{Specific names}:
   9497 @multitable @columnfractions .34 .16 .17 .30
   9498 @headitem Name                           @tab Argument          @tab Return type       @tab Standard
   9499 @item @code{LLE(STRING_A,STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9500 @end multitable
   9501 
   9502 @item @emph{See also}:
   9503 @ref{LGE}, @gol
   9504 @ref{LGT}, @gol
   9505 @ref{LLT}
   9506 @end table
   9507 
   9508 
   9509 
   9510 @node LLT
   9511 @section @code{LLT} --- Lexical less than
   9512 @fnindex LLT
   9513 @cindex lexical comparison of strings
   9514 @cindex string, comparison
   9515 
   9516 @table @asis
   9517 @item @emph{Description}:
   9518 Determines whether one string is lexically less than another string,
   9519 where the two strings are interpreted as containing ASCII character
   9520 codes.  If the String A and String B are not the same length, the
   9521 shorter is compared as if spaces were appended to it to form a value
   9522 that has the same length as the longer.
   9523 
   9524 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9525 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9526 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9527 that the latter use the processor's character ordering (which is not
   9528 ASCII on some targets), whereas the former always use the ASCII
   9529 ordering.
   9530 
   9531 @item @emph{Standard}:
   9532 Fortran 77 and later
   9533 
   9534 @item @emph{Class}:
   9535 Elemental function
   9536 
   9537 @item @emph{Syntax}:
   9538 @code{RESULT = LLT(STRING_A, STRING_B)}
   9539 
   9540 @item @emph{Arguments}:
   9541 @multitable @columnfractions .15 .70
   9542 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9543 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9544 @end multitable
   9545 
   9546 @item @emph{Return value}:
   9547 Returns @code{.TRUE.} if @code{STRING_A < STRING_B}, and @code{.FALSE.}
   9548 otherwise, based on the ASCII ordering.
   9549 
   9550 @item @emph{Specific names}:
   9551 @multitable @columnfractions .34 .16 .17 .30
   9552 @headitem Name                           @tab Argument          @tab Return type       @tab Standard
   9553 @item @code{LLT(STRING_A,STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9554 @end multitable
   9555 
   9556 @item @emph{See also}:
   9557 @ref{LGE}, @gol
   9558 @ref{LGT}, @gol
   9559 @ref{LLE}
   9560 @end table
   9561 
   9562 
   9563 
   9564 @node LNBLNK
   9565 @section @code{LNBLNK} --- Index of the last non-blank character in a string
   9566 @fnindex LNBLNK
   9567 @cindex string, find non-blank character
   9568 
   9569 @table @asis
   9570 @item @emph{Description}:
   9571 Returns the length of a character string, ignoring any trailing blanks.
   9572 This is identical to the standard @code{LEN_TRIM} intrinsic, and is only
   9573 included for backwards compatibility.
   9574 
   9575 @item @emph{Standard}:
   9576 GNU extension
   9577 
   9578 @item @emph{Class}:
   9579 Elemental function
   9580 
   9581 @item @emph{Syntax}:
   9582 @code{RESULT = LNBLNK(STRING)}
   9583 
   9584 @item @emph{Arguments}:
   9585 @multitable @columnfractions .15 .70
   9586 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
   9587 with @code{INTENT(IN)}
   9588 @end multitable
   9589 
   9590 @item @emph{Return value}:
   9591 The return value is of @code{INTEGER(kind=4)} type.
   9592 
   9593 @item @emph{See also}:
   9594 @ref{INDEX intrinsic}, @gol
   9595 @ref{LEN_TRIM}
   9596 @end table
   9597 
   9598 
   9599 
   9600 @node LOC
   9601 @section @code{LOC} --- Returns the address of a variable
   9602 @fnindex LOC
   9603 @cindex location of a variable in memory
   9604 
   9605 @table @asis
   9606 @item @emph{Description}:
   9607 @code{LOC(X)} returns the address of @var{X} as an integer.
   9608 
   9609 @item @emph{Standard}:
   9610 GNU extension
   9611 
   9612 @item @emph{Class}:
   9613 Inquiry function
   9614 
   9615 @item @emph{Syntax}:
   9616 @code{RESULT = LOC(X)}
   9617 
   9618 @item @emph{Arguments}:
   9619 @multitable @columnfractions .15 .70
   9620 @item @var{X} @tab Variable of any type.
   9621 @end multitable
   9622 
   9623 @item @emph{Return value}:
   9624 The return value is of type @code{INTEGER}, with a @code{KIND}
   9625 corresponding to the size (in bytes) of a memory address on the target
   9626 machine.
   9627 
   9628 @item @emph{Example}:
   9629 @smallexample
   9630 program test_loc
   9631   integer :: i
   9632   real :: r
   9633   i = loc(r)
   9634   print *, i
   9635 end program test_loc
   9636 @end smallexample
   9637 @end table
   9638 
   9639 
   9640 
   9641 @node LOG
   9642 @section @code{LOG} --- Natural logarithm function
   9643 @fnindex LOG
   9644 @fnindex ALOG
   9645 @fnindex DLOG
   9646 @fnindex CLOG
   9647 @fnindex ZLOG
   9648 @fnindex CDLOG
   9649 @cindex exponential function, inverse
   9650 @cindex logarithm function
   9651 @cindex natural logarithm function
   9652 
   9653 @table @asis
   9654 @item @emph{Description}:
   9655 @code{LOG(X)} computes the natural logarithm of @var{X}, i.e. the
   9656 logarithm to the base @math{e}.
   9657 
   9658 @item @emph{Standard}:
   9659 Fortran 77 and later, has GNU extensions
   9660 
   9661 @item @emph{Class}:
   9662 Elemental function
   9663 
   9664 @item @emph{Syntax}:
   9665 @code{RESULT = LOG(X)}
   9666 
   9667 @item @emph{Arguments}:
   9668 @multitable @columnfractions .15 .70
   9669 @item @var{X} @tab The type shall be @code{REAL} or
   9670 @code{COMPLEX}.
   9671 @end multitable
   9672 
   9673 @item @emph{Return value}:
   9674 The return value is of type @code{REAL} or @code{COMPLEX}.
   9675 The kind type parameter is the same as @var{X}.
   9676 If @var{X} is @code{COMPLEX}, the imaginary part @math{\omega} is in the range
   9677 @math{-\pi < \omega \leq \pi}.
   9678 
   9679 @item @emph{Example}:
   9680 @smallexample
   9681 program test_log
   9682   real(8) :: x = 2.7182818284590451_8
   9683   complex :: z = (1.0, 2.0)
   9684   x = log(x)    ! will yield (approximately) 1
   9685   z = log(z)
   9686 end program test_log
   9687 @end smallexample
   9688 
   9689 @item @emph{Specific names}:
   9690 @multitable @columnfractions .20 .23 .20 .33
   9691 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   9692 @item @code{ALOG(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 or later
   9693 @item @code{DLOG(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 or later
   9694 @item @code{CLOG(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab Fortran 77 or later
   9695 @item @code{ZLOG(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
   9696 @item @code{CDLOG(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
   9697 @end multitable
   9698 @end table
   9699 
   9700 
   9701 
   9702 @node LOG10
   9703 @section @code{LOG10} --- Base 10 logarithm function
   9704 @fnindex LOG10
   9705 @fnindex ALOG10
   9706 @fnindex DLOG10
   9707 @cindex exponential function, inverse
   9708 @cindex logarithm function with base 10
   9709 @cindex base 10 logarithm function
   9710 
   9711 @table @asis
   9712 @item @emph{Description}:
   9713 @code{LOG10(X)} computes the base 10 logarithm of @var{X}.
   9714 
   9715 @item @emph{Standard}:
   9716 Fortran 77 and later
   9717 
   9718 @item @emph{Class}:
   9719 Elemental function
   9720 
   9721 @item @emph{Syntax}:
   9722 @code{RESULT = LOG10(X)}
   9723 
   9724 @item @emph{Arguments}:
   9725 @multitable @columnfractions .15 .70
   9726 @item @var{X} @tab The type shall be @code{REAL}.
   9727 @end multitable
   9728 
   9729 @item @emph{Return value}:
   9730 The return value is of type @code{REAL} or @code{COMPLEX}.
   9731 The kind type parameter is the same as @var{X}.
   9732 
   9733 @item @emph{Example}:
   9734 @smallexample
   9735 program test_log10
   9736   real(8) :: x = 10.0_8
   9737   x = log10(x)
   9738 end program test_log10
   9739 @end smallexample
   9740 
   9741 @item @emph{Specific names}:
   9742 @multitable @columnfractions .20 .23 .20 .33
   9743 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   9744 @item @code{ALOG10(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   9745 @item @code{DLOG10(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   9746 @end multitable
   9747 @end table
   9748 
   9749 
   9750 
   9751 @node LOG_GAMMA
   9752 @section @code{LOG_GAMMA} --- Logarithm of the Gamma function
   9753 @fnindex LOG_GAMMA
   9754 @fnindex LGAMMA
   9755 @fnindex ALGAMA
   9756 @fnindex DLGAMA
   9757 @cindex Gamma function, logarithm of
   9758 
   9759 @table @asis
   9760 @item @emph{Description}:
   9761 @code{LOG_GAMMA(X)} computes the natural logarithm of the absolute value
   9762 of the Gamma (@math{\Gamma}) function.
   9763 
   9764 @item @emph{Standard}:
   9765 Fortran 2008 and later
   9766 
   9767 @item @emph{Class}:
   9768 Elemental function
   9769 
   9770 @item @emph{Syntax}:
   9771 @code{X = LOG_GAMMA(X)}
   9772 
   9773 @item @emph{Arguments}:
   9774 @multitable @columnfractions .15 .70
   9775 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
   9776 nor a negative integer.
   9777 @end multitable
   9778 
   9779 @item @emph{Return value}:
   9780 The return value is of type @code{REAL} of the same kind as @var{X}.
   9781 
   9782 @item @emph{Example}:
   9783 @smallexample
   9784 program test_log_gamma
   9785   real :: x = 1.0
   9786   x = lgamma(x) ! returns 0.0
   9787 end program test_log_gamma
   9788 @end smallexample
   9789 
   9790 @item @emph{Specific names}:
   9791 @multitable @columnfractions .20 .23 .20 .33
   9792 @headitem Name             @tab Argument         @tab Return type       @tab Standard
   9793 @item @code{LGAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU extension
   9794 @item @code{ALGAMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU extension
   9795 @item @code{DLGAMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU extension
   9796 @end multitable
   9797 
   9798 @item @emph{See also}:
   9799 Gamma function: @gol
   9800 @ref{GAMMA}
   9801 @end table
   9802 
   9803 
   9804 
   9805 @node LOGICAL
   9806 @section @code{LOGICAL} --- Convert to logical type
   9807 @fnindex LOGICAL
   9808 @cindex conversion, to logical
   9809 
   9810 @table @asis
   9811 @item @emph{Description}:
   9812 Converts one kind of @code{LOGICAL} variable to another.
   9813 
   9814 @item @emph{Standard}:
   9815 Fortran 90 and later
   9816 
   9817 @item @emph{Class}:
   9818 Elemental function
   9819 
   9820 @item @emph{Syntax}:
   9821 @code{RESULT = LOGICAL(L [, KIND])}
   9822 
   9823 @item @emph{Arguments}:
   9824 @multitable @columnfractions .15 .70
   9825 @item @var{L}    @tab The type shall be @code{LOGICAL}.
   9826 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9827 expression indicating the kind parameter of the result.
   9828 @end multitable
   9829 
   9830 @item @emph{Return value}:
   9831 The return value is a @code{LOGICAL} value equal to @var{L}, with a
   9832 kind corresponding to @var{KIND}, or of the default logical kind if
   9833 @var{KIND} is not given.
   9834 
   9835 @item @emph{See also}:
   9836 @ref{INT}, @gol
   9837 @ref{REAL}, @gol
   9838 @ref{CMPLX}
   9839 @end table
   9840 
   9841 
   9842 
   9843 @node LSHIFT
   9844 @section @code{LSHIFT} --- Left shift bits
   9845 @fnindex LSHIFT
   9846 @cindex bits, shift left
   9847 
   9848 @table @asis
   9849 @item @emph{Description}:
   9850 @code{LSHIFT} returns a value corresponding to @var{I} with all of the
   9851 bits shifted left by @var{SHIFT} places.  @var{SHIFT} shall be
   9852 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   9853 the result value is undefined.  Bits shifted out from the left end are
   9854 lost; zeros are shifted in from the opposite end.
   9855 
   9856 This function has been superseded by the @code{ISHFT} intrinsic, which
   9857 is standard in Fortran 95 and later, and the @code{SHIFTL} intrinsic,
   9858 which is standard in Fortran 2008 and later.
   9859 
   9860 @item @emph{Standard}:
   9861 GNU extension
   9862 
   9863 @item @emph{Class}:
   9864 Elemental function
   9865 
   9866 @item @emph{Syntax}:
   9867 @code{RESULT = LSHIFT(I, SHIFT)}
   9868 
   9869 @item @emph{Arguments}:
   9870 @multitable @columnfractions .15 .70
   9871 @item @var{I} @tab The type shall be @code{INTEGER}.
   9872 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   9873 @end multitable
   9874 
   9875 @item @emph{Return value}:
   9876 The return value is of type @code{INTEGER} and of the same kind as
   9877 @var{I}.
   9878 
   9879 @item @emph{See also}:
   9880 @ref{ISHFT}, @gol
   9881 @ref{ISHFTC}, @gol
   9882 @ref{RSHIFT}, @gol
   9883 @ref{SHIFTA}, @gol
   9884 @ref{SHIFTL}, @gol
   9885 @ref{SHIFTR}
   9886 @end table
   9887 
   9888 
   9889 
   9890 @node LSTAT
   9891 @section @code{LSTAT} --- Get file status
   9892 @fnindex LSTAT
   9893 @cindex file system, file status
   9894 
   9895 @table @asis
   9896 @item @emph{Description}:
   9897 @code{LSTAT} is identical to @ref{STAT}, except that if path is a
   9898 symbolic link, then the link itself is statted, not the file that it
   9899 refers to.
   9900 
   9901 The elements in @code{VALUES} are the same as described by @ref{STAT}.
   9902 
   9903 This intrinsic is provided in both subroutine and function forms;
   9904 however, only one form can be used in any given program unit.
   9905 
   9906 @item @emph{Standard}:
   9907 GNU extension
   9908 
   9909 @item @emph{Class}:
   9910 Subroutine, function
   9911 
   9912 @item @emph{Syntax}:
   9913 @multitable @columnfractions .80
   9914 @item @code{CALL LSTAT(NAME, VALUES [, STATUS])}
   9915 @item @code{STATUS = LSTAT(NAME, VALUES)}
   9916 @end multitable
   9917 
   9918 @item @emph{Arguments}:
   9919 @multitable @columnfractions .15 .70
   9920 @item @var{NAME}   @tab The type shall be @code{CHARACTER} of the default
   9921 kind, a valid path within the file system.
   9922 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
   9923 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}.
   9924 Returns 0 on success and a system specific error code otherwise.
   9925 @end multitable
   9926 
   9927 @item @emph{Example}:
   9928 See @ref{STAT} for an example.
   9929 
   9930 @item @emph{See also}:
   9931 To stat an open file: @gol
   9932 @ref{FSTAT} @gol
   9933 To stat a file: @gol
   9934 @ref{STAT}
   9935 @end table
   9936 
   9937 
   9938 
   9939 @node LTIME
   9940 @section @code{LTIME} --- Convert time to local time info
   9941 @fnindex LTIME
   9942 @cindex time, conversion to local time info
   9943 
   9944 @table @asis
   9945 @item @emph{Description}:
   9946 Given a system time value @var{TIME} (as provided by the @ref{TIME}
   9947 intrinsic), fills @var{VALUES} with values extracted from it appropriate
   9948 to the local time zone using @code{localtime(3)}.
   9949 
   9950 This intrinsic routine is provided for backwards compatibility with 
   9951 GNU Fortran 77.  In new code, programmers should consider the use of 
   9952 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   9953 standard.
   9954 
   9955 @item @emph{Standard}:
   9956 GNU extension
   9957 
   9958 @item @emph{Class}:
   9959 Subroutine
   9960 
   9961 @item @emph{Syntax}:
   9962 @code{CALL LTIME(TIME, VALUES)}
   9963 
   9964 @item @emph{Arguments}:
   9965 @multitable @columnfractions .15 .70
   9966 @item @var{TIME}  @tab An @code{INTEGER} scalar expression
   9967 corresponding to a system time, with @code{INTENT(IN)}.
   9968 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
   9969 with @code{INTENT(OUT)}.
   9970 @end multitable
   9971 
   9972 @item @emph{Return value}:
   9973 The elements of @var{VALUES} are assigned as follows:
   9974 @enumerate
   9975 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
   9976 seconds
   9977 @item Minutes after the hour, range 0--59
   9978 @item Hours past midnight, range 0--23
   9979 @item Day of month, range 1--31
   9980 @item Number of months since January, range 0--11
   9981 @item Years since 1900
   9982 @item Number of days since Sunday, range 0--6
   9983 @item Days since January 1, range 0--365
   9984 @item Daylight savings indicator: positive if daylight savings is in
   9985 effect, zero if not, and negative if the information is not available.
   9986 @end enumerate
   9987 
   9988 @item @emph{See also}:
   9989 @ref{DATE_AND_TIME}, @gol
   9990 @ref{CTIME}, @gol
   9991 @ref{GMTIME}, @gol
   9992 @ref{TIME}, @gol
   9993 @ref{TIME8}
   9994 @end table
   9995 
   9996 
   9997 
   9998 @node MALLOC
   9999 @section @code{MALLOC} --- Allocate dynamic memory
   10000 @fnindex MALLOC
   10001 @cindex pointer, cray
   10002 
   10003 @table @asis
   10004 @item @emph{Description}:
   10005 @code{MALLOC(SIZE)} allocates @var{SIZE} bytes of dynamic memory and
   10006 returns the address of the allocated memory. The @code{MALLOC} intrinsic
   10007 is an extension intended to be used with Cray pointers, and is provided
   10008 in GNU Fortran to allow the user to compile legacy code. For new code
   10009 using Fortran 95 pointers, the memory allocation intrinsic is
   10010 @code{ALLOCATE}.
   10011 
   10012 @item @emph{Standard}:
   10013 GNU extension
   10014 
   10015 @item @emph{Class}:
   10016 Function
   10017 
   10018 @item @emph{Syntax}:
   10019 @code{PTR = MALLOC(SIZE)}
   10020 
   10021 @item @emph{Arguments}:
   10022 @multitable @columnfractions .15 .70
   10023 @item @var{SIZE} @tab The type shall be @code{INTEGER}.
   10024 @end multitable
   10025 
   10026 @item @emph{Return value}:
   10027 The return value is of type @code{INTEGER(K)}, with @var{K} such that
   10028 variables of type @code{INTEGER(K)} have the same size as
   10029 C pointers (@code{sizeof(void *)}).
   10030 
   10031 @item @emph{Example}:
   10032 The following example demonstrates the use of @code{MALLOC} and
   10033 @code{FREE} with Cray pointers.
   10034 
   10035 @smallexample
   10036 program test_malloc
   10037   implicit none
   10038   integer i
   10039   real*8 x(*), z
   10040   pointer(ptr_x,x)
   10041 
   10042   ptr_x = malloc(20*8)
   10043   do i = 1, 20
   10044     x(i) = sqrt(1.0d0 / i)
   10045   end do
   10046   z = 0
   10047   do i = 1, 20
   10048     z = z + x(i)
   10049     print *, z
   10050   end do
   10051   call free(ptr_x)
   10052 end program test_malloc
   10053 @end smallexample
   10054 
   10055 @item @emph{See also}:
   10056 @ref{FREE}
   10057 @end table
   10058 
   10059 
   10060 
   10061 @node MASKL
   10062 @section @code{MASKL} --- Left justified mask
   10063 @fnindex MASKL
   10064 @cindex mask, left justified
   10065 
   10066 @table @asis
   10067 @item @emph{Description}:
   10068 @code{MASKL(I[, KIND])} has its leftmost @var{I} bits set to 1, and the
   10069 remaining bits set to 0.
   10070 
   10071 @item @emph{Standard}:
   10072 Fortran 2008 and later
   10073 
   10074 @item @emph{Class}:
   10075 Elemental function
   10076 
   10077 @item @emph{Syntax}:
   10078 @code{RESULT = MASKL(I[, KIND])}
   10079 
   10080 @item @emph{Arguments}:
   10081 @multitable @columnfractions .15 .70
   10082 @item @var{I} @tab Shall be of type @code{INTEGER}.
   10083 @item @var{KIND} @tab Shall be a scalar constant expression of type
   10084 @code{INTEGER}.
   10085 @end multitable
   10086 
   10087 @item @emph{Return value}:
   10088 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
   10089 specifies the kind value of the return type; otherwise, it is of the
   10090 default integer kind.
   10091 
   10092 @item @emph{See also}:
   10093 @ref{MASKR}
   10094 @end table
   10095 
   10096 
   10097 
   10098 @node MASKR
   10099 @section @code{MASKR} --- Right justified mask
   10100 @fnindex MASKR
   10101 @cindex mask, right justified
   10102 
   10103 @table @asis
   10104 @item @emph{Description}:
   10105 @code{MASKL(I[, KIND])} has its rightmost @var{I} bits set to 1, and the
   10106 remaining bits set to 0.
   10107 
   10108 @item @emph{Standard}:
   10109 Fortran 2008 and later
   10110 
   10111 @item @emph{Class}:
   10112 Elemental function
   10113 
   10114 @item @emph{Syntax}:
   10115 @code{RESULT = MASKR(I[, KIND])}
   10116 
   10117 @item @emph{Arguments}:
   10118 @multitable @columnfractions .15 .70
   10119 @item @var{I} @tab Shall be of type @code{INTEGER}.
   10120 @item @var{KIND} @tab Shall be a scalar constant expression of type
   10121 @code{INTEGER}.
   10122 @end multitable
   10123 
   10124 @item @emph{Return value}:
   10125 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
   10126 specifies the kind value of the return type; otherwise, it is of the
   10127 default integer kind.
   10128 
   10129 @item @emph{See also}:
   10130 @ref{MASKL}
   10131 @end table
   10132 
   10133 
   10134 
   10135 @node MATMUL
   10136 @section @code{MATMUL} --- matrix multiplication
   10137 @fnindex MATMUL
   10138 @cindex matrix multiplication
   10139 @cindex product, matrix
   10140 
   10141 @table @asis
   10142 @item @emph{Description}:
   10143 Performs a matrix multiplication on numeric or logical arguments.
   10144 
   10145 @item @emph{Standard}:
   10146 Fortran 90 and later
   10147 
   10148 @item @emph{Class}:
   10149 Transformational function
   10150 
   10151 @item @emph{Syntax}:
   10152 @code{RESULT = MATMUL(MATRIX_A, MATRIX_B)}
   10153 
   10154 @item @emph{Arguments}:
   10155 @multitable @columnfractions .15 .70
   10156 @item @var{MATRIX_A} @tab An array of @code{INTEGER},
   10157 @code{REAL}, @code{COMPLEX}, or @code{LOGICAL} type, with a rank of
   10158 one or two.
   10159 @item @var{MATRIX_B} @tab An array of @code{INTEGER},
   10160 @code{REAL}, or @code{COMPLEX} type if @var{MATRIX_A} is of a numeric
   10161 type; otherwise, an array of @code{LOGICAL} type. The rank shall be one
   10162 or two, and the first (or only) dimension of @var{MATRIX_B} shall be
   10163 equal to the last (or only) dimension of @var{MATRIX_A}.
   10164 @var{MATRIX_A} and @var{MATRIX_B} shall not both be rank one arrays.
   10165 @end multitable
   10166 
   10167 @item @emph{Return value}:
   10168 The matrix product of @var{MATRIX_A} and @var{MATRIX_B}.  The type and
   10169 kind of the result follow the usual type and kind promotion rules, as
   10170 for the @code{*} or @code{.AND.} operators.
   10171 @end table
   10172 
   10173 
   10174 
   10175 @node MAX
   10176 @section @code{MAX} --- Maximum value of an argument list
   10177 @fnindex MAX
   10178 @fnindex MAX0
   10179 @fnindex AMAX0
   10180 @fnindex MAX1
   10181 @fnindex AMAX1
   10182 @fnindex DMAX1
   10183 @cindex maximum value
   10184 
   10185 @table @asis
   10186 @item @emph{Description}:
   10187 Returns the argument with the largest (most positive) value.
   10188 
   10189 @item @emph{Standard}:
   10190 Fortran 77 and later
   10191 
   10192 @item @emph{Class}:
   10193 Elemental function
   10194 
   10195 @item @emph{Syntax}:
   10196 @code{RESULT = MAX(A1, A2 [, A3 [, ...]])}
   10197 
   10198 @item @emph{Arguments}:
   10199 @multitable @columnfractions .15 .70
   10200 @item @var{A1}          @tab The type shall be @code{INTEGER} or
   10201 @code{REAL}.
   10202 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
   10203 as @var{A1}.  (As a GNU extension, arguments of different kinds are
   10204 permitted.)
   10205 @end multitable
   10206 
   10207 @item @emph{Return value}:
   10208 The return value corresponds to the maximum value among the arguments,
   10209 and has the same type and kind as the first argument.
   10210 
   10211 @item @emph{Specific names}:
   10212 @multitable @columnfractions .20 .23 .20 .33
   10213 @headitem Name             @tab Argument             @tab Return type         @tab Standard
   10214 @item @code{MAX0(A1)}  @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)}   @tab Fortran 77 and later
   10215 @item @code{AMAX0(A1)} @tab @code{INTEGER(4) A1} @tab @code{REAL(MAX(X))} @tab Fortran 77 and later
   10216 @item @code{MAX1(A1)}  @tab @code{REAL A1}       @tab @code{INT(MAX(X))}  @tab Fortran 77 and later
   10217 @item @code{AMAX1(A1)} @tab @code{REAL(4) A1}    @tab @code{REAL(4)}      @tab Fortran 77 and later
   10218 @item @code{DMAX1(A1)} @tab @code{REAL(8) A1}    @tab @code{REAL(8)}      @tab Fortran 77 and later
   10219 @end multitable
   10220 
   10221 @item @emph{See also}:
   10222 @ref{MAXLOC} @gol
   10223 @ref{MAXVAL}, @gol
   10224 @ref{MIN}
   10225 @end table
   10226 
   10227 
   10228 
   10229 @node MAXEXPONENT
   10230 @section @code{MAXEXPONENT} --- Maximum exponent of a real kind
   10231 @fnindex MAXEXPONENT
   10232 @cindex model representation, maximum exponent
   10233 
   10234 @table @asis
   10235 @item @emph{Description}:
   10236 @code{MAXEXPONENT(X)} returns the maximum exponent in the model of the
   10237 type of @code{X}.
   10238 
   10239 @item @emph{Standard}:
   10240 Fortran 90 and later
   10241 
   10242 @item @emph{Class}:
   10243 Inquiry function
   10244 
   10245 @item @emph{Syntax}:
   10246 @code{RESULT = MAXEXPONENT(X)}
   10247 
   10248 @item @emph{Arguments}:
   10249 @multitable @columnfractions .15 .70
   10250 @item @var{X} @tab Shall be of type @code{REAL}.
   10251 @end multitable
   10252 
   10253 @item @emph{Return value}:
   10254 The return value is of type @code{INTEGER} and of the default integer
   10255 kind.
   10256 
   10257 @item @emph{Example}:
   10258 @smallexample
   10259 program exponents
   10260   real(kind=4) :: x
   10261   real(kind=8) :: y
   10262 
   10263   print *, minexponent(x), maxexponent(x)
   10264   print *, minexponent(y), maxexponent(y)
   10265 end program exponents
   10266 @end smallexample
   10267 @end table
   10268 
   10269 
   10270 
   10271 @node MAXLOC
   10272 @section @code{MAXLOC} --- Location of the maximum value within an array
   10273 @fnindex MAXLOC
   10274 @cindex array, location of maximum element
   10275 
   10276 @table @asis
   10277 @item @emph{Description}:
   10278 Determines the location of the element in the array with the maximum
   10279 value, or, if the @var{DIM} argument is supplied, determines the
   10280 locations of the maximum element along each row of the array in the
   10281 @var{DIM} direction.  If @var{MASK} is present, only the elements for
   10282 which @var{MASK} is @code{.TRUE.} are considered.  If more than one
   10283 element in the array has the maximum value, the location returned is
   10284 that of the first such element in array element order if the
   10285 @var{BACK} is not present, or is false; if @var{BACK} is true, the location
   10286 returned is that of the last such element. If the array has zero
   10287 size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
   10288 the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
   10289 and all of the elements of @var{MASK} along a given row are zero, the
   10290 result value for that row is zero.
   10291 
   10292 @item @emph{Standard}:
   10293 Fortran 95 and later; @var{ARRAY} of @code{CHARACTER} and the
   10294 @var{KIND} argument are available in Fortran 2003 and later.
   10295 The @var{BACK} argument is available in Fortran 2008 and later.
   10296 
   10297 @item @emph{Class}:
   10298 Transformational function
   10299 
   10300 @item @emph{Syntax}:
   10301 @multitable @columnfractions .80
   10302 @item @code{RESULT = MAXLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])}
   10303 @item @code{RESULT = MAXLOC(ARRAY [, MASK] [,KIND] [,BACK])}
   10304 @end multitable
   10305 
   10306 @item @emph{Arguments}:
   10307 @multitable @columnfractions .15 .70
   10308 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
   10309 @code{REAL}.
   10310 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10311 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10312 inclusive.  It may not be an optional dummy argument.
   10313 @item @var{MASK}  @tab Shall be of type @code{LOGICAL},
   10314 and conformable with @var{ARRAY}.
   10315 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   10316 expression indicating the kind parameter of the result.
   10317 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
   10318 @end multitable
   10319 
   10320 @item @emph{Return value}:
   10321 If @var{DIM} is absent, the result is a rank-one array with a length
   10322 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
   10323 is an array with a rank one less than the rank of @var{ARRAY}, and a
   10324 size corresponding to the size of @var{ARRAY} with the @var{DIM}
   10325 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
   10326 of one, the result is a scalar.   If the optional argument @var{KIND}
   10327 is present, the result is an integer of kind @var{KIND}, otherwise it
   10328 is of default kind.
   10329 
   10330 @item @emph{See also}:
   10331 @ref{FINDLOC}, @gol
   10332 @ref{MAX}, @gol
   10333 @ref{MAXVAL}
   10334 @end table
   10335 
   10336 
   10337 
   10338 @node MAXVAL
   10339 @section @code{MAXVAL} --- Maximum value of an array
   10340 @fnindex MAXVAL
   10341 @cindex array, maximum value
   10342 @cindex maximum value
   10343 
   10344 @table @asis
   10345 @item @emph{Description}:
   10346 Determines the maximum value of the elements in an array value, or, if
   10347 the @var{DIM} argument is supplied, determines the maximum value along
   10348 each row of the array in the @var{DIM} direction.  If @var{MASK} is
   10349 present, only the elements for which @var{MASK} is @code{.TRUE.} are
   10350 considered.  If the array has zero size, or all of the elements of
   10351 @var{MASK} are @code{.FALSE.}, then the result is @code{-HUGE(ARRAY)}
   10352 if @var{ARRAY} is numeric, or a string of nulls if @var{ARRAY} is of character
   10353 type.
   10354 
   10355 @item @emph{Standard}:
   10356 Fortran 90 and later
   10357 
   10358 @item @emph{Class}:
   10359 Transformational function
   10360 
   10361 @item @emph{Syntax}:
   10362 @multitable @columnfractions .80
   10363 @item @code{RESULT = MAXVAL(ARRAY, DIM [, MASK])}
   10364 @item @code{RESULT = MAXVAL(ARRAY [, MASK])}
   10365 @end multitable
   10366 
   10367 @item @emph{Arguments}:
   10368 @multitable @columnfractions .15 .70
   10369 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
   10370 @code{REAL}.
   10371 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10372 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10373 inclusive.  It may not be an optional dummy argument.
   10374 @item @var{MASK}  @tab (Optional) Shall be of type @code{LOGICAL},
   10375 and conformable with @var{ARRAY}.
   10376 @end multitable
   10377 
   10378 @item @emph{Return value}:
   10379 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
   10380 is a scalar.  If @var{DIM} is present, the result is an array with a
   10381 rank one less than the rank of @var{ARRAY}, and a size corresponding to
   10382 the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
   10383 cases, the result is of the same type and kind as @var{ARRAY}.
   10384 
   10385 @item @emph{See also}:
   10386 @ref{MAX}, @gol
   10387 @ref{MAXLOC}
   10388 @end table
   10389 
   10390 
   10391 
   10392 @node MCLOCK
   10393 @section @code{MCLOCK} --- Time function
   10394 @fnindex MCLOCK
   10395 @cindex time, clock ticks
   10396 @cindex clock ticks
   10397 
   10398 @table @asis
   10399 @item @emph{Description}:
   10400 Returns the number of clock ticks since the start of the process, based
   10401 on the function @code{clock(3)} in the C standard library.
   10402 
   10403 This intrinsic is not fully portable, such as to systems with 32-bit
   10404 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
   10405 the values returned by this intrinsic might be, or become, negative, or
   10406 numerically less than previous values, during a single run of the
   10407 compiled program.
   10408 
   10409 @item @emph{Standard}:
   10410 GNU extension
   10411 
   10412 @item @emph{Class}:
   10413 Function
   10414 
   10415 @item @emph{Syntax}:
   10416 @code{RESULT = MCLOCK()}
   10417 
   10418 @item @emph{Return value}:
   10419 The return value is a scalar of type @code{INTEGER(4)}, equal to the
   10420 number of clock ticks since the start of the process, or @code{-1} if
   10421 the system does not support @code{clock(3)}.
   10422 
   10423 @item @emph{See also}:
   10424 @ref{CTIME}, @gol
   10425 @ref{GMTIME}, @gol
   10426 @ref{LTIME}, @gol
   10427 @ref{MCLOCK}, @gol
   10428 @ref{TIME}
   10429 @end table
   10430 
   10431 
   10432 
   10433 @node MCLOCK8
   10434 @section @code{MCLOCK8} --- Time function (64-bit)
   10435 @fnindex MCLOCK8
   10436 @cindex time, clock ticks
   10437 @cindex clock ticks
   10438 
   10439 @table @asis
   10440 @item @emph{Description}:
   10441 Returns the number of clock ticks since the start of the process, based
   10442 on the function @code{clock(3)} in the C standard library.
   10443 
   10444 @emph{Warning:} this intrinsic does not increase the range of the timing
   10445 values over that returned by @code{clock(3)}. On a system with a 32-bit
   10446 @code{clock(3)}, @code{MCLOCK8} will return a 32-bit value, even though
   10447 it is converted to a 64-bit @code{INTEGER(8)} value. That means
   10448 overflows of the 32-bit value can still occur. Therefore, the values
   10449 returned by this intrinsic might be or become negative or numerically
   10450 less than previous values during a single run of the compiled program.
   10451 
   10452 @item @emph{Standard}:
   10453 GNU extension
   10454 
   10455 @item @emph{Class}:
   10456 Function
   10457 
   10458 @item @emph{Syntax}:
   10459 @code{RESULT = MCLOCK8()}
   10460 
   10461 @item @emph{Return value}:
   10462 The return value is a scalar of type @code{INTEGER(8)}, equal to the
   10463 number of clock ticks since the start of the process, or @code{-1} if
   10464 the system does not support @code{clock(3)}.
   10465 
   10466 @item @emph{See also}:
   10467 @ref{CTIME}, @gol
   10468 @ref{GMTIME}, @gol
   10469 @ref{LTIME}, @gol
   10470 @ref{MCLOCK}, @gol
   10471 @ref{TIME8}
   10472 @end table
   10473 
   10474 
   10475 
   10476 @node MERGE
   10477 @section @code{MERGE} --- Merge variables
   10478 @fnindex MERGE
   10479 @cindex array, merge arrays
   10480 @cindex array, combine arrays
   10481 
   10482 @table @asis
   10483 @item @emph{Description}:
   10484 Select values from two arrays according to a logical mask.  The result
   10485 is equal to @var{TSOURCE} if @var{MASK} is @code{.TRUE.}, or equal to
   10486 @var{FSOURCE} if it is @code{.FALSE.}.
   10487 
   10488 @item @emph{Standard}:
   10489 Fortran 90 and later
   10490 
   10491 @item @emph{Class}:
   10492 Elemental function
   10493 
   10494 @item @emph{Syntax}:
   10495 @code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)}
   10496 
   10497 @item @emph{Arguments}:
   10498 @multitable @columnfractions .15 .70
   10499 @item @var{TSOURCE} @tab May be of any type.
   10500 @item @var{FSOURCE} @tab Shall be of the same type and type parameters
   10501 as @var{TSOURCE}.
   10502 @item @var{MASK}    @tab Shall be of type @code{LOGICAL}.
   10503 @end multitable
   10504 
   10505 @item @emph{Return value}:
   10506 The result is of the same type and type parameters as @var{TSOURCE}.
   10507 
   10508 @end table
   10509 
   10510 
   10511 
   10512 @node MERGE_BITS
   10513 @section @code{MERGE_BITS} --- Merge of bits under mask
   10514 @fnindex MERGE_BITS
   10515 @cindex bits, merge
   10516 
   10517 @table @asis
   10518 @item @emph{Description}:
   10519 @code{MERGE_BITS(I, J, MASK)} merges the bits of @var{I} and @var{J}
   10520 as determined by the mask.  The i-th bit of the result is equal to the 
   10521 i-th bit of @var{I} if the i-th bit of @var{MASK} is 1; it is equal to
   10522 the i-th bit of @var{J} otherwise.
   10523 
   10524 @item @emph{Standard}:
   10525 Fortran 2008 and later
   10526 
   10527 @item @emph{Class}:
   10528 Elemental function
   10529 
   10530 @item @emph{Syntax}:
   10531 @code{RESULT = MERGE_BITS(I, J, MASK)}
   10532 
   10533 @item @emph{Arguments}:
   10534 @multitable @columnfractions .15 .70
   10535 @item @var{I} @tab Shall be of type @code{INTEGER} or a boz-literal-constant.
   10536 @item @var{J} @tab Shall be of type @code{INTEGER} with the same
   10537 kind type parameter as @var{I} or a boz-literal-constant.
   10538 @var{I} and @var{J} shall not both be boz-literal-constants.
   10539 @item @var{MASK} @tab Shall be of type @code{INTEGER} or a boz-literal-constant
   10540 and of the same kind as @var{I}.
   10541 @end multitable
   10542 
   10543 @item @emph{Return value}:
   10544 The result is of the same type and kind as @var{I}.
   10545 
   10546 @end table
   10547 
   10548 
   10549 
   10550 @node MIN
   10551 @section @code{MIN} --- Minimum value of an argument list
   10552 @fnindex MIN
   10553 @fnindex MIN0
   10554 @fnindex AMIN0
   10555 @fnindex MIN1
   10556 @fnindex AMIN1
   10557 @fnindex DMIN1
   10558 @cindex minimum value
   10559 
   10560 @table @asis
   10561 @item @emph{Description}:
   10562 Returns the argument with the smallest (most negative) value.
   10563 
   10564 @item @emph{Standard}:
   10565 Fortran 77 and later
   10566 
   10567 @item @emph{Class}:
   10568 Elemental function
   10569 
   10570 @item @emph{Syntax}:
   10571 @code{RESULT = MIN(A1, A2 [, A3, ...])}
   10572 
   10573 @item @emph{Arguments}:
   10574 @multitable @columnfractions .15 .70
   10575 @item @var{A1}          @tab The type shall be @code{INTEGER} or
   10576 @code{REAL}.
   10577 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
   10578 as @var{A1}.  (As a GNU extension, arguments of different kinds are
   10579 permitted.)
   10580 @end multitable
   10581 
   10582 @item @emph{Return value}:
   10583 The return value corresponds to the minimum value among the arguments,
   10584 and has the same type and kind as the first argument.
   10585 
   10586 @item @emph{Specific names}:
   10587 @multitable @columnfractions .20 .23 .20 .33
   10588 @headitem Name              @tab Argument             @tab Return type        @tab Standard
   10589 @item @code{MIN0(A1)}   @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)}  @tab Fortran 77 and later
   10590 @item @code{AMIN0(A1)}  @tab @code{INTEGER(4) A1} @tab @code{REAL(4)}     @tab Fortran 77 and later
   10591 @item @code{MIN1(A1)}   @tab @code{REAL A1}       @tab @code{INTEGER(4)}  @tab Fortran 77 and later
   10592 @item @code{AMIN1(A1)}  @tab @code{REAL(4) A1}    @tab @code{REAL(4)}     @tab Fortran 77 and later
   10593 @item @code{DMIN1(A1)}  @tab @code{REAL(8) A1}    @tab @code{REAL(8)}     @tab Fortran 77 and later
   10594 @end multitable
   10595 
   10596 @item @emph{See also}:
   10597 @ref{MAX}, @gol
   10598 @ref{MINLOC}, @gol
   10599 @ref{MINVAL}
   10600 @end table
   10601 
   10602 
   10603 
   10604 @node MINEXPONENT
   10605 @section @code{MINEXPONENT} --- Minimum exponent of a real kind
   10606 @fnindex MINEXPONENT
   10607 @cindex model representation, minimum exponent
   10608 
   10609 @table @asis
   10610 @item @emph{Description}:
   10611 @code{MINEXPONENT(X)} returns the minimum exponent in the model of the
   10612 type of @code{X}.
   10613 
   10614 @item @emph{Standard}:
   10615 Fortran 90 and later
   10616 
   10617 @item @emph{Class}:
   10618 Inquiry function
   10619 
   10620 @item @emph{Syntax}:
   10621 @code{RESULT = MINEXPONENT(X)}
   10622 
   10623 @item @emph{Arguments}:
   10624 @multitable @columnfractions .15 .70
   10625 @item @var{X} @tab Shall be of type @code{REAL}.
   10626 @end multitable
   10627 
   10628 @item @emph{Return value}:
   10629 The return value is of type @code{INTEGER} and of the default integer
   10630 kind.
   10631 
   10632 @item @emph{Example}:
   10633 See @code{MAXEXPONENT} for an example.
   10634 @end table
   10635 
   10636 
   10637 
   10638 @node MINLOC
   10639 @section @code{MINLOC} --- Location of the minimum value within an array
   10640 @fnindex MINLOC
   10641 @cindex array, location of minimum element
   10642 
   10643 @table @asis
   10644 @item @emph{Description}:
   10645 Determines the location of the element in the array with the minimum
   10646 value, or, if the @var{DIM} argument is supplied, determines the
   10647 locations of the minimum element along each row of the array in the
   10648 @var{DIM} direction.  If @var{MASK} is present, only the elements for
   10649 which @var{MASK} is @code{.TRUE.} are considered.  If more than one
   10650 element in the array has the minimum value, the location returned is
   10651 that of the first such element in array element order if the
   10652 @var{BACK} is not present, or is false; if @var{BACK} is true, the location
   10653 returned is that of the last such element.  If the array has
   10654 zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
   10655 the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
   10656 and all of the elements of @var{MASK} along a given row are zero, the
   10657 result value for that row is zero.
   10658 
   10659 @item @emph{Standard}:
   10660 Fortran 90 and later; @var{ARRAY} of @code{CHARACTER} and the
   10661 @var{KIND} argument are available in Fortran 2003 and later.
   10662 The @var{BACK} argument is available in Fortran 2008 and later.
   10663 
   10664 @item @emph{Class}:
   10665 Transformational function
   10666 
   10667 @item @emph{Syntax}:
   10668 @multitable @columnfractions .80
   10669 @item @code{RESULT = MINLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])}
   10670 @item @code{RESULT = MINLOC(ARRAY [, MASK], [,KIND] [,BACK])}
   10671 @end multitable
   10672 
   10673 @item @emph{Arguments}:
   10674 @multitable @columnfractions .15 .70
   10675 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER},
   10676 @code{REAL} or @code{CHARACTER}.
   10677 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10678 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10679 inclusive.  It may not be an optional dummy argument.
   10680 @item @var{MASK}  @tab Shall be of type @code{LOGICAL},
   10681 and conformable with @var{ARRAY}.
   10682 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   10683 expression indicating the kind parameter of the result.
   10684 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
   10685 @end multitable
   10686 
   10687 @item @emph{Return value}:
   10688 If @var{DIM} is absent, the result is a rank-one array with a length
   10689 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
   10690 is an array with a rank one less than the rank of @var{ARRAY}, and a
   10691 size corresponding to the size of @var{ARRAY} with the @var{DIM}
   10692 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
   10693 of one, the result is a scalar.  If the optional argument @var{KIND}
   10694 is present, the result is an integer of kind @var{KIND}, otherwise it
   10695 is of default kind.
   10696 
   10697 @item @emph{See also}:
   10698 @ref{FINDLOC}, @gol
   10699 @ref{MIN}, @gol
   10700 @ref{MINVAL}
   10701 @end table
   10702 
   10703 
   10704 
   10705 @node MINVAL
   10706 @section @code{MINVAL} --- Minimum value of an array
   10707 @fnindex MINVAL
   10708 @cindex array, minimum value
   10709 @cindex minimum value
   10710 
   10711 @table @asis
   10712 @item @emph{Description}:
   10713 Determines the minimum value of the elements in an array value, or, if
   10714 the @var{DIM} argument is supplied, determines the minimum value along
   10715 each row of the array in the @var{DIM} direction.  If @var{MASK} is
   10716 present, only the elements for which @var{MASK} is @code{.TRUE.} are
   10717 considered.  If the array has zero size, or all of the elements of
   10718 @var{MASK} are @code{.FALSE.}, then the result is @code{HUGE(ARRAY)} if
   10719 @var{ARRAY} is numeric, or a string of @code{CHAR(255)} characters if
   10720 @var{ARRAY} is of character type.
   10721 
   10722 @item @emph{Standard}:
   10723 Fortran 90 and later
   10724 
   10725 @item @emph{Class}:
   10726 Transformational function
   10727 
   10728 @item @emph{Syntax}:
   10729 @multitable @columnfractions .80
   10730 @item @code{RESULT = MINVAL(ARRAY, DIM [, MASK])}
   10731 @item @code{RESULT = MINVAL(ARRAY [, MASK])}
   10732 @end multitable
   10733 
   10734 @item @emph{Arguments}:
   10735 @multitable @columnfractions .15 .70
   10736 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
   10737 @code{REAL}.
   10738 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10739 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10740 inclusive.  It may not be an optional dummy argument.
   10741 @item @var{MASK}  @tab Shall be of type @code{LOGICAL},
   10742 and conformable with @var{ARRAY}.
   10743 @end multitable
   10744 
   10745 @item @emph{Return value}:
   10746 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
   10747 is a scalar.  If @var{DIM} is present, the result is an array with a
   10748 rank one less than the rank of @var{ARRAY}, and a size corresponding to
   10749 the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
   10750 cases, the result is of the same type and kind as @var{ARRAY}.
   10751 
   10752 @item @emph{See also}:
   10753 @ref{MIN}, @gol
   10754 @ref{MINLOC}
   10755 @end table
   10756 
   10757 
   10758 
   10759 @node MOD
   10760 @section @code{MOD} --- Remainder function
   10761 @fnindex MOD
   10762 @fnindex AMOD
   10763 @fnindex DMOD
   10764 @fnindex BMOD
   10765 @fnindex IMOD
   10766 @fnindex JMOD
   10767 @fnindex KMOD
   10768 @cindex remainder
   10769 @cindex division, remainder
   10770 
   10771 @table @asis
   10772 @item @emph{Description}:
   10773 @code{MOD(A,P)} computes the remainder of the division of A by P@. 
   10774 
   10775 @item @emph{Standard}:
   10776 Fortran 77 and later, has overloads that are GNU extensions
   10777 
   10778 @item @emph{Class}:
   10779 Elemental function
   10780 
   10781 @item @emph{Syntax}:
   10782 @code{RESULT = MOD(A, P)}
   10783 
   10784 @item @emph{Arguments}:
   10785 @multitable @columnfractions .15 .70
   10786 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}.
   10787 @item @var{P} @tab Shall be a scalar of the same type and kind as @var{A} 
   10788 and not equal to zero.  (As a GNU extension, arguments of different kinds are
   10789 permitted.)
   10790 @end multitable
   10791 
   10792 @item @emph{Return value}:
   10793 The return value is the result of @code{A - (INT(A/P) * P)}. The type
   10794 and kind of the return value is the same as that of the arguments. The
   10795 returned value has the same sign as A and a magnitude less than the
   10796 magnitude of P.  (As a GNU extension, kind is the largest kind of the actual
   10797 arguments.)
   10798 
   10799 @item @emph{Example}:
   10800 @smallexample
   10801 program test_mod
   10802   print *, mod(17,3)
   10803   print *, mod(17.5,5.5)
   10804   print *, mod(17.5d0,5.5)
   10805   print *, mod(17.5,5.5d0)
   10806 
   10807   print *, mod(-17,3)
   10808   print *, mod(-17.5,5.5)
   10809   print *, mod(-17.5d0,5.5)
   10810   print *, mod(-17.5,5.5d0)
   10811 
   10812   print *, mod(17,-3)
   10813   print *, mod(17.5,-5.5)
   10814   print *, mod(17.5d0,-5.5)
   10815   print *, mod(17.5,-5.5d0)
   10816 end program test_mod
   10817 @end smallexample
   10818 
   10819 @item @emph{Specific names}:
   10820 @multitable @columnfractions .20 .25 .20 .31
   10821 @headitem Name             @tab Arguments          @tab Return type    @tab Standard
   10822 @item @code{MOD(A,P)}  @tab @code{INTEGER A,P} @tab @code{INTEGER} @tab Fortran 77 and later
   10823 @item @code{AMOD(A,P)} @tab @code{REAL(4) A,P} @tab @code{REAL(4)} @tab Fortran 77 and later
   10824 @item @code{DMOD(A,P)} @tab @code{REAL(8) A,P} @tab @code{REAL(8)} @tab Fortran 77 and later
   10825 @item @code{BMOD(A,P)}  @tab @code{INTEGER(1) A,P} @tab @code{INTEGER(1)} @tab GNU extension
   10826 @item @code{IMOD(A,P)}  @tab @code{INTEGER(2) A,P} @tab @code{INTEGER(2)} @tab GNU extension
   10827 @item @code{JMOD(A,P)}  @tab @code{INTEGER(4) A,P} @tab @code{INTEGER(4)} @tab GNU extension
   10828 @item @code{KMOD(A,P)}  @tab @code{INTEGER(8) A,P} @tab @code{INTEGER(8)} @tab GNU extension
   10829 @end multitable
   10830 
   10831 @item @emph{See also}:
   10832 @ref{MODULO}
   10833 
   10834 @end table
   10835 
   10836 
   10837 
   10838 @node MODULO
   10839 @section @code{MODULO} --- Modulo function
   10840 @fnindex MODULO
   10841 @cindex modulo
   10842 @cindex division, modulo
   10843 
   10844 @table @asis
   10845 @item @emph{Description}:
   10846 @code{MODULO(A,P)} computes the @var{A} modulo @var{P}.
   10847 
   10848 @item @emph{Standard}:
   10849 Fortran 95 and later
   10850 
   10851 @item @emph{Class}:
   10852 Elemental function
   10853 
   10854 @item @emph{Syntax}:
   10855 @code{RESULT = MODULO(A, P)}
   10856 
   10857 @item @emph{Arguments}:
   10858 @multitable @columnfractions .15 .70
   10859 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}.
   10860 @item @var{P} @tab Shall be a scalar of the same type and kind as @var{A}. 
   10861 It shall not be zero.  (As a GNU extension, arguments of different kinds are
   10862 permitted.)
   10863 @end multitable
   10864 
   10865 @item @emph{Return value}:
   10866 The type and kind of the result are those of the arguments.  (As a GNU
   10867 extension, kind is the largest kind of the actual arguments.)
   10868 @table @asis
   10869 @item If @var{A} and @var{P} are of type @code{INTEGER}:
   10870 @code{MODULO(A,P)} has the value @var{R} such that @code{A=Q*P+R}, where
   10871 @var{Q} is an integer and @var{R} is between 0 (inclusive) and @var{P}
   10872 (exclusive).
   10873 @item If @var{A} and @var{P} are of type @code{REAL}:
   10874 @code{MODULO(A,P)} has the value of @code{A - FLOOR (A / P) * P}.
   10875 @end table
   10876 The returned value has the same sign as P and a magnitude less than
   10877 the magnitude of P.
   10878 
   10879 @item @emph{Example}:
   10880 @smallexample
   10881 program test_modulo
   10882   print *, modulo(17,3)
   10883   print *, modulo(17.5,5.5)
   10884 
   10885   print *, modulo(-17,3)
   10886   print *, modulo(-17.5,5.5)
   10887 
   10888   print *, modulo(17,-3)
   10889   print *, modulo(17.5,-5.5)
   10890 end program
   10891 @end smallexample
   10892 
   10893 @item @emph{See also}:
   10894 @ref{MOD}
   10895 
   10896 @end table
   10897 
   10898 
   10899 
   10900 @node MOVE_ALLOC
   10901 @section @code{MOVE_ALLOC} --- Move allocation from one object to another
   10902 @fnindex MOVE_ALLOC
   10903 @cindex moving allocation
   10904 @cindex allocation, moving
   10905 
   10906 @table @asis
   10907 @item @emph{Description}:
   10908 @code{MOVE_ALLOC(FROM, TO)} moves the allocation from @var{FROM} to
   10909 @var{TO}.  @var{FROM} will become deallocated in the process.
   10910 
   10911 @item @emph{Standard}:
   10912 Fortran 2003 and later
   10913 
   10914 @item @emph{Class}:
   10915 Pure subroutine
   10916 
   10917 @item @emph{Syntax}:
   10918 @code{CALL MOVE_ALLOC(FROM, TO)}
   10919 
   10920 @item @emph{Arguments}:
   10921 @multitable @columnfractions .15 .70
   10922 @item @var{FROM}  @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be
   10923 of any type and kind.
   10924 @item @var{TO} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be
   10925 of the same type, kind and rank as @var{FROM}.
   10926 @end multitable
   10927 
   10928 @item @emph{Return value}:
   10929 None
   10930 
   10931 @item @emph{Example}:
   10932 @smallexample
   10933 program test_move_alloc
   10934     integer, allocatable :: a(:), b(:)
   10935 
   10936     allocate(a(3))
   10937     a = [ 1, 2, 3 ]
   10938     call move_alloc(a, b)
   10939     print *, allocated(a), allocated(b)
   10940     print *, b
   10941 end program test_move_alloc
   10942 @end smallexample
   10943 @end table
   10944 
   10945 
   10946 
   10947 @node MVBITS
   10948 @section @code{MVBITS} --- Move bits from one integer to another
   10949 @fnindex MVBITS
   10950 @fnindex BMVBITS
   10951 @fnindex IMVBITS
   10952 @fnindex JMVBITS
   10953 @fnindex KMVBITS
   10954 @cindex bits, move
   10955 
   10956 @table @asis
   10957 @item @emph{Description}:
   10958 Moves @var{LEN} bits from positions @var{FROMPOS} through
   10959 @code{FROMPOS+LEN-1} of @var{FROM} to positions @var{TOPOS} through
   10960 @code{TOPOS+LEN-1} of @var{TO}. The portion of argument @var{TO} not
   10961 affected by the movement of bits is unchanged. The values of
   10962 @code{FROMPOS+LEN-1} and @code{TOPOS+LEN-1} must be less than
   10963 @code{BIT_SIZE(FROM)}.
   10964 
   10965 @item @emph{Standard}:
   10966 Fortran 90 and later, has overloads that are GNU extensions
   10967 
   10968 @item @emph{Class}:
   10969 Elemental subroutine
   10970 
   10971 @item @emph{Syntax}:
   10972 @code{CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
   10973 
   10974 @item @emph{Arguments}:
   10975 @multitable @columnfractions .15 .70
   10976 @item @var{FROM}    @tab The type shall be @code{INTEGER}.
   10977 @item @var{FROMPOS} @tab The type shall be @code{INTEGER}.
   10978 @item @var{LEN}     @tab The type shall be @code{INTEGER}.
   10979 @item @var{TO}      @tab The type shall be @code{INTEGER}, of the
   10980 same kind as @var{FROM}.
   10981 @item @var{TOPOS}   @tab The type shall be @code{INTEGER}.
   10982 @end multitable
   10983 
   10984 @item @emph{Specific names}:
   10985 @multitable @columnfractions .20 .23 .20 .33
   10986 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   10987 @item @code{MVBITS(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 90 and later
   10988 @item @code{BMVBITS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   10989 @item @code{IMVBITS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   10990 @item @code{JMVBITS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   10991 @item @code{KMVBITS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   10992 @end multitable
   10993 
   10994 @item @emph{See also}:
   10995 @ref{IBCLR}, @gol
   10996 @ref{IBSET}, @gol
   10997 @ref{IBITS}, @gol
   10998 @ref{IAND}, @gol
   10999 @ref{IOR}, @gol
   11000 @ref{IEOR}
   11001 @end table
   11002 
   11003 
   11004 
   11005 @node NEAREST
   11006 @section @code{NEAREST} --- Nearest representable number
   11007 @fnindex NEAREST
   11008 @cindex real number, nearest different
   11009 @cindex floating point, nearest different
   11010 
   11011 @table @asis
   11012 @item @emph{Description}:
   11013 @code{NEAREST(X, S)} returns the processor-representable number nearest
   11014 to @code{X} in the direction indicated by the sign of @code{S}.
   11015 
   11016 @item @emph{Standard}:
   11017 Fortran 90 and later
   11018 
   11019 @item @emph{Class}:
   11020 Elemental function
   11021 
   11022 @item @emph{Syntax}:
   11023 @code{RESULT = NEAREST(X, S)}
   11024 
   11025 @item @emph{Arguments}:
   11026 @multitable @columnfractions .15 .70
   11027 @item @var{X} @tab Shall be of type @code{REAL}.
   11028 @item @var{S} @tab Shall be of type @code{REAL} and
   11029 not equal to zero.
   11030 @end multitable
   11031 
   11032 @item @emph{Return value}:
   11033 The return value is of the same type as @code{X}. If @code{S} is
   11034 positive, @code{NEAREST} returns the processor-representable number
   11035 greater than @code{X} and nearest to it. If @code{S} is negative,
   11036 @code{NEAREST} returns the processor-representable number smaller than
   11037 @code{X} and nearest to it.
   11038 
   11039 @item @emph{Example}:
   11040 @smallexample
   11041 program test_nearest
   11042   real :: x, y
   11043   x = nearest(42.0, 1.0)
   11044   y = nearest(42.0, -1.0)
   11045   write (*,"(3(G20.15))") x, y, x - y
   11046 end program test_nearest
   11047 @end smallexample
   11048 @end table
   11049 
   11050 
   11051 
   11052 @node NEW_LINE
   11053 @section @code{NEW_LINE} --- New line character
   11054 @fnindex NEW_LINE
   11055 @cindex newline
   11056 @cindex output, newline
   11057 
   11058 @table @asis
   11059 @item @emph{Description}:
   11060 @code{NEW_LINE(C)} returns the new-line character.
   11061 
   11062 @item @emph{Standard}:
   11063 Fortran 2003 and later
   11064 
   11065 @item @emph{Class}:
   11066 Inquiry function
   11067 
   11068 @item @emph{Syntax}:
   11069 @code{RESULT = NEW_LINE(C)}
   11070 
   11071 @item @emph{Arguments}:
   11072 @multitable @columnfractions .15 .70
   11073 @item @var{C}    @tab The argument shall be a scalar or array of the
   11074 type @code{CHARACTER}.
   11075 @end multitable
   11076 
   11077 @item @emph{Return value}:
   11078 Returns a @var{CHARACTER} scalar of length one with the new-line character of
   11079 the same kind as parameter @var{C}.
   11080 
   11081 @item @emph{Example}:
   11082 @smallexample
   11083 program newline
   11084   implicit none
   11085   write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'
   11086 end program newline
   11087 @end smallexample
   11088 @end table
   11089 
   11090 
   11091 
   11092 @node NINT
   11093 @section @code{NINT} --- Nearest whole number
   11094 @fnindex NINT
   11095 @fnindex IDNINT
   11096 @cindex rounding, nearest whole number
   11097 
   11098 @table @asis
   11099 @item @emph{Description}:
   11100 @code{NINT(A)} rounds its argument to the nearest whole number.
   11101 
   11102 @item @emph{Standard}:
   11103 Fortran 77 and later, with @var{KIND} argument Fortran 90 and later
   11104 
   11105 @item @emph{Class}:
   11106 Elemental function
   11107 
   11108 @item @emph{Syntax}:
   11109 @code{RESULT = NINT(A [, KIND])}
   11110 
   11111 @item @emph{Arguments}:
   11112 @multitable @columnfractions .15 .70
   11113 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
   11114 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   11115 expression indicating the kind parameter of the result.
   11116 @end multitable
   11117 
   11118 @item @emph{Return value}:
   11119 Returns @var{A} with the fractional portion of its magnitude eliminated by
   11120 rounding to the nearest whole number and with its sign preserved,
   11121 converted to an @code{INTEGER} of the default kind.
   11122 
   11123 @item @emph{Example}:
   11124 @smallexample
   11125 program test_nint
   11126   real(4) x4
   11127   real(8) x8
   11128   x4 = 1.234E0_4
   11129   x8 = 4.321_8
   11130   print *, nint(x4), idnint(x8)
   11131 end program test_nint
   11132 @end smallexample
   11133 
   11134 @item @emph{Specific names}:
   11135 @multitable @columnfractions .20 .23 .20 .33
   11136 @headitem Name             @tab Argument           @tab Return Type     @tab Standard
   11137 @item @code{NINT(A)}   @tab @code{REAL(4) A}   @tab  @code{INTEGER} @tab Fortran 77 and later
   11138 @item @code{IDNINT(A)} @tab @code{REAL(8) A}   @tab  @code{INTEGER} @tab Fortran 77 and later
   11139 @end multitable
   11140 
   11141 @item @emph{See also}:
   11142 @ref{CEILING}, @gol
   11143 @ref{FLOOR}
   11144 @end table
   11145 
   11146 
   11147 
   11148 @node NORM2
   11149 @section @code{NORM2} --- Euclidean vector norms
   11150 @fnindex NORM2
   11151 @cindex Euclidean vector norm
   11152 @cindex L2 vector norm
   11153 @cindex norm, Euclidean
   11154 
   11155 @table @asis
   11156 @item @emph{Description}:
   11157 Calculates the Euclidean vector norm (@math{L_2} norm)
   11158 of @var{ARRAY} along dimension @var{DIM}.
   11159 
   11160 @item @emph{Standard}:
   11161 Fortran 2008 and later
   11162 
   11163 @item @emph{Class}:
   11164 Transformational function
   11165 
   11166 @item @emph{Syntax}:
   11167 @multitable @columnfractions .80
   11168 @item @code{RESULT = NORM2(ARRAY[, DIM])}
   11169 @end multitable
   11170 
   11171 @item @emph{Arguments}:
   11172 @multitable @columnfractions .15 .70
   11173 @item @var{ARRAY} @tab Shall be an array of type @code{REAL}
   11174 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   11175 @code{INTEGER} with a value in the range from 1 to n, where n 
   11176 equals the rank of @var{ARRAY}.
   11177 @end multitable
   11178 
   11179 @item @emph{Return value}:
   11180 The result is of the same type as @var{ARRAY}.
   11181 
   11182 If @var{DIM} is absent, a scalar with the square root of the sum of all
   11183 elements in @var{ARRAY} squared  is returned. Otherwise, an array of
   11184 rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY}, and a
   11185 shape similar to that of @var{ARRAY} with dimension @var{DIM} dropped
   11186 is returned.
   11187 
   11188 @item @emph{Example}:
   11189 @smallexample
   11190 PROGRAM test_sum
   11191   REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]
   11192   print *, NORM2(x)  ! = sqrt(55.) ~ 7.416
   11193 END PROGRAM
   11194 @end smallexample
   11195 @end table
   11196 
   11197 
   11198 
   11199 @node NOT
   11200 @section @code{NOT} --- Logical negation
   11201 @fnindex NOT
   11202 @fnindex BNOT
   11203 @fnindex INOT
   11204 @fnindex JNOT
   11205 @fnindex KNOT
   11206 @cindex bits, negate
   11207 @cindex bitwise logical not
   11208 @cindex logical not, bitwise
   11209 
   11210 @table @asis
   11211 @item @emph{Description}:
   11212 @code{NOT} returns the bitwise Boolean inverse of @var{I}.
   11213 
   11214 @item @emph{Standard}:
   11215 Fortran 90 and later, has overloads that are GNU extensions
   11216 
   11217 @item @emph{Class}:
   11218 Elemental function
   11219 
   11220 @item @emph{Syntax}:
   11221 @code{RESULT = NOT(I)}
   11222 
   11223 @item @emph{Arguments}:
   11224 @multitable @columnfractions .15 .70
   11225 @item @var{I} @tab The type shall be @code{INTEGER}.
   11226 @end multitable
   11227 
   11228 @item @emph{Return value}:
   11229 The return type is @code{INTEGER}, of the same kind as the
   11230 argument.
   11231 
   11232 @item @emph{Specific names}:
   11233 @multitable @columnfractions .20 .23 .20 .33
   11234 @headitem Name            @tab Argument            @tab Return type       @tab Standard
   11235 @item @code{NOT(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   11236 @item @code{BNOT(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   11237 @item @code{INOT(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   11238 @item @code{JNOT(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   11239 @item @code{KNOT(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   11240 @end multitable
   11241 
   11242 @item @emph{See also}:
   11243 @ref{IAND}, @gol
   11244 @ref{IEOR}, @gol
   11245 @ref{IOR}, @gol
   11246 @ref{IBITS}, @gol
   11247 @ref{IBSET}, @gol
   11248 @ref{IBCLR}
   11249 @end table
   11250 
   11251 
   11252 
   11253 @node NULL
   11254 @section @code{NULL} --- Function that returns an disassociated pointer
   11255 @fnindex NULL
   11256 @cindex pointer, status
   11257 @cindex pointer, disassociated
   11258 
   11259 @table @asis
   11260 @item @emph{Description}:
   11261 Returns a disassociated pointer.
   11262 
   11263 If @var{MOLD} is present, a disassociated pointer of the same type is
   11264 returned, otherwise the type is determined by context.
   11265 
   11266 In Fortran 95, @var{MOLD} is optional. Please note that Fortran 2003
   11267 includes cases where it is required.
   11268 
   11269 @item @emph{Standard}:
   11270 Fortran 95 and later
   11271 
   11272 @item @emph{Class}:
   11273 Transformational function
   11274 
   11275 @item @emph{Syntax}:
   11276 @code{PTR => NULL([MOLD])}
   11277 
   11278 @item @emph{Arguments}:
   11279 @multitable @columnfractions .15 .70
   11280 @item @var{MOLD} @tab (Optional) shall be a pointer of any association
   11281 status and of any type.
   11282 @end multitable
   11283 
   11284 @item @emph{Return value}:
   11285 A disassociated pointer.
   11286 
   11287 @item @emph{Example}:
   11288 @smallexample
   11289 REAL, POINTER, DIMENSION(:) :: VEC => NULL ()
   11290 @end smallexample
   11291 
   11292 @item @emph{See also}:
   11293 @ref{ASSOCIATED}
   11294 @end table
   11295 
   11296 
   11297 
   11298 @node NUM_IMAGES
   11299 @section @code{NUM_IMAGES} --- Function that returns the number of images
   11300 @fnindex NUM_IMAGES
   11301 @cindex coarray, @code{NUM_IMAGES}
   11302 @cindex images, number of
   11303 
   11304 @table @asis
   11305 @item @emph{Description}:
   11306 Returns the number of images.
   11307 
   11308 @item @emph{Standard}:
   11309 Fortran 2008 and later. With @var{DISTANCE} or @var{FAILED} argument, 
   11310 Technical Specification (TS) 18508 or later
   11311 
   11312 
   11313 @item @emph{Class}:
   11314 Transformational function
   11315 
   11316 @item @emph{Syntax}:
   11317 @code{RESULT = NUM_IMAGES(DISTANCE, FAILED)}
   11318 
   11319 @item @emph{Arguments}:
   11320 @multitable @columnfractions .15 .70
   11321 @item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer
   11322 @item @var{FAILED}   @tab (optional, intent(in)) Scalar logical expression
   11323 @end multitable
   11324 
   11325 @item @emph{Return value}:
   11326 Scalar default-kind integer.  If @var{DISTANCE} is not present or has value 0,
   11327 the number of images in the current team is returned. For values smaller or
   11328 equal distance to the initial team, it returns the number of images index
   11329 on the ancestor team which has a distance of @var{DISTANCE} from the invoking
   11330 team. If @var{DISTANCE} is larger than the distance to the initial team, the
   11331 number of images of the initial team is returned. If @var{FAILED} is not present
   11332 the total number of images is returned; if it has the value @code{.TRUE.},
   11333 the number of failed images is returned, otherwise, the number of images which
   11334 do have not the failed status.
   11335 
   11336 @item @emph{Example}:
   11337 @smallexample
   11338 INTEGER :: value[*]
   11339 INTEGER :: i
   11340 value = THIS_IMAGE()
   11341 SYNC ALL
   11342 IF (THIS_IMAGE() == 1) THEN
   11343   DO i = 1, NUM_IMAGES()
   11344     WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
   11345   END DO
   11346 END IF
   11347 @end smallexample
   11348 
   11349 @item @emph{See also}:
   11350 @ref{THIS_IMAGE}, @gol
   11351 @ref{IMAGE_INDEX}
   11352 @end table
   11353 
   11354 
   11355 
   11356 @node OR
   11357 @section @code{OR} --- Bitwise logical OR
   11358 @fnindex OR
   11359 @cindex bitwise logical or
   11360 @cindex logical or, bitwise
   11361 
   11362 @table @asis
   11363 @item @emph{Description}:
   11364 Bitwise logical @code{OR}.
   11365 
   11366 This intrinsic routine is provided for backwards compatibility with 
   11367 GNU Fortran 77.  For integer arguments, programmers should consider
   11368 the use of the @ref{IOR} intrinsic defined by the Fortran standard.
   11369 
   11370 @item @emph{Standard}:
   11371 GNU extension
   11372 
   11373 @item @emph{Class}:
   11374 Function
   11375 
   11376 @item @emph{Syntax}:
   11377 @code{RESULT = OR(I, J)}
   11378 
   11379 @item @emph{Arguments}:
   11380 @multitable @columnfractions .15 .70
   11381 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
   11382 type or a scalar @code{LOGICAL} type or a boz-literal-constant.
   11383 @item @var{J} @tab The type shall be the same as the type of @var{I} or
   11384 a boz-literal-constant. @var{I} and @var{J} shall not both be
   11385 boz-literal-constants.  If either @var{I} and @var{J} is a
   11386 boz-literal-constant, then the other argument must be a scalar @code{INTEGER}.
   11387 @end multitable
   11388 
   11389 @item @emph{Return value}:
   11390 The return type is either a scalar @code{INTEGER} or a scalar
   11391 @code{LOGICAL}.  If the kind type parameters differ, then the
   11392 smaller kind type is implicitly converted to larger kind, and the 
   11393 return has the larger kind.  A boz-literal-constant is 
   11394 converted to an @code{INTEGER} with the kind type parameter of
   11395 the other argument as-if a call to @ref{INT} occurred.
   11396 
   11397 @item @emph{Example}:
   11398 @smallexample
   11399 PROGRAM test_or
   11400   LOGICAL :: T = .TRUE., F = .FALSE.
   11401   INTEGER :: a, b
   11402   DATA a / Z'F' /, b / Z'3' /
   11403 
   11404   WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)
   11405   WRITE (*,*) OR(a, b)
   11406 END PROGRAM
   11407 @end smallexample
   11408 
   11409 @item @emph{See also}:
   11410 Fortran 95 elemental function: @gol
   11411 @ref{IOR}
   11412 @end table
   11413 
   11414 
   11415 
   11416 @node PACK
   11417 @section @code{PACK} --- Pack an array into an array of rank one
   11418 @fnindex PACK
   11419 @cindex array, packing
   11420 @cindex array, reduce dimension
   11421 @cindex array, gather elements
   11422 
   11423 @table @asis
   11424 @item @emph{Description}:
   11425 Stores the elements of @var{ARRAY} in an array of rank one.
   11426 
   11427 The beginning of the resulting array is made up of elements whose @var{MASK} 
   11428 equals @code{TRUE}. Afterwards, positions are filled with elements taken from
   11429 @var{VECTOR}.
   11430 
   11431 @item @emph{Standard}:
   11432 Fortran 90 and later
   11433 
   11434 @item @emph{Class}:
   11435 Transformational function
   11436 
   11437 @item @emph{Syntax}:
   11438 @code{RESULT = PACK(ARRAY, MASK[,VECTOR])}
   11439 
   11440 @item @emph{Arguments}:
   11441 @multitable @columnfractions .15 .70
   11442 @item @var{ARRAY}  @tab Shall be an array of any type.
   11443 @item @var{MASK}   @tab Shall be an array of type @code{LOGICAL} and 
   11444 of the same size as @var{ARRAY}. Alternatively, it may be a @code{LOGICAL} 
   11445 scalar.
   11446 @item @var{VECTOR} @tab (Optional) shall be an array of the same type 
   11447 as @var{ARRAY} and of rank one. If present, the number of elements in 
   11448 @var{VECTOR} shall be equal to or greater than the number of true elements 
   11449 in @var{MASK}. If @var{MASK} is scalar, the number of elements in 
   11450 @var{VECTOR} shall be equal to or greater than the number of elements in
   11451 @var{ARRAY}.
   11452 @end multitable
   11453 
   11454 @item @emph{Return value}:
   11455 The result is an array of rank one and the same type as that of @var{ARRAY}.
   11456 If @var{VECTOR} is present, the result size is that of @var{VECTOR}, the
   11457 number of @code{TRUE} values in @var{MASK} otherwise.
   11458 
   11459 @item @emph{Example}:
   11460 Gathering nonzero elements from an array:
   11461 @smallexample
   11462 PROGRAM test_pack_1
   11463   INTEGER :: m(6)
   11464   m = (/ 1, 0, 0, 0, 5, 0 /)
   11465   WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0)  ! "1 5"
   11466 END PROGRAM
   11467 @end smallexample
   11468 
   11469 Gathering nonzero elements from an array and appending elements from @var{VECTOR}:
   11470 @smallexample
   11471 PROGRAM test_pack_2
   11472   INTEGER :: m(4)
   11473   m = (/ 1, 0, 0, 2 /)
   11474   ! The following results in "1 2 3 4"
   11475   WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /))
   11476 END PROGRAM
   11477 @end smallexample
   11478 
   11479 @item @emph{See also}:
   11480 @ref{UNPACK}
   11481 @end table
   11482 
   11483 
   11484 
   11485 @node PARITY
   11486 @section @code{PARITY} --- Reduction with exclusive OR
   11487 @fnindex PARITY
   11488 @cindex Parity
   11489 @cindex Reduction, XOR
   11490 @cindex XOR reduction
   11491 
   11492 @table @asis
   11493 @item @emph{Description}:
   11494 Calculates the parity, i.e. the reduction using @code{.XOR.},
   11495 of @var{MASK} along dimension @var{DIM}.
   11496 
   11497 @item @emph{Standard}:
   11498 Fortran 2008 and later
   11499 
   11500 @item @emph{Class}:
   11501 Transformational function
   11502 
   11503 @item @emph{Syntax}:
   11504 @multitable @columnfractions .80
   11505 @item @code{RESULT = PARITY(MASK[, DIM])}
   11506 @end multitable
   11507 
   11508 @item @emph{Arguments}:
   11509 @multitable @columnfractions .15 .70
   11510 @item @var{MASK} @tab Shall be an array of type @code{LOGICAL}
   11511 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   11512 @code{INTEGER} with a value in the range from 1 to n, where n 
   11513 equals the rank of @var{MASK}.
   11514 @end multitable
   11515 
   11516 @item @emph{Return value}:
   11517 The result is of the same type as @var{MASK}.
   11518 
   11519 If @var{DIM} is absent, a scalar with the parity of all elements in
   11520 @var{MASK} is returned, i.e. true if an odd number of elements is
   11521 @code{.true.} and false otherwise.  If @var{DIM} is present, an array
   11522 of rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY},
   11523 and a shape similar to that of @var{MASK} with dimension @var{DIM}
   11524 dropped is returned.
   11525 
   11526 @item @emph{Example}:
   11527 @smallexample
   11528 PROGRAM test_sum
   11529   LOGICAL :: x(2) = [ .true., .false. ]
   11530   print *, PARITY(x) ! prints "T" (true).
   11531 END PROGRAM
   11532 @end smallexample
   11533 @end table
   11534 
   11535 
   11536 
   11537 @node PERROR
   11538 @section @code{PERROR} --- Print system error message
   11539 @fnindex PERROR
   11540 @cindex system, error handling
   11541 
   11542 @table @asis
   11543 @item @emph{Description}:
   11544 Prints (on the C @code{stderr} stream) a newline-terminated error
   11545 message corresponding to the last system error. This is prefixed by
   11546 @var{STRING}, a colon and a space. See @code{perror(3)}.
   11547 
   11548 @item @emph{Standard}:
   11549 GNU extension
   11550 
   11551 @item @emph{Class}:
   11552 Subroutine
   11553 
   11554 @item @emph{Syntax}:
   11555 @code{CALL PERROR(STRING)}
   11556 
   11557 @item @emph{Arguments}:
   11558 @multitable @columnfractions .15 .70
   11559 @item @var{STRING} @tab A scalar of type @code{CHARACTER} and of the
   11560 default kind.
   11561 @end multitable
   11562 
   11563 @item @emph{See also}:
   11564 @ref{IERRNO}
   11565 @end table
   11566 
   11567 
   11568 
   11569 @node POPCNT
   11570 @section @code{POPCNT} --- Number of bits set
   11571 @fnindex POPCNT
   11572 @cindex binary representation
   11573 @cindex bits set
   11574 
   11575 @table @asis
   11576 @item @emph{Description}:
   11577 @code{POPCNT(I)} returns the number of bits set ('1' bits) in the binary
   11578 representation of @code{I}.
   11579 
   11580 @item @emph{Standard}:
   11581 Fortran 2008 and later
   11582 
   11583 @item @emph{Class}:
   11584 Elemental function
   11585 
   11586 @item @emph{Syntax}:
   11587 @code{RESULT = POPCNT(I)}
   11588 
   11589 @item @emph{Arguments}:
   11590 @multitable @columnfractions .15 .70
   11591 @item @var{I} @tab Shall be of type @code{INTEGER}.
   11592 @end multitable
   11593 
   11594 @item @emph{Return value}:
   11595 The return value is of type @code{INTEGER} and of the default integer
   11596 kind.
   11597 
   11598 @item @emph{Example}:
   11599 @smallexample
   11600 program test_population
   11601   print *, popcnt(127),       poppar(127)
   11602   print *, popcnt(huge(0_4)), poppar(huge(0_4))
   11603   print *, popcnt(huge(0_8)), poppar(huge(0_8))
   11604 end program test_population
   11605 @end smallexample
   11606 @item @emph{See also}:
   11607 @ref{POPPAR}, @gol
   11608 @ref{LEADZ}, @gol
   11609 @ref{TRAILZ}
   11610 @end table
   11611 
   11612 
   11613 
   11614 @node POPPAR
   11615 @section @code{POPPAR} --- Parity of the number of bits set
   11616 @fnindex POPPAR
   11617 @cindex binary representation
   11618 @cindex parity
   11619 
   11620 @table @asis
   11621 @item @emph{Description}:
   11622 @code{POPPAR(I)} returns parity of the integer @code{I}, i.e. the parity
   11623 of the number of bits set ('1' bits) in the binary representation of
   11624 @code{I}. It is equal to 0 if @code{I} has an even number of bits set,
   11625 and 1 for an odd number of '1' bits.
   11626 
   11627 @item @emph{Standard}:
   11628 Fortran 2008 and later
   11629 
   11630 @item @emph{Class}:
   11631 Elemental function
   11632 
   11633 @item @emph{Syntax}:
   11634 @code{RESULT = POPPAR(I)}
   11635 
   11636 @item @emph{Arguments}:
   11637 @multitable @columnfractions .15 .70
   11638 @item @var{I} @tab Shall be of type @code{INTEGER}.
   11639 @end multitable
   11640 
   11641 @item @emph{Return value}:
   11642 The return value is of type @code{INTEGER} and of the default integer
   11643 kind.
   11644 
   11645 @item @emph{Example}:
   11646 @smallexample
   11647 program test_population
   11648   print *, popcnt(127),       poppar(127)
   11649   print *, popcnt(huge(0_4)), poppar(huge(0_4))
   11650   print *, popcnt(huge(0_8)), poppar(huge(0_8))
   11651 end program test_population
   11652 @end smallexample
   11653 @item @emph{See also}:
   11654 @ref{POPCNT}, @gol
   11655 @ref{LEADZ}, @gol
   11656 @ref{TRAILZ}
   11657 @end table
   11658 
   11659 
   11660 
   11661 @node PRECISION
   11662 @section @code{PRECISION} --- Decimal precision of a real kind
   11663 @fnindex PRECISION
   11664 @cindex model representation, precision
   11665 
   11666 @table @asis
   11667 @item @emph{Description}:
   11668 @code{PRECISION(X)} returns the decimal precision in the model of the
   11669 type of @code{X}.
   11670 
   11671 @item @emph{Standard}:
   11672 Fortran 90 and later
   11673 
   11674 @item @emph{Class}:
   11675 Inquiry function
   11676 
   11677 @item @emph{Syntax}:
   11678 @code{RESULT = PRECISION(X)}
   11679 
   11680 @item @emph{Arguments}:
   11681 @multitable @columnfractions .15 .70
   11682 @item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}. It may
   11683 be scalar or valued.
   11684 @end multitable
   11685 
   11686 @item @emph{Return value}:
   11687 The return value is of type @code{INTEGER} and of the default integer
   11688 kind.
   11689 
   11690 @item @emph{Example}:
   11691 @smallexample
   11692 program prec_and_range
   11693   real(kind=4) :: x(2)
   11694   complex(kind=8) :: y
   11695 
   11696   print *, precision(x), range(x)
   11697   print *, precision(y), range(y)
   11698 end program prec_and_range
   11699 @end smallexample
   11700 @item @emph{See also}:
   11701 @ref{SELECTED_REAL_KIND}, @gol
   11702 @ref{RANGE}
   11703 @end table
   11704 
   11705 
   11706 
   11707 @node PRESENT
   11708 @section @code{PRESENT} --- Determine whether an optional dummy argument is specified
   11709 @fnindex PRESENT
   11710 
   11711 @table @asis
   11712 @item @emph{Description}:
   11713 Determines whether an optional dummy argument is present.
   11714 
   11715 @item @emph{Standard}:
   11716 Fortran 90 and later
   11717 
   11718 @item @emph{Class}:
   11719 Inquiry function
   11720 
   11721 @item @emph{Syntax}:
   11722 @code{RESULT = PRESENT(A)}
   11723 
   11724 @item @emph{Arguments}:
   11725 @multitable @columnfractions .15 .70
   11726 @item @var{A} @tab May be of any type and may be a pointer, scalar or array
   11727 value, or a dummy procedure. It shall be the name of an optional dummy argument
   11728 accessible within the current subroutine or function.
   11729 @end multitable
   11730 
   11731 @item @emph{Return value}:
   11732 Returns either @code{TRUE} if the optional argument @var{A} is present, or
   11733 @code{FALSE} otherwise.
   11734 
   11735 @item @emph{Example}:
   11736 @smallexample
   11737 PROGRAM test_present
   11738   WRITE(*,*) f(), f(42)      ! "F T"
   11739 CONTAINS
   11740   LOGICAL FUNCTION f(x)
   11741     INTEGER, INTENT(IN), OPTIONAL :: x
   11742     f = PRESENT(x)
   11743   END FUNCTION
   11744 END PROGRAM
   11745 @end smallexample
   11746 @end table
   11747 
   11748 
   11749 
   11750 @node PRODUCT
   11751 @section @code{PRODUCT} --- Product of array elements
   11752 @fnindex PRODUCT
   11753 @cindex array, product
   11754 @cindex array, multiply elements
   11755 @cindex array, conditionally multiply elements
   11756 @cindex multiply array elements
   11757 
   11758 @table @asis
   11759 @item @emph{Description}:
   11760 Multiplies the elements of @var{ARRAY} along dimension @var{DIM} if
   11761 the corresponding element in @var{MASK} is @code{TRUE}.
   11762 
   11763 @item @emph{Standard}:
   11764 Fortran 90 and later
   11765 
   11766 @item @emph{Class}:
   11767 Transformational function
   11768 
   11769 @item @emph{Syntax}:
   11770 @multitable @columnfractions .80
   11771 @item @code{RESULT = PRODUCT(ARRAY[, MASK])}
   11772 @item @code{RESULT = PRODUCT(ARRAY, DIM[, MASK])}
   11773 @end multitable
   11774 
   11775 @item @emph{Arguments}:
   11776 @multitable @columnfractions .15 .70
   11777 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, 
   11778 @code{REAL} or @code{COMPLEX}.
   11779 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   11780 @code{INTEGER} with a value in the range from 1 to n, where n 
   11781 equals the rank of @var{ARRAY}.
   11782 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   11783 and either be a scalar or an array of the same shape as @var{ARRAY}.
   11784 @end multitable
   11785 
   11786 @item @emph{Return value}:
   11787 The result is of the same type as @var{ARRAY}.
   11788 
   11789 If @var{DIM} is absent, a scalar with the product of all elements in 
   11790 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals 
   11791 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with 
   11792 dimension @var{DIM} dropped is returned.
   11793 
   11794 
   11795 @item @emph{Example}:
   11796 @smallexample
   11797 PROGRAM test_product
   11798   INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
   11799   print *, PRODUCT(x)                    ! all elements, product = 120
   11800   print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15
   11801 END PROGRAM
   11802 @end smallexample
   11803 
   11804 @item @emph{See also}:
   11805 @ref{SUM}
   11806 @end table
   11807 
   11808 
   11809 
   11810 @node RADIX
   11811 @section @code{RADIX} --- Base of a model number
   11812 @fnindex RADIX
   11813 @cindex model representation, base
   11814 @cindex model representation, radix
   11815 
   11816 @table @asis
   11817 @item @emph{Description}:
   11818 @code{RADIX(X)} returns the base of the model representing the entity @var{X}.
   11819 
   11820 @item @emph{Standard}:
   11821 Fortran 90 and later
   11822 
   11823 @item @emph{Class}:
   11824 Inquiry function
   11825 
   11826 @item @emph{Syntax}:
   11827 @code{RESULT = RADIX(X)}
   11828 
   11829 @item @emph{Arguments}:
   11830 @multitable @columnfractions .15 .70
   11831 @item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
   11832 @end multitable
   11833 
   11834 @item @emph{Return value}:
   11835 The return value is a scalar of type @code{INTEGER} and of the default
   11836 integer kind.
   11837 
   11838 @item @emph{Example}:
   11839 @smallexample
   11840 program test_radix
   11841   print *, "The radix for the default integer kind is", radix(0)
   11842   print *, "The radix for the default real kind is", radix(0.0)
   11843 end program test_radix
   11844 @end smallexample
   11845 @item @emph{See also}:
   11846 @ref{SELECTED_REAL_KIND}
   11847 @end table
   11848 
   11849 
   11850 
   11851 @node RAN
   11852 @section @code{RAN} --- Real pseudo-random number
   11853 @fnindex RAN
   11854 @cindex random number generation
   11855 
   11856 @table @asis
   11857 @item @emph{Description}:
   11858 For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is
   11859 provided as an alias for @code{RAND}.  See @ref{RAND} for complete
   11860 documentation.
   11861 
   11862 @item @emph{Standard}:
   11863 GNU extension
   11864 
   11865 @item @emph{Class}:
   11866 Function
   11867 
   11868 @item @emph{See also}:
   11869 @ref{RAND}, @gol
   11870 @ref{RANDOM_NUMBER}
   11871 @end table
   11872 
   11873 
   11874 
   11875 @node RAND
   11876 @section @code{RAND} --- Real pseudo-random number
   11877 @fnindex RAND
   11878 @cindex random number generation
   11879 
   11880 @table @asis
   11881 @item @emph{Description}:
   11882 @code{RAND(FLAG)} returns a pseudo-random number from a uniform
   11883 distribution between 0 and 1. If @var{FLAG} is 0, the next number
   11884 in the current sequence is returned; if @var{FLAG} is 1, the generator
   11885 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
   11886 it is used as a new seed with @code{SRAND}.
   11887 
   11888 This intrinsic routine is provided for backwards compatibility with
   11889 GNU Fortran 77. It implements a simple modulo generator as provided 
   11890 by @command{g77}. For new code, one should consider the use of 
   11891 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
   11892 
   11893 @item @emph{Standard}:
   11894 GNU extension
   11895 
   11896 @item @emph{Class}:
   11897 Function
   11898 
   11899 @item @emph{Syntax}:
   11900 @code{RESULT = RAND(I)}
   11901 
   11902 @item @emph{Arguments}:
   11903 @multitable @columnfractions .15 .70
   11904 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
   11905 @end multitable
   11906 
   11907 @item @emph{Return value}:
   11908 The return value is of @code{REAL} type and the default kind.
   11909 
   11910 @item @emph{Example}:
   11911 @smallexample
   11912 program test_rand
   11913   integer,parameter :: seed = 86456
   11914   
   11915   call srand(seed)
   11916   print *, rand(), rand(), rand(), rand()
   11917   print *, rand(seed), rand(), rand(), rand()
   11918 end program test_rand
   11919 @end smallexample
   11920 
   11921 @item @emph{See also}:
   11922 @ref{SRAND}, @gol
   11923 @ref{RANDOM_NUMBER}
   11924 
   11925 @end table
   11926 
   11927 
   11928 @node RANDOM_INIT
   11929 @section @code{RANDOM_INIT} --- Initialize a pseudo-random number generator
   11930 @fnindex RANDOM_INIT
   11931 @cindex random number generation, initialization
   11932 
   11933 @table @asis
   11934 @item @emph{Description}:
   11935 Initializes the state of the pseudorandom number generator used by 
   11936 @code{RANDOM_NUMBER}.
   11937 
   11938 @item @emph{Standard}:
   11939 Fortran 2018
   11940 
   11941 @item @emph{Class}:
   11942 Subroutine
   11943 
   11944 @item @emph{Syntax}:
   11945 @code{CALL RANDOM_INIT(REPEATABLE, IMAGE_DISTINCT)}
   11946 
   11947 @item @emph{Arguments}:
   11948 @multitable @columnfractions .25 .70
   11949 @item @var{REPEATABLE} @tab Shall be a scalar with a @code{LOGICAL} type,
   11950 and it is @code{INTENT(IN)}.  If it is @code{.true.}, the seed is set to
   11951 a processor-dependent value that is the same each time @code{RANDOM_INIT}
   11952 is called from the same image.  The term ``same image'' means a single
   11953 instance of program execution.  The sequence of random numbers is different
   11954 for repeated execution of the program.  If it is @code{.false.}, the seed
   11955 is set to a processor-dependent value.
   11956 @item @var{IMAGE_DISTINCT} @tab Shall be a scalar with a
   11957 @code{LOGICAL} type, and it is @code{INTENT(IN)}.  If it is @code{.true.},
   11958 the seed is set to a processor-dependent value that is distinct from th
   11959 seed set by a call to @code{RANDOM_INIT} in another image.  If it is
   11960 @code{.false.}, the seed is set to a value that does depend which image called
   11961 @code{RANDOM_INIT}.
   11962 @end multitable
   11963 
   11964 @item @emph{Example}:
   11965 @smallexample
   11966 program test_random_seed
   11967   implicit none
   11968   real x(3), y(3)
   11969   call random_init(.true., .true.)
   11970   call random_number(x)
   11971   call random_init(.true., .true.)
   11972   call random_number(y)
   11973   ! x and y are the same sequence
   11974   if (any(x /= y)) call abort
   11975 end program test_random_seed
   11976 @end smallexample
   11977 
   11978 @item @emph{See also}:
   11979 @ref{RANDOM_NUMBER}, @gol
   11980 @ref{RANDOM_SEED}
   11981 @end table
   11982 
   11983 
   11984 @node RANDOM_NUMBER
   11985 @section @code{RANDOM_NUMBER} --- Pseudo-random number
   11986 @fnindex RANDOM_NUMBER
   11987 @cindex random number generation
   11988 
   11989 @table @asis
   11990 @item @emph{Description}:
   11991 Returns a single pseudorandom number or an array of pseudorandom numbers
   11992 from the uniform distribution over the range @math{ 0 \leq x < 1}.
   11993 
   11994 The runtime-library implements the xoshiro256** pseudorandom number
   11995 generator (PRNG). This generator has a period of @math{2^{256} - 1},
   11996 and when using multiple threads up to @math{2^{128}} threads can each
   11997 generate @math{2^{128}} random numbers before any aliasing occurs.
   11998 
   11999 Note that in a multi-threaded program (e.g. using OpenMP directives),
   12000 each thread will have its own random number state. For details of the
   12001 seeding procedure, see the documentation for the @code{RANDOM_SEED}
   12002 intrinsic.
   12003 
   12004 
   12005 @item @emph{Standard}:
   12006 Fortran 90 and later
   12007 
   12008 @item @emph{Class}:
   12009 Subroutine
   12010 
   12011 @item @emph{Syntax}:
   12012 @code{CALL RANDOM_NUMBER(HARVEST)}
   12013 
   12014 @item @emph{Arguments}:
   12015 @multitable @columnfractions .15 .70
   12016 @item @var{HARVEST} @tab Shall be a scalar or an array of type @code{REAL}.
   12017 @end multitable
   12018 
   12019 @item @emph{Example}:
   12020 @smallexample
   12021 program test_random_number
   12022   REAL :: r(5,5)
   12023   CALL RANDOM_NUMBER(r)
   12024 end program
   12025 @end smallexample
   12026 
   12027 @item @emph{See also}:
   12028 @ref{RANDOM_SEED}, @gol
   12029 @ref{RANDOM_INIT}
   12030 @end table
   12031 
   12032 
   12033 
   12034 @node RANDOM_SEED
   12035 @section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence
   12036 @fnindex RANDOM_SEED
   12037 @cindex random number generation, seeding
   12038 @cindex seeding a random number generator
   12039 
   12040 @table @asis
   12041 @item @emph{Description}:
   12042 Restarts or queries the state of the pseudorandom number generator used by 
   12043 @code{RANDOM_NUMBER}.
   12044 
   12045 If @code{RANDOM_SEED} is called without arguments, it is seeded with
   12046 random data retrieved from the operating system.
   12047 
   12048 As an extension to the Fortran standard, the GFortran
   12049 @code{RANDOM_NUMBER} supports multiple threads. Each thread in a
   12050 multi-threaded program has its own seed.  When @code{RANDOM_SEED} is
   12051 called either without arguments or with the @var{PUT} argument, the
   12052 given seed is copied into a master seed as well as the seed of the
   12053 current thread. When a new thread uses @code{RANDOM_NUMBER} for the
   12054 first time, the seed is copied from the master seed, and forwarded
   12055 @math{N * 2^{128}} steps to guarantee that the random stream does not
   12056 alias any other stream in the system, where @var{N} is the number of
   12057 threads that have used @code{RANDOM_NUMBER} so far during the program
   12058 execution.
   12059 
   12060 @item @emph{Standard}:
   12061 Fortran 90 and later
   12062 
   12063 @item @emph{Class}:
   12064 Subroutine
   12065 
   12066 @item @emph{Syntax}:
   12067 @code{CALL RANDOM_SEED([SIZE, PUT, GET])}
   12068 
   12069 @item @emph{Arguments}:
   12070 @multitable @columnfractions .15 .70
   12071 @item @var{SIZE} @tab (Optional) Shall be a scalar and of type default 
   12072 @code{INTEGER}, with @code{INTENT(OUT)}. It specifies the minimum size 
   12073 of the arrays used with the @var{PUT} and @var{GET} arguments.
   12074 @item @var{PUT}  @tab (Optional) Shall be an array of type default 
   12075 @code{INTEGER} and rank one. It is @code{INTENT(IN)} and the size of 
   12076 the array must be larger than or equal to the number returned by the 
   12077 @var{SIZE} argument.
   12078 @item @var{GET}  @tab (Optional) Shall be an array of type default 
   12079 @code{INTEGER} and rank one. It is @code{INTENT(OUT)} and the size 
   12080 of the array must be larger than or equal to the number returned by 
   12081 the @var{SIZE} argument.
   12082 @end multitable
   12083 
   12084 @item @emph{Example}:
   12085 @smallexample
   12086 program test_random_seed
   12087   implicit none
   12088   integer, allocatable :: seed(:)
   12089   integer :: n
   12090 
   12091   call random_seed(size = n)
   12092   allocate(seed(n))
   12093   call random_seed(get=seed)
   12094   write (*, *) seed
   12095 end program test_random_seed
   12096 @end smallexample
   12097 
   12098 @item @emph{See also}:
   12099 @ref{RANDOM_NUMBER}, @gol
   12100 @ref{RANDOM_INIT}
   12101 @end table
   12102 
   12103 
   12104 
   12105 @node RANGE
   12106 @section @code{RANGE} --- Decimal exponent range
   12107 @fnindex RANGE
   12108 @cindex model representation, range
   12109 
   12110 @table @asis
   12111 @item @emph{Description}:
   12112 @code{RANGE(X)} returns the decimal exponent range in the model of the
   12113 type of @code{X}.
   12114 
   12115 @item @emph{Standard}:
   12116 Fortran 90 and later
   12117 
   12118 @item @emph{Class}:
   12119 Inquiry function
   12120 
   12121 @item @emph{Syntax}:
   12122 @code{RESULT = RANGE(X)}
   12123 
   12124 @item @emph{Arguments}:
   12125 @multitable @columnfractions .15 .70
   12126 @item @var{X} @tab Shall be of type @code{INTEGER}, @code{REAL}
   12127 or @code{COMPLEX}.
   12128 @end multitable
   12129 
   12130 @item @emph{Return value}:
   12131 The return value is of type @code{INTEGER} and of the default integer
   12132 kind.
   12133 
   12134 @item @emph{Example}:
   12135 See @code{PRECISION} for an example.
   12136 @item @emph{See also}:
   12137 @ref{SELECTED_REAL_KIND}, @gol
   12138 @ref{PRECISION}
   12139 @end table
   12140 
   12141 
   12142 
   12143 @node RANK
   12144 @section @code{RANK} --- Rank of a data object
   12145 @fnindex RANK
   12146 @cindex rank
   12147 
   12148 @table @asis
   12149 @item @emph{Description}:
   12150 @code{RANK(A)} returns the rank of a scalar or array data object.
   12151 
   12152 @item @emph{Standard}:
   12153 Technical Specification (TS) 29113
   12154 
   12155 @item @emph{Class}:
   12156 Inquiry function
   12157 
   12158 @item @emph{Syntax}:
   12159 @code{RESULT = RANK(A)}
   12160 
   12161 @item @emph{Arguments}:
   12162 @multitable @columnfractions .15 .70
   12163 @item @var{A} @tab can be of any type
   12164 @end multitable
   12165 
   12166 @item @emph{Return value}:
   12167 The return value is of type @code{INTEGER} and of the default integer
   12168 kind. For arrays, their rank is returned; for scalars zero is returned.
   12169 
   12170 @item @emph{Example}:
   12171 @smallexample
   12172 program test_rank
   12173   integer :: a
   12174   real, allocatable :: b(:,:)
   12175 
   12176   print *, rank(a), rank(b) ! Prints:  0  2
   12177 end program test_rank
   12178 @end smallexample
   12179 
   12180 @end table
   12181 
   12182 
   12183 
   12184 @node REAL
   12185 @section @code{REAL} --- Convert to real type 
   12186 @fnindex REAL
   12187 @fnindex REALPART
   12188 @fnindex FLOAT
   12189 @fnindex DFLOAT
   12190 @fnindex FLOATI
   12191 @fnindex FLOATJ
   12192 @fnindex FLOATK
   12193 @fnindex SNGL
   12194 @cindex conversion, to real
   12195 @cindex complex numbers, real part
   12196 
   12197 @table @asis
   12198 @item @emph{Description}:
   12199 @code{REAL(A [, KIND])} converts its argument @var{A} to a real type.  The
   12200 @code{REALPART} function is provided for compatibility with @command{g77},
   12201 and its use is strongly discouraged.
   12202 
   12203 @item @emph{Standard}:
   12204 Fortran 77 and later, with @var{KIND} argument Fortran 90 and later, has GNU extensions
   12205 
   12206 @item @emph{Class}:
   12207 Elemental function
   12208 
   12209 @item @emph{Syntax}:
   12210 @multitable @columnfractions .80
   12211 @item @code{RESULT = REAL(A [, KIND])}
   12212 @item @code{RESULT = REALPART(Z)}
   12213 @end multitable
   12214 
   12215 @item @emph{Arguments}:
   12216 @multitable @columnfractions .15 .70
   12217 @item @var{A}    @tab Shall be @code{INTEGER}, @code{REAL}, or
   12218 @code{COMPLEX}.
   12219 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   12220 expression indicating the kind parameter of the result.
   12221 @end multitable
   12222 
   12223 @item @emph{Return value}:
   12224 These functions return a @code{REAL} variable or array under
   12225 the following rules: 
   12226 
   12227 @table @asis
   12228 @item (A)
   12229 @code{REAL(A)} is converted to a default real type if @var{A} is an 
   12230 integer or real variable.
   12231 @item (B)
   12232 @code{REAL(A)} is converted to a real type with the kind type parameter
   12233 of @var{A} if @var{A} is a complex variable.
   12234 @item (C)
   12235 @code{REAL(A, KIND)} is converted to a real type with kind type
   12236 parameter @var{KIND} if @var{A} is a complex, integer, or real
   12237 variable.
   12238 @end table
   12239 
   12240 @item @emph{Example}:
   12241 @smallexample
   12242 program test_real
   12243   complex :: x = (1.0, 2.0)
   12244   print *, real(x), real(x,8), realpart(x)
   12245 end program test_real
   12246 @end smallexample
   12247 
   12248 @item @emph{Specific names}:
   12249 @multitable @columnfractions .20 .23 .20 .33
   12250 @headitem Name             @tab Argument           @tab Return type     @tab Standard
   12251 @item @code{FLOAT(A)}  @tab @code{INTEGER(4)}  @tab @code{REAL(4)}  @tab Fortran 77 and later
   12252 @item @code{DFLOAT(A)} @tab @code{INTEGER(4)}  @tab @code{REAL(8)}  @tab GNU extension
   12253 @item @code{FLOATI(A)} @tab @code{INTEGER(2)}  @tab @code{REAL(4)}  @tab GNU extension (-fdec)
   12254 @item @code{FLOATJ(A)} @tab @code{INTEGER(4)}  @tab @code{REAL(4)}  @tab GNU extension (-fdec)
   12255 @item @code{FLOATK(A)} @tab @code{INTEGER(8)}  @tab @code{REAL(4)}  @tab GNU extension (-fdec)
   12256 @item @code{SNGL(A)}   @tab @code{REAL(8)}     @tab @code{REAL(4)}  @tab Fortran 77 and later
   12257 @end multitable
   12258 
   12259 
   12260 @item @emph{See also}:
   12261 @ref{DBLE}
   12262 
   12263 @end table
   12264 
   12265 
   12266 
   12267 @node RENAME
   12268 @section @code{RENAME} --- Rename a file
   12269 @fnindex RENAME
   12270 @cindex file system, rename file
   12271 
   12272 @table @asis
   12273 @item @emph{Description}:
   12274 Renames a file from file @var{PATH1} to @var{PATH2}. A null
   12275 character (@code{CHAR(0)}) can be used to mark the end of the names in
   12276 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
   12277 names are ignored.  If the @var{STATUS} argument is supplied, it
   12278 contains 0 on success or a nonzero error code upon return; see
   12279 @code{rename(2)}.
   12280 
   12281 This intrinsic is provided in both subroutine and function forms;
   12282 however, only one form can be used in any given program unit.
   12283 
   12284 @item @emph{Standard}:
   12285 GNU extension
   12286 
   12287 @item @emph{Class}:
   12288 Subroutine, function
   12289 
   12290 @item @emph{Syntax}:
   12291 @multitable @columnfractions .80
   12292 @item @code{CALL RENAME(PATH1, PATH2 [, STATUS])}
   12293 @item @code{STATUS = RENAME(PATH1, PATH2)}
   12294 @end multitable
   12295 
   12296 @item @emph{Arguments}:
   12297 @multitable @columnfractions .15 .70
   12298 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
   12299 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
   12300 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   12301 @end multitable
   12302 
   12303 @item @emph{See also}:
   12304 @ref{LINK}
   12305 
   12306 @end table
   12307 
   12308 
   12309 
   12310 @node REPEAT
   12311 @section @code{REPEAT} --- Repeated string concatenation 
   12312 @fnindex REPEAT
   12313 @cindex string, repeat
   12314 @cindex string, concatenate
   12315 
   12316 @table @asis
   12317 @item @emph{Description}:
   12318 Concatenates @var{NCOPIES} copies of a string.
   12319 
   12320 @item @emph{Standard}:
   12321 Fortran 90 and later
   12322 
   12323 @item @emph{Class}:
   12324 Transformational function
   12325 
   12326 @item @emph{Syntax}:
   12327 @code{RESULT = REPEAT(STRING, NCOPIES)}
   12328 
   12329 @item @emph{Arguments}:
   12330 @multitable @columnfractions .15 .70
   12331 @item @var{STRING}  @tab Shall be scalar and of type @code{CHARACTER}.
   12332 @item @var{NCOPIES} @tab Shall be scalar and of type @code{INTEGER}.
   12333 @end multitable
   12334 
   12335 @item @emph{Return value}:
   12336 A new scalar of type @code{CHARACTER} built up from @var{NCOPIES} copies 
   12337 of @var{STRING}.
   12338 
   12339 @item @emph{Example}:
   12340 @smallexample
   12341 program test_repeat
   12342   write(*,*) repeat("x", 5)   ! "xxxxx"
   12343 end program
   12344 @end smallexample
   12345 @end table
   12346 
   12347 
   12348 
   12349 @node RESHAPE
   12350 @section @code{RESHAPE} --- Function to reshape an array
   12351 @fnindex RESHAPE
   12352 @cindex array, change dimensions
   12353 @cindex array, transmogrify
   12354 
   12355 @table @asis
   12356 @item @emph{Description}:
   12357 Reshapes @var{SOURCE} to correspond to @var{SHAPE}. If necessary,
   12358 the new array may be padded with elements from @var{PAD} or permuted
   12359 as defined by @var{ORDER}.
   12360 
   12361 @item @emph{Standard}:
   12362 Fortran 90 and later
   12363 
   12364 @item @emph{Class}:
   12365 Transformational function
   12366 
   12367 @item @emph{Syntax}:
   12368 @code{RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])}
   12369 
   12370 @item @emph{Arguments}:
   12371 @multitable @columnfractions .15 .70
   12372 @item @var{SOURCE} @tab Shall be an array of any type.
   12373 @item @var{SHAPE}  @tab Shall be of type @code{INTEGER} and an 
   12374 array of rank one. Its values must be positive or zero.
   12375 @item @var{PAD}    @tab (Optional) shall be an array of the same 
   12376 type as @var{SOURCE}.
   12377 @item @var{ORDER}  @tab (Optional) shall be of type @code{INTEGER}
   12378 and an array of the same shape as @var{SHAPE}. Its values shall
   12379 be a permutation of the numbers from 1 to n, where n is the size of 
   12380 @var{SHAPE}. If @var{ORDER} is absent, the natural ordering shall
   12381 be assumed.
   12382 @end multitable
   12383 
   12384 @item @emph{Return value}:
   12385 The result is an array of shape @var{SHAPE} with the same type as 
   12386 @var{SOURCE}. 
   12387 
   12388 @item @emph{Example}:
   12389 @smallexample
   12390 PROGRAM test_reshape
   12391   INTEGER, DIMENSION(4) :: x
   12392   WRITE(*,*) SHAPE(x)                       ! prints "4"
   12393   WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/)))    ! prints "2 2"
   12394 END PROGRAM
   12395 @end smallexample
   12396 
   12397 @item @emph{See also}:
   12398 @ref{SHAPE}
   12399 @end table
   12400 
   12401 
   12402 
   12403 @node RRSPACING
   12404 @section @code{RRSPACING} --- Reciprocal of the relative spacing
   12405 @fnindex RRSPACING
   12406 @cindex real number, relative spacing
   12407 @cindex floating point, relative spacing
   12408 
   12409 
   12410 @table @asis
   12411 @item @emph{Description}:
   12412 @code{RRSPACING(X)} returns the  reciprocal of the relative spacing of
   12413 model numbers near @var{X}.
   12414 
   12415 @item @emph{Standard}:
   12416 Fortran 90 and later
   12417 
   12418 @item @emph{Class}:
   12419 Elemental function
   12420 
   12421 @item @emph{Syntax}:
   12422 @code{RESULT = RRSPACING(X)}
   12423 
   12424 @item @emph{Arguments}:
   12425 @multitable @columnfractions .15 .70
   12426 @item @var{X} @tab Shall be of type @code{REAL}.
   12427 @end multitable
   12428 
   12429 @item @emph{Return value}:
   12430 The return value is of the same type and kind as @var{X}.
   12431 The value returned is equal to
   12432 @code{ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)}.
   12433 
   12434 @item @emph{See also}:
   12435 @ref{SPACING}
   12436 @end table
   12437 
   12438 
   12439 
   12440 @node RSHIFT
   12441 @section @code{RSHIFT} --- Right shift bits
   12442 @fnindex RSHIFT
   12443 @cindex bits, shift right
   12444 
   12445 @table @asis
   12446 @item @emph{Description}:
   12447 @code{RSHIFT} returns a value corresponding to @var{I} with all of the
   12448 bits shifted right by @var{SHIFT} places.  @var{SHIFT} shall be
   12449 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   12450 the result value is undefined.  Bits shifted out from the right end
   12451 are lost. The fill is arithmetic: the bits shifted in from the left
   12452 end are equal to the leftmost bit, which in two's complement
   12453 representation is the sign bit.
   12454 
   12455 This function has been superseded by the @code{SHIFTA} intrinsic, which
   12456 is standard in Fortran 2008 and later.
   12457 
   12458 @item @emph{Standard}:
   12459 GNU extension
   12460 
   12461 @item @emph{Class}:
   12462 Elemental function
   12463 
   12464 @item @emph{Syntax}:
   12465 @code{RESULT = RSHIFT(I, SHIFT)}
   12466 
   12467 @item @emph{Arguments}:
   12468 @multitable @columnfractions .15 .70
   12469 @item @var{I} @tab The type shall be @code{INTEGER}.
   12470 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   12471 @end multitable
   12472 
   12473 @item @emph{Return value}:
   12474 The return value is of type @code{INTEGER} and of the same kind as
   12475 @var{I}.
   12476 
   12477 @item @emph{See also}:
   12478 @ref{ISHFT}, @gol
   12479 @ref{ISHFTC}, @gol
   12480 @ref{LSHIFT}, @gol
   12481 @ref{SHIFTA}, @gol
   12482 @ref{SHIFTR}, @gol
   12483 @ref{SHIFTL}
   12484 
   12485 @end table
   12486 
   12487 
   12488 
   12489 @node SAME_TYPE_AS
   12490 @section @code{SAME_TYPE_AS} ---  Query dynamic types for equality
   12491 @fnindex SAME_TYPE_AS
   12492 
   12493 @table @asis
   12494 @item @emph{Description}:
   12495 Query dynamic types for equality.
   12496 
   12497 @item @emph{Standard}:
   12498 Fortran 2003 and later
   12499 
   12500 @item @emph{Class}:
   12501 Inquiry function
   12502 
   12503 @item @emph{Syntax}:
   12504 @code{RESULT = SAME_TYPE_AS(A, B)}
   12505 
   12506 @item @emph{Arguments}:
   12507 @multitable @columnfractions .15 .70
   12508 @item @var{A} @tab Shall be an object of extensible declared type or
   12509 unlimited polymorphic.
   12510 @item @var{B} @tab Shall be an object of extensible declared type or
   12511 unlimited polymorphic.
   12512 @end multitable
   12513 
   12514 @item @emph{Return value}:
   12515 The return value is a scalar of type default logical. It is true if and
   12516 only if the dynamic type of A is the same as the dynamic type of B.
   12517 
   12518 @item @emph{See also}:
   12519 @ref{EXTENDS_TYPE_OF}
   12520 
   12521 @end table
   12522 
   12523 
   12524 
   12525 @node SCALE
   12526 @section @code{SCALE} --- Scale a real value
   12527 @fnindex SCALE
   12528 @cindex real number, scale
   12529 @cindex floating point, scale
   12530 
   12531 @table @asis
   12532 @item @emph{Description}:
   12533 @code{SCALE(X,I)} returns @code{X * RADIX(X)**I}.
   12534 
   12535 @item @emph{Standard}:
   12536 Fortran 90 and later
   12537 
   12538 @item @emph{Class}:
   12539 Elemental function
   12540 
   12541 @item @emph{Syntax}:
   12542 @code{RESULT = SCALE(X, I)}
   12543 
   12544 @item @emph{Arguments}:
   12545 @multitable @columnfractions .15 .70
   12546 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
   12547 @item @var{I} @tab The type of the argument shall be a @code{INTEGER}.
   12548 @end multitable
   12549 
   12550 @item @emph{Return value}:
   12551 The return value is of the same type and kind as @var{X}.
   12552 Its value is @code{X * RADIX(X)**I}.
   12553 
   12554 @item @emph{Example}:
   12555 @smallexample
   12556 program test_scale
   12557   real :: x = 178.1387e-4
   12558   integer :: i = 5
   12559   print *, scale(x,i), x*radix(x)**i
   12560 end program test_scale
   12561 @end smallexample
   12562 
   12563 @end table
   12564 
   12565 
   12566 
   12567 @node SCAN
   12568 @section @code{SCAN} --- Scan a string for the presence of a set of characters
   12569 @fnindex SCAN
   12570 @cindex string, find subset
   12571 
   12572 @table @asis
   12573 @item @emph{Description}:
   12574 Scans a @var{STRING} for any of the characters in a @var{SET} 
   12575 of characters.
   12576 
   12577 If @var{BACK} is either absent or equals @code{FALSE}, this function
   12578 returns the position of the leftmost character of @var{STRING} that is
   12579 in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position
   12580 is returned. If no character of @var{SET} is found in @var{STRING}, the 
   12581 result is zero.
   12582 
   12583 @item @emph{Standard}:
   12584 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   12585 
   12586 @item @emph{Class}:
   12587 Elemental function
   12588 
   12589 @item @emph{Syntax}:
   12590 @code{RESULT = SCAN(STRING, SET[, BACK [, KIND]])}
   12591 
   12592 @item @emph{Arguments}:
   12593 @multitable @columnfractions .15 .70
   12594 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
   12595 @item @var{SET}    @tab Shall be of type @code{CHARACTER}.
   12596 @item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
   12597 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
   12598 expression indicating the kind parameter of the result.
   12599 @end multitable
   12600 
   12601 @item @emph{Return value}:
   12602 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   12603 @var{KIND} is absent, the return value is of default integer kind.
   12604 
   12605 @item @emph{Example}:
   12606 @smallexample
   12607 PROGRAM test_scan
   12608   WRITE(*,*) SCAN("FORTRAN", "AO")          ! 2, found 'O'
   12609   WRITE(*,*) SCAN("FORTRAN", "AO", .TRUE.)  ! 6, found 'A'
   12610   WRITE(*,*) SCAN("FORTRAN", "C++")         ! 0, found none
   12611 END PROGRAM
   12612 @end smallexample
   12613 
   12614 @item @emph{See also}:
   12615 @ref{INDEX intrinsic}, @gol
   12616 @ref{VERIFY}
   12617 @end table
   12618 
   12619 
   12620 
   12621 @node SECNDS
   12622 @section @code{SECNDS} --- Time function
   12623 @fnindex SECNDS
   12624 @cindex time, elapsed
   12625 @cindex elapsed time
   12626 
   12627 @table @asis
   12628 @item @emph{Description}:
   12629 @code{SECNDS(X)} gets the time in seconds from the real-time system clock.
   12630 @var{X} is a reference time, also in seconds. If this is zero, the time in
   12631 seconds from midnight is returned. This function is non-standard and its
   12632 use is discouraged.
   12633 
   12634 @item @emph{Standard}:
   12635 GNU extension
   12636 
   12637 @item @emph{Class}:
   12638 Function
   12639 
   12640 @item @emph{Syntax}:
   12641 @code{RESULT = SECNDS (X)}
   12642 
   12643 @item @emph{Arguments}:
   12644 @multitable @columnfractions .15 .70
   12645 @item @var{T}     @tab Shall be of type @code{REAL(4)}.
   12646 @item @var{X}     @tab Shall be of type @code{REAL(4)}.
   12647 @end multitable
   12648 
   12649 @item @emph{Return value}:
   12650 None
   12651 
   12652 @item @emph{Example}:
   12653 @smallexample
   12654 program test_secnds
   12655     integer :: i
   12656     real(4) :: t1, t2
   12657     print *, secnds (0.0)   ! seconds since midnight
   12658     t1 = secnds (0.0)       ! reference time
   12659     do i = 1, 10000000      ! do something
   12660     end do
   12661     t2 = secnds (t1)        ! elapsed time
   12662     print *, "Something took ", t2, " seconds."
   12663 end program test_secnds
   12664 @end smallexample
   12665 @end table
   12666 
   12667 
   12668 
   12669 @node SECOND
   12670 @section @code{SECOND} --- CPU time function
   12671 @fnindex SECOND
   12672 @cindex time, elapsed
   12673 @cindex elapsed time
   12674 
   12675 @table @asis
   12676 @item @emph{Description}:
   12677 Returns a @code{REAL(4)} value representing the elapsed CPU time in
   12678 seconds.  This provides the same functionality as the standard
   12679 @code{CPU_TIME} intrinsic, and is only included for backwards
   12680 compatibility.
   12681 
   12682 This intrinsic is provided in both subroutine and function forms;
   12683 however, only one form can be used in any given program unit.
   12684 
   12685 @item @emph{Standard}:
   12686 GNU extension
   12687 
   12688 @item @emph{Class}:
   12689 Subroutine, function
   12690 
   12691 @item @emph{Syntax}:
   12692 @multitable @columnfractions .80
   12693 @item @code{CALL SECOND(TIME)}
   12694 @item @code{TIME = SECOND()}
   12695 @end multitable
   12696 
   12697 @item @emph{Arguments}:
   12698 @multitable @columnfractions .15 .70
   12699 @item @var{TIME}  @tab Shall be of type @code{REAL(4)}.
   12700 @end multitable
   12701 
   12702 @item @emph{Return value}:
   12703 In either syntax, @var{TIME} is set to the process's current runtime in
   12704 seconds.
   12705 
   12706 @item @emph{See also}:
   12707 @ref{CPU_TIME}
   12708 
   12709 @end table
   12710 
   12711 
   12712 
   12713 @node SELECTED_CHAR_KIND
   12714 @section @code{SELECTED_CHAR_KIND} --- Choose character kind
   12715 @fnindex SELECTED_CHAR_KIND
   12716 @cindex character kind
   12717 @cindex kind, character
   12718 
   12719 @table @asis
   12720 @item @emph{Description}:
   12721 
   12722 @code{SELECTED_CHAR_KIND(NAME)} returns the kind value for the character
   12723 set named @var{NAME}, if a character set with such a name is supported,
   12724 or @math{-1} otherwise. Currently, supported character sets include
   12725 ``ASCII'' and ``DEFAULT'', which are equivalent, and ``ISO_10646''
   12726 (Universal Character Set, UCS-4) which is commonly known as Unicode.
   12727 
   12728 @item @emph{Standard}:
   12729 Fortran 2003 and later
   12730 
   12731 @item @emph{Class}:
   12732 Transformational function
   12733 
   12734 @item @emph{Syntax}:
   12735 @code{RESULT = SELECTED_CHAR_KIND(NAME)}
   12736 
   12737 @item @emph{Arguments}:
   12738 @multitable @columnfractions .15 .70
   12739 @item @var{NAME} @tab Shall be a scalar and of the default character type.
   12740 @end multitable
   12741 
   12742 @item @emph{Example}:
   12743 @smallexample
   12744 program character_kind
   12745   use iso_fortran_env
   12746   implicit none
   12747   integer, parameter :: ascii = selected_char_kind ("ascii")
   12748   integer, parameter :: ucs4  = selected_char_kind ('ISO_10646')
   12749 
   12750   character(kind=ascii, len=26) :: alphabet
   12751   character(kind=ucs4,  len=30) :: hello_world
   12752 
   12753   alphabet = ascii_"abcdefghijklmnopqrstuvwxyz"
   12754   hello_world = ucs4_'Hello World and Ni Hao -- ' &
   12755                 // char (int (z'4F60'), ucs4)     &
   12756                 // char (int (z'597D'), ucs4)
   12757 
   12758   write (*,*) alphabet
   12759 
   12760   open (output_unit, encoding='UTF-8')
   12761   write (*,*) trim (hello_world)
   12762 end program character_kind
   12763 @end smallexample
   12764 @end table
   12765 
   12766 
   12767 
   12768 @node SELECTED_INT_KIND
   12769 @section @code{SELECTED_INT_KIND} --- Choose integer kind
   12770 @fnindex SELECTED_INT_KIND
   12771 @cindex integer kind
   12772 @cindex kind, integer
   12773 
   12774 @table @asis
   12775 @item @emph{Description}:
   12776 @code{SELECTED_INT_KIND(R)} return the kind value of the smallest integer
   12777 type that can represent all values ranging from @math{-10^R} (exclusive)
   12778 to @math{10^R} (exclusive). If there is no integer kind that accommodates
   12779 this range, @code{SELECTED_INT_KIND} returns @math{-1}.
   12780 
   12781 @item @emph{Standard}:
   12782 Fortran 90 and later
   12783 
   12784 @item @emph{Class}:
   12785 Transformational function
   12786 
   12787 @item @emph{Syntax}:
   12788 @code{RESULT = SELECTED_INT_KIND(R)}
   12789 
   12790 @item @emph{Arguments}:
   12791 @multitable @columnfractions .15 .70
   12792 @item @var{R} @tab Shall be a scalar and of type @code{INTEGER}.
   12793 @end multitable
   12794 
   12795 @item @emph{Example}:
   12796 @smallexample
   12797 program large_integers
   12798   integer,parameter :: k5 = selected_int_kind(5)
   12799   integer,parameter :: k15 = selected_int_kind(15)
   12800   integer(kind=k5) :: i5
   12801   integer(kind=k15) :: i15
   12802 
   12803   print *, huge(i5), huge(i15)
   12804 
   12805   ! The following inequalities are always true
   12806   print *, huge(i5) >= 10_k5**5-1
   12807   print *, huge(i15) >= 10_k15**15-1
   12808 end program large_integers
   12809 @end smallexample
   12810 @end table
   12811 
   12812 
   12813 
   12814 @node SELECTED_REAL_KIND
   12815 @section @code{SELECTED_REAL_KIND} --- Choose real kind
   12816 @fnindex SELECTED_REAL_KIND
   12817 @cindex real kind
   12818 @cindex kind, real
   12819 @cindex radix, real
   12820 
   12821 @table @asis
   12822 @item @emph{Description}:
   12823 @code{SELECTED_REAL_KIND(P,R)} returns the kind value of a real data type
   12824 with decimal precision of at least @code{P} digits, exponent range of
   12825 at least @code{R}, and with a radix of @code{RADIX}.
   12826 
   12827 @item @emph{Standard}:
   12828 Fortran 90 and later, with @code{RADIX} Fortran 2008 or later
   12829 
   12830 @item @emph{Class}:
   12831 Transformational function
   12832 
   12833 @item @emph{Syntax}:
   12834 @code{RESULT = SELECTED_REAL_KIND([P, R, RADIX])}
   12835 
   12836 @item @emph{Arguments}:
   12837 @multitable @columnfractions .15 .70
   12838 @item @var{P} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
   12839 @item @var{R} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
   12840 @item @var{RADIX} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
   12841 @end multitable
   12842 Before Fortran 2008, at least one of the arguments @var{R} or @var{P} shall
   12843 be present; since Fortran 2008, they are assumed to be zero if absent.
   12844 
   12845 @item @emph{Return value}:
   12846 
   12847 @code{SELECTED_REAL_KIND} returns the value of the kind type parameter of
   12848 a real data type with decimal precision of at least @code{P} digits, a
   12849 decimal exponent range of at least @code{R}, and with the requested
   12850 @code{RADIX}. If the @code{RADIX} parameter is absent, real kinds with
   12851 any radix can be returned. If more than one real data type meet the
   12852 criteria, the kind of the data type with the smallest decimal precision
   12853 is returned. If no real data type matches the criteria, the result is
   12854 @table @asis
   12855 @item -1 if the processor does not support a real data type with a
   12856 precision greater than or equal to @code{P}, but the @code{R} and
   12857 @code{RADIX} requirements can be fulfilled
   12858 @item -2 if the processor does not support a real type with an exponent
   12859 range greater than or equal to @code{R}, but @code{P} and @code{RADIX}
   12860 are fulfillable
   12861 @item -3 if @code{RADIX} but not @code{P} and @code{R} requirements
   12862 are fulfillable
   12863 @item -4 if @code{RADIX} and either @code{P} or @code{R} requirements
   12864 are fulfillable
   12865 @item -5 if there is no real type with the given @code{RADIX}
   12866 @end table
   12867 
   12868 @item @emph{Example}:
   12869 @smallexample
   12870 program real_kinds
   12871   integer,parameter :: p6 = selected_real_kind(6)
   12872   integer,parameter :: p10r100 = selected_real_kind(10,100)
   12873   integer,parameter :: r400 = selected_real_kind(r=400)
   12874   real(kind=p6) :: x
   12875   real(kind=p10r100) :: y
   12876   real(kind=r400) :: z
   12877 
   12878   print *, precision(x), range(x)
   12879   print *, precision(y), range(y)
   12880   print *, precision(z), range(z)
   12881 end program real_kinds
   12882 @end smallexample
   12883 @item @emph{See also}:
   12884 @ref{PRECISION}, @gol
   12885 @ref{RANGE}, @gol
   12886 @ref{RADIX}
   12887 @end table
   12888 
   12889 
   12890 
   12891 @node SET_EXPONENT
   12892 @section @code{SET_EXPONENT} --- Set the exponent of the model
   12893 @fnindex SET_EXPONENT
   12894 @cindex real number, set exponent
   12895 @cindex floating point, set exponent
   12896 
   12897 @table @asis
   12898 @item @emph{Description}:
   12899 @code{SET_EXPONENT(X, I)} returns the real number whose fractional part
   12900 is that of @var{X} and whose exponent part is @var{I}.
   12901 
   12902 @item @emph{Standard}:
   12903 Fortran 90 and later
   12904 
   12905 @item @emph{Class}:
   12906 Elemental function
   12907 
   12908 @item @emph{Syntax}:
   12909 @code{RESULT = SET_EXPONENT(X, I)}
   12910 
   12911 @item @emph{Arguments}:
   12912 @multitable @columnfractions .15 .70
   12913 @item @var{X} @tab Shall be of type @code{REAL}.
   12914 @item @var{I} @tab Shall be of type @code{INTEGER}.
   12915 @end multitable
   12916 
   12917 @item @emph{Return value}:
   12918 The return value is of the same type and kind as @var{X}.
   12919 The real number whose fractional part
   12920 is that of @var{X} and whose exponent part if @var{I} is returned;
   12921 it is @code{FRACTION(X) * RADIX(X)**I}.
   12922 
   12923 @item @emph{Example}:
   12924 @smallexample
   12925 PROGRAM test_setexp
   12926   REAL :: x = 178.1387e-4
   12927   INTEGER :: i = 17
   12928   PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i
   12929 END PROGRAM
   12930 @end smallexample
   12931 
   12932 @end table
   12933 
   12934 
   12935 
   12936 @node SHAPE
   12937 @section @code{SHAPE} --- Determine the shape of an array
   12938 @fnindex SHAPE
   12939 @cindex array, shape
   12940 
   12941 @table @asis
   12942 @item @emph{Description}:
   12943 Determines the shape of an array.
   12944 
   12945 @item @emph{Standard}:
   12946 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   12947 
   12948 @item @emph{Class}:
   12949 Inquiry function
   12950 
   12951 @item @emph{Syntax}:
   12952 @code{RESULT = SHAPE(SOURCE [, KIND])}
   12953 
   12954 @item @emph{Arguments}:
   12955 @multitable @columnfractions .15 .70
   12956 @item @var{SOURCE} @tab Shall be an array or scalar of any type. 
   12957 If @var{SOURCE} is a pointer it must be associated and allocatable 
   12958 arrays must be allocated.
   12959 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
   12960 expression indicating the kind parameter of the result.
   12961 @end multitable
   12962 
   12963 @item @emph{Return value}:
   12964 An @code{INTEGER} array of rank one with as many elements as @var{SOURCE} 
   12965 has dimensions. The elements of the resulting array correspond to the extend
   12966 of @var{SOURCE} along the respective dimensions. If @var{SOURCE} is a scalar,
   12967 the result is the rank one array of size zero. If @var{KIND} is absent, the
   12968 return value has the default integer kind otherwise the specified kind.
   12969 
   12970 @item @emph{Example}:
   12971 @smallexample
   12972 PROGRAM test_shape
   12973   INTEGER, DIMENSION(-1:1, -1:2) :: A
   12974   WRITE(*,*) SHAPE(A)             ! (/ 3, 4 /)
   12975   WRITE(*,*) SIZE(SHAPE(42))      ! (/ /)
   12976 END PROGRAM
   12977 @end smallexample
   12978 
   12979 @item @emph{See also}:
   12980 @ref{RESHAPE}, @gol
   12981 @ref{SIZE}
   12982 @end table
   12983 
   12984 
   12985 
   12986 @node SHIFTA
   12987 @section @code{SHIFTA} --- Right shift with fill
   12988 @fnindex SHIFTA
   12989 @cindex bits, shift right
   12990 @cindex shift, right with fill
   12991 
   12992 @table @asis
   12993 @item @emph{Description}:
   12994 @code{SHIFTA} returns a value corresponding to @var{I} with all of the
   12995 bits shifted right by @var{SHIFT} places.  @var{SHIFT} that be
   12996 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   12997 the result value is undefined.  Bits shifted out from the right end
   12998 are lost. The fill is arithmetic: the bits shifted in from the left
   12999 end are equal to the leftmost bit, which in two's complement
   13000 representation is the sign bit.
   13001 
   13002 @item @emph{Standard}:
   13003 Fortran 2008 and later
   13004 
   13005 @item @emph{Class}:
   13006 Elemental function
   13007 
   13008 @item @emph{Syntax}:
   13009 @code{RESULT = SHIFTA(I, SHIFT)}
   13010 
   13011 @item @emph{Arguments}:
   13012 @multitable @columnfractions .15 .70
   13013 @item @var{I} @tab The type shall be @code{INTEGER}.
   13014 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   13015 @end multitable
   13016 
   13017 @item @emph{Return value}:
   13018 The return value is of type @code{INTEGER} and of the same kind as
   13019 @var{I}.
   13020 
   13021 @item @emph{See also}:
   13022 @ref{SHIFTL}, @gol
   13023 @ref{SHIFTR}
   13024 @end table
   13025 
   13026 
   13027 
   13028 @node SHIFTL
   13029 @section @code{SHIFTL} --- Left shift
   13030 @fnindex SHIFTL
   13031 @cindex bits, shift left
   13032 @cindex shift, left
   13033 
   13034 @table @asis
   13035 @item @emph{Description}:
   13036 @code{SHIFTL} returns a value corresponding to @var{I} with all of the
   13037 bits shifted left by @var{SHIFT} places.  @var{SHIFT} shall be
   13038 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   13039 the result value is undefined.  Bits shifted out from the left end are
   13040 lost, and bits shifted in from the right end are set to 0.
   13041 
   13042 @item @emph{Standard}:
   13043 Fortran 2008 and later
   13044 
   13045 @item @emph{Class}:
   13046 Elemental function
   13047 
   13048 @item @emph{Syntax}:
   13049 @code{RESULT = SHIFTL(I, SHIFT)}
   13050 
   13051 @item @emph{Arguments}:
   13052 @multitable @columnfractions .15 .70
   13053 @item @var{I} @tab The type shall be @code{INTEGER}.
   13054 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   13055 @end multitable
   13056 
   13057 @item @emph{Return value}:
   13058 The return value is of type @code{INTEGER} and of the same kind as
   13059 @var{I}.
   13060 
   13061 @item @emph{See also}:
   13062 @ref{SHIFTA}, @gol
   13063 @ref{SHIFTR}
   13064 @end table
   13065 
   13066 
   13067 
   13068 @node SHIFTR
   13069 @section @code{SHIFTR} --- Right shift
   13070 @fnindex SHIFTR
   13071 @cindex bits, shift right
   13072 @cindex shift, right
   13073 
   13074 @table @asis
   13075 @item @emph{Description}:
   13076 @code{SHIFTR} returns a value corresponding to @var{I} with all of the
   13077 bits shifted right by @var{SHIFT} places.  @var{SHIFT} shall be
   13078 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   13079 the result value is undefined.  Bits shifted out from the right end
   13080 are lost, and bits shifted in from the left end are set to 0.
   13081 
   13082 @item @emph{Standard}:
   13083 Fortran 2008 and later
   13084 
   13085 @item @emph{Class}:
   13086 Elemental function
   13087 
   13088 @item @emph{Syntax}:
   13089 @code{RESULT = SHIFTR(I, SHIFT)}
   13090 
   13091 @item @emph{Arguments}:
   13092 @multitable @columnfractions .15 .70
   13093 @item @var{I} @tab The type shall be @code{INTEGER}.
   13094 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   13095 @end multitable
   13096 
   13097 @item @emph{Return value}:
   13098 The return value is of type @code{INTEGER} and of the same kind as
   13099 @var{I}.
   13100 
   13101 @item @emph{See also}:
   13102 @ref{SHIFTA}, @gol
   13103 @ref{SHIFTL}
   13104 @end table
   13105 
   13106 
   13107 
   13108 @node SIGN
   13109 @section @code{SIGN} --- Sign copying function
   13110 @fnindex SIGN
   13111 @fnindex ISIGN
   13112 @fnindex DSIGN
   13113 @cindex sign copying
   13114 
   13115 @table @asis
   13116 @item @emph{Description}:
   13117 @code{SIGN(A,B)} returns the value of @var{A} with the sign of @var{B}.
   13118 
   13119 @item @emph{Standard}:
   13120 Fortran 77 and later
   13121 
   13122 @item @emph{Class}:
   13123 Elemental function
   13124 
   13125 @item @emph{Syntax}:
   13126 @code{RESULT = SIGN(A, B)}
   13127 
   13128 @item @emph{Arguments}:
   13129 @multitable @columnfractions .15 .70
   13130 @item @var{A} @tab Shall be of type @code{INTEGER} or @code{REAL}
   13131 @item @var{B} @tab Shall be of the same type and kind as @var{A}.
   13132 @end multitable
   13133 
   13134 @item @emph{Return value}:
   13135 The kind of the return value is that of @var{A} and @var{B}.
   13136 If @math{B \ge 0} then the result is @code{ABS(A)}, else
   13137 it is @code{-ABS(A)}.
   13138 
   13139 @item @emph{Example}:
   13140 @smallexample
   13141 program test_sign
   13142   print *, sign(-12,1)
   13143   print *, sign(-12,0)
   13144   print *, sign(-12,-1)
   13145 
   13146   print *, sign(-12.,1.)
   13147   print *, sign(-12.,0.)
   13148   print *, sign(-12.,-1.)
   13149 end program test_sign
   13150 @end smallexample
   13151 
   13152 @item @emph{Specific names}:
   13153 @multitable @columnfractions .20 .26 .20 .30
   13154 @headitem Name              @tab Arguments              @tab Return type       @tab Standard
   13155 @item @code{SIGN(A,B)}  @tab @code{REAL(4) A, B}    @tab @code{REAL(4)}    @tab Fortran 77 and later
   13156 @item @code{ISIGN(A,B)} @tab @code{INTEGER(4) A, B} @tab @code{INTEGER(4)} @tab Fortran 77 and later
   13157 @item @code{DSIGN(A,B)} @tab @code{REAL(8) A, B}    @tab @code{REAL(8)}    @tab Fortran 77 and later
   13158 @end multitable
   13159 @end table
   13160 
   13161 
   13162 
   13163 @node SIGNAL
   13164 @section @code{SIGNAL} --- Signal handling subroutine (or function)
   13165 @fnindex SIGNAL
   13166 @cindex system, signal handling
   13167 
   13168 @table @asis
   13169 @item @emph{Description}:
   13170 @code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine
   13171 @var{HANDLER} to be executed with a single integer argument when signal
   13172 @var{NUMBER} occurs.  If @var{HANDLER} is an integer, it can be used to
   13173 turn off handling of signal @var{NUMBER} or revert to its default
   13174 action.  See @code{signal(2)}.
   13175 
   13176 If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument
   13177 is supplied, it is set to the value returned by @code{signal(2)}.
   13178 
   13179 @item @emph{Standard}:
   13180 GNU extension
   13181 
   13182 @item @emph{Class}:
   13183 Subroutine, function
   13184 
   13185 @item @emph{Syntax}:
   13186 @multitable @columnfractions .80
   13187 @item @code{CALL SIGNAL(NUMBER, HANDLER [, STATUS])}
   13188 @item @code{STATUS = SIGNAL(NUMBER, HANDLER)}
   13189 @end multitable
   13190 
   13191 @item @emph{Arguments}:
   13192 @multitable @columnfractions .15 .70
   13193 @item @var{NUMBER} @tab Shall be a scalar integer, with @code{INTENT(IN)}
   13194 @item @var{HANDLER}@tab Signal handler (@code{INTEGER FUNCTION} or
   13195 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar.
   13196 @code{INTEGER}. It is @code{INTENT(IN)}.
   13197 @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
   13198 integer. It has @code{INTENT(OUT)}.
   13199 @end multitable
   13200 @c TODO: What should the interface of the handler be?  Does it take arguments?
   13201 
   13202 @item @emph{Return value}:
   13203 The @code{SIGNAL} function returns the value returned by @code{signal(2)}.
   13204 
   13205 @item @emph{Example}:
   13206 @smallexample
   13207 program test_signal
   13208   intrinsic signal
   13209   external handler_print
   13210 
   13211   call signal (12, handler_print)
   13212   call signal (10, 1)
   13213 
   13214   call sleep (30)
   13215 end program test_signal
   13216 @end smallexample
   13217 @end table
   13218 
   13219 
   13220 
   13221 @node SIN
   13222 @section @code{SIN} --- Sine function 
   13223 @fnindex SIN
   13224 @fnindex DSIN
   13225 @fnindex CSIN
   13226 @fnindex ZSIN
   13227 @fnindex CDSIN
   13228 @cindex trigonometric function, sine
   13229 @cindex sine
   13230 
   13231 @table @asis
   13232 @item @emph{Description}:
   13233 @code{SIN(X)} computes the sine of @var{X}.
   13234 
   13235 @item @emph{Standard}:
   13236 Fortran 77 and later
   13237 
   13238 @item @emph{Class}:
   13239 Elemental function
   13240 
   13241 @item @emph{Syntax}:
   13242 @code{RESULT = SIN(X)}
   13243 
   13244 @item @emph{Arguments}:
   13245 @multitable @columnfractions .15 .70
   13246 @item @var{X} @tab The type shall be @code{REAL} or
   13247 @code{COMPLEX}.
   13248 @end multitable
   13249 
   13250 @item @emph{Return value}:
   13251 The return value has same type and kind as @var{X}.
   13252 
   13253 @item @emph{Example}:
   13254 @smallexample
   13255 program test_sin
   13256   real :: x = 0.0
   13257   x = sin(x)
   13258 end program test_sin
   13259 @end smallexample
   13260 
   13261 @item @emph{Specific names}:
   13262 @multitable @columnfractions .20 .23 .20 .33
   13263 @headitem Name            @tab Argument             @tab Return type       @tab Standard
   13264 @item @code{SIN(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}    @tab Fortran 77 and later
   13265 @item @code{DSIN(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}    @tab Fortran 77 and later
   13266 @item @code{CSIN(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)} @tab Fortran 77 and later
   13267 @item @code{ZSIN(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU extension
   13268 @item @code{CDSIN(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU extension
   13269 @end multitable
   13270 
   13271 @item @emph{See also}:
   13272 Inverse function: @gol
   13273 @ref{ASIN} @gol
   13274 Degrees function: @gol
   13275 @ref{SIND}
   13276 @end table
   13277 
   13278 
   13279 
   13280 @node SIND
   13281 @section @code{SIND} --- Sine function, degrees
   13282 @fnindex SIND
   13283 @fnindex DSIND
   13284 @fnindex CSIND
   13285 @fnindex ZSIND
   13286 @fnindex CDSIND
   13287 @cindex trigonometric function, sine, degrees
   13288 @cindex sine, degrees
   13289 
   13290 @table @asis
   13291 @item @emph{Description}:
   13292 @code{SIND(X)} computes the sine of @var{X} in degrees.
   13293 
   13294 This function is for compatibility only and should be avoided in favor of
   13295 standard constructs wherever possible.
   13296 
   13297 @item @emph{Standard}:
   13298 GNU extension, enabled with @option{-fdec-math}.
   13299 
   13300 @item @emph{Class}:
   13301 Elemental function
   13302 
   13303 @item @emph{Syntax}:
   13304 @code{RESULT = SIND(X)}
   13305 
   13306 @item @emph{Arguments}:
   13307 @multitable @columnfractions .15 .70
   13308 @item @var{X} @tab The type shall be @code{REAL} or
   13309 @code{COMPLEX}.
   13310 @end multitable
   13311 
   13312 @item @emph{Return value}:
   13313 The return value has same type and kind as @var{X}, and its value is in degrees.
   13314 
   13315 @item @emph{Example}:
   13316 @smallexample
   13317 program test_sind
   13318   real :: x = 0.0
   13319   x = sind(x)
   13320 end program test_sind
   13321 @end smallexample
   13322 
   13323 @item @emph{Specific names}:
   13324 @multitable @columnfractions .20 .23 .20 .33
   13325 @headitem Name            @tab Argument             @tab Return type       @tab Standard
   13326 @item @code{SIND(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}    @tab GNU extension
   13327 @item @code{DSIND(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}    @tab GNU extension
   13328 @item @code{CSIND(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)} @tab GNU extension
   13329 @item @code{ZSIND(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU extension
   13330 @item @code{CDSIND(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU extension
   13331 @end multitable
   13332 
   13333 @item @emph{See also}:
   13334 Inverse function: @gol
   13335 @ref{ASIND} @gol
   13336 Radians function: @gol
   13337 @ref{SIN} @gol
   13338 @end table
   13339 
   13340 
   13341 
   13342 @node SINH
   13343 @section @code{SINH} --- Hyperbolic sine function 
   13344 @fnindex SINH
   13345 @fnindex DSINH
   13346 @cindex hyperbolic sine
   13347 @cindex hyperbolic function, sine
   13348 @cindex sine, hyperbolic
   13349 
   13350 @table @asis
   13351 @item @emph{Description}:
   13352 @code{SINH(X)} computes the hyperbolic sine of @var{X}.
   13353 
   13354 @item @emph{Standard}:
   13355 Fortran 90 and later, for a complex argument Fortran 2008 or later, has
   13356 a GNU extension
   13357 
   13358 @item @emph{Class}:
   13359 Elemental function
   13360 
   13361 @item @emph{Syntax}:
   13362 @code{RESULT = SINH(X)}
   13363 
   13364 @item @emph{Arguments}:
   13365 @multitable @columnfractions .15 .70
   13366 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   13367 @end multitable
   13368 
   13369 @item @emph{Return value}:
   13370 The return value has same type and kind as @var{X}.
   13371 
   13372 @item @emph{Example}:
   13373 @smallexample
   13374 program test_sinh
   13375   real(8) :: x = - 1.0_8
   13376   x = sinh(x)
   13377 end program test_sinh
   13378 @end smallexample
   13379 
   13380 @item @emph{Specific names}:
   13381 @multitable @columnfractions .20 .23 .20 .33
   13382 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   13383 @item @code{DSINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 90 and later
   13384 @end multitable
   13385 
   13386 @item @emph{See also}:
   13387 @ref{ASINH}
   13388 @end table
   13389 
   13390 
   13391 
   13392 @node SIZE
   13393 @section @code{SIZE} --- Determine the size of an array
   13394 @fnindex SIZE
   13395 @cindex array, size
   13396 @cindex array, number of elements
   13397 @cindex array, count elements
   13398 
   13399 @table @asis
   13400 @item @emph{Description}:
   13401 Determine the extent of @var{ARRAY} along a specified dimension @var{DIM},
   13402 or the total number of elements in @var{ARRAY} if @var{DIM} is absent.
   13403 
   13404 @item @emph{Standard}:
   13405 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   13406 
   13407 @item @emph{Class}:
   13408 Inquiry function
   13409 
   13410 @item @emph{Syntax}:
   13411 @code{RESULT = SIZE(ARRAY[, DIM [, KIND]])}
   13412 
   13413 @item @emph{Arguments}:
   13414 @multitable @columnfractions .15 .70
   13415 @item @var{ARRAY} @tab Shall be an array of any type. If @var{ARRAY} is
   13416 a pointer it must be associated and allocatable arrays must be allocated.
   13417 @item @var{DIM}   @tab (Optional) shall be a scalar of type @code{INTEGER} 
   13418 and its value shall be in the range from 1 to n, where n equals the rank 
   13419 of @var{ARRAY}.
   13420 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   13421 expression indicating the kind parameter of the result.
   13422 @end multitable
   13423 
   13424 @item @emph{Return value}:
   13425 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   13426 @var{KIND} is absent, the return value is of default integer kind.
   13427 
   13428 @item @emph{Example}:
   13429 @smallexample
   13430 PROGRAM test_size
   13431   WRITE(*,*) SIZE((/ 1, 2 /))    ! 2
   13432 END PROGRAM
   13433 @end smallexample
   13434 
   13435 @item @emph{See also}:
   13436 @ref{SHAPE}, @gol
   13437 @ref{RESHAPE}
   13438 @end table
   13439 
   13440 
   13441 @node SIZEOF
   13442 @section @code{SIZEOF} --- Size in bytes of an expression
   13443 @fnindex SIZEOF
   13444 @cindex expression size
   13445 @cindex size of an expression
   13446 
   13447 @table @asis
   13448 @item @emph{Description}:
   13449 @code{SIZEOF(X)} calculates the number of bytes of storage the
   13450 expression @code{X} occupies.
   13451 
   13452 @item @emph{Standard}:
   13453 GNU extension
   13454 
   13455 @item @emph{Class}:
   13456 Inquiry function
   13457 
   13458 @item @emph{Syntax}:
   13459 @code{N = SIZEOF(X)}
   13460 
   13461 @item @emph{Arguments}:
   13462 @multitable @columnfractions .15 .70
   13463 @item @var{X} @tab The argument shall be of any type, rank or shape.
   13464 @end multitable
   13465 
   13466 @item @emph{Return value}:
   13467 The return value is of type integer and of the system-dependent kind
   13468 @var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
   13469 number of bytes occupied by the argument.  If the argument has the
   13470 @code{POINTER} attribute, the number of bytes of the storage area pointed
   13471 to is returned.  If the argument is of a derived type with @code{POINTER}
   13472 or @code{ALLOCATABLE} components, the return value does not account for
   13473 the sizes of the data pointed to by these components. If the argument is
   13474 polymorphic, the size according to the dynamic type is returned. The argument
   13475 may not be a procedure or procedure pointer. Note that the code assumes for
   13476 arrays that those are contiguous; for contiguous arrays, it returns the
   13477 storage or an array element multiplied by the size of the array.
   13478 
   13479 @item @emph{Example}:
   13480 @smallexample
   13481    integer :: i
   13482    real :: r, s(5)
   13483    print *, (sizeof(s)/sizeof(r) == 5)
   13484    end
   13485 @end smallexample
   13486 The example will print @code{.TRUE.} unless you are using a platform
   13487 where default @code{REAL} variables are unusually padded.
   13488 
   13489 @item @emph{See also}:
   13490 @ref{C_SIZEOF}, @gol
   13491 @ref{STORAGE_SIZE}
   13492 @end table
   13493 
   13494 
   13495 @node SLEEP
   13496 @section @code{SLEEP} --- Sleep for the specified number of seconds
   13497 @fnindex SLEEP
   13498 @cindex delayed execution
   13499 
   13500 @table @asis
   13501 @item @emph{Description}:
   13502 Calling this subroutine causes the process to pause for @var{SECONDS} seconds.
   13503 
   13504 @item @emph{Standard}:
   13505 GNU extension
   13506 
   13507 @item @emph{Class}:
   13508 Subroutine
   13509 
   13510 @item @emph{Syntax}:
   13511 @code{CALL SLEEP(SECONDS)}
   13512 
   13513 @item @emph{Arguments}:
   13514 @multitable @columnfractions .15 .70
   13515 @item @var{SECONDS} @tab The type shall be of default @code{INTEGER}.
   13516 @end multitable
   13517 
   13518 @item @emph{Example}:
   13519 @smallexample
   13520 program test_sleep
   13521   call sleep(5)
   13522 end
   13523 @end smallexample
   13524 @end table
   13525 
   13526 
   13527 
   13528 @node SPACING
   13529 @section @code{SPACING} --- Smallest distance between two numbers of a given type
   13530 @fnindex SPACING
   13531 @cindex real number, relative spacing
   13532 @cindex floating point, relative spacing
   13533 
   13534 @table @asis
   13535 @item @emph{Description}:
   13536 Determines the distance between the argument @var{X} and the nearest 
   13537 adjacent number of the same type.
   13538 
   13539 @item @emph{Standard}:
   13540 Fortran 90 and later
   13541 
   13542 @item @emph{Class}:
   13543 Elemental function
   13544 
   13545 @item @emph{Syntax}:
   13546 @code{RESULT = SPACING(X)}
   13547 
   13548 @item @emph{Arguments}:
   13549 @multitable @columnfractions .15 .70
   13550 @item @var{X} @tab Shall be of type @code{REAL}.
   13551 @end multitable
   13552 
   13553 @item @emph{Return value}:
   13554 The result is of the same type as the input argument @var{X}.
   13555 
   13556 @item @emph{Example}:
   13557 @smallexample
   13558 PROGRAM test_spacing
   13559   INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)
   13560   INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)
   13561 
   13562   WRITE(*,*) spacing(1.0_SGL)      ! "1.1920929E-07"          on i686
   13563   WRITE(*,*) spacing(1.0_DBL)      ! "2.220446049250313E-016" on i686
   13564 END PROGRAM
   13565 @end smallexample
   13566 
   13567 @item @emph{See also}:
   13568 @ref{RRSPACING}
   13569 @end table
   13570 
   13571 
   13572 
   13573 @node SPREAD
   13574 @section @code{SPREAD} --- Add a dimension to an array
   13575 @fnindex SPREAD
   13576 @cindex array, increase dimension
   13577 @cindex array, duplicate elements
   13578 @cindex array, duplicate dimensions
   13579 
   13580 @table @asis
   13581 @item @emph{Description}:
   13582 Replicates a @var{SOURCE} array @var{NCOPIES} times along a specified 
   13583 dimension @var{DIM}.
   13584 
   13585 @item @emph{Standard}:
   13586 Fortran 90 and later
   13587 
   13588 @item @emph{Class}:
   13589 Transformational function
   13590 
   13591 @item @emph{Syntax}:
   13592 @code{RESULT = SPREAD(SOURCE, DIM, NCOPIES)}
   13593 
   13594 @item @emph{Arguments}:
   13595 @multitable @columnfractions .15 .70
   13596 @item @var{SOURCE}  @tab Shall be a scalar or an array of any type and 
   13597 a rank less than seven.
   13598 @item @var{DIM}     @tab Shall be a scalar of type @code{INTEGER} with a 
   13599 value in the range from 1 to n+1, where n equals the rank of @var{SOURCE}.
   13600 @item @var{NCOPIES} @tab Shall be a scalar of type @code{INTEGER}.
   13601 @end multitable
   13602 
   13603 @item @emph{Return value}:
   13604 The result is an array of the same type as @var{SOURCE} and has rank n+1
   13605 where n equals the rank of @var{SOURCE}.
   13606 
   13607 @item @emph{Example}:
   13608 @smallexample
   13609 PROGRAM test_spread
   13610   INTEGER :: a = 1, b(2) = (/ 1, 2 /)
   13611   WRITE(*,*) SPREAD(A, 1, 2)            ! "1 1"
   13612   WRITE(*,*) SPREAD(B, 1, 2)            ! "1 1 2 2"
   13613 END PROGRAM
   13614 @end smallexample
   13615 
   13616 @item @emph{See also}:
   13617 @ref{UNPACK}
   13618 @end table
   13619 
   13620 
   13621 
   13622 @node SQRT
   13623 @section @code{SQRT} --- Square-root function
   13624 @fnindex SQRT
   13625 @fnindex DSQRT
   13626 @fnindex CSQRT
   13627 @fnindex ZSQRT
   13628 @fnindex CDSQRT
   13629 @cindex root
   13630 @cindex square-root
   13631 
   13632 @table @asis
   13633 @item @emph{Description}:
   13634 @code{SQRT(X)} computes the square root of @var{X}.
   13635 
   13636 @item @emph{Standard}:
   13637 Fortran 77 and later
   13638 
   13639 @item @emph{Class}:
   13640 Elemental function
   13641 
   13642 @item @emph{Syntax}:
   13643 @code{RESULT = SQRT(X)}
   13644 
   13645 @item @emph{Arguments}:
   13646 @multitable @columnfractions .15 .70
   13647 @item @var{X} @tab The type shall be @code{REAL} or
   13648 @code{COMPLEX}.
   13649 @end multitable
   13650 
   13651 @item @emph{Return value}:
   13652 The return value is of type @code{REAL} or @code{COMPLEX}.
   13653 The kind type parameter is the same as @var{X}.
   13654 
   13655 @item @emph{Example}:
   13656 @smallexample
   13657 program test_sqrt
   13658   real(8) :: x = 2.0_8
   13659   complex :: z = (1.0, 2.0)
   13660   x = sqrt(x)
   13661   z = sqrt(z)
   13662 end program test_sqrt
   13663 @end smallexample
   13664 
   13665 @item @emph{Specific names}:
   13666 @multitable @columnfractions .20 .23 .20 .33
   13667 @headitem Name             @tab Argument             @tab Return type          @tab Standard
   13668 @item @code{SQRT(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}       @tab Fortran 77 and later
   13669 @item @code{DSQRT(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}       @tab Fortran 77 and later
   13670 @item @code{CSQRT(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab Fortran 77 and later
   13671 @item @code{ZSQRT(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
   13672 @item @code{CDSQRT(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
   13673 @end multitable
   13674 @end table
   13675 
   13676 
   13677 
   13678 @node SRAND
   13679 @section @code{SRAND} --- Reinitialize the random number generator
   13680 @fnindex SRAND
   13681 @cindex random number generation, seeding
   13682 @cindex seeding a random number generator
   13683 
   13684 @table @asis
   13685 @item @emph{Description}:
   13686 @code{SRAND} reinitializes the pseudo-random number generator
   13687 called by @code{RAND} and @code{IRAND}. The new seed used by the
   13688 generator is specified by the required argument @var{SEED}.
   13689 
   13690 @item @emph{Standard}:
   13691 GNU extension
   13692 
   13693 @item @emph{Class}:
   13694 Subroutine
   13695 
   13696 @item @emph{Syntax}:
   13697 @code{CALL SRAND(SEED)}
   13698 
   13699 @item @emph{Arguments}:
   13700 @multitable @columnfractions .15 .70
   13701 @item @var{SEED} @tab Shall be a scalar @code{INTEGER(kind=4)}.
   13702 @end multitable
   13703 
   13704 @item @emph{Return value}:
   13705 Does not return anything.
   13706 
   13707 @item @emph{Example}:
   13708 See @code{RAND} and @code{IRAND} for examples.
   13709 
   13710 @item @emph{Notes}:
   13711 The Fortran standard specifies the intrinsic subroutines
   13712 @code{RANDOM_SEED} to initialize the pseudo-random number
   13713 generator and @code{RANDOM_NUMBER} to generate pseudo-random numbers.
   13714 These subroutines should be used in new codes.
   13715 
   13716 Please note that in GNU Fortran, these two sets of intrinsics (@code{RAND},
   13717 @code{IRAND} and @code{SRAND} on the one hand, @code{RANDOM_NUMBER} and
   13718 @code{RANDOM_SEED} on the other hand) access two independent
   13719 pseudo-random number generators.
   13720 
   13721 @item @emph{See also}:
   13722 @ref{RAND}, @gol
   13723 @ref{RANDOM_SEED}, @gol
   13724 @ref{RANDOM_NUMBER}
   13725 @end table
   13726 
   13727 
   13728 
   13729 @node STAT
   13730 @section @code{STAT} --- Get file status
   13731 @fnindex STAT
   13732 @cindex file system, file status
   13733 
   13734 @table @asis
   13735 @item @emph{Description}:
   13736 This function returns information about a file. No permissions are required on 
   13737 the file itself, but execute (search) permission is required on all of the 
   13738 directories in path that lead to the file.
   13739 
   13740 The elements that are obtained and stored in the array @code{VALUES}:
   13741 @multitable @columnfractions .15 .70
   13742 @item @code{VALUES(1)}   @tab  Device ID 
   13743 @item @code{VALUES(2)}   @tab  Inode number 
   13744 @item @code{VALUES(3)}   @tab  File mode 
   13745 @item @code{VALUES(4)}   @tab  Number of links 
   13746 @item @code{VALUES(5)}   @tab  Owner's uid 
   13747 @item @code{VALUES(6)}   @tab  Owner's gid 
   13748 @item @code{VALUES(7)}   @tab  ID of device containing directory entry for file (0 if not available) 
   13749 @item @code{VALUES(8)}   @tab  File size (bytes) 
   13750 @item @code{VALUES(9)}   @tab  Last access time 
   13751 @item @code{VALUES(10)}  @tab  Last modification time 
   13752 @item @code{VALUES(11)}  @tab  Last file status change time 
   13753 @item @code{VALUES(12)}  @tab  Preferred I/O block size (-1 if not available) 
   13754 @item @code{VALUES(13)}  @tab  Number of blocks allocated (-1 if not available)
   13755 @end multitable
   13756 
   13757 Not all these elements are relevant on all systems. 
   13758 If an element is not relevant, it is returned as 0.
   13759 
   13760 This intrinsic is provided in both subroutine and function forms; however,
   13761 only one form can be used in any given program unit.
   13762 
   13763 @item @emph{Standard}:
   13764 GNU extension
   13765 
   13766 @item @emph{Class}:
   13767 Subroutine, function
   13768 
   13769 @item @emph{Syntax}:
   13770 @multitable @columnfractions .80
   13771 @item @code{CALL STAT(NAME, VALUES [, STATUS])}
   13772 @item @code{STATUS = STAT(NAME, VALUES)}
   13773 @end multitable
   13774 
   13775 @item @emph{Arguments}:
   13776 @multitable @columnfractions .15 .70
   13777 @item @var{NAME}   @tab The type shall be @code{CHARACTER}, of the
   13778 default kind and a valid path within the file system.
   13779 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
   13780 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
   13781 on success and a system specific error code otherwise.
   13782 @end multitable
   13783 
   13784 @item @emph{Example}:
   13785 @smallexample
   13786 PROGRAM test_stat
   13787   INTEGER, DIMENSION(13) :: buff
   13788   INTEGER :: status
   13789 
   13790   CALL STAT("/etc/passwd", buff, status)
   13791 
   13792   IF (status == 0) THEN
   13793     WRITE (*, FMT="('Device ID:',               T30, I19)") buff(1)
   13794     WRITE (*, FMT="('Inode number:',            T30, I19)") buff(2)
   13795     WRITE (*, FMT="('File mode (octal):',       T30, O19)") buff(3)
   13796     WRITE (*, FMT="('Number of links:',         T30, I19)") buff(4)
   13797     WRITE (*, FMT="('Owner''s uid:',            T30, I19)") buff(5)
   13798     WRITE (*, FMT="('Owner''s gid:',            T30, I19)") buff(6)
   13799     WRITE (*, FMT="('Device where located:',    T30, I19)") buff(7)
   13800     WRITE (*, FMT="('File size:',               T30, I19)") buff(8)
   13801     WRITE (*, FMT="('Last access time:',        T30, A19)") CTIME(buff(9))
   13802     WRITE (*, FMT="('Last modification time',   T30, A19)") CTIME(buff(10))
   13803     WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11))
   13804     WRITE (*, FMT="('Preferred block size:',    T30, I19)") buff(12)
   13805     WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13)
   13806   END IF
   13807 END PROGRAM
   13808 @end smallexample
   13809 
   13810 @item @emph{See also}:
   13811 To stat an open file: @gol
   13812 @ref{FSTAT} @gol
   13813 To stat a link: @gol
   13814 @ref{LSTAT}
   13815 @end table
   13816 
   13817 
   13818 
   13819 @node STORAGE_SIZE
   13820 @section @code{STORAGE_SIZE} --- Storage size in bits
   13821 @fnindex STORAGE_SIZE
   13822 @cindex storage size
   13823 
   13824 @table @asis
   13825 @item @emph{Description}:
   13826 Returns the storage size of argument @var{A} in bits.
   13827 @item @emph{Standard}:
   13828 Fortran 2008 and later
   13829 @item @emph{Class}:
   13830 Inquiry function
   13831 @item @emph{Syntax}:
   13832 @code{RESULT = STORAGE_SIZE(A [, KIND])}
   13833 
   13834 @item @emph{Arguments}:
   13835 @multitable @columnfractions .15 .70
   13836 @item @var{A} @tab Shall be a scalar or array of any type.
   13837 @item @var{KIND} @tab (Optional) shall be a scalar integer constant expression.
   13838 @end multitable
   13839 
   13840 @item @emph{Return Value}:
   13841 The result is a scalar integer with the kind type parameter specified by KIND
   13842 (or default integer type if KIND is missing). The result value is the size
   13843 expressed in bits for an element of an array that has the dynamic type and type
   13844 parameters of A.
   13845 
   13846 @item @emph{See also}:
   13847 @ref{C_SIZEOF}, @gol
   13848 @ref{SIZEOF}
   13849 @end table
   13850 
   13851 
   13852 
   13853 @node SUM
   13854 @section @code{SUM} --- Sum of array elements
   13855 @fnindex SUM
   13856 @cindex array, sum
   13857 @cindex array, add elements
   13858 @cindex array, conditionally add elements
   13859 @cindex sum array elements
   13860 
   13861 @table @asis
   13862 @item @emph{Description}:
   13863 Adds the elements of @var{ARRAY} along dimension @var{DIM} if
   13864 the corresponding element in @var{MASK} is @code{TRUE}.
   13865 
   13866 @item @emph{Standard}:
   13867 Fortran 90 and later
   13868 
   13869 @item @emph{Class}:
   13870 Transformational function
   13871 
   13872 @item @emph{Syntax}:
   13873 @multitable @columnfractions .80
   13874 @item @code{RESULT = SUM(ARRAY[, MASK])}
   13875 @item @code{RESULT = SUM(ARRAY, DIM[, MASK])}
   13876 @end multitable
   13877 
   13878 @item @emph{Arguments}:
   13879 @multitable @columnfractions .15 .70
   13880 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, 
   13881 @code{REAL} or @code{COMPLEX}.
   13882 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   13883 @code{INTEGER} with a value in the range from 1 to n, where n 
   13884 equals the rank of @var{ARRAY}.
   13885 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   13886 and either be a scalar or an array of the same shape as @var{ARRAY}.
   13887 @end multitable
   13888 
   13889 @item @emph{Return value}:
   13890 The result is of the same type as @var{ARRAY}.
   13891 
   13892 If @var{DIM} is absent, a scalar with the sum of all elements in @var{ARRAY}
   13893 is returned. Otherwise, an array of rank n-1, where n equals the rank of 
   13894 @var{ARRAY}, and a shape similar to that of @var{ARRAY} with dimension @var{DIM} 
   13895 dropped is returned.
   13896 
   13897 @item @emph{Example}:
   13898 @smallexample
   13899 PROGRAM test_sum
   13900   INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
   13901   print *, SUM(x)                        ! all elements, sum = 15
   13902   print *, SUM(x, MASK=MOD(x, 2)==1)     ! odd elements, sum = 9
   13903 END PROGRAM
   13904 @end smallexample
   13905 
   13906 @item @emph{See also}:
   13907 @ref{PRODUCT}
   13908 @end table
   13909 
   13910 
   13911 
   13912 @node SYMLNK
   13913 @section @code{SYMLNK} --- Create a symbolic link
   13914 @fnindex SYMLNK
   13915 @cindex file system, create link
   13916 @cindex file system, soft link
   13917 
   13918 @table @asis
   13919 @item @emph{Description}:
   13920 Makes a symbolic link from file @var{PATH1} to @var{PATH2}. A null
   13921 character (@code{CHAR(0)}) can be used to mark the end of the names in
   13922 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
   13923 names are ignored.  If the @var{STATUS} argument is supplied, it
   13924 contains 0 on success or a nonzero error code upon return; see
   13925 @code{symlink(2)}.  If the system does not supply @code{symlink(2)}, 
   13926 @code{ENOSYS} is returned.
   13927 
   13928 This intrinsic is provided in both subroutine and function forms;
   13929 however, only one form can be used in any given program unit.
   13930 
   13931 @item @emph{Standard}:
   13932 GNU extension
   13933 
   13934 @item @emph{Class}:
   13935 Subroutine, function
   13936 
   13937 @item @emph{Syntax}:
   13938 @multitable @columnfractions .80
   13939 @item @code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
   13940 @item @code{STATUS = SYMLNK(PATH1, PATH2)}
   13941 @end multitable
   13942 
   13943 @item @emph{Arguments}:
   13944 @multitable @columnfractions .15 .70
   13945 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
   13946 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
   13947 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   13948 @end multitable
   13949 
   13950 @item @emph{See also}:
   13951 @ref{LINK}, @gol
   13952 @ref{UNLINK}
   13953 @end table
   13954 
   13955 
   13956 
   13957 @node SYSTEM
   13958 @section @code{SYSTEM} --- Execute a shell command
   13959 @fnindex SYSTEM
   13960 @cindex system, system call
   13961 
   13962 @table @asis
   13963 @item @emph{Description}:
   13964 Passes the command @var{COMMAND} to a shell (see @code{system(3)}). If
   13965 argument @var{STATUS} is present, it contains the value returned by
   13966 @code{system(3)}, which is presumably 0 if the shell command succeeded.
   13967 Note that which shell is used to invoke the command is system-dependent
   13968 and environment-dependent.
   13969 
   13970 This intrinsic is provided in both subroutine and function forms;
   13971 however, only one form can be used in any given program unit.
   13972 
   13973 Note that the @code{system} function need not be thread-safe. It is
   13974 the responsibility of the user to ensure that @code{system} is not
   13975 called concurrently.
   13976 
   13977 @item @emph{Standard}:
   13978 GNU extension
   13979 
   13980 @item @emph{Class}:
   13981 Subroutine, function
   13982 
   13983 @item @emph{Syntax}:
   13984 @multitable @columnfractions .80
   13985 @item @code{CALL SYSTEM(COMMAND [, STATUS])}
   13986 @item @code{STATUS = SYSTEM(COMMAND)}
   13987 @end multitable
   13988 
   13989 @item @emph{Arguments}:
   13990 @multitable @columnfractions .15 .70
   13991 @item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type.
   13992 @item @var{STATUS}  @tab (Optional) Shall be of default @code{INTEGER} type.
   13993 @end multitable
   13994 
   13995 @item @emph{See also}:
   13996 @ref{EXECUTE_COMMAND_LINE}, which is part of the Fortran 2008 standard
   13997 and should considered in new code for future portability.
   13998 @end table
   13999 
   14000 
   14001 
   14002 @node SYSTEM_CLOCK
   14003 @section @code{SYSTEM_CLOCK} --- Time function
   14004 @fnindex SYSTEM_CLOCK
   14005 @cindex time, clock ticks
   14006 @cindex clock ticks
   14007 
   14008 @table @asis
   14009 @item @emph{Description}:
   14010 Determines the @var{COUNT} of a processor clock since an unspecified
   14011 time in the past modulo @var{COUNT_MAX}, @var{COUNT_RATE} determines
   14012 the number of clock ticks per second.  If the platform supports a
   14013 monotonic clock, that clock is used and can, depending on the platform
   14014 clock implementation, provide up to nanosecond resolution.  If a
   14015 monotonic clock is not available, the implementation falls back to a
   14016 realtime clock.
   14017 
   14018 @var{COUNT_RATE} is system dependent and can vary depending on the kind of
   14019 the arguments. For @var{kind=4} arguments (and smaller integer kinds),
   14020 @var{COUNT} represents milliseconds, while for @var{kind=8} arguments (and
   14021 larger integer kinds), @var{COUNT} typically represents micro- or
   14022 nanoseconds depending on resolution of the underlying platform clock.
   14023 @var{COUNT_MAX} usually equals @code{HUGE(COUNT_MAX)}. Note that the
   14024 millisecond resolution of the @var{kind=4} version implies that the
   14025 @var{COUNT} will wrap around in roughly 25 days. In order to avoid issues
   14026 with the wrap around and for more precise timing, please use the
   14027 @var{kind=8} version.
   14028 
   14029 If there is no clock, or querying the clock fails, @var{COUNT} is set
   14030 to @code{-HUGE(COUNT)}, and @var{COUNT_RATE} and @var{COUNT_MAX} are
   14031 set to zero.
   14032 
   14033 When running on a platform using the GNU C library (glibc) version
   14034 2.16 or older, or a derivative thereof, the high resolution monotonic
   14035 clock is available only when linking with the @var{rt} library.  This
   14036 can be done explicitly by adding the @code{-lrt} flag when linking the
   14037 application, but is also done implicitly when using OpenMP.
   14038 
   14039 On the Windows platform, the version with @var{kind=4} arguments uses
   14040 the @code{GetTickCount} function, whereas the @var{kind=8} version
   14041 uses @code{QueryPerformanceCounter} and
   14042 @code{QueryPerformanceCounterFrequency}. For more information, and
   14043 potential caveats, please see the platform documentation.
   14044 
   14045 @item @emph{Standard}:
   14046 Fortran 90 and later
   14047 
   14048 @item @emph{Class}:
   14049 Subroutine
   14050 
   14051 @item @emph{Syntax}:
   14052 @code{CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])}
   14053 
   14054 @item @emph{Arguments}:
   14055 @multitable @columnfractions .20 .65
   14056 @item @var{COUNT}      @tab (Optional) shall be a scalar of type 
   14057 @code{INTEGER} with @code{INTENT(OUT)}.
   14058 @item @var{COUNT_RATE} @tab (Optional) shall be a scalar of type 
   14059 @code{INTEGER} or @code{REAL}, with @code{INTENT(OUT)}.
   14060 @item @var{COUNT_MAX}  @tab (Optional) shall be a scalar of type 
   14061 @code{INTEGER} with @code{INTENT(OUT)}.
   14062 @end multitable
   14063 
   14064 @item @emph{Example}:
   14065 @smallexample
   14066 PROGRAM test_system_clock
   14067   INTEGER :: count, count_rate, count_max
   14068   CALL SYSTEM_CLOCK(count, count_rate, count_max)
   14069   WRITE(*,*) count, count_rate, count_max
   14070 END PROGRAM
   14071 @end smallexample
   14072 
   14073 @item @emph{See also}:
   14074 @ref{DATE_AND_TIME}, @gol
   14075 @ref{CPU_TIME}
   14076 @end table
   14077 
   14078 
   14079 
   14080 @node TAN
   14081 @section @code{TAN} --- Tangent function
   14082 @fnindex TAN
   14083 @fnindex DTAN
   14084 @cindex trigonometric function, tangent
   14085 @cindex tangent
   14086 
   14087 @table @asis
   14088 @item @emph{Description}:
   14089 @code{TAN(X)} computes the tangent of @var{X}.
   14090 
   14091 @item @emph{Standard}:
   14092 Fortran 77 and later, for a complex argument Fortran 2008 or later
   14093 
   14094 @item @emph{Class}:
   14095 Elemental function
   14096 
   14097 @item @emph{Syntax}:
   14098 @code{RESULT = TAN(X)}
   14099 
   14100 @item @emph{Arguments}:
   14101 @multitable @columnfractions .15 .70
   14102 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   14103 @end multitable
   14104 
   14105 @item @emph{Return value}:
   14106 The return value has same type and kind as @var{X}, and its value is in radians.
   14107 
   14108 @item @emph{Example}:
   14109 @smallexample
   14110 program test_tan
   14111   real(8) :: x = 0.165_8
   14112   x = tan(x)
   14113 end program test_tan
   14114 @end smallexample
   14115 
   14116 @item @emph{Specific names}:
   14117 @multitable @columnfractions .20 .23 .20 .33
   14118 @headitem Name            @tab Argument          @tab Return type     @tab Standard
   14119 @item @code{TAN(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab Fortran 77 and later
   14120 @item @code{DTAN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab Fortran 77 and later
   14121 @end multitable
   14122 
   14123 @item @emph{See also}:
   14124 Inverse function: @gol
   14125 @ref{ATAN} @gol
   14126 Degrees function: @gol
   14127 @ref{TAND}
   14128 @end table
   14129 
   14130 
   14131 
   14132 @node TAND
   14133 @section @code{TAND} --- Tangent function, degrees
   14134 @fnindex TAND
   14135 @fnindex DTAND
   14136 @cindex trigonometric function, tangent, degrees
   14137 @cindex tangent, degrees
   14138 
   14139 @table @asis
   14140 @item @emph{Description}:
   14141 @code{TAND(X)} computes the tangent of @var{X} in degrees.
   14142 
   14143 This function is for compatibility only and should be avoided in favor of
   14144 standard constructs wherever possible.
   14145 
   14146 @item @emph{Standard}:
   14147 GNU extension, enabled with @option{-fdec-math}.
   14148 
   14149 @item @emph{Class}:
   14150 Elemental function
   14151 
   14152 @item @emph{Syntax}:
   14153 @code{RESULT = TAND(X)}
   14154 
   14155 @item @emph{Arguments}:
   14156 @multitable @columnfractions .15 .70
   14157 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   14158 @end multitable
   14159 
   14160 @item @emph{Return value}:
   14161 The return value has same type and kind as @var{X}, and its value is in degrees.
   14162 
   14163 @item @emph{Example}:
   14164 @smallexample
   14165 program test_tand
   14166   real(8) :: x = 0.165_8
   14167   x = tand(x)
   14168 end program test_tand
   14169 @end smallexample
   14170 
   14171 @item @emph{Specific names}:
   14172 @multitable @columnfractions .20 .23 .20 .33
   14173 @headitem Name            @tab Argument          @tab Return type     @tab Standard
   14174 @item @code{TAND(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU extension
   14175 @item @code{DTAND(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU extension
   14176 @end multitable
   14177 
   14178 @item @emph{See also}:
   14179 Inverse function: @gol
   14180 @ref{ATAND} @gol
   14181 Radians function: @gol
   14182 @ref{TAN}
   14183 @end table
   14184 
   14185 
   14186 
   14187 @node TANH
   14188 @section @code{TANH} --- Hyperbolic tangent function 
   14189 @fnindex TANH
   14190 @fnindex DTANH
   14191 @cindex hyperbolic tangent
   14192 @cindex hyperbolic function, tangent
   14193 @cindex tangent, hyperbolic
   14194 
   14195 @table @asis
   14196 @item @emph{Description}:
   14197 @code{TANH(X)} computes the hyperbolic tangent of @var{X}.
   14198 
   14199 @item @emph{Standard}:
   14200 Fortran 77 and later, for a complex argument Fortran 2008 or later
   14201 
   14202 @item @emph{Class}:
   14203 Elemental function
   14204 
   14205 @item @emph{Syntax}:
   14206 @code{X = TANH(X)}
   14207 
   14208 @item @emph{Arguments}:
   14209 @multitable @columnfractions .15 .70
   14210 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   14211 @end multitable
   14212 
   14213 @item @emph{Return value}:
   14214 The return value has same type and kind as @var{X}. If @var{X} is
   14215 complex, the imaginary part of the result is in radians. If @var{X}
   14216 is @code{REAL}, the return value lies in the range
   14217 @math{ - 1 \leq tanh(x) \leq 1 }.
   14218 
   14219 @item @emph{Example}:
   14220 @smallexample
   14221 program test_tanh
   14222   real(8) :: x = 2.1_8
   14223   x = tanh(x)
   14224 end program test_tanh
   14225 @end smallexample
   14226 
   14227 @item @emph{Specific names}:
   14228 @multitable @columnfractions .20 .23 .20 .33
   14229 @headitem Name            @tab Argument          @tab Return type       @tab Standard
   14230 @item @code{TANH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   14231 @item @code{DTANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   14232 @end multitable
   14233 
   14234 @item @emph{See also}:
   14235 @ref{ATANH}
   14236 @end table
   14237 
   14238 
   14239 
   14240 @node THIS_IMAGE
   14241 @section @code{THIS_IMAGE} --- Function that returns the cosubscript index of this image
   14242 @fnindex THIS_IMAGE
   14243 @cindex coarray, @code{THIS_IMAGE}
   14244 @cindex images, index of this image
   14245 
   14246 @table @asis
   14247 @item @emph{Description}:
   14248 Returns the cosubscript for this image.
   14249 
   14250 @item @emph{Standard}:
   14251 Fortran 2008 and later. With @var{DISTANCE} argument, 
   14252 Technical Specification (TS) 18508 or later
   14253 
   14254 @item @emph{Class}:
   14255 Transformational function
   14256 
   14257 @item @emph{Syntax}:
   14258 @multitable @columnfractions .80
   14259 @item @code{RESULT = THIS_IMAGE()}
   14260 @item @code{RESULT = THIS_IMAGE(DISTANCE)}
   14261 @item @code{RESULT = THIS_IMAGE(COARRAY [, DIM])}
   14262 @end multitable
   14263 
   14264 @item @emph{Arguments}:
   14265 @multitable @columnfractions .15 .70
   14266 @item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer
   14267 (not permitted together with @var{COARRAY}).
   14268 @item @var{COARRAY} @tab Coarray of any type  (optional; if @var{DIM}
   14269 present, required).
   14270 @item @var{DIM}     @tab default integer scalar (optional). If present,
   14271 @var{DIM} shall be between one and the corank of @var{COARRAY}.
   14272 @end multitable
   14273 
   14274 
   14275 @item @emph{Return value}:
   14276 Default integer. If @var{COARRAY} is not present, it is scalar; if
   14277 @var{DISTANCE} is not present or has value 0, its value is the image index on
   14278 the invoking image for the current team, for values smaller or equal
   14279 distance to the initial team, it returns the image index on the ancestor team
   14280 which has a distance of @var{DISTANCE} from the invoking team. If
   14281 @var{DISTANCE} is larger than the distance to the initial team, the image
   14282 index of the initial team is returned. Otherwise when the @var{COARRAY} is
   14283 present, if @var{DIM} is not present, a rank-1 array with corank elements is
   14284 returned, containing the cosubscripts for @var{COARRAY} specifying the invoking
   14285 image. If @var{DIM} is present, a scalar is returned, with the value of
   14286 the @var{DIM} element of @code{THIS_IMAGE(COARRAY)}.
   14287 
   14288 @item @emph{Example}:
   14289 @smallexample
   14290 INTEGER :: value[*]
   14291 INTEGER :: i
   14292 value = THIS_IMAGE()
   14293 SYNC ALL
   14294 IF (THIS_IMAGE() == 1) THEN
   14295   DO i = 1, NUM_IMAGES()
   14296     WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
   14297   END DO
   14298 END IF
   14299 
   14300 ! Check whether the current image is the initial image
   14301 IF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE())
   14302   error stop "something is rotten here"
   14303 @end smallexample
   14304 
   14305 @item @emph{See also}:
   14306 @ref{NUM_IMAGES}, @gol
   14307 @ref{IMAGE_INDEX}
   14308 @end table
   14309 
   14310 
   14311 
   14312 @node TIME
   14313 @section @code{TIME} --- Time function
   14314 @fnindex TIME
   14315 @cindex time, current
   14316 @cindex current time
   14317 
   14318 @table @asis
   14319 @item @emph{Description}:
   14320 Returns the current time encoded as an integer (in the manner of the
   14321 function @code{time(3)} in the C standard library). This value is
   14322 suitable for passing to @ref{CTIME}, @ref{GMTIME}, and @ref{LTIME}.
   14323 
   14324 This intrinsic is not fully portable, such as to systems with 32-bit
   14325 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
   14326 the values returned by this intrinsic might be, or become, negative, or
   14327 numerically less than previous values, during a single run of the
   14328 compiled program.
   14329 
   14330 See @ref{TIME8}, for information on a similar intrinsic that might be
   14331 portable to more GNU Fortran implementations, though to fewer Fortran
   14332 compilers.
   14333 
   14334 @item @emph{Standard}:
   14335 GNU extension
   14336 
   14337 @item @emph{Class}:
   14338 Function
   14339 
   14340 @item @emph{Syntax}:
   14341 @code{RESULT = TIME()}
   14342 
   14343 @item @emph{Return value}:
   14344 The return value is a scalar of type @code{INTEGER(4)}.
   14345 
   14346 @item @emph{See also}:
   14347 @ref{DATE_AND_TIME}, @gol
   14348 @ref{CTIME}, @gol
   14349 @ref{GMTIME}, @gol
   14350 @ref{LTIME}, @gol
   14351 @ref{MCLOCK}, @gol
   14352 @ref{TIME8}
   14353 @end table
   14354 
   14355 
   14356 
   14357 @node TIME8
   14358 @section @code{TIME8} --- Time function (64-bit)
   14359 @fnindex TIME8
   14360 @cindex time, current
   14361 @cindex current time
   14362 
   14363 @table @asis
   14364 @item @emph{Description}:
   14365 Returns the current time encoded as an integer (in the manner of the
   14366 function @code{time(3)} in the C standard library). This value is
   14367 suitable for passing to @ref{CTIME}, @ref{GMTIME}, and @ref{LTIME}.
   14368 
   14369 @emph{Warning:} this intrinsic does not increase the range of the timing
   14370 values over that returned by @code{time(3)}. On a system with a 32-bit
   14371 @code{time(3)}, @code{TIME8} will return a 32-bit value, even though
   14372 it is converted to a 64-bit @code{INTEGER(8)} value. That means
   14373 overflows of the 32-bit value can still occur. Therefore, the values
   14374 returned by this intrinsic might be or become negative or numerically
   14375 less than previous values during a single run of the compiled program.
   14376 
   14377 @item @emph{Standard}:
   14378 GNU extension
   14379 
   14380 @item @emph{Class}:
   14381 Function
   14382 
   14383 @item @emph{Syntax}:
   14384 @code{RESULT = TIME8()}
   14385 
   14386 @item @emph{Return value}:
   14387 The return value is a scalar of type @code{INTEGER(8)}.
   14388 
   14389 @item @emph{See also}:
   14390 @ref{DATE_AND_TIME}, @gol
   14391 @ref{CTIME}, @gol
   14392 @ref{GMTIME}, @gol
   14393 @ref{LTIME}, @gol
   14394 @ref{MCLOCK8}, @gol
   14395 @ref{TIME}
   14396 @end table
   14397 
   14398 
   14399 
   14400 @node TINY
   14401 @section @code{TINY} --- Smallest positive number of a real kind
   14402 @fnindex TINY
   14403 @cindex limits, smallest number
   14404 @cindex model representation, smallest number
   14405 
   14406 @table @asis
   14407 @item @emph{Description}:
   14408 @code{TINY(X)} returns the smallest positive (non zero) number
   14409 in the model of the type of @code{X}.
   14410 
   14411 @item @emph{Standard}:
   14412 Fortran 90 and later
   14413 
   14414 @item @emph{Class}:
   14415 Inquiry function
   14416 
   14417 @item @emph{Syntax}:
   14418 @code{RESULT = TINY(X)}
   14419 
   14420 @item @emph{Arguments}:
   14421 @multitable @columnfractions .15 .70
   14422 @item @var{X} @tab Shall be of type @code{REAL}.
   14423 @end multitable
   14424 
   14425 @item @emph{Return value}:
   14426 The return value is of the same type and kind as @var{X}
   14427 
   14428 @item @emph{Example}:
   14429 See @code{HUGE} for an example.
   14430 @end table
   14431 
   14432 
   14433 
   14434 @node TRAILZ
   14435 @section @code{TRAILZ} --- Number of trailing zero bits of an integer
   14436 @fnindex TRAILZ
   14437 @cindex zero bits
   14438 
   14439 @table @asis
   14440 @item @emph{Description}:
   14441 @code{TRAILZ} returns the number of trailing zero bits of an integer.
   14442 
   14443 @item @emph{Standard}:
   14444 Fortran 2008 and later
   14445 
   14446 @item @emph{Class}:
   14447 Elemental function
   14448 
   14449 @item @emph{Syntax}:
   14450 @code{RESULT = TRAILZ(I)}
   14451 
   14452 @item @emph{Arguments}:
   14453 @multitable @columnfractions .15 .70
   14454 @item @var{I} @tab Shall be of type @code{INTEGER}.
   14455 @end multitable
   14456 
   14457 @item @emph{Return value}:
   14458 The type of the return value is the default @code{INTEGER}.
   14459 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
   14460 
   14461 @item @emph{Example}:
   14462 @smallexample
   14463 PROGRAM test_trailz
   14464   WRITE (*,*) TRAILZ(8)  ! prints 3
   14465 END PROGRAM
   14466 @end smallexample
   14467 
   14468 @item @emph{See also}:
   14469 @ref{BIT_SIZE}, @gol
   14470 @ref{LEADZ}, @gol
   14471 @ref{POPPAR}, @gol
   14472 @ref{POPCNT}
   14473 @end table
   14474 
   14475 
   14476 
   14477 @node TRANSFER
   14478 @section @code{TRANSFER} --- Transfer bit patterns
   14479 @fnindex TRANSFER
   14480 @cindex bits, move
   14481 @cindex type cast
   14482 
   14483 @table @asis
   14484 @item @emph{Description}:
   14485 Interprets the bitwise representation of @var{SOURCE} in memory as if it
   14486 is the representation of a variable or array of the same type and type
   14487 parameters as @var{MOLD}.
   14488 
   14489 This is approximately equivalent to the C concept of @emph{casting} one
   14490 type to another.
   14491 
   14492 @item @emph{Standard}:
   14493 Fortran 90 and later
   14494 
   14495 @item @emph{Class}:
   14496 Transformational function
   14497 
   14498 @item @emph{Syntax}:
   14499 @code{RESULT = TRANSFER(SOURCE, MOLD[, SIZE])}
   14500 
   14501 @item @emph{Arguments}:
   14502 @multitable @columnfractions .15 .70
   14503 @item @var{SOURCE} @tab Shall be a scalar or an array of any type.
   14504 @item @var{MOLD}   @tab Shall be a scalar or an array of any type.
   14505 @item @var{SIZE}   @tab (Optional) shall be a scalar of type 
   14506 @code{INTEGER}.
   14507 @end multitable
   14508 
   14509 @item @emph{Return value}:
   14510 The result has the same type as @var{MOLD}, with the bit level
   14511 representation of @var{SOURCE}.  If @var{SIZE} is present, the result is
   14512 a one-dimensional array of length @var{SIZE}.  If @var{SIZE} is absent
   14513 but @var{MOLD} is an array (of any size or shape), the result is a one-
   14514 dimensional array of the minimum length needed to contain the entirety
   14515 of the bitwise representation of @var{SOURCE}.   If @var{SIZE} is absent
   14516 and @var{MOLD} is a scalar, the result is a scalar.
   14517 
   14518 If the bitwise representation of the result is longer than that of
   14519 @var{SOURCE}, then the leading bits of the result correspond to those of
   14520 @var{SOURCE} and any trailing bits are filled arbitrarily.
   14521 
   14522 When the resulting bit representation does not correspond to a valid
   14523 representation of a variable of the same type as @var{MOLD}, the results
   14524 are undefined, and subsequent operations on the result cannot be
   14525 guaranteed to produce sensible behavior.  For example, it is possible to
   14526 create @code{LOGICAL} variables for which @code{@var{VAR}} and
   14527 @code{.NOT.@var{VAR}} both appear to be true.
   14528 
   14529 @item @emph{Example}:
   14530 @smallexample
   14531 PROGRAM test_transfer
   14532   integer :: x = 2143289344
   14533   print *, transfer(x, 1.0)    ! prints "NaN" on i686
   14534 END PROGRAM
   14535 @end smallexample
   14536 @end table
   14537 
   14538 
   14539 
   14540 @node TRANSPOSE
   14541 @section @code{TRANSPOSE} --- Transpose an array of rank two
   14542 @fnindex TRANSPOSE
   14543 @cindex array, transpose
   14544 @cindex matrix, transpose
   14545 @cindex transpose
   14546 
   14547 @table @asis
   14548 @item @emph{Description}:
   14549 Transpose an array of rank two. Element (i, j) of the result has the value 
   14550 @code{MATRIX(j, i)}, for all i, j.
   14551 
   14552 @item @emph{Standard}:
   14553 Fortran 90 and later
   14554 
   14555 @item @emph{Class}:
   14556 Transformational function
   14557 
   14558 @item @emph{Syntax}:
   14559 @code{RESULT = TRANSPOSE(MATRIX)}
   14560 
   14561 @item @emph{Arguments}:
   14562 @multitable @columnfractions .15 .70
   14563 @item @var{MATRIX} @tab Shall be an array of any type and have a rank of two.
   14564 @end multitable
   14565 
   14566 @item @emph{Return value}:
   14567 The result has the same type as @var{MATRIX}, and has shape 
   14568 @code{(/ m, n /)} if @var{MATRIX} has shape @code{(/ n, m /)}.
   14569 @end table
   14570 
   14571 
   14572 
   14573 @node TRIM
   14574 @section @code{TRIM} --- Remove trailing blank characters of a string
   14575 @fnindex TRIM
   14576 @cindex string, remove trailing whitespace
   14577 
   14578 @table @asis
   14579 @item @emph{Description}:
   14580 Removes trailing blank characters of a string.
   14581 
   14582 @item @emph{Standard}:
   14583 Fortran 90 and later
   14584 
   14585 @item @emph{Class}:
   14586 Transformational function
   14587 
   14588 @item @emph{Syntax}:
   14589 @code{RESULT = TRIM(STRING)}
   14590 
   14591 @item @emph{Arguments}:
   14592 @multitable @columnfractions .15 .70
   14593 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}.
   14594 @end multitable
   14595 
   14596 @item @emph{Return value}:
   14597 A scalar of type @code{CHARACTER} which length is that of @var{STRING}
   14598 less the number of trailing blanks.
   14599 
   14600 @item @emph{Example}:
   14601 @smallexample
   14602 PROGRAM test_trim
   14603   CHARACTER(len=10), PARAMETER :: s = "GFORTRAN  "
   14604   WRITE(*,*) LEN(s), LEN(TRIM(s))  ! "10 8", with/without trailing blanks
   14605 END PROGRAM
   14606 @end smallexample
   14607 
   14608 @item @emph{See also}:
   14609 @ref{ADJUSTL}, @gol
   14610 @ref{ADJUSTR}
   14611 @end table
   14612 
   14613 
   14614 
   14615 @node TTYNAM
   14616 @section @code{TTYNAM} --- Get the name of a terminal device.
   14617 @fnindex TTYNAM
   14618 @cindex system, terminal
   14619 
   14620 @table @asis
   14621 @item @emph{Description}:
   14622 Get the name of a terminal device. For more information, 
   14623 see @code{ttyname(3)}.
   14624 
   14625 This intrinsic is provided in both subroutine and function forms; 
   14626 however, only one form can be used in any given program unit. 
   14627 
   14628 @item @emph{Standard}:
   14629 GNU extension
   14630 
   14631 @item @emph{Class}:
   14632 Subroutine, function
   14633 
   14634 @item @emph{Syntax}:
   14635 @multitable @columnfractions .80
   14636 @item @code{CALL TTYNAM(UNIT, NAME)}
   14637 @item @code{NAME = TTYNAM(UNIT)}
   14638 @end multitable
   14639 
   14640 @item @emph{Arguments}:
   14641 @multitable @columnfractions .15 .70
   14642 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
   14643 @item @var{NAME} @tab Shall be of type @code{CHARACTER}.
   14644 @end multitable
   14645 
   14646 @item @emph{Example}:
   14647 @smallexample
   14648 PROGRAM test_ttynam
   14649   INTEGER :: unit
   14650   DO unit = 1, 10
   14651     IF (isatty(unit=unit)) write(*,*) ttynam(unit)
   14652   END DO
   14653 END PROGRAM
   14654 @end smallexample
   14655 
   14656 @item @emph{See also}:
   14657 @ref{ISATTY}
   14658 @end table
   14659 
   14660 
   14661 
   14662 @node UBOUND
   14663 @section @code{UBOUND} --- Upper dimension bounds of an array
   14664 @fnindex UBOUND
   14665 @cindex array, upper bound
   14666 
   14667 @table @asis
   14668 @item @emph{Description}:
   14669 Returns the upper bounds of an array, or a single upper bound
   14670 along the @var{DIM} dimension.
   14671 @item @emph{Standard}:
   14672 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   14673 
   14674 @item @emph{Class}:
   14675 Inquiry function
   14676 
   14677 @item @emph{Syntax}:
   14678 @code{RESULT = UBOUND(ARRAY [, DIM [, KIND]])}
   14679 
   14680 @item @emph{Arguments}:
   14681 @multitable @columnfractions .15 .70
   14682 @item @var{ARRAY} @tab Shall be an array, of any type.
   14683 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   14684 @item @var{KIND}@tab (Optional) An @code{INTEGER} initialization
   14685 expression indicating the kind parameter of the result.
   14686 @end multitable
   14687 
   14688 @item @emph{Return value}:
   14689 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   14690 @var{KIND} is absent, the return value is of default integer kind.
   14691 If @var{DIM} is absent, the result is an array of the upper bounds of
   14692 @var{ARRAY}.  If @var{DIM} is present, the result is a scalar
   14693 corresponding to the upper bound of the array along that dimension.  If
   14694 @var{ARRAY} is an expression rather than a whole array or array
   14695 structure component, or if it has a zero extent along the relevant
   14696 dimension, the upper bound is taken to be the number of elements along
   14697 the relevant dimension.
   14698 
   14699 @item @emph{See also}:
   14700 @ref{LBOUND}, @gol
   14701 @ref{LCOBOUND}
   14702 @end table
   14703 
   14704 
   14705 
   14706 @node UCOBOUND
   14707 @section @code{UCOBOUND} --- Upper codimension bounds of an array
   14708 @fnindex UCOBOUND
   14709 @cindex coarray, upper bound
   14710 
   14711 @table @asis
   14712 @item @emph{Description}:
   14713 Returns the upper cobounds of a coarray, or a single upper cobound
   14714 along the @var{DIM} codimension.
   14715 @item @emph{Standard}:
   14716 Fortran 2008 and later
   14717 
   14718 @item @emph{Class}:
   14719 Inquiry function
   14720 
   14721 @item @emph{Syntax}:
   14722 @code{RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])}
   14723 
   14724 @item @emph{Arguments}:
   14725 @multitable @columnfractions .15 .70
   14726 @item @var{ARRAY} @tab Shall be an coarray, of any type.
   14727 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   14728 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   14729 expression indicating the kind parameter of the result.
   14730 @end multitable
   14731 
   14732 @item @emph{Return value}:
   14733 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   14734 @var{KIND} is absent, the return value is of default integer kind.
   14735 If @var{DIM} is absent, the result is an array of the lower cobounds of
   14736 @var{COARRAY}.  If @var{DIM} is present, the result is a scalar
   14737 corresponding to the lower cobound of the array along that codimension.
   14738 
   14739 @item @emph{See also}:
   14740 @ref{LCOBOUND}, @gol
   14741 @ref{LBOUND}
   14742 @end table
   14743 
   14744 
   14745 
   14746 @node UMASK
   14747 @section @code{UMASK} --- Set the file creation mask
   14748 @fnindex UMASK
   14749 @cindex file system, file creation mask
   14750 
   14751 @table @asis
   14752 @item @emph{Description}:
   14753 Sets the file creation mask to @var{MASK}. If called as a function, it
   14754 returns the old value. If called as a subroutine and argument @var{OLD}
   14755 if it is supplied, it is set to the old value. See @code{umask(2)}.
   14756 
   14757 @item @emph{Standard}:
   14758 GNU extension
   14759 
   14760 @item @emph{Class}:
   14761 Subroutine, function
   14762 
   14763 @item @emph{Syntax}:
   14764 @multitable @columnfractions .80
   14765 @item @code{CALL UMASK(MASK [, OLD])}
   14766 @item @code{OLD = UMASK(MASK)}
   14767 @end multitable
   14768 
   14769 @item @emph{Arguments}:
   14770 @multitable @columnfractions .15 .70
   14771 @item @var{MASK} @tab Shall be a scalar of type @code{INTEGER}.
   14772 @item @var{OLD} @tab (Optional) Shall be a scalar of type
   14773 @code{INTEGER}.
   14774 @end multitable
   14775 
   14776 @end table
   14777 
   14778 
   14779 
   14780 @node UNLINK
   14781 @section @code{UNLINK} --- Remove a file from the file system
   14782 @fnindex UNLINK
   14783 @cindex file system, remove file
   14784 
   14785 @table @asis
   14786 @item @emph{Description}:
   14787 Unlinks the file @var{PATH}. A null character (@code{CHAR(0)}) can be
   14788 used to mark the end of the name in @var{PATH}; otherwise, trailing
   14789 blanks in the file name are ignored.  If the @var{STATUS} argument is
   14790 supplied, it contains 0 on success or a nonzero error code upon return;
   14791 see @code{unlink(2)}.
   14792 
   14793 This intrinsic is provided in both subroutine and function forms;
   14794 however, only one form can be used in any given program unit.
   14795 
   14796 @item @emph{Standard}:
   14797 GNU extension
   14798 
   14799 @item @emph{Class}:
   14800 Subroutine, function
   14801 
   14802 @item @emph{Syntax}:
   14803 @multitable @columnfractions .80
   14804 @item @code{CALL UNLINK(PATH [, STATUS])}
   14805 @item @code{STATUS = UNLINK(PATH)}
   14806 @end multitable
   14807 
   14808 @item @emph{Arguments}:
   14809 @multitable @columnfractions .15 .70
   14810 @item @var{PATH} @tab Shall be of default @code{CHARACTER} type.
   14811 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   14812 @end multitable
   14813 
   14814 @item @emph{See also}:
   14815 @ref{LINK}, @gol
   14816 @ref{SYMLNK}
   14817 @end table
   14818 
   14819 
   14820 
   14821 @node UNPACK
   14822 @section @code{UNPACK} --- Unpack an array of rank one into an array
   14823 @fnindex UNPACK
   14824 @cindex array, unpacking
   14825 @cindex array, increase dimension
   14826 @cindex array, scatter elements
   14827 
   14828 @table @asis
   14829 @item @emph{Description}:
   14830 Store the elements of @var{VECTOR} in an array of higher rank.
   14831 
   14832 @item @emph{Standard}:
   14833 Fortran 90 and later
   14834 
   14835 @item @emph{Class}:
   14836 Transformational function
   14837 
   14838 @item @emph{Syntax}:
   14839 @code{RESULT = UNPACK(VECTOR, MASK, FIELD)}
   14840 
   14841 @item @emph{Arguments}:
   14842 @multitable @columnfractions .15 .70
   14843 @item @var{VECTOR} @tab Shall be an array of any type and rank one. It 
   14844 shall have at least as many elements as @var{MASK} has @code{TRUE} values.
   14845 @item @var{MASK}   @tab Shall be an array of type @code{LOGICAL}.
   14846 @item @var{FIELD}  @tab Shall be of the same type as @var{VECTOR} and have
   14847 the same shape as @var{MASK}.
   14848 @end multitable
   14849 
   14850 @item @emph{Return value}:
   14851 The resulting array corresponds to @var{FIELD} with @code{TRUE} elements
   14852 of @var{MASK} replaced by values from @var{VECTOR} in array element order.
   14853 
   14854 @item @emph{Example}:
   14855 @smallexample
   14856 PROGRAM test_unpack
   14857   integer :: vector(2)  = (/1,1/)
   14858   logical :: mask(4)  = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
   14859   integer :: field(2,2) = 0, unity(2,2)
   14860 
   14861   ! result: unity matrix
   14862   unity = unpack(vector, reshape(mask, (/2,2/)), field)
   14863 END PROGRAM
   14864 @end smallexample
   14865 
   14866 @item @emph{See also}:
   14867 @ref{PACK}, @gol
   14868 @ref{SPREAD}
   14869 @end table
   14870 
   14871 
   14872 
   14873 @node VERIFY
   14874 @section @code{VERIFY} --- Scan a string for characters not a given set
   14875 @fnindex VERIFY
   14876 @cindex string, find missing set
   14877 
   14878 @table @asis
   14879 @item @emph{Description}:
   14880 Verifies that all the characters in @var{STRING} belong to the set of
   14881 characters in @var{SET}.
   14882 
   14883 If @var{BACK} is either absent or equals @code{FALSE}, this function
   14884 returns the position of the leftmost character of @var{STRING} that is
   14885 not in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost
   14886 position is returned. If all characters of @var{STRING} are found in
   14887 @var{SET}, the result is zero.
   14888 
   14889 @item @emph{Standard}:
   14890 Fortran 90 and later, with @var{KIND} argument Fortran 2003 and later
   14891 
   14892 @item @emph{Class}:
   14893 Elemental function
   14894 
   14895 @item @emph{Syntax}:
   14896 @code{RESULT = VERIFY(STRING, SET[, BACK [, KIND]])}
   14897 
   14898 @item @emph{Arguments}:
   14899 @multitable @columnfractions .15 .70
   14900 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
   14901 @item @var{SET}    @tab Shall be of type @code{CHARACTER}.
   14902 @item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
   14903 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
   14904 expression indicating the kind parameter of the result.
   14905 @end multitable
   14906 
   14907 @item @emph{Return value}:
   14908 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   14909 @var{KIND} is absent, the return value is of default integer kind.
   14910 
   14911 @item @emph{Example}:
   14912 @smallexample
   14913 PROGRAM test_verify
   14914   WRITE(*,*) VERIFY("FORTRAN", "AO")           ! 1, found 'F'
   14915   WRITE(*,*) VERIFY("FORTRAN", "FOO")          ! 3, found 'R'
   14916   WRITE(*,*) VERIFY("FORTRAN", "C++")          ! 1, found 'F'
   14917   WRITE(*,*) VERIFY("FORTRAN", "C++", .TRUE.)  ! 7, found 'N'
   14918   WRITE(*,*) VERIFY("FORTRAN", "FORTRAN")      ! 0' found none
   14919 END PROGRAM
   14920 @end smallexample
   14921 
   14922 @item @emph{See also}:
   14923 @ref{SCAN}, @gol
   14924 @ref{INDEX intrinsic}
   14925 @end table
   14926 
   14927 
   14928 
   14929 @node XOR
   14930 @section @code{XOR} --- Bitwise logical exclusive OR
   14931 @fnindex XOR
   14932 @cindex bitwise logical exclusive or
   14933 @cindex logical exclusive or, bitwise
   14934 
   14935 @table @asis
   14936 @item @emph{Description}:
   14937 Bitwise logical exclusive or. 
   14938 
   14939 This intrinsic routine is provided for backwards compatibility with 
   14940 GNU Fortran 77.  For integer arguments, programmers should consider
   14941 the use of the @ref{IEOR} intrinsic and for logical arguments the
   14942 @code{.NEQV.} operator, which are both defined by the Fortran standard.
   14943 
   14944 @item @emph{Standard}:
   14945 GNU extension
   14946 
   14947 @item @emph{Class}:
   14948 Function
   14949 
   14950 @item @emph{Syntax}:
   14951 @code{RESULT = XOR(I, J)}
   14952 
   14953 @item @emph{Arguments}:
   14954 @multitable @columnfractions .15 .70
   14955 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
   14956 type or a scalar @code{LOGICAL} type or a boz-literal-constant.
   14957 @item @var{J} @tab The type shall be the same as the type of @var{I} or
   14958 a boz-literal-constant. @var{I} and @var{J} shall not both be
   14959 boz-literal-constants.  If either @var{I} and @var{J} is a
   14960 boz-literal-constant, then the other argument must be a scalar @code{INTEGER}.
   14961 @end multitable
   14962 
   14963 @item @emph{Return value}:
   14964 The return type is either a scalar @code{INTEGER} or a scalar
   14965 @code{LOGICAL}.  If the kind type parameters differ, then the
   14966 smaller kind type is implicitly converted to larger kind, and the 
   14967 return has the larger kind.  A boz-literal-constant is 
   14968 converted to an @code{INTEGER} with the kind type parameter of
   14969 the other argument as-if a call to @ref{INT} occurred.
   14970 
   14971 @item @emph{Example}:
   14972 @smallexample
   14973 PROGRAM test_xor
   14974   LOGICAL :: T = .TRUE., F = .FALSE.
   14975   INTEGER :: a, b
   14976   DATA a / Z'F' /, b / Z'3' /
   14977 
   14978   WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)
   14979   WRITE (*,*) XOR(a, b)
   14980 END PROGRAM
   14981 @end smallexample
   14982 
   14983 @item @emph{See also}:
   14984 Fortran 95 elemental function: @gol
   14985 @ref{IEOR}
   14986 @end table
   14987 
   14988 
   14989 
   14990 @node Intrinsic Modules
   14991 @chapter Intrinsic Modules
   14992 @cindex intrinsic Modules
   14993 
   14994 @menu
   14995 * ISO_FORTRAN_ENV::
   14996 * ISO_C_BINDING::
   14997 * IEEE modules::
   14998 * OpenMP Modules OMP_LIB and OMP_LIB_KINDS::
   14999 * OpenACC Module OPENACC::
   15000 @end menu
   15001 
   15002 @node ISO_FORTRAN_ENV
   15003 @section @code{ISO_FORTRAN_ENV}
   15004 @table @asis
   15005 @item @emph{Standard}:
   15006 Fortran 2003 and later, except when otherwise noted
   15007 @end table
   15008 
   15009 The @code{ISO_FORTRAN_ENV} module provides the following scalar default-integer
   15010 named constants:
   15011 
   15012 @table @asis
   15013 @item @code{ATOMIC_INT_KIND}:
   15014 Default-kind integer constant to be used as kind parameter when defining
   15015 integer variables used in atomic operations. (Fortran 2008 or later.)
   15016 
   15017 @item @code{ATOMIC_LOGICAL_KIND}:
   15018 Default-kind integer constant to be used as kind parameter when defining
   15019 logical variables used in atomic operations. (Fortran 2008 or later.)
   15020 
   15021 @item @code{CHARACTER_KINDS}:
   15022 Default-kind integer constant array of rank one containing the supported kind
   15023 parameters of the @code{CHARACTER} type. (Fortran 2008 or later.)
   15024 
   15025 @item @code{CHARACTER_STORAGE_SIZE}:
   15026 Size in bits of the character storage unit.
   15027 
   15028 @item @code{ERROR_UNIT}:
   15029 Identifies the preconnected unit used for error reporting.
   15030 
   15031 @item @code{FILE_STORAGE_SIZE}:
   15032 Size in bits of the file-storage unit.
   15033 
   15034 @item @code{INPUT_UNIT}:
   15035 Identifies the preconnected unit identified by the asterisk
   15036 (@code{*}) in @code{READ} statement.
   15037 
   15038 @item @code{INT8}, @code{INT16}, @code{INT32}, @code{INT64}:
   15039 Kind type parameters to specify an INTEGER type with a storage
   15040 size of 16, 32, and 64 bits. It is negative if a target platform
   15041 does not support the particular kind. (Fortran 2008 or later.)
   15042 
   15043 @item @code{INTEGER_KINDS}:
   15044 Default-kind integer constant array of rank one containing the supported kind
   15045 parameters of the @code{INTEGER} type. (Fortran 2008 or later.)
   15046 
   15047 @item @code{IOSTAT_END}:
   15048 The value assigned to the variable passed to the @code{IOSTAT=} specifier of
   15049 an input/output statement if an end-of-file condition occurred.
   15050 
   15051 @item @code{IOSTAT_EOR}:
   15052 The value assigned to the variable passed to the @code{IOSTAT=} specifier of
   15053 an input/output statement if an end-of-record condition occurred.
   15054 
   15055 @item @code{IOSTAT_INQUIRE_INTERNAL_UNIT}:
   15056 Scalar default-integer constant, used by @code{INQUIRE} for the
   15057 @code{IOSTAT=} specifier to denote an that a unit number identifies an
   15058 internal unit. (Fortran 2008 or later.)
   15059 
   15060 @item @code{NUMERIC_STORAGE_SIZE}:
   15061 The size in bits of the numeric storage unit.
   15062 
   15063 @item @code{LOGICAL_KINDS}:
   15064 Default-kind integer constant array of rank one containing the supported kind
   15065 parameters of the @code{LOGICAL} type. (Fortran 2008 or later.)
   15066 
   15067 @item @code{OUTPUT_UNIT}:
   15068 Identifies the preconnected unit identified by the asterisk
   15069 (@code{*}) in @code{WRITE} statement.
   15070 
   15071 @item @code{REAL32}, @code{REAL64}, @code{REAL128}:
   15072 Kind type parameters to specify a REAL type with a storage
   15073 size of 32, 64, and 128 bits. It is negative if a target platform
   15074 does not support the particular kind. (Fortran 2008 or later.)
   15075 
   15076 @item @code{REAL_KINDS}:
   15077 Default-kind integer constant array of rank one containing the supported kind
   15078 parameters of the @code{REAL} type. (Fortran 2008 or later.)
   15079 
   15080 @item @code{STAT_LOCKED}:
   15081 Scalar default-integer constant used as STAT= return value by @code{LOCK} to
   15082 denote that the lock variable is locked by the executing image. (Fortran 2008
   15083 or later.)
   15084 
   15085 @item @code{STAT_LOCKED_OTHER_IMAGE}:
   15086 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
   15087 denote that the lock variable is locked by another image. (Fortran 2008 or
   15088 later.)
   15089 
   15090 @item @code{STAT_STOPPED_IMAGE}:
   15091 Positive, scalar default-integer constant used as STAT= return value if the
   15092 argument in the statement requires synchronisation with an image, which has
   15093 initiated the termination of the execution. (Fortran 2008 or later.)
   15094 
   15095 @item @code{STAT_FAILED_IMAGE}:
   15096 Positive, scalar default-integer constant used as STAT= return value if the
   15097 argument in the statement requires communication with an image, which has
   15098 is in the failed state. (TS 18508 or later.)
   15099 
   15100 @item @code{STAT_UNLOCKED}:
   15101 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
   15102 denote that the lock variable is unlocked. (Fortran 2008 or later.)
   15103 @end table
   15104 
   15105 The module provides the following derived type:
   15106 
   15107 @table @asis
   15108 @item @code{LOCK_TYPE}:
   15109 Derived type with private components to be use with the @code{LOCK} and
   15110 @code{UNLOCK} statement. A variable of its type has to be always declared
   15111 as coarray and may not appear in a variable-definition context.
   15112 (Fortran 2008 or later.)
   15113 @end table
   15114 
   15115 The module also provides the following intrinsic procedures:
   15116 @ref{COMPILER_OPTIONS} and @ref{COMPILER_VERSION}.
   15117 
   15118 
   15119 
   15120 @node ISO_C_BINDING
   15121 @section @code{ISO_C_BINDING}
   15122 @table @asis
   15123 @item @emph{Standard}:
   15124 Fortran 2003 and later, GNU extensions
   15125 @end table
   15126 
   15127 The following intrinsic procedures are provided by the module; their
   15128 definition can be found in the section Intrinsic Procedures of this
   15129 manual.
   15130 
   15131 @table @asis
   15132 @item @code{C_ASSOCIATED}
   15133 @item @code{C_F_POINTER}
   15134 @item @code{C_F_PROCPOINTER}
   15135 @item @code{C_FUNLOC}
   15136 @item @code{C_LOC}
   15137 @item @code{C_SIZEOF}
   15138 @end table
   15139 @c TODO: Vertical spacing between C_FUNLOC and C_LOC wrong in PDF,
   15140 @c don't really know why.
   15141 
   15142 The @code{ISO_C_BINDING} module provides the following named constants of
   15143 type default integer, which can be used as KIND type parameters.
   15144 
   15145 In addition to the integer named constants required by the Fortran 2003 
   15146 standard and @code{C_PTRDIFF_T} of TS 29113, GNU Fortran provides as an
   15147 extension named constants for the 128-bit integer types supported by the
   15148 C compiler: @code{C_INT128_T, C_INT_LEAST128_T, C_INT_FAST128_T}.
   15149 Furthermore, if @code{_Float128} is supported in C, the named constants
   15150 @code{C_FLOAT128} and @code{C_FLOAT128_COMPLEX} are defined.
   15151 
   15152 @multitable @columnfractions .19 .32 .34 .15
   15153 @headitem Fortran Type  @tab Named constant         @tab C type                                @tab Extension
   15154 @item @code{INTEGER}@tab @code{C_INT}           @tab @code{int}
   15155 @item @code{INTEGER}@tab @code{C_SHORT}         @tab @code{short int}
   15156 @item @code{INTEGER}@tab @code{C_LONG}          @tab @code{long int}
   15157 @item @code{INTEGER}@tab @code{C_LONG_LONG}     @tab @code{long long int}
   15158 @item @code{INTEGER}@tab @code{C_SIGNED_CHAR}   @tab @code{signed char}/@code{unsigned char}
   15159 @item @code{INTEGER}@tab @code{C_SIZE_T}        @tab @code{size_t}
   15160 @item @code{INTEGER}@tab @code{C_INT8_T}        @tab @code{int8_t}
   15161 @item @code{INTEGER}@tab @code{C_INT16_T}       @tab @code{int16_t}
   15162 @item @code{INTEGER}@tab @code{C_INT32_T}       @tab @code{int32_t}
   15163 @item @code{INTEGER}@tab @code{C_INT64_T}       @tab @code{int64_t}
   15164 @item @code{INTEGER}@tab @code{C_INT128_T}      @tab @code{int128_t}                      @tab Ext.
   15165 @item @code{INTEGER}@tab @code{C_INT_LEAST8_T}  @tab @code{int_least8_t}
   15166 @item @code{INTEGER}@tab @code{C_INT_LEAST16_T} @tab @code{int_least16_t}
   15167 @item @code{INTEGER}@tab @code{C_INT_LEAST32_T} @tab @code{int_least32_t}
   15168 @item @code{INTEGER}@tab @code{C_INT_LEAST64_T} @tab @code{int_least64_t}
   15169 @item @code{INTEGER}@tab @code{C_INT_LEAST128_T}@tab @code{int_least128_t}                @tab Ext.
   15170 @item @code{INTEGER}@tab @code{C_INT_FAST8_T}   @tab @code{int_fast8_t}
   15171 @item @code{INTEGER}@tab @code{C_INT_FAST16_T}  @tab @code{int_fast16_t}
   15172 @item @code{INTEGER}@tab @code{C_INT_FAST32_T}  @tab @code{int_fast32_t}
   15173 @item @code{INTEGER}@tab @code{C_INT_FAST64_T}  @tab @code{int_fast64_t}
   15174 @item @code{INTEGER}@tab @code{C_INT_FAST128_T} @tab @code{int_fast128_t}                 @tab Ext.
   15175 @item @code{INTEGER}@tab @code{C_INTMAX_T}      @tab @code{intmax_t}
   15176 @item @code{INTEGER}@tab @code{C_INTPTR_T}      @tab @code{intptr_t}
   15177 @item @code{INTEGER}@tab @code{C_PTRDIFF_T}     @tab @code{ptrdiff_t}                     @tab TS 29113
   15178 @item @code{REAL}   @tab @code{C_FLOAT}         @tab @code{float}
   15179 @item @code{REAL}   @tab @code{C_DOUBLE}        @tab @code{double}
   15180 @item @code{REAL}   @tab @code{C_LONG_DOUBLE}   @tab @code{long double}
   15181 @item @code{REAL}   @tab @code{C_FLOAT128}      @tab @code{_Float128}                    @tab Ext.
   15182 @item @code{COMPLEX}@tab @code{C_FLOAT_COMPLEX} @tab @code{float _Complex}
   15183 @item @code{COMPLEX}@tab @code{C_DOUBLE_COMPLEX}@tab @code{double _Complex}
   15184 @item @code{COMPLEX}@tab @code{C_LONG_DOUBLE_COMPLEX}@tab @code{long double _Complex}
   15185 @item @code{COMPLEX}@tab @code{C_FLOAT128_COMPLEX}   @tab @code{_Float128 _Complex}      @tab Ext.
   15186 @item @code{LOGICAL}@tab @code{C_BOOL}          @tab @code{_Bool}
   15187 @item @code{CHARACTER}@tab @code{C_CHAR}        @tab @code{char}
   15188 @end multitable
   15189 
   15190 Additionally, the following parameters of type @code{CHARACTER(KIND=C_CHAR)}
   15191 are defined.
   15192 
   15193 @multitable @columnfractions .20 .45 .15
   15194 @headitem Name                     @tab C definition    @tab Value
   15195 @item @code{C_NULL_CHAR}       @tab null character  @tab @code{'\0'}
   15196 @item @code{C_ALERT}           @tab alert           @tab @code{'\a'}
   15197 @item @code{C_BACKSPACE}       @tab backspace       @tab @code{'\b'}
   15198 @item @code{C_FORM_FEED}       @tab form feed       @tab @code{'\f'}
   15199 @item @code{C_NEW_LINE}        @tab new line        @tab @code{'\n'}
   15200 @item @code{C_CARRIAGE_RETURN} @tab carriage return @tab @code{'\r'}
   15201 @item @code{C_HORIZONTAL_TAB}  @tab horizontal tab  @tab @code{'\t'}
   15202 @item @code{C_VERTICAL_TAB}    @tab vertical tab    @tab @code{'\v'}
   15203 @end multitable
   15204 
   15205 Moreover, the following two named constants are defined:
   15206 
   15207 @multitable @columnfractions .20 .80
   15208 @headitem Name                 @tab Type
   15209 @item @code{C_NULL_PTR}    @tab @code{C_PTR}
   15210 @item @code{C_NULL_FUNPTR} @tab @code{C_FUNPTR}
   15211 @end multitable
   15212 
   15213 Both are equivalent to the value @code{NULL} in C.
   15214 
   15215 
   15216 
   15217 @node IEEE modules
   15218 @section IEEE modules: @code{IEEE_EXCEPTIONS}, @code{IEEE_ARITHMETIC}, and @code{IEEE_FEATURES}
   15219 @table @asis
   15220 @item @emph{Standard}:
   15221 Fortran 2003 and later
   15222 @end table
   15223 
   15224 The @code{IEEE_EXCEPTIONS}, @code{IEEE_ARITHMETIC}, and @code{IEEE_FEATURES}
   15225 intrinsic modules provide support for exceptions and IEEE arithmetic, as
   15226 defined in Fortran 2003 and later standards, and the IEC 60559:1989 standard
   15227 (@emph{Binary floating-point arithmetic for microprocessor systems}). These
   15228 modules are only provided on the following supported platforms:
   15229 
   15230 @itemize @bullet
   15231 @item i386 and x86_64 processors
   15232 @item platforms which use the GNU C Library (glibc)
   15233 @item platforms with support for SysV/386 routines for floating point
   15234 interface (including Solaris and BSDs)
   15235 @item platforms with the AIX OS
   15236 @end itemize
   15237 
   15238 For full compliance with the Fortran standards, code using the
   15239 @code{IEEE_EXCEPTIONS} or @code{IEEE_ARITHMETIC} modules should be compiled
   15240 with the following options: @code{-fno-unsafe-math-optimizations
   15241 -frounding-math -fsignaling-nans}.
   15242 
   15243 
   15244 
   15245 @node OpenMP Modules OMP_LIB and OMP_LIB_KINDS
   15246 @section OpenMP Modules @code{OMP_LIB} and @code{OMP_LIB_KINDS}
   15247 @table @asis
   15248 @item @emph{Standard}:
   15249 OpenMP Application Program Interface v4.5,
   15250 OpenMP Application Program Interface v5.0 (partially supported) and
   15251 OpenMP Application Program Interface v5.1 (partially supported).
   15252 @end table
   15253 
   15254 The OpenMP Fortran runtime library routines are provided both in
   15255 a form of two Fortran modules, named @code{OMP_LIB} and
   15256 @code{OMP_LIB_KINDS}, and in a form of a Fortran @code{include} file named
   15257 @file{omp_lib.h}. The procedures provided by @code{OMP_LIB} can be found
   15258 in the @ref{Top,,Introduction,libgomp,GNU Offloading and Multi
   15259 Processing Runtime Library} manual,
   15260 the named constants defined in the modules are listed
   15261 below.
   15262 
   15263 For details refer to the actual
   15264 @uref{https://www.openmp.org/wp-content/uploads/openmp-4.5.pdf,
   15265 OpenMP Application Program Interface v4.5} and
   15266 @uref{https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5.0.pdf,
   15267 OpenMP Application Program Interface v5.0}.
   15268 
   15269 @code{OMP_LIB_KINDS} provides the following scalar default-integer
   15270 named constants:
   15271 
   15272 @table @asis
   15273 @item @code{omp_allocator_handle_kind}
   15274 @item @code{omp_alloctrait_key_kind}
   15275 @item @code{omp_alloctrait_val_kind}
   15276 @item @code{omp_depend_kind}
   15277 @item @code{omp_lock_kind}
   15278 @item @code{omp_lock_hint_kind}
   15279 @item @code{omp_nest_lock_kind}
   15280 @item @code{omp_pause_resource_kind}
   15281 @item @code{omp_memspace_handle_kind}
   15282 @item @code{omp_proc_bind_kind}
   15283 @item @code{omp_sched_kind}
   15284 @item @code{omp_sync_hint_kind}
   15285 @end table
   15286 
   15287 @code{OMP_LIB} provides the scalar default-integer
   15288 named constant @code{openmp_version} with a value of the form
   15289 @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
   15290 of the OpenMP version; for OpenMP v4.5 the value is @code{201511}.
   15291 
   15292 The following derived type:
   15293 
   15294 @table @asis
   15295 @item @code{omp_alloctrait}
   15296 @end table
   15297 
   15298 The following scalar integer named constants of the
   15299 kind @code{omp_sched_kind}:
   15300 
   15301 @table @asis
   15302 @item @code{omp_sched_static}
   15303 @item @code{omp_sched_dynamic}
   15304 @item @code{omp_sched_guided}
   15305 @item @code{omp_sched_auto}
   15306 @end table
   15307 
   15308 And the following scalar integer named constants of the
   15309 kind @code{omp_proc_bind_kind}:
   15310 
   15311 @table @asis
   15312 @item @code{omp_proc_bind_false}
   15313 @item @code{omp_proc_bind_true}
   15314 @item @code{omp_proc_bind_primary}
   15315 @item @code{omp_proc_bind_master}
   15316 @item @code{omp_proc_bind_close}
   15317 @item @code{omp_proc_bind_spread}
   15318 @end table
   15319 
   15320 The following scalar integer named constants are of the
   15321 kind @code{omp_lock_hint_kind}:
   15322 
   15323 @table @asis
   15324 @item @code{omp_lock_hint_none}
   15325 @item @code{omp_lock_hint_uncontended}
   15326 @item @code{omp_lock_hint_contended}
   15327 @item @code{omp_lock_hint_nonspeculative}
   15328 @item @code{omp_lock_hint_speculative}
   15329 @item @code{omp_sync_hint_none}
   15330 @item @code{omp_sync_hint_uncontended}
   15331 @item @code{omp_sync_hint_contended}
   15332 @item @code{omp_sync_hint_nonspeculative}
   15333 @item @code{omp_sync_hint_speculative}
   15334 @end table
   15335 
   15336 And the following two scalar integer named constants are of the
   15337 kind @code{omp_pause_resource_kind}:
   15338 
   15339 @table @asis
   15340 @item @code{omp_pause_soft}
   15341 @item @code{omp_pause_hard}
   15342 @end table
   15343 
   15344 The following scalar integer named constants are of the kind
   15345 @code{omp_alloctrait_key_kind}:
   15346 
   15347 @table @asis
   15348 @item @code{omp_atk_sync_hint}
   15349 @item @code{omp_atk_alignment}
   15350 @item @code{omp_atk_access}
   15351 @item @code{omp_atk_pool_size}
   15352 @item @code{omp_atk_fallback}
   15353 @item @code{omp_atk_fb_data}
   15354 @item @code{omp_atk_pinned}
   15355 @item @code{omp_atk_partition}
   15356 @end table
   15357 
   15358 The following scalar integer named constants are of the kind
   15359 @code{omp_alloctrait_val_kind}:
   15360 
   15361 @table @asis
   15362 @code{omp_alloctrait_key_kind}:
   15363 @item @code{omp_atv_default}
   15364 @item @code{omp_atv_false}
   15365 @item @code{omp_atv_true}
   15366 @item @code{omp_atv_contended}
   15367 @item @code{omp_atv_uncontended}
   15368 @item @code{omp_atv_serialized}
   15369 @item @code{omp_atv_sequential}
   15370 @item @code{omp_atv_private}
   15371 @item @code{omp_atv_all}
   15372 @item @code{omp_atv_thread}
   15373 @item @code{omp_atv_pteam}
   15374 @item @code{omp_atv_cgroup}
   15375 @item @code{omp_atv_default_mem_fb}
   15376 @item @code{omp_atv_null_fb}
   15377 @item @code{omp_atv_abort_fb}
   15378 @item @code{omp_atv_allocator_fb}
   15379 @item @code{omp_atv_environment}
   15380 @item @code{omp_atv_nearest}
   15381 @item @code{omp_atv_blocked}
   15382 @end table
   15383 
   15384 The following scalar integer named constants are of the kind
   15385 @code{omp_allocator_handle_kind}:
   15386 
   15387 @table @asis
   15388 @item @code{omp_null_allocator}
   15389 @item @code{omp_default_mem_alloc}
   15390 @item @code{omp_large_cap_mem_alloc}
   15391 @item @code{omp_const_mem_alloc}
   15392 @item @code{omp_high_bw_mem_alloc}
   15393 @item @code{omp_low_lat_mem_alloc}
   15394 @item @code{omp_cgroup_mem_alloc}
   15395 @item @code{omp_pteam_mem_alloc}
   15396 @item @code{omp_thread_mem_alloc}
   15397 @end table
   15398 
   15399 The following scalar integer named constants are of the kind
   15400 @code{omp_memspace_handle_kind}:
   15401 
   15402 @table @asis
   15403 @item @code{omp_default_mem_space}
   15404 @item @code{omp_large_cap_mem_space}
   15405 @item @code{omp_const_mem_space}
   15406 @item @code{omp_high_bw_mem_space}
   15407 @item @code{omp_low_lat_mem_space}
   15408 @end table
   15409 
   15410 
   15411 
   15412 @node OpenACC Module OPENACC
   15413 @section OpenACC Module @code{OPENACC}
   15414 @table @asis
   15415 @item @emph{Standard}:
   15416 OpenACC Application Programming Interface v2.6
   15417 @end table
   15418 
   15419 
   15420 The OpenACC Fortran runtime library routines are provided both in a
   15421 form of a Fortran 90 module, named @code{OPENACC}, and in form of a
   15422 Fortran @code{include} file named @file{openacc_lib.h}.  The
   15423 procedures provided by @code{OPENACC} can be found in the
   15424 @ref{Top,,Introduction,libgomp,GNU Offloading and Multi Processing
   15425 Runtime Library} manual, the named constants defined in the modules
   15426 are listed below.
   15427 
   15428 For details refer to the actual
   15429 @uref{https://www.openacc.org/,
   15430 OpenACC Application Programming Interface v2.6}.
   15431 
   15432 @code{OPENACC} provides the scalar default-integer
   15433 named constant @code{openacc_version} with a value of the form
   15434 @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
   15435 of the OpenACC version; for OpenACC v2.6 the value is @code{201711}.
   15436