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