26 #define fei_file "fei_Filter.cpp"
32 : problemStructure_(probStruct),
34 logInputStream_(NULL),
57 int numRows,
int elemFormat,
65 const double* elStiff_i = NULL;
70 for (i = 0; i < numRows; i++) {
71 elStiff_i = elemStiff[i];
72 for (j = 0; j < numRows; j++) {
73 copy[i][j] = elStiff_i[j];
79 for (i = 0; i < numRows; i++) {
80 elStiff_i = elemStiff[i];
82 for (j = i; j < numRows; j++) {
83 copy[i][j] = elStiff_i[jcol++];
84 copy[j][i] = copy[i][j];
90 for (i = 0; i < numRows; i++) {
91 elStiff_i = elemStiff[i];
92 for (j = 0; j <=i; j++) {
93 copy[i][j] = elStiff_i[j];
94 copy[j][i] = copy[i][j];
100 for (i = 0; i < numRows; i++) {
101 elStiff_i = elemStiff[i];
102 for (j = 0; j < numRows; j++) {
103 copy[j][i] = elStiff_i[j];
109 for (i = 0; i < numRows; i++) {
110 elStiff_i = elemStiff[i];
111 for (j = 0; j <= i; j++) {
112 copy[i][j] = elStiff_i[j];
113 copy[j][i] = copy[i][j];
119 for (i = 0; i < numRows; i++) {
120 elStiff_i = elemStiff[i];
122 for (j = i; j < numRows; j++) {
123 copy[i][j] = elStiff_i[jcol++];
124 copy[j][i] = copy[i][j];
130 throw std::runtime_error(
"copyStiffness ERROR, unrecognized elem-format");
153 fei::console_out() <<
"ERROR, Filter::findNodeDescriptor unable to find node "
154 <<
static_cast<int>(nodeID) <<
FEI_ENDL;
162 int* fieldIDs,
double* norms,
163 std::vector<double>& residValues)
165 std::vector<double> normsArray(numFields, 0.0);
167 std::fill(fieldIDs, fieldIDs+numFields, -999);
169 std::vector<double> tmpNorms(numFields);
170 double* tmpNormsPtr = &tmpNorms[0];
172 double* residPtr = &(residValues[0]);
175 int numDBFields = pfieldIDs.size();
176 std::vector<int>::const_iterator
177 f_iter = pfieldIDs.begin(),
178 f_end = pfieldIDs.end();
183 for(; f_iter != f_end; ++f_iter) {
188 if (offset < numFields) {
189 fieldIDs[offset] = *f_iter;
190 tmpNormsPtr[offset++] = 0.0;
203 for(
int i=0; i<numNodes; i++) {
213 for(
int j=0; j<numNodeFields; j++) {
215 int fSize = DBFieldSize;
217 if (numDBFields > 1) {
219 if (fIndex < 0)
return(-1);
221 if (fSize < 0)
return(-1);
224 for(
int k=0; k<fSize; k++) {
225 int eqn = fieldEqnNums[j]+k;
232 if (reducedEqn < reducedStartRow || reducedEqn > reducedEndRow) {
238 double rval = residPtr[eqn - reducedStartRow];
242 if (tmpNormsPtr[fIndex] < std::abs(rval)) tmpNormsPtr[fIndex] = rval;
245 tmpNormsPtr[fIndex] += std::abs(rval);
248 tmpNormsPtr[fIndex] += rval*rval;
251 FEI_COUT <<
"Filter::residualNorm: ERROR, whichNorm="<<whichNorm
264 if (whichNorm != 0) {
271 for(
int i=0; i<numFields; ++i) {
272 norms[i] = normsArray[i];
275 if (whichNorm == 2) {
276 for(
int i=0; i<numFields; ++i) norms[i] = std::sqrt(norms[i]);
285 if (numParams == 0 || paramStrings == NULL)
return(0);
290 std::string str(&(param[11]));
int GlobalSum(MPI_Comm comm, std::vector< T > &local, std::vector< T > &global)
int getFieldSize(int fieldID)
Filter(SNL_FEI_Structure *probStruct)
#define FEI_LOWER_SYMM_ROW
#define FEI_UPPER_SYMM_ROW
std::ostream * logStream()
const int * getFieldIDList() const
NodeDatabase & getNodeDatabase()
const int * getFieldEqnNumbers() const
const std::vector< int > & getFieldIDs() const
virtual int parameters(int numParams, const char *const *paramStrings)
MPI_Comm getCommunicator() const
static void copyStiffness(const double *const *elemStiff, int numRows, int elemFormat, double **copy)
int binarySearch(const T &item, const T *list, int len)
int calculateResidualNorms(int whichNorm, int numFields, int *fieldIDs, double *norms, std::vector< double > &residValues)
#define FEI_ISTRINGSTREAM
void getNodeAtIndex(int i, const NodeDescriptor *&node) const
SNL_FEI_Structure * problemStructure_
const NodeDescriptor & findNodeDescriptor(GlobalID nodeID) const
#define FEI_UPPER_SYMM_COL
const char * getParam(const char *key, int numParams, const char *const *paramStrings)
void setLogStream(std::ostream *logstrm)
bool translateToReducedEqn(int eqn, int &reducedEqn)
std::ostream * logInputStream_
std::ostream & console_out()
int GlobalMax(MPI_Comm comm, std::vector< T > &local, std::vector< T > &global)
const NodeDescriptor * findNode(GlobalID nodeID) const
#define FEI_LOWER_SYMM_COL
int getNumNodeDescriptors() const
int getNodeWithID(GlobalID nodeID, const NodeDescriptor *&node) const