Commit d7ed0dd7 authored by Matthias Redies's avatar Matthias Redies

Merge branch 'develop' of iffgit.fz-juelich.de:fleur/fleur into develop

parents eac0c2ac 9127aa02
MODULE m_inpeig
CONTAINS
SUBROUTINE inpeig(&
& atoms,cell,input,l_is_oneD,kpts,enpara)
& atoms,cell,input,l_is_oneD,kpts,enpara,kptsFilename)
!*********************************************************************
! inputs the necessary quantities for the eigenvalue part (energy
! parameters, k-points, wavefunction cutoffs, etc.).
......@@ -26,14 +26,15 @@
TYPE(t_input),INTENT(IN) :: input
LOGICAL,INTENT(IN) :: l_is_oneD
TYPE(t_kpts),INTENT(INOUT) :: kpts
TYPE(t_enpara),INTENT(INOUT) :: enpara
TYPE(t_enpara),OPTIONAL,INTENT(INOUT) :: enpara
CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: kptsFilename
! ..
! .. Local Scalars ..
REAL :: wt,scale
INTEGER :: i,j,nk,jsp,n
LOGICAL :: xyu,l_enpara,l_clf
CHARACTER(len=13) :: fname
CHARACTER(LEN=255) :: fname
! ..
!
......@@ -42,15 +43,24 @@
!---> read from file 40='enpara' shz Jan.96
!
IF (.NOT.input%l_inpXML) THEN
!read enpara file if present!
CALL enpara%init(atoms,input%jspins)
CALL enpara%READ(atoms,input%jspins,input%film,.false.)
IF(PRESENT(enpara)) THEN
IF (.NOT.input%l_inpXML) THEN
!read enpara file if present!
CALL enpara%init(atoms,input%jspins)
CALL enpara%READ(atoms,input%jspins,input%film,.false.)
END IF
END IF
!
!---> read k-points from file 41='kpts'
!
OPEN (41,file='kpts',form='formatted',status='old')
IF(PRESENT(kptsFilename)) THEN
fname = TRIM(ADJUSTL(kptsFilename))
ELSE
fname = 'kpts'
END IF
OPEN (41,file=TRIM(ADJUSTL(fname)),form='formatted',status='old')
!
!---> k-mesh: given in units of the reciprocal lattice basis vectors
!---> scale is a factor to make input easier (default=1.0). k-pt
......
......@@ -235,7 +235,7 @@ SUBROUTINE postprocessInput(mpi,input,field,sym,stars,atoms,vacuum,obsolete,kpts
minNeigd = MAX(5,NINT(0.75*input%zelec) + 1)
IF (noco%l_soc.and.(.not.noco%l_noco)) minNeigd = 2 * minNeigd
IF (noco%l_soc.and.noco%l_ss) minNeigd=(3*minNeigd)/2
IF (dimension%neigd.LT.minNeigd) THEN
IF ((dimension%neigd.NE.-1).AND.(dimension%neigd.LT.minNeigd)) THEN
IF (dimension%neigd>0) THEN
WRITE(*,*) 'numbands is too small. Setting parameter to default value.'
WRITE(*,*) 'changed numbands (dimension%neigd) to ',minNeigd
......@@ -250,8 +250,18 @@ SUBROUTINE postprocessInput(mpi,input,field,sym,stars,atoms,vacuum,obsolete,kpts
CALL lapw_dim(kpts,cell,input,noco,oneD,forcetheo,DIMENSION)
CALL lapw_fft_dim(cell,input,noco,stars)
atoms%nlotot = 0
DO n = 1, atoms%ntype
DO l = 1,atoms%nlo(n)
atoms%nlotot = atoms%nlotot + atoms%neq(n) * ( 2*atoms%llo(l,n) + 1 )
END DO
END DO
IF(dimension%neigd.EQ.-1) THEN
dimension%neigd = dimension%nvd + atoms%nlotot
END IF
obsolete%lepr = 0
IF (noco%l_noco) dimension%neigd = 2*dimension%neigd
......
......@@ -13,7 +13,7 @@ MODULE m_fleur_arguments
CHARACTER(len=200) :: values
END TYPE t_fleur_param
INTEGER,PARAMETER:: no_params=6
INTEGER,PARAMETER:: no_params=7
TYPE(t_fleur_param) :: fleur_param(no_params)=(/&
t_fleur_param(0,"-old","Generate input file for old fleur versions",""),&
......@@ -21,6 +21,7 @@ MODULE m_fleur_arguments
t_fleur_param(0,"-genEnpara","generate an 'enpara' file",""),&
t_fleur_param(0,"-electronConfig","explicitely write the electron configuration into inp.xml",""),&
t_fleur_param(0,"-fast_defaults","generate more aggressive (and less stable) input parameters for faster calculations",""),&
t_fleur_param(0,"-kpts_gw","add alternative k point set for GW",""),&
t_fleur_param(0,"-h","print this help message","")&
/)
......
......@@ -32,6 +32,7 @@ CONTAINS
CALL print_argument("-explicit")
CALL print_argument("-electronConfig")
CALL print_argument("-fast_defaults")
CALL print_argument("-kpts_gw")
CALL print_argument("-h")
WRITE(*,'(a)')""
WRITE(*,'(a)')"Please check the documentation on www.flapw.de for more details"
......
......@@ -136,7 +136,9 @@ CONTAINS
CHARACTER(LEN=255) :: xPathA, xPathB, xPathC, xPathD, xPathE
CHARACTER(LEN=11) :: latticeType
CHARACTER(LEN=50) :: versionString
CHARACTER(LEN=150) :: kPointsPrefix
INTEGER :: altKPointSetIndex, altKPointSetIndices(2)
LOGICAL :: ldaSpecies
REAL :: socscaleSpecies
......@@ -304,7 +306,7 @@ CONTAINS
IF(numberNodes.EQ.1) THEN
valueString = TRIM(ADJUSTL(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA)))))
IF(TRIM(ADJUSTL(valueString)).EQ.'all') THEN
STOP 'Feature to calculate all eigenfunctions not yet implemented.'
dimension%neigd = -1
ELSE
READ(valueString,*) dimension%neigd
END IF
......@@ -355,6 +357,54 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
IF (ABS(input%fixed_moment)>1E-8.AND.(input%jspins==1.OR.noco%l_noco)) CALL judft_error("Fixed moment only in collinear calculations with two spins")
! Read in optional expert modes switches
xPathA = '/fleurInput/calculationSetup/expertModes'
numberNodes = xmlGetNumberOfNodes(xPathA)
input%gw = 0
input%secvar = .FALSE.
IF (numberNodes.EQ.1) THEN
input%gw = evaluateFirstIntOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA))//'/@gw'))
input%secvar = evaluateFirstBoolOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA))//'/@secvar'))
END IF
! Check for alternative k point sets for the chosen FLEUR mode
xPathA = '/fleurInput/output'
numberNodes = xmlGetNumberOfNodes(xPathA)
banddos%band = .FALSE.
IF (numberNodes.EQ.1) THEN
banddos%band = evaluateFirstBoolOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA))//'/@band'))
END IF
altKPointSetIndices(:) = -1
xPathA = '/fleurInput/calculationSetup/bzIntegration/altKPointSet'
numberNodes = xmlGetNumberOfNodes(xPathA)
IF(numberNodes.NE.0) THEN
DO i = 1, numberNodes
WRITE(xPathA,*) '/fleurInput/calculationSetup/bzIntegration/altKPointSet[',i,']/@purpose'
valueString = TRIM(ADJUSTL(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA)))))
IF((altKPointSetIndices(2).EQ.-1).AND.(TRIM(ADJUSTL(valueString)).EQ.'GW')) THEN
altKPointSetIndices(2) = i
ELSE IF((altKPointSetIndices(1).EQ.-1).AND.(TRIM(ADJUSTL(valueString)).EQ.'bands')) THEN
altKPointSetIndices(1) = i
END IF
END DO
END IF
altKPointSetIndex = -1
IF(banddos%band) THEN
altKPointSetIndex = altKPointSetIndices(1)
ELSE IF (input%gw.EQ.2) THEN
altKPointSetIndex = altKPointSetIndices(2)
END IF
IF (altKPointSetIndex.NE.-1) THEN
WRITE(kPointsPrefix,*) '/fleurInput/calculationSetup/bzIntegration/altKPointSet[',altKPointSetIndex,']'
END IF
! Read in Brillouin zone integration parameters
kpts%nkpt3 = 0
......@@ -401,9 +451,13 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
STOP 'Error: Optionality of valence electrons in input file not yet implemented!'
END IF
IF (altKPointSetIndex.EQ.-1) THEN
WRITE(kPointsPrefix,*) '/fleurInput/calculationSetup/bzIntegration'
END IF
! Option kPointDensity
kpts%kPointDensity(:) = 0.0
xPathA = '/fleurInput/calculationSetup/bzIntegration/kPointDensity'
xPathA = TRIM(ADJUSTL(kPointsPrefix))//'/kPointDensity'
numberNodes = xmlGetNumberOfNodes(xPathA)
IF (numberNodes.EQ.1) THEN
l_kpts = .FALSE.
......@@ -415,7 +469,7 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
END IF
! Option kPointMesh
xPathA = '/fleurInput/calculationSetup/bzIntegration/kPointMesh'
xPathA = TRIM(ADJUSTL(kPointsPrefix))//'/kPointMesh'
numberNodes = xmlGetNumberOfNodes(xPathA)
IF (numberNodes.EQ.1) THEN
l_kpts = .FALSE.
......@@ -428,7 +482,7 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
END IF
! Option kPointCount
xPathA = '/fleurInput/calculationSetup/bzIntegration/kPointCount'
xPathA = TRIM(ADJUSTL(kPointsPrefix))//'/kPointCount'
numberNodes = xmlGetNumberOfNodes(xPathA)
IF (numberNodes.EQ.1) THEN
l_kpts = .FALSE.
......@@ -443,7 +497,7 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
kpts%wtkpt = 0.0
kpts%posScale = 1.0
numberNodes = xmlGetNumberOfNodes('/fleurInput/calculationSetup/bzIntegration/kPointCount/specialPoint')
numberNodes = xmlGetNumberOfNodes(TRIM(ADJUSTL(kPointsPrefix))//'/kPointCount/specialPoint')
IF(numberNodes.EQ.1) THEN
STOP 'Error: Single special k point provided. This does not make sense!'
END IF
......@@ -453,7 +507,7 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
ALLOCATE(kpts%specialPoints(3,kpts%numSpecialPoints))
ALLOCATE(kpts%specialPointNames(kpts%numSpecialPoints))
DO i = 1, kpts%numSpecialPoints
WRITE(xPathA,*) '/fleurInput/calculationSetup/bzIntegration/kPointCount/specialPoint[',i,']'
WRITE(xPathA,*) TRIM(ADJUSTL(kPointsPrefix))//'/kPointCount/specialPoint[',i,']'
valueString = TRIM(ADJUSTL(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA)))))
kpts%specialPoints(1,i) = evaluatefirst(valueString)
kpts%specialPoints(2,i) = evaluatefirst(valueString)
......@@ -468,10 +522,10 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
END IF
! Option kPointList
numberNodes = xmlGetNumberOfNodes('/fleurInput/calculationSetup/bzIntegration/kPointList')
numberNodes = xmlGetNumberOfNodes(TRIM(ADJUSTL(kPointsPrefix))//'/kPointList')
IF (numberNodes.EQ.1) THEN
l_kpts = .TRUE.
numberNodes = xmlGetNumberOfNodes('/fleurInput/calculationSetup/bzIntegration/kPointList/kPoint')
numberNodes = xmlGetNumberOfNodes(TRIM(ADJUSTL(kPointsPrefix))//'/kPointList/kPoint')
kpts%nkpt = numberNodes
kpts%l_gamma = .FALSE.
ALLOCATE(kpts%bk(3,kpts%nkpt))
......@@ -480,11 +534,11 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
kpts%wtkpt = 0.0
kpts%specificationType = 3
kpts%posScale = evaluateFirstOnly(xmlGetAttributeValue('/fleurInput/calculationSetup/bzIntegration/kPointList/@posScale'))
weightScale = evaluateFirstOnly(xmlGetAttributeValue('/fleurInput/calculationSetup/bzIntegration/kPointList/@weightScale'))
kpts%posScale = evaluateFirstOnly(xmlGetAttributeValue(TRIM(ADJUSTL(kPointsPrefix))//'/kPointList/@posScale'))
weightScale = evaluateFirstOnly(xmlGetAttributeValue(TRIM(ADJUSTL(kPointsPrefix))//'/kPointList/@weightScale'))
DO i = 1, kpts%nkpt
WRITE(xPathA,*) '/fleurInput/calculationSetup/bzIntegration/kPointList/kPoint[',i,']'
WRITE(xPathA,*) TRIM(ADJUSTL(kPointsPrefix))//'/kPointList/kPoint[',i,']'
valueString = TRIM(ADJUSTL(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA)))))
READ(valueString,*) kpts%bk(1,i), kpts%bk(2,i), kpts%bk(3,i)
kpts%bk(:,i)=kpts%bk(:,i)/kpts%posScale
......@@ -494,6 +548,25 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
kpts%posScale=1.0
END IF
! Option kPointListFile
xPathA = TRIM(ADJUSTL(kPointsPrefix))//'/kPointListFile'
numberNodes = xmlGetNumberOfNodes(xPathA)
IF (numberNodes.EQ.1) THEN
valueString = TRIM(ADJUSTL(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA))//'/@filename')))
OPEN (41,file=TRIM(ADJUSTL(valueString)),form='formatted',status='old')
READ (41,*) kpts%nkpt
CLOSE (41)
ALLOCATE(kpts%bk(3,kpts%nkpt))
ALLOCATE(kpts%wtkpt(kpts%nkpt))
kpts%bk = 0.0
kpts%wtkpt = 0.0
kpts%l_gamma = .FALSE.
l_kpts = .TRUE.
kpts%specificationType = 3
kpts%posScale=1.0
CALL inpeig(atoms,cell,input,.FALSE.,kpts,kptsFilename=TRIM(ADJUSTL(valueString)))
END IF
! Read in optional SOC parameters if present
xPathA = '/fleurInput/calculationSetup/soc'
......@@ -574,19 +647,6 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
oneD%odd%zrfs = evaluateFirstBoolOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA))//'/@zrfs1'))
END IF
! Read in optional expert modes switches
xPathA = '/fleurInput/calculationSetup/expertModes'
numberNodes = xmlGetNumberOfNodes(xPathA)
input%gw = 0
input%secvar = .FALSE.
IF (numberNodes.EQ.1) THEN
input%gw = evaluateFirstIntOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA))//'/@gw'))
input%secvar = evaluateFirstBoolOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathA))//'/@secvar'))
END IF
! Read in optional geometry optimization parameters
xPathA = '/fleurInput/calculationSetup/geometryOptimization'
......@@ -1945,8 +2005,10 @@ input%preconditioning_param = evaluateFirstOnly(xmlGetAttributeValue('/fleurInpu
END IF
wann%l_byindex = .TRUE.
IF(input%l_wann) THEN
IF (dimension%neigd.LT.MAX(wann%band_max(1),wann%band_max(2))) THEN
dimension%neigd = MAX(wann%band_max(1),wann%band_max(2))
IF (dimension%neigd.NE.-1) THEN
IF (dimension%neigd.LT.MAX(wann%band_max(1),wann%band_max(2))) THEN
dimension%neigd = MAX(wann%band_max(1),wann%band_max(2))
END IF
END IF
END IF
END IF
......
......@@ -279,6 +279,13 @@ SUBROUTINE w_inpXML(&
212 FORMAT(' <kPointDensity denX="',f0.6,'" denY="',f0.6,'" denZ="',f0.6,'" gamma="',l1,'"/>')
WRITE (fileNum,212) kpts%kPointDensity(1),kpts%kPointDensity(2),kpts%kPointDensity(3),kptGamma
END IF
IF(juDFT_was_argument("-kpts_gw")) THEN
WRITE(fileNum,'(a)') ' <altKPointSet purpose="GW">'
WRITE(fileNum,'(a)') ' <kPointListFile filename="kpts_gw"/>'
WRITE(fileNum,'(a)') ' </altKPointSet>'
END IF
WRITE (fileNum,'(a)') ' </bzIntegration>'
! <energyParameterLimits ellow="-2.00000" elup="2.00000"/>
......
......@@ -19,6 +19,7 @@ SUBROUTINE writeBasis(input,noco,kpts,atoms,sym,cell,enpara,vTot,vCoul,vx,mpi,DI
USE m_genmtbasis
USE m_pot_io
USE m_abcof
USE m_abcrot
USE m_eig66_io, ONLY : read_eig
IMPLICIT NONE
......@@ -454,16 +455,20 @@ SUBROUTINE writeBasis(input,noco,kpts,atoms,sym,cell,enpara,vTot,vCoul,vx,mpi,DI
CALL read_eig(eig_id,nk,jsp,zmat=zMat)
CALL eigVecCoeffs%init(input,DIMENSION,atoms,noco,jsp,numbands)
IF (input%l_f) CALL force%init2(numbands,input,atoms)
DO i=1,atoms%nat
ngopr_temp(i)=atoms%ngopr(i)
atoms%ngopr(i)=1
END DO
! DO i=1,atoms%nat
! ngopr_temp(i)=atoms%ngopr(i)
! atoms%ngopr(i)=1
! END DO
CALL abcof(input,atoms,sym,cell,lapw,numbands,usdus,noco,jsp,oneD,&
eigVecCoeffs%acof(:,0:,:,jsp),eigVecCoeffs%bcof(:,0:,:,jsp),&
eigVecCoeffs%ccof(-atoms%llod:,:,:,:,jsp),zMat,results%eig(:,nk,jsp),force)
DO i=1,atoms%nat
atoms%ngopr(i)=ngopr_temp(i)
END DO
! DO i=1,atoms%nat
! atoms%ngopr(i)=ngopr_temp(i)
! END DO
CALL abcrot(atoms%ntype,atoms%nat,dimension%neigd,atoms%lmaxd,dimension%lmd,atoms%llod,atoms%nlod,atoms%ntype,atoms%neq,&
numbands,atoms%lmax,atoms%nlo,atoms%llo,sym%nop,atoms%ngopr,sym%mrot,atoms%invsat,sym%invsatnr,cell%bmat,&
oneD%odi,oneD%ods,&
eigVecCoeffs%acof(:,0:,:,jsp),eigVecCoeffs%bcof(:,0:,:,jsp),eigVecCoeffs%ccof(-atoms%llod:,:,:,:,jsp))
!-------------------------for spex output: nbasfcn=nv(because lo info not needed) and numbands setting to numbands without highest (degenerat) state--------
nbasfcn=lapw%nv(jsp)
ndbands=numbands-1
......@@ -597,12 +602,12 @@ write(*,*)numbands,ndbands
dims(:4)=Hdim1
dimsInt = dims
CALL h5screate_simple_f(4,dims(:4),itypeSpaceID,hdfError)
CALL h5screate_simple_f(4,dims(:4),itypeSpaceID,hdfError)
CALL h5dcreate_f(kptGroupID, "mt", H5T_NATIVE_DOUBLE, itypeSpaceID, itypeSetID, hdfError)
CALL h5sclose_f(itypeSpaceID,hdfError)
CALL io_write_real4(itypeSetID,(/1,1,1,1/),dimsInt(:4), cof)
CALL h5dclose_f(itypeSetID, hdfError)
deallocate ( cof )
deallocate ( cof )
!-------------------------end output spex format-----------------
CALL h5gclose_f(kptGroupID, hdfError)
......
......@@ -13,7 +13,7 @@ MODULE m_fleur_arguments
CHARACTER(len=200) :: values
END TYPE t_fleur_param
INTEGER,PARAMETER:: no_params=22
INTEGER,PARAMETER:: no_params=23
TYPE(t_fleur_param) :: fleur_param(no_params)=(/&
!Input options
t_fleur_param(0,"-toXML","Convert an old 'inp' file into the new XML format",""),&
......@@ -60,6 +60,7 @@ MODULE m_fleur_arguments
!Output
t_fleur_param(0,"-no_out","Do not open the 'out' file but write to stdout",""),&
t_fleur_param(0,"-genEnpara","Generate an 'enpara' file for the energy parameters",""),&
t_fleur_param(0,"-kpts_gw","add alternative k point set for GW in all outputs for the XML input file",""),&
t_fleur_param(0,"-h","Print this message",""),&
t_fleur_param(0,"-no_send","Do not send usage data","")&
!HDF density
......
......@@ -28,6 +28,7 @@
USE m_setupMPI
USE m_cdn_io
USE m_fleur_info
USE m_broyd_io
USE m_checks
USE m_prpqfftmap
USE m_writeOutHeader
......@@ -523,6 +524,7 @@
CALL results%init(dimension,input,atoms,kpts,noco)
IF (mpi%irank.EQ.0) THEN
IF(input%gw.NE.0) CALL resetBroydenHistory()
CALL setStartingDensity(noco%l_noco)
END IF
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment