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

📄 expcset.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    else if (set_type == EX_FACE_SET) {      elemptr = VAR_FACE_FS(set_id_ndx);      extraptr = VAR_ORNT_FS(set_id_ndx);      numdfptr = DIM_NUM_DF_FS(set_id_ndx);      factptr = VAR_FACT_FS(set_id_ndx);    }    else if (set_type == EX_SIDE_SET) {      elemptr = VAR_ELEM_SS(set_id_ndx);      extraptr = VAR_SIDE_SS(set_id_ndx);      numdfptr = DIM_NUM_DF_SS(set_id_ndx);      factptr = VAR_FACT_SS(set_id_ndx);    }    if (set_type == EX_ELEM_SET) {      elemptr = VAR_ELEM_ELS(set_id_ndx);      extraptr = NULL;      numdfptr = DIM_NUM_DF_ELS(set_id_ndx);      factptr = VAR_FACT_ELS(set_id_ndx);    }    /*  define dimension for number of entries per set */    if (num_entries_per_set[i] == 0) /* Is this a NULL set? */      continue; /* Do not create anything for NULL sets! */    if ((status = nc_def_dim(exoid, ex_dim_num_entries_in_object(set_type, set_id_ndx),			     num_entries_per_set[i], &dimid)) != NC_NOERR) {      if (status == NC_ENAMEINUSE) {	exerrval = status;	sprintf(errmsg,		"Error: %s entry count %d already defined in file id %d",		ex_name_of_object(set_type), set_ids[i],exoid);	ex_err("ex_put_concat_sets",errmsg,exerrval);      } else {	exerrval = status;	sprintf(errmsg,		"Error: failed to define number of entries for %s %d in file id %d",		ex_name_of_object(set_type), set_ids[i],exoid);	ex_err("ex_put_concat_sets",errmsg,exerrval);      }      goto error_ret;    }    /* create element list variable for set */    dims[0] = dimid;    if ((status = nc_def_var(exoid,elemptr,NC_INT,1,dims, &temp)) != NC_NOERR) {      if (status == NC_ENAMEINUSE) {	exerrval = status;	sprintf(errmsg,		"Error: element list already exists for %s %d in file id %d",		ex_name_of_object(set_type), set_ids[i],exoid);	ex_err("ex_put_concat_sets",errmsg,exerrval);      } else {	exerrval = status;	sprintf(errmsg,		"Error: failed to create element list for %s %d in file id %d",		ex_name_of_object(set_type), set_ids[i],exoid);	ex_err("ex_put_concat_sets",errmsg,exerrval);      }      goto error_ret;            /* exit define mode and return */    }    /* create extra list variable for set  (only for edge, face and side sets) */    if (extraptr) {      if ((status = nc_def_var(exoid,extraptr,NC_INT,1,dims, &temp)) != NC_NOERR) { 	if (status == NC_ENAMEINUSE) {	  exerrval = status;	  sprintf(errmsg,		  "Error: extra list already exists for %s %d in file id %d",		  ex_name_of_object(set_type), set_ids[i],exoid);	  ex_err("ex_put_concat_sets",errmsg,exerrval);	} else {	  exerrval = status;	  sprintf(errmsg,		  "Error: failed to create extra list for %s %d in file id %d",		  ex_name_of_object(set_type), set_ids[i],exoid);	  ex_err("ex_put_concat_sets",errmsg,exerrval);	}	goto error_ret;         /* exit define mode and return */      }    }    /*  define dimension for number of dist factors per set */    /*  NOTE: only define df count if the dist factors exist! */    if (num_dist_per_set[i] > 0) {            if (set_type == EX_NODE_SET) {	if (num_dist_per_set[i] != num_entries_per_set[i]) {	  exerrval = EX_FATAL;	  sprintf(errmsg,		  "Error: # dist fact (%d) not equal to # nodes (%d) in node set %d file id %d",		  num_dist_per_set[i], num_entries_per_set[i], set_ids[i],exoid);	  ex_err("ex_put_concat_sets",errmsg,exerrval);	  goto error_ret;          /* exit define mode and return */	}	/* resuse dimid from entry lists */      } else  {	if ((status = nc_def_dim(exoid, numdfptr,				 num_dist_per_set[i], &dimid)) != NC_NOERR) {	  if (status == NC_ENAMEINUSE) {	    exerrval = status;	    sprintf(errmsg,		    "Error: %s df count %d already defined in file id %d",		    ex_name_of_object(set_type), set_ids[i],exoid);	    ex_err("ex_put_concat_sets",errmsg,exerrval);	  } else {	    exerrval = status;	    sprintf(errmsg,		    "Error: failed to define %s df count for set %d in file id %d",		    ex_name_of_object(set_type), set_ids[i],exoid);	    ex_err("ex_put_concat_sets",errmsg,exerrval);	  }	  goto error_ret;	}      }      /* create distribution factor list variable for set */      dims[0] = dimid;      if ((status = nc_def_var(exoid, factptr, nc_flt_code(exoid), 1, dims, &temp)) != NC_NOERR) {	if (status == NC_ENAMEINUSE) {	  exerrval = status;	  sprintf(errmsg,		  "Error: dist factor list already exists for %s %d in file id %d",		  ex_name_of_object(set_type), set_ids[i],exoid);	  ex_err("ex_put_concat_sets",errmsg,exerrval);	} else {	  exerrval = status;	  sprintf(errmsg,		  "Error: failed to create dist factor list for %s %d in file id %d",		  ex_name_of_object(set_type), set_ids[i],exoid);	  ex_err("ex_put_concat_sets",errmsg,exerrval);	}	goto error_ret;            /* exit define mode and return */      }    } /* end define dist factors */  }  /* leave define mode  */  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_concat_sets",errmsg,exerrval);    return (EX_FATAL);  }  /* Next, fill out set ids array */  /* first get id of set ids array variable */  if ((status = nc_inq_varid(exoid, idsptr, &varid)) != NC_NOERR) {    exerrval = status;    sprintf(errmsg,	    "Error: failed to locate %s ids array in file id %d",	    ex_name_of_object(set_type), exoid);    ex_err("ex_put_concat_sets",errmsg,exerrval);    return (EX_FATAL);  }  /* then, write out set id list */  status = nc_put_var_int(exoid, varid, set_ids);  if (status != NC_NOERR) {    exerrval = status;    sprintf(errmsg,	    "Error: failed to store %s id array in file id %d",	    ex_name_of_object(set_type), exoid);    ex_err("ex_put_concat_sets",errmsg,exerrval);    return (EX_FATAL);  }  /* If the sets_entry_index is passed in as a NULL pointer, then   *  the user only wants us to define the sets and not populate   *  the data structures.   */  if (sets_entry_index == 0)    return(EX_NOERR);    /* Now, use ExodusII call to store sets */  for (i=0; i<num_sets; i++) {      if (num_entries_per_set[i] == 0) /* Is this a NULL set? */	continue; /* Do not create anything for NULL sets! */      /* set extra list */      if (set_type == EX_EDGE_SET || set_type == EX_FACE_SET ||	  set_type == EX_SIDE_SET)	extra_list = &(sets_extra_list[sets_entry_index[i]]);      else	extra_list = NULL;      if (ex_put_set(exoid, set_type, set_ids[i], 		     &(sets_entry_list[sets_entry_index[i]]),		     extra_list) == -1)	return(EX_FATAL); /* error will be reported by subroutine */      if (ex_comp_ws(exoid) == sizeof(float)) {	flt_dist_fact = sets_dist_fact;	if (num_dist_per_set[i] > 0) {     /* store dist factors if required */	  if (ex_put_set_dist_fact(exoid, set_type, set_ids[i],				   &(flt_dist_fact[sets_dist_index[i]])) == -1) {	      sprintf(errmsg,		      "Error: failed to store %s %d dist factors for file id %d",		      ex_name_of_object(set_type), set_ids[i],exoid);	      /* use error val from exodusII routine */	      ex_err("ex_put_concat_sets",errmsg,exerrval);	      return (EX_FATAL);	    }	}      } else if (ex_comp_ws(exoid) == sizeof(double)) {	dbl_dist_fact = sets_dist_fact;	if (num_dist_per_set[i] > 0) {             /* only store if they exist */	  if (ex_put_set_dist_fact(exoid, set_type, set_ids[i],				   &(dbl_dist_fact[sets_dist_index[i]])) == -1) {	    sprintf(errmsg,		    "Error: failed to store %s %d dist factors for file id %d",		    ex_name_of_object(set_type), set_ids[i],exoid);	    /* use error val from exodusII routine */	    ex_err("ex_put_concat_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_sets", errmsg, exerrval);	return (EX_FATAL);      }  }  return(EX_NOERR);  /* Fatal error: exit definition mode and return */ error_ret:  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_concat_sets",errmsg,exerrval);    }  return (EX_FATAL);}

⌨️ 快捷键说明

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