4.7. API 3.0 Call Order for Major Routines

As Compared to past APIs (For Conversion Purposes)

Part Build Info Gathering Process

(does not include all routines - just the basic ones)

Old:

===

number_of_parts = USERD_get_number_of_model_parts()

(Called once for model expecting user to update)

USERD_get_gold_part_build_info(&part_id,

                &part_types,

                part_description,

                &number_of_nodes,

                number_of_elements,

                ijk_dimension,

                iblanking_options)

New:

====

number_of_parts = USERD_get_number_of_model_parts(handle)

Loop on Parts (part_index from 0 to number_of_parts): --------------------

  USERD_get_part_info ( handle,

                part_index,

                &part_id, 

                part_description, 

                &number_of_geoms 

                &has_border_geom, 

                &border_geom_index))

Allocate geoms array to be number_of_geoms long.

   USERD_get_geoms_in_part( handle

                part_index,

                geoms)

   Loop on Geoms (geom_index from 0 to number_of_geoms 

-----------------------

     USERD_get_geom_info( handle , 

                geom_index,

                &geom_type,  Keep track of for EnSight. To set part_type

                &unode_index, 

               
                        &number_of_elems, 

                &snode_index, 

                &selem_index)

   If geom_type is Unstructured 

   ---------------------------------------

   if number_of_elems > 0

 Allocate elem_index array to be number_of_elems long.

       USERD_get_uelems_in_geom ( handle ,

                geom_index, 

               elem_index)

 Loop on elem_indicies (elem_index from 0 to number_of_uelems) 

   -------------------------------

         USERD_get_uelem_info( handle,

                elem_index,

                &number_of_elements,  accumulate by type for ensight

                &etype, 

                &contents_index_mode, note so can swizzle and/or hash

                &conn_changing_flag,   keep track of for ensight global

                &transient_var_flag, 

                &num_elem_variables) 

                ,

   end elem_indicies loop

   ------------------------ 

   endif number_of_elems

   if node_index != NULL 

       USERD_get_unode_info( handle ,

                node_index, 

                &number_of_nodes,  accumulate for ensight

                &interleave_flag, 

                &coords_changing_flag,  keep track of for ensight global

                &transient_var_flag, 

                &num_node_variables)

   endif node_index

   endif geom_type Unstructured

   else if geom_type is Structured 

   ------------------------------------------

   if node_index != NULL 

       USERD_get_snode_info( handle ,

                node_index, 

                &stype,

                ijk_dimensions[9],  accumulate for ensight

                &interleave_flag, 

                &coords_changing_flag,  keep track of for ensight global

                iblanking_options[6],

                &transient_var_flag, 

                &num_node_variables)

       USERD_get_selem_info( handle , 

                elem_index,

                &stype, 

                ijk_dimensions[9],

                &conn_changing_flag,  keep track of for ensight global

                &transient_var_flag, 

                &num_elem_variables)

   endif node_index

   endif geom_type Structured

   end geoms loop

   ----------------------- 

end parts loop

--------------------

Part Creation Actual Data Retrieval Process

(does not include all routines - just the basic ones)

Old:

===

Loop on Parts (part_index from 0 to number_of_parts):

--------------------

   if unstructured part 

     USERD_get_part_coords(int part_number,

                float **coord_array)

     USERD_get_part_node_ids(int part_number,

                int *nodeid_array)

   Loop on Element Types 

   ---------------------------------

       USERD_get_part_element_ids_by_type(int part_number,

                int element_type,

                int *elemid_array)

       USERD_get_part_elements_by_type(int part_number,

                int element_type, 

                int **conn_array)

   end element type loop 

   -------------------------------

   else if structured part 

     USERD_get_block_iblanking(int block_number,

                int *iblank_array)

     USERD_get_block_coords_by_component(int block_number,

                int which_component,

                float *coord_array)

     USERD_get_block_ghost_flags(int block_number, 

                int *ghost_flags)

     USERD_get_part_element_ids_by_type(int part_number,

                int element_type,

                int *elemid_array)

     USERD_get_part_elements_by_type(int part_number,

                int element_type,

                int **conn_array)

   endif

end part loop

------------------

New:

====

Loop on Parts (part_index from 0 to number_of_parts):

--------------------

   USERD_get_part_info(handle, 

                part_index,

                &part_id, 

                part_description, 

                &number_of_geoms,

                &has_border_geom, 

                &border_geom_index)

 Allocate geoms array to be number_of_geoms long.

   USERD_get_geoms_in_part(handle, 

                part_index,

                geoms)

 Loop on Geoms (geom_index from 0 to number_of_geoms
                        -----------------------

     USERD_get_geom_info(handle, 

                geom_index,

                &geom_type,  Keep track of for EnSight. To set part_type

                &unode_index, 

                &number_of_elems, 

                &snode_index, 

                &selem_index)

   If geom_type is Unstructured 

   ---------------------------------------

   if number_of_elems > 0

   Allocate elem_index array to be number_of_elems long. 

   USERD_get_uelems_in_geom(handle,

                geom_index, 

                elem_index)

 Loop on elem_indices (elem_index from 0 to number_of_uelems) 

   -------------------------------

           USERD_get_uelem_info(handle, 

                elem_index,

                &number_of_elements,  accumulate by type for ensight

                &etype, 

                &contents_index,_mode,  note so can swizzle and/or hash 

                &conn_changing_flag,  keep track of for ensight global

                &transient_var_flag, 

                &num_elem_variables)

   if etype is a regular elem

 Allocate int conn_array (number_of_elements x known conlength) 

             USERD_get_uelem_conn(handle,

                elem_index, 

                conn_array)

   else if etype is nsided

   Allocate int npf array (number_of_elements long) 

            
             USERD_get_uelem_nodes_per_face(handle,

                elem_index,

                npf)

 Accumulate total length of conn_array loop thru npf
                        array.

 Allocate int conn_array (as long as this accumulated length)

             USERD_get_uelem_conn(handle,

                elem_index,

                conn_array)

   else if etype is nfaced

   Allocate int fpe array (number_of_elements long) 

            
             USERD_get_uelem_faces_per_elem(handle,

                elem_index,

                fpe)

 Accumulate total length of nfp array by running through fpe array.

 Allocate int npf array (as long as this accumulated length)

            
             USERD_get_uelem_nodes_per_face(handle,

                elem_index,

                npf)

 Accumulate total length of conn_array by loop thru npf array.

 Allocate int conn_array (as long as this accumulated length) 

             USERD_get_uelem_conn(handle,

                elem_index, 

                conn_array)

   endif etype

   Allocate int elem_id_array (number_of_elements long) 

           USERD_get_elem_ids(handle,

                elem_index, 

                elem_id_array)

   end elems loop

   ------------------------ 

   endif number_of_elements

   if node_index != NULL 

         USERD_get_unode_info(handle,

                node_index, 

                &number_of_nodes,  accumulate for ensight

                &interleave_flag,

                &coords_changing_flag,  keep track of for ensight global

                &transient_var_flag,

                &num_node_variables)

 Allocate the float coord_array (3 x (number_of_nodes+1)) 

         USERD_get_node_coords(handle,

                node_index, 

                &coord_array[0][1], 

                &coord_array[1][1], 

                &coord_array[2][1])

   Allocate the int node_id_array (number_of_nodes+1) 

         USERD_get_node_ids(handle,

                node_index, 

                node_id_array)

   endif node_index

   else if geom_type is Structured 

   ------------------------------------------

   if node_index != NULL 

         USERD_get_snode_info(handle,

                node_index, 

                &stype,

                ijk_dimensions[9],  accumulate for ensight

                &interleave_flag, 

                &coords_changing_flag,  keep track of for ensight global

                iblanking_options[6], 

                &transient_var_flag, 

                &num_node_variables)

   Allocate the float coord_array (3 x (i*j*k+1)) 

         USERD_get_node_coords(handle,

                node_index, 

                &coord_array[0][1], 

                &coord_array[1][1], 

                &coord_array[2][1])

   Allocate for node_id_array (i*j*k + 1) 

         USERD_get_node_ids(handle,

                node_index, 

                node_id_array)

   if iblanking

   Allocate for iblanking_array (i*j*k + 1) 

           USERD_get_snode_iblanking(USERDHandle
                        handle,

                int snode_index,

                int *iblanking_array)

   endif

         USERD_get_selem_info(handle, 

                elem_index,

                &stype, 

                ijk_dimensions[9],

                &conn_changing_flag,  keep track of for ensight global

                &transient_var_flag, 

                &num_elem_variables)

   Allocate for elem_id_array ((i-1)*(j-1)*(k-1) long) 

         USERD_get_elem_ids(handle,

                elem_index, 

                elem_id_array)

 Allocate for ghost_flag_array ((i-1)*(j-1)*(k-1) long) 

         USERD_get_selem_ghost_flags(handle,

                elem_index, 

                ghost_flag_array)

   endif 

   endif

   end geoms loop

   ----------------------- 

end parts loop

--------------------

Var Info Gathering Process:

(does not include all routines - just the basic ones)

Old:

===

number_of_vars = USERD_get_number_of_variables( void )

(Called once for model)

USERD_get_gold_variable_info(char **var_description,

                char **var_filename, 

                int *var_type,

                int *var_classify,

                int *var_complex, 

                char **var_ifilename, 

                float *var_freq,

                int *var_contran,

                int *var_timeset)

New:

====

Constants

--------------

number_of_model_constants = USERD_get_number_of_model_constants(handle)

Loop on model constants (which_constant from 0 to number_of_model_constants)

----------------------------------

   USERD_get_model_constant_info(handle, 

                which_constant,

                description, 

                &complex, 

                &freq,  if complex

                &contran,  strict constant or single value that changes with time.

                &timeset)  if transient constant

end model constant loop

----------------------------------

Non-Constants

---------------------

number_of_parts = USERD_get_number_of_model_parts(handle)

Loop on Parts (part_index from 0 to number_of_parts):

--------------------

   USERD_get_part_info(handle, 

                part_index,

                &part_id, 

                part_description,

                &number_of_geoms, 

                &has_border_geom, 

                &border_geom_index)

 Allocate geoms array to be number_of_geoms long.

   USERD_get_geoms_in_part(handle, 

                part_index,

                geoms)

   Loop on Geoms (geom_index from 0 to number_of_geoms 

   -----------------------

     USERD_get_geom_info(handle, 

                geom_index,

                &geom_type,  Keep track of for EnSight. To set part_type

                &unode_index, 

                &number_of_elems, 

                &snode_index, 

                &selem_index)

   If geom_type is Unstructured 

   ---------------------------------------

   if number_of_elems > 0

   Allocate elem_index array to be number_of_elems long. 

         USERD_get_uelems_in_geom(handle,

                geom_index, 

                elem_index)

 Loop on elem_indices (elem_index from 0 to number_of_uelems)

   -------------------------------

           USERD_get_uelem_info(handle, 

                elem_index,

                &number_of_elements,  accumulate by type for ensight

                &etype, 

                &contents_index_mode,  note so can swizzle and/or hash 

                &conn_changing_flag,  keep track of for ensight global

                &transient_var_flag,

                &num_elem_variables)

   Loop on num_elem_variables vars 


                        ------------------------------------------------

             USERD_get_var_info(handle, 

                var_index,

                var_description, 

                var_filename, 

                &var_type, 

                &var_classify, 

                &var_complex, 

                var_ifilename,

                &var_freq, 

                &var_timeset, 

                &num_entities, 

                &interleave_flag)

 If new var, increment number_of_variables, and log its type etc. 

   end num_elem_variables loop

   end elem_indicies loop

   ------------------------ 

   end if number_of_elems

   if node_index != NULL 

         USERD_get_unode_info(handle,

                node_index, 

                &number_of_nodes,  accumulate for ensight

                &interleave_flag, 

                &coords_changing_flag,  keep track of for ensight global

                &transient_var_flag, 

                &num_node_variables)

   Loop on num_node_variables vars 

 ------------------------------------------------

   USERD_get_var_info(handle, 

                var_index,

                var_description, 

                var_filename,

                &var_type, 

                &var_classify, 

               
                &var_complex, 

                var_ifilename, 

                &var_freq, 

                &var_timeset, 

                &num_entities, 

                &interleave_flag)

 If the variable is new, increment number_of_variables, and log its type. 

   end node_variables loop

   endif node_index

   else if Structured

   if node_index != NULL 

         USERD_get_snode_info(handle,

                node_index, 

                &stype,

                ijk_dimensions[9],  accumulate for ensight

                &interleave_flag, 

                &coords_changing_flag,  keep track of for ensight global

                iblanking_options[6], 

                &transient_var_flag,

                &num_node_variables)

   Loop on num_node_variables vars 


                        ------------------------------------------------

           USERD_get_var_info(handle, 

                var_index,

                var_description, 

                var_filename, 

                &var_type, 

                &var_classify, 

                &var_complex, 

                var_ifilename, 

                &var_freq, 

                &var_timeset, 

                &num_entities, 

                &interleave_flag)

 If the new var, increment number_of_variables, and log its type etc.

   end node_variables loop

         USERD_get_selem_info(handle, 

                elem_index,

                &stype, 

                ijk_dimensions[9],

                &conn_changing_flag,  keep track of for ensight global

                &transient_var_flag, 

                &num_elem_variables)

   Loop on num_elem_variables vars 


                        ------------------------------------------------

           USERD_get_var_info(handle, 

                var_index,

                var_description, 

                var_filename, 

                &var_type, 

                &var_classify, 

                &var_complex, 

                var_ifilename, 

                &var_freq, 

                &var_timeset, 

                &num_entities, 

                &interleave_flag)

 If the new var, increment number_of_variables, and log its type etc. 

   end elem_variables loop

   endif node_index

   endif Structured

   end Geoms loop

   ----------------------- 

end Parts loop

--------------------

Var Data Retrieval Process:

(does not include all routines - just the basic ones)

Old:

===

Loop on Variables (which variable from 1 to number_of_vars)

-------------------------

   USERD_get_var_by_component(int
                        which_variable,

                int which_part,

                int var_type,

                int which_type, 

                int imag_data, 

                int component, 

                float *var_array)

end loop on variables

------------------------------

New:

====

Constants

--------------

number_of_model_constants = USERD_get_number_of_model_constants(handle)

Loop on model constants (which_constant from 0 to number_of_model_constants)

----------------------------------

   USERD_get_model_constant_info(handle, 

                which_constant,

                description, 

                &complex, 

                &freq, 

                &contran, 

                &timeset)

   if real

     real_constant_val =
                        USERD_get_model_constant_val(handle, 

                which_constant,

                imag_data)  set to FALSE

   else if complex

     imag_constant_val =
                        USERD_get_model_constant_val(handle,

                which_constant, 

                imag_data)  set to TRUE

   endif

end model constant loop

----------------------------------

Non-Constants

---------------------

Loop on Parts (part_index from 0 to number_of_parts):

--------------------

   USERD_get_part_info(handle, 

                part_index,

                &part_id, part_description, 

                &number_of_geoms 

                &has_border_geom, 

                &border_geom_index)

 Allocate geoms array to be number_of_geoms long.

   USERD_get_geoms_in_part(handle, 

                part_index,

                geoms)

   Loop on Geoms (geom_index from 0 to number_of_geoms 

   -----------------------

     USERD_get_geom_info(handle, 

                geom_index,

                &geom_type,  Keep track of for EnSight. To set part_type

                &unode_index, 

                &number_of_elems, 

                &snode_index, 

                &selem_index)

   If geom_type is Unstructured 

   ---------------------------------------

   if number_of_elems > 0

   Allocate elem_index array to be number_of_elems long. 

         USERD_get_uelems_in_geom(handle,

                geom_index, 

                elem_index)

 Loop on elem_indices (elem_index from 0 to number_of_uelems) 

   -------------------------------

           USERD_get_uelem_info(handle, 

                elem_index,

                &number_of_elements,  accumulate by type for  ensight

                &etype, 

                &contents_index_mode,  note so can swizzle and/or hash 

                &conn_changing_flag,  keep track of for ensight global

                &transient_var_flag 

                &num_elem_variables)

   Loop on num_elem_variables vars 


                        ------------------------------------------------

             USERD_get_var_info(handle, 

                var_index,

                var_description, 

                var_filename, 

                &var_type, 

                &var_classify, 

                &var_complex, 

                var_ifilename, 

                &var_freq, 

                &var_timeset, 

                &num_entities, 

                &interleave_flag)

 Allocate var_array according to var_type, and var_classify. 

             USERD_get_var_array(handle,

                var_index, 

                var_array)

   end num_elem_variables loop

   end elem_indicies loop

   ------------------------ 

   endif number_of_elements

   if node_index != NULL 

         USERD_get_unode_info(handle,

                node_index, 

                &number_of_nodes,  accumulate for ensight

                &interleave_flag, 

                &coords_changing_flag,  keep track of for ensight global

                &transient_var_flag, 

                &num_node_variables)

   Loop on num_node_variables vars 

   ------------------------------------------------ 

           USERD_get_var_info(handle,

                var_index, 

                var_description, 

                var_filename, 

                &var_type, 

                &var_classify, 

                &var_complex, 

                var_ifilename, 

                &var_freq, 

                &var_timeset, 

                &num_entities, 

                &interleave_flag)

 Allocate var_array according to var_type, and var_classify. 

           USERD_get_var_array(handle,

                var_index,

                var_array)

   end num_node_variables loop 

   endif node_index

   else if geom_type is Structured 

   ------------------------------------------

   if node_index != NULL 

         USERD_get_snode_info(handle,

                node_index, 

                &stype,

                ijk_dimensions[9],  accumulate for ensight

                &interleave_flag, 

                &coords_changing_flag,  keep track of for ensight global

                iblanking_options[6], 

                &transient_var_flag, 

                &num_node_variables)

   Loop on num_node_variables vars 


                        ------------------------------------------------

           USERD_get_var_info(handle, 

                var_index,

                var_description, 

                var_filename, 

                &var_type, 

                &var_classify, 

                &var_complex, 

                var_ifilename, 

                &var_freq, 

                &var_timeset, 

                &num_entities, 

                &interleave_flag)

 Allocate var_array according to var_type, and var_classify. 

           USERD_get_var_array(handle,

                var_index, 

                var_array)

   end node_variables loop

         USERD_get_selem_info(handle, 

                elem_index,

                &stype, 

                ijk_dimensions[9])

USERD message routines:

EnSight includes several USERD functions that enable the reader to send informational, warning, error, or logging information back up to the server at any point in the reader execution for display to the console, a message window or for entry into a log file. These are documented elsewhere USERD Message Routines (Info, Error, Log, Etc.).