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