137
137
138
138
139
139
140
+ #!************************************************************************
141
+ #!*** psyr2k/ pher2k
142
+ #!************************************************************************
143
+
144
+ #:def pblasfx_psyr2k_pher2k_template(SUFFIX, TYPE, KIND, FUNCTION, NAME)
145
+
146
+ !> Symmetric/ Hermitian rank-2k update.
147
+ !! \param aa Matrix to update with.
148
+ !! \param desca Descriptor of aa.
149
+ !! \param bb Matrix to update with.
150
+ !! \param descb Descriptor of bb.
151
+ !! \param cc Matrix to be updated.
152
+ !! \param desccc Descriptor of cc.
153
+ !! \param uplo " U" for for upper, " L" for lower triangle matrix (default: " L" ).
154
+ !! \param trans " N" for normal, " T" for transposed aa (default: " N" ).
155
+ !! \param alpha Prefactor.
156
+ subroutine pblasfx_ ${SUFFIX}$(aa, desca, bb, descb, cc, descc, uplo, trans, alpha, beta,&
157
+ & nn, kk, ia, ja, ib, jb, ic, jc)
158
+ ${TYPE}$(${KIND}$), intent (in ) :: aa(:,:)
159
+ integer , intent (in ) :: desca(DLEN_)
160
+ ${TYPE}$(${KIND}$), intent (in ) :: bb(:,:)
161
+ integer , intent (in ) :: descb(DLEN_)
162
+ ${TYPE}$(${KIND}$), intent (inout ) :: cc(:,:)
163
+ integer , intent (in ) :: descc(DLEN_)
164
+ character , intent (in ), optional :: uplo, trans
165
+ real (${KIND}$), intent (in ), optional :: alpha, beta
166
+ integer , intent (in ), optional :: nn, kk
167
+ integer , intent (in ), optional :: ia, ja, ib, jb, ic, jc
168
+
169
+ real (${KIND}$) :: alpha0, beta0
170
+ character :: uplo0, trans0
171
+ integer :: nn0, kk0, ia0, ja0, ib0, jb0, ic0, jc0
172
+
173
+ @:inoptflags(alpha0, alpha, real (1 , kind= ${KIND}$))
174
+ @:inoptflags(beta0, beta, real (0 , kind= ${KIND}$))
175
+ @:inoptflags(uplo0, uplo, " L" )
176
+ @:inoptflags(trans0, trans, " N" )
177
+ if (trans0 == " N" ) then
178
+ @:inoptflags(nn0, nn, desca(M_))
179
+ @:inoptflags(kk0, kk, desca(N_))
180
+ else
181
+ @:inoptflags(nn0, nn, desca(N_))
182
+ @:inoptflags(kk0, kk, desca(M_))
183
+ end if
184
+ @:inoptflags(ia0, ia, 1 )
185
+ @:inoptflags(ja0, ja, 1 )
186
+ @:inoptflags(ib0, ib, 1 )
187
+ @:inoptflags(jb0, jb, 1 )
188
+ @:inoptflags(ic0, ic, 1 )
189
+ @:inoptflags(jc0, jc, 1 )
190
+ call ${NAME}$(uplo0, trans0, nn0, kk0, alpha0, aa, ia0, ja0, desca, bb, ib0, jb0, descb, beta0,&
191
+ & cc, ic0, jc0, descc)
192
+
193
+ end subroutine pblasfx_ ${SUFFIX}$
194
+
195
+ #:enddef pblasfx_psyr2k_pher2k_template
196
+
197
+
198
+
199
+
140
200
#! ************************************************************************
141
201
#! *** psymm/ phemm
142
202
#! ************************************************************************
@@ -520,6 +580,7 @@ module pblasfx_module
520
580
521
581
public :: pblasfx_psyr, pblasfx_pher
522
582
public :: pblasfx_psyrk, pblasfx_pherk
583
+ public :: pblasfx_psyr2k, pblasfx_pher2k
523
584
public :: pblasfx_psymv, pblasfx_phemv
524
585
public :: pblasfx_psymm, pblasfx_phemm
525
586
public :: pblasfx_pgemm
@@ -543,6 +604,14 @@ module pblasfx_module
543
604
module procedure pblasfx_pherk_complex, pblasfx_pherk_dcomplex
544
605
end interface pblasfx_pherk
545
606
607
+ interface pblasfx_psyr2k
608
+ module procedure pblasfx_psyr2k_real, pblasfx_psyr2k_dreal
609
+ end interface pblasfx_psyr2k
610
+
611
+ interface pblasfx_pher2k
612
+ module procedure pblasfx_pher2k_complex, pblasfx_pher2k_dcomplex
613
+ end interface pblasfx_pher2k
614
+
546
615
interface pblasfx_psymv
547
616
module procedure pblasfx_psymv_real, pblasfx_psymv_dreal
548
617
end interface pblasfx_psymv
@@ -593,6 +662,11 @@ contains
593
662
@:pblasfx_psyrk_pherk_template(pherk_complex, complex , sp, cmplx, pherk)
594
663
@:pblasfx_psyrk_pherk_template(pherk_dcomplex, complex , dp, cmplx, pherk)
595
664
665
+ @:pblasfx_psyr2k_pher2k_template(psyr2k_real, real , sp, real , psyr2k)
666
+ @:pblasfx_psyr2k_pher2k_template(psyr2k_dreal, real , dp, real , psyr2k)
667
+ @:pblasfx_psyr2k_pher2k_template(pher2k_complex, complex , sp, cmplx, pher2k)
668
+ @:pblasfx_psyr2k_pher2k_template(pher2k_dcomplex, complex , dp, cmplx, pher2k)
669
+
596
670
@:pblasfx_psymv_phemv_template(psymv_real, real , sp, real , psymv)
597
671
@:pblasfx_psymv_phemv_template(psymv_dreal, real , dp, real , psymv)
598
672
@:pblasfx_psymv_phemv_template(phemv_complex, complex , sp, cmplx, phemv)
0 commit comments