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-09-21 22:40:37 Functions: 100.0 % 2 2

            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