FEI Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
fei_AztecDVBR_Matrix.hpp
Go to the documentation of this file.
1/*
2// @HEADER
3// ************************************************************************
4// FEI: Finite Element Interface to Linear Solvers
5// Copyright (2005) Sandia Corporation.
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the
8// U.S. Government retains certain rights in this software.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Alan Williams (william@sandia.gov)
38//
39// ************************************************************************
40// @HEADER
41*/
42
43#ifndef _fei_AztecDVBR_Matrix_hpp_
44#define _fei_AztecDVBR_Matrix_hpp_
45
46
47#include <fei_SharedPtr.hpp>
48//
49// This class provides a wrapper for the Aztec DVBR matrix data structure.
50//
51// Some functions return an int. This will be the ESI_error_code. It
52// will be 0 if there were no errors, 1 if an error occurred.
53//
54namespace fei_trilinos {
55
56class Aztec_BlockMap;
57
59
60 public:
61 // Constructor.
63
64 //Copy constructor.
66
68
69 //query functions.
70
71 int getNumBlocksPerRow(int blkRow, int& nnzBlksPerRow) const;
72 int getNumNonzerosPerRow(int blkRow, int& nnzPerRow) const;
73 int getNumBlocksPerRow(int* nnzBlksPerRow) const;
74 int getNumNonzerosPerRow(int* nnzPerRow) const;
75 int getBlockSize(int blkRow, int blkCol, int& ptRows, int& ptCols);
76
77 // Mathematical functions.
78 void matvec(const Aztec_LSVector& x, Aztec_LSVector& y) const;
79
80 void put(double s);
81
82 // ... to read matrix.
83
84 int getBlockRow(int blk_row,
85 double* vals,
86 int* blk_col_inds,
87 int num_nz_blocks) const;
88
89 // ... to write matrix.
90
91 int putBlockRow(int blk_row,
92 double* vals,
93 int* blk_col_inds,
94 int num_nz_blocks) const;
95
96 int sumIntoBlockRow(int blk_row,
97 double* vals,
98 int* blk_col_inds,
99 int num_nz_blocks) const;
100
101 // configuration function.
102 void allocate(int* num_nz_blocks, int* blk_col_inds);
103
105
106 bool isLoaded() const {return(isLoaded_);};
107 void setLoaded(bool flag) {isLoaded_ = flag;};
108 bool isAllocated() const {return(isAllocated_);};
109 void setAllocated(bool flag) {isAllocated_ = flag;};
110
111 AZ_MATRIX* getAZ_MATRIX_Ptr() const {return(Amat_);};
112
113 bool readFromFile(const char *filename);
114 bool writeToFile(const char *fileName) const;
115
116 //numRemoteBlocks is the number of block-column-indices on this processor
117 //that correspond to block-rows that reside on another processor.
121
123 int* getData_org() {return(data_org_);};
124
125 private:
126 int inUpdate(int globalIndex, int& localIndex) const;
127
128 void readAllocateInfo(FILE* infile, int*& num_nz_blocks, int*& blk_col_inds);
129 void readMatrixData(FILE* infile);
130
131 void calcRpntr();
132 void calcBpntr(int* nzBlksPerRow);
133 void setBindx(int nnzBlks, int* blkColInds);
134 void calcIndx(int nnzBlks);
135
136 int getBindxOffset(int blkInd, int bpntrStart, int bpntrEnd) const;
137
138 void calcRemoteInds(int*& remoteInds, int& len);
139 void getRemoteBlkSizes(int* remoteBlkSizes, int* remoteInds, int len);
140 void insertList(int item, int*& list, int& len);
141 void getValuesFromString(char *line, int len, double *values,
142 int lenValues);
143 void messageAbort(const char* mesg) const;
144
146
147 AZ_MATRIX *Amat_;
148
155
158
161
165};
166
167}//namespace fei_trilinos
168
169#endif
void allocate(int *num_nz_blocks, int *blk_col_inds)
bool readFromFile(const char *filename)
void readMatrixData(FILE *infile)
void getRemoteBlkSizes(int *remoteBlkSizes, int *remoteInds, int len)
void getValuesFromString(char *line, int len, double *values, int lenValues)
int getNumBlocksPerRow(int *nnzBlksPerRow) const
AztecDVBR_Matrix(fei::SharedPtr< Aztec_BlockMap > map)
int putBlockRow(int blk_row, double *vals, int *blk_col_inds, int num_nz_blocks) const
void calcBpntr(int *nzBlksPerRow)
int sumIntoBlockRow(int blk_row, double *vals, int *blk_col_inds, int num_nz_blocks) const
int getNumNonzerosPerRow(int blkRow, int &nnzPerRow) const
int getBlockRow(int blk_row, double *vals, int *blk_col_inds, int num_nz_blocks) const
int getNumBlocksPerRow(int blkRow, int &nnzBlksPerRow) const
int inUpdate(int globalIndex, int &localIndex) const
void setBindx(int nnzBlks, int *blkColInds)
int getBlockSize(int blkRow, int blkCol, int &ptRows, int &ptCols)
void messageAbort(const char *mesg) const
int getNumNonzerosPerRow(int *nnzPerRow) const
fei::SharedPtr< Aztec_BlockMap > amap_
int getBindxOffset(int blkInd, int bpntrStart, int bpntrEnd) const
void readAllocateInfo(FILE *infile, int *&num_nz_blocks, int *&blk_col_inds)
void matvec(const Aztec_LSVector &x, Aztec_LSVector &y) const
void calcRemoteInds(int *&remoteInds, int &len)
AztecDVBR_Matrix(const AztecDVBR_Matrix &src)
void insertList(int item, int *&list, int &len)
bool writeToFile(const char *fileName) const