1 /***********************************************************************
2 *
3 * ***** *** ***
4 * * * * * *
5 * * *** ***
6 * * * * * *
7 * ***** *** ***
8 *
9 * A FREE Finite Elements Analysis Program in ANSI C for the Windows OS.
10 *
11 * Composed and edited and copyright by
12 * Professor Dr.-Ing. Frank Rieg, University of Bayreuth, Germany
13 *
14 * eMail:
15 * frank.rieg@uni-bayreuth.de
16 * dr.frank.rieg@t-online.de
17 *
18 * V15.0 November 18, 2015
19 *
20 * This program is free software; you can redistribute it and/or modify
21 * it under the terms of the GNU General Public License as published by
22 * the Free Software Foundation; either version 2, or (at your option)
23 * any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 * GNU General Public License for more details.
29 *
30 * You should have received a copy of the GNU General Public License
31 * along with this program; see the file COPYING. If not, write to
32 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
33 ***********************************************************************/
34 /***********************************************************************
35 * Diese Compilerunit umfasst:
36 * wrim88r gibt Texte aus (1 FR_INT4)
37 * wtya88j gibt Elementtypen aus (1 FR_INT4, 1 FR_INT4) : Z88A
38 * wtyp88j gibt Elementtypen aus (1 FR_INT4, 1 FR_INT4) : Z88BR
39 * wfor88i gibt kfoun beim Sortieren aus (1 FR_INT4, 1 FR_INT4)
40 * wran88j gibt Randbedingungen aus (1 FR_INT4, 1 FR_INT4)
41 * wtyd88j gibt Elementtypen aus (1 FR_INT4, 1 FR_INT4) : Z88DR
42 * wtye88j gibt Elementtypen aus (1 FR_INT4, 1 FR_INT4) : Z88ER
43 * 10.8.2011 Rieg
44 ***********************************************************************/
45
46 /***********************************************************************
47 * Fuer Windows
48 ***********************************************************************/
49 #ifdef FR_WIN
50 #include <z88r.h>
51 #include <windows.h>
52 #include <string.h> /* strlen */
53 #include <stdio.h> /* sprintf */
54 #include <stdlib.h> /* ltoa */
55 #endif
56
57 /***********************************************************************
58 * Formate
59 ***********************************************************************/
60 #ifdef FR_XINT
61 #define PD "%d"
62 #define PD9 "%9d"
63 #endif
64
65 #ifdef FR_XLONG
66 #define PD "%ld"
67 #define PD9 "%9ld"
68 #endif
69
70 #ifdef FR_XLOLO
71 #define PD "%lld"
72 #define PD9 "%9lld"
73 #endif
74
75 #ifdef FR_XDOUB
76 #define PG "%lg"
77 #endif
78
79 #ifdef FR_XQUAD
80 #define PG "%Lg"
81 #endif
82
83 /***********************************************************************
84 * hier beginnt Function wrim88r
85 ***********************************************************************/
wrim88r(FR_INT4 i,int iatx)86 int wrim88r(FR_INT4 i,int iatx)
87 {
88 extern HDC hDC;
89 extern FR_DOUBLE rpalpha,rpomega;
90 extern FR_INT4 LANG,isflag;
91
92 size_t laenge;
93
94 int j;
95
96 char cline[80];
97
98 switch(iatx)
99 {
100
101 case TX_IFNILI0:
102 if(LANG == 1) sprintf(cline,"Z88R= Berechnung +");
103 if(LANG == 2) sprintf(cline,"Z88R= computation +");
104 laenge= strlen(cline);
105 TextOut(hDC,70,30,cline,laenge);
106 break;
107
108 case TX_IFNILI9:
109 if(LANG == 1) sprintf(cline,"= Testmode +");
110 if(LANG == 2) sprintf(cline,"= test mode +");
111 laenge= strlen(cline);
112 TextOut(hDC,70,30,cline,laenge);
113 break;
114
115 case TX_ICFLAG0:
116 if(LANG == 1) sprintf(cline,"Cholesky-Solver");
117 if(LANG == 2) sprintf(cline,"Cholesky Solver");
118 laenge= strlen(cline);
119 TextOut(hDC,235,30,cline,laenge);
120 break;
121
122 case TX_ICFLAG1:
123 if(LANG == 1) sprintf(cline,"SICCG-Solver");
124 if(LANG == 2) sprintf(cline,"SICCG Solver");
125 laenge= strlen(cline);
126 TextOut(hDC,235,30,cline,laenge);
127 break;
128
129 case TX_ICFLAG2:
130 if(LANG == 1) sprintf(cline,"SORCG-Solver");
131 if(LANG == 2) sprintf(cline,"SORCG Solver");
132 laenge= strlen(cline);
133 TextOut(hDC,235,30,cline,laenge);
134 break;
135
136 case TX_REAI1:
137 if(LANG == 1) TextOut(hDC,10,70,"Z88I1.TXT einlesen :",20);
138 if(LANG == 2) TextOut(hDC,10,70,"Reading Z88I1.TXT : ",20);
139 break;
140
141 case TX_REAINT:
142 if(LANG == 1) TextOut(hDC,10,70,"Z88INT.TXT einlesen:",20);
143 if(LANG == 2) TextOut(hDC,10,70,"Reading Z88INT.TXT: ",20);
144 break;
145
146 case TX_REAELP:
147 if(LANG == 1) TextOut(hDC,10,70,"Z88ELP.TXT einlesen:",20);
148 if(LANG == 2) TextOut(hDC,10,70,"Reading Z88ELP.TXT: ",20);
149 break;
150
151 case TX_REAMAT:
152 if(LANG == 1) TextOut(hDC,10,70,"Z88MAT.TXT einlesen:",20);
153 if(LANG == 2) TextOut(hDC,10,70,"Reading Z88MAT.TXT: ",20);
154 break;
155
156 case TX_REAMAN:
157 if(LANG == 1) TextOut(hDC,10,70,"Z88MAN.TXT einlesen:",20);
158 if(LANG == 2) TextOut(hDC,10,70,"Reading Z88MAN.TXT: ",20);
159 break;
160
161 case TX_KOOR:
162 if(LANG == 1) TextOut(hDC,290,70,"Koordinaten einlesen",20);
163 if(LANG == 2) TextOut(hDC,290,70,"Reading coordinates ",20);
164 break;
165
166 case TX_POLAR:
167 if(LANG == 1) TextOut(hDC,290,70,"Polar/Zylinder-Koordinaten",26);
168 if(LANG == 2) TextOut(hDC,290,70,"Polar/cylinder coordinates",26);
169 break;
170
171 case TX_KOIN:
172 if(LANG == 1) TextOut(hDC,10,70,"Koinzidenz einlesen",19);
173 if(LANG == 2) TextOut(hDC,10,70,"Reading element infos",21);
174 break;
175
176 case TX_Z88A:
177 TextOut(hDC,10,90,">>> Start Z88A: Pass 1 <<<",26);
178 break;
179
180 case TX_Z88AI:
181 TextOut(hDC,10,90,">>> Start Z88AI: Pass 1 <<<",27);
182 break;
183
184 case TX_SUMMEMY:
185 if(LANG == 1) sprintf(cline,"Programm hat " PD " MB statisch angefordert", i);
186 if(LANG == 2) sprintf(cline,"Program allocated " PD " MB statically",i);
187 laenge= strlen(cline);
188 TextOut(hDC,10,110,cline,laenge);
189 break;
190
191 case TX_DYNMEMY:
192 if(LANG == 1) sprintf(cline,"Programm hat " PD " MB dynamischen Speicher angefordert", i);
193 if(LANG == 2) sprintf(cline,"program allocated " PD " MB dynamic memory",i);
194 laenge= strlen(cline);
195 TextOut(hDC,10,130,cline,laenge);
196 break;
197
198 case TX_GSSO:
199 if(LANG == 1) sprintf(cline,">>> Alle Pointer assembliert <<<");
200 if(LANG == 2) sprintf(cline,">>> All pointers assembled <<<");
201 laenge= strlen(cline);
202 for(j= 1; j <= 10; j++)
203 TextOut(hDC,10,170,cline,laenge);
204 break;
205
206 case TX_WRIO0:
207 if(LANG == 1) TextOut(hDC,290,170,"Z88O0.TXT beschreiben ",23);
208 if(LANG == 2) TextOut(hDC,290,170,"Writing Z88O0.TXT ",23);
209 break;
210
211 case TX_GSERF:
212 if(LANG == 1) sprintf(cline,"GS erfordert " PD " Elemente",i);
213 if(LANG == 2) sprintf(cline,"GS needs " PD " elements",i);
214 laenge= strlen(cline);
215 TextOut(hDC,10,190,cline,laenge);
216 break;
217
218 case TX_KOIERF:
219 if(LANG == 1) sprintf(cline,"KOI erfordert " PD " Elemente",i);
220 if(LANG == 2) sprintf(cline,"KOI needs " PD " elements",i);
221 laenge= strlen(cline);
222 TextOut(hDC,290,190,cline,laenge);
223 break;
224
225 case TX_Z88B:
226 TextOut(hDC,10,210,">>> Start Z88BR: Pass 2 <<<",27);
227 break;
228
229 case TX_REAI5:
230 if(LANG == 1) TextOut(hDC,290,230,"Lastvektoren berechnen",22);
231 if(LANG == 2) TextOut(hDC,290,230,"Computing Load Vectors",22);
232 break;
233
234 case TX_Z88CC:
235 TextOut(hDC,10,250,">>> Start Z88CR: Pass 3 <<<",27);
236 break;
237
238 case TX_REAI2:
239 if(LANG == 1) TextOut(hDC,290,270,"Lesen RB-File Z88I2.TXT",23);
240 if(LANG == 2) TextOut(hDC,290,270,"Reading BC file Z88I2.TXT",25);
241 break;
242
243 case TX_REAI2P2:
244 if(LANG == 1) TextOut(hDC,290,270,"Lesen RB-File Z88I2.TXT",23);
245 if(LANG == 2) TextOut(hDC,290,270,"Reading BC file Z88I2.TXT",25);
246 break;
247
248 case TX_ERBPA:
249 if(LANG == 1) sprintf(cline,"Einarbeiten der Randbed. Pass " PD,i);
250 if(LANG == 2) sprintf(cline,"Incorporating constraints pass " PD,i);
251 laenge= strlen(cline);
252 TextOut(hDC,10,290,cline,laenge);
253 break;
254
255 case TX_WRIO1:
256 if(LANG == 1) TextOut(hDC,10,310,"Z88O1.TXT beschreiben",21);
257 if(LANG == 2) TextOut(hDC,10,310,"Writing Z88O1.TXT ",21);
258 break;
259
260 case TX_SCAL88:
261 TextOut(hDC,290,310,"Start SCAL88",12);
262 break;
263
264
265 case TX_CHOY88:
266 if(LANG == 1) TextOut(hDC,10,330,"Start des Cholesky-Solvers",26);
267 if(LANG == 2) TextOut(hDC,10,330,"Start of Cholesky Solver",24);
268 break;
269
270 case TX_NFG:
271 if(LANG == 1) sprintf(cline,PD " x " PD " = Groesse Gleichungsystem",i,i);
272 if(LANG == 2) sprintf(cline,PD " x " PD " = size of system of equations",i,i);
273 laenge= strlen(cline);
274 TextOut(hDC,10,350,cline,laenge);
275 break;
276
277 case TX_CHOJ:
278 ltoa(i,cline,10);
279 laenge= strlen(cline);
280 TextOut(hDC,360,350,cline,laenge);
281 break;
282
283 case TX_SICCG88:
284 if(LANG == 1) TextOut(hDC,10,330,">>> Start des Solvers SICCG <<<",31);
285 if(LANG == 2) TextOut(hDC,10,330,">>> Start of Solver SICCG <<<",29);
286 break;
287
288 case TX_SORCG88:
289 if(LANG == 1) TextOut(hDC,10,330,">>> Start des Solvers SORCG <<<",31);
290 if(LANG == 2) TextOut(hDC,10,330,">>> Start of Solver SORCG <<<",29);
291 break;
292
293 case TX_PART88:
294 if(LANG == 1) sprintf(cline,"par. Cholesky-Zerl. Nr." PD,i);
295 if(LANG == 2) sprintf(cline,"inc. Cholesky deco. no." PD,i);
296 laenge= strlen(cline);
297 TextOut(hDC,360,330,cline,laenge);
298 break;
299
300 case TX_ITERA:
301 sprintf(cline,PD " Iteration",i);
302 laenge= strlen(cline);
303 TextOut(hDC,10,370,cline,laenge);
304 break;
305
306 case TX_JACOOK:
307 if(LANG == 1) sprintf(cline,"Residuenvektor < Eps, schaut gut aus!");
308 if(LANG == 2) sprintf(cline,"Limit Eps reached, sounds good!");
309 laenge= strlen(cline);
310 TextOut(hDC,10,390,cline,laenge);
311 break;
312
313 case TX_JACONOTOK:
314 if(LANG == 1) sprintf(cline,"Maxit erreicht, aber Eps nicht erreicht-leider!");
315 if(LANG == 2) sprintf(cline,"Maxit reached but Eps not reached-sorry!");
316 laenge= strlen(cline);
317 TextOut(hDC,10,390,cline,laenge);
318 break;
319
320 case TX_WRIO2:
321 if(LANG == 1) TextOut(hDC,10,410,"Z88O2.TXT beschreiben",21);
322 if(LANG == 2) TextOut(hDC,10,410,"Writing Z88O2.TXT",18);
323 break;
324
325 case TX_SPANNU:
326 TextOut(hDC,10,430,">>> Start Z88DR: Pass 4 <<<",27);
327 if(LANG == 1 && isflag == 0) strcpy(cline,"Spannungen berechnen und schreiben, keine V-Spannungen");
328 if(LANG == 2 && isflag == 0) strcpy(cline,"Computing and Writing Stresses, no reduced Stresses");
329 if(LANG == 1 && isflag == 1) strcpy(cline,"Spannungen berechnen und schreiben, GEH V-Spannungen");
330 if(LANG == 2 && isflag == 1) strcpy(cline,"Computing and Writing Stresses, v.Mises Stresses");
331 if(LANG == 1 && isflag == 2) strcpy(cline,"Spannungen berechnen und schreiben, NH V-Spannungen");
332 if(LANG == 2 && isflag == 2) strcpy(cline,"Computing and Writing Stresses, Principal Stresses");
333 if(LANG == 1 && isflag == 3) strcpy(cline,"Spannungen berechnen und schreiben, SH V-Spannungen");
334 if(LANG == 2 && isflag == 3) strcpy(cline,"Computing and Writing Stresses, Tresca Stresses");
335 laenge= strlen(cline);
336 TextOut(hDC,10,450,cline,laenge);
337 break;
338
339 case TX_KNOTENK:
340 TextOut(hDC,10,490,">>> Start Z88ER: Pass 5 <<<",27);
341 if(LANG == 1) TextOut(hDC,10,510,"Kraefte berechnen und schreiben :",33);
342 if(LANG == 2) TextOut(hDC,10,510,"Computing & Writing Nodal Forces:",33);
343 break;
344
345 }
346
347 return(0);
348 }
349
350 /***********************************************************************
351 * function wtya88j gibt Elementtypen in Z88A aus
352 ***********************************************************************/
wtya88j(FR_INT4 k,FR_INT4 i)353 int wtya88j(FR_INT4 k,FR_INT4 i)
354 {
355 extern HDC hDC;
356 extern FR_INT4 LANG;
357
358 size_t laenge;
359
360 char cline[80];
361
362 if(LANG == 1) sprintf(cline,"Formatieren: Nr. " PD " Typ " PD,k,i);
363 if(LANG == 2) sprintf(cline,"formatting: no. " PD " type " PD,k,i);
364 laenge= strlen(cline);
365 TextOut(hDC,290,90,cline,laenge);
366
367 return(0);
368 }
369
370 /***********************************************************************
371 * function wtyp88j gibt Elementtypen in Z88BR aus
372 ***********************************************************************/
wtyp88j(FR_INT4 k,FR_INT4 i)373 int wtyp88j(FR_INT4 k,FR_INT4 i)
374 {
375 extern HDC hDC;
376 extern FR_INT4 LANG;
377
378 size_t laenge;
379
380 char cline[80];
381
382 if(LANG == 1) sprintf(cline,"Compilation: Nr. " PD " Typ " PD,k,i);
383 if(LANG == 2) sprintf(cline,"compilation: no. " PD " type " PD,k,i);
384 laenge= strlen(cline);
385 TextOut(hDC,290,210,cline,laenge);
386
387 return(0);
388 }
389
390 /***********************************************************************
391 * function wfor88i gibt kfoun beim Sortieren in Z88A1 aus
392 ***********************************************************************/
wfor88i(FR_INT4 k,FR_INT4 i)393 int wfor88i(FR_INT4 k,FR_INT4 i)
394 {
395 extern HDC hDC;
396 extern FR_INT4 LANG;
397
398 size_t laenge;
399
400 char cline[80];
401
402 if(LANG == 1) sprintf(cline,"noch " PD9 " Schritte, Pointer IEZ = " PD9 " ",k,i);
403 if(LANG == 2) sprintf(cline,"still " PD9 " steps, pointer IEZ = " PD9 " ",k,i);
404 laenge= strlen(cline);
405 TextOut(hDC,10,150,cline,laenge);
406
407 return(0);
408 }
409
410 /***********************************************************************
411 * function wran88j gibt Randbedingungen aus
412 ***********************************************************************/
wran88j(FR_INT4 k,FR_INT4 i)413 int wran88j(FR_INT4 k,FR_INT4 i)
414 {
415 extern HDC hDC;
416 extern FR_INT4 LANG;
417
418 size_t laenge;
419
420 char cline[80];
421
422 if(LANG == 1) sprintf(cline,"Randbedingung Nr. " PD " Typ " PD,k,i);
423 if(LANG == 2) sprintf(cline,"constraint no. " PD " type " PD,k,i);
424 laenge= strlen(cline);
425 TextOut(hDC,290,290,cline,laenge);
426
427 return(0);
428 }
429
430 /***********************************************************************
431 * function wtyd88j gibt Elementtypen in Z88DR aus
432 ***********************************************************************/
wtyd88j(FR_INT4 k,FR_INT4 i)433 int wtyd88j(FR_INT4 k,FR_INT4 i)
434 {
435 extern HDC hDC;
436 extern FR_INT4 LANG;
437
438 size_t laenge;
439
440 char cline[80];
441
442
443 if(LANG == 1) sprintf(cline,"Element: Nr. " PD " Typ " PD,k,i);
444 if(LANG == 2) sprintf(cline,"element: no. " PD " type " PD,k,i);
445 laenge= strlen(cline);
446 laenge= strlen(cline);
447 TextOut(hDC,10,470,cline,laenge);
448
449 return(0);
450 }
451
452 /***********************************************************************
453 * function wtye88j gibt Elementtypen in Z88ER aus
454 ***********************************************************************/
wtye88j(FR_INT4 k,FR_INT4 i)455 int wtye88j(FR_INT4 k,FR_INT4 i)
456 {
457 extern HDC hDC;
458 extern FR_INT4 LANG;
459
460 size_t laenge;
461
462 char cline[80];
463
464
465 if(LANG == 1) sprintf(cline,"Element: Nr. " PD " Typ " PD,k,i);
466 if(LANG == 2) sprintf(cline,"element: no. " PD " type " PD,k,i);
467 laenge= strlen(cline);
468 laenge= strlen(cline);
469 TextOut(hDC,10,530,cline,laenge);
470
471 return(0);
472 }
473