~njansson/dolfin/hpc

« back to all changes in this revision

Viewing changes to src/io/BinaryFile.cpp

  • Committer: Niclas Jansson
  • Date: 2011-09-18 17:42:30 UTC
  • Revision ID: njansson@csc.kth.se-20110918174230-97shk7se21ba6hk5
Work in binary format, serial

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
// Licensed under the GNU LGPL Version 2.1.
3
3
//
4
4
// First  added: 2009
5
 
// Last changed: 2011-06-16
 
5
// Last changed: 2011-09-18
6
6
 
7
7
#include <algorithm>
8
8
#include <cstring>
242
242
void BinaryFile::operator>>(Mesh& mesh)
243
243
{
244
244
 
 
245
  BinaryFileHeader hdr;
 
246
 
245
247
  if (MPI::numProcesses() == 1) 
246
248
  {    
247
249
    std::ifstream fp(filename.c_str(), std::ifstream::binary);
248
250
    
249
251
    int celltype, gdim;
 
252
    fp.read((char *)&hdr, sizeof(BinaryFileHeader));  
250
253
    fp.read((char *)&gdim, sizeof(int));  
251
254
    fp.read((char *)&celltype, sizeof(int));  
252
255
 
329
332
 
330
333
    MPI_File fh;
331
334
    MPI_Offset byte_offset;
332
 
    BinaryFileHeader hdr;
333
335
    MPI_File_open(dolfin::MPI::DOLFIN_COMM, (char *) filename.c_str(),
334
336
                  MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);    
335
337
 
718
720
                      mesh.numVertices());
719
721
  int num_cells = (MPI::numProcesses() > 1 ? 
720
722
                      mesh.distdata().global_numCells() : mesh.numCells());
 
723
 
 
724
  BinaryFileHeader hdr;
 
725
  hdr.magic = BINARY_MAGIC;
 
726
  hdr.pe_size = MPI::numProcesses();
 
727
  hdr.type = BINARY_MESH_DATA;
 
728
#ifdef HAVE_BIG_ENDIAN
 
729
  hdr.bendian = 1;
 
730
#else
 
731
  hdr.bendian = 0;
 
732
#endif
 
733
      
721
734
  if (MPI::numProcesses() == 1) 
722
735
  {    
723
736
    std::ofstream fp(filename.c_str(), std::ofstream::binary);
724
 
    
 
737
      
725
738
    // Write Header
 
739
    fp.write((char *)&hdr, sizeof(BinaryFileHeader));
726
740
    fp.write((char *)&dim, sizeof(int));
727
741
    
728
742
    fp.write((char *)&type, sizeof(int));
743
757
  {
744
758
 
745
759
#ifdef ENABLE_MPIIO
746
 
    BinaryFileHeader hdr;
747
 
    hdr.magic = BINARY_MAGIC;
748
 
    hdr.pe_size = MPI::numProcesses();
749
 
    hdr.type = BINARY_MESH_DATA;
750
 
#ifdef HAVE_BIG_ENDIAN
751
 
    hdr.bendian = 1;
752
 
#else
753
 
    hdr.bendian = 0;
754
 
#endif
755
 
 
756
760
    
757
761
    MPI_File fh;
758
762
    MPI_Offset byte_offset;