![]() |
kspaceFirstOrder3D-OMP 1.0
The C++ implementation of the k-wave toolbox for the time-domain simulation of acoustic wave fields in 3D
|
00001 00032 #include <iostream> 00033 #include <string.h> 00034 00035 #include <MatrixClasses/RealMatrix.h> 00036 #include <MatrixClasses/ComplexMatrix.h> 00037 00038 #include <Utils/ErrorMessages.h> 00039 //----------------------------------------------------------------------------// 00040 // Constants // 00041 //----------------------------------------------------------------------------// 00042 00043 //----------------------------------------------------------------------------// 00044 // Definitions // 00045 //----------------------------------------------------------------------------// 00046 00047 00048 00049 //----------------------------------------------------------------------------// 00050 // Implementation // 00051 // public methods // 00052 //----------------------------------------------------------------------------// 00053 00058 TRealMatrix::TRealMatrix(struct TDimensionSizes DimensionSizes) : TBaseFloatMatrix(){ 00059 00060 InitDimensions (DimensionSizes); 00061 00062 AllocateMemory(); 00063 }// end of TRealMatrixData 00064 //----------------------------------------------------------------------------- 00065 00066 00067 00075 void TRealMatrix::ReadDataFromHDF5File(THDF5_File & HDF5_File, const char * MatrixName){ 00076 00077 // test matrix datatype 00078 if (HDF5_File.ReadMatrixDataType(MatrixName) != THDF5_File::hdf5_mdt_float){ 00079 char ErrorMessage[256]; 00080 sprintf(ErrorMessage,Matrix_ERR_FMT_MatrixNotFloat,MatrixName); 00081 throw ios::failure(ErrorMessage); 00082 } 00083 00084 00085 if (HDF5_File.ReadMatrixDomainType(MatrixName) != THDF5_File::hdf5_mdt_real){ 00086 char ErrorMessage[256]; 00087 sprintf(ErrorMessage,Matrix_ERR_FMT_MatrixNotReal,MatrixName); 00088 throw ios::failure(ErrorMessage); 00089 } 00090 00091 00092 // Read matrix 00093 HDF5_File.ReadCompleteDataset(MatrixName,pDimensionSizes,pMatrixData); 00094 00095 00096 }// end of LoadDataFromMatlabFile 00097 //------------------------------------------------------------------------------ 00098 00099 00108 void TRealMatrix::WriteDataToHDF5File(THDF5_File & HDF5_File, const char * MatrixName, const int CompressionLevel){ 00109 00110 TDimensionSizes Chunks = pDimensionSizes; 00111 Chunks.Z = 1; 00112 00113 //1D matrices 00114 if ((pDimensionSizes.Y == 1) && (pDimensionSizes.Z == 1)){ 00115 // Chunk = 4MB 00116 if (pDimensionSizes.X > 4*ChunkSize_1D_4MB) { 00117 Chunks.X = ChunkSize_1D_4MB; 00118 } else if (pDimensionSizes.X > 4*ChunkSize_1D_1MB){ 00119 Chunks.X = ChunkSize_1D_1MB; 00120 } else if (pDimensionSizes.X > 4*ChunkSize_1D_256KB) 00121 { 00122 Chunks.X = ChunkSize_1D_256KB; 00123 } 00124 } 00125 00126 hid_t HDF5_Dataset_id = HDF5_File.CreateFloatDataset(MatrixName,pDimensionSizes,Chunks,CompressionLevel); 00127 HDF5_File.WriteHyperSlab(HDF5_Dataset_id,TDimensionSizes(0,0,0),pDimensionSizes,pMatrixData); 00128 HDF5_File.CloseDataset(HDF5_Dataset_id); 00129 00130 HDF5_File.WriteMatrixDataType (MatrixName, THDF5_File::hdf5_mdt_float); 00131 HDF5_File.WriteMatrixDomainType(MatrixName, THDF5_File::hdf5_mdt_real); 00132 00133 00134 }// end of WriteDataToHDF5File 00135 //------------------------------------------------------------------------------ 00136 00137 //----------------------------------------------------------------------------// 00138 // Implementation // 00139 // protected methods // 00140 //----------------------------------------------------------------------------// 00141 00146 void TRealMatrix::InitDimensions(struct TDimensionSizes DimensionSizes){ 00147 00148 pDimensionSizes = DimensionSizes; 00149 00150 00151 pTotalElementCount = pDimensionSizes.X * 00152 pDimensionSizes.Y * 00153 pDimensionSizes.Z; 00154 00155 pTotalAllocatedElementCount = pTotalElementCount; 00156 00157 pDataRowSize = pDimensionSizes.X; 00158 00159 p2DDataSliceSize = pDimensionSizes.X * 00160 pDimensionSizes.Y; 00161 00162 00163 }// end of SetDimensions 00164 //------------------------------------------------------------------------------/ 00165 00166 00167 //----------------------------------------------------------------------------// 00168 // Implementation // 00169 // private methods // 00170 //----------------------------------------------------------------------------//