From 4286017038bec9a6d9707d3e23ff81f0320b4b34 Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Thu, 21 Apr 2011 12:59:29 +0000 Subject: [PATCH] And make parallel compilation running. --- AMDiS/src/Mesh.cc | 4 +- AMDiS/src/ProblemInstat.cc | 15 +++-- AMDiS/src/ProblemInstat.h | 10 +-- AMDiS/src/parallel/MeshDistributor.cc | 64 +++++++++---------- AMDiS/src/parallel/MeshDistributor.h | 6 +- AMDiS/src/parallel/ParallelDebug.cc | 2 +- AMDiS/src/parallel/ParallelProblemStatBase.cc | 4 +- AMDiS/src/parallel/ParallelProblemStatBase.h | 11 +++- AMDiS/src/time/RosenbrockStationary.cc | 14 ++-- AMDiS/src/time/RosenbrockStationary.h | 4 +- 10 files changed, 74 insertions(+), 60 deletions(-) diff --git a/AMDiS/src/Mesh.cc b/AMDiS/src/Mesh.cc index ec6baaac..b54f9ea2 100644 --- a/AMDiS/src/Mesh.cc +++ b/AMDiS/src/Mesh.cc @@ -1393,7 +1393,9 @@ namespace AMDiS { stringstream oss; oss << globalRefinements; - ADD_PARAMETER(0, name + "->global refinements", oss.str().c_str()); + Parameters::addGlobalParameter(0, + name + "->global refinements", + oss.str().c_str()); // === Print a note to the screen that another mesh file will be used. === diff --git a/AMDiS/src/ProblemInstat.cc b/AMDiS/src/ProblemInstat.cc index 95622baa..af79b2f4 100644 --- a/AMDiS/src/ProblemInstat.cc +++ b/AMDiS/src/ProblemInstat.cc @@ -21,6 +21,8 @@ #include "io/FileWriter.h" namespace AMDiS { + + using namespace std; void ProblemInstatBase::solveInitialProblem(AdaptInfo *adaptInfo) { @@ -54,23 +56,26 @@ namespace AMDiS { } - ProblemInstat::ProblemInstat(std::string sname, - ProblemStat *prob, ProblemStatBase *initialProb) + ProblemInstat::ProblemInstat(string sname, + ProblemStatSeq *prob, + ProblemStatBase *initialProb) : ProblemInstatBase(sname, initialProb), problemStat(prob), oldSolution(NULL) {} - ProblemInstat::ProblemInstat(std::string sname, ProblemStat &prob) + ProblemInstat::ProblemInstat(string sname, + ProblemStatSeq &prob) : ProblemInstatBase(sname, NULL), problemStat(&prob), oldSolution(NULL) {} - ProblemInstat::ProblemInstat(std::string sname, - ProblemStat &prob, ProblemStatBase &initialProb) + ProblemInstat::ProblemInstat(string sname, + ProblemStatSeq &prob, + ProblemStatBase &initialProb) : ProblemInstatBase(sname, &initialProb), problemStat(&prob), oldSolution(NULL) diff --git a/AMDiS/src/ProblemInstat.h b/AMDiS/src/ProblemInstat.h index 2155f92a..d4f5b768 100644 --- a/AMDiS/src/ProblemInstat.h +++ b/AMDiS/src/ProblemInstat.h @@ -148,12 +148,12 @@ namespace AMDiS { public: /// Constructs a ProblemInstatVec with prob as its stationary problem. ProblemInstat(std::string name, - ProblemStat *prob, + ProblemStatSeq *prob, ProblemStatBase *initialProb = NULL); - ProblemInstat(std::string name, ProblemStat &prob); + ProblemInstat(std::string name, ProblemStatSeq &prob); - ProblemInstat(std::string name, ProblemStat &prob, ProblemStatBase &initialProb); + ProblemInstat(std::string name, ProblemStatSeq &prob, ProblemStatBase &initialProb); /// Destructor. virtual ~ProblemInstat(); @@ -173,7 +173,7 @@ namespace AMDiS { void closeTimestep(AdaptInfo *adaptInfo); /// Returns \ref problemStat. - inline ProblemStat* getStatProblem() + inline ProblemStatSeq* getStatProblem() { return problemStat; } @@ -198,7 +198,7 @@ namespace AMDiS { protected: /// Space problem solved in each timestep. - ProblemStat* problemStat; + ProblemStatSeq* problemStat; /// Solution of the last timestep. SystemVector *oldSolution; diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc index 556b1e43..f17a4459 100644 --- a/AMDiS/src/parallel/MeshDistributor.cc +++ b/AMDiS/src/parallel/MeshDistributor.cc @@ -44,7 +44,7 @@ #include "StandardProblemIteration.h" #include "VertexVector.h" #include "MeshStructure.h" -#include "ProblemVec.h" +#include "ProblemStat.h" #include "ProblemInstat.h" #include "RefinementManager3d.h" #include "Debug.h" @@ -65,7 +65,7 @@ namespace AMDiS { MeshDistributor::MeshDistributor() - : probStat(0), + : problemStat(0), initialized(false), name("parallel"), feSpace(NULL), @@ -336,20 +336,20 @@ namespace AMDiS { } - void MeshDistributor::addProblemStat(ProblemVec *probVec) + void MeshDistributor::addProblemStat(ProblemStatSeq *probStat) { - FUNCNAME("MeshDistributor::addProblemVec()"); + FUNCNAME("MeshDistributor::addProblemStat()"); if (feSpace != NULL) { - vector<FiniteElemSpace*> feSpaces = probVec->getFeSpaces(); + vector<FiniteElemSpace*> feSpaces = probStat->getFeSpaces(); for (unsigned int i = 0; i < feSpaces.size(); i++) { TEST_EXIT(feSpace == feSpaces[i]) ("Parallelizaton is not supported for multiple FE spaces!\n"); } } else { - feSpace = probVec->getFeSpace(0); + feSpace = probStat->getFeSpace(0); mesh = feSpace->getMesh(); - info = probVec->getInfo(); + info = probStat->getInfo(); TEST_EXIT(mesh->getNumberOfDOFAdmin() == 1) ("Only meshes with one DOFAdmin are supported!\n"); @@ -372,7 +372,7 @@ namespace AMDiS { // Create parallel serialization file writer, if needed. int writeSerialization = 0; - Parameters::get(probVec->getName() + "->output->write serialization", + Parameters::get(probStat->getName() + "->output->write serialization", writeSerialization); if (writeSerialization && !writeSerializationFile) { string filename = ""; @@ -382,19 +382,19 @@ namespace AMDiS { ("No filename defined for parallel serialization file!\n"); int tsModulo = -1; - Parameters::get(probVec->getName() + "->output->write every i-th timestep", + Parameters::get(probStat->getName() + "->output->write every i-th timestep", tsModulo); - probVec->getFileWriterList().push_back(new Serializer<MeshDistributor>(this, filename, tsModulo)); + probStat->getFileWriterList().push_back(new Serializer<MeshDistributor>(this, filename, tsModulo)); writeSerializationFile = true; } int readSerialization = 0; - Parameters::get(probVec->getName() + "->input->read serialization", + Parameters::get(probStat->getName() + "->input->read serialization", readSerialization); if (readSerialization) { string filename = ""; - Parameters::get(probVec->getName() + "->input->serialization filename", + Parameters::get(probStat->getName() + "->input->serialization filename", filename); filename += ".p" + lexical_cast<string>(mpiRank); MSG("Start deserialization with %s\n", filename.c_str()); @@ -403,7 +403,7 @@ namespace AMDiS { TEST_EXIT(!in.fail())("Could not open deserialization file: %s\n", filename.c_str()); - probVec->deserialize(in); + probStat->deserialize(in); in.close(); MSG("Deserialization from file: %s\n", filename.c_str()); @@ -425,13 +425,13 @@ namespace AMDiS { deserialized = true; } - probStat.push_back(probVec); + problemStat.push_back(probStat); // If the mesh distributor is already initialized, don't forgett to set rank // DOFs object to the matrices and vectors of the added stationary problem. if (initialized) - setRankDofs(probVec); + setRankDofs(probStat); } @@ -648,27 +648,27 @@ namespace AMDiS { } - void MeshDistributor::setRankDofs(ProblemVec *probVec) + void MeshDistributor::setRankDofs(ProblemStatSeq *probStat) { - int nComponents = probVec->getNumComponents(); + int nComponents = probStat->getNumComponents(); for (int i = 0; i < nComponents; i++) { for (int j = 0; j < nComponents; j++) - if (probVec->getSystemMatrix(i, j)) - probVec->getSystemMatrix(i, j)->setRankDofs(isRankDof); + if (probStat->getSystemMatrix(i, j)) + probStat->getSystemMatrix(i, j)->setRankDofs(isRankDof); - TEST_EXIT_DBG(probVec->getRhs()->getDOFVector(i))("No RHS vector!\n"); - TEST_EXIT_DBG(probVec->getSolution()->getDOFVector(i))("No solution vector!\n"); + TEST_EXIT_DBG(probStat->getRhs()->getDOFVector(i))("No RHS vector!\n"); + TEST_EXIT_DBG(probStat->getSolution()->getDOFVector(i))("No solution vector!\n"); - probVec->getRhs()->getDOFVector(i)->setRankDofs(isRankDof); - probVec->getSolution()->getDOFVector(i)->setRankDofs(isRankDof); + probStat->getRhs()->getDOFVector(i)->setRankDofs(isRankDof); + probStat->getSolution()->getDOFVector(i)->setRankDofs(isRankDof); } } void MeshDistributor::setRankDofs() { - for (unsigned int i = 0; i < probStat.size(); i++) - setRankDofs(probStat[i]); + for (unsigned int i = 0; i < problemStat.size(); i++) + setRankDofs(problemStat[i]); } @@ -677,21 +677,21 @@ namespace AMDiS { FUNCNAME("MeshDistributor::removePeriodicBoundaryConditions()"); // Remove periodic boundaries in boundary manager on matrices and vectors. - for (unsigned int i = 0; i < probStat.size(); i++) { - int nComponents = probStat[i]->getNumComponents(); + for (unsigned int i = 0; i < problemStat.size(); i++) { + int nComponents = problemStat[i]->getNumComponents(); for (int j = 0; j < nComponents; j++) { for (int k = 0; k < nComponents; k++) { - DOFMatrix* mat = probStat[i]->getSystemMatrix(j, k); + DOFMatrix* mat = problemStat[i]->getSystemMatrix(j, k); if (mat && mat->getBoundaryManager()) removePeriodicBoundaryConditions(const_cast<BoundaryIndexMap&>(mat->getBoundaryManager()->getBoundaryConditionMap())); } - if (probStat[i]->getSolution()->getDOFVector(j)->getBoundaryManager()) - removePeriodicBoundaryConditions(const_cast<BoundaryIndexMap&>(probStat[i]->getSolution()->getDOFVector(j)->getBoundaryManager()->getBoundaryConditionMap())); + if (problemStat[i]->getSolution()->getDOFVector(j)->getBoundaryManager()) + removePeriodicBoundaryConditions(const_cast<BoundaryIndexMap&>(problemStat[i]->getSolution()->getDOFVector(j)->getBoundaryManager()->getBoundaryConditionMap())); - if (probStat[i]->getRhs()->getDOFVector(j)->getBoundaryManager()) - removePeriodicBoundaryConditions(const_cast<BoundaryIndexMap&>(probStat[i]->getRhs()->getDOFVector(j)->getBoundaryManager()->getBoundaryConditionMap())); + if (problemStat[i]->getRhs()->getDOFVector(j)->getBoundaryManager()) + removePeriodicBoundaryConditions(const_cast<BoundaryIndexMap&>(problemStat[i]->getRhs()->getDOFVector(j)->getBoundaryManager()->getBoundaryConditionMap())); } } diff --git a/AMDiS/src/parallel/MeshDistributor.h b/AMDiS/src/parallel/MeshDistributor.h index 2342a21a..a4e4e05d 100644 --- a/AMDiS/src/parallel/MeshDistributor.h +++ b/AMDiS/src/parallel/MeshDistributor.h @@ -93,7 +93,7 @@ namespace AMDiS { void exitParallelization(); - void addProblemStat(ProblemVec *probVec); + void addProblemStat(ProblemStatSeq *probStat); /// Adds a DOFVector to the set of \ref interchangeVecs. Thus, this vector will /// be automatically interchanged between ranks when mesh is repartitioned. @@ -367,7 +367,7 @@ namespace AMDiS { /// Sets \ref isRankDof to all matrices and rhs vectors in a given /// stationary problem. - void setRankDofs(ProblemVec *probVec); + void setRankDofs(ProblemStatSeq *probStat); /// Sets \ref isRankDof to all matrices and rhs vectors in all stationary problems. void setRankDofs(); @@ -443,7 +443,7 @@ namespace AMDiS { protected: /// List of all stationary problems that are managed by this mesh distributor. - vector<ProblemVec*> probStat; + vector<ProblemStatSeq*> problemStat; /// If true, the mesh distributor is already initialized; bool initialized; diff --git a/AMDiS/src/parallel/ParallelDebug.cc b/AMDiS/src/parallel/ParallelDebug.cc index 54f55d5f..0ee7fccb 100644 --- a/AMDiS/src/parallel/ParallelDebug.cc +++ b/AMDiS/src/parallel/ParallelDebug.cc @@ -13,7 +13,7 @@ #include "parallel/ParallelDebug.h" #include "parallel/MeshDistributor.h" #include "parallel/MpiHelper.h" -#include "ProblemVec.h" +#include "ProblemStat.h" #include "DOFVector.h" #include "FixVec.h" #include "StdMpi.h" diff --git a/AMDiS/src/parallel/ParallelProblemStatBase.cc b/AMDiS/src/parallel/ParallelProblemStatBase.cc index d639f403..264a0f6d 100644 --- a/AMDiS/src/parallel/ParallelProblemStatBase.cc +++ b/AMDiS/src/parallel/ParallelProblemStatBase.cc @@ -23,7 +23,9 @@ namespace AMDiS { FUNCNAME("ParallelProblemStatBase::buildAfterCoarsen()"); meshDistributor->checkMeshChange(); - ProblemVec::buildAfterCoarsen(adaptInfo, flag, assembleMatrix, assembleVector); + ProblemStatSeq::buildAfterCoarsen(adaptInfo, flag, + assembleMatrix, + assembleVector); double vm, rss; processMemUsage(vm, rss); diff --git a/AMDiS/src/parallel/ParallelProblemStatBase.h b/AMDiS/src/parallel/ParallelProblemStatBase.h index a2d62868..773095a9 100644 --- a/AMDiS/src/parallel/ParallelProblemStatBase.h +++ b/AMDiS/src/parallel/ParallelProblemStatBase.h @@ -24,16 +24,16 @@ #define AMDIS_PARALLEL_PROBLEM_STAT_BASE_H #include "parallel/MeshDistributor.h" -#include "ProblemVec.h" +#include "ProblemStat.h" namespace AMDiS { - class ParallelProblemStatBase : public ProblemVec + class ParallelProblemStatBase : public ProblemStatSeq { public: ParallelProblemStatBase(std::string nameStr, ProblemIterationInterface *problemIteration = NULL) - : ProblemVec(nameStr, problemIteration), + : ProblemStatSeq(nameStr, problemIteration), meshDistributor(NULL) {} @@ -51,6 +51,11 @@ namespace AMDiS { protected: MeshDistributor *meshDistributor; }; + +#ifdef HAVE_PARALLEL_DOMAIN_AMDIS + typedef ProblemStatSeq ProblemStat; +#endif + } #endif diff --git a/AMDiS/src/time/RosenbrockStationary.cc b/AMDiS/src/time/RosenbrockStationary.cc index 7368ee24..7b029b06 100644 --- a/AMDiS/src/time/RosenbrockStationary.cc +++ b/AMDiS/src/time/RosenbrockStationary.cc @@ -78,9 +78,9 @@ namespace AMDiS { *timeRhsVec += *tmp; } - ProblemStat::buildAfterCoarsen(adaptInfo, flag, (i == 0), asmVector); + ProblemStatSeq::buildAfterCoarsen(adaptInfo, flag, (i == 0), asmVector); solver->setMultipleRhs(i != 0); - ProblemStat::solve(adaptInfo); + ProblemStatSeq::solve(adaptInfo); *(stageSolutions[i]) = *solution; @@ -112,7 +112,7 @@ namespace AMDiS { TEST_EXIT(op.getUhOld() == NULL)("UhOld is not allowed to be set!\n"); op.setUhOld(stageSolution->getDOFVector(col)); - ProblemStat::addVectorOperator(op, row); + ProblemStatSeq::addVectorOperator(op, row); } @@ -124,7 +124,7 @@ namespace AMDiS { TEST_EXIT(factor == NULL)("Not yet implemented!\n"); TEST_EXIT(estFactor == NULL)("Not yet implemented!\n"); - ProblemStat::addMatrixOperator(op, row, col, &minusOne, &minusOne); + ProblemStatSeq::addMatrixOperator(op, row, col, &minusOne, &minusOne); } @@ -136,11 +136,11 @@ namespace AMDiS { Operator *op = new Operator(componentSpaces[row], componentSpaces[col]); op->addZeroOrderTerm(new Simple_ZOT); - ProblemStat::addMatrixOperator(op, row, col, tauGamma, tauGamma); + ProblemStatSeq::addMatrixOperator(op, row, col, tauGamma, tauGamma); Operator *opRhs = new Operator(componentSpaces[row]); opRhs->addZeroOrderTerm(new VecAtQP_ZOT(timeRhsVec->getDOFVector(col), new IdFunc())); - ProblemStat::addVectorOperator(opRhs, row, &minusOne, &minusOne); + ProblemStatSeq::addVectorOperator(opRhs, row, &minusOne, &minusOne); } @@ -153,7 +153,7 @@ namespace AMDiS { RosenbrockBoundary bound = {fct, vec, row, col}; boundaries.push_back(bound); - ProblemStat::addDirichletBC(type, row, col, vec); + ProblemStatSeq::addDirichletBC(type, row, col, vec); } } diff --git a/AMDiS/src/time/RosenbrockStationary.h b/AMDiS/src/time/RosenbrockStationary.h index 6c52fbab..a4f545da 100644 --- a/AMDiS/src/time/RosenbrockStationary.h +++ b/AMDiS/src/time/RosenbrockStationary.h @@ -42,7 +42,7 @@ namespace AMDiS { }; - class RosenbrockStationary : public ProblemStat + class RosenbrockStationary : public ProblemStatSeq { public: class IdFunc : public AbstractFunction<double, double> @@ -60,7 +60,7 @@ namespace AMDiS { RosenbrockStationary(std::string name) - : ProblemStat(name), + : ProblemStatSeq(name), first(true), minusOne(-1.0), tauPtr(NULL), -- GitLab