ftp.nice.ch/pub/next/graphics/3d/geomview.1.4.1.s.tar.gz#/Geomview/src/bin/geomutil/ucd/ucd_defs.h

This is ucd_defs.h in view mode; [Download] [Up]

/*		@(#)ucd_defs.h	7.7 Stardent 92/03/20	*/
/*
			Copyright (c) 1989 by
			Stardent Computer Inc.
			All Rights Reserved
	
	This software comprises unpublished confidential information of
	Stardent Computer Inc. and may not be used, copied or made
	available to anyone, except in accordance with the license
	under which it is furnished.
	
	This file is under sccs control at AVS in:
	@europa/sccs1.p/avs/include/s.ucd_defs.h
	
*/
/*#ifdef SX*/
/* I don't like to see port-specific differences like this. */
/* KCI thought it was necessary for SX-3. */
/* See if it causes trouble on others. */
#   include <avs/port.h>
/*#endif SX*/
 

/*---------------------------
   Cell Type Definitions      	
 ---------------------------*/

#define UCD_NTYPES		8
#define UCD_NUM_CELL_TYPES	8

#define UCD_POINT		0
#define UCD_LINE		1
#define	UCD_TRIANGLE		2
#define UCD_QUADRILATERAL	3
#define UCD_TETRAHEDRON		4
#define UCD_PYRAMID		5
#define UCD_PRISM		6
#define UCD_HEXAHEDRON		7

#define UCD_MAX_NODE_PER_CELL    20

/*---------------------------
   Miscellaneous Defines      	
 ---------------------------*/

#define UCD_MATERIAL_IDS  0x1
#define UCD_NODE_NAMES    0x2
#define UCD_CELL_NAMES    0x4
#define UCD_CELL_TYPES    0x8
#define UCD_MID_EDGES     0x10
#define UCD_CHAR          0x20
#define UCD_INT           0x40

#define UCD_LABEL_LEN         1024
#define UCD_MAX_COMPONENTS    50
#define UCD_MAX_VECLEN        9


/*---------------------------
   Cell Type Variables      	
 ---------------------------*/

extern	int	UCD_num_nodes[];	/* number of nodes in a cell */
extern	int	UCD_num_mid_nodes[];	/* number of nodes in a cell */
					/* with mid-edge nodes	     */
extern	int	UCD_num_faces[];	/* number of faces in a cell */

 
 

/*-----------------------------------------
   Unstructured Cell Data Type Definitions
 -----------------------------------------*/


typedef union {				/* name union                        */
 	char		*c;		/* character string for label names  */
 	int		i;		/* integer for numerical names       */
}  UCD_name;  



/*---------------------------------------
   NOTE:  in the util_flag field, the two
	  rightmost bits are reserved for
	  internal usage.
 -----------------------------------------*/


typedef struct UCD_structure_ {	
 
 	/*--------- Structure Header Information ---------*/
 	char		*name;		 /* structure name                    */
 	int		name_flag;	 /* are node/cell names chars or ints */
 	int		ncells;		 /* number of cells                   */
 	int		nnodes;		 /* number of nodes                   */
	float		min_extent[3];	 /* structure extent		      */
	float		max_extent[3];	 /* structure extent		      */
 	int		data_veclen;	 /* length of data vector for struct  */
	float		*data;		 /* data for the structure	      */
	char		*data_labels;	 /* labels for data components        */
	char		*data_units;	 /* labels for data units             */
	int		util_flag;  	 /* utility flag (see above for any   */
					 /* restrictions) 		      */
 
 
 	/*--------- Cell Information ---------*/
	UCD_name	*cell_name;	 /* cell names		              */
 	char		**element_type;	 /* cell element types                */
 	int		*material_type;	 /* user defined material types       */
 	int		*cell_type;	 /* cell types (see above defines)    */
 	int		cell_veclen;	 /* length of data vector             */
 	float		*cell_data;	 /* data for cell-based datasets      */
	float		*min_cell_data;  /* min val for cell data components  */
	float		*max_cell_data;  /* max val for cell data components  */
	char		*cell_labels;	 /* labels for cell data components   */
	char		*cell_units;	 /* labels for cell data units        */
	int		*cell_components;/* array of cell component mix       */
	int		*cell_active;    /* array of active cell components   */
 	int		*mid_edge_flags; /* cell edges with mid edge nodes    */
 	int		node_conn_size;  /* size of the node connectivity list*/
 	int		*node_list;	 /* node list of connectivity         */
 	int		*node_list_ptr;  /* location of a cell's node list    */
 	int		ucd_last_cell;  
 
  
 	/*--------- Node Information ---------*/
	UCD_name	*node_name;	 /* node names              	      */
 	float		*x, *y, *z;	 /* position of the nodes             */
 	int		node_veclen;	 /* length of data vector             */
 	float		*node_data;	 /* data vector for the nodes         */
	float		*min_node_data;  /* min val for node data components  */
	float		*max_node_data;  /* max val for node data components  */
	char		*node_labels;	 /* labels for node data components   */
	char		*node_units; 	 /* labels for node data units        */
	int		*node_components;/* array of node component mix       */
	int		*node_active;    /* array of active node components   */
 	int		cell_conn_size;  /* size of the cell connectivity list*/
 	int		*cell_list;	 /* cell list of connectivity         */
 	int		*cell_list_ptr;  /* location of a node's cell list    */
 	int		ucd_last_node;  


	/*--------- Allocation Information ----------*/
	enum {
		UCD_ONE_BLOCK,
		UCD_RW_SHM,
		UCD_RO_SHM
	} 		alloc_case;	/* storage allocation strategy	      */
	int		shm_key;	/* shared memory key		      */
	int		shm_id;		/* shared memory id		      */
	char		*shm_base;	/* shared memory base		      */
	int             mesh_id;        /* unique id of the mesh instance     */

} UCD_structure;



/*----------------------------------------------------------------------------
  ----------------------------------------------------------------------------

    Function Headers for the routines handling Unstructured Cell Data (UCD)

  ----------------------------------------------------------------------------
  ---------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
char  *UCDstructure_alloc (name, data_veclen, name_flag, 
			   ncells, cell_count, cell_veclen,
		           nnodes, node_count, node_veclen, util_flag)
char		*name;
int		data_veclen;
int		name_flag;
int		ncells;
int		cell_count;
int		cell_veclen;
int		nnodes;
int		node_count;
int		node_veclen;
int		util_flag;

This function creates a new top level structure and returns a pointer
to that structure.

Inputs:		name		- structure name
		data_veclen	- length of structure data vector 
		name_flag	- are node/cell names chars or ints
					char = UCD_CHAR,  int = UCD_INT
		ncells		- number of cells in the structure
		cell_count	- expected number of nodes per cell
		cell_veclen	- length of cell data vector
		nnodes		- number of nodes in the structure 
		node_count	- expected number of cells per node
		node_veclen	- length of node data vector
		util_flag	- utility flag for general usage
Outputs: 			- none
Returns:			- pointer to the new structure
				  pointer = NULL if error

Description:

	The UCD_structure contains pointers to several blocks of memory.
	They are arranged in two groups as shown below:


		+-----------------------+  \
		|			|   \
		|   UCD_structure	|    |
		|			|    |
		|			|    |
		| name, data, 		|    |
	   |====| data_labels, 		|    |
	   |====| element_type,		|    |
	   ||	| etc., etc., etc.	|    |
	   ||	|			|    |
	|=======| cell_data, 		|    |
	|=======| x, y, z,		|     }  msize
	|| ||	| connectivity lists	|    |
	|| ||	| node_data		|    |
	|| ||	|			|    |
	|| ||	+-----------------------+    |
	|| |==>>|			|    |
	|| ||	|			|    |
	|| ||	|			|    |
	|| |==>>|			|    |
	||	| (Some of these are	|    |
	||	| arrays of pointers	|    |
	||	| to additional pieces	|    |
	||	| of malloc'ed memory.)	|    |
	||	|			|   /
	||	+-----------------------+  /
	||
	||	+-----------------------+  \
	|=====>>|			|   \
	||	|			|    |
	||	| (All of these		|     }  ssize
	|=====>>| are floats or ints.)	|    |
		|			|    |
		|			|   /
		+-----------------------+  /

	
	compute_sizes calculates the required memory block sizes msize 
	and ssize.  The two blocks shown above can either be allocated
	in one big chunk or be in separate regions of memory.

	The UCDstructure and most of the arrays it points to are allocated
	in one big block of msize bytes.  This is allocated by malloc.
	carve_up_the_memory fills in all the pointers to appropriate
	positions in this block of memory.

	The cell_data, x, y, z, connectivity lists and node_data arrays 
	tend to require very large amounts of memory so it is beneficial 
	to put them in shared memory when possible.  When not appropriate, 
	both blocks shown above can be obtained with a single malloc.

	The various cases are encoded in fields of UCDstructure:

	case 1 - Everything in one big malloc'ed block.

		This was the original implementation.  Will still be used
		on sytems without shared memory or if the shared memory
		allocation fails for any reason.

		alloc_case = UCD_ONE_BLOCK
		shm_key not used
		shm_id not used
		shm_base not used

	case 2 - Second block is in Read/Write shared memory.

		This is the normal case for the producer of UCD.
		
		alloc_case = UCD_RW_SHM
		shm_key = shared memory key 
		shm_id = shared memory identifier
		shm_base = base address of the shared memory

	case 3 - Second block is in Read-Only shared memory.

		This is the normal case for the consumer of UCD.

		The same UCD could be attached to more than one input
		port so we don't want a consumer making any changes to it.
		Therefore, the shared memory is made read-only.

		alloc_case = UCD_RO_SHM
		shm_key = shared memory key  (this is passed thru the socket)
		shm_id = shared memory identifier  (each process must 
				obtain this from shmget because each process
				might have a different id for the same
				shared memory segment)
		shm_base = base address of the shared memory  (each process
				must obtain this from shmat because each
				process might have the shared memory
				segment at a different address)

	case 4 - Second block is in own malloc'ed block.

		Sometimes the consumer of a UCD will want to modify it
		in place - to normalize it or something.

		The module writer can prevent any of the UCD from being
		in Read-Only storage by specifying the MODIFY_IN option
		in AVScreate_input_port.

		I'm sure not what to do about this yet.

		If it is not convenient to do something earlier, anything
		in read-only shared memory will get copied into a malloc'ed
		block and all the pointers will be fixed up.

		TO BE CONTINUED .....

-----------------------------------------------------------------------------*/
extern char  *UCDstructure_alloc ();



/*----------------------------------------------------------------------------
int UCDstructure_free (structure)
UCD_structure *structure;

This function frees the storage used by structure.

Inputs:	structure		- structure to free
Outputs:			- none
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_free ();
 


/*----------------------------------------------------------------------------
int UCDstructure_get_header (structure, name, data_veclen, name_flag, ncells, 
			     cell_veclen, nnodes, node_veclen, util_flag)
UCD_structure	*structure;
char		*name;
int		*data_veclen;
int		*name_flag;
int		*ncells;
int		*cell_veclen;
int		*nnodes;
int             *node_veclen;
int		*util_flag;

This function finds out all the header information about a UCD_structure and
returns those values.

Inputs:		structure	- structure to find information
Outputs:	name		- structure name
		data_veclen	- length of structure data vector 
		name_flag	- are node/cell names chars or ints
					char = UCD_CHAR,  int = UCD_INT
		ncells		- number of cells in the structure
		cell_veclen	- length of cell data vector 
 		nnodes		- number of nodes in the structure
		node_veclen	- length of node data vector 
		util_flag	- utility flag
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_header ();



/*----------------------------------------------------------------------------
int UCDstructure_set_header_flag (structure, util_flag)
UCD_structure	*structure;
int		util_flag;     

This function sets the header flag bits.

Inputs:		structure		- structure to find information
         	util_flag		- utility flag
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_header_flag ();



/*----------------------------------------------------------------------------
int UCDstructure_get_data (structure, data)
UCD_structure	*structure;
float		**data;     

This function returns a pointer to the array containing the data vector
for the structure.  
 
Inputs:		structure	- structure to find information
Outputs:	data		- pointer to the structure data vector
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_data ();



/*----------------------------------------------------------------------------
int UCDstructure_set_data (structure, data)
UCD_structure	*structure;
float		*data;     

This function copies the data from the array pointed to by "data"
into the structure's data array.  There should be data_veclen
data elements in this array.

Inputs:		structure	- structure to find information
        	data		- pointer to the data vector
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_data ();



/*----------------------------------------------------------------------------
int UCDstructure_get_extent (structure, min_extent, max_extent)
UCD_structure	*structure;
float		*min_extent;
float		*max_extent;

This routine allows the module writer to obtain the extent of the
structure. 


Inputs:		structure		- structure to find information
Outputs: 	min_extent 		- coordinate extent of structure
         	max_extent 		- coordinate extent of structure
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_extent ();



/*----------------------------------------------------------------------------
int UCDstructure_set_extent (structure, min_extent, max_extent)
UCD_structure	*structure;
float		*min_extent;
float		*max_extent;

This routine allows the module writer to set the extent of the
structure. 

Inputs:		structure		- structure to find information
         	min_extent 		- coordinate extent of structure
         	max_extent 		- coordinate extent of structure
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_extent ();



/*----------------------------------------------------------------------------
int UCDstructure_get_data_labels (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to get the labels for each
component in the structure. These labels are for cases when there is 
structure based data.  

For instance, in the case of a CFD dataset,
the module writer might want to label components of the field as
temperature, density, mach number, etc.  In turn, these labels would
appear on the dials so that the user would have a better understanding
of which component each dial is attached to.

   Example:   labels    = "temp;density;mach number"
              delimiter = ";"

Inputs:		structure		- structure to find information
Outputs: 	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_data_labels ();



/*--------------------------------------------------------------------
int  UCDstructure_get_data_label (structure, number, label)
UCD_structure	*structure;
int 	        number; 
char            *label;   

This routine allows the module writer to query the label for an individual 
component in the structure.  

Input:		structure	-- structure to get labels in
		number		-- individual component number
Outputs:	labels		-- string with labels included
Returns:			-- 1 if success;  0 if failure
----------------------------------------------------------------------*/
extern int  UCDstructure_get_data_label ();



/*----------------------------------------------------------------------------
int UCDstructure_set_data_labels (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to set the labels for each
component in the structure. These labels are for cases when there is 
structure based data.  

For instance, in the case of a CFD dataset,
the module writer might want to label components of the field as
temperature, density, mach number, etc.  In turn, these labels would
appear on the dials so that the user would have a better understanding
of which component each dial is attached to.

   Example:   labels    = "temp;density;mach number"
              delimiter = ";"

Inputs:		structure		- structure to find information
         	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_data_labels ();



/*----------------------------------------------------------------------------
int UCDstructure_get_cell_labels (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to get the labels for each
component in the structure. These labels are for cases when there is 
cell based data.  

For instance, in the case of a CFD dataset,
the module writer might want to label components of the field as
temperature, density, mach number, etc.  In turn, these labels would
appear on the dials so that the user would have a better understanding
of which component each dial is attached to.

   Example:   labels    = "temp;density;mach number"
              delimiter = ";"

Inputs:		structure		- structure to find information
Outputs: 	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_cell_labels ();



/*--------------------------------------------------------------------
int  UCDstructure_get_cell_label (structure, number, label)
UCD_structure	*structure;
int 	        number; 
char            *label;   

This routine allows the module writer to query the label for an individual 
component in the structure.  

Input:		structure	-- structure to get labels in
		number		-- individual component number
Outputs:	labels		-- string with labels included
Returns:			-- 1 if success;  0 if failure
----------------------------------------------------------------------*/
extern int  UCDstructure_get_cell_label ();



/*----------------------------------------------------------------------------
int UCDstructure_set_cell_labels (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to set the labels for each
component in the structure. These labels are for cases when there is 
cell based data.  

For instance, in the case of a CFD dataset,
the module writer might want to label components of the field as
temperature, density, mach number, etc.  In turn, these labels would
appear on the dials so that the user would have a better understanding
of which component each dial is attached to.

   Example:   labels    = "temp;density;mach number"
              delimiter = ";"

Inputs:		structure		- structure to find information
         	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_cell_labels ();



/*----------------------------------------------------------------------------
int UCDstructure_get_node_labels (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to get the labels for each
component in the structure. These labels are for cases when there is 
node based data.  

For instance, in the case of a CFD dataset,
the module writer might want to label components of the field as
temperature, density, mach number, etc.  In turn, these labels would
appear on the dials so that the user would have a better understanding
of which component each dial is attached to.

   Example:   labels    = "temp;density;mach number"
              delimiter = ";"

Inputs:		structure		- structure to find information
Outputs: 	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_node_labels ();



/*--------------------------------------------------------------------
int  UCDstructure_get_node_label (structure, number, label)
UCD_structure	*structure;
int 	        number; 
char            *label;   

This routine allows the module writer to query the label for an individual 
component in the structure.  

Input:		structure	-- structure to get labels in
		number		-- individual component number
Outputs:	labels		-- string with labels included
Returns:			-- 1 if success;  0 if failure
----------------------------------------------------------------------*/
extern int  UCDstructure_get_node_label ();



/*----------------------------------------------------------------------------
int UCDstructure_set_node_labels (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to set the labels for each
component in the structure. These labels are for cases when there is 
node based data.  

For instance, in the case of a CFD dataset,
the module writer might want to label components of the field as
temperature, density, mach number, etc.  In turn, these labels would
appear on the dials so that the user would have a better understanding
of which component each dial is attached to.

   Example:   labels    = "temp;density;mach number"
              delimiter = ";"

Inputs:		structure		- structure to find information
         	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_node_labels ();


/*----------------------------------------------------------------------------
int UCDstructure_get_data_units (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to get the unit labels for each
component in the structure. These labels are for cases when there is 
structure based data.  

For instance, in the case of a CFD dataset, the module writer might want 
to label components of the field as degrees, meters, etc.  

   Example:   labels    = "degrees;meters"
              delimiter = ";"

Inputs:		structure		- structure to find information
Outputs: 	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_data_units ();



/*--------------------------------------------------------------------
int  UCDstructure_get_data_unit (structure, number, label)
UCD_structure	*structure;
int 	        number; 
char            *label;   

This routine allows the module writer to query the label for an individual 
unit in the structure.  

Input:		structure	-- structure to get labels in
		number		-- individual component number
Outputs:	labels		-- string with labels included
Returns:			-- 1 if success;  0 if failure
----------------------------------------------------------------------*/
extern int  UCDstructure_get_data_unit ();



/*----------------------------------------------------------------------------
int UCDstructure_set_data_units (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to set the unit labels for each
component in the structure. These labels are for cases when there is 
structure based data.  

For instance, in the case of a CFD dataset, the module writer might want 
to label components of the field as degrees, meters, etc.  

   Example:   labels    = "degrees;meters"
              delimiter = ";"

Inputs:		structure		- structure to find information
         	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_data_units ();



/*----------------------------------------------------------------------------
int UCDstructure_get_cell_units (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to get the unit labels for each
component in the structure. These labels are for cases when there is 
cell based data.  

For instance, in the case of a CFD dataset, the module writer might want 
to label components of the field as degrees, meters, etc.  

   Example:   labels    = "degrees;meters"
              delimiter = ";"

Inputs:		structure		- structure to find information
Outputs: 	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_cell_units ();



/*--------------------------------------------------------------------
int  UCDstructure_get_cell_unit (structure, number, label)
UCD_structure	*structure;
int 	        number; 
char            *label;   

This routine allows the module writer to query the label for an individual 
unit in the structure.  

Input:		structure	-- structure to get labels in
		number		-- individual component number
Outputs:	labels		-- string with labels included
Returns:			-- 1 if success;  0 if failure
----------------------------------------------------------------------*/
extern int  UCDstructure_get_cell_unit ();



/*----------------------------------------------------------------------------
int UCDstructure_set_cell_units (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to set the unit labels for each
component in the structure. These labels are for cases when there is 
cell based data.  

For instance, in the case of a CFD dataset, the module writer might want 
to label components of the field as degrees, meters, etc.  

   Example:   labels    = "degrees;meters"
              delimiter = ";"

Inputs:		structure		- structure to find information
         	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_cell_units ();



/*----------------------------------------------------------------------------
int UCDstructure_get_node_units (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to get the unit labels for each
component in the structure. These labels are for cases when there is 
node based data.  

For instance, in the case of a CFD dataset, the module writer might want 
to label components of the field as degrees, meters, etc.  

   Example:   labels    = "degrees;meters"
              delimiter = ";"

Inputs:		structure		- structure to find information
Outputs: 	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_node_units ();



/*--------------------------------------------------------------------
int  UCDstructure_get_node_unit (structure, number, label)
UCD_structure	*structure;
int 	        number; 
char            *label;   

This routine allows the module writer to query the label for an individual 
unit in the structure.  

Input:		structure	-- structure to get labels in
		number		-- individual component number
Outputs:	labels		-- string with labels included
Returns:			-- 1 if success;  0 if failure
----------------------------------------------------------------------*/
extern int  UCDstructure_get_node_unit ();



/*----------------------------------------------------------------------------
int UCDstructure_set_node_units (structure, labels, delimiter)
UCD_structure	*structure;
char 		*labels;
char 		*delimiter;

This routine allows the module writer to set the unit labels for each
component in the structure. These labels are for cases when there is 
node based data.  

For instance, in the case of a CFD dataset, the module writer might want 
to label components of the field as degrees, meters, etc.  

   Example:   labels    = "degrees;meters"
              delimiter = ";"

Inputs:		structure		- structure to find information
         	labels     		- string with labels included   
         	delimiter  		- delimiter between each label  
Returns:				- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_node_units ();



/*---------------------------------------------------------------------------
int UCDstructure_invalid_cell_minmax (structure)
UCD_structure        *structure;

This routine allows the module writer to set the min/max range of the
structure cell data to be invalid.  This function should be used after 
the structure data has been changed by the module and the module does 
not want to spend the time recomputing the cell minmax.                   

Input:          structure       -- structure to set cell min/max invalid
Outputs:                        -- none
Returns:                        -- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_invalid_cell_minmax ();



/*---------------------------------------------------------------------------
int  UCDstructure_get_cell_minmax (structure, min, max)
UCD_structure   *structure;
float           *min;
float           *max;

This routine allows the module writer to obtain the range of the
structure cell data.  It should be noted that min and max are arrays of
dimension structure->cell_veclen.

Input:          structure       -- structure to get min/max in
Outputs:        min             -- value of minimum data point
		max             -- value of maximum data point
Returns:                        -- 1 = valid data;  0 = invalid data
-----------------------------------------------------------------------------*/
extern int  UCDstructure_get_cell_minmax ();



/*---------------------------------------------------------------------------
int  UCDstructure_set_cell_minmax (structure, min, max)
UCD_structure   *structure;
float           *min;
float           *max;

This routine allows the module writer to set the range of the
structure cell data.  It should be noted that min and max are arrays of
dimension structure->cell_veclen.

Input:          structure       -- structure to set min/max in
Outputs:        min             -- value of minimum data point
		max             -- value of maximum data point
Returns:                        -- 1 if successful;  0 if failure
-----------------------------------------------------------------------------*/
extern int  UCDstructure_set_cell_minmax ();



/*---------------------------------------------------------------------------
int UCDstructure_invalid_node_minmax (structure)
UCD_structure        *structure;

This routine allows the module writer to set the min/max range of the
structure node data to be invalid.  This function should be used after 
the structure data has been changed by the module and the module does 
not want to spend the time recomputing the node minmax.                   

Input:          structure       -- structure to set node min/max invalid
Outputs:                        -- none
Returns:                        -- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_invalid_node_minmax ();



/*---------------------------------------------------------------------------
int  UCDstructure_get_node_minmax (structure, min, max)
UCD_structure   *structure;
float           *min;
float           *max;

This routine allows the module writer to obtain the range of the
structure node data.  It should be noted that min and max are arrays of
dimension structure->node_veclen.

Input:          structure       -- structure to get min/max in
Outputs:        min             -- value of minimum data point
		max             -- value of maximum data point
Returns:                        -- 1 = valid data;  0 = invalid data
-----------------------------------------------------------------------------*/
extern int  UCDstructure_get_node_minmax ();



/*---------------------------------------------------------------------------
int  UCDstructure_set_node_minmax (structure, min, max)
UCD_structure   *structure;
float           *min;
float           *max;

This routine allows the module writer to set the range of the
structure node data.  It should be noted that min and max are arrays of
dimension structure->node_veclen.

Input:          structure       -- structure to set min/max in
Outputs:        min             -- value of minimum data point
		max             -- value of maximum data point
Returns:                        -- 1 if successful;  0 if failure
-----------------------------------------------------------------------------*/
extern int  UCDstructure_set_node_minmax ();



/*----------------------------------------------------------------------------
int UCDstructure_get_cell_data (structure, data)
UCD_structure	*structure;
float		**data;     

This function returns a pointer to the array containing the data vectors
for all of the cells in the structure.  
 
Inputs:		structure	- structure to find information
Outputs:	data		- pointer to the cell data vectors
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_cell_data ();
 
 
 
/*----------------------------------------------------------------------------
int UCDstructure_set_cell_data (structure, data)
UCD_structure	*structure;
float		*data;     

This function copies the cell data from the array pointed to by "data"
into the structure's cell data array.  There should be cell_veclen*ncells
data elements in this array.

Inputs:		structure	- structure to find information
        	data		- pointer to the cell data vectors
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_cell_data ();
 
 
 
/*----------------------------------------------------------------------------
int UCDstructure_get_node_data (structure, data)
UCD_structure	*structure;
float		**data;     

This function returns pointers to the array containing the data vectors
for the nodes.

Inputs:		structure	- structure to find information
Outputs:	data		- pointer to the node data vectors
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_node_data ();


 
/*----------------------------------------------------------------------------
int UCDstructure_set_node_data (structure, data)
UCD_structure	*structure;
float		*data;     

This function copies the node data from the array pointed to by "data"
into the structure's node data array.  There should be node_veclen*nnodes
data elements in this array.

Inputs:		structure	- structure to find information
        	data		- pointer to the node data vectors
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_node_data ();



/*----------------------------------------------------------------------------
int UCDstructure_get_cell_components (structure, components)
UCD_structure	*structure;
int  		**components;     

This function returns pointers to the array containing the cell component
list.  For instance, if there are four different components in the
cell data vector (e.g.  scalar, 3-vector, 2-vector, scalar), the component
list would be:  (1 3 2 1)

Inputs:		structure	- structure to find information
Outputs:	components	- pointer to the cell component list  
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_cell_components ();


 
/*----------------------------------------------------------------------------
int UCDstructure_set_cell_components (structure, components, number)
UCD_structure	*structure;
int  		*components;     
int		number;

This function copies the array containing the cell component
list.  For instance, if there are four different components in the
cell data vector (e.g.  scalar, 3-vector, 2-vector, scalar), the component
list would be:  (1 3 2 1)

Inputs:		structure	- structure to find information
         	components	- pointer to the cell component list  
		number		- number of components in the list
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_cell_components ();


 
/*----------------------------------------------------------------------------
int UCDstructure_get_node_components (structure, components)
UCD_structure	*structure;
int  		**components;     

This function returns pointers to the array containing the node component
list.  For instance, if there are four different components in the
node data vector (e.g.  scalar, 3-vector, 2-vector, scalar), the component
list would be:  (1 3 2 1)

Inputs:		structure	- structure to find information
Outputs:	components	- pointer to the node component list  
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_node_components ();


 
/*----------------------------------------------------------------------------
int UCDstructure_set_node_components (structure, components, number)
UCD_structure	*structure;
int  		*components;     
int		number;

This function copies the array containing the node component
list.  For instance, if there are four different components in the
node data vector (e.g.  scalar, 3-vector, 2-vector, scalar), the component
list would be:  (1 3 2 1)

Inputs:		structure	- structure to find information
         	components	- pointer to the node component list  
		number		- number of components in the list
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_node_components ();



/*----------------------------------------------------------------------------
int UCDstructure_get_cell_active (structure, active)
UCD_structure	*structure;
int  		**active;     

This function returns a pointer to the array containing the cell 
active component list.  For instance, if there are four different components 
in the cell data vector and the module is using the second component, the
list would be:  (0 1 0 0)

Inputs:		structure	- structure to find information
Outputs:	active		- pointer to the cell active component list  
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_cell_active ();


 
/*----------------------------------------------------------------------------
int UCDstructure_set_cell_active (structure, active)
UCD_structure	*structure;
int  		*active;     

This function sets the array containing the cell active component list.  
For instance, if there are four different components in the cell data 
vector and the module is using the second component, the list would 
be:  (0 1 0 0)

Inputs:		structure	- structure to find information
         	active		- pointer to the cell active component list  
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_cell_active ();


 
/*----------------------------------------------------------------------------
int UCDstructure_get_node_active (structure, active)
UCD_structure	*structure;
int  		**active;     

This function returns a pointer to the array containing the node 
active component list.  For instance, if there are four different components 
in the node data vector and the module is using the second component, the
list would be:  (0 1 0 0)

Inputs:		structure	- structure to find information
Outputs:	active		- pointer to the node active component list  
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_node_active ();


 
/*----------------------------------------------------------------------------
int UCDstructure_set_node_active (structure, active)
UCD_structure	*structure;
int  		*active;     

This function sets the array containing the node active component list.  
For instance, if there are four different components in the node data 
vector and the module is using the second component, the list would 
be:  (0 1 0 0)

Inputs:		structure	- structure to find information
         	active		- pointer to the node active component list  
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_node_active ();


 
/*----------------------------------------------------------------------------
int UCDstructure_get_node_positions (structure, x, y, z)
UCD_structure	*structure;
float		**x, **y, **z;

This function returns pointers to the arrays containing the x, y and z
coordinates of node positions.

Inputs:		structure	- structure to find information
Outputs:	x, y, z		- pointer to the x,y,z arrays
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_get_node_positions ();



/*----------------------------------------------------------------------------
int UCDstructure_set_node_positions (structure, x, y, z)
UCD_structure	*structure;
float		*x, *y, *z;

This function copies the x, y and z coordinate arrays from the arrays
pointed to by "x", "y" and "z" into the structure's node position arrays.
There should be nnodes coordinates in each array.

Inputs:		structure	- structure to find information
        	x, y, z		- pointer to the x,y,z arrays
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDstructure_set_node_positions ();


 

/*----------------------------------------------------------------------------
int UCDcell_get_information (structure, cell, name, element_type, 
			     material_type, cell_type, 
 			     mid_edge_flags, node_list)
UCD_structure	*structure;
int		cell;
int 		*name;
char		*element_type;
int 		*material_type;
int		*cell_type;
int		*mid_edge_flags;
int		**node_list;

This function finds out all the information about a particular cell and
returns those values.

Inputs:		structure	- structure to find information
		cell		- cell to find information
Outputs:	name		- cell name
		element_type	- name of element type
		material_type	- user defined material type
		cell_type	- cell type (e.g. UCD_TRIANGLE)
		data		- data for cell-based datasets
		mid_edge_flags	- does the cell have mid edge nodes
		node_list	- array of node numbers
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDcell_get_information ();



/*----------------------------------------------------------------------------
int UCDcell_set_information (structure, cell, name, element_type, 
			     material_type, cell_type, 
 			     mid_edge_flags, node_list)
UCD_structure	*structure;
int		cell;
int 		name;
char		*element_type;
int 		material_type;
int		cell_type;
int		mid_edge_flags;
int		*node_list;

This function sets all the information about a particular cell.

Inputs:		structure	- structure to find information
		cell		- cell to find information
		name		- cell name
		element_type	- name of element type
		material_type	- user defined material type
		cell_type	- cell type (e.g. UCD_TRIANGLE)
		mid_edge_flags	- does the cell have mid edge nodes
		node_list	- array of node numbers
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDcell_set_information ();



/*----------------------------------------------------------------------------
int UCDnode_get_information (structure, node, name, ncells, cell_list)
UCD_structure	*structure;
int		node;
int 		*name;
int		*ncells;
int		**cell_list;

This function finds out all the information about a particular node and
returns those values.

Inputs:		structure	- structure to find information
		node		- node to find information
Outputs:	name		- node name
		ncells		- number of cells in cell_list
		cell_list	- array of cell numbers
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDnode_get_information ();


 
/*----------------------------------------------------------------------------
int UCDnode_set_information (structure, node, name, ncells, cell_list)
UCD_structure	*structure;
int		node;
int 		name;
int		ncells;
int		*cell_list;

This function sets all the information about a particular node.

Inputs:	        structure	- structure to find information
		node		- node to find information
		name		- node name
		ncells		- number of cells in cell_list
		cell_list	- array of cell numbers
Returns:			- 1 if successful, 0 if failure
-----------------------------------------------------------------------------*/
extern int UCDnode_set_information ();


/*  end ucd_defs.h  */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.