Ifpack Package Browser (Single Doxygen Collection)
Development
Loading...
Searching...
No Matches
src
euclid
macros_dh.h
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
#ifndef MACROS_DH
44
#define MACROS_DH
45
46
#ifndef FMAX
47
#define FMAX(a,b) ((FABS(a)) > (FABS(b)) ? (FABS(a)) : (FABS(b)))
48
#endif
49
50
#ifndef MAX
51
#define MAX(a,b) ((a) > (b) ? (a) : (b))
52
#endif
53
54
#ifndef MIN
55
#define MIN(a,b) ((a)<(b)?(a):(b))
56
#endif
57
58
#ifndef ABS
59
#define ABS(x) (((x)<0)?(-(x)):(x))
60
#endif
61
62
#ifndef FABS
63
#define FABS(a) ((a) < 0 ? -(a) : a)
64
#endif
65
66
/* used in Mat_SEQ_PrintTriples, so matlab won't discard zeros (yuck!) */
67
#define _MATLAB_ZERO_ 1e-100
68
69
70
/*----------------------------------------------------------------------
71
* macros for error handling everyplace except in main.
72
*---------------------------------------------------------------------- */
73
74
/* for future expansion: should check that "ptr" points to
75
a valid memory address, if not null.
76
*/
77
#define ASSERT_DH(ptr) \
78
{ \
79
if (ptr == NULL) { \
80
sprintf(msgBuf_dh, "%s is NULL", ptr); \
81
SET_V_ERROR(msgBuf_dh); \
82
} \
83
}
84
85
86
#if 0
87
#define CHECK_MPI_V_ERROR(errCode) \
88
{ \
89
if (errCode) { \
90
int len; \
91
MPI_Error_string(errCode, msgBuf_dh, &len); \
92
setError_dh(msgBuf_dh, __FUNC__, __FILE__, __LINE__); \
93
return; \
94
} \
95
}
96
97
#define CHECK_MPI_ERROR(errCode) \
98
{ \
99
if (errCode) { \
100
int len; \
101
MPI_Error_string(errCode, msgBuf_dh, &len); \
102
setError_dh(msgBuf_dh, __FUNC__, __FILE__, __LINE__); \
103
return(errCode); \
104
} \
105
}
106
#endif
107
108
#define CHECK_MPI_V_ERROR(errCode) \
109
{ \
110
if (errCode) { \
111
setError_dh("MPI error!", __FUNC__, __FILE__, __LINE__); \
112
printErrorMsg(stderr); \
113
MPI_Abort(comm_dh, -1); \
114
} \
115
}
116
117
#define CHECK_MPI_ERROR(errCode) \
118
{ \
119
if (errCode) { \
120
setError_dh("MPI error!", __FUNC__, __FILE__, __LINE__); \
121
printErrorMsg(stderr); \
122
MPI_Abort(comm_dh, -1); \
123
} \
124
}
125
126
#define SET_V_ERROR(msg) \
127
{ setError_dh(msg, __FUNC__, __FILE__, __LINE__); \
128
printErrorMsg(stderr); \
129
MPI_Abort(comm_dh, -1); \
130
}
131
132
#define SET_ERROR(retval, msg) \
133
{ setError_dh(msg, __FUNC__, __FILE__, __LINE__); \
134
printErrorMsg(stderr); \
135
MPI_Abort(comm_dh, -1); \
136
}
137
138
#define CHECK_V_ERROR \
139
if (errFlag_dh) { \
140
setError_dh("", __FUNC__, __FILE__, __LINE__); \
141
printErrorMsg(stderr); \
142
MPI_Abort(comm_dh, -1); \
143
}
144
145
#define CHECK_ERROR(retval) \
146
if (errFlag_dh) { \
147
setError_dh("", __FUNC__, __FILE__, __LINE__); \
148
printErrorMsg(stderr); \
149
MPI_Abort(comm_dh, -1); \
150
}
151
152
/*----------------------------------------------------------------------
153
* informational macros
154
*---------------------------------------------------------------------- */
155
156
#define SET_INFO(msg) setInfo_dh(msg, __FUNC__, __FILE__, __LINE__);
157
158
/*----------------------------------------------------------------------
159
* macros for tracking the function call stack
160
*---------------------------------------------------------------------- */
161
#ifdef OPTIMIZED_DH
162
163
#define START_FUNC_DH \
164
dh_StartFunc(__FUNC__, __FILE__, __LINE__, 1); \
165
{
166
167
#define END_FUNC_DH \
168
} \
169
dh_EndFunc(__FUNC__, 1);
170
171
#define END_FUNC_VAL(a) \
172
dh_EndFunc(__FUNC__, 1); \
173
return a ; \
174
}
175
176
#define START_FUNC_DH_2
177
#define END_FUNC_DH_2
178
#define END_FUNC_VAL_2(a) return a ;
179
#else
180
181
#define START_FUNC_DH \
182
dh_StartFunc(__FUNC__, __FILE__, __LINE__, 1); \
183
if (logFuncsToStderr || logFuncsToFile)\
184
Error_dhStartFunc(__FUNC__, __FILE__, __LINE__); \
185
{
186
187
#define END_FUNC_DH \
188
dh_EndFunc(__FUNC__, 1); \
189
if (logFuncsToStderr || logFuncsToFile) \
190
Error_dhEndFunc(__FUNC__); \
191
return; \
192
} \
193
194
#define START_FUNC_DH_2 \
195
dh_StartFunc(__FUNC__, __FILE__, __LINE__, 2); \
196
if (logFuncsToStderr || logFuncsToFile)\
197
Error_dhStartFunc(__FUNC__, __FILE__, __LINE__); \
198
{
199
200
#define END_FUNC_DH_2 \
201
dh_EndFunc(__FUNC__, 2); \
202
if (logFuncsToStderr || logFuncsToFile) \
203
Error_dhEndFunc(__FUNC__); \
204
return; \
205
} \
206
207
208
#define END_FUNC_VAL(retval) \
209
dh_EndFunc(__FUNC__, 1); \
210
if (logFuncsToStderr || logFuncsToFile) \
211
Error_dhEndFunc(__FUNC__); \
212
return(retval); \
213
} \
214
215
#define END_FUNC_VAL_2(retval) \
216
dh_EndFunc(__FUNC__, 2); \
217
if (logFuncsToStderr || logFuncsToFile) \
218
Error_dhEndFunc(__FUNC__); \
219
return(retval); \
220
} \
221
222
223
#endif
224
225
#endif
/* #ifndef MACROS_DH */
Generated by
1.10.0