![]() |
kspaceFirstOrder3D-OMP 1.0
The C++ implementation of the k-wave toolbox for the time-domain simulation of acoustic wave fields in 3D
|
00001 00031 #include <iostream> 00032 00033 #include <MatrixClasses/ComplexMatrix.h> 00034 00035 #include <Utils/ErrorMessages.h> 00036 00037 //----------------------------------------------------------------------------// 00038 // Constants // 00039 //----------------------------------------------------------------------------// 00040 00041 //----------------------------------------------------------------------------// 00042 // Definitions // 00043 //----------------------------------------------------------------------------// 00044 00045 00046 //----------------------------------------------------------------------------// 00047 // Implementation // 00048 // public methods // 00049 //----------------------------------------------------------------------------// 00050 00056 TComplexMatrix::TComplexMatrix(struct TDimensionSizes DimensionSizes) : 00057 TBaseFloatMatrix() { 00058 00059 InitDimensions(DimensionSizes); 00060 00061 AllocateMemory(); 00062 } // end of TComplexMatrixData 00063 //----------------------------------------------------------------------------- 00064 00065 00066 00074 void TComplexMatrix::ReadDataFromHDF5File(THDF5_File & HDF5_File, const char * MatrixName){ 00075 00076 if (HDF5_File.ReadMatrixDataType(MatrixName) != THDF5_File::hdf5_mdt_float){ 00077 char ErrorMessage[256]; 00078 sprintf(ErrorMessage,Matrix_ERR_FMT_MatrixNotFloat,MatrixName); 00079 throw ios::failure(ErrorMessage); 00080 } 00081 00082 00083 if (HDF5_File.ReadMatrixDomainType(MatrixName) != THDF5_File::hdf5_mdt_complex){ 00084 char ErrorMessage[256]; 00085 sprintf(ErrorMessage,Matrix_ERR_FMT_MatrixNotComplex,MatrixName); 00086 throw ios::failure(ErrorMessage); 00087 } 00088 00089 TDimensionSizes ComplexDims = pDimensionSizes; 00090 ComplexDims.X = 2*ComplexDims.X; 00091 00092 HDF5_File.ReadCompleteDataset(MatrixName,ComplexDims,pMatrixData); 00093 00094 }// end of LoadDataFromMatlabFile 00095 //------------------------------------------------------------------------------ 00096 00097 00098 00099 //----------------------------------------------------------------------------// 00100 // Implementation // 00101 // protected methods // 00102 //----------------------------------------------------------------------------// 00103 00108 void TComplexMatrix::InitDimensions(struct TDimensionSizes DimensionSizes){ 00109 00110 00111 pDimensionSizes = DimensionSizes; 00112 00113 pTotalElementCount = pDimensionSizes.X * 00114 pDimensionSizes.Y * 00115 pDimensionSizes.Z; 00116 00117 pDataRowSize = (pDimensionSizes.X << 1); 00118 00119 p2DDataSliceSize = (pDimensionSizes.X * 00120 pDimensionSizes.Y) << 1; 00121 00122 // compute actual necessary memory sizes 00123 pTotalAllocatedElementCount = pTotalElementCount << 1; 00124 00125 00126 }// end of InitDimensions 00127 //------------------------------------------------------------------------------ 00128 00129 00138 void TComplexMatrix::WriteDataToHDF5File(THDF5_File & HDF5_File, const char * MatrixName, const int CompressionLevel){ 00139 00140 TDimensionSizes ComplexDims = pDimensionSizes; 00141 ComplexDims.X = 2*ComplexDims.X; 00142 00143 TDimensionSizes Chunks = ComplexDims; 00144 ComplexDims.Z = 1; 00145 00146 00147 hid_t HDF5_Dataset_id = HDF5_File.CreateFloatDataset(MatrixName,ComplexDims,Chunks,CompressionLevel); 00148 HDF5_File.WriteHyperSlab(HDF5_Dataset_id,TDimensionSizes(0,0,0),pDimensionSizes,pMatrixData); 00149 HDF5_File.CloseDataset(HDF5_Dataset_id); 00150 00151 00152 HDF5_File.WriteMatrixDataType (MatrixName, THDF5_File::hdf5_mdt_float); 00153 HDF5_File.WriteMatrixDomainType(MatrixName, THDF5_File::hdf5_mdt_complex); 00154 00155 00156 }// end of WriteDataToHDF5File 00157 //--------------------------------------------------------------------------- 00158 00159 00160 00161 //----------------------------------------------------------------------------// 00162 // Implementation // 00163 // private methods // 00164 //----------------------------------------------------------------------------//