The BABDCR package is composed of four subroutines:
- BABDCR_FACT to factorize a BABD matrix
- BABDCR_SOLV to solve a linear system whose coefficient matrix
has been factorized by BABDCR_FACT
- BABDCR_SOLVT to solve a linear system with the transposed of
the coefficient matrix which has been factorized
by BABDCR_FACT
- BABDCR_FACTSOLV to factorize and solve a BABD linear system
To include the first two subroutines in a software, insert the
following instruction just below the first line of the calling
program:
USE BABDCR
Here, we list the parameters used in the calling sequences of
these subroutines. Note that, unless otherwise stated, the
parameters do not change on exit.
For an overview of the algorithm, please refer to the authors
and to the paper
P. Amodio, G. Romanazzi, BABDCR: a Fortran 90 package for
the solution of Bordered ABD linear systems
The subroutine BABDCR_FACT has the following calling sequence:
CALL BABDCR_FACT( NRWBLK, NBLOKS, MATR_A, LFTBLK, RGTBLK, &
PERM, FILL_IN, INFO )
where the parameters are defined as follows:
[NRWBLK] :: integer, number of rows of each block V_i, see
Figure 1 of the paper.
[NBLOKS] :: integer, number of blocks V_i.
[MATR_A] :: double precision, NRWBLK by NRWBLK by 2*NBLOKS array.
In input, it contains the blocks V_i which are stored
as in Figure 3 of the paper. On exit, it contains part of the
factorization of the matrix A, see Figures 7 and 8.
[LFTBLK] :: double precision, NRWBLK by NRWBLK array.
In input, it contains the block B_a of the coefficient matrix,
see Figure 1 of the paper. On exit, it contains part of the
factorization of the matrix A, see Figures 7 and 8.
[RGTBLK] :: double precision, NRWBLK by NRWBLK array.
In input, it contains the block B_b of the coefficient matrix,
see Figure 1 of the paper. On exit, it contains part of the
factorization of the matrix A, see Figures 7 and 8.
[PERM] :: integer, 2*NRWBLK by NBLOKS array. On exit, each column
contains the permutation vector associated with the LU
factorization performed by each call to REDUCE_BLOCK. The last
column is associated with the permutation performed by the
factorization of the last 2 by 2 block matrix.
[FILL_IN] :: double precision, NRWBLK by NRWBLK by NBLOKS-1 array.
On exit, it contains the fill-in blocks generated by the
factorization (by each call to REDUCE_BLOCK).
[INFO] :: integer. On exit, this parameter is equal to 0 if the
coefficient matrix is nonsingular, or gives the index of the block
where breakdown has occurred if A is singular. Note that, if
k (>=0) and j (=2,4,6,...,(NBLOKS / 2^k)) are such that INFO
= 1+(j-1)*2^k, then breakdown has occurred in the j-th block
column of the coefficient matrix of the linear system obtained
after k steps of reduction.
The subroutine BABDCR_SOLV has the following calling sequence:
CALL BABDCR_SOLV( NRWBLK, NBLOKS, MATR_A, LFTBLK, RGTBLK, &
PERM, FILL_IN, VECT_B )
where the first seven parameters are defined in the subroutine
BABDCR_FACT (and eventually contain the output of that
subroutine). The last parameter is
[VECT_B] :: double precision, NRWBLK by NBLOKS+1 array. On input,
it contains the right hand side f of system Ax=f. On
exit, it contains the solution of the system.
The subroutine BABDCR_SOLVT has the following calling sequence:
CALL BABDCR_SOLVT( NRWBLK, NBLOKS, MATR_A, LFTBLK, RGTBLK, &
PERM, FILL_IN, VECT_B )
The parameters have the same meaning of these in BABDCR_SOLV.
The subroutine BABDCR_FACTSOLV has the following calling sequence:
CALL BABDCR_FACTSOLV( NRWBLK, NBLOKS, MATR_A, LFTBLK, RGTBLK, &
VECT_B, INFO )
where the parameters are defined as follows:
[NRWBLK] :: integer, number of rows of each block V_i, see
Figure 1 of the paper.
[NBLOKS] :: integer, number of blocks V_i.
[MATR_A] :: double precision, NRWBLK by NRWBLK by 2*NBLOKS array.
In input, it contains the blocks V_i which are stored
as in Figure 3 of the paper. On exit, it contains part of the
factorization of the matrix A.
[LFTBLK] :: double precision, NRWBLK by NRWBLK array.
In input, it contains the block B_a of the coefficient matrix,
see Figure 1 of the paper. On exit, it contains part of the
factorization of the matrix A.
[RGTBLK] :: double precision, NRWBLK by NRWBLK array.
In input, it contains the block B_b of the coefficient matrix,
see Figure 1 of the paper. On exit, it contains part of the
factorization of the matrix A.
[VECT_B] :: double precision, vector of length NRWBLK*(NBLOKS+1).
In input, it contains the right hand side f of system
Ax=f. On exit, it contains the solution of the system.
[INFO] :: integer. On exit, this parameter is equal to 0 if the
coefficient matrix is nonsingular, or gives the index of the block
where breakdown has occurred if A is singular. Note that, if
k (>=0) and j (=2,4,6,...,(NBLOKS / 2^k)) are such that INFO
= 1+(j-1)*2^k, then breakdown has occurred in the j-th block
column of the coefficient matrix of the linear system obtained
after k steps of reduction.
The output in MATR_A, LFTBLK and RGTBLK is not sufficient to
solve additional linear systems out of the subroutine.