~njansson/dolfin/hpc

« back to all changes in this revision

Viewing changes to src/io/XMLFile.cpp

  • Committer: Niclas Jansson
  • Date: 2010-10-17 10:21:52 UTC
  • Revision ID: njansson@csc.kth.se-20101017102152-e6u3c9uwxa4z19c8
Minor fixes in configure.ac

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
 
26
27
#include <dolfin/fem/DofMap.h>
27
28
#include <dolfin/parameter/Parameter.h>
28
29
#include <dolfin/parameter/ParameterList.h>
 
30
#include <dolfin/main/MPI.h>
29
31
 
30
32
#include "XMLObject.h"
31
33
#include "XMLVector.h"
32
34
#include "XMLMatrix.h"
33
35
#include "XMLMesh.h"
 
36
#include "PXMLMesh.h"
34
37
#include "XMLMeshFunction.h"
35
38
#include "XMLDofMap.h"
36
39
#include "XMLFunction.h"
83
86
 
84
87
  if ( xmlObject )
85
88
    delete xmlObject;
86
 
  xmlObject = new XMLMesh(mesh);
 
89
  
 
90
  if(MPI::numProcesses() > 1)
 
91
    xmlObject = new PXMLMesh(mesh);
 
92
  else
 
93
    xmlObject = new XMLMesh(mesh);
87
94
  parseFile();
88
95
}
89
96
//-----------------------------------------------------------------------------
169
176
    delete f.f;
170
177
  f.f = new DiscreteFunction(*mesh, *x, finite_element_signature, dof_map_signature);
171
178
  f._type = Function::discrete;
 
179
 
 
180
  DiscreteFunction& ff = dynamic_cast<DiscreteFunction&>(*f.f);
 
181
  ff.local_vector = x;  
 
182
  
172
183
  f.rename("u", "discrete function from file data");
173
184
}
174
185
//-----------------------------------------------------------------------------
202
213
//-----------------------------------------------------------------------------
203
214
void XMLFile::operator<<(GenericVector& x)
204
215
{
 
216
 
205
217
  // Open file
206
218
  FILE* fp = openFile();
207
219
 
208
220
  // Get vector values
209
 
  real* values = new real[x.size()];
 
221
  real* values = new real[x.local_size()];
210
222
  x.get(values);
211
 
  
 
223
 
212
224
  // Write vector in XML format
213
 
  fprintf(fp, "  <vector size=\"%u\"> \n", x.size() );
214
 
  for (unsigned int i = 0; i < x.size(); i++) 
 
225
  fprintf(fp, "  <vector size=\"%u\"> \n", x.local_size() );
 
226
  for (unsigned int i = 0; i < x.local_size(); i++) 
215
227
  {
216
228
    fprintf(fp, "    <entry row=\"%u\" value=\"%.15g\"/>\n", i, values[i]);
217
 
    if ( i == (x.size() - 1))
218
 
      fprintf(fp, "  </vector>\n");
 
229
        if ( i == (x.local_size() - 1))
 
230
          fprintf(fp, "  </vector>\n");
219
231
  }
220
232
  
221
233
  // Delete vector values
226
238
  
227
239
//  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
240
  message(1, "Saved vector  to file %s in DOLFIN XML format.", filename.c_str());
 
241
 
229
242
}
230
243
//-----------------------------------------------------------------------------
231
244
void XMLFile::operator<<(GenericMatrix& A)
577
590
//-----------------------------------------------------------------------------
578
591
FILE* XMLFile::openFile()
579
592
{
 
593
 
580
594
  // Open file
581
595
  FILE *fp = fopen(filename.c_str(), "r+");
582
596