m_esymm/esymm_free_0D [ Functions ]

978 subroutine esymm_free_0D(esymm)
979 980 981 !This section has been created automatically by the script Abilint (TD).
982 !Do not modify the following lines by hand.
983 #undef ABI_FUNC
984 #define ABI_FUNC 'esymm_free_0D'
985 !End of the abilint section
986 987 implicit none
988 989 !Arguments ------------------------------------
990 !scalars
991 type(esymm_t),intent(inout) :: esymm
992 993 !Local variables ------------------------------
994 !scalars
995 integer :: ii
996 ! *************************************************************************
997 998 !@esymm_t 999 if (allocated(esymm%g0)) then
1000 ABI_FREE(esymm%g0)
1001 end if
1002 if (allocated(esymm%tr_g0)) then
1003 ABI_FREE(esymm%tr_g0)
1004 end if
1005 if (allocated(esymm%nelements)) then
1006 ABI_FREE(esymm%nelements)
1007 end if
1008 if (allocated(esymm%sgk2symrec)) then
1009 ABI_FREE(esymm%sgk2symrec)
1010 end if
1011 if (allocated(esymm%tr_sgk2symrec)) then
1012 ABI_FREE(esymm%tr_sgk2symrec)
1013 end if
1014 if (allocated(esymm%herring_test)) then
1015 ABI_FREE(esymm%herring_test)
1016 end if
1017 if (allocated(esymm%b2irrep)) then
1018 ABI_FREE(esymm%b2irrep)
1019 end if
1020 if (allocated(esymm%degs_bounds)) then
1021 ABI_FREE(esymm%degs_bounds)
1022 end if
1023 if (allocated(esymm%degs_dim)) then
1024 ABI_FREE(esymm%degs_dim)
1025 end if
1026 1027 if (allocated(esymm%irrep2b)) then
1028 do ii=LBOUND(esymm%irrep2b,DIM=1),UBOUND(esymm%irrep2b,DIM=1)
1029 ABI_FREE(esymm%irrep2b(ii)%value)
1030 end do
1031 ABI_DT_FREE(esymm%irrep2b)
1032 end if
1033 1034 if (allocated(esymm%Calc_irreps)) then
1035 call irrep_free(esymm%Calc_irreps)
1036 end if
1037 1038 if (allocated(esymm%trCalc_irreps)) then
1039 call irrep_free(esymm%trCalc_irreps)
1040 end if
1041 1042 if (allocated(esymm%Ref_irreps)) then
1043 call irrep_free(esymm%Ref_irreps)
1044 end if
1045 1046 end subroutine esymm_free_0D

m_esymm/esymm_init [ Functions ]

Initialize a esymm_t datatype containing data and parameters
needed to analyze the irreducible representations at a particular k-point....

INPUTS

kpt_in(3)=The k-point where the classification of bands is required.
Cryst<crystal_t>=Datatype describing the unit cell and its symmetries.
nspinor=number of spinorial components
nsppol=number of independent polarizations
first_ib=Index of the first band.
nbnds=Number of bands for this k-point.
ene_k(nbnds)=energies for this k-point. ene_k(1) corresponds to band first_ib.
EDIFF_TOL=tolerance below which two states are considered to belong to the same irreducible representation

OUTPUT

esymm<esymm_t>= Initialized data type gathering information of the small group
of the k-point as well as the irreducible representations.

NOTES

The present implementation does NOT work at zone border if the little group of
kpt_in is non-symmorphic namely thers is at lest a symmetry operation with non-zero tnons.

m_esymm/esymm_t [ Types ]

Dataype gathering data and tables needed to analize the symmetries
of electronic states at a given k-point via Group Theory.

SOURCE

73 type,public :: esymm_t 74 75 integer :: nspinor
76 ! Number of spinorial components.
77 78 integer :: first_ib
79 ! Index of the first treated band.
80 81 integer :: nbnds
82 ! Number of bands for this k-point and spin.
83 84 integer :: nclass
85 ! The number of classes in the group of k.
86 87 integer :: nsym_gk
88 ! Number of symmetries in the group of k. Namely that the set of symmetries such that Sk = k +G0.
89 90 integer :: nsym_trgk
91 ! Number of symmetries in the extended group of k. Namely that the set of symmetries such that -Sk = k + G0.
92 93 integer :: err_status = ESYM_NOERROR
94 ! Flag signaling if the classification algorithm succeed or not.
95 96 real(dp) :: tol_deg
97 ! Energy tolerance below which two states are considered degenerate.
98 99 logical :: can_use_tr
100 ! .TRUE. if time-reversal can be used
101 102 logical :: only_trace
103 ! if .TRUE. only the trace of a single matrix per class is calculated
104 ! this is the standard way used to analyze bands symmetries. If .FALSE.
105 ! the full matrices of the irreducible representations are calculated and stored
106 107 logical :: has_spatial_inv
108 ! .TRUE. if the inversion belongs to the space group
109 110 logical :: nonsymmorphic_at_zoneborder
111 ! if .TRUE. analysis cannot be performed since kpt is
112 ! at border zone and non-zero fractional translations are present in the space group
113 114 logical :: has_chtabs
115 ! True if Ref_irreps and character tables are available (tables are initialized either
116 ! from point group irreps or from an external database downloaded from the Bilbao server)
117 118 real(dp) :: kpt(3)
119 ! The crystalline momentum of the wavefunctions in reduced coordinates.
120 121 character(len=500) :: err_msg="None"
122 123 integer,allocatable :: g0(:,:)
124 ! g0(3,nsym_gk)
125 ! The umklapp g0 vector associated to each little group operation.
126 127 integer,allocatable :: tr_g0(:,:)
128 ! tr_g0(3,nsym_trgk)
129 ! The umklapp g0 vector associated to each little group operation.
130 131 integer :: ndegs
132 ! Number of degenerate states.
133 134 integer,allocatable :: nelements(:)
135 ! nelements(nclass)
136 ! Number of symmetry operations in each class.
137 138 integer,allocatable :: sgk2symrec(:)
139 ! sgk2symrec(nsym_gk)
140 ! Mapping between the symmetries of the group of k and the symrec(l) array.
141 ! The symmetries of the little group are always packed in classes to facilitate
142 ! the calculation of the character of the irrep. Abinit symmetries are randomly ordered.
143 144 integer,allocatable :: tr_sgk2symrec(:)
145 ! trsgk2symrec(nsym_trgk)
146 ! Mapping between the symmetries of the group of k and the symrec(l) array.
147 ! The symmetries of the little group are always packed in classes to facilitate
148 ! the calculation of the character of the irrep. Abinit symmetries are randomly ordered.
149 150 integer,allocatable :: herring_test(:)
151 ! herring_test(nclass)
152 ! The result of Herring test for each irreducible representantion of the group of k.
153 ! Possible values are: +1, 0, -1
154 155 integer,allocatable :: b2irrep(:)
156 ! b2irrep(nbnds)
157 ! For each band, it gives the index of the irreducible representation in Ref_irreps.
158 159 type(coeffi1_type),allocatable :: irrep2b(:)
160 ! irrep2b(0:nclass)%value(:)
161 ! Ragged arrays with the mapping between the set of irreducible representation and the band indices.
162 ! irrep2b(irp)%value(:) gives the indeces of the states belonging to irrep irp, irp=1,nclass
163 ! irrep2b(0)%value(:) stores the indeces of the states that have not been classified due to
164 ! the presence of an accidental degeneracy.
165 166 integer,allocatable :: degs_bounds(:,:)
167 ! degs_bounds(2,ndegs)
168 ! degs_bounds(1,idg)= first band index of the degenerate set idg=1,ndegs
169 ! degs_bounds(2,idg)= final band index of the degenerate set idg=1,ndegs
170 171 integer,allocatable :: degs_dim(:)
172 ! degs_dim(ndegs)
173 ! Number of states in each degenerate subspace. Cannot be larger that nclass provided
174 ! that no accidental degeneracy occurs.
175 176 !% integer,allocatable :: class_ids(:,:)
177 ! class_ids(2,nclass)
178 ! (1,icl) = index of the first symmetry of class icl
179 ! (2,icl) = index of the last symmetry of class icl
180 ! Note that symmetries in sym are packed in classes.
181 182 type(irrep_t),allocatable :: Calc_irreps(:)
183 ! Calc_irreps(ndegs)
184 ! The representations of the little group of k calculated from the wavefunctions. <\phi_nk|R_t|\phi_mk>
185 ! where R_t belong to the little group of k.
186 ! They represent an unitary irreducible representation provided that no accidental degeneracy occurs.
187 188 type(irrep_t),allocatable :: trCalc_irreps(:)
189 ! trCalc_irreps(ndegs)
190 ! The representations of the little group of k calculated from the wavefunctions. <\phi_nk|R_t|\phi_mk>
191 ! where R_t belong to the little group of k.
192 ! They represent an unitary irreducible representation provided that no accidental degeneracy occurs.
193 194 type(irrep_t),allocatable :: Ref_irreps(:)
195 ! Irreps(nclass)
196 ! Reference irreducible representations of the group of k derived from the point group
197 ! or from the external database downloaded from the Bilbao web site.
198 199 end type esymm_t200 201 public :: esymm_init ! Initialize the object
202 public :: esymm_print ! Print info
203 public :: esymm_free ! Free memory204 public :: esymm_finalize ! Finalize the object
205 public :: esymm_symmetrize_mels ! Symmetrize given matrix elements
206 public :: esymm_failed ! True if symmetry analysis failed.