!-------------------------------------------------------------------------------- ! 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_winpXML !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! !!! XML input file generator !!! !!! This subroutine is supposed to write out a file inp.xml !!! containing all required input data. !!! GM'16 !!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CONTAINS SUBROUTINE w_inpXML(& & atoms,obsolete,vacuum,input,stars,sliceplot,forcetheo,banddos,& & cell,sym,xcpot,noco,oneD,hybrid,kpts,div,l_gamma,& & noel,namex,relcor,a1,a2,a3,dtild_opt,name_opt,& & xmlElectronStates,xmlPrintCoreStates,xmlCoreOccs,& & atomTypeSpecies,speciesRepAtomType,l_outFile,filename,& & l_explicitIn,numSpecies,enpara) USE m_types USE m_juDFT USE m_constants USE m_xmlOutput IMPLICIT NONE ! arguments TYPE(t_input),INTENT(IN) :: input TYPE(t_sym),INTENT(IN) :: sym TYPE(t_stars),INTENT(IN) :: stars TYPE(t_atoms),INTENT(IN) :: atoms TYPE(t_vacuum),INTENT(IN) :: vacuum TYPE(t_obsolete),INTENT(IN) :: obsolete TYPE(t_kpts),INTENT(IN) :: kpts TYPE(t_oneD),INTENT(IN) :: oneD TYPE(t_hybrid),INTENT(IN) :: hybrid TYPE(t_cell),INTENT(IN) :: cell TYPE(t_banddos),INTENT(IN) :: banddos TYPE(t_sliceplot),INTENT(IN):: sliceplot CLASS(t_xcpot),INTENT(IN) :: xcpot TYPE(t_noco),INTENT(IN) :: noco TYPE(t_enpara),INTENT(IN) :: enpara CLASS(t_forcetheo),INTENT(IN):: forcetheo !nothing is done here so far.... INTEGER, INTENT (IN) :: numSpecies INTEGER, INTENT (IN) :: div(3) INTEGER, INTENT (IN) :: atomTypeSpecies(atoms%ntype) INTEGER, INTENT (IN) :: speciesRepAtomType(numSpecies) LOGICAL, INTENT (IN) :: l_gamma, l_outFile, l_explicitIn REAL, INTENT (IN) :: a1(3),a2(3),a3(3) REAL, INTENT (IN) :: xmlCoreOccs(2,29,atoms%ntype) INTEGER, INTENT (IN) :: xmlElectronStates(29,atoms%ntype) LOGICAL, INTENT (IN) :: xmlPrintCoreStates(29,atoms%ntype) CHARACTER(len=3),INTENT(IN) :: noel(atoms%ntype) CHARACTER(len=4),INTENT(IN) :: namex CHARACTER(len=12),INTENT(IN):: relcor CHARACTER(LEN=*),INTENT(IN) :: filename REAL,INTENT(IN),OPTIONAL :: dtild_opt CHARACTER(len=8),INTENT(IN),OPTIONAL:: name_opt(10) INTEGER :: iSpecies, fileNum CHARACTER(len=8) :: name(10) !+lda+u REAL u,j INTEGER l, i_u INTEGER uIndices(2,atoms%ntype) LOGICAL l_amf CHARACTER(len=3) ch_test NAMELIST /ldaU/ l,u,j,l_amf !-lda+u !+odim INTEGER MM,vM,m_cyl LOGICAL invs1,zrfs1 INTEGER chi,rot LOGICAL d1,band NAMELIST /odim/ d1,MM,vM,m_cyl,chi,rot,invs1,zrfs1 !-odim ! .. ! .. Local Variables REAL ::dtild, zc, sumWeight INTEGER ::nw,idsprs, n1, n2 INTEGER ieq,i,k,na,n,ilo REAL s3,ah,a,hs2,rest LOGICAL l_hyb,l_sym,ldum INTEGER :: ierr ! .. !... Local Arrays CHARACTER :: helpchar(atoms%ntype) CHARACTER(len= 4) :: chntype CHARACTER(len= 41) :: chform CHARACTER(len=100) :: line ! added for HF and hybrid functionals REAL :: aMix,omega INTEGER :: idum CHARACTER (len=1) :: check CHARACTER(len=20) :: speciesName CHARACTER(len=150) :: format CHARACTER(len=20) :: mixingScheme CHARACTER(len=10) :: loType CHARACTER(len=10) :: bzIntMode CHARACTER(len=200) :: symFilename LOGICAL :: kptGamma, l_relcor, l_explicit, l_nocoOpt INTEGER :: iAtomType, startCoreStates, endCoreStates CHARACTER(len=100) :: posString(3) CHARACTER(len=200) :: coreStatesString, valenceStatesString REAL :: tempTaual(3,atoms%nat), scpos(3) REAL :: a1Temp(3),a2Temp(3),a3Temp(3) REAL :: amatTemp(3,3), bmatTemp(3,3) IF (PRESENT(dtild_opt)) dtild=dtild_opt IF (PRESENT(name_opt)) name=name_opt l_explicit = l_explicitIn.OR.l_outFile l_nocoOpt = noco%l_noco!.OR.juDFT_was_argument("-noco") symFilename = 'sym.out' kptGamma = l_gamma band = .false. nw=1 IF (TRIM(ADJUSTL(namex)).EQ.'hf'.OR.TRIM(ADJUSTL(namex)).EQ.'exx'.OR.& TRIM(ADJUSTL(namex)).EQ.'hse'.OR.TRIM(ADJUSTL(namex)).EQ.'vhse') l_hyb = .true. l_relcor=.true. IF(relcor.EQ.'relativi') THEN l_relcor=.true. ELSE l_relcor=.false. END IF DO i = 1, 3 a1Temp(i) = a1(i) a2Temp(i) = a2(i) a3Temp(i) = a3(i) END DO fileNum = -1 IF(l_outFile) THEN fileNum = getXMLOutputUnitNumber() CALL openXMLElementNoAttributes('inputData') ELSE fileNum = 5 OPEN (fileNum,file=TRIM(ADJUSTL(filename)),form='formatted',status='unknown') REWIND (fileNum) WRITE (fileNum,'(a)') '' WRITE (fileNum,'(a)') '' END IF IF(PRESENT(name_opt)) THEN WRITE (fileNum,'(a)') ' ' WRITE (fileNum,'(a6,10a8)') ' ',name WRITE (fileNum,'(a)') ' ' END IF WRITE (fileNum,'(a)') ' ' ! 110 FORMAT(' ') WRITE (fileNum,110) input%rkmax,stars%gmaxInit,xcpot%gmaxxc,input%gw_neigd ! 120 FORMAT(' ') SELECT CASE (input%imix) CASE (1) mixingScheme='straight' CASE (3) mixingScheme='Broyden1' CASE (5) mixingScheme='Broyden2' CASE (7) mixingScheme='Anderson' CASE DEFAULT mixingScheme='errorUnknownMixing' END SELECT WRITE (fileNum,120) input%itmax,input%minDistance,input%maxiter,TRIM(mixingScheme),input%alpha,input%preconditioning_param,input%spinf ! 130 FORMAT(' ') WRITE (fileNum,130) input%ctail,input%frcor,input%kcrel,input%coretail_lmax ! 140 FORMAT(' ') WRITE (fileNum,140) input%jspins,noco%l_noco,input%swsp,input%lflip ! 150 FORMAT(' ') WRITE (fileNum,150) noco%theta,noco%phi,noco%l_soc,noco%l_spav IF (l_explicit.OR.hybrid%l_hybrid) THEN 155 FORMAT(' ') WRITE (fileNum,155) hybrid%gcutm1,hybrid%tolerance1,hybrid%ewaldlambda,hybrid%lexp,hybrid%bands1 END IF IF (l_nocoOpt.OR.l_explicit) THEN 160 FORMAT(' ') WRITE (fileNum,160) noco%l_ss, noco%l_mperp, noco%l_constr, noco%mix_b 162 FORMAT(' ',f0.10,' ',f0.10,' ',f0.10,'') WRITE(fileNum,162) noco%qss(1), noco%qss(2), noco%qss(3) WRITE (fileNum,'(a)') ' ' END IF IF (oneD%odd%d1) THEN 170 FORMAT(' ') WRITE (fileNum,170) oneD%odd%d1,oneD%odd%M,oneD%odd%mb,oneD%odd%m_cyl,oneD%odd%chi,oneD%odd%rot,oneD%odd%invs,oneD%odd%zrfs END IF ! 180 FORMAT(' ') WRITE (fileNum,180) input%gw,input%secvar ! 190 FORMAT(' ') WRITE (fileNum,190) input%l_f,input%xa,input%thetad,input%epsdisp,input%epsforce IF(input%gauss.AND.input%tria) THEN STOP 'Error: bz integration modes gauss AND tria selected!' END IF bzIntMode = 'hist' IF(input%gauss) THEN bzIntMode = 'gauss' ELSE IF(input%tria) THEN bzIntMode = 'tria' END IF ! 195 FORMAT(' ') WRITE (fileNum,195) input%ldauLinMix,input%ldauMixParam,input%ldauSpinf ! 200 FORMAT(' ') WRITE (fileNum,200) input%zelec,TRIM(ADJUSTL(bzIntMode)),input%tkb IF(kpts%specificationType.EQ.3) THEN sumWeight = 0.0 DO i = 1, kpts%nkpt sumWeight = sumWeight + kpts%wtkpt(i) END DO 205 FORMAT(' ') WRITE (fileNum,205) kpts%posScale, sumWeight, kpts%nkpt DO i = 1, kpts%nkpt 206 FORMAT(' ',f12.6,' ',f12.6,' ',f12.6,'') WRITE (fileNum,206) kpts%wtkpt(i), kpts%bk(1,i), kpts%bk(2,i), kpts%bk(3,i) END DO WRITE (fileNum,'(a)')(' ') ELSE IF(kpts%specificationType.EQ.1) THEN IF (kpts%numSpecialPoints.GE.2) THEN 207 FORMAT(' ') WRITE (fileNum,207) kpts%nkpt,kptGamma 209 FORMAT(' ', f10.6,' ',f10.6,' ',f10.6,'') DO i = 1, kpts%numSpecialPoints WRITE(fileNum,209) TRIM(ADJUSTL(kpts%specialPointNames(i))),& kpts%specialPoints(1,i),kpts%specialPoints(2,i),kpts%specialPoints(3,i) END DO WRITE (fileNum,'(a)') ' ' ELSE ! 208 FORMAT(' ') WRITE (fileNum,208) kpts%nkpt,kptGamma END IF ELSE IF (kpts%specificationType.EQ.2) THEN ! 210 FORMAT(' ') WRITE (fileNum,210) div(1),div(2),div(3),kptGamma ELSE !(kpts%specificationType.EQ.4) 212 FORMAT(' ') WRITE (fileNum,212) kpts%kPointDensity(1),kpts%kPointDensity(2),kpts%kPointDensity(3),kptGamma END IF WRITE (fileNum,'(a)') ' ' ! 220 FORMAT(' ') WRITE (fileNum,220) input%ellow,input%elup WRITE (fileNum,'(a)') ' ' WRITE (fileNum,'(a)') ' ' IF(sym%symSpecType.EQ.3) THEN WRITE(fileNum,'(a)') ' ' DO i = 1, sym%nop WRITE(fileNum,'(a)') ' ' 224 FORMAT(' ',i0,' ',i0,' ',i0,' ',f0.10,'') WRITE(fileNum,224) sym%mrot(1,1,i), sym%mrot(1,2,i), sym%mrot(1,3,i), sym%tau(1,i) 225 FORMAT(' ',i0,' ',i0,' ',i0,' ',f0.10,'') WRITE(fileNum,225) sym%mrot(2,1,i), sym%mrot(2,2,i), sym%mrot(2,3,i), sym%tau(2,i) 226 FORMAT(' ',i0,' ',i0,' ',i0,' ',f0.10,'') WRITE(fileNum,226) sym%mrot(3,1,i), sym%mrot(3,2,i), sym%mrot(3,3,i), sym%tau(3,i) WRITE(fileNum,'(a)') ' ' END DO WRITE(fileNum,'(a)') ' ' ELSE IF(sym%symSpecType.EQ.1) THEN 228 FORMAT(' ') WRITE(fileNum,228) TRIM(ADJUSTL(symFilename)) ELSE !(sym%symSpecType.EQ.2) ! 230 FORMAT(' ') WRITE (fileNum,230) TRIM(ADJUSTL(sym%namgrp)),sym%invs,sym%zrfs END IF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! Note: Different options for the cell definition! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IF (cell%latnam.EQ.'c-b') THEN a1Temp(1) = sqrt(2.)* a1Temp(1) END IF IF (cell%latnam.EQ.'hex') THEN s3 = sqrt(3.) a1Temp(1) = 2*a1Temp(1)/sqrt(3.) END IF IF (cell%latnam.EQ.'hx3') THEN a1Temp(1) = 2*a1Temp(1) END IF IF (input%film) THEN ! ! ! 241 FORMAT(' ') WRITE(fileNum,241) input%scaleCell, TRIM(ADJUSTL(cell%latnam)), vacuum%dvac, dtild IF (cell%latnam.EQ.'any') THEN WRITE (fileNum,'(a)') ' ' 255 FORMAT(' ',f0.10,' ',f0.10,' ',f0.10,'') WRITE (fileNum,255) a1Temp(1),a1Temp(2),a1Temp(3) 265 FORMAT(' ',f0.10,' ',f0.10,' ',f0.10,'') WRITE (fileNum,265) a2Temp(1),a2Temp(2),a2Temp(3) 275 FORMAT(' ',f0.10,' ',f0.10,' ',f0.10,'') WRITE (fileNum,275) a3Temp(1),a3Temp(2),a3Temp(3) WRITE (fileNum,'(a)') ' ' ELSE IF ((cell%latnam.EQ.'squ').OR.(cell%latnam.EQ.'hex').OR.& & (cell%latnam.EQ.'c-b').OR.(cell%latnam.EQ.'hx3').OR.& & (cell%latnam.EQ.'c-r').OR.(cell%latnam.EQ.'p-r')) THEN 256 FORMAT(' ',f0.10,'') WRITE (fileNum,256) input%scaleA1, a1Temp(1) / input%scaleA1 END IF IF ((cell%latnam.EQ.'c-r').OR.(cell%latnam.EQ.'p-r')) THEN 266 FORMAT(' ',f0.10,'') WRITE (fileNum,266) input%scaleA2, a2Temp(2) / input%scaleA2 END IF IF (cell%latnam.EQ.'obl') THEN 257 FORMAT(' ',f0.10,' ',f0.10,'') WRITE (fileNum,257) a1Temp(1), a1Temp(2) 267 FORMAT(' ',f0.10,' ',f0.10,'') WRITE (fileNum,267) a2Temp(1), a2Temp(2) END IF END IF 268 FORMAT(' ') DO i = 1, vacuum%nvac WRITE(fileNum,268) i, enpara%evac0(i,1), enpara%evac0(i,input%jspins) END DO WRITE (fileNum,'(a)') ' ' ELSE 242 FORMAT(' ') WRITE (fileNum,242) input%scaleCell, TRIM(ADJUSTL(cell%latnam)) IF (cell%latnam.EQ.'any') THEN ! WRITE (fileNum,'(a)') ' ' ! 0.00000 5.13000 5.13000 250 FORMAT(' ',f0.10,' ',f0.10,' ',f0.10,'') WRITE (fileNum,250) a1Temp(1),a1Temp(2),a1Temp(3) ! 5.13000 0.00000 5.13000 260 FORMAT(' ',f0.10,' ',f0.10,' ',f0.10,'') WRITE (fileNum,260) a2Temp(1),a2Temp(2),a2Temp(3) ! 5.13000 5.13000 0.00000 270 FORMAT(' ',f0.10,' ',f0.10,' ',f0.10,'') WRITE (fileNum,270) a3Temp(1),a3Temp(2),a3Temp(3) WRITE (fileNum,'(a)') ' ' END IF IF ((cell%latnam.EQ.'squ').OR.(cell%latnam.EQ.'hex').OR.& & (cell%latnam.EQ.'c-b').OR.(cell%latnam.EQ.'hx3').OR.& & (cell%latnam.EQ.'c-r').OR.(cell%latnam.EQ.'p-r')) THEN 252 FORMAT(' ',f0.10,'') WRITE (fileNum,252) input%scaleA1, a1Temp(1) / input%scaleA1 IF ((cell%latnam.EQ.'c-r').OR.(cell%latnam.EQ.'p-r')) THEN 262 FORMAT(' ',f0.10,'') WRITE (fileNum,262) input%scaleA2, a2Temp(2) / input%scaleA2 END IF 272 FORMAT(' ',f0.10,'') WRITE (fileNum,272) input%scaleC, a3Temp(3) / input%scaleC END IF IF (cell%latnam.EQ.'obl') THEN 254 FORMAT(' ',f0.10,' ',f0.10,'') WRITE (fileNum,254) a1Temp(1), a1Temp(2) 264 FORMAT(' ',f0.10,' ',f0.10,'') WRITE (fileNum,264) a2Temp(1), a2Temp(2) 274 FORMAT(' ',f0.10,'') WRITE (fileNum,274) input%scaleC, a3Temp(3) / input%scaleC END IF WRITE (fileNum,'(a)') ' ' END IF WRITE (fileNum,'(a)') ' ' ! 280 FORMAT(' ') WRITE (fileNum,280) TRIM(namex), l_relcor uIndices = -1 DO i_u = 1, atoms%n_u IF(uIndices(1,atoms%lda_u(i_u)%atomType).EQ.-1) uIndices(1,atoms%lda_u(i_u)%atomType) = i_u uIndices(2,atoms%lda_u(i_u)%atomType) = i_u END DO WRITE (fileNum,'(a)') ' ' DO iSpecies=1, numSpecies iAtomType = speciesRepAtomType(iSpecies) IF(iAtomType.EQ.-1) THEN EXIT END IF ! 300 FORMAT(' ') speciesName = TRIM(ADJUSTL(atoms%speciesName(iSpecies))) WRITE (fileNum,300) TRIM(ADJUSTL(speciesName)),TRIM(ADJUSTL(noel(iAtomType))),atoms%nz(iAtomType),atoms%ncst(iAtomType),atoms%bmu(iAtomType),atoms%nflip(iAtomType) ! 310 FORMAT(' ') WRITE (fileNum,310) atoms%rmt(iAtomType),atoms%jri(iAtomType),atoms%dx(iAtomType) ! 320 FORMAT(' ') WRITE (fileNum,320) atoms%lmax(iAtomType),atoms%lnonsph(iAtomType) IF (ALL(enpara%qn_el(0:3,iAtomType,1).ne.0)) THEN ! 321 FORMAT(' ') WRITE (fileNum,321) enpara%qn_el(0:3,iAtomType,1) END IF IF(l_explicit.OR.hybrid%l_hybrid) THEN 315 FORMAT(' ') line = '' WRITE(line,'(i0,1x,i0,1x,i0,1x,i0)') hybrid%select1(1:4,iAtomType) WRITE (fileNum,315) hybrid%lcutm1(iAtomType), hybrid%lcutwf(iAtomType), TRIM(ADJUSTL(line)) END IF IF(ANY(xmlElectronStates(:,iAtomType).NE.noState_const)) THEN endCoreStates = 1 startCoreStates = 1 coreStatesString = '' valenceStatesString = '' DO i = 1, 29 IF (xmlElectronStates(i,iAtomType).EQ.coreState_const) endCoreStates = i END DO IF ((endCoreStates.GE.24).AND.& & (ALL(xmlPrintCoreStates(1:24,iAtomType).EQV..FALSE.)).AND.& & (ALL(xmlElectronStates(1:24,iAtomType).EQ.coreState_const)) ) THEN coreStatesString = nobleGasConfigList_const(6) startCoreStates = 25 ELSE IF ((endCoreStates.GE.17).AND.& & (ALL(xmlPrintCoreStates(1:17,iAtomType).EQV..FALSE.)).AND.& & (ALL(xmlElectronStates(1:17,iAtomType).EQ.coreState_const))) THEN coreStatesString = nobleGasConfigList_const(5) startCoreStates = 18 ELSE IF ((endCoreStates.GE.12).AND.& & (ALL(xmlPrintCoreStates(1:12,iAtomType).EQV..FALSE.)).AND.& & (ALL(xmlElectronStates(1:12,iAtomType).EQ.coreState_const))) THEN coreStatesString = nobleGasConfigList_const(4) startCoreStates = 13 ELSE IF ((endCoreStates.GE.7).AND.& & (ALL(xmlPrintCoreStates(1:7,iAtomType).EQV..FALSE.)).AND.& & (ALL(xmlElectronStates(1:7,iAtomType).EQ.coreState_const))) THEN coreStatesString = nobleGasConfigList_const(3) startCoreStates = 8 ELSE IF ((endCoreStates.GE.4).AND.& & (ALL(xmlPrintCoreStates(1:4,iAtomType).EQV..FALSE.)).AND.& & (ALL(xmlElectronStates(1:4,iAtomType).EQ.coreState_const))) THEN coreStatesString = nobleGasConfigList_const(2) startCoreStates = 5 ELSE IF ((endCoreStates.GE.1).AND.& & (ALL(xmlPrintCoreStates(1:1,iAtomType).EQV..FALSE.)).AND.& & (ALL(xmlElectronStates(1:1,iAtomType).EQ.coreState_const))) THEN coreStatesString = nobleGasConfigList_const(1) startCoreStates = 2 END IF DO i = startCoreStates, endCoreStates IF(xmlElectronStates(i,iAtomType).EQ.coreState_const) THEN coreStatesString = TRIM(ADJUSTL(coreStatesString)) // ' ' // coreStateList_const(i) END IF END DO DO i = 1, 29 IF(xmlElectronStates(i,iAtomType).EQ.valenceState_const) THEN valenceStatesString = TRIM(ADJUSTL(valenceStatesString)) // ' ' // coreStateList_const(i) END IF END DO WRITE (fileNum,'(a)') ' ' ! [He] (2s1/2) (2p1/2) (2p3/2) 322 FORMAT(' ',a,'') WRITE(fileNum,322) TRIM(ADJUSTL(coreStatesString)) 323 FORMAT(' ',a,'') WRITE(fileNum,323) TRIM(ADJUSTL(valenceStatesString)) DO i = startCoreStates, 29 IF ((xmlElectronStates(i,iAtomType).NE.noState_const).AND.(xmlPrintCoreStates(i,iAtomType))) THEN ! 325 FORMAT(' ') WRITE(fileNum,325) coreStateList_const(i), xmlCoreOccs(1,i,iAtomType), xmlCoreOccs(2,i,iAtomType) END IF END DO WRITE (fileNum,'(a)') ' ' END IF IF (uIndices(1,iAtomType).NE.-1) THEN ! DO i_u = uIndices(1,iAtomType), uIndices(2,iAtomType) 326 FORMAT(' ') WRITE (fileNum,326) atoms%lda_u(i_u)%l, atoms%lda_u(i_u)%u, atoms%lda_u(i_u)%j, atoms%lda_u(i_u)%l_amf END DO END IF DO ilo = 1, atoms%nlo(iAtomType) ! l = atoms%llo(ilo,iAtomType) n = enpara%qn_ello(ilo,iAtomType,1) loType = 'SCLO' IF(n.LT.0) THEN loType = 'HELO' END IF n = ABS(n) 324 FORMAT(' ') WRITE (fileNum,324) TRIM(ADJUSTL(loType)), l, n, atoms%ulo_der(ilo,iAtomType) END DO WRITE (fileNum,'(a)') ' ' END DO WRITE (fileNum,'(a)') ' ' WRITE (fileNum,'(a)') ' ' na = 0 DO iAtomType=1, atoms%ntype iSpecies = atomTypeSpecies(iAtomType) ! 330 FORMAT(' ') speciesName = TRIM(ADJUSTL(atoms%speciesName(iSpecies))) WRITE (fileNum,330) TRIM(ADJUSTL(speciesName)) DO ieq=1,atoms%neq(iAtomType) na = na + 1 tempTaual(1,na) = atoms%taual(1,na) tempTaual(2,na) = atoms%taual(2,na) tempTaual(3,na) = atoms%taual(3,na) scpos = 1.0 DO i = 2,40 rest = ABS(i*tempTaual(1,na) - NINT(i*tempTaual(1,na))) IF ((scpos(1).EQ.1.0).AND.(rest.LT.(i*0.000001))) scpos(1) = real(i) rest = ABS(i*tempTaual(2,na) - NINT(i*tempTaual(2,na))) IF ((scpos(2).EQ.1.0).AND.(rest.LT.(i*0.000001))) scpos(2) = real(i) IF (.not.input%film) THEN rest = ABS(i*tempTaual(3,na) - NINT(i*tempTaual(3,na)) ) IF ((scpos(3).EQ.1.0).AND.(rest.LT.(i*0.000001))) scpos(3) = real(i) END IF END DO DO i = 1,2 tempTaual(i,na) = tempTaual(i,na)*scpos(i) END DO IF (.not.input%film) tempTaual(3,na) = tempTaual(3,na)*scpos(3) IF (input%film) THEN tempTaual(3,na) = dtild*tempTaual(3,na)/input%scaleCell END IF !+odim in 1D case all the coordinates are given in cartesian YM IF (oneD%odd%d1) THEN tempTaual(1,na) = tempTaual(1,na)*a1(1) tempTaual(2,na) = tempTaual(2,na)*a2(2) END IF !-odim IF (oneD%odd%d1) THEN STOP '1D position output not implemented!' ELSE IF (input%film) THEN ! x/myConstant y/myConstant 1/myConstant 340 FORMAT(' ',a,' ',a,' ',a,'') posString(:) = '' DO i = 1, 2 IF((scpos(i).NE.1.0).AND.(tempTaual(i,na).NE.0.0)) THEN WRITE(posString(i),'(f0.3,a1,f0.3)') tempTaual(i,na), '/', scpos(i) ELSE WRITE(posString(i),'(f0.10)') tempTaual(i,na) END IF END DO WRITE(posString(3),'(f0.10)') tempTaual(3,na) WRITE (fileNum,340) TRIM(ADJUSTL(atoms%label(na))), & TRIM(ADJUSTL(posString(1))),TRIM(ADJUSTL(posString(2))),TRIM(ADJUSTL(posString(3))) ELSE ! x/myConstant y/myConstant z/myConstant 350 FORMAT(' ',a,' ',a,' ',a,'') posString(:) = '' DO i = 1, 3 IF((scpos(i).NE.1.0).AND.(tempTaual(i,na).NE.0.0)) THEN WRITE(posString(i),'(f0.3,a1,f0.3)') tempTaual(i,na), '/', scpos(i) ELSE WRITE(posString(i),'(f0.10)') tempTaual(i,na) END IF END DO WRITE (fileNum,350) TRIM(ADJUSTL(atoms%label(na))), & TRIM(ADJUSTL(posString(1))),TRIM(ADJUSTL(posString(2))),TRIM(ADJUSTL(posString(3))) END IF END DO ! 360 FORMAT(' ') WRITE (fileNum,360) atoms%l_geo(iAtomType),atoms%relax(1,iAtomType),atoms%relax(2,iAtomType),atoms%relax(3,iAtomType) IF(l_nocoOpt.OR.l_explicit) THEN 362 FORMAT(' ') WRITE(fileNum,362) noco%l_relax(iAtomType), noco%alphInit(iAtomType),& noco%beta(iAtomType),noco%b_con(1,iAtomType),noco%b_con(2,iAtomType) END IF WRITE (fileNum,'(a)') ' ' END DO WRITE (fileNum,'(a)') ' ' 368 FORMAT(' ') WRITE (fileNum,368) banddos%dos,band,banddos%vacdos,sliceplot%slice,banddos%l_mcd ! 370 FORMAT(' ') WRITE (fileNum,370) input%vchk,input%cdinf ! 380 FORMAT(' ') WRITE (fileNum,380) banddos%ndir,banddos%e2_dos,banddos%e1_dos,banddos%sig_dos ! 390 FORMAT(' ') WRITE (fileNum,390) vacuum%layers,input%integ,vacuum%starcoeff,vacuum%nstars,vacuum%locx(1),vacuum%locy(1),vacuum%locx(2),vacuum%locy(2),vacuum%nstm,vacuum%tworkf ! 400 FORMAT(' ') WRITE (fileNum,400) sliceplot%iplot,input%score,sliceplot%plpot ! 410 FORMAT(' ') WRITE (fileNum,410) sliceplot%kk,sliceplot%e1s,sliceplot%e2s,sliceplot%nnne,input%pallst ! 420 FORMAT(' ') WRITE (fileNum,420) input%eonly,input%l_bmt ! 430 FORMAT(' ') WRITE (fileNum,430) banddos%e_mcd_lo,banddos%e_mcd_up WRITE (fileNum,'(a)') ' ' IF(l_outFile) THEN CALL closeXMLElement('inputData') ELSE WRITE (fileNum,'(a)') '' CLOSE (fileNum) END IF END SUBROUTINE w_inpXML END MODULE m_winpXML