LCOV - code coverage report
Current view: top level - src/41_geometry - m_symsg.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 74.5 % 1456 1085
Test Date: 2026-09-21 13:49:52 Functions: 100.0 % 6 6

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

Generated by: LCOV version 2.3-1