65#if defined ( __GNUC__ ) && defined ( HAVE_EXECINFO_H )
68 void *trace_elems[max_frames];
69 int trace_elem_count(backtrace( trace_elems, max_frames ));
70 char **stack_syms(backtrace_symbols( trace_elems, trace_elem_count ));
71 for (
int i = 0 ; i < trace_elem_count ; ++i ) {
72 std::cout << stack_syms[i] <<
"\n";
78 fprintf(out,
"stack trace:\n");
81 void *addrlist [ max_frames + 1 ];
84 addrlen = backtrace( addrlist,
sizeof( addrlist ) /
sizeof(
void * ) );
86 fprintf(out,
" <empty, possibly corrupt>\n");
93 symbollist = backtrace_symbols(addrlist, addrlen);
95 size_t funcnamesize = 256;
96 char *funcname = (
char * ) malloc(funcnamesize);
100 for (
int i = skip+1; i < addrlen; i++ ) {
101 char *begin_name = 0, *begin_offset = 0, *end_offset = 0;
105 for (
char *p = symbollist [ i ]; * p; ++p ) {
108 }
else if ( * p ==
'+' ) {
110 }
else if ( * p ==
')' && begin_offset ) {
116 if ( begin_name && begin_offset && end_offset &&
117 begin_name < begin_offset ) {
118 * begin_name++ =
'\0';
119 * begin_offset++ =
'\0';
127 char *ret = abi :: __cxa_demangle(begin_name,
128 funcname, & funcnamesize, & status);
131 fprintf(out,
" %s : %s+%s\n",
132 symbollist [ i ], funcname, begin_offset);
136 fprintf(out,
" %s : %s()+%s\n",
137 symbollist [ i ], begin_name, begin_offset);
141 fprintf(out,
" %s\n", symbollist [ i ]);
148 fprintf(out,
"No backtrace available\n");
155 std :: string problemName, dataOutputFileName, desc;
165 emodelir->giveRecordKeywordField(problemName);
167 auto problem =
classFactory.createEngngModel(problemName.c_str(), 1, _master);
169 OOFEM_WARNING(
"Failed to construct engineering model of type \"%s\".\n", problemName.c_str() );
173 problem->setProblemMode(mode);
174 problem->setParallelMode(parallelFlag);
180 problem->instanciateYourself( dr, *emodelir, dataOutputFileName.c_str(), desc.c_str() );
186void printProgress(
double percentage,
const std::string &title, std::ostream& out) {
187 const int barWidth = 30;
188 int filled =
static_cast<int>(barWidth * percentage);
191 if (&out == &std::cout && isatty(fileno(stdout))) {
192 for (
int i = 0; i < barWidth; ++i) {
193 out << (i < filled ?
"█" :
"░");
195 out <<
" " << std::fixed << std::setprecision(1) << percentage * 100.0 <<
"%";
199 out << (percentage * 100.0) <<
"%" << std::endl;
std::unique_ptr< EngngModel > InstanciateProblem(DataReader &dr, problemMode mode, int contextFlag, EngngModel *_master, bool parallelFlag)