Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?tprfb
Applies a real or complex “triangular-pentagonal” blocked reflector to a real or complex matrix, which is composed of two blocks.
Syntax
call stprfb ( side , trans , direct , storev , m , n , k , l , v , ldv , t , ldt , a , lda , b , ldb , work , ldwork )
call dtprfb ( side , trans , direct , storev , m , n , k , l , v , ldv , t , ldt , a , lda , b , ldb , work , ldwork )
call ctprfb ( side , trans , direct , storev , m , n , k , l , v , ldv , t , ldt , a , lda , b , ldb , work , ldwork )
call ztprfb ( side , trans , direct , storev , m , n , k , l , v , ldv , t , ldt , a , lda , b , ldb , work , ldwork )
call tprfb ( t , v , a , b [ , direct ] [ , storev ] [ , side ] [ , trans ] )
Include Files
mkl.fi , mkl_lapack.f90
Description
stprfb dtprfb ctprfb ztprfb tprfb
The ?tprfb routine applies a real or complex “triangular-pentagonal” block reflector H , HT , or HH from either the left or the right to a real or complex matrix C , which is composed of two blocks A and B .
The block B is m -by- n . If side = ‘R’, A is m -by- k , and if side = ‘L’, A is of size k -by- n .
The pentagonal matrix V is composed of a rectangular block V1 and a trapezoidal block V2 . The size of the trapezoidal block is determined by the parameter l , where 0≤ l ≤ k . if l = k , the V2 block of V is triangular; if l =0, there is no trapezoidal block, thus V = V1 is rectangular.
direct =’F’ |
direct =’B’ |
|
storev =’C’ |
![]() V2 is upper trapezoidal (first l rows of k -by- k upper triangular) |
![]() V2 is lower trapezoidal (last l rows of k -by- k lower triangular matrix) |
storev =’R’ |
![]() V2 is lower trapezoidal (first l columns of k -by- k lower triangular matrix) |
![]() V2 is upper trapezoidal (last l columns of k -by- k upper triangular matrix) |
side =’L’ |
side =’R’ |
|
storev =’C’ |
V is m -by- kV2 is l -by- k |
V is n -by- kV2 is l -by- k |
storev =’R’ |
V is k -by- mV2 is k -by- l |
V is k -by- nV2 is k -by- l |
Input Parameters
- side
-
CHARACTER*1 . * = ‘L’: apply H , HT , or HH from the left, * = ‘R’: apply H , HT , or HH from the right.
- trans
-
CHARACTER*1 . * = ‘N’: apply H (no transpose), * = ‘T’: apply HT (transpose), * = ‘C’: apply HH (conjugate transpose).
- direct
-
CHARACTER*1 . Indicates how H is formed from a product of elementary reflectors: * = ‘F’: H = H (1) H (2) … H ( k ) (Forward), * = ‘B’: H = H ( k ) … H (2) H (1) (Backward).
- storev
-
CHARACTER*1. Indicates how the vectors that define the elementary reflectors are stored: * = ‘C’: Columns, * = ‘R’: Rows.
m
INTEGER . The total number of rows in the matrix B ( m ≥ 0).
n
INTEGER . The number of columns in B ( n ≥ 0).
k
INTEGER . The order of the matrix T , which is the number of elementary reflectors whose product defines the block reflector. ( k ≥ 0)
l
INTEGER . The order of the trapezoidal part of V . ( k ≥ l ≥ 0).
- v
-
REAL for stprfb DOUBLE PRECISION for dtprfb COMPLEX for ctprfb COMPLEX*16 for ztprfb .
DIMENSION ( ldv , k ) if storev = ‘C’,
DIMENSION ( ldv , m ) if storev = ‘R’ and side = ‘L’,
DIMENSION ( ldv , n ) if storev = ‘R’ and side = ‘R’.
The pentagonal matrix V , which contains the elementary reflectors H (1), H (2), …, H ( k ).
- v
-
An array containing the pentagonal matrix V (the elementary reflectors H(1), H(2), …, H(k) . The size limitations depend on values of parameters storev and side as described in the following table
- ldv
-
INTEGER . The leading dimension of the array v . * If storev = ‘C’ and side = ‘L’, at least max(1, m ). * If storev = ‘C’ and side = ‘R’, at least max(1, n ). * If storev = ‘R’ , at least k .
- ldv
-
The leading dimension of the array v .It should satisfy the following conditions:
- t
-
REAL for stprfb DOUBLE PRECISION for dtprfb COMPLEX for ctprfb COMPLEX*16 for ztprfb .
Array size ( ldt , k ) . The triangular k -by- k matrix T in the representation of the block reflector.
- ldt
-
INTEGER . The leading dimension of the array t ( ldt ≥ k ).
- a
-
REAL for stprfb DOUBLE PRECISION for dtprfb COMPLEX for ctprfb COMPLEX*16 for ztprfb .
DIMENSION ( lda , n ) if side = ‘L’,
DIMENSION ( lda , k ) if side = ‘R’.
The k -by- n or m -by- k matrix A .
- lda
-
INTEGER . The leading dimension of the array a . * If side = ‘L’, at least max(1, k ). * If side = ‘R’, at least max(1, m ).
- a
-
size should satisfy the following conditions: * k if side = ‘R’. * k -by- n or m -by- k matrix A .
- lda
-
The leading dimension of the array a should satisfy the following conditions:
- b
-
REAL for stprfb DOUBLE PRECISION for dtprfb COMPLEX for ctprfb COMPLEX*16 for ztprfb .
Array size ( ldb , n ) , the m -by- n matrix B .
ldb
INTEGER . The leading dimension of the array b ( ldb ≥ max(1, m ) ).
- work
-
REAL for stprfb DOUBLE PRECISION for dtprfb COMPLEX for ctprfb COMPLEX*16 for ztprfb .
Workspace array: * DIMENSION ( ldwork , n ) if side = ‘L’, * DIMENSION ( ldwork , k ) if side = ‘R’.
- ldwork
-
INTEGER . The leading dimension of the array work . * If side = ‘L’, at least k . * If side = ‘R’, at least m .
Output Parameters
- a
-
Contains the corresponding block of H * C , HT * C , HH * C , C * H , C * HT , or C * HH .
- b
-
Contains the corresponding block of H * C , HT * C , HH * C , C * H , C * HT , or C * HH .
info
INTEGER.
If info = 0 , the execution is successful.
If info < 0 , the i -th parameter had an illegal value.
If info = -1011 , memory allocation error occurred.
Return Values
No return value, info is an Output Parameter.



