types_misc.F90 6.37 KB
Newer Older
Daniel Wortmann's avatar
Daniel Wortmann committed
1 2 3 4 5 6 7
!--------------------------------------------------------------------------------
! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
! This file is part of FLEUR and available as free software under the conditions
! of the MIT license as expressed in the LICENSE file in more detail.
!--------------------------------------------------------------------------------

MODULE m_types_misc
8 9 10

IMPLICIT NONE

Daniel Wortmann's avatar
Daniel Wortmann committed
11 12 13
  !*************************************************************
  !     This module contains definitions for all kind of types
  !*************************************************************
14

Daniel Wortmann's avatar
Daniel Wortmann committed
15 16 17 18 19 20 21 22 23
  ! Type for the HF total energy
  TYPE t_energy_hf
     REAL :: valence
     REAL :: core
  END TYPE t_energy_hf

  TYPE prodtype
     INTEGER :: l1,l2,n1,n2
  END TYPE prodtype
24

Daniel Wortmann's avatar
Daniel Wortmann committed
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
  TYPE t_hybdat
     INTEGER              :: lmaxcd,maxindxc
     REAL,  ALLOCATABLE   ::  gridf(:,:)                                    !alloc in util.F
     INTEGER , ALLOCATABLE::  nindxc(:,:)                                   !alloc in eigen_HF_init
     INTEGER,ALLOCATABLE  :: lmaxc(:)                                       !alloc in eigen_HF_init
     REAL,    ALLOCATABLE ::  core1(:,:,:,:),core2(:,:,:,:)                 !alloc in eigen_HF_init
     REAL,    ALLOCATABLE ::  eig_c(:,:,:)                                  !alloc in eigen_HF_init
     INTEGER , ALLOCATABLE::  kveclo_eig(:,:)                               !alloc in eigen_HF_setup
     INTEGER              ::  maxfac
     REAL,    ALLOCATABLE ::  sfac(:),fac(:)                                !alloc in eigen_HF_init
     REAL,    ALLOCATABLE ::  gauntarr(:,:,:,:,:,:)                         !alloc in eigen_HF_init
     REAL,    ALLOCATABLE ::  bas1(:,:,:,:),bas2(:,:,:,:)                   !alloc in eigen_HF_init
     REAL ,   ALLOCATABLE ::  bas1_MT(:,:,:),drbas1_MT(:,:,:)               !alloc in eigen_HF_init
     REAL, ALLOCATABLE    ::  prodm(:,:,:,:)                                !alloc in eigen_HF_setup
     TYPE(PRODTYPE),ALLOCATABLE :: prod(:,:,:)                              !alloc in eigen_HF_setup
     INTEGER, ALLOCATABLE :: pntgptd(:)                                     !alloc in eigen_HF_setup
     INTEGER, ALLOCATABLE :: pntgpt(:,:,:,:)                                !alloc in eigen_HF_setup
     INTEGER,ALLOCATABLE   ::  nindxp1(:,:)
  END TYPE t_hybdat


  TYPE t_results
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
     REAL, ALLOCATABLE    :: force(:,:,:)   !< Forces calculated on all atoms (for each spin)
     REAL, ALLOCATABLE    :: force_old(:,:) !< Forces on all atoms from last iteration
     REAL                 :: ef        !<Fermie energy
     REAL                 :: seigc     !<sum of the core eigenvalues
     REAL                 :: seigsc    !<weighted sum of the semi-core eigenvalues
     REAL                 :: seigv     !<weighted sum of the occupied valence eigenvalues
     REAL                 :: seigscv   !<sum of seigv and seigsc
     REAL                 :: ts        !<entropy contribution to the free energy
     REAL                 :: te_vcoul  !<charge density-coulomb potential integral
     REAL                 :: te_veff   !<charge density-effective potential integral
     REAL                 :: te_exc    !<charge density-ex-corr.energy density integral
     REAL                 :: e_ldau    !<total energy contribution of LDA+U
     REAL                 :: tote
     REAL                 :: last_distance
     REAL                 :: bandgap
     TYPE(t_energy_hf)    ::  te_hfex
     REAL                 ::  te_hfex_loc(2)
     REAL, ALLOCATABLE    :: w_iks(:,:,:)
     INTEGER, ALLOCATABLE :: neig(:,:) ! neig(nkpts,jspins) number of calculated eigenvalues for each k point, spin

     CONTAINS
        PROCEDURE,PASS :: init => results_init
Daniel Wortmann's avatar
Daniel Wortmann committed
69 70 71 72 73 74 75 76
  END TYPE t_results
 
  TYPE t_zMat
     LOGICAL              :: l_real
     INTEGER              :: nbasfcn
     INTEGER              :: nbands
     REAL,    ALLOCATABLE :: z_r(:,:) ! z_r(nbasfcn,nbands)
     COMPLEX, ALLOCATABLE :: z_c(:,:) ! z_c(nbasfcn,nbands)
77 78 79

     CONTAINS
        PROCEDURE,PASS :: init => zMat_init
Daniel Wortmann's avatar
Daniel Wortmann committed
80 81 82 83 84 85 86 87
  END TYPE t_zMat

  TYPE t_hamOvlp
     LOGICAL              :: l_real
     INTEGER              :: matsize
     REAL,    ALLOCATABLE :: a_r(:), b_r(:)
     COMPLEX, ALLOCATABLE :: a_c(:), b_c(:)
  END TYPE t_hamOvlp
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113

CONTAINS

SUBROUTINE zMat_init(thisZMat,l_real,nbasfcn,nbands)

   IMPLICIT NONE

   CLASS(t_zMat),      INTENT(INOUT) :: thisZMat
   LOGICAL,            INTENT(IN)    :: l_real
   INTEGER,            INTENT(IN)    :: nbasfcn,nbands

   thisZMat%l_real = l_real
   thisZMat%nbasfcn = nbasfcn
   thisZMat%nbands = nbands

   IF (ALLOCATED(thisZMat%z_r)) DEALLOCATE(thisZMat%z_r)
   IF (ALLOCATED(thisZMat%z_c)) DEALLOCATE(thisZMat%z_c)
   IF (l_real) THEN
      ALLOCATE(thisZMat%z_r(nbasfcn,nbands))
      thisZMat%z_r = 0.0
   ELSE
      ALLOCATE(thisZMat%z_c(nbasfcn,nbands))
      thisZMat%z_c = CMPLX(0.0,0.0)
   END IF

END SUBROUTINE zMat_init
114

Gregor Michalicek's avatar
Gregor Michalicek committed
115
SUBROUTINE results_init(thisResults,dimension,input,atoms,kpts,noco)
116 117 118 119 120 121 122 123 124 125 126

   USE m_types_setup
   USE m_types_kpts

   IMPLICIT NONE

   CLASS(t_results),      INTENT(INOUT) :: thisResults
   TYPE(t_dimension),     INTENT(IN)    :: dimension
   TYPE(t_input),         INTENT(IN)    :: input
   TYPE(t_atoms),         INTENT(IN)    :: atoms
   TYPE(t_kpts),          INTENT(IN)    :: kpts
Gregor Michalicek's avatar
Gregor Michalicek committed
127 128 129
   TYPE(t_noco),          INTENT(IN)    :: noco

   INTEGER                              :: neigd2
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

   thisResults%seigc           = 0.0
   thisResults%seigsc          = 0.0
   thisResults%seigv           = 0.0
   thisResults%seigscv         = 0.0
   thisResults%e_ldau          = 0.0
   thisResults%ts              = 0.0

   thisResults%te_vcoul        = 0.0
   thisResults%te_veff         = 0.0
   thisResults%te_exc          = 0.0
   thisResults%te_hfex%valence = 0.0
   thisResults%te_hfex%core    = 0.0
   thisResults%te_hfex_loc     = 0.0

   thisResults%tote            = 0.0
   thisResults%last_distance   = -1.0
   thisResults%bandgap         = 0.0
   thisResults%ef              = 0.0

Gregor Michalicek's avatar
Gregor Michalicek committed
150 151 152
   neigd2 = dimension%neigd
   IF (noco%l_soc.AND.(.NOT.noco%l_noco)) neigd2 = 2*DIMENSION%neigd

153 154
   ALLOCATE (thisResults%force(3,atoms%ntype,input%jspins))
   ALLOCATE (thisResults%force_old(3,atoms%ntype))
Gregor Michalicek's avatar
Gregor Michalicek committed
155
   ALLOCATE (thisResults%w_iks(neigd2,kpts%nkpt,input%jspins))
156 157 158 159 160 161 162 163
   ALLOCATE (thisResults%neig(kpts%nkpt,input%jspins))

   thisResults%force = 0.0
   thisResults%force_old = 0.0
   thisResults%w_iks = 0.0
   thisResults%neig = 0

END SUBROUTINE results_init
Daniel Wortmann's avatar
Daniel Wortmann committed
164 165
 
END MODULE m_types_misc