Anasazi  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
singularCoarse.cpp
1 // @HEADER
2 // *****************************************************************************
3 // Anasazi: Block Eigensolvers Package
4 //
5 // Copyright 2004 NTESS and the Anasazi contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 #include "singularCoarse.h"
10 
11 namespace singularCoarse {
12 
13  void setNullSpace(double *V, int row, int col, double *VtV, const Epetra_Comm *_Comm) {
14 
15  Qcoarse = V;
16  rowQcoarse = row;
17  colQcoarse = col;
18  QcoarseTQcoarse = VtV;
19  commCoarse = _Comm;
20 
21  }
22 
23  void projection(double *z, int *options, int *proc_config, double *params,
24  AZ_MATRIX_STRUCT *Amat, AZ_PREC_STRUCT *prec) {
25 
26  Epetra_BLAS callBLAS;
27  Epetra_LAPACK callLAPACK;
28 
29 // // Do one Jacobi step
30 // if (Amat->data_org[AZ_matrix_type] == AZ_MSR_MATRIX) {
31 // if (commCoarse->MyPID() == 0)
32 // cout << " Do ONE JACOBI STEP " << endl;
33 // for (int i = 0; i < rowQcoarse; ++i)
34 // z[i] /= Amat->val[i];
35 // }
36 
37  double *tmp = new double[2*colQcoarse];
38  memset(tmp, 0, 2*colQcoarse*sizeof(double));
39 
40  int info = 0;
41 
42  for (int i = 0; i < 2; ++i) {
43  if (rowQcoarse > 0) {
44  callBLAS.GEMV('T',rowQcoarse,colQcoarse,1.0,Qcoarse,rowQcoarse,z,0.0,tmp+colQcoarse);
45  }
46  commCoarse->SumAll(tmp + colQcoarse, tmp, colQcoarse);
47  if (rowQcoarse > 0) {
48  callLAPACK.POTRS('U', colQcoarse, 1, QcoarseTQcoarse, colQcoarse, tmp, colQcoarse, &info);
49  callBLAS.GEMV('N', rowQcoarse, colQcoarse, -1.0, Qcoarse, rowQcoarse, tmp, 1.0, z);
50  }
51  }
52 
53  delete[] tmp;
54 
55  }
56 
57 }
58 
59 
void GEMV(const char TRANS, const int M, const int N, const float ALPHA, const float *A, const int LDA, const float *X, const float BETA, float *Y, const int INCX=1, const int INCY=1) const
void POTRS(const char UPLO, const int N, const int NRHS, const float *A, const int LDA, float *X, const int LDX, int *INFO) const