QR_MUMPS
 All Classes Files Functions Variables Enumerations Enumerator Pages
List of all members | Public Member Functions | Public Attributes
_qrm_rfpf_mod Module Reference

This module contains an implementation of some operations on triangular/trapezoidal matrices stored in Rectangular Full Packed Format. More...

Public Member Functions

subroutine _qrm_to_rfpf (uplo, unit, n, a, lda, b)
 
subroutine _xrpmv (uplo, trans, diag, n, a, x)
 
subroutine _xrpsv (uplo, trans, diag, n, a, x)
 
subroutine _xrprft (direct, storev, m, k, v1, v2, ldv2, tau, t, ldt)
 
subroutine _xrprfb (side, trans, direct, storev, m, n, k, v1, v2, ldv2, t, ldt, c, ldc, work, ldwork)
 
subroutine _xrpmm (side, uplo, trans, diag, m, n, alpha, a, x, ldx)
 
subroutine _xrpsm (side, uplo, trans, diag, m, n, alpha, a, x, ldx)
 
subroutine _qrm_print_rfpf (uplo, n, b)
 

Public Attributes

character, parameter tran ='t'
 
character, parameter notran ='n'
 

Detailed Description

This module contains an implementation of some operations on triangular/trapezoidal matrices stored in Rectangular Full Packed Format.

For more details on this format please refer to:

Fred G. Gustavson, Jerzy Wasniewski, and Jack J. Dongarra. "Rectangular Full Packed Format for Cholesky’s Algorithm: Factorization, Solution and Inversion." LAPACK Working Note 199, April 2008.

According to this format, a triangular matrix can be stored in a 2D array like described below.

The RFPF format is obtained by "cutting" the upper-leftmost corner of a triangular matrix, transposing it and the appending it on the right or at the bottom for lower or upper triangular matrices, respectively.

A lower triangular matrix with odd dimension:

 01
 02 03             
 04 05 06           is stored like    04 05 06 01 02
 07 08 09 10                          07 08 09 10 03
 11 12 13 14 15                       11 12 13 14 15

A lower triangular matrix with even dimension:

 01
 02 03
 04 05 06
 07 08 09 10        is stored like    07 08 09 10 01 02 04
 11 12 13 14 15                       11 12 13 14 15 03 05
 16 17 18 19 20 21                    16 17 18 19 20 21 06

An upper triangular matrix with odd dimension

 01 02 03 04 05                       03 04 05
    06 07 08 09                       07 08 09
       10 11 12     is stored like    10 11 12
          13 14                       01 13 14
             15                       02 06 15

An upper triangular matrix with even dimension

 01 02 03 04 05 06                    04 05 06
    07 08 09 10 11                    09 10 11
       12 13 14 15                    13 14 15
          16 17 18  is stored like    16 17 18
             19 20                    01 19 20
                21                    02 07 21

03 08 12

In general a matrix in RFPF can be split into three components (e.g., in the last even, upper triangular case):

         04 05 06
         09 10 11
         13 14 15

           16 17 18
     01       19 20
     02 07       21
     03 08 12

and thus an operation like a TRMM (triangular matrix times a dense matrix) can be translated into three sub-operations: TRMM, GEMM and TRMM.

A general, trapezoidal matrix can be split into a rectangular block, stored in conventional column-major format and a triangular one stored in RFPF.

Routines in this module will have an old-style f77 interface a la LAPACK. This is risky because the fortran standard doesn't say a word about storing arrays/allocatables in contiguous memory areas although compilers always do it. However, in such a case all the BLAS and LAPACK routines won't work so we're ruined anyway.

Definition at line 121 of file qrm_rfpf_mod.F90.

Member Function/Subroutine Documentation

subroutine _qrm_rfpf_mod::_qrm_print_rfpf ( character  uplo,
integer  n,
  b 
)

Definition at line 733 of file qrm_rfpf_mod.F90.

References i.

subroutine _qrm_rfpf_mod::_qrm_to_rfpf ( character  uplo,
character  unit,
integer  n,
  a,
integer  lda,
  b 
)

Definition at line 134 of file qrm_rfpf_mod.F90.

References i.

subroutine _qrm_rfpf_mod::_xrpmm ( character  side,
character  uplo,
character  trans,
character  diag,
integer  m,
integer  n,
  alpha,
  a,
  x,
integer  ldx 
)

Definition at line 507 of file qrm_rfpf_mod.F90.

Referenced by _xrprfb().

subroutine _qrm_rfpf_mod::_xrpmv ( character  uplo,
character  trans,
character  diag,
integer  n,
  a,
  x 
)

Definition at line 208 of file qrm_rfpf_mod.F90.

subroutine _qrm_rfpf_mod::_xrprfb ( character  side,
character  trans,
character  direct,
character  storev,
integer  m,
integer  n,
integer  k,
  v1,
  v2,
integer  ldv2,
  t,
integer  ldt,
  c,
integer  ldc,
  work,
integer  ldwork 
)

Definition at line 421 of file qrm_rfpf_mod.F90.

References _xrpmm(), and i.

subroutine _qrm_rfpf_mod::_xrprft ( character  direct,
character  storev,
integer  m,
integer  k,
  v1,
  v2,
integer  ldv2,
  tau,
  t,
integer  ldt 
)

Definition at line 330 of file qrm_rfpf_mod.F90.

References i.

subroutine _qrm_rfpf_mod::_xrpsm ( character  side,
character  uplo,
character  trans,
character  diag,
integer  m,
integer  n,
  alpha,
  a,
  x,
integer  ldx 
)

Definition at line 621 of file qrm_rfpf_mod.F90.

subroutine _qrm_rfpf_mod::_xrpsv ( character  uplo,
character  trans,
character  diag,
integer  n,
  a,
  x 
)

Definition at line 268 of file qrm_rfpf_mod.F90.

Member Data Documentation

character parameter _qrm_rfpf_mod::notran ='n'

Definition at line 126 of file qrm_rfpf_mod.F90.

character parameter _qrm_rfpf_mod::tran ='t'

Definition at line 126 of file qrm_rfpf_mod.F90.


The documentation for this module was generated from the following file: