Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

125 lines
3.6 KiB

/*
* Copyright(C) 1999-2020, 2023 National Technology & Engineering Solutions
* of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
* NTESS, the U.S. Government retains certain rights in this software.
*
* See packages/seacas/LICENSE for details
*/
#include "defs.h" // for FALSE, TRUE
#include "smalloc.h" // for smalloc
#include <stdio.h> // for printf, fclose, fscanf, EOF, etc
int input_geom(FILE *fingeom, /* geometry input file */
char *geomname, /* name of geometry file */
int nvtxs, /* number of coordinates to read */
int *igeom, /* dimensionality of geometry */
float **x, float **y, float **z /* coordinates of vertices */
)
{
extern int CHECK_INPUT; /* print any warning messages? */
extern int DEBUG_INPUT; /* echo that read was successful? */
extern int DEBUG_TRACE; /* trace main execution path */
float xc, yc, zc; /* first x, y, z coordinate */
int nread; /* number of lines of coordinates read */
int flag; /* any bad data at end of file? */
int line_num; /* counts input lines in file */
int end_flag; /* return conditional */
int ndims; /* number of values in an input line */
int i = 0; /* loop counter */
if (DEBUG_TRACE > 0) {
printf("<Entering input_geom>\n");
}
*x = *y = *z = NULL;
line_num = 0;
end_flag = 1;
while (end_flag == 1) {
xc = read_val(fingeom, &end_flag);
++line_num;
}
if (end_flag == -1) {
printf("No values found in geometry file `%s'\n", geomname);
fclose(fingeom);
return (1);
}
ndims = 1;
yc = read_val(fingeom, &end_flag);
if (end_flag == 0) {
ndims = 2;
zc = read_val(fingeom, &end_flag);
if (end_flag == 0) {
ndims = 3;
read_val(fingeom, &end_flag);
if (!end_flag) {
printf("Too many values on input line of geometry file `%s'\n", geomname);
printf(" Maximum dimensionality is 3\n");
fclose(fingeom);
return (1);
}
}
}
*igeom = ndims;
*x = smalloc(nvtxs * sizeof(float));
(*x)[0] = xc;
if (ndims > 1) {
*y = smalloc(nvtxs * sizeof(float));
(*y)[0] = yc;
}
if (ndims > 2) {
*z = smalloc(nvtxs * sizeof(float));
(*z)[0] = zc;
}
for (nread = 1; nread < nvtxs; nread++) {
++line_num;
if (ndims == 1) {
i = fscanf(fingeom, "%f", &((*x)[nread]));
}
else if (ndims == 2) {
i = fscanf(fingeom, "%f%f", &((*x)[nread]), &((*y)[nread]));
}
else if (ndims == 3) {
i = fscanf(fingeom, "%f%f%f", &((*x)[nread]), &((*y)[nread]), &((*z)[nread]));
}
if (i == EOF) {
printf("Too few lines of values in geometry file; nvtxs=%d, but only %d read\n", nvtxs,
nread + 1);
fclose(fingeom);
return (1);
}
if (i != ndims) {
printf("Wrong number of values in line %d of geometry file `%s'\n", line_num, geomname);
fclose(fingeom);
return (1);
}
}
/* Check for spurious extra stuff in file. */
flag = FALSE;
end_flag = 0;
while (!flag && end_flag != -1) {
read_val(fingeom, &end_flag);
if (!end_flag) {
flag = TRUE;
}
}
if (flag && CHECK_INPUT) {
printf("Warning: possible error in geometry file `%s'\n", geomname);
printf(" Numerical data found after expected end of file\n");
}
fclose(fingeom);
if (DEBUG_INPUT > 0) {
printf("Finished reading geometry file `%s'; dimension = %d.\n", geomname, ndims);
}
return (0);
}