GRINS-0.6.0
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
GRINS::DisplacementContinuationSolver Class Reference

#include <displacement_continuation_solver.h>

Inheritance diagram for GRINS::DisplacementContinuationSolver:
Inheritance graph
[legend]
Collaboration diagram for GRINS::DisplacementContinuationSolver:
Collaboration graph
[legend]

Public Member Functions

 DisplacementContinuationSolver (const GetPot &input)
 
virtual ~DisplacementContinuationSolver ()
 
virtual void initialize (const GetPot &input, std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system)
 
virtual void solve (SolverContext &context)
 
virtual void adjoint_qoi_parameter_sensitivity (SolverContext &context, const libMesh::QoISet &qoi_indices, const libMesh::ParameterVector &parameters_in, libMesh::SensitivityData &sensitivities) const
 
virtual void forward_qoi_parameter_sensitivity (SolverContext &context, const libMesh::QoISet &qoi_indices, const libMesh::ParameterVector &parameters_in, libMesh::SensitivityData &sensitivities) const
 
void steady_adjoint_solve (SolverContext &context)
 Do steady version of adjoint solve. More...
 

Protected Member Functions

void increment_displacement (GRINS::MultiphysicsSystem &system, libMesh::EquationSystems &equation_system, const libMesh::Real displacement)
 
virtual void init_time_solver (GRINS::MultiphysicsSystem *system)
 
void set_solver_options (libMesh::DiffSolver &solver)
 

Protected Attributes

libMesh::boundary_id_type _bc_id
 Boundary on which we want to increment the displacement. More...
 
unsigned int _bc_index
 Cache index into libMesh::DirichletBoundaries. More...
 
std::vector< libMesh::Real > _displacements
 
unsigned int _max_nonlinear_iterations
 
double _relative_step_tolerance
 
double _absolute_step_tolerance
 
double _relative_residual_tolerance
 
double _absolute_residual_tolerance
 
double _initial_linear_tolerance
 
double _minimum_linear_tolerance
 
unsigned int _max_linear_iterations
 
bool _continue_after_backtrack_failure
 
bool _continue_after_max_iterations
 
bool _solver_quiet
 
bool _solver_verbose
 
std::map< std::string, GRINS::NBCContainer > _neumann_bc_funcs
 

Detailed Description

Definition at line 33 of file displacement_continuation_solver.h.

Constructor & Destructor Documentation

GRINS::DisplacementContinuationSolver::DisplacementContinuationSolver ( const GetPot &  input)

Definition at line 42 of file displacement_continuation_solver.C.

References _displacements.

43  : SteadySolver(input),
44  _bc_id( input("SolverOptions/DisplacementContinuation/boundary", -1) )
45  {
46  if( !input.have_variable("SolverOptions/DisplacementContinuation/boundary") )
47  {
48  std::cerr << "Error: Did not find boundary id for DisplacementContinuationSolver" << std::endl
49  << " Must specify SolverOptions/DisplacementContinuation/boundary in input." << std::endl;
50  libmesh_error();
51  }
52 
53  if( !input.have_variable("SolverOptions/DisplacementContinuation/final_displacement") )
54  {
55  std::cerr << "Error: Did not find final_displacement value for DisplacementContinuationSolver" << std::endl
56  << " Must specify SolverOptions/DisplacementContinuation/final_displacement" << std::endl;
57  libmesh_error();
58  }
59  libMesh::Real disp_value = input("SolverOptions/DisplacementContinuation/final_displacement", 0.0);
60 
61 
62  if( !input.have_variable("SolverOptions/DisplacementContinuation/n_increments") )
63  {
64  std::cerr << "Error: Did not find final_displacement value for DisplacementContinuationSolver" << std::endl
65  << " Must specify SolverOptions/DisplacementContinuation/n_increments" << std::endl;
66  libmesh_error();
67  }
68  unsigned int n_increments = input("SolverOptions/DisplacementContinuation/n_increments", 1);
69 
70  _displacements.resize(n_increments);
71 
72  libMesh::Real increment = disp_value/n_increments;
73 
74  for( unsigned int i = 0; i < n_increments; i++ )
75  {
76  _displacements[i] = (i+1)*increment;
77  }
78 
79  return;
80  }
SteadySolver(const GetPot &input)
libMesh::boundary_id_type _bc_id
Boundary on which we want to increment the displacement.
GRINS::DisplacementContinuationSolver::~DisplacementContinuationSolver ( )
virtual

Definition at line 82 of file displacement_continuation_solver.C.

83  {
84  return;
85  }

Member Function Documentation

void GRINS::SteadySolver::adjoint_qoi_parameter_sensitivity ( SolverContext &  context,
const libMesh::QoISet &  qoi_indices,
const libMesh::ParameterVector &  parameters_in,
libMesh::SensitivityData &  sensitivities 
) const
virtualinherited

Reimplemented from GRINS::Solver.

Definition at line 113 of file grins_steady_solver.C.

References GRINS::SolverContext::system.

117  {
118  context.system->adjoint_qoi_parameter_sensitivity
119  (qoi_indices, parameters_in, sensitivities);
120  }
void GRINS::SteadySolver::forward_qoi_parameter_sensitivity ( SolverContext &  context,
const libMesh::QoISet &  qoi_indices,
const libMesh::ParameterVector &  parameters_in,
libMesh::SensitivityData &  sensitivities 
) const
virtualinherited

Reimplemented from GRINS::Solver.

Definition at line 123 of file grins_steady_solver.C.

References GRINS::SolverContext::equation_system, GRINS::SolverContext::output_residual_sensitivities, GRINS::SolverContext::output_solution_sensitivities, GRINS::SolverContext::system, and GRINS::SolverContext::vis.

127  {
128  context.system->forward_qoi_parameter_sensitivity
129  (qoi_indices, parameters_in, sensitivities);
130 
131  if( context.output_residual_sensitivities )
132  context.vis->output_residual_sensitivities
133  ( context.equation_system, context.system, parameters_in );
134 
135  if( context.output_solution_sensitivities )
136  context.vis->output_solution_sensitivities
137  ( context.equation_system, context.system, parameters_in );
138  }
void GRINS::DisplacementContinuationSolver::increment_displacement ( GRINS::MultiphysicsSystem &  system,
libMesh::EquationSystems &  equation_system,
const libMesh::Real  displacement 
)
protected

Definition at line 144 of file displacement_continuation_solver.C.

References _bc_index.

Referenced by solve().

147  {
148  // Get DirichetBoundaries vector.
149  libMesh::DirichletBoundaries* d_vector = system.get_dof_map().get_dirichlet_boundaries();
150 
151  // Get the DirichletBoundary we want
152  libMesh::DirichletBoundary* dirichlet = (*d_vector)[_bc_index];
153 
154  // Kill the old FunctionBase object and put in our new one.
155  dirichlet->f.reset( new libMesh::ConstFunction<libMesh::Real>( displacement ) );
156 
157  // Need to reinit system
158  equation_system.reinit();
159 
160  return;
161  }
unsigned int _bc_index
Cache index into libMesh::DirichletBoundaries.
void GRINS::SteadySolver::init_time_solver ( GRINS::MultiphysicsSystem *  system)
protectedvirtualinherited

Implements GRINS::Solver.

Definition at line 54 of file grins_steady_solver.C.

55  {
56  libMesh::SteadySolver* time_solver = new libMesh::SteadySolver( *(system) );
57 
58  system->time_solver = libMesh::AutoPtr<libMesh::TimeSolver>(time_solver);
59  return;
60  }
void GRINS::DisplacementContinuationSolver::initialize ( const GetPot &  input,
std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem *  system 
)
virtual

Reimplemented from GRINS::Solver.

Definition at line 87 of file displacement_continuation_solver.C.

References _bc_id, _bc_index, and GRINS::Solver::initialize().

90  {
91  // First init everything on the base class side, which will reinit equation_system
92  Solver::initialize(input,equation_system,system);
93 
94  // Now search for the index for the DirichletBoundary we want to increment
95  libMesh::DirichletBoundaries* d_vector = system->get_dof_map().get_dirichlet_boundaries();
96 
97  bool found_bc_id = false;
98  for( libMesh::DirichletBoundaries::const_iterator it = d_vector->begin(); it != d_vector->end(); ++it )
99  {
100  if( (*it)->b.find(_bc_id) != (*it)->b.end() )
101  {
102  found_bc_id = true;
103  _bc_index = it - d_vector->begin();
104  // We're assuming that there's only one boundary
105  break;
106  }
107  }
108 
109  if( !found_bc_id )
110  {
111  std::cerr << "Error: Did not find prescribed boundary for DisplacementContinuationSolver" << std::endl
112  << " Was searching for bc_id = " << _bc_id << std::endl;
113  libmesh_error();
114  }
115 
116  return;
117  }
unsigned int _bc_index
Cache index into libMesh::DirichletBoundaries.
virtual void initialize(const GetPot &input, std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system)
Definition: grins_solver.C:67
libMesh::boundary_id_type _bc_id
Boundary on which we want to increment the displacement.
void GRINS::Solver::set_solver_options ( libMesh::DiffSolver &  solver)
protectedinherited

Definition at line 87 of file grins_solver.C.

References GRINS::Solver::_absolute_residual_tolerance, GRINS::Solver::_absolute_step_tolerance, GRINS::Solver::_continue_after_backtrack_failure, GRINS::Solver::_continue_after_max_iterations, GRINS::Solver::_initial_linear_tolerance, GRINS::Solver::_max_linear_iterations, GRINS::Solver::_max_nonlinear_iterations, GRINS::Solver::_minimum_linear_tolerance, GRINS::Solver::_relative_residual_tolerance, GRINS::Solver::_relative_step_tolerance, GRINS::Solver::_solver_quiet, and GRINS::Solver::_solver_verbose.

Referenced by GRINS::Solver::initialize().

88  {
89  solver.quiet = this->_solver_quiet;
90  solver.verbose = this->_solver_verbose;
91  solver.max_nonlinear_iterations = this->_max_nonlinear_iterations;
92  solver.relative_step_tolerance = this->_relative_step_tolerance;
93  solver.absolute_step_tolerance = this->_absolute_step_tolerance;
94  solver.relative_residual_tolerance = this->_relative_residual_tolerance;
95  solver.absolute_residual_tolerance = this->_absolute_residual_tolerance;
96  solver.max_linear_iterations = this->_max_linear_iterations;
97  solver.continue_after_backtrack_failure = this->_continue_after_backtrack_failure;
98  solver.initial_linear_tolerance = this->_initial_linear_tolerance;
99  solver.minimum_linear_tolerance = this->_minimum_linear_tolerance;
100  solver.continue_after_max_iterations = this->_continue_after_max_iterations;
101 
102  return;
103  }
double _absolute_residual_tolerance
Definition: grins_solver.h:103
bool _solver_verbose
Definition: grins_solver.h:112
double _relative_residual_tolerance
Definition: grins_solver.h:101
unsigned int _max_linear_iterations
Definition: grins_solver.h:106
double _relative_step_tolerance
Definition: grins_solver.h:95
bool _continue_after_backtrack_failure
Definition: grins_solver.h:107
double _minimum_linear_tolerance
Definition: grins_solver.h:105
double _absolute_step_tolerance
Definition: grins_solver.h:96
bool _continue_after_max_iterations
Definition: grins_solver.h:108
unsigned int _max_nonlinear_iterations
Definition: grins_solver.h:94
double _initial_linear_tolerance
Definition: grins_solver.h:104
void GRINS::DisplacementContinuationSolver::solve ( SolverContext &  context)
virtual

Reimplemented from GRINS::SteadySolver.

Definition at line 119 of file displacement_continuation_solver.C.

References _displacements, GRINS::SolverContext::equation_system, increment_displacement(), GRINS::SolverContext::output_vis, GRINS::SolverContext::postprocessing, GRINS::SolverContext::system, and GRINS::SolverContext::vis.

120  {
121  for( unsigned int s = 0; s < _displacements.size(); s++ )
122  {
123 
124  libMesh::Real disp = _displacements[s];
125 
126  std::cout << "==========================================================" << std::endl
127  << " Displacement step " << s << ", displacement = " << disp << std::endl
128  << "==========================================================" << std::endl;
129 
130  this->increment_displacement(*(context.system), *(context.equation_system), disp);
131 
132  context.system->solve();
133 
134  if( context.output_vis )
135  {
136  context.postprocessing->update_quantities( *(context.equation_system) );
137  context.vis->output( context.equation_system, s, disp );
138  }
139  }
140 
141  return;
142  }
void increment_displacement(GRINS::MultiphysicsSystem &system, libMesh::EquationSystems &equation_system, const libMesh::Real displacement)
void GRINS::Solver::steady_adjoint_solve ( SolverContext &  context)
inherited

Do steady version of adjoint solve.

We put this here since we may want to reuse this in multiple different steady solves.

Definition at line 105 of file grins_solver.C.

References GRINS::SolverContext::system.

Referenced by GRINS::SteadySolver::solve(), and GRINS::SteadyMeshAdaptiveSolver::solve().

106  {
107  libMesh::out << "==========================================================" << std::endl
108  << "Solving adjoint problem." << std::endl
109  << "==========================================================" << std::endl;
110 
111  context.system->adjoint_solve();
112  context.system->set_adjoint_already_solved(true);
113  }

Member Data Documentation

double GRINS::Solver::_absolute_residual_tolerance
protectedinherited

Definition at line 103 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

double GRINS::Solver::_absolute_step_tolerance
protectedinherited

Definition at line 96 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

libMesh::boundary_id_type GRINS::DisplacementContinuationSolver::_bc_id
protected

Boundary on which we want to increment the displacement.

Definition at line 53 of file displacement_continuation_solver.h.

Referenced by initialize().

unsigned int GRINS::DisplacementContinuationSolver::_bc_index
protected

Cache index into libMesh::DirichletBoundaries.

libMesh::DirichletBoundaries subclasses std::vector. So, we cache the index to the particular libMesh::DirichletBoundary we want. This way, we search at the beginning and reuse.

Definition at line 61 of file displacement_continuation_solver.h.

Referenced by increment_displacement(), and initialize().

bool GRINS::Solver::_continue_after_backtrack_failure
protectedinherited

Definition at line 107 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

bool GRINS::Solver::_continue_after_max_iterations
protectedinherited

Definition at line 108 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

std::vector<libMesh::Real> GRINS::DisplacementContinuationSolver::_displacements
protected

Definition at line 63 of file displacement_continuation_solver.h.

Referenced by DisplacementContinuationSolver(), and solve().

double GRINS::Solver::_initial_linear_tolerance
protectedinherited

Definition at line 104 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

unsigned int GRINS::Solver::_max_linear_iterations
protectedinherited

Definition at line 106 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

unsigned int GRINS::Solver::_max_nonlinear_iterations
protectedinherited

Definition at line 94 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

double GRINS::Solver::_minimum_linear_tolerance
protectedinherited

Definition at line 105 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

std::map< std::string, GRINS::NBCContainer > GRINS::Solver::_neumann_bc_funcs
protectedinherited

Definition at line 117 of file grins_solver.h.

double GRINS::Solver::_relative_residual_tolerance
protectedinherited

Definition at line 101 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

double GRINS::Solver::_relative_step_tolerance
protectedinherited

Definition at line 95 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

bool GRINS::Solver::_solver_quiet
protectedinherited

Definition at line 111 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

bool GRINS::Solver::_solver_verbose
protectedinherited

Definition at line 112 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().


The documentation for this class was generated from the following files:

Generated on Mon Jun 22 2015 21:32:22 for GRINS-0.6.0 by  doxygen 1.8.9.1