LCOV - code coverage report
Current view: top level - io - greensf_io.F90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 425 488 87.1 %
Date: 2024-05-01 04:44:11 Functions: 4 5 80.0 %

          Line data    Source code
       1             : MODULE m_greensf_io
       2             : 
       3             : #ifdef CPP_HDF
       4             : 
       5             :    USE hdf5
       6             :    USE m_hdf_tools
       7             :    USE m_types
       8             :    USE m_types_selfen
       9             :    USE m_constants
      10             :    USE m_juDFT
      11             : 
      12             :    IMPLICIT NONE
      13             : 
      14             :    PUBLIC openGreensFFile, closeGreensFFile, writeGreensFData
      15             : 
      16             :    PUBLIC GREENSF_GENERAL_CONST, GREENSF_HUBBARD_CONST
      17             : 
      18             :    !---------------
      19             :    ! Storage Types
      20             :    !-------------------------------
      21             :    ! GREENS_GENERAL_CONST => All Green's function elements are saved
      22             :    ! GREENS_HUBBARD_CONST => Only Hubbard elements are saved with selfenergy (if available)
      23             :    INTEGER,    PARAMETER :: GREENSF_GENERAL_CONST = 1
      24             :    INTEGER,    PARAMETER :: GREENSF_HUBBARD_CONST = 2
      25             : 
      26             :    CONTAINS
      27             : 
      28          21 :    SUBROUTINE openGreensFFile(fileID, input, gfinp, atoms, sym, cell, kpts, sphhar,inFilename, vtot)
      29             : 
      30             :       USE m_types
      31             :       USE m_cdn_io
      32             :       use m_lattHarmsSphHarmsConv
      33             : 
      34             :       TYPE(t_input),                INTENT(IN)  :: input
      35             :       TYPE(t_gfinp),                INTENT(IN)  :: gfinp
      36             :       TYPE(t_atoms),                INTENT(IN)  :: atoms
      37             :       type(t_sym),                  intent(in)  :: sym
      38             :       TYPE(t_cell),                 INTENT(IN)  :: cell
      39             :       TYPE(t_kpts),                 INTENT(IN)  :: kpts
      40             :       type(t_sphhar),               intent(in)  :: sphhar
      41             :       TYPE(t_potden), optional,     INTENT(IN)  :: vtot
      42             :       CHARACTER(len=*), OPTIONAL,   INTENT(IN)  :: inFilename
      43             :       INTEGER(HID_T),               INTENT(OUT) :: fileID
      44             : 
      45             :       LOGICAL           :: l_exist
      46             :       CHARACTER(LEN=30) :: filename
      47             :       INTEGER(HID_T)    :: metaGroupID
      48             :       INTEGER(HID_T)    :: generalGroupID, kptsGroupID
      49             :       INTEGER(HID_T)    :: kptCoordSpaceID, kptCoordSetID
      50             :       INTEGER(HID_T)    :: kptWeightSpaceID, kptWeightSetID
      51             :       INTEGER(HID_T)    :: kptsSPLabelsSpaceID, kptsSPLabelsSetID
      52             :       INTEGER(HID_T)    :: kptsSPIndicesSpaceID, kptsSPIndicesSetID
      53             :       INTEGER(HID_T)    :: bravaisMatrixSpaceID, bravaisMatrixSetID
      54             :       INTEGER(HID_T)    :: reciprocalCellSpaceID, reciprocalCellSetID
      55             :       INTEGER(HID_T)    :: atomsGroupID
      56             :       INTEGER(HID_T)    :: atomPosSpaceID, atomPosSetID
      57             :       INTEGER(HID_T)    :: atomicNumbersSpaceID, atomicNumbersSetID
      58             :       INTEGER(HID_T)    :: equivAtomsClassSpaceID, equivAtomsClassSetID
      59             :       INTEGER(HID_T)    :: bxcGroupID, bxcSpaceID, bxcSetID
      60             : 
      61             :       INTEGER(HID_T)    :: stringTypeID
      62             :       INTEGER(SIZE_T)   :: stringLength
      63             : 
      64             :       LOGICAL           :: l_error
      65             :       INTEGER           :: hdfError
      66             :       INTEGER           :: version
      67             :       REAL              :: eFermiPrev
      68             :       INTEGER           :: dimsInt(7)
      69             :       INTEGER(HSIZE_T)  :: dims(7)
      70             :       INTEGER           :: j, iAtom, iType
      71             : 
      72          21 :       INTEGER           :: atomicNumbers(atoms%nat)
      73          21 :       INTEGER           :: equivAtomsGroup(atoms%nat)
      74          21 :       real, ALLOCATABLE :: bxc_mt(:,:,:)
      75          21 :       complex, allocatable :: bxc_lm(:,:,:)
      76             : 
      77          21 :       version = 10
      78          21 :       IF(PRESENT(inFilename)) THEN
      79           0 :          filename = TRIM(ADJUSTL(inFilename))
      80             :       ELSE
      81          21 :          filename = "greensf.hdf"
      82             :       ENDIF
      83             : 
      84          21 :       INQUIRE(FILE=TRIM(ADJUSTL(filename)),EXIST=l_exist)
      85          21 :       IF(l_exist) THEN
      86           5 :          CALL system('rm '//TRIM(ADJUSTL(filename)))
      87             :       ENDIF
      88             : 
      89          21 :       CALL h5fcreate_f(TRIM(ADJUSTL(filename)), H5F_ACC_TRUNC_F, fileID, hdfError, H5P_DEFAULT_F, H5P_DEFAULT_F)
      90             : 
      91          21 :       CALL h5gcreate_f(fileID, '/meta', metaGroupID, hdfError)
      92          21 :       CALL io_write_attint0(metaGroupID,'version',version)
      93             : 
      94          21 :       CALL h5gclose_f(metaGroupID, hdfError)
      95             : 
      96          21 :       CALL readPrevEFermi(eFermiPrev,l_error)
      97          21 :       IF(l_error) THEN
      98             :          ! No previous eFermi available
      99           0 :          eFermiPrev = 0.0
     100             :       END IF
     101             : 
     102          21 :       CALL h5gcreate_f(fileID, '/general', generalGroupID, hdfError)
     103          21 :       CALL io_write_attint0(generalGroupID,'spins',input%jspins)
     104          21 :       CALL io_write_attreal0(generalGroupID,'FermiEnergy',eFermiPrev)
     105          21 :       CALL io_write_attlog0(generalGroupID,'mperp',gfinp%l_mperp)
     106             : 
     107          63 :       dims(:2)=(/3,3/)
     108         168 :       dimsInt=dims
     109          21 :       CALL h5screate_simple_f(2,dims(:2),bravaisMatrixSpaceID,hdfError)
     110          21 :       CALL h5dcreate_f(generalGroupID, "bravaisMatrix", H5T_NATIVE_DOUBLE, bravaisMatrixSpaceID, bravaisMatrixSetID, hdfError)
     111          21 :       CALL h5sclose_f(bravaisMatrixSpaceID,hdfError)
     112          21 :       CALL io_write_real2(bravaisMatrixSetID,(/1,1/),dimsInt(:2),"amat",cell%amat)
     113          21 :       CALL h5dclose_f(bravaisMatrixSetID, hdfError)
     114             : 
     115          63 :       dims(:2)=(/3,3/)
     116         168 :       dimsInt=dims
     117          21 :       CALL h5screate_simple_f(2,dims(:2),reciprocalCellSpaceID,hdfError)
     118          21 :       CALL h5dcreate_f(generalGroupID, "reciprocalCell", H5T_NATIVE_DOUBLE, reciprocalCellSpaceID, reciprocalCellSetID, hdfError)
     119          21 :       CALL h5sclose_f(reciprocalCellSpaceID,hdfError)
     120          21 :       CALL io_write_real2(reciprocalCellSetID,(/1,1/),dimsInt(:2),"bmat",cell%bmat)
     121          21 :       CALL h5dclose_f(reciprocalCellSetID, hdfError)
     122             : 
     123          21 :       iAtom = 0
     124          47 :       DO iType = 1, atoms%ntype
     125          73 :          DO j = 1, atoms%neq(iType)
     126          26 :             iAtom = iAtom + 1
     127          26 :             atomicNumbers(iAtom) = atoms%nz(iType)
     128          52 :             equivAtomsGroup(iAtom) = iType
     129             :          END DO
     130             :       END DO
     131             : 
     132          21 :       CALL h5gcreate_f(fileID, '/atoms', atomsGroupID, hdfError)
     133          21 :       CALL io_write_attint0(atomsGroupID,'nAtoms',atoms%nat)
     134          21 :       CALL io_write_attint0(atomsGroupID,'nTypes',atoms%ntype)
     135             : 
     136          63 :       dims(:2)=(/3,atoms%nat/)
     137         168 :       dimsInt=dims
     138          21 :       CALL h5screate_simple_f(2,dims(:2),atomPosSpaceID,hdfError)
     139          21 :       CALL h5dcreate_f(atomsGroupID, "positions", H5T_NATIVE_DOUBLE, atomPosSpaceID, atomPosSetID, hdfError)
     140          21 :       CALL h5sclose_f(atomPosSpaceID,hdfError)
     141          21 :       CALL io_write_real2(atomPosSetID,(/1,1/),dimsInt(:2),"taual",atoms%taual)
     142          21 :       CALL h5dclose_f(atomPosSetID, hdfError)
     143             : 
     144          42 :       dims(:1)=(/atoms%nat/)
     145         168 :       dimsInt=dims
     146          21 :       CALL h5screate_simple_f(1,dims(:1),atomicNumbersSpaceID,hdfError)
     147          21 :       CALL h5dcreate_f(atomsGroupID, "atomicNumbers", H5T_NATIVE_INTEGER, atomicNumbersSpaceID, atomicNumbersSetID, hdfError)
     148          21 :       CALL h5sclose_f(atomicNumbersSpaceID,hdfError)
     149          21 :       CALL io_write_integer1(atomicNumbersSetID,(/1/),dimsInt(:1),"atomicNumbers",atomicNumbers)
     150          21 :       CALL h5dclose_f(atomicNumbersSetID, hdfError)
     151             : 
     152          42 :       dims(:1)=(/atoms%nat/)
     153         168 :       dimsInt=dims
     154          21 :       CALL h5screate_simple_f(1,dims(:1),equivAtomsClassSpaceID,hdfError)
     155          21 :       CALL h5dcreate_f(atomsGroupID, "equivAtomsGroup", H5T_NATIVE_INTEGER, equivAtomsClassSpaceID, equivAtomsClassSetID, hdfError)
     156          21 :       CALL h5sclose_f(equivAtomsClassSpaceID,hdfError)
     157          21 :       CALL io_write_integer1(equivAtomsClassSetID,(/1/),dimsInt(:1),"equivAtomsGroup",equivAtomsGroup)
     158          21 :       CALL h5dclose_f(equivAtomsClassSetID, hdfError)
     159             : 
     160          21 :       CALL h5gclose_f(atomsGroupID, hdfError)
     161             : 
     162          21 :       CALL h5gcreate_f(generalGroupID, 'kpts', kptsGroupID, hdfError)
     163             : 
     164          21 :       CALL io_write_attint0(kptsGroupID,'nkpt',kpts%nkpt)
     165          21 :       CALL io_write_attchar0(kptsGroupID,'kind',TRIM(ADJUSTL(kptsKindString_consts(kpts%kptsKind))))
     166          21 :       CALL io_write_attint0(kptsGroupID,'nSpecialPoints',kpts%numSpecialPoints)
     167             : 
     168          63 :       dims(:2)=(/3,kpts%nkpt/)
     169         168 :       dimsInt=dims
     170          21 :       CALL h5screate_simple_f(2,dims(:2),kptCoordSpaceID,hdfError)
     171          21 :       CALL h5dcreate_f(kptsGroupID, "coordinates", H5T_NATIVE_DOUBLE, kptCoordSpaceID, kptCoordSetID, hdfError)
     172          21 :       CALL h5sclose_f(kptCoordSpaceID,hdfError)
     173          21 :       CALL io_write_real2(kptCoordSetID,(/1,1/),dimsInt(:2),"bk",kpts%bk)
     174          21 :       CALL h5dclose_f(kptCoordSetID, hdfError)
     175             : 
     176          42 :       dims(:1)=(/kpts%nkpt/)
     177         168 :       dimsInt=dims
     178          21 :       CALL h5screate_simple_f(1,dims(:1),kptWeightSpaceID,hdfError)
     179          21 :       CALL h5dcreate_f(kptsGroupID, "weights", H5T_NATIVE_DOUBLE, kptWeightSpaceID, kptWeightSetID, hdfError)
     180          21 :       CALL h5sclose_f(kptWeightSpaceID,hdfError)
     181          21 :       CALL io_write_real1(kptWeightSetID,(/1/),dimsInt(:1),"wkpt",kpts%wtkpt)
     182          21 :       CALL h5dclose_f(kptWeightSetID, hdfError)
     183             : 
     184          21 :       IF (ALLOCATED(kpts%specialPointIndices)) THEN
     185           0 :          stringLength = LEN(kpts%specialPointNames(:))
     186           0 :          CALL h5tcopy_f(H5T_NATIVE_CHARACTER, stringTypeID, hdfError)
     187           0 :          CALL h5tset_size_f(stringTypeID, stringLength, hdfError)
     188           0 :          CALL h5tset_strpad_f(stringTypeID, H5T_STR_SPACEPAD_F, hdfError)
     189           0 :          CALL h5tset_cset_f(stringTypeID, H5T_CSET_ASCII_F, hdfError)
     190           0 :          dims(:1)=(/kpts%numSpecialPoints/)
     191           0 :          dimsInt=dims
     192           0 :          CALL h5screate_simple_f(1,dims(:1),kptsSPLabelsSpaceID,hdfError)
     193           0 :          CALL h5dcreate_f(kptsGroupID, "specialPointLabels", stringTypeID, kptsSPLabelsSpaceID, kptsSPLabelsSetID, hdfError)
     194           0 :          CALL h5tclose_f(stringTypeID,hdfError)
     195           0 :          CALL h5sclose_f(kptsSPLabelsSpaceID,hdfError)
     196           0 :          CALL io_write_string1(kptsSPLabelsSetID,dimsInt(:1),LEN(kpts%specialPointNames(:)),kpts%specialPointNames)
     197           0 :          CALL h5dclose_f(kptsSPLabelsSetID, hdfError)
     198             : 
     199           0 :          dims(:1)=(/kpts%numSpecialPoints/)
     200           0 :          dimsInt=dims
     201           0 :          CALL h5screate_simple_f(1,dims(:1),kptsSPIndicesSpaceID,hdfError)
     202           0 :          CALL h5dcreate_f(kptsGroupID, "specialPointIndices", H5T_NATIVE_INTEGER, kptsSPIndicesSpaceID, kptsSPIndicesSetID, hdfError)
     203           0 :          CALL h5sclose_f(kptsSPIndicesSpaceID,hdfError)
     204           0 :          CALL io_write_integer1(kptsSPIndicesSetID,(/1/),dimsInt(:1),"specialPointIndices",kpts%specialPointIndices)
     205           0 :          CALL h5dclose_f(kptsSPIndicesSetID, hdfError)
     206             :       END IF
     207             : 
     208          21 :       CALL h5gclose_f(kptsGroupID, hdfError)
     209             : 
     210          21 :       if (present(vtot)) then
     211             :          !Write out bxc
     212          21 :          CALL h5gcreate_f(fileID, '/bxc', bxcGroupID, hdfError)
     213             : 
     214         105 :          allocate(bxc_mt(size(vtot%mt,1), 0:size(vtot%mt,2)-1, size(vtot%mt,3)))
     215     2099719 :          ALLOCATE(bxc_lm(atoms%jmtd,atoms%lmaxd*(atoms%lmaxd+2)+1,atoms%ntype),source=cmplx_0)
     216      802736 :          bxc_mt = (vtot%mt(:,0:,:,2) - vtot%mt(:,0:,:,1))/2.0
     217          47 :          do iType = 1, atoms%ntype
     218             :             !L=0 of potential has an additional rescaling of r/sqrt(4pi)
     219             :             bxc_mt(:atoms%jri(iType),0,iType) = bxc_mt(:atoms%jri(iType),0,iType) *&
     220       21348 :                                                sfp_const/atoms%rmsh(:atoms%jri(iType),iType)
     221          47 :             CALL lattHarmsRepToSphHarms(sym, atoms, sphhar, iType, bxc_mt(:,0:,iType), bxc_lm(:,:,itype))
     222             :          enddo
     223             : 
     224         105 :          dims(:4)=(/2,atoms%jmtd,atoms%lmaxd*(atoms%lmaxd+2)+1,atoms%ntype/)
     225         168 :          dimsInt=dims
     226          21 :          CALL h5screate_simple_f(4,dims(:4),bxcSpaceID,hdfError)
     227          21 :          CALL h5dcreate_f(bxcGroupID, "data", H5T_NATIVE_DOUBLE, bxcSpaceID, bxcSetID, hdfError)
     228          21 :          CALL h5sclose_f(bxcSpaceID,hdfError)
     229          21 :          CALL io_write_complex3(bxcSetID,[-1,1,1,1],dimsInt(:4),"data",bxc_lm)
     230          21 :          CALL h5dclose_f(bxcSetID, hdfError)
     231             : 
     232          63 :          CALL h5gclose_f(bxcGroupID, hdfError)
     233             :       endif
     234             : 
     235          21 :       CALL h5gclose_f(generalGroupID, hdfError)
     236             : 
     237          42 :    END SUBROUTINE openGreensFFile
     238             : 
     239          21 :    SUBROUTINE closeGreensFFile(fileID)
     240             : 
     241             :       INTEGER(HID_T), INTENT(IN)  :: fileID
     242             : 
     243             :       INTEGER hdfError
     244             : 
     245          21 :       CALL h5fclose_f(fileID, hdfError)
     246             : 
     247          21 :    END SUBROUTINE closeGreensFFile
     248             : 
     249          21 :    SUBROUTINE writeGreensFData(fileID, input, gfinp, atoms, nococonv, noco, cell, archiveType, greensf, mmpmat, selfen,&
     250          21 :                                u, udot, ulo)
     251             : 
     252             :       INTEGER(HID_T),   INTENT(IN) :: fileID
     253             :       TYPE(t_input),    INTENT(IN) :: input
     254             :       TYPE(t_gfinp),    INTENT(IN) :: gfinp
     255             :       TYPE(t_atoms),    INTENT(IN) :: atoms
     256             :       TYPE(t_nococonv), INTENT(IN) :: nococonv
     257             :       TYPE(t_noco),     INTENT(IN) :: noco
     258             :       TYPE(t_cell),     INTENT(IN) :: cell
     259             :       TYPE(t_greensf),  INTENT(IN) :: greensf(:)
     260             :       INTEGER,          INTENT(IN) :: archiveType
     261             :       COMPLEX,          INTENT(IN) :: mmpmat(-lmaxU_Const:,-lmaxU_Const:,:,:)
     262             : 
     263             :       TYPE(t_selfen),   OPTIONAL, INTENT(IN) :: selfen(:) !Only in IO mode for Hubbard 1
     264             :       REAL,             OPTIONAL, INTENT(IN) :: u(:,:,0:,:,:)      !Radial Functions for IO
     265             :       REAL,             OPTIONAL, INTENT(IN) :: udot(:,:,0:,:,:)
     266             :       REAL,             OPTIONAL, INTENT(IN) :: ulo(:,:,:,:,:)
     267             : 
     268             :       INTEGER(HID_T)    :: elementsGroupID,contoursGroupID,radialGroupID
     269             :       INTEGER(HID_T)    :: currentelementGroupID,currentcontourGroupID
     270             :       INTEGER(HID_T)    :: mmpmatSpaceID, mmpmatSetID
     271             :       INTEGER(HID_T)    :: selfenDataSpaceID, selfenDataSetID
     272             :       INTEGER(HID_T)    :: energyPointsSpaceID, energyPointsSetID
     273             :       INTEGER(HID_T)    :: energyWeightsSpaceID, energyWeightsSetID
     274             :       INTEGER(HID_T)    :: uDataSpaceID,uDataSetID
     275             :       INTEGER(HID_T)    :: udotDataSpaceID,udotDataSetID
     276             :       INTEGER(HID_T)    :: uloDataSpaceID,uloDataSetID
     277             :       INTEGER(HID_T)    :: nLODataSpaceID,nLODataSetID
     278             :       INTEGER(HID_T)    :: lLODataSpaceID,lLODataSetID
     279             :       INTEGER(HID_T)    :: DataSpaceID, DataSetID
     280             : 
     281             :       CHARACTER(len=30) :: elementName, groupName, shapeStr
     282             :       INTEGER           :: hdfError
     283             :       INTEGER           :: dimsInt(7)
     284             :       INTEGER           :: ispin,m,jspinsOut,iContour
     285             :       INTEGER           :: i_elem,i,iContourOut,nLO
     286          21 :       INTEGER           :: contour_mapping(gfinp%numberContours)
     287             :       INTEGER(HSIZE_T)  :: dims(7)
     288             :       COMPLEX           :: trc(3)
     289             :       LOGICAL           :: l_anyradial
     290          21 :       TYPE(t_greensf)   :: gfOut
     291             : 
     292             : 
     293          44 :       contour_mapping = -1
     294          21 :       jspinsOut = MERGE(3,input%jspins,gfinp%l_mperp)
     295             : 
     296             :       !Check dimensions of mmpmat and selfen
     297          21 :       IF(SIZE(mmpmat,3) /= SIZE(greensf)) CALL juDFT_error("Mismatch in sizes: mmpmat", calledby="writeGreensFData")
     298          21 :       IF(PRESENT(selfen)) THEN
     299           0 :          IF(SIZE(selfen) /= SIZE(greensf)) CALL juDFT_error("Mismatch in sizes: selfen", calledby="writeGreensFData")
     300           0 :          IF(archiveType /= GREENSF_HUBBARD_CONST) CALL juDFT_error("Wrong archiveType for selfen", calledby="writeGreensFData")
     301             :       ENDIF
     302             : 
     303          21 :       IF(PRESENT(u)) THEN
     304          21 :          IF(archiveType /= GREENSF_GENERAL_CONST) CALL juDFT_error("Wrong archiveType for u", calledby="writeGreensFData")
     305          21 :          IF(.NOT.PRESENT(udot)) CALL juDFT_error("udot not provided (u is present)", calledby="writeGreensFData")
     306             :       ENDIF
     307             : 
     308             :       !--> Start: Energy Contour Output
     309          21 :       CALL h5gcreate_f(fileID, '/EnergyContours', contoursGroupID, hdfError)
     310             : 
     311          21 :       iContourOut = 0
     312          44 :       DO iContour = 1, gfinp%numberContours
     313             :          !Find a greens function element which has this contour (if not skip)
     314          23 :          i_elem = -1
     315          26 :          DO i = 1, SIZE(greensf)
     316          26 :             IF(iContour == greensf(i)%elem%iContour) THEN
     317          23 :                i_elem = i
     318          23 :                EXIT
     319             :             ENDIF
     320             :          ENDDO
     321             : 
     322          23 :          IF(i_elem==-1) CYCLE
     323             : 
     324          23 :          iContourOut = iContourOut + 1
     325          23 :          WRITE(elementName,100) iContourOut
     326             : 100      FORMAT('contour-',i0)
     327          23 :          contour_mapping(iContour) = iContourOut
     328             : 
     329          23 :          CALL h5gcreate_f(contoursGroupID, elementName, currentcontourGroupID, hdfError)
     330             : 
     331          23 :          CALL io_write_attint0(currentcontourGroupID,'nz',greensf(i_elem)%contour%nz)
     332             : 
     333          24 :          SELECT CASE (gfinp%contour(iContour)%shape)
     334             : 
     335             :          CASE(CONTOUR_RECTANGLE_CONST)
     336           1 :             shapeStr = 'Rectangle'
     337             :          CASE(CONTOUR_SEMICIRCLE_CONST)
     338          21 :             shapeStr = 'Semicircle'
     339             :          CASE(CONTOUR_DOS_CONST)
     340          23 :             shapeStr = 'DOS'
     341             :          CASE DEFAULT
     342             :          END SELECT
     343             : 
     344          23 :          CALL io_write_attchar0(currentcontourGroupID,'contourShape',TRIM(ADJUSTL(shapeStr)))
     345          23 :          CALL io_write_attchar0(currentcontourGroupID,'contourLabel',TRIM(ADJUSTL(gfinp%contour(iContour)%label)))
     346             : 
     347          69 :          dims(:2)=[2,greensf(i_elem)%contour%nz]
     348         184 :          dimsInt=dims
     349          23 :          CALL h5screate_simple_f(2,dims(:2),energyPointsSpaceID,hdfError)
     350          23 :          CALL h5dcreate_f(currentcontourGroupID, "ContourPoints", H5T_NATIVE_DOUBLE, energyPointsSpaceID, energyPointsSetID, hdfError)
     351          23 :          CALL h5sclose_f(energyPointsSpaceID,hdfError)
     352          23 :          CALL io_write_complex1(energyPointsSetID,[-1,1],dimsInt(:2),"ContourPoints",greensf(i_elem)%contour%e)
     353          23 :          CALL h5dclose_f(energyPointsSetID, hdfError)
     354          69 :          dims(:2)=[2,greensf(i_elem)%contour%nz]
     355         184 :          dimsInt=dims
     356          23 :          CALL h5screate_simple_f(2,dims(:2),energyWeightsSpaceID,hdfError)
     357          23 :          CALL h5dcreate_f(currentcontourGroupID, "IntegrationWeights", H5T_NATIVE_DOUBLE, energyWeightsSpaceID, energyWeightsSetID, hdfError)
     358          23 :          CALL h5sclose_f(energyWeightsSpaceID,hdfError)
     359          23 :          CALL io_write_complex1(energyWeightsSetID,[-1,1],dimsInt(:2),"IntegrationWeights",greensf(i_elem)%contour%de)
     360          23 :          CALL h5dclose_f(energyWeightsSetID, hdfError)
     361             : 
     362         136 :          CALL h5gclose_f(currentcontourGroupID, hdfError)
     363             :       ENDDO
     364          21 :       CALL io_write_attint0(contoursGroupID,'NumContours',iContourOut)
     365          21 :       CALL h5gclose_f(contoursGroupID, hdfError)
     366             :       !--> End: Energy Contour Output
     367             : 
     368             : 
     369             :       !--> Start: GF data output
     370          42 :       SELECT CASE(archiveType)
     371             : 
     372             :       CASE(GREENSF_GENERAL_CONST)
     373          21 :          groupName = '/GreensFunctionElements'
     374             :       CASE(GREENSF_HUBBARD_CONST)
     375           0 :          groupName = '/Hubbard1Elements'
     376             :       CASE DEFAULT
     377          21 :          CALL juDFT_error("Unknown GF archiveType", calledby="writeGreensFData")
     378             :       END SELECT
     379             : 
     380          21 :       CALL h5gcreate_f(fileID, TRIM(ADJUSTL(groupName)), elementsGroupID, hdfError)
     381          21 :       CALL io_write_attint0(elementsGroupID,'NumElements',SIZE(greensf))
     382          21 :       CALL io_write_attint0(elementsGroupID,'maxl',lmaxU_Const)
     383             : 
     384             : 
     385          21 :       l_anyradial = .FALSE.
     386         530 :       DO i_elem = 1, SIZE(greensf)
     387             : 
     388         509 :          WRITE(elementName,200) i_elem
     389             : 200      FORMAT('element-',i0)
     390             : 
     391         509 :          IF(.NOT.greensf(i_elem)%l_sphavg.AND.gfinp%l_outputSphavg) THEN
     392           0 :             gfOut = greensf(i_elem)%integrateoverMT(atoms,input,gfinp,u,udot,ulo,l_fullRadial=gfinp%l_intFullRadial)
     393             :          ELSE
     394         509 :             gfOut = greensf(i_elem)
     395             :          ENDIF
     396             : 
     397         509 :          CALL h5gcreate_f(elementsGroupID, elementName, currentelementGroupID, hdfError)
     398         509 :          nLO = greensf(i_elem)%elem%countLOs(atoms)
     399         509 :          IF(nLO>0 .AND..NOT.gfOut%l_sphavg.AND.PRESENT(u).AND..NOT.PRESENT(ulo)) THEN
     400           0 :             CALL juDFT_error("LO Radial Functions needed, but not present", calledby="writeGreensFData")
     401             :          ENDIF
     402         509 :          IF(.NOT.gfOut%l_sphavg) l_anyradial = .TRUE.
     403             : 
     404             :          !Trace of occupation matrix
     405         509 :          trc=0.0
     406        1531 :          DO ispin = 1, jspinsOut
     407        6653 :             DO m = -gfOut%elem%l, gfOut%elem%l
     408        6144 :                trc(ispin) = trc(ispin) + mmpmat(m,m,i_elem,ispin)
     409             :             ENDDO
     410             :          ENDDO
     411         509 :          CALL io_write_attreal0(currentelementGroupID,"SpinUpTrace",REAL(trc(1)))
     412         509 :          IF(input%jspins.EQ.2) THEN
     413         509 :             CALL io_write_attreal0(currentelementGroupID,"SpinDownTrace",REAL(trc(2)))
     414             :          ENDIF
     415         509 :          IF(gfinp%l_mperp) THEN
     416           4 :             CALL io_write_attreal0(currentelementGroupID,"OffDTrace-x",REAL(trc(3)))
     417           4 :             CALL io_write_attreal0(currentelementGroupID,"OffDTrace-y",AIMAG(trc(3)))
     418             :          ENDIF
     419             : 
     420         509 :          CALL writeGreensFElement(currentelementGroupID, gfOut, atoms, nococonv, noco, cell, jspinsOut, contour_mapping)
     421             : 
     422             :          !Occupation matrix
     423        2545 :          dims(:4)=[2,2*lmaxU_Const+1,2*lmaxU_Const+1,jspinsOut]
     424        4072 :          dimsInt=dims
     425         509 :          CALL h5screate_simple_f(4,dims(:4),mmpmatSpaceID,hdfError)
     426         509 :          CALL h5dcreate_f(currentelementGroupID, "mmpmat", H5T_NATIVE_DOUBLE, mmpmatSpaceID, mmpmatSetID, hdfError)
     427         509 :          CALL h5sclose_f(mmpmatSpaceID,hdfError)
     428         509 :          CALL io_write_complex3(mmpmatSetID,[-1,1,1,1],dimsInt(:4),"mmpmat",mmpmat(:,:,i_elem,:jspinsOut))
     429         509 :          CALL h5dclose_f(mmpmatSetID, hdfError)
     430             : 
     431         509 :          IF(archiveType.EQ.GREENSF_HUBBARD_CONST.AND.PRESENT(selfen)) THEN
     432           0 :             dims(:5)=[2,2*(2*lmaxU_Const+1),2*(2*selfen(i_elem)%l+1),greensf(i_elem)%contour%nz,2]
     433           0 :             dimsInt=dims
     434           0 :             CALL h5screate_simple_f(5,dims(:5),selfenDataSpaceID,hdfError)
     435           0 :             CALL h5dcreate_f(currentelementGroupID, "selfen", H5T_NATIVE_DOUBLE, selfenDataSpaceID, selfenDataSetID, hdfError)
     436           0 :             CALL h5sclose_f(selfenDataSpaceID,hdfError)
     437           0 :             CALL io_write_complex4(selfenDataSetID,[-1,1,1,1,1],dimsInt(:5),"selfen",selfen(i_elem)%data)
     438           0 :             CALL h5dclose_f(selfenDataSetID, hdfError)
     439             :          ENDIF
     440             : 
     441        2057 :          CALL h5gclose_f(currentelementGroupID, hdfError)
     442             :       ENDDO
     443             : 
     444          21 :       CALL h5gclose_f(elementsGroupID, hdfError)
     445             :       !--> End: GF data output
     446             : 
     447             :       !--> Start: Radial Function output
     448          21 :       IF(PRESENT(u)) THEN
     449          21 :          CALL h5gcreate_f(fileID, 'RadialFunctions', radialGroupID, hdfError)
     450             : 
     451          63 :          dims(:2)=[atoms%jmtd,atoms%ntype]
     452         168 :          dimsInt=dims
     453          21 :          CALL h5screate_simple_f(2,dims(:2),DataSpaceID,hdfError)
     454          21 :          CALL h5dcreate_f(radialGroupID, "rmsh", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     455          21 :          CALL h5sclose_f(DataSpaceID,hdfError)
     456          21 :          CALL io_write_real2(DataSetID,[1,1],dimsInt(:2),"rmsh",atoms%rmsh)
     457          21 :          CALL h5dclose_f(DataSetID, hdfError)
     458             : 
     459          42 :          dims(:1)=[atoms%ntype]
     460         168 :          dimsInt=dims
     461          21 :          CALL h5screate_simple_f(1,dims(:1),DataSpaceID,hdfError)
     462          21 :          CALL h5dcreate_f(radialGroupID, "jri", H5T_NATIVE_INTEGER, DataSpaceID, DataSetID, hdfError)
     463          21 :          CALL h5sclose_f(DataSpaceID,hdfError)
     464          21 :          CALL io_write_integer1(DataSetID,[1],dimsInt(:1),"jri",atoms%jri)
     465          21 :          CALL h5dclose_f(DataSetID, hdfError)
     466             : 
     467         126 :          dims(:5)=[atoms%jmtd,2,lmaxU_Const+1,input%jspins,atoms%ntype]
     468         168 :          dimsInt=dims
     469          21 :          CALL h5screate_simple_f(5,dims(:5),uDataSpaceID,hdfError)
     470          21 :          CALL h5dcreate_f(radialGroupID, "u", H5T_NATIVE_DOUBLE, uDataSpaceID, uDataSetID, hdfError)
     471          21 :          CALL h5sclose_f(uDataSpaceID,hdfError)
     472          21 :          CALL io_write_real5(uDataSetID,[1,1,1,1,1],dimsInt(:5),"u",u(:,:,0:lmaxU_Const,:,:))
     473          21 :          CALL h5dclose_f(uDataSetID, hdfError)
     474             : 
     475         126 :          dims(:5)=[atoms%jmtd,2,lmaxU_Const+1,input%jspins,atoms%ntype]
     476         168 :          dimsInt=dims
     477          21 :          CALL h5screate_simple_f(5,dims(:5),udotDataSpaceID,hdfError)
     478          21 :          CALL h5dcreate_f(radialGroupID, "udot", H5T_NATIVE_DOUBLE, udotDataSpaceID, udotDataSetID, hdfError)
     479          21 :          CALL h5sclose_f(udotDataSpaceID,hdfError)
     480          21 :          CALL io_write_real5(udotDataSetID,[1,1,1,1,1],dimsInt(:5),"udot",udot(:,:,0:lmaxU_Const,:,:))
     481          21 :          CALL h5dclose_f(udotDataSetID, hdfError)
     482             : 
     483          21 :          IF(PRESENT(ulo)) THEN
     484             :             !Mapping array
     485          42 :             dims(:1) = [atoms%ntype]
     486         168 :             dimsInt=dims
     487          21 :             CALL h5screate_simple_f(1,dims(:1),nLODataSpaceID,hdfError)
     488          21 :             CALL h5dcreate_f(radialGroupID, "nlo", H5T_NATIVE_INTEGER, nLODataSpaceID, nLODataSetID, hdfError)
     489          21 :             CALL h5sclose_f(nLODataSpaceID,hdfError)
     490          21 :             CALL io_write_integer1(nLODataSetID,[1],dimsInt(:1),"nlo",atoms%nlo)
     491          21 :             CALL h5dclose_f(nLODataSetID, hdfError)
     492             : 
     493          63 :             dims(:2) = [atoms%nlod,atoms%ntype]
     494         168 :             dimsInt=dims
     495          21 :             CALL h5screate_simple_f(2,dims(:2),lLODataSpaceID,hdfError)
     496          21 :             CALL h5dcreate_f(radialGroupID, "llo", H5T_NATIVE_INTEGER, lLODataSpaceID, lLODataSetID, hdfError)
     497          21 :             CALL h5sclose_f(lLODataSpaceID,hdfError)
     498          21 :             CALL io_write_integer2(lLODataSetID,[1,1],dimsInt(:2),"llo",atoms%llo)
     499          21 :             CALL h5dclose_f(lLODataSetID, hdfError)
     500             : 
     501         126 :             dims(:5)=[atoms%jmtd,2,atoms%nlod,input%jspins,atoms%ntype]
     502         168 :             dimsInt=dims
     503          21 :             CALL h5screate_simple_f(5,dims(:5),uloDataSpaceID,hdfError)
     504          21 :             CALL h5dcreate_f(radialGroupID, "ulo", H5T_NATIVE_DOUBLE, uloDataSpaceID, uloDataSetID, hdfError)
     505          21 :             CALL h5sclose_f(uloDataSpaceID,hdfError)
     506          21 :             CALL io_write_real5(uloDataSetID,[1,1,1,1,1],dimsInt(:5),"ulo",ulo)
     507          21 :             CALL h5dclose_f(uloDataSetID, hdfError)
     508             :          ENDIF
     509             : 
     510          21 :          CALL h5gclose_f(radialGroupID, hdfError)
     511             :       ENDIF
     512             :       !--> End: Radial Function output
     513             : 
     514             : 
     515          21 :    END SUBROUTINE writeGreensFData
     516             : 
     517         509 :    SUBROUTINE writeGreensFElement(groupID, g, atoms, nococonv, noco, cell, jspins, contour_mapping)
     518             : 
     519             :       INTEGER(HID_T),   INTENT(IN)  :: groupID
     520             :       TYPE(t_greensf),  INTENT(IN)  :: g
     521             :       TYPE(t_atoms),    INTENT(IN)  :: atoms
     522             :       TYPE(t_nococonv), INTENT(IN)  :: nococonv
     523             :       TYPE(t_noco),     INTENT(IN)  :: noco
     524             :       TYPE(t_cell),     INTENT(IN)  :: cell
     525             :       INTEGER,          INTENT(IN)  :: jspins
     526             :       INTEGER,          INTENT(IN)  :: contour_mapping(:)
     527             : 
     528             : 
     529             :       CHARACTER(len=30) :: groupName, datasetName
     530             :       INTEGER :: dimsInt(7)
     531             :       INTEGER(HSIZE_T)  :: dims(7)
     532             :       INTEGER(HID_T) :: DataSpaceID, DataSetID
     533             :       INTEGER(HID_T)    :: loGroupID,currentloGroupID, scalarGroupID
     534             :       INTEGER :: hdfError,ikpt
     535             :       INTEGER :: nLO, iLO, iLOp
     536             :       REAL    :: alpha, alphap, beta, betap
     537             : 
     538         509 :       alpha=0.0; alphap=0.0
     539         509 :       beta=0.0; betap=0.0
     540         509 :       IF(noco%l_noco) THEN
     541           6 :          alpha = nococonv%alph(g%elem%atomType)
     542           6 :          alphap = nococonv%alph(g%elem%atomTypep)
     543           6 :          beta = nococonv%beta(g%elem%atomType)
     544           6 :          betap = nococonv%beta(g%elem%atomTypep)
     545         503 :       ELSE IF(noco%l_soc) THEN
     546           4 :          alpha=nococonv%phi; alphap=nococonv%phi
     547           4 :          beta=nococonv%theta; betap=nococonv%theta
     548             :       ENDIF
     549             : 
     550         509 :       CALL io_write_attint0(groupID,"l",g%elem%l)
     551         509 :       CALL io_write_attint0(groupID,"lp",g%elem%lp)
     552         509 :       CALL io_write_attint0(groupID,"atomType",g%elem%atomType)
     553         509 :       CALL io_write_attint0(groupID,"atomTypep",g%elem%atomTypep)
     554         509 :       CALL io_write_attreal0(groupID,"alpha", alpha)
     555         509 :       CALL io_write_attreal0(groupID,"alphap", alphap)
     556         509 :       CALL io_write_attreal0(groupID,"beta", beta)
     557         509 :       CALL io_write_attreal0(groupID,"betap", betap)
     558             :       !The two attributes below are constant at the moment, but putting them in
     559             :       !means that the conventions can be changed without disrupting everything outside fleur
     560         509 :       CALL io_write_attlog0(groupID,"local_spin_frame", .TRUE.)
     561        1018 :       CALL io_write_attlog0(groupID,"local_real_frame", .NOT.(g%elem%isIntersite().and.noco%l_noco))
     562         509 :       IF(g%elem%atom/=0) THEN
     563         470 :          CALL io_write_attchar0(groupID,"atom",TRIM(ADJUSTL(atoms%label(g%elem%atom))))
     564         470 :          CALL io_write_attchar0(groupID,"atomp",TRIM(ADJUSTL(atoms%label(g%elem%atomp))))
     565             :       ELSE
     566          39 :          CALL io_write_attchar0(groupID,"atom",'0')
     567          39 :          CALL io_write_attchar0(groupID,"atomp",'0')
     568             :       ENDIF
     569         509 :       CALL io_write_attint0(groupID,'iContour',contour_mapping(g%elem%iContour))
     570         509 :       CALL io_write_attlog0(groupID,'l_onsite',.NOT.g%elem%isOffDiag())
     571         509 :       CALL io_write_attlog0(groupID,'l_sphavg',g%l_sphavg)
     572         509 :       CALL io_write_attlog0(groupID,'l_kresolved',g%elem%l_kresolved)
     573        6617 :       CALL io_write_attreal1(groupID,'atomDiff',matmul(cell%amat,g%elem%atomDiff))
     574         509 :       nLO = g%elem%countLOs(atoms)
     575         509 :       CALL io_write_attint0(groupID,'numLOs',nLO)
     576             : 
     577         509 :       IF(g%l_sphavg.AND..NOT.g%l_kresolved) THEN
     578             : 
     579        3521 :          dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     580        4024 :          dimsInt=dims
     581         503 :          CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     582         503 :          CALL h5dcreate_f(groupID, "sphavg", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     583         503 :          CALL h5sclose_f(DataSpaceID,hdfError)
     584         503 :          CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"gmmpmat",g%gmmpmat)
     585         503 :          CALL h5dclose_f(DataSetID, hdfError)
     586             : 
     587           6 :       ELSE IF(g%l_kresolved) THEN
     588           0 :          dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     589           0 :          dimsInt=dims
     590           0 :          DO ikpt = 1, SIZE(g%gmmpmat_k,6)
     591           0 :             WRITE(datasetName,201) ikpt
     592             : 201         FORMAT('kresolved-',i0)
     593           0 :             CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     594           0 :             CALL h5dcreate_f(groupID, TRIM(ADJUSTL(datasetName)), H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     595           0 :             CALL h5sclose_f(DataSpaceID,hdfError)
     596           0 :             CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"gmmpmat_k",g%gmmpmat_k(:,:,:,:,:,ikpt))
     597           0 :             CALL h5dclose_f(DataSetID, hdfError)
     598             :          ENDDO
     599             :       ELSE
     600             : 
     601             :          !--> Start: Radial Coefficients
     602          42 :          dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     603          48 :          dimsInt=dims
     604           6 :          CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     605           6 :          CALL h5dcreate_f(groupID, "uu", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     606           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     607           6 :          CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"uu",g%uu)
     608           6 :          CALL h5dclose_f(DataSetID, hdfError)
     609             : 
     610          42 :          dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     611          48 :          dimsInt=dims
     612           6 :          CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     613           6 :          CALL h5dcreate_f(groupID, "ud", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     614           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     615           6 :          CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"ud",g%ud)
     616           6 :          CALL h5dclose_f(DataSetID, hdfError)
     617             : 
     618          42 :          dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     619          48 :          dimsInt=dims
     620           6 :          CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     621           6 :          CALL h5dcreate_f(groupID, "du", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     622           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     623           6 :          CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"du",g%du)
     624           6 :          CALL h5dclose_f(DataSetID, hdfError)
     625             : 
     626          42 :          dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     627          48 :          dimsInt=dims
     628           6 :          CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     629           6 :          CALL h5dcreate_f(groupID, "dd", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     630           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     631           6 :          CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"dd",g%dd)
     632           6 :          CALL h5dclose_f(DataSetID, hdfError)
     633             :          !--> End: Radial Coefficients
     634             : 
     635             :          !--> Start: LO Coefficients
     636           6 :          IF(nLO>0) THEN
     637             : 
     638           4 :             CALL h5gcreate_f(groupID, 'LOcontribution', loGroupID, hdfError)
     639           9 :             DO iLO = 1, nLO
     640           5 :                WRITE(groupName,300) iLO
     641             : 300            FORMAT('lo-',i0)
     642           5 :                CALL h5gcreate_f(loGroupID, groupName, currentloGroupID, hdfError)
     643             : 
     644          35 :                dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     645          40 :                dimsInt=dims
     646           5 :                CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     647           5 :                CALL h5dcreate_f(currentloGroupID, "uulo", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     648           5 :                CALL h5sclose_f(DataSpaceID,hdfError)
     649           5 :                CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"uulo",g%uulo(:,:,:,iLO,:,:))
     650           5 :                CALL h5dclose_f(DataSetID, hdfError)
     651             : 
     652          35 :                dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     653          40 :                dimsInt=dims
     654           5 :                CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     655           5 :                CALL h5dcreate_f(currentloGroupID, "ulou", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     656           5 :                CALL h5sclose_f(DataSpaceID,hdfError)
     657           5 :                CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"ulou",g%ulou(:,:,:,iLO,:,:))
     658           5 :                CALL h5dclose_f(DataSetID, hdfError)
     659             : 
     660          35 :                dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     661          40 :                dimsInt=dims
     662           5 :                CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     663           5 :                CALL h5dcreate_f(currentloGroupID, "dulo", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     664           5 :                CALL h5sclose_f(DataSpaceID,hdfError)
     665           5 :                CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"dulo",g%dulo(:,:,:,iLO,:,:))
     666           5 :                CALL h5dclose_f(DataSetID, hdfError)
     667             : 
     668          35 :                dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     669          40 :                dimsInt=dims
     670           5 :                CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     671           5 :                CALL h5dcreate_f(currentloGroupID, "ulod", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     672           5 :                CALL h5sclose_f(DataSpaceID,hdfError)
     673           5 :                CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"ulod",g%ulod(:,:,:,iLO,:,:))
     674           5 :                CALL h5dclose_f(DataSetID, hdfError)
     675             : 
     676             : 
     677          12 :                DO iLop = 1, nLO
     678           7 :                   WRITE(datasetName,400) iLop
     679             : 400               FORMAT('uloulop-',i0)
     680             : 
     681          49 :                   dims(:6)=[2,g%contour%nz,2*lmaxU_Const+1,2*lmaxU_Const+1,jspins,2]
     682          56 :                   dimsInt=dims
     683           7 :                   CALL h5screate_simple_f(6,dims(:6),DataSpaceID,hdfError)
     684           7 :                   CALL h5dcreate_f(currentloGroupID, TRIM(ADJUSTL(datasetName)), H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     685           7 :                   CALL h5sclose_f(DataSpaceID,hdfError)
     686           7 :                   CALL io_write_complex5(DataSetID,[-1,1,1,1,1,1],dimsInt(:6),"uloulop",g%uloulop(:,:,:,iLO,iLOp,:,:))
     687          19 :                   CALL h5dclose_f(DataSetID, hdfError)
     688             :                ENDDO
     689          54 :                CALL h5gclose_f(currentloGroupID, hdfError)
     690             : 
     691             :             ENDDO
     692           4 :             CALL h5gclose_f(loGroupID, hdfError)
     693             :             !--> End: LO Coefficients
     694             :          ENDIF
     695             : 
     696             :          !--> Start: Scalar Products
     697           6 :          CALL h5gcreate_f(groupID, 'scalarProducts', scalarGroupID, hdfError)
     698             : 
     699          18 :          dims(:2)=[2,2]
     700          48 :          dimsInt=dims
     701           6 :          CALL h5screate_simple_f(2,dims(:2),DataSpaceID,hdfError)
     702           6 :          CALL h5dcreate_f(scalarGroupID, "uun", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     703           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     704           6 :          CALL io_write_real2(DataSetID,[1,1],dimsInt(:2),"uun",g%scalarProducts%uun)
     705           6 :          CALL h5dclose_f(DataSetID, hdfError)
     706             : 
     707          18 :          dims(:2)=[2,2]
     708          48 :          dimsInt=dims
     709           6 :          CALL h5screate_simple_f(2,dims(:2),DataSpaceID,hdfError)
     710           6 :          CALL h5dcreate_f(scalarGroupID, "dun", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     711           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     712           6 :          CALL io_write_real2(DataSetID,[1,1],dimsInt(:2),"dun",g%scalarProducts%dun)
     713           6 :          CALL h5dclose_f(DataSetID, hdfError)
     714             : 
     715          18 :          dims(:2)=[2,2]
     716          48 :          dimsInt=dims
     717           6 :          CALL h5screate_simple_f(2,dims(:2),DataSpaceID,hdfError)
     718           6 :          CALL h5dcreate_f(scalarGroupID, "udn", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     719           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     720           6 :          CALL io_write_real2(DataSetID,[1,1],dimsInt(:2),"udn",g%scalarProducts%udn)
     721           6 :          CALL h5dclose_f(DataSetID, hdfError)
     722             : 
     723          18 :          dims(:2)=[2,2]
     724          48 :          dimsInt=dims
     725           6 :          CALL h5screate_simple_f(2,dims(:2),DataSpaceID,hdfError)
     726           6 :          CALL h5dcreate_f(scalarGroupID, "ddn", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     727           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     728           6 :          CALL io_write_real2(DataSetID,[1,1],dimsInt(:2),"ddn",g%scalarProducts%ddn)
     729           6 :          CALL h5dclose_f(DataSetID, hdfError)
     730             : 
     731          24 :          dims(:3)=[atoms%nlod,2,2]
     732          48 :          dimsInt=dims
     733           6 :          CALL h5screate_simple_f(3,dims(:3),DataSpaceID,hdfError)
     734           6 :          CALL h5dcreate_f(scalarGroupID, "uulon", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     735           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     736           6 :          CALL io_write_real3(DataSetID,[1,1,1],dimsInt(:3),"uulon",g%scalarProducts%uulon)
     737           6 :          CALL h5dclose_f(DataSetID, hdfError)
     738             : 
     739          24 :          dims(:3)=[atoms%nlod,2,2]
     740          48 :          dimsInt=dims
     741           6 :          CALL h5screate_simple_f(3,dims(:3),DataSpaceID,hdfError)
     742           6 :          CALL h5dcreate_f(scalarGroupID, "uloun", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     743           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     744           6 :          CALL io_write_real3(DataSetID,[1,1,1],dimsInt(:3),"uloun",g%scalarProducts%uloun)
     745           6 :          CALL h5dclose_f(DataSetID, hdfError)
     746             : 
     747          24 :          dims(:3)=[atoms%nlod,2,2]
     748          48 :          dimsInt=dims
     749           6 :          CALL h5screate_simple_f(3,dims(:3),DataSpaceID,hdfError)
     750           6 :          CALL h5dcreate_f(scalarGroupID, "dulon", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     751           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     752           6 :          CALL io_write_real3(DataSetID,[1,1,1],dimsInt(:3),"dulon",g%scalarProducts%dulon)
     753           6 :          CALL h5dclose_f(DataSetID, hdfError)
     754             : 
     755          24 :          dims(:3)=[atoms%nlod,2,2]
     756          48 :          dimsInt=dims
     757           6 :          CALL h5screate_simple_f(3,dims(:3),DataSpaceID,hdfError)
     758           6 :          CALL h5dcreate_f(scalarGroupID, "ulodn", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     759           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     760           6 :          CALL io_write_real3(DataSetID,[1,1,1],dimsInt(:3),"ulodn",g%scalarProducts%ulodn)
     761           6 :          CALL h5dclose_f(DataSetID, hdfError)
     762             : 
     763          30 :          dims(:4)=[atoms%nlod,atoms%nlod,2,2]
     764          48 :          dimsInt=dims
     765           6 :          CALL h5screate_simple_f(4,dims(:4),DataSpaceID,hdfError)
     766           6 :          CALL h5dcreate_f(scalarGroupID, "uloulopn", H5T_NATIVE_DOUBLE, DataSpaceID, DataSetID, hdfError)
     767           6 :          CALL h5sclose_f(DataSpaceID,hdfError)
     768           6 :          CALL io_write_real4(DataSetID,[1,1,1,1],dimsInt(:4),"uloulopn",g%scalarProducts%uloulopn)
     769           6 :          CALL h5dclose_f(DataSetID, hdfError)
     770             : 
     771           6 :          CALL h5gclose_f(scalarGroupID, hdfError)
     772             :          !--> End: Scalar Products
     773             : 
     774             :       ENDIF
     775             : 
     776         509 :    END SUBROUTINE writeGreensFElement
     777             : 
     778           0 :    SUBROUTINE io_write_string1(datasetID,dims,stringLength,dataArray)
     779             : 
     780             :       USE hdf5
     781             :       USE m_hdf_tools4
     782             : 
     783             :       IMPLICIT NONE
     784             : 
     785             :       INTEGER(HID_T),              INTENT(IN) :: datasetID
     786             :       INTEGER,                     INTENT(IN) :: dims(1)
     787             :       INTEGER,                     INTENT(IN) :: stringLength
     788             :       CHARACTER(LEN=stringLength), INTENT(IN) :: dataArray(:)
     789             : 
     790             :       INTEGER          :: hdfError
     791             :       INTEGER(HID_T)   :: dataspaceID, memSpaceID
     792             :       INTEGER(HID_T)   :: stringTypeID
     793             :       INTEGER(HID_t)   :: trans
     794             :       INTEGER(HSIZE_t) :: memOffset(1), fncount(1)
     795             :       INTEGER(HSIZE_t) :: dimsHDF(1)
     796             :       INTEGER(SIZE_T)  :: stringLengthHDF
     797             : 
     798           0 :       stringLengthHDF = stringLength
     799           0 :       dimsHDF(:) = dims(:)
     800           0 :       memOffset(:) = 0
     801           0 :       fnCount(:) = dims(:)
     802             : 
     803           0 :       trans = gettransprop()
     804             : 
     805           0 :       CALL h5tcopy_f(H5T_NATIVE_CHARACTER, stringTypeID, hdfError)
     806           0 :       CALL h5tset_size_f(stringTypeID, stringLengthHDF, hdfError)
     807           0 :       CALL h5tset_strpad_f(stringTypeID, H5T_STR_SPACEPAD_F, hdfError)
     808           0 :       CALL h5tset_cset_f(stringTypeID, H5T_CSET_ASCII_F, hdfError)
     809             : 
     810           0 :       CALL h5dget_space_f(datasetID,dataspaceID,hdfError)
     811           0 :       CALL h5sselect_hyperslab_f(dataspaceID,H5S_SELECT_SET_F,memOffset,fncount,hdfError)
     812           0 :       CALL h5screate_simple_f(1,dimsHDF,memSpaceID,hdfError)
     813           0 :       CALL h5dwrite_f(datasetID,stringTypeID,dataArray,dimsHDF,hdfError,memSpaceID,dataspaceID,trans)
     814           0 :       CALL h5sclose_f(memSpaceID,hdfError)
     815           0 :       CALL h5sclose_f(dataspaceID,hdfError)
     816           0 :       CALL cleartransprop(trans)
     817             : 
     818           0 :       CALL h5tclose_f(stringTypeID,hdfError)
     819             : 
     820           0 :       CALL io_check("io_write_string1 !",hdfError)
     821             : 
     822           0 :    END SUBROUTINE io_write_string1
     823             : 
     824             : #endif
     825             : 
     826             : END MODULE m_greensf_io

Generated by: LCOV version 1.14