FemProcess
The GeMA Fem Process Plugin
Loading...
Searching...
No Matches
GmpFemTransientNonLinearSolver Class Reference

Basic class for solving Non linear FEM problems. More...

#include <gmpFemTransientNonLinearSolver.h>

Inheritance diagram for GmpFemTransientNonLinearSolver:
Collaboration diagram for GmpFemTransientNonLinearSolver:

Public Member Functions

 GmpFemTransientNonLinearSolver (GmElementMesh *, GmSimulationData *, const QVector< GmpFemPhysics * > &, GmNumSolver *, const GmpFemSolverOptions &, const GmLogCategory &)
 
void enableFastUpdate (bool mode)
 
virtual bool runStep (double dt, double *newt, bool *conv, double *err, int *niter, bool eval=false)
 
virtual bool geostatic (QString svId="u", QString gaId="Em")
 The geostatic implementation (femNLSolver.geostatic) This function manages the geostatic process.
 
- Public Member Functions inherited from GmpFemNonLinearSolver
 GmpFemNonLinearSolver (GmElementMesh *, GmSimulationData *, const QVector< GmpFemPhysics * > &, GmNumSolver *, const GmpFemSolverOptions &, const GmLogCategory &)
 
void enableFastUpdate (bool mode)
 
virtual bool init ()
 Prepares the solver for assembling matrices by creating the assembler object and allocating the needed memory. This operations only need to be done once if the solver is used in a loop.
 
virtual bool initResultAttributes (int fatherItemId)
 Creates the solver tracking attributes + report.
 
bool initReport (GmRunProgressStats *ps)
 Creates the solver report.
 
virtual bool checkTimeStep (double dt)
 
void initializeProgress (solverState &sS, GmRunProgress &ps)
 
- Public Member Functions inherited from GmpFemSolver
 GmpFemSolver (GmElementMesh *mesh, GmSimulationData *simulation, const QVector< GmpFemPhysics * > &physics, GmNumSolver *solver, const GmpFemSolverOptions &options, const GmLogCategory &logger)
 Constructor. Expects to receive as parameters the mesh we are acting upon, the list of physics objects that will cooperate to create the global stiffness matrix and the solver used to solve the resulting linear system.
 
virtual ~GmpFemSolver (void)
 Destructor.
 
bool run ()
 Execute the process. Returns true on success.
 
bool calcLinearResidual (double *rnorm, double *maxNodeDiff, double *avgNodeDiff)
 When solving a non linear system by repeated iterations, this function aims to calculate the residual of the actual solution.

 
void setMatrixCombinerObject (const GmpFemAssemblerMatrixCombiner *combiner)
 Sets the combiner object that will be used by the assembler to merge elemental data from multiple matrices (eg. C and K) into an equivalent matrix.
 
void setVectorCombinerObject (const GmpFemAssemblerVectorCombiner *combiner)
 Sets the combiner objects that will be used by the assembler to merge elemental data from multiple vectors (eg. Fe and Fi) into an equivalent vector.
 
bool update (int mode, QString &err)
 Informs the solver of an external change in model dofs, elements or BCs that must be forwarded to the assembler. See the documentation of GmpFemAssembler::update() for more details.
 
virtual bool stateAboutToBeSaved (GmStateDump *state)
 
virtual bool stateSaved (GmStateDump *state)
 
virtual bool stateAboutToBeLoaded (GmStateDump *state)
 
virtual bool stateLoaded (GmStateDump *state)
 Informs physics objects that a load operation was completed giving them an opportunity to adjust its state in case the loaded data is not exactly what the internal state needs to be. It will also call derivedResults() so that previous results can be recovered. In that call, the nonLinearSolver parameter is obtained from the stateLoadedCalcDerivedResultsNonLinear() virtual function.
 
- Public Member Functions inherited from QObject
virtual const QMetaObjectmetaObject () const const
 
 QObject (QObject *parent)
 
virtual bool event (QEvent *e)
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 
QString objectName () const const
 
void setObjectName (const QString &name)
 
bool isWidgetType () const const
 
bool isWindowType () const const
 
bool signalsBlocked () const const
 
bool blockSignals (bool block)
 
QThreadthread () const const
 
void moveToThread (QThread *targetThread)
 
int startTimer (int interval, Qt::TimerType timerType)
 
int startTimer (std::chrono::milliseconds time, Qt::TimerType timerType)
 
void killTimer (int id)
 
findChild (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegExp &regExp, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
 
const QObjectListchildren () const const
 
void setParent (QObject *parent)
 
void installEventFilter (QObject *filterObj)
 
void removeEventFilter (QObject *obj)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
 
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
 
bool disconnect (const QObject *receiver, const char *method) const const
 
void dumpObjectTree ()
 
void dumpObjectInfo ()
 
void dumpObjectTree () const const
 
void dumpObjectInfo () const const
 
bool setProperty (const char *name, const QVariant &value)
 
QVariant property (const char *name) const const
 
QList< QByteArraydynamicPropertyNames () const const
 
void destroyed (QObject *obj)
 
void objectNameChanged (const QString &objectName)
 
QObjectparent () const const
 
bool inherits (const char *className) const const
 
void deleteLater ()
 
 Q_DISABLE_COPY (Class)
 
 Q_DISABLE_MOVE (Class)
 
 Q_DISABLE_COPY_MOVE (Class)
 
qobject_cast (QObject *object)
 
qobject_cast (const QObject *object)
 
qFindChild (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QRegExp &regExp)
 
 Q_CLASSINFO (Name, Value)
 
 Q_INTERFACES (...)
 
 Q_PROPERTY (...)
 
 Q_ENUMS (...)
 
 Q_FLAGS (...)
 
 Q_ENUM (...)
 
 Q_FLAG (...)
 
 Q_ENUM_NS (...)
 
 Q_FLAG_NS (...)
 
 Q_OBJECT Q_OBJECT
 
 Q_GADGET Q_GADGET
 
 Q_NAMESPACE Q_NAMESPACE
 
 Q_NAMESPACE_EXPORT (EXPORT_MACRO)
 
 Q_SIGNALS Q_SIGNALS
 
 Q_SIGNAL Q_SIGNAL
 
 Q_SLOTS Q_SLOTS
 
 Q_SLOT Q_SLOT
 
 Q_EMIT Q_EMIT
 
 Q_INVOKABLE Q_INVOKABLE
 
 Q_REVISION Q_REVISION
 
 Q_SET_OBJECT_NAME (Object)
 
 QT_NO_NARROWING_CONVERSIONS_IN_CONNECT QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
 
- Public Member Functions inherited from GmGroupDumpItem

Protected Member Functions

virtual bool addStateItemsToGroup (GmStateDump *state, int groupId)
 Adds to 'state' the data items that should be saved for this FEM process. Should probably be overridden by derived classes to add their own requirements.
 
virtual bool fillStateControlMapData (QVariantMap *map)
 Method called for filling the state dump control registered in addStateItemsToGroup()
 
virtual bool stateControlMapDataLoaded (QVariantMap *map)
 Method called when the state dump control registered in addStateItemsToGroup() has been loaded.
 
virtual bool stateLoadedCalcDerivedResultsNonLinear ()
 Returns the value of the "nonLinearSolver" parameter that will be passed to the calcDerivedResults() call from the standard implementation of stateLoaded()
 
virtual bool fillStateControlMapDataStaticSolver (QVariantMap *map)
 Virtual method to fill the map with the needed continuation method data.
 
virtual bool stateControlMapDataLoadedStaticSolver (QVariantMap *map)
 Virtual method to Load the scalar attributes needed by continuation method.
 
virtual bool fillStateControlMapDataTransientSolver (QVariantMap *map)
 Virtual method to load the scalar attributes needed by transient solver.
 
virtual bool stateControlMapDataLoadedTransientSolver (QVariantMap *map)
 Virtual method to fill the map with the needed transient solver data.
 
virtual bool initElementSets (GmNumSolver *)
 Helper function used to initialize the matrix / vector sets with the definition of the needed types and also the relationships of those sets with the assembler.
 
virtual void setElementSets (bool, bool, bool, bool, bool)
 
virtual void setElementDiscretizedSystem (bool RHS, bool LHS)
 
virtual bool applyFixedBoundaryConditions (int *)
 Apply Dirichlet (fixed) boundary conditions to the global equation system.
 
virtual bool intialFixedBoundaryConditions (int *)
 
virtual bool applyNonzeroFixedBCsbyModification (int *)
 
virtual bool isTransient () const
 
virtual bool isNonlinear () const
 
virtual bool convergence () const
 analysis
 
virtual bool convergenceN (GmVector &erL, GmRunProgress *rp=NULL) const
 
virtual bool convergenceDC (GmVector &er) const
 
virtual void update ()
 
virtual void restore ()
 
virtual bool loadError (GmVector &er) const
 
virtual bool dispError (GmVector &er) const
 
virtual bool velocityError (GmVector &er) const
 
virtual bool fluxError (GmVector &er) const
 
virtual bool fluxMagnitude (GmVector &qa) const
 
virtual bool convergenceStep (unsigned &attempt, unsigned &incT, double, double)
 Step convergence.
 
virtual bool maxErr (GmVector, double &ermax, double &tolmax)
 Maximun erro in the current itarion.
 
virtual bool maxVal (GmVector &array, const GmVector &) const
 Maximun value of the array.
 
virtual bool phygroupName (int &kgroup, QString var) const
 Physical group.
 
virtual bool divergingIncrement (unsigned iter, double tolmax, double ermax, double &ermax_1, double &ermax_2)
 diverging Increment
 
virtual bool adaptativeTimeAbqs (bool conv, unsigned iter, double dt, double &newdt, double errmax, unsigned inc, bool iter4)
 Adaptative time increment based on abaqus std.
 
virtual bool adaptativeTime (bool conv, int iter, double dt, double &newdt, double err, double tol)
 Adaptative time increment.
 
virtual void saveInternalForceAttributes (GmVector &dv)
 Save internal force attibutes such as Reaction and Volume flux.
 
virtual void setLoad ()
 
virtual void setTime ()
 
virtual void setState ()
 
virtual void setTransientSystem (double)
 evaluates transient system
 
virtual bool getLinearSystem (double dt)
 evaluates the linear system
 
virtual bool getSystemRHSVector (double dt)
 Computes the right-hand side vector (RHS) for the nonlinear system RHS is saved in the vector _r.
 
virtual bool getSystemResidualVector (double dt)
 Computes the residual vector of the nonlinear system.
 
virtual bool solveLinearSystem ()
 Solve the linear system according to the adopted nonlinear scheme.
 
bool applyDirichletBoundaryConditions ()
 
virtual GmpFemPhysics::FemResultType updateResidualForceAndStiffnessMatrix (double l)
 Updates the stiffness matrix.
 
virtual GmpFemPhysics::FemResultType fillStiffnessMatrixBroyden ()
 Evaluates the stiffness matrix using Broyden's method.
 
virtual double evalLocalError (GmVector, GmVector)
 calc local error
 
virtual double evalTimeIncrementSize (unsigned, double, double, GmVector &)
 calc time increment size
 
virtual bool stepStandardDc (double dt, double *newt, bool *conv, double *err, int *niter, bool eval)
 The transient nonlinear implementation (femNLSolver.transient) This function manages the transient step.
 
virtual bool stepTransientNonlinearAut (double dt, double *newt)
 Automatic time stepping scheme (implementation based on the Sloan and Abbo algorithm) Automatic time stepping with local error control, was proposed for Sloan and Abbo 1999 EPS> Machine epsilon gives an upper bound on the relative error due to rounding in floating point arithmetic. This value characterizes computer arithmetic in the field of numerical analysis, and by extension in the subject of computational science. The quantity is also called macheps or unit roundoff.
 
- Protected Member Functions inherited from GmpFemNonLinearSolver
virtual bool prepareNonLinearSolverStep (solverState &sS, GmRunProgress &ps)
 
virtual bool assembleInitialSystem (const double &)
 
virtual bool solveInitialSystem (solverState &sS, GmRunProgress &ps)
 
virtual bool assembleIterationSystem (const double &)
 
virtual bool solveNewtonRaphson (GmRunProgress &ps, double &dt, const double &t, double *newt)
 
virtual bool applyTimeDiscretization ()
 
bool applyDirichletBoundaryConditions ()
 
virtual bool transientSolver (double dt, double *newt, bool *conv, double *err, int *niter, bool eval)
 The transient nonlinear implementation (femNLSolver.transient) This function manages the transient step.
 
virtual bool transientLocalSolver (double dt, double *newt, bool *conv, double *err, int *niter, bool eval)
 The transient nonlinear implementation (femNLSolver.transient) This function manages the transient step.
 
virtual bool iterativeSolver (double dt, double *newt, bool *conv, double *err, int *niter, bool eval)
 The transient nonlinear implementation (femNLSolver.transient) This function manages the transient step.
 
- Protected Member Functions inherited from GmpFemSolver
bool initSolver (GmpFemAssembler::FixedDofMode assemblerMode, bool assemblerReverseMapping, bool enableFastUpdate)
 Basic implementation of the init function receiving as parameters the configuration options that are sent to the assembler.
 
virtual void intLinearSolverPrintOptions ()
 Register print options with the numeric solver. Must be done AFTER registering result attributes. This enables printing of the linear system of equations.
 
virtual bool cleanup ()
 Deallocates memory and sets allocated resources to NULL. As a convenience, returns false.
 
GmpFemPhysics::FemResultType prepareMatrices (bool skipFixedBcs=false)
 Auxiliary function used to fill the K, and f matrices / vectors along with any other matrices/vectors stored in _matSet and _vecSet.

 
GmpFemPhysics::FemResultType saveElementData (int iter)
 Auxiliary function used to save to the configured file data from the set of element matrices and vectors. In this process, physics are called again to fill element matrices and vectors (according to the active matrices and vectors in _vecSet and _matSet) but the results are NOT added to the global matrices.
 
bool solveLinearSystem (bool xFilled)
 Solves the linear system K.x = f taking K and f from the single equivalent matrix/vector or from matrix K / vector f, depending on the assembler configuration. Results are saved in _x. Prints the used matrices / result as configured in _printOptions.
 
double timeConvert (double val)
 Auxiliary function created for being used by derived classes that converts a time value given in the current simulation time unit and returns that value converted to the physics expected unit.
 
GmpFemPhysics::FemResultType traverseElements ()
 Fills the stiffness matrix _K and the force vector _f by traversing elements asking physics for the local element matrix / force vector.
 
GmpFemPhysics::FemResultType traverseBoundaryElements ()
 Similar to traverseElements(), this function steps through each element that belongs to an edge or face boundary condition, asking physics for additional contributions to the stiffness matrix _K and the force vector _f.
 
GmpFemPhysics::FemResultType traverseExternalLoads ()
 Similar to traverseElements(), this function steps through each element associated to an external load force, asking physics for additional contributions to the force vector _f.
 
GmpFemPhysics::FemResultType traverseContactBoundaries ()
 Similar to traverseElements(), this function steps through each possible contact from the given contact boundary conditions and asks the physics for additional contributions to the solver matrices and vectors. This is different from the other element based loops since the returned matrices are not restricted to a single element, but can combine nodes from several ones.
 
GmpFemPhysics::FemResultType traverseElementsForSaving (FILE *f, int iter)
 Similar to traverseElements() but instead of adding the elements to the assembler, saves the element data to the given file.
 
GmpFemPhysics::FemResultType fillElementData (const GmElement *e, int physIndex)
 Helper function used by traverseElements() to get data for a single element calling phys->fillElementData()
 
GmpFemPhysics::FemResultType fillElementBoundaryData (const GmElement *e, int physIndex, const GmBoundaryCondition *bc, int bcIndex, int bcListIndex, int border, const GmCellBoundary *b)
 Helper function used by traverseBoundaryElements() to get data for a single element calling phys->fillElementDataForBc()
 
GmpFemPhysics::FemResultType fillElementDataForLoads (const GmElement *e, int physIndex, int loadIndex)
 Helper function used by traverseExternalLoads() to get data for phys->fillElementDataForLoads()
 
GmpFemPhysics::FemResultType fillContactData (GmMatrixDof &localDofMap, const GmContactBoundaryCondition *cbc, int physIndex, int index1, int index2)
 Helper function used by traverseContactBoundaries() to get data for a single contact pair calling phys->fillContactData()
 
bool addFixedForces ()
 Adds fixed nodal forces, as seen by each physics, to the global vector _f.
 
bool collectFixedBcs (QVector< bool > &fixedRows, QVector< double > &fixedValues, QVector< int > &dofIndex)
 Fills the set of vectors received as parameters with the complete set of fixed boundary conditions, as seen by the full set of physics in use, checking for possible conflicts in conditions.
 
virtual void collectGlobalContactPairs (const GmContactBoundaryCondition *cbc, QVector< QPair< int, int > > &contactPairs)
 Global search rule used to define contact surfaces. Should be implemented to allow global contact conditions, filling contactPairs with the indices in cbc of the in-contact surfaces.
 
void printElementData (const GmElement *e, int ndof, const int *dofMapping, const GmpFemPhysics *p, const GmBoundaryCondition *bc=NULL, const GmContactBoundaryCondition *cbc=NULL, int loadId1=-1, int id2=-1)
 Print element dof mapping, local matrices and vectors depending on the current solver print options.

 
void printGlobalData ()
 Print global matrices and vectors after assembling. Notice that the linear system print options are handled directly by the solver.
 
- Protected Member Functions inherited from QObject
QObjectsender () const const
 
int senderSignalIndex () const const
 
int receivers (const char *signal) const const
 
bool isSignalConnected (const QMetaMethod &signal) const const
 
virtual void timerEvent (QTimerEvent *event)
 
virtual void childEvent (QChildEvent *event)
 
virtual void customEvent (QEvent *event)
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 

Additional Inherited Members

- Public Types inherited from QObject
typedef  QObjectList
 
- Static Public Member Functions inherited from QObject
QString tr (const char *sourceText, const char *disambiguation, int n)
 
QString trUtf8 (const char *sourceText, const char *disambiguation, int n)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
bool disconnect (const QMetaObject::Connection &connection)
 
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
 
- Protected Types inherited from GmpFemSolver
enum  DisabledWarnings {
  PrescribedForceForInvalidDof , PrescribedForceForFixedDof , FixedBcForInvalidDof , ConflictingFixedBcValue ,
  NumDisabledWarnings
}
 Enums describing the set of warnings that can be disabled by simulation options. More...
 
- Protected Slots inherited from GmpFemSolver
virtual void meshChanged ()
 Slot called when the underlying mesh has been changed.
 
- Protected Attributes inherited from GmpFemNonLinearSolver
double _dl
 
double _dl0
 
double _ddl
 
double _Lold
 
double _tin
 
double _dt
 
double _oldIter
 
double _hlast
 
unsigned _attempt = 0
 
unsigned _ninc = 0
 counter of consecutive converged increments
 
unsigned _incT = 0
 counter of consecutive increments, i, and if no cut-back within those increments
 
bool _iter4old = false
 corresponding to True If no more than IG iterations are required in two consecutive increments
 
GmVector _v
 
GmVector _dx
 
GmVector _dv
 
GmVector _xold
 
GmVector _vold
 
GmVector _dxt
 
GmVector _ddx
 
GmVector _ddxt
 
GmVector _ddxr
 
GmVector _FeGs
 
GmVector _r0
 
GmVector _qta
 An overall time-averaged value of the typical flux for field α so far during this step including the current increment.
 
GmVector _qtamax
 The time-averaged value of the largest flux corresponding to the field αduring this step, excluding the current increment.
 
QVector< int > _fixedDof
 
bool _fastUpdate
 
bool _hasUnanamedDofs
 Set to true if there are dofs that belong to the 'unnamed' group.
 
TrackItemState _td
 The "track data" object, controlling time & simulation progress tracking.
 
- Protected Attributes inherited from GmpFemSolver
int _solverId
 A unique index for this solver object used by the result attribute auto prefix feature.
 
GmElementMesh_mesh
 Mesh with the nodes and cells data.
 
GmSimulationData_simulation
 Simulation Data.
 
QVector< GmpFemPhysics * > _physicsList
 List of physics that will cooperate to generate the system response.
 
GmNumSolverPrinter_solver
 Wrapper over the numeric solver that will be used to solve the set of linear equations.
 
const GmLogCategory_logger
 Logger for eventual messages.
 
QMutex _printMutex
 Mutex for serializing calls to printElementData when traversing elements in parallel.
 
bool _enabledWarn [NumDisabledWarnings]
 Vector storing which warnings are enabled.
 
GmpFemSolverOptions _solverOptions
 The set of solver options.
 
UnitConverter_timeConv
 Unit converter from the currentTimeUnit to the physics unit. Used only by derived solvers.
 
GmpFemAssembler_assembler
 Assembler used for adding element contributions to vectors and matrices.
 
const GmpFemAssemblerMatrixCombiner_matCombiner
 The combiner object used with the assembler to merge data from multiple elemental matrices.
 
const GmpFemAssemblerVectorCombiner_vecCombiner
 The combiner object used with the assembler to merge data from multiple elemental vectors.
 
GmpFemVectorSet _vecSet
 Set of global/element vectors filled by physics.
 
GmpFemMatrixSet _matSet
 Set of global/element matrices filled by physics.
 
GmVector _x
 State vector.
 
GmVector _r
 Residual vector.
 
unsigned _preCount
 Number of times that prepareMatrices() was called.
 
unsigned _runCount
 Number of times that run() was called.
 
QVariantMap _controlMap
 Variant map used for storing dump control data for the solver.
 
bool _parallelAssembler
 Can we do the assembling steps in parallel?
 
int _ntasks
 
int _nworkers
 
GmTaskManager::CellPartitionStrategy _strategy
 
int _iterAttr = -1
 The "fem:iter" LOCAL item attribute id.
 
int _iterErrAttr = -1
 The "fem:iterErr" LOCAL item attribute id.
 
int _femItem = -1
 The "fem" track item.
 
int _prepareItem = -1
 The "fem.prepare" track item.
 
int _physicsItem = -1
 The "fem.prepare.physics" track item.
 
int _fixedBcItem = -1
 The "fem.prepare.fixedBC" track item.
 
int _fixedForcesItem = -1
 The "fem.prepare.fixedForces" track item.
 
int _assemblerItem = -1
 The "fem.prepare.assembler" track item.
 
int _physicsBeforeLoopItem = -1
 The "fem.prepare.physics.beforeLoop" track item.
 
int _physicsfillElemDataItem = -1
 The "fem.prepare.physics.fillElemData" track item.
 
int _physicsfillElemDataBcItem = -1
 The "fem.prepare.physics.fillElemDataBC" track item.
 
int _physicsfillElemDataExtLoadsItem = -1
 The "fem.prepare.physics.fillElemDataExtLoads" track item.
 
int _physicsfillContactDataItem = -1
 The "fem.prepare.physics.fillContactData" track item.
 
int _physicsAfterLoopItem = -1
 The "fem.prepare.physics.afterLoop" track item.
 
int _assemblerBeginItem = -1
 The "fem.prepare.assembler.begin" track item.
 
int _assemblerAddItem = -1
 The "fem.prepare.assembler.add" track item.
 
int _assemblerEndItem = -1
 The "fem.prepare.assembler.end" track item.
 
int _assemblerT1Item = -1
 The "fem.prepare.assembler.traverseElements" track item.
 
int _assemblerT2Item = -1
 The "fem.prepare.assembler.traverseLoads" track item.
 
int _assemblerT3Item = -1
 The "fem.prepare.assembler.traverseBElements" track item.
 
int _assemblerT4Item = -1
 The "fem.prepare.assembler.traverseCBoundaries" track item.
 
- Properties inherited from QObject
 objectName
 

Detailed Description

Basic class for solving Non linear FEM problems.

Member Function Documentation

◆ adaptativeTime()

bool GmpFemTransientNonLinearSolver::adaptativeTime ( bool conv,
int iter,
double dt,
double & newdt,
double err,
double tol )
protectedvirtual

Adaptative time increment.

Reimplemented from GmpFemNonLinearSolver.

◆ adaptativeTimeAbqs()

bool GmpFemTransientNonLinearSolver::adaptativeTimeAbqs ( bool conv,
unsigned iter,
double dt,
double & newdt,
double errmax,
unsigned inc,
bool iter4 )
protectedvirtual

Adaptative time increment based on abaqus std.

Reimplemented from GmpFemNonLinearSolver.

◆ addStateItemsToGroup()

bool GmpFemTransientNonLinearSolver::addStateItemsToGroup ( GmStateDump * state,
int groupId )
protectedvirtual

Adds to 'state' the data items that should be saved for this FEM process. Should probably be overridden by derived classes to add their own requirements.

Auxiliar variant map dump item that notifies us for loading and saving data to the map

< Our "father" solver object

Reimplemented from GmpFemNonLinearSolver.

◆ applyFixedBoundaryConditions()

bool GmpFemTransientNonLinearSolver::applyFixedBoundaryConditions ( int * numFixed)
protectedvirtual

Apply Dirichlet (fixed) boundary conditions to the global equation system.

Apply boundary conditions, clearing rows and columns in the stiffness matrix and adjusting the global force vector as needed.

Follows the procedures described by Fellipa in sections 3.6.1 and 3.6.2 (pages 3-12 and 3-13). Our algorithm does the same thing as the one presented in figure 21.5 (page 21-7), but in a different way (hopefully more clear).

Returns in numFixed the number of degrees of freedom "removed" from the system.

Reimplemented from GmpFemNonLinearSolver.

◆ applyNonzeroFixedBCsbyModification()

bool GmpFemTransientNonLinearSolver::applyNonzeroFixedBCsbyModification ( int * numFixed)
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ convergence()

bool GmpFemTransientNonLinearSolver::convergence ( ) const
protectedvirtual

analysis

Reimplemented from GmpFemNonLinearSolver.

◆ convergenceDC()

bool GmpFemTransientNonLinearSolver::convergenceDC ( GmVector & er) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ convergenceN()

bool GmpFemTransientNonLinearSolver::convergenceN ( GmVector & erL,
GmRunProgress * rp = NULL ) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ convergenceStep()

bool GmpFemTransientNonLinearSolver::convergenceStep ( unsigned & attempt,
unsigned & incT,
double t,
double dt )
protectedvirtual

Step convergence.

Maximun erro in the current itarion.

Reimplemented from GmpFemNonLinearSolver.

◆ dispError()

bool GmpFemTransientNonLinearSolver::dispError ( GmVector & er) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ divergingIncrement()

bool GmpFemTransientNonLinearSolver::divergingIncrement ( unsigned iter,
double tolmax,
double ermax,
double & ermax_1,
double & ermax_2 )
protectedvirtual

diverging Increment

Reimplemented from GmpFemNonLinearSolver.

◆ evalLocalError()

double GmpFemTransientNonLinearSolver::evalLocalError ( GmVector Xp,
GmVector dXp )
protectedvirtual

calc local error

Reimplemented from GmpFemNonLinearSolver.

◆ evalTimeIncrementSize()

double GmpFemTransientNonLinearSolver::evalTimeIncrementSize ( unsigned iter,
double t,
double dt,
GmVector & dXp )
protectedvirtual

calc time increment size

Reimplemented from GmpFemNonLinearSolver.

◆ fillStateControlMapData()

bool GmpFemTransientNonLinearSolver::fillStateControlMapData ( QVariantMap * map)
protectedvirtual

Method called for filling the state dump control registered in addStateItemsToGroup()

Reimplemented from GmpFemNonLinearSolver.

◆ fillStateControlMapDataStaticSolver()

bool GmpFemTransientNonLinearSolver::fillStateControlMapDataStaticSolver ( QVariantMap * map)
protectedvirtual

Virtual method to fill the map with the needed continuation method data.

Reimplemented from GmpFemNonLinearSolver.

◆ fillStateControlMapDataTransientSolver()

bool GmpFemTransientNonLinearSolver::fillStateControlMapDataTransientSolver ( QVariantMap * map)
protectedvirtual

Virtual method to load the scalar attributes needed by transient solver.

Reimplemented from GmpFemNonLinearSolver.

◆ fillStiffnessMatrixBroyden()

GmpFemPhysics::FemResultType GmpFemTransientNonLinearSolver::fillStiffnessMatrixBroyden ( )
protectedvirtual

Evaluates the stiffness matrix using Broyden's method.

Evaluates stiffness matrix and internal forces using Broyden's method.

Reimplemented from GmpFemNonLinearSolver.

◆ fluxError()

bool GmpFemTransientNonLinearSolver::fluxError ( GmVector & er) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ fluxMagnitude()

bool GmpFemTransientNonLinearSolver::fluxMagnitude ( GmVector & qa) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ geostatic()

bool GmpFemTransientNonLinearSolver::geostatic ( QString svId = "u",
QString gaId = "Em" )
virtual

The geostatic implementation (femNLSolver.geostatic) This function manages the geostatic process.

Reimplemented from GmpFemNonLinearSolver.

◆ getLinearSystem()

bool GmpFemTransientNonLinearSolver::getLinearSystem ( double dt)
protectedvirtual

evaluates the linear system

Computes the left-hand side matrix (LHS) and the right-hand side vector (RHS) for the nonlinear system.

Reimplemented from GmpFemNonLinearSolver.

◆ getSystemResidualVector()

bool GmpFemTransientNonLinearSolver::getSystemResidualVector ( double dt)
protectedvirtual

Computes the residual vector of the nonlinear system.

  • Considers a fully implicit time integration scheme
  • Applies the Dirichlet boundary conditions

r = dt * (Fe - Fi) + C * dx

Reimplemented from GmpFemNonLinearSolver.

◆ getSystemRHSVector()

bool GmpFemTransientNonLinearSolver::getSystemRHSVector ( double dt)
protectedvirtual

Computes the right-hand side vector (RHS) for the nonlinear system RHS is saved in the vector _r.

Reimplemented from GmpFemNonLinearSolver.

◆ initElementSets()

bool GmpFemTransientNonLinearSolver::initElementSets ( GmNumSolver * solver)
protectedvirtual

Helper function used to initialize the matrix / vector sets with the definition of the needed types and also the relationships of those sets with the assembler.

In a nutshell, this function is responsible for calling the initTypes() methods from matrix and vector sets. It is also its responsibility to call other configuration functions such as GmpFemMatrixSet::setTransposedDofVector(), GmpFemVectorSet::addTransposedDofVector() and GmpFemVectorSet::addSavedDofVector() as needed to drive the method that will be used by the assembler.

This is the function to be reimplemented when a different solver driver needs to ask elements for additional matrices / vectors.

Returns false on errors.

Reimplemented from GmpFemNonLinearSolver.

◆ intialFixedBoundaryConditions()

bool GmpFemTransientNonLinearSolver::intialFixedBoundaryConditions ( int * numFixed)
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ isNonlinear()

bool GmpFemTransientNonLinearSolver::isNonlinear ( ) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ isTransient()

bool GmpFemTransientNonLinearSolver::isTransient ( ) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ loadError()

bool GmpFemTransientNonLinearSolver::loadError ( GmVector & er) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ maxErr()

bool GmpFemTransientNonLinearSolver::maxErr ( GmVector err,
double & ermax,
double & tolmax )
protectedvirtual

Maximun erro in the current itarion.

Reimplemented from GmpFemNonLinearSolver.

◆ maxVal()

bool GmpFemTransientNonLinearSolver::maxVal ( GmVector & array,
const GmVector & array ) const
protectedvirtual

Maximun value of the array.

Maximun value.

Reimplemented from GmpFemNonLinearSolver.

◆ phygroupName()

bool GmpFemTransientNonLinearSolver::phygroupName ( int & kgroup,
QString var ) const
protectedvirtual

Physical group.

Maximun value.

Reimplemented from GmpFemNonLinearSolver.

◆ restore()

void GmpFemTransientNonLinearSolver::restore ( )
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ runStep()

bool GmpFemTransientNonLinearSolver::runStep ( double dt,
double * newt,
bool * conv,
double * err,
int * niter,
bool eval = false )
virtual

Reimplemented from GmpFemNonLinearSolver.

◆ saveInternalForceAttributes()

void GmpFemTransientNonLinearSolver::saveInternalForceAttributes ( GmVector & dv)
protectedvirtual

Save internal force attibutes such as Reaction and Volume flux.

Reimplemented from GmpFemNonLinearSolver.

◆ setElementSets()

void GmpFemTransientNonLinearSolver::setElementSets ( bool Fe,
bool Fi,
bool K,
bool C,
bool Keq )
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ setLoad()

void GmpFemTransientNonLinearSolver::setLoad ( )
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ setState()

void GmpFemTransientNonLinearSolver::setState ( )
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ setTime()

void GmpFemTransientNonLinearSolver::setTime ( )
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ setTransientSystem()

void GmpFemTransientNonLinearSolver::setTransientSystem ( double dt)
protectedvirtual

evaluates transient system

Reimplemented from GmpFemNonLinearSolver.

◆ solveLinearSystem()

bool GmpFemTransientNonLinearSolver::solveLinearSystem ( )
protectedvirtual

Solve the linear system according to the adopted nonlinear scheme.

Reimplemented from GmpFemNonLinearSolver.

◆ stateControlMapDataLoaded()

bool GmpFemTransientNonLinearSolver::stateControlMapDataLoaded ( QVariantMap * map)
protectedvirtual

Method called when the state dump control registered in addStateItemsToGroup() has been loaded.

Reimplemented from GmpFemNonLinearSolver.

◆ stateControlMapDataLoadedStaticSolver()

bool GmpFemTransientNonLinearSolver::stateControlMapDataLoadedStaticSolver ( QVariantMap * map)
protectedvirtual

Virtual method to Load the scalar attributes needed by continuation method.

Reimplemented from GmpFemNonLinearSolver.

◆ stateControlMapDataLoadedTransientSolver()

bool GmpFemTransientNonLinearSolver::stateControlMapDataLoadedTransientSolver ( QVariantMap * map)
protectedvirtual

Virtual method to fill the map with the needed transient solver data.

Reimplemented from GmpFemNonLinearSolver.

◆ stateLoadedCalcDerivedResultsNonLinear()

bool GmpFemTransientNonLinearSolver::stateLoadedCalcDerivedResultsNonLinear ( )
protectedvirtual

Returns the value of the "nonLinearSolver" parameter that will be passed to the calcDerivedResults() call from the standard implementation of stateLoaded()

Reimplemented from GmpFemNonLinearSolver.

◆ stepStandardDc()

bool GmpFemTransientNonLinearSolver::stepStandardDc ( double dt,
double * newt,
bool * conv,
double * err,
int * niter,
bool eval )
protectedvirtual

The transient nonlinear implementation (femNLSolver.transient) This function manages the transient step.

Reimplemented from GmpFemNonLinearSolver.

◆ update()

void GmpFemTransientNonLinearSolver::update ( )
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.

◆ updateResidualForceAndStiffnessMatrix()

GmpFemPhysics::FemResultType GmpFemTransientNonLinearSolver::updateResidualForceAndStiffnessMatrix ( double l)
protectedvirtual

Updates the stiffness matrix.

Updates stiffness matrix for static nonlinear solver.

Reimplemented from GmpFemNonLinearSolver.

◆ velocityError()

bool GmpFemTransientNonLinearSolver::velocityError ( GmVector & er) const
protectedvirtual

Reimplemented from GmpFemNonLinearSolver.


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