29 #ifndef OOMPH_UTILITIES_HEADER
30 #define OOMPH_UTILITIES_HEADER
34 #include <oomph-lib-config.h>
84 namespace ANSIEscapeCode
110 namespace DebugHelpers
117 const bool& make_new_line =
false);
128 namespace SecondInvariantHelper
154 namespace MathematicalConstants
157 const double Pi = 3.1415926535897932384626433832795028841971693993751;
160 const std::complex<double>
I(0.0, 1.0);
184 namespace StringConversion
191 std::stringstream ss;
192 ss.precision(float_precision);
228 using namespace StringConversion;
232 to_string(abi::__cxa_demangle(
typeid(obj).
name(), 0, 0, &status));
238 " in demangler, see documentation of "
239 "abi::__cxa_demangle for the meaning";
268 namespace CumulativeTimings
271 extern void start(
const unsigned&
i);
274 extern void halt(
const unsigned&
i);
277 extern void reset(
const unsigned&
i);
289 extern Vector<clock_t>
Timing;
312 template<
class Target,
class Source>
334 template<
class Target,
class Source>
392 for (
unsigned i = 0;
i <
n;
i++)
401 Timing.resize(ntimers, clock_t(0.0));
436 Iterations_and_times.pop_back();
437 setup_new_time_step();
442 double prec_setup_time,
443 double linear_solver_time)
446 if (Iterations_and_times.size() == 0)
448 std::ostringstream error_message;
449 error_message <<
"Iterations_and_times is empty. "
450 <<
"Call setup_new_time_step()\n";
457 tmp_iter_time_vec[0] = (
double)iter;
458 tmp_iter_time_vec[1] = prec_setup_time;
459 tmp_iter_time_vec[2] = linear_solver_time;
460 Iterations_and_times.back().push_back(tmp_iter_time_vec);
466 return Iterations_and_times.size();
472 return Iterations_and_times.back().size();
478 return Iterations_and_times;
484 return Iterations_and_times;
509 Directory_must_exist(true)
519 Directory_must_exist(true)
586 Directory_must_exist =
true;
592 Directory_must_exist =
false;
619 namespace CommandLineArgs
628 this->is_set = is_set;
629 this->arg_pt = arg_pt;
637 this->is_set =
false;
672 extern std::map<std::string, ArgInfo<double>>
679 extern std::map<std::string, ArgInfo<unsigned>>
683 extern std::map<std::string, ArgInfo<std::string>>
687 extern void setup(
int argc,
char** argv);
695 const std::string& documentation =
"Undocumented");
702 const std::string& documentation =
"Undocumented");
709 const std::string& documentation =
"Undocumented");
716 const std::string& documentation =
"Undocumented");
723 const std::string& documentation =
"Undocumented");
745 int argc,
char* argv[],
const bool& throw_on_unrecognised_args =
false);
750 const bool& throw_on_unrecognised_args =
false);
768 unsigned Output_rank;
772 bool Output_from_single_processor;
779 MPIOutputModifier() : Output_rank(0), Output_from_single_processor(false) {}
782 OomphCommunicator*& communicator_pt()
784 return Communicator_pt;
788 virtual bool operator()(std::ostream& stream);
792 void restrict_output_to_single_processor(
const unsigned& output_rank = 0)
794 Output_from_single_processor =
true;
795 Output_rank = output_rank;
801 void allow_output_from_all_processors()
803 Output_from_single_processor =
false;
811 extern MPIOutputModifier oomph_mpi_output;
838 static void init(
int argc,
840 const bool& make_duplicate_of_mpi_comm_world =
true);
844 static void finalize();
853 return MPI_has_been_initialised;
876 namespace ObsoleteCode
892 namespace TecplotNames
895 extern Vector<std::string>
colour;
909 namespace LeakCheckNames
911 extern long QuadTree_build;
912 extern long OcTree_build;
913 extern long QuadTreeForest_build;
914 extern long OcTreeForest_build;
915 extern long RefineableQElement<2> _build;
916 extern long RefineableQElement<3> _build;
917 extern long MacroElement_build;
918 extern long HangInfo_build;
919 extern long Node_build;
920 extern long GeomReference_build;
921 extern long AlgebraicNodeNodeUpdateInfo_build;
922 extern long AlgebraicNode_build;
950 namespace TimingHelpers
981 namespace MemoryUsage
1014 #ifdef OOMPH_HAS_UNISTDH
1023 void doc_my_memory_usage(
const std::string& prefix_string = 0);
1114 typedef double (*TimeSpaceToDoubleFctPt)(
const double&
t,
1147 std::string err =
"No Jacobian function implemented";
1183 Solution_fpt = solution_fpt;
1188 TimeSpaceValueToDoubleVectFctPt derivative_fpt)
1190 Solution_fpt = solution_fpt;
1191 Derivative_fpt = derivative_fpt;
1213 if (Solution_fpt == 0)
1220 return Solution_fpt(
t,
x);
1229 if (Derivative_fpt == 0)
1236 return Derivative_fpt(
t,
x, u);
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
Matrix< Scalar, Dynamic, Dynamic > DenseMatrix
Definition: BenchSparseUtil.h:23
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Definition: oomph_utilities.h:170
bool operator()(const T &x, const T &y) const
Comparison. Are the values identical or not?
Definition: oomph_utilities.h:173
Definition: oomph_utilities.h:499
std::string label() const
String used (e.g.) for labeling output files. Const version.
Definition: oomph_utilities.h:578
unsigned Number
Number to label output file, say.
Definition: oomph_utilities.h:603
void enable_doc()
Enable documentation.
Definition: oomph_utilities.h:536
bool Doc_flag
Doc or don't?
Definition: oomph_utilities.h:600
unsigned number() const
Number used (e.g.) for labeling output files. Const version.
Definition: oomph_utilities.h:560
bool is_doc_enabled() const
Are we documenting?
Definition: oomph_utilities.h:548
bool Directory_must_exist
Definition: oomph_utilities.h:612
void disable_doc()
Disable documentation.
Definition: oomph_utilities.h:542
std::string & label()
String used (e.g.) for labeling output files.
Definition: oomph_utilities.h:572
void disable_error_if_directory_does_not_exist()
Call to issue a warning if the directory does not exists.
Definition: oomph_utilities.h:590
std::string directory() const
Output directory.
Definition: oomph_utilities.h:524
std::string Directory
Directory name.
Definition: oomph_utilities.h:597
void enable_error_if_directory_does_not_exist()
Call to throw an error if directory does not exist.
Definition: oomph_utilities.h:584
DocInfo(const std::string &directory)
Constructor with specific directory.
Definition: oomph_utilities.h:514
std::string number_as_string() const
Get number as a string (useful to completely avoid C-strings).
Definition: oomph_utilities.h:566
std::string Label
String to label output file, say.
Definition: oomph_utilities.h:606
DocInfo()
Definition: oomph_utilities.h:504
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554
Definition: oomph_utilities.h:420
void setup_new_time_step()
Set up a new vector of pairs for a new time step.
Definition: oomph_utilities.h:427
Vector< Vector< Vector< double > > > & iterations_and_times()
Accessor function for the iteration and times.
Definition: oomph_utilities.h:476
Vector< Vector< Vector< double > > > Iterations_and_times
Storage for number of iterations during Newton steps.
Definition: oomph_utilities.h:489
unsigned current_nnewton_step() const
The number of Newton steps.
Definition: oomph_utilities.h:470
DocLinearSolverInfo()
Definition: oomph_utilities.h:424
void add_iteration_and_time(unsigned iter, double prec_setup_time, double linear_solver_time)
Add a new iteration and time pair.
Definition: oomph_utilities.h:441
void clear_current_time_step()
Definition: oomph_utilities.h:434
unsigned current_ntime_step() const
The number of time steps.
Definition: oomph_utilities.h:464
Vector< Vector< Vector< double > > > iterations_and_times() const
Accessor function for the iteration and times (const version).
Definition: oomph_utilities.h:482
Definition: oomph_utilities.h:832
static OomphCommunicator * Communicator_pt
the global communicator
Definition: oomph_utilities.h:869
static bool mpi_has_been_initialised()
return true if MPI has been initialised
Definition: oomph_utilities.h:851
static bool MPI_has_been_initialised
Bool set to true if MPI has been initialised.
Definition: oomph_utilities.h:866
MPI_Helpers(const MPI_Helpers &)
Definition: communicator.h:54
std::ostream *& stream_pt()
Access function for the stream pointer.
Definition: oomph_definitions.h:464
Definition: oomph_definitions.h:222
Definition: oomph_definitions.h:339
Definition: problem.h:151
Definition: oomph_utilities.h:1109
virtual void initialise_from_problem(const Problem *problem_pt)
Overload to grab data from the problem.
Definition: oomph_utilities.h:1159
virtual void jacobian(const double &t, const Vector< double > &x, const Vector< double > &u, DenseMatrix< double > &jacobian) const
Definition: oomph_utilities.h:1142
virtual ~SolutionFunctorBase()
Virtual destructor.
Definition: oomph_utilities.h:1127
virtual Vector< double > derivative(const double &t, const Vector< double > &x, const Vector< double > &u) const =0
Call the derivative function.
virtual Vector< double > operator()(const double &t, const Vector< double > &x) const =0
Call the function.
virtual bool have_jacobian() const
Is a jacobian function implemented?
Definition: oomph_utilities.h:1153
Definition: oomph_utilities.h:1166
virtual ~SolutionFunctor()
Definition: oomph_utilities.h:1194
SolutionFunctor()
Definition: oomph_utilities.h:1175
virtual Vector< double > derivative(const double &t, const Vector< double > &x, const Vector< double > &u) const
Call the derivative function.
Definition: oomph_utilities.h:1224
void operator=(const SolutionFunctor &that)
Definition: oomph_utilities.h:1202
TimeSpaceValueToDoubleVectFctPt Derivative_fpt
Storage for derivative.
Definition: oomph_utilities.h:1243
SolutionFunctor(TimeSpaceToDoubleVectFctPt solution_fpt, TimeSpaceValueToDoubleVectFctPt derivative_fpt)
Definition: oomph_utilities.h:1187
TimeSpaceToDoubleVectFctPt Solution_fpt
Storage for solution.
Definition: oomph_utilities.h:1240
SolutionFunctor(const SolutionFunctor &that)
Definition: oomph_utilities.h:1196
virtual Vector< double > operator()(const double &t, const Vector< double > &x) const
Call the function.
Definition: oomph_utilities.h:1209
SolutionFunctor(TimeSpaceToDoubleVectFctPt solution_fpt)
Definition: oomph_utilities.h:1181
Timer.
Definition: oomph_utilities.h:356
Vector< clock_t > Timing
Cumulative timings.
Definition: oomph_utilities.h:407
double cumulative_time(const unsigned &i)
Report time accumulated by i-th timer.
Definition: oomph_utilities.h:377
void set_ntimers(const unsigned &ntimers)
Set number of timings that can be recorded in parallel.
Definition: oomph_utilities.h:399
Timer(const unsigned &n_timer)
Constructor: Specify number of timers.
Definition: oomph_utilities.h:359
Vector< clock_t > Start_time
Start times of active timers.
Definition: oomph_utilities.h:410
void reset(const unsigned &i)
Reset i-th timer.
Definition: oomph_utilities.h:383
void reset()
Reset all timers.
Definition: oomph_utilities.h:389
void start(const unsigned &i)
(Re-)start i-th timer
Definition: oomph_utilities.h:365
void halt(const unsigned &i)
Halt i-th timer.
Definition: oomph_utilities.h:371
Scalar * y
Definition: level1_cplx_impl.h:128
RealScalar s
Definition: level1_cplx_impl.h:130
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > tmp
Definition: level3_impl.h:365
string Directory
Directory.
Definition: all_foeppl_von_karman/axisym_displ_based_fvk.cc:70
@ Target
Definition: Constants.h:495
void setup(Time *time_pt)
Create all GeomObjects needed to define the cylinder and the flag.
Definition: turek_flag_non_fsi.cc:277
void reset(Vector< double > &unknowns)
Reset unknowns to some nontrivial garbage.
Definition: spring_contact.cc:53
string filename
Definition: MergeRestartFiles.py:39
line
Definition: calibrate.py:103
std::string Green
Definition: oomph_utilities.cc:72
std::string Yellow
Definition: oomph_utilities.cc:73
std::string Red
Definition: oomph_utilities.cc:71
std::string Magenta
Definition: oomph_utilities.cc:75
std::string Cyan
Definition: oomph_utilities.cc:76
void set_text_effect(std::string text_effect)
Definition: oomph_utilities.cc:60
std::string Text_effect
Variable to decide on effects.
Definition: oomph_utilities.cc:67
std::string Blue
Definition: oomph_utilities.cc:74
std::string Black
The code for each type of colour.
Definition: oomph_utilities.cc:70
std::string Reset
Definition: oomph_utilities.cc:77
void broken_assign(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:195
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:212
void doc_available_flags()
Document available command line flags.
Definition: oomph_utilities.cc:676
std::map< std::string, ArgInfo< bool > > Specified_command_line_flag
Map to indicate an input flag as having been set.
Definition: oomph_utilities.cc:413
char ** Argv
Arguments themselves.
Definition: oomph_utilities.cc:410
bool command_line_flag_has_been_set(const std::string &flag)
Definition: oomph_utilities.cc:501
void specify_command_line_flag(const std::string &command_line_flag, const std::string &doc)
Specify possible argument-free command line flag.
Definition: oomph_utilities.cc:451
void check_arg_index(const int &argc, const int &arg_index)
Helper function to check if command line index is legal.
Definition: oomph_utilities.cc:737
void doc_all_flags(std::ostream &outstream)
Document the values of all flags (specified or not).
Definition: oomph_utilities.cc:562
std::map< std::string, ArgInfo< std::string > > Specified_command_line_string_pt
Map to associate an input flag with a string – specified via pointer.
Definition: oomph_utilities.cc:426
std::map< std::string, ArgInfo< int > > Specified_command_line_int_pt
Map to associate an input flag with an int – specified via pointer.
Definition: oomph_utilities.cc:419
void parse_and_assign(int argc, char *argv[], const bool &throw_on_unrecognised_args)
Definition: oomph_utilities.cc:760
std::map< std::string, ArgInfo< double > > Specified_command_line_double_pt
Map to associate an input flag with a double – specified via pointer.
Definition: oomph_utilities.cc:416
int Argc
Number of arguments + 1.
Definition: oomph_utilities.cc:407
std::map< std::string, ArgInfo< unsigned > > Specified_command_line_unsigned_pt
Map to associate an input flag with an unsigned – specified via pointer.
Definition: oomph_utilities.cc:422
void doc_specified_flags()
Document specified command line flags.
Definition: oomph_utilities.cc:610
double cumulative_time(const unsigned &i)
Report time accumulated by i-th timer.
Definition: oomph_utilities.cc:255
void set_ntimers(const unsigned &ntimers)
Set number of timings that can be recorded in parallel.
Definition: oomph_utilities.cc:277
Vector< clock_t > Timing
Cumulative timings.
Definition: oomph_utilities.cc:284
void halt(const unsigned &i)
Halt i-th timer.
Definition: oomph_utilities.cc:249
Vector< clock_t > Start_time
Start times of active timers.
Definition: oomph_utilities.cc:287
void start(const unsigned &i)
(Re-)start i-th timer
Definition: oomph_utilities.cc:243
std::string debug_string(const std::string &filename, const int &line, const bool &make_new_line)
Definition: oomph_utilities.cc:92
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
unsigned Number
The unsigned.
Definition: oomph_definitions.cc:269
const double Pi
50 digits from maple
Definition: oomph_utilities.h:157
const std::complex< double > I(0.0, 1.0)
The imaginary unit.
void empty_top_file()
Definition: oomph_utilities.cc:1564
std::string Top_output_filename
Definition: oomph_utilities.cc:1560
bool Bypass_all_memory_usage_monitoring
Definition: oomph_utilities.cc:1390
void doc_total_memory_usage(const std::string &prefix_string)
Definition: oomph_utilities.cc:1489
void insert_comment_to_continous_top(const std::string &comment)
Insert comment into running continuous top output.
Definition: oomph_utilities.cc:1680
void empty_memory_usage_files()
Definition: oomph_utilities.cc:1522
void run_continous_top(const std::string &comment)
Definition: oomph_utilities.cc:1583
std::string Top_system_string
Definition: oomph_utilities.cc:1552
void stop_continous_top(const std::string &comment)
Definition: oomph_utilities.cc:1641
bool Suppress_mpi_synchronisation
Definition: oomph_utilities.cc:1378
void empty_total_memory_usage_file()
Definition: oomph_utilities.cc:1472
std::string Total_memory_usage_system_string
Definition: oomph_utilities.cc:1459
void doc_memory_usage(const std::string &prefix_string)
Definition: oomph_utilities.cc:1535
std::string My_memory_usage_filename
Definition: oomph_utilities.cc:1398
void empty_my_memory_usage_file()
Definition: oomph_utilities.cc:1402
std::string My_memory_usage_system_string
Definition: oomph_utilities.cc:1384
std::string Total_memory_usage_filename
Definition: oomph_utilities.cc:1468
void obsolete()
Output warning message.
Definition: oomph_utilities.cc:1102
bool FlagObsoleteCode
Flag up obsolete parts of the code.
Definition: oomph_utilities.cc:1099
bool PauseFlag
Flag to enable pausing code – pause the code by default.
Definition: oomph_utilities.cc:1258
double second_invariant(const DenseMatrix< double > &tensor)
Compute second invariant of tensor.
Definition: oomph_utilities.cc:163
void split_string(const std::string &s, char delim, Vector< std::string > &elems)
Definition: oomph_utilities.cc:373
std::string to_string(T object, unsigned float_precision=8)
Definition: oomph_utilities.h:189
std::string to_lower(const std::string &input)
Convert a string to lower case (outputs a copy).
Definition: oomph_utilities.cc:345
std::string to_upper(const std::string &input)
Convert a string to upper case (outputs a copy).
Definition: oomph_utilities.cc:358
Vector< std::string > colour
Tecplot colours.
Definition: oomph_utilities.cc:1159
std::string convert_secs_to_formatted_string(const double &time_in_sec)
Definition: oomph_utilities.cc:1316
std::string get_type_name(T &obj)
Definition: oomph_utilities.h:226
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: gen_axisym_advection_diffusion_elements.h:161
Target checked_static_cast(Source *x)
Definition: oomph_utilities.h:335
void pause(std::string message)
Pause and display message.
Definition: oomph_utilities.cc:1265
Target checked_dynamic_cast(Source *x)
Definition: oomph_utilities.h:313
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
list x
Definition: plotDoE.py:28
string name
Definition: plotDoE.py:33
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
double timer
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:210
Definition: TutorialInplaceLU.cpp:2
Structure to store information on a command line argument.
Definition: oomph_utilities.h:624
ArgInfo()
Definition: oomph_utilities.h:635
T * arg_pt
The place to put the argument's value when it is set.
Definition: oomph_utilities.h:656
std::string doc
Information about what the argument does.
Definition: oomph_utilities.h:659
ArgInfo(const bool &is_set, T *arg_pt, const std::string &doc)
Proper constructor.
Definition: oomph_utilities.h:626
bool is_set
Has this argument been set?
Definition: oomph_utilities.h:653