source: CIVL/examples/mpi-omp/AMG2013/seq_mv/big_csr_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: 4.4 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 * Member functions for hypre_BigCSRMatrix class.
18 *
19 *****************************************************************************/
20
21#include "headers.h"
22
23/*--------------------------------------------------------------------------
24 * hypre_BigCSRMatrixCreate
25 *--------------------------------------------------------------------------*/
26
27hypre_BigCSRMatrix *
28hypre_BigCSRMatrixCreate( int num_rows,
29 int num_cols,
30 int num_nonzeros )
31{
32 hypre_BigCSRMatrix *matrix;
33
34 matrix = hypre_CTAlloc(hypre_BigCSRMatrix, 1);
35
36 hypre_BigCSRMatrixData(matrix) = NULL;
37 hypre_BigCSRMatrixI(matrix) = NULL;
38 hypre_BigCSRMatrixJ(matrix) = NULL;
39 hypre_BigCSRMatrixNumRows(matrix) = num_rows;
40 hypre_BigCSRMatrixNumCols(matrix) = num_cols;
41 hypre_BigCSRMatrixNumNonzeros(matrix) = num_nonzeros;
42
43 /* set defaults */
44 hypre_BigCSRMatrixOwnsData(matrix) = 1;
45
46
47 return matrix;
48}
49/*--------------------------------------------------------------------------
50 * hypre_BigCSRMatrixDestroy
51 *--------------------------------------------------------------------------*/
52
53int
54hypre_BigCSRMatrixDestroy( hypre_BigCSRMatrix *matrix )
55{
56 int ierr=0;
57
58 if (matrix)
59 {
60 hypre_TFree(hypre_BigCSRMatrixI(matrix));
61 if ( hypre_BigCSRMatrixOwnsData(matrix) )
62 {
63 hypre_TFree(hypre_BigCSRMatrixData(matrix));
64 hypre_TFree(hypre_BigCSRMatrixJ(matrix));
65 }
66 hypre_TFree(matrix);
67 }
68
69 return ierr;
70}
71
72/*--------------------------------------------------------------------------
73 * hypre_BigCSRMatrixInitialize
74 *--------------------------------------------------------------------------*/
75
76int
77hypre_BigCSRMatrixInitialize( hypre_BigCSRMatrix *matrix )
78{
79 int num_rows = hypre_BigCSRMatrixNumRows(matrix);
80 int num_nonzeros = hypre_BigCSRMatrixNumNonzeros(matrix);
81
82 int ierr=0;
83
84 if ( ! hypre_BigCSRMatrixData(matrix) && num_nonzeros )
85 hypre_BigCSRMatrixData(matrix) = hypre_CTAlloc(double, num_nonzeros);
86 if ( ! hypre_BigCSRMatrixI(matrix) )
87 hypre_BigCSRMatrixI(matrix) = hypre_CTAlloc(int, num_rows + 1);
88 if ( ! hypre_BigCSRMatrixJ(matrix) && num_nonzeros )
89 hypre_BigCSRMatrixJ(matrix) = hypre_CTAlloc(HYPRE_BigInt, num_nonzeros);
90
91 return ierr;
92}
93
94/*--------------------------------------------------------------------------
95 * hypre_BigCSRMatrixSetDataOwner
96 *--------------------------------------------------------------------------*/
97
98int
99hypre_BigCSRMatrixSetDataOwner( hypre_BigCSRMatrix *matrix,
100 int owns_data )
101{
102 int ierr=0;
103
104 hypre_BigCSRMatrixOwnsData(matrix) = owns_data;
105
106 return ierr;
107}
108
109/*--------------------------------------------------------------------------
110 * hypre_BigCSRMatrixCopy:
111 * copys A to B,
112 * if copy_data = 0 only the structure of A is copied to B.
113 * the routine does not check if the dimensions of A and B match !!!
114 *--------------------------------------------------------------------------*/
115
116int
117hypre_BigCSRMatrixCopy( hypre_BigCSRMatrix *A, hypre_BigCSRMatrix *B, int copy_data )
118{
119 int ierr=0;
120 int num_rows = hypre_BigCSRMatrixNumRows(A);
121 int *A_i = hypre_BigCSRMatrixI(A);
122 HYPRE_BigInt *A_j = hypre_BigCSRMatrixJ(A);
123 double *A_data;
124 int *B_i = hypre_BigCSRMatrixI(B);
125 HYPRE_BigInt *B_j = hypre_BigCSRMatrixJ(B);
126 double *B_data;
127
128 int i, j;
129
130 for (i=0; i < num_rows; i++)
131 {
132 B_i[i] = A_i[i];
133 for (j=A_i[i]; j < A_i[i+1]; j++)
134 {
135 B_j[j] = A_j[j];
136 }
137 }
138 B_i[num_rows] = A_i[num_rows];
139 if (copy_data)
140 {
141 A_data = hypre_BigCSRMatrixData(A);
142 B_data = hypre_BigCSRMatrixData(B);
143 for (i=0; i < num_rows; i++)
144 {
145 for (j=A_i[i]; j < A_i[i+1]; j++)
146 {
147 B_data[j] = A_data[j];
148 }
149 }
150 }
151 return ierr;
152}
153
Note: See TracBrowser for help on using the repository browser.