///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// Demonstrate how to solve an unsteady heat problem in deformable domain with mesh adaptation.
1239 #ifdef OOMPH_HAS_MPI
1240 MPI_Helpers::init(argc,argv);
1274 char doc_info_directory[100];
1284 sprintf(doc_info_directory,
"RESLT_load_balance_first_for_restart");
1294 step = strtok(NULL,
"/");
1295 sprintf(doc_info_directory,
"RESLT_load_balance_first_restarted_from_step_%s",step);
1306 sprintf(doc_info_directory,
"RESLT_prune_first_for_restart");
1315 step = strtok(NULL,
"/");
1316 sprintf(doc_info_directory,
"RESLT_prune_first_restarted_from_step_%s",step);
1322 sprintf(doc_info_directory,
"RESLT");
1326 problem.doc_info().set_directory(doc_info_directory);
1332 std::ofstream output_stream;
1335 problem.doc_info().directory().c_str(),
1336 MPI_Helpers::communicator_pt()->my_rank());
1339 OomphLibWarning::set_stream_pt(&output_stream);
1340 OomphLibError::set_stream_pt(&output_stream);
1351 unsigned max_adapt=10;
1354 problem.set_initial_condition();
1369 unsigned first_load_balance=9;
1370 unsigned second_load_balance=18;
1371 unsigned first_prune=4;
1372 unsigned second_prune=13;
1381 oomph_info <<
"Distributing problem with METIS \n"
1382 <<
"Documenting partitioning in RESLT/partitioning.dat.\n";
1385 element_partition=
problem.distribute();
1388 std::ofstream output_file;
1390 sprintf(
filename,
"%s/partitioning.dat",
problem.doc_info().directory().c_str());
1392 unsigned n=element_partition.size();
1393 output_file << element_partition.size() << std::endl;
1394 for (
unsigned e=0;
e<
n;
e++)
1396 output_file << element_partition[
e] << std::endl;
1398 output_file.close();
1404 oomph_info <<
"Distributing problem with partitioning \n"
1410 std::ifstream input_file;
1412 if (!input_file.is_open())
1419 if (getline(input_file,input_string,
'\n'))
1421 n=atoi(input_string.c_str());
1425 oomph_info <<
"Reached end of file when reading partitioning file\n";
1428 element_partition.resize(
n);
1429 for (
unsigned e=0;
e<
n;
e++)
1431 if (getline(input_file,input_string,
'\n'))
1433 element_partition[
e]=atoi(input_string.c_str());
1437 oomph_info <<
"Reached end of file when reading partitioning file\n";
1446 used_element_partition=
problem.distribute(element_partition);
1450 std::ofstream output_file;
1452 sprintf(
filename,
"%s/partitioning.dat",
problem.doc_info().directory().c_str());
1454 unsigned n_used=used_element_partition.size();
1455 output_file << n_used << std::endl;
1456 for (
unsigned e=0;
e<n_used;
e++)
1458 output_file << used_element_partition[
e] << std::endl;
1460 output_file.close();
1466 std::stringstream comment_stream0;
1467 comment_stream0 <<
"Distributed; Step "
1468 <<
problem.doc_info().number();
1469 problem.doc_solution(comment_stream0.str());
1484 problem.write_trace_file_header();
1490 problem.set_default_partition_in_load_balance();
1495 while (
problem.doc_info().number()<22)
1502 problem.doubly_adaptive_unsteady_newton_solve(dt,
problem.epsilon_t(),
1504 oomph_info <<
"Suggested new dt: " << dt_new << std::endl;
1520 std::stringstream comment_stream;
1521 comment_stream <<
"Step " <<
problem.doc_info().number();
1522 problem.doc_solution(comment_stream.str());
1525 if ((
problem.doc_info().number()==first_prune)||
1526 (
problem.doc_info().number()==second_prune))
1528 std::stringstream comment_stream1;
1529 if ((
problem.doc_info().number()==second_prune)||
1530 ((
problem.doc_info().number()==first_prune)&&
1532 "--load_balance_first"))))
1534 oomph_info <<
"Refining uniformly before pruning\n";
1536 comment_stream1 <<
"Uniform refinement; Step "
1537 <<
problem.doc_info().number();
1541 comment_stream1 <<
"Skipped uniform refinement; Step "
1542 <<
problem.doc_info().number();
1544 problem.doc_solution(comment_stream1.str());
1546 std::stringstream comment_stream2;
1547 if ((
problem.doc_info().number()==second_prune+1)||
1548 ((
problem.doc_info().number()==first_prune+1)&&
1550 "--load_balance_first"))))
1553 problem.prune_halo_elements_and_nodes();
1554 comment_stream2 <<
"Pruned; Step "
1555 <<
problem.doc_info().number();
1559 comment_stream2 <<
"Skipped prune; Step "
1560 <<
problem.doc_info().number();
1562 problem.doc_solution(comment_stream2.str());
1568 if ((
problem.doc_info().number()==first_load_balance)||
1569 (
problem.doc_info().number()==second_load_balance))
1571 oomph_info <<
"\n\n\n LOAD BALANCING \n\n\n";
1576 std::stringstream comment_stream3;
1577 comment_stream3 <<
"Load balanced; Step "
1578 <<
problem.doc_info().number();
1579 problem.doc_solution(comment_stream3.str());
1582 oomph_info <<
"\n\n\n DONE LOAD BALANCING \n\n\n";
1587 #ifdef OOMPH_HAS_MPI
1588 MPI_Helpers::finalize();
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
#define assert(e,...)
Definition: Logger.h:744
Unsteady heat problem in deformable ellipse domain.
Definition: two_d_unsteady_heat_2adapt_load_balance.cc:223
std::ostream *& stream_pt()
Access function for the stream pointer.
Definition: oomph_definitions.h:464
OutputModifier *& output_modifier_pt()
Access function for the output modifier pointer.
Definition: oomph_definitions.h:476
void setup(Time *time_pt)
Create all GeomObjects needed to define the cylinder and the flag.
Definition: turek_flag_non_fsi.cc:277
std::string Partitioning_file
Name of file specifying the partitioning of the problem.
Definition: two_d_unsteady_heat_2adapt_load_balance.cc:135
void get_source(const double &time, const Vector< double > &x, double &source)
Source function.
Definition: stefan_boltzmann.cc:154
std::string Restart_file
Name of restart file.
Definition: two_d_unsteady_heat_2adapt_load_balance.cc:132
string filename
Definition: MergeRestartFiles.py:39
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 parse_and_assign(int argc, char *argv[], const bool &throw_on_unrecognised_args)
Definition: oomph_utilities.cc:760
void doc_specified_flags()
Document specified command line flags.
Definition: oomph_utilities.cc:610
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
OutputModifier default_output_modifier
Single global instatiation of the default output modifier.
Definition: oomph_definitions.cc:325
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213