Line data Source code
1 : // This file is part of the Mamico project. For conditions of distribution
2 : // and use, please see the copyright notice in Mamico's main folder, or at
3 : // www5.in.tum.de/mamico
4 :
5 : /** Implementation of ReadFromFile.h
6 : * @author Felix Maurer
7 : */
8 :
9 : // Member functions of ReadFromFile.h:
10 0 : template <unsigned int dim> void coupling::filtering::ReadFromFile<dim>::operator()() {
11 : #ifdef DEBUG_READ_FROM_FILE
12 : std::cout << " RFF: Now reading input data from: " << _location;
13 : #endif
14 :
15 0 : _file.open(_location);
16 :
17 : // Skip all lines of previous iterations
18 0 : std::string skipstr;
19 0 : for (unsigned int s = 0; s < _iteration * ((coupling::filtering::FilterInterface<dim>::_inputCells.size()) + 1); s++)
20 0 : std::getline(_file, skipstr);
21 :
22 : // TODO: check if number of lines match number of cells
23 :
24 0 : for (unsigned int ic_index = 0; ic_index < coupling::filtering::FilterInterface<dim>::_inputCells.size(); ic_index++) {
25 : // get next input line
26 0 : std::string linestr;
27 0 : std::getline(_file, linestr);
28 0 : std::istringstream lineiss(linestr);
29 :
30 : // store all values from line
31 0 : std::vector<double> doublesFromLine;
32 :
33 : // interpret substrings as doubles
34 0 : std::string d;
35 0 : while (std::getline(lineiss, d, ';')) {
36 0 : if (d != " ") { // ignore what comes after last ';'
37 0 : doublesFromLine.push_back(std::stod(d));
38 :
39 : #ifdef DEBUG_READ_FROM_FILE
40 : if (ic_index == 0)
41 : std::cout << " RFF: New double read for cell 0: " << doublesFromLine.back() << std::endl;
42 : #endif
43 : }
44 : }
45 :
46 : // TODO: check if number of doubles match dim*_vectorSetters.size() +
47 : // _scalarSetters.size()
48 :
49 : // iteration, indexes. Adjust this if write-to-file's output changes!
50 0 : const unsigned int const_offset = 1;
51 :
52 : // increases for each double read from line
53 0 : unsigned int incr_offset = 0;
54 :
55 : // Apply scalar setters
56 0 : for (const auto scalarProperty : coupling::filtering::FilterInterface<dim>::_scalarAccessFunctionPairs) {
57 0 : (coupling::filtering::FilterInterface<dim>::_outputCells[ic_index]->*scalarProperty.set)(doublesFromLine[const_offset + incr_offset]);
58 :
59 : #ifdef DEBUG_READ_FROM_FILE
60 : if (ic_index == 0)
61 : std::cout << " RFF: Scalar sent to cell 0: " << doublesFromLine[0 /*const_offset + incr_offset*/] << std::endl;
62 : #endif
63 :
64 0 : incr_offset++;
65 : }
66 : // Apply vector setters
67 0 : for (const auto vectorProperty : coupling::filtering::FilterInterface<dim>::_vectorAccessFunctionPairs) {
68 0 : tarch::la::Vector<dim, double> tempVec;
69 0 : for (unsigned int d = 0; d < dim; d++) {
70 0 : tempVec[d] = doublesFromLine[const_offset + incr_offset + d];
71 : }
72 :
73 : #ifdef DEBUG_READ_FROM_FILE
74 : if (ic_index == 0)
75 : std::cout << " RFF: Vector sent to cell 0: " << tempVec << std::endl;
76 : #endif
77 :
78 0 : (coupling::filtering::FilterInterface<dim>::_outputCells[ic_index]->*vectorProperty.set)(tempVec);
79 0 : incr_offset += dim;
80 : }
81 : }
82 :
83 0 : _file.close();
84 0 : _iteration++;
85 :
86 : #ifdef DEBUG_READ_FROM_FILE
87 : std::cout << " ... done" << std::endl;
88 : #endif
89 0 : }
|