Files
mlpack/fastlib/trilinos/include/Trilinos_Util.h
T

371 lines
11 KiB
C++

// @HEADER
// ***********************************************************************
//
// TriUtils: Trilinos Utilities Package
// Copyright (2001) Sandia Corporation
//
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
// license for use of this work by or on behalf of the U.S. Government.
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
//
// ***********************************************************************
// @HEADER
#ifndef _TRILINOS_UTIL_H_
#define _TRILINOS_UTIL_H_
class Epetra_Comm;
class Epetra_Vector;
class Epetra_Map;
class Epetra_BlockMap;
class Epetra_CrsMatrix;
class Epetra_VbrMatrix;
class Epetra_MultiVector;
#define Trilinos_Util_max(x,y) (( x > y ) ? x : y) /* max function */
#define Trilinos_Util_min(x,y) (( x < y ) ? x : y) /* min function */
#ifdef HAVE_CONFIG_H
/*
* The macros PACKAGE, PACKAGE_NAME, etc, get defined for each package and need to
* be undef'd here to avoid warnings when this file is included from another package.
* Fix from KL
*/
#ifdef PACKAGE
#undef PACKAGE
#endif
#ifdef PACKAGE_NAME
#undef PACKAGE_NAME
#endif
#ifdef PACKAGE_BUGREPORT
#undef PACKAGE_BUGREPORT
#endif
#ifdef PACKAGE_STRING
#undef PACKAGE_STRING
#endif
#ifdef PACKAGE_TARNAME
#undef PACKAGE_TARNAME
#endif
#ifdef PACKAGE_VERSION
#undef PACKAGE_VERSION
#endif
#ifdef VERSION
#undef VERSION
#endif
#include "Triutils_config.h"
#ifdef HAVE_DEBUG
#ifndef DEBUG
#define DEBUG
#endif
#endif
#ifndef JANUS_STLPORT
#ifdef HAVE_CSTDLIB
#include <cstdlib>
using std::calloc;
using std::free;
using std::exit;
using std::rand;
using std::abort;
using std::malloc;
using std::free;
#else /* HAVE_STDLIB_H */
#include <stdlib.h>
#endif
#else /* JANUS_STLPORT */
#include <stdlib.h>
#endif /* JANUS_STLPORT */
#ifdef HAVE_CSTDIO
#include <cstdio>
#ifndef AVOID_BUG1472
using std::fopen;
using std::fclose;
using std::FILE;
using std::fprintf;
using std::fscanf;
using std::printf;
using std::perror;
using std::feof;
#endif
#else
#include <stdio.h>
#endif
#ifdef HAVE_IOSTREAM
#include <iostream>
#else
#include <iostream.h>
#endif
#ifdef HAVE_STRING
#include <string>
#else
#include <string.h>
#endif
#ifndef JANUS_STLPORT
#ifdef HAVE_CMATH
#include <cmath>
using std::fabs;
using std::sqrt;
#else
#include <math.h>
#endif
#else /* JANUS_STLPORT */
#include <math.h>
#endif /* JANUS_STLPORT */
#ifdef HAVE_MATH_H
#include <math.h>
#endif
#ifdef HAVE_MAP
#include <map>
#else
#include <map.h>
#endif
#else /*HAVE_CONFIG_H*/
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <map>
#include <math.h>
#endif /*HAVE_CONFIG_H*/
void Trilinos_Util_read_hb(char *data_file, int MyPID,
int *N_global, int *n_nonzeros,
double **val, int **bindx,
double **x, double **b, double **xexact);
void Trilinos_Util_read_hb(char *data_file, int MyPID,
int *N_global, int *n_nonzeros,
double **val, int **bindx);
void Trilinos_Util_read_coo(char *data_file, int MyPID,
int *N_global, int *n_nonzeros,
double **val, int **bindx,
double **x, double **b, double **xexact);
void Trilinos_Util_ReadHb2Epetra(char *data_file,
const Epetra_Comm &comm,
Epetra_Map *& map,
Epetra_CrsMatrix *& A,
Epetra_Vector *& x,
Epetra_Vector *& b,
Epetra_Vector *&xexact);
void Trilinos_Util_ReadHpc2Epetra(char *data_file,
const Epetra_Comm &comm,
Epetra_Map *& map,
Epetra_CrsMatrix *& A,
Epetra_Vector *& x,
Epetra_Vector *& b,
Epetra_Vector *&xexact);
void Trilinos_Util_ReadHb2EpetraVbr(char *data_file, char * partitioning,
const Epetra_Comm &comm,
Epetra_BlockMap *& map,
Epetra_VbrMatrix *& A,
Epetra_Vector *& x,
Epetra_Vector *& b,
Epetra_Vector *&xexact);
void Trilinos_Util_distrib_msr_matrix(const Epetra_Comm & Comm,
int *N_global, int *n_nonzeros,
int *N_update, int **update,
double **val, int **bindx,
double **x, double **b, double **xexact);
void Trilinos_Util_distrib_msr_matrix(const Epetra_Comm & Comm,
int *N_global, int *n_nonzeros,
int *N_update, int **update,
double **val, int **bindx);
void Trilinos_Util_distrib_vbr_matrix(const Epetra_Comm & Comm,
int *N_global, int *N_blk_global,
int *n_nonzeros, int *n_blk_nonzeros,
int *N_update, int **update,
double **val, int **indx, int **rpntr, int **cpntr,
int **bpntr, int **bindx,
double **x, double **b, double **xexact);
void Trilinos_Util_create_vbr(const Epetra_Comm & Comm, char *part_file,
int *N_global, int *N_blk_global,
int *n_nonzeros, int *n_blk_nonzeros,
int *N_update, int **update,
int *bindx_msr, double *val_msr,
double **val, int **indx, int **rpntr, int **cpntr,
int **bpntr, int **bindx);
double Trilinos_Util_smsrres (int m, int n,
double *val, int *indx,
double *xlocal, double *x, double *b);
double Trilinos_Util_scscres (int isym, int m, int n,
double *val, int *indx, int *pntr,
double *x, double *b);
void Trilinos_Util_scscmv (int isym, int m, int n,
double *val, int *indx, int *pntr,
double *x, double *b);
double Trilinos_Util_svbrres (int m, int n, int m_blk,
double *val, int *indx, int *bindx, int *rpntr,
int *cpntr, int *bpntrb, int *bpntre,
double *x, double *b);
void Trilinos_Util_msr2vbr(double val[], int indx[], int rnptr[], int
cnptr[], int bnptr[],
int bindx[], int msr_bindx[], double msr_val[],
int total_blk_rows, int total_blk_cols, int blk_space,
int nz_space, int blk_type);
int Trilinos_Util_find_block_col(int cnptr[], int column, int
max_blocks, int blk_size);
int Trilinos_Util_find_block_in_row(int bindx[], int bnptr[], int
blk_row, int blk_col,
int indx[], int no_elements, double val[],
int blk_space, int nz_space);
void Trilinos_Util_add_new_ele(int cnptr[], int col, int blk_row, int
bindx[], int bnptr[],
int indx[], double val[], int row, double new_ele,
int maxcols, int blk_space, int nz_space, int blk_type);
int Trilinos_Util_find_closest_not_larger(int key, int list[], int length);
void Trilinos_Util_convert_values_to_ptrs(int array[], int length, int start);
int Trilinos_Util_csrcsc(int n, int n2, int job, int ipos, double * a,
int *ja, int *ia, double *ao, int *jao, int *iao);
int Trilinos_Util_csrmsr( int n, double *a, int *ja, int *ia, double *ao,
int *jao, double *wk, int *iwk);
int Trilinos_Util_ssrcsr( int job, int value2, int nrow, double *a,
int *ja, int *ia, int nzmax,
double *ao, int *jao, int *iao, int *indu,
int *iwk);
int Trilinos_Util_coocsr( int nrow, int nnz, double *a, int *ir, int *jc,
double *ao, int *jao, int *iao);
struct SPBLASMAT_STRUCT {
int n;
double *val;
int *indx;
int *bindx;
int *rpntr;
int *cpntr;
int *bpntrb;
int *bpntre;
int buffersize;
int bufferstride;
double *buffer;
int *ncolvec;
double nops_per_rhs;
int minblocksize;
int maxblocksize;
};
typedef struct SPBLASMAT_STRUCT SPBLASMAT;
#define MAXNRHS 1
void Trilinos_Util_duscr_vbr(int n, double *val, int *indx, int *bindx,
int *rpntr, int *cpntr, int *bpntrb, int *bpntre,
SPBLASMAT *A);
void Trilinos_Util_dusmm(int m, int nrhs, int k, double alpha, SPBLASMAT *A,
double *x, int xstride, double beta, double *b, int bstride);
void Trilinos_Util_dusds_vbr( SPBLASMAT *A);
void Trilinos_Util_GenerateCrsProblem(int nx, int ny, int npoints, int * xoff, int * yoff,
const Epetra_Comm &comm,
Epetra_Map *& map,
Epetra_CrsMatrix *& A,
Epetra_Vector *& x,
Epetra_Vector *& b,
Epetra_Vector *&xexact, int indexBase = 0);
void Trilinos_Util_GenerateCrsProblem(int nx, int ny, int npoints, int * xoff, int * yoff, int nrhs,
const Epetra_Comm &comm,
Epetra_Map *& map,
Epetra_CrsMatrix *& A,
Epetra_MultiVector *& x,
Epetra_MultiVector *& b,
Epetra_MultiVector *&xexact, int indexBase = 0);
void Trilinos_Util_GenerateVbrProblem(int nx, int ny, int npoints, int * xoff, int * yoff,
int nsizes, int * sizes,
const Epetra_Comm &comm,
Epetra_BlockMap *& map,
Epetra_VbrMatrix *& A,
Epetra_Vector *& x,
Epetra_Vector *& b,
Epetra_Vector *&xexact);
void Trilinos_Util_GenerateVbrProblem(int nx, int ny, int npoints, int * xoff, int * yoff,
int nsizes, int * sizes, int nrhs,
const Epetra_Comm &comm,
Epetra_BlockMap *& map,
Epetra_VbrMatrix *& A,
Epetra_MultiVector *& x,
Epetra_MultiVector *& b,
Epetra_MultiVector *&xexact);
int Trilinos_Util_ReadTriples2Epetra( char *data_file,
bool symmetric,
const Epetra_Comm &comm,
Epetra_Map *& map,
Epetra_CrsMatrix *& A,
Epetra_Vector *& x,
Epetra_Vector *& b,
Epetra_Vector *&xexact,
bool NonUniformMap=false,
bool TimDavisHeader=false,
bool ZeroBased=false ) ;
int Trilinos_Util_ReadMatrixMarket2Epetra( char *data_file,
const Epetra_Comm &comm,
Epetra_Map *& map,
Epetra_CrsMatrix *& A,
Epetra_Vector *& x,
Epetra_Vector *& b,
Epetra_Vector *&xexact );
void Trilinos_Util_write_vec(const char *filename, int n_equations, double *x);
void Trilinos_Util_read_vec(const char *filename, int n_equations, double *x);
#endif /* _TRILINOS_UTIL_H_ */