Branch data Line data Source code
1 : : !!****m* ABINIT/m_symsg
2 : : !! NAME
3 : : !! m_symsg
4 : : !!
5 : : !! FUNCTION
6 : : !!
7 : : !!
8 : : !! COPYRIGHT
9 : : !! Copyright (C) 1999-2026 ABINIT group (RC,XG)
10 : : !! This file is distributed under the terms of the
11 : : !! GNU General Public License, see ~abinit/COPYING
12 : : !! or http://www.gnu.org/copyleft/gpl.txt .
13 : : !!
14 : : !! SOURCE
15 : :
16 : : #if defined HAVE_CONFIG_H
17 : : #include "config.h"
18 : : #endif
19 : :
20 : : #include "abi_common.h"
21 : :
22 : : module m_symsg
23 : :
24 : : use defs_basis
25 : : use m_errors
26 : : use m_abicore
27 : :
28 : : use m_time, only : timab
29 : : use m_spgdata, only : spgdata
30 : :
31 : : implicit none
32 : :
33 : : private
34 : : !!***
35 : :
36 : : public :: symsgcube
37 : : public :: symsghexa
38 : : public :: symsgmono
39 : : public :: symsgortho
40 : : public :: symsgtetra
41 : : !!***
42 : :
43 : : contains
44 : : !!***
45 : :
46 : : !!****f* m_symsg/symsgcube
47 : : !! NAME
48 : : !! symsgcube
49 : : !!
50 : : !! FUNCTION
51 : : !! Generate all the symmetry operations starting from the space group symbol
52 : : !! for the cubic groups (according to the International Tables of Crystallography, 1983)
53 : : !!
54 : : !! INPUTS
55 : : !! msym = default number of symmetries
56 : : !! shubnikov= magnetic type of the space group to be generated
57 : : !! spgaxor = the possible orientation of the axes system
58 : : !! spgorig = the origin choice (1 or 2) for the axes system
59 : : !! spgroup = the numeric symbol of the space groups
60 : : !! spgroupma = number of the magnetic space group
61 : : !!
62 : : !! OUTPUT
63 : : !! nsym = the number of symmetry operations
64 : : !! symafm(nsym)=(anti)ferromagnetic part of symmetry operations
65 : : !! symrel(3,3,nsym) = 3D matrix containg symmetry operations
66 : : !! tnons(3,nsym) = 2D matrix containing translations associated
67 : : !!
68 : : !! SOURCE
69 : :
70 : 118 : subroutine symsgcube(msym,nsym,shubnikov,spgaxor,spgorig,spgroup,spgroupma,symafm,symrel,tnons)
71 : :
72 : : !Arguments ------------------------------------
73 : : !scalars
74 : : integer,intent(in) :: msym,shubnikov,spgaxor,spgorig,spgroup,spgroupma
75 : : integer,intent(inout) :: nsym !vz_i
76 : : !arrays
77 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym) !vz_i
78 : : real(dp),intent(out) :: tnons(3,msym)
79 : :
80 : : !Local variables -----------------------------
81 : : !scalars
82 : : integer :: ii,nogen,sporder
83 : : character(len=1) :: brvsb
84 : : character(len=15) :: intsb,ptintsb,ptschsb,schsb
85 : : character(len=35) :: intsbl
86 : : !arrays
87 : : integer :: gen1(3,3),gen2(3,3),gen3(3,3),gen4(3,3),gen5(3,3),gen6(3,3)
88 : : integer :: gen7(3,3),gen8(3,3),gen9(3,3),genmmm(3,3),genmmp(3,3),genmpm(3,3)
89 : : integer :: genmpp(3,3),genpmm(3,3),genpmp(3,3),genppm(3,3),genrot(3,3)
90 : : integer :: genswm(3,3),genswp(3,3)
91 : : real(dp) :: tsec(2)
92 : :
93 : : !*************************************************************************
94 : :
95 : : !DEBUG
96 : : !write(std_out,*) ' symsgcube : enter with spgroup ',spgroup,' and ',' origin choice ',spgorig
97 : : !write(std_out,*) ' msym,nsym=',msym,nsym
98 : : !ENDDEBUG
99 : :
100 : :
101 : : !The identity operation belongs to all space groups
102 [ + + + + ]: 1534 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
103 : :
104 : : !Initialize the associated translations matrix to 0
105 [ + + ]: 45430 : do ii=1,msym
106 [ + + ]: 181366 : tnons(:,ii)= 0.0d0
107 : : end do
108 : 118 : nogen=0
109 : :
110 : : !Predefine some generators
111 : 118 : genmpp(:,:)=0 ; genmpp(1,1)=-1 ; genmpp(2,2)= 1 ; genmpp(3,3)= 1
112 : 118 : genpmp(:,:)=0 ; genpmp(1,1)= 1 ; genpmp(2,2)=-1 ; genpmp(3,3)= 1
113 : 118 : genppm(:,:)=0 ; genppm(1,1)= 1 ; genppm(2,2)= 1 ; genppm(3,3)=-1
114 : 118 : genpmm(:,:)=0 ; genpmm(1,1)= 1 ; genpmm(2,2)=-1 ; genpmm(3,3)=-1
115 : 118 : genmpm(:,:)=0 ; genmpm(1,1)=-1 ; genmpm(2,2)= 1 ; genmpm(3,3)=-1
116 : 118 : genmmp(:,:)=0 ; genmmp(1,1)=-1 ; genmmp(2,2)=-1 ; genmmp(3,3)= 1
117 : 118 : genmmm(:,:)=0 ; genmmm(1,1)=-1 ; genmmm(2,2)=-1 ; genmmm(3,3)=-1
118 : 118 : genrot(:,:)=0 ; genrot(1,3)=1 ; genrot(3,2)=1 ; genrot(2,1)=1 !reshape((/0,0,1,1,0,0,0,1,0/),(/3,3/),(/0,0/),(/2,1/) )
119 : 118 : genswm(:,:)=0 ; genswm(2,1)=1 ; genswm(1,2)=1 ; genswm(3,3)=-1 !reshape((/0,1,0,1,0,0,0,0,-1/),(/3,3/),(/0,0/),(/2,1/) )
120 : 118 : genswp(:,:)=0 ; genswp(2,1)=1 ; genswp(1,2)=1 ; genswp(3,3)=1 !reshape((/0,1,0,1,0,0,0,0,1/),(/3,3/),(/0,0/),(/2,1/) )
121 : :
122 : : !Because of problems with the IBM compiler, that does not like reshape
123 : : !operations, define 9 basic matrices
124 : 118 : gen1(:,:)=0 ; gen1(1,1)=1
125 : 118 : gen2(:,:)=0 ; gen2(1,2)=1
126 : 118 : gen3(:,:)=0 ; gen3(1,3)=1
127 : 118 : gen4(:,:)=0 ; gen4(2,1)=1
128 : 118 : gen5(:,:)=0 ; gen5(2,2)=1
129 : 118 : gen6(:,:)=0 ; gen6(2,3)=1
130 : 118 : gen7(:,:)=0 ; gen7(3,1)=1
131 : 118 : gen8(:,:)=0 ; gen8(3,2)=1
132 : 118 : gen9(:,:)=0 ; gen9(3,3)=1
133 : :
134 : : !Default non-magnetic behaviour
135 [ + + ]: 45430 : symafm(1:msym)=1
136 : :
137 : : !*************************************************************************
138 : :
139 : : !Treat CUBIC groups
140 : :
141 [ + - ]: 118 : if(195<=spgroup .and. spgroup<=230)then
142 : :
143 : : select case(spgroup)
144 : : case (195,196,197) !P23, F23, I23
145 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
146 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
147 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
148 [ + + + + ]: 65 : symrel(:,:,5) = genpmm(:,:)
149 : 5 : nogen=5
150 : : case (200,202,204) !PmB3, FmB3, ImB3
151 [ + + + + ]: 104 : symrel(:,:,2) = genrot(:,:)
152 [ + + + + ]: 104 : symrel(:,:,3) = genmmp(:,:)
153 [ + + + + ]: 104 : symrel(:,:,4) = genmpm(:,:)
154 : 8 : nogen=4
155 : : case (198,199) !P213, I213
156 [ + + + + ]: 39 : symrel(:,:,2) = genrot(:,:)
157 [ + + + + ]: 39 : symrel(:,:,3) = genmmp(:,:)
158 [ + + ]: 12 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
159 [ + + + + ]: 39 : symrel(:,:,4) = genmpm(:,:)
160 [ + + ]: 12 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
161 [ + + + + ]: 39 : symrel(:,:,5) = genpmm(:,:)
162 [ + + ]: 12 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/)
163 [ + + + + ]: 39 : symrel(:,:,6) = gen3(:,:)-gen4(:,:)-gen8(:,:)
164 [ + + ]: 12 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
165 [ + + + + ]: 39 : symrel(:,:,7) = -gen3(:,:)-gen4(:,:)+gen8(:,:)
166 [ + + ]: 12 : tnons(:,7)=(/0.5d0,0.d0,0.5d0/)
167 [ + + + + ]: 39 : symrel(:,:,8) = -gen3(:,:)+gen4(:,:)-gen8(:,:)
168 [ + + ]: 12 : tnons(:,8)=(/0.d0,0.5d0,0.5d0/)
169 [ + + + + ]: 39 : symrel(:,:,10) = -gen2(:,:)+gen6(:,:)-gen7(:,:)
170 [ + + ]: 12 : tnons(:,10)=(/0.d0,0.5d0,0.5d0/)
171 [ + + + + ]: 39 : symrel(:,:,11) = gen2(:,:)-gen6(:,:)-gen7(:,:)
172 [ + + ]: 12 : tnons(:,11)=(/0.5d0,0.5d0,0.0d0/)
173 [ + + + + ]: 39 : symrel(:,:,12) = -gen2(:,:)-gen6(:,:)+gen7(:,:)
174 [ + + ]: 12 : tnons(:,12)=(/0.5d0,0.d0,0.5d0/)
175 [ + + + + ]: 39 : symrel(:,:,9) = gen2(:,:)+gen6(:,:)+gen7(:,:)
176 : : case (201) !Pn-3
177 [ + + ]: 6 : if (spgorig==1) then
178 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
179 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
180 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
181 [ + + + + ]: 65 : symrel(:,:,5) = genmmm(:,:)
182 [ + + ]: 20 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/)
183 : 5 : nogen=5
184 [ + + ]: 5 : if(shubnikov==3)symafm(5)=-1
185 : 5 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
186 : : else
187 [ + + + + ]: 13 : symrel(:,:,2) = genrot(:,:)
188 [ + + + + ]: 13 : symrel(:,:,3) = genmmp(:,:)
189 [ + + ]: 4 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
190 [ + + + + ]: 13 : symrel(:,:,4) = genmpm(:,:)
191 [ + + ]: 4 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
192 [ + + + + ]: 13 : symrel(:,:,5) = genpmm(:,:)
193 [ + + ]: 4 : tnons(:,5)=(/0.d0,0.5d0,0.5d0/)
194 [ + + + + ]: 13 : symrel(:,:,6) = gen3(:,:)-gen4(:,:)-gen8(:,:)
195 [ + + ]: 4 : tnons(:,6)=(/0.d0,0.5d0,0.5d0/)
196 [ + + + + ]: 13 : symrel(:,:,7) = -gen3(:,:)-gen4(:,:)+gen8(:,:)
197 [ + + ]: 4 : tnons(:,7)=(/0.5d0,0.5d0,0.d0/)
198 [ + + + + ]: 13 : symrel(:,:,8) = -gen3(:,:)+gen4(:,:)-gen8(:,:)
199 [ + + ]: 4 : tnons(:,8)=(/0.5d0,0.d0,0.5d0/)
200 [ + + + + ]: 13 : symrel(:,:,10) = -gen2(:,:)+gen6(:,:)-gen7(:,:)
201 [ + + ]: 4 : tnons(:,10)=(/0.5d0,0.d0,0.5d0/)
202 [ + + + + ]: 13 : symrel(:,:,11) = gen2(:,:)-gen6(:,:)-gen7(:,:)
203 [ + + ]: 4 : tnons(:,11)=(/0.d0,0.5d0,0.5d0/)
204 [ + + + + ]: 13 : symrel(:,:,12) = -gen2(:,:)-gen6(:,:)+gen7(:,:)
205 [ + + ]: 4 : tnons(:,12)=(/0.5d0,0.5d0,0.d0/)
206 [ + + + + ]: 13 : symrel(:,:,9) = gen2(:,:)+gen6(:,:)+gen7(:,:)
207 [ + + ]: 13 : do ii=1,12
208 [ + + + + ]: 156 : symrel(:,:,ii+12)= - symrel(:,:,ii)
209 [ + + ]: 48 : tnons(:,ii+12)=tnons(:,ii)
210 [ - + ]: 13 : if(shubnikov==3)symafm(ii+12)=-1
211 : : end do
212 : : end if
213 : 6 : nogen=0
214 : : case (205,206) !Pa-3,Ia-3
215 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
216 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
217 [ + + ]: 20 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
218 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
219 [ + + ]: 20 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
220 [ + + + + ]: 65 : symrel(:,:,5) = genpmm(:,:)
221 [ + + ]: 20 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/)
222 [ + + + + ]: 65 : symrel(:,:,6) = gen3(:,:)-gen4(:,:)-gen8(:,:)
223 [ + + ]: 20 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
224 [ + + + + ]: 65 : symrel(:,:,7) = -gen3(:,:)-gen4(:,:)+gen8(:,:)
225 [ + + ]: 20 : tnons(:,7)=(/0.5d0,0.d0,0.5d0/)
226 [ + + + + ]: 65 : symrel(:,:,8) = -gen3(:,:)+gen4(:,:)-gen8(:,:)
227 [ + + ]: 20 : tnons(:,8)=(/0.0d0,0.5d0,0.5d0/)
228 [ + + + + ]: 65 : symrel(:,:,9) = gen2(:,:)+gen6(:,:)+gen7(:,:)
229 [ + + + + ]: 65 : symrel(:,:,10) = -gen2(:,:)+gen6(:,:)-gen7(:,:)
230 [ + + ]: 20 : tnons(:,10)=(/0.d0,0.5d0,0.5d0/)
231 [ + + + + ]: 65 : symrel(:,:,11) = gen2(:,:)-gen6(:,:)-gen7(:,:)
232 [ + + ]: 20 : tnons(:,11)=(/0.5d0,0.5d0,0.d0/)
233 [ + + + + ]: 65 : symrel(:,:,12) = -gen2(:,:)-gen6(:,:)+gen7(:,:)
234 [ + + ]: 20 : tnons(:,12)=(/0.5d0,0.d0,0.5d0/)
235 : 3 : nogen=0
236 : : case (203) !FdB3
237 [ - + ]: 3 : if (spgorig==1) then
238 [ + + + + ]: 39 : symrel(:,:,2) = genrot(:,:)
239 [ + + + + ]: 39 : symrel(:,:,3) = genmmp(:,:)
240 : 3 : nogen=3
241 : 3 : nsym=12
242 : 3 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
243 [ + + ]: 39 : do ii=1,12
244 [ + + + + ]: 468 : symrel(:,:,ii+12) = - symrel(:,:,ii)
245 [ + + ]: 144 : tnons(:,ii+12)=(/0.25d0,0.25d0,0.25d0/)
246 [ + + ]: 39 : if(shubnikov==3)symafm(ii+12)=-1
247 : : end do
248 : : nsym=24
249 : : nogen=0
250 : : else
251 [ # # # # ]: 0 : symrel(:,:,2) = genrot(:,:)
252 [ # # # # ]: 0 : symrel(:,:,3) = genmmp(:,:)
253 [ # # ]: 0 : tnons(:,3)=(/0.25d0,0.25d0,0.d0/)
254 [ # # # # ]: 0 : symrel(:,:,4) = genmpm(:,:)
255 [ # # ]: 0 : tnons(:,4)=(/0.25d0,0.d0,0.25d0/)
256 [ # # # # ]: 0 : symrel(:,:,5) = genpmm(:,:)
257 [ # # ]: 0 : tnons(:,5)=(/0.d0,0.25d0,0.25d0/)
258 [ # # # # ]: 0 : symrel(:,:,6) = gen3(:,:)-gen4(:,:)-gen8(:,:)
259 [ # # ]: 0 : tnons(:,6)=(/0.d0,0.25d0,0.25d0/)
260 [ # # # # ]: 0 : symrel(:,:,7) = -gen3(:,:)-gen4(:,:)+gen8(:,:)
261 [ # # ]: 0 : tnons(:,7)=(/0.25d0,0.25d0,0.d0/)
262 [ # # # # ]: 0 : symrel(:,:,8) = -gen3(:,:)+gen4(:,:)-gen8(:,:)
263 [ # # ]: 0 : tnons(:,8)=(/0.25d0,0.d0,0.25d0/)
264 [ # # # # ]: 0 : symrel(:,:,10) = -gen2(:,:)+gen6(:,:)-gen7(:,:)
265 [ # # ]: 0 : tnons(:,10)=(/0.25d0,0.d0,0.25d0/)
266 [ # # # # ]: 0 : symrel(:,:,11) = gen2(:,:)-gen6(:,:)-gen7(:,:)
267 [ # # ]: 0 : tnons(:,11)=(/0.d0,0.25d0,0.25d0/)
268 [ # # # # ]: 0 : symrel(:,:,12) = -gen2(:,:)-gen6(:,:)+gen7(:,:)
269 [ # # ]: 0 : tnons(:,12)=(/0.25d0,0.25d0,0.d0/)
270 [ # # # # ]: 0 : symrel(:,:,9) = gen2(:,:)+gen6(:,:)+gen7(:,:)
271 [ # # ]: 0 : do ii=1,12
272 [ # # # # ]: 0 : symrel(:,:,ii+12) = - symrel(:,:,ii)
273 [ # # ]: 0 : tnons(:,ii+12)=tnons(:,ii)
274 [ # # ]: 0 : if(shubnikov==3)symafm(ii+12)=-1
275 : : end do
276 : : end if
277 : 3 : nsym=24
278 : 3 : nogen=0
279 : : case (207,209,211) !P432, F432, I432, PmB3m, FmB3m, ImB3m
280 [ + + + + ]: 104 : symrel(:,:,2) = genrot(:,:)
281 [ + + + + ]: 104 : symrel(:,:,3) = genmmp(:,:)
282 [ + + + + ]: 104 : symrel(:,:,4) = genmpm(:,:)
283 [ + + + + ]: 104 : symrel(:,:,5) = genswm(:,:)
284 [ + + ]: 8 : if(shubnikov==3)symafm(5)=-1
285 : 8 : nogen=5
286 : : case (208) !P4232
287 [ + + + + ]: 39 : symrel(:,:,2) = genrot(:,:)
288 [ + + + + ]: 39 : symrel(:,:,3) = genmmp(:,:)
289 [ + + + + ]: 39 : symrel(:,:,4) = genmpm(:,:)
290 [ + + + + ]: 39 : symrel(:,:,5) = genswm(:,:)
291 [ + + ]: 12 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/)
292 [ + + ]: 3 : if(shubnikov==3)symafm(5)=-1
293 : 3 : nogen=5
294 : : case (210) !F4132
295 [ + + + + ]: 39 : symrel(:,:,2) = genrot(:,:)
296 [ + + + + ]: 39 : symrel(:,:,3) = genmmp(:,:)
297 [ + + ]: 12 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
298 [ + + + + ]: 39 : symrel(:,:,4) = genmpm(:,:)
299 [ + + ]: 12 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
300 [ + + + + ]: 39 : symrel(:,:,5) = genswm(:,:)
301 [ + + ]: 12 : tnons(:,5)=(/0.75d0,0.25d0,0.75d0/)
302 [ + + ]: 3 : if(shubnikov==3)symafm(5)=-1
303 : 3 : nogen=5
304 : : case (212) !P4332
305 [ + + + + ]: 39 : symrel(:,:,2) = genrot(:,:)
306 [ + + + + ]: 39 : symrel(:,:,3) = genmmp(:,:)
307 [ + + ]: 12 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
308 [ + + + + ]: 39 : symrel(:,:,4) = genmpm(:,:)
309 [ + + ]: 12 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
310 [ + + + + ]: 39 : symrel(:,:,5) = genswm(:,:)
311 [ + + ]: 12 : tnons(:,5)=(/0.25d0,0.75d0,0.75d0/)
312 [ + + ]: 3 : if(shubnikov==3)symafm(5)=-1
313 : 3 : nogen=5
314 : : case (213,214) !P4132, I4132
315 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
316 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
317 [ + + ]: 20 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
318 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
319 [ + + ]: 20 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
320 [ + + + + ]: 65 : symrel(:,:,5) = genswm(:,:)
321 [ + + ]: 20 : tnons(:,5)=(/0.75d0,0.25d0,0.25d0/)
322 [ + + ]: 5 : if(shubnikov==3)symafm(5)=-1
323 : 5 : nogen=5
324 : : case (215,216,217) !PB43m, FB43m, IB43m
325 [ + + + + ]: 104 : symrel(:,:,2) = genrot(:,:)
326 [ + + + + ]: 104 : symrel(:,:,3) = genmmp(:,:)
327 [ + + + + ]: 104 : symrel(:,:,4) = genmpm(:,:)
328 [ + + + + ]: 104 : symrel(:,:,5) = genswp(:,:)
329 [ + + ]: 8 : if(shubnikov==3)symafm(5)=-1
330 : 8 : nogen=5
331 : : case (218,219) !PB43n, FB343c
332 [ + + + + ]: 78 : symrel(:,:,2) = genrot(:,:)
333 [ + + + + ]: 78 : symrel(:,:,3) = genmmp(:,:)
334 [ + + + + ]: 78 : symrel(:,:,4) = genmpm(:,:)
335 [ + + + + ]: 78 : symrel(:,:,5) = genswp(:,:)
336 [ + + ]: 24 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/)
337 [ + + ]: 6 : if(shubnikov==3)symafm(5)=-1
338 : 6 : nogen=5
339 : : case (220) !IB43d
340 [ + + + + ]: 26 : symrel(:,:,2) = genrot(:,:)
341 [ + + + + ]: 26 : symrel(:,:,3) = genmmp(:,:)
342 [ + + ]: 8 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
343 [ + + + + ]: 26 : symrel(:,:,4) = genmpm(:,:)
344 [ + + ]: 8 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
345 [ + + + + ]: 26 : symrel(:,:,5) = genswp(:,:)
346 [ + + ]: 8 : tnons(:,5)=(/0.25d0,0.25d0,0.25d0/)
347 [ + + ]: 2 : if(shubnikov==3)symafm(5)=-1
348 : 2 : nogen=5
349 : : case (221,225,229) !Pm3m,Fm3m,Im3m
350 [ + + + + ]: 208 : symrel(:,:,2) = genrot(:,:)
351 [ + + + + ]: 208 : symrel(:,:,3) = genmmp(:,:)
352 [ + + + + ]: 208 : symrel(:,:,4) = genmpm(:,:)
353 [ + + + + ]: 208 : symrel(:,:,5) = genswm(:,:)
354 [ + + ]: 16 : if(shubnikov==3)then
355 : : if(spgroupma==94 .or. spgroupma==95 .or. spgroupma==118 .or. &
356 [ + + ]: 9 : & spgroupma==119 .or. spgroupma==142 .or. spgroupma==143 )symafm(5)=-1
357 : : end if
358 : 16 : nogen=5
359 : : case (222) !PnB3n
360 [ - + ]: 5 : if (spgorig==1) then
361 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
362 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
363 [ + + ]: 20 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
364 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
365 [ + + ]: 20 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
366 [ + + + + ]: 65 : symrel(:,:,5) = genswm(:,:)
367 [ + + ]: 20 : tnons(:,5)=(/0.d0,0.d0,0.5d0/)
368 [ + + ]: 5 : if(shubnikov==3)then
369 [ + + ]: 3 : if(spgroupma==100 .or. spgroupma==101)symafm(5)=-1
370 : : end if
371 : 5 : nogen=5
372 : 5 : nsym=24
373 : 5 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
374 [ + + ]: 125 : do ii=1,24
375 [ + + + + ]: 1560 : symrel(:,:,ii+24)=-symrel(:,:,ii)
376 [ + + ]: 480 : tnons(:,ii+24)=tnons(:,ii)
377 [ + + ]: 125 : if(shubnikov==3)then
378 [ + + ]: 72 : if(spgroupma==100 .or. spgroupma==102)symafm(ii+24)=-symafm(ii)
379 [ + + ]: 72 : if(spgroupma==101)symafm(ii+24)=symafm(ii)
380 : : end if
381 : : end do
382 : 5 : nogen=0 ; nsym=48
383 : : else
384 [ # # # # ]: 0 : symrel(:,:,2) = genrot(:,:)
385 [ # # # # ]: 0 : symrel(:,:,3) = genmmp(:,:)
386 [ # # # # ]: 0 : symrel(:,:,4) = genmpm(:,:)
387 [ # # # # ]: 0 : symrel(:,:,5) = genswm(:,:)
388 [ # # ]: 0 : if(shubnikov==3)then
389 [ # # ]: 0 : if(spgroupma==100 .or. spgroupma==101)symafm(5)=-1
390 : : end if
391 : 0 : nogen=5
392 : 0 : nsym=24
393 : 0 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
394 [ # # ]: 0 : do ii=1,24
395 [ # # # # ]: 0 : symrel(:,:,ii+24)=-symrel(:,:,ii)
396 [ # # ]: 0 : tnons(:,ii+24)=(/0.5d0,0.5d0,0.5d0/)
397 [ # # ]: 0 : if(shubnikov==3)then
398 [ # # ]: 0 : if(spgroupma==100 .or. spgroupma==102)symafm(ii+24)=-symafm(ii)
399 [ # # ]: 0 : if(spgroupma==101)symafm(ii+24)=symafm(ii)
400 : : end if
401 : : end do
402 : 0 : nogen=0 ; nsym=48
403 : : end if
404 : : case (223,226) ! PmB3n, FmB3c
405 [ + + + + ]: 130 : symrel(:,:,2) = genrot(:,:)
406 [ + + + + ]: 130 : symrel(:,:,3) = genmmp(:,:)
407 [ + + + + ]: 130 : symrel(:,:,4) = genmpm(:,:)
408 [ + + + + ]: 130 : symrel(:,:,5) = genswm(:,:)
409 [ + + ]: 40 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/)
410 [ + + ]: 10 : if(shubnikov==3)then
411 : : if(spgroupma==106 .or. spgroupma==124 .or. &
412 [ + + + + : 6 : & spgroupma==107 .or. spgroupma==125 )symafm(5)=-1
+ + ]
413 : : end if
414 : 10 : nogen=5
415 : : case (224) !PnB3m
416 [ - + ]: 5 : if (spgorig==1) then
417 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
418 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
419 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
420 [ + + + + ]: 65 : symrel(:,:,5) = genswm(:,:)
421 [ + + ]: 20 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/)
422 [ + + + + ]: 65 : symrel(:,:,6) = genmmm(:,:)
423 [ + + ]: 20 : tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
424 : : else
425 [ # # # # ]: 0 : symrel(:,:,2) = genrot(:,:)
426 [ # # # # ]: 0 : symrel(:,:,3) = genmmp(:,:)
427 [ # # ]: 0 : tnons(:,3)=(/0.5d0,0.5d0,0.0d0/)
428 [ # # # # ]: 0 : symrel(:,:,4) = genmpm(:,:)
429 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.0d0,0.5d0/)
430 [ # # # # ]: 0 : symrel(:,:,5) = genswm(:,:)
431 [ # # ]: 0 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/)
432 [ # # # # ]: 0 : symrel(:,:,6) = genmmm(:,:)
433 : : end if
434 [ + + ]: 5 : if(shubnikov==3)then
435 [ + + ]: 3 : if(spgroupma==112 .or. spgroupma==113)symafm(5)=-1
436 [ + + ]: 3 : if(spgroupma==112 .or. spgroupma==114)symafm(6)=-1
437 : : end if
438 : 5 : nogen=6
439 : : case (227) !FdB3m
440 [ - + ]: 5 : if (spgorig==1) then
441 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
442 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
443 [ + + ]: 20 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
444 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
445 [ + + ]: 20 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
446 [ + + + + ]: 65 : symrel(:,:,5) = genswm(:,:)
447 [ + + ]: 20 : tnons(:,5)=(/0.75d0,0.25d0,0.75d0/)
448 [ + + + + ]: 65 : symrel(:,:,6) = genmmm(:,:)
449 [ + + ]: 20 : tnons(:,6)=(/0.25d0,0.25d0,0.25d0/)
450 : : else
451 [ # # # # ]: 0 : symrel(:,:,2) = genrot(:,:)
452 [ # # # # ]: 0 : symrel(:,:,3) = genmmp(:,:)
453 [ # # ]: 0 : tnons(:,3)=(/0.75d0,0.25d0,0.5d0/)
454 [ # # # # ]: 0 : symrel(:,:,4) = genmpm(:,:)
455 [ # # ]: 0 : tnons(:,4)=(/0.25d0,0.5d0,0.75d0/)
456 [ # # # # ]: 0 : symrel(:,:,5) = genswm(:,:)
457 [ # # ]: 0 : tnons(:,5)=(/0.75d0,0.25d0,0.5d0/)
458 [ # # # # ]: 0 : symrel(:,:,6) = genmmm(:,:)
459 : : end if
460 [ + + ]: 5 : if(shubnikov==3)then
461 [ + + ]: 3 : if(spgroupma==130 .or. spgroupma==131)symafm(5)=-1
462 [ + + ]: 3 : if(spgroupma==130 .or. spgroupma==132)symafm(6)=-1
463 : : end if
464 : 5 : nogen=6
465 : : case (228) !FdB3c
466 [ - + ]: 5 : if (spgorig==1) then
467 [ + + + + ]: 65 : symrel(:,:,2) = genrot(:,:)
468 [ + + + + ]: 65 : symrel(:,:,3) = genmmp(:,:)
469 [ + + ]: 20 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
470 [ + + + + ]: 65 : symrel(:,:,4) = genmpm(:,:)
471 [ + + ]: 20 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
472 [ + + + + ]: 65 : symrel(:,:,5) = genswm(:,:)
473 [ + + ]: 20 : tnons(:,5)=(/0.75d0,0.25d0,0.75d0/)
474 [ + + + + ]: 65 : symrel(:,:,6) = genmmm(:,:)
475 [ + + ]: 20 : tnons(:,6)=(/0.75d0,0.75d0,0.75d0/)
476 : : else
477 [ # # # # ]: 0 : symrel(:,:,2) = genrot(:,:)
478 [ # # # # ]: 0 : symrel(:,:,3) = genmmp(:,:)
479 [ # # ]: 0 : tnons(:,3)=(/0.25d0,0.75d0,0.5d0/)
480 [ # # # # ]: 0 : symrel(:,:,4) = genmpm(:,:)
481 [ # # ]: 0 : tnons(:,4)=(/0.75d0,0.5d0,0.25d0/)
482 [ # # # # ]: 0 : symrel(:,:,5) = genswm(:,:)
483 [ # # ]: 0 : tnons(:,5)=(/0.75d0,0.25d0,0.d0/)
484 [ # # # # ]: 0 : symrel(:,:,6) = genmmm(:,:)
485 : : end if
486 [ + + ]: 5 : if(shubnikov==3)then
487 [ + + ]: 3 : if(spgroupma==136 .or. spgroupma==137)symafm(5)=-1
488 [ + + ]: 3 : if(spgroupma==136 .or. spgroupma==138)symafm(6)=-1
489 : : end if
490 : 5 : nogen=6
491 : : case (230) !IaB3d
492 [ + + + + ]: 52 : symrel(:,:,2) = genrot(:,:)
493 [ + + + + ]: 52 : symrel(:,:,3) = genmmp(:,:)
494 [ + + ]: 16 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
495 [ + + + + ]: 52 : symrel(:,:,4) = genmpm(:,:)
496 [ + + ]: 16 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
497 [ + + + + ]: 52 : symrel(:,:,5) = genswm(:,:)
498 [ + + ]: 16 : tnons(:,5)=(/0.75d0,0.25d0,0.25d0/)
499 [ + + ]: 4 : if(shubnikov==3)then
500 [ + + ]: 3 : if(spgroupma==147 .or. spgroupma==148)symafm(5)=-1
501 : : end if
502 [ + + + + : 122 : nogen=5
+ + + + +
+ + + + +
+ + + + +
+ + ]
503 : : end select
504 : :
505 : : ! End CUBIC space groups
506 : : end if
507 : :
508 : : !***************************************************************************
509 : :
510 : 118 : call timab(47,1,tsec)
511 : :
512 [ + + ]: 118 : if (nogen>0) then
513 : 96 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
514 : : end if
515 : :
516 : 118 : call timab(47,2,tsec)
517 : :
518 : 118 : call spgdata(brvsb,intsb,intsbl,ptintsb,ptschsb,schsb,spgaxor,spgroup,sporder,spgorig)
519 : :
520 : 118 : end subroutine symsgcube
521 : : !!***
522 : :
523 : : !!****f* m_symsg/symsghexa
524 : : !! NAME
525 : : !! symsghexa
526 : : !!
527 : : !! FUNCTION
528 : : !! Yields all the TRIGONAL & HEXAGONAL symmetry operations starting from the space group symbol.
529 : : !! according to the International Tables of Crystallography, 1983.
530 : : !!
531 : : !! INPUTS
532 : : !! msym = default number of symmetries
533 : : !! nsym = the number of symmetry operations
534 : : !! shubnikov= magnetic type of the space group to be generated
535 : : !! spgaxor = ossible orientation of the axes system
536 : : !! spgorig = the origin choice (1 or 2) for the axes system
537 : : !! spgroup = the numeric symbol of the space groups
538 : : !! spgroupma= number of the magnetic space group
539 : : !!
540 : : !! OUTPUT
541 : : !! brvltt = bravais lattice type, here, only for rhombohedral groups
542 : : !! with hexagonal axes
543 : : !! symafm(nsym)=(anti)ferromagnetic part of symmetry operations
544 : : !! symrel(3,3,nsym) = 3D matrix containg symmetry operations
545 : : !! tnons(3,nsym) = 2D matrix containing translations associated
546 : : !!
547 : : !! SOURCE
548 : :
549 : 391 : subroutine symsghexa(brvltt,msym,nsym,shubnikov,spgaxor,spgorig,spgroup,spgroupma,symafm,symrel,tnons)
550 : :
551 : : !Arguments ------------------------------------
552 : : !scalars
553 : : integer,intent(in) :: msym,nsym,shubnikov,spgaxor,spgorig,spgroup,spgroupma
554 : : integer,intent(inout) :: brvltt !vz_i
555 : : !arrays
556 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym) !vz_i
557 : : real(dp),intent(inout) :: tnons(3,msym) !vz_i
558 : :
559 : : !Local variables -----------------------------
560 : : !scalars
561 : : integer :: ii,nogen,sporder
562 : : real(dp),parameter :: fivesixth=5.0d0/6.0d0,twothird=2.0d0/3.0d0
563 : : character(len=1) :: brvsb
564 : : character(len=15) :: intsb,ptintsb,ptschsb,schsb
565 : : character(len=35) :: intsbl
566 : : !arrays
567 : : integer :: genm(3,3),genmmp(3,3),genswm(3,3),genswmmm(3,3),genswmmp(3,3)
568 : : integer :: genswp(3,3)
569 : : integer :: genswmmm_r(3,3), genswp_r(3,3)
570 : :
571 : : !*************************************************************************
572 : :
573 : : !DEBUG
574 : : !write(std_out,*) 'symsghexa',spgroup,shubnikov,spgroupma
575 : : !ENDDEBUG
576 : :
577 : : !The identity operation belongs to all space groups
578 [ + + + + ]: 5083 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
579 : :
580 : : !Predefine some generators
581 : 391 : genswm(:,:)=0 ; genswm(2,1)=1 ; genswm(1,2)=1 ; genswm(3,3)=-1 ! 2 fold axis along x+y, hex setting
582 : : !reshape((/0,1,0,1,0,0,0,0,-1/),(/3,3/),(/0,0/),(/2,1/) ) ! x -> +y; y -> +x; z -> -z
583 : :
584 : 391 : genswmmm(:,:)=0 ; genswmmm(2,1)=-1 ; genswmmm(1,2)=-1 ; genswmmm(3,3)=-1 ! 2 fold axis along x-y, hex setting
585 : : !reshape((/0,-1,0,-1,0,0,0,0,-1/),(/3,3/),(/0,0/),(/2,1/) ) ! x -> -y; y -> -x; z -> -z
586 : 391 : genswmmm_r(:,:)=0 ; genswmmm_r(3,1)=-1 ; genswmmm_r(2,2)=-1 ; genswmmm_r(1,3)=-1 ! 2 fold axis along z-x, rhombo setting
587 : :
588 : 391 : genswmmp(:,:)=0 ; genswmmp(2,1)=-1 ; genswmmp(1,2)=-1 ; genswmmp(3,3)=1 ! mirror plane perpendicular to x+y
589 : : !reshape((/0,-1,0,-1,0,0,0,0,1/),(/3,3/),(/0,0/),(/2,1/) ) ! x -> -y; y -> -x; z -> +z
590 : :
591 : 391 : genswp(:,:)=0 ; genswp(2,1)=1 ; genswp(1,2)=1 ; genswp(3,3)=1 ! mirror plane perpendicular to x-y, hex setting
592 : : !reshape((/0,1,0,1,0,0,0,0,1/),(/3,3/),(/0,0/),(/2,1/) ) ! x -> +y; y -> +x; z -> +z
593 : 391 : genswp_r(:,:)=0 ; genswp_r(1,3)=1 ; genswp_r(2,2)=1 ; genswp_r(3,1)=1 ! mirror plane perpendicular to z-x, rhombo setting
594 : :
595 : 391 : genmmp(:,:)=0 ; genmmp(1,1)=-1 ; genmmp(2,2)=-1 ; genmmp(3,3)=1 ! 2 fold axis along z
596 : : !reshape((/-1,0,0,0,-1,0,0,0,1/),(/3,3/),(/0,0/),(/2,1/) ) ! x-> -x; y -> -y; z -> z
597 : :
598 : : !Initialize the associated translations matrix to 0
599 [ + + ]: 3244 : do ii=1,nsym
600 [ + + ]: 11803 : tnons(:,ii)= 0.0d0
601 : : end do
602 : 391 : nogen=0
603 : :
604 : : !Default non-magnetic behaviour
605 [ + + ]: 3244 : symafm(1:nsym)=1
606 : :
607 : : !*************************************************************************
608 : :
609 : : !Treat TRIGONAL case
610 [ + + ]: 391 : if(143<=spgroup .and. spgroup<=167)then
611 : :
612 : : ! The hexagonal axis choice (orientation) is first treated
613 [ + + ]: 254 : if (spgaxor == 1) then
614 : :
615 : : ! This matrix is common to ALL trigonal spatial groups in this orientation
616 : : ! (Note : this is the 3- symmetry operation)
617 [ + + + + ]: 2509 : symrel(:,:,2)=0 ; symrel(1,1,2)=-1 ; symrel(1,2,2)=1 ; symrel(2,1,2)=-1 ; symrel(3,3,2)=1
618 : : ! reshape((/-1,1,0,-1,0,0,0,0,1/), (/3,3/), (/0,0/), (/2,1/) )
619 : :
620 : : ! Assigns the generators to each space group
621 : : select case (spgroup)
622 : : case (143,146,147,148) !P3, R3, PB3, RB3
623 [ + + + + ]: 312 : symrel(:,:,3)=0 ; symrel(1,2,3)=-1 ; symrel(2,1,3)=1 ; symrel(2,2,3)=-1 ; symrel(3,3,3)=1
624 : : ! reshape((/0,-1,0,1,-1,0,0,0,1/), (/3,3/), (/0,0/), (/2,1/) )
625 : 24 : nogen=0 ! All symmetries have been generated:
626 : : !??? for 146 147 need to complete with inversion or translation sym inside hex cell or both
627 : : case (144) !P31
628 [ + + ]: 12 : tnons(:,2)=(/0.d0,0.d0,twothird/)
629 [ + + + + ]: 39 : symrel(:,:,3)=0 ; symrel(1,2,3)=-1 ; symrel(2,1,3)=1 ; symrel(2,2,3)=-1 ; symrel(3,3,3)=1
630 : : ! reshape((/0,-1,0,1,-1,0,0,0,1/), (/3,3/), (/0,0/), (/2,1/) )
631 [ + + ]: 12 : tnons(:,3)=(/0.d0,0.d0,third/)
632 : : nogen=0 ! All symmetries have been generated
633 : : case (145) !P32
634 [ + + ]: 12 : tnons(:,2)=(/0.d0,0.d0,third/)
635 [ + + + + ]: 39 : symrel(:,:,3)=0 ; symrel(1,2,3)=-1 ; symrel(2,1,3)=1 ; symrel(2,2,3)=-1 ; symrel(3,3,3)=1
636 : : ! reshape((/0,-1,0,1,-1,0,0,0,1/), (/3,3/), (/0,0/), (/2,1/) )
637 [ + + ]: 12 : tnons(:,3)=(/0.d0,0.d0,twothird/)
638 : : nogen=0 ! All symmetries have been generated
639 : : case (149) !P312
640 [ + + + + ]: 195 : symrel(:,:,3) = genswmmm(:,:) ! 2 fold axis along x-y
641 : 15 : nogen=3
642 : : case (150,155) !P321, R32
643 [ + + + + ]: 208 : symrel(:,:,3) = genswm(:,:) ! 2 fold axis along x+y
644 : 16 : nogen=3
645 : : ! 155 add sets at 2/3 1/3 1/3 and 1/3 2/3 2/3
646 : : case (151) !P3112
647 [ + + ]: 24 : tnons(:,2)=(/0.d0,0.d0,twothird/)
648 [ + + + + ]: 78 : symrel(:,:,3) = genswmmm(:,:) ! 2 fold axis along x-y
649 [ + + ]: 24 : tnons(:,3)=(/0.d0,0.d0,twothird/)
650 : 6 : nogen=3
651 : : case (152) !P3121
652 [ + + ]: 24 : tnons(:,2)=(/0.d0,0.d0,twothird/)
653 [ + + + + ]: 78 : symrel(:,:,3) = genswm(:,:) ! 2 fold axis along x+y
654 : 6 : nogen=3
655 : : case (153) !P3212
656 [ + + ]: 24 : tnons(:,2)=(/0.d0,0.d0,third/)
657 [ + + + + ]: 78 : symrel(:,:,3) = genswmmm(:,:) ! 2 fold axis along x-y
658 [ + + ]: 24 : tnons(:,3)=(/0.d0,0.d0,third/)
659 : 6 : nogen=3
660 : : case (154) !P3221
661 [ + + ]: 24 : tnons(:,2)=(/0.d0,0.d0,third/)
662 [ + + + + ]: 78 : symrel(:,:,3) = genswm(:,:) ! 2 fold axis along x+y
663 : 6 : nogen=3
664 : : case (156,160,164,166) !P3m1, R3m, PB3m1, RB3m
665 [ + + + + ]: 455 : symrel(:,:,3) = genswmmp(:,:) ! mirror plane perpendicular to x+y
666 : 35 : nogen=3
667 : : ! 160 add sets at 2/3 1/3 1/3 and 1/3 2/3 2/3
668 : : ! 164 also has 2 and -3 axes
669 : : ! 166 also has 2 and -3 axes and sets at 2/3 1/3 1/3 and 1/3 2/3 2/3
670 : : case (157,162) !P31m, PB31m
671 [ + + + + ]: 312 : symrel(:,:,3) = genswp(:,:) ! mirror plane perpendicular to x-y
672 : 24 : nogen=3
673 : : ! 162 also has 2 and -3 axes
674 : : case (158,161,165,167) !P3c1, R3c, PB3c1, RB3c
675 [ + + + + ]: 377 : symrel(:,:,3) = genswmmp(:,:) ! mirror plane perpendicular to x+y
676 [ + + ]: 116 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
677 : 29 : nogen=3
678 : : ! 161 add sets at 2/3 1/3 1/3 and 1/3 2/3 2/3
679 : : ! 165 also has 2 and -3 axes
680 : : ! 167 also has 2 and -3 axes and sets at 2/3 1/3 1/3 and 1/3 2/3 2/3
681 : : case (159,163) !P31c, PB31c
682 [ + + + + ]: 260 : symrel(:,:,3) = genswp(:,:) ! mirror plane perpendicular to x-y
683 [ + + ]: 80 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
684 [ + + + + : 213 : nogen=3
+ + + + +
+ + + + ]
685 : : ! 163 also has 2 and -3 axes
686 : : end select
687 : :
688 : 34 : select case (spgroup)
689 : : case (146,148,155,160,166,167)
690 [ + + ]: 193 : brvltt=7
691 : : end select
692 : :
693 : : ! Quite simple, because the generator of even order is always the third one.
694 [ + + ]: 193 : if(shubnikov==3)then
695 : 41 : select case(spgroupma)
696 : : case (23,27,31,35,39,43,47,51,55,59,63,67,71,76,77,82,83,88,89,94,95,&
697 : : & 100,101,106,107)
698 [ + + ]: 23 : symafm(3)=-1
699 : : end select
700 : : end if
701 : :
702 [ + - ]: 61 : else if (spgaxor == 2) then
703 : : ! The rhombohedral axis choice (orientation) is now treated
704 : 61 : write(std_out,*)'rhombohedral axes'
705 : : ! Assignment of common three-fold rotation
706 [ + + + + ]: 793 : symrel(:,:,2)=0 ; symrel(1,3,2)=1 ; symrel(3,2,2)=1 ; symrel(2,1,2)=1
707 : : ! reshape((/0,0,1,1,0,0,0,1,0/),(/3,3/),(/0,0/),(/2,1/) )
708 : : ! Inverse of same operation, but this is not a generator!
709 [ + + + + ]: 793 : symrel(:,:,3)=0 ; symrel(3,1,3)=1 ; symrel(2,3,3)=1 ; symrel(1,2,3)=1
710 : : ! reshape((/0,1,0,0,0,1,1,0,0/), (/3,3/), (/0,0/), (/2,1/) )
711 : :
712 : : select case (spgroup)
713 : : case (146,148) !R3
714 : : case (155,166) !R32, RB3m
715 [ + + + + ]: 325 : symrel(:,:,4) = genswmmm_r(:,:) ! 2 fold axis along x-y
716 : 25 : nogen=4
717 : : case (160) !R3m
718 [ + + + + ]: 78 : symrel(:,:,4) = genswp_r(:,:) ! mirror plane perpendicular to z-x
719 : 6 : nogen=4
720 : : case (161,167) !R3c, RB3c
721 [ + + + + ]: 221 : symrel(:,:,4) = genswp_r(:,:) ! mirror plane perpendicular to z-x
722 [ + + ]: 68 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
723 [ + + + + ]: 78 : nogen=4
724 : : end select
725 : :
726 [ + + ]: 61 : if(shubnikov==3)then
727 : 17 : select case(spgroupma)
728 : : case (47,67,71,99,101,106,107)
729 [ + + ]: 10 : symafm(4)=-1
730 : : end select
731 : : end if
732 : :
733 : : ! End selection of axis orientation
734 : : end if
735 : :
736 : : ! End trigonal groups
737 : : end if
738 : :
739 : : !*************************************************************************
740 : :
741 : : !Treat HEXAGONAL case
742 [ + + ]: 391 : if(168<=spgroup .and. spgroup<=194)then
743 : :
744 : : ! This matrix (6) is common to most hexagonal spatial groups, except 174,187,188,189,190
745 [ + + + + ]: 1781 : symrel(:,:,2)=0 ; symrel(1,1,2)=1 ; symrel(1,2,2)=-1 ; symrel(2,1,2)=1 ; symrel(3,3,2)=1
746 : : ! reshape((/1,-1,0,1,0,0,0,0,1/), (/3,3/), (/0,0/), (/2,1/) )
747 : : ! This one (6 bar) is present in the other cases
748 : 137 : genm(:,:)=0 ; genm(1,2)=-1 ; genm(2,1)=1 ; genm(2,2)=-1 ; genm(3,3)=-1
749 : : ! reshape((/0,-1,0,1,-1,0,0,0,-1/), (/3,3/), (/0,0/), (/2,1/) )
750 : 8 : select case(spgroup)
751 : : case (168,175) !P6
752 : 8 : nogen=2
753 : : case (169) !P61
754 [ + + ]: 12 : tnons(:,2)=(/0.d0,0.d0,sixth/)
755 : 3 : nogen=2
756 : : case (170) !P65
757 [ + + ]: 12 : tnons(:,2)=(/0.d0,0.d0,fivesixth/)
758 : 3 : nogen=2
759 : : case (171) !P62
760 [ + + ]: 12 : tnons(:,2)=(/0.d0,0.d0,third/)
761 : 3 : nogen=2
762 : : case (172) !P64
763 [ + + ]: 12 : tnons(:,2)=(/0.d0,0.d0,twothird/)
764 : 3 : nogen=2
765 : : case (173,176) !P63, P63/m
766 [ + + ]: 32 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
767 : 8 : nogen=2
768 : : case (174) !PB6
769 [ + + + + ]: 39 : symrel(:,:,2) = genm(:,:)
770 : 3 : nogen=2
771 : : case (177) !P622
772 [ + + + + ]: 65 : symrel(:,:,3) = genswm(:,:)
773 : 5 : nogen=3
774 : : case (178) !P6122
775 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.d0,sixth/)
776 [ + + + + ]: 65 : symrel(:,:,3) = genswm(:,:)
777 : 5 : nogen=3
778 : : case (179) !P6522
779 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.d0,fivesixth/)
780 [ + + + + ]: 65 : symrel(:,:,3) = genswm(:,:)
781 : 5 : nogen=3
782 : : case (180) !P6222
783 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.d0,third/)
784 [ + + + + ]: 65 : symrel(:,:,3) = genswm(:,:)
785 : 5 : nogen=3
786 : : case (181) !P6422
787 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.d0,twothird/)
788 [ + + + + ]: 65 : symrel(:,:,3) = genswm(:,:)
789 : 5 : nogen=3
790 : : case (182) !P6322
791 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
792 [ + + + + ]: 65 : symrel(:,:,3) = genswm(:,:)
793 : 5 : nogen=3
794 : : case (183,191) !P6mm, P6/mmm
795 [ + + + + ]: 182 : symrel(:,:,3) = genswp(:,:)
796 : 14 : nogen=3
797 : : case (184,192) !P6cc, P6/mcc
798 [ + + + + ]: 182 : symrel(:,:,3) = genswp(:,:)
799 [ + + ]: 56 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
800 : 14 : nogen=3
801 : : case (185,193) !P63cm, P63/mcm
802 [ + + ]: 56 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
803 [ + + + + ]: 182 : symrel(:,:,3) = genswp(:,:)
804 : 14 : nogen=3
805 : : case (186,194) !P63mc, P63/mmc
806 [ + + ]: 56 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
807 [ + + + + ]: 182 : symrel(:,:,3) = genswp(:,:)
808 [ + + ]: 56 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
809 : 14 : nogen=3
810 : : case (187) !PB6m2
811 [ + + + + ]: 65 : symrel(:,:,2)=0 ; symrel(1,2,2)=-1 ; symrel(2,1,2)=1 ; symrel(2,2,2)=-1 ; symrel(3,3,2)=-1
812 : : ! reshape((/0,-1,0,1,-1,0,0,0,-1/), (/3,3/), (/0,0/), (/2,1/) )
813 [ + + + + ]: 65 : symrel(:,:,3)=0 ; symrel(1,1,3)=-1 ; symrel(1,2,3)=1 ; symrel(2,2,3)=1 ; symrel(3,3,3)=1
814 : : ! reshape((/-1,1,0,0,1,0,0,0,1/), (/3,3/), (/0,0/), (/2,1/) )
815 : 5 : nogen=3
816 [ + + ]: 5 : if (shubnikov==3) then
817 [ + + + + ]: 6 : if (spgroupma==211) symafm(2:3)=-1
818 [ + + ]: 3 : if (spgroupma==212) symafm(2)=-1
819 [ + + ]: 3 : if (spgroupma==213) symafm(3)=-1
820 : : end if
821 : : case (188) !PB6c2
822 [ + + + + ]: 65 : symrel(:,:,2) = genm(:,:)
823 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
824 [ + + + + ]: 65 : symrel(:,:,3) = genswmmm(:,:)
825 : 5 : nogen=3
826 : : case (189) !PB62m
827 [ + + + + ]: 65 : symrel(:,:,2) = genm(:,:)
828 [ + + + + ]: 65 : symrel(:,:,3) = genswp(:,:)
829 : 5 : nogen=3
830 : : case (190) !PB62c
831 [ + + + + ]: 65 : symrel(:,:,2) = genm(:,:)
832 [ + + + + ]: 65 : symrel(:,:,3) = genswp(:,:)
833 [ + + ]: 20 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
834 [ + + + + : 142 : nogen=3
+ + + + +
+ + + + +
+ + + + +
+ + ]
835 : : end select
836 : :
837 [ + + ]: 137 : if(shubnikov==3)then
838 : 115 : select case(spgroupma)
839 : : ! spgroup from 168 to 176 are OK, 177 to 194 are not done
840 : : case (111,115,119,123,127,131,135,139,141,145,147,152,158,164,170,&
841 : : & 176,182,187,193,199,205,217,224,230,237,239,247,249,257,259,267,269)
842 : 32 : symafm(2)=-1
843 : : case(153,159,165,171,177,183,189,195,&
844 : : & 201,207,219,225,231,240,241,250,251,260,261,270,271)
845 : 21 : symafm(3)=-1
846 : : case(151,157,163,169,175,181,188,194,200,206,218,223,229,236,238,246,248,256,258,266,268)
847 [ + + + + : 146 : symafm(2:3)=-1
+ + ]
848 : : end select
849 : : end if
850 : :
851 : 137 : call spgdata(brvsb,intsb,intsbl,ptintsb,ptschsb,schsb,spgaxor,spgroup,sporder,spgorig)
852 : :
853 : : ! End HEXAGONAL groups
854 : : end if
855 : :
856 : : !***************************************************************************
857 : :
858 : : !DEBUG
859 : : !write(std_out,*) 'symsghexa : out with nogen = ',nogen
860 : : !ENDDEBUG
861 : :
862 : :
863 [ + + ]: 391 : if (nogen>0) then
864 : 348 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
865 : : end if
866 : :
867 : : !DEBUG
868 : : !write(std_out,*)'symrel:'
869 : : !write(std_out,*) symrel(:,:,1:nsym)
870 : : !ENDDEBUG
871 : :
872 : 391 : end subroutine symsghexa
873 : : !!***
874 : :
875 : : !!****f* m_symsg/symsgmono
876 : : !! NAME
877 : : !! symsgmono
878 : : !!
879 : : !! FUNCTION
880 : : !! Yields all the MONOCLINIC symmetry operations starting from the space group symbol.
881 : : !! according to the International Tables of Crystallography, 1983.
882 : : !! It solves also the problem of the axes orientation
883 : : !! according to the spgaxor
884 : : !!
885 : : !! INPUTS
886 : : !! msym = default number of symmetries
887 : : !! nsym = the number of symmetry operations
888 : : !! shubnikov= magnetic type of the space group to be generated
889 : : !! spgaxor = the orientation choice of the unit cell
890 : : !! spgorig = possible origin of the axes system
891 : : !! spgroup = the numeric symbol of the space groups
892 : : !! spgroupma= number of the magnetic space group
893 : : !!
894 : : !! OUTPUT
895 : : !! brvltt = bravais lattice type, here, only for rhombohedral groups
896 : : !! with hexagonal axes (1=P; 2=I; 3=F; 4=C; 5=A; 6=B; 7=R)
897 : : !! symafm(nsym)=(anti)ferromagnetic part of symmetry operations
898 : : !! symrel(3,3,nsym) = 3D matrix containg symmetry operations
899 : : !! tnons(3,nsym) = 2D matrix containing translations associated
900 : : !!
901 : : !! SOURCE
902 : :
903 : 79 : subroutine symsgmono(brvltt,msym,nsym,shubnikov,spgaxor,spgorig,spgroup,spgroupma,symafm,symrel,tnons)
904 : :
905 : : !Arguments ------------------------------------
906 : : !scalars
907 : : integer,intent(in) :: msym,nsym,shubnikov,spgaxor,spgorig,spgroup,spgroupma
908 : : integer,intent(inout) :: brvltt !vz_i
909 : : !arrays
910 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym) !vz_i
911 : : real(dp),intent(inout) :: tnons(3,msym) !vz_i
912 : :
913 : : !Local variables -----------------------------
914 : : !scalars
915 : : integer :: sporder
916 : : character(len=1) :: brvsb
917 : : character(len=15) :: intsb,ptintsb,ptschsb,schsb
918 : : character(len=35) :: intsbl
919 : : !arrays
920 : : integer :: genmmm(3,3),genmmp(3,3),genmpm(3,3),genmpp(3,3),genpmm(3,3)
921 : : integer :: genpmp(3,3),genppm(3,3)
922 : :
923 : : ! *************************************************************************
924 : : !the identity operation belonging to all space groups
925 [ + + + + ]: 1027 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
926 : :
927 : : !Predefine some generators
928 : 79 : genmpp(:,:)=0 ; genmpp(1,1)=-1 ; genmpp(2,2)= 1 ; genmpp(3,3)= 1
929 : 79 : genpmp(:,:)=0 ; genpmp(1,1)= 1 ; genpmp(2,2)=-1 ; genpmp(3,3)= 1
930 : 79 : genppm(:,:)=0 ; genppm(1,1)= 1 ; genppm(2,2)= 1 ; genppm(3,3)=-1
931 : 79 : genpmm(:,:)=0 ; genpmm(1,1)= 1 ; genpmm(2,2)=-1 ; genpmm(3,3)=-1
932 : 79 : genmpm(:,:)=0 ; genmpm(1,1)=-1 ; genmpm(2,2)= 1 ; genmpm(3,3)=-1
933 : 79 : genmmp(:,:)=0 ; genmmp(1,1)=-1 ; genmmp(2,2)=-1 ; genmmp(3,3)= 1
934 : 79 : genmmm(:,:)=0 ; genmmm(1,1)=-1 ; genmmm(2,2)=-1 ; genmmm(3,3)=-1
935 : :
936 : : !Default non-magnetic behaviour
937 [ + + ]: 327 : symafm(1:nsym)=1
938 : :
939 : : !assigns the generators to each space group
940 : 84 : select case (spgroup)
941 : : case (3) ! P2
942 : 5 : select case (spgaxor)
943 : : case (1) ! 3:b, P2_b = P2
944 [ + + + + ]: 65 : symrel(:,:,2) = genmpm(:,:)
945 : : case (2) ! 3:a, P2_a = P2
946 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
947 : : case (3) ! 3:c, P2_c = P2
948 [ - - + - : 5 : symrel(:,:,2) = genmmp(:,:)
- - - - ]
949 : : end select
950 [ + + ]: 5 : if(shubnikov==3)symafm(2)=-1
951 : : case (4) ! P21
952 : 5 : select case (spgaxor)
953 : : case (1) ! 3:b, P21_b = P21
954 [ + + + + ]: 65 : symrel(:,:,2) = genmpm(:,:)
955 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
956 : : case (2) ! 3:a, P21_a = P21
957 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
958 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
959 : : case (3) ! 3:c, P21_c = P21
960 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
961 [ - - + - : 5 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
- - ]
962 : : end select
963 [ + + ]: 5 : if(shubnikov==3)symafm(2)=-1
964 : : case (5) ! C2
965 : 4 : select case (spgaxor)
966 : : case (1) ! 5:b1, C2 = C2
967 [ + + + + ]: 52 : symrel(:,:,2) = genmpm(:,:)
968 : 4 : brvltt=4
969 : : case (2) ! 5:a1, B2_a = C2
970 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
971 : 0 : brvltt=6
972 : : case (3) ! 5:a2, C2_a = C2
973 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
974 : 0 : brvltt=4
975 : : case (4) ! 5:a3, I2_a = C2
976 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
977 : 0 : brvltt=2
978 : : case (5) ! 5:b2, A2_b = C2
979 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
980 : 0 : brvltt=5
981 : : case (6) ! 5:b3, I2_b = C2
982 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
983 : 0 : brvltt=2
984 : : case (7) ! 5:c1, A2_c = C2
985 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
986 : 0 : brvltt=5
987 : : case (8) ! 5:c2, B2_c = C2
988 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
989 : 0 : brvltt=6
990 : : case (9) ! 5:c3, I2_c = C2
991 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
992 [ - - - - : 4 : brvltt=2
- - - - +
- ]
993 : : end select
994 [ + + ]: 4 : if(shubnikov==3)symafm(2)=-1
995 : : case (6) ! Pm
996 : 5 : select case (spgaxor)
997 : : case (1) ! Pm_b = Pm
998 [ + + + + ]: 65 : symrel(:,:,2) = genpmp(:,:)
999 : : case (2) ! Pm_a = Pm
1000 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1001 : : case (3) ! Pm_c = Pm
1002 [ - - + - : 5 : symrel(:,:,2) = genppm(:,:)
- - - - ]
1003 : : end select
1004 [ + + ]: 5 : if(shubnikov==3)symafm(2)=-1
1005 : : case (7) ! Pc
1006 : 7 : select case (spgaxor)
1007 : : case (1) ! 7:b1, Pc_b = Pc
1008 [ + + + + ]: 91 : symrel(:,:,2) = genpmp(:,:)
1009 [ + + ]: 28 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1010 : : case (2) ! 7:a1, Pb_a = Pc
1011 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1012 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1013 : : case (3) ! 7:a2, Pn_a = Pc
1014 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1015 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1016 : : case (4) ! 7:a3, Pc_a = Pc
1017 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1018 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1019 : : case (5) ! 7:b2, Pn_b = Pc
1020 [ # # # # ]: 0 : symrel(:,:,2) = genpmp(:,:)
1021 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1022 : : case (6) ! 7:b3, Pa_b = Pc
1023 [ # # # # ]: 0 : symrel(:,:,2) = genpmp(:,:)
1024 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1025 : : case (7) ! 7:c1, Pa_c = Pc
1026 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1027 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1028 : : case (8) ! 7:c2, Pn_c = Pc
1029 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1030 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1031 : : case (9) ! 7:c3, Pb_c = Pb
1032 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1033 [ - - - - : 7 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
- - - - +
- - - ]
1034 : : end select
1035 [ + + ]: 7 : if(shubnikov==3)symafm(2)=-1
1036 : : case (8) ! Cm
1037 : 4 : select case (spgaxor)
1038 : : case (1) ! 8:b1, Cm = Cm
1039 [ + + + + ]: 52 : symrel(:,:,2) = genpmp(:,:)
1040 : 4 : brvltt=4
1041 : : case (2) ! 8:a1, Bm_a = Cm
1042 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1043 : 0 : brvltt=6
1044 : : case (3) ! 8:a2, Cm_a = Cm
1045 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1046 : 0 : brvltt=4
1047 : : case (4) ! 8:a3, Im_a = Cm
1048 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1049 : 0 : brvltt=2
1050 : : case (5) ! 8:b2, Am_b = Cm
1051 [ # # # # ]: 0 : symrel(:,:,2) = genpmp(:,:)
1052 : 0 : brvltt=5
1053 : : case (6) ! 8:b3, Im_b = Cm
1054 [ # # # # ]: 0 : symrel(:,:,2) = genpmp(:,:)
1055 : 0 : brvltt=2
1056 : : case (7) ! 8:c1, Am_c = Cm
1057 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1058 : 0 : brvltt=5
1059 : : case (8) ! 8:c2, Bm_c = Bm
1060 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1061 : 0 : brvltt=6
1062 : : case (9) ! 8:c3, Im_c = Cm
1063 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1064 [ - - - - : 4 : brvltt=2
- - - - +
- ]
1065 : : end select
1066 [ + + ]: 4 : if(shubnikov==3)symafm(2)=-1
1067 : : case (9) ! Cc
1068 : 4 : select case (spgaxor)
1069 : : case (1) ! 9:b1, Cc_b = Cc
1070 [ + + + + ]: 52 : symrel(:,:,2) = genpmp(:,:)
1071 [ + + ]: 16 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1072 : 4 : brvltt=4
1073 : : case (2) ! 9:a1, Bb_a = Cc
1074 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1075 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1076 : 0 : brvltt=6
1077 : : case (3) ! 9:a2, Cn_a = Cc
1078 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1079 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1080 : 0 : brvltt=4
1081 : : case (4) ! 9:a3, Ic_a = Cc
1082 [ # # # # ]: 0 : symrel(:,:,2) = genmpp(:,:)
1083 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1084 : 0 : brvltt=2
1085 : : case (5) ! 9:b2, An_b = Cc
1086 [ # # # # ]: 0 : symrel(:,:,2) = genpmp(:,:)
1087 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1088 : 0 : brvltt=5
1089 : : case (6) ! 9:b3, Ia_b = Cc
1090 [ # # # # ]: 0 : symrel(:,:,2) = genpmp(:,:)
1091 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1092 : 0 : brvltt=2
1093 : : case (7) ! 9:c1, Aa_c = Cc
1094 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1095 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1096 : 0 : brvltt=5
1097 : : case (8) ! 9:c2, B(b+c)_c = Cc
1098 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1099 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1100 : 0 : brvltt=6
1101 : : case (9) ! 9:c3, Ib_c = Cc
1102 [ # # # # ]: 0 : symrel(:,:,2) = genppm(:,:)
1103 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1104 [ - - - - : 4 : brvltt=2
- - - - +
- ]
1105 : : end select
1106 [ + + ]: 4 : if(shubnikov==3)symafm(2)=-1
1107 : : case (10) ! P2/m
1108 : 7 : select case (spgaxor)
1109 : : case (1) ! 10:b, P2/m = P2/m
1110 [ + + + + ]: 91 : symrel(:,:,2) = genmpm(:,:)
1111 [ + + + + ]: 91 : symrel(:,:,3) = genmmm(:,:)
1112 [ + + + + ]: 91 : symrel(:,:,4) = genpmp(:,:)
1113 : : case (2) ! 10:a, P2/m_a = P2/m
1114 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1115 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1116 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1117 : : case (3) ! 10:c, P2/m_c = P2/m
1118 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1119 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1120 [ - - + - : 7 : symrel(:,:,4) = genppm(:,:)
- - - - ]
1121 : : end select
1122 [ + + ]: 7 : if(shubnikov==3)then
1123 [ + + ]: 12 : symafm(2:4)=-1 ! Default
1124 [ + + ]: 3 : if(spgroupma==44)symafm(4)=1
1125 [ + + ]: 3 : if(spgroupma==45)symafm(2)=1
1126 [ + + ]: 3 : if(spgroupma==46)symafm(3)=1
1127 : : end if
1128 : : case (11) ! P21/m
1129 : 7 : select case (spgaxor)
1130 : : case (1) ! 11:b, P21/m = P21/m
1131 [ + + + + ]: 91 : symrel(:,:,2) = genmpm(:,:)
1132 [ + + + + ]: 91 : symrel(:,:,3) = genmmm(:,:)
1133 [ + + + + ]: 91 : symrel(:,:,4) = genpmp(:,:)
1134 [ + + ]: 28 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1135 [ + + ]: 28 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
1136 : : case (2) ! 11:a, P21/m_a = P21/m
1137 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1138 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1139 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1140 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1141 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1142 : : case (3) ! 11:c, P21/m_c = P21/m
1143 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1144 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1145 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1146 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1147 [ - - + - : 7 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
- - ]
1148 : : end select
1149 [ + + ]: 7 : if(shubnikov==3)then
1150 [ + + ]: 12 : symafm(2:4)=-1 ! Default
1151 [ + + ]: 3 : if(spgroupma==52)symafm(4)=1
1152 [ + + ]: 3 : if(spgroupma==53)symafm(2)=1
1153 [ + + ]: 3 : if(spgroupma==54)symafm(3)=1
1154 : : end if
1155 : : case (12) ! C2/m
1156 : 6 : select case (spgaxor)
1157 : : case (1) ! 12:b1, C2/m = C2/m
1158 [ + + + + ]: 78 : symrel(:,:,2) = genmpm(:,:)
1159 [ + + + + ]: 78 : symrel(:,:,3) = genmmm(:,:)
1160 [ + + + + ]: 78 : symrel(:,:,4) = genpmp(:,:)
1161 : 6 : brvltt=4
1162 : : case (2) ! 12:a1, B2/m_a = C2/m
1163 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1164 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1165 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1166 : 0 : brvltt=6
1167 : : case (3) ! 12:a2, C2/m_a = C2/m
1168 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1169 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1170 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1171 : 0 : brvltt=4
1172 : : case (4) ! 12:a3, I2/m_a = C2/m
1173 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1174 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1175 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1176 : 0 : brvltt=2
1177 : : case (5) ! 12:b2, A2/m_b = C2/m
1178 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1179 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1180 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1181 : 0 : brvltt=5
1182 : : case (6) ! 12:b3, I2/m_b = C2/m
1183 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1184 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1185 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1186 : 0 : brvltt=2
1187 : : case (7) ! 12:c1, A2/m_c = C2/m
1188 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1189 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1190 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1191 : 0 : brvltt=5
1192 : : case (8) ! 12:c2, B2/m_c = B2/m
1193 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1194 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1195 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1196 : 0 : brvltt=6
1197 : : case (9) ! 12:c3, I2/m_c = C2/m
1198 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1199 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1200 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1201 [ - - - - : 6 : brvltt=2
- - - - +
- ]
1202 : : end select
1203 [ + + ]: 6 : if(shubnikov==3)then
1204 [ + + ]: 12 : symafm(2:4)=-1 ! Default
1205 [ + + ]: 3 : if(spgroupma==60)symafm(4)=1
1206 [ + + ]: 3 : if(spgroupma==61)symafm(2)=1
1207 [ + + ]: 3 : if(spgroupma==62)symafm(3)=1
1208 : : end if
1209 : : case (13) ! P2/c
1210 : 9 : select case (spgaxor)
1211 : : case (1) ! 13:b1, P2/c = P2/c
1212 [ + + + + ]: 117 : symrel(:,:,2) = genmpm(:,:)
1213 [ + + + + ]: 117 : symrel(:,:,3) = genmmm(:,:)
1214 [ + + + + ]: 117 : symrel(:,:,4) = genpmp(:,:)
1215 [ + + ]: 36 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1216 [ + + ]: 36 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
1217 : : case (2) ! 13:a1, P2/b_a = P2/c
1218 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1219 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1220 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1221 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1222 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
1223 : : case (3) ! 13:a2, P2/n_a = P2/c
1224 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1225 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1226 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1227 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1228 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
1229 : : case (4) ! 13:a3, P2/c_a = P2/c
1230 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1231 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1232 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1233 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1234 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
1235 : : case (5) ! 13:b2, P2/n_b = P2/c
1236 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1237 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1238 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1239 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1240 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1241 : : case (6) ! 13:b3, P2/a_b = P2/c
1242 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1243 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1244 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1245 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1246 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1247 : : case (7) ! 13:c1, P2/a_c = P2/c
1248 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1249 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1250 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1251 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1252 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1253 : : case (8) ! 13:c2, P2/n_c = P2/c
1254 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1255 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1256 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1257 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1258 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1259 : : case (9) ! 13:c3, P2/b_c = P2/b
1260 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1261 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1262 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1263 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1264 [ - - - - : 9 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
- - - - +
- - - ]
1265 : : end select
1266 [ + + ]: 9 : if(shubnikov==3)then
1267 [ + + ]: 12 : symafm(2:4)=-1 ! Default
1268 [ + + ]: 3 : if(spgroupma==67)symafm(4)=1
1269 [ + + ]: 3 : if(spgroupma==68)symafm(2)=1
1270 [ + + ]: 3 : if(spgroupma==69)symafm(3)=1
1271 : : end if
1272 : : case (14) ! P21/c
1273 : 9 : select case (spgaxor)
1274 : : case (1) ! 14:b1, P21/c_b = P21/c
1275 [ + + + + ]: 117 : symrel(:,:,2) = genmpm(:,:)
1276 [ + + + + ]: 117 : symrel(:,:,3) = genmmm(:,:)
1277 [ + + + + ]: 117 : symrel(:,:,4) = genpmp(:,:)
1278 [ + + ]: 36 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1279 [ + + ]: 36 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
1280 : : case (2) ! 14:a1, P21/a_b = P21/c
1281 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1282 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1283 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1284 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1285 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1286 : : case (3) ! 14:a2, P21/n_a = P21/c
1287 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1288 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1289 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1290 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
1291 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
1292 : : case (4) ! 14:a3, P21/c_a = P21/c
1293 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1294 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1295 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1296 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1297 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1298 : : case (5) ! 14:b2, P21/n_b = P21/c
1299 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1300 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1301 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1302 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
1303 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
1304 : : case (6) ! 14:b3, P21/a_b = P21/c
1305 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1306 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1307 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1308 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1309 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1310 : : case (7) ! 14:c1, P21/a_c = P21/c
1311 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1312 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1313 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1314 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1315 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1316 : : case (8) ! 14:c2, P21/n_c = P21/c
1317 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1318 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1319 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1320 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
1321 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
1322 : : case (9) ! 14/c3, P21/b_c = P21/b
1323 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1324 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1325 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1326 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1327 [ - - - - : 9 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
- - - - +
- - - ]
1328 : : end select
1329 [ + + ]: 9 : if(shubnikov==3)then
1330 [ + + ]: 12 : symafm(2:4)=-1 ! Default
1331 [ + + ]: 3 : if(spgroupma==77)symafm(4)=1
1332 [ + + ]: 3 : if(spgroupma==78)symafm(2)=1
1333 [ + + ]: 3 : if(spgroupma==79)symafm(3)=1
1334 : : end if
1335 : : case (15) ! C2/c
1336 : 7 : select case (spgaxor)
1337 : : case (1) ! 15:b1, C2/c_b = C2/c
1338 [ + + + + ]: 91 : symrel(:,:,2) = genmpm(:,:)
1339 [ + + + + ]: 91 : symrel(:,:,3) = genmmm(:,:)
1340 [ + + + + ]: 91 : symrel(:,:,4) = genpmp(:,:)
1341 [ + + ]: 28 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1342 [ + + ]: 28 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
1343 : 7 : brvltt = 4
1344 : : case (2) ! 15:a1, B2/b_a = C2/c
1345 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1346 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1347 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1348 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1349 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
1350 : 0 : brvltt = 6
1351 : : case (3) ! 15:a2, C2/n_a = C2/c
1352 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1353 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1354 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1355 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1356 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
1357 : 0 : brvltt = 4
1358 : : case (4) ! 15:a3, I2/c_a = C2/c
1359 [ # # # # ]: 0 : symrel(:,:,2) = genpmm(:,:)
1360 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1361 [ # # # # ]: 0 : symrel(:,:,4) = genmpp(:,:)
1362 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1363 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
1364 : 0 : brvltt = 2
1365 : : case (5) ! 15:b2, A2/n_b = C2/c
1366 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1367 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1368 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1369 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1370 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1371 : 0 : brvltt = 5
1372 : : case (6) ! 15:b3, I2/a_b = C2/c
1373 [ # # # # ]: 0 : symrel(:,:,2) = genmpm(:,:)
1374 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1375 [ # # # # ]: 0 : symrel(:,:,4) = genpmp(:,:)
1376 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1377 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1378 : 0 : brvltt = 2
1379 : : case (7) ! 15:c1, A2/a_c = C2/c
1380 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1381 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1382 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1383 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1384 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1385 : 0 : brvltt = 5
1386 : : case (8) ! 15:c2, B21/b_c = C2/c
1387 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1388 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1389 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1390 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1391 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
1392 : 0 : brvltt = 6
1393 : : case (9) ! 15:c3, I2/b_c = C2/c
1394 [ # # # # ]: 0 : symrel(:,:,2) = genmmp(:,:)
1395 [ # # # # ]: 0 : symrel(:,:,3) = genmmm(:,:)
1396 [ # # # # ]: 0 : symrel(:,:,4) = genppm(:,:)
1397 [ # # ]: 0 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1398 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
1399 [ - - - - : 7 : brvltt = 2
- - - - +
- ]
1400 : : end select
1401 [ + + + + : 86 : if(shubnikov==3)then
+ + + + +
+ + + + -
+ + ]
1402 [ + + ]: 12 : symafm(2:4)=-1 ! Default
1403 [ + + ]: 3 : if(spgroupma==87)symafm(4)=1
1404 [ + + ]: 3 : if(spgroupma==88)symafm(2)=1
1405 [ + + ]: 3 : if(spgroupma==89)symafm(3)=1
1406 : : end if
1407 : : end select
1408 : :
1409 : 79 : call spgdata(brvsb,intsb,intsbl,ptintsb,ptschsb,schsb,spgaxor,spgroup,sporder,spgorig)
1410 : :
1411 : 79 : end subroutine symsgmono
1412 : : !!***
1413 : :
1414 : : !!****f* m_symsg/symsgortho
1415 : : !! NAME
1416 : : !! symsgortho
1417 : : !!
1418 : : !! FUNCTION
1419 : : !! Yields all the ORTHORHOMBIC symmetry operations starting from the space group symbol.
1420 : : !! It deals only with the orthorhombic groups
1421 : : !! taken in the standard orientation
1422 : : !! according to the International Tables of Crystallography, 1983.
1423 : : !!
1424 : : !! INPUTS
1425 : : !! msym = default number of symmetries
1426 : : !! nsym = the number of symmetry operations
1427 : : !! shubnikov= magnetic type of the space group to be generated
1428 : : !! spgorig = the origin choice (1 or 2) for the axes system
1429 : : !! spgaxor = the possible orientation of the axes system
1430 : : !! spgroup = the numeric symbol of the space groups
1431 : : !! spgroupma= number of the magnetic space group
1432 : : !!
1433 : : !! OUTPUT
1434 : : !! symafm(nsym)=(anti)ferromagnetic part of symmetry operations
1435 : : !! symrel(3,3,nsym) = 3D matrix containg symmetry operations
1436 : : !! tnons(3,nsym) = 2D matrix containing translations associated
1437 : : !!
1438 : : !! SOURCE
1439 : :
1440 : 1042 : subroutine symsgortho(msym,nsym,shubnikov,spgaxor,spgorig,spgroup,&
1441 : 521 : & spgroupma,symafm,symrel,tnons)
1442 : :
1443 : : !Arguments ------------------------------------
1444 : : !scalars
1445 : : integer,intent(in) :: msym,nsym,shubnikov,spgaxor,spgorig,spgroup
1446 : : integer,intent(in) :: spgroupma
1447 : : !arrays
1448 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym) !vz_i
1449 : : real(dp),intent(inout) :: tnons(3,msym) !vz_i
1450 : :
1451 : : !Local variables ------------------------------
1452 : : ! nogen = number of generators selected
1453 : : !scalars
1454 : : integer :: nogen,sporder
1455 : : character(len=1) :: brvsb
1456 : : character(len=15) :: intsb,ptintsb,ptschsb,schsb
1457 : : character(len=35) :: intsbl
1458 : : !arrays
1459 : : integer :: genmmm(3,3),genmmp(3,3),genmpm(3,3),genmpp(3,3),genpmm(3,3)
1460 : : integer :: genpmp(3,3),genppm(3,3)
1461 : :
1462 : : ! *************************************************************************
1463 : :
1464 : : !DEBUG
1465 : : !write(std_out,*)'symsgortho ( orthorhombic groups) : enter with space group ',spgroup
1466 : : !ENDDEBUG
1467 : :
1468 : : !The orientation of the space group:
1469 : : !first we will permute the input coordinates of the atoms, xred
1470 : : !then we will make the calculation in the "normal" space group
1471 : : !then the coordinates are reoriented to match the initial orientation
1472 : : !and finally the symrel is reoriented to correspond to the new orientation
1473 : : !further all the calculations are performed into the space group
1474 : : !with the user-defined orientation
1475 : :
1476 : : !The identity operation belongs to all space groups
1477 [ + + + + ]: 6773 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
1478 : :
1479 : 521 : nogen=4
1480 : :
1481 : : !Predefine some generators
1482 : 521 : genmpp(:,:)=0 ; genmpp(1,1)=-1 ; genmpp(2,2)= 1 ; genmpp(3,3)= 1
1483 : 521 : genpmp(:,:)=0 ; genpmp(1,1)= 1 ; genpmp(2,2)=-1 ; genpmp(3,3)= 1
1484 : 521 : genppm(:,:)=0 ; genppm(1,1)= 1 ; genppm(2,2)= 1 ; genppm(3,3)=-1
1485 : 521 : genpmm(:,:)=0 ; genpmm(1,1)= 1 ; genpmm(2,2)=-1 ; genpmm(3,3)=-1
1486 : 521 : genmpm(:,:)=0 ; genmpm(1,1)=-1 ; genmpm(2,2)= 1 ; genmpm(3,3)=-1
1487 : 521 : genmmp(:,:)=0 ; genmmp(1,1)=-1 ; genmmp(2,2)=-1 ; genmmp(3,3)= 1
1488 : 521 : genmmm(:,:)=0 ; genmmm(1,1)=-1 ; genmmm(2,2)=-1 ; genmmm(3,3)=-1
1489 : :
1490 : :
1491 : : !For all the groups in this routine symrel(:,:,2) is the same
1492 [ + + + + ]: 6773 : symrel(:,:,2)=genmmp(:,:)
1493 : :
1494 : : !Default non-magnetic behaviour
1495 [ + + ]: 2873 : symafm(1:nsym)=1
1496 : :
1497 : : !DEBUG
1498 : : !write(std_out,*) 'symsgortho:',spgroup,shubnikov,spgroupma
1499 : : !ENDDEBUG
1500 : :
1501 : : !assigns the generators to each space group
1502 : 521 : select case (spgroup)
1503 : : ! ORTHORHOMBIC space groups
1504 : : case (16,21,22,23) !P222, C222, F222, I222
1505 [ + + + + ]: 221 : symrel(:,:,3) = genmpm(:,:)
1506 [ + + + + ]: 221 : symrel(:,:,4) = genpmm(:,:)
1507 [ + + + + ]: 32 : if(shubnikov==3)symafm(3:4)=-1
1508 : : case (17,20) !P2221, C2221
1509 [ + + ]: 56 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1510 [ + + + + ]: 182 : symrel(:,:,3) = genpmm(:,:)
1511 [ + + + + ]: 182 : symrel(:,:,4) = genmpm(:,:)
1512 [ + + ]: 56 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
1513 [ + + ]: 14 : if(shubnikov==3)then
1514 : 4 : symafm(4)=-1
1515 [ + + ]: 4 : if(spgroupma==9) symafm(3)=-1
1516 [ + + ]: 4 : if(spgroupma==10)symafm(2)=-1
1517 [ + + + + ]: 7 : if(spgroupma==33)symafm(3:4)=-1
1518 [ + + ]: 4 : if(spgroupma==34)symafm(2)=-1
1519 : : end if
1520 : : case (18) !P21212
1521 [ + + + + ]: 104 : symrel(:,:,3) = genmpm(:,:)
1522 [ + + ]: 32 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
1523 [ + + + + ]: 104 : symrel(:,:,4) = genpmm(:,:)
1524 [ + + ]: 32 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1525 [ + + ]: 8 : if(shubnikov==3)then
1526 : 2 : symafm(3)=-1
1527 [ + + ]: 2 : if(spgroupma==18)symafm(4)=-1
1528 [ + + ]: 2 : if(spgroupma==19)symafm(2)=-1
1529 : : end if
1530 : : case (19,24) !P212121, I212121
1531 [ + + ]: 32 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1532 [ + + + + ]: 104 : symrel(:,:,3) = genmpm(:,:)
1533 [ + + ]: 32 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
1534 [ + + + + ]: 104 : symrel(:,:,4) = genpmm(:,:)
1535 [ + + ]: 32 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1536 [ + + + + ]: 14 : if(shubnikov==3)symafm(3:4)=-1
1537 : : case (25,35,38,42,44) !Pmm2, Cmm2, Amm2, Fmm2, Imm2
1538 [ + + + + ]: 416 : symrel(:,:,3) = genpmp(:,:)
1539 [ + + + + ]: 416 : symrel(:,:,4) = genmpp(:,:)
1540 : : case (26,36) !Pmc21, Cmc21
1541 [ + + ]: 72 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1542 [ + + + + ]: 234 : symrel(:,:,3) = genpmp(:,:)
1543 [ + + ]: 72 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
1544 [ + + + + ]: 234 : symrel(:,:,4) = genmpp(:,:)
1545 : : case (27,37) !Pcc2, Ccc2
1546 [ + + + + ]: 182 : symrel(:,:,3) = genpmp(:,:)
1547 [ + + ]: 56 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
1548 [ + + + + ]: 182 : symrel(:,:,4) = genmpp(:,:)
1549 [ + + ]: 56 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
1550 : : case (28,40,46) !Pma2, Ama2, Ima2
1551 [ + + + + ]: 325 : symrel(:,:,3) = genpmp(:,:)
1552 [ + + ]: 100 : tnons(:,3)=(/0.5d0,0.d0,0.d0/)
1553 [ + + + + ]: 325 : symrel(:,:,4) = genmpp(:,:)
1554 [ + + ]: 100 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1555 : : case (29) !Pca21
1556 [ + + ]: 44 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1557 [ + + + + ]: 143 : symrel(:,:,3) = genpmp(:,:)
1558 [ + + ]: 44 : tnons(:,3)=(/0.5d0,0.d0,0.d0/)
1559 [ + + + + ]: 143 : symrel(:,:,4) = genmpp(:,:)
1560 [ + + ]: 44 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1561 : : case (30) !Pnc2
1562 [ + + + + ]: 143 : symrel(:,:,3) = genpmp(:,:)
1563 [ + + ]: 44 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
1564 [ + + + + ]: 143 : symrel(:,:,4) = genmpp(:,:)
1565 [ + + ]: 44 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
1566 : : case (31) !Pmn21
1567 [ + + ]: 44 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1568 [ + + + + ]: 143 : symrel(:,:,3) = genpmp(:,:)
1569 [ + + ]: 44 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
1570 [ + + + + ]: 143 : symrel(:,:,4) = genmpp(:,:)
1571 : : case (32,41,45) !Pba2, Aba2, Iba2
1572 [ + + + + ]: 260 : symrel(:,:,3) = genpmp(:,:)
1573 [ + + ]: 80 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
1574 [ + + + + ]: 260 : symrel(:,:,4) = genmpp(:,:)
1575 [ + + ]: 80 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1576 : : case (33) !Pna21
1577 [ + + ]: 44 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1578 [ + + + + ]: 143 : symrel(:,:,3) = genpmp(:,:)
1579 [ + + ]: 44 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
1580 [ + + + + ]: 143 : symrel(:,:,4) = genmpp(:,:)
1581 [ + + ]: 44 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
1582 : : case (34) !Pnn2
1583 [ + + + + ]: 104 : symrel(:,:,3) = genpmp(:,:)
1584 [ + + ]: 32 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
1585 [ + + + + ]: 104 : symrel(:,:,4) = genmpp(:,:)
1586 [ + + ]: 32 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
1587 : : case (39) !Abm2
1588 [ + + + + ]: 91 : symrel(:,:,3) = genpmp(:,:)
1589 [ + + ]: 28 : tnons(:,3)=(/0.d0,0.5d0,0.d0/)
1590 [ + + + + ]: 91 : symrel(:,:,4) = genmpp(:,:)
1591 [ + + ]: 28 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
1592 : : case (43) !Fdd2
1593 [ + + + + ]: 52 : symrel(:,:,3) = genpmp(:,:)
1594 [ + + ]: 16 : tnons(:,3)=(/0.25d0,0.25d0,0.25d0/)
1595 [ + + + + ]: 52 : symrel(:,:,4) = genmpp(:,:)
1596 [ + + ]: 16 : tnons(:,4)=(/0.25d0,0.25d0,0.25d0/)
1597 : : case (47,65,69,71) !Pmmm, Cmmm, Fmmm, Immm
1598 [ + + + + ]: 338 : symrel(:,:,3) = genmpm(:,:)
1599 [ + + + + ]: 338 : symrel(:,:,4) = genpmm(:,:)
1600 : : case (48) !Pnnn
1601 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
1602 [ + + + + ]: 91 : symrel(:,:,4) = genpmm(:,:)
1603 [ + + + + ]: 91 : symrel(:,:,5) = genmmm(:,:)
1604 [ + + + + ]: 91 : symrel(:,:,6) = genppm(:,:)
1605 [ + + + + ]: 91 : symrel(:,:,7) = genpmp(:,:)
1606 [ + + + + ]: 91 : symrel(:,:,8) = genmpp(:,:)
1607 [ - + ]: 7 : if (spgorig==1) then
1608 [ + + ]: 28 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/)
1609 [ + + ]: 28 : tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
1610 [ + + ]: 28 : tnons(:,7)=(/0.5d0,0.5d0,0.5d0/)
1611 [ + + ]: 28 : tnons(:,8)=(/0.5d0,0.5d0,0.5d0/)
1612 : : else
1613 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1614 [ # # ]: 0 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
1615 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
1616 [ # # ]: 0 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
1617 [ # # ]: 0 : tnons(:,7)=(/0.5d0,0.d0,0.5d0/)
1618 [ # # ]: 0 : tnons(:,8)=(/0.d0,0.5d0,0.5d0/)
1619 : : end if
1620 [ + + ]: 7 : if(shubnikov==3)then
1621 [ + + ]: 3 : if(spgroupma==259)then
1622 [ + + ]: 3 : symafm(2:3)=-1 ; symafm(5)=-1 ; symafm(8)=-1
1623 [ + + ]: 2 : else if(spgroupma==260)then
1624 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(7:8)=-1
1625 [ + - ]: 1 : else if(spgroupma==261)then
1626 [ + + ]: 5 : symafm(5:8)=-1
1627 : : end if
1628 : : end if
1629 : 7 : nogen=0
1630 : : case (49,66) !Pccm, Cccm
1631 [ + + + + ]: 260 : symrel(:,:,4) = genpmm(:,:)
1632 [ + + ]: 80 : tnons(:,4)=(/0.d0,0.d0,0.5d0/)
1633 [ + + + + ]: 260 : symrel(:,:,3) = genmpm(:,:)
1634 [ + + ]: 80 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
1635 : : case (50) !Pban
1636 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
1637 [ + + + + ]: 143 : symrel(:,:,4) = genpmm(:,:)
1638 [ + + + + ]: 143 : symrel(:,:,5) = genmmm(:,:)
1639 [ + + + + ]: 143 : symrel(:,:,6) = genppm(:,:)
1640 [ + + + + ]: 143 : symrel(:,:,7) = genpmp(:,:)
1641 [ + + + + ]: 143 : symrel(:,:,8) = genmpp(:,:)
1642 [ - + ]: 11 : if (spgorig==1) then
1643 [ + + ]: 44 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/)
1644 [ + + ]: 44 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
1645 [ + + ]: 44 : tnons(:,7)=(/0.5d0,0.5d0,0.d0/)
1646 [ + + ]: 44 : tnons(:,8)=(/0.5d0,0.5d0,0.d0/)
1647 : : else
1648 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1649 [ # # ]: 0 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
1650 [ # # ]: 0 : tnons(:,3)=(/0.5d0,0.d0,0.d0/)
1651 [ # # ]: 0 : tnons(:,7)=(/0.5d0,0.d0,0.d0/)
1652 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
1653 [ # # ]: 0 : tnons(:,8)=(/0.d0,0.5d0,0.d0/)
1654 : : end if
1655 [ + + ]: 11 : if(shubnikov==3)then
1656 [ + + + + : 5 : if(spgroupma==279)then
+ - ]
1657 [ + + ]: 3 : symafm(2:3)=-1 ; symafm(5)=-1 ; symafm(8)=-1
1658 : : else if(spgroupma==280)then
1659 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(5:6)=-1
1660 : : else if(spgroupma==281)then
1661 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(7:8)=-1
1662 : : else if(spgroupma==282)then
1663 [ + + ]: 5 : symafm(2:8:2)=-1
1664 : : else if(spgroupma==283)then
1665 [ + + ]: 5 : symafm(5:8)=-1
1666 : : end if
1667 : : end if
1668 : 11 : nogen=0
1669 : : case (51) !Pmma
1670 [ + + ]: 60 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1671 [ + + + + ]: 195 : symrel(:,:,3) = genmpm(:,:)
1672 [ + + + + ]: 195 : symrel(:,:,4) = genpmm(:,:)
1673 [ + + ]: 60 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1674 : : case (52) !Pnna
1675 [ + + ]: 60 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1676 [ + + + + ]: 195 : symrel(:,:,3) = genmpm(:,:)
1677 [ + + ]: 60 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
1678 [ + + + + ]: 195 : symrel(:,:,4) = genpmm(:,:)
1679 [ + + ]: 60 : tnons(:,4)=(/0.d0,0.5d0,0.5d0/)
1680 : : case (53) !Pmna
1681 [ + + ]: 60 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1682 [ + + + + ]: 195 : symrel(:,:,3) = genmpm(:,:)
1683 [ + + ]: 60 : tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
1684 [ + + + + ]: 195 : symrel(:,:,4) = genpmm(:,:)
1685 : : case (54) !Pcca
1686 [ + + ]: 60 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1687 [ + + + + ]: 195 : symrel(:,:,3) = genmpm(:,:)
1688 [ + + ]: 60 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
1689 [ + + + + ]: 195 : symrel(:,:,4) = genpmm(:,:)
1690 [ + + ]: 60 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1691 : : case (55,72) !Pbam, Ibam
1692 [ + + + + ]: 247 : symrel(:,:,3) = genmpm(:,:)
1693 [ + + ]: 76 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
1694 [ + + + + ]: 247 : symrel(:,:,4) = genpmm(:,:)
1695 [ + + ]: 76 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1696 : : case (56) !Pccn
1697 [ + + ]: 44 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1698 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
1699 [ + + ]: 44 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
1700 [ + + + + ]: 143 : symrel(:,:,4) = genpmm(:,:)
1701 [ + + ]: 44 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1702 : : case (57) !Pbcm
1703 [ + + ]: 60 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1704 [ + + + + ]: 195 : symrel(:,:,3) = genmpm(:,:)
1705 [ + + ]: 60 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
1706 [ + + + + ]: 195 : symrel(:,:,4) = genpmm(:,:)
1707 [ + + ]: 60 : tnons(:,4)=(/0.d0,0.5d0,0.d0/)
1708 : : case (58) !Pnnm
1709 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
1710 [ + + ]: 44 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
1711 [ + + + + ]: 143 : symrel(:,:,4) = genpmm(:,:)
1712 [ + + ]: 44 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
1713 : : case (59) !Pmmn
1714 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
1715 [ + + + + ]: 143 : symrel(:,:,4) = genpmm(:,:)
1716 [ + + + + ]: 143 : symrel(:,:,5) = genmmm(:,:)
1717 [ + + + + ]: 143 : symrel(:,:,6) = genppm(:,:)
1718 [ + + + + ]: 143 : symrel(:,:,7) = genpmp(:,:)
1719 [ + + + + ]: 143 : symrel(:,:,8) = genmpp(:,:)
1720 [ - + ]: 11 : if (spgorig==1) then
1721 [ + + ]: 44 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
1722 [ + + ]: 44 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1723 [ + + ]: 44 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/)
1724 [ + + ]: 44 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
1725 : : else
1726 [ # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1727 [ # # ]: 0 : tnons(:,3)=(/0.d0,0.5d0,0.d0/)
1728 [ # # ]: 0 : tnons(:,4)=(/0.5d0,0.d0,0.d0/)
1729 [ # # ]: 0 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
1730 [ # # ]: 0 : tnons(:,7)=(/0.d0,0.5d0,0.d0/)
1731 [ # # ]: 0 : tnons(:,8)=(/0.5d0,0.d0,0.d0/)
1732 : : end if
1733 [ + + ]: 11 : if(shubnikov==3)then
1734 [ + + + + : 5 : if(spgroupma==407)then
+ - ]
1735 [ + + ]: 3 : symafm(2:3)=-1 ; symafm(5)=-1 ; symafm(8)=-1
1736 : : else if(spgroupma==408)then
1737 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(5:6)=-1
1738 : : else if(spgroupma==409)then
1739 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(7:8)=-1
1740 : : else if(spgroupma==410)then
1741 [ + + ]: 5 : symafm(2:8:2)=-1
1742 : : else if(spgroupma==411)then
1743 [ + + ]: 5 : symafm(5:8)=-1
1744 : : end if
1745 : : end if
1746 : 11 : nogen=0
1747 : : case (60) !Pbcn
1748 [ + + ]: 60 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
1749 [ + + + + ]: 195 : symrel(:,:,3) = genmpm(:,:)
1750 [ + + ]: 60 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
1751 [ + + + + ]: 195 : symrel(:,:,4) = genpmm(:,:)
1752 [ + + ]: 60 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1753 : : case (61,73) !Pbca, Ibca
1754 [ + + ]: 48 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1755 [ + + + + ]: 156 : symrel(:,:,3) = genmpm(:,:)
1756 [ + + ]: 48 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
1757 [ + + + + ]: 156 : symrel(:,:,4) = genpmm(:,:)
1758 [ + + ]: 48 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1759 : : case (62) !Pnma
1760 [ + + ]: 76 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/)
1761 [ + + + + ]: 247 : symrel(:,:,3) = genmpm(:,:)
1762 [ + + ]: 76 : tnons(:,3)=(/0.d0,0.5d0,0.d0/)
1763 [ + + + + ]: 247 : symrel(:,:,4) = genpmm(:,:)
1764 [ + + ]: 76 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
1765 : : case (63) !Cmcm
1766 [ + + ]: 44 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1767 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
1768 [ + + ]: 44 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
1769 [ + + + + ]: 143 : symrel(:,:,4) = genpmm(:,:)
1770 [ + + ]: 11 : if(shubnikov==3)then
1771 [ + + + + ]: 13 : if(spgroupma==459 .or. spgroupma==463)symafm(2:3)=-1
1772 [ + + ]: 7 : if(spgroupma==460 .or. spgroupma==464)symafm(4)=-1
1773 [ + + ]: 7 : if(spgroupma==460 .or. spgroupma==464)symafm(2)=-1
1774 [ + + + + ]: 13 : if(spgroupma==461 .or. spgroupma==462)symafm(3:4)=-1
1775 : : end if
1776 : : case (64) !Cmca
1777 [ + + ]: 44 : tnons(:,2)=(/0.d0,0.5d0,0.5d0/)
1778 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
1779 [ + + ]: 44 : tnons(:,3)=(/0.d0,0.5d0,0.5d0/)
1780 [ + + + + ]: 143 : symrel(:,:,4) = genpmm(:,:)
1781 : : case (67) !Cmma
1782 [ + + ]: 36 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1783 [ + + + + ]: 117 : symrel(:,:,4) = genpmm(:,:)
1784 [ + + + + ]: 117 : symrel(:,:,3) = genmpm(:,:)
1785 [ + + ]: 36 : tnons(:,3)=(/0.d0,0.5d0,0.d0/)
1786 : : case (68) !Ccca
1787 [ + + + + ]: 273 : symrel(:,:,3) = genmpm(:,:)
1788 [ + + + + ]: 273 : symrel(:,:,4) = genpmm(:,:)
1789 [ + + + + ]: 273 : symrel(:,:,5) = genmmm(:,:)
1790 [ + + + + ]: 273 : symrel(:,:,6) = genppm(:,:)
1791 [ + + + + ]: 273 : symrel(:,:,7) = genpmp(:,:)
1792 [ + + + + ]: 273 : symrel(:,:,8) = genmpp(:,:)
1793 [ + + ]: 21 : if (spgorig==1) then
1794 [ + + ]: 60 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/)
1795 [ + + ]: 60 : tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
1796 [ + + ]: 60 : tnons(:,5)=(/0.d0,0.5d0,0.5d0/)
1797 [ + + ]: 60 : tnons(:,6)=(/0.5d0,0.d0,0.5d0/)
1798 [ + + ]: 60 : tnons(:,7)=(/0.d0,0.5d0,0.5d0/)
1799 [ + + ]: 60 : tnons(:,8)=(/0.5d0,0.d0,0.5d0/)
1800 : : else
1801 [ + + ]: 24 : tnons(:,2)=(/0.5d0,0.d0,0.d0/)
1802 [ + + ]: 24 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
1803 [ + + ]: 24 : tnons(:,4)=(/0.5d0,0.d0,0.5d0/)
1804 [ + + ]: 24 : tnons(:,6)=(/0.5d0,0.d0,0.d0/)
1805 [ + + ]: 24 : tnons(:,7)=(/0.d0,0.d0,0.5d0/)
1806 [ + + ]: 24 : tnons(:,8)=(/0.5d0,0.d0,0.5d0/)
1807 : : end if
1808 [ + + ]: 21 : if(shubnikov==3)then
1809 [ + + + + : 5 : if(spgroupma==513)then
+ - ]
1810 [ + + ]: 3 : symafm(2:3)=-1 ; symafm(5)=-1 ; symafm(8)=-1
1811 : : else if(spgroupma==514)then
1812 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(5:6)=-1
1813 : : else if(spgroupma==515)then
1814 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(7:8)=-1
1815 : : else if(spgroupma==516)then
1816 [ + + ]: 5 : symafm(2:8:2)=-1
1817 : : else if(spgroupma==517)then
1818 [ + + ]: 5 : symafm(5:8)=-1
1819 : : end if
1820 : : end if
1821 : 21 : nogen=0
1822 : : case (70) !Fddd
1823 [ + + + + ]: 65 : symrel(:,:,3) = genmpm(:,:)
1824 [ + + + + ]: 65 : symrel(:,:,4) = genpmm(:,:)
1825 [ + + + + ]: 65 : symrel(:,:,5) = genmmm(:,:)
1826 [ + + + + ]: 65 : symrel(:,:,6) = genppm(:,:)
1827 [ + + + + ]: 65 : symrel(:,:,7) = genpmp(:,:)
1828 [ + + + + ]: 65 : symrel(:,:,8) = genmpp(:,:)
1829 [ - + ]: 5 : if (spgorig==1) then
1830 [ + + ]: 20 : tnons(:,5)=(/0.25d0,0.25d0,0.25d0/)
1831 [ + + ]: 20 : tnons(:,6)=(/0.25d0,0.25d0,0.25d0/)
1832 [ + + ]: 20 : tnons(:,7)=(/0.25d0,0.25d0,0.25d0/)
1833 [ + + ]: 20 : tnons(:,8)=(/0.25d0,0.25d0,0.25d0/)
1834 : : else
1835 [ # # ]: 0 : tnons(:,2)=(/0.75d0,0.75d0,0.d0/)
1836 [ # # ]: 0 : tnons(:,3)=(/0.75d0,0.d0,0.75d0/)
1837 [ # # ]: 0 : tnons(:,4)=(/0.d0,0.75d0,0.75d0/)
1838 : : ! JWZ DEBUGGING BEGIN
1839 : : ! the following lines were present in 5.7 as of Dec 10 2008 but
1840 : : ! gave wrong results in a spgroup 70 spgorig 2 case (Na2SO4)
1841 : : ! tnons(:,5)=(/0.25d0,0.25d0,0.d0/) ! original code
1842 : : ! tnons(:,6)=(/0.25d0,0.d0,0.25d0/) ! original code
1843 : : ! tnons(:,7)=(/0.d0,0.25d0,0.25d0/) ! original code
1844 : : ! here are the corrected values of tnons for this case
1845 [ # # ]: 0 : tnons(:,5)=(/0.0d0,0.0d0,0.0d0/)
1846 [ # # ]: 0 : tnons(:,6)=(/0.25d0,0.25d0,0.0d0/)
1847 [ # # ]: 0 : tnons(:,7)=(/0.25d0,0.0d0,0.25d0/)
1848 [ # # ]: 0 : tnons(:,8)=(/0.0d0,0.25d0,0.25d0/)
1849 : : ! JWZ DEBUGGING END
1850 : : end if
1851 [ + + ]: 5 : if(shubnikov==3)then
1852 [ + + ]: 3 : if(spgroupma==529)then
1853 [ + + ]: 3 : symafm(2:3)=-1 ; symafm(5)=-1 ; symafm(8)=-1
1854 [ + + ]: 2 : else if(spgroupma==530)then
1855 [ + + + + ]: 6 : symafm(3:4)=-1 ; symafm(7:8)=-1
1856 [ + - ]: 1 : else if(spgroupma==531)then
1857 [ + + ]: 5 : symafm(5:8)=-1
1858 : : end if
1859 : : end if
1860 : 5 : nogen=0
1861 : : case (74) !Imma
1862 [ + + ]: 32 : tnons(:,2)=(/0.d0,0.5d0,0.d0/)
1863 [ + + + + ]: 104 : symrel(:,:,3) = genmpm(:,:)
1864 [ + + ]: 32 : tnons(:,3)=(/0.d0,0.5d0,0.d0/)
1865 [ + + + + : 625 : symrel(:,:,4) = genpmm(:,:)
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + -
+ + + + ]
1866 : : end select
1867 : :
1868 [ + + ]: 521 : if (shubnikov==3) then
1869 : 256 : select case (spgroupma)
1870 : : case (59,68,80,89,101,113,125,137,146,158,167,174,182,189,197,&
1871 : : & 205,213,221,226,231,237,243,270,292,296,308,312,324,328,340,344,&
1872 : : & 358,370,380,384,420,424,444,448,460,464,472,476)
1873 : 43 : symafm(2)=-1
1874 : 43 : symafm(4)=-1
1875 : : case (69,90,102,114,126,147,175,190,198,206,214,244)
1876 [ + + ]: 36 : symafm(2:3)=-1
1877 : : case (60,70,81,91,103,115,127,138,148,159,168,176,183,191,199,&
1878 : : & 207,215,222,227,232,238,245,252,268,269,293,294,309,310,&
1879 : : & 325,326,341,342,356,357,368,369,381,382,396,397,421,422,436,445,&
1880 : : & 446,461,462,473,474,484,485,494,495,504,505,524,536,&
1881 : : & 542,543,551,557,558)
1882 [ + + ]: 189 : symafm(3:4)=-1
1883 : : case (251,267,291,295,307,311,323,327,339,343,355,367,379,383,&
1884 : : & 395,398,419,423,435,443,447,459,463,&
1885 : : & 471,475,483,486,493,496,503,506,523,535,541,544,550,556,559)
1886 [ + + + + : 327 : symafm(2:3)=-1
+ + + ]
1887 : :
1888 : : end select
1889 : : end if
1890 : :
1891 [ + + ]: 521 : if (nogen>1)then
1892 : 466 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
1893 : : end if
1894 : :
1895 : 521 : call spgdata(brvsb,intsb,intsbl,ptintsb,ptschsb,schsb,spgaxor,spgroup,sporder,spgorig)
1896 : :
1897 : : !DEBUG
1898 : : !write(std_out,*)'symsgortho : end of symmetry assignement'
1899 : : !ENDDEBUG
1900 : :
1901 : 521 : end subroutine symsgortho
1902 : : !!***
1903 : :
1904 : : !!****f* m_symsg/symsgtetra
1905 : : !! NAME
1906 : : !! symsgtetra
1907 : : !!
1908 : : !! FUNCTION
1909 : : !! Yields all the TETRAGONAL symmetry operations starting from the space group symbol.
1910 : : !! according to the International Tables of Crystallography, 1983.
1911 : : !!
1912 : : !! INPUTS
1913 : : !! msym = default number of symmetries
1914 : : !! nsym = the number of symmetry operations
1915 : : !! shubnikov= magnetic type of the space group to be generated
1916 : : !! spgorig = the origin choice (1 or 2) for the axes system
1917 : : !! spgroup = the numeric symbol of the space groups
1918 : : !! spgroupma= number of the magnetic space group
1919 : : !!
1920 : : !! OUTPUT
1921 : : !! symafm(nsym)=(anti)ferromagnetic part of symmetry operations
1922 : : !! symrel(3,3,nsym) = 3D matrix containg symmetry operations
1923 : : !! tnons(3,nsym) = 2D matrix containing translations associated
1924 : : !!
1925 : : !! SOURCE
1926 : :
1927 : 1018 : subroutine symsgtetra(msym,nsym,shubnikov,spgaxor,spgorig,spgroup,spgroupma,symafm,symrel,tnons)
1928 : :
1929 : : !Arguments ------------------------------------
1930 : : !scalars
1931 : : integer,intent(in) :: msym,nsym,shubnikov,spgaxor,spgorig,spgroup
1932 : : integer,intent(in) :: spgroupma
1933 : : !arrays
1934 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym) !vz_i
1935 : : real(dp),intent(inout) :: tnons(3,msym) !vz_i
1936 : :
1937 : : !Local variables ------------------------------
1938 : : !integer :: isym
1939 : : !scalars
1940 : : integer :: nogen,sporder
1941 : : character(len=1) :: brvsb
1942 : : character(len=15) :: intsb,ptintsb,ptschsb,schsb
1943 : : character(len=35) :: intsbl
1944 : : !arrays
1945 : : integer :: gen4m(3,3),genmmm(3,3),genmmp(3,3),genmpm(3,3),genmpp(3,3)
1946 : : integer :: genpmm(3,3),genpmp(3,3),genppm(3,3)
1947 : :
1948 : : ! *************************************************************************
1949 : : !DEBUG
1950 : : !write(std_out,*) ' symsgtetra: ',spgroup,shubnikov,spgroupma
1951 : : !ENDDEBUG
1952 : 509 : nogen=0
1953 : :
1954 [ + + + + ]: 782333 : tnons(:,:)=zero
1955 : : !The identity operation belongs to all space groups
1956 [ + + + + ]: 6617 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
1957 : :
1958 : : !The next operation belongs to most TETRAGONAL space groups, except 81,82,111,121.
1959 [ + + + + ]: 6617 : symrel(:,:,2)=0 ; symrel(1,2,2)=-1 ; symrel(2,1,2)=1 ; symrel(3,3,2)=1
1960 : :
1961 : : !Predefine some generators
1962 : 509 : genmpp(:,:)=0 ; genmpp(1,1)=-1 ; genmpp(2,2)= 1 ; genmpp(3,3)= 1
1963 : 509 : genpmp(:,:)=0 ; genpmp(1,1)= 1 ; genpmp(2,2)=-1 ; genpmp(3,3)= 1
1964 : 509 : genppm(:,:)=0 ; genppm(1,1)= 1 ; genppm(2,2)= 1 ; genppm(3,3)=-1
1965 : 509 : genpmm(:,:)=0 ; genpmm(1,1)= 1 ; genpmm(2,2)=-1 ; genpmm(3,3)=-1
1966 : 509 : genmpm(:,:)=0 ; genmpm(1,1)=-1 ; genmpm(2,2)= 1 ; genmpm(3,3)=-1
1967 : 509 : genmmp(:,:)=0 ; genmmp(1,1)=-1 ; genmmp(2,2)=-1 ; genmmp(3,3)= 1
1968 : 509 : genmmm(:,:)=0 ; genmmm(1,1)=-1 ; genmmm(2,2)=-1 ; genmmm(3,3)=-1
1969 : 509 : gen4m(:,:)=0 ; gen4m(1,2)=-1 ; gen4m(2,1)=1 ; gen4m(3,3)=-1
1970 : :
1971 : : !Default non-magnetic behaviour
1972 [ + + ]: 5593 : symafm(1:nsym)=1
1973 : :
1974 : :
1975 : : !assigns the generators to each space group
1976 : 529 : select case (spgroup)
1977 : : ! TETRAGONAL space groups
1978 : : case (75,79,83,87) !P4, I4, P4/m, I4/m
1979 : 20 : nogen=2
1980 : : case (76,80) !P41, I41
1981 [ + + ]: 32 : tnons(:,2)=(/0.d0,0.d0,0.25d0/)
1982 : 8 : nogen=2
1983 : : case (77,84) !P42, P42/m
1984 [ + + ]: 48 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
1985 : 12 : nogen=2
1986 : : case (78) !P43
1987 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.d0,0.75d0/)
1988 : 5 : nogen=2
1989 : : case (81,82) !PB4, IB4
1990 [ + + + + ]: 104 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
1991 [ + + + + ]: 104 : symrel(:,:,2)=0 ; symrel(1,1,2)=-1; symrel(2,2,2)=-1; symrel(3,3,2)=1
1992 [ + + + + ]: 104 : symrel(:,:,3)=0 ; symrel(1,2,3)=1 ; symrel(2,1,3)=-1 ; symrel(3,3,3)=-1
1993 [ + + + + ]: 104 : symrel(:,:,4)=0 ; symrel(1,2,4)=-1 ; symrel(2,1,4)=1 ; symrel(3,3,4)=-1
1994 : : nogen=0
1995 [ + + ]: 8 : if (shubnikov==3) then
1996 [ + + ]: 6 : symafm(3:4)=-1
1997 : : end if
1998 : : case (85,86,88) !P4/n
1999 [ + + + + : 475 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1 ; symrel(:,:,5) = -1*symrel(:,:,1)
+ + + + ]
2000 [ + + + + : 475 : symrel(:,:,2)=0 ; symrel(1,1,2)=-1; symrel(2,2,2)=-1; symrel(3,3,2)=1 ; symrel(:,:,6) = -1*symrel(:,:,2)
+ + + + ]
2001 [ + + + + : 475 : symrel(:,:,3)=0 ; symrel(1,2,3)=-1 ; symrel(2,1,3)=1 ; symrel(3,3,3)=1 ; symrel(:,:,7) = -1*symrel(:,:,3)
+ + + + ]
2002 [ + + + + : 475 : symrel(:,:,4)=0 ; symrel(1,2,4)=1 ; symrel(2,1,4)=-1 ; symrel(3,3,4)=1 ; symrel(:,:,8) = -1*symrel(:,:,4)
+ + + + ]
2003 : : nogen=0
2004 [ + - ]: 19 : if(spgorig==1) then
2005 : : select case (spgroup)
2006 : : case (85) !P4/n
2007 [ + + + + ]: 56 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
2008 [ + + + + ]: 56 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
2009 : : case (86) !P42/n
2010 [ + + + + ]: 56 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
2011 [ + + + + ]: 56 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/) ; tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
2012 : : case (88) !I41/a
2013 [ + + ]: 20 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
2014 [ + + ]: 20 : tnons(:,3)=(/0.0d0,0.5d0,0.25d0/)
2015 [ + + ]: 20 : tnons(:,4)=(/0.5d0,0.0d0,0.75d0/)
2016 [ + + ]: 20 : tnons(:,5)=(/0.0d0,0.5d0,0.25d0/)
2017 [ + + ]: 20 : tnons(:,6)=(/0.5d0,0.0d0,0.75d0/)
2018 [ + + + - : 39 : tnons(:,7)=(/0.5d0,0.5d0,0.5d0/)
+ + ]
2019 : : end select
2020 : : else
2021 : : select case (spgroup)
2022 : : case (85) !P4/n
2023 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
2024 [ # # # # ]: 0 : tnons(:,3)=(/0.5d0,0.0d0,0.d0/) ; tnons(:,7)=(/0.5d0,0.0d0,0.d0/)
2025 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.d0/) ; tnons(:,8)=(/0.0d0,0.5d0,0.d0/)
2026 : : case (86) !P42/n
2027 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.0d0/) ; tnons(:,6)=(/0.5d0,0.5d0,0.0d0/)
2028 [ # # # # ]: 0 : tnons(:,3)=(/0.0d0,0.5d0,0.5d0/) ; tnons(:,7)=(/0.0d0,0.5d0,0.5d0/)
2029 [ # # # # ]: 0 : tnons(:,4)=(/0.5d0,0.0d0,0.5d0/) ; tnons(:,8)=(/0.5d0,0.0d0,0.5d0/)
2030 : : case (88) !I41/a
2031 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.0d0,0.5d0/) ; tnons(:,6)=(/0.5d0,0.0d0,0.5d0/)
2032 [ # # ]: 0 : tnons(:,3)=(/0.75d0,0.25d0,0.25d0/)
2033 [ # # ]: 0 : tnons(:,7)=(/0.25d0,0.75d0,0.75d0/)
2034 [ # # ]: 0 : tnons(:,4)=(/0.75d0,0.75d0,0.75d0/)
2035 [ # # # # : 0 : tnons(:,8)=(/0.25d0,0.25d0,0.25d0/)
# # ]
2036 : : end select
2037 : : end if
2038 [ + + ]: 19 : if (shubnikov==3) then
2039 : 12 : select case (spgroupma)
2040 : : case(61,69,83)
2041 : 3 : symafm(3)=-1;symafm(4)=-1;symafm(7)=-1; symafm(8)=-1
2042 : : case(62,70,84)
2043 : 3 : symafm(5)=-1;symafm(6)=-1;symafm(7)=-1; symafm(8)=-1
2044 : : case(63,71,85)
2045 [ + + + - ]: 9 : symafm(3)=-1;symafm(5)=-1;symafm(4)=-1; symafm(6)=-1
2046 : : end select
2047 : : end if
2048 : : case (89,97) !P422, I422
2049 [ + + + + ]: 156 : symrel(:,:,3) = genmpm(:,:)
2050 : 12 : nogen=3
2051 : : case (90) !P4212
2052 [ + + ]: 28 : tnons(:,2)=(/0.5d0,0.5d0,0.0d0/)
2053 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2054 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
2055 : 7 : nogen=3
2056 : : case (91) !P4122
2057 [ + + ]: 28 : tnons(:,2)=(/0.d0,0.d0,0.25d0/)
2058 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2059 : 7 : nogen=3
2060 : : case (92) !P41212
2061 [ + + ]: 28 : tnons(:,2)=(/0.5d0,0.5d0,0.25d0/)
2062 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2063 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.25d0/)
2064 : 7 : nogen=3
2065 : : case (93) !P4222
2066 [ + + ]: 28 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
2067 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2068 : 7 : nogen=3
2069 : : case (94) !P42212
2070 [ + + ]: 28 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
2071 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2072 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
2073 : 7 : nogen=3
2074 : : case (95) !P4322
2075 [ + + ]: 28 : tnons(:,2)=(/0.d0,0.d0,0.75d0/)
2076 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2077 : 7 : nogen=3
2078 : : case (96) !P43212
2079 [ + + ]: 28 : tnons(:,2)=(/0.5d0,0.5d0,0.75d0/)
2080 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2081 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.75d0/)
2082 : 7 : nogen=3
2083 : : case (98) !I4122
2084 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.5d0,0.25d0/)
2085 [ + + + + ]: 65 : symrel(:,:,3) = genmpm(:,:)
2086 [ + + ]: 20 : tnons(:,3)=(/0.5d0,0.0d0,0.75d0/)
2087 : 5 : nogen=3
2088 : : case (99,107,123,139) !P4mm, I4mm, P4/mmm, I4/mmm
2089 [ + + + + ]: 455 : symrel(:,:,3) = genpmp(:,:)
2090 : 35 : nogen=3
2091 : : case (100) !P4bm
2092 [ + + + + ]: 91 : symrel(:,:,3) = genpmp(:,:)
2093 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
2094 : 7 : nogen=3
2095 : : case (101,132) !P42cm, P42/mcm
2096 [ + + ]: 72 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
2097 [ + + + + ]: 234 : symrel(:,:,3) = genpmp(:,:)
2098 [ + + ]: 72 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
2099 : 18 : nogen=3
2100 : : case (102) !P42nm
2101 [ + + ]: 28 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
2102 [ + + + + ]: 91 : symrel(:,:,3) = genpmp(:,:)
2103 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
2104 : 7 : nogen=3
2105 : : case (103,124) !P4cc, P4/mcc
2106 [ + + + + ]: 234 : symrel(:,:,3) = genpmp(:,:)
2107 [ + + ]: 72 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
2108 : 18 : nogen=3
2109 : : case (104) !P4nc
2110 [ + + + + ]: 91 : symrel(:,:,3) = genpmp(:,:)
2111 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
2112 : 7 : nogen=3
2113 : : case (105,131) !P42mc, P42/mmc
2114 [ + + ]: 72 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
2115 [ + + + + ]: 234 : symrel(:,:,3) = genpmp(:,:)
2116 : 18 : nogen=3
2117 : : case (106,135) !P42bc, P42/mbc
2118 [ + + ]: 72 : tnons(:,2)=(/0.d0,0.d0,0.5d0/)
2119 [ + + + + ]: 234 : symrel(:,:,3) = genpmp(:,:)
2120 [ + + ]: 72 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
2121 : 18 : nogen=3
2122 : : case (108) !I4cm
2123 [ + + + + ]: 65 : symrel(:,:,3) = genpmp(:,:)
2124 [ + + ]: 20 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
2125 : 5 : nogen=3
2126 : : case (109) !I41md
2127 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.5d0,0.25d0/)
2128 [ + + + + ]: 65 : symrel(:,:,3) = genpmp(:,:)
2129 [ + + + + ]: 65 : symrel(:,:,4) = genmmp(:,:)
2130 [ + + ]: 20 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
2131 : 5 : nogen=4
2132 : : case (110) !I41cd
2133 [ + + ]: 20 : tnons(:,2)=(/0.d0,0.5d0,0.25d0/)
2134 [ + + + + ]: 65 : symrel(:,:,3) = genpmp(:,:)
2135 [ + + ]: 20 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
2136 [ + + + + ]: 65 : symrel(:,:,4) = genmmp(:,:)
2137 [ + + ]: 20 : tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
2138 : 5 : nogen=4
2139 : : case (111,121) !PB42m, IB42m
2140 [ + + + + ]: 156 : symrel(:,:,2) = gen4m(:,:)
2141 [ + + + + ]: 156 : symrel(:,:,3) = genmpm(:,:)
2142 : 12 : nogen=3
2143 : : case (112) !PB42c
2144 [ + + + + ]: 91 : symrel(:,:,2) = gen4m(:,:)
2145 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2146 [ + + ]: 28 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
2147 : 7 : nogen=3
2148 : : case (113) !PB421m
2149 [ + + + + ]: 91 : symrel(:,:,2) = gen4m(:,:)
2150 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2151 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
2152 : 7 : nogen=3
2153 : : case (114) !PB421c
2154 [ + + + + ]: 91 : symrel(:,:,2) = gen4m(:,:)
2155 [ + + + + ]: 91 : symrel(:,:,3) = genmpm(:,:)
2156 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
2157 : 7 : nogen=3
2158 : : case (115,119) !PB4m2,IB4m2
2159 [ + + + + ]: 156 : symrel(:,:,2) = gen4m(:,:)
2160 [ + + + + ]: 156 : symrel(:,:,3) = genpmp(:,:)
2161 : 12 : nogen=3
2162 : : case (116,120) !PB4c2, IB4c2
2163 [ + + + + ]: 156 : symrel(:,:,2) = gen4m(:,:)
2164 [ + + + + ]: 156 : symrel(:,:,3) = genpmp(:,:)
2165 [ + + ]: 48 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
2166 : 12 : nogen=3
2167 : : case (117) !PB4b2
2168 [ + + + + ]: 91 : symrel(:,:,2) = gen4m(:,:)
2169 [ + + + + ]: 91 : symrel(:,:,3) = genpmp(:,:)
2170 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
2171 : 7 : nogen=3
2172 : : case (118) !PB4n2
2173 [ + + + + ]: 91 : symrel(:,:,2) = gen4m(:,:)
2174 [ + + + + ]: 91 : symrel(:,:,3) = genpmp(:,:)
2175 [ + + ]: 28 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
2176 : 7 : nogen=3
2177 : : case (122) !IB42d
2178 [ + + + + ]: 65 : symrel(:,:,2)=0 ; symrel(1,2,2)=-1 ; symrel(2,1,2)=1 ; symrel(3,3,2)=-1
2179 [ + + + + ]: 65 : symrel(:,:,3) = genmpm(:,:)
2180 [ + + ]: 20 : tnons(:,3)=(/0.5d0,0.d0,0.75d0/)
2181 : 5 : nogen=3
2182 : : case (125,126,129,130,133,134,137,138,141,142)
2183 [ + + + + ]: 1404 : symrel(:,:,1)=0 ; symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
2184 [ + + + + ]: 1404 : symrel(:,:,2)=0 ; symrel(1,1,2)=-1; symrel(2,2,2)=-1; symrel(3,3,2)=1
2185 [ + + + + ]: 1404 : symrel(:,:,3)=0 ; symrel(1,2,3)=-1 ; symrel(2,1,3)=1 ; symrel(3,3,3)=1
2186 [ + + + + ]: 1404 : symrel(:,:,4)=0 ; symrel(1,2,4)=1 ; symrel(2,1,4)=-1 ; symrel(3,3,4)=1
2187 [ + + + + ]: 1404 : symrel(:,:,5) = genmpm(:,:)
2188 [ + + + + ]: 1404 : symrel(:,:,6) = genmmm(:,:)
2189 [ + - ]: 108 : if (spgorig==1) then
2190 : : select case (spgroup)
2191 : : case (125) !P4/nbm
2192 [ + + ]: 44 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
2193 : : case (126) !P4/nnc
2194 [ + + ]: 44 : tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
2195 : : case (129) !P4/nmm
2196 [ + + + + ]: 88 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
2197 [ + + + + ]: 88 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
2198 : : case (130) !P4/ncc
2199 [ + + + + ]: 88 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.d0/)
2200 [ + + ]: 44 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/)
2201 [ + + ]: 44 : tnons(:,6)=(/0.5d0,0.5d0,0.d0/)
2202 : : case (133) !P42/nbc
2203 [ + + + + ]: 88 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
2204 [ + + ]: 44 : tnons(:,5)=(/0.d0,0.d0,0.5d0/)
2205 [ + + ]: 44 : tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
2206 : : case (134) !P42/nnm
2207 [ + + + + ]: 88 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
2208 [ + + ]: 44 : tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
2209 : : case (137) !P42/nmc
2210 [ + + + + ]: 88 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
2211 [ + + + + ]: 88 : tnons(:,5)=(/0.5d0,0.5d0,0.5d0/) ; tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
2212 : : case (138) !P42/ncm
2213 [ + + + + ]: 88 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/) ; tnons(:,4)=(/0.5d0,0.5d0,0.5d0/)
2214 [ + + + + ]: 88 : tnons(:,5)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,6)=(/0.5d0,0.5d0,0.5d0/)
2215 : : case (141) !I41/amd
2216 [ + + ]: 44 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
2217 [ + + ]: 44 : tnons(:,3)=(/0.d0,0.5d0,0.25d0/)
2218 [ + + + + ]: 88 : tnons(:,4)=(/0.5d0,0.d0,0.75d0/) ; tnons(:,5)=(/0.5d0,0.d0,0.75d0/)
2219 [ + + ]: 44 : tnons(:,6)=(/0.d0,0.5d0,0.25d0/)
2220 : : case (142) !I41/acd
2221 [ + + ]: 36 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
2222 [ + + ]: 36 : tnons(:,3)=(/0.d0,0.5d0,0.25d0/)
2223 [ + + ]: 36 : tnons(:,4)=(/0.5d0,0.d0,0.75d0/)
2224 [ + + ]: 36 : tnons(:,5)=(/0.5d0,0.d0,0.25d0/)
2225 [ + + + + : 144 : tnons(:,6)=(/0.d0,0.5d0,0.25d0/)
+ + + + +
+ - + + ]
2226 : : end select
2227 : : else
2228 : : select case (spgroup)
2229 : : case (125) !P4/nbm
2230 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.d0/)
2231 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.d0/) ; tnons(:,5)=(/0.5d0,0.d0,0.d0/)
2232 : : case (126) !P4/nnc
2233 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.d0/)
2234 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.d0/) ; tnons(:,5)=(/0.5d0,0.d0,0.5d0/)
2235 : : case (129) !P4/nmm
2236 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.d0/)
2237 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.d0/) ; tnons(:,5)=(/0.0d0,0.5d0,0.d0/)
2238 : : case (130) !P4/ncc
2239 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.d0/)
2240 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.d0/) ; tnons(:,5)=(/0.0d0,0.5d0,0.5d0/)
2241 : : case (133) !P42/nbc
2242 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
2243 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.5d0/) ; tnons(:,5)=(/0.5d0,0.d0,0.d0/)
2244 : : case (134) !P42/nnm
2245 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
2246 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.5d0/) ; tnons(:,5)=(/0.5d0,0.d0,0.5d0/)
2247 : : case (137) !P42/nmc
2248 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
2249 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.5d0/) ; tnons(:,5)=(/0.d0,0.5d0,0.d0/)
2250 : : case (138) !P42/ncm
2251 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.5d0,0.d0/) ; tnons(:,3)=(/0.5d0,0.d0,0.5d0/)
2252 [ # # # # ]: 0 : tnons(:,4)=(/0.0d0,0.5d0,0.5d0/) ; tnons(:,5)=(/0.d0,0.5d0,0.5d0/)
2253 : : case (141) !I41/amd
2254 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/) ; tnons(:,3)=(/0.25d0,0.75d0,0.25d0/)
2255 [ # # # # ]: 0 : tnons(:,4)=(/0.25d0,0.25d0,0.75d0/) ; tnons(:,5)=(/0.5d0,0.d0,0.5d0/)
2256 : : case (142) !I41/acd
2257 [ # # # # ]: 0 : tnons(:,2)=(/0.5d0,0.d0,0.5d0/) ; tnons(:,3)=(/0.25d0,0.75d0,0.25d0/)
2258 [ # # # # : 0 : tnons(:,4)=(/0.25d0,0.25d0,0.75d0/) ; tnons(:,5)=(/0.5d0,0.d0,0.d0/)
# # # # #
# # # # #
# ]
2259 : : end select
2260 : : end if
2261 : 108 : nogen=6
2262 : : case (127) !P4/mbm
2263 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
2264 [ + + ]: 44 : tnons(:,3)=(/0.5d0,0.5d0,0.d0/)
2265 : 11 : nogen=3
2266 : : case (128) !P4/mnc
2267 [ + + + + ]: 143 : symrel(:,:,3) = genmpm(:,:)
2268 [ + + ]: 44 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
2269 : 11 : nogen=3
2270 : : case (136) !P42/mnm
2271 [ + + ]: 52 : tnons(:,2)=(/0.5d0,0.5d0,0.5d0/)
2272 [ + + + + ]: 169 : symrel(:,:,3) = genmpm(:,:)
2273 [ + + ]: 52 : tnons(:,3)=(/0.5d0,0.5d0,0.5d0/)
2274 : 13 : nogen=3
2275 : : case (140) !I4/mcm
2276 [ + + + + ]: 117 : symrel(:,:,3) = genmpm(:,:)
2277 [ + + ]: 36 : tnons(:,3)=(/0.d0,0.d0,0.5d0/)
2278 [ + + + + : 518 : nogen=3
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ - ]
2279 : : end select
2280 : :
2281 [ + + ]: 509 : if(shubnikov==3)then
2282 : 334 : select case(spgroupma)
2283 : : case(3,9,15,21,27,31,45,47,53,55,77,79,&
2284 : : & 89,97,105,113,121,129,137,145,153,159,166,174,182,190,198,206,&
2285 : : & 214,222,230,236,242,248,254,262,270,278,285,293,301,309,317,&
2286 : : & 323,330,336,343,346,355,358,391,392,403,404,&
2287 : : & 439,442,451,454,487,490,499,500,535,&
2288 : : & 538,545,546)
2289 : 66 : symafm(2)=-1
2290 : : case(90,98,106,114,122,130,138,146,154,160,167,175,183,191,199,&
2291 : : & 207,215,223,231,237,243,249,255,263,271,279,287,295,303,311,319,&
2292 : : & 325,331,337,345,347,357,359,389,393,401,405,441,443,453,455,&
2293 : : & 489,491,497,501,537,539,543,547)
2294 : 54 : symafm(3)=-1
2295 : : case(91,99,107,115,123,131,139,147,155,161,165,173,181,189,&
2296 : : & 197,205,213,221,229,235,241,247,253,261,269,277,286,294,302,310,&
2297 : : & 318,324,329,335,342,344,354,356,390,394,402,406,&
2298 : : & 438,440,450,452,486,488,498,502,534,536,544,548)
2299 [ + + ]: 162 : symafm(2:3)=-1
2300 : : ! case(365,377,413,425,461,473,509,521) !XG230719
2301 : : ! symafm(2)=-1
2302 : : ! symafm(5:6)=-1
2303 : : case(366,378,414,426,462,474,510,522,554,564)
2304 [ + + ]: 40 : symafm(3:5)=-1
2305 : : case(367,379,415,427,463,475,511,523,555,565)
2306 [ + + ]: 30 : symafm(3:4)=-1
2307 : : case(368,380,416,428,464,476,512,524,556,566)
2308 [ + + ]: 30 : symafm(3:4)=-1
2309 : 10 : symafm(6)=-1
2310 : : ! case(369,381,417,429,465,477,513,525) !XG230719
2311 : : ! symafm(2)=-1
2312 : : ! symafm(5)=-1
2313 : : case(370,382,418,430,466,478,514,526,558,568)
2314 [ + + ]: 50 : symafm(3:6)=-1
2315 : : case(371,383,419,431,467,479,515,527,559,569)
2316 : 10 : symafm(6)=-1
2317 : : ! case(553,563)
2318 : : case(365,377,413,425,461,473,509,521,553,563) !XG230719
2319 [ + + ]: 30 : symafm(5:6)=-1
2320 : : ! case(557,567)
2321 : : case(369,381,417,429,465,477,513,525,557,567) !XG230719
2322 [ + + + + : 268 : symafm(5)=-1
+ + + + +
+ + ]
2323 : : end select
2324 : : end if
2325 : :
2326 : : !DEBUG
2327 : : !write(std_out,*)' symsgtetra : symrel(:,:,6)=',symrel(:,:,6)
2328 : : !ENDDEBUG
2329 : :
2330 [ + + ]: 509 : if (nogen>1) then
2331 : 482 : call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
2332 : : end if
2333 : :
2334 : 509 : call spgdata(brvsb,intsb,intsbl,ptintsb,ptschsb,schsb,spgaxor,spgroup,sporder,spgorig)
2335 : :
2336 : : !DEBUG
2337 : : !write(std_out,*)' symsgtetra : exit'
2338 : : !do isym=1,nsym
2339 : : !write(std_out,'(i3,2x,9i3,3es13.3,i3)') isym,symrel(:,:,isym),tnons(:,isym),symafm(isym)
2340 : : !end do
2341 : : !ENDDEBUG
2342 : :
2343 : 509 : end subroutine symsgtetra
2344 : : !!***
2345 : :
2346 : : !!****f* m_symsg/bldgrp
2347 : : !! NAME
2348 : : !! bldgrp
2349 : : !!
2350 : : !! FUNCTION
2351 : : !! Yields all the symmetry operations starting from the generators.
2352 : : !! Applies all the generators onto themselves, and obtains all the other operations.
2353 : : !! Iterates until it reaches nsym.
2354 : : !!
2355 : : !! INPUTS
2356 : : !! msym = default number of symmetry operations
2357 : : !! nsym = number of symmetry operations
2358 : : !! symafm(msym)=(anti)ferromagnetic part of symmetry operations
2359 : : !! symrel(3,3,msym) = 3D matrix containg symmetry operations
2360 : : !! tnons(3,msym) = 2D matrix containing translations of the symmery operations
2361 : : !!
2362 : : !! OUTPUT
2363 : : !!
2364 : : !! symafm(msym)=(anti)ferromagnetic part of symmetry operations
2365 : : !! symrel(3,3,msym) = 3D matrix containg symmetry operations
2366 : : !! tnons(3,msym) = 2D matrix containing translations of the symmery operations
2367 : : !!
2368 : : !! SIDE EFFECTS
2369 : : !! nogen = number of generators, number of operations to be applied onto themselves
2370 : : !!
2371 : : !! SOURCE
2372 : :
2373 : 1405 : subroutine bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
2374 : :
2375 : : !Arguments ------------------------------------
2376 : : !scalars
2377 : : integer,intent(in) :: msym,nsym
2378 : : integer,intent(inout) :: nogen
2379 : : !arrays
2380 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym)
2381 : : real(dp),intent(inout) :: tnons(3,msym)
2382 : :
2383 : : !Local variables ------------------------------
2384 : : !matrintoper(3,3) & matrinttransl(3) are intermediate arrays of the new
2385 : : ! symmetry operations obtained, in order to check their uniqueness.
2386 : : !flagop,flagtr = flags used during the checking of the similarity between
2387 : : ! the obtained operation and the already existent ones
2388 : : !ii,ijk,ijkl,jjj,kk = counters in the cycles
2389 : : !scalars
2390 : : integer :: flagop,flagtr,ii,ijk,ijkl,jjj,kk,matrintsymafm,nogen_new
2391 : : real(dp) :: nastyzero
2392 : : character(len=500) :: message
2393 : : !arrays
2394 : 2810 : integer :: bcksymafm(2*msym),bcksymrel(3,3,2*msym),matrintoper(3,3)
2395 : 2810 : real(dp) :: bcktnons(3,2*msym),matrinttransl(3)
2396 : :
2397 : : ! *************************************************************************
2398 : :
2399 : 1405 : nastyzero=0.1
2400 : :
2401 : : !DEBUG
2402 : 1405 : write(std_out,*)' bldgrp : enter, builds the space group symmetry '
2403 : 1405 : write(std_out,*)' bldgrp : number of generators : ',nogen
2404 : 1405 : write(std_out,*)' bldgrp : nsym,msym=',nsym,msym
2405 : : !ENDDEBUG
2406 : :
2407 [ - + ]: 1405 : if (nogen<1) then
2408 : : write(message, '(a,i4,a,a,a,a,a)' )&
2409 : 0 : & 'The number of generators nogen is ',nogen,&
2410 : 0 : & 'and it should be greater than one',ch10,&
2411 : 0 : & 'This is not allowed. ',ch10,&
2412 : 0 : & 'Action: Contact ABINIT group '
2413 : 0 : ABI_ERROR(message)
2414 : : end if
2415 : :
2416 : : !Transfer the generators to bcksymrel
2417 [ + + ]: 6611 : do ii=1,nogen
2418 [ + + + + ]: 67678 : bcksymrel(:,:,ii)=symrel(:,:,ii)
2419 [ + + ]: 20824 : bcktnons(:,ii)=tnons(:,ii)
2420 : 6611 : bcksymafm(ii)=symafm(ii)
2421 : : end do
2422 : :
2423 : : !DEBUG
2424 : 1405 : write(std_out,*)' Describe the different generators (index,symrel,tnons,symafm)'
2425 [ + + ]: 6611 : do ii=1,nogen
2426 : 6611 : write(std_out,'(i3,2x,9i3,3es12.2,i3)')ii,symrel(:,:,ii),tnons(:,ii),symafm(ii)
2427 : : end do
2428 : : !ENDDEBUG
2429 : :
2430 : : !Simply iterate until the group is complete
2431 [ + - ]: 2195 : do ijkl=1,nsym
2432 : :
2433 : : ! DEBUG
2434 : 2195 : write(std_out,*)' bldgrp : in loop, ijkl,nogen=',ijkl,nogen
2435 : : ! ENDDEBUG
2436 : :
2437 : 2195 : nogen_new=nogen
2438 : :
2439 [ + + ]: 13189 : do jjj=2,nogen
2440 [ + + ]: 235941 : do kk=2,nogen
2441 : :
2442 : : ! Computing block of the new symmetry operation according to:
2443 : : ! ! $ { R1 | v1 }{ R2 | v2 } = { R1.R2 | v1+R1.v2 } $
2444 [ + + + + : 8910080 : matrintoper(:,:) = matmul(bcksymrel(:,:,jjj),bcksymrel(:,:,kk))
+ + ]
2445 [ + + + + : 6237056 : matrinttransl(:) = bcktnons(:,jjj)+matmul(bcksymrel(:,:,jjj),bcktnons(:,kk))
+ + + + +
+ ]
2446 : 222752 : matrintsymafm = bcksymafm(jjj)*bcksymafm(kk)
2447 : :
2448 : : ! Rescaling translation between 0 and 1
2449 [ + + ]: 891008 : do ii=1,3
2450 [ + + ]: 668256 : if (matrinttransl(ii)>=0.9) then
2451 [ + + ]: 230264 : do while (matrinttransl(ii)>=0.9)
2452 : 115132 : matrinttransl(ii)=matrinttransl(ii)-1.0
2453 : : end do
2454 : : end if
2455 [ + + ]: 668256 : if (matrinttransl(ii)<0.0) then
2456 [ + + ]: 218460 : do while (matrinttransl(ii)<0.0)
2457 : 109230 : matrinttransl(ii)=matrinttransl(ii)+1.0
2458 : : end do
2459 : : end if
2460 [ + + ]: 668256 : if ( abs(matrinttransl(ii))<nastyzero) matrinttransl(ii)=0.0
2461 [ + + ]: 891008 : if ( abs(matrinttransl(ii)-1.0)<nastyzero) matrinttransl(ii)=0.0
2462 : : end do
2463 : :
2464 : : ! Cheking block to validate the new symmetry operation
2465 [ + + ]: 14072073 : do ijk=1,nogen_new
2466 : :
2467 : 14063471 : flagop=0 ; flagtr=0
2468 : :
2469 : : ! Check for rotation similarity
2470 [ + + + + : 182825123 : if(sum((matrintoper-bcksymrel(:,:,ijk))**2)==0)flagop=1
+ + ]
2471 : :
2472 : : ! Check for translation similarity
2473 [ - + + - : 70317355 : if(maxval((matrinttransl-bcktnons(:,ijk))**2)<nastyzero**2)flagtr=1
+ + + + ]
2474 : :
2475 [ + + ]: 1632906 : if(flagop+flagtr==2)exit
2476 : :
2477 : : end do
2478 : :
2479 : : ! Add the new determined symmetry if it is unique
2480 [ + + ]: 233746 : if (flagtr+flagop<2) then
2481 : 8602 : nogen_new=nogen_new+1
2482 [ + + + + ]: 111826 : bcksymrel(:,:,nogen_new)=matrintoper(:,:)
2483 [ + + ]: 34408 : bcktnons(:,nogen_new)=matrinttransl(:)
2484 : 8602 : bcksymafm(nogen_new)=matrintsymafm
2485 : : ! DEBUG
2486 : 8602 : write(std_out,*)' added one more symmetry : nogen_new=',nogen_new
2487 : : write(std_out,'(i3,2x,9i3,3es12.2,i3)')&
2488 : 8602 : & nogen_new,bcksymrel(:,:,nogen_new),bcktnons(:,nogen_new),bcksymafm(nogen_new)
2489 : : ! ENDDEBUG
2490 : : end if
2491 : :
2492 : : end do
2493 : : end do
2494 : :
2495 : 2195 : nogen=nogen_new
2496 : :
2497 [ + + ]: 2195 : if(nogen==nsym)exit
2498 : :
2499 : : end do
2500 : :
2501 : : !Transfer of the calculated symmetry to the routine output
2502 [ + - ]: 1405 : if (nogen==nsym) then
2503 [ + + + + : 180909 : symrel(:,:,1:nsym)=bcksymrel(:,:,1:nsym)
+ + ]
2504 [ + + + + ]: 56637 : tnons(:,1:nsym)=bcktnons(:,1:nsym)
2505 [ + + ]: 15213 : symafm(1:nsym)=bcksymafm(1:nsym)
2506 : : else
2507 : : ! Problem with the generation of the symmetry operations
2508 : : write(message, '(a,i7,a,a,i7)' )&
2509 : 0 : & 'The symmetries obtained are ',nogen,ch10,&
2510 : 0 : & 'and they should be ',nsym
2511 : 0 : ABI_BUG(message)
2512 : : end if
2513 : :
2514 : : !DEBUG
2515 : 1405 : write(std_out,*)' bldgrp : exit with ',nogen,' operation symmetries'
2516 : : !ENDDEBUG
2517 : :
2518 : 1405 : end subroutine bldgrp
2519 : : !!***
2520 : :
2521 : : end module m_symsg
2522 : : !!***
|