diff --git a/AMDiS/src/parallel/BddcMlSolver.cc b/AMDiS/src/parallel/BddcMlSolver.cc index 841897d5719d0143992d23c04cf6538b15adebb5..5152b116c4d039d360b3fa600ea7b2b604c1962a 100644 --- a/AMDiS/src/parallel/BddcMlSolver.cc +++ b/AMDiS/src/parallel/BddcMlSolver.cc @@ -231,7 +231,7 @@ namespace AMDiS { // matrix type (set here to unsymmetric) int matrixtype = 0; - Parameters::get("parallel->bddcml->matrix type", matrixtype); + Parameters::get(initFileStr + "->bddcml->matrix type", matrixtype); // Non zero structure of matrix vector<int> i_sparse; @@ -358,14 +358,15 @@ namespace AMDiS { int use_adaptive_int = 0; int use_user_constraint_int = 0; - Parameters::get("parallel->bddcml->arithmetic constraints", use_arithmetic_int); + Parameters::get(initFileStr + "->bddcml->arithmetic constraints", use_arithmetic_int); - // MSG("call to \"bddcml_setup_preconditioner\" with the following arguments (each in one line):\n"); -// MSG(" %d\n", matrixtype); -// MSG(" %d\n", use_defaults_int); -// MSG(" %d\n", parallel_division_int); -// MSG(" %d\n", use_arithmetic_int); -// MSG(" %d\n", use_adaptive_int); + MSG("call to \"bddcml_setup_preconditioner\" with the following arguments (each in one line):\n"); + MSG(" matrixtype = %d\n", matrixtype); + MSG(" use_defaults_int = %d\n", use_defaults_int); + MSG(" parallel_division_int = %d\n", parallel_division_int); + MSG(" use_arithmetic_int = %d\n", use_arithmetic_int); + MSG(" use_adaptive_int = %d\n", use_adaptive_int); + MSG(" use_user_constraint_int = %d\n", use_user_constraint_int); bddcml_setup_preconditioner(&matrixtype, &use_defaults_int, diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc index cb2b5f7553ec2ebcd0ef1527fdf851be6e87629a..f3751fbf9fa650531402227bea4a15edbf4ab511 100644 --- a/AMDiS/src/parallel/PetscSolverFeti.cc +++ b/AMDiS/src/parallel/PetscSolverFeti.cc @@ -715,6 +715,11 @@ namespace AMDiS { bool PetscSolverFeti::testWirebasketEdge(BoundaryObject &edge, const FiniteElemSpace *feSpace) { + FUNCNAME("PetscSolverFeti::testWirebasketEdge()"); + + if (meshDistributor->getMesh()->getDim() == 2) + return true; + if (meshDistributor->getIntBoundary().getDegreeOwn(edge) != 3) return false; @@ -781,6 +786,38 @@ namespace AMDiS { if (it->rankObj.subObj == FACE) allFaces[it.getRank()].insert(it->rankObj); + for (map<int, std::set<BoundaryObject> >::iterator it = allFaces.begin(); + it != allFaces.end(); ++it) { + MSG("SIZE = %d\n", it->second.size()); + if (it->second.size() == 2) { + vector<AtomicBoundary> &bs = intBound.getOwn()[it->first]; + for (int i = 0; i < static_cast<int>(bs.size()); i++) { + if (bs[i].rankObj.subObj == EDGE && + intBound.getDegreeOwn(bs[i].rankObj) == 3) { + MSG("FOUND AN EDGE: %d %d %d\n", + bs[i].rankObj.elIndex, bs[i].rankObj.subObj, bs[i].rankObj.ithObj); + } + } + } + } + + int nBound = 0; + int nInterior = 0; + TraverseStack stack; + ElInfo *elInfo = stack.traverseFirst(meshDistributor->getMesh(), 0, Mesh::CALL_EL_LEVEL | Mesh::FILL_BOUND); + while (elInfo) { + MSG("INSIDE!\n"); + Element *el = elInfo->getElement(); + for (int i = 0; i < el->getGeo(EDGE); i++) { + BoundaryObject bobj(el, elInfo->getType(), EDGE, i); + MSG("CHECK FOR %d/%d/%d (%d)\n", el->getIndex(), EDGE, i, intBound.getDegreeOwn(bobj)); + if (intBound.getDegreeOwn(bobj) == 1) + MSG("B = %d (%d)\n", elInfo->getBoundary(EDGE, i), INTERIOR); + } + elInfo = stack.traverseNext(elInfo); + } + + int nEmptyFaces = 0; vector<vector<BoundaryObject> > data; for (map<int, std::set<BoundaryObject> >::iterator it = allFaces.begin();