Home | History | Annotate | Line # | Download | only in fortran
intrinsic.texi revision 1.1
      1 @ignore
      2 Copyright (C) 2005-2019 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{LONG}:          LONG,      Convert to integer type
    225 * @code{LSHIFT}:        LSHIFT,    Left shift bits
    226 * @code{LSTAT}:         LSTAT,     Get file status
    227 * @code{LTIME}:         LTIME,     Convert time to local time info
    228 * @code{MALLOC}:        MALLOC,    Dynamic memory allocation function
    229 * @code{MASKL}:         MASKL,     Left justified mask
    230 * @code{MASKR}:         MASKR,     Right justified mask
    231 * @code{MATMUL}:        MATMUL,    matrix multiplication
    232 * @code{MAX}:           MAX,       Maximum value of an argument list
    233 * @code{MAXEXPONENT}:   MAXEXPONENT, Maximum exponent of a real kind
    234 * @code{MAXLOC}:        MAXLOC,    Location of the maximum value within an array
    235 * @code{MAXVAL}:        MAXVAL,    Maximum value of an array
    236 * @code{MCLOCK}:        MCLOCK,    Time function
    237 * @code{MCLOCK8}:       MCLOCK8,   Time function (64-bit)
    238 * @code{MERGE}:         MERGE,     Merge arrays
    239 * @code{MERGE_BITS}:    MERGE_BITS, Merge of bits under mask
    240 * @code{MIN}:           MIN,       Minimum value of an argument list
    241 * @code{MINEXPONENT}:   MINEXPONENT, Minimum exponent of a real kind
    242 * @code{MINLOC}:        MINLOC,    Location of the minimum value within an array
    243 * @code{MINVAL}:        MINVAL,    Minimum value of an array
    244 * @code{MOD}:           MOD,       Remainder function
    245 * @code{MODULO}:        MODULO,    Modulo function
    246 * @code{MOVE_ALLOC}:    MOVE_ALLOC, Move allocation from one object to another
    247 * @code{MVBITS}:        MVBITS,    Move bits from one integer to another
    248 * @code{NEAREST}:       NEAREST,   Nearest representable number
    249 * @code{NEW_LINE}:      NEW_LINE,  New line character
    250 * @code{NINT}:          NINT,      Nearest whole number
    251 * @code{NORM2}:         NORM2,     Euclidean vector norm
    252 * @code{NOT}:           NOT,       Logical negation
    253 * @code{NULL}:          NULL,      Function that returns an disassociated pointer
    254 * @code{NUM_IMAGES}:    NUM_IMAGES, Number of images
    255 * @code{OR}:            OR,        Bitwise logical OR
    256 * @code{PACK}:          PACK,      Pack an array into an array of rank one
    257 * @code{PARITY}:        PARITY,    Reduction with exclusive OR
    258 * @code{PERROR}:        PERROR,    Print system error message
    259 * @code{POPCNT}:        POPCNT,    Number of bits set
    260 * @code{POPPAR}:        POPPAR,    Parity of the number of bits set
    261 * @code{PRECISION}:     PRECISION, Decimal precision of a real kind
    262 * @code{PRESENT}:       PRESENT,   Determine whether an optional dummy argument is specified
    263 * @code{PRODUCT}:       PRODUCT,   Product of array elements
    264 * @code{RADIX}:         RADIX,     Base of a data model
    265 * @code{RAN}:           RAN,       Real pseudo-random number
    266 * @code{RAND}:          RAND,      Real pseudo-random number
    267 * @code{RANDOM_INIT}:   RANDOM_INIT, Initialize pseudo-random number generator
    268 * @code{RANDOM_NUMBER}: RANDOM_NUMBER, Pseudo-random number
    269 * @code{RANDOM_SEED}:   RANDOM_SEED, Initialize a pseudo-random number sequence
    270 * @code{RANGE}:         RANGE,     Decimal exponent range
    271 * @code{RANK} :         RANK,      Rank of a data object
    272 * @code{REAL}:          REAL,      Convert to real type 
    273 * @code{RENAME}:        RENAME,    Rename a file
    274 * @code{REPEAT}:        REPEAT,    Repeated string concatenation
    275 * @code{RESHAPE}:       RESHAPE,   Function to reshape an array
    276 * @code{RRSPACING}:     RRSPACING, Reciprocal of the relative spacing
    277 * @code{RSHIFT}:        RSHIFT,    Right shift bits
    278 * @code{SAME_TYPE_AS}:  SAME_TYPE_AS,  Query dynamic types for equality
    279 * @code{SCALE}:         SCALE,     Scale a real value
    280 * @code{SCAN}:          SCAN,      Scan a string for the presence of a set of characters
    281 * @code{SECNDS}:        SECNDS,    Time function
    282 * @code{SECOND}:        SECOND,    CPU time function
    283 * @code{SELECTED_CHAR_KIND}: SELECTED_CHAR_KIND,  Choose character kind
    284 * @code{SELECTED_INT_KIND}: SELECTED_INT_KIND,  Choose integer kind
    285 * @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND,  Choose real kind
    286 * @code{SET_EXPONENT}:  SET_EXPONENT, Set the exponent of the model
    287 * @code{SHAPE}:         SHAPE,     Determine the shape of an array
    288 * @code{SHIFTA}:        SHIFTA,    Right shift with fill
    289 * @code{SHIFTL}:        SHIFTL,    Left shift
    290 * @code{SHIFTR}:        SHIFTR,    Right shift
    291 * @code{SIGN}:          SIGN,      Sign copying function
    292 * @code{SIGNAL}:        SIGNAL,    Signal handling subroutine (or function)
    293 * @code{SIN}:           SIN,       Sine function
    294 * @code{SIND}:          SIND,      Sine function, degrees
    295 * @code{SINH}:          SINH,      Hyperbolic sine function
    296 * @code{SIZE}:          SIZE,      Function to determine the size of an array
    297 * @code{SIZEOF}:        SIZEOF,    Determine the size in bytes of an expression
    298 * @code{SLEEP}:         SLEEP,     Sleep for the specified number of seconds
    299 * @code{SPACING}:       SPACING,   Smallest distance between two numbers of a given type
    300 * @code{SPREAD}:        SPREAD,    Add a dimension to an array 
    301 * @code{SQRT}:          SQRT,      Square-root function
    302 * @code{SRAND}:         SRAND,     Reinitialize the random number generator
    303 * @code{STAT}:          STAT,      Get file status
    304 * @code{STORAGE_SIZE}:  STORAGE_SIZE, Storage size in bits
    305 * @code{SUM}:           SUM,       Sum of array elements
    306 * @code{SYMLNK}:        SYMLNK,    Create a symbolic link
    307 * @code{SYSTEM}:        SYSTEM,    Execute a shell command
    308 * @code{SYSTEM_CLOCK}:  SYSTEM_CLOCK, Time function
    309 * @code{TAN}:           TAN,       Tangent function
    310 * @code{TAND}:          TAND,      Tangent function, degrees
    311 * @code{TANH}:          TANH,      Hyperbolic tangent function
    312 * @code{THIS_IMAGE}:    THIS_IMAGE, Cosubscript index of this image
    313 * @code{TIME}:          TIME,      Time function
    314 * @code{TIME8}:         TIME8,     Time function (64-bit)
    315 * @code{TINY}:          TINY,      Smallest positive number of a real kind
    316 * @code{TRAILZ}:        TRAILZ,    Number of trailing zero bits of an integer
    317 * @code{TRANSFER}:      TRANSFER,  Transfer bit patterns
    318 * @code{TRANSPOSE}:     TRANSPOSE, Transpose an array of rank two
    319 * @code{TRIM}:          TRIM,      Remove trailing blank characters of a string
    320 * @code{TTYNAM}:        TTYNAM,    Get the name of a terminal device.
    321 * @code{UBOUND}:        UBOUND,    Upper dimension bounds of an array
    322 * @code{UCOBOUND}:      UCOBOUND,  Upper codimension bounds of an array
    323 * @code{UMASK}:         UMASK,     Set the file creation mask
    324 * @code{UNLINK}:        UNLINK,    Remove a file from the file system
    325 * @code{UNPACK}:        UNPACK,    Unpack an array of rank one into an array
    326 * @code{VERIFY}:        VERIFY,    Scan a string for the absence of a set of characters
    327 * @code{XOR}:           XOR,       Bitwise logical exclusive or
    328 @end menu
    329 
    330 @node Introduction to Intrinsics
    331 @section Introduction to intrinsic procedures
    332 
    333 The intrinsic procedures provided by GNU Fortran include all of the
    334 intrinsic procedures required by the Fortran 95 standard, a set of
    335 intrinsic procedures for backwards compatibility with G77, and a
    336 selection of intrinsic procedures from the Fortran 2003 and Fortran 2008
    337 standards.  Any conflict between a description here and a description in
    338 either the Fortran 95 standard, the Fortran 2003 standard or the Fortran
    339 2008 standard is unintentional, and the standard(s) should be considered
    340 authoritative.
    341 
    342 The enumeration of the @code{KIND} type parameter is processor defined in
    343 the Fortran 95 standard.  GNU Fortran defines the default integer type and
    344 default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)},
    345 respectively.  The standard mandates that both data types shall have
    346 another kind, which have more precision.  On typical target architectures
    347 supported by @command{gfortran}, this kind type parameter is @code{KIND=8}.
    348 Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent.
    349 In the description of generic intrinsic procedures, the kind type parameter
    350 will be specified by @code{KIND=*}, and in the description of specific
    351 names for an intrinsic procedure the kind type parameter will be explicitly
    352 given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}).  Finally, for
    353 brevity the optional @code{KIND=} syntax will be omitted.
    354 
    355 Many of the intrinsic procedures take one or more optional arguments.
    356 This document follows the convention used in the Fortran 95 standard,
    357 and denotes such arguments by square brackets.
    358 
    359 GNU Fortran offers the @option{-std=f95} and @option{-std=gnu} options,
    360 which can be used to restrict the set of intrinsic procedures to a 
    361 given standard.  By default, @command{gfortran} sets the @option{-std=gnu}
    362 option, and so all intrinsic procedures described here are accepted.  There
    363 is one caveat.  For a select group of intrinsic procedures, @command{g77}
    364 implemented both a function and a subroutine.  Both classes 
    365 have been implemented in @command{gfortran} for backwards compatibility
    366 with @command{g77}.  It is noted here that these functions and subroutines
    367 cannot be intermixed in a given subprogram.  In the descriptions that follow,
    368 the applicable standard for each intrinsic procedure is noted.
    369 
    370 
    371 
    372 @node ABORT
    373 @section @code{ABORT} --- Abort the program
    374 @fnindex ABORT
    375 @cindex program termination, with core dump
    376 @cindex terminate program, with core dump
    377 @cindex core, dump
    378 
    379 @table @asis
    380 @item @emph{Description}:
    381 @code{ABORT} causes immediate termination of the program.  On operating
    382 systems that support a core dump, @code{ABORT} will produce a core dump.
    383 It will also print a backtrace, unless @code{-fno-backtrace} is given.
    384 
    385 @item @emph{Standard}:
    386 GNU extension
    387 
    388 @item @emph{Class}:
    389 Subroutine
    390 
    391 @item @emph{Syntax}:
    392 @code{CALL ABORT}
    393 
    394 @item @emph{Return value}:
    395 Does not return.
    396 
    397 @item @emph{Example}:
    398 @smallexample
    399 program test_abort
    400   integer :: i = 1, j = 2
    401   if (i /= j) call abort
    402 end program test_abort
    403 @end smallexample
    404 
    405 @item @emph{See also}:
    406 @ref{EXIT}, @ref{KILL}, @ref{BACKTRACE}
    407 
    408 @end table
    409 
    410 
    411 
    412 @node ABS
    413 @section @code{ABS} --- Absolute value
    414 @fnindex ABS
    415 @fnindex CABS
    416 @fnindex DABS
    417 @fnindex IABS
    418 @fnindex ZABS
    419 @fnindex CDABS
    420 @fnindex BABS
    421 @fnindex IIABS
    422 @fnindex JIABS
    423 @fnindex KIABS
    424 @cindex absolute value
    425 
    426 @table @asis
    427 @item @emph{Description}:
    428 @code{ABS(A)} computes the absolute value of @code{A}.
    429 
    430 @item @emph{Standard}:
    431 Fortran 77 and later, has overloads that are GNU extensions
    432 
    433 @item @emph{Class}:
    434 Elemental function
    435 
    436 @item @emph{Syntax}:
    437 @code{RESULT = ABS(A)}
    438 
    439 @item @emph{Arguments}:
    440 @multitable @columnfractions .15 .70
    441 @item @var{A} @tab The type of the argument shall be an @code{INTEGER},
    442 @code{REAL}, or @code{COMPLEX}.
    443 @end multitable
    444 
    445 @item @emph{Return value}:
    446 The return value is of the same type and
    447 kind as the argument except the return value is @code{REAL} for a
    448 @code{COMPLEX} argument.
    449 
    450 @item @emph{Example}:
    451 @smallexample
    452 program test_abs
    453   integer :: i = -1
    454   real :: x = -1.e0
    455   complex :: z = (-1.e0,0.e0)
    456   i = abs(i)
    457   x = abs(x)
    458   x = abs(z)
    459 end program test_abs
    460 @end smallexample
    461 
    462 @item @emph{Specific names}:
    463 @multitable @columnfractions .20 .20 .20 .25
    464 @item Name            @tab Argument            @tab Return type       @tab Standard
    465 @item @code{ABS(A)}   @tab @code{REAL(4) A}    @tab @code{REAL(4)}    @tab Fortran 77 and later
    466 @item @code{CABS(A)}  @tab @code{COMPLEX(4) A} @tab @code{REAL(4)}    @tab Fortran 77 and later
    467 @item @code{DABS(A)}  @tab @code{REAL(8) A}    @tab @code{REAL(8)}    @tab Fortran 77 and later
    468 @item @code{IABS(A)}  @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab Fortran 77 and later
    469 @item @code{BABS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
    470 @item @code{IIABS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
    471 @item @code{JIABS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
    472 @item @code{KIABS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
    473 @item @code{ZABS(A)}  @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
    474 @item @code{CDABS(A)} @tab @code{COMPLEX(8) A} @tab @code{COMPLEX(8)} @tab GNU extension
    475 @end multitable
    476 @end table
    477 
    478 
    479 
    480 @node ACCESS
    481 @section @code{ACCESS} --- Checks file access modes
    482 @fnindex ACCESS
    483 @cindex file system, access mode
    484 
    485 @table @asis
    486 @item @emph{Description}:
    487 @code{ACCESS(NAME, MODE)} checks whether the file @var{NAME} 
    488 exists, is readable, writable or executable. Except for the
    489 executable check, @code{ACCESS} can be replaced by
    490 Fortran 95's @code{INQUIRE}.
    491 
    492 @item @emph{Standard}:
    493 GNU extension
    494 
    495 @item @emph{Class}:
    496 Inquiry function
    497 
    498 @item @emph{Syntax}:
    499 @code{RESULT = ACCESS(NAME, MODE)}
    500 
    501 @item @emph{Arguments}:
    502 @multitable @columnfractions .15 .70
    503 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
    504 file name. Tailing blank are ignored unless the character @code{achar(0)}
    505 is present, then all characters up to and excluding @code{achar(0)} are
    506 used as file name.
    507 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind with the
    508 file access mode, may be any concatenation of @code{"r"} (readable),
    509 @code{"w"} (writable) and @code{"x"} (executable), or @code{" "} to check
    510 for existence.
    511 @end multitable
    512 
    513 @item @emph{Return value}:
    514 Returns a scalar @code{INTEGER}, which is @code{0} if the file is
    515 accessible in the given mode; otherwise or if an invalid argument
    516 has been given for @code{MODE} the value @code{1} is returned.
    517 
    518 @item @emph{Example}:
    519 @smallexample
    520 program access_test
    521   implicit none
    522   character(len=*), parameter :: file  = 'test.dat'
    523   character(len=*), parameter :: file2 = 'test.dat  '//achar(0)
    524   if(access(file,' ') == 0) print *, trim(file),' is exists'
    525   if(access(file,'r') == 0) print *, trim(file),' is readable'
    526   if(access(file,'w') == 0) print *, trim(file),' is writable'
    527   if(access(file,'x') == 0) print *, trim(file),' is executable'
    528   if(access(file2,'rwx') == 0) &
    529     print *, trim(file2),' is readable, writable and executable'
    530 end program access_test
    531 @end smallexample
    532 @item @emph{Specific names}:
    533 @item @emph{See also}:
    534 
    535 @end table
    536 
    537 
    538 
    539 @node ACHAR
    540 @section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence 
    541 @fnindex ACHAR
    542 @cindex @acronym{ASCII} collating sequence
    543 @cindex collating sequence, @acronym{ASCII}
    544 
    545 @table @asis
    546 @item @emph{Description}:
    547 @code{ACHAR(I)} returns the character located at position @code{I}
    548 in the @acronym{ASCII} collating sequence.
    549 
    550 @item @emph{Standard}:
    551 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
    552 
    553 @item @emph{Class}:
    554 Elemental function
    555 
    556 @item @emph{Syntax}:
    557 @code{RESULT = ACHAR(I [, KIND])}
    558 
    559 @item @emph{Arguments}:
    560 @multitable @columnfractions .15 .70
    561 @item @var{I}    @tab The type shall be @code{INTEGER}.
    562 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
    563 expression indicating the kind parameter of the result.
    564 @end multitable
    565 
    566 @item @emph{Return value}:
    567 The return value is of type @code{CHARACTER} with a length of one.
    568 If the @var{KIND} argument is present, the return value is of the
    569 specified kind and of the default kind otherwise.
    570 
    571 @item @emph{Example}:
    572 @smallexample
    573 program test_achar
    574   character c
    575   c = achar(32)
    576 end program test_achar
    577 @end smallexample
    578 
    579 @item @emph{Note}:
    580 See @ref{ICHAR} for a discussion of converting between numerical values
    581 and formatted string representations.
    582 
    583 @item @emph{See also}:
    584 @ref{CHAR}, @ref{IACHAR}, @ref{ICHAR}
    585 
    586 @end table
    587 
    588 
    589 
    590 @node ACOS
    591 @section @code{ACOS} --- Arccosine function 
    592 @fnindex ACOS
    593 @fnindex DACOS
    594 @cindex trigonometric function, cosine, inverse
    595 @cindex cosine, inverse
    596 
    597 @table @asis
    598 @item @emph{Description}:
    599 @code{ACOS(X)} computes the arccosine of @var{X} (inverse of @code{COS(X)}).
    600 
    601 @item @emph{Standard}:
    602 Fortran 77 and later, for a complex argument Fortran 2008 or later
    603 
    604 @item @emph{Class}:
    605 Elemental function
    606 
    607 @item @emph{Syntax}:
    608 @code{RESULT = ACOS(X)}
    609 
    610 @item @emph{Arguments}:
    611 @multitable @columnfractions .15 .70
    612 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
    613 less than or equal to one - or the type shall be @code{COMPLEX}.
    614 @end multitable
    615 
    616 @item @emph{Return value}:
    617 The return value is of the same type and kind as @var{X}.
    618 The real part of the result is in radians and lies in the range
    619 @math{0 \leq \Re \acos(x) \leq \pi}.
    620 
    621 @item @emph{Example}:
    622 @smallexample
    623 program test_acos
    624   real(8) :: x = 0.866_8
    625   x = acos(x)
    626 end program test_acos
    627 @end smallexample
    628 
    629 @item @emph{Specific names}:
    630 @multitable @columnfractions .20 .20 .20 .25
    631 @item Name            @tab Argument         @tab Return type     @tab Standard
    632 @item @code{ACOS(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}  @tab Fortran 77 and later
    633 @item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}  @tab Fortran 77 and later
    634 @end multitable
    635 
    636 @item @emph{See also}:
    637 Inverse function: @ref{COS}
    638 Degrees function: @ref{ACOSD}
    639 
    640 @end table
    641 
    642 
    643 
    644 @node ACOSD
    645 @section @code{ACOSD} --- Arccosine function, degrees
    646 @fnindex ACOSD
    647 @fnindex DACOSD
    648 @cindex trigonometric function, cosine, inverse, degrees
    649 @cindex cosine, inverse, degrees
    650 
    651 @table @asis
    652 @item @emph{Description}:
    653 @code{ACOSD(X)} computes the arccosine of @var{X} in degrees (inverse of
    654 @code{COSD(X)}).
    655 
    656 This function is for compatibility only and should be avoided in favor of
    657 standard constructs wherever possible.
    658 
    659 @item @emph{Standard}:
    660 GNU Extension, enabled with @option{-fdec-math}
    661 
    662 @item @emph{Class}:
    663 Elemental function
    664 
    665 @item @emph{Syntax}:
    666 @code{RESULT = ACOSD(X)}
    667 
    668 @item @emph{Arguments}:
    669 @multitable @columnfractions .15 .70
    670 @item @var{X} @tab The type shall either be @code{REAL} with a magnitude that is
    671 less than or equal to one - or the type shall be @code{COMPLEX}.
    672 @end multitable
    673 
    674 @item @emph{Return value}:
    675 The return value is of the same type and kind as @var{X}.
    676 The real part of the result is in degrees and lies in the range
    677 @math{0 \leq \Re \acos(x) \leq 180}.
    678 
    679 @item @emph{Example}:
    680 @smallexample
    681 program test_acosd
    682   real(8) :: x = 0.866_8
    683   x = acosd(x)
    684 end program test_acosd
    685 @end smallexample
    686 
    687 @item @emph{Specific names}:
    688 @multitable @columnfractions .20 .20 .20 .25
    689 @item Name            @tab Argument         @tab Return type     @tab Standard
    690 @item @code{ACOSD(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}  @tab GNU Extension
    691 @item @code{DACOSD(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}  @tab GNU Extension
    692 @end multitable
    693 
    694 @item @emph{See also}:
    695 Inverse function: @ref{COSD}
    696 Radians function: @ref{ACOS}
    697 
    698 @end table
    699 
    700 
    701 
    702 @node ACOSH
    703 @section @code{ACOSH} --- Inverse hyperbolic cosine function
    704 @fnindex ACOSH
    705 @fnindex DACOSH
    706 @cindex area hyperbolic cosine
    707 @cindex inverse hyperbolic cosine
    708 @cindex hyperbolic function, cosine, inverse
    709 @cindex cosine, hyperbolic, inverse
    710 
    711 @table @asis
    712 @item @emph{Description}:
    713 @code{ACOSH(X)} computes the inverse hyperbolic cosine of @var{X}.
    714 
    715 @item @emph{Standard}:
    716 Fortran 2008 and later
    717 
    718 @item @emph{Class}:
    719 Elemental function
    720 
    721 @item @emph{Syntax}:
    722 @code{RESULT = ACOSH(X)}
    723 
    724 @item @emph{Arguments}:
    725 @multitable @columnfractions .15 .70
    726 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
    727 @end multitable
    728 
    729 @item @emph{Return value}:
    730 The return value has the same type and kind as @var{X}. If @var{X} is
    731 complex, the imaginary part of the result is in radians and lies between
    732 @math{ 0 \leq \Im \acosh(x) \leq \pi}.
    733 
    734 @item @emph{Example}:
    735 @smallexample
    736 PROGRAM test_acosh
    737   REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)
    738   WRITE (*,*) ACOSH(x)
    739 END PROGRAM
    740 @end smallexample
    741 
    742 @item @emph{Specific names}:
    743 @multitable @columnfractions .20 .20 .20 .25
    744 @item Name             @tab Argument          @tab Return type       @tab Standard
    745 @item @code{DACOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
    746 @end multitable
    747 
    748 @item @emph{See also}:
    749 Inverse function: @ref{COSH}
    750 @end table
    751 
    752 
    753 
    754 @node ADJUSTL
    755 @section @code{ADJUSTL} --- Left adjust a string 
    756 @fnindex ADJUSTL
    757 @cindex string, adjust left
    758 @cindex adjust string
    759 
    760 @table @asis
    761 @item @emph{Description}:
    762 @code{ADJUSTL(STRING)} will left adjust a string by removing leading spaces.
    763 Spaces are inserted at the end of the string as needed.
    764 
    765 @item @emph{Standard}:
    766 Fortran 90 and later
    767 
    768 @item @emph{Class}:
    769 Elemental function
    770 
    771 @item @emph{Syntax}:
    772 @code{RESULT = ADJUSTL(STRING)}
    773 
    774 @item @emph{Arguments}:
    775 @multitable @columnfractions .15 .70
    776 @item @var{STRING} @tab The type shall be @code{CHARACTER}.
    777 @end multitable
    778 
    779 @item @emph{Return value}:
    780 The return value is of type @code{CHARACTER} and of the same kind as
    781 @var{STRING} where leading spaces are removed and the same number of
    782 spaces are inserted on the end of @var{STRING}.
    783 
    784 @item @emph{Example}:
    785 @smallexample
    786 program test_adjustl
    787   character(len=20) :: str = '   gfortran'
    788   str = adjustl(str)
    789   print *, str
    790 end program test_adjustl
    791 @end smallexample
    792 
    793 @item @emph{See also}:
    794 @ref{ADJUSTR}, @ref{TRIM}
    795 @end table
    796 
    797 
    798 
    799 @node ADJUSTR
    800 @section @code{ADJUSTR} --- Right adjust a string 
    801 @fnindex ADJUSTR
    802 @cindex string, adjust right
    803 @cindex adjust string
    804 
    805 @table @asis
    806 @item @emph{Description}:
    807 @code{ADJUSTR(STRING)} will right adjust a string by removing trailing spaces.
    808 Spaces are inserted at the start of the string as needed.
    809 
    810 @item @emph{Standard}:
    811 Fortran 95 and later
    812 
    813 @item @emph{Class}:
    814 Elemental function
    815 
    816 @item @emph{Syntax}:
    817 @code{RESULT = ADJUSTR(STRING)}
    818 
    819 @item @emph{Arguments}:
    820 @multitable @columnfractions .15 .70
    821 @item @var{STR} @tab The type shall be @code{CHARACTER}.
    822 @end multitable
    823 
    824 @item @emph{Return value}:
    825 The return value is of type @code{CHARACTER} and of the same kind as
    826 @var{STRING} where trailing spaces are removed and the same number of
    827 spaces are inserted at the start of @var{STRING}.
    828 
    829 @item @emph{Example}:
    830 @smallexample
    831 program test_adjustr
    832   character(len=20) :: str = 'gfortran'
    833   str = adjustr(str)
    834   print *, str
    835 end program test_adjustr
    836 @end smallexample
    837 
    838 @item @emph{See also}:
    839 @ref{ADJUSTL}, @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 .20 .20 .25
    890 @item Name               @tab Argument            @tab Return type     @tab Standard
    891 @item @code{AIMAG(Z)}    @tab @code{COMPLEX Z}    @tab @code{REAL}     @tab GNU extension
    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 .20 .20 .25
    950 @item 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 95 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 95 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: @ref{IAND}
   1177 @end table
   1178 
   1179 
   1180 
   1181 @node ANINT
   1182 @section @code{ANINT} --- Nearest whole number
   1183 @fnindex ANINT
   1184 @fnindex DNINT
   1185 @cindex ceiling
   1186 @cindex rounding, ceiling
   1187 
   1188 @table @asis
   1189 @item @emph{Description}:
   1190 @code{ANINT(A [, KIND])} rounds its argument to the nearest whole number.
   1191 
   1192 @item @emph{Standard}:
   1193 Fortran 77 and later
   1194 
   1195 @item @emph{Class}:
   1196 Elemental function
   1197 
   1198 @item @emph{Syntax}:
   1199 @code{RESULT = ANINT(A [, KIND])}
   1200 
   1201 @item @emph{Arguments}:
   1202 @multitable @columnfractions .15 .70
   1203 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
   1204 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   1205 expression indicating the kind parameter of the result.
   1206 @end multitable
   1207 
   1208 @item @emph{Return value}:
   1209 The return value is of type real with the kind type parameter of the
   1210 argument if the optional @var{KIND} is absent; otherwise, the kind
   1211 type parameter will be given by @var{KIND}.  If @var{A} is greater than
   1212 zero, @code{ANINT(A)} returns @code{AINT(X+0.5)}.  If @var{A} is
   1213 less than or equal to zero then it returns @code{AINT(X-0.5)}.
   1214 
   1215 @item @emph{Example}:
   1216 @smallexample
   1217 program test_anint
   1218   real(4) x4
   1219   real(8) x8
   1220   x4 = 1.234E0_4
   1221   x8 = 4.321_8
   1222   print *, anint(x4), dnint(x8)
   1223   x8 = anint(x4,8)
   1224 end program test_anint
   1225 @end smallexample
   1226 
   1227 @item @emph{Specific names}:
   1228 @multitable @columnfractions .20 .20 .20 .25
   1229 @item Name            @tab Argument         @tab Return type      @tab Standard
   1230 @item @code{AINT(A)}  @tab @code{REAL(4) A} @tab @code{REAL(4)}   @tab Fortran 77 and later
   1231 @item @code{DNINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)}   @tab Fortran 77 and later
   1232 @end multitable
   1233 @end table
   1234 
   1235 
   1236 
   1237 @node ANY
   1238 @section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true 
   1239 @fnindex ANY
   1240 @cindex array, apply condition
   1241 @cindex array, condition testing
   1242 
   1243 @table @asis
   1244 @item @emph{Description}:
   1245 @code{ANY(MASK [, DIM])} determines if any of the values in the logical array
   1246 @var{MASK} along dimension @var{DIM} are @code{.TRUE.}.
   1247 
   1248 @item @emph{Standard}:
   1249 Fortran 95 and later
   1250 
   1251 @item @emph{Class}:
   1252 Transformational function
   1253 
   1254 @item @emph{Syntax}:
   1255 @code{RESULT = ANY(MASK [, DIM])}
   1256 
   1257 @item @emph{Arguments}:
   1258 @multitable @columnfractions .15 .70
   1259 @item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and
   1260 it shall not be scalar.
   1261 @item @var{DIM}  @tab (Optional) @var{DIM} shall be a scalar integer
   1262 with a value that lies between one and the rank of @var{MASK}.
   1263 @end multitable
   1264 
   1265 @item @emph{Return value}:
   1266 @code{ANY(MASK)} returns a scalar value of type @code{LOGICAL} where
   1267 the kind type parameter is the same as the kind type parameter of
   1268 @var{MASK}.  If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns
   1269 an array with the rank of @var{MASK} minus 1.  The shape is determined from
   1270 the shape of @var{MASK} where the @var{DIM} dimension is elided. 
   1271 
   1272 @table @asis
   1273 @item (A)
   1274 @code{ANY(MASK)} is true if any element of @var{MASK} is true;
   1275 otherwise, it is false.  It also is false if @var{MASK} has zero size.
   1276 @item (B)
   1277 If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent
   1278 to @code{ANY(MASK)}.  If the rank is greater than one, then @code{ANY(MASK,DIM)}
   1279 is determined by applying @code{ANY} to the array sections.
   1280 @end table
   1281 
   1282 @item @emph{Example}:
   1283 @smallexample
   1284 program test_any
   1285   logical l
   1286   l = any((/.true., .true., .true./))
   1287   print *, l
   1288   call section
   1289   contains
   1290     subroutine section
   1291       integer a(2,3), b(2,3)
   1292       a = 1
   1293       b = 1
   1294       b(2,2) = 2
   1295       print *, any(a .eq. b, 1)
   1296       print *, any(a .eq. b, 2)
   1297     end subroutine section
   1298 end program test_any
   1299 @end smallexample
   1300 @end table
   1301 
   1302 
   1303 
   1304 @node ASIN
   1305 @section @code{ASIN} --- Arcsine function 
   1306 @fnindex ASIN
   1307 @fnindex DASIN
   1308 @cindex trigonometric function, sine, inverse
   1309 @cindex sine, inverse
   1310 
   1311 @table @asis
   1312 @item @emph{Description}:
   1313 @code{ASIN(X)} computes the arcsine of its @var{X} (inverse of @code{SIN(X)}).
   1314 
   1315 @item @emph{Standard}:
   1316 Fortran 77 and later, for a complex argument Fortran 2008 or later
   1317 
   1318 @item @emph{Class}:
   1319 Elemental function
   1320 
   1321 @item @emph{Syntax}:
   1322 @code{RESULT = ASIN(X)}
   1323 
   1324 @item @emph{Arguments}:
   1325 @multitable @columnfractions .15 .70
   1326 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
   1327 less than or equal to one - or be @code{COMPLEX}.
   1328 @end multitable
   1329 
   1330 @item @emph{Return value}:
   1331 The return value is of the same type and kind as @var{X}.
   1332 The real part of the result is in radians and lies in the range
   1333 @math{-\pi/2 \leq \Re \asin(x) \leq \pi/2}.
   1334 
   1335 @item @emph{Example}:
   1336 @smallexample
   1337 program test_asin
   1338   real(8) :: x = 0.866_8
   1339   x = asin(x)
   1340 end program test_asin
   1341 @end smallexample
   1342 
   1343 @item @emph{Specific names}:
   1344 @multitable @columnfractions .20 .20 .20 .25
   1345 @item Name            @tab Argument          @tab Return type       @tab Standard
   1346 @item @code{ASIN(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   1347 @item @code{DASIN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   1348 @end multitable
   1349 
   1350 @item @emph{See also}:
   1351 Inverse function: @ref{SIN}
   1352 Degrees function: @ref{ASIND}
   1353 
   1354 @end table
   1355 
   1356 
   1357 
   1358 @node ASIND
   1359 @section @code{ASIND} --- Arcsine function, degrees
   1360 @fnindex ASIND
   1361 @fnindex DASIND
   1362 @cindex trigonometric function, sine, inverse, degrees
   1363 @cindex sine, inverse, degrees
   1364 
   1365 @table @asis
   1366 @item @emph{Description}:
   1367 @code{ASIND(X)} computes the arcsine of its @var{X} in degrees (inverse of
   1368 @code{SIND(X)}).
   1369 
   1370 This function is for compatibility only and should be avoided in favor of
   1371 standard constructs wherever possible.
   1372 
   1373 @item @emph{Standard}:
   1374 GNU Extension, enabled with @option{-fdec-math}.
   1375 
   1376 @item @emph{Class}:
   1377 Elemental function
   1378 
   1379 @item @emph{Syntax}:
   1380 @code{RESULT = ASIND(X)}
   1381 
   1382 @item @emph{Arguments}:
   1383 @multitable @columnfractions .15 .70
   1384 @item @var{X} @tab The type shall be either @code{REAL} and a magnitude that is
   1385 less than or equal to one - or be @code{COMPLEX}.
   1386 @end multitable
   1387 
   1388 @item @emph{Return value}:
   1389 The return value is of the same type and kind as @var{X}.
   1390 The real part of the result is in degrees and lies in the range
   1391 @math{-90 \leq \Re \asin(x) \leq 90}.
   1392 
   1393 @item @emph{Example}:
   1394 @smallexample
   1395 program test_asind
   1396   real(8) :: x = 0.866_8
   1397   x = asind(x)
   1398 end program test_asind
   1399 @end smallexample
   1400 
   1401 @item @emph{Specific names}:
   1402 @multitable @columnfractions .20 .20 .20 .25
   1403 @item Name            @tab Argument          @tab Return type       @tab Standard
   1404 @item @code{ASIND(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab GNU Extension
   1405 @item @code{DASIND(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU Extension
   1406 @end multitable
   1407 
   1408 @item @emph{See also}:
   1409 Inverse function: @ref{SIND}
   1410 Radians function: @ref{ASIN}
   1411 
   1412 @end table
   1413 
   1414 
   1415 
   1416 @node ASINH
   1417 @section @code{ASINH} --- Inverse hyperbolic sine function
   1418 @fnindex ASINH
   1419 @fnindex DASINH
   1420 @cindex area hyperbolic sine
   1421 @cindex inverse hyperbolic sine
   1422 @cindex hyperbolic function, sine, inverse
   1423 @cindex sine, hyperbolic, inverse
   1424 
   1425 @table @asis
   1426 @item @emph{Description}:
   1427 @code{ASINH(X)} computes the inverse hyperbolic sine of @var{X}.
   1428 
   1429 @item @emph{Standard}:
   1430 Fortran 2008 and later
   1431 
   1432 @item @emph{Class}:
   1433 Elemental function
   1434 
   1435 @item @emph{Syntax}:
   1436 @code{RESULT = ASINH(X)}
   1437 
   1438 @item @emph{Arguments}:
   1439 @multitable @columnfractions .15 .70
   1440 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   1441 @end multitable
   1442 
   1443 @item @emph{Return value}:
   1444 The return value is of the same type and kind as  @var{X}. If @var{X} is
   1445 complex, the imaginary part of the result is in radians and lies between
   1446 @math{-\pi/2 \leq \Im \asinh(x) \leq \pi/2}.
   1447 
   1448 @item @emph{Example}:
   1449 @smallexample
   1450 PROGRAM test_asinh
   1451   REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
   1452   WRITE (*,*) ASINH(x)
   1453 END PROGRAM
   1454 @end smallexample
   1455 
   1456 @item @emph{Specific names}:
   1457 @multitable @columnfractions .20 .20 .20 .25
   1458 @item Name             @tab Argument          @tab Return type       @tab Standard
   1459 @item @code{DASINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension.
   1460 @end multitable
   1461 
   1462 @item @emph{See also}:
   1463 Inverse function: @ref{SINH}
   1464 @end table
   1465 
   1466 
   1467 
   1468 @node ASSOCIATED
   1469 @section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair 
   1470 @fnindex ASSOCIATED
   1471 @cindex pointer, status
   1472 @cindex association status
   1473 
   1474 @table @asis
   1475 @item @emph{Description}:
   1476 @code{ASSOCIATED(POINTER [, TARGET])} determines the status of the pointer
   1477 @var{POINTER} or if @var{POINTER} is associated with the target @var{TARGET}.
   1478 
   1479 @item @emph{Standard}:
   1480 Fortran 95 and later
   1481 
   1482 @item @emph{Class}:
   1483 Inquiry function
   1484 
   1485 @item @emph{Syntax}:
   1486 @code{RESULT = ASSOCIATED(POINTER [, TARGET])}
   1487 
   1488 @item @emph{Arguments}:
   1489 @multitable @columnfractions .15 .70
   1490 @item @var{POINTER} @tab @var{POINTER} shall have the @code{POINTER} attribute
   1491 and it can be of any type.
   1492 @item @var{TARGET} @tab (Optional) @var{TARGET} shall be a pointer or
   1493 a target.  It must have the same type, kind type parameter, and
   1494 array rank as @var{POINTER}.
   1495 @end multitable
   1496 The association status of neither @var{POINTER} nor @var{TARGET} shall be
   1497 undefined.
   1498 
   1499 @item @emph{Return value}:
   1500 @code{ASSOCIATED(POINTER)} returns a scalar value of type @code{LOGICAL(4)}.
   1501 There are several cases:
   1502 @table @asis
   1503 @item (A) When the optional @var{TARGET} is not present then
   1504 @code{ASSOCIATED(POINTER)} is true if @var{POINTER} is associated with a target; otherwise, it returns false.
   1505 @item (B) If @var{TARGET} is present and a scalar target, the result is true if
   1506 @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
   1507 disassociated, the result is false.
   1508 @item (C) If @var{TARGET} is present and an array target, the result is true if
   1509 @var{TARGET} and @var{POINTER} have the same shape, are not zero-sized arrays,
   1510 are arrays whose elements are not zero-sized storage sequences, and
   1511 @var{TARGET} and @var{POINTER} occupy the same storage units in array element
   1512 order.
   1513 As in case(B), the result is false, if @var{POINTER} is disassociated.
   1514 @item (D) If @var{TARGET} is present and an scalar pointer, the result is true
   1515 if @var{TARGET} is associated with @var{POINTER}, the target associated with
   1516 @var{TARGET} are not zero-sized storage sequences and occupy the same storage
   1517 units.
   1518 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
   1519 @item (E) If @var{TARGET} is present and an array pointer, the result is true if
   1520 target associated with @var{POINTER} and the target associated with @var{TARGET}
   1521 have the same shape, are not zero-sized arrays, are arrays whose elements are
   1522 not zero-sized storage sequences, and @var{TARGET} and @var{POINTER} occupy
   1523 the same storage units in array element order.
   1524 The result is false, if either @var{TARGET} or @var{POINTER} is disassociated.
   1525 @end table
   1526 
   1527 @item @emph{Example}:
   1528 @smallexample
   1529 program test_associated
   1530    implicit none
   1531    real, target  :: tgt(2) = (/1., 2./)
   1532    real, pointer :: ptr(:)
   1533    ptr => tgt
   1534    if (associated(ptr)     .eqv. .false.) call abort
   1535    if (associated(ptr,tgt) .eqv. .false.) call abort
   1536 end program test_associated
   1537 @end smallexample
   1538 
   1539 @item @emph{See also}:
   1540 @ref{NULL}
   1541 @end table
   1542 
   1543 
   1544 
   1545 @node ATAN
   1546 @section @code{ATAN} --- Arctangent function 
   1547 @fnindex ATAN
   1548 @fnindex DATAN
   1549 @cindex trigonometric function, tangent, inverse
   1550 @cindex tangent, inverse
   1551 
   1552 @table @asis
   1553 @item @emph{Description}:
   1554 @code{ATAN(X)} computes the arctangent of @var{X}.
   1555 
   1556 @item @emph{Standard}:
   1557 Fortran 77 and later, for a complex argument and for two arguments
   1558 Fortran 2008 or later
   1559 
   1560 @item @emph{Class}:
   1561 Elemental function
   1562 
   1563 @item @emph{Syntax}:
   1564 @multitable @columnfractions .80
   1565 @item @code{RESULT = ATAN(X)}
   1566 @item @code{RESULT = ATAN(Y, X)}
   1567 @end multitable
   1568 
   1569 @item @emph{Arguments}:
   1570 @multitable @columnfractions .15 .70
   1571 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
   1572 if @var{Y} is present, @var{X} shall be REAL.
   1573 @item @var{Y} shall be of the same type and kind as @var{X}.
   1574 @end multitable
   1575 
   1576 @item @emph{Return value}:
   1577 The return value is of the same type and kind as @var{X}.
   1578 If @var{Y} is present, the result is identical to @code{ATAN2(Y,X)}.
   1579 Otherwise, it the arcus tangent of @var{X}, where the real part of
   1580 the result is in radians and lies in the range
   1581 @math{-\pi/2 \leq \Re \atan(x) \leq \pi/2}.
   1582 
   1583 @item @emph{Example}:
   1584 @smallexample
   1585 program test_atan
   1586   real(8) :: x = 2.866_8
   1587   x = atan(x)
   1588 end program test_atan
   1589 @end smallexample
   1590 
   1591 @item @emph{Specific names}:
   1592 @multitable @columnfractions .20 .20 .20 .25
   1593 @item Name            @tab Argument          @tab Return type       @tab Standard
   1594 @item @code{ATAN(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   1595 @item @code{DATAN(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   1596 @end multitable
   1597 
   1598 @item @emph{See also}:
   1599 Inverse function: @ref{TAN}
   1600 Degrees function: @ref{ATAND}
   1601 
   1602 @end table
   1603 
   1604 
   1605 
   1606 @node ATAND
   1607 @section @code{ATAND} --- Arctangent function, degrees
   1608 @fnindex ATAND
   1609 @fnindex DATAND
   1610 @cindex trigonometric function, tangent, inverse, degrees
   1611 @cindex tangent, inverse, degrees
   1612 
   1613 @table @asis
   1614 @item @emph{Description}:
   1615 @code{ATAND(X)} computes the arctangent of @var{X} in degrees (inverse of
   1616 @ref{TAND}).
   1617 
   1618 This function is for compatibility only and should be avoided in favor of
   1619 standard constructs wherever possible.
   1620 
   1621 @item @emph{Standard}:
   1622 GNU Extension, enabled with @option{-fdec-math}.
   1623 
   1624 @item @emph{Class}:
   1625 Elemental function
   1626 
   1627 @item @emph{Syntax}:
   1628 @multitable @columnfractions .80
   1629 @item @code{RESULT = ATAND(X)}
   1630 @item @code{RESULT = ATAND(Y, X)}
   1631 @end multitable
   1632 
   1633 @item @emph{Arguments}:
   1634 @multitable @columnfractions .15 .70
   1635 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX};
   1636 if @var{Y} is present, @var{X} shall be REAL.
   1637 @item @var{Y} shall be of the same type and kind as @var{X}.
   1638 @end multitable
   1639 
   1640 @item @emph{Return value}:
   1641 The return value is of the same type and kind as @var{X}.
   1642 If @var{Y} is present, the result is identical to @code{ATAND2(Y,X)}.
   1643 Otherwise, it is the arcus tangent of @var{X}, where the real part of
   1644 the result is in degrees and lies in the range
   1645 @math{-90 \leq \Re \atand(x) \leq 90}.
   1646 
   1647 @item @emph{Example}:
   1648 @smallexample
   1649 program test_atand
   1650   real(8) :: x = 2.866_8
   1651   x = atand(x)
   1652 end program test_atand
   1653 @end smallexample
   1654 
   1655 @item @emph{Specific names}:
   1656 @multitable @columnfractions .20 .20 .20 .25
   1657 @item Name            @tab Argument          @tab Return type       @tab Standard
   1658 @item @code{ATAND(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab GNU Extension
   1659 @item @code{DATAND(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU Extension
   1660 @end multitable
   1661 
   1662 @item @emph{See also}:
   1663 Inverse function: @ref{TAND}
   1664 Radians function: @ref{ATAN}
   1665 
   1666 @end table
   1667 
   1668 
   1669 
   1670 @node ATAN2
   1671 @section @code{ATAN2} --- Arctangent function 
   1672 @fnindex ATAN2
   1673 @fnindex DATAN2
   1674 @cindex trigonometric function, tangent, inverse
   1675 @cindex tangent, inverse
   1676 
   1677 @table @asis
   1678 @item @emph{Description}:
   1679 @code{ATAN2(Y, X)} computes the principal value of the argument
   1680 function of the complex number @math{X + i Y}.  This function can
   1681 be used to transform from Cartesian into polar coordinates and
   1682 allows to determine the angle in the correct quadrant.
   1683 
   1684 @item @emph{Standard}:
   1685 Fortran 77 and later
   1686 
   1687 @item @emph{Class}:
   1688 Elemental function
   1689 
   1690 @item @emph{Syntax}:
   1691 @code{RESULT = ATAN2(Y, X)}
   1692 
   1693 @item @emph{Arguments}:
   1694 @multitable @columnfractions .15 .70
   1695 @item @var{Y} @tab The type shall be @code{REAL}.
   1696 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
   1697 If @var{Y} is zero, then @var{X} must be nonzero.
   1698 @end multitable
   1699 
   1700 @item @emph{Return value}:
   1701 The return value has the same type and kind type parameter as @var{Y}. It
   1702 is the principal value of the complex number @math{X + i Y}.  If @var{X}
   1703 is nonzero, then it lies in the range @math{-\pi \le \atan (x) \leq \pi}.
   1704 The sign is positive if @var{Y} is positive.  If @var{Y} is zero, then
   1705 the return value is zero if @var{X} is strictly positive, @math{\pi} if
   1706 @var{X} is negative and @var{Y} is positive zero (or the processor does
   1707 not handle signed zeros), and @math{-\pi} if @var{X} is negative and
   1708 @var{Y} is negative zero.  Finally, if @var{X} is zero, then the
   1709 magnitude of the result is @math{\pi/2}.
   1710 
   1711 @item @emph{Example}:
   1712 @smallexample
   1713 program test_atan2
   1714   real(4) :: x = 1.e0_4, y = 0.5e0_4
   1715   x = atan2(y,x)
   1716 end program test_atan2
   1717 @end smallexample
   1718 
   1719 @item @emph{Specific names}:
   1720 @multitable @columnfractions .20 .20 .20 .25
   1721 @item Name                @tab Argument            @tab Return type    @tab Standard
   1722 @item @code{ATAN2(X, Y)}  @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab Fortran 77 and later
   1723 @item @code{DATAN2(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab Fortran 77 and later
   1724 @end multitable
   1725 
   1726 @item @emph{See also}:
   1727 Alias: @ref{ATAN}
   1728 Degrees function: @ref{ATAN2D}
   1729 
   1730 @end table
   1731 
   1732 
   1733 
   1734 @node ATAN2D
   1735 @section @code{ATAN2D} --- Arctangent function, degrees
   1736 @fnindex ATAN2D
   1737 @fnindex DATAN2D
   1738 @cindex trigonometric function, tangent, inverse, degrees
   1739 @cindex tangent, inverse, degrees
   1740 
   1741 @table @asis
   1742 @item @emph{Description}:
   1743 @code{ATAN2D(Y, X)} computes the principal value of the argument
   1744 function of the complex number @math{X + i Y} in degrees.  This function can
   1745 be used to transform from Cartesian into polar coordinates and
   1746 allows to determine the angle in the correct quadrant.
   1747 
   1748 This function is for compatibility only and should be avoided in favor of
   1749 standard constructs wherever possible.
   1750 
   1751 @item @emph{Standard}:
   1752 GNU Extension, enabled with @option{-fdec-math}.
   1753 
   1754 @item @emph{Class}:
   1755 Elemental function
   1756 
   1757 @item @emph{Syntax}:
   1758 @code{RESULT = ATAN2D(Y, X)}
   1759 
   1760 @item @emph{Arguments}:
   1761 @multitable @columnfractions .15 .70
   1762 @item @var{Y} @tab The type shall be @code{REAL}.
   1763 @item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
   1764 If @var{Y} is zero, then @var{X} must be nonzero.
   1765 @end multitable
   1766 
   1767 @item @emph{Return value}:
   1768 The return value has the same type and kind type parameter as @var{Y}. It
   1769 is the principal value of the complex number @math{X + i Y}.  If @var{X}
   1770 is nonzero, then it lies in the range @math{-180 \le \atan (x) \leq 180}.
   1771 The sign is positive if @var{Y} is positive.  If @var{Y} is zero, then
   1772 the return value is zero if @var{X} is strictly positive, @math{180} if
   1773 @var{X} is negative and @var{Y} is positive zero (or the processor does
   1774 not handle signed zeros), and @math{-180} if @var{X} is negative and
   1775 @var{Y} is negative zero.  Finally, if @var{X} is zero, then the
   1776 magnitude of the result is @math{90}.
   1777 
   1778 @item @emph{Example}:
   1779 @smallexample
   1780 program test_atan2d
   1781   real(4) :: x = 1.e0_4, y = 0.5e0_4
   1782   x = atan2d(y,x)
   1783 end program test_atan2d
   1784 @end smallexample
   1785 
   1786 @item @emph{Specific names}:
   1787 @multitable @columnfractions .20 .20 .20 .25
   1788 @item Name                @tab Argument            @tab Return type    @tab Standard
   1789 @item @code{ATAN2D(X, Y)}  @tab @code{REAL(4) X, Y} @tab @code{REAL(4)} @tab GNU Extension
   1790 @item @code{DATAN2D(X, Y)} @tab @code{REAL(8) X, Y} @tab @code{REAL(8)} @tab GNU Extension
   1791 @end multitable
   1792 
   1793 @item @emph{See also}:
   1794 Alias: @ref{ATAND}
   1795 Radians function: @ref{ATAN2}
   1796 
   1797 @end table
   1798 
   1799 
   1800 
   1801 @node ATANH
   1802 @section @code{ATANH} --- Inverse hyperbolic tangent function
   1803 @fnindex ATANH
   1804 @fnindex DATANH
   1805 @cindex area hyperbolic tangent
   1806 @cindex inverse hyperbolic tangent
   1807 @cindex hyperbolic function, tangent, inverse
   1808 @cindex tangent, hyperbolic, inverse
   1809 
   1810 @table @asis
   1811 @item @emph{Description}:
   1812 @code{ATANH(X)} computes the inverse hyperbolic tangent of @var{X}.
   1813 
   1814 @item @emph{Standard}:
   1815 Fortran 2008 and later
   1816 
   1817 @item @emph{Class}:
   1818 Elemental function
   1819 
   1820 @item @emph{Syntax}:
   1821 @code{RESULT = ATANH(X)}
   1822 
   1823 @item @emph{Arguments}:
   1824 @multitable @columnfractions .15 .70
   1825 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   1826 @end multitable
   1827 
   1828 @item @emph{Return value}:
   1829 The return value has same type and kind as @var{X}. If @var{X} is
   1830 complex, the imaginary part of the result is in radians and lies between
   1831 @math{-\pi/2 \leq \Im \atanh(x) \leq \pi/2}.
   1832 
   1833 @item @emph{Example}:
   1834 @smallexample
   1835 PROGRAM test_atanh
   1836   REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)
   1837   WRITE (*,*) ATANH(x)
   1838 END PROGRAM
   1839 @end smallexample
   1840 
   1841 @item @emph{Specific names}:
   1842 @multitable @columnfractions .20 .20 .20 .25
   1843 @item Name             @tab Argument          @tab Return type       @tab Standard
   1844 @item @code{DATANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   1845 @end multitable
   1846 
   1847 @item @emph{See also}:
   1848 Inverse function: @ref{TANH}
   1849 @end table
   1850 
   1851 
   1852 
   1853 @node ATOMIC_ADD
   1854 @section @code{ATOMIC_ADD} --- Atomic ADD operation
   1855 @fnindex ATOMIC_ADD
   1856 @cindex Atomic subroutine, add
   1857 
   1858 @table @asis
   1859 @item @emph{Description}:
   1860 @code{ATOMIC_ADD(ATOM, VALUE)} atomically adds the value of @var{VAR} to the
   1861 variable @var{ATOM}. When @var{STAT} is present and the invocation was
   1862 successful, it is assigned the value 0. If it is present and the invocation
   1863 has failed, it is assigned a positive value; in particular, for a coindexed
   1864 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   1865 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   1866 failed, the value @code{STAT_FAILED_IMAGE}.
   1867 
   1868 @item @emph{Standard}:
   1869 TS 18508 or later
   1870 
   1871 @item @emph{Class}:
   1872 Atomic subroutine
   1873 
   1874 @item @emph{Syntax}:
   1875 @code{CALL ATOMIC_ADD (ATOM, VALUE [, STAT])}
   1876 
   1877 @item @emph{Arguments}:
   1878 @multitable @columnfractions .15 .70
   1879 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   1880 type with @code{ATOMIC_INT_KIND} kind.
   1881 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   1882 is different, the value is converted to the kind of @var{ATOM}.
   1883 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   1884 @end multitable
   1885 
   1886 @item @emph{Example}:
   1887 @smallexample
   1888 program atomic
   1889   use iso_fortran_env
   1890   integer(atomic_int_kind) :: atom[*]
   1891   call atomic_add (atom[1], this_image())
   1892 end program atomic
   1893 @end smallexample
   1894 
   1895 @item @emph{See also}:
   1896 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_ADD}, @ref{ISO_FORTRAN_ENV},
   1897 @ref{ATOMIC_AND}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
   1898 @end table
   1899 
   1900 
   1901 
   1902 
   1903 @node ATOMIC_AND
   1904 @section @code{ATOMIC_AND} --- Atomic bitwise AND operation
   1905 @fnindex ATOMIC_AND
   1906 @cindex Atomic subroutine, AND
   1907 
   1908 @table @asis
   1909 @item @emph{Description}:
   1910 @code{ATOMIC_AND(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
   1911 AND between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
   1912 and the invocation was successful, it is assigned the value 0. If it is present
   1913 and the invocation has failed, it is assigned a positive value; in particular,
   1914 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
   1915 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
   1916 image has failed, the value @code{STAT_FAILED_IMAGE}.
   1917 
   1918 @item @emph{Standard}:
   1919 TS 18508 or later
   1920 
   1921 @item @emph{Class}:
   1922 Atomic subroutine
   1923 
   1924 @item @emph{Syntax}:
   1925 @code{CALL ATOMIC_AND (ATOM, VALUE [, STAT])}
   1926 
   1927 @item @emph{Arguments}:
   1928 @multitable @columnfractions .15 .70
   1929 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   1930 type with @code{ATOMIC_INT_KIND} kind.
   1931 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   1932 is different, the value is converted to the kind of @var{ATOM}.
   1933 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   1934 @end multitable
   1935 
   1936 @item @emph{Example}:
   1937 @smallexample
   1938 program atomic
   1939   use iso_fortran_env
   1940   integer(atomic_int_kind) :: atom[*]
   1941   call atomic_and (atom[1], int(b'10100011101'))
   1942 end program atomic
   1943 @end smallexample
   1944 
   1945 @item @emph{See also}:
   1946 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_AND}, @ref{ISO_FORTRAN_ENV},
   1947 @ref{ATOMIC_ADD}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
   1948 @end table
   1949 
   1950 
   1951 
   1952 @node ATOMIC_CAS
   1953 @section @code{ATOMIC_CAS} --- Atomic compare and swap
   1954 @fnindex ATOMIC_DEFINE
   1955 @cindex Atomic subroutine, compare and swap
   1956 
   1957 @table @asis
   1958 @item @emph{Description}:
   1959 @code{ATOMIC_CAS} compares the variable @var{ATOM} with the value of
   1960 @var{COMPARE}; if the value is the same, @var{ATOM} is set to the value
   1961 of @var{NEW}. Additionally, @var{OLD} is set to the value of @var{ATOM}
   1962 that was used for the comparison.  When @var{STAT} is present and the invocation
   1963 was successful, it is assigned the value 0. If it is present and the invocation
   1964 has failed, it is assigned a positive value; in particular, for a coindexed
   1965 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   1966 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   1967 failed, the value @code{STAT_FAILED_IMAGE}.
   1968 
   1969 @item @emph{Standard}:
   1970 TS 18508 or later
   1971 
   1972 @item @emph{Class}:
   1973 Atomic subroutine
   1974 
   1975 @item @emph{Syntax}:
   1976 @code{CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])}
   1977 
   1978 @item @emph{Arguments}:
   1979 @multitable @columnfractions .15 .70
   1980 @item @var{ATOM}    @tab Scalar coarray or coindexed variable of either integer
   1981 type with @code{ATOMIC_INT_KIND} kind or logical type with
   1982 @code{ATOMIC_LOGICAL_KIND} kind.
   1983 @item @var{OLD}     @tab Scalar of the same type and kind as @var{ATOM}.
   1984 @item @var{COMPARE} @tab Scalar variable of the same type and kind as
   1985 @var{ATOM}.
   1986 @item @var{NEW}     @tab Scalar variable of the same type as @var{ATOM}. If kind
   1987 is different, the value is converted to the kind of @var{ATOM}.
   1988 @item @var{STAT}    @tab (optional) Scalar default-kind integer variable.
   1989 @end multitable
   1990 
   1991 @item @emph{Example}:
   1992 @smallexample
   1993 program atomic
   1994   use iso_fortran_env
   1995   logical(atomic_logical_kind) :: atom[*], prev
   1996   call atomic_cas (atom[1], prev, .false., .true.))
   1997 end program atomic
   1998 @end smallexample
   1999 
   2000 @item @emph{See also}:
   2001 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_REF}, @ref{ISO_FORTRAN_ENV}
   2002 @end table
   2003 
   2004 
   2005 
   2006 @node ATOMIC_DEFINE
   2007 @section @code{ATOMIC_DEFINE} --- Setting a variable atomically
   2008 @fnindex ATOMIC_DEFINE
   2009 @cindex Atomic subroutine, define
   2010 
   2011 @table @asis
   2012 @item @emph{Description}:
   2013 @code{ATOMIC_DEFINE(ATOM, VALUE)} defines the variable @var{ATOM} with the value
   2014 @var{VALUE} atomically. When @var{STAT} is present and the invocation was
   2015 successful, it is assigned the value 0. If it is present and the invocation
   2016 has failed, it is assigned a positive value; in particular, for a coindexed
   2017 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2018 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2019 failed, the value @code{STAT_FAILED_IMAGE}.
   2020 
   2021 @item @emph{Standard}:
   2022 Fortran 2008 and later; with @var{STAT}, TS 18508 or later
   2023 
   2024 @item @emph{Class}:
   2025 Atomic subroutine
   2026 
   2027 @item @emph{Syntax}:
   2028 @code{CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])}
   2029 
   2030 @item @emph{Arguments}:
   2031 @multitable @columnfractions .15 .70
   2032 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of either integer
   2033 type with @code{ATOMIC_INT_KIND} kind or logical type with
   2034 @code{ATOMIC_LOGICAL_KIND} kind.
   2035 
   2036 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2037 is different, the value is converted to the kind of @var{ATOM}.
   2038 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2039 @end multitable
   2040 
   2041 @item @emph{Example}:
   2042 @smallexample
   2043 program atomic
   2044   use iso_fortran_env
   2045   integer(atomic_int_kind) :: atom[*]
   2046   call atomic_define (atom[1], this_image())
   2047 end program atomic
   2048 @end smallexample
   2049 
   2050 @item @emph{See also}:
   2051 @ref{ATOMIC_REF}, @ref{ATOMIC_CAS}, @ref{ISO_FORTRAN_ENV},
   2052 @ref{ATOMIC_ADD}, @ref{ATOMIC_AND}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
   2053 @end table
   2054 
   2055 
   2056 
   2057 @node ATOMIC_FETCH_ADD
   2058 @section @code{ATOMIC_FETCH_ADD} --- Atomic ADD operation with prior fetch
   2059 @fnindex ATOMIC_FETCH_ADD
   2060 @cindex Atomic subroutine, ADD with fetch
   2061 
   2062 @table @asis
   2063 @item @emph{Description}:
   2064 @code{ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)} atomically stores the value of
   2065 @var{ATOM} in @var{OLD} and adds the value of @var{VAR} to the
   2066 variable @var{ATOM}. When @var{STAT} is present and the invocation was
   2067 successful, it is assigned the value 0. If it is present and the invocation
   2068 has failed, it is assigned a positive value; in particular, for a coindexed
   2069 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2070 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2071 failed, the value @code{STAT_FAILED_IMAGE}.
   2072 
   2073 @item @emph{Standard}:
   2074 TS 18508 or later
   2075 
   2076 @item @emph{Class}:
   2077 Atomic subroutine
   2078 
   2079 @item @emph{Syntax}:
   2080 @code{CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])}
   2081 
   2082 @item @emph{Arguments}:
   2083 @multitable @columnfractions .15 .70
   2084 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2085 type with @code{ATOMIC_INT_KIND} kind.
   2086 @code{ATOMIC_LOGICAL_KIND} kind.
   2087 
   2088 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2089 is different, the value is converted to the kind of @var{ATOM}.
   2090 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2091 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2092 @end multitable
   2093 
   2094 @item @emph{Example}:
   2095 @smallexample
   2096 program atomic
   2097   use iso_fortran_env
   2098   integer(atomic_int_kind) :: atom[*], old
   2099   call atomic_add (atom[1], this_image(), old)
   2100 end program atomic
   2101 @end smallexample
   2102 
   2103 @item @emph{See also}:
   2104 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_ADD}, @ref{ISO_FORTRAN_ENV},
   2105 @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_OR}, @ref{ATOMIC_FETCH_XOR}
   2106 @end table
   2107 
   2108 
   2109 
   2110 @node ATOMIC_FETCH_AND
   2111 @section @code{ATOMIC_FETCH_AND} --- Atomic bitwise AND operation with prior fetch
   2112 @fnindex ATOMIC_FETCH_AND
   2113 @cindex Atomic subroutine, AND with fetch
   2114 
   2115 @table @asis
   2116 @item @emph{Description}:
   2117 @code{ATOMIC_AND(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
   2118 @var{OLD} and defines @var{ATOM} with the bitwise AND between the values of
   2119 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
   2120 successful, it is assigned the value 0. If it is present and the invocation has
   2121 failed, it is assigned a positive value; in particular, for a coindexed
   2122 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2123 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2124 failed, the value @code{STAT_FAILED_IMAGE}.
   2125 
   2126 @item @emph{Standard}:
   2127 TS 18508 or later
   2128 
   2129 @item @emph{Class}:
   2130 Atomic subroutine
   2131 
   2132 @item @emph{Syntax}:
   2133 @code{CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])}
   2134 
   2135 @item @emph{Arguments}:
   2136 @multitable @columnfractions .15 .70
   2137 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2138 type with @code{ATOMIC_INT_KIND} kind.
   2139 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2140 is different, the value is converted to the kind of @var{ATOM}.
   2141 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2142 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2143 @end multitable
   2144 
   2145 @item @emph{Example}:
   2146 @smallexample
   2147 program atomic
   2148   use iso_fortran_env
   2149   integer(atomic_int_kind) :: atom[*], old
   2150   call atomic_fetch_and (atom[1], int(b'10100011101'), old)
   2151 end program atomic
   2152 @end smallexample
   2153 
   2154 @item @emph{See also}:
   2155 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_AND}, @ref{ISO_FORTRAN_ENV},
   2156 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_OR}, @ref{ATOMIC_FETCH_XOR}
   2157 @end table
   2158 
   2159 
   2160 
   2161 @node ATOMIC_FETCH_OR
   2162 @section @code{ATOMIC_FETCH_OR} --- Atomic bitwise OR operation with prior fetch
   2163 @fnindex ATOMIC_FETCH_OR
   2164 @cindex Atomic subroutine, OR with fetch
   2165 
   2166 @table @asis
   2167 @item @emph{Description}:
   2168 @code{ATOMIC_OR(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
   2169 @var{OLD} and defines @var{ATOM} with the bitwise OR between the values of
   2170 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
   2171 successful, it is assigned the value 0. If it is present and the invocation has
   2172 failed, it is assigned a positive value; in particular, for a coindexed
   2173 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2174 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2175 failed, the value @code{STAT_FAILED_IMAGE}.
   2176 
   2177 @item @emph{Standard}:
   2178 TS 18508 or later
   2179 
   2180 @item @emph{Class}:
   2181 Atomic subroutine
   2182 
   2183 @item @emph{Syntax}:
   2184 @code{CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])}
   2185 
   2186 @item @emph{Arguments}:
   2187 @multitable @columnfractions .15 .70
   2188 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2189 type with @code{ATOMIC_INT_KIND} kind.
   2190 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2191 is different, the value is converted to the kind of @var{ATOM}.
   2192 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2193 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2194 @end multitable
   2195 
   2196 @item @emph{Example}:
   2197 @smallexample
   2198 program atomic
   2199   use iso_fortran_env
   2200   integer(atomic_int_kind) :: atom[*], old
   2201   call atomic_fetch_or (atom[1], int(b'10100011101'), old)
   2202 end program atomic
   2203 @end smallexample
   2204 
   2205 @item @emph{See also}:
   2206 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_OR}, @ref{ISO_FORTRAN_ENV},
   2207 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_XOR}
   2208 @end table
   2209 
   2210 
   2211 
   2212 @node ATOMIC_FETCH_XOR
   2213 @section @code{ATOMIC_FETCH_XOR} --- Atomic bitwise XOR operation with prior fetch
   2214 @fnindex ATOMIC_FETCH_XOR
   2215 @cindex Atomic subroutine, XOR with fetch
   2216 
   2217 @table @asis
   2218 @item @emph{Description}:
   2219 @code{ATOMIC_XOR(ATOM, VALUE)} atomically stores the value of @var{ATOM} in
   2220 @var{OLD} and defines @var{ATOM} with the bitwise XOR between the values of
   2221 @var{ATOM} and @var{VALUE}. When @var{STAT} is present and the invocation was
   2222 successful, it is assigned the value 0. If it is present and the invocation has
   2223 failed, it is assigned a positive value; in particular, for a coindexed
   2224 @var{ATOM}, if the remote image has stopped, it is assigned the value of
   2225 @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image has
   2226 failed, the value @code{STAT_FAILED_IMAGE}.
   2227 
   2228 @item @emph{Standard}:
   2229 TS 18508 or later
   2230 
   2231 @item @emph{Class}:
   2232 Atomic subroutine
   2233 
   2234 @item @emph{Syntax}:
   2235 @code{CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])}
   2236 
   2237 @item @emph{Arguments}:
   2238 @multitable @columnfractions .15 .70
   2239 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2240 type with @code{ATOMIC_INT_KIND} kind.
   2241 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2242 is different, the value is converted to the kind of @var{ATOM}.
   2243 @item @var{OLD}    @tab Scalar of the same type and kind as @var{ATOM}.
   2244 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2245 @end multitable
   2246 
   2247 @item @emph{Example}:
   2248 @smallexample
   2249 program atomic
   2250   use iso_fortran_env
   2251   integer(atomic_int_kind) :: atom[*], old
   2252   call atomic_fetch_xor (atom[1], int(b'10100011101'), old)
   2253 end program atomic
   2254 @end smallexample
   2255 
   2256 @item @emph{See also}:
   2257 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_XOR}, @ref{ISO_FORTRAN_ENV},
   2258 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_OR}
   2259 @end table
   2260 
   2261 
   2262 
   2263 @node ATOMIC_OR
   2264 @section @code{ATOMIC_OR} --- Atomic bitwise OR operation
   2265 @fnindex ATOMIC_OR
   2266 @cindex Atomic subroutine, OR
   2267 
   2268 @table @asis
   2269 @item @emph{Description}:
   2270 @code{ATOMIC_OR(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
   2271 AND between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
   2272 and the invocation was successful, it is assigned the value 0. If it is present
   2273 and the invocation has failed, it is assigned a positive value; in particular,
   2274 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
   2275 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
   2276 image has failed, the value @code{STAT_FAILED_IMAGE}.
   2277 
   2278 @item @emph{Standard}:
   2279 TS 18508 or later
   2280 
   2281 @item @emph{Class}:
   2282 Atomic subroutine
   2283 
   2284 @item @emph{Syntax}:
   2285 @code{CALL ATOMIC_OR (ATOM, VALUE [, STAT])}
   2286 
   2287 @item @emph{Arguments}:
   2288 @multitable @columnfractions .15 .70
   2289 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2290 type with @code{ATOMIC_INT_KIND} kind.
   2291 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2292 is different, the value is converted to the kind of @var{ATOM}.
   2293 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2294 @end multitable
   2295 
   2296 @item @emph{Example}:
   2297 @smallexample
   2298 program atomic
   2299   use iso_fortran_env
   2300   integer(atomic_int_kind) :: atom[*]
   2301   call atomic_or (atom[1], int(b'10100011101'))
   2302 end program atomic
   2303 @end smallexample
   2304 
   2305 @item @emph{See also}:
   2306 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_OR}, @ref{ISO_FORTRAN_ENV},
   2307 @ref{ATOMIC_ADD}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
   2308 @end table
   2309 
   2310 
   2311 
   2312 @node ATOMIC_REF
   2313 @section @code{ATOMIC_REF} --- Obtaining the value of a variable atomically
   2314 @fnindex ATOMIC_REF
   2315 @cindex Atomic subroutine, reference
   2316 
   2317 @table @asis
   2318 @item @emph{Description}:
   2319 @code{ATOMIC_DEFINE(ATOM, VALUE)} atomically assigns the value of the
   2320 variable @var{ATOM} to @var{VALUE}. When @var{STAT} is present and the
   2321 invocation was successful, it is assigned the value 0. If it is present and the
   2322 invocation has failed, it is assigned a positive value; in particular, for a
   2323 coindexed @var{ATOM}, if the remote image has stopped, it is assigned the value
   2324 of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote image
   2325 has failed, the value @code{STAT_FAILED_IMAGE}.
   2326 
   2327 
   2328 @item @emph{Standard}:
   2329 Fortran 2008 and later; with @var{STAT}, TS 18508 or later
   2330 
   2331 @item @emph{Class}:
   2332 Atomic subroutine
   2333 
   2334 @item @emph{Syntax}:
   2335 @code{CALL ATOMIC_REF(VALUE, ATOM [, STAT])}
   2336 
   2337 @item @emph{Arguments}:
   2338 @multitable @columnfractions .15 .70
   2339 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2340 is different, the value is converted to the kind of @var{ATOM}.
   2341 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of either integer
   2342 type with @code{ATOMIC_INT_KIND} kind or logical type with
   2343 @code{ATOMIC_LOGICAL_KIND} kind.
   2344 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2345 @end multitable
   2346 
   2347 @item @emph{Example}:
   2348 @smallexample
   2349 program atomic
   2350   use iso_fortran_env
   2351   logical(atomic_logical_kind) :: atom[*]
   2352   logical :: val
   2353   call atomic_ref (atom, .false.)
   2354   ! ...
   2355   call atomic_ref (atom, val)
   2356   if (val) then
   2357     print *, "Obtained"
   2358   end if
   2359 end program atomic
   2360 @end smallexample
   2361 
   2362 @item @emph{See also}:
   2363 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_CAS}, @ref{ISO_FORTRAN_ENV},
   2364 @ref{ATOMIC_FETCH_ADD}, @ref{ATOMIC_FETCH_AND}, @ref{ATOMIC_FETCH_OR},
   2365 @ref{ATOMIC_FETCH_XOR}
   2366 @end table
   2367 
   2368 
   2369 @node ATOMIC_XOR
   2370 @section @code{ATOMIC_XOR} --- Atomic bitwise OR operation
   2371 @fnindex ATOMIC_XOR
   2372 @cindex Atomic subroutine, XOR
   2373 
   2374 @table @asis
   2375 @item @emph{Description}:
   2376 @code{ATOMIC_AND(ATOM, VALUE)} atomically defines @var{ATOM} with the bitwise
   2377 XOR between the values of @var{ATOM} and @var{VALUE}. When @var{STAT} is present
   2378 and the invocation was successful, it is assigned the value 0. If it is present
   2379 and the invocation has failed, it is assigned a positive value; in particular,
   2380 for a coindexed @var{ATOM}, if the remote image has stopped, it is assigned the
   2381 value of @code{ISO_FORTRAN_ENV}'s @code{STAT_STOPPED_IMAGE} and if the remote
   2382 image has failed, the value @code{STAT_FAILED_IMAGE}.
   2383 
   2384 @item @emph{Standard}:
   2385 TS 18508 or later
   2386 
   2387 @item @emph{Class}:
   2388 Atomic subroutine
   2389 
   2390 @item @emph{Syntax}:
   2391 @code{CALL ATOMIC_XOR (ATOM, VALUE [, STAT])}
   2392 
   2393 @item @emph{Arguments}:
   2394 @multitable @columnfractions .15 .70
   2395 @item @var{ATOM}   @tab Scalar coarray or coindexed variable of integer
   2396 type with @code{ATOMIC_INT_KIND} kind.
   2397 @item @var{VALUE}  @tab Scalar of the same type as @var{ATOM}. If the kind
   2398 is different, the value is converted to the kind of @var{ATOM}.
   2399 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   2400 @end multitable
   2401 
   2402 @item @emph{Example}:
   2403 @smallexample
   2404 program atomic
   2405   use iso_fortran_env
   2406   integer(atomic_int_kind) :: atom[*]
   2407   call atomic_xor (atom[1], int(b'10100011101'))
   2408 end program atomic
   2409 @end smallexample
   2410 
   2411 @item @emph{See also}:
   2412 @ref{ATOMIC_DEFINE}, @ref{ATOMIC_FETCH_XOR}, @ref{ISO_FORTRAN_ENV},
   2413 @ref{ATOMIC_ADD}, @ref{ATOMIC_OR}, @ref{ATOMIC_XOR}
   2414 @end table
   2415 
   2416 
   2417 @node BACKTRACE
   2418 @section @code{BACKTRACE} --- Show a backtrace
   2419 @fnindex BACKTRACE
   2420 @cindex backtrace
   2421 
   2422 @table @asis
   2423 @item @emph{Description}:
   2424 @code{BACKTRACE} shows a backtrace at an arbitrary place in user code. Program
   2425 execution continues normally afterwards. The backtrace information is printed
   2426 to the unit corresponding to @code{ERROR_UNIT} in @code{ISO_FORTRAN_ENV}.
   2427 
   2428 @item @emph{Standard}:
   2429 GNU Extension
   2430 
   2431 @item @emph{Class}:
   2432 Subroutine
   2433 
   2434 @item @emph{Syntax}:
   2435 @code{CALL BACKTRACE}
   2436 
   2437 @item @emph{Arguments}:
   2438 None
   2439 
   2440 @item @emph{See also}:
   2441 @ref{ABORT}
   2442 @end table
   2443 
   2444 
   2445 
   2446 @node BESSEL_J0
   2447 @section @code{BESSEL_J0} --- Bessel function of the first kind of order 0
   2448 @fnindex BESSEL_J0
   2449 @fnindex BESJ0
   2450 @fnindex DBESJ0
   2451 @cindex Bessel function, first kind
   2452 
   2453 @table @asis
   2454 @item @emph{Description}:
   2455 @code{BESSEL_J0(X)} computes the Bessel function of the first kind of
   2456 order 0 of @var{X}. This function is available under the name
   2457 @code{BESJ0} as a GNU extension.
   2458 
   2459 @item @emph{Standard}:
   2460 Fortran 2008 and later
   2461 
   2462 @item @emph{Class}:
   2463 Elemental function
   2464 
   2465 @item @emph{Syntax}:
   2466 @code{RESULT = BESSEL_J0(X)}
   2467 
   2468 @item @emph{Arguments}:
   2469 @multitable @columnfractions .15 .70
   2470 @item @var{X} @tab The type shall be @code{REAL}.
   2471 @end multitable
   2472 
   2473 @item @emph{Return value}:
   2474 The return value is of type @code{REAL} and lies in the
   2475 range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. It has the same
   2476 kind as @var{X}.
   2477 
   2478 @item @emph{Example}:
   2479 @smallexample
   2480 program test_besj0
   2481   real(8) :: x = 0.0_8
   2482   x = bessel_j0(x)
   2483 end program test_besj0
   2484 @end smallexample
   2485 
   2486 @item @emph{Specific names}:
   2487 @multitable @columnfractions .20 .20 .20 .25
   2488 @item Name            @tab Argument          @tab Return type       @tab Standard
   2489 @item @code{DBESJ0(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}   @tab GNU extension
   2490 @end multitable
   2491 @end table
   2492 
   2493 
   2494 
   2495 @node BESSEL_J1
   2496 @section @code{BESSEL_J1} --- Bessel function of the first kind of order 1
   2497 @fnindex BESSEL_J1
   2498 @fnindex BESJ1
   2499 @fnindex DBESJ1
   2500 @cindex Bessel function, first kind
   2501 
   2502 @table @asis
   2503 @item @emph{Description}:
   2504 @code{BESSEL_J1(X)} computes the Bessel function of the first kind of
   2505 order 1 of @var{X}. This function is available under the name
   2506 @code{BESJ1} as a GNU extension.
   2507 
   2508 @item @emph{Standard}:
   2509 Fortran 2008
   2510 
   2511 @item @emph{Class}:
   2512 Elemental function
   2513 
   2514 @item @emph{Syntax}:
   2515 @code{RESULT = BESSEL_J1(X)}
   2516 
   2517 @item @emph{Arguments}:
   2518 @multitable @columnfractions .15 .70
   2519 @item @var{X} @tab The type shall be @code{REAL}.
   2520 @end multitable
   2521 
   2522 @item @emph{Return value}:
   2523 The return value is of type @code{REAL} and lies in the
   2524 range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. It has the same
   2525 kind as @var{X}.
   2526 
   2527 @item @emph{Example}:
   2528 @smallexample
   2529 program test_besj1
   2530   real(8) :: x = 1.0_8
   2531   x = bessel_j1(x)
   2532 end program test_besj1
   2533 @end smallexample
   2534 
   2535 @item @emph{Specific names}:
   2536 @multitable @columnfractions .20 .20 .20 .25
   2537 @item Name             @tab Argument          @tab Return type       @tab Standard
   2538 @item @code{DBESJ1(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   2539 @end multitable
   2540 @end table
   2541 
   2542 
   2543 
   2544 @node BESSEL_JN
   2545 @section @code{BESSEL_JN} --- Bessel function of the first kind
   2546 @fnindex BESSEL_JN
   2547 @fnindex BESJN
   2548 @fnindex DBESJN
   2549 @cindex Bessel function, first kind
   2550 
   2551 @table @asis
   2552 @item @emph{Description}:
   2553 @code{BESSEL_JN(N, X)} computes the Bessel function of the first kind of
   2554 order @var{N} of @var{X}. This function is available under the name
   2555 @code{BESJN} as a GNU extension.  If @var{N} and @var{X} are arrays,
   2556 their ranks and shapes shall conform.  
   2557 
   2558 @code{BESSEL_JN(N1, N2, X)} returns an array with the Bessel functions
   2559 of the first kind of the orders @var{N1} to @var{N2}.
   2560 
   2561 @item @emph{Standard}:
   2562 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
   2563 
   2564 @item @emph{Class}:
   2565 Elemental function, except for the transformational function
   2566 @code{BESSEL_JN(N1, N2, X)}
   2567 
   2568 @item @emph{Syntax}:
   2569 @multitable @columnfractions .80
   2570 @item @code{RESULT = BESSEL_JN(N, X)}
   2571 @item @code{RESULT = BESSEL_JN(N1, N2, X)}
   2572 @end multitable
   2573 
   2574 @item @emph{Arguments}:
   2575 @multitable @columnfractions .15 .70
   2576 @item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER}.
   2577 @item @var{N1} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2578 @item @var{N2} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2579 @item @var{X} @tab Shall be a scalar or an array of type  @code{REAL};
   2580 for @code{BESSEL_JN(N1, N2, X)} it shall be scalar.
   2581 @end multitable
   2582 
   2583 @item @emph{Return value}:
   2584 The return value is a scalar of type @code{REAL}. It has the same
   2585 kind as @var{X}.
   2586 
   2587 @item @emph{Note}:
   2588 The transformational function uses a recurrence algorithm which might,
   2589 for some values of @var{X}, lead to different results than calls to
   2590 the elemental function.
   2591 
   2592 @item @emph{Example}:
   2593 @smallexample
   2594 program test_besjn
   2595   real(8) :: x = 1.0_8
   2596   x = bessel_jn(5,x)
   2597 end program test_besjn
   2598 @end smallexample
   2599 
   2600 @item @emph{Specific names}:
   2601 @multitable @columnfractions .20 .20 .20 .25
   2602 @item Name                @tab Argument            @tab Return type       @tab Standard
   2603 @item @code{DBESJN(N, X)} @tab @code{INTEGER N}    @tab @code{REAL(8)}    @tab GNU extension
   2604 @item                     @tab @code{REAL(8) X}    @tab                   @tab
   2605 @end multitable
   2606 @end table
   2607 
   2608 
   2609 
   2610 @node BESSEL_Y0
   2611 @section @code{BESSEL_Y0} --- Bessel function of the second kind of order 0
   2612 @fnindex BESSEL_Y0
   2613 @fnindex BESY0
   2614 @fnindex DBESY0
   2615 @cindex Bessel function, second kind
   2616 
   2617 @table @asis
   2618 @item @emph{Description}:
   2619 @code{BESSEL_Y0(X)} computes the Bessel function of the second kind of
   2620 order 0 of @var{X}. This function is available under the name
   2621 @code{BESY0} as a GNU extension.
   2622 
   2623 @item @emph{Standard}:
   2624 Fortran 2008 and later
   2625 
   2626 @item @emph{Class}:
   2627 Elemental function
   2628 
   2629 @item @emph{Syntax}:
   2630 @code{RESULT = BESSEL_Y0(X)}
   2631 
   2632 @item @emph{Arguments}:
   2633 @multitable @columnfractions .15 .70
   2634 @item @var{X} @tab The type shall be @code{REAL}.
   2635 @end multitable
   2636 
   2637 @item @emph{Return value}:
   2638 The return value is of type @code{REAL}. It has the same kind as @var{X}.
   2639 
   2640 @item @emph{Example}:
   2641 @smallexample
   2642 program test_besy0
   2643   real(8) :: x = 0.0_8
   2644   x = bessel_y0(x)
   2645 end program test_besy0
   2646 @end smallexample
   2647 
   2648 @item @emph{Specific names}:
   2649 @multitable @columnfractions .20 .20 .20 .25
   2650 @item Name            @tab Argument          @tab Return type       @tab Standard
   2651 @item @code{DBESY0(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   2652 @end multitable
   2653 @end table
   2654 
   2655 
   2656 
   2657 @node BESSEL_Y1
   2658 @section @code{BESSEL_Y1} --- Bessel function of the second kind of order 1
   2659 @fnindex BESSEL_Y1
   2660 @fnindex BESY1
   2661 @fnindex DBESY1
   2662 @cindex Bessel function, second kind
   2663 
   2664 @table @asis
   2665 @item @emph{Description}:
   2666 @code{BESSEL_Y1(X)} computes the Bessel function of the second kind of
   2667 order 1 of @var{X}. This function is available under the name
   2668 @code{BESY1} as a GNU extension.
   2669 
   2670 @item @emph{Standard}:
   2671 Fortran 2008 and later
   2672 
   2673 @item @emph{Class}:
   2674 Elemental function
   2675 
   2676 @item @emph{Syntax}:
   2677 @code{RESULT = BESSEL_Y1(X)}
   2678 
   2679 @item @emph{Arguments}:
   2680 @multitable @columnfractions .15 .70
   2681 @item @var{X} @tab The type shall be @code{REAL}.
   2682 @end multitable
   2683 
   2684 @item @emph{Return value}:
   2685 The return value is of type @code{REAL}. It has the same kind as @var{X}.
   2686 
   2687 @item @emph{Example}:
   2688 @smallexample
   2689 program test_besy1
   2690   real(8) :: x = 1.0_8
   2691   x = bessel_y1(x)
   2692 end program test_besy1
   2693 @end smallexample
   2694 
   2695 @item @emph{Specific names}:
   2696 @multitable @columnfractions .20 .20 .20 .25
   2697 @item Name            @tab Argument          @tab Return type       @tab Standard
   2698 @item @code{DBESY1(X)}@tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   2699 @end multitable
   2700 @end table
   2701 
   2702 
   2703 
   2704 @node BESSEL_YN
   2705 @section @code{BESSEL_YN} --- Bessel function of the second kind
   2706 @fnindex BESSEL_YN
   2707 @fnindex BESYN
   2708 @fnindex DBESYN
   2709 @cindex Bessel function, second kind
   2710 
   2711 @table @asis
   2712 @item @emph{Description}:
   2713 @code{BESSEL_YN(N, X)} computes the Bessel function of the second kind of
   2714 order @var{N} of @var{X}. This function is available under the name
   2715 @code{BESYN} as a GNU extension.  If @var{N} and @var{X} are arrays,
   2716 their ranks and shapes shall conform.  
   2717 
   2718 @code{BESSEL_YN(N1, N2, X)} returns an array with the Bessel functions
   2719 of the first kind of the orders @var{N1} to @var{N2}.
   2720 
   2721 @item @emph{Standard}:
   2722 Fortran 2008 and later, negative @var{N} is allowed as GNU extension
   2723 
   2724 @item @emph{Class}:
   2725 Elemental function, except for the transformational function
   2726 @code{BESSEL_YN(N1, N2, X)}
   2727 
   2728 @item @emph{Syntax}:
   2729 @multitable @columnfractions .80
   2730 @item @code{RESULT = BESSEL_YN(N, X)}
   2731 @item @code{RESULT = BESSEL_YN(N1, N2, X)}
   2732 @end multitable
   2733 
   2734 @item @emph{Arguments}:
   2735 @multitable @columnfractions .15 .70
   2736 @item @var{N} @tab Shall be a scalar or an array of type  @code{INTEGER} .
   2737 @item @var{N1} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2738 @item @var{N2} @tab Shall be a non-negative scalar of type  @code{INTEGER}.
   2739 @item @var{X} @tab Shall be a scalar or an array of type  @code{REAL};
   2740 for @code{BESSEL_YN(N1, N2, X)} it shall be scalar.
   2741 @end multitable
   2742 
   2743 @item @emph{Return value}:
   2744 The return value is a scalar of type @code{REAL}. It has the same
   2745 kind as @var{X}.
   2746 
   2747 @item @emph{Note}:
   2748 The transformational function uses a recurrence algorithm which might,
   2749 for some values of @var{X}, lead to different results than calls to
   2750 the elemental function.
   2751 
   2752 @item @emph{Example}:
   2753 @smallexample
   2754 program test_besyn
   2755   real(8) :: x = 1.0_8
   2756   x = bessel_yn(5,x)
   2757 end program test_besyn
   2758 @end smallexample
   2759 
   2760 @item @emph{Specific names}:
   2761 @multitable @columnfractions .20 .20 .20 .25
   2762 @item Name               @tab Argument            @tab Return type     @tab Standard
   2763 @item @code{DBESYN(N,X)} @tab @code{INTEGER N} @tab @code{REAL(8)}  @tab GNU extension
   2764 @item                    @tab @code{REAL(8) X} @tab                 @tab 
   2765 @end multitable
   2766 @end table
   2767 
   2768 
   2769 
   2770 @node BGE
   2771 @section @code{BGE} --- Bitwise greater than or equal to
   2772 @fnindex BGE
   2773 @cindex bitwise comparison
   2774 
   2775 @table @asis
   2776 @item @emph{Description}:
   2777 Determines whether an integral is a bitwise greater than or equal to
   2778 another.
   2779 
   2780 @item @emph{Standard}:
   2781 Fortran 2008 and later
   2782 
   2783 @item @emph{Class}:
   2784 Elemental function
   2785 
   2786 @item @emph{Syntax}:
   2787 @code{RESULT = BGE(I, J)}
   2788 
   2789 @item @emph{Arguments}:
   2790 @multitable @columnfractions .15 .70
   2791 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2792 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2793 as @var{I}.
   2794 @end multitable
   2795 
   2796 @item @emph{Return value}:
   2797 The return value is of type @code{LOGICAL} and of the default kind.
   2798 
   2799 @item @emph{See also}:
   2800 @ref{BGT}, @ref{BLE}, @ref{BLT}
   2801 @end table
   2802 
   2803 
   2804 
   2805 @node BGT
   2806 @section @code{BGT} --- Bitwise greater than
   2807 @fnindex BGT
   2808 @cindex bitwise comparison
   2809 
   2810 @table @asis
   2811 @item @emph{Description}:
   2812 Determines whether an integral is a bitwise greater than another.
   2813 
   2814 @item @emph{Standard}:
   2815 Fortran 2008 and later
   2816 
   2817 @item @emph{Class}:
   2818 Elemental function
   2819 
   2820 @item @emph{Syntax}:
   2821 @code{RESULT = BGT(I, J)}
   2822 
   2823 @item @emph{Arguments}:
   2824 @multitable @columnfractions .15 .70
   2825 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2826 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2827 as @var{I}.
   2828 @end multitable
   2829 
   2830 @item @emph{Return value}:
   2831 The return value is of type @code{LOGICAL} and of the default kind.
   2832 
   2833 @item @emph{See also}:
   2834 @ref{BGE}, @ref{BLE}, @ref{BLT}
   2835 @end table
   2836 
   2837 
   2838 
   2839 @node BIT_SIZE
   2840 @section @code{BIT_SIZE} --- Bit size inquiry function
   2841 @fnindex BIT_SIZE
   2842 @cindex bits, number of
   2843 @cindex size of a variable, in bits
   2844 
   2845 @table @asis
   2846 @item @emph{Description}:
   2847 @code{BIT_SIZE(I)} returns the number of bits (integer precision plus sign bit)
   2848 represented by the type of @var{I}.  The result of @code{BIT_SIZE(I)} is
   2849 independent of the actual value of @var{I}.
   2850 
   2851 @item @emph{Standard}:
   2852 Fortran 95 and later
   2853 
   2854 @item @emph{Class}:
   2855 Inquiry function
   2856 
   2857 @item @emph{Syntax}:
   2858 @code{RESULT = BIT_SIZE(I)}
   2859 
   2860 @item @emph{Arguments}:
   2861 @multitable @columnfractions .15 .70
   2862 @item @var{I} @tab The type shall be @code{INTEGER}.
   2863 @end multitable
   2864 
   2865 @item @emph{Return value}:
   2866 The return value is of type @code{INTEGER}
   2867 
   2868 @item @emph{Example}:
   2869 @smallexample
   2870 program test_bit_size
   2871     integer :: i = 123
   2872     integer :: size
   2873     size = bit_size(i)
   2874     print *, size
   2875 end program test_bit_size
   2876 @end smallexample
   2877 @end table
   2878 
   2879 
   2880 
   2881 @node BLE
   2882 @section @code{BLE} --- Bitwise less than or equal to
   2883 @fnindex BLE
   2884 @cindex bitwise comparison
   2885 
   2886 @table @asis
   2887 @item @emph{Description}:
   2888 Determines whether an integral is a bitwise less than or equal to
   2889 another.
   2890 
   2891 @item @emph{Standard}:
   2892 Fortran 2008 and later
   2893 
   2894 @item @emph{Class}:
   2895 Elemental function
   2896 
   2897 @item @emph{Syntax}:
   2898 @code{RESULT = BLE(I, J)}
   2899 
   2900 @item @emph{Arguments}:
   2901 @multitable @columnfractions .15 .70
   2902 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2903 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2904 as @var{I}.
   2905 @end multitable
   2906 
   2907 @item @emph{Return value}:
   2908 The return value is of type @code{LOGICAL} and of the default kind.
   2909 
   2910 @item @emph{See also}:
   2911 @ref{BGT}, @ref{BGE}, @ref{BLT}
   2912 @end table
   2913 
   2914 
   2915 
   2916 @node BLT
   2917 @section @code{BLT} --- Bitwise less than
   2918 @fnindex BLT
   2919 @cindex bitwise comparison
   2920 
   2921 @table @asis
   2922 @item @emph{Description}:
   2923 Determines whether an integral is a bitwise less than another.
   2924 
   2925 @item @emph{Standard}:
   2926 Fortran 2008 and later
   2927 
   2928 @item @emph{Class}:
   2929 Elemental function
   2930 
   2931 @item @emph{Syntax}:
   2932 @code{RESULT = BLT(I, J)}
   2933 
   2934 @item @emph{Arguments}:
   2935 @multitable @columnfractions .15 .70
   2936 @item @var{I} @tab Shall be of @code{INTEGER} type.
   2937 @item @var{J} @tab Shall be of @code{INTEGER} type, and of the same kind
   2938 as @var{I}.
   2939 @end multitable
   2940 
   2941 @item @emph{Return value}:
   2942 The return value is of type @code{LOGICAL} and of the default kind.
   2943 
   2944 @item @emph{See also}:
   2945 @ref{BGE}, @ref{BGT}, @ref{BLE}
   2946 @end table
   2947 
   2948 
   2949 
   2950 @node BTEST
   2951 @section @code{BTEST} --- Bit test function
   2952 @fnindex BTEST
   2953 @fnindex BBTEST
   2954 @fnindex BITEST
   2955 @fnindex BJTEST
   2956 @fnindex BKTEST
   2957 @cindex bits, testing
   2958 
   2959 @table @asis
   2960 @item @emph{Description}:
   2961 @code{BTEST(I,POS)} returns logical @code{.TRUE.} if the bit at @var{POS}
   2962 in @var{I} is set.  The counting of the bits starts at 0.
   2963 
   2964 @item @emph{Standard}:
   2965 Fortran 95 and later, has overloads that are GNU extensions
   2966 
   2967 @item @emph{Class}:
   2968 Elemental function
   2969 
   2970 @item @emph{Syntax}:
   2971 @code{RESULT = BTEST(I, POS)}
   2972 
   2973 @item @emph{Arguments}:
   2974 @multitable @columnfractions .15 .70
   2975 @item @var{I} @tab The type shall be @code{INTEGER}.
   2976 @item @var{POS} @tab The type shall be @code{INTEGER}.
   2977 @end multitable
   2978 
   2979 @item @emph{Return value}:
   2980 The return value is of type @code{LOGICAL}
   2981 
   2982 @item @emph{Example}:
   2983 @smallexample
   2984 program test_btest
   2985     integer :: i = 32768 + 1024 + 64
   2986     integer :: pos
   2987     logical :: bool
   2988     do pos=0,16
   2989         bool = btest(i, pos) 
   2990         print *, pos, bool
   2991     end do
   2992 end program test_btest
   2993 @end smallexample
   2994 
   2995 @item @emph{Specific names}:
   2996 @multitable @columnfractions .20 .20 .20 .25
   2997 @item Name           @tab Argument         @tab Return type             @tab Standard
   2998 @item @code{BTEST(I,POS)} @tab @code{INTEGER I,POS} @tab @code{LOGICAL} @tab F95 and later
   2999 @item @code{BBTEST(I,POS)} @tab @code{INTEGER(1) I,POS} @tab @code{LOGICAL(1)} @tab GNU extension
   3000 @item @code{BITEST(I,POS)} @tab @code{INTEGER(2) I,POS} @tab @code{LOGICAL(2)} @tab GNU extension
   3001 @item @code{BJTEST(I,POS)} @tab @code{INTEGER(4) I,POS} @tab @code{LOGICAL(4)} @tab GNU extension
   3002 @item @code{BKTEST(I,POS)} @tab @code{INTEGER(8) I,POS} @tab @code{LOGICAL(8)} @tab GNU extension
   3003 @end multitable
   3004 @end table
   3005 
   3006 @node C_ASSOCIATED
   3007 @section @code{C_ASSOCIATED} --- Status of a C pointer
   3008 @fnindex C_ASSOCIATED
   3009 @cindex association status, C pointer
   3010 @cindex pointer, C association status
   3011 
   3012 @table @asis
   3013 @item @emph{Description}:
   3014 @code{C_ASSOCIATED(c_ptr_1[, c_ptr_2])} determines the status of the C pointer
   3015 @var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}.
   3016 
   3017 @item @emph{Standard}:
   3018 Fortran 2003 and later
   3019 
   3020 @item @emph{Class}:
   3021 Inquiry function
   3022 
   3023 @item @emph{Syntax}:
   3024 @code{RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])}
   3025 
   3026 @item @emph{Arguments}:
   3027 @multitable @columnfractions .15 .70
   3028 @item @var{c_ptr_1} @tab Scalar of the type @code{C_PTR} or @code{C_FUNPTR}.
   3029 @item @var{c_ptr_2} @tab (Optional) Scalar of the same type as @var{c_ptr_1}.
   3030 @end multitable
   3031 
   3032 @item @emph{Return value}:
   3033 The return value is of type @code{LOGICAL}; it is @code{.false.} if either
   3034 @var{c_ptr_1} is a C NULL pointer or if @var{c_ptr1} and @var{c_ptr_2}
   3035 point to different addresses.
   3036 
   3037 @item @emph{Example}:
   3038 @smallexample
   3039 subroutine association_test(a,b)
   3040   use iso_c_binding, only: c_associated, c_loc, c_ptr
   3041   implicit none
   3042   real, pointer :: a
   3043   type(c_ptr) :: b
   3044   if(c_associated(b, c_loc(a))) &
   3045      stop 'b and a do not point to same target'
   3046 end subroutine association_test
   3047 @end smallexample
   3048 
   3049 @item @emph{See also}:
   3050 @ref{C_LOC}, @ref{C_FUNLOC}
   3051 @end table
   3052 
   3053 
   3054 @node C_F_POINTER
   3055 @section @code{C_F_POINTER} --- Convert C into Fortran pointer
   3056 @fnindex C_F_POINTER
   3057 @cindex pointer, convert C to Fortran
   3058 
   3059 @table @asis
   3060 @item @emph{Description}:
   3061 @code{C_F_POINTER(CPTR, FPTR[, SHAPE])} assigns the target of the C pointer
   3062 @var{CPTR} to the Fortran pointer @var{FPTR} and specifies its shape.
   3063 
   3064 @item @emph{Standard}:
   3065 Fortran 2003 and later
   3066 
   3067 @item @emph{Class}:
   3068 Subroutine
   3069 
   3070 @item @emph{Syntax}:
   3071 @code{CALL C_F_POINTER(CPTR, FPTR[, SHAPE])}
   3072 
   3073 @item @emph{Arguments}:
   3074 @multitable @columnfractions .15 .70
   3075 @item @var{CPTR}  @tab scalar of the type @code{C_PTR}. It is
   3076 @code{INTENT(IN)}.
   3077 @item @var{FPTR}  @tab pointer interoperable with @var{cptr}. It is
   3078 @code{INTENT(OUT)}.
   3079 @item @var{SHAPE} @tab (Optional) Rank-one array of type @code{INTEGER}
   3080 with @code{INTENT(IN)}. It shall be present
   3081 if and only if @var{fptr} is an array. The size
   3082 must be equal to the rank of @var{fptr}.
   3083 @end multitable
   3084 
   3085 @item @emph{Example}:
   3086 @smallexample
   3087 program main
   3088   use iso_c_binding
   3089   implicit none
   3090   interface
   3091     subroutine my_routine(p) bind(c,name='myC_func')
   3092       import :: c_ptr
   3093       type(c_ptr), intent(out) :: p
   3094     end subroutine
   3095   end interface
   3096   type(c_ptr) :: cptr
   3097   real,pointer :: a(:)
   3098   call my_routine(cptr)
   3099   call c_f_pointer(cptr, a, [12])
   3100 end program main
   3101 @end smallexample
   3102 
   3103 @item @emph{See also}:
   3104 @ref{C_LOC}, @ref{C_F_PROCPOINTER}
   3105 @end table
   3106 
   3107 
   3108 @node C_F_PROCPOINTER
   3109 @section @code{C_F_PROCPOINTER} --- Convert C into Fortran procedure pointer
   3110 @fnindex C_F_PROCPOINTER
   3111 @cindex pointer, C address of pointers
   3112 
   3113 @table @asis
   3114 @item @emph{Description}:
   3115 @code{C_F_PROCPOINTER(CPTR, FPTR)} Assign the target of the C function pointer
   3116 @var{CPTR} to the Fortran procedure pointer @var{FPTR}.
   3117 
   3118 @item @emph{Standard}:
   3119 Fortran 2003 and later
   3120 
   3121 @item @emph{Class}:
   3122 Subroutine
   3123 
   3124 @item @emph{Syntax}:
   3125 @code{CALL C_F_PROCPOINTER(cptr, fptr)}
   3126 
   3127 @item @emph{Arguments}:
   3128 @multitable @columnfractions .15 .70
   3129 @item @var{CPTR}  @tab scalar of the type @code{C_FUNPTR}. It is
   3130 @code{INTENT(IN)}.
   3131 @item @var{FPTR}  @tab procedure pointer interoperable with @var{cptr}. It is
   3132 @code{INTENT(OUT)}.
   3133 @end multitable
   3134 
   3135 @item @emph{Example}:
   3136 @smallexample
   3137 program main
   3138   use iso_c_binding
   3139   implicit none
   3140   abstract interface
   3141     function func(a)
   3142       import :: c_float
   3143       real(c_float), intent(in) :: a
   3144       real(c_float) :: func
   3145     end function
   3146   end interface
   3147   interface
   3148      function getIterFunc() bind(c,name="getIterFunc")
   3149        import :: c_funptr
   3150        type(c_funptr) :: getIterFunc
   3151      end function
   3152   end interface
   3153   type(c_funptr) :: cfunptr
   3154   procedure(func), pointer :: myFunc
   3155   cfunptr = getIterFunc()
   3156   call c_f_procpointer(cfunptr, myFunc)
   3157 end program main
   3158 @end smallexample
   3159 
   3160 @item @emph{See also}:
   3161 @ref{C_LOC}, @ref{C_F_POINTER}
   3162 @end table
   3163 
   3164 
   3165 @node C_FUNLOC
   3166 @section @code{C_FUNLOC} --- Obtain the C address of a procedure
   3167 @fnindex C_FUNLOC
   3168 @cindex pointer, C address of procedures
   3169 
   3170 @table @asis
   3171 @item @emph{Description}:
   3172 @code{C_FUNLOC(x)} determines the C address of the argument.
   3173 
   3174 @item @emph{Standard}:
   3175 Fortran 2003 and later
   3176 
   3177 @item @emph{Class}:
   3178 Inquiry function
   3179 
   3180 @item @emph{Syntax}:
   3181 @code{RESULT = C_FUNLOC(x)}
   3182 
   3183 @item @emph{Arguments}:
   3184 @multitable @columnfractions .15 .70
   3185 @item @var{x} @tab Interoperable function or pointer to such function.
   3186 @end multitable
   3187 
   3188 @item @emph{Return value}:
   3189 The return value is of type @code{C_FUNPTR} and contains the C address
   3190 of the argument.
   3191 
   3192 @item @emph{Example}:
   3193 @smallexample
   3194 module x
   3195   use iso_c_binding
   3196   implicit none
   3197 contains
   3198   subroutine sub(a) bind(c)
   3199     real(c_float) :: a
   3200     a = sqrt(a)+5.0
   3201   end subroutine sub
   3202 end module x
   3203 program main
   3204   use iso_c_binding
   3205   use x
   3206   implicit none
   3207   interface
   3208     subroutine my_routine(p) bind(c,name='myC_func')
   3209       import :: c_funptr
   3210       type(c_funptr), intent(in) :: p
   3211     end subroutine
   3212   end interface
   3213   call my_routine(c_funloc(sub))
   3214 end program main
   3215 @end smallexample
   3216 
   3217 @item @emph{See also}:
   3218 @ref{C_ASSOCIATED}, @ref{C_LOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
   3219 @end table
   3220 
   3221 
   3222 @node C_LOC
   3223 @section @code{C_LOC} --- Obtain the C address of an object
   3224 @fnindex C_LOC
   3225 @cindex procedure pointer, convert C to Fortran
   3226 
   3227 @table @asis
   3228 @item @emph{Description}:
   3229 @code{C_LOC(X)} determines the C address of the argument.
   3230 
   3231 @item @emph{Standard}:
   3232 Fortran 2003 and later
   3233 
   3234 @item @emph{Class}:
   3235 Inquiry function
   3236 
   3237 @item @emph{Syntax}:
   3238 @code{RESULT = C_LOC(X)}
   3239 
   3240 @item @emph{Arguments}:
   3241 @multitable @columnfractions .10 .75
   3242 @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.
   3243 
   3244 @end multitable
   3245 
   3246 @item @emph{Return value}:
   3247 The return value is of type @code{C_PTR} and contains the C address
   3248 of the argument.
   3249 
   3250 @item @emph{Example}:
   3251 @smallexample
   3252 subroutine association_test(a,b)
   3253   use iso_c_binding, only: c_associated, c_loc, c_ptr
   3254   implicit none
   3255   real, pointer :: a
   3256   type(c_ptr) :: b
   3257   if(c_associated(b, c_loc(a))) &
   3258      stop 'b and a do not point to same target'
   3259 end subroutine association_test
   3260 @end smallexample
   3261 
   3262 @item @emph{See also}:
   3263 @ref{C_ASSOCIATED}, @ref{C_FUNLOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER}
   3264 @end table
   3265 
   3266 
   3267 @node C_SIZEOF
   3268 @section @code{C_SIZEOF} --- Size in bytes of an expression
   3269 @fnindex C_SIZEOF
   3270 @cindex expression size
   3271 @cindex size of an expression
   3272 
   3273 @table @asis
   3274 @item @emph{Description}:
   3275 @code{C_SIZEOF(X)} calculates the number of bytes of storage the
   3276 expression @code{X} occupies.
   3277 
   3278 @item @emph{Standard}:
   3279 Fortran 2008
   3280 
   3281 @item @emph{Class}:
   3282 Inquiry function of the module @code{ISO_C_BINDING}
   3283 
   3284 @item @emph{Syntax}:
   3285 @code{N = C_SIZEOF(X)}
   3286 
   3287 @item @emph{Arguments}:
   3288 @multitable @columnfractions .15 .70
   3289 @item @var{X} @tab The argument shall be an interoperable data entity.
   3290 @end multitable
   3291 
   3292 @item @emph{Return value}:
   3293 The return value is of type integer and of the system-dependent kind
   3294 @code{C_SIZE_T} (from the @code{ISO_C_BINDING} module). Its value is the
   3295 number of bytes occupied by the argument.  If the argument has the
   3296 @code{POINTER} attribute, the number of bytes of the storage area pointed
   3297 to is returned.  If the argument is of a derived type with @code{POINTER}
   3298 or @code{ALLOCATABLE} components, the return value does not account for
   3299 the sizes of the data pointed to by these components.
   3300 
   3301 @item @emph{Example}:
   3302 @smallexample
   3303    use iso_c_binding
   3304    integer(c_int) :: i
   3305    real(c_float) :: r, s(5)
   3306    print *, (c_sizeof(s)/c_sizeof(r) == 5)
   3307    end
   3308 @end smallexample
   3309 The example will print @code{.TRUE.} unless you are using a platform
   3310 where default @code{REAL} variables are unusually padded.
   3311 
   3312 @item @emph{See also}:
   3313 @ref{SIZEOF}, @ref{STORAGE_SIZE}
   3314 @end table
   3315 
   3316 
   3317 @node CEILING
   3318 @section @code{CEILING} --- Integer ceiling function
   3319 @fnindex CEILING
   3320 @cindex ceiling
   3321 @cindex rounding, ceiling
   3322 
   3323 @table @asis
   3324 @item @emph{Description}:
   3325 @code{CEILING(A)} returns the least integer greater than or equal to @var{A}.
   3326 
   3327 @item @emph{Standard}:
   3328 Fortran 95 and later
   3329 
   3330 @item @emph{Class}:
   3331 Elemental function
   3332 
   3333 @item @emph{Syntax}:
   3334 @code{RESULT = CEILING(A [, KIND])}
   3335 
   3336 @item @emph{Arguments}:
   3337 @multitable @columnfractions .15 .70
   3338 @item @var{A} @tab The type shall be @code{REAL}.
   3339 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   3340 expression indicating the kind parameter of the result.
   3341 @end multitable
   3342 
   3343 @item @emph{Return value}:
   3344 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
   3345 and a default-kind @code{INTEGER} otherwise.
   3346 
   3347 @item @emph{Example}:
   3348 @smallexample
   3349 program test_ceiling
   3350     real :: x = 63.29
   3351     real :: y = -63.59
   3352     print *, ceiling(x) ! returns 64
   3353     print *, ceiling(y) ! returns -63
   3354 end program test_ceiling
   3355 @end smallexample
   3356 
   3357 @item @emph{See also}:
   3358 @ref{FLOOR}, @ref{NINT}
   3359 
   3360 @end table
   3361 
   3362 
   3363 
   3364 @node CHAR
   3365 @section @code{CHAR} --- Character conversion function
   3366 @fnindex CHAR
   3367 @cindex conversion, to character
   3368 
   3369 @table @asis
   3370 @item @emph{Description}:
   3371 @code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}.
   3372 
   3373 @item @emph{Standard}:
   3374 Fortran 77 and later
   3375 
   3376 @item @emph{Class}:
   3377 Elemental function
   3378 
   3379 @item @emph{Syntax}:
   3380 @code{RESULT = CHAR(I [, KIND])}
   3381 
   3382 @item @emph{Arguments}:
   3383 @multitable @columnfractions .15 .70
   3384 @item @var{I} @tab The type shall be @code{INTEGER}.
   3385 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   3386 expression indicating the kind parameter of the result.
   3387 @end multitable
   3388 
   3389 @item @emph{Return value}:
   3390 The return value is of type @code{CHARACTER(1)}
   3391 
   3392 @item @emph{Example}:
   3393 @smallexample
   3394 program test_char
   3395     integer :: i = 74
   3396     character(1) :: c
   3397     c = char(i)
   3398     print *, i, c ! returns 'J'
   3399 end program test_char
   3400 @end smallexample
   3401 
   3402 @item @emph{Specific names}:
   3403 @multitable @columnfractions .20 .20 .20 .25
   3404 @item Name           @tab Argument         @tab Return type             @tab Standard
   3405 @item @code{CHAR(I)} @tab @code{INTEGER I} @tab @code{CHARACTER(LEN=1)} @tab F77 and later
   3406 @end multitable
   3407 
   3408 @item @emph{Note}:
   3409 See @ref{ICHAR} for a discussion of converting between numerical values
   3410 and formatted string representations.
   3411 
   3412 @item @emph{See also}:
   3413 @ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR}
   3414 
   3415 @end table
   3416 
   3417 
   3418 
   3419 @node CHDIR
   3420 @section @code{CHDIR} --- Change working directory
   3421 @fnindex CHDIR
   3422 @cindex system, working directory
   3423 
   3424 @table @asis
   3425 @item @emph{Description}:
   3426 Change current working directory to a specified path.
   3427 
   3428 This intrinsic is provided in both subroutine and function forms; however,
   3429 only one form can be used in any given program unit.
   3430 
   3431 @item @emph{Standard}:
   3432 GNU extension
   3433 
   3434 @item @emph{Class}:
   3435 Subroutine, function
   3436 
   3437 @item @emph{Syntax}:
   3438 @multitable @columnfractions .80
   3439 @item @code{CALL CHDIR(NAME [, STATUS])}
   3440 @item @code{STATUS = CHDIR(NAME)}
   3441 @end multitable
   3442 
   3443 @item @emph{Arguments}:
   3444 @multitable @columnfractions .15 .70
   3445 @item @var{NAME}   @tab The type shall be @code{CHARACTER} of default
   3446 kind and shall specify a valid path within the file system.
   3447 @item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default
   3448 kind.  Returns 0 on success, and a system specific and nonzero error code
   3449 otherwise.
   3450 @end multitable
   3451 
   3452 @item @emph{Example}:
   3453 @smallexample
   3454 PROGRAM test_chdir
   3455   CHARACTER(len=255) :: path
   3456   CALL getcwd(path)
   3457   WRITE(*,*) TRIM(path)
   3458   CALL chdir("/tmp")
   3459   CALL getcwd(path)
   3460   WRITE(*,*) TRIM(path)
   3461 END PROGRAM
   3462 @end smallexample
   3463 
   3464 @item @emph{See also}:
   3465 @ref{GETCWD}
   3466 @end table
   3467 
   3468 
   3469 
   3470 @node CHMOD
   3471 @section @code{CHMOD} --- Change access permissions of files
   3472 @fnindex CHMOD
   3473 @cindex file system, change access mode
   3474 
   3475 @table @asis
   3476 @item @emph{Description}:
   3477 @code{CHMOD} changes the permissions of a file.
   3478 
   3479 This intrinsic is provided in both subroutine and function forms; however,
   3480 only one form can be used in any given program unit.
   3481 
   3482 @item @emph{Standard}:
   3483 GNU extension
   3484 
   3485 @item @emph{Class}:
   3486 Subroutine, function
   3487 
   3488 @item @emph{Syntax}:
   3489 @multitable @columnfractions .80
   3490 @item @code{CALL CHMOD(NAME, MODE[, STATUS])}
   3491 @item @code{STATUS = CHMOD(NAME, MODE)}
   3492 @end multitable
   3493 
   3494 @item @emph{Arguments}:
   3495 @multitable @columnfractions .15 .70
   3496 
   3497 @item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the
   3498 file name. Trailing blanks are ignored unless the character
   3499 @code{achar(0)} is present, then all characters up to and excluding
   3500 @code{achar(0)} are used as the file name.
   3501 
   3502 @item @var{MODE} @tab Scalar @code{CHARACTER} of default kind giving the
   3503 file permission. @var{MODE} uses the same syntax as the @code{chmod} utility
   3504 as defined by the POSIX standard. The argument shall either be a string of
   3505 a nonnegative octal number or a symbolic mode.
   3506 
   3507 @item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is
   3508 @code{0} on success and nonzero otherwise.
   3509 @end multitable
   3510 
   3511 @item @emph{Return value}:
   3512 In either syntax, @var{STATUS} is set to @code{0} on success and nonzero
   3513 otherwise.
   3514 
   3515 @item @emph{Example}:
   3516 @code{CHMOD} as subroutine
   3517 @smallexample
   3518 program chmod_test
   3519   implicit none
   3520   integer :: status
   3521   call chmod('test.dat','u+x',status)
   3522   print *, 'Status: ', status
   3523 end program chmod_test
   3524 @end smallexample
   3525 @code{CHMOD} as function:
   3526 @smallexample
   3527 program chmod_test
   3528   implicit none
   3529   integer :: status
   3530   status = chmod('test.dat','u+x')
   3531   print *, 'Status: ', status
   3532 end program chmod_test
   3533 @end smallexample
   3534 
   3535 @end table
   3536 
   3537 
   3538 
   3539 @node CMPLX
   3540 @section @code{CMPLX} --- Complex conversion function
   3541 @fnindex CMPLX
   3542 @cindex complex numbers, conversion to
   3543 @cindex conversion, to complex
   3544 
   3545 @table @asis
   3546 @item @emph{Description}:
   3547 @code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to
   3548 the real component.  If @var{Y} is present it is converted to the imaginary
   3549 component.  If @var{Y} is not present then the imaginary component is set to
   3550 0.0.  If @var{X} is complex then @var{Y} must not be present.
   3551 
   3552 @item @emph{Standard}:
   3553 Fortran 77 and later
   3554 
   3555 @item @emph{Class}:
   3556 Elemental function
   3557 
   3558 @item @emph{Syntax}:
   3559 @code{RESULT = CMPLX(X [, Y [, KIND]])}
   3560 
   3561 @item @emph{Arguments}:
   3562 @multitable @columnfractions .15 .70
   3563 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
   3564 or @code{COMPLEX}.
   3565 @item @var{Y} @tab (Optional; only allowed if @var{X} is not
   3566 @code{COMPLEX}.)  May be @code{INTEGER} or @code{REAL}.
   3567 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   3568 expression indicating the kind parameter of the result.
   3569 @end multitable
   3570 
   3571 @item @emph{Return value}:
   3572 The return value is of @code{COMPLEX} type, with a kind equal to
   3573 @var{KIND} if it is specified.  If @var{KIND} is not specified, the
   3574 result is of the default @code{COMPLEX} kind, regardless of the kinds of
   3575 @var{X} and @var{Y}. 
   3576 
   3577 @item @emph{Example}:
   3578 @smallexample
   3579 program test_cmplx
   3580     integer :: i = 42
   3581     real :: x = 3.14
   3582     complex :: z
   3583     z = cmplx(i, x)
   3584     print *, z, cmplx(x)
   3585 end program test_cmplx
   3586 @end smallexample
   3587 
   3588 @item @emph{See also}:
   3589 @ref{COMPLEX}
   3590 @end table
   3591 
   3592 
   3593 
   3594 @node CO_BROADCAST
   3595 @section @code{CO_BROADCAST} --- Copy a value to all images the current set of images
   3596 @fnindex CO_BROADCAST
   3597 @cindex Collectives, value broadcasting
   3598 
   3599 @table @asis
   3600 @item @emph{Description}:
   3601 @code{CO_BROADCAST} copies the value of argument @var{A} on the image with
   3602 image index @code{SOURCE_IMAGE} to all images in the current team.  @var{A}
   3603 becomes defined as if by intrinsic assignment.  If the execution was
   3604 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3605 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3606 @var{ERRMSG} gets assigned a value describing the occurred error.
   3607 
   3608 @item @emph{Standard}:
   3609 Technical Specification (TS) 18508 or later
   3610 
   3611 @item @emph{Class}:
   3612 Collective subroutine
   3613 
   3614 @item @emph{Syntax}:
   3615 @code{CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])}
   3616 
   3617 @item @emph{Arguments}:
   3618 @multitable @columnfractions .15 .70
   3619 @item @var{A}            @tab INTENT(INOUT) argument; shall have the same
   3620 dynamic type and type paramters on all images of the current team. If it
   3621 is an array, it shall have the same shape on all images.
   3622 @item @var{SOURCE_IMAGE} @tab a scalar integer expression.
   3623 It shall have the same the same value on all images and refer to an
   3624 image of the current team.
   3625 @item @var{STAT}         @tab (optional) a scalar integer variable
   3626 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3627 @end multitable
   3628 
   3629 @item @emph{Example}:
   3630 @smallexample
   3631 program test
   3632   integer :: val(3)
   3633   if (this_image() == 1) then
   3634     val = [1, 5, 3]
   3635   end if
   3636   call co_broadcast (val, source_image=1)
   3637   print *, this_image, ":", val
   3638 end program test
   3639 @end smallexample
   3640 
   3641 @item @emph{See also}:
   3642 @ref{CO_MAX}, @ref{CO_MIN}, @ref{CO_SUM}, @ref{CO_REDUCE}
   3643 @end table
   3644 
   3645 
   3646 
   3647 @node CO_MAX
   3648 @section @code{CO_MAX} --- Maximal value on the current set of images
   3649 @fnindex CO_MAX
   3650 @cindex Collectives, maximal value
   3651 
   3652 @table @asis
   3653 @item @emph{Description}:
   3654 @code{CO_MAX} determines element-wise the maximal value of @var{A} on all
   3655 images of the current team.  If @var{RESULT_IMAGE} is present, the maximum
   3656 values are returned in @var{A} on the specified image only and the value
   3657 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
   3658 not present, the value is returned on all images.  If the execution was
   3659 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3660 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3661 @var{ERRMSG} gets assigned a value describing the occurred error.
   3662 
   3663 @item @emph{Standard}:
   3664 Technical Specification (TS) 18508 or later
   3665 
   3666 @item @emph{Class}:
   3667 Collective subroutine
   3668 
   3669 @item @emph{Syntax}:
   3670 @code{CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])}
   3671 
   3672 @item @emph{Arguments}:
   3673 @multitable @columnfractions .15 .70
   3674 @item @var{A}            @tab shall be an integer, real or character variable,
   3675 which has the same type and type parameters on all images of the team.
   3676 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3677 present, it shall have the same the same value on all images and refer to an
   3678 image of the current team.
   3679 @item @var{STAT}         @tab (optional) a scalar integer variable
   3680 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3681 @end multitable
   3682 
   3683 @item @emph{Example}:
   3684 @smallexample
   3685 program test
   3686   integer :: val
   3687   val = this_image ()
   3688   call co_max (val, result_image=1)
   3689   if (this_image() == 1) then
   3690     write(*,*) "Maximal value", val  ! prints num_images()
   3691   end if
   3692 end program test
   3693 @end smallexample
   3694 
   3695 @item @emph{See also}:
   3696 @ref{CO_MIN}, @ref{CO_SUM}, @ref{CO_REDUCE}, @ref{CO_BROADCAST}
   3697 @end table
   3698 
   3699 
   3700 
   3701 @node CO_MIN
   3702 @section @code{CO_MIN} --- Minimal value on the current set of images
   3703 @fnindex CO_MIN
   3704 @cindex Collectives, minimal value
   3705 
   3706 @table @asis
   3707 @item @emph{Description}:
   3708 @code{CO_MIN} determines element-wise the minimal value of @var{A} on all
   3709 images of the current team.  If @var{RESULT_IMAGE} is present, the minimal
   3710 values are returned in @var{A} on the specified image only and the value
   3711 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
   3712 not present, the value is returned on all images.  If the execution was
   3713 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3714 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3715 @var{ERRMSG} gets assigned a value describing the occurred error.
   3716 
   3717 @item @emph{Standard}:
   3718 Technical Specification (TS) 18508 or later
   3719 
   3720 @item @emph{Class}:
   3721 Collective subroutine
   3722 
   3723 @item @emph{Syntax}:
   3724 @code{CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])}
   3725 
   3726 @item @emph{Arguments}:
   3727 @multitable @columnfractions .15 .70
   3728 @item @var{A}            @tab shall be an integer, real or character variable,
   3729 which has the same type and type parameters on all images of the team.
   3730 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3731 present, it shall have the same the same value on all images and refer to an
   3732 image of the current team.
   3733 @item @var{STAT}         @tab (optional) a scalar integer variable
   3734 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3735 @end multitable
   3736 
   3737 @item @emph{Example}:
   3738 @smallexample
   3739 program test
   3740   integer :: val
   3741   val = this_image ()
   3742   call co_min (val, result_image=1)
   3743   if (this_image() == 1) then
   3744     write(*,*) "Minimal value", val  ! prints 1
   3745   end if
   3746 end program test
   3747 @end smallexample
   3748 
   3749 @item @emph{See also}:
   3750 @ref{CO_MAX}, @ref{CO_SUM}, @ref{CO_REDUCE}, @ref{CO_BROADCAST}
   3751 @end table
   3752 
   3753 
   3754 
   3755 @node CO_REDUCE
   3756 @section @code{CO_REDUCE} --- Reduction of values on the current set of images
   3757 @fnindex CO_REDUCE
   3758 @cindex Collectives, generic reduction
   3759 
   3760 @table @asis
   3761 @item @emph{Description}:
   3762 @code{CO_REDUCE} determines element-wise the reduction of the value of @var{A}
   3763 on all images of the current team.  The pure function passed as @var{OPERATOR}
   3764 is used to pairwise reduce the values of @var{A} by passing either the value
   3765 of @var{A} of different images or the result values of such a reduction as
   3766 argument.  If @var{A} is an array, the deduction is done element wise. If
   3767 @var{RESULT_IMAGE} is present, the result values are returned in @var{A} on
   3768 the specified image only and the value of @var{A} on the other images become
   3769 undefined.  If @var{RESULT_IMAGE} is not present, the value is returned on all
   3770 images.  If the execution was successful and @var{STAT} is present, it is
   3771 assigned the value zero.  If the execution failed, @var{STAT} gets assigned
   3772 a nonzero value and, if present, @var{ERRMSG} gets assigned a value describing
   3773 the occurred error.
   3774 
   3775 @item @emph{Standard}:
   3776 Technical Specification (TS) 18508 or later
   3777 
   3778 @item @emph{Class}:
   3779 Collective subroutine
   3780 
   3781 @item @emph{Syntax}:
   3782 @code{CALL CO_REDUCE(A, OPERATOR, [, RESULT_IMAGE, STAT, ERRMSG])}
   3783 
   3784 @item @emph{Arguments}:
   3785 @multitable @columnfractions .15 .70
   3786 @item @var{A}            @tab is an @code{INTENT(INOUT)} argument and shall be
   3787 nonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer,
   3788 it shall be associated.  @var{A} shall have the same type and type parameters on
   3789 all images of the team; if it is an array, it shall have the same shape on all
   3790 images.
   3791 @item @var{OPERATOR}     @tab pure function with two scalar nonallocatable
   3792 arguments, which shall be nonpolymorphic and have the same type and type
   3793 parameters as @var{A}.  The function shall return a nonallocatable scalar of
   3794 the same type and type parameters as @var{A}.  The function shall be the same on
   3795 all images and with regards to the arguments mathematically commutative and
   3796 associative.  Note that @var{OPERATOR} may not be an elemental function, unless
   3797 it is an intrisic function.
   3798 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3799 present, it shall have the same the same value on all images and refer to an
   3800 image of the current team.
   3801 @item @var{STAT}         @tab (optional) a scalar integer variable
   3802 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3803 @end multitable
   3804 
   3805 @item @emph{Example}:
   3806 @smallexample
   3807 program test
   3808   integer :: val
   3809   val = this_image ()
   3810   call co_reduce (val, result_image=1, operator=myprod)
   3811   if (this_image() == 1) then
   3812     write(*,*) "Product value", val  ! prints num_images() factorial
   3813   end if
   3814 contains
   3815   pure function myprod(a, b)
   3816     integer, value :: a, b
   3817     integer :: myprod
   3818     myprod = a * b
   3819   end function myprod
   3820 end program test
   3821 @end smallexample
   3822 
   3823 @item @emph{Note}:
   3824 While the rules permit in principle an intrinsic function, none of the
   3825 intrinsics in the standard fulfill the criteria of having a specific
   3826 function, which takes two arguments of the same type and returning that
   3827 type as result.
   3828 
   3829 @item @emph{See also}:
   3830 @ref{CO_MIN}, @ref{CO_MAX}, @ref{CO_SUM}, @ref{CO_BROADCAST}
   3831 @end table
   3832 
   3833 
   3834 
   3835 @node CO_SUM
   3836 @section @code{CO_SUM} --- Sum of values on the current set of images
   3837 @fnindex CO_SUM
   3838 @cindex Collectives, sum of values
   3839 
   3840 @table @asis
   3841 @item @emph{Description}:
   3842 @code{CO_SUM} sums up the values of each element of @var{A} on all
   3843 images of the current team.  If @var{RESULT_IMAGE} is present, the summed-up
   3844 values are returned in @var{A} on the specified image only and the value
   3845 of @var{A} on the other images become undefined.  If @var{RESULT_IMAGE} is
   3846 not present, the value is returned on all images.  If the execution was
   3847 successful and @var{STAT} is present, it is assigned the value zero.  If the
   3848 execution failed, @var{STAT} gets assigned a nonzero value and, if present,
   3849 @var{ERRMSG} gets assigned a value describing the occurred error.
   3850 
   3851 @item @emph{Standard}:
   3852 Technical Specification (TS) 18508 or later
   3853 
   3854 @item @emph{Class}:
   3855 Collective subroutine
   3856 
   3857 @item @emph{Syntax}:
   3858 @code{CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])}
   3859 
   3860 @item @emph{Arguments}:
   3861 @multitable @columnfractions .15 .70
   3862 @item @var{A}            @tab shall be an integer, real or complex variable,
   3863 which has the same type and type parameters on all images of the team.
   3864 @item @var{RESULT_IMAGE} @tab (optional) a scalar integer expression; if
   3865 present, it shall have the same the same value on all images and refer to an
   3866 image of the current team.
   3867 @item @var{STAT}         @tab (optional) a scalar integer variable
   3868 @item @var{ERRMSG}       @tab (optional) a scalar character variable
   3869 @end multitable
   3870 
   3871 @item @emph{Example}:
   3872 @smallexample
   3873 program test
   3874   integer :: val
   3875   val = this_image ()
   3876   call co_sum (val, result_image=1)
   3877   if (this_image() == 1) then
   3878     write(*,*) "The sum is ", val ! prints (n**2 + n)/2, with n = num_images()
   3879   end if
   3880 end program test
   3881 @end smallexample
   3882 
   3883 @item @emph{See also}:
   3884 @ref{CO_MAX}, @ref{CO_MIN}, @ref{CO_REDUCE}, @ref{CO_BROADCAST}
   3885 @end table
   3886 
   3887 
   3888 
   3889 @node COMMAND_ARGUMENT_COUNT
   3890 @section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
   3891 @fnindex COMMAND_ARGUMENT_COUNT
   3892 @cindex command-line arguments
   3893 @cindex command-line arguments, number of
   3894 @cindex arguments, to program
   3895 
   3896 @table @asis
   3897 @item @emph{Description}:
   3898 @code{COMMAND_ARGUMENT_COUNT} returns the number of arguments passed on the
   3899 command line when the containing program was invoked.
   3900 
   3901 @item @emph{Standard}:
   3902 Fortran 2003 and later
   3903 
   3904 @item @emph{Class}:
   3905 Inquiry function
   3906 
   3907 @item @emph{Syntax}:
   3908 @code{RESULT = COMMAND_ARGUMENT_COUNT()}
   3909 
   3910 @item @emph{Arguments}:
   3911 @multitable @columnfractions .15 .70
   3912 @item None
   3913 @end multitable
   3914 
   3915 @item @emph{Return value}:
   3916 The return value is an @code{INTEGER} of default kind.
   3917 
   3918 @item @emph{Example}:
   3919 @smallexample
   3920 program test_command_argument_count
   3921     integer :: count
   3922     count = command_argument_count()
   3923     print *, count
   3924 end program test_command_argument_count
   3925 @end smallexample
   3926 
   3927 @item @emph{See also}:
   3928 @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}
   3929 @end table
   3930 
   3931 
   3932 
   3933 @node COMPILER_OPTIONS
   3934 @section @code{COMPILER_OPTIONS} --- Options passed to the compiler
   3935 @fnindex COMPILER_OPTIONS
   3936 @cindex flags inquiry function
   3937 @cindex options inquiry function
   3938 @cindex compiler flags inquiry function
   3939 
   3940 @table @asis
   3941 @item @emph{Description}:
   3942 @code{COMPILER_OPTIONS} returns a string with the options used for
   3943 compiling.
   3944 
   3945 @item @emph{Standard}:
   3946 Fortran 2008
   3947 
   3948 @item @emph{Class}:
   3949 Inquiry function of the module @code{ISO_FORTRAN_ENV}
   3950 
   3951 @item @emph{Syntax}:
   3952 @code{STR = COMPILER_OPTIONS()}
   3953 
   3954 @item @emph{Arguments}:
   3955 None.
   3956 
   3957 @item @emph{Return value}:
   3958 The return value is a default-kind string with system-dependent length.
   3959 It contains the compiler flags used to compile the file, which called
   3960 the @code{COMPILER_OPTIONS} intrinsic.
   3961 
   3962 @item @emph{Example}:
   3963 @smallexample
   3964    use iso_fortran_env
   3965    print '(4a)', 'This file was compiled by ', &
   3966                  compiler_version(), ' using the options ', &
   3967                  compiler_options()
   3968    end
   3969 @end smallexample
   3970 
   3971 @item @emph{See also}:
   3972 @ref{COMPILER_VERSION}, @ref{ISO_FORTRAN_ENV}
   3973 @end table
   3974 
   3975 
   3976 
   3977 @node COMPILER_VERSION
   3978 @section @code{COMPILER_VERSION} --- Compiler version string
   3979 @fnindex COMPILER_VERSION
   3980 @cindex compiler, name and version
   3981 @cindex version of the compiler
   3982 
   3983 @table @asis
   3984 @item @emph{Description}:
   3985 @code{COMPILER_VERSION} returns a string with the name and the
   3986 version of the compiler.
   3987 
   3988 @item @emph{Standard}:
   3989 Fortran 2008
   3990 
   3991 @item @emph{Class}:
   3992 Inquiry function of the module @code{ISO_FORTRAN_ENV}
   3993 
   3994 @item @emph{Syntax}:
   3995 @code{STR = COMPILER_VERSION()}
   3996 
   3997 @item @emph{Arguments}:
   3998 None.
   3999 
   4000 @item @emph{Return value}:
   4001 The return value is a default-kind string with system-dependent length.
   4002 It contains the name of the compiler and its version number.
   4003 
   4004 @item @emph{Example}:
   4005 @smallexample
   4006    use iso_fortran_env
   4007    print '(4a)', 'This file was compiled by ', &
   4008                  compiler_version(), ' using the options ', &
   4009                  compiler_options()
   4010    end
   4011 @end smallexample
   4012 
   4013 @item @emph{See also}:
   4014 @ref{COMPILER_OPTIONS}, @ref{ISO_FORTRAN_ENV}
   4015 @end table
   4016 
   4017 
   4018 
   4019 @node COMPLEX
   4020 @section @code{COMPLEX} --- Complex conversion function
   4021 @fnindex COMPLEX
   4022 @cindex complex numbers, conversion to
   4023 @cindex conversion, to complex
   4024 
   4025 @table @asis
   4026 @item @emph{Description}:
   4027 @code{COMPLEX(X, Y)} returns a complex number where @var{X} is converted
   4028 to the real component and @var{Y} is converted to the imaginary
   4029 component.
   4030 
   4031 @item @emph{Standard}:
   4032 GNU extension
   4033 
   4034 @item @emph{Class}:
   4035 Elemental function
   4036 
   4037 @item @emph{Syntax}:
   4038 @code{RESULT = COMPLEX(X, Y)}
   4039 
   4040 @item @emph{Arguments}:
   4041 @multitable @columnfractions .15 .70
   4042 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
   4043 @item @var{Y} @tab The type may be @code{INTEGER} or @code{REAL}.
   4044 @end multitable
   4045 
   4046 @item @emph{Return value}:
   4047 If @var{X} and @var{Y} are both of @code{INTEGER} type, then the return
   4048 value is of default @code{COMPLEX} type.
   4049 
   4050 If @var{X} and @var{Y} are of @code{REAL} type, or one is of @code{REAL}
   4051 type and one is of @code{INTEGER} type, then the return value is of
   4052 @code{COMPLEX} type with a kind equal to that of the @code{REAL}
   4053 argument with the highest precision.
   4054 
   4055 @item @emph{Example}:
   4056 @smallexample
   4057 program test_complex
   4058     integer :: i = 42
   4059     real :: x = 3.14
   4060     print *, complex(i, x)
   4061 end program test_complex
   4062 @end smallexample
   4063 
   4064 @item @emph{See also}:
   4065 @ref{CMPLX}
   4066 @end table
   4067 
   4068 
   4069 
   4070 @node CONJG
   4071 @section @code{CONJG} --- Complex conjugate function
   4072 @fnindex CONJG
   4073 @fnindex DCONJG
   4074 @cindex complex conjugate
   4075 
   4076 @table @asis
   4077 @item @emph{Description}:
   4078 @code{CONJG(Z)} returns the conjugate of @var{Z}.  If @var{Z} is @code{(x, y)}
   4079 then the result is @code{(x, -y)}
   4080 
   4081 @item @emph{Standard}:
   4082 Fortran 77 and later, has overloads that are GNU extensions
   4083 
   4084 @item @emph{Class}:
   4085 Elemental function
   4086 
   4087 @item @emph{Syntax}:
   4088 @code{Z = CONJG(Z)}
   4089 
   4090 @item @emph{Arguments}:
   4091 @multitable @columnfractions .15 .70
   4092 @item @var{Z} @tab The type shall be @code{COMPLEX}.
   4093 @end multitable
   4094 
   4095 @item @emph{Return value}:
   4096 The return value is of type @code{COMPLEX}.
   4097 
   4098 @item @emph{Example}:
   4099 @smallexample
   4100 program test_conjg
   4101     complex :: z = (2.0, 3.0)
   4102     complex(8) :: dz = (2.71_8, -3.14_8)
   4103     z= conjg(z)
   4104     print *, z
   4105     dz = dconjg(dz)
   4106     print *, dz
   4107 end program test_conjg
   4108 @end smallexample
   4109 
   4110 @item @emph{Specific names}:
   4111 @multitable @columnfractions .20 .20 .20 .25
   4112 @item Name             @tab Argument             @tab Return type       @tab Standard
   4113 @item @code{CONJG(Z)}  @tab @code{COMPLEX Z}     @tab @code{COMPLEX}    @tab GNU extension
   4114 @item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z}  @tab @code{COMPLEX(8)} @tab GNU extension
   4115 @end multitable
   4116 @end table
   4117 
   4118 
   4119 
   4120 @node COS
   4121 @section @code{COS} --- Cosine function
   4122 @fnindex COS
   4123 @fnindex DCOS
   4124 @fnindex CCOS
   4125 @fnindex ZCOS
   4126 @fnindex CDCOS
   4127 @cindex trigonometric function, cosine
   4128 @cindex cosine
   4129 
   4130 @table @asis
   4131 @item @emph{Description}:
   4132 @code{COS(X)} computes the cosine of @var{X}.
   4133 
   4134 @item @emph{Standard}:
   4135 Fortran 77 and later, has overloads that are GNU extensions
   4136 
   4137 @item @emph{Class}:
   4138 Elemental function
   4139 
   4140 @item @emph{Syntax}:
   4141 @code{RESULT = COS(X)}
   4142 
   4143 @item @emph{Arguments}:
   4144 @multitable @columnfractions .15 .70
   4145 @item @var{X} @tab The type shall be @code{REAL} or
   4146 @code{COMPLEX}.
   4147 @end multitable
   4148 
   4149 @item @emph{Return value}:
   4150 The return value is of the same type and kind as @var{X}. The real part
   4151 of the result is in radians. If @var{X} is of the type @code{REAL},
   4152 the return value lies in the range @math{ -1 \leq \cos (x) \leq 1}.
   4153 
   4154 @item @emph{Example}:
   4155 @smallexample
   4156 program test_cos
   4157   real :: x = 0.0
   4158   x = cos(x)
   4159 end program test_cos
   4160 @end smallexample
   4161 
   4162 @item @emph{Specific names}:
   4163 @multitable @columnfractions .20 .20 .20 .25
   4164 @item Name            @tab Argument            @tab Return type       @tab Standard
   4165 @item @code{COS(X)}   @tab @code{REAL(4) X}    @tab @code{REAL(4)}    @tab Fortran 77 and later
   4166 @item @code{DCOS(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab Fortran 77 and later
   4167 @item @code{CCOS(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later
   4168 @item @code{ZCOS(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4169 @item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4170 @end multitable
   4171 
   4172 @item @emph{See also}:
   4173 Inverse function: @ref{ACOS}
   4174 Degrees function: @ref{COSD}
   4175 
   4176 @end table
   4177 
   4178 
   4179 
   4180 @node COSD
   4181 @section @code{COSD} --- Cosine function, degrees
   4182 @fnindex COSD
   4183 @fnindex DCOSD
   4184 @fnindex CCOSD
   4185 @fnindex ZCOSD
   4186 @fnindex CDCOSD
   4187 @cindex trigonometric function, cosine, degrees
   4188 @cindex cosine, degrees
   4189 
   4190 @table @asis
   4191 @item @emph{Description}:
   4192 @code{COSD(X)} computes the cosine of @var{X} in degrees.
   4193 
   4194 This function is for compatibility only and should be avoided in favor of
   4195 standard constructs wherever possible.
   4196 
   4197 @item @emph{Standard}:
   4198 GNU Extension, enabled with @option{-fdec-math}.
   4199 
   4200 @item @emph{Class}:
   4201 Elemental function
   4202 
   4203 @item @emph{Syntax}:
   4204 @code{RESULT = COSD(X)}
   4205 
   4206 @item @emph{Arguments}:
   4207 @multitable @columnfractions .15 .70
   4208 @item @var{X} @tab The type shall be @code{REAL} or
   4209 @code{COMPLEX}.
   4210 @end multitable
   4211 
   4212 @item @emph{Return value}:
   4213 The return value is of the same type and kind as @var{X}. The real part
   4214 of the result is in degrees.  If @var{X} is of the type @code{REAL},
   4215 the return value lies in the range @math{ -1 \leq \cosd (x) \leq 1}.
   4216 
   4217 @item @emph{Example}:
   4218 @smallexample
   4219 program test_cosd
   4220   real :: x = 0.0
   4221   x = cosd(x)
   4222 end program test_cosd
   4223 @end smallexample
   4224 
   4225 @item @emph{Specific names}:
   4226 @multitable @columnfractions .20 .20 .20 .25
   4227 @item Name            @tab Argument            @tab Return type       @tab Standard
   4228 @item @code{COSD(X)}   @tab @code{REAL(4) X}    @tab @code{REAL(4)}    @tab GNU Extension
   4229 @item @code{DCOSD(X)}  @tab @code{REAL(8) X}    @tab @code{REAL(8)}    @tab GNU Extension
   4230 @item @code{CCOSD(X)}  @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab GNU Extension
   4231 @item @code{ZCOSD(X)}  @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4232 @item @code{CDCOSD(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension
   4233 @end multitable
   4234 
   4235 @item @emph{See also}:
   4236 Inverse function: @ref{ACOSD}
   4237 Radians function: @ref{COS}
   4238 
   4239 @end table
   4240 
   4241 
   4242 
   4243 @node COSH
   4244 @section @code{COSH} --- Hyperbolic cosine function
   4245 @fnindex COSH
   4246 @fnindex DCOSH
   4247 @cindex hyperbolic cosine
   4248 @cindex hyperbolic function, cosine
   4249 @cindex cosine, hyperbolic
   4250 
   4251 @table @asis
   4252 @item @emph{Description}:
   4253 @code{COSH(X)} computes the hyperbolic cosine of @var{X}.
   4254 
   4255 @item @emph{Standard}:
   4256 Fortran 77 and later, for a complex argument Fortran 2008 or later
   4257 
   4258 @item @emph{Class}:
   4259 Elemental function
   4260 
   4261 @item @emph{Syntax}:
   4262 @code{X = COSH(X)}
   4263 
   4264 @item @emph{Arguments}:
   4265 @multitable @columnfractions .15 .70
   4266 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   4267 @end multitable
   4268 
   4269 @item @emph{Return value}:
   4270 The return value has same type and kind as @var{X}. If @var{X} is
   4271 complex, the imaginary part of the result is in radians. If @var{X}
   4272 is @code{REAL}, the return value has a lower bound of one,
   4273 @math{\cosh (x) \geq 1}.
   4274 
   4275 @item @emph{Example}:
   4276 @smallexample
   4277 program test_cosh
   4278   real(8) :: x = 1.0_8
   4279   x = cosh(x)
   4280 end program test_cosh
   4281 @end smallexample
   4282 
   4283 @item @emph{Specific names}:
   4284 @multitable @columnfractions .20 .20 .20 .25
   4285 @item Name            @tab Argument          @tab Return type       @tab Standard
   4286 @item @code{COSH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 77 and later
   4287 @item @code{DCOSH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 77 and later
   4288 @end multitable
   4289 
   4290 @item @emph{See also}:
   4291 Inverse function: @ref{ACOSH}
   4292 
   4293 @end table
   4294 
   4295 
   4296 
   4297 @node COTAN
   4298 @section @code{COTAN} --- Cotangent function
   4299 @fnindex COTAN
   4300 @fnindex DCOTAN
   4301 @cindex trigonometric function, cotangent
   4302 @cindex cotangent
   4303 
   4304 @table @asis
   4305 @item @emph{Description}:
   4306 @code{COTAN(X)} computes the cotangent of @var{X}. Equivalent to @code{COS(x)}
   4307 divided by @code{SIN(x)}, or @code{1 / TAN(x)}.
   4308 
   4309 This function is for compatibility only and should be avoided in favor of
   4310 standard constructs wherever possible.
   4311 
   4312 @item @emph{Standard}:
   4313 GNU Extension, enabled with @option{-fdec-math}.
   4314 
   4315 @item @emph{Class}:
   4316 Elemental function
   4317 
   4318 @item @emph{Syntax}:
   4319 @code{RESULT = COTAN(X)}
   4320 
   4321 @item @emph{Arguments}:
   4322 @multitable @columnfractions .15 .70
   4323 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   4324 @end multitable
   4325 
   4326 @item @emph{Return value}:
   4327 The return value has same type and kind as @var{X}, and its value is in radians.
   4328 
   4329 @item @emph{Example}:
   4330 @smallexample
   4331 program test_cotan
   4332   real(8) :: x = 0.165_8
   4333   x = cotan(x)
   4334 end program test_cotan
   4335 @end smallexample
   4336 
   4337 @item @emph{Specific names}:
   4338 @multitable @columnfractions .20 .20 .20 .25
   4339 @item Name            @tab Argument          @tab Return type     @tab Standard
   4340 @item @code{COTAN(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU Extension
   4341 @item @code{DCOTAN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU Extension
   4342 @end multitable
   4343 
   4344 @item @emph{See also}:
   4345 Converse function: @ref{TAN}
   4346 Degrees function: @ref{COTAND}
   4347 @end table
   4348 
   4349 
   4350 
   4351 @node COTAND
   4352 @section @code{COTAND} --- Cotangent function, degrees
   4353 @fnindex COTAND
   4354 @fnindex DCOTAND
   4355 @cindex trigonometric function, cotangent, degrees
   4356 @cindex cotangent, degrees
   4357 
   4358 @table @asis
   4359 @item @emph{Description}:
   4360 @code{COTAND(X)} computes the cotangent of @var{X} in degrees.  Equivalent to
   4361 @code{COSD(x)} divided by @code{SIND(x)}, or @code{1 / TAND(x)}.
   4362 
   4363 @item @emph{Standard}:
   4364 GNU Extension, enabled with @option{-fdec-math}.
   4365 
   4366 This function is for compatibility only and should be avoided in favor of
   4367 standard constructs wherever possible.
   4368 
   4369 @item @emph{Class}:
   4370 Elemental function
   4371 
   4372 @item @emph{Syntax}:
   4373 @code{RESULT = COTAND(X)}
   4374 
   4375 @item @emph{Arguments}:
   4376 @multitable @columnfractions .15 .70
   4377 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   4378 @end multitable
   4379 
   4380 @item @emph{Return value}:
   4381 The return value has same type and kind as @var{X}, and its value is in degrees.
   4382 
   4383 @item @emph{Example}:
   4384 @smallexample
   4385 program test_cotand
   4386   real(8) :: x = 0.165_8
   4387   x = cotand(x)
   4388 end program test_cotand
   4389 @end smallexample
   4390 
   4391 @item @emph{Specific names}:
   4392 @multitable @columnfractions .20 .20 .20 .25
   4393 @item Name            @tab Argument          @tab Return type     @tab Standard
   4394 @item @code{COTAND(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU Extension
   4395 @item @code{DCOTAND(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU Extension
   4396 @end multitable
   4397 
   4398 @item @emph{See also}:
   4399 Converse function: @ref{TAND}
   4400 Radians function: @ref{COTAN}
   4401 
   4402 @end table
   4403 
   4404 
   4405 
   4406 @node COUNT
   4407 @section @code{COUNT} --- Count function
   4408 @fnindex COUNT
   4409 @cindex array, conditionally count elements
   4410 @cindex array, element counting
   4411 @cindex array, number of elements
   4412 
   4413 @table @asis
   4414 @item @emph{Description}:
   4415 
   4416 Counts the number of @code{.TRUE.} elements in a logical @var{MASK},
   4417 or, if the @var{DIM} argument is supplied, counts the number of
   4418 elements along each row of the array in the @var{DIM} direction.
   4419 If the array has zero size, or all of the elements of @var{MASK} are
   4420 @code{.FALSE.}, then the result is @code{0}.
   4421 
   4422 @item @emph{Standard}:
   4423 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   4424 
   4425 @item @emph{Class}:
   4426 Transformational function
   4427 
   4428 @item @emph{Syntax}:
   4429 @code{RESULT = COUNT(MASK [, DIM, KIND])}
   4430 
   4431 @item @emph{Arguments}:
   4432 @multitable @columnfractions .15 .70
   4433 @item @var{MASK} @tab The type shall be @code{LOGICAL}.
   4434 @item @var{DIM}  @tab (Optional) The type shall be @code{INTEGER}.
   4435 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   4436 expression indicating the kind parameter of the result.
   4437 @end multitable
   4438 
   4439 @item @emph{Return value}:
   4440 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   4441 @var{KIND} is absent, the return value is of default integer kind.
   4442 If @var{DIM} is present, the result is an array with a rank one less
   4443 than the rank of @var{ARRAY}, and a size corresponding to the shape
   4444 of @var{ARRAY} with the @var{DIM} dimension removed.
   4445 
   4446 @item @emph{Example}:
   4447 @smallexample
   4448 program test_count
   4449     integer, dimension(2,3) :: a, b
   4450     logical, dimension(2,3) :: mask
   4451     a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
   4452     b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
   4453     print '(3i3)', a(1,:)
   4454     print '(3i3)', a(2,:)
   4455     print *
   4456     print '(3i3)', b(1,:)
   4457     print '(3i3)', b(2,:)
   4458     print *
   4459     mask = a.ne.b
   4460     print '(3l3)', mask(1,:)
   4461     print '(3l3)', mask(2,:)
   4462     print *
   4463     print '(3i3)', count(mask)
   4464     print *
   4465     print '(3i3)', count(mask, 1)
   4466     print *
   4467     print '(3i3)', count(mask, 2)
   4468 end program test_count
   4469 @end smallexample
   4470 @end table
   4471 
   4472 
   4473 
   4474 @node CPU_TIME
   4475 @section @code{CPU_TIME} --- CPU elapsed time in seconds
   4476 @fnindex CPU_TIME
   4477 @cindex time, elapsed
   4478 
   4479 @table @asis
   4480 @item @emph{Description}:
   4481 Returns a @code{REAL} value representing the elapsed CPU time in
   4482 seconds.  This is useful for testing segments of code to determine
   4483 execution time.
   4484 
   4485 If a time source is available, time will be reported with microsecond
   4486 resolution. If no time source is available, @var{TIME} is set to
   4487 @code{-1.0}.
   4488 
   4489 Note that @var{TIME} may contain a, system dependent, arbitrary offset
   4490 and may not start with @code{0.0}. For @code{CPU_TIME}, the absolute
   4491 value is meaningless, only differences between subsequent calls to
   4492 this subroutine, as shown in the example below, should be used.
   4493 
   4494 
   4495 @item @emph{Standard}:
   4496 Fortran 95 and later
   4497 
   4498 @item @emph{Class}:
   4499 Subroutine
   4500 
   4501 @item @emph{Syntax}:
   4502 @code{CALL CPU_TIME(TIME)}
   4503 
   4504 @item @emph{Arguments}:
   4505 @multitable @columnfractions .15 .70
   4506 @item @var{TIME} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}.
   4507 @end multitable
   4508 
   4509 @item @emph{Return value}:
   4510 None
   4511 
   4512 @item @emph{Example}:
   4513 @smallexample
   4514 program test_cpu_time
   4515     real :: start, finish
   4516     call cpu_time(start)
   4517         ! put code to test here
   4518     call cpu_time(finish)
   4519     print '("Time = ",f6.3," seconds.")',finish-start
   4520 end program test_cpu_time
   4521 @end smallexample
   4522 
   4523 @item @emph{See also}:
   4524 @ref{SYSTEM_CLOCK}, @ref{DATE_AND_TIME}
   4525 @end table
   4526 
   4527 
   4528 
   4529 @node CSHIFT
   4530 @section @code{CSHIFT} --- Circular shift elements of an array
   4531 @fnindex CSHIFT
   4532 @cindex array, shift circularly
   4533 @cindex array, permutation
   4534 @cindex array, rotate
   4535 
   4536 @table @asis
   4537 @item @emph{Description}:
   4538 @code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of
   4539 @var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is omitted it is
   4540 taken to be @code{1}.  @var{DIM} is a scalar of type @code{INTEGER} in the
   4541 range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}.
   4542 If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted
   4543 by @var{SHIFT} places.  If rank is greater than one, then all complete rank one
   4544 sections of @var{ARRAY} along the given dimension are shifted.  Elements
   4545 shifted out one end of each rank one section are shifted back in the other end.
   4546 
   4547 @item @emph{Standard}:
   4548 Fortran 95 and later
   4549 
   4550 @item @emph{Class}:
   4551 Transformational function
   4552 
   4553 @item @emph{Syntax}:
   4554 @code{RESULT = CSHIFT(ARRAY, SHIFT [, DIM])}
   4555 
   4556 @item @emph{Arguments}:
   4557 @multitable @columnfractions .15 .70
   4558 @item @var{ARRAY}  @tab Shall be an array of any type.
   4559 @item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
   4560 @item @var{DIM}    @tab The type shall be @code{INTEGER}.
   4561 @end multitable
   4562 
   4563 @item @emph{Return value}:
   4564 Returns an array of same type and rank as the @var{ARRAY} argument.
   4565 
   4566 @item @emph{Example}:
   4567 @smallexample
   4568 program test_cshift
   4569     integer, dimension(3,3) :: a
   4570     a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
   4571     print '(3i3)', a(1,:)
   4572     print '(3i3)', a(2,:)
   4573     print '(3i3)', a(3,:)    
   4574     a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)
   4575     print *
   4576     print '(3i3)', a(1,:)
   4577     print '(3i3)', a(2,:)
   4578     print '(3i3)', a(3,:)
   4579 end program test_cshift
   4580 @end smallexample
   4581 @end table
   4582 
   4583 
   4584 
   4585 @node CTIME
   4586 @section @code{CTIME} --- Convert a time into a string
   4587 @fnindex CTIME
   4588 @cindex time, conversion to string
   4589 @cindex conversion, to string
   4590 
   4591 @table @asis
   4592 @item @emph{Description}:
   4593 @code{CTIME} converts a system time value, such as returned by
   4594 @ref{TIME8}, to a string. The output will be of the form @samp{Sat
   4595 Aug 19 18:13:14 1995}.
   4596 
   4597 This intrinsic is provided in both subroutine and function forms; however,
   4598 only one form can be used in any given program unit.
   4599 
   4600 @item @emph{Standard}:
   4601 GNU extension
   4602 
   4603 @item @emph{Class}:
   4604 Subroutine, function
   4605 
   4606 @item @emph{Syntax}:
   4607 @multitable @columnfractions .80
   4608 @item @code{CALL CTIME(TIME, RESULT)}.
   4609 @item @code{RESULT = CTIME(TIME)}.
   4610 @end multitable
   4611 
   4612 @item @emph{Arguments}:
   4613 @multitable @columnfractions .15 .70
   4614 @item @var{TIME}    @tab The type shall be of type @code{INTEGER}.
   4615 @item @var{RESULT}  @tab The type shall be of type @code{CHARACTER} and
   4616 of default kind. It is an @code{INTENT(OUT)} argument. If the length
   4617 of this variable is too short for the time and date string to fit
   4618 completely, it will be blank on procedure return.
   4619 @end multitable
   4620 
   4621 @item @emph{Return value}:
   4622 The converted date and time as a string. 
   4623 
   4624 @item @emph{Example}:
   4625 @smallexample
   4626 program test_ctime
   4627     integer(8) :: i
   4628     character(len=30) :: date
   4629     i = time8()
   4630 
   4631     ! Do something, main part of the program
   4632     
   4633     call ctime(i,date)
   4634     print *, 'Program was started on ', date
   4635 end program test_ctime
   4636 @end smallexample
   4637 
   4638 @item @emph{See Also}:
   4639 @ref{DATE_AND_TIME}, @ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
   4640 @end table
   4641 
   4642 
   4643 
   4644 @node DATE_AND_TIME
   4645 @section @code{DATE_AND_TIME} --- Date and time subroutine
   4646 @fnindex DATE_AND_TIME
   4647 @cindex date, current
   4648 @cindex current date
   4649 @cindex time, current
   4650 @cindex current time
   4651 
   4652 @table @asis
   4653 @item @emph{Description}:
   4654 @code{DATE_AND_TIME(DATE, TIME, ZONE, VALUES)} gets the corresponding date and
   4655 time information from the real-time system clock.  @var{DATE} is
   4656 @code{INTENT(OUT)} and has form ccyymmdd.  @var{TIME} is @code{INTENT(OUT)} and
   4657 has form hhmmss.sss.  @var{ZONE} is @code{INTENT(OUT)} and has form (+-)hhmm,
   4658 representing the difference with respect to Coordinated Universal Time (UTC).
   4659 Unavailable time and date parameters return blanks.
   4660 
   4661 @var{VALUES} is @code{INTENT(OUT)} and provides the following:
   4662 
   4663 @multitable @columnfractions .15 .30 .40
   4664 @item @tab @code{VALUE(1)}: @tab The year
   4665 @item @tab @code{VALUE(2)}: @tab The month
   4666 @item @tab @code{VALUE(3)}: @tab The day of the month
   4667 @item @tab @code{VALUE(4)}: @tab Time difference with UTC in minutes
   4668 @item @tab @code{VALUE(5)}: @tab The hour of the day
   4669 @item @tab @code{VALUE(6)}: @tab The minutes of the hour
   4670 @item @tab @code{VALUE(7)}: @tab The seconds of the minute
   4671 @item @tab @code{VALUE(8)}: @tab The milliseconds of the second
   4672 @end multitable
   4673 
   4674 @item @emph{Standard}:
   4675 Fortran 95 and later
   4676 
   4677 @item @emph{Class}:
   4678 Subroutine
   4679 
   4680 @item @emph{Syntax}:
   4681 @code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])}
   4682 
   4683 @item @emph{Arguments}:
   4684 @multitable @columnfractions .15 .70
   4685 @item @var{DATE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=8)}
   4686 or larger, and of default kind.
   4687 @item @var{TIME}  @tab (Optional) The type shall be @code{CHARACTER(LEN=10)}
   4688 or larger, and of default kind.
   4689 @item @var{ZONE}  @tab (Optional) The type shall be @code{CHARACTER(LEN=5)}
   4690 or larger, and of default kind.
   4691 @item @var{VALUES}@tab (Optional) The type shall be @code{INTEGER(8)}.
   4692 @end multitable
   4693 
   4694 @item @emph{Return value}:
   4695 None
   4696 
   4697 @item @emph{Example}:
   4698 @smallexample
   4699 program test_time_and_date
   4700     character(8)  :: date
   4701     character(10) :: time
   4702     character(5)  :: zone
   4703     integer,dimension(8) :: values
   4704     ! using keyword arguments
   4705     call date_and_time(date,time,zone,values)
   4706     call date_and_time(DATE=date,ZONE=zone)
   4707     call date_and_time(TIME=time)
   4708     call date_and_time(VALUES=values)
   4709     print '(a,2x,a,2x,a)', date, time, zone
   4710     print '(8i5)', values
   4711 end program test_time_and_date
   4712 @end smallexample
   4713 
   4714 @item @emph{See also}:
   4715 @ref{CPU_TIME}, @ref{SYSTEM_CLOCK}
   4716 @end table
   4717 
   4718 
   4719 
   4720 @node DBLE
   4721 @section @code{DBLE} --- Double conversion function
   4722 @fnindex DBLE
   4723 @cindex conversion, to real
   4724 
   4725 @table @asis
   4726 @item @emph{Description}:
   4727 @code{DBLE(A)} Converts @var{A} to double precision real type.
   4728 
   4729 @item @emph{Standard}:
   4730 Fortran 77 and later
   4731 
   4732 @item @emph{Class}:
   4733 Elemental function
   4734 
   4735 @item @emph{Syntax}:
   4736 @code{RESULT = DBLE(A)}
   4737 
   4738 @item @emph{Arguments}:
   4739 @multitable @columnfractions .15 .70
   4740 @item @var{A} @tab The type shall be @code{INTEGER}, @code{REAL},
   4741 or @code{COMPLEX}.
   4742 @end multitable
   4743 
   4744 @item @emph{Return value}:
   4745 The return value is of type double precision real.
   4746 
   4747 @item @emph{Example}:
   4748 @smallexample
   4749 program test_dble
   4750     real    :: x = 2.18
   4751     integer :: i = 5
   4752     complex :: z = (2.3,1.14)
   4753     print *, dble(x), dble(i), dble(z)
   4754 end program test_dble
   4755 @end smallexample
   4756 
   4757 @item @emph{See also}:
   4758 @ref{REAL}
   4759 @end table
   4760 
   4761 
   4762 
   4763 @node DCMPLX
   4764 @section @code{DCMPLX} --- Double complex conversion function
   4765 @fnindex DCMPLX
   4766 @cindex complex numbers, conversion to
   4767 @cindex conversion, to complex
   4768 
   4769 @table @asis
   4770 @item @emph{Description}:
   4771 @code{DCMPLX(X [,Y])} returns a double complex number where @var{X} is
   4772 converted to the real component.  If @var{Y} is present it is converted to the
   4773 imaginary component.  If @var{Y} is not present then the imaginary component is
   4774 set to 0.0.  If @var{X} is complex then @var{Y} must not be present.
   4775 
   4776 @item @emph{Standard}:
   4777 GNU extension
   4778 
   4779 @item @emph{Class}:
   4780 Elemental function
   4781 
   4782 @item @emph{Syntax}:
   4783 @code{RESULT = DCMPLX(X [, Y])}
   4784 
   4785 @item @emph{Arguments}:
   4786 @multitable @columnfractions .15 .70
   4787 @item @var{X} @tab The type may be @code{INTEGER}, @code{REAL},
   4788 or @code{COMPLEX}.
   4789 @item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX}.) May be
   4790 @code{INTEGER} or @code{REAL}. 
   4791 @end multitable
   4792 
   4793 @item @emph{Return value}:
   4794 The return value is of type @code{COMPLEX(8)}
   4795 
   4796 @item @emph{Example}:
   4797 @smallexample
   4798 program test_dcmplx
   4799     integer :: i = 42
   4800     real :: x = 3.14
   4801     complex :: z
   4802     z = cmplx(i, x)
   4803     print *, dcmplx(i)
   4804     print *, dcmplx(x)
   4805     print *, dcmplx(z)
   4806     print *, dcmplx(x,i)
   4807 end program test_dcmplx
   4808 @end smallexample
   4809 @end table
   4810 
   4811 
   4812 @node DIGITS
   4813 @section @code{DIGITS} --- Significant binary digits function
   4814 @fnindex DIGITS
   4815 @cindex model representation, significant digits
   4816 
   4817 @table @asis
   4818 @item @emph{Description}:
   4819 @code{DIGITS(X)} returns the number of significant binary digits of the internal
   4820 model representation of @var{X}.  For example, on a system using a 32-bit
   4821 floating point representation, a default real number would likely return 24.
   4822 
   4823 @item @emph{Standard}:
   4824 Fortran 95 and later
   4825 
   4826 @item @emph{Class}:
   4827 Inquiry function
   4828 
   4829 @item @emph{Syntax}:
   4830 @code{RESULT = DIGITS(X)}
   4831 
   4832 @item @emph{Arguments}:
   4833 @multitable @columnfractions .15 .70
   4834 @item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}.
   4835 @end multitable
   4836 
   4837 @item @emph{Return value}:
   4838 The return value is of type @code{INTEGER}.
   4839 
   4840 @item @emph{Example}:
   4841 @smallexample
   4842 program test_digits
   4843     integer :: i = 12345
   4844     real :: x = 3.143
   4845     real(8) :: y = 2.33
   4846     print *, digits(i)
   4847     print *, digits(x)
   4848     print *, digits(y)
   4849 end program test_digits
   4850 @end smallexample
   4851 @end table
   4852 
   4853 
   4854 
   4855 @node DIM
   4856 @section @code{DIM} --- Positive difference
   4857 @fnindex DIM
   4858 @fnindex IDIM
   4859 @fnindex DDIM
   4860 @cindex positive difference
   4861 
   4862 @table @asis
   4863 @item @emph{Description}:
   4864 @code{DIM(X,Y)} returns the difference @code{X-Y} if the result is positive;
   4865 otherwise returns zero.
   4866 
   4867 @item @emph{Standard}:
   4868 Fortran 77 and later
   4869 
   4870 @item @emph{Class}:
   4871 Elemental function
   4872 
   4873 @item @emph{Syntax}:
   4874 @code{RESULT = DIM(X, Y)}
   4875 
   4876 @item @emph{Arguments}:
   4877 @multitable @columnfractions .15 .70
   4878 @item @var{X} @tab The type shall be @code{INTEGER} or @code{REAL}
   4879 @item @var{Y} @tab The type shall be the same type and kind as @var{X}.
   4880 @end multitable
   4881 
   4882 @item @emph{Return value}:
   4883 The return value is of type @code{INTEGER} or @code{REAL}.
   4884 
   4885 @item @emph{Example}:
   4886 @smallexample
   4887 program test_dim
   4888     integer :: i
   4889     real(8) :: x
   4890     i = dim(4, 15)
   4891     x = dim(4.345_8, 2.111_8)
   4892     print *, i
   4893     print *, x
   4894 end program test_dim
   4895 @end smallexample
   4896 
   4897 @item @emph{Specific names}:
   4898 @multitable @columnfractions .20 .20 .20 .25
   4899 @item Name             @tab Argument               @tab Return type       @tab Standard
   4900 @item @code{DIM(X,Y)}  @tab @code{REAL(4) X, Y}    @tab @code{REAL(4)}    @tab Fortran 77 and later
   4901 @item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X, Y} @tab @code{INTEGER(4)} @tab Fortran 77 and later
   4902 @item @code{DDIM(X,Y)} @tab @code{REAL(8) X, Y}    @tab @code{REAL(8)}    @tab Fortran 77 and later
   4903 @end multitable
   4904 @end table
   4905 
   4906 
   4907 
   4908 @node DOT_PRODUCT
   4909 @section @code{DOT_PRODUCT} --- Dot product function
   4910 @fnindex DOT_PRODUCT
   4911 @cindex dot product
   4912 @cindex vector product
   4913 @cindex product, vector
   4914 
   4915 @table @asis
   4916 @item @emph{Description}:
   4917 @code{DOT_PRODUCT(VECTOR_A, VECTOR_B)} computes the dot product multiplication
   4918 of two vectors @var{VECTOR_A} and @var{VECTOR_B}.  The two vectors may be
   4919 either numeric or logical and must be arrays of rank one and of equal size. If
   4920 the vectors are @code{INTEGER} or @code{REAL}, the result is
   4921 @code{SUM(VECTOR_A*VECTOR_B)}. If the vectors are @code{COMPLEX}, the result
   4922 is @code{SUM(CONJG(VECTOR_A)*VECTOR_B)}. If the vectors are @code{LOGICAL},
   4923 the result is @code{ANY(VECTOR_A .AND. VECTOR_B)}.  
   4924 
   4925 @item @emph{Standard}:
   4926 Fortran 95 and later
   4927 
   4928 @item @emph{Class}:
   4929 Transformational function
   4930 
   4931 @item @emph{Syntax}:
   4932 @code{RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)}
   4933 
   4934 @item @emph{Arguments}:
   4935 @multitable @columnfractions .15 .70
   4936 @item @var{VECTOR_A} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
   4937 @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.
   4938 @end multitable
   4939 
   4940 @item @emph{Return value}:
   4941 If the arguments are numeric, the return value is a scalar of numeric type,
   4942 @code{INTEGER}, @code{REAL}, or @code{COMPLEX}.  If the arguments are
   4943 @code{LOGICAL}, the return value is @code{.TRUE.} or @code{.FALSE.}.
   4944 
   4945 @item @emph{Example}:
   4946 @smallexample
   4947 program test_dot_prod
   4948     integer, dimension(3) :: a, b
   4949     a = (/ 1, 2, 3 /)
   4950     b = (/ 4, 5, 6 /)
   4951     print '(3i3)', a
   4952     print *
   4953     print '(3i3)', b
   4954     print *
   4955     print *, dot_product(a,b)
   4956 end program test_dot_prod
   4957 @end smallexample
   4958 @end table
   4959 
   4960 
   4961 
   4962 @node DPROD
   4963 @section @code{DPROD} --- Double product function
   4964 @fnindex DPROD
   4965 @cindex product, double-precision
   4966 
   4967 @table @asis
   4968 @item @emph{Description}:
   4969 @code{DPROD(X,Y)} returns the product @code{X*Y}.
   4970 
   4971 @item @emph{Standard}:
   4972 Fortran 77 and later
   4973 
   4974 @item @emph{Class}:
   4975 Elemental function
   4976 
   4977 @item @emph{Syntax}:
   4978 @code{RESULT = DPROD(X, Y)}
   4979 
   4980 @item @emph{Arguments}:
   4981 @multitable @columnfractions .15 .70
   4982 @item @var{X} @tab The type shall be @code{REAL}.
   4983 @item @var{Y} @tab The type shall be @code{REAL}.
   4984 @end multitable
   4985 
   4986 @item @emph{Return value}:
   4987 The return value is of type @code{REAL(8)}.
   4988 
   4989 @item @emph{Example}:
   4990 @smallexample
   4991 program test_dprod
   4992     real :: x = 5.2
   4993     real :: y = 2.3
   4994     real(8) :: d
   4995     d = dprod(x,y)
   4996     print *, d
   4997 end program test_dprod
   4998 @end smallexample
   4999 
   5000 @item @emph{Specific names}:
   5001 @multitable @columnfractions .20 .20 .20 .25
   5002 @item Name              @tab Argument               @tab Return type       @tab Standard
   5003 @item @code{DPROD(X,Y)} @tab @code{REAL(4) X, Y}    @tab @code{REAL(8)}    @tab Fortran 77 and later
   5004 @end multitable
   5005 
   5006 @end table
   5007 
   5008 
   5009 @node DREAL
   5010 @section @code{DREAL} --- Double real part function
   5011 @fnindex DREAL
   5012 @cindex complex numbers, real part
   5013 
   5014 @table @asis
   5015 @item @emph{Description}:
   5016 @code{DREAL(Z)} returns the real part of complex variable @var{Z}.
   5017 
   5018 @item @emph{Standard}:
   5019 GNU extension
   5020 
   5021 @item @emph{Class}:
   5022 Elemental function
   5023 
   5024 @item @emph{Syntax}:
   5025 @code{RESULT = DREAL(A)}
   5026 
   5027 @item @emph{Arguments}:
   5028 @multitable @columnfractions .15 .70
   5029 @item @var{A} @tab The type shall be @code{COMPLEX(8)}.
   5030 @end multitable
   5031 
   5032 @item @emph{Return value}:
   5033 The return value is of type @code{REAL(8)}.
   5034 
   5035 @item @emph{Example}:
   5036 @smallexample
   5037 program test_dreal
   5038     complex(8) :: z = (1.3_8,7.2_8)
   5039     print *, dreal(z)
   5040 end program test_dreal
   5041 @end smallexample
   5042 
   5043 @item @emph{See also}:
   5044 @ref{AIMAG}
   5045 
   5046 @end table
   5047 
   5048 
   5049 
   5050 @node DSHIFTL
   5051 @section @code{DSHIFTL} --- Combined left shift
   5052 @fnindex DSHIFTL
   5053 @cindex left shift, combined
   5054 @cindex shift, left
   5055 
   5056 @table @asis
   5057 @item @emph{Description}:
   5058 @code{DSHIFTL(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
   5059 rightmost @var{SHIFT} bits of the result are the leftmost @var{SHIFT}
   5060 bits of @var{J}, and the remaining bits are the rightmost bits of
   5061 @var{I}.
   5062 
   5063 @item @emph{Standard}:
   5064 Fortran 2008 and later
   5065 
   5066 @item @emph{Class}:
   5067 Elemental function
   5068 
   5069 @item @emph{Syntax}:
   5070 @code{RESULT = DSHIFTL(I, J, SHIFT)}
   5071 
   5072 @item @emph{Arguments}:
   5073 @multitable @columnfractions .15 .70
   5074 @item @var{I} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5075 @item @var{J} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5076 If both @var{I} and @var{J} have integer type, then they shall have
   5077 the same kind type parameter. @var{I} and @var{J} shall not both be
   5078 BOZ constants.
   5079 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}. It shall
   5080 be nonnegative.  If @var{I} is not a BOZ constant, then @var{SHIFT}
   5081 shall be less than or equal to @code{BIT_SIZE(I)}; otherwise,
   5082 @var{SHIFT} shall be less than or equal to @code{BIT_SIZE(J)}.
   5083 @end multitable
   5084 
   5085 @item @emph{Return value}:
   5086 If either @var{I} or @var{J} is a BOZ constant, it is first converted
   5087 as if by the intrinsic function @code{INT} to an integer type with the
   5088 kind type parameter of the other.
   5089 
   5090 @item @emph{See also}:
   5091 @ref{DSHIFTR}
   5092 @end table
   5093 
   5094 
   5095 @node DSHIFTR
   5096 @section @code{DSHIFTR} --- Combined right shift
   5097 @fnindex DSHIFTR
   5098 @cindex right shift, combined
   5099 @cindex shift, right
   5100 
   5101 @table @asis
   5102 @item @emph{Description}:
   5103 @code{DSHIFTR(I, J, SHIFT)} combines bits of @var{I} and @var{J}. The
   5104 leftmost @var{SHIFT} bits of the result are the rightmost @var{SHIFT}
   5105 bits of @var{I}, and the remaining bits are the leftmost bits of
   5106 @var{J}.
   5107 
   5108 @item @emph{Standard}:
   5109 Fortran 2008 and later
   5110 
   5111 @item @emph{Class}:
   5112 Elemental function
   5113 
   5114 @item @emph{Syntax}:
   5115 @code{RESULT = DSHIFTR(I, J, SHIFT)}
   5116 
   5117 @item @emph{Arguments}:
   5118 @multitable @columnfractions .15 .70
   5119 @item @var{I} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5120 @item @var{J} @tab Shall be of type @code{INTEGER} or a BOZ constant.
   5121 If both @var{I} and @var{J} have integer type, then they shall have
   5122 the same kind type parameter. @var{I} and @var{J} shall not both be
   5123 BOZ constants.
   5124 @item @var{SHIFT} @tab Shall be of type @code{INTEGER}. It shall
   5125 be nonnegative.  If @var{I} is not a BOZ constant, then @var{SHIFT}
   5126 shall be less than or equal to @code{BIT_SIZE(I)}; otherwise,
   5127 @var{SHIFT} shall be less than or equal to @code{BIT_SIZE(J)}.
   5128 @end multitable
   5129 
   5130 @item @emph{Return value}:
   5131 If either @var{I} or @var{J} is a BOZ constant, it is first converted
   5132 as if by the intrinsic function @code{INT} to an integer type with the
   5133 kind type parameter of the other.
   5134 
   5135 @item @emph{See also}:
   5136 @ref{DSHIFTL}
   5137 @end table
   5138 
   5139 
   5140 @node DTIME
   5141 @section @code{DTIME} --- Execution time subroutine (or function)
   5142 @fnindex DTIME
   5143 @cindex time, elapsed
   5144 @cindex elapsed time
   5145 
   5146 @table @asis
   5147 @item @emph{Description}:
   5148 @code{DTIME(VALUES, TIME)} initially returns the number of seconds of runtime
   5149 since the start of the process's execution in @var{TIME}.  @var{VALUES}
   5150 returns the user and system components of this time in @code{VALUES(1)} and
   5151 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) +
   5152 VALUES(2)}.
   5153 
   5154 Subsequent invocations of @code{DTIME} return values accumulated since the
   5155 previous invocation.
   5156 
   5157 On some systems, the underlying timings are represented using types with
   5158 sufficiently small limits that overflows (wrap around) are possible, such as
   5159 32-bit types. Therefore, the values returned by this intrinsic might be, or
   5160 become, negative, or numerically less than previous values, during a single
   5161 run of the compiled program.
   5162 
   5163 Please note, that this implementation is thread safe if used within OpenMP
   5164 directives, i.e., its state will be consistent while called from multiple
   5165 threads. However, if @code{DTIME} is called from multiple threads, the result
   5166 is still the time since the last invocation. This may not give the intended
   5167 results. If possible, use @code{CPU_TIME} instead.
   5168 
   5169 This intrinsic is provided in both subroutine and function forms; however,
   5170 only one form can be used in any given program unit.
   5171 
   5172 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
   5173 
   5174 @multitable @columnfractions .15 .30 .40
   5175 @item @tab @code{VALUES(1)}: @tab User time in seconds.
   5176 @item @tab @code{VALUES(2)}: @tab System time in seconds.
   5177 @item @tab @code{TIME}: @tab Run time since start in seconds.
   5178 @end multitable
   5179 
   5180 @item @emph{Standard}:
   5181 GNU extension
   5182 
   5183 @item @emph{Class}:
   5184 Subroutine, function
   5185 
   5186 @item @emph{Syntax}:
   5187 @multitable @columnfractions .80
   5188 @item @code{CALL DTIME(VALUES, TIME)}.
   5189 @item @code{TIME = DTIME(VALUES)}, (not recommended).
   5190 @end multitable
   5191 
   5192 @item @emph{Arguments}:
   5193 @multitable @columnfractions .15 .70
   5194 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
   5195 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
   5196 @end multitable
   5197 
   5198 @item @emph{Return value}:
   5199 Elapsed time in seconds since the last invocation or since the start of program
   5200 execution if not called before.
   5201 
   5202 @item @emph{Example}:
   5203 @smallexample
   5204 program test_dtime
   5205     integer(8) :: i, j
   5206     real, dimension(2) :: tarray
   5207     real :: result
   5208     call dtime(tarray, result)
   5209     print *, result
   5210     print *, tarray(1)
   5211     print *, tarray(2)   
   5212     do i=1,100000000    ! Just a delay
   5213         j = i * i - i
   5214     end do
   5215     call dtime(tarray, result)
   5216     print *, result
   5217     print *, tarray(1)
   5218     print *, tarray(2)
   5219 end program test_dtime
   5220 @end smallexample
   5221 
   5222 @item @emph{See also}:
   5223 @ref{CPU_TIME}
   5224 
   5225 @end table
   5226 
   5227 
   5228 
   5229 @node EOSHIFT
   5230 @section @code{EOSHIFT} --- End-off shift elements of an array
   5231 @fnindex EOSHIFT
   5232 @cindex array, shift
   5233 
   5234 @table @asis
   5235 @item @emph{Description}:
   5236 @code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on
   5237 elements of @var{ARRAY} along the dimension of @var{DIM}.  If @var{DIM} is
   5238 omitted it is taken to be @code{1}.  @var{DIM} is a scalar of type
   5239 @code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the
   5240 rank of @var{ARRAY}.  If the rank of @var{ARRAY} is one, then all elements of
   5241 @var{ARRAY} are shifted by @var{SHIFT} places.  If rank is greater than one,
   5242 then all complete rank one sections of @var{ARRAY} along the given dimension are
   5243 shifted.  Elements shifted out one end of each rank one section are dropped.  If
   5244 @var{BOUNDARY} is present then the corresponding value of from @var{BOUNDARY}
   5245 is copied back in the other end.  If @var{BOUNDARY} is not present then the
   5246 following are copied in depending on the type of @var{ARRAY}.
   5247 
   5248 @multitable @columnfractions .15 .80
   5249 @item @emph{Array Type} @tab @emph{Boundary Value}
   5250 @item Numeric  @tab 0 of the type and kind of @var{ARRAY}.
   5251 @item Logical  @tab @code{.FALSE.}.
   5252 @item Character(@var{len}) @tab @var{len} blanks.
   5253 @end multitable
   5254 
   5255 @item @emph{Standard}:
   5256 Fortran 95 and later
   5257 
   5258 @item @emph{Class}:
   5259 Transformational function
   5260 
   5261 @item @emph{Syntax}:
   5262 @code{RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])}
   5263 
   5264 @item @emph{Arguments}:
   5265 @multitable @columnfractions .15 .70
   5266 @item @var{ARRAY}  @tab May be any type, not scalar.
   5267 @item @var{SHIFT}  @tab The type shall be @code{INTEGER}.
   5268 @item @var{BOUNDARY} @tab Same type as @var{ARRAY}. 
   5269 @item @var{DIM}    @tab The type shall be @code{INTEGER}.
   5270 @end multitable
   5271 
   5272 @item @emph{Return value}:
   5273 Returns an array of same type and rank as the @var{ARRAY} argument.
   5274 
   5275 @item @emph{Example}:
   5276 @smallexample
   5277 program test_eoshift
   5278     integer, dimension(3,3) :: a
   5279     a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
   5280     print '(3i3)', a(1,:)
   5281     print '(3i3)', a(2,:)
   5282     print '(3i3)', a(3,:)    
   5283     a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
   5284     print *
   5285     print '(3i3)', a(1,:)
   5286     print '(3i3)', a(2,:)
   5287     print '(3i3)', a(3,:)
   5288 end program test_eoshift
   5289 @end smallexample
   5290 @end table
   5291 
   5292 
   5293 
   5294 @node EPSILON
   5295 @section @code{EPSILON} --- Epsilon function
   5296 @fnindex EPSILON
   5297 @cindex model representation, epsilon
   5298 
   5299 @table @asis
   5300 @item @emph{Description}:
   5301 @code{EPSILON(X)} returns the smallest number @var{E} of the same kind
   5302 as @var{X} such that @math{1 + E > 1}.
   5303 
   5304 @item @emph{Standard}:
   5305 Fortran 95 and later
   5306 
   5307 @item @emph{Class}:
   5308 Inquiry function
   5309 
   5310 @item @emph{Syntax}:
   5311 @code{RESULT = EPSILON(X)}
   5312 
   5313 @item @emph{Arguments}:
   5314 @multitable @columnfractions .15 .70
   5315 @item @var{X} @tab The type shall be @code{REAL}.
   5316 @end multitable
   5317 
   5318 @item @emph{Return value}:
   5319 The return value is of same type as the argument.
   5320 
   5321 @item @emph{Example}:
   5322 @smallexample
   5323 program test_epsilon
   5324     real :: x = 3.143
   5325     real(8) :: y = 2.33
   5326     print *, EPSILON(x)
   5327     print *, EPSILON(y)
   5328 end program test_epsilon
   5329 @end smallexample
   5330 @end table
   5331 
   5332 
   5333 
   5334 @node ERF
   5335 @section @code{ERF} --- Error function 
   5336 @fnindex ERF
   5337 @cindex error function
   5338 
   5339 @table @asis
   5340 @item @emph{Description}:
   5341 @code{ERF(X)} computes the error function of @var{X}.
   5342 
   5343 @item @emph{Standard}:
   5344 Fortran 2008 and later
   5345 
   5346 @item @emph{Class}:
   5347 Elemental function
   5348 
   5349 @item @emph{Syntax}:
   5350 @code{RESULT = ERF(X)}
   5351 
   5352 @item @emph{Arguments}:
   5353 @multitable @columnfractions .15 .70
   5354 @item @var{X} @tab The type shall be @code{REAL}.
   5355 @end multitable
   5356 
   5357 @item @emph{Return value}:
   5358 The return value is of type @code{REAL}, of the same kind as
   5359 @var{X} and lies in the range @math{-1 \leq erf (x) \leq 1 }.
   5360 
   5361 @item @emph{Example}:
   5362 @smallexample
   5363 program test_erf
   5364   real(8) :: x = 0.17_8
   5365   x = erf(x)
   5366 end program test_erf
   5367 @end smallexample
   5368 
   5369 @item @emph{Specific names}:
   5370 @multitable @columnfractions .20 .20 .20 .25
   5371 @item Name            @tab Argument          @tab Return type       @tab Standard
   5372 @item @code{DERF(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   5373 @end multitable
   5374 @end table
   5375 
   5376 
   5377 
   5378 @node ERFC
   5379 @section @code{ERFC} --- Error function 
   5380 @fnindex ERFC
   5381 @cindex error function, complementary
   5382 
   5383 @table @asis
   5384 @item @emph{Description}:
   5385 @code{ERFC(X)} computes the complementary error function of @var{X}.
   5386 
   5387 @item @emph{Standard}:
   5388 Fortran 2008 and later
   5389 
   5390 @item @emph{Class}:
   5391 Elemental function
   5392 
   5393 @item @emph{Syntax}:
   5394 @code{RESULT = ERFC(X)}
   5395 
   5396 @item @emph{Arguments}:
   5397 @multitable @columnfractions .15 .70
   5398 @item @var{X} @tab The type shall be @code{REAL}.
   5399 @end multitable
   5400 
   5401 @item @emph{Return value}:
   5402 The return value is of type @code{REAL} and of the same kind as @var{X}.
   5403 It lies in the range @math{ 0 \leq erfc (x) \leq 2 }.
   5404 
   5405 @item @emph{Example}:
   5406 @smallexample
   5407 program test_erfc
   5408   real(8) :: x = 0.17_8
   5409   x = erfc(x)
   5410 end program test_erfc
   5411 @end smallexample
   5412 
   5413 @item @emph{Specific names}:
   5414 @multitable @columnfractions .20 .20 .20 .25
   5415 @item Name            @tab Argument          @tab Return type       @tab Standard
   5416 @item @code{DERFC(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab GNU extension
   5417 @end multitable
   5418 @end table
   5419 
   5420 
   5421 
   5422 @node ERFC_SCALED
   5423 @section @code{ERFC_SCALED} --- Error function 
   5424 @fnindex ERFC_SCALED
   5425 @cindex error function, complementary, exponentially-scaled
   5426 
   5427 @table @asis
   5428 @item @emph{Description}:
   5429 @code{ERFC_SCALED(X)} computes the exponentially-scaled complementary
   5430 error function of @var{X}.
   5431 
   5432 @item @emph{Standard}:
   5433 Fortran 2008 and later
   5434 
   5435 @item @emph{Class}:
   5436 Elemental function
   5437 
   5438 @item @emph{Syntax}:
   5439 @code{RESULT = ERFC_SCALED(X)}
   5440 
   5441 @item @emph{Arguments}:
   5442 @multitable @columnfractions .15 .70
   5443 @item @var{X} @tab The type shall be @code{REAL}.
   5444 @end multitable
   5445 
   5446 @item @emph{Return value}:
   5447 The return value is of type @code{REAL} and of the same kind as @var{X}.
   5448 
   5449 @item @emph{Example}:
   5450 @smallexample
   5451 program test_erfc_scaled
   5452   real(8) :: x = 0.17_8
   5453   x = erfc_scaled(x)
   5454 end program test_erfc_scaled
   5455 @end smallexample
   5456 @end table
   5457 
   5458 
   5459 
   5460 @node ETIME
   5461 @section @code{ETIME} --- Execution time subroutine (or function)
   5462 @fnindex ETIME
   5463 @cindex time, elapsed
   5464 
   5465 @table @asis
   5466 @item @emph{Description}:
   5467 @code{ETIME(VALUES, TIME)} returns the number of seconds of runtime
   5468 since the start of the process's execution in @var{TIME}.  @var{VALUES}
   5469 returns the user and system components of this time in @code{VALUES(1)} and
   5470 @code{VALUES(2)} respectively. @var{TIME} is equal to @code{VALUES(1) + VALUES(2)}.
   5471 
   5472 On some systems, the underlying timings are represented using types with
   5473 sufficiently small limits that overflows (wrap around) are possible, such as
   5474 32-bit types. Therefore, the values returned by this intrinsic might be, or
   5475 become, negative, or numerically less than previous values, during a single
   5476 run of the compiled program.
   5477 
   5478 This intrinsic is provided in both subroutine and function forms; however,
   5479 only one form can be used in any given program unit.
   5480 
   5481 @var{VALUES} and @var{TIME} are @code{INTENT(OUT)} and provide the following:
   5482 
   5483 @multitable @columnfractions .15 .30 .60
   5484 @item @tab @code{VALUES(1)}: @tab User time in seconds.
   5485 @item @tab @code{VALUES(2)}: @tab System time in seconds.
   5486 @item @tab @code{TIME}: @tab Run time since start in seconds.
   5487 @end multitable
   5488 
   5489 @item @emph{Standard}:
   5490 GNU extension
   5491 
   5492 @item @emph{Class}:
   5493 Subroutine, function
   5494 
   5495 @item @emph{Syntax}:
   5496 @multitable @columnfractions .80
   5497 @item @code{CALL ETIME(VALUES, TIME)}.
   5498 @item @code{TIME = ETIME(VALUES)}, (not recommended).
   5499 @end multitable
   5500 
   5501 @item @emph{Arguments}:
   5502 @multitable @columnfractions .15 .70
   5503 @item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}.
   5504 @item @var{TIME}@tab The type shall be @code{REAL(4)}.
   5505 @end multitable
   5506 
   5507 @item @emph{Return value}:
   5508 Elapsed time in seconds since the start of program execution.
   5509 
   5510 @item @emph{Example}:
   5511 @smallexample
   5512 program test_etime
   5513     integer(8) :: i, j
   5514     real, dimension(2) :: tarray
   5515     real :: result
   5516     call ETIME(tarray, result)
   5517     print *, result
   5518     print *, tarray(1)
   5519     print *, tarray(2)   
   5520     do i=1,100000000    ! Just a delay
   5521         j = i * i - i
   5522     end do
   5523     call ETIME(tarray, result)
   5524     print *, result
   5525     print *, tarray(1)
   5526     print *, tarray(2)
   5527 end program test_etime
   5528 @end smallexample
   5529 
   5530 @item @emph{See also}:
   5531 @ref{CPU_TIME}
   5532 
   5533 @end table
   5534 
   5535 
   5536 
   5537 @node EVENT_QUERY
   5538 @section @code{EVENT_QUERY} --- Query whether a coarray event has occurred
   5539 @fnindex EVENT_QUERY
   5540 @cindex Events, EVENT_QUERY
   5541 
   5542 @table @asis
   5543 @item @emph{Description}:
   5544 @code{EVENT_QUERY} assignes the number of events to @var{COUNT} which have been
   5545 posted to the @var{EVENT} variable and not yet been removed by calling
   5546 @code{EVENT WAIT}. When @var{STAT} is present and the invocation was successful,
   5547 it is assigned the value 0. If it is present and the invocation has failed,
   5548 it is assigned a positive value and @var{COUNT} is assigned the value @math{-1}.
   5549 
   5550 @item @emph{Standard}:
   5551 TS 18508 or later
   5552 
   5553 @item @emph{Class}:
   5554  subroutine
   5555 
   5556 @item @emph{Syntax}:
   5557 @code{CALL EVENT_QUERY (EVENT, COUNT [, STAT])}
   5558 
   5559 @item @emph{Arguments}:
   5560 @multitable @columnfractions .15 .70
   5561 @item @var{EVENT}  @tab (intent(IN)) Scalar of type @code{EVENT_TYPE},
   5562 defined in @code{ISO_FORTRAN_ENV}; shall not be coindexed.
   5563 @item @var{COUNT}  @tab (intent(out))Scalar integer with at least the
   5564 precision of default integer.
   5565 @item @var{STAT}   @tab (optional) Scalar default-kind integer variable.
   5566 @end multitable
   5567 
   5568 @item @emph{Example}:
   5569 @smallexample
   5570 program atomic
   5571   use iso_fortran_env
   5572   implicit none
   5573   type(event_type) :: event_value_has_been_set[*]
   5574   integer :: cnt
   5575   if (this_image() == 1) then
   5576     call event_query (event_value_has_been_set, cnt)
   5577     if (cnt > 0) write(*,*) "Value has been set"
   5578   elseif (this_image() == 2) then
   5579     event post (event_value_has_been_set[1])
   5580   end if
   5581 end program atomic
   5582 @end smallexample
   5583 
   5584 @end table
   5585 
   5586 
   5587 
   5588 @node EXECUTE_COMMAND_LINE
   5589 @section @code{EXECUTE_COMMAND_LINE} --- Execute a shell command
   5590 @fnindex EXECUTE_COMMAND_LINE
   5591 @cindex system, system call
   5592 @cindex command line
   5593 
   5594 @table @asis
   5595 @item @emph{Description}:
   5596 @code{EXECUTE_COMMAND_LINE} runs a shell command, synchronously or
   5597 asynchronously.
   5598 
   5599 The @code{COMMAND} argument is passed to the shell and executed (The
   5600 shell is @code{sh} on Unix systems, and @code{cmd.exe} on Windows.).
   5601 If @code{WAIT} is present and has the value false, the execution of
   5602 the command is asynchronous if the system supports it; otherwise, the
   5603 command is executed synchronously using the C library's @code{system}
   5604 call.
   5605 
   5606 The three last arguments allow the user to get status information.  After
   5607 synchronous execution, @code{EXITSTAT} contains the integer exit code of
   5608 the command, as returned by @code{system}.  @code{CMDSTAT} is set to zero
   5609 if the command line was executed (whatever its exit status was).
   5610 @code{CMDMSG} is assigned an error message if an error has occurred.
   5611 
   5612 Note that the @code{system} function need not be thread-safe. It is
   5613 the responsibility of the user to ensure that @code{system} is not
   5614 called concurrently.
   5615 
   5616 For asynchronous execution on supported targets, the POSIX
   5617 @code{posix_spawn} or @code{fork} functions are used.  Also, a signal
   5618 handler for the @code{SIGCHLD} signal is installed.
   5619 
   5620 @item @emph{Standard}:
   5621 Fortran 2008 and later
   5622 
   5623 @item @emph{Class}:
   5624 Subroutine
   5625 
   5626 @item @emph{Syntax}:
   5627 @code{CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])}
   5628 
   5629 @item @emph{Arguments}:
   5630 @multitable @columnfractions .15 .70
   5631 @item @var{COMMAND} @tab Shall be a default @code{CHARACTER} scalar.
   5632 @item @var{WAIT} @tab (Optional) Shall be a default @code{LOGICAL} scalar.
   5633 @item @var{EXITSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
   5634 default kind.
   5635 @item @var{CMDSTAT} @tab (Optional) Shall be an @code{INTEGER} of the
   5636 default kind.
   5637 @item @var{CMDMSG} @tab (Optional) Shall be an @code{CHARACTER} scalar of the
   5638 default kind.
   5639 @end multitable
   5640 
   5641 @item @emph{Example}:
   5642 @smallexample
   5643 program test_exec
   5644   integer :: i
   5645 
   5646   call execute_command_line ("external_prog.exe", exitstat=i)
   5647   print *, "Exit status of external_prog.exe was ", i
   5648 
   5649   call execute_command_line ("reindex_files.exe", wait=.false.)
   5650   print *, "Now reindexing files in the background"
   5651 
   5652 end program test_exec
   5653 @end smallexample
   5654 
   5655 
   5656 @item @emph{Note}:
   5657 
   5658 Because this intrinsic is implemented in terms of the @code{system}
   5659 function call, its behavior with respect to signaling is processor
   5660 dependent. In particular, on POSIX-compliant systems, the SIGINT and
   5661 SIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As
   5662 such, if the parent process is terminated, the child process might not be
   5663 terminated alongside.
   5664 
   5665 
   5666 @item @emph{See also}:
   5667 @ref{SYSTEM}
   5668 @end table
   5669 
   5670 
   5671 
   5672 @node EXIT
   5673 @section @code{EXIT} --- Exit the program with status. 
   5674 @fnindex EXIT
   5675 @cindex program termination
   5676 @cindex terminate program
   5677 
   5678 @table @asis
   5679 @item @emph{Description}:
   5680 @code{EXIT} causes immediate termination of the program with status.  If status
   5681 is omitted it returns the canonical @emph{success} for the system.  All Fortran
   5682 I/O units are closed. 
   5683 
   5684 @item @emph{Standard}:
   5685 GNU extension
   5686 
   5687 @item @emph{Class}:
   5688 Subroutine
   5689 
   5690 @item @emph{Syntax}:
   5691 @code{CALL EXIT([STATUS])}
   5692 
   5693 @item @emph{Arguments}:
   5694 @multitable @columnfractions .15 .70
   5695 @item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind.
   5696 @end multitable
   5697 
   5698 @item @emph{Return value}:
   5699 @code{STATUS} is passed to the parent process on exit.
   5700 
   5701 @item @emph{Example}:
   5702 @smallexample
   5703 program test_exit
   5704   integer :: STATUS = 0
   5705   print *, 'This program is going to exit.'
   5706   call EXIT(STATUS)
   5707 end program test_exit
   5708 @end smallexample
   5709 
   5710 @item @emph{See also}:
   5711 @ref{ABORT}, @ref{KILL}
   5712 @end table
   5713 
   5714 
   5715 
   5716 @node EXP
   5717 @section @code{EXP} --- Exponential function 
   5718 @fnindex EXP
   5719 @fnindex DEXP
   5720 @fnindex CEXP
   5721 @fnindex ZEXP
   5722 @fnindex CDEXP
   5723 @cindex exponential function
   5724 @cindex logarithm function, inverse
   5725 
   5726 @table @asis
   5727 @item @emph{Description}:
   5728 @code{EXP(X)} computes the base @math{e} exponential of @var{X}.
   5729 
   5730 @item @emph{Standard}:
   5731 Fortran 77 and later, has overloads that are GNU extensions
   5732 
   5733 @item @emph{Class}:
   5734 Elemental function
   5735 
   5736 @item @emph{Syntax}:
   5737 @code{RESULT = EXP(X)}
   5738 
   5739 @item @emph{Arguments}:
   5740 @multitable @columnfractions .15 .70
   5741 @item @var{X} @tab The type shall be @code{REAL} or
   5742 @code{COMPLEX}.
   5743 @end multitable
   5744 
   5745 @item @emph{Return value}:
   5746 The return value has same type and kind as @var{X}.
   5747 
   5748 @item @emph{Example}:
   5749 @smallexample
   5750 program test_exp
   5751   real :: x = 1.0
   5752   x = exp(x)
   5753 end program test_exp
   5754 @end smallexample
   5755 
   5756 @item @emph{Specific names}:
   5757 @multitable @columnfractions .20 .20 .20 .25
   5758 @item Name            @tab Argument             @tab Return type         @tab Standard
   5759 @item @code{EXP(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}      @tab Fortran 77 and later
   5760 @item @code{DEXP(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}      @tab Fortran 77 and later
   5761 @item @code{CEXP(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}   @tab Fortran 77 and later
   5762 @item @code{ZEXP(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
   5763 @item @code{CDEXP(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}   @tab GNU extension
   5764 @end multitable
   5765 @end table
   5766 
   5767 
   5768 
   5769 @node EXPONENT
   5770 @section @code{EXPONENT} --- Exponent function 
   5771 @fnindex EXPONENT
   5772 @cindex real number, exponent
   5773 @cindex floating point, exponent
   5774 
   5775 @table @asis
   5776 @item @emph{Description}:
   5777 @code{EXPONENT(X)} returns the value of the exponent part of @var{X}. If @var{X}
   5778 is zero the value returned is zero. 
   5779 
   5780 @item @emph{Standard}:
   5781 Fortran 95 and later
   5782 
   5783 @item @emph{Class}:
   5784 Elemental function
   5785 
   5786 @item @emph{Syntax}:
   5787 @code{RESULT = EXPONENT(X)}
   5788 
   5789 @item @emph{Arguments}:
   5790 @multitable @columnfractions .15 .70
   5791 @item @var{X} @tab The type shall be @code{REAL}.
   5792 @end multitable
   5793 
   5794 @item @emph{Return value}:
   5795 The return value is of type default @code{INTEGER}.
   5796 
   5797 @item @emph{Example}:
   5798 @smallexample
   5799 program test_exponent
   5800   real :: x = 1.0
   5801   integer :: i
   5802   i = exponent(x)
   5803   print *, i
   5804   print *, exponent(0.0)
   5805 end program test_exponent
   5806 @end smallexample
   5807 @end table
   5808 
   5809 
   5810 
   5811 @node EXTENDS_TYPE_OF
   5812 @section @code{EXTENDS_TYPE_OF} ---  Query dynamic type for extension
   5813 @fnindex EXTENDS_TYPE_OF
   5814 
   5815 @table @asis
   5816 @item @emph{Description}:
   5817 Query dynamic type for extension.
   5818 
   5819 @item @emph{Standard}:
   5820 Fortran 2003 and later
   5821 
   5822 @item @emph{Class}:
   5823 Inquiry function
   5824 
   5825 @item @emph{Syntax}:
   5826 @code{RESULT = EXTENDS_TYPE_OF(A, MOLD)}
   5827 
   5828 @item @emph{Arguments}:
   5829 @multitable @columnfractions .15 .70
   5830 @item @var{A} @tab Shall be an object of extensible declared type or
   5831 unlimited polymorphic. 
   5832 @item @var{MOLD} @tab Shall be an object of extensible declared type or
   5833 unlimited polymorphic. 
   5834 @end multitable
   5835 
   5836 @item @emph{Return value}:
   5837 The return value is a scalar of type default logical. It is true if and only if
   5838 the dynamic type of A is an extension type of the dynamic type of MOLD.
   5839 
   5840 
   5841 @item @emph{See also}:
   5842 @ref{SAME_TYPE_AS}
   5843 @end table
   5844 
   5845 
   5846 
   5847 @node FDATE
   5848 @section @code{FDATE} --- Get the current time as a string
   5849 @fnindex FDATE
   5850 @cindex time, current
   5851 @cindex current time
   5852 @cindex date, current
   5853 @cindex current date
   5854 
   5855 @table @asis
   5856 @item @emph{Description}:
   5857 @code{FDATE(DATE)} returns the current date (using the same format as
   5858 @ref{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE,
   5859 TIME())}.
   5860 
   5861 This intrinsic is provided in both subroutine and function forms; however,
   5862 only one form can be used in any given program unit.
   5863 
   5864 @item @emph{Standard}:
   5865 GNU extension
   5866 
   5867 @item @emph{Class}:
   5868 Subroutine, function
   5869 
   5870 @item @emph{Syntax}:
   5871 @multitable @columnfractions .80
   5872 @item @code{CALL FDATE(DATE)}.
   5873 @item @code{DATE = FDATE()}.
   5874 @end multitable
   5875 
   5876 @item @emph{Arguments}:
   5877 @multitable @columnfractions .15 .70
   5878 @item @var{DATE}@tab The type shall be of type @code{CHARACTER} of the
   5879 default kind. It is an @code{INTENT(OUT)} argument.  If the length of
   5880 this variable is too short for the date and time string to fit
   5881 completely, it will be blank on procedure return.
   5882 @end multitable
   5883 
   5884 @item @emph{Return value}:
   5885 The current date and time as a string.
   5886 
   5887 @item @emph{Example}:
   5888 @smallexample
   5889 program test_fdate
   5890     integer(8) :: i, j
   5891     character(len=30) :: date
   5892     call fdate(date)
   5893     print *, 'Program started on ', date
   5894     do i = 1, 100000000 ! Just a delay
   5895         j = i * i - i
   5896     end do
   5897     call fdate(date)
   5898     print *, 'Program ended on ', date
   5899 end program test_fdate
   5900 @end smallexample
   5901 
   5902 @item @emph{See also}:
   5903 @ref{DATE_AND_TIME}, @ref{CTIME}
   5904 @end table
   5905 
   5906 
   5907 @node FGET
   5908 @section @code{FGET} --- Read a single character in stream mode from stdin 
   5909 @fnindex FGET
   5910 @cindex read character, stream mode
   5911 @cindex stream mode, read character
   5912 @cindex file operation, read character
   5913 
   5914 @table @asis
   5915 @item @emph{Description}:
   5916 Read a single character in stream mode from stdin by bypassing normal 
   5917 formatted output. Stream I/O should not be mixed with normal record-oriented 
   5918 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
   5919 
   5920 This intrinsic is provided in both subroutine and function forms; however,
   5921 only one form can be used in any given program unit.
   5922 
   5923 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
   5924 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   5925 Programmers should consider the use of new stream IO feature in new code 
   5926 for future portability. See also @ref{Fortran 2003 status}.
   5927 
   5928 @item @emph{Standard}:
   5929 GNU extension
   5930 
   5931 @item @emph{Class}:
   5932 Subroutine, function
   5933 
   5934 @item @emph{Syntax}:
   5935 @multitable @columnfractions .80
   5936 @item @code{CALL FGET(C [, STATUS])}
   5937 @item @code{STATUS = FGET(C)}
   5938 @end multitable
   5939 
   5940 @item @emph{Arguments}:
   5941 @multitable @columnfractions .15 .70
   5942 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   5943 kind.
   5944 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   5945 Returns 0 on success, -1 on end-of-file, and a system specific positive
   5946 error code otherwise.
   5947 @end multitable
   5948 
   5949 @item @emph{Example}:
   5950 @smallexample
   5951 PROGRAM test_fget
   5952   INTEGER, PARAMETER :: strlen = 100
   5953   INTEGER :: status, i = 1
   5954   CHARACTER(len=strlen) :: str = ""
   5955 
   5956   WRITE (*,*) 'Enter text:'
   5957   DO
   5958     CALL fget(str(i:i), status)
   5959     if (status /= 0 .OR. i > strlen) exit
   5960     i = i + 1
   5961   END DO
   5962   WRITE (*,*) TRIM(str)
   5963 END PROGRAM
   5964 @end smallexample
   5965 
   5966 @item @emph{See also}:
   5967 @ref{FGETC}, @ref{FPUT}, @ref{FPUTC}
   5968 @end table
   5969 
   5970 
   5971 
   5972 @node FGETC
   5973 @section @code{FGETC} --- Read a single character in stream mode
   5974 @fnindex FGETC
   5975 @cindex read character, stream mode
   5976 @cindex stream mode, read character
   5977 @cindex file operation, read character
   5978 
   5979 @table @asis
   5980 @item @emph{Description}:
   5981 Read a single character in stream mode by bypassing normal formatted output. 
   5982 Stream I/O should not be mixed with normal record-oriented (formatted or 
   5983 unformatted) I/O on the same unit; the results are unpredictable.
   5984 
   5985 This intrinsic is provided in both subroutine and function forms; however,
   5986 only one form can be used in any given program unit.
   5987 
   5988 Note that the @code{FGET} intrinsic is provided for backwards compatibility
   5989 with @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   5990 Programmers should consider the use of new stream IO feature in new code 
   5991 for future portability. See also @ref{Fortran 2003 status}.
   5992 
   5993 @item @emph{Standard}:
   5994 GNU extension
   5995 
   5996 @item @emph{Class}:
   5997 Subroutine, function
   5998 
   5999 @item @emph{Syntax}:
   6000 @multitable @columnfractions .80
   6001 @item @code{CALL FGETC(UNIT, C [, STATUS])}
   6002 @item @code{STATUS = FGETC(UNIT, C)}
   6003 @end multitable
   6004 
   6005 @item @emph{Arguments}:
   6006 @multitable @columnfractions .15 .70
   6007 @item @var{UNIT}   @tab The type shall be @code{INTEGER}.
   6008 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   6009 kind.
   6010 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   6011 Returns 0 on success, -1 on end-of-file and a system specific positive
   6012 error code otherwise.
   6013 @end multitable
   6014 
   6015 @item @emph{Example}:
   6016 @smallexample
   6017 PROGRAM test_fgetc
   6018   INTEGER :: fd = 42, status
   6019   CHARACTER :: c
   6020 
   6021   OPEN(UNIT=fd, FILE="/etc/passwd", ACTION="READ", STATUS = "OLD")
   6022   DO
   6023     CALL fgetc(fd, c, status)
   6024     IF (status /= 0) EXIT
   6025     call fput(c)
   6026   END DO
   6027   CLOSE(UNIT=fd)
   6028 END PROGRAM
   6029 @end smallexample
   6030 
   6031 @item @emph{See also}:
   6032 @ref{FGET}, @ref{FPUT}, @ref{FPUTC}
   6033 @end table
   6034 
   6035 @node FINDLOC
   6036 @section @code{FINDLOC} --- Search an array for a value
   6037 @fnindex FINDLOC
   6038 @cindex findloc
   6039 
   6040 @table @asis
   6041 @item @emph{Description}:
   6042 Determines the location of the element in the array with the value
   6043 given in the @var{VALUE} argument, or, if the @var{DIM} argument is
   6044 supplied, determines the locations of the maximum element along each
   6045 row of the array in the @var{DIM} direction.  If @var{MASK} is
   6046 present, only the elements for which @var{MASK} is @code{.TRUE.} are
   6047 considered.  If more than one element in the array has the value
   6048 @var{VALUE}, the location returned is that of the first such element
   6049 in array element order if the @var{BACK} is not present or if it is
   6050 @code{.FALSE.}. If @var{BACK} is true, the location returned is that
   6051 of the last such element. If the array has zero size, or all of the
   6052 elements of @var{MASK} are @code{.FALSE.}, then the result is an array
   6053 of zeroes.  Similarly, if @var{DIM} is supplied and all of the
   6054 elements of @var{MASK} along a given row are zero, the result value
   6055 for that row is zero.
   6056 
   6057 @item @emph{Standard}:
   6058 Fortran 2008 and later.
   6059 
   6060 @item @emph{Class}:
   6061 Transformational function
   6062 
   6063 @item @emph{Syntax}:
   6064 @multitable @columnfractions .80
   6065 @item @code{RESULT = FINDLOC(ARRAY, VALUE, DIM [, MASK] [,KIND] [,BACK])}
   6066 @item @code{RESULT = FINDLOC(ARRAY, VALUE, [, MASK] [,KIND] [,BACK])}
   6067 @end multitable
   6068 
   6069 @item @emph{Arguments}:
   6070 @multitable @columnfractions .15 .70
   6071 @item @var{ARRAY} @tab Shall be an array of intrinsic type.
   6072 @item @var{VALUE} @tab A scalar of intrinsic type which is in type
   6073 conformance with @var{ARRAY}.
   6074 @item @var{DIM} @tab (Optional) Shall be a scalar of type
   6075 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   6076 inclusive.  It may not be an optional dummy argument.
   6077 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   6078 expression indicating the kind parameter of the result.
   6079 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
   6080 @end multitable
   6081 
   6082 @item @emph{Return value}:
   6083 If @var{DIM} is absent, the result is a rank-one array with a length
   6084 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
   6085 is an array with a rank one less than the rank of @var{ARRAY}, and a
   6086 size corresponding to the size of @var{ARRAY} with the @var{DIM}
   6087 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
   6088 of one, the result is a scalar.  If the optional argument @var{KIND}
   6089 is present, the result is an integer of kind @var{KIND}, otherwise it
   6090 is of default kind.
   6091 
   6092 @item @emph{See also}:
   6093 @ref{MAXLOC}, @ref{MINLOC}
   6094 
   6095 @end table
   6096 
   6097 @node FLOOR
   6098 @section @code{FLOOR} --- Integer floor function
   6099 @fnindex FLOOR
   6100 @cindex floor
   6101 @cindex rounding, floor
   6102 
   6103 @table @asis
   6104 @item @emph{Description}:
   6105 @code{FLOOR(A)} returns the greatest integer less than or equal to @var{X}.
   6106 
   6107 @item @emph{Standard}:
   6108 Fortran 95 and later
   6109 
   6110 @item @emph{Class}:
   6111 Elemental function
   6112 
   6113 @item @emph{Syntax}:
   6114 @code{RESULT = FLOOR(A [, KIND])}
   6115 
   6116 @item @emph{Arguments}:
   6117 @multitable @columnfractions .15 .70
   6118 @item @var{A} @tab The type shall be @code{REAL}.
   6119 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   6120 expression indicating the kind parameter of the result.
   6121 @end multitable
   6122 
   6123 @item @emph{Return value}:
   6124 The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present
   6125 and of default-kind @code{INTEGER} otherwise.
   6126 
   6127 @item @emph{Example}:
   6128 @smallexample
   6129 program test_floor
   6130     real :: x = 63.29
   6131     real :: y = -63.59
   6132     print *, floor(x) ! returns 63
   6133     print *, floor(y) ! returns -64
   6134 end program test_floor
   6135 @end smallexample
   6136 
   6137 @item @emph{See also}:
   6138 @ref{CEILING}, @ref{NINT}
   6139 
   6140 @end table
   6141 
   6142 
   6143 
   6144 @node FLUSH
   6145 @section @code{FLUSH} --- Flush I/O unit(s)
   6146 @fnindex FLUSH
   6147 @cindex file operation, flush
   6148 
   6149 @table @asis
   6150 @item @emph{Description}:
   6151 Flushes Fortran unit(s) currently open for output. Without the optional
   6152 argument, all units are flushed, otherwise just the unit specified.
   6153 
   6154 @item @emph{Standard}:
   6155 GNU extension
   6156 
   6157 @item @emph{Class}:
   6158 Subroutine
   6159 
   6160 @item @emph{Syntax}:
   6161 @code{CALL FLUSH(UNIT)}
   6162 
   6163 @item @emph{Arguments}:
   6164 @multitable @columnfractions .15 .70
   6165 @item @var{UNIT} @tab (Optional) The type shall be @code{INTEGER}.
   6166 @end multitable
   6167 
   6168 @item @emph{Note}:
   6169 Beginning with the Fortran 2003 standard, there is a @code{FLUSH}
   6170 statement that should be preferred over the @code{FLUSH} intrinsic.
   6171 
   6172 The @code{FLUSH} intrinsic and the Fortran 2003 @code{FLUSH} statement
   6173 have identical effect: they flush the runtime library's I/O buffer so
   6174 that the data becomes visible to other processes. This does not guarantee
   6175 that the data is committed to disk.
   6176 
   6177 On POSIX systems, you can request that all data is transferred  to  the
   6178 storage device by calling the @code{fsync} function, with the POSIX file
   6179 descriptor of the I/O unit as argument (retrieved with GNU intrinsic
   6180 @code{FNUM}). The following example shows how:
   6181 
   6182 @smallexample
   6183   ! Declare the interface for POSIX fsync function
   6184   interface
   6185     function fsync (fd) bind(c,name="fsync")
   6186     use iso_c_binding, only: c_int
   6187       integer(c_int), value :: fd
   6188       integer(c_int) :: fsync
   6189     end function fsync
   6190   end interface
   6191 
   6192   ! Variable declaration
   6193   integer :: ret
   6194 
   6195   ! Opening unit 10
   6196   open (10,file="foo")
   6197 
   6198   ! ...
   6199   ! Perform I/O on unit 10
   6200   ! ...
   6201 
   6202   ! Flush and sync
   6203   flush(10)
   6204   ret = fsync(fnum(10))
   6205 
   6206   ! Handle possible error
   6207   if (ret /= 0) stop "Error calling FSYNC"
   6208 @end smallexample
   6209 
   6210 @end table
   6211 
   6212 
   6213 
   6214 @node FNUM
   6215 @section @code{FNUM} --- File number function
   6216 @fnindex FNUM
   6217 @cindex file operation, file number
   6218 
   6219 @table @asis
   6220 @item @emph{Description}:
   6221 @code{FNUM(UNIT)} returns the POSIX file descriptor number corresponding to the
   6222 open Fortran I/O unit @code{UNIT}.
   6223 
   6224 @item @emph{Standard}:
   6225 GNU extension
   6226 
   6227 @item @emph{Class}:
   6228 Function
   6229 
   6230 @item @emph{Syntax}:
   6231 @code{RESULT = FNUM(UNIT)}
   6232 
   6233 @item @emph{Arguments}:
   6234 @multitable @columnfractions .15 .70
   6235 @item @var{UNIT} @tab The type shall be @code{INTEGER}.
   6236 @end multitable
   6237 
   6238 @item @emph{Return value}:
   6239 The return value is of type @code{INTEGER}
   6240 
   6241 @item @emph{Example}:
   6242 @smallexample
   6243 program test_fnum
   6244   integer :: i
   6245   open (unit=10, status = "scratch")
   6246   i = fnum(10)
   6247   print *, i
   6248   close (10)
   6249 end program test_fnum
   6250 @end smallexample
   6251 @end table
   6252 
   6253 
   6254 
   6255 @node FPUT
   6256 @section @code{FPUT} --- Write a single character in stream mode to stdout 
   6257 @fnindex FPUT
   6258 @cindex write character, stream mode
   6259 @cindex stream mode, write character
   6260 @cindex file operation, write character
   6261 
   6262 @table @asis
   6263 @item @emph{Description}:
   6264 Write a single character in stream mode to stdout by bypassing normal 
   6265 formatted output. Stream I/O should not be mixed with normal record-oriented 
   6266 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
   6267 
   6268 This intrinsic is provided in both subroutine and function forms; however,
   6269 only one form can be used in any given program unit.
   6270 
   6271 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
   6272 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   6273 Programmers should consider the use of new stream IO feature in new code 
   6274 for future portability. See also @ref{Fortran 2003 status}.
   6275 
   6276 @item @emph{Standard}:
   6277 GNU extension
   6278 
   6279 @item @emph{Class}:
   6280 Subroutine, function
   6281 
   6282 @item @emph{Syntax}:
   6283 @multitable @columnfractions .80
   6284 @item @code{CALL FPUT(C [, STATUS])}
   6285 @item @code{STATUS = FPUT(C)}
   6286 @end multitable
   6287 
   6288 @item @emph{Arguments}:
   6289 @multitable @columnfractions .15 .70
   6290 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   6291 kind.
   6292 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   6293 Returns 0 on success, -1 on end-of-file and a system specific positive
   6294 error code otherwise.
   6295 @end multitable
   6296 
   6297 @item @emph{Example}:
   6298 @smallexample
   6299 PROGRAM test_fput
   6300   CHARACTER(len=10) :: str = "gfortran"
   6301   INTEGER :: i
   6302   DO i = 1, len_trim(str)
   6303     CALL fput(str(i:i))
   6304   END DO
   6305 END PROGRAM
   6306 @end smallexample
   6307 
   6308 @item @emph{See also}:
   6309 @ref{FPUTC}, @ref{FGET}, @ref{FGETC}
   6310 @end table
   6311 
   6312 
   6313 
   6314 @node FPUTC
   6315 @section @code{FPUTC} --- Write a single character in stream mode
   6316 @fnindex FPUTC
   6317 @cindex write character, stream mode
   6318 @cindex stream mode, write character
   6319 @cindex file operation, write character
   6320 
   6321 @table @asis
   6322 @item @emph{Description}:
   6323 Write a single character in stream mode by bypassing normal formatted 
   6324 output. Stream I/O should not be mixed with normal record-oriented 
   6325 (formatted or unformatted) I/O on the same unit; the results are unpredictable.
   6326 
   6327 This intrinsic is provided in both subroutine and function forms; however,
   6328 only one form can be used in any given program unit.
   6329 
   6330 Note that the @code{FGET} intrinsic is provided for backwards compatibility with 
   6331 @command{g77}.  GNU Fortran provides the Fortran 2003 Stream facility.
   6332 Programmers should consider the use of new stream IO feature in new code 
   6333 for future portability. See also @ref{Fortran 2003 status}.
   6334 
   6335 @item @emph{Standard}:
   6336 GNU extension
   6337 
   6338 @item @emph{Class}:
   6339 Subroutine, function
   6340 
   6341 @item @emph{Syntax}:
   6342 @multitable @columnfractions .80
   6343 @item @code{CALL FPUTC(UNIT, C [, STATUS])}
   6344 @item @code{STATUS = FPUTC(UNIT, C)}
   6345 @end multitable
   6346 
   6347 @item @emph{Arguments}:
   6348 @multitable @columnfractions .15 .70
   6349 @item @var{UNIT}   @tab The type shall be @code{INTEGER}.
   6350 @item @var{C}      @tab The type shall be @code{CHARACTER} and of default
   6351 kind.
   6352 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
   6353 Returns 0 on success, -1 on end-of-file and a system specific positive
   6354 error code otherwise.
   6355 @end multitable
   6356 
   6357 @item @emph{Example}:
   6358 @smallexample
   6359 PROGRAM test_fputc
   6360   CHARACTER(len=10) :: str = "gfortran"
   6361   INTEGER :: fd = 42, i
   6362 
   6363   OPEN(UNIT = fd, FILE = "out", ACTION = "WRITE", STATUS="NEW")
   6364   DO i = 1, len_trim(str)
   6365     CALL fputc(fd, str(i:i))
   6366   END DO
   6367   CLOSE(fd)
   6368 END PROGRAM
   6369 @end smallexample
   6370 
   6371 @item @emph{See also}:
   6372 @ref{FPUT}, @ref{FGET}, @ref{FGETC}
   6373 @end table
   6374 
   6375 
   6376 
   6377 @node FRACTION
   6378 @section @code{FRACTION} --- Fractional part of the model representation
   6379 @fnindex FRACTION
   6380 @cindex real number, fraction
   6381 @cindex floating point, fraction
   6382 
   6383 @table @asis
   6384 @item @emph{Description}:
   6385 @code{FRACTION(X)} returns the fractional part of the model
   6386 representation of @code{X}.
   6387 
   6388 @item @emph{Standard}:
   6389 Fortran 95 and later
   6390 
   6391 @item @emph{Class}:
   6392 Elemental function
   6393 
   6394 @item @emph{Syntax}:
   6395 @code{Y = FRACTION(X)}
   6396 
   6397 @item @emph{Arguments}:
   6398 @multitable @columnfractions .15 .70
   6399 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
   6400 @end multitable
   6401 
   6402 @item @emph{Return value}:
   6403 The return value is of the same type and kind as the argument.
   6404 The fractional part of the model representation of @code{X} is returned;
   6405 it is @code{X * RADIX(X)**(-EXPONENT(X))}.
   6406 
   6407 @item @emph{Example}:
   6408 @smallexample
   6409 program test_fraction
   6410   real :: x
   6411   x = 178.1387e-4
   6412   print *, fraction(x), x * radix(x)**(-exponent(x))
   6413 end program test_fraction
   6414 @end smallexample
   6415 
   6416 @end table
   6417 
   6418 
   6419 
   6420 @node FREE
   6421 @section @code{FREE} --- Frees memory
   6422 @fnindex FREE
   6423 @cindex pointer, cray
   6424 
   6425 @table @asis
   6426 @item @emph{Description}:
   6427 Frees memory previously allocated by @code{MALLOC}. The @code{FREE}
   6428 intrinsic is an extension intended to be used with Cray pointers, and is
   6429 provided in GNU Fortran to allow user to compile legacy code. For
   6430 new code using Fortran 95 pointers, the memory de-allocation intrinsic is
   6431 @code{DEALLOCATE}.
   6432 
   6433 @item @emph{Standard}:
   6434 GNU extension
   6435 
   6436 @item @emph{Class}:
   6437 Subroutine
   6438 
   6439 @item @emph{Syntax}:
   6440 @code{CALL FREE(PTR)}
   6441 
   6442 @item @emph{Arguments}:
   6443 @multitable @columnfractions .15 .70
   6444 @item @var{PTR} @tab The type shall be @code{INTEGER}. It represents the
   6445 location of the memory that should be de-allocated.
   6446 @end multitable
   6447 
   6448 @item @emph{Return value}:
   6449 None
   6450 
   6451 @item @emph{Example}:
   6452 See @code{MALLOC} for an example.
   6453 
   6454 @item @emph{See also}:
   6455 @ref{MALLOC}
   6456 @end table
   6457 
   6458 
   6459 
   6460 @node FSEEK
   6461 @section @code{FSEEK} --- Low level file positioning subroutine
   6462 @fnindex FSEEK
   6463 @cindex file operation, seek
   6464 @cindex file operation, position
   6465 
   6466 @table @asis
   6467 @item @emph{Description}:
   6468 Moves @var{UNIT} to the specified @var{OFFSET}. If @var{WHENCE} 
   6469 is set to 0, the @var{OFFSET} is taken as an absolute value @code{SEEK_SET},
   6470 if set to 1, @var{OFFSET} is taken to be relative to the current position 
   6471 @code{SEEK_CUR}, and if set to 2 relative to the end of the file @code{SEEK_END}.
   6472 On error, @var{STATUS} is set to a nonzero value. If @var{STATUS} the seek 
   6473 fails silently.
   6474 
   6475 This intrinsic routine is not fully backwards compatible with @command{g77}. 
   6476 In @command{g77}, the @code{FSEEK} takes a statement label instead of a 
   6477 @var{STATUS} variable. If FSEEK is used in old code, change
   6478 @smallexample
   6479   CALL FSEEK(UNIT, OFFSET, WHENCE, *label)
   6480 @end smallexample 
   6481 to
   6482 @smallexample
   6483   INTEGER :: status
   6484   CALL FSEEK(UNIT, OFFSET, WHENCE, status)
   6485   IF (status /= 0) GOTO label
   6486 @end smallexample 
   6487 
   6488 Please note that GNU Fortran provides the Fortran 2003 Stream facility.
   6489 Programmers should consider the use of new stream IO feature in new code 
   6490 for future portability. See also @ref{Fortran 2003 status}.
   6491 
   6492 @item @emph{Standard}:
   6493 GNU extension
   6494 
   6495 @item @emph{Class}:
   6496 Subroutine
   6497 
   6498 @item @emph{Syntax}:
   6499 @code{CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])}
   6500 
   6501 @item @emph{Arguments}:
   6502 @multitable @columnfractions .15 .70
   6503 @item @var{UNIT}   @tab Shall be a scalar of type @code{INTEGER}.
   6504 @item @var{OFFSET} @tab Shall be a scalar of type @code{INTEGER}.
   6505 @item @var{WHENCE} @tab Shall be a scalar of type @code{INTEGER}.
   6506 Its value shall be either 0, 1 or 2.
   6507 @item @var{STATUS} @tab (Optional) shall be a scalar of type 
   6508 @code{INTEGER(4)}.
   6509 @end multitable
   6510 
   6511 @item @emph{Example}:
   6512 @smallexample
   6513 PROGRAM test_fseek
   6514   INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2
   6515   INTEGER :: fd, offset, ierr
   6516 
   6517   ierr   = 0
   6518   offset = 5
   6519   fd     = 10
   6520 
   6521   OPEN(UNIT=fd, FILE="fseek.test")
   6522   CALL FSEEK(fd, offset, SEEK_SET, ierr)  ! move to OFFSET
   6523   print *, FTELL(fd), ierr
   6524 
   6525   CALL FSEEK(fd, 0, SEEK_END, ierr)       ! move to end
   6526   print *, FTELL(fd), ierr
   6527 
   6528   CALL FSEEK(fd, 0, SEEK_SET, ierr)       ! move to beginning
   6529   print *, FTELL(fd), ierr
   6530 
   6531   CLOSE(UNIT=fd)
   6532 END PROGRAM
   6533 @end smallexample
   6534 
   6535 @item @emph{See also}:
   6536 @ref{FTELL}
   6537 @end table
   6538 
   6539 
   6540 
   6541 @node FSTAT
   6542 @section @code{FSTAT} --- Get file status
   6543 @fnindex FSTAT
   6544 @cindex file system, file status
   6545 
   6546 @table @asis
   6547 @item @emph{Description}:
   6548 @code{FSTAT} is identical to @ref{STAT}, except that information about an 
   6549 already opened file is obtained.
   6550 
   6551 The elements in @code{VALUES} are the same as described by @ref{STAT}.
   6552 
   6553 This intrinsic is provided in both subroutine and function forms; however,
   6554 only one form can be used in any given program unit.
   6555 
   6556 @item @emph{Standard}:
   6557 GNU extension
   6558 
   6559 @item @emph{Class}:
   6560 Subroutine, function
   6561 
   6562 @item @emph{Syntax}:
   6563 @multitable @columnfractions .80
   6564 @item @code{CALL FSTAT(UNIT, VALUES [, STATUS])}
   6565 @item @code{STATUS = FSTAT(UNIT, VALUES)}
   6566 @end multitable
   6567 
   6568 @item @emph{Arguments}:
   6569 @multitable @columnfractions .15 .70
   6570 @item @var{UNIT}   @tab An open I/O unit number of type @code{INTEGER}.
   6571 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
   6572 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
   6573 on success and a system specific error code otherwise.
   6574 @end multitable
   6575 
   6576 @item @emph{Example}:
   6577 See @ref{STAT} for an example.
   6578 
   6579 @item @emph{See also}:
   6580 To stat a link: @ref{LSTAT}, to stat a file: @ref{STAT}
   6581 @end table
   6582 
   6583 
   6584 
   6585 @node FTELL
   6586 @section @code{FTELL} --- Current stream position
   6587 @fnindex FTELL
   6588 @cindex file operation, position
   6589 
   6590 @table @asis
   6591 @item @emph{Description}:
   6592 Retrieves the current position within an open file.
   6593 
   6594 This intrinsic is provided in both subroutine and function forms; however,
   6595 only one form can be used in any given program unit.
   6596 
   6597 @item @emph{Standard}:
   6598 GNU extension
   6599 
   6600 @item @emph{Class}:
   6601 Subroutine, function
   6602 
   6603 @item @emph{Syntax}:
   6604 @multitable @columnfractions .80
   6605 @item @code{CALL FTELL(UNIT, OFFSET)}
   6606 @item @code{OFFSET = FTELL(UNIT)}
   6607 @end multitable
   6608 
   6609 @item @emph{Arguments}:
   6610 @multitable @columnfractions .15 .70
   6611 @item @var{OFFSET}  @tab Shall of type @code{INTEGER}.
   6612 @item @var{UNIT}    @tab Shall of type @code{INTEGER}.
   6613 @end multitable
   6614 
   6615 @item @emph{Return value}:
   6616 In either syntax, @var{OFFSET} is set to the current offset of unit
   6617 number @var{UNIT}, or to @math{-1} if the unit is not currently open.
   6618 
   6619 @item @emph{Example}:
   6620 @smallexample
   6621 PROGRAM test_ftell
   6622   INTEGER :: i
   6623   OPEN(10, FILE="temp.dat")
   6624   CALL ftell(10,i)
   6625   WRITE(*,*) i
   6626 END PROGRAM
   6627 @end smallexample
   6628 
   6629 @item @emph{See also}:
   6630 @ref{FSEEK}
   6631 @end table
   6632 
   6633 
   6634 
   6635 @node GAMMA
   6636 @section @code{GAMMA} --- Gamma function
   6637 @fnindex GAMMA
   6638 @fnindex DGAMMA
   6639 @cindex Gamma function
   6640 @cindex Factorial function
   6641 
   6642 @table @asis
   6643 @item @emph{Description}:
   6644 @code{GAMMA(X)} computes Gamma (@math{\Gamma}) of @var{X}. For positive,
   6645 integer values of @var{X} the Gamma function simplifies to the factorial
   6646 function @math{\Gamma(x)=(x-1)!}.
   6647 
   6648 @tex
   6649 $$
   6650 \Gamma(x) = \int_0^\infty t^{x-1}{\rm e}^{-t}\,{\rm d}t
   6651 $$
   6652 @end tex
   6653 
   6654 @item @emph{Standard}:
   6655 Fortran 2008 and later
   6656 
   6657 @item @emph{Class}:
   6658 Elemental function
   6659 
   6660 @item @emph{Syntax}:
   6661 @code{X = GAMMA(X)}
   6662 
   6663 @item @emph{Arguments}:
   6664 @multitable @columnfractions .15 .70
   6665 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
   6666 nor a negative integer.
   6667 @end multitable
   6668 
   6669 @item @emph{Return value}:
   6670 The return value is of type @code{REAL} of the same kind as @var{X}.
   6671 
   6672 @item @emph{Example}:
   6673 @smallexample
   6674 program test_gamma
   6675   real :: x = 1.0
   6676   x = gamma(x) ! returns 1.0
   6677 end program test_gamma
   6678 @end smallexample
   6679 
   6680 @item @emph{Specific names}:
   6681 @multitable @columnfractions .20 .20 .20 .25
   6682 @item Name             @tab Argument         @tab Return type       @tab Standard
   6683 @item @code{GAMMA(X)}  @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
   6684 @item @code{DGAMMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU Extension
   6685 @end multitable
   6686 
   6687 @item @emph{See also}:
   6688 Logarithm of the Gamma function: @ref{LOG_GAMMA}
   6689 
   6690 @end table
   6691 
   6692 
   6693 
   6694 @node GERROR
   6695 @section @code{GERROR} --- Get last system error message
   6696 @fnindex GERROR
   6697 @cindex system, error handling
   6698 
   6699 @table @asis
   6700 @item @emph{Description}:
   6701 Returns the system error message corresponding to the last system error.
   6702 This resembles the functionality of @code{strerror(3)} in C.
   6703 
   6704 @item @emph{Standard}:
   6705 GNU extension
   6706 
   6707 @item @emph{Class}:
   6708 Subroutine
   6709 
   6710 @item @emph{Syntax}:
   6711 @code{CALL GERROR(RESULT)}
   6712 
   6713 @item @emph{Arguments}:
   6714 @multitable @columnfractions .15 .70
   6715 @item @var{RESULT}  @tab Shall of type @code{CHARACTER} and of default
   6716 @end multitable
   6717 
   6718 @item @emph{Example}:
   6719 @smallexample
   6720 PROGRAM test_gerror
   6721   CHARACTER(len=100) :: msg
   6722   CALL gerror(msg)
   6723   WRITE(*,*) msg
   6724 END PROGRAM
   6725 @end smallexample
   6726 
   6727 @item @emph{See also}:
   6728 @ref{IERRNO}, @ref{PERROR}
   6729 @end table
   6730 
   6731 
   6732 
   6733 @node GETARG
   6734 @section @code{GETARG} --- Get command line arguments
   6735 @fnindex GETARG
   6736 @cindex command-line arguments
   6737 @cindex arguments, to program
   6738 
   6739 @table @asis
   6740 @item @emph{Description}:
   6741 Retrieve the @var{POS}-th argument that was passed on the
   6742 command line when the containing program was invoked.
   6743 
   6744 This intrinsic routine is provided for backwards compatibility with 
   6745 GNU Fortran 77.  In new code, programmers should consider the use of 
   6746 the @ref{GET_COMMAND_ARGUMENT} intrinsic defined by the Fortran 2003 
   6747 standard.
   6748 
   6749 @item @emph{Standard}:
   6750 GNU extension
   6751 
   6752 @item @emph{Class}:
   6753 Subroutine
   6754 
   6755 @item @emph{Syntax}:
   6756 @code{CALL GETARG(POS, VALUE)}
   6757 
   6758 @item @emph{Arguments}:
   6759 @multitable @columnfractions .15 .70
   6760 @item @var{POS}   @tab Shall be of type @code{INTEGER} and not wider than
   6761 the default integer kind; @math{@var{POS} \geq 0}
   6762 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default
   6763 kind.
   6764 @item @var{VALUE} @tab Shall be of type @code{CHARACTER}. 
   6765 @end multitable
   6766 
   6767 @item @emph{Return value}:
   6768 After @code{GETARG} returns, the @var{VALUE} argument holds the
   6769 @var{POS}th command line argument. If @var{VALUE} cannot hold the
   6770 argument, it is truncated to fit the length of @var{VALUE}. If there are
   6771 less than @var{POS} arguments specified at the command line, @var{VALUE}
   6772 will be filled with blanks. If @math{@var{POS} = 0}, @var{VALUE} is set
   6773 to the name of the program (on systems that support this feature).
   6774 
   6775 @item @emph{Example}:
   6776 @smallexample
   6777 PROGRAM test_getarg
   6778   INTEGER :: i
   6779   CHARACTER(len=32) :: arg
   6780 
   6781   DO i = 1, iargc()
   6782     CALL getarg(i, arg)
   6783     WRITE (*,*) arg
   6784   END DO
   6785 END PROGRAM
   6786 @end smallexample
   6787 
   6788 @item @emph{See also}:
   6789 GNU Fortran 77 compatibility function: @ref{IARGC}
   6790 
   6791 Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
   6792 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
   6793 @end table
   6794 
   6795 
   6796 
   6797 @node GET_COMMAND
   6798 @section @code{GET_COMMAND} --- Get the entire command line
   6799 @fnindex GET_COMMAND
   6800 @cindex command-line arguments
   6801 @cindex arguments, to program
   6802 
   6803 @table @asis
   6804 @item @emph{Description}:
   6805 Retrieve the entire command line that was used to invoke the program.
   6806 
   6807 @item @emph{Standard}:
   6808 Fortran 2003 and later
   6809 
   6810 @item @emph{Class}:
   6811 Subroutine
   6812 
   6813 @item @emph{Syntax}:
   6814 @code{CALL GET_COMMAND([COMMAND, LENGTH, STATUS])}
   6815 
   6816 @item @emph{Arguments}:
   6817 @multitable @columnfractions .15 .70
   6818 @item @var{COMMAND} @tab (Optional) shall be of type @code{CHARACTER} and
   6819 of default kind.
   6820 @item @var{LENGTH} @tab (Optional) Shall be of type @code{INTEGER} and of
   6821 default kind.
   6822 @item @var{STATUS} @tab (Optional) Shall be of type @code{INTEGER} and of
   6823 default kind.
   6824 @end multitable
   6825 
   6826 @item @emph{Return value}:
   6827 If @var{COMMAND} is present, stores the entire command line that was used
   6828 to invoke the program in @var{COMMAND}. If @var{LENGTH} is present, it is
   6829 assigned the length of the command line. If @var{STATUS} is present, it
   6830 is assigned 0 upon success of the command, -1 if @var{COMMAND} is too
   6831 short to store the command line, or a positive value in case of an error.
   6832 
   6833 @item @emph{Example}:
   6834 @smallexample
   6835 PROGRAM test_get_command
   6836   CHARACTER(len=255) :: cmd
   6837   CALL get_command(cmd)
   6838   WRITE (*,*) TRIM(cmd)
   6839 END PROGRAM
   6840 @end smallexample
   6841 
   6842 @item @emph{See also}:
   6843 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
   6844 @end table
   6845 
   6846 
   6847 
   6848 @node GET_COMMAND_ARGUMENT
   6849 @section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments
   6850 @fnindex GET_COMMAND_ARGUMENT
   6851 @cindex command-line arguments
   6852 @cindex arguments, to program
   6853 
   6854 @table @asis
   6855 @item @emph{Description}:
   6856 Retrieve the @var{NUMBER}-th argument that was passed on the
   6857 command line when the containing program was invoked.
   6858 
   6859 @item @emph{Standard}:
   6860 Fortran 2003 and later
   6861 
   6862 @item @emph{Class}:
   6863 Subroutine
   6864 
   6865 @item @emph{Syntax}:
   6866 @code{CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])}
   6867 
   6868 @item @emph{Arguments}:
   6869 @multitable @columnfractions .15 .70
   6870 @item @var{NUMBER} @tab Shall be a scalar of type @code{INTEGER} and of
   6871 default kind, @math{@var{NUMBER} \geq 0}
   6872 @item @var{VALUE}  @tab (Optional) Shall be a scalar of type @code{CHARACTER}
   6873 and of default kind.
   6874 @item @var{LENGTH} @tab (Optional) Shall be a scalar of type @code{INTEGER}
   6875 and of default kind.
   6876 @item @var{STATUS} @tab (Optional) Shall be a scalar of type @code{INTEGER}
   6877 and of default kind.
   6878 @end multitable
   6879 
   6880 @item @emph{Return value}:
   6881 After @code{GET_COMMAND_ARGUMENT} returns, the @var{VALUE} argument holds the 
   6882 @var{NUMBER}-th command line argument. If @var{VALUE} cannot hold the argument, it is 
   6883 truncated to fit the length of @var{VALUE}. If there are less than @var{NUMBER}
   6884 arguments specified at the command line, @var{VALUE} will be filled with blanks. 
   6885 If @math{@var{NUMBER} = 0}, @var{VALUE} is set to the name of the program (on
   6886 systems that support this feature). The @var{LENGTH} argument contains the
   6887 length of the @var{NUMBER}-th command line argument. If the argument retrieval
   6888 fails, @var{STATUS} is a positive number; if @var{VALUE} contains a truncated
   6889 command line argument, @var{STATUS} is -1; and otherwise the @var{STATUS} is
   6890 zero.
   6891 
   6892 @item @emph{Example}:
   6893 @smallexample
   6894 PROGRAM test_get_command_argument
   6895   INTEGER :: i
   6896   CHARACTER(len=32) :: arg
   6897 
   6898   i = 0
   6899   DO
   6900     CALL get_command_argument(i, arg)
   6901     IF (LEN_TRIM(arg) == 0) EXIT
   6902 
   6903     WRITE (*,*) TRIM(arg)
   6904     i = i+1
   6905   END DO
   6906 END PROGRAM
   6907 @end smallexample
   6908 
   6909 @item @emph{See also}:
   6910 @ref{GET_COMMAND}, @ref{COMMAND_ARGUMENT_COUNT}
   6911 @end table
   6912 
   6913 
   6914 
   6915 @node GETCWD
   6916 @section @code{GETCWD} --- Get current working directory
   6917 @fnindex GETCWD
   6918 @cindex system, working directory
   6919 
   6920 @table @asis
   6921 @item @emph{Description}:
   6922 Get current working directory.
   6923 
   6924 This intrinsic is provided in both subroutine and function forms; however,
   6925 only one form can be used in any given program unit.
   6926 
   6927 @item @emph{Standard}:
   6928 GNU extension
   6929 
   6930 @item @emph{Class}:
   6931 Subroutine, function
   6932 
   6933 @item @emph{Syntax}:
   6934 @multitable @columnfractions .80
   6935 @item @code{CALL GETCWD(C [, STATUS])}
   6936 @item @code{STATUS = GETCWD(C)}
   6937 @end multitable
   6938 
   6939 @item @emph{Arguments}:
   6940 @multitable @columnfractions .15 .70
   6941 @item @var{C} @tab The type shall be @code{CHARACTER} and of default kind.
   6942 @item @var{STATUS} @tab (Optional) status flag. Returns 0 on success, 
   6943 a system specific and nonzero error code otherwise.
   6944 @end multitable
   6945 
   6946 @item @emph{Example}:
   6947 @smallexample
   6948 PROGRAM test_getcwd
   6949   CHARACTER(len=255) :: cwd
   6950   CALL getcwd(cwd)
   6951   WRITE(*,*) TRIM(cwd)
   6952 END PROGRAM
   6953 @end smallexample
   6954 
   6955 @item @emph{See also}:
   6956 @ref{CHDIR}
   6957 @end table
   6958 
   6959 
   6960 
   6961 @node GETENV
   6962 @section @code{GETENV} --- Get an environmental variable
   6963 @fnindex GETENV
   6964 @cindex environment variable
   6965 
   6966 @table @asis
   6967 @item @emph{Description}:
   6968 Get the @var{VALUE} of the environmental variable @var{NAME}.
   6969 
   6970 This intrinsic routine is provided for backwards compatibility with
   6971 GNU Fortran 77.  In new code, programmers should consider the use of
   6972 the @ref{GET_ENVIRONMENT_VARIABLE} intrinsic defined by the Fortran
   6973 2003 standard.
   6974 
   6975 Note that @code{GETENV} need not be thread-safe. It is the
   6976 responsibility of the user to ensure that the environment is not being
   6977 updated concurrently with a call to the @code{GETENV} intrinsic.
   6978 
   6979 @item @emph{Standard}:
   6980 GNU extension
   6981 
   6982 @item @emph{Class}:
   6983 Subroutine
   6984 
   6985 @item @emph{Syntax}:
   6986 @code{CALL GETENV(NAME, VALUE)}
   6987 
   6988 @item @emph{Arguments}:
   6989 @multitable @columnfractions .15 .70
   6990 @item @var{NAME}  @tab Shall be of type @code{CHARACTER} and of default kind.
   6991 @item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default kind.
   6992 @end multitable
   6993 
   6994 @item @emph{Return value}:
   6995 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is 
   6996 not large enough to hold the data, it is truncated. If @var{NAME}
   6997 is not set, @var{VALUE} will be filled with blanks.
   6998 
   6999 @item @emph{Example}:
   7000 @smallexample
   7001 PROGRAM test_getenv
   7002   CHARACTER(len=255) :: homedir
   7003   CALL getenv("HOME", homedir)
   7004   WRITE (*,*) TRIM(homedir)
   7005 END PROGRAM
   7006 @end smallexample
   7007 
   7008 @item @emph{See also}:
   7009 @ref{GET_ENVIRONMENT_VARIABLE}
   7010 @end table
   7011 
   7012 
   7013 
   7014 @node GET_ENVIRONMENT_VARIABLE
   7015 @section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable
   7016 @fnindex GET_ENVIRONMENT_VARIABLE
   7017 @cindex environment variable
   7018 
   7019 @table @asis
   7020 @item @emph{Description}:
   7021 Get the @var{VALUE} of the environmental variable @var{NAME}.
   7022 
   7023 Note that @code{GET_ENVIRONMENT_VARIABLE} need not be thread-safe. It
   7024 is the responsibility of the user to ensure that the environment is
   7025 not being updated concurrently with a call to the
   7026 @code{GET_ENVIRONMENT_VARIABLE} intrinsic.
   7027 
   7028 @item @emph{Standard}:
   7029 Fortran 2003 and later
   7030 
   7031 @item @emph{Class}:
   7032 Subroutine
   7033 
   7034 @item @emph{Syntax}:
   7035 @code{CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)}
   7036 
   7037 @item @emph{Arguments}:
   7038 @multitable @columnfractions .15 .70
   7039 @item @var{NAME}      @tab Shall be a scalar of type @code{CHARACTER}
   7040 and of default kind.
   7041 @item @var{VALUE}     @tab (Optional) Shall be a scalar of type @code{CHARACTER}
   7042 and of default kind.
   7043 @item @var{LENGTH}    @tab (Optional) Shall be a scalar of type @code{INTEGER}
   7044 and of default kind.
   7045 @item @var{STATUS}    @tab (Optional) Shall be a scalar of type @code{INTEGER}
   7046 and of default kind.
   7047 @item @var{TRIM_NAME} @tab (Optional) Shall be a scalar of type @code{LOGICAL}
   7048 and of default kind.
   7049 @end multitable
   7050 
   7051 @item @emph{Return value}:
   7052 Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is 
   7053 not large enough to hold the data, it is truncated. If @var{NAME}
   7054 is not set, @var{VALUE} will be filled with blanks. Argument @var{LENGTH}
   7055 contains the length needed for storing the environment variable @var{NAME}
   7056 or zero if it is not present. @var{STATUS} is -1 if @var{VALUE} is present
   7057 but too short for the environment variable; it is 1 if the environment
   7058 variable does not exist and 2 if the processor does not support environment
   7059 variables; in all other cases @var{STATUS} is zero. If @var{TRIM_NAME} is
   7060 present with the value @code{.FALSE.}, the trailing blanks in @var{NAME}
   7061 are significant; otherwise they are not part of the environment variable
   7062 name.
   7063 
   7064 @item @emph{Example}:
   7065 @smallexample
   7066 PROGRAM test_getenv
   7067   CHARACTER(len=255) :: homedir
   7068   CALL get_environment_variable("HOME", homedir)
   7069   WRITE (*,*) TRIM(homedir)
   7070 END PROGRAM
   7071 @end smallexample
   7072 @end table
   7073 
   7074 
   7075 
   7076 @node GETGID
   7077 @section @code{GETGID} --- Group ID function
   7078 @fnindex GETGID
   7079 @cindex system, group ID
   7080 
   7081 @table @asis
   7082 @item @emph{Description}:
   7083 Returns the numerical group ID of the current process.
   7084 
   7085 @item @emph{Standard}:
   7086 GNU extension
   7087 
   7088 @item @emph{Class}:
   7089 Function
   7090 
   7091 @item @emph{Syntax}:
   7092 @code{RESULT = GETGID()}
   7093 
   7094 @item @emph{Return value}:
   7095 The return value of @code{GETGID} is an @code{INTEGER} of the default
   7096 kind.
   7097 
   7098 
   7099 @item @emph{Example}:
   7100 See @code{GETPID} for an example.
   7101 
   7102 @item @emph{See also}:
   7103 @ref{GETPID}, @ref{GETUID}
   7104 @end table
   7105 
   7106 
   7107 
   7108 @node GETLOG
   7109 @section @code{GETLOG} --- Get login name
   7110 @fnindex GETLOG
   7111 @cindex system, login name
   7112 @cindex login name
   7113 
   7114 @table @asis
   7115 @item @emph{Description}:
   7116 Gets the username under which the program is running.
   7117 
   7118 @item @emph{Standard}:
   7119 GNU extension
   7120 
   7121 @item @emph{Class}:
   7122 Subroutine
   7123 
   7124 @item @emph{Syntax}:
   7125 @code{CALL GETLOG(C)}
   7126 
   7127 @item @emph{Arguments}:
   7128 @multitable @columnfractions .15 .70
   7129 @item @var{C} @tab Shall be of type @code{CHARACTER} and of default kind.
   7130 @end multitable
   7131 
   7132 @item @emph{Return value}:
   7133 Stores the current user name in @var{LOGIN}.  (On systems where POSIX
   7134 functions @code{geteuid} and @code{getpwuid} are not available, and 
   7135 the @code{getlogin} function is not implemented either, this will
   7136 return a blank string.)
   7137 
   7138 @item @emph{Example}:
   7139 @smallexample
   7140 PROGRAM TEST_GETLOG
   7141   CHARACTER(32) :: login
   7142   CALL GETLOG(login)
   7143   WRITE(*,*) login
   7144 END PROGRAM
   7145 @end smallexample
   7146 
   7147 @item @emph{See also}:
   7148 @ref{GETUID}
   7149 @end table
   7150 
   7151 
   7152 
   7153 @node GETPID
   7154 @section @code{GETPID} --- Process ID function
   7155 @fnindex GETPID
   7156 @cindex system, process ID
   7157 @cindex process ID
   7158 
   7159 @table @asis
   7160 @item @emph{Description}:
   7161 Returns the numerical process identifier of the current process.
   7162 
   7163 @item @emph{Standard}:
   7164 GNU extension
   7165 
   7166 @item @emph{Class}:
   7167 Function
   7168 
   7169 @item @emph{Syntax}:
   7170 @code{RESULT = GETPID()}
   7171 
   7172 @item @emph{Return value}:
   7173 The return value of @code{GETPID} is an @code{INTEGER} of the default
   7174 kind.
   7175 
   7176 
   7177 @item @emph{Example}:
   7178 @smallexample
   7179 program info
   7180   print *, "The current process ID is ", getpid()
   7181   print *, "Your numerical user ID is ", getuid()
   7182   print *, "Your numerical group ID is ", getgid()
   7183 end program info
   7184 @end smallexample
   7185 
   7186 @item @emph{See also}:
   7187 @ref{GETGID}, @ref{GETUID}
   7188 @end table
   7189 
   7190 
   7191 
   7192 @node GETUID
   7193 @section @code{GETUID} --- User ID function
   7194 @fnindex GETUID
   7195 @cindex system, user ID
   7196 @cindex user id
   7197 
   7198 @table @asis
   7199 @item @emph{Description}:
   7200 Returns the numerical user ID of the current process.
   7201 
   7202 @item @emph{Standard}:
   7203 GNU extension
   7204 
   7205 @item @emph{Class}:
   7206 Function
   7207 
   7208 @item @emph{Syntax}:
   7209 @code{RESULT = GETUID()}
   7210 
   7211 @item @emph{Return value}:
   7212 The return value of @code{GETUID} is an @code{INTEGER} of the default
   7213 kind.
   7214 
   7215 
   7216 @item @emph{Example}:
   7217 See @code{GETPID} for an example.
   7218 
   7219 @item @emph{See also}:
   7220 @ref{GETPID}, @ref{GETLOG}
   7221 @end table
   7222 
   7223 
   7224 
   7225 @node GMTIME
   7226 @section @code{GMTIME} --- Convert time to GMT info
   7227 @fnindex GMTIME
   7228 @cindex time, conversion to GMT info
   7229 
   7230 @table @asis
   7231 @item @emph{Description}:
   7232 Given a system time value @var{TIME} (as provided by the @ref{TIME}
   7233 intrinsic), fills @var{VALUES} with values extracted from it appropriate
   7234 to the UTC time zone (Universal Coordinated Time, also known in some
   7235 countries as GMT, Greenwich Mean Time), using @code{gmtime(3)}.
   7236 
   7237 This intrinsic routine is provided for backwards compatibility with 
   7238 GNU Fortran 77.  In new code, programmers should consider the use of 
   7239 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   7240 standard.
   7241 
   7242 @item @emph{Standard}:
   7243 GNU extension
   7244 
   7245 @item @emph{Class}:
   7246 Subroutine
   7247 
   7248 @item @emph{Syntax}:
   7249 @code{CALL GMTIME(TIME, VALUES)}
   7250 
   7251 @item @emph{Arguments}:
   7252 @multitable @columnfractions .15 .70
   7253 @item @var{TIME}   @tab An @code{INTEGER} scalar expression
   7254 corresponding to a system time, with @code{INTENT(IN)}.
   7255 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
   7256 with @code{INTENT(OUT)}.
   7257 @end multitable
   7258 
   7259 @item @emph{Return value}:
   7260 The elements of @var{VALUES} are assigned as follows:
   7261 @enumerate
   7262 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
   7263 seconds
   7264 @item Minutes after the hour, range 0--59
   7265 @item Hours past midnight, range 0--23
   7266 @item Day of month, range 1--31
   7267 @item Number of months since January, range 0--11
   7268 @item Years since 1900
   7269 @item Number of days since Sunday, range 0--6
   7270 @item Days since January 1, range 0--365
   7271 @item Daylight savings indicator: positive if daylight savings is in
   7272 effect, zero if not, and negative if the information is not available.
   7273 @end enumerate
   7274 
   7275 @item @emph{See also}:
   7276 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
   7277 
   7278 @end table
   7279 
   7280 
   7281 
   7282 @node HOSTNM
   7283 @section @code{HOSTNM} --- Get system host name
   7284 @fnindex HOSTNM
   7285 @cindex system, host name
   7286 
   7287 @table @asis
   7288 @item @emph{Description}:
   7289 Retrieves the host name of the system on which the program is running.
   7290 
   7291 This intrinsic is provided in both subroutine and function forms; however,
   7292 only one form can be used in any given program unit.
   7293 
   7294 @item @emph{Standard}:
   7295 GNU extension
   7296 
   7297 @item @emph{Class}:
   7298 Subroutine, function
   7299 
   7300 @item @emph{Syntax}:
   7301 @multitable @columnfractions .80
   7302 @item @code{CALL HOSTNM(C [, STATUS])}
   7303 @item @code{STATUS = HOSTNM(NAME)}
   7304 @end multitable
   7305 
   7306 @item @emph{Arguments}:
   7307 @multitable @columnfractions .15 .70
   7308 @item @var{C}    @tab Shall of type @code{CHARACTER} and of default kind.
   7309 @item @var{STATUS}  @tab (Optional) status flag of type @code{INTEGER}.
   7310 Returns 0 on success, or a system specific error code otherwise.
   7311 @end multitable
   7312 
   7313 @item @emph{Return value}:
   7314 In either syntax, @var{NAME} is set to the current hostname if it can
   7315 be obtained, or to a blank string otherwise.
   7316 
   7317 @end table
   7318 
   7319 
   7320 
   7321 @node HUGE
   7322 @section @code{HUGE} --- Largest number of a kind
   7323 @fnindex HUGE
   7324 @cindex limits, largest number
   7325 @cindex model representation, largest number
   7326 
   7327 @table @asis
   7328 @item @emph{Description}:
   7329 @code{HUGE(X)} returns the largest number that is not an infinity in
   7330 the model of the type of @code{X}.
   7331 
   7332 @item @emph{Standard}:
   7333 Fortran 95 and later
   7334 
   7335 @item @emph{Class}:
   7336 Inquiry function
   7337 
   7338 @item @emph{Syntax}:
   7339 @code{RESULT = HUGE(X)}
   7340 
   7341 @item @emph{Arguments}:
   7342 @multitable @columnfractions .15 .70
   7343 @item @var{X} @tab Shall be of type @code{REAL} or @code{INTEGER}.
   7344 @end multitable
   7345 
   7346 @item @emph{Return value}:
   7347 The return value is of the same type and kind as @var{X}
   7348 
   7349 @item @emph{Example}:
   7350 @smallexample
   7351 program test_huge_tiny
   7352   print *, huge(0), huge(0.0), huge(0.0d0)
   7353   print *, tiny(0.0), tiny(0.0d0)
   7354 end program test_huge_tiny
   7355 @end smallexample
   7356 @end table
   7357 
   7358 
   7359 
   7360 @node HYPOT
   7361 @section @code{HYPOT} --- Euclidean distance function
   7362 @fnindex HYPOT
   7363 @cindex Euclidean distance
   7364 
   7365 @table @asis
   7366 @item @emph{Description}:
   7367 @code{HYPOT(X,Y)} is the Euclidean distance function. It is equal to
   7368 @math{\sqrt{X^2 + Y^2}}, without undue underflow or overflow.
   7369 
   7370 @item @emph{Standard}:
   7371 Fortran 2008 and later
   7372 
   7373 @item @emph{Class}:
   7374 Elemental function
   7375 
   7376 @item @emph{Syntax}:
   7377 @code{RESULT = HYPOT(X, Y)}
   7378 
   7379 @item @emph{Arguments}:
   7380 @multitable @columnfractions .15 .70
   7381 @item @var{X} @tab The type shall be @code{REAL}.
   7382 @item @var{Y} @tab The type and kind type parameter shall be the same as
   7383 @var{X}.
   7384 @end multitable
   7385 
   7386 @item @emph{Return value}:
   7387 The return value has the same type and kind type parameter as @var{X}.
   7388 
   7389 @item @emph{Example}:
   7390 @smallexample
   7391 program test_hypot
   7392   real(4) :: x = 1.e0_4, y = 0.5e0_4
   7393   x = hypot(x,y)
   7394 end program test_hypot
   7395 @end smallexample
   7396 @end table
   7397 
   7398 
   7399 
   7400 @node IACHAR
   7401 @section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence 
   7402 @fnindex IACHAR
   7403 @cindex @acronym{ASCII} collating sequence
   7404 @cindex collating sequence, @acronym{ASCII}
   7405 @cindex conversion, to integer
   7406 
   7407 @table @asis
   7408 @item @emph{Description}:
   7409 @code{IACHAR(C)} returns the code for the @acronym{ASCII} character
   7410 in the first character position of @code{C}.
   7411 
   7412 @item @emph{Standard}:
   7413 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   7414 
   7415 @item @emph{Class}:
   7416 Elemental function
   7417 
   7418 @item @emph{Syntax}:
   7419 @code{RESULT = IACHAR(C [, KIND])}
   7420 
   7421 @item @emph{Arguments}:
   7422 @multitable @columnfractions .15 .70
   7423 @item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
   7424 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   7425 expression indicating the kind parameter of the result.
   7426 @end multitable
   7427 
   7428 @item @emph{Return value}:
   7429 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   7430 @var{KIND} is absent, the return value is of default integer kind.
   7431 
   7432 @item @emph{Example}:
   7433 @smallexample
   7434 program test_iachar
   7435   integer i
   7436   i = iachar(' ')
   7437 end program test_iachar
   7438 @end smallexample
   7439 
   7440 @item @emph{Note}:
   7441 See @ref{ICHAR} for a discussion of converting between numerical values
   7442 and formatted string representations.
   7443 
   7444 @item @emph{See also}:
   7445 @ref{ACHAR}, @ref{CHAR}, @ref{ICHAR}
   7446 
   7447 @end table
   7448 
   7449 
   7450 
   7451 @node IALL
   7452 @section @code{IALL} --- Bitwise AND of array elements
   7453 @fnindex IALL
   7454 @cindex array, AND
   7455 @cindex bits, AND of array elements
   7456 
   7457 @table @asis
   7458 @item @emph{Description}:
   7459 Reduces with bitwise AND the elements of @var{ARRAY} along dimension @var{DIM}
   7460 if the corresponding element in @var{MASK} is @code{TRUE}.
   7461 
   7462 @item @emph{Standard}:
   7463 Fortran 2008 and later
   7464 
   7465 @item @emph{Class}:
   7466 Transformational function
   7467 
   7468 @item @emph{Syntax}:
   7469 @multitable @columnfractions .80
   7470 @item @code{RESULT = IALL(ARRAY[, MASK])}
   7471 @item @code{RESULT = IALL(ARRAY, DIM[, MASK])}
   7472 @end multitable
   7473 
   7474 @item @emph{Arguments}:
   7475 @multitable @columnfractions .15 .70
   7476 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
   7477 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   7478 @code{INTEGER} with a value in the range from 1 to n, where n 
   7479 equals the rank of @var{ARRAY}.
   7480 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   7481 and either be a scalar or an array of the same shape as @var{ARRAY}.
   7482 @end multitable
   7483 
   7484 @item @emph{Return value}:
   7485 The result is of the same type as @var{ARRAY}.
   7486 
   7487 If @var{DIM} is absent, a scalar with the bitwise ALL of all elements in
   7488 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
   7489 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
   7490 dimension @var{DIM} dropped is returned.
   7491 
   7492 @item @emph{Example}:
   7493 @smallexample
   7494 PROGRAM test_iall
   7495   INTEGER(1) :: a(2)
   7496 
   7497   a(1) = b'00100100'
   7498   a(2) = b'01101010'
   7499 
   7500   ! prints 00100000
   7501   PRINT '(b8.8)', IALL(a)
   7502 END PROGRAM
   7503 @end smallexample
   7504 
   7505 @item @emph{See also}:
   7506 @ref{IANY}, @ref{IPARITY}, @ref{IAND}
   7507 @end table
   7508 
   7509 
   7510 
   7511 @node IAND
   7512 @section @code{IAND} --- Bitwise logical and
   7513 @fnindex IAND
   7514 @fnindex BIAND
   7515 @fnindex IIAND
   7516 @fnindex JIAND
   7517 @fnindex KIAND
   7518 @cindex bitwise logical and
   7519 @cindex logical and, bitwise
   7520 
   7521 @table @asis
   7522 @item @emph{Description}:
   7523 Bitwise logical @code{AND}.
   7524 
   7525 @item @emph{Standard}:
   7526 Fortran 95 and later, has overloads that are GNU extensions
   7527 
   7528 @item @emph{Class}:
   7529 Elemental function
   7530 
   7531 @item @emph{Syntax}:
   7532 @code{RESULT = IAND(I, J)}
   7533 
   7534 @item @emph{Arguments}:
   7535 @multitable @columnfractions .15 .70
   7536 @item @var{I} @tab The type shall be @code{INTEGER} or a boz-literal-constant.
   7537 @item @var{J} @tab The type shall be @code{INTEGER} with the same
   7538 kind type parameter as @var{I} or a boz-literal-constant.
   7539 @var{I} and @var{J} shall not both be boz-literal-constants.
   7540 @end multitable
   7541 
   7542 @item @emph{Return value}:
   7543 The return type is @code{INTEGER} with the kind type parameter of the
   7544 arguments.
   7545 A boz-literal-constant is converted to an @code{INTEGER} with the kind
   7546 type parameter of the other argument as-if a call to @ref{INT} occurred.
   7547 
   7548 @item @emph{Example}:
   7549 @smallexample
   7550 PROGRAM test_iand
   7551   INTEGER :: a, b
   7552   DATA a / Z'F' /, b / Z'3' /
   7553   WRITE (*,*) IAND(a, b)
   7554 END PROGRAM
   7555 @end smallexample
   7556 
   7557 @item @emph{Specific names}:
   7558 @multitable @columnfractions .20 .20 .20 .25
   7559 @item Name            @tab Argument            @tab Return type       @tab Standard
   7560 @item @code{IAND(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   7561 @item @code{BIAND(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7562 @item @code{IIAND(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7563 @item @code{JIAND(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7564 @item @code{KIAND(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7565 @end multitable
   7566 
   7567 @item @emph{See also}:
   7568 @ref{IOR}, @ref{IEOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
   7569 
   7570 @end table
   7571 
   7572 
   7573 
   7574 @node IANY
   7575 @section @code{IANY} --- Bitwise OR of array elements
   7576 @fnindex IANY
   7577 @cindex array, OR
   7578 @cindex bits, OR of array elements
   7579 
   7580 @table @asis
   7581 @item @emph{Description}:
   7582 Reduces with bitwise OR (inclusive or) the elements of @var{ARRAY} along
   7583 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
   7584 
   7585 @item @emph{Standard}:
   7586 Fortran 2008 and later
   7587 
   7588 @item @emph{Class}:
   7589 Transformational function
   7590 
   7591 @item @emph{Syntax}:
   7592 @multitable @columnfractions .80
   7593 @item @code{RESULT = IANY(ARRAY[, MASK])}
   7594 @item @code{RESULT = IANY(ARRAY, DIM[, MASK])}
   7595 @end multitable
   7596 
   7597 @item @emph{Arguments}:
   7598 @multitable @columnfractions .15 .70
   7599 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
   7600 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   7601 @code{INTEGER} with a value in the range from 1 to n, where n 
   7602 equals the rank of @var{ARRAY}.
   7603 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   7604 and either be a scalar or an array of the same shape as @var{ARRAY}.
   7605 @end multitable
   7606 
   7607 @item @emph{Return value}:
   7608 The result is of the same type as @var{ARRAY}.
   7609 
   7610 If @var{DIM} is absent, a scalar with the bitwise OR of all elements in
   7611 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
   7612 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
   7613 dimension @var{DIM} dropped is returned.
   7614 
   7615 @item @emph{Example}:
   7616 @smallexample
   7617 PROGRAM test_iany
   7618   INTEGER(1) :: a(2)
   7619 
   7620   a(1) = b'00100100'
   7621   a(2) = b'01101010'
   7622 
   7623   ! prints 01101110
   7624   PRINT '(b8.8)', IANY(a)
   7625 END PROGRAM
   7626 @end smallexample
   7627 
   7628 @item @emph{See also}:
   7629 @ref{IPARITY}, @ref{IALL}, @ref{IOR}
   7630 @end table
   7631 
   7632 
   7633 
   7634 @node IARGC
   7635 @section @code{IARGC} --- Get the number of command line arguments
   7636 @fnindex IARGC
   7637 @cindex command-line arguments
   7638 @cindex command-line arguments, number of
   7639 @cindex arguments, to program
   7640 
   7641 @table @asis
   7642 @item @emph{Description}:
   7643 @code{IARGC} returns the number of arguments passed on the
   7644 command line when the containing program was invoked.
   7645 
   7646 This intrinsic routine is provided for backwards compatibility with 
   7647 GNU Fortran 77.  In new code, programmers should consider the use of 
   7648 the @ref{COMMAND_ARGUMENT_COUNT} intrinsic defined by the Fortran 2003 
   7649 standard.
   7650 
   7651 @item @emph{Standard}:
   7652 GNU extension
   7653 
   7654 @item @emph{Class}:
   7655 Function
   7656 
   7657 @item @emph{Syntax}:
   7658 @code{RESULT = IARGC()}
   7659 
   7660 @item @emph{Arguments}:
   7661 None.
   7662 
   7663 @item @emph{Return value}:
   7664 The number of command line arguments, type @code{INTEGER(4)}.
   7665 
   7666 @item @emph{Example}:
   7667 See @ref{GETARG}
   7668 
   7669 @item @emph{See also}:
   7670 GNU Fortran 77 compatibility subroutine: @ref{GETARG}
   7671 
   7672 Fortran 2003 functions and subroutines: @ref{GET_COMMAND},
   7673 @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
   7674 @end table
   7675 
   7676 
   7677 
   7678 @node IBCLR
   7679 @section @code{IBCLR} --- Clear bit
   7680 @fnindex IBCLR
   7681 @fnindex BBCLR
   7682 @fnindex IIBCLR
   7683 @fnindex JIBCLR
   7684 @fnindex KIBCLR
   7685 @cindex bits, unset
   7686 @cindex bits, clear
   7687 
   7688 @table @asis
   7689 @item @emph{Description}:
   7690 @code{IBCLR} returns the value of @var{I} with the bit at position
   7691 @var{POS} set to zero.
   7692 
   7693 @item @emph{Standard}:
   7694 Fortran 95 and later, has overloads that are GNU extensions
   7695 
   7696 @item @emph{Class}:
   7697 Elemental function
   7698 
   7699 @item @emph{Syntax}:
   7700 @code{RESULT = IBCLR(I, POS)}
   7701 
   7702 @item @emph{Arguments}:
   7703 @multitable @columnfractions .15 .70
   7704 @item @var{I} @tab The type shall be @code{INTEGER}.
   7705 @item @var{POS} @tab The type shall be @code{INTEGER}.
   7706 @end multitable
   7707 
   7708 @item @emph{Return value}:
   7709 The return value is of type @code{INTEGER} and of the same kind as
   7710 @var{I}.
   7711 
   7712 @item @emph{Specific names}:
   7713 @multitable @columnfractions .20 .20 .20 .25
   7714 @item Name            @tab Argument            @tab Return type       @tab Standard
   7715 @item @code{IBCLR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   7716 @item @code{BBCLR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7717 @item @code{IIBCLR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7718 @item @code{JIBCLR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7719 @item @code{KIBCLR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7720 @end multitable
   7721 
   7722 @item @emph{See also}:
   7723 @ref{IBITS}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
   7724 
   7725 @end table
   7726 
   7727 
   7728 
   7729 @node IBITS
   7730 @section @code{IBITS} --- Bit extraction
   7731 @fnindex IBITS
   7732 @fnindex BBITS
   7733 @fnindex IIBITS
   7734 @fnindex JIBITS
   7735 @fnindex KIBITS
   7736 @cindex bits, get
   7737 @cindex bits, extract
   7738 
   7739 @table @asis
   7740 @item @emph{Description}:
   7741 @code{IBITS} extracts a field of length @var{LEN} from @var{I},
   7742 starting from bit position @var{POS} and extending left for @var{LEN}
   7743 bits.  The result is right-justified and the remaining bits are
   7744 zeroed.  The value of @code{POS+LEN} must be less than or equal to the
   7745 value @code{BIT_SIZE(I)}.
   7746 
   7747 @item @emph{Standard}:
   7748 Fortran 95 and later, has overloads that are GNU extensions
   7749 
   7750 @item @emph{Class}:
   7751 Elemental function
   7752 
   7753 @item @emph{Syntax}:
   7754 @code{RESULT = IBITS(I, POS, LEN)}
   7755 
   7756 @item @emph{Arguments}:
   7757 @multitable @columnfractions .15 .70
   7758 @item @var{I}   @tab The type shall be @code{INTEGER}.
   7759 @item @var{POS} @tab The type shall be @code{INTEGER}.
   7760 @item @var{LEN} @tab The type shall be @code{INTEGER}.
   7761 @end multitable
   7762 
   7763 @item @emph{Return value}:
   7764 The return value is of type @code{INTEGER} and of the same kind as
   7765 @var{I}.
   7766 
   7767 @item @emph{Specific names}:
   7768 @multitable @columnfractions .20 .20 .20 .25
   7769 @item Name            @tab Argument            @tab Return type       @tab Standard
   7770 @item @code{IBITS(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   7771 @item @code{BBITS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7772 @item @code{IIBITS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7773 @item @code{JIBITS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7774 @item @code{KIBITS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7775 @end multitable
   7776 
   7777 @item @emph{See also}:
   7778 @ref{BIT_SIZE}, @ref{IBCLR}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
   7779 @end table
   7780 
   7781 
   7782 
   7783 @node IBSET
   7784 @section @code{IBSET} --- Set bit
   7785 @fnindex IBSET
   7786 @fnindex BBSET
   7787 @fnindex IIBSET
   7788 @fnindex JIBSET
   7789 @fnindex KIBSET
   7790 @cindex bits, set
   7791 
   7792 @table @asis
   7793 @item @emph{Description}:
   7794 @code{IBSET} returns the value of @var{I} with the bit at position
   7795 @var{POS} set to one.
   7796 
   7797 @item @emph{Standard}:
   7798 Fortran 95 and later, has overloads that are GNU extensions
   7799 
   7800 @item @emph{Class}:
   7801 Elemental function
   7802 
   7803 @item @emph{Syntax}:
   7804 @code{RESULT = IBSET(I, POS)}
   7805 
   7806 @item @emph{Arguments}:
   7807 @multitable @columnfractions .15 .70
   7808 @item @var{I} @tab The type shall be @code{INTEGER}.
   7809 @item @var{POS} @tab The type shall be @code{INTEGER}.
   7810 @end multitable
   7811 
   7812 @item @emph{Return value}:
   7813 The return value is of type @code{INTEGER} and of the same kind as
   7814 @var{I}.
   7815 
   7816 @item @emph{Specific names}:
   7817 @multitable @columnfractions .20 .20 .20 .25
   7818 @item Name            @tab Argument            @tab Return type       @tab Standard
   7819 @item @code{IBSET(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   7820 @item @code{BBSET(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   7821 @item @code{IIBSET(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   7822 @item @code{JIBSET(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   7823 @item @code{KIBSET(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   7824 @end multitable
   7825 
   7826 @item @emph{See also}:
   7827 @ref{IBCLR}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
   7828 
   7829 @end table
   7830 
   7831 
   7832 
   7833 @node ICHAR
   7834 @section @code{ICHAR} --- Character-to-integer conversion function
   7835 @fnindex ICHAR
   7836 @cindex conversion, to integer
   7837 
   7838 @table @asis
   7839 @item @emph{Description}:
   7840 @code{ICHAR(C)} returns the code for the character in the first character
   7841 position of @code{C} in the system's native character set.
   7842 The correspondence between characters and their codes is not necessarily
   7843 the same across different GNU Fortran implementations.
   7844 
   7845 @item @emph{Standard}:
   7846 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   7847 
   7848 @item @emph{Class}:
   7849 Elemental function
   7850 
   7851 @item @emph{Syntax}:
   7852 @code{RESULT = ICHAR(C [, KIND])}
   7853 
   7854 @item @emph{Arguments}:
   7855 @multitable @columnfractions .15 .70
   7856 @item @var{C}    @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
   7857 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   7858 expression indicating the kind parameter of the result.
   7859 @end multitable
   7860 
   7861 @item @emph{Return value}:
   7862 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   7863 @var{KIND} is absent, the return value is of default integer kind.
   7864 
   7865 @item @emph{Example}:
   7866 @smallexample
   7867 program test_ichar
   7868   integer i
   7869   i = ichar(' ')
   7870 end program test_ichar
   7871 @end smallexample
   7872 
   7873 @item @emph{Specific names}:
   7874 @multitable @columnfractions .20 .20 .20 .25
   7875 @item Name             @tab Argument             @tab Return type       @tab Standard
   7876 @item @code{ICHAR(C)}  @tab @code{CHARACTER C}   @tab @code{INTEGER(4)}    @tab Fortran 77 and later
   7877 @end multitable
   7878 
   7879 @item @emph{Note}:
   7880 No intrinsic exists to convert between a numeric value and a formatted
   7881 character string representation -- for instance, given the
   7882 @code{CHARACTER} value @code{'154'}, obtaining an @code{INTEGER} or
   7883 @code{REAL} value with the value 154, or vice versa. Instead, this
   7884 functionality is provided by internal-file I/O, as in the following
   7885 example:
   7886 @smallexample
   7887 program read_val
   7888   integer value
   7889   character(len=10) string, string2
   7890   string = '154'
   7891   
   7892   ! Convert a string to a numeric value
   7893   read (string,'(I10)') value
   7894   print *, value
   7895   
   7896   ! Convert a value to a formatted string
   7897   write (string2,'(I10)') value
   7898   print *, string2
   7899 end program read_val
   7900 @end smallexample
   7901 
   7902 @item @emph{See also}:
   7903 @ref{ACHAR}, @ref{CHAR}, @ref{IACHAR}
   7904 
   7905 @end table
   7906 
   7907 
   7908 
   7909 @node IDATE
   7910 @section @code{IDATE} --- Get current local time subroutine (day/month/year) 
   7911 @fnindex IDATE
   7912 @cindex date, current
   7913 @cindex current date
   7914 
   7915 @table @asis
   7916 @item @emph{Description}:
   7917 @code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the  
   7918 current local time. The day (in the range 1-31), month (in the range 1-12), 
   7919 and year appear in elements 1, 2, and 3 of @var{VALUES}, respectively. 
   7920 The year has four significant digits.
   7921 
   7922 This intrinsic routine is provided for backwards compatibility with 
   7923 GNU Fortran 77.  In new code, programmers should consider the use of 
   7924 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   7925 standard.
   7926 
   7927 @item @emph{Standard}:
   7928 GNU extension
   7929 
   7930 @item @emph{Class}:
   7931 Subroutine
   7932 
   7933 @item @emph{Syntax}:
   7934 @code{CALL IDATE(VALUES)}
   7935 
   7936 @item @emph{Arguments}:
   7937 @multitable @columnfractions .15 .70
   7938 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)} and
   7939 the kind shall be the default integer kind.
   7940 @end multitable
   7941 
   7942 @item @emph{Return value}:
   7943 Does not return anything.
   7944 
   7945 @item @emph{Example}:
   7946 @smallexample
   7947 program test_idate
   7948   integer, dimension(3) :: tarray
   7949   call idate(tarray)
   7950   print *, tarray(1)
   7951   print *, tarray(2)
   7952   print *, tarray(3)
   7953 end program test_idate
   7954 @end smallexample
   7955 
   7956 @item @emph{See also}:
   7957 @ref{DATE_AND_TIME}
   7958 @end table
   7959 
   7960 
   7961 @node IEOR
   7962 @section @code{IEOR} --- Bitwise logical exclusive or
   7963 @fnindex IEOR
   7964 @fnindex BIEOR
   7965 @fnindex IIEOR
   7966 @fnindex JIEOR
   7967 @fnindex KIEOR
   7968 @cindex bitwise logical exclusive or
   7969 @cindex logical exclusive or, bitwise
   7970 
   7971 @table @asis
   7972 @item @emph{Description}:
   7973 @code{IEOR} returns the bitwise Boolean exclusive-OR of @var{I} and
   7974 @var{J}.
   7975 
   7976 @item @emph{Standard}:
   7977 Fortran 95 and later, has overloads that are GNU extensions
   7978 
   7979 @item @emph{Class}:
   7980 Elemental function
   7981 
   7982 @item @emph{Syntax}:
   7983 @code{RESULT = IEOR(I, J)}
   7984 
   7985 @item @emph{Arguments}:
   7986 @multitable @columnfractions .15 .70
   7987 @item @var{I} @tab The type shall be @code{INTEGER} or a boz-literal-constant.
   7988 @item @var{J} @tab The type shall be @code{INTEGER} with the same
   7989 kind type parameter as @var{I} or a boz-literal-constant.
   7990 @var{I} and @var{J} shall not both be boz-literal-constants.
   7991 @end multitable
   7992 
   7993 @item @emph{Return value}:
   7994 The return type is @code{INTEGER} with the kind type parameter of the
   7995 arguments.
   7996 A boz-literal-constant is converted to an @code{INTEGER} with the kind
   7997 type parameter of the other argument as-if a call to @ref{INT} occurred.
   7998 
   7999 @item @emph{Specific names}:
   8000 @multitable @columnfractions .20 .20 .20 .25
   8001 @item Name            @tab Argument            @tab Return type       @tab Standard
   8002 @item @code{IEOR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   8003 @item @code{BIEOR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8004 @item @code{IIEOR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8005 @item @code{JIEOR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8006 @item @code{KIEOR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8007 @end multitable
   8008 
   8009 @item @emph{See also}:
   8010 @ref{IOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
   8011 @end table
   8012 
   8013 
   8014 
   8015 @node IERRNO
   8016 @section @code{IERRNO} --- Get the last system error number
   8017 @fnindex IERRNO
   8018 @cindex system, error handling
   8019 
   8020 @table @asis
   8021 @item @emph{Description}:
   8022 Returns the last system error number, as given by the C @code{errno}
   8023 variable.
   8024 
   8025 @item @emph{Standard}:
   8026 GNU extension
   8027 
   8028 @item @emph{Class}:
   8029 Function
   8030 
   8031 @item @emph{Syntax}:
   8032 @code{RESULT = IERRNO()}
   8033 
   8034 @item @emph{Arguments}:
   8035 None.
   8036 
   8037 @item @emph{Return value}:
   8038 The return value is of type @code{INTEGER} and of the default integer
   8039 kind.
   8040 
   8041 @item @emph{See also}:
   8042 @ref{PERROR}
   8043 @end table
   8044 
   8045 
   8046 
   8047 @node IMAGE_INDEX
   8048 @section @code{IMAGE_INDEX} --- Function that converts a cosubscript to an image index
   8049 @fnindex IMAGE_INDEX
   8050 @cindex coarray, @code{IMAGE_INDEX}
   8051 @cindex images, cosubscript to image index conversion
   8052 
   8053 @table @asis
   8054 @item @emph{Description}:
   8055 Returns the image index belonging to a cosubscript.
   8056 
   8057 @item @emph{Standard}:
   8058 Fortran 2008 and later
   8059 
   8060 @item @emph{Class}:
   8061 Inquiry function.
   8062 
   8063 @item @emph{Syntax}:
   8064 @code{RESULT = IMAGE_INDEX(COARRAY, SUB)}
   8065 
   8066 @item @emph{Arguments}: None.
   8067 @multitable @columnfractions .15 .70
   8068 @item @var{COARRAY} @tab Coarray of any type.
   8069 @item @var{SUB}     @tab default integer rank-1 array of a size equal to
   8070 the corank of @var{COARRAY}.
   8071 @end multitable
   8072 
   8073 
   8074 @item @emph{Return value}:
   8075 Scalar default integer with the value of the image index which corresponds
   8076 to the cosubscripts. For invalid cosubscripts the result is zero.
   8077 
   8078 @item @emph{Example}:
   8079 @smallexample
   8080 INTEGER :: array[2,-1:4,8,*]
   8081 ! Writes  28 (or 0 if there are fewer than 28 images)
   8082 WRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])
   8083 @end smallexample
   8084 
   8085 @item @emph{See also}:
   8086 @ref{THIS_IMAGE}, @ref{NUM_IMAGES}
   8087 @end table
   8088 
   8089 
   8090 
   8091 @node INDEX intrinsic
   8092 @section @code{INDEX} --- Position of a substring within a string
   8093 @fnindex INDEX
   8094 @cindex substring position
   8095 @cindex string, find substring
   8096 
   8097 @table @asis
   8098 @item @emph{Description}:
   8099 Returns the position of the start of the first occurrence of string
   8100 @var{SUBSTRING} as a substring in @var{STRING}, counting from one.  If
   8101 @var{SUBSTRING} is not present in @var{STRING}, zero is returned.  If 
   8102 the @var{BACK} argument is present and true, the return value is the
   8103 start of the last occurrence rather than the first.
   8104 
   8105 @item @emph{Standard}:
   8106 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
   8107 
   8108 @item @emph{Class}:
   8109 Elemental function
   8110 
   8111 @item @emph{Syntax}:
   8112 @code{RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])}
   8113 
   8114 @item @emph{Arguments}:
   8115 @multitable @columnfractions .15 .70
   8116 @item @var{STRING} @tab Shall be a scalar @code{CHARACTER}, with
   8117 @code{INTENT(IN)}
   8118 @item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER}, with
   8119 @code{INTENT(IN)}
   8120 @item @var{BACK} @tab (Optional) Shall be a scalar @code{LOGICAL}, with
   8121 @code{INTENT(IN)}
   8122 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   8123 expression indicating the kind parameter of the result.
   8124 @end multitable
   8125 
   8126 @item @emph{Return value}:
   8127 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   8128 @var{KIND} is absent, the return value is of default integer kind.
   8129 
   8130 @item @emph{Specific names}:
   8131 @multitable @columnfractions .20 .20 .20 .25
   8132 @item Name                            @tab Argument           @tab Return type       @tab Standard
   8133 @item @code{INDEX(STRING, SUBSTRING)} @tab @code{CHARACTER}   @tab @code{INTEGER(4)} @tab Fortran 77 and later
   8134 @end multitable
   8135 
   8136 @item @emph{See also}:
   8137 @ref{SCAN}, @ref{VERIFY}
   8138 @end table
   8139 
   8140 
   8141 
   8142 @node INT
   8143 @section @code{INT} --- Convert to integer type
   8144 @fnindex INT
   8145 @fnindex IFIX
   8146 @fnindex IDINT
   8147 @cindex conversion, to integer
   8148 
   8149 @table @asis
   8150 @item @emph{Description}:
   8151 Convert to integer type
   8152 
   8153 @item @emph{Standard}:
   8154 Fortran 77 and later
   8155 
   8156 @item @emph{Class}:
   8157 Elemental function
   8158 
   8159 @item @emph{Syntax}:
   8160 @code{RESULT = INT(A [, KIND))}
   8161 
   8162 @item @emph{Arguments}:
   8163 @multitable @columnfractions .15 .70
   8164 @item @var{A}    @tab Shall be of type @code{INTEGER},
   8165 @code{REAL}, or @code{COMPLEX}.
   8166 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   8167 expression indicating the kind parameter of the result.
   8168 @end multitable
   8169 
   8170 @item @emph{Return value}:
   8171 These functions return a @code{INTEGER} variable or array under 
   8172 the following rules: 
   8173 
   8174 @table @asis
   8175 @item (A)
   8176 If @var{A} is of type @code{INTEGER}, @code{INT(A) = A} 
   8177 @item (B)
   8178 If @var{A} is of type @code{REAL} and @math{|A| < 1}, @code{INT(A)}
   8179 equals @code{0}. If @math{|A| \geq 1}, then @code{INT(A)} is the integer
   8180 whose magnitude is the largest integer that does not exceed the magnitude
   8181 of @var{A} and whose sign is the same as the sign of @var{A}.
   8182 @item (C)
   8183 If @var{A} is of type @code{COMPLEX}, rule B is applied to the real part of @var{A}.
   8184 @end table
   8185 
   8186 @item @emph{Example}:
   8187 @smallexample
   8188 program test_int
   8189   integer :: i = 42
   8190   complex :: z = (-3.7, 1.0)
   8191   print *, int(i)
   8192   print *, int(z), int(z,8)
   8193 end program
   8194 @end smallexample
   8195 
   8196 @item @emph{Specific names}:
   8197 @multitable @columnfractions .20 .20 .20 .25
   8198 @item Name            @tab Argument          @tab Return type       @tab Standard
   8199 @item @code{INT(A)}   @tab @code{REAL(4) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
   8200 @item @code{IFIX(A)}  @tab @code{REAL(4) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
   8201 @item @code{IDINT(A)} @tab @code{REAL(8) A}  @tab @code{INTEGER}    @tab Fortran 77 and later
   8202 @end multitable
   8203 
   8204 @end table
   8205 
   8206 
   8207 @node INT2
   8208 @section @code{INT2} --- Convert to 16-bit integer type
   8209 @fnindex INT2
   8210 @fnindex SHORT
   8211 @cindex conversion, to integer
   8212 
   8213 @table @asis
   8214 @item @emph{Description}:
   8215 Convert to a @code{KIND=2} integer type. This is equivalent to the
   8216 standard @code{INT} intrinsic with an optional argument of
   8217 @code{KIND=2}, and is only included for backwards compatibility.
   8218 
   8219 The @code{SHORT} intrinsic is equivalent to @code{INT2}.
   8220 
   8221 @item @emph{Standard}:
   8222 GNU extension
   8223 
   8224 @item @emph{Class}:
   8225 Elemental function
   8226 
   8227 @item @emph{Syntax}:
   8228 @code{RESULT = INT2(A)}
   8229 
   8230 @item @emph{Arguments}:
   8231 @multitable @columnfractions .15 .70
   8232 @item @var{A}    @tab Shall be of type @code{INTEGER},
   8233 @code{REAL}, or @code{COMPLEX}.
   8234 @end multitable
   8235 
   8236 @item @emph{Return value}:
   8237 The return value is a @code{INTEGER(2)} variable.
   8238 
   8239 @item @emph{See also}:
   8240 @ref{INT}, @ref{INT8}, @ref{LONG}
   8241 @end table
   8242 
   8243 
   8244 
   8245 @node INT8
   8246 @section @code{INT8} --- Convert to 64-bit integer type
   8247 @fnindex INT8
   8248 @cindex conversion, to integer
   8249 
   8250 @table @asis
   8251 @item @emph{Description}:
   8252 Convert to a @code{KIND=8} integer type. This is equivalent to the
   8253 standard @code{INT} intrinsic with an optional argument of
   8254 @code{KIND=8}, and is only included for backwards compatibility.
   8255 
   8256 @item @emph{Standard}:
   8257 GNU extension
   8258 
   8259 @item @emph{Class}:
   8260 Elemental function
   8261 
   8262 @item @emph{Syntax}:
   8263 @code{RESULT = INT8(A)}
   8264 
   8265 @item @emph{Arguments}:
   8266 @multitable @columnfractions .15 .70
   8267 @item @var{A}    @tab Shall be of type @code{INTEGER},
   8268 @code{REAL}, or @code{COMPLEX}.
   8269 @end multitable
   8270 
   8271 @item @emph{Return value}:
   8272 The return value is a @code{INTEGER(8)} variable.
   8273 
   8274 @item @emph{See also}:
   8275 @ref{INT}, @ref{INT2}, @ref{LONG}
   8276 @end table
   8277 
   8278 
   8279 
   8280 @node IOR
   8281 @section @code{IOR} --- Bitwise logical or
   8282 @fnindex IOR
   8283 @fnindex BIOR
   8284 @fnindex IIOR
   8285 @fnindex JIOR
   8286 @fnindex KIOR
   8287 @cindex bitwise logical or
   8288 @cindex logical or, bitwise
   8289 
   8290 @table @asis
   8291 @item @emph{Description}:
   8292 @code{IOR} returns the bitwise Boolean inclusive-OR of @var{I} and
   8293 @var{J}.
   8294 
   8295 @item @emph{Standard}:
   8296 Fortran 95 and later, has overloads that are GNU extensions
   8297 
   8298 @item @emph{Class}:
   8299 Elemental function
   8300 
   8301 @item @emph{Syntax}:
   8302 @code{RESULT = IOR(I, J)}
   8303 
   8304 @item @emph{Arguments}:
   8305 @multitable @columnfractions .15 .70
   8306 @item @var{I} @tab The type shall be @code{INTEGER} or a boz-literal-constant.
   8307 @item @var{J} @tab The type shall be @code{INTEGER} with the same
   8308 kind type parameter as @var{I} or a boz-literal-constant.
   8309 @var{I} and @var{J} shall not both be boz-literal-constants.
   8310 @end multitable
   8311 
   8312 @item @emph{Return value}:
   8313 The return type is @code{INTEGER} with the kind type parameter of the
   8314 arguments.
   8315 A boz-literal-constant is converted to an @code{INTEGER} with the kind
   8316 type parameter of the other argument as-if a call to @ref{INT} occurred.
   8317 
   8318 @item @emph{Specific names}:
   8319 @multitable @columnfractions .20 .20 .20 .25
   8320 @item Name            @tab Argument            @tab Return type       @tab Standard
   8321 @item @code{IOR(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   8322 @item @code{BIOR(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8323 @item @code{IIOR(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8324 @item @code{JIOR(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8325 @item @code{KIOR(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8326 @end multitable
   8327 
   8328 @item @emph{See also}:
   8329 @ref{IEOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
   8330 @end table
   8331 
   8332 
   8333 
   8334 @node IPARITY
   8335 @section @code{IPARITY} --- Bitwise XOR of array elements
   8336 @fnindex IPARITY
   8337 @cindex array, parity
   8338 @cindex array, XOR
   8339 @cindex bits, XOR of array elements
   8340 
   8341 @table @asis
   8342 @item @emph{Description}:
   8343 Reduces with bitwise XOR (exclusive or) the elements of @var{ARRAY} along
   8344 dimension @var{DIM} if the corresponding element in @var{MASK} is @code{TRUE}.
   8345 
   8346 @item @emph{Standard}:
   8347 Fortran 2008 and later
   8348 
   8349 @item @emph{Class}:
   8350 Transformational function
   8351 
   8352 @item @emph{Syntax}:
   8353 @multitable @columnfractions .80
   8354 @item @code{RESULT = IPARITY(ARRAY[, MASK])}
   8355 @item @code{RESULT = IPARITY(ARRAY, DIM[, MASK])}
   8356 @end multitable
   8357 
   8358 @item @emph{Arguments}:
   8359 @multitable @columnfractions .15 .70
   8360 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}
   8361 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   8362 @code{INTEGER} with a value in the range from 1 to n, where n 
   8363 equals the rank of @var{ARRAY}.
   8364 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   8365 and either be a scalar or an array of the same shape as @var{ARRAY}.
   8366 @end multitable
   8367 
   8368 @item @emph{Return value}:
   8369 The result is of the same type as @var{ARRAY}.
   8370 
   8371 If @var{DIM} is absent, a scalar with the bitwise XOR of all elements in
   8372 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals
   8373 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with
   8374 dimension @var{DIM} dropped is returned.
   8375 
   8376 @item @emph{Example}:
   8377 @smallexample
   8378 PROGRAM test_iparity
   8379   INTEGER(1) :: a(2)
   8380 
   8381   a(1) = b'00100100'
   8382   a(2) = b'01101010'
   8383 
   8384   ! prints 01001110
   8385   PRINT '(b8.8)', IPARITY(a)
   8386 END PROGRAM
   8387 @end smallexample
   8388 
   8389 @item @emph{See also}:
   8390 @ref{IANY}, @ref{IALL}, @ref{IEOR}, @ref{PARITY}
   8391 @end table
   8392 
   8393 
   8394 
   8395 @node IRAND
   8396 @section @code{IRAND} --- Integer pseudo-random number
   8397 @fnindex IRAND
   8398 @cindex random number generation
   8399 
   8400 @table @asis
   8401 @item @emph{Description}:
   8402 @code{IRAND(FLAG)} returns a pseudo-random number from a uniform
   8403 distribution between 0 and a system-dependent limit (which is in most
   8404 cases 2147483647). If @var{FLAG} is 0, the next number
   8405 in the current sequence is returned; if @var{FLAG} is 1, the generator
   8406 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
   8407 it is used as a new seed with @code{SRAND}.
   8408 
   8409 This intrinsic routine is provided for backwards compatibility with
   8410 GNU Fortran 77. It implements a simple modulo generator as provided 
   8411 by @command{g77}. For new code, one should consider the use of 
   8412 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
   8413 
   8414 @item @emph{Standard}:
   8415 GNU extension
   8416 
   8417 @item @emph{Class}:
   8418 Function
   8419 
   8420 @item @emph{Syntax}:
   8421 @code{RESULT = IRAND(I)}
   8422 
   8423 @item @emph{Arguments}:
   8424 @multitable @columnfractions .15 .70
   8425 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
   8426 @end multitable
   8427 
   8428 @item @emph{Return value}:
   8429 The return value is of @code{INTEGER(kind=4)} type.
   8430 
   8431 @item @emph{Example}:
   8432 @smallexample
   8433 program test_irand
   8434   integer,parameter :: seed = 86456
   8435   
   8436   call srand(seed)
   8437   print *, irand(), irand(), irand(), irand()
   8438   print *, irand(seed), irand(), irand(), irand()
   8439 end program test_irand
   8440 @end smallexample
   8441 
   8442 @end table
   8443 
   8444 
   8445 
   8446 @node IS_CONTIGUOUS
   8447 @section @code{IS_CONTIGUOUS} --- Test whether an array is contiguous
   8448 @fnindex IS_IOSTAT_EOR
   8449 @cindex array, contiguity
   8450 
   8451 @table @asis
   8452 @item @emph{Description}:
   8453 @code{IS_CONTIGUOUS} tests whether an array is contiguous.
   8454 
   8455 @item @emph{Standard}:
   8456 Fortran 2008 and later
   8457 
   8458 @item @emph{Class}:
   8459 Inquiry function
   8460 
   8461 @item @emph{Syntax}:
   8462 @code{RESULT = IS_CONTIGUOUS(ARRAY)}
   8463 
   8464 @item @emph{Arguments}:
   8465 @multitable @columnfractions .15 .70
   8466 @item @var{ARRAY} @tab Shall be an array of any type.
   8467 @end multitable
   8468 
   8469 @item @emph{Return value}:
   8470 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
   8471 @var{ARRAY} is contiguous and false otherwise.
   8472 
   8473 @item @emph{Example}:
   8474 @smallexample
   8475 program test
   8476   integer :: a(10)
   8477   a = [1,2,3,4,5,6,7,8,9,10]
   8478   call sub (a)      ! every element, is contiguous
   8479   call sub (a(::2)) ! every other element, is noncontiguous
   8480 contains
   8481   subroutine sub (x)
   8482     integer :: x(:)
   8483     if (is_contiguous (x)) then
   8484       write (*,*) 'X is contiguous'
   8485     else
   8486       write (*,*) 'X is not contiguous'
   8487     end if
   8488   end subroutine sub
   8489 end program test
   8490 @end smallexample
   8491 @end table
   8492 
   8493 
   8494 
   8495 @node IS_IOSTAT_END
   8496 @section @code{IS_IOSTAT_END} --- Test for end-of-file value
   8497 @fnindex IS_IOSTAT_END
   8498 @cindex @code{IOSTAT}, end of file
   8499 
   8500 @table @asis
   8501 @item @emph{Description}:
   8502 @code{IS_IOSTAT_END} tests whether an variable has the value of the I/O
   8503 status ``end of file''. The function is equivalent to comparing the variable
   8504 with the @code{IOSTAT_END} parameter of the intrinsic module
   8505 @code{ISO_FORTRAN_ENV}.
   8506 
   8507 @item @emph{Standard}:
   8508 Fortran 2003 and later
   8509 
   8510 @item @emph{Class}:
   8511 Elemental function
   8512 
   8513 @item @emph{Syntax}:
   8514 @code{RESULT = IS_IOSTAT_END(I)}
   8515 
   8516 @item @emph{Arguments}:
   8517 @multitable @columnfractions .15 .70
   8518 @item @var{I} @tab Shall be of the type @code{INTEGER}.
   8519 @end multitable
   8520 
   8521 @item @emph{Return value}:
   8522 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
   8523 @var{I} has the value which indicates an end of file condition for
   8524 @code{IOSTAT=} specifiers, and is @code{.FALSE.} otherwise.
   8525 
   8526 @item @emph{Example}:
   8527 @smallexample
   8528 PROGRAM iostat
   8529   IMPLICIT NONE
   8530   INTEGER :: stat, i
   8531   OPEN(88, FILE='test.dat')
   8532   READ(88, *, IOSTAT=stat) i
   8533   IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'
   8534 END PROGRAM
   8535 @end smallexample
   8536 @end table
   8537 
   8538 
   8539 
   8540 @node IS_IOSTAT_EOR
   8541 @section @code{IS_IOSTAT_EOR} --- Test for end-of-record value
   8542 @fnindex IS_IOSTAT_EOR
   8543 @cindex @code{IOSTAT}, end of record
   8544 
   8545 @table @asis
   8546 @item @emph{Description}:
   8547 @code{IS_IOSTAT_EOR} tests whether an variable has the value of the I/O
   8548 status ``end of record''. The function is equivalent to comparing the
   8549 variable with the @code{IOSTAT_EOR} parameter of the intrinsic module
   8550 @code{ISO_FORTRAN_ENV}.
   8551 
   8552 @item @emph{Standard}:
   8553 Fortran 2003 and later
   8554 
   8555 @item @emph{Class}:
   8556 Elemental function
   8557 
   8558 @item @emph{Syntax}:
   8559 @code{RESULT = IS_IOSTAT_EOR(I)}
   8560 
   8561 @item @emph{Arguments}:
   8562 @multitable @columnfractions .15 .70
   8563 @item @var{I} @tab Shall be of the type @code{INTEGER}.
   8564 @end multitable
   8565 
   8566 @item @emph{Return value}:
   8567 Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if
   8568 @var{I} has the value which indicates an end of file condition for
   8569 @code{IOSTAT=} specifiers, and is @code{.FALSE.} otherwise.
   8570 
   8571 @item @emph{Example}:
   8572 @smallexample
   8573 PROGRAM iostat
   8574   IMPLICIT NONE
   8575   INTEGER :: stat, i(50)
   8576   OPEN(88, FILE='test.dat', FORM='UNFORMATTED')
   8577   READ(88, IOSTAT=stat) i
   8578   IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'
   8579 END PROGRAM
   8580 @end smallexample
   8581 @end table
   8582 
   8583 
   8584 @node ISATTY
   8585 @section @code{ISATTY} --- Whether a unit is a terminal device.
   8586 @fnindex ISATTY
   8587 @cindex system, terminal
   8588 
   8589 @table @asis
   8590 @item @emph{Description}:
   8591 Determine whether a unit is connected to a terminal device.
   8592 
   8593 @item @emph{Standard}:
   8594 GNU extension
   8595 
   8596 @item @emph{Class}:
   8597 Function
   8598 
   8599 @item @emph{Syntax}:
   8600 @code{RESULT = ISATTY(UNIT)}
   8601 
   8602 @item @emph{Arguments}:
   8603 @multitable @columnfractions .15 .70
   8604 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
   8605 @end multitable
   8606 
   8607 @item @emph{Return value}:
   8608 Returns @code{.TRUE.} if the @var{UNIT} is connected to a terminal 
   8609 device, @code{.FALSE.} otherwise.
   8610 
   8611 @item @emph{Example}:
   8612 @smallexample
   8613 PROGRAM test_isatty
   8614   INTEGER(kind=1) :: unit
   8615   DO unit = 1, 10
   8616     write(*,*) isatty(unit=unit)
   8617   END DO
   8618 END PROGRAM
   8619 @end smallexample
   8620 @item @emph{See also}:
   8621 @ref{TTYNAM}
   8622 @end table
   8623 
   8624 
   8625 
   8626 @node ISHFT
   8627 @section @code{ISHFT} --- Shift bits
   8628 @fnindex ISHFT
   8629 @fnindex BSHFT
   8630 @fnindex IISHFT
   8631 @fnindex JISHFT
   8632 @fnindex KISHFT
   8633 @cindex bits, shift
   8634 
   8635 @table @asis
   8636 @item @emph{Description}:
   8637 @code{ISHFT} returns a value corresponding to @var{I} with all of the
   8638 bits shifted @var{SHIFT} places.  A value of @var{SHIFT} greater than
   8639 zero corresponds to a left shift, a value of zero corresponds to no
   8640 shift, and a value less than zero corresponds to a right shift.  If the
   8641 absolute value of @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the
   8642 value is undefined.  Bits shifted out from the left end or right end are
   8643 lost; zeros are shifted in from the opposite end.
   8644 
   8645 @item @emph{Standard}:
   8646 Fortran 95 and later, has overloads that are GNU extensions
   8647 
   8648 @item @emph{Class}:
   8649 Elemental function
   8650 
   8651 @item @emph{Syntax}:
   8652 @code{RESULT = ISHFT(I, SHIFT)}
   8653 
   8654 @item @emph{Arguments}:
   8655 @multitable @columnfractions .15 .70
   8656 @item @var{I} @tab The type shall be @code{INTEGER}.
   8657 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   8658 @end multitable
   8659 
   8660 @item @emph{Return value}:
   8661 The return value is of type @code{INTEGER} and of the same kind as
   8662 @var{I}.
   8663 
   8664 @item @emph{Specific names}:
   8665 @multitable @columnfractions .20 .20 .20 .25
   8666 @item Name            @tab Argument            @tab Return type       @tab Standard
   8667 @item @code{ISHFT(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   8668 @item @code{BSHFT(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8669 @item @code{IISHFT(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8670 @item @code{JISHFT(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8671 @item @code{KISHFT(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8672 @end multitable
   8673 
   8674 @item @emph{See also}:
   8675 @ref{ISHFTC}
   8676 @end table
   8677 
   8678 
   8679 
   8680 @node ISHFTC
   8681 @section @code{ISHFTC} --- Shift bits circularly
   8682 @fnindex ISHFTC
   8683 @fnindex BSHFTC
   8684 @fnindex IISHFTC
   8685 @fnindex JISHFTC
   8686 @fnindex KISHFTC
   8687 @cindex bits, shift circular
   8688 
   8689 @table @asis
   8690 @item @emph{Description}:
   8691 @code{ISHFTC} returns a value corresponding to @var{I} with the
   8692 rightmost @var{SIZE} bits shifted circularly @var{SHIFT} places; that
   8693 is, bits shifted out one end are shifted into the opposite end.  A value
   8694 of @var{SHIFT} greater than zero corresponds to a left shift, a value of
   8695 zero corresponds to no shift, and a value less than zero corresponds to
   8696 a right shift.  The absolute value of @var{SHIFT} must be less than
   8697 @var{SIZE}.  If the @var{SIZE} argument is omitted, it is taken to be
   8698 equivalent to @code{BIT_SIZE(I)}.
   8699 
   8700 @item @emph{Standard}:
   8701 Fortran 95 and later, has overloads that are GNU extensions
   8702 
   8703 @item @emph{Class}:
   8704 Elemental function
   8705 
   8706 @item @emph{Syntax}:
   8707 @code{RESULT = ISHFTC(I, SHIFT [, SIZE])}
   8708 
   8709 @item @emph{Arguments}:
   8710 @multitable @columnfractions .15 .70
   8711 @item @var{I} @tab The type shall be @code{INTEGER}.
   8712 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   8713 @item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER};
   8714 the value must be greater than zero and less than or equal to
   8715 @code{BIT_SIZE(I)}.
   8716 @end multitable
   8717 
   8718 @item @emph{Return value}:
   8719 The return value is of type @code{INTEGER} and of the same kind as
   8720 @var{I}.
   8721 
   8722 @item @emph{Specific names}:
   8723 @multitable @columnfractions .20 .20 .20 .25
   8724 @item Name            @tab Argument            @tab Return type       @tab Standard
   8725 @item @code{ISHFTC(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   8726 @item @code{BSHFTC(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   8727 @item @code{IISHFTC(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   8728 @item @code{JISHFTC(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   8729 @item @code{KISHFTC(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   8730 @end multitable
   8731 
   8732 @item @emph{See also}:
   8733 @ref{ISHFT}
   8734 @end table
   8735 
   8736 
   8737 
   8738 @node ISNAN
   8739 @section @code{ISNAN} --- Test for a NaN
   8740 @fnindex ISNAN
   8741 @cindex IEEE, ISNAN
   8742 
   8743 @table @asis
   8744 @item @emph{Description}:
   8745 @code{ISNAN} tests whether a floating-point value is an IEEE
   8746 Not-a-Number (NaN).
   8747 @item @emph{Standard}:
   8748 GNU extension
   8749 
   8750 @item @emph{Class}:
   8751 Elemental function
   8752 
   8753 @item @emph{Syntax}:
   8754 @code{ISNAN(X)}
   8755 
   8756 @item @emph{Arguments}:
   8757 @multitable @columnfractions .15 .70
   8758 @item @var{X} @tab Variable of the type @code{REAL}.
   8759 
   8760 @end multitable
   8761 
   8762 @item @emph{Return value}:
   8763 Returns a default-kind @code{LOGICAL}. The returned value is @code{TRUE}
   8764 if @var{X} is a NaN and @code{FALSE} otherwise.
   8765 
   8766 @item @emph{Example}:
   8767 @smallexample
   8768 program test_nan
   8769   implicit none
   8770   real :: x
   8771   x = -1.0
   8772   x = sqrt(x)
   8773   if (isnan(x)) stop '"x" is a NaN'
   8774 end program test_nan
   8775 @end smallexample
   8776 @end table
   8777 
   8778 
   8779 
   8780 @node ITIME
   8781 @section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds) 
   8782 @fnindex ITIME
   8783 @cindex time, current
   8784 @cindex current time
   8785 
   8786 @table @asis
   8787 @item @emph{Description}:
   8788 @code{ITIME(VALUES)} Fills @var{VALUES} with the numerical values at the  
   8789 current local time. The hour (in the range 1-24), minute (in the range 1-60), 
   8790 and seconds (in the range 1-60) appear in elements 1, 2, and 3 of @var{VALUES}, 
   8791 respectively.
   8792 
   8793 This intrinsic routine is provided for backwards compatibility with 
   8794 GNU Fortran 77.  In new code, programmers should consider the use of 
   8795 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   8796 standard.
   8797 
   8798 @item @emph{Standard}:
   8799 GNU extension
   8800 
   8801 @item @emph{Class}:
   8802 Subroutine
   8803 
   8804 @item @emph{Syntax}:
   8805 @code{CALL ITIME(VALUES)}
   8806 
   8807 @item @emph{Arguments}:
   8808 @multitable @columnfractions .15 .70
   8809 @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)}
   8810 and the kind shall be the default integer kind.
   8811 @end multitable
   8812 
   8813 @item @emph{Return value}:
   8814 Does not return anything.
   8815 
   8816 
   8817 @item @emph{Example}:
   8818 @smallexample
   8819 program test_itime
   8820   integer, dimension(3) :: tarray
   8821   call itime(tarray)
   8822   print *, tarray(1)
   8823   print *, tarray(2)
   8824   print *, tarray(3)
   8825 end program test_itime
   8826 @end smallexample
   8827 
   8828 @item @emph{See also}:
   8829 @ref{DATE_AND_TIME}
   8830 @end table
   8831 
   8832 
   8833 
   8834 @node KILL
   8835 @section @code{KILL} --- Send a signal to a process
   8836 @fnindex KILL
   8837 
   8838 @table @asis
   8839 @item @emph{Description}:
   8840 @item @emph{Standard}:
   8841 Sends the signal specified by @var{SIG} to the process @var{PID}.
   8842 See @code{kill(2)}.
   8843 
   8844 This intrinsic is provided in both subroutine and function forms;
   8845 however, only one form can be used in any given program unit.
   8846 
   8847 @item @emph{Class}:
   8848 Subroutine, function
   8849 
   8850 @item @emph{Syntax}:
   8851 @multitable @columnfractions .80
   8852 @item @code{CALL KILL(PID, SIG [, STATUS])}
   8853 @item @code{STATUS = KILL(PID, SIG)}
   8854 @end multitable
   8855 
   8856 @item @emph{Arguments}:
   8857 @multitable @columnfractions .15 .70
   8858 @item @var{PID} @tab Shall be a scalar @code{INTEGER} with @code{INTENT(IN)}.
   8859 @item @var{SIG} @tab Shall be a scalar @code{INTEGER} with @code{INTENT(IN)}.
   8860 @item @var{STATUS} @tab [Subroutine](Optional)
   8861 Shall be a scalar @code{INTEGER}.
   8862 Returns 0 on success; otherwise a system-specific error code is returned.
   8863 @item @var{STATUS} @tab [Function] The kind type parameter is that of
   8864 @code{pid}.
   8865 Returns 0 on success; otherwise a system-specific error code is returned.
   8866 @end multitable
   8867 
   8868 @item @emph{See also}:
   8869 @ref{ABORT}, @ref{EXIT}
   8870 @end table
   8871 
   8872 
   8873 @node KIND
   8874 @section @code{KIND} --- Kind of an entity
   8875 @fnindex KIND
   8876 @cindex kind
   8877 
   8878 @table @asis
   8879 @item @emph{Description}:
   8880 @code{KIND(X)} returns the kind value of the entity @var{X}.
   8881 
   8882 @item @emph{Standard}:
   8883 Fortran 95 and later
   8884 
   8885 @item @emph{Class}:
   8886 Inquiry function
   8887 
   8888 @item @emph{Syntax}:
   8889 @code{K = KIND(X)}
   8890 
   8891 @item @emph{Arguments}:
   8892 @multitable @columnfractions .15 .70
   8893 @item @var{X} @tab Shall be of type @code{LOGICAL}, @code{INTEGER},
   8894 @code{REAL}, @code{COMPLEX} or @code{CHARACTER}.
   8895 @end multitable
   8896 
   8897 @item @emph{Return value}:
   8898 The return value is a scalar of type @code{INTEGER} and of the default
   8899 integer kind.
   8900 
   8901 @item @emph{Example}:
   8902 @smallexample
   8903 program test_kind
   8904   integer,parameter :: kc = kind(' ')
   8905   integer,parameter :: kl = kind(.true.)
   8906 
   8907   print *, "The default character kind is ", kc
   8908   print *, "The default logical kind is ", kl
   8909 end program test_kind
   8910 @end smallexample
   8911 
   8912 @end table
   8913 
   8914 
   8915 
   8916 @node LBOUND
   8917 @section @code{LBOUND} --- Lower dimension bounds of an array
   8918 @fnindex LBOUND
   8919 @cindex array, lower bound
   8920 
   8921 @table @asis
   8922 @item @emph{Description}:
   8923 Returns the lower bounds of an array, or a single lower bound
   8924 along the @var{DIM} dimension.
   8925 @item @emph{Standard}:
   8926 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   8927 
   8928 @item @emph{Class}:
   8929 Inquiry function
   8930 
   8931 @item @emph{Syntax}:
   8932 @code{RESULT = LBOUND(ARRAY [, DIM [, KIND]])}
   8933 
   8934 @item @emph{Arguments}:
   8935 @multitable @columnfractions .15 .70
   8936 @item @var{ARRAY} @tab Shall be an array, of any type.
   8937 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   8938 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   8939 expression indicating the kind parameter of the result.
   8940 @end multitable
   8941 
   8942 @item @emph{Return value}:
   8943 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   8944 @var{KIND} is absent, the return value is of default integer kind.
   8945 If @var{DIM} is absent, the result is an array of the lower bounds of
   8946 @var{ARRAY}.  If @var{DIM} is present, the result is a scalar
   8947 corresponding to the lower bound of the array along that dimension.  If
   8948 @var{ARRAY} is an expression rather than a whole array or array
   8949 structure component, or if it has a zero extent along the relevant
   8950 dimension, the lower bound is taken to be 1.
   8951 
   8952 @item @emph{See also}:
   8953 @ref{UBOUND}, @ref{LCOBOUND}
   8954 @end table
   8955 
   8956 
   8957 
   8958 @node LCOBOUND
   8959 @section @code{LCOBOUND} --- Lower codimension bounds of an array
   8960 @fnindex LCOBOUND
   8961 @cindex coarray, lower bound
   8962 
   8963 @table @asis
   8964 @item @emph{Description}:
   8965 Returns the lower bounds of a coarray, or a single lower cobound
   8966 along the @var{DIM} codimension.
   8967 @item @emph{Standard}:
   8968 Fortran 2008 and later
   8969 
   8970 @item @emph{Class}:
   8971 Inquiry function
   8972 
   8973 @item @emph{Syntax}:
   8974 @code{RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])}
   8975 
   8976 @item @emph{Arguments}:
   8977 @multitable @columnfractions .15 .70
   8978 @item @var{ARRAY} @tab Shall be an coarray, of any type.
   8979 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   8980 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   8981 expression indicating the kind parameter of the result.
   8982 @end multitable
   8983 
   8984 @item @emph{Return value}:
   8985 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   8986 @var{KIND} is absent, the return value is of default integer kind.
   8987 If @var{DIM} is absent, the result is an array of the lower cobounds of
   8988 @var{COARRAY}.  If @var{DIM} is present, the result is a scalar
   8989 corresponding to the lower cobound of the array along that codimension.
   8990 
   8991 @item @emph{See also}:
   8992 @ref{UCOBOUND}, @ref{LBOUND}
   8993 @end table
   8994 
   8995 
   8996 
   8997 @node LEADZ
   8998 @section @code{LEADZ} --- Number of leading zero bits of an integer
   8999 @fnindex LEADZ
   9000 @cindex zero bits
   9001 
   9002 @table @asis
   9003 @item @emph{Description}:
   9004 @code{LEADZ} returns the number of leading zero bits of an integer.
   9005 
   9006 @item @emph{Standard}:
   9007 Fortran 2008 and later
   9008 
   9009 @item @emph{Class}:
   9010 Elemental function
   9011 
   9012 @item @emph{Syntax}:
   9013 @code{RESULT = LEADZ(I)}
   9014 
   9015 @item @emph{Arguments}:
   9016 @multitable @columnfractions .15 .70
   9017 @item @var{I} @tab Shall be of type @code{INTEGER}.
   9018 @end multitable
   9019 
   9020 @item @emph{Return value}:
   9021 The type of the return value is the default @code{INTEGER}.
   9022 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
   9023 
   9024 @item @emph{Example}:
   9025 @smallexample
   9026 PROGRAM test_leadz
   9027   WRITE (*,*) BIT_SIZE(1)  ! prints 32
   9028   WRITE (*,*) LEADZ(1)     ! prints 31
   9029 END PROGRAM
   9030 @end smallexample
   9031 
   9032 @item @emph{See also}:
   9033 @ref{BIT_SIZE}, @ref{TRAILZ}, @ref{POPCNT}, @ref{POPPAR}
   9034 @end table
   9035 
   9036 
   9037 
   9038 @node LEN
   9039 @section @code{LEN} --- Length of a character entity
   9040 @fnindex LEN
   9041 @cindex string, length
   9042 
   9043 @table @asis
   9044 @item @emph{Description}:
   9045 Returns the length of a character string.  If @var{STRING} is an array,
   9046 the length of an element of @var{STRING} is returned.  Note that
   9047 @var{STRING} need not be defined when this intrinsic is invoked, since
   9048 only the length, not the content, of @var{STRING} is needed.
   9049 
   9050 @item @emph{Standard}:
   9051 Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later
   9052 
   9053 @item @emph{Class}:
   9054 Inquiry function
   9055 
   9056 @item @emph{Syntax}:
   9057 @code{L = LEN(STRING [, KIND])}
   9058 
   9059 @item @emph{Arguments}:
   9060 @multitable @columnfractions .15 .70
   9061 @item @var{STRING} @tab Shall be a scalar or array of type
   9062 @code{CHARACTER}, with @code{INTENT(IN)}
   9063 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9064 expression indicating the kind parameter of the result.
   9065 @end multitable
   9066 
   9067 @item @emph{Return value}:
   9068 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   9069 @var{KIND} is absent, the return value is of default integer kind.
   9070 
   9071 
   9072 @item @emph{Specific names}:
   9073 @multitable @columnfractions .20 .20 .20 .25
   9074 @item Name               @tab Argument          @tab Return type       @tab Standard
   9075 @item @code{LEN(STRING)} @tab @code{CHARACTER}  @tab @code{INTEGER}    @tab Fortran 77 and later
   9076 @end multitable
   9077 
   9078 
   9079 @item @emph{See also}:
   9080 @ref{LEN_TRIM}, @ref{ADJUSTL}, @ref{ADJUSTR}
   9081 @end table
   9082 
   9083 
   9084 
   9085 @node LEN_TRIM
   9086 @section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters
   9087 @fnindex LEN_TRIM
   9088 @cindex string, length, without trailing whitespace
   9089 
   9090 @table @asis
   9091 @item @emph{Description}:
   9092 Returns the length of a character string, ignoring any trailing blanks.
   9093 
   9094 @item @emph{Standard}:
   9095 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   9096 
   9097 @item @emph{Class}:
   9098 Elemental function
   9099 
   9100 @item @emph{Syntax}:
   9101 @code{RESULT = LEN_TRIM(STRING [, KIND])}
   9102 
   9103 @item @emph{Arguments}:
   9104 @multitable @columnfractions .15 .70
   9105 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
   9106 with @code{INTENT(IN)}
   9107 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9108 expression indicating the kind parameter of the result.
   9109 @end multitable
   9110 
   9111 @item @emph{Return value}:
   9112 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   9113 @var{KIND} is absent, the return value is of default integer kind.
   9114 
   9115 @item @emph{See also}:
   9116 @ref{LEN}, @ref{ADJUSTL}, @ref{ADJUSTR}
   9117 @end table
   9118 
   9119 
   9120 
   9121 @node LGE
   9122 @section @code{LGE} --- Lexical greater than or equal
   9123 @fnindex LGE
   9124 @cindex lexical comparison of strings
   9125 @cindex string, comparison
   9126 
   9127 @table @asis
   9128 @item @emph{Description}:
   9129 Determines whether one string is lexically greater than or equal to
   9130 another string, where the two strings are interpreted as containing
   9131 ASCII character codes.  If the String A and String B are not the same
   9132 length, the shorter is compared as if spaces were appended to it to form
   9133 a value that has the same length as the longer.
   9134 
   9135 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9136 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9137 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9138 that the latter use the processor's character ordering (which is not
   9139 ASCII on some targets), whereas the former always use the ASCII
   9140 ordering.
   9141 
   9142 @item @emph{Standard}:
   9143 Fortran 77 and later
   9144 
   9145 @item @emph{Class}:
   9146 Elemental function
   9147 
   9148 @item @emph{Syntax}:
   9149 @code{RESULT = LGE(STRING_A, STRING_B)}
   9150 
   9151 @item @emph{Arguments}:
   9152 @multitable @columnfractions .15 .70
   9153 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9154 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9155 @end multitable
   9156 
   9157 @item @emph{Return value}:
   9158 Returns @code{.TRUE.} if @code{STRING_A >= STRING_B}, and @code{.FALSE.}
   9159 otherwise, based on the ASCII ordering.
   9160 
   9161 @item @emph{Specific names}:
   9162 @multitable @columnfractions .20 .20 .20 .25
   9163 @item Name                           @tab Argument          @tab Return type       @tab Standard
   9164 @item @code{LGE(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9165 @end multitable
   9166 
   9167 @item @emph{See also}:
   9168 @ref{LGT}, @ref{LLE}, @ref{LLT}
   9169 @end table
   9170 
   9171 
   9172 
   9173 @node LGT
   9174 @section @code{LGT} --- Lexical greater than
   9175 @fnindex LGT
   9176 @cindex lexical comparison of strings
   9177 @cindex string, comparison
   9178 
   9179 @table @asis
   9180 @item @emph{Description}:
   9181 Determines whether one string is lexically greater than another string,
   9182 where the two strings are interpreted as containing ASCII character
   9183 codes.  If the String A and String B are not the same length, the
   9184 shorter is compared as if spaces were appended to it to form a value
   9185 that has the same length as the longer.
   9186 
   9187 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9188 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9189 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9190 that the latter use the processor's character ordering (which is not
   9191 ASCII on some targets), whereas the former always use the ASCII
   9192 ordering.
   9193 
   9194 @item @emph{Standard}:
   9195 Fortran 77 and later
   9196 
   9197 @item @emph{Class}:
   9198 Elemental function
   9199 
   9200 @item @emph{Syntax}:
   9201 @code{RESULT = LGT(STRING_A, STRING_B)}
   9202 
   9203 @item @emph{Arguments}:
   9204 @multitable @columnfractions .15 .70
   9205 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9206 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9207 @end multitable
   9208 
   9209 @item @emph{Return value}:
   9210 Returns @code{.TRUE.} if @code{STRING_A > STRING_B}, and @code{.FALSE.}
   9211 otherwise, based on the ASCII ordering.
   9212 
   9213 @item @emph{Specific names}:
   9214 @multitable @columnfractions .20 .20 .20 .25
   9215 @item Name                           @tab Argument          @tab Return type       @tab Standard
   9216 @item @code{LGT(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9217 @end multitable
   9218 
   9219 @item @emph{See also}:
   9220 @ref{LGE}, @ref{LLE}, @ref{LLT}
   9221 @end table
   9222 
   9223 
   9224 
   9225 @node LINK
   9226 @section @code{LINK} --- Create a hard link
   9227 @fnindex LINK
   9228 @cindex file system, create link
   9229 @cindex file system, hard link
   9230 
   9231 @table @asis
   9232 @item @emph{Description}:
   9233 Makes a (hard) link from file @var{PATH1} to @var{PATH2}. A null
   9234 character (@code{CHAR(0)}) can be used to mark the end of the names in
   9235 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
   9236 names are ignored.  If the @var{STATUS} argument is supplied, it
   9237 contains 0 on success or a nonzero error code upon return; see
   9238 @code{link(2)}.
   9239 
   9240 This intrinsic is provided in both subroutine and function forms;
   9241 however, only one form can be used in any given program unit.
   9242 
   9243 @item @emph{Standard}:
   9244 GNU extension
   9245 
   9246 @item @emph{Class}:
   9247 Subroutine, function
   9248 
   9249 @item @emph{Syntax}:
   9250 @multitable @columnfractions .80
   9251 @item @code{CALL LINK(PATH1, PATH2 [, STATUS])}
   9252 @item @code{STATUS = LINK(PATH1, PATH2)}
   9253 @end multitable
   9254 
   9255 @item @emph{Arguments}:
   9256 @multitable @columnfractions .15 .70
   9257 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
   9258 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
   9259 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   9260 @end multitable
   9261 
   9262 @item @emph{See also}:
   9263 @ref{SYMLNK}, @ref{UNLINK}
   9264 @end table
   9265 
   9266 
   9267 
   9268 @node LLE
   9269 @section @code{LLE} --- Lexical less than or equal
   9270 @fnindex LLE
   9271 @cindex lexical comparison of strings
   9272 @cindex string, comparison
   9273 
   9274 @table @asis
   9275 @item @emph{Description}:
   9276 Determines whether one string is lexically less than or equal to another
   9277 string, where the two strings are interpreted as containing ASCII
   9278 character codes.  If the String A and String B are not the same length,
   9279 the shorter is compared as if spaces were appended to it to form a value
   9280 that has the same length as the longer.
   9281 
   9282 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9283 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9284 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9285 that the latter use the processor's character ordering (which is not
   9286 ASCII on some targets), whereas the former always use the ASCII
   9287 ordering.
   9288 
   9289 @item @emph{Standard}:
   9290 Fortran 77 and later
   9291 
   9292 @item @emph{Class}:
   9293 Elemental function
   9294 
   9295 @item @emph{Syntax}:
   9296 @code{RESULT = LLE(STRING_A, STRING_B)}
   9297 
   9298 @item @emph{Arguments}:
   9299 @multitable @columnfractions .15 .70
   9300 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9301 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9302 @end multitable
   9303 
   9304 @item @emph{Return value}:
   9305 Returns @code{.TRUE.} if @code{STRING_A <= STRING_B}, and @code{.FALSE.}
   9306 otherwise, based on the ASCII ordering.
   9307 
   9308 @item @emph{Specific names}:
   9309 @multitable @columnfractions .20 .20 .20 .25
   9310 @item Name                           @tab Argument          @tab Return type       @tab Standard
   9311 @item @code{LLE(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9312 @end multitable
   9313 
   9314 @item @emph{See also}:
   9315 @ref{LGE}, @ref{LGT}, @ref{LLT}
   9316 @end table
   9317 
   9318 
   9319 
   9320 @node LLT
   9321 @section @code{LLT} --- Lexical less than
   9322 @fnindex LLT
   9323 @cindex lexical comparison of strings
   9324 @cindex string, comparison
   9325 
   9326 @table @asis
   9327 @item @emph{Description}:
   9328 Determines whether one string is lexically less than another string,
   9329 where the two strings are interpreted as containing ASCII character
   9330 codes.  If the String A and String B are not the same length, the
   9331 shorter is compared as if spaces were appended to it to form a value
   9332 that has the same length as the longer.
   9333 
   9334 In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
   9335 @code{LLE}, and @code{LLT} differ from the corresponding intrinsic
   9336 operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
   9337 that the latter use the processor's character ordering (which is not
   9338 ASCII on some targets), whereas the former always use the ASCII
   9339 ordering.
   9340 
   9341 @item @emph{Standard}:
   9342 Fortran 77 and later
   9343 
   9344 @item @emph{Class}:
   9345 Elemental function
   9346 
   9347 @item @emph{Syntax}:
   9348 @code{RESULT = LLT(STRING_A, STRING_B)}
   9349 
   9350 @item @emph{Arguments}:
   9351 @multitable @columnfractions .15 .70
   9352 @item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
   9353 @item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
   9354 @end multitable
   9355 
   9356 @item @emph{Return value}:
   9357 Returns @code{.TRUE.} if @code{STRING_A < STRING_B}, and @code{.FALSE.}
   9358 otherwise, based on the ASCII ordering.
   9359 
   9360 @item @emph{Specific names}:
   9361 @multitable @columnfractions .20 .20 .20 .25
   9362 @item Name                           @tab Argument          @tab Return type       @tab Standard
   9363 @item @code{LLT(STRING_A, STRING_B)} @tab @code{CHARACTER}  @tab @code{LOGICAL}    @tab Fortran 77 and later
   9364 @end multitable
   9365 
   9366 @item @emph{See also}:
   9367 @ref{LGE}, @ref{LGT}, @ref{LLE}
   9368 @end table
   9369 
   9370 
   9371 
   9372 @node LNBLNK
   9373 @section @code{LNBLNK} --- Index of the last non-blank character in a string
   9374 @fnindex LNBLNK
   9375 @cindex string, find non-blank character
   9376 
   9377 @table @asis
   9378 @item @emph{Description}:
   9379 Returns the length of a character string, ignoring any trailing blanks.
   9380 This is identical to the standard @code{LEN_TRIM} intrinsic, and is only
   9381 included for backwards compatibility.
   9382 
   9383 @item @emph{Standard}:
   9384 GNU extension
   9385 
   9386 @item @emph{Class}:
   9387 Elemental function
   9388 
   9389 @item @emph{Syntax}:
   9390 @code{RESULT = LNBLNK(STRING)}
   9391 
   9392 @item @emph{Arguments}:
   9393 @multitable @columnfractions .15 .70
   9394 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER},
   9395 with @code{INTENT(IN)}
   9396 @end multitable
   9397 
   9398 @item @emph{Return value}:
   9399 The return value is of @code{INTEGER(kind=4)} type.
   9400 
   9401 @item @emph{See also}:
   9402 @ref{INDEX intrinsic}, @ref{LEN_TRIM}
   9403 @end table
   9404 
   9405 
   9406 
   9407 @node LOC
   9408 @section @code{LOC} --- Returns the address of a variable
   9409 @fnindex LOC
   9410 @cindex location of a variable in memory
   9411 
   9412 @table @asis
   9413 @item @emph{Description}:
   9414 @code{LOC(X)} returns the address of @var{X} as an integer.
   9415 
   9416 @item @emph{Standard}:
   9417 GNU extension
   9418 
   9419 @item @emph{Class}:
   9420 Inquiry function
   9421 
   9422 @item @emph{Syntax}:
   9423 @code{RESULT = LOC(X)}
   9424 
   9425 @item @emph{Arguments}:
   9426 @multitable @columnfractions .15 .70
   9427 @item @var{X} @tab Variable of any type.
   9428 @end multitable
   9429 
   9430 @item @emph{Return value}:
   9431 The return value is of type @code{INTEGER}, with a @code{KIND}
   9432 corresponding to the size (in bytes) of a memory address on the target
   9433 machine.
   9434 
   9435 @item @emph{Example}:
   9436 @smallexample
   9437 program test_loc
   9438   integer :: i
   9439   real :: r
   9440   i = loc(r)
   9441   print *, i
   9442 end program test_loc
   9443 @end smallexample
   9444 @end table
   9445 
   9446 
   9447 
   9448 @node LOG
   9449 @section @code{LOG} --- Natural logarithm function
   9450 @fnindex LOG
   9451 @fnindex ALOG
   9452 @fnindex DLOG
   9453 @fnindex CLOG
   9454 @fnindex ZLOG
   9455 @fnindex CDLOG
   9456 @cindex exponential function, inverse
   9457 @cindex logarithm function
   9458 @cindex natural logarithm function
   9459 
   9460 @table @asis
   9461 @item @emph{Description}:
   9462 @code{LOG(X)} computes the natural logarithm of @var{X}, i.e. the
   9463 logarithm to the base @math{e}.
   9464 
   9465 @item @emph{Standard}:
   9466 Fortran 77 and later
   9467 
   9468 @item @emph{Class}:
   9469 Elemental function
   9470 
   9471 @item @emph{Syntax}:
   9472 @code{RESULT = LOG(X)}
   9473 
   9474 @item @emph{Arguments}:
   9475 @multitable @columnfractions .15 .70
   9476 @item @var{X} @tab The type shall be @code{REAL} or
   9477 @code{COMPLEX}.
   9478 @end multitable
   9479 
   9480 @item @emph{Return value}:
   9481 The return value is of type @code{REAL} or @code{COMPLEX}.
   9482 The kind type parameter is the same as @var{X}.
   9483 If @var{X} is @code{COMPLEX}, the imaginary part @math{\omega} is in the range
   9484 @math{-\pi < \omega \leq \pi}.
   9485 
   9486 @item @emph{Example}:
   9487 @smallexample
   9488 program test_log
   9489   real(8) :: x = 2.7182818284590451_8
   9490   complex :: z = (1.0, 2.0)
   9491   x = log(x)    ! will yield (approximately) 1
   9492   z = log(z)
   9493 end program test_log
   9494 @end smallexample
   9495 
   9496 @item @emph{Specific names}:
   9497 @multitable @columnfractions .20 .20 .20 .25
   9498 @item Name            @tab Argument          @tab Return type       @tab Standard
   9499 @item @code{ALOG(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab f95, gnu
   9500 @item @code{DLOG(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab f95, gnu
   9501 @item @code{CLOG(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab f95, gnu
   9502 @item @code{ZLOG(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
   9503 @item @code{CDLOG(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab f95, gnu
   9504 @end multitable
   9505 @end table
   9506 
   9507 
   9508 
   9509 @node LOG10
   9510 @section @code{LOG10} --- Base 10 logarithm function
   9511 @fnindex LOG10
   9512 @fnindex ALOG10
   9513 @fnindex DLOG10
   9514 @cindex exponential function, inverse
   9515 @cindex logarithm function with base 10
   9516 @cindex base 10 logarithm function
   9517 
   9518 @table @asis
   9519 @item @emph{Description}:
   9520 @code{LOG10(X)} computes the base 10 logarithm of @var{X}.
   9521 
   9522 @item @emph{Standard}:
   9523 Fortran 77 and later
   9524 
   9525 @item @emph{Class}:
   9526 Elemental function
   9527 
   9528 @item @emph{Syntax}:
   9529 @code{RESULT = LOG10(X)}
   9530 
   9531 @item @emph{Arguments}:
   9532 @multitable @columnfractions .15 .70
   9533 @item @var{X} @tab The type shall be @code{REAL}.
   9534 @end multitable
   9535 
   9536 @item @emph{Return value}:
   9537 The return value is of type @code{REAL} or @code{COMPLEX}.
   9538 The kind type parameter is the same as @var{X}.
   9539 
   9540 @item @emph{Example}:
   9541 @smallexample
   9542 program test_log10
   9543   real(8) :: x = 10.0_8
   9544   x = log10(x)
   9545 end program test_log10
   9546 @end smallexample
   9547 
   9548 @item @emph{Specific names}:
   9549 @multitable @columnfractions .20 .20 .20 .25
   9550 @item Name            @tab Argument          @tab Return type       @tab Standard
   9551 @item @code{ALOG10(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 95 and later
   9552 @item @code{DLOG10(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
   9553 @end multitable
   9554 @end table
   9555 
   9556 
   9557 
   9558 @node LOG_GAMMA
   9559 @section @code{LOG_GAMMA} --- Logarithm of the Gamma function
   9560 @fnindex LOG_GAMMA
   9561 @fnindex LGAMMA
   9562 @fnindex ALGAMA
   9563 @fnindex DLGAMA
   9564 @cindex Gamma function, logarithm of
   9565 
   9566 @table @asis
   9567 @item @emph{Description}:
   9568 @code{LOG_GAMMA(X)} computes the natural logarithm of the absolute value
   9569 of the Gamma (@math{\Gamma}) function.
   9570 
   9571 @item @emph{Standard}:
   9572 Fortran 2008 and later
   9573 
   9574 @item @emph{Class}:
   9575 Elemental function
   9576 
   9577 @item @emph{Syntax}:
   9578 @code{X = LOG_GAMMA(X)}
   9579 
   9580 @item @emph{Arguments}:
   9581 @multitable @columnfractions .15 .70
   9582 @item @var{X} @tab Shall be of type @code{REAL} and neither zero
   9583 nor a negative integer.
   9584 @end multitable
   9585 
   9586 @item @emph{Return value}:
   9587 The return value is of type @code{REAL} of the same kind as @var{X}.
   9588 
   9589 @item @emph{Example}:
   9590 @smallexample
   9591 program test_log_gamma
   9592   real :: x = 1.0
   9593   x = lgamma(x) ! returns 0.0
   9594 end program test_log_gamma
   9595 @end smallexample
   9596 
   9597 @item @emph{Specific names}:
   9598 @multitable @columnfractions .20 .20 .20 .25
   9599 @item Name             @tab Argument         @tab Return type       @tab Standard
   9600 @item @code{LGAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
   9601 @item @code{ALGAMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)}    @tab GNU Extension
   9602 @item @code{DLGAMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)}    @tab GNU Extension
   9603 @end multitable
   9604 
   9605 @item @emph{See also}:
   9606 Gamma function: @ref{GAMMA}
   9607 
   9608 @end table
   9609 
   9610 
   9611 
   9612 @node LOGICAL
   9613 @section @code{LOGICAL} --- Convert to logical type
   9614 @fnindex LOGICAL
   9615 @cindex conversion, to logical
   9616 
   9617 @table @asis
   9618 @item @emph{Description}:
   9619 Converts one kind of @code{LOGICAL} variable to another.
   9620 
   9621 @item @emph{Standard}:
   9622 Fortran 95 and later
   9623 
   9624 @item @emph{Class}:
   9625 Elemental function
   9626 
   9627 @item @emph{Syntax}:
   9628 @code{RESULT = LOGICAL(L [, KIND])}
   9629 
   9630 @item @emph{Arguments}:
   9631 @multitable @columnfractions .15 .70
   9632 @item @var{L}    @tab The type shall be @code{LOGICAL}.
   9633 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   9634 expression indicating the kind parameter of the result.
   9635 @end multitable
   9636 
   9637 @item @emph{Return value}:
   9638 The return value is a @code{LOGICAL} value equal to @var{L}, with a
   9639 kind corresponding to @var{KIND}, or of the default logical kind if
   9640 @var{KIND} is not given.
   9641 
   9642 @item @emph{See also}:
   9643 @ref{INT}, @ref{REAL}, @ref{CMPLX}
   9644 @end table
   9645 
   9646 
   9647 
   9648 @node LONG
   9649 @section @code{LONG} --- Convert to integer type
   9650 @fnindex LONG
   9651 @cindex conversion, to integer
   9652 
   9653 @table @asis
   9654 @item @emph{Description}:
   9655 Convert to a @code{KIND=4} integer type, which is the same size as a C
   9656 @code{long} integer.  This is equivalent to the standard @code{INT}
   9657 intrinsic with an optional argument of @code{KIND=4}, and is only
   9658 included for backwards compatibility.
   9659 
   9660 @item @emph{Standard}:
   9661 GNU extension
   9662 
   9663 @item @emph{Class}:
   9664 Elemental function
   9665 
   9666 @item @emph{Syntax}:
   9667 @code{RESULT = LONG(A)}
   9668 
   9669 @item @emph{Arguments}:
   9670 @multitable @columnfractions .15 .70
   9671 @item @var{A}    @tab Shall be of type @code{INTEGER},
   9672 @code{REAL}, or @code{COMPLEX}.
   9673 @end multitable
   9674 
   9675 @item @emph{Return value}:
   9676 The return value is a @code{INTEGER(4)} variable.
   9677 
   9678 @item @emph{See also}:
   9679 @ref{INT}, @ref{INT2}, @ref{INT8}
   9680 @end table
   9681 
   9682 
   9683 
   9684 @node LSHIFT
   9685 @section @code{LSHIFT} --- Left shift bits
   9686 @fnindex LSHIFT
   9687 @cindex bits, shift left
   9688 
   9689 @table @asis
   9690 @item @emph{Description}:
   9691 @code{LSHIFT} returns a value corresponding to @var{I} with all of the
   9692 bits shifted left by @var{SHIFT} places.  @var{SHIFT} shall be
   9693 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   9694 the result value is undefined.  Bits shifted out from the left end are
   9695 lost; zeros are shifted in from the opposite end.
   9696 
   9697 This function has been superseded by the @code{ISHFT} intrinsic, which
   9698 is standard in Fortran 95 and later, and the @code{SHIFTL} intrinsic,
   9699 which is standard in Fortran 2008 and later.
   9700 
   9701 @item @emph{Standard}:
   9702 GNU extension
   9703 
   9704 @item @emph{Class}:
   9705 Elemental function
   9706 
   9707 @item @emph{Syntax}:
   9708 @code{RESULT = LSHIFT(I, SHIFT)}
   9709 
   9710 @item @emph{Arguments}:
   9711 @multitable @columnfractions .15 .70
   9712 @item @var{I} @tab The type shall be @code{INTEGER}.
   9713 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   9714 @end multitable
   9715 
   9716 @item @emph{Return value}:
   9717 The return value is of type @code{INTEGER} and of the same kind as
   9718 @var{I}.
   9719 
   9720 @item @emph{See also}:
   9721 @ref{ISHFT}, @ref{ISHFTC}, @ref{RSHIFT}, @ref{SHIFTA}, @ref{SHIFTL},
   9722 @ref{SHIFTR}
   9723 
   9724 @end table
   9725 
   9726 
   9727 
   9728 @node LSTAT
   9729 @section @code{LSTAT} --- Get file status
   9730 @fnindex LSTAT
   9731 @cindex file system, file status
   9732 
   9733 @table @asis
   9734 @item @emph{Description}:
   9735 @code{LSTAT} is identical to @ref{STAT}, except that if path is a
   9736 symbolic link, then the link itself is statted, not the file that it
   9737 refers to.
   9738 
   9739 The elements in @code{VALUES} are the same as described by @ref{STAT}.
   9740 
   9741 This intrinsic is provided in both subroutine and function forms;
   9742 however, only one form can be used in any given program unit.
   9743 
   9744 @item @emph{Standard}:
   9745 GNU extension
   9746 
   9747 @item @emph{Class}:
   9748 Subroutine, function
   9749 
   9750 @item @emph{Syntax}:
   9751 @multitable @columnfractions .80
   9752 @item @code{CALL LSTAT(NAME, VALUES [, STATUS])}
   9753 @item @code{STATUS = LSTAT(NAME, VALUES)}
   9754 @end multitable
   9755 
   9756 @item @emph{Arguments}:
   9757 @multitable @columnfractions .15 .70
   9758 @item @var{NAME}   @tab The type shall be @code{CHARACTER} of the default
   9759 kind, a valid path within the file system.
   9760 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
   9761 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}.
   9762 Returns 0 on success and a system specific error code otherwise.
   9763 @end multitable
   9764 
   9765 @item @emph{Example}:
   9766 See @ref{STAT} for an example.
   9767 
   9768 @item @emph{See also}:
   9769 To stat an open file: @ref{FSTAT}, to stat a file: @ref{STAT}
   9770 @end table
   9771 
   9772 
   9773 
   9774 @node LTIME
   9775 @section @code{LTIME} --- Convert time to local time info
   9776 @fnindex LTIME
   9777 @cindex time, conversion to local time info
   9778 
   9779 @table @asis
   9780 @item @emph{Description}:
   9781 Given a system time value @var{TIME} (as provided by the @ref{TIME}
   9782 intrinsic), fills @var{VALUES} with values extracted from it appropriate
   9783 to the local time zone using @code{localtime(3)}.
   9784 
   9785 This intrinsic routine is provided for backwards compatibility with 
   9786 GNU Fortran 77.  In new code, programmers should consider the use of 
   9787 the @ref{DATE_AND_TIME} intrinsic defined by the Fortran 95
   9788 standard.
   9789 
   9790 @item @emph{Standard}:
   9791 GNU extension
   9792 
   9793 @item @emph{Class}:
   9794 Subroutine
   9795 
   9796 @item @emph{Syntax}:
   9797 @code{CALL LTIME(TIME, VALUES)}
   9798 
   9799 @item @emph{Arguments}:
   9800 @multitable @columnfractions .15 .70
   9801 @item @var{TIME}  @tab An @code{INTEGER} scalar expression
   9802 corresponding to a system time, with @code{INTENT(IN)}.
   9803 @item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements,
   9804 with @code{INTENT(OUT)}.
   9805 @end multitable
   9806 
   9807 @item @emph{Return value}:
   9808 The elements of @var{VALUES} are assigned as follows:
   9809 @enumerate
   9810 @item Seconds after the minute, range 0--59 or 0--61 to allow for leap
   9811 seconds
   9812 @item Minutes after the hour, range 0--59
   9813 @item Hours past midnight, range 0--23
   9814 @item Day of month, range 1--31
   9815 @item Number of months since January, range 0--11
   9816 @item Years since 1900
   9817 @item Number of days since Sunday, range 0--6
   9818 @item Days since January 1, range 0--365
   9819 @item Daylight savings indicator: positive if daylight savings is in
   9820 effect, zero if not, and negative if the information is not available.
   9821 @end enumerate
   9822 
   9823 @item @emph{See also}:
   9824 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{GMTIME}, @ref{TIME}, @ref{TIME8}
   9825 
   9826 @end table
   9827 
   9828 
   9829 
   9830 @node MALLOC
   9831 @section @code{MALLOC} --- Allocate dynamic memory
   9832 @fnindex MALLOC
   9833 @cindex pointer, cray
   9834 
   9835 @table @asis
   9836 @item @emph{Description}:
   9837 @code{MALLOC(SIZE)} allocates @var{SIZE} bytes of dynamic memory and
   9838 returns the address of the allocated memory. The @code{MALLOC} intrinsic
   9839 is an extension intended to be used with Cray pointers, and is provided
   9840 in GNU Fortran to allow the user to compile legacy code. For new code
   9841 using Fortran 95 pointers, the memory allocation intrinsic is
   9842 @code{ALLOCATE}.
   9843 
   9844 @item @emph{Standard}:
   9845 GNU extension
   9846 
   9847 @item @emph{Class}:
   9848 Function
   9849 
   9850 @item @emph{Syntax}:
   9851 @code{PTR = MALLOC(SIZE)}
   9852 
   9853 @item @emph{Arguments}:
   9854 @multitable @columnfractions .15 .70
   9855 @item @var{SIZE} @tab The type shall be @code{INTEGER}.
   9856 @end multitable
   9857 
   9858 @item @emph{Return value}:
   9859 The return value is of type @code{INTEGER(K)}, with @var{K} such that
   9860 variables of type @code{INTEGER(K)} have the same size as
   9861 C pointers (@code{sizeof(void *)}).
   9862 
   9863 @item @emph{Example}:
   9864 The following example demonstrates the use of @code{MALLOC} and
   9865 @code{FREE} with Cray pointers.
   9866 
   9867 @smallexample
   9868 program test_malloc
   9869   implicit none
   9870   integer i
   9871   real*8 x(*), z
   9872   pointer(ptr_x,x)
   9873 
   9874   ptr_x = malloc(20*8)
   9875   do i = 1, 20
   9876     x(i) = sqrt(1.0d0 / i)
   9877   end do
   9878   z = 0
   9879   do i = 1, 20
   9880     z = z + x(i)
   9881     print *, z
   9882   end do
   9883   call free(ptr_x)
   9884 end program test_malloc
   9885 @end smallexample
   9886 
   9887 @item @emph{See also}:
   9888 @ref{FREE}
   9889 @end table
   9890 
   9891 
   9892 
   9893 @node MASKL
   9894 @section @code{MASKL} --- Left justified mask
   9895 @fnindex MASKL
   9896 @cindex mask, left justified
   9897 
   9898 @table @asis
   9899 @item @emph{Description}:
   9900 @code{MASKL(I[, KIND])} has its leftmost @var{I} bits set to 1, and the
   9901 remaining bits set to 0.
   9902 
   9903 @item @emph{Standard}:
   9904 Fortran 2008 and later
   9905 
   9906 @item @emph{Class}:
   9907 Elemental function
   9908 
   9909 @item @emph{Syntax}:
   9910 @code{RESULT = MASKL(I[, KIND])}
   9911 
   9912 @item @emph{Arguments}:
   9913 @multitable @columnfractions .15 .70
   9914 @item @var{I} @tab Shall be of type @code{INTEGER}.
   9915 @item @var{KIND} @tab Shall be a scalar constant expression of type
   9916 @code{INTEGER}.
   9917 @end multitable
   9918 
   9919 @item @emph{Return value}:
   9920 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
   9921 specifies the kind value of the return type; otherwise, it is of the
   9922 default integer kind.
   9923 
   9924 @item @emph{See also}:
   9925 @ref{MASKR}
   9926 @end table
   9927 
   9928 
   9929 
   9930 @node MASKR
   9931 @section @code{MASKR} --- Right justified mask
   9932 @fnindex MASKR
   9933 @cindex mask, right justified
   9934 
   9935 @table @asis
   9936 @item @emph{Description}:
   9937 @code{MASKL(I[, KIND])} has its rightmost @var{I} bits set to 1, and the
   9938 remaining bits set to 0.
   9939 
   9940 @item @emph{Standard}:
   9941 Fortran 2008 and later
   9942 
   9943 @item @emph{Class}:
   9944 Elemental function
   9945 
   9946 @item @emph{Syntax}:
   9947 @code{RESULT = MASKR(I[, KIND])}
   9948 
   9949 @item @emph{Arguments}:
   9950 @multitable @columnfractions .15 .70
   9951 @item @var{I} @tab Shall be of type @code{INTEGER}.
   9952 @item @var{KIND} @tab Shall be a scalar constant expression of type
   9953 @code{INTEGER}.
   9954 @end multitable
   9955 
   9956 @item @emph{Return value}:
   9957 The return value is of type @code{INTEGER}. If @var{KIND} is present, it
   9958 specifies the kind value of the return type; otherwise, it is of the
   9959 default integer kind.
   9960 
   9961 @item @emph{See also}:
   9962 @ref{MASKL}
   9963 @end table
   9964 
   9965 
   9966 
   9967 @node MATMUL
   9968 @section @code{MATMUL} --- matrix multiplication
   9969 @fnindex MATMUL
   9970 @cindex matrix multiplication
   9971 @cindex product, matrix
   9972 
   9973 @table @asis
   9974 @item @emph{Description}:
   9975 Performs a matrix multiplication on numeric or logical arguments.
   9976 
   9977 @item @emph{Standard}:
   9978 Fortran 95 and later
   9979 
   9980 @item @emph{Class}:
   9981 Transformational function
   9982 
   9983 @item @emph{Syntax}:
   9984 @code{RESULT = MATMUL(MATRIX_A, MATRIX_B)}
   9985 
   9986 @item @emph{Arguments}:
   9987 @multitable @columnfractions .15 .70
   9988 @item @var{MATRIX_A} @tab An array of @code{INTEGER},
   9989 @code{REAL}, @code{COMPLEX}, or @code{LOGICAL} type, with a rank of
   9990 one or two.
   9991 @item @var{MATRIX_B} @tab An array of @code{INTEGER},
   9992 @code{REAL}, or @code{COMPLEX} type if @var{MATRIX_A} is of a numeric
   9993 type; otherwise, an array of @code{LOGICAL} type. The rank shall be one
   9994 or two, and the first (or only) dimension of @var{MATRIX_B} shall be
   9995 equal to the last (or only) dimension of @var{MATRIX_A}.
   9996 @var{MATRIX_A} and @var{MATRIX_B} shall not both be rank one arrays.
   9997 @end multitable
   9998 
   9999 @item @emph{Return value}:
   10000 The matrix product of @var{MATRIX_A} and @var{MATRIX_B}.  The type and
   10001 kind of the result follow the usual type and kind promotion rules, as
   10002 for the @code{*} or @code{.AND.} operators.
   10003 
   10004 @item @emph{See also}:
   10005 @end table
   10006 
   10007 
   10008 
   10009 @node MAX
   10010 @section @code{MAX} --- Maximum value of an argument list
   10011 @fnindex MAX
   10012 @fnindex MAX0
   10013 @fnindex AMAX0
   10014 @fnindex MAX1
   10015 @fnindex AMAX1
   10016 @fnindex DMAX1
   10017 @cindex maximum value
   10018 
   10019 @table @asis
   10020 @item @emph{Description}:
   10021 Returns the argument with the largest (most positive) value.
   10022 
   10023 @item @emph{Standard}:
   10024 Fortran 77 and later
   10025 
   10026 @item @emph{Class}:
   10027 Elemental function
   10028 
   10029 @item @emph{Syntax}:
   10030 @code{RESULT = MAX(A1, A2 [, A3 [, ...]])}
   10031 
   10032 @item @emph{Arguments}:
   10033 @multitable @columnfractions .15 .70
   10034 @item @var{A1}          @tab The type shall be @code{INTEGER} or
   10035 @code{REAL}.
   10036 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
   10037 as @var{A1}.  (As a GNU extension, arguments of different kinds are
   10038 permitted.)
   10039 @end multitable
   10040 
   10041 @item @emph{Return value}:
   10042 The return value corresponds to the maximum value among the arguments,
   10043 and has the same type and kind as the first argument.
   10044 
   10045 @item @emph{Specific names}:
   10046 @multitable @columnfractions .20 .20 .20 .25
   10047 @item Name             @tab Argument             @tab Return type         @tab Standard
   10048 @item @code{MAX0(A1)}  @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)}   @tab Fortran 77 and later
   10049 @item @code{AMAX0(A1)} @tab @code{INTEGER(4) A1} @tab @code{REAL(MAX(X))} @tab Fortran 77 and later
   10050 @item @code{MAX1(A1)}  @tab @code{REAL A1}       @tab @code{INT(MAX(X))}  @tab Fortran 77 and later
   10051 @item @code{AMAX1(A1)} @tab @code{REAL(4) A1}    @tab @code{REAL(4)}      @tab Fortran 77 and later
   10052 @item @code{DMAX1(A1)} @tab @code{REAL(8) A1}    @tab @code{REAL(8)}      @tab Fortran 77 and later
   10053 @end multitable
   10054 
   10055 @item @emph{See also}:
   10056 @ref{MAXLOC} @ref{MAXVAL}, @ref{MIN}
   10057 
   10058 @end table
   10059 
   10060 
   10061 
   10062 @node MAXEXPONENT
   10063 @section @code{MAXEXPONENT} --- Maximum exponent of a real kind
   10064 @fnindex MAXEXPONENT
   10065 @cindex model representation, maximum exponent
   10066 
   10067 @table @asis
   10068 @item @emph{Description}:
   10069 @code{MAXEXPONENT(X)} returns the maximum exponent in the model of the
   10070 type of @code{X}.
   10071 
   10072 @item @emph{Standard}:
   10073 Fortran 95 and later
   10074 
   10075 @item @emph{Class}:
   10076 Inquiry function
   10077 
   10078 @item @emph{Syntax}:
   10079 @code{RESULT = MAXEXPONENT(X)}
   10080 
   10081 @item @emph{Arguments}:
   10082 @multitable @columnfractions .15 .70
   10083 @item @var{X} @tab Shall be of type @code{REAL}.
   10084 @end multitable
   10085 
   10086 @item @emph{Return value}:
   10087 The return value is of type @code{INTEGER} and of the default integer
   10088 kind.
   10089 
   10090 @item @emph{Example}:
   10091 @smallexample
   10092 program exponents
   10093   real(kind=4) :: x
   10094   real(kind=8) :: y
   10095 
   10096   print *, minexponent(x), maxexponent(x)
   10097   print *, minexponent(y), maxexponent(y)
   10098 end program exponents
   10099 @end smallexample
   10100 @end table
   10101 
   10102 
   10103 
   10104 @node MAXLOC
   10105 @section @code{MAXLOC} --- Location of the maximum value within an array
   10106 @fnindex MAXLOC
   10107 @cindex array, location of maximum element
   10108 
   10109 @table @asis
   10110 @item @emph{Description}:
   10111 Determines the location of the element in the array with the maximum
   10112 value, or, if the @var{DIM} argument is supplied, determines the
   10113 locations of the maximum element along each row of the array in the
   10114 @var{DIM} direction.  If @var{MASK} is present, only the elements for
   10115 which @var{MASK} is @code{.TRUE.} are considered.  If more than one
   10116 element in the array has the maximum value, the location returned is
   10117 that of the first such element in array element order if the
   10118 @var{BACK} is not present, or is false; if @var{BACK} is true, the location
   10119 returned is that of the last such element. If the array has zero
   10120 size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
   10121 the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
   10122 and all of the elements of @var{MASK} along a given row are zero, the
   10123 result value for that row is zero.
   10124 
   10125 @item @emph{Standard}:
   10126 Fortran 95 and later; @var{ARRAY} of @code{CHARACTER} and the
   10127 @var{KIND} argument are available in Fortran 2003 and later.
   10128 The @var{BACK} argument is available in Fortran 2008 and later.
   10129 
   10130 @item @emph{Class}:
   10131 Transformational function
   10132 
   10133 @item @emph{Syntax}:
   10134 @multitable @columnfractions .80
   10135 @item @code{RESULT = MAXLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])}
   10136 @item @code{RESULT = MAXLOC(ARRAY [, MASK] [,KIND] [,BACK])}
   10137 @end multitable
   10138 
   10139 @item @emph{Arguments}:
   10140 @multitable @columnfractions .15 .70
   10141 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
   10142 @code{REAL}.
   10143 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10144 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10145 inclusive.  It may not be an optional dummy argument.
   10146 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
   10147 and conformable with @var{ARRAY}.
   10148 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   10149 expression indicating the kind parameter of the result.
   10150 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
   10151 @end multitable
   10152 
   10153 @item @emph{Return value}:
   10154 If @var{DIM} is absent, the result is a rank-one array with a length
   10155 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
   10156 is an array with a rank one less than the rank of @var{ARRAY}, and a
   10157 size corresponding to the size of @var{ARRAY} with the @var{DIM}
   10158 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
   10159 of one, the result is a scalar.   If the optional argument @var{KIND}
   10160 is present, the result is an integer of kind @var{KIND}, otherwise it
   10161 is of default kind.
   10162 
   10163 @item @emph{See also}:
   10164 @ref{FINDLOC}, @ref{MAX}, @ref{MAXVAL}
   10165 
   10166 @end table
   10167 
   10168 
   10169 
   10170 @node MAXVAL
   10171 @section @code{MAXVAL} --- Maximum value of an array
   10172 @fnindex MAXVAL
   10173 @cindex array, maximum value
   10174 @cindex maximum value
   10175 
   10176 @table @asis
   10177 @item @emph{Description}:
   10178 Determines the maximum value of the elements in an array value, or, if
   10179 the @var{DIM} argument is supplied, determines the maximum value along
   10180 each row of the array in the @var{DIM} direction.  If @var{MASK} is
   10181 present, only the elements for which @var{MASK} is @code{.TRUE.} are
   10182 considered.  If the array has zero size, or all of the elements of
   10183 @var{MASK} are @code{.FALSE.}, then the result is @code{-HUGE(ARRAY)}
   10184 if @var{ARRAY} is numeric, or a string of nulls if @var{ARRAY} is of character
   10185 type.
   10186 
   10187 @item @emph{Standard}:
   10188 Fortran 95 and later
   10189 
   10190 @item @emph{Class}:
   10191 Transformational function
   10192 
   10193 @item @emph{Syntax}:
   10194 @multitable @columnfractions .80
   10195 @item @code{RESULT = MAXVAL(ARRAY, DIM [, MASK])}
   10196 @item @code{RESULT = MAXVAL(ARRAY [, MASK])}
   10197 @end multitable
   10198 
   10199 @item @emph{Arguments}:
   10200 @multitable @columnfractions .15 .70
   10201 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
   10202 @code{REAL}.
   10203 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10204 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10205 inclusive.  It may not be an optional dummy argument.
   10206 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
   10207 and conformable with @var{ARRAY}.
   10208 @end multitable
   10209 
   10210 @item @emph{Return value}:
   10211 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
   10212 is a scalar.  If @var{DIM} is present, the result is an array with a
   10213 rank one less than the rank of @var{ARRAY}, and a size corresponding to
   10214 the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
   10215 cases, the result is of the same type and kind as @var{ARRAY}.
   10216 
   10217 @item @emph{See also}:
   10218 @ref{MAX}, @ref{MAXLOC}
   10219 @end table
   10220 
   10221 
   10222 
   10223 @node MCLOCK
   10224 @section @code{MCLOCK} --- Time function
   10225 @fnindex MCLOCK
   10226 @cindex time, clock ticks
   10227 @cindex clock ticks
   10228 
   10229 @table @asis
   10230 @item @emph{Description}:
   10231 Returns the number of clock ticks since the start of the process, based
   10232 on the function @code{clock(3)} in the C standard library.
   10233 
   10234 This intrinsic is not fully portable, such as to systems with 32-bit
   10235 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
   10236 the values returned by this intrinsic might be, or become, negative, or
   10237 numerically less than previous values, during a single run of the
   10238 compiled program.
   10239 
   10240 @item @emph{Standard}:
   10241 GNU extension
   10242 
   10243 @item @emph{Class}:
   10244 Function
   10245 
   10246 @item @emph{Syntax}:
   10247 @code{RESULT = MCLOCK()}
   10248 
   10249 @item @emph{Return value}:
   10250 The return value is a scalar of type @code{INTEGER(4)}, equal to the
   10251 number of clock ticks since the start of the process, or @code{-1} if
   10252 the system does not support @code{clock(3)}.
   10253 
   10254 @item @emph{See also}:
   10255 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME}
   10256 
   10257 @end table
   10258 
   10259 
   10260 
   10261 @node MCLOCK8
   10262 @section @code{MCLOCK8} --- Time function (64-bit)
   10263 @fnindex MCLOCK8
   10264 @cindex time, clock ticks
   10265 @cindex clock ticks
   10266 
   10267 @table @asis
   10268 @item @emph{Description}:
   10269 Returns the number of clock ticks since the start of the process, based
   10270 on the function @code{clock(3)} in the C standard library.
   10271 
   10272 @emph{Warning:} this intrinsic does not increase the range of the timing
   10273 values over that returned by @code{clock(3)}. On a system with a 32-bit
   10274 @code{clock(3)}, @code{MCLOCK8} will return a 32-bit value, even though
   10275 it is converted to a 64-bit @code{INTEGER(8)} value. That means
   10276 overflows of the 32-bit value can still occur. Therefore, the values
   10277 returned by this intrinsic might be or become negative or numerically
   10278 less than previous values during a single run of the compiled program.
   10279 
   10280 @item @emph{Standard}:
   10281 GNU extension
   10282 
   10283 @item @emph{Class}:
   10284 Function
   10285 
   10286 @item @emph{Syntax}:
   10287 @code{RESULT = MCLOCK8()}
   10288 
   10289 @item @emph{Return value}:
   10290 The return value is a scalar of type @code{INTEGER(8)}, equal to the
   10291 number of clock ticks since the start of the process, or @code{-1} if
   10292 the system does not support @code{clock(3)}.
   10293 
   10294 @item @emph{See also}:
   10295 @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
   10296 
   10297 @end table
   10298 
   10299 
   10300 
   10301 @node MERGE
   10302 @section @code{MERGE} --- Merge variables
   10303 @fnindex MERGE
   10304 @cindex array, merge arrays
   10305 @cindex array, combine arrays
   10306 
   10307 @table @asis
   10308 @item @emph{Description}:
   10309 Select values from two arrays according to a logical mask.  The result
   10310 is equal to @var{TSOURCE} if @var{MASK} is @code{.TRUE.}, or equal to
   10311 @var{FSOURCE} if it is @code{.FALSE.}.
   10312 
   10313 @item @emph{Standard}:
   10314 Fortran 95 and later
   10315 
   10316 @item @emph{Class}:
   10317 Elemental function
   10318 
   10319 @item @emph{Syntax}:
   10320 @code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)}
   10321 
   10322 @item @emph{Arguments}:
   10323 @multitable @columnfractions .15 .70
   10324 @item @var{TSOURCE} @tab May be of any type.
   10325 @item @var{FSOURCE} @tab Shall be of the same type and type parameters
   10326 as @var{TSOURCE}.
   10327 @item @var{MASK}    @tab Shall be of type @code{LOGICAL}.
   10328 @end multitable
   10329 
   10330 @item @emph{Return value}:
   10331 The result is of the same type and type parameters as @var{TSOURCE}.
   10332 
   10333 @end table
   10334 
   10335 
   10336 
   10337 @node MERGE_BITS
   10338 @section @code{MERGE_BITS} --- Merge of bits under mask
   10339 @fnindex MERGE_BITS
   10340 @cindex bits, merge
   10341 
   10342 @table @asis
   10343 @item @emph{Description}:
   10344 @code{MERGE_BITS(I, J, MASK)} merges the bits of @var{I} and @var{J}
   10345 as determined by the mask.  The i-th bit of the result is equal to the 
   10346 i-th bit of @var{I} if the i-th bit of @var{MASK} is 1; it is equal to
   10347 the i-th bit of @var{J} otherwise.
   10348 
   10349 @item @emph{Standard}:
   10350 Fortran 2008 and later
   10351 
   10352 @item @emph{Class}:
   10353 Elemental function
   10354 
   10355 @item @emph{Syntax}:
   10356 @code{RESULT = MERGE_BITS(I, J, MASK)}
   10357 
   10358 @item @emph{Arguments}:
   10359 @multitable @columnfractions .15 .70
   10360 @item @var{I} @tab Shall be of type @code{INTEGER} or a boz-literal-constant.
   10361 @item @var{J} @tab Shall be of type @code{INTEGER} with the same
   10362 kind type parameter as @var{I} or a boz-literal-constant.
   10363 @var{I} and @var{J} shall not both be boz-literal-constants.
   10364 @item @var{MASK} @tab Shall be of type @code{INTEGER} or a boz-literal-constant
   10365 and of the same kind as @var{I}.
   10366 @end multitable
   10367 
   10368 @item @emph{Return value}:
   10369 The result is of the same type and kind as @var{I}.
   10370 
   10371 @end table
   10372 
   10373 
   10374 
   10375 @node MIN
   10376 @section @code{MIN} --- Minimum value of an argument list
   10377 @fnindex MIN
   10378 @fnindex MIN0
   10379 @fnindex AMIN0
   10380 @fnindex MIN1
   10381 @fnindex AMIN1
   10382 @fnindex DMIN1
   10383 @cindex minimum value
   10384 
   10385 @table @asis
   10386 @item @emph{Description}:
   10387 Returns the argument with the smallest (most negative) value.
   10388 
   10389 @item @emph{Standard}:
   10390 Fortran 77 and later
   10391 
   10392 @item @emph{Class}:
   10393 Elemental function
   10394 
   10395 @item @emph{Syntax}:
   10396 @code{RESULT = MIN(A1, A2 [, A3, ...])}
   10397 
   10398 @item @emph{Arguments}:
   10399 @multitable @columnfractions .15 .70
   10400 @item @var{A1}          @tab The type shall be @code{INTEGER} or
   10401 @code{REAL}.
   10402 @item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
   10403 as @var{A1}.  (As a GNU extension, arguments of different kinds are
   10404 permitted.)
   10405 @end multitable
   10406 
   10407 @item @emph{Return value}:
   10408 The return value corresponds to the maximum value among the arguments,
   10409 and has the same type and kind as the first argument.
   10410 
   10411 @item @emph{Specific names}:
   10412 @multitable @columnfractions .20 .20 .20 .25
   10413 @item Name              @tab Argument             @tab Return type        @tab Standard
   10414 @item @code{MIN0(A1)}   @tab @code{INTEGER(4) A1} @tab @code{INTEGER(4)}  @tab Fortran 77 and later
   10415 @item @code{AMIN0(A1)}  @tab @code{INTEGER(4) A1} @tab @code{REAL(4)}     @tab Fortran 77 and later
   10416 @item @code{MIN1(A1)}   @tab @code{REAL A1}       @tab @code{INTEGER(4)}  @tab Fortran 77 and later
   10417 @item @code{AMIN1(A1)}  @tab @code{REAL(4) A1}    @tab @code{REAL(4)}     @tab Fortran 77 and later
   10418 @item @code{DMIN1(A1)}  @tab @code{REAL(8) A1}    @tab @code{REAL(8)}     @tab Fortran 77 and later
   10419 @end multitable
   10420 
   10421 @item @emph{See also}:
   10422 @ref{MAX}, @ref{MINLOC}, @ref{MINVAL}
   10423 @end table
   10424 
   10425 
   10426 
   10427 @node MINEXPONENT
   10428 @section @code{MINEXPONENT} --- Minimum exponent of a real kind
   10429 @fnindex MINEXPONENT
   10430 @cindex model representation, minimum exponent
   10431 
   10432 @table @asis
   10433 @item @emph{Description}:
   10434 @code{MINEXPONENT(X)} returns the minimum exponent in the model of the
   10435 type of @code{X}.
   10436 
   10437 @item @emph{Standard}:
   10438 Fortran 95 and later
   10439 
   10440 @item @emph{Class}:
   10441 Inquiry function
   10442 
   10443 @item @emph{Syntax}:
   10444 @code{RESULT = MINEXPONENT(X)}
   10445 
   10446 @item @emph{Arguments}:
   10447 @multitable @columnfractions .15 .70
   10448 @item @var{X} @tab Shall be of type @code{REAL}.
   10449 @end multitable
   10450 
   10451 @item @emph{Return value}:
   10452 The return value is of type @code{INTEGER} and of the default integer
   10453 kind.
   10454 
   10455 @item @emph{Example}:
   10456 See @code{MAXEXPONENT} for an example.
   10457 @end table
   10458 
   10459 
   10460 
   10461 @node MINLOC
   10462 @section @code{MINLOC} --- Location of the minimum value within an array
   10463 @fnindex MINLOC
   10464 @cindex array, location of minimum element
   10465 
   10466 @table @asis
   10467 @item @emph{Description}:
   10468 Determines the location of the element in the array with the minimum
   10469 value, or, if the @var{DIM} argument is supplied, determines the
   10470 locations of the minimum element along each row of the array in the
   10471 @var{DIM} direction.  If @var{MASK} is present, only the elements for
   10472 which @var{MASK} is @code{.TRUE.} are considered.  If more than one
   10473 element in the array has the minimum value, the location returned is
   10474 that of the first such element in array element order if the
   10475 @var{BACK} is not present, or is false; if @var{BACK} is true, the location
   10476 returned is that of the last such element.  If the array has
   10477 zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
   10478 the result is an array of zeroes.  Similarly, if @var{DIM} is supplied
   10479 and all of the elements of @var{MASK} along a given row are zero, the
   10480 result value for that row is zero.
   10481 
   10482 @item @emph{Standard}:
   10483 Fortran 95 and later; @var{ARRAY} of @code{CHARACTER} and the
   10484 @var{KIND} argument are available in Fortran 2003 and later.
   10485 The @var{BACK} argument is available in Fortran 2008 and later.
   10486 
   10487 @item @emph{Class}:
   10488 Transformational function
   10489 
   10490 @item @emph{Syntax}:
   10491 @multitable @columnfractions .80
   10492 @item @code{RESULT = MINLOC(ARRAY, DIM [, MASK] [,KIND] [,BACK])}
   10493 @item @code{RESULT = MINLOC(ARRAY [, MASK], [,KIND] [,BACK])}
   10494 @end multitable
   10495 
   10496 @item @emph{Arguments}:
   10497 @multitable @columnfractions .15 .70
   10498 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER},
   10499 @code{REAL} or @code{CHARACTER}.
   10500 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10501 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10502 inclusive.  It may not be an optional dummy argument.
   10503 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
   10504 and conformable with @var{ARRAY}.
   10505 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   10506 expression indicating the kind parameter of the result.
   10507 @item @var{BACK} @tab (Optional) A scalar of type @code{LOGICAL}.
   10508 @end multitable
   10509 
   10510 @item @emph{Return value}:
   10511 If @var{DIM} is absent, the result is a rank-one array with a length
   10512 equal to the rank of @var{ARRAY}.  If @var{DIM} is present, the result
   10513 is an array with a rank one less than the rank of @var{ARRAY}, and a
   10514 size corresponding to the size of @var{ARRAY} with the @var{DIM}
   10515 dimension removed.  If @var{DIM} is present and @var{ARRAY} has a rank
   10516 of one, the result is a scalar.  If the optional argument @var{KIND}
   10517 is present, the result is an integer of kind @var{KIND}, otherwise it
   10518 is of default kind.
   10519 
   10520 @item @emph{See also}:
   10521 @ref{FINDLOC}, @ref{MIN}, @ref{MINVAL}
   10522 
   10523 @end table
   10524 
   10525 
   10526 
   10527 @node MINVAL
   10528 @section @code{MINVAL} --- Minimum value of an array
   10529 @fnindex MINVAL
   10530 @cindex array, minimum value
   10531 @cindex minimum value
   10532 
   10533 @table @asis
   10534 @item @emph{Description}:
   10535 Determines the minimum value of the elements in an array value, or, if
   10536 the @var{DIM} argument is supplied, determines the minimum value along
   10537 each row of the array in the @var{DIM} direction.  If @var{MASK} is
   10538 present, only the elements for which @var{MASK} is @code{.TRUE.} are
   10539 considered.  If the array has zero size, or all of the elements of
   10540 @var{MASK} are @code{.FALSE.}, then the result is @code{HUGE(ARRAY)} if
   10541 @var{ARRAY} is numeric, or a string of @code{CHAR(255)} characters if
   10542 @var{ARRAY} is of character type.
   10543 
   10544 @item @emph{Standard}:
   10545 Fortran 95 and later
   10546 
   10547 @item @emph{Class}:
   10548 Transformational function
   10549 
   10550 @item @emph{Syntax}:
   10551 @multitable @columnfractions .80
   10552 @item @code{RESULT = MINVAL(ARRAY, DIM [, MASK])}
   10553 @item @code{RESULT = MINVAL(ARRAY [, MASK])}
   10554 @end multitable
   10555 
   10556 @item @emph{Arguments}:
   10557 @multitable @columnfractions .15 .70
   10558 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER} or
   10559 @code{REAL}.
   10560 @item @var{DIM}   @tab (Optional) Shall be a scalar of type
   10561 @code{INTEGER}, with a value between one and the rank of @var{ARRAY},
   10562 inclusive.  It may not be an optional dummy argument.
   10563 @item @var{MASK}  @tab Shall be an array of type @code{LOGICAL},
   10564 and conformable with @var{ARRAY}.
   10565 @end multitable
   10566 
   10567 @item @emph{Return value}:
   10568 If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
   10569 is a scalar.  If @var{DIM} is present, the result is an array with a
   10570 rank one less than the rank of @var{ARRAY}, and a size corresponding to
   10571 the size of @var{ARRAY} with the @var{DIM} dimension removed.  In all
   10572 cases, the result is of the same type and kind as @var{ARRAY}.
   10573 
   10574 @item @emph{See also}:
   10575 @ref{MIN}, @ref{MINLOC}
   10576 
   10577 @end table
   10578 
   10579 
   10580 
   10581 @node MOD
   10582 @section @code{MOD} --- Remainder function
   10583 @fnindex MOD
   10584 @fnindex AMOD
   10585 @fnindex DMOD
   10586 @fnindex BMOD
   10587 @fnindex IMOD
   10588 @fnindex JMOD
   10589 @fnindex KMOD
   10590 @cindex remainder
   10591 @cindex division, remainder
   10592 
   10593 @table @asis
   10594 @item @emph{Description}:
   10595 @code{MOD(A,P)} computes the remainder of the division of A by P@. 
   10596 
   10597 @item @emph{Standard}:
   10598 Fortran 77 and later, has overloads that are GNU extensions
   10599 
   10600 @item @emph{Class}:
   10601 Elemental function
   10602 
   10603 @item @emph{Syntax}:
   10604 @code{RESULT = MOD(A, P)}
   10605 
   10606 @item @emph{Arguments}:
   10607 @multitable @columnfractions .15 .70
   10608 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}.
   10609 @item @var{P} @tab Shall be a scalar of the same type and kind as @var{A} 
   10610 and not equal to zero.
   10611 @end multitable
   10612 
   10613 @item @emph{Return value}:
   10614 The return value is the result of @code{A - (INT(A/P) * P)}. The type
   10615 and kind of the return value is the same as that of the arguments. The
   10616 returned value has the same sign as A and a magnitude less than the
   10617 magnitude of P.
   10618 
   10619 @item @emph{Example}:
   10620 @smallexample
   10621 program test_mod
   10622   print *, mod(17,3)
   10623   print *, mod(17.5,5.5)
   10624   print *, mod(17.5d0,5.5)
   10625   print *, mod(17.5,5.5d0)
   10626 
   10627   print *, mod(-17,3)
   10628   print *, mod(-17.5,5.5)
   10629   print *, mod(-17.5d0,5.5)
   10630   print *, mod(-17.5,5.5d0)
   10631 
   10632   print *, mod(17,-3)
   10633   print *, mod(17.5,-5.5)
   10634   print *, mod(17.5d0,-5.5)
   10635   print *, mod(17.5,-5.5d0)
   10636 end program test_mod
   10637 @end smallexample
   10638 
   10639 @item @emph{Specific names}:
   10640 @multitable @columnfractions .20 .20 .20 .25
   10641 @item Name             @tab Arguments          @tab Return type    @tab Standard
   10642 @item @code{MOD(A,P)}  @tab @code{INTEGER A,P} @tab @code{INTEGER} @tab Fortran 95 and later
   10643 @item @code{AMOD(A,P)} @tab @code{REAL(4) A,P} @tab @code{REAL(4)} @tab Fortran 95 and later
   10644 @item @code{DMOD(A,P)} @tab @code{REAL(8) A,P} @tab @code{REAL(8)} @tab Fortran 95 and later
   10645 @item @code{BMOD(A,P)}  @tab @code{INTEGER(1) A,P} @tab @code{INTEGER(1)} @tab GNU extension
   10646 @item @code{IMOD(A,P)}  @tab @code{INTEGER(2) A,P} @tab @code{INTEGER(2)} @tab GNU extension
   10647 @item @code{JMOD(A,P)}  @tab @code{INTEGER(4) A,P} @tab @code{INTEGER(4)} @tab GNU extension
   10648 @item @code{KMOD(A,P)}  @tab @code{INTEGER(8) A,P} @tab @code{INTEGER(8)} @tab GNU extension
   10649 @end multitable
   10650 
   10651 @item @emph{See also}:
   10652 @ref{MODULO}
   10653 
   10654 @end table
   10655 
   10656 
   10657 
   10658 @node MODULO
   10659 @section @code{MODULO} --- Modulo function
   10660 @fnindex MODULO
   10661 @cindex modulo
   10662 @cindex division, modulo
   10663 
   10664 @table @asis
   10665 @item @emph{Description}:
   10666 @code{MODULO(A,P)} computes the @var{A} modulo @var{P}.
   10667 
   10668 @item @emph{Standard}:
   10669 Fortran 95 and later
   10670 
   10671 @item @emph{Class}:
   10672 Elemental function
   10673 
   10674 @item @emph{Syntax}:
   10675 @code{RESULT = MODULO(A, P)}
   10676 
   10677 @item @emph{Arguments}:
   10678 @multitable @columnfractions .15 .70
   10679 @item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}.
   10680 @item @var{P} @tab Shall be a scalar of the same type and kind as @var{A}. 
   10681 It shall not be zero.
   10682 @end multitable
   10683 
   10684 @item @emph{Return value}:
   10685 The type and kind of the result are those of the arguments.
   10686 @table @asis
   10687 @item If @var{A} and @var{P} are of type @code{INTEGER}:
   10688 @code{MODULO(A,P)} has the value @var{R} such that @code{A=Q*P+R}, where
   10689 @var{Q} is an integer and @var{R} is between 0 (inclusive) and @var{P}
   10690 (exclusive).
   10691 @item If @var{A} and @var{P} are of type @code{REAL}:
   10692 @code{MODULO(A,P)} has the value of @code{A - FLOOR (A / P) * P}.
   10693 @end table
   10694 The returned value has the same sign as P and a magnitude less than
   10695 the magnitude of P.
   10696 
   10697 @item @emph{Example}:
   10698 @smallexample
   10699 program test_modulo
   10700   print *, modulo(17,3)
   10701   print *, modulo(17.5,5.5)
   10702 
   10703   print *, modulo(-17,3)
   10704   print *, modulo(-17.5,5.5)
   10705 
   10706   print *, modulo(17,-3)
   10707   print *, modulo(17.5,-5.5)
   10708 end program
   10709 @end smallexample
   10710 
   10711 @item @emph{See also}:
   10712 @ref{MOD}
   10713 
   10714 @end table
   10715 
   10716 
   10717 
   10718 @node MOVE_ALLOC
   10719 @section @code{MOVE_ALLOC} --- Move allocation from one object to another
   10720 @fnindex MOVE_ALLOC
   10721 @cindex moving allocation
   10722 @cindex allocation, moving
   10723 
   10724 @table @asis
   10725 @item @emph{Description}:
   10726 @code{MOVE_ALLOC(FROM, TO)} moves the allocation from @var{FROM} to
   10727 @var{TO}.  @var{FROM} will become deallocated in the process.
   10728 
   10729 @item @emph{Standard}:
   10730 Fortran 2003 and later
   10731 
   10732 @item @emph{Class}:
   10733 Pure subroutine
   10734 
   10735 @item @emph{Syntax}:
   10736 @code{CALL MOVE_ALLOC(FROM, TO)}
   10737 
   10738 @item @emph{Arguments}:
   10739 @multitable @columnfractions .15 .70
   10740 @item @var{FROM}  @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be
   10741 of any type and kind.
   10742 @item @var{TO} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be
   10743 of the same type, kind and rank as @var{FROM}.
   10744 @end multitable
   10745 
   10746 @item @emph{Return value}:
   10747 None
   10748 
   10749 @item @emph{Example}:
   10750 @smallexample
   10751 program test_move_alloc
   10752     integer, allocatable :: a(:), b(:)
   10753 
   10754     allocate(a(3))
   10755     a = [ 1, 2, 3 ]
   10756     call move_alloc(a, b)
   10757     print *, allocated(a), allocated(b)
   10758     print *, b
   10759 end program test_move_alloc
   10760 @end smallexample
   10761 @end table
   10762 
   10763 
   10764 
   10765 @node MVBITS
   10766 @section @code{MVBITS} --- Move bits from one integer to another
   10767 @fnindex MVBITS
   10768 @fnindex BMVBITS
   10769 @fnindex IMVBITS
   10770 @fnindex JMVBITS
   10771 @fnindex KMVBITS
   10772 @cindex bits, move
   10773 
   10774 @table @asis
   10775 @item @emph{Description}:
   10776 Moves @var{LEN} bits from positions @var{FROMPOS} through
   10777 @code{FROMPOS+LEN-1} of @var{FROM} to positions @var{TOPOS} through
   10778 @code{TOPOS+LEN-1} of @var{TO}. The portion of argument @var{TO} not
   10779 affected by the movement of bits is unchanged. The values of
   10780 @code{FROMPOS+LEN-1} and @code{TOPOS+LEN-1} must be less than
   10781 @code{BIT_SIZE(FROM)}.
   10782 
   10783 @item @emph{Standard}:
   10784 Fortran 95 and later, has overloads that are GNU extensions
   10785 
   10786 @item @emph{Class}:
   10787 Elemental subroutine
   10788 
   10789 @item @emph{Syntax}:
   10790 @code{CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
   10791 
   10792 @item @emph{Arguments}:
   10793 @multitable @columnfractions .15 .70
   10794 @item @var{FROM}    @tab The type shall be @code{INTEGER}.
   10795 @item @var{FROMPOS} @tab The type shall be @code{INTEGER}.
   10796 @item @var{LEN}     @tab The type shall be @code{INTEGER}.
   10797 @item @var{TO}      @tab The type shall be @code{INTEGER}, of the
   10798 same kind as @var{FROM}.
   10799 @item @var{TOPOS}   @tab The type shall be @code{INTEGER}.
   10800 @end multitable
   10801 
   10802 @item @emph{Specific names}:
   10803 @multitable @columnfractions .20 .20 .20 .25
   10804 @item Name            @tab Argument            @tab Return type       @tab Standard
   10805 @item @code{MVBITS(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   10806 @item @code{BMVBITS(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   10807 @item @code{IMVBITS(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   10808 @item @code{JMVBITS(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   10809 @item @code{KMVBITS(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   10810 @end multitable
   10811 
   10812 @item @emph{See also}:
   10813 @ref{IBCLR}, @ref{IBSET}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
   10814 @end table
   10815 
   10816 
   10817 
   10818 @node NEAREST
   10819 @section @code{NEAREST} --- Nearest representable number
   10820 @fnindex NEAREST
   10821 @cindex real number, nearest different
   10822 @cindex floating point, nearest different
   10823 
   10824 @table @asis
   10825 @item @emph{Description}:
   10826 @code{NEAREST(X, S)} returns the processor-representable number nearest
   10827 to @code{X} in the direction indicated by the sign of @code{S}.
   10828 
   10829 @item @emph{Standard}:
   10830 Fortran 95 and later
   10831 
   10832 @item @emph{Class}:
   10833 Elemental function
   10834 
   10835 @item @emph{Syntax}:
   10836 @code{RESULT = NEAREST(X, S)}
   10837 
   10838 @item @emph{Arguments}:
   10839 @multitable @columnfractions .15 .70
   10840 @item @var{X} @tab Shall be of type @code{REAL}.
   10841 @item @var{S} @tab Shall be of type @code{REAL} and
   10842 not equal to zero.
   10843 @end multitable
   10844 
   10845 @item @emph{Return value}:
   10846 The return value is of the same type as @code{X}. If @code{S} is
   10847 positive, @code{NEAREST} returns the processor-representable number
   10848 greater than @code{X} and nearest to it. If @code{S} is negative,
   10849 @code{NEAREST} returns the processor-representable number smaller than
   10850 @code{X} and nearest to it.
   10851 
   10852 @item @emph{Example}:
   10853 @smallexample
   10854 program test_nearest
   10855   real :: x, y
   10856   x = nearest(42.0, 1.0)
   10857   y = nearest(42.0, -1.0)
   10858   write (*,"(3(G20.15))") x, y, x - y
   10859 end program test_nearest
   10860 @end smallexample
   10861 @end table
   10862 
   10863 
   10864 
   10865 @node NEW_LINE
   10866 @section @code{NEW_LINE} --- New line character
   10867 @fnindex NEW_LINE
   10868 @cindex newline
   10869 @cindex output, newline
   10870 
   10871 @table @asis
   10872 @item @emph{Description}:
   10873 @code{NEW_LINE(C)} returns the new-line character.
   10874 
   10875 @item @emph{Standard}:
   10876 Fortran 2003 and later
   10877 
   10878 @item @emph{Class}:
   10879 Inquiry function
   10880 
   10881 @item @emph{Syntax}:
   10882 @code{RESULT = NEW_LINE(C)}
   10883 
   10884 @item @emph{Arguments}:
   10885 @multitable @columnfractions .15 .70
   10886 @item @var{C}    @tab The argument shall be a scalar or array of the
   10887 type @code{CHARACTER}.
   10888 @end multitable
   10889 
   10890 @item @emph{Return value}:
   10891 Returns a @var{CHARACTER} scalar of length one with the new-line character of
   10892 the same kind as parameter @var{C}.
   10893 
   10894 @item @emph{Example}:
   10895 @smallexample
   10896 program newline
   10897   implicit none
   10898   write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'
   10899 end program newline
   10900 @end smallexample
   10901 @end table
   10902 
   10903 
   10904 
   10905 @node NINT
   10906 @section @code{NINT} --- Nearest whole number
   10907 @fnindex NINT
   10908 @fnindex IDNINT
   10909 @cindex rounding, nearest whole number
   10910 
   10911 @table @asis
   10912 @item @emph{Description}:
   10913 @code{NINT(A)} rounds its argument to the nearest whole number.
   10914 
   10915 @item @emph{Standard}:
   10916 Fortran 77 and later, with @var{KIND} argument Fortran 90 and later
   10917 
   10918 @item @emph{Class}:
   10919 Elemental function
   10920 
   10921 @item @emph{Syntax}:
   10922 @code{RESULT = NINT(A [, KIND])}
   10923 
   10924 @item @emph{Arguments}:
   10925 @multitable @columnfractions .15 .70
   10926 @item @var{A}    @tab The type of the argument shall be @code{REAL}.
   10927 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   10928 expression indicating the kind parameter of the result.
   10929 @end multitable
   10930 
   10931 @item @emph{Return value}:
   10932 Returns @var{A} with the fractional portion of its magnitude eliminated by
   10933 rounding to the nearest whole number and with its sign preserved,
   10934 converted to an @code{INTEGER} of the default kind.
   10935 
   10936 @item @emph{Example}:
   10937 @smallexample
   10938 program test_nint
   10939   real(4) x4
   10940   real(8) x8
   10941   x4 = 1.234E0_4
   10942   x8 = 4.321_8
   10943   print *, nint(x4), idnint(x8)
   10944 end program test_nint
   10945 @end smallexample
   10946 
   10947 @item @emph{Specific names}:
   10948 @multitable @columnfractions .20 .20 .20 .25
   10949 @item Name             @tab Argument           @tab Return Type     @tab Standard
   10950 @item @code{NINT(A)}   @tab @code{REAL(4) A}   @tab  @code{INTEGER} @tab Fortran 95 and later
   10951 @item @code{IDNINT(A)} @tab @code{REAL(8) A}   @tab  @code{INTEGER} @tab Fortran 95 and later
   10952 @end multitable
   10953 
   10954 @item @emph{See also}:
   10955 @ref{CEILING}, @ref{FLOOR}
   10956 
   10957 @end table
   10958 
   10959 
   10960 
   10961 @node NORM2
   10962 @section @code{NORM2} --- Euclidean vector norms
   10963 @fnindex NORM2
   10964 @cindex Euclidean vector norm
   10965 @cindex L2 vector norm
   10966 @cindex norm, Euclidean
   10967 
   10968 @table @asis
   10969 @item @emph{Description}:
   10970 Calculates the Euclidean vector norm (@math{L_2} norm) of
   10971 of @var{ARRAY} along dimension @var{DIM}.
   10972 
   10973 @item @emph{Standard}:
   10974 Fortran 2008 and later
   10975 
   10976 @item @emph{Class}:
   10977 Transformational function
   10978 
   10979 @item @emph{Syntax}:
   10980 @multitable @columnfractions .80
   10981 @item @code{RESULT = NORM2(ARRAY[, DIM])}
   10982 @end multitable
   10983 
   10984 @item @emph{Arguments}:
   10985 @multitable @columnfractions .15 .70
   10986 @item @var{ARRAY} @tab Shall be an array of type @code{REAL}
   10987 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   10988 @code{INTEGER} with a value in the range from 1 to n, where n 
   10989 equals the rank of @var{ARRAY}.
   10990 @end multitable
   10991 
   10992 @item @emph{Return value}:
   10993 The result is of the same type as @var{ARRAY}.
   10994 
   10995 If @var{DIM} is absent, a scalar with the square root of the sum of all
   10996 elements in @var{ARRAY} squared  is returned. Otherwise, an array of
   10997 rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY}, and a
   10998 shape similar to that of @var{ARRAY} with dimension @var{DIM} dropped
   10999 is returned.
   11000 
   11001 @item @emph{Example}:
   11002 @smallexample
   11003 PROGRAM test_sum
   11004   REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]
   11005   print *, NORM2(x)  ! = sqrt(55.) ~ 7.416
   11006 END PROGRAM
   11007 @end smallexample
   11008 @end table
   11009 
   11010 
   11011 
   11012 @node NOT
   11013 @section @code{NOT} --- Logical negation
   11014 @fnindex NOT
   11015 @fnindex BNOT
   11016 @fnindex INOT
   11017 @fnindex JNOT
   11018 @fnindex KNOT
   11019 @cindex bits, negate
   11020 @cindex bitwise logical not
   11021 @cindex logical not, bitwise
   11022 
   11023 @table @asis
   11024 @item @emph{Description}:
   11025 @code{NOT} returns the bitwise Boolean inverse of @var{I}.
   11026 
   11027 @item @emph{Standard}:
   11028 Fortran 95 and later, has overloads that are GNU extensions
   11029 
   11030 @item @emph{Class}:
   11031 Elemental function
   11032 
   11033 @item @emph{Syntax}:
   11034 @code{RESULT = NOT(I)}
   11035 
   11036 @item @emph{Arguments}:
   11037 @multitable @columnfractions .15 .70
   11038 @item @var{I} @tab The type shall be @code{INTEGER}.
   11039 @end multitable
   11040 
   11041 @item @emph{Return value}:
   11042 The return type is @code{INTEGER}, of the same kind as the
   11043 argument.
   11044 
   11045 @item @emph{Specific names}:
   11046 @multitable @columnfractions .20 .20 .20 .25
   11047 @item Name            @tab Argument            @tab Return type       @tab Standard
   11048 @item @code{NOT(A)}   @tab @code{INTEGER A}    @tab @code{INTEGER}    @tab Fortran 95 and later
   11049 @item @code{BNOT(A)} @tab @code{INTEGER(1) A} @tab @code{INTEGER(1)} @tab GNU extension
   11050 @item @code{INOT(A)} @tab @code{INTEGER(2) A} @tab @code{INTEGER(2)} @tab GNU extension
   11051 @item @code{JNOT(A)} @tab @code{INTEGER(4) A} @tab @code{INTEGER(4)} @tab GNU extension
   11052 @item @code{KNOT(A)} @tab @code{INTEGER(8) A} @tab @code{INTEGER(8)} @tab GNU extension
   11053 @end multitable
   11054 
   11055 @item @emph{See also}:
   11056 @ref{IAND}, @ref{IEOR}, @ref{IOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}
   11057 
   11058 @end table
   11059 
   11060 
   11061 
   11062 @node NULL
   11063 @section @code{NULL} --- Function that returns an disassociated pointer
   11064 @fnindex NULL
   11065 @cindex pointer, status
   11066 @cindex pointer, disassociated
   11067 
   11068 @table @asis
   11069 @item @emph{Description}:
   11070 Returns a disassociated pointer.
   11071 
   11072 If @var{MOLD} is present, a disassociated pointer of the same type is
   11073 returned, otherwise the type is determined by context.
   11074 
   11075 In Fortran 95, @var{MOLD} is optional. Please note that Fortran 2003
   11076 includes cases where it is required.
   11077 
   11078 @item @emph{Standard}:
   11079 Fortran 95 and later
   11080 
   11081 @item @emph{Class}:
   11082 Transformational function
   11083 
   11084 @item @emph{Syntax}:
   11085 @code{PTR => NULL([MOLD])}
   11086 
   11087 @item @emph{Arguments}:
   11088 @multitable @columnfractions .15 .70
   11089 @item @var{MOLD} @tab (Optional) shall be a pointer of any association
   11090 status and of any type.
   11091 @end multitable
   11092 
   11093 @item @emph{Return value}:
   11094 A disassociated pointer.
   11095 
   11096 @item @emph{Example}:
   11097 @smallexample
   11098 REAL, POINTER, DIMENSION(:) :: VEC => NULL ()
   11099 @end smallexample
   11100 
   11101 @item @emph{See also}:
   11102 @ref{ASSOCIATED}
   11103 @end table
   11104 
   11105 
   11106 
   11107 @node NUM_IMAGES
   11108 @section @code{NUM_IMAGES} --- Function that returns the number of images
   11109 @fnindex NUM_IMAGES
   11110 @cindex coarray, @code{NUM_IMAGES}
   11111 @cindex images, number of
   11112 
   11113 @table @asis
   11114 @item @emph{Description}:
   11115 Returns the number of images.
   11116 
   11117 @item @emph{Standard}:
   11118 Fortran 2008 and later. With @var{DISTANCE} or @var{FAILED} argument, 
   11119 Technical Specification (TS) 18508 or later
   11120 
   11121 
   11122 @item @emph{Class}:
   11123 Transformational function
   11124 
   11125 @item @emph{Syntax}:
   11126 @code{RESULT = NUM_IMAGES(DISTANCE, FAILED)}
   11127 
   11128 @item @emph{Arguments}:
   11129 @multitable @columnfractions .15 .70
   11130 @item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer
   11131 @item @var{FAILED}   @tab (optional, intent(in)) Scalar logical expression
   11132 @end multitable
   11133 
   11134 @item @emph{Return value}:
   11135 Scalar default-kind integer.  If @var{DISTANCE} is not present or has value 0,
   11136 the number of images in the current team is returned. For values smaller or
   11137 equal distance to the initial team, it returns the number of images index
   11138 on the ancestor team which has a distance of @var{DISTANCE} from the invoking
   11139 team. If @var{DISTANCE} is larger than the distance to the initial team, the
   11140 number of images of the initial team is returned. If @var{FAILED} is not present
   11141 the total number of images is returned; if it has the value @code{.TRUE.},
   11142 the number of failed images is returned, otherwise, the number of images which
   11143 do have not the failed status.
   11144 
   11145 @item @emph{Example}:
   11146 @smallexample
   11147 INTEGER :: value[*]
   11148 INTEGER :: i
   11149 value = THIS_IMAGE()
   11150 SYNC ALL
   11151 IF (THIS_IMAGE() == 1) THEN
   11152   DO i = 1, NUM_IMAGES()
   11153     WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
   11154   END DO
   11155 END IF
   11156 @end smallexample
   11157 
   11158 @item @emph{See also}:
   11159 @ref{THIS_IMAGE}, @ref{IMAGE_INDEX}
   11160 @end table
   11161 
   11162 
   11163 
   11164 @node OR
   11165 @section @code{OR} --- Bitwise logical OR
   11166 @fnindex OR
   11167 @cindex bitwise logical or
   11168 @cindex logical or, bitwise
   11169 
   11170 @table @asis
   11171 @item @emph{Description}:
   11172 Bitwise logical @code{OR}.
   11173 
   11174 This intrinsic routine is provided for backwards compatibility with 
   11175 GNU Fortran 77.  For integer arguments, programmers should consider
   11176 the use of the @ref{IOR} intrinsic defined by the Fortran standard.
   11177 
   11178 @item @emph{Standard}:
   11179 GNU extension
   11180 
   11181 @item @emph{Class}:
   11182 Function
   11183 
   11184 @item @emph{Syntax}:
   11185 @code{RESULT = OR(I, J)}
   11186 
   11187 @item @emph{Arguments}:
   11188 @multitable @columnfractions .15 .70
   11189 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
   11190 type or a scalar @code{LOGICAL} type or a boz-literal-constant.
   11191 @item @var{J} @tab The type shall be the same as the type of @var{I} or
   11192 a boz-literal-constant. @var{I} and @var{J} shall not both be
   11193 boz-literal-constants.  If either @var{I} and @var{J} is a
   11194 boz-literal-constant, then the other argument must be a scalar @code{INTEGER}.
   11195 @end multitable
   11196 
   11197 @item @emph{Return value}:
   11198 The return type is either a scalar @code{INTEGER} or a scalar
   11199 @code{LOGICAL}.  If the kind type parameters differ, then the
   11200 smaller kind type is implicitly converted to larger kind, and the 
   11201 return has the larger kind.  A boz-literal-constant is 
   11202 converted to an @code{INTEGER} with the kind type parameter of
   11203 the other argument as-if a call to @ref{INT} occurred.
   11204 
   11205 @item @emph{Example}:
   11206 @smallexample
   11207 PROGRAM test_or
   11208   LOGICAL :: T = .TRUE., F = .FALSE.
   11209   INTEGER :: a, b
   11210   DATA a / Z'F' /, b / Z'3' /
   11211 
   11212   WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)
   11213   WRITE (*,*) OR(a, b)
   11214 END PROGRAM
   11215 @end smallexample
   11216 
   11217 @item @emph{See also}:
   11218 Fortran 95 elemental function: @ref{IOR}
   11219 @end table
   11220 
   11221 
   11222 
   11223 @node PACK
   11224 @section @code{PACK} --- Pack an array into an array of rank one
   11225 @fnindex PACK
   11226 @cindex array, packing
   11227 @cindex array, reduce dimension
   11228 @cindex array, gather elements
   11229 
   11230 @table @asis
   11231 @item @emph{Description}:
   11232 Stores the elements of @var{ARRAY} in an array of rank one.
   11233 
   11234 The beginning of the resulting array is made up of elements whose @var{MASK} 
   11235 equals @code{TRUE}. Afterwards, positions are filled with elements taken from
   11236 @var{VECTOR}.
   11237 
   11238 @item @emph{Standard}:
   11239 Fortran 95 and later
   11240 
   11241 @item @emph{Class}:
   11242 Transformational function
   11243 
   11244 @item @emph{Syntax}:
   11245 @code{RESULT = PACK(ARRAY, MASK[,VECTOR])}
   11246 
   11247 @item @emph{Arguments}:
   11248 @multitable @columnfractions .15 .70
   11249 @item @var{ARRAY}  @tab Shall be an array of any type.
   11250 @item @var{MASK}   @tab Shall be an array of type @code{LOGICAL} and 
   11251 of the same size as @var{ARRAY}. Alternatively, it may be a @code{LOGICAL} 
   11252 scalar.
   11253 @item @var{VECTOR} @tab (Optional) shall be an array of the same type 
   11254 as @var{ARRAY} and of rank one. If present, the number of elements in 
   11255 @var{VECTOR} shall be equal to or greater than the number of true elements 
   11256 in @var{MASK}. If @var{MASK} is scalar, the number of elements in 
   11257 @var{VECTOR} shall be equal to or greater than the number of elements in
   11258 @var{ARRAY}.
   11259 @end multitable
   11260 
   11261 @item @emph{Return value}:
   11262 The result is an array of rank one and the same type as that of @var{ARRAY}.
   11263 If @var{VECTOR} is present, the result size is that of @var{VECTOR}, the
   11264 number of @code{TRUE} values in @var{MASK} otherwise.
   11265 
   11266 @item @emph{Example}:
   11267 Gathering nonzero elements from an array:
   11268 @smallexample
   11269 PROGRAM test_pack_1
   11270   INTEGER :: m(6)
   11271   m = (/ 1, 0, 0, 0, 5, 0 /)
   11272   WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0)  ! "1 5"
   11273 END PROGRAM
   11274 @end smallexample
   11275 
   11276 Gathering nonzero elements from an array and appending elements from @var{VECTOR}:
   11277 @smallexample
   11278 PROGRAM test_pack_2
   11279   INTEGER :: m(4)
   11280   m = (/ 1, 0, 0, 2 /)
   11281   WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /))  ! "1 2 3 4"
   11282 END PROGRAM
   11283 @end smallexample
   11284 
   11285 @item @emph{See also}:
   11286 @ref{UNPACK}
   11287 @end table
   11288 
   11289 
   11290 
   11291 @node PARITY
   11292 @section @code{PARITY} --- Reduction with exclusive OR
   11293 @fnindex PARITY
   11294 @cindex Parity
   11295 @cindex Reduction, XOR
   11296 @cindex XOR reduction
   11297 
   11298 @table @asis
   11299 @item @emph{Description}:
   11300 Calculates the parity, i.e. the reduction using @code{.XOR.},
   11301 of @var{MASK} along dimension @var{DIM}.
   11302 
   11303 @item @emph{Standard}:
   11304 Fortran 2008 and later
   11305 
   11306 @item @emph{Class}:
   11307 Transformational function
   11308 
   11309 @item @emph{Syntax}:
   11310 @multitable @columnfractions .80
   11311 @item @code{RESULT = PARITY(MASK[, DIM])}
   11312 @end multitable
   11313 
   11314 @item @emph{Arguments}:
   11315 @multitable @columnfractions .15 .70
   11316 @item @var{LOGICAL} @tab Shall be an array of type @code{LOGICAL}
   11317 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   11318 @code{INTEGER} with a value in the range from 1 to n, where n 
   11319 equals the rank of @var{MASK}.
   11320 @end multitable
   11321 
   11322 @item @emph{Return value}:
   11323 The result is of the same type as @var{MASK}.
   11324 
   11325 If @var{DIM} is absent, a scalar with the parity of all elements in
   11326 @var{MASK} is returned, i.e. true if an odd number of elements is
   11327 @code{.true.} and false otherwise.  If @var{DIM} is present, an array
   11328 of rank @math{n-1}, where @math{n} equals the rank of @var{ARRAY},
   11329 and a shape similar to that of @var{MASK} with dimension @var{DIM}
   11330 dropped is returned.
   11331 
   11332 @item @emph{Example}:
   11333 @smallexample
   11334 PROGRAM test_sum
   11335   LOGICAL :: x(2) = [ .true., .false. ]
   11336   print *, PARITY(x) ! prints "T" (true).
   11337 END PROGRAM
   11338 @end smallexample
   11339 @end table
   11340 
   11341 
   11342 
   11343 @node PERROR
   11344 @section @code{PERROR} --- Print system error message
   11345 @fnindex PERROR
   11346 @cindex system, error handling
   11347 
   11348 @table @asis
   11349 @item @emph{Description}:
   11350 Prints (on the C @code{stderr} stream) a newline-terminated error
   11351 message corresponding to the last system error. This is prefixed by
   11352 @var{STRING}, a colon and a space. See @code{perror(3)}.
   11353 
   11354 @item @emph{Standard}:
   11355 GNU extension
   11356 
   11357 @item @emph{Class}:
   11358 Subroutine
   11359 
   11360 @item @emph{Syntax}:
   11361 @code{CALL PERROR(STRING)}
   11362 
   11363 @item @emph{Arguments}:
   11364 @multitable @columnfractions .15 .70
   11365 @item @var{STRING} @tab A scalar of type @code{CHARACTER} and of the
   11366 default kind.
   11367 @end multitable
   11368 
   11369 @item @emph{See also}:
   11370 @ref{IERRNO}
   11371 @end table
   11372 
   11373 
   11374 
   11375 @node POPCNT
   11376 @section @code{POPCNT} --- Number of bits set
   11377 @fnindex POPCNT
   11378 @cindex binary representation
   11379 @cindex bits set
   11380 
   11381 @table @asis
   11382 @item @emph{Description}:
   11383 @code{POPCNT(I)} returns the number of bits set ('1' bits) in the binary
   11384 representation of @code{I}.
   11385 
   11386 @item @emph{Standard}:
   11387 Fortran 2008 and later
   11388 
   11389 @item @emph{Class}:
   11390 Elemental function
   11391 
   11392 @item @emph{Syntax}:
   11393 @code{RESULT = POPCNT(I)}
   11394 
   11395 @item @emph{Arguments}:
   11396 @multitable @columnfractions .15 .70
   11397 @item @var{I} @tab Shall be of type @code{INTEGER}.
   11398 @end multitable
   11399 
   11400 @item @emph{Return value}:
   11401 The return value is of type @code{INTEGER} and of the default integer
   11402 kind.
   11403 
   11404 @item @emph{See also}:
   11405 @ref{POPPAR}, @ref{LEADZ}, @ref{TRAILZ}
   11406 
   11407 @item @emph{Example}:
   11408 @smallexample
   11409 program test_population
   11410   print *, popcnt(127),       poppar(127)
   11411   print *, popcnt(huge(0_4)), poppar(huge(0_4))
   11412   print *, popcnt(huge(0_8)), poppar(huge(0_8))
   11413 end program test_population
   11414 @end smallexample
   11415 @end table
   11416 
   11417 
   11418 @node POPPAR
   11419 @section @code{POPPAR} --- Parity of the number of bits set
   11420 @fnindex POPPAR
   11421 @cindex binary representation
   11422 @cindex parity
   11423 
   11424 @table @asis
   11425 @item @emph{Description}:
   11426 @code{POPPAR(I)} returns parity of the integer @code{I}, i.e. the parity
   11427 of the number of bits set ('1' bits) in the binary representation of
   11428 @code{I}. It is equal to 0 if @code{I} has an even number of bits set,
   11429 and 1 for an odd number of '1' bits.
   11430 
   11431 @item @emph{Standard}:
   11432 Fortran 2008 and later
   11433 
   11434 @item @emph{Class}:
   11435 Elemental function
   11436 
   11437 @item @emph{Syntax}:
   11438 @code{RESULT = POPPAR(I)}
   11439 
   11440 @item @emph{Arguments}:
   11441 @multitable @columnfractions .15 .70
   11442 @item @var{I} @tab Shall be of type @code{INTEGER}.
   11443 @end multitable
   11444 
   11445 @item @emph{Return value}:
   11446 The return value is of type @code{INTEGER} and of the default integer
   11447 kind.
   11448 
   11449 @item @emph{See also}:
   11450 @ref{POPCNT}, @ref{LEADZ}, @ref{TRAILZ}
   11451 
   11452 @item @emph{Example}:
   11453 @smallexample
   11454 program test_population
   11455   print *, popcnt(127),       poppar(127)
   11456   print *, popcnt(huge(0_4)), poppar(huge(0_4))
   11457   print *, popcnt(huge(0_8)), poppar(huge(0_8))
   11458 end program test_population
   11459 @end smallexample
   11460 @end table
   11461 
   11462 
   11463 
   11464 @node PRECISION
   11465 @section @code{PRECISION} --- Decimal precision of a real kind
   11466 @fnindex PRECISION
   11467 @cindex model representation, precision
   11468 
   11469 @table @asis
   11470 @item @emph{Description}:
   11471 @code{PRECISION(X)} returns the decimal precision in the model of the
   11472 type of @code{X}.
   11473 
   11474 @item @emph{Standard}:
   11475 Fortran 95 and later
   11476 
   11477 @item @emph{Class}:
   11478 Inquiry function
   11479 
   11480 @item @emph{Syntax}:
   11481 @code{RESULT = PRECISION(X)}
   11482 
   11483 @item @emph{Arguments}:
   11484 @multitable @columnfractions .15 .70
   11485 @item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}.
   11486 @end multitable
   11487 
   11488 @item @emph{Return value}:
   11489 The return value is of type @code{INTEGER} and of the default integer
   11490 kind.
   11491 
   11492 @item @emph{See also}:
   11493 @ref{SELECTED_REAL_KIND}, @ref{RANGE}
   11494 
   11495 @item @emph{Example}:
   11496 @smallexample
   11497 program prec_and_range
   11498   real(kind=4) :: x(2)
   11499   complex(kind=8) :: y
   11500 
   11501   print *, precision(x), range(x)
   11502   print *, precision(y), range(y)
   11503 end program prec_and_range
   11504 @end smallexample
   11505 @end table
   11506 
   11507 
   11508 
   11509 @node PRESENT
   11510 @section @code{PRESENT} --- Determine whether an optional dummy argument is specified
   11511 @fnindex PRESENT
   11512 
   11513 @table @asis
   11514 @item @emph{Description}:
   11515 Determines whether an optional dummy argument is present.
   11516 
   11517 @item @emph{Standard}:
   11518 Fortran 95 and later
   11519 
   11520 @item @emph{Class}:
   11521 Inquiry function
   11522 
   11523 @item @emph{Syntax}:
   11524 @code{RESULT = PRESENT(A)}
   11525 
   11526 @item @emph{Arguments}:
   11527 @multitable @columnfractions .15 .70
   11528 @item @var{A} @tab May be of any type and may be a pointer, scalar or array
   11529 value, or a dummy procedure. It shall be the name of an optional dummy argument
   11530 accessible within the current subroutine or function.
   11531 @end multitable
   11532 
   11533 @item @emph{Return value}:
   11534 Returns either @code{TRUE} if the optional argument @var{A} is present, or
   11535 @code{FALSE} otherwise.
   11536 
   11537 @item @emph{Example}:
   11538 @smallexample
   11539 PROGRAM test_present
   11540   WRITE(*,*) f(), f(42)      ! "F T"
   11541 CONTAINS
   11542   LOGICAL FUNCTION f(x)
   11543     INTEGER, INTENT(IN), OPTIONAL :: x
   11544     f = PRESENT(x)
   11545   END FUNCTION
   11546 END PROGRAM
   11547 @end smallexample
   11548 @end table
   11549 
   11550 
   11551 
   11552 @node PRODUCT
   11553 @section @code{PRODUCT} --- Product of array elements
   11554 @fnindex PRODUCT
   11555 @cindex array, product
   11556 @cindex array, multiply elements
   11557 @cindex array, conditionally multiply elements
   11558 @cindex multiply array elements
   11559 
   11560 @table @asis
   11561 @item @emph{Description}:
   11562 Multiplies the elements of @var{ARRAY} along dimension @var{DIM} if
   11563 the corresponding element in @var{MASK} is @code{TRUE}.
   11564 
   11565 @item @emph{Standard}:
   11566 Fortran 95 and later
   11567 
   11568 @item @emph{Class}:
   11569 Transformational function
   11570 
   11571 @item @emph{Syntax}:
   11572 @multitable @columnfractions .80
   11573 @item @code{RESULT = PRODUCT(ARRAY[, MASK])}
   11574 @item @code{RESULT = PRODUCT(ARRAY, DIM[, MASK])}
   11575 @end multitable
   11576 
   11577 @item @emph{Arguments}:
   11578 @multitable @columnfractions .15 .70
   11579 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, 
   11580 @code{REAL} or @code{COMPLEX}.
   11581 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   11582 @code{INTEGER} with a value in the range from 1 to n, where n 
   11583 equals the rank of @var{ARRAY}.
   11584 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   11585 and either be a scalar or an array of the same shape as @var{ARRAY}.
   11586 @end multitable
   11587 
   11588 @item @emph{Return value}:
   11589 The result is of the same type as @var{ARRAY}.
   11590 
   11591 If @var{DIM} is absent, a scalar with the product of all elements in 
   11592 @var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals 
   11593 the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with 
   11594 dimension @var{DIM} dropped is returned.
   11595 
   11596 
   11597 @item @emph{Example}:
   11598 @smallexample
   11599 PROGRAM test_product
   11600   INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
   11601   print *, PRODUCT(x)                    ! all elements, product = 120
   11602   print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15
   11603 END PROGRAM
   11604 @end smallexample
   11605 
   11606 @item @emph{See also}:
   11607 @ref{SUM}
   11608 @end table
   11609 
   11610 
   11611 
   11612 @node RADIX
   11613 @section @code{RADIX} --- Base of a model number
   11614 @fnindex RADIX
   11615 @cindex model representation, base
   11616 @cindex model representation, radix
   11617 
   11618 @table @asis
   11619 @item @emph{Description}:
   11620 @code{RADIX(X)} returns the base of the model representing the entity @var{X}.
   11621 
   11622 @item @emph{Standard}:
   11623 Fortran 95 and later
   11624 
   11625 @item @emph{Class}:
   11626 Inquiry function
   11627 
   11628 @item @emph{Syntax}:
   11629 @code{RESULT = RADIX(X)}
   11630 
   11631 @item @emph{Arguments}:
   11632 @multitable @columnfractions .15 .70
   11633 @item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
   11634 @end multitable
   11635 
   11636 @item @emph{Return value}:
   11637 The return value is a scalar of type @code{INTEGER} and of the default
   11638 integer kind.
   11639 
   11640 @item @emph{See also}:
   11641 @ref{SELECTED_REAL_KIND}
   11642 
   11643 @item @emph{Example}:
   11644 @smallexample
   11645 program test_radix
   11646   print *, "The radix for the default integer kind is", radix(0)
   11647   print *, "The radix for the default real kind is", radix(0.0)
   11648 end program test_radix
   11649 @end smallexample
   11650 
   11651 @end table
   11652 
   11653 
   11654 
   11655 @node RAN
   11656 @section @code{RAN} --- Real pseudo-random number
   11657 @fnindex RAN
   11658 @cindex random number generation
   11659 
   11660 @table @asis
   11661 @item @emph{Description}:
   11662 For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is
   11663 provided as an alias for @code{RAND}.  See @ref{RAND} for complete
   11664 documentation.
   11665 
   11666 @item @emph{Standard}:
   11667 GNU extension
   11668 
   11669 @item @emph{Class}:
   11670 Function
   11671 
   11672 @item @emph{See also}:
   11673 @ref{RAND}, @ref{RANDOM_NUMBER}
   11674 @end table
   11675 
   11676 
   11677 
   11678 @node RAND
   11679 @section @code{RAND} --- Real pseudo-random number
   11680 @fnindex RAND
   11681 @cindex random number generation
   11682 
   11683 @table @asis
   11684 @item @emph{Description}:
   11685 @code{RAND(FLAG)} returns a pseudo-random number from a uniform
   11686 distribution between 0 and 1. If @var{FLAG} is 0, the next number
   11687 in the current sequence is returned; if @var{FLAG} is 1, the generator
   11688 is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
   11689 it is used as a new seed with @code{SRAND}.
   11690 
   11691 This intrinsic routine is provided for backwards compatibility with
   11692 GNU Fortran 77. It implements a simple modulo generator as provided 
   11693 by @command{g77}. For new code, one should consider the use of 
   11694 @ref{RANDOM_NUMBER} as it implements a superior algorithm.
   11695 
   11696 @item @emph{Standard}:
   11697 GNU extension
   11698 
   11699 @item @emph{Class}:
   11700 Function
   11701 
   11702 @item @emph{Syntax}:
   11703 @code{RESULT = RAND(I)}
   11704 
   11705 @item @emph{Arguments}:
   11706 @multitable @columnfractions .15 .70
   11707 @item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4.
   11708 @end multitable
   11709 
   11710 @item @emph{Return value}:
   11711 The return value is of @code{REAL} type and the default kind.
   11712 
   11713 @item @emph{Example}:
   11714 @smallexample
   11715 program test_rand
   11716   integer,parameter :: seed = 86456
   11717   
   11718   call srand(seed)
   11719   print *, rand(), rand(), rand(), rand()
   11720   print *, rand(seed), rand(), rand(), rand()
   11721 end program test_rand
   11722 @end smallexample
   11723 
   11724 @item @emph{See also}:
   11725 @ref{SRAND}, @ref{RANDOM_NUMBER}
   11726 
   11727 @end table
   11728 
   11729 
   11730 @node RANDOM_INIT
   11731 @section @code{RANDOM_INIT} --- Initialize a pseudo-random number generator
   11732 @fnindex RANDOM_INIT
   11733 @cindex random number generation, initialization
   11734 
   11735 @table @asis
   11736 @item @emph{Description}:
   11737 Initializes the state of the pseudorandom number generator used by 
   11738 @code{RANDOM_NUMBER}.
   11739 
   11740 @item @emph{Standard}:
   11741 Fortran 2018
   11742 
   11743 @item @emph{Class}:
   11744 Subroutine
   11745 
   11746 @item @emph{Syntax}:
   11747 @code{CALL RANDOM_INIT(REPEATABLE, IMAGE_DISTINCT)}
   11748 
   11749 @item @emph{Arguments}:
   11750 @multitable @columnfractions .20 .75
   11751 @item @var{REPEATABLE} @tab Shall be a scalar with a @code{LOGICAL} type,
   11752 and it is @code{INTENT(IN)}.  If it is @code{.true.}, the seed is set to
   11753 a processor-dependent value that is the same each time @code{RANDOM_INIT}
   11754 is called from the same image.  The term ``same image'' means a single
   11755 instance of program execution.  The sequence of random numbers is different
   11756 for repeated execution of the program.  If it is @code{.false.}, the seed
   11757 is set to a processor-dependent value.
   11758 @item @var{IMAGE_DISTINCT} @tab Shall be a scalar with a
   11759 @code{LOGICAL} type, and it is @code{INTENT(IN)}.  If it is @code{.true.},
   11760 the seed is set to a processor-dependent value that is distinct from th
   11761 seed set by a call to @code{RANDOM_INIT} in another image.  If it is
   11762 @code{.false.}, the seed is set value that does depend which image called
   11763 @code{RANDOM_INIT}.
   11764 @end multitable
   11765 
   11766 @item @emph{Example}:
   11767 @smallexample
   11768 program test_random_seed
   11769   implicit none
   11770   real x(3), y(3)
   11771   call random_init(.true., .true.)
   11772   call random_number(x)
   11773   call random_init(.true., .true.)
   11774   call random_number(y)
   11775   ! x and y are the same sequence
   11776   if (any(x /= y)) call abort
   11777 end program test_random_seed
   11778 @end smallexample
   11779 
   11780 @item @emph{See also}:
   11781 @ref{RANDOM_NUMBER}, @ref{RANDOM_SEED}
   11782 @end table
   11783 
   11784 
   11785 @node RANDOM_NUMBER
   11786 @section @code{RANDOM_NUMBER} --- Pseudo-random number
   11787 @fnindex RANDOM_NUMBER
   11788 @cindex random number generation
   11789 
   11790 @table @asis
   11791 @item @emph{Description}:
   11792 Returns a single pseudorandom number or an array of pseudorandom numbers
   11793 from the uniform distribution over the range @math{ 0 \leq x < 1}.
   11794 
   11795 The runtime-library implements the xorshift1024* random number
   11796 generator (RNG). This generator has a period of @math{2^{1024} - 1},
   11797 and when using multiple threads up to @math{2^{512}} threads can each
   11798 generate @math{2^{512}} random numbers before any aliasing occurs.
   11799 
   11800 Note that in a multi-threaded program (e.g. using OpenMP directives),
   11801 each thread will have its own random number state. For details of the
   11802 seeding procedure, see the documentation for the @code{RANDOM_SEED}
   11803 intrinsic.
   11804 
   11805 
   11806 @item @emph{Standard}:
   11807 Fortran 95 and later
   11808 
   11809 @item @emph{Class}:
   11810 Subroutine
   11811 
   11812 @item @emph{Syntax}:
   11813 @code{RANDOM_NUMBER(HARVEST)}
   11814 
   11815 @item @emph{Arguments}:
   11816 @multitable @columnfractions .15 .70
   11817 @item @var{HARVEST} @tab Shall be a scalar or an array of type @code{REAL}.
   11818 @end multitable
   11819 
   11820 @item @emph{Example}:
   11821 @smallexample
   11822 program test_random_number
   11823   REAL :: r(5,5)
   11824   CALL RANDOM_NUMBER(r)
   11825 end program
   11826 @end smallexample
   11827 
   11828 @item @emph{See also}:
   11829 @ref{RANDOM_SEED}, @ref{RANDOM_INIT}
   11830 @end table
   11831 
   11832 
   11833 
   11834 @node RANDOM_SEED
   11835 @section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence
   11836 @fnindex RANDOM_SEED
   11837 @cindex random number generation, seeding
   11838 @cindex seeding a random number generator
   11839 
   11840 @table @asis
   11841 @item @emph{Description}:
   11842 Restarts or queries the state of the pseudorandom number generator used by 
   11843 @code{RANDOM_NUMBER}.
   11844 
   11845 If @code{RANDOM_SEED} is called without arguments, it is seeded with
   11846 random data retrieved from the operating system.
   11847 
   11848 As an extension to the Fortran standard, the GFortran
   11849 @code{RANDOM_NUMBER} supports multiple threads. Each thread in a
   11850 multi-threaded program has its own seed.  When @code{RANDOM_SEED} is
   11851 called either without arguments or with the @var{PUT} argument, the
   11852 given seed is copied into a master seed as well as the seed of the
   11853 current thread. When a new thread uses @code{RANDOM_NUMBER} for the
   11854 first time, the seed is copied from the master seed, and forwarded
   11855 @math{N * 2^{512}} steps to guarantee that the random stream does not
   11856 alias any other stream in the system, where @var{N} is the number of
   11857 threads that have used @code{RANDOM_NUMBER} so far during the program
   11858 execution.
   11859 
   11860 @item @emph{Standard}:
   11861 Fortran 95 and later
   11862 
   11863 @item @emph{Class}:
   11864 Subroutine
   11865 
   11866 @item @emph{Syntax}:
   11867 @code{CALL RANDOM_SEED([SIZE, PUT, GET])}
   11868 
   11869 @item @emph{Arguments}:
   11870 @multitable @columnfractions .15 .70
   11871 @item @var{SIZE} @tab (Optional) Shall be a scalar and of type default 
   11872 @code{INTEGER}, with @code{INTENT(OUT)}. It specifies the minimum size 
   11873 of the arrays used with the @var{PUT} and @var{GET} arguments.
   11874 @item @var{PUT}  @tab (Optional) Shall be an array of type default 
   11875 @code{INTEGER} and rank one. It is @code{INTENT(IN)} and the size of 
   11876 the array must be larger than or equal to the number returned by the 
   11877 @var{SIZE} argument.
   11878 @item @var{GET}  @tab (Optional) Shall be an array of type default 
   11879 @code{INTEGER} and rank one. It is @code{INTENT(OUT)} and the size 
   11880 of the array must be larger than or equal to the number returned by 
   11881 the @var{SIZE} argument.
   11882 @end multitable
   11883 
   11884 @item @emph{Example}:
   11885 @smallexample
   11886 program test_random_seed
   11887   implicit none
   11888   integer, allocatable :: seed(:)
   11889   integer :: n
   11890 
   11891   call random_seed(size = n)
   11892   allocate(seed(n))
   11893   call random_seed(get=seed)
   11894   write (*, *) seed
   11895 end program test_random_seed
   11896 @end smallexample
   11897 
   11898 @item @emph{See also}:
   11899 @ref{RANDOM_NUMBER}, @ref{RANDOM_INIT}
   11900 @end table
   11901 
   11902 
   11903 
   11904 @node RANGE
   11905 @section @code{RANGE} --- Decimal exponent range
   11906 @fnindex RANGE
   11907 @cindex model representation, range
   11908 
   11909 @table @asis
   11910 @item @emph{Description}:
   11911 @code{RANGE(X)} returns the decimal exponent range in the model of the
   11912 type of @code{X}.
   11913 
   11914 @item @emph{Standard}:
   11915 Fortran 95 and later
   11916 
   11917 @item @emph{Class}:
   11918 Inquiry function
   11919 
   11920 @item @emph{Syntax}:
   11921 @code{RESULT = RANGE(X)}
   11922 
   11923 @item @emph{Arguments}:
   11924 @multitable @columnfractions .15 .70
   11925 @item @var{X} @tab Shall be of type @code{INTEGER}, @code{REAL}
   11926 or @code{COMPLEX}.
   11927 @end multitable
   11928 
   11929 @item @emph{Return value}:
   11930 The return value is of type @code{INTEGER} and of the default integer
   11931 kind.
   11932 
   11933 @item @emph{See also}:
   11934 @ref{SELECTED_REAL_KIND}, @ref{PRECISION}
   11935 
   11936 @item @emph{Example}:
   11937 See @code{PRECISION} for an example.
   11938 @end table
   11939 
   11940 
   11941 
   11942 @node RANK
   11943 @section @code{RANK} --- Rank of a data object
   11944 @fnindex RANK
   11945 @cindex rank
   11946 
   11947 @table @asis
   11948 @item @emph{Description}:
   11949 @code{RANK(A)} returns the rank of a scalar or array data object.
   11950 
   11951 @item @emph{Standard}:
   11952 Technical Specification (TS) 29113
   11953 
   11954 @item @emph{Class}:
   11955 Inquiry function
   11956 
   11957 @item @emph{Syntax}:
   11958 @code{RESULT = RANK(A)}
   11959 
   11960 @item @emph{Arguments}:
   11961 @multitable @columnfractions .15 .70
   11962 @item @var{A} @tab can be of any type
   11963 @end multitable
   11964 
   11965 @item @emph{Return value}:
   11966 The return value is of type @code{INTEGER} and of the default integer
   11967 kind. For arrays, their rank is returned; for scalars zero is returned.
   11968 
   11969 @item @emph{Example}:
   11970 @smallexample
   11971 program test_rank
   11972   integer :: a
   11973   real, allocatable :: b(:,:)
   11974 
   11975   print *, rank(a), rank(b) ! Prints:  0  2
   11976 end program test_rank
   11977 @end smallexample
   11978 
   11979 @end table
   11980 
   11981 
   11982 
   11983 @node REAL
   11984 @section @code{REAL} --- Convert to real type 
   11985 @fnindex REAL
   11986 @fnindex REALPART
   11987 @fnindex FLOAT
   11988 @fnindex DFLOAT
   11989 @fnindex FLOATI
   11990 @fnindex FLOATJ
   11991 @fnindex FLOATK
   11992 @fnindex SNGL
   11993 @cindex conversion, to real
   11994 @cindex complex numbers, real part
   11995 
   11996 @table @asis
   11997 @item @emph{Description}:
   11998 @code{REAL(A [, KIND])} converts its argument @var{A} to a real type.  The
   11999 @code{REALPART} function is provided for compatibility with @command{g77},
   12000 and its use is strongly discouraged.
   12001 
   12002 @item @emph{Standard}:
   12003 Fortran 77 and later
   12004 
   12005 @item @emph{Class}:
   12006 Elemental function
   12007 
   12008 @item @emph{Syntax}:
   12009 @multitable @columnfractions .80
   12010 @item @code{RESULT = REAL(A [, KIND])}
   12011 @item @code{RESULT = REALPART(Z)}
   12012 @end multitable
   12013 
   12014 @item @emph{Arguments}:
   12015 @multitable @columnfractions .15 .70
   12016 @item @var{A}    @tab Shall be @code{INTEGER}, @code{REAL}, or
   12017 @code{COMPLEX}.
   12018 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   12019 expression indicating the kind parameter of the result.
   12020 @end multitable
   12021 
   12022 @item @emph{Return value}:
   12023 These functions return a @code{REAL} variable or array under
   12024 the following rules: 
   12025 
   12026 @table @asis
   12027 @item (A)
   12028 @code{REAL(A)} is converted to a default real type if @var{A} is an 
   12029 integer or real variable.
   12030 @item (B)
   12031 @code{REAL(A)} is converted to a real type with the kind type parameter
   12032 of @var{A} if @var{A} is a complex variable.
   12033 @item (C)
   12034 @code{REAL(A, KIND)} is converted to a real type with kind type
   12035 parameter @var{KIND} if @var{A} is a complex, integer, or real
   12036 variable.
   12037 @end table
   12038 
   12039 @item @emph{Example}:
   12040 @smallexample
   12041 program test_real
   12042   complex :: x = (1.0, 2.0)
   12043   print *, real(x), real(x,8), realpart(x)
   12044 end program test_real
   12045 @end smallexample
   12046 
   12047 @item @emph{Specific names}:
   12048 @multitable @columnfractions .20 .20 .20 .25
   12049 @item Name             @tab Argument           @tab Return type     @tab Standard
   12050 @item @code{FLOAT(A)}  @tab @code{INTEGER(4)}  @tab @code{REAL(4)}  @tab Fortran 77 and later
   12051 @item @code{DFLOAT(A)} @tab @code{INTEGER(4)}  @tab @code{REAL(8)}  @tab GNU extension
   12052 @item @code{FLOATI(A)} @tab @code{INTEGER(2)}  @tab @code{REAL(4)}  @tab GNU extension
   12053 @item @code{FLOATJ(A)} @tab @code{INTEGER(4)}  @tab @code{REAL(4)}  @tab GNU extension
   12054 @item @code{FLOATK(A)} @tab @code{INTEGER(8)}  @tab @code{REAL(4)}  @tab GNU extension
   12055 @item @code{SNGL(A)}   @tab @code{INTEGER(8)}  @tab @code{REAL(4)}  @tab Fortran 77 and later
   12056 @end multitable
   12057 
   12058 
   12059 @item @emph{See also}:
   12060 @ref{DBLE}
   12061 
   12062 @end table
   12063 
   12064 
   12065 
   12066 @node RENAME
   12067 @section @code{RENAME} --- Rename a file
   12068 @fnindex RENAME
   12069 @cindex file system, rename file
   12070 
   12071 @table @asis
   12072 @item @emph{Description}:
   12073 Renames a file from file @var{PATH1} to @var{PATH2}. A null
   12074 character (@code{CHAR(0)}) can be used to mark the end of the names in
   12075 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
   12076 names are ignored.  If the @var{STATUS} argument is supplied, it
   12077 contains 0 on success or a nonzero error code upon return; see
   12078 @code{rename(2)}.
   12079 
   12080 This intrinsic is provided in both subroutine and function forms;
   12081 however, only one form can be used in any given program unit.
   12082 
   12083 @item @emph{Standard}:
   12084 GNU extension
   12085 
   12086 @item @emph{Class}:
   12087 Subroutine, function
   12088 
   12089 @item @emph{Syntax}:
   12090 @multitable @columnfractions .80
   12091 @item @code{CALL RENAME(PATH1, PATH2 [, STATUS])}
   12092 @item @code{STATUS = RENAME(PATH1, PATH2)}
   12093 @end multitable
   12094 
   12095 @item @emph{Arguments}:
   12096 @multitable @columnfractions .15 .70
   12097 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
   12098 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
   12099 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   12100 @end multitable
   12101 
   12102 @item @emph{See also}:
   12103 @ref{LINK}
   12104 
   12105 @end table
   12106 
   12107 
   12108 
   12109 @node REPEAT
   12110 @section @code{REPEAT} --- Repeated string concatenation 
   12111 @fnindex REPEAT
   12112 @cindex string, repeat
   12113 @cindex string, concatenate
   12114 
   12115 @table @asis
   12116 @item @emph{Description}:
   12117 Concatenates @var{NCOPIES} copies of a string.
   12118 
   12119 @item @emph{Standard}:
   12120 Fortran 95 and later
   12121 
   12122 @item @emph{Class}:
   12123 Transformational function
   12124 
   12125 @item @emph{Syntax}:
   12126 @code{RESULT = REPEAT(STRING, NCOPIES)}
   12127 
   12128 @item @emph{Arguments}:
   12129 @multitable @columnfractions .15 .70
   12130 @item @var{STRING}  @tab Shall be scalar and of type @code{CHARACTER}.
   12131 @item @var{NCOPIES} @tab Shall be scalar and of type @code{INTEGER}.
   12132 @end multitable
   12133 
   12134 @item @emph{Return value}:
   12135 A new scalar of type @code{CHARACTER} built up from @var{NCOPIES} copies 
   12136 of @var{STRING}.
   12137 
   12138 @item @emph{Example}:
   12139 @smallexample
   12140 program test_repeat
   12141   write(*,*) repeat("x", 5)   ! "xxxxx"
   12142 end program
   12143 @end smallexample
   12144 @end table
   12145 
   12146 
   12147 
   12148 @node RESHAPE
   12149 @section @code{RESHAPE} --- Function to reshape an array
   12150 @fnindex RESHAPE
   12151 @cindex array, change dimensions
   12152 @cindex array, transmogrify
   12153 
   12154 @table @asis
   12155 @item @emph{Description}:
   12156 Reshapes @var{SOURCE} to correspond to @var{SHAPE}. If necessary,
   12157 the new array may be padded with elements from @var{PAD} or permuted
   12158 as defined by @var{ORDER}.
   12159 
   12160 @item @emph{Standard}:
   12161 Fortran 95 and later
   12162 
   12163 @item @emph{Class}:
   12164 Transformational function
   12165 
   12166 @item @emph{Syntax}:
   12167 @code{RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])}
   12168 
   12169 @item @emph{Arguments}:
   12170 @multitable @columnfractions .15 .70
   12171 @item @var{SOURCE} @tab Shall be an array of any type.
   12172 @item @var{SHAPE}  @tab Shall be of type @code{INTEGER} and an 
   12173 array of rank one. Its values must be positive or zero.
   12174 @item @var{PAD}    @tab (Optional) shall be an array of the same 
   12175 type as @var{SOURCE}.
   12176 @item @var{ORDER}  @tab (Optional) shall be of type @code{INTEGER}
   12177 and an array of the same shape as @var{SHAPE}. Its values shall
   12178 be a permutation of the numbers from 1 to n, where n is the size of 
   12179 @var{SHAPE}. If @var{ORDER} is absent, the natural ordering shall
   12180 be assumed.
   12181 @end multitable
   12182 
   12183 @item @emph{Return value}:
   12184 The result is an array of shape @var{SHAPE} with the same type as 
   12185 @var{SOURCE}. 
   12186 
   12187 @item @emph{Example}:
   12188 @smallexample
   12189 PROGRAM test_reshape
   12190   INTEGER, DIMENSION(4) :: x
   12191   WRITE(*,*) SHAPE(x)                       ! prints "4"
   12192   WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/)))    ! prints "2 2"
   12193 END PROGRAM
   12194 @end smallexample
   12195 
   12196 @item @emph{See also}:
   12197 @ref{SHAPE}
   12198 @end table
   12199 
   12200 
   12201 
   12202 @node RRSPACING
   12203 @section @code{RRSPACING} --- Reciprocal of the relative spacing
   12204 @fnindex RRSPACING
   12205 @cindex real number, relative spacing
   12206 @cindex floating point, relative spacing
   12207 
   12208 
   12209 @table @asis
   12210 @item @emph{Description}:
   12211 @code{RRSPACING(X)} returns the  reciprocal of the relative spacing of
   12212 model numbers near @var{X}.
   12213 
   12214 @item @emph{Standard}:
   12215 Fortran 95 and later
   12216 
   12217 @item @emph{Class}:
   12218 Elemental function
   12219 
   12220 @item @emph{Syntax}:
   12221 @code{RESULT = RRSPACING(X)}
   12222 
   12223 @item @emph{Arguments}:
   12224 @multitable @columnfractions .15 .70
   12225 @item @var{X} @tab Shall be of type @code{REAL}.
   12226 @end multitable
   12227 
   12228 @item @emph{Return value}:
   12229 The return value is of the same type and kind as @var{X}.
   12230 The value returned is equal to
   12231 @code{ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)}.
   12232 
   12233 @item @emph{See also}:
   12234 @ref{SPACING}
   12235 @end table
   12236 
   12237 
   12238 
   12239 @node RSHIFT
   12240 @section @code{RSHIFT} --- Right shift bits
   12241 @fnindex RSHIFT
   12242 @cindex bits, shift right
   12243 
   12244 @table @asis
   12245 @item @emph{Description}:
   12246 @code{RSHIFT} returns a value corresponding to @var{I} with all of the
   12247 bits shifted right by @var{SHIFT} places.  @var{SHIFT} shall be
   12248 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   12249 the result value is undefined.  Bits shifted out from the right end
   12250 are lost. The fill is arithmetic: the bits shifted in from the left
   12251 end are equal to the leftmost bit, which in two's complement
   12252 representation is the sign bit.
   12253 
   12254 This function has been superseded by the @code{SHIFTA} intrinsic, which
   12255 is standard in Fortran 2008 and later.
   12256 
   12257 @item @emph{Standard}:
   12258 GNU extension
   12259 
   12260 @item @emph{Class}:
   12261 Elemental function
   12262 
   12263 @item @emph{Syntax}:
   12264 @code{RESULT = RSHIFT(I, SHIFT)}
   12265 
   12266 @item @emph{Arguments}:
   12267 @multitable @columnfractions .15 .70
   12268 @item @var{I} @tab The type shall be @code{INTEGER}.
   12269 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   12270 @end multitable
   12271 
   12272 @item @emph{Return value}:
   12273 The return value is of type @code{INTEGER} and of the same kind as
   12274 @var{I}.
   12275 
   12276 @item @emph{See also}:
   12277 @ref{ISHFT}, @ref{ISHFTC}, @ref{LSHIFT}, @ref{SHIFTA}, @ref{SHIFTR},
   12278 @ref{SHIFTL}
   12279 
   12280 @end table
   12281 
   12282 
   12283 
   12284 @node SAME_TYPE_AS
   12285 @section @code{SAME_TYPE_AS} ---  Query dynamic types for equality
   12286 @fnindex SAME_TYPE_AS
   12287 
   12288 @table @asis
   12289 @item @emph{Description}:
   12290 Query dynamic types for equality.
   12291 
   12292 @item @emph{Standard}:
   12293 Fortran 2003 and later
   12294 
   12295 @item @emph{Class}:
   12296 Inquiry function
   12297 
   12298 @item @emph{Syntax}:
   12299 @code{RESULT = SAME_TYPE_AS(A, B)}
   12300 
   12301 @item @emph{Arguments}:
   12302 @multitable @columnfractions .15 .70
   12303 @item @var{A} @tab Shall be an object of extensible declared type or
   12304 unlimited polymorphic.
   12305 @item @var{B} @tab Shall be an object of extensible declared type or
   12306 unlimited polymorphic.
   12307 @end multitable
   12308 
   12309 @item @emph{Return value}:
   12310 The return value is a scalar of type default logical. It is true if and
   12311 only if the dynamic type of A is the same as the dynamic type of B.
   12312 
   12313 @item @emph{See also}:
   12314 @ref{EXTENDS_TYPE_OF}
   12315 
   12316 @end table
   12317 
   12318 
   12319 
   12320 @node SCALE
   12321 @section @code{SCALE} --- Scale a real value
   12322 @fnindex SCALE
   12323 @cindex real number, scale
   12324 @cindex floating point, scale
   12325 
   12326 @table @asis
   12327 @item @emph{Description}:
   12328 @code{SCALE(X,I)} returns @code{X * RADIX(X)**I}.
   12329 
   12330 @item @emph{Standard}:
   12331 Fortran 95 and later
   12332 
   12333 @item @emph{Class}:
   12334 Elemental function
   12335 
   12336 @item @emph{Syntax}:
   12337 @code{RESULT = SCALE(X, I)}
   12338 
   12339 @item @emph{Arguments}:
   12340 @multitable @columnfractions .15 .70
   12341 @item @var{X} @tab The type of the argument shall be a @code{REAL}.
   12342 @item @var{I} @tab The type of the argument shall be a @code{INTEGER}.
   12343 @end multitable
   12344 
   12345 @item @emph{Return value}:
   12346 The return value is of the same type and kind as @var{X}.
   12347 Its value is @code{X * RADIX(X)**I}.
   12348 
   12349 @item @emph{Example}:
   12350 @smallexample
   12351 program test_scale
   12352   real :: x = 178.1387e-4
   12353   integer :: i = 5
   12354   print *, scale(x,i), x*radix(x)**i
   12355 end program test_scale
   12356 @end smallexample
   12357 
   12358 @end table
   12359 
   12360 
   12361 
   12362 @node SCAN
   12363 @section @code{SCAN} --- Scan a string for the presence of a set of characters
   12364 @fnindex SCAN
   12365 @cindex string, find subset
   12366 
   12367 @table @asis
   12368 @item @emph{Description}:
   12369 Scans a @var{STRING} for any of the characters in a @var{SET} 
   12370 of characters.
   12371 
   12372 If @var{BACK} is either absent or equals @code{FALSE}, this function
   12373 returns the position of the leftmost character of @var{STRING} that is
   12374 in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position
   12375 is returned. If no character of @var{SET} is found in @var{STRING}, the 
   12376 result is zero.
   12377 
   12378 @item @emph{Standard}:
   12379 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   12380 
   12381 @item @emph{Class}:
   12382 Elemental function
   12383 
   12384 @item @emph{Syntax}:
   12385 @code{RESULT = SCAN(STRING, SET[, BACK [, KIND]])}
   12386 
   12387 @item @emph{Arguments}:
   12388 @multitable @columnfractions .15 .70
   12389 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
   12390 @item @var{SET}    @tab Shall be of type @code{CHARACTER}.
   12391 @item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
   12392 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
   12393 expression indicating the kind parameter of the result.
   12394 @end multitable
   12395 
   12396 @item @emph{Return value}:
   12397 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   12398 @var{KIND} is absent, the return value is of default integer kind.
   12399 
   12400 @item @emph{Example}:
   12401 @smallexample
   12402 PROGRAM test_scan
   12403   WRITE(*,*) SCAN("FORTRAN", "AO")          ! 2, found 'O'
   12404   WRITE(*,*) SCAN("FORTRAN", "AO", .TRUE.)  ! 6, found 'A'
   12405   WRITE(*,*) SCAN("FORTRAN", "C++")         ! 0, found none
   12406 END PROGRAM
   12407 @end smallexample
   12408 
   12409 @item @emph{See also}:
   12410 @ref{INDEX intrinsic}, @ref{VERIFY}
   12411 @end table
   12412 
   12413 
   12414 
   12415 @node SECNDS
   12416 @section @code{SECNDS} --- Time function
   12417 @fnindex SECNDS
   12418 @cindex time, elapsed
   12419 @cindex elapsed time
   12420 
   12421 @table @asis
   12422 @item @emph{Description}:
   12423 @code{SECNDS(X)} gets the time in seconds from the real-time system clock.
   12424 @var{X} is a reference time, also in seconds. If this is zero, the time in
   12425 seconds from midnight is returned. This function is non-standard and its
   12426 use is discouraged.
   12427 
   12428 @item @emph{Standard}:
   12429 GNU extension
   12430 
   12431 @item @emph{Class}:
   12432 Function
   12433 
   12434 @item @emph{Syntax}:
   12435 @code{RESULT = SECNDS (X)}
   12436 
   12437 @item @emph{Arguments}:
   12438 @multitable @columnfractions .15 .70
   12439 @item @var{T}     @tab Shall be of type @code{REAL(4)}.
   12440 @item @var{X}     @tab Shall be of type @code{REAL(4)}.
   12441 @end multitable
   12442 
   12443 @item @emph{Return value}:
   12444 None
   12445 
   12446 @item @emph{Example}:
   12447 @smallexample
   12448 program test_secnds
   12449     integer :: i
   12450     real(4) :: t1, t2
   12451     print *, secnds (0.0)   ! seconds since midnight
   12452     t1 = secnds (0.0)       ! reference time
   12453     do i = 1, 10000000      ! do something
   12454     end do
   12455     t2 = secnds (t1)        ! elapsed time
   12456     print *, "Something took ", t2, " seconds."
   12457 end program test_secnds
   12458 @end smallexample
   12459 @end table
   12460 
   12461 
   12462 
   12463 @node SECOND
   12464 @section @code{SECOND} --- CPU time function
   12465 @fnindex SECOND
   12466 @cindex time, elapsed
   12467 @cindex elapsed time
   12468 
   12469 @table @asis
   12470 @item @emph{Description}:
   12471 Returns a @code{REAL(4)} value representing the elapsed CPU time in
   12472 seconds.  This provides the same functionality as the standard
   12473 @code{CPU_TIME} intrinsic, and is only included for backwards
   12474 compatibility.
   12475 
   12476 This intrinsic is provided in both subroutine and function forms;
   12477 however, only one form can be used in any given program unit.
   12478 
   12479 @item @emph{Standard}:
   12480 GNU extension
   12481 
   12482 @item @emph{Class}:
   12483 Subroutine, function
   12484 
   12485 @item @emph{Syntax}:
   12486 @multitable @columnfractions .80
   12487 @item @code{CALL SECOND(TIME)}
   12488 @item @code{TIME = SECOND()}
   12489 @end multitable
   12490 
   12491 @item @emph{Arguments}:
   12492 @multitable @columnfractions .15 .70
   12493 @item @var{TIME}  @tab Shall be of type @code{REAL(4)}.
   12494 @end multitable
   12495 
   12496 @item @emph{Return value}:
   12497 In either syntax, @var{TIME} is set to the process's current runtime in
   12498 seconds.
   12499 
   12500 @item @emph{See also}:
   12501 @ref{CPU_TIME}
   12502 
   12503 @end table
   12504 
   12505 
   12506 
   12507 @node SELECTED_CHAR_KIND
   12508 @section @code{SELECTED_CHAR_KIND} --- Choose character kind
   12509 @fnindex SELECTED_CHAR_KIND
   12510 @cindex character kind
   12511 @cindex kind, character
   12512 
   12513 @table @asis
   12514 @item @emph{Description}:
   12515 
   12516 @code{SELECTED_CHAR_KIND(NAME)} returns the kind value for the character
   12517 set named @var{NAME}, if a character set with such a name is supported,
   12518 or @math{-1} otherwise. Currently, supported character sets include
   12519 ``ASCII'' and ``DEFAULT'', which are equivalent, and ``ISO_10646''
   12520 (Universal Character Set, UCS-4) which is commonly known as Unicode.
   12521 
   12522 @item @emph{Standard}:
   12523 Fortran 2003 and later
   12524 
   12525 @item @emph{Class}:
   12526 Transformational function
   12527 
   12528 @item @emph{Syntax}:
   12529 @code{RESULT = SELECTED_CHAR_KIND(NAME)}
   12530 
   12531 @item @emph{Arguments}:
   12532 @multitable @columnfractions .15 .70
   12533 @item @var{NAME} @tab Shall be a scalar and of the default character type.
   12534 @end multitable
   12535 
   12536 @item @emph{Example}:
   12537 @smallexample
   12538 program character_kind
   12539   use iso_fortran_env
   12540   implicit none
   12541   integer, parameter :: ascii = selected_char_kind ("ascii")
   12542   integer, parameter :: ucs4  = selected_char_kind ('ISO_10646')
   12543 
   12544   character(kind=ascii, len=26) :: alphabet
   12545   character(kind=ucs4,  len=30) :: hello_world
   12546 
   12547   alphabet = ascii_"abcdefghijklmnopqrstuvwxyz"
   12548   hello_world = ucs4_'Hello World and Ni Hao -- ' &
   12549                 // char (int (z'4F60'), ucs4)     &
   12550                 // char (int (z'597D'), ucs4)
   12551 
   12552   write (*,*) alphabet
   12553 
   12554   open (output_unit, encoding='UTF-8')
   12555   write (*,*) trim (hello_world)
   12556 end program character_kind
   12557 @end smallexample
   12558 @end table
   12559 
   12560 
   12561 
   12562 @node SELECTED_INT_KIND
   12563 @section @code{SELECTED_INT_KIND} --- Choose integer kind
   12564 @fnindex SELECTED_INT_KIND
   12565 @cindex integer kind
   12566 @cindex kind, integer
   12567 
   12568 @table @asis
   12569 @item @emph{Description}:
   12570 @code{SELECTED_INT_KIND(R)} return the kind value of the smallest integer
   12571 type that can represent all values ranging from @math{-10^R} (exclusive)
   12572 to @math{10^R} (exclusive). If there is no integer kind that accommodates
   12573 this range, @code{SELECTED_INT_KIND} returns @math{-1}.
   12574 
   12575 @item @emph{Standard}:
   12576 Fortran 95 and later
   12577 
   12578 @item @emph{Class}:
   12579 Transformational function
   12580 
   12581 @item @emph{Syntax}:
   12582 @code{RESULT = SELECTED_INT_KIND(R)}
   12583 
   12584 @item @emph{Arguments}:
   12585 @multitable @columnfractions .15 .70
   12586 @item @var{R} @tab Shall be a scalar and of type @code{INTEGER}.
   12587 @end multitable
   12588 
   12589 @item @emph{Example}:
   12590 @smallexample
   12591 program large_integers
   12592   integer,parameter :: k5 = selected_int_kind(5)
   12593   integer,parameter :: k15 = selected_int_kind(15)
   12594   integer(kind=k5) :: i5
   12595   integer(kind=k15) :: i15
   12596 
   12597   print *, huge(i5), huge(i15)
   12598 
   12599   ! The following inequalities are always true
   12600   print *, huge(i5) >= 10_k5**5-1
   12601   print *, huge(i15) >= 10_k15**15-1
   12602 end program large_integers
   12603 @end smallexample
   12604 @end table
   12605 
   12606 
   12607 
   12608 @node SELECTED_REAL_KIND
   12609 @section @code{SELECTED_REAL_KIND} --- Choose real kind
   12610 @fnindex SELECTED_REAL_KIND
   12611 @cindex real kind
   12612 @cindex kind, real
   12613 @cindex radix, real
   12614 
   12615 @table @asis
   12616 @item @emph{Description}:
   12617 @code{SELECTED_REAL_KIND(P,R)} returns the kind value of a real data type
   12618 with decimal precision of at least @code{P} digits, exponent range of
   12619 at least @code{R}, and with a radix of @code{RADIX}.
   12620 
   12621 @item @emph{Standard}:
   12622 Fortran 95 and later, with @code{RADIX} Fortran 2008 or later
   12623 
   12624 @item @emph{Class}:
   12625 Transformational function
   12626 
   12627 @item @emph{Syntax}:
   12628 @code{RESULT = SELECTED_REAL_KIND([P, R, RADIX])}
   12629 
   12630 @item @emph{Arguments}:
   12631 @multitable @columnfractions .15 .70
   12632 @item @var{P} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
   12633 @item @var{R} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
   12634 @item @var{RADIX} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
   12635 @end multitable
   12636 Before Fortran 2008, at least one of the arguments @var{R} or @var{P} shall
   12637 be present; since Fortran 2008, they are assumed to be zero if absent.
   12638 
   12639 @item @emph{Return value}:
   12640 
   12641 @code{SELECTED_REAL_KIND} returns the value of the kind type parameter of
   12642 a real data type with decimal precision of at least @code{P} digits, a
   12643 decimal exponent range of at least @code{R}, and with the requested
   12644 @code{RADIX}. If the @code{RADIX} parameter is absent, real kinds with
   12645 any radix can be returned. If more than one real data type meet the
   12646 criteria, the kind of the data type with the smallest decimal precision
   12647 is returned. If no real data type matches the criteria, the result is
   12648 @table @asis
   12649 @item -1 if the processor does not support a real data type with a
   12650 precision greater than or equal to @code{P}, but the @code{R} and
   12651 @code{RADIX} requirements can be fulfilled
   12652 @item -2 if the processor does not support a real type with an exponent
   12653 range greater than or equal to @code{R}, but @code{P} and @code{RADIX}
   12654 are fulfillable
   12655 @item -3 if @code{RADIX} but not @code{P} and @code{R} requirements
   12656 are fulfillable
   12657 @item -4 if @code{RADIX} and either @code{P} or @code{R} requirements
   12658 are fulfillable
   12659 @item -5 if there is no real type with the given @code{RADIX}
   12660 @end table
   12661 
   12662 @item @emph{See also}:
   12663 @ref{PRECISION}, @ref{RANGE}, @ref{RADIX}
   12664 
   12665 @item @emph{Example}:
   12666 @smallexample
   12667 program real_kinds
   12668   integer,parameter :: p6 = selected_real_kind(6)
   12669   integer,parameter :: p10r100 = selected_real_kind(10,100)
   12670   integer,parameter :: r400 = selected_real_kind(r=400)
   12671   real(kind=p6) :: x
   12672   real(kind=p10r100) :: y
   12673   real(kind=r400) :: z
   12674 
   12675   print *, precision(x), range(x)
   12676   print *, precision(y), range(y)
   12677   print *, precision(z), range(z)
   12678 end program real_kinds
   12679 @end smallexample
   12680 @end table
   12681 
   12682 
   12683 
   12684 @node SET_EXPONENT
   12685 @section @code{SET_EXPONENT} --- Set the exponent of the model
   12686 @fnindex SET_EXPONENT
   12687 @cindex real number, set exponent
   12688 @cindex floating point, set exponent
   12689 
   12690 @table @asis
   12691 @item @emph{Description}:
   12692 @code{SET_EXPONENT(X, I)} returns the real number whose fractional part
   12693 is that that of @var{X} and whose exponent part is @var{I}.
   12694 
   12695 @item @emph{Standard}:
   12696 Fortran 95 and later
   12697 
   12698 @item @emph{Class}:
   12699 Elemental function
   12700 
   12701 @item @emph{Syntax}:
   12702 @code{RESULT = SET_EXPONENT(X, I)}
   12703 
   12704 @item @emph{Arguments}:
   12705 @multitable @columnfractions .15 .70
   12706 @item @var{X} @tab Shall be of type @code{REAL}.
   12707 @item @var{I} @tab Shall be of type @code{INTEGER}.
   12708 @end multitable
   12709 
   12710 @item @emph{Return value}:
   12711 The return value is of the same type and kind as @var{X}.
   12712 The real number whose fractional part
   12713 is that that of @var{X} and whose exponent part if @var{I} is returned;
   12714 it is @code{FRACTION(X) * RADIX(X)**I}.
   12715 
   12716 @item @emph{Example}:
   12717 @smallexample
   12718 PROGRAM test_setexp
   12719   REAL :: x = 178.1387e-4
   12720   INTEGER :: i = 17
   12721   PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i
   12722 END PROGRAM
   12723 @end smallexample
   12724 
   12725 @end table
   12726 
   12727 
   12728 
   12729 @node SHAPE
   12730 @section @code{SHAPE} --- Determine the shape of an array
   12731 @fnindex SHAPE
   12732 @cindex array, shape
   12733 
   12734 @table @asis
   12735 @item @emph{Description}:
   12736 Determines the shape of an array.
   12737 
   12738 @item @emph{Standard}:
   12739 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   12740 
   12741 @item @emph{Class}:
   12742 Inquiry function
   12743 
   12744 @item @emph{Syntax}:
   12745 @code{RESULT = SHAPE(SOURCE [, KIND])}
   12746 
   12747 @item @emph{Arguments}:
   12748 @multitable @columnfractions .15 .70
   12749 @item @var{SOURCE} @tab Shall be an array or scalar of any type. 
   12750 If @var{SOURCE} is a pointer it must be associated and allocatable 
   12751 arrays must be allocated.
   12752 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
   12753 expression indicating the kind parameter of the result.
   12754 @end multitable
   12755 
   12756 @item @emph{Return value}:
   12757 An @code{INTEGER} array of rank one with as many elements as @var{SOURCE} 
   12758 has dimensions. The elements of the resulting array correspond to the extend
   12759 of @var{SOURCE} along the respective dimensions. If @var{SOURCE} is a scalar,
   12760 the result is the rank one array of size zero. If @var{KIND} is absent, the
   12761 return value has the default integer kind otherwise the specified kind.
   12762 
   12763 @item @emph{Example}:
   12764 @smallexample
   12765 PROGRAM test_shape
   12766   INTEGER, DIMENSION(-1:1, -1:2) :: A
   12767   WRITE(*,*) SHAPE(A)             ! (/ 3, 4 /)
   12768   WRITE(*,*) SIZE(SHAPE(42))      ! (/ /)
   12769 END PROGRAM
   12770 @end smallexample
   12771 
   12772 @item @emph{See also}:
   12773 @ref{RESHAPE}, @ref{SIZE}
   12774 @end table
   12775 
   12776 
   12777 
   12778 @node SHIFTA
   12779 @section @code{SHIFTA} --- Right shift with fill
   12780 @fnindex SHIFTA
   12781 @cindex bits, shift right
   12782 @cindex shift, right with fill
   12783 
   12784 @table @asis
   12785 @item @emph{Description}:
   12786 @code{SHIFTA} returns a value corresponding to @var{I} with all of the
   12787 bits shifted right by @var{SHIFT} places.  @var{SHIFT} that be
   12788 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   12789 the result value is undefined.  Bits shifted out from the right end
   12790 are lost. The fill is arithmetic: the bits shifted in from the left
   12791 end are equal to the leftmost bit, which in two's complement
   12792 representation is the sign bit.
   12793 
   12794 @item @emph{Standard}:
   12795 Fortran 2008 and later
   12796 
   12797 @item @emph{Class}:
   12798 Elemental function
   12799 
   12800 @item @emph{Syntax}:
   12801 @code{RESULT = SHIFTA(I, SHIFT)}
   12802 
   12803 @item @emph{Arguments}:
   12804 @multitable @columnfractions .15 .70
   12805 @item @var{I} @tab The type shall be @code{INTEGER}.
   12806 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   12807 @end multitable
   12808 
   12809 @item @emph{Return value}:
   12810 The return value is of type @code{INTEGER} and of the same kind as
   12811 @var{I}.
   12812 
   12813 @item @emph{See also}:
   12814 @ref{SHIFTL}, @ref{SHIFTR}
   12815 @end table
   12816 
   12817 
   12818 
   12819 @node SHIFTL
   12820 @section @code{SHIFTL} --- Left shift
   12821 @fnindex SHIFTL
   12822 @cindex bits, shift left
   12823 @cindex shift, left
   12824 
   12825 @table @asis
   12826 @item @emph{Description}:
   12827 @code{SHIFTL} returns a value corresponding to @var{I} with all of the
   12828 bits shifted left by @var{SHIFT} places.  @var{SHIFT} shall be
   12829 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   12830 the result value is undefined.  Bits shifted out from the left end are
   12831 lost, and bits shifted in from the right end are set to 0.
   12832 
   12833 @item @emph{Standard}:
   12834 Fortran 2008 and later
   12835 
   12836 @item @emph{Class}:
   12837 Elemental function
   12838 
   12839 @item @emph{Syntax}:
   12840 @code{RESULT = SHIFTL(I, SHIFT)}
   12841 
   12842 @item @emph{Arguments}:
   12843 @multitable @columnfractions .15 .70
   12844 @item @var{I} @tab The type shall be @code{INTEGER}.
   12845 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   12846 @end multitable
   12847 
   12848 @item @emph{Return value}:
   12849 The return value is of type @code{INTEGER} and of the same kind as
   12850 @var{I}.
   12851 
   12852 @item @emph{See also}:
   12853 @ref{SHIFTA}, @ref{SHIFTR}
   12854 @end table
   12855 
   12856 
   12857 
   12858 @node SHIFTR
   12859 @section @code{SHIFTR} --- Right shift
   12860 @fnindex SHIFTR
   12861 @cindex bits, shift right
   12862 @cindex shift, right
   12863 
   12864 @table @asis
   12865 @item @emph{Description}:
   12866 @code{SHIFTR} returns a value corresponding to @var{I} with all of the
   12867 bits shifted right by @var{SHIFT} places.  @var{SHIFT} shall be
   12868 nonnegative and less than or equal to @code{BIT_SIZE(I)}, otherwise
   12869 the result value is undefined.  Bits shifted out from the right end
   12870 are lost, and bits shifted in from the left end are set to 0.
   12871 
   12872 @item @emph{Standard}:
   12873 Fortran 2008 and later
   12874 
   12875 @item @emph{Class}:
   12876 Elemental function
   12877 
   12878 @item @emph{Syntax}:
   12879 @code{RESULT = SHIFTR(I, SHIFT)}
   12880 
   12881 @item @emph{Arguments}:
   12882 @multitable @columnfractions .15 .70
   12883 @item @var{I} @tab The type shall be @code{INTEGER}.
   12884 @item @var{SHIFT} @tab The type shall be @code{INTEGER}.
   12885 @end multitable
   12886 
   12887 @item @emph{Return value}:
   12888 The return value is of type @code{INTEGER} and of the same kind as
   12889 @var{I}.
   12890 
   12891 @item @emph{See also}:
   12892 @ref{SHIFTA}, @ref{SHIFTL}
   12893 @end table
   12894 
   12895 
   12896 
   12897 @node SIGN
   12898 @section @code{SIGN} --- Sign copying function
   12899 @fnindex SIGN
   12900 @fnindex ISIGN
   12901 @fnindex DSIGN
   12902 @cindex sign copying
   12903 
   12904 @table @asis
   12905 @item @emph{Description}:
   12906 @code{SIGN(A,B)} returns the value of @var{A} with the sign of @var{B}.
   12907 
   12908 @item @emph{Standard}:
   12909 Fortran 77 and later
   12910 
   12911 @item @emph{Class}:
   12912 Elemental function
   12913 
   12914 @item @emph{Syntax}:
   12915 @code{RESULT = SIGN(A, B)}
   12916 
   12917 @item @emph{Arguments}:
   12918 @multitable @columnfractions .15 .70
   12919 @item @var{A} @tab Shall be of type @code{INTEGER} or @code{REAL}
   12920 @item @var{B} @tab Shall be of the same type and kind as @var{A}
   12921 @end multitable
   12922 
   12923 @item @emph{Return value}:
   12924 The kind of the return value is that of @var{A} and @var{B}.
   12925 If @math{B\ge 0} then the result is @code{ABS(A)}, else
   12926 it is @code{-ABS(A)}.
   12927 
   12928 @item @emph{Example}:
   12929 @smallexample
   12930 program test_sign
   12931   print *, sign(-12,1)
   12932   print *, sign(-12,0)
   12933   print *, sign(-12,-1)
   12934 
   12935   print *, sign(-12.,1.)
   12936   print *, sign(-12.,0.)
   12937   print *, sign(-12.,-1.)
   12938 end program test_sign
   12939 @end smallexample
   12940 
   12941 @item @emph{Specific names}:
   12942 @multitable @columnfractions .20 .20 .20 .25
   12943 @item Name              @tab Arguments              @tab Return type       @tab Standard
   12944 @item @code{SIGN(A,B)}  @tab @code{REAL(4) A, B}    @tab @code{REAL(4)}    @tab f77, gnu
   12945 @item @code{ISIGN(A,B)} @tab @code{INTEGER(4) A, B} @tab @code{INTEGER(4)} @tab f77, gnu
   12946 @item @code{DSIGN(A,B)} @tab @code{REAL(8) A, B}    @tab @code{REAL(8)}    @tab f77, gnu
   12947 @end multitable
   12948 @end table
   12949 
   12950 
   12951 
   12952 @node SIGNAL
   12953 @section @code{SIGNAL} --- Signal handling subroutine (or function)
   12954 @fnindex SIGNAL
   12955 @cindex system, signal handling
   12956 
   12957 @table @asis
   12958 @item @emph{Description}:
   12959 @code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine
   12960 @var{HANDLER} to be executed with a single integer argument when signal
   12961 @var{NUMBER} occurs.  If @var{HANDLER} is an integer, it can be used to
   12962 turn off handling of signal @var{NUMBER} or revert to its default
   12963 action.  See @code{signal(2)}.
   12964 
   12965 If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument
   12966 is supplied, it is set to the value returned by @code{signal(2)}.
   12967 
   12968 @item @emph{Standard}:
   12969 GNU extension
   12970 
   12971 @item @emph{Class}:
   12972 Subroutine, function
   12973 
   12974 @item @emph{Syntax}:
   12975 @multitable @columnfractions .80
   12976 @item @code{CALL SIGNAL(NUMBER, HANDLER [, STATUS])}
   12977 @item @code{STATUS = SIGNAL(NUMBER, HANDLER)}
   12978 @end multitable
   12979 
   12980 @item @emph{Arguments}:
   12981 @multitable @columnfractions .15 .70
   12982 @item @var{NUMBER} @tab Shall be a scalar integer, with @code{INTENT(IN)}
   12983 @item @var{HANDLER}@tab Signal handler (@code{INTEGER FUNCTION} or
   12984 @code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar.
   12985 @code{INTEGER}. It is @code{INTENT(IN)}.
   12986 @item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
   12987 integer. It has @code{INTENT(OUT)}.
   12988 @end multitable
   12989 @c TODO: What should the interface of the handler be?  Does it take arguments?
   12990 
   12991 @item @emph{Return value}:
   12992 The @code{SIGNAL} function returns the value returned by @code{signal(2)}.
   12993 
   12994 @item @emph{Example}:
   12995 @smallexample
   12996 program test_signal
   12997   intrinsic signal
   12998   external handler_print
   12999 
   13000   call signal (12, handler_print)
   13001   call signal (10, 1)
   13002 
   13003   call sleep (30)
   13004 end program test_signal
   13005 @end smallexample
   13006 @end table
   13007 
   13008 
   13009 
   13010 @node SIN
   13011 @section @code{SIN} --- Sine function 
   13012 @fnindex SIN
   13013 @fnindex DSIN
   13014 @fnindex CSIN
   13015 @fnindex ZSIN
   13016 @fnindex CDSIN
   13017 @cindex trigonometric function, sine
   13018 @cindex sine
   13019 
   13020 @table @asis
   13021 @item @emph{Description}:
   13022 @code{SIN(X)} computes the sine of @var{X}.
   13023 
   13024 @item @emph{Standard}:
   13025 Fortran 77 and later
   13026 
   13027 @item @emph{Class}:
   13028 Elemental function
   13029 
   13030 @item @emph{Syntax}:
   13031 @code{RESULT = SIN(X)}
   13032 
   13033 @item @emph{Arguments}:
   13034 @multitable @columnfractions .15 .70
   13035 @item @var{X} @tab The type shall be @code{REAL} or
   13036 @code{COMPLEX}.
   13037 @end multitable
   13038 
   13039 @item @emph{Return value}:
   13040 The return value has same type and kind as @var{X}.
   13041 
   13042 @item @emph{Example}:
   13043 @smallexample
   13044 program test_sin
   13045   real :: x = 0.0
   13046   x = sin(x)
   13047 end program test_sin
   13048 @end smallexample
   13049 
   13050 @item @emph{Specific names}:
   13051 @multitable @columnfractions .20 .20 .20 .25
   13052 @item Name            @tab Argument             @tab Return type       @tab Standard
   13053 @item @code{SIN(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}    @tab f77, gnu
   13054 @item @code{DSIN(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}    @tab f95, gnu
   13055 @item @code{CSIN(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)} @tab f95, gnu
   13056 @item @code{ZSIN(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab f95, gnu
   13057 @item @code{CDSIN(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab f95, gnu
   13058 @end multitable
   13059 
   13060 @item @emph{See also}:
   13061 Inverse function: @ref{ASIN}
   13062 Degrees function: @ref{SIND}
   13063 @end table
   13064 
   13065 
   13066 
   13067 @node SIND
   13068 @section @code{SIND} --- Sine function, degrees
   13069 @fnindex SIND
   13070 @fnindex DSIND
   13071 @fnindex CSIND
   13072 @fnindex ZSIND
   13073 @fnindex CDSIND
   13074 @cindex trigonometric function, sine, degrees
   13075 @cindex sine, degrees
   13076 
   13077 @table @asis
   13078 @item @emph{Description}:
   13079 @code{SIND(X)} computes the sine of @var{X} in degrees.
   13080 
   13081 This function is for compatibility only and should be avoided in favor of
   13082 standard constructs wherever possible.
   13083 
   13084 @item @emph{Standard}:
   13085 GNU Extension, enabled with @option{-fdec-math}.
   13086 
   13087 @item @emph{Class}:
   13088 Elemental function
   13089 
   13090 @item @emph{Syntax}:
   13091 @code{RESULT = SIND(X)}
   13092 
   13093 @item @emph{Arguments}:
   13094 @multitable @columnfractions .15 .70
   13095 @item @var{X} @tab The type shall be @code{REAL} or
   13096 @code{COMPLEX}.
   13097 @end multitable
   13098 
   13099 @item @emph{Return value}:
   13100 The return value has same type and kind as @var{X}, and its value is in degrees.
   13101 
   13102 @item @emph{Example}:
   13103 @smallexample
   13104 program test_sind
   13105   real :: x = 0.0
   13106   x = sind(x)
   13107 end program test_sind
   13108 @end smallexample
   13109 
   13110 @item @emph{Specific names}:
   13111 @multitable @columnfractions .20 .20 .20 .25
   13112 @item Name            @tab Argument             @tab Return type       @tab Standard
   13113 @item @code{SIND(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}    @tab GNU Extension
   13114 @item @code{DSIND(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}    @tab GNU Extension
   13115 @item @code{CSIND(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)} @tab GNU Extension
   13116 @item @code{ZSIND(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU Extension
   13117 @item @code{CDSIND(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)} @tab GNU Extension
   13118 @end multitable
   13119 
   13120 @item @emph{See also}:
   13121 Inverse function: @ref{ASIND}
   13122 Radians function: @ref{SIN}
   13123 
   13124 @end table
   13125 
   13126 
   13127 
   13128 @node SINH
   13129 @section @code{SINH} --- Hyperbolic sine function 
   13130 @fnindex SINH
   13131 @fnindex DSINH
   13132 @cindex hyperbolic sine
   13133 @cindex hyperbolic function, sine
   13134 @cindex sine, hyperbolic
   13135 
   13136 @table @asis
   13137 @item @emph{Description}:
   13138 @code{SINH(X)} computes the hyperbolic sine of @var{X}.
   13139 
   13140 @item @emph{Standard}:
   13141 Fortran 95 and later, for a complex argument Fortran 2008 or later
   13142 
   13143 @item @emph{Class}:
   13144 Elemental function
   13145 
   13146 @item @emph{Syntax}:
   13147 @code{RESULT = SINH(X)}
   13148 
   13149 @item @emph{Arguments}:
   13150 @multitable @columnfractions .15 .70
   13151 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   13152 @end multitable
   13153 
   13154 @item @emph{Return value}:
   13155 The return value has same type and kind as @var{X}.
   13156 
   13157 @item @emph{Example}:
   13158 @smallexample
   13159 program test_sinh
   13160   real(8) :: x = - 1.0_8
   13161   x = sinh(x)
   13162 end program test_sinh
   13163 @end smallexample
   13164 
   13165 @item @emph{Specific names}:
   13166 @multitable @columnfractions .20 .20 .20 .25
   13167 @item Name            @tab Argument          @tab Return type       @tab Standard
   13168 @item @code{SINH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 95 and later
   13169 @item @code{DSINH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
   13170 @end multitable
   13171 
   13172 @item @emph{See also}:
   13173 @ref{ASINH}
   13174 @end table
   13175 
   13176 
   13177 
   13178 @node SIZE
   13179 @section @code{SIZE} --- Determine the size of an array
   13180 @fnindex SIZE
   13181 @cindex array, size
   13182 @cindex array, number of elements
   13183 @cindex array, count elements
   13184 
   13185 @table @asis
   13186 @item @emph{Description}:
   13187 Determine the extent of @var{ARRAY} along a specified dimension @var{DIM},
   13188 or the total number of elements in @var{ARRAY} if @var{DIM} is absent.
   13189 
   13190 @item @emph{Standard}:
   13191 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   13192 
   13193 @item @emph{Class}:
   13194 Inquiry function
   13195 
   13196 @item @emph{Syntax}:
   13197 @code{RESULT = SIZE(ARRAY[, DIM [, KIND]])}
   13198 
   13199 @item @emph{Arguments}:
   13200 @multitable @columnfractions .15 .70
   13201 @item @var{ARRAY} @tab Shall be an array of any type. If @var{ARRAY} is
   13202 a pointer it must be associated and allocatable arrays must be allocated.
   13203 @item @var{DIM}   @tab (Optional) shall be a scalar of type @code{INTEGER} 
   13204 and its value shall be in the range from 1 to n, where n equals the rank 
   13205 of @var{ARRAY}.
   13206 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   13207 expression indicating the kind parameter of the result.
   13208 @end multitable
   13209 
   13210 @item @emph{Return value}:
   13211 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   13212 @var{KIND} is absent, the return value is of default integer kind.
   13213 
   13214 @item @emph{Example}:
   13215 @smallexample
   13216 PROGRAM test_size
   13217   WRITE(*,*) SIZE((/ 1, 2 /))    ! 2
   13218 END PROGRAM
   13219 @end smallexample
   13220 
   13221 @item @emph{See also}:
   13222 @ref{SHAPE}, @ref{RESHAPE}
   13223 @end table
   13224 
   13225 
   13226 @node SIZEOF
   13227 @section @code{SIZEOF} --- Size in bytes of an expression
   13228 @fnindex SIZEOF
   13229 @cindex expression size
   13230 @cindex size of an expression
   13231 
   13232 @table @asis
   13233 @item @emph{Description}:
   13234 @code{SIZEOF(X)} calculates the number of bytes of storage the
   13235 expression @code{X} occupies.
   13236 
   13237 @item @emph{Standard}:
   13238 GNU extension
   13239 
   13240 @item @emph{Class}:
   13241 Inquiry function
   13242 
   13243 @item @emph{Syntax}:
   13244 @code{N = SIZEOF(X)}
   13245 
   13246 @item @emph{Arguments}:
   13247 @multitable @columnfractions .15 .70
   13248 @item @var{X} @tab The argument shall be of any type, rank or shape.
   13249 @end multitable
   13250 
   13251 @item @emph{Return value}:
   13252 The return value is of type integer and of the system-dependent kind
   13253 @var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the
   13254 number of bytes occupied by the argument.  If the argument has the
   13255 @code{POINTER} attribute, the number of bytes of the storage area pointed
   13256 to is returned.  If the argument is of a derived type with @code{POINTER}
   13257 or @code{ALLOCATABLE} components, the return value does not account for
   13258 the sizes of the data pointed to by these components. If the argument is
   13259 polymorphic, the size according to the dynamic type is returned. The argument
   13260 may not be a procedure or procedure pointer. Note that the code assumes for
   13261 arrays that those are contiguous; for contiguous arrays, it returns the
   13262 storage or an array element multiplied by the size of the array.
   13263 
   13264 @item @emph{Example}:
   13265 @smallexample
   13266    integer :: i
   13267    real :: r, s(5)
   13268    print *, (sizeof(s)/sizeof(r) == 5)
   13269    end
   13270 @end smallexample
   13271 The example will print @code{.TRUE.} unless you are using a platform
   13272 where default @code{REAL} variables are unusually padded.
   13273 
   13274 @item @emph{See also}:
   13275 @ref{C_SIZEOF}, @ref{STORAGE_SIZE}
   13276 @end table
   13277 
   13278 
   13279 @node SLEEP
   13280 @section @code{SLEEP} --- Sleep for the specified number of seconds
   13281 @fnindex SLEEP
   13282 @cindex delayed execution
   13283 
   13284 @table @asis
   13285 @item @emph{Description}:
   13286 Calling this subroutine causes the process to pause for @var{SECONDS} seconds.
   13287 
   13288 @item @emph{Standard}:
   13289 GNU extension
   13290 
   13291 @item @emph{Class}:
   13292 Subroutine
   13293 
   13294 @item @emph{Syntax}:
   13295 @code{CALL SLEEP(SECONDS)}
   13296 
   13297 @item @emph{Arguments}:
   13298 @multitable @columnfractions .15 .70
   13299 @item @var{SECONDS} @tab The type shall be of default @code{INTEGER}.
   13300 @end multitable
   13301 
   13302 @item @emph{Example}:
   13303 @smallexample
   13304 program test_sleep
   13305   call sleep(5)
   13306 end
   13307 @end smallexample
   13308 @end table
   13309 
   13310 
   13311 
   13312 @node SPACING
   13313 @section @code{SPACING} --- Smallest distance between two numbers of a given type
   13314 @fnindex SPACING
   13315 @cindex real number, relative spacing
   13316 @cindex floating point, relative spacing
   13317 
   13318 @table @asis
   13319 @item @emph{Description}:
   13320 Determines the distance between the argument @var{X} and the nearest 
   13321 adjacent number of the same type.
   13322 
   13323 @item @emph{Standard}:
   13324 Fortran 95 and later
   13325 
   13326 @item @emph{Class}:
   13327 Elemental function
   13328 
   13329 @item @emph{Syntax}:
   13330 @code{RESULT = SPACING(X)}
   13331 
   13332 @item @emph{Arguments}:
   13333 @multitable @columnfractions .15 .70
   13334 @item @var{X} @tab Shall be of type @code{REAL}.
   13335 @end multitable
   13336 
   13337 @item @emph{Return value}:
   13338 The result is of the same type as the input argument @var{X}.
   13339 
   13340 @item @emph{Example}:
   13341 @smallexample
   13342 PROGRAM test_spacing
   13343   INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)
   13344   INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)
   13345 
   13346   WRITE(*,*) spacing(1.0_SGL)      ! "1.1920929E-07"          on i686
   13347   WRITE(*,*) spacing(1.0_DBL)      ! "2.220446049250313E-016" on i686
   13348 END PROGRAM
   13349 @end smallexample
   13350 
   13351 @item @emph{See also}:
   13352 @ref{RRSPACING}
   13353 @end table
   13354 
   13355 
   13356 
   13357 @node SPREAD
   13358 @section @code{SPREAD} --- Add a dimension to an array
   13359 @fnindex SPREAD
   13360 @cindex array, increase dimension
   13361 @cindex array, duplicate elements
   13362 @cindex array, duplicate dimensions
   13363 
   13364 @table @asis
   13365 @item @emph{Description}:
   13366 Replicates a @var{SOURCE} array @var{NCOPIES} times along a specified 
   13367 dimension @var{DIM}.
   13368 
   13369 @item @emph{Standard}:
   13370 Fortran 95 and later
   13371 
   13372 @item @emph{Class}:
   13373 Transformational function
   13374 
   13375 @item @emph{Syntax}:
   13376 @code{RESULT = SPREAD(SOURCE, DIM, NCOPIES)}
   13377 
   13378 @item @emph{Arguments}:
   13379 @multitable @columnfractions .15 .70
   13380 @item @var{SOURCE}  @tab Shall be a scalar or an array of any type and 
   13381 a rank less than seven.
   13382 @item @var{DIM}     @tab Shall be a scalar of type @code{INTEGER} with a 
   13383 value in the range from 1 to n+1, where n equals the rank of @var{SOURCE}.
   13384 @item @var{NCOPIES} @tab Shall be a scalar of type @code{INTEGER}.
   13385 @end multitable
   13386 
   13387 @item @emph{Return value}:
   13388 The result is an array of the same type as @var{SOURCE} and has rank n+1
   13389 where n equals the rank of @var{SOURCE}.
   13390 
   13391 @item @emph{Example}:
   13392 @smallexample
   13393 PROGRAM test_spread
   13394   INTEGER :: a = 1, b(2) = (/ 1, 2 /)
   13395   WRITE(*,*) SPREAD(A, 1, 2)            ! "1 1"
   13396   WRITE(*,*) SPREAD(B, 1, 2)            ! "1 1 2 2"
   13397 END PROGRAM
   13398 @end smallexample
   13399 
   13400 @item @emph{See also}:
   13401 @ref{UNPACK}
   13402 @end table
   13403 
   13404 
   13405 
   13406 @node SQRT
   13407 @section @code{SQRT} --- Square-root function
   13408 @fnindex SQRT
   13409 @fnindex DSQRT
   13410 @fnindex CSQRT
   13411 @fnindex ZSQRT
   13412 @fnindex CDSQRT
   13413 @cindex root
   13414 @cindex square-root
   13415 
   13416 @table @asis
   13417 @item @emph{Description}:
   13418 @code{SQRT(X)} computes the square root of @var{X}.
   13419 
   13420 @item @emph{Standard}:
   13421 Fortran 77 and later
   13422 
   13423 @item @emph{Class}:
   13424 Elemental function
   13425 
   13426 @item @emph{Syntax}:
   13427 @code{RESULT = SQRT(X)}
   13428 
   13429 @item @emph{Arguments}:
   13430 @multitable @columnfractions .15 .70
   13431 @item @var{X} @tab The type shall be @code{REAL} or
   13432 @code{COMPLEX}.
   13433 @end multitable
   13434 
   13435 @item @emph{Return value}:
   13436 The return value is of type @code{REAL} or @code{COMPLEX}.
   13437 The kind type parameter is the same as @var{X}.
   13438 
   13439 @item @emph{Example}:
   13440 @smallexample
   13441 program test_sqrt
   13442   real(8) :: x = 2.0_8
   13443   complex :: z = (1.0, 2.0)
   13444   x = sqrt(x)
   13445   z = sqrt(z)
   13446 end program test_sqrt
   13447 @end smallexample
   13448 
   13449 @item @emph{Specific names}:
   13450 @multitable @columnfractions .20 .20 .20 .25
   13451 @item Name             @tab Argument             @tab Return type          @tab Standard
   13452 @item @code{SQRT(X)}   @tab @code{REAL(4) X}     @tab @code{REAL(4)}       @tab Fortran 95 and later
   13453 @item @code{DSQRT(X)}  @tab @code{REAL(8) X}     @tab @code{REAL(8)}       @tab Fortran 95 and later
   13454 @item @code{CSQRT(X)}  @tab @code{COMPLEX(4) X}  @tab @code{COMPLEX(4)}    @tab Fortran 95 and later
   13455 @item @code{ZSQRT(X)}  @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
   13456 @item @code{CDSQRT(X)} @tab @code{COMPLEX(8) X}  @tab @code{COMPLEX(8)}    @tab GNU extension
   13457 @end multitable
   13458 @end table
   13459 
   13460 
   13461 
   13462 @node SRAND
   13463 @section @code{SRAND} --- Reinitialize the random number generator
   13464 @fnindex SRAND
   13465 @cindex random number generation, seeding
   13466 @cindex seeding a random number generator
   13467 
   13468 @table @asis
   13469 @item @emph{Description}:
   13470 @code{SRAND} reinitializes the pseudo-random number generator
   13471 called by @code{RAND} and @code{IRAND}. The new seed used by the
   13472 generator is specified by the required argument @var{SEED}.
   13473 
   13474 @item @emph{Standard}:
   13475 GNU extension
   13476 
   13477 @item @emph{Class}:
   13478 Subroutine
   13479 
   13480 @item @emph{Syntax}:
   13481 @code{CALL SRAND(SEED)}
   13482 
   13483 @item @emph{Arguments}:
   13484 @multitable @columnfractions .15 .70
   13485 @item @var{SEED} @tab Shall be a scalar @code{INTEGER(kind=4)}.
   13486 @end multitable
   13487 
   13488 @item @emph{Return value}:
   13489 Does not return anything.
   13490 
   13491 @item @emph{Example}:
   13492 See @code{RAND} and @code{IRAND} for examples.
   13493 
   13494 @item @emph{Notes}:
   13495 The Fortran standard specifies the intrinsic subroutines
   13496 @code{RANDOM_SEED} to initialize the pseudo-random number
   13497 generator and @code{RANDOM_NUMBER} to generate pseudo-random numbers.
   13498 These subroutines should be used in new codes.
   13499 
   13500 Please note that in GNU Fortran, these two sets of intrinsics (@code{RAND},
   13501 @code{IRAND} and @code{SRAND} on the one hand, @code{RANDOM_NUMBER} and
   13502 @code{RANDOM_SEED} on the other hand) access two independent
   13503 pseudo-random number generators.
   13504 
   13505 @item @emph{See also}:
   13506 @ref{RAND}, @ref{RANDOM_SEED}, @ref{RANDOM_NUMBER}
   13507 
   13508 @end table
   13509 
   13510 
   13511 
   13512 @node STAT
   13513 @section @code{STAT} --- Get file status
   13514 @fnindex STAT
   13515 @cindex file system, file status
   13516 
   13517 @table @asis
   13518 @item @emph{Description}:
   13519 This function returns information about a file. No permissions are required on 
   13520 the file itself, but execute (search) permission is required on all of the 
   13521 directories in path that lead to the file.
   13522 
   13523 The elements that are obtained and stored in the array @code{VALUES}:
   13524 @multitable @columnfractions .15 .70
   13525 @item @code{VALUES(1)}   @tab  Device ID 
   13526 @item @code{VALUES(2)}   @tab  Inode number 
   13527 @item @code{VALUES(3)}   @tab  File mode 
   13528 @item @code{VALUES(4)}   @tab  Number of links 
   13529 @item @code{VALUES(5)}   @tab  Owner's uid 
   13530 @item @code{VALUES(6)}   @tab  Owner's gid 
   13531 @item @code{VALUES(7)}   @tab  ID of device containing directory entry for file (0 if not available) 
   13532 @item @code{VALUES(8)}   @tab  File size (bytes) 
   13533 @item @code{VALUES(9)}   @tab  Last access time 
   13534 @item @code{VALUES(10)}  @tab  Last modification time 
   13535 @item @code{VALUES(11)}  @tab  Last file status change time 
   13536 @item @code{VALUES(12)}  @tab  Preferred I/O block size (-1 if not available) 
   13537 @item @code{VALUES(13)}  @tab  Number of blocks allocated (-1 if not available)
   13538 @end multitable
   13539 
   13540 Not all these elements are relevant on all systems. 
   13541 If an element is not relevant, it is returned as 0.
   13542 
   13543 This intrinsic is provided in both subroutine and function forms; however,
   13544 only one form can be used in any given program unit.
   13545 
   13546 @item @emph{Standard}:
   13547 GNU extension
   13548 
   13549 @item @emph{Class}:
   13550 Subroutine, function
   13551 
   13552 @item @emph{Syntax}:
   13553 @multitable @columnfractions .80
   13554 @item @code{CALL STAT(NAME, VALUES [, STATUS])}
   13555 @item @code{STATUS = STAT(NAME, VALUES)}
   13556 @end multitable
   13557 
   13558 @item @emph{Arguments}:
   13559 @multitable @columnfractions .15 .70
   13560 @item @var{NAME}   @tab The type shall be @code{CHARACTER}, of the
   13561 default kind and a valid path within the file system.
   13562 @item @var{VALUES} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
   13563 @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 
   13564 on success and a system specific error code otherwise.
   13565 @end multitable
   13566 
   13567 @item @emph{Example}:
   13568 @smallexample
   13569 PROGRAM test_stat
   13570   INTEGER, DIMENSION(13) :: buff
   13571   INTEGER :: status
   13572 
   13573   CALL STAT("/etc/passwd", buff, status)
   13574 
   13575   IF (status == 0) THEN
   13576     WRITE (*, FMT="('Device ID:',               T30, I19)") buff(1)
   13577     WRITE (*, FMT="('Inode number:',            T30, I19)") buff(2)
   13578     WRITE (*, FMT="('File mode (octal):',       T30, O19)") buff(3)
   13579     WRITE (*, FMT="('Number of links:',         T30, I19)") buff(4)
   13580     WRITE (*, FMT="('Owner''s uid:',            T30, I19)") buff(5)
   13581     WRITE (*, FMT="('Owner''s gid:',            T30, I19)") buff(6)
   13582     WRITE (*, FMT="('Device where located:',    T30, I19)") buff(7)
   13583     WRITE (*, FMT="('File size:',               T30, I19)") buff(8)
   13584     WRITE (*, FMT="('Last access time:',        T30, A19)") CTIME(buff(9))
   13585     WRITE (*, FMT="('Last modification time',   T30, A19)") CTIME(buff(10))
   13586     WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11))
   13587     WRITE (*, FMT="('Preferred block size:',    T30, I19)") buff(12)
   13588     WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13)
   13589   END IF
   13590 END PROGRAM
   13591 @end smallexample
   13592 
   13593 @item @emph{See also}:
   13594 To stat an open file: @ref{FSTAT}, to stat a link: @ref{LSTAT}
   13595 @end table
   13596 
   13597 
   13598 
   13599 @node STORAGE_SIZE
   13600 @section @code{STORAGE_SIZE} --- Storage size in bits
   13601 @fnindex STORAGE_SIZE
   13602 @cindex storage size
   13603 
   13604 @table @asis
   13605 @item @emph{Description}:
   13606 Returns the storage size of argument @var{A} in bits.
   13607 @item @emph{Standard}:
   13608 Fortran 2008 and later
   13609 @item @emph{Class}:
   13610 Inquiry function
   13611 @item @emph{Syntax}:
   13612 @code{RESULT = STORAGE_SIZE(A [, KIND])}
   13613 
   13614 @item @emph{Arguments}:
   13615 @multitable @columnfractions .15 .70
   13616 @item @var{A} @tab Shall be a scalar or array of any type.
   13617 @item @var{KIND} @tab (Optional) shall be a scalar integer constant expression.
   13618 @end multitable
   13619 
   13620 @item @emph{Return Value}:
   13621 The result is a scalar integer with the kind type parameter specified by KIND
   13622 (or default integer type if KIND is missing). The result value is the size
   13623 expressed in bits for an element of an array that has the dynamic type and type
   13624 parameters of A.
   13625 
   13626 @item @emph{See also}:
   13627 @ref{C_SIZEOF}, @ref{SIZEOF}
   13628 @end table
   13629 
   13630 
   13631 
   13632 @node SUM
   13633 @section @code{SUM} --- Sum of array elements
   13634 @fnindex SUM
   13635 @cindex array, sum
   13636 @cindex array, add elements
   13637 @cindex array, conditionally add elements
   13638 @cindex sum array elements
   13639 
   13640 @table @asis
   13641 @item @emph{Description}:
   13642 Adds the elements of @var{ARRAY} along dimension @var{DIM} if
   13643 the corresponding element in @var{MASK} is @code{TRUE}.
   13644 
   13645 @item @emph{Standard}:
   13646 Fortran 95 and later
   13647 
   13648 @item @emph{Class}:
   13649 Transformational function
   13650 
   13651 @item @emph{Syntax}:
   13652 @multitable @columnfractions .80
   13653 @item @code{RESULT = SUM(ARRAY[, MASK])}
   13654 @item @code{RESULT = SUM(ARRAY, DIM[, MASK])}
   13655 @end multitable
   13656 
   13657 @item @emph{Arguments}:
   13658 @multitable @columnfractions .15 .70
   13659 @item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, 
   13660 @code{REAL} or @code{COMPLEX}.
   13661 @item @var{DIM}   @tab (Optional) shall be a scalar of type 
   13662 @code{INTEGER} with a value in the range from 1 to n, where n 
   13663 equals the rank of @var{ARRAY}.
   13664 @item @var{MASK}  @tab (Optional) shall be of type @code{LOGICAL} 
   13665 and either be a scalar or an array of the same shape as @var{ARRAY}.
   13666 @end multitable
   13667 
   13668 @item @emph{Return value}:
   13669 The result is of the same type as @var{ARRAY}.
   13670 
   13671 If @var{DIM} is absent, a scalar with the sum of all elements in @var{ARRAY}
   13672 is returned. Otherwise, an array of rank n-1, where n equals the rank of 
   13673 @var{ARRAY}, and a shape similar to that of @var{ARRAY} with dimension @var{DIM} 
   13674 dropped is returned.
   13675 
   13676 @item @emph{Example}:
   13677 @smallexample
   13678 PROGRAM test_sum
   13679   INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)
   13680   print *, SUM(x)                        ! all elements, sum = 15
   13681   print *, SUM(x, MASK=MOD(x, 2)==1)     ! odd elements, sum = 9
   13682 END PROGRAM
   13683 @end smallexample
   13684 
   13685 @item @emph{See also}:
   13686 @ref{PRODUCT}
   13687 @end table
   13688 
   13689 
   13690 
   13691 @node SYMLNK
   13692 @section @code{SYMLNK} --- Create a symbolic link
   13693 @fnindex SYMLNK
   13694 @cindex file system, create link
   13695 @cindex file system, soft link
   13696 
   13697 @table @asis
   13698 @item @emph{Description}:
   13699 Makes a symbolic link from file @var{PATH1} to @var{PATH2}. A null
   13700 character (@code{CHAR(0)}) can be used to mark the end of the names in
   13701 @var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
   13702 names are ignored.  If the @var{STATUS} argument is supplied, it
   13703 contains 0 on success or a nonzero error code upon return; see
   13704 @code{symlink(2)}.  If the system does not supply @code{symlink(2)}, 
   13705 @code{ENOSYS} is returned.
   13706 
   13707 This intrinsic is provided in both subroutine and function forms;
   13708 however, only one form can be used in any given program unit.
   13709 
   13710 @item @emph{Standard}:
   13711 GNU extension
   13712 
   13713 @item @emph{Class}:
   13714 Subroutine, function
   13715 
   13716 @item @emph{Syntax}:
   13717 @multitable @columnfractions .80
   13718 @item @code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
   13719 @item @code{STATUS = SYMLNK(PATH1, PATH2)}
   13720 @end multitable
   13721 
   13722 @item @emph{Arguments}:
   13723 @multitable @columnfractions .15 .70
   13724 @item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
   13725 @item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
   13726 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   13727 @end multitable
   13728 
   13729 @item @emph{See also}:
   13730 @ref{LINK}, @ref{UNLINK}
   13731 
   13732 @end table
   13733 
   13734 
   13735 
   13736 @node SYSTEM
   13737 @section @code{SYSTEM} --- Execute a shell command
   13738 @fnindex SYSTEM
   13739 @cindex system, system call
   13740 
   13741 @table @asis
   13742 @item @emph{Description}:
   13743 Passes the command @var{COMMAND} to a shell (see @code{system(3)}). If
   13744 argument @var{STATUS} is present, it contains the value returned by
   13745 @code{system(3)}, which is presumably 0 if the shell command succeeded.
   13746 Note that which shell is used to invoke the command is system-dependent
   13747 and environment-dependent.
   13748 
   13749 This intrinsic is provided in both subroutine and function forms;
   13750 however, only one form can be used in any given program unit.
   13751 
   13752 Note that the @code{system} function need not be thread-safe. It is
   13753 the responsibility of the user to ensure that @code{system} is not
   13754 called concurrently.
   13755 
   13756 @item @emph{Standard}:
   13757 GNU extension
   13758 
   13759 @item @emph{Class}:
   13760 Subroutine, function
   13761 
   13762 @item @emph{Syntax}:
   13763 @multitable @columnfractions .80
   13764 @item @code{CALL SYSTEM(COMMAND [, STATUS])}
   13765 @item @code{STATUS = SYSTEM(COMMAND)}
   13766 @end multitable
   13767 
   13768 @item @emph{Arguments}:
   13769 @multitable @columnfractions .15 .70
   13770 @item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type.
   13771 @item @var{STATUS}  @tab (Optional) Shall be of default @code{INTEGER} type.
   13772 @end multitable
   13773 
   13774 @item @emph{See also}:
   13775 @ref{EXECUTE_COMMAND_LINE}, which is part of the Fortran 2008 standard
   13776 and should considered in new code for future portability.
   13777 @end table
   13778 
   13779 
   13780 
   13781 @node SYSTEM_CLOCK
   13782 @section @code{SYSTEM_CLOCK} --- Time function
   13783 @fnindex SYSTEM_CLOCK
   13784 @cindex time, clock ticks
   13785 @cindex clock ticks
   13786 
   13787 @table @asis
   13788 @item @emph{Description}:
   13789 Determines the @var{COUNT} of a processor clock since an unspecified
   13790 time in the past modulo @var{COUNT_MAX}, @var{COUNT_RATE} determines
   13791 the number of clock ticks per second.  If the platform supports a
   13792 monotonic clock, that clock is used and can, depending on the platform
   13793 clock implementation, provide up to nanosecond resolution.  If a
   13794 monotonic clock is not available, the implementation falls back to a
   13795 realtime clock.
   13796 
   13797 @var{COUNT_RATE} is system dependent and can vary depending on the kind of
   13798 the arguments. For @var{kind=4} arguments (and smaller integer kinds),
   13799 @var{COUNT} represents milliseconds, while for @var{kind=8} arguments (and
   13800 larger integer kinds), @var{COUNT} typically represents micro- or
   13801 nanoseconds depending on resolution of the underlying platform clock.
   13802 @var{COUNT_MAX} usually equals @code{HUGE(COUNT_MAX)}. Note that the
   13803 millisecond resolution of the @var{kind=4} version implies that the
   13804 @var{COUNT} will wrap around in roughly 25 days. In order to avoid issues
   13805 with the wrap around and for more precise timing, please use the
   13806 @var{kind=8} version.
   13807 
   13808 If there is no clock, or querying the clock fails, @var{COUNT} is set
   13809 to @code{-HUGE(COUNT)}, and @var{COUNT_RATE} and @var{COUNT_MAX} are
   13810 set to zero.
   13811 
   13812 When running on a platform using the GNU C library (glibc) version
   13813 2.16 or older, or a derivative thereof, the high resolution monotonic
   13814 clock is available only when linking with the @var{rt} library.  This
   13815 can be done explicitly by adding the @code{-lrt} flag when linking the
   13816 application, but is also done implicitly when using OpenMP.
   13817 
   13818 On the Windows platform, the version with @var{kind=4} arguments uses
   13819 the @code{GetTickCount} function, whereas the @var{kind=8} version
   13820 uses @code{QueryPerformanceCounter} and
   13821 @code{QueryPerformanceCounterFrequency}. For more information, and
   13822 potential caveats, please see the platform documentation.
   13823 
   13824 @item @emph{Standard}:
   13825 Fortran 95 and later
   13826 
   13827 @item @emph{Class}:
   13828 Subroutine
   13829 
   13830 @item @emph{Syntax}:
   13831 @code{CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])}
   13832 
   13833 @item @emph{Arguments}:
   13834 @multitable @columnfractions .15 .70
   13835 @item @var{COUNT}      @tab (Optional) shall be a scalar of type 
   13836 @code{INTEGER} with @code{INTENT(OUT)}.
   13837 @item @var{COUNT_RATE} @tab (Optional) shall be a scalar of type 
   13838 @code{INTEGER} or @code{REAL}, with @code{INTENT(OUT)}.
   13839 @item @var{COUNT_MAX}  @tab (Optional) shall be a scalar of type 
   13840 @code{INTEGER} with @code{INTENT(OUT)}.
   13841 @end multitable
   13842 
   13843 @item @emph{Example}:
   13844 @smallexample
   13845 PROGRAM test_system_clock
   13846   INTEGER :: count, count_rate, count_max
   13847   CALL SYSTEM_CLOCK(count, count_rate, count_max)
   13848   WRITE(*,*) count, count_rate, count_max
   13849 END PROGRAM
   13850 @end smallexample
   13851 
   13852 @item @emph{See also}:
   13853 @ref{DATE_AND_TIME}, @ref{CPU_TIME}
   13854 @end table
   13855 
   13856 
   13857 
   13858 @node TAN
   13859 @section @code{TAN} --- Tangent function
   13860 @fnindex TAN
   13861 @fnindex DTAN
   13862 @cindex trigonometric function, tangent
   13863 @cindex tangent
   13864 
   13865 @table @asis
   13866 @item @emph{Description}:
   13867 @code{TAN(X)} computes the tangent of @var{X}.
   13868 
   13869 @item @emph{Standard}:
   13870 Fortran 77 and later, for a complex argument Fortran 2008 or later
   13871 
   13872 @item @emph{Class}:
   13873 Elemental function
   13874 
   13875 @item @emph{Syntax}:
   13876 @code{RESULT = TAN(X)}
   13877 
   13878 @item @emph{Arguments}:
   13879 @multitable @columnfractions .15 .70
   13880 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   13881 @end multitable
   13882 
   13883 @item @emph{Return value}:
   13884 The return value has same type and kind as @var{X}, and its value is in radians.
   13885 
   13886 @item @emph{Example}:
   13887 @smallexample
   13888 program test_tan
   13889   real(8) :: x = 0.165_8
   13890   x = tan(x)
   13891 end program test_tan
   13892 @end smallexample
   13893 
   13894 @item @emph{Specific names}:
   13895 @multitable @columnfractions .20 .20 .20 .25
   13896 @item Name            @tab Argument          @tab Return type     @tab Standard
   13897 @item @code{TAN(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab Fortran 95 and later
   13898 @item @code{DTAN(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab Fortran 95 and later
   13899 @end multitable
   13900 
   13901 @item @emph{See also}:
   13902 Inverse function: @ref{ATAN}
   13903 Degrees function: @ref{TAND}
   13904 @end table
   13905 
   13906 
   13907 
   13908 @node TAND
   13909 @section @code{TAND} --- Tangent function, degrees
   13910 @fnindex TAND
   13911 @fnindex DTAND
   13912 @cindex trigonometric function, tangent, degrees
   13913 @cindex tangent, degrees
   13914 
   13915 @table @asis
   13916 @item @emph{Description}:
   13917 @code{TAND(X)} computes the tangent of @var{X} in degrees.
   13918 
   13919 This function is for compatibility only and should be avoided in favor of
   13920 standard constructs wherever possible.
   13921 
   13922 @item @emph{Standard}:
   13923 GNU Extension, enabled with @option{-fdec-math}.
   13924 
   13925 @item @emph{Class}:
   13926 Elemental function
   13927 
   13928 @item @emph{Syntax}:
   13929 @code{RESULT = TAND(X)}
   13930 
   13931 @item @emph{Arguments}:
   13932 @multitable @columnfractions .15 .70
   13933 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   13934 @end multitable
   13935 
   13936 @item @emph{Return value}:
   13937 The return value has same type and kind as @var{X}, and its value is in degrees.
   13938 
   13939 @item @emph{Example}:
   13940 @smallexample
   13941 program test_tand
   13942   real(8) :: x = 0.165_8
   13943   x = tand(x)
   13944 end program test_tand
   13945 @end smallexample
   13946 
   13947 @item @emph{Specific names}:
   13948 @multitable @columnfractions .20 .20 .20 .25
   13949 @item Name            @tab Argument          @tab Return type     @tab Standard
   13950 @item @code{TAND(X)}   @tab @code{REAL(4) X}  @tab @code{REAL(4)}  @tab GNU Extension
   13951 @item @code{DTAND(X)}  @tab @code{REAL(8) X}  @tab @code{REAL(8)}  @tab GNU Extension
   13952 @end multitable
   13953 
   13954 @item @emph{See also}:
   13955 Inverse function: @ref{ATAND}
   13956 Radians function: @ref{TAN}
   13957 @end table
   13958 
   13959 
   13960 
   13961 @node TANH
   13962 @section @code{TANH} --- Hyperbolic tangent function 
   13963 @fnindex TANH
   13964 @fnindex DTANH
   13965 @cindex hyperbolic tangent
   13966 @cindex hyperbolic function, tangent
   13967 @cindex tangent, hyperbolic
   13968 
   13969 @table @asis
   13970 @item @emph{Description}:
   13971 @code{TANH(X)} computes the hyperbolic tangent of @var{X}.
   13972 
   13973 @item @emph{Standard}:
   13974 Fortran 77 and later, for a complex argument Fortran 2008 or later
   13975 
   13976 @item @emph{Class}:
   13977 Elemental function
   13978 
   13979 @item @emph{Syntax}:
   13980 @code{X = TANH(X)}
   13981 
   13982 @item @emph{Arguments}:
   13983 @multitable @columnfractions .15 .70
   13984 @item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}.
   13985 @end multitable
   13986 
   13987 @item @emph{Return value}:
   13988 The return value has same type and kind as @var{X}. If @var{X} is
   13989 complex, the imaginary part of the result is in radians. If @var{X}
   13990 is @code{REAL}, the return value lies in the range
   13991 @math{ - 1 \leq tanh(x) \leq 1 }.
   13992 
   13993 @item @emph{Example}:
   13994 @smallexample
   13995 program test_tanh
   13996   real(8) :: x = 2.1_8
   13997   x = tanh(x)
   13998 end program test_tanh
   13999 @end smallexample
   14000 
   14001 @item @emph{Specific names}:
   14002 @multitable @columnfractions .20 .20 .20 .25
   14003 @item Name            @tab Argument          @tab Return type       @tab Standard
   14004 @item @code{TANH(X)}  @tab @code{REAL(4) X}  @tab @code{REAL(4)}    @tab Fortran 95 and later
   14005 @item @code{DTANH(X)} @tab @code{REAL(8) X}  @tab @code{REAL(8)}    @tab Fortran 95 and later
   14006 @end multitable
   14007 
   14008 @item @emph{See also}:
   14009 @ref{ATANH}
   14010 @end table
   14011 
   14012 
   14013 
   14014 @node THIS_IMAGE
   14015 @section @code{THIS_IMAGE} --- Function that returns the cosubscript index of this image
   14016 @fnindex THIS_IMAGE
   14017 @cindex coarray, @code{THIS_IMAGE}
   14018 @cindex images, index of this image
   14019 
   14020 @table @asis
   14021 @item @emph{Description}:
   14022 Returns the cosubscript for this image.
   14023 
   14024 @item @emph{Standard}:
   14025 Fortran 2008 and later. With @var{DISTANCE} argument, 
   14026 Technical Specification (TS) 18508 or later
   14027 
   14028 @item @emph{Class}:
   14029 Transformational function
   14030 
   14031 @item @emph{Syntax}:
   14032 @multitable @columnfractions .80
   14033 @item @code{RESULT = THIS_IMAGE()}
   14034 @item @code{RESULT = THIS_IMAGE(DISTANCE)}
   14035 @item @code{RESULT = THIS_IMAGE(COARRAY [, DIM])}
   14036 @end multitable
   14037 
   14038 @item @emph{Arguments}:
   14039 @multitable @columnfractions .15 .70
   14040 @item @var{DISTANCE} @tab (optional, intent(in)) Nonnegative scalar integer
   14041 (not permitted together with @var{COARRAY}).
   14042 @item @var{COARRAY} @tab Coarray of any type  (optional; if @var{DIM}
   14043 present, required).
   14044 @item @var{DIM}     @tab default integer scalar (optional). If present,
   14045 @var{DIM} shall be between one and the corank of @var{COARRAY}.
   14046 @end multitable
   14047 
   14048 
   14049 @item @emph{Return value}:
   14050 Default integer. If @var{COARRAY} is not present, it is scalar; if
   14051 @var{DISTANCE} is not present or has value 0, its value is the image index on
   14052 the invoking image for the current team, for values smaller or equal
   14053 distance to the initial team, it returns the image index on the ancestor team
   14054 which has a distance of @var{DISTANCE} from the invoking team. If
   14055 @var{DISTANCE} is larger than the distance to the initial team, the image
   14056 index of the initial team is returned. Otherwise when the @var{COARRAY} is
   14057 present, if @var{DIM} is not present, a rank-1 array with corank elements is
   14058 returned, containing the cosubscripts for @var{COARRAY} specifying the invoking
   14059 image. If @var{DIM} is present, a scalar is returned, with the value of
   14060 the @var{DIM} element of @code{THIS_IMAGE(COARRAY)}.
   14061 
   14062 @item @emph{Example}:
   14063 @smallexample
   14064 INTEGER :: value[*]
   14065 INTEGER :: i
   14066 value = THIS_IMAGE()
   14067 SYNC ALL
   14068 IF (THIS_IMAGE() == 1) THEN
   14069   DO i = 1, NUM_IMAGES()
   14070     WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]
   14071   END DO
   14072 END IF
   14073 
   14074 ! Check whether the current image is the initial image
   14075 IF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE())
   14076   error stop "something is rotten here"
   14077 @end smallexample
   14078 
   14079 @item @emph{See also}:
   14080 @ref{NUM_IMAGES}, @ref{IMAGE_INDEX}
   14081 @end table
   14082 
   14083 
   14084 
   14085 @node TIME
   14086 @section @code{TIME} --- Time function
   14087 @fnindex TIME
   14088 @cindex time, current
   14089 @cindex current time
   14090 
   14091 @table @asis
   14092 @item @emph{Description}:
   14093 Returns the current time encoded as an integer (in the manner of the
   14094 function @code{time(3)} in the C standard library). This value is
   14095 suitable for passing to @ref{CTIME}, @ref{GMTIME}, and @ref{LTIME}.
   14096 
   14097 This intrinsic is not fully portable, such as to systems with 32-bit
   14098 @code{INTEGER} types but supporting times wider than 32 bits. Therefore,
   14099 the values returned by this intrinsic might be, or become, negative, or
   14100 numerically less than previous values, during a single run of the
   14101 compiled program.
   14102 
   14103 See @ref{TIME8}, for information on a similar intrinsic that might be
   14104 portable to more GNU Fortran implementations, though to fewer Fortran
   14105 compilers.
   14106 
   14107 @item @emph{Standard}:
   14108 GNU extension
   14109 
   14110 @item @emph{Class}:
   14111 Function
   14112 
   14113 @item @emph{Syntax}:
   14114 @code{RESULT = TIME()}
   14115 
   14116 @item @emph{Return value}:
   14117 The return value is a scalar of type @code{INTEGER(4)}.
   14118 
   14119 @item @emph{See also}:
   14120 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
   14121 
   14122 @end table
   14123 
   14124 
   14125 
   14126 @node TIME8
   14127 @section @code{TIME8} --- Time function (64-bit)
   14128 @fnindex TIME8
   14129 @cindex time, current
   14130 @cindex current time
   14131 
   14132 @table @asis
   14133 @item @emph{Description}:
   14134 Returns the current time encoded as an integer (in the manner of the
   14135 function @code{time(3)} in the C standard library). This value is
   14136 suitable for passing to @ref{CTIME}, @ref{GMTIME}, and @ref{LTIME}.
   14137 
   14138 @emph{Warning:} this intrinsic does not increase the range of the timing
   14139 values over that returned by @code{time(3)}. On a system with a 32-bit
   14140 @code{time(3)}, @code{TIME8} will return a 32-bit value, even though
   14141 it is converted to a 64-bit @code{INTEGER(8)} value. That means
   14142 overflows of the 32-bit value can still occur. Therefore, the values
   14143 returned by this intrinsic might be or become negative or numerically
   14144 less than previous values during a single run of the compiled program.
   14145 
   14146 @item @emph{Standard}:
   14147 GNU extension
   14148 
   14149 @item @emph{Class}:
   14150 Function
   14151 
   14152 @item @emph{Syntax}:
   14153 @code{RESULT = TIME8()}
   14154 
   14155 @item @emph{Return value}:
   14156 The return value is a scalar of type @code{INTEGER(8)}.
   14157 
   14158 @item @emph{See also}:
   14159 @ref{DATE_AND_TIME}, @ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK8}, @ref{TIME}
   14160 
   14161 @end table
   14162 
   14163 
   14164 
   14165 @node TINY
   14166 @section @code{TINY} --- Smallest positive number of a real kind
   14167 @fnindex TINY
   14168 @cindex limits, smallest number
   14169 @cindex model representation, smallest number
   14170 
   14171 @table @asis
   14172 @item @emph{Description}:
   14173 @code{TINY(X)} returns the smallest positive (non zero) number
   14174 in the model of the type of @code{X}.
   14175 
   14176 @item @emph{Standard}:
   14177 Fortran 95 and later
   14178 
   14179 @item @emph{Class}:
   14180 Inquiry function
   14181 
   14182 @item @emph{Syntax}:
   14183 @code{RESULT = TINY(X)}
   14184 
   14185 @item @emph{Arguments}:
   14186 @multitable @columnfractions .15 .70
   14187 @item @var{X} @tab Shall be of type @code{REAL}.
   14188 @end multitable
   14189 
   14190 @item @emph{Return value}:
   14191 The return value is of the same type and kind as @var{X}
   14192 
   14193 @item @emph{Example}:
   14194 See @code{HUGE} for an example.
   14195 @end table
   14196 
   14197 
   14198 
   14199 @node TRAILZ
   14200 @section @code{TRAILZ} --- Number of trailing zero bits of an integer
   14201 @fnindex TRAILZ
   14202 @cindex zero bits
   14203 
   14204 @table @asis
   14205 @item @emph{Description}:
   14206 @code{TRAILZ} returns the number of trailing zero bits of an integer.
   14207 
   14208 @item @emph{Standard}:
   14209 Fortran 2008 and later
   14210 
   14211 @item @emph{Class}:
   14212 Elemental function
   14213 
   14214 @item @emph{Syntax}:
   14215 @code{RESULT = TRAILZ(I)}
   14216 
   14217 @item @emph{Arguments}:
   14218 @multitable @columnfractions .15 .70
   14219 @item @var{I} @tab Shall be of type @code{INTEGER}.
   14220 @end multitable
   14221 
   14222 @item @emph{Return value}:
   14223 The type of the return value is the default @code{INTEGER}.
   14224 If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}.
   14225 
   14226 @item @emph{Example}:
   14227 @smallexample
   14228 PROGRAM test_trailz
   14229   WRITE (*,*) TRAILZ(8)  ! prints 3
   14230 END PROGRAM
   14231 @end smallexample
   14232 
   14233 @item @emph{See also}:
   14234 @ref{BIT_SIZE}, @ref{LEADZ}, @ref{POPPAR}, @ref{POPCNT}
   14235 @end table
   14236 
   14237 
   14238 
   14239 @node TRANSFER
   14240 @section @code{TRANSFER} --- Transfer bit patterns
   14241 @fnindex TRANSFER
   14242 @cindex bits, move
   14243 @cindex type cast
   14244 
   14245 @table @asis
   14246 @item @emph{Description}:
   14247 Interprets the bitwise representation of @var{SOURCE} in memory as if it
   14248 is the representation of a variable or array of the same type and type
   14249 parameters as @var{MOLD}.
   14250 
   14251 This is approximately equivalent to the C concept of @emph{casting} one
   14252 type to another.
   14253 
   14254 @item @emph{Standard}:
   14255 Fortran 95 and later
   14256 
   14257 @item @emph{Class}:
   14258 Transformational function
   14259 
   14260 @item @emph{Syntax}:
   14261 @code{RESULT = TRANSFER(SOURCE, MOLD[, SIZE])}
   14262 
   14263 @item @emph{Arguments}:
   14264 @multitable @columnfractions .15 .70
   14265 @item @var{SOURCE} @tab Shall be a scalar or an array of any type.
   14266 @item @var{MOLD}   @tab Shall be a scalar or an array of any type.
   14267 @item @var{SIZE}   @tab (Optional) shall be a scalar of type 
   14268 @code{INTEGER}.
   14269 @end multitable
   14270 
   14271 @item @emph{Return value}:
   14272 The result has the same type as @var{MOLD}, with the bit level
   14273 representation of @var{SOURCE}.  If @var{SIZE} is present, the result is
   14274 a one-dimensional array of length @var{SIZE}.  If @var{SIZE} is absent
   14275 but @var{MOLD} is an array (of any size or shape), the result is a one-
   14276 dimensional array of the minimum length needed to contain the entirety
   14277 of the bitwise representation of @var{SOURCE}.   If @var{SIZE} is absent
   14278 and @var{MOLD} is a scalar, the result is a scalar.
   14279 
   14280 If the bitwise representation of the result is longer than that of
   14281 @var{SOURCE}, then the leading bits of the result correspond to those of
   14282 @var{SOURCE} and any trailing bits are filled arbitrarily.
   14283 
   14284 When the resulting bit representation does not correspond to a valid
   14285 representation of a variable of the same type as @var{MOLD}, the results
   14286 are undefined, and subsequent operations on the result cannot be
   14287 guaranteed to produce sensible behavior.  For example, it is possible to
   14288 create @code{LOGICAL} variables for which @code{@var{VAR}} and
   14289 @code{.NOT.@var{VAR}} both appear to be true.
   14290 
   14291 @item @emph{Example}:
   14292 @smallexample
   14293 PROGRAM test_transfer
   14294   integer :: x = 2143289344
   14295   print *, transfer(x, 1.0)    ! prints "NaN" on i686
   14296 END PROGRAM
   14297 @end smallexample
   14298 @end table
   14299 
   14300 
   14301 
   14302 @node TRANSPOSE
   14303 @section @code{TRANSPOSE} --- Transpose an array of rank two
   14304 @fnindex TRANSPOSE
   14305 @cindex array, transpose
   14306 @cindex matrix, transpose
   14307 @cindex transpose
   14308 
   14309 @table @asis
   14310 @item @emph{Description}:
   14311 Transpose an array of rank two. Element (i, j) of the result has the value 
   14312 @code{MATRIX(j, i)}, for all i, j.
   14313 
   14314 @item @emph{Standard}:
   14315 Fortran 95 and later
   14316 
   14317 @item @emph{Class}:
   14318 Transformational function
   14319 
   14320 @item @emph{Syntax}:
   14321 @code{RESULT = TRANSPOSE(MATRIX)}
   14322 
   14323 @item @emph{Arguments}:
   14324 @multitable @columnfractions .15 .70
   14325 @item @var{MATRIX} @tab Shall be an array of any type and have a rank of two.
   14326 @end multitable
   14327 
   14328 @item @emph{Return value}:
   14329 The result has the same type as @var{MATRIX}, and has shape 
   14330 @code{(/ m, n /)} if @var{MATRIX} has shape @code{(/ n, m /)}.
   14331 @end table
   14332 
   14333 
   14334 
   14335 @node TRIM
   14336 @section @code{TRIM} --- Remove trailing blank characters of a string
   14337 @fnindex TRIM
   14338 @cindex string, remove trailing whitespace
   14339 
   14340 @table @asis
   14341 @item @emph{Description}:
   14342 Removes trailing blank characters of a string.
   14343 
   14344 @item @emph{Standard}:
   14345 Fortran 95 and later
   14346 
   14347 @item @emph{Class}:
   14348 Transformational function
   14349 
   14350 @item @emph{Syntax}:
   14351 @code{RESULT = TRIM(STRING)}
   14352 
   14353 @item @emph{Arguments}:
   14354 @multitable @columnfractions .15 .70
   14355 @item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}.
   14356 @end multitable
   14357 
   14358 @item @emph{Return value}:
   14359 A scalar of type @code{CHARACTER} which length is that of @var{STRING}
   14360 less the number of trailing blanks.
   14361 
   14362 @item @emph{Example}:
   14363 @smallexample
   14364 PROGRAM test_trim
   14365   CHARACTER(len=10), PARAMETER :: s = "GFORTRAN  "
   14366   WRITE(*,*) LEN(s), LEN(TRIM(s))  ! "10 8", with/without trailing blanks
   14367 END PROGRAM
   14368 @end smallexample
   14369 
   14370 @item @emph{See also}:
   14371 @ref{ADJUSTL}, @ref{ADJUSTR}
   14372 @end table
   14373 
   14374 
   14375 
   14376 @node TTYNAM
   14377 @section @code{TTYNAM} --- Get the name of a terminal device.
   14378 @fnindex TTYNAM
   14379 @cindex system, terminal
   14380 
   14381 @table @asis
   14382 @item @emph{Description}:
   14383 Get the name of a terminal device. For more information, 
   14384 see @code{ttyname(3)}.
   14385 
   14386 This intrinsic is provided in both subroutine and function forms; 
   14387 however, only one form can be used in any given program unit. 
   14388 
   14389 @item @emph{Standard}:
   14390 GNU extension
   14391 
   14392 @item @emph{Class}:
   14393 Subroutine, function
   14394 
   14395 @item @emph{Syntax}:
   14396 @multitable @columnfractions .80
   14397 @item @code{CALL TTYNAM(UNIT, NAME)}
   14398 @item @code{NAME = TTYNAM(UNIT)}
   14399 @end multitable
   14400 
   14401 @item @emph{Arguments}:
   14402 @multitable @columnfractions .15 .70
   14403 @item @var{UNIT} @tab Shall be a scalar @code{INTEGER}.
   14404 @item @var{NAME} @tab Shall be of type @code{CHARACTER}.
   14405 @end multitable
   14406 
   14407 @item @emph{Example}:
   14408 @smallexample
   14409 PROGRAM test_ttynam
   14410   INTEGER :: unit
   14411   DO unit = 1, 10
   14412     IF (isatty(unit=unit)) write(*,*) ttynam(unit)
   14413   END DO
   14414 END PROGRAM
   14415 @end smallexample
   14416 
   14417 @item @emph{See also}:
   14418 @ref{ISATTY}
   14419 @end table
   14420 
   14421 
   14422 
   14423 @node UBOUND
   14424 @section @code{UBOUND} --- Upper dimension bounds of an array
   14425 @fnindex UBOUND
   14426 @cindex array, upper bound
   14427 
   14428 @table @asis
   14429 @item @emph{Description}:
   14430 Returns the upper bounds of an array, or a single upper bound
   14431 along the @var{DIM} dimension.
   14432 @item @emph{Standard}:
   14433 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   14434 
   14435 @item @emph{Class}:
   14436 Inquiry function
   14437 
   14438 @item @emph{Syntax}:
   14439 @code{RESULT = UBOUND(ARRAY [, DIM [, KIND]])}
   14440 
   14441 @item @emph{Arguments}:
   14442 @multitable @columnfractions .15 .70
   14443 @item @var{ARRAY} @tab Shall be an array, of any type.
   14444 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   14445 @item @var{KIND}@tab (Optional) An @code{INTEGER} initialization
   14446 expression indicating the kind parameter of the result.
   14447 @end multitable
   14448 
   14449 @item @emph{Return value}:
   14450 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   14451 @var{KIND} is absent, the return value is of default integer kind.
   14452 If @var{DIM} is absent, the result is an array of the upper bounds of
   14453 @var{ARRAY}.  If @var{DIM} is present, the result is a scalar
   14454 corresponding to the upper bound of the array along that dimension.  If
   14455 @var{ARRAY} is an expression rather than a whole array or array
   14456 structure component, or if it has a zero extent along the relevant
   14457 dimension, the upper bound is taken to be the number of elements along
   14458 the relevant dimension.
   14459 
   14460 @item @emph{See also}:
   14461 @ref{LBOUND}, @ref{LCOBOUND}
   14462 @end table
   14463 
   14464 
   14465 
   14466 @node UCOBOUND
   14467 @section @code{UCOBOUND} --- Upper codimension bounds of an array
   14468 @fnindex UCOBOUND
   14469 @cindex coarray, upper bound
   14470 
   14471 @table @asis
   14472 @item @emph{Description}:
   14473 Returns the upper cobounds of a coarray, or a single upper cobound
   14474 along the @var{DIM} codimension.
   14475 @item @emph{Standard}:
   14476 Fortran 2008 and later
   14477 
   14478 @item @emph{Class}:
   14479 Inquiry function
   14480 
   14481 @item @emph{Syntax}:
   14482 @code{RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])}
   14483 
   14484 @item @emph{Arguments}:
   14485 @multitable @columnfractions .15 .70
   14486 @item @var{ARRAY} @tab Shall be an coarray, of any type.
   14487 @item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}.
   14488 @item @var{KIND} @tab (Optional) An @code{INTEGER} initialization
   14489 expression indicating the kind parameter of the result.
   14490 @end multitable
   14491 
   14492 @item @emph{Return value}:
   14493 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   14494 @var{KIND} is absent, the return value is of default integer kind.
   14495 If @var{DIM} is absent, the result is an array of the lower cobounds of
   14496 @var{COARRAY}.  If @var{DIM} is present, the result is a scalar
   14497 corresponding to the lower cobound of the array along that codimension.
   14498 
   14499 @item @emph{See also}:
   14500 @ref{LCOBOUND}, @ref{LBOUND}
   14501 @end table
   14502 
   14503 
   14504 
   14505 @node UMASK
   14506 @section @code{UMASK} --- Set the file creation mask
   14507 @fnindex UMASK
   14508 @cindex file system, file creation mask
   14509 
   14510 @table @asis
   14511 @item @emph{Description}:
   14512 Sets the file creation mask to @var{MASK}. If called as a function, it
   14513 returns the old value. If called as a subroutine and argument @var{OLD}
   14514 if it is supplied, it is set to the old value. See @code{umask(2)}.
   14515 
   14516 @item @emph{Standard}:
   14517 GNU extension
   14518 
   14519 @item @emph{Class}:
   14520 Subroutine, function
   14521 
   14522 @item @emph{Syntax}:
   14523 @multitable @columnfractions .80
   14524 @item @code{CALL UMASK(MASK [, OLD])}
   14525 @item @code{OLD = UMASK(MASK)}
   14526 @end multitable
   14527 
   14528 @item @emph{Arguments}:
   14529 @multitable @columnfractions .15 .70
   14530 @item @var{MASK} @tab Shall be a scalar of type @code{INTEGER}.
   14531 @item @var{OLD} @tab (Optional) Shall be a scalar of type
   14532 @code{INTEGER}.
   14533 @end multitable
   14534 
   14535 @end table
   14536 
   14537 
   14538 
   14539 @node UNLINK
   14540 @section @code{UNLINK} --- Remove a file from the file system
   14541 @fnindex UNLINK
   14542 @cindex file system, remove file
   14543 
   14544 @table @asis
   14545 @item @emph{Description}:
   14546 Unlinks the file @var{PATH}. A null character (@code{CHAR(0)}) can be
   14547 used to mark the end of the name in @var{PATH}; otherwise, trailing
   14548 blanks in the file name are ignored.  If the @var{STATUS} argument is
   14549 supplied, it contains 0 on success or a nonzero error code upon return;
   14550 see @code{unlink(2)}.
   14551 
   14552 This intrinsic is provided in both subroutine and function forms;
   14553 however, only one form can be used in any given program unit.
   14554 
   14555 @item @emph{Standard}:
   14556 GNU extension
   14557 
   14558 @item @emph{Class}:
   14559 Subroutine, function
   14560 
   14561 @item @emph{Syntax}:
   14562 @multitable @columnfractions .80
   14563 @item @code{CALL UNLINK(PATH [, STATUS])}
   14564 @item @code{STATUS = UNLINK(PATH)}
   14565 @end multitable
   14566 
   14567 @item @emph{Arguments}:
   14568 @multitable @columnfractions .15 .70
   14569 @item @var{PATH} @tab Shall be of default @code{CHARACTER} type.
   14570 @item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
   14571 @end multitable
   14572 
   14573 @item @emph{See also}:
   14574 @ref{LINK}, @ref{SYMLNK}
   14575 @end table
   14576 
   14577 
   14578 
   14579 @node UNPACK
   14580 @section @code{UNPACK} --- Unpack an array of rank one into an array
   14581 @fnindex UNPACK
   14582 @cindex array, unpacking
   14583 @cindex array, increase dimension
   14584 @cindex array, scatter elements
   14585 
   14586 @table @asis
   14587 @item @emph{Description}:
   14588 Store the elements of @var{VECTOR} in an array of higher rank.
   14589 
   14590 @item @emph{Standard}:
   14591 Fortran 95 and later
   14592 
   14593 @item @emph{Class}:
   14594 Transformational function
   14595 
   14596 @item @emph{Syntax}:
   14597 @code{RESULT = UNPACK(VECTOR, MASK, FIELD)}
   14598 
   14599 @item @emph{Arguments}:
   14600 @multitable @columnfractions .15 .70
   14601 @item @var{VECTOR} @tab Shall be an array of any type and rank one. It 
   14602 shall have at least as many elements as @var{MASK} has @code{TRUE} values.
   14603 @item @var{MASK}   @tab Shall be an array of type @code{LOGICAL}.
   14604 @item @var{FIELD}  @tab Shall be of the same type as @var{VECTOR} and have
   14605 the same shape as @var{MASK}.
   14606 @end multitable
   14607 
   14608 @item @emph{Return value}:
   14609 The resulting array corresponds to @var{FIELD} with @code{TRUE} elements
   14610 of @var{MASK} replaced by values from @var{VECTOR} in array element order.
   14611 
   14612 @item @emph{Example}:
   14613 @smallexample
   14614 PROGRAM test_unpack
   14615   integer :: vector(2)  = (/1,1/)
   14616   logical :: mask(4)  = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
   14617   integer :: field(2,2) = 0, unity(2,2)
   14618 
   14619   ! result: unity matrix
   14620   unity = unpack(vector, reshape(mask, (/2,2/)), field)
   14621 END PROGRAM
   14622 @end smallexample
   14623 
   14624 @item @emph{See also}:
   14625 @ref{PACK}, @ref{SPREAD}
   14626 @end table
   14627 
   14628 
   14629 
   14630 @node VERIFY
   14631 @section @code{VERIFY} --- Scan a string for characters not a given set
   14632 @fnindex VERIFY
   14633 @cindex string, find missing set
   14634 
   14635 @table @asis
   14636 @item @emph{Description}:
   14637 Verifies that all the characters in @var{STRING} belong to the set of
   14638 characters in @var{SET}.
   14639 
   14640 If @var{BACK} is either absent or equals @code{FALSE}, this function
   14641 returns the position of the leftmost character of @var{STRING} that is
   14642 not in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost
   14643 position is returned. If all characters of @var{STRING} are found in
   14644 @var{SET}, the result is zero.
   14645 
   14646 @item @emph{Standard}:
   14647 Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later
   14648 
   14649 @item @emph{Class}:
   14650 Elemental function
   14651 
   14652 @item @emph{Syntax}:
   14653 @code{RESULT = VERIFY(STRING, SET[, BACK [, KIND]])}
   14654 
   14655 @item @emph{Arguments}:
   14656 @multitable @columnfractions .15 .70
   14657 @item @var{STRING} @tab Shall be of type @code{CHARACTER}.
   14658 @item @var{SET}    @tab Shall be of type @code{CHARACTER}.
   14659 @item @var{BACK}   @tab (Optional) shall be of type @code{LOGICAL}.
   14660 @item @var{KIND}   @tab (Optional) An @code{INTEGER} initialization
   14661 expression indicating the kind parameter of the result.
   14662 @end multitable
   14663 
   14664 @item @emph{Return value}:
   14665 The return value is of type @code{INTEGER} and of kind @var{KIND}. If
   14666 @var{KIND} is absent, the return value is of default integer kind.
   14667 
   14668 @item @emph{Example}:
   14669 @smallexample
   14670 PROGRAM test_verify
   14671   WRITE(*,*) VERIFY("FORTRAN", "AO")           ! 1, found 'F'
   14672   WRITE(*,*) VERIFY("FORTRAN", "FOO")          ! 3, found 'R'
   14673   WRITE(*,*) VERIFY("FORTRAN", "C++")          ! 1, found 'F'
   14674   WRITE(*,*) VERIFY("FORTRAN", "C++", .TRUE.)  ! 7, found 'N'
   14675   WRITE(*,*) VERIFY("FORTRAN", "FORTRAN")      ! 0' found none
   14676 END PROGRAM
   14677 @end smallexample
   14678 
   14679 @item @emph{See also}:
   14680 @ref{SCAN}, @ref{INDEX intrinsic}
   14681 @end table
   14682 
   14683 
   14684 
   14685 @node XOR
   14686 @section @code{XOR} --- Bitwise logical exclusive OR
   14687 @fnindex XOR
   14688 @cindex bitwise logical exclusive or
   14689 @cindex logical exclusive or, bitwise
   14690 
   14691 @table @asis
   14692 @item @emph{Description}:
   14693 Bitwise logical exclusive or. 
   14694 
   14695 This intrinsic routine is provided for backwards compatibility with 
   14696 GNU Fortran 77.  For integer arguments, programmers should consider
   14697 the use of the @ref{IEOR} intrinsic and for logical arguments the
   14698 @code{.NEQV.} operator, which are both defined by the Fortran standard.
   14699 
   14700 @item @emph{Standard}:
   14701 GNU extension
   14702 
   14703 @item @emph{Class}:
   14704 Function
   14705 
   14706 @item @emph{Syntax}:
   14707 @code{RESULT = XOR(I, J)}
   14708 
   14709 @item @emph{Arguments}:
   14710 @multitable @columnfractions .15 .70
   14711 @item @var{I} @tab The type shall be either a scalar @code{INTEGER}
   14712 type or a scalar @code{LOGICAL} type or a boz-literal-constant.
   14713 @item @var{J} @tab The type shall be the same as the type of @var{I} or
   14714 a boz-literal-constant. @var{I} and @var{J} shall not both be
   14715 boz-literal-constants.  If either @var{I} and @var{J} is a
   14716 boz-literal-constant, then the other argument must be a scalar @code{INTEGER}.
   14717 @end multitable
   14718 
   14719 @item @emph{Return value}:
   14720 The return type is either a scalar @code{INTEGER} or a scalar
   14721 @code{LOGICAL}.  If the kind type parameters differ, then the
   14722 smaller kind type is implicitly converted to larger kind, and the 
   14723 return has the larger kind.  A boz-literal-constant is 
   14724 converted to an @code{INTEGER} with the kind type parameter of
   14725 the other argument as-if a call to @ref{INT} occurred.
   14726 
   14727 @item @emph{Example}:
   14728 @smallexample
   14729 PROGRAM test_xor
   14730   LOGICAL :: T = .TRUE., F = .FALSE.
   14731   INTEGER :: a, b
   14732   DATA a / Z'F' /, b / Z'3' /
   14733 
   14734   WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)
   14735   WRITE (*,*) XOR(a, b)
   14736 END PROGRAM
   14737 @end smallexample
   14738 
   14739 @item @emph{See also}:
   14740 Fortran 95 elemental function: @ref{IEOR}
   14741 @end table
   14742 
   14743 
   14744 
   14745 @node Intrinsic Modules
   14746 @chapter Intrinsic Modules
   14747 @cindex intrinsic Modules
   14748 
   14749 @menu
   14750 * ISO_FORTRAN_ENV::
   14751 * ISO_C_BINDING::
   14752 * IEEE modules::
   14753 * OpenMP Modules OMP_LIB and OMP_LIB_KINDS::
   14754 * OpenACC Module OPENACC::
   14755 @end menu
   14756 
   14757 @node ISO_FORTRAN_ENV
   14758 @section @code{ISO_FORTRAN_ENV}
   14759 @table @asis
   14760 @item @emph{Standard}:
   14761 Fortran 2003 and later, except when otherwise noted
   14762 @end table
   14763 
   14764 The @code{ISO_FORTRAN_ENV} module provides the following scalar default-integer
   14765 named constants:
   14766 
   14767 @table @asis
   14768 @item @code{ATOMIC_INT_KIND}:
   14769 Default-kind integer constant to be used as kind parameter when defining
   14770 integer variables used in atomic operations. (Fortran 2008 or later.)
   14771 
   14772 @item @code{ATOMIC_LOGICAL_KIND}:
   14773 Default-kind integer constant to be used as kind parameter when defining
   14774 logical variables used in atomic operations. (Fortran 2008 or later.)
   14775 
   14776 @item @code{CHARACTER_KINDS}:
   14777 Default-kind integer constant array of rank one containing the supported kind
   14778 parameters of the @code{CHARACTER} type. (Fortran 2008 or later.)
   14779 
   14780 @item @code{CHARACTER_STORAGE_SIZE}:
   14781 Size in bits of the character storage unit.
   14782 
   14783 @item @code{ERROR_UNIT}:
   14784 Identifies the preconnected unit used for error reporting.
   14785 
   14786 @item @code{FILE_STORAGE_SIZE}:
   14787 Size in bits of the file-storage unit.
   14788 
   14789 @item @code{INPUT_UNIT}:
   14790 Identifies the preconnected unit identified by the asterisk
   14791 (@code{*}) in @code{READ} statement.
   14792 
   14793 @item @code{INT8}, @code{INT16}, @code{INT32}, @code{INT64}:
   14794 Kind type parameters to specify an INTEGER type with a storage
   14795 size of 16, 32, and 64 bits. It is negative if a target platform
   14796 does not support the particular kind. (Fortran 2008 or later.)
   14797 
   14798 @item @code{INTEGER_KINDS}:
   14799 Default-kind integer constant array of rank one containing the supported kind
   14800 parameters of the @code{INTEGER} type. (Fortran 2008 or later.)
   14801 
   14802 @item @code{IOSTAT_END}:
   14803 The value assigned to the variable passed to the @code{IOSTAT=} specifier of
   14804 an input/output statement if an end-of-file condition occurred.
   14805 
   14806 @item @code{IOSTAT_EOR}:
   14807 The value assigned to the variable passed to the @code{IOSTAT=} specifier of
   14808 an input/output statement if an end-of-record condition occurred.
   14809 
   14810 @item @code{IOSTAT_INQUIRE_INTERNAL_UNIT}:
   14811 Scalar default-integer constant, used by @code{INQUIRE} for the
   14812 @code{IOSTAT=} specifier to denote an that a unit number identifies an
   14813 internal unit. (Fortran 2008 or later.)
   14814 
   14815 @item @code{NUMERIC_STORAGE_SIZE}:
   14816 The size in bits of the numeric storage unit.
   14817 
   14818 @item @code{LOGICAL_KINDS}:
   14819 Default-kind integer constant array of rank one containing the supported kind
   14820 parameters of the @code{LOGICAL} type. (Fortran 2008 or later.)
   14821 
   14822 @item @code{OUTPUT_UNIT}:
   14823 Identifies the preconnected unit identified by the asterisk
   14824 (@code{*}) in @code{WRITE} statement.
   14825 
   14826 @item @code{REAL32}, @code{REAL64}, @code{REAL128}:
   14827 Kind type parameters to specify a REAL type with a storage
   14828 size of 32, 64, and 128 bits. It is negative if a target platform
   14829 does not support the particular kind. (Fortran 2008 or later.)
   14830 
   14831 @item @code{REAL_KINDS}:
   14832 Default-kind integer constant array of rank one containing the supported kind
   14833 parameters of the @code{REAL} type. (Fortran 2008 or later.)
   14834 
   14835 @item @code{STAT_LOCKED}:
   14836 Scalar default-integer constant used as STAT= return value by @code{LOCK} to
   14837 denote that the lock variable is locked by the executing image. (Fortran 2008
   14838 or later.)
   14839 
   14840 @item @code{STAT_LOCKED_OTHER_IMAGE}:
   14841 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
   14842 denote that the lock variable is locked by another image. (Fortran 2008 or
   14843 later.)
   14844 
   14845 @item @code{STAT_STOPPED_IMAGE}:
   14846 Positive, scalar default-integer constant used as STAT= return value if the
   14847 argument in the statement requires synchronisation with an image, which has
   14848 initiated the termination of the execution. (Fortran 2008 or later.)
   14849 
   14850 @item @code{STAT_FAILED_IMAGE}:
   14851 Positive, scalar default-integer constant used as STAT= return value if the
   14852 argument in the statement requires communication with an image, which has
   14853 is in the failed state. (TS 18508 or later.)
   14854 
   14855 @item @code{STAT_UNLOCKED}:
   14856 Scalar default-integer constant used as STAT= return value by @code{UNLOCK} to
   14857 denote that the lock variable is unlocked. (Fortran 2008 or later.)
   14858 @end table
   14859 
   14860 The module provides the following derived type:
   14861 
   14862 @table @asis
   14863 @item @code{LOCK_TYPE}:
   14864 Derived type with private components to be use with the @code{LOCK} and
   14865 @code{UNLOCK} statement. A variable of its type has to be always declared
   14866 as coarray and may not appear in a variable-definition context.
   14867 (Fortran 2008 or later.)
   14868 @end table
   14869 
   14870 The module also provides the following intrinsic procedures:
   14871 @ref{COMPILER_OPTIONS} and @ref{COMPILER_VERSION}.
   14872 
   14873 
   14874 
   14875 @node ISO_C_BINDING
   14876 @section @code{ISO_C_BINDING}
   14877 @table @asis
   14878 @item @emph{Standard}:
   14879 Fortran 2003 and later, GNU extensions
   14880 @end table
   14881 
   14882 The following intrinsic procedures are provided by the module; their
   14883 definition can be found in the section Intrinsic Procedures of this
   14884 manual.
   14885 
   14886 @table @asis
   14887 @item @code{C_ASSOCIATED}
   14888 @item @code{C_F_POINTER}
   14889 @item @code{C_F_PROCPOINTER}
   14890 @item @code{C_FUNLOC}
   14891 @item @code{C_LOC}
   14892 @item @code{C_SIZEOF}
   14893 @end table
   14894 @c TODO: Vertical spacing between C_FUNLOC and C_LOC wrong in PDF,
   14895 @c don't really know why.
   14896 
   14897 The @code{ISO_C_BINDING} module provides the following named constants of
   14898 type default integer, which can be used as KIND type parameters.
   14899 
   14900 In addition to the integer named constants required by the Fortran 2003 
   14901 standard and @code{C_PTRDIFF_T} of TS 29113, GNU Fortran provides as an
   14902 extension named constants for the 128-bit integer types supported by the
   14903 C compiler: @code{C_INT128_T, C_INT_LEAST128_T, C_INT_FAST128_T}.
   14904 Furthermore, if @code{__float128} is supported in C, the named constants
   14905 @code{C_FLOAT128, C_FLOAT128_COMPLEX} are defined.
   14906 
   14907 @multitable @columnfractions .15 .35 .35 .35
   14908 @item Fortran Type  @tab Named constant         @tab C type                                @tab Extension
   14909 @item @code{INTEGER}@tab @code{C_INT}           @tab @code{int}
   14910 @item @code{INTEGER}@tab @code{C_SHORT}         @tab @code{short int}
   14911 @item @code{INTEGER}@tab @code{C_LONG}          @tab @code{long int}
   14912 @item @code{INTEGER}@tab @code{C_LONG_LONG}     @tab @code{long long int}
   14913 @item @code{INTEGER}@tab @code{C_SIGNED_CHAR}   @tab @code{signed char}/@code{unsigned char}
   14914 @item @code{INTEGER}@tab @code{C_SIZE_T}        @tab @code{size_t}
   14915 @item @code{INTEGER}@tab @code{C_INT8_T}        @tab @code{int8_t}
   14916 @item @code{INTEGER}@tab @code{C_INT16_T}       @tab @code{int16_t}
   14917 @item @code{INTEGER}@tab @code{C_INT32_T}       @tab @code{int32_t}
   14918 @item @code{INTEGER}@tab @code{C_INT64_T}       @tab @code{int64_t}
   14919 @item @code{INTEGER}@tab @code{C_INT128_T}      @tab @code{int128_t}                      @tab Ext.
   14920 @item @code{INTEGER}@tab @code{C_INT_LEAST8_T}  @tab @code{int_least8_t}
   14921 @item @code{INTEGER}@tab @code{C_INT_LEAST16_T} @tab @code{int_least16_t}
   14922 @item @code{INTEGER}@tab @code{C_INT_LEAST32_T} @tab @code{int_least32_t}
   14923 @item @code{INTEGER}@tab @code{C_INT_LEAST64_T} @tab @code{int_least64_t}
   14924 @item @code{INTEGER}@tab @code{C_INT_LEAST128_T}@tab @code{int_least128_t}                @tab Ext.
   14925 @item @code{INTEGER}@tab @code{C_INT_FAST8_T}   @tab @code{int_fast8_t}
   14926 @item @code{INTEGER}@tab @code{C_INT_FAST16_T}  @tab @code{int_fast16_t}
   14927 @item @code{INTEGER}@tab @code{C_INT_FAST32_T}  @tab @code{int_fast32_t}
   14928 @item @code{INTEGER}@tab @code{C_INT_FAST64_T}  @tab @code{int_fast64_t}
   14929 @item @code{INTEGER}@tab @code{C_INT_FAST128_T} @tab @code{int_fast128_t}                 @tab Ext.
   14930 @item @code{INTEGER}@tab @code{C_INTMAX_T}      @tab @code{intmax_t}
   14931 @item @code{INTEGER}@tab @code{C_INTPTR_T}      @tab @code{intptr_t}
   14932 @item @code{INTEGER}@tab @code{C_PTRDIFF_T}     @tab @code{ptrdiff_t}                     @tab TS 29113
   14933 @item @code{REAL}   @tab @code{C_FLOAT}         @tab @code{float}
   14934 @item @code{REAL}   @tab @code{C_DOUBLE}        @tab @code{double}
   14935 @item @code{REAL}   @tab @code{C_LONG_DOUBLE}   @tab @code{long double}
   14936 @item @code{REAL}   @tab @code{C_FLOAT128}      @tab @code{__float128}                    @tab Ext.
   14937 @item @code{COMPLEX}@tab @code{C_FLOAT_COMPLEX} @tab @code{float _Complex}
   14938 @item @code{COMPLEX}@tab @code{C_DOUBLE_COMPLEX}@tab @code{double _Complex}
   14939 @item @code{COMPLEX}@tab @code{C_LONG_DOUBLE_COMPLEX}@tab @code{long double _Complex}
   14940 @item @code{REAL}   @tab @code{C_FLOAT128_COMPLEX}   @tab @code{__float128 _Complex}      @tab Ext.
   14941 @item @code{LOGICAL}@tab @code{C_BOOL}          @tab @code{_Bool}
   14942 @item @code{CHARACTER}@tab @code{C_CHAR}        @tab @code{char}
   14943 @end multitable
   14944 
   14945 Additionally, the following parameters of type @code{CHARACTER(KIND=C_CHAR)}
   14946 are defined.
   14947 
   14948 @multitable @columnfractions .20 .45 .15
   14949 @item Name                     @tab C definition    @tab Value
   14950 @item @code{C_NULL_CHAR}       @tab null character  @tab @code{'\0'}
   14951 @item @code{C_ALERT}           @tab alert           @tab @code{'\a'}
   14952 @item @code{C_BACKSPACE}       @tab backspace       @tab @code{'\b'}
   14953 @item @code{C_FORM_FEED}       @tab form feed       @tab @code{'\f'}
   14954 @item @code{C_NEW_LINE}        @tab new line        @tab @code{'\n'}
   14955 @item @code{C_CARRIAGE_RETURN} @tab carriage return @tab @code{'\r'}
   14956 @item @code{C_HORIZONTAL_TAB}  @tab horizontal tab  @tab @code{'\t'}
   14957 @item @code{C_VERTICAL_TAB}    @tab vertical tab    @tab @code{'\v'}
   14958 @end multitable
   14959 
   14960 Moreover, the following two named constants are defined:
   14961 
   14962 @multitable @columnfractions .20 .80
   14963 @item Name                 @tab Type
   14964 @item @code{C_NULL_PTR}    @tab @code{C_PTR}
   14965 @item @code{C_NULL_FUNPTR} @tab @code{C_FUNPTR}
   14966 @end multitable
   14967 
   14968 Both are equivalent to the value @code{NULL} in C.
   14969 
   14970 
   14971 
   14972 @node IEEE modules
   14973 @section IEEE modules: @code{IEEE_EXCEPTIONS}, @code{IEEE_ARITHMETIC}, and @code{IEEE_FEATURES}
   14974 @table @asis
   14975 @item @emph{Standard}:
   14976 Fortran 2003 and later
   14977 @end table
   14978 
   14979 The @code{IEEE_EXCEPTIONS}, @code{IEEE_ARITHMETIC}, and @code{IEEE_FEATURES}
   14980 intrinsic modules provide support for exceptions and IEEE arithmetic, as
   14981 defined in Fortran 2003 and later standards, and the IEC 60559:1989 standard
   14982 (@emph{Binary floating-point arithmetic for microprocessor systems}). These
   14983 modules are only provided on the following supported platforms:
   14984 
   14985 @itemize @bullet
   14986 @item i386 and x86_64 processors
   14987 @item platforms which use the GNU C Library (glibc)
   14988 @item platforms with support for SysV/386 routines for floating point
   14989 interface (including Solaris and BSDs)
   14990 @item platforms with the AIX OS
   14991 @end itemize
   14992 
   14993 For full compliance with the Fortran standards, code using the
   14994 @code{IEEE_EXCEPTIONS} or @code{IEEE_ARITHMETIC} modules should be compiled
   14995 with the following options: @code{-fno-unsafe-math-optimizations
   14996 -frounding-math -fsignaling-nans}.
   14997 
   14998 
   14999 
   15000 @node OpenMP Modules OMP_LIB and OMP_LIB_KINDS
   15001 @section OpenMP Modules @code{OMP_LIB} and @code{OMP_LIB_KINDS}
   15002 @table @asis
   15003 @item @emph{Standard}:
   15004 OpenMP Application Program Interface v4.5
   15005 @end table
   15006 
   15007 
   15008 The OpenMP Fortran runtime library routines are provided both in
   15009 a form of two Fortran 90 modules, named @code{OMP_LIB} and 
   15010 @code{OMP_LIB_KINDS}, and in a form of a Fortran @code{include} file named
   15011 @file{omp_lib.h}. The procedures provided by @code{OMP_LIB} can be found
   15012 in the @ref{Top,,Introduction,libgomp,GNU Offloading and Multi
   15013 Processing Runtime Library} manual,
   15014 the named constants defined in the modules are listed
   15015 below.
   15016 
   15017 For details refer to the actual
   15018 @uref{http://www.openmp.org/wp-content/uploads/openmp-4.5.pdf,
   15019 OpenMP Application Program Interface v4.5}.
   15020 And for the @code{pause}-related constants to the OpenMP 5.0 specification.
   15021 
   15022 @code{OMP_LIB_KINDS} provides the following scalar default-integer
   15023 named constants:
   15024 
   15025 @table @asis
   15026 @item @code{omp_lock_kind}
   15027 @item @code{omp_lock_hint_kind}
   15028 @item @code{omp_nest_lock_kind}
   15029 @item @code{omp_pause_resource_kind}
   15030 @item @code{omp_proc_bind_kind}
   15031 @item @code{omp_sched_kind}
   15032 @end table
   15033 
   15034 @code{OMP_LIB} provides the scalar default-integer
   15035 named constant @code{openmp_version} with a value of the form
   15036 @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
   15037 of the OpenMP version; for OpenMP v4.5 the value is @code{201511}.
   15038 
   15039 The following scalar integer named constants of the
   15040 kind @code{omp_sched_kind}:
   15041 
   15042 @table @asis
   15043 @item @code{omp_sched_static}
   15044 @item @code{omp_sched_dynamic}
   15045 @item @code{omp_sched_guided}
   15046 @item @code{omp_sched_auto}
   15047 @end table
   15048 
   15049 And the following scalar integer named constants of the 
   15050 kind @code{omp_proc_bind_kind}:
   15051 
   15052 @table @asis
   15053 @item @code{omp_proc_bind_false}
   15054 @item @code{omp_proc_bind_true}
   15055 @item @code{omp_proc_bind_master}
   15056 @item @code{omp_proc_bind_close}
   15057 @item @code{omp_proc_bind_spread}
   15058 @end table
   15059 
   15060 The following scalar integer named constants are of the
   15061 kind @code{omp_lock_hint_kind}:
   15062 
   15063 @table @asis
   15064 @item @code{omp_lock_hint_none}
   15065 @item @code{omp_lock_hint_uncontended}
   15066 @item @code{omp_lock_hint_contended}
   15067 @item @code{omp_lock_hint_nonspeculative}
   15068 @item @code{omp_lock_hint_speculative}
   15069 @end table
   15070 
   15071 And the following two scalar integer named constants are of the
   15072 kind @code{omp_pause_resource_kind}:
   15073 
   15074 @table @asis
   15075 @item @code{omp_pause_soft}
   15076 @item @code{omp_pause_hard}
   15077 @end table
   15078 
   15079 
   15080 @node OpenACC Module OPENACC
   15081 @section OpenACC Module @code{OPENACC}
   15082 @table @asis
   15083 @item @emph{Standard}:
   15084 OpenACC Application Programming Interface v2.0
   15085 @end table
   15086 
   15087 
   15088 The OpenACC Fortran runtime library routines are provided both in a
   15089 form of a Fortran 90 module, named @code{OPENACC}, and in form of a
   15090 Fortran @code{include} file named @file{openacc_lib.h}.  The
   15091 procedures provided by @code{OPENACC} can be found in the
   15092 @ref{Top,,Introduction,libgomp,GNU Offloading and Multi Processing
   15093 Runtime Library} manual, the named constants defined in the modules
   15094 are listed below.
   15095 
   15096 For details refer to the actual
   15097 @uref{http://www.openacc.org/,
   15098 OpenACC Application Programming Interface v2.0}.
   15099 
   15100 @code{OPENACC} provides the scalar default-integer
   15101 named constant @code{openacc_version} with a value of the form
   15102 @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
   15103 of the OpenACC version; for OpenACC v2.0 the value is @code{201306}.
   15104