Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Die Konto der externen Nutzer:innen sind über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. The accounts of external users can be accessed via the "Standard" tab. The administrators

MeshDistributor.h 18 KB
Newer Older
 Thomas Witkowski committed Apr 03, 2009 1 2 3 4 // ============================================================================ // == == // == AMDiS - Adaptive multidimensional simulations == // == == Thomas Witkowski committed Dec 16, 2010 5 // == http://www.amdis-fem.org == Thomas Witkowski committed Apr 03, 2009 6 7 // == == // ============================================================================ Thomas Witkowski committed Dec 16, 2010 8 9 10 11 12 13 14 15 16 17 18 19 // // 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. Thomas Witkowski committed Apr 03, 2009 20 21 /** \file MeshDistributor.h */ Thomas Witkowski committed Jul 09, 2009 22 23 24 #ifndef AMDIS_MESHDISTRIBUTOR_H #define AMDIS_MESHDISTRIBUTOR_H Thomas Witkowski committed Apr 03, 2009 25 26 Thomas Witkowski committed Feb 08, 2010 27 #include Thomas Witkowski committed Jan 17, 2012 28 #include "parallel/DofComm.h" Thomas Witkowski committed Feb 13, 2012 29 #include "parallel/ElementObjectDatabase.h" Thomas Witkowski committed Apr 21, 2011 30 #include "parallel/ParallelTypes.h" Thomas Witkowski committed Apr 11, 2012 31 #include "parallel/MeshLevelData.h" Thomas Witkowski committed Jan 24, 2011 32 #include "parallel/MeshPartitioner.h" Thomas Witkowski committed Nov 29, 2010 33 #include "parallel/InteriorBoundary.h" Thomas Witkowski committed Apr 18, 2012 34 #include "parallel/ParallelDofMapping.h" Thomas Witkowski committed Jan 26, 2012 35 #include "parallel/PeriodicMap.h" Thomas Witkowski committed Nov 08, 2011 36 #include "parallel/StdMpi.h" Thomas Witkowski committed Jan 27, 2011 37 #include "AMDiS_fwd.h" Thomas Witkowski committed Feb 09, 2012 38 #include "Containers.h" Thomas Witkowski committed Feb 08, 2010 39 #include "Global.h" Thomas Witkowski committed Apr 03, 2009 40 41 #include "ProblemTimeInterface.h" #include "ProblemIterationInterface.h" Thomas Witkowski committed Apr 15, 2009 42 #include "FiniteElemSpace.h" Thomas Witkowski committed Sep 29, 2009 43 #include "Serializer.h" Thomas Witkowski committed Feb 08, 2010 44 #include "BoundaryManager.h" Thomas Witkowski committed Jan 27, 2011 45 #include "SystemVector.h" Thomas Witkowski committed Jun 12, 2009 46 Thomas Witkowski committed Apr 03, 2009 47 namespace AMDiS { Thomas Witkowski committed Jan 07, 2011 48 49 using namespace std; Thomas Witkowski committed Apr 08, 2011 50 51 52 53 struct BoundaryDofInfo { Thomas Witkowski committed Apr 08, 2011 54 map geoDofs; Thomas Witkowski committed Apr 08, 2011 55 56 }; 57 Thomas Witkowski committed Jun 08, 2010 58 class MeshDistributor Thomas Witkowski committed Apr 03, 2009 59 { Thomas Witkowski committed May 19, 2011 60 private: Thomas Witkowski committed Mar 18, 2011 61 MeshDistributor(); Thomas Witkowski committed May 19, 2011 62 Thomas Witkowski committed Jun 08, 2010 63 virtual ~MeshDistributor() {} Thomas Witkowski committed Apr 03, 2009 64 Thomas Witkowski committed May 19, 2011 65 public: 66 void initParallelization(); Thomas Witkowski committed Apr 03, 2009 67 68 void exitParallelization(); Thomas Witkowski committed Jun 08, 2010 69 Thomas Witkowski committed Nov 14, 2011 70 71 72 /// Adds a DOFVector to the set of \ref interchangeVecs. Thus, this vector /// will be automatically interchanged between ranks when mesh is /// repartitioned. Thomas Witkowski committed Jan 19, 2011 73 74 75 76 77 void addInterchangeVector(DOFVector *vec) { interchangeVectors.push_back(vec); } Thomas Witkowski committed Jan 27, 2011 78 79 80 81 82 83 84 /// Adds all DOFVectors of a SystemVector to \ref interchangeVecs. void addInterchangeVector(SystemVector *vec) { for (int i = 0; i < vec->getSize(); i++) interchangeVectors.push_back(vec->getDOFVector(i)); } Thomas Witkowski committed Jan 29, 2010 85 /** \brief Thomas Witkowski committed Nov 14, 2011 86 87 88 89 90 * This function checks if the mesh has changed on at least on rank. In * this case, the interior boundaries are adapted on all ranks such that * they fit together on all ranks. Furthermore the function * \ref updateLocalGlobalNumbering() is called to update the DOF numberings * and mappings on all rank due to the new mesh structure. 91 * Thomas Witkowski committed Nov 14, 2011 92 93 94 95 96 * \param[in] tryRepartition If this parameter is true, repartitioning * may be done. This depends on several other * parameters. If the parameter is false, the * mesh is only checked and adapted but never * repartitioned. Thomas Witkowski committed Jan 29, 2010 97 */ 98 void checkMeshChange(bool tryRepartition = true); Thomas Witkowski committed Jan 29, 2010 99 Thomas Witkowski committed Jan 02, 2012 100 101 102 103 104 105 106 107 108 109 /** \brief * Checks if is required to repartition the mesh. If this is the case, a new * partition will be created and the mesh will be redistributed between the * ranks. */ void repartitionMesh(); /// Calculates the imbalancing factor and prints it to screen. void printImbalanceFactor(); Thomas Witkowski committed Jun 26, 2009 110 /** \brief Thomas Witkowski committed Nov 14, 2011 111 112 113 114 * Test, if the mesh consists of macro elements only. The mesh partitioning * of the parallelization works for macro meshes only and would fail, if the * mesh is already refined in some way. Therefore, this function will exit * the program if it finds a non macro element in the mesh. Thomas Witkowski committed Jun 26, 2009 115 116 */ void testForMacroMesh(); Thomas Witkowski committed Apr 03, 2009 117 Thomas Witkowski committed Nov 14, 2011 118 119 /// Set for each element on the partitioning level the number of /// leaf elements. 120 void setInitialElementWeights(); Thomas Witkowski committed Apr 03, 2009 121 Thomas Witkowski committed Jan 07, 2011 122 inline virtual string getName() Thomas Witkowski committed Jun 08, 2010 123 124 125 { return name; } 126 Thomas Witkowski committed Jan 14, 2011 127 128 129 130 131 inline Mesh* getMesh() { return mesh; } 132 133 /// Returns an FE space from \ref feSpaces. inline const FiniteElemSpace* getFeSpace(unsigned int i = 0) 134 { 135 136 137 138 139 FUNCNAME("MeshDistributor::getFeSpace()"); TEST_EXIT_DBG(i < feSpaces.size())("Should not happen!\n"); return feSpaces[i]; 140 } 141 142 143 144 145 146 147 /// Returns all FE spaces, thus \ref feSpaces. inline vector& getFeSpaces() { return feSpaces; } Thomas Witkowski committed Apr 20, 2012 148 149 /// Returns the DOF mapping object, \ref dofMap. inline ParallelDofMapping& getDofMap() Thomas Witkowski committed Jan 14, 2011 150 { Thomas Witkowski committed Apr 20, 2012 151 return dofMap; Thomas Witkowski committed Jan 14, 2011 152 153 } Thomas Witkowski committed May 04, 2012 154 155 156 157 158 inline ParallelDofMapping& getDofMapSd() { return dofMapSd; } Thomas Witkowski committed Apr 20, 2012 159 160 /// Returns the periodic mapping handler, \ref periodicMap. inline PeriodicMap& getPeriodicMap() Thomas Witkowski committed Jul 10, 2009 161 { Thomas Witkowski committed Apr 20, 2012 162 return periodicMap; Thomas Witkowski committed Jul 10, 2009 163 } Thomas Witkowski committed Apr 03, 2009 164 Thomas Witkowski committed Apr 30, 2012 165 DofComm& getDofComm() 166 { Thomas Witkowski committed Apr 30, 2012 167 return dofComm; 168 169 } Thomas Witkowski committed May 04, 2012 170 171 172 173 174 DofComm& getDofCommSd() { return dofCommSd; } Thomas Witkowski committed May 02, 2012 175 176 177 178 179 InteriorBoundary& getIntBoundary() { return intBoundary; } Thomas Witkowski committed May 04, 2012 180 181 182 183 184 InteriorBoundary& getIntBoundarySd() { return intBoundarySd; } Thomas Witkowski committed Jun 08, 2010 185 inline long getLastMeshChangeIndex() Thomas Witkowski committed Jun 10, 2009 186 { Thomas Witkowski committed Jun 08, 2010 187 return lastMeshChangeIndex; Thomas Witkowski committed Apr 07, 2009 188 } Thomas Witkowski committed Apr 03, 2009 189 Thomas Witkowski committed Jun 08, 2010 190 inline int getMpiRank() Thomas Witkowski committed Jun 11, 2009 191 { Thomas Witkowski committed Jun 08, 2010 192 return mpiRank; Thomas Witkowski committed Jun 11, 2009 193 } Thomas Witkowski committed Apr 03, 2009 194 Thomas Witkowski committed Jan 14, 2011 195 196 197 198 199 inline int getMpiSize() { return mpiSize; } Thomas Witkowski committed Jun 08, 2010 200 201 202 inline MPI::Intracomm& getMpiComm() { return mpiComm; Thomas Witkowski committed Apr 03, 2009 203 204 } 205 206 207 208 209 inline bool isInitialized() { return initialized; } Thomas Witkowski committed Sep 28, 2009 210 // Writes all data of this object to an output stream. Thomas Witkowski committed Jan 07, 2011 211 void serialize(ostream &out); Thomas Witkowski committed Jun 11, 2009 212 Thomas Witkowski committed Sep 28, 2009 213 // Reads the object data from an input stream. Thomas Witkowski committed Jan 07, 2011 214 void deserialize(istream &in); Thomas Witkowski committed Jun 08, 2010 215 216 /** \brief Thomas Witkowski committed Nov 14, 2011 217 218 219 220 * This function must be used if the values of a DOFVector must be * synchronised over all ranks. That means, that each rank sends the * values of the DOFs, which are owned by the rank and lie on an interior * bounday, to all other ranks also having these DOFs. Thomas Witkowski committed Jun 08, 2010 221 * Thomas Witkowski committed Nov 14, 2011 222 223 224 * This function must be used, for example, after the lineary system is * solved, or after the DOFVector is set by some user defined functions, * e.g., initial solution functions. Thomas Witkowski committed Jun 08, 2010 225 */ Thomas Witkowski committed Nov 08, 2011 226 227 228 229 230 template void synchVector(DOFVector &vec) { StdMpi > stdMpi(mpiComm); 231 232 const FiniteElemSpace *fe = vec.getFeSpace(); Thomas Witkowski committed Apr 30, 2012 233 234 for (DofComm::Iterator it(dofComm.getSendDofs(), fe); !it.end(); it.nextRank()) { Thomas Witkowski committed Nov 08, 2011 235 vector dofs; Thomas Witkowski committed Jan 17, 2012 236 dofs.reserve(it.getDofs().size()); Thomas Witkowski committed Nov 08, 2011 237 Thomas Witkowski committed Jan 17, 2012 238 239 for (; !it.endDofIter(); it.nextDof()) dofs.push_back(vec[it.getDofIndex()]); Thomas Witkowski committed Nov 08, 2011 240 Thomas Witkowski committed Jan 17, 2012 241 stdMpi.send(it.getRank(), dofs); Thomas Witkowski committed Nov 08, 2011 242 } Thomas Witkowski committed Jan 17, 2012 243 Thomas Witkowski committed Apr 30, 2012 244 245 for (DofComm::Iterator it(dofComm.getRecvDofs()); !it.end(); it.nextRank()) Thomas Witkowski committed Jan 17, 2012 246 247 stdMpi.recv(it.getRank()); Thomas Witkowski committed Nov 08, 2011 248 stdMpi.startCommunication(); Thomas Witkowski committed Jan 17, 2012 249 Thomas Witkowski committed Apr 30, 2012 250 251 for (DofComm::Iterator it(dofComm.getRecvDofs(), fe); !it.end(); it.nextRank()) Thomas Witkowski committed Jan 17, 2012 252 253 254 for (; !it.endDofIter(); it.nextDof()) vec[it.getDofIndex()] = stdMpi.getRecvData(it.getRank())[it.getDofCounter()]; Thomas Witkowski committed Nov 08, 2011 255 256 } Thomas Witkowski committed May 11, 2012 257 258 259 260 /// Works in the same way as the function above defined for DOFVectors. Due /// to performance, this function does not call \ref synchVector for each /// DOFVector, but instead sends all values of all DOFVectors all at once. void synchVector(SystemVector &vec, int level = 0); Thomas Witkowski committed Jun 08, 2010 261 Thomas Witkowski committed Jan 20, 2011 262 263 void check3dValidMesh(); Thomas Witkowski committed Apr 08, 2011 264 265 266 267 268 void setBoundaryDofRequirement(Flag flag) { createBoundaryDofFlag = flag; } Thomas Witkowski committed Apr 27, 2012 269 270 BoundaryDofInfo& getBoundaryDofInfo(const FiniteElemSpace *feSpace, int level) Thomas Witkowski committed Apr 08, 2011 271 { Thomas Witkowski committed Apr 16, 2012 272 273 274 275 276 277 278 FUNCNAME("MeshDistributor::getBoundaryDofInfo()"); TEST_EXIT_DBG(level < static_cast(boundaryDofInfo.size())) ("Wrong level number: %d, whereas array size is %d!\n", level, boundaryDofInfo.size()); return boundaryDofInfo[level][feSpace]; Thomas Witkowski committed Apr 08, 2011 279 280 } 281 282 void getAllBoundaryDofs(const FiniteElemSpace *feSpace, int level, 283 DofContainer& dofs); Thomas Witkowski committed Apr 21, 2011 284 285 286 287 288 const ElementObjectDatabase& getElementObjectDb() { return elObjDb; } Thomas Witkowski committed May 19, 2011 289 290 291 /// Adds a stationary problem to the global mesh distributor objects. static void addProblemStatGlobal(ProblemStatSeq *probStat); Thomas Witkowski committed Apr 13, 2012 292 293 294 295 296 297 MeshLevelData& getMeshLevelData() { return levelData; } Thomas Witkowski committed Jun 11, 2009 298 protected: Thomas Witkowski committed May 19, 2011 299 300 void addProblemStat(ProblemStatSeq *probStat); Thomas Witkowski committed Nov 14, 2011 301 302 /// Determines the interior boundaries, i.e. boundaries between ranks, and /// stores all information about them in \ref interiorBoundary. Thomas Witkowski committed May 02, 2012 303 void createInteriorBoundary(bool firstCall); Thomas Witkowski committed Nov 29, 2010 304 Thomas Witkowski committed Apr 08, 2011 305 306 void createBoundaryDofs(); Thomas Witkowski committed Nov 14, 2011 307 308 /// Removes all macro elements from the mesh that are not part of ranks /// partition. Thomas Witkowski committed Jun 11, 2009 309 310 void removeMacroElements(); 311 312 void updateLocalGlobalNumbering(); Thomas Witkowski committed Nov 14, 2011 313 314 /// Updates the local and global DOF numbering after the mesh has been /// changed. Thomas Witkowski committed May 04, 2012 315 316 317 void updateLocalGlobalNumbering(ParallelDofMapping &dmap, DofComm &dcom, const FiniteElemSpace *feSpace); Thomas Witkowski committed Jun 11, 2009 318 319 320 321 322 /// Calls \ref createPeriodicMap(feSpace) for all FE spaces that are /// handled by the mesh distributor. void createPeriodicMap(); Thomas Witkowski committed Apr 27, 2012 323 324 325 /// Creates, for a specific FE space, to all DOFs in rank's partition that /// are on a periodic boundary the mapping from dof index to the other /// periodic dof indices. This information is stored in \ref periodicDofMap. 326 void createPeriodicMap(const FiniteElemSpace *feSpace); Thomas Witkowski committed Oct 14, 2009 327 Thomas Witkowski committed Apr 27, 2012 328 329 330 331 332 333 /// This function is called only once during the initialization when the /// whole macro mesh is available on all cores. It copies the pointers of all /// macro elements to \ref allMacroElements and stores all neighbour /// information based on macro element indices (and not pointer based) in /// \ref macroElementNeighbours. These information are then used to /// reconstruct macro elements during mesh redistribution. Thomas Witkowski committed Nov 25, 2010 334 335 void createMacroElementInfo(); 336 337 void updateMacroElementInfo(); Thomas Witkowski committed Jan 19, 2010 338 /** \brief Thomas Witkowski committed Nov 14, 2011 339 340 341 342 343 344 * Checks for all given interior boundaries if the elements fit together on * both sides of the boundaries. If this is not the case, the mesh is * adapted. Because refinement of a certain element may forces the * refinement of other elements, it is not guaranteed that all rank's meshes * fit together after this function terminates. Hence, it must be called * until a stable mesh refinement is reached. Thomas Witkowski committed Jan 19, 2010 345 * Thomas Witkowski committed Nov 14, 2011 346 347 * \param[in] allBound Defines a map from rank to interior boundaries * which should be checked. 348 * Thomas Witkowski committed Nov 14, 2011 349 350 351 * \return If the mesh has been changed by this function, it returns * true. Otherwise, it returns false, i.e., the given interior * boundaries fit together on both sides. Thomas Witkowski committed Jan 19, 2010 352 353 */ bool checkAndAdaptBoundary(RankToBoundMap &allBound); Thomas Witkowski committed Nov 26, 2010 354 Thomas Witkowski committed Mar 28, 2011 355 356 /// Sets \ref isRankDof to all matrices and rhs vectors in a given /// stationary problem. Thomas Witkowski committed Apr 21, 2011 357 void setRankDofs(ProblemStatSeq *probStat); Thomas Witkowski committed Mar 28, 2011 358 Thomas Witkowski committed Nov 14, 2011 359 360 /// Sets \ref isRankDof to all matrices and rhs vectors in all /// stationary problems. Thomas Witkowski committed Jul 18, 2010 361 362 void setRankDofs(); Thomas Witkowski committed Jun 29, 2010 363 364 365 366 /// Removes all periodic boundary condition information from all matrices and /// vectors of all stationary problems and from the mesh itself. void removePeriodicBoundaryConditions(); Thomas Witkowski committed Feb 28, 2012 367 368 369 370 /// Removes all periodic boundary condition information from all matrices and /// vector of a given stationary problem. void removePeriodicBoundaryConditions(ProblemStatSeq *probStat); Thomas Witkowski committed Feb 08, 2010 371 // Removes all periodic boundaries from a given boundary map. Thomas Witkowski committed Jun 29, 2010 372 void removePeriodicBoundaryConditions(BoundaryIndexMap& boundaryMap); Thomas Witkowski committed Feb 08, 2010 373 Thomas Witkowski committed Apr 11, 2012 374 375 void createMeshLevelStructure(); Thomas Witkowski committed Sep 28, 2009 376 /// Writes a vector of dof pointers to an output stream. Thomas Witkowski committed Jan 07, 2011 377 void serialize(ostream &out, DofContainer &data); Thomas Witkowski committed Sep 28, 2009 378 379 380 381 382 /// Writes a \ref RankToDofContainer to an output stream. void serialize(ostream &out, map > &data); Thomas Witkowski committed Sep 28, 2009 383 /// Reads a vector of dof pointers from an input stream. Thomas Witkowski committed Jan 07, 2011 384 void deserialize(istream &in, DofContainer &data, Thomas Witkowski committed Apr 18, 2012 385 map &dofIndexMap); Thomas Witkowski committed Sep 28, 2009 386 387 /// Reads a \ref RankToDofContainer from an input stream. 388 389 void deserialize(istream &in, map > &data, Thomas Witkowski committed Apr 18, 2012 390 map > &dofIndexMap); Thomas Witkowski committed Sep 29, 2009 391 392 393 /// Writes a mapping from dof pointers to some values to an output stream. template Thomas Witkowski committed Jan 07, 2011 394 void serialize(ostream &out, map &data) Thomas Witkowski committed Sep 29, 2009 395 { 396 397 FUNCNAME("ParallelDomainBase::serialize()"); Thomas Witkowski committed Sep 29, 2009 398 int mapSize = data.size(); 399 SerUtil::serialize(out, mapSize); Thomas Witkowski committed Jan 07, 2011 400 for (typename map::iterator it = data.begin(); Thomas Witkowski committed Sep 29, 2009 401 402 403 it != data.end(); ++it) { int v1 = (*(it->first)); T v2 = it->second; 404 405 SerUtil::serialize(out, v1); SerUtil::serialize(out, v2); Thomas Witkowski committed Sep 29, 2009 406 407 408 409 410 } } /// Reads a mapping from dof pointer to some values from an input stream. template Thomas Witkowski committed Jan 07, 2011 411 void deserialize(istream &in, map &data, Thomas Witkowski committed Apr 18, 2012 412 map &dofIndexMap) Thomas Witkowski committed Sep 29, 2009 413 { Thomas Witkowski committed Oct 02, 2009 414 415 FUNCNAME("ParallelDomainBase::deserialize()"); Thomas Witkowski committed Sep 29, 2009 416 int mapSize = 0; 417 SerUtil::deserialize(in, mapSize); Thomas Witkowski committed Sep 29, 2009 418 419 420 for (int i = 0; i < mapSize; i++) { int v1 = 0; T v2; 421 422 SerUtil::deserialize(in, v1); SerUtil::deserialize(in, v2); Thomas Witkowski committed Oct 02, 2009 423 Thomas Witkowski committed Apr 18, 2012 424 425 TEST_EXIT_DBG(dofIndexMap.count(v1) != 0) ("Cannot find DOF %d in map!\n", v1); Thomas Witkowski committed Oct 02, 2009 426 Thomas Witkowski committed Apr 18, 2012 427 data[dofIndexMap[v1]] = v2; Thomas Witkowski committed Sep 29, 2009 428 429 } } Thomas Witkowski committed Nov 30, 2010 430 Thomas Witkowski committed Apr 03, 2009 431 protected: Thomas Witkowski committed Nov 14, 2011 432 433 /// List of all stationary problems that are managed by this mesh /// distributor. Thomas Witkowski committed Apr 21, 2011 434 vector problemStat; Thomas Witkowski committed Feb 08, 2010 435 Thomas Witkowski committed Mar 28, 2011 436 437 438 /// If true, the mesh distributor is already initialized; bool initialized; Thomas Witkowski committed Apr 03, 2009 439 440 441 442 443 444 /// The rank of the current process. int mpiRank; /// Overall number of processes. int mpiSize; Thomas Witkowski committed Nov 14, 2011 445 446 /// MPI communicator collected all processes, which should be used for /// calculation. The Debug procces is not included in this communicator. Thomas Witkowski committed Apr 03, 2009 447 448 449 MPI::Intracomm mpiComm; /// Name of the problem (as used in the init files) Thomas Witkowski committed Jan 07, 2011 450 string name; Thomas Witkowski committed Apr 03, 2009 451 452 453 /// Finite element spaces of the problem. vector feSpaces; Thomas Witkowski committed Apr 15, 2009 454 Thomas Witkowski committed Apr 03, 2009 455 456 457 /// Mesh of the problem. Mesh *mesh; Thomas Witkowski committed Feb 13, 2012 458 459 460 /// A refinement manager that should be used on the mesh. It is used to /// refine elements at interior boundaries in order to fit together with /// elements on the other side of the interior boundary. 461 462 RefinementManager *refineManager; Thomas Witkowski committed Jun 26, 2009 463 464 465 /// Info level. int info; Thomas Witkowski committed Nov 14, 2011 466 467 /// Pointer to a mesh partitioner that is used to partition the mesh to /// the ranks. Thomas Witkowski committed Jan 24, 2011 468 MeshPartitioner *partitioner; Thomas Witkowski committed Apr 03, 2009 469 Thomas Witkowski committed Nov 14, 2011 470 471 /// Weights for the elements, i.e., the number of leaf elements within /// this element. Thomas Witkowski committed Jan 07, 2011 472 map elemWeights; Thomas Witkowski committed Apr 03, 2009 473 Thomas Witkowski committed Feb 13, 2012 474 475 /// Stores to every macro element index the number of the rank that owns this /// macro element. Thomas Witkowski committed Jan 24, 2011 476 map partitionMap; Thomas Witkowski committed Apr 03, 2009 477 478 /// Mapping object to map from local DOF indices to global ones. Thomas Witkowski committed Apr 18, 2012 479 480 ParallelDofMapping dofMap; Thomas Witkowski committed May 04, 2012 481 482 ParallelDofMapping dofMapSd; Thomas Witkowski committed Feb 13, 2012 483 /// Database to store and query all sub-objects of all elements of the Thomas Witkowski committed Nov 14, 2011 484 /// macro mesh. Thomas Witkowski committed Feb 13, 2012 485 ElementObjectDatabase elObjDb; Thomas Witkowski committed Nov 29, 2010 486 Thomas Witkowski committed Feb 13, 2012 487 /// Defines the interior boundaries of the domain that result from Thomas Witkowski committed Apr 27, 2012 488 489 /// partitioning the whole mesh. InteriorBoundary intBoundary; Thomas Witkowski committed Oct 14, 2009 490 Thomas Witkowski committed May 02, 2012 491 492 InteriorBoundary intBoundarySd; Thomas Witkowski committed Apr 30, 2012 493 DofComm dofComm; 494 Thomas Witkowski committed May 02, 2012 495 496 DofComm dofCommSd; Thomas Witkowski committed Jan 26, 2012 497 PeriodicMap periodicMap; Thomas Witkowski committed Jul 08, 2010 498 Thomas Witkowski committed Jan 19, 2011 499 500 501 502 /// This set of values must be interchanged between ranks when the mesh is /// repartitioned. vector*> interchangeVectors; Thomas Witkowski committed Feb 13, 2012 503 504 505 506 /// If the problem definition has been read from a serialization file, this /// variable is true, otherwise it is false. This variable is used to stop the /// initialization function, if the problem definition has already been read /// from a serialization file. 507 bool deserialized; Thomas Witkowski committed Dec 08, 2009 508 509 510 511 /// Denotes whether there exists a filewriter for this object. bool writeSerializationFile; Thomas Witkowski committed Nov 26, 2010 512 513 514 /// If true, it is possible to repartition the mesh during computations. bool repartitioningAllowed; Thomas Witkowski committed Nov 14, 2011 515 516 /// Stores the number of mesh changes that must lie in between to /// repartitionings. Thomas Witkowski committed Dec 20, 2010 517 518 int repartitionIthChange; Thomas Witkowski committed Nov 14, 2011 519 520 /// Counts the number of mesh changes after the last mesh repartitioning /// was done. 521 int nMeshChangesAfterLastRepartitioning; Thomas Witkowski committed Dec 03, 2010 522 523 524 525 /// Countes the number of mesh repartitions that were done. Till now, this /// variable is used only for debug outputs. int repartitioningCounter; Thomas Witkowski committed Dec 03, 2010 526 Thomas Witkowski committed Dec 16, 2010 527 /// Directory name where all debug output files should be written to. Thomas Witkowski committed Jan 07, 2011 528 string debugOutputDir; Thomas Witkowski committed Dec 16, 2010 529 Thomas Witkowski committed Feb 13, 2012 530 531 /// Stores the mesh change index. This is used to recognize changes in the /// mesh structure (e.g. through refinement or coarsening managers). Thomas Witkowski committed Dec 08, 2009 532 long lastMeshChangeIndex; 533 Thomas Witkowski committed Nov 14, 2011 534 535 536 537 /// Stores for all macro elements of the original macro mesh the /// neighbourhood information based on element indices. Thus, each macro /// element index is mapped to a vector containing all indices of /// neighbouring macro elements. Thomas Witkowski committed Jan 07, 2011 538 map > macroElementNeighbours; Thomas Witkowski committed Nov 25, 2010 539 Thomas Witkowski committed Nov 14, 2011 540 541 /// Store all macro elements of the overall mesh, i.e., before the /// mesh is redistributed for the first time. Thomas Witkowski committed Jan 07, 2011 542 vector allMacroElements; 543 Thomas Witkowski committed Apr 08, 2011 544 545 Flag createBoundaryDofFlag; Thomas Witkowski committed Apr 16, 2012 546 547 548 /// Stores on each mesh level for all FE spaces the information about /// all boundary DOFs. vector > boundaryDofInfo; Thomas Witkowski committed May 19, 2011 549 Thomas Witkowski committed Apr 11, 2012 550 551 MeshLevelData levelData; Thomas Witkowski committed Apr 08, 2011 552 public: Thomas Witkowski committed Apr 21, 2011 553 554 555 /// The boundary DOFs are sorted by subobject entities, i.e., first all /// face DOFs, edge DOFs and to the last vertex DOFs will be set to /// communication structure vectors, \ref sendDofs and \ref recvDofs. Thomas Witkowski committed Apr 08, 2011 556 557 static const Flag BOUNDARY_SUBOBJ_SORTED; Thomas Witkowski committed Apr 21, 2011 558 559 560 561 562 563 564 565 566 /// When boundary DOFs are created, \ref boundaryDofInfo is filled for /// all DOFs that this rank will send to other ranks (thus, rank /// owned DOFs. static const Flag BOUNDARY_FILL_INFO_SEND_DOFS; /// When boundary DOFs are created, \ref boundaryDofInfo is filled for /// all DOFs that this rank will receive from other ranks (thus, DOFs /// that are owned by another rank). static const Flag BOUNDARY_FILL_INFO_RECV_DOFS; Thomas Witkowski committed Apr 08, 2011 567 Thomas Witkowski committed May 19, 2011 568 569 static MeshDistributor *globalMeshDistributor; 570 friend class ParallelDebug; Thomas Witkowski committed Apr 03, 2009 571 572 573 }; } 574 #endif // AMDIS_MESHDISTRIBUTOR_H