17#ifndef triangulationManager_H_
18#define triangulationManager_H_
52 const MPI_Comm &mpi_comm_domain,
76 const std::vector<std::vector<double>> &atomLocations,
77 const std::vector<std::vector<double>> &imageAtomLocations,
78 const std::vector<dftfe::Int> &imageIds,
79 const std::vector<double> &nearestAtomDistances,
80 const std::vector<std::vector<double>> &domainBoundingVectors,
81 const bool generateSerialTria);
97 const std::vector<std::vector<double>> &atomLocations,
98 const std::vector<std::vector<double>> &imageAtomLocations,
99 const std::vector<dftfe::Int> &imageIds,
100 const std::vector<double> &nearestAtomDistances,
101 const std::vector<std::vector<double>> &domainBoundingVectors,
102 const bool generateSerialTria);
115 const dealii::DoFHandler<3> &dofHandler,
116 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation,
125 dealii::parallel::distributed::Triangulation<3> &
132 dealii::parallel::distributed::Triangulation<3> &
139 dealii::parallel::distributed::Triangulation<3> &
148 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulationA,
149 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulationB);
157 const std::vector<std::vector<double>> &domainBoundingVectors,
158 const bool generateSerialTria);
180 const MPI_Comm &interpoolComm,
207 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation,
208 dealii::parallel::distributed::Triangulation<3> &serialTriangulation,
209 std::vector<std::vector<bool>> ¶llelTriaCurrentRefinement,
210 std::vector<std::vector<bool>> &serialTriaCurrentRefinement,
211 const bool generateSerialTria =
false,
212 const bool enableManualRepartitioning =
false);
222 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation);
231 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation,
232 std::vector<dftfe::uInt> &locallyOwnedCellsRefineFlags,
233 std::map<dealii::CellId, dftfe::uInt> &cellIdToCellRefineFlagMapLocal,
234 const bool smoothenCellsOnPeriodicBoundary =
false,
235 const double smootheningFactor = 2.0);
245 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation,
246 std::vector<dftfe::uInt> &locallyOwnedCellsRefineFlags,
247 std::map<dealii::CellId, dftfe::uInt> &cellIdToCellRefineFlagMapLocal);
256 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation);
266 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation);
276 const std::map<dealii::CellId, dftfe::uInt>
277 &cellIdToCellRefineFlagMapLocal,
278 const MPI_Comm &mpi_comm,
279 dealii::parallel::distributed::Triangulation<3> &serialTriangulation,
280 const dealii::parallel::distributed::Triangulation<3>
281 ¶llelTriangulation,
282 std::vector<bool> &serialTriaCurrentRefinement);
299 dealii::parallel::distributed::Triangulation<3>
301 dealii::parallel::distributed::Triangulation<3>
303 dealii::parallel::distributed::Triangulation<3>
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:36
dealii::parallel::distributed::Triangulation< 3 > & getParallelMeshMoved()
returns reference to parallel moved triangulation
std::vector< std::vector< bool > > d_parallelTriaCurrentRefinement
Definition triangulationManager.h:306
const MPI_Comm interpoolcomm
Definition triangulationManager.h:329
void saveTriangulationsSolutionVectors(std::string path, const dftfe::uInt feOrder, const dftfe::uInt nComponents, const std::vector< const distributedCPUVec< double > * > &solutionVectors, const MPI_Comm &interpoolComm, const MPI_Comm &interBandGroupComm)
serialize the triangulations and the associated solution vectors
std::vector< dftfe::Int > d_imageIds
Definition triangulationManager.h:313
void loadTriangulationsSolutionVectors(std::string path, const dftfe::uInt feOrder, const dftfe::uInt nComponents, std::vector< distributedCPUVec< double > * > &solutionVectors)
de-serialize the triangulations and the associated solution vectors
std::vector< std::vector< double > > d_domainBoundingVectors
Definition triangulationManager.h:315
std::vector< std::vector< double > > d_atomPositions
Definition triangulationManager.h:310
void refineSerialMesh(const std::map< dealii::CellId, dftfe::uInt > &cellIdToCellRefineFlagMapLocal, const MPI_Comm &mpi_comm, dealii::parallel::distributed::Triangulation< 3 > &serialTriangulation, const dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, std::vector< bool > &serialTriaCurrentRefinement)
internal function which refines the serial mesh based on refinement flags from parallel mesh....
const dftfe::uInt n_mpi_processes
Definition triangulationManager.h:332
const dftParameters & d_dftParams
Definition triangulationManager.h:322
const dftfe::uInt this_mpi_process
Definition triangulationManager.h:331
dealii::parallel::distributed::Triangulation< 3 > & getParallelMeshUnmoved()
returns constant reference to parallel unmoved triangulation
void saveSupportTriangulations(std::string path)
internal function to serialize support triangulations. No solution data is attached to them
bool checkPeriodicSurfaceRefinementConsistency(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation)
check that triangulation has consistent refinement across periodic boundary including for ghost cells
const dftfe::uInt d_max_refinement_steps
Definition triangulationManager.h:316
void generateResetMeshes(const std::vector< std::vector< double > > &domainBoundingVectors, const bool generateSerialTria)
generates reset meshes to the last mesh generated by auto mesh approach. This is used in Gaussian upd...
const dftfe::uInt d_FEOrder
Definition triangulationManager.h:320
bool checkConstraintsConsistency(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation)
check that FEOrder=1 dofHandler using the triangulation has parallel consistent combined hanging node...
void generateCoarseMeshesForRestart(const std::vector< std::vector< double > > &atomLocations, const std::vector< std::vector< double > > &imageAtomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< double > &nearestAtomDistances, const std::vector< std::vector< double > > &domainBoundingVectors, const bool generateSerialTria)
generates the coarse meshes for restart.
bool consistentPeriodicBoundaryRefinement(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, std::vector< dftfe::uInt > &locallyOwnedCellsRefineFlags, std::map< dealii::CellId, dftfe::uInt > &cellIdToCellRefineFlagMapLocal)
internal function which sets refinement flags to have consistent refinement across periodic boundary
void generateCoarseMesh(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation)
internal function which generates a coarse mesh which is required for the load function call in resta...
void generateAutomaticMeshApriori(const dealii::DoFHandler< 3 > &dofHandler, dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, const std::vector< distributedCPUVec< double > > &eigenVectorsArrayIn, const dftfe::uInt FEOrder)
returns generates A-posteriori refined mesh
void generateMesh(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, dealii::parallel::distributed::Triangulation< 3 > &serialTriangulation, std::vector< std::vector< bool > > ¶llelTriaCurrentRefinement, std::vector< std::vector< bool > > &serialTriaCurrentRefinement, const bool generateSerialTria=false, const bool enableManualRepartitioning=false)
internal function which generates a parallel and serial mesh using a adaptive refinement strategy.
void loadSupportTriangulations(std::string path)
internal function to de-serialize support triangulations. No solution data is read from them
triangulationManager(const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &interpoolcomm, const MPI_Comm &interBandGroupComm, const dftfe::uInt FEOrder, const dftParameters &dftParams)
Constructor.
dealii::ConditionalOStream pcout
Definition triangulationManager.h:333
const MPI_Comm interBandGroupComm
Definition triangulationManager.h:330
void resetMesh(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulationA, dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulationB)
resets the vertices of meshB moved to vertices of meshA.
dealii::parallel::distributed::Triangulation< 3 > d_parallelTriangulationUnmoved
Definition triangulationManager.h:300
std::vector< std::vector< bool > > d_serialTriaCurrentRefinement
Definition triangulationManager.h:307
dealii::TimerOutput computing_timer
Definition triangulationManager.h:338
bool refinementAlgorithmA(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, std::vector< dftfe::uInt > &locallyOwnedCellsRefineFlags, std::map< dealii::CellId, dftfe::uInt > &cellIdToCellRefineFlagMapLocal, const bool smoothenCellsOnPeriodicBoundary=false, const double smootheningFactor=2.0)
internal function which sets refinement flags based on a custom created algorithm
dealii::parallel::distributed::Triangulation< 3 > d_serialTriangulationUnmoved
Definition triangulationManager.h:304
std::vector< std::vector< double > > d_meshSizes
Definition triangulationManager.h:312
const MPI_Comm mpi_communicator
Definition triangulationManager.h:328
const MPI_Comm d_mpiCommParent
Definition triangulationManager.h:327
void generateSerialUnmovedAndParallelMovedUnmovedMesh(const std::vector< std::vector< double > > &atomLocations, const std::vector< std::vector< double > > &imageAtomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< double > &nearestAtomDistances, const std::vector< std::vector< double > > &domainBoundingVectors, const bool generateSerialTria)
generates parallel moved and unmoved meshes, and serial unmoved mesh.
std::vector< std::vector< double > > d_imageAtomPositions
Definition triangulationManager.h:311
dealii::parallel::distributed::Triangulation< 3 > & getSerialMeshUnmoved()
returns constant reference to serial unmoved triangulation
std::vector< double > d_nearestAtomDistances
Definition triangulationManager.h:314
dealii::parallel::distributed::Triangulation< 3 > d_parallelTriangulationMoved
Definition triangulationManager.h:302
Definition pseudoPotentialToDftfeConverter.cc:34
dealii::LinearAlgebra::distributed::Vector< elem_type, dealii::MemorySpace::Host > distributedCPUVec
Definition headers.h:92
std::uint32_t uInt
Definition TypeConfig.h:10