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