AcouSTO  version 2.0

◆ cylinder()

cylinder ( struct geometry geom)

Cylinder geometry generation.

Parameters
[in,out]geomgeometry structure
31  {
32  DOUBLE start_rad, end_rad, radius, dr; // gp mod
33  DOUBLE pi,invpi,mulrad;
34  DOUBLE theta;
35  DOUBLE dtheta;
36  int i,j;
37  int inodb,ielmb,nelmb,ivbase;
38  struct cylinder_geom* cylgeom;
39  DOUBLE l,dl;
40 
41  int i1,i2;
42 
43  logger(LOG_DEBUG,"building cylinder\n");
44  cylgeom = (struct cylinder_geom*) geom->ptrgeom; // allocation
45  start_rad = cylgeom->start_radius; // gp mod
46  end_rad = cylgeom->end_radius; // gp mod
47 
48  // utility vars
49  pi = 4.0*atanl(1.0);
50  invpi = 1.0/pi;
51  mulrad = pi/180.0;
52 
53  // steps
54  dl = cylgeom->length/(cylgeom->rings);
55  dtheta = 360.0*mulrad/(cylgeom->segments);
56  dr = (end_rad-start_rad)/(cylgeom->rings +1); // gp mod
57 
58  inodb=0;
59  // l = cylgeom->length/2; // gp ???
60  theta = 0.0;
61  l = 0.0;
62  radius = start_rad;
63  /* building geometry */
64 
65 /* for(j=0;j<(cylgeom->segments+1);j++){
66  l = 0;
67  for(i=0;i<(cylgeom->rings+1);i++){
68  geometry->nodes[inodb + _g_inodb].x = COS(theta);
69  geometry->nodes[inodb + _g_inodb].y = SIN(theta);
70  geometry->nodes[inodb + _g_inodb].z = l;
71 
72  l += dl;
73  inodb++;
74  }
75  theta += dtheta;
76  }
77 */ //old version
78 
79  for(j=0;j<(cylgeom->rings +1);j++){
80  for(i=0;i<(cylgeom->segments +1);i++){
81  geometry->nodes[inodb + _g_inodb].x = radius*COS(theta);
82  geometry->nodes[inodb + _g_inodb].y = radius*SIN(theta);
83  geometry->nodes[inodb + _g_inodb].z = l;
84  theta += dtheta;
85  inodb++;
86  }
87  l += dl;
88  radius += dr;
89  }
90 
91  /* building topology */
92  nelmb = (cylgeom->rings)*(cylgeom->segments);
93  ivbase=0;
94 
95  /*for(ielmb=0;ielmb<nelmb;ielmb++){
96  i1 = (ielmb)/(cylgeom->rings);
97  i2 = i1+1;
98 
99  geometry->jnodb[ivbase+0 + _g_ielmb] = ielmb + i1 + 1;
100  geometry->jnodb[ivbase+1 + _g_ielmb] = ielmb + i1 + 1 + cylgeom->rings + 1;
101  geometry->jnodb[ivbase+2 + _g_ielmb] = ielmb + i1 + cylgeom->rings + 1;
102  geometry->jnodb[ivbase+3 + _g_ielmb] = ielmb + i1;
103 
104  ivbase +=4;
105  }
106 */ // OLD VERSION
107 
108  for(ielmb=0;ielmb<nelmb;ielmb++){
109  i1 = (ielmb)/(cylgeom->segments);
110  //i2 = i1+1;
111  geometry->jnodb[ivbase+0 + _g_ielmb] = ielmb + i1 + cylgeom->segments + 1;
112  geometry->jnodb[ivbase+1 + _g_ielmb] = ielmb + i1;
113  geometry->jnodb[ivbase+2 + _g_ielmb] = ielmb + i1 + 1;
114  geometry->jnodb[ivbase+3 + _g_ielmb] = ielmb + i1 + 1 + cylgeom->segments + 1;
115 
116  ivbase +=4;
117  }
118 
119  geom_fill(geom); // filling geometry
120 
121  // adding to global vars
122  _g_icntr += geom->ncntr;
123  _g_inodb += geom->nnodb;
124  _g_ielmb += geom->nelmb;
125 
126  logger(LOG_DEBUG,"cylinder built\n");
127 
128  return 1;
129 
130 }
DOUBLE start_radius
Definition: structs.h:212
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
DOUBLE end_radius
Definition: structs.h:214
int nelmb
Definition: structs.h:179
int rings
Definition: structs.h:218
#define LOG_DEBUG
Definition: logger.h:27
double DOUBLE
Definition: types.h:44
int segments
Definition: structs.h:216
#define SIN(x)
Definition: functions.h:52
int nnodb
Definition: structs.h:177
int _g_inodb
Definition: globals.h:68
DOUBLE length
Definition: structs.h:220
Cylinder.
Definition: structs.h:210
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