00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef DEGREE_OF_FREEDOM_SET_BUILDER_HPP
00021 #define DEGREE_OF_FREEDOM_SET_BUILDER_HPP
00022
00023 #include <Mesh.hpp>
00024 #include <Domain.hpp>
00025
00026 #include <DegreeOfFreedomSet.hpp>
00027 #include <DegreeOfFreedomSetManager.hpp>
00028
00029 #include <DiscretizationType.hpp>
00030 #include <ReferenceCounting.hpp>
00031
00043 class DegreeOfFreedomSetBuilder
00044 {
00045 private:
00047 ConstReferenceCounting<DegreeOfFreedomSet> __degreeOfFreedomSet;
00048
00050 ReferenceCounting<DegreeOfFreedomPositionsSet> __dofPositionSet;
00051
00052 template <size_t ItemDOFNumber>
00053 class ItemTraits;
00054
00070 template <typename MeshType,
00071 typename FiniteElementType>
00072 size_t __buildFEMCorrespondance(const MeshType& mesh,
00073 DegreeOfFreedomSet::Correspondance& correspondance);
00074
00083 template <typename MeshType>
00084 void __buildCorrespondance(const MeshType& mesh,
00085 const DiscretizationType& discretization,
00086 DegreeOfFreedomSet::Correspondance& correspondance);
00087
00096 template <typename MeshType,
00097 typename FiniteElementType>
00098 void __buildFEMFictitious(const size_t& numberOfVariables,
00099 const MeshType& mesh,
00100 const Domain& domain);
00101
00111 template <typename MeshType>
00112 void __buildFictitious(const size_t& numberOfVariables,
00113 const ScalarDiscretizationTypeBase& discretization,
00114 const MeshType& mesh,
00115 const Domain& domain);
00116 public:
00122 ConstReferenceCounting<DegreeOfFreedomSet>
00123 getDegreeOfFreedomSet() const
00124 {
00125 return __degreeOfFreedomSet;
00126 }
00127
00133 const DegreeOfFreedomSet& degreeOfFreedomSet() const
00134 {
00135 return *__degreeOfFreedomSet;
00136 }
00137
00145 DegreeOfFreedomSetBuilder(const DiscretizationType& discretizationType,
00146 const Mesh& mesh);
00147
00157 DegreeOfFreedomSetBuilder(const DiscretizationType& discretizationType,
00158 const Mesh& mesh,
00159 const Domain& domain);
00160
00165 ~DegreeOfFreedomSetBuilder();
00166 };
00167
00168 #endif // DEGREE_OF_FREEDOM_SET_BUILDER_HPP