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 <dftfe::utils::MemorySpace memorySpace>
39 {
40 // template <dftfe::uInt T1, dftfe::uInt T2>
41 friend class dftClass<memorySpace>;
42
43 public:
44 /**
45 * symmetryClass constructor
46 */
48 const MPI_Comm &mpi_comm_parent,
49 const MPI_Comm &mpi_comm_domain,
50 const MPI_Comm &_interpoolcomm);
51 /**
52 * Main driver routine to generate and communicate mapping tables
53 */
54 void
56 /**
57 * computes total density by summing over all the symmetry transformed
58 * points
59 */
60 void
62 /**
63 * computes density at all the transformed points received from other
64 * processors and scatters the density back to the corresponding processors
65 */
66 void
68 /**
69 * Wipes out mapping tables between relaxation steps
70 */
71 void
73 /**
74 * quick snippet to go back and forth between crystal and cartesian
75 * coordinates
76 * @param [in] p point that is to be transformed
77 * @param [in] flag type of coordinate transformation, 1 takes crys. to cart. -1 takes cart. to crys.
78 */
79 dealii::Point<3>
80 crys2cart(dealii::Point<3> p, dftfe::Int flag);
81
82
83 private:
85 /**
86 * dealii based FE data structres
87 */
88 dealii::FE_Q<3> FE;
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 */
103 std::vector<std::vector<std::vector<double>>> symmMat;
105 double translation[500][3];
106 std::vector<std::vector<dftfe::Int>> symmUnderGroup;
107 std::vector<dftfe::Int> numSymmUnderGroup;
108 /**
109 * Data members required for storing mapping tables locally
110 */
111 std::map<
112 dealii::CellId,
113 std::vector<std::tuple<dftfe::Int, std::vector<double>, dftfe::Int>>>
115 std::vector<
116 std::vector<std::vector<std::tuple<dftfe::Int, dftfe::Int, dftfe::Int>>>>
118 std::map<dftfe::Int, typename dealii::DoFHandler<3>::active_cell_iterator>
120 std::map<dealii::CellId, dftfe::Int> globalCellId;
121 std::vector<dftfe::Int> ownerProcGlobal;
122 /**
123 * Data members required for communicating mapping tables
124 */
125 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
127 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
129 std::vector<std::vector<std::vector<std::vector<std::vector<double>>>>>
131 std::vector<std::vector<std::vector<dftfe::Int>>> mappedGroupRecvd0;
132 std::vector<std::vector<std::vector<dftfe::Int>>> mappedGroupRecvd2;
133 std::vector<std::vector<std::vector<std::vector<double>>>>
135 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
137 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
139 std::vector<std::vector<std::vector<std::vector<double>>>> rhoRecvd,
141 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>> groupOffsets;
142 /**
143 * Data sizes and offsets required for MPI scattering and gathering of
144 * mapping tables and symmetrized density They have to be data members since
145 * the same sizes and offsets are used in both communication mapping tables
146 * and symmetrized density
147 */
152 std::vector<dftfe::Int> recvdData0, recvdData2, recvdData3;
153 std::vector<std::vector<double>> recvdData1;
155 //
156 };
157} // namespace dftfe
158#endif
This class is the primary interface location of all other parts of the DFT-FE code for all steps invo...
Definition dft.h:111
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > send_buf_size
Definition symmetry.h:136
std::vector< std::vector< std::vector< std::vector< std::vector< double > > > > > mappedGroupSend1
Definition symmetry.h:130
std::vector< int > mpi_scatterGrad_offset
Definition symmetry.h:150
std::vector< std::vector< std::vector< std::vector< double > > > > gradRhoRecvd
Definition symmetry.h:140
std::map< dftfe::Int, typename dealii::DoFHandler< 3 >::active_cell_iterator > dealIICellId
Definition symmetry.h:119
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > mappedGroupSend0
Definition symmetry.h:126
dftfe::uInt totPoints
Definition symmetry.h:148
symmetryClass(dftClass< memorySpace > *_dftPtr, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &_interpoolcomm)
std::vector< std::vector< std::vector< std::vector< double > > > > rhoRecvd
Definition symmetry.h:139
const dftfe::uInt this_mpi_process
Definition symmetry.h:98
std::vector< dftfe::Int > numSymmUnderGroup
Definition symmetry.h:107
std::vector< int > send_scatterGrad_size
Definition symmetry.h:150
std::vector< int > recvGrad_size1
Definition symmetry.h:154
dftfe::uInt numSymm
Definition symmetry.h:104
void computeAndSymmetrize_rhoOut()
const MPI_Comm mpi_communicator
Definition symmetry.h:96
dealii::ConditionalOStream pcout
Definition symmetry.h:99
std::vector< std::vector< std::vector< std::vector< double > > > > mappedGroupRecvd1
Definition symmetry.h:134
std::vector< std::vector< std::vector< std::tuple< dftfe::Int, dftfe::Int, dftfe::Int > > > > mappedGroup
Definition symmetry.h:117
std::vector< std::vector< double > > recvdData1
Definition symmetry.h:153
std::vector< int > send_scatter_size
Definition symmetry.h:149
std::vector< int > mpiGrad_offsets1
Definition symmetry.h:151
std::vector< int > recv_size0
Definition symmetry.h:154
std::map< dealii::CellId, dftfe::Int > globalCellId
Definition symmetry.h:120
std::vector< int > mpi_scatter_offset
Definition symmetry.h:149
double translation[500][3]
Definition symmetry.h:105
std::vector< dftfe::Int > recvdData3
Definition symmetry.h:152
dealii::FE_Q< 3 > FE
Definition symmetry.h:88
std::vector< dftfe::Int > recvdData2
Definition symmetry.h:152
std::vector< dftfe::Int > recvdData0
Definition symmetry.h:152
std::vector< dftfe::Int > ownerProcGlobal
Definition symmetry.h:121
std::vector< std::vector< dftfe::Int > > symmUnderGroup
Definition symmetry.h:106
const MPI_Comm interpoolcomm
Definition symmetry.h:96
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > recv_buf_size
Definition symmetry.h:138
std::vector< int > mpi_offsets1
Definition symmetry.h:151
std::vector< std::vector< std::vector< dftfe::Int > > > mappedGroupRecvd2
Definition symmetry.h:132
std::map< dealii::CellId, std::vector< std::tuple< dftfe::Int, std::vector< double >, dftfe::Int > > > cellMapTable
Definition symmetry.h:114
std::vector< int > recv_size1
Definition symmetry.h:154
std::vector< int > mpi_offsets0
Definition symmetry.h:151
dealii::TimerOutput computing_timer
Definition symmetry.h:92
std::vector< std::vector< std::vector< double > > > symmMat
Definition symmetry.h:103
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > groupOffsets
Definition symmetry.h:141
dealii::Point< 3 > crys2cart(dealii::Point< 3 > p, dftfe::Int flag)
std::vector< std::vector< std::vector< dftfe::Int > > > mappedGroupRecvd0
Definition symmetry.h:131
std::vector< int > recv_size
Definition symmetry.h:149
const MPI_Comm d_mpiCommParent
Definition symmetry.h:96
const dftfe::uInt n_mpi_processes
Definition symmetry.h:97
dftClass< memorySpace > * dftPtr
Definition symmetry.h:84
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > mappedGroupSend2
Definition symmetry.h:128
Definition pseudoPotentialToDftfeConverter.cc:34
std::uint32_t uInt
Definition TypeConfig.h:10
std::int32_t Int
Definition TypeConfig.h:11