The SolProc module is designed to manage the execution of linear and non-linear time evolution, static (steady-state) or transient analysis. The methods associated with a SolProc object are the following.
*vfs_SolProcBegin - create an instance of a SolProc object vfs_SolProcEnd - destroy an instance of a SolProc object vfs_SolProcError - return SolProc object error flag
vfs_SolProcDef - define type of analysis Inq - inquire type of analysis vfs_SolProcExecute - execute next procedure and return action vfs_SolProcGetDouble - query for real execution information vfs_SolProcGetInteger - query for integer execution information vfs_SolProcGetSysVector - query for solution vectors vfs_SolProcInitTimeStep - set initial time step vfs_SolProcSetComputeError - flag that an error has occurred vfs_SolProcSetFactorized - flag whether factorization has taken place vfs_SolProcSetStrategy - set strategy parameters and final time vfs_SolProcSetParami - set integer procedure parameters vfs_SolProcSetParamd - set double procedure parameters vfs_SolProcSetTemp - flag equations with temporary restraints
SOLPROC_MINTIMESTEP should be set according to the user's knowledge of the physical parameters defining the problem, and by limiting the maximum number of time steps N to be computed, assuming a worst-case scenario, with N = T / dt_min, where T is the total time and dt_min the minimum time step. The analysis aborts if it cannot achieve convergence at the minimum time step.
Likewise, SOLPROC_MAXTIMESTEP should also be set based on the user's knowledge of the physical parameters defining the problem. In transient problems this parameter is often shadowed by the half tolerance that controls the time integration error.
Various strategy parameters to control nonlinear analysis are set using vfs_SolProcSetParami and vfs_SolProcSetParamd. Strategy parameters include convergence tolerances, maximum number of iterations, etc.
For transient analysis, a predictor multi-corrector algorithm is employed. For structural analysis, the predictor is nothing but an initial guess at the displacements, velocities, and accelerations. These are consistent with two available methodologies, which can be set with vfs_SolProcSetParami: either the displacements or the accelerations at the current time step are repeated on the next time step. The remaining quantities are adjusted to maintain consistency with the time integration scheme utilized. Likewise, in thermal analysis the predictor maintains either the same temperature, or the same temperature rate.
The time integration procedure allows for both increasing and reducing the time step. Two conditions may lead to a reduction of the time step: failure to converge and/or inaccuracy at the half step during a transient analysis. In either case the time step is divided by 2. Alternatively, if convergence is achieved quickly and the half step convergence is optimal, the time step is increased by multiplying it by a factor of 1.25 for structural problems and 2 for thermal problems.
The actual solution procedure is initiated by calling vfs_SolProcDef. The SolProc module at this time will initialize internal counters, solution vectors, etc. The user then enters a continuous loop in which the function vfs_SolProcExecute is called repeatedly. This function returns an "action" which the user must perform before calling vfs_SolProcExecute again. This loop terminates when the action returned indicates that the solution procedure is complete. In order to carry out an action indicated by the SolProc module, the user will need to query the SolProc module for one or more SysVector objects using vfs_SolProcGetSysVector which contain solution-related vectors which must be used or updated in some way. The functions vfs_SolProcGetDouble and vfs_SolProcGetInteger are used to return additional information which may be required.
User actions generally include operations upon system level matrices such as factorizing a matrix, forming a matrix based upon a particular solution vector, etc. The SolProc module performs most of the system vector related operations. One notable exception is the updating of the total global dof solution vector with a solution increment. This operation, for structural analysis involving large rotations or other reasons, may involve an operation more complicated than simple addition, and must be performed by the user outside of the SolProc module.
At any time after vfs_SolProcExecute has been called at least once, you can query for the current time with vfs_SolProcGetDouble and request the value of SOLPROC_TIME.
The following actions are used.
*vfs_SolProcBegin - create an instance of a SolProc object
vfs_SolProc *vfs_SolProcBegin ()
None
Destroy an instance of a SolProc object using
void vfs_SolProcEnd (vfs_SolProc *solproc )
Return the current value of a SolProc object error flag using
Vint vfs_SolProcError (vfs_SolProc *solproc )
vfs_SolProcDef - define type of analysis
void vfs_SolProcDef (vfs_SolProc *solproc, Vint atype, Vint neq, Vint nre)
solproc Pointer to SolProc object. atype Analysis type =SYS_ANALYSIS_STRUCTURAL Structural analysis =SYS_ANALYSIS_THERMAL Thermal analysis neq Number of global dof nre Number of reaction dof
None
Inquire of defined neq, nre, and atype as output arguments using
void vfs_SolProcInq (vfs_SolProc *solproc, Vint *atype, Vint *neq, Vint *nre)
vfs_SolProcExecute - execute next procedure and return action
void vfs_SolProcExecute (vfs_SolProc *solproc, Vint *action)
solproc Pointer to SolProc object.
action Execution action =VFS_ACTION_COMPLETE Final procedure step complete =VFS_ACTION_INCOMPLETE Unable to reach final solution step =VFS_ACTION_FACTOR Factorize current matrix =VFS_ACTION_SOLVE Solve given load vector =VFS_ACTION_STIFF Form linear matrix =VFS_ACTION_REACT Form reaction given solution vector =VFS_ACTION_REACTSTIFF Form reaction and matrix =VFS_ACTION_ENDSTEP Solution step complete =VFS_ACTION_UPDATE Update solution vector =VFS_ACTION_PREDICTOR Set boundary conditions =VFS_ACTION_FACTORMASS Form and factor mass/capacitance matrix =VFS_ACTION_SOLVEMASS Solve for initial acceleration/temperature rate =VFS_ACTION_INERTIA Compute inertia contribution
vfs_SolProcGetInteger - get running SolProc parameters
void vfs_SolProcGetInteger (vfs_SolProc *solproc, Vint type, Vint *iparam) void vfs_SolProcGetDouble (vfs_SolProc *solproc, Vint type, Vdouble *dparam)
solproc Pointer to SolProc object. type Parameter type =SOLPROC_NEWREACT Flag for new computed reaction norm =SOLPROC_NUMITER Number of iterations performed =SOLPROC_STEPID The current step id =SOLPROC_STEPLAST Query whether this is the last step =SOLPROC_REACTNORM Final reaction norm =SOLPROC_SOLNORM Final solution norm =SOLPROC_TIME Current analysis time =SOLPROC_DAMPFACTOR Factor that multiplies damping matrix =SOLPROC_MASSFACTOR Factor that multiplies mass matrix =SOLPROC_STIFFFLAG Flag with reason for stiffness reform =SOLPROC_LINESEARCH_ITER Number of line search iterations
iparam integer value dparam double precision value
The integer parameter SOLPROC_STEPID indicates the current step number.
The integer parameter SOLPROC_STEPLAST returns either SYS_ON or SYS_OFF depending on whether the end of the analysis has been reached.
The double precision parameter SOLPROC_REACTNORM returns the final reaction norm once convergence at a time step has been achieved.
The double precision parameter SOLPROC_SOLNORM returns the final solution increment norm once convergence at a time step has been achieved.
The double precision parameter SOLPROC_TIME returns the time at the end of the current time step.
The double precision parameter SOLPROC_DAMPFACTOR returns the factor that multiplies the damping matrix during a structural analysis when forming the matrix to be factored. It is also the factor that multiplies the capacitance matrix during a thermal analysis. The double precision parameter SOLPROC_MASSFACTOR returns the factor that multiplies the mass matrix during a structural analysis when forming the matrix to be factored.
The integer parameter SOLPROC_STIFFFLAG returns an indicator of what caused SolProc to request a new stiffness. Possible return values are VFS_STIFF_LS_DIVERGE, issued when the internal line search algorithm diverges; VFS_STIFF_LS_MAXITER, issued when the maximum number of line search iterations is reached; VFS_STIFF_LS_MAXVAL, when the upper bound for the line search is reached; VFS_STIFF_LS_MINVAL, when the lower bound for the line search is reached; VFS_STIFF_LS_STALL, when the line search algorithm is stalled; VFS_STIFF_SPROP_NONLINEAR, when vfs_SolProcSetStrategy is called that changes the linear/nonlinear toggle; VFS_STIFF_SPROP_ANALYSIS, when vfs_SolProcSetStrategy is called that changes the analysis type; VFS_STIFF_START, if a stiffness has never been formed before; VFS_STIFF_NEWDT, when the time step changes; VFS_STIFF_NEWBC, whenever vfs_SolProcSetTemp is called; VFS_STIFF_REFORM_FREQ, when the number of time steps using the same stiffness reaches the value specified in vfs_SolProcSetParami with a type of SOLPROC_LHS_STEPFREQ; and VFS_STIFF_HALFTOL, when the transient half step threshold is reached. This parameter is only available whenever the actions are either VFS_ACTION_STIFF or VFS_ACTION_REACTSTIFF.
vfs_SolProcGetSysVector - get a system vector for processing
void vfs_SolProcGetSysVector (vfs_SolProc *solproc, Vint type, vfs_SysVector **sysvector)
solproc Pointer to SolProc object. type Parameter type =VFS_VECTOR_REACT Reaction/load vector =VFS_VECTOR_U0 Displacement at beginning of step =VFS_VECTOR_U1 Displacement at end of step =VFS_VECTOR_V0 Velocity at beginning of step =VFS_VECTOR_V1 Velocity at end of step =VFS_VECTOR_A0 Acceleration at beginning of step =VFS_VECTOR_A1 Acceleration at end of step =VFS_VECTOR_INC Displacement increment =VFS_VECTOR_DELTAINC Linear system solution =VFS_VECTOR_INERTIA Inertia vector =VFS_VECTOR_BCREACT Reaction/load vector on BC dofs
sysvector requested vector
vfs_SolProcSetParami - set integer procedure parameters
void vfs_SolProcSetParami (vfs_SolProc *solproc, Vint type, Vint iparam)
solproc Pointer to SolProc object. type Parameter type =SOLPROC_FIXEDTIMESTEP Toggle to run with fixed time step =SOLPROC_LHS_ITERFREQ Matrix nonlinear reform frequency =SOLPROC_LHS_STEPFREQ Matrix time step reform frequency =SOLPROC_MAXITER Maximum number of nonlinear iterations =SOLPROC_MINITER Minimum number of nonlinear iterations =SOLPROC_REACTCONVFLAG Toggle to check convergence on reaction =SOLPROC_SOLCONVFLAG Toggle to check convergence on solution =SOLPROC_PREDICTOR Set predictor type =SOLPROC_LINESEARCH_FLAG Toggle to use line search =SOLPROC_LINESEARCH_TYPE Type of line search method to use =SOLPROC_LINESEARCH_MAXITER Maximum number of line search iterations iparam Specifies the integer value that type will be set to. =SYS_ON Turn parameter on =SYS_OFF Turn parameter off =SOLPROC_SAME_DISP Set structural predictor to same displacement =SOLPROC_SAME_ACCEL Set structural predictor to same acceleration =SOLPROC_SAME_TEMP Set thermal predictor to same temperature =SOLPROC_SAME_TEMPRATE Set thermal predictor to same temperature rate =SOLPROC_LINESEARCH_LINEAR Set linear line search type =SOLPROC_LINESEARCH_BISECTION Set bisection line search type
None
The parameter SOLPROC_LHS_ITERFREQ indicates the nonlinear iteration frequency with which the stiffness matrix is forced to be reformed, regardless of other convergence criteria. Defaults to 0, which forces the matrix to be reformed based only on failure to converge or time step changes.
The parameter SOLPROC_LHS_STEPFREQ indicates the time step frequency with which the stiffness matrix is forced to be reformed, regardless of other convergence criteria. Defaults to 0, which forces the matrix to be reformed based only on failure to converge or time step changes.
The parameter SOLPROC_MAXITER indicates the maximum number of nonlinear iterations that can be performed within a time step. Failure to converge within this limit will trigger actions such as time step reduction. Defaults to 10.
The parameter SOLPROC_REACTCONVFLAG indicates whether convergence is based on the magnitude of the reaction forces. Defaults to SYS_ON.
The parameter SOLPROC_SOLCONVFLAG indicates whether convergence is based on the change in the solution from nonlinear iteration to nonlinear iteration. Defaults to SYS_ON.
The parameter SOLPROC_PREDICTOR defines the methodology to be used to consistently extrapolate the current solution to the next step. Use either SOLPROC_SAME_DISP or SOLPROC_SAME_ACCEL for structural analysis, and SOLPROC_SAME_TEMP or SOLPROC_SAME_TEMPRATE for thermal analysis. Defaults to SOLPROC_SAME_ACCEL for structural analysis and SOLPROC_SAME_TEMPRATE for thermal analysis.
The parameter SOLPROC_LINESEARCH_FLAG toggles between using an internal line search algorithm. Defaults to SYS_OFF.
The parameter SOLPROC_LINESEARCH_TYPE specifies the type of line search algorithm to use, if enabled by SOLPROC_LINESEARCH_FLAG. For a linear algorithm use SOLPROC_LINESEARCH_LINEAR; for a bisection algorithm use SOLPROC_LINESEARCH_BISECTION. Defaults to SOLPROC_LINESEARCH_LINEAR.
The parameter SOLPROC_LINESEARCH_MAXITER specifies the maximum number of line search iterations. Defaults to 10.
vfs_SolProcSetParamd - set double procedure parameters
void vfs_SolProcSetParamd (vfs_SolProc *solproc, Vint type, Vdouble dparam)
solproc Pointer to SolProc object. type Parameter type =SOLPROC_ETOL Tolerance for energy convergence =SOLPROC_ENERMINVAL Minimum residual for energy check =SOLPROC_FTOL Tolerance for reaction convergence =SOLPROC_REACTMINVAL Minimum residual for convergence check =SOLPROC_UTOL Tolerance for solution convergence =SOLPROC_SOLMINVAL Minimum residual for solution check =SOLPROC_BEGINTIME Time at beginning of analysis =SOLPROC_MINTIMESTEP Minimum time step =SOLPROC_MAXTIMESTEP Maximum time step =SOLPROC_HHTALPHA Damping for structural analysis =SOLPROC_HALFTOL Half-step tolerance =SOLPROC_LINESEARCH_MAXSEARCH Maximum line search value =SOLPROC_LINESEARCH_MINSEARCH Minimum line search value iparam Specifies the integer value that type will be set to.
None
The parameter SOLPROC_UTOL defines the tolerance to be used when checking convergence based on solution changes. Defaults to 1.0e-03.
The parameter SOLPROC_REACTMINVAL defines a reaction force below which the reactions are assumed converged. Defaults to 1.0e-12.
The parameter SOLPROC_SOLMINVAL defines a solution change below which the solution is assumed converged. Defaults to 1.0e-12.
The parameter SOLPROC_BEGINTIME defines the time the analysis is to start. It can only be set before calling vfs_SolProcExecute. Defaults to 0.0.
The parameter SOLPROC_ENDTIME defines the time the analysis is to end. Defaults to 1.0.
The parameter SOLPROC_MINTIMESTEP defines a minimum time step to increment the analysis. Defaults to 0.0.
The parameter SOLPROC_MAXTIMESTEP defines a maximum time step to increment the analysis. Defaults to 0.0, which in turns forces SolProc to ignore this parameter.
SOLPROC_MINTIMESTEP and SOLPROC_MAXTIMESTEP are ignored when the integer parameter SOLPROC_FIXEDTIMESTEP is set to SYS_ON. The time step value specified in vfs_SolProcInitTimeStep is then used to run the entire analysis.
The parameter SOLPROC_HALFTOL is a tolerance that controls the variation of the solution within a time step. It controls transient problems so that the time step is kept under control so as to properly capture transient phenomena. Defaults to 0.01.
The parameters SOLPROC_LINESEARCH_MAXSEARCH and SOLPROC_LINESEARCH_MINSEARCH control the maximum and minimum line search values. Default to 4. and 0.001, respectively.
vfs_SolProcInitTimeStep - set the initial time step
void vfs_SolProcInitTimeStep (vfs_SolProc *solproc, Vdouble dt)
solproc Pointer to SolProc object. dt Initial time step to be used
NONE
vfs_SolProcSetComputeError - flag that an error has occurred.
void vfs_SolProcSetComputeError (vfs_SolProc *solproc, Vint *action)
solproc Pointer to SolProc object.
action Next action to be performed by user
NONE
vfs_SolProcSetFactorized - flag that a factorization exists or does not exist
void vfs_SolProcSetFactorized (vfs_SolProc *solproc, Vint factorized)
solproc Pointer to SolProc object.
factorized Toggle for factorization flag =SYS_ON Matrix factorized =SYS_OFF Matrix not factorized
NONE
vfs_SolProcSetTemp - indicate which equations have temporary restraints on.
void vfs_SolProcSetTemp (vfs_SolProc *solproc, Vint ntemp, Vint temp[])
solproc Pointer to SolProc object. ntemp Number of temporary restraints temp List of temporary restraints
NONE
NONE
vfs_SolProcSetStrategy - sets major strategy parameters for subsequent analysis
void vfs_SolProcSetStrategy (vfs_SolProc *solproc, Vint sproptype, Vint type, Vdouble endtime)
solproc Pointer to SolProc object. sproptype Solution property type =SYS_SOL_STATIC Static analysis =SYS_SOL_TRANSIENT Transient or dynamic analysis type Linear or nonlinear toggle =SOLPROC_LINEAR Linear analysis =SOLPROC_NONLINEAR Nonlinear analysis endtime The final analysis time
NONE
SYS_ERROR_ENUM is generated if either sproptype or type have invalid values. SYS_ERROR_VALUE is generated if endtime is not positive.SYS_ERROR_OPERATION is generated if SolProcDef has not been called.