4. System upgrade: RLTFR8#

If the number of second members to be solved simultaneously is greater than 4, a block method implemented by routine RLBFR8 is used, otherwise MLTDRA is called for each second member.

Data: these are the pointers from MLTPRE:

\(\mathit{ADRESS}\),

\(\mathit{GLOBAL}\),

\(\mathit{SUPND}\),

\(\mathit{LGSN}\),

\(\mathit{ANC}\),

\(\mathit{NOUV}\),

\(\mathit{SEQ}\),

\(\mathit{LGBLOC}\),

\(\mathit{NCBLOC}\),

\(\mathit{DECAL}\).

And the factored matrix from MULFR8

\(\mathit{FACTOL}\):. VALF (and \(\mathit{FACTOU}\):. WALF in non-symmetric)

The second members:

\(\mathit{XSOL}(\mathrm{1 }\mathrm{:}\mathrm{\ne },\mathrm{1 }\mathrm{:}\mathit{NBSOL})\)

Results: They are found in the table that contained the second members: \(\mathit{XSOL}\).

4.1. MLTDRA#

This routine performs, for a single second member, the descent, the division by the term diagonal, and the ascent successively. In the descent, we use the matrix-vector product \(\mathit{DGEMV}\) from Blas libraries, beyond a certain threshold. Below we optimize « by hand » in routine SSPMVB.

(This optimization is a vectorization written for CRAY, so it could be reviewed or even removed! )

4.2. RLBFR8#

In the presence of several second members, the calls to DGEMV mentioned in the preceding paragraph are replaced by calls to DGEMM, matrix*matrix product, on matrix blocks of order \(\mathit{NB}\). We thus aim at the performance provided by these level 3 Blas, as in numerical factorization.

The routines called are:

_images/10000000000000F2000000EF626AF42A426F7D59.png

Figure 5 Descent-ascent by blocks