Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

Commit b0d3cf31 authored by Peter Gottschling's avatar Peter Gottschling
Browse files

Matrixausschriften als Kommentare; Iterationszahlen und Fehlercode können abgefragt werden.

parent e4f84157
......@@ -74,7 +74,9 @@ namespace AMDiS {
if (one_norm(x) > 1e100)
x= 0.0;
#endif
return ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter);
error= ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter);
iterations= iter.iterations();
return error;
}
......@@ -124,7 +126,9 @@ namespace AMDiS {
{
itl::cyclic_iteration<value_type> iter(b, this->max_iter, this->relative,
this->tolerance, this->print_cycle);
return ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter, ell);
error= ITLSolver()(A, x, b, *this->leftPrecon, *this->rightPrecon, iter, ell);
iterations= iter.iterations();
return error;
}
class Creator : public OEMSolverCreator
......
......@@ -64,6 +64,8 @@ namespace AMDiS {
info(0),
residual(0),
print_cycle(100),
iterations(-1),
error(-1),
leftPrecon(NULL),
rightPrecon(NULL)
{}
......@@ -132,6 +134,7 @@ namespace AMDiS {
counter++;
}
// std::cout << "Iterative Solver: A = \n" << A.getMatrix();
int r = solveSystem(A.getMatrix(), xx, bb);
// Copy solution vector to DOFVector
......@@ -164,6 +167,7 @@ namespace AMDiS {
}
// Solver on DOFVector for single system
std::cout << "Iterative Solver (System): A = \n" << A.getMatrix();
int r= solveSystem(A.getMatrix(), xx, bb);
for (int i = 0, counter = 0; i < ns; i++) {
......@@ -227,6 +231,18 @@ namespace AMDiS {
max_iter = i;
}
/// Returns number of iterations in last run of an iterative solver
inline int getIterations()
{
return iterations;
}
/// Returns error code in last run of an iterative solver
inline int getErrorCode()
{
return error;
}
/// Sets \ref info
inline void setInfo(int i)
{
......@@ -257,8 +273,16 @@ namespace AMDiS {
/// Print cycle, after how many iterations the residuum norm is logged.
int print_cycle;
/// How many iterations were performed in last solver (not set by UmfPack)
int iterations;
/// Error code in last solver (not set by UmfPack)
int error;
/// Left preconditioner (ignored by some iterative solvers and by UmfPack)
ITL_BasePreconditioner *leftPrecon;
/// Right preconditioner (ignored by some iterative solvers and by UmfPack)
ITL_BasePreconditioner *rightPrecon;
};
......
......@@ -87,6 +87,8 @@ namespace AMDiS {
solver->update_numeric();
else
solver->update();
// std::cout << "UmfPackSolver: A = \n" << A << "\n";
int code= (*solver)(x, b);
mtl::dense_vector<value_type> r= b - A * x;
std::cout << "UmfPackSolver: ||b-Ax|| = " << two_norm(r) << "\n";
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment