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 : !!***
|