    

 ## On this page

  

 

 # rocky\_boundary\_api

 Last update: 16.07.2025 

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

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

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

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

<a id="l00005" name="l00005"></a> 5\#include &lt;rocky20/core/utils/rocky\_math.hpp&gt;

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

<a id="l00007" name="l00007"></a> 7\#include &lt;rocky20/device/device\_triangles.hpp&gt;

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

<a id="l00009" name="l00009"></a> 9\#include "rocky\_boundary.hpp"

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

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

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

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

<a id="l00014" name="l00014"></a> 14 

<a id="l00017" name="l00017"></a> 17template &lt;typename Model&gt;

<a id="l00018" name="l00018"></a> 18struct IRockyGeometryTriangleImpl

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

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

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

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

<a id="l00023" name="l00023"></a> 23 }

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

<a id="l00025" name="l00025"></a> 25 ROCKY_FUNCTIONS double3 get_normal_unit_vector() const

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

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

<a id="l00028" name="l00028"></a> 28 }

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

<a id="l00030" name="l00030"></a> 30 ROCKY_FUNCTIONS double get_area() const

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

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

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

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

<a id="l00035" name="l00035"></a> 35 ROCKY_FUNCTIONS double3 get_centroid() const

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

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

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

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

<a id="l00040" name="l00040"></a> 40 ROCKY_FUNCTIONS int get_geometry_index() const

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

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

<a id="l00043" name="l00043"></a> 43 }

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

<a id="l00045" name="l00045"></a> 45 ROCKY_FUNCTIONS int get_material_index() const

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

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

<a id="l00048" name="l00048"></a> 48 }

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

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

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

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

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

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

<a id="l00055" name="l00055"></a> 55 ROCKY_FUNCTIONS double3 get_geometry_rotational_velocity() const

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

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

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

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

<a id="l00060" name="l00060"></a> 60 ROCKY_FUNCTIONS double3 get_triangle_center_velocity(const double current_time) const

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

<a id="l00062" name="l00062"></a> 62 return device::get_boundary_velocity_at_contact(

<a id="l00063" name="l00063"></a> 63 this-&gt;_impl.get_boundary(),

<a id="l00064" name="l00064"></a> 64 this-&gt;_impl.get_boundary_matrix(),

<a id="l00065" name="l00065"></a> 65 this-&gt;_impl.get_translational_velocity(current_time),

<a id="l00066" name="l00066"></a> 66 this-&gt;_impl.get_centroid(),

<a id="l00067" name="l00067"></a> 67 current_time);

<a id="l00068" name="l00068"></a> 68 }

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

<a id="l00070" name="l00070"></a> 70 ROCKY_FUNCTIONS double3 get_geometry_rotation_center() const

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

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

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

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

<a id="l00075" name="l00075"></a> 75 ROCKY_FUNCTIONS double get_temperature() const

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

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

<a id="l00078" name="l00078"></a> 78 }

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

<a id="l00080" name="l00080"></a> 80 ROCKY_FUNCTIONS void set_temperature(double value)

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

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

<a id="l00083" name="l00083"></a> 83 }

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

<a id="l00085" name="l00085"></a> 85 ROCKY_FUNCTIONS bool is_adiabatic() const

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

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

<a id="l00088" name="l00088"></a> 88 }

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

<a id="l00090" name="l00090"></a> 90 ROCKY_FUNCTIONS double get_thermal_conductivity() const

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

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

<a id="l00093" name="l00093"></a> 93 }

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

<a id="l00095" name="l00095"></a> 95 ROCKY_FUNCTIONS void set_thermal_conductivity(double value)

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

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

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

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

<a id="l00100" name="l00100"></a> 100 ROCKY_FUNCTIONS double get_poisson_ratio() const

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

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

<a id="l00103" name="l00103"></a> 103 }

<a id="l00104" name="l00104"></a> 104 

<a id="l00105" name="l00105"></a> 105 ROCKY_FUNCTIONS void set_poisson_ratio(double value)

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

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

<a id="l00108" name="l00108"></a> 108 }

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

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

<a id="l00111" name="l00111"></a> 111 {

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

<a id="l00113" name="l00113"></a> 113 }

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

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

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

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

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

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

<a id="l00120" name="l00120"></a> 120 RockyBoundaryTriangle&lt;Model&gt; _impl;

<a id="l00121" name="l00121"></a> 121};

<a id="l00122" name="l00122"></a> 122 

<a id="l00126" name="l00126"></a> 126// ================================================================================================

<a id="l00127" name="l00127"></a> 127// IRockyGeometryTriangle

<a id="l00128" name="l00128"></a> 128// ================================================================================================

<a id="l00129" name="l00129"></a> 129 

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

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

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

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

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

<a id="l00152" name="l00152"></a> 152 

<a id="l00155" name="l00155"></a> 155\#ifdef ONLY\_FOR\_DOXYGEN

<a id="l00156" name="l00156"></a> 156 

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

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

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

<a id="l00171" name="l00171"></a> 171 

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

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

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

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

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

<a id="l00187" name="l00187"></a> 187 

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

<a id="l00193" name="l00193"></a> 193 

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

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

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

<a id="l00208" name="l00208"></a> 208 

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

<a id="l00214" name="l00214"></a> 214 

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

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

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

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

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

<a id="l00241" name="l00241"></a> 241 

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

<a id="l00249" name="l00249"></a> 249 

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

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

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

<a id="l00266" name="l00266"></a> 266 

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

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

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

<a id="l00281" name="l00281"></a> 281 

<a id="l00282" name="l00282"></a> 282\#endif

<a id="l00283" name="l00283"></a> 283 

<a id="l00284" name="l00284"></a> 284};



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

<a id="l00286" name="l00286"></a> 286 

<a id="l00287" name="l00287"></a> 287// ================================================================================================

<a id="l00288" name="l00288"></a> 288// IRockyGeometryTriangleHost

<a id="l00289" name="l00289"></a> 289// ================================================================================================

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

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

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

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

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

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

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

<a id="l00307" name="l00307"></a> 307\#ifdef ONLY\_FOR\_DOXYGEN

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<a id="l00360" name="l00360"></a> 360\#endif

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

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



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

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

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

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

<a id="l00367" name="l00367"></a> 367 

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

<a id="l00369" name="l00369"></a> 369 

<a id="l00370" name="l00370"></a> 370 

<a id="l00371" name="l00371"></a> 371// ================================================================================================

<a id="l00372" name="l00372"></a> 372// IRockyGeometryMotionData

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

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

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

<a id="l00397" name="l00397"></a> 397{

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

<a id="l00402" name="l00402"></a> 402 

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

<a id="l00407" name="l00407"></a> 407 

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

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

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

<a id="l00417" name="l00417"></a> 417 

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

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

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

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

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

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

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

<a id="l00439" name="l00439"></a> 439 

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

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

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

<a id="l00457" name="l00457"></a> 457 

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

<a id="l00467" name="l00467"></a> 467 

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

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

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

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

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

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

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

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

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

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

<a id="l00510" name="l00510"></a> 510 

<a id="l00511" name="l00511"></a> 511 unsigned int geometry_index;

<a id="l00512" name="l00512"></a> 512 RockyModel&amp; model;

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

<a id="l00515" name="l00515"></a> 515};



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

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

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

<a id="l00519" name="l00519"></a> 519 return this-&gt;geometry_index;

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



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

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

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

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

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



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

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

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

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

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

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



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

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

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

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

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

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



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

<a id="l00539" name="l00539"></a>[ 539](structIRockyGeometryMotionData.xhtml#ac676748d6121c999c4d5097ab7246e08)inline double3 [IRockyGeometryMotionData::get\_position](structIRockyGeometryMotionData.xhtml#ac676748d6121c999c4d5097ab7246e08)() 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 double3{ boundary.dx, boundary.dy, boundary.dz };

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



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

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

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

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

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

<a id="l00549" name="l00549"></a> 549}



<a id="l00550" name="l00550"></a> 550 

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

<a id="l00552" name="l00552"></a> 552{

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

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

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



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

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

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

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

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

<a id="l00561" name="l00561"></a> 561 double3 euler_angles;

<a id="l00562" name="l00562"></a> 562 // roll (x-axis rotation)

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

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

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

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

<a id="l00567" name="l00567"></a> 567 // pitch (y-axis rotation)

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

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

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

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

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

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

<a id="l00574" name="l00574"></a> 574 // yaw (z-axis rotation)

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

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

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

<a id="l00578" name="l00578"></a> 578 

<a id="l00579" name="l00579"></a> 579 return euler_angles;

<a id="l00580" name="l00580"></a> 580}



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

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

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

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

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

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



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

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

<a id="l00593" name="l00593"></a> 593{

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

<a id="l00595" name="l00595"></a> 595 {

<a id="l00596" name="l00596"></a> 596 

<a id="l00597" name="l00597"></a> 597 ROCKY_RUNTIME_ERROR(

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

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

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

<a id="l00601" name="l00601"></a> 601}

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

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

<a id="l00604" name="l00604"></a> 604{

<a id="l00605" name="l00605"></a> 605 check_write(this);

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

<a id="l00607" name="l00607"></a> 607 boundary.previous_frame_center = boundary.get_current_frame_center();

<a id="l00608" name="l00608"></a> 608 boundary.dx = p.x;

<a id="l00609" name="l00609"></a> 609 boundary.dy = p.y;

<a id="l00610" name="l00610"></a> 610 boundary.dz = p.z;

<a id="l00611" name="l00611"></a> 611}



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

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

<a id="l00614" name="l00614"></a> 614{

<a id="l00615" name="l00615"></a> 615 check_write(this);

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

<a id="l00617" name="l00617"></a> 617 boundary.previous_linear_velocity = boundary.get_linear_velocity();

<a id="l00618" name="l00618"></a> 618 boundary.ux = v.x;

<a id="l00619" name="l00619"></a> 619 boundary.uy = v.y;

<a id="l00620" name="l00620"></a> 620 boundary.uz = v.z;

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



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

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

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

<a id="l00625" name="l00625"></a> 625 check_write(this);

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

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

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

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

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

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

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

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

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

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



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

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

<a id="l00638" name="l00638"></a> 638{

<a id="l00639" name="l00639"></a> 639 check_write(this);

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

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

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

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

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

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

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

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

<a id="l00648" name="l00648"></a> 648 double previous_quat[4] {

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

<a id="l00664" name="l00664"></a> 664 check_write(this);

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

<a id="l00666" name="l00666"></a> 666 boundary.previous_angular_velocity = boundary.get_angular_velocity();

<a id="l00667" name="l00667"></a> 667 boundary.wx = w.x;

<a id="l00668" name="l00668"></a> 668 boundary.wy = w.y;

<a id="l00669" name="l00669"></a> 669 boundary.wz = w.z;

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



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

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

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

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

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



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

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

<a id="l00678" name="l00678"></a> 678 : model(_model)

<a id="l00679" name="l00679"></a> 679 , geometry_index(_index)

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

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

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

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

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

<a id="l00685" name="l00685"></a> 685// ================================================================================================

<a id="l00686" name="l00686"></a> 686 

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

<a id="l00696" name="l00696"></a> 696{

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

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

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

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

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

<a id="l00721" name="l00721"></a> 721 

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

<a id="l00728" name="l00728"></a> 728 

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

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

<a id="l00733" name="l00733"></a> 733 RockyModel&amp; model;

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

<a id="l00736" name="l00736"></a> 736};



<a id="l00737" name="l00737"></a> 737 

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

<a id="l00739" name="l00739"></a> 739{

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

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



<a id="l00742" name="l00742"></a> 742 

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

<a id="l00759" name="l00759"></a> 759 auto it = std::find_if(

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

<a id="l00761" name="l00761"></a> 761 return boundary.name == name;

<a id="l00762" name="l00762"></a> 762 });

<a id="l00763" name="l00763"></a> 763 if (it == end)

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

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

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

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

<a id="l00768" name="l00768"></a> 768}



<a id="l00769" name="l00769"></a> 769 

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

<a id="l00771" name="l00771"></a> 771{

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

<a id="l00773" name="l00773"></a> 773}



<a id="l00774" name="l00774"></a> 774 

<a id="l00775" name="l00775"></a> 775 

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

<a id="l00777" name="l00777"></a> 777 : model(_model)

<a id="l00778" name="l00778"></a> 778{

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

[IRockyGeometriesMotionData](structIRockyGeometriesMotionData.xhtml)

**Definition** rocky_boundary_api.hpp:696



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

unsigned int get_number_of_geometries() const

**Definition** rocky_boundary_api.hpp:738



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

bool has_linked_motion_frame(unsigned int id) const

**Definition** rocky_boundary_api.hpp:770



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

IRockyGeometryMotionData get_geometry(unsigned int id) const

**Definition** rocky_boundary_api.hpp:743



[IRockyGeometryMotionData](structIRockyGeometryMotionData.xhtml)

**Definition** rocky_boundary_api.hpp:397



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

bool has_linked_motion_frame() const

**Definition** rocky_boundary_api.hpp:672



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

void set_orientation_angles(double3 angles)

**Definition** rocky_boundary_api.hpp:637



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

double3 get_translational_velocity() const

**Definition** rocky_boundary_api.hpp:545



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

double3 get_orientation_euler_angles() const

**Definition** rocky_boundary_api.hpp:557



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

double4 get_orientation_quaternion() const

**Definition** rocky_boundary_api.hpp:551



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

int get_id() const

**Definition** rocky_boundary_api.hpp:517



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

void set_translational_velocity(double3 v)

**Definition** rocky_boundary_api.hpp:613



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

double3 get_force() const

**Definition** rocky_boundary_api.hpp:527



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

void set_orientation(double4 quat)

**Definition** rocky_boundary_api.hpp:623



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

void set_rotational_velocity(double3 w)

**Definition** rocky_boundary_api.hpp:662



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

void set_position(double3 position)

**Definition** rocky_boundary_api.hpp:603



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

double3 get_position() const

**Definition** rocky_boundary_api.hpp:539



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

double3 get_rotational_velocity() const

**Definition** rocky_boundary_api.hpp:582



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

std::string get_name() const

**Definition** rocky_boundary_api.hpp:522



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

double3 get_moment() const

**Definition** rocky_boundary_api.hpp:533



[IRockyGeometryTriangleHost](structIRockyGeometryTriangleHost.xhtml)

**Definition** rocky_boundary_api.hpp:297



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



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



[IRockyTriangleScalars](structIRockyTriangleScalars.xhtml)

**Definition** rocky_triangle_scalars.hpp:161