LCOV - code coverage report
Current view: top level - src/80_tdep - m_tdep_utils.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 84.4 % 141 119
Test Date: 2026-11-09 20:57:54 Functions: 100.0 % 2 2
Branches: 79.9 % 204 163

             Branch data     Line data    Source code
       1                 :             : 
       2                 :             : #if defined HAVE_CONFIG_H
       3                 :             : #include "config.h"
       4                 :             : #endif
       5                 :             : 
       6                 :             : #include "abi_common.h"
       7                 :             : 
       8                 :             : module m_tdep_utils
       9                 :             : 
      10                 :             :  use defs_basis
      11                 :             :  use m_errors
      12                 :             :  use m_abicore
      13                 :             :  use m_xmpi
      14                 :             :  use m_io_tools
      15                 :             :  use m_tdep_dataset,     only : atdep_dataset_type, MPI_enreg_type
      16                 :             :  use m_tdep_latt,        only : Lattice_type
      17                 :             :  use m_tdep_sym,         only : Symmetries_type
      18                 :             :  use m_tdep_shell,       only : Shell_type
      19                 :             :  use m_tdep_model,       only : tdep_Model_type
      20                 :             :  use m_tdep_phi3,        only : tdep_build_phi3_333
      21                 :             :  use m_tdep_phi4,        only : tdep_build_phi4_3333
      22                 :             : 
      23                 :             :  implicit none
      24                 :             : 
      25                 :             :  public :: tdep_check_constraints
      26                 :             :  public :: tdep_print_Aknowledgments
      27                 :             : 
      28                 :             : contains
      29                 :             : 
      30                 :             : !====================================================================================================
      31                 :             : 
      32                 :          44 :  subroutine tdep_check_constraints(Model,distance,Invar,Sym,Shell3at,Shell4at)
      33                 :             : 
      34                 :             :   type(tdep_Model_type),intent(in) :: Model
      35                 :             :   type(atdep_dataset_type),intent(in) :: Invar
      36                 :             :   double precision, intent(in) :: distance(Invar%natom,Invar%natom,4)
      37                 :             :   type(Symmetries_type),intent(in) :: Sym
      38                 :             :   type(Shell_type), intent(in) :: Shell3at
      39                 :             :   type(Shell_type), intent(in) :: Shell4at
      40                 :             : 
      41                 :             :   integer :: ii,jj,kk,ll,iatom,jatom,katom,latom,isym,itrans
      42                 :             :   integer :: alpha,beta,gama,lambda
      43                 :             :   integer :: ishell,iatshell
      44                 :             :   double precision :: norm1
      45                 :             :   double precision :: Kroenecker(3,3),Phi3_333(3,3,3),Phi4_3333(3,3,3,3)
      46                 :          44 :   double precision, allocatable :: asr3(:,:,:,:,:),rot3(:,:,:,:,:)
      47                 :          44 :   double precision, allocatable :: asr4(:,:,:,:,:,:)
      48                 :             :   integer :: ierr
      49                 :             :   logical :: order2,order3,order4
      50                 :             : 
      51                 :          44 :   ierr = 0;
      52                 :             : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      53                 :             : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Compute the acoustic sum rule and the !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      54                 :             : !!!!!!!!!!!!!!!!!!!!!!!!!!! invariance under an arbitrary rotation of the system !!!!!!!!!!!!!!!!!!!!!!!
      55                 :             : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      56                 :          44 :   Kroenecker(:,:)=zero
      57                 :          44 :   Kroenecker(1,1)=1 ; Kroenecker(2,2)=1 ; Kroenecker(3,3)=1
      58                 :             : 
      59                 :          44 :   order2 = .false.
      60                 :          44 :   order3 = .false.
      61                 :          44 :   order4 = .false.
      62         [ +  - ]:          44 :   if (Invar%order.ge.2) order2=.true.
      63         [ +  + ]:          44 :   if (Invar%order.ge.3) order3=.true.
      64                 :             : !FB4th  if (Invar%order.ge.4) order4=.true.
      65                 :             :   if (Invar%order.ge.4) order4=.false.
      66                 :             : 
      67         [ +  - ]:          44 :   if (order2) then
      68                 :             : !   FIRST ORDER
      69                 :             : !   Acoustic sum rule (first order)'
      70         [ +  + ]:         176 :     do alpha=1,3
      71                 :         132 :       norm1=zero
      72         [ +  + ]:         450 :       do iatom=1,Invar%natom_unitcell
      73                 :         450 :         norm1=norm1+Model%Phi1((iatom-1)*3+alpha)
      74                 :             :       enddo
      75         [ -  + ]:         176 :       if (abs(norm1).gt.tol8) then
      76                 :           0 :         write(std_out,'(a,1(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ASR1) : alpha,Sum =',alpha,norm1
      77         [ #  # ]:           0 :         if (abs(norm1).gt.tol6) then
      78                 :           0 :           ABI_WARNING('The acoustic sum rule is not fulfilled (order 1)')
      79                 :             :         end if
      80                 :             :       end if
      81                 :             :     enddo
      82                 :             : !   Invariance under an arbitrary rotation (first order)'
      83         [ +  + ]:         176 :     do alpha=1,3
      84         [ +  + ]:         572 :       do beta=1,3
      85                 :         396 :         norm1=zero
      86         [ +  + ]:        1350 :         do iatom=1,Invar%natom_unitcell
      87                 :             :           norm1=norm1+Model%Phi1(3*(iatom-1)+alpha)*distance(1,iatom,beta +1)-&
      88                 :        1350 : &                     Model%Phi1(3*(iatom-1)+beta )*distance(1,iatom,alpha+1)
      89                 :             :         end do !iatom
      90         [ -  + ]:         528 :         if (abs(norm1).gt.tol8) then
      91                 :           0 :           write(std_out,'(a,2(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ROT1) : alpha,beta,Sum=',alpha,beta,norm1
      92         [ #  # ]:           0 :           if (abs(norm1).gt.tol6) then
      93                 :           0 :             ABI_WARNING('The invariance under arbitrary rotation is not fulfilled (order 1)')
      94                 :             :           end if
      95                 :             :         end if
      96                 :             :       end do !beta
      97                 :             :     end do !alpha
      98                 :             : 
      99                 :             : !   SECOND ORDER
     100                 :             : !   Acoustic sum rule (second order)
     101         [ +  + ]:        6926 :     do iatom=1,Invar%natom
     102         [ +  + ]:       27572 :       do alpha=1,3
     103         [ +  + ]:       89466 :         do beta=1,3
     104                 :       61938 :           norm1=zero
     105         [ +  + ]:    13312710 :           do jatom=1,Invar%natom
     106                 :    13312710 :             norm1=norm1+Model%Phi2%SR((iatom-1)*3+alpha,3*(jatom-1)+beta)
     107                 :             :           enddo
     108         [ -  + ]:       82584 :           if (abs(norm1).gt.tol8) then
     109                 :           0 :             write(std_out,'(a,3(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ASR2) : iatom,alpha,beta,Sum =',iatom,alpha,beta,norm1
     110         [ #  # ]:           0 :             if (abs(norm1).gt.tol6) then
     111                 :           0 :               ABI_WARNING('The acoustic sum rule is not fulfilled (order 2)')
     112                 :             :             end if
     113                 :             :           end if
     114                 :             :         enddo
     115                 :             :       enddo
     116                 :             :     enddo
     117                 :             : !   Invariance under an arbitrary rotation (first and second order)'
     118         [ +  + ]:        6926 :     do iatom=1,Invar%natom
     119         [ +  + ]:       27572 :       do alpha=1,3
     120         [ +  + ]:       89466 :         do beta=1,3
     121         [ +  + ]:      268398 :           do gama=1,3
     122                 :      185814 :             norm1=zero
     123         [ +  + ]:    39938130 :             do jatom=1,Invar%natom
     124                 :             :               norm1=norm1+Model%Phi2%SR(3*(iatom-1)+alpha,3*(jatom-1)+beta)*distance(iatom,jatom,gama+1)-&
     125                 :    39938130 : &                         Model%Phi2%SR(3*(iatom-1)+alpha,3*(jatom-1)+gama)*distance(iatom,jatom,beta+1)
     126                 :             :             end do !jatom
     127                 :             :             norm1=norm1+Model%Phi1(3*(iatom-1)+beta)*Kroenecker(alpha,gama)&
     128                 :      185814 : &                      -Model%Phi1(3*(iatom-1)+gama)*Kroenecker(alpha,beta)
     129         [ +  + ]:      247752 :             if (abs(norm1).gt.tol8) then
     130                 :        9208 :               write(std_out,'(a,4(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ROT2) : iatom,alpha,beta,gama,Sum =',&
     131                 :       18416 : &                                                        iatom,alpha,beta,gama,norm1
     132         [ -  + ]:        9208 :               if (abs(norm1).gt.tol4) then
     133                 :           0 :                 ABI_WARNING('The invariance under arbitrary rotation is not fulfilled (order 2)')
     134                 :             :               end if
     135                 :             :             end if
     136                 :             :           end do !gama
     137                 :             :         end do !beta
     138                 :             :       end do !alpha
     139                 :             :     end do !iatom
     140                 :             :   end if !order=1,2
     141                 :             : 
     142         [ +  + ]:          44 :   if (order3) then
     143                 :             : !   THIRD ORDER
     144   [ -  +  +  -  :      207518 :     ABI_MALLOC(rot3,(Invar%natom,3,3,3,3)) ; rot3(:,:,:,:,:)=0.d0
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          +  +  +  +  +  
             +  +  +  + ]
     145   [ -  +  +  -  :      206384 :     ABI_MALLOC(asr3,(2,Invar%natom,3,3,3)) ; asr3(:,:,:,:,:)=0.d0
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          +  +  +  +  +  
             +  +  +  + ]
     146         [ +  + ]:        2554 :     do iatom=1,Invar%natom
     147   [ +  +  +  +  :    40261724 :       rot3(:,:,:,:,:)=0.d0
          +  +  +  +  +  
                      + ]
     148   [ +  +  +  +  :    40055984 :       asr3(:,:,:,:,:)=0.d0
          +  +  +  +  +  
                      + ]
     149         [ +  + ]:      495804 :       do jatom=1,Invar%natom
     150         [ +  + ]:      493264 :         if (distance(iatom,jatom,1).gt.Invar%rcut3) cycle
     151                 :             : !       Compute the rotational invariance (third order)
     152         [ +  + ]:       60636 :         do alpha=1,3
     153         [ +  + ]:      667552 :           do beta=1,3
     154         [ +  + ]:      566436 :             do gama=1,3
     155         [ +  + ]:     1699308 :               do lambda=1,3
     156                 :             :                 rot3(jatom,alpha,beta,gama,lambda)=rot3(jatom,alpha,beta,gama,lambda)+&
     157                 :             : &                    Model%Phi2%SR(3*(iatom-1)+gama  ,3*(jatom-1)+beta  )*Kroenecker(alpha,lambda)+&
     158                 :             : &                    Model%Phi2%SR(3*(iatom-1)+alpha ,3*(jatom-1)+gama  )*Kroenecker(beta,lambda)-&
     159                 :             : &                    Model%Phi2%SR(3*(iatom-1)+lambda,3*(jatom-1)+beta  )*Kroenecker(alpha,gama)-&
     160                 :     1568592 : &                    Model%Phi2%SR(3*(iatom-1)+alpha ,3*(jatom-1)+lambda)*Kroenecker(beta,gama)
     161                 :             :               end do !lambda
     162                 :             :             end do !gama
     163                 :             :           end do !beta
     164                 :             :         end do !alpha
     165                 :             :       end do !jatom
     166         [ +  + ]:       10868 :       do ishell=1,Shell3at%nshell
     167                 :             : !       Build the 3x3x3 IFC of an atom in this shell
     168         [ +  + ]:        8328 :         if (Shell3at%neighbours(iatom,ishell)%n_interactions.eq.0) cycle
     169         [ +  + ]:       88976 :         do iatshell=1,Shell3at%neighbours(iatom,ishell)%n_interactions
     170                 :       79388 :           jatom=Shell3at%neighbours(iatom,ishell)%atomj_in_shell(iatshell)
     171                 :       79388 :           katom=Shell3at%neighbours(iatom,ishell)%atomk_in_shell(iatshell)
     172                 :       79388 :           isym =Shell3at%neighbours(iatom,ishell)%sym_in_shell(iatshell)
     173                 :       79388 :           itrans=Shell3at%neighbours(iatom,ishell)%transpose_in_shell(iatshell)
     174                 :       79388 :           call tdep_build_phi3_333(isym,Model%Phi3(:,:,:,ishell),Phi3_333,Sym,itrans)
     175                 :             : !         Compute the first ASR : sum_k Phi3_ijk=0
     176                 :             : !              --> Phi3_iji+sum_{k.ne.i} Phi3_ijk=0
     177                 :             : !              --> if i.eq.j Phi3_iii+sum_{k.ne.i} Phi3_iik
     178   [ +  +  +  +  :     3175520 :           asr3(1,jatom,:,:,:)=asr3(1,jatom,:,:,:)+Phi3_333(:,:,:)
                   +  + ]
     179                 :             : !         Compute the second ASR : sum_j Phi3_ijk=0
     180   [ +  +  +  +  :     3175520 :           asr3(2,katom,:,:,:)=asr3(2,katom,:,:,:)+Phi3_333(:,:,:)
                   +  + ]
     181                 :             : !         Compute the rotational invariance (third order)
     182         [ +  + ]:      325880 :           do alpha=1,3
     183         [ +  + ]:     1032044 :             do beta=1,3
     184         [ +  + ]:     3096132 :               do gama=1,3
     185         [ +  + ]:     9288396 :                 do lambda=1,3
     186                 :             :                   rot3(jatom,alpha,beta,gama,lambda)=rot3(jatom,alpha,beta,gama,lambda)+&
     187                 :             : &                      Phi3_333(alpha,beta,gama  )*distance(iatom,katom,lambda+1)-&
     188                 :     8573904 : &                      Phi3_333(alpha,beta,lambda)*distance(iatom,katom,gama  +1)
     189                 :             :                 end do
     190                 :             :               end do
     191                 :             :             end do
     192                 :             :           end do
     193                 :             :         end do !iatshell
     194                 :             :       end do !ishell
     195                 :             : !     Check the acoustic sum rules (third order)
     196         [ +  + ]:       10160 :       do ii=1,3
     197         [ +  + ]:       33020 :         do jj=1,3
     198         [ +  + ]:       99060 :           do kk=1,3
     199                 :             : !           Check the first acoustic sum rule
     200         [ +  + ]:    13386708 :             do jatom=1,Invar%natom
     201         [ -  + ]:    13386708 :               if (abs(asr3(1,jatom,ii,jj,kk)).gt.tol8) then
     202                 :           0 :                 write(std_out,'(a,1x,5(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ASR3) --->',&
     203                 :           0 : &                                                             ii,jj,kk,iatom,jatom,asr3(1,jatom,ii,jj,kk)
     204         [ #  # ]:           0 :                 if (abs(asr3(1,jatom,ii,jj,kk)).gt.tol6)&
     205                 :           0 : &                  ABI_WARNING('The acoustic sum rule is not fulfilled (order 3, 3rd dim)')
     206                 :             :               end if
     207                 :             :             end do !jatom
     208                 :             : !           Check the second acoustic sum rule
     209         [ +  + ]:    13409568 :             do katom=1,Invar%natom
     210         [ -  + ]:    13386708 :               if (abs(asr3(2,katom,ii,jj,kk)).gt.tol8) then
     211                 :           0 :                 write(std_out,'(a,1x,5(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ASR3) --->',&
     212                 :           0 : &                                                             ii,jj,kk,iatom,katom,asr3(2,katom,ii,jj,kk)
     213         [ #  # ]:           0 :                 if (abs(asr3(2,katom,ii,jj,kk)).gt.tol6)&
     214                 :           0 : &                  ABI_WARNING('The acoustic sum rule is not fulfilled (order 3, 2nd dim)')
     215                 :             :               end if
     216                 :             :             end do !jatom
     217                 :             :           end do !kk
     218                 :             :         end do !jj
     219                 :             :       end do !ii
     220                 :             : !     Check the rotational invariance (third order)
     221         [ +  + ]:      495818 :       do jatom=1,Invar%natom
     222         [ +  + ]:     1975596 :         do alpha=1,3
     223         [ +  + ]:     6412432 :           do beta=1,3
     224         [ +  + ]:    19237296 :             do gama=1,3
     225         [ +  + ]:    57711888 :               do lambda=1,3
     226         [ -  + ]:    53272512 :                 if (abs(rot3(jatom,alpha,beta,gama,lambda)).gt.tol8) then
     227                 :           0 :                   write(std_out,'(a,6(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ROT3) ---> iatom,jatom,alpha,beta,gama,lambda,norm =',&
     228                 :           0 : &                                iatom,jatom,alpha,beta,gama,lambda,rot3(jatom,alpha,beta,gama,lambda)
     229         [ #  # ]:           0 :                   if (abs(rot3(jatom,alpha,beta,gama,lambda)).gt.tol6)&
     230                 :           0 : &                     ABI_WARNING('The invariance under arbitrary rotation is not fulfilled (order 3)')
     231                 :             :                 end if
     232                 :             :               end do !lambda
     233                 :             :             end do !gama
     234                 :             :           end do !beta
     235                 :             :         end do !alpha
     236                 :             :       end do !jatom
     237                 :             :     end do !iatom
     238         [ -  + ]:          14 :     ABI_FREE(asr3)
     239         [ -  + ]:          14 :     ABI_FREE(rot3)
     240                 :             :   end if !order=3
     241                 :             : 
     242                 :             : ! FOURTH ORDER
     243                 :             :   if (order4) then
     244                 :             : !FB    ABI_MALLOC(rot3,(Invar%natom,3,3,3,3)) ; rot3(:,:,:,:,:)=0.d0
     245                 :             :     ABI_MALLOC(asr4,(Invar%natom,Invar%natom,3,3,3,3)) ; asr4(:,:,:,:,:,:)=0.d0
     246                 :             :     do iatom=1,Invar%natom
     247                 :             :       asr4(:,:,:,:,:,:)=0.d0
     248                 :             : !FB      rot3(:,:,:,:,:)=0.d0
     249                 :             : !FB      do jatom=1,Invar%natom
     250                 :             : !FB        if (distance(iatom,jatom,1).gt.Invar%rcut3) cycle
     251                 :             : !FB!       Compute the rotational invariance (third order)
     252                 :             : !FB        do alpha=1,3
     253                 :             : !FB          do beta=1,3
     254                 :             : !FB            do gama=1,3
     255                 :             : !FB              do lambda=1,3
     256                 :             : !FB                rot3(jatom,alpha,beta,gama,lambda)=rot3(jatom,alpha,beta,gama,lambda)+&
     257                 :             : !FB&                    Model%Phi2%SR(3*(iatom-1)+gama  ,3*(jatom-1)+beta  )*Kroenecker(alpha,lambda)+&
     258                 :             : !FB&                    Model%Phi2%SR(3*(iatom-1)+alpha ,3*(jatom-1)+gama  )*Kroenecker(beta,lambda)-&
     259                 :             : !FB&                    Model%Phi2%SR(3*(iatom-1)+lambda,3*(jatom-1)+beta  )*Kroenecker(alpha,gama)-&
     260                 :             : !FB&                    Model%Phi2%SR(3*(iatom-1)+alpha ,3*(jatom-1)+lambda)*Kroenecker(beta,gama)
     261                 :             : !FB              end do !lambda
     262                 :             : !FB            end do !gama
     263                 :             : !FB          end do !beta
     264                 :             : !FB        end do !alpha
     265                 :             : !FB      end do !jatom
     266                 :             :       do ishell=1,Shell4at%nshell
     267                 :             : !       Build the 3x3x3x3 IFC of an atom in this shell
     268                 :             :         if (Shell4at%neighbours(iatom,ishell)%n_interactions.eq.0) cycle
     269                 :             :         do iatshell=1,Shell4at%neighbours(iatom,ishell)%n_interactions
     270                 :             :           jatom=Shell4at%neighbours(iatom,ishell)%atomj_in_shell(iatshell)
     271                 :             :           katom=Shell4at%neighbours(iatom,ishell)%atomk_in_shell(iatshell)
     272                 :             :           latom=Shell4at%neighbours(iatom,ishell)%atoml_in_shell(iatshell)
     273                 :             :           isym =Shell4at%neighbours(iatom,ishell)%sym_in_shell(iatshell)
     274                 :             :           itrans=Shell4at%neighbours(iatom,ishell)%transpose_in_shell(iatshell)
     275                 :             :           call tdep_build_phi4_3333(isym,Model%Phi4(:,:,:,:,ishell),Phi4_3333,Sym,itrans)
     276                 :             : !         Compute the first ASR : sum_l Phi3_ijkl=0
     277                 :             :           asr4(jatom,katom,:,:,:,:)=asr4(jatom,katom,:,:,:,:)+Phi4_3333(:,:,:,:)
     278                 :             : !FB!         Compute the rotational invariance (third order)
     279                 :             : !FB          do alpha=1,3
     280                 :             : !FB            do beta=1,3
     281                 :             : !FB              do gama=1,3
     282                 :             : !FB                do lambda=1,3
     283                 :             : !FB                  rot3(jatom,alpha,beta,gama,lambda)=rot3(jatom,alpha,beta,gama,lambda)+&
     284                 :             : !FB&                      Phi3_333(alpha,beta,gama  )*distance(iatom,katom,lambda+1)-&
     285                 :             : !FB&                      Phi3_333(alpha,beta,lambda)*distance(iatom,katom,gama  +1)
     286                 :             : !FB                end do
     287                 :             : !FB              end do
     288                 :             : !FB            end do
     289                 :             : !FB          end do
     290                 :             :         end do !iatshell
     291                 :             :       end do !ishell
     292                 :             : !     Check the acoustic sum rules (fourth order)
     293                 :             :       do ii=1,3
     294                 :             :         do jj=1,3
     295                 :             :           do kk=1,3
     296                 :             :             do ll=1,3
     297                 :             :               do jatom=1,Invar%natom
     298                 :             :                 do katom=1,Invar%natom
     299                 :             :                   if (abs(asr4(jatom,katom,ii,jj,kk,ll)).gt.tol8) then
     300                 :             :                     write(std_out,'(a,1x,7(i3,1x),1(e17.10,1x))') '>>>>> WARNING (ASR4) --->',&
     301                 :             : &                      ii,jj,kk,ll,iatom,jatom,katom,asr4(jatom,katom,ii,jj,kk,ll)
     302                 :             :                     if (abs(asr4(jatom,katom,ii,jj,kk,ll)).gt.tol6)&
     303                 :             : &                      ABI_WARNING('The acoustic sum rule is not fulfilled (order 4)')
     304                 :             :                   end if
     305                 :             :                 end do !katom
     306                 :             :               end do !jatom
     307                 :             :             end do !ll
     308                 :             :           end do !kk
     309                 :             :         end do !jj
     310                 :             :       end do !ii
     311                 :             : !FB!     Check the rotational invariance (third order)
     312                 :             : !FB      do jatom=1,Invar%natom
     313                 :             : !FB        do alpha=1,3
     314                 :             : !FB          do beta=1,3
     315                 :             : !FB            do gama=1,3
     316                 :             : !FB              do lambda=1,3
     317                 :             : !FB                if (abs(rot3(jatom,alpha,beta,gama,lambda)).gt.tol8) then
     318                 :             : !FB                  write(std_out,'(a,6(i3,1x),1(e17.10,1x))') &
     319                 :             : !FB                        &'>>>>> WARNING (ROT3) ---> iatom,jatom,alpha,beta,gama,lambda,norm =',&
     320                 :             : !FB&                                iatom,jatom,alpha,beta,gama,lambda,rot3(jatom,alpha,beta,gama,lambda)
     321                 :             : !FB                  if (abs(rot3(jatom,alpha,beta,gama,lambda)).gt.tol6)&
     322                 :             : !FB&                     ABI_WARNING('The invariance under arbitrary rotation is not fulfilled (order 3)')
     323                 :             : !FB                end if
     324                 :             : !FB              end do !lambda
     325                 :             : !FB            end do !gama
     326                 :             : !FB          end do !beta
     327                 :             : !FB        end do !alpha
     328                 :             : !FB      end do !jatom
     329                 :             :     end do !iatom
     330                 :             :     ABI_FREE(asr4)
     331                 :             : !FB    ABI_FREE(rot3)
     332                 :             :   end if !order=4
     333                 :             : 
     334                 :          44 :  end subroutine tdep_check_constraints
     335                 :             : 
     336                 :             : !=====================================================================================================
     337                 :             : 
     338                 :          44 :  subroutine tdep_print_Aknowledgments(unt)
     339                 :             : 
     340                 :             :   integer, intent(in) :: unt
     341                 :             : 
     342                 :          44 :   write(unt,*) ' '
     343                 :          44 :   write(unt,'(a)') ' #############################################################################'
     344                 :          44 :   write(unt,'(a)') ' ######################### CALCULATION COMPLETED #############################'
     345                 :          44 :   write(unt,'(a)') ' #############################################################################'
     346                 :          44 :   write(unt,'(a)') ' Suggested references for the acknowledgment of ABINIT usage.'
     347                 :          44 :   write(unt,'(a)') ' '
     348                 :          44 :   write(unt,'(a)') ' The users of ABINIT have little formal obligations with respect to the ABINIT group'
     349                 :          44 :   write(unt,'(a)') ' (those specified in the GNU General Public License, http://www.gnu.org/copyleft/gpl.txt).'
     350                 :          44 :   write(unt,'(a)') ' However, it is common practice in the scientific literature,'
     351                 :          44 :   write(unt,'(a)') ' to acknowledge the efforts of people that have made the research possible.'
     352                 :          44 :   write(unt,'(a)') ' In this spirit, please find below suggested citations of work written by ABINIT developers,'
     353                 :          44 :   write(unt,'(a)') ' corresponding to implementations inside of ABINIT that you have used in the present run.'
     354                 :          44 :   write(unt,'(a)') ' Note also that it will be of great value to readers of publications presenting these results,'
     355                 :          44 :   write(unt,'(a)') ' to read papers enabling them to understand the theoretical formalism and details'
     356                 :          44 :   write(unt,'(a)') ' of the ABINIT implementation.'
     357                 :          44 :   write(unt,'(a)') ' For information on why they are suggested, see also https://docs.abinit.org/theory/acknowledgments.'
     358                 :          44 :   write(unt,'(a)') ' '
     359                 :          44 :   write(unt,'(a)') ' [1] a-TDEP: Temperature Dependent Effective Potential for Abinit '
     360                 :          44 :   write(unt,'(a)') ' -- Lattice dynamic properties including anharmonicity'
     361                 :          44 :   write(unt,'(a)') ' F. Bottin, J. Bieder and J. Bouchet, Comput. Phys. Comm. 254, 107301 (2020).' ! [[cite:Bottin2020]]
     362                 :          44 :   write(unt,'(a)') ' Strong suggestion to cite this paper in your publications.'
     363                 :          44 :   write(unt,'(a)') ' '
     364                 :          44 :   write(unt,'(a)') ' [2] Thermal evolution of vibrational properties of alpha-U'
     365                 :          44 :   write(unt,'(a)') ' J. Bouchet and F. Bottin, Phys. Rev. B 92, 174108 (2015).' ! [[cite:Bouchet2015]]
     366                 :          44 :   write(unt,'(a)') ' Strong suggestion to cite this paper in your publications.'
     367                 :          44 :   write(unt,'(a)') ' '
     368                 :          44 :   write(unt,'(a)') ' [3] Lattice dynamics of anharmonic solids from first principles'
     369                 :          44 :   write(unt,'(a)') ' O. Hellman, I.A. Abrikosov and S.I. Simak, Phys. Rev. B 84, 180301(R) (2011).' ! [[cite:Hellman2011]]
     370                 :          44 :   write(unt,'(a)') ' '
     371                 :          44 :   write(unt,'(a)') ' [4] Temperature dependent effective potential method for accurate free energy calculations of solids'
     372                 :          44 :   write(unt,'(a)') ' O. Hellman, P. Steneteg, I.A. Abrikosov and S.I. Simak, Phys. Rev. B 87, 104111 (2013).' ! [[cite:Hellman2013]]
     373                 :             : 
     374                 :          44 :  end subroutine tdep_print_Aknowledgments
     375                 :             : 
     376                 :             : !=====================================================================================================
     377                 :             : 
     378                 :             : end module m_tdep_utils
        

Generated by: LCOV version 2.3-1