    

 ## On this page

  

 

 # rocky\_joint\_api

 Last update: 17.07.2025 

<a id="l00001" name="l00001"></a> 1\#pragma once

<a id="l00002" name="l00002"></a> 2 

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

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

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

<a id="l00006" name="l00006"></a> 6 

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

<a id="l00008" name="l00008"></a> 8 

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

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

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

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

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

<a id="l00032" name="l00032"></a> 32{

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

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

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

<a id="l00036" name="l00036"></a> 36 // -----------------------------------------------------------------------

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

<a id="l00051" name="l00051"></a> 51 inline ROCKY_FUNCTIONS

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

<a id="l00053" name="l00053"></a> 53 {

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

<a id="l00055" name="l00055"></a> 55 }



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

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

<a id="l00070" name="l00070"></a> 70 inline ROCKY_FUNCTIONS

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

<a id="l00072" name="l00072"></a> 72 {

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

<a id="l00074" name="l00074"></a> 74 }



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

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

<a id="l00093" name="l00093"></a> 93 inline ROCKY_FUNCTIONS

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

<a id="l00095" name="l00095"></a> 95 {

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

<a id="l00097" name="l00097"></a> 97 }



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

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

<a id="l00113" name="l00113"></a> 113 inline ROCKY_FUNCTIONS

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

<a id="l00115" name="l00115"></a> 115 {

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

<a id="l00117" name="l00117"></a> 117 }



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

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

<a id="l00136" name="l00136"></a> 136 inline ROCKY_FUNCTIONS

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

<a id="l00138" name="l00138"></a> 138 {

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

<a id="l00140" name="l00140"></a> 140 }



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

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

<a id="l00143" name="l00143"></a> 143 // Deformations and deformation velocities

<a id="l00144" name="l00144"></a> 144 // ------------------------------------------------------

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

<a id="l00158" name="l00158"></a> 158 inline ROCKY_FUNCTIONS

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

<a id="l00160" name="l00160"></a> 160 {

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

<a id="l00162" name="l00162"></a> 162 }



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

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

<a id="l00175" name="l00175"></a> 175 inline ROCKY_FUNCTIONS

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

<a id="l00177" name="l00177"></a> 177 {

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

<a id="l00179" name="l00179"></a> 179 }



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

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

<a id="l00196" name="l00196"></a> 196 inline ROCKY_FUNCTIONS

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

<a id="l00198" name="l00198"></a> 198 {

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

<a id="l00200" name="l00200"></a> 200 }



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

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

<a id="l00217" name="l00217"></a> 217 inline ROCKY_FUNCTIONS

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

<a id="l00219" name="l00219"></a> 219 {

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

<a id="l00221" name="l00221"></a> 221 }



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

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

<a id="l00231" name="l00231"></a> 231 inline ROCKY_FUNCTIONS

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

<a id="l00233" name="l00233"></a> 233 {

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

<a id="l00235" name="l00235"></a> 235 }



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

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

<a id="l00252" name="l00252"></a> 252 inline ROCKY_FUNCTIONS

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

<a id="l00254" name="l00254"></a> 254 {

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

<a id="l00256" name="l00256"></a> 256 }



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

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

<a id="l00272" name="l00272"></a> 272 inline ROCKY_FUNCTIONS

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

<a id="l00274" name="l00274"></a> 274 {

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

<a id="l00276" name="l00276"></a> 276 }



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

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

<a id="l00292" name="l00292"></a> 292 inline ROCKY_FUNCTIONS

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

<a id="l00294" name="l00294"></a> 294 {

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

<a id="l00296" name="l00296"></a> 296 }



<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 // Stiffnesses and damping coefficients

<a id="l00301" name="l00301"></a> 301 // ------------------------------------------------------

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

<a id="l00313" name="l00313"></a> 313 inline ROCKY_FUNCTIONS

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

<a id="l00315" name="l00315"></a> 315 { 

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

<a id="l00317" name="l00317"></a> 317 }



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

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

<a id="l00330" name="l00330"></a> 330 inline ROCKY_FUNCTIONS

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

<a id="l00332" name="l00332"></a> 332 { 

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

<a id="l00334" name="l00334"></a> 334 }



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

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

<a id="l00355" name="l00355"></a> 355 inline ROCKY_FUNCTIONS

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

<a id="l00357" name="l00357"></a> 357 {

<a id="l00358" name="l00358"></a> 358 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="l00359" name="l00359"></a> 359 return (deformation_direction == 0) ?

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

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

<a id="l00362" name="l00362"></a> 362 }



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

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

<a id="l00373" name="l00373"></a> 373 inline ROCKY_FUNCTIONS

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

<a id="l00375" name="l00375"></a> 375 { 

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

<a id="l00377" name="l00377"></a> 377 }



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

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

<a id="l00388" name="l00388"></a> 388 inline ROCKY_FUNCTIONS

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

<a id="l00390" name="l00390"></a> 390 { 

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

<a id="l00392" name="l00392"></a> 392 }



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

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

<a id="l00411" name="l00411"></a> 411 inline ROCKY_FUNCTIONS

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

<a id="l00413" name="l00413"></a> 413 {

<a id="l00414" name="l00414"></a> 414 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="l00415" name="l00415"></a> 415 return (deformation_direction == 0) ?

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

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

<a id="l00418" name="l00418"></a> 418 }



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

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

<a id="l00421" name="l00421"></a> 421 // Low-level parameters

<a id="l00422" name="l00422"></a> 422 //---------------------------------------------------------------

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

<a id="l00430" name="l00430"></a> 430 inline ROCKY_FUNCTIONS

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

<a id="l00432" name="l00432"></a> 432 

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

<a id="l00444" name="l00444"></a> 444 inline ROCKY_FUNCTIONS

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

<a id="l00446" name="l00446"></a> 446 

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

<a id="l00459" name="l00459"></a> 459 inline ROCKY_FUNCTIONS

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

<a id="l00461" name="l00461"></a> 461 {

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

<a id="l00463" name="l00463"></a> 463 }



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

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

<a id="l00471" name="l00471"></a> 471 inline ROCKY_FUNCTIONS

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

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

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

<a id="l00475" name="l00475"></a> 475 }



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

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

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

<a id="l00486" name="l00486"></a> 486 {

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

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

<a id="l00489" name="l00489"></a> 489 {

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

<a id="l00491" name="l00491"></a> 491 const int home_index = particle_joint.nh;

<a id="l00492" name="l00492"></a> 492 const int near_index = particle_joint.nn;

<a id="l00493" name="l00493"></a> 493 return 0.5

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

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

<a id="l00496" name="l00496"></a> 496 }

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

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

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

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

<a id="l00501" name="l00501"></a> 501 }

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



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

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

<a id="l00516" name="l00516"></a> 516 inline ROCKY_FUNCTIONS

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

<a id="l00518" name="l00518"></a> 518 { 

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

<a id="l00520" name="l00520"></a> 520 }



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

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

<a id="l00534" name="l00534"></a> 534 inline ROCKY_FUNCTIONS

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

<a id="l00536" name="l00536"></a> 536 { 

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

<a id="l00538" name="l00538"></a> 538 }



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

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

<a id="l00552" name="l00552"></a> 552 inline ROCKY_FUNCTIONS

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

<a id="l00554" name="l00554"></a> 554 { 

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

<a id="l00556" name="l00556"></a> 556 }



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

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

<a id="l00570" name="l00570"></a> 570 inline ROCKY_FUNCTIONS

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

<a id="l00572" name="l00572"></a> 572 { 

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

<a id="l00574" name="l00574"></a> 574 }



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

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

<a id="l00584" name="l00584"></a> 584 inline ROCKY_FUNCTIONS

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

<a id="l00586" name="l00586"></a> 586 {

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

<a id="l00588" name="l00588"></a> 588 }



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

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

<a id="l00606" name="l00606"></a> 606 inline ROCKY_FUNCTIONS

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

<a id="l00608" name="l00608"></a> 608 

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

<a id="l00616" name="l00616"></a> 616 inline ROCKY_FUNCTIONS

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

<a id="l00618" name="l00618"></a> 618 {

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

<a id="l00620" name="l00620"></a> 620 }



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

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

<a id="l00630" name="l00630"></a> 630 inline ROCKY_FUNCTIONS

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

<a id="l00632" name="l00632"></a> 632 {

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

<a id="l00634" name="l00634"></a> 634 }



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

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

<a id="l00644" name="l00644"></a> 644 inline ROCKY_FUNCTIONS

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

<a id="l00646" name="l00646"></a> 646 {

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

<a id="l00648" name="l00648"></a> 648 }



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

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

<a id="l00657" name="l00657"></a> 657 inline ROCKY_FUNCTIONS

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

<a id="l00659" name="l00659"></a> 659 

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

<a id="l00661" name="l00661"></a> 661 // Access to joint scalars

<a id="l00662" name="l00662"></a> 662 // ---------------------------------------------------------------------

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

<a id="l00673" name="l00673"></a> 673 inline ROCKY_FUNCTIONS

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

<a id="l00675" name="l00675"></a> 675 {

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

<a id="l00677" name="l00677"></a> 677 }



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

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

<a id="l00680" name="l00680"></a> 680 // home and near elements data

<a id="l00681" name="l00681"></a> 681 // ---------------------------------------------------------------------

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

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

<a id="l00689" name="l00689"></a> 689 {

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

<a id="l00691" name="l00691"></a> 691 }



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

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

<a id="l00699" name="l00699"></a> 699 {

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

<a id="l00701" name="l00701"></a> 701 }



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

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

<a id="l00707" name="l00707"></a> 707 {

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

<a id="l00709" name="l00709"></a> 709 }



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

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

<a id="l00715" name="l00715"></a> 715 {

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

<a id="l00717" name="l00717"></a> 717 }



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

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

<a id="l00723" name="l00723"></a> 723 {

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

<a id="l00725" name="l00725"></a> 725 }



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

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

<a id="l00731" name="l00731"></a> 731 {

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

<a id="l00733" name="l00733"></a> 733 }



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

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

<a id="l00744" name="l00744"></a> 744 {

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

<a id="l00746" name="l00746"></a> 746 }



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

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

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

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

<a id="l00753" name="l00753"></a> 753 

<a id="l00754" name="l00754"></a> 754 device::RockyJoint _impl;

<a id="l00755" name="l00755"></a> 755 

<a id="l00757" name="l00757"></a> 757};



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

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

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

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

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

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

<a id="l00764" name="l00764"></a> 764{

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

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

<a id="l00779" name="l00779"></a> 779 

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

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

<a id="l00792" name="l00792"></a> 792 

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

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

<a id="l00805" name="l00805"></a> 805 

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

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

<a id="l00810" name="l00810"></a> 810 

<a id="l00812" name="l00812"></a> 812};

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

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

<a id="l00815" name="l00815"></a> 815{

<a id="l00816" name="l00816"></a> 816 this-&gt;_force = value;

<a id="l00817" name="l00817"></a> 817}

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

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

<a id="l00820" name="l00820"></a> 820{

<a id="l00821" name="l00821"></a> 821 this-&gt;_home_moment = value;

<a id="l00822" name="l00822"></a> 822}

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

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

<a id="l00825" name="l00825"></a> 825{

<a id="l00826" name="l00826"></a> 826 this-&gt;_near_moment = value;

<a id="l00827" name="l00827"></a> 827}

[IRockyJointScalars](structIRockyJointScalars.xhtml)

**Definition** rocky_joint_scalars.hpp:53



[IRockyJoint](structIRockyJoint.xhtml)

**Definition** rocky_joint_api.hpp:32



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

ROCKY_FUNCTIONS double get_normal_elastic_ratio() const

**Definition** rocky_joint_api.hpp:517



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

ROCKY_FUNCTIONS double get_poisson_ratio() const

**Definition** rocky_joint_api.hpp:485



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

ROCKY_FUNCTIONS double get_tangential_stiffness_per_area() const

**Definition** rocky_joint_api.hpp:645



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

ROCKY_FUNCTIONS double get_angular_deformation_velocity(int deformation_direction) const

**Definition** rocky_joint_api.hpp:273



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

ROCKY_FUNCTIONS double get_angle_scaling_factor() const

**Definition** rocky_joint_api.hpp:607



[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:460



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

ROCKY_FUNCTIONS double get_torsion_elastic_ratio() const

**Definition** rocky_joint_api.hpp:553



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

ROCKY_FUNCTIONS double get_tangential_damping_coefficient() const

**Definition** rocky_joint_api.hpp:389



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

ROCKY_FUNCTIONS double get_angular_stiffness(int deformation_direction) const

**Definition** rocky_joint_api.hpp:356



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

ROCKY_FUNCTIONS double get_young_modulus() const

**Definition** rocky_joint_api.hpp:472



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

ROCKY_FUNCTIONS double get_young_modulus_multiplier() const

**Definition** rocky_joint_api.hpp:658



[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:71



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

ROCKY_FUNCTIONS double3 get_tangential_deformation_velocity() const

**Definition** rocky_joint_api.hpp:218



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

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

**Definition** rocky_joint_api.hpp:743



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

ROCKY_FUNCTIONS double3 get_near_element_centroid_position() const

**Definition** rocky_joint_api.hpp:714



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

ROCKY_FUNCTIONS double3 get_tangential_deformation() const

**Definition** rocky_joint_api.hpp:176



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

ROCKY_FUNCTIONS double3 get_near_arm() const

**Definition** rocky_joint_api.hpp:730



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

ROCKY_FUNCTIONS double3 get_home_element_centroid_position() const

**Definition** rocky_joint_api.hpp:706



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

ROCKY_FUNCTIONS double get_angular_deformation(int deformation_direction) const

**Definition** rocky_joint_api.hpp:253



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

ROCKY_FUNCTIONS double get_normal_stiffness() const

**Definition** rocky_joint_api.hpp:314



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

ROCKY_FUNCTIONS double get_tangential_stiffness() const

**Definition** rocky_joint_api.hpp:331



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

ROCKY_FUNCTIONS double get_equivalent_mass() const

**Definition** rocky_joint_api.hpp:617



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

ROCKY_FUNCTIONS double3 get_damping_moment() const

**Definition** rocky_joint_api.hpp:137



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

ROCKY_FUNCTIONS double3 get_damping_force() const

**Definition** rocky_joint_api.hpp:114



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

ROCKY_FUNCTIONS int get_number_angular_deformations() const

**Definition** rocky_joint_api.hpp:232



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

ROCKY_FUNCTIONS double get_bending_elastic_ratio() const

**Definition** rocky_joint_api.hpp:571



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

ROCKY_FUNCTIONS double get_angular_damping_coefficient(int deformation_direction) const

**Definition** rocky_joint_api.hpp:412



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

ROCKY_FUNCTIONS double3 get_home_arm() const

**Definition** rocky_joint_api.hpp:722



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

ROCKY_FUNCTIONS double3 get_elastic_moment() const

**Definition** rocky_joint_api.hpp:94



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

ROCKY_FUNCTIONS double get_joint_damping_ratio() const

**Definition** rocky_joint_api.hpp:585



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

ROCKY_FUNCTIONS double3 get_elastic_force() const

**Definition** rocky_joint_api.hpp:52



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

ROCKY_FUNCTIONS double3 get_normal_deformation_velocity() const

**Definition** rocky_joint_api.hpp:197



[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:688



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

ROCKY_FUNCTIONS double get_normal_damping_coefficient() const

**Definition** rocky_joint_api.hpp:374



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

ROCKY_FUNCTIONS double get_normal_stiffness_per_area() const

**Definition** rocky_joint_api.hpp:631



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

ROCKY_FUNCTIONS double3 get_normal_deformation() const

**Definition** rocky_joint_api.hpp:159



[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:698



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

ROCKY_FUNCTIONS double3 get_angular_deformation_direction(int deformation_direction) const

**Definition** rocky_joint_api.hpp:293



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

ROCKY_FUNCTIONS double get_tangential_elastic_ratio() const

**Definition** rocky_joint_api.hpp:535



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

ROCKY_FUNCTIONS double get_area() const

**Definition** rocky_joint_api.hpp:445



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

ROCKY_FUNCTIONS double3 get_normal_vector() const

**Definition** rocky_joint_api.hpp:431



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

ROCKY_FUNCTIONS IRockyJointScalars get_scalars()

**Definition** rocky_joint_api.hpp:674