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 : #pragma once 6 : #include "coupling/filtering/interfaces/FilterInterfaceReadOnly.h" 7 : 8 : #include <fstream> 9 : #include <string> 10 : #include <vector> 11 : 12 : // #define DEBUG_WRITE_TO_FILE 13 : 14 : namespace coupling { 15 : namespace filtering { 16 : template <unsigned int dim> class WriteToFile; 17 : } 18 : } // namespace coupling 19 : 20 : /* 21 : * Read-only filter that writes cell data to a specified file in .csv format. 22 : * 23 : * Output format will be compliant to the usual MaMiCo CSV format (using ';' as 24 : * separator). Output order will be: 25 : * - current iteration 26 : * - scalar cell properties 27 : * - vector cell properties 28 : * 29 : * The output file will either contain data of all or just the final coupling 30 : * iteration. Boolean parameter 'overwrite' is true in the latter case. If you 31 : * wish to print out just one cell and not the entire input domain, pass to 32 : * "oneCellOnly" in constructor the corresponding local, md2macro, noGhost 33 : * index. 34 : * 35 : * @author Felix Maurer 36 : */ 37 : template <unsigned int dim> class coupling::filtering::WriteToFile : public coupling::filtering::FilterInterfaceReadOnly<dim> { 38 : public: 39 0 : WriteToFile(const std::vector<coupling::datastructures::CouplingCell<dim>*>& inputCells, 40 : const std::vector<coupling::datastructures::CouplingCell<dim>*>& outputCells, const std::array<bool, 7> filteredValues, 41 : std::string location, // output file location 42 : bool overwrite = false, int oneCellOnly = -1) 43 : : 44 : 45 0 : coupling::filtering::FilterInterfaceReadOnly<dim>(inputCells, outputCells, filteredValues, "WTF"), _location(location), _overwrite(overwrite), 46 0 : _oneCellOnly(oneCellOnly), _iteration(1) { 47 0 : if (!_overwrite) { 48 0 : _file.open(location); 49 0 : _file.close(); 50 : } 51 : 52 : #ifdef DEBUG_WRITE_TO_FILE 53 : std::cout << " WTF: Write to file instance created. Will save to: " << _location << std::endl; 54 : if (_overwrite) 55 : std::cout << " It will only print output of the last iteration." << std::endl; 56 : if (_oneCellOnly != -1) 57 : std::cout << " It will only print data of cell with linear " 58 : "sequence domain index " 59 : << _oneCellOnly << std::endl; 60 : #endif 61 0 : } 62 : 63 0 : ~WriteToFile() { 64 : #ifdef DEBUG_WRITE_TO_FILE 65 : std::cout << " WTF: Write to file instance deconstructed." << std::endl; 66 : #endif 67 0 : } 68 : 69 : void operator()(); 70 : 71 : private: 72 : std::string _location; 73 : 74 : // true of only the last iteration should be in file output 75 : bool _overwrite; 76 : 77 : //-1 if all cells should be in file output, holds index of the only cell to be 78 : // outputted otherwise 79 : int _oneCellOnly; // TODO: use CellIndex! 80 : 81 : std::ofstream _file; 82 : unsigned int _iteration; 83 : }; 84 : 85 : // include implementation of header 86 : #include "WriteToFile.cpph"