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.