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 * function dyn88o
36 * 31.7.2011 Rieg
37 ***********************************************************************/
38
39 /***********************************************************************
40 * Fuer UNIX
41 ***********************************************************************/
42 #ifdef FR_UNIX
43 #include <z88o.h>
44 #include <stdio.h> /* fopen,fclose,fgets,fprintf,sscanf */
45 #include <string.h> /* strstr */
46 #include <stdlib.h> /* FR_CALLOC */
47 #endif
48
49 /***********************************************************************
50 * Windows
51 ***********************************************************************/
52 #ifdef FR_WIN
53 #include <z88o.h>
54 #include <stdio.h> /* fopen,fclose,fgets,fprintf,sscanf */
55 #include <string.h> /* strstr */
56 #include <stdlib.h> /* FR_CALLOC */
57 #endif
58
59 /***********************************************************************
60 * Formate
61 ***********************************************************************/
62 #ifdef FR_XINT
63 #define PD "%d"
64 #endif
65
66 #ifdef FR_XLONG
67 #define PD "%ld"
68 #endif
69
70 #ifdef FR_XLOLO
71 #define PD "%lld"
72 #endif
73
74 /***********************************************************************
75 * Functions
76 ***********************************************************************/
77 int wlog88o(FR_INT4,int);
78
79 /***********************************************************************
80 * dyn88o
81 ***********************************************************************/
dyn88o(void)82 int dyn88o(void)
83 {
84 extern FILE *fdyn, *fwlo;
85 extern char cdyn[];
86
87 extern FR_DOUBLEAY x;
88 extern FR_DOUBLEAY y;
89 extern FR_DOUBLEAY z;
90 extern FR_DOUBLEAY ux;
91 extern FR_DOUBLEAY uy;
92 extern FR_DOUBLEAY uz;
93 extern FR_DOUBLEAY xv;
94 extern FR_DOUBLEAY yv;
95 extern FR_DOUBLEAY zv;
96 extern FR_DOUBLEAY sep;
97 extern FR_DOUBLEAY sne;
98 extern FR_DOUBLEAY rwert;
99 extern FR_DOUBLEAY xgp;
100 extern FR_DOUBLEAY ygp;
101 extern FR_DOUBLEAY zgp;
102 extern FR_DOUBLEAY xgpo;
103 extern FR_DOUBLEAY ygpo;
104 extern FR_DOUBLEAY zgpo;
105 extern FR_DOUBLEAY siggp;
106
107 extern FR_INT4AY ityp;
108 extern FR_INT4AY koi;
109 extern FR_INT4AY koffs;
110 extern FR_INT4AY iep;
111 extern FR_INT4AY ifarbe;
112 extern FR_INT4AY jfarbe;
113 extern FR_INT4AY kfarbe;
114 extern FR_INT4AY nkn;
115 extern FR_INT4AY ifg;
116 extern FR_INT4AY iflag1;
117 extern FR_INT4AY nep;
118 extern FR_INT4AY noi;
119 extern FR_INT4AY noffs;
120
121 extern FR_INT4 MAXKOI,MAXE,MAXK,MAXRBD,MAXPR,MAXGP;
122 extern FR_INT4 IDYNMEM;
123
124 FR_DOUBLE RDYNMEM;
125
126 char cline[256], cdummy[80];
127
128 /*----------------------------------------------------------------------
129 * Dyn-Datei z88.dyn oeffnen
130 *---------------------------------------------------------------------*/
131 wlog88o(0,LOG_OPENDYN);
132 fdyn= fopen(cdyn,"r");
133 if(fdyn == NULL)
134 {
135 wlog88o(0,LOG_NODYN);
136 fclose(fwlo);
137 return(AL_NODYN);
138 }
139 rewind(fdyn);
140
141 /*----------------------------------------------------------------------
142 * Dyn- datei z88.dyn lesen
143 *---------------------------------------------------------------------*/
144 fgets(cline,256,fdyn);
145
146 if( (strstr(cline,"DYNAMIC START"))!= NULL) /* Lesen File */
147 {
148 do
149 {
150 fgets(cline,256,fdyn);
151
152 if( (strstr(cline,"COMMON START"))!= NULL) /* Lesen COMMON */
153 {
154 do
155 {
156 fgets(cline,256,fdyn);
157 if( (strstr(cline,"MAXKOI"))!= NULL) /* Lesen MAXKOI */
158 sscanf(cline,"%s " PD,cdummy,&MAXKOI);
159 if( (strstr(cline,"MAXE"))!= NULL) /* Lesen MAXE */
160 sscanf(cline,"%s " PD,cdummy,&MAXE);
161 if( (strstr(cline,"MAXK"))!= NULL) /* Lesen MAXK */
162 sscanf(cline,"%s " PD,cdummy,&MAXK);
163 if( (strstr(cline,"MAXRBD"))!= NULL) /* Lesen MAXRBD */
164 sscanf(cline,"%s " PD,cdummy,&MAXRBD);
165 if( (strstr(cline,"MAXPR"))!= NULL) /* Lesen MAXPR */
166 sscanf(cline,"%s " PD,cdummy,&MAXPR);
167 if( (strstr(cline,"MAXGP"))!= NULL) /* Lesen MAXGP */
168 sscanf(cline,"%s " PD,cdummy,&MAXGP);
169 }
170 while( (strstr(cline,"COMMON END"))== NULL);
171 }
172
173 }
174 while( (strstr(cline,"DYNAMIC END"))== NULL);
175
176 } /* end if DYNAMIC START */
177 else
178 {
179 wlog88o(0,LOG_WRONGDYN);
180 fclose(fwlo);
181 return(AL_WRONGDYN);
182 }
183
184 if(MAXKOI <= 0 || MAXE <= 0 || MAXK <= 0 || MAXRBD <= 0 ||
185 MAXPR <= 0 || MAXGP <= 0)
186 {
187 wlog88o(0,LOG_WRONGDYN);
188 fclose(fwlo);
189 return(AL_WRONGDYN);
190 }
191
192 /*----------------------------------------------------------------------
193 * korrekt gelesen, file fdyn schliessen
194 *---------------------------------------------------------------------*/
195 fclose(fdyn);
196
197 wlog88o(MAXKOI,LOG_MAXKOI);
198 wlog88o(MAXE,LOG_MAXE);
199 wlog88o(MAXK,LOG_MAXK);
200
201 wlog88o(0,LOG_OKDYN);
202
203 /*----------------------------------------------------------------------
204 * Memory kommen lassen ..
205 *---------------------------------------------------------------------*/
206 wlog88o(0,LOG_ALLOCMEMY);
207
208 /*======================================================================
209 * Memory fuer x, y, z: 1,2,3
210 *=====================================================================*/
211 x= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
212 if(x == NULL)
213 {
214 wlog88o(1,LOG_ARRAYNOTOK);
215 fclose(fwlo);
216 return(AL_NOMEMY);
217 }
218 else
219 wlog88o(1,LOG_ARRAYOK);
220
221 y= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
222 if(y == NULL)
223 {
224 wlog88o(2,LOG_ARRAYNOTOK);
225 fclose(fwlo);
226 return(AL_NOMEMY);
227 }
228 else
229 wlog88o(2,LOG_ARRAYOK);
230
231 z= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
232 if(z == NULL)
233 {
234 wlog88o(3,LOG_ARRAYNOTOK);
235 fclose(fwlo);
236 return(AL_NOMEMY);
237 }
238 else
239 wlog88o(3,LOG_ARRAYOK);
240
241 /*======================================================================
242 * Memory fuer ux, uy, uz: 4,5,6
243 *=====================================================================*/
244 ux= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
245 if(ux == NULL)
246 {
247 wlog88o(4,LOG_ARRAYNOTOK);
248 fclose(fwlo);
249 return(AL_NOMEMY);
250 }
251 else
252 wlog88o(4,LOG_ARRAYOK);
253
254 uy= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
255 if(uy == NULL)
256 {
257 wlog88o(5,LOG_ARRAYNOTOK);
258 fclose(fwlo);
259 return(AL_NOMEMY);
260 }
261 else
262 wlog88o(5,LOG_ARRAYOK);
263
264 uz= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
265 if(uz == NULL)
266 {
267 wlog88o(6,LOG_ARRAYNOTOK);
268 fclose(fwlo);
269 return(AL_NOMEMY);
270 }
271 else
272 wlog88o(6,LOG_ARRAYOK);
273
274 /*======================================================================
275 * Memory fuer xv, yv, zv, sep: 7,8,9,10
276 *=====================================================================*/
277 xv= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
278 if(xv == NULL)
279 {
280 wlog88o(7,LOG_ARRAYNOTOK);
281 fclose(fwlo);
282 return(AL_NOMEMY);
283 }
284 else
285 wlog88o(7,LOG_ARRAYOK);
286
287 yv= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
288 if(yv == NULL)
289 {
290 wlog88o(8,LOG_ARRAYNOTOK);
291 fclose(fwlo);
292 return(AL_NOMEMY);
293 }
294 else
295 wlog88o(8,LOG_ARRAYOK);
296
297 zv= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
298 if(zv == NULL)
299 {
300 wlog88o(9,LOG_ARRAYNOTOK);
301 fclose(fwlo);
302 return(AL_NOMEMY);
303 }
304 else
305 wlog88o(9,LOG_ARRAYOK);
306
307 sep= (FR_DOUBLEAY) FR_CALLOC(MAXK,sizeof(FR_DOUBLE));
308 if(sep == NULL)
309 {
310 wlog88o(10,LOG_ARRAYNOTOK);
311 fclose(fwlo);
312 return(AL_NOMEMY);
313 }
314 else
315 wlog88o(10,LOG_ARRAYOK);
316
317 /*======================================================================
318 * Memory fuer ityp, koffs: 11,12
319 *=====================================================================*/
320 ityp= (FR_INT4AY) FR_CALLOC(MAXE,sizeof(FR_INT4));
321 if(ityp == NULL)
322 {
323 wlog88o(11,LOG_ARRAYNOTOK);
324 fclose(fwlo);
325 return(AL_NOMEMY);
326 }
327 else
328 wlog88o(11,LOG_ARRAYOK);
329
330 koffs= (FR_INT4AY) FR_CALLOC(MAXE,sizeof(FR_INT4));
331 if(koffs == NULL)
332 {
333 wlog88o(12,LOG_ARRAYNOTOK);
334 fclose(fwlo);
335 return(AL_NOMEMY);
336 }
337 else
338 wlog88o(12,LOG_ARRAYOK);
339
340 /*======================================================================
341 * Memory fuer koi: 13
342 *=====================================================================*/
343 koi= (FR_INT4AY) FR_CALLOC(MAXKOI,sizeof(FR_INT4));
344 if(koi == NULL)
345 {
346 wlog88o(13,LOG_ARRAYNOTOK);
347 fclose(fwlo);
348 return(AL_NOMEMY);
349 }
350 else
351 wlog88o(13,LOG_ARRAYOK);
352
353 /*======================================================================
354 * memory fuer iep, ifarbe: 14,15
355 *=====================================================================*/
356 iep= (FR_INT4AY) FR_CALLOC(MAXK,sizeof(FR_INT4));
357 if(iep == NULL)
358 {
359 wlog88o(14,LOG_ARRAYNOTOK);
360 fclose(fwlo);
361 return(AL_NOMEMY);
362 }
363 else
364 wlog88o(14,LOG_ARRAYOK);
365
366 ifarbe= (FR_INT4AY) FR_CALLOC(MAXK,sizeof(FR_INT4));
367 if(ifarbe == NULL)
368 {
369 wlog88o(15,LOG_ARRAYNOTOK);
370 fclose(fwlo);
371 return(AL_NOMEMY);
372 }
373 else
374 wlog88o(15,LOG_ARRAYOK);
375
376 /*======================================================================
377 * memory fuer sne, jfarbe: 16,17
378 *=====================================================================*/
379 sne= (FR_DOUBLEAY) FR_CALLOC(MAXE,sizeof(FR_DOUBLE));
380 if(sne == NULL)
381 {
382 wlog88o(16,LOG_ARRAYNOTOK);
383 fclose(fwlo);
384 return(AL_NOMEMY);
385 }
386 else
387 wlog88o(16,LOG_ARRAYOK);
388
389 jfarbe= (FR_INT4AY) FR_CALLOC(MAXE,sizeof(FR_INT4));
390 if(jfarbe == NULL)
391 {
392 wlog88o(17,LOG_ARRAYNOTOK);
393 fclose(fwlo);
394 return(AL_NOMEMY);
395 }
396 else
397 wlog88o(17,LOG_ARRAYOK);
398
399 /*======================================================================
400 * memory fuer rwert, nkn, ifg, iflag1: 18,19,20,21
401 *=====================================================================*/
402 rwert= (FR_DOUBLEAY) FR_CALLOC(MAXRBD,sizeof(FR_DOUBLE));
403 if(rwert == NULL)
404 {
405 wlog88o(18,LOG_ARRAYNOTOK);
406 fclose(fwlo);
407 return(AL_NOMEMY);
408 }
409 else
410 wlog88o(18,LOG_ARRAYOK);
411
412 nkn= (FR_INT4AY) FR_CALLOC(MAXRBD,sizeof(FR_INT4));
413 if(nkn == NULL)
414 {
415 wlog88o(19,LOG_ARRAYNOTOK);
416 fclose(fwlo);
417 return(AL_NOMEMY);
418 }
419 else
420 wlog88o(19,LOG_ARRAYOK);
421
422 ifg= (FR_INT4AY) FR_CALLOC(MAXRBD,sizeof(FR_INT4));
423 if(ifg == NULL)
424 {
425 wlog88o(20,LOG_ARRAYNOTOK);
426 fclose(fwlo);
427 return(AL_NOMEMY);
428 }
429 else
430 wlog88o(20,LOG_ARRAYOK);
431
432 iflag1= (FR_INT4AY) FR_CALLOC(MAXRBD,sizeof(FR_INT4));
433 if(iflag1 == NULL)
434 {
435 wlog88o(21,LOG_ARRAYNOTOK);
436 fclose(fwlo);
437 return(AL_NOMEMY);
438 }
439 else
440 wlog88o(21,LOG_ARRAYOK);
441
442 /*======================================================================
443 * memory fuer nep, noi, noffs: 22,23,24
444 *=====================================================================*/
445 nep= (FR_INT4AY) FR_CALLOC((MAXPR+1),sizeof(FR_INT4));
446 if(nep == NULL)
447 {
448 wlog88o(22,LOG_ARRAYNOTOK);
449 fclose(fwlo);
450 return(AL_NOMEMY);
451 }
452 else
453 wlog88o(22,LOG_ARRAYOK);
454
455 noi= (FR_INT4AY) FR_CALLOC((MAXPR*8+1),sizeof(FR_INT4));
456 if(noi == NULL)
457 {
458 wlog88o(23,LOG_ARRAYNOTOK);
459 fclose(fwlo);
460 return(AL_NOMEMY);
461 }
462 else
463 wlog88o(23,LOG_ARRAYOK);
464
465 noffs= (FR_INT4AY) FR_CALLOC((MAXPR+1),sizeof(FR_INT4));
466 if(noffs == NULL)
467 {
468 wlog88o(24,LOG_ARRAYNOTOK);
469 fclose(fwlo);
470 return(AL_NOMEMY);
471 }
472 else
473 wlog88o(24,LOG_ARRAYOK);
474
475 /*======================================================================
476 * Memory fuer xgp,ygp,zgp,xgpo,ygpo,zgpo,siggp,kfarbe: 27,28,29,30,31,32,33,34
477 *=====================================================================*/
478 xgp= (FR_DOUBLEAY) FR_CALLOC(MAXGP+1,sizeof(FR_DOUBLE));
479 if(xgp == NULL)
480 {
481 wlog88o(27,LOG_ARRAYNOTOK);
482 fclose(fwlo);
483 return(AL_NOMEMY);
484 }
485 else
486 wlog88o(27,LOG_ARRAYOK);
487
488 ygp= (FR_DOUBLEAY) FR_CALLOC(MAXGP+1,sizeof(FR_DOUBLE));
489 if(ygp == NULL)
490 {
491 wlog88o(28,LOG_ARRAYNOTOK);
492 fclose(fwlo);
493 return(AL_NOMEMY);
494 }
495 else
496 wlog88o(28,LOG_ARRAYOK);
497
498 zgp= (FR_DOUBLEAY) FR_CALLOC(MAXGP+1,sizeof(FR_DOUBLE));
499 if(zgp == NULL)
500 {
501 wlog88o(29,LOG_ARRAYNOTOK);
502 fclose(fwlo);
503 return(AL_NOMEMY);
504 }
505 else
506 wlog88o(29,LOG_ARRAYOK);
507
508 xgpo= (FR_DOUBLEAY) FR_CALLOC(MAXGP+1,sizeof(FR_DOUBLE));
509 if(xgpo == NULL)
510 {
511 wlog88o(30,LOG_ARRAYNOTOK);
512 fclose(fwlo);
513 return(AL_NOMEMY);
514 }
515 else
516 wlog88o(30,LOG_ARRAYOK);
517
518 ygpo= (FR_DOUBLEAY) FR_CALLOC(MAXGP+1,sizeof(FR_DOUBLE));
519 if(ygpo == NULL)
520 {
521 wlog88o(31,LOG_ARRAYNOTOK);
522 fclose(fwlo);
523 return(AL_NOMEMY);
524 }
525 else
526 wlog88o(31,LOG_ARRAYOK);
527
528 zgpo= (FR_DOUBLEAY) FR_CALLOC(MAXGP+1,sizeof(FR_DOUBLE));
529 if(zgpo == NULL)
530 {
531 wlog88o(32,LOG_ARRAYNOTOK);
532 fclose(fwlo);
533 return(AL_NOMEMY);
534 }
535 else
536 wlog88o(32,LOG_ARRAYOK);
537
538 siggp= (FR_DOUBLEAY) FR_CALLOC(MAXGP+1,sizeof(FR_DOUBLE));
539 if(siggp == NULL)
540 {
541 wlog88o(33,LOG_ARRAYNOTOK);
542 fclose(fwlo);
543 return(AL_NOMEMY);
544 }
545 else
546 wlog88o(33,LOG_ARRAYOK);
547
548 kfarbe= (FR_INT4AY) FR_CALLOC(MAXGP+1,sizeof(FR_INT4));
549 if(kfarbe == NULL)
550 {
551 wlog88o(34,LOG_ARRAYNOTOK);
552 fclose(fwlo);
553 return(AL_NOMEMY);
554 }
555 else
556 wlog88o(34,LOG_ARRAYOK);
557
558 /***********************************************************************
559 * alles o.k.
560 ***********************************************************************/
561 RDYNMEM = 3*(double)(MAXK+1.)* sizeof(FR_DOUBLE); /* x,y,z */
562 RDYNMEM+= 3*(double)(MAXK+1.)* sizeof(FR_DOUBLE); /* ux,uy,uz */
563 RDYNMEM+= 4*(double)(MAXK+1.)* sizeof(FR_DOUBLE); /* xv,yv,zv,sep */
564 RDYNMEM+= 3*(double)(MAXE+1.)* sizeof(FR_INT4); /* ityp,koffs,jfarbe */
565 RDYNMEM+= (double)(MAXKOI+1.)*sizeof(FR_INT4); /* koi */
566 RDYNMEM+= 2*(double)(MAXK+1.)* sizeof(FR_INT4); /* iep,ifarbe */
567 RDYNMEM+= (double)(MAXE+1.)* sizeof(FR_DOUBLE); /* sne */
568 RDYNMEM+= (double)(MAXRBD+1.)*sizeof(FR_DOUBLE); /* rwert */
569 RDYNMEM+= 3*(double)(MAXRBD+1.)*sizeof(FR_INT4); /* nkn,ifg,iflag1 */
570 RDYNMEM+=10*(double)(MAXPR+1.) *sizeof(FR_INT4); /* nep,noi,noffs */
571 RDYNMEM+= 7*(double)(MAXGP+1.)* sizeof(FR_DOUBLE); /* xgp(o,ygp(o,zgp(o,siggp */
572 RDYNMEM+= (double)(MAXGP+1.)* sizeof(FR_INT4); /* kfarbe */
573
574 IDYNMEM= (FR_INT4) (RDYNMEM/1048576.);
575 wlog88o(IDYNMEM,LOG_SUMMEMY);
576 wlog88o(0,LOG_EXITDYN88O);
577
578 return 0;
579 }
580
581