1 /******************************************************************************
2  * Copyright 1998-2019 Lawrence Livermore National Security, LLC and other
3  * HYPRE Project Developers. See the top-level COPYRIGHT file for details.
4  *
5  * SPDX-License-Identifier: (Apache-2.0 OR MIT)
6  ******************************************************************************/
7 
8 #ifndef FORTRAN_STYLE_MATRIX
9 #define FORTRAN_STYLE_MATRIX
10 
11 #include "HYPRE_utilities.h"
12 
13 typedef struct
14 {
15   HYPRE_BigInt	globalHeight;
16   HYPRE_BigInt	height;
17   HYPRE_BigInt	width;
18   HYPRE_Real* value;
19   HYPRE_Int		ownsValues;
20 } utilities_FortranMatrix;
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 utilities_FortranMatrix*
27 utilities_FortranMatrixCreate(void);
28 void
29 utilities_FortranMatrixAllocateData( HYPRE_BigInt h, HYPRE_BigInt w,
30 				     utilities_FortranMatrix* mtx );
31 void
32 utilities_FortranMatrixWrap( HYPRE_Real*, HYPRE_BigInt gh, HYPRE_BigInt h, HYPRE_BigInt w,
33 			     utilities_FortranMatrix* mtx );
34 void
35 utilities_FortranMatrixDestroy( utilities_FortranMatrix* mtx );
36 
37 HYPRE_BigInt
38 utilities_FortranMatrixGlobalHeight( utilities_FortranMatrix* mtx );
39 HYPRE_BigInt
40 utilities_FortranMatrixHeight( utilities_FortranMatrix* mtx );
41 HYPRE_BigInt
42 utilities_FortranMatrixWidth( utilities_FortranMatrix* mtx );
43 HYPRE_Real*
44 utilities_FortranMatrixValues( utilities_FortranMatrix* mtx );
45 
46 void
47 utilities_FortranMatrixClear( utilities_FortranMatrix* mtx );
48 void
49 utilities_FortranMatrixClearL( utilities_FortranMatrix* mtx );
50 void
51 utilities_FortranMatrixSetToIdentity( utilities_FortranMatrix* mtx );
52 
53 void
54 utilities_FortranMatrixTransposeSquare( utilities_FortranMatrix* mtx );
55 void
56 utilities_FortranMatrixSymmetrize( utilities_FortranMatrix* mtx );
57 
58 void
59 utilities_FortranMatrixCopy( utilities_FortranMatrix* src, HYPRE_Int t,
60 			     utilities_FortranMatrix* dest );
61 void
62 utilities_FortranMatrixIndexCopy( HYPRE_Int* index,
63 				  utilities_FortranMatrix* src, HYPRE_Int t,
64 				  utilities_FortranMatrix* dest );
65 
66 void
67 utilities_FortranMatrixSetDiagonal( utilities_FortranMatrix* mtx,
68 				    utilities_FortranMatrix* d );
69 void
70 utilities_FortranMatrixGetDiagonal( utilities_FortranMatrix* mtx,
71 				    utilities_FortranMatrix* d );
72 void
73 utilities_FortranMatrixAdd( HYPRE_Real a,
74 			    utilities_FortranMatrix* mtxA,
75 			    utilities_FortranMatrix* mtxB,
76 			    utilities_FortranMatrix* mtxC );
77 void
78 utilities_FortranMatrixDMultiply( utilities_FortranMatrix* d,
79 				  utilities_FortranMatrix* mtx );
80 void
81 utilities_FortranMatrixMultiplyD( utilities_FortranMatrix* mtx,
82 				  utilities_FortranMatrix* d );
83 void
84 utilities_FortranMatrixMultiply( utilities_FortranMatrix* mtxA, HYPRE_Int tA,
85 				 utilities_FortranMatrix* mtxB, HYPRE_Int tB,
86 				 utilities_FortranMatrix* mtxC );
87 HYPRE_Real
88 utilities_FortranMatrixFNorm( utilities_FortranMatrix* mtx );
89 
90 HYPRE_Real
91 utilities_FortranMatrixValue( utilities_FortranMatrix* mtx,
92 			      HYPRE_BigInt i, HYPRE_BigInt j );
93 HYPRE_Real*
94 utilities_FortranMatrixValuePtr( utilities_FortranMatrix* mtx,
95 				 HYPRE_BigInt i, HYPRE_BigInt j );
96 HYPRE_Real
97 utilities_FortranMatrixMaxValue( utilities_FortranMatrix* mtx );
98 
99 void
100 utilities_FortranMatrixSelectBlock( utilities_FortranMatrix* mtx,
101 				    HYPRE_BigInt iFrom, HYPRE_BigInt iTo,
102 				    HYPRE_BigInt jFrom, HYPRE_BigInt jTo,
103 				    utilities_FortranMatrix* block );
104 void
105 utilities_FortranMatrixUpperInv( utilities_FortranMatrix* u );
106 
107 HYPRE_Int
108 utilities_FortranMatrixPrint( utilities_FortranMatrix* mtx, const char *fileName);
109 
110 #ifdef __cplusplus
111 }
112 #endif
113 
114 #endif /* FORTRAN_STYLE_MATRIX */
115 
116