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 __MLISFEI_H__
9 #define __MLISFEI_H__
10 
11 #include "_hypre_utilities.h"
12 #include "mli_febase.h"
13 
14 /****************************************************************************/
15 /* data structures for Finite element grid information                      */
16 /*--------------------------------------------------------------------------*/
17 
18 class MLI_SFEI : public MLI_FEBase
19 {
20    MPI_Comm mpiComm_;
21    int      outputLevel_;
22    int      nElemBlocks_;
23    int      maxElemBlocks_;
24    int      *blkNumElems_;
25    int      *blkElemNEqns_;
26    int      *blkNodeDofs_;
27    int      ***blkElemEqnLists_;
28    double   ***blkElemStiffness_;
29    int      blkIDBase_;
30 
31 public :
32 
33    MLI_SFEI(MPI_Comm comm);
34 
35    ~MLI_SFEI();
36 
37    int setOutputLevel(int level);
38 
39    int freeStiffnessMatrices();
40 
41    int addNumElems(int elemBlk, int nElems, int nNodesPerElem);
42 
43    int loadElemBlock(int elemBlk, int nElems, const int* elemIDs,
44                      const double *const *const *stiff,
45                      int nEqnsPerElem, const int *const * eqnIndices);
46 
getNumElemBlocks()47    int    getNumElemBlocks() {return nElemBlocks_;}
48    int    getBlockNumElems(int iD);
49    int    getBlockElemNEqns(int iD);
50    int    **getBlockElemEqnLists(int iD);
51    double **getBlockElemStiffness(int iD);
52 };
53 
54 #endif
55 
56