Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//
// Software License for AMDiS
//
// Copyright (c) 2010 Dresden University of Technology
// All rights reserved.
// Authors: Simon Vey, Thomas Witkowski et al.
//
// This file is part of AMDiS
//
// See also license.opensource.txt in the distribution.
#include <stdio.h>
#include <string>
#include <fstream>
#include <sstream>
#include <cmath>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/convenience.hpp>
#include <boost/lexical_cast.hpp>
#ifdef HAVE_PARALLEL_DOMAIN_AMDIS
#include <mpi.h>
#endif
#include "VtkVectorWriter.h"
#include "VtkVectorWriter.hh"
#include "DataCollector.h"
#include "DataCollector.hh"
#include "DOFVector.h"
#include "SurfaceRegion_ED.h"
#include "ElementRegion_ED.h"
namespace AMDiS {
int VtkVectorWriter::updateAnimationFile(std::string valueFilename,
std::vector< std::string > *paraViewAnimationFrames,
std::string animationFilename)
{
FUNCNAME("VtkVectorWriter::Impl<S>::updateAnimationFile()");
size_t found = valueFilename.find_last_of("/\\");
paraViewAnimationFrames->push_back(valueFilename.substr(found + 1));
boost::iostreams::filtering_ostream file;
{
std::ofstream swapfile(animationFilename.c_str(),
std::ios::out | std::ios::trunc);
TEST_EXIT(swapfile.is_open())
("Cannot open file %s for writing!\n", animationFilename.c_str());
swapfile.close();
}
file.push(boost::iostreams::file_descriptor_sink(animationFilename,
std::ios::trunc));
file << "<?xml version=\"1.0\"?>\n";
file << "<VTKFile type=\"Collection\" version=\"0.1\" >" << "\n";
file << "<Collection>\n";
int counter = 0;
std::vector< std::string >::iterator it;
for (it = paraViewAnimationFrames->begin();
it < paraViewAnimationFrames->end();
++it, counter++) {
file << "<DataSet timestep=\"" << counter
<< "\" part=\"0\" file=\"" << (*it) << "\"/>\n";
}
file << "</Collection>\n";
file << "</VTKFile>\n";
return 0;
}
void VtkVectorWriter::writeFile(std::vector<DOFVector<double>* > &values,
std::string filename,
bool writeParallel,
bool writeAs3dVector)
DOFVector<std::vector<double> > *newValues = new DOFVector<std::vector<double> >(values[0]->getFeSpace(), values[0]->getName());
std::vector<DOFIterator<double>* > iterators;
for (size_t i = 0; i < values.size(); i++)
iterators.push_back(new DOFIterator<double>(values[i],USED_DOFS));
for (size_t i = 0; i < iterators.size(); i++)
iterators[i]->reset();
DOFIterator<std::vector<double> > resultIter(newValues, USED_DOFS);
for(resultIter.reset(); !resultIter.end(); resultIter++)
{
for (size_t i = 0; i < static_cast<size_t>(iterators.size()); i++)
val.push_back(*(*(iterators[i])));
*resultIter = val;
for (size_t i = 0; i < static_cast<size_t>(iterators.size()); i++)
(*(iterators[i]))++;
writeFile(newValues, filename, writeParallel, writeAs3dVector);
for (size_t i = 0; i < iterators.size(); i++)
delete iterators[i];
delete newValues;
}
void VtkVectorWriter::writeFile(WorldVector<DOFVector<double>* > &values,
std::string filename,
bool writeParallel,
bool writeAs3dVector)
DOFVector<WorldVector<double> > *newValues = new DOFVector<WorldVector<double> >(values[0]->getFeSpace(), values[0]->getName());
WorldVector<DOFIterator<double>* > iterators;
for (size_t i = 0; i < static_cast<size_t>(values.getSize()); i++)
iterators[i] = new DOFIterator<double>(values[i],USED_DOFS);
for (size_t i = 0; i < static_cast<size_t>(iterators.getSize()); i++)
iterators[i]->reset();
DOFIterator<WorldVector<double> > resultIter(newValues, USED_DOFS);
for(resultIter.reset(); !resultIter.end(); resultIter++)
{
for (size_t i = 0; i < static_cast<size_t>(iterators.getSize()); i++)
(*resultIter)[i] = *(*(iterators[i]));
for (size_t i = 0; i < static_cast<size_t>(iterators.size()); i++)
(*(iterators[i]))++;
writeFile(newValues, filename, writeParallel, writeAs3dVector);
for (size_t i = 0; i < static_cast<size_t>(iterators.getSize()); i++)
delete iterators[i];
delete newValues;
}
void VtkVectorWriter::writeFile(SystemVector *values,
std::string filename,
bool writeParallel,
bool writeAs3dVector)
DOFVector<std::vector<double> > *newValues = new DOFVector<std::vector<double> >(values->getDOFVector(0)->getFeSpace(), values->getName());
std::vector<DOFIterator<double>* > iterators;
for (size_t i = 0; i < static_cast<size_t>(values->getSize()); i++)
iterators.push_back(new DOFIterator<double>(values->getDOFVector(i),USED_DOFS));
for (size_t i = 0; i < iterators.size(); i++)
iterators[i]->reset();
DOFIterator<std::vector<double> > resultIter(newValues, USED_DOFS);
for(resultIter.reset(); !resultIter.end(); resultIter++)
{
for (size_t i = 0; i < static_cast<size_t>(iterators.size()); i++)
val.push_back(*(*(iterators[i])));
*resultIter = val;
for (size_t i = 0; i < static_cast<size_t>(iterators.size()); i++)
(*(iterators[i]))++;
writeFile(newValues, filename, writeParallel, writeAs3dVector);
for (size_t i = 0; i < iterators.size(); i++)
delete iterators[i];
delete newValues;
}
}