PHengLEI-NCCR/API/PreProcess/include/Pre_HDF5File.h

186 lines
6.1 KiB
C++

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// PPPPP H H EEEEE N N GGGGG L EEEEE III +
// P P H H E NN N G L E I +
// PPPPP HHHHH EEEEE N N N G GG L EEEEE I +
// P H H E N N N G G L E I +
// P H H EEEEE N N GGGGG LLLLL EEEEE III +
//------------------------------------------------------------------------+
// Platform for Hybrid Engineering Simulation of Flows +
// China Aerodynamics Research and Development Center +
// (C) Copyright, Since 2010 +
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//! @file Pre_HDF5File.h
//! @brief It defines HDF5 file read and write method.
//! @author Baka.
#pragma once
#include "IO_HDF5File.h"
#include "Region.h"
namespace PHSPACE
{
class IO_HDF5Write
{
private:
Grid **grids;
int nBlocks;
string gridFileName;
public:
//! Dump nBolcks grids to file.
//! @param[in] gridFileName Grid file name.
//! @param[in] grids The grids that need to be dumped.
//! @param[in] nBlocks The number of the grid zones.
IO_HDF5Write(const string &gridFileName, Grid **grids, int nBlocks);
~IO_HDF5Write();
public:
void Run();
private:
hid_t CreateFile(const string &filename);
void WriteVersionInfo(hid_t loc_id);
void CreateTotalInfo();
void WriteTotalInfo(hid_t loc_id);
void WriteGridCoordinates(hid_t loc_id, Grid *gridIn);
void WriteInterfaceInfo(hid_t loc_id, Grid *gridIn);
void WriteLnkInfo(hid_t loc_id, Grid *gridIn);
void WriteVolumeCondition(hid_t loc_id, Grid *gridIn);
void WriteStructGrid(hid_t loc_id, Grid *gridIn);
void WriteBCRegion(hid_t loc_id, Grid *gridIn);
void WriteStrBCName(hid_t loc_id, Grid *gridIn);
void WriteStrPartitionInfo(hid_t loc_id, Grid *gridIn);
void WriteUnstructGrid(hid_t loc_id, Grid *gridIn, int iZone);
void WriteFaceTopology(hid_t loc_id, Grid *gridIn);
void WriteCellTopology(hid_t loc_id, Grid *gridIn);
void WriteUnstrBCName(hid_t loc_id, Grid *gridIn);
void WriteInterpointInfo(hid_t loc_id, Grid *gridIn);
void WriteUnstrPartitionInfo(hid_t loc_id, Grid *gridIn);
private:
//! The grids int current processor
Grid **gridsLocal;
int *nPartOfEachProcessor;
int *block_proc;
int *block_idx;
int *block_type;
int *file_index;
};
class IO_HDF5Read
{
private:
PHVectorString1D gridNameList;
double version;
public:
//! Read grid from file.
//! @param[in] gridFileName Grid file name.
//! @param[in] region_in The class to manage the geometry.
IO_HDF5Read(PHVectorString1D &gridNameListIn, Region *region_in);
~IO_HDF5Read();
public:
bool Run();
private:
void CheckNumberofFiles(int iGrid);
void InitGridFileNameListAndFileProcessor();
hid_t OpenH5File(const string &filename);
void ReadVersionInfo(hid_t loc_id);
void ReadTotalInfoOld(hid_t loc_id);
void ReadNumberOfZonesOld(hid_t loc_id); //! Useless.
void ReadEachGridOld(hid_t loc_id);
void ReadTotalInfo();
void ReadNumberOfZones();
void ReadEachGrid();
void ReadGridCoordinates(hid_t loc_id, Grid *gridIn);
void ReadInterfaceInfo(hid_t loc_id, Grid *gridIn);
void ReadVolumeCondition(hid_t loc_id, Grid *gridIn);
void ReadStructGrid(hid_t loc_id, int iZone);
void ReadBCRegion(hid_t loc_id, Grid *gridIn);
void ReadLnkInfo(hid_t loc_id, Grid *gridIn);
void ReadLnk(hid_t loc_id, int iZone);
void ReadStrBCName(hid_t loc_id, Grid *gridIn);
void ReadStrPartitionInfo(hid_t loc_id, Grid *gridIn);
void ReadUnstructGrid(hid_t loc_id, int iZone);
void ReadFaceTopology(hid_t loc_id, Grid *gridIn);
void ReadCellTopology(hid_t loc_id, Grid *gridIn);
void ReadUnstrBCName(hid_t loc_id, Grid *gridIn);
void ReadInterpointInfo(hid_t loc_id, Grid *gridIn);
void ReadUnstrPartitionInfo(hid_t loc_id, Grid *gridIn);
void SetNZones(int nZonesIn) { this->numberOfZones = nZonesIn; }
int GetNZones() const { return numberOfZones; }
void RedistributeZonesIfNeed();
bool IsZoneLayoutInitialized();
void SetGlobalZoneLayout();
void ClassifyGridSystem();
void AddGrid(Grid *grid);
void CreateZones();
void ReadWallDist();
void SetMixGridInfo();
void SetBlockProcDump(int *blockProcDumpIn) { this->blockProcDump = blockProcDumpIn; }
void SetBlockProcGrid(int *blockProcGridIn) { this->blockProcGrid = blockProcGridIn; }
void SetBlockProc(int *blockProcIn) { this->blockProc = blockProcIn; }
void SetBlockType(int *blockTypeIn) { this->blockType = blockTypeIn; }
void SetBlockIndex(int *blockIdxIn) { this->blockIdx = blockIdxIn; }
int * GetBlockProcDump() { return this->blockProcDump; }
int * GetBlockProc() { return this->blockProc; }
int * GetBlockProcGrid() { return this->blockProcGrid; }
int * GetBlockType() { return this->blockType; }
int * GetBlockIndex() { return this->blockIdx; }
private:
//! The file index which the current processor charged.
int fileID;
bool isFileProcessor;
bool isP2PMode;
//! The processor index of the current one.
int myProcID;
//! The processor index of the serve.
int serverProcID;
//! Number of global grid files.
int globalFileNumber;
vector < vector<string> > localGridNameList;
//! The total number of global zones.
int numberOfZones;
//! Number of zones in each .fts file.
VVInt nZonesList;
uint_t numberOfGridGroups;
int zoneStart;
int presentGridGroup;
int *blockProc;
int *blockType;
int *blockIdx ;
int *blockProcDump;
int *blockProcGrid;
int *blockFileProc;
int taskType;
vector<Grid *> grids;
Region *region;
};
LIB_EXPORT bool ReadHDF5File(Region *region_in, PHVectorString1D &gridGroupNameList);
LIB_EXPORT void DumpHDF5Grid(const string &gridFileName, Grid **grids, int nBlocks);
}