On Mon, Sep 10, 2012 at 05:20:50PM +0200, Håkon Strandenes wrote:

> and similar for other ranks. The source code is attached. When
> meshInit();

meshInit sets the "use parallel I/O" property and opens the already
existing file

> meshWrite();

which in turn calls meshWritePoints and meshWriteCells
I guess this is the problematic file.  

You've opened the file H5_ACC_TRUNC, so that zaps everything in the
dataset.  Then you create a dataset "/%f/points/processor%i".

I think you first need to create the '%f' and 'points' groups before
making processor%i, right?  Or will HDF5 make parent groups in this
situation?  nearly 10 years on and I still don't use the hierarchy
features of HDF5..

==rob

> meshClose();
> is called, the error occures (in H5DCreate2).
> 
> The following is in the h5Write.H header file:
> #define H5T_SCALAR H5T_NATIVE_DOUBLE
> (to include the possibility to compile with support for single precision).
> 
> The system is Ubuntu 12.04 with system OpenMPI and HDF5-OpenMPI
> libraries installed. Compiler is GCC. I have tried to compile the
> same code on another system with SLES 11sp1, Intel compilers and
> SGI-MPI. Same error message occurs on that system.
> 
> Do you have any hints to help me? Thanks in advance.
> 
> Best regards,
> Håkon Strandenes
> Norway

> /*---------------------------------------------------------------------------*\
>   =========                 |
>   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
>    \\    /   O peration     |
>     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
>      \\/     M anipulation  |
> -------------------------------------------------------------------------------
> License
>     This file is part of OpenFOAM.
> 
>     OpenFOAM is free software: you can redistribute it and/or modify it
>     under the terms of the GNU General Public License as published by
>     the Free Software Foundation, either version 3 of the License, or
>     (at your option) any later version.
> 
>     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
>     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
>     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
>     for more details.
> 
>     You should have received a copy of the GNU General Public License
>     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
> 
> \*---------------------------------------------------------------------------*/
> 
> #include "h5Write.H"
> #include "Time.H"
> #include "SortableList.H"
> #include "OFstream.H"
> #include "string.H"
> #include "stringOps.H"
> 
> #define H5DATA_MESH_FILE_NAME "h5Data/h5DataMesh.h5"
> 
> // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * 
> //
> 
> /*
> const Foam::label Foam::h5Write::foamToXDMFFaceAddr[4][6] =
> {
>     { 4, 5, 2, 3, 0, 1 },     // 11 = pro-STAR hex
>     { 0, 1, 4, 5, 2, -1 },    // 12 = pro-STAR prism
>     { 5, 4, 2, 0, -1, -1 },   // 13 = pro-STAR tetra
>     { 0, 4, 3, 5, 2, -1 }     // 14 = pro-STAR pyramid
> };
> */
> 
> // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * 
> //
> 
> void Foam::h5Write::meshInit()
> {
>     Info<< "h5Write::meshInit" << endl << endl;
>     
>     // Set up file access property list with parallel I/O access
>     meshPlistID_ = H5Pcreate(H5P_FILE_ACCESS);
>     H5Pset_fapl_mpio(meshPlistID_, MPI_COMM_WORLD, MPI_INFO_NULL);
> 
>     // Create a new file collectively.
>     meshFileID_ = H5Fcreate
>       (
>           H5DATA_MESH_FILE_NAME,
>           H5F_ACC_TRUNC, 
>           H5P_DEFAULT,
>           meshPlistID_
>       );
>     
>     // Close the property list
>     H5Pclose(meshPlistID_);
>     
> }
> 
> 
> void Foam::h5Write::meshClose()
> {
>     Info<< "h5Write::meshClose" << endl << endl;
>     
>     // Close the file.
>     H5Fclose(meshFileID_);
>     
> }
> 
> 
> void Foam::h5Write::meshWrite()
> {
>     meshWritePoints();
>     meshWriteCells();
> }
> 
> 
> void Foam::h5Write::meshWritePoints()
> {
>     const pointField& points = mesh_.points();
>     
>     // Create the dataspace for the dataset
>     hsize_t dimsf[] = {points.size(), 3};
>     hid_t fileSpace = H5Screate_simple(2, dimsf, NULL); 
>     
>     // Construct dataset name
>     char datasetName[80];
>     sprintf(datasetName, "/%f/points/processor%i", mesh_.time().value(), 
> Pstream::myProcNo());
>     
>     //if (debug) 
>     {
>         Pout<< "Dataset name: "<< datasetName << endl;
>     }
>     
>     // Create the dataset with default properties
>     hid_t dsetID = H5Dcreate2
>         (
>             meshFileID_,
>             datasetName,
>             H5T_SCALAR,
>             fileSpace,
>             H5P_DEFAULT,
>             H5P_DEFAULT,
>             H5P_DEFAULT
>         );
>     
>     // Create property list for collective dataset write.
>     meshPlistID_ = H5Pcreate(H5P_DATASET_XFER);
>                    H5Pset_dxpl_mpio(meshPlistID_, H5FD_MPIO_COLLECTIVE); 
> 
>     //if (debug) 
>     {
>         Pout<< "Writing " << points.size() << " points" << endl;
>     }
>     
>     // Create a simple array of points (to pass on to H5Dwrite)
>     scalar pointList[points.size()][3];
>     
>     // Fill the array
>     forAll(points, ptI)
>     {
>         pointList[ptI][0] = points[ptI].x();
>         pointList[ptI][1] = points[ptI].y();
>         pointList[ptI][2] = points[ptI].z();
>     }
>     
>     // Do the actual write
>     meshStatus_ = H5Dwrite
>         (
>             dsetID, 
>             H5T_SCALAR,
>             H5S_ALL,
>             H5S_ALL,
>                       meshPlistID_,
>                       pointList
>                   );
>     
>     
>     // Close/release resources.
>     H5Dclose(dsetID);
>     H5Sclose(fileSpace);
>     H5Pclose(meshPlistID_);
> }
> 
> 
> void Foam::h5Write::meshWriteCells()
> {
>     
> }
> 
> 
> // ************************************************************************* 
> //

> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> [email protected]
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org


-- 
Rob Latham
Mathematics and Computer Science Division
Argonne National Lab, IL USA

_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to