DFT-FE 1.1.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
symmetry.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 symmetry_H_
17#define symmetry_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 "dft.h"
27#include "headers.h"
28
29namespace dftfe
30{
31 /**
32 * @brief density symmetrization based on irreducible Brillouin zone calculation, only relevant for calculations using point group symmetries
33 *
34 * @author Krishnendu Ghosh, krisg@umich.edu
35 */
36
37 template <unsigned int FEOrder,
38 unsigned int FEOrderElectro,
39 dftfe::utils::MemorySpace memorySpace>
41 {
42 // template <unsigned int T1, unsigned int T2>
43 friend class dftClass<FEOrder, FEOrderElectro, memorySpace>;
44
45 public:
46 /**
47 * symmetryClass constructor
48 */
50 const MPI_Comm &mpi_comm_parent,
51 const MPI_Comm &mpi_comm_domain,
52 const MPI_Comm &_interpoolcomm);
53 /**
54 * Main driver routine to generate and communicate mapping tables
55 */
56 void
58 /**
59 * computes total density by summing over all the symmetry transformed
60 * points
61 */
62 void
64 /**
65 * computes density at all the transformed points received from other
66 * processors and scatters the density back to the corresponding processors
67 */
68 void
70 /**
71 * Wipes out mapping tables between relaxation steps
72 */
73 void
75 /**
76 * quick snippet to go back and forth between crystal and cartesian
77 * coordinates
78 * @param [in] p point that is to be transformed
79 * @param [in] flag type of coordinate transformation, 1 takes crys. to cart. -1 takes cart. to crys.
80 */
81 dealii::Point<3> crys2cart(dealii::Point<3> p, int flag);
82
83
84 private:
86 /**
87 * dealii based FE data structres
88 */
89 dealii::FE_Q<3> FE;
90 /**
91 * compute-time logger
92 */
93 dealii::TimerOutput computing_timer;
94 /**
95 * parallel objects
96 */
98 const unsigned int n_mpi_processes;
99 const unsigned int this_mpi_process;
100 dealii::ConditionalOStream pcout;
101 /**
102 * Space group symmetry related data
103 */
104 std::vector<std::vector<std::vector<double>>> symmMat;
105 unsigned int numSymm;
106 double translation[500][3];
107 std::vector<std::vector<int>> symmUnderGroup;
108 std::vector<int> numSymmUnderGroup;
109 /**
110 * Data members required for storing mapping tables locally
111 */
112 std::map<dealii::CellId,
113 std::vector<std::tuple<int, std::vector<double>, int>>>
115 std::vector<std::vector<std::vector<std::tuple<int, int, int>>>>
117 std::map<int, typename dealii::DoFHandler<3>::active_cell_iterator>
119 std::map<dealii::CellId, int> globalCellId;
120 std::vector<int> ownerProcGlobal;
121 /**
122 * Data members required for communicating mapping tables
123 */
124 std::vector<std::vector<std::vector<std::vector<int>>>> mappedGroupSend0;
125 std::vector<std::vector<std::vector<std::vector<int>>>> mappedGroupSend2;
126 std::vector<std::vector<std::vector<std::vector<std::vector<double>>>>>
128 std::vector<std::vector<std::vector<int>>> mappedGroupRecvd0;
129 std::vector<std::vector<std::vector<int>>> mappedGroupRecvd2;
130 std::vector<std::vector<std::vector<std::vector<double>>>>
132 std::vector<std::vector<std::vector<std::vector<int>>>> send_buf_size;
133 std::vector<std::vector<std::vector<std::vector<int>>>> recv_buf_size;
134 std::vector<std::vector<std::vector<std::vector<double>>>> rhoRecvd,
136 std::vector<std::vector<std::vector<std::vector<int>>>> groupOffsets;
137 /**
138 * Data sizes and offsets required for MPI scattering and gathering of
139 * mapping tables and symmetrized density They have to be data members since
140 * the same sizes and offsets are used in both communication mapping tables
141 * and symmetrized density
142 */
143 unsigned int totPoints;
147 std::vector<int> recvdData0, recvdData2, recvdData3;
148 std::vector<std::vector<double>> recvdData1;
150 //
151 };
152} // namespace dftfe
153#endif
This class is the primary interface location of all other parts of the DFT-FE code for all steps invo...
Definition dft.h:115
const MPI_Comm interpoolcomm
Definition symmetry.h:97
double translation[500][3]
Definition symmetry.h:106
dftClass< FEOrder, FEOrderElectro, memorySpace > * dftPtr
Definition symmetry.h:85
std::vector< int > recvdData2
Definition symmetry.h:147
const unsigned int n_mpi_processes
Definition symmetry.h:98
dealii::Point< 3 > crys2cart(dealii::Point< 3 > p, int flag)
std::vector< std::vector< std::vector< std::vector< std::vector< double > > > > > mappedGroupSend1
Definition symmetry.h:127
std::vector< int > send_scatterGrad_size
Definition symmetry.h:145
std::vector< std::vector< double > > recvdData1
Definition symmetry.h:148
std::vector< int > recvdData3
Definition symmetry.h:147
std::vector< std::vector< std::vector< double > > > symmMat
Definition symmetry.h:104
std::vector< std::vector< std::vector< std::vector< double > > > > mappedGroupRecvd1
Definition symmetry.h:131
std::vector< int > recv_size
Definition symmetry.h:144
std::vector< int > mpi_offsets1
Definition symmetry.h:146
std::vector< int > numSymmUnderGroup
Definition symmetry.h:108
std::vector< std::vector< int > > symmUnderGroup
Definition symmetry.h:107
std::vector< std::vector< std::vector< std::vector< int > > > > mappedGroupSend0
Definition symmetry.h:124
std::vector< int > mpi_scatter_offset
Definition symmetry.h:144
std::vector< std::vector< std::vector< std::vector< int > > > > recv_buf_size
Definition symmetry.h:133
std::map< int, typename dealii::DoFHandler< 3 >::active_cell_iterator > dealIICellId
Definition symmetry.h:118
symmetryClass(dftClass< FEOrder, FEOrderElectro, memorySpace > *_dftPtr, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &_interpoolcomm)
dealii::ConditionalOStream pcout
Definition symmetry.h:100
std::map< dealii::CellId, std::vector< std::tuple< int, std::vector< double >, int > > > cellMapTable
Definition symmetry.h:114
dealii::TimerOutput computing_timer
Definition symmetry.h:93
std::vector< int > mpiGrad_offsets1
Definition symmetry.h:146
std::vector< std::vector< std::vector< std::tuple< int, int, int > > > > mappedGroup
Definition symmetry.h:116
std::vector< std::vector< std::vector< std::vector< int > > > > mappedGroupSend2
Definition symmetry.h:125
std::vector< int > recvGrad_size1
Definition symmetry.h:149
std::vector< std::vector< std::vector< std::vector< int > > > > send_buf_size
Definition symmetry.h:132
dealii::FE_Q< 3 > FE
Definition symmetry.h:89
std::vector< int > recv_size0
Definition symmetry.h:149
void computeAndSymmetrize_rhoOut()
const MPI_Comm d_mpiCommParent
Definition symmetry.h:97
std::vector< int > send_scatter_size
Definition symmetry.h:144
const MPI_Comm mpi_communicator
Definition symmetry.h:97
std::vector< int > ownerProcGlobal
Definition symmetry.h:120
std::vector< std::vector< std::vector< int > > > mappedGroupRecvd2
Definition symmetry.h:129
std::vector< int > mpi_offsets0
Definition symmetry.h:146
unsigned int totPoints
Definition symmetry.h:143
std::vector< int > recvdData0
Definition symmetry.h:147
std::vector< std::vector< std::vector< int > > > mappedGroupRecvd0
Definition symmetry.h:128
unsigned int numSymm
Definition symmetry.h:105
std::vector< std::vector< std::vector< std::vector< double > > > > gradRhoRecvd
Definition symmetry.h:135
std::map< dealii::CellId, int > globalCellId
Definition symmetry.h:119
std::vector< std::vector< std::vector< std::vector< double > > > > rhoRecvd
Definition symmetry.h:134
std::vector< std::vector< std::vector< std::vector< int > > > > groupOffsets
Definition symmetry.h:136
std::vector< int > mpi_scatterGrad_offset
Definition symmetry.h:145
const unsigned int this_mpi_process
Definition symmetry.h:99
std::vector< int > recv_size1
Definition symmetry.h:149
MemorySpace
Definition MemorySpaceType.h:33
Definition pseudoPotentialToDftfeConverter.cc:34