Commit 5161a040 authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

First try to generalize the FETI-DP solver to a multilevel method.

parent 4c8ae77a
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "parallel/PetscSolverFetiStructs.h" #include "parallel/PetscSolverFetiStructs.h"
#include "parallel/StdMpi.h" #include "parallel/StdMpi.h"
#include "parallel/MpiHelper.h" #include "parallel/MpiHelper.h"
#include "parallel/SubDomainSolver.h"
#include "io/VtkWriter.h" #include "io/VtkWriter.h"
namespace AMDiS { namespace AMDiS {
...@@ -185,7 +186,8 @@ namespace AMDiS { ...@@ -185,7 +186,8 @@ namespace AMDiS {
PetscSolverFeti::PetscSolverFeti() PetscSolverFeti::PetscSolverFeti()
: PetscSolver(), : PetscSolver(),
schurPrimalSolver(0) schurPrimalSolver(0),
multiLevelTest(false)
{ {
FUNCNAME("PetscSolverFeti::PetscSolverFeti()"); FUNCNAME("PetscSolverFeti::PetscSolverFeti()");
...@@ -209,6 +211,12 @@ namespace AMDiS { ...@@ -209,6 +211,12 @@ namespace AMDiS {
TEST_EXIT(schurPrimalSolver == 0 || schurPrimalSolver == 1) TEST_EXIT(schurPrimalSolver == 0 || schurPrimalSolver == 1)
("Wrong solver \"%d\"for the Schur primal complement!\n", ("Wrong solver \"%d\"for the Schur primal complement!\n",
schurPrimalSolver); schurPrimalSolver);
Parameters::get("parallel->multi level test", multiLevelTest);
if (multiLevelTest) {
// subDomainSolver = new SubDomainSolver(meshDistributor, mpiComm, &PETSC_COMM_SELF);
}
} }
...@@ -260,6 +268,12 @@ namespace AMDiS { ...@@ -260,6 +268,12 @@ namespace AMDiS {
static_cast<unsigned int>(feSpace->getAdmin()->getUsedDofs())) static_cast<unsigned int>(feSpace->getAdmin()->getUsedDofs()))
("Should not happen!\n"); ("Should not happen!\n");
} }
// If multi level test, inform sub domain solver about coarse space.
if (multiLevelTest) {
subDomainSolver->setCoarseSpace(&primalDofMap);
}
} }
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "parallel/PetscSolverFetiStructs.h" #include "parallel/PetscSolverFetiStructs.h"
#include "parallel/ParallelDofMapping.h" #include "parallel/ParallelDofMapping.h"
#include "parallel/ParallelTypes.h" #include "parallel/ParallelTypes.h"
#include "parallel/SubDomainSolver.h"
#ifndef AMDIS_PETSC_SOLVER_FETI_H #ifndef AMDIS_PETSC_SOLVER_FETI_H
#define AMDIS_PETSC_SOLVER_FETI_H #define AMDIS_PETSC_SOLVER_FETI_H
...@@ -240,6 +241,10 @@ namespace AMDiS { ...@@ -240,6 +241,10 @@ namespace AMDiS {
Mat mat_interior_interior, mat_duals_duals, mat_interior_duals, mat_duals_interior; Mat mat_interior_interior, mat_duals_duals, mat_interior_duals, mat_duals_interior;
KSP ksp_interior; KSP ksp_interior;
bool multiLevelTest;
SubDomainSolver *subDomainSolver;
}; };
} }
......
// ============================================================================
// == ==
// == AMDiS - Adaptive multidimensional simulations ==
// == ==
// == http://www.amdis-fem.org ==
// == ==
// ============================================================================
//
// Software License for AMDiS
//
// Copyright (c) 2010 Dresden University of Technology
// All rights reserved.
// Authors: Simon Vey, Thomas Witkowski et al.
//
// This file is part of AMDiS
//
// See also license.opensource.txt in the distribution.
/** \file SubDomainSolver.h */
#ifndef AMDIS_SUBDOMAIN_SOLVER_H
#define AMDIS_SUBDOMAIN_SOLVER_H
#include <map>
#include <set>
#include <mpi.h>
#include <petsc.h>
#include "parallel/MeshDistributor.h"
#include "parallel/ParallelDofMapping.h"
namespace AMDiS {
using namespace std;
class SubDomainSolver {
public:
SubDomainSolver(MeshDistributor *md,
MPI::Intracomm* mpiComm0,
MPI::Intracomm* mpiComm1)
: meshDistributor(md),
coarseSpaceMpiComm(mpiComm0),
subDomainMpiComm(mpiComm1),
coarseSpace(NULL)
{}
void setCoarseSpace(ParallelDofMapping *coarseDofs)
{
coarseSpace = coarseDofs;
}
void solve(Vec &rhs, Vec &sol)
{}
protected:
MeshDistributor *meshDistributor;
MPI::Intracomm* coarseSpaceMpiComm;
MPI::Intracomm* subDomainMpiComm;
ParallelDofMapping* coarseSpace;
};
}
#endif
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