source: CIVL/examples/mpi-omp/AMG2013/IJ_mv/aux_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: 6.6 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 *
18 * Member functions for hypre_AuxParCSRMatrix class.
19 *
20 *****************************************************************************/
21
22#include "IJ_mv.h"
23#include "aux_parcsr_matrix.h"
24
25/*--------------------------------------------------------------------------
26 * hypre_AuxParCSRMatrixCreate
27 *--------------------------------------------------------------------------*/
28
29int
30hypre_AuxParCSRMatrixCreate( hypre_AuxParCSRMatrix **aux_matrix,
31 int local_num_rows,
32 int local_num_cols,
33 int *sizes)
34{
35 hypre_AuxParCSRMatrix *matrix;
36
37 matrix = hypre_CTAlloc(hypre_AuxParCSRMatrix, 1);
38
39 hypre_AuxParCSRMatrixLocalNumRows(matrix) = local_num_rows;
40 hypre_AuxParCSRMatrixLocalNumCols(matrix) = local_num_cols;
41
42 if (sizes)
43 {
44 hypre_AuxParCSRMatrixRowSpace(matrix) = sizes;
45 }
46 else
47 {
48 hypre_AuxParCSRMatrixRowSpace(matrix) = NULL;
49 }
50
51 /* set defaults */
52 hypre_AuxParCSRMatrixNeedAux(matrix) = 1;
53 hypre_AuxParCSRMatrixMaxOffProcElmts(matrix) = 0;
54 hypre_AuxParCSRMatrixCurrentNumElmts(matrix) = 0;
55 hypre_AuxParCSRMatrixOffProcIIndx(matrix) = 0;
56 hypre_AuxParCSRMatrixRowLength(matrix) = NULL;
57 hypre_AuxParCSRMatrixAuxJ(matrix) = NULL;
58 hypre_AuxParCSRMatrixAuxData(matrix) = NULL;
59 hypre_AuxParCSRMatrixIndxDiag(matrix) = NULL;
60 hypre_AuxParCSRMatrixIndxOffd(matrix) = NULL;
61 /* stash for setting or adding off processor values */
62 hypre_AuxParCSRMatrixOffProcI(matrix) = NULL;
63 hypre_AuxParCSRMatrixOffProcJ(matrix) = NULL;
64 hypre_AuxParCSRMatrixOffProcData(matrix) = NULL;
65 hypre_AuxParCSRMatrixAuxOffdJ(matrix) = NULL;
66
67
68 *aux_matrix = matrix;
69 return 0;
70}
71
72/*--------------------------------------------------------------------------
73 * hypre_AuxParCSRMatrixDestroy
74 *--------------------------------------------------------------------------*/
75
76int
77hypre_AuxParCSRMatrixDestroy( hypre_AuxParCSRMatrix *matrix )
78{
79 int ierr=0;
80 int i;
81 int num_rows;
82
83 if (matrix)
84 {
85 num_rows = hypre_AuxParCSRMatrixLocalNumRows(matrix);
86 if (hypre_AuxParCSRMatrixRowLength(matrix))
87 hypre_TFree(hypre_AuxParCSRMatrixRowLength(matrix));
88 if (hypre_AuxParCSRMatrixRowSpace(matrix))
89 hypre_TFree(hypre_AuxParCSRMatrixRowSpace(matrix));
90 if (hypre_AuxParCSRMatrixAuxJ(matrix))
91 {
92 for (i=0; i < num_rows; i++)
93 hypre_TFree(hypre_AuxParCSRMatrixAuxJ(matrix)[i]);
94 hypre_TFree(hypre_AuxParCSRMatrixAuxJ(matrix));
95 }
96 if (hypre_AuxParCSRMatrixAuxData(matrix))
97 {
98 for (i=0; i < num_rows; i++)
99 hypre_TFree(hypre_AuxParCSRMatrixAuxData(matrix)[i]);
100 hypre_TFree(hypre_AuxParCSRMatrixAuxData(matrix));
101 }
102 if (hypre_AuxParCSRMatrixIndxDiag(matrix))
103 hypre_TFree(hypre_AuxParCSRMatrixIndxDiag(matrix));
104 if (hypre_AuxParCSRMatrixIndxOffd(matrix))
105 hypre_TFree(hypre_AuxParCSRMatrixIndxOffd(matrix));
106 if (hypre_AuxParCSRMatrixOffProcI(matrix))
107 hypre_TFree(hypre_AuxParCSRMatrixOffProcI(matrix));
108 if (hypre_AuxParCSRMatrixOffProcJ(matrix))
109 hypre_TFree(hypre_AuxParCSRMatrixOffProcJ(matrix));
110 if (hypre_AuxParCSRMatrixOffProcData(matrix))
111 hypre_TFree(hypre_AuxParCSRMatrixOffProcData(matrix));
112 if (hypre_AuxParCSRMatrixAuxOffdJ(matrix))
113 hypre_TFree(hypre_AuxParCSRMatrixAuxOffdJ(matrix));
114 hypre_TFree(matrix);
115 }
116
117 return ierr;
118}
119
120/*--------------------------------------------------------------------------
121 * hypre_AuxParCSRMatrixInitialize
122 *--------------------------------------------------------------------------*/
123
124int
125hypre_AuxParCSRMatrixInitialize( hypre_AuxParCSRMatrix *matrix )
126{
127 int local_num_rows = hypre_AuxParCSRMatrixLocalNumRows(matrix);
128 int *row_space = hypre_AuxParCSRMatrixRowSpace(matrix);
129 int max_off_proc_elmts = hypre_AuxParCSRMatrixMaxOffProcElmts(matrix);
130 HYPRE_BigInt **aux_j;
131 double **aux_data;
132 int i;
133
134 if (local_num_rows < 0)
135 return -1;
136 if (local_num_rows == 0)
137 return 0;
138 /* allocate stash for setting or adding off processor values */
139 if (max_off_proc_elmts > 0)
140 {
141 hypre_AuxParCSRMatrixOffProcI(matrix) = hypre_CTAlloc(HYPRE_BigInt,
142 2*max_off_proc_elmts);
143 hypre_AuxParCSRMatrixOffProcJ(matrix) = hypre_CTAlloc(HYPRE_BigInt,
144 max_off_proc_elmts);
145 hypre_AuxParCSRMatrixOffProcData(matrix) = hypre_CTAlloc(double,
146 max_off_proc_elmts);
147 }
148 if (hypre_AuxParCSRMatrixNeedAux(matrix))
149 {
150 aux_j = hypre_CTAlloc(HYPRE_BigInt *, local_num_rows);
151 aux_data = hypre_CTAlloc(double *, local_num_rows);
152 if (!hypre_AuxParCSRMatrixRowLength(matrix))
153 hypre_AuxParCSRMatrixRowLength(matrix) =
154 hypre_CTAlloc(int, local_num_rows);
155 if (row_space)
156 {
157 for (i=0; i < local_num_rows; i++)
158 {
159 aux_j[i] = hypre_CTAlloc(HYPRE_BigInt, row_space[i]);
160 aux_data[i] = hypre_CTAlloc(double, row_space[i]);
161 }
162 }
163 else
164 {
165 row_space = hypre_CTAlloc(int, local_num_rows);
166 for (i=0; i < local_num_rows; i++)
167 {
168 row_space[i] = 30;
169 aux_j[i] = hypre_CTAlloc(HYPRE_BigInt, 30);
170 aux_data[i] = hypre_CTAlloc(double, 30);
171 }
172 hypre_AuxParCSRMatrixRowSpace(matrix) = row_space;
173 }
174 hypre_AuxParCSRMatrixAuxJ(matrix) = aux_j;
175 hypre_AuxParCSRMatrixAuxData(matrix) = aux_data;
176 }
177 else
178 {
179 hypre_AuxParCSRMatrixIndxDiag(matrix) = hypre_CTAlloc(int,local_num_rows);
180 hypre_AuxParCSRMatrixIndxOffd(matrix) = hypre_CTAlloc(int,local_num_rows);
181 }
182
183 return 0;
184}
185
186/*--------------------------------------------------------------------------
187 * hypre_AuxParCSRMatrixSetMaxOffProcElmts
188 *--------------------------------------------------------------------------*/
189
190int
191hypre_AuxParCSRMatrixSetMaxOffPRocElmts( hypre_AuxParCSRMatrix *matrix,
192 int max_off_proc_elmts )
193{
194 int ierr = 0;
195 hypre_AuxParCSRMatrixMaxOffProcElmts(matrix) = max_off_proc_elmts;
196 return ierr;
197}
198
Note: See TracBrowser for help on using the repository browser.