AbstractNonlinearElasticityAssembler< DIM > Class Template Reference

#include <AbstractNonlinearElasticityAssembler.hpp>

Inheritance diagram for AbstractNonlinearElasticityAssembler< DIM >:

Inheritance graph
[legend]
Collaboration diagram for AbstractNonlinearElasticityAssembler< DIM >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 AbstractNonlinearElasticityAssembler (unsigned numDofs, AbstractIncompressibleMaterialLaw< DIM > *pMaterialLaw, c_vector< double, DIM > bodyForce, double density, std::string outputDirectory, std::vector< unsigned > &fixedNodes)
 AbstractNonlinearElasticityAssembler (unsigned numDofs, std::vector< AbstractIncompressibleMaterialLaw< DIM > * > &rMaterialLaws, c_vector< double, DIM > bodyForce, double density, std::string outputDirectory, std::vector< unsigned > &fixedNodes)
virtual ~AbstractNonlinearElasticityAssembler ()
void Solve (double tol=-1.0, unsigned offset=0, unsigned maxNumNewtonIterations=INT_MAX, bool quitIfNoConvergence=true)
void WriteOutput (unsigned counter)
unsigned GetNumNewtonIterations ()
void SetFunctionalBodyForce (c_vector< double, DIM >(*pFunction)(c_vector< double, DIM > &))
void SetWriteOutput (bool writeOutput=true)

Protected Member Functions

virtual void FormInitialGuess ()=0
virtual void AssembleSystem (bool assembleResidual, bool assembleJacobian)=0
virtual std::vector< c_vector
< double, DIM > > & 
rGetDeformedPosition ()=0
void ApplyBoundaryConditions (bool applyToMatrix)
double CalculateResidualNorm ()
double TakeNewtonStep ()
virtual void PostNewtonStep (unsigned counter, double normResidual)
void AllocateMatrixMemory ()

Protected Attributes

unsigned mNumDofs
std::vector
< AbstractIncompressibleMaterialLaw
< DIM > * > 
mMaterialLaws
LinearSystemmpLinearSystem
LinearSystemmpPreconditionMatrixLinearSystem
c_vector< double, DIM > mBodyForce
double mDensity
std::string mOutputDirectory
std::vector< unsigned > mFixedNodes
std::vector< c_vector< double,
DIM > > 
mFixedNodeDisplacements
bool mWriteOutput
std::vector< double > mCurrentSolution
FourthOrderTensor< DIM > dTdE
unsigned mNumNewtonIterations
std::vector< c_vector< double,
DIM > > 
mDeformedPosition
std::vector< double > mPressures
std::vector< c_vector< double,
DIM > > 
mSurfaceTractions
c_vector< double, DIM >(* mpBodyForceFunction )(c_vector< double, DIM > &)
c_vector< double, DIM >(* mpTractionBoundaryConditionFunction )(c_vector< double, DIM > &)
bool mUsingBodyForceFunction
bool mUsingTractionBoundaryConditionFunction

Static Protected Attributes

static const double MAX_NEWTON_ABS_TOL = 1e-8
static const double MIN_NEWTON_ABS_TOL = 1e-12
static const double NEWTON_REL_TOL = 1e-4


Detailed Description

template<unsigned DIM>
class AbstractNonlinearElasticityAssembler< DIM >

Abstract nonlinear elasticity assembler.

Definition at line 47 of file AbstractNonlinearElasticityAssembler.hpp.


Constructor & Destructor Documentation

template<unsigned DIM>
AbstractNonlinearElasticityAssembler< DIM >::AbstractNonlinearElasticityAssembler ( unsigned  numDofs,
AbstractIncompressibleMaterialLaw< DIM > *  pMaterialLaw,
c_vector< double, DIM >  bodyForce,
double  density,
std::string  outputDirectory,
std::vector< unsigned > &  fixedNodes 
) [inline]

template<unsigned DIM>
AbstractNonlinearElasticityAssembler< DIM >::AbstractNonlinearElasticityAssembler ( unsigned  numDofs,
std::vector< AbstractIncompressibleMaterialLaw< DIM > * > &  rMaterialLaws,
c_vector< double, DIM >  bodyForce,
double  density,
std::string  outputDirectory,
std::vector< unsigned > &  fixedNodes 
) [inline]

Variant constructor taking a vector of material laws.

Parameters:
numDofs 
rMaterialLaws 
bodyForce 
density 
outputDirectory 
fixedNodes 

Definition at line 594 of file AbstractNonlinearElasticityAssembler.hpp.

References AbstractNonlinearElasticityAssembler< DIM >::AllocateMatrixMemory(), AbstractNonlinearElasticityAssembler< DIM >::mMaterialLaws, AbstractNonlinearElasticityAssembler< DIM >::mOutputDirectory, and AbstractNonlinearElasticityAssembler< DIM >::mWriteOutput.

template<unsigned DIM>
AbstractNonlinearElasticityAssembler< DIM >::~AbstractNonlinearElasticityAssembler (  )  [inline, virtual]


Member Function Documentation

template<unsigned DIM>
virtual void AbstractNonlinearElasticityAssembler< DIM >::FormInitialGuess (  )  [protected, pure virtual]

Set up the current guess to be the solution given no displacement. Must be overridden in concrete derived classes.

Implemented in NonlinearElasticityAssembler< DIM >.

template<unsigned DIM>
virtual void AbstractNonlinearElasticityAssembler< DIM >::AssembleSystem ( bool  assembleResidual,
bool  assembleJacobian 
) [protected, pure virtual]

Assemble the residual vector (using the current solution stored in mCurrentSolution, output going to mpLinearSystem->rGetRhsVector), or Jacobian matrix (using the current solution stored in mCurrentSolution, output going to mpLinearSystem->rGetLhsMatrix). Must be overridden in concrete derived classes.

Parameters:
assembleResidual A bool stating whether to assemble the residual vector.
assembleJacobian A bool stating whether to assemble the Jacobian matrix.

Implemented in NonlinearElasticityAssembler< DIM >.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::Solve(), and AbstractNonlinearElasticityAssembler< DIM >::TakeNewtonStep().

template<unsigned DIM>
virtual std::vector<c_vector<double,DIM> >& AbstractNonlinearElasticityAssembler< DIM >::rGetDeformedPosition (  )  [protected, pure virtual]

Get the deformed position. Must be overridden in concrete derived classes.

Implemented in NonlinearElasticityAssembler< DIM >.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::WriteOutput().

template<unsigned DIM>
void AbstractNonlinearElasticityAssembler< DIM >::ApplyBoundaryConditions ( bool  applyToMatrix  )  [inline, protected]

template<unsigned DIM>
double AbstractNonlinearElasticityAssembler< DIM >::CalculateResidualNorm (  )  [inline, protected]

template<unsigned DIM>
double AbstractNonlinearElasticityAssembler< DIM >::TakeNewtonStep (  )  [inline, protected]

template<unsigned DIM>
void AbstractNonlinearElasticityAssembler< DIM >::PostNewtonStep ( unsigned  counter,
double  normResidual 
) [inline, protected, virtual]

This function may be overloaded by subclasses. It is called after each Newton iteration.

Parameters:
counter 
normResidual 

Definition at line 560 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::Solve().

template<unsigned DIM>
void AbstractNonlinearElasticityAssembler< DIM >::AllocateMatrixMemory (  )  [inline, protected]

template<unsigned DIM>
void AbstractNonlinearElasticityAssembler< DIM >::Solve ( double  tol = -1.0,
unsigned  offset = 0,
unsigned  maxNumNewtonIterations = INT_MAX,
bool  quitIfNoConvergence = true 
) [inline]

template<unsigned DIM>
void AbstractNonlinearElasticityAssembler< DIM >::WriteOutput ( unsigned  counter  )  [inline]

template<unsigned DIM>
unsigned AbstractNonlinearElasticityAssembler< DIM >::GetNumNewtonIterations (  )  [inline]

Get number of Newton iterations taken in last solve.

Definition at line 738 of file AbstractNonlinearElasticityAssembler.hpp.

References AbstractNonlinearElasticityAssembler< DIM >::mNumNewtonIterations.

template<unsigned DIM>
void AbstractNonlinearElasticityAssembler< DIM >::SetFunctionalBodyForce ( c_vector< double, DIM >(*)(c_vector< double, DIM > &)  pFunction  )  [inline]

Set a function which gives body force as a function of X (undeformed position) Whatever body force was provided in the constructor will now be ignored.

Parameters:
pFunction 

Definition at line 745 of file AbstractNonlinearElasticityAssembler.hpp.

References AbstractNonlinearElasticityAssembler< DIM >::mpBodyForceFunction, and AbstractNonlinearElasticityAssembler< DIM >::mUsingBodyForceFunction.

template<unsigned DIM>
void AbstractNonlinearElasticityAssembler< DIM >::SetWriteOutput ( bool  writeOutput = true  )  [inline]

Set whether to write any output.

Parameters:
writeOutput (defaults to true)

Definition at line 753 of file AbstractNonlinearElasticityAssembler.hpp.

References AbstractNonlinearElasticityAssembler< DIM >::mOutputDirectory, and AbstractNonlinearElasticityAssembler< DIM >::mWriteOutput.


Member Data Documentation

template<unsigned DIM>
const double AbstractNonlinearElasticityAssembler< DIM >::MAX_NEWTON_ABS_TOL = 1e-8 [inline, static, protected]

Maximum absolute tolerance for Newton solve.

Definition at line 52 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::Solve().

template<unsigned DIM>
const double AbstractNonlinearElasticityAssembler< DIM >::MIN_NEWTON_ABS_TOL = 1e-12 [inline, static, protected]

Minimum absolute tolerance for Newton solv.e

Definition at line 55 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::Solve().

template<unsigned DIM>
const double AbstractNonlinearElasticityAssembler< DIM >::NEWTON_REL_TOL = 1e-4 [inline, static, protected]

Relative tolerance for Newton solve.

Definition at line 58 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::Solve().

template<unsigned DIM>
unsigned AbstractNonlinearElasticityAssembler< DIM >::mNumDofs [protected]

template<unsigned DIM>
std::vector<AbstractIncompressibleMaterialLaw<DIM>*> AbstractNonlinearElasticityAssembler< DIM >::mMaterialLaws [protected]

template<unsigned DIM>
LinearSystem* AbstractNonlinearElasticityAssembler< DIM >::mpLinearSystem [protected]

The linear system which stores the matrix used for preconditioning (given the helper functions on LinearSystem it is best to use LinearSystem and use these for assembling the preconditioner, rather than just use a Mat The preconditioner is the petsc LU factorisation of

Jp = [A B] in displacement-pressure block form, [C M]

where the A, B and C are the matrices in the normal jacobian, ie

J = [A B] [C 0]

and M is the MASS MATRIX (ie integral phi_i phi_j dV, where phi_i are the pressure basis functions).

Definition at line 98 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::AllocateMatrixMemory(), AbstractNonlinearElasticityAssembler< DIM >::ApplyBoundaryConditions(), NonlinearElasticityAssembler< DIM >::AssembleSystem(), AbstractNonlinearElasticityAssembler< DIM >::TakeNewtonStep(), and AbstractNonlinearElasticityAssembler< DIM >::~AbstractNonlinearElasticityAssembler().

template<unsigned DIM>
c_vector<double,DIM> AbstractNonlinearElasticityAssembler< DIM >::mBodyForce [protected]

template<unsigned DIM>
double AbstractNonlinearElasticityAssembler< DIM >::mDensity [protected]

Mass density of the undeformed body (equal to the density of deformed body)

Definition at line 104 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by NonlinearElasticityAssembler< DIM >::AssembleOnElement().

template<unsigned DIM>
std::string AbstractNonlinearElasticityAssembler< DIM >::mOutputDirectory [protected]

template<unsigned DIM>
std::vector<unsigned> AbstractNonlinearElasticityAssembler< DIM >::mFixedNodes [protected]

template<unsigned DIM>
std::vector<c_vector<double,DIM> > AbstractNonlinearElasticityAssembler< DIM >::mFixedNodeDisplacements [protected]

The displacements of those nodes with displacement boundary conditions

Definition at line 113 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by AbstractNonlinearElasticityAssembler< DIM >::ApplyBoundaryConditions(), and NonlinearElasticityAssembler< DIM >::Initialise().

template<unsigned DIM>
bool AbstractNonlinearElasticityAssembler< DIM >::mWriteOutput [protected]

template<unsigned DIM>
std::vector<double> AbstractNonlinearElasticityAssembler< DIM >::mCurrentSolution [protected]

template<unsigned DIM>
FourthOrderTensor<DIM> AbstractNonlinearElasticityAssembler< DIM >::dTdE [protected]

Storage space for a 4th order tensor used in assembling the Jacobian (to avoid repeated memory allocation)

Definition at line 129 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by NonlinearElasticityAssembler< DIM >::AssembleOnElement(), and ImplicitCardiacMechanicsAssembler< DIM >::AssembleOnElement().

template<unsigned DIM>
unsigned AbstractNonlinearElasticityAssembler< DIM >::mNumNewtonIterations [protected]

template<unsigned DIM>
std::vector<c_vector<double,DIM> > AbstractNonlinearElasticityAssembler< DIM >::mDeformedPosition [protected]

Deformed position: mDeformedPosition[i](j) = x_j for node i

Definition at line 135 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by NonlinearElasticityAssembler< DIM >::rGetDeformedPosition().

template<unsigned DIM>
std::vector<double> AbstractNonlinearElasticityAssembler< DIM >::mPressures [protected]

The solution pressures. mPressures[i] = pressure at node i (ie vertex i).

Definition at line 141 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by NonlinearElasticityAssembler< DIM >::rGetPressures().

template<unsigned DIM>
std::vector<c_vector<double,DIM> > AbstractNonlinearElasticityAssembler< DIM >::mSurfaceTractions [protected]

The surface tractions (which should really be non-zero) for the boundary elements in mBoundaryElements.

Definition at line 147 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by NonlinearElasticityAssembler< DIM >::AssembleSystem(), and NonlinearElasticityAssembler< DIM >::SetSurfaceTractionBoundaryConditions().

template<unsigned DIM>
c_vector<double,DIM>(* AbstractNonlinearElasticityAssembler< DIM >::mpBodyForceFunction)(c_vector< double, DIM > &) [protected]

An optionally provided (pointer to a) function, giving body force as a function of undeformed position.

Referenced by NonlinearElasticityAssembler< DIM >::AssembleOnElement(), and AbstractNonlinearElasticityAssembler< DIM >::SetFunctionalBodyForce().

template<unsigned DIM>
c_vector<double,DIM>(* AbstractNonlinearElasticityAssembler< DIM >::mpTractionBoundaryConditionFunction)(c_vector< double, DIM > &) [protected]

An optionally provided (pointer to a) function, giving the surface traction as a function of undeformed position.

Referenced by NonlinearElasticityAssembler< DIM >::AssembleOnBoundaryElement(), and NonlinearElasticityAssembler< DIM >::SetFunctionalTractionBoundaryCondition().

template<unsigned DIM>
bool AbstractNonlinearElasticityAssembler< DIM >::mUsingBodyForceFunction [protected]

Whether the functional version of the body force is being used or not

Definition at line 159 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by NonlinearElasticityAssembler< DIM >::AssembleOnElement(), and AbstractNonlinearElasticityAssembler< DIM >::SetFunctionalBodyForce().

template<unsigned DIM>
bool AbstractNonlinearElasticityAssembler< DIM >::mUsingTractionBoundaryConditionFunction [protected]

Whether the functional version of the surface traction is being used or not

Definition at line 162 of file AbstractNonlinearElasticityAssembler.hpp.

Referenced by NonlinearElasticityAssembler< DIM >::AssembleOnBoundaryElement(), and NonlinearElasticityAssembler< DIM >::SetFunctionalTractionBoundaryCondition().


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

Generated on Tue Aug 4 16:10:42 2009 for Chaste by  doxygen 1.5.5