20 |
#ifndef ELIMINATED_FICTITIOUS_DOMAIN_HPP |
#ifndef ELIMINATED_FICTITIOUS_DOMAIN_HPP |
21 |
#define ELIMINATED_FICTITIOUS_DOMAIN_HPP |
#define ELIMINATED_FICTITIOUS_DOMAIN_HPP |
22 |
|
|
23 |
#include <BaseMatrix.hpp> |
#include <FictitiousDomainMethod.hpp> |
|
#include <BaseVector.hpp> |
|
24 |
|
|
25 |
#include <EliminatedFictitiousDomainOptions.hpp> |
#include <EliminatedFictitiousDomainOptions.hpp> |
26 |
#include <GetParameter.hpp> |
#include <GetParameter.hpp> |
|
|
|
|
#include <Solution.hpp> |
|
|
|
|
|
#include <Method.hpp> |
|
|
|
|
|
#include <Problem.hpp> |
|
|
#include <PDESystem.hpp> |
|
|
|
|
|
#include <Mesh.hpp> |
|
|
#include <Structured3DMesh.hpp> |
|
|
|
|
|
class DegreeOfFreedomSet; |
|
27 |
|
|
28 |
|
/** |
29 |
|
* @file EliminatedFictitiousDomain.hpp |
30 |
|
* @author Stephane Del Pino |
31 |
|
* @date Mon Nov 3 18:45:13 2003 |
32 |
|
* |
33 |
|
* @brief Fictitious domain like method using elimination at coarse |
34 |
|
* grid vertices to take into account Dirichlet conditions. |
35 |
|
* |
36 |
|
*/ |
37 |
class EliminatedFictitiousDomain |
class EliminatedFictitiousDomain |
38 |
: public Method |
: public FictitiousDomainMethod |
39 |
{ |
{ |
40 |
private: |
private: |
41 |
ReferenceCounting<BaseMatrix> __A; |
/** |
42 |
ReferenceCounting<BaseVector> __b; |
* Discretize the boundary conditions using the specific MeshType. |
43 |
|
* |
44 |
ReferenceCounting<Mesh> __mesh; |
* @return boundary conditions discretization |
45 |
|
*/ |
|
ConstReferenceCounting<Problem> __problem; |
|
|
|
|
|
const DegreeOfFreedomSet& __degreeOfFreedomSet; |
|
|
|
|
46 |
template <typename MeshType> |
template <typename MeshType> |
47 |
void __discretize(); |
ReferenceCounting<BoundaryConditionDiscretization> __discretizeBoundaryConditions(); |
|
|
|
|
public: |
|
|
ReferenceCounting<BaseMatrix> A() |
|
|
{ |
|
|
return __A; |
|
|
} |
|
|
|
|
|
void Discretize (ConstReferenceCounting<Problem> Pb); |
|
|
void Compute (Solution& u); |
|
|
|
|
|
const Problem& problem() const |
|
|
{ |
|
|
return *__problem; |
|
|
} |
|
48 |
|
|
49 |
Mesh& mesh() |
/** |
50 |
{ |
* Discretize the boundary conditions using the specific MeshType. |
51 |
return (*__mesh); |
* |
52 |
} |
* @return boundary conditions discretization |
53 |
|
*/ |
54 |
|
ReferenceCounting<BoundaryConditionDiscretization> discretizeBoundaryConditions(); |
55 |
|
|
56 |
|
public: |
57 |
|
/** |
58 |
|
* Constructs a EliminatedFictitiousDomain discretization using a |
59 |
|
* given mesh and a given degree of freedom set |
60 |
|
* |
61 |
|
* @param M a given mesh |
62 |
|
* @param dof a given degree of freedom set |
63 |
|
* |
64 |
|
*/ |
65 |
EliminatedFictitiousDomain(ReferenceCounting<Mesh> M, |
EliminatedFictitiousDomain(ReferenceCounting<Mesh> M, |
66 |
const DegreeOfFreedomSet& dof) |
const DegreeOfFreedomSet& dof) |
67 |
: __mesh(M), |
: FictitiousDomainMethod(M,dof) |
|
__degreeOfFreedomSet(dof) |
|
68 |
{ |
{ |
69 |
; |
; |
70 |
} |
} |
71 |
|
|
72 |
|
/** |
73 |
|
* Destructor |
74 |
|
* |
75 |
|
*/ |
76 |
~EliminatedFictitiousDomain() |
~EliminatedFictitiousDomain() |
77 |
{ |
{ |
78 |
; |
; |