Branch data Line data Source code
1 : : !!****m* ABINIT/m_spgbuilder
2 : : !! NAME
3 : : !! m_spgbuilder
4 : : !!
5 : : !! FUNCTION
6 : : !! Spacegroup builder.
7 : : !!
8 : : !! COPYRIGHT
9 : : !! Copyright (C) 2008-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_spgbuilder
23 : :
24 : : use defs_basis
25 : : use m_errors
26 : : use m_abicore
27 : :
28 : : use m_symtk, only : sg_multable, print_symmetries
29 : : use m_symsg, only : symsgcube, symsghexa, symsgmono, symsgortho, symsgtetra
30 : :
31 : : implicit none
32 : :
33 : : private
34 : : !!***
35 : :
36 : : public :: gensymspgr
37 : : public :: gensymshub
38 : : public :: gensymshub4
39 : : !!***
40 : :
41 : : contains
42 : : !!***
43 : :
44 : : !!****f* m_spgbuilder/gensymspgr
45 : : !! NAME
46 : : !! gensymspgr
47 : : !!
48 : : !! FUNCTION
49 : : !! Give all the symmetry operations starting from the space group symbol.
50 : : !! Suppose we are working in a conventional cell
51 : : !! If brvltt 0 or positive, the pure translations of the
52 : : !! Bravais lattice are included as generator of the group.
53 : : !! In brvltt=-1, no pure translation is present, and the
54 : : !! cell should be changed from conventional to primitive,
55 : : !! outside of this routine.
56 : : !! Treat also Shubnikov type III space groups.
57 : : !!
58 : : !! INPUTS
59 : : !! brvltt = input variable giving Bravais lattice
60 : : !! msym = default number of symmetry operations
61 : : !! shubnikov= magnetic type of the space group to be generated
62 : : !! spgaxor = orientation of the cell axis (might be needed)
63 : : !! spgorig = second choice of origin for certain groups
64 : : !! (might be needed if nsym==0)
65 : : !! spgroup = number of space group
66 : : !! spgroupma= number of the magnetic space group
67 : : !!
68 : : !! OUTPUT
69 : : !! nsym = number of symmetry operations
70 : : !! symafm(nsym)=(anti)ferromagnetic part of symmetry operations
71 : : !! symrel(3,3,nsym)=symmetry operations in real space in terms
72 : : !! of primitive translations
73 : : !! tnons(3,nsym)=nonsymmorphic translations for symmetry operations
74 : : !!
75 : : !! SIDE EFFECTS
76 : : !! brvltt = input variable giving Bravais lattice
77 : : !!
78 : : !! SOURCE
79 : :
80 : 1623 : subroutine gensymspgr(brvltt,msym,nsym,shubnikov,spgaxor,spgorig,spgroup,spgroupma,symafm,symrel,tnons)
81 : :
82 : : !Arguments ------------------------------------
83 : : !scalars
84 : : integer,intent(in) :: msym,shubnikov,spgaxor,spgorig,spgroup,spgroupma
85 : : integer,intent(inout) :: brvltt
86 : : integer,intent(out) :: nsym
87 : : !arrays
88 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym) !vz_i
89 : : real(dp),intent(inout) :: tnons(3,msym) !vz_i
90 : :
91 : : !Local variables ------------------------------
92 : : ! intsym,inttn = intermediate real to swap the columns of the symmetry matrix
93 : : ! bckbrvltt = backup to brvltt to compare the assigned and the input values
94 : : !real(dp) :: tsec(2)
95 : : !scalars
96 : : integer :: bckbrvltt,ii,inversion,jj,kk,ierr
97 : : integer :: intsym
98 : : real(dp) :: inttn
99 : : character(len=500) :: message
100 : : ! *************************************************************************
101 : :
102 : : !List of the input parameters
103 : : !DEBUG
104 : : !write(std_out,*)' gensymspgr : enter with:'
105 : : !write(std_out,*)' spgroup = ',spgroup
106 : : !write(std_out,*)' spgaxor = ',spgaxor
107 : : !write(std_out,*)' spgorig = ',spgorig
108 : : !write(std_out,*)' brvltt = ',brvltt
109 : : !ENDDEBUG
110 : :
111 : : !Assume that the value of spgroupma is consistent with the one of spgroup
112 : : !(this has been checked earlier)
113 : :
114 : : !Tests for consistency first the space group number and then the orientation
115 : : !Checks the space group number
116 [ - + ]: 1623 : if (.not.(spgroup>0 .and. spgroup<231) ) then
117 : : write(message, '(a,i0,a,a,a,a)' )&
118 : 0 : & 'spgroup must be between 1 to 230, but is ',spgroup,ch10,&
119 : 0 : & 'This is not allowed. ',ch10,&
120 : 0 : & 'Action: modify spgroup in the input file.'
121 : 0 : ABI_ERROR(message)
122 : : end if
123 : :
124 : : !Checks the orientation
125 [ - + ]: 1623 : if (.not.(spgaxor>0 .and. spgaxor<10)) then
126 : : write(message, '(a,i12,a,a,a,a)' )&
127 : 0 : & 'spgaxor must be from 1 to 9, but is',spgaxor,ch10,&
128 : 0 : & 'This is not allowed. ',ch10,&
129 : 0 : & 'Action: modify spgaxor in the input file.'
130 : 0 : ABI_ERROR(message)
131 : : end if
132 : :
133 : : !Checks the consistency between the origin and space group
134 [ - + ]: 1623 : if (spgorig==1 .or. spgorig==2) then
135 : : else
136 : : write(message, '(a,i4,a,a,a,a,a,a)' )&
137 : 0 : & 'spgorig is',spgorig,ch10,&
138 : 0 : & 'while it should be 0 or 1',ch10,&
139 : 0 : & 'This is not allowed. ',ch10,&
140 : 0 : & 'Action: modify spgorig in the input file.'
141 : 0 : ABI_ERROR(message)
142 : : end if
143 : :
144 [ + + ]: 1623 : if (spgorig>1) then
145 : 0 : select case (spgroup)
146 : : case (48,50,59,68,70,85,86,88,125,126,129,130,133,134,137,138,&
147 : : & 141,142,201,203,222,224,227,228)
148 : : case default
149 : : write(message, '(a,a,a,a,a)' )&
150 : 0 : & 'spgroup does not accept several origin choices',ch10,&
151 : 0 : & 'This is not allowed. ',ch10,&
152 : 0 : & 'Action: modify spgorig in the input file.'
153 [ - + ]: 7 : ABI_ERROR(message)
154 : : end select
155 : : end if
156 : :
157 : : !Checks for consistency between the orientation and space group
158 [ + + ]: 1623 : if (spgaxor>1) then
159 : 0 : select case (spgroup)
160 : : case (3:74,146,148,155,160,161,166,167)
161 : : case default
162 : : write(message, '(a,a,a,a,a)' )&
163 : 0 : & 'spgroup does not accept several orientations',ch10,&
164 : 0 : & 'This is not allowed. ',ch10,&
165 : 0 : & 'Action: modify spgaxor or spgroup in the input file.'
166 [ - + ]: 74 : ABI_ERROR(message)
167 : : end select
168 : : end if
169 : :
170 [ - + ]: 1623 : if (brvltt<-1 .or. brvltt>7)then
171 : : write(message, '(a,i4,a,a,a,a,a,a)' )&
172 : 0 : & 'The input brvltt was ',brvltt,ch10,&
173 : 0 : & 'and it should be an integer from -1 to 7',ch10,&
174 : 0 : & 'This is not allowed. ',ch10,&
175 : 0 : & 'Action: modify brvltt in the input file.'
176 : 0 : ABI_ERROR(message)
177 : : end if
178 : :
179 : : !Assign nsym for each group according first to the order of the group
180 : : !Note that this value might be modified later:
181 : : !first because of the product with the inversion,
182 : : !second because of the centering operations
183 : 5 : select case (spgroup)
184 : : case (1,2)
185 : 5 : nsym=1
186 : : case (3:9)
187 : 34 : nsym=2
188 : : case (143:148)
189 : 43 : nsym=3
190 : : case (10:42,44:47,49,51:58,60:67,69,71:84,87)
191 : 560 : nsym=4
192 : : case (149:176)
193 : 242 : nsym=6
194 : : case (48,50,59,68,70,85,86,88:121,123,124,127,128,131,132,135,136,139,140)
195 : 398 : nsym=8
196 : : case (177:200,202,204:206)
197 : 127 : nsym=12
198 : : case (43,122,125,126,129,130,133,134,137,138)
199 : 97 : nsym=16
200 : : case (201,207:219,221,223,225,226,229,230)
201 : 72 : nsym=24
202 : : case (141,142)
203 : 20 : nsym=32
204 : : case (203,220,222,224)
205 : 15 : nsym=48
206 : : case (227,228)
207 [ + + + + : 1623 : nsym=192
+ + + + +
+ + + - ]
208 : : end select
209 : :
210 : : !DEBUG
211 : : !write(std_out,*)'gensymspgr : assigns nsym = ',nsym
212 : : !ENDDEBUG
213 : :
214 : : !Makes a backup to the brvltt for further comparison with the assigned value
215 : 1623 : bckbrvltt=brvltt
216 : : !Default brvltt
217 : 1623 : brvltt=1
218 : :
219 : : !call timab(47,1,tsec)
220 : :
221 : : !Assigns the first part of the symmetry operations:
222 : : !Rotation axis and mirror planes with or without translations,
223 : : !and sometimes also inversion operations.
224 : : select case (spgroup)
225 : : case (1:2)
226 [ + + + + ]: 65 : symrel(:,:,1)=0
227 : 5 : symrel(1,1,1)=1 ; symrel(2,2,1)=1 ; symrel(3,3,1)=1
228 [ + + ]: 20 : tnons(:,1)=zero ; symafm(1)=1
229 : : case (3:15)
230 : : call symsgmono(brvltt,msym,nsym,shubnikov,spgaxor,spgorig,spgroup,&
231 : 79 : & spgroupma,symafm,symrel,tnons)
232 : : case (16:74)
233 : : call symsgortho(msym,nsym,shubnikov,spgaxor,spgorig,spgroup,&
234 : 521 : & spgroupma,symafm,symrel,tnons)
235 : : case (75:142)
236 : : call symsgtetra(msym,nsym,shubnikov,spgaxor,spgorig,spgroup,&
237 : 509 : & spgroupma,symafm,symrel,tnons)
238 : : case (143:194)
239 : : call symsghexa(brvltt,msym,nsym,shubnikov,spgaxor,spgorig,spgroup,&
240 : 391 : & spgroupma,symafm,symrel,tnons)
241 : : case (195:230)
242 : : call symsgcube(msym,nsym,shubnikov,spgaxor,spgorig,spgroup,&
243 [ + + + + : 1623 : & spgroupma,symafm,symrel,tnons)
+ + - ]
244 : : end select
245 : :
246 : : !call timab(47,2,tsec)
247 : :
248 : : !Assign the inversion center (if necessary).
249 : : !Note that for monoclinic space groups, the inversion was already
250 : : !assigned in symsgmono.f. Some other inversions have also been assigned in the
251 : : !corresponding system routine
252 : 1623 : inversion=0
253 : 597 : select case (spgroup)
254 : : case (2,47,49,51:58,60:67,69,71:74,83,84,87,123,124,127,128,131,132,&
255 : : & 135,136,139,140,147,148,162:167,175,176,191:194,200,202,204:206,&
256 : : & 221,223,225,226,229,230)
257 : 597 : inversion=1
258 : : ! Treat the magnetic part
259 [ + + + + ]: 1623 : if(shubnikov==3)then
260 : : select case (spgroup)
261 : : case(2) ! Triclinic
262 : 123 : inversion=-1
263 : : case(47,49,51:58,60:67,69,71:74) ! Orthorhombic
264 : 202 : select case (spgroupma)
265 : : case(251,253,259,261,267,268,271,279,280,283,291,292,293,297,307,&
266 : : & 308,309,313,323,324,325,329,339,340,341,345,355,356,359,367,368,371,&
267 : : & 379,380,381,385,395,396,399,407,408,411,419,420,421,425,435,437,443,&
268 : : & 444,445,449,459,460,461,465,471,472,473,477,483,484,487,493,494,497,&
269 : : & 503,504,507,513,514,517,523,525,529,531,535,537,541,542,545,550,552,556,557,560)
270 [ + + ]: 123 : inversion=-1
271 : : end select
272 : : case(83,84,87,123,124,127,128,131,132,135,136,139,140) ! Tetragonal
273 : 133 : select case (spgroupma)
274 : : case(46,47,54,55,62,63,70,71,78,79,84,85,341,344,346,347,353,356,358,359,365,&
275 : : & 368,370,371,377,380,382,383,389,392,394,395,401,404,406,407,&
276 : : & 413,416,418,419,425,428,430,431,437,440,442,443,449,452,454,455,&
277 : : & 461,464,466,467,473,476,478,479,485,488,490,491,497,500,502,503,&
278 : : & 509,512,514,515,521,524,526,527,533,536,538,539,543,546,548,549)
279 [ + + ]: 79 : inversion=-1
280 : : end select
281 : : case(147,148,162:167,175,176,191:194) ! Hexagonal or rhombohedral
282 : 77 : select case (spgroupma)
283 : : case(15,19,75,76,81,82,87,88,93,94,99,100,105,106,139,140,145,146,&
284 : : & 235,236,237,241,245,246,247,251,255,256,257,261,265,266,267,271)
285 [ + + ]: 54 : inversion=-1
286 : : end select
287 : : case(200,202,204:206,221,223,225,226,229,230) ! Cubic
288 [ - + + + : 280 : select case (spgroupma)
+ + ]
289 : : case(16,20,24,28,32,35,39,94,96,100,102,106,108,112,114,118,120,124,126,&
290 : : & 130,132,136,138,142,144,147,149)
291 [ + + ]: 23 : inversion=-1
292 : : end select
293 : : end select
294 : : end if
295 : : end select
296 : :
297 : : !DEBUG
298 : : !write(std_out,*)' gensymspgr : before inversion'
299 : : !write(std_out,*)' Describe the different symmetry operations (index,symrel,tnons,symafm)'
300 : : !do ii=1,nsym
301 : : !write(std_out,'(i3,2x,9i3,3es12.2,i3)')ii,symrel(:,:,ii),tnons(:,ii),symafm(ii)
302 : : !end do
303 : : !ENDDEBUG
304 : :
305 : : if(inversion/=0)then
306 [ + + ]: 4613 : do ii=1,nsym ! visit all the symmetries assigned before
307 [ + + ]: 16064 : do jj=1,3 ! visit the 3x3 matrix corresponding to the symmetry i
308 : 12048 : tnons(jj,nsym+ii)=-tnons(jj,ii)
309 [ + + ]: 52208 : do kk=1,3
310 : 48192 : symrel(jj,kk,nsym+ii)=-symrel(jj,kk,ii)
311 : : end do
312 : : end do
313 : 4613 : symafm(nsym+ii)=inversion*symafm(ii)
314 : : end do
315 : 597 : nsym=nsym*2
316 : : end if
317 : :
318 : : !DEBUG
319 : : !write(std_out,*)' gensymspgr : after inversion'
320 : : !write(std_out,*)' Describe the different symmetry operations (index,symrel,tnons,symafm)'
321 : : !do ii=1,nsym
322 : : !write(std_out,'(i3,2x,9i3,3es12.2,i3)')ii,symrel(:,:,ii),tnons(:,ii),symafm(ii)
323 : : !end do
324 : : !ENDDEBUG
325 : :
326 : : !Assign the Bravais lattice to each space group to which it has not yet
327 : : !been assigned
328 : 28 : select case (spgroup)
329 : : case (38:41)
330 : 28 : brvltt=5 ! A
331 : : case (20,21,35:37,63:68)
332 : 101 : brvltt=4 ! C
333 : : case (22,42,43,69,70,196,202,203,209,210,216,219,225:228)
334 : 63 : brvltt=3 ! F
335 : : case (23,24,44:46,71:74,79,80,82,87,88,97,98,107:110,119:122,&
336 : : & 139:142,197,199,204,206,211,214,217,220,229,230)
337 : 181 : brvltt=2 ! I
338 : : case (146,148,155,160,161,166,167)
339 [ + + + + : 1623 : if (spgaxor==1) then
+ + + + ]
340 : 36 : brvltt=7
341 : : end if
342 : : end select
343 : :
344 [ + + ]: 1623 : if (bckbrvltt/=0 .and. bckbrvltt/=-1) then
345 [ - + ]: 34 : if (bckbrvltt/=brvltt) then
346 : : write(message, '(a,i8,a,a,a,i8,a,a)' )&
347 : 0 : & 'The assigned brvltt ',brvltt,' is not equal',ch10,&
348 : 0 : & 'to the input value ',bckbrvltt,ch10,&
349 : 0 : & 'Assume experienced user. Execution will continue.'
350 : 0 : ABI_WARNING(message)
351 : : end if
352 : : end if
353 : :
354 : : !if(bckbrvltt>=0)then
355 : : !Complete the set of primitive symmetries by translations
356 : : !associated with brvltt.
357 : 1651 : select case (brvltt)
358 : : ! Bravais lattice type : A ! translation associated: b/2+c/2
359 : : case (5)
360 [ + + ]: 140 : do ii=1,nsym
361 : 112 : tnons(1,nsym+ii)=tnons(1,ii)
362 : 112 : tnons(2,nsym+ii)=tnons(2,ii)+0.5
363 : 112 : tnons(3,nsym+ii)=tnons(3,ii)+0.5
364 [ + + + + ]: 1456 : symrel(:,:,nsym+ii)=symrel(:,:,ii)
365 : 140 : symafm(nsym+ii)=symafm(ii)
366 : : end do
367 : 28 : nsym=nsym*2
368 : :
369 : : ! Bravais lattice type : B ! translation associated: a/2+c/2
370 : : case (6)
371 [ # # ]: 0 : do ii=1,nsym
372 : 0 : tnons(1,nsym+ii)=tnons(1,ii)+0.5
373 : 0 : tnons(2,nsym+ii)=tnons(2,ii)
374 : 0 : tnons(3,nsym+ii)=tnons(3,ii)+0.5
375 [ # # # # ]: 0 : symrel(:,:,nsym+ii)=symrel(:,:,ii)
376 : 0 : symafm(nsym+ii)=symafm(ii)
377 : : end do
378 : 0 : nsym=nsym*2
379 : :
380 : : ! Bravais lattice type : C ! translation associated: a/2+b/2
381 : : case (4)
382 [ + + ]: 886 : do ii=1,nsym
383 : 760 : tnons(1,nsym+ii)=tnons(1,ii)+0.5
384 : 760 : tnons(2,nsym+ii)=tnons(2,ii)+0.5
385 : 760 : tnons(3,nsym+ii)=tnons(3,ii)
386 [ + + + + ]: 9880 : symrel(:,:,nsym+ii)=symrel(:,:,ii)
387 : 886 : symafm(nsym+ii)=symafm(ii)
388 : : end do
389 : 126 : nsym=nsym*2
390 : :
391 : : ! Bravais lattice type : F ! translations associated: a/2+b/2,b/2+c/2,b/2+c/2
392 : : case (3)
393 : : ! For space groups containing d elements, all the symmetry operations
394 : : ! have already been obtained
395 [ + + + + ]: 63 : if(spgroup/=43 .and. spgroup/=227 .and. spgroup/=228)then
396 [ + + ]: 1189 : do ii=1,nsym
397 : : ! First translation: a/2+b/2
398 : 1140 : tnons(1,nsym+ii)=tnons(1,ii)+0.5
399 : 1140 : tnons(2,nsym+ii)=tnons(2,ii)+0.5
400 : 1140 : tnons(3,nsym+ii)=tnons(3,ii)
401 [ + + + + ]: 14820 : symrel(:,:,nsym+ii)=symrel(:,:,ii)
402 : 1189 : symafm(nsym+ii)=symafm(ii)
403 : : end do
404 : : ! Second translation: b/2+c/2
405 [ + + ]: 1189 : do ii=1,nsym
406 : 1140 : tnons(1,2*nsym+ii)=tnons(1,ii)
407 : 1140 : tnons(2,2*nsym+ii)=tnons(2,ii)+0.5
408 : 1140 : tnons(3,2*nsym+ii)=tnons(3,ii)+0.5
409 [ + + + + ]: 14820 : symrel(:,:,2*nsym+ii)=symrel(:,:,ii)
410 : 1189 : symafm(2*nsym+ii)=symafm(ii)
411 : : end do
412 : : ! Third translation: a/2+c/2
413 [ + + ]: 1189 : do ii=1,nsym
414 : 1140 : tnons(1,3*nsym+ii)=tnons(1,ii)+0.5
415 : 1140 : tnons(2,3*nsym+ii)=tnons(2,ii)
416 : 1140 : tnons(3,3*nsym+ii)=tnons(3,ii)+0.5
417 [ + + + + ]: 14820 : symrel(:,:,3*nsym+ii)=symrel(:,:,ii)
418 : 1189 : symafm(3*nsym+ii)=symafm(ii)
419 : : end do
420 : 49 : nsym=nsym*4
421 : : end if
422 : :
423 : : ! Bravais lattice type: I ! translation associated: a/2+b/2+c/2
424 : : case (2)
425 : : ! For space groups containing d elements, all the symmetry operations
426 : : ! have already been obtained
427 [ + + + + : 181 : if(spgroup/=122 .and. spgroup/=141 .and. spgroup/=142 .and. &
+ + ]
428 : 36 : & spgroup/=220 )then
429 [ + + ]: 1914 : do ii=1,nsym ! visit all the symmetries assigned before
430 [ + + ]: 7040 : tnons(:,nsym+ii)=tnons(:,ii)+0.5
431 [ + + + + ]: 22880 : symrel(:,:,nsym+ii)=symrel(:,:,ii)
432 : 1914 : symafm(nsym+ii)=symafm(ii)
433 : : end do
434 : 154 : nsym=nsym*2
435 : : end if
436 : :
437 : : ! Bravais lattice type: R
438 : : ! translations for hexagonal axes ONLY: (2/3,1/3,1/3) & (1/3,2/3,2/3)
439 : : ! first translation (2/3,1/3,1/3)
440 : : case (7)
441 [ + + ]: 348 : do ii=1,nsym
442 : 312 : tnons(1,nsym+ii)=tnons(1,ii)+two_thirds
443 : 312 : tnons(2,nsym+ii)=tnons(2,ii)+third
444 : 312 : tnons(3,nsym+ii)=tnons(3,ii)+third
445 [ + + + + ]: 4056 : symrel(:,:,nsym+ii)=symrel(:,:,ii)
446 : 348 : symafm(nsym+ii)=symafm(ii)
447 : : end do
448 : : ! Second translation (1/3,2/3,2/3)
449 [ + + ]: 348 : do ii=1,nsym
450 : 312 : tnons(1,2*nsym+ii)=tnons(1,ii)+third
451 : 312 : tnons(2,2*nsym+ii)=tnons(2,ii)+two_thirds
452 : 312 : tnons(3,2*nsym+ii)=tnons(3,ii)+two_thirds
453 [ + + + + ]: 4056 : symrel(:,:,2*nsym+ii)=symrel(:,:,ii)
454 : 348 : symafm(2*nsym+ii)=symafm(ii)
455 : : end do
456 [ + - + + : 1659 : nsym=nsym*3
+ + + ]
457 : :
458 : : end select
459 : :
460 : : !end if
461 : :
462 : : !Translate tnons in the ]-0.5,0.5] interval
463 [ + + + + ]: 104751 : tnons(:,1:nsym)=tnons(:,1:nsym)-nint(tnons(:,1:nsym)-1.0d-8)
464 : :
465 : : !Orientations for the orthorhombic space groups
466 : : !WARNING : XG 000620 : I am not sure that this coding is correct !!
467 [ + + ]: 1623 : if (spgroup>15 .and. spgroup <75) then
468 : 508 : select case (spgaxor)
469 : : case (1) ! abc
470 : 508 : write(std_out,*)' the choosen orientation corresponds to: abc; the proper one'
471 : : case (2) ! cab
472 [ + + ]: 34 : do ii=1,nsym
473 : 32 : intsym=symrel(1,1,ii)
474 : 32 : symrel(1,1,ii)=symrel(2,2,ii)
475 : 32 : symrel(2,2,ii)=intsym
476 : 32 : inttn=tnons(1,ii)
477 : 32 : tnons(1,ii)=tnons(2,ii)
478 : 34 : tnons(2,ii)=inttn
479 : : end do
480 [ + + ]: 34 : do ii=1,nsym
481 : 32 : intsym=symrel(1,1,ii)
482 : 32 : symrel(1,1,ii)=symrel(3,3,ii)
483 : 32 : symrel(3,3,ii)=intsym
484 : 32 : inttn=tnons(1,ii)
485 : 32 : tnons(1,ii)=tnons(3,ii)
486 : 34 : tnons(3,ii)=inttn
487 : : end do
488 : 2 : write(std_out,*)' the choosen orientation corresponds to: cab'
489 : : case (3) ! bca
490 [ + + ]: 43 : do ii=1,nsym
491 : 40 : intsym=symrel(1,1,ii)
492 : 40 : symrel(1,1,ii)=symrel(2,2,ii)
493 : 40 : symrel(2,2,ii)=intsym
494 : 40 : inttn=tnons(1,ii)
495 : 40 : tnons(1,ii)=tnons(2,ii)
496 : 43 : tnons(2,ii)=inttn
497 : : end do
498 [ + + ]: 43 : do ii=1,nsym
499 : 40 : intsym=symrel(2,2,ii)
500 : 40 : symrel(2,2,ii)=symrel(3,3,ii)
501 : 40 : symrel(3,3,ii)=intsym
502 : 40 : inttn=tnons(2,ii)
503 : 40 : tnons(2,ii)=tnons(3,ii)
504 : 43 : tnons(3,ii)=inttn
505 : : end do
506 : 3 : write(std_out,*)' the choosen orientation corresponds to: bca'
507 : : case (4) ! acb
508 [ + + ]: 34 : do ii=1,nsym
509 : 32 : intsym=symrel(2,2,ii)
510 : 32 : symrel(2,2,ii)=symrel(3,3,ii)
511 : 32 : symrel(3,3,ii)=intsym
512 : 32 : inttn=tnons(1,ii)
513 : 32 : tnons(2,ii)=tnons(3,ii)
514 : 34 : tnons(3,ii)=inttn
515 : : end do
516 : 2 : write(std_out,*)' the choosen orientation corresponds to: acb'
517 : : case (5) ! bac
518 [ + + ]: 43 : do ii=1,nsym
519 : 40 : intsym=symrel(1,1,ii)
520 : 40 : symrel(1,1,ii)=symrel(2,2,ii)
521 : 40 : symrel(2,2,ii)=intsym
522 : 40 : inttn=tnons(1,ii)
523 : 40 : tnons(1,ii)=tnons(2,ii)
524 : 43 : tnons(2,ii)=inttn
525 : : end do
526 : 3 : write(std_out,*)' the choosen orientation corresponds to: bac'
527 : : case (6) ! cba
528 [ + + ]: 34 : do ii=1,nsym
529 : 32 : intsym=symrel(1,1,ii)
530 : 32 : symrel(1,1,ii)=symrel(3,3,ii)
531 : 32 : symrel(3,3,ii)=intsym
532 : 32 : inttn=tnons(1,ii)
533 : 32 : tnons(1,ii)=tnons(3,ii)
534 : 34 : tnons(3,ii)=inttn
535 : : end do
536 [ + + + + : 523 : write(std_out,*)' the choosen orientation corresponds to: cba'
+ + + ]
537 : : end select
538 : : end if
539 : :
540 : : !DEBUG
541 : : !write(std_out,*)' gensymspgr : out of the Bravais lattice, nsym is',nsym
542 : : !ENDDEBUG
543 : :
544 : 1623 : call sg_multable(nsym,symafm,symrel,ierr,tnons=tnons,tnons_tol=tol5)
545 [ - + - - ]: 1623 : if (ierr/=0) call print_symmetries([std_out], nsym, symrel, tnons, symafm)
546 : :
547 [ - + ]: 1623 : ABI_CHECK(ierr==0,"Error in group closure")
548 : :
549 : 1623 : end subroutine gensymspgr
550 : : !!***
551 : :
552 : : !!****f* m_spgbuilder/gensymshub
553 : : !! NAME
554 : : !! gensymshub
555 : : !!
556 : : !! FUNCTION
557 : : !! Analyse the Shubnikov space group, from the input of the
558 : : !! the Fedorov space group number, and the Shubnikov space group number:
559 : : !! 1) determine the type (III or IV)
560 : : !! 2) for type (IV), determine the translation generating
561 : : !! the anti-ferromagnetic operations
562 : : !! At present, follow strictly the specifications of Bradley
563 : : !! and Cracknell. However, one should take into account the
564 : : !! orientation of the symmetry group (spgaxor).
565 : : !!
566 : : !! INPUTS
567 : : !! spgroup = number of space group
568 : : !! spgroupma = number of magnetic space group
569 : : !!
570 : : !! OUTPUT
571 : : !! genafm(3) = in case of shubnikov type IV, translation, generator of the
572 : : !! anti-ferromagnetic symmetry operations
573 : : !! shubnikov = type of the shubnikov group
574 : : !!
575 : : !! SOURCE
576 : :
577 : 1192 : subroutine gensymshub(genafm,spgroup,spgroupma,shubnikov)
578 : :
579 : : !Arguments ------------------------------------
580 : : !scalars
581 : : integer,intent(in) :: spgroup,spgroupma
582 : : integer,intent(out) :: shubnikov
583 : : !arrays
584 : : real(dp),intent(out) :: genafm(3)
585 : :
586 : : !Local variables ------------------------------
587 : : !scalars
588 : : integer :: brvlttbw=0,spgrmatch=1
589 : : character(len=500) :: message
590 : : ! *************************************************************************
591 : :
592 : : !List of the input parameters
593 : : !DEBUG
594 : : !write(std_out,*)
595 : : !write(std_out,*)' gensymshub : enter with:'
596 : : !write(std_out,*)' brvlttbw = ',brvlttbw
597 : : !write(std_out,*)' spgroup = ',spgroup
598 : : !write(std_out,*)' spgroupma = ',spgroupma
599 : : !ENDDEBUG
600 : :
601 : : !Test for consistency the magnetic and non-magnetic space group
602 : 1193 : select case (spgroup)
603 : : case(1)
604 [ - + ]: 1 : if (.not.(spgroupma>=3 .and. 3 >=spgroupma) ) spgrmatch=0
605 : : case(2)
606 [ - + ]: 2 : if (.not.(spgroupma>=6 .and. 7 >=spgroupma) ) spgrmatch=0
607 : : case(3)
608 [ - + ]: 4 : if (.not.(spgroupma>=3 .and. 6 >=spgroupma) ) spgrmatch=0
609 : : case(4)
610 [ - + ]: 4 : if (.not.(spgroupma>=9 .and. 12 >=spgroupma) ) spgrmatch=0
611 : : case(5)
612 [ - + ]: 3 : if (.not.(spgroupma>=15 .and. 17 >=spgroupma) ) spgrmatch=0
613 : : case(6)
614 [ - + ]: 4 : if (.not.(spgroupma>=20 .and. 23 >=spgroupma) ) spgrmatch=0
615 : : case(7)
616 [ - + ]: 6 : if (.not.(spgroupma>=26 .and. 31 >=spgroupma) ) spgrmatch=0
617 : : case(8)
618 [ - + ]: 3 : if (.not.(spgroupma>=34 .and. 36 >=spgroupma) ) spgrmatch=0
619 : : case(9)
620 [ - + ]: 3 : if (.not.(spgroupma>=39 .and. 41 >=spgroupma) ) spgrmatch=0
621 : : case(10)
622 [ - + ]: 6 : if (.not.(spgroupma>=44 .and. 49 >=spgroupma) ) spgrmatch=0
623 : : case(11)
624 [ - + ]: 6 : if (.not.(spgroupma>=52 .and. 57 >=spgroupma) ) spgrmatch=0
625 : : case(12)
626 [ - + ]: 5 : if (.not.(spgroupma>=60 .and. 64 >=spgroupma) ) spgrmatch=0
627 : : case(13)
628 [ - + ]: 8 : if (.not.(spgroupma>=67 .and. 74 >=spgroupma) ) spgrmatch=0
629 : : case(14)
630 [ - + ]: 8 : if (.not.(spgroupma>=77 .and. 84 >=spgroupma) ) spgrmatch=0
631 : : case(15)
632 [ - + ]: 5 : if (.not.(spgroupma>=87 .and. 91 >=spgroupma) ) spgrmatch=0
633 : : case(16)
634 [ - + ]: 4 : if (.not.(spgroupma>= 3 .and. 6>=spgroupma) ) spgrmatch=0
635 : : case(17)
636 [ - + ]: 7 : if (.not.(spgroupma>= 9 .and. 15 >=spgroupma) ) spgrmatch=0
637 : : case(18)
638 [ - + ]: 7 : if (.not.(spgroupma>=18 .and. 24 >=spgroupma) ) spgrmatch=0
639 : : case(19)
640 [ - + ]: 4 : if (.not.(spgroupma>=27 .and. 30 >=spgroupma) ) spgrmatch=0
641 : : case(20)
642 [ - + ]: 5 : if (.not.(spgroupma>=33 .and. 37 >=spgroupma) ) spgrmatch=0
643 : : case(21)
644 [ - + ]: 5 : if (.not.(spgroupma>=40 .and. 44 >=spgroupma) ) spgrmatch=0
645 : : case(22)
646 [ - + ]: 2 : if (.not.(spgroupma>=47 .and. 48 >=spgroupma) ) spgrmatch=0
647 : : case(23)
648 [ - + ]: 2 : if (.not.(spgroupma>=51 .and. 52 >=spgroupma) ) spgrmatch=0
649 : : case(24)
650 [ - + ]: 2 : if (.not.(spgroupma>=55 .and. 56 >=spgroupma) ) spgrmatch=0
651 : : case(25)
652 [ - + ]: 7 : if (.not.(spgroupma>=59 .and. 65 >=spgroupma) ) spgrmatch=0
653 : : case(26)
654 [ - + ]: 10 : if (.not.(spgroupma>=68 .and. 77 >=spgroupma) ) spgrmatch=0
655 : : case(27)
656 [ - + ]: 7 : if (.not.(spgroupma>=80 .and. 86 >=spgroupma) ) spgrmatch=0
657 : : case(28)
658 [ - + ]: 10 : if (.not.(spgroupma>=89 .and. 98 >=spgroupma) ) spgrmatch=0
659 : : case(29)
660 [ - + ]: 10 : if (.not.(spgroupma>=101 .and. 110 >=spgroupma) ) spgrmatch=0
661 : : case(30)
662 [ - + ]: 10 : if (.not.(spgroupma>=113 .and. 122 >=spgroupma) ) spgrmatch=0
663 : : case(31)
664 [ - + ]: 10 : if (.not.(spgroupma>=125 .and. 134 >=spgroupma) ) spgrmatch=0
665 : : case(32)
666 [ - + ]: 7 : if (.not.(spgroupma>=137 .and. 143 >=spgroupma) ) spgrmatch=0
667 : : case(33)
668 [ - + ]: 10 : if (.not.(spgroupma>=146 .and. 155 >=spgroupma) ) spgrmatch=0
669 : : case(34)
670 [ - + ]: 7 : if (.not.(spgroupma>=158 .and. 164 >=spgroupma) ) spgrmatch=0
671 : : case(35)
672 [ - + ]: 5 : if (.not.(spgroupma>=167 .and. 171>=spgroupma) ) spgrmatch=0
673 : : case(36)
674 [ - + ]: 6 : if (.not.(spgroupma>=174 .and. 179>=spgroupma) ) spgrmatch=0
675 : : case(37)
676 [ - + ]: 5 : if (.not.(spgroupma>=182 .and. 186 >=spgroupma) ) spgrmatch=0
677 : : case(38)
678 [ - + ]: 6 : if (.not.(spgroupma>=189 .and. 194 >=spgroupma) ) spgrmatch=0
679 : : case(39)
680 [ - + ]: 6 : if (.not.(spgroupma>=197 .and. 202 >=spgroupma) ) spgrmatch=0
681 : : case(40)
682 [ - + ]: 6 : if (.not.(spgroupma>=205 .and. 210 >=spgroupma) ) spgrmatch=0
683 : : case(41)
684 [ - + ]: 6 : if (.not.(spgroupma>=213 .and. 218 >=spgroupma) ) spgrmatch=0
685 : : case(42)
686 [ - + ]: 3 : if (.not.(spgroupma>=221 .and. 223>=spgroupma) ) spgrmatch=0
687 : : case(43)
688 [ - + ]: 3 : if (.not.(spgroupma>=226 .and. 228>=spgroupma) ) spgrmatch=0
689 : : case(44)
690 [ - + ]: 4 : if (.not.(spgroupma>=231 .and. 234 >=spgroupma) ) spgrmatch=0
691 : : case(45)
692 [ - + ]: 4 : if (.not.(spgroupma>=237 .and. 240 >=spgroupma) ) spgrmatch=0
693 : : case(46)
694 [ - + ]: 6 : if (.not.(spgroupma>=243 .and. 248 >=spgroupma) ) spgrmatch=0
695 : : case(47)
696 [ - + ]: 6 : if (.not.(spgroupma>=251 .and. 256 >=spgroupma) ) spgrmatch=0
697 : : case(48)
698 [ - + ]: 6 : if (.not.(spgroupma>=259 .and. 264 >=spgroupma) ) spgrmatch=0
699 : : case(49)
700 [ - + ]: 10 : if (.not.(spgroupma>=267 .and. 276 >=spgroupma) ) spgrmatch=0
701 : : case(50)
702 [ - + ]: 10 : if (.not.(spgroupma>=279 .and. 288 >=spgroupma) ) spgrmatch=0
703 : : case(51)
704 [ - + ]: 14 : if (.not.(spgroupma>=291 .and. 304 >=spgroupma) ) spgrmatch=0
705 : : case(52)
706 [ - + ]: 14 : if (.not.(spgroupma>=307 .and. 320 >=spgroupma) ) spgrmatch=0
707 : : case(53)
708 [ - + ]: 14 : if (.not.(spgroupma>=323 .and. 336 >=spgroupma) ) spgrmatch=0
709 : : case(54)
710 [ - + ]: 14 : if (.not.(spgroupma>=339 .and. 352 >=spgroupma) ) spgrmatch=0
711 : : case(55)
712 [ - + ]: 10 : if (.not.(spgroupma>=355 .and. 364 >=spgroupma) ) spgrmatch=0
713 : : case(56)
714 [ - + ]: 10 : if (.not.(spgroupma>=367 .and. 376 >=spgroupma) ) spgrmatch=0
715 : : case(57)
716 [ - + ]: 14 : if (.not.(spgroupma>=379 .and. 392 >=spgroupma) ) spgrmatch=0
717 : : case(58)
718 [ - + ]: 10 : if (.not.(spgroupma>=395 .and. 404 >=spgroupma) ) spgrmatch=0
719 : : case(59)
720 [ - + ]: 10 : if (.not.(spgroupma>=407 .and. 416 >=spgroupma) ) spgrmatch=0
721 : : case(60)
722 [ - + ]: 14 : if (.not.(spgroupma>=419 .and. 432 >=spgroupma) ) spgrmatch=0
723 : : case(61)
724 [ - + ]: 6 : if (.not.(spgroupma>=435 .and. 440 >=spgroupma) ) spgrmatch=0
725 : : case(62)
726 [ - + ]: 14 : if (.not.(spgroupma>=443 .and. 456 >=spgroupma) ) spgrmatch=0
727 : : case(63)
728 [ - + ]: 10 : if (.not.(spgroupma>=459 .and. 468 >=spgroupma) ) spgrmatch=0
729 : : case(64)
730 [ - + ]: 10 : if (.not.(spgroupma>=471 .and. 480 >=spgroupma) ) spgrmatch=0
731 : : case(65)
732 [ - + ]: 8 : if (.not.(spgroupma>=483 .and. 490 >=spgroupma) ) spgrmatch=0
733 : : case(66)
734 [ - + ]: 8 : if (.not.(spgroupma>=493 .and. 500 >=spgroupma) ) spgrmatch=0
735 : : case(67)
736 [ - + ]: 8 : if (.not.(spgroupma>=503 .and. 510 >=spgroupma) ) spgrmatch=0
737 : : case(68)
738 [ - + ]: 8 : if (.not.(spgroupma>=513 .and. 520 >=spgroupma) ) spgrmatch=0
739 : : case(69)
740 [ - + ]: 4 : if (.not.(spgroupma>=523 .and. 526 >=spgroupma) ) spgrmatch=0
741 : : case(70)
742 [ - + ]: 4 : if (.not.(spgroupma>=529 .and. 532 >=spgroupma) ) spgrmatch=0
743 : : case(71)
744 [ - + ]: 4 : if (.not.(spgroupma>=535 .and. 538 >=spgroupma) ) spgrmatch=0
745 : : case(72)
746 [ - + ]: 7 : if (.not.(spgroupma>=541 .and. 547 >=spgroupma) ) spgrmatch=0
747 : : case(73)
748 [ - + ]: 4 : if (.not.(spgroupma>=550 .and. 553 >=spgroupma) ) spgrmatch=0
749 : : case(74)
750 [ - + ]: 7 : if (.not.(spgroupma>=556 .and. 562 >=spgroupma) ) spgrmatch=0
751 : : case(75)
752 [ - + ]: 4 : if (.not.(spgroupma>= 3 .and. 6>=spgroupma) ) spgrmatch=0
753 : : case(76)
754 [ - + ]: 4 : if (.not.(spgroupma>= 9 .and. 12 >=spgroupma) ) spgrmatch=0
755 : : case(77)
756 [ - + ]: 4 : if (.not.(spgroupma>= 15 .and. 18>=spgroupma) ) spgrmatch=0
757 : : case(78)
758 [ - + ]: 4 : if (.not.(spgroupma>= 21 .and. 24>=spgroupma) ) spgrmatch=0
759 : : case(79)
760 [ - + ]: 2 : if (.not.(spgroupma>= 27 .and. 28 >=spgroupma) ) spgrmatch=0
761 : : case(80)
762 [ - + ]: 2 : if (.not.(spgroupma>= 31 .and. 32 >=spgroupma) ) spgrmatch=0
763 : : case(81)
764 [ - + ]: 4 : if (.not.(spgroupma>= 35 .and. 38 >=spgroupma) ) spgrmatch=0
765 : : case(82)
766 [ - + ]: 2 : if (.not.(spgroupma>= 41 .and. 42 >=spgroupma) ) spgrmatch=0
767 : : case(83)
768 [ - + ]: 6 : if (.not.(spgroupma>=45 .and. 50>=spgroupma) ) spgrmatch=0
769 : : case(84)
770 [ - + ]: 6 : if (.not.(spgroupma>=53 .and. 58>=spgroupma) ) spgrmatch=0
771 : : case(85)
772 [ - + ]: 6 : if (.not.(spgroupma>=61 .and. 66>=spgroupma) ) spgrmatch=0
773 : : case(86)
774 [ - + ]: 6 : if (.not.(spgroupma>=69 .and. 74>=spgroupma) ) spgrmatch=0
775 : : case(87)
776 [ - + ]: 4 : if (.not.(spgroupma>=77 .and. 80>=spgroupma) ) spgrmatch=0
777 : : case(88)
778 [ - + ]: 4 : if (.not.(spgroupma>=83 .and. 86>=spgroupma) ) spgrmatch=0
779 : : case(89)
780 [ - + ]: 6 : if (.not.(spgroupma>=89 .and. 94>=spgroupma) ) spgrmatch=0
781 : : case(90)
782 [ - + ]: 6 : if (.not.(spgroupma>=97 .and. 102>=spgroupma) ) spgrmatch=0
783 : : case(91)
784 [ - + ]: 6 : if (.not.(spgroupma>=105 .and. 110>=spgroupma) ) spgrmatch=0
785 : : case(92)
786 [ - + ]: 6 : if (.not.(spgroupma>=113 .and. 118>=spgroupma) ) spgrmatch=0
787 : : case(93)
788 [ - + ]: 6 : if (.not.(spgroupma>=121 .and. 126>=spgroupma) ) spgrmatch=0
789 : : case(94)
790 [ - + ]: 6 : if (.not.(spgroupma>=129 .and. 134>=spgroupma) ) spgrmatch=0
791 : : case(95)
792 [ - + ]: 6 : if (.not.(spgroupma>=137 .and. 142>=spgroupma) ) spgrmatch=0
793 : : case(96)
794 [ - + ]: 6 : if (.not.(spgroupma>=145 .and. 150>=spgroupma) ) spgrmatch=0
795 : : case(97)
796 [ - + ]: 4 : if (.not.(spgroupma>=153 .and. 156>=spgroupma) ) spgrmatch=0
797 : : case(98)
798 [ - + ]: 4 : if (.not.(spgroupma>=159 .and. 162>=spgroupma) ) spgrmatch=0
799 : : case(99)
800 [ - + ]: 6 : if (.not.(spgroupma>=165 .and. 170>=spgroupma) ) spgrmatch=0
801 : : case(100)
802 [ - + ]: 6 : if (.not.(spgroupma>=173 .and. 178>=spgroupma) ) spgrmatch=0
803 : : case(101)
804 [ - + ]: 6 : if (.not.(spgroupma>=181 .and. 186>=spgroupma) ) spgrmatch=0
805 : : case(102)
806 [ - + ]: 6 : if (.not.(spgroupma>=189 .and. 194>=spgroupma) ) spgrmatch=0
807 : : case(103)
808 [ - + ]: 6 : if (.not.(spgroupma>=197 .and. 202>=spgroupma) ) spgrmatch=0
809 : : case(104)
810 [ - + ]: 6 : if (.not.(spgroupma>=205 .and. 210>=spgroupma) ) spgrmatch=0
811 : : case(105)
812 [ - + ]: 6 : if (.not.(spgroupma>=213 .and. 218>=spgroupma) ) spgrmatch=0
813 : : case(106)
814 [ - + ]: 6 : if (.not.(spgroupma>=221 .and. 226>=spgroupma) ) spgrmatch=0
815 : : case(107)
816 [ - + ]: 4 : if (.not.(spgroupma>=229 .and. 232>=spgroupma) ) spgrmatch=0
817 : : case(108)
818 [ - + ]: 4 : if (.not.(spgroupma>=235 .and. 238>=spgroupma) ) spgrmatch=0
819 : : case(109)
820 [ - + ]: 4 : if (.not.(spgroupma>=241 .and. 244>=spgroupma) ) spgrmatch=0
821 : : case(110)
822 [ - + ]: 4 : if (.not.(spgroupma>=247 .and. 250>=spgroupma) ) spgrmatch=0
823 : : case(111)
824 [ - + ]: 6 : if (.not.(spgroupma>=253 .and. 258>=spgroupma) ) spgrmatch=0
825 : : case(112)
826 [ - + ]: 6 : if (.not.(spgroupma>=261 .and. 266>=spgroupma) ) spgrmatch=0
827 : : case(113)
828 [ - + ]: 6 : if (.not.(spgroupma>=269 .and. 274>=spgroupma) ) spgrmatch=0
829 : : case(114)
830 [ - + ]: 6 : if (.not.(spgroupma>=277 .and. 282>=spgroupma) ) spgrmatch=0
831 : : case(115)
832 [ - + ]: 6 : if (.not.(spgroupma>=285 .and. 290>=spgroupma) ) spgrmatch=0
833 : : case(116)
834 [ - + ]: 6 : if (.not.(spgroupma>=293 .and. 298>=spgroupma) ) spgrmatch=0
835 : : case(117)
836 [ - + ]: 6 : if (.not.(spgroupma>=301 .and. 306>=spgroupma) ) spgrmatch=0
837 : : case(118)
838 [ - + ]: 6 : if (.not.(spgroupma>=309 .and. 314>=spgroupma) ) spgrmatch=0
839 : : case(119)
840 [ - + ]: 4 : if (.not.(spgroupma>=317 .and. 320>=spgroupma) ) spgrmatch=0
841 : : case(120)
842 [ - + ]: 4 : if (.not.(spgroupma>=323 .and. 326>=spgroupma) ) spgrmatch=0
843 : : case(121)
844 [ - + ]: 4 : if (.not.(spgroupma>=329 .and. 332>=spgroupma) ) spgrmatch=0
845 : : case(122)
846 [ - + ]: 4 : if (.not.(spgroupma>=335 .and. 338>=spgroupma) ) spgrmatch=0
847 : : case(123)
848 [ - + ]: 10 : if (.not.(spgroupma>=341 .and. 350>=spgroupma) ) spgrmatch=0
849 : : case(124)
850 [ - + ]: 10 : if (.not.(spgroupma>=353 .and. 362>=spgroupma) ) spgrmatch=0
851 : : case(125)
852 [ - + ]: 10 : if (.not.(spgroupma>=365 .and. 374>=spgroupma) ) spgrmatch=0
853 : : case(126)
854 [ - + ]: 10 : if (.not.(spgroupma>=377 .and. 386>=spgroupma) ) spgrmatch=0
855 : : case(127)
856 [ - + ]: 10 : if (.not.(spgroupma>=389 .and. 398>=spgroupma) ) spgrmatch=0
857 : : case(128)
858 [ - + ]: 10 : if (.not.(spgroupma>=401 .and. 410>=spgroupma) ) spgrmatch=0
859 : : case(129)
860 [ - + ]: 10 : if (.not.(spgroupma>=413 .and. 422>=spgroupma) ) spgrmatch=0
861 : : case(130)
862 [ - + ]: 10 : if (.not.(spgroupma>=425 .and. 434>=spgroupma) ) spgrmatch=0
863 : : case(131)
864 [ - + ]: 10 : if (.not.(spgroupma>=437 .and. 446>=spgroupma) ) spgrmatch=0
865 : : case(132)
866 [ - + ]: 10 : if (.not.(spgroupma>=449 .and. 458>=spgroupma) ) spgrmatch=0
867 : : case(133)
868 [ - + ]: 10 : if (.not.(spgroupma>=461 .and. 470>=spgroupma) ) spgrmatch=0
869 : : case(134)
870 [ - + ]: 10 : if (.not.(spgroupma>=473 .and. 482>=spgroupma) ) spgrmatch=0
871 : : case(135)
872 [ - + ]: 10 : if (.not.(spgroupma>=485 .and. 494>=spgroupma) ) spgrmatch=0
873 : : case(136)
874 [ - + ]: 10 : if (.not.(spgroupma>=497 .and. 506>=spgroupma) ) spgrmatch=0
875 : : case(137)
876 [ - + ]: 10 : if (.not.(spgroupma>=509 .and. 518>=spgroupma) ) spgrmatch=0
877 : : case(138)
878 [ - + ]: 10 : if (.not.(spgroupma>=521 .and. 530>=spgroupma) ) spgrmatch=0
879 : : case(139)
880 [ - + ]: 8 : if (.not.(spgroupma>=533 .and. 540>=spgroupma) ) spgrmatch=0
881 : : case(140)
882 [ - + ]: 8 : if (.not.(spgroupma>=543 .and. 550>=spgroupma) ) spgrmatch=0
883 : : case(141)
884 [ - + ]: 8 : if (.not.(spgroupma>=553 .and. 560>=spgroupma) ) spgrmatch=0
885 : : case(142)
886 [ - + ]: 8 : if (.not.(spgroupma>=563 .and. 570>=spgroupma) ) spgrmatch=0
887 : : case(143)
888 [ - + ]: 1 : if (.not.(spgroupma>=3 .and. 3>=spgroupma) ) spgrmatch=0
889 : : case(144)
890 [ - + ]: 1 : if (.not.(spgroupma>=6 .and. 6>=spgroupma) ) spgrmatch=0
891 : : case(145)
892 [ - + ]: 1 : if (.not.(spgroupma>=9 .and. 9>=spgroupma) ) spgrmatch=0
893 : : case(146)
894 [ - + ]: 1 : if (.not.(spgroupma>=12 .and. 12>=spgroupma) ) spgrmatch=0
895 : : case(147)
896 [ - + ]: 2 : if (.not.(spgroupma>=15 .and. 16>=spgroupma) ) spgrmatch=0
897 : : case(148)
898 [ - + ]: 2 : if (.not.(spgroupma>=19 .and. 20>=spgroupma) ) spgrmatch=0
899 : : case(149)
900 [ - + ]: 2 : if (.not.(spgroupma>=23 .and. 24>=spgroupma) ) spgrmatch=0
901 : : case(150)
902 [ - + ]: 2 : if (.not.(spgroupma>=27 .and. 28>=spgroupma) ) spgrmatch=0
903 : : case(151)
904 [ - + ]: 2 : if (.not.(spgroupma>=31 .and. 32>=spgroupma) ) spgrmatch=0
905 : : case(152)
906 [ - + ]: 2 : if (.not.(spgroupma>=35 .and. 36>=spgroupma) ) spgrmatch=0
907 : : case(153)
908 [ - + ]: 2 : if (.not.(spgroupma>=39 .and. 40>=spgroupma) ) spgrmatch=0
909 : : case(154)
910 [ - + ]: 2 : if (.not.(spgroupma>=43 .and. 44>=spgroupma) ) spgrmatch=0
911 : : case(155)
912 [ - + ]: 2 : if (.not.(spgroupma>=47 .and. 48>=spgroupma) ) spgrmatch=0
913 : : case(156)
914 [ - + ]: 2 : if (.not.(spgroupma>=51 .and. 52>=spgroupma) ) spgrmatch=0
915 : : case(157)
916 [ - + ]: 2 : if (.not.(spgroupma>=55 .and. 56>=spgroupma) ) spgrmatch=0
917 : : case(158)
918 [ - + ]: 2 : if (.not.(spgroupma>=59 .and. 60>=spgroupma) ) spgrmatch=0
919 : : case(159)
920 [ - + ]: 2 : if (.not.(spgroupma>=63 .and. 64>=spgroupma) ) spgrmatch=0
921 : : case(160)
922 [ - + ]: 2 : if (.not.(spgroupma>=67 .and. 68>=spgroupma) ) spgrmatch=0
923 : : case(161)
924 [ - + ]: 2 : if (.not.(spgroupma>=71 .and. 72>=spgroupma) ) spgrmatch=0
925 : : case(162)
926 [ - + ]: 4 : if (.not.(spgroupma>=75 .and. 78>=spgroupma) ) spgrmatch=0
927 : : case(163)
928 [ - + ]: 4 : if (.not.(spgroupma>=81 .and. 84>=spgroupma) ) spgrmatch=0
929 : : case(164)
930 [ - + ]: 4 : if (.not.(spgroupma>=87 .and. 90>=spgroupma) ) spgrmatch=0
931 : : case(165)
932 [ - + ]: 4 : if (.not.(spgroupma>=93 .and. 96>=spgroupma) ) spgrmatch=0
933 : : case(166)
934 [ - + ]: 5 : if (.not.(spgroupma>=99 .and. 102>=spgroupma) ) spgrmatch=0
935 : : case(167)
936 [ - + ]: 4 : if (.not.(spgroupma>=105 .and. 108>=spgroupma) ) spgrmatch=0
937 : : case(168)
938 [ - + ]: 2 : if (.not.(spgroupma>=111 .and. 112>=spgroupma) ) spgrmatch=0
939 : : case(169)
940 [ - + ]: 2 : if (.not.(spgroupma>=115 .and. 116>=spgroupma) ) spgrmatch=0
941 : : case(170)
942 [ - + ]: 2 : if (.not.(spgroupma>=119 .and. 120>=spgroupma) ) spgrmatch=0
943 : : case(171)
944 [ - + ]: 2 : if (.not.(spgroupma>=123 .and. 124>=spgroupma) ) spgrmatch=0
945 : : case(172)
946 [ - + ]: 2 : if (.not.(spgroupma>=127 .and. 128>=spgroupma) ) spgrmatch=0
947 : : case(173)
948 [ - + ]: 2 : if (.not.(spgroupma>=131 .and. 132>=spgroupma) ) spgrmatch=0
949 : : case(174)
950 [ - + ]: 2 : if (.not.(spgroupma>=135 .and. 136>=spgroupma) ) spgrmatch=0
951 : : case(175)
952 [ - + ]: 4 : if (.not.(spgroupma>=139 .and. 142>=spgroupma) ) spgrmatch=0
953 : : case(176)
954 [ - + ]: 4 : if (.not.(spgroupma>=145 .and. 148>=spgroupma) ) spgrmatch=0
955 : : case(177)
956 [ - + ]: 4 : if (.not.(spgroupma>=151 .and. 154>=spgroupma) ) spgrmatch=0
957 : : case(178)
958 [ - + ]: 4 : if (.not.(spgroupma>=157 .and. 160>=spgroupma) ) spgrmatch=0
959 : : case(179)
960 [ - + ]: 4 : if (.not.(spgroupma>=163 .and. 166>=spgroupma) ) spgrmatch=0
961 : : case(180)
962 [ - + ]: 4 : if (.not.(spgroupma>=169 .and. 172>=spgroupma) ) spgrmatch=0
963 : : case(181)
964 [ - + ]: 4 : if (.not.(spgroupma>=175 .and. 178>=spgroupma) ) spgrmatch=0
965 : : case(182)
966 [ - + ]: 4 : if (.not.(spgroupma>=181 .and. 184>=spgroupma) ) spgrmatch=0
967 : : case(183)
968 [ - + ]: 4 : if (.not.(spgroupma>=187 .and. 190>=spgroupma) ) spgrmatch=0
969 : : case(184)
970 [ - + ]: 4 : if (.not.(spgroupma>=193 .and. 196>=spgroupma) ) spgrmatch=0
971 : : case(185)
972 [ - + ]: 4 : if (.not.(spgroupma>=199 .and. 202>=spgroupma) ) spgrmatch=0
973 : : case(186)
974 [ - + ]: 4 : if (.not.(spgroupma>=205 .and. 208>=spgroupma) ) spgrmatch=0
975 : : case(187)
976 [ - + ]: 4 : if (.not.(spgroupma>=211 .and. 214>=spgroupma) ) spgrmatch=0
977 : : case(188)
978 [ - + ]: 4 : if (.not.(spgroupma>=217 .and. 220>=spgroupma) ) spgrmatch=0
979 : : case(189)
980 [ - + ]: 4 : if (.not.(spgroupma>=223 .and. 226>=spgroupma) ) spgrmatch=0
981 : : case(190)
982 [ - + ]: 4 : if (.not.(spgroupma>=229 .and. 232>=spgroupma) ) spgrmatch=0
983 : : case(191)
984 [ - + ]: 8 : if (.not.(spgroupma>=235 .and. 242>=spgroupma) ) spgrmatch=0
985 : : case(192)
986 [ - + ]: 8 : if (.not.(spgroupma>=245 .and. 252>=spgroupma) ) spgrmatch=0
987 : : case(193)
988 [ - + ]: 8 : if (.not.(spgroupma>=255 .and. 262>=spgroupma) ) spgrmatch=0
989 : : case(194)
990 [ - + ]: 8 : if (.not.(spgroupma>=265 .and. 272>=spgroupma) ) spgrmatch=0
991 : : case(195)
992 [ - + ]: 1 : if (.not.(spgroupma>=3 .and. 3>=spgroupma) ) spgrmatch=0
993 : : case(196)
994 [ - + ]: 1 : if (.not.(spgroupma>=6 .and. 6>=spgroupma) ) spgrmatch=0
995 : : case(197)
996 : 0 : spgrmatch=0
997 : : case(198)
998 [ - + ]: 1 : if (.not.(spgroupma>=11 .and. 11>=spgroupma) ) spgrmatch=0
999 : : case(199)
1000 : 0 : spgrmatch=0
1001 : : case(200)
1002 [ - + ]: 2 : if (.not.(spgroupma>=16 .and. 17>=spgroupma) ) spgrmatch=0
1003 : : case(201)
1004 [ - + ]: 2 : if (.not.(spgroupma>=20 .and. 21>=spgroupma) ) spgrmatch=0
1005 : : case(202)
1006 [ - + ]: 2 : if (.not.(spgroupma>=24 .and. 25>=spgroupma) ) spgrmatch=0
1007 : : case(203)
1008 [ - + ]: 2 : if (.not.(spgroupma>=28 .and. 29>=spgroupma) ) spgrmatch=0
1009 : : case(204)
1010 [ - + ]: 1 : if (.not.(spgroupma>=32 .and. 32>=spgroupma) ) spgrmatch=0
1011 : : case(205)
1012 [ - + ]: 2 : if (.not.(spgroupma>=35 .and. 36>=spgroupma) ) spgrmatch=0
1013 : : case(206)
1014 [ - + ]: 1 : if (.not.(spgroupma>=39 .and. 39>=spgroupma) ) spgrmatch=0
1015 : : case(207)
1016 [ - + ]: 2 : if (.not.(spgroupma>=42 .and. 43>=spgroupma) ) spgrmatch=0
1017 : : case(208)
1018 [ - + ]: 2 : if (.not.(spgroupma>=46 .and. 47>=spgroupma) ) spgrmatch=0
1019 : : case(209)
1020 [ - + ]: 2 : if (.not.(spgroupma>=50 .and. 51>=spgroupma) ) spgrmatch=0
1021 : : case(210)
1022 [ - + ]: 2 : if (.not.(spgroupma>=54 .and. 55>=spgroupma) ) spgrmatch=0
1023 : : case(211)
1024 [ - + ]: 1 : if (.not.(spgroupma>=58 .and. 58>=spgroupma) ) spgrmatch=0
1025 : : case(212)
1026 [ - + ]: 2 : if (.not.(spgroupma>=61 .and. 62>=spgroupma) ) spgrmatch=0
1027 : : case(213)
1028 [ - + ]: 2 : if (.not.(spgroupma>=65 .and. 66>=spgroupma) ) spgrmatch=0
1029 : : case(214)
1030 [ - + ]: 1 : if (.not.(spgroupma>=69 .and. 69>=spgroupma) ) spgrmatch=0
1031 : : case(215)
1032 [ - + ]: 2 : if (.not.(spgroupma>=72 .and. 73>=spgroupma) ) spgrmatch=0
1033 : : case(216)
1034 [ - + ]: 2 : if (.not.(spgroupma>=76 .and. 77>=spgroupma) ) spgrmatch=0
1035 : : case(217)
1036 [ - + ]: 1 : if (.not.(spgroupma>=80 .and. 80>=spgroupma) ) spgrmatch=0
1037 : : case(218)
1038 [ - + ]: 2 : if (.not.(spgroupma>=83 .and. 84>=spgroupma) ) spgrmatch=0
1039 : : case(219)
1040 [ - + ]: 2 : if (.not.(spgroupma>=87 .and. 88>=spgroupma) ) spgrmatch=0
1041 : : case(220)
1042 [ - + ]: 1 : if (.not.(spgroupma>=91 .and. 91>=spgroupma) ) spgrmatch=0
1043 : : case(221)
1044 [ - + ]: 4 : if (.not.(spgroupma>=94 .and. 97>=spgroupma) ) spgrmatch=0
1045 : : case(222)
1046 [ - + ]: 4 : if (.not.(spgroupma>=100 .and. 103>=spgroupma) ) spgrmatch=0
1047 : : case(223)
1048 [ - + ]: 4 : if (.not.(spgroupma>=106 .and. 109>=spgroupma) ) spgrmatch=0
1049 : : case(224)
1050 [ - + ]: 4 : if (.not.(spgroupma>=112 .and. 115>=spgroupma) ) spgrmatch=0
1051 : : case(225)
1052 [ - + ]: 4 : if (.not.(spgroupma>=118 .and. 121>=spgroupma) ) spgrmatch=0
1053 : : case(226)
1054 [ - + ]: 4 : if (.not.(spgroupma>=124 .and. 127>=spgroupma) ) spgrmatch=0
1055 : : case(227)
1056 [ - + ]: 4 : if (.not.(spgroupma>=130 .and. 133>=spgroupma) ) spgrmatch=0
1057 : : case(228)
1058 [ - + ]: 4 : if (.not.(spgroupma>=136 .and. 139>=spgroupma) ) spgrmatch=0
1059 : : case(229)
1060 [ - + ]: 3 : if (.not.(spgroupma>=142 .and. 144>=spgroupma) ) spgrmatch=0
1061 : : case(230)
1062 [ - + ]: 3 : if (.not.(spgroupma>=147 .and. 149>=spgroupma) ) spgrmatch=0
1063 : : case default
1064 : : write(message, '(3a,i8,4a)' )&
1065 : 0 : & 'The non-magnetic spacegroup is not specified ',ch10,&
1066 : 0 : & 'while the magnetic space group is specified, spgroupma= ',spgroupma,ch10,&
1067 : 0 : & 'This is not allowed. ',ch10,&
1068 : 0 : & 'Action: specify spgroup in the input file.'
1069 [ + + + + : 1192 : ABI_ERROR(message)
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + - + -
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ - ]
1070 : : end select
1071 : :
1072 [ - + ]: 1192 : if (spgrmatch==0) then
1073 : : write(message, '(a,i8,a,a,i8,4a)' )&
1074 : 0 : & 'mismatch between the non-magnetic spacegroup ',spgroup,ch10,&
1075 : 0 : & 'and the magnetic space group ',spgroupma,ch10,&
1076 : 0 : & 'This is not allowed. ',ch10,&
1077 : 0 : & 'Action: modify spgroup or spgroupma in the input file.'
1078 : 0 : ABI_ERROR(message)
1079 : : end if
1080 : :
1081 : : !DEBUG
1082 : : !write(std_out,*) ' gensymshub, after check the spgroup ... '
1083 : : !ENDDEBUG
1084 : :
1085 : : !Assign the magnetic Bravais lattice type from the magnetic space group number
1086 : : !As the magnetic space group number begins with 1 for EACH crystal system
1087 : : !we must first make our choice as a function of spgroup
1088 : :
1089 : : !Convention :
1090 : : !brvlttbw = input variable giving Bravais black-and-white translation
1091 : : !(from 1 to 8 : Shubnikov type IV space group)
1092 : : !1,2,3 = 1/2 translation along a, b, or c respectively
1093 : : !4,5,6 = translation corresponding to A,B,C centering, respectively
1094 : : !7 = I centering
1095 : : !8 = (1/2 0 0) centering corresponding to normal F lattice
1096 : : !9 -> Shubnikov type III space group
1097 : : !Note that the use of the table 7.3 (p585) of Bradney and Cracknell
1098 : : !for the definition of the translation vectors
1099 : : !is extremely confusing, due to the strange choice of basis
1100 : : !vectors of table 3.1.
1101 : : !See table 7.4 (p588) for the spgroupma interpretation
1102 : :
1103 : 3 : select case(spgroup)
1104 : : case(1,2) !Triclinic
1105 : 69 : select case(spgroupma)
1106 : : case(6)
1107 : 1 : brvlttbw=9 !ShubIII
1108 : : case(3,7)
1109 [ + + - ]: 3 : brvlttbw=1 !Ps (note that it is not body centered, according to Table
1110 : : ! 7.3 of Bradley and Cracknell)
1111 : : end select
1112 : : case(3:15) !Monoclinic
1113 : 534 : select case(spgroupma)
1114 : : case(3,9,15,20,26,34,39,44:46,52:54,60:62,67:69,77:79,87:89)
1115 : 25 : brvlttbw=9 !ShubIII
1116 : : case(4,10,17,21,27,36,41,47,55,64,70,80,91)
1117 : 13 : brvlttbw=1 !a
1118 : : case(5,11,22,29,48,56,71,81)
1119 : 8 : brvlttbw=2 !b
1120 : : case(16,28,35,40,63,72,82,90)
1121 : 8 : brvlttbw=3 !c
1122 : : case(31,73,83)
1123 : 3 : brvlttbw=4 !A
1124 : : case(6,12,23,30,49,57,74,84)
1125 [ + + + + : 65 : brvlttbw=6 !C
+ + - ]
1126 : : end select
1127 : : case(16:74) !Orthorhombic
1128 : 1091 : select case(spgroupma)
1129 : : case(3,9,10,18,19,27,33,34,40,41,47,51,55,59,60,68:70,&
1130 : : & 80,81,89:91,101:103,113:115,125:127,137,138,146:148,158,159,&
1131 : : & 167,168,174:176,182,183,189:191,197:199,205:207,213:215,221,&
1132 : : & 222,226,227,231,232,237,238,243:245,251:253,259:261,267:271,&
1133 : : & 279:283,291:297,307:313,323:329,339:345,355:359,367:371,&
1134 : : & 379:385,395:399,407:411,419:425,435:437,443:449,459:465,&
1135 : : & 471:477,483:487,493:497,503:507,513:517,523:525,529:531,&
1136 : : & 535:537,541:545,550:552,556:560)
1137 : 213 : brvlttbw=9 !ShubIII
1138 : : case(4,11,20,28,36,43,62,71,83,92,104,116,128,140,&
1139 : : & 149,160,170,178,185,192,200,208,216,234,240,247,254,262,272,&
1140 : : & 284,298,314,330,346,360,372,386,400,412,426,438,450,467,&
1141 : : & 479,489,499,509,519,547,562)
1142 : 50 : brvlttbw=1 !a
1143 : : case(72,93,105,117,129,150,248,299,315,331,347,387,427,451)
1144 : 14 : brvlttbw=2 !b
1145 : : case(12,21,35,42,52,56,61,73,82,94,106,118,130,139,&
1146 : : & 151,161,169,177,184,193,201,209,217,233,239,246,273,285,300,&
1147 : : & 316,332,348,361,373,388,401,413,428,452,466,478,488,498,&
1148 : : & 508,518,538,546,553,561)
1149 : 49 : brvlttbw=3 !c
1150 : : case(13,22,37,44,64,74,85,95,107,119,131,142,152,162,&
1151 : : & 171,179,186,274,286,301,317,333,349,362,374,389,402,414,429,&
1152 : : & 453,468,480,490,500,510,520)
1153 : 36 : brvlttbw=4 !A
1154 : : case(75,96,108,120,132,153,302,318,334,350,390,430,454)
1155 : 13 : brvlttbw=5 !B
1156 : : case(5,14,23,29,63,76,84,97,109,121,133,141,154,163,&
1157 : : & 194,202,210,218,255,263,275,287,303,319,335,351,363,375,&
1158 : : & 391,403,415,431,439,455)
1159 : 34 : brvlttbw=6 !C
1160 : : case(6,15,24,30,65,77,86,98,110,122,134,143,155,164,256,&
1161 : : & 264,276,288,304,320,336,352,364,376,392,404,416,432,440,456)
1162 : 30 : brvlttbw=7 !I
1163 : : case(48,223,228,526,532)
1164 [ + + + + : 444 : brvlttbw=8 !s
+ + + + +
- ]
1165 : : end select
1166 : : case(75:142) !Tetragonal
1167 : 871 : select case(spgroupma)
1168 : : case(3,9,15,21,27,31,35,41,45:47,53:55,61:63,69:71,&
1169 : : & 77:79,83:85,89:91,97:99,105:107,113:115,121:123,129:131,&
1170 : : & 137:139,145:147,153:155,159:161,165:167,173:175,181:183,&
1171 : : & 189:191,197:199,205:207,213:215,221:223,229:231,235:237,&
1172 : : & 241:243,247:249,253:255,261:263,269:271,277:279,285:287,&
1173 : : & 293:295,301:303,309:311,317:319,323:325,329:331,335:337,&
1174 : : & 341:347,353:359,365:371,377:383,389:395,401:407,413:419,&
1175 : : & 425:431,437:443,449:455,461:467,473:479,485:491,497:503,&
1176 : : & 509:515,521:527,533:539,543:549,553:559,563:569)
1177 : 268 : brvlttbw=9 !ShubIII
1178 : : case(4,10,16,22,28,32,36,42,48,56,64,72,80,86,92,100,&
1179 : : & 108,116,124,132,140,148,156,162,168,176,184,192,200,208,&
1180 : : & 216,224,232,238,244,250,256,264,272,280,288,296,304,312,&
1181 : : & 320,326,332,338,348,360,372,384,396,408,420,432,444,456,&
1182 : : & 468,480,492,504,516,528,540,550,560,570)
1183 : 68 : brvlttbw=3 !c
1184 : : case(5,11,17,23,37,49,57,65,73,93,101,109,117,125,133,141,&
1185 : : & 149,169,177,185,193,201,209,217,225,257,265,273,281,289,297,&
1186 : : & 305,313,349,361,373,385,397,409,421,433,445,457,469,481,493,&
1187 : : & 505,517,529)
1188 : 49 : brvlttbw=6 !C
1189 : : case(6,12,18,24,38,50,58,66,74,94,102,110,118,126,134,142,&
1190 : : & 150,170,178,186,194,202,210,218,226,258,266,274,282,290,298,&
1191 : : & 306,314,350,362,374,386,398,410,422,434,446,458,470,482,494,&
1192 : : & 506,518,530)
1193 [ + + + + : 434 : brvlttbw=7 !I
- ]
1194 : : end select
1195 : : case(143:194) !Hexagonal
1196 : 362 : select case(spgroupma)
1197 : : case(15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,&
1198 : : & 75:77,81:83,87:89,93:95,99:101,105:107,111,115,119,123,127,&
1199 : : & 131,135,139:141,145:147,151:153,157:159,163:165,169:171,&
1200 : : & 175:177,181:183,187:189,193:195,199:201,205:207,211:213,&
1201 : : & 217:219,223:225,229:231,235:241,245:251,255:261,265:271)
1202 : 116 : brvlttbw=9 !ShubIII
1203 : : case(3,6,9,16,24,28,32,36,40,44,52,56,60,64,78,84,&
1204 : : & 90,96,112,116,120,124,128,132,136,142,148,154,160,166,172,&
1205 : : & 178,184,190,196,202,208,214,220,226,232,242,252,262,272)
1206 : : ! brvlttbw=6 !C XG230719 This is likely erroneous
1207 : 45 : brvlttbw=3 !c
1208 : : case(12,20,48,68,72,102,108)
1209 [ + + + - ]: 169 : brvlttbw=7 !I
1210 : : end select
1211 : : case(195:230) !Cubic
1212 [ + + + + : 1192 : select case(spgroupma)
+ + - ]
1213 : : case(16,20,24,28,32,35,39,42,46,50,54,58,61,65,69,&
1214 : : & 72,76,80,83,87,91,94:96,100:102,106:108,112:114,118:120,&
1215 : : & 124:126,130:132,136:138,142:144,147:149)
1216 : 51 : brvlttbw=9 !ShubIII
1217 : : case(3,11,17,21,36,43,47,62,66,73,84,97,103,109,115)
1218 : 15 : brvlttbw=7 !I
1219 : : case(6,25,29,51,55,77,88,121,127,133,139)
1220 [ + + + - ]: 77 : brvlttbw=8 !s
1221 : : end select
1222 : : end select
1223 : :
1224 [ + + ]: 1192 : if(brvlttbw==9)shubnikov=3 !Shubnikov type III
1225 [ + + ]: 1192 : if(brvlttbw>=1 .and. brvlttbw<=8) shubnikov=4 !Shubnikov type IV
1226 : :
1227 : 1192 : genafm(:)=zero
1228 [ + + ]: 1192 : if(shubnikov==4)then
1229 [ + + ]: 518 : if(brvlttbw==1)genafm(1)=half
1230 [ + + ]: 518 : if(brvlttbw==2)genafm(2)=half
1231 [ + + ]: 518 : if(brvlttbw==3)genafm(3)=half
1232 [ + + ]: 518 : if(brvlttbw>=4 .and. brvlttbw<=8)then
1233 [ + + ]: 1044 : genafm(:)=half
1234 [ + + ]: 261 : if(brvlttbw==4)genafm(1)=zero
1235 [ + + ]: 261 : if(brvlttbw==5)genafm(2)=zero
1236 [ + + ]: 261 : if(brvlttbw==6)genafm(3)=zero
1237 : : end if
1238 : : end if
1239 : :
1240 : : !DEBUG
1241 : : !write(std_out,*) 'gensymshub : end '
1242 : : !write(std_out,*) 'gensymshub : brvlttbw=',brvlttbw
1243 : : !write(std_out,*) 'gensymshub : genafm=',genafm
1244 : : !write(std_out,*) 'gensymshub, shubnikov =',shubnikov
1245 : : !ENDDEBUG
1246 : :
1247 : 1192 : end subroutine gensymshub
1248 : : !!***
1249 : :
1250 : : !!****f* m_spgbuilder/gensymshub4
1251 : : !! NAME
1252 : : !! gensymshub4
1253 : : !!
1254 : : !! FUNCTION
1255 : : !! Assigns the Bravais magnetic translations for shubnikov type IV
1256 : : !! symmetry groups starting from the Fedorov space group
1257 : : !! and the translation, generator of the anti-ferromagnetic
1258 : : !! operations (as input). It will double nsym and tnons. In the end both
1259 : : !! symrel and tnons are completely determined.
1260 : : !!
1261 : : !! INPUTS
1262 : : !! genafm(3) = translation, generator of the anti-ferromagnetic symmatry operations
1263 : : !! msym = maximum number of symmetry operations
1264 : : !!
1265 : : !! OUTPUT
1266 : : !! symafm(msym)= (anti)ferromagnetic part of symmetry operations
1267 : : !!
1268 : : !! SIDE EFFECTS
1269 : : !! nsym=number of symmetry operations, without magnetic operations at input,
1270 : : !! and with magnetic operations at output
1271 : : !! symrel(3,3,msym)=symmetry operations in real space in terms
1272 : : !! of primitive translations, without magnetic operations at input,
1273 : : !! and with magnetic operations at output
1274 : : !! tnons(3,msym)=nonsymmorphic translations for symmetry operations
1275 : : !! without magnetic operations at input,
1276 : : !! and with magnetic operations at output
1277 : : !!
1278 : : !! SOURCE
1279 : :
1280 : 519 : subroutine gensymshub4(genafm,msym,nsym,symafm,symrel,tnons)
1281 : :
1282 : : !Arguments ------------------------------------
1283 : : !scalars
1284 : : integer,intent(in) :: msym
1285 : : integer,intent(inout) :: nsym
1286 : : !arrays
1287 : : integer,intent(inout) :: symafm(msym),symrel(3,3,msym)
1288 : : real(dp),intent(in) :: genafm(3)
1289 : : real(dp),intent(inout) :: tnons(3,msym)
1290 : :
1291 : : !Local variables ------------------------------
1292 : : !scalars
1293 : : integer :: ii
1294 : : character(len=500) :: message
1295 : : ! *************************************************************************
1296 : :
1297 [ - + ]: 519 : if(msym<2*nsym)then
1298 : : write(message, '(3a)' )&
1299 : 0 : 'The number of symmetries in the Shubnikov type IV space group',ch10,&
1300 : 0 : 'is larger than the maximal allowed number of symmetries.'
1301 : 0 : ABI_ERROR(message)
1302 : : end if
1303 : :
1304 [ + + ]: 6666 : do ii=1,nsym
1305 [ + + ]: 24588 : tnons(:,nsym+ii)=tnons(:,ii)+genafm(:)
1306 [ + + + + ]: 79911 : symrel(:,:,nsym+ii)=symrel(:,:,ii)
1307 : 6147 : symafm(ii)=1
1308 : 6666 : symafm(nsym+ii)=-1
1309 : : end do
1310 : 519 : nsym=nsym*2
1311 : :
1312 : 519 : end subroutine gensymshub4
1313 : : !!***
1314 : :
1315 : : end module m_spgbuilder
1316 : : !!***
|