From: heister Date: Wed, 15 Jun 2011 19:11:35 +0000 (+0000) Subject: step-32: fix error resulting in some settings being ignored in parameter file (conser... X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=919ad1e58e9453456adf46ceacc5d478ec39d0dd;p=dealii-svn.git step-32: fix error resulting in some settings being ignored in parameter file (conservative pressure, element order). git-svn-id: https://svn.dealii.org/trunk@23822 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/examples/step-32/step-32.cc b/deal.II/examples/step-32/step-32.cc index cc3bdbff0b..c1bfbd41cf 100644 --- a/deal.II/examples/step-32/step-32.cc +++ b/deal.II/examples/step-32/step-32.cc @@ -879,8 +879,9 @@ template class BoussinesqFlowProblem { public: - BoussinesqFlowProblem (); - void run (const std::string parameter_filename); + struct Parameters; + BoussinesqFlowProblem (BoussinesqFlowProblem::Parameters & parameters); + void run (); private: void setup_dofs (); @@ -911,9 +912,10 @@ class BoussinesqFlowProblem const double global_T_variation, const double cell_diameter) const; + public: struct Parameters { - Parameters (); + Parameters (const std::string & parameter_filename); static void declare_parameters (ParameterHandler &prm); void parse_parameters (ParameterHandler &prm); @@ -938,9 +940,9 @@ class BoussinesqFlowProblem unsigned int temperature_degree; }; - + private: + Parameters & parameters; ConditionalOStream pcout; - Parameters parameters; parallel::distributed::Triangulation triangulation; double global_Omega_diameter; @@ -1039,7 +1041,7 @@ class BoussinesqFlowProblem // @sect4{BoussinesqFlowProblem::Parameters} template -BoussinesqFlowProblem::Parameters::Parameters () +BoussinesqFlowProblem::Parameters::Parameters (const std::string & parameter_filename) : end_time (1e8), initial_global_refinement (2), @@ -1051,8 +1053,35 @@ BoussinesqFlowProblem::Parameters::Parameters () stokes_velocity_degree (2), use_locally_conservative_discretization (true), temperature_degree (2) -{} +{ + ParameterHandler prm; + BoussinesqFlowProblem::Parameters::declare_parameters (prm); + + std::ifstream parameter_file (parameter_filename.c_str()); + if (!parameter_file) + { + parameter_file.close (); + + std::ostringstream message; + message << "Input parameter file <" + << parameter_filename << "> not found. Creating a" + << std::endl + << "template file of the same name." + << std::endl; + + std::ofstream parameter_out (parameter_filename.c_str()); + prm.print_parameters (parameter_out, + ParameterHandler::Text); + + AssertThrow (false, ExcMessage (message.str().c_str())); + } + + const bool success = prm.read_input (parameter_file); + AssertThrow (success, ExcMessage ("Invalid input parameter file.")); + + parse_parameters (prm); +} template @@ -1204,8 +1233,9 @@ parse_parameters (ParameterHandler &prm) // program which shows us wallclock times // (as opposed to CPU times). template -BoussinesqFlowProblem::BoussinesqFlowProblem () +BoussinesqFlowProblem::BoussinesqFlowProblem (Parameters & parameters_) : + parameters (parameters_), pcout (std::cout, (Utilities::System:: get_this_mpi_process(MPI_COMM_WORLD) @@ -3673,39 +3703,8 @@ void BoussinesqFlowProblem::refine_mesh (const unsigned int max_grid_level) // VectorTools::project, the // rest is as before. template -void BoussinesqFlowProblem::run (const std::string parameter_filename) +void BoussinesqFlowProblem::run () { - { - ParameterHandler prm; - Parameters::declare_parameters (prm); - - std::ifstream parameter_file (parameter_filename.c_str()); - - if (!parameter_file) - { - parameter_file.close (); - - std::ostringstream message; - message << "Input parameter file <" - << parameter_filename << "> not found. Creating a" - << std::endl - << "template file of the same name." - << std::endl; - - std::ofstream parameter_out (parameter_filename.c_str()); - prm.print_parameters (parameter_out, - ParameterHandler::Text); - - AssertThrow (false, ExcMessage (message.str().c_str())); - } - - const bool success = prm.read_input (parameter_file); - AssertThrow (success, ExcMessage ("Invalid input parameter file.")); - - parameters.parse_parameters (prm); - } - - GridGenerator::hyper_shell (triangulation, Point(), EquationData::R0, @@ -3825,8 +3824,9 @@ int main (int argc, char *argv[]) parameter_filename = "step-32.prm"; const int dim = 3; - BoussinesqFlowProblem flow_problem; - flow_problem.run (parameter_filename); + BoussinesqFlowProblem::Parameters parameters(parameter_filename); + BoussinesqFlowProblem flow_problem (parameters); + flow_problem.run (); } catch (std::exception &exc) {