From e8096a895700c65f6d1cef7210ea0b7eb75959dd Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Fri, 12 Oct 2007 17:55:14 +0000 Subject: [PATCH] Make it work for the most part. git-svn-id: https://svn.dealii.org/trunk@15305 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/examples/step-22/Makefile | 2 +- deal.II/examples/step-22/step-22.cc | 105 +++++++++++----------------- 2 files changed, 42 insertions(+), 65 deletions(-) diff --git a/deal.II/examples/step-22/Makefile b/deal.II/examples/step-22/Makefile index 4aee8cd9cc..26266ada33 100644 --- a/deal.II/examples/step-22/Makefile +++ b/deal.II/examples/step-22/Makefile @@ -14,7 +14,7 @@ target = $(basename $(shell echo step-*.cc)) # run-time checking of parameters and internal states is performed, so # you should set this value to `on' while you develop your program, # and to `off' when running production computations. -debug-mode = on +debug-mode = off # As third field, we need to give the path to the top-level deal.II diff --git a/deal.II/examples/step-22/step-22.cc b/deal.II/examples/step-22/step-22.cc index 1490fdba2d..c22d20a1de 100644 --- a/deal.II/examples/step-22/step-22.cc +++ b/deal.II/examples/step-22/step-22.cc @@ -35,8 +35,6 @@ #include #include -#include -#include #include #include #include @@ -91,28 +89,6 @@ class BoussinesqFlowProblem -template -class Buoyancy : public Function -{ - public: - Buoyancy () : Function(dim) {} - - virtual void vector_value (const Point &p, - Vector &values) const; -}; - - - -template -void -Buoyancy::vector_value (const Point &p, - Vector &values) const -{ - Assert (values.size() == dim, ExcInternalError()); - - values = 0; - values(dim-1) = (p.distance (Point(.5,.5)) < .2 ? 1 : 0); -} template @@ -183,7 +159,7 @@ InitialValues::value (const Point &p, const unsigned int component) const { if (component == dim+1) - return (p.distance (Point(.5,.5)) < .2 ? 1 : 0); + return (p.distance (Point(.25,.5)) < .1 ? 1 : 0); else return 0; } @@ -378,10 +354,10 @@ BoussinesqFlowProblem::BoussinesqFlowProblem (const unsigned int degree) : degree (degree), fe (FE_Q(degree+1), dim, - FE_DGQ(degree), 1, - FE_DGQ(degree), 1), + FE_Q(degree), 1, + FE_Q(degree), 1), dof_handler (triangulation), - n_refinement_steps (4), + n_refinement_steps (5), time_step (0) {} @@ -460,7 +436,7 @@ double scalar_product (const Tensor<2,dim> &a, const Tensor<2,dim> &b) { - double tmp; + double tmp = 0; for (unsigned int i=0; i::assemble_system () std::vector local_dof_indices (dofs_per_cell); - const Buoyancy buoyancy; const PressureBoundaryValues pressure_boundary_values; - std::vector > buoyancy_values (n_q_points, - Vector(dim)); std::vector boundary_values (n_face_q_points); std::vector > old_solution_values(n_q_points, Vector(dim+2)); std::vector > > old_solution_grads(n_q_points, std::vector > (dim+2)); + + const double Raleigh_number = 10; typename DoFHandler::active_cell_iterator cell = dof_handler.begin_active(), @@ -517,38 +492,40 @@ void BoussinesqFlowProblem::assemble_system () fe_values.get_function_values (old_solution, old_solution_values); - buoyancy.vector_value_list (fe_values.get_quadrature_points(), - buoyancy_values); - for (unsigned int q=0; q phi_i_u = extract_u (fe_values, i, q); - const Tensor<2,dim> phi_i_grads_u= extract_grad_s_u (fe_values, i, q); - const double div_phi_i_u = extract_div_u (fe_values, i, q); - const double phi_i_p = extract_p (fe_values, i, q); - const double phi_i_T = extract_T (fe_values, i, q); - const Tensor<1,dim> grad_phi_i_T = extract_grad_T(fe_values, i, q); + for (unsigned int q=0; q phi_i_u = extract_u (fe_values, i, q); + const Tensor<2,dim> phi_i_grads_u= extract_grad_s_u (fe_values, i, q); + const double div_phi_i_u = extract_div_u (fe_values, i, q); + const double phi_i_p = extract_p (fe_values, i, q); + const double phi_i_T = extract_T (fe_values, i, q); + const Tensor<1,dim> grad_phi_i_T = extract_grad_T(fe_values, i, q); - for (unsigned int j=0; j phi_j_grads_u = extract_grad_s_u (fe_values, j, q); - const double div_phi_j_u = extract_div_u (fe_values, j, q); - const double phi_j_p = extract_p (fe_values, j, q); - const double phi_j_T = extract_T (fe_values, j, q); + for (unsigned int j=0; j phi_j_grads_u = extract_grad_s_u (fe_values, j, q); + const double div_phi_j_u = extract_div_u (fe_values, j, q); + const double phi_j_p = extract_p (fe_values, j, q); + const double phi_j_T = extract_T (fe_values, j, q); - local_matrix(i,j) += (scalar_product(phi_i_grads_u, phi_j_grads_u) - - div_phi_i_u * phi_j_p - - phi_i_p * div_phi_j_u - + phi_i_T * phi_j_T) - * fe_values.JxW(q); - } - - Assert (dim == 2, ExcInternalError()); - local_rhs(i) += ( phi_i_u[0] * buoyancy_values[q](0) - +phi_i_u[1] * buoyancy_values[q](1))* - fe_values.JxW(q); + local_matrix(i,j) += (scalar_product(phi_i_grads_u, phi_j_grads_u) + - div_phi_i_u * phi_j_p + - phi_i_p * div_phi_j_u + + phi_i_T * phi_j_T) + * fe_values.JxW(q); + } + + Assert (dim == 2, ExcInternalError()); + local_rhs(i) += (Raleigh_number * + phi_i_u[1] * old_temperature)* + fe_values.JxW(q); } + } for (unsigned int face_no=0; @@ -821,7 +798,7 @@ void BoussinesqFlowProblem::solve () template void BoussinesqFlowProblem::output_results () const { - if (timestep_number % 5 != 0) + if (timestep_number % 10 != 0) return; std::vector solution_names; @@ -952,7 +929,7 @@ void BoussinesqFlowProblem::run () << std::endl << std::endl; } - while (time <= 250); + while (time <= 50); } @@ -963,7 +940,7 @@ int main () { deallog.depth_console (0); - BoussinesqFlowProblem<2> flow_problem(0); + BoussinesqFlowProblem<2> flow_problem(1); flow_problem.run (); } catch (std::exception &exc) -- 2.39.5