leapIO_hdf5 Module

This module defines objects and methods to read/write data in the HDF5 format into LEAP.



Uses

  • module~~leapio_hdf5~~UsesGraph module~leapio_hdf5 leapIO_hdf5 hdf5 hdf5 module~leapio_hdf5->hdf5 module~leapkinds leapKinds module~leapio_hdf5->module~leapkinds module~leapparallel leapParallel module~leapio_hdf5->module~leapparallel module~leaputils leapUtils module~leapio_hdf5->module~leaputils iso_fortran_env iso_fortran_env module~leapkinds->iso_fortran_env module~leapparallel->module~leapkinds module~leapparallel->iso_fortran_env mpi_f08 mpi_f08 module~leapparallel->mpi_f08 module~leaputils->module~leapkinds

Used by

  • module~~leapio_hdf5~~UsedByGraph module~leapio_hdf5 leapIO_hdf5 module~leapblock leapBlock module~leapblock->module~leapio_hdf5 module~leapio leapIO module~leapio->module~leapio_hdf5 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio_h5hut->module~leapio_hdf5 module~cdifs cdifs module~cdifs->module~leapblock module~cdifs->module~leapio module~collisions collisions module~cdifs->module~collisions module~leapbc leapBC module~cdifs->module~leapbc module~leapdiffop leapDiffOp module~cdifs->module~leapdiffop module~leapeulerian leapEulerian module~cdifs->module~leapeulerian module~leaphypre leapHypre module~cdifs->module~leaphypre module~leapsolver leapSolver module~cdifs->module~leapsolver module~particles_resolved particles_resolved module~cdifs->module~particles_resolved module~immersed_boundaries immersed_boundaries module~cdifs->module~immersed_boundaries module~collisions->module~leapblock module~particles_point particles_point module~collisions->module~particles_point module~collisions->module~particles_resolved module~collisions->module~immersed_boundaries module~grans grans module~grans->module~leapblock module~grans->module~leapio module~grans->module~collisions module~grans->module~leapbc module~grans->module~leapdiffop module~grans->module~leapeulerian module~grans->module~leaphypre module~grans->module~leapsolver module~grans->module~particles_point module~grans->module~particles_resolved module~grans->module~immersed_boundaries module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries_markers->module~leapblock module~immersed_boundaries_markers->module~leapio module~immersed_boundaries_markers->module~leapbc module~immersed_boundaries_markers->module~leapdiffop module~immersed_boundaries_markers->module~leapeulerian module~immersed_boundaries_markers->module~leaphypre module~leaplagrangian leapLagrangian module~immersed_boundaries_markers->module~leaplagrangian module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries_solids->module~leapblock module~immersed_boundaries_solids->module~leapio module~immersed_boundaries_solids->module~immersed_boundaries_markers module~immersed_boundaries_solids->module~leapeulerian module~immersed_boundaries_solids->module~leaplagrangian module~leapbc->module~leapblock module~leapbc->module~leapio module~leapbc->module~leapeulerian module~leapdiffop->module~leapblock module~leapdiffop->module~leapbc module~leapdiffop->module~leapeulerian module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leaphypre->module~leapblock module~leaphypre->module~leapeulerian module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapio module~leapsolver->module~leapio module~particles_point->module~leapblock module~particles_point->module~leapio module~particles_point->module~leapdiffop module~particles_point->module~leapeulerian module~particles_point->module~leaplagrangian module~particles_point->module~immersed_boundaries module~particles_resolved->module~leapblock module~particles_resolved->module~leapio module~particles_resolved->module~leapbc module~particles_resolved->module~leapdiffop module~particles_resolved->module~leapeulerian module~particles_resolved->module~leaplagrangian module~particles_resolved->module~immersed_boundaries proc~collision_obj_setupcollisionblock2 collision_obj%collision_obj_SetupCollisionBlock2 proc~collision_obj_setupcollisionblock2->module~leapblock program~main main program~main->module~leapio program~main->module~cdifs program~main->module~grans program~main->module~leapsolver module~cdifs_advancesolution_smod cdifs_AdvanceSolution_smod module~cdifs_advancesolution_smod->module~cdifs module~cdifs_monitor_smod cdifs_Monitor_smod module~cdifs_monitor_smod->module~cdifs module~cdifs_preparesolver_smod cdifs_PrepareSolver_smod module~cdifs_preparesolver_smod->module~cdifs module~cdifs_writeoutputdata_smod cdifs_WriteOutputData_smod module~cdifs_writeoutputdata_smod->module~cdifs module~cdifs_writerestartdata_smod cdifs_WriteRestartData_smod module~cdifs_writerestartdata_smod->module~cdifs module~grans_advancesolution_smod grans_AdvanceSolution_smod module~grans_advancesolution_smod->module~grans module~grans_module_smod grans_module_smod module~grans_module_smod->module~grans module~grans_preparesolver_smod grans_PrepareSolver_smod module~grans_preparesolver_smod->module~grans module~grans_writeoutputdata_smod grans_WriteOutputData_smod module~grans_writeoutputdata_smod->module~grans module~grans_writerestartdata_smod grans_WriteRestartData_smod module~grans_writerestartdata_smod->module~grans module~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries->module~immersed_boundaries_solids proc~bc_set_buildmask bc_set%bc_set_BuildMask proc~bc_set_buildmask->module~leapeulerian proc~cdifs_obj_preparesolverbodyforce cdifs_obj_PrepareSolverBodyforce proc~cdifs_obj_preparesolverbodyforce->module~leapbc proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolveroperators->module~leapbc proc~cdifs_obj_preparesolveroperatorsdiv cdifs_obj_PrepareSolverOperatorsDIV proc~cdifs_obj_preparesolveroperatorsdiv->module~leapbc proc~cdifs_obj_preparesolveroperatorspgrad cdifs_obj_PrepareSolverOperatorsPGRAD proc~cdifs_obj_preparesolveroperatorspgrad->module~leapbc proc~cdifs_obj_preparesolveroperatorsvlap cdifs_obj_PrepareSolverOperatorsVLAP proc~cdifs_obj_preparesolveroperatorsvlap->module~leapbc proc~grans_obj_preparesolveroperators grans_obj_PrepareSolverOperators proc~grans_obj_preparesolveroperators->module~leapdiffop proc~marker_set_computesolidvolfrac marker_set%marker_set_ComputeSolidVolFrac proc~marker_set_computesolidvolfrac->module~leapdiffop

Variables

Type Visibility Attributes Name Initial
character(len=*), public, parameter :: HDF5_EXTENSION = '.h5'

Default file extension

integer, private, parameter :: HDF5_SET_HTBL_SIZE = 20

Default hash table size


Derived Types

type, public ::  hdf5_obj

A utility to read/write files in HDF5 format

Components

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: filename

file to read/write

type(parallel_obj), public, pointer :: parallel => null()

Associated parallel structure

integer(kind=HID_T), private :: fid

File identifier

logical, private :: is_open = .false.

Switch for when file is open/closed

integer(kind=HID_T), private :: plistid

Property list identifier

type(hashtbl_obj), private :: tbl

Hash table

Type-Bound Procedures

procedure, public :: Close => hdf5_obj_Close
procedure, public :: CloseGroup => hdf5_obj_CloseGroup
procedure, public :: CreateGroup => hdf5_obj_CreateGroup
procedure, public :: Finalize => hdf5_obj_Final
procedure, public :: GetNPoints => hdf5_obj_GetNPoints
procedure, public :: Initialize => hdf5_obj_Init
procedure, public :: Open => hdf5_obj_Open
procedure, public :: OpenGroup => hdf5_obj_OpenGroup
generic, public :: Read => hdf5_obj_Read3D, hdf5_obj_Read1D
generic, public :: ReadAttributes => hdf5_obj_ReadAttributes0D, hdf5_obj_ReadAttributes1D
procedure, public :: ReadCoord => hdf5_obj_ReadCoord
procedure, public :: ReadDatasetNames => hdf5_obj_ReadDatasetNames
procedure, public :: ReadGroupNames => hdf5_obj_ReadGroupNames
generic, public :: Write => hdf5_obj_Write3D, hdf5_obj_Write1D
generic, public :: WriteAttributes => hdf5_obj_WriteAttributes0D, hdf5_obj_WriteAttributes1D
procedure, public :: WriteCoord => hdf5_obj_WriteCoord
procedure, private, nopass :: FixGroupName => hdf5_obj_FixGroupName
procedure, private :: GetGroupObject => hdf5_obj_GetGroupObject
procedure, private :: hdf5_obj_Read1D
procedure, private :: hdf5_obj_Read3D
procedure, private :: hdf5_obj_ReadAttributes0D
procedure, private :: hdf5_obj_ReadAttributes1D
procedure, private :: hdf5_obj_Write1D
procedure, private :: hdf5_obj_Write3D
procedure, private :: hdf5_obj_WriteAttributes0D
procedure, private :: hdf5_obj_WriteAttributes1D

Functions

private pure function hdf5_obj_FixGroupName(groupname) result(val)

Function that will append and prepend '/' if missing.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: groupname

Return Value character(len=:), allocatable

private impure function hdf5_obj_GetGroupObject(this, groupname) result(val)

Returns the HDF5 object id of the group.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(in) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Name of region

Return Value integer(kind=HID_T)

private impure function hdf5_obj_GetNPoints(this, groupname, name) result(val)

Returns the number of points in a dataset given by name under group given by name.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Parent group name

character(len=*), intent(in) :: name

Dataset name

Return Value integer

Result


Subroutines

private impure subroutine hdf5_obj_Close(this)

Closes hdf5 file.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

private impure subroutine hdf5_obj_CloseGroup(this, groupname)

Closes an HDF5 group and removes it from the hashtable.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Group to close

private impure subroutine hdf5_obj_CreateGroup(this, groupname)

Creates a group (analogous to directory) in an HDF5 file and updates hash table.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Group name

private impure subroutine hdf5_obj_Final(this)

Finalizes object and frees memory.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

private impure subroutine hdf5_obj_Init(this, parallel)

Initializes the hdf5 object.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

type(parallel_obj), intent(in), target :: parallel

Parallel structure to point to

private impure subroutine hdf5_obj_Open(this, name, flag)

Opens a hdf5 file given by name with mode stated by flag. This can take one of these values: 'R' for read only 'W' for write only (will delete existing file) 'RW' for read-write

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: name

Filename

character(len=*), intent(in) :: flag

Access mode

private impure subroutine hdf5_obj_OpenGroup(this, groupname)

Opens a group (analogous to directory) in an HDF5 file and updates hash table.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Group name

private impure subroutine hdf5_obj_Read1D(this, groupname, name, array, offset)

Reads a 1D dataset located under groupname and given by name. If no offset is provided, uses default file view. Otherwise, sets file view manually.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Parent group containing the dataset

character(len=*), intent(in) :: name

Dataset name

class(*), intent(out), target :: array(:)

Data array

integer, intent(in), optional :: offset

Indicates number of elements to skip before reading

private impure subroutine hdf5_obj_Read3D(this, groupname, name, array, lo, hi)

Reads a 3D dataset located under groupname and given by name.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Parent group containing the dataset

character(len=*), intent(in) :: name

Dataset name

class(*), intent(out), target :: array(:,:,:)

Data array

integer, intent(in) :: lo(3)

Low bounds

integer, intent(in) :: hi(3)

High bounds

private impure subroutine hdf5_obj_ReadAttributes0D(this, groupname, label, val)

Read a scalar attribute under a given group.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: label

Attribute label

class(*), intent(out), target :: val

Attribute value

private impure subroutine hdf5_obj_ReadAttributes1D(this, groupname, label, val)

Read a 1-D array of attributes under a given group.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: label

Attribute label

class(*), intent(out), target :: val(:)

Attribute values

private impure subroutine hdf5_obj_ReadCoord(this, groupname, name, Coord)

Reads coordinates from HDF5 file. Only the root MPI rank does the reading, and then broadcasts to other MPI ranks.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: name

Variable name

class(*), intent(out), target :: Coord(:)

1-D Coordinates

private impure subroutine hdf5_obj_ReadDatasetNames(this, basegroup, names)

Reads the dataset names under a given base group in an HDF5 file.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: basegroup

Base group to explore

character(len=str64), intent(out), allocatable :: names(:)

Dataset names under the base group

private impure subroutine hdf5_obj_ReadGroupNames(this, basegroup, names)

Reads the groups (i.e., directories) under a given base group in an HDF5 file.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: basegroup

Base group to explore

character(len=str64), intent(out), allocatable :: names(:)

Names of groups under the base group

private impure subroutine hdf5_obj_Write1D(this, groupname, name, array)

Writes an array/1D data to a HDF5 file.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: name

Variable name

class(*), intent(in), target :: array(:)

1-D data array

private impure subroutine hdf5_obj_Write3D(this, groupname, name, array, lo, hi)

Writes Eulerian/3D data to a HDF5 file.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: name

Variable name

class(*), intent(in), target :: array(:,:,:)

3-D data array

integer, intent(in) :: lo(3)

Low bounds

integer, intent(in) :: hi(3)

High bounds

private impure subroutine hdf5_obj_WriteAttributes0D(this, groupname, label, val)

Writes a scalar attribute.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: label

attribute label

class(*), intent(in), target :: val

Attribute label

private impure subroutine hdf5_obj_WriteAttributes1D(this, groupname, label, val)

Writes an array of attributes.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: label

attribute label

class(*), intent(in), target :: val(:)

Attribute labels

private impure subroutine hdf5_obj_WriteCoord(this, groupname, name, Coord)

Writes coordinates to HDF5 file. Only the root MPI rank does the writing.

Arguments

Type IntentOptional Attributes Name
class(hdf5_obj), intent(inout) :: this

A HDF5 object

character(len=*), intent(in) :: groupname

Groupname

character(len=*), intent(in) :: name

Variable name

class(*), intent(in), target :: Coord(:)

1-D Coordinates