Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
iwr
amdis
Commits
e0fde3a2
Commit
e0fde3a2
authored
Aug 31, 2009
by
Thomas Witkowski
Browse files
Changes in ProblemVec matrix debugging functions.
parent
827d3113
Changes
1
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/ProblemVec.cc
View file @
e0fde3a2
...
...
@@ -660,8 +660,6 @@ namespace AMDiS {
// will be set to false).
DOFMatrix
*
matrix
=
(
*
systemMatrix
)[
i
][
j
];
std
::
cout
<<
" i = "
<<
i
<<
" j = "
<<
j
<<
" matrix "
<<
matrix
<<
std
::
endl
;
if
(
matrix
)
matrix
->
calculateNnz
();
...
...
@@ -765,29 +763,6 @@ namespace AMDiS {
if
(
matrix
)
nnz
+=
matrix
->
getBaseMatrix
().
nnz
();
std
::
cout
<<
" i = "
<<
i
<<
" j = "
<<
j
<<
" matrix "
<<
matrix
<<
std
::
endl
;
if
(
i
==
0
&&
matrix
)
{
using
mtl
::
tag
::
major
;
using
mtl
::
tag
::
nz
;
using
mtl
::
begin
;
using
mtl
::
end
;
namespace
traits
=
mtl
::
traits
;
typedef
DOFMatrix
::
base_matrix_type
Matrix
;
traits
::
row
<
Matrix
>::
type
row
(
matrix
->
getBaseMatrix
());
traits
::
col
<
Matrix
>::
type
col
(
matrix
->
getBaseMatrix
());
traits
::
const_value
<
Matrix
>::
type
value
(
matrix
->
getBaseMatrix
());
typedef
traits
::
range_generator
<
major
,
Matrix
>::
type
cursor_type
;
typedef
traits
::
range_generator
<
nz
,
cursor_type
>::
type
icursor_type
;
std
::
cout
.
precision
(
10
);
for
(
cursor_type
cursor
=
begin
<
major
>
(
matrix
->
getBaseMatrix
()),
cend
=
end
<
major
>
(
matrix
->
getBaseMatrix
());
cursor
!=
cend
;
++
cursor
)
for
(
icursor_type
icursor
=
begin
<
nz
>
(
cursor
),
icend
=
end
<
nz
>
(
cursor
);
icursor
!=
icend
;
++
icursor
)
if
(
row
(
*
icursor
)
==
0
)
std
::
cout
<<
"C = "
<<
col
(
*
icursor
)
<<
" : "
<<
value
(
*
icursor
)
<<
std
::
endl
;
std
::
cout
<<
"============================"
<<
std
::
endl
;
}
}
// And now assemble boundary conditions on the vectors
...
...
@@ -1464,19 +1439,27 @@ namespace AMDiS {
typedef
traits
::
range_generator
<
major
,
Matrix
>::
type
cursor_type
;
typedef
traits
::
range_generator
<
nz
,
cursor_type
>::
type
icursor_type
;
// Create map with all world coordinates of all DOFs.
DofToCoord
dofToCoords
;
createDofToCoordMap
(
dofToCoords
);
// Start writing output file.
std
::
ofstream
out
(
filename
.
c_str
());
out
.
precision
(
15
);
// First, we write the number of DOFs the file contains.
out
<<
dofToCoords
.
size
()
<<
std
::
endl
;
int
dimOfWorld
=
Global
::
getGeo
(
WORLD
);
// And now write all the DOF's coords. The first line contains the dof index, all
// the other lines contain one component of the coordinates.
for
(
DofToCoord
::
iterator
it
=
dofToCoords
.
begin
();
it
!=
dofToCoords
.
end
();
++
it
)
{
out
<<
it
->
first
<<
std
::
endl
;
for
(
int
j
=
0
;
j
<
dimOfWorld
;
j
++
)
out
<<
(
it
->
second
)[
j
]
<<
std
::
endl
;
}
// Write the matrices.
for
(
int
i
=
0
;
i
<
nComponents
;
i
++
)
{
for
(
int
j
=
0
;
j
<
nComponents
;
j
++
)
{
DOFMatrix
*
dofmatrix
=
(
*
systemMatrix
)[
i
][
j
];
...
...
@@ -1488,6 +1471,7 @@ namespace AMDiS {
int
nnz
=
matrix
.
nnz
();
int
testNnz
=
0
;
// Write to file, how many entries the matrix conatins.
out
<<
nnz
<<
std
::
endl
;
traits
::
row
<
Matrix
>::
type
row
(
matrix
);
...
...
@@ -1503,6 +1487,7 @@ namespace AMDiS {
}
}
// Just to check, if nnz() is correct.
TEST_EXIT
(
testNnz
==
nnz
)(
"NNZ does not fit together!
\n
"
);
}
}
...
...
@@ -1519,6 +1504,7 @@ namespace AMDiS {
typedef
traits
::
range_generator
<
major
,
Matrix
>::
type
cursor_type
;
typedef
traits
::
range_generator
<
nz
,
cursor_type
>::
type
icursor_type
;
// Create a map from coords of all DOFs, to the DOF indices in this problem.
CoordToDof
coordToDof
;
createCoordToDofMap
(
coordToDof
);
...
...
@@ -1527,9 +1513,12 @@ namespace AMDiS {
DegreeOfFreedom
dof
;
int
dimOfWorld
=
Global
::
getGeo
(
WORLD
);
// Open file and read the number of DOFs the file contains.
std
::
ifstream
in
(
filename
.
c_str
());
int
nReadDofs
;
in
>>
nReadDofs
;
// Read all DOF indices and their world coordinates.
for
(
int
i
=
0
;
i
<
nReadDofs
;
i
++
)
{
in
>>
dof
;
for
(
int
j
=
0
;
j
<
dimOfWorld
;
j
++
)
...
...
@@ -1537,6 +1526,7 @@ namespace AMDiS {
dofToCoord
[
dof
]
=
coords
;
}
// Now we traverse all matrices and check them.
for
(
int
i
=
0
;
i
<
nComponents
;
i
++
)
{
for
(
int
j
=
0
;
j
<
nComponents
;
j
++
)
{
DOFMatrix
*
dofmatrix
=
(
*
systemMatrix
)[
i
][
j
];
...
...
@@ -1547,6 +1537,8 @@ namespace AMDiS {
int
readNnz
;
in
>>
readNnz
;
// Read each entry in file and check it with the corresponding matrix value
// in this problem.
for
(
int
k
=
0
;
k
<
readNnz
;
k
++
)
{
DegreeOfFreedom
row
,
col
;
double
value
;
...
...
@@ -1558,12 +1550,34 @@ namespace AMDiS {
WorldVector
<
double
>
rowCoords
=
dofToCoord
[
row
];
WorldVector
<
double
>
colCoords
=
dofToCoord
[
col
];
if
(
coordToDof
.
find
(
rowCoords
)
==
coordToDof
.
end
())
std
::
cout
<<
"CANNOT FIND"
<<
std
::
endl
;
if
(
coordToDof
.
find
(
rowCoords
)
==
coordToDof
.
end
())
{
std
::
cout
<<
"CANNOT ROW FIND"
<<
std
::
endl
;
rowCoords
.
print
();
exit
(
0
);
}
if
(
coordToDof
.
find
(
colCoords
)
==
coordToDof
.
end
())
{
std
::
cout
<<
"CANNOT COL FIND"
<<
std
::
endl
;
rowCoords
.
print
();
exit
(
0
);
}
DegreeOfFreedom
rowHere
=
coordToDof
[
rowCoords
];
DegreeOfFreedom
colHere
=
coordToDof
[
colCoords
];
double
valueHere
=
(
dofmatrix
->
getBaseMatrix
())[
rowHere
][
colHere
];
double
diff
=
fabs
(
valueHere
-
value
);
// And so we check the difference between the value read from file and the
// corresponding value in the matrix.
if
(
diff
>
1e-10
)
{
std
::
cout
<<
"WRONG value in matrix["
<<
i
<<
"]["
<<
j
<<
"]!"
<<
std
::
endl
<<
" DOF in other matrix ["
<<
row
<<
"]["
<<
col
<<
"] = "
<<
value
<<
std
::
endl
<<
" DOF in this matrix ["
<<
rowHere
<<
"]["
<<
colHere
<<
"] = "
<<
valueHere
<<
std
::
endl
;
exit
(
0
);
}
if
(
coordToDof
.
find
(
colCoords
)
==
coordToDof
.
end
())
std
::
cout
<<
"CANNOT FIND"
<<
std
::
endl
;
}
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment