Load Control
This command is used to construct a LoadControl integrator object.
$lambda < $numIter $minLambda $maxLambda > integrator LoadControl
|
the load factor increment \(\lambda\) |
|
the number of iterations the user would like to occur in the solution algorithm. Optional, default = 1.0. |
|
the min stepsize the user will allow. optional, defualt = \(\lambda_{\text{min}} = \lambda\) |
|
the max stepsize the user will allow. optional, default = \(\lambda_{\text{max}} = \lambda\) |
NOTES:
- The change in applied loads that this causes depends on the active load patterns (those load patterns not set constant) and the loads in the load patterns. If the only active loads acting on the domain are in load patterns with a Linear time series with a factor of 1.0, this integrator is the same as the classical load control method.
- The optional arguments are supplied to speed up the step size in cases where convergence is too fast and slow down the step size in cases where convergence is too slow.
Examples
0.1; integrator LoadControl
"integrator": ["LoadControl", 0.1]}; {
Theory
Incrementation
In Load Control the time in the domain is set to \(\lambda + \lambda_{t+1}\) where,
\[ \Delta \lambda_i^1=\Delta \lambda_{i-1}^1\left(\frac{J_{\mathrm{d}}}{J_{i-1}}\right) \]
\[\lambda_{t+1} = \max \left ( \lambda_{\text{min}}, \min \left ( \lambda_{\text{max}}, \frac{\text{numIter}}{\text{lastNumIter}} \lambda_{t} \right ) \right ) \]
Code Developed by: fmk
LoadControl
#include <analysis/integrator/LoadControl.h>
LoadControl is a subclass of StaticIntegrator, it is used to when
performing a static analysis on the FE_Model
using the load
control method. In the load control method, the following constraint
equation is added to equation staticFormTaylor of the StaticIntegrator
class:
\[ \lambda_n^{(i)} - \lambda_{n-1} = \delta \lambda_n \]
where \(\delta \lambda_n\) depends on \(\delta \lambda_{n-1}\), the load increment at the previous time step, \(J_{n-1}\), the number of iterations required to achieve convergence in the previous load step, and \(J_d\), the desired number of iteraions. \(\delta \lambda_n\) is bounded by \(\delta \lambda_{\text{min}}\) and \(\delta \lambda_{\text{max}}\). \[ \delta \lambda_n = \max \left( \delta \lambda_{\text{min}}, \min \left( \frac{J_d}{J_{n-1}} \delta \lambda_{n-1}, \delta \lambda_{\text{max}} \right) \right) \]
Knowing \(\lambda_n^{(i)}\) prior to each iteration, the \(N+1\) unknowns in equation staticFormTaylor, is reduced to \(N\) unknowns and results in the following equation:
\[ \boldsymbol{r}(\boldsymbol{u}_{n}) = \lambda_n^{(i)} \boldsymbol{p}_f - \boldsymbol{p}_{\sigma}\left(\boldsymbol{u}_{n}^{(i)} \right) - \boldsymbol{K}_n^{(i)} (\boldsymbol{u}_{n} - \boldsymbol{u}_{n}^{(i)}) \label{staticFormLoadControl} \]
Implementation
\(\delta \lambda_1\) is the load factor used in the first step. The arguments \(J_d\), \(\delta \lambda_{\text{min}}\), and \(\delta \lambda_{\text{max}}\) are used in the determination of the increment in the load factor at each step.
int newStep(void);
The object obtains the current value of \(\lambda\) from the AnalysisModel object. It increments this by \(\delta \lambda_n\).
\[ \delta \lambda_n = \max \left( \delta \lambda_{\text{min}}, \min \left( \frac{J_d}{J_{n-1}} \delta \lambda_{n-1}, \delta \lambda_{\text{max}} \right) \right) \]
It will then invoke applyLoadDomain(0.0, $\lambda$)
on the AnalysisModel object. Returns \(0\) if successful. A warning message is
printed and a \(-1\) is returned if no
AnalysisModel is associated with the object.
int update(const Vector &$\Delta \boldsymbol{u}$);
Invoked this causes the object to first increment the DOF_Group
displacements with \(\Delta
\boldsymbol{u}\), by invoking incrDisp(\(\Delta \boldsymbol{u})\) on the
AnalysisModel, and then to update the domain, by invoking
updateDomain()
on the AnalysisModel. Returns \(0\) if successful, a warning message and a
\(-1\) is returned if no AnalysisModel
is associated with the object.
Sets the value of the load increment in newStep()
to be
\(\delta \lambda\). Returns \(0\).
int sendSelf(int commitTag, Channel &theChannel);
Places in a vector if size 5 the value of \(\delta \lambda_{n-1}\), \(J_d\), \(J_{n-1}\), \(\delta \lambda_{\text{min}}\) and \(\delta \lambda_{\text{max}}\)) and then
sends the Vector. Returns \(0\) if
successful, a warning message is printed and a \(-1\) is returned if theChannel
fails to send the Vector.
int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
Receives in a Vector of size 5 the data that was sent in
sendSelf()
. Returns \(0\)
if successful, a warning message is printed, \(\delta \lambda\) is set to \(0\), and a \(-1\) is returned if theChannel
fails to receive the Vector
.
int Print(OPS_Stream &s, int flag = 0);
The object sends to \(s\) its type, the current value of \(\lambda\), and \(\delta \lambda\).