    

 ## On this page

  

 

 # rocky\_boundary\_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/core/utils/rocky\_math.hpp&gt;

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

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

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

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

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

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

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

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

<a id="l00015" name="l00015"></a> 15template &lt;typename Model&gt;

<a id="l00016" name="l00016"></a> 16struct IRockyGeometryTriangleImpl

<a id="l00017" name="l00017"></a> 17{

<a id="l00018" name="l00018"></a> 18 ROCKY_FUNCTIONS [IRockyMaterial](structIRockyMaterial.xhtml) get_material() const

<a id="l00019" name="l00019"></a> 19 {

<a id="l00020" name="l00020"></a> 20 return [IRockyMaterial](structIRockyMaterial.xhtml)(this-&gt;_impl.get_material());

<a id="l00021" name="l00021"></a> 21 }

<a id="l00022" name="l00022"></a> 22 

<a id="l00023" name="l00023"></a> 23 ROCKY_FUNCTIONS double3 get_normal_unit_vector() const

<a id="l00024" name="l00024"></a> 24 {

<a id="l00025" name="l00025"></a> 25 return this-&gt;_impl.get_normal();

<a id="l00026" name="l00026"></a> 26 }

<a id="l00027" name="l00027"></a> 27 

<a id="l00028" name="l00028"></a> 28 ROCKY_FUNCTIONS double get_area() const

<a id="l00029" name="l00029"></a> 29 {

<a id="l00030" name="l00030"></a> 30 return this-&gt;_impl.get_area();

<a id="l00031" name="l00031"></a> 31 }

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

<a id="l00033" name="l00033"></a> 33 ROCKY_FUNCTIONS double3 get_centroid() const

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

<a id="l00035" name="l00035"></a> 35 return this-&gt;_impl.get_centroid();

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

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

<a id="l00038" name="l00038"></a> 38 ROCKY_FUNCTIONS int get_geometry_index() const

<a id="l00039" name="l00039"></a> 39 {

<a id="l00040" name="l00040"></a> 40 return this-&gt;_impl.get_boundary_index();

<a id="l00041" name="l00041"></a> 41 }

<a id="l00042" name="l00042"></a> 42 

<a id="l00043" name="l00043"></a> 43 ROCKY_FUNCTIONS int get_material_index() const

<a id="l00044" name="l00044"></a> 44 {

<a id="l00045" name="l00045"></a> 45 return this-&gt;_impl.get_material_index();

<a id="l00046" name="l00046"></a> 46 }

<a id="l00047" name="l00047"></a> 47 

<a id="l00048" name="l00048"></a> 48 ROCKY_FUNCTIONS double3 get_translational_velocity(double current_time) const

<a id="l00049" name="l00049"></a> 49 {

<a id="l00050" name="l00050"></a> 50 return this-&gt;_impl.get_translational_velocity(current_time);

<a id="l00051" name="l00051"></a> 51 }

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

<a id="l00053" name="l00053"></a> 53 ROCKY_FUNCTIONS double3 get_geometry_rotational_velocity() const

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

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

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

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

<a id="l00058" name="l00058"></a> 58 ROCKY_FUNCTIONS double3 get_geometry_rotation_center() const

<a id="l00059" name="l00059"></a> 59 {

<a id="l00060" name="l00060"></a> 60 return this-&gt;_impl.get_geometry_rotation_center();

<a id="l00061" name="l00061"></a> 61 }

<a id="l00062" name="l00062"></a> 62 

<a id="l00063" name="l00063"></a> 63 ROCKY_FUNCTIONS double get_temperature() const

<a id="l00064" name="l00064"></a> 64 {

<a id="l00065" name="l00065"></a> 65 return this-&gt;_impl.get_temperature();

<a id="l00066" name="l00066"></a> 66 }

<a id="l00067" name="l00067"></a> 67 

<a id="l00068" name="l00068"></a> 68 ROCKY_FUNCTIONS void set_temperature(double value)

<a id="l00069" name="l00069"></a> 69 {

<a id="l00070" name="l00070"></a> 70 this-&gt;_impl.set_temperature(value);

<a id="l00071" name="l00071"></a> 71 }

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

<a id="l00073" name="l00073"></a> 73 ROCKY_FUNCTIONS bool is_adiabatic() const

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

<a id="l00075" name="l00075"></a> 75 return this-&gt;_impl.is_adiabatic();

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

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

<a id="l00078" name="l00078"></a> 78 ROCKY_FUNCTIONS double get_thermal_conductivity() const

<a id="l00079" name="l00079"></a> 79 {

<a id="l00080" name="l00080"></a> 80 return this-&gt;_impl.get_thermal_conductivity();

<a id="l00081" name="l00081"></a> 81 }

<a id="l00082" name="l00082"></a> 82 

<a id="l00083" name="l00083"></a> 83 ROCKY_FUNCTIONS void set_thermal_conductivity(double value)

<a id="l00084" name="l00084"></a> 84 {

<a id="l00085" name="l00085"></a> 85 this-&gt;_impl.set_thermal_conductivity(value);

<a id="l00086" name="l00086"></a> 86 }

<a id="l00087" name="l00087"></a> 87 

<a id="l00088" name="l00088"></a> 88 ROCKY_FUNCTIONS double get_poisson_ratio() const

<a id="l00089" name="l00089"></a> 89 {

<a id="l00090" name="l00090"></a> 90 return this-&gt;_impl.get_poisson_ratio();

<a id="l00091" name="l00091"></a> 91 }

<a id="l00092" name="l00092"></a> 92 

<a id="l00093" name="l00093"></a> 93 ROCKY_FUNCTIONS void set_poisson_ratio(double value)

<a id="l00094" name="l00094"></a> 94 {

<a id="l00095" name="l00095"></a> 95 this-&gt;_impl.set_poisson_ratio(value);

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

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

<a id="l00098" name="l00098"></a> 98 ROCKY_FUNCTIONS [IRockyTriangleScalars](structIRockyTriangleScalars.xhtml) get_scalars() const

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

<a id="l00100" name="l00100"></a> 100 return this-&gt;_impl.get_scalars();

<a id="l00101" name="l00101"></a> 101 }

<a id="l00102" name="l00102"></a> 102 

<a id="l00103" name="l00103"></a> 103 ROCKY_FUNCTIONS IRockyGeometryTriangleImpl(int _index, Model* _model, bool _current = true)

<a id="l00104" name="l00104"></a> 104 : _impl(_model, _index, _current)

<a id="l00105" name="l00105"></a> 105 {

<a id="l00106" name="l00106"></a> 106 }

<a id="l00107" name="l00107"></a> 107 

<a id="l00108" name="l00108"></a> 108 RockyBoundaryTriangle&lt;Model&gt; _impl;

<a id="l00109" name="l00109"></a> 109};

<a id="l00110" name="l00110"></a> 110 

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

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

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

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

<a id="l00133" name="l00133"></a>[ 133](structIRockyGeometryTriangle.xhtml)struct [IRockyGeometryTriangle](structIRockyGeometryTriangle.xhtml) : public IRockyGeometryTriangleImpl&lt;SDeviceModel&gt;

<a id="l00134" name="l00134"></a> 134{

<a id="l00137" name="l00137"></a> 137 ROCKY_FUNCTIONS [IRockyGeometryTriangle](structIRockyGeometryTriangle.xhtml)(int _index, SDeviceModel* _model)

<a id="l00138" name="l00138"></a> 138 : IRockyGeometryTriangleImpl(_index, _model, true)

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

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

<a id="l00143" name="l00143"></a> 143\#ifdef ONLY\_FOR\_DOXYGEN

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

<a id="l00150" name="l00150"></a>[ 150](structIRockyGeometryTriangle.xhtml#ad93dcca6decba182b3cc02e95bd09c38) ROCKY_FUNCTIONS [IRockyMaterial](structIRockyMaterial.xhtml) [get\_material](structIRockyGeometryTriangle.xhtml#ad93dcca6decba182b3cc02e95bd09c38)() const;

<a id="l00151" name="l00151"></a> 151 

<a id="l00158" name="l00158"></a>[ 158](structIRockyGeometryTriangle.xhtml#a3dffe992b4dc3278be110fd792142b80) ROCKY_FUNCTIONS double3 [get\_normal\_unit\_vector](structIRockyGeometryTriangle.xhtml#a3dffe992b4dc3278be110fd792142b80)() const;

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

<a id="l00163" name="l00163"></a>[ 163](structIRockyGeometryTriangle.xhtml#a87f5f5f9d279e717777feb3a934bac82) ROCKY_FUNCTIONS double [get\_area](structIRockyGeometryTriangle.xhtml#a87f5f5f9d279e717777feb3a934bac82)() const;

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

<a id="l00168" name="l00168"></a>[ 168](structIRockyGeometryTriangle.xhtml#a51271bd50959a8f2a353ac6673ee7fd7) ROCKY_FUNCTIONS double3 [get\_centroid](structIRockyGeometryTriangle.xhtml#a51271bd50959a8f2a353ac6673ee7fd7)() const;

<a id="l00169" name="l00169"></a> 169 

<a id="l00174" name="l00174"></a>[ 174](structIRockyGeometryTriangle.xhtml#a8498939de6ea592bbfff2a4ec075f6ee) ROCKY_FUNCTIONS int [get\_geometry\_index](structIRockyGeometryTriangle.xhtml#a8498939de6ea592bbfff2a4ec075f6ee)() const;

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

<a id="l00180" name="l00180"></a>[ 180](structIRockyGeometryTriangle.xhtml#a9bcc3c8846e93fd1e9876ba328e6a09d) ROCKY_FUNCTIONS int [get\_material\_index](structIRockyGeometryTriangle.xhtml#a9bcc3c8846e93fd1e9876ba328e6a09d)() const;

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

<a id="l00189" name="l00189"></a>[ 189](structIRockyGeometryTriangle.xhtml#a704cfc661bc09630a2d7345d7ea53309) ROCKY_FUNCTIONS double3 [get\_translational\_velocity](structIRockyGeometryTriangle.xhtml#a704cfc661bc09630a2d7345d7ea53309)(double current_time) const;

<a id="l00190" name="l00190"></a> 190 

<a id="l00195" name="l00195"></a>[ 195](structIRockyGeometryTriangle.xhtml#a67d418dcadcd12fa9314ec4891bae8e0) ROCKY_FUNCTIONS double3 [get\_geometry\_rotational\_velocity](structIRockyGeometryTriangle.xhtml#a67d418dcadcd12fa9314ec4891bae8e0)() const;

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

<a id="l00201" name="l00201"></a>[ 201](structIRockyGeometryTriangle.xhtml#ad41c1ad766c0a34a978c5c59add829e7) ROCKY_FUNCTIONS double3 [get\_geometry\_rotation\_center](structIRockyGeometryTriangle.xhtml#ad41c1ad766c0a34a978c5c59add829e7)() const;

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

<a id="l00211" name="l00211"></a>[ 211](structIRockyGeometryTriangle.xhtml#a4ad4b4c3dbdb033213b9f68d4c497f68) ROCKY_FUNCTIONS double [get\_temperature](structIRockyGeometryTriangle.xhtml#a4ad4b4c3dbdb033213b9f68d4c497f68)() const;

<a id="l00212" name="l00212"></a> 212 

<a id="l00222" name="l00222"></a>[ 222](structIRockyGeometryTriangle.xhtml#a4286e7ea37b1863c8ea48d2fcd729b9c) ROCKY_FUNCTIONS void [set\_temperature](structIRockyGeometryTriangle.xhtml#a4286e7ea37b1863c8ea48d2fcd729b9c)(double value);

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

<a id="l00228" name="l00228"></a>[ 228](structIRockyGeometryTriangle.xhtml#acf3dd4c6616b36509791e2896595d16e) ROCKY_FUNCTIONS bool [is\_adiabatic](structIRockyGeometryTriangle.xhtml#acf3dd4c6616b36509791e2896595d16e)() const;

<a id="l00229" name="l00229"></a> 229 

<a id="l00236" name="l00236"></a>[ 236](structIRockyGeometryTriangle.xhtml#a6288e5b20aa8375b184529d1760d9a93) ROCKY_FUNCTIONS double [get\_thermal\_conductivity](structIRockyGeometryTriangle.xhtml#a6288e5b20aa8375b184529d1760d9a93)() const;

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

<a id="l00245" name="l00245"></a>[ 245](structIRockyGeometryTriangle.xhtml#ab93ed9aba28273a9a329a212457b0158) ROCKY_FUNCTIONS void [set\_thermal\_conductivity](structIRockyGeometryTriangle.xhtml#ab93ed9aba28273a9a329a212457b0158)(double value);

<a id="l00246" name="l00246"></a> 246 

<a id="l00253" name="l00253"></a>[ 253](structIRockyGeometryTriangle.xhtml#a362d59bc94cc55f1cb37d6fe00764a4b) ROCKY_FUNCTIONS double [get\_poisson\_ratio](structIRockyGeometryTriangle.xhtml#a362d59bc94cc55f1cb37d6fe00764a4b)() const;

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

<a id="l00262" name="l00262"></a>[ 262](structIRockyGeometryTriangle.xhtml#add105a1fd3ed0e38ad85c93d09ee4a27) ROCKY_FUNCTIONS void [set\_poisson\_ratio](structIRockyGeometryTriangle.xhtml#add105a1fd3ed0e38ad85c93d09ee4a27)(double value);

<a id="l00263" name="l00263"></a> 263 

<a id="l00268" name="l00268"></a>[ 268](structIRockyGeometryTriangle.xhtml#a525086257224ba19ec3bbfec2522bdba) ROCKY_FUNCTIONS [IRockyTriangleScalars](structIRockyTriangleScalars.xhtml) [get\_scalars](structIRockyGeometryTriangle.xhtml#a525086257224ba19ec3bbfec2522bdba)();

<a id="l00269" name="l00269"></a> 269 

<a id="l00270" name="l00270"></a> 270\#endif

<a id="l00271" name="l00271"></a> 271 

<a id="l00272" name="l00272"></a> 272};



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

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

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

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

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

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

<a id="l00284" name="l00284"></a>[ 284](structIRockyGeometryTriangleHost.xhtml)struct [IRockyGeometryTriangleHost](structIRockyGeometryTriangleHost.xhtml) : public IRockyGeometryTriangleImpl&lt;RockyModel&gt;

<a id="l00285" name="l00285"></a> 285{

<a id="l00288" name="l00288"></a> 288 [IRockyGeometryTriangleHost](structIRockyGeometryTriangleHost.xhtml)(int _index, RockyModel* _model)

<a id="l00289" name="l00289"></a> 289 : IRockyGeometryTriangleImpl(_index, _model, true)

<a id="l00290" name="l00290"></a> 290 {}

<a id="l00291" name="l00291"></a> 291 

<a id="l00295" name="l00295"></a> 295\#ifdef ONLY\_FOR\_DOXYGEN

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

<a id="l00298" name="l00298"></a>[ 298](structIRockyGeometryTriangleHost.xhtml#a4d4f0981020bd999343324777061578f) ROCKY_FUNCTIONS [IRockyMaterial](structIRockyMaterial.xhtml) [get\_material](structIRockyGeometryTriangleHost.xhtml#a4d4f0981020bd999343324777061578f)() const;

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

<a id="l00301" name="l00301"></a>[ 301](structIRockyGeometryTriangleHost.xhtml#acf71ec5c2b5cf6d20f276e3e11cf5ede) ROCKY_FUNCTIONS double3 [get\_normal\_unit\_vector](structIRockyGeometryTriangleHost.xhtml#acf71ec5c2b5cf6d20f276e3e11cf5ede)() const;

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

<a id="l00304" name="l00304"></a>[ 304](structIRockyGeometryTriangleHost.xhtml#ab782a5e82eba4116e3fdc03086ac6e70) ROCKY_FUNCTIONS double [get\_area](structIRockyGeometryTriangleHost.xhtml#ab782a5e82eba4116e3fdc03086ac6e70)() const;

<a id="l00305" name="l00305"></a> 305 

<a id="l00307" name="l00307"></a>[ 307](structIRockyGeometryTriangleHost.xhtml#ae049045265b3b4d44366e60086052049) ROCKY_FUNCTIONS double3 [get\_centroid](structIRockyGeometryTriangleHost.xhtml#ae049045265b3b4d44366e60086052049)() const;

<a id="l00308" name="l00308"></a> 308 

<a id="l00310" name="l00310"></a>[ 310](structIRockyGeometryTriangleHost.xhtml#a90f497b2b42411676707aae7b1c73dbc) ROCKY_FUNCTIONS int [get\_geometry\_index](structIRockyGeometryTriangleHost.xhtml#a90f497b2b42411676707aae7b1c73dbc)() const;

<a id="l00311" name="l00311"></a> 311 

<a id="l00313" name="l00313"></a>[ 313](structIRockyGeometryTriangleHost.xhtml#ab68909270e06bc1b702c11e54fc39b87) ROCKY_FUNCTIONS int [get\_material\_index](structIRockyGeometryTriangleHost.xhtml#ab68909270e06bc1b702c11e54fc39b87)() const;

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

<a id="l00316" name="l00316"></a>[ 316](structIRockyGeometryTriangleHost.xhtml#af55f61fe49b8582002b87e1c5d4db703) ROCKY_FUNCTIONS double3 [get\_translational\_velocity](structIRockyGeometryTriangleHost.xhtml#af55f61fe49b8582002b87e1c5d4db703)(double current_time) const;

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

<a id="l00319" name="l00319"></a>[ 319](structIRockyGeometryTriangleHost.xhtml#a1d39d94664969c8e81279f4d395cfd7e) ROCKY_FUNCTIONS double3 [get\_geometry\_rotational\_velocity](structIRockyGeometryTriangleHost.xhtml#a1d39d94664969c8e81279f4d395cfd7e)() const;

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

<a id="l00322" name="l00322"></a>[ 322](structIRockyGeometryTriangleHost.xhtml#a35e0413744dea0b6d847172dec76ada4) ROCKY_FUNCTIONS double3 [get\_geometry\_rotation\_center](structIRockyGeometryTriangleHost.xhtml#a35e0413744dea0b6d847172dec76ada4)() const;

<a id="l00323" name="l00323"></a> 323 

<a id="l00325" name="l00325"></a>[ 325](structIRockyGeometryTriangleHost.xhtml#ad63935796d98370d0164f0e700639a82) ROCKY_FUNCTIONS double [get\_temperature](structIRockyGeometryTriangleHost.xhtml#ad63935796d98370d0164f0e700639a82)() const;

<a id="l00326" name="l00326"></a> 326 

<a id="l00328" name="l00328"></a>[ 328](structIRockyGeometryTriangleHost.xhtml#a2da990675204aa1b75f7d99d27d0edf4) ROCKY_FUNCTIONS void [set\_temperature](structIRockyGeometryTriangleHost.xhtml#a2da990675204aa1b75f7d99d27d0edf4)(double value);

<a id="l00329" name="l00329"></a> 329 

<a id="l00331" name="l00331"></a>[ 331](structIRockyGeometryTriangleHost.xhtml#a296b5f25ba526e166233ecc93a361840) ROCKY_FUNCTIONS bool [is\_adiabatic](structIRockyGeometryTriangleHost.xhtml#a296b5f25ba526e166233ecc93a361840)() const;

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

<a id="l00334" name="l00334"></a>[ 334](structIRockyGeometryTriangleHost.xhtml#aba16fb8ad2df2dc54ff931c091850675) ROCKY_FUNCTIONS double [get\_thermal\_conductivity](structIRockyGeometryTriangleHost.xhtml#aba16fb8ad2df2dc54ff931c091850675)() const;

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

<a id="l00337" name="l00337"></a>[ 337](structIRockyGeometryTriangleHost.xhtml#a4b7dc627f3943f1a897e28c3219da0ba) ROCKY_FUNCTIONS void [set\_thermal\_conductivity](structIRockyGeometryTriangleHost.xhtml#a4b7dc627f3943f1a897e28c3219da0ba)(double value);

<a id="l00338" name="l00338"></a> 338 

<a id="l00340" name="l00340"></a>[ 340](structIRockyGeometryTriangleHost.xhtml#a48d3df84ac1785c1ada100faad008624) ROCKY_FUNCTIONS double [get\_poisson\_ratio](structIRockyGeometryTriangleHost.xhtml#a48d3df84ac1785c1ada100faad008624)() const;

<a id="l00341" name="l00341"></a> 341 

<a id="l00343" name="l00343"></a>[ 343](structIRockyGeometryTriangleHost.xhtml#a53c07e03e2af77cfe1549d7ad9ac22ee) ROCKY_FUNCTIONS void [set\_poisson\_ratio](structIRockyGeometryTriangleHost.xhtml#a53c07e03e2af77cfe1549d7ad9ac22ee)(double value);

<a id="l00344" name="l00344"></a> 344 

<a id="l00346" name="l00346"></a>[ 346](structIRockyGeometryTriangleHost.xhtml#a32507720156ec81050cfe8c9179a18a2) ROCKY_FUNCTIONS [IRockyTriangleScalars](structIRockyTriangleScalars.xhtml) [get\_scalars](structIRockyGeometryTriangleHost.xhtml#a32507720156ec81050cfe8c9179a18a2)();

<a id="l00347" name="l00347"></a> 347 

<a id="l00348" name="l00348"></a> 348\#endif

<a id="l00349" name="l00349"></a> 349 

<a id="l00350" name="l00350"></a> 350};



<a id="l00351" name="l00351"></a> 351 

<a id="l00352" name="l00352"></a> 352// Legacy structs

<a id="l00353" name="l00353"></a> 353 

<a id="l00354" name="l00354"></a> 354using [IRockyBoundaryTriangle](structIRockyGeometryTriangle.xhtml) = [IRockyGeometryTriangle](structIRockyGeometryTriangle.xhtml);

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

<a id="l00356" name="l00356"></a> 356using [IRockyBoundaryTriangleHost](structIRockyGeometryTriangleHost.xhtml) = [IRockyGeometryTriangleHost](structIRockyGeometryTriangleHost.xhtml);

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

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

<a id="l00359" name="l00359"></a> 359// ================================================================================================

<a id="l00360" name="l00360"></a> 360// IRockyGeometryMotionData

<a id="l00361" name="l00361"></a> 361// ================================================================================================

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

<a id="l00384" name="l00384"></a>[ 384](structIRockyGeometryMotionData.xhtml)struct [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml)

<a id="l00385" name="l00385"></a> 385{

<a id="l00389" name="l00389"></a> 389 int [get\_id](structIRockyGeometryMotionData.xhtml#a21c87d2c5d4ad69dfd28651613888be7)() const;

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

<a id="l00394" name="l00394"></a> 394 std::string [get\_name](structIRockyGeometryMotionData.xhtml#ae4a43219e823a55f3ced79f234d7a6d9)() const;

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

<a id="l00399" name="l00399"></a> 399 double3 [get\_force](structIRockyGeometryMotionData.xhtml#a5be8af9c351470d287879e3d6f2a10e9)() const;

<a id="l00400" name="l00400"></a> 400 

<a id="l00404" name="l00404"></a> 404 double3 [get\_moment](structIRockyGeometryMotionData.xhtml#af213ddfd08829027f4c45d73cf566ff1)() const;

<a id="l00405" name="l00405"></a> 405 

<a id="l00409" name="l00409"></a> 409 double3 [get\_position](structIRockyGeometryMotionData.xhtml#ac676748d6121c999c4d5097ab7246e08)() const;

<a id="l00410" name="l00410"></a> 410 

<a id="l00414" name="l00414"></a> 414 double3 [get\_translational\_velocity](structIRockyGeometryMotionData.xhtml#a08d097c2e959733cb32c365c3fb2eef7)() const;

<a id="l00415" name="l00415"></a> 415 

<a id="l00419" name="l00419"></a> 419 double4 [get\_orientation\_quaternion](structIRockyGeometryMotionData.xhtml#a1a5cc239a4d3485280530fc6a46fe9d4)() const;

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

<a id="l00426" name="l00426"></a> 426 double3 [get\_orientation\_euler\_angles](structIRockyGeometryMotionData.xhtml#a0dbec31c54d9c33096a0841ac1379fc2)() const;

<a id="l00427" name="l00427"></a> 427 

<a id="l00431" name="l00431"></a> 431 double3 [get\_rotational\_velocity](structIRockyGeometryMotionData.xhtml#ad0aa494b8066b46a6d983031d1a53538)() const;

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

<a id="l00444" name="l00444"></a> 444 void [set\_position](structIRockyGeometryMotionData.xhtml#ab3fc0d338a140c8ca95b78bd2e8c4c94)(double3 position);

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

<a id="l00454" name="l00454"></a> 454 void [set\_translational\_velocity](structIRockyGeometryMotionData.xhtml#a4f37dc923051f58381e6268199936eac)(double3 v);

<a id="l00455" name="l00455"></a> 455 

<a id="l00464" name="l00464"></a> 464 void [set\_orientation](structIRockyGeometryMotionData.xhtml#a7169363d2fe6b5631ce18293cb31144b)(double4 quat);

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

<a id="l00476" name="l00476"></a> 476 void [set\_orientation\_angles](structIRockyGeometryMotionData.xhtml#a059a62e2d9453660725a0dc88313c73c)(double3 angles);

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

<a id="l00486" name="l00486"></a> 486 void [set\_rotational\_velocity](structIRockyGeometryMotionData.xhtml#a90073262648b9550296f899fc4e85127)(double3 w);

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

<a id="l00492" name="l00492"></a> 492 bool [has\_linked\_motion\_frame](structIRockyGeometryMotionData.xhtml#a03b51d01d3dcaaff8bfbd132e92370e7)() const;

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

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

<a id="l00497" name="l00497"></a> 497 [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml)(unsigned int _index, RockyModel&amp; _model);

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

<a id="l00499" name="l00499"></a> 499 unsigned int geometry_index;

<a id="l00500" name="l00500"></a> 500 RockyModel&amp; model;

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

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



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

<a id="l00505" name="l00505"></a>[ 505](structIRockyGeometryMotionData.xhtml#a21c87d2c5d4ad69dfd28651613888be7)inline int [IRockyGeometryMotionData::get\_id](structIRockyGeometryMotionData.xhtml#a21c87d2c5d4ad69dfd28651613888be7)() const

<a id="l00506" name="l00506"></a> 506{

<a id="l00507" name="l00507"></a> 507 return this-&gt;geometry_index;

<a id="l00508" name="l00508"></a> 508}



<a id="l00509" name="l00509"></a> 509 

<a id="l00510" name="l00510"></a>[ 510](structIRockyGeometryMotionData.xhtml#ae4a43219e823a55f3ced79f234d7a6d9)inline std::string [IRockyGeometryMotionData::get\_name](structIRockyGeometryMotionData.xhtml#ae4a43219e823a55f3ced79f234d7a6d9)() const

<a id="l00511" name="l00511"></a> 511{

<a id="l00512" name="l00512"></a> 512 return this-&gt;model.bnd_h[this-&gt;geometry_index].name;

<a id="l00513" name="l00513"></a> 513}



<a id="l00514" name="l00514"></a> 514 

<a id="l00515" name="l00515"></a>[ 515](structIRockyGeometryMotionData.xhtml#a5be8af9c351470d287879e3d6f2a10e9)inline double3 [IRockyGeometryMotionData::get\_force](structIRockyGeometryMotionData.xhtml#a5be8af9c351470d287879e3d6f2a10e9)() const

<a id="l00516" name="l00516"></a> 516{

<a id="l00517" name="l00517"></a> 517 const cuda_boundary&amp; boundary = this-&gt;model.bnd[this-&gt;geometry_index];

<a id="l00518" name="l00518"></a> 518 return double3{ boundary.fx_inst, boundary.fy_inst, boundary.fz_inst };

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



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

<a id="l00521" name="l00521"></a>[ 521](structIRockyGeometryMotionData.xhtml#af213ddfd08829027f4c45d73cf566ff1)inline double3 [IRockyGeometryMotionData::get\_moment](structIRockyGeometryMotionData.xhtml#af213ddfd08829027f4c45d73cf566ff1)() const

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

<a id="l00523" name="l00523"></a> 523 const cuda_boundary&amp; boundary = this-&gt;model.bnd[this-&gt;geometry_index];

<a id="l00524" name="l00524"></a> 524 return double3{ boundary.mx_inst, boundary.my_inst, boundary.mz_inst };

<a id="l00525" name="l00525"></a> 525}



<a id="l00526" name="l00526"></a> 526 

<a id="l00527" name="l00527"></a>[ 527](structIRockyGeometryMotionData.xhtml#ac676748d6121c999c4d5097ab7246e08)inline double3 [IRockyGeometryMotionData::get\_position](structIRockyGeometryMotionData.xhtml#ac676748d6121c999c4d5097ab7246e08)() const

<a id="l00528" name="l00528"></a> 528{

<a id="l00529" name="l00529"></a> 529 const cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00530" name="l00530"></a> 530 return double3{ boundary.dx, boundary.dy, boundary.dz };

<a id="l00531" name="l00531"></a> 531}



<a id="l00532" name="l00532"></a> 532 

<a id="l00533" name="l00533"></a>[ 533](structIRockyGeometryMotionData.xhtml#a08d097c2e959733cb32c365c3fb2eef7)inline double3 [IRockyGeometryMotionData::get\_translational\_velocity](structIRockyGeometryMotionData.xhtml#a08d097c2e959733cb32c365c3fb2eef7)() const

<a id="l00534" name="l00534"></a> 534{

<a id="l00535" name="l00535"></a> 535 const cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00536" name="l00536"></a> 536 return double3{ boundary.ux, boundary.uy, boundary.uz };

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



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

<a id="l00539" name="l00539"></a>[ 539](structIRockyGeometryMotionData.xhtml#a1a5cc239a4d3485280530fc6a46fe9d4)inline double4 [IRockyGeometryMotionData::get\_orientation\_quaternion](structIRockyGeometryMotionData.xhtml#a1a5cc239a4d3485280530fc6a46fe9d4)() const

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

<a id="l00541" name="l00541"></a> 541 const cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00542" name="l00542"></a> 542 return double4{ boundary.quat[0], boundary.quat[1], boundary.quat[2], boundary.quat[3] };

<a id="l00543" name="l00543"></a> 543}



<a id="l00544" name="l00544"></a> 544 

<a id="l00545" name="l00545"></a>[ 545](structIRockyGeometryMotionData.xhtml#a0dbec31c54d9c33096a0841ac1379fc2)inline double3 [IRockyGeometryMotionData::get\_orientation\_euler\_angles](structIRockyGeometryMotionData.xhtml#a0dbec31c54d9c33096a0841ac1379fc2)() const

<a id="l00546" name="l00546"></a> 546{

<a id="l00547" name="l00547"></a> 547 cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00548" name="l00548"></a> 548 const auto&amp; quat = boundary.quat;

<a id="l00549" name="l00549"></a> 549 double3 euler_angles;

<a id="l00550" name="l00550"></a> 550 // roll (x-axis rotation)

<a id="l00551" name="l00551"></a> 551 double sinr_cosp = 2.0 * (quat[0] * quat[1] + quat[2] * quat[3]);

<a id="l00552" name="l00552"></a> 552 double cosr_cosp = 1.0 - 2.0 * (quat[1] * quat[1] + quat[2] * quat[2]);

<a id="l00553" name="l00553"></a> 553 euler_angles.x = std::atan2(sinr_cosp, cosr_cosp);

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

<a id="l00555" name="l00555"></a> 555 // pitch (y-axis rotation)

<a id="l00556" name="l00556"></a> 556 double sinp = 2 * (quat[0] * quat[2] - quat[3] * quat[1]);

<a id="l00557" name="l00557"></a> 557 if (std::abs(sinp) &gt;= 1.0)

<a id="l00558" name="l00558"></a> 558 euler_angles.y = std::copysign(M_PI / 2, sinp); // use 90 degrees if out of range

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

<a id="l00560" name="l00560"></a> 560 euler_angles.y = std::asin(sinp);

<a id="l00561" name="l00561"></a> 561 

<a id="l00562" name="l00562"></a> 562 // yaw (z-axis rotation)

<a id="l00563" name="l00563"></a> 563 double siny_cosp = 2.0 * (quat[0] * quat[3] + quat[1] * quat[2]);

<a id="l00564" name="l00564"></a> 564 double cosy_cosp = 1.0 - 2.0 * (quat[2] * quat[2] + quat[3] * quat[3]);

<a id="l00565" name="l00565"></a> 565 euler_angles.z = std::atan2(siny_cosp, cosy_cosp);

<a id="l00566" name="l00566"></a> 566 

<a id="l00567" name="l00567"></a> 567 return euler_angles;

<a id="l00568" name="l00568"></a> 568}



<a id="l00569" name="l00569"></a> 569 

<a id="l00570" name="l00570"></a>[ 570](structIRockyGeometryMotionData.xhtml#ad0aa494b8066b46a6d983031d1a53538)inline double3 [IRockyGeometryMotionData::get\_rotational\_velocity](structIRockyGeometryMotionData.xhtml#ad0aa494b8066b46a6d983031d1a53538)() const

<a id="l00571" name="l00571"></a> 571{

<a id="l00572" name="l00572"></a> 572 const cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00573" name="l00573"></a> 573 return double3{ boundary.wx, boundary.wy, boundary.wz };

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



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

<a id="l00580" name="l00580"></a> 580inline void check_write(const [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml)* motionData)

<a id="l00581" name="l00581"></a> 581{

<a id="l00582" name="l00582"></a> 582 if (motionData-&gt;[has\_linked\_motion\_frame](structIRockyGeometryMotionData.xhtml#a03b51d01d3dcaaff8bfbd132e92370e7)())

<a id="l00583" name="l00583"></a> 583 {

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

<a id="l00585" name="l00585"></a> 585 ROCKY_RUNTIME_ERROR(

<a id="l00586" name="l00586"></a> 586 "Cannot overwrite motion data in geometry " &lt;&lt; motionData-&gt;[get\_name](structIRockyGeometryMotionData.xhtml#ae4a43219e823a55f3ced79f234d7a6d9)()

<a id="l00587" name="l00587"></a> 587 &lt;&lt; " because it is already linked to a motion frame.\\nPlease review your setup.")

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

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

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

<a id="l00591" name="l00591"></a>[ 591](structIRockyGeometryMotionData.xhtml#ab3fc0d338a140c8ca95b78bd2e8c4c94)inline void [IRockyGeometryMotionData::set\_position](structIRockyGeometryMotionData.xhtml#ab3fc0d338a140c8ca95b78bd2e8c4c94)(double3 p)

<a id="l00592" name="l00592"></a> 592{

<a id="l00593" name="l00593"></a> 593 check_write(this);

<a id="l00594" name="l00594"></a> 594 cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00595" name="l00595"></a> 595 boundary.previous_frame_center = boundary.get_current_frame_center();

<a id="l00596" name="l00596"></a> 596 boundary.dx = p.x;

<a id="l00597" name="l00597"></a> 597 boundary.dy = p.y;

<a id="l00598" name="l00598"></a> 598 boundary.dz = p.z;

<a id="l00599" name="l00599"></a> 599}



<a id="l00600" name="l00600"></a> 600 

<a id="l00601" name="l00601"></a>[ 601](structIRockyGeometryMotionData.xhtml#a4f37dc923051f58381e6268199936eac)inline void [IRockyGeometryMotionData::set\_translational\_velocity](structIRockyGeometryMotionData.xhtml#a4f37dc923051f58381e6268199936eac)(double3 v)

<a id="l00602" name="l00602"></a> 602{

<a id="l00603" name="l00603"></a> 603 check_write(this);

<a id="l00604" name="l00604"></a> 604 cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00605" name="l00605"></a> 605 boundary.previous_linear_velocity = boundary.get_linear_velocity();

<a id="l00606" name="l00606"></a> 606 boundary.ux = v.x;

<a id="l00607" name="l00607"></a> 607 boundary.uy = v.y;

<a id="l00608" name="l00608"></a> 608 boundary.uz = v.z;

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



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

<a id="l00611" name="l00611"></a>[ 611](structIRockyGeometryMotionData.xhtml#a7169363d2fe6b5631ce18293cb31144b)inline void [IRockyGeometryMotionData::set\_orientation](structIRockyGeometryMotionData.xhtml#a7169363d2fe6b5631ce18293cb31144b)(double4 quat)

<a id="l00612" name="l00612"></a> 612{

<a id="l00613" name="l00613"></a> 613 check_write(this);

<a id="l00614" name="l00614"></a> 614 cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00615" name="l00615"></a> 615 rocky::transform::quaternion_conjugation(boundary.quat);

<a id="l00616" name="l00616"></a> 616 boundary.rotation_delta = rocky::transform::quaternion_product&lt;true&gt;(

<a id="l00617" name="l00617"></a> 617 quat, rocky::transform::cast_quaternion(boundary.quat));

<a id="l00618" name="l00618"></a> 618 boundary.quat[0] = quat.w;

<a id="l00619" name="l00619"></a> 619 boundary.quat[1] = quat.x;

<a id="l00620" name="l00620"></a> 620 boundary.quat[2] = quat.y;

<a id="l00621" name="l00621"></a> 621 boundary.quat[3] = quat.z;

<a id="l00622" name="l00622"></a> 622 SRotationMatrixD::wrap(boundary.a).set_quaternion(boundary.quat);

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



<a id="l00624" name="l00624"></a> 624 

<a id="l00625" name="l00625"></a>[ 625](structIRockyGeometryMotionData.xhtml#a059a62e2d9453660725a0dc88313c73c)inline void [IRockyGeometryMotionData::set\_orientation\_angles](structIRockyGeometryMotionData.xhtml#a059a62e2d9453660725a0dc88313c73c)(double3 angles)

<a id="l00626" name="l00626"></a> 626{

<a id="l00627" name="l00627"></a> 627 check_write(this);

<a id="l00628" name="l00628"></a> 628 cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00629" name="l00629"></a> 629 double cos_roll = cos(angles.x / 2.0);

<a id="l00630" name="l00630"></a> 630 double sin_roll = sin(angles.x / 2.0);

<a id="l00631" name="l00631"></a> 631 double cos_pitch = cos(angles.y / 2.0);

<a id="l00632" name="l00632"></a> 632 double sin_pitch = sin(angles.y / 2.0);

<a id="l00633" name="l00633"></a> 633 double cos_yaw = cos(angles.z / 2.0);

<a id="l00634" name="l00634"></a> 634 double sin_yaw = sin(angles.z / 2.0);

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

<a id="l00636" name="l00636"></a> 636 double previous_quat[4] {

<a id="l00637" name="l00637"></a> 637 boundary.quat[0], boundary.quat[1], boundary.quat[2], boundary.quat[3]

<a id="l00638" name="l00638"></a> 638 };

<a id="l00639" name="l00639"></a> 639 rocky::transform::quaternion_conjugation(previous_quat);

<a id="l00640" name="l00640"></a> 640 boundary.quat[0] = cos_roll * cos_pitch * cos_yaw + sin_roll * sin_pitch * sin_yaw;

<a id="l00641" name="l00641"></a> 641 boundary.quat[1] = sin_roll * cos_pitch * cos_yaw - cos_roll * sin_pitch * sin_yaw;

<a id="l00642" name="l00642"></a> 642 boundary.quat[2] = cos_roll * sin_pitch * cos_yaw + sin_roll * cos_pitch * sin_yaw;

<a id="l00643" name="l00643"></a> 643 boundary.quat[3] = cos_roll * cos_pitch * sin_yaw - sin_roll * sin_pitch * cos_yaw;

<a id="l00644" name="l00644"></a> 644 SRotationMatrixD::wrap(boundary.a).set_quaternion(boundary.quat);

<a id="l00645" name="l00645"></a> 645 boundary.rotation_delta = rocky::transform::quaternion_product&lt;true&gt;(

<a id="l00646" name="l00646"></a> 646 rocky::transform::cast_quaternion(boundary.quat),

<a id="l00647" name="l00647"></a> 647 rocky::transform::cast_quaternion(previous_quat));

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



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

<a id="l00650" name="l00650"></a>[ 650](structIRockyGeometryMotionData.xhtml#a90073262648b9550296f899fc4e85127)inline void [IRockyGeometryMotionData::set\_rotational\_velocity](structIRockyGeometryMotionData.xhtml#a90073262648b9550296f899fc4e85127)(double3 w)

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

<a id="l00652" name="l00652"></a> 652 check_write(this);

<a id="l00653" name="l00653"></a> 653 cuda_boundary_host&amp; boundary = this-&gt;model.bnd_h[this-&gt;geometry_index];

<a id="l00654" name="l00654"></a> 654 boundary.previous_angular_velocity = boundary.get_angular_velocity();

<a id="l00655" name="l00655"></a> 655 boundary.wx = w.x;

<a id="l00656" name="l00656"></a> 656 boundary.wy = w.y;

<a id="l00657" name="l00657"></a> 657 boundary.wz = w.z;

<a id="l00658" name="l00658"></a> 658}



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

<a id="l00660" name="l00660"></a>[ 660](structIRockyGeometryMotionData.xhtml#a03b51d01d3dcaaff8bfbd132e92370e7)inline bool [IRockyGeometryMotionData::has\_linked\_motion\_frame](structIRockyGeometryMotionData.xhtml#a03b51d01d3dcaaff8bfbd132e92370e7)() const

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

<a id="l00662" name="l00662"></a> 662 return this-&gt;model.boundary_has_linked_frame(this-&gt;geometry_index);

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



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

<a id="l00665" name="l00665"></a> 665inline IRockyGeometryMotionData::IRockyGeometryMotionData(unsigned int _index, RockyModel&amp; _model)

<a id="l00666" name="l00666"></a> 666 : model(_model)

<a id="l00667" name="l00667"></a> 667 , geometry_index(_index)

<a id="l00668" name="l00668"></a> 668{

<a id="l00669" name="l00669"></a> 669}

<a id="l00670" name="l00670"></a> 670 

<a id="l00671" name="l00671"></a> 671// ================================================================================================

<a id="l00672" name="l00672"></a> 672// IRockyGeometriesMotionData

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

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

<a id="l00683" name="l00683"></a>[ 683](structIRockyGeometriesMotionData.xhtml)struct [IRockyGeometriesMotionData](structIRockyGeometriesMotionData.xhtml)

<a id="l00684" name="l00684"></a> 684{

<a id="l00688" name="l00688"></a> 688 unsigned int [get\_number\_of\_geometries](structIRockyGeometriesMotionData.xhtml#a089856efc3afdea2fdf9c90652e411e8)() const;

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

<a id="l00698" name="l00698"></a> 698 [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml) [get\_geometry](structIRockyGeometriesMotionData.xhtml#a36a8aa9aa2bd497f7381980b78c83cb9)(unsigned int id) const;

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

<a id="l00708" name="l00708"></a> 708 [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml) [get\_geometry](structIRockyGeometriesMotionData.xhtml#a36a8aa9aa2bd497f7381980b78c83cb9)(const std::string&amp; name) const;

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

<a id="l00715" name="l00715"></a> 715 bool [has\_linked\_motion\_frame](structIRockyGeometriesMotionData.xhtml#a0a9f25ad715ac525854a83d7b591100f)(unsigned int id) const;

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

<a id="l00719" name="l00719"></a> 719 [IRockyGeometriesMotionData](structIRockyGeometriesMotionData.xhtml)(RockyModel&amp; _model);

<a id="l00720" name="l00720"></a> 720 

<a id="l00721" name="l00721"></a> 721 RockyModel&amp; model;

<a id="l00722" name="l00722"></a> 722 

<a id="l00724" name="l00724"></a> 724};



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

<a id="l00726" name="l00726"></a>[ 726](structIRockyGeometriesMotionData.xhtml#a089856efc3afdea2fdf9c90652e411e8)inline unsigned int [IRockyGeometriesMotionData::get\_number\_of\_geometries](structIRockyGeometriesMotionData.xhtml#a089856efc3afdea2fdf9c90652e411e8)() const

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

<a id="l00728" name="l00728"></a> 728 return this-&gt;model.gen.nbnd;

<a id="l00729" name="l00729"></a> 729}



<a id="l00730" name="l00730"></a> 730 

<a id="l00731" name="l00731"></a>[ 731](structIRockyGeometriesMotionData.xhtml#a36a8aa9aa2bd497f7381980b78c83cb9)inline [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml) [IRockyGeometriesMotionData::get\_geometry](structIRockyGeometriesMotionData.xhtml#a36a8aa9aa2bd497f7381980b78c83cb9)(unsigned int id) const

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

<a id="l00733" name="l00733"></a> 733 if (id &gt;= (unsigned int)this-&gt;model.gen.nbnd)

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

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

<a id="l00736" name="l00736"></a> 736 "IRockyGeometriesMotionData: Not a valid geometry ID, must be less than "

<a id="l00737" name="l00737"></a> 737 &lt;&lt; this-&gt;model.gen.nbnd &lt;&lt; ".")

<a id="l00738" name="l00738"></a> 738 }

<a id="l00739" name="l00739"></a> 739 return [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml)(id, this-&gt;model);

<a id="l00740" name="l00740"></a> 740}



<a id="l00741" name="l00741"></a> 741 

<a id="l00742" name="l00742"></a>[ 742](structIRockyGeometriesMotionData.xhtml#a97350213657a5dfca98e787a4200ccc7)inline [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml) [IRockyGeometriesMotionData::get\_geometry](structIRockyGeometriesMotionData.xhtml#a36a8aa9aa2bd497f7381980b78c83cb9)(

<a id="l00743" name="l00743"></a> 743 const std::string&amp; name) const

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

<a id="l00745" name="l00745"></a> 745 const auto &amp;begin = this-&gt;model.bnd_h.begin();

<a id="l00746" name="l00746"></a> 746 const auto &amp;end = this-&gt;model.bnd_h.end();

<a id="l00747" name="l00747"></a> 747 auto it = std::find_if(

<a id="l00748" name="l00748"></a> 748 begin, end, [name](cuda_boundary_host&amp; boundary) {

<a id="l00749" name="l00749"></a> 749 return boundary.name == name;

<a id="l00750" name="l00750"></a> 750 });

<a id="l00751" name="l00751"></a> 751 if (it == end)

<a id="l00752" name="l00752"></a> 752 {

<a id="l00753" name="l00753"></a> 753 ROCKY_RUNTIME_ERROR("IRockyGeometriesMotionData: Not a valid geometry name.")

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

<a id="l00755" name="l00755"></a> 755 return [IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml)((unsigned int)std::distance(begin, it), this-&gt;model);

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



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

<a id="l00758" name="l00758"></a>[ 758](structIRockyGeometriesMotionData.xhtml#a0a9f25ad715ac525854a83d7b591100f)inline bool [IRockyGeometriesMotionData::has\_linked\_motion\_frame](structIRockyGeometriesMotionData.xhtml#a0a9f25ad715ac525854a83d7b591100f)(unsigned int id) const

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

<a id="l00760" name="l00760"></a> 760 return this-&gt;model.boundary_has_linked_frame(id);

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



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

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

<a id="l00764" name="l00764"></a> 764inline IRockyGeometriesMotionData::IRockyGeometriesMotionData(RockyModel&amp; _model)

<a id="l00765" name="l00765"></a> 765 : model(_model)

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

<a id="l00767" name="l00767"></a> 767}

[IRockyGeometriesMotionData](structIRockyGeometriesMotionData.xhtml)

**Definition** rocky_boundary_api.hpp:684



[IRockyGeometriesMotionData::get\_number\_of\_geometries](structIRockyGeometriesMotionData.xhtml#a089856efc3afdea2fdf9c90652e411e8)

unsigned int get_number_of_geometries() const

**Definition** rocky_boundary_api.hpp:726



[IRockyGeometriesMotionData::has\_linked\_motion\_frame](structIRockyGeometriesMotionData.xhtml#a0a9f25ad715ac525854a83d7b591100f)

bool has_linked_motion_frame(unsigned int id) const

**Definition** rocky_boundary_api.hpp:758



[IRockyGeometriesMotionData::get\_geometry](structIRockyGeometriesMotionData.xhtml#a36a8aa9aa2bd497f7381980b78c83cb9)

IRockyGeometryMotionData get_geometry(unsigned int id) const

**Definition** rocky_boundary_api.hpp:731



[IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml)

**Definition** rocky_boundary_api.hpp:385



[IRockyGeometryMotionData::has\_linked\_motion\_frame](structIRockyGeometryMotionData.xhtml#a03b51d01d3dcaaff8bfbd132e92370e7)

bool has_linked_motion_frame() const

**Definition** rocky_boundary_api.hpp:660



[IRockyGeometryMotionData::set\_orientation\_angles](structIRockyGeometryMotionData.xhtml#a059a62e2d9453660725a0dc88313c73c)

void set_orientation_angles(double3 angles)

**Definition** rocky_boundary_api.hpp:625



[IRockyGeometryMotionData::get\_translational\_velocity](structIRockyGeometryMotionData.xhtml#a08d097c2e959733cb32c365c3fb2eef7)

double3 get_translational_velocity() const

**Definition** rocky_boundary_api.hpp:533



[IRockyGeometryMotionData::get\_orientation\_euler\_angles](structIRockyGeometryMotionData.xhtml#a0dbec31c54d9c33096a0841ac1379fc2)

double3 get_orientation_euler_angles() const

**Definition** rocky_boundary_api.hpp:545



[IRockyGeometryMotionData::get\_orientation\_quaternion](structIRockyGeometryMotionData.xhtml#a1a5cc239a4d3485280530fc6a46fe9d4)

double4 get_orientation_quaternion() const

**Definition** rocky_boundary_api.hpp:539



[IRockyGeometryMotionData::get\_id](structIRockyGeometryMotionData.xhtml#a21c87d2c5d4ad69dfd28651613888be7)

int get_id() const

**Definition** rocky_boundary_api.hpp:505



[IRockyGeometryMotionData::set\_translational\_velocity](structIRockyGeometryMotionData.xhtml#a4f37dc923051f58381e6268199936eac)

void set_translational_velocity(double3 v)

**Definition** rocky_boundary_api.hpp:601



[IRockyGeometryMotionData::get\_force](structIRockyGeometryMotionData.xhtml#a5be8af9c351470d287879e3d6f2a10e9)

double3 get_force() const

**Definition** rocky_boundary_api.hpp:515



[IRockyGeometryMotionData::set\_orientation](structIRockyGeometryMotionData.xhtml#a7169363d2fe6b5631ce18293cb31144b)

void set_orientation(double4 quat)

**Definition** rocky_boundary_api.hpp:611



[IRockyGeometryMotionData::set\_rotational\_velocity](structIRockyGeometryMotionData.xhtml#a90073262648b9550296f899fc4e85127)

void set_rotational_velocity(double3 w)

**Definition** rocky_boundary_api.hpp:650



[IRockyGeometryMotionData::set\_position](structIRockyGeometryMotionData.xhtml#ab3fc0d338a140c8ca95b78bd2e8c4c94)

void set_position(double3 position)

**Definition** rocky_boundary_api.hpp:591



[IRockyGeometryMotionData::get\_position](structIRockyGeometryMotionData.xhtml#ac676748d6121c999c4d5097ab7246e08)

double3 get_position() const

**Definition** rocky_boundary_api.hpp:527



[IRockyGeometryMotionData::get\_rotational\_velocity](structIRockyGeometryMotionData.xhtml#ad0aa494b8066b46a6d983031d1a53538)

double3 get_rotational_velocity() const

**Definition** rocky_boundary_api.hpp:570



[IRockyGeometryMotionData::get\_name](structIRockyGeometryMotionData.xhtml#ae4a43219e823a55f3ced79f234d7a6d9)

std::string get_name() const

**Definition** rocky_boundary_api.hpp:510



[IRockyGeometryMotionData::get\_moment](structIRockyGeometryMotionData.xhtml#af213ddfd08829027f4c45d73cf566ff1)

double3 get_moment() const

**Definition** rocky_boundary_api.hpp:521



[IRockyGeometryTriangleHost](structIRockyGeometryTriangleHost.xhtml)

**Definition** rocky_boundary_api.hpp:285



[IRockyGeometryTriangleHost::get\_geometry\_rotational\_velocity](structIRockyGeometryTriangleHost.xhtml#a1d39d94664969c8e81279f4d395cfd7e)

ROCKY_FUNCTIONS double3 get_geometry_rotational_velocity() const



[IRockyGeometryTriangleHost::is\_adiabatic](structIRockyGeometryTriangleHost.xhtml#a296b5f25ba526e166233ecc93a361840)

ROCKY_FUNCTIONS bool is_adiabatic() const



[IRockyGeometryTriangleHost::set\_temperature](structIRockyGeometryTriangleHost.xhtml#a2da990675204aa1b75f7d99d27d0edf4)

ROCKY_FUNCTIONS void set_temperature(double value)



[IRockyGeometryTriangleHost::get\_scalars](structIRockyGeometryTriangleHost.xhtml#a32507720156ec81050cfe8c9179a18a2)

ROCKY_FUNCTIONS IRockyTriangleScalars get_scalars()



[IRockyGeometryTriangleHost::get\_geometry\_rotation\_center](structIRockyGeometryTriangleHost.xhtml#a35e0413744dea0b6d847172dec76ada4)

ROCKY_FUNCTIONS double3 get_geometry_rotation_center() const



[IRockyGeometryTriangleHost::get\_poisson\_ratio](structIRockyGeometryTriangleHost.xhtml#a48d3df84ac1785c1ada100faad008624)

ROCKY_FUNCTIONS double get_poisson_ratio() const



[IRockyGeometryTriangleHost::set\_thermal\_conductivity](structIRockyGeometryTriangleHost.xhtml#a4b7dc627f3943f1a897e28c3219da0ba)

ROCKY_FUNCTIONS void set_thermal_conductivity(double value)



[IRockyGeometryTriangleHost::get\_material](structIRockyGeometryTriangleHost.xhtml#a4d4f0981020bd999343324777061578f)

ROCKY_FUNCTIONS IRockyMaterial get_material() const



[IRockyGeometryTriangleHost::set\_poisson\_ratio](structIRockyGeometryTriangleHost.xhtml#a53c07e03e2af77cfe1549d7ad9ac22ee)

ROCKY_FUNCTIONS void set_poisson_ratio(double value)



[IRockyGeometryTriangleHost::get\_geometry\_index](structIRockyGeometryTriangleHost.xhtml#a90f497b2b42411676707aae7b1c73dbc)

ROCKY_FUNCTIONS int get_geometry_index() const



[IRockyGeometryTriangleHost::get\_material\_index](structIRockyGeometryTriangleHost.xhtml#ab68909270e06bc1b702c11e54fc39b87)

ROCKY_FUNCTIONS int get_material_index() const



[IRockyGeometryTriangleHost::get\_area](structIRockyGeometryTriangleHost.xhtml#ab782a5e82eba4116e3fdc03086ac6e70)

ROCKY_FUNCTIONS double get_area() const



[IRockyGeometryTriangleHost::get\_thermal\_conductivity](structIRockyGeometryTriangleHost.xhtml#aba16fb8ad2df2dc54ff931c091850675)

ROCKY_FUNCTIONS double get_thermal_conductivity() const



[IRockyGeometryTriangleHost::get\_normal\_unit\_vector](structIRockyGeometryTriangleHost.xhtml#acf71ec5c2b5cf6d20f276e3e11cf5ede)

ROCKY_FUNCTIONS double3 get_normal_unit_vector() const



[IRockyGeometryTriangleHost::get\_temperature](structIRockyGeometryTriangleHost.xhtml#ad63935796d98370d0164f0e700639a82)

ROCKY_FUNCTIONS double get_temperature() const



[IRockyGeometryTriangleHost::get\_centroid](structIRockyGeometryTriangleHost.xhtml#ae049045265b3b4d44366e60086052049)

ROCKY_FUNCTIONS double3 get_centroid() const



[IRockyGeometryTriangleHost::get\_translational\_velocity](structIRockyGeometryTriangleHost.xhtml#af55f61fe49b8582002b87e1c5d4db703)

ROCKY_FUNCTIONS double3 get_translational_velocity(double current_time) const



[IRockyGeometryTriangle](structIRockyGeometryTriangle.xhtml)

**Definition** rocky_boundary_api.hpp:134



[IRockyGeometryTriangle::get\_poisson\_ratio](structIRockyGeometryTriangle.xhtml#a362d59bc94cc55f1cb37d6fe00764a4b)

ROCKY_FUNCTIONS double get_poisson_ratio() const



[IRockyGeometryTriangle::get\_normal\_unit\_vector](structIRockyGeometryTriangle.xhtml#a3dffe992b4dc3278be110fd792142b80)

ROCKY_FUNCTIONS double3 get_normal_unit_vector() const



[IRockyGeometryTriangle::set\_temperature](structIRockyGeometryTriangle.xhtml#a4286e7ea37b1863c8ea48d2fcd729b9c)

ROCKY_FUNCTIONS void set_temperature(double value)



[IRockyGeometryTriangle::get\_temperature](structIRockyGeometryTriangle.xhtml#a4ad4b4c3dbdb033213b9f68d4c497f68)

ROCKY_FUNCTIONS double get_temperature() const



[IRockyGeometryTriangle::get\_centroid](structIRockyGeometryTriangle.xhtml#a51271bd50959a8f2a353ac6673ee7fd7)

ROCKY_FUNCTIONS double3 get_centroid() const



[IRockyGeometryTriangle::get\_scalars](structIRockyGeometryTriangle.xhtml#a525086257224ba19ec3bbfec2522bdba)

ROCKY_FUNCTIONS IRockyTriangleScalars get_scalars()



[IRockyGeometryTriangle::get\_thermal\_conductivity](structIRockyGeometryTriangle.xhtml#a6288e5b20aa8375b184529d1760d9a93)

ROCKY_FUNCTIONS double get_thermal_conductivity() const



[IRockyGeometryTriangle::get\_geometry\_rotational\_velocity](structIRockyGeometryTriangle.xhtml#a67d418dcadcd12fa9314ec4891bae8e0)

ROCKY_FUNCTIONS double3 get_geometry_rotational_velocity() const



[IRockyGeometryTriangle::get\_translational\_velocity](structIRockyGeometryTriangle.xhtml#a704cfc661bc09630a2d7345d7ea53309)

ROCKY_FUNCTIONS double3 get_translational_velocity(double current_time) const



[IRockyGeometryTriangle::get\_geometry\_index](structIRockyGeometryTriangle.xhtml#a8498939de6ea592bbfff2a4ec075f6ee)

ROCKY_FUNCTIONS int get_geometry_index() const



[IRockyGeometryTriangle::get\_area](structIRockyGeometryTriangle.xhtml#a87f5f5f9d279e717777feb3a934bac82)

ROCKY_FUNCTIONS double get_area() const



[IRockyGeometryTriangle::get\_material\_index](structIRockyGeometryTriangle.xhtml#a9bcc3c8846e93fd1e9876ba328e6a09d)

ROCKY_FUNCTIONS int get_material_index() const



[IRockyGeometryTriangle::set\_thermal\_conductivity](structIRockyGeometryTriangle.xhtml#ab93ed9aba28273a9a329a212457b0158)

ROCKY_FUNCTIONS void set_thermal_conductivity(double value)



[IRockyGeometryTriangle::is\_adiabatic](structIRockyGeometryTriangle.xhtml#acf3dd4c6616b36509791e2896595d16e)

ROCKY_FUNCTIONS bool is_adiabatic() const



[IRockyGeometryTriangle::get\_geometry\_rotation\_center](structIRockyGeometryTriangle.xhtml#ad41c1ad766c0a34a978c5c59add829e7)

ROCKY_FUNCTIONS double3 get_geometry_rotation_center() const



[IRockyGeometryTriangle::get\_material](structIRockyGeometryTriangle.xhtml#ad93dcca6decba182b3cc02e95bd09c38)

ROCKY_FUNCTIONS IRockyMaterial get_material() const



[IRockyGeometryTriangle::set\_poisson\_ratio](structIRockyGeometryTriangle.xhtml#add105a1fd3ed0e38ad85c93d09ee4a27)

ROCKY_FUNCTIONS void set_poisson_ratio(double value)



[IRockyMaterial](structIRockyMaterial.xhtml)

**Definition** rocky_material_api.hpp:20



[IRockyTriangleScalars](structIRockyTriangleScalars.xhtml)

**Definition** rocky_triangle_scalars.hpp:160