EpetraExt Package Browser (Single Doxygen Collection)
Development
Toggle main menu visibility
Loading...
Searching...
No Matches
src
transform
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
43
#include <
EpetraExt_Dirichlet_CrsMatrix.h
>
44
45
#include <
Epetra_CrsMatrix.h
>
46
#include <
Epetra_IntVector.h
>
47
#include <
Epetra_Import.h
>
48
#include <
Epetra_Map.h
>
49
50
namespace
EpetraExt
{
51
52
bool
53
CrsMatrix_Dirichlet::
54
fwd
()
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
106
bool
107
CrsMatrix_Dirichlet::
108
rvs
()
109
{
110
return
true
;
111
}
112
113
}
//namespace EpetraExt
114
115
#endif
// if 0
EpetraExt_Dirichlet_CrsMatrix.h
Epetra_CrsMatrix.h
Epetra_Import.h
Epetra_IntVector.h
Epetra_Map.h
EpetraExt::CrsMatrix_Dirichlet::locations_
const Epetra_IntVector locations_
Definition
EpetraExt_Dirichlet_CrsMatrix.h:89
EpetraExt::CrsMatrix_Dirichlet::fwd
bool fwd()
Applies Dirichlet BC's.
EpetraExt::CrsMatrix_Dirichlet::symmetric_
const bool symmetric_
Definition
EpetraExt_Dirichlet_CrsMatrix.h:92
EpetraExt::CrsMatrix_Dirichlet::rvs
bool rvs()
NoOp.
EpetraExt::CrsMatrix_Dirichlet::colSet_
std::set< int > colSet_
Definition
EpetraExt_Dirichlet_CrsMatrix.h:90
EpetraExt::Transform< Epetra_CrsMatrix, Epetra_CrsMatrix >::origObj_
OriginalTypePtr origObj_
Definition
EpetraExt_Transform.h:216
Epetra_BlockMap::NumMyElements
int NumMyElements() const
Epetra_CrsMatrix::RowMap
const Epetra_Map & RowMap() const
Epetra_CrsMatrix::ExtractMyRowView
int ExtractMyRowView(int MyRow, int &NumEntries, double *&Values, int *&Indices) const
Epetra_CrsMatrix::ColMap
const Epetra_Map & ColMap() const
Epetra_CrsMatrix::IndicesAreGlobal
bool IndicesAreGlobal() const
EpetraExt
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
Definition
EpetraExt_BlockCrsMatrix.cpp:46
Generated by
1.17.0