~njansson/dolfin/hpc

« back to all changes in this revision

Viewing changes to src/io/XMLFile.cpp

  • Committer: Niclas Jansson
  • Date: 2011-06-10 14:33:43 UTC
  • Revision ID: njansson@csc.kth.se-20110610143343-d21p4am8rghiojfm
Added rudimentary header to binary files

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
// Modified by Garth N. Wells 2006.
6
6
// Modified by Ola Skavhaug 2006.
7
7
// Modified by Magnus Vikstrom 2007.
 
8
// Modified by Niclas Jansson 2008.
8
9
//
9
10
// First added:  2002-12-03
10
 
// Last changed: 2008-04-22
 
11
// Last changed: 2008-06-25
11
12
 
12
13
#include <stdarg.h>
13
14
 
24
25
#include <dolfin/function/Function.h>
25
26
#include <dolfin/function/DiscreteFunction.h>
26
27
#include <dolfin/fem/DofMap.h>
 
28
#include <dolfin/parameter/parameters.h>
27
29
#include <dolfin/parameter/Parameter.h>
28
30
#include <dolfin/parameter/ParameterList.h>
 
31
#include <dolfin/main/MPI.h>
29
32
 
30
 
#include "XMLObject.h"
31
 
#include "XMLVector.h"
32
 
#include "XMLMatrix.h"
33
 
#include "XMLMesh.h"
34
 
#include "XMLMeshFunction.h"
35
 
#include "XMLDofMap.h"
36
 
#include "XMLFunction.h"
37
 
#include "XMLFiniteElement.h"
38
 
#include "XMLParameterList.h"
39
 
#include "XMLBLASFormData.h"
40
 
#include "XMLGraph.h"
41
 
#include "XMLFile.h"
 
33
#include <dolfin/io/XMLObject.h>
 
34
#include <dolfin/io/XMLVector.h>
 
35
#include <dolfin/io/XMLMatrix.h>
 
36
#include <dolfin/io/XMLMesh.h>
 
37
#include <dolfin/io/PXMLMesh.h>
 
38
#include <dolfin/io/XMLMeshFunction.h>
 
39
#include <dolfin/io/XMLDofMap.h>
 
40
#include <dolfin/io/XMLFunction.h>
 
41
#include <dolfin/io/XMLFiniteElement.h>
 
42
#include <dolfin/io/XMLParameterList.h>
 
43
#include <dolfin/io/XMLBLASFormData.h>
 
44
#include <dolfin/io/XMLGraph.h>
 
45
#include <dolfin/io/XMLFile.h>
42
46
 
43
47
using namespace dolfin;
44
48
 
83
87
 
84
88
  if ( xmlObject )
85
89
    delete xmlObject;
86
 
  xmlObject = new XMLMesh(mesh);
 
90
  
 
91
  if(MPI::numProcesses() > 1 && !dolfin_get("Mesh read in serial"))
 
92
    xmlObject = new PXMLMesh(mesh);
 
93
  else
 
94
    xmlObject = new XMLMesh(mesh);
87
95
  parseFile();
88
96
}
89
97
//-----------------------------------------------------------------------------
169
177
    delete f.f;
170
178
  f.f = new DiscreteFunction(*mesh, *x, finite_element_signature, dof_map_signature);
171
179
  f._type = Function::discrete;
 
180
 
 
181
  DiscreteFunction& ff = dynamic_cast<DiscreteFunction&>(*f.f);
 
182
  ff.local_vector = x;  
 
183
  
172
184
  f.rename("u", "discrete function from file data");
173
185
}
174
186
//-----------------------------------------------------------------------------
202
214
//-----------------------------------------------------------------------------
203
215
void XMLFile::operator<<(GenericVector& x)
204
216
{
 
217
 
205
218
  // Open file
206
219
  FILE* fp = openFile();
207
220
 
208
221
  // Get vector values
209
 
  real* values = new real[x.size()];
 
222
  real* values = new real[x.local_size()];
210
223
  x.get(values);
211
 
  
 
224
 
212
225
  // Write vector in XML format
213
 
  fprintf(fp, "  <vector size=\"%u\"> \n", x.size() );
214
 
  for (unsigned int i = 0; i < x.size(); i++) 
 
226
  fprintf(fp, "  <vector size=\"%u\"> \n", x.local_size() );
 
227
  for (unsigned int i = 0; i < x.local_size(); i++) 
215
228
  {
216
229
    fprintf(fp, "    <entry row=\"%u\" value=\"%.15g\"/>\n", i, values[i]);
217
 
    if ( i == (x.size() - 1))
218
 
      fprintf(fp, "  </vector>\n");
 
230
        if ( i == (x.local_size() - 1))
 
231
          fprintf(fp, "  </vector>\n");
219
232
  }
220
233
  
221
234
  // Delete vector values
226
239
  
227
240
//  message(1, "Saved vector %s (%s) to file %s in DOLFIN XML format.", x.name().c_str(), x.label().c_str(), filename.c_str());
228
241
  message(1, "Saved vector  to file %s in DOLFIN XML format.", filename.c_str());
 
242
 
229
243
}
230
244
//-----------------------------------------------------------------------------
231
245
void XMLFile::operator<<(GenericMatrix& A)
577
591
//-----------------------------------------------------------------------------
578
592
FILE* XMLFile::openFile()
579
593
{
 
594
 
580
595
  // Open file
581
596
  FILE *fp = fopen(filename.c_str(), "r+");
582
597