1 /***********************************************************************
2 *
3 * ***** *** ***
4 * * * * * *
5 * * *** ***
6 * * * * * *
7 * ***** *** ***
8 *
9 * A FREE Finite Elements Analysis Program in ANSI C for the Windows & UNIX 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 * ri1x88
36 * 18.11.2015 Rieg
37 ***********************************************************************/
38
39 /*----------------------------------------------------------------------
40 * Windows
41 *---------------------------------------------------------------------*/
42 #ifdef FR_WIN
43 #include <z88o.h>
44 #include <stdio.h> /* fprintf,fgets,sscanf */
45 #endif
46
47 /*----------------------------------------------------------------------
48 * UNIX
49 *---------------------------------------------------------------------*/
50 #ifdef FR_UNIX
51 #include <z88o.h>
52 #include <stdio.h> /* fprintf,fgets,sscanf */
53 #endif
54
55 /***********************************************************************
56 * Leseformate
57 ***********************************************************************/
58 #ifdef FR_XINT
59 #define PDB "%d "
60 #define PD "%d"
61 #endif
62
63 #ifdef FR_XLONG
64 #define PDB "%ld "
65 #define PD "%ld"
66 #endif
67
68 #ifdef FR_XLOLO
69 #define PDB "%lld "
70 #define PD "%lld"
71 #endif
72
73 #ifdef FR_XDOUB
74 #define PGB "%lg "
75 #define PG "%lg"
76 #endif
77
78 #ifdef FR_XQUAD
79 #define PGB "%Lg "
80 #define PG "%Lg"
81 #endif
82
83 /***********************************************************************
84 * Functions
85 ***********************************************************************/
86 int wlog88o(FR_INT4,int);
87
88 /***********************************************************************
89 * Function ri1x88
90 ***********************************************************************/
ri1x88(void)91 int ri1x88(void)
92 {
93 extern FILE *fi1;
94
95 extern FR_DOUBLEAY x;
96 extern FR_DOUBLEAY y;
97 extern FR_DOUBLEAY z;
98
99 extern FR_INT4AY ityp;
100 extern FR_INT4AY koffs;
101 extern FR_INT4AY koi;
102 extern FR_INT4AY ivon;
103 extern FR_INT4AY ibis;
104
105 extern FR_INT4 MAXE,MAXK,MAXKOI;
106 extern FR_INT4 ndim,nkp,ne,nfg,kflag,ipflag;
107
108 FR_DOUBLE radius,phi;
109
110 FR_INT4 i,idummy,jdummy,kofold;
111
112 char cline[256];
113
114 kflag= 0; /* sicherheitshalber */
115
116 /***********************************************************************
117 * Eintrag in z88o.log
118 ***********************************************************************/
119 wlog88o(0,LOG_REAI1);
120
121 /***********************************************************************
122 * Einlesen der allgemeinen Strukturdaten
123 ***********************************************************************/
124 fgets(cline,256,fi1);
125 sscanf(cline,PDB PDB PDB PDB PD,&ndim,&nkp,&ne,&nfg,&kflag);
126
127 /***********************************************************************
128 * Speicher und Dimension checken
129 ***********************************************************************/
130 if(nkp >= MAXK-1)
131 {
132 wlog88o(MAXK,LOG_EXMAXK);
133 return(AL_EXMAXK);
134 }
135
136 if(ne >= MAXE-1)
137 {
138 wlog88o(MAXE,LOG_EXMAXE);
139 return(AL_EXMAXE);
140 }
141
142 if(ndim < 2 || ndim > 3)
143 {
144 wlog88o(0,LOG_WRONGDIM);
145 return(AL_WRONGDIM);
146 }
147
148 /***********************************************************************
149 * Einlesen der Koordinaten
150 ***********************************************************************/
151 if(ndim== 3)
152 {
153 for(i= 1; i <= nkp; i++)
154 {
155 fgets(cline,256,fi1);
156 sscanf(cline,PDB PDB PGB PGB PG,&idummy,&jdummy,&x[i],&y[i],&z[i]);
157 }
158 }
159 else
160 {
161 for(i= 1; i <= nkp; i++)
162 {
163 fgets(cline,256,fi1);
164 sscanf(cline,PDB PDB PGB PG,&idummy,&jdummy,&x[i],&y[i]);
165 }
166 }
167
168 /*----------------------------------------------------------------------
169 * ggf auf kartesische Koordinaten umrechnen
170 *---------------------------------------------------------------------*/
171 if(kflag == 1)
172 {
173 for(i= 1; i <= nkp; i++)
174 {
175 radius= x[i];
176 phi= 3.141593/180.* y[i];
177 x[i]= radius*FR_COS(phi);
178 y[i]= radius*FR_SIN(phi);
179 }
180 }
181
182 /*----------------------------------------------------------------------
183 * wenn Platten, dann z-Koordinaten beistellen und ndim auf 3 setzen
184 *---------------------------------------------------------------------*/
185 if(ipflag != 0)
186 {
187 ndim= 3;
188 for(i= 1; i <= nkp; i++)
189 z[i]= 0.;
190 }
191
192 /***********************************************************************
193 * Einlesen der Koinzidenz
194 ***********************************************************************/
195 for(i= 1; i <= ne; i++)
196 {
197 fgets(cline,256,fi1);
198 sscanf(cline,PDB PD,&idummy,&ityp[i]);
199
200 /*----------------------------------------------------------------------
201 * den Koinzidenzvektor koi & den zugehoerigen Pointervektor koffs
202 * auffuellen
203 *---------------------------------------------------------------------*/
204 /*======================================================================
205 * Elementtypen 1, 7, 8 & 20 & 23
206 *=====================================================================*/
207 if(ityp[i]== 1 || ityp[i]== 7 || ityp[i]== 8 ||
208 ityp[i]== 20 || ityp[i]== 23)
209 {
210 if(i== 1) koffs[1]= 1;
211 else koffs[i]= koffs[i-1] + kofold;
212
213 if(koffs[i]+8 >= MAXKOI-1)
214 {
215 wlog88o(MAXKOI,LOG_EXMAXKOI);
216 return(AL_EXMAXKOI);
217 }
218
219 fgets(cline,256,fi1);
220 sscanf(cline,PDB PDB PDB PDB PDB PDB PDB PD,
221 &koi[koffs[i] ], &koi[koffs[i] +1],
222 &koi[koffs[i] +2], &koi[koffs[i] +3],
223 &koi[koffs[i] +4], &koi[koffs[i] +5],
224 &koi[koffs[i] +6], &koi[koffs[i] +7]);
225
226 kofold= 8;
227 }
228
229 /*======================================================================
230 * Elementtypen 2, 4, 5 , 9 & 13, 25
231 *=====================================================================*/
232 if(ityp[i]== 2 || ityp[i]== 4 || ityp[i]== 5 ||
233 ityp[i]== 9 || ityp[i]== 13 || ityp[i]== 25)
234 {
235 if(i== 1) koffs[1]= 1;
236 else koffs[i]= koffs[i-1] + kofold;
237
238 if(koffs[i]+2 >= MAXKOI-1)
239 {
240 wlog88o(MAXKOI,LOG_EXMAXKOI);
241 return(AL_EXMAXKOI);
242 }
243
244 fgets(cline,256,fi1);
245 sscanf(cline,PDB PD,
246 &koi[koffs[i] ], &koi[koffs[i] +1]);
247
248 kofold= 2;
249 }
250
251 /*======================================================================
252 * Elementtyp 3, 14,15,18 & 24
253 *=====================================================================*/
254 if(ityp[i]== 3 || ityp[i]== 14 || ityp[i]== 15 ||
255 ityp[i]== 18 || ityp[i]== 24)
256 {
257 if(i== 1) koffs[1]= 1;
258 else koffs[i]= koffs[i-1] + kofold;
259
260 if(koffs[i]+6 >= MAXKOI-1)
261 {
262 wlog88o(MAXKOI,LOG_EXMAXKOI);
263 return(AL_EXMAXKOI);
264 }
265
266 fgets(cline,256,fi1);
267 sscanf(cline,PDB PDB PDB PDB PDB PD,
268 &koi[koffs[i] ], &koi[koffs[i] +1],
269 &koi[koffs[i] +2], &koi[koffs[i] +3],
270 &koi[koffs[i] +4], &koi[koffs[i] +5]);
271
272 kofold= 6;
273 }
274
275 /*======================================================================
276 * Elementtyp 6
277 *=====================================================================*/
278 if(ityp[i]== 6)
279 {
280 if(i== 1) koffs[1]= 1;
281 else koffs[i]= koffs[i-1] + kofold;
282
283 if(koffs[i]+3 >= MAXKOI-1)
284 {
285 wlog88o(MAXKOI,LOG_EXMAXKOI);
286 return(AL_EXMAXKOI);
287 }
288
289 fgets(cline,256,fi1);
290 sscanf(cline,PDB PDB PD,
291 &koi[koffs[i] ], &koi[koffs[i] +1],
292 &koi[koffs[i] +2]);
293
294 kofold= 3;
295 }
296
297 /*======================================================================
298 * Elementtypen 10
299 *=====================================================================*/
300 if(ityp[i]== 10)
301 {
302 if(i== 1) koffs[1]= 1;
303 else koffs[i]= koffs[i-1] + kofold;
304
305 if(koffs[i]+20 >= MAXKOI-1)
306 {
307 wlog88o(MAXKOI,LOG_EXMAXKOI);
308 return(AL_EXMAXKOI);
309 }
310
311 fgets(cline,256,fi1);
312 sscanf(cline,PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PD,
313 &koi[koffs[i] ], &koi[koffs[i] +1],
314 &koi[koffs[i] +2], &koi[koffs[i] +3],
315 &koi[koffs[i] +4], &koi[koffs[i] +5],
316 &koi[koffs[i] +6], &koi[koffs[i] +7],
317 &koi[koffs[i] +8], &koi[koffs[i] +9],
318 &koi[koffs[i] +10], &koi[koffs[i] +11],
319 &koi[koffs[i] +12], &koi[koffs[i] +13],
320 &koi[koffs[i] +14], &koi[koffs[i] +15],
321 &koi[koffs[i] +16], &koi[koffs[i] +17],
322 &koi[koffs[i] +18], &koi[koffs[i] +19]);
323
324 kofold= 20;
325 }
326
327 /*======================================================================
328 * Elementtypen 11 & 12 & 22
329 *=====================================================================*/
330 if(ityp[i]== 11 || ityp[i]== 12 || ityp[i]== 22)
331 {
332 if(i== 1) koffs[1]= 1;
333 else koffs[i]= koffs[i-1] + kofold;
334
335 if(koffs[i]+12 >= MAXKOI-1)
336 {
337 wlog88o(MAXKOI,LOG_EXMAXKOI);
338 return(AL_EXMAXKOI);
339 }
340
341 fgets(cline,256,fi1);
342 sscanf(cline,PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PD,
343 &koi[koffs[i] ], &koi[koffs[i] + 1],
344 &koi[koffs[i] + 2], &koi[koffs[i] + 3],
345 &koi[koffs[i] + 4], &koi[koffs[i] + 5],
346 &koi[koffs[i] + 6], &koi[koffs[i] + 7],
347 &koi[koffs[i] + 8], &koi[koffs[i] + 9],
348 &koi[koffs[i] +10], &koi[koffs[i] +11]);
349
350 kofold= 12;
351 }
352
353 /*======================================================================
354 * Elementtypen 16
355 *=====================================================================*/
356 if(ityp[i]== 16)
357 {
358 if(i== 1) koffs[1]= 1;
359 else koffs[i]= koffs[i-1] + kofold;
360
361 if(koffs[i]+10 >= MAXKOI-1)
362 {
363 wlog88o(MAXKOI,LOG_EXMAXKOI);
364 return(AL_EXMAXKOI);
365 }
366
367 fgets(cline,256,fi1);
368 sscanf(cline,PDB PDB PDB PDB PDB PDB PDB PDB PDB PD,
369 &koi[koffs[i] ], &koi[koffs[i] +1],
370 &koi[koffs[i] +2], &koi[koffs[i] +3],
371 &koi[koffs[i] +4], &koi[koffs[i] +5],
372 &koi[koffs[i] +6], &koi[koffs[i] +7],
373 &koi[koffs[i] +8], &koi[koffs[i] +9]);
374
375 kofold= 10;
376 }
377
378 /*======================================================================
379 * Elementtypen 17
380 *=====================================================================*/
381 if(ityp[i]== 17)
382 {
383 if(i== 1) koffs[1]= 1;
384 else koffs[i]= koffs[i-1] + kofold;
385
386 if(koffs[i]+4 >= MAXKOI-1)
387 {
388 wlog88o(MAXKOI,LOG_EXMAXKOI);
389 return(AL_EXMAXKOI);
390 }
391
392 fgets(cline,256,fi1);
393 sscanf(cline,PDB PDB PDB PD,
394 &koi[koffs[i] ], &koi[koffs[i] +1],
395 &koi[koffs[i] +2], &koi[koffs[i] +3]);
396
397 kofold= 4;
398 }
399
400 /*======================================================================
401 * Elementtypen 19 u. 21
402 *=====================================================================*/
403 if(ityp[i]== 19 || ityp[i]== 21)
404 {
405 if(i== 1) koffs[1]= 1;
406 else koffs[i]= koffs[i-1] + kofold;
407
408 if(koffs[i]+16 >= MAXKOI-1)
409 {
410 wlog88o(MAXKOI,LOG_EXMAXKOI);
411 return(AL_EXMAXKOI);
412 }
413
414 fgets(cline,256,fi1);
415 sscanf(cline,PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PDB PD,
416 &koi[koffs[i] ], &koi[koffs[i] +1],
417 &koi[koffs[i] +2], &koi[koffs[i] +3],
418 &koi[koffs[i] +4], &koi[koffs[i] +5],
419 &koi[koffs[i] +6], &koi[koffs[i] +7],
420 &koi[koffs[i] +8], &koi[koffs[i] +9],
421 &koi[koffs[i] +10], &koi[koffs[i] +11],
422 &koi[koffs[i] +12], &koi[koffs[i] +13],
423 &koi[koffs[i] +14], &koi[koffs[i] +15]);
424
425 kofold= 16;
426 }
427
428 } /* ende Koinzidenz */
429
430 wlog88o(0,LOG_REAI1OK);
431 return 0;
432 }
433