EpetraExt Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
EpetraExt_Dirichlet_CrsMatrix.cpp
Go to the documentation of this file.
1#if 0 // dead source
2//@HEADER
3// ***********************************************************************
4//
5// EpetraExt: Epetra Extended - Linear Algebra Services Package
6// Copyright (2011) Sandia Corporation
7//
8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9// the U.S. Government retains certain rights in this software.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39//
40// ***********************************************************************
41//@HEADER
42
44
45#include <Epetra_CrsMatrix.h>
46#include <Epetra_IntVector.h>
47#include <Epetra_Import.h>
48#include <Epetra_Map.h>
49
50namespace EpetraExt {
51
52bool
54fwd()
55{
56 Epetra_CrsMatrix & Matrix = *origObj_;
57
58 const Epetra_Map & RowMap = Matrix.RowMap();
59 const Epetra_Map & ColMap = Matrix.ColMap();
60
61 int NumMyElements = RowMap.NumMyElements();
62 int NumMyColElements = ColMap.NumMyElements();
63
64 if( symmetric_ && colSet_.empty() ) // get non-local column info
65 {
66 if( Matrix.IndicesAreGlobal() )
67 {
68 Epetra_Import Importer( ColMap, RowMap );
69 Epetra_IntVector colLocations( ColMap );
70 colLocations.Import( locations_, Importer, Insert );
71 for( int i = 0; i < NumMyColElements; ++ i )
72 if( colLocations[i] ) colSet_.insert(i);
73 }
74 else
75 {
76 for( int i = 0; i < NumMyElements; ++i )
77 if( locations_[i] ) colSet_.insert(i);
78 }
79 }
80
81 for( int i = 0; i < NumMyElements; ++i )
82 {
83 int * Indices;
84 double * Vals;
85 int NumIndices;
86 if( locations_[i] ) //this is a Dirichlet BC location
87 {
88 Matrix.ExtractMyRowView( i, NumIndices, Vals, Indices );
89 for( int j = 0; j < NumIndices; ++j )
90 {
91 if( Indices[j] == i ) Vals[i] = 1.0;
92 else Vals[i] = 0.0;
93 }
94 }
95 else if( symmetric_ )
96 {
97 Matrix.ExtractMyRowView( i, NumIndices, Vals, Indices );
98 for( int j = 0; j < NumIndices; ++j )
99 if( colSet_.count( Indices[j] ) ) Vals[j] = 0.0;
100 }
101 }
102
103 return true;
104}
105
106bool
108rvs()
109{
110 return true;
111}
112
113} //namespace EpetraExt
114
115#endif // if 0
bool fwd()
Applies Dirichlet BC's.
int NumMyElements() const
const Epetra_Map & RowMap() const
int ExtractMyRowView(int MyRow, int &NumEntries, double *&Values, int *&Indices) const
const Epetra_Map & ColMap() const
bool IndicesAreGlobal() const
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.