diff --git a/AMDiS/src/io/ArhReader.cc b/AMDiS/src/io/ArhReader.cc index 6747b1b2c5ffbcd9412753ff38a32d7426af5a56..b449adff0ce977ac28777cd96a4871ba685cd5f5 100644 --- a/AMDiS/src/io/ArhReader.cc +++ b/AMDiS/src/io/ArhReader.cc @@ -31,16 +31,13 @@ namespace AMDiS { bool writeParallel, int nProcs) { - size_t nValueVectors = getNumValueVectors(filename); vector<DOFVector<double>*> vecs(0); - if (nValueVectors > 0) + if (vec0) vecs.push_back(vec0); - if (nValueVectors > 1) + if (vec1) vecs.push_back(vec1); - if (nValueVectors > 2) + if (vec2) vecs.push_back(vec2); - for (size_t i = 3; i < nValueVectors; i++) - vecs.push_back(NULL); ArhReader::read(filename, mesh, vecs, writeParallel, nProcs); } @@ -141,7 +138,7 @@ namespace AMDiS { if (macroInMesh.count(elIndex) == 1) elementStructure.fitMeshToStructure(mesh, refManager, false, elIndex); - if(nValueVectors > 0){ + if (nValueVectors > 0) { uint32_t nValuesPerVector = 0; file.read(reinterpret_cast<char*>(&nValuesPerVector), 4); @@ -189,14 +186,33 @@ namespace AMDiS { } + int ArhReader::getNumValueVectors(string filename) + { + ifstream file; + file.open(filename.c_str(), ios::in | ios::binary); + + string typeId = ""; + uint32_t nMacroElements = 0; + uint32_t nValueVectors = 0; + + file.read(const_cast<char*>(typeId.data()), 4); + file.read(reinterpret_cast<char*>(&nMacroElements), 4); + file.read(reinterpret_cast<char*>(&nValueVectors), 4); + + file.close(); + + return nValueVectors; + } + + //the following three functions are identical to read/readfile except that they read from //a block of memory instead of from a file void ArhReader::readFromMemoryBlock(vector<char> &data, Mesh *mesh, - DOFVector<double>* vec0, - DOFVector<double>* vec1, - DOFVector<double>* vec2, - bool writeParallel, - int nProcs) + DOFVector<double>* vec0, + DOFVector<double>* vec1, + DOFVector<double>* vec2, + bool writeParallel, + int nProcs) { uint32_t nValueVectors; memcpy(reinterpret_cast<char*>(&nValueVectors), &data[8], 4); @@ -215,9 +231,9 @@ namespace AMDiS { void ArhReader::readFromMemoryBlock(vector<char> &data, Mesh *mesh, - vector<DOFVector<double>*> vecs, - bool writeParallel, - int nProcs) + vector<DOFVector<double>*> vecs, + bool writeParallel, + int nProcs) { FUNCNAME("ArhReader::readFromMemoryBlock()"); @@ -230,8 +246,8 @@ namespace AMDiS { void ArhReader::readBlock(vector<char> &data, - Mesh *mesh, - vector<DOFVector<double>*> vecs) + Mesh *mesh, + vector<DOFVector<double>*> vecs) { FUNCNAME("ArhReader::readBlock()"); diff --git a/AMDiS/src/io/ArhReader.h b/AMDiS/src/io/ArhReader.h index 5614d2b913f5a1a295d062bb6070194922dd9d12..5a016b7c9b4f7a68cf3394851fd35d8aabbe7bcd 100644 --- a/AMDiS/src/io/ArhReader.h +++ b/AMDiS/src/io/ArhReader.h @@ -53,44 +53,26 @@ namespace AMDiS { int nProcs = -1); static void readFromMemoryBlock(vector<char> &data, Mesh *mesh, - DOFVector<double>* vec0 = NULL, - DOFVector<double>* vec1 = NULL, - DOFVector<double>* vec2 = NULL, + DOFVector<double>* vec0 = NULL, + DOFVector<double>* vec1 = NULL, + DOFVector<double>* vec2 = NULL, #ifdef HAVE_PARALLEL_DOMAIN_AMDIS - bool writeParallel = true, + bool writeParallel = true, #else - bool writeParallel = false, + bool writeParallel = false, #endif - int nProcs = -1); - + int nProcs = -1); + static void readFromMemoryBlock(vector<char> &data, Mesh *mesh, - vector<DOFVector<double>*> vecs, + vector<DOFVector<double>*> vecs, #ifdef HAVE_PARALLEL_DOMAIN_AMDIS - bool writeParallel = true, + bool writeParallel = true, #else - bool writeParallel = false, + bool writeParallel = false, #endif - int nProcs = -1); - - static int getNumValueVectors(string filename) - { - ifstream file; - file.open(filename.c_str(), ios::in | ios::binary); - - string typeId = ""; - uint32_t nMacroElements = 0; - uint32_t nValueVectors = 0; - //uint32_t nAllValues = 0; - - file.read(const_cast<char*>(typeId.data()), 4); - file.read(reinterpret_cast<char*>(&nMacroElements), 4); - file.read(reinterpret_cast<char*>(&nValueVectors), 4); - //file.read(reinterpret_cast<char*>(&nAllValues), 4); - - file.close(); - - return nValueVectors; - } + int nProcs = -1); + + static int getNumValueVectors(string filename); private: @@ -102,8 +84,8 @@ namespace AMDiS { vector<double>& values, DOFVector<double>* vec); static void readBlock(vector<char> &data, - Mesh *mesh, - vector<DOFVector<double>*> vecs); + Mesh *mesh, + vector<DOFVector<double>*> vecs); }; } diff --git a/AMDiS/src/io/ArhWriter.cc b/AMDiS/src/io/ArhWriter.cc index b16c5f46233cd811a4f7f85747fe589b83665690..cb85e709007c0ffa0a4f218e60e8c56a4026c4b4 100644 --- a/AMDiS/src/io/ArhWriter.cc +++ b/AMDiS/src/io/ArhWriter.cc @@ -127,8 +127,11 @@ namespace AMDiS { void ArhWriter::writeMacroElement(ofstream &file, MeshStructure &code, vector<vector<double> >& values, - int32_t elIndex) + uint32_t elIndex) { + FUNCNAME("ArhWriter::writeMacroElement()"); + + MSG("WRITE INDEX: %d\n", elIndex); file.write(reinterpret_cast<char*>(&elIndex), 4); uint32_t nStructureCodes = code.getCode().size(); @@ -140,7 +143,7 @@ namespace AMDiS { file.write(reinterpret_cast<char*>(&(const_cast<vector<uint64_t>&>(code.getCode())[0])), 8 * nStructureCodes); - if(values.size() > 0){ + if (values.size() > 0) { uint32_t nValuesPerVector = values[0].size(); file.write(reinterpret_cast<char*>(&nValuesPerVector), 4); diff --git a/AMDiS/src/io/ArhWriter.h b/AMDiS/src/io/ArhWriter.h index d380324a5a8de1cc54f7ad1877d22cfdbb20dc4a..166ce2ec5a05cea6a8a092af46fb1a27194f1ed4 100644 --- a/AMDiS/src/io/ArhWriter.h +++ b/AMDiS/src/io/ArhWriter.h @@ -75,7 +75,7 @@ namespace AMDiS { static void writeMacroElement(std::ofstream &file, MeshStructure &code, std::vector<std::vector<double> >& values, - int32_t elIndex); + uint32_t elIndex); }; } diff --git a/AMDiS/src/io/FileWriter.cc b/AMDiS/src/io/FileWriter.cc index 7f29ada6751edb539ecbba92ed880ebde18748f5..305e313a6272c85cee7dcb5b4bc97e23279c23f9 100644 --- a/AMDiS/src/io/FileWriter.cc +++ b/AMDiS/src/io/FileWriter.cc @@ -191,7 +191,7 @@ namespace AMDiS { } if (writeArhFormat) - ArhWriter::write(fn + ".arh", feSpace->getMesh(), solutionVecs); + ArhWriter::write(paraFilename + ".arh", feSpace->getMesh(), solutionVecs); #ifdef HAVE_PNG if (writePngFormat) {