Ifpack Package Browser (Single Doxygen Collection)
Development
Toggle main menu visibility
Loading...
Searching...
No Matches
test
SetParameters_LL
test/SetParameters_LL/cxx_main.cpp
Go to the documentation of this file.
1
/*@HEADER
2
// ***********************************************************************
3
//
4
// Ifpack: Object-Oriented Algebraic Preconditioner Package
5
// Copyright (2002) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
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 Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
//@HEADER
41
*/
42
43
// SetParameters Test routine
44
#include <
Ifpack_ConfigDefs.h
>
45
#include <
Ifpack_IlukGraph.h
>
46
#include <
Ifpack_CrsRiluk.h
>
47
#include <Ifpack_CrsIct.h>
48
#include <
Ifpack_OverlapGraph.h
>
49
50
#include <
Epetra_CombineMode.h
>
51
#include <
Epetra_CrsGraph.h
>
52
#include <
Epetra_CrsMatrix.h
>
53
#include <
Epetra_Map.h
>
54
55
#include <Teuchos_ParameterList.hpp>
56
57
#include <
ifp_parameters.h
>
58
#include <
Epetra_SerialComm.h
>
59
60
#ifdef HAVE_MPI
61
#include <mpi.h>
62
#include <
Epetra_MpiComm.h
>
63
#endif
64
65
int
main
(
int
argc,
char
* argv[]) {
66
using
std::cerr;
67
using
std::cout;
68
using
std::endl;
69
70
//bool verbose = false; // used to set verbose false on non-root processors
71
bool
verbose1 =
false
;
// user's command-line argument
72
73
int
returnierr = 0;
74
//int size = 1;
75
//int rank = 0;
76
77
#ifdef HAVE_MPI
78
MPI_Init(&argc, &argv);
79
Epetra_MpiComm
Comm(MPI_COMM_WORLD);
80
#else
81
Epetra_SerialComm
Comm;
82
#endif
83
84
Ifpack::param_struct
params;
85
params.
double_params
[Ifpack::absolute_threshold] = -99.9;
86
87
Teuchos::ParameterList paramlist;
88
paramlist.set(
"absolute_threshold"
, 44.0);
89
paramlist.set(
"level_fill"
, 2);
90
paramlist.set(
"LEVEL_OVERLAP"
, 2);
91
paramlist.set(
"relative_threshold"
, 1.e-2);
92
paramlist.set(
"fill_tolerance"
, 2.0);
93
paramlist.set(
"use_reciprocal"
,
false
);
94
paramlist.set(
"level_overlap"
, 2);
95
paramlist.set(
"overlap_mode"
,
Add
);
96
97
Ifpack::set_parameters
(paramlist, params);
98
99
if
(params.
double_params
[Ifpack::absolute_threshold] != 44.0) {
100
if
(verbose1) {
101
cerr <<
"SetParameters test failed to correctly set absolute_threshold."
<<endl;
102
}
103
return
(-1);
104
}
105
106
int
i, local_n = 5;
107
int
my_pid = Comm.
MyPID
();
108
int
num_procs = Comm.
NumProc
();
109
int
global_n = num_procs*local_n;
110
111
Epetra_Map
map(global_n, 0, Comm);
112
Epetra_CrsGraph
graph(
Copy
, map, 1);
113
int
first_global_row = my_pid*local_n;
114
115
for
(i=0; i<local_n; ++i) {
116
int
row = first_global_row + i;
117
graph.
InsertGlobalIndices
(row, 1, &row);
118
}
119
120
graph.
FillComplete
();
121
122
Ifpack_IlukGraph
ilukgraph(graph, 1,1);
123
Ifpack_CrsRiluk
crsriluk(ilukgraph);
124
// MS // this was failing
125
#if 0
126
Ifpack_OverlapGraph
overlapgraph(&graph, 1);
127
#endif
128
129
Epetra_CrsMatrix
A(
Copy
, graph);
130
131
for
(i=0; i<local_n; ++i) {
132
int
row = first_global_row + i;
133
double
val = 2.0;
134
A.
SumIntoGlobalValues
(row, 1, &val, &row);
135
}
136
137
Ifpack_CrsIct crsict(A, 1.0, 1);
138
139
ilukgraph.
SetParameters
(paramlist);
140
141
int
levelfill = ilukgraph.
LevelFill
();
142
if
(levelfill != 2) {
143
cerr <<
"SetParameters test failed to correctly set level_fill."
144
<< endl;
145
return
(-1);
146
}
147
148
int
leveloverlap = ilukgraph.
LevelOverlap
();
149
if
(leveloverlap != 2) {
150
cerr <<
"SetParameters test failed to correctly set level_overlap."
151
<< endl;
152
return
(-1);
153
}
154
155
crsriluk.
SetParameters
(paramlist);
156
157
double
athresh = crsriluk.
GetAbsoluteThreshold
();
158
if
(athresh != 44.0) {
159
cerr <<
"SetParameters test failed to correctly set absolute_threshold."
160
<< endl;
161
return
(-1);
162
}
163
164
Epetra_CombineMode
overlapmode = crsriluk.
GetOverlapMode
();
165
if
(overlapmode !=
Add
) {
166
cerr <<
"SetParameters test failed to correctly set overlapmode."
167
<< endl;
168
return
(-1);
169
}
170
171
crsict.SetParameters(paramlist);
172
173
double
rthresh = crsict.GetRelativeThreshold();
174
if
(rthresh != 1.e-2) {
175
cerr <<
"SetParameters test failed to correctly set relative_threshold."
176
<< endl;
177
return
(-1);
178
}
179
180
overlapmode = crsict.GetOverlapMode();
181
if
(overlapmode !=
Add
) {
182
cerr <<
"SetParameters test failed to correctly set overlapmode."
183
<< endl;
184
return
(-1);
185
}
186
187
#if 0
188
overlapgraph.
SetParameters
(paramlist);
189
190
int
overlaplevel = overlapgraph.
OverlapLevel
();
191
if
(overlaplevel != 2) {
192
cerr <<
"SetParameters test failed to correctly set overlaplevel."
193
<< endl;
194
return
(-1);
195
}
196
#endif
197
198
if
(verbose1==
true
) {
199
cout <<
"********* Test passed **********"
<< endl;
200
}
201
202
#ifdef HAVE_MPI
203
MPI_Finalize();
204
#endif
205
206
return
(returnierr);
207
}
208
Epetra_CombineMode.h
Epetra_CombineMode
Epetra_CombineMode
Add
Add
Epetra_CrsGraph.h
Epetra_CrsMatrix.h
Copy
Copy
Epetra_Map.h
Epetra_MpiComm.h
Epetra_SerialComm.h
Ifpack_ConfigDefs.h
Ifpack_CrsRiluk.h
Ifpack_IlukGraph.h
Ifpack_OverlapGraph.h
Epetra_CrsGraph
Epetra_CrsGraph::FillComplete
int FillComplete()
Epetra_CrsGraph::InsertGlobalIndices
int InsertGlobalIndices(int_type GlobalRow, int NumIndices, int_type *Indices)
Epetra_CrsMatrix
Epetra_CrsMatrix::SumIntoGlobalValues
virtual int SumIntoGlobalValues(int GlobalRow, int NumEntries, const double *Values, const int *Indices)
Epetra_Map
Epetra_MpiComm
Epetra_MpiComm::NumProc
int NumProc() const
Epetra_MpiComm::MyPID
int MyPID() const
Epetra_SerialComm
Ifpack_CrsRiluk
Ifpack_CrsRiluk: A class for constructing and using an incomplete lower/upper (ILU) factorization of ...
Definition
Ifpack_CrsRiluk.h:210
Ifpack_CrsRiluk::SetParameters
int SetParameters(const Teuchos::ParameterList ¶meterlist, bool cerr_warning_if_unused=false)
Set parameters using a Teuchos::ParameterList object.
Definition
Ifpack_CrsRiluk.cpp:162
Ifpack_CrsRiluk::GetOverlapMode
Epetra_CombineMode GetOverlapMode()
Get overlap mode type.
Definition
Ifpack_CrsRiluk.h:343
Ifpack_CrsRiluk::GetAbsoluteThreshold
double GetAbsoluteThreshold()
Get absolute threshold value.
Definition
Ifpack_CrsRiluk.h:337
Ifpack_IlukGraph
Ifpack_IlukGraph: A class for constructing level filled graphs for use with ILU(k) class precondition...
Definition
Ifpack_IlukGraph.h:77
Ifpack_IlukGraph::LevelFill
virtual int LevelFill() const
Returns the level of fill used to construct this graph.
Definition
Ifpack_IlukGraph.h:131
Ifpack_IlukGraph::SetParameters
int SetParameters(const Teuchos::ParameterList ¶meterlist, bool cerr_warning_if_unused=false)
Set parameters using Teuchos::ParameterList object.
Definition
Ifpack_IlukGraph.cpp:116
Ifpack_IlukGraph::LevelOverlap
virtual int LevelOverlap() const
Returns the level of overlap used to construct this graph.
Definition
Ifpack_IlukGraph.h:134
Ifpack_OverlapGraph
Ifpack_OverlapGraph: Constructs a graph for use with Ifpack preconditioners.
Definition
Ifpack_OverlapGraph.h:62
Ifpack_OverlapGraph::SetParameters
int SetParameters(const Teuchos::ParameterList ¶meterlist, bool cerr_warning_if_unused=false)
Set parameters using a Teuchos::ParameterList object.
Definition
Ifpack_OverlapGraph.cpp:90
Ifpack_OverlapGraph::OverlapLevel
int OverlapLevel() const
Returns the level of overlap used to create this graph.
Definition
Ifpack_OverlapGraph.h:114
ifp_parameters.h
Ifpack::set_parameters
void set_parameters(const Teuchos::ParameterList ¶meterlist, param_struct ¶ms, bool cerr_warning_if_unused)
Definition
ifp_parameters.cpp:99
Ifpack::param_struct
Definition
ifp_parameters.h:82
Ifpack::param_struct::double_params
double double_params[FIRST_INT_PARAM]
Definition
ifp_parameters.h:84
main
int main(int argc, char *argv[])
Definition
test/SetParameters_LL/cxx_main.cpp:65
Generated by
1.17.0