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