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