AcouSTO  version 2.0

◆ read_cylinder()

int read_cylinder ( int  igeom,
const char *  geoname,
struct cylinder_geom cylinder 
)
22  {
23  int ltmp;
24  double dtmp;
25  char varname[MAX_PATH]; // temp var to read dynamic geometry &configuration
26  int rchk, mchk;
27 
28  logger(LOG_DEBUG, "Cylinder\n");
29  cylinder = malloc(sizeof(struct cylinder_geom));
30  sprintf(varname, "%s.start_radius", geoname); CONFIG_GET_FLOAT(config, varname, cylinder->start_radius); // gp mod
31  sprintf(varname, "%s.end_radius", geoname); CONFIG_GET_FLOAT(config, varname, cylinder->end_radius); // gp mod
32  sprintf(varname, "%s.rings", geoname); CONFIG_GET_INT(config, varname, cylinder->rings);
33  sprintf(varname, "%s.segments", geoname); CONFIG_GET_INT(config, varname, cylinder->segments);
34  sprintf(varname, "%s.length", geoname); CONFIG_GET_FLOAT(config, varname, cylinder->length);
35 
36  geometries[igeom].type = CYLINDER;
37  geometries[igeom].ptrgeom = (void*) cylinder;
38  geometries[igeom].nelmb = (cylinder->segments) * (cylinder->rings);
39  geometries[igeom].nnodb = (cylinder->segments + 1) * (cylinder->rings + 1);
40  sprintf(varname, "%s.ncntr", geoname); CONFIG_GET_INT(config, varname, geometries[igeom].ncntr);
41  if (0 == geometries[igeom].ncntr) {
42  if (0 == runinfo->ksymmi) {
43  geometries[igeom].ncntr = geometries[igeom].nelmb;
44  } else {
45  geometries[igeom].ncntr = (int) (geometries[igeom].nelmb / (runinfo->nsymm));
46  }
47  } else {
48  rchk = geometries[igeom].nelmb / geometries[igeom].ncntr;
49  mchk = geometries[igeom].nelmb % geometries[igeom].ncntr;
50  if (rchk != runinfo->nsymm)
51  logger(LOG_ERROR, "Number of elements and centers not consistent with symmetry level required: nelmb=%d, ncntr=%d, nsymm=%d \n", geometries[igeom].nelmb, geometries[igeom].ncntr, runinfo->nsymm);
52  if (mchk != 0)
53  logger(LOG_ERROR, "Number of elements is not a multiple integer of ncntr: nelmb(mod)ncntr=%d \n", mchk);
54  if ((rchk != runinfo->nsymm) || (mchk != 0)) {
55  return -1;
56  }
57  }
58 
59  logger(LOG_DEBUG, "------------------------\n");
60  logger(LOG_DEBUG, " cylinder\n");
61  logger(LOG_DEBUG, "------------------------\n");
62  logger(LOG_DEBUG, " - first radius = %f\n", cylinder->start_radius); // gp mod
63  logger(LOG_DEBUG, " - last radius = %f\n", cylinder->end_radius); // gp mod
64  logger(LOG_DEBUG, " - length = %f\n", cylinder->length);
65  logger(LOG_DEBUG, " - rings = %d\n", cylinder->rings);
66  logger(LOG_DEBUG, " - segments = %d\n", cylinder->segments);
67 
68 
69  return 0;
70 
71 
72 }
#define CONFIG_GET_INT(config, name, var)
Definition: config.h:47
struct geometry * geometries
Definition: globals.h:66
struct run_info * runinfo
Definition: globals.h:34
DOUBLE start_radius
Definition: structs.h:212
#define CYLINDER
Definition: config.h:55
int ncntr
Definition: structs.h:175
void * ptrgeom
Definition: structs.h:173
#define LOG_ERROR
Definition: logger.h:24
DOUBLE end_radius
Definition: structs.h:214
int nelmb
Definition: structs.h:179
struct config_t config
Definition: config.h:61
int rings
Definition: structs.h:218
#define LOG_DEBUG
Definition: logger.h:27
int type
Definition: structs.h:171
#define malloc(size)
Definition: allocation.h:38
int nsymm
Definition: structs.h:97
int ksymmi
Definition: structs.h:91
int segments
Definition: structs.h:216
int nnodb
Definition: structs.h:177
DOUBLE length
Definition: structs.h:220
Cylinder.
Definition: structs.h:210
#define MAX_PATH
Definition: constants.h:29
#define CONFIG_GET_FLOAT(config, name, var)
Definition: config.h:44
void logger(int level, char *msg,...)
Definition: logger.c:56