Commit 55a70ee7 authored by Daniel Wortmann's avatar Daniel Wortmann

Fixed HDF problems

parent 2dcc7357
......@@ -73,6 +73,7 @@ CONTAINS
!DEC$ NOOPTIMIZE
#include"cpp_double.h"
USE m_types
USE m_types_dos
USE m_constants
USE m_forceb8
USE m_pwint
......
......@@ -27,6 +27,7 @@ CONTAINS
!
!***********************************************************************
USE m_types
USE m_types_dos
USE m_types_eigdos
USE m_constants
IMPLICIT NONE
......
......@@ -52,7 +52,7 @@ CONTAINS
eFermiPrev=merge(results%ef,eFermiPrev,l_error)
#ifdef CPP_HDF
CALL openBandDOSFile(banddosFile_id,input,atoms,cell,kpts,banddos)
CALL openBandDOSFile(banddosFile_id,input,atoms,cell,kpts,banddos,eFermiPrev)
#endif
IF (banddos%band) THEN
......
......@@ -170,17 +170,21 @@ subroutine write_dos(eigdos,hdf_id)
#ifdef CPP_HDF
integer(HID_T),intent(in) ::hdf_id
INTEGER::n
DO n=1,eigdos%get_num_weights()
call writebandData(hdf_id,eigdos%name_of_dos,eigdos%get_weight_name(n),eigdos%get_eig(),eigdos%get_weight_eig(n),kpts)
enddo
#else
integer,intent(in):: hdf_id !not used
#endif
integer:: jspin,i,k
real,allocatable :: ev(:,:,:),kx(:)
real :: vkr(3),vkr_prev(3)
character(len=100)::file
allocate(kx(kpts%nkpt))
#ifdef CPP_HDF
DO n=1,eigdos%get_num_weights()
call writebandData(hdf_id,eigdos%name_of_dos,eigdos%get_weight_name(n),eigdos%get_eig(),eigdos%get_weight_eig(n),kpts)
enddo
#endif
if (eigdos%name_of_dos.ne."Local") then
#ifndef CPP_HDF
print *,"WARNING, only very basic BS written without HDF"
......
......@@ -27,7 +27,7 @@ MODULE m_banddos_io
CONTAINS
SUBROUTINE openBandDOSFile(fileID, input, atoms, cell, kpts, banddos)
SUBROUTINE openBandDOSFile(fileID, input, atoms, cell, kpts, banddos,eFermiPrev)
USE m_types_input
USE m_types_atoms
......@@ -36,7 +36,7 @@ MODULE m_banddos_io
USE m_types_banddos
USE hdf5
USE m_cdn_io
!USE m_cdn_io
TYPE(t_input), INTENT(IN) :: input
TYPE(t_atoms), INTENT(IN) :: atoms
......@@ -45,6 +45,8 @@ MODULE m_banddos_io
TYPE(t_banddos), INTENT(IN) :: banddos
INTEGER(HID_T), INTENT(OUT) :: fileID
REAL,INTENT(IN) :: eFermiPrev
LOGICAL :: l_exist
CHARACTER(LEN=30) :: filename
......@@ -73,7 +75,7 @@ MODULE m_banddos_io
INTEGER :: hdfError, dimsInt(7)
INTEGER :: version
REAL :: eFermiPrev
LOGICAL :: l_error
INTEGER :: atomicNumbers(atoms%nat)
......@@ -95,11 +97,7 @@ MODULE m_banddos_io
CALL io_write_attint0(metaGroupID,'version',version)
CALL h5gclose_f(metaGroupID, hdfError)
CALL readPrevEFermi(eFermiPrev,l_error)
IF(l_error) THEN
! No previous eFermi available
eFermiPrev = 0.0
END IF
CALL h5gcreate_f(fileID, '/general', generalGroupID, hdfError)
CALL io_write_attint0(generalGroupID,'spins',input%jspins)
......
......@@ -147,6 +147,7 @@ CONTAINS
TYPE(t_sym),INTENT(IN) :: sym
TYPE(t_noco),INTENT(IN) :: noco
TYPE(t_oneD),INTENT(IN) :: oneD
TYPE(t_potden),INTENT(INOUT) :: den
INTEGER, INTENT (IN) :: inOrOutCDN
......@@ -384,6 +385,7 @@ CONTAINS
TYPE(t_input),INTENT(IN) :: input
TYPE(t_sym),INTENT(IN) :: sym
TYPE(t_oneD),INTENT(IN) :: oneD
TYPE(t_potden),INTENT(INOUT) :: den
INTEGER, INTENT (IN) :: inOrOutCDN
......@@ -870,6 +872,7 @@ CONTAINS
TYPE(t_noco),INTENT(IN) :: noco
TYPE(t_stars),INTENT(IN) :: stars
TYPE(t_input) :: inputTemp
TYPE(t_atoms) :: atomsTemp
TYPE(t_cell) :: cellTemp
......@@ -877,6 +880,7 @@ CONTAINS
TYPE(t_oneD) :: oneDTemp
TYPE(t_sym) :: symTemp
INTEGER :: mode
INTEGER :: currentStarsIndex,currentLatharmsIndex,currentStructureIndex
INTEGER :: currentStepfunctionIndex,readDensityIndex,lastDensityIndex
......@@ -903,7 +907,7 @@ CONTAINS
currentStructureIndex = currentStructureIndex + 1
l_writeStructure = .TRUE.
ELSE
CALL readStructureHDF(fileID, inputTemp, atomsTemp, cellTemp, vacuumTemp, oneDTemp, symTemp, currentStructureIndex)
CALL readStructureHDF(fileID, inputTemp, atomsTemp, cellTemp, vacuumTemp, oneDTemp, symTemp,currentStructureIndex)
CALL compareStructure(input, atoms, vacuum, cell, sym, inputTemp, atomsTemp, vacuumTemp, cellTemp, symTemp, l_same)
IF(.NOT.l_same) THEN
currentStructureIndex = currentStructureIndex + 1
......@@ -948,6 +952,7 @@ CONTAINS
TYPE(t_cell),INTENT(IN) :: cell
TYPE(t_noco),INTENT(IN) :: noco
TYPE(t_stars),INTENT(IN) :: stars
!Locals
INTEGER :: archiveType
LOGICAL :: l_qfix
......@@ -964,6 +969,7 @@ CONTAINS
TYPE(t_sym) :: symTemp
INTEGER :: mode,currentStarsIndex,currentLatharmsIndex,currentStructureIndex
INTEGER :: currentStepfunctionIndex,readDensityIndex,lastDensityIndex,structureindex
LOGICAL :: l_same,l_structure_by_shift
......@@ -990,7 +996,7 @@ CONTAINS
WRITE(archivename,"(a,i0)") "cdn-",lastdensityindex
CALL peekDensityEntryHDF(fileID, archivename, DENSITY_TYPE_IN_const, structureIndex=structureIndex)
!Read that structure
CALL readStructureHDF(fileID, inputTemp, atomsTemp, cellTemp, vacuumTemp, oneDTemp, symTemp, StructureIndex)
CALL readStructureHDF(fileID, inputTemp, atomsTemp, cellTemp, vacuumTemp, oneDTemp, symTemp,StructureIndex)
CALL compareStructure(input, atoms, vacuum, cell, sym, inputTemp, atomsTemp, vacuumTemp, cellTemp, symTemp, l_same,l_structure_by_shift)
ENDIF
CALL closeCDNPOT_HDF(fileID)
......@@ -1008,11 +1014,11 @@ CONTAINS
shifts=atomsTemp%taual-atoms%taual
!Determine type of charge
IF(noco%l_mtNocoPot) THEN
IF(noco%l_mtNocoPot) THEN
archiveType=CDN_ARCHIVE_TYPE_FFN_const
ELSE IF (noco%l_noco) THEN
ELSE IF (noco%l_noco) THEN
archiveType=CDN_ARCHIVE_TYPE_NOCO_const
ELSE
ELSE
archiveType=CDN_ARCHIVE_TYPE_CDN1_const
END IF
!read the current density
......
......@@ -15,7 +15,7 @@
MODULE m_cdnpot_io_common
USE m_types
USE m_juDFT
USE m_cdnpot_io_hdf
#ifdef CPP_HDF
......@@ -27,6 +27,8 @@ MODULE m_cdnpot_io_common
CONTAINS
SUBROUTINE compareStars(stars, refStars, oneD, refOneD, l_same)
use m_types_stars
use m_types_oneD
TYPE(t_stars),INTENT(IN) :: stars
TYPE(t_stars),INTENT(IN) :: refStars
......@@ -48,7 +50,7 @@ MODULE m_cdnpot_io_common
END SUBROUTINE compareStars
SUBROUTINE compareStepfunctions(stars, refStars, l_same)
use m_types_stars
TYPE(t_stars),INTENT(IN) :: stars
TYPE(t_stars),INTENT(IN) :: refStars
......@@ -65,6 +67,12 @@ MODULE m_cdnpot_io_common
SUBROUTINE compareStructure(input, atoms, vacuum, cell, sym, refInput, refAtoms, refVacuum,&
refCell, refSym, l_same,l_shift_only)
use m_types_input
use m_types_atoms
use m_types_vacuum
use m_types_cell
use m_types_sym
TYPE(t_input),INTENT(IN) :: input, refInput
TYPE(t_atoms),INTENT(IN) :: atoms, refAtoms
......@@ -78,7 +86,7 @@ MODULE m_cdnpot_io_common
INTEGER :: i
l_same = .TRUE.
IF(atoms%ntype.NE.refAtoms%ntype) l_same = .FALSE.
IF(atoms%nat.NE.refAtoms%nat) l_same = .FALSE.
......@@ -103,7 +111,7 @@ MODULE m_cdnpot_io_common
IF(ANY(sym%mrot(:,:,:sym%nop).NE.refSym%mrot(:,:,:sym%nop))) l_same = .FALSE.
IF(ANY(ABS(sym%tau(:,:sym%nop)-refSym%tau(:,:sym%nop)).GT.1e-10)) l_same = .FALSE.
END IF
IF (PRESENT(l_shift_only)) l_shift_only=l_same
!Now the positions are checked...
IF(l_same) THEN
......@@ -119,7 +127,7 @@ MODULE m_cdnpot_io_common
END SUBROUTINE compareStructure
SUBROUTINE compareLatharms(latharms, refLatharms, l_same)
use m_types_sphhar
TYPE(t_sphhar) :: latharms, refLatharms
LOGICAL, INTENT(OUT) :: l_same
......@@ -136,6 +144,14 @@ MODULE m_cdnpot_io_common
SUBROUTINE checkAndWriteMetadataHDF(fileID, input, atoms, cell, vacuum, oneD, stars, latharms, sym,&
currentStarsIndex,currentLatharmsIndex,currentStructureIndex,&
currentStepfunctionIndex,l_storeIndices,l_CheckBroyd)
use m_types_atoms
use m_types_input
use m_types_cell
use m_types_vacuum
use m_types_oneD
use m_types_stars
use m_types_sphhar
use m_types_sym
TYPE(t_input),INTENT(IN) :: input
TYPE(t_atoms),INTENT(IN) :: atoms
......@@ -170,7 +186,7 @@ MODULE m_cdnpot_io_common
IF(currentStructureIndex.EQ.0) THEN
currentStructureIndex = 1
l_storeIndices = .TRUE.
CALL writeStructureHDF(fileID, input, atoms, cell, vacuum, oneD, sym, currentStructureIndex,l_CheckBroyd)
CALL writeStructureHDF(fileID, input, atoms, cell, vacuum, oneD, sym,currentStructureIndex,l_CheckBroyd)
ELSE
CALL readStructureHDF(fileID, inputTemp, atomsTemp, cellTemp, vacuumTemp, oneDTemp, symTemp, currentStructureIndex)
CALL compareStructure(input, atoms, vacuum, cell, sym, inputTemp, atomsTemp, vacuumTemp, cellTemp, symTemp, l_same)
......
......@@ -7,7 +7,6 @@
MODULE m_cdnpot_io_hdf
USE m_constants
USE m_types
USE m_juDFT
#ifdef CPP_HDF
USE hdf5
......@@ -233,7 +232,8 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE writePOTHeaderData
SUBROUTINE writeStarsHDF(fileID, starsIndex, structureIndex, stars, oneD, l_checkBroyd)
use m_types_stars
use m_types_oneD
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: starsIndex, structureIndex
TYPE(t_stars), INTENT(IN) :: stars
......@@ -436,7 +436,8 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE writeStarsHDF
SUBROUTINE readStarsHDF(fileID, starsIndex, stars, oneD)
use m_types_stars
use m_types_oneD
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: starsIndex
TYPE(t_stars), INTENT(INOUT) :: stars
......@@ -649,7 +650,7 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE peekStarsHDF
SUBROUTINE writeStepfunctionHDF(fileID, stepfunctionIndex, starsIndex, structureIndex, stars, l_CheckBroyd)
use m_types_stars
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: stepfunctionIndex, starsIndex, structureIndex
TYPE(t_stars), INTENT(IN) :: stars
......@@ -708,7 +709,7 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE writeStepfunctionHDF
SUBROUTINE readStepfunctionHDF(fileID, stepfunctionIndex, stars)
use m_types_stars
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: stepfunctionIndex
TYPE(t_stars), INTENT(INOUT) :: stars
......@@ -795,7 +796,7 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE peekStepfunctionHDF
SUBROUTINE writeLatharmsHDF(fileID, latharmsIndex, structureIndex, latharms, l_CheckBroyd)
use m_types_sphhar
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: latharmsIndex, structureIndex
TYPE(t_sphhar), INTENT(IN) :: latharms
......@@ -877,7 +878,7 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE writeLatharmsHDF
SUBROUTINE readLatharmsHDF(fileID, latharmsIndex, latharms)
use m_types_sphhar
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: latharmsIndex
TYPE(t_sphhar), INTENT(INOUT) :: latharms
......@@ -969,6 +970,12 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE peekLatharmsHDF
SUBROUTINE writeStructureHDF(fileID, input, atoms, cell, vacuum, oneD, sym, structureIndex, l_CheckBroyd)
use m_types_input
use m_types_atoms
use m_types_cell
use m_types_vacuum
use m_types_oned
use m_types_sym
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: structureIndex
......@@ -1054,12 +1061,12 @@ MODULE m_cdnpot_io_hdf
CALL io_write_attint0(groupID,'nmzd',vacuum%nmzd)
CALL io_write_attint0(groupID,'nmzxy',vacuum%nmzxy)
CALL io_write_attint0(groupID,'nmzxyd',vacuum%nmzxyd)
CALL io_write_attint0(groupID,'layerd',banddos%layers)
CALL io_write_attint0(groupID,'layers',banddos%layers)
!CALL io_write_attint0(groupID,'layerd',banddos%layers)
!CALL io_write_attint0(groupID,'layers',banddos%layers)
CALL io_write_attint0(groupID,'nvac',vacuum%nvac)
CALL io_write_attint0(groupID,'nvacd',vacuum%nvacd)
CALL io_write_attint0(groupID,'nstars',banddos%nstars)
CALL io_write_attint0(groupID,'nstm',vacuum%nstm)
!CALL io_write_attint0(groupID,'nstars',banddos%nstars)
!CALL io_write_attint0(groupID,'nstm',vacuum%nstm)
CALL io_write_attreal0(groupID,'delz',vacuum%delz)
CALL io_write_attreal0(groupID,'dvac',vacuum%dvac)
......@@ -1273,7 +1280,13 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE writeStructureHDF
SUBROUTINE readStructureHDF(fileID, input, atoms, cell, vacuum, oneD, sym, structureIndex)
SUBROUTINE readStructureHDF(fileID, input, atoms, cell, vacuum, oneD, sym,structureIndex)
use m_types_input
use m_types_atoms
use m_types_cell
use m_types_vacuum
use m_types_oned
use m_types_sym
INTEGER(HID_T), INTENT(IN) :: fileID
INTEGER, INTENT(IN) :: structureIndex
......@@ -1356,12 +1369,12 @@ MODULE m_cdnpot_io_hdf
CALL io_read_attint0(groupID,'nmzd',vacuum%nmzd)
CALL io_read_attint0(groupID,'nmzxy',vacuum%nmzxy)
CALL io_read_attint0(groupID,'nmzxyd',vacuum%nmzxyd)
CALL io_read_attint0(groupID,'layerd',banddos%layers)
CALL io_read_attint0(groupID,'layers',banddos%layers)
!CALL io_read_attint0(groupID,'layerd',banddos%layers)
!CALL io_read_attint0(groupID,'layers',banddos%layers)
CALL io_read_attint0(groupID,'nvac',vacuum%nvac)
CALL io_read_attint0(groupID,'nvacd',vacuum%nvacd)
CALL io_read_attint0(groupID,'nstars',banddos%nstars)
CALL io_read_attint0(groupID,'nstm',vacuum%nstm)
!CALL io_read_attint0(groupID,'nstars',banddos%nstars)
!CALL io_read_attint0(groupID,'nstm',vacuum%nstm)
CALL io_read_attreal0(groupID,'delz',vacuum%delz)
CALL io_read_attreal0(groupID,'dvac',vacuum%dvac)
......@@ -1557,7 +1570,8 @@ MODULE m_cdnpot_io_hdf
SUBROUTINE writeDensityHDF(input, fileID, archiveName, densityType, previousDensityIndex,&
starsIndex, latharmsIndex, structureIndex, stepfunctionIndex,&
date,time,distance,fermiEnergy,l_qfix,iter,den)
use m_types_input
use m_types_potden
TYPE(t_input), INTENT(IN) :: input
TYPE(t_potden), INTENT(IN) :: den
INTEGER(HID_T), INTENT(IN) :: fileID
......@@ -1810,7 +1824,7 @@ MODULE m_cdnpot_io_hdf
CALL h5sclose_f(frOffSpaceID,hdfError)
CALL io_write_real4(frOffSetID,(/1,1,1,1/),dimsInt(:4),den%mt(:,:,:,3:4))
CALL h5dclose_f(frOffSetID, hdfError)
END IF
END IF
dims(:3)=(/2,ng3,input%jspins/)
dimsInt = dims
......@@ -2034,6 +2048,8 @@ MODULE m_cdnpot_io_hdf
SUBROUTINE writePotentialHDF(input, fileID, archiveName, potentialType,&
starsIndex, latharmsIndex, structureIndex,stepfunctionIndex,&
iter,pot,fpw,l_mtNoco)
use m_types_input
use m_types_potden
TYPE(t_input), INTENT(IN) :: input
TYPE(t_potden), INTENT(IN) :: pot
......@@ -2293,6 +2309,13 @@ MODULE m_cdnpot_io_hdf
SUBROUTINE readDensityHDF(fileID, input, stars, latharms, atoms, vacuum, oneD,&
archiveName, densityType,fermiEnergy,l_qfix,l_DimChange,den)
use m_types_input
use m_types_stars
use m_types_sphhar
use m_types_atoms
use m_types_vacuum
use m_types_oneD
use m_types_potden
TYPE(t_input),INTENT(IN) :: input
TYPE(t_stars),INTENT(IN) :: stars
......@@ -2335,7 +2358,7 @@ MODULE m_cdnpot_io_hdf
INTEGER(HID_T) :: ldau_USetID
INTEGER(HID_T) :: ldau_JSetID
INTEGER(HID_T) :: mmpMatSetID
INTEGER, ALLOCATABLE :: ldau_AtomType(:), ldau_l(:), ldau_l_amf(:)
REAL, ALLOCATABLE :: ldau_U(:), ldau_J(:)
REAL, ALLOCATABLE :: frTemp(:,:,:,:)
......@@ -2560,7 +2583,7 @@ MODULE m_cdnpot_io_hdf
den%mt = 0.0
ALLOCATE(frTemp(jmtd,1:nlhd+1,ntype,1:jspins))
dimsInt(:4)=(/jmtd,nlhd+1,ntype,jspins/)
CALL h5dopen_f(groupID, 'fr', frSetID, hdfError)
CALL h5dopen_f(groupID, 'fr', frSetID, hdfError)
CALL io_read_real4(frSetID,(/1,1,1,1/),dimsInt(:4),frTemp(:,:,:,:))
CALL h5dclose_f(frSetID, hdfError)
den%mt(1:jmtdOut,0:nlhdOut,1:ntypeOut,1:jspinsOut) =&
......@@ -2572,7 +2595,7 @@ MODULE m_cdnpot_io_hdf
dimsInt(:4)=(/jmtd,nlhd+1,ntype,2/)
CALL h5dopen_f(groupID, 'froff', frOffSetID, hdfError)
CALL io_read_real4(frOffSetID,(/1,1,1,1/),dimsInt(:4),frTemp(:,:,:,1:2))
CALL h5dclose_f(frOffSetID, hdfError)
CALL h5dclose_f(frOffSetID, hdfError)
den%mt(1:jmtdOut,0:nlhdOut,1:ntypeOut,3:4) =&
frTemp(1:jmtdOut,1:nlhdOut+1,1:ntypeOut,1:2)
DEALLOCATE(frTemp)
......@@ -2928,7 +2951,8 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE peekDensityEntryHDF
SUBROUTINE writeCoreDensityHDF(fileID,input,atoms,rhcs,tecs,qints)
use m_types_atoms
use m_types_input
TYPE(t_atoms), INTENT(IN) :: atoms
TYPE(t_input), INTENT(IN) :: input
......@@ -3007,6 +3031,8 @@ MODULE m_cdnpot_io_hdf
END SUBROUTINE writeCoreDensityHDF
SUBROUTINE readCoreDensityHDF(fileID,input,atoms,rhcs,tecs,qints)
use m_types_atoms
use m_types_input
TYPE(t_atoms), INTENT(IN) :: atoms
TYPE(t_input), INTENT(IN) :: input
......
......@@ -23,7 +23,7 @@ MODULE m_types
USE m_types_field
USE m_types_xcpot_inbuild
USE m_types_regionCharges
USE m_types_dos
!USE m_types_dos
USE m_types_denCoeffsOffdiag
USE m_types_force
USE m_types_forcetheo
......
......@@ -13,7 +13,10 @@ CONTAINS
USE m_polangle
USE m_ylm
USE m_dylm
USE m_types
USE m_types_sym
USE m_types_sphhar
USE m_types_atoms
IMPLICIT NONE
LOGICAL, INTENT(IN) :: dograds
......@@ -22,7 +25,7 @@ CONTAINS
TYPE(t_atoms),INTENT(IN) :: atoms
! ..
! .. Scalar Arguments ..
INTEGER, INTENT (IN) :: nsp
INTEGER, INTENT (IN) :: nsp
! ..
! .. Array Arguments ..
REAL, INTENT (IN) :: rx(:,:)!(3,dimension%nspd)
......
......@@ -6,7 +6,7 @@
MODULE m_lhglpts
! **********************************************************
! calculates lattice harmonics on the gauss-legendre angular
! calculates lattice harmonics on the gauss-legendre angular
! mesh - r.pentcheva Feb'96
! **********************************************************
CONTAINS
......@@ -17,15 +17,18 @@ CONTAINS
& ylh)
!
USE m_ylm
USE m_types
USE m_types_sym
USE m_types_sphhar
USE m_types_atoms
IMPLICIT NONE
TYPE(t_sym),INTENT(IN) :: sym
TYPE(t_sphhar),INTENT(IN) :: sphhar
TYPE(t_atoms),INTENT(IN) :: atoms
! ..
! .. Scalar Arguments ..
INTEGER, INTENT (IN) :: nsp
! .. Scalar Arguments ..
INTEGER, INTENT (IN) :: nsp
! ..
! .. Array Arguments ..
REAL, INTENT (IN) :: rx(:,:) !(3,dimension%nspd)
......
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