ADAMS/Solver

 

What's New             

New functionality and features have been added to both ADAMS/Solver (C++) and ADAMS/Solver (FORTRAN). To help you identify the changes, this section is divided into three categories: both solvers, C++ only, and FORTRAN only.

What's New for both ADAMS/Solver (C++) and
ADAMS/Solver (FORTRAN)

Speed improvement for 3D solid-to-solid contact (both solvers)

Contact between tessellated 3D solids is now the default. All 3D solid geometry (with the exception of sphere) is automatically tessellated using a very fine mesh. Contact between solid geometries is now treated as contact between a pair of meshes. This is significantly easier and faster than calculating exact contact between two arbitrary geometries. Consequently, contact between 3D geometries is now significantly faster. In our testing, we have seen speed increases ranging from a factor of 1.5 to 150.

Contact between tessellated geometry does not use the Parasolid geometry engine, and therefore avoids many of the software errors associated with deficiencies in Parasolid. Contact location and normal calculations are more robust in this release.

The PREFERENCES statement allows you to specify the mesh refinement with the CONTACT_FACETING_TOLERANCE argument. You can use the CONTACT_GEOMETRY_LIBRARY argument to revert back to the Parasolid engine.

Experimental features include:

  • Analytical Solids
    The geometry engine is not used to find the contact point in certain cases involving contact with spheres; no tesselation is required. See Knowledge Base Article 10534 for details.

  • Contact Mesh Visualization
    Visualization of the tessellated geometry can be achieved by setting an environment variable, MDI_ADAMS_SHELL_FILE_PATTERN, that causes .shl files to be exported at the start of a simulation. See Knowledge Base Article 10495 for details.

  • Shell-to-Shell Contact
    Support of shell files for EXTERNAL geometry makes shell-to-shell contact possible in ADAMS/Solver. However, there currently is no support for this in ADAMS/View. This capability is useful when your geometry is complex or comes from a CAD system that doesn't support the Parasolid file format. The shell files can be in either stereolithography (.stl) or shell (.shl) format and must meet two criteria: 1) comprised of triangles only (no quadrilaterals allowed), and 2) are closed (that is, defining an enclosed volume). For an example see Knowledge Base Article 10530.

  • Contact Trace
    You can trace out the path of a contact in the animation window if you set the MDI_AVIEW_EXPERIMENTAL environment variable. See the Knowledge Base Article 10524 for details.

Contact between lists of geometry (both solvers)

You can specify contact between a list of geometries on one body and another list on a second body (for example, IGEOM=1, 3, 5 and JGEOM = 2, 16). You no longer need to have several individual CONTACT statements to model multiple contacts between two bodies. This feature works for both 2D and 3D geometries and has the effect of making the modeling simpler and more intuitive. An unexpected benefit is that simulations are often faster when multiple CONTACT statements are replaced with a single CONTACT statement.

Alternatively, your complex geometries may now be disassembled into a set of simpler geometries. This often speeds up the contact detection and can also make it more accurate and robust.

Broader availability of contact incident data (both solvers)

Contact incidents may be postprocessed in more detail. Contact incident data (such as detailed information about the kinematics and kinetics at each of the contact points) is now stored as part of the simulation results when using the .xrf format (XML results file). These results can be plotted in ADAMS/View. Contact kinematics include the following data for each contact incident:

  • Location of the contact point on each body
  • Normal and frictional force vectors
  • Friction coefficient, slip deformation, and slip velocity
  • Penetration depth and velocity
You can control how the contact incidents are collated into tracks. See the Knowledge Base Article 10523 for details.

Polylines supported in CONTACT (both solvers)

The Polyline geometry type in ADAMS/View is now recognized as a Contact_Curve and, as such, can be picked off the screen and used for curve-based contact. This polyline is then represented as an ADAMS/Solver CURVE with ORDER=2, allowing sharp corners in geometry to be more accurately modeled. Polyline-based contacts could not be modeled in this fashion in the previous releases.

EVALUATE keyword for SENSOR Statement (both solvers)

The SENSOR element now has an additional keyword, EVALUATE, which takes a function expression as its argument. There is an associated measure, SENVAL(senid), in the expression language.

The purpose of this pair is that whenever the sensor triggers, it evaluates the EVALUATE expression and the resulting value is the value of SENVAL(senid) until the next time the sensor triggers.

Example:

SENSOR/1, FUNCTION = TIME\
, VALUE=5, EQ, EVALUATE = DY(3,2)

VARIABLE/4, FUNCTION = SENVAL(1)

This is an example of how you could store a computed value into a variable at time sensed during solution. With this sensor, when TIME equals 5, ADAMS/Solver uses the DY function to measure the distance between MAR/3 and MAR/2 and stores that distance value in VARIABLE/4.

Higher order curve fitting (both solvers)

Higher order curve fitting is now possible with the CURVE statement. The CURVE statement allows for higher order B-spline curve fitting of CURVE_POINTS through the new IORDER= argument. In the past, CURVE used a fourth order tension
B-Spline. The new method uses the Parasolid B-spline and defaults to fourth order. A higher order fit is useful in producing smoother accelerations when the CURVE is used with PTCV or CVCV constraints.

Linux operating system support (both solvers)

ADAMS/Solver has been ported to the Linux operating system for the 2003 release; both the ADAMS/Solver (C++) and ADAMS/Solver (FORTRAN) solvers are supported. You can now run your stand-alone MSC.ADAMS solver jobs on a Linux machine.

Please see the Hardware and Software specifications, provided with your distribution and available on the MSC.Software Web site, for further details.

What's New for ADAMS/Solver (C++)
How to select ADAMS/Solver (C++)

You use an environmental variable, MDI_SOLVER_SELECT, to choose the solver. If you don’t specify the solver you want, ADAMS/Solver (FORTRAN) is automatically used.

When you select ADAMS/Solver (C++), a checking function is invoked to see if it can handle the model (.adm file) being analyzed. If ADAMS/Solver (C++) cannot handle the model, control is automatically passed to ADAMS/Solver (FORTRAN). When an unsupported command (in the .acf file) is encountered, ADAMS/Solver (C++) issues an error message and subsequently halts the simulation.

The following steps show how specify the environment variable for UNIX and Windows.

To select ADAMS/Solver (C++) on UNIX, do one of the following:

  • In the MSC.ADAMS Toolbar, change the Solver Select setting to C++.

  • Set the following environment variable using the appropriate shell commands for your version of UNIX:

         Set MDI_SOLVER_SELECT to CXX.


To select ADAMS/Solver (C++) on Windows:

  1. From the Start menu, point to Settings, and then select Control Panel.

  2. In the Control Panel dialog box, select the System icon.

  3. In the System Properties dialog box, select the Advanced tab.

  4. In the Advanced tab container, select Environment Variables.

  5. In the Environment Variables dialog box, create a new user variable as follows:

         Variable Name = MDI_SOLVER_SELECT
         Variable Value = CXX (for ADAMS/Solver (C++))


To specify ADAMS/Solver (C++) in ADAMS/View:

  1. From the Settings menu, point to Solver, and select
    Solver Executable.

  2. Set Choice to C++.

    This executes the command simulation set choice = cplusplus.


To specify ADAMS/Solver (C++) in an ADAMS/Solver .acf file:

  • Use the PREFERENCES/SOLVER=CXX command.

    This is an undocumented feature and additional details can be found in the Knowledge Base Article 10431.

GCON Generalized CONSTRAINT statement (C++ only)

A new, expression-based constraint element, GCON, is available in the 2003 release. Nonstandard, user-defined constraints may be defined right inside the dataset as:

GCON/id, [I=id,] fun=expression

User-defined constraints may be holonomic (defined in terms of displacements only), or non-holonomic (linearly depending on velocities).

User-defined constraints are allowed to also depend on VARIABLES, provided the VARIABLES only depend on time, positions, and velocities. This was not possible in the past.

Note: Use of the GCON statement is limited to the .adm file. Currently there is no ADAMS/View graphical user interface or command language support associated with this statement. However, models and simulation results can be imported into ADAMS/View for visualization purposes.

Vector operators added to expression language (C++ only)

This release marks the introduction of a new concept in the expression language of ADAMS/Solver. The function expression language has been enhanced with several new functions and operators. Function expressions can now use vector operations, as long as the final value of the expression is scalar. This often simplifies expression writing and is convenient when using the expression-based GCON constraint.

With these new functions and operators in place, you can now use 3D expressions. At this time, however, this 3D expression feature has limited availability and is only accessible from the GCON statement and command.

The new operators and functions are:

Scalar Operator

*

Dot product

Scalar
Function
AO

Action Only reaction force shield

Vector Operators
%
+
-
[exp,exp,exp]
Cross product
Addition
Subtraction
Vector creation, 3 scalars become 1 vector
Vector Functions UV
UVX
UVY
UVZ

DXYZ
VXYZ
ACCXYZ

WXYZ
WDTXYZ                  

FXYZ
TXYZ

MAG
TRANS(exp,to,from)
Unit vector of vector expression (intrinsic)
Unit vector in X-direction (marker measure)
Unit vector in Y-direction (marker measure)
Unit vector in Z-direction (marker measure) 

Vector of translational displacement
Vector of translational velocity
Vector of translational acceleration

Vector of angular velocity
Vector of angular acceleration

Vector of force
Vector of torque

Magnitude of a vector
Transforms 3D expressions


Examples:

DXYZ(1,2) is equivalent to [ DX(1,2), DY(1,2), DZ(1,2) ]

UV(DXYZ(1,2)) is equivalent to DXYZ(1,2)/DM(1,2) except that UV handles more gracefully the case where DM goes to zero.

MAG ( DXYZ(1,2) % DXYZ(3,4)) is the magnitude of the cross-product between two displacement vectors.

SURFACE statement (C++ only)

A new SURFACE entity is now supported. You can specify surface through data that is contained in a Parasolid file (sheet body), or user-defined subroutine (SURSUB). Surfaces are used to define SURFACE markers. These are then used to create a wide variety of constraints, previously not possible. Note that the surface must consist of only a single face.

The ADAMS/Solver (C++) uses the face (u-v) parameters as states for the surface marker, so they must be continuous in the region in which the surface marker moves (the parameters can be bounded or periodic).

CURVE and SURFACE markers (C++ only)

MARKERS can be defined to act like a CURVE or a SURFACE. These MARKERS can be used in any context where a regular MARKER could be. A variety of new and useful constraints can be modeled by defining standard "lower pair" constraints combined with CURVE and SURFACE MARKERS.

Some examples include:  

This constraint: May be achieved with:
Surface-to-Surface Spherical joint between two SURFACE markers
Point-to-Surface Spherical joint between a SURFACE marker
and a regular marker
Path Follower
(equivalent to PTCV)
Fixed joint between a CURVE marker
and a regular marker

All standard kinematic measures (DX(…), VZ(…)) work as expected with CURVE and SURFACE markers. Using these measures, it is possible to obtain curve/surface tangent and normal directions, slip velocities, and so on, very easily.

PLANAR argument for PART statement (C++ only)

A new argument, PLANAR, indicates that a PART only has three degrees-of-freedom (global X and Y translations, and a rotation about the global Z axis). It is best to think of the planar as a regular 3D part with a built-in planar joint. This is a combination of elements often found in certain models that contain 2D subsystems, such as belts or chains. Unlike a part and a planar joint pair which combine to add 18 equations to an index 3 dynamic analysis in ADAMS/Solver, the planar part only adds 6 equations. Fewer equations can improve performance, but since the planar part can be contained in a full 3D MSC.ADAMS model, coexist with and connected to 3D part elements, performance will not match software for 2D dynamics analysis.

What's New for ADAMS/Solver (FORTRAN)

Speed improvement for FLEX_BODY (FORTAN only)

The computational efficiency in the FLEX_BODY element has significantly improved in the 2003 release. The improvement is obvious in all models that have flexible bodies. The most dramatic improvement is with flexible bodies that have high numbers of selected modes (such as SELMOD in .mtx file).

In an extreme case of a model dominated by a large FLEX_BODY that has 288 modes, the simulation times improved by 6.1 times. The improvements seen in a typical model are more modest, about 5-10%, and vary depending on how much the FLEX_BODY dominates the solution and how many enabled modes are in the FLEX_BODY. This change has no effect on the numerical results of the simulation.

(Back to top)



Changes                                       

Several changes have been implemented in both ADAMS/Solver (C++) and ADAMS/Solver (FORTRAN). To help you identify the changes, this section is also divided into three categories: both solvers, C++ only, and FORTRAN only.

Changes for both ADAMS/Solver (C++) and
ADAMS/Solver (FORTRAN)

XRF results file contains contact incidents (both solvers)

The RESULTS statement has been extended to support results written in XML format. This format was first exposed in version 12.0, and is now officially supported. The FORMATTED, XRF results file now includes contact incident data. Please note that the results file will not contain contact incidents if you use the other results file formats (for example, binary).

Dynamic coefficient of friction can be greater than static coefficient (both solvers)

The restriction that MU_DYNAMIC must be smaller than MU_STATIC for the FRICTION statement has been eliminated. The dynamic coefficient of friction can now be larger than the static coefficient, which enables the friction modeling of certain plastic materials.

Solver compatibility checker (both solvers)

When your dataset (.adm) is submitted to ADAMS/Solver, a compatibility checker looks to see if the model contains statements or functions that are not available in the version of ADAMS/Solver you selected. The compatibility results are reported to the screen and message file (.msg) as ERROR messages. The commands in an ACF file are not checked for compatibility. Please report if you find that the checker has overlooked any incompatible modeling elements.

CURSUB now called with IORD=3 (both solvers)

To support SI2 in PTCV and CVCV constraints, ADAMS/Solver now uses the third derivative of a curve. As a result, ADAMS/Solver now calls user-written CURSUBs with IORD=3 when they are referenced by either PTCV or CVCV constraints.

CONTROL_POINTS option discontinued (both solvers)

The CONTROL_POINTS argument for the CURVE statement has been discontinued; you must use CURVE_POINTS instead.

.dll extension no longer required on Windows platform

You no longer need to specify the .dll extension when creating a custom solver DLL.

The following example now works:

adams03 cr-u n user.obj -n mydll exit

adams03 ru-u mydll my.acf exit

Changes for ADAMS/Solver (C++) only

Continued development of ADAMS/Solver (C++)

Although the current, FORTRAN-based solver remains the commercial default and fully functional solver for this release, we continue to work toward transitioning to the next generation, C++-based solver. This change provides several benefits for extendibility, modularization, and other efficiencies.

ADAMS/Solver (C++) has been outfitted with numerous updates thus far. As new functionality is added and more is learned about how it is used, it is sometimes necessary to phase out old solver functionality that may cause conflicts with new functionality or can no longer be supported.

The following items are highlighted to inform you of functionality that has yet to be implemented in ADAMS/Solver (C++), as well as those features that are being discontinued (will not be transitioned). Please proceed with your modeling efforts with these changes in mind:

Not Currently Supported
(planned for future release)

Discontinued Features

ABAM, CONSTANT_BDF, and RKF45 integrators
EQUILIBRIUM/DYNAMIC
FEMDATA
GTCMAT (Compliance Matrix)
INCANG and ORIENT angular measures
INTERP function (ADAMS/Durability feature)
LINEAR
POINT_MASS
OUTPUT
SAVE/RELOAD

DSTIFF integrator
EXECUTION graphics & related display commands
NFORCE
UCON

ADAMS/Solver (C++) alternative for ADAMS/Car and ADAMS/Chassis (C++ only)

Previously, models created with ADAMS/Car or ADAMS/Chassis could only run using ADAMS/Solver (FORTRAN). Now, the functionality gap between ADAMS/Solver (C++) and ADAMS/Solver (FORTRAN) has decreased significantly. This allows ADAMS/Solver (C++) to run models created in ADAMS/Car or ADAMS/Chassis. This progress is part of the continuation of our long-term transition plan for advancement of ADAMS/Solver (C++).

The performance of ADAMS/Solver (C++) has improved since version 12.0. Our work up to this point has focused on functionality (getting everything working and making sure the answers are correct). You can now run most car models with ADAMS/Solver (C++) except those that use compliance matrix interface or that have the unsupported features outlined earlier (see table above).

MOTION statement may be dependent on VARVAL (C++ only)

You are no longer required to use ADAMS/Solver (FORTRAN) when using a VARVAL function to define a MOTION element. In fact, it works considerably better in ADAMS/Solver (C++). For example, in ADAMS/Solver (C++) during velocity ICs, the motion will be subject to the time derivative of the variable. ADAMS/Solver (FORTRAN) just uses zero. In order to preserve legacy behavior, MOTION will not transmit reaction forces through its function expression.
For this reason, you are still not encouraged to introduce state dependencies through motion functions. You should use the new GCON element to create complex constraints rather than the MOTION element.

MFORCE support (C++ only)

It is no longer a requirement to use ADAMS/Solver (FORTRAN) when using the MFORCE. For details see What's New in ADAMS/Flex.

MARKERs on flexible bodies (C++ only)

It is no longer a requirement that the location of a marker on a flexible body be coincident with a node. For details see What's New in ADAMS/Flex.

Extended modeling element compatibility for flexible bodies
(C++ only)

All joints, joint primitives, and motion generators can now be attached directly to a flexible body. For details see What's New in ADAMS/Flex.

Modal coordinate function expressions for flexible bodies
(C++ only)

New function expressions are now available for flexible body modal coordinates and their first two time derivatives. It is no longer a requirement to use a user-written subroutine. For details see What's New in ADAMS/Flex.

Changes for ADAMS/Solver (FORTRAN) only

Zeroing out tiny values in REQUEST (FORTAN only)

Any REQUEST (or REQSUB) containing expressions now have their values set to zero when the magnitude is less than 1.0E-14.

(Back to top)



Issues resolved

During the course of 2003 release development, many maintenance and support issues have been resolved. The list below illustrates some of the key issues. Contact your local MSC.ADAMS support provider for determining the status of other specific issues.

Items resolved in the 12.0 Service Pack

The 2003 release of ADAMS/Solver includes all of the fixes that were provided in the 12.0 Service Pack. The items include:

24282
Corrected source of the problem that led to incorrect displacement ICs for motions dependent on variables that have other dependencies several levels deep. This fix, however, does not address circular variable dependencies where one variable depends on another that depends on the first; such dependencies require simultaneous equations solutions. Very few models need simultaneous equations solutions for variables. If your models contain motions that depend on variables that depend on other variables, please ensure that they do not contain any expressions that require simultaneous equations and verify the results.

30131
Fixed the program fault that is encountered when calling GTCMAT in models containing FRICTION statement with the INACTIVE=static feature.

32392
Corrected the problem with results time stamp. Now, all simulations that run with the internal solver will have the correct time and date stamp.

35632
On IBM-RS workstations, conflicts with the installed C runtime library resulted in a system error (Exec format error) during MSC.ADAMS startup or random crashes during execution. To correct this, the 12.0 service pack added a compatible C runtime library in the MSC.ADAMS installation for use only by the MSC.ADAMS products.

35691
Updated the detection scheme for contacts of cylindrical geometry to fix problem with processing top and bottom edge detections.

For the full list of items that were fixed for 12.0 and further details, please refer to the ADAMS/Solver 12.0 Service Pack, APN-120-176.

Additional items resolved

12635
Changed the 80 character limit for file names so that names as long as 1024 characters are now accepted.

15709
Corrected problem in which the displacement IC solution for PTCV constraints was finding a solution at a distance further away from the input configuration instead of one that was nearby.

21614
Solver curve interpolation is now synchronized with what ADAMS/View uses to display bsplines on the screen.

24379
Fixed the problem with the writing of output at time=0.0 after using the EQUILIBRIUM/DYNAMIC command.

24382
Modified the criteria for determining if a part may be a free body when issuing warning message during a failed static equilibrium solution.

24477
Fixed problem in 2D contacts that produced a force when the curves looked like they were not touching.

25510
Fixed the problem that prevented curve-to-curve CONTACT from working when using metric (MKS) units.

27306, 37877
An effective radius that allows frictional torques to be transmitted between solids undergoing contact at a single point is now computed. This change affects special cases where 3D contact would occur at only a single point (planar surfaces, axisymmetric geometry).

29202
Corrected the problem with non-existence of POUTPUT component data in results file.

29723
Updated the algorithm for finding IC solution for pairs of PTCV constraints when there is more than one solution.

30696
Fixed the problem that could cause an application crash to occur when performing repeated initial condition analyses.

30892
Fixed the memory problem that caused segmentation fault when using SAVE and RELOAD with models that have multi-wrap angles computed with AZ, AY, or AZ in a REQSUB.

30917
Fixed the problem where the request output for SIM/STATIC analysis was inconsistent between kinematic and dynamic models.

30996
Updated the error message for WSTIFF integrator to be consistent with GSTIFF so that it refers to states by name instead of by number.

35835
Corrected the problem with null pointer that caused ADAMS/Solver (FORTRAN) to crash when running some solid-to-solid contact models which were built from imported CAD geometry.

32765, 35934
Corrected the problem with models having CONTACT elements that fail to detect contact during long simulations.

37087
Corrected the problem with models having CONTACT elements where the results change each time a simulation is run. In very special cases, the simulation results can change even though no model data is changing. The observed models where this happens involve a series of sharp impacts with dynamic friction turned on. This correction employs a more robust contact detection algorithm and minor issues were resolved relating to memory cleanup.

35934
Fixed problem that caused contacts to turn off without issuing any error messages from the Parasolid library. As a result, more comprehensive error checking has been added.

35994
Corrected the problem with finding static equilibrium in models containing MFORCE statements.

36162
Updated the handling of friction in redundant constraints. You will now receive warning messages to alert you of these situations.

36307
Corrected the problem that caused corrupted results file data in models containing MFORCE statements.

36352
Fixed the problem that prevented successful quasi-static analysis following an automatic Euler singularity correction.

36432
Changed logic to better track opening of .msg file. As a result, this eliminated the source of a crash when using RELOAD/STATES.

36444
Implemented error trapping to prevent the application from crashing when DEBUG/JMDUMP, REQDUMP, or RHSDUMP were used with the internal solver. A warning message is now issued that you must save the output file (.out) in order to use these features.

37065
Corrected the problem that prevented the use of GSTIFF after running with CONSTANT_BDF.

37085
Updated the Jacobian matrix sorting algorithm to handle models with greater than 45k equations.

37087
Fixed the problem that caused a contact model to produce non-repeatable results.

37426
Removed discontinuity checking for FIESUBs since they do not normally have discontinuous forces because they are normally used to model nonlinear beams and bushings.

37451
Corrected problems that caused a program fault when using SYSPAR in a user subroutine.

37709
Corrected the problem that caused a program fault when using RELOAD/SYSTEM with rigidized flexible bodies.

37920
Eliminated the integer overflow condition for MATRIX statements with 45357 or more entries.

38602
Corrected the behavior of the SHOW TIME command so it lists the current time instead of the analysis time and date stamp.

38846
Corrected the problem that caused ZP and XP arguments of the MARKER command to be ignored.

38938
Fixed the problem that caused SCALES to be incorrect for COUPLERs having three joints and two scales values. Note that couplers with two joints and one scales value did not have this problem.

39006
Eliminated problems in formatting .msg files on the Windows platform where carriage returns were missing.

39310
Updated the INTEGRATOR/DEFAULT command so that it resets the corrector to its default.

(Back to top)



Known issues

Please go to the Knowledge Base to read all of the Known Issues for ADAMS/Solver 2003

(Back to top)

 

Go to What's New and Release Notes for
C++ only
Go to What's New and Release Notes for FORTRAN only
Go to What's New and Release Notes common for both solvers

 

Copyright © 2003 MSC.Software Corporation. All rights reserved.

Revised: 09/06/05