1 #ifndef DUNE_FEM_FEMEOCTABLE_HH 2 #define DUNE_FEM_FEMEOCTABLE_HH 10 #include <dune/common/exceptions.hh> 11 #include <dune/common/fvector.hh> 57 static double calculate (
double &eold,
double &enew,
double &hold,
double &hnew )
60 ret =
log(eold/enew)/
log(hold/hnew);
71 std::vector< std::stringstream* > outputFile_;
72 std::vector< std::string > fileNames_;
73 std::vector< int > level_;
74 std::vector< std::vector< double > > prevError_;
75 std::vector< std::vector< double > > error_;
76 std::vector< std::vector< std::string > > description_;
77 std::vector< double > prevh_;
78 std::vector< bool > initial_;
79 std::vector< std::vector< int > > pos_;
96 std::ofstream filewriter;
98 for(
size_t k=0;k<outputFile_.size();++k)
100 std::stringstream filename;
101 filename << fileNames_[k] <<
".dat";
102 filewriter.open( filename.str().c_str() );
103 filewriter << outputFile_[k]->str();
105 delete outputFile_[k];
110 int init(
const std::string&
path,
111 const std::string& name,
const std::string& descript)
115 DUNE_THROW( IOError,
"Failed to create path `" << path <<
"'." );
116 return init(path+
"/"+name,descript);
119 int init(
const std::string& filename,
const std::string& descript)
124 outputFile_.push_back((std::stringstream *) 0);
126 fileNames_.push_back(
"");
128 prevError_.push_back( std::vector< double >() );
129 error_.push_back( std::vector< double >() );
130 description_.push_back( std::vector< std::string >() );
132 initial_.push_back(1);
133 pos_.push_back( std::vector< int >() );
135 const int tabId = outputFile_.size() -1;
137 fileNames_[tabId] = filename;
138 outputFile_[tabId] =
new std::stringstream;
142 *outputFile_[tabId] << descript <<
"\n";
148 void checkTabId (
const int tabId)
150 if (tabId > nrOfTabs_ || tabId <0)
152 std::cout<<
"No table with id:"<<tabId<<
" existing!"<<std::endl;
157 template <
class StrVectorType>
158 size_t addentry(
const int tabId,
const StrVectorType& descript,
size_t size)
162 if (!initial_[tabId])
164 pos_[tabId].push_back(error_[tabId].size());
165 for (
size_t i=0;i<size;++i) {
166 error_[tabId].push_back(0);
167 prevError_[tabId].push_back(0);
168 description_[tabId].push_back(descript[i]);
170 return pos_[tabId].size()-1;
173 size_t addentry(
const int tabId,
const std::string& descript) {
177 if (!initial_[tabId])
179 pos_[tabId].push_back(error_[tabId].size());
180 error_[tabId].push_back(0);
181 prevError_[tabId].push_back(0);
182 description_[tabId].push_back(descript);
183 return pos_[tabId].size()-1;
186 template <
class VectorType>
187 void seterrors(
const int tabId,
size_t id,
const VectorType& err,
size_t size)
191 assert(
id<pos_[tabId].size());
192 int pos = pos_[tabId][ id ];
193 assert(pos+size <= error_[tabId].size());
195 for (
size_t i=0; i<size; ++i)
196 error_[tabId][pos+i] = err[i];
200 void seterrors(
const int tabId,
size_t id,
const FieldVector<double,SIZE>& err)
202 seterrors(tabId,
id,err,SIZE);
205 void seterrors(
const int tabId,
size_t id,
const double& err) {
208 int pos = pos_[tabId][id];
209 error_[tabId][pos] = err;
213 template<
class EocCalculator>
214 void writeerr(
const int tabId,
215 std::vector<double> &vals,
216 std::vector<std::string> &descriptions,
217 std::string &delimiter,
218 std::string &terminatingChar,
220 std::string &tableSpacer,
225 typedef EocCalculator EocCalculatorType;
229 assert(vals.size() == descriptions.size());
232 if (initial_[tabId]) {
233 *outputFile_[tabId] << header;
234 for(
unsigned int k=0;k<descriptions.size();++k)
236 *outputFile_[tabId] << descriptions[k] << delimiter;
238 for (
unsigned int i=0;i<error_[tabId].size();i++)
240 *outputFile_[tabId] << description_[tabId][i] << delimiter <<
"EOC" << delimiter;
242 *outputFile_[tabId] << terminatingChar <<
"\n" << tableSpacer <<
"\n";
245 *outputFile_[tabId] << level_[tabId] << delimiter;
246 for(
unsigned int k =0; k<vals.size(); ++k)
247 *outputFile_[tabId] << vals[k] << delimiter;
249 for (
unsigned int i=0;i<error_[tabId].size();++i) {
250 *outputFile_[tabId] <<delimiter << error_[tabId][i] << delimiter;
251 if (initial_[tabId]) {
252 *outputFile_[tabId] <<
" --- ";
255 *outputFile_[tabId] << EocCalculatorType :: calculate(prevError_[tabId][i], error_[tabId][i], prevh_[tabId], vals[0] );
257 prevError_[tabId][i]=error_[tabId][i];
258 error_[tabId][i] = -1;
260 *outputFile_[tabId] << terminatingChar<<
"\n" << footer;
264 outputFile_[tabId]->seekp(0,std::ios::end);
265 int length = outputFile_[tabId]->tellp();
266 length -= footer.length();
267 outputFile_[tabId]->seekp(length, std::ios::beg);
270 prevh_[tabId] = vals[0];
272 initial_[tabId] =
false;
275 template<
class EocCalculator>
276 void printerr(
const int tabId,
277 std::vector<double> vals,
278 std::vector<std::string> descriptions,
281 typedef EocCalculator EocCalculatorType;
285 assert(descriptions.size() == vals.size());
289 out <<
"level: " << level_[tabId] << std::endl;
290 for(
unsigned int k =0 ;k< vals.size();++k)
291 out << descriptions[k]<<
": " << vals[k] << std::endl;
293 for (
unsigned int i=0;i<error_[tabId].size();++i)
296 out << description_[tabId][i] <<
": " << error_[tabId][i] << std::endl;
297 if (! initial_[tabId])
299 const double eoc = EocCalculatorType :: calculate( prevError_[tabId][i], error_[tabId][i], prevh_[tabId], vals[0]);
301 out <<
"EOC (" <<description_[tabId][i] <<
"): " << eoc << std::endl;
314 static int initialize(
const std::string& path,
const std::string& name,
const std::string& descript) {
315 return instance().init(path,name,descript);
319 static int initialize(
const std::string& name,
const std::string& descript) {
320 return instance().init(name,descript);
333 template <
class StrVectorType>
334 static size_t addEntry(
const int tabId,
const StrVectorType& descript,
size_t size) {
335 return instance().addentry(tabId,descript,size);
338 template <
class StrVectorType>
339 static size_t addEntry(
const StrVectorType& descript,
size_t size) {
340 return instance().addentry(0,descript,size);
351 template <
class StrVectorType>
352 static size_t addEntry(
const int tabId,
const StrVectorType& descript) {
353 return instance().addentry(tabId,descript,descript.size());
356 template <
class StrVectorType>
357 static size_t addEntry(
const StrVectorType& descript) {
358 return instance().addentry(0,descript,descript.size());
366 static size_t addEntry(
const int tabId,
const std::string& descript) {
367 return instance().addentry(tabId, descript);
370 static size_t addEntry(
const std::string& descript) {
371 return instance().addentry(0, descript);
380 static size_t addEntry(
const int tabId,
const char* descript) {
381 return addEntry(tabId,std::string(descript));
385 return addEntry(0,std::string(descript));
398 template <
class VectorType>
399 static void setErrors(
const int tabId,
size_t id,
const VectorType& err,
int size)
401 instance().seterrors(tabId,
id,err,size);
404 template <
class VectorType>
405 static void setErrors(
size_t id,
const VectorType& err,
int size)
407 instance().seterrors(0,
id,err,size);
419 template <
class VectorType>
420 static void setErrors(
const int tabId,
size_t id,
const VectorType& err) {
421 instance().seterrors(tabId,
id,err,err.size());
424 template <
class VectorType>
425 static void setErrors(
size_t id,
const VectorType& err) {
426 instance().seterrors(0,
id,err,err.size());
437 static void setErrors(
const int tabId,
size_t id,
const FieldVector<double,SIZE>& err) {
438 instance().seterrors(tabId,
id,err);
442 static void setErrors(
size_t id,
const FieldVector<double,SIZE>& err) {
443 instance().seterrors(0,
id,err);
451 static void setErrors(
const int tabId,
size_t id,
const double& err) {
452 instance().seterrors(tabId,
id,err);
456 instance().seterrors(0,
id,err);
475 std::vector<double> &vals,
476 std::vector<std::string> &descriptions,
477 std::string delimiter =
" ",
478 std::string terminatingChar =
"",
479 std::string header =
"",
480 std::string tableSpacer =
"",
481 std::string footer =
"" )
483 instance().writeerr<
DefaultEocCalculator> (tabId, vals, descriptions, delimiter, terminatingChar, header, tableSpacer, footer);
486 static void write(std::vector<double> &vals,
487 std::vector<std::string> &descriptions,
488 std::string delimiter =
" ",
489 std::string terminatingChar =
"",
490 std::string header =
"",
491 std::string tableSpacer =
"",
492 std::string footer =
"" 495 instance().writeerr<
DefaultEocCalculator> (0, vals, descriptions, delimiter, terminatingChar, header, tableSpacer, footer);
513 template<
class EocCalculatorType>
515 std::vector<double> &vals,
516 std::vector<std::string> &descriptions,
517 std::string delimiter =
" ",
518 std::string terminatingChar =
"",
519 std::string header =
"",
520 std::string tableSpacer =
"",
521 std::string footer =
"" 524 instance().template writeerr<EocCalculatorType>(tabId, vals, descriptions, delimiter, terminatingChar, header, tableSpacer, footer);
527 template<
class EocCalculatorType>
528 static void write(std::vector<double> &vals,
529 std::vector<std::string> &descriptions,
530 std::string delimiter =
" ",
531 std::string terminatingChar =
"",
532 std::string header =
"",
533 std::string tableSpacer =
"",
534 std::string footer =
"" 537 instance().template writeerr<EocCalculatorType>(0, vals, descriptions, delimiter, terminatingChar, header, tableSpacer, footer );
554 std::vector<double> &vals,
555 std::vector<std::string> &descriptions,
557 std::string delimiter =
" ",
558 std::string terminatingChar =
"",
559 std::string header =
"",
560 std::string tableSpacer =
"",
561 std::string footer =
"")
567 instance().writeerr<
DefaultEocCalculator>(tabId, vals, descriptions, delimiter, terminatingChar, header, tableSpacer, footer);
570 static void write(std::vector<double> &vals,
571 std::vector<std::string> &descriptions,
573 std::string delimiter =
" ",
574 std::string terminatingChar =
"",
575 std::string header =
"",
576 std::string tableSpacer =
"",
577 std::string footer =
"")
583 instance().writeerr<
DefaultEocCalculator>(0, vals, descriptions, delimiter, terminatingChar, header, tableSpacer, footer);
600 template <
class EocCalculatorType>
602 std::vector<double> &vals,
603 std::vector<std::string> &descriptions,
605 std::string delimiter =
" ",
606 std::string terminatingChar =
"",
607 std::string header =
"",
608 std::string tableSpacer =
"",
609 std::string footer =
"")
612 instance().template printerr<EocCalculatorType>( tabId, vals, descriptions, out );
615 instance().template writeerr<EocCalculatorType>(tabId, vals, descriptions, delimiter, terminatingChar, header, tableSpacer, footer);
618 template <
class EocCalculatorType>
619 static void write(std::vector<double> &vals,
620 std::vector<std::string> &descriptions,
622 std::string delimiter =
" ",
623 std::string terminatingChar =
"",
624 std::string header =
"",
625 std::string tableSpacer =
"",
626 std::string footer =
"")
629 instance().template printerr<EocCalculatorType>(0, vals, descriptions, out );
632 instance().template writeerr<EocCalculatorType>(0, vals, descriptions,delimiter, terminatingChar, header, tableSpacer, footer);
641 #endif // #ifndef DUNE_FEM_FEMEOCTABLE_HH
static void setErrors(size_t id, const FieldVector< double, SIZE > &err)
Definition: femeoctable.hh:442
static int rank()
Definition: mpimanager.hh:116
static size_t addEntry(const std::string &descript)
Definition: femeoctable.hh:370
static void setErrors(const int tabId, size_t id, const double &err)
add a single error value for the given id (returned by addEntry)
Definition: femeoctable.hh:451
static void setErrors(const int tabId, size_t id, const FieldVector< double, SIZE > &err)
add a vector in a FieldVector of error values for the given id (returned by addEntry) ...
Definition: femeoctable.hh:437
static void write(const int tabId, std::vector< double > &vals, std::vector< std::string > &descriptions, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
commit a line to the eoc file
Definition: femeoctable.hh:474
static size_t addEntry(const char *descript)
Definition: femeoctable.hh:384
static size_t addEntry(const int tabId, const StrVectorType &descript, size_t size)
add a vector of new eoc values
Definition: femeoctable.hh:334
static size_t addEntry(const StrVectorType &descript)
Definition: femeoctable.hh:357
static void write(const int tabId, std::vector< double > &vals, std::vector< std::string > &descriptions, std::ostream &out, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
commit a line to the eoc file, using EocCalculatorType for non standart Eoc calculations.
Definition: femeoctable.hh:601
Write a self contained tex table for eoc runs with timing information.
Definition: femeoctable.hh:54
bool createDirectory(const std::string &inName)
create a directory
Definition: io.cc:19
static double log(const Double &v)
Definition: double.hh:865
The Fem Eoc Table writer.
Definition: femeoctable.hh:68
Definition: coordinate.hh:4
static int initialize(const std::string &name, const std::string &descript)
Definition: femeoctable.hh:319
static void write(std::vector< double > &vals, std::vector< std::string > &descriptions, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
Definition: femeoctable.hh:528
static size_t addEntry(const int tabId, const StrVectorType &descript)
add a vector of new eoc values
Definition: femeoctable.hh:352
static int initialize(const std::string &path, const std::string &name, const std::string &descript)
Definition: femeoctable.hh:314
static void write(const int tabId, std::vector< double > &vals, std::vector< std::string > &descriptions, std::ostream &out, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
commit a line to the eoc file
Definition: femeoctable.hh:553
static void setErrors(const int tabId, size_t id, const VectorType &err, int size)
add a vector of error values for the given id (returned by addEntry)
Definition: femeoctable.hh:399
static void setErrors(const int tabId, size_t id, const VectorType &err)
add a vector of error values for the given id (returned by addEntry)
Definition: femeoctable.hh:420
std::string path
Definition: readioparams.cc:155
static void write(const int tabId, std::vector< double > &vals, std::vector< std::string > &descriptions, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
commit a line to the eoc file, using EocCalculatorType to calculate the eoc.
Definition: femeoctable.hh:514
static void setErrors(size_t id, const VectorType &err, int size)
Definition: femeoctable.hh:405
static size_t addEntry(const StrVectorType &descript, size_t size)
Definition: femeoctable.hh:339
static bool verbose()
obtain the cached value for fem.verbose
Definition: io/parameter.hh:444
static void write(std::vector< double > &vals, std::vector< std::string > &descriptions, std::ostream &out, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
Definition: femeoctable.hh:570
static size_t addEntry(const int tabId, const std::string &descript)
add a single new eoc output
Definition: femeoctable.hh:366
static double calculate(double &eold, double &enew, double &hold, double &hnew)
Definition: femeoctable.hh:57
static void write(std::vector< double > &vals, std::vector< std::string > &descriptions, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
Definition: femeoctable.hh:486
static void write(std::vector< double > &vals, std::vector< std::string > &descriptions, std::ostream &out, std::string delimiter=" ", std::string terminatingChar="", std::string header="", std::string tableSpacer="", std::string footer="")
Definition: femeoctable.hh:619
static void setErrors(size_t id, const double &err)
Definition: femeoctable.hh:455
static size_t addEntry(const int tabId, const char *descript)
add a single new eoc output
Definition: femeoctable.hh:380
static void setErrors(size_t id, const VectorType &err)
Definition: femeoctable.hh:425
static FemEocTable & instance()
Definition: femeoctable.hh:307