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