22 static bool fg_element_error_stop =
true;
28 static void set_conv_mat(
cconv_mat &m,
double o[],
double rot[]) {
40 if (
id <= 0)
return 0;
42 vector<CNFDB_405 *>::iterator iter;
44 for (iter = neu.DB_405.begin(); iter != neu.DB_405.end(); iter++) {
45 if ((*iter)->ID ==
id)
return *iter;
61 set_conv_mat(a, coord->
origin, coord->
rot);
63 switch (coord->
type) {
105 hec.
DB.push_back(header);
113 if (neu.DB_403.size() == 0)
return;
121 vector<CNFDB_403 *>::iterator iter;
123 for (iter = neu.DB_403.begin(); iter != neu.DB_403.end(); iter++) {
126 if (n->define_sys != coord_id) {
127 coord_id = n->define_sys;
129 if (!set_conv_mat(neu, coord_id, m))
134 m.
convert(n->x, n->y, n->z, nitem.
x, nitem.
y, nitem.
z);
139 hec.
DB.push_back(node);
140 fprintf(stdout,
"%d nodes converted\n", node_n);
150 vector<CHECDataBlock *>::iterator iter;
152 for (iter = hec.
DB.begin(); iter != hec.
DB.end(); iter++) {
164 static int line_elem_type(
CNFDB_404 *e) {
190 (fg ? 2 : 3), e->
type);
216 (fg ? 3 : 6), e->
type);
220 static int quad_elem_type(
CNFDB_404 *e) {
242 (fg ? 4 : 8), e->
type);
246 static int tetra_elem_type(
CNFDB_404 *e) {
256 static int wedge_elem_type(
CNFDB_404 *e) {
266 static int brick_elem_type(
CNFDB_404 *e) {
278 static int get_hec_elem_option(
CNFDB_404 *e,
int hec_type) {
296 const int con_table[12][20] = {
310 {0, 1, 2, 3, 4, 5, 6, 7},
315 {0, 1, 2, 4, 9, 10, 8, 12, 13, 14},
321 {0, 1, 2, 4, 5, 6, 9, 10, 8, 17, 18, 16, 12, 13, 14},
326 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
327 10, 11, 16, 17, 18, 19, 12, 13, 14, 15},
328 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
329 10, 11, 16, 17, 18, 19, 12, 13, 14, 15}
332 int ignored_count = 0;
334 if (neu.DB_404.size() == 0)
return;
337 vector<CNFDB_404 *>::iterator iter;
339 for (iter = neu.DB_404.begin(); iter != neu.DB_404.end(); iter++) {
353 hec_type = line_elem_type(e);
359 hec_type = line_elem_type(e);
365 hec_type = tri_elem_type(e);
371 hec_type = tri_elem_type(e);
377 hec_type = quad_elem_type(e);
383 hec_type = quad_elem_type(e);
389 hec_type = tetra_elem_type(e);
395 hec_type = tetra_elem_type(e);
401 hec_type = wedge_elem_type(e);
407 hec_type = wedge_elem_type(e);
413 hec_type = brick_elem_type(e);
419 hec_type = brick_elem_type(e);
424 fprintf(stderr,
"##Warning: Non-supported element type is found.\n");
428 option = get_hec_elem_option(e, hec_type);
431 if (fg_element_error_stop)
throw emsg;
433 fprintf(stdout,
"%s --- ignored!!\n", emsg.
Msg());
439 if (!hec_e || hec_e->
type != hec_type || hec_e->
sec_id != sec_id ||
440 hec_e->
option != option) {
441 hec_e = search_element(hec, hec_type, sec_id, option);
445 hec_e->
type = hec_type;
448 hec.
DB.push_back(hec_e);
454 for (
int i = 0; i < nn; i++) {
455 eitem.node[i] = e->
node[con_table[con][i]];
461 fprintf(stdout,
"%d/%d elements converted\n", elem_count - ignored_count,
534 if (neu.DB_601.size() == 0)
return;
537 vector<CNFDB_601 *>::iterator iter;
539 for (iter = neu.DB_601.begin(); iter != neu.DB_601.end(); iter++) {
546 set_material_static(hec_m, m);
550 set_material_heat(hec_m, m);
557 hec.
DB.push_back(hec_m);
561 fprintf(stdout,
"%d materials converted\n", mat_n);
570 static bool exist_elem_sec(
CHECData &hec,
int sec_id) {
571 vector<CHECDataBlock *>::iterator iter;
573 for (iter = hec.
DB.begin(); iter != hec.
DB.end(); iter++) {
577 if (e->
sec_id == sec_id)
return true;
586 static int exist_elem_sec_opt(
CHECData &hec,
int sec_id,
int option) {
588 vector<CHECDataBlock *>::iterator iter;
590 for (iter = hec.
DB.begin(); iter != hec.
DB.end(); iter++) {
594 if (e->
sec_id == sec_id) {
607 if (neu.DB_402.size() == 0)
return;
609 vector<CNFDB_402 *>::iterator iter;
611 for (iter = neu.DB_402.begin(); iter != neu.DB_402.end(); iter++) {
616 bool fg_nothing =
false;
639 if (!exist_elem_sec(hec, p->
ID)) {
653 if (!exist_elem_sec(hec, p->
ID)) {
664 "##Warning: Non used material-property ID:%d is eliminated\n",
669 hec.
DB.push_back(sec);
702 static void GenerateEGroupForSection(
CHECData &hec) {
703 vector<eg_rec_t> eg_list;
704 vector<eg_rec_t>::iterator egi;
706 vector<CHECDataBlock *>::iterator iter;
708 for (iter = hec.
DB.begin(); iter != hec.
DB.end(); iter++) {
713 if (e->
ElemList.size() == 0)
continue;
715 for (egi = eg_list.begin(); egi != eg_list.end(); egi++) {
716 if (egi->sec_id == e->
sec_id)
break;
719 if (egi != eg_list.end()) {
728 set<CHECDB_Element::CElemItem>::iterator ei;
735 for (egi = eg_list.begin(); egi != eg_list.end(); egi++) {
736 hec.
DB.push_back(egi->eg);
745 if (neu.DB_507.size() == 0)
return;
748 vector<CNFDB_507 *>::iterator iter;
750 for (iter = neu.DB_507.begin(); iter != neu.DB_507.end(); iter++) {
757 hec.
DB.push_back(zero);
763 zero->
zero = -273.16;
764 hec.
DB.push_back(zero);
776 SetElement(neu, hec);
777 SetMaterial(neu, hec);
778 SetSection(neu, hec);
780 GenerateEGroupForSection(hec);