!-------------------------------------------------------------------------------- ! 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,banddos,& & cell,sym,xcpot,noco,jij,oneD,hybrid,kpts,div,l_gamma,& & noel,namex,relcor,a1,a2,a3,scale,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_Jij),INTENT(IN) :: Jij TYPE(t_cell),INTENT(IN) :: cell TYPE(t_banddos),INTENT(IN) :: banddos TYPE(t_sliceplot),INTENT(IN):: sliceplot TYPE(t_xcpot),INTENT(IN) :: xcpot TYPE(t_noco),INTENT(IN) :: noco TYPE(t_enpara),INTENT(IN) :: enpara 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),scale 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 CHARACTER(len=3) :: sso_optString ! added for HF and hybrid functionals REAL :: aMix,omega INTEGER :: idum CHARACTER (len=1) :: check CHARACTER(len=20) :: tempNumberString, 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) CHARACTER(len=7) :: coreStateList(29) !'(1s1/2)' CHARACTER(len=4) :: nobleGasConfigList(6) !'[He]' DATA coreStateList / '(1s1/2)','(2s1/2)','(2p1/2)','(2p3/2)','(3s1/2)',& & '(3p1/2)','(3p3/2)','(3d3/2)','(3d5/2)','(4s1/2)',& & '(4p1/2)','(4p3/2)','(5s1/2)','(4d3/2)','(4d5/2)',& & '(5p1/2)','(5p3/2)','(6s1/2)','(4f5/2)','(4f7/2)',& & '(5d3/2)','(5d5/2)','(6p1/2)','(6p3/2)','(7s1/2)',& & '(5f5/2)','(5f7/2)','(6d3/2)','(6d5/2)' / DATA nobleGasConfigList / '[He]','[Ne]','[Ar]','[Kr]','[Xe]','[Rn]' / 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%gmax,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%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,jij%l_J,input%swsp,input%lflip ! 150 FORMAT(' ') WRITE (fileNum,150) noco%theta,noco%phi,noco%l_soc,noco%soc_opt(atoms%ntype+2),noco%soc_opt(atoms%ntype+1) IF (l_nocoOpt.OR.l_explicit) THEN 160 FORMAT(' ') sso_optString='FFF' IF(input%sso_opt(1)) sso_optString(1:1) = 'T' IF(input%sso_opt(2)) sso_optString(2:2) = 'T' WRITE (fileNum,160) noco%l_ss, noco%l_mperp, noco%l_constr, Jij%l_disp, sso_optString, noco%mix_b, Jij%thetaJ, Jij%nsh 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,obsolete%pot8,input%isec1,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 ! 200 FORMAT(' ') WRITE (fileNum,200) input%zelec,TRIM(ADJUSTL(bzIntMode)),input%tkb IF(l_explicit) 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( (div(1) == 0).OR.(div(2) == 0) ) THEN ! 208 FORMAT(' ') WRITE (fileNum,208) kpts%nkpt,kptGamma ELSE ! 210 FORMAT(' ') WRITE (fileNum,210) div(1),div(2),div(3),kptGamma END IF WRITE (fileNum,'(a)') ' ' ! 220 FORMAT(' ') WRITE (fileNum,220) input%ellow,input%elup WRITE (fileNum,'(a)') ' ' WRITE (fileNum,'(a)') ' ' IF(l_explicit) 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(TRIM(ADJUSTL(sym%namgrp)).EQ.'any') THEN 228 FORMAT(' ') WRITE(fileNum,228) TRIM(ADJUSTL(symFilename)) ELSE ! 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) scale, 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) a1Temp(1) END IF IF ((cell%latnam.EQ.'c-r').OR.(cell%latnam.EQ.'p-r')) THEN 266 FORMAT(' ',f0.10,'') WRITE (fileNum,266) a2Temp(2) 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) scale, 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) a1Temp(1) IF ((cell%latnam.EQ.'c-r').OR.(cell%latnam.EQ.'p-r')) THEN 262 FORMAT(' ',f0.10,'') WRITE (fileNum,262) a2Temp(2) END IF 272 FORMAT(' ',f0.10,'') WRITE (fileNum,272) a3Temp(3) 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) a3Temp(3) END IF WRITE (fileNum,'(a)') ' ' END IF WRITE (fileNum,'(a)') ' ' ! 280 FORMAT(' ') WRITE (fileNum,280) TRIM(namex), l_relcor ! ! 290 FORMAT(' ') ! WRITE (fileNum,290) xcpot%igrd,obsolete%lwb,obsolete%ndvgrd,0,obsolete%chng ! WRITE (fileNum,'(a)') ' ' 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(' ') tempNumberString = '' WRITE(tempNumberString,'(i0)') iSpecies speciesName = TRIM(ADJUSTL(noel(iAtomType))) // '-' // TRIM(ADJUSTL(tempNumberString)) 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%el0(0:3,iAtomType,1)-INT(enpara%el0(0:3,iAtomType,1))).LE.0.00000001)) THEN ! 321 FORMAT(' ') WRITE (fileNum,321) INT(enpara%el0(0,iAtomType,1)),INT(enpara%el0(1,iAtomType,1)),& INT(enpara%el0(2,iAtomType,1)),INT(enpara%el0(3,iAtomType,1)) 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(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(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(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(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(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(1) startCoreStates = 2 END IF DO i = startCoreStates, endCoreStates IF(xmlElectronStates(i,iAtomType).EQ.coreState_const) THEN coreStatesString = TRIM(ADJUSTL(coreStatesString)) // ' ' // coreStateList(i) END IF END DO DO i = 1, 29 IF(xmlElectronStates(i,iAtomType).EQ.valenceState_const) THEN valenceStatesString = TRIM(ADJUSTL(valenceStatesString)) // ' ' // coreStateList(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(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 = INT(enpara%ello0(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(' ') tempNumberString = '' WRITE(tempNumberString,'(i0)') iSpecies speciesName = TRIM(ADJUSTL(noel(iAtomType))) // '-' // TRIM(ADJUSTL(tempNumberString)) 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)/scale 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(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(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), Jij%l_magn(iAtomType), Jij%M(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 ! 370 FORMAT(' ') WRITE (fileNum,370) input%vchk,input%cdinf,obsolete%disp ! 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 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