kspaceFirstOrder3D-OMP 1.0
The C++ implementation of the k-wave toolbox for the time-domain simulation of acoustic wave fields in 3D
MatrixClasses/ComplexMatrix.cpp
Go to the documentation of this file.
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 //----------------------------------------------------------------------------//
 All Classes Files Functions Variables Typedefs Enumerations