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
						
					
					
				
			
		
		
	
	
							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);
 | 
						|
}
 | 
						|
 |