OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
set_surface_lines.cpp File Reference
#include <iostream>
#include <iterator>
#include <tuple>
#include <vector>
#include <algorithm>

Go to the source code of this file.

Macros

#define _FCALL
#define STUPL   tuple < int,int,int,int,int,int >
#define LTUPL   tuple < int,int,int,int >

Functions

STUPL create_surface_member (int n1, int n2, int n3, int n4, int eltype, int elid)
LTUPL create_line_member (int n1, int n2, int eltype, int elid)
int comp (int a, int b)
int tupl_compare (STUPL lhs, STUPL rhs)
int tupl_compare_surf (STUPL lhs, STUPL rhs)
int ltupl_compare (LTUPL lhs, LTUPL rhs)
void print_surface ()
void print_line ()
void union_surface_ (int *s1_nd1, int *s1_nd2, int *s1_nd3, int *s1_nd4, int *s1_eltyp, int *s1_elid, int *s1_nmemb, int *s2_nd1, int *s2_nd2, int *s2_nd3, int *s2_nd4, int *s2_eltyp, int *s2_elid, int *s2_nmemb, int *nmember)
void delete_surface_ (int *s1_nd1, int *s1_nd2, int *s1_nd3, int *s1_nd4, int *s1_eltyp, int *s1_elid, int *s1_nmemb, int *s2_nd1, int *s2_nd2, int *s2_nd3, int *s2_nd4, int *s2_eltyp, int *s2_elid, int *s2_nmemb, int *nmember)
void intersect_surface_ (int *s1_nd1, int *s1_nd2, int *s1_nd3, int *s1_nd4, int *s1_eltyp, int *s1_elid, int *s1_nmemb, int *s2_nd1, int *s2_nd2, int *s2_nd3, int *s2_nd4, int *s2_eltyp, int *s2_elid, int *s2_nmemb, int *nmember)
void surf_remove_duplicates_ (int *s1_nd1, int *s1_nd2, int *s1_nd3, int *s1_nd4, int *s1_eltyp, int *s1_elid, int *size, int *new_size)
void _FCALL union_line_ (int *s1_nd1, int *s1_nd2, int *s1_eltyp, int *s1_elid, int *s1_nmemb, int *s2_nd1, int *s2_nd2, int *s2_eltyp, int *s2_elid, int *s2_nmemb, int *nmember)
void _FCALL delete_line_ (int *s1_nd1, int *s1_nd2, int *s1_eltyp, int *s1_elid, int *s1_nmemb, int *s2_nd1, int *s2_nd2, int *s2_eltyp, int *s2_elid, int *s2_nmemb, int *nmember)
void _FCALL intersect_line_ (int *s1_nd1, int *s1_nd2, int *s1_eltyp, int *s1_elid, int *s1_nmemb, int *s2_nd1, int *s2_nd2, int *s2_eltyp, int *s2_elid, int *s2_nmemb, int *nmember)
void line_remove_duplicates_ (int *l1_nd1, int *l1_nd2, int *l1_eltyp, int *l1_elid, int *size, int *new_size)
void _FCALL get_merged_surface_ (int *s_nd1, int *s_nd2, int *s_nd3, int *s_nd4, int *s_eltyp, int *s_elid)
void _FCALL get_merged_lines_ (int *s_nd1, int *s_nd2, int *s_eltyp, int *s_elid)

Variables

vector< STUPLsurface
vector< LTUPLlines

Macro Definition Documentation

◆ _FCALL

#define _FCALL

Definition at line 29 of file set_surface_lines.cpp.

◆ LTUPL

#define LTUPL   tuple < int,int,int,int >

Definition at line 70 of file set_surface_lines.cpp.

◆ STUPL

#define STUPL   tuple < int,int,int,int,int,int >

Definition at line 60 of file set_surface_lines.cpp.

Function Documentation

◆ comp()

int comp ( int a,
int b )

Definition at line 102 of file set_surface_lines.cpp.

103{
104 int res;
105 if (a==b) res=0;
106 if (a > b) res=1;
107 if (a < b) res=-1;
108
109 return res;
110}

◆ create_line_member()

LTUPL create_line_member ( int n1,
int n2,
int eltype,
int elid )

Definition at line 87 of file set_surface_lines.cpp.

87 {
88 LTUPL new_member = make_tuple ( n1,n2,eltype,elid);
89 return new_member;
90}
#define LTUPL

◆ create_surface_member()

STUPL create_surface_member ( int n1,
int n2,
int n3,
int n4,
int eltype,
int elid )

Definition at line 79 of file set_surface_lines.cpp.

79 {
80 STUPL new_member = make_tuple ( n1,n2,n3,n4,eltype,elid);
81 return new_member;
82}
#define STUPL

◆ delete_line_()

void _FCALL delete_line_ ( int * s1_nd1,
int * s1_nd2,
int * s1_eltyp,
int * s1_elid,
int * s1_nmemb,
int * s2_nd1,
int * s2_nd2,
int * s2_eltyp,
int * s2_elid,
int * s2_nmemb,
int * nmember )

Definition at line 571 of file set_surface_lines.cpp.

574{
575 bool iterator;
576 int i1, i2;
577
578 iterator = true;
579 i1 = 0;
580 i2 = 0;
581
582 while (iterator == true ){
583 if (i1 == (*s1_nmemb) ) { // surface 1 is terminated - terminated
584 * nmember = lines.size();
585 return;
586 }
587
588 if (i2 == (*s2_nmemb) ) {
589 for (int j=i1; j< * s1_nmemb; j++){
590 LTUPL member = create_line_member (s1_nd1[j],s1_nd2[j],s1_eltyp[j],s1_elid[j] );
591 lines.push_back(member);
592 }
593 * nmember = lines.size();
594 return;
595 }
596
597 LTUPL member1 = create_line_member (s1_nd1[i1],s1_nd2[i1],s1_eltyp[i1],s1_elid[i1] );
598 LTUPL member2 = create_line_member (s2_nd1[i2],s2_nd2[i2],s2_eltyp[i2],s2_elid[i2] );
599
600 int res = ltupl_compare( member1, member2 );
601 if (res == 1) { i2++ ; }
602 else if (res == -1) { lines.push_back(member1); i1++; }
603 else { i1++; i2++; } // lines are same - don't keep the line
604
605 }
606
607}
vector< LTUPL > lines
LTUPL create_line_member(int n1, int n2, int eltype, int elid)
int ltupl_compare(LTUPL lhs, LTUPL rhs)

◆ delete_surface_()

void delete_surface_ ( int * s1_nd1,
int * s1_nd2,
int * s1_nd3,
int * s1_nd4,
int * s1_eltyp,
int * s1_elid,
int * s1_nmemb,
int * s2_nd1,
int * s2_nd2,
int * s2_nd3,
int * s2_nd4,
int * s2_eltyp,
int * s2_elid,
int * s2_nmemb,
int * nmember )

Definition at line 348 of file set_surface_lines.cpp.

351{
352 bool iterator;
353 int i1, i2;
354
355 iterator = true;
356 i1 = 0;
357 i2 = 0;
358
359 while (iterator == true ){
360
361 if (i1 == (*s1_nmemb) ) { // surface 1 is terminated - terminated
362 * nmember = surface.size();
363 return;
364 }
365
366 if (i2 == (*s2_nmemb) ) { // surface 2 is terminated - terminate with all surface 1 elements
367 for (int j=i1; j< * s1_nmemb; j++){
368 STUPL member = create_surface_member (s1_nd1[j],s1_nd2[j],s1_nd3[j],s1_nd4[j],s1_eltyp[j],s1_elid[j] );
369 surface.push_back(member);
370 }
371 * nmember = surface.size();
372 return;
373 }
374
375 STUPL member1 = create_surface_member (s1_nd1[i1],s1_nd2[i1],s1_nd3[i1],s1_nd4[i1],s1_eltyp[i1],s1_elid[i1] );
376 STUPL member2 = create_surface_member (s2_nd1[i2],s2_nd2[i2],s2_nd3[i2],s2_nd4[i2],s2_eltyp[i2],s2_elid[i2] );
377
378 int res = tupl_compare_surf( member1, member2 );
379 if (res == 1) { i2++ ; }
380 else if (res == -1) { surface.push_back(member1); i1++; }
381 else { i1++; i2++; } // Surfaces are identic - don't keep the surface
382
383 }
384
385}
STUPL create_surface_member(int n1, int n2, int n3, int n4, int eltype, int elid)
vector< STUPL > surface
int tupl_compare_surf(STUPL lhs, STUPL rhs)

◆ get_merged_lines_()

void _FCALL get_merged_lines_ ( int * s_nd1,
int * s_nd2,
int * s_eltyp,
int * s_elid )

Definition at line 732 of file set_surface_lines.cpp.

733{
734 int i=0;
735 for (auto mem = lines.begin(); mem != lines.end(); mem++){
736 LTUPL member = *mem;
737 s_nd1[i] = get<0>(member);
738 s_nd2[i] = get<1>(member);
739 s_eltyp[i] = get<2>(member);
740 s_elid[i] = get<3>(member);
741 i++;
742 }
743 // erase the Surface after get back the results
744 std::vector<LTUPL>().swap(lines);
745}

◆ get_merged_surface_()

void _FCALL get_merged_surface_ ( int * s_nd1,
int * s_nd2,
int * s_nd3,
int * s_nd4,
int * s_eltyp,
int * s_elid )

Definition at line 707 of file set_surface_lines.cpp.

708{
709 int i=0;
710 for (auto mem = surface.begin(); mem != surface.end(); mem++){
711 STUPL member = *mem;
712 s_nd1[i] = get<0>(member);
713 s_nd2[i] = get<1>(member);
714 s_nd3[i] = get<2>(member);
715 s_nd4[i] = get<3>(member);
716 s_eltyp[i] = get<4>(member);
717 s_elid[i] = get<5>(member);
718 i++;
719 }
720 // erase the Surface after get back the results
721 std::vector<STUPL>().swap(surface);
722}

◆ intersect_line_()

void _FCALL intersect_line_ ( int * s1_nd1,
int * s1_nd2,
int * s1_eltyp,
int * s1_elid,
int * s1_nmemb,
int * s2_nd1,
int * s2_nd2,
int * s2_eltyp,
int * s2_elid,
int * s2_nmemb,
int * nmember )

Definition at line 631 of file set_surface_lines.cpp.

634{
635 bool iterator;
636 int i1, i2;
637
638 iterator = true;
639 i1 = 0;
640 i2 = 0;
641
642 while (iterator == true ){
643 if (i1 == (*s1_nmemb) ) {
644 * nmember = lines.size();
645 return;
646 }
647
648 if (i2 == (*s2_nmemb) ) {
649 * nmember = lines.size();
650 return;
651 }
652
653 LTUPL member1 = create_line_member (s1_nd1[i1],s1_nd2[i1],s1_eltyp[i1],s1_elid[i1] );
654 LTUPL member2 = create_line_member (s2_nd1[i2],s2_nd2[i2],s2_eltyp[i2],s2_elid[i2] );
655
656 int res = ltupl_compare( member1, member2 );
657 if (res == 1) { i2++ ; }
658 else if (res == -1) { i1++; }
659 else { lines.push_back(member1); i1++; i2++; } // lines are same - keep member1
660
661 }
662
663}

◆ intersect_surface_()

void intersect_surface_ ( int * s1_nd1,
int * s1_nd2,
int * s1_nd3,
int * s1_nd4,
int * s1_eltyp,
int * s1_elid,
int * s1_nmemb,
int * s2_nd1,
int * s2_nd2,
int * s2_nd3,
int * s2_nd4,
int * s2_eltyp,
int * s2_elid,
int * s2_nmemb,
int * nmember )

Definition at line 411 of file set_surface_lines.cpp.

414{
415 bool iterator;
416 int i1, i2;
417
418 iterator = true;
419 i1 = 0;
420 i2 = 0;
421
422 while (iterator == true ){
423
424 if (i1 == (*s1_nmemb) ) { // surface 1 is terminated - terminated
425 * nmember = surface.size();
426 return;
427 }
428
429 if (i2 == (*s2_nmemb) ) { // surface 2 is terminated - terminated
430 * nmember = surface.size();
431 return;
432 }
433
434 STUPL member1 = create_surface_member (s1_nd1[i1],s1_nd2[i1],s1_nd3[i1],s1_nd4[i1],s1_eltyp[i1],s1_elid[i1] );
435 STUPL member2 = create_surface_member (s2_nd1[i2],s2_nd2[i2],s2_nd3[i2],s2_nd4[i2],s2_eltyp[i2],s2_elid[i2] );
436
437 int res = tupl_compare_surf( member1, member2 );
438 if (res == 1) { i2++ ; }
439 else if (res == -1) { i1++ ; }
440 else { surface.push_back(member1); i1++; i2++; } // Surfaces are same - keep the surface
441
442 }
443
444}

◆ line_remove_duplicates_()

void line_remove_duplicates_ ( int * l1_nd1,
int * l1_nd2,
int * l1_eltyp,
int * l1_elid,
int * size,
int * new_size )

Definition at line 675 of file set_surface_lines.cpp.

676{
677 int sz=1 ;
678 int i=1;
679
680 while (i< *size) {
681
682 LTUPL member1 = create_line_member (l1_nd1[i],l1_nd2[i],l1_eltyp[i],l1_elid[i] );
683 LTUPL member2 = create_line_member (l1_nd1[i-1],l1_nd2[i-1],l1_eltyp[i-1],l1_elid[i-1] );
684 int res = ltupl_compare( member1, member2 );
685 if ( res != 0) {
686 l1_nd1[sz] = l1_nd1[i];
687 l1_nd2[sz] = l1_nd2[i];
688 l1_eltyp[sz] = l1_eltyp[i];
689 l1_elid[sz] = l1_elid[i];
690 sz++;
691 }
692 i++;
693}
694 *new_size = sz;
695 return;
696}

◆ ltupl_compare()

int ltupl_compare ( LTUPL lhs,
LTUPL rhs )

Definition at line 198 of file set_surface_lines.cpp.

198 {
199
200 int res;
201 int a,b;
202
203// Compare first node
204 a=get<0>(lhs);
205 b=get<0>(rhs);
206
207 res = comp ( a, b);
208 if (res != 0) return res;
209
210// Compare second node
211 a=get<1>(lhs);
212 b=get<1>(rhs);
213 res = comp ( a, b);
214 if (res != 0) return res;
215
216// Compare element ID
217 a=get<3>(lhs);
218 b=get<3>(rhs);
219 res = comp ( a, b);
220 return res;
221}
int comp(int a, int b)

◆ print_line()

void print_line ( )

Definition at line 242 of file set_surface_lines.cpp.

243{
244 cout << "Number of members= " << lines.size() << endl;
245 int i=0;
246 for (auto mem = lines.begin(); mem != lines.end(); mem++){
247 LTUPL member = *mem;
248 i++;
249 cout << i << " -- nodes : " << get<0>(member) << " , " << get<1>(member) << " -- eltyp :" << get<2>(member) << " -- elid :" << get<3>(member) << endl;
250 }
251
252}

◆ print_surface()

void print_surface ( )

Definition at line 226 of file set_surface_lines.cpp.

227{
228 cout << "Number of members= " << surface.size() << endl;
229 int i=0;
230 for (auto mem = surface.begin(); mem != surface.end(); mem++){
231 STUPL member = *mem;
232 i++;
233 cout << i << " -- nodes : " << get<0>(member) << " , " << get<1>(member) << " , " << get<2>(member) << " , " << get<3>(member) <<
234 " -- eltyp :" << get<4>(member) << " -- elid :" << get<5>(member) << endl;
235 }
236
237}

◆ surf_remove_duplicates_()

void surf_remove_duplicates_ ( int * s1_nd1,
int * s1_nd2,
int * s1_nd3,
int * s1_nd4,
int * s1_eltyp,
int * s1_elid,
int * size,
int * new_size )

Definition at line 457 of file set_surface_lines.cpp.

458{
459 int sz=1 ;
460 int i=1;
461
462 while (i< *size) {
463
464 STUPL member1 = create_surface_member (s1_nd1[i],s1_nd2[i],s1_nd3[i],s1_nd4[i],s1_eltyp[i],s1_elid[i] );
465 STUPL member2 = create_surface_member (s1_nd1[i-1],s1_nd2[i-1],s1_nd3[i-1],s1_nd4[i-1],s1_eltyp[i-1],s1_elid[i-1] );
466 int res = tupl_compare_surf( member1, member2 );
467 if ( res != 0) {
468 s1_nd1[sz] = s1_nd1[i];
469 s1_nd2[sz] = s1_nd2[i];
470 s1_nd3[sz] = s1_nd3[i];
471 s1_nd4[sz] = s1_nd4[i];
472 s1_eltyp[sz] = s1_eltyp[i];
473 s1_elid[sz] = s1_elid[i];
474 sz++;
475 }
476 i++;
477}
478
479 *new_size = sz;
480 return;
481
482}

◆ tupl_compare()

int tupl_compare ( STUPL lhs,
STUPL rhs )

Definition at line 124 of file set_surface_lines.cpp.

124 {
125
126 int res;
127 int a,b;
128
129 a=get<5>(lhs);
130 b=get<5>(rhs);
131
132 res = comp ( a, b);
133 return res;
134}

◆ tupl_compare_surf()

int tupl_compare_surf ( STUPL lhs,
STUPL rhs )

Definition at line 149 of file set_surface_lines.cpp.

149 {
150
151 int res;
152 int a,b;
153
154 a=get<0>(lhs); // first node
155 b=get<0>(rhs);
156
157 res = comp ( a, b);
158 if (res != 0) return res;
159
160 a=get<1>(lhs); // 2nd node
161 b=get<1>(rhs);
162
163 res = comp ( a, b);
164 if (res != 0) return res;
165
166 a=get<2>(lhs); // 3rd node
167 b=get<2>(rhs);
168
169 res = comp ( a, b);
170 if (res != 0) return res;
171
172 a=get<3>(lhs); // 4th node
173 b=get<3>(rhs);
174
175 res = comp ( a, b);
176 if (res != 0) return res;
177
178 a=get<5>(lhs); // eltID
179 b=get<5>(rhs);
180
181 res = comp ( a, b);
182
183 return res;
184}

◆ union_line_()

void _FCALL union_line_ ( int * s1_nd1,
int * s1_nd2,
int * s1_eltyp,
int * s1_elid,
int * s1_nmemb,
int * s2_nd1,
int * s2_nd2,
int * s2_eltyp,
int * s2_elid,
int * s2_nmemb,
int * nmember )

Definition at line 507 of file set_surface_lines.cpp.

510{
511 bool iterator;
512 int i1, i2;
513
514 iterator = true;
515 i1 = 0;
516 i2 = 0;
517
518 while (iterator == true ){
519 if (i1 == (*s1_nmemb) ) {
520 for (int j=i2; j< *s2_nmemb; j++){
521 LTUPL member = create_line_member (s2_nd1[j],s2_nd2[j],s2_eltyp[j],s2_elid[j] );
522 lines.push_back(member);
523 }
524 * nmember = lines.size();
525 return;
526 }
527
528 if (i2 == (*s2_nmemb) ) {
529 for (int j=i1; j< * s1_nmemb; j++){
530 LTUPL member = create_line_member (s1_nd1[j],s1_nd2[j],s1_eltyp[j],s1_elid[j] );
531 lines.push_back(member);
532 }
533 * nmember = lines.size();
534 return;
535 }
536
537 LTUPL member1 = create_line_member (s1_nd1[i1],s1_nd2[i1],s1_eltyp[i1],s1_elid[i1] );
538 LTUPL member2 = create_line_member (s2_nd1[i2],s2_nd2[i2],s2_eltyp[i2],s2_elid[i2] );
539
540 int res = ltupl_compare( member1, member2 );
541 if (res == 1) { lines.push_back(member2); i2++ ; }
542 else if (res == -1) { lines.push_back(member1); i1++; }
543 else { lines.push_back(member1); i1++; i2++; }
544
545 }
546
547}

◆ union_surface_()

void union_surface_ ( int * s1_nd1,
int * s1_nd2,
int * s1_nd3,
int * s1_nd4,
int * s1_eltyp,
int * s1_elid,
int * s1_nmemb,
int * s2_nd1,
int * s2_nd2,
int * s2_nd3,
int * s2_nd4,
int * s2_eltyp,
int * s2_elid,
int * s2_nmemb,
int * nmember )

Definition at line 282 of file set_surface_lines.cpp.

285{
286 bool iterator;
287 int i1, i2;
288
289 iterator = true;
290 i1 = 0;
291 i2 = 0;
292
293 while (iterator == true ){
294 if (i1 == (*s1_nmemb) ) {
295 for (int j=i2; j< *s2_nmemb; j++){
296 STUPL member = create_surface_member (s2_nd1[j],s2_nd2[j],s2_nd3[j],s2_nd4[j],s2_eltyp[j],s2_elid[j] );
297 surface.push_back(member);
298 }
299 * nmember = surface.size();
300 return;
301 }
302
303 if (i2 == (*s2_nmemb) ) {
304 for (int j=i1; j< * s1_nmemb; j++){
305 STUPL member = create_surface_member (s1_nd1[j],s1_nd2[j],s1_nd3[j],s1_nd4[j],s1_eltyp[j],s1_elid[j] );
306 surface.push_back(member);
307 }
308 * nmember = surface.size();
309 return;
310 }
311
312 STUPL member1 = create_surface_member (s1_nd1[i1],s1_nd2[i1],s1_nd3[i1],s1_nd4[i1],s1_eltyp[i1],s1_elid[i1] );
313 STUPL member2 = create_surface_member (s2_nd1[i2],s2_nd2[i2],s2_nd3[i2],s2_nd4[i2],s2_eltyp[i2],s2_elid[i2] );
314
315 int res = tupl_compare_surf( member1, member2 );
316 if (res == 1) { surface.push_back(member2); i2++ ; }
317 else if (res == -1) { surface.push_back(member1); i1++; }
318 else { surface.push_back(member1); i1++; i2++; }
319
320 }
321
322}

Variable Documentation

◆ lines

vector< LTUPL > lines

Definition at line 71 of file set_surface_lines.cpp.

◆ surface

vector< STUPL > surface

Definition at line 61 of file set_surface_lines.cpp.