DFT-FE 1.3.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
groupSymmetry.h
Go to the documentation of this file.
1// ---------------------------------------------------------------------
2//
3// Copyright (c) 2017-2025 The Regents of the University of Michigan and DFT-FE
4// authors.
5//
6// This file is part of the DFT-FE code.
7//
8// The DFT-FE code is free software; you can use it, redistribute
9// it, and/or modify it under the terms of the GNU Lesser General
10// Public License as published by the Free Software Foundation; either
11// version 2.1 of the License, or (at your option) any later version.
12// The full text of the license can be found in the file LICENSE at
13// the top level of the DFT-FE distribution.
14//
15
16#ifndef groupSymmetry_H_
17#define groupSymmetry_H_
18#include <complex>
19#include <deque>
20#include <iomanip>
21#include <iostream>
22#include <numeric>
23#include <sstream>
24
25#include "constants.h"
26#include "headers.h"
27#include "BLASWrapper.h"
28#include <deal.II/base/mpi_remote_point_evaluation.h>
29namespace dftfe
30{
31 /**
32 * @brief density symmetrization based on irreducible Brillouin zone calculation,
33 * only relevant for calculations using point group symmetries
34 *
35 * @author Nikhil Kodali
36 */
37
39 {
40 public:
41 /**
42 * groupSymmetryClass constructor
43 */
44 groupSymmetryClass(const MPI_Comm &mpi_comm_parent,
45 const MPI_Comm &mpi_comm_domain,
46 const bool isGroupSymmetry,
47 const bool isTimeReversal);
48
49 void
50 initGroupSymmetry(std::vector<std::vector<double>> &atomLocations,
51 std::vector<std::vector<double>> &domainBoundingVectors,
52 std::vector<bool> &periodicBoundaryConditions,
53 const bool isCollinearSpin = false);
54
55 void
57 std::vector<std::vector<double>> &atomLocations,
58 std::vector<std::vector<double>> &domainBoundingVectors);
59
60 void
61 setupCommPatternForNodalField(const dealii::DoFHandler<3> &dofHandler);
62
63 bool
66 &globalPointCoords);
67
68 void
70 distributedCPUVec<double> &scalarField,
71 const dealii::DoFHandler<3> &dofHandler);
72
73 void
76 &vectorFieldValues) const;
77
78 void
81 &tensorValues) const;
82
83 void
84 reduceKPointGrid(std::vector<double> &kPointCoordinatesFrac,
85 std::vector<double> &kPointWeights) const;
86
87
88 private:
89 /**
90 * compute-time logger
91 */
92 dealii::TimerOutput computing_timer;
93 /**
94 * parallel objects
95 */
99 dealii::ConditionalOStream pcout;
100 /**
101 * Space group symmetry related data
102 */
104 std::vector<std::vector<double>> d_symmMat;
105 std::vector<std::vector<double>> d_symmMatCart;
106 std::vector<std::vector<double>> d_symmMatInverse;
107 std::vector<std::vector<double>> d_translation;
108
116
117
119
120 std::vector<std::vector<dftfe::uInt>> d_pointMapsForSymmetry;
121
124
125 std::vector<std::map<dftfe::uInt, dftfe::uInt>>
127 mutable dealii::Utilities::MPI::RemotePointEvaluation<3, 3>
129 std::vector<dealii::Point<3>> requiredPointCoordinates;
130 dealii::MappingQ1<3> mapping;
131 };
132} // namespace dftfe
133#endif
void reduceKPointGrid(std::vector< double > &kPointCoordinatesFrac, std::vector< double > &kPointWeights) const
std::vector< std::vector< dftfe::uInt > > d_pointMapsForSymmetry
Definition groupSymmetry.h:120
std::vector< std::map< dftfe::uInt, dftfe::uInt > > localDoFIndexToPointIndexMap
Definition groupSymmetry.h:126
void symmetrizeScalarFieldFromLocalValues(distributedCPUVec< double > &scalarField, const dealii::DoFHandler< 3 > &dofHandler)
void initGroupSymmetry(std::vector< std::vector< double > > &atomLocations, std::vector< std::vector< double > > &domainBoundingVectors, std::vector< bool > &periodicBoundaryConditions, const bool isCollinearSpin=false)
dealii::MappingQ1< 3 > mapping
Definition groupSymmetry.h:130
std::vector< std::vector< double > > d_translation
Definition groupSymmetry.h:107
dftfe::uInt d_numAtoms
Definition groupSymmetry.h:109
std::vector< dealii::Point< 3 > > requiredPointCoordinates
Definition groupSymmetry.h:129
void reinitGroupSymmetry(std::vector< std::vector< double > > &atomLocations, std::vector< std::vector< double > > &domainBoundingVectors)
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_domainBoundingVectorsInverse
Definition groupSymmetry.h:115
groupSymmetryClass(const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const bool isGroupSymmetry, const bool isTimeReversal)
dealii::ConditionalOStream pcout
Definition groupSymmetry.h:99
const MPI_Comm d_mpiCommDomain
Definition groupSymmetry.h:96
dealii::Utilities::MPI::RemotePointEvaluation< 3, 3 > remotePointCache
Definition groupSymmetry.h:128
void symmetrizeForce(dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &vectorFieldValues) const
std::vector< bool > d_periodicBoundaryConditions
Definition groupSymmetry.h:118
const bool d_isTimeReversal
Definition groupSymmetry.h:122
std::vector< std::vector< double > > d_symmMatInverse
Definition groupSymmetry.h:106
dealii::TimerOutput computing_timer
Definition groupSymmetry.h:92
const MPI_Comm d_mpiCommParent
Definition groupSymmetry.h:96
const dftfe::uInt this_mpi_process
Definition groupSymmetry.h:98
std::vector< std::vector< double > > d_symmMatCart
Definition groupSymmetry.h:105
const bool d_isGroupSymmetry
Definition groupSymmetry.h:123
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_domainBoundingVectors
Definition groupSymmetry.h:113
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_atomicCoordsFrac
Definition groupSymmetry.h:111
const dftfe::uInt n_mpi_processes
Definition groupSymmetry.h:97
void symmetrizeStress(dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &tensorValues) const
dftfe::uInt d_numSymm
Definition groupSymmetry.h:103
void setupCommPatternForNodalField(const dealii::DoFHandler< 3 > &dofHandler)
bool computeAtomIdMapsFromGlobalFractionalCoordinates(dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &globalPointCoords)
std::vector< std::vector< double > > d_symmMat
Definition groupSymmetry.h:104
Definition MemoryStorage.h:33
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