Skip to content

Commit 0fb2eec

Browse files
committed
Add level-3 BLAS triangular Sylvester equation solver
1 parent 2a39774 commit 0fb2eec

File tree

5 files changed

+1118
-4
lines changed

5 files changed

+1118
-4
lines changed

SRC/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ set(DLASRC
306306
dlaqr0.f dlaqr1.f dlaqr2.f dlaqr3.f dlaqr4.f dlaqr5.f
307307
dlaqtr.f dlar1v.f dlar2v.f iladlr.f iladlc.f
308308
dlarf.f dlarfb.f dlarfb_gett.f dlarfg.f dlarfgp.f dlarft.f dlarfx.f dlarfy.f
309-
dlargv.f dlarrv.f dlartv.f
309+
dlargv.f dlarmm.f dlarrv.f dlartv.f
310310
dlarz.f dlarzb.f dlarzt.f dlaswp.f dlasy2.f
311311
dlasyf.f dlasyf_rook.f dlasyf_rk.f dlasyf_aa.f
312312
dlatbs.f dlatdf.f dlatps.f dlatrd.f dlatrs.f dlatrz.f dlauu2.f
@@ -342,7 +342,7 @@ set(DLASRC
342342
dtgsja.f dtgsna.f dtgsy2.f dtgsyl.f dtpcon.f dtprfs.f dtptri.f
343343
dtptrs.f
344344
dtrcon.f dtrevc.f dtrevc3.f dtrexc.f dtrrfs.f dtrsen.f dtrsna.f dtrsyl.f
345-
dtrti2.f dtrtri.f dtrtrs.f dtzrzf.f dstemr.f
345+
dtrsyl3.f dtrti2.f dtrtri.f dtrtrs.f dtzrzf.f dstemr.f
346346
dsgesv.f dsposv.f dlag2s.f slag2d.f dlat2s.f
347347
dlansf.f dpftrf.f dpftri.f dpftrs.f dsfrk.f dtfsm.f dtftri.f dtfttp.f
348348
dtfttr.f dtpttf.f dtpttr.f dtrttf.f dtrttp.f

SRC/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ DLASRC = \
340340
dlaqr0.o dlaqr1.o dlaqr2.o dlaqr3.o dlaqr4.o dlaqr5.o \
341341
dlaqtr.o dlar1v.o dlar2v.o iladlr.o iladlc.o \
342342
dlarf.o dlarfb.o dlarfb_gett.o dlarfg.o dlarfgp.o dlarft.o dlarfx.o dlarfy.o \
343-
dlargv.o dlarrv.o dlartv.o \
343+
dlargv.o dlarmm.o dlarrv.o dlartv.o \
344344
dlarz.o dlarzb.o dlarzt.o dlaswp.o dlasy2.o \
345345
dlasyf.o dlasyf_rook.o dlasyf_rk.o \
346346
dlatbs.o dlatdf.o dlatps.o dlatrd.o dlatrs.o dlatrz.o dlauu2.o \
@@ -376,7 +376,7 @@ DLASRC = \
376376
dtgsja.o dtgsna.o dtgsy2.o dtgsyl.o dtpcon.o dtprfs.o dtptri.o \
377377
dtptrs.o \
378378
dtrcon.o dtrevc.o dtrevc3.o dtrexc.o dtrrfs.o dtrsen.o dtrsna.o dtrsyl.o \
379-
dtrti2.o dtrtri.o dtrtrs.o dtzrzf.o dstemr.o \
379+
dtrsyl3.o dtrti2.o dtrtri.o dtrtrs.o dtzrzf.o dstemr.o \
380380
dsgesv.o dsposv.o dlag2s.o slag2d.o dlat2s.o \
381381
dlansf.o dpftrf.o dpftri.o dpftrs.o dsfrk.o dtfsm.o dtftri.o dtfttp.o \
382382
dtfttr.o dtpttf.o dtpttr.o dtrttf.o dtrttp.o \

SRC/dlarmm.f

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
*> \brief \b DLARMM
2+
*
3+
* Definition:
4+
* ===========
5+
*
6+
* DOUBLE PRECISION FUNCTION DLARMM( ANORM, BNORM, CNORM )
7+
*
8+
* .. Scalar Arguments ..
9+
* DOUBLE PRECISION ANORM, BNORM, CNORM
10+
* ..
11+
*
12+
*> \par Purpose:
13+
* =======
14+
*>
15+
*> \verbatim
16+
*>
17+
*> DLARMM returns a factor s in (0, 1] such that the linear updates
18+
*>
19+
*> (s * C) - A * (s * B) and (s * C) - (s * A) * B
20+
*>
21+
*> cannot overflow, where A, B, and C are matrices of conforming
22+
*> dimensions.
23+
*>
24+
*> This is an auxiliary routine so there is no argument checking.
25+
*> \endverbatim
26+
*
27+
* Arguments:
28+
* =========
29+
*
30+
*> \param[in] ANORM
31+
*> \verbatim
32+
*> ANORM is DOUBLE PRECISION
33+
*> The infinity norm of A. ANORM >= 0.
34+
*> The number of rows of the matrix A. M >= 0.
35+
*> \endverbatim
36+
*>
37+
*> \param[in] BNORM
38+
*> \verbatim
39+
*> BNORM is DOUBLE PRECISION
40+
*> The infinity norm of B. BNORM >= 0.
41+
*> \endverbatim
42+
*>
43+
*> \param[in] CNORM
44+
*> \verbatim
45+
*> CNORM is DOUBLE PRECISION
46+
*> The infinity norm of C. CNORM >= 0.
47+
*> \endverbatim
48+
*>
49+
*>
50+
* =====================================================================
51+
*> Contributor:
52+
*> Angelika Schwarz, Umea University, Sweden
53+
*>
54+
* =====================================================================
55+
*> References:
56+
*> C. C. Kjelgaard Mikkelsen and L. Karlsson, Blocked Algorithms for
57+
*> Robust Solution of Triangular Linear Systems. In: International
58+
*> Conference on Parallel Processing and Applied Mathematics, pages
59+
*> 68--78. Springer, 2017.
60+
*>
61+
*> \ingroup OTHERauxiliary
62+
* =====================================================================
63+
64+
DOUBLE PRECISION FUNCTION DLARMM( ANORM, BNORM, CNORM )
65+
IMPLICIT NONE
66+
* .. Scalar Arguments ..
67+
DOUBLE PRECISION ANORM, BNORM, CNORM
68+
* .. Parameters ..
69+
DOUBLE PRECISION ONE, HALF
70+
PARAMETER ( ONE = 1.0D0, HALF = 0.5D+0 )
71+
* ..
72+
* .. Local Scalars ..
73+
DOUBLE PRECISION bignum, smlnum
74+
* ..
75+
* .. External Functions ..
76+
DOUBLE PRECISION dlamch
77+
EXTERNAL dlamch
78+
* ..
79+
* .. Executable Statements ..
80+
*
81+
*
82+
* Determine machine dependent parameters to control overflow.
83+
*
84+
SMLNUM = DLAMCH( 'Safe minimum' ) / DLAMCH( 'Precision' )
85+
BIGNUM = ONE / SMLNUM
86+
*
87+
* Compute a scale factor.
88+
*
89+
DLARMM = ONE
90+
IF( BNORM .LE. ONE ) THEN
91+
IF( ANORM * BNORM .GT. BIGNUM - CNORM ) THEN
92+
DLARMM = HALF
93+
END IF
94+
ELSE
95+
IF( ANORM .GT. (BIGNUM - CNORM) / BNORM ) THEN
96+
DLARMM = HALF / BNORM
97+
END IF
98+
END IF
99+
RETURN
100+
*
101+
* ==== End of DLARMM ====
102+
*
103+
END

0 commit comments

Comments
 (0)