LASs - Linear Algebra Routines on OmpSs  1.0.0
LASs
Functions
ddss_dsyrk.c File Reference

LASs-DDSs ddss_dsyrk routine. More...

#include "../include/lass.h"
Include dependency graph for ddss_dsyrk.c:

Go to the source code of this file.

Functions

int ddss_dsyrk (enum DDSS_UPLO UPLO, enum DDSS_TRANS TRANS_A, int N, int K, const double ALPHA, double *A, int LDA, const double BETA, double *C, int LDC)
 

Detailed Description

LASs-DDSs ddss_dsyrk routine.

LASs-DDSs is a software package provided by: Barcelona Supercomputing Center - Centro Nacional de Supercomputacion

Author
Pedro Valero-Lara pedro.nosp@m..val.nosp@m.ero@b.nosp@m.sc.e.nosp@m.s
Boro Sofranac boro..nosp@m.sofr.nosp@m.anac@.nosp@m.bsc..nosp@m.es
Date
2018-02-13

Definition in file ddss_dsyrk.c.

Function Documentation

int ddss_dsyrk ( enum DDSS_UPLO  UPLO,
enum DDSS_TRANS  TRANS_A,
int  N,
int  K,
const double  ALPHA,
double *  A,
int  LDA,
const double  BETA,
double *  C,
int  LDC 
)

Performs one of the symmetric rank k operations:

C = ALPHA * A * op( A ) + BETA * C  or
C = ALPHA * op( A ) * A + BETA * C

where op( X ) is:

op( X ) = X**T

ALPHA and BETA are scalars, C is an N by N symmetric matrix and A is an N by K matrix in the first case and a K by N matrix in the second case.

Parameters
[in]UPLOenum DDSS_UPLO. UPLO specifies the form in which C is stored:
  • Lower: Lower triangular part of C is stored. The upper traingular part is not referenced.
  • Upper: Upper triangular part of C is stored. The lower triangular part is not referenced.
[in]TRANS_Aenum DDSS_TRANS. TRANS_A specifies the operation to be performed as follows:
  • NoTrans: C = ALPHA * A * A**T + BETA * C
  • Trans: C = ALPHA * A**T * A + BETA * C
[in]Nint. N specifies the order of matrix C. N must be at least zero.
[in]Kint. With TRANS_A = NoTrans, K specifies the number of columns of the matrix A, and with TRANS_A = Trans, K specifies the number of rows of the matrix A. K must be at least zero.
[in]ALPHAdouble. ALPHA specifies the scalar alpha.
[in]Adouble *. A is a pointer to a matrix of dimension Na ( rows ) by Ka ( columns ), where Na is N and Ka is K when TRANS_A = NoTrans, and Na is K and Ka is N otherwise.
[in]LDAint. LDA specifies the number of columns of A ( row-major order ). When TRANS_A = NoTrans then LDA must be at least max( 1, K ), otherwise LDA must be at least max( 1, N ).
[in]BETAdouble. BETA specifies the scalar beta.
[in,out]Cdouble *. C is a pointer to a matrix of dimension N by N. When UPLO = Uppper the strictly lower triangular part of C is not referenced. On exit, the upper triangular part of C is overwritten by the upper triangular part of the updated solution matrix C. When UPLO = Lower the strictly upper triangular part of C is not referenced. On exit, the lower triangular part of C is overwritten by the lower triangular part of the updated solution matrix C.
[in]LDCint. LDC specifies the number of columns of C ( row-major order ). LDC must be at least max( 1, N ).
See also
kdsyrk

Definition at line 106 of file ddss_dsyrk.c.

References kdsyrk().

110 {
111 
112  // Local variables
113  int nA;
114 
115  // Argument checking
116  if ( ( UPLO != Upper ) && ( UPLO != Lower ) )
117  {
118  fprintf( stderr, "Illegal value of UPLO, in ddss_dsyrk code\n" );
119  return NoSuccess;
120  }
121 
122  if ( ( TRANS_A != NoTrans ) && ( TRANS_A != Trans ) )
123  {
124  fprintf( stderr, "Illegal value of TRANS_A, in ddss_dsyrk code\n" );
125  return NoSuccess;
126  }
127 
128  if ( N < 0 )
129  {
130  fprintf( stderr, "Illegal value of N, in ddss_dsyrk code\n" );
131  return NoSuccess;
132  }
133 
134  if ( K < 0 )
135  {
136  fprintf( stderr, "Illegal value of K, in ddss_dsyrk code\n" );
137  return NoSuccess;
138  }
139 
140  if ( TRANS_A == NoTrans )
141  {
142  nA = K;
143  }
144  else
145  {
146  nA = N;
147  }
148 
149  if ( LDA < MAX( 1, nA ) )
150  {
151  fprintf( stderr, "Illegal value of LDA, in ddss_dsyrk code\n" );
152  return NoSuccess;
153  }
154 
155  if ( LDC < MAX( 1, N ) )
156  {
157  fprintf( stderr, "Illegal value of LDC, in ddss_dsyrk code\n" );
158  return NoSuccess;
159  }
160 
161  // Quick return
162  if ( N == 0 || ( ( ALPHA == 0.0 || K == 0 ) && BETA == 1.0 ) )
163  {
164  return Success;
165  }
166 
167  return kdsyrk( UPLO, TRANS_A,
168  N, K,
169  ALPHA, A, LDA,
170  BETA, C, LDC );
171 
172 }
enum LASS_RETURN kdsyrk(enum DDSS_UPLO UPLO, enum DDSS_TRANS TRANS_A, int N, int K, const double ALPHA, double *A, int LDA, const double BETA, double *C, int LDC)
Definition: kdsyrk.c:117