DVS::IClient Class Reference
Last update: 17.04.2023API for solvers to use to send data to EnSight servers. More...
#include <dvs_client_interface.h>
Public Member Functions | |
IClient ()=default | |
default | |
virtual | ~IClient ()=default |
default | |
IClient (IClient &&)=default | |
default | |
IClient & | operator= (IClient &&)=default |
default | |
IClient (const IClient &)=default | |
support copying | |
IClient & | operator= (const IClient &)=default |
default | |
virtual void | set_logger (ILogger *logger)=0 |
Set the logger interface to use. More... | |
virtual const char * | get_version ()=0 |
Get the version of the client API. More... | |
virtual dvs_ret | begin_init (const char *dataset_name, uint32_t current_rank, uint32_t total_ranks, uint32_t num_chunks)=0 |
Begins initialization for this rank. More... | |
virtual dvs_ret | set_unit_system (const char *system)=0 |
Set the unit system we are using for this session (optional) More... | |
virtual dvs_ret | add_metadata (const char *const keys[], const char *const vals[], uint32_t num_metadata_pairs)=0 |
Add metadata for the current dataset. More... | |
virtual dvs_ret | add_part_info (const dvs_part_info *part_info, uint32_t num_parts)=0 |
Add part information for session. More... | |
virtual dvs_ret | add_var_info (const dvs_var_info *var_info, uint32_t num_vars)=0 |
Add variable information for session. More... | |
virtual dvs_ret | add_plot_info (const dvs_plot_info *plot_info, uint32_t num_plots)=0 |
Add plot information for session. More... | |
virtual uint32_t | get_num_parts () const =0 |
Get the number of dvs_part_info objects this client has stored. More... | |
virtual uint32_t | get_num_vars () const =0 |
Get the number of dvs_var_info objects this client has stored. More... | |
virtual uint32_t | get_num_plots () const =0 |
Get the number of dvs_plot_info objects this client has stored. More... | |
virtual const dvs_part_info * | get_part_info (uint32_t index) const =0 |
Get the dvs_part_info object for a specific index. More... | |
virtual dvs_ret | get_part_id (const std::string &name, uint32_t &id) const =0 |
Get the ID being used by the client for the named part. More... | |
virtual const dvs_var_info * | get_var_info (uint32_t index) const =0 |
Get the dvs_var_info object for a specific index. More... | |
virtual dvs_ret | get_var_id (const std::string &name, uint32_t &id) const =0 |
Get the ID being used by the client for the named var. More... | |
virtual const dvs_plot_info * | get_plot_info (uint32_t index) const =0 |
Get the dvs_plot_info object for a specific index. More... | |
virtual dvs_ret | get_plot_id (const std::string &name, uint32_t &id) const =0 |
Get the ID being used by the client for the named plot. More... | |
virtual dvs_ret | end_init ()=0 |
Finish initialization for this rank. More... | |
virtual dvs_ret | begin_update (uint32_t update_num, uint32_t rank, uint32_t chunk, float time)=0 |
Method to begin an update. More... | |
virtual dvs_ret | update_nodes (uint32_t part_id, const float *x, const float *y, const float *z, uint32_t num_values)=0 |
Update nodes for a specific part. More... | |
virtual dvs_ret | update_nodes_structured (uint32_t part_id, const uint32_t global_ijk_max[3], const uint32_t local_ijk_min[3], const uint32_t local_ijk_max[3], const float origin[3], const float dir_i[3], const float dir_j[3], const float dir_k[3], const float *i_vals, const float *j_vals, const float *k_vals)=0 |
Update the nodes for a parallelepiped structured part. More... | |
virtual dvs_ret | update_nodes_structured (uint32_t part_id, const uint32_t global_ijk_max[3], const uint32_t local_ijk_min[3], const uint32_t local_ijk_max[3], const float *x_vals, const float *y_vals, const float *z_vals)=0 |
Update the nodes for a curvilinear structured part. More... | |
virtual dvs_ret | update_elements (uint32_t part_id, dvs_element_type type, const uint32_t *indices, uint32_t num_indices)=0 |
Update elements for a specific part and element type. More... | |
virtual dvs_ret | update_elements_polygon (uint32_t part_id, dvs_element_type type, const uint32_t *nodes_per_polygon, uint32_t nodes_per_polygon_size, const uint32_t *indices, uint32_t indices_size)=0 |
Update N-SIDED elements. More... | |
virtual dvs_ret | update_elements_polyhedral (uint32_t part_id, dvs_element_type type, const uint32_t *faces_per_element, uint32_t faces_per_element_size, const uint32_t *nodes_per_face, uint32_t nodes_per_face_size, const uint32_t *indices, uint32_t indices_size)=0 |
Update N-FACED Elements. More... | |
virtual dvs_ret | update_var_case (dvs_var_type var_type, uint32_t var_id, const float *values, uint32_t num_values)=0 |
Update case variable. More... | |
virtual dvs_ret | update_var_part (dvs_var_type var_type, uint32_t var_id, uint32_t part_id, const float *values, uint32_t num_values)=0 |
Update part vector variable. More... | |
virtual dvs_ret | update_var_element (dvs_element_type elem_type, dvs_var_type var_type, uint32_t var_id, uint32_t part_id, const float *values, uint32_t num_values)=0 |
Update elemental scalar variable values. More... | |
virtual dvs_ret | update_var_node (dvs_var_type var_type, uint32_t var_id, uint32_t part_id, const float *values, uint32_t num_values)=0 |
Update nodal variable values. More... | |
virtual dvs_ret | update_var_field (dvs_var_location location, dvs_element_type elem_type, dvs_var_type var_type, uint32_t var_id, uint32_t part_id, const float *values, uint32_t num_values)=0 |
Update var field values (nodal or elemental) More... | |
virtual dvs_ret | update_plot (uint32_t plot_id, const float *x_values, const float *y_values, uint32_t num_values)=0 |
Update plot data for plot. More... | |
virtual dvs_ret | end_update ()=0 |
Call to end the update for this timestep/rank/chunk. More... | |
virtual dvs_ret | delete_item (uint32_t update_num, uint32_t rank, const char *filter)=0 |
Delete an item. More... | |
Detailed Description
API for solvers to use to send data to EnSight servers.
This interface class wraps the client type and other functionality such as data deduplication so the user doesn't need to worry about it. We can add functionality to this without needing solver code to be modified. This will also hide Ensight sessions potentially being taken down and brought up dynamically.
Definition at line 80 of file dvs_client_interface.h.
Member Function Documentation
◆ add_metadata()
|
pure virtual |
Add metadata for the current dataset.
Errors:
- DVS_NONE: Success
- DVS_PARAM_NULL: Method called with NULL params or num_metadata_pairs == 0
- DVS_CLIENT_INVALID_TRANSPORT: Internal error, should not happen
- DVS_TRANSPORT_NULL_INVALID_SERVER: Internal error, should not happen
- DVS_VERSION_MISMATCH: Client version out of date with server version, update server and client to match
- DVS_VERSION_UNKNOWN: Unable to determine server version, update the server to match the client
- DVS_TRANSPORT_SERVICE_FAILURE: Normally caused by server call retry time out or invalid secret key
- Parameters
-
[in] keys string array of UTF-8 Compatible string keys, each string should be null terminated [in] vals string array of UTF-8 Compatible string values, each string should be null terminated [in] num_metadata_pairs number of key/value pairs in the arrays
- Returns
- dvs_ret DVS_NONE on success, otherwise see method description
◆ add_part_info()
|
pure virtual |
Add part information for session.
NOTE: These cannot be changed once end_init() is called.
- Parameters
-
[in] part_info array of global parts across entire simulaton num_parts number of part info objects in part_info
- Returns
- dvs_ret TODO
◆ add_plot_info()
|
pure virtual |
Add plot information for session.
NOTE: These cannot be changed once end_init() is called.
- Parameters
-
[in] plot_info array of global plot information across entire simulation num_plots number of plot_info objects in plot_info
- Returns
- dvs_ret TODO
◆ add_var_info()
|
pure virtual |
Add variable information for session.
NOTE: These cannot be changed once end_init() is called.
- Parameters
-
[in] var_info array of global variable information across entire simulation num_vars number of var info objects in var_info
- Returns
- dvs_ret TODO
◆ begin_init()
|
pure virtual |
Begins initialization for this rank.
- Parameters
-
dataset_name name for dataset current_rank the rank we are sending init info for (zero based) total_ranks the total number of ranks being used across solver nodes num_chunks the number of chunks being used for this rank (usually 1)
- Returns
- dvs_ret TODO
◆ begin_update()
|
pure virtual |
Method to begin an update.
- Parameters
-
update_num update number of this update, must be monotonically increasing rank the rank we are sending an update for (zero based) chunk the chunk number this update is for (zero based) time time in seconds this update is for
- Returns
- dvs_ret TODO
◆ delete_item()
|
pure virtual |
Delete an item.
Currently this will only allow for timesteps to be deleted. In the future it can be expanded to all objects via the filter mechanism (see Query Stanzas). Currently this supports the operands of eq, gt, gte, lt, lte. Example: To delete all timesteps >= time 1.1 the filter would be "/timestep.time/gte/1.1//" .
It also currently only supports one statement so /timestep.time/gt/1.1//and/timestep.time/lt/2.1// is not valid as of version 1.1.0.
Note: The update number should be monotonically increasing with the begin_update calls
- Parameters
-
update_num update number of this update, must be monotonically increasing rank rank making this call filter filter for the item(s) to delete see detailed description for more info
- Returns
- dvs_ret TODO
◆ end_init()
|
pure virtual |
Finish initialization for this rank.
This must be called to let server know initialization for this rank is complete
- Returns
- dvs_ret TODO
◆ end_update()
|
pure virtual |
Call to end the update for this timestep/rank/chunk.
- Returns
- dvs_ret TODO
◆ get_num_parts()
|
pure virtual |
Get the number of dvs_part_info objects this client has stored.
Note: This gets the number of part info objects this client has. It does not query the server for the information.
- Returns
- uint32_t number of dvs_part_info objects
◆ get_num_plots()
|
pure virtual |
Get the number of dvs_plot_info objects this client has stored.
Note: This gets the number of plot info objects this client has. It does not query the server for the information.
- Returns
- uint32_t number of dvs_plot_info objects
◆ get_num_vars()
|
pure virtual |
Get the number of dvs_var_info objects this client has stored.
Note: This gets the number of part info objects this client has. It does not query the server for the information.
- Returns
- uint32_t number of dvs_var_info objects
◆ get_part_id()
|
pure virtual |
Get the ID being used by the client for the named part.
Errors: DVS_NONE: Success DVS_INVALID_NAME: No object with name found DVS_ID_NO_VALID_SESSION: No session found matching session_id DVS_ID_INVALID_TYPE: Session id is of wrong type (possibly server) DVS_PARAM_NULL: Null param passed in
- Parameters
-
[in] name the name of the part to search for [out] id UINT32_MAX on failure, otherwise the id of the part for this client
- Returns
- dvs_ret DVS_NONE on success, else see method description
◆ get_part_info()
|
pure virtual |
Get the dvs_part_info object for a specific index.
Note: This only gets the dvs_part_info objects from the current client it does not query the server for the information
- Parameters
-
index index of the dvs_part_info object to retrieve
- Returns
- const dvs_part_info* found object, nullptr if not found
◆ get_plot_id()
|
pure virtual |
Get the ID being used by the client for the named plot.
Errors: DVS_NONE: Success DVS_INVALID_NAME: No object with name found DVS_ID_NO_VALID_SESSION: No session found matching session_id DVS_ID_INVALID_TYPE: Session id is of wrong type (possibly server) DVS_PARAM_NULL: Null param passed in
- Parameters
-
[in] name the name of the plot to search for [out] id UINT32_MAX on failure, otherwise the id of the plot for this client
- Returns
- dvs_ret DVS_NONE on success, else see method description
◆ get_plot_info()
|
pure virtual |
Get the dvs_plot_info object for a specific index.
Note: This only gets the dvs_plot_info objects from the current client it does not query the server for the information
- Parameters
-
index index of the dvs_plot_info object to retrieve
- Returns
- const dvs_plot_info* found object, nullptr if not found
◆ get_var_id()
|
pure virtual |
Get the ID being used by the client for the named var.
Errors: DVS_NONE: Success DVS_INVALID_NAME: No object with name found DVS_ID_NO_VALID_SESSION: No session found matching session_id DVS_ID_INVALID_TYPE: Session id is of wrong type (possibly server) DVS_PARAM_NULL: Null param passed in
- Parameters
-
[in] name the name of the var to search for [out] id UINT32_MAX on failure, otherwise the id of the var for this client
- Returns
- dvs_ret DVS_NONE on success, else see method description
◆ get_var_info()
|
pure virtual |
Get the dvs_var_info object for a specific index.
Note: This only gets the dvs_var_info objects from the current client it does not query the server for the information
- Parameters
-
index index of the dvs_var_info object to retrieve
- Returns
- const dvs_var_info* found object, nullptr if not found
◆ get_version()
|
pure virtual |
Get the version of the client API.
NOTE: The version is of the format X.Y.Z where X=MAJOR, Y = MINOR, and Z = PATCH. Anything other than a change in Z or PATCH is incompatible with another version and needs to be upgraded to the latest library
- Returns
- const char* the semantic version of the API
◆ set_logger()
|
pure virtual |
Set the logger interface to use.
Set a logger interface for the client to use. This object will have DVS::ILogger::release() invoked on it. If release() is not implemented the memory should be destroyed by the caller after the client is destroyed.
- Parameters
-
logger logger to use, will be released if DVS::ILogger::release() is implemented
◆ set_unit_system()
|
pure virtual |
Set the unit system we are using for this session (optional)
NOTE: This cannot be changed once end_init() is called.
- Parameters
-
[in] system unit system to set, see: https://nexusdemo.ensight.com/docs/python/html/ENS_UNITSSchema.html
- Returns
- dvs_ret TODO
◆ update_elements()
|
pure virtual |
Update elements for a specific part and element type.
This will update the elements for a part. The number of indices needed will vary depending on the type and the num_elements. I.E. if updating triangles with 3 elements the indices array should be of size 9 (3 triangles with 3 indices)
- Parameters
-
part_id unique id of part to update elements for (must match parts added with dvs_add_part_info) type element type of elements to update (points, triangles, quads, etc.) indices node indices for each element, for ordering info per element type see EnSight's User Manual, section 9.2.3 Supported EnSight Gold Elements num_indices the size of the indices array
- Returns
- ret_val TODO
◆ update_elements_polygon()
|
pure virtual |
Update N-SIDED elements.
This method will send over a list of arbitrarily sized polygons. The nodes_per_polygon param is an array containing the size of each polygon. I.E. if sending a quadrangle, and a 25 sided element the nodes_per_polygon array might look like [4, 25]. The size of the indices array would be 4+25=29 in this example where the first 4 items in the indices array would correspond to the first item in the nodes_per_polygon array, the next 25 items in the indices array would correspond to the second item in the nodes_per_polygon array
- Parameters
-
part_id unique id of part to update elements for (must match parts added with dvs_add_part_info) type element type of elements to update (N_SIDED_POLYGON or N_SIDED_POLYGON_GHOST) nodes_per_polygon Array containing number of nodes in each element/polygon nodes_per_polygon_size size of nodes_per_polygon array indices Array of node indices for the polygons described in nodes_per_polygon indices_size Size of indices array
- Returns
- dvs_ret TODO
◆ update_elements_polyhedral()
|
pure virtual |
Update N-FACED Elements.
- Parameters
-
part_id unique id of part to update elements for (must match parts added with dvs_add_part_info) type element type of elements to update (CONVEX_POLYHEDRON or CONVEX_POLYHEDRON_GHOST) faces_per_element Array of how many faces are in each element faces_per_element_size size of faces_per_element array nodes_per_face Array of how many nodes each face contains nodes_per_face_size size of nodes_per_face array indices Node indices for elements indices_size size of node indices
- Returns
- dvs_ret TODO
◆ update_nodes()
|
pure virtual |
Update nodes for a specific part.
- Parameters
-
part_id the id of part we are updating nodes for [in] x array of x components for nodes [in] y array of y components for nodes [in] z array of z components for nodes num_values number of values in individual x/y/z arrays (max nodes in part 2^31)
- Returns
- dvs_ret TODO
◆ update_nodes_structured() [1/2]
|
pure virtual |
Update the nodes for a curvilinear structured part.
A curvilinear structured part is represented by the global IJK grid across ranks, the local sub-block's IJK rank, and the actual XYZ values for each IJK grid point in the local grid.
Local IJK Dimensions: The min/max represent a local sub-block from the overall global grid. This could be the entire range if not splitting the grid into multiple ranks or a specific slice. For example you could have a 2ix3jx4k grid where it was split across the I dimension. One rank would specify min/max IJK as min:[0,0,0], max:[0,2,3], the other rank would specify min/max IJK as min:[1,0,0], max:[1,2,3]. If sending the data all as one rank it would be the full range of: min:[0,0,0], max:[1,2,3]
IJK Vals: These specify the actual XYZ location for each IJK value in the grid. The order of these should be by the fastest changing dimension being I, the next being J, and the next being K. I.E. for a 2x2x2 grid the x_vals array would contain the X component for IJK values: [i0 j0 k0][i1 j0 k0][i0 j1 k0][i1 j1 k0][i0 j0 k1][i1 j0 k1][i0 j1 k1][i1 j1 k1].
Note: iblanking information is sent via update_var_node() using SCALAR as the var type and DVS_STRUCTURED_IBLANKED_NODES as the variable id
Note: Ghost element information is sent update_var_element() using SCALAR as the var type and DVS_STRUCTURED_GHOST_ELEMENTS as the variable id
- Parameters
-
[in] part_id the id of part we are updating nodes for [in] global_ijk_max The one based global ijk max of the mesh across all ranks [in] local_ijk_min the zero based local sub-block ijk min for this rank [in] local_ijk_max the zero based local sub-block ijk max for this rank x_vals The actual X component for each IJK value for the local sub block (size (iMax-iMin+1)*(jMax-jMin+1)*(kMax-kMin+1)) y_vals The actual Y component for each IJK value for the local sub block (size (iMax-iMin+1)*(jMax-jMin+1)*(kMax-kMin+1)) z_vals The actual Z component for each IJK value for the local sub block (size (iMax-iMin+1)*(jMax-jMin+1)*(kMax-kMin+1))
- Returns
- dvs_ret TODO
◆ update_nodes_structured() [2/2]
|
pure virtual |
Update the nodes for a parallelepiped structured part.
A parallelepiped structured part is represented by the global IJK grid across ranks, the local sub-block's IJK range, the ogigin of the IJK sub-block, the normalized direction (unit) vectors for each IJK dimension, and the absolute distances for each IJK index from the origin of this sub-block.
Global IJK Max: for a 2x3x4 grid would be: [2 3 4]
Local IJK Dimensions: The min/max represent a local sub-block from the overall global grid. This could be the entire range if not splitting the grid into multiple ranks or a specific slice. For example you could have a 2ix3jx4k grid where it was split across the I dimension. One rank would specify min/max IJK as min:[0,0,0], max:[0,2,3], the other rank would specify min/max IJK as min:[1,0,0], max:[1,2,3]. If sending the data all as one rank it would be the full range of: min:[0,0,0], max:[1,2,3]
Direction (Unit) Vectors: These represent the XYZ orientation of each IJK axis. I.E. if I==X J==Y K==Z the vectors would be dir_i: [1 0 0], dir_j: [0 1 0], dir_k: [0 0 1]
IJK Vals: These specify the absolute distance from the XYZ origin in each IJK direction(specified by the direction vectors). So if the distance was 1 between every I index, 2 between every J index, and 3 in between every K index the arrays would look like: i_vals: [0 1 2 3 4 5....] j_vals: [0 2 4 6 8 10....] k_vals: [0 3 6 9 12 15....]
Note: iblanking information is sent via update_var_node() using SCALAR as the var type and DVS_STRUCTURED_IBLANKED_NODES as the variable id
Note: Ghost element information is sent update_var_element() using SCALAR as the var type and DVS_STRUCTURED_GHOST_ELEMENTS as the variable id
- Parameters
-
[in] part_id the id of part we are updating nodes for [in] global_ijk_max The one based global ijk max of the mesh across all ranks [in] local_ijk_min the zero based local sub-block ijk min for this rank [in] local_ijk_max the zero based local sub-block ijk max for this rank [in] origin the XYZ origin of this local ijk block [in] dir_i The normalized XYZ direction vector for the i dimension [in] dir_j The normalized XYZ direction vector for the j dimension [in] dir_k The normalized XYZ direction vector for the k dimension [in] i_vals The absolute distance vector for each i index from the local sub block's origin of size iMax-iMin+1 [in] j_vals The absolute distance vector for each j index from the local sub block's origin of size jMax-jMin+1 [in] k_vals The absolute distance vector for each k index from the local sub block's origin of size kMax-kMin+1
- Returns
- dvs_ret TODO
◆ update_plot()
|
pure virtual |
Update plot data for plot.
- Parameters
-
plot_id ID of plot [in] x_values Array of x axis values of plot [in] y_values array of y axis values of plot num_values number of x/y value pairs being sent
- Returns
- dvs_ret TODO
◆ update_var_case()
|
pure virtual |
Update case variable.
- Parameters
-
var_type type of variable we are updating var_id unique id of variable [in] values array of values for variable size based on type num_values size of values array
- Returns
- dvs_ret TODO
◆ update_var_element()
|
pure virtual |
Update elemental scalar variable values.
- Parameters
-
elem_type element type var_type type of var see ensight_dynmaic_data_enums.h: dvs_element_type for more info var_id id of variable part_id id of part [in] values array of values to update, should be same size as number of elements sent num_values size of values array
- Returns
- dvs_ret TODO
◆ update_var_field()
|
pure virtual |
Update var field values (nodal or elemental)
- Parameters
-
location Location of variable (node or element) elem_type Element type if location element, else undefined var_type Type of variable var_id ID of variable part_id ID of part variable is associated with [in] values array of values to update num_values size of values array
- Returns
- dvs_ret TODO
◆ update_var_node()
|
pure virtual |
Update nodal variable values.
- Parameters
-
var_type type of var var_id id of variable part_id id of part [in] values array of values to update, should be same size as number of nodes sent with update_nodes num_values size of values array
- Returns
- dvs_ret TODO
◆ update_var_part()
|
pure virtual |
Update part vector variable.
- Parameters
-
var_type type of variable we are updating var_id id of variable part_id id of part [in] values array of values for variable size based on type num_values size of values array
- Returns
- dvs_ret TODO
The documentation for this class was generated from the following file:
- D:/ANSYSDev/NoBackup/branches/EnSight-Second-Coming/ensight/user_defined_src/readers/dvs/dvs_client_interface.h