mg_transfer,
mg_smoother,
mg_smoother);
- //mg.set_debug(6);
+ mg.set_debug(6);
mg.set_edge_matrices(mg_interface_down, mg_interface_up);
PreconditionMG<dim, vector_t, MGTransferPrebuilt<vector_t> >
solution = 0;
+ try
+ {
cg.solve (system_matrix, solution, system_rhs,
preconditioner);
+ }
+ catch (...)
+ {
+ output_results(42);
+ constraints.distribute (solution);
+ output_results(43);
+ MPI_Barrier(MPI_COMM_WORLD);
+ exit(0);
+ }
+
constraints.distribute (solution);
}
GridRefinement::refine_and_coarsen_fixed_number (triangulation,
estimated_error_per_cell,
0.3, 0.03);
+
triangulation.execute_coarsening_and_refinement ();
}
TrilinosWrappers::MPI::Vector res_ghosted = temp_solution;
res_ghosted = temp;
+
data_out.attach_dof_handler (mg_dof_handler);
data_out.add_data_vector (temp_solution, "solution");
data_out.add_data_vector (res_ghosted, "res");
// static const HyperBallBoundary<dim> boundary;
// triangulation.set_boundary (0, boundary);
+ triangulation.refine_global (2);
}
else
+ //triangulation.refine_global (1);
+ refine_grid ();
deallog << " Number of active cells: "
using namespace dealii;
using namespace Step50;
+ LaplaceProblem<2> laplace_problem(3);
laplace_problem.run ();
}
catch (std::exception &exc)
#include <deal.II/numerics/matrix_tools.h>
#include <deal.II/numerics/data_out.h>
+#include <deal.II/base/timer.h>
+
+#include <deal.II/lac/sparse_direct.h>
+
#include <fstream>
#include <iostream>
// a list of constraints to hold the hanging nodes and the boundary
// conditions.
ConstraintMatrix constraints;
+ TimerOutput computing_timer;
SparsityPattern sparsity_pattern;
SparseMatrix<double> system_matrix;
Step6<dim>::Step6 ()
:
dof_handler (triangulation),
- fe (2)
+ computing_timer (std::cout,
+ TimerOutput::summary,
+ TimerOutput::wall_times),
+ fe (1)
{}
template <int dim>
void Step6<dim>::setup_system ()
{
+ computing_timer.enter_section ("distribute");
dof_handler.distribute_dofs (fe);
+ computing_timer.exit_section ("distribute");
solution.reinit (dof_handler.n_dofs());
system_rhs.reinit (dof_handler.n_dofs());
// from computations on the previous mesh before the last adaptive
// refinement):
constraints.clear ();
+ computing_timer.enter_section ("hanging");
DoFTools::make_hanging_node_constraints (dof_handler,
constraints);
+ computing_timer.exit_section ("hanging");
// Now we are ready to interpolate the ZeroFunction to our boundary with
// instead because then we would first write into these locations only to
// later set them to zero again during condensation.
CompressedSparsityPattern c_sparsity(dof_handler.n_dofs());
+ computing_timer.enter_section ("makesp");
DoFTools::make_sparsity_pattern(dof_handler,
c_sparsity,
constraints,
/*keep_constrained_dofs = */ false);
+ computing_timer.exit_section ("makesp");
// Now all non-zero entries of the matrix are known (i.e. those from
// regularly assembling the matrix and those that were introduced by
template <int dim>
void Step6<dim>::assemble_system ()
{
- const QGauss<dim> quadrature_formula(3);
+ const QGauss<dim> quadrature_formula(2);
FEValues<dim> fe_values (fe, quadrature_formula,
update_values | update_gradients |
template <int dim>
void Step6<dim>::solve ()
{
- SolverControl solver_control (1000, 1e-12);
- SolverCG<> solver (solver_control);
-
- PreconditionSSOR<> preconditioner;
- preconditioner.initialize(system_matrix, 1.2);
-
- solver.solve (system_matrix, solution, system_rhs,
- preconditioner);
+ SparseDirectUMFPACK u;
+ u.initialize(system_matrix);
+ u.vmult(solution, system_rhs);
constraints.distribute (solution);
}
template <int dim>
void Step6<dim>::run ()
{
- for (unsigned int cycle=0; cycle<8; ++cycle)
+ for (unsigned int cycle=0; cycle<17; ++cycle)
{
std::cout << "Cycle " << cycle << ':' << std::endl;
std::cout << " Number of active cells: "
<< triangulation.n_active_cells()
<< std::endl;
-
+ computing_timer.enter_section ("setup");
setup_system ();
+ computing_timer.exit_section ("setup");
std::cout << " Number of degrees of freedom: "
<< dof_handler.n_dofs()
<< std::endl;
+ computing_timer.enter_section ("ass");
+
assemble_system ();
+ computing_timer.exit_section ("ass");
solve ();
- output_results (cycle);
+ //output_results (cycle);
}
// After we have finished computing the solution on the finest mesh, and
// on this final mesh to a file. As already done in one of the previous
// examples, we use the EPS format for output, and to obtain a reasonable
// view on the solution, we rescale the z-axis by a factor of four.
+ /*
DataOutBase::EpsFlags eps_flags;
eps_flags.z_scaling = 4;
data_out.build_patches ();
std::ofstream output ("final-solution.eps");
- data_out.write_eps (output);
+ data_out.write_eps (output);*/
}