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 __HYPRE_FEI__ 9 #define __HYPRE_FEI__ 10 11 #include "HYPRE.h" 12 #include "IJ_mv/HYPRE_IJ_mv.h" 13 #include "parcsr_mv/HYPRE_parcsr_mv.h" 14 #include "parcsr_mv/_hypre_parcsr_mv.h" 15 #include "parcsr_ls/_hypre_parcsr_ls.h" 16 #include "parcsr_ls/HYPRE_parcsr_ls.h" 17 18 #ifdef __cplusplus 19 extern "C" 20 { 21 #endif 22 23 #include "HYPRE_MHMatrix.h" 24 25 typedef struct HYPRE_LSI_DDIlut_Struct 26 { 27 MPI_Comm comm; 28 MH_Matrix *mh_mat; 29 double thresh; 30 double fillin; 31 int overlap; 32 int Nrows; 33 int extNrows; 34 int *mat_ia; 35 int *mat_ja; 36 double *mat_aa; 37 int outputLevel; 38 int reorder; 39 int *order_array; 40 int *reorder_array; 41 } 42 HYPRE_LSI_DDIlut; 43 44 /* HYPRE_LSI_ddict.c */ 45 int HYPRE_LSI_DDICTCreate( MPI_Comm comm, HYPRE_Solver *solver ); 46 int HYPRE_LSI_DDICTDestroy( HYPRE_Solver solver ); 47 int HYPRE_LSI_DDICTSetFillin( HYPRE_Solver solver, double fillin); 48 int HYPRE_LSI_DDICTSetOutputLevel( HYPRE_Solver solver, int level); 49 int HYPRE_LSI_DDICTSetDropTolerance( HYPRE_Solver solver, double thresh); 50 int HYPRE_LSI_DDICTSolve( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 51 HYPRE_ParVector b, HYPRE_ParVector x ); 52 int HYPRE_LSI_DDICTSetup( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 53 HYPRE_ParVector b, HYPRE_ParVector x ); 54 /* HYPRE_LSI_ddilut.c */ 55 int HYPRE_LSI_DDIlutCreate( MPI_Comm comm, HYPRE_Solver *solver ); 56 int HYPRE_LSI_DDIlutDestroy( HYPRE_Solver solver ); 57 int HYPRE_LSI_DDIlutSetFillin( HYPRE_Solver solver, double fillin); 58 int HYPRE_LSI_DDIlutSetDropTolerance( HYPRE_Solver solver, double thresh); 59 int HYPRE_LSI_DDIlutSetOverlap( HYPRE_Solver solver ); 60 int HYPRE_LSI_DDIlutSetReorder( HYPRE_Solver solver ); 61 int HYPRE_LSI_DDIlutSetOutputLevel( HYPRE_Solver solver, int level); 62 int HYPRE_LSI_DDIlutSolve( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 63 HYPRE_ParVector b, HYPRE_ParVector x ); 64 int HYPRE_LSI_DDIlutSetup( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 65 HYPRE_ParVector b, HYPRE_ParVector x ); 66 int HYPRE_LSI_DDIlutGetRowLengths(MH_Matrix *Amat, int *leng, int **recv_leng, 67 MPI_Comm mpi_comm); 68 int HYPRE_LSI_DDIlutGetOffProcRows(MH_Matrix *Amat, int leng, int *recv_leng, 69 int Noffset, int *map, int *map2, int **int_buf, 70 double **dble_buf, MPI_Comm mpi_comm); 71 int HYPRE_LSI_DDIlutComposeOverlappedMatrix(MH_Matrix *mh_mat, 72 int *total_recv_leng, int **recv_lengths, int **int_buf, 73 double **dble_buf, int **sindex_array, int **sindex_array2, 74 int *offset, MPI_Comm mpi_comm); 75 int HYPRE_LSI_DDIlutDecompose(HYPRE_LSI_DDIlut *ilut_ptr,MH_Matrix *Amat, 76 int total_recv_leng, int *recv_lengths, int *ext_ja, double *ext_aa, 77 int *map, int *map2, int Noffset); 78 int HYPRE_LSI_DDIlutDecompose2(HYPRE_LSI_DDIlut *ilut_ptr,MH_Matrix *Amat, 79 int total_recv_leng, int *recv_lengths, int *ext_ja, double *ext_aa, 80 int *map, int *map2, int Noffset); 81 int HYPRE_LSI_DDIlutDecomposeNew(HYPRE_LSI_DDIlut *ilut_ptr,MH_Matrix *Amat, 82 int total_recv_leng, int *recv_lengths, int *ext_ja, double *ext_aa, 83 int *map, int *map2, int Noffset); 84 85 /* hypre_lsi_misc.c */ 86 void HYPRE_LSI_Get_IJAMatrixFromFile(double **val, int **ia, 87 int **ja, int *N, double **rhs, char *matfile, char *rhsfile); 88 int HYPRE_LSI_Search(int *list,int value,int list_length); 89 int HYPRE_LSI_Search2(int key, int nlist, int *list); 90 int HYPRE_LSI_GetParCSRMatrix(HYPRE_IJMatrix Amat, int nrows, int nnz, 91 int *ia_ptr, int *ja_ptr, double *a_ptr) ; 92 void HYPRE_LSI_qsort1a( int *ilist, int *ilist2, int left, int right); 93 int HYPRE_LSI_SplitDSort2(double *dlist, int nlist, int *ilist, int limit); 94 int HYPRE_LSI_SplitDSort(double *dlist, int nlist, int *ilist, int limit); 95 int HYPRE_LSI_SolveIdentity(HYPRE_Solver solver, HYPRE_ParCSRMatrix Amat, 96 HYPRE_ParVector b, HYPRE_ParVector x); 97 int HYPRE_LSI_Cuthill(int n, int *ia, int *ja, double *aa, int *order_array, 98 int *reorder_array); 99 int HYPRE_LSI_MatrixInverse( double **Amat, int ndim, double ***Cmat ); 100 int HYPRE_LSI_PartitionMatrix( int nRows, int startRow, int *rowLengths, 101 int **colIndices, double **colValues, 102 int *nLabels, int **labels); 103 104 105 /* HYPRE_LSI_poly.c */ 106 int HYPRE_LSI_PolyCreate( MPI_Comm comm, HYPRE_Solver *solver ); 107 int HYPRE_LSI_PolyDestroy( HYPRE_Solver solver ); 108 int HYPRE_LSI_PolySetOrder( HYPRE_Solver solver, int order); 109 int HYPRE_LSI_PolySetOutputLevel( HYPRE_Solver solver, int level); 110 int HYPRE_LSI_PolySolve( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 111 HYPRE_ParVector b, HYPRE_ParVector x ); 112 int HYPRE_LSI_PolySetup( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 113 HYPRE_ParVector b, HYPRE_ParVector x ); 114 115 /* HYPRE_LSI_schwarz.c */ 116 int HYPRE_LSI_SchwarzCreate( MPI_Comm comm, HYPRE_Solver *solver ); 117 int HYPRE_LSI_SchwarzDestroy( HYPRE_Solver solver ); 118 int HYPRE_LSI_SchwarzSetBlockSize( HYPRE_Solver solver, int blksize); 119 int HYPRE_LSI_SchwarzSetNBlocks( HYPRE_Solver solver, int nblks); 120 int HYPRE_LSI_SchwarzSetILUTFillin( HYPRE_Solver solver, double fillin); 121 int HYPRE_LSI_SchwarzSetOutputLevel( HYPRE_Solver solver, int level); 122 int HYPRE_LSI_SchwarzSolve( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 123 HYPRE_ParVector b, HYPRE_ParVector x ); 124 int HYPRE_LSI_SchwarzSetup( HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 125 HYPRE_ParVector b, HYPRE_ParVector x ); 126 127 /* HYPRE_parcsr_bicgs.c */ 128 int HYPRE_ParCSRBiCGSCreate( MPI_Comm comm, HYPRE_Solver *solver ); 129 int HYPRE_ParCSRBiCGSDestroy( HYPRE_Solver solver ); 130 int HYPRE_ParCSRBiCGSSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 131 HYPRE_ParVector b, HYPRE_ParVector x ); 132 int HYPRE_ParCSRBiCGSSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 133 HYPRE_ParVector b, HYPRE_ParVector x ); 134 int HYPRE_ParCSRBiCGSSetTol( HYPRE_Solver solver, double tol ); 135 int HYPRE_ParCSRBiCGSSetMaxIter( HYPRE_Solver solver, int max_iter ); 136 int HYPRE_ParCSRBiCGSSetStopCrit( HYPRE_Solver solver, int stop_crit ); 137 int HYPRE_ParCSRBiCGSSetPrecond( HYPRE_Solver solver, 138 int (*precond) (HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 139 HYPRE_ParVector b, HYPRE_ParVector x), 140 int (*precond_setup)(HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 141 HYPRE_ParVector b, HYPRE_ParVector x), 142 void *precond_data ); 143 int HYPRE_ParCSRBiCGSSetLogging( HYPRE_Solver solver, int logging); 144 int HYPRE_ParCSRBiCGSGetNumIterations(HYPRE_Solver solver, 145 int *num_iterations); 146 int HYPRE_ParCSRBiCGSGetFinalRelativeResidualNorm(HYPRE_Solver solver, 147 double *norm ); 148 149 /* HYPRE_parcsr_bicgs.c */ 150 int HYPRE_ParCSRBiCGSTABLCreate( MPI_Comm comm, HYPRE_Solver *solver ); 151 int HYPRE_ParCSRBiCGSTABLDestroy( HYPRE_Solver solver ); 152 int HYPRE_ParCSRBiCGSTABLSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 153 HYPRE_ParVector b, HYPRE_ParVector x ); 154 int HYPRE_ParCSRBiCGSTABLSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 155 HYPRE_ParVector b, HYPRE_ParVector x ); 156 int HYPRE_ParCSRBiCGSTABLSetTol( HYPRE_Solver solver, double tol ); 157 int HYPRE_ParCSRBiCGSTABLSetSize( HYPRE_Solver solver, int size ); 158 int HYPRE_ParCSRBiCGSTABLSetMaxIter( HYPRE_Solver solver, int max_iter ); 159 int HYPRE_ParCSRBiCGSTABLSetStopCrit( HYPRE_Solver solver, int stop_crit ); 160 int HYPRE_ParCSRBiCGSTABLSetPrecond( HYPRE_Solver solver, 161 int (*precond) (HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 162 HYPRE_ParVector b, HYPRE_ParVector x), 163 int (*precond_setup)(HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 164 HYPRE_ParVector b, HYPRE_ParVector x), 165 void *precond_data ); 166 int HYPRE_ParCSRBiCGSTABLSetLogging( HYPRE_Solver solver, int logging); 167 int HYPRE_ParCSRBiCGSTABLGetNumIterations(HYPRE_Solver solver, 168 int *num_iterations); 169 int HYPRE_ParCSRBiCGSTABLGetFinalRelativeResidualNorm(HYPRE_Solver solver, 170 double *norm ); 171 172 /* HYPRE_parcsr_fgmres.h */ 173 int HYPRE_ParCSRFGMRESCreate( MPI_Comm comm, HYPRE_Solver *solver ); 174 int HYPRE_ParCSRFGMRESDestroy( HYPRE_Solver solver ); 175 int HYPRE_ParCSRFGMRESSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 176 HYPRE_ParVector b, HYPRE_ParVector x ); 177 int HYPRE_ParCSRFGMRESSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 178 HYPRE_ParVector b, HYPRE_ParVector x ); 179 int HYPRE_ParCSRFGMRESSetKDim(HYPRE_Solver solver, int kdim); 180 int HYPRE_ParCSRFGMRESSetTol(HYPRE_Solver solver, double tol); 181 int HYPRE_ParCSRFGMRESSetMaxIter(HYPRE_Solver solver, int max_iter); 182 int HYPRE_ParCSRFGMRESSetStopCrit(HYPRE_Solver solver, int stop_crit); 183 int HYPRE_ParCSRFGMRESSetPrecond(HYPRE_Solver solver, 184 int (*precond)(HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 185 HYPRE_ParVector b, HYPRE_ParVector x), 186 int (*precond_setup)(HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 187 HYPRE_ParVector b, HYPRE_ParVector x), 188 void *precond_data); 189 int HYPRE_ParCSRFGMRESSetLogging(HYPRE_Solver solver, int logging); 190 int HYPRE_ParCSRFGMRESGetNumIterations(HYPRE_Solver solver, 191 int *num_iterations); 192 int HYPRE_ParCSRFGMRESGetFinalRelativeResidualNorm(HYPRE_Solver solver, 193 double *norm ); 194 int HYPRE_ParCSRFGMRESUpdatePrecondTolerance(HYPRE_Solver solver, 195 int (*set_tolerance)(HYPRE_Solver sol, double)); 196 197 /* HYPRE_parcsr_lsicg.c */ 198 int HYPRE_ParCSRLSICGCreate(MPI_Comm comm, HYPRE_Solver *solver); 199 int HYPRE_ParCSRLSICGDestroy(HYPRE_Solver solver); 200 int HYPRE_ParCSRLSICGSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 201 HYPRE_ParVector b, HYPRE_ParVector x ); 202 int HYPRE_ParCSRLSICGSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 203 HYPRE_ParVector b, HYPRE_ParVector x ); 204 int HYPRE_ParCSRLSICGSetTol(HYPRE_Solver solver, double tol); 205 int HYPRE_ParCSRLSICGSetMaxIter(HYPRE_Solver solver, int max_iter); 206 int HYPRE_ParCSRLSICGSetStopCrit(HYPRE_Solver solver, int stop_crit); 207 int HYPRE_ParCSRLSICGSetPrecond(HYPRE_Solver solver, 208 int (*precond) (HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 209 HYPRE_ParVector b, HYPRE_ParVector x), 210 int (*precond_setup)(HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 211 HYPRE_ParVector b, HYPRE_ParVector x), 212 void *precond_data ); 213 int HYPRE_ParCSRLSICGSetLogging(HYPRE_Solver solver, int logging); 214 int HYPRE_ParCSRLSICGGetNumIterations(HYPRE_Solver solver, 215 int *num_iterations); 216 int HYPRE_ParCSRLSICGGetFinalRelativeResidualNorm(HYPRE_Solver solver, 217 double *norm ); 218 219 /* HYPRE_parcsr_maxwell.c */ 220 int HYPRE_ParCSRCotreeCreate(MPI_Comm comm, HYPRE_Solver *solver); 221 int HYPRE_ParCSRCotreeDestroy(HYPRE_Solver solver); 222 int HYPRE_ParCSRCotreeSetup(HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 223 HYPRE_ParVector b, HYPRE_ParVector x); 224 int HYPRE_ParCSRCotreeSolve(HYPRE_Solver solver, HYPRE_ParCSRMatrix A, 225 HYPRE_ParVector b, HYPRE_ParVector x); 226 int HYPRE_ParCSRCotreeSetTol(HYPRE_Solver solver, double tol); 227 int HYPRE_ParCSRCotreeSetMaxIter(HYPRE_Solver solver, int max_iter); 228 229 /* HYPRE_parcsr_superlu.c */ 230 int HYPRE_ParCSR_SuperLUCreate(MPI_Comm comm, HYPRE_Solver *solver); 231 int HYPRE_ParCSR_SuperLUDestroy(HYPRE_Solver solver); 232 int HYPRE_ParCSR_SuperLUSetOutputLevel(HYPRE_Solver solver, int); 233 int HYPRE_ParCSR_SuperLUSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 234 HYPRE_ParVector b,HYPRE_ParVector x); 235 int HYPRE_ParCSR_SuperLUSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 236 HYPRE_ParVector b, HYPRE_ParVector x); 237 238 /* HYPRE_parcsr_symqmr.c */ 239 int HYPRE_ParCSRSymQMRCreate( MPI_Comm comm, HYPRE_Solver *solver ); 240 int HYPRE_ParCSRSymQMRDestroy( HYPRE_Solver solver ); 241 int HYPRE_ParCSRSymQMRSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 242 HYPRE_ParVector b, HYPRE_ParVector x ); 243 int HYPRE_ParCSRSymQMRSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 244 HYPRE_ParVector b, HYPRE_ParVector x ); 245 int HYPRE_ParCSRSymQMRSetTol( HYPRE_Solver solver, double tol ); 246 int HYPRE_ParCSRSymQMRSetMaxIter( HYPRE_Solver solver, int max_iter ); 247 int HYPRE_ParCSRSymQMRSetStopCrit( HYPRE_Solver solver, int stop_crit ); 248 int HYPRE_ParCSRSymQMRSetPrecond( HYPRE_Solver solver, 249 int (*precond) (HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 250 HYPRE_ParVector b, HYPRE_ParVector x), 251 int (*precond_setup)(HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 252 HYPRE_ParVector b, HYPRE_ParVector x), 253 void *precond_data ); 254 int HYPRE_ParCSRSymQMRSetLogging( HYPRE_Solver solver, int logging); 255 int HYPRE_ParCSRSymQMRGetNumIterations(HYPRE_Solver solver, 256 int *num_iterations); 257 int HYPRE_ParCSRSymQMRGetFinalRelativeResidualNorm(HYPRE_Solver solver, 258 double *norm ); 259 260 /* HYPRE_parcsr_TFQmr.c */ 261 int HYPRE_ParCSRTFQmrCreate( MPI_Comm comm, HYPRE_Solver *solver ); 262 int HYPRE_ParCSRTFQmrDestroy( HYPRE_Solver solver ); 263 int HYPRE_ParCSRTFQmrSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 264 HYPRE_ParVector b, HYPRE_ParVector x ); 265 int HYPRE_ParCSRTFQmrSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A, 266 HYPRE_ParVector b, HYPRE_ParVector x ); 267 int HYPRE_ParCSRTFQmrSetTol( HYPRE_Solver solver, double tol ); 268 int HYPRE_ParCSRTFQmrSetMaxIter( HYPRE_Solver solver, int max_iter ); 269 int HYPRE_ParCSRTFQmrSetStopCrit( HYPRE_Solver solver, int stop_crit ); 270 int HYPRE_ParCSRTFQmrSetPrecond( HYPRE_Solver solver, 271 int (*precond) (HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 272 HYPRE_ParVector b, HYPRE_ParVector x), 273 int (*precond_setup)(HYPRE_Solver sol, HYPRE_ParCSRMatrix matrix, 274 HYPRE_ParVector b, HYPRE_ParVector x), 275 void *precond_data ); 276 int HYPRE_ParCSRTFQmrSetLogging( HYPRE_Solver solver, int logging); 277 int HYPRE_ParCSRTFQmrGetNumIterations(HYPRE_Solver solver, 278 int *num_iterations); 279 int HYPRE_ParCSRTFQmrGetFinalRelativeResidualNorm(HYPRE_Solver solver, 280 double *norm ); 281 282 #ifdef __cplusplus 283 } 284 #endif 285 286 #endif 287