28 #if defined __GNUC__ && defined HAVE_BFD
30 #include "third_party/backtrace.c"
34 #if defined __GNUC__ && defined HAVE_BFD
35 void hdl(
int sig, siginfo_t *siginfo,
void *context)
37 printf(
"Signal handler exception caught, Signal [number, error_number, code]: [%i, %i, %i].\n.", siginfo->si_signo, siginfo->si_errno, siginfo->si_code);
43 size = backtrace(array, 100);
46 Hermes::backtrace_symbols_fd(array, size, 0);
54 this->default_val = default_val;
55 this->user_set =
false;
60 #if defined __GNUC__ && defined HAVE_BFD
61 act.sa_sigaction = &hdl;
62 act.sa_flags = SA_SIGINFO;
63 sigaction(SIGSEGV, &this->act, 0);
67 this->
parameters.insert(std::pair<HermesCommonApiParam, Parameter*>(Hermes::numThreads,
new Parameter(NUM_THREADS)));
68 this->
parameters.insert(std::pair<HermesCommonApiParam, Parameter*>(Hermes::matrixSolverType,
new Parameter(SOLVER_UMFPACK)));
69 this->
parameters.insert(std::pair<HermesCommonApiParam, Parameter*>(Hermes::directMatrixSolverType,
new Parameter(SOLVER_UMFPACK)));
71 this->
parameters.insert(std::pair<HermesCommonApiParam, Parameter*>(Hermes::showInternalWarnings,
new Parameter(1)));
73 this->
parameters.insert(std::pair<HermesCommonApiParam, Parameter*>(Hermes::showInternalWarnings,
new Parameter(0)));
75 this->
parameters.insert(std::pair<HermesCommonApiParam, Parameter*>(Hermes::useAccelerators,
new Parameter(1)));
76 this->
parameters.insert(std::pair<HermesCommonApiParam, Parameter*>(Hermes::checkMeshesOnLoad,
new Parameter(1)));
79 #ifdef WITH_PARALUTION
80 this->
setter_handlers.insert(std::pair<HermesCommonApiParam, typename Api::SetterHandler>(Hermes::numThreads, &ParalutionInitialization::set_threads_paralution));
81 this->
value_setter_handlers.insert(std::pair<std::pair<HermesCommonApiParam, int>,
typename Api::SetterHandler>(std::pair<HermesCommonApiParam, int>(Hermes::matrixSolverType, SOLVER_PARALUTION_ITERATIVE), &ParalutionInitialization::init_paralution));
82 this->
value_setter_handlers.insert(std::pair<std::pair<HermesCommonApiParam, int>,
typename Api::SetterHandler>(std::pair<HermesCommonApiParam, int>(Hermes::matrixSolverType, SOLVER_PARALUTION_AMG), &ParalutionInitialization::init_paralution));
83 this->
change_handlers.insert(std::pair<std::pair<HermesCommonApiParam, int>,
typename Api::SetterHandler>(std::pair<HermesCommonApiParam, int>(Hermes::matrixSolverType, SOLVER_PARALUTION_ITERATIVE), &ParalutionInitialization::deinit_paralution));
84 this->
change_handlers.insert(std::pair<std::pair<HermesCommonApiParam, int>,
typename Api::SetterHandler>(std::pair<HermesCommonApiParam, int>(Hermes::matrixSolverType, SOLVER_PARALUTION_AMG), &ParalutionInitialization::deinit_paralution));
96 for (std::map<HermesCommonApiParam, Parameter*>::iterator param_iterator = this->
parameters.begin(); param_iterator != this->
parameters.end(); param_iterator++)
98 std::map<std::pair<HermesCommonApiParam, int>,
SetterHandler>::iterator change_handler_iterator = this->
change_handlers.find(std::pair<HermesCommonApiParam, int>(param_iterator->first, param_iterator->second->user_set ? param_iterator->second->user_val : param_iterator->second->default_val));
100 change_handler_iterator->second();
103 for (std::map<HermesCommonApiParam, Parameter*>::const_iterator it = this->
parameters.begin(); it != this->
parameters.end(); ++it)
112 return temp_api.get_integral_param_value(param);
116 if (this->
parameters.find(param)->second->user_set)
117 return this->
parameters.find(param)->second->user_val;
119 return this->
parameters.find(param)->second->default_val;
128 if (this->
parameters.find(param)->second->user_set)
130 std::map<std::pair<HermesCommonApiParam, int>,
SetterHandler>::iterator change_handler_iterator = this->
change_handlers.find(std::pair<HermesCommonApiParam, int>(param, this->
parameters.find(param)->second->user_val));
133 change_handler_iterator->second();
136 this->
parameters.find(param)->second->user_set =
true;
137 this->
parameters.find(param)->second->user_val = value;
141 std::map<HermesCommonApiParam, SetterHandler>::iterator setter_handler_iterator = this->
setter_handlers.find(param);
144 setter_handler_iterator->second();
148 std::map<std::pair<HermesCommonApiParam, int>,
SetterHandler>::iterator value_setter_handler_iterator = this->
value_setter_handlers.find(std::pair<HermesCommonApiParam, int>(param, this->
parameters.find(param)->second->user_val));
151 value_setter_handler_iterator->second();
155 #if defined(WIN32) || defined(_WINDOWS)
API Class containing settings for the whole HermesCommon.
General namespace for the Hermes library.
Exception interface Basically a std::exception, but with a constructor with string and with print_msg...
std::map< std::pair< HermesCommonApiParam, int >, SetterHandler > value_setter_handlers
PARALUTION solver interface.
std::map< HermesCommonApiParam, Parameter * > parameters
std::map< HermesCommonApiParam, SetterHandler > setter_handlers
HERMES_COMMON_API Hermes::Api HermesCommonApi
Global instance used inside Hermes which is also accessible to users.
std::map< std::pair< HermesCommonApiParam, int >, SetterHandler > change_handlers
File containing functionality for investigating call stack.
File containing definition of exceptions classes.
Basic matrix classes and operations.
HermesCommonApiParam
Enumeration of potential keys in the Api::parameters storage.
File containing common definitions, and basic global enums etc. for HermesCommon. ...
Parameter(int default_val)