DFT-FE 1.1.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace > Class Template Reference

density symmetrization based on irreducible Brillouin zone calculation, only relevant for calculations using point group symmetries More...

#include <symmetry.h>

Public Member Functions

 symmetryClass (dftClass< FEOrder, FEOrderElectro, memorySpace > *_dftPtr, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &_interpoolcomm)
 
void initSymmetry ()
 
void computeAndSymmetrize_rhoOut ()
 
void computeLocalrhoOut ()
 
void clearMaps ()
 
dealii::Point< 3 > crys2cart (dealii::Point< 3 > p, dftfe::Int flag)
 

Private Attributes

dftClass< FEOrder, FEOrderElectro, memorySpace > * dftPtr
 
dealii::FE_Q< 3 > FE
 
dealii::TimerOutput computing_timer
 
const MPI_Comm d_mpiCommParent
 
const MPI_Comm mpi_communicator
 
const MPI_Comm interpoolcomm
 
const dftfe::uInt n_mpi_processes
 
const dftfe::uInt this_mpi_process
 
dealii::ConditionalOStream pcout
 
std::vector< std::vector< std::vector< double > > > symmMat
 
dftfe::uInt numSymm
 
double translation [500][3]
 
std::vector< std::vector< dftfe::Int > > symmUnderGroup
 
std::vector< dftfe::IntnumSymmUnderGroup
 
std::map< dealii::CellId, std::vector< std::tuple< dftfe::Int, std::vector< double >, dftfe::Int > > > cellMapTable
 
std::vector< std::vector< std::vector< std::tuple< dftfe::Int, dftfe::Int, dftfe::Int > > > > mappedGroup
 
std::map< dftfe::Int, typename dealii::DoFHandler< 3 >::active_cell_iterator > dealIICellId
 
std::map< dealii::CellId, dftfe::IntglobalCellId
 
std::vector< dftfe::IntownerProcGlobal
 
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > mappedGroupSend0
 
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > mappedGroupSend2
 
std::vector< std::vector< std::vector< std::vector< std::vector< double > > > > > mappedGroupSend1
 
std::vector< std::vector< std::vector< dftfe::Int > > > mappedGroupRecvd0
 
std::vector< std::vector< std::vector< dftfe::Int > > > mappedGroupRecvd2
 
std::vector< std::vector< std::vector< std::vector< double > > > > mappedGroupRecvd1
 
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > send_buf_size
 
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > recv_buf_size
 
std::vector< std::vector< std::vector< std::vector< double > > > > rhoRecvd
 
std::vector< std::vector< std::vector< std::vector< double > > > > gradRhoRecvd
 
std::vector< std::vector< std::vector< std::vector< dftfe::Int > > > > groupOffsets
 
dftfe::uInt totPoints
 
std::vector< int > mpi_scatter_offset
 
std::vector< int > send_scatter_size
 
std::vector< int > recv_size
 
std::vector< int > mpi_scatterGrad_offset
 
std::vector< int > send_scatterGrad_size
 
std::vector< int > mpi_offsets0
 
std::vector< int > mpi_offsets1
 
std::vector< int > mpiGrad_offsets1
 
std::vector< dftfe::IntrecvdData0
 
std::vector< dftfe::IntrecvdData2
 
std::vector< dftfe::IntrecvdData3
 
std::vector< std::vector< double > > recvdData1
 
std::vector< int > recv_size0
 
std::vector< int > recv_size1
 
std::vector< int > recvGrad_size1
 

Friends

class dftClass< FEOrder, FEOrderElectro, memorySpace >
 

Detailed Description

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
class dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >

density symmetrization based on irreducible Brillouin zone calculation, only relevant for calculations using point group symmetries

Author
Krishnendu Ghosh, krisg.nosp@m.@umi.nosp@m.ch.ed.nosp@m.u

Constructor & Destructor Documentation

◆ symmetryClass()

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::symmetryClass ( dftClass< FEOrder, FEOrderElectro, memorySpace > * _dftPtr,
const MPI_Comm & mpi_comm_parent,
const MPI_Comm & mpi_comm_domain,
const MPI_Comm & _interpoolcomm )

symmetryClass constructor

Member Function Documentation

◆ clearMaps()

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
void dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::clearMaps ( )

Wipes out mapping tables between relaxation steps

◆ computeAndSymmetrize_rhoOut()

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
void dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::computeAndSymmetrize_rhoOut ( )

computes total density by summing over all the symmetry transformed points

◆ computeLocalrhoOut()

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
void dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::computeLocalrhoOut ( )

computes density at all the transformed points received from other processors and scatters the density back to the corresponding processors

◆ crys2cart()

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dealii::Point< 3 > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::crys2cart ( dealii::Point< 3 > p,
dftfe::Int flag )

quick snippet to go back and forth between crystal and cartesian coordinates

Parameters
[in]ppoint that is to be transformed
[in]flagtype of coordinate transformation, 1 takes crys. to cart. -1 takes cart. to crys.

◆ initSymmetry()

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
void dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::initSymmetry ( )

Main driver routine to generate and communicate mapping tables

Friends And Related Symbol Documentation

◆ dftClass< FEOrder, FEOrderElectro, memorySpace >

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
friend class dftClass< FEOrder, FEOrderElectro, memorySpace >
friend

Member Data Documentation

◆ cellMapTable

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::map< dealii::CellId, std::vector<std::tuple<dftfe::Int, std::vector<double>, dftfe::Int> > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::cellMapTable
private

Data members required for storing mapping tables locally

◆ computing_timer

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dealii::TimerOutput dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::computing_timer
private

compute-time logger

◆ d_mpiCommParent

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
const MPI_Comm dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::d_mpiCommParent
private

parallel objects

◆ dealIICellId

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::map<dftfe::Int, typename dealii::DoFHandler<3>::active_cell_iterator> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::dealIICellId
private

◆ dftPtr

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dftClass<FEOrder, FEOrderElectro, memorySpace>* dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::dftPtr
private

◆ FE

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dealii::FE_Q<3> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::FE
private

dealii based FE data structres

◆ globalCellId

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::map<dealii::CellId, dftfe::Int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::globalCellId
private

◆ gradRhoRecvd

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<double> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::gradRhoRecvd
private

◆ groupOffsets

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<dftfe::Int> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::groupOffsets
private

◆ interpoolcomm

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
const MPI_Comm dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::interpoolcomm
private

◆ mappedGroup

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector< std::vector<std::vector<std::tuple<dftfe::Int, dftfe::Int, dftfe::Int> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mappedGroup
private

◆ mappedGroupRecvd0

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<dftfe::Int> > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mappedGroupRecvd0
private

◆ mappedGroupRecvd1

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<double> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mappedGroupRecvd1
private

◆ mappedGroupRecvd2

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<dftfe::Int> > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mappedGroupRecvd2
private

◆ mappedGroupSend0

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<dftfe::Int> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mappedGroupSend0
private

Data members required for communicating mapping tables

◆ mappedGroupSend1

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<std::vector<double> > > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mappedGroupSend1
private

◆ mappedGroupSend2

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<dftfe::Int> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mappedGroupSend2
private

◆ mpi_communicator

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
const MPI_Comm dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mpi_communicator
private

◆ mpi_offsets0

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mpi_offsets0
private

◆ mpi_offsets1

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mpi_offsets1
private

◆ mpi_scatter_offset

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mpi_scatter_offset
private

◆ mpi_scatterGrad_offset

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mpi_scatterGrad_offset
private

◆ mpiGrad_offsets1

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::mpiGrad_offsets1
private

◆ n_mpi_processes

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
const dftfe::uInt dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::n_mpi_processes
private

◆ numSymm

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dftfe::uInt dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::numSymm
private

◆ numSymmUnderGroup

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<dftfe::Int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::numSymmUnderGroup
private

◆ ownerProcGlobal

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<dftfe::Int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::ownerProcGlobal
private

◆ pcout

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dealii::ConditionalOStream dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::pcout
private

◆ recv_buf_size

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<dftfe::Int> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recv_buf_size
private

◆ recv_size

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recv_size
private

◆ recv_size0

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recv_size0
private

◆ recv_size1

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recv_size1
private

◆ recvdData0

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<dftfe::Int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recvdData0
private

◆ recvdData1

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<double> > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recvdData1
private

◆ recvdData2

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<dftfe::Int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recvdData2
private

◆ recvdData3

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<dftfe::Int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recvdData3
private

◆ recvGrad_size1

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::recvGrad_size1
private

◆ rhoRecvd

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<double> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::rhoRecvd
private

◆ send_buf_size

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<std::vector<dftfe::Int> > > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::send_buf_size
private

◆ send_scatter_size

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::send_scatter_size
private

◆ send_scatterGrad_size

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<int> dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::send_scatterGrad_size
private

◆ symmMat

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<std::vector<double> > > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::symmMat
private

Space group symmetry related data

◆ symmUnderGroup

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
std::vector<std::vector<dftfe::Int> > dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::symmUnderGroup
private

◆ this_mpi_process

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
const dftfe::uInt dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::this_mpi_process
private

◆ totPoints

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
dftfe::uInt dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::totPoints
private

Data sizes and offsets required for MPI scattering and gathering of mapping tables and symmetrized density They have to be data members since the same sizes and offsets are used in both communication mapping tables and symmetrized density

◆ translation

template<dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro, dftfe::utils::MemorySpace memorySpace>
double dftfe::symmetryClass< FEOrder, FEOrderElectro, memorySpace >::translation[500][3]
private

The documentation for this class was generated from the following file: