1 /***********************************************************************
2 *
3 *               *****   ***    ***
4 *                  *   *   *  *   *
5 *                 *     ***    ***
6 *                *     *   *  *   *
7 *               *****   ***    ***
8 *
9 * A FREE Finite Elements Analysis Program in ANSI C for the UNIX and
10 * the Windows OS.
11 *
12 * Composed and edited and copyright by
13 * Professor Dr.-Ing. Frank Rieg, University of Bayreuth, Germany
14 *
15 * eMail:
16 * frank.rieg@uni-bayreuth.de
17 * dr.frank.rieg@t-online.de
18 *
19 * V15.0  November 18 2015
20 *
21 * This program is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation; either version 2, or (at your option)
24 * any later version.
25 *
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29 * GNU General Public License for more details.
30 *
31 * You should have received a copy of the GNU General Public License
32 * along with this program; see the file COPYING.  If not, write to
33 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
34 ***********************************************************************/
35 /***********************************************************************
36 * Function dyn88n liest z88.dyn aus und laesst memory kommen
37 * hier wird File Z88.DYN geoffnet
38 * 31.7.2011 Rieg
39 ***********************************************************************/
40 
41 /***********************************************************************
42 * Fuer UNIX
43 ***********************************************************************/
44 #ifdef FR_UNIX
45 #include <z88n.h>
46 #include <stdio.h>   /* FILE,NULL,fopen,fclose,fgets */
47 #include <string.h>  /* strstr */
48 #include <stdlib.h>  /* FR_CALLOC */
49 #endif
50 
51 /***********************************************************************
52 * Fuer Windows
53 ***********************************************************************/
54 #ifdef FR_WIN
55 #include <z88n.h>
56 #include <stdio.h>   /* FILE,NULL,fopen,fclose,fgets */
57 #include <string.h>  /* strstr */
58 #include <stdlib.h>  /* FR_CALLOC */
59 #endif
60 
61 /***********************************************************************
62 * Formate
63 ***********************************************************************/
64 #ifdef FR_XINT
65 #define PD "%d"
66 #endif
67 
68 #ifdef FR_XLONG
69 #define PD "%ld"
70 #endif
71 
72 #ifdef FR_XLOLO
73 #define PD "%lld"
74 #endif
75 
76 /***********************************************************************
77 * Functions
78 ***********************************************************************/
79 int wlog88n(FR_INT4,int);
80 
81 /***********************************************************************
82 * hier beginnt Function dyn88n
83 ***********************************************************************/
dyn88n(void)84 int dyn88n(void)
85 {
86 extern FILE *fdyn, *fwlo;
87 extern char cdyn[];
88 
89 extern FR_DOUBLEAY x;
90 extern FR_DOUBLEAY y;
91 extern FR_DOUBLEAY z;
92 extern FR_DOUBLEAY xss;
93 extern FR_DOUBLEAY yss;
94 extern FR_DOUBLEAY zss;
95 
96 extern FR_INT4AY koima;
97 extern FR_INT4AY join;
98 extern FR_INT4AY koiss;
99 extern FR_INT4AY ioffss;
100 extern FR_INT4AY koffss;
101 extern FR_INT4AY jel;
102 extern FR_INT4AY iel;
103 extern FR_INT4AY kel;
104 
105 extern FR_INT4 MAXSE,MAXESS,MAXKSS,MAXK,MAXE,MAXNFG,MAXAN;
106 extern FR_INT4 IDYNMEM;
107 
108 extern FR_CHARAY cjmode;
109 extern FR_CHARAY cimode;
110 extern FR_CHARAY ckmode;
111 
112 char cline[256], cdummy[80];
113 
114 /*----------------------------------------------------------------------
115 * Dyn- Datei z88.dyn oeffnen
116 *---------------------------------------------------------------------*/
117 wlog88n(0,LOG_OPENDYN);
118 fdyn= fopen(cdyn,"r");
119 if(fdyn == NULL)
120   {
121   wlog88n(0,LOG_NODYN);
122   fclose(fwlo);
123   return(AL_NODYN);
124   }
125 rewind(fdyn);
126 
127 /*----------------------------------------------------------------------
128 * Dyn- Datei z88.dyn lesen
129 *---------------------------------------------------------------------*/
130 fgets(cline,256,fdyn);
131 
132 if( (strstr(cline,"DYNAMIC START"))!= NULL)         /* Lesen File */
133   {
134   do
135     {
136     fgets(cline,256,fdyn);
137 
138     if( (strstr(cline,"NET START"))!= NULL)         /* Lesen NET */
139       {
140       do
141         {
142         fgets(cline,256,fdyn);
143         if( (strstr(cline,"MAXSE"))!= NULL)         /* Lesen MAXSE */
144           sscanf(cline,"%s " PD,cdummy,&MAXSE);
145         if( (strstr(cline,"MAXESS"))!= NULL)        /* Lesen MAXESS */
146           sscanf(cline,"%s " PD,cdummy,&MAXESS);
147         if( (strstr(cline,"MAXKSS"))!= NULL)        /* Lesen MAXKSS */
148           sscanf(cline,"%s " PD,cdummy,&MAXKSS);
149         if( (strstr(cline,"MAXAN"))!= NULL)        /* Lesen MAXAN */
150           sscanf(cline,"%s " PD,cdummy,&MAXAN);
151         }
152       while( (strstr(cline,"NET END"))== NULL);
153       }
154 
155     if( (strstr(cline,"COMMON START"))!= NULL)      /* Lesen COMMON */
156       {
157       do
158         {
159         fgets(cline,256,fdyn);
160         if( (strstr(cline,"MAXK"))!= NULL)          /* Lesen MAXK */
161           sscanf(cline,"%s " PD,cdummy,&MAXK);
162         if( (strstr(cline,"MAXE"))!= NULL)          /* Lesen MAXE */
163           sscanf(cline,"%s " PD,cdummy,&MAXE);
164         if( (strstr(cline,"MAXNFG"))!= NULL)        /* Lesen MAXNFG */
165           sscanf(cline,"%s " PD,cdummy,&MAXNFG);
166         }
167       while( (strstr(cline,"COMMON END"))== NULL);
168       }                                             /* end if COMMON START */
169 
170     }
171   while( (strstr(cline,"DYNAMIC END"))== NULL);
172 
173   }                                                 /* end if DYNAMIC START */
174 else
175   {
176   wlog88n(0,LOG_WRONGDYN);
177   fclose(fwlo);
178   return(AL_WRONGDYN);
179   }
180 
181 if(MAXSE <= 0 || MAXESS <= 0 || MAXKSS <= 0 || MAXK <= 0 ||
182     MAXE <= 0 || MAXNFG <= 0 || MAXAN <= 0)
183   {
184   wlog88n(0,LOG_WRONGDYN);
185   fclose(fwlo);
186   return(AL_WRONGDYN);
187   }
188 
189 /*----------------------------------------------------------------------
190 * korrekt gelesen, File fdyn schliessen
191 *---------------------------------------------------------------------*/
192 fclose(fdyn);
193 
194 wlog88n(MAXSE,LOG_MAXSE);
195 wlog88n(MAXESS,LOG_MAXESS);
196 wlog88n(MAXKSS,LOG_MAXKSS);
197 wlog88n(MAXAN,LOG_MAXAN);
198 wlog88n(MAXK,LOG_MAXK);
199 wlog88n(MAXE,LOG_MAXE);
200 wlog88n(MAXNFG,LOG_MAXNFG);
201 
202 wlog88n(0,LOG_OKDYN);
203 
204 /*----------------------------------------------------------------------
205 * Memory kommen lassen ..
206 *---------------------------------------------------------------------*/
207 wlog88n(0,LOG_ALLOCMEMY);
208 
209 /*======================================================================
210 * Memory fuer x, y, z : 1,2,3
211 *=====================================================================*/
212 x= (FR_DOUBLEAY) FR_CALLOC(MAXSE,sizeof(FR_DOUBLE));
213 if(x == NULL)
214   {
215   wlog88n(1,LOG_ARRAYNOTOK);
216   fclose(fwlo);
217   return(AL_NOMEMY);
218   }
219 else
220   wlog88n(1,LOG_ARRAYOK);
221 
222 y= (FR_DOUBLEAY) FR_CALLOC(MAXSE,sizeof(FR_DOUBLE));
223 if(y == NULL)
224   {
225   wlog88n(2,LOG_ARRAYNOTOK);
226   fclose(fwlo);
227   return(AL_NOMEMY);
228   }
229 else
230   wlog88n(2,LOG_ARRAYOK);
231 
232 z= (FR_DOUBLEAY) FR_CALLOC(MAXSE,sizeof(FR_DOUBLE));
233 if(z == NULL)
234   {
235   wlog88n(3,LOG_ARRAYNOTOK);
236   fclose(fwlo);
237   return(AL_NOMEMY);
238   }
239 else
240   wlog88n(3,LOG_ARRAYOK);
241 
242 /*======================================================================
243 * Memory fuer xss, yss, zss: 4,5,6
244 *=====================================================================*/
245 xss= (FR_DOUBLEAY) FR_CALLOC(MAXKSS,sizeof(FR_DOUBLE));
246 if(xss == NULL)
247   {
248   wlog88n(4,LOG_ARRAYNOTOK);
249   fclose(fwlo);
250   return(AL_NOMEMY);
251   }
252 else
253   wlog88n(4,LOG_ARRAYOK);
254 
255 yss= (FR_DOUBLEAY) FR_CALLOC(MAXKSS,sizeof(FR_DOUBLE));
256 if(yss == NULL)
257   {
258   wlog88n(5,LOG_ARRAYNOTOK);
259   fclose(fwlo);
260   return(AL_NOMEMY);
261   }
262 else
263   wlog88n(5,LOG_ARRAYOK);
264 
265 zss= (FR_DOUBLEAY) FR_CALLOC(MAXKSS,sizeof(FR_DOUBLE));
266 if(zss == NULL)
267   {
268   wlog88n(6,LOG_ARRAYNOTOK);
269   fclose(fwlo);
270   return(AL_NOMEMY);
271   }
272 else
273   wlog88n(6,LOG_ARRAYOK);
274 
275 /*======================================================================
276 * Memory fuer koima, join, koiss: 10,11,12
277 *=====================================================================*/
278 koima= (FR_INT4AY) FR_CALLOC(MAXSE,sizeof(FR_INT4));
279 if(koima == NULL)
280   {
281   wlog88n(10,LOG_ARRAYNOTOK);
282   fclose(fwlo);
283   return(AL_NOMEMY);
284   }
285 else
286   wlog88n(10,LOG_ARRAYOK);
287 
288 join= (FR_INT4AY) FR_CALLOC((MAXESS*MAXAN),sizeof(FR_INT4));
289 if(join == NULL)
290   {
291   wlog88n(11,LOG_ARRAYNOTOK);
292   fclose(fwlo);
293   return(AL_NOMEMY);
294   }
295 else
296   wlog88n(11,LOG_ARRAYOK);
297 
298 koiss= (FR_INT4AY) FR_CALLOC((MAXESS*20),sizeof(FR_INT4));
299 if(koiss == NULL)
300   {
301   wlog88n(12,LOG_ARRAYNOTOK);
302   fclose(fwlo);
303   return(AL_NOMEMY);
304   }
305 else
306   wlog88n(12,LOG_ARRAYOK);
307 
308 /*======================================================================
309 * Memory fuer ioffss, koffss, jel, iel, kel: 13,14,15,16,17
310 *=====================================================================*/
311 ioffss= (FR_INT4AY) FR_CALLOC(MAXESS,sizeof(FR_INT4));
312 if(ioffss == NULL)
313   {
314   wlog88n(13,LOG_ARRAYNOTOK);
315   fclose(fwlo);
316   return(AL_NOMEMY);
317   }
318 else
319   wlog88n(13,LOG_ARRAYOK);
320 
321 koffss= (FR_INT4AY) FR_CALLOC(MAXESS,sizeof(FR_INT4));
322 if(koffss == NULL)
323   {
324   wlog88n(14,LOG_ARRAYNOTOK);
325   fclose(fwlo);
326   return(AL_NOMEMY);
327   }
328 else
329   wlog88n(14,LOG_ARRAYOK);
330 
331 jel= (FR_INT4AY) FR_CALLOC(MAXESS,sizeof(FR_INT4));
332 if(jel == NULL)
333   {
334   wlog88n(15,LOG_ARRAYNOTOK);
335   fclose(fwlo);
336   return(AL_NOMEMY);
337   }
338 else
339   wlog88n(15,LOG_ARRAYOK);
340 
341 iel= (FR_INT4AY) FR_CALLOC(MAXESS,sizeof(FR_INT4));
342 if(iel == NULL)
343   {
344   wlog88n(16,LOG_ARRAYNOTOK);
345   fclose(fwlo);
346   return(AL_NOMEMY);
347   }
348 else
349   wlog88n(16,LOG_ARRAYOK);
350 
351 kel= (FR_INT4AY) FR_CALLOC(MAXESS,sizeof(FR_INT4));
352 if(kel == NULL)
353   {
354   wlog88n(17,LOG_ARRAYNOTOK);
355   fclose(fwlo);
356   return(AL_NOMEMY);
357   }
358 else
359   wlog88n(17,LOG_ARRAYOK);
360 
361 /*======================================================================
362 * Memory fuer cjmode, cimode, ckmode: 23,24,25
363 *=====================================================================*/
364 cjmode= (FR_CHARAY) FR_CALLOC(MAXESS,sizeof(char));
365 if(cjmode == NULL)
366   {
367   wlog88n(23,LOG_ARRAYNOTOK);
368   fclose(fwlo);
369   return(AL_NOMEMY);
370   }
371 else
372   wlog88n(23,LOG_ARRAYOK);
373 
374 cimode= (FR_CHARAY) FR_CALLOC(MAXESS,sizeof(char));
375 if(cimode == NULL)
376   {
377   wlog88n(24,LOG_ARRAYNOTOK);
378   fclose(fwlo);
379   return(AL_NOMEMY);
380   }
381 else
382   wlog88n(24,LOG_ARRAYOK);
383 
384 ckmode= (FR_CHARAY) FR_CALLOC(MAXESS,sizeof(char));
385 if(ckmode == NULL)
386   {
387   wlog88n(25,LOG_ARRAYNOTOK);
388   fclose(fwlo);
389   return(AL_NOMEMY);
390   }
391 else
392   wlog88n(25,LOG_ARRAYOK);
393 
394 /***********************************************************************
395 * alles o.k.
396 ***********************************************************************/
397 IDYNMEM = 3*MAXSE*sizeof(FR_DOUBLE);
398 IDYNMEM+= 3*MAXKSS*sizeof(FR_DOUBLE);
399 IDYNMEM+=   MAXSE *sizeof(FR_INT4);
400 IDYNMEM+=   MAXESS*MAXAN*sizeof(FR_INT4);
401 IDYNMEM+=   MAXESS*20*sizeof(FR_INT4);
402 IDYNMEM+= 5*MAXESS*sizeof(FR_INT4);
403 IDYNMEM+= 3*MAXESS*sizeof(char);
404 
405 wlog88n(IDYNMEM,LOG_SUMMEMY);
406 wlog88n(0,LOG_EXITDYN88N);
407 
408 return(0);
409 }
410