Example codes
and tutorials
The (Not-so) Quick Guide
List of tutorials/demo codes
Single-Physics Problems
Poisson
Adaptivity illustrated for Poisson
Advection-Diffusion
Unsteady heat equation
Linear wave equation
The Young-Laplace equation
Navier-Stokes
Free-surface Navier-Stokes
Axisymmetric Navier-Stokes
Solid mechanics
Beam structures
Shell structures
Multi-physics Problems
Fluid-structure interaction
Boussinesq convection
Steady thermoelasticity
Methods-based example codes and tutorials
Mesh generation
Linear solvers and preconditioners
Visualisation of the results
Parallel processing
How to write a new element
How to write a new refineable element
Default nonlinear solvers -- the sequence of action functions
...
Documentation
FE theory and top-down discussion of the data structure
The (Not-so) Quick Guide
Comprehensive bottom-up discussion of the data structure
List of available structured and unstructured meshes
Linear solvers and preconditioners
Visualisation of the results
Parallel processing
Coding conventions and C++ style
Creating documentation
Optimisation - robustness vs. "raw speed"
Linear vs. nonlinear problems
Storing shape functions
Changing the default "full" integration scheme
Disabling the ALE formulation of unsteady equations
C vs. C++ output
Different sparse assembly techniques and the STL memory pool
Publications
Publications
Talks
Journal publications
Theses
Picture show
Download
Copyright
Download/installation instructions
Download page
FAQ & Contact
FAQ
Change log
Bugs and other known problems
Completeness of the library & our "To-Do List"
Contact the developers
Get involved

 


Beta release!

Please note that the library has not been "officially" released. While we continue to work on the documentation, these web pages are likely to contain broken links and documents in draft form. Please send an email to

oomph-lib AT maths DOT man DOT ac DOT uk

if you wish to be informed of the library's "official" release.

oomph::FoldHandler Class Reference

#include <assembly_handler.h>

Inheritance diagram for oomph::FoldHandler:

oomph::AssemblyHandler List of all members.

Detailed Description

A class that is used to assemble the augmented system that defines a fold (saddle-node) or limit point. The "standard" problem must be a function of a global paramter $\lambda$, and a solution is $R(u,\lambda) = 0 $ , where $ u $ are the unknowns in the problem. A limit point is formally specified by the augmented system of size $ 2N+1 $

\[ R(u,\lambda) = 0, \]

\[ Jy = 0, \]

\[\phi\cdot y = 1. \]

In the above $ J $ is the usual Jacobian matrix, $ dR/du $, and $ \phi $ is a constant vector that is chosen to ensure that the null vector, $ y $, is not trivial.

Definition at line 285 of file assembly_handler.h.


Public Member Functions

 FoldHandler (Problem *const &problem_pt, double *const &parameter_pt)
 Constructor: initialise the fold handler, by setting initial guesses for Y, Phi and calculating count. If the system changes, a new fold handler must be constructed.
 ~FoldHandler ()
 Destructor return the problem to its original (non-augmented) state.
unsigned ndof (GeneralisedElement *const &elem_pt)
 The number of unknowns is 2n+1.
unsigned long eqn_number (GeneralisedElement *const &elem_pt, const unsigned &ieqn_local)
 Get the global equation number of the local unknown.
void get_residuals (GeneralisedElement *const &elem_pt, Vector< double > &residuals)
 Formulate the augmented system.
void get_jacobian (GeneralisedElement *const &elem_pt, Vector< double > &residuals, DenseMatrix< double > &jacobian)
 Calculate the elemental Jacobian matrix "d equation / d variable".
int bifurcation_type () const
 Indicate that we are tracking a fold bifurcation by returning 1.
double * bifurcation_parameter_pt () const
 Return a pointer to the bifurcation parameter in bifurcation tracking problems.
void get_eigenfunction (Vector< DoubleVector > &eigenfunction)
 Return the eigenfunction(s) associated with the bifurcation that has been detected in bifurcation tracking problems.
void solve_augmented_block_system ()
 Set to solve the augmented-by-one block system.
void solve_block_system ()
 Set to solve the block system.
void solve_full_system ()
 Set to Solve non-block system.

Private Types

 Full_augmented
 Block_J
 Block_augmented_J
enum  { Full_augmented, Block_J, Block_augmented_J }

Private Attributes

unsigned Solve_which_system
 Integer flag to indicate which system should be assembled. There are three possibilities. The full augmented system (0), the non-augmented jacobian system (1), a system in which the jacobian is augmented by 1 row and column to ensure that it is non-singular (2). See the enum above.
ProblemProblem_pt
 Pointer to the problem.
unsigned Ndof
 Store the number of degrees of freedom in the non-augmented problem.
Vector< double > Phi
 A constant vector used to ensure that the null vector is not trivial.
Vector< double > Y
 Storage for the null vector.
Vector< int > Count
 A vector that is used to determine how many elements contribute to a particular equation. It is used to ensure that the global system is correctly formulated.
double * Parameter_pt
 Storage for the pointer to the parameter.

Friends

class AugmentedBlockFoldLinearSolver

Member Enumeration Documentation

anonymous enum [private]

A little private enum to determine whether we are solving the block system or not

Enumerator:
Full_augmented 
Block_J 
Block_augmented_J 

Definition at line 291 of file assembly_handler.h.


Constructor & Destructor Documentation

oomph::FoldHandler::FoldHandler ( Problem *const &  problem_pt,
double *const &  parameter_pt 
)

Constructor: initialise the fold handler, by setting initial guesses for Y, Phi and calculating count. If the system changes, a new fold handler must be constructed.

Constructor: Initialise the fold handler, by setting initial guesses for Y, Phi and calculating Count. If the system changes, a new handler must be constructed.

Definition at line 719 of file assembly_handler.cc.

References oomph::Problem::communicator_pt(), Count, oomph::LinearSolver::disable_resolve(), oomph::Problem::Dof_distribution_pt, oomph::Problem::Dof_pt, oomph::Mesh::element_pt(), oomph::LinearSolver::enable_resolve(), oomph::Problem::get_derivative_wrt_global_parameter(), oomph::Problem::linear_solver_pt(), oomph::Problem::mesh_pt(), oomph::GeneralisedElement::ndof(), oomph::Problem::ndof(), Ndof, oomph::Mesh::nelement(), Phi, Problem_pt, oomph::LinearAlgebraDistribution::rebuild(), oomph::LinearSolver::resolve(), oomph::LinearSolver::resolve_is_enabled(), oomph::LinearSolver::solve(), and Y.

oomph::FoldHandler::~FoldHandler (  ) 

Destructor return the problem to its original (non-augmented) state.

Definition at line 1174 of file assembly_handler.cc.

References oomph::Problem::communicator_pt(), oomph::Problem::Dof_distribution_pt, oomph::Problem::Dof_pt, oomph::AugmentedBlockFoldLinearSolver::linear_solver_pt(), oomph::Problem::linear_solver_pt(), Ndof, Problem_pt, and oomph::LinearAlgebraDistribution::rebuild().


Member Function Documentation

double* oomph::FoldHandler::bifurcation_parameter_pt (  )  const [inline, virtual]

Return a pointer to the bifurcation parameter in bifurcation tracking problems.

Reimplemented from oomph::AssemblyHandler.

Definition at line 356 of file assembly_handler.h.

References Parameter_pt.

int oomph::FoldHandler::bifurcation_type (  )  const [inline, virtual]

Indicate that we are tracking a fold bifurcation by returning 1.

Reimplemented from oomph::AssemblyHandler.

Definition at line 352 of file assembly_handler.h.

unsigned long oomph::FoldHandler::eqn_number ( GeneralisedElement *const &  elem_pt,
const unsigned &  ieqn_local 
) [virtual]

Get the global equation number of the local unknown.

Return the global equation number associated with local equation number ieqn_local. We choose to number the unknowns according to the augmented system.

Reimplemented from oomph::AssemblyHandler.

Definition at line 853 of file assembly_handler.cc.

References oomph::GeneralisedElement::eqn_number(), Ndof, and oomph::GeneralisedElement::ndof().

Referenced by get_jacobian(), oomph::AugmentedBlockFoldLinearSolver::resolve(), and oomph::AugmentedBlockFoldLinearSolver::solve().

void oomph::FoldHandler::get_eigenfunction ( Vector< DoubleVector > &  eigenfunction  )  [virtual]

Return the eigenfunction(s) associated with the bifurcation that has been detected in bifurcation tracking problems.

Return the eigenfunction(s) associated with the bifurcation that has been detected in bifurcation tracking problems

Reimplemented from oomph::AssemblyHandler.

Definition at line 1155 of file assembly_handler.cc.

References oomph::Problem::communicator_pt(), Ndof, Problem_pt, and Y.

void oomph::FoldHandler::get_jacobian ( GeneralisedElement *const &  elem_pt,
Vector< double > &  residuals,
DenseMatrix< double > &  jacobian 
) [virtual]

Calculate the elemental Jacobian matrix "d equation / d variable".

Calculate the elemental Jacobian matrix "d equation / d variable" for the augmented system

Reimplemented from oomph::AssemblyHandler.

Definition at line 956 of file assembly_handler.cc.

References oomph::Problem::actions_after_change_in_bifurcation_parameter(), Block_augmented_J, Block_J, Count, oomph::Problem::Dof_pt, eqn_number(), oomph::GeneralisedElement::eqn_number(), oomph::BlackBoxFDNewtonSolver::FD_step, Full_augmented, oomph::GeneralisedElement::get_jacobian(), get_residuals(), Ndof, oomph::GeneralisedElement::ndof(), ndof(), OOMPH_EXCEPTION_LOCATION, Phi, Problem_pt, Solve_which_system, and Y.

Referenced by oomph::AugmentedBlockFoldLinearSolver::resolve(), and oomph::AugmentedBlockFoldLinearSolver::solve().

void oomph::FoldHandler::get_residuals ( GeneralisedElement *const &  elem_pt,
Vector< double > &  residuals 
) [virtual]

Formulate the augmented system.

Reimplemented from oomph::AssemblyHandler.

Definition at line 885 of file assembly_handler.cc.

References Block_augmented_J, Block_J, Count, oomph::GeneralisedElement::eqn_number(), Full_augmented, oomph::GeneralisedElement::get_jacobian(), oomph::GeneralisedElement::get_residuals(), oomph::Problem::mesh_pt(), oomph::GeneralisedElement::ndof(), oomph::Mesh::nelement(), OOMPH_EXCEPTION_LOCATION, Phi, Problem_pt, Solve_which_system, and Y.

Referenced by get_jacobian().

unsigned oomph::FoldHandler::ndof ( GeneralisedElement *const &  elem_pt  )  [virtual]

The number of unknowns is 2n+1.

Reimplemented from oomph::AssemblyHandler.

Definition at line 820 of file assembly_handler.cc.

References Block_augmented_J, Block_J, Full_augmented, oomph::GeneralisedElement::ndof(), OOMPH_EXCEPTION_LOCATION, and Solve_which_system.

Referenced by get_jacobian(), oomph::AugmentedBlockFoldLinearSolver::resolve(), and oomph::AugmentedBlockFoldLinearSolver::solve().

void oomph::FoldHandler::solve_augmented_block_system (  ) 

Set to solve the augmented-by-one block system.

Definition at line 1199 of file assembly_handler.cc.

References Block_augmented_J, Block_J, oomph::Problem::communicator_pt(), oomph::Problem::Dof_distribution_pt, oomph::Problem::Dof_pt, Ndof, Parameter_pt, Problem_pt, oomph::LinearAlgebraDistribution::rebuild(), and Solve_which_system.

Referenced by oomph::AugmentedBlockFoldLinearSolver::resolve(), and oomph::AugmentedBlockFoldLinearSolver::solve().

void oomph::FoldHandler::solve_block_system (  ) 

Set to solve the block system.

Set to solve the block system. The boolean flag specifies whether the block decomposition should use exactly the same jacobian

Definition at line 1227 of file assembly_handler.cc.

References Block_J, oomph::Problem::communicator_pt(), oomph::Problem::Dof_distribution_pt, oomph::Problem::Dof_pt, Ndof, Problem_pt, oomph::LinearAlgebraDistribution::rebuild(), and Solve_which_system.

void oomph::FoldHandler::solve_full_system (  ) 

Set to Solve non-block system.

Definition at line 1245 of file assembly_handler.cc.

References Block_J, oomph::Problem::communicator_pt(), oomph::Problem::Dof_distribution_pt, oomph::Problem::Dof_pt, Full_augmented, Ndof, Parameter_pt, Problem_pt, oomph::LinearAlgebraDistribution::rebuild(), Solve_which_system, and Y.

Referenced by oomph::AugmentedBlockFoldLinearSolver::resolve(), and oomph::AugmentedBlockFoldLinearSolver::solve().


Friends And Related Function Documentation

friend class AugmentedBlockFoldLinearSolver [friend]

Definition at line 287 of file assembly_handler.h.


Member Data Documentation

Vector<int> oomph::FoldHandler::Count [private]

A vector that is used to determine how many elements contribute to a particular equation. It is used to ensure that the global system is correctly formulated.

Definition at line 317 of file assembly_handler.h.

Referenced by FoldHandler(), get_jacobian(), and get_residuals().

unsigned oomph::FoldHandler::Ndof [private]

Store the number of degrees of freedom in the non-augmented problem.

Definition at line 305 of file assembly_handler.h.

Referenced by eqn_number(), FoldHandler(), get_eigenfunction(), get_jacobian(), solve_augmented_block_system(), solve_block_system(), solve_full_system(), and ~FoldHandler().

double* oomph::FoldHandler::Parameter_pt [private]

Storage for the pointer to the parameter.

Definition at line 320 of file assembly_handler.h.

Referenced by bifurcation_parameter_pt(), solve_augmented_block_system(), and solve_full_system().

Vector<double> oomph::FoldHandler::Phi [private]

A constant vector used to ensure that the null vector is not trivial.

Definition at line 309 of file assembly_handler.h.

Referenced by FoldHandler(), get_jacobian(), and get_residuals().

Problem* oomph::FoldHandler::Problem_pt [private]

Pointer to the problem.

Definition at line 301 of file assembly_handler.h.

Referenced by FoldHandler(), get_eigenfunction(), get_jacobian(), get_residuals(), solve_augmented_block_system(), solve_block_system(), solve_full_system(), and ~FoldHandler().

unsigned oomph::FoldHandler::Solve_which_system [private]

Integer flag to indicate which system should be assembled. There are three possibilities. The full augmented system (0), the non-augmented jacobian system (1), a system in which the jacobian is augmented by 1 row and column to ensure that it is non-singular (2). See the enum above.

Definition at line 298 of file assembly_handler.h.

Referenced by get_jacobian(), get_residuals(), ndof(), solve_augmented_block_system(), solve_block_system(), and solve_full_system().

Vector<double> oomph::FoldHandler::Y [private]

Storage for the null vector.

Definition at line 312 of file assembly_handler.h.

Referenced by FoldHandler(), get_eigenfunction(), get_jacobian(), get_residuals(), oomph::AugmentedBlockFoldLinearSolver::resolve(), oomph::AugmentedBlockFoldLinearSolver::solve(), and solve_full_system().


The documentation for this class was generated from the following files:
Generated on Mon Aug 10 11:24:16 2009 by  doxygen 1.4.7