template <int dim>
void CoupledTH<dim>::run() {
make_grid();
setup_system();
do {
assemble_P_system();
linear_solve_P();
assemble_T_system();
linear_solve_T();
time += time_step;
output_results(T_solution, "T");
output_results(P_solution, "P");
} while (time < period);
}
template <int dim>
void CoupledTH<dim>::output_results(Vector<double>& solution,
std::string var_name) const {
DataOut<dim> data_out;
data_out.attach_dof_handler(dof_handler);
data_out.add_data_vector(solution, var_name);
std::vector<types::subdomain_id> partition_int(
triangulation.n_active_cells());
GridTools::get_subdomain_association(triangulation, partition_int);
const Vector<double> partitioning(partition_int.begin(), partition_int.end());
data_out.add_data_vector(partitioning, "partitioning");
data_out.build_patches();
const std::string filename =
var_name + "-solution-" + Utilities::int_to_string(timestep_number, 3);
const std::string pvtu_master_filename = data_out.write_vtu_with_pvtu_record(
"outputfiles/", filename, timestep_number, mpi_communicator);
if (this_mpi_process == 0) {
static std::vector<std::pair<double, std::string>> times_and_names;
times_and_names.push_back(
std::pair<double, std::string>(time, pvtu_master_filename));
std::ofstream pvd_output("outputfiles/"+ var_name + "_solution.pvd");
DataOutBase::write_pvd_record(pvd_output, times_and_names);
}
}