1 /* --------------------------------------------------------------------------------------------- */
2 /* write2nas schreibt das frd-file aus einer struktur 20.03.1998 Wittig */
3 /* --------------------------------------------------------------------------------------------- */
4
5 #include <extUtil.h>
6
7
8
write2nas(char * datout,Summen * anz,Nodes * node,Elements * elem,Datasets * lcase)9 int write2nas(char *datout, Summen *anz, Nodes *node, Elements *elem, Datasets *lcase )
10 {
11 FILE *handle1, *handle2;
12 int i, lc;
13
14 /* Open the files and check to see that it was opened correctly */
15 i=strlen(datout);
16 strcpy (&datout[i], ".bdf");
17 handle1 = fopen (datout, "w+b");
18 if (handle1==NULL) { printf ("\nThe output file \"%s\" could not be opened.\n\n",
19 datout); return(-1);}
20 else printf (" file %s opened\n",datout);
21
22 strcpy (&datout[i], ".temp");
23 handle2 = fopen (datout, "w+b");
24 if (handle2==NULL) { printf ("\nThe output file \"%s\" could not be opened.\n\n",
25 datout); return(-1);}
26 else printf (" file %s opened\n",datout);
27
28
29 printf ("\n write nastran file \n");
30 for (i=0; i<anz->e; i++) if(elem[i].mat<1)
31 { printf(" ERROR: element:%d has no valid PID:%d, please use 'mata' to assign PIDs to sets.\n", elem[i].nr,elem[i].mat); return(0); }
32
33 for (i=0; i<anz->n; i++)
34 {
35
36 fprintf (handle1, "GRID* %-16d%-16d", node[i].nr, 0);
37 fprintf (handle1, "% 16.9e% 16.9e\n", node[node[i].nr].nx, node[node[i].nr].ny);
38 fprintf (handle1, "* % 16.9e%16d\n", node[node[i].nr].nz, node[node[i].nr].pflag);
39
40 /*
41 fprintf (handle1, "GRID %8d%8d", node[i].nr, 0);
42
43 betr= dabs(node[node[i].nr].nx)+1.e-1;
44 if (betr >= 100000.) fprintf (handle1, "%8e", node[node[i].nr].nx);
45 else if (betr >= 10000.) fprintf (handle1, "%8.1lf", node[node[i].nr].nx);
46 else if (betr >= 1000.) fprintf (handle1, "%8.2lf", node[node[i].nr].nx);
47 else if (betr >= 100.) fprintf (handle1, "%8.3lf", node[node[i].nr].nx);
48 else if (betr >= 10.) fprintf (handle1, "%8.4lf", node[node[i].nr].nx);
49 else fprintf (handle1, "%8.5lf", node[node[i].nr].nx);
50
51 betr= dabs(node[node[i].nr].ny)+1.e-1;
52 if (betr >= 100000.) fprintf (handle1, "%8e", node[node[i].nr].ny);
53 else if (betr >= 10000.) fprintf (handle1, "%8.1lf", node[node[i].nr].ny);
54 else if (betr >= 1000.) fprintf (handle1, "%8.2lf", node[node[i].nr].ny);
55 else if (betr >= 100.) fprintf (handle1, "%8.3lf", node[node[i].nr].ny);
56 else if (betr >= 10.) fprintf (handle1, "%8.4lf", node[node[i].nr].ny);
57 else fprintf (handle1, "%8.5f", node[node[i].nr].ny);
58
59 betr= dabs(node[node[i].nr].nz)+1.e-1;
60 if (betr >= 100000.) fprintf (handle1, "%8e", node[node[i].nr].nz);
61 else if (betr >= 10000.) fprintf (handle1, "%8.1lf", node[node[i].nr].nz);
62 else if (betr >= 1000.) fprintf (handle1, "%8.2lf", node[node[i].nr].nz);
63 else if (betr >= 100.) fprintf (handle1, "%8.3lf", node[node[i].nr].nz);
64 else if (betr >= 10.) fprintf (handle1, "%8.4lf", node[node[i].nr].nz);
65 else fprintf (handle1, "%8.5lf", node[node[i].nr].nz);
66
67 fprintf (handle1, "%8d\n", node[node[i].nr].pflag );
68 */
69 }
70
71 for (i=0; i<anz->e; i++)
72 {
73 if (elem[i].type == 1)
74 {
75 fprintf (handle1, "CHEXA %8d%-8d%-8d%-8d%-8d%-8d%-8d%-8d X%-6d\n",
76 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2],
77 elem[i].nod[3], elem[i].nod[4], elem[i].nod[5], elem[i].nr);
78 fprintf (handle1, "+X%-6d%-8d%-8d\n",
79 elem[i].nr, elem[i].nod[6], elem[i].nod[7]);
80 }
81 else if (elem[i].type == 3)
82 {
83 fprintf (handle1, "CTETRA %8d%-8d%-8d%-8d%-8d%-8d\n",
84 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2],
85 elem[i].nod[3]);
86 }
87 else if (elem[i].type == 4)
88 {
89 fprintf (handle1, "CHEXA %8d%-8d%-8d%-8d%-8d%-8d%-8d%-8d \n",
90 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2],
91 elem[i].nod[3], elem[i].nod[4], elem[i].nod[5]);
92 fprintf (handle1, " %-8d%-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",
93 elem[i].nod[6], elem[i].nod[7] , elem[i].nod[8], elem[i].nod[9],
94 elem[i].nod[10], elem[i].nod[11], elem[i].nod[12], elem[i].nod[13] );
95 fprintf (handle1, " %-8d%-8d%-8d%-8d%-8d%-8d\n",
96 elem[i].nod[14], elem[i].nod[15], elem[i].nod[16], elem[i].nod[17],
97 elem[i].nod[18], elem[i].nod[19] );
98 }
99 else if (elem[i].type == 6)
100 {
101 fprintf (handle1, "CTETRA %8d%-8d%-8d%-8d%-8d%-8d%-8d%-8d X%-6d\n",
102 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2],
103 elem[i].nod[3], elem[i].nod[4], elem[i].nod[5], elem[i].nr);
104 fprintf (handle1, "+X%-6d%-8d%-8d%-8d%-8d\n",
105 elem[i].nr, elem[i].nod[6], elem[i].nod[7], elem[i].nod[8], elem[i].nod[9]);
106 }
107 else if (elem[i].type == 7)
108 {
109 fprintf (handle1, "CTRIA3 %8d%-8d%-8d%-8d%-8d\n",
110 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2]);
111 }
112 else if (elem[i].type == 8)
113 {
114 fprintf (handle1, "CTRIA6 %8d%-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",
115 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2],
116 elem[i].nod[3], elem[i].nod[4], elem[i].nod[5]);
117 }
118 else if (elem[i].type == 9)
119 {
120 fprintf (handle1, "CQUAD4 %8d%-8d%-8d%-8d%-8d%-8d\n",
121 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2],
122 elem[i].nod[3]);
123 }
124 else if (elem[i].type == 10)
125 {
126 fprintf (handle1, "CQUAD8 %8d%-8d%-8d%-8d%-8d%-8d%-8d%-8d X%-6d\n",
127 elem[i].nr, elem[i].mat, elem[i].nod[0], elem[i].nod[1], elem[i].nod[2],
128 elem[i].nod[3], elem[i].nod[4], elem[i].nod[5], elem[i].nr);
129 fprintf (handle1, "+X%-6d%-8d%-8d\n",
130 elem[i].nr, elem[i].nod[6], elem[i].nod[7]);
131 }
132 else
133 {
134 printf (" elem(%d) not a known type (%d)\n", elem[i].nr, elem[i].type);
135 }
136 }
137
138 for (lc=0; lc<anz->l; lc++)
139 {
140 if (lcase[lc].ncomps == 1)
141 {
142 for (i=0; i<anz->n; i++)
143 {
144 fprintf (handle2, "TEMP %-8d%-8d%8.3f\n", lc+1, node[i].nr,
145 lcase[lc].dat[0][node[i].nr]);
146 }
147 }
148 }
149
150 fclose(handle1);
151 fclose(handle2);
152 return (1);
153 }
154
155