A 32- and 64-bit FNV-1a state hash over arrays of intrinsic type.
pic_hash_32bit_fnv already hashes rank-1 integer arrays and character
strings. This module fills the gap needed to fingerprint the state of a
running program: real, complex and logical data, ranks 1 to 3, and a
streaming accumulator so that many arrays – for example every component
of a derived type – fold into a single digest.
Quick start
use pic_array_hash , only : array_hash , array_hash_t , array_hash_hex
integer ( int32 ) :: fingerprint
type ( array_hash_t ) :: state
fingerprint = array_hash ( my_matrix ) ! one shot
call state % update ( sim % positions ) ! streaming
call state % update ( sim % velocities )
call state % update ( sim % step_count )
fingerprint = state % digest ()
call logger % info ( "state " // array_hash_hex ( fingerprint ))
Supported data
integer of kind int8, int16, int32, int64 – and therefore
default_int, whichever width this build uses – ranks 0 to 3.
real of kind sp and dp, ranks 0 to 3.
complex of kind sp and dp, ranks 0 to 3.
default logical, ranks 0 to 3.
default character: a scalar string, and a rank-1 array of strings.
Scalars (rank 0) are reachable through update only; the one-shot
array_hash takes arrays and strings. Rank 4 and higher, and real(qp),
are deliberately not supported; see “Limits” below.
Byte stream definition (stable, and documented on purpose)
The digest is plain FNV-1a – 32-bit with offset basis 0x811C9DC5 and
prime 0x01000193, 64-bit with offset basis 0xCBF29CE484222325 and
prime 0x100000001B3 – over a byte stream built as follows. The stream
itself is the same at both widths : everything below describes one
definition, and the two digests differ only in the FNV parameters folded
over it. Nothing in the stream
depends on host endianness or on the storage layout of any type, so the
same data gives the same digest on every machine and every supported
compiler.
An integer of encoded width w bytes contributes its w
two’s-complement bytes, least significant byte first.
A logical contributes one byte: 1 for true, 0 for false.
A character contributes one byte per character, the iachar (ASCII)
code of that character.
A real contributes a fixed 14-byte canonical record: a 1-byte class
code, a 1-byte sign, a 4-byte binary exponent and an 8-byte mantissa,
each little endian. See the floating point notes below.
A complex contributes the 14-byte record of its real part followed by
the 14-byte record of its imaginary part.
An array contributes the encoding of each element in Fortran array
element order (column major), with nothing in between.
Floating point: what happens to -0.0, NaN and Inf
This is the part that bites checkpoint validators, so it is specified
rather than inherited from whatever the bit pattern happens to be. A real
value is not hashed by its bits. It is classified first, then
canonicalised:
Positive and negative zero hash identically. -0.0 and +0.0
compare equal in Fortran, so a validator built on raw bits would report
a spurious mismatch between two runs that actually agree. Both are
encoded as the single class code “zero”, with sign, exponent and
mantissa all zero.
Every NaN hashes identically. All NaNs – quiet or signalling, of
either sign, with any payload – collapse to one class code “NaN”. Two
checkpoints that both went NaN in the same place therefore agree. Note
the consequence: a NaN never compares equal to itself numerically, but
it does hash equal to itself here.
+Inf and -Inf are distinguished from each other , and both are
distinguished from every finite value and from NaN, because they carry
separate class codes.
Finite values are hashed exactly , with no rounding and no tolerance.
The mantissa/exponent decomposition is injective on finite values, so
two distinct finite numbers always produce distinct records. Subnormals
are handled like any other finite value.
There is no raw bitwise entry point. Getting at the bits of a real
requires transfer between real and integer kinds, which is precisely
what this module avoids for portability; see “Portability” below.
Two consequences worth knowing:
Because the hash is exact, it answers “are these bit-for-bit the same
numbers”, not “are these the same to within a tolerance”. It is a
reproducibility check, not a physics check.
real(sp) and real(dp) holding the same finite numeric value hash
differently, because the mantissa is scaled by the precision of the
kind. Hash a checkpoint with the kind you stored it in. The zero, NaN
and infinity records carry no mantissa, so those four values do hash
the same in sp as in dp.
Shape sensitivity
The stream contains element values only; it does not contain the shape.
A 2x3 array, a 3x2 array and a 6-element vector holding the same elements
in the same order therefore all produce the same digest. That is the
documented contract, and it is exactly what makes streaming equal to
concatenation.
When shape must be part of the identity, feed it explicitly first:
call state % update ( shape ( a , kind = int32 )) ! int32: build independent
call state % update ( a )
Use kind=int32 there rather than the default, so the digest does not
change between a default-integer build and a PIC_DEFAULT_INT8 build.
Empty arrays
A zero-sized array contributes no bytes at all. update on one is a
no-op, and the one-shot array_hash of one returns
ARRAY_HASH_OFFSET_BASIS. Every zero-sized array therefore has the same
digest regardless of its type, kind or rank, and so does a zero-length
string. If “empty” must differ from “absent” in your checkpoint, hash the
size alongside the data as shown above.
Streaming, combining, and the concatenation contract
array_hash_t accumulates. Because the stream is a plain concatenation of
per-element encodings, hashing a and then b into one accumulator gives
exactly the digest of the concatenated array [a, b]. Sub-digests
computed elsewhere – say, one per MPI rank – fold in as ordinary int32
data:
call state % update ([ rank_digest ])
Order matters: FNV-1a is not commutative, so combine sub-digests in a
fixed, agreed order.
Portability
No transfer between real and integer kinds anywhere; that is the one
construct this module set out to avoid, because it behaves inconsistently
on nvfortran and LFortran. Reals are taken apart arithmetically with the
standard fraction, exponent, digits and scale intrinsics, which
are exact for IEEE binary formats. Bytes are extracted with ibits, never
with a shift by a negative count. The FNV multiply is carried out in
int64 and reduced modulo 2**32 by masking; the 64-bit multiply, which
has no wider kind to spill into, is carried out on 32-bit limbs instead
(see fnv1a_byte64). Neither can overflow a signed integer. NaN and infinity are detected by comparison (unordered
comparisons against zero, plus abs(x) > huge(x)) rather than through
ieee_arithmetic, which LFortran does not fully provide.
That comparison-based classification assumes the compiler has not thrown
IEEE semantics away. Building with -ffast-math / -Ofast, or
nvfortran -Mfprelaxed, lets a compiler assume no NaN can occur and fold
the NaN test away, after which a NaN would be decomposed as though it
were finite. Do not build this module that way.
Limits
Ranks 0 to 3 only. Rank 4 and up are reachable today by reshaping to a
lower rank, which costs nothing in digest terms precisely because the
hash is shape insensitive.
real(qp) and complex(qp) are unsupported: a 113-bit mantissa does
not fit the int64 mantissa field, and qp is not the same type on
every target anyway.
Only default logical and default character kinds.
Neither width is a cryptographic checksum, and neither is collision
resistant against an adversary. 32 bits is fine for comparing two
digests of the same thing, where a false match has probability 2-32.
It is not enough to identify things: among 10 5 distinct 32-bit
digests the chance that some pair collides is about 69%, against
3e-10 at 64 bits. Use array_hash64 when digests are keys.
module~~pic_array_hash~~UsesGraph
module~pic_array_hash
pic_array_hash
module~pic_types
pic_types
module~pic_array_hash->module~pic_types
module~pic_uint64
pic_uint64
module~pic_array_hash->module~pic_uint64
iso_c_binding
iso_c_binding
module~pic_types->iso_c_binding
iso_fortran_env
iso_fortran_env
module~pic_types->iso_fortran_env
module~pic_uint64->module~pic_types
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
module~~pic_array_hash~~UsedByGraph
module~pic_array_hash
pic_array_hash
module~pic_soa
pic_soa
module~pic_soa->module~pic_array_hash
module~pic_soa_particle
pic_soa_particle
module~pic_soa_particle->module~pic_array_hash
module~pic_soa_particle->module~pic_soa
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Variables
Type
Visibility Attributes
Name
Initial
integer(kind=int64),
public,
parameter
::
ARRAY_HASH64_OFFSET_BASIS
=
-3750763034362895579_int64
The FNV-1a 64-bit offset basis, 0xCBF29CE484222325, written as the
signed int64 value 14695981039346656037 - 2**64 so that no BOZ
literal appears in an initialiser. This is also the digest of an empty
stream. int64 here is a fixed-width algorithmic requirement of
FNV-1a, not a stand-in for default_int.
integer(kind=int32),
public,
parameter
::
ARRAY_HASH_OFFSET_BASIS
=
-2128831035_int32
The FNV-1a 32-bit offset basis, 0x811C9DC5, written as the signed
int32 value 2166136261 - 2**32 so that no BOZ literal appears in an
initialiser. This is also the digest of an empty stream. int32 here
is a fixed-width algorithmic requirement of FNV-1a, not a stand-in for
default_int.
integer(kind=int64),
private,
parameter
::
BYTES_PER_REAL
=
14_int64
Width of the canonical real record: 1 class + 1 sign + 4 exponent +
8 mantissa.
integer(kind=int64),
private,
parameter
::
CLASS_FINITE
=
1_int64
Class code for a finite non-zero value.
integer(kind=int64),
private,
parameter
::
CLASS_NAN
=
4_int64
Class code shared by every NaN, of either sign and any payload.
integer(kind=int64),
private,
parameter
::
CLASS_NEG_INF
=
3_int64
Class code for -Infinity.
integer(kind=int64),
private,
parameter
::
CLASS_POS_INF
=
2_int64
Class code for +Infinity.
integer(kind=int64),
private,
parameter
::
CLASS_ZERO
=
0_int64
Class code shared by -0.0 and +0.0.
integer(kind=default_int),
private,
parameter
::
FNV64_SHIFT
=
40_default_int
The high part of the FNV-1a 64-bit prime, as a shift count.
integer(kind=int64),
private,
parameter
::
FNV64_SMALL
=
435_int64
The low part of the FNV-1a 64-bit prime. That prime, 0x100000001B3, is
exactly 240 + 435, so the multiply modulo 2 64 splits into a shift
and a multiply by this small factor. See fnv1a_byte64.
integer(kind=int64),
private,
parameter
::
FNV_PRIME
=
16777619_int64
The FNV-1a 32-bit prime, 0x01000193. Held in int64 so the FNV
multiply can be done without signed overflow and reduced by masking.
character(len=16),
private,
parameter
::
HEX_DIGITS
=
"0123456789abcdef"
Lookup table for array_hash_hex.
integer(kind=int64),
private,
parameter
::
INT32_MAX
=
2147483647_int64
huge(0_int32); above this an unsigned result folds to a negative one.
integer(kind=default_int),
private,
parameter
::
LIMB_BITS
=
32_default_int
Width of one limb of that multiply. Also the position of the high
limb, which is why ibits(h, LIMB_BITS, LIMB_BITS) reads it.
integer(kind=int64),
private,
parameter
::
LIMB_MASK
=
4294967295_int64
232 - 1. The multiply by FNV64_SMALL is carried out on 32-bit
limbs, where no partial product can reach 2 41.
integer(kind=int64),
private,
parameter
::
MASK_32
=
4294967295_int64
232 - 1, used to reduce the FNV multiply modulo 2 32.
integer(kind=int64),
private,
parameter
::
TWO_POW_32
=
4294967296_int64
2**32, used to fold an unsigned 32-bit result back to signed int32.
Interfaces
One-shot digest of a single array or string.
Equivalent to a fresh array_hash_t, one update and a digest.
Returns ARRAY_HASH_OFFSET_BASIS for a zero-sized array or a
zero-length string.
private pure function hash_int8_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_int8_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_int8_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_int16_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_int16_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_int16_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_int32_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_int32_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_int32_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_int64_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_int64_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_int64_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_rsp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_rsp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_rsp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_rdp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_rdp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_rdp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_csp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_csp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_csp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_cdp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_cdp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_cdp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_logical_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:)
Return Value
integer(kind=int32)
private pure function hash_logical_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
private pure function hash_logical_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
private pure function hash_char_0 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key
Return Value
integer(kind=int32)
private pure function hash_char_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
One-shot digest of a single array or string.
Equivalent to a fresh array_hash64_t, one update and a digest.
Returns ARRAY_HASH64_OFFSET_BASIS for a zero-sized array or a
zero-length string.
private pure function hash64_int8_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_int8_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_int8_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_int16_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_int16_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_int16_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_int32_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_int32_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_int32_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_int64_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_int64_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_int64_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_rsp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_rsp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_rsp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_rdp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_rdp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_rdp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_csp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_csp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_csp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_cdp_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_cdp_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_cdp_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_logical_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:)
Return Value
integer(kind=int64)
private pure function hash64_logical_2 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
private pure function hash64_logical_3 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
private pure function hash64_char_0 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key
Return Value
integer(kind=int64)
private pure function hash64_char_1 (key) result(hash_value)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Derived Types
A streaming 64-bit FNV-1a accumulator over array state.
Read more…
Components
Type
Visibility Attributes
Name
Initial
integer(kind=int64),
private
::
nbytes
=
0_int64
Number of encoded bytes consumed so far. Fixed-width int64 so
that hashing more than 2 GiB of state cannot overflow the counter
in a default_int == int32 build.
integer(kind=int64),
private
::
state
=
ARRAY_HASH64_OFFSET_BASIS
Running hash. Fixed-width int64, because FNV-1a is defined
modulo 2**64.
Type-Bound Procedures
procedure, public ::
bytes_hashed => array_hash64_bytes_hashed
procedure, public ::
digest => array_hash64_digest
procedure, public ::
reset => array_hash64_reset
generic, public ::
update => update64_int8_0 , update64_int8_1 , update64_int8_2 , update64_int8_3 , update64_int16_0 , update64_int16_1 , update64_int16_2 , update64_int16_3 , update64_int32_0 , update64_int32_1 , update64_int32_2 , update64_int32_3 , update64_int64_0 , update64_int64_1 , update64_int64_2 , update64_int64_3 , update64_rsp_0 , update64_rsp_1 , update64_rsp_2 , update64_rsp_3 , update64_rdp_0 , update64_rdp_1 , update64_rdp_2 , update64_rdp_3 , update64_csp_0 , update64_csp_1 , update64_csp_2 , update64_csp_3 , update64_cdp_0 , update64_cdp_1 , update64_cdp_2 , update64_cdp_3 , update64_logical_0 , update64_logical_1 , update64_logical_2 , update64_logical_3 , update64_char_0 , update64_char_1
procedure, private ::
update64_cdp_0
procedure, private ::
update64_cdp_1
procedure, private ::
update64_cdp_2
procedure, private ::
update64_cdp_3
procedure, private ::
update64_char_0
procedure, private ::
update64_char_1
procedure, private ::
update64_csp_0
procedure, private ::
update64_csp_1
procedure, private ::
update64_csp_2
procedure, private ::
update64_csp_3
procedure, private ::
update64_int16_0
procedure, private ::
update64_int16_1
procedure, private ::
update64_int16_2
procedure, private ::
update64_int16_3
procedure, private ::
update64_int32_0
procedure, private ::
update64_int32_1
procedure, private ::
update64_int32_2
procedure, private ::
update64_int32_3
procedure, private ::
update64_int64_0
procedure, private ::
update64_int64_1
procedure, private ::
update64_int64_2
procedure, private ::
update64_int64_3
procedure, private ::
update64_int8_0
procedure, private ::
update64_int8_1
procedure, private ::
update64_int8_2
procedure, private ::
update64_int8_3
procedure, private ::
update64_logical_0
procedure, private ::
update64_logical_1
procedure, private ::
update64_logical_2
procedure, private ::
update64_logical_3
procedure, private ::
update64_rdp_0
procedure, private ::
update64_rdp_1
procedure, private ::
update64_rdp_2
procedure, private ::
update64_rdp_3
procedure, private ::
update64_rsp_0
procedure, private ::
update64_rsp_1
procedure, private ::
update64_rsp_2
procedure, private ::
update64_rsp_3
A streaming 32-bit FNV-1a accumulator over array state.
Read more…
Components
Type
Visibility Attributes
Name
Initial
integer(kind=int64),
private
::
nbytes
=
0_int64
Number of encoded bytes consumed so far. Fixed-width int64 so
that hashing more than 2 GiB of state cannot overflow the counter
in a default_int == int32 build.
integer(kind=int32),
private
::
state
=
ARRAY_HASH_OFFSET_BASIS
Running hash. Fixed-width int32, because FNV-1a is defined
modulo 2**32.
Type-Bound Procedures
procedure, public ::
bytes_hashed => array_hash_bytes_hashed
procedure, public ::
digest => array_hash_digest
procedure, public ::
reset => array_hash_reset
generic, public ::
update => update_int8_0 , update_int8_1 , update_int8_2 , update_int8_3 , update_int16_0 , update_int16_1 , update_int16_2 , update_int16_3 , update_int32_0 , update_int32_1 , update_int32_2 , update_int32_3 , update_int64_0 , update_int64_1 , update_int64_2 , update_int64_3 , update_rsp_0 , update_rsp_1 , update_rsp_2 , update_rsp_3 , update_rdp_0 , update_rdp_1 , update_rdp_2 , update_rdp_3 , update_csp_0 , update_csp_1 , update_csp_2 , update_csp_3 , update_cdp_0 , update_cdp_1 , update_cdp_2 , update_cdp_3 , update_logical_0 , update_logical_1 , update_logical_2 , update_logical_3 , update_char_0 , update_char_1
procedure, private ::
update_cdp_0
procedure, private ::
update_cdp_1
procedure, private ::
update_cdp_2
procedure, private ::
update_cdp_3
procedure, private ::
update_char_0
procedure, private ::
update_char_1
procedure, private ::
update_csp_0
procedure, private ::
update_csp_1
procedure, private ::
update_csp_2
procedure, private ::
update_csp_3
procedure, private ::
update_int16_0
procedure, private ::
update_int16_1
procedure, private ::
update_int16_2
procedure, private ::
update_int16_3
procedure, private ::
update_int32_0
procedure, private ::
update_int32_1
procedure, private ::
update_int32_2
procedure, private ::
update_int32_3
procedure, private ::
update_int64_0
procedure, private ::
update_int64_1
procedure, private ::
update_int64_2
procedure, private ::
update_int64_3
procedure, private ::
update_int8_0
procedure, private ::
update_int8_1
procedure, private ::
update_int8_2
procedure, private ::
update_int8_3
procedure, private ::
update_logical_0
procedure, private ::
update_logical_1
procedure, private ::
update_logical_2
procedure, private ::
update_logical_3
procedure, private ::
update_rdp_0
procedure, private ::
update_rdp_1
procedure, private ::
update_rdp_2
procedure, private ::
update_rdp_3
procedure, private ::
update_rsp_0
procedure, private ::
update_rsp_1
procedure, private ::
update_rsp_2
procedure, private ::
update_rsp_3
Functions
Format a digest as 16 lowercase hexadecimal characters.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
hash_value
Digest to format, typically from digest or array_hash64.
Return Value
character(len=16)
Format a digest as 8 lowercase hexadecimal characters.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
hash_value
Digest to format, typically from digest or array_hash.
Return Value
character(len=8)
Number of encoded bytes consumed so far.
Read more…
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(in)
::
this
Return Value
integer(kind=int64)
The digest of everything fed in so far.
Read more…
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(in)
::
this
Return Value
integer(kind=int64)
Number of encoded bytes consumed so far.
Read more…
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(in)
::
this
Return Value
integer(kind=int64)
The digest of everything fed in so far.
Read more…
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(in)
::
this
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
complex(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int16),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int8),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
real(kind=dp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:)
Return Value
integer(kind=int32)
Arguments
Type
Intent Optional Attributes
Name
real(kind=sp),
intent(in)
::
key (:,:,:)
Return Value
integer(kind=int32)
Subroutines
Return the accumulator to its initial state.
Read more…
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in),
optional
::
seed
Starting hash value; defaults to ARRAY_HASH64_OFFSET_BASIS.
Return the accumulator to its initial state.
Read more…
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in),
optional
::
seed
Starting hash value; defaults to ARRAY_HASH_OFFSET_BASIS.
Feed the nbytes low-order bytes of value, least significant first.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(inout)
::
state
integer(kind=int64),
intent(in)
::
value
Value to encode, already widened to int64 by the caller.
integer(kind=default_int),
intent(in)
::
nbytes
How many low-order bytes of value are significant, 1 to 8.
Feed the nbytes low-order bytes of value, least significant first.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(inout)
::
state
integer(kind=int64),
intent(in)
::
value
Value to encode, already widened to int64 by the caller.
integer(kind=default_int),
intent(in)
::
nbytes
How many low-order bytes of value are significant, 1 to 8.
Feed one byte: 1 for true, 0 for false.
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(inout)
::
state
logical,
intent(in)
::
value
Value to encode.
Feed one byte: 1 for true, 0 for false.
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(inout)
::
state
logical,
intent(in)
::
value
Value to encode.
Canonicalise and feed one real(dp) value. See feed_real_sp for the
ordering of the classification tests.
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(inout)
::
state
real(kind=dp),
intent(in)
::
value
Value to encode; may be any value including -0.0, NaN and +/-Inf.
Canonicalise and feed one real(dp) value. See feed_real_sp64 for the
ordering of the classification tests.
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(inout)
::
state
real(kind=dp),
intent(in)
::
value
Value to encode; may be any value including -0.0, NaN and +/-Inf.
Feed the fixed 14-byte canonical record of one real value.
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(inout)
::
state
integer(kind=int64),
intent(in)
::
class_code
One of the CLASS_* codes.
integer(kind=int64),
intent(in)
::
sign_code
1 for a negative finite value, 0 otherwise.
integer(kind=int64),
intent(in)
::
expo
Binary exponent; 0 unless the value is finite and non-zero.
integer(kind=int64),
intent(in)
::
mantissa
Scaled integer mantissa; 0 unless the value is finite and non-zero.
Feed the fixed 14-byte canonical record of one real value.
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(inout)
::
state
integer(kind=int64),
intent(in)
::
class_code
One of the CLASS_* codes.
integer(kind=int64),
intent(in)
::
sign_code
1 for a negative finite value, 0 otherwise.
integer(kind=int64),
intent(in)
::
expo
Binary exponent; 0 unless the value is finite and non-zero.
integer(kind=int64),
intent(in)
::
mantissa
Scaled integer mantissa; 0 unless the value is finite and non-zero.
Canonicalise and feed one real(sp) value.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(inout)
::
state
real(kind=sp),
intent(in)
::
value
Value to encode; may be any value including -0.0, NaN and +/-Inf.
Canonicalise and feed one real(sp) value.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(inout)
::
state
real(kind=sp),
intent(in)
::
value
Value to encode; may be any value including -0.0, NaN and +/-Inf.
One FNV-1a round: exclusive-or in a byte, then multiply by the prime.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int32),
intent(inout)
::
state
integer(kind=int64),
intent(in)
::
byte_value
A single byte, 0 to 255.
One FNV-1a round: exclusive-or in a byte, then multiply by the prime.
Read more…
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(inout)
::
state
integer(kind=int64),
intent(in)
::
byte_value
A single byte, 0 to 255.
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key (:,:,:)
Feed a character string, one iachar byte per character.
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
character(len=*),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
character(len=*),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
logical,
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
logical,
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
logical,
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
logical,
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash64_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=dp),
intent(in)
::
key (:,:,:)
Feed a character string, one iachar byte per character.
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
character(len=*),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
character(len=*),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
complex(kind=sp),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int16),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int32),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int64),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
integer(kind=int8),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
logical,
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
logical,
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
logical,
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
logical,
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=dp),
intent(in)
::
key (:,:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key (:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key (:,:)
Arguments
Type
Intent Optional Attributes
Name
class(array_hash_t ),
intent(inout)
::
this
real(kind=sp),
intent(in)
::
key (:,:,:)