LCOV - code coverage report
Current view: top level - src/78_effpot - m_scup_dataset.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 46.3 % 259 120
Test Date: 2026-11-10 11:05:29 Functions: 37.5 % 8 3
Branches: 27.0 % 222 60

             Branch data     Line data    Source code
       1                 :             : !!****m* ABINIT/m_scup_dataset
       2                 :             : !! NAME
       3                 :             : !!  m_scup_dataset
       4                 :             : !!
       5                 :             : !! FUNCTION
       6                 :             : !!  module with the type of the input variables for scale_up
       7                 :             : !!  when initialized this is a subtype of multibinit_dtset_type
       8                 :             : !!
       9                 :             : !! COPYRIGHT
      10                 :             : !!  Copyright (C) 2014-2026 ABINIT group (AM)
      11                 :             : !!  This file is distributed under the terms of the
      12                 :             : !!  GNU General Public License, see ~abinit/COPYING
      13                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
      14                 :             : !!
      15                 :             : !! SOURCE
      16                 :             : 
      17                 :             : #if defined HAVE_CONFIG_H
      18                 :             : #include "config.h"
      19                 :             : #endif
      20                 :             : 
      21                 :             : #include "abi_common.h"
      22                 :             : 
      23                 :             : module m_scup_dataset
      24                 :             : 
      25                 :             :  use defs_basis
      26                 :             :  use m_abicore
      27                 :             :  use m_errors
      28                 :             :  use m_bz_mesh
      29                 :             : 
      30                 :             :  use m_parser, only : intagm
      31                 :             :  use m_matrix, only : matr3inv
      32                 :             : 
      33                 :             :  implicit none
      34                 :             : 
      35                 :             :  private
      36                 :             : 
      37                 :             :  public :: scup_dtset_type
      38                 :             :  public :: scup_dtset_init
      39                 :             :  public :: scup_dtset_free
      40                 :             :  public :: outvars_scup
      41                 :             :  public :: invars10scup
      42                 :             :  public :: scup_kpath_new
      43                 :             :  public :: scup_kpath_print
      44                 :             : !!***
      45                 :             : 
      46                 :             : !!****t* m_scup_dataset/scup_dtset_type
      47                 :             : !! NAME
      48                 :             : !! scup_dtset_type
      49                 :             : !!
      50                 :             : !! FUNCTION
      51                 :             : !! The scup_dtset_type structured datatype
      52                 :             : !! gathers all input variables and options for the SCALE UP part
      53                 :             : !! that is linked with multibinit
      54                 :             : !!
      55                 :             : !! SOURCE
      56                 :             : 
      57                 :             :  type scup_dtset_type
      58                 :             : 
      59                 :             : !Integer
      60                 :             :  integer :: scup_nspeck
      61                 :             :  integer :: scup_ndivsm
      62                 :             :  integer :: scup_printniter
      63                 :             :  integer :: scup_startpulay
      64                 :             :  integer :: scup_maxscfstep
      65                 :             : !Logicals
      66                 :             :  logical :: scup_elec_model
      67                 :             :  logical :: scup_initorbocc
      68                 :             :  logical :: scup_ismagnetic
      69                 :             :  logical :: scup_istddft
      70                 :             :  logical :: scup_printbands
      71                 :             :  logical :: scup_printeigv
      72                 :             :  logical :: scup_printeltic
      73                 :             :  logical :: scup_printgeom
      74                 :             :  logical :: scup_printorbocc
      75                 :             :  logical(1) :: scup_freezden
      76                 :             : !Real
      77                 :             :  real*8   :: scup_tcharge
      78                 :             :  real*8   :: scup_scfmixing
      79                 :             :  real*8   :: scup_scfthresh
      80                 :             :  real*8   :: scup_smearing
      81                 :             : !Integer Array
      82                 :             :  integer :: scup_ksamp(3)
      83                 :             : 
      84                 :             : !Real Array
      85                 :             :  real(dp),allocatable :: scup_speck(:,:)
      86                 :             : 
      87                 :             : !Kpath Type
      88                 :             :  type(kpath_t) :: scup_kpath
      89                 :             : 
      90                 :             :  end type scup_dtset_type
      91                 :             : !!***
      92                 :             : CONTAINS
      93                 :             : 
      94                 :             : !!****f* m_scup_dataset/scup_dtset_init
      95                 :             : !!
      96                 :             : !! NAME
      97                 :             : !! scup_dtset_init
      98                 :             : !!
      99                 :             : !! FUNCTION
     100                 :             : !! Init the scup_dtset type
     101                 :             : !!
     102                 :             : !! INPUTS
     103                 :             : !!
     104                 :             : !!
     105                 :             : !! OUTPUT
     106                 :             : !! scup_dtset <type(scup_dtset_type)> = datatype with all the input variables
     107                 :             : !!
     108                 :             : !! NOTES
     109                 :             : !! Should be executed by one processor only.
     110                 :             : !!
     111                 :             : !! SOURCE
     112                 :             : 
     113                 :          73 : subroutine scup_dtset_init(scup_dtset)
     114                 :             : 
     115                 :             : 
     116                 :             : !Arguments -------------------------------
     117                 :             :  class(scup_dtset_type),intent(inout) :: scup_dtset
     118                 :             : !-----------------------------------------
     119                 :             : 
     120                 :          73 : scup_dtset%scup_ndivsm      =  0
     121                 :          73 : scup_dtset%scup_nspeck      =  0
     122                 :          73 : scup_dtset%scup_elec_model  = .FALSE.
     123         [ +  + ]:         292 : scup_dtset%scup_ksamp       =  (/ 1, 1, 1 /)
     124                 :          73 : scup_dtset%scup_tcharge     =  0
     125                 :          73 : scup_dtset%scup_initorbocc  = .FALSE.
     126                 :          73 : scup_dtset%scup_ismagnetic  = .FALSE.
     127                 :          73 : scup_dtset%scup_istddft     = .FALSE.
     128                 :          73 : scup_dtset%scup_printbands  = .FALSE.
     129                 :          73 : scup_dtset%scup_printeigv   = .FALSE.
     130                 :          73 : scup_dtset%scup_printeltic  = .FALSE.
     131                 :          73 : scup_dtset%scup_printgeom   = .FALSE.
     132                 :          73 : scup_dtset%scup_printniter  =  0
     133                 :          73 : scup_dtset%scup_printorbocc = .FALSE.
     134                 :          73 : scup_dtset%scup_freezden    = .FALSE.
     135                 :          73 : scup_dtset%scup_scfmixing   =  0.3
     136                 :          73 : scup_dtset%scup_scfthresh   =  tol6
     137                 :          73 : scup_dtset%scup_smearing    =  0.00091873313 ! Room Temperature in Hartree
     138                 :          73 : scup_dtset%scup_startpulay  =  3
     139                 :          73 : scup_dtset%scup_maxscfstep  =  100
     140                 :             : 
     141                 :          73 : end subroutine  scup_dtset_init
     142                 :             : !!***
     143                 :             : 
     144                 :             : !!****f* m_scup_dataset/scup_dtset_free
     145                 :             : !!
     146                 :             : !! NAME
     147                 :             : !!  scup_dtset_free
     148                 :             : !!
     149                 :             : !! FUNCTION
     150                 :             : !!  deallocate remaining arrays in the scup_dtset datastructure
     151                 :             : !!
     152                 :             : !! INPUTS
     153                 :             : !!  scup_dtset <type(scup_dtset_type)> = scup_dataset structure
     154                 :             : !!
     155                 :             : !! OUTPUTS
     156                 :             : !!  scup_dtset <type(scup_dtset_type)> = scup_dataset structure
     157                 :             : !!
     158                 :             : !! SOURCE
     159                 :             : 
     160                 :          73 : subroutine scup_dtset_free(scup_dtset)
     161                 :             : 
     162                 :             : !Arguments ------------------------------------
     163                 :             :  class(scup_dtset_type), intent(inout) :: scup_dtset
     164                 :             : 
     165                 :             : ! *************************************************************************
     166                 :             : 
     167         [ -  + ]:          73 :  ABI_SFREE(scup_dtset%scup_speck)
     168                 :             : 
     169                 :          73 : call scup_dtset%scup_kpath%free
     170                 :             : 
     171                 :             : 
     172                 :          73 : end subroutine scup_dtset_free
     173                 :             : !!***
     174                 :             : 
     175                 :             : !!****f* m_scup_dataset/outvars_scup
     176                 :             : !!
     177                 :             : !! NAME
     178                 :             : !! outvars_scup
     179                 :             : !!
     180                 :             : !! FUNCTION
     181                 :             : !! Takes as an input the input dtset for scup and echoes it to
     182                 :             : !! the output
     183                 :             : !!
     184                 :             : !! INPUTS
     185                 :             : !! multibinit_dtset <type(multibinit_dtset_type)> datatype with all the input variables
     186                 :             : !! nunit=unit number for input or output
     187                 :             : !!
     188                 :             : !! OUTPUT
     189                 :             : !!  (only writing)
     190                 :             : !!
     191                 :             : !! NOTES
     192                 :             : !! Should be executed by one processor only.
     193                 :             : !!
     194                 :             : !! SOURCE
     195                 :             : 
     196                 :           0 : subroutine outvars_scup(scup_dtset,nunit)
     197                 :             : 
     198                 :             : !Arguments -------------------------------
     199                 :             : !scalars
     200                 :             :  integer,intent(in) :: nunit
     201                 :             :  class(scup_dtset_type),intent(in) :: scup_dtset
     202                 :             : 
     203                 :             : !Local variables -------------------------
     204                 :             : !Set routine version number here:
     205                 :             : !scalars
     206                 :             : !integers for printing
     207                 :             :  integer :: int_inorb=0,int_mgn=0,int_tddft=0,int_pband=0
     208                 :             :  integer :: int_peigv=0,int_peltic=0,int_pgeom=0,int_porbocc=0
     209                 :             :  integer :: int_freezden=0
     210                 :             : !Character for defining format string
     211                 :             : !*********************************************************************
     212                 :             : 
     213                 :             :    !Check if logicals are true, if yes set integers to one for printing
     214         [ #  # ]:           0 :    if(scup_dtset%scup_initorbocc)   int_inorb    =1
     215         [ #  # ]:           0 :    if(scup_dtset%scup_ismagnetic)   int_mgn      =1
     216         [ #  # ]:           0 :    if(scup_dtset%scup_istddft)      int_tddft    =1
     217         [ #  # ]:           0 :    if(scup_dtset%scup_printbands)   int_pband    =1
     218         [ #  # ]:           0 :    if(scup_dtset%scup_printeigv)    int_peigv    =1
     219         [ #  # ]:           0 :    if(scup_dtset%scup_printeltic)   int_peltic   =1
     220         [ #  # ]:           0 :    if(scup_dtset%scup_printgeom)    int_pgeom    =1
     221         [ #  # ]:           0 :    if(scup_dtset%scup_printorbocc)  int_porbocc  =1
     222         [ #  # ]:           0 :    if(scup_dtset%scup_freezden)     int_freezden =1
     223                 :             : 
     224                 :             :    !Print
     225                 :           0 :    write(nunit,'(a)')'Variables for SCALE-UP electronic model :'
     226                 :           0 :    write(nunit,'(1x,a16,3I3)')    '      scup_ksamp',scup_dtset%scup_ksamp
     227                 :           0 :    write(nunit,'(1x,a16,F7.3)')   '    scup_tcharge',scup_dtset%scup_tcharge
     228                 :           0 :    write(nunit,'(1x,a16,I3)')     ' scup_initorbocc',int_inorb
     229                 :           0 :    write(nunit,'(1x,a16,I3)')     ' scup_ismagnetic',int_mgn
     230                 :           0 :    write(nunit,'(1x,a16,I3)')     '    scup_istddft',int_tddft
     231                 :           0 :    write(nunit,'(1x,a16,I3)')     ' scup_printbands',int_pband
     232                 :           0 :    write(nunit,'(1x,a16,I3)')     '  scup_printeigv',int_peigv
     233                 :           0 :    write(nunit,'(1x,a16,I3)')     ' scup_printeltic',int_peltic
     234                 :           0 :    write(nunit,'(1x,a16,I3)')     '  scup_printgeom',int_pgeom
     235                 :           0 :    write(nunit,'(1x,a16,I3)')     ' scup_printniter',scup_dtset%scup_printniter
     236                 :           0 :    write(nunit,'(1x,a16,I3)')     'scup_printorbocc',int_porbocc
     237                 :           0 :    write(nunit,'(1x,a16,I3)')     '   scup_freezden',int_freezden
     238                 :           0 :    write(nunit,'(1x,a16,I3)')     '     scup_nspeck',scup_dtset%scup_nspeck
     239                 :           0 :    write(nunit,'(1x,a16,I3)')     '     scup_ndivsm',scup_dtset%scup_ndivsm
     240                 :           0 :    write(nunit,'(1x,a16,F7.3)')   '  scup_scfmixing',scup_dtset%scup_scfmixing
     241                 :           0 :    write(nunit,'(1x,a16,ES10.2)') '  scup_scfthresh',scup_dtset%scup_scfthresh
     242                 :           0 :    write(nunit,'(1x,a16,ES10.2)') '   scup_smearing',scup_dtset%scup_smearing
     243                 :           0 :    write(nunit,'(1x,a16,I3)')     ' scup_startpulay',scup_dtset%scup_startpulay
     244                 :           0 :    write(nunit,'(1x,a16,I3)')     ' scup_maxscfstep',scup_dtset%scup_maxscfstep
     245                 :             : 
     246                 :             : 
     247                 :           0 : end subroutine outvars_scup
     248                 :             : !!***
     249                 :             : 
     250                 :             : !!****f* m_scup_dataset/invars10scup
     251                 :             : !!
     252                 :             : !! NAME
     253                 :             : !! invars10scup
     254                 :             : !!
     255                 :             : !! FUNCTION
     256                 :             : !! Open input file for the multibinit code, then reads or echoes the input information
     257                 :             : !! for SCALE UP part that is linked with multibinit.
     258                 :             : !!
     259                 :             : !! INPUTS
     260                 :             : !! lenstr=actual length of string
     261                 :             : !! natom=number of atoms, needed for atifc
     262                 :             : !! string*(*)=string of characters containing all input variables and data
     263                 :             : !!
     264                 :             : !! OUTPUT
     265                 :             : !! scup_dtset <type(scup_dtset_type)> = datatype with all the input variables
     266                 :             : !!
     267                 :             : !! NOTES
     268                 :             : !! Should be executed by one processor only.
     269                 :             : !!
     270                 :             : !! SOURCE
     271                 :             : 
     272                 :          73 : subroutine invars10scup(scup_dtset,lenstr,string)
     273                 :             : 
     274                 :             : !Arguments -------------------------------
     275                 :             : !scalars
     276                 :             :  integer,intent(in) :: lenstr
     277                 :             :  character(len=*),intent(in) :: string
     278                 :             :  class(scup_dtset_type),intent(inout) :: scup_dtset
     279                 :             : 
     280                 :             : !Local variables -------------------------
     281                 :             : !Dummy arguments for subroutine 'intagm' to parse input file
     282                 :             : !Set routine version number here:
     283                 :             : !scalars
     284                 :             :  integer :: ii,jdtset,marr,tread
     285                 :             :  character(len=500) :: message
     286                 :             : !arrays
     287                 :          73 :  integer,allocatable :: intarr(:)
     288                 :          73 :  real(dp),allocatable :: dprarr(:)
     289                 :             :  !tmp integer to transfer to logicals
     290                 :             :  integer :: tmp_int
     291                 :             : 
     292                 :             : !*********************************************************************
     293                 :             : 
     294                 :          73 :  marr=30
     295         [ -  + ]:          73 :  ABI_MALLOC(intarr,(marr))
     296         [ -  + ]:          73 :  ABI_MALLOC(dprarr,(marr))
     297                 :             : 
     298                 :          73 :  jdtset=1
     299                 :             : 
     300                 :             : !=====================================================================
     301                 :             : ! Initialize Dataset with default values
     302                 :             : !=====================================================================
     303                 :             : 
     304                 :          73 : call scup_dtset_init(scup_dtset)
     305                 :          73 : tmp_int=0
     306                 :             : 
     307                 :             : !=====================================================================
     308                 :             : !start reading in dimensions and non-dependent variables
     309                 :             : !=====================================================================
     310                 :             : 
     311                 :             : !A
     312                 :             : !B
     313                 :             : !C
     314                 :             : !D
     315                 :             : !E
     316                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_elec_model',tread,'INT')
     317         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     318         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     319                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     320                 :           0 : &   'scup_elec_model is',tmp_int,', but the only allowed values',ch10,&
     321                 :           0 : &   'are 0 and 1.',ch10,&
     322                 :           0 : &   'Action: correct scup_elec_model in your input file.'
     323                 :           0 :    ABI_ERROR(message)
     324                 :             :  end if
     325         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_elec_model = .TRUE.
     326                 :          73 :  tmp_int = 0
     327                 :             : 
     328                 :             : !F
     329                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_freezden',tread,'INT')
     330         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     331         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     332                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     333                 :           0 : &   'scup_freezden is',tmp_int,', but the only allowed values',ch10,&
     334                 :           0 : &   'are 0 and 1.',ch10,&
     335                 :           0 : &   'Action: correct scup_freezden in your input file.'
     336                 :           0 :    ABI_ERROR(message)
     337                 :             :  end if
     338         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_freezden = .TRUE.
     339                 :          73 :  tmp_int = 0
     340                 :             : 
     341                 :             :  !G
     342                 :             : !H
     343                 :             : !I
     344                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_initorbocc',tread,'INT')
     345         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     346         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     347                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     348                 :           0 : &   'scup_initorbocc is',tmp_int,', but the only allowed values',ch10,&
     349                 :           0 : &   'are 0 and 1.',ch10,&
     350                 :           0 : &   'Action: correct scup_initorbocc in your input file.'
     351                 :           0 :    ABI_ERROR(message)
     352                 :             :  end if
     353         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_initorbocc = .TRUE.
     354                 :          73 :  tmp_int = 0
     355                 :             : 
     356                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_ismagnetic',tread,'INT')
     357         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     358         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     359                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     360                 :           0 : &   'scup_ismagnetic is',tmp_int,', but the only allowed values',ch10,&
     361                 :           0 : &   'are 0 and 1.',ch10,&
     362                 :           0 : &   'Action: correct scup_ismagnetic in your input file.'
     363                 :           0 :    ABI_ERROR(message)
     364                 :             :  end if
     365         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_ismagnetic = .TRUE.
     366                 :          73 :  tmp_int = 0
     367                 :             : 
     368                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_istddft',tread,'INT')
     369         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     370         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     371                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     372                 :           0 : &   'scup_istddft is',tmp_int,', but the only allowed values',ch10,&
     373                 :           0 : &   'are 0 and 1.',ch10,&
     374                 :           0 : &   'Action: correct scup_istddft in your input file.'
     375                 :           0 :    ABI_ERROR(message)
     376                 :             :  end if
     377         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_istddft = .TRUE.
     378                 :          73 :  tmp_int = 0
     379                 :             : 
     380                 :             : 
     381                 :             : !J
     382                 :             : !K
     383                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'scup_ksamp',tread,'INT')
     384   [ -  +  -  - ]:          73 :  if(tread==1) scup_dtset%scup_ksamp(1:3)=intarr(1:3)
     385         [ +  + ]:         292 :  do ii=1,3
     386         [ -  + ]:         292 :    if(scup_dtset%scup_ksamp(ii)<1)then
     387                 :             :      write(message, '(a,i0,a,i0,a,a,a,i0,a)' )&
     388                 :           0 : &     'scup_ksamp(',ii,') is',scup_dtset%scup_ksamp(ii),', which is lower than 1 .',ch10,&
     389                 :           0 : &     'Action: correct scup_ksamp(',ii,') in your input file.'
     390                 :           0 :      ABI_ERROR(message)
     391                 :             :    end if
     392                 :             :  end do
     393                 :             : 
     394                 :             : !L
     395                 :             : !M
     396                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_maxscfstep',tread,'INT')
     397         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_maxscfstep=intarr(1)
     398         [ -  + ]:          73 :  if(scup_dtset%scup_maxscfstep<=0)then
     399                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     400                 :           0 : &   'scup_maxscfstep is',scup_dtset%scup_maxscfstep,', but the only allowed values',ch10,&
     401                 :           0 : &   'greater than 0',ch10,&
     402                 :           0 : &   'Action: correct scup_maxscfstep in your input file.'
     403                 :           0 :    ABI_ERROR(message)
     404                 :             :  end if
     405                 :             : 
     406                 :             : !N
     407                 :             : 
     408                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_ndivsm',tread,'INT')
     409         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_ndivsm=intarr(1)
     410         [ -  + ]:          73 :  if(scup_dtset%scup_ndivsm<0 )then
     411                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     412                 :           0 :    'scup_ndivsm is',scup_dtset%scup_ndivsm,', but the only allowed values',ch10,&
     413                 :           0 :    'are positive.',ch10,&
     414                 :           0 :    'Action: correct scup_ndivsm in your input file.'
     415                 :           0 :    ABI_ERROR(message)
     416                 :             :  end if
     417                 :             : 
     418                 :             : 
     419                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_nspeck',tread,'INT')
     420         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_nspeck=intarr(1)
     421         [ -  + ]:          73 :  if(scup_dtset%scup_nspeck<0 )then
     422                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     423                 :           0 :    'scup_nspeck is',scup_dtset%scup_nspeck,', but the only allowed values',ch10,&
     424                 :           0 :    'are positive.',ch10,&
     425                 :           0 :    'Action: correct scup_nspeck in your input file.'
     426                 :           0 :    ABI_ERROR(message)
     427                 :             :  end if
     428                 :             : 
     429                 :             : !O
     430                 :             : !P
     431                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_printbands',tread,'INT')
     432         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     433         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     434                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     435                 :           0 : &   'scup_printbands is',tmp_int,', but the only allowed values',ch10,&
     436                 :           0 : &   'are 0 and 1.',ch10,&
     437                 :           0 : &   'Action: correct scup_printbands in your input file.'
     438                 :           0 :    ABI_ERROR(message)
     439                 :             :  end if
     440         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_printbands = .TRUE.
     441                 :          73 :  tmp_int = 0
     442                 :             : 
     443                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_printeigv',tread,'INT')
     444         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     445         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     446                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     447                 :           0 : &   'scup_printeigv is',tmp_int,', but the only allowed values',ch10,&
     448                 :           0 : &   'are 0 and 1.',ch10,&
     449                 :           0 : &   'Action: correct scup_printeigv in your input file.'
     450                 :           0 :    ABI_ERROR(message)
     451                 :             :  end if
     452         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_printeigv = .TRUE.
     453                 :          73 :  tmp_int = 0
     454                 :             : 
     455                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_printeltic',tread,'INT')
     456         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     457         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     458                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     459                 :           0 : &   'scup_printeltic is',tmp_int,', but the only allowed values',ch10,&
     460                 :           0 : &   'are 0 and 1.',ch10,&
     461                 :           0 : &   'Action: correct scup_printeltic in your input file.'
     462                 :           0 :    ABI_ERROR(message)
     463                 :             :  end if
     464         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_printeltic = .TRUE.
     465                 :          73 :  tmp_int = 0
     466                 :             : 
     467                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_printgeom',tread,'INT')
     468         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     469         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     470                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     471                 :           0 :    'scup_printgeom is',tmp_int,', but the only allowed values',ch10,&
     472                 :           0 :    'are 0 and 1.',ch10,&
     473                 :           0 :    'Action: correct scup_printgeom in your input file.'
     474                 :           0 :    ABI_ERROR(message)
     475                 :             :  end if
     476         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_printgeom = .TRUE.
     477                 :          73 :  tmp_int = 0
     478                 :             : 
     479                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_printniter',tread,'INT')
     480         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_printniter=intarr(1)
     481         [ -  + ]:          73 :  if(scup_dtset%scup_printniter<0 )then
     482                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     483                 :           0 :    'scup_printniter is',scup_dtset%scup_printniter,', but the only allowed values',ch10,&
     484                 :           0 :    'are positive',ch10,&
     485                 :           0 :    'Action: correct scup_printniter in your input file.'
     486                 :           0 :    ABI_ERROR(message)
     487                 :             :  end if
     488                 :             : 
     489                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_printorbocc',tread,'INT')
     490         [ -  + ]:          73 :  if(tread==1) tmp_int=intarr(1)
     491         [ -  + ]:          73 :  if(tmp_int<0 .or. tmp_int>1 )then
     492                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     493                 :           0 :    'scup_printorbocc is',tmp_int,', but the only allowed values',ch10,&
     494                 :           0 :    'are 0 and 1.',ch10,&
     495                 :           0 :    'Action: correct scup_printorbocc in your input file.'
     496                 :           0 :    ABI_ERROR(message)
     497                 :             :  end if
     498         [ -  + ]:          73 :  if(tmp_int == 1) scup_dtset%scup_printorbocc = .TRUE.
     499                 :          73 :  tmp_int = 0
     500                 :             : 
     501                 :             : !Q
     502                 :             : !R
     503                 :             : !S
     504                 :             : 
     505                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_startpulay',tread,'INT')
     506         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_startpulay=intarr(1)
     507         [ -  + ]:          73 :  if(scup_dtset%scup_startpulay<3)then
     508                 :             :    write(message, '(a,I3,a,a,a,a,a)' )&
     509                 :           0 : &   'scup_startpulay is',scup_dtset%scup_startpulay,', but the only allowed values',ch10,&
     510                 :           0 : &   'are greater than 3',ch10,&
     511                 :           0 : &   'Action: correct scup_startpulay in your input file.'
     512                 :           0 :    ABI_ERROR(message)
     513                 :             :  end if
     514                 :             : 
     515                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_scfmixing',tread,'DPR')
     516         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_scfmixing=dprarr(1)
     517         [ -  + ]:          73 :  if(scup_dtset%scup_scfmixing<0)then
     518                 :             :    write(message, '(a,f10.2,a,a,a,a,a)' )&
     519                 :           0 : &   'scup_scfmixing is',scup_dtset%scup_scfmixing,', but the only allowed value',ch10,&
     520                 :           0 : &   'is superior to 0.',ch10,&
     521                 :           0 : &   'Action: correct scup_scfmixing in your input file.'
     522                 :           0 :    ABI_ERROR(message)
     523                 :             :  end if
     524                 :             : 
     525                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_scfthresh',tread,'DPR')
     526         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_scfthresh=dprarr(1)
     527         [ -  + ]:          73 :  if(scup_dtset%scup_scfthresh <= 0)then
     528                 :             :    write(message, '(a,f10.2,a,a,a,a,a)' )&
     529                 :           0 : &   'scup_scfthresh is',scup_dtset%scup_scfthresh,', but the only allowed value',ch10,&
     530                 :           0 : &   'is superior to 0.',ch10,&
     531                 :           0 : &   'Action: correct scup_scfthresh in your input file.'
     532                 :           0 :    ABI_ERROR(message)
     533                 :             :  end if
     534                 :             : 
     535                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_smearing',tread,'DPR')
     536         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_smearing=dprarr(1)
     537         [ -  + ]:          73 :  if(scup_dtset%scup_smearing < 0)then
     538                 :             :    write(message, '(a,f10.2,a,a,a,a,a)' )&
     539                 :           0 : &   'scup_smearing is',scup_dtset%scup_smearing,', but the only allowed value',ch10,&
     540                 :           0 : &   'is superior to or equal to 0.',ch10,&
     541                 :           0 : &   'Action: correct scup_smearing in your input file.'
     542                 :           0 :    ABI_ERROR(message)
     543                 :             :  end if
     544                 :             : 
     545                 :             : !T
     546                 :          73 :  call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'scup_tcharge',tread,'DPR')
     547         [ -  + ]:          73 :  if(tread==1) scup_dtset%scup_tcharge=dprarr(1)
     548         [ -  + ]:          73 :  if(scup_dtset%scup_tcharge<0)then
     549                 :             :    write(message, '(a,f10.2,a,a,a,a,a)' )&
     550                 :           0 : &   'scup_tcharge is',scup_dtset%scup_tcharge,', but the only allowed value',ch10,&
     551                 :           0 : &   'is superior to 0.',ch10,&
     552                 :           0 : &   'Action: correct scup_tcharge in your input file.'
     553                 :           0 :    ABI_ERROR(message)
     554                 :             :  end if
     555                 :             : 
     556                 :             : 
     557                 :             : !U
     558                 :             : !V
     559                 :             : !W
     560                 :             : !X
     561                 :             : !Y
     562                 :             : !Z
     563                 :             : 
     564                 :             : !=====================================================================
     565                 :             : !start reading dimension dependent variables
     566                 :             : !=====================================================================
     567                 :             : 
     568                 :             : 
     569                 :             : !A
     570                 :             : !B
     571                 :             : !C
     572                 :             : !D
     573                 :             : !E
     574                 :             : !F
     575                 :             : !G
     576                 :             : !H
     577                 :             : !I
     578                 :             : !J
     579                 :             : !K
     580                 :             : !L
     581                 :             : !M
     582                 :             : !N
     583                 :             : !O
     584                 :             : !P
     585                 :             : !Q
     586                 :             : !R
     587                 :             : !S
     588                 :             :    !Allocate
     589         [ -  + ]:          73 :    if(scup_dtset%scup_printbands)then
     590   [ #  #  #  #  :           0 :      ABI_MALLOC(scup_dtset%scup_speck,(3,scup_dtset%scup_nspeck))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     591                 :             : 
     592                 :           0 :    call intagm(dprarr,intarr,jdtset,marr,3*scup_dtset%scup_nspeck,string(1:lenstr),'scup_speck',tread,'DPR')
     593         [ #  # ]:           0 :      if(tread==1)then
     594   [ #  #  #  #  :           0 :        scup_dtset%scup_speck(:,:)=reshape( dprarr(1:3*scup_dtset%scup_nspeck), [3,scup_dtset%scup_nspeck])
                   #  # ]
     595                 :             :      else
     596                 :             :        write(message,'(5a)') &
     597                 :           0 : &       'When scup_printbands is asked, scup_speck must be initialized ',ch10,&
     598                 :           0 : &       'in the input file, which is not the case.',ch10,&
     599                 :           0 : &       'Action: initialize scup_speck in your input file, or change printbands.'
     600                 :           0 :        ABI_ERROR(message)
     601                 :             :      end if
     602                 :             :    end if
     603                 :             : 
     604                 :             : 
     605                 :             : !T
     606                 :             : !U
     607                 :             : !V
     608                 :             : !W
     609                 :             : !X
     610                 :             : !Y
     611                 :             : !Z
     612                 :             : 
     613                 :             : !=======================================================================
     614                 :             : !Finished reading in variables - deallocate
     615                 :             : !=======================================================================
     616                 :             : 
     617         [ -  + ]:          73 :  ABI_FREE(dprarr)
     618         [ -  + ]:          73 :  ABI_FREE(intarr)
     619                 :             : 
     620                 :          73 : end subroutine invars10scup
     621                 :             : !!***
     622                 :             : 
     623                 :             : !!****f* m_scup_dataset/scup_kpath_new
     624                 :             : !!
     625                 :             : !! NAME
     626                 :             : !! scup_kpath_init
     627                 :             : !!
     628                 :             : !! FUNCTION
     629                 :             : !! Initialize the kpath and all other variables SCALE UP needs to plot electronic bands
     630                 :             : !! along kpath
     631                 :             : !!
     632                 :             : !! INPUTS
     633                 :             : !! speck = array with special k-points along the path
     634                 :             : !! gprimd = reciprocal lattice vectors of cell
     635                 :             : !! ndivsm = number of divisions for smallest segment
     636                 :             : !!
     637                 :             : !! OUTPUT
     638                 :             : !! scup_kpath <type(kpath_t)> = kpath_t with all information about kpath
     639                 :             : !!
     640                 :             : !! NOTES
     641                 :             : !! Should be executed by one processor only.
     642                 :             : !!
     643                 :             : !!  m_bz_mesh/kpath_new
     644                 :             : !!
     645                 :             : !! SOURCE
     646                 :             : 
     647   [ #  #  #  #  :           0 : subroutine scup_kpath_new(speck,rprimd,ndivsm,scup_kpath)
          #  #  #  #  #  
                      # ]
     648                 :             : 
     649                 :             : !Arguments -------------------------------
     650                 :             : !scalars
     651                 :             :  integer,intent(in) :: ndivsm
     652                 :             : 
     653                 :             : !arrays
     654                 :             :  real(dp),intent(in) :: speck(:,:),rprimd(3,3)
     655                 :             :  type(kpath_t), intent(out) :: scup_kpath
     656                 :             : 
     657                 :             : !Local variables -------------------------
     658                 :             : !Dummy arguments for subroutine 'intagm' to parse input file
     659                 :             : !Set routine version number here:
     660                 :             : !scalars
     661                 :             :  integer :: nspeck
     662                 :             : !arrays
     663         [ #  # ]:           0 :  integer,allocatable :: ndivs_tmp(:)
     664                 :             :  real(dp) :: gprimd(3,3)
     665                 :             : 
     666                 :             : !*********************************************************************
     667                 :             : 
     668                 :             : !Get gprimd
     669                 :           0 : call matr3inv(rprimd,gprimd)
     670                 :             : 
     671                 :             : !Create Kpath
     672                 :           0 : call scup_kpath%init(speck,gprimd,ndivsm)
     673                 :             : 
     674                 :             : !Change size of scup_kpath%ndivs(:) variable
     675                 :             : !from nspeck-1 to nspeck and put 1 to first entry
     676                 :           0 : nspeck = size(speck,2)
     677   [ #  #  #  #  :           0 : ABI_MALLOC(ndivs_tmp,(nspeck))
          #  #  #  #  #  
                #  #  # ]
     678                 :             : 
     679                 :             : !First entry is always 1
     680                 :           0 :  ndivs_tmp(1) = 1
     681                 :             : !Copy point/per segments
     682         [ #  # ]:           0 :  ndivs_tmp(2:) = scup_kpath%ndivs(:)
     683                 :             : 
     684                 :             : !Delete original segments
     685         [ #  # ]:           0 : ABI_FREE(scup_kpath%ndivs)
     686                 :             : !Put new path
     687   [ #  #  #  #  :           0 : ABI_MALLOC(scup_kpath%ndivs,(nspeck))
             #  #  #  # ]
     688   [ #  #  #  # ]:           0 : scup_kpath%ndivs = ndivs_tmp
     689                 :             : !Free temporary array
     690                 :           0 : ABI_FREE(ndivs_tmp)
     691                 :             : 
     692                 :           0 : end subroutine scup_kpath_new
     693                 :             : !!***
     694                 :             : 
     695                 :             : !!****f* m_scup_dataset/scup_kpath_print
     696                 :             : !!
     697                 :             : !! NAME
     698                 :             : !! scup_kpath_print
     699                 :             : !!
     700                 :             : !! FUNCTION
     701                 :             : !! Print info of kpath provide to SCALE UP
     702                 :             : !!
     703                 :             : !! INPUTS
     704                 :             : !! scup_kpath<type(kpath_t) = kpath_t with all information about kpath
     705                 :             : !!
     706                 :             : !! OUTPUT
     707                 :             : !! Only Printing
     708                 :             : !!
     709                 :             : !! NOTES
     710                 :             : !! Should be executed by one processor only.
     711                 :             : !!
     712                 :             : !! SOURCE
     713                 :             : 
     714                 :           0 : subroutine scup_kpath_print(scup_kpath)
     715                 :             : 
     716                 :             : !Arguments ------------------------------------
     717                 :             :  class(kpath_t), intent(in) :: scup_kpath
     718                 :             : !Local variables-------------------------------
     719                 :             :  integer :: unt
     720                 :             : ! *************************************************************************
     721                 :             : 
     722                 :           0 :  unt = std_out
     723                 :             : 
     724                 :           0 :  write(unt,'(a)') ch10
     725                 :           0 :  write(unt,'(4a)') ' scup_printbands = 1. Printing of electronic bands active',ch10,&
     726                 :           0 :                    ' Kpath information below:',ch10
     727                 :             : 
     728         [ #  # ]:           0 :  call scup_kpath%print([std_out])
     729                 :             : 
     730                 :           0 : end subroutine scup_kpath_print
     731                 :             : !!***
     732                 :             : 
     733   [ #  #  #  #  :           0 : end module m_scup_dataset
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
     734                 :             : !!***
        

Generated by: LCOV version 2.3-1