int ex_get_name_internal(int exoid, int varid, size_t index, char *name, int name_size, ex_entity_type obj_type, const char *routine) { size_t start[2], count[2]; int status; char errmsg[MAX_ERR_LENGTH]; int api_name_size = ex_inquire_int(exoid, EX_INQ_MAX_READ_NAME_LENGTH); /* read the name */ start[0] = index; count[0] = 1; start[1] = 0; count[1] = name_size + 1; status = nc_get_vara_text(exoid, varid, start, count, name); if (status != NC_NOERR) { exerrval = status; snprintf(errmsg, MAX_ERR_LENGTH, "ERROR: failed to get %s name at index %d from file id %d", ex_name_of_object(obj_type), (int)index, exoid); ex_err(routine, errmsg, exerrval); return (EX_FATAL); } name[api_name_size] = '\0'; ex_trim_internal(name); return EX_NOERR; }
int ex_get_name_internal(int exoid, int varid, size_t index, char *name, ex_entity_type obj_type, const char *routine) { size_t start[2], count[2]; int status; char errmsg[MAX_ERR_LENGTH]; /* read the name */ start[0] = index; count[0] = 1; start[1] = 0; count[1] = ex_max_name_length+1; status = nc_get_vara_text(exoid, varid, start, count, name); if (status != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get %s name at index %d from file id %d", ex_name_of_object(obj_type), (int)index, exoid); ex_err(routine,errmsg,exerrval); return (EX_FATAL); } name[ex_max_name_length] = '\0'; ex_trim_internal(name); return EX_NOERR; }
int ex_get_block_param( int exoid, ex_block *block ) { int dimid, connid, blk_id_ndx; size_t len, i; char errmsg[MAX_ERR_LENGTH]; int status; const char* dnument; const char* dnumnod; const char* dnumedg; const char* dnumfac; const char* dnumatt; const char* ablknam; const char* vblkcon; struct ex_file_item* file = ex_find_file_item(exoid); if (!file ) { char errmsg[MAX_ERR_LENGTH]; exerrval = EX_BADFILEID; sprintf(errmsg,"Error: unknown file id %d in ex_get_block_param().",exoid); ex_err("ex_get_block_param",errmsg,exerrval); } exerrval = 0; /* First, locate index of element block id in VAR_ID_EL_BLK array */ blk_id_ndx = ex_id_lkup(exoid,block->type,block->id); if (exerrval != 0) { strcpy(block->topology, "NULL"); /* NULL element type name */ block->num_entry = 0; /* no elements */ block->num_nodes_per_entry = 0; /* no nodes */ block->num_edges_per_entry = 0; block->num_faces_per_entry = 0; block->num_attribute = 0; /* no attributes */ if (exerrval == EX_NULLENTITY) { /* NULL element block? */ return (EX_NOERR); } sprintf(errmsg, "Error: failed to locate %s id %"PRId64" in id array in file id %d", ex_name_of_object(block->type), block->id,exoid); ex_err("ex_get_block_param",errmsg,exerrval); return (EX_FATAL); } switch (block->type) { case EX_EDGE_BLOCK: dnument = DIM_NUM_ED_IN_EBLK(blk_id_ndx); dnumnod = DIM_NUM_NOD_PER_ED(blk_id_ndx); dnumedg = 0; dnumfac = 0; dnumatt = DIM_NUM_ATT_IN_EBLK(blk_id_ndx); vblkcon = VAR_EBCONN(blk_id_ndx); ablknam = ATT_NAME_ELB; break; case EX_FACE_BLOCK: dnument = DIM_NUM_FA_IN_FBLK(blk_id_ndx); dnumnod = DIM_NUM_NOD_PER_FA(blk_id_ndx); dnumedg = 0; /* it is possible this might be non-NULL some day */ dnumfac = 0; dnumatt = DIM_NUM_ATT_IN_FBLK(blk_id_ndx); vblkcon = VAR_FBCONN(blk_id_ndx); ablknam = ATT_NAME_ELB; break; case EX_ELEM_BLOCK: dnument = DIM_NUM_EL_IN_BLK(blk_id_ndx); dnumnod = DIM_NUM_NOD_PER_EL(blk_id_ndx); dnumedg = DIM_NUM_EDG_PER_EL(blk_id_ndx); dnumfac = DIM_NUM_FAC_PER_EL(blk_id_ndx); dnumatt = DIM_NUM_ATT_IN_BLK(blk_id_ndx); vblkcon = VAR_CONN(blk_id_ndx); ablknam = ATT_NAME_ELB; break; default: exerrval = EX_BADPARAM; sprintf( errmsg, "Bad block type parameter (%d) specified for file id %d.", block->type, exoid ); return (EX_FATAL); } /* inquire values of some dimensions */ if ((status = nc_inq_dimid (exoid, dnument, &dimid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate number of entities in %s %"PRId64" in file id %d", ex_name_of_object(block->type),block->id,exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } if ((status = nc_inq_dimlen (exoid, dimid, &len)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get number of %ss in block %"PRId64" in file id %d", ex_name_of_object(block->type),block->id, exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } block->num_entry = len; if ((status = nc_inq_dimid (exoid, dnumnod, &dimid)) != NC_NOERR) { /* undefined => no node entries per element */ len = 0; } else { if ((status = nc_inq_dimlen (exoid, dimid, &len)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get number of nodes/entity in %s %"PRId64" in file id %d", ex_name_of_object(block->type),block->id, exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } } block->num_nodes_per_entry = len; if (!file->has_edges || block->type != EX_ELEM_BLOCK) { block->num_edges_per_entry = 0; } else { if ((status = nc_inq_dimid (exoid, dnumedg, &dimid)) != NC_NOERR) { /* undefined => no edge entries per element */ len = 0; } else { if ((status = nc_inq_dimlen (exoid, dimid, &len)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get number of edges/entry in %s %"PRId64" in file id %d", ex_name_of_object(block->type),block->id, exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } } block->num_edges_per_entry = len; } if (!file->has_faces || block->type != EX_ELEM_BLOCK ) { block->num_faces_per_entry = 0; } else { if ((status = nc_inq_dimid (exoid, dnumfac, &dimid)) != NC_NOERR) { /* undefined => no face entries per element */ len = 0; } else { if ((status = nc_inq_dimlen(exoid, dimid, &len)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get number of faces/entity in %s %"PRId64" in file id %d", ex_name_of_object(block->type),block->id, exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } } block->num_faces_per_entry = len; } if ((status = nc_inq_dimid (exoid, dnumatt, &dimid)) != NC_NOERR) { /* dimension is undefined */ block->num_attribute = 0; } else { if ((status = nc_inq_dimlen(exoid, dimid, &len)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get number of attributes in %s %"PRId64" in file id %d", ex_name_of_object(block->type),block->id, exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } block->num_attribute = len; } if (block->num_nodes_per_entry > 0) { ; /* Do nothing, vblkcon should be correctly set already */ } else if (block->num_edges_per_entry > 0) { vblkcon = VAR_EBCONN(blk_id_ndx); } else if (block->num_faces_per_entry > 0) { vblkcon = VAR_FCONN(blk_id_ndx); } if (vblkcon) { /* look up connectivity array for this element block id */ if ((status = nc_inq_varid (exoid, vblkcon, &connid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate connectivity array for %s %"PRId64" in file id %d", ex_name_of_object(block->type), block->id,exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } if ((status = nc_inq_attlen (exoid, connid, ablknam, &len)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get %s %"PRId64" type in file id %d", ex_name_of_object(block->type), block->id,exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } if (len > (MAX_STR_LENGTH+1)) { len = MAX_STR_LENGTH; sprintf (errmsg, "Warning: %s %"PRId64" type will be truncated to %ld chars", ex_name_of_object(block->type), block->id, (long)len); ex_err("ex_get_block_param",errmsg,EX_MSG); } for (i=0; i < MAX_STR_LENGTH+1; i++) { block->topology[i] = '\0'; /* get the element type name */ }if ((status = nc_get_att_text (exoid, connid, ablknam, block->topology)) != NC_NOERR) { exerrval = status; sprintf(errmsg,"Error: failed to get %s %"PRId64" type in file id %d", ex_name_of_object(block->type), block->id, exoid); ex_err("ex_get_block_param",errmsg, exerrval); return(EX_FATAL); } /* get rid of trailing blanks */ ex_trim_internal(block->topology); } return (EX_NOERR); }
int ex_get_info (int exoid, char **info) { int status; size_t i; int dimid, varid; size_t num_info, start[2], count[2]; char errmsg[MAX_ERR_LENGTH]; int rootid = exoid & EX_FILE_ID_MASK; exerrval = 0; /* clear error code */ /* inquire previously defined dimensions and variables */ if ((status = nc_inq_dimid (rootid, DIM_NUM_INFO, &dimid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Warning: failed to locate number of info records in file id %d", rootid); ex_err("ex_get_info",errmsg,exerrval); return (EX_WARN); } if ((status = nc_inq_dimlen(rootid, dimid, &num_info)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get number of info records in file id %d", rootid); ex_err("ex_get_info",errmsg,exerrval); return (EX_FATAL); } /* do this only if there are any information records */ if (num_info > 0) { if ((status = nc_inq_varid(rootid, VAR_INFO, &varid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate info record data in file id %d", rootid); ex_err("ex_get_info",errmsg,exerrval); return (EX_FATAL); } /* read the information records */ for (i=0; i<num_info; i++) { start[0] = i; count[0] = 1; start[1] = 0; count[1] = MAX_LINE_LENGTH+1; if ((status = nc_get_vara_text(rootid, varid, start, count, info[i])) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get info record data in file id %d", rootid); ex_err("ex_get_info",errmsg,exerrval); return (EX_FATAL); } info[i][MAX_LINE_LENGTH] = '\0'; ex_trim_internal(info[i]); } } return (EX_NOERR); }
int ex_get_qa (int exoid, char *qa_record[][4]) { int status; int dimid, varid; size_t i, j; size_t num_qa_records, start[3], count[3]; char errmsg[MAX_ERR_LENGTH]; int rootid = exoid & EX_FILE_ID_MASK; exerrval = 0; /* clear error code */ /* inquire previously defined dimensions and variables */ if ((status = nc_inq_dimid(rootid, DIM_NUM_QA, &dimid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Warning: no qa records stored in file id %d", rootid); ex_err("ex_get_qa",errmsg,exerrval); return (EX_WARN); } if ((status = nc_inq_dimlen(rootid, dimid, &num_qa_records)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get number of qa records in file id %d", rootid); ex_err("ex_get_qa",errmsg,exerrval); return (EX_FATAL); } /* do this only if there are any QA records */ if (num_qa_records > 0) { if ((status = nc_inq_varid(rootid, VAR_QA_TITLE, &varid)) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to locate qa record data in file id %d", rootid); ex_err("ex_get_qa",errmsg,exerrval); return (EX_FATAL); } /* read the QA records */ for (i=0; i<num_qa_records; i++) { for (j=0; j<4; j++) { start[0] = i; count[0] = 1; start[1] = j; count[1] = 1; start[2] = 0; count[2] = MAX_STR_LENGTH+1; if ((status = nc_get_vara_text(rootid, varid, start, count, qa_record[i][j])) != NC_NOERR) { exerrval = status; sprintf(errmsg, "Error: failed to get qa record data in file id %d", rootid); ex_err("ex_get_qa",errmsg,exerrval); return (EX_FATAL); } qa_record[i][j][MAX_STR_LENGTH] = '\0'; ex_trim_internal(qa_record[i][j]); } } } return (EX_NOERR); }