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: :math:`\mathit{ADRESS}`, :math:`\mathit{GLOBAL}`, :math:`\mathit{SUPND}`, :math:`\mathit{LGSN}`, :math:`\mathit{ANC}`, :math:`\mathit{NOUV}`, :math:`\mathit{SEQ}`, :math:`\mathit{LGBLOC}`, :math:`\mathit{NCBLOC}`, :math:`\mathit{DECAL}`. And the factored matrix from MULFR8 :math:`\mathit{FACTOL}`:. VALF (and :math:`\mathit{FACTOU}`:. WALF in non-symmetric) The second members: :math:`\mathit{XSOL}(\mathrm{1 }\mathrm{:}\mathrm{\ne },\mathrm{1 }\mathrm{:}\mathit{NBSOL})` **Results**: They are found in the table that contained the second members: :math:`\mathit{XSOL}`. 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 :math:`\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! ) 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 :math:`\mathit{NB}`. We thus aim at the performance provided by these level 3 Blas, as in numerical factorization. The routines called are: +-----------------------------------------------------------------------------------------------------------------------------+ | | + .. image:: images/10000000000000F2000000EF626AF42A426F7D59.png + | :width: 2.1453in | + :height: 2.3327in + | | + + | | +-----------------------------------------------------------------------------------------------------------------------------+ **Figure 5 Descent-ascent by blocks**