startsymbol(struct header *hd, int fdx) { register int i, fd; register struct header *h; long offset; long itol(); h = hd; fd = fdx; /* seek past header */ i = lseek(fd, (off_t) 16, 0); /* seek to start of symbol table */ offset = itol(h->tsize); offset = offset + itol(h->dsize); if (h->reloc_flag == 0) offset += offset; i |= lseek(fd, (off_t) offset, 1); if (i < 0) { printf("can't seek to symbol table\n"); return (-1); } return (0); }
char* test_itol_1(){ int a=1; LL A = {1, 0x0001},\ B; itol(B,a); mu_assert("Error in function itol, test #1.", comp_ll(A,B) == 3); }
char* test_itol_2(){ int a=0xFADEC; LL A = {2, 0xADEC, 0x000F},\ B; itol(B,a); mu_assert("Error in function itol, test #2.", comp_ll(A,B) == 3); }
int put_truth_table(int exoid, int num_blk, int num_var, int varid, int *table, const char *label) { long start[2], count[2]; int iresult = 0; nclong *lptr; char errmsg[MAX_ERR_LENGTH]; /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; start[1] = 0; count[0] = num_blk; count[1] = num_var; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, table); } else { lptr = itol (table, (int)(num_blk*num_var)); iresult = ncvarput (exoid, varid, start, count, lptr); lptr = static_cast<nclong*>(safe_free(lptr)); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store %s variable truth table in file id %d", label, exoid); ex_err("ex_put_all_var_param",errmsg,exerrval); } return iresult; }
long getaddr(struct header *hd, struct sym *s) { long addr; int i; long l; long itol(); addr = s->value + 16; /* offset past header */ switch (s->type) { /* extern text segment */ case 042: return (addr); /* data segment extern */ case 043: switch (hd->magic) { case 0407: return (addr); case 0410: /* subtract space between text and data */ l = itol(hd->tsize) + 017777; l &= ~017777; return (addr - (l - itol(hd->tsize))); case 0411: return (addr + itol(hd->tsize)); } default: printf("Invalid symbol type %o\n", s->type); return (-1); } }
int ex_put_elem_num_map (int exoid, const int *elem_map) { int numelemdim, dims[1], mapid, iresult; long num_elem, start[1], count[1]; nclong *lptr; char errmsg[MAX_ERR_LENGTH]; exerrval = 0; /* clear error code */ /* inquire id's of previously defined dimensions */ /* determine number of elements. Return if zero... */ if ((numelemdim = ncdimid (exoid, DIM_NUM_ELEM)) == -1) { return (EX_NOERR); } if (ncdiminq (exoid, numelemdim, (char *) 0, &num_elem) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of elements in file id %d", exoid); ex_err("ex_put_elem_num_map",errmsg,exerrval); return (EX_FATAL); } /* put netcdf file into define mode */ if ((mapid = ncvarid (exoid, VAR_ELEM_NUM_MAP)) == -1) { if (ncredef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to put file id %d into define mode", exoid); ex_err("ex_put_elem_num_map",errmsg,exerrval); return (EX_FATAL); } /* create a variable array in which to store the element numbering map */ dims[0] = numelemdim; if ((mapid = ncvardef (exoid, VAR_ELEM_NUM_MAP, NC_LONG, 1, dims)) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: element numbering map already exists in file id %d", exoid); ex_err("ex_put_elem_num_map",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to create element numbering map in file id %d", exoid); ex_err("ex_put_elem_num_map",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } /* leave define mode */ if (ncendef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to complete definition in file id %d", exoid); ex_err("ex_put_elem_num_map",errmsg,exerrval); return (EX_FATAL); } } /* write out the element numbering map */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_elem; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, mapid, start, count, elem_map); } else { lptr = itol (elem_map, (int)num_elem); iresult = ncvarput (exoid, mapid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store element numbering map in file id %d", exoid); ex_err("ex_put_elem_num_map",errmsg,exerrval); return (EX_FATAL); } return (EX_NOERR); /* Fatal error: exit definition mode and return */ error_ret: if (ncendef (exoid) == -1) /* exit define mode */ { sprintf(errmsg, "Error: failed to complete definition for file id %d", exoid); ex_err("ex_put_elem_num_map",errmsg,exerrval); } return (EX_FATAL); }
int ex_put_prop_array (int exoid, int obj_type, const char *prop_name, const int *values) { int num_props, i, propid, dimid, dims[1], iresult; int found = FALSE; long start[1], count[1], num_obj; nclong *lptr; char name[MAX_VAR_NAME_LENGTH+1]; char tmpstr[MAX_STR_LENGTH+1]; char obj_stype[MAX_VAR_NAME_LENGTH+1]; char dim_name[MAX_VAR_NAME_LENGTH+1]; char errmsg[MAX_ERR_LENGTH]; exerrval = 0; /* clear error code */ /* check if property has already been created */ num_props = ex_get_num_props(exoid, obj_type); switch (obj_type) { case EX_ELEM_BLOCK: strcpy (obj_stype, VAR_ID_EL_BLK); strcpy (dim_name, DIM_NUM_EL_BLK); break; case EX_NODE_SET: strcpy (obj_stype, VAR_NS_IDS); strcpy (dim_name, DIM_NUM_NS); break; case EX_SIDE_SET: strcpy (obj_stype, VAR_SS_IDS); strcpy (dim_name, DIM_NUM_SS); break; case EX_ELEM_MAP: strcpy (obj_stype, VAR_EM_PROP(1)); strcpy (dim_name, DIM_NUM_EM); break; case EX_NODE_MAP: strcpy (obj_stype, VAR_NM_PROP(1)); strcpy (dim_name, DIM_NUM_NM); break; default: exerrval = EX_BADPARAM; sprintf(errmsg, "Error: object type %d not supported; file id %d", obj_type, exoid); ex_err("ex_put_prop_array",errmsg,exerrval); return (EX_FATAL); } /* inquire id of previously defined dimension (number of objects) */ if ((dimid = ncdimid (exoid, dim_name)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate number of %s objects in file id %d", obj_stype, exoid); ex_err("ex_put_prop_array",errmsg, exerrval); return (EX_FATAL); } /* get number of objects */ if (ncdiminq (exoid, dimid, dim_name, &num_obj) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of %s objects in file id %d", obj_stype, exoid); ex_err("ex_put_prop_array",errmsg, exerrval); return (EX_FATAL); } for (i=1; i<=num_props; i++) { switch (obj_type){ case EX_ELEM_BLOCK: strcpy (name, VAR_EB_PROP(i)); break; case EX_NODE_SET: strcpy (name, VAR_NS_PROP(i)); break; case EX_SIDE_SET: strcpy (name, VAR_SS_PROP(i)); break; case EX_ELEM_MAP: strcpy (name, VAR_EM_PROP(i)); break; case EX_NODE_MAP: strcpy (name, VAR_NM_PROP(i)); break; default: exerrval = EX_BADPARAM; sprintf(errmsg, "Error: object type %d not supported; file id %d", obj_type, exoid); ex_err("ex_put_prop_array",errmsg,exerrval); return(EX_FATAL); } if ((propid = ncvarid (exoid, name)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get property array id in file id %d", exoid); ex_err("ex_put_prop_array",errmsg,exerrval); return (EX_FATAL); } /* compare stored attribute name with passed property name */ memset(tmpstr, 0, MAX_STR_LENGTH+1); if ((ncattget (exoid, propid, ATT_PROP_NAME, tmpstr)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get property name in file id %d", exoid); ex_err("ex_put_prop_array",errmsg,exerrval); return (EX_FATAL); } if (strcmp(tmpstr, prop_name) == 0) { found = TRUE; break; } } /* if property array has not been created, create it */ if (!found) { /* put netcdf file into define mode */ if (ncredef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg,"Error: failed to place file id %d into define mode",exoid); ex_err("ex_put_prop_array",errmsg,exerrval); return (EX_FATAL); } /* create a variable with a name xx_prop#, where # is the new number */ /* of properties */ switch (obj_type){ case EX_ELEM_BLOCK: strcpy (name, VAR_EB_PROP(num_props+1)); break; case EX_NODE_SET: strcpy (name, VAR_NS_PROP(num_props+1)); break; case EX_SIDE_SET: strcpy (name, VAR_SS_PROP(num_props+1)); break; case EX_ELEM_MAP: strcpy (name, VAR_EM_PROP(num_props+1)); break; case EX_NODE_MAP: strcpy (name, VAR_NM_PROP(num_props+1)); break; default: exerrval = EX_BADPARAM; sprintf(errmsg, "Error: object type %d not supported; file id %d", obj_type, exoid); ex_err("ex_put_prop_array",errmsg,exerrval); goto error_ret; /* Exit define mode and return */ } dims[0] = dimid; ncsetfill(exoid, NC_FILL); /* fill with zeros per routine spec */ if ((propid = ncvardef (exoid, name, NC_LONG, 1, dims)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to create property array variable in file id %d", exoid); ex_err("ex_put_prop_array",errmsg,exerrval); goto error_ret; /* Exit define mode and return */ } ncsetfill(exoid, NC_NOFILL); /* default: nofill */ /* store property name as attribute of property array variable */ if ((ncattput (exoid, propid, ATT_PROP_NAME, NC_CHAR, strlen(prop_name)+1, prop_name)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store property name %s in file id %d", prop_name,exoid); ex_err("ex_put_prop_array",errmsg,exerrval); goto error_ret; /* Exit define mode and return */ } /* leave define mode */ if (ncendef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to leave define mode in file id %d", exoid); ex_err("ex_put_prop_array",errmsg,exerrval); return (EX_FATAL); } } /* put num_obj values in property array */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_obj; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, propid, start, count, values); } else { lptr = itol (values, (int)num_obj); iresult = ncvarput (exoid, propid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store property values in file id %d", exoid); ex_err("ex_put_prop_array",errmsg,exerrval); return (EX_FATAL); } return (EX_NOERR); /* Fatal error: exit definition mode and return */ error_ret: ncsetfill(exoid, NC_NOFILL); /* default: nofill */ if (ncendef (exoid) == -1) /* exit define mode */ { sprintf(errmsg, "Error: failed to complete definition for file id %d", exoid); ex_err("ex_put_prop_array",errmsg,exerrval); } return (EX_FATAL); }
int ex_put_num_map ( int exoid, int map_type, int map_id, const int *map ) { int dimid, varid, iresult; long start[1]; nclong ldum, *lptr; long num_maps, num_entries, count[1]; int cur_num_maps; char *cdum; char errmsg[MAX_ERR_LENGTH]; const char* tname; const char* dnumentries; const char* dnummaps; const char* vmapids; const char* vmap = 0; struct list_item** map_ctr_list; exerrval = 0; /* clear error code */ cdum = 0; switch ( map_type ) { case EX_NODE_MAP: tname = "node"; dnumentries = DIM_NUM_NODES; dnummaps = DIM_NUM_NM; vmapids = VAR_NM_PROP(1); map_ctr_list = &nm_ctr_list; break; case EX_EDGE_MAP: tname = "edge"; dnumentries = DIM_NUM_EDGE; dnummaps = DIM_NUM_EDM; vmapids = VAR_EDM_PROP(1); map_ctr_list = &edm_ctr_list; break; case EX_FACE_MAP: tname = "face"; dnumentries = DIM_NUM_FACE; dnummaps = DIM_NUM_FAM; vmapids = VAR_FAM_PROP(1); map_ctr_list = &fam_ctr_list; break; case EX_ELEM_MAP: tname = "element"; dnumentries = DIM_NUM_ELEM; dnummaps = DIM_NUM_EM; vmapids = VAR_EM_PROP(1); map_ctr_list = &em_ctr_list; break; default: exerrval = EX_BADPARAM; sprintf( errmsg, "Error: Bad map type (%d) specified for file id %d", map_type, exoid ); ex_err( "ex_put_num_map", errmsg, exerrval ); return (EX_FATAL); } /* Make sure the file contains entries */ if ((dimid = (ncdimid (exoid, dnumentries))) == -1 ) { return (EX_NOERR); } /* first check if any maps are specified */ if ((dimid = (ncdimid (exoid, dnummaps))) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: no %s maps specified in file id %d", tname,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } /* Check for duplicate map id entry */ ex_id_lkup(exoid,vmapids,map_id); if (exerrval != EX_LOOKUPFAIL) /* found the map id */ { exerrval = ncerr; sprintf(errmsg, "Error: %s map %d already defined in file id %d", tname,map_id,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return(EX_FATAL); } /* Get number of maps initialized for this file */ if ((ncdiminq (exoid,dimid,cdum,&num_maps)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of %s maps in file id %d", tname,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } /* Keep track of the total number of maps defined using a counter stored in a linked list keyed by exoid. NOTE: ex_get_file_item is used to find the number of maps for a specific file and returns that value. */ cur_num_maps = ex_get_file_item(exoid, map_ctr_list ); if (cur_num_maps >= num_maps) { exerrval = EX_FATAL; sprintf(errmsg, "Error: exceeded number of %s maps (%ld) specified in file id %d", tname,num_maps,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } /* NOTE: ex_inc_file_item is used to find the number of maps for a specific file and returns that value incremented. */ cur_num_maps = ex_inc_file_item(exoid, map_ctr_list ); /* write out information to previously defined variable */ /* first get id of variable */ if ((varid = ncvarid (exoid, vmapids)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate %s map ids in file id %d", tname,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } /* then, write out map id */ start[0] = cur_num_maps; ldum = (nclong)map_id; if (ncvarput1 (exoid, varid, start, &ldum) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store %s map id %d in file id %d", tname,map_id,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } /* determine number of entries */ if ((dimid = (ncdimid (exoid, dnumentries))) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: couldn't determine number of %s entries in file id %d", tname,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } if (ncdiminq (exoid, dimid, (char *) 0, &num_entries) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of %s entries in file id %d", tname,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } switch ( map_type ) { case EX_NODE_MAP: vmap = VAR_NODE_MAP(cur_num_maps+1); break; case EX_EDGE_MAP: vmap = VAR_EDGE_MAP(cur_num_maps+1); break; case EX_FACE_MAP: vmap = VAR_FACE_MAP(cur_num_maps+1); break; case EX_ELEM_MAP: vmap = VAR_ELEM_MAP(cur_num_maps+1); break; } /* locate variable array in which to store the map */ if ((varid = ncvarid(exoid,vmap)) == -1) { #if 0 exerrval = ncerr; sprintf(errmsg, "Error: failed to locate %s map %d in file id %d", vmap,map_id,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); #endif int dims[2]; ncerr = 0; if ( ncredef( exoid ) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: failed to place file id %d into define mode", exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } dims[0] = dimid; if ( (varid = ncvardef( exoid, vmap, NC_LONG, 1, dims )) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: failed to define map %s in file id %d", vmap, exoid); ex_err("ex_put_num_map",errmsg,exerrval); } if ( ncendef( exoid ) == -1 ) { /* exit define mode */ sprintf( errmsg, "Error: failed to complete definition for file id %d", exoid ); ex_err( "ex_put_num_map", errmsg, exerrval ); varid = -1; /* force early exit */ } if ( varid == -1 ) /* we couldn't define variable and have prepared error message. */ return (EX_FATAL); } /* write out the map */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_entries; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, map); } else { lptr = itol (map, (int)num_entries); iresult = ncvarput (exoid, varid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store %s map in file id %d", tname,exoid); ex_err("ex_put_num_map",errmsg,exerrval); return (EX_FATAL); } return (EX_NOERR); }
/*! * writes an element map; this is a vector of integers of length number * of elements */ int ex_put_partial_elem_map (int exoid, int map_id, int ent_start, int ent_count, const int *elem_map) { int dimid, varid, iresult, map_ndx, map_exists; long start[1]; nclong ldum, *lptr; long num_elem_maps, num_elem, count[1]; int cur_num_elem_maps; char *cdum; char errmsg[MAX_ERR_LENGTH]; exerrval = 0; /* clear error code */ map_exists = 0; cdum = 0; /* Make sure the file contains elements */ if ((dimid = (ncdimid (exoid, DIM_NUM_ELEM))) == -1 ) { return (EX_NOERR); } /* first check if any element maps are specified */ if ((dimid = (ncdimid (exoid, DIM_NUM_EM))) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: no element maps specified in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } /* Check for duplicate element map id entry */ map_ndx = ex_id_lkup(exoid,VAR_EM_PROP(1),map_id); if (exerrval == EX_LOOKUPFAIL) { /* did not find the element map id */ map_exists = 0; /* Map is being defined */ map_ndx = -1; } else { map_exists = 1; /* A portion of this map has already been written */ } if (!map_exists) { /* Get number of element maps initialized for this file */ if ((ncdiminq (exoid,dimid,cdum,&num_elem_maps)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of element maps in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } /* Keep track of the total number of element maps defined using a counter stored in a linked list keyed by exoid. NOTE: ex_get_file_item is used to find the number of element maps for a specific file and returns that value. */ cur_num_elem_maps = ex_get_file_item(exoid, &em_ctr_list ); if (cur_num_elem_maps >= num_elem_maps) { exerrval = EX_FATAL; sprintf(errmsg, "Error: exceeded number of element maps (%ld) specified in file id %d", num_elem_maps,exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } /* NOTE: ex_inc_file_item is used to find the number of element maps for a specific file and returns that value incremented. */ cur_num_elem_maps = ex_inc_file_item(exoid, &em_ctr_list ); } else { cur_num_elem_maps = map_ndx-1; } /* determine number of elements */ if ((dimid = (ncdimid (exoid, DIM_NUM_ELEM))) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: couldn't determine number of elements in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } if (ncdiminq (exoid, dimid, (char *) 0, &num_elem) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of elements in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } /* Check input parameters for a valid range of numbers */ if (ent_start <= 0 || ent_start > num_elem) { exerrval = EX_FATAL; sprintf(errmsg, "Error: start count is invalid in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } if (ent_count < 0) { exerrval = EX_FATAL; sprintf(errmsg, "Error: Invalid count value in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } if (ent_start+ent_count-1 > num_elem) { exerrval = EX_FATAL; sprintf(errmsg, "Error: start+count-1 is larger than element count in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } /* write out information to previously defined variable */ /* first get id of variable */ if ((varid = ncvarid (exoid, VAR_EM_PROP(1))) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate element map ids in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } /* then, write out element map id */ if (!map_exists) { start[0] = cur_num_elem_maps; ldum = (nclong)map_id; if (ncvarput1 (exoid, varid, start, &ldum) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store element map id %d in file id %d", map_id,exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } } /* locate variable array in which to store the element map */ if ((varid = ncvarid(exoid,VAR_ELEM_MAP(cur_num_elem_maps+1))) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate element map %d in file id %d", map_id,exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } /* write out the element map */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = ent_start-1; count[0] = ent_count; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, elem_map); } else { lptr = itol (elem_map, (int)ent_count); iresult = ncvarput (exoid, varid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store element map in file id %d", exoid); ex_err("ex_put_partial_elem_map",errmsg,exerrval); return (EX_FATAL); } return (EX_NOERR); }
int ex_put_concat_side_sets (int exoid, const int *side_set_ids, const int *num_elem_per_set, const int *num_dist_per_set, const int *side_sets_elem_index, const int *side_sets_dist_index, const int *side_sets_elem_list, const int *side_sets_side_list, const void *side_sets_dist_fact) { char *cdum; int i, num_side_sets, cur_num_side_sets, dimid, varid, dims[1], *ss_stat; int iresult; long start[1], count[1]; nclong *lptr; float fdum; const float *flt_dist_fact; const double *dbl_dist_fact; char errmsg[MAX_ERR_LENGTH]; exerrval = 0; /* clear error code */ cdum = 0; /* initialize even though it is not used */ /* first check if any side sets are specified */ if (ncdimid (exoid, DIM_NUM_SS) == -1) { if (ncerr == NC_EBADDIM) { exerrval = ncerr; sprintf(errmsg, "Error: no side sets defined for file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate side sets defined in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } return (EX_FATAL); } /* inquire how many side sets are to be stored */ if (ex_inquire(exoid, EX_INQ_SIDE_SETS, &num_side_sets, &fdum, cdum) == -1) { sprintf(errmsg, "Error: failed to get number of side sets defined for file id %d", exoid); /* use error val from inquire */ ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* fill out side set status array */ /* First, allocate space for the side set status list */ if (!(ss_stat= malloc(num_side_sets*sizeof(int)))) { exerrval = EX_MEMFAIL; sprintf(errmsg, "Error: failed to allocate space for side set status array in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } for (i=0;i<num_side_sets;i++) { if (num_elem_per_set[i] == 0) /* Is this a NULL side set? */ ss_stat[i] = 0; /* change side set status to NULL */ else ss_stat[i] = 1; /* change side set status to TRUE */ } /* Next, get variable id of status array */ if ((varid = ncvarid (exoid, VAR_SS_STAT)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate side set status in file id %d", exoid); ex_err("ex_put_concat_node_set",errmsg,exerrval); return (EX_FATAL); } /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_side_sets; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, ss_stat); } else { lptr = itol (ss_stat, num_side_sets); iresult = ncvarput (exoid, varid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store side set status array to file id %d", exoid); ex_err("ex_put_concat_side_set",errmsg,exerrval); return (EX_FATAL); } free(ss_stat); /* put netcdf file into define mode */ if (ncredef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to put file id %d into define mode", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* create side set definitions */ for (i=0; i<num_side_sets; i++) { /* Keep track of the total number of side sets defined using a counter stored in a linked list keyed by exoid. NOTE: ex_get_file_item is used to find the number of side sets for a specific file and returns that value. */ cur_num_side_sets=ex_get_file_item(exoid, &ss_ctr_list ); if (cur_num_side_sets >= num_side_sets) { exerrval = EX_FATAL; sprintf(errmsg, "Error: exceeded number of side sets (%d) defined in file id %d", num_side_sets,exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); goto error_ret; } /* NOTE: ex_inc_file_item is used to find the number of side sets for a specific file and returns that value incremented. */ cur_num_side_sets=ex_inc_file_item(exoid, &ss_ctr_list ); /* define dimension for number of sides/elements per side set */ if (num_elem_per_set[i] == 0) /* Is this a NULL side set? */ continue; /* Do not create anything for NULL side sets! */ if ((dimid = ncdimdef (exoid, DIM_NUM_SIDE_SS(cur_num_side_sets+1), (long)num_elem_per_set[i])) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: side set side count %d already defined in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to define number of sides for set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; } /* create element list variable for side set */ dims[0] = dimid; if (ncvardef (exoid,VAR_ELEM_SS(cur_num_side_sets+1),NC_LONG,1,dims) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: element list already exists for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to create element list for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } /* create side list variable for side set */ if (ncvardef (exoid,VAR_SIDE_SS(cur_num_side_sets+1),NC_LONG,1,dims) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: side list already exists for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to create side list for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } /* define dimension for number of dist factors/nodes per side set */ /* NOTE: only define df count if the dist factors exist! */ if (num_dist_per_set[i] > 0) { if ((dimid = ncdimdef (exoid, DIM_NUM_DF_SS(cur_num_side_sets+1), (long)num_dist_per_set[i])) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: side set df count %d already defined in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to define side set df count for set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; } /* create distribution factor list variable for side set */ dims[0] = dimid; if (ncvardef (exoid, VAR_FACT_SS(cur_num_side_sets+1), nc_flt_code(exoid), 1, dims) == -1) { if (ncerr == NC_ENAMEINUSE) { exerrval = ncerr; sprintf(errmsg, "Error: dist factor list already exists for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } else { exerrval = ncerr; sprintf(errmsg, "Error: failed to create dist factor list for side set %d in file id %d", side_set_ids[i],exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } goto error_ret; /* exit define mode and return */ } } /* end define dist factors */ } /* leave define mode */ if (ncendef (exoid) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to complete definition in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* Next, fill out side set ids array */ /* first get id of side set ids array variable */ if ((varid = ncvarid (exoid, VAR_SS_IDS)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate side set ids array in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* then, write out side set id list */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_side_sets; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, side_set_ids); } else { lptr = itol (side_set_ids, num_side_sets); iresult = ncvarput (exoid, varid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store side set id array in file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } /* If the side_sets_elem_index is passed in as a NULL pointer, then * the user only wants us to define the sidesets and not populate * the data structures. */ if (side_sets_elem_index == 0) return(EX_NOERR); /* Now, use ExodusII call to store side sets */ for (i=0; i<num_side_sets; i++) { if (num_elem_per_set[i] == 0) /* Is this a NULL side set? */ continue; /* Do not create anything for NULL side sets! */ if (ex_comp_ws(exoid) == sizeof(float)) { flt_dist_fact = side_sets_dist_fact; if (ex_put_side_set(exoid, side_set_ids[i], &(side_sets_elem_list[side_sets_elem_index[i]]), &(side_sets_side_list[side_sets_elem_index[i]])) == -1) return(EX_FATAL); /* error will be reported by subroutine */ if (num_dist_per_set[i] > 0) /* store dist factors if required */ { if (ex_put_side_set_dist_fact(exoid, side_set_ids[i], &(flt_dist_fact[side_sets_dist_index[i]])) == -1) { sprintf(errmsg, "Error: failed to store side set %d dist factors for file id %d", side_set_ids[i],exoid); /* use error val from exodusII routine */ ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } } } else if (ex_comp_ws(exoid) == sizeof(double)) { dbl_dist_fact = side_sets_dist_fact; if (ex_put_side_set(exoid, side_set_ids[i], &(side_sets_elem_list[side_sets_elem_index[i]]), &(side_sets_side_list[side_sets_elem_index[i]])) == -1) return(EX_FATAL); /* error will be reported by subroutine */ if (num_dist_per_set[i] > 0) /* only store if they exist */ { if (ex_put_side_set_dist_fact(exoid, side_set_ids[i], &(dbl_dist_fact[side_sets_dist_index[i]])) == -1) { sprintf(errmsg, "Error: failed to store side set %d dist factors for file id %d", side_set_ids[i],exoid); /* use error val from exodusII routine */ ex_err("ex_put_concat_side_sets",errmsg,exerrval); return (EX_FATAL); } } } else { /* unknown floating point word size */ exerrval = EX_BADPARAM; sprintf(errmsg, "Error: unsupported floating point word size %d for file id %d", ex_comp_ws(exoid), exoid); ex_err("ex_put_concat_side_sets", errmsg, exerrval); return (EX_FATAL); } } return(EX_NOERR); /* Fatal error: exit definition mode and return */ error_ret: if (ncendef (exoid) == -1) /* exit define mode */ { sprintf(errmsg, "Error: failed to complete definition for file id %d", exoid); ex_err("ex_put_concat_side_sets",errmsg,exerrval); } return (EX_FATAL); }
int ex_put_node_map (int exoid, int map_id, const int *node_map) { int dimid, varid, iresult; long start[1]; nclong ldum, *lptr; long num_node_maps, num_nodes, count[1]; int cur_num_node_maps; char *cdum; char errmsg[MAX_ERR_LENGTH]; exerrval = 0; /* clear error code */ cdum = 0; /* Return if node nodes stored in this file */ if ((dimid = (ncdimid (exoid, DIM_NUM_NODES))) == -1 ) { return (EX_NOERR); } /* first check if any node maps are specified */ if ((dimid = (ncdimid (exoid, DIM_NUM_NM))) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: no node maps specified in file id %d", exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } /* Check for duplicate node map id entry */ ex_id_lkup(exoid,VAR_NM_PROP(1),map_id); if (exerrval != EX_LOOKUPFAIL) /* found the node map id */ { exerrval = ncerr; sprintf(errmsg, "Error: node map %d already defined in file id %d", map_id,exoid); ex_err("ex_put_node_map",errmsg,exerrval); return(EX_FATAL); } /* Get number of node maps initialized for this file */ if ((ncdiminq (exoid,dimid,cdum,&num_node_maps)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of node maps in file id %d", exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } /* Keep track of the total number of node maps defined using a counter stored in a linked list keyed by exoid. NOTE: ex_get_file_item is used to find the number of node maps for a specific file and returns that value. */ cur_num_node_maps = ex_get_file_item(exoid, &nm_ctr_list ); if (cur_num_node_maps >= num_node_maps) { exerrval = EX_FATAL; sprintf(errmsg, "Error: exceeded number of node maps (%ld) specified in file id %d", num_node_maps,exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } /* NOTE: ex_inc_file_item is used to find the number of node maps for a specific file and returns that value incremented. */ cur_num_node_maps = ex_inc_file_item(exoid, &nm_ctr_list ); /* write out information to previously defined variable */ /* first get id of variable */ if ((varid = ncvarid (exoid, VAR_NM_PROP(1))) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate node map ids in file id %d", exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } /* then, write out node map id */ start[0] = cur_num_node_maps; ldum = (nclong)map_id; if (ncvarput1 (exoid, varid, start, &ldum) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store node map id %d in file id %d", map_id,exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } /* determine number of nodes */ if ((dimid = (ncdimid (exoid, DIM_NUM_NODES))) == -1 ) { exerrval = ncerr; sprintf(errmsg, "Error: couldn't determine number of nodes in file id %d", exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } if (ncdiminq (exoid, dimid, (char *) 0, &num_nodes) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of nodes in file id %d", exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } /* find variable array in which to store the node map */ if ((varid = ncvarid(exoid,VAR_NODE_MAP(cur_num_node_maps+1))) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate node map %d in file id %d", map_id,exoid); ex_err("ex_put_node_map",errmsg,exerrval); return(EX_FATAL); } /* write out the node map */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_nodes; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput (exoid, varid, start, count, node_map); } else { lptr = itol (node_map, (int)num_nodes); iresult = ncvarput (exoid, varid, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store node map in file id %d", exoid); ex_err("ex_put_node_map",errmsg,exerrval); return (EX_FATAL); } return (EX_NOERR); }
int ex_put_side_set (int exoid, int side_set_id, const int *side_set_elem_list, const int *side_set_side_list) { int dimid, iresult; int elem_list_id, side_list_id, side_set_id_ndx; long num_side_in_set, start[1], count[1]; nclong *lptr; char errmsg[MAX_ERR_LENGTH]; exerrval = 0; /* clear error code */ /* first check if any side sets are specified */ if ((dimid = ncdimid (exoid, DIM_NUM_SS)) < 0) { exerrval = ncerr; sprintf(errmsg, "Error: no side sets defined in file id %d", exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } /* Lookup index of side set id in VAR_SS_IDS array */ side_set_id_ndx = ex_id_lkup(exoid,VAR_SS_IDS,side_set_id); if (exerrval != 0) { if (exerrval == EX_NULLENTITY) { sprintf(errmsg, "Warning: no data allowed for NULL side set %d in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,EX_MSG); return (EX_WARN); } else { sprintf(errmsg, "Error: failed to locate side set id %d in VAR_SS_IDS array in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } } /* inquire id's of previously defined dimensions */ if ((dimid = ncdimid (exoid, DIM_NUM_SIDE_SS(side_set_id_ndx))) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate number of sides in side set %d in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } if (ncdiminq (exoid, dimid, (char *) 0, &num_side_in_set) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of sides in side set %d in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } /* inquire id's of previously defined variables */ if ((elem_list_id = ncvarid (exoid, VAR_ELEM_SS(side_set_id_ndx))) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate element list for side set %d in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } if ((side_list_id = ncvarid (exoid, VAR_SIDE_SS(side_set_id_ndx))) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate side list for side set %d in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } /* write out the element list and side list arrays */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_side_in_set; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput(exoid, elem_list_id, start, count, side_set_elem_list); } else { lptr = itol (side_set_elem_list, (int)num_side_in_set); iresult = ncvarput (exoid, elem_list_id, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store element list for side set %d in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput(exoid, side_list_id, start, count, side_set_side_list); } else { lptr = itol (side_set_side_list, (int)num_side_in_set); iresult = ncvarput (exoid, side_list_id, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store side list for side set %d in file id %d", side_set_id,exoid); ex_err("ex_put_side_set",errmsg,exerrval); return (EX_FATAL); } return (EX_NOERR); }
int ex_put_set (int exoid, int set_type, int set_id, const int *set_entry_list, const int *set_extra_list) { int dimid, iresult; int entry_list_id, extra_list_id, set_id_ndx; long num_entries_in_set, start[1], count[1]; nclong *lptr; char errmsg[MAX_ERR_LENGTH]; char* typeName; char* dimptr; char* idsptr; char* numentryptr; char* entryptr; char* extraptr; exerrval = 0; /* clear error code */ /* setup pointers based on set_type NOTE: there is another block that sets more stuff later ... */ if (set_type == EX_NODE_SET) { typeName = "node"; dimptr = DIM_NUM_NS; idsptr = VAR_NS_IDS; } else if (set_type == EX_EDGE_SET) { typeName = "edge"; dimptr = DIM_NUM_ES; idsptr = VAR_ES_IDS; } else if (set_type == EX_FACE_SET) { typeName = "face"; dimptr = DIM_NUM_FS; idsptr = VAR_FS_IDS; } else if (set_type == EX_SIDE_SET) { typeName = "side"; dimptr = DIM_NUM_SS; idsptr = VAR_SS_IDS; } else if (set_type == EX_ELEM_SET) { typeName = "elem"; dimptr = DIM_NUM_ELS; idsptr = VAR_ELS_IDS; } else { exerrval = EX_FATAL; sprintf(errmsg, "Error: invalid set type (%d)", set_type); ex_err("ex_put_set_param",errmsg,exerrval); return (EX_FATAL); } /* first check if any sets are specified */ if ((dimid = ncdimid (exoid, dimptr)) < 0) { exerrval = ncerr; sprintf(errmsg, "Error: no %s sets defined in file id %d", typeName, exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } /* Lookup index of set id in VAR_*S_IDS array */ set_id_ndx = ex_id_lkup(exoid,idsptr,set_id); if (exerrval != 0) { if (exerrval == EX_NULLENTITY) { sprintf(errmsg, "Warning: no data allowed for NULL %s set %d in file id %d", typeName,set_id,exoid); ex_err("ex_put_set",errmsg,EX_MSG); return (EX_WARN); } else { sprintf(errmsg, "Error: failed to locate %s set id %d in VAR_*S_IDS array in file id %d", typeName, set_id,exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } } /* setup more pointers based on set_type */ if (set_type == EX_NODE_SET) { numentryptr = DIM_NUM_NOD_NS(set_id_ndx); entryptr = VAR_NODE_NS(set_id_ndx); extraptr = NULL; } else if (set_type == EX_EDGE_SET) { numentryptr = DIM_NUM_EDGE_ES(set_id_ndx); entryptr = VAR_EDGE_ES(set_id_ndx); extraptr = VAR_ORNT_ES(set_id_ndx); } else if (set_type == EX_FACE_SET) { numentryptr = DIM_NUM_FACE_FS(set_id_ndx); entryptr = VAR_FACE_FS(set_id_ndx); extraptr = VAR_ORNT_FS(set_id_ndx); } else if (set_type == EX_SIDE_SET) { numentryptr = DIM_NUM_SIDE_SS(set_id_ndx); entryptr = VAR_ELEM_SS(set_id_ndx); extraptr = VAR_SIDE_SS(set_id_ndx); } if (set_type == EX_ELEM_SET) { numentryptr = DIM_NUM_ELE_ELS(set_id_ndx); entryptr = VAR_ELEM_ELS(set_id_ndx); extraptr = NULL; } /* inquire id's of previously defined dimensions */ if ((dimid = ncdimid (exoid, numentryptr)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate number of entities in %s set %d in file id %d", typeName, set_id,exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } if (ncdiminq (exoid, dimid, (char *) 0, &num_entries_in_set) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to get number of entities in %s set %d in file id %d", typeName, set_id,exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } /* inquire id's of previously defined variables */ if ((entry_list_id = ncvarid (exoid, entryptr)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate entry list for %s set %d in file id %d", typeName, set_id,exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } /* only do for edge, face and side sets */ if (extraptr) { if ((extra_list_id = ncvarid (exoid, extraptr)) == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to locate extra list for %s set %d in file id %d", typeName, set_id,exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } } /* write out the entry list and extra list arrays */ /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ start[0] = 0; count[0] = num_entries_in_set; if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput(exoid, entry_list_id, start, count, set_entry_list); } else { lptr = itol (set_entry_list, (int)num_entries_in_set); iresult = ncvarput (exoid, entry_list_id, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store entry list for %s set %d in file id %d", typeName, set_id,exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } /* this contortion is necessary because netCDF is expecting nclongs; fortunately it's necessary only when ints and nclongs aren't the same size */ /* only do for edge, face and side sets */ if (extraptr) { if (sizeof(int) == sizeof(nclong)) { iresult = ncvarput(exoid, extra_list_id, start, count, set_extra_list); } else { lptr = itol (set_extra_list, (int)num_entries_in_set); iresult = ncvarput (exoid, extra_list_id, start, count, lptr); free(lptr); } if (iresult == -1) { exerrval = ncerr; sprintf(errmsg, "Error: failed to store extra list for %s set %d in file id %d", typeName, set_id,exoid); ex_err("ex_put_set",errmsg,exerrval); return (EX_FATAL); } } /* warn if extra data was sent in for node sets and elem sets */ if ((set_type == EX_NODE_SET || set_type == EX_ELEM_SET) && set_extra_list != NULL) { sprintf(errmsg, "Warning: extra list was ignored for %s set %d in file id %d", typeName, set_id, exoid); ex_err("ex_put_set",errmsg,EX_MSG); return(EX_WARN); } return (EX_NOERR); }