Chaste Commit::baa90ac2819b962188b7562f2326be23c47859a7
ColumnDataWriter.hpp
1/*
2
3Copyright (c) 2005-2024, University of Oxford.
4All rights reserved.
5
6University of Oxford means the Chancellor, Masters and Scholars of the
7University of Oxford, having an administrative office at Wellington
8Square, Oxford OX1 2JD, UK.
9
10This file is part of Chaste.
11
12Redistribution and use in source and binary forms, with or without
13modification, are permitted provided that the following conditions are met:
14 * Redistributions of source code must retain the above copyright notice,
15 this list of conditions and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice,
17 this list of conditions and the following disclaimer in the documentation
18 and/or other materials provided with the distribution.
19 * Neither the name of the University of Oxford nor the names of its
20 contributors may be used to endorse or promote products derived from this
21 software without specific prior written permission.
22
23THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
29GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
32OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
34*/
35
36#ifndef COLUMNDATAWRITER_HPP_
37#define COLUMNDATAWRITER_HPP_
38
39#include <string>
40#include <vector>
41
42#include "AbstractDataWriter.hpp"
43#include "DataWriterVariable.hpp"
44#include "OutputFileHandler.hpp"
45
52{
53protected:
54
57 std::string mDirectory;
58 std::string mBaseName;
72 std::string mFixedDimensionName;
75 std::vector<DataWriterVariable> mVariables;
77 const unsigned mFieldWidth;
78 const unsigned mPrecision;
79 static const int SPACING = 1;
80 static const int FIXED_DIMENSION_VAR_ID = -1;
81 static const int UNLIMITED_DIMENSION_VAR_ID = -2;
83 std::string mFileExtension;
99
105 void CreateFixedDimensionFile(const std::string& rFileName);
106
112 void CreateInfoFile(const std::string& rFileName);
113
119 void CheckVariableName(const std::string& rName);
120
126 void CheckUnitsName(const std::string& rName);
127
133
134public:
135
146 ColumnDataWriter(const std::string& rDirectory,
147 const std::string& rBaseName,
148 bool cleanDirectory=true,
149 unsigned precision=8);
150
154 virtual ~ColumnDataWriter();
155
164 int DefineUnlimitedDimension(const std::string& rDimensionName,
165 const std::string& rDimensionUnits);
166
176 int DefineFixedDimension(const std::string& rDimensionName,
177 const std::string& rDimensionUnits,
178 long dimensionSize);
179
188 int DefineVariable(const std::string& rVariableName,
189 const std::string& rVariableUnits);
190
197 void SetCommentForInfoFile(std::string comment)
198 {
199 mCommentForInfoFile = comment;
200 }
201
205 virtual void EndDefineMode();
206
210 virtual void AdvanceAlongUnlimitedDimension();
211
220 virtual void PutVariable(int variableID, double variableValue, long dimensionPosition = -1);
221
225 virtual void Close();
226
230 std::string GetOutputDirectory();
231};
232
233#endif //COLUMNDATAWRITER_HPP_
void SetCommentForInfoFile(std::string comment)
void CreateInfoFile(const std::string &rFileName)
void CreateFixedDimensionFile(const std::string &rFileName)
std::string mFileExtension
void CheckUnitsName(const std::string &rName)
static const int SPACING
std::string mUnlimitedDimensionUnits
std::string mUnlimitedDimensionName
const unsigned mFieldWidth
static const int FIXED_DIMENSION_VAR_ID
virtual void EndDefineMode()
virtual void AdvanceAlongUnlimitedDimension()
OutputFileHandler mOutputFileHandler
int DefineVariable(const std::string &rVariableName, const std::string &rVariableUnits)
int DefineUnlimitedDimension(const std::string &rDimensionName, const std::string &rDimensionUnits)
DataWriterVariable * mpFixedDimensionVariable
std::string mCommentForInfoFile
DataWriterVariable * mpUnlimitedDimensionVariable
static const int UNLIMITED_DIMENSION_VAR_ID
bool mNeedAdvanceAlongUnlimitedDimension
out_stream mpCurrentOutputFile
out_stream mpCurrentAncillaryFile
std::string GetOutputDirectory()
void DoAdvanceAlongUnlimitedDimension()
int DefineFixedDimension(const std::string &rDimensionName, const std::string &rDimensionUnits, long dimensionSize)
void CheckVariableName(const std::string &rName)
std::string mFixedDimensionUnits
std::vector< DataWriterVariable > mVariables
std::string mFixedDimensionName
const unsigned mPrecision
virtual void PutVariable(int variableID, double variableValue, long dimensionPosition=-1)