DirectIntegrationAnalysis
class DirectIntegrationAnalysis(model, patterns, strategy)
DirectIntegrationAnalysis
is used to perform a transient
analysis using an incremental approach on the model
.
The following are the aggregates of such an analysis type:
model
(AnalysisModel) - a container class holding theFE_Element
andDOF_Group
objects created by the ConstraintHandler object.integrator
(TransientIntegrator) - an algorithmic class which provides methods which are invoked by theFE_Element
to determine their current tangent and residual matrices. That is, this is the class that sets up the system of equations.\[\mathbf{M}\ddot{\boldsymbol{u}}+\mathbf{C}\dot{\boldsymbol{u}}+\boldsymbol{p}_{\sigma}(\boldsymbol{u})=\boldsymbol{p}_f(t)\]
It also provides the
commit()
method which is invoked to set up the appropriate dof response values once the solution algorithm has formed and solved the system of equations.constraints
(ConstraintHandler) - a class which creates theDOF_Group
andFE_Element
objects, the type of objects created depending on how the specified constraints in the domain are to be handled.numberer
(DOF_Numberer) - a class responsible for providing equation numbers to the individual degrees of freedom in eachDOF_Group
object.system
(LinearSOE) - a numeric class responsible for the creation and subsequent solution of large systems of linear equations of the form \(Ax = b\), where \(A\) is a matrix and \(x\) and \(b\) are vectors.algorithm
(EquiSolnAlgo) - an algorithmic class specifying the sequence of operations to be performed in setting up and solving the finite element equation which can be represented by the equation \(K(\boldsymbol{u}) \boldsymbol{u} = P(\boldsymbol{u})\).
Transient Integrators
Determing the next time step for an analysis including inertial effects is done by the following schemes
- Newmark – The two parameter time-stepping method developed by Newmark
- HHT – The three parameter Hilbert-Hughes-Taylor time-stepping method
- Generalized Alpha – Generalization of the HHT algorithm with improved numerical damping
- Central Difference – Approximates velocity and acceleration by centered finite differences of displacement
- TRBDF2 – A composite scheme that alternates between the Trapezoidal scheme and a 3 point backward Euler scheme.
- Explicit difference –
Theory
In nonlinear transient finite element problems we seek a solution (\(\boldsymbol{u}\), \(\dot{\boldsymbol{u}}\), \(\ddot{\boldsymbol{u}}\)) to the nonlinear vector equation
\[\boldsymbol{R}({\boldsymbol{u}},\dot{\boldsymbol{u}}, \ddot{\boldsymbol{u}}) = \boldsymbol{p}_f(t) - \boldsymbol{p}_{\mathrm{i}}(\ddot{\boldsymbol{u}}) - \boldsymbol{p}_{\sigma}({\boldsymbol{u}}, \dot{\boldsymbol{u}}) = \boldsymbol{0}\] {#femGenForm}
The most widely used technique for solving the transient non-linear finite element equation, equation [femGenForm, is to use an incremental direct integration scheme. In the incremental formulation, a solution to the equation is sought at successive time steps \(\Delta t\) apart.
\[\boldsymbol{R}({\boldsymbol{u}}_{n \Delta t},\dot{\boldsymbol{u}}_{n \Delta t}, \ddot{\boldsymbol{u}}_{n \Delta t}) = \boldsymbol{p}_f(n \Delta t) - \boldsymbol{p}_{\mathrm{i}}(\ddot{\boldsymbol{u}}_{n \Delta t}) - \boldsymbol{p}_{\sigma}({\boldsymbol{u}}_{n \Delta t}, \dot{\boldsymbol{u}}_{n \Delta t}) \] {#fullTimeForm}
For each time step, \(t\), the integration schemes provide two operators, \(\operatorname{I}_1\) and \(\operatorname{I}_2\), to relate the velocity and accelerations at the time step as a function of the displacement at the time step and the response at previous time steps:
\[\dot {\boldsymbol{u}}_{t} = {\I}_1 ({\boldsymbol{u}}_t, {\boldsymbol{u}}_{t-\Delta t}, \dot {\boldsymbol{u}}_{t-\Delta t}, \ddot {\boldsymbol{u}}_{t - \Delta t}, {\boldsymbol{u}}_{t - 2\Delta t}, \dot {\boldsymbol{u}}_{t - 2 \Delta t}. ..., ) \label{I1}\]
\[\ddot {\boldsymbol{u}}_{t} = {\I}_2 ({\boldsymbol{u}}_t, {\boldsymbol{u}}_{t-\Delta t}, \dot {\boldsymbol{u}}_{t-\Delta t}, \ddot {\boldsymbol{u}}_{t - \Delta t}, {\boldsymbol{u}}_{t - 2\Delta t}, \dot {\boldsymbol{u}}_{t - 2 \Delta t}. ..., ) \label{I2}\]
These allow us to rewrite equation [fullTimeForm, in terms of a single response quantity, typically the displacement:
\[\boldsymbol{r}({\boldsymbol{u}}_t) = \boldsymbol{p}_f(t) - \boldsymbol{p}_{\mathrm{i}}(\ddot{\boldsymbol{u}}_t) - \boldsymbol{p}_{\sigma}({\boldsymbol{u}}_t, \dot{\boldsymbol{u}}_t) \label{genForm}\]
The solution of this equation is typically obtained using an iterative procedure, i.e. making an initial prediction for \({\boldsymbol{u}}_{t}\), denoted \({\boldsymbol{u}}_{t}^{(0)}\) a sequence of approximations \({\boldsymbol{u}}_{t}^{(i)}\), \(i=1,2, ..\) is obtained which converges (we hope) to the solution \({\boldsymbol{u}}_{t}\). The most frequently used iterative schemes, such as Newton-Raphson, modified Newton, and quasi Newton schemes, are based on a Taylor expansion of equation [genForm about \({\boldsymbol{u}}_{t}\):
\[\boldsymbol{r}({\boldsymbol{u}}_{t}) = \boldsymbol{r}({\boldsymbol{u}}_{t}^{(i)}) + \left[ {\frac{\partial \boldsymbol{r}}{\partial {\boldsymbol{u}}_t} \vert}_{{\boldsymbol{u}}_{t}^{(i)}}\right] \left( {\boldsymbol{u}}_{t} - {\boldsymbol{u}}_{t}^{(i)} \right)\]
\[ \boldsymbol{r}({\boldsymbol{u}}_{t}) = \boldsymbol{p}_f (t) - \boldsymbol{p}_{\mathrm{i}} \left( \ddot {\boldsymbol{u}}_{t}^{(i)} \right) - \boldsymbol{p}_{\sigma} \left( \dot {\boldsymbol{u}}_{t}^{(i)}, {\boldsymbol{u}}_{t}^{(i)} \right)- \left[ \boldsymbol{M}^{(i)} {\I}_2' + \boldsymbol{C}^{(i)} {\I}_1' + \boldsymbol{K}^{(i)} \right] \left( {\boldsymbol{u}}_{t} - {\boldsymbol{u}}_{t}^{(i)} \right) \label{femGenFormTaylor}\]
To start the iteration scheme, trial values for \({\boldsymbol{u}}_{t}\), \(\dot {\boldsymbol{u}}_{t}\) and \(\ddot {\boldsymbol{u}}_{t}\) are required.
These are obtained by assuming \({\boldsymbol{u}}_{t}^{(0)} =
{\boldsymbol{u}}_{t-\Delta t}\). The \(\dot {\boldsymbol{u}}_{t}^{(0)}\) and \(\ddot {\boldsymbol{u}}_{t}^{(0)}\) can then
be obtained from the operators for the integration scheme. Subclasses of
TransientIntegrator
provide methods informing the
FE_Element
and DOF_Group
objects how to build
the tangent and residual matrices and vectors. They also provide the
method for updating the response quantities at the DOFs with appropriate
values; these values being some function of the solution to the linear
system of equations.
Implementation
#include <analysis/analysis/DirectIntegrationAnalysis.h>
class DirectIntegrationAnalysis: public TransientAnalysis;
Constructor and Destructor
::DirectIntegrationAnalysis(
DirectIntegrationAnalysis&the_Domain,
Domain &theHandler,
ConstraintHandler &theNumberer,
DOF_Numberer &theModel,
AnalysisModel &theSolnAlgo,
EquiSolnAlgo &theLinSOE,
LinearSOE &theTransientIntegrator,
TransientIntegrator *theConvergenceTest,
ConvergenceTest int num_SubLevels,
int num_SubSteps
)
The constructor is responsible for setting up all links needed by the
objects in the aggregation. It invokes setLinks(theDomain)
on theModel
,
setLinks(theDomain,theModel,theIntegrator)
on
theHandler
, setLinks(theModel)
on
theNumberer
, setLinks(theModel, theSOE)
on theIntegrator
and
setLinks(theModel,theAnalysis, theIntegrator, theSOE)
on
theSolnAlgo
. Sets theModel and theSysOFEqn to 0 and the
Algorithm to the one supplied.
~DirectIntegrationAnalysis
Does nothing. clearAll()
must be invoked if the
destructor on the objects in the aggregation need to be invoked.
Public Methods
int analyze(int steps, double dT);
Invokes analyzeStep(dT)
steps
number of
times.
int analyzeStep(double dT);
Invoked to perform a transient analysis on the FE_Model
.
The method checks to see if the domain has changed before it performs
the analysis. The DirectIntegrationAnalysis
object performs
the following:
->analysisStep(dT);
theAnalysisModel
if (theDomain->hasDomainChanged() != this->domainStamp)
this->domainChanged();
->newStep(dT);
theIntegrator->solveCurrentStep();
theAlgorithm->commit(); theIntegrator
The type of analysis performed, depends on the type of the objects in
the analysis aggregation. If any of the methods invoked returns a
negative number, an error message is printed,
revertToLastCommit()
is invoked on the Domain, and a
negative number is immediately returned. Returns a \(0\) if the algorithm is successful.
void clearAll(void);
Will invoke the destructor on all the objects in the aggregation.
NOTE this means they must have been constructed using
new()
, otherwise a segmentation fault can occur.
void domainChange(void);
This is a method invoked by a domain which indicates to the analysis that the domain has changed. The method invokes the following:
It invokes
clearAll()
ontheModel
which causes theAnalysisModel
to clear out its list ofFE_Elements
andDOF_Groups
, andclearAll()
ontheHandler
.It then invokes
handle()
ontheHandler
. This causes the constraint handler to recreate the appropriateFE_Element
andDOF_Groups
to perform the analysis subject to the boundary conditions in the modified domain.It then invokes
numberDOF()
ontheNumberer
. This causes the DOF numberer to assign equation numbers to the individual DOFs. Once the equation numbers have been set the numberer then invokessetID()
on all theFE_Elements
in the model. Finally theDOF_Numberer
invokessetNumEqn()
ontheAnalysisModel
.Then
doneNumberingDOF()
is invoked on theConstraintHandler
which invokessetID()
on all theFE_Elements
in the model.It invokes
setSize(theModel.getDOFGraph())
ontheSOE
andtheEigenSOE
which causes the system of equation to determine its size based on the connectivity of the dofs in the analysis model.It then invokes
domainChanged()
ontheIntegrator
andtheAlgorithm
to inform these objects that changes have occurred in the model.
Returns \(0\) if successful. At any stage above, if an error occurs the method is stopped, a warning message is printed and a negative number is returned.
Public Methods to vary the type of Analysis
int setAlgorithm(EquiSolnAlgo &theNewAlgorithm)
To change the algorithm between analysis. It first invokes the
destructor on the old SolutionAlgorithm
object associated
with the analysis. It then sets the SolutionAlgorithm
associated with the analysis to be newAlgorithm
and sets
the links for this object by invoking setLinks()
. Checks
then to see if the domain has changed, if true it invokes
domainChanged()
, otherwise it invokes
domainChanged()
on the new SolutionAlgorithm. Returns \(0\) if successful, a warning message and a
negative number if not.
int setIntegrator(TransientIntegrator &theNewIntegrator)
To change the integration scheme between analysis. It first invokes
the destructor on the old Integrator object associated with the
analysis. It then sets the SolutionAlgorithm associated with the
analysis to be newAlgorithm
and sets the links for this
object by invoking setLinks()
. It also invokes
setLinks()
on the ConstraintHandler and SolutionAlgorithm
objects. Checks then to see if the domain has changed, if true it
invokes domainChanged()
, otherwise it invokes
domainChanged()
on the new Integrator. Returns \(0\) if successful, a warning message and a
negative number if not.
int setLinearSOE(LinearSOE &theNewSOE);
int setEigenSOE(EigenSOE &theNewSOE);
To change the respective system of equation object between analysis.
It first invokes the destructor on the old LinearSOE object associated
with the analysis. It then sets the SolutionAlgorithm associated with
the analysis to be newSOE
. links for this object by
invoking setLinks()
. It then invokes
setLinks()
on the ConstraintHandler and SolutionAlgorithm
objects. Checks then to see if the domain has changed, if true it
invokes domainChanged()
, otherwise it invokes
setSize()
on the new LinearSOE. Returns \(0\) if successful, a warning message and a
negative number if not.