⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expvpax.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 2 页
字号:
      sprintf(errmsg,							\              "Error: failed to define " STNAME " variable truth table in file id %d", \              exoid);							\      ex_err("ex_put_all_var_param_ext",errmsg,exerrval);		\      goto error_ret;          /* exit define mode and return */	\    }									\  }  EX_DEFINE_VARS(EX_EDGE_BLOCK,   "edge",   "edge block",vp->num_edge, DIM_NUM_EDG_VAR,  numedblkdim,numedvardim,num_edge_blk,edblk_ids,VAR_NAME_EDG_VAR,  VAR_EBLK_TAB, edblk_stat,vp->edge_var_tab,edblk_varid);  EX_DEFINE_VARS(EX_FACE_BLOCK,   "face",   "face block",vp->num_face, DIM_NUM_FAC_VAR,  numfablkdim,numfavardim,num_face_blk,fablk_ids,VAR_NAME_FAC_VAR,  VAR_FBLK_TAB, fablk_stat,vp->face_var_tab,fablk_varid);  EX_DEFINE_VARS(EX_ELEM_BLOCK,"element","element block",vp->num_elem, DIM_NUM_ELE_VAR,  numelblkdim,numelvardim,num_elem_blk, eblk_ids,VAR_NAME_ELE_VAR,  VAR_ELEM_TAB,  eblk_stat,vp->elem_var_tab,eblk_varid);  EX_DEFINE_VARS(EX_NODE_SET,  "nodeset",     "node set",vp->num_nset, DIM_NUM_NSET_VAR, numnsetdim, nsetvardim, num_nset,     nset_ids,VAR_NAME_NSET_VAR, VAR_NSET_TAB,  nset_stat,vp->nset_var_tab, nset_varid);  EX_DEFINE_VARS(EX_EDGE_SET,  "edgeset",     "edge set",vp->num_eset, DIM_NUM_ESET_VAR, numesetdim, esetvardim, num_eset,     eset_ids,VAR_NAME_ESET_VAR, VAR_ESET_TAB,  eset_stat,vp->eset_var_tab, eset_varid);  EX_DEFINE_VARS(EX_FACE_SET,  "faceset",     "face set",vp->num_fset, DIM_NUM_FSET_VAR, numfsetdim, fsetvardim, num_fset,     fset_ids,VAR_NAME_FSET_VAR, VAR_FSET_TAB,  fset_stat,vp->fset_var_tab, fset_varid);  EX_DEFINE_VARS(EX_SIDE_SET,  "sideset",     "side set",vp->num_sset, DIM_NUM_SSET_VAR, numssetdim, ssetvardim, num_sset,     sset_ids,VAR_NAME_SSET_VAR, VAR_SSET_TAB,  sset_stat,vp->sset_var_tab, sset_varid);  EX_DEFINE_VARS(EX_ELEM_SET,  "elemset",  "element set",vp->num_elset,DIM_NUM_ELSET_VAR,numelsetdim,elsetvardim,num_elset,   elset_ids,VAR_NAME_ELSET_VAR,VAR_ELSET_TAB,elset_stat,vp->elset_var_tab,elset_varid);  /* leave define mode  */  in_define = 0;  if ((status = nc_enddef (exoid)) != NC_NOERR)    {      exerrval = status;      sprintf(errmsg,              "Error: failed to complete definition in file id %d",              exoid);      ex_err("ex_put_all_var_param_ext",errmsg,exerrval);      goto error_ret;    }  /* write out the variable truth tables */  if (vp->num_edge > 0) {    if (put_truth_table(exoid, edblk_varid, vp->edge_var_tab, "edge") != NC_NOERR)      goto error_ret;  }  if (vp->num_face > 0) {    if (put_truth_table(exoid, fablk_varid, vp->face_var_tab, "face") != NC_NOERR)      goto error_ret;  }  if (vp->num_elem > 0) {    if (put_truth_table(exoid, eblk_varid, vp->elem_var_tab, "element") !=  NC_NOERR)      goto error_ret;  }  if (vp->num_nset > 0) {    if (put_truth_table(exoid, nset_varid, vp->nset_var_tab, "nodeset") != NC_NOERR)      goto error_ret;  }  if (vp->num_eset > 0) {    if (put_truth_table(exoid, eset_varid, vp->eset_var_tab, "edgeset") != NC_NOERR)      goto error_ret;  }  if (vp->num_fset > 0) {    if (put_truth_table(exoid, fset_varid, vp->fset_var_tab, "faceset") != NC_NOERR)      goto error_ret;  }  if (vp->num_sset > 0) {    if (put_truth_table(exoid, sset_varid, vp->sset_var_tab, "sideset") != NC_NOERR)      goto error_ret;  }  if (vp->num_elset > 0) {    if (put_truth_table(exoid, elset_varid, vp->elset_var_tab, "elemset") != NC_NOERR)      goto error_ret;  }  return(EX_NOERR);    /* Fatal error: exit definition mode and return */ error_ret:  if (in_define == 1) {    if (nc_enddef (exoid) != NC_NOERR)     /* exit define mode */      {        sprintf(errmsg,                "Error: failed to complete definition for file id %d",                exoid);        ex_err("ex_put_all_var_param_ext",errmsg,exerrval);      }  }  safe_free(eblk_ids);  safe_free(edblk_ids);  safe_free(fablk_ids);  safe_free(nset_ids);  safe_free(eset_ids);  safe_free(fset_ids);  safe_free(sset_ids);  safe_free(elset_ids);  safe_free(eblk_stat);  safe_free(edblk_stat);  safe_free(fablk_stat);  safe_free(nset_stat);  safe_free(eset_stat);  safe_free(fset_stat);  safe_free(sset_stat);  safe_free(elset_stat);  return(EX_FATAL);}int define_dimension(int exoid, const char *DIMENSION, int count, const char *label, int *dimid){  char errmsg[MAX_ERR_LENGTH];  int status;  if ((status = nc_def_dim(exoid, DIMENSION, count, dimid)) != NC_NOERR) {    exerrval = status;    if (status == NC_ENAMEINUSE) {      sprintf(errmsg,              "Error: %s variable name parameters are already defined in file id %d",              label, exoid);      ex_err("ex_put_all_var_param_ext",errmsg,exerrval);    } else {      sprintf(errmsg,              "Error: failed to define number of %s variables in file id %d",              label, exoid);      ex_err("ex_put_all_var_param_ext",errmsg,exerrval);    }  }  return status;}int define_variable_name_variable(int exoid, const char *VARIABLE, int dimension, const char *label){  char errmsg[MAX_ERR_LENGTH];  int dims[2];  int variable;  int status;    dims[0] = dimension;  nc_inq_dimid(exoid, DIM_STR, &dims[1]); /* Checked earlier, so known to exist */  if ((status=nc_def_var(exoid, VARIABLE, NC_CHAR, 2, dims, &variable)) != NC_NOERR) {    if (status == NC_ENAMEINUSE) {      exerrval = status;      sprintf(errmsg,              "Error: %s variable names are already defined in file id %d",              label, exoid);      ex_err("ex_put_all_var_param_ext",errmsg,exerrval);    } else {      exerrval = status;      sprintf(errmsg,              "Error: failed to define %s variable names in file id %d",              label, exoid);      ex_err("ex_put_all_var_param_ext",errmsg,exerrval);    }  }  return status;}int *get_status_array(int exoid, int var_count, const char *VARIABLE, const char *label){  char errmsg[MAX_ERR_LENGTH];  int varid;  int status;  int *stat_vals = NULL;    if (!(stat_vals = malloc(var_count*sizeof(int)))) {    exerrval = EX_MEMFAIL;    sprintf(errmsg,            "Error: failed to allocate memory for %s status array for file id %d",            label, exoid);    ex_err("ex_put_all_var_param_ext",errmsg,exerrval);    return (NULL);  }  /* get variable id of status array */  if ((nc_inq_varid (exoid, VARIABLE, &varid)) == NC_NOERR) {    /* if status array exists (V 2.01+), use it, otherwise assume       object exists to be backward compatible */         if ((status = nc_get_var_int(exoid, varid, stat_vals)) != NC_NOERR) {      exerrval = status;      stat_vals = safe_free(stat_vals);      sprintf(errmsg,              "Error: failed to get %s status array from file id %d",              label, exoid);      ex_err("ex_put_all_var_param_ext",errmsg,exerrval);      return (NULL);    }  } else {    /* status array doesn't exist (V2.00), dummy one up for later checking */    int i;    for(i=0; i<var_count; i++)      stat_vals[i] = 1;  } return stat_vals;}void *safe_free(void *array){  if (array != 0) free(array);  return 0;}int put_truth_table(int exoid, int varid, int *table, const char *label){  int  iresult = 0;  char errmsg[MAX_ERR_LENGTH];    iresult = nc_put_var_int(exoid, varid, table);      if (iresult != NC_NOERR) {    exerrval = iresult;    sprintf(errmsg,            "Error: failed to store %s variable truth table in file id %d",            label, exoid);    ex_err("ex_put_all_var_param_ext",errmsg,exerrval);   }  return iresult;}int define_truth_table(ex_entity_type obj_type, int exoid, int num_ent, int num_var,                       int *var_tab, int *status_tab, int *ids, const char *label){  char errmsg[MAX_ERR_LENGTH];  int k = 0;  int i, j;  int time_dim;  int dims[2];  int varid;  int status;  nc_inq_dimid(exoid, DIM_TIME, &time_dim);  if (var_tab == NULL) {    exerrval = EX_NULLENTITY;    sprintf(errmsg,            "Error: %s variable truth table is NULL in file id %d", label, exoid);    ex_err("ex_put_all_var_param_ext",errmsg, exerrval);    return -1;  }    for (i=0; i<num_ent; i++) {    for (j=1; j<=num_var; j++) {            /* check if variables are to be put out for this block */      if (var_tab[k] != 0) {        if (status_tab[i] != 0) {/* only define variable if active */          dims[0] = time_dim;                          /* Determine number of entities in entity */          /* Need way to make this more generic... */          status = nc_inq_dimid(exoid, ex_dim_num_entries_in_object( obj_type, i+1 ), &dims[1]);          if (status != NC_NOERR) {            exerrval = status;            sprintf(errmsg,                    "Error: failed to locate number of entities in %s %d in file id %d",                    label, ids[i], exoid);            ex_err("ex_put_all_var_param_ext",errmsg,exerrval);            return status;          }                    /* define netCDF variable to store variable values;           * the j index cycles from 1 through the number of variables so            * that the index of the EXODUS II variable (which is part of            * the name of the netCDF variable) will begin at 1 instead of 0           */          status = nc_def_var(exoid, ex_name_var_of_object( obj_type, j, i+1 ),			      nc_flt_code(exoid), 2, dims, &varid);          if (status != NC_NOERR) {            if (status != NC_ENAMEINUSE) {              exerrval = status;              sprintf(errmsg,                      "Error: failed to define %s variable for %s %d in file id %d",                      label, label, ids[i], exoid);              ex_err("ex_put_all_var_param_ext",errmsg,exerrval);              return status;            }          }        }      }  /* if */      k++; /* increment truth table pointer */    }  /* for j */  }  /* for i */  return NC_NOERR;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -