    

 ## On this page

  

 

 # rocky\_joint\_api

 Last update: 16.07.2025 

<a id="l00001" name="l00001"></a> 1// (C) 2024 ANSYS, Inc. Unauthorized use, distribution, or duplication is prohibited.

<a id="l00002" name="l00002"></a> 2\#pragma once

<a id="l00003" name="l00003"></a> 3 

<a id="l00004" name="l00004"></a> 4// Includes =======================================================================================

<a id="l00005" name="l00005"></a> 5\#include &lt;rocky20/api/rocky\_particle\_api.hpp&gt;

<a id="l00006" name="l00006"></a> 6\#include &lt;rocky20/device/device\_joint\_api.hpp&gt;

<a id="l00007" name="l00007"></a> 7 

<a id="l00008" name="l00008"></a> 8\#include "rocky\_joint\_scalars.hpp"

<a id="l00009" name="l00009"></a> 9 

<a id="l00010" name="l00010"></a> 10// ================================================================================================

<a id="l00011" name="l00011"></a> 11// IRockyJoint

<a id="l00012" name="l00012"></a> 12// ================================================================================================

<a id="l00013" name="l00013"></a> 13 

<a id="l00032" name="l00032"></a>[ 32](structIRockyJoint.xhtml)struct [IRockyJoint](structIRockyJoint.xhtml)

<a id="l00033" name="l00033"></a> 33{

<a id="l00034" name="l00034"></a> 34 

<a id="l00035" name="l00035"></a> 35 // -----------------------------------------------------------------------

<a id="l00036" name="l00036"></a> 36 // Forces and moments according to the default linear elastic model

<a id="l00037" name="l00037"></a> 37 // -----------------------------------------------------------------------

<a id="l00038" name="l00038"></a> 38 

<a id="l00052" name="l00052"></a> 52 inline ROCKY_FUNCTIONS

<a id="l00053" name="l00053"></a>[ 53](structIRockyJoint.xhtml#ab006cbc3b38064611dfa5dae2cbdf672) double3 [get\_elastic\_force](structIRockyJoint.xhtml#ab006cbc3b38064611dfa5dae2cbdf672)() const

<a id="l00054" name="l00054"></a> 54 {

<a id="l00055" name="l00055"></a> 55 return this-&gt;_impl.get_elastic_force();

<a id="l00056" name="l00056"></a> 56 }



<a id="l00057" name="l00057"></a> 57 

<a id="l00058" name="l00058"></a> 58 

<a id="l00071" name="l00071"></a> 71 inline ROCKY_FUNCTIONS

<a id="l00072" name="l00072"></a>[ 72](structIRockyJoint.xhtml#a3447c9a4ef194097e8c3898b25ebe942) thrust::tuple&lt;double3, double3&gt; [get\_moments\_due\_to\_force](structIRockyJoint.xhtml#a3447c9a4ef194097e8c3898b25ebe942)(double3 force) const

<a id="l00073" name="l00073"></a> 73 {

<a id="l00074" name="l00074"></a> 74 return this-&gt;_impl.get_moments_due_to_force(force);

<a id="l00075" name="l00075"></a> 75 }



<a id="l00076" name="l00076"></a> 76 

<a id="l00077" name="l00077"></a> 77 

<a id="l00094" name="l00094"></a> 94 inline ROCKY_FUNCTIONS

<a id="l00095" name="l00095"></a>[ 95](structIRockyJoint.xhtml#a8eeb46a9210aeaf532467ecb77c580e7) double3 [get\_elastic\_moment](structIRockyJoint.xhtml#a8eeb46a9210aeaf532467ecb77c580e7)() const

<a id="l00096" name="l00096"></a> 96 {

<a id="l00097" name="l00097"></a> 97 return this-&gt;_impl.get_elastic_moment();

<a id="l00098" name="l00098"></a> 98 }



<a id="l00099" name="l00099"></a> 99 

<a id="l00100" name="l00100"></a> 100 

<a id="l00114" name="l00114"></a> 114 inline ROCKY_FUNCTIONS

<a id="l00115" name="l00115"></a>[ 115](structIRockyJoint.xhtml#a7c2d0b63f577c279227b2df8daffbf5c) double3 [get\_damping\_force](structIRockyJoint.xhtml#a7c2d0b63f577c279227b2df8daffbf5c)() const

<a id="l00116" name="l00116"></a> 116 {

<a id="l00117" name="l00117"></a> 117 return this-&gt;_impl.get_damping_force();

<a id="l00118" name="l00118"></a> 118 }



<a id="l00119" name="l00119"></a> 119 

<a id="l00120" name="l00120"></a> 120 

<a id="l00137" name="l00137"></a> 137 inline ROCKY_FUNCTIONS

<a id="l00138" name="l00138"></a>[ 138](structIRockyJoint.xhtml#a71de79fea3ed20ae451b5cb36d2b6349) double3 [get\_damping\_moment](structIRockyJoint.xhtml#a71de79fea3ed20ae451b5cb36d2b6349)() const

<a id="l00139" name="l00139"></a> 139 {

<a id="l00140" name="l00140"></a> 140 return this-&gt;_impl.get_damping_moment();

<a id="l00141" name="l00141"></a> 141 }



<a id="l00142" name="l00142"></a> 142 

<a id="l00143" name="l00143"></a> 143 // ------------------------------------------------------

<a id="l00144" name="l00144"></a> 144 // Deformations and deformation velocities

<a id="l00145" name="l00145"></a> 145 // ------------------------------------------------------

<a id="l00146" name="l00146"></a> 146 

<a id="l00159" name="l00159"></a> 159 inline ROCKY_FUNCTIONS

<a id="l00160" name="l00160"></a>[ 160](structIRockyJoint.xhtml#add47e1c2a985abef3a9fef24c44902e2) double3 [get\_normal\_deformation](structIRockyJoint.xhtml#add47e1c2a985abef3a9fef24c44902e2)() const

<a id="l00161" name="l00161"></a> 161 {

<a id="l00162" name="l00162"></a> 162 return this-&gt;_impl.state.normal_deformation;

<a id="l00163" name="l00163"></a> 163 }



<a id="l00164" name="l00164"></a> 164 

<a id="l00165" name="l00165"></a> 165 

<a id="l00176" name="l00176"></a> 176 inline ROCKY_FUNCTIONS

<a id="l00177" name="l00177"></a>[ 177](structIRockyJoint.xhtml#a3d324dbcee8a4366284a5fb84547dd9d) double3 [get\_tangential\_deformation](structIRockyJoint.xhtml#a3d324dbcee8a4366284a5fb84547dd9d)() const

<a id="l00178" name="l00178"></a> 178 {

<a id="l00179" name="l00179"></a> 179 return this-&gt;_impl.state.tangential_deformation;

<a id="l00180" name="l00180"></a> 180 }



<a id="l00181" name="l00181"></a> 181 

<a id="l00182" name="l00182"></a> 182 

<a id="l00197" name="l00197"></a> 197 inline ROCKY_FUNCTIONS

<a id="l00198" name="l00198"></a>[ 198](structIRockyJoint.xhtml#abd22a485b99c59a2141dff07e6f9b9e0) double3 [get\_normal\_deformation\_velocity](structIRockyJoint.xhtml#abd22a485b99c59a2141dff07e6f9b9e0)() const

<a id="l00199" name="l00199"></a> 199 {

<a id="l00200" name="l00200"></a> 200 return this-&gt;_impl.state.normal_deformation_velocity;

<a id="l00201" name="l00201"></a> 201 }



<a id="l00202" name="l00202"></a> 202 

<a id="l00203" name="l00203"></a> 203 

<a id="l00218" name="l00218"></a> 218 inline ROCKY_FUNCTIONS

<a id="l00219" name="l00219"></a>[ 219](structIRockyJoint.xhtml#a35e3299e0b5a35128aff0ca6f7604e38) double3 [get\_tangential\_deformation\_velocity](structIRockyJoint.xhtml#a35e3299e0b5a35128aff0ca6f7604e38)() const

<a id="l00220" name="l00220"></a> 220 {

<a id="l00221" name="l00221"></a> 221 return this-&gt;_impl.state.tangential_deformation_velocity;

<a id="l00222" name="l00222"></a> 222 }



<a id="l00223" name="l00223"></a> 223 

<a id="l00224" name="l00224"></a> 224 

<a id="l00232" name="l00232"></a> 232 inline ROCKY_FUNCTIONS

<a id="l00233" name="l00233"></a>[ 233](structIRockyJoint.xhtml#a7c84ef4dad6d9e1f38b2d227ac1f083a) int [get\_number\_angular\_deformations](structIRockyJoint.xhtml#a7c84ef4dad6d9e1f38b2d227ac1f083a)() const

<a id="l00234" name="l00234"></a> 234 {

<a id="l00235" name="l00235"></a> 235 return this-&gt;_impl.state.get_n_angular_deformations();

<a id="l00236" name="l00236"></a> 236 }



<a id="l00237" name="l00237"></a> 237 

<a id="l00238" name="l00238"></a> 238 

<a id="l00253" name="l00253"></a> 253 inline ROCKY_FUNCTIONS

<a id="l00254" name="l00254"></a>[ 254](structIRockyJoint.xhtml#a46c8b6ca5aa8e78f55cb6c0a70f1cc6d) double [get\_angular\_deformation](structIRockyJoint.xhtml#a46c8b6ca5aa8e78f55cb6c0a70f1cc6d)(int deformation_direction) const

<a id="l00255" name="l00255"></a> 255 {

<a id="l00256" name="l00256"></a> 256 return this-&gt;_impl.state.angular_deformation[deformation_direction];

<a id="l00257" name="l00257"></a> 257 }



<a id="l00258" name="l00258"></a> 258 

<a id="l00259" name="l00259"></a> 259 

<a id="l00273" name="l00273"></a> 273 inline ROCKY_FUNCTIONS

<a id="l00274" name="l00274"></a>[ 274](structIRockyJoint.xhtml#a1be4ec6e88935d14a4b900d09fdbfadf) double [get\_angular\_deformation\_velocity](structIRockyJoint.xhtml#a1be4ec6e88935d14a4b900d09fdbfadf)(int deformation_direction) const

<a id="l00275" name="l00275"></a> 275 {

<a id="l00276" name="l00276"></a> 276 return this-&gt;_impl.state.angular_deformation_velocity[deformation_direction];

<a id="l00277" name="l00277"></a> 277 }



<a id="l00278" name="l00278"></a> 278 

<a id="l00279" name="l00279"></a> 279 

<a id="l00293" name="l00293"></a> 293 inline ROCKY_FUNCTIONS

<a id="l00294" name="l00294"></a>[ 294](structIRockyJoint.xhtml#ae4c1028eba2077ae552c21aba43ce638) double3 [get\_angular\_deformation\_direction](structIRockyJoint.xhtml#ae4c1028eba2077ae552c21aba43ce638)(int deformation_direction) const

<a id="l00295" name="l00295"></a> 295 {

<a id="l00296" name="l00296"></a> 296 return this-&gt;_impl.state.local_basis[deformation_direction];

<a id="l00297" name="l00297"></a> 297 }



<a id="l00298" name="l00298"></a> 298 

<a id="l00299" name="l00299"></a> 299 

<a id="l00300" name="l00300"></a> 300 // ------------------------------------------------------

<a id="l00301" name="l00301"></a> 301 // Stiffnesses and damping coefficients

<a id="l00302" name="l00302"></a> 302 // ------------------------------------------------------

<a id="l00303" name="l00303"></a> 303 

<a id="l00314" name="l00314"></a> 314 inline ROCKY_FUNCTIONS

<a id="l00315" name="l00315"></a>[ 315](structIRockyJoint.xhtml#a47718a93f4aa6bffe9ef0e03bfff3fa9) double [get\_normal\_stiffness](structIRockyJoint.xhtml#a47718a93f4aa6bffe9ef0e03bfff3fa9)() const 

<a id="l00316" name="l00316"></a> 316 { 

<a id="l00317" name="l00317"></a> 317 return this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.normal * this-&gt;_impl.state.normal_stiffness;

<a id="l00318" name="l00318"></a> 318 }



<a id="l00319" name="l00319"></a> 319 

<a id="l00320" name="l00320"></a> 320 

<a id="l00331" name="l00331"></a> 331 inline ROCKY_FUNCTIONS

<a id="l00332" name="l00332"></a>[ 332](structIRockyJoint.xhtml#a48e95a4cc7245305980339ea8ddf43b3) double [get\_tangential\_stiffness](structIRockyJoint.xhtml#a48e95a4cc7245305980339ea8ddf43b3)() const 

<a id="l00333" name="l00333"></a> 333 { 

<a id="l00334" name="l00334"></a> 334 return this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.tangential * this-&gt;_impl.state.tangential_stiffness;

<a id="l00335" name="l00335"></a> 335 }



<a id="l00336" name="l00336"></a> 336 

<a id="l00337" name="l00337"></a> 337 

<a id="l00356" name="l00356"></a> 356 inline ROCKY_FUNCTIONS

<a id="l00357" name="l00357"></a>[ 357](structIRockyJoint.xhtml#a299b8659e8bb2ddba28de92d18055e5b) double [get\_angular\_stiffness](structIRockyJoint.xhtml#a299b8659e8bb2ddba28de92d18055e5b)(int deformation_direction) const

<a id="l00358" name="l00358"></a> 358 {

<a id="l00359" name="l00359"></a> 359 cu_real geometric_factor = this-&gt;[get\_area\_moment\_of\_inertia](structIRockyJoint.xhtml#a22573a85d220d9db4afa1b0f67337196)(deformation_direction) / this-&gt;[get\_area](structIRockyJoint.xhtml#af2ea637b5ce30f553c19f973411ef451)();

<a id="l00360" name="l00360"></a> 360 return (deformation_direction == 0) ?

<a id="l00361" name="l00361"></a> 361 this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.torsion * this-&gt;_impl.state.tangential_stiffness * geometric_factor :

<a id="l00362" name="l00362"></a> 362 this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.bending * this-&gt;_impl.state.normal_stiffness * geometric_factor;

<a id="l00363" name="l00363"></a> 363 }



<a id="l00364" name="l00364"></a> 364 

<a id="l00365" name="l00365"></a> 365 

<a id="l00374" name="l00374"></a> 374 inline ROCKY_FUNCTIONS

<a id="l00375" name="l00375"></a>[ 375](structIRockyJoint.xhtml#ad55375a544cfd11a0c0fb52986b1fc74) double [get\_normal\_damping\_coefficient](structIRockyJoint.xhtml#ad55375a544cfd11a0c0fb52986b1fc74)() const 

<a id="l00376" name="l00376"></a> 376 { 

<a id="l00377" name="l00377"></a> 377 return this-&gt;_impl.state.particle_group-&gt;sqrt_joint_elastic_ratio.normal * this-&gt;_impl.state.normal_damping; 

<a id="l00378" name="l00378"></a> 378 }



<a id="l00379" name="l00379"></a> 379 

<a id="l00380" name="l00380"></a> 380 

<a id="l00389" name="l00389"></a> 389 inline ROCKY_FUNCTIONS

<a id="l00390" name="l00390"></a>[ 390](structIRockyJoint.xhtml#a25c86f76033636ab37b3ff19ba60b41a) double [get\_tangential\_damping\_coefficient](structIRockyJoint.xhtml#a25c86f76033636ab37b3ff19ba60b41a)() const 

<a id="l00391" name="l00391"></a> 391 { 

<a id="l00392" name="l00392"></a> 392 return this-&gt;_impl.state.particle_group-&gt;sqrt_joint_elastic_ratio.tangential * this-&gt;_impl.state.tangential_damping;

<a id="l00393" name="l00393"></a> 393 }



<a id="l00394" name="l00394"></a> 394 

<a id="l00395" name="l00395"></a> 395 

<a id="l00412" name="l00412"></a> 412 inline ROCKY_FUNCTIONS

<a id="l00413" name="l00413"></a>[ 413](structIRockyJoint.xhtml#a83db4989103e17e6158b6e96a030457d) double [get\_angular\_damping\_coefficient](structIRockyJoint.xhtml#a83db4989103e17e6158b6e96a030457d)(int deformation_direction) const

<a id="l00414" name="l00414"></a> 414 {

<a id="l00415" name="l00415"></a> 415 cu_real geometric_factor = this-&gt;[get\_area\_moment\_of\_inertia](structIRockyJoint.xhtml#a22573a85d220d9db4afa1b0f67337196)(deformation_direction) / this-&gt;[get\_area](structIRockyJoint.xhtml#af2ea637b5ce30f553c19f973411ef451)();

<a id="l00416" name="l00416"></a> 416 return (deformation_direction == 0) ?

<a id="l00417" name="l00417"></a> 417 this-&gt;_impl.state.particle_group-&gt;sqrt_joint_elastic_ratio.torsion * this-&gt;_impl.state.tangential_damping * geometric_factor :

<a id="l00418" name="l00418"></a> 418 this-&gt;_impl.state.particle_group-&gt;sqrt_joint_elastic_ratio.bending * this-&gt;_impl.state.normal_damping * geometric_factor;

<a id="l00419" name="l00419"></a> 419 }



<a id="l00420" name="l00420"></a> 420 

<a id="l00421" name="l00421"></a> 421 //---------------------------------------------------------------

<a id="l00422" name="l00422"></a> 422 // Low-level parameters

<a id="l00423" name="l00423"></a> 423 //---------------------------------------------------------------

<a id="l00424" name="l00424"></a> 424 

<a id="l00431" name="l00431"></a> 431 inline ROCKY_FUNCTIONS

<a id="l00432" name="l00432"></a>[ 432](structIRockyJoint.xhtml#af300e95bee5d2a332c3085e6fad91af2) double3 [get\_normal\_vector](structIRockyJoint.xhtml#af300e95bee5d2a332c3085e6fad91af2)() const { return this-&gt;_impl.state.normal_vector; }

<a id="l00433" name="l00433"></a> 433 

<a id="l00434" name="l00434"></a> 434 

<a id="l00445" name="l00445"></a> 445 inline ROCKY_FUNCTIONS

<a id="l00446" name="l00446"></a>[ 446](structIRockyJoint.xhtml#af2ea637b5ce30f553c19f973411ef451) double [get\_area](structIRockyJoint.xhtml#af2ea637b5ce30f553c19f973411ef451)() const { return this-&gt;_impl.state.area; }

<a id="l00447" name="l00447"></a> 447 

<a id="l00448" name="l00448"></a> 448 

<a id="l00460" name="l00460"></a> 460 inline ROCKY_FUNCTIONS

<a id="l00461" name="l00461"></a>[ 461](structIRockyJoint.xhtml#a22573a85d220d9db4afa1b0f67337196) double [get\_area\_moment\_of\_inertia](structIRockyJoint.xhtml#a22573a85d220d9db4afa1b0f67337196)(int deformation_direction) const

<a id="l00462" name="l00462"></a> 462 {

<a id="l00463" name="l00463"></a> 463 return this-&gt;_impl.state.area_moment[deformation_direction];

<a id="l00464" name="l00464"></a> 464 }



<a id="l00465" name="l00465"></a> 465 

<a id="l00466" name="l00466"></a> 466 

<a id="l00472" name="l00472"></a> 472 inline ROCKY_FUNCTIONS

<a id="l00473" name="l00473"></a>[ 473](structIRockyJoint.xhtml#a2d57d8f171e77be4e1de3f2eb2b10fb3) double [get\_young\_modulus](structIRockyJoint.xhtml#a2d57d8f171e77be4e1de3f2eb2b10fb3)() const { 

<a id="l00474" name="l00474"></a> 474 int material_index = this-&gt;_impl.state.particle_group-&gt;get_material_index();

<a id="l00475" name="l00475"></a> 475 return this-&gt;_impl.model-&gt;get_material(material_index).kn_load;

<a id="l00476" name="l00476"></a> 476 }



<a id="l00477" name="l00477"></a> 477 

<a id="l00478" name="l00478"></a> 478 

<a id="l00486" name="l00486"></a>[ 486](structIRockyJoint.xhtml#a09693f2837c14dfb1a0fa4d40373553f) inline ROCKY_FUNCTIONS double [get\_poisson\_ratio](structIRockyJoint.xhtml#a09693f2837c14dfb1a0fa4d40373553f)() const

<a id="l00487" name="l00487"></a> 487 {

<a id="l00488" name="l00488"></a> 488 const SDeviceModel* model = this-&gt;_impl.model;

<a id="l00489" name="l00489"></a> 489 if (model-&gt;particle_scalars-&gt;is_poisson_ratio_enabled())

<a id="l00490" name="l00490"></a> 490 {

<a id="l00491" name="l00491"></a> 491 const cuda_particle_joint&amp; particle_joint = model-&gt;jnt_prt[this-&gt;_impl.joint_index];

<a id="l00492" name="l00492"></a> 492 const int home_index = particle_joint.nh;

<a id="l00493" name="l00493"></a> 493 const int near_index = particle_joint.nn;

<a id="l00494" name="l00494"></a> 494 return 0.5

<a id="l00495" name="l00495"></a> 495 * (this-&gt;_impl.model-&gt;particle_scalars-&gt;get_poisson_ratio(home_index)

<a id="l00496" name="l00496"></a> 496 + this-&gt;_impl.model-&gt;particle_scalars-&gt;get_poisson_ratio(near_index));

<a id="l00497" name="l00497"></a> 497 }

<a id="l00498" name="l00498"></a> 498 else

<a id="l00499" name="l00499"></a> 499 {

<a id="l00500" name="l00500"></a> 500 int material_index = this-&gt;_impl.state.particle_group-&gt;get_material_index();

<a id="l00501" name="l00501"></a> 501 return model-&gt;get_material(material_index).poisson_ratio;

<a id="l00502" name="l00502"></a> 502 }

<a id="l00503" name="l00503"></a> 503 }



<a id="l00504" name="l00504"></a> 504 

<a id="l00505" name="l00505"></a> 505 

<a id="l00517" name="l00517"></a> 517 inline ROCKY_FUNCTIONS

<a id="l00518" name="l00518"></a>[ 518](structIRockyJoint.xhtml#a0912316f01b3785c5f711aad2a3ebde1) double [get\_normal\_elastic\_ratio](structIRockyJoint.xhtml#a0912316f01b3785c5f711aad2a3ebde1)() const 

<a id="l00519" name="l00519"></a> 519 { 

<a id="l00520" name="l00520"></a> 520 return this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.normal; 

<a id="l00521" name="l00521"></a> 521 }



<a id="l00522" name="l00522"></a> 522 

<a id="l00523" name="l00523"></a> 523 

<a id="l00535" name="l00535"></a> 535 inline ROCKY_FUNCTIONS

<a id="l00536" name="l00536"></a>[ 536](structIRockyJoint.xhtml#aeeae504e7d95c787e088c8dd5a55c83c) double [get\_tangential\_elastic\_ratio](structIRockyJoint.xhtml#aeeae504e7d95c787e088c8dd5a55c83c)() const 

<a id="l00537" name="l00537"></a> 537 { 

<a id="l00538" name="l00538"></a> 538 return this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.tangential; 

<a id="l00539" name="l00539"></a> 539 }



<a id="l00540" name="l00540"></a> 540 

<a id="l00541" name="l00541"></a> 541 

<a id="l00553" name="l00553"></a> 553 inline ROCKY_FUNCTIONS

<a id="l00554" name="l00554"></a>[ 554](structIRockyJoint.xhtml#a23fa06ce00c95412142f49e82825bca1) double [get\_torsion\_elastic\_ratio](structIRockyJoint.xhtml#a23fa06ce00c95412142f49e82825bca1)() const 

<a id="l00555" name="l00555"></a> 555 { 

<a id="l00556" name="l00556"></a> 556 return this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.torsion; 

<a id="l00557" name="l00557"></a> 557 }



<a id="l00558" name="l00558"></a> 558 

<a id="l00559" name="l00559"></a> 559 

<a id="l00571" name="l00571"></a> 571 inline ROCKY_FUNCTIONS

<a id="l00572" name="l00572"></a>[ 572](structIRockyJoint.xhtml#a83474e7ee11615ca201de8fec94c8c22) double [get\_bending\_elastic\_ratio](structIRockyJoint.xhtml#a83474e7ee11615ca201de8fec94c8c22)() const 

<a id="l00573" name="l00573"></a> 573 { 

<a id="l00574" name="l00574"></a> 574 return this-&gt;_impl.state.particle_group-&gt;joint_elastic_ratio.bending; 

<a id="l00575" name="l00575"></a> 575 }



<a id="l00576" name="l00576"></a> 576 

<a id="l00577" name="l00577"></a> 577 

<a id="l00585" name="l00585"></a> 585 inline ROCKY_FUNCTIONS

<a id="l00586" name="l00586"></a>[ 586](structIRockyJoint.xhtml#a997ad60ff60b99d485c1d3d2fce74ff2) double [get\_joint\_damping\_ratio](structIRockyJoint.xhtml#a997ad60ff60b99d485c1d3d2fce74ff2)() const

<a id="l00587" name="l00587"></a> 587 {

<a id="l00588" name="l00588"></a> 588 return this-&gt;_impl.state.particle_group-&gt;joint_damping_ratio;

<a id="l00589" name="l00589"></a> 589 }



<a id="l00590" name="l00590"></a> 590 

<a id="l00591" name="l00591"></a> 591 

<a id="l00607" name="l00607"></a> 607 inline ROCKY_FUNCTIONS

<a id="l00608" name="l00608"></a>[ 608](structIRockyJoint.xhtml#a200f5da4324981ce63eeca693082ce3f) double [get\_angle\_scaling\_factor](structIRockyJoint.xhtml#a200f5da4324981ce63eeca693082ce3f)() const { return this-&gt;_impl.get_angle_scaling_factor(); }

<a id="l00609" name="l00609"></a> 609 

<a id="l00610" name="l00610"></a> 610 

<a id="l00617" name="l00617"></a> 617 inline ROCKY_FUNCTIONS

<a id="l00618" name="l00618"></a>[ 618](structIRockyJoint.xhtml#a53d243061f43d6e0a291de65afec3b3c) double [get\_equivalent\_mass](structIRockyJoint.xhtml#a53d243061f43d6e0a291de65afec3b3c)() const

<a id="l00619" name="l00619"></a> 619 {

<a id="l00620" name="l00620"></a> 620 return this-&gt;_impl.state.equivalent_mass;

<a id="l00621" name="l00621"></a> 621 }



<a id="l00622" name="l00622"></a> 622 

<a id="l00623" name="l00623"></a> 623 

<a id="l00631" name="l00631"></a> 631 inline ROCKY_FUNCTIONS

<a id="l00632" name="l00632"></a>[ 632](structIRockyJoint.xhtml#ad78b35364784e0ffe09508d99facd5a3) double [get\_normal\_stiffness\_per\_area](structIRockyJoint.xhtml#ad78b35364784e0ffe09508d99facd5a3)() const

<a id="l00633" name="l00633"></a> 633 {

<a id="l00634" name="l00634"></a> 634 return this-&gt;_impl.state.particle_group-&gt;kn_dgb;

<a id="l00635" name="l00635"></a> 635 }



<a id="l00636" name="l00636"></a> 636 

<a id="l00637" name="l00637"></a> 637 

<a id="l00645" name="l00645"></a> 645 inline ROCKY_FUNCTIONS

<a id="l00646" name="l00646"></a>[ 646](structIRockyJoint.xhtml#a1444e28a82d898d15775180373952ee1) double [get\_tangential\_stiffness\_per\_area](structIRockyJoint.xhtml#a1444e28a82d898d15775180373952ee1)() const

<a id="l00647" name="l00647"></a> 647 {

<a id="l00648" name="l00648"></a> 648 return this-&gt;_impl.state.particle_group-&gt;kt_dgb;

<a id="l00649" name="l00649"></a> 649 }



<a id="l00650" name="l00650"></a> 650 

<a id="l00651" name="l00651"></a> 651 

<a id="l00658" name="l00658"></a> 658 inline ROCKY_FUNCTIONS

<a id="l00659" name="l00659"></a>[ 659](structIRockyJoint.xhtml#a2f87ef623553e934f8fdca19d163669a) double [get\_young\_modulus\_multiplier](structIRockyJoint.xhtml#a2f87ef623553e934f8fdca19d163669a)() const { return this-&gt;_impl.state.stiffness_multiplier; }

<a id="l00660" name="l00660"></a> 660 

<a id="l00661" name="l00661"></a> 661 // ---------------------------------------------------------------------

<a id="l00662" name="l00662"></a> 662 // Access to joint scalars

<a id="l00663" name="l00663"></a> 663 // ---------------------------------------------------------------------

<a id="l00664" name="l00664"></a> 664 

<a id="l00674" name="l00674"></a> 674 inline ROCKY_FUNCTIONS

<a id="l00675" name="l00675"></a>[ 675](structIRockyJoint.xhtml#af78ec40df8e4715343434772668bf70d) [IRockyJointScalars](structIRockyJointScalars.xhtml) [get\_scalars](structIRockyJoint.xhtml#af78ec40df8e4715343434772668bf70d)()

<a id="l00676" name="l00676"></a> 676 {

<a id="l00677" name="l00677"></a> 677 return [IRockyJointScalars](structIRockyJointScalars.xhtml)(*this-&gt;_impl.model-&gt;joint_scalars, this-&gt;_impl.joint_index);

<a id="l00678" name="l00678"></a> 678 }



<a id="l00679" name="l00679"></a> 679 

<a id="l00680" name="l00680"></a> 680 // ---------------------------------------------------------------------

<a id="l00681" name="l00681"></a> 681 // home and near elements data

<a id="l00682" name="l00682"></a> 682 // ---------------------------------------------------------------------

<a id="l00683" name="l00683"></a> 683 

<a id="l00689" name="l00689"></a>[ 689](structIRockyJoint.xhtml#acd6105a244aacfbbc5a833760c7ca1b9) ROCKY_FUNCTIONS thrust::tuple&lt;double3, double&gt; [get\_home\_element\_orientation](structIRockyJoint.xhtml#acd6105a244aacfbbc5a833760c7ca1b9)() const

<a id="l00690" name="l00690"></a> 690 {

<a id="l00691" name="l00691"></a> 691 return this-&gt;_impl.get_home_element_orientation();

<a id="l00692" name="l00692"></a> 692 }



<a id="l00693" name="l00693"></a> 693 

<a id="l00699" name="l00699"></a>[ 699](structIRockyJoint.xhtml#addfb58409bb1dc5703d9d3ab64b3e458) ROCKY_FUNCTIONS thrust::tuple&lt;double3, double&gt; [get\_near\_element\_orientation](structIRockyJoint.xhtml#addfb58409bb1dc5703d9d3ab64b3e458)() const

<a id="l00700" name="l00700"></a> 700 {

<a id="l00701" name="l00701"></a> 701 return this-&gt;_impl.get_near_element_orientation();

<a id="l00702" name="l00702"></a> 702 }



<a id="l00703" name="l00703"></a> 703 

<a id="l00707" name="l00707"></a>[ 707](structIRockyJoint.xhtml#a4422c62fbad4e4f34c011d683fc0d859) ROCKY_FUNCTIONS double3 [get\_home\_element\_centroid\_position](structIRockyJoint.xhtml#a4422c62fbad4e4f34c011d683fc0d859)() const

<a id="l00708" name="l00708"></a> 708 {

<a id="l00709" name="l00709"></a> 709 return this-&gt;_impl.get_home_element_centroid_position();

<a id="l00710" name="l00710"></a> 710 }



<a id="l00711" name="l00711"></a> 711 

<a id="l00715" name="l00715"></a>[ 715](structIRockyJoint.xhtml#a3a804cfa90d13e065de6d983d7a35caf) ROCKY_FUNCTIONS double3 [get\_near\_element\_centroid\_position](structIRockyJoint.xhtml#a3a804cfa90d13e065de6d983d7a35caf)() const

<a id="l00716" name="l00716"></a> 716 {

<a id="l00717" name="l00717"></a> 717 return this-&gt;_impl.get_near_element_centroid_position();

<a id="l00718" name="l00718"></a> 718 }



<a id="l00719" name="l00719"></a> 719 

<a id="l00723" name="l00723"></a>[ 723](structIRockyJoint.xhtml#a86a5ed840cdc8b276f3ff65ad8148a3c) ROCKY_FUNCTIONS double3 [get\_home\_arm](structIRockyJoint.xhtml#a86a5ed840cdc8b276f3ff65ad8148a3c)() const

<a id="l00724" name="l00724"></a> 724 {

<a id="l00725" name="l00725"></a> 725 return this-&gt;_impl.get_home_arm();

<a id="l00726" name="l00726"></a> 726 }



<a id="l00727" name="l00727"></a> 727 

<a id="l00731" name="l00731"></a>[ 731](structIRockyJoint.xhtml#a4129719851a851ff1ac7d0190d834ad3) ROCKY_FUNCTIONS double3 [get\_near\_arm](structIRockyJoint.xhtml#a4129719851a851ff1ac7d0190d834ad3)() const

<a id="l00732" name="l00732"></a> 732 {

<a id="l00733" name="l00733"></a> 733 return this-&gt;_impl.get_near_arm();

<a id="l00734" name="l00734"></a> 734 }



<a id="l00735" name="l00735"></a> 735 

<a id="l00744" name="l00744"></a>[ 744](structIRockyJoint.xhtml#a37e1bd3fb20a03cf9be8a2d4dd317d22) ROCKY_FUNCTIONS thrust::tuple&lt;int, int&gt; [get\_element\_tags](structIRockyJoint.xhtml#a37e1bd3fb20a03cf9be8a2d4dd317d22)() const

<a id="l00745" name="l00745"></a> 745 {

<a id="l00746" name="l00746"></a> 746 return this-&gt;_impl.get_element_tags();

<a id="l00747" name="l00747"></a> 747 }



<a id="l00748" name="l00748"></a> 748 

<a id="l00749" name="l00749"></a> 749 

<a id="l00752" name="l00752"></a> 752 ROCKY_FUNCTIONS [IRockyJoint](structIRockyJoint.xhtml)(SDeviceModel *_model, int _device_index) :

<a id="l00753" name="l00753"></a> 753 _impl(_model, _device_index) {}

<a id="l00754" name="l00754"></a> 754 

<a id="l00755" name="l00755"></a> 755 device::RockyJoint _impl;

<a id="l00756" name="l00756"></a> 756 

<a id="l00758" name="l00758"></a> 758};



<a id="l00759" name="l00759"></a> 759 

<a id="l00760" name="l00760"></a> 760// =================================================================================================

<a id="l00761" name="l00761"></a> 761// IRockyJointOutputData

<a id="l00762" name="l00762"></a> 762// =================================================================================================

<a id="l00763" name="l00763"></a> 763 

<a id="l00764" name="l00764"></a> 764struct IRockyJointOutputData

<a id="l00765" name="l00765"></a> 765{

<a id="l00766" name="l00766"></a> 766 

<a id="l00779" name="l00779"></a> 779 ROCKY_FUNCTIONS void set_force(const double3&amp; value);

<a id="l00780" name="l00780"></a> 780 

<a id="l00781" name="l00781"></a> 781 

<a id="l00792" name="l00792"></a> 792 ROCKY_FUNCTIONS void set_home_moment(const double3&amp; value);

<a id="l00793" name="l00793"></a> 793 

<a id="l00794" name="l00794"></a> 794 

<a id="l00805" name="l00805"></a> 805 ROCKY_FUNCTIONS void set_near_moment(const double3&amp; value);

<a id="l00806" name="l00806"></a> 806 

<a id="l00807" name="l00807"></a> 807 

<a id="l00810" name="l00810"></a> 810 double3 _force{}, _home_moment{}, _near_moment{};

<a id="l00811" name="l00811"></a> 811 

<a id="l00813" name="l00813"></a> 813};

<a id="l00814" name="l00814"></a> 814 

<a id="l00815" name="l00815"></a> 815inline ROCKY_FUNCTIONS void IRockyJointOutputData::set_force(const double3&amp; value)

<a id="l00816" name="l00816"></a> 816{

<a id="l00817" name="l00817"></a> 817 this-&gt;_force = value;

<a id="l00818" name="l00818"></a> 818}

<a id="l00819" name="l00819"></a> 819 

<a id="l00820" name="l00820"></a> 820inline ROCKY_FUNCTIONS void IRockyJointOutputData::set_home_moment(const double3&amp; value)

<a id="l00821" name="l00821"></a> 821{

<a id="l00822" name="l00822"></a> 822 this-&gt;_home_moment = value;

<a id="l00823" name="l00823"></a> 823}

<a id="l00824" name="l00824"></a> 824 

<a id="l00825" name="l00825"></a> 825inline ROCKY_FUNCTIONS void IRockyJointOutputData::set_near_moment(const double3&amp; value)

<a id="l00826" name="l00826"></a> 826{

<a id="l00827" name="l00827"></a> 827 this-&gt;_near_moment = value;

<a id="l00828" name="l00828"></a> 828}

[IRockyJointScalars](structIRockyJointScalars.xhtml)

**Definition** rocky_joint_scalars.hpp:54



[IRockyJoint](structIRockyJoint.xhtml)

**Definition** rocky_joint_api.hpp:33



[IRockyJoint::get\_normal\_elastic\_ratio](structIRockyJoint.xhtml#a0912316f01b3785c5f711aad2a3ebde1)

ROCKY_FUNCTIONS double get_normal_elastic_ratio() const

**Definition** rocky_joint_api.hpp:518



[IRockyJoint::get\_poisson\_ratio](structIRockyJoint.xhtml#a09693f2837c14dfb1a0fa4d40373553f)

ROCKY_FUNCTIONS double get_poisson_ratio() const

**Definition** rocky_joint_api.hpp:486



[IRockyJoint::get\_tangential\_stiffness\_per\_area](structIRockyJoint.xhtml#a1444e28a82d898d15775180373952ee1)

ROCKY_FUNCTIONS double get_tangential_stiffness_per_area() const

**Definition** rocky_joint_api.hpp:646



[IRockyJoint::get\_angular\_deformation\_velocity](structIRockyJoint.xhtml#a1be4ec6e88935d14a4b900d09fdbfadf)

ROCKY_FUNCTIONS double get_angular_deformation_velocity(int deformation_direction) const

**Definition** rocky_joint_api.hpp:274



[IRockyJoint::get\_angle\_scaling\_factor](structIRockyJoint.xhtml#a200f5da4324981ce63eeca693082ce3f)

ROCKY_FUNCTIONS double get_angle_scaling_factor() const

**Definition** rocky_joint_api.hpp:608



[IRockyJoint::get\_area\_moment\_of\_inertia](structIRockyJoint.xhtml#a22573a85d220d9db4afa1b0f67337196)

ROCKY_FUNCTIONS double get_area_moment_of_inertia(int deformation_direction) const

**Definition** rocky_joint_api.hpp:461



[IRockyJoint::get\_torsion\_elastic\_ratio](structIRockyJoint.xhtml#a23fa06ce00c95412142f49e82825bca1)

ROCKY_FUNCTIONS double get_torsion_elastic_ratio() const

**Definition** rocky_joint_api.hpp:554



[IRockyJoint::get\_tangential\_damping\_coefficient](structIRockyJoint.xhtml#a25c86f76033636ab37b3ff19ba60b41a)

ROCKY_FUNCTIONS double get_tangential_damping_coefficient() const

**Definition** rocky_joint_api.hpp:390



[IRockyJoint::get\_angular\_stiffness](structIRockyJoint.xhtml#a299b8659e8bb2ddba28de92d18055e5b)

ROCKY_FUNCTIONS double get_angular_stiffness(int deformation_direction) const

**Definition** rocky_joint_api.hpp:357



[IRockyJoint::get\_young\_modulus](structIRockyJoint.xhtml#a2d57d8f171e77be4e1de3f2eb2b10fb3)

ROCKY_FUNCTIONS double get_young_modulus() const

**Definition** rocky_joint_api.hpp:473



[IRockyJoint::get\_young\_modulus\_multiplier](structIRockyJoint.xhtml#a2f87ef623553e934f8fdca19d163669a)

ROCKY_FUNCTIONS double get_young_modulus_multiplier() const

**Definition** rocky_joint_api.hpp:659



[IRockyJoint::get\_moments\_due\_to\_force](structIRockyJoint.xhtml#a3447c9a4ef194097e8c3898b25ebe942)

ROCKY_FUNCTIONS thrust::tuple&lt; double3, double3 &gt; get_moments_due_to_force(double3 force) const

**Definition** rocky_joint_api.hpp:72



[IRockyJoint::get\_tangential\_deformation\_velocity](structIRockyJoint.xhtml#a35e3299e0b5a35128aff0ca6f7604e38)

ROCKY_FUNCTIONS double3 get_tangential_deformation_velocity() const

**Definition** rocky_joint_api.hpp:219



[IRockyJoint::get\_element\_tags](structIRockyJoint.xhtml#a37e1bd3fb20a03cf9be8a2d4dd317d22)

ROCKY_FUNCTIONS thrust::tuple&lt; int, int &gt; get_element_tags() const

**Definition** rocky_joint_api.hpp:744



[IRockyJoint::get\_near\_element\_centroid\_position](structIRockyJoint.xhtml#a3a804cfa90d13e065de6d983d7a35caf)

ROCKY_FUNCTIONS double3 get_near_element_centroid_position() const

**Definition** rocky_joint_api.hpp:715



[IRockyJoint::get\_tangential\_deformation](structIRockyJoint.xhtml#a3d324dbcee8a4366284a5fb84547dd9d)

ROCKY_FUNCTIONS double3 get_tangential_deformation() const

**Definition** rocky_joint_api.hpp:177



[IRockyJoint::get\_near\_arm](structIRockyJoint.xhtml#a4129719851a851ff1ac7d0190d834ad3)

ROCKY_FUNCTIONS double3 get_near_arm() const

**Definition** rocky_joint_api.hpp:731



[IRockyJoint::get\_home\_element\_centroid\_position](structIRockyJoint.xhtml#a4422c62fbad4e4f34c011d683fc0d859)

ROCKY_FUNCTIONS double3 get_home_element_centroid_position() const

**Definition** rocky_joint_api.hpp:707



[IRockyJoint::get\_angular\_deformation](structIRockyJoint.xhtml#a46c8b6ca5aa8e78f55cb6c0a70f1cc6d)

ROCKY_FUNCTIONS double get_angular_deformation(int deformation_direction) const

**Definition** rocky_joint_api.hpp:254



[IRockyJoint::get\_normal\_stiffness](structIRockyJoint.xhtml#a47718a93f4aa6bffe9ef0e03bfff3fa9)

ROCKY_FUNCTIONS double get_normal_stiffness() const

**Definition** rocky_joint_api.hpp:315



[IRockyJoint::get\_tangential\_stiffness](structIRockyJoint.xhtml#a48e95a4cc7245305980339ea8ddf43b3)

ROCKY_FUNCTIONS double get_tangential_stiffness() const

**Definition** rocky_joint_api.hpp:332



[IRockyJoint::get\_equivalent\_mass](structIRockyJoint.xhtml#a53d243061f43d6e0a291de65afec3b3c)

ROCKY_FUNCTIONS double get_equivalent_mass() const

**Definition** rocky_joint_api.hpp:618



[IRockyJoint::get\_damping\_moment](structIRockyJoint.xhtml#a71de79fea3ed20ae451b5cb36d2b6349)

ROCKY_FUNCTIONS double3 get_damping_moment() const

**Definition** rocky_joint_api.hpp:138



[IRockyJoint::get\_damping\_force](structIRockyJoint.xhtml#a7c2d0b63f577c279227b2df8daffbf5c)

ROCKY_FUNCTIONS double3 get_damping_force() const

**Definition** rocky_joint_api.hpp:115



[IRockyJoint::get\_number\_angular\_deformations](structIRockyJoint.xhtml#a7c84ef4dad6d9e1f38b2d227ac1f083a)

ROCKY_FUNCTIONS int get_number_angular_deformations() const

**Definition** rocky_joint_api.hpp:233



[IRockyJoint::get\_bending\_elastic\_ratio](structIRockyJoint.xhtml#a83474e7ee11615ca201de8fec94c8c22)

ROCKY_FUNCTIONS double get_bending_elastic_ratio() const

**Definition** rocky_joint_api.hpp:572



[IRockyJoint::get\_angular\_damping\_coefficient](structIRockyJoint.xhtml#a83db4989103e17e6158b6e96a030457d)

ROCKY_FUNCTIONS double get_angular_damping_coefficient(int deformation_direction) const

**Definition** rocky_joint_api.hpp:413



[IRockyJoint::get\_home\_arm](structIRockyJoint.xhtml#a86a5ed840cdc8b276f3ff65ad8148a3c)

ROCKY_FUNCTIONS double3 get_home_arm() const

**Definition** rocky_joint_api.hpp:723



[IRockyJoint::get\_elastic\_moment](structIRockyJoint.xhtml#a8eeb46a9210aeaf532467ecb77c580e7)

ROCKY_FUNCTIONS double3 get_elastic_moment() const

**Definition** rocky_joint_api.hpp:95



[IRockyJoint::get\_joint\_damping\_ratio](structIRockyJoint.xhtml#a997ad60ff60b99d485c1d3d2fce74ff2)

ROCKY_FUNCTIONS double get_joint_damping_ratio() const

**Definition** rocky_joint_api.hpp:586



[IRockyJoint::get\_elastic\_force](structIRockyJoint.xhtml#ab006cbc3b38064611dfa5dae2cbdf672)

ROCKY_FUNCTIONS double3 get_elastic_force() const

**Definition** rocky_joint_api.hpp:53



[IRockyJoint::get\_normal\_deformation\_velocity](structIRockyJoint.xhtml#abd22a485b99c59a2141dff07e6f9b9e0)

ROCKY_FUNCTIONS double3 get_normal_deformation_velocity() const

**Definition** rocky_joint_api.hpp:198



[IRockyJoint::get\_home\_element\_orientation](structIRockyJoint.xhtml#acd6105a244aacfbbc5a833760c7ca1b9)

ROCKY_FUNCTIONS thrust::tuple&lt; double3, double &gt; get_home_element_orientation() const

**Definition** rocky_joint_api.hpp:689



[IRockyJoint::get\_normal\_damping\_coefficient](structIRockyJoint.xhtml#ad55375a544cfd11a0c0fb52986b1fc74)

ROCKY_FUNCTIONS double get_normal_damping_coefficient() const

**Definition** rocky_joint_api.hpp:375



[IRockyJoint::get\_normal\_stiffness\_per\_area](structIRockyJoint.xhtml#ad78b35364784e0ffe09508d99facd5a3)

ROCKY_FUNCTIONS double get_normal_stiffness_per_area() const

**Definition** rocky_joint_api.hpp:632



[IRockyJoint::get\_normal\_deformation](structIRockyJoint.xhtml#add47e1c2a985abef3a9fef24c44902e2)

ROCKY_FUNCTIONS double3 get_normal_deformation() const

**Definition** rocky_joint_api.hpp:160



[IRockyJoint::get\_near\_element\_orientation](structIRockyJoint.xhtml#addfb58409bb1dc5703d9d3ab64b3e458)

ROCKY_FUNCTIONS thrust::tuple&lt; double3, double &gt; get_near_element_orientation() const

**Definition** rocky_joint_api.hpp:699



[IRockyJoint::get\_angular\_deformation\_direction](structIRockyJoint.xhtml#ae4c1028eba2077ae552c21aba43ce638)

ROCKY_FUNCTIONS double3 get_angular_deformation_direction(int deformation_direction) const

**Definition** rocky_joint_api.hpp:294



[IRockyJoint::get\_tangential\_elastic\_ratio](structIRockyJoint.xhtml#aeeae504e7d95c787e088c8dd5a55c83c)

ROCKY_FUNCTIONS double get_tangential_elastic_ratio() const

**Definition** rocky_joint_api.hpp:536



[IRockyJoint::get\_area](structIRockyJoint.xhtml#af2ea637b5ce30f553c19f973411ef451)

ROCKY_FUNCTIONS double get_area() const

**Definition** rocky_joint_api.hpp:446



[IRockyJoint::get\_normal\_vector](structIRockyJoint.xhtml#af300e95bee5d2a332c3085e6fad91af2)

ROCKY_FUNCTIONS double3 get_normal_vector() const

**Definition** rocky_joint_api.hpp:432



[IRockyJoint::get\_scalars](structIRockyJoint.xhtml#af78ec40df8e4715343434772668bf70d)

ROCKY_FUNCTIONS IRockyJointScalars get_scalars()

**Definition** rocky_joint_api.hpp:675