!-------------------------------------------------------------------------------- ! 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 !************************************************************* ! This module contains definitions for all kind of types !************************************************************* ! ! Types for orbital moment calculation: ! ! ! Types for spin-off-diagonal charge density: ! TYPE t_mt21 ! 'normal' contributions SEQUENCE REAL :: uun,udn,dun,ddn ! normes of radial overlaps COMPLEX :: uu,ud,du,dd ! values END TYPE t_mt21 TYPE t_lo21 ! ocal orbitals & (u,d) SEQUENCE REAL :: uulon,dulon,uloun,ulodn ! normes of radial overlaps COMPLEX :: uulo,dulo,ulou,ulod ! values END TYPE t_lo21 TYPE t_orb ! 'normal' contributions SEQUENCE REAL :: uu,dd ! z component COMPLEX :: uup,uum,ddp,ddm ! +/- component END TYPE t_orb TYPE t_orbl ! local orbitals & (u,d) SEQUENCE REAL :: uulo,dulo COMPLEX :: uulop,uulom,dulop,dulom END TYPE t_orbl TYPE t_orblo ! lo,lo' contributions SEQUENCE REAL :: z COMPLEX :: p,m END TYPE t_orblo TYPE t_usdus REAL,ALLOCATABLE,DIMENSION(:,:,:) :: us REAL,ALLOCATABLE,DIMENSION(:,:,:) :: dus REAL,ALLOCATABLE,DIMENSION(:,:,:) :: uds REAL,ALLOCATABLE,DIMENSION(:,:,:) :: duds !(0:lmaxd,ntype,jspd) REAL,ALLOCATABLE,DIMENSION(:,:,:) :: ddn !(0:lmaxd,ntype,jspd) REAL,ALLOCATABLE,DIMENSION(:,:,:) :: ulos REAL,ALLOCATABLE,DIMENSION(:,:,:) :: dulos REAL,ALLOCATABLE,DIMENSION(:,:,:) :: uulon REAL,ALLOCATABLE,DIMENSION(:,:,:) :: dulon !(nlod,ntype,jspd) REAL,ALLOCATABLE,DIMENSION(:,:,:,:) :: uloulopn! (nlod,nlod,ntypd,jspd) CONTAINS PROCEDURE :: init => usdus_init END TYPE t_usdus ! types for 1D calculations TYPE od_dim LOGICAL :: d1 INTEGER :: mb,M,k3,m_cyl INTEGER :: chi,rot LOGICAL :: invs,zrfs INTEGER :: n2d,nq2,nn2d INTEGER :: kimax2 INTEGER :: nop,nat END TYPE od_dim TYPE od_inp LOGICAL :: d1 INTEGER :: mb,M,k3,m_cyl INTEGER :: chi,rot LOGICAL :: invs,zrfs INTEGER :: n2d,nq2,nn2d INTEGER :: kimax2 INTEGER, POINTER :: ig(:,:) !(-k3:k3,-M:M) INTEGER, POINTER :: kv(:,:) !(2,n2d) INTEGER, POINTER :: nst2(:) !(n2d) END TYPE od_inp TYPE od_sym INTEGER :: nop,nat INTEGER, POINTER :: ngopr(:) !(nat) REAL , POINTER :: mrot(:,:,:) !(3,3,nop) REAL , POINTER :: tau(:,:) !(3,nop) INTEGER, POINTER :: invtab(:) !(nop) INTEGER, POINTER :: multab(:,:) !(nop,nop) END TYPE od_sym TYPE od_lda INTEGER :: nn2d INTEGER, POINTER :: igf(:,:) !(0:nn2d-1,2) REAL , POINTER :: pgf(:) !(0:nn2d-1) END TYPE od_lda TYPE od_gga INTEGER :: nn2d REAL, POINTER :: pgfx(:) ! (0:nn2d-1) REAL, POINTER :: pgfy(:) REAL, POINTER :: pgfxx(:) REAL, POINTER :: pgfyy(:) REAL, POINTER :: pgfxy(:) END TYPE od_gga ! ! Type for LDA+U: ! TYPE t_utype SEQUENCE REAL u,j ! the actual U and J parameters INTEGER l ! the l quantum number to which this U parameter belongs INTEGER atomType ! The atom type to which this U parameter belongs LOGICAL :: l_amf ! logical switch to choose the "around mean field" LDA+U limit END TYPE t_utype ! ! Type for the HF total energy ! TYPE t_energy_hf REAL :: valence REAL :: core END TYPE t_energy_hf ! ! Type for the electric field ! TYPE t_efield REAL :: zsigma = 10.0 ! Distance to the charged plates REAL :: sigma = 0.0 ! charge at the plates REAL :: sig_b(2)= 0.0 ! Extra charge for the top/bottom plate COMPLEX :: vslope = 0.0 ! Dirichlet bnd. cond.: Slope REAL, ALLOCATABLE :: sigEF(:,:,:) ! (nx, ny, nvac) COMPLEX, ALLOCATABLE :: rhoEF(:,:) ! (g_||, nvac) COMPLEX, ALLOCATABLE :: C1(:), C2(:) ! Coeff. for Dirichlet bnd.cond. LOGICAL :: l_segmented = .FALSE. LOGICAL :: plot_charge = .FALSE. ! Plot charge as inputted LOGICAL :: plot_rho = .FALSE. ! Plot Fourier-transformed charge LOGICAL :: autocomp = .TRUE. ! Auto-compensate film charge LOGICAL :: dirichlet = .FALSE. ! Dirichlet vs. Neumann boundary cond. LOGICAL :: l_dirichlet_coeff = .FALSE. ! For MPI, true if C1/C2 set END TYPE t_efield TYPE t_atoms !potmix INTEGER:: ndvgrd !remove REAL :: chng !remove LOGICAL :: lwb !remove END TYPE t_obsolete TYPE t_enpara REAL, ALLOCATABLE :: el0(:,:,:) REAL, ALLOCATABLE :: evac0(:,:) REAL, ALLOCATABLE :: ello0(:,:,:) REAL, ALLOCATABLE :: enmix(:) INTEGER, ALLOCATABLE :: skiplo(:,:) LOGICAL, ALLOCATABLE :: lchange(:,:,:) LOGICAL, ALLOCATABLE :: lchg_v(:,:) LOGICAL, ALLOCATABLE :: llochg(:,:,:) REAL :: epara_min END TYPE t_enpara TYPE t_vacuum !Stuff for the vacuum INTEGER ::nmz INTEGER ::nmzd INTEGER ::nmzxy INTEGER ::nmzxyd INTEGER :: layerd INTEGER :: layers INTEGER :: nvac INTEGER :: nvacd REAL :: delz REAL :: dvac INTEGER::nstars INTEGER:: nstm REAL :: tworkf REAL :: locx(2) REAL :: locy(2) LOGICAL ::starcoeff INTEGER, ALLOCATABLE :: izlay(:,:) END TYPE t_vacuum !Data for the spherical harmonics TYPE t_sphhar !No of symmetry types (must !equal maxval(atoms%ntypsy) INTEGER ::ntypsd !Max no of members of sphhar INTEGER ::memd !max of nlh INTEGER ::nlhd !No of sphhar (ntypsd) INTEGER,ALLOCATABLE ::nlh(:) !l's of sphhar (0:nlhd,ntypsd) INTEGER,ALLOCATABLE ::llh(:,:) !No of members in sphhar (0:nlh INTEGER,ALLOCATABLE ::nmem(:,:) !lm's of of members (max(nmem), INTEGER,ALLOCATABLE ::mlh(:,:,:) !phasefactors (max(nmem),0:nlhd COMPLEX,ALLOCATABLE ::clnu(:,:,:) END TYPE t_sphhar !symmetry information TYPE t_sym INTEGER :: symSpecType !Symophic group LOGICAL ::symor INTEGER ::nsymt INTEGER :: nsym COMPLEX,ALLOCATABLE:: d_wgn(:,:,:,:) !2D-inv-sym LOGICAL ::invs2 !Inversion-sym LOGICAL ::invs !Z-refls. sym LOGICAL ::zrfs !No of sym ops INTEGER ::nop !No of 2D-sym ops INTEGER ::nop2 !Rot-matrices (3,3,nop) INTEGER,ALLOCATABLE::mrot(:,:,:) !inverse operation (nop) INTEGER,ALLOCATABLE::invtab(:) !translation vectors (3,nop) REAL,ALLOCATABLE::tau(:,:) !Name of lattice type CHARACTER*3 :: latnam !Name of sym CHARACTER*4 :: namgrp INTEGER, ALLOCATABLE :: multab(:,:) INTEGER, ALLOCATABLE :: invsatnr(:) INTEGER, ALLOCATABLE :: invarop(:,:) INTEGER, ALLOCATABLE :: invarind(:) END TYPE t_sym TYPE t_results REAL, ALLOCATABLE :: force(:,:,:) !< Forces calculated on all atoms (for each spin) REAL, ALLOCATABLE :: force_old(:,:) !< Forces on all atoms from last iteration REAL :: ef ! gwf LOGICAL :: l_ms LOGICAL :: l_sgwf LOGICAL :: l_socgwf LOGICAL :: l_gwf LOGICAL :: l_bs_comf LOGICAL :: l_exist LOGICAL :: l_opened LOGICAL :: l_cleverskip LOGICAL :: l_dim(3) REAL :: scale_param REAL :: aux_latt_const REAL :: hdwf_t1 REAL :: hdwf_t2 INTEGER :: nparampts CHARACTER(len=20) :: fn_eig CHARACTER(len=20) :: param_file REAL,ALLOCATABLE :: param_vec(:,:) REAL,ALLOCATABLE :: param_alpha(:,:) CHARACTER(LEN=20), ALLOCATABLE :: jobList(:) !---> gwf END TYPE t_wann CONTAINS SUBROUTINE usdus_init(ud,atoms,jsp) USE m_judft IMPLICIT NONE CLASS(t_usdus) :: ud TYPE(t_atoms),INTENT(IN) :: atoms INTEGER,INTENT(IN) :: jsp INTEGER :: err(10) ALLOCATE ( ud%uloulopn(atoms%nlod,atoms%nlod,atoms%ntype,jsp),stat=err(1) ) ALLOCATE ( ud%ddn(0:atoms%lmaxd,atoms%ntype,jsp),stat=err(2) ) ALLOCATE ( ud%us(0:atoms%lmaxd,atoms%ntype,jsp),stat=err(3)) ALLOCATE ( ud%uds(0:atoms%lmaxd,atoms%ntype,jsp),stat=err(4) ) ALLOCATE ( ud%dus(0:atoms%lmaxd,atoms%ntype,jsp),stat=err(5)) ALLOCATE ( ud%duds(0:atoms%lmaxd,atoms%ntype,jsp),stat=err(6)) ALLOCATE ( ud%ulos(atoms%nlod,atoms%ntype,jsp ),stat=err(7)) ALLOCATE (ud%dulos(atoms%nlod,atoms%ntype,jsp ),stat=err(8) ) ALLOCATE ( ud%uulon(atoms%nlod,atoms%ntype,jsp ),stat=err(9)) ALLOCATE (ud%dulon(atoms%nlod,atoms%ntype,jsp) ,stat=err(10)) IF (ANY(err>0)) CALL judft_error("Not enough memory allocating usdus datatype") END SUBROUTINE usdus_init END MODULE m_types_misc