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 /****************************************************************************** 9 * 10 * Header info for the hypre_StructVector structures 11 * 12 *****************************************************************************/ 13 14 #ifndef hypre_STRUCT_VECTOR_HEADER 15 #define hypre_STRUCT_VECTOR_HEADER 16 17 /*-------------------------------------------------------------------------- 18 * hypre_StructVector: 19 *--------------------------------------------------------------------------*/ 20 21 typedef struct hypre_StructVector_struct 22 { 23 MPI_Comm comm; 24 25 hypre_StructGrid *grid; 26 27 hypre_BoxArray *data_space; 28 29 HYPRE_Complex *data; /* Pointer to vector data on device*/ 30 HYPRE_Int data_alloced; /* Boolean used for freeing data */ 31 HYPRE_Int data_size; /* Size of vector data */ 32 HYPRE_Int *data_indices; /* num-boxes array of indices into 33 the data array. data_indices[b] 34 is the starting index of vector 35 data corresponding to box b. */ 36 37 HYPRE_Int num_ghost[2*HYPRE_MAXDIM]; /* Num ghost layers in each 38 * direction */ 39 HYPRE_Int bghost_not_clear; /* Are boundary ghosts clear? */ 40 41 HYPRE_BigInt global_size; /* Total number coefficients */ 42 43 HYPRE_Int ref_count; 44 45 } hypre_StructVector; 46 47 /*-------------------------------------------------------------------------- 48 * Accessor macros: hypre_StructVector 49 *--------------------------------------------------------------------------*/ 50 51 #define hypre_StructVectorComm(vector) ((vector) -> comm) 52 #define hypre_StructVectorGrid(vector) ((vector) -> grid) 53 #define hypre_StructVectorDataSpace(vector) ((vector) -> data_space) 54 #define hypre_StructVectorData(vector) ((vector) -> data) 55 #define hypre_StructVectorDataAlloced(vector) ((vector) -> data_alloced) 56 #define hypre_StructVectorDataSize(vector) ((vector) -> data_size) 57 #define hypre_StructVectorDataIndices(vector) ((vector) -> data_indices) 58 #define hypre_StructVectorNumGhost(vector) ((vector) -> num_ghost) 59 #define hypre_StructVectorBGhostNotClear(vector)((vector) -> bghost_not_clear) 60 #define hypre_StructVectorGlobalSize(vector) ((vector) -> global_size) 61 #define hypre_StructVectorRefCount(vector) ((vector) -> ref_count) 62 63 #define hypre_StructVectorNDim(vector) \ 64 hypre_StructGridNDim(hypre_StructVectorGrid(vector)) 65 66 #define hypre_StructVectorBox(vector, b) \ 67 hypre_BoxArrayBox(hypre_StructVectorDataSpace(vector), b) 68 69 #define hypre_StructVectorBoxData(vector, b) \ 70 (hypre_StructVectorData(vector) + hypre_StructVectorDataIndices(vector)[b]) 71 72 #define hypre_StructVectorBoxDataValue(vector, b, index) \ 73 (hypre_StructVectorBoxData(vector, b) + \ 74 hypre_BoxIndexRank(hypre_StructVectorBox(vector, b), index)) 75 76 #endif 77