/*
 
uf_sf_enums.h
File Description :

Enumeration Definitions for the Open C API interface to Advanced Simulation

*****************************************************************************/

#ifndef  UF_SF_ENUMS__H_INCLUDED
#define  UF_SF_ENUMS__H_INCLUDED




enum UF_SFNAS_inter_output_types_e
{
       INTOUT_YES = 0,
       INTOUT_NO,
       INTOUT_ALL
};

typedef enum UF_SFNAS_inter_output_types_e UF_SFNAS_inter_output_types_t;
typedef enum UF_SFNAS_inter_output_types_e SFNAS_inter_output_types_t;

enum UF_SF_node_btype_e
{
   UF_SF_NODE_BODYINTERIOR, /* Node on the interior of a body. */
   UF_SF_NODE_EDGE,         /* Node on an edge. */
   UF_SF_NODE_FACEINTERIOR, /* Node on the interior of a face. */
   UF_SF_NODE_INTERIOR,     /* Interior node. */
   UF_SF_NODE_NO_GEOMETRY,  /* Node not on any geometry. */
   UF_SF_NODE_POINT         /* Node on point. The point could be on
                               Edge or Face, but the node on point
                               is not a part of mesh on edge/face.  */

};

typedef enum UF_SF_node_btype_e  UF_SF_node_btype_t,
                               *UF_SF_node_btype_p_t;


enum UF_SF_node_switch_e
{
   UF_SF_SWITCH_ON_BOUNDARY,  /* Switch to nodes only on the boundary. */
   UF_SF_SWITCH_IN_INTERIOR,  /* Switch to nodes only in the interior. */
   UF_SF_SWITCH_ALL           /* Switch to all nodes, independent of the
                                 location. */

};
typedef enum UF_SF_node_switch_e  UF_SF_node_switch_t,
                                *UF_SF_node_switch_p_t;

enum UF_SF_mid_node_type_e
{
   UF_SF_NODE_CORNER,    /* Node on the corner. */
   UF_SF_NODE_DISABLED,  /* Node disabled. */
   UF_SF_NODE_MID,       /* Node on the middle. */
   UF_SF_NODE_ORIENTATION /* Node with an orientation. */
};
typedef enum UF_SF_mid_node_type_e  UF_SF_mid_node_type_t,
                                  *UF_SF_mid_node_type_p_t;


/* meshdir codes associated with mesh geometry in a mesh recipe */
enum UF_SF_mesh_geom_meshdir_e
{
   UF_SF_MG_MESHDIR_UNINITIALIZED = 0, /* Uninitialized mesh direction.   */
   UF_SF_MG_MESHDIR_UNDEFINED,         /* Undefined mesh direction. */
   UF_SF_MG_MESHDIR_FROM_START,        /* Mesh direction from line start */
   UF_SF_MG_MESHDIR_FROM_END,          /* Mesh direction from line end   */
   UF_SF_MG_MESHDIR_REVERSE,           /* Reverse the mesh direction */
   UF_SF_MG_MESHDIR_DONT_REVERSE       /* Do not reverse the mesh direction. */
};
typedef enum UF_SF_mesh_geom_meshdir_e  UF_SF_mesh_geom_meshdir_t,
                                      *UF_SF_mesh_geom_meshdir_p_t;

enum UF_SF_mesh_recipe_adaptivity_e
{
   UF_SF_MESH_RECIPE_ADAPT_HELMS, /* Adaptivity of elements is H-type. */
   UF_SF_MESH_RECIPE_ADAPT_PELMS /* Adaptivity of elements is P-type. */
};
typedef enum UF_SF_mesh_recipe_adaptivity_e  UF_SF_mesh_recipe_adaptivity_t,
                                           *UF_SF_mesh_recipe_adaptivity_p_t;

enum UF_SF_elm_adaptivity_type_e
{
   UF_SF_ELEMENT_ADAPT_HELMS = (int)UF_SF_MESH_RECIPE_ADAPT_HELMS,
                               /* Adaptivity of elements is H-type. */
   UF_SF_ELEMENT_ADAPT_PELMS = (int)UF_SF_MESH_RECIPE_ADAPT_PELMS
                               /* Adaptivity of elements is P-type. */
};
typedef enum UF_SF_elm_adaptivity_type_e  UF_SF_elm_adaptivity_type_t,
                                        *UF_SF_elm_adaptivity_type_p_t;


enum UF_SF_element_type_e
{
    UF_SF_UNDEFINED = 0,/* Generic undefined type. */
    UF_SF_CMASS = 1,    /* Concentrated mass element. */
    UF_SF_BAR = 2,      /* Bar element. */
    UF_SF_BEAM = 3,     /* Beam element. */
    UF_SF_ROD = 4,      /* Rod element. */
    UF_SF_RBE2 = 5,     /* Rigid link element. */
    UF_SF_SPRING = 6,   /* Spring element. */
    UF_SF_MASS = 7,     /* Distributed mass element. */
    UF_SF_HBDY = 8,     /* Heat body element. */
    UF_SF_QUAD4 = 9,    /* Quadrilateral element with 4 nodes. */
    UF_SF_TRIA3 = 10,   /* Triangular element with 3 nodes. */
    UF_SF_QUAD8 = 11,   /* Quadrilateral element with 8 nodes. */
    UF_SF_TRIA6 = 12,   /* Triangular element with 6 nodes. */
    UF_SF_TET4 = 13,    /* Tetrahedral element with 4 nodes. */
    UF_SF_TET10 = 14,    /* Tetrahedral element with 10 nodes. */
    UF_SF_1D_CONTACT=15, /* 1D contact elements between 2 bodies. */
    UF_SF_HEX8 = 16,     /* Hexahedral element with 8 nodes. */
    UF_SF_HEX20 = 17,    /* Hexahedral element with 20 nodes. */
    UF_SF_WDG6  = 18,    /* Wedge element with 6 nodes. */
    UF_SF_WDG15 = 19,    /* Wedge element with 15 nodes. */
    UF_SF_2D_CONTACT = 20, /* 2D Contact elements between 2 faces */
    UF_SF_WELD = 21,        /* weld elements */
    UF_SF_EF_CONN = 22,  /* Edge-Face connection element */
    UF_SF_MM_FREE = 23,  /* Not an element type but useful as connection. */
    UF_SF_MM_GLUE = 24,  /* Not an element type but useful as connection. */
    UF_SF_RBE3 = 25,     /* rbe3 element with 1 core node (first node) and multiple leg nodes. */
    UF_SF_PYR5 = 26,     /* Pyramid element with 5 nodes. */
    UF_SF_PYR9 = 27,     /* Pyramid element with 9 nodes. */
    UF_SF_PYR13 = 28,    /* Pyramid element with 13 nodes. */
    UF_SF_1D_NG = 29,    /* 1D Node to Ground elements with 1 node. */
    UF_SF_1D_PLOTEL = 30,/* 1D plotel element with 2 nodes. */
    UF_SF_1D_MASS = 31,  /* 1D mass element with 2 nodes. */
    UF_SF_PYR_MIXED_ORDER = 32, /* Pyramid element mixed order. */
    UF_SF_TET_MIXED_ORDER = 33, /* Tetrahedral element mixed order. */
    UF_SF_1D_BEARING = 34,
    UF_SF_HEXCOHES8 = 35,     /* cohesive element with 8 nodes. */
    UF_SF_HEXCOHES20 = 36,    /* cohesive element with 20 nodes. */
    UF_SF_WDGCOHES6 = 37,     /* cohesive element with 6 nodes. */
    UF_SF_WDGCOHES15 = 38,    /* cohesive element with 15 nodes. */

/*  
*/


    UF_SF_TOTAL_COUNT = 39 /* This last member represents the total
                              number of members in this enum */

};
typedef enum UF_SF_element_type_e  UF_SF_element_type_t,
                                 *UF_SF_element_type_p_t;

enum UF_SF_mesh_dimension_e
{
 UF_SF_DIMENSION_0D,    /* Element dimension is 0 - CMASS or MASS */
 UF_SF_DIMENSION_1D,    /* Element dimension is 1 - Bar, beam, rods, rigid
                           links, springs and contact elements. */

 UF_SF_DIMENSION_2D,    /* Element dimension is 2 - quad4, quad8, tri3, tri6 */
 UF_SF_DIMENSION_3D,    /* Element dimension is 3 - tet4, tet10. */
 UF_SF_DIMENSION_ANY    /* Element of any dimension. */
};
typedef enum UF_SF_mesh_dimension_e  UF_SF_mesh_dimension_t,
                                   *UF_SF_mesh_dimension_p_t;


enum UF_SF_elm_dimension_type_e
{
   UF_SF_ELEMENT_POINT = (int)UF_SF_DIMENSION_0D, /* Element type is point - CMASS
                                                     or MASS. */

   UF_SF_ELEMENT_BEAM  = (int)UF_SF_DIMENSION_1D, /* Element type is beam - Bar,
                                                     beam, rods, rigid links,
                                                     springs and contact elements.*/

   UF_SF_ELEMENT_SHELL = (int)UF_SF_DIMENSION_2D, /* Element type is shell - quad4,
                                                     quad8, tri3, tri6. */

   UF_SF_ELEMENT_SOLID = (int)UF_SF_DIMENSION_3D, /* Element type is solid - tet4,
                                                     tet10. */

   UF_SF_ELEMENT_ALL                         /* Element of any of the 4 above
                                                types. */

};
typedef enum UF_SF_elm_dimension_type_e  UF_SF_elm_dimension_type_t,
                                       *UF_SF_elm_dimension_type_p_t;


enum UF_SF_section_type_e
{
 UF_SF_SECTION_TWREC = 0,    /* Thin wall, rectangle                 */
 UF_SF_SECTION_TWCYL,        /* Thin wall, cylinder                  */
 UF_SF_SECTION_TWCHA,        /* Thin wall, channel                   */
 UF_SF_SECTION_TWHAT,        /* Thin wall, hat                       */
 UF_SF_SECTION_TWIBE,        /* Thin wall, I beam                    */
 UF_SF_SECTION_SOCYL,        /* Solid, cylinder                      */
 UF_SF_SECTION_SOREC,        /* Solid, rectangle                     */
 UF_SF_SECTION_KEYIN,        /* User defined.                        */
 UF_SF_SECTION_USER_TW,      /* User Defined TW                      */
 UF_SF_SECTION_USER_SOLID,   /* User Defined Solid                   */
 UF_SF_SECTION_NUM_TYPES
};
typedef enum UF_SF_section_type_e  UF_SF_section_type_t,
                                 *UF_SF_section_type_p_t;

/*  */
enum UF_SF_neutral_material_types_e
{
   UF_SF_MATERIAL_ISOTROPIC = 0,           /* Material is isotropic.               */
   UF_SF_MATERIAL_ORTHOTROPIC = 1,         /* Material is orthotropic.             */
   UF_SF_MATERIAL_ANISOTROPIC = 2,         /* Material is anisotropic.             */
   UF_SF_MATERIAL_FORMABILITY = 3,         /* Formability properties.              */
   UF_SF_MATERIAL_FLUID = 4,               /* Fluid material.                      */
   UF_SF_MATERIAL_HYPERELASTIC = 5,        /* General Hyperelastic Material        */
   UF_SF_MATERIAL_MOONEYRIVLIN=6,          /* Mooney Rivlin                        */
   UF_SF_MATERIAL_MOONEYRIVLINTESTDATA=7,  /* Mooney Rivlin - test data option     */
   UF_SF_MATERIAL_POLYNOMIAL=8,            /* Polynomial                           */
   UF_SF_MATERIAL_REDUCEDPOLYNOMIAL=9,     /* Reduced Polynomial                   */
   UF_SF_MATERIAL_OGDEN=10,                /* Ogden                                */
   UF_SF_MATERIAL_OGDENTESTDATA=11,        /* Ogden - test data option             */
   UF_SF_MATERIAL_FOAM=12,                 /* Foam                                 */
   UF_SF_MATERIAL_FOAMTESTDATA=13,         /* Foam - test data option              */
   UF_SF_MATERIAL_BLATZ=14,                /* Blatz-Ko                             */
   UF_SF_MATERIAL_ARRUDABOYCE=15,          /* Arruda-Boyce                         */
   UF_SF_MATERIAL_ARRUDABOYCETESTDATA=16,  /* Arruda-Boyce - test data option      */
   UF_SF_MATERIAL_NEOHOOKE=17,             /* Neo Hooke                            */
   UF_SF_MATERIAL_NEOHOOKETESTDATA=18,     /* Neo Hooke - test data option         */
   UF_SF_MATERIAL_MARLOW=19,               /* Marlow                               */
   UF_SF_MATERIAL_VANDERWAALS=20,          /* Van Der Waals                        */
   UF_SF_MATERIAL_YEOH=21,                 /* Yeoh                                 */
   UF_SF_MATERIAL_YEOHTESTDATA=22,         /* Yeoh - test data option              */
   UF_SF_MATERIAL_GENT=23,                 /* Gent                                 */
   UF_SF_MATERIAL_GASKET=24,               /* Gasket                               */
   UF_SF_MATERIAL_GASKETBEHAVIOR=25,       /* Gasket Behavior                      */
   UF_SF_MATERIAL_SHAPEMEMORYALLOY=26,     /* Shape Memory Alloy                   */
   UF_SF_MATERIAL_SUSSMANBATHE=27,         /* Sussman-Bathe hyperelastic material  */
   UF_SF_MATERIAL_GASKETDISPLACEMENT=28,   /* Gasket with length-based loading     */
   UF_SF_MATERIAL_DAMAGEINTERFACE=29,      /* Damage interface material            */
   UF_SF_MATERIAL_MULTIPLEFLUID=30         /* Multiple fluid material              */
};
typedef enum UF_SF_neutral_material_types_e  UF_SF_neutral_material_types_t,
                                           *UF_SF_neutral_material_types_p_t;

/* Extended material types.                                            */
enum UF_SF_matl_orient_option_e
{
   UF_SF_MATL_ORIENT_FIXED,        /* Origin/vectors option           */
   UF_SF_MATL_ORIENT_WCS           /* Create an orientation based
                                      upon the current WCS.           */

};
typedef enum UF_SF_matl_orient_option_e  UF_SF_matl_orient_option_t,
                                       *UF_SF_matl_orient_option_p_t;

/* Coordinate system type.                                              */
enum UF_SF_fem_coord_type_e
{
   UF_SF_RECT_COORD
};
typedef enum UF_SF_fem_coord_type_e  UF_SF_fem_coord_type_t,
                                   *UF_SF_fem_coord_type_p_t;


enum UF_SF_multi_prop_type_e
{
   UF_SF_MULTI_PROP_TABLE,   /* Tabular form of variable material properties.*/
   UF_SF_MULTI_PROP_EXPRESSION /* Variation of material properties is through
                                  an expression. */

};
typedef enum UF_SF_multi_prop_type_e  UF_SF_multi_prop_type_t,
                                    *UF_SF_multi_prop_type_p_t;


enum UF_SF_library_material_e
{
   UF_SF_MATL_IS_READ_ONLY,        /* User not allowed to edit in NX. */
   UF_SF_MATL_IS_EDITABLE          /* User allowed to edit within NX. */
};
typedef enum UF_SF_library_material_e  UF_SF_library_material_t,
                                     *UF_SF_library_material_p_t;

enum UF_SF_mesh_geom_usage_e
{
   UF_SF_GEOM_ANY,           /* all geometry                          */
   UF_SF_GEOM_HARD,          /* hard geometry                         */
   UF_SF_GEOM_CONNECT_A,     /* group1 geometry                       */
   UF_SF_GEOM_CONNECT_B      /* group2 geometry                       */
};
typedef enum UF_SF_mesh_geom_usage_e  UF_SF_mesh_geom_usage_t,
                                     *UF_SF_mesh_geom_usage_p_t;

enum UF_SF_edge_density_type_e
{
 UF_SF_EDGE_DENSITY_SIZE,    /* Edge density defined by elm size      */
 UF_SF_EDGE_DENSITY_NUMBER,  /* Edge density defined by number of elms. */
 UF_SF_EDGE_DENSITY_SMART = 4,  /* Edge density defined by smart option. */
 UF_SF_NOT_EDGE_DENSITY_DEFINED /* Edge density not defined. */
};
typedef enum UF_SF_edge_density_type_e  UF_SF_edge_density_type_t,
                                      *UF_SF_edge_density_type_p_t;


/* The definition method for numeric values.                            */
enum UF_SF_numeric_method_e
{
 UF_SF_NUMERIC,              /* Numeric value                        */
 UF_SF_EXPRESSION            /* Expression string used.              */
};
typedef enum UF_SF_numeric_method_e  UF_SF_numeric_method_t,
                                   *UF_SF_numeric_method_p_t;


/* The smart point definition method.                                   */
enum UF_SF_HPT_method_e
{
   UF_SF_HPT_NO_METHOD,          /* Smart point created with no method. */
   UF_SF_HPT_ON_CURVE,           /* Smart point created on curve. */
   UF_SF_HPT_BASEPT_AND_OFFSET,  /* Smart point created as offset to some base
                                    point. */

   UF_SF_HPT_CENTER_OF_CONIC,    /* Smart point created at the center of a
                                    conic. */

   UF_SF_HPT_CURVE_INTERSECTION, /* Smart point created at the intersection of
                                    two curves. */

   UF_SF_HPT_ON_SURFACE          /* Smart point created on a surface. */
};
typedef enum UF_SF_HPT_method_e  UF_SF_HPT_method_t,
                               *UF_SF_HPT_method_p_t;

/* The 0d mesher element types.                                         */
enum UF_SF_0D_element_type_e
{
   UF_SF_0D_CONMASS = (int)UF_SF_CMASS /* 0D element type - concentrated mass. */
};
typedef enum UF_SF_0D_element_type_e  UF_SF_0D_element_type_t,
                                    *UF_SF_0D_element_type_p_t;


/* The 0d mesher element density.                                       */
enum UF_SF_0D_density_type_e
{
   UF_SF_0D_EDGE_DENSITY_SIZE,     /* Edge density given as size of the
                                      elements. */

   UF_SF_0D_EDGE_DENSITY_NUMBER,   /* Edge density given as number of the
                                      elements. */

   UF_SF_0D_EDGE_DENSITY_SMART = 4
};
typedef enum UF_SF_0D_density_type_e  UF_SF_0D_density_type_t,
                                    *UF_SF_0D_density_type_p_t;

/* The 1d mesher element types.                                         */
enum UF_SF_1D_element_type_e
{
   UF_SF_1D_SPRING_TYPE = (int)UF_SF_SPRING,   /* Spring elements. */
   UF_SF_1D_BAR_TYPE = (int)UF_SF_BAR,         /* Bar elements. */
   UF_SF_1D_BEAM_TYPE = (int)UF_SF_BEAM,       /* Beam elements. */
   UF_SF_1D_ROD_TYPE = (int)UF_SF_ROD,         /* Rod elements. */
   UF_SF_1D_RIGID_TYPE = (int)UF_SF_RBE2       /* Rigid link elements. */
};
typedef enum UF_SF_1D_element_type_e  UF_SF_1D_element_type_t,
                                    *UF_SF_1D_element_type_p_t;


/* The 1d mesher element density.                                       */
enum UF_SF_1D_density_type_e
{
   UF_SF_1D_EDGE_DENSITY_SIZE,      /* Edge density given as a size of the
                                       elements. */

   UF_SF_1D_EDGE_DENSITY_NUMBER,    /* Edge density given as number of the
                                       elements. */

   UF_SF_1D_EDGE_DENSITY_SMART = 4

};
typedef enum UF_SF_1D_density_type_e  UF_SF_1D_density_type_t,
                                    *UF_SF_1D_density_type_p_t;


/* The Load functions mode_type parameter.                              */
enum UF_SF_load_mode_e
{
   UF_SF_LOAD_FORCE =  1,         /* Force. */
   UF_SF_LOAD_DISTRIBUTED =  2,   /* Uniform pressure, applicable only normal
                                     to the face. */

   UF_SF_LOAD_SPACIAL =  3,
   UF_SF_LOAD_GRAVITY =  4,       /* Gravity load. */
   UF_SF_LOAD_PRESSURE =  5,      /* Pressure load, can be appied in any
                                     direction. */

   UF_SF_LOAD_MOMENT =  6,        /* Moment. */
   UF_SF_LOAD_SHEAR =  7,         /* Edge shear. */
   UF_SF_LOAD_FLUX =  8,          /* Heat flux. */
   UF_SF_LOAD_TEMPERATURE =  9,  /* Temperature load. */
   UF_SF_LOAD_CENTRIFUGAL = 10,    /* Centrifugal load. */
   UF_SF_LOAD_TORQUE = 11,         /* Torque */
   UF_SF_LOAD_BEARING = 12,         /* Bearing */

   UF_SF_LOAD_UNKNOWN_MODE = -99999   /* Unknown load mode type */
};
typedef enum UF_SF_load_mode_e  UF_SF_load_mode_t,
                              *UF_SF_load_mode_p_t;


/* The Load functions load_class parameter.                             */
enum UF_SF_load_class_e
{
   UF_SF_LOAD_NODE_ELEMENT_CLASS = 1,  /* Load applied on a node. */
   UF_SF_LOAD_EDGE_ELEMENT_CLASS = 2,  /* Load applied on an edge. */
   UF_SF_LOAD_FACE_CLASS = 3,          /* Load applied on a face. */
   UF_SF_LOAD_PART_CLASS = 4,          /* Load applied to the whole part. */
   UF_SF_LOAD_BODY_CLASS = 5,          /* Load applied on a body. */
   UF_SF_LOAD_CURVE_CLASS = 6          /* Load applied on a curve. */
};
typedef enum UF_SF_load_class_e  UF_SF_load_class_t,
                               *UF_SF_load_class_p_t;

/* The BC functions class parameter.                                    */
enum UF_SF_bc_class_e
{
   UF_SF_BC_ERROR_CLASS = -1, /* To indicate error */
   UF_SF_BC_NODE_ELEMENT_CLASS = 1, /* BC applied on a node. */
   UF_SF_BC_EDGE_ELEMENT_CLASS = 2, /* BC applied on an edge. */
   UF_SF_BC_FACE_CLASS = 3,         /* BC applied on a face. */
   UF_SF_BC_CURVE_CLASS = 4         /* BC applied on a curve. */
};
typedef enum UF_SF_bc_class_e  UF_SF_bc_class_t,
                             *UF_SF_bc_class_p_t;


/* The Load functions load_disp_symbol parameter.                       */
enum UF_SF_load_disp_symbol_e
{
   UF_SF_LOAD_SINGLE_HEADED_ARROW = 1,
   UF_SF_LOAD_DOUBLE_HEADED_ARROW = 2,
   UF_SF_LOAD_HALF_ARROW = 3,
   UF_SF_LOAD_Q_ARROW = 4,
   UF_SF_BC_PYRAMID = 101,
   UF_SF_BC_ARROW = 102,
   UF_SF_BC_DOUBLE_HEADED_ARROW = 103,
   UF_SF_BC_SMALL_CIRCLE = 104,
   UF_SF_BC_SMALL_ARROW = 105,
   UF_SF_BC_S_ON_ENTITY = 106,
   UF_SF_BC_M_ON_ENTITY = 107
};
typedef enum UF_SF_load_disp_symbol_e  UF_SF_load_disp_symbol_t,
                                     *UF_SF_load_disp_symbol_p_t;



/* The Load functions component_type parameter.                         */
enum UF_SF_LBC_component_type_e
{
   UF_SF_NULL_COMP = -1,
   UF_SF_LBC_XYZ = 0,   /* Having XYZ components - rectangular coordinates. */
   UF_SF_LBC_RTZ,       /* Having RTZ components - Cylindrical coordinates. */
   UF_SF_LBC_RTP,       /* Having RTP components - Spherical coordinates. */
   UF_SF_LBC_NORMAL_TO, /* Applicable normal to a face only. */
   UF_SF_LBC_EDGE_CSYS  /* Applicable along an edge only. */
};
typedef enum UF_SF_LBC_component_type_e  UF_SF_LBC_component_type_t,
                                       *UF_SF_LBC_component_type_p_t;

enum UF_SF_load_dimension_e
{
   UF_SF_NULL_LOAD = 0,    /* Load value is 0. */
   UF_SF_SCALAR_LOAD,      /* Load is a scalar - temperature. */
   UF_SF_VECTOR_LOAD,      /* Having RTP components - Spherical coordinates. */
   UF_SF_AXIS_LOAD         /* Applicable normal to a face only. */
};
typedef enum UF_SF_load_dimension_e  UF_SF_load_dimension_t,
                                   *UF_SF_load_dimention_p_t;


/* The BC functions mode parameter.                                     */
enum UF_SF_bc_mode_e
{
   UF_SF_BC_CONSTRAINT = 1,            /* Both linear displacement and rotation
                                          are available. */

   UF_SF_BC_DISPLACEMENT = 2,          /* Only displacement is available,
                                          rotation is free. */

   UF_SF_BC_ROTATION = 3,              /* Only rotation is available,
                                          displacement is free. */

   UF_SF_BC_TEMPERATURE = 4,           /* Temperature BC is available. */
   UF_SF_BC_CONVECTION_COEFFICIENT = 5,/* Convection coefficient BC is
                                          available. */


   UF_SF_BC_UNKNOWN_MODE = -99999      /* Unknown BC mode type */
};
typedef enum UF_SF_bc_mode_e  UF_SF_bc_mode_t,
                            *UF_SF_bc_mode_p_t;


/* The Durability Event mode parameter.                                     */
enum UF_SF_dur_event_mode_e
{
   UF_SF_DUR_EVENT_STATIC = 1    /* Currently we only have Static Durability Events */
};
typedef enum UF_SF_dur_event_mode_e  UF_SF_dur_event_mode_t,
                            *UF_SF_dur_event_mode_p_t;

/* geometry types */
enum UF_SF_mesh_geometry_types_e
{
   UF_SF_GEOM_OTHER,  /* Geometry does not fall into any of the categories
                         listed below. */

   UF_SF_GEOM_ASSEM,  /* Geometry is an assembly. */
   UF_SF_GEOM_COMPON, /* Geometry is a component. */
   UF_SF_GEOM_OCC,    /* Geometry is an occurrence. */
   UF_SF_GEOM_BODY,   /* Geometry is a body. */
   UF_SF_GEOM_FACE,   /* Geometry is a face. */
   UF_SF_GEOM_EDGE,   /* Geometry is an edge. */
   UF_SF_GEOM_SURF ,   /* Geometry is a surface. */
   UF_SF_GEOM_CURVE,   /* Geometry is a curve. */
   UF_SF_GEOM_POINT,  /* Geometry is a point. */
   UF_SF_GEOM_VERTEX,  /* Geometry is a vertex. */
   UF_SF_GEOM_COMPOSITE_BODY, /* Geometry is a composite body */
   UF_SF_GEOM_COMPOSITE_FACE, /* Geometry is a composite face */
   UF_SF_GEOM_COMPOSITE_EDGE  /* Geometry is a composite edge */
};
typedef enum UF_SF_mesh_geometry_types_e  UF_SF_mesh_geometry_types_t,
                                        *UF_SF_mesh_geometry_types_p_t;

enum UF_SF_LANG_analysis_type_e
{
   UF_SF_LANG_ANALYSIS_UNKNOWN    = 0,     /* unknown language type */
   UF_SF_LANG_ANALYSIS_STRUCTURAL = 1,     /* Structural analysis */
   UF_SF_LANG_ANALYSIS_THERMAL = 2,        /* Thermal analysis */
   UF_SF_LANG_ANALYSIS_FLOW = 3,           /* CFD analysis */
   UF_SF_LANG_ANALYSIS_COUPLED = 4,        /* Flow-Thermal analysis */
   UF_SF_LANG_ANALYSIS_MAPPING = 5         /* Mapping analysis */
};
typedef enum UF_SF_LANG_analysis_type_e  UF_SF_LANG_analysis_type_t,
                                       *UF_SF_LANG_analysis_type_p_t;


enum UF_SF_LANG_problem_abstract_e
{
   UF_SF_LANG_SIMPLE_PROB_ABSTRACT = 1,
   UF_SF_LANG_AXISYM_PROB_ABSTRACT = 2,
   UF_SF_LANG_MIXED_PROB_ABSTRACT  = 3
};
typedef enum UF_SF_LANG_problem_abstract_e  UF_SF_LANG_problem_abstract_t,
                                          *UF_SF_LANG_problem_abstract_p_t;

enum UF_SF_LANG_linearity_e
{
   UF_SF_LANG_LINEAR_LINEARITY = 1,
   UF_SF_LANG_NONLINEAR_LINEARITY = 2
};
typedef enum UF_SF_LANG_linearity_e  UF_SF_LANG_linearity_t,
                                   *UF_SF_LANG_linearity_p_t;


enum UF_SF_LANG_time_depend_e
{
   UF_SF_LANG_STEADY_TIME_DEPEND = 1  /* Analysis will be steady-state. */
};
typedef enum UF_SF_LANG_time_depend_e  UF_SF_LANG_time_depend_t,
                                     *UF_SF_LANG_time_depend_p_t;


/*  Element types supported by Aries Tet Mesher  */
enum UF_SF_atm_element_types_e
{
   UF_SF_ATM_SYSTEM_DEFAULT_TYPE = 0, /* Element will be system default,
                                         either tet4 or tet10, depending on the
                                         enviroment. */

   UF_SF_ATM_TETRA,                   /* Element will be tetrahedral, with 4
                                         nodes. */

   UF_SF_ATM_TETRA_10                 /* Element will be tetrahedral, with 10
                                         nodes. */

};
typedef enum UF_SF_atm_element_types_e UF_SF_atm_element_types_t;

/*  Aries Tet Mesher edge shapes  */
enum UF_SF_atm_edge_shape_types_e
{
   UF_SF_ATM_LINEAR = 0, /* Type of element is linear. */
   UF_SF_ATM_CURVED,     /* Type of element is curved. */
   UF_SF_ATM_MIXED       /* Both curved and linear elements can form. */
};
typedef enum UF_SF_atm_edge_shape_types_e UF_SF_atm_edge_shape_types_t;



/********************************* ATM parameters *****************************/

enum UF_SF_sfqm_elem_type_e
{
 UF_SF_SFQM_QUAD4,
 UF_SF_SFQM_TRIA3,
 UF_SF_SFQM_QUAD8,
 UF_SF_SFQM_TRIA6
};
typedef enum UF_SF_sfqm_elem_type_e  UF_SF_sfqm_elem_type_t,
                                   *UF_SF_sfqm_elem_type_p_t;


/* Distribution type */

enum UF_SF_dist_type_t
{
  UF_SF_SINUSOIDAL = 0,
  UF_SF_PARABOLIC
};


/* Mating Type */
enum UF_SF_mate_type_e
{
   UF_SF_NOT_SUPPORT_MATE_TYPE = 0,
   UF_SF_ASSEMBLY_MESH
};
typedef enum UF_SF_mate_type_e  UF_SF_mate_type_t,
                              *UF_SF_mate_type_p_t;

/* Assembly Mesh Type */
enum UF_SF_assembly_type_e
{
   UF_SF_NOT_SUPPORT_ASSEM_TYPE = 0,
   UF_SF_ASSEM_BY_GLUE,
   UF_SF_ASSEM_BY_SLIDE_CONTACT,
   UF_SF_ASSEM_BY_GAP_CONTACT,
   UF_SF_ASSEM_FREE
};
typedef enum UF_SF_assembly_type_e  UF_SF_assembly_type_t,
                                  *UF_SF_assembly_type_p_t;

enum UF_SF_edge_matching_type_e
{
   UF_SF_EDGE_MATCHING_TYPE_ND,
   UF_SF_EDGE_MATCHING_BY_LOCATION,
   UF_SF_EDGE_MATCHING_BY_ESIZE,
   UF_SF_EDGE_MATCHING_BY_COLLAPSE,
   UF_SF_EDGE_MATCHING_MM_GLUE,
   UF_SF_EDGE_MATCHING_MM_FREE,
   UF_SF_EDGE_MATCHING_ANY
};

typedef enum UF_SF_edge_matching_type_e  UF_SF_edge_matching_type_t,
                                       *UF_SF_edge_matching_type_p_t;



enum UF_SF_idealize_parm_exp_t
{
    UF_SF_IDEALIZE_HOLE_DIAMETER,
    UF_SF_IDEALIZE_BLEND_RADIUS,
    UF_SF_IDEALIZE_TINY_FACE_AREA,
    UF_SF_IDEALIZE_THIN_FACE_WIDTH,
    UF_SF_IDEALIZE_FACE_COLLECTOR,
    UF_SF_IDEALIZE_SCREEN_SELECTED_FACE
};


enum UF_SF_idealize_parm_face_t
{
    UF_SF_IDEALIZE_RETAINED_FACES,
    UF_SF_IDEALIZE_REMOVED_FACES
};

enum UF_SF_face_subdiv_status_e
{
  UF_SF_IDENTICAL_FACES_EQ_EDGES,  /* Both faces identical with eq. num of edges   */
  UF_SF_IDENTICAL_FACES_UNEQ_EDGES,/* Both faces identical with uneq. num of edges */
  UF_SF_NOT_IDENTICAL,             /* Both faces are not identical                 */
  UF_SF_OVERLAPPING_FACES,         /* Both faces overlapping                       */
  UF_SF_SEPERATE_FACES             /* Both faces are seperate                      */
};

typedef enum UF_SF_face_subdiv_status_e UF_SF_face_subdiv_status_t,
                                       *UF_SF_face_subdiv_status_p_t;



enum UF_SFANS_algorithm_t
{
   UF_SFANS_NULL_SOLVER = -1,
   UF_SFANS_FRONTAL_SOLVER = 0,
   UF_SFANS_PCG_SOLVER,
   UF_SFANS_JCG_SOLVER,
   UF_SFANS_SPARSE_SOLVER,
   UF_SFANS_JCG_PCG_SOLVER,
   UF_SFANS_JCG_FRONTAL_SOLVER,
   UF_SFANS_SUBSPACE_MODOPT_SOLVER,
   UF_SFANS_LANCZOS_MODOPT_SOLVER,
   UF_SFANS_POWERDYN_MODOPT_SOLVER,
   UF_SFANS_NUM_ALGORITHM_TYPES
};
typedef enum UF_SFANS_algorithm_t, *UF_SFANS_algorithm_p_t;


enum UF_SFFEA_algorithm_t
{
   UF_SFFEA_AUTOMATIC                               = -1,
   UF_SFFEA_DIRECT_IN_CORE                          = 0,
   UF_SFFEA_DIRECT_OUT_OF_CORE                      = 2,
   UF_SFFEA_ITERATIVE_IN_CORE                       = 6,
   UF_SFFEA_ITERATIVE_OUT_OF_CORE                   = 8,
   UF_SFFEA_SPARSE                                  = 10,
   UF_SFFEA_ITERATIVE                               = 11
};
typedef enum UF_SFFEA_algorithm_t, *UF_SFFEA_algorithm_p_t;


enum UF_SFOPT_solver_type_t
{
   UF_SFOPT_NULL_SOLVER_TYPE = -1,
   UF_SFOPT_GENERIC_SOLVER_TYPE = 0,
   UF_SFOPT_SENSITIVITY_SOLVER_TYPE = 1,
   UF_SFOPT_HYPEROPT_SOLVER_TYPE = 2,
   UF_MAX_NUM_SOLVER_TYPES = 3
};
typedef enum UF_SFOPT_solver_type_t, *UF_SFOPT_solver_type_p_t;



/* The Load functions mode_type parameter.                              */
enum UF_SF_lv_function_mode_e
{
   UF_SF_HALF_UNIT_CYCLE =  0,   /* Half Unit Cycle */
   UF_SF_FULL_UNIT_CYCLE =  1    /* Full Unit Cycle */
};
typedef enum UF_SF_lv_function_mode_e  UF_SF_lv_function_mode_t,
                                     *UF_SF_lv_function_mode_p_t;





enum UF_SFAS_mode_type_t
{
   UF_MODE_TYPE = 0,
   UF_MODE_AND_FREQUENCY_RANGE_TYPE,
   UF_FREQUENCY_RANGE_TYPE,
   UF_SFAS_MAX_MODE_CHOICES
};
typedef enum UF_SFAS_mode_type_t, *UF_SFAS_mode_type_p_t;


enum UF_SF_scenario_info_t
{
   UF_SF_mesh_info = 0,                  /* export info about meshes */
   UF_SF_load_info = 1,                  /* export info about loads */
   UF_SF_solution_info = 2,              /* export info about solutions */
   UF_SF_step_info = 3,                  /* export info about steps */
   UF_SF_boundary_condition_info = 4,    /* export info about boundary
                                            conditions. */

   UF_SF_material_info = 5,              /* export info about materials
                                            Assigned to a specified entity. */

   UF_SF_section_info = 6,               /* export info about sections */
   UF_SF_mesh_mating_condition_info = 7, /* export info about a mesh mating
                                            condition. */

   UF_SF_fea_summary_info = 8,           /* export a summary including all
                                            fea entities. */

   UF_SF_dur_event_info = 9,             /* export a summary including all
                                            load variations for the event. */

   UF_SF_load_case_info = 10,            /* export info about load cases */
   UF_SF_sim_summary_info = 11           /* export a summary of simulation
                                            entities. */

};


/* FEM Property types. */

#define UF_SF_LANG_NIL_VAL_TYPE                   0
#define UF_SF_LANG_INT_VAL_TYPE                   1
#define UF_SF_LANG_SCALAR_VAL_TYPE                2
#define UF_SF_LANG_TEXT_VAL_TYPE                  3
#define UF_SF_LANG_ENUM_VAL_TYPE                  4
#define UF_SF_LANG_COORD_VAL_TYPE                 5
#define UF_SF_LANG_MATERIAL_VAL_TYPE              6
#define UF_SF_LANG_SECTION_VAL_TYPE               7
#define UF_SF_LANG_VECTOR_VAL_TYPE                8
#define UF_SF_LANG_TABLE_VAL_TYPE                 9
#define UF_SF_LANG_LOAD_VAL_TYPE                 10
#define UF_SF_LANG_BNDCOND_VAL_TYPE              11
#define UF_SF_LANG_BOOL_VAL_TYPE                 12
#define UF_SF_LANG_MULTI_STRING_VAL_TYPE         13
#define UF_SF_LANG_FILENAME_VAL_TYPE             14
#define UF_SF_LANG_DIRPATH_VAL_TYPE              15
#define UF_SF_LANG_SSMO_VAL_TYPE                 16
#define UF_SF_LANG_FIELD_VAL_TYPE                17
#define UF_SF_LANG_AXIS_VAL_TYPE                 18
#define UF_SF_LANG_DOF_VAL_TYPE                  19
#define UF_SF_LANG_POINT_VAL_TYPE                20
/******************************************************************

================================================================= */

#define UF_SF_LANG_MULTI_STRING_ITI_VAL_TYPE     23
#define UF_SF_LANG_CAE_SECTION_VAL_TYPE          24
#define UF_SF_LANG_EDGES_ON_FACE_VAL_TYPE        25
#define UF_SF_LANG_SFEM_VECTOR_VAL_TYPE          26
#define UF_SF_LANG_SCALAR_ARRAY_VAL_TYPE         27
#define UF_SF_LANG_ACTION_VAL_TYPE               28
#define UF_SF_LANG_PPT_VAL_TYPE                  29
#define UF_SF_LANG_SSMO_ARRAY_VAL_TYPE           30
#define UF_SF_LANG_TIME_VAL_TYPE                 31
#define UF_SF_LANG_PLYMAT_VAL_TYPE               32
#define UF_SF_LANG_INT_ARRAY_VAL_TYPE            33
#define UF_SF_LANG_EXT_MENU_VAL_TYPE             34
#define UF_SF_LANG_CATALOG_VAL_TYPE              35
#define UF_SF_LANG_GENERAL_FIELD_VAL_TYPE        36
#define UF_SF_LANG_SCALAR_FIELD_VAL_TYPE         37
#define UF_SF_LANG_VECTOR_FIELD_VAL_TYPE         38
#define UF_SF_LANG_MATRIX_VAL_TYPE               39
#define UF_SF_LANG_REGION_VAL_TYPE               40
#define UF_SF_LANG_GROUPREF_VAL_TYPE             41
#define UF_SF_LANG_SELECTREF_VAL_TYPE            42
#define UF_SF_LANG_CAE_SECTION_ORIENT_VAL_TYPE   43
#define UF_SF_LANG_CAE_SECTION_OFFSET_VAL_TYPE   44
#define UF_SF_LANG_TARGETSET_VAL_TYPE            45
#define UF_SF_LANG_CAE_SECTION_REF_VAL_TYPE      46
#define UF_SF_LANG_DOFSETREF_VAL_TYPE            47
#define UF_SF_LANG_ALTERNATE_REP_ARRAY_VAL_TYPE  48
#define UF_SF_LANG_LBCREF_VAL_TYPE               49
#define UF_SF_LANG_PHYSICAL_ARRAY_VAL_TYPE       50
#define UF_SF_LANG_SOLUTIONREF_VAL_TYPE          51


/* FEM Property type parameter. */


enum UF_SF_fem_value_type_t
{
   UF_SF_FEM_VALUE_NIL               = UF_SF_LANG_NIL_VAL_TYPE,
   UF_SF_FEM_VALUE_INT               = UF_SF_LANG_INT_VAL_TYPE,
   UF_SF_FEM_VALUE_SCALAR            = UF_SF_LANG_SCALAR_VAL_TYPE,
   UF_SF_FEM_VALUE_TEXT              = UF_SF_LANG_TEXT_VAL_TYPE,
   UF_SF_FEM_VALUE_ENUM              = UF_SF_LANG_ENUM_VAL_TYPE,
   UF_SF_FEM_VALUE_COORD             = UF_SF_LANG_COORD_VAL_TYPE ,
   UF_SF_FEM_VALUE_MATERIAL          = UF_SF_LANG_MATERIAL_VAL_TYPE,
   UF_SF_FEM_VALUE_SECTION           = UF_SF_LANG_SECTION_VAL_TYPE,
   UF_SF_FEM_VALUE_VECTOR            = UF_SF_LANG_VECTOR_VAL_TYPE,
   UF_SF_FEM_VALUE_TABLE             = UF_SF_LANG_TABLE_VAL_TYPE,
   UF_SF_FEM_VALUE_LOAD              = UF_SF_LANG_LOAD_VAL_TYPE,
   UF_SF_FEM_VALUE_BNDCOND           = UF_SF_LANG_BNDCOND_VAL_TYPE,
   UF_SF_FEM_VALUE_BOOL              = UF_SF_LANG_BOOL_VAL_TYPE,
   UF_SF_FEM_VALUE_MULTI_STRING      = UF_SF_LANG_MULTI_STRING_VAL_TYPE,
   UF_SF_FEM_VALUE_MULTI_STRING_ITI  = UF_SF_LANG_MULTI_STRING_ITI_VAL_TYPE,
   UF_SF_FEM_VALUE_FILENAME_VAL_TYPE = UF_SF_LANG_FILENAME_VAL_TYPE,
   UF_SF_FEM_VALUE_DIRPATH_VAL_TYPE  = UF_SF_LANG_DIRPATH_VAL_TYPE,
   UF_SF_FEM_VALUE_SSMO_VAL_TYPE     = UF_SF_LANG_SSMO_VAL_TYPE ,
   UF_SF_FEM_VALUE_PPT_VAL_TYPE      = UF_SF_LANG_PPT_VAL_TYPE ,
   UF_SF_FEM_VALUE_PLYMAT_VAL_TYPE   = UF_SF_LANG_PLYMAT_VAL_TYPE ,
   UF_SF_FEM_VALUE_FIELD_VAL_TYPE    = UF_SF_LANG_FIELD_VAL_TYPE ,
   UF_SF_FEM_VALUE_AXIS_VAL_TYPE     = UF_SF_LANG_AXIS_VAL_TYPE ,
   UF_SF_FEM_VALUE_DOF_VAL_TYPE      = UF_SF_LANG_DOF_VAL_TYPE ,
   UF_SF_FEM_VALUE_POINT_VAL_TYPE    = UF_SF_LANG_POINT_VAL_TYPE,
   UF_SF_FEM_VALUE_EDGES_ON_FACE     = UF_SF_LANG_EDGES_ON_FACE_VAL_TYPE,
   UF_SF_FEM_VALUE_SCALAR_ARRAY      = UF_SF_LANG_SCALAR_ARRAY_VAL_TYPE,
   UF_SF_FEM_VALUE_ACTION            = UF_SF_LANG_ACTION_VAL_TYPE,
   UF_SF_FEM_VALUE_SSMO_ARRAY        = UF_SF_LANG_SSMO_ARRAY_VAL_TYPE,
   UF_SF_FEM_VALUE_TIME              = UF_SF_LANG_TIME_VAL_TYPE,
   UF_SF_FEM_VALUE_INT_ARRAY         = UF_SF_LANG_INT_ARRAY_VAL_TYPE,
   UF_SF_FEM_VALUE_EXT_MENU          = UF_SF_LANG_EXT_MENU_VAL_TYPE,
   UF_SF_FEM_VALUE_CATALOG           = UF_SF_LANG_CATALOG_VAL_TYPE,
   UF_SF_FEM_VALUE_GENERAL_FIELD     = UF_SF_LANG_GENERAL_FIELD_VAL_TYPE,
   UF_SF_FEM_VALUE_SCALAR_FIELD      = UF_SF_LANG_SCALAR_FIELD_VAL_TYPE,
   UF_SF_FEM_VALUE_VECTOR_FIELD      = UF_SF_LANG_VECTOR_FIELD_VAL_TYPE,
   UF_SF_FEM_VALUE_MATRIX            = UF_SF_LANG_MATRIX_VAL_TYPE,
   UF_SF_FEM_VALUE_REGION            = UF_SF_LANG_REGION_VAL_TYPE,
   UF_SF_FEM_VALUE_GROUPREF          = UF_SF_LANG_GROUPREF_VAL_TYPE,
   UF_SF_FEM_VALUE_SELECTREF         = UF_SF_LANG_SELECTREF_VAL_TYPE,
   UF_SF_FEM_VALUE_SECTION_ORIENT    = UF_SF_LANG_CAE_SECTION_ORIENT_VAL_TYPE,
   UF_SF_FEM_VALUE_SECTION_OFFSET    = UF_SF_LANG_CAE_SECTION_OFFSET_VAL_TYPE,
   UF_SF_FEM_VALUE_TARGETSET         = UF_SF_LANG_TARGETSET_VAL_TYPE,
   UF_SF_FEM_VALUE_SECTION_REF       = UF_SF_LANG_CAE_SECTION_REF_VAL_TYPE,
   UF_SF_FEM_VALUE_DOFSET_REF        = UF_SF_LANG_DOFSETREF_VAL_TYPE,
   UF_SF_FEM_VALUE_ALTREP_ARRAY_REF  = UF_SF_LANG_ALTERNATE_REP_ARRAY_VAL_TYPE,
   UF_SF_FEM_VALUE_LBCREF            = UF_SF_LANG_LBCREF_VAL_TYPE,
   UF_SF_FEM_VALUE_PPT_ARRAY         = UF_SF_LANG_PHYSICAL_ARRAY_VAL_TYPE,
   UF_SF_FEM_VALUE_SOLUTIONREF       = UF_SF_LANG_SOLUTIONREF_VAL_TYPE

};
typedef enum UF_SF_fem_value_type_t, * UF_SF_fem_value_type_p_t;

/* Durability Solution type parameter. */


enum UF_SF_dursol_stress_criterion_t
{
   UF_SF_ULTIMATE_STRENGTH = 0,
   UF_SF_YIELD_STRENGTH = 1

};
typedef enum UF_SF_dursol_stress_criterion_t, * UF_SF_dursol_stress_criterion_p_t;


enum UF_SF_dursol_stress_type_t
{
   UF_SF_VON_MISES = 0,
   UF_SF_TRESCA = 1,
   UF_SF_MAXIMUM_PRINCIPLE = 2,
   UF_SF_MINIMUM_PRINCIPLE = 3

};
typedef enum UF_SF_dursol_stress_type_t, * UF_SF_dursol_stress_type_p_t;


enum UF_SF_dursol_design_life_criterion_t
{
   UF_SF_INFINITE_LIFE = 0,
   UF_SF_CYCLES_TO_FAILURE = 1

};
typedef enum UF_SF_dursol_design_life_criterion_t, * UF_SF_design_life_criterion_p_t;


enum UF_SF_dursol_fatigue_life_criterion_t
{
   UF_SF_SMITH_WATSON_TOPPER = 0,
   UF_SF_STRAIN_LIFE_MAX_PRINCIPLE = 1,
   UF_SF_STRAIN_LIFE_MAX_SHEAR = 2,
   UF_SF_STRESS_LIFE = 3

};
typedef enum UF_SF_dursol_fatigue_life_criterion_t, * UF_SF_dursol_fatigue_life_criterion_p_t;



#endif  /*    UF_SF_TYPES__H_INCLUDED                                   */