AcouSTO  version 2.0

◆ read_sphere()

int read_sphere ( int  igeom,
const char *  geoname,
struct sphere_geom sphere 
)
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, "Sphere\n");
29 
30  sprintf(varname, "%s.radius", geoname); CONFIG_GET_FLOAT(config, varname, sphere->radius);
31  sprintf(varname, "%s.segments", geoname); CONFIG_GET_INT(config, varname, sphere->segments);
32  sprintf(varname, "%s.rings", geoname); CONFIG_GET_INT(config, varname, sphere->rings);
33 
34  geometries[igeom].type = SPHERE;
35  geometries[igeom].ptrgeom = (void*) sphere;
36  geometries[igeom].nelmb = (sphere->segments) * (sphere->rings);
37  geometries[igeom].nnodb = (sphere->segments + 1) * (sphere->rings + 1);
38  sprintf(varname, "%s.ncntr", geoname);
39  CONFIG_GET_INT(config, varname, geometries[igeom].ncntr);
40  if (0 == geometries[igeom].ncntr) {
41  if (0 == runinfo->ksymmi) {
42  geometries[igeom].ncntr = geometries[igeom].nelmb;
43  } else {
44  geometries[igeom].ncntr = (int) (geometries[igeom].nelmb / (runinfo->nsymm));
45  }
46  } else {
47  rchk = geometries[igeom].nelmb / geometries[igeom].ncntr;
48  mchk = geometries[igeom].nelmb % geometries[igeom].ncntr;
49  if (rchk != runinfo->nsymm)
50  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);
51  if (mchk != 0)
52  logger(LOG_ERROR, "Number of elements is not a multiple integer of ncntr: nelmb(mod)ncntr=%d \n", mchk);
53  if ((rchk != runinfo->nsymm) || (mchk != 0)) {
54  return -1;
55  }
56  }
57  logger(LOG_DEBUG, "------------------------\n");
58  logger(LOG_DEBUG, " sphere\n");
59  logger(LOG_DEBUG, "------------------------\n");
60  logger(LOG_DEBUG, " - radius = %f\n", sphere->radius);
61  logger(LOG_DEBUG, " - rings = %d\n", sphere->rings);
62  logger(LOG_DEBUG, " - segments = %d\n", sphere->segments);
63 
64  return 0;
65 
66 }
#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
int ncntr
Definition: structs.h:175
void * ptrgeom
Definition: structs.h:173
#define LOG_ERROR
Definition: logger.h:24
int nelmb
Definition: structs.h:179
struct config_t config
Definition: config.h:61
int segments
Definition: structs.h:202
#define LOG_DEBUG
Definition: logger.h:27
int type
Definition: structs.h:171
int nsymm
Definition: structs.h:97
int ksymmi
Definition: structs.h:91
#define SPHERE
Definition: config.h:54
int nnodb
Definition: structs.h:177
int rings
Definition: structs.h:204
DOUBLE radius
Definition: structs.h:200
#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