From ec61cfc05046e4eb9716dee5ee8164b5be76f616 Mon Sep 17 00:00:00 2001 From: Alexander Heinlein Date: Tue, 2 Mar 2021 08:16:02 +0100 Subject: [PATCH] Construct GlobalBasisMatrix_ with row map. --- .../CoarseSpaces/FROSch_CoarseSpace_def.hpp | 52 +++++++++++++------ .../shylu_dd/frosch/src/Tools/FROSch_Output.h | 2 +- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/packages/shylu/shylu_dd/frosch/src/CoarseSpaces/FROSch_CoarseSpace_def.hpp b/packages/shylu/shylu_dd/frosch/src/CoarseSpaces/FROSch_CoarseSpace_def.hpp index 2b594688ee1c..eca5bfb35e9e 100644 --- a/packages/shylu/shylu_dd/frosch/src/CoarseSpaces/FROSch_CoarseSpace_def.hpp +++ b/packages/shylu/shylu_dd/frosch/src/CoarseSpaces/FROSch_CoarseSpace_def.hpp @@ -171,25 +171,45 @@ namespace FROSch { FROSCH_ASSERT(!AssembledBasisMap_.is_null(),"FROSch::CoarseSpace: AssembledBasisMap_.is_null()."); FROSCH_ASSERT(!AssembledBasis_.is_null(),"FROSch::CoarseSpace: AssembledBasis_.is_null()."); - GlobalBasisMatrix_ = MatrixFactory::Build(rowMap,AssembledBasisMap_->getNodeNumElements()); // Nonzeroes abhängig von dim/dofs!!! - - LO iD; - SC valueTmp; - - for (UN i=0; igetLocalLength(); i++) { - GOVec indices; - SCVec values; - for (UN j=0; jgetNumVectors(); j++) { - valueTmp=AssembledBasis_->getData(j)[i]; - if (fabs(valueTmp)>treshold) { - indices.push_back(AssembledBasisMap_->getGlobalElement(j)); - values.push_back(valueTmp); + if (rowMap->lib()==UseEpetra) { + GlobalBasisMatrix_ = MatrixFactory::Build(rowMap,AssembledBasisMap_->getNodeNumElements()); // Nonzeroes abhängig von dim/dofs!!! + LO iD; + SC valueTmp; + for (UN i=0; igetLocalLength(); i++) { + GOVec indices; + SCVec values; + for (UN j=0; jgetNumVectors(); j++) { + valueTmp=AssembledBasis_->getData(j)[i]; + if (fabs(valueTmp)>treshold) { + indices.push_back(AssembledBasisMap_->getGlobalElement(j)); + values.push_back(valueTmp); + } + } + iD = repeatedMap->getGlobalElement(i); + + if (rowMap->getLocalElement(iD)!=-1) { // This should prevent duplicate entries on the interface + GlobalBasisMatrix_->insertGlobalValues(iD,indices(),values()); } } - iD = repeatedMap->getGlobalElement(i); + } else { + GlobalBasisMatrix_ = MatrixFactory::Build(rowMap,AssembledBasisMap_,AssembledBasisMap_->getNodeNumElements()); // Nonzeroes abhängig von dim/dofs!!! + LO iD; + SC valueTmp; + for (UN i=0; igetLocalLength(); i++) { + LOVec indices; + SCVec values; + for (UN j=0; jgetNumVectors(); j++) { + valueTmp=AssembledBasis_->getData(j)[i]; + if (fabs(valueTmp)>treshold) { + indices.push_back(j); + values.push_back(valueTmp); + } + } + iD = rowMap->getLocalElement(repeatedMap->getGlobalElement(i)); - if (rowMap->getLocalElement(iD)!=-1) { // This should prevent duplicate entries on the interface - GlobalBasisMatrix_->insertGlobalValues(iD,indices(),values()); + if (iD!=-1) { // This should prevent duplicate entries on the interface + GlobalBasisMatrix_->insertLocalValues(iD,indices(),values()); + } } } GlobalBasisMatrix_->fillComplete(AssembledBasisMapUnique_,rangeMap); //RCP fancy = fancyOStream(rcpFromRef(cout)); GlobalBasisMatrix_->describe(*fancy,VERB_EXTREME); diff --git a/packages/shylu/shylu_dd/frosch/src/Tools/FROSch_Output.h b/packages/shylu/shylu_dd/frosch/src/Tools/FROSch_Output.h index 95364b8a04c2..f5f61805487d 100644 --- a/packages/shylu/shylu_dd/frosch/src/Tools/FROSch_Output.h +++ b/packages/shylu/shylu_dd/frosch/src/Tools/FROSch_Output.h @@ -76,7 +76,7 @@ #endif #ifndef FROSCH_NOTIFICATION - #define FROSCH_NOTIFICATION(CLASS,VERBOSE,OUTPUT) if (VERBOSE) std::cout << std::setw(FROSCH_OUTPUT_INDENT) << " " << CLASS << " : NOTIFICATION: " << OUTPUT << std::endl; + #define FROSCH_NOTIFICATION(CLASS,VERBOSE,OUTPUT) if (VERBOSE) std::cout << std::setw(FROSCH_OUTPUT_INDENT) << " " << "[NOTIFICATION] " << CLASS << ": " << OUTPUT << std::endl; #endif #ifndef FROSCH_TEST_OUTPUT