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 fc3bdbaa authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

Work in Dirichlet preconditioner for FETI-DP.

parent 489701e5
......@@ -144,7 +144,15 @@ namespace AMDiS {
const FiniteElemSpace *feSpace = dofMat->getRowFeSpace();
std::set<DegreeOfFreedom>& dRows = dofMat->getDirichletRows();
if (dirichletRows.count(feSpace)) {
WARNING("Implement test that for all components dirichlet rows are equal!\n");
// === Run test if Dirichlet rows are all the same in all components ===
// === of one FE space. ===
TEST_EXIT(dirichletRows[feSpace].size() == dRows.size())
("Wrong number of dirichlet rows!\n");
for (std::set<DegreeOfFreedom>::iterator it0 = dirichletRows[feSpace].begin(),
it1 = dRows.begin(); it1 != dRows.end(); ++it0, ++it1) {
TEST_EXIT(*it0 == *it1)("Wrong DOFs %d %d!\n", *it0, *it1);
}
} else {
dirichletRows[feSpace] = dRows;
}
......@@ -673,8 +681,6 @@ namespace AMDiS {
VecAssemblyBegin(vec_scale_lagrange);
VecAssemblyEnd(vec_scale_lagrange);
VecView(vec_scale_lagrange, PETSC_VIEWER_STDOUT_WORLD);
if (fetiPreconditioner != FETI_NONE || stokesMode) {
MatDuplicate(mat_lagrange, MAT_COPY_VALUES, &mat_lagrange_scaled);
MatDiagonalScale(mat_lagrange_scaled, vec_scale_lagrange, PETSC_NULL);
......@@ -1592,7 +1598,7 @@ namespace AMDiS {
createFetiData();
dirichletRows.clear();
// dirichletRows.clear();
// === Create matrices for the FETI-DP method. ===
......@@ -1727,10 +1733,12 @@ namespace AMDiS {
// Traverse all rows.
for (cursor_type cursor = begin<row>(dofMat->getBaseMatrix()),
cend = end<row>(dofMat->getBaseMatrix()); cursor != cend; ++cursor) {
if (isPrimal(rowFeSpace, *cursor))
if (dirichletRows[rowFeSpace].count(*cursor))
continue;
if (isPrimal(rowFeSpace, *cursor))
continue;
switch (fetiPreconditioner) {
case FETI_DIRICHLET:
......@@ -1742,6 +1750,9 @@ namespace AMDiS {
// Traverse all columns.
for (icursor_type icursor = begin<nz>(cursor), icend = end<nz>(cursor);
icursor != icend; ++icursor) {
if (dirichletRows[colFeSpace].count(col(*icursor)))
continue;
if (isPrimal(colFeSpace, col(*icursor)))
continue;
......@@ -1805,6 +1816,9 @@ namespace AMDiS {
// Traverse all columns.
for (icursor_type icursor = begin<nz>(cursor), icend = end<nz>(cursor);
icursor != icend; ++icursor) {
if (dirichletRows[colFeSpace].count(col(*icursor)))
continue;
if (!isDual(colFeSpace, col(*icursor)))
continue;
......
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