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::uInt FEOrder,
38 dftfe::uInt FEOrderElectro,
39 dftfe::utils::MemorySpace memorySpace>
41 {
42 // template <dftfe::uInt T1, dftfe::uInt 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>
82 crys2cart(dealii::Point<3> p, dftfe::Int flag);
83
84
85 private:
87 /**
88 * dealii based FE data structres
89 */
90 dealii::FE_Q<3> FE;
91 /**
92 * compute-time logger
93 */
94 dealii::TimerOutput computing_timer;
95 /**
96 * parallel objects
97 */
101 dealii::ConditionalOStream pcout;
102 /**
103 * Space group symmetry related data
104 */
105 std::vector<std::vector<std::vector<double>>> symmMat;
107 double translation[500][3];
108 std::vector<std::vector<dftfe::Int>> symmUnderGroup;
109 std::vector<dftfe::Int> numSymmUnderGroup;
110 /**
111 * Data members required for storing mapping tables locally
112 */
113 std::map<
114 dealii::CellId,
115 std::vector<std::tuple<dftfe::Int, std::vector<double>, dftfe::Int>>>
117 std::vector<
118 std::vector<std::vector<std::tuple<dftfe::Int, dftfe::Int, dftfe::Int>>>>
120 std::map<dftfe::Int, typename dealii::DoFHandler<3>::active_cell_iterator>
122 std::map<dealii::CellId, dftfe::Int> globalCellId;
123 std::vector<dftfe::Int> ownerProcGlobal;
124 /**
125 * Data members required for communicating mapping tables
126 */
127 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
129 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
131 std::vector<std::vector<std::vector<std::vector<std::vector<double>>>>>
133 std::vector<std::vector<std::vector<dftfe::Int>>> mappedGroupRecvd0;
134 std::vector<std::vector<std::vector<dftfe::Int>>> mappedGroupRecvd2;
135 std::vector<std::vector<std::vector<std::vector<double>>>>
137 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
139 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>>
141 std::vector<std::vector<std::vector<std::vector<double>>>> rhoRecvd,
143 std::vector<std::vector<std::vector<std::vector<dftfe::Int>>>> groupOffsets;
144 /**
145 * Data sizes and offsets required for MPI scattering and gathering of
146 * mapping tables and symmetrized density They have to be data members since
147 * the same sizes and offsets are used in both communication mapping tables
148 * and symmetrized density
149 */
154 std::vector<dftfe::Int> recvdData0, recvdData2, recvdData3;
155 std::vector<std::vector<double>> recvdData1;
157 //
158 };
159} // namespace dftfe
160#endif
This class is the primary interface location of all other parts of the DFT-FE code for all steps invo...
Definition dft.h:116
const MPI_Comm interpoolcomm
Definition symmetry.h:98
dealii::Point< 3 > crys2cart(dealii::Point< 3 > p, dftfe::Int flag)
double translation[500][3]
Definition symmetry.h:107
dftClass< FEOrder, FEOrderElectro, memorySpace > * dftPtr
Definition symmetry.h:86
std::vector< dftfe::Int > recvdData0
Definition symmetry.h:154
std::vector< std::vector< std::vector< std::vector< std::vector< double > > > > > mappedGroupSend1
Definition symmetry.h:132
std::vector< int > send_scatterGrad_size
Definition symmetry.h:152
std::vector< std::vector< double > > recvdData1
Definition symmetry.h:155
std::vector< std::vector< std::vector< double > > > symmMat
Definition symmetry.h:105
std::vector< std::vector< dftfe::Int > > symmUnderGroup
Definition symmetry.h:108
std::vector< std::vector< std::vector< std::vector< double > > > > mappedGroupRecvd1
Definition symmetry.h:136
std::vector< int > recv_size
Definition symmetry.h:151
std::vector< int > mpi_offsets1
Definition symmetry.h:153
std::vector< int > mpi_scatter_offset
Definition symmetry.h:151
std::map< dealii::CellId, dftfe::Int > globalCellId
Definition symmetry.h:122
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:101
dftfe::uInt numSymm
Definition symmetry.h:106
const dftfe::uInt this_mpi_process
Definition symmetry.h:100
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > mappedGroupSend2
Definition symmetry.h:130
dealii::TimerOutput computing_timer
Definition symmetry.h:94
std::vector< std::vector< std::vector< dftfe::Int > > > mappedGroupRecvd0
Definition symmetry.h:133
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > recv_buf_size
Definition symmetry.h:140
std::vector< int > mpiGrad_offsets1
Definition symmetry.h:153
std::map< dealii::CellId, std::vector< std::tuple< dftfe::Int, std::vector< double >, dftfe::Int > > > cellMapTable
Definition symmetry.h:116
std::map< dftfe::Int, typename dealii::DoFHandler< 3 >::active_cell_iterator > dealIICellId
Definition symmetry.h:121
std::vector< std::vector< std::vector< dftfe::Int > > > mappedGroupRecvd2
Definition symmetry.h:134
dftfe::uInt totPoints
Definition symmetry.h:150
const dftfe::uInt n_mpi_processes
Definition symmetry.h:99
std::vector< int > recvGrad_size1
Definition symmetry.h:156
dealii::FE_Q< 3 > FE
Definition symmetry.h:90
std::vector< int > recv_size0
Definition symmetry.h:156
void computeAndSymmetrize_rhoOut()
const MPI_Comm d_mpiCommParent
Definition symmetry.h:98
std::vector< int > send_scatter_size
Definition symmetry.h:151
const MPI_Comm mpi_communicator
Definition symmetry.h:98
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > send_buf_size
Definition symmetry.h:138
std::vector< dftfe::Int > recvdData3
Definition symmetry.h:154
std::vector< int > mpi_offsets0
Definition symmetry.h:153
std::vector< std::vector< std::vector< std::tuple< dftfe::Int, dftfe::Int, dftfe::Int > > > > mappedGroup
Definition symmetry.h:119
std::vector< dftfe::Int > ownerProcGlobal
Definition symmetry.h:123
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > mappedGroupSend0
Definition symmetry.h:128
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > groupOffsets
Definition symmetry.h:143
std::vector< std::vector< std::vector< std::vector< double > > > > gradRhoRecvd
Definition symmetry.h:142
std::vector< dftfe::Int > recvdData2
Definition symmetry.h:154
std::vector< std::vector< std::vector< std::vector< double > > > > rhoRecvd
Definition symmetry.h:141
std::vector< int > mpi_scatterGrad_offset
Definition symmetry.h:152
std::vector< int > recv_size1
Definition symmetry.h:156
std::vector< dftfe::Int > numSymmUnderGroup
Definition symmetry.h:109
MemorySpace
Definition MemorySpaceType.h:33
Definition pseudoPotentialToDftfeConverter.cc:34
std::uint32_t uInt
Definition TypeConfig.h:10
std::int32_t Int
Definition TypeConfig.h:11