Skip to content

Commit 6b92a7a

Browse files
authored
Merge pull request #1048 from grisuthedragon/implement-axpby
2 parents b4cf815 + 7f5bcbb commit 6b92a7a

29 files changed

+1155
-62
lines changed

BLAS/SRC/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,18 @@
2929
# Level 1 BLAS
3030
#---------------------------------------------------------
3131

32-
set(SBLAS1 isamax.f sasum.f saxpy.f scopy.f sdot.f snrm2.f90
32+
set(SBLAS1 isamax.f sasum.f saxpy.f saxpby.f scopy.f sdot.f snrm2.f90
3333
srot.f srotg.f90 sscal.f sswap.f sdsdot.f srotmg.f srotm.f)
3434

35-
set(CBLAS1 scabs1.f scasum.f scnrm2.f90 icamax.f90 caxpy.f ccopy.f
35+
set(CBLAS1 scabs1.f scasum.f scnrm2.f90 icamax.f90 caxpy.f caxpby.f ccopy.f
3636
cdotc.f cdotu.f csscal.f crotg.f90 cscal.f cswap.f csrot.f)
3737

38-
set(DBLAS1 idamax.f dasum.f daxpy.f dcopy.f ddot.f dnrm2.f90
38+
set(DBLAS1 idamax.f dasum.f daxpy.f daxpby.f dcopy.f ddot.f dnrm2.f90
3939
drot.f drotg.f90 dscal.f dsdot.f dswap.f drotmg.f drotm.f)
4040

4141
set(DB1AUX sscal.f isamax.f)
4242

43-
set(ZBLAS1 dcabs1.f dzasum.f dznrm2.f90 izamax.f90 zaxpy.f zcopy.f
43+
set(ZBLAS1 dcabs1.f dzasum.f dznrm2.f90 izamax.f90 zaxpy.f zaxpby.f zcopy.f
4444
zdotc.f zdotu.f zdscal.f zrotg.f90 zscal.f zswap.f zdrot.f)
4545

4646
set(CB1AUX

BLAS/SRC/Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,19 @@ all: $(BLASLIB)
6969
# Comment out the next 6 definitions if you already have
7070
# the Level 1 BLAS.
7171
#---------------------------------------------------------
72-
SBLAS1 = isamax.o sasum.o saxpy.o scopy.o sdot.o snrm2.o \
72+
SBLAS1 = isamax.o sasum.o saxpy.o saxpby.o scopy.o sdot.o snrm2.o \
7373
srot.o srotg.o sscal.o sswap.o sdsdot.o srotmg.o srotm.o
7474
$(SBLAS1): $(FRC)
7575

76-
CBLAS1 = scabs1.o scasum.o scnrm2.o icamax.o caxpy.o ccopy.o \
76+
CBLAS1 = scabs1.o scasum.o scnrm2.o icamax.o caxpy.o caxpby.o ccopy.o \
7777
cdotc.o cdotu.o csscal.o crotg.o cscal.o cswap.o csrot.o
7878
$(CBLAS1): $(FRC)
7979

80-
DBLAS1 = idamax.o dasum.o daxpy.o dcopy.o ddot.o dnrm2.o \
80+
DBLAS1 = idamax.o dasum.o daxpy.o daxpby.o dcopy.o ddot.o dnrm2.o \
8181
drot.o drotg.o dscal.o dsdot.o dswap.o drotmg.o drotm.o
8282
$(DBLAS1): $(FRC)
8383

84-
ZBLAS1 = dcabs1.o dzasum.o dznrm2.o izamax.o zaxpy.o zcopy.o \
84+
ZBLAS1 = dcabs1.o dzasum.o dznrm2.o izamax.o zaxpy.o zaxpby.o zcopy.o \
8585
zdotc.o zdotu.o zdscal.o zrotg.o zscal.o zswap.o zdrot.o
8686
$(ZBLAS1): $(FRC)
8787

BLAS/SRC/caxpby.f

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
*> \brief \b CAXPBY
2+
*
3+
* =========== DOCUMENTATION ===========
4+
*
5+
* Online html documentation available at
6+
* http://www.netlib.org/lapack/explore-html/
7+
*
8+
* Definition:
9+
* ===========
10+
*
11+
* SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
12+
*
13+
* .. Scalar Arguments ..
14+
* COMPLEX CA,CB
15+
* INTEGER INCX,INCY,N
16+
* ..
17+
* .. Array Arguments ..
18+
* COMPLEX CX(*),CY(*)
19+
* ..
20+
*
21+
*
22+
*> \par Purpose:
23+
* =============
24+
*>
25+
*> \verbatim
26+
*>
27+
*> CAXPBY constant times a vector plus constant times a vector.
28+
*>
29+
*> Y = ALPHA * X + BETA * Y
30+
*>
31+
*> \endverbatim
32+
*
33+
* Arguments:
34+
* ==========
35+
*
36+
*> \param[in] N
37+
*> \verbatim
38+
*> N is INTEGER
39+
*> number of elements in input vector(s)
40+
*> \endverbatim
41+
*>
42+
*> \param[in] CA
43+
*> \verbatim
44+
*> CA is COMPLEX
45+
*> On entry, CA specifies the scalar alpha.
46+
*> \endverbatim
47+
*>
48+
*> \param[in] CX
49+
*> \verbatim
50+
*> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
51+
*> \endverbatim
52+
*>
53+
*> \param[in] INCX
54+
*> \verbatim
55+
*> INCX is INTEGER
56+
*> storage spacing between elements of CX
57+
*> \endverbatim
58+
*>
59+
*> \param[in] CB
60+
*> \verbatim
61+
*> CB is COMPLEX
62+
*> On entry, CB specifies the scalar beta.
63+
*> \endverbatim
64+
*>
65+
*> \param[in,out] CY
66+
*> \verbatim
67+
*> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
68+
*> \endverbatim
69+
*>
70+
*> \param[in] INCY
71+
*> \verbatim
72+
*> INCY is INTEGER
73+
*> storage spacing between elements of CY
74+
*> \endverbatim
75+
*
76+
* Authors:
77+
* ========
78+
*
79+
*> \author Univ. of Tennessee
80+
*> \author Univ. of California Berkeley
81+
*> \author Univ. of Colorado Denver
82+
*> \author NAG Ltd.
83+
*> \author Martin Koehler, MPI Magdeburg
84+
*
85+
*> \ingroup axpby
86+
*
87+
* =====================================================================
88+
SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
89+
IMPLICIT NONE
90+
*
91+
* -- Reference BLAS level1 routine --
92+
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
93+
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
94+
*
95+
* .. Scalar Arguments ..
96+
COMPLEX CA, CB
97+
INTEGER INCX,INCY,N
98+
* ..
99+
* .. Array Arguments ..
100+
COMPLEX CX(*),CY(*)
101+
* ..
102+
* .. External Subroutines ..
103+
EXTERNAL CSCAL
104+
*
105+
* =====================================================================
106+
*
107+
* .. Local Scalars ..
108+
INTEGER I,IX,IY
109+
* ..
110+
IF (N.LE.0) RETURN
111+
112+
IF (CA .EQ. (0.0,0.0) .AND. CB.NE.(0.0,0.0)) THEN
113+
CALL CSCAL(N,CB, CY, INCY)
114+
RETURN
115+
END IF
116+
117+
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
118+
*
119+
* code for both increments equal to 1
120+
*
121+
DO I = 1,N
122+
CY(I) = CB*CY(I) + CA*CX(I)
123+
END DO
124+
ELSE
125+
*
126+
* code for unequal increments or equal increments
127+
* not equal to 1
128+
*
129+
IX = 1
130+
IY = 1
131+
IF (INCX.LT.0) IX = (-N+1)*INCX + 1
132+
IF (INCY.LT.0) IY = (-N+1)*INCY + 1
133+
DO I = 1,N
134+
CY(IY) = CB*CY(IY) + CA*CX(IX)
135+
IX = IX + INCX
136+
IY = IY + INCY
137+
END DO
138+
END IF
139+
*
140+
RETURN
141+
*
142+
* End of CAXBPY
143+
*
144+
END

BLAS/SRC/daxpby.f

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
*> \brief \b DAXPBY
2+
*
3+
* =========== DOCUMENTATION ===========
4+
*
5+
* Online html documentation available at
6+
* http://www.netlib.org/lapack/explore-html/
7+
*
8+
* Definition:
9+
* ===========
10+
*
11+
* SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
12+
*
13+
* .. Scalar Arguments ..
14+
* DOUBLE PRECISION DA,DB
15+
* INTEGER INCX,INCY,N
16+
* ..
17+
* .. Array Arguments ..
18+
* DOUBLE PRECISION DX(*),DY(*)
19+
* ..
20+
*
21+
*
22+
*> \par Purpose:
23+
* =============
24+
*>
25+
*> \verbatim
26+
*>
27+
*> DAXPBY constant times a vector plus constant times a vector.
28+
*>
29+
*> Y = ALPHA * X + BETA * Y
30+
*>
31+
*> \endverbatim
32+
*
33+
* Arguments:
34+
* ==========
35+
*
36+
*> \param[in] N
37+
*> \verbatim
38+
*> N is INTEGER
39+
*> number of elements in input vector(s)
40+
*> \endverbatim
41+
*>
42+
*> \param[in] DA
43+
*> \verbatim
44+
*> DA is DOUBLE PRECISION
45+
*> On entry, DA specifies the scalar alpha.
46+
*> \endverbatim
47+
*>
48+
*> \param[in] DX
49+
*> \verbatim
50+
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
51+
*> \endverbatim
52+
*>
53+
*> \param[in] INCX
54+
*> \verbatim
55+
*> INCX is INTEGER
56+
*> storage spacing between elements of DX
57+
*> \endverbatim
58+
*>
59+
*> \param[in] DB
60+
*> \verbatim
61+
*> DB is DOUBLE PRECISION
62+
*> On entry, DB specifies the scalar beta.
63+
*> \endverbatim
64+
*>
65+
*> \param[in,out] DY
66+
*> \verbatim
67+
*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
68+
*> \endverbatim
69+
*>
70+
*> \param[in] INCY
71+
*> \verbatim
72+
*> INCY is INTEGER
73+
*> storage spacing between elements of DY
74+
*> \endverbatim
75+
*
76+
* Authors:
77+
* ========
78+
*
79+
*> \author Univ. of Tennessee
80+
*> \author Univ. of California Berkeley
81+
*> \author Univ. of Colorado Denver
82+
*> \author NAG Ltd.
83+
*> \author Martin Koehler, MPI Magdeburg
84+
*
85+
*> \ingroup axpby
86+
*
87+
* =====================================================================
88+
SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
89+
IMPLICIT NONE
90+
*
91+
* -- Reference BLAS level1 routine --
92+
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
93+
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
94+
*
95+
* .. Scalar Arguments ..
96+
DOUBLE PRECISION DA,DB
97+
INTEGER INCX,INCY,N
98+
* ..
99+
* .. Array Arguments ..
100+
DOUBLE PRECISION DX(*),DY(*)
101+
* ..
102+
* .. External Subroutines
103+
EXTERNAL DSCAL
104+
*
105+
* =====================================================================
106+
*
107+
* .. Local Scalars ..
108+
INTEGER I,IX,IY,M,MP1
109+
* ..
110+
* .. Intrinsic Functions ..
111+
INTRINSIC MOD
112+
* ..
113+
IF (N.LE.0) RETURN
114+
115+
* Scale if DA.EQ.0
116+
IF (DA.EQ.0.0D0 .AND. DB.NE.0.0D0) THEN
117+
CALL DSCAL(N, DB, DY, INCY)
118+
RETURN
119+
END IF
120+
121+
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
122+
*
123+
* code for both increments equal to 1
124+
*
125+
*
126+
*
127+
DO I = 1,N
128+
DY(I) = DB*DY(I) + DA*DX(I)
129+
END DO
130+
ELSE
131+
*
132+
* code for unequal increments or equal increments
133+
* not equal to 1
134+
*
135+
IX = 1
136+
IY = 1
137+
IF (INCX.LT.0) IX = (-N+1)*INCX + 1
138+
IF (INCY.LT.0) IY = (-N+1)*INCY + 1
139+
DO I = 1,N
140+
DY(IY) = DB*DY(IY) + DA*DX(IX)
141+
IX = IX + INCX
142+
IY = IY + INCY
143+
END DO
144+
END IF
145+
RETURN
146+
*
147+
* End of DAXPBY
148+
*
149+
END

0 commit comments

Comments
 (0)