57 blocksize_(blocksize_in),
66 int dim = blocksize_in*blocksize_in;
75 for(
int k=0; k<dim; ++k)
coefs_[i][j*dim+k] = 0.0;
83 int num_off_diagonals,
89 blocksize_(blocksize_in),
99 int max_row_length = 1+num_off_diagonals*2;
103 if (i >= num_off_diagonals &&
numrows_-i > num_off_diagonals) {
107 if (i<num_off_diagonals) {
115 int dim = blocksize_in*blocksize_in;
118 int first_col = i - max_row_length/2;
119 if (first_col < 0) first_col = 0;
123 for(
int k=0; k<dim; ++k) {
135 int first_node = 2*elem_id;
140 int num_dof_per_node,
141 bool make_numerically_nonsymmetric)
146 blocksize_(num_dof_per_node),
178 for(i=0; i<num_quad_elements; ++i) {
182 int node_j = nodes[j];
184 int insertPoint = -1;
200 coefs_[i] =
new double[len];
201 for(j=0; j<len; ++j) {
202 if (make_numerically_nonsymmetric) {
229 int insertPoint = -1;
233 std::cerr <<
"ERROR, row " << row
234 <<
" not found in matrix_data"<< std::endl;
241 std::cerr <<
"ERROR, col " << col
242 <<
" not found in matrix_data"<< std::endl;
247 return( &(
coefs_[row_idx][col_idx*dim]) );
276 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
278 for(
int i=0; i<numMyRows; ++i) {
279 int row = myRows_int[i];
280 int rowLen =
A.NumGlobalEntries(row);
285 int* indices =
new int[rowLen];
286 double* values =
new double[rowLen];
287 A.ExtractGlobalRowCopy(row, rowLen, rowLen, values, indices);
289 util.
Sort(
true, rowLen, indices, 1, &values, 0, 0, 0, 0);
293 double* this_coefs =
coefs_[row];
295 for(
int j=0; j<rowLen; ++j) {
296 if (indices[j] != this_indices[j]) {
299 if (values[j] != this_coefs[j]) {
307 if (!same)
return(
false);
311 throw "matrix_data::compare_local_data: global index int but no API for it.";
315 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
317 for(
int i=0; i<numMyRows; ++i) {
318 long long row = myRows_LL[i];
319 int rowLen =
A.NumGlobalEntries(row);
324 long long* indices =
new long long[rowLen];
325 double* values =
new double[rowLen];
326 A.ExtractGlobalRowCopy(row, rowLen, rowLen, values, indices);
328 util.
Sort(
true, rowLen, indices, 1, &values, 0, 0, 0, 0);
332 double* this_coefs =
coefs_[row];
334 for(
int j=0; j<rowLen; ++j) {
335 if (indices[j] != this_indices[j]) {
338 if (values[j] != this_coefs[j]) {
346 if (!same)
return(
false);
350 throw "matrix_data::compare_local_data: global index long long but no API for it.";
355 throw "matrix_data::compare_local_data: global index type of map unknown.";