LCOV - code coverage report
Current view: top level - src/62_ctqmc - m_data4entropyDMFT.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 61.5 % 104 64
Test Date: 2026-11-08 02:25:56 Functions: 71.4 % 7 5
Branches: 51.5 % 204 105

             Branch data     Line data    Source code
       1                 :             : !!****m* ABINIT/m_data4entropyDMFT
       2                 :             : !! NAME
       3                 :             : !!  m_data4entropyDMFT
       4                 :             : !!
       5                 :             : !! FUNCTION
       6                 :             : !!  FIXME: add description.
       7                 :             : !!
       8                 :             : !! COPYRIGHT
       9                 :             : !!  Copyright (C) 2014-2026 ABINIT group (J. Bieder)
      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                 :             : !! NOTES
      15                 :             : !!
      16                 :             : !! SOURCE
      17                 :             : 
      18                 :             : #if defined HAVE_CONFIG_H
      19                 :             : #include "config.h"
      20                 :             : #endif
      21                 :             : 
      22                 :             : #include "abi_common.h"
      23                 :             : 
      24                 :             : module m_data4entropyDMFT
      25                 :             : 
      26                 :             :   use defs_basis
      27                 :             :   use m_errors
      28                 :             :   use m_abicore
      29                 :             : 
      30                 :             :   implicit none
      31                 :             : 
      32                 :             :   private
      33                 :             : 
      34                 :             :   public :: data4entropyDMFT_init
      35                 :             :   public :: data4entropyDMFT_destroy
      36                 :             :   public :: data4entropyDMFT_setDocc            ! Must be call for each lambda
      37                 :             :   public :: data4entropyDMFT_setHu              ! Hu density
      38                 :             :   public :: data4entropyDMFT_setDc
      39                 :             : 
      40                 :             : !!***
      41                 :             : 
      42                 :             : !!****t* m_data4entropyDMFT/data4entropyDMFT
      43                 :             : !! NAME
      44                 :             : !!  data4entropyDMFT
      45                 :             : !!
      46                 :             : !! FUNCTION
      47                 :             : !!  This structured datatype contains the necessary data
      48                 :             : !!
      49                 :             : !! COPYRIGHT
      50                 :             : !!  Copyright (C) 2014-2026 ABINIT group (J. Bieder)
      51                 :             : !!  This file is distributed under the terms of the
      52                 :             : !!  GNU General Public License, see ~abinit/COPYING
      53                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
      54                 :             : !!
      55                 :             : !! SOURCE
      56                 :             : 
      57                 :             :   type, public :: data4entropyDMFT_t
      58                 :             :     logical               :: isset = .false.! Are we initialized ?
      59                 :             :     integer               :: maxlpawu       ! maximal value for lpawu
      60                 :             :     integer               :: natom          ! number of atoms
      61                 :             :     integer               :: ntypat         ! number of types of atoms
      62                 :             :     real(dp), allocatable :: docc(:,:,:)    ! double occupation for each atom
      63                 :             :     real(dp), allocatable :: J_over_U(:)    ! calculate J/U for each atom
      64                 :             :     real(dp), allocatable :: e_dc(:)        ! double counting energy calculated for u=1 and j=u/j
      65                 :             :     real(dp), allocatable :: hu_dens(:,:,:) ! interaction matrice in density representation
      66                 :             :   end type data4entropyDMFT_t
      67                 :             : !!***
      68                 :             : 
      69                 :             : 
      70                 :             : contains
      71                 :             : !!***
      72                 :             : 
      73                 :             : !!****f* ABINIT/m_data4entropyDMFT/data4entropyDMFT_init
      74                 :             : !! NAME
      75                 :             : !!  data4entropyDMFT_init
      76                 :             : !!
      77                 :             : !! FUNCTION
      78                 :             : !!  FIXME: add description.
      79                 :             : !!
      80                 :             : !! COPYRIGHT
      81                 :             : !!  Copyright (C) 2014-2026 ABINIT group (J. Bieder)
      82                 :             : !!  This file is distributed under the terms of the
      83                 :             : !!  GNU General Public License, see ~abinit/COPYING
      84                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
      85                 :             : !!
      86                 :             : !! INPUTS
      87                 :             : !!  argin(sizein)=description
      88                 :             : !!
      89                 :             : !! OUTPUT
      90                 :             : !!  argout(sizeout)=description
      91                 :             : !!
      92                 :             : !! SIDE EFFECTS
      93                 :             : !!
      94                 :             : !! NOTES
      95                 :             : !!
      96                 :             : !! SOURCE
      97                 :             : 
      98   [ -  +  -  +  :           3 : subroutine data4entropyDMFT_init(this,natom,typat,lpawu,uset2g,upawu,jpawu)
             -  +  -  + ]
      99                 :             : 
     100                 :             : !Arguments ------------------------------------
     101                 :             :   type(data4entropyDMFT_t) , intent(inout) :: this
     102                 :             :   integer               , intent(in   ) :: natom
     103                 :             :   integer , dimension(:), intent(in   ) :: typat
     104                 :             :   integer , dimension(:), intent(in   ) :: lpawu
     105                 :             :   logical               , intent(in   ) :: uset2g
     106                 :             :   real(dp), dimension(:), intent(in   ) :: upawu
     107                 :             :   real(dp), dimension(:), intent(in   ) :: jpawu
     108                 :             : !Local variables ------------------------------
     109                 :             :   integer :: maxlpawu
     110                 :             :   integer :: iatom
     111                 :             :   integer :: ilpawu
     112                 :             :   integer :: nlpawu
     113                 :             :   integer :: ityp
     114                 :             :   character(len=500) :: message
     115                 :             : 
     116                 :           3 :   this%natom = natom
     117                 :             : 
     118         [ -  + ]:           3 :   if ( size(typat) .ne. natom ) then
     119                 :           0 :     write(message,'(a,i5,a,a,i5,a)') "Disagreement between number of atoms (",natom,")", &
     120                 :           0 :      " and the number of atom types (",size(typat),")."
     121                 :           0 :     ABI_ERROR(message)
     122                 :             :   end if
     123                 :             : 
     124         [ +  + ]:          14 :   this%ntypat = maxval(typat) !!! Carefull This should always work but can we have
     125                 :             :   ! one type that is not use (ntypat = 5; typat = 1 2 3 4)?
     126   [ +  -  -  + ]:           3 :   if ( this%ntypat .ne. size(upawu) .or. this%ntypat .ne. size(jpawu) ) then
     127                 :           0 :     write(message,'(a)') "Disagreement between size of ntypat,upawu and jpawu"
     128                 :           0 :     ABI_ERROR(message)
     129                 :             :   end if
     130                 :             : 
     131                 :           3 :   maxlpawu = -1
     132                 :           3 :   nlpawu = size(lpawu)
     133         [ +  + ]:          14 :   do iatom=1,natom
     134                 :          11 :     ityp=typat(iatom)
     135         [ -  + ]:          11 :     if (ityp.le.0 .or. ityp.gt.nlpawu) then
     136                 :           0 :       write(message,'(a)') "Try to access the lpawu value of an atom type that has not a lpawu value."
     137                 :           0 :       ABI_ERROR(message)
     138                 :             :     end if
     139                 :          11 :     ilpawu=lpawu(ityp)
     140   [ +  +  +  + ]:          11 :     if(uset2g.and.ilpawu==2) ilpawu=1
     141                 :          14 :     if ( ilpawu > maxlpawu ) maxlpawu = ilpawu
     142                 :             :   enddo
     143                 :           3 :   this%maxlpawu = maxlpawu
     144                 :             : 
     145   [ -  +  +  -  :          15 :   ABI_MALLOC(this%docc,(1:2*(2*maxlpawu+1),1:2*(2*maxlpawu+1),1:natom))
          -  +  +  -  -  
          +  +  -  +  -  
          +  -  -  +  -  
                +  -  + ]
     146   [ +  +  +  +  :         644 :   this%docc(:,:,:) = zero
                   +  + ]
     147                 :             : 
     148   [ -  +  +  -  :          15 :   ABI_MALLOC(this%hu_dens,(1:2*(2*maxlpawu+1),1:2*(2*maxlpawu+1),1:this%ntypat))
          -  +  +  -  -  
          +  +  -  +  -  
          +  -  -  +  -  
                +  -  + ]
     149   [ +  +  +  +  :         472 :   this%hu_dens(:,:,:) = zero
                   +  + ]
     150                 :             : 
     151   [ -  +  +  -  :           9 :   ABI_MALLOC(this%e_dc,(1:natom))
          +  -  +  -  -  
             +  -  +  -  
                      + ]
     152         [ +  + ]:          14 :   this%e_dc(:) = zero
     153                 :             : 
     154   [ -  +  +  -  :           6 :   ABI_MALLOC(this%J_over_U,(1:natom))
          -  +  -  +  -  
                      + ]
     155         [ +  + ]:          14 :   this%J_over_U(:) = zero
     156         [ +  + ]:          14 :   do iatom=1,natom
     157                 :          11 :     ityp=typat(iatom) ! no need to check since already done once before
     158   [ +  +  +  - ]:          14 :     if ( lpawu(ityp) /= -1 .and. upawu(ityp) /= zero) then
     159                 :           3 :       this%J_over_U(iatom) = jpawu(ityp) / upawu(ityp)
     160                 :             :     end if
     161                 :             :   enddo
     162                 :             : 
     163                 :           3 :   this%isset = .true.
     164                 :           3 : end subroutine data4entropyDMFT_init
     165                 :             : !!***
     166                 :             : 
     167                 :             : !!****f* ABINIT/m_data4entropyDMFT/data4entropyDMFT_setDocc
     168                 :             : !! NAME
     169                 :             : !!  data4entropyDMFT_setDocc
     170                 :             : !!
     171                 :             : !! FUNCTION
     172                 :             : !!  FIXME: add description.
     173                 :             : !!
     174                 :             : !! COPYRIGHT
     175                 :             : !!  Copyright (C) 2014-2026 ABINIT group (J. Bieder)
     176                 :             : !!  This file is distributed under the terms of the
     177                 :             : !!  GNU General Public License, see ~abinit/COPYING
     178                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     179                 :             : !!
     180                 :             : !! INPUTS
     181                 :             : !!  argin(sizein)=description
     182                 :             : !!
     183                 :             : !! OUTPUT
     184                 :             : !!  argout(sizeout)=description
     185                 :             : !!
     186                 :             : !! SIDE EFFECTS
     187                 :             : !!
     188                 :             : !! NOTES
     189                 :             : !!
     190                 :             : !! SOURCE
     191                 :             : 
     192   [ +  -  +  -  :           9 : subroutine data4entropyDMFT_setDocc(this,iatom,Docc,Nocc)
          -  +  -  +  -  
                -  -  - ]
     193                 :             : 
     194                 :             : !Arguments ------------------------------------
     195                 :             :     type(data4entropyDMFT_t), intent(inout) :: this
     196                 :             :     integer           , intent(in   ) :: iatom
     197                 :             :     real(dp), optional, intent(in   ) :: Docc(:,:) !iflavor,iflavor
     198                 :             :     real(dp), optional, intent(in   ) :: Nocc(:)   !iflavor
     199                 :             : !Local variables ------------------------------
     200                 :             :     integer            :: maxnflavor
     201                 :             :     integer            :: iflavor1
     202                 :             :     integer            :: iflavor2
     203                 :             :     character(len=500) :: message
     204                 :             : 
     205         [ -  + ]:           9 :     if ( .not. this%isset ) then
     206                 :           0 :       ABI_ERROR("data4entropyDMFT type not initialized")
     207                 :             :     end if
     208                 :             : 
     209         [ -  + ]:           9 :     if ( iatom .gt. this%natom ) then
     210                 :           0 :       write(message,'(a,i4,a,i4,a)') "Value of iatom (",iatom, &
     211                 :           0 :         ") is greater than the number of atom natom(",this%natom,")."
     212                 :           0 :       ABI_ERROR(message)
     213                 :             :     end if
     214                 :             : 
     215         [ -  + ]:           9 :     if ( .not. present(Docc) .and. .not. present(Nocc) ) then
     216                 :           0 :       write(message,'(2a)') "Neither Docc nor Nocc is present to set double", &
     217                 :           0 :       "occupancy. Should have one and only one of those."
     218                 :           0 :       ABI_ERROR(message)
     219                 :             :     end if
     220                 :             : 
     221         [ -  + ]:           9 :     if ( present(Docc) .and. present(Nocc) ) then
     222                 :           0 :       write(message,'(2a)') "Both Docc and Nocc are present to set double", &
     223                 :           0 :       "occupancy. Should have one and only one of those."
     224                 :           0 :       ABI_ERROR(message)
     225                 :             :     end if
     226                 :             : 
     227                 :           9 :     maxnflavor=2*(2*this%maxlpawu+1)
     228         [ +  - ]:           9 :     if ( present(Docc) ) then
     229                 :             :       if ( size(Docc,1) .gt. maxnflavor .or. size(Docc,2) .gt. maxnflavor &
     230   [ +  -  -  + ]:           9 :           .or. size(Docc,1) .ne. size(Docc,2) ) then
     231                 :           0 :         write(message,'(a,i2,a,i2,a,i2)') "Problem with Docc shape/size : dim1=",size(Docc,1), &
     232                 :           0 :                               " dim2=",size(Docc,2), " max=", maxnflavor
     233                 :           0 :         ABI_ERROR(message)
     234                 :             :       end if
     235   [ +  +  +  + ]:         891 :       this%docc(1:size(Docc,1),1:size(Docc,1),iatom) = Docc(:,:)
     236         [ #  # ]:           0 :     else if ( present(Nocc) ) then ! Need to compute n_i*n_j (only used for DFT+U)
     237         [ #  # ]:           0 :       if ( size(Nocc,1) .gt. maxnflavor) then
     238                 :           0 :         write(message,'(a,i2,a,i2)') "Problem with Nocc size : dim1=",size(Nocc,1), &
     239                 :           0 :                               " maxnflavor=", maxnflavor
     240                 :           0 :         ABI_ERROR(message)
     241                 :             :       end if
     242                 :             : 
     243         [ #  # ]:           0 :       do iflavor1 = 1, (2*size(Nocc,1)+1)
     244         [ #  # ]:           0 :         do iflavor2 = 1, (2*size(Nocc,1)+1)
     245                 :           0 :           this%docc(iflavor2,iflavor1,iatom) = Nocc(iflavor1)*Nocc(iflavor2)
     246                 :             :         end do
     247                 :             :       end do
     248                 :             :     end if
     249                 :             : 
     250                 :           9 : end subroutine data4entropyDMFT_setDocc
     251                 :             : !!***
     252                 :             : 
     253                 :             : !!****f* ABINIT/m_data4entropyDMFT/data4entropyDMFT_setHu
     254                 :             : !! NAME
     255                 :             : !!  data4entropyDMFT_setHu
     256                 :             : !!
     257                 :             : !! FUNCTION
     258                 :             : !!  FIXME: add description.
     259                 :             : !!
     260                 :             : !! COPYRIGHT
     261                 :             : !!  Copyright (C) 2014-2026 ABINIT group (J. Bieder)
     262                 :             : !!  This file is distributed under the terms of the
     263                 :             : !!  GNU General Public License, see ~abinit/COPYING
     264                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     265                 :             : !!
     266                 :             : !! INPUTS
     267                 :             : !!  argin(sizein)=description
     268                 :             : !!
     269                 :             : !! OUTPUT
     270                 :             : !!  argout(sizeout)=description
     271                 :             : !!
     272                 :             : !! SIDE EFFECTS
     273                 :             : !!
     274                 :             : !! NOTES
     275                 :             : !!
     276                 :             : !! SOURCE
     277                 :             : 
     278         [ -  + ]:           9 : subroutine data4entropyDMFT_setHu(this,itypat,hu)
     279                 :             : 
     280                 :             : !Arguments ------------------------------------
     281                 :             :     type(data4entropyDMFT_t), intent(inout) :: this
     282                 :             :     integer           , intent(in   ) :: itypat
     283                 :             :     real(dp)          , intent(in   ) :: hu(:,:)   !iflavor
     284                 :             : !Local variables ------------------------------
     285                 :             :     integer            :: maxnflavor
     286                 :             :     character(len=500) :: message
     287                 :             : 
     288         [ -  + ]:           9 :     if ( .not. this%isset ) then
     289                 :           0 :       ABI_ERROR("data4entropyDMFT type not initialized")
     290                 :             :     end if
     291                 :             : 
     292         [ -  + ]:           9 :     if ( itypat .gt. this%ntypat ) then
     293                 :           0 :       write(message,'(a,i4,a,i4,a)') "Value of itypat (",itypat, &
     294                 :           0 :         ") is greater than the number of types of atoms (",this%ntypat,")."
     295                 :           0 :       ABI_ERROR(message)
     296                 :             :     end if
     297                 :             : 
     298                 :           9 :     maxnflavor=2*(2*this%maxlpawu+1)
     299   [ +  -  -  + ]:           9 :     if ( size(hu,1) .gt. maxnflavor .or. size(hu,1) .ne. size(hu,2) ) then
     300                 :           0 :       write(message,'(a,i2,a,i2,a,i2,a,i2)') "Problem with hu size : dim1=",size(hu,1), &
     301                 :           0 :                             " dim2=", size(hu,2), " max=", maxnflavor
     302                 :           0 :       ABI_ERROR(message)
     303                 :             :     end if
     304   [ +  +  +  + ]:         891 :     this%hu_dens(1:size(hu,1),1:size(hu,1),itypat) = hu(:,:)
     305                 :             : 
     306                 :           9 : end subroutine data4entropyDMFT_setHu
     307                 :             : !!***
     308                 :             : 
     309                 :             : !!****f* ABINIT/m_data4entropyDMFT/data4entropyDMFT_setDc
     310                 :             : !! NAME
     311                 :             : !!  data4entropyDMFT_setHu
     312                 :             : !!
     313                 :             : !! FUNCTION
     314                 :             : !!  FIXME: add description.
     315                 :             : !!
     316                 :             : !! COPYRIGHT
     317                 :             : !!  Copyright (C) 2014-2026 ABINIT group (J. Bieder)
     318                 :             : !!  This file is distributed under the terms of the
     319                 :             : !!  GNU General Public License, see ~abinit/COPYING
     320                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     321                 :             : !!
     322                 :             : !! INPUTS
     323                 :             : !!  argin(sizein)=description
     324                 :             : !!
     325                 :             : !! OUTPUT
     326                 :             : !!  argout(sizeout)=description
     327                 :             : !!
     328                 :             : !! SIDE EFFECTS
     329                 :             : !!
     330                 :             : !! NOTES
     331                 :             : !!
     332                 :             : !! SOURCE
     333                 :             : 
     334         [ -  + ]:           9 : subroutine data4entropyDMFT_setDc(this,dc)
     335                 :             : 
     336                 :             : !Arguments ------------------------------------
     337                 :             :     type(data4entropyDMFT_t) , intent(inout) :: this
     338                 :             :     real(dp), dimension(:), intent(in   ) :: dc
     339                 :             : !Local variables ------------------------------
     340                 :             :     character(len=500) :: message
     341                 :             : 
     342         [ -  + ]:           9 :     if ( .not. this%isset ) then
     343                 :           0 :       ABI_ERROR("data4entropyDMFT type not initialized")
     344                 :             :     end if
     345                 :             : 
     346         [ -  + ]:           9 :     if ( size(dc,1) .gt. this%natom ) then
     347                 :           0 :       write(message,'(a,i4,a,i4,a)') "Size of dc (",size(dc,1), &
     348                 :           0 :         ") is greater than the number of atom natom(",this%natom,")."
     349                 :           0 :       ABI_ERROR(message)
     350                 :             :     end if
     351                 :             : 
     352         [ +  + ]:          42 :     this%e_dc(:) = dc(:)
     353                 :             : 
     354                 :           9 : end subroutine data4entropyDMFT_setDc
     355                 :             : !!***
     356                 :             : 
     357                 :             : !!****f* ABINIT/m_data4entropyDMFT/data4etotdmf_destroy
     358                 :             : !! NAME
     359                 :             : !!  data4entropyDMFT_destroy
     360                 :             : !!
     361                 :             : !! FUNCTION
     362                 :             : !!  FIXME: add description.
     363                 :             : !!
     364                 :             : !! COPYRIGHT
     365                 :             : !!  Copyright (C) 2014-2026 ABINIT group (J. Bieder)
     366                 :             : !!  This file is distributed under the terms of the
     367                 :             : !!  GNU General Public License, see ~abinit/COPYING
     368                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     369                 :             : !!
     370                 :             : !! INPUTS
     371                 :             : !!  argin(sizein)=description
     372                 :             : !!
     373                 :             : !! OUTPUT
     374                 :             : !!  argout(sizeout)=description
     375                 :             : !!
     376                 :             : !! SIDE EFFECTS
     377                 :             : !!
     378                 :             : !! NOTES
     379                 :             : !!
     380                 :             : !! SOURCE
     381                 :             : 
     382                 :           3 : subroutine data4entropyDMFT_destroy(this)
     383                 :             : 
     384                 :             :   !Arguments ------------------------------------
     385                 :             :   type(data4entropyDMFT_t), intent(inout) :: this
     386                 :             : 
     387         [ +  - ]:           3 :   if ( .not. this%isset ) return
     388         [ +  - ]:           3 :   if (allocated(this%docc))  then
     389                 :           3 :     ABI_FREE(this%docc)
     390                 :             :   endif
     391         [ +  - ]:           3 :   if (allocated(this%J_over_U))  then
     392                 :           3 :     ABI_FREE(this%J_over_U)
     393                 :             :   endif
     394         [ +  - ]:           3 :   if (allocated(this%e_dc))  then
     395                 :           3 :     ABI_FREE(this%e_dc)
     396                 :             :   endif
     397         [ +  - ]:           3 :   if (allocated(this%hu_dens))  then
     398                 :           3 :     ABI_FREE(this%hu_dens)
     399                 :             :   endif
     400                 :           3 :   this%maxlpawu = 0
     401                 :           3 :   this%natom = 0
     402                 :           3 :   this%ntypat = 0
     403                 :           3 :   this%isset = .FALSE.
     404                 :             : end subroutine data4entropyDMFT_destroy
     405                 :             : !!***
     406   [ #  #  #  #  :           0 : end module m_data4entropyDMFT
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                      # ]
     407                 :             : !!***
        

Generated by: LCOV version 2.3-1