12 #include <fei_fwd.hpp>
14 #include <fei_macros.hpp>
15 #include <fei_iostream.hpp>
36 virtual int initialize() = 0;
39 virtual int resetSystem(
double s) = 0;
40 virtual int resetMatrix(
double s) = 0;
41 virtual int resetRHSVector(
double s) = 0;
42 virtual int resetInitialGuess(
double s) = 0;
44 virtual int deleteMultCRs() = 0;
46 virtual int loadNodeBCs(
int ,
52 fei::console_out() <<
"fei ERROR, Filter::loadNodeBCs not overridden."<<FEI_ENDL;
56 virtual int loadElemBCs(
int numElems,
57 const GlobalID *elemIDs,
59 const double *
const *alpha,
60 const double *
const *beta,
61 const double *
const *gamma) = 0;
63 virtual int sumInElem(GlobalID ,
66 const double*
const* ,
70 virtual int sumInElemMatrix(GlobalID ,
73 const double*
const* ,
76 virtual int sumInElemRHS(GlobalID ,
79 const double* ) {
return(0); }
81 virtual int loadCRMult(
int CRMultID,
83 const GlobalID* CRNodes,
85 const double* CRWeights,
88 virtual int loadCRPen(
int CRPenID,
90 const GlobalID* CRNodes,
92 const double* CRWeights,
96 virtual int putIntoRHS(
int IDType,
100 const double* rhsEntries) = 0;
102 virtual int sumIntoRHS(
int IDType,
106 const double* rhsEntries) = 0;
108 virtual int sumIntoMatrixDiagonal(
int ,
115 virtual int loadComplete() = 0;
118 virtual int parameters(
int numParams,
const char *
const* paramStrings);
121 virtual int residualNorm(
int whichNorm,
int numFields,
122 int* fieldIDs,
double* norms,
double& residTime) = 0;
125 virtual int solve(
int& status,
double& sTime) = 0;
128 virtual int iterations()
const = 0;
133 virtual int getBlockNodeSolution(GlobalID elemBlockID,
135 const GlobalID *nodeIDs,
137 double *results) = 0;
139 virtual int getNodalSolution(
int numNodes,
140 const GlobalID *nodeIDs,
142 double *results) = 0;
145 virtual int getBlockFieldNodeSolution(GlobalID elemBlockID,
148 const GlobalID *nodeIDs,
149 double *results) = 0;
152 virtual int getBlockElemSolution(GlobalID elemBlockID,
154 const GlobalID *elemIDs,
155 int& numElemDOFPerElement,
156 double *results) = 0;
158 virtual int getCRMultipliers(
int numCRs,
const int* CRIDs,
159 double* multipliers) = 0;
172 virtual int putBlockNodeSolution(GlobalID elemBlockID,
174 const GlobalID *nodeIDs,
176 const double *estimates) = 0;
179 virtual int putBlockFieldNodeSolution(GlobalID elemBlockID,
182 const GlobalID *nodeIDs,
183 const double *estimates) = 0;
185 virtual int putBlockElemSolution(GlobalID elemBlockID,
187 const GlobalID *elemIDs,
189 const double *estimates) = 0;
191 virtual int putCRMultipliers(
int numMultCRs,
193 const double *multEstimates) = 0;
201 virtual int getNodalFieldSolution(
int fieldID,
203 const GlobalID* nodeIDs,
204 double* results) = 0;
206 virtual int putNodalFieldData(
int fieldID,
208 const GlobalID* nodeIDs,
209 const double* nodeData) = 0;
211 virtual int putNodalFieldSolution(
int fieldID,
213 const GlobalID* nodeIDs,
214 const double* nodeData) = 0;
216 virtual int unpackSolution() = 0;
218 virtual void setEqnCommMgr(
EqnCommMgr* eqnCommMgr) = 0;
222 virtual int setNumRHSVectors(
int numRHSs,
int* rhsIDs) = 0;
223 virtual int setCurrentRHS(
int rhsID) = 0;
225 virtual int exchangeRemoteEquations() {
return 0; }
227 virtual int enforceEssentialBCs(
const int* eqns,
const double* alpha,
228 const double* gamma,
int numEqns) = 0;
230 static void copyStiffness(
const double*
const* elemStiff,
int numRows,
231 int elemFormat,
double** copy);
233 void setLogStream(std::ostream* logstrm);
234 std::ostream* logStream();
237 virtual int generalElemInput(GlobalID ,
240 const double*
const* ,
244 int generalCoefInput(
int ,
249 const double*
const* ,
251 int ,
int ) {
return(-1);}
253 int calculateResidualNorms(
int whichNorm,
int numFields,
254 int* fieldIDs,
double* norms,
255 std::vector<double>& residValues);
263 std::ostream* logInputStream_;
272 : problemStructure_(NULL), logInput_(false), logInputStream_(NULL),
273 outputLevel_(0), numProcs_(0), localRank_(0)
std::ostream & console_out()