202{
203
204 int * PTRPO_TMP = new int [*NSPMD + 1];
205 try {
206
207
208
209 H3D_ID elem_id ;
210 H3D_ID RigidElem ;
211 int i,j,
n,p,nsn,nsn_loc,ptr;
212
213
214 char RBODYPOOL[] = "Rbody";
217
218 char RIGIDPOOL[] = "Rigid";
221
222 unsigned int *conn;
223 double *coef;
224 int *dof;
225 unsigned int elem_count = 1;
226
227 for(i=0;i<*NSPMD + 1;i++)
228 {
229 PTRPO_TMP[i] = PTRPO[i];
230 }
231
232 if(*COMPID_RBODIES != 0 && *NRBYKIN != 0)
233 {
235 H3D_ELEM_CONFIG_RIGIDLINK, *COMPID_RBODIES,
237 for(i=0;i<*NRBYKIN;i++)
238 {
239 elem_id = ID_RBY[i];
240 RigidElem = MASTERND[i] + 1 ;
241 nsn = 0;
242
243 for(p=0;p<*NSPMD;p++)
244 {
245 ptr = PTRPO_TMP[p];
246 if(ptr < PTRPOO[p+1])
247 {
248 if(PORBY[ptr-1] == i+1)
249 {
250 nsn = nsn + PORBY[ptr];
251 ptr = ptr + 2 ;
252 PTRPO_TMP[p]=PTRPO_TMP[p] + nsn + 2;
253 }
254 }
255 }
256
257 conn =(unsigned int *)malloc(nsn*sizeof(unsigned int));
258 coef =(double *)malloc(nsn*sizeof(double));
259 dof =(int *)malloc(nsn*sizeof(int));
260
261 for(
n=0;
n < nsn ;
n++){coef[
n] = 0.0; dof[
n]=0; conn[
n]=0;}
262 unsigned int conn1[1];
263
264 double coef1[1] = {1.0};
265
266 int dof1[1] = {6};
267 conn1[0] = RigidElem;
268 j = 0;
269
270 for(p=0;p<*NSPMD;p++)
271 {
272 ptr = PTRPO[p];
273 if(ptr < PTRPOO[p+1])
274 {
275 if(PORBY[ptr - 1] == i+1)
276 {
277 nsn_loc = PORBY[ptr];
278 ptr = ptr + 2 ;
279 for(
n=0;
n<nsn_loc;
n++)
280 {
281 conn[j] = PORBY[ptr+
n-1] + 1;
282
283 j++;
284 }
285 PTRPO[p]=PTRPO[p] + nsn + 2;
286 }
287 }
288
289 }
290
294
295 free(conn);
296 free(coef);
297 free(dof);
298
299 }
302 }
303 else
304 {
305
306 for(i=0;i<*NRBYKIN;i++)
307 {
308 elem_id = ID_RBY[i];
309 RigidElem = MASTERND[i] + 1 ;
310 nsn = 0;
311
312 for(p=0;p<*NSPMD;p++)
313 {
314 ptr = PTRPO_TMP[p];
315 if(ptr < PTRPOO[p+1])
316 {
317 if(PORBY[ptr-1] == i+1)
318 {
319 nsn = nsn + PORBY[ptr];
320 ptr = ptr + 2 ;
321 PTRPO_TMP[p]=PTRPO_TMP[p] + nsn + 2;
322 }
323 }
324
325 }
326
327
328 conn =(unsigned int *)malloc(nsn*sizeof(unsigned int));
329 coef =(double *)malloc(nsn*sizeof(double));
330 dof =(int *)malloc(nsn*sizeof(int));
331
332 for(
n=0;
n < nsn ;
n++){coef[
n] = 0.0; dof[
n]=0; conn[
n]=0;}
333 unsigned int conn1[1];
334
335 double coef1[1] = {1.0};
336
337 int dof1[1] = {6};
338 conn1[0] = RigidElem;
339 j = 0;
340
341 for(p=0;p<*NSPMD;p++)
342 {
343 ptr = PTRPO[p];
344 if(ptr < PTRPOO[p+1])
345 {
346 if(PORBY[ptr - 1] == i+1)
347 {
348 nsn_loc = PORBY[ptr];
349 ptr = ptr + 2 ;
350 for(
n=0;
n<nsn_loc;
n++)
351 {
352 conn[j] = PORBY[ptr+
n-1] + 1;
353
354 j++;
355 }
356 PTRPO[p]=PTRPO[p] + nsn + 2;
357 }
358 }
359
360 }
361
362
363
365 H3D_ELEM_CONFIG_RIGIDLINK, elem_id,
372
373 free(conn);
374 free(coef);
375 free(dof);
376
377 }
378 }
379
380 }
381
382 catch(...) {
384 }
385 delete [] PTRPO_TMP;
386
387}