FEI Package Browser (Single Doxygen Collection)  Version of the Day
PoissonData.hpp
Go to the documentation of this file.
1 #ifndef _PoissonData_h_
2 #define _PoissonData_h_
3 /*--------------------------------------------------------------------*/
4 /* Copyright 2005 Sandia Corporation. */
5 /* Under the terms of Contract DE-AC04-94AL85000, there is a */
6 /* non-exclusive license for use of this work by or on behalf */
7 /* of the U.S. Government. Export of this program may require */
8 /* a license from the United States Government. */
9 /*--------------------------------------------------------------------*/
10 
11 #include <fei_base.hpp>
12 //
13 //This is a class for use in exercising FEI implementations.
14 //
15 //This class sets up test data for the Poisson equation on a 2D square,
16 //and provides query functions for obtaining that data.
17 //
18 //The calling program (the 'user' of PoissonData) is left
19 //with the task of calling the FEI functions.
20 //
21 //Also note:
22 //
23 // 1. This class only provides 1 element-block per processor currently.
24 // 2. The function calculateBCs() must be called before the boundary
25 // condition data is requested.
26 //
27 // Alan Williams 12-20-2000
28 //
29 
30 class PoissonData {
31  public:
32  //constructor -- see PoissonData.cpp for descriptions of these
33  //parameters.
34  PoissonData(int L,
35  int numProcs, int localProc, int outputLevel);
36 
37  //destructor.
38  ~PoissonData();
39 
40  int getElemFormat() {return(elemFormat_); };
41 
42  //hardwired for only 1 field...
43  int getNumFields() { return(1);};
44  int* getFieldSizes() { return(&fieldSize_);};
45  int* getFieldIDs() { return(&fieldIDs_[0][0]);};
46 
48 
51  int getNumNodesPerElement() { return(elem_->numElemNodes()); };
52 
53  int* getNumFieldsPerNodeList() { return( numFields_ ); };
54  int** getNodalFieldIDsTable() { return( fieldIDs_ ); };
55 
57 
58  double** getElemStiffness(GlobalID elemID);
59  double* getElemLoad(GlobalID elemID);
60 
61  void addBCNode(GlobalID nodeID, double x, double y);
62 
63  void calculateBCs();
64 
65  int getNumBCNodes() { return( BCNodeIDs_.size() ); }
66  GlobalID* getBCNodeIDs() { return( &BCNodeIDs_[0] ); }
67  int getBCFieldID() { return( fieldIDs_[0][0] ); }
68  double* getBCValues() { return( &BCValues_[0] ); }
69 
70 
71  void getLeftSharedNodes(int& numShared, GlobalID* sharedNodeIDs,
72  int* numProcsPerSharedNode,
73  int** sharingProcs);
74  void getRightSharedNodes(int& numShared, GlobalID* sharedNodeIDs,
75  int* numProcsPerSharedNode,
76  int** sharingProcs);
77  void getTopSharedNodes(int& numShared, GlobalID* sharedNodeIDs,
78  int* numProcsPerSharedNode,
79  int** sharingProcs);
80  void getBottomSharedNodes(int& numShared, GlobalID* sharedNodeIDs,
81  int* numProcsPerSharedNode,
82  int** sharingProcs);
83  private:
84  void check1();
85  void calculateDistribution();
86 
87  void messageAbort(const char* message);
88 
89  void calculateConnectivity(GlobalID* conn, int size, GlobalID elemID);
90  void initializeFieldStuff();
91  void deleteFieldArrays();
92 
93  void printSharedNodes(const char* str,
94  int numShared,
95  GlobalID* nodeIDs,
96  int** shareProcs,
97  int* numShareProcs);
98 
99  Poisson_Elem* elem_; //we're only going to have 1 element instance!!
102 
106 
107  int L_;
110 
113 
119 
120  //*************** field description variables *********
123  int** fieldIDs_;
125 
126  //************* element IDs and connectivities ********
129 
130  //************* boundary condition stuff **************
131  std::vector<GlobalID> BCNodeIDs_;
132  std::vector<double> BCValues_;
133 };
134 
135 int init_elem_connectivities(FEI* fei, PoissonData& poissonData);
136 
138  PoissonData& poissonData);
139 
140 int set_shared_nodes(FEI* fei, PoissonData& poissonData);
141 
142 int set_shared_nodes(fei::VectorSpace* nodeSpace, PoissonData& poissonData);
143 
144 int load_elem_data(FEI* fei, PoissonData& poissonData);
145 
146 int load_elem_data_putrhs(FEI* fei, PoissonData& poissonData);
147 
148 int load_elem_data(fei::MatrixGraph* matrixGraph,
149  fei::Matrix* mat, fei::Vector* rhs,
150  PoissonData& poissonData);
151 
152 int load_BC_data(FEI* fei, PoissonData& poissonData);
153 
154 int load_BC_data(fei::LinearSystem* linSys, PoissonData& poissonData);
155 
156 #endif
157 
PoissonData::fieldIDs_
int ** fieldIDs_
Definition: PoissonData.hpp:123
fei::Vector
Definition: fei_Vector.hpp:57
PoissonData::messageAbort
void messageAbort(const char *message)
Definition: PoissonData.cpp:173
fei_base.hpp
PoissonData::elemFormat_
int elemFormat_
Definition: PoissonData.hpp:118
PoissonData::getElemStiffness
double ** getElemStiffness(GlobalID elemID)
Definition: PoissonData.cpp:199
PoissonData::getBCNodeIDs
GlobalID * getBCNodeIDs()
Definition: PoissonData.hpp:66
PoissonData::getNumFieldsPerNodeList
int * getNumFieldsPerNodeList()
Definition: PoissonData.hpp:53
set_shared_nodes
int set_shared_nodes(FEI *fei, PoissonData &poissonData)
Definition: PoissonData.cpp:790
PoissonData::startElement_
int startElement_
Definition: PoissonData.hpp:101
PoissonData::getElemBlockID
GlobalID getElemBlockID()
Definition: PoissonData.hpp:47
load_elem_data
int load_elem_data(FEI *fei, PoissonData &poissonData)
Definition: PoissonData.cpp:842
PoissonData::getTopSharedNodes
void getTopSharedNodes(int &numShared, GlobalID *sharedNodeIDs, int *numProcsPerSharedNode, int **sharingProcs)
Definition: PoissonData.cpp:513
PoissonData::numProcs_
int numProcs_
Definition: PoissonData.hpp:103
load_elem_data_putrhs
int load_elem_data_putrhs(FEI *fei, PoissonData &poissonData)
Definition: PoissonData.cpp:867
PoissonData::getBCValues
double * getBCValues()
Definition: PoissonData.hpp:68
PoissonData::addBCNode
void addBCNode(GlobalID nodeID, double x, double y)
Definition: PoissonData.cpp:738
PoissonData::getBottomSharedNodes
void getBottomSharedNodes(int &numShared, GlobalID *sharedNodeIDs, int *numProcsPerSharedNode, int **sharingProcs)
Definition: PoissonData.cpp:600
PoissonData::BCValues_
std::vector< double > BCValues_
Definition: PoissonData.hpp:132
PoissonData::maxProcX_
int maxProcX_
Definition: PoissonData.hpp:109
Poisson_Elem
Definition: Poisson_Elem.hpp:12
Poisson_Elem::numElemNodes
int numElemNodes() const
Definition: Poisson_Elem.hpp:26
load_BC_data
int load_BC_data(FEI *fei, PoissonData &poissonData)
Definition: PoissonData.cpp:904
PoissonData::numElemBlocks_
int numElemBlocks_
Definition: PoissonData.hpp:111
PoissonData::procY_
int procY_
Definition: PoissonData.hpp:108
PoissonData::fieldsPerNode_
int fieldsPerNode_
Definition: PoissonData.hpp:115
FEI
Definition: FEI.hpp:144
PoissonData::L_
int L_
Definition: PoissonData.hpp:107
PoissonData::getElemFormat
int getElemFormat()
Definition: PoissonData.hpp:40
PoissonData::getElementConnectivity
GlobalID * getElementConnectivity(GlobalID elemID)
Definition: PoissonData.cpp:180
fei::LinearSystem
Definition: fei_LinearSystem.hpp:26
PoissonData::initializeFieldStuff
void initializeFieldStuff()
Definition: PoissonData.cpp:300
PoissonData::maxProcY_
int maxProcY_
Definition: PoissonData.hpp:109
PoissonData::elemSetID_
int elemSetID_
Definition: PoissonData.hpp:117
PoissonData::getBCFieldID
int getBCFieldID()
Definition: PoissonData.hpp:67
PoissonData::deleteFieldArrays
void deleteFieldArrays()
Definition: PoissonData.cpp:321
PoissonData
Definition: PoissonData.hpp:30
PoissonData::solveType_
int solveType_
Definition: PoissonData.hpp:112
PoissonData::numFields_
int * numFields_
Definition: PoissonData.hpp:122
PoissonData::calculateDistribution
void calculateDistribution()
Definition: PoissonData.cpp:114
init_elem_connectivities
int init_elem_connectivities(FEI *fei, PoissonData &poissonData)
Definition: PoissonData.cpp:754
PoissonData::procX_
int procX_
Definition: PoissonData.hpp:108
PoissonData::getNodalFieldIDsTable
int ** getNodalFieldIDsTable()
Definition: PoissonData.hpp:54
fei::MatrixGraph
Definition: fei_MatrixGraph.hpp:33
PoissonData::getLeftSharedNodes
void getLeftSharedNodes(int &numShared, GlobalID *sharedNodeIDs, int *numProcsPerSharedNode, int **sharingProcs)
Definition: PoissonData.cpp:336
PoissonData::PoissonData
PoissonData(int L, int numProcs, int localProc, int outputLevel)
Definition: PoissonData.cpp:30
PoissonData::~PoissonData
~PoissonData()
Definition: PoissonData.cpp:83
PoissonData::check1
void check1()
Definition: PoissonData.cpp:97
PoissonData::localProc_
int localProc_
Definition: PoissonData.hpp:104
PoissonData::printSharedNodes
void printSharedNodes(const char *str, int numShared, GlobalID *nodeIDs, int **shareProcs, int *numShareProcs)
Definition: PoissonData.cpp:688
PoissonData::fieldArraysAllocated_
bool fieldArraysAllocated_
Definition: PoissonData.hpp:124
PoissonData::elemIDs_
GlobalID * elemIDs_
Definition: PoissonData.hpp:127
GlobalID
int GlobalID
Definition: fei_defs.h:60
PoissonData::getRightSharedNodes
void getRightSharedNodes(int &numShared, GlobalID *sharedNodeIDs, int *numProcsPerSharedNode, int **sharingProcs)
Definition: PoissonData.cpp:426
PoissonData::numLocalElements_
int numLocalElements_
Definition: PoissonData.hpp:100
PoissonData::calculateConnectivity
void calculateConnectivity(GlobalID *conn, int size, GlobalID elemID)
Definition: PoissonData.cpp:266
PoissonData::elemBlockID_
GlobalID elemBlockID_
Definition: PoissonData.hpp:116
PoissonData::outputLevel_
int outputLevel_
Definition: PoissonData.hpp:105
PoissonData::getFieldIDs
int * getFieldIDs()
Definition: PoissonData.hpp:45
fei
Definition: fei_ArrayUtils.hpp:16
fei::Matrix
Definition: fei_Matrix.hpp:30
PoissonData::getNumBCNodes
int getNumBCNodes()
Definition: PoissonData.hpp:65
PoissonData::BCNodeIDs_
std::vector< GlobalID > BCNodeIDs_
Definition: PoissonData.hpp:131
fei::localProc
int localProc(MPI_Comm comm)
Definition: fei_CommUtils.cpp:13
PoissonData::getNumFields
int getNumFields()
Definition: PoissonData.hpp:43
PoissonData::getNumLocalElements
int getNumLocalElements()
Definition: PoissonData.hpp:49
PoissonData::nodesPerElement_
int nodesPerElement_
Definition: PoissonData.hpp:114
PoissonData::getNumNodesPerElement
int getNumNodesPerElement()
Definition: PoissonData.hpp:51
PoissonData::getFieldSizes
int * getFieldSizes()
Definition: PoissonData.hpp:44
fei::VectorSpace
Definition: fei_VectorSpace.hpp:62
fei::numProcs
int numProcs(MPI_Comm comm)
Definition: fei_CommUtils.cpp:25
PoissonData::getElemLoad
double * getElemLoad(GlobalID elemID)
Definition: PoissonData.cpp:232
PoissonData::elem_
Poisson_Elem * elem_
Definition: PoissonData.hpp:99
PoissonData::elemIDsAllocated_
bool elemIDsAllocated_
Definition: PoissonData.hpp:128
PoissonData::calculateBCs
void calculateBCs()
Definition: PoissonData.cpp:703
PoissonData::fieldSize_
int fieldSize_
Definition: PoissonData.hpp:121
PoissonData::getLocalElementIDs
GlobalID * getLocalElementIDs()
Definition: PoissonData.hpp:50