AcouSTO  version 2.0

◆ sphere()

int sphere ( struct geometry geom)

Sphere geometry generation.

Parameters
[in,out]geomgeometry structure
30  {
31  DOUBLE pi,invpi,mulrad;
32  DOUBLE phi,theta;
33  DOUBLE dphi,dtheta;
34  int i,j;
35  int inodb,ielmb,nelmb,ivbase;
36  struct sphere_geom* spheregeom;
37 
38  int i1,i2;
39 
40  logger(LOG_DEBUG," building sphere\n");
41  spheregeom = (struct sphere_geom*) geom->ptrgeom; // allocation
42  // utility vars
43  pi = 4.0*atanl(1.0);
44  invpi = 1.0/pi;
45  mulrad = pi/180.0;
46 
47  //steps
48  dphi = 180.0*mulrad/(spheregeom->rings);
49  dtheta = 360.0*mulrad/(spheregeom->segments);
50 
51  inodb=0;
52  phi = pi/2;
53  theta = 0.0;
54  /* building geometry */
55  for(j=0;j<(spheregeom->segments+1);j++){
56  phi = 0;
57  for(i=0;i<(spheregeom->rings+1);i++){
58  geometry->nodes[inodb + _g_inodb].x = spheregeom->radius * SIN(phi) * COS(theta);
59  geometry->nodes[inodb + _g_inodb].y = spheregeom->radius * SIN(phi) * SIN(theta);
60  geometry->nodes[inodb + _g_inodb].z = spheregeom->radius * COS(phi);
61 
62  phi += dphi;
63  inodb++;
64  }
65  theta += dtheta;
66  }
67 
68  /* building topology */
69  nelmb = (spheregeom->rings)*(spheregeom->segments);
70  ivbase=0;
71  for(ielmb=0;ielmb<nelmb;ielmb++){
72  i1 = (ielmb)/(spheregeom->rings);
73  i2 = i1+1;
74 
75  geometry->jnodb[ivbase+0 + _g_ielmb] = ielmb + i1 + 1;
76  geometry->jnodb[ivbase+1 + _g_ielmb] = ielmb + i1 + 1 + spheregeom->rings + 1;
77  geometry->jnodb[ivbase+2 + _g_ielmb] = ielmb + i1 + spheregeom->rings + 1;
78  geometry->jnodb[ivbase+3 + _g_ielmb] = ielmb + i1;
79 
80  ivbase +=4;
81  }
82 
83  geom_fill(geom); // filling geometry
84 
85  // adding to global vars
86  _g_icntr += geom->ncntr;
87  _g_inodb += geom->nnodb;
88  _g_ielmb += geom->nelmb;
89 
90 
91  logger(LOG_DEBUG," sphere built\n");
92  return 1;
93 
94 }
Sphere.
Definition: structs.h:198
int ncntr
Definition: structs.h:175
void * ptrgeom
Definition: structs.h:173
#define COS(x)
Definition: functions.h:53
void geom_fill(struct geometry *geom)
Definition: geom_utils.c:249
int nelmb
Definition: structs.h:179
int segments
Definition: structs.h:202
#define LOG_DEBUG
Definition: logger.h:27
double DOUBLE
Definition: types.h:44
#define SIN(x)
Definition: functions.h:52
int nnodb
Definition: structs.h:177
int rings
Definition: structs.h:204
DOUBLE radius
Definition: structs.h:200
int _g_inodb
Definition: globals.h:68
int _g_ielmb
Definition: globals.h:70
Geometry info structure.
Definition: structs.h:161
int _g_icntr
Definition: globals.h:69
void logger(int level, char *msg,...)
Definition: logger.c:56