LCOV - code coverage report
Current view: top level - src/94_scfcv - m_scfcv.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 98.6 % 138 136
Test Date: 2026-09-19 15:24:51 Functions: 71.4 % 7 5

            Line data    Source code
       1              : !!****m* ABINIT/m_scfcv
       2              : !! NAME
       3              : !!  m_scfcv
       4              : !!
       5              : !! FUNCTION
       6              : !!  FIXME: add description.
       7              : !!
       8              : !! COPYRIGHT
       9              : !!  Copyright (C) 2014-2026 ABINIT group (JB)
      10              : !!  This file is distributed under the terms of the
      11              : !!  GNU General Public License, see ~abinit/COPYING
      12              : !!  or http://www.gnu.org/copyleft/gpl.txt .
      13              : !!
      14              : !! SOURCE
      15              : 
      16              : #if defined HAVE_CONFIG_H
      17              : #include "config.h"
      18              : #endif
      19              : 
      20              : #include "abi_common.h"
      21              : 
      22              : module m_scfcv
      23              : 
      24              :  use defs_basis
      25              :  use defs_wvltypes
      26              :  use defs_rectypes
      27              :  use m_abicore
      28              :  use m_errors
      29              :  use m_wffile
      30              :  use m_rec
      31              :  use m_efield
      32              :  use m_entropyDMFT
      33              :  use m_hdr
      34              :  use m_rcpaw
      35              :  use m_extfpmd
      36              :  use m_dtfil
      37              :  use m_xg_nonlop
      38              : 
      39              :  use defs_datatypes,     only : pseudopotential_type
      40              :  use defs_abitypes,      only : MPI_type
      41              :  use m_scf_history,      only : scf_history_type
      42              :  use m_results_gs ,      only : results_gs_type
      43              :  use m_electronpositron, only : electronpositron_type
      44              :  use m_pawang,           only : pawang_type
      45              :  use m_pawrad,           only : pawrad_type
      46              :  use m_pawtab,           only : pawtab_type
      47              :  use m_pawcprj,          only : pawcprj_type
      48              :  use m_pawrhoij,         only : pawrhoij_type
      49              :  use m_pawfgr,           only : pawfgr_type
      50              :  use m_paw_dmft,         only : paw_dmft_type
      51              :  use m_paw_uj,           only : macro_uj_type
      52              :  use m_data4entropyDMFT, only : data4entropyDMFT_t, data4entropyDMFT_init, data4entropyDMFT_destroy
      53              :  use m_scfcv_core,       only : scfcv_core
      54              : 
      55              :  implicit none
      56              : 
      57              :  private
      58              : 
      59              :  public :: scfcv_init
      60              :  public :: scfcv_destroy
      61              :  public :: scfcv_run
      62              : !!***
      63              : 
      64              : ! *************************************************************************
      65              : 
      66              : !!****t* m_scfcv/scfcv_t
      67              : !! NAME
      68              : !!  scfcv_t
      69              : !!
      70              : !! FUNCTION
      71              : !!  This structured datatype contains the necessary data
      72              : !!
      73              : !! SOURCE
      74              : 
      75              :  type, public :: scfcv_t
      76              :   !scalars
      77              :    integer,pointer :: mcg => null()
      78              :    integer,pointer :: mcprj => null()
      79              :    integer,pointer :: my_natom => null()
      80              :    integer,pointer :: ndtpawuj => null()
      81              :    integer,pointer :: pwind_alloc => null()
      82              :    integer,pointer :: initialized => null()
      83              :    integer,pointer :: nfftf => null()
      84              :    real(dp),pointer :: cpus => null()
      85              :    real(dp),pointer :: ecore  => null()
      86              :    real(dp),pointer :: fatvshift => null()
      87              :    type(pawang_type),pointer :: pawang => null()
      88              :    type(pseudopotential_type),pointer :: psps => null()
      89              :    type(MPI_type),pointer :: mpi_enreg => null()
      90              :    type(datafiles_type),pointer :: dtfil => null()
      91              :    type(dataset_type),pointer :: dtset => null()
      92              :    type(efield_type),pointer :: dtefield => null()
      93              :    type(electronpositron_type),pointer :: electronpositron => null()
      94              :    type(hdr_type),pointer :: hdr => null()
      95              :    type(extfpmd_type),pointer :: extfpmd => null()
      96              :    type(rcpaw_type),pointer :: rcpaw => null()
      97              :    type(pawfgr_type),pointer :: pawfgr => null()
      98              :    type(recursion_type),pointer :: rec_set => null()
      99              :    type(results_gs_type),pointer :: results_gs => null()
     100              :    type(scf_history_type),pointer :: scf_history => null()
     101              :    type(wffile_type),pointer :: wffnew => null()
     102              :    type(wffile_type),pointer :: wffnow => null()
     103              :    type(wvl_data),pointer :: wvl => null()
     104              :    type(paw_dmft_type), pointer :: paw_dmft => null()
     105              :    type(xg_nonlop_t),pointer :: xg_nonlop => null()
     106              : 
     107              :    !arrays
     108              :    integer,pointer :: atindx(:) => null()
     109              :    integer,pointer :: atindx1(:) => null()
     110              :    integer, pointer :: irrzon(:,:,:) => null()
     111              :    integer, pointer :: symrec(:,:,:) => null()
     112              :    integer,pointer :: indsym(:,:,:) => null()
     113              :    !no_abirules
     114              :    integer, pointer :: kg(:,:) => null()
     115              :    integer, pointer :: nattyp(:) => null()
     116              :    integer, pointer :: npwarr(:) => null()
     117              :    integer, pointer :: pwind(:,:,:) => null()
     118              :    real(dp), pointer :: dmatpawu(:,:,:,:) => null()
     119              :    real(dp), pointer :: phnons(:,:,:) => null()
     120              :    real(dp), pointer :: pwnsfac(:,:) => null()
     121              :    real(dp), pointer :: ylm(:,:) => null()
     122              :    real(dp), pointer :: ylmgr(:,:,:) => null()
     123              :    real(dp), pointer :: cg(:,:) => null()
     124              :    real(dp), pointer :: eigen(:) => null()
     125              :    real(dp), pointer :: occ(:) => null()
     126              :    !real(dp), pointer :: rprimd(:,:) => null()
     127              :    !real(dp), pointer :: rhog(:,:) => null()
     128              :    !real(dp), pointer :: rhor(:,:) => null()
     129              :    real(dp), pointer :: taug(:,:) => null()
     130              :    real(dp), pointer :: taur(:,:) => null()
     131              :    real(dp), pointer :: resid(:) => null()
     132              :    type(pawrad_type), pointer :: pawrad(:) => null()
     133              :    type(pawtab_type), pointer :: pawtab(:) => null()
     134              :    type(macro_uj_type),pointer :: dtpawuj(:) => null()
     135              :    type(pawrhoij_type), pointer :: pawrhoij(:) => null()
     136              :    type(pawcprj_type),pointer :: cprj(:,:) => null()
     137              :    ! PRIVATE ATTRIBUTS
     138              :    type(entropyDMFT_t) ABI_PRIVATE :: entropyDMFT
     139              :  end type scfcv_t
     140              : !!***
     141              : 
     142              : ! *************************************************************************
     143              : 
     144              : contains
     145              : !!***
     146              : 
     147              : 
     148              : !!****f* ABINIT/m_scfcv/scfcv_init
     149              : !! NAME
     150              : !!  scfcv_init
     151              : !!
     152              : !! FUNCTION
     153              : !!  FIXME: add description.
     154              : !!
     155              : !! INPUTS
     156              : !!  scfcv=structure of scfcv
     157              : !!  argin(sizein)=description
     158              : !!
     159              : !! OUTPUT
     160              : !!
     161              : !! SOURCE
     162              : 
     163         5629 : subroutine scfcv_init(this,atindx,atindx1,cg,cprj,cpus,&
     164        11258 : &  dmatpawu,dtefield,dtfil,dtpawuj,dtset,ecore,eigen,hdr,extfpmd,rcpaw,&
     165        11258 : &  indsym,initialized,irrzon,kg,mcg,mcprj,mpi_enreg,my_natom,nattyp,ndtpawuj,&
     166        11258 : &  nfftf,npwarr,occ,pawang,pawfgr,pawrad,pawrhoij,&
     167         5629 : &  pawtab,phnons,psps,pwind,pwind_alloc,pwnsfac,rec_set,&
     168         5629 : &  resid,results_gs,scf_history,fatvshift,&
     169         5629 : &  symrec,taug,taur,wvl,ylm,ylmgr,paw_dmft,wffnew,wffnow,xg_nonlop)
     170              : 
     171              : 
     172              : !Arguments ------------------------------------
     173              : !scalars
     174              :  type(scfcv_t), intent(inout) :: this
     175              :  integer,intent(in),target :: mcg,mcprj,my_natom,ndtpawuj,pwind_alloc
     176              :  integer,intent(in),target :: initialized,nfftf
     177              :  real(dp),intent(in),target :: cpus,ecore
     178              :  real(dp),intent(in),target :: fatvshift
     179              :  type(MPI_type),intent(in),target :: mpi_enreg
     180              :  type(datafiles_type),intent(in),target :: dtfil
     181              :  type(dataset_type),intent(in),target :: dtset
     182              :  type(efield_type),intent(in),target :: dtefield
     183              : ! type(electronpositron_type),pointer :: electronpositron
     184              :  type(hdr_type),intent(in),target :: hdr
     185              :  type(extfpmd_type),intent(in),pointer :: extfpmd
     186              :  type(rcpaw_type),intent(in),pointer :: rcpaw
     187              :  type(pawang_type),intent(in),target :: pawang
     188              :  type(pawfgr_type),intent(in),target :: pawfgr
     189              :  type(pseudopotential_type),intent(in),target :: psps
     190              :  type(recursion_type),intent(in),target :: rec_set
     191              :  type(results_gs_type),intent(in),target :: results_gs
     192              :  type(scf_history_type),intent(in),target :: scf_history
     193              : ! type(wffile_type),intent(in),target :: wffnew,wffnow
     194              :  type(wvl_data),intent(in),target :: wvl
     195              : !arrays
     196              :  integer,intent(in),target :: atindx(dtset%natom),atindx1(dtset%natom)
     197              :  integer,intent(in),target :: indsym(4,dtset%nsym,dtset%natom)
     198              : !no_abirules
     199              :  integer, intent(in),target :: irrzon(dtset%nfft**(1-1/dtset%nsym),2,(dtset%nspden/dtset%nsppol)-3*(dtset%nspden/4))
     200              :  integer, intent(in),target :: kg(3,dtset%mpw*dtset%mkmem)
     201              :  integer, intent(in),target :: nattyp(psps%ntypat),npwarr(dtset%nkpt),pwind(pwind_alloc,2,3)
     202              :  integer, intent(in),target :: symrec(3,3,dtset%nsym)
     203              :  real(dp), intent(in),target :: cg(2,mcg),dmatpawu(:,:,:,:)
     204              :  real(dp), intent(in),target :: eigen(dtset%mband*dtset%nkpt*dtset%nsppol)
     205              :  real(dp), intent(in),target :: occ(dtset%mband*dtset%nkpt*dtset%nsppol)
     206              :  real(dp), intent(in),target :: phnons(2,dtset%nfft**(1-1/dtset%nsym),(dtset%nspden/dtset%nsppol)-3*(dtset%nspden/4))
     207              :  real(dp), intent(in),target :: pwnsfac(2,pwind_alloc)
     208              : ! real(dp), intent(in),target :: rprimd(3,3)
     209              : ! real(dp), pointer :: rhog(:,:),rhor(:,:)
     210              :  real(dp), pointer :: taug(:,:),taur(:,:)
     211              :  real(dp), intent(in),target :: resid(dtset%mband*dtset%nkpt*dtset%nsppol)
     212              : ! real(dp), intent(in),target :: xred(3,dtset%natom),xred_old(3,dtset%natom)
     213              :  real(dp), intent(in),target :: ylm(dtset%mpw*dtset%mkmem,psps%mpsang*psps%mpsang*psps%useylm)
     214              :  real(dp), intent(in),target :: ylmgr(dtset%mpw*dtset%mkmem,3,psps%mpsang*psps%mpsang*psps%useylm)
     215              :  type(macro_uj_type),intent(in),target :: dtpawuj(0:ndtpawuj)
     216              :  type(pawrhoij_type), intent(in),target :: pawrhoij(my_natom*psps%usepaw)
     217              :  type(pawrad_type), intent(in),target :: pawrad(psps%ntypat*psps%usepaw)
     218              :  type(pawtab_type), intent(in),target :: pawtab(psps%ntypat*psps%usepaw)
     219              :  !type(dataset_type),intent(in),target :: dtset
     220              : ! type(electronpositron_type),intent(in),target :: electronpositron
     221              :  type(paw_dmft_type), intent(in),target :: paw_dmft
     222              :  type(wffile_type),intent(in),target :: wffnew,wffnow
     223              :  type(pawcprj_type), allocatable,intent(in),target :: cprj(:,:)
     224              :  type(xg_nonlop_t),intent(inout),target :: xg_nonlop
     225              : !Local variables -------------------------
     226              : !scalars
     227              :  logical :: DEBUG=.FALSE.
     228              : ! *************************************************************************
     229              : 
     230              :  DBG_ENTER("COLL")
     231              : 
     232         5629 :  if (DEBUG) then
     233            0 :    write(std_out,*) 'INTENT(IN) ARGUMENTS ON SCFCV'
     234              :  !  write(std_out,*) 'atindx=',ab_scfcv_in%atindx
     235              :  !  write(std_out,*) 'atindx1=',ab_scfcv_in%atindx1
     236              :  !  write(std_out,*) 'cpus=',ab_scfcv_in%cpus
     237              :  !  write(std_out,*) 'ecore=',ab_scfcv_in%ecore
     238              :  !  write(std_out,*) 'fatvshift=',ab_scfcv_in%fatvshift
     239              :  !  write(std_out,*) 'indsym=',ab_scfcv_in%indsym
     240              :  !  write(std_out,*) 'kg=',ab_scfcv_in%kg
     241              :  !  write(std_out,*) 'my_natom=',ab_scfcv_in%my_natom
     242              :  !  write(std_out,*) 'nattyp=',ab_scfcv_in%nattyp
     243              :  !  write(std_out,*) 'ndtpawuj=',ab_scfcv_in%ndtpawuj
     244              :  !  write(std_out,*) 'npwarr=',ab_scfcv_in%npwarr
     245              :  !  write(std_out,*) 'phnons=',ab_scfcv_in%phnons
     246              :  !  write(std_out,*) 'pwind=',ab_scfcv_in%pwind
     247              :  !  write(std_out,*) 'pwind_alloc=',ab_scfcv_in%pwind_alloc
     248              :  !  write(std_out,*) 'pwnsfac=',ab_scfcv_in%pwnsfac
     249              :  !  write(std_out,*) 'ylm=',ab_scfcv_in%ylm
     250              :  !  write(std_out,*) 'ylmgr=',ab_scfcv_in%ylmgr
     251              : !!  write(std_out,*) 'pawang=',ab_scfcv_in%pawang
     252              : !!  write(std_out,*) 'pawrad=',ab_scfcv_in%pawrad
     253              : !!  write(std_out,*) 'pawtab=',ab_scfcv_in%pawtab
     254              : !!  write(std_out,*) 'psps=',ab_scfcv_in%psps
     255              :  end if
     256              : 
     257         5629 :  this%atindx=>atindx
     258         5629 :  this%atindx1=>atindx1
     259         5629 :  this%cpus=>cpus
     260         5629 :  this%ecore=>ecore
     261         5629 :  this%fatvshift=>fatvshift
     262         5629 :  this%indsym=>indsym
     263         5629 :  this%kg=>kg
     264         5629 :  this%mcg=>mcg
     265         5629 :  this%mcprj=>mcprj
     266         5629 :  this%my_natom=>my_natom
     267         5629 :  this%nattyp=>nattyp
     268         5629 :  this%ndtpawuj=>ndtpawuj
     269         5629 :  this%npwarr=>npwarr
     270         5629 :  this%pawang=>pawang
     271         5629 :  this%pawrad=>pawrad
     272         5629 :  this%pawtab=>pawtab
     273         5629 :  this%phnons=>phnons
     274         5629 :  this%psps=>psps
     275         5629 :  this%pwind=>pwind
     276         5629 :  this%pwind_alloc=>pwind_alloc
     277         5629 :  this%pwnsfac=>pwnsfac
     278         5629 :  this%ylm=>ylm
     279         5629 :  this%ylmgr=>ylmgr
     280              : 
     281         5629 :  this%cg=>cg
     282         5629 :  this%cprj=>cprj
     283         5629 :  this%dmatpawu=>dmatpawu
     284         5629 :  this%dtefield=>dtefield
     285         5629 :  this%dtfil=>dtfil
     286         5629 :  this%dtpawuj=>dtpawuj
     287         5629 :  this%eigen=>eigen
     288         5629 :  this%hdr=>hdr
     289         5629 :  this%extfpmd=>extfpmd
     290         5629 :  this%rcpaw=>rcpaw
     291         5629 :  this%initialized=>initialized
     292         5629 :  this%irrzon=>irrzon
     293         5629 :  this%mpi_enreg=>mpi_enreg
     294         5629 :  this%nfftf=>nfftf
     295         5629 :  this%occ=>occ
     296         5629 :  this%pawfgr=>pawfgr
     297         5629 :  this%pawrhoij=>pawrhoij
     298         5629 :  this%pawtab=>pawtab
     299         5629 :  this%rec_set=>rec_set
     300         5629 :  this%resid=>resid
     301         5629 :  this%results_gs=>results_gs
     302         5629 :  this%scf_history=>scf_history
     303         5629 :  this%symrec=>symrec
     304         5629 :  this%taug=>taug
     305         5629 :  this%taur=>taur
     306         5629 :  this%wvl=>wvl
     307              : 
     308         5629 :  this%dtset=>dtset
     309              :  !this%electronpositron=>electronpositron
     310         5629 :  this%paw_dmft=>paw_dmft
     311              :  !this%rhog=>rhog
     312              :  !this%rhor=>rhor
     313              :  !this%rprimd=>rprimd
     314         5629 :  this%wffnew=>wffnew
     315         5629 :  this%wffnow=>wffnow
     316              :  !this%xred=>xred
     317              :  !this%xred_old=>xred_old
     318         5629 :  this%xg_nonlop=>xg_nonlop
     319              : 
     320              : 
     321              :  !!!!!!!!! INITIALIZE or REINITIALIZE parallelization here !!
     322              :  ! TODO at next step
     323              :  !if ( this%dtset%usedmft /= 0 ) then
     324              :  !  call data4entropyDMFT_init(this%paw_dmft%forentropyDMFT,&
     325              :  !                            this%dtset%natom,&
     326              :  !                            this%dtset%typat,&
     327              :  !                            this%dtset%lpawu,&
     328              :  !                            this%dtset%dmft_t2g==1, &
     329              :  !                            this%dtset%upawu,&   !!! Should use this%pawtab%upawu
     330              :  !                            this%dtset%jpawu)    !!! Should use this%pawtab%jpawu
     331              :  !end if
     332              : 
     333              :  !call entropyDMFT_init(this%entropyDMFT,this%dtset,this%pawtab,this%mpi_enreg%comm_cell,this%dtfil%filnam_ds(3),this%dtfil%filnam_ds(4)) ! Do something only if DMFT and dmft_entropy = 1
     334              : 
     335              :  DBG_EXIT("COLL")
     336              : 
     337         5629 : end subroutine scfcv_init
     338              : !!***
     339              : 
     340              : 
     341              : !!****f* ABINIT/m_scfcv/scfcv_destroy
     342              : !! NAME
     343              : !!  scfcv_destroy
     344              : !!
     345              : !! FUNCTION
     346              : !!  FIXME: add description.
     347              : !!
     348              : !! INPUTS
     349              : !!  scfcv=structure of scfcv
     350              : !!
     351              : !! SOURCE
     352              : 
     353         5673 : subroutine scfcv_destroy(this)
     354              : 
     355              : !Arguments ------------------------------------
     356              : type(scfcv_t), intent(inout) :: this
     357              : 
     358              : !Local variables-------------------------------
     359              : 
     360              : ! *************************************************************************
     361              : 
     362              :  DBG_ENTER("COLL")
     363              : 
     364              :  !scalars
     365         5673 :  this%mcg => null()
     366         5673 :  this%mcprj => null()
     367         5673 :  this%my_natom => null()
     368         5673 :  this%ndtpawuj => null()
     369         5673 :  this%pwind_alloc => null()
     370         5673 :  this%initialized => null()
     371         5673 :  this%nfftf => null()
     372         5673 :  this%cpus => null()
     373         5673 :  this%ecore  => null()
     374         5673 :  this%fatvshift => null()
     375         5673 :  this%pawang => null()
     376         5673 :  this%psps => null()
     377         5673 :  this%mpi_enreg => null()
     378         5673 :  this%dtfil => null()
     379         5673 :  this%dtset => null()
     380         5673 :  this%dtefield => null()
     381         5673 :  this%electronpositron => null()
     382         5673 :  this%hdr => null()
     383         5673 :  this%extfpmd => null()
     384         5673 :  this%rcpaw=>null()
     385         5673 :  this%pawfgr => null()
     386         5673 :  this%rec_set => null()
     387         5673 :  this%results_gs => null()
     388         5673 :  this%scf_history => null()
     389         5673 :  this%wffnew => null()
     390         5673 :  this%wffnow => null()
     391         5673 :  this%wvl => null()
     392         5673 :  this%paw_dmft => null()
     393              : 
     394              :  !arrays
     395         5673 :  this%atindx => null()
     396         5673 :  this%atindx1 => null()
     397         5673 :  this%irrzon => null()
     398         5673 :  this%symrec => null()
     399         5673 :  this%indsym => null()
     400              :  !no_abirules
     401         5673 :  this%kg => null()
     402         5673 :  this%nattyp => null()
     403         5673 :  this%npwarr => null()
     404         5673 :  this%pwind => null()
     405         5673 :  this%phnons => null()
     406         5673 :  this%pwnsfac => null()
     407         5673 :  this%ylm => null()
     408         5673 :  this%ylmgr => null()
     409         5673 :  this%cg => null()
     410         5673 :  this%cprj => null()
     411         5673 :  this%dmatpawu => null()
     412         5673 :  this%eigen => null()
     413         5673 :  this%occ => null()
     414              :  !this%rprimd
     415              :  !this%rhog => null()
     416              :  !this%rhor => null()
     417         5673 :  this%taug => null()
     418         5673 :  this%taur => null()
     419         5673 :  this%resid => null()
     420         5673 :  this%pawrad => null()
     421         5673 :  this%pawtab => null()
     422         5673 :  this%dtpawuj => null()
     423         5673 :  this%pawrhoij => null()
     424         5673 :  this%xg_nonlop=>null()
     425              : 
     426              :  ! This call should be done inside destroy_sc_dmft
     427              :  !if ( this%dtset%usedmft /= 0 ) then
     428              :  !  call data4entropyDMFT_destroy(this%paw_dmft%forentropyDMFT)
     429              :  !end if
     430              :  !call entropyDMFT_destroy(this%entropyDMFT)
     431              : 
     432              :  DBG_EXIT("COLL")
     433              : 
     434         5673 : end subroutine scfcv_destroy
     435              : !!***
     436              : 
     437              : !!****f* ABINIT/m_scfcv/scfcv_run
     438              : !! NAME
     439              : !!  scfcv_run
     440              : !!
     441              : !! FUNCTION
     442              : !!  FIXME: add description.
     443              : !!
     444              : !! INPUTS
     445              : !!  itimes(2)=itime array, contain itime=itimes(1) and itimimage_gstate=itimes(2) from outer loops
     446              : !!  scfcv=structure of scfcv
     447              : !!
     448              : !! OUTPUT
     449              : !!
     450              : !! SOURCE
     451              : 
     452         6912 : subroutine scfcv_run(this, electronpositron, itimes, rhog, rhor, rprimd, xred, xred_old, conv_retcode)
     453              : 
     454              : !Arguments ------------------------------------
     455              :  type(scfcv_t), intent(inout) :: this
     456              :  integer,intent(in) :: itimes(2)
     457              :  type(electronpositron_type),pointer:: electronpositron
     458              :  real(dp), intent(inout) :: rprimd(3,3)
     459              :  real(dp), intent(inout) :: xred(3,this%dtset%natom)
     460              :  real(dp), intent(inout) :: xred_old(3,this%dtset%natom)
     461              :  real(dp), pointer, intent(inout) :: rhog(:,:)
     462              :  real(dp), pointer, intent(inout) :: rhor(:,:)
     463              :  integer ,intent(out) :: conv_retcode
     464              : 
     465              : !Local variables-------------------------------
     466              : 
     467              : ! *************************************************************************
     468              : 
     469              :  DBG_ENTER("COLL")
     470              : 
     471              : !!!  Should be changed if special parallelization.
     472              : 
     473              :  ! Moved inside mover.F90 before this call
     474              :  !call scfcv_reformatWFK(this,rhog, rhor, rprimd, xred, xred_old)
     475              : 
     476              :  ! First initialize the datatype to gather information
     477              : 
     478              :  !debug purpose
     479              :  !this%electronpositron => electronpositron
     480         6912 :  if ( this%dtset%dmft_entropy == 0 ) then
     481         6909 :    call scfcv_scfcv(this, electronpositron, itimes, rhog, rhor, rprimd, xred, xred_old, conv_retcode)
     482            3 :  elseif ( this%dtset%dmft_entropy >=1 ) then
     483            3 :    call scfcv_runWEntropyDMFT(this, electronpositron,itimes, rhog,rhor,rprimd,xred,xred_old,conv_retcode)
     484              :  end if
     485              : 
     486              :  DBG_EXIT("COLL")
     487              : 
     488         6912 : end subroutine scfcv_run
     489              : !!***
     490              : 
     491              : 
     492              : !!!!****f* ABINIT/m_scfcv/scfcv_reformatWFK
     493              : !!!! NAME
     494              : !!!!  scfcv_reformatWFK
     495              : !!!!
     496              : !!!! FUNCTION
     497              : !!!!  FIXME: add description.
     498              : !!!!
     499              : !!!! INPUTS
     500              : !!!!  scfcv=structure of scfcv
     501              : !!!!  argin(sizein)=description
     502              : !!!!
     503              : !!!! OUTPUT
     504              : !!!!  argout(sizeout)=description
     505              : !!!!
     506              : !!!! SIDE EFFECTS
     507              : !!!!
     508              : !!!! NOTES
     509              : !!!!
     510              : !!!! SOURCE
     511              : !!
     512              : !!subroutine scfcv_reformatWFK(this,rhog, rhor, rprimd, xred, xred_old)
     513              : !!
     514              : !!
     515              : !! type(scfcv_t), intent(inout) :: this
     516              : !! real(dp), intent(inout) :: xred(3,this%dtset%natom)
     517              : !! real(dp), intent(inout) :: xred_old(3,this%dtset%natom)
     518              : !! real(dp), intent(inout) :: rprimd(3,3)
     519              : !! real(dp), pointer, intent(inout) :: rhog(:,:)
     520              : !! real(dp), pointer, intent(inout) :: rhor(:,:)
     521              : !!
     522              : !!!WVL - reformat the wavefunctions in the case of xred != xred_old
     523              : !! if (this%dtset%usewvl == 1 .and. maxval(xred_old - xred) > zero) then
     524              : !!!  WVL - Before running scfcv, on non-first geometry step iterations,
     525              : !!!  we need to reformat the wavefunctions, taking into acount the new
     526              : !!!  coordinates.
     527              : !!!  We prepare to change rhog (to be removed) and rhor.
     528              : !!   ABI_FREE(rhog)
     529              : !!   ABI_FREE(rhor)
     530              : !!
     531              : !!   call wvl_wfsinp_reformat(this%dtset, this%mpi_enreg,&
     532              : !!&   this%psps, rprimd, this%wvl, xred, xred_old)
     533              : !!   this%nfftf = this%dtset%nfft
     534              : !!
     535              : !!   ABI_MALLOC(rhog,(2, this%dtset%nfft))
     536              : !!   ABI_MALLOC(rhor,(2, this%dtset%nfft))
     537              : !!   call wvl_mkrho(this%dtset, this%irrzon, this%mpi_enreg,&
     538              : !!&   this%phnons, rhor,this%wvl%wfs,this%wvl%den)
     539              : !! end if
     540              : !!
     541              : !!end subroutine scfcv_reformatWFK
     542              : !!!!***
     543              : 
     544              : !!****f* ABINIT/m_scfcv/scfcv_runWEntropyDMFT
     545              : !! NAME
     546              : !!  scfcv_runWEntropyDMFT
     547              : !!
     548              : !! FUNCTION
     549              : !!  FIXME: add description.
     550              : !!
     551              : !! INPUTS
     552              : !!  itimes(2)=itime array, contain itime=itimes(1) and itimimage_gstate=itimes(2) from outer loops
     553              : !!  scfcv=structure of scfcv
     554              : !!  argin(sizein)=description
     555              : !!
     556              : !! OUTPUT
     557              : !!  argout(sizeout)=description
     558              : !!
     559              : !! SIDE EFFECTS
     560              : !!
     561              : !! NOTES
     562              : !!
     563              : !! SOURCE
     564              : 
     565            3 : subroutine scfcv_runWEntropyDMFT(this,electronpositron,itimes,rhog,rhor,rprimd,xred,xred_old,conv_retcode)
     566              : 
     567              : 
     568              : !Arguments ------------------------------------
     569              :  type(scfcv_t), intent(inout) :: this
     570              :  integer,intent(in) :: itimes(2)
     571              :  type(electronpositron_type),pointer :: electronpositron
     572              :  real(dp), intent(inout) :: rprimd(3,3)
     573              :  real(dp), intent(inout) :: xred(3,this%dtset%natom)
     574              :  real(dp), intent(inout) :: xred_old(3,this%dtset%natom)
     575              :  real(dp), pointer, intent(inout) :: rhog(:,:)
     576              :  real(dp), pointer, intent(inout) :: rhor(:,:)
     577              :  integer , intent(out)   :: conv_retcode
     578              : 
     579              : !Local variables-------------------------------
     580              : 
     581              : ! *************************************************************************
     582              : 
     583              :  DBG_ENTER("COLL")
     584              : 
     585              :  !if ( this%dtset%usedmft /= 0 ) then
     586              :  !  call data4entropyDMFT_init(this%paw_dmft%forentropyDMFT,&
     587              :  !                            this%dtset%natom,&
     588              :  !                            this%dtset%typat,&
     589              :  !                            this%dtset%lpawu,&
     590              :  !                            this%dtset%dmft_t2g==1, &
     591              :  !                            this%dtset%upawu,&     !!! Should use this%pawtab%upawu
     592              :  !                            this%dtset%jpawu)      !!! Should use this%pawtab%jpawu
     593              :  !end if
     594              : 
     595              :  call entropyDMFT_init(this%entropyDMFT,this%dtset,this%pawtab,this%mpi_enreg%comm_cell,&
     596            3 : &       this%dtfil%filnam_ds(3),this%dtfil%filnam_ds(4)) ! Do something only if DMFT and dmft_entropy = 1
     597              : 
     598              :  ! Start loop over all integration points (lambda)
     599              :  ! TODO WORK ON PARALLELISATION HERE
     600           12 :  do while (entropyDMFT_nextLambda(this%entropyDMFT,this%dtset,this%pawtab,this%pawang,this%pawrad))
     601              : 
     602              :  !-----------------------------------------------------
     603            9 :    call scfcv_scfcv(this, electronpositron,itimes,rhog,rhor,rprimd,xred,xred_old,conv_retcode)
     604              :  !-----------------------------------------------------
     605            9 :    call entropyDMFT_addIntegrand(this%entropyDMFT,this%dtset, this%results_gs%energies,this%paw_dmft%forentropyDMFT)
     606              : 
     607              :  end do !!! End loop for entropy DMFT
     608              : 
     609              :  ! GATHER DATA HERE OR INSIDE THE NEXT CALL ?
     610            3 :  call entropyDMFT_computeEntropy(this%entropyDMFT,this%results_gs%energies%entropy_ks)
     611              :  !-----------------------------------------------------
     612              :  ! This call should be done inside destroy_sc_dmft
     613              :  !if ( this%dtset%usedmft /= 0 ) then
     614              :  !  call data4entropyDMFT_destroy(this%paw_dmft%forentropyDMFT)
     615              :  !end if
     616            3 :  call entropyDMFT_destroy(this%entropyDMFT)
     617              : 
     618              :  DBG_EXIT("COLL")
     619              : 
     620            3 : end subroutine scfcv_runWEntropyDMFT
     621              : !!***
     622              : 
     623              : !!****f* ABINIT/m_scfcv/scfcv_scfcv
     624              : !! NAME
     625              : !!  scfcv_scfcv
     626              : !!
     627              : !! FUNCTION
     628              : !!  FIXME: add description.
     629              : !!
     630              : !! INPUTS
     631              : !!  scfcv=structure of scfcv
     632              : !!  itimes(2)=itime array, contain itime=itimes(1) and itimimage_gstate=itimes(2) from outer loops
     633              : !!
     634              : !! NOTES
     635              : !!  Wrapper to scfcv to avoid circular dependencies ...
     636              : !!
     637              : !! SOURCE
     638              : 
     639         6918 : subroutine scfcv_scfcv(this, electronpositron, itimes, rhog, rhor, rprimd, xred, xred_old, conv_retcode)
     640              : 
     641              :  type(scfcv_t), intent(inout) :: this
     642              :  integer,intent(in) :: itimes(2)
     643              :  type(electronpositron_type),pointer :: electronpositron
     644              :  real(dp), intent(inout) :: rprimd(3,3)
     645              :  real(dp), intent(inout) :: xred(3,this%dtset%natom)
     646              :  real(dp), intent(inout) :: xred_old(3,this%dtset%natom)
     647              :  real(dp), pointer, intent(inout) :: rhog(:,:)
     648              :  real(dp), pointer, intent(inout) :: rhor(:,:)
     649              :  integer , intent(out)   :: conv_retcode
     650              : 
     651              :    call scfcv_core(this%atindx,this%atindx1,this%cg,this%cprj,this%cpus,this%dmatpawu,this%dtefield,this%dtfil,&
     652              :     this%dtpawuj,&
     653              :     this%dtset,this%ecore,this%eigen,electronpositron,this%fatvshift,this%hdr,this%extfpmd,this%rcpaw,this%indsym,&
     654              :     this%initialized,this%irrzon,itimes,this%kg,this%mcg,this%mcprj,this%mpi_enreg,this%my_natom,this%nattyp,this%ndtpawuj,&
     655              :     this%nfftf,this%npwarr,&
     656              :     this%occ,this%paw_dmft,this%pawang,this%pawfgr,this%pawrad,this%pawrhoij,this%pawtab,this%phnons,this%psps,this%pwind,&
     657              :     this%pwind_alloc,this%pwnsfac,this%rec_set,this%resid,this%results_gs,rhog,rhor,rprimd,&
     658              :     this%scf_history,this%symrec,this%taug,this%taur,this%wffnew,this%wvl,this%xg_nonlop,xred,xred_old,this%ylm,this%ylmgr,&
     659         6918 :     conv_retcode)
     660              : 
     661         6918 : end subroutine scfcv_scfcv
     662              : 
     663            0 : end module m_scfcv
     664              : !!***
        

Generated by: LCOV version 2.3-1