source: CIVL/examples/mpi-omp/AMG2013/parcsr_mv/HYPRE_parcsr_matrix.c

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 10.8 KB
Line 
1/*BHEADER**********************************************************************
2 * Copyright (c) 2008, Lawrence Livermore National Security, LLC.
3 * Produced at the Lawrence Livermore National Laboratory.
4 * This file is part of HYPRE. See file COPYRIGHT for details.
5 *
6 * HYPRE is free software; you can redistribute it and/or modify it under the
7 * terms of the GNU Lesser General Public License (as published by the Free
8 * Software Foundation) version 2.1 dated February 1999.
9 *
10 * $Revision: 2.4 $
11 ***********************************************************************EHEADER*/
12
13
14
15/******************************************************************************
16 *
17 * HYPRE_ParCSRMatrix interface
18 *
19 *****************************************************************************/
20
21#include "headers.h"
22
23/*--------------------------------------------------------------------------
24 * HYPRE_ParCSRMatrixCreate
25 *--------------------------------------------------------------------------*/
26
27int
28HYPRE_ParCSRMatrixCreate( MPI_Comm comm,
29 HYPRE_BigInt global_num_rows,
30 HYPRE_BigInt global_num_cols,
31 HYPRE_BigInt *row_starts,
32 HYPRE_BigInt *col_starts,
33 int num_cols_offd,
34 int num_nonzeros_diag,
35 int num_nonzeros_offd,
36 HYPRE_ParCSRMatrix *matrix )
37{
38 *matrix = (HYPRE_ParCSRMatrix)
39 hypre_ParCSRMatrixCreate(comm, global_num_rows, global_num_cols,
40 row_starts, col_starts, num_cols_offd,
41 num_nonzeros_diag, num_nonzeros_offd);
42
43 if (!matrix) hypre_error_in_arg(9);
44 return hypre_error_flag;
45}
46
47/*--------------------------------------------------------------------------
48 * HYPRE_ParCSRMatrixDestroy
49 *--------------------------------------------------------------------------*/
50
51int
52HYPRE_ParCSRMatrixDestroy( HYPRE_ParCSRMatrix matrix )
53{
54 return( hypre_ParCSRMatrixDestroy( (hypre_ParCSRMatrix *) matrix ) );
55}
56
57/*--------------------------------------------------------------------------
58 * HYPRE_ParCSRMatrixInitialize
59 *--------------------------------------------------------------------------*/
60
61int
62HYPRE_ParCSRMatrixInitialize( HYPRE_ParCSRMatrix matrix )
63{
64 return ( hypre_ParCSRMatrixInitialize( (hypre_ParCSRMatrix *) matrix ) );
65}
66
67/*--------------------------------------------------------------------------
68 * HYPRE_ParCSRMatrixRead
69 *--------------------------------------------------------------------------*/
70
71int
72HYPRE_ParCSRMatrixRead( MPI_Comm comm,
73 const char *file_name,
74 HYPRE_ParCSRMatrix *matrix)
75{
76 *matrix = (HYPRE_ParCSRMatrix) hypre_ParCSRMatrixRead( comm, file_name );
77 if (!matrix) hypre_error_in_arg(3);
78 return hypre_error_flag;
79}
80
81/*--------------------------------------------------------------------------
82 * HYPRE_ParCSRMatrixPrint
83 *--------------------------------------------------------------------------*/
84
85int
86HYPRE_ParCSRMatrixPrint( HYPRE_ParCSRMatrix matrix,
87 const char *file_name )
88{
89 hypre_ParCSRMatrixPrint( (hypre_ParCSRMatrix *) matrix,
90 file_name );
91 return hypre_error_flag;
92}
93
94/*--------------------------------------------------------------------------
95 * HYPRE_ParCSRMatrixPrintIJ
96 *--------------------------------------------------------------------------*/
97
98int
99HYPRE_ParCSRMatrixPrintIJ( HYPRE_ParCSRMatrix matrix,
100 int base_i, int base_j, const char *file_name )
101{
102 hypre_ParCSRMatrixPrintIJ( (hypre_ParCSRMatrix *) matrix, base_i, base_j,
103 file_name );
104 return hypre_error_flag;
105}
106
107/*--------------------------------------------------------------------------
108 * HYPRE_ParCSRMatrixGetComm
109 *--------------------------------------------------------------------------*/
110
111int
112HYPRE_ParCSRMatrixGetComm( HYPRE_ParCSRMatrix matrix,
113 MPI_Comm *comm )
114{
115 if (!matrix) hypre_error_in_arg(1);
116 *comm = hypre_ParCSRMatrixComm((hypre_ParCSRMatrix *) matrix);
117
118 return hypre_error_flag;
119}
120/*--------------------------------------------------------------------------
121 * HYPRE_ParCSRMatrixGetDims
122 *--------------------------------------------------------------------------*/
123
124int
125HYPRE_ParCSRMatrixGetDims( HYPRE_ParCSRMatrix matrix,
126 HYPRE_BigInt *M, HYPRE_BigInt *N )
127{
128 if (!matrix) hypre_error_in_arg(1);
129
130 *M = hypre_ParCSRMatrixGlobalNumRows((hypre_ParCSRMatrix *) matrix);
131 *N = hypre_ParCSRMatrixGlobalNumCols((hypre_ParCSRMatrix *) matrix);
132
133 return hypre_error_flag;
134}
135
136/*--------------------------------------------------------------------------
137 * HYPRE_ParCSRMatrixGetRowPartitioning
138 *--------------------------------------------------------------------------*/
139
140int
141HYPRE_ParCSRMatrixGetRowPartitioning( HYPRE_ParCSRMatrix matrix,
142 HYPRE_BigInt **row_partitioning_ptr)
143{
144 HYPRE_BigInt *row_partitioning, *row_starts;
145 int num_procs, i;
146
147 if (!matrix)
148 {
149 hypre_error_in_arg(1);
150 return hypre_error_flag;
151 }
152
153 MPI_Comm_size(hypre_ParCSRMatrixComm((hypre_ParCSRMatrix *) matrix),
154 &num_procs);
155 row_starts = hypre_ParCSRMatrixRowStarts((hypre_ParCSRMatrix *) matrix);
156 if (!row_starts) return -1;
157 row_partitioning = hypre_CTAlloc(HYPRE_BigInt, num_procs+1);
158 for (i=0; i < num_procs + 1; i++)
159 row_partitioning[i] = row_starts[i];
160
161 *row_partitioning_ptr = row_partitioning;
162 return hypre_error_flag;
163}
164
165/*--------------------------------------------------------------------------
166 * HYPRE_ParCSRMatrixGetColPartitioning
167 *--------------------------------------------------------------------------*/
168
169int
170HYPRE_ParCSRMatrixGetColPartitioning( HYPRE_ParCSRMatrix matrix,
171 HYPRE_BigInt **col_partitioning_ptr)
172{
173 HYPRE_BigInt *col_partitioning, *col_starts;
174 int num_procs, i;
175
176 if (!matrix)
177 {
178 hypre_error_in_arg(1);
179 return hypre_error_flag;
180 }
181
182 MPI_Comm_size(hypre_ParCSRMatrixComm((hypre_ParCSRMatrix *) matrix),
183 &num_procs);
184 col_starts = hypre_ParCSRMatrixColStarts((hypre_ParCSRMatrix *) matrix);
185 if (!col_starts) return -1;
186 col_partitioning = hypre_CTAlloc(HYPRE_BigInt, num_procs+1);
187 for (i=0; i < num_procs + 1; i++)
188 col_partitioning[i] = col_starts[i];
189
190 *col_partitioning_ptr = col_partitioning;
191 return hypre_error_flag;
192}
193
194
195
196/*--------------------------------------------------------------------------
197 * HYPRE_ParCSRMatrixGetLocalRange
198 *--------------------------------------------------------------------------*/
199/**
200Returns range of rows and columns owned by this processor.
201Not collective.
202
203@return integer error code
204@param HYPRE_ParCSRMatrix matrix [IN]
205 the matrix to be operated on.
206@param int *row_start [OUT]
207 the global number of the first row stored on this processor
208@param int *row_end [OUT]
209 the global number of the first row stored on this processor
210@param int *col_start [OUT]
211 the global number of the first column stored on this processor
212@param int *col_end [OUT]
213 the global number of the first column stored on this processor
214*/
215
216int
217HYPRE_ParCSRMatrixGetLocalRange( HYPRE_ParCSRMatrix matrix,
218 HYPRE_BigInt *row_start,
219 HYPRE_BigInt *row_end,
220 HYPRE_BigInt *col_start,
221 HYPRE_BigInt *col_end )
222{
223 if (!matrix)
224 {
225 hypre_error_in_arg(1);
226 return hypre_error_flag;
227 }
228
229
230 hypre_ParCSRMatrixGetLocalRange( (hypre_ParCSRMatrix *) matrix,
231 row_start, row_end, col_start, col_end );
232 return hypre_error_flag;
233}
234
235/*--------------------------------------------------------------------------
236 * HYPRE_ParCSRMatrixGetRow
237 *--------------------------------------------------------------------------*/
238
239int
240HYPRE_ParCSRMatrixGetRow( HYPRE_ParCSRMatrix matrix,
241 HYPRE_BigInt row,
242 int *size,
243 HYPRE_BigInt **col_ind,
244 double **values )
245{
246 if (!matrix)
247 {
248 hypre_error_in_arg(1);
249 return hypre_error_flag;
250 }
251
252
253 hypre_ParCSRMatrixGetRow( (hypre_ParCSRMatrix *) matrix,
254 row, size, col_ind, values );
255 return hypre_error_flag;
256}
257
258/*--------------------------------------------------------------------------
259 * HYPRE_ParCSRMatrixRestoreRow
260 *--------------------------------------------------------------------------*/
261
262int
263HYPRE_ParCSRMatrixRestoreRow( HYPRE_ParCSRMatrix matrix,
264 HYPRE_BigInt row,
265 int *size,
266 HYPRE_BigInt **col_ind,
267 double **values )
268{
269 if (!matrix)
270 {
271 hypre_error_in_arg(1);
272 return hypre_error_flag;
273 }
274
275
276 hypre_ParCSRMatrixRestoreRow( (hypre_ParCSRMatrix *) matrix,
277 row, size, col_ind, values );
278 return hypre_error_flag;
279}
280
281/*--------------------------------------------------------------------------
282 * HYPRE_CSRMatrixToParCSRMatrix
283 *--------------------------------------------------------------------------*/
284
285int
286HYPRE_CSRMatrixToParCSRMatrix( MPI_Comm comm,
287 HYPRE_CSRMatrix A_CSR,
288 HYPRE_BigInt *row_partitioning,
289 HYPRE_BigInt *col_partitioning,
290 HYPRE_ParCSRMatrix *matrix)
291{
292 *matrix = (HYPRE_ParCSRMatrix) hypre_CSRMatrixToParCSRMatrix( comm,
293 (hypre_CSRMatrix *) A_CSR, row_partitioning,
294 col_partitioning) ;
295 if (!matrix)
296 hypre_error_in_arg(5);
297 return hypre_error_flag;
298}
299
300/*--------------------------------------------------------------------------
301 * HYPRE_ParCSRMatrixMatvec
302 *--------------------------------------------------------------------------*/
303
304int
305HYPRE_ParCSRMatrixMatvec( double alpha,
306 HYPRE_ParCSRMatrix A,
307 HYPRE_ParVector x,
308 double beta,
309 HYPRE_ParVector y )
310{
311 return ( hypre_ParCSRMatrixMatvec( alpha, (hypre_ParCSRMatrix *) A,
312 (hypre_ParVector *) x, beta, (hypre_ParVector *) y) );
313}
314
315/*--------------------------------------------------------------------------
316 * HYPRE_ParCSRMatrixMatvecT
317 *--------------------------------------------------------------------------*/
318
319int
320HYPRE_ParCSRMatrixMatvecT( double alpha,
321 HYPRE_ParCSRMatrix A,
322 HYPRE_ParVector x,
323 double beta,
324 HYPRE_ParVector y )
325{
326 return ( hypre_ParCSRMatrixMatvecT( alpha, (hypre_ParCSRMatrix *) A,
327 (hypre_ParVector *) x, beta, (hypre_ParVector *) y) );
328}
Note: See TracBrowser for help on using the repository browser.