Intel® Fortran Compiler 17.0 Developer Guide and Reference
Transformational Intrinsic Function (Generic): Converts the bit pattern of the first argument according to the type and kind parameters of the second argument.
result = TRANSFER (source,mold[,size])
source |
(Input) Must be a scalar or array (of any data type). |
mold |
(Input) Must be a scalar or array (of any data type). It provides the type characteristics (not a value) for the result. |
size |
(Input; optional) Must be scalar and of type integer. It provides the number of elements for the output result. |
The result has the same type and type parameters as mold.
If mold is a scalar and size is omitted, the result is a scalar.
If mold is an array and size is omitted, the result is a rank-one array. Its size is the smallest that is possible to hold all of source.
If size is present, the result is a rank-one array of size size.
When the size of source is greater than zero, mold must not be an array with elements of size zero.
If the physical representation of the result is larger than source, the result contains source's bit pattern in its right-most bits; the left-most bits of the result are undefined.
If the physical representation of the result is smaller than source, the result contains the right-most bits of source's bit pattern.
TRANSFER (1082130432, 0.0) has the value 4.0 (on processors that represent the values 4.0 and 1082130432 as the string of binary digits 0100 0000 1000 0000 0000 0000 0000 0000).
TRANSFER ((/2.2, 3.3, 4.4/), ((0.0, 0.0))) results in a scalar whose value is (2.2, 3.3).
TRANSFER ((/2.2, 3.3, 4.4/), (/(0.0, 0.0)/)) results in a complex rank-one array of length 2. Its first element is (2.2,3.3) and its second element has a real part with the value 4.4 and an undefined imaginary part.
TRANSFER ((/2.2, 3.3, 4.4/), (/(0.0, 0.0)/), 1) results in a complex rank-one array having one element with the value (2.2, 3.3).
The following shows another example:
COMPLEX CVECTOR(2), CX(1)
! The next statement sets CVECTOR to
! [ 1.1 + 2.2i, 3.3 + 0.0i ]
CVECTOR = TRANSFER((/1.1, 2.2, 3.3, 0.0/), &
(/(0.0, 0.0)/))
! The next statement sets CX to [ 1.1 + 2.2i ]
CX = TRANSFER((/1.1, 2.2, 3.3/) , (/(0.0, 0.0)/), &
SIZE= 1)
WRITE(*,*) CVECTOR
WRITE(*,*) CX
END
The following example shows an error because the source size is greater than zero but mold is an array whose elements have zero size:
CHARACTER(0),PARAMETER :: nothing1(100) = ''
PRINT *,SIZE(TRANSFER(111014,nothing1)) ! error
...