1 /*
2  * Copyright(C) 1999-2020 National Technology & Engineering Solutions
3  * of Sandia, LLC (NTESS).  Under the terms of Contract DE-NA0003525 with
4  * NTESS, the U.S. Government retains certain rights in this software.
5  *
6  * See packages/seacas/LICENSE for details
7  */
8 /*****************************************************************************
9  *
10  * expnam - ex_put_names
11  *
12  * environment - UNIX
13  *
14  * entry conditions -
15  *   input parameters:
16  *       int     exoid       exodus file id
17  *       int     obj_type    object type
18  *       char*   names       ptr array of entity names
19  *
20  * exit conditions -
21  *
22  * revision history -
23  *
24  *
25  *****************************************************************************/
26 
27 #include "exodusII.h"     // for ex_err, etc
28 #include "exodusII_int.h" // for EX_FATAL, etc
29 
30 /*!
31  * writes the entity names to the database
32  * \param exoid       exodus file id
33  * \param obj_type    object type
34  * \param names       ptr array of entity names
35  */
36 
ex_put_names(int exoid,ex_entity_type obj_type,char * names[])37 int ex_put_names(int exoid, ex_entity_type obj_type, char *names[])
38 {
39   int    status;
40   int    varid;
41   size_t num_entity;
42   char   errmsg[MAX_ERR_LENGTH];
43 
44   const char *vname = NULL;
45 
46   EX_FUNC_ENTER();
47   if (ex__check_valid_file_id(exoid, __func__) == EX_FATAL) {
48     EX_FUNC_LEAVE(EX_FATAL);
49   }
50 
51   switch (obj_type) {
52   /*  ======== ASSEMBLY ========= */
53   case EX_ASSEMBLY:
54     snprintf(errmsg, MAX_ERR_LENGTH,
55              "ERROR: Assembly names are written using `ex_put_assembly()` function");
56     ex_err_fn(exoid, __func__, errmsg, EX_BADPARAM);
57     EX_FUNC_LEAVE(EX_FATAL);
58     break;
59 
60   /*  ======== BLOCKS ========= */
61   case EX_EDGE_BLOCK: vname = VAR_NAME_ED_BLK; break;
62   case EX_FACE_BLOCK: vname = VAR_NAME_FA_BLK; break;
63   case EX_ELEM_BLOCK: vname = VAR_NAME_EL_BLK; break;
64 
65   /*  ======== SETS ========= */
66   case EX_NODE_SET: vname = VAR_NAME_NS; break;
67   case EX_EDGE_SET: vname = VAR_NAME_ES; break;
68   case EX_FACE_SET: vname = VAR_NAME_FS; break;
69   case EX_SIDE_SET: vname = VAR_NAME_SS; break;
70   case EX_ELEM_SET: vname = VAR_NAME_ELS; break;
71 
72   /*  ======== MAPS ========= */
73   case EX_NODE_MAP: vname = VAR_NAME_NM; break;
74   case EX_EDGE_MAP: vname = VAR_NAME_EDM; break;
75   case EX_FACE_MAP: vname = VAR_NAME_FAM; break;
76   case EX_ELEM_MAP: vname = VAR_NAME_EM; break;
77 
78   /*  ======== ERROR (Invalid type) ========= */
79   default:
80     snprintf(errmsg, MAX_ERR_LENGTH, "ERROR: Invalid type specified in file id %d", exoid);
81     ex_err_fn(exoid, __func__, errmsg, EX_BADPARAM);
82     EX_FUNC_LEAVE(EX_FATAL);
83   }
84 
85   ex__get_dimension(exoid, ex__dim_num_objects(obj_type), ex_name_of_object(obj_type), &num_entity,
86                     &varid, __func__);
87 
88   if ((status = nc_inq_varid(exoid, vname, &varid)) != NC_NOERR) {
89     snprintf(errmsg, MAX_ERR_LENGTH, "ERROR: failed to locate %s names in file id %d",
90              ex_name_of_object(obj_type), exoid);
91     ex_err_fn(exoid, __func__, errmsg, status);
92     EX_FUNC_LEAVE(EX_FATAL);
93   }
94 
95   /* write EXODUS entitynames */
96   status = ex__put_names(exoid, varid, num_entity, names, obj_type, "", __func__);
97 
98   EX_FUNC_LEAVE(status);
99 }
100