Commit 1f653f97 authored by Gregor Michalicek's avatar Gregor Michalicek

Some preparations for noco with XML input

Note: This is not yet functional.
      Also the test Fe_bct_LOXML is not yet complete.
parent 7e8462cb
......@@ -11,6 +11,7 @@ io/eig66_hdf.F90
io/eig66_io.F90
io/eig66_mem.F90
io/eig66_mpi.F90
io/nocoInputCheck.F90
io/inpnoco.F90
io/loddop.f90
io/rw_inp.f90
......
......@@ -5,7 +5,7 @@
!--------------------------------------------------------------------------------
MODULE m_inpnoco
use m_juDFT
!**********************************************************************
! This subroutine reads the Euler angles of the magnetic field
! directions and other noncollinear parameters from the file nocoinp
......@@ -21,6 +21,7 @@
USE m_constants, ONLY : tpi_const
USE m_rwnoco
USE m_types
USE m_nocoInputCheck
IMPLICIT NONE
TYPE(t_atoms),INTENT(INOUT) ::atoms
TYPE(t_input),INTENT(INOUT) ::input
......@@ -31,84 +32,6 @@
! ..
! .. Local Scalars ..
INTEGER itype,iatom
LOGICAL l_relax_any
!---> make sure that the complex program has been compiled
#ifdef CPP_INVERSION
WRITE (6,*) 'Non-collinear calculations can only be done with'
WRITE (6,*) 'the complex program. Please compile without the'
WRITE (6,*) 'option "CPP_INVERSION".'
CALL juDFT_error&
& ("for l_noco = T: recompile without CPP_INVERSION!"&
& ,calledby ="inpnoco")
#endif
!---> make sure Wu-diagonalization is switched off
IF (input%isec1 .LE. input%itmax) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the Wu-diagonalization!!'
WRITE (6,*) 'itmax = ',input%itmax,'isec1 = ',input%isec1
CALL juDFT_error("Wu-diagonalization cannot be used!!!",&
& calledby="inpnoco")
ENDIF
!---> make sure second variation is switched off
IF (input%secvar) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the second variation!!'
CALL juDFT_error("Second variation cannot be used!!!" ,calledby&
& ="inpnoco")
ENDIF
!---> make sure histogram method is used
IF (input%gauss) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the Gaussian smearing for '
WRITE (6,*) 'the Brillouin zone integration!!'
WRITE (6,*) 'Please use the histogram method.'
CALL juDFT_error&
& ("Only histogram Brillouin zone integration can be used!!!"&
& ,calledby ="inpnoco")
ENDIF
!---> make sure force is switched off
IF (input%l_f) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'does not support force calculations.'
CALL juDFT_error("force calculations not supported!!!",calledby&
& ="inpnoco")
ENDIF
!---> make sure nstm equals zero
IF (vacuum%nstm.NE.0) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'does not support STM calculations(nstm .NE. 0).'
CALL juDFT_error("nstm /= 0 not supported!",calledby ="inpnoco"&
& )
ENDIF
!---> make sure starcoeff is switched off
! IF (starcoeff) THEN
! WRITE (6,*) 'This non-collinear version of the flapw program'
! WRITE (6,*) 'does not support starcoefficients output.'
! CALL juDFT_error("starcoefficients output (for STM) cannot be !!!"
! generated
! ENDIF
!---> make sure coretails are switched off
IF (input%ctail) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the coretail option!! '
CALL juDFT_error("Coretail option cannot be used!!!",calledby&
& ="inpnoco")
ENDIF
!---> make sure score is false
IF (input%score) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the score option!! '
CALL juDFT_error("score must be false!!!",calledby ="inpnoco")
ENDIF
OPEN (24,file='nocoinp',form='formatted',status='old')
......@@ -119,38 +42,9 @@
WRITE (6,*)'moment vector phi and theta respectively.'
WRITE (6,*)
CALL rw_noco_read(&
& atoms,jij,noco,input)
CALL rw_noco_read(atoms,jij,noco,input)
!---> make sure that moments are not relaxed and constrained
l_relax_any = .false.
DO itype = 1,atoms%ntype
l_relax_any = l_relax_any.OR.noco%l_relax(itype)
ENDDO
IF (l_relax_any.AND.noco%l_constr) THEN
WRITE (6,*)'The relaxation of the moment is switched on for at'
WRITE (6,*)'least one atom. At the same time the constrained'
WRITE (6,*)'moment option has been switched on!!!'
! CALL juDFT_error("relaxation of moments and constraint are sw
ENDIF
!---> make sure that perp. component of mag. is calculated if needed
IF ( (l_relax_any .or. noco%l_constr) .and. (.not. noco%l_mperp) ) THEN
WRITE (6,*)'The relaxation of the moment is switched on for at'
WRITE (6,*)'least one atom or the constrained moment option is'
WRITE (6,*)'switched on. In either case, you need to set'
WRITE (6,*)'l_mperp=T !!'
CALL juDFT_error&
& ("Stop: Set l_mperp = T to relax or constrain the moments!!"&
&,calledby ="inpnoco")
ENDIF
!---> make sure l_constr is switched off in the case of spin spirals
IF (noco%l_constr .and. noco%l_ss) THEN
WRITE (6,*)'The constraint moment option is not implemeted'
WRITE (6,*)'for spin spirals.'
CALL juDFT_error&
& ("Stop: constraint not implemented for spin spirals!!"&
& ,calledby ="inpnoco")
ENDIF
CALL nocoInputCheck(atoms,input,vacuum,jij,noco)
IF (.not.jij%l_j.and.noco%l_ss) THEN
!
......
!--------------------------------------------------------------------------------
! 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_nocoInputCheck
CONTAINS
SUBROUTINE nocoInputCheck(atoms,input,vacuum,jij,noco)
USE m_juDFT
USE m_types
IMPLICIT NONE
TYPE(t_atoms), INTENT(IN) :: atoms
TYPE(t_input), INTENT(IN) :: input
TYPE(t_vacuum), INTENT(IN) :: vacuum
TYPE(t_Jij), INTENT(IN) :: Jij
TYPE(t_noco), INTENT(IN) :: noco
INTEGER itype
LOGICAL l_relax_any
!---> make sure that the complex program has been compiled
#ifdef CPP_INVERSION
WRITE (6,*) 'Non-collinear calculations can only be done with'
WRITE (6,*) 'the complex program. Please compile without the'
WRITE (6,*) 'option "CPP_INVERSION".'
CALL juDFT_error("for l_noco = T: recompile without CPP_INVERSION!",calledby ="nocoInputCheck")
#endif
!---> make sure Wu-diagonalization is switched off
IF (input%isec1 .LE. input%itmax) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the Wu-diagonalization!!'
WRITE (6,*) 'itmax = ',input%itmax,'isec1 = ',input%isec1
CALL juDFT_error("Wu-diagonalization cannot be used!!!",calledby="nocoInputCheck")
END IF
!---> make sure second variation is switched off
IF (input%secvar) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the second variation!!'
CALL juDFT_error("Second variation cannot be used!!!" ,calledby="nocoInputCheck")
END IF
!---> make sure histogram method is used
IF (input%gauss) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the Gaussian smearing for '
WRITE (6,*) 'the Brillouin zone integration!!'
WRITE (6,*) 'Please use the histogram method.'
CALL juDFT_error("Only histogram Brillouin zone integration can be used!!!",calledby ="nocoInputCheck")
END IF
!---> make sure force is switched off
IF (input%l_f) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'does not support force calculations.'
CALL juDFT_error("force calculations not supported!!!",calledby="nocoInputCheck")
END IF
!---> make sure nstm equals zero
IF (vacuum%nstm.NE.0) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'does not support STM calculations(nstm .NE. 0).'
CALL juDFT_error("nstm /= 0 not supported!",calledby ="nocoInputCheck")
END IF
!---> make sure starcoeff is switched off
! IF (starcoeff) THEN
! WRITE (6,*) 'This non-collinear version of the flapw program'
! WRITE (6,*) 'does not support starcoefficients output.'
! CALL juDFT_error("starcoefficients output (for STM) cannot be !!!"
! generated
! ENDIF
!---> make sure coretails are switched off
IF (input%ctail) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the coretail option!! '
CALL juDFT_error("Coretail option cannot be used!!!",calledby="nocoInputCheck")
END IF
!---> make sure score is false
IF (input%score) THEN
WRITE (6,*) 'This non-collinear version of the flapw program'
WRITE (6,*) 'cannot be used with the score option!! '
CALL juDFT_error("score must be false!!!",calledby ="nocoInputCheck")
END IF
!---> make sure that moments are not relaxed and constrained
l_relax_any = .FALSE.
DO itype = 1,atoms%ntype
l_relax_any = l_relax_any.OR.noco%l_relax(itype)
END DO
IF (l_relax_any.AND.noco%l_constr) THEN
WRITE (6,*)'The relaxation of the moment is switched on for at'
WRITE (6,*)'least one atom. At the same time the constrained'
WRITE (6,*)'moment option has been switched on!!!'
! CALL juDFT_error("relaxation of moments and constraint are sw
ENDIF
!---> make sure that perp. component of mag. is calculated if needed
IF ( (l_relax_any .or. noco%l_constr) .and. (.not. noco%l_mperp) ) THEN
WRITE (6,*)'The relaxation of the moment is switched on for at'
WRITE (6,*)'least one atom or the constrained moment option is'
WRITE (6,*)'switched on. In either case, you need to set'
WRITE (6,*)'l_mperp=T !!'
CALL juDFT_error("Stop: Set l_mperp = T to relax or constrain the moments!!",calledby ="nocoInputCheck")
ENDIF
!---> make sure l_constr is switched off in the case of spin spirals
IF (noco%l_constr .and. noco%l_ss) THEN
WRITE (6,*)'The constraint moment option is not implemeted'
WRITE (6,*)'for spin spirals.'
CALL juDFT_error("Stop: constraint not implemented for spin spirals!!",calledby ="nocoInputCheck")
ENDIF
END SUBROUTINE nocoInputCheck
END MODULE m_nocoInputCheck
......@@ -56,6 +56,7 @@ SUBROUTINE r_inpXML(&
USE m_writegw
USE m_apwsdim
USE m_sort
USE m_nocoInputCheck
USE m_enpara, ONLY : r_enpara
IMPLICIT NONE
......@@ -1586,6 +1587,19 @@ SUBROUTINE r_inpXML(&
atoms%taual(3,na) = evaluatefirst(valueString) / cell%amat(3,3)
atoms%pos(:,na) = matmul(cell%amat,atoms%taual(:,na))
END DO
!Read in atom group specific noco parameters
xPathB = TRIM(ADJUSTL(xPathA))//'/nocoParams'
numberNodes = xmlGetNumberOfNodes(TRIM(ADJUSTL(xPathB)))
IF (numberNodes.GE.1) THEN
noco%l_relax(iType) = evaluateFirstBoolOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathB))//'/@l_relax'))
Jij%l_magn(iType) = evaluateFirstBoolOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathB))//'/@l_magn'))
Jij%M(iType) = evaluateFirstOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathB))//'/@M'))
noco%alph(iType) = evaluateFirstOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathB))//'/@alpha'))
noco%beta(iType) = evaluateFirstOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathB))//'/@beta'))
noco%b_con(1,iType) = evaluateFirstOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathB))//'/@b_cons_x'))
noco%b_con(2,iType) = evaluateFirstOnly(xmlGetAttributeValue(TRIM(ADJUSTL(xPathB))//'/@b_cons_y'))
END IF
END DO
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
......@@ -1863,6 +1877,28 @@ SUBROUTINE r_inpXML(&
END DO
END IF
! Check noco stuff and calculate missing noco parameters
IF (noco%l_noco) THEN
CALL nocoInputCheck(atoms,input,vacuum,jij,noco)
IF (.not.jij%l_j.and.noco%l_ss) THEN
!---> the angle beta is relative to the spiral in a spin-spiral
!---> calculation, i.e. if beta = 0 for all atoms in the unit cell
!---> that means that the moments are "in line" with the spin-spiral
!---> (beta = qss * taual). note: this means that only atoms within
!---> a plane perpendicular to qss can be equivalent!
na = 1
DO iType = 1,atoms%ntype
noco%phi = tpi_const*dot_product(noco%qss,atoms%taual(:,na))
noco%alph(iType) = noco%alph(iType) + noco%phi
na = na + atoms%neq(iType)
END DO
END IF
END IF
! Calculate missing kpts parameters
WRITE(*,*) 'Post processing of input: k-points'
......
strho=F,film=F,dos=F,isec1= 99,ndir= 0,secvar=F
Fe fcc 2-atom uc
squ any ,invs=T,zrfs=T,invs2=T,jspins=2,l_noco=t,l_J=F
4.82246838
6.82000000 6.82000000 1.00000000
pbe non-relativi
igrd=1,lwb=F,ndvgrd=6,idsprs=0,chng=-0.100D-11
2
**********************************
Fe 26 5 8 565 2.350000 0.021000
1,force =T,nlo= 1,llo= 1
0.000000 0.000000 0.000000 4.000000
**********************************
Fe 26 5 8 565 2.350000 0.021000
1,force =T,nlo= 1,llo= 1
2.000000 2.000000 2.000000 4.000000
**********************************
10.200000 8.500000
vchk=F,cdinf=F,pot8=F,gw=0,gw_neigd= 0
lpr=0,form66=F,l_f=F,eonly=F,eig66=F,soc66=T
6 6
1 0
Window # 1
-0.80000 1.00000 28.00000
3.40000 =kmax
gauss=F 0.00100tria=F
0.000000 0.000000,l_soc=F,spav=F,off=F
frcor=F,slice=F,ctail=f,disp=F,kcrel=0,u2f=F,f2u=F,bmt=F
itmax= 4,maxiter= 99,imix= 7,alpha= 0.05,spinf= 2.00
swsp=F 2.20 2.20
lflip=F 1 1
vacdos=F,layers= 0,integ=F,star=F,nstars= 0 0.00 0.00 0.00 0.00,nstm=0,tworkf= 0.000000
iplot=F,score=F,plpot=F,band=F
0 0.000000 0.000000,nnne= 0,pallst=F
xa= 2.00000,thetad= 330.00000,epsdisp= 0.00001,epsforce= 0.00001
relax 111 111
emin_dos= -0.50000,emax_dos= 0.50000,sig_dos= 0.01500
nkpt= 5
atom-type 1,l_relax=F
alpha = 0.0000000000,b_cons_x = 0.0000000000
beta = 0.0000000000,b_cons_y = 0.0000000000
atom-type 2,l_relax=F
alpha = 0.0000000000,b_cons_x = 0.0000000000
beta = 3.1415926536,b_cons_y = 0.0000000000
-- logical parameters --
l_ss=F,l_mperp=F,l_constr=F
mix_b= 0.500
qss=( 0.0000000000, 0.0000000000, 0.0000000000)
16 16 T ! nop,nop2,symor
! 1
1 0 0 0.00000
0 1 0 0.00000
0 0 1 0.00000
! 2
-1 0 0 0.00000
0 1 0 0.00000
0 0 1 0.00000
! 3
1 0 0 0.00000
0 -1 0 0.00000
0 0 1 0.00000
! 4
-1 0 0 0.00000
0 -1 0 0.00000
0 0 1 0.00000
! 5
0 -1 0 0.00000
-1 0 0 0.00000
0 0 1 0.00000
! 6
0 -1 0 0.00000
1 0 0 0.00000
0 0 1 0.00000
! 7
0 1 0 0.00000
-1 0 0 0.00000
0 0 1 0.00000
! 8
0 1 0 0.00000
1 0 0 0.00000
0 0 1 0.00000
! 9
1 0 0 0.00000
0 1 0 0.00000
0 0 -1 0.00000
! 10
-1 0 0 0.00000
0 1 0 0.00000
0 0 -1 0.00000
! 11
1 0 0 0.00000
0 -1 0 0.00000
0 0 -1 0.00000
! 12
-1 0 0 0.00000
0 -1 0 0.00000
0 0 -1 0.00000
! 13
0 -1 0 0.00000
-1 0 0 0.00000
0 0 -1 0.00000
! 14
0 -1 0 0.00000
1 0 0 0.00000
0 0 -1 0.00000
! 15
0 1 0 0.00000
-1 0 0 0.00000
0 0 -1 0.00000
! 16
0 1 0 0.00000
1 0 0 0.00000
0 0 -1 0.00000
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="0.27">
<xsd:element name="fleurInput" type="FleurInputType"/>
<xsd:complexType name="FleurInputType">
<xsd:all>
<xsd:element maxOccurs="1" minOccurs="0" name="comment" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="constants" type="ConstDefGroupType"/>
<xsd:element name="calculationSetup" type="CalculationSetupType"/>
<xsd:element name="cell" type="CellType"/>
<xsd:element name="xcFunctional" type="XCFunctionalType"/>
<xsd:element name="atomSpecies" type="AtomSpeciesType"/>
<xsd:element name="atomGroups" type="AtomGroupsType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="output" type="OutputType"/>
</xsd:all>
<xsd:attribute name="fleurInputVersion" type="FleurVersionType" use="required"/>
</xsd:complexType>
<xsd:simpleType name="FleurVersionType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="0.27"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="ConstDefGroupType">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="constant" type="ConstantDefinitionType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ConstantDefinitionType">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="CalculationSetupType">
<xsd:all>
<xsd:element name="cutoffs" type="CutoffsType"/>
<xsd:element name="scfLoop" type="SCFLoopType"/>
<xsd:element name="coreElectrons" type="CoreElectronsType"/>
<xsd:element name="magnetism" type="MagnetismType"/>
<xsd:element name="bzIntegration" type="BZIntegrationType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="soc" type="SOCType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="nocoParams" type="NocoParamsType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="oneDParams" type="OneDParamType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="expertModes" type="ExpertModeType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="geometryOptimization" type="GeometryOptimizerType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="spinSpiralQPointMesh" type="SpinSpiralQPointMeshType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="eField" type="EFieldType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="energyParameterLimits" type="EnergyParameterLimitsType"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="EnergyParameterLimitsType">
<xsd:attribute name="ellow" type="xsd:double"/>
<xsd:attribute name="elup" type="xsd:double"/>
</xsd:complexType>
<xsd:complexType name="EFieldType">
<xsd:attribute default="10.0" name="zsigma" type="xsd:double" use="optional"/>
<xsd:attribute default="0.0" name="sig_b_1" type="xsd:double" use="optional"/>
<xsd:attribute default="0.0" name="sig_b_2" type="xsd:double" use="optional"/>
<xsd:attribute default="F" name="plot_charge" type="FleurBool" use="optional"/>
<xsd:attribute default="F" name="plot_rho" type="FleurBool" use="optional"/>
<xsd:attribute default="T" name="autocomp" type="FleurBool" use="optional"/>
<xsd:attribute default="F" name="dirichlet" type="FleurBool" use="optional"/>
<xsd:attribute default="F" name="eV" type="FleurBool" use="optional"/>
</xsd:complexType>
<xsd:complexType name="NocoParamsType">
<xsd:sequence>
<xsd:element name="qss" type="Double3DVecType"/>
<xsd:element maxOccurs="1" minOccurs="0" name="qsc" type="Double3DVecType"/>
</xsd:sequence>
<xsd:attribute name="l_ss" type="FleurBool"/>
<xsd:attribute name="l_mperp" type="FleurBool"/>
<xsd:attribute name="l_constr" type="FleurBool"/>
<xsd:attribute name="l_disp" type="FleurBool"/>
<xsd:attribute name="sso_opt" type="TripleFleurBool"/>
<xsd:attribute name="mix_b" type="xsd:double"/>
<xsd:attribute name="thetaJ" type="xsd:double"/>
<xsd:attribute name="nsh" type="xsd:nonNegativeInteger"/>
</xsd:complexType>
<xsd:complexType name="OneDParamType">
<xsd:attribute name="d1" type="FleurBool"/>
<xsd:attribute name="MM" type="xsd:integer"/>
<xsd:attribute name="vM" type="xsd:integer"/>
<xsd:attribute name="m_cyl" type="xsd:integer"/>
<xsd:attribute name="chi" type="xsd:integer"/>
<xsd:attribute name="rot" type="xsd:integer"/>
<xsd:attribute name="invs1" type="FleurBool"/>
<xsd:attribute name="zrfs1" type="FleurBool"/>
</xsd:complexType>
<xsd:complexType name="CoreElectronsType">
<xsd:attribute name="ctail" type="FleurBool" use="required"/>
<xsd:attribute default="F" name="frcor" type="FleurBool" use="optional"/>
<xsd:attribute default="0" name="kcrel" type="xsd:integer" use="optional"/>
</xsd:complexType>
<xsd:complexType name="CellType">
<xsd:sequence>
<xsd:choice>
<xsd:element name="symmetry" type="SymmetryType"/>
<xsd:element name="symmetryFile" type="SymmetryFileType"/>
<xsd:element name="symmetryOperations" type="SymmetryOperationsType"/>
</xsd:choice>
<xsd:choice>
<xsd:element name="bulkLattice" type="BulkLatticeType"/>
<xsd:element name="filmLattice" type="FilmLatticeType"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SymmetryType">
<xsd:attribute name="spgrp" type="SpgrpEnum" use="required"/>
<xsd:attribute name="invs" type="FleurBool" use="required"/>
<xsd:attribute name="zrfs" type="FleurBool" use="required"/>
</xsd:complexType>
<xsd:complexType name="SymmetryFileType">
<xsd:attribute name="filename" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="SymmetryOperationsType">
<xsd:sequence>
<xsd:element maxOccurs="48" minOccurs="1" name="symOp" type="SymOpMatrixType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="MagnetismType">
<xsd:attribute name="jspins" type="SpinNumberType" use="required"/>
<xsd:attribute default="F" name="l_noco" type="FleurBool" use="optional"/>
<xsd:attribute default="F" name="l_J" type="FleurBool" use="optional"/>
<xsd:attribute default="F" name="swsp" type="FleurBool" use="optional"/>
<xsd:attribute default="F" name="lflip" type="FleurBool" use="optional"/>
</xsd:complexType>
<xsd:simpleType name="SpinNumberType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1"/>
<xsd:maxInclusive value="2"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="BulkLatticeType">
<xsd:sequence>
<xsd:choice>
<xsd:sequence>
<xsd:element name="a1" type="xsd:double"/>
<xsd:element minOccurs="0" name="a2" type="xsd:double"/>
<xsd:element name="c" type="xsd:double"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="row-1" type="String2DVecType"/>
<xsd:element name="row-2" type="String2DVecType"/>
<xsd:element name="c" type="xsd:double"/>
</xsd:sequence>
<xsd:element name="bravaisMatrix" type="BravaisMatrixType"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="scale" type="xsd:double" use="required"/>
<xsd:attribute name="latnam" type="LatnamEnum" use="required"/>
</xsd:complexType>
<xsd:complexType name="FilmLatticeType">
<xsd:sequence>
<xsd:choice>
<xsd:sequence>
<xsd:element name="a1" type="xsd:double"/>
<xsd:element minOccurs="0" name="a2" type="xsd:double"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="row-1" type="String2DVecType"/>
<xsd:element name="row-2" type="String2DVecType"/>
</xsd:sequence>
<xsd:element name="bravaisMatrix" type="BravaisMatrixType"/>
</xsd:choice>
<xsd:element minOccurs="0" maxOccurs="2" name="vacuumEnergyParameters" type="VacuumEnergyParameterType"/>
</xsd:sequence>
<xsd:attribute name="scale" type="xsd:double" use="required"/>
<xsd:attribute name="latnam" type="LatnamEnum" use="required"/>
<xsd:attribute name="dVac" type="xsd:double" use="required"/>
<xsd:attribute name="dTilda" type="xsd:double" use="required"/>
</xsd:complexType>
<xsd:complexType name="VacuumEnergyParameterType">
<xsd:attribute name="vacuum" type="xsd:integer" use="required"/>
<xsd:attribute name="spinUp" type="xsd:double" use="required"/>
<xsd:attribute name="spinDown" type="xsd:double" use="optional"/>
</xsd:complexType>
<xsd:complexType name="BravaisMatrixType">
<xsd:sequence>
<xsd:element name="row-1" type="String3DVecType"/>
<xsd:element name="row-2" type="String3DVecType"/>
<xsd:element name="row-3" type="String3DVecType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="StringVecType">
<xsd:list itemType="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="String2DVecType">
<xsd:restriction base="StringVecType">
<xsd:length value="2"/>
</xsd:restriction>
</xsd:simpleType>