Configuring Adams > Applying Advanced Settings > Adams Solver Advanced Settings

Adams Solver Advanced Settings

The following are Adams Solver advanced settings:
 
Variable name:
Variable value:
What it does:
ADAMS_SPARSE_SOLVER_SWITCH_AT
Integer
When the linear system solver is set to "auto" (that is, using the command: LSOLVER/AUTO) this environment variable specifies the number of equations (degrees of freedom) above which Adams will switch from the Calahan solver to the UMF solver. Valid for Adams Solver (C++) only. See the LSOLVER command for details about the UMF solver.
MDI_ADAMS_CONTACT_COR
 
Specifies the corrector to be used for models involving contacts.

Not set: Modified corrector is used

Set to any non-null value: Original corrector is used
Note: INTEGRATOR/CORRECTOR=MODIFIED overrides whatever the value of MDI_ADAMS_CONTACT_COR is. The modified corrector is always invoked with this statement.
MDI_ADAMS_CONTACT_OUT
on/off
Controls the export of intermediate contact events in the data for a contact model. The intermediate data will only be written to *.res file.

On
: Enables intermittent contact output and also the default value.

Off: Disables intermittent contact output.
MDI_ADAMS_SHELL_FILE_PATTERN
 
Exports, as shell files, tessellated geometry representations used during contact. It creates a shell file at the start of the simulation with the naming prefix you specify.
Note: This variable must be set before the simulation begins.
For example:
var set var=test string=(PUTENV("MDI_ADAMS_SHELL_FILE_PATTERN","msc"))
Will result in files named as follows:
msc1.shl
msc2.shl
msc3.shl
MDI_PRINT_UCO_SIZ
True or False
Used to check the size of memory model you are using. If this is set to True then the current memory model size is printed. You can see a confirmation message when Adams Solver starts up, indicating the size of the current memory model. Valid for Adams Solver (FORTRAN) only.
MDI_SOLVER_SELECT
CXX or F77
Specifies the Adams Solver type to use.

CXX - Use Adams Solver (C++)

F77 - Use Adams Solver (FORTRAN)
MSC_ADAMS_CONSTRAINT_DELTA
>0
Specifies the length of I-J marker separation before a warning message is issued.

Joints such as CONVEL, FIXED, HOOKE, REVOLUTE, SPHERICAL and UNIVERSAL, and Jprim ATPOINT should have their I and J markers coincident during model input. Solver will issue a warning message for each Joint/Jprim that exceeds the specified value. This option can be used to disable excessive warnings when marker non-coincidence is expected. During Initial Condition analysis, Solver will attempt to satisfy all constraints to within the IC displacement ERROR. The default value is 1.0e-03 in model length units. Valid for Adams Solver (C++) only.
MSC_ADAMS_CORNER_TREATMENT
> 0
Enables enhanced handling of 3D contact detection in the RAPID Geometry Engine.
In certain situations, such as a box touching a wall and floor at the same time, the contact intersection will wrap around the box. Setting this environment variable will help RAPID handle these situations. This handling is off by default because it can slow down models that do not encounter these situations.
MSC_ADAMS_DISCRETE_GSE_TEMPORAL_ERROR
 
Sets the error threshold for when GSE_update is called. If the difference between the time of the next required call (sample time) to GSE_update and the current simulation time is within this error, then GSE_update will be called at the current simulation time. If it is not set, the system uses 1.0e-6 time units. Making this error very small will cause numerical integration to become unstable. If you model has a GSE with very high frequency discrete states, a better approach (than setting this environment to a smaller value) is to change the time units of the model to milliseconds, or even smaller time units via UCF (see the UNITS statement)
MSC_ADAMS_FLEXCONTACT_PRECISE_PARTIALS
1
Forces the C++ Solver to compute high-precision partial derivatives for Flex Body Contact.

By default, the C++ Solver computes approximate partial derivatives for Flex Body Contact to improve performance. This variable can help models that run poorly. In some special cases, it can even improve performance because accurate partials allow the integrator to take larger time steps. Valid for Adams Solver (C++) only.
MSC_ADAMS_FLEXCONTACT_USE_MODAL_VELOCITY
1
Specifies that the time derivative of the Flex Body modal amplitudes are used in computing the damping for Flex Body Contact.

The default is to not use the modal velocities when computing the damping because the number of states for which partial derivatives must be computed is increased. However, there may be cases where it is advantageous (or even necessary) to include the modal velocities. Valid for Adams Solver (C++) only.
MSC_ADAMS_HHT_
FORCED_JACOBIAN_HMAX_THRESHOLD
double
Enforces Adams C++ Solver to force the Jacobian evaluation every output step in HHT (PAT=F) if DTOUT or HMAX is smaller than the set threshold. The default value of this threshold is 5.0E-5. Users can set the value to 0 to turn off this feature.
Note: This feature is introduced in Adams 2021 to improve the accuracy of HHT for simulations with DTOUT or HMAX <= 5.0 E-5. Users should use this environment variable if the HHT performance is adversely affected due to this feature for simulations with DTOUT or HMAX <= 5.0 E-5.
MSC_ADAMS_HHT_
FORCED_JACOBIAN_STEPS_FOR_MAXFLEX
Integer (n)
It enforces Adams Solver (C++) to force Jacobian evaluation every n steps in HHT (PAT=F) for the Maxflex models.

The default value is 10 steps
MSC_ADAMS_LARGE_MODEL
 
1
If set, the C++ Solver will do two things to better deal with large models that require more memory to avoid running out of physical memory:
1. Use smaller working arrays during the linear algebra, and
2. Maintain only one equation set during session. All equation sets not being used are deleted and recreated later on if needed.
For example, for a simulation that does a STATIC analysis followed by a DYNAMIC analysis, during normal operation (when this env variable is not set) both STATIC and DYNAMIC equation sets are kept alive during the solver session. If this env variable is set, the C++ solver will delete the STATIC equation set when DYNAMIC starts. If STATIC is required later on, the C++ solver will recreate the STATIC equation set and delete the DYNAMIC set.
MSC_ADAMS_LINEAR_FILTER_STATE_MATRICES
double > 0.0
Forces the Adams C++ Solver to filter all entries of the linearization matrix. All entries with an absolute value smaller than the set value, are set to zero. Filtering the linearization matrix may be helpful for ill-conditioned linearization matrices.
MSC_ADAMS_NO_INFO_ON_SHELL
True or False
It will turn off all the message on shell. However, Adams will still write the message into the .msg file. By doing so, models with sensors trigger at each steps and models with debug/eprint on will run much faster than before.
MSC_ADAMS_NODE_PENETRATION_THRESHOLD
>0
Specifies the maximum penetration (in millimeters) of a node in Flex Body Contact.

Setting this variable overrides the default value (which is proportional to the intersection volume) used by the C++ Solver. This variable is most useful with open shell geometry, where it is difficult for the Solver to compute an accurate intersection volume. Valid for Adams Solver (C++) only.
MSC_ADAMS_NODE_THRESHOLD
>0
Specifies the minimum number of nodes that can be in a single incident for Flex Body Contact.

Setting this variable overrides the default value (which is three) used by the C++ Solver. If the number of nodes found is less than the value set, then no contact force will be generated for that incident. Therefore, this variable should be used with caution. This variable is most useful in situations where it is known in advance that there will be fewer than three nodes in a contact incident. Valid for Adams Solver (C++) only.
MSC_ADAMS_NOLIST_SERIAL
 
By default, at the start of a dynamic simulation, when using the NTHREADS option for parallel execution, Adams Solver (C++) prints a list of all modeling elements that are not thread safe. The said list shows all elements that will be evaluated serially. Set this environment variable to avoid printing the list. Valid for Adams Solver (C++) only.
MSC_ADAMS_NUM_STICTION_INCIDENTS
Integer
This environment variable allows Adams C++ Solver to add additional Contact points (incidents) when Contact Stiction is enabled. Additional points are needed when Contact intersections cover a large area (for example, a Box on an inclined Plane). The additional Contact points distribute the Contact force over the area, allowing it to act like pressure, which is more physical. When the Contact force is concentrated at a single point in a large area, it is difficult for Stiction to find a state of dynamic equilibrium with zero relative velocity between bodies. This problem does not affect Contact with Coulomb Friction because a dynamic state of equilibrium with zero velocity is not possible.

For situations where the Contact area is small (such as a rolling sphere or cylinder), or where the geometry itself provides multiple Contact incidents, it is not necessary to change the environment variable from its default value.

The default value of the environment variable is 1. When it is set to n, the Solver can add up n*n Contact points. The Solver attempts to distribute the additional points uniformly over the intersection area without placing them too close together. This means the number of additional points can vary during a simulation if there are large changes in area. Setting the environment variable to large values (greater than 10) can significantly increase simulation time and increase the size of results files (if Contact Incident Output is enabled).

This environment variable (and Stiction) is valid for Adams C++ Solver only.
MSC_ADAMS_REAL_TIME
The value for this environment variable is the same as the value you may enter for the Adams FMU parameter msc_adams_realtime. See section Options in the msc_adams_realtime parameter.
Configures the real-time simulation allowing changes in the default behavior, modify integration parameters, control output generation and so on. See section Options in the msc_adams_realtime parameter.
ADAMS_THREAD_AFFINITY_SET0
String values that contain numbers (indicating cores/processor)
Specifies the processor affinity for set0 threads as comma separated individual values or a range. For example, if five threads are to run on cores 1,2,3,5,7 this can be specified as 1-3,5,7. See section Thread Affinity Settings in Adams for more information.
ADAMS_THREAD_AFFINITY_SET1
String values that contain numbers (indicating cores/processors) separated by - or ,
Specifies the processor affinity for set1 threads as comma separated individual values or a range. Note that this parameter is currently not being utilized by Adams Solver in real time.
MSC_ADAMS_SENSOR_SLEEP_COUNT
Integer bigger than zero
By default, Sensors sleep 3 time steps after triggering. During the sleep period, Adams Solver C++ will not query the Sensor that just triggered. However, in real time simulations with mini maneuvers shorter than 3 times the current simulation step, Adams Sensor fails to detect the end of the mini maneuvers. Setting the sleep count to 1 will force the Sensor to be queried at every time step.
MSC_ADAMS_SERIAL_CALAHAN
 
By default, Adams Solver (C++) uses a second generation parallel version of the Calahan linear algebra solver using pthreads technology. This helps large models (approx. 6000 equations or more) or models with dense Jacobians such models with flexible bodies and modal forces.
Setting this environment variable enforces Adams Solver (C++) to use a serial version of the linear algebra code, but may considerably slowdown the solver.
MSC_ADAMS_SOLVER_AXAYAZ_INIT
P or N
If the value of AX or AY or AZ measure is close to a bifurcation point, that is, 180 degrees (+PI) or -180 degrees (-PI), the value will be set to +PI or -PI depending on the variable value. (P Positive and N Negative)
MSC_ADAMS_SOLVER_FLEXBODY_BOOST_THRESHOLD
Integer bigger than zero
Changes the default threshold value that triggers the use of a flexible body boost performance code. By default the threshold is 40. See MSC_ADAMS_SOLVER_NO_FLEXBODY_BOOST to disable the usage of the boost performance code.
MSC_ADAMS_SOLVER_INTERPOLATE_ADAPTIVE
1
Forces the solver to use an experimental interpolation technique. Using this option, the Integrator Output Step is simply a reference. The integrator may decide to skip output blocks if the results are smooth. Output steps are not equally spaced. This option should not be used if the model has the discrete GSEs. Speed improvements can be up to a factor of 20 for some models.

Available for GSTIF and HHT.
MSC_ADAMS_SOLVER_NO_FLEXBODY_BOOST
 
By default, when a flexible body has more active modes than a default threshold value of 40, a special code is used to boost performance of the simulations. Setting this environment variable will disable the use of the boost performance code. See MSC_ADAMS_SOLVER_FLEXBODY_BOOST_THRESHOLD to change the default threshold value.
MSC_ADAMS_SOLVER_NODAMP_DIFF
 
When using both the EIGENSOL and NODAMPIN options in a linearization analysis, the velocity terms in the linearization matrix are flushed to zero by default. However, if there are coupling terms between velocity states and differential elements, that coupling is not considered damping and it is left untouched. Setting this environment variable enforces Adams Solver (C++) to flush the coupling terms between velocity and differential states to zero. This option was created to match the behavior of the Adams Solver (FORTRAN).
MSC_ADAMS_SOLVER_USE_DIFFS
 
Enforce Adams solver to use additional DIFF objects when processing holonomic velocity and acceleration constraints (velocity/acceleration MOTION) which is what F77 does. Setting this variable will help when velocity or acceleration constraints introduce high frequencies. However, you will lose the ability to perform a kinematic analysis on a zero degree-of-freedom model containing motions with velocity/acceleration arguments as described in the C++ motion statement.
MSC_ADAMS_SENSOR_MESSAGES
ON or OFF, ALL or a list of Adams IDs (id1, id2,…, id3-id4,…)
SENSORs in the model may generate large amounts of messages. To disable or enable messages from SENSORs set the value of this environment variable to words ON, OFF, ALL and a list of Adams IDs. For example:
MSC_ADAMS_SENSOR_MESSAGES=OFF, 4, 7, 11-20
will disable sending messages from SENSORs with Adams IDs provided in the list.
MSC_ADAMS_SENSOR_MESSAGES=OFF, ALL
will disable sending messages from all SENSORs in the model.
MSC_ADAMS_SENSOR_MESSAGES=ON, 3
will enable sending messages from SENSOR/3.
MSC_ADAMS_USE_MOMENTA
1
Enables the use of Angular Momenta states for Rigid Bodies. By default Rigid Bodies have 12 states (X, Y, Z, PSI, THETA, PHI, VX, VY, VZ, WX, WY, WZ). The angular momenta states are angular momentum about X, Y and Z axes. These additional states can benefit Rigid Bodies that undergo rapid rotation about multiple axes. Valid for Adams Solver (C++) only.
MSC_ADAMS_USE_PARDISO_STATICS
Optional integer bigger than zero
Enforce Adams solver to use the Intel MKL Pardiso linear solver during statics simulations only. The optional value is the number of iterative refinements used when solving the linear set of equations. The default value is zero (no iterative refinements).
MSC_ADAMS_USE_WARNING_ON_JOINT_IC
1
Force Adams Solver (C++) to issue WARNING instead ERROR when the initial rotational displacement of a revolute or cylindrical joint (as specified by the IC or the ICROT argument on the JOINT statement or by a MOTION statement) varies greater than 60 degrees from the initial configuration of the joint as indicated by the input positions of the two parts constituting the joint.
MSC_ADAMS_USER_PARTIAL_METHOD
ANALYTICAL, NUMERICAL or ADAPTIVE
Specifies which method the C++ Solver uses to compute partial derivatives for user-written subroutines.

User-written subroutines establish dependencies on Solver states by calling SYSFNC and/or SYSARY. The NUMERICAL method computes partial derivatives by directly perturbing the states and evaluating the user subroutine with DFLAG=true. The ANALYTICAL method perturbs the measures (for example, DISP, VM, VX and so on) that the user subroutine depends on, evaluates the user subroutine, and then uses the chain rule to compute the partial derivative. This usually gives superior partials. The ADAPTIVE method (which is the default) uses an internal algorithm to decide whether the ANALYTICAL or NUMERICAL method is more efficient for a given subroutine. Valid for Adams Solver (C++) only.
MSC_IFORT_DIR and MSC_ICC_DIR
 
Adams assumes the Intel compilers are installed under /opt/intel. Use this variables to tell Adams the compilers location when they are installed in a non-standard location.
When set Adams looks for:
ifort under $MSC_IFORT_DIR/bin
icc under $MSC_ICC_DIR/bin.
Note: These environment variables only applies for the Linux platforms.
MSC_RAPID_SKIP_SHELL_VERIFICATION
1
Disables checking shell geometry for holes (water tight check).

Contact geometry read from shell files (.shl) is checked for holes. This check can be time consuming, if the number of triangles is large (more than 100000). For cases where it is known that shell geometry does not contain holes this variable can be used to disable checking, which improves performance.
PRINT_IC_RESULTS
ALWAYS or NEVER
Enables the output of IC results in .msg file for dynamic analysis. Valid for Adams Solver (C++) only.
Note: The IC results are not written when using a kinematic analysis, therefore you should use SIM/DYNAMIC instead of SIM/TRANSIENT.
MSC_ADAMS_ROTATION_VECTOR_SINGULARITY_TOL
0.0<double<180
The rotation vector used by FE_PART needs to be rescaled when the norm of the rotation vector is near 2kπ, where k is a nonzero integer to avoid singularity. This environment variable is used to specify the threshold used to trigger the singularity handling process. The unit of this double value is in degree.
If the environment variable is not set, the default value for this feature is 50 degrees, and its implementation can enhance the results for FE_PART.
MSC_ADAMS_HHT_SYMBOLIC_REFACTORIZATION_AT_EULER_SINGULARITY
 
Enforces Adams C++ Solver to do a symbolic re-factorization of the Jacobian matrix in HHT integrator whenever Euler singularity is encountered.
The symbolic re-factorization selects new pivots in the LU decomposition. If the environment variable is not set, the LU decomposition will continue to use the old pivots. The symbolic re-factorization is computationally intensive, so the use of this environment variable may affect the solver performance.