    

 ## On this page

  

 

 # libuserd\_interface

 Last update: 16.07.2025 

<a id="l00001" name="l00001"></a> 1/\*

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

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

<a id="l00004" name="l00004"></a> 4 \* Copyright 2024 ANSYS, Inc.

<a id="l00005" name="l00005"></a> 5 \* All Rights Reserved.

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

<a id="l00007" name="l00007"></a> 7 \* Restricted Rights Legend

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

<a id="l00009" name="l00009"></a> 9 \* Use, duplication, or disclosure of this

<a id="l00010" name="l00010"></a> 10 \* software and its documentation by the

<a id="l00011" name="l00011"></a> 11 \* Government is subject to restrictions as

<a id="l00012" name="l00012"></a> 12 \* set forth in subdivision \[(b)(3)(ii)\] of

<a id="l00013" name="l00013"></a> 13 \* the Rights in Technical Data and Computer

<a id="l00014" name="l00014"></a> 14 \* Software clause at 52.227-7013.

<a id="l00015" name="l00015"></a> 15 \* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

<a id="l00016" name="l00016"></a> 16 \*/

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

<a id="l00018" name="l00018"></a> 18\#ifndef USERD\_INTERFACE\_H

<a id="l00019" name="l00019"></a> 19\#define USERD\_INTERFACE\_H

<a id="l00020" name="l00020"></a> 20 

<a id="l00021" name="l00021"></a> 21\#ifdef \_\_cplusplus

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

<a id="l00023" name="l00023"></a> 23\#include &lt;string&gt;

<a id="l00024" name="l00024"></a> 24\#include &lt;vector&gt;

<a id="l00025" name="l00025"></a> 25\#include &lt;map&gt;

<a id="l00026" name="l00026"></a> 26\#include &lt;array&gt;

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

<a id="l00046" name="l00046"></a> 46/\* TODO

<a id="l00047" name="l00047"></a> 47 \* - Add support for structured data

<a id="l00048" name="l00048"></a> 48 \*/

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

<a id="l00055" name="l00055"></a> 55namespace libuserd {

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

<a id="l00065" name="l00065"></a> 65 enum ElementType {

<a id="l00066" name="l00066"></a> 66 POINT,

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

<a id="l00068" name="l00068"></a> 68 BAR02,

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

<a id="l00070" name="l00070"></a> 70 BAR03,

<a id="l00071" name="l00071"></a> 71 BAR03_GHOST,

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

<a id="l00073" name="l00073"></a> 73 TRI03_GHOST,

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

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

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

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

<a id="l00078" name="l00078"></a> 78 QUAD08,

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

<a id="l00080" name="l00080"></a> 80 TET04,

<a id="l00081" name="l00081"></a> 81 TET04_GHOST,

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

<a id="l00083" name="l00083"></a> 83 TET10_GHOST,

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

<a id="l00085" name="l00085"></a> 85 PYR05_GHOST,

<a id="l00086" name="l00086"></a> 86 PYR13,

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

<a id="l00088" name="l00088"></a> 88 PENT6,

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

<a id="l00090" name="l00090"></a> 90 PENT15,

<a id="l00091" name="l00091"></a> 91 PENT15_GHOST,

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

<a id="l00093" name="l00093"></a> 93 HEX08_GHOST,

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

<a id="l00095" name="l00095"></a> 95 HEX20_GHOST,

<a id="l00096" name="l00096"></a> 96 NSIDED,

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

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

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

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

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

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

<a id="l00108" name="l00108"></a> 108 enum VariableLocation {

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

<a id="l00110" name="l00110"></a> 110 [PART](dynamic__visualization__store__enums_8h.xhtml#af4f0eba512eff253854b44d7ce078491a173f98c603042f6241b70157d56e385f),

<a id="l00111" name="l00111"></a> 111 [NODE](dynamic__visualization__store__enums_8h.xhtml#af4f0eba512eff253854b44d7ce078491a59a889456a2d742fdca191dccb3e871d),

<a id="l00112" name="l00112"></a> 112 [ELEMENT](dynamic__visualization__store__enums_8h.xhtml#af4f0eba512eff253854b44d7ce078491a3d10bfe84917127ab3347aa5c6309f33),

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

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

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

<a id="l00121" name="l00121"></a> 121 enum VariableType {

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

<a id="l00123" name="l00123"></a> 123 [SCALAR](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0a7efbb6cac96595e63e8fa171bde1eb68),

<a id="l00124" name="l00124"></a> 124 [VECTOR](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0a1a85ef13eaa80e8561743892f9dba958),

<a id="l00125" name="l00125"></a> 125 [TENSOR](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0aea73d7e9d7db611ad93f6acf4486e4b6),

<a id="l00126" name="l00126"></a> 126 [TENSOR9](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0a101dd79694ce22ee8b4ad64e00a89665),

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

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

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

<a id="l00135" name="l00135"></a> 135 enum PartHints {

<a id="l00136" name="l00136"></a> 136 STATIC_COORDS = (1 &lt;&lt; 0),

<a id="l00137" name="l00137"></a> 137 CHANGING_COOORDS = (1 &lt;&lt; 1),

<a id="l00138" name="l00138"></a> 138 CHANGING_CONNECTIVITY = (1 &lt;&lt; 2)

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

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

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

<a id="l00147" name="l00147"></a> 147 SUCCESS = 0, 

<a id="l00148" name="l00148"></a> 148 UNAVAILABLE = 1, 

<a id="l00149" name="l00149"></a> 149 IGNORED_AFTER_INITIALIZE = 2, 

<a id="l00150" name="l00150"></a> 150 OUT_OF_MEMORY = 3, 

<a id="l00151" name="l00151"></a> 151 IO = 4, 

<a id="l00152" name="l00152"></a> 152 UNIMPLEMENTED = 5, 

<a id="l00153" name="l00153"></a> 153 NOT_FOUND = 6, 

<a id="l00154" name="l00154"></a> 154 [UNKNOWN](dynamic__visualization__store__enums_8h.xhtml#a72a02f8c046b459abfa438d402dbba52a6ce26a62afab55d7606ad4e92428b30c) = 7, 

<a id="l00155" name="l00155"></a> 155 SINGLE_READER_ALLOWED = 8 

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

<a id="l00157" name="l00157"></a> 157 

<a id="l00158" name="l00158"></a> 158 // The "options" structure

<a id="l00159" name="l00159"></a> 159 struct OptBoolean {

<a id="l00160" name="l00160"></a> 160 const std::string name;

<a id="l00161" name="l00161"></a> 161 int32_t value;

<a id="l00162" name="l00162"></a> 162 const int32_t default_value;

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

<a id="l00164" name="l00164"></a> 164 // Constructor to initialize the struct

<a id="l00165" name="l00165"></a> 165 OptBoolean(const std::string&amp; _name, int32_t _value, int32_t _default_value)

<a id="l00166" name="l00166"></a> 166 : name(_name), value(_value), default_value(_default_value) {

<a id="l00167" name="l00167"></a> 167 }

<a id="l00168" name="l00168"></a> 168 };

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

<a id="l00170" name="l00170"></a> 170 struct OptOption {

<a id="l00171" name="l00171"></a> 171 const std::string name;

<a id="l00172" name="l00172"></a> 172 const std::vector&lt;std::string&gt; values;

<a id="l00173" name="l00173"></a> 173 uint32_t value_index;

<a id="l00174" name="l00174"></a> 174 const uint32_t default_value_index;

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

<a id="l00176" name="l00176"></a> 176 // Constructor to initialize the struct

<a id="l00177" name="l00177"></a> 177 OptOption(const std::string&amp; _name, const std::vector&lt;std::string&gt;&amp; _value, uint32_t _val_index, uint32_t _default_value_index)

<a id="l00178" name="l00178"></a> 178 : name(_name), values(_value), value_index(_val_index), default_value_index(_default_value_index) {

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

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

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

<a id="l00182" name="l00182"></a> 182 struct OptField {

<a id="l00183" name="l00183"></a> 183 const std::string name;

<a id="l00184" name="l00184"></a> 184 std::string value;

<a id="l00185" name="l00185"></a> 185 const std::string default_value;

<a id="l00186" name="l00186"></a> 186 

<a id="l00187" name="l00187"></a> 187 // Constructor to initialize the struct

<a id="l00188" name="l00188"></a> 188 OptField(const std::string&amp; _name, const std::string&amp; _value, const std::string&amp; _default_value)

<a id="l00189" name="l00189"></a> 189 : name(_name), value(_value), default_value(_default_value) {

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

<a id="l00191" name="l00191"></a> 191 };

<a id="l00192" name="l00192"></a> 192 

<a id="l00197" name="l00197"></a> 197 struct Options {

<a id="l00198" name="l00198"></a> 198 std::vector&lt;struct OptBoolean&gt; booleans;

<a id="l00199" name="l00199"></a> 199 std::vector&lt;struct OptOption&gt; options;

<a id="l00200" name="l00200"></a> 200 std::vector&lt;struct OptField&gt; fields;

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

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

<a id="l00203" name="l00203"></a> 203 struct fileExtensions {

<a id="l00204" name="l00204"></a> 204 std::string name;

<a id="l00205" name="l00205"></a> 205 std::vector&lt;std::string&gt; file_1_extension;

<a id="l00206" name="l00206"></a> 206 std::vector&lt;std::string&gt; file_2_extension;

<a id="l00207" name="l00207"></a> 207 };

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

<a id="l00209" name="l00209"></a> 209 // Forward declaration

<a id="l00210" name="l00210"></a> 210 class ReaderInfo;

<a id="l00211" name="l00211"></a> 211 class LibUserd;

<a id="l00212" name="l00212"></a> 212 class Reader;

<a id="l00213" name="l00213"></a> 213 

<a id="l00221" name="l00221"></a> 221 class Query {

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

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

<a id="l00224" name="l00224"></a> 224 const uint32_t m_id; 

<a id="l00225" name="l00225"></a> 225 const std::string m_name; 

<a id="l00226" name="l00226"></a> 226 const std::string m_x_title; 

<a id="l00227" name="l00227"></a> 227 const std::string m_y_title; 

<a id="l00228" name="l00228"></a> 228 std::map&lt;const std::string, std::string&gt; m_metadata; 

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

<a id="l00237" name="l00237"></a> 237 size\_t num_points();

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

<a id="l00250" name="l00250"></a> 250 ErrorCode data(float* x, float* y);

<a id="l00251" name="l00251"></a> 251 

<a id="l00257" name="l00257"></a> 257 std::string to_string();

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

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

<a id="l00260" name="l00260"></a> 260 Query(const uint32_t id,

<a id="l00261" name="l00261"></a> 261 const uint32_t reader_id,

<a id="l00262" name="l00262"></a> 262 const std::string&amp; name,

<a id="l00263" name="l00263"></a> 263 const std::string&amp; x_title,

<a id="l00264" name="l00264"></a> 264 const std::string&amp; y_title,

<a id="l00265" name="l00265"></a> 265 const std::map&lt;const std::string, std::string&gt;&amp; metadata);

<a id="l00266" name="l00266"></a> 266 friend class Reader;

<a id="l00267" name="l00267"></a> 267 uint32_t m_reader_id;

<a id="l00268" name="l00268"></a> 268 float m_reader_version;

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

<a id="l00270" name="l00270"></a> 270 

<a id="l00278" name="l00278"></a> 278 class Variable {

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

<a id="l00280" name="l00280"></a> 280 public:

<a id="l00281" name="l00281"></a> 281 const uint32_t id; 

<a id="l00282" name="l00282"></a> 282 const std::string name; 

<a id="l00283" name="l00283"></a> 283 const std::string unit_label; 

<a id="l00284" name="l00284"></a> 284 const std::string unit_dims; 

<a id="l00285" name="l00285"></a> 285 const VariableLocation location; 

<a id="l00286" name="l00286"></a> 286 const VariableType type; 

<a id="l00287" name="l00287"></a> 287 const bool time_varying; 

<a id="l00288" name="l00288"></a> 288 const bool complex; 

<a id="l00289" name="l00289"></a> 289 const bool interleave_flag; 

<a id="l00290" name="l00290"></a> 290 const uint32_t number_of_components; 

<a id="l00291" name="l00291"></a> 291 std::map&lt;const std::string, std::string&gt; metadata; 

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

<a id="l00302" name="l00302"></a> 302 static std::string get_variable_type_string(VariableType vtype);

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

<a id="l00313" name="l00313"></a> 313 static std::string get_variable_location_string(VariableLocation location);

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

<a id="l00324" name="l00324"></a> 324 std::string is_true(bool val);

<a id="l00325" name="l00325"></a> 325 

<a id="l00331" name="l00331"></a> 331 std::string to_string();

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

<a id="l00333" name="l00333"></a> 333 private:

<a id="l00334" name="l00334"></a> 334 Variable(const uint32_t _id,

<a id="l00335" name="l00335"></a> 335 const std::string&amp; _name,

<a id="l00336" name="l00336"></a> 336 const std::string&amp; _unit_label,

<a id="l00337" name="l00337"></a> 337 const std::string&amp; _unit_dims,

<a id="l00338" name="l00338"></a> 338 const VariableLocation _location,

<a id="l00339" name="l00339"></a> 339 const VariableType _type,

<a id="l00340" name="l00340"></a> 340 const bool _time_varying,

<a id="l00341" name="l00341"></a> 341 const bool _complex,

<a id="l00342" name="l00342"></a> 342 const bool _interleave_flag,

<a id="l00343" name="l00343"></a> 343 const uint32_t _number_of_components,

<a id="l00344" name="l00344"></a> 344 const std::map&lt;const std::string, std::string&gt;&amp; _metadata);

<a id="l00345" name="l00345"></a> 345 

<a id="l00346" name="l00346"></a> 346 friend class Reader;

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

<a id="l00348" name="l00348"></a> 348 

<a id="l00356" name="l00356"></a> 356 struct RigidBodyTransform {

<a id="l00357" name="l00357"></a> 357 float translation[3]; 

<a id="l00358" name="l00358"></a> 358 float euler_value[4]; 

<a id="l00359" name="l00359"></a> 359 float center_of_gravity[3]; 

<a id="l00360" name="l00360"></a> 360 float rotation_order; 

<a id="l00361" name="l00361"></a> 361 float rotation_angles[3]; 

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

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

<a id="l00371" name="l00371"></a> 371 class Part {

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

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

<a id="l00374" name="l00374"></a> 374 const uint32_t m_index; 

<a id="l00375" name="l00375"></a> 375 const uint32_t m_id; 

<a id="l00376" name="l00376"></a> 376 const uint32_t m_reader_id; 

<a id="l00377" name="l00377"></a> 377 const std::string m_name; 

<a id="l00378" name="l00378"></a> 378 std::map&lt;const std::string, std::string&gt; m_metadata; 

<a id="l00379" name="l00379"></a> 379 const PartHints m_hints; 

<a id="l00380" name="l00380"></a> 380 float m_reader_api_version; 

<a id="l00381" name="l00381"></a> 381 

<a id="l00390" name="l00390"></a> 390 ErrorCode num_nodes(std::size_t&amp; num_coords);

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

<a id="l00402" name="l00402"></a> 402 ErrorCode nodes(float* xyz);

<a id="l00403" name="l00403"></a> 403 

<a id="l00404" name="l00404"></a> 404 

<a id="l00413" name="l00413"></a> 413 ErrorCode num_elements(std::map&lt;ElementType, std::size_t&gt;&amp; elements);

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

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

<a id="l00416" name="l00416"></a> 416 

<a id="l00432" name="l00432"></a> 432 ErrorCode element_conn(ElementType elem_type, uint32_t* connectivity);

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

<a id="l00446" name="l00446"></a> 446 ErrorCode element_conn_nsided_size(ElementType elem_type, 

<a id="l00447" name="l00447"></a> 447 size\_t&amp; nodes_per_polygon_size, size\_t&amp; nodes_size);

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

<a id="l00459" name="l00459"></a> 459 ErrorCode element_conn_nsided(ElementType elem_type, uint32_t* nodes_per_polygon, uint32_t* nodes);

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

<a id="l00475" name="l00475"></a> 475 ErrorCode element_conn_nfaced_size(ElementType elem_type, size\_t&amp; faces_per_element_size,

<a id="l00476" name="l00476"></a> 476 size\_t&amp; nodes_per_face_size, size\_t&amp; indices_size);

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

<a id="l00489" name="l00489"></a> 489 ErrorCode element_conn_nfaced(ElementType elem_type,

<a id="l00490" name="l00490"></a> 490 uint32_t* faces_per_element, uint32_t* nodes_per_face, uint32_t* nodes);

<a id="l00491" name="l00491"></a> 491 

<a id="l00507" name="l00507"></a> 507 ErrorCode variable_values(Variable* var, ElementType elem_type, 

<a id="l00508" name="l00508"></a> 508 bool complex, uint32_t component, float* array);

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

<a id="l00518" name="l00518"></a> 518 ErrorCode rigid_body_transform(struct RigidBodyTransform&amp; transform);

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

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

<a id="l00521" name="l00521"></a> 521 Part(const uint32_t index,

<a id="l00522" name="l00522"></a> 522 const uint32_t id,

<a id="l00523" name="l00523"></a> 523 const uint32_t reader_id,

<a id="l00524" name="l00524"></a> 524 const std::string&amp; name,

<a id="l00525" name="l00525"></a> 525 const std::map&lt;const std::string, std::string&gt;&amp; metadata,

<a id="l00526" name="l00526"></a> 526 const PartHints hints);

<a id="l00527" name="l00527"></a> 527 

<a id="l00528" name="l00528"></a> 528 friend class Reader;

<a id="l00529" name="l00529"></a> 529 };

<a id="l00530" name="l00530"></a> 530 

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

<a id="l00541" name="l00541"></a> 541 class ReaderInfo {

<a id="l00542" name="l00542"></a> 542 

<a id="l00543" name="l00543"></a> 543 public:

<a id="l00544" name="l00544"></a> 544 const uint32_t m_id; 

<a id="l00545" name="l00545"></a> 545 const std::string m_name; 

<a id="l00546" name="l00546"></a> 546 const std::string m_description; 

<a id="l00547" name="l00547"></a> 547 const std::string m_file_labels[2]; 

<a id="l00548" name="l00548"></a> 548 struct Options m_options; 

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

<a id="l00564" name="l00564"></a> 564 ErrorCode read_dataset(const std::string&amp; file1, const std::string&amp; file2, bool use_parallel, Reader*&amp; reader);

<a id="l00565" name="l00565"></a> 565 

<a id="l00571" name="l00571"></a> 571 std::string to_string();

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

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

<a id="l00584" name="l00584"></a> 584 static bool get_userd_xtra_gui_values(int reader_id, Options&amp; userd_options);

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

<a id="l00586" name="l00586"></a> 586 private:

<a id="l00587" name="l00587"></a> 587 ReaderInfo(const uint32_t id,

<a id="l00588" name="l00588"></a> 588 const std::string name,

<a id="l00589" name="l00589"></a> 589 const std::string description,

<a id="l00590" name="l00590"></a> 590 const std::string file_labels[2],

<a id="l00591" name="l00591"></a> 591 struct Options options);

<a id="l00592" name="l00592"></a> 592 friend class LibUserd;

<a id="l00593" name="l00593"></a> 593 };

<a id="l00594" name="l00594"></a> 594 

<a id="l00603" name="l00603"></a> 603 class Reader {

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

<a id="l00605" name="l00605"></a> 605 public:

<a id="l00606" name="l00606"></a> 606 const std::string m_unit_system; 

<a id="l00607" name="l00607"></a> 607 std::map&lt;const std::string, std::string&gt; m_metadata; 

<a id="l00608" name="l00608"></a> 608 std::string m_raw_metadata; 

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

<a id="l00610" name="l00610"></a> 610 static uint32_t s_curr_time_step; // ToDo: Should be removed later

<a id="l00611" name="l00611"></a> 611 static uint32_t s_curr_time_set; // ToDo: Should be removed later

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

<a id="l00623" name="l00623"></a> 623 ErrorCode parts(std::vector&lt;Part*&gt;&amp; part_list);

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

<a id="l00635" name="l00635"></a> 635 ErrorCode variables(std::vector&lt;Variable*&gt;&amp; variable_list);

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

<a id="l00647" name="l00647"></a> 647 ErrorCode queries(std::vector&lt;Query*&gt;&amp; query_list);

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

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

<a id="l00659" name="l00659"></a> 659 ErrorCode get_number_of_time_sets(uint32_t &amp; number_of_time_sets);

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

<a id="l00671" name="l00671"></a> 671 ErrorCode timevalues(std::vector&lt;float&gt; &amp; timevalues, uint32_t timeset_number = 0);

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

<a id="l00683" name="l00683"></a> 683 ErrorCode set_timevalue(float timevalue, uint32_t timeset_number = 0);

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

<a id="l00695" name="l00695"></a> 695 ErrorCode set_timestep(uint32_t timestep, uint32_t timeset_number = 0);

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

<a id="l00697" name="l00697"></a> 697 

<a id="l00707" name="l00707"></a> 707 ErrorCode variable_value(const Variable* var, float&amp; value);

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

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

<a id="l00717" name="l00717"></a> 717 bool is_geometry_changing();

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

<a id="l00726" name="l00726"></a> 726 const ReaderInfo* info();

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

<a id="l00728" name="l00728"></a> 728 // static helper methods

<a id="l00729" name="l00729"></a> 729 static ErrorCode get_geometry_info(int reader_id, int part_index, std::vector&lt;int&gt;&amp; geoms_vector);

<a id="l00730" name="l00730"></a> 730 static ErrorCode number_of_geometries(int reader_id, int part_index, int&amp; number_of_geoms);

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

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

<a id="l00733" name="l00733"></a> 733 private:

<a id="l00734" name="l00734"></a> 734 Reader(ReaderInfo info);

<a id="l00735" name="l00735"></a> 735 friend class ReaderInfo;

<a id="l00736" name="l00736"></a> 736 float m_reader_version;

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

<a id="l00738" name="l00738"></a> 738 ReaderInfo m_reader_info; 

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

<a id="l00740" name="l00740"></a> 740 // Private helper methods

<a id="l00741" name="l00741"></a> 741 ErrorCode get_meta_data_string();

<a id="l00742" name="l00742"></a> 742 void parse_metatags(std::map&lt;const std::string, std::string&gt;&amp; map, const char* section_name);

<a id="l00743" name="l00743"></a> 743 ErrorCode get_part_hints(int reader_id, int part_index, PartHints&amp; part_hints);

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

<a id="l00745" name="l00745"></a> 745 std::map&lt;const std::string, std::string&gt; m_part_metatags;

<a id="l00746" name="l00746"></a> 746 std::map&lt;const std::string, std::string&gt; m_var_metatags;

<a id="l00747" name="l00747"></a> 747 std::map&lt;const std::string, std::string&gt; m_query_metatags;

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

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

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

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

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

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

<a id="l00772" name="l00772"></a> 772 static LibUserd* library_interface();

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

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

<a id="l00782" name="l00782"></a> 782 static Reader* get_active_reader();

<a id="l00783" name="l00783"></a> 783 

<a id="l00792" name="l00792"></a> 792 static std::string errorcode_as_string(ErrorCode code);

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

<a id="l00804" name="l00804"></a> 804 static size\_t nodes_per_element(ElementType elem_type);

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

<a id="l00815" name="l00815"></a> 815 static bool element_is_ghost(ElementType elem_type);

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

<a id="l00825" name="l00825"></a> 825 static bool element_is_zoo(ElementType elem_type);

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

<a id="l00835" name="l00835"></a> 835 static bool element_is_nsided(ElementType elem_type);

<a id="l00836" name="l00836"></a> 836 

<a id="l00845" name="l00845"></a> 845 static bool element_is_nfaced(ElementType elem_type);

<a id="l00846" name="l00846"></a> 846 

<a id="l00858" name="l00858"></a> 858 static size\_t number_of_simple_element_types();

<a id="l00859" name="l00859"></a> 859 

<a id="l00871" name="l00871"></a> 871 static const std::string&amp; library_version();

<a id="l00872" name="l00872"></a> 872 

<a id="l00880" name="l00880"></a> 880 static const std::string&amp; ansys_release_string();

<a id="l00881" name="l00881"></a> 881 

<a id="l00889" name="l00889"></a> 889 static uint32_t ansys_release_number();

<a id="l00890" name="l00890"></a> 890 

<a id="l00891" name="l00891"></a> 891 

<a id="l00900" name="l00900"></a> 900 //ToDo: Will convert this to const &amp; later (I need add a map or something inside the class to do this)

<a id="l00901" name="l00901"></a> 901 static const std::string element_type_to_string(ElementType type);

<a id="l00902" name="l00902"></a> 902 

<a id="l00903" name="l00903"></a> 903 /\*

<a id="l00904" name="l00904"></a> 904 \* These functions need to be called before initialize() is called.

<a id="l00905" name="l00905"></a> 905 \*/

<a id="l00906" name="l00906"></a> 906 

<a id="l00920" name="l00920"></a> 920 ErrorCode set_reader_path(const std::string&amp; path);

<a id="l00921" name="l00921"></a> 921 

<a id="l00922" name="l00922"></a> 922 /\*

<a id="l00923" name="l00923"></a> 923 \* EnSight USERD readers include a mechanism where they can exchange information between instances.

<a id="l00924" name="l00924"></a> 924 \* This is used for parallel I/O operations, where each process reads an independent portion of the data.

<a id="l00925" name="l00925"></a> 925 \* Since each Reader instance is in a different process a communications channel needs to be supplied

<a id="l00926" name="l00926"></a> 926 \* by the host application to support this. When run this way, every process has a "rank". For example,

<a id="l00927" name="l00927"></a> 927 \* if you want to read 5 way parallel, you will have 5 processes and they will be ranks: \[0,1,2,3,4\].

<a id="l00928" name="l00928"></a> 928 \* It is not important which processes have which ranks, only that all of the ranks exist once and only

<a id="l00929" name="l00929"></a> 929 \* once.

<a id="l00930" name="l00930"></a> 930 \*

<a id="l00931" name="l00931"></a> 931 \* To run libuserd in parallel one must call one of the set\_reduction calls before calling initialize().

<a id="l00932" name="l00932"></a> 932 \*

<a id="l00933" name="l00933"></a> 933 \* Options include:

<a id="l00934" name="l00934"></a> 934 \* 1) a custom proc that the application provide (e.g. an MPI implementation).

<a id="l00935" name="l00935"></a> 935 \* 2) TCP/IP where rank 0 manages the operations and all other ranks connect to it.

<a id="l00936" name="l00936"></a> 936 \* 3) a shared filesystem implementation where rank 0 manages operations and uses a

<a id="l00937" name="l00937"></a> 937 \* common filesystem as the communication scheme.

<a id="l00938" name="l00938"></a> 938 \*/

<a id="l00939" name="l00939"></a> 939 

<a id="l00940" name="l00940"></a> 940 enum ReduceOp {

<a id="l00941" name="l00941"></a> 941 SUM = 0,

<a id="l00942" name="l00942"></a> 942 MIN = 1,

<a id="l00943" name="l00943"></a> 943 MAX = 2,

<a id="l00944" name="l00944"></a> 944 ABSMIN = 3,

<a id="l00945" name="l00945"></a> 945 ABSMAX = 4,

<a id="l00946" name="l00946"></a> 946 BROADCAST = 5

<a id="l00947" name="l00947"></a> 947 } z_reduce_ops;

<a id="l00948" name="l00948"></a> 948 

<a id="l00949" name="l00949"></a> 949 enum ReduceDataType {

<a id="l00950" name="l00950"></a> 950 FLOAT = 0,

<a id="l00951" name="l00951"></a> 951 DOUBLE = 1,

<a id="l00952" name="l00952"></a> 952 INT = 2,

<a id="l00953" name="l00953"></a> 953 UCHAR = 3

<a id="l00954" name="l00954"></a> 954 };

<a id="l00955" name="l00955"></a> 955 

<a id="l00956" name="l00956"></a> 956 using ReduceProc = ErrorCode(*) (ReduceOp op, uint32_t number_of_values, ReduceDataType type, void* data, uint32_t count, void* userdata);

<a id="l00957" name="l00957"></a> 957 

<a id="l00958" name="l00958"></a> 958 // redirection of error handling output

<a id="l00959" name="l00959"></a> 959 

<a id="l00960" name="l00960"></a> 960 enum SeverityLevel {

<a id="l00961" name="l00961"></a> 961 LVL_INFO = 0,

<a id="l00962" name="l00962"></a> 962 LVL_WARN = 1,

<a id="l00963" name="l00963"></a> 963 LVL_ERROR = 2,

<a id="l00964" name="l00964"></a> 964 LVL_FATAL = 3,

<a id="l00965" name="l00965"></a> 965 LVL_UNKNOWN = 4

<a id="l00966" name="l00966"></a> 966 };

<a id="l00967" name="l00967"></a> 967 

<a id="l00980" name="l00980"></a> 980 static const std::string severity_level_to_string(SeverityLevel level);

<a id="l00981" name="l00981"></a> 981 

<a id="l00982" name="l00982"></a> 982 using ErrorProc = ErrorCode(*) (const char* message, SeverityLevel severity_level, void* userdata);

<a id="l00983" name="l00983"></a> 983 

<a id="l01000" name="l01000"></a> 1000 ErrorCode set_reduction(ReduceProc func, uint32_t rank, uint32_t num_ranks, void* userdata);

<a id="l01001" name="l01001"></a> 1001 

<a id="l01002" name="l01002"></a> 1002 

<a id="l01018" name="l01018"></a> 1018 ErrorCode set_reduction(uint32_t rank_0_port, const std::string&amp; rank_0_hostname,

<a id="l01019" name="l01019"></a> 1019 uint32_t rank, uint32_t num_ranks);

<a id="l01020" name="l01020"></a> 1020 

<a id="l01035" name="l01035"></a> 1035 ErrorCode set_reduction(const std::string&amp; directoryname, uint32_t rank, uint32_t num_ranks);

<a id="l01036" name="l01036"></a> 1036 

<a id="l01047" name="l01047"></a> 1047 ErrorCode set_message_handler(ErrorProc, void* userdata);

<a id="l01048" name="l01048"></a> 1048 

<a id="l01057" name="l01057"></a> 1057 ErrorCode initialize();

<a id="l01058" name="l01058"></a> 1058 

<a id="l01066" name="l01066"></a> 1066 static size\_t get_available_reader_count();

<a id="l01067" name="l01067"></a> 1067 

<a id="l01076" name="l01076"></a> 1076 ErrorCode get_all_readers(std::vector&lt;ReaderInfo&gt;&amp; info);

<a id="l01077" name="l01077"></a> 1077 

<a id="l01089" name="l01089"></a> 1089 ErrorCode query_format(const std::string&amp; name1, const std::string&amp; name2, std::vector&lt;ReaderInfo&gt;&amp; reader_info);

<a id="l01090" name="l01090"></a> 1090 

<a id="l01099" name="l01099"></a> 1099 ErrorCode shutdown();

<a id="l01100" name="l01100"></a> 1100 

<a id="l01101" name="l01101"></a> 1101 

<a id="l01109" name="l01109"></a> 1109 bool is_initialized() const;

<a id="l01110" name="l01110"></a> 1110 

<a id="l01111" name="l01111"></a> 1111 ~LibUserd();

<a id="l01112" name="l01112"></a> 1112 

<a id="l01113" name="l01113"></a> 1113 private:

<a id="l01114" name="l01114"></a> 1114 LibUserd();

<a id="l01115" name="l01115"></a> 1115 LibUserd(const LibUserd&amp;) = delete;

<a id="l01116" name="l01116"></a> 1116 bool m_is_initialized;

<a id="l01117" name="l01117"></a> 1117 static std::string s_libuserd_interface_version;

<a id="l01118" name="l01118"></a> 1118 static std::string s_ansys_release_version_string;

<a id="l01119" name="l01119"></a> 1119 static uint32_t s_ansys_release_version_number;

<a id="l01120" name="l01120"></a> 1120 static LibUserd* m_libuserd;

<a id="l01121" name="l01121"></a> 1121 

<a id="l01122" name="l01122"></a> 1122 friend class ReaderInfo;

<a id="l01123" name="l01123"></a> 1123 static void set_active_reader(Reader* reader);

<a id="l01124" name="l01124"></a> 1124 static Reader* m_active_reader;

<a id="l01125" name="l01125"></a> 1125 

<a id="l01126" name="l01126"></a> 1126 std::vector&lt;fileExtensions&gt; ReaderExtension;

<a id="l01127" name="l01127"></a> 1127 void initReaderExtensions();

<a id="l01128" name="l01128"></a> 1128 std::string processFilename(const std::string &amp;filename);

<a id="l01129" name="l01129"></a> 1129 };

<a id="l01130" name="l01130"></a> 1130 

<a id="l01131" name="l01131"></a> 1131}

<a id="l01132" name="l01132"></a> 1132 

<a id="l01133" name="l01133"></a> 1133\#endif

<a id="l01134" name="l01134"></a> 1134 

<a id="l01135" name="l01135"></a> 1135\#endif

[UNKNOWN](dynamic__visualization__store__enums_8h.xhtml#a72a02f8c046b459abfa438d402dbba52a6ce26a62afab55d7606ad4e92428b30c)

@ UNKNOWN

Unknown type.

**Definition** [dynamic\_visualization\_store\_enums.h:45](dynamic__visualization__store__enums_8h_source.xhtml#l00045)



[PART](dynamic__visualization__store__enums_8h.xhtml#af4f0eba512eff253854b44d7ce078491a173f98c603042f6241b70157d56e385f)

@ PART

This is a variable for an entire part.

**Definition** [dynamic\_visualization\_store\_enums.h:21](dynamic__visualization__store__enums_8h_source.xhtml#l00021)



[ELEMENT](dynamic__visualization__store__enums_8h.xhtml#af4f0eba512eff253854b44d7ce078491a3d10bfe84917127ab3347aa5c6309f33)

@ ELEMENT

This is a field variable per each element of a part.

**Definition** [dynamic\_visualization\_store\_enums.h:20](dynamic__visualization__store__enums_8h_source.xhtml#l00020)



[NODE](dynamic__visualization__store__enums_8h.xhtml#af4f0eba512eff253854b44d7ce078491a59a889456a2d742fdca191dccb3e871d)

@ NODE

This is a field variable per each node of a part's mesh.

**Definition** [dynamic\_visualization\_store\_enums.h:19](dynamic__visualization__store__enums_8h_source.xhtml#l00019)



[TENSOR9](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0a101dd79694ce22ee8b4ad64e00a89665)

@ TENSOR9

NOT SUPPORTED YET.

**Definition** [dynamic\_visualization\_store\_enums.h:36](dynamic__visualization__store__enums_8h_source.xhtml#l00036)



[VECTOR](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0a1a85ef13eaa80e8561743892f9dba958)

@ VECTOR

XYZ Coordinates.

**Definition** [dynamic\_visualization\_store\_enums.h:32](dynamic__visualization__store__enums_8h_source.xhtml#l00032)



[SCALAR](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0a7efbb6cac96595e63e8fa171bde1eb68)

@ SCALAR

Scalar.

**Definition** [dynamic\_visualization\_store\_enums.h:31](dynamic__visualization__store__enums_8h_source.xhtml#l00031)



[TENSOR](dynamic__visualization__store__enums_8h.xhtml#af6aa6351345da4151507012681b3aff0aea73d7e9d7db611ad93f6acf4486e4b6)

@ TENSOR

NOT SUPPORTED YET.

**Definition** [dynamic\_visualization\_store\_enums.h:35](dynamic__visualization__store__enums_8h_source.xhtml#l00035)