• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Adams
  3. Variable length

Following Cadence Design Systems’ acquisition of the Design & Engineering (D&E) business, the D&E Community Forum on the Nexus Community Center has been migrated in the Cadence Physical System Simulation Community. For more details and if you have any questions, please refer to the FAQ.

Stats

  • State Not Answered
  • Replies 14
  • Subscribers 3
  • Views 2
  • Members are here 0
More Content

Variable length

jatinzaverbhai.mandani
jatinzaverbhai.mandani over 3 years ago
Hello everyone,
 
Some help please because I'm running out of ideas.
 
So, I have two markers / construction frames : first one has a fix location, but the second one is dependent by the first marker.
 
There is a relationship between markers: the 2nd one moves along the axis of the 1st one, only after the distance (DM) between them drops under a certain length.
 
So far I've tried with IF function and with VARVAL... but no success.
 
Examples :
marker_2 = (LOC_RELATIVE_TO({0.0, 0.0, (IF(....))}, marker_1) or
marker_2 = (LOC_RELATIVE_TO({0.0, 0.0, (VARVAL(....))}, marker_1)
 
 
 
How can I integrate a run-time variable into a marker definition ?
 
 
 
 
Thank you very much!
  • Sign in to reply
  • Cancel
Parents
  • Jesper Slattengren
    0 Jesper Slattengren over 3 years ago
    You can't integrate run-time expressions in the parameterization.
    Once the simulation starts, the parameterization is gone, dead, does not exist from a solver perspective. The marker is where it is.
     
    But what you write as "the 2nd one moves along the axis of the 1st one" is a solver constraint, not a parameterization.
    Use for example a translational joint or an inline jprim.
    constraint create primitive_joint inline jprim_name=jprim_1 &
    i_marker_name = marker_2 &
    j_marker_name = marker 1
    This forces marker_2 to move along the z_axis of marker_1.
     
    Then you write "only after the distance (DM) between them drops under a certain length." I don't completely understand what you intend here. What does it do when the length is greater than the specified value? Free to move as it wants along the axis specified by the jprim above?
    If that is the case, this is handled by a force. If the trigger value (DM as you call it) is greater than zero, then an SFORCE is appropriate utilizing a IMPACTfunction. (if DM can be zero or negative, you should use a VFORCE as a translational SFORCE never can have length zero when the direction would become undefined)
    force create direct single_component_force &
    type = translational &
    action_only=off &
    i_marker = marker_2 &
    j_marker=marker_1 &
    function="BISTOP(DZ(marker_2,marker_1,marker_2),VZ(marker_2,marker_1,marker_2), 42, 1e4, 1.1,10, 0.1)
    This will allow marker_2 to move freely along the z-axis of marker_1 as long as the distance between them is greater than 42. If distance is lower than 42, they will move together.
     
    Note that marker_1 and marker_2 must of course belong to different parts.
     
     
     
     
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • Jesper Slattengren
    0 Jesper Slattengren over 3 years ago
    You can't integrate run-time expressions in the parameterization.
    Once the simulation starts, the parameterization is gone, dead, does not exist from a solver perspective. The marker is where it is.
     
    But what you write as "the 2nd one moves along the axis of the 1st one" is a solver constraint, not a parameterization.
    Use for example a translational joint or an inline jprim.
    constraint create primitive_joint inline jprim_name=jprim_1 &
    i_marker_name = marker_2 &
    j_marker_name = marker 1
    This forces marker_2 to move along the z_axis of marker_1.
     
    Then you write "only after the distance (DM) between them drops under a certain length." I don't completely understand what you intend here. What does it do when the length is greater than the specified value? Free to move as it wants along the axis specified by the jprim above?
    If that is the case, this is handled by a force. If the trigger value (DM as you call it) is greater than zero, then an SFORCE is appropriate utilizing a IMPACTfunction. (if DM can be zero or negative, you should use a VFORCE as a translational SFORCE never can have length zero when the direction would become undefined)
    force create direct single_component_force &
    type = translational &
    action_only=off &
    i_marker = marker_2 &
    j_marker=marker_1 &
    function="BISTOP(DZ(marker_2,marker_1,marker_2),VZ(marker_2,marker_1,marker_2), 42, 1e4, 1.1,10, 0.1)
    This will allow marker_2 to move freely along the z-axis of marker_1 as long as the distance between them is greater than 42. If distance is lower than 42, they will move together.
     
    Note that marker_1 and marker_2 must of course belong to different parts.
     
     
     
     
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
No Data
Cadence Guidelines

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2026 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information