DistributedQuadraticMesh.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef DISTRIBUTEDQUADRATICMESH_HPP_
00037 #define DISTRIBUTEDQUADRATICMESH_HPP_
00038
00039 #include <map>
00040 #include <vector>
00041 #include <set>
00042
00043 #include "ChasteSerialization.hpp"
00044 #include <boost/serialization/base_object.hpp>
00045
00046 #include "DistributedTetrahedralMesh.hpp"
00047 #include "Node.hpp"
00048 #include "AbstractMeshReader.hpp"
00049 #include "DistributedTetrahedralMeshPartitionType.hpp"
00050 #include "QuadraticMeshHelper.hpp"
00051
00052 #define UNASSIGNED_NODE UINT_MAX
00053
00054 #include <parmetis.h>
00055
00063 template<unsigned DIM>
00064 class DistributedQuadraticMesh : public DistributedTetrahedralMesh<DIM, DIM>
00065 {
00067 friend class boost::serialization::access;
00074 template<class Archive>
00075 void serialize(Archive & archive, const unsigned int version)
00076 {
00077 archive & boost::serialization::base_object<DistributedTetrahedralMesh<DIM, DIM> >(*this);
00078 }
00079
00080 public:
00081
00087 DistributedQuadraticMesh(DistributedTetrahedralMeshPartitionType::type partitioningMethod=DistributedTetrahedralMeshPartitionType::PARMETIS_LIBRARY);
00088
00092 virtual ~DistributedQuadraticMesh();
00093
00099 void ConstructFromMeshReader(AbstractMeshReader<DIM,DIM>& rMeshReader);
00100
00101 private:
00102
00103 protected:
00104
00105 };
00106
00107 #include "SerializationExportWrapper.hpp"
00108 EXPORT_TEMPLATE_CLASS_SAME_DIMS(DistributedQuadraticMesh)
00109
00110 namespace boost
00111 {
00112 namespace serialization
00113 {
00117 template<class Archive, unsigned DIM>
00118 inline void save_construct_data(
00119 Archive & ar, const DistributedQuadraticMesh<DIM> * t, const BOOST_PFTO unsigned int file_version)
00120 {
00121 unsigned num_procs = PetscTools::GetNumProcs();
00122 const DistributedTetrahedralMeshPartitionType::type partition_type = t->GetPartitionType();
00123 ar << num_procs;
00124 ar << partition_type;
00125 }
00126
00131 template<class Archive, unsigned DIM>
00132 inline void load_construct_data(
00133 Archive & ar, DistributedQuadraticMesh<DIM> * t, const unsigned int file_version)
00134 {
00135 unsigned num_procs;
00136 DistributedTetrahedralMeshPartitionType::type partition_type;
00137
00138 ar >> num_procs;
00139 ar >> partition_type;
00140
00141
00143
00144 ::new(t)DistributedQuadraticMesh<DIM>(DistributedTetrahedralMeshPartitionType::DUMB);
00145
00146
00147
00148
00149
00150 if (DistributedVectorFactory::CheckNumberOfProcessesOnLoad() &&
00151 num_procs != PetscTools::GetNumProcs())
00152 {
00153 NEVER_REACHED;
00154 }
00155
00156 }
00157 }
00158 }
00159
00160 #endif