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 * exgvnm - ex_get_variable_name
11 *
12 * entry conditions -
13 * input parameters:
14 * int exoid exodus file id
15 * int obj_type variable type
16 * int var_num variable index to read 1..num_var
17 *
18 * exit conditions -
19 * char* var_name ptr to variable name
20 *
21 * revision history -
22 *
23 *
24 *****************************************************************************/
25
26 #include "exodusII.h" // for ex_err, etc
27 #include "exodusII_int.h" // for EX_FATAL, etc
28
29 /*!
30 * \ingroup ResultsData
31 *
32 * reads the name of a particular results variable from the database
33 */
34
ex_get_variable_name(int exoid,ex_entity_type obj_type,int var_num,char * var_name)35 int ex_get_variable_name(int exoid, ex_entity_type obj_type, int var_num, char *var_name)
36 {
37 int status;
38 int varid;
39 char errmsg[MAX_ERR_LENGTH];
40 const char *vname = NULL;
41
42 EX_FUNC_ENTER();
43 if (ex__check_valid_file_id(exoid, __func__) == EX_FATAL) {
44 EX_FUNC_LEAVE(EX_FATAL);
45 }
46
47 /* inquire previously defined variables */
48
49 switch (obj_type) {
50 case EX_GLOBAL: vname = VAR_NAME_GLO_VAR; break;
51 case EX_NODAL: vname = VAR_NAME_NOD_VAR; break;
52 case EX_ASSEMBLY: vname = VAR_NAME_ASSEMBLY_VAR; break;
53 case EX_BLOB: vname = VAR_NAME_BLOB_VAR; break;
54 case EX_EDGE_BLOCK: vname = VAR_NAME_EDG_VAR; break;
55 case EX_FACE_BLOCK: vname = VAR_NAME_FAC_VAR; break;
56 case EX_ELEM_BLOCK: vname = VAR_NAME_ELE_VAR; break;
57 case EX_NODE_SET: vname = VAR_NAME_NSET_VAR; break;
58 case EX_EDGE_SET: vname = VAR_NAME_ESET_VAR; break;
59 case EX_FACE_SET: vname = VAR_NAME_FSET_VAR; break;
60 case EX_SIDE_SET: vname = VAR_NAME_SSET_VAR; break;
61 case EX_ELEM_SET: vname = VAR_NAME_ELSET_VAR; break;
62 default:
63 snprintf(errmsg, MAX_ERR_LENGTH, "ERROR: Invalid variable type (%d) given for file id %d",
64 obj_type, exoid);
65 ex_err_fn(exoid, __func__, errmsg, EX_BADPARAM);
66 EX_FUNC_LEAVE(EX_FATAL);
67 }
68
69 if ((status = nc_inq_varid(exoid, vname, &varid)) != NC_NOERR) {
70 snprintf(errmsg, MAX_ERR_LENGTH, "Warning: no %s variable names stored in file id %d",
71 ex_name_of_object(obj_type), exoid);
72 ex_err_fn(exoid, __func__, errmsg, status);
73 EX_FUNC_LEAVE(EX_WARN);
74 }
75
76 /* read the variable name */
77 {
78 int db_name_size = ex_inquire_int(exoid, EX_INQ_DB_MAX_ALLOWED_NAME_LENGTH);
79 int api_name_size = ex_inquire_int(exoid, EX_INQ_MAX_READ_NAME_LENGTH);
80 int name_size = db_name_size < api_name_size ? db_name_size : api_name_size;
81
82 status = ex__get_name(exoid, varid, var_num - 1, var_name, name_size, obj_type, __func__);
83 if (status != NC_NOERR) {
84 EX_FUNC_LEAVE(EX_FATAL);
85 }
86 }
87 EX_FUNC_LEAVE(EX_NOERR);
88 }
89