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