17#ifndef triangulationManager_H_
18#define triangulationManager_H_
52 const MPI_Comm & mpi_comm_domain,
55 const unsigned int FEOrder,
76 const std::vector<std::vector<double>> &atomLocations,
77 const std::vector<std::vector<double>> &imageAtomLocations,
78 const std::vector<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<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,
118 const unsigned int FEOrder);
125 dealii::parallel::distributed::Triangulation<3> &
132 dealii::parallel::distributed::Triangulation<3> &
139 dealii::parallel::distributed::Triangulation<3> &
147 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulationA,
148 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulationB);
156 const std::vector<std::vector<double>> &domainBoundingVectors,
157 const bool generateSerialTria);
176 const unsigned int feOrder,
177 const unsigned int nComponents,
179 const MPI_Comm & interpoolComm,
196 const unsigned int feOrder,
197 const unsigned int nComponents,
205 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation,
206 dealii::parallel::distributed::Triangulation<3> &serialTriangulation,
207 std::vector<std::vector<bool>> ¶llelTriaCurrentRefinement,
208 std::vector<std::vector<bool>> &serialTriaCurrentRefinement,
209 const bool generateSerialTria =
false,
210 const bool enableManualRepartitioning =
false);
219 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation);
227 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation,
228 std::vector<unsigned int> & locallyOwnedCellsRefineFlags,
229 std::map<dealii::CellId, unsigned int> &cellIdToCellRefineFlagMapLocal,
230 const bool smoothenCellsOnPeriodicBoundary =
false,
231 const double smootheningFactor = 2.0);
240 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation,
241 std::vector<unsigned int> & locallyOwnedCellsRefineFlags,
242 std::map<dealii::CellId, unsigned int> &cellIdToCellRefineFlagMapLocal);
250 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation);
259 dealii::parallel::distributed::Triangulation<3> ¶llelTriangulation);
269 const std::map<dealii::CellId, unsigned int>
270 & cellIdToCellRefineFlagMapLocal,
271 const MPI_Comm &mpi_comm,
272 dealii::parallel::distributed::Triangulation<3> &serialTriangulation,
273 const dealii::parallel::distributed::Triangulation<3>
274 & parallelTriangulation,
275 std::vector<bool> &serialTriaCurrentRefinement);
292 dealii::parallel::distributed::Triangulation<3>
294 dealii::parallel::distributed::Triangulation<3>
296 dealii::parallel::distributed::Triangulation<3>
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:35
void loadTriangulationsSolutionVectors(std::string path, const unsigned int feOrder, const unsigned int nComponents, std::vector< distributedCPUVec< double > * > &solutionVectors)
de-serialize the triangulations and the associated solution vectors
dealii::parallel::distributed::Triangulation< 3 > & getParallelMeshMoved()
returns reference to parallel moved triangulation
std::vector< int > d_imageIds
Definition triangulationManager.h:306
std::vector< std::vector< bool > > d_parallelTriaCurrentRefinement
Definition triangulationManager.h:299
triangulationManager(const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &interpoolcomm, const MPI_Comm &interBandGroupComm, const unsigned int FEOrder, const dftParameters &dftParams)
Constructor.
const MPI_Comm interpoolcomm
Definition triangulationManager.h:322
std::vector< std::vector< double > > d_domainBoundingVectors
Definition triangulationManager.h:308
std::vector< std::vector< double > > d_atomPositions
Definition triangulationManager.h:303
void generateCoarseMeshesForRestart(const std::vector< std::vector< double > > &atomLocations, const std::vector< std::vector< double > > &imageAtomLocations, const std::vector< int > &imageIds, const std::vector< double > &nearestAtomDistances, const std::vector< std::vector< double > > &domainBoundingVectors, const bool generateSerialTria)
generates the coarse meshes for restart.
void saveTriangulationsSolutionVectors(std::string path, const unsigned int feOrder, const unsigned int nComponents, const std::vector< const distributedCPUVec< double > * > &solutionVectors, const MPI_Comm &interpoolComm, const MPI_Comm &interBandGroupComm)
serialize the triangulations and the associated solution vectors
const dftParameters & d_dftParams
Definition triangulationManager.h:315
const unsigned int d_FEOrder
Definition triangulationManager.h:313
void refineSerialMesh(const std::map< dealii::CellId, unsigned int > &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....
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 unsigned int this_mpi_process
Definition triangulationManager.h:324
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...
bool checkConstraintsConsistency(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation)
check that FEOrder=1 dofHandler using the triangulation has parallel consistent combined hanging node...
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...
bool consistentPeriodicBoundaryRefinement(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, std::vector< unsigned int > &locallyOwnedCellsRefineFlags, std::map< dealii::CellId, unsigned int > &cellIdToCellRefineFlagMapLocal)
internal function which sets refinement flags to have consistent refinement across periodic boundary
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
void generateAutomaticMeshApriori(const dealii::DoFHandler< 3 > &dofHandler, dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, const std::vector< distributedCPUVec< double > > &eigenVectorsArrayIn, const unsigned int FEOrder)
returns generates A-posteriori refined mesh
dealii::ConditionalOStream pcout
Definition triangulationManager.h:326
const MPI_Comm interBandGroupComm
Definition triangulationManager.h:323
bool refinementAlgorithmA(dealii::parallel::distributed::Triangulation< 3 > ¶llelTriangulation, std::vector< unsigned int > &locallyOwnedCellsRefineFlags, std::map< dealii::CellId, unsigned int > &cellIdToCellRefineFlagMapLocal, const bool smoothenCellsOnPeriodicBoundary=false, const double smootheningFactor=2.0)
internal function which sets refinement flags based on a custom created algorithm
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:293
std::vector< std::vector< bool > > d_serialTriaCurrentRefinement
Definition triangulationManager.h:300
const unsigned int d_max_refinement_steps
Definition triangulationManager.h:309
dealii::TimerOutput computing_timer
Definition triangulationManager.h:331
dealii::parallel::distributed::Triangulation< 3 > d_serialTriangulationUnmoved
Definition triangulationManager.h:297
std::vector< std::vector< double > > d_meshSizes
Definition triangulationManager.h:305
const unsigned int n_mpi_processes
Definition triangulationManager.h:325
const MPI_Comm mpi_communicator
Definition triangulationManager.h:321
const MPI_Comm d_mpiCommParent
Definition triangulationManager.h:320
std::vector< std::vector< double > > d_imageAtomPositions
Definition triangulationManager.h:304
dealii::parallel::distributed::Triangulation< 3 > & getSerialMeshUnmoved()
returns constant reference to serial unmoved triangulation
void generateSerialUnmovedAndParallelMovedUnmovedMesh(const std::vector< std::vector< double > > &atomLocations, const std::vector< std::vector< double > > &imageAtomLocations, const std::vector< 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< double > d_nearestAtomDistances
Definition triangulationManager.h:307
dealii::parallel::distributed::Triangulation< 3 > d_parallelTriangulationMoved
Definition triangulationManager.h:295
Definition pseudoPotentialToDftfeConverter.cc:34
dealii::LinearAlgebra::distributed::Vector< elem_type, dealii::MemorySpace::Host > distributedCPUVec
Definition headers.h:92