All Projects → victorsndvg → XH5For

victorsndvg / XH5For

Licence: LGPL-3.0 license
XDMF parallel partitioned mesh I/O on top of HDF5

Programming Languages

fortran
972 projects
CMake
9771 projects

Projects that are alternatives of or similar to XH5For

t8code
Parallel algorithms and data structures for tree-based AMR with arbitrary element shapes.
Stars: ✭ 37 (+60.87%)
Mutual labels:  parallel, mpi, mesh
Core
parallel finite element unstructured meshes
Stars: ✭ 124 (+439.13%)
Mutual labels:  parallel, mpi
Pism
repository for the Parallel Ice Sheet Model (PISM)
Stars: ✭ 61 (+165.22%)
Mutual labels:  parallel, mpi
echo-server
Echo Server is a Docker-ready, multi-scalable Node.js application used to host your own Socket.IO server for Laravel Broadcasting.
Stars: ✭ 32 (+39.13%)
Mutual labels:  scalable, io
Easylambda
distributed dataflows with functional list operations for data processing with C++14
Stars: ✭ 475 (+1965.22%)
Mutual labels:  parallel, mpi
Moose
Multiphysics Object Oriented Simulation Environment
Stars: ✭ 652 (+2734.78%)
Mutual labels:  parallel, object-oriented
Hpcinfo
Information about many aspects of high-performance computing. Wiki content moved to ~/docs.
Stars: ✭ 171 (+643.48%)
Mutual labels:  parallel, mpi
Pfunit
Parallel Fortran Unit Testing Framework
Stars: ✭ 104 (+352.17%)
Mutual labels:  mpi, object-oriented
scr
SCR caches checkpoint data in storage on the compute nodes of a Linux cluster to provide a fast, scalable checkpoint / restart capability for MPI codes.
Stars: ✭ 84 (+265.22%)
Mutual labels:  scalable, mpi
ParMmg
Distributed parallelization of 3D volume mesh adaptation
Stars: ✭ 19 (-17.39%)
Mutual labels:  parallel, mpi
tbslas
A parallel, fast solver for the scalar advection-diffusion and the incompressible Navier-Stokes equations based on semi-Lagrangian/Volume-Integral method.
Stars: ✭ 21 (-8.7%)
Mutual labels:  parallel, mpi
raptor
General, high performance algebraic multigrid solver
Stars: ✭ 50 (+117.39%)
Mutual labels:  parallel, mpi
muster
Massively Scalable Clustering
Stars: ✭ 22 (-4.35%)
Mutual labels:  parallel, mpi
Prpl
parallel Raster Processing Library (pRPL) is a MPI-enabled C++ programming library that provides easy-to-use interfaces to parallelize raster/image processing algorithms
Stars: ✭ 15 (-34.78%)
Mutual labels:  parallel, mpi
fdtd3d
fdtd3d is an open source 1D, 2D, 3D FDTD electromagnetics solver with MPI, OpenMP and CUDA support for x86, arm, arm64 architectures
Stars: ✭ 77 (+234.78%)
Mutual labels:  parallel, mpi
Libgrape Lite
🍇 A C++ library for parallel graph processing 🍇
Stars: ✭ 169 (+634.78%)
Mutual labels:  parallel, mpi
h5fortran-mpi
HDF5-MPI parallel Fortran object-oriented interface
Stars: ✭ 15 (-34.78%)
Mutual labels:  mpi, hdf5
hp2p
Heavy Peer To Peer: a MPI based benchmark for network diagnostic
Stars: ✭ 17 (-26.09%)
Mutual labels:  parallel, mpi
Galaxy
Galaxy is an asynchronous parallel visualization ray tracer for performant rendering in distributed computing environments. Galaxy builds upon Intel OSPRay and Intel Embree, including ray queueing and sending logic inspired by TACC GraviT.
Stars: ✭ 18 (-21.74%)
Mutual labels:  parallel, mpi
sst-core
SST Structural Simulation Toolkit Parallel Discrete Event Core and Services
Stars: ✭ 82 (+256.52%)
Mutual labels:  parallel, mpi

XH5For

XH5For logo

The Fortran way to easy write parallel partitioned XDMF/HDF5 meshes

Build Status codecov.io

License

License

What is XH5For?

Is a library to read and write parallel partitioned FEM meshes taking advantage of the Collective/Independent IO provided by the HDF5 library. XH5For is not a general-purpose XDMF library, it only reads XDMF files written by itself.

Some concepts

  • XDMF Model and Format is a standarized way to describe common scientific data. It separates the Light data (XML description of the data model) and the Heavy data (raw values) usually saved in HDF5 or binary Files.
  • HDF5 is a model and data format designed for efficient Collective/Independent I/O and work with big amounts of data.

How to get XH5For

git clone --recursive https://github.com/victorsndvg/XH5For.git

Compilation

XH5For compile with GNU Fortran compiler 5.1 (and newer versions) and Intel Fortran compiler 15.0.1 (and newer versions).

XH5For uses CMake as a portable compilation system.

The easiest way to compile XH5For under Linux is:

$ cd XH5For
$ mkdir build
$ cd build
$ cmake [cmake-settings] ../
$ make

To compile XH5For under Windows use de equivalent commands

XH5For CMake basic settings

CMake compilation system settings allows us to manage compilation system behaviour. Look at the CMake command line-interface to know how to pass CMake settings. There are several ways to configure XH5For compilation system with CMake

The most important XH5For settings are:

  • XH5For_ENABLE_HDF5: ON if HDF5 library is automagically found in your system (default OFF)
  • XH5For_ENABLE_MPI: ON if MPI library is automagically found in your system (default OFF)
  • XH5For_ENABLE_TESTS: (default OFF)
  • XH5For_ENABLE_EXAMPLES: (default OFF)

Getting started with XH5For

The code below writes an hexahedron per MPI task:

program xh5for_hexa_per_task

    use xh5for
    use mpi

implicit none

    type(xh5for_t)        :: xh5
    real, dimension(24)   :: geometry = (/0.0, 0.0, 0.0, &
                                          0.0, 0.0, 1.0, &
                                          0.0, 1.0, 1.0, &
                                          0.0, 1.0, 0.0, &
                                          1.0, 0.0, 0.0, &
                                          1.0, 0.0, 1.0, &
                                          1.0, 1.0, 1.0, &
                                          1.0, 1.0, 0.0/)
    integer, dimension(8) :: topology = (/0, 1, 2, 3, 4, 5, 6, 7/)
    integer, dimension(8) :: temperature = (/0, 1, 2, 3, 4, 5, 6, 7/)
    integer               :: mpierr, rank

    call MPI_INIT(mpierror)
    call MPI_Comm_rank(MPI_COMM_WORLD, rank, mpierr)
    geometry = geometry+rank

    call xh5%Open(FilePrefix='xh5for_unstructured_hexahedron', Strategy=XDMF_STRATEGY_CONTIGUOUS_HYPERSLAB, Action=XDMF_ACTION_WRITE)
    call xh5%SetGrid(NumberOfNodes=8, NumberOfElements=1,TopologyType=XDMF_TOPOLOGY_TYPE_HEXAHEDRON, GeometryType=XDMF_GEOMETRY_TYPE_XYZ)
    call xh5%WriteTopology(Connectivities=topology)
    call xh5%WriteGeometry(XYZ=geometry)
    call xh5%WriteAttribute(Name='Temperature', Type=XDMF_ATTRIBUTE_TYPE_SCALAR ,Center=XDMF_ATTRIBUTE_CENTER_NODE , Values=temperature)
    call xh5%Close()
    call xh5%Free()

    call MPI_FINALIZE(mpierror)

end program xh5for_hexa_per_task

See more info about XH5For_t

Some considerations

  • XH5For use XDMF Model and Format to describe the Light data and HDF5 for the Heavy data.
  • HDF5 API must be linked to read/write the Heavy data.
  • Paralell HDF5 API must to be linked to take advange of the Collective IO.
  • Paralell HDF5 API only works if an MPI library is also linked.
  • XML syntax is be based on XDMF v2.x.
  • The handling of XML files is developed on top of FoX (Fortran XML library) for reading/writing XDMF files. Particularly, FoX_wxml library is used for writing XDMF files and FoX_dom will be used for parsing.

Zen of XH5For:

  • Use HDF5 high level library based on MPI_IO
  • Open in the right mode
  • Number of XDMF/HDF5 files must be independent of the number of processes
  • Reduce simultaneous open files to the minimun
  • Prefer collective IO
  • Do not open/close files too frequently
  • Avoid small accesses
  • Try MPI_IO hints
  • Write/Read as infrequently as possible
  • Reduce precision if possible

Best practices for parallel IO and MPI-IO hints

Development roadmap:

  • XDMF:
    • Series:
      • Static grid
      • Non-Static grid
    • Grid:
      • Structured
      • Unstructured
    • Element:
      • Linear
        • Triangle
        • Quadrangle
        • Tretrahedron
        • Hexahedron
        • Mixed
        • ...
    • Field:
      • Center on:
        • Node
        • Cell
        • Grid
        • Edge
        • Face
      • Type:
        • Scalar
        • Vector
        • Tensor
        • Matrix
        • Tensor6
        • GlobalID
        • NoType
  • HDF5:
    • Groups
    • DataSets
    • HyperSlabs
    • Strategies:
      • Contiguous hyperslab
      • One dataset per process
      • Chunking

UML class diagram:

Automatically generated with ForUML.

XH5For UML class diagram

How to collaborate

If you want to actively collaborate in the project, please feel free to fork and submit pull requests. Any help or suggestions would be greatly appreciated :)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].