1 #ifndef _fei_FEDataFilter_hpp_
2 #define _fei_FEDataFilter_hpp_
12 #include "fei_fwd.hpp"
14 #include "fei_Filter.hpp"
32 LibraryWrapper* wrapper,
40 int resetSystem(
double s);
41 int resetMatrix(
double s);
42 int resetRHSVector(
double s);
43 int resetInitialGuess(
double s);
47 int loadNodeBCs(
int numNodes,
48 const GlobalID *nodeIDs,
50 const int* offsetsIntoField,
51 const double* prescribedValues);
53 int loadElemBCs(
int numElems,
54 const GlobalID *elemIDs,
56 const double *
const *alpha,
57 const double *
const *beta,
58 const double *
const *gamma);
60 int sumInElem(GlobalID elemBlockID,
62 const GlobalID* elemConn,
63 const double*
const* elemStiffness,
64 const double* elemLoad,
67 int sumInElemMatrix(GlobalID elemBlockID,
69 const GlobalID* elemConn,
70 const double*
const* elemStiffness,
73 int sumInElemRHS(GlobalID elemBlockID,
75 const GlobalID* elemConn,
76 const double* elemLoad);
78 int loadCRMult(
int CRMultID,
80 const GlobalID* CRNodes,
82 const double* CRWeights,
85 int loadCRPen(
int CRPenID,
87 const GlobalID* CRNodes,
89 const double* CRWeights,
93 int putIntoRHS(
int IDType,
97 const double* rhsEntries);
99 int sumIntoRHS(
int IDType,
103 const double* rhsEntries);
105 int sumIntoMatrixDiagonal(
int IDType,
109 const double* coefficients);
114 int parameters(
int numParams,
const char *
const* paramStrings);
117 int residualNorm(
int whichNorm,
int numFields,
118 int* fieldIDs,
double* norms,
double& residTime);
121 int solve(
int& status,
double& sTime);
124 int iterations()
const {
return(iterations_);};
129 int getBlockNodeSolution(GlobalID elemBlockID,
131 const GlobalID *nodeIDs,
135 int getNodalSolution(
int numNodes,
136 const GlobalID *nodeIDs,
141 int getBlockFieldNodeSolution(GlobalID elemBlockID,
144 const GlobalID *nodeIDs,
148 int getBlockElemSolution(GlobalID elemBlockID,
150 const GlobalID *elemIDs,
151 int& numElemDOFPerElement,
154 int getCRMultipliers(
int numCRs,
const int* CRIDs,
double* multipliers);
167 int putBlockNodeSolution(GlobalID elemBlockID,
169 const GlobalID *nodeIDs,
171 const double *estimates);
174 int putBlockFieldNodeSolution(GlobalID elemBlockID,
177 const GlobalID *nodeIDs,
178 const double *estimates);
181 int putBlockElemSolution(GlobalID elemBlockID,
183 const GlobalID *elemIDs,
185 const double *estimates);
187 int putCRMultipliers(
int numMultCRs,
189 const double *multEstimates);
196 int getNodalFieldSolution(
int fieldID,
198 const GlobalID* nodeIDs,
201 int putNodalFieldData(
int fieldID,
203 const GlobalID* nodeIDs,
204 const double* nodeData);
206 int putNodalFieldSolution(
int fieldID,
208 const GlobalID* nodeIDs,
209 const double* nodeData);
211 int unpackSolution();
215 EqnCommMgr* getEqnCommMgr() {
return(eqnCommMgr_);};
217 int setNumRHSVectors(
int numRHSs,
int* rhsIDs);
218 int setCurrentRHS(
int rhsID);
220 int enforceEssentialBCs(
const int* eqns,
const double* alpha,
221 const double* gamma,
int numEqns);
232 int initLinSysCore();
234 int loadFEDataMultCR(
int CRID,
236 const GlobalID* CRNodes,
238 const double* CRWeights,
241 int loadFEDataPenCR(
int CRID,
243 const GlobalID* CRNodes,
245 const double* CRWeights,
249 int generalElemInput(GlobalID elemBlockID,
251 const double*
const* elemStiffness,
252 const double* elemLoad,
255 int generalElemInput(GlobalID elemBlockID,
257 const GlobalID* elemConn,
258 const double*
const* elemStiffness,
259 const double* elemLoad,
262 void allocElemStuff();
264 int giveToMatrix(
int numPtRows,
const int* ptRows,
265 int numPtCols,
const int* ptCols,
266 const double*
const* values,
269 int giveToLocalReducedMatrix(
int numPtRows,
const int* ptRows,
270 int numPtCols,
const int* ptCols,
271 const double*
const* values,
274 int getFromMatrix(
int numPtRows,
const int* ptRows,
275 const int* rowColOffsets,
const int* ptCols,
276 int numColsPerRow,
double** values);
282 int giveToRHS(
int num,
const double* values,
283 const int* indices,
int mode);
285 int giveToLocalReducedRHS(
int num,
const double* values,
286 const int* indices,
int mode);
288 int getFromRHS(
int num,
double* values,
const int* indices);
290 int getEqnSolnEntry(
int eqnNumber,
double& solnValue);
292 int getSharedRemoteSolnEntry(
int eqnNumber,
double& solnValue);
294 int getReducedSolnEntry(
int eqnNumber,
double& solnValue);
296 int formResidual(
double* residValues,
int numLocalEqns);
298 int getRemoteSharedEqns(
int numPtRows,
const int* ptRows,
301 int resetTheMatrix(
double s);
302 int resetTheRHSVector(
double s);
304 int assembleEqns(
int numPtRows,
306 const int* rowNumbers,
307 const int* colIndices,
308 const double*
const* coefs,
309 bool structurallySymmetric,
312 int assembleRHS(
int numValues,
const int* indices,
const double* coefs,
int mode);
314 void debugOutput(
const char* mesg);
316 int createEqnCommMgr_put();
323 LibraryWrapper* wrapper_;
331 int localStartRow_, localEndRow_, numGlobalEqns_;
332 int reducedStartRow_, reducedEndRow_, numReducedRows_;
337 std::vector<int> rhsIDs_;
346 std::vector<GlobalID> penCRIDs_;
348 std::vector<int> rowIndices_;
349 std::vector<int> rowColOffsets_, colIndices_;
361 int numRegularElems_;
362 std::vector<int> constraintBlocks_;
363 std::vector<int> constraintNodeOffsets_;
364 std::vector<int> packedFieldSizes_;