1 //////////////////////////////////////////////////////////////////////// 2 // 3 // Copyright (C) 2005-2021 The Octave Project Developers 4 // 5 // See the file COPYRIGHT.md in the top-level directory of this 6 // distribution or <https://octave.org/copyright/>. 7 // 8 // This file is part of Octave. 9 // 10 // Octave is free software: you can redistribute it and/or modify it 11 // under the terms of the GNU General Public License as published by 12 // the Free Software Foundation, either version 3 of the License, or 13 // (at your option) any later version. 14 // 15 // Octave is distributed in the hope that it will be useful, but 16 // WITHOUT ANY WARRANTY; without even the implied warranty of 17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 // GNU General Public License for more details. 19 // 20 // You should have received a copy of the GNU General Public License 21 // along with Octave; see the file COPYING. If not, see 22 // <https://www.gnu.org/licenses/>. 23 // 24 //////////////////////////////////////////////////////////////////////// 25 26 #if ! defined (octave_oct_sparse_h) 27 #define octave_oct_sparse_h 1 28 29 #include "octave-config.h" 30 31 #if defined (HAVE_SUITESPARSE_AMD_H) 32 # include <suitesparse/amd.h> 33 #elif defined (HAVE_UFSPARSE_AMD_H) 34 # include <ufsparse/amd.h> 35 #elif defined (HAVE_AMD_AMD_H) 36 # include <amd/amd.h> 37 #elif defined (HAVE_AMD_H) 38 # include <amd.h> 39 #endif 40 41 #if defined (HAVE_SUITESPARSE_CCOLAMD_H) 42 # include <suitesparse/ccolamd.h> 43 #elif defined (HAVE_UFSPARSE_CCOLAMD_H) 44 # include <ufsparse/ccolamd.h> 45 #elif defined (HAVE_CCOLAMD_CCOLAMD_H) 46 # include <ccolamd/ccolamd.h> 47 #elif defined (HAVE_CCOLAMD_H) 48 # include <ccolamd.h> 49 #endif 50 51 #if defined (HAVE_SUITESPARSE_CHOLMOD_H) 52 # include <suitesparse/cholmod.h> 53 #elif defined (HAVE_UFSPARSE_CHOLMOD_H) 54 # include <ufsparse/cholmod.h> 55 #elif defined (HAVE_CHOLMOD_CHOLMOD_H) 56 # include <cholmod/cholmod.h> 57 #elif defined (HAVE_CHOLMOD_H) 58 # include <cholmod.h> 59 #endif 60 61 #if defined (HAVE_SUITESPARSE_COLAMD_H) 62 # include <suitesparse/colamd.h> 63 #elif defined (HAVE_UFSPARSE_COLAMD_H) 64 # include <ufsparse/colamd.h> 65 #elif defined (HAVE_COLAMD_COLAMD_H) 66 # include <colamd/colamd.h> 67 #elif defined (HAVE_COLAMD_H) 68 # include <colamd.h> 69 #endif 70 71 #if defined (HAVE_SUITESPARSE_CS_H) 72 # include <suitesparse/cs.h> 73 #elif defined (HAVE_UFSPARSE_CS_H) 74 # include <ufsparse/cs.h> 75 #elif defined (HAVE_CXSPARSE_CS_H) 76 # include <cxsparse/cs.h> 77 #elif defined (HAVE_CS_H) 78 # include <cs.h> 79 #endif 80 81 #if defined (HAVE_SUITESPARSE_UMFPACK_H) 82 # include <suitesparse/umfpack.h> 83 #elif defined (HAVE_UFSPARSE_UMFPACK_H) 84 # include <ufsparse/umfpack.h> 85 #elif defined (HAVE_UMFPACK_UMFPACK_H) 86 # include <umfpack/umfpack.h> 87 #elif defined (HAVE_UMFPACK_H) 88 # include <umfpack.h> 89 #endif 90 91 // Cope with new SuiteSparse versions 92 93 #if defined (SUITESPARSE_VERSION) 94 # if (SUITESPARSE_VERSION >= SUITESPARSE_VER_CODE (4, 3)) 95 # define SUITESPARSE_NAME(name) SuiteSparse_ ## name 96 # define SUITESPARSE_ASSIGN_FPTR(f_name, f_var, f_assign) (SuiteSparse_config.f_name = f_assign) 97 # define SUITESPARSE_ASSIGN_FPTR2(f_name, f_var, f_assign) (SuiteSparse_config.f_name = SUITESPARSE_NAME (f_assign)) 98 # else 99 # define SUITESPARSE_ASSIGN_FPTR(f_name, f_var, f_assign) (f_var = f_assign) 100 # define SUITESPARSE_ASSIGN_FPTR2(f_name, f_var, f_assign) (f_var = CHOLMOD_NAME (f_assign)) 101 # endif 102 #endif 103 104 // Function names depend on integer type. 105 106 #if defined (HAVE_AMD) 107 # if defined (OCTAVE_ENABLE_64) 108 # define AMD_NAME(name) amd_l ## name 109 # else 110 # define AMD_NAME(name) amd ## name 111 # endif 112 #endif 113 114 #if defined (HAVE_CCOLAMD) 115 # if defined (OCTAVE_ENABLE_64) 116 # define CCOLAMD_NAME(name) ccolamd_l ## name 117 # define CSYMAMD_NAME(name) csymamd_l ## name 118 # else 119 # define CCOLAMD_NAME(name) ccolamd ## name 120 # define CSYMAMD_NAME(name) csymamd ## name 121 # endif 122 #endif 123 124 #if defined (HAVE_CHOLMOD) 125 # if defined (OCTAVE_ENABLE_64) 126 # define CHOLMOD_NAME(name) cholmod_l_ ## name 127 # else 128 # define CHOLMOD_NAME(name) cholmod_ ## name 129 # endif 130 #endif 131 132 #if defined (HAVE_COLAMD) 133 # if defined (OCTAVE_ENABLE_64) 134 # define COLAMD_NAME(name) colamd_l ## name 135 # define SYMAMD_NAME(name) symamd_l ## name 136 # else 137 # define COLAMD_NAME(name) colamd ## name 138 # define SYMAMD_NAME(name) symamd ## name 139 # endif 140 #endif 141 142 #if defined (HAVE_CXSPARSE) 143 # if defined (OCTAVE_ENABLE_64) 144 # define CXSPARSE_DNAME(name) cs_dl ## name 145 # define CXSPARSE_ZNAME(name) cs_cl ## name 146 # else 147 # define CXSPARSE_DNAME(name) cs_di ## name 148 # define CXSPARSE_ZNAME(name) cs_ci ## name 149 # endif 150 #endif 151 152 #if defined (HAVE_UMFPACK) 153 # if defined (OCTAVE_ENABLE_64) 154 # define UMFPACK_DNAME(name) umfpack_dl_ ## name 155 # define UMFPACK_ZNAME(name) umfpack_zl_ ## name 156 # else 157 # define UMFPACK_DNAME(name) umfpack_di_ ## name 158 # define UMFPACK_ZNAME(name) umfpack_zi_ ## name 159 # endif 160 #endif 161 162 #if (defined (HAVE_AMD) || defined (HAVE_CCOLAMD) \ 163 || defined (HAVE_CHOLMOD) || defined (HAVE_COLAMD) \ 164 || defined (HAVE_CXSPARSE) || defined (HAVE_UMFPACK)) 165 166 namespace octave 167 { 168 # if defined (OCTAVE_ENABLE_64) 169 typedef SuiteSparse_long suitesparse_integer; 170 # else 171 typedef int suitesparse_integer; 172 # endif 173 174 extern suitesparse_integer * 175 to_suitesparse_intptr (octave_idx_type *i); 176 177 extern const suitesparse_integer * 178 to_suitesparse_intptr (const octave_idx_type *i); 179 180 extern octave_idx_type* 181 to_octave_idx_type_ptr (suitesparse_integer *i); 182 183 extern const octave_idx_type* 184 to_octave_idx_type_ptr (const suitesparse_integer *i); 185 } 186 187 #endif 188 #endif 189