예제 #1
0
int ex_get_names_internal(int exoid, int varid, size_t num_entity, char **names,
			  ex_entity_type obj_type, const char *routine)
{
  size_t i;
  int status;

  /* read the names */
  for (i=0; i<num_entity; i++) {
    status = ex_get_name_internal(exoid, varid, i, names[i], obj_type, routine);
    if (status != NC_NOERR)
      return status;
  }
  return EX_NOERR;
}
예제 #2
0
int ex_get_names_internal(int exoid, int varid, size_t num_entity, char **names,
			  ex_entity_type obj_type, const char *routine)
{
  size_t i;
  int status;

  /* Query size of names on file
   * Use the smaller of the size on file or user-specified length
   */
  int db_name_size = ex_inquire_int(exoid, EX_INQ_DB_MAX_ALLOWED_NAME_LENGTH);
  int api_name_size = ex_inquire_int(exoid, EX_INQ_MAX_READ_NAME_LENGTH);
  int name_size = db_name_size < api_name_size ? db_name_size : api_name_size;
  
  for (i=0; i<num_entity; i++) {
    status = ex_get_name_internal(exoid, varid, i, names[i], name_size, obj_type, routine);
    if (status != NC_NOERR)
      return status;
  }
  return EX_NOERR;
}
int ex_get_variable_name (int   exoid,
			  ex_entity_type obj_type,
			  int   var_num,
			  char *var_name)
{
  int status;
  int varid;
  char errmsg[MAX_ERR_LENGTH];
  const char *vname = NULL;
   
  exerrval = 0; /* clear error code */

  /* inquire previously defined variables  */

  switch (obj_type) {
  case EX_GLOBAL:
    vname = VAR_NAME_GLO_VAR;
    break;
  case EX_NODAL:
    vname = VAR_NAME_NOD_VAR;
    break;
  case EX_EDGE_BLOCK:
    vname = VAR_NAME_EDG_VAR;
    break;
  case EX_FACE_BLOCK:
    vname = VAR_NAME_FAC_VAR;
    break;
  case EX_ELEM_BLOCK:
    vname = VAR_NAME_ELE_VAR;
    break;
  case EX_NODE_SET:
    vname = VAR_NAME_NSET_VAR;
    break;
  case EX_EDGE_SET:
    vname = VAR_NAME_ESET_VAR;
    break;
  case EX_FACE_SET:
    vname = VAR_NAME_FSET_VAR;
    break;
  case EX_SIDE_SET:
    vname = VAR_NAME_SSET_VAR;
    break;
  case EX_ELEM_SET:
    vname = VAR_NAME_ELSET_VAR;
    break;
  default:
    exerrval = EX_BADPARAM;
    sprintf( errmsg, "Error: Invalid variable type (%d) given for file id %d", obj_type, exoid );
    ex_err( "ex_get_variable_name", errmsg, exerrval );
    return (EX_FATAL);
  }

  if ((status = nc_inq_varid(exoid, vname, &varid)) != NC_NOERR) {
    exerrval = status;
    sprintf(errmsg,
	    "Warning: no %s variable names stored in file id %d",
	    ex_name_of_object(obj_type), exoid);
    ex_err("ex_get_variable_name",errmsg,exerrval);
    return (EX_WARN);
  }

  /* read the variable name */
  {
    int db_name_size = ex_inquire_int(exoid, EX_INQ_DB_MAX_ALLOWED_NAME_LENGTH);
    int api_name_size = ex_inquire_int(exoid, EX_INQ_MAX_READ_NAME_LENGTH);
    int name_size = db_name_size < api_name_size ? db_name_size : api_name_size;

    status = ex_get_name_internal(exoid, varid, var_num-1, var_name, name_size, obj_type, "ex_get_variable_name");
    if (status != NC_NOERR) {
      return (EX_FATAL);
    }
  }
  return (EX_NOERR);
}
예제 #4
0
int ex_get_name (int   exoid,
		 ex_entity_type obj_type,
		 ex_entity_id   entity_id, 
		 char *name)
{
  int status;
  int varid, ent_ndx;
  char errmsg[MAX_ERR_LENGTH];
  char *vobj = NULL;
  const char *routine = "ex_get_name";
   
  exerrval = 0;

  switch(obj_type) {
  case EX_ELEM_BLOCK:
    vobj = VAR_NAME_EL_BLK;
    break;
  case EX_EDGE_BLOCK:
    vobj = VAR_NAME_ED_BLK;
    break;
  case EX_FACE_BLOCK:
    vobj = VAR_NAME_FA_BLK;
    break;
  case EX_NODE_SET:
    vobj = VAR_NAME_NS;
    break;
  case EX_SIDE_SET:
    vobj = VAR_NAME_SS;
    break;
  case EX_EDGE_SET:
    vobj = VAR_NAME_ES;
    break;
  case EX_FACE_SET:
    vobj = VAR_NAME_FS;
    break;
  case EX_ELEM_SET:
    vobj = VAR_NAME_ELS;
    break;
  case EX_NODE_MAP:
    vobj = VAR_NAME_NM;
    break;
  case EX_EDGE_MAP:
    vobj = VAR_NAME_EDM;
    break;
  case EX_FACE_MAP:
    vobj = VAR_NAME_FAM;
    break;
  case EX_ELEM_MAP:
    vobj = VAR_NAME_EM;
    break;
  default:
    /* invalid variable type */
    exerrval = EX_BADPARAM;
    sprintf(errmsg, "Error: Invalid type specified in file id %d", exoid);
    ex_err(routine,errmsg,exerrval);
    return(EX_FATAL);
  }
   
  if ((status = nc_inq_varid(exoid, vobj, &varid)) == NC_NOERR) {
    /* If this is a null entity, then 'ent_ndx' will be negative.
     * We don't care in this routine, so make it positive and continue...
     */
    ent_ndx = ex_id_lkup(exoid, obj_type, entity_id);
    if (ent_ndx < 0) ent_ndx = -ent_ndx;
    
    /* read the name */
    {
      int db_name_size = ex_inquire_int(exoid, EX_INQ_DB_MAX_ALLOWED_NAME_LENGTH);
      int api_name_size = ex_inquire_int(exoid, EX_INQ_MAX_READ_NAME_LENGTH);
      int name_size = db_name_size < api_name_size ? db_name_size : api_name_size;

      status = ex_get_name_internal(exoid, varid, ent_ndx-1, name, name_size, obj_type, routine);
      if (status != NC_NOERR) {
	return (EX_FATAL);
      }
    }
  } else {
    /* Name variable does not exist on the database; probably since this is an
     * older version of the database.  Return an empty array...
     */
    name[0] = '\0';
  }
  return (EX_NOERR);
}