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-11-11 14:12:33 Functions: 100.0 % 6 6
Branches: 68.5 % 3823 2617

             Branch data     Line data    Source code
       1                 :             : !!****m* ABINIT/m_symsg
       2                 :             : !! NAME
       3                 :             : !!  m_symsg
       4                 :             : !!
       5                 :             : !! FUNCTION
       6                 :             : !!
       7                 :             : !!
       8                 :             : !! COPYRIGHT
       9                 :             : !!  Copyright (C) 1999-2026 ABINIT group (RC,XG)
      10                 :             : !!  This file is distributed under the terms of the
      11                 :             : !!  GNU General Public License, see ~abinit/COPYING
      12                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
      13                 :             : !!
      14                 :             : !! SOURCE
      15                 :             : 
      16                 :             : #if defined HAVE_CONFIG_H
      17                 :             : #include "config.h"
      18                 :             : #endif
      19                 :             : 
      20                 :             : #include "abi_common.h"
      21                 :             : 
      22                 :             : module m_symsg
      23                 :             : 
      24                 :             :  use defs_basis
      25                 :             :  use m_errors
      26                 :             :  use m_abicore
      27                 :             : 
      28                 :             :  use m_time,     only : timab
      29                 :             :  use m_spgdata,  only : spgdata
      30                 :             : 
      31                 :             :  implicit none
      32                 :             : 
      33                 :             :  private
      34                 :             : !!***
      35                 :             : 
      36                 :             :  public :: symsgcube
      37                 :             :  public :: symsghexa
      38                 :             :  public :: symsgmono
      39                 :             :  public :: symsgortho
      40                 :             :  public :: symsgtetra
      41                 :             : !!***
      42                 :             : 
      43                 :             : contains
      44                 :             : !!***
      45                 :             : 
      46                 :             : !!****f* m_symsg/symsgcube
      47                 :             : !! NAME
      48                 :             : !! symsgcube
      49                 :             : !!
      50                 :             : !! FUNCTION
      51                 :             : !! Generate all the symmetry operations starting from the space group symbol
      52                 :             : !! for the cubic groups (according to the International Tables of Crystallography, 1983)
      53                 :             : !!
      54                 :             : !! INPUTS
      55                 :             : !! msym = default number of symmetries
      56                 :             : !! shubnikov= magnetic type of the space group to be generated
      57                 :             : !! spgaxor = the possible orientation of the axes system
      58                 :             : !! spgorig = the origin choice (1 or 2) for the axes system
      59                 :             : !! spgroup = the numeric symbol of the space groups
      60                 :             : !! spgroupma = number of the magnetic space group
      61                 :             : !!
      62                 :             : !! OUTPUT
      63                 :             : !! nsym = the number of symmetry operations
      64                 :             : !! symafm(nsym)=(anti)ferromagnetic part of symmetry operations
      65                 :             : !! symrel(3,3,nsym) = 3D matrix containg symmetry operations
      66                 :             : !! tnons(3,nsym) = 2D matrix containing translations associated
      67                 :             : !!
      68                 :             : !! SOURCE
      69                 :             : 
      70                 :         122 : 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   [ +  +  +  + ]:        1586 :  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         [ +  + ]:       46970 :  do ii=1,msym
     106         [ +  + ]:      187514 :    tnons(:,ii)= 0.0d0
     107                 :             :  end do
     108                 :         122 :  nogen=0
     109                 :             : 
     110                 :             : !Predefine some generators
     111                 :         122 :  genmpp(:,:)=0 ; genmpp(1,1)=-1 ; genmpp(2,2)= 1 ; genmpp(3,3)= 1
     112                 :         122 :  genpmp(:,:)=0 ; genpmp(1,1)= 1 ; genpmp(2,2)=-1 ; genpmp(3,3)= 1
     113                 :         122 :  genppm(:,:)=0 ; genppm(1,1)= 1 ; genppm(2,2)= 1 ; genppm(3,3)=-1
     114                 :         122 :  genpmm(:,:)=0 ; genpmm(1,1)= 1 ; genpmm(2,2)=-1 ; genpmm(3,3)=-1
     115                 :         122 :  genmpm(:,:)=0 ; genmpm(1,1)=-1 ; genmpm(2,2)= 1 ; genmpm(3,3)=-1
     116                 :         122 :  genmmp(:,:)=0 ; genmmp(1,1)=-1 ; genmmp(2,2)=-1 ; genmmp(3,3)= 1
     117                 :         122 :  genmmm(:,:)=0 ; genmmm(1,1)=-1 ; genmmm(2,2)=-1 ; genmmm(3,3)=-1
     118                 :         122 :  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                 :         122 :  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                 :         122 :  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                 :         122 :  gen1(:,:)=0 ; gen1(1,1)=1
     125                 :         122 :  gen2(:,:)=0 ; gen2(1,2)=1
     126                 :         122 :  gen3(:,:)=0 ; gen3(1,3)=1
     127                 :         122 :  gen4(:,:)=0 ; gen4(2,1)=1
     128                 :         122 :  gen5(:,:)=0 ; gen5(2,2)=1
     129                 :         122 :  gen6(:,:)=0 ; gen6(2,3)=1
     130                 :         122 :  gen7(:,:)=0 ; gen7(3,1)=1
     131                 :         122 :  gen8(:,:)=0 ; gen8(3,2)=1
     132                 :         122 :  gen9(:,:)=0 ; gen9(3,3)=1
     133                 :             : 
     134                 :             : !Default non-magnetic behaviour
     135         [ +  + ]:       46970 :  symafm(1:msym)=1
     136                 :             : 
     137                 :             : !*************************************************************************
     138                 :             : 
     139                 :             : !Treat CUBIC groups
     140                 :             : 
     141         [ +  - ]:         122 :  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   [ +  +  +  + ]:         260 :      symrel(:,:,2) = genrot(:,:)
     351   [ +  +  +  + ]:         260 :      symrel(:,:,3) = genmmp(:,:)
     352   [ +  +  +  + ]:         260 :      symrel(:,:,4) = genmpm(:,:)
     353   [ +  +  +  + ]:         260 :      symrel(:,:,5) = genswm(:,:)
     354         [ +  + ]:          20 :      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                 :          20 :      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   [ +  +  +  +  :         126 :      nogen=5
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
                   +  + ]
     503                 :             :    end select
     504                 :             : 
     505                 :             : !  End CUBIC space groups
     506                 :             :  end if
     507                 :             : 
     508                 :             : !***************************************************************************
     509                 :             : 
     510                 :         122 :  call timab(47,1,tsec)
     511                 :             : 
     512         [ +  + ]:         122 :  if (nogen>0) then
     513                 :         100 :    call bldgrp(msym,nogen,nsym,symafm,symrel,tnons)
     514                 :             :  end if
     515                 :             : 
     516                 :         122 :  call timab(47,2,tsec)
     517                 :             : 
     518                 :         122 :  call spgdata(brvsb,intsb,intsbl,ptintsb,ptschsb,schsb,spgaxor,spgroup,sporder,spgorig)
     519                 :             : 
     520                 :         122 : 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                 :        1409 : 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                 :        2818 :  integer :: bcksymafm(2*msym),bcksymrel(3,3,2*msym),matrintoper(3,3)
    2395                 :        2818 :  real(dp) :: bcktnons(3,2*msym),matrinttransl(3)
    2396                 :             : 
    2397                 :             : ! *************************************************************************
    2398                 :             : 
    2399                 :        1409 :  nastyzero=0.1
    2400                 :             : 
    2401                 :             : !DEBUG
    2402                 :        1409 :   write(std_out,*)' bldgrp : enter, builds the space group symmetry '
    2403                 :        1409 :   write(std_out,*)' bldgrp : number of generators : ',nogen
    2404                 :        1409 :   write(std_out,*)' bldgrp : nsym,msym=',nsym,msym
    2405                 :             : !ENDDEBUG
    2406                 :             : 
    2407         [ -  + ]:        1409 :  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         [ +  + ]:        6635 :  do ii=1,nogen
    2418   [ +  +  +  + ]:       67938 :    bcksymrel(:,:,ii)=symrel(:,:,ii)
    2419         [ +  + ]:       20904 :    bcktnons(:,ii)=tnons(:,ii)
    2420                 :        6635 :    bcksymafm(ii)=symafm(ii)
    2421                 :             :  end do
    2422                 :             : 
    2423                 :             : !DEBUG
    2424                 :        1409 :  write(std_out,*)' Describe the different generators (index,symrel,tnons,symafm)'
    2425         [ +  + ]:        6635 :  do ii=1,nogen
    2426                 :        6635 :    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         [ +  - ]:        2203 :  do ijkl=1,nsym
    2432                 :             : 
    2433                 :             : !  DEBUG
    2434                 :        2203 :    write(std_out,*)' bldgrp : in loop, ijkl,nogen=',ijkl,nogen
    2435                 :             : !  ENDDEBUG
    2436                 :             : 
    2437                 :        2203 :    nogen_new=nogen
    2438                 :             : 
    2439         [ +  + ]:       13269 :    do jjj=2,nogen
    2440         [ +  + ]:      236869 :      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   [ +  +  +  +  :     8944000 :        matrintoper(:,:) = matmul(bcksymrel(:,:,jjj),bcksymrel(:,:,kk))
                   +  + ]
    2445   [ +  +  +  +  :     6260800 :        matrinttransl(:) = bcktnons(:,jjj)+matmul(bcksymrel(:,:,jjj),bcktnons(:,kk))
          +  +  +  +  +  
                      + ]
    2446                 :      223600 :        matrintsymafm    = bcksymafm(jjj)*bcksymafm(kk)
    2447                 :             : 
    2448                 :             : !      Rescaling translation between 0 and 1
    2449         [ +  + ]:      894400 :        do ii=1,3
    2450         [ +  + ]:      670800 :          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         [ +  + ]:      670800 :          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         [ +  + ]:      670800 :          if ( abs(matrinttransl(ii))<nastyzero) matrinttransl(ii)=0.0
    2461         [ +  + ]:      894400 :          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         [ +  + ]:    14082349 :        do ijk=1,nogen_new
    2466                 :             : 
    2467                 :    14073671 :          flagop=0 ; flagtr=0
    2468                 :             : 
    2469                 :             : !        Check for rotation similarity
    2470   [ +  +  +  +  :   182957723 :          if(sum((matrintoper-bcksymrel(:,:,ijk))**2)==0)flagop=1
                   +  + ]
    2471                 :             : 
    2472                 :             : !        Check for translation similarity
    2473   [ -  +  +  -  :    70368355 :          if(maxval((matrinttransl-bcktnons(:,ijk))**2)<nastyzero**2)flagtr=1
             +  +  +  + ]
    2474                 :             : 
    2475         [ +  + ]:     1643182 :          if(flagop+flagtr==2)exit
    2476                 :             : 
    2477                 :             :        end do
    2478                 :             : 
    2479                 :             : !      Add the new determined symmetry if it is unique
    2480         [ +  + ]:      234666 :        if (flagtr+flagop<2) then
    2481                 :        8678 :          nogen_new=nogen_new+1
    2482   [ +  +  +  + ]:      112814 :          bcksymrel(:,:,nogen_new)=matrintoper(:,:)
    2483         [ +  + ]:       34712 :          bcktnons(:,nogen_new)=matrinttransl(:)
    2484                 :        8678 :          bcksymafm(nogen_new)=matrintsymafm
    2485                 :             : !        DEBUG
    2486                 :        8678 :          write(std_out,*)' added one more symmetry : nogen_new=',nogen_new
    2487                 :             :          write(std_out,'(i3,2x,9i3,3es12.2,i3)')&
    2488                 :        8678 : &          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                 :        2203 :    nogen=nogen_new
    2496                 :             : 
    2497         [ +  + ]:        2203 :    if(nogen==nsym)exit
    2498                 :             : 
    2499                 :             :  end do
    2500                 :             : 
    2501                 :             : !Transfer of the calculated symmetry to the routine output
    2502         [ +  - ]:        1409 :  if (nogen==nsym) then
    2503   [ +  +  +  +  :      182161 :    symrel(:,:,1:nsym)=bcksymrel(:,:,1:nsym)
                   +  + ]
    2504   [ +  +  +  + ]:       57025 :    tnons(:,1:nsym)=bcktnons(:,1:nsym)
    2505         [ +  + ]:       15313 :    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                 :        1409 :  write(std_out,*)' bldgrp : exit with  ',nogen,' operation symmetries'
    2516                 :             : !ENDDEBUG
    2517                 :             : 
    2518                 :        1409 : end subroutine bldgrp
    2519                 :             : !!***
    2520                 :             : 
    2521                 :             : end module m_symsg
    2522                 :             : !!***
        

Generated by: LCOV version 2.3-1