⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diagpre.cc

📁 http://gams.cam.nist.gov/acmd/Staff/RPozo/sparselib++.html
💻 CC
字号:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*//*             ********   ***                                 SparseLib++    *//*          *******  **  ***       ***      ***                              *//*           *****      ***     ******** ********                            *//*            *****    ***     ******** ********              R. Pozo        *//*       **  *******  ***   **   ***      ***                 K. Remington   *//*        ********   ********                                 A. Lumsdaine   *//*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*//*                                                                           *//*                                                                           *//*                     SparseLib++ : Sparse Matrix Library                   *//*                                                                           *//*               National Institute of Standards and Technology              *//*                        University of Notre Dame                           *//*              Authors: R. Pozo, K. Remington, A. Lumsdaine                 *//*                                                                           *//*                                 NOTICE                                    *//*                                                                           *//* Permission to use, copy, modify, and distribute this software and         *//* its documentation for any purpose and without fee is hereby granted       *//* provided that the above notice appear in all copies and supporting        *//* documentation.                                                            *//*                                                                           *//* Neither the Institutions (National Institute of Standards and Technology, *//* University of Notre Dame) nor the Authors make any representations about  *//* the suitability of this software for any purpose.  This software is       *//* provided ``as is'' without expressed or implied warranty.                 *//*                                                                           *//*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/#include <stdlib.h>#include "diagpre.h"int CopyInvDiagonals(int n, const int *pntr, const int *indx,         const double *sa, double *diag){  int i, j;  for (i = 0; i < n; i++)    diag[i] = 0;    /* Find the diagonal elements */  for (i = 0; i < n; i++) {    for (j = pntr[i]; j < pntr[i+1]; j++) {      if (indx[j] == i) {    if (sa[j] == 0)      return i;    diag[i] = 1. / sa[j];    break;      }    }    if (diag[i] == 0)      return -i;  }    return 0;}DiagPreconditioner::DiagPreconditioner(const CompRow_MatDouble &C)  : diag_(C.dim(0)){  int i;  if ((i = CopyInvDiagonals(C.dim(0), &C.row_ptr(0), &C.col_ind(0),                 &C.val(0), &diag(0))) != 0) {    std::cerr << "Diagonal preconditioner failure.";    std::cerr << " Zero detected in element " << i << "\n";    exit(1);  }}DiagPreconditioner::DiagPreconditioner(const CompCol_MatDouble &C)  : diag_ (C.dim (0)){  int i;  if ((i = CopyInvDiagonals(C.dim(0), &C.col_ptr(0), &C.row_ind(0),                 &C.val(0), &diag(0))) != 0) {    std::cerr << "Diagonal preconditioner failure.";    std::cerr << " Zero detected in element " << i << "\n";    exit(1);  }}MV_Vector<double> DiagPreconditioner::solve (const MV_Vector<double> &x) const {  MV_Vector<double> y(x.size());  for (int i = 0; i < x.size(); i++)    y(i) = x(i) * diag(i);    return y;}MV_Vector<double>DiagPreconditioner::trans_solve (const MV_Vector<double> &x) const {  MV_Vector<double> y(x.size());  for (int i = 0; i < x.size(); i++)    y(i) = x(i) * diag(i);    return y;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -