/usr/include/_hypre_IJ_mv.h is in libhypre-dev 2.4.0b-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 | /*BHEADER**********************************************************************
* Copyright (c) 2008, Lawrence Livermore National Security, LLC.
* Produced at the Lawrence Livermore National Laboratory.
* This file is part of HYPRE. See file COPYRIGHT for details.
*
* HYPRE is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License (as published by the Free
* Software Foundation) version 2.1 dated February 1999.
*
* $Revision: 2.3 $
***********************************************************************EHEADER*/
#include <HYPRE_config.h>
#ifndef hypre_IJ_HEADER
#define hypre_IJ_HEADER
#include "_hypre_utilities.h"
#include "seq_mv.h"
#include "_hypre_parcsr_mv.h"
#include "HYPRE_IJ_mv.h"
#ifdef __cplusplus
extern "C" {
#endif
/******************************************************************************
*
* Header info for Auxiliary Parallel CSR Matrix data structures
*
* Note: this matrix currently uses 0-based indexing.
*
*****************************************************************************/
#ifndef hypre_AUX_PARCSR_MATRIX_HEADER
#define hypre_AUX_PARCSR_MATRIX_HEADER
/*--------------------------------------------------------------------------
* Auxiliary Parallel CSR Matrix
*--------------------------------------------------------------------------*/
typedef struct
{
int local_num_rows; /* defines number of rows on this processors */
int local_num_cols; /* defines number of cols of diag */
int need_aux; /* if need_aux = 1, aux_j, aux_data are used to
generate the parcsr matrix (default),
for need_aux = 0, data is put directly into
parcsr structure (requires the knowledge of
offd_i and diag_i ) */
int *row_length; /* row_length_diag[i] contains number of stored
elements in i-th row */
int *row_space; /* row_space_diag[i] contains space allocated to
i-th row */
int **aux_j; /* contains collected column indices */
double **aux_data; /* contains collected data */
int *indx_diag; /* indx_diag[i] points to first empty space of portion
in diag_j , diag_data assigned to row i */
int *indx_offd; /* indx_offd[i] points to first empty space of portion
in offd_j , offd_data assigned to row i */
int max_off_proc_elmts; /* length of off processor stash set for
SetValues and AddTOValues */
int current_num_elmts; /* current no. of elements stored in stash */
int off_proc_i_indx; /* pointer to first empty space in
set_off_proc_i_set */
int *off_proc_i; /* length 2*num_off_procs_elmts, contains info pairs
(code, no. of elmts) where code contains global
row no. if SetValues, and (-global row no. -1)
if AddToValues*/
int *off_proc_j; /* contains column indices */
double *off_proc_data; /* contains corresponding data */
} hypre_AuxParCSRMatrix;
/*--------------------------------------------------------------------------
* Accessor functions for the Parallel CSR Matrix structure
*--------------------------------------------------------------------------*/
#define hypre_AuxParCSRMatrixLocalNumRows(matrix) ((matrix) -> local_num_rows)
#define hypre_AuxParCSRMatrixLocalNumCols(matrix) ((matrix) -> local_num_cols)
#define hypre_AuxParCSRMatrixNeedAux(matrix) ((matrix) -> need_aux)
#define hypre_AuxParCSRMatrixRowLength(matrix) ((matrix) -> row_length)
#define hypre_AuxParCSRMatrixRowSpace(matrix) ((matrix) -> row_space)
#define hypre_AuxParCSRMatrixAuxJ(matrix) ((matrix) -> aux_j)
#define hypre_AuxParCSRMatrixAuxData(matrix) ((matrix) -> aux_data)
#define hypre_AuxParCSRMatrixIndxDiag(matrix) ((matrix) -> indx_diag)
#define hypre_AuxParCSRMatrixIndxOffd(matrix) ((matrix) -> indx_offd)
#define hypre_AuxParCSRMatrixMaxOffProcElmts(matrix) ((matrix) -> max_off_proc_elmts)
#define hypre_AuxParCSRMatrixCurrentNumElmts(matrix) ((matrix) -> current_num_elmts)
#define hypre_AuxParCSRMatrixOffProcIIndx(matrix) ((matrix) -> off_proc_i_indx)
#define hypre_AuxParCSRMatrixOffProcI(matrix) ((matrix) -> off_proc_i)
#define hypre_AuxParCSRMatrixOffProcJ(matrix) ((matrix) -> off_proc_j)
#define hypre_AuxParCSRMatrixOffProcData(matrix) ((matrix) -> off_proc_data)
#endif
/******************************************************************************
*
* Header info for Auxiliary Parallel Vector data structures
*
* Note: this vector currently uses 0-based indexing.
*
*****************************************************************************/
#ifndef hypre_AUX_PAR_VECTOR_HEADER
#define hypre_AUX_PAR_VECTOR_HEADER
/*--------------------------------------------------------------------------
* Auxiliary Parallel Vector
*--------------------------------------------------------------------------*/
typedef struct
{
int max_off_proc_elmts; /* length of off processor stash for
SetValues and AddToValues*/
int current_num_elmts; /* current no. of elements stored in stash */
int *off_proc_i; /* contains column indices */
double *off_proc_data; /* contains corresponding data */
} hypre_AuxParVector;
/*--------------------------------------------------------------------------
* Accessor functions for the Parallel Vector structure
*--------------------------------------------------------------------------*/
#define hypre_AuxParVectorMaxOffProcElmts(matrix) ((matrix) -> max_off_proc_elmts)
#define hypre_AuxParVectorCurrentNumElmts(matrix) ((matrix) -> current_num_elmts)
#define hypre_AuxParVectorOffProcI(matrix) ((matrix) -> off_proc_i)
#define hypre_AuxParVectorOffProcData(matrix) ((matrix) -> off_proc_data)
#endif
/******************************************************************************
*
* Header info for the hypre_IJMatrix structures
*
*****************************************************************************/
#ifndef hypre_IJ_MATRIX_HEADER
#define hypre_IJ_MATRIX_HEADER
/*--------------------------------------------------------------------------
* hypre_IJMatrix:
*--------------------------------------------------------------------------*/
typedef struct hypre_IJMatrix_struct
{
MPI_Comm comm;
int *row_partitioning; /* distribution of rows across processors */
int *col_partitioning; /* distribution of columns */
int object_type; /* Indicates the type of "object" */
void *object; /* Structure for storing local portion */
void *translator; /* optional storage_type specfic structure
for holding additional local info */
int assemble_flag; /* indicates whether matrix has been
assembled */
int global_first_row; /* these for data items are necessary */
int global_first_col; /* to be able to avoind using the global */
int global_num_rows; /* global partition */
int global_num_cols;
} hypre_IJMatrix;
/*--------------------------------------------------------------------------
* Accessor macros: hypre_IJMatrix
*--------------------------------------------------------------------------*/
#define hypre_IJMatrixComm(matrix) ((matrix) -> comm)
#define hypre_IJMatrixRowPartitioning(matrix) ((matrix) -> row_partitioning)
#define hypre_IJMatrixColPartitioning(matrix) ((matrix) -> col_partitioning)
#define hypre_IJMatrixObjectType(matrix) ((matrix) -> object_type)
#define hypre_IJMatrixObject(matrix) ((matrix) -> object)
#define hypre_IJMatrixTranslator(matrix) ((matrix) -> translator)
#define hypre_IJMatrixAssembleFlag(matrix) ((matrix) -> assemble_flag)
#define hypre_IJMatrixGlobalFirstRow(matrix) ((matrix) -> global_first_row)
#define hypre_IJMatrixGlobalFirstCol(matrix) ((matrix) -> global_first_col)
#define hypre_IJMatrixGlobalNumRows(matrix) ((matrix) -> global_num_rows)
#define hypre_IJMatrixGlobalNumCols(matrix) ((matrix) -> global_num_cols)
/*--------------------------------------------------------------------------
* prototypes for operations on local objects
*--------------------------------------------------------------------------*/
#ifdef PETSC_AVAILABLE
/* IJMatrix_petsc.c */
int
hypre_GetIJMatrixParCSRMatrix( HYPRE_IJMatrix IJmatrix, Mat *reference )
#endif
#ifdef ISIS_AVAILABLE
/* IJMatrix_isis.c */
int
hypre_GetIJMatrixISISMatrix( HYPRE_IJMatrix IJmatrix, RowMatrix *reference )
#endif
#endif
/******************************************************************************
*
* Header info for the hypre_IJMatrix structures
*
*****************************************************************************/
#ifndef hypre_IJ_VECTOR_HEADER
#define hypre_IJ_VECTOR_HEADER
/*--------------------------------------------------------------------------
* hypre_IJVector:
*--------------------------------------------------------------------------*/
typedef struct hypre_IJVector_struct
{
MPI_Comm comm;
int *partitioning; /* Indicates partitioning over tasks */
int object_type; /* Indicates the type of "local storage" */
void *object; /* Structure for storing local portion */
void *translator; /* Structure for storing off processor
information */
int global_first_row; /* these for data items are necessary */
int global_num_rows; /* to be able to avoind using the global */
/* global partition */
} hypre_IJVector;
/*--------------------------------------------------------------------------
* Accessor macros: hypre_IJVector
*--------------------------------------------------------------------------*/
#define hypre_IJVectorComm(vector) ((vector) -> comm)
#define hypre_IJVectorPartitioning(vector) ((vector) -> partitioning)
#define hypre_IJVectorObjectType(vector) ((vector) -> object_type)
#define hypre_IJVectorObject(vector) ((vector) -> object)
#define hypre_IJVectorTranslator(vector) ((vector) -> translator)
#define hypre_IJVectorGlobalFirstRow(vector) ((vector) -> global_first_row)
#define hypre_IJVectorGlobalNumRows(vector) ((vector) -> global_num_rows)
/*--------------------------------------------------------------------------
* prototypes for operations on local objects
*--------------------------------------------------------------------------*/
/* #include "./internal_protos.h" */
#endif
/* aux_parcsr_matrix.c */
int hypre_AuxParCSRMatrixCreate ( hypre_AuxParCSRMatrix **aux_matrix , int local_num_rows , int local_num_cols , int *sizes );
int hypre_AuxParCSRMatrixDestroy ( hypre_AuxParCSRMatrix *matrix );
int hypre_AuxParCSRMatrixInitialize ( hypre_AuxParCSRMatrix *matrix );
int hypre_AuxParCSRMatrixSetMaxOffPRocElmts ( hypre_AuxParCSRMatrix *matrix , int max_off_proc_elmts );
/* aux_par_vector.c */
int hypre_AuxParVectorCreate ( hypre_AuxParVector **aux_vector );
int hypre_AuxParVectorDestroy ( hypre_AuxParVector *vector );
int hypre_AuxParVectorInitialize ( hypre_AuxParVector *vector );
int hypre_AuxParVectorSetMaxOffPRocElmts ( hypre_AuxParVector *vector , int max_off_proc_elmts );
/* IJMatrix.c */
int hypre_IJMatrixGetRowPartitioning ( HYPRE_IJMatrix matrix , int **row_partitioning );
int hypre_IJMatrixGetColPartitioning ( HYPRE_IJMatrix matrix , int **col_partitioning );
int hypre_IJMatrixSetObject ( HYPRE_IJMatrix matrix , void *object );
/* IJMatrix_isis.c */
int hypre_IJMatrixSetLocalSizeISIS ( hypre_IJMatrix *matrix , int local_m , int local_n );
int hypre_IJMatrixCreateISIS ( hypre_IJMatrix *matrix );
int hypre_IJMatrixSetRowSizesISIS ( hypre_IJMatrix *matrix , int *sizes );
int hypre_IJMatrixSetDiagRowSizesISIS ( hypre_IJMatrix *matrix , int *sizes );
int hypre_IJMatrixSetOffDiagRowSizesISIS ( hypre_IJMatrix *matrix , int *sizes );
int hypre_IJMatrixInitializeISIS ( hypre_IJMatrix *matrix );
int hypre_IJMatrixInsertBlockISIS ( hypre_IJMatrix *matrix , int m , int n , int *rows , int *cols , double *coeffs );
int hypre_IJMatrixAddToBlockISIS ( hypre_IJMatrix *matrix , int m , int n , int *rows , int *cols , double *coeffs );
int hypre_IJMatrixInsertRowISIS ( hypre_IJMatrix *matrix , int n , int row , int *indices , double *coeffs );
int hypre_IJMatrixAddToRowISIS ( hypre_IJMatrix *matrix , int n , int row , int *indices , double *coeffs );
int hypre_IJMatrixAssembleISIS ( hypre_IJMatrix *matrix );
int hypre_IJMatrixDistributeISIS ( hypre_IJMatrix *matrix , int *row_starts , int *col_starts );
int hypre_IJMatrixApplyISIS ( hypre_IJMatrix *matrix , hypre_ParVector *x , hypre_ParVector *b );
int hypre_IJMatrixDestroyISIS ( hypre_IJMatrix *matrix );
int hypre_IJMatrixSetTotalSizeISIS ( hypre_IJMatrix *matrix , int size );
/* IJMatrix_parcsr.c */
int hypre_IJMatrixCreateParCSR( hypre_IJMatrix *matrix );
int hypre_IJMatrixSetRowSizesParCSR( hypre_IJMatrix *matrix , const int *sizes );
int hypre_IJMatrixSetDiagOffdSizesParCSR( hypre_IJMatrix *matrix , const int *diag_sizes , const int *offdiag_sizes );
int hypre_IJMatrixSetMaxOffProcElmtsParCSR( hypre_IJMatrix *matrix , int max_off_proc_elmts );
int hypre_IJMatrixInitializeParCSR( hypre_IJMatrix *matrix );
int hypre_IJMatrixGetRowCountsParCSR( hypre_IJMatrix *matrix , int nrows , int *rows , int *ncols );
int hypre_IJMatrixGetValuesParCSR( hypre_IJMatrix *matrix , int nrows , int *ncols , int *rows , int *cols , double *values );
int hypre_IJMatrixSetValuesParCSR( hypre_IJMatrix *matrix , int nrows , int *ncols , const int *rows , const int *cols , const double *values );
int hypre_IJMatrixAddToValuesParCSR( hypre_IJMatrix *matrix , int nrows , int *ncols , const int *rows , const int *cols , const double *values );
int hypre_IJMatrixAssembleParCSR( hypre_IJMatrix *matrix );
int hypre_IJMatrixDestroyParCSR( hypre_IJMatrix *matrix );
int hypre_IJMatrixAssembleOffProcValsParCSR( hypre_IJMatrix *matrix , int off_proc_i_indx , int max_off_proc_elmts , int current_num_elmts , int *off_proc_i , int *off_proc_j , double *off_proc_data );
int hypre_FillResponseIJOffProcVals(void *p_recv_contact_buf, int contact_size, int contact_proc, void *ro, MPI_Comm comm, void **p_send_response_buf, int *response_message_size );
int hypre_FillResponseIJOffProcValsDouble(void *p_recv_contact_buf, int contact_size, int contact_proc, void *ro, MPI_Comm comm, void **p_send_response_buf, int *response_message_size );
int hypre_FindProc( int *list , int value , int list_length );
/* IJMatrix_petsc.c */
int hypre_IJMatrixSetLocalSizePETSc ( hypre_IJMatrix *matrix , int local_m , int local_n );
int hypre_IJMatrixCreatePETSc ( hypre_IJMatrix *matrix );
int hypre_IJMatrixSetRowSizesPETSc ( hypre_IJMatrix *matrix , int *sizes );
int hypre_IJMatrixSetDiagRowSizesPETSc ( hypre_IJMatrix *matrix , int *sizes );
int hypre_IJMatrixSetOffDiagRowSizesPETSc ( hypre_IJMatrix *matrix , int *sizes );
int hypre_IJMatrixInitializePETSc ( hypre_IJMatrix *matrix );
int hypre_IJMatrixInsertBlockPETSc ( hypre_IJMatrix *matrix , int m , int n , int *rows , int *cols , double *coeffs );
int hypre_IJMatrixAddToBlockPETSc ( hypre_IJMatrix *matrix , int m , int n , int *rows , int *cols , double *coeffs );
int hypre_IJMatrixInsertRowPETSc ( hypre_IJMatrix *matrix , int n , int row , int *indices , double *coeffs );
int hypre_IJMatrixAddToRowPETSc ( hypre_IJMatrix *matrix , int n , int row , int *indices , double *coeffs );
int hypre_IJMatrixAssemblePETSc ( hypre_IJMatrix *matrix );
int hypre_IJMatrixDistributePETSc ( hypre_IJMatrix *matrix , int *row_starts , int *col_starts );
int hypre_IJMatrixApplyPETSc ( hypre_IJMatrix *matrix , hypre_ParVector *x , hypre_ParVector *b );
int hypre_IJMatrixDestroyPETSc ( hypre_IJMatrix *matrix );
int hypre_IJMatrixSetTotalSizePETSc ( hypre_IJMatrix *matrix , int size );
/* IJVector.c */
int hypre_IJVectorDistribute ( HYPRE_IJVector vector , const int *vec_starts );
int hypre_IJVectorZeroValues ( HYPRE_IJVector vector );
/* IJVector_parcsr.c */
int hypre_IJVectorCreatePar ( hypre_IJVector *vector , int *IJpartitioning );
int hypre_IJVectorDestroyPar ( hypre_IJVector *vector );
int hypre_IJVectorInitializePar ( hypre_IJVector *vector );
int hypre_IJVectorSetMaxOffProcElmtsPar ( hypre_IJVector *vector , int max_off_proc_elmts );
int hypre_IJVectorDistributePar ( hypre_IJVector *vector , const int *vec_starts );
int hypre_IJVectorZeroValuesPar ( hypre_IJVector *vector );
int hypre_IJVectorSetValuesPar ( hypre_IJVector *vector , int num_values , const int *indices , const double *values );
int hypre_IJVectorAddToValuesPar ( hypre_IJVector *vector , int num_values , const int *indices , const double *values );
int hypre_IJVectorAssemblePar ( hypre_IJVector *vector );
int hypre_IJVectorGetValuesPar ( hypre_IJVector *vector , int num_values , const int *indices , double *values );
int hypre_IJVectorAssembleOffProcValsPar ( hypre_IJVector *vector , int max_off_proc_elmts , int current_num_elmts , int *off_proc_i , double *off_proc_data );
/* HYPRE_IJMatrix.c */
int HYPRE_IJMatrixCreate ( MPI_Comm comm , int ilower , int iupper , int jlower , int jupper , HYPRE_IJMatrix *matrix );
int HYPRE_IJMatrixDestroy ( HYPRE_IJMatrix matrix );
int HYPRE_IJMatrixInitialize ( HYPRE_IJMatrix matrix );
int HYPRE_IJMatrixSetValues ( HYPRE_IJMatrix matrix , int nrows , int *ncols , const int *rows , const int *cols , const double *values );
int HYPRE_IJMatrixAddToValues ( HYPRE_IJMatrix matrix , int nrows , int *ncols , const int *rows , const int *cols , const double *values );
int HYPRE_IJMatrixAssemble ( HYPRE_IJMatrix matrix );
int HYPRE_IJMatrixGetRowCounts ( HYPRE_IJMatrix matrix , int nrows , int *rows , int *ncols );
int HYPRE_IJMatrixGetValues ( HYPRE_IJMatrix matrix , int nrows , int *ncols , int *rows , int *cols , double *values );
int HYPRE_IJMatrixSetObjectType ( HYPRE_IJMatrix matrix , int type );
int HYPRE_IJMatrixGetObjectType ( HYPRE_IJMatrix matrix , int *type );
int HYPRE_IJMatrixGetLocalRange ( HYPRE_IJMatrix matrix , int *ilower , int *iupper , int *jlower , int *jupper );
int HYPRE_IJMatrixGetObject ( HYPRE_IJMatrix matrix , void **object );
int HYPRE_IJMatrixSetRowSizes ( HYPRE_IJMatrix matrix , const int *sizes );
int HYPRE_IJMatrixSetDiagOffdSizes ( HYPRE_IJMatrix matrix , const int *diag_sizes , const int *offdiag_sizes );
int HYPRE_IJMatrixSetMaxOffProcElmts ( HYPRE_IJMatrix matrix , int max_off_proc_elmts );
int HYPRE_IJMatrixRead ( const char *filename , MPI_Comm comm , int type , HYPRE_IJMatrix *matrix_ptr );
int HYPRE_IJMatrixPrint ( HYPRE_IJMatrix matrix , const char *filename );
/* HYPRE_IJVector.c */
int HYPRE_IJVectorCreate ( MPI_Comm comm , int jlower , int jupper , HYPRE_IJVector *vector );
int HYPRE_IJVectorDestroy ( HYPRE_IJVector vector );
int HYPRE_IJVectorInitialize ( HYPRE_IJVector vector );
int HYPRE_IJVectorSetValues ( HYPRE_IJVector vector , int nvalues , const int *indices , const double *values );
int HYPRE_IJVectorAddToValues ( HYPRE_IJVector vector , int nvalues , const int *indices , const double *values );
int HYPRE_IJVectorAssemble ( HYPRE_IJVector vector );
int HYPRE_IJVectorGetValues ( HYPRE_IJVector vector , int nvalues , const int *indices , double *values );
int HYPRE_IJVectorSetMaxOffProcElmts ( HYPRE_IJVector vector , int max_off_proc_elmts );
int HYPRE_IJVectorSetObjectType ( HYPRE_IJVector vector , int type );
int HYPRE_IJVectorGetObjectType ( HYPRE_IJVector vector , int *type );
int HYPRE_IJVectorGetLocalRange ( HYPRE_IJVector vector , int *jlower , int *jupper );
int HYPRE_IJVectorGetObject ( HYPRE_IJVector vector , void **object );
int HYPRE_IJVectorRead ( const char *filename , MPI_Comm comm , int type , HYPRE_IJVector *vector_ptr );
int HYPRE_IJVectorPrint ( HYPRE_IJVector vector , const char *filename );
#ifdef __cplusplus
}
#endif
#endif
|