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 * diese compilerunit oc88 enthaelt:
36 * vu3b88 - unverformt
37 * vv3b88 - verformt
38 * vgpc88 - Gausspunkte, unverformt
39 * vsca88
40 * vcur88
41 * 17.7.2011 Rieg
42 ***********************************************************************/
43 /*****************************************************************************
44 * Windows
45 *****************************************************************************/
46 #ifdef FR_WIN
47 #include <z88o.h>
48 #endif
49
50 /*****************************************************************************
51 * UNIX
52 *****************************************************************************/
53 #ifdef FR_UNIX
54 #include <z88o.h>
55 #endif
56
57 /***********************************************************************
58 * function vu3b88
59 ***********************************************************************/
vu3b88(void)60 int vu3b88(void)
61 {
62 extern FR_DOUBLEAY x;
63 extern FR_DOUBLEAY y;
64 extern FR_DOUBLEAY z;
65 extern FR_DOUBLEAY xv;
66 extern FR_DOUBLEAY yv;
67 extern FR_DOUBLEAY zv;
68
69 extern FR_DOUBLE facx,facy,facz,cx,cy,cz;
70
71 extern FR_INT4 nkp;
72
73 FR_INT4 i;
74
75 for(i= 1; i <= nkp; i++)
76 {
77 xv[i]= (x[i] - cx) * facx;
78 yv[i]= (y[i] - cy) * facy;
79 zv[i]= (z[i] - cz) * facz;
80 }
81
82 return 0;
83 }
84
85 /***********************************************************************
86 * function vv3b88
87 ***********************************************************************/
vv3b88(void)88 int vv3b88(void)
89 {
90 extern FR_DOUBLEAY x;
91 extern FR_DOUBLEAY y;
92 extern FR_DOUBLEAY z;
93 extern FR_DOUBLEAY xv;
94 extern FR_DOUBLEAY yv;
95 extern FR_DOUBLEAY zv;
96 extern FR_DOUBLEAY ux;
97 extern FR_DOUBLEAY uy;
98 extern FR_DOUBLEAY uz;
99
100 extern FR_DOUBLE facx,facy,facz,cx,cy,cz,fux,fuy,fuz;
101
102 extern FR_INT4 nkp;
103
104 FR_INT4 i;
105
106 for(i= 1; i <= nkp; i++)
107 {
108 xv[i]= (x[i] + fux * ux[i] - cx) * facx;
109 yv[i]= (y[i] + fuy * uy[i] - cy) * facy;
110 zv[i]= (z[i] + fuz * uz[i] - cz) * facz;
111 }
112
113 return 0;
114 }
115
116 /***********************************************************************
117 * function vgpc88
118 ***********************************************************************/
vgpc88(void)119 int vgpc88(void)
120 {
121 extern FR_DOUBLEAY xgp;
122 extern FR_DOUBLEAY ygp;
123 extern FR_DOUBLEAY zgp;
124 extern FR_DOUBLEAY xgpo;
125 extern FR_DOUBLEAY ygpo;
126 extern FR_DOUBLEAY zgpo;
127
128 extern FR_DOUBLE facx,facy,facz,cx,cy,cz;
129
130 extern FR_INT4 igpanz;
131
132 FR_INT4 i;
133
134 for(i= 1; i <= igpanz; i++)
135 {
136 xgpo[i]= (xgp[i] - cx) * facx;
137 ygpo[i]= (ygp[i] - cy) * facy;
138 zgpo[i]= (zgp[i] - cz) * facz;
139 }
140
141 return 0;
142 }
143
144 /***********************************************************************
145 * function vsca88
146 ***********************************************************************/
vsca88(void)147 int vsca88(void)
148 {
149 extern FR_DOUBLEAY x;
150 extern FR_DOUBLEAY y;
151 extern FR_DOUBLEAY z;
152
153 extern FR_DOUBLE facx,facy,facz,cx,cy,cz;
154 extern FR_DOUBLE xmin,xmax,ymin,ymax,zmin,zmax;
155
156 extern FR_INT4 ndim,nkp;
157 extern int ifscale;
158
159 FR_DOUBLE eps= 1e-10;
160
161 FR_INT4 i;
162
163 if(ndim == 2L)
164 {
165 xmin= x[1];
166 xmax= x[1];
167 ymin= y[1];
168 ymax= y[1];
169
170 for(i= 1L; i <= nkp; i++)
171 {
172 if( x[i] < xmin) xmin= x[i];
173 if( x[i] > xmax) xmax= x[i];
174 if( y[i] < ymin) ymin= y[i];
175 if( y[i] > ymax) ymax= y[i];
176 }
177
178 if(fabs(ymax - ymin) > eps)
179 {
180 facx= 100./(xmax - xmin);
181 facy= 100./(ymax - ymin);
182
183 if(facx > facy) facx= facy;
184 else facy= facx;
185 facz= 0.;
186 }
187 else
188 {
189 facx= 100./(xmax - xmin);
190 facy= facx;
191 facz= 0.;
192 }
193
194 cx= (xmin + xmax)*0.5;
195 cy= (ymin + ymax)*0.5;
196 cz= 0.;
197 }
198
199 else
200 {
201 xmin= x[1];
202 xmax= x[1];
203 ymin= y[1];
204 ymax= y[1];
205 zmin= z[1];
206 zmax= z[1];
207
208 for(i= 1L; i <= nkp; i++)
209 {
210 if( x[i] < xmin) xmin= x[i];
211 if( x[i] > xmax) xmax= x[i];
212 if( y[i] < ymin) ymin= y[i];
213 if( y[i] > ymax) ymax= y[i];
214 if( z[i] < zmin) zmin= z[i];
215 if( z[i] > zmax) zmax= z[i];
216 }
217
218 if(fabs(ymax -ymin) > eps && fabs(zmax - zmin) > eps)
219 {
220 facx= 100./(xmax - xmin);
221 facy= 100./(ymax - ymin);
222 facz= 100./(zmax - zmin);
223
224 if (facx <= facy && facx <= facz) facy= facz= facx;
225 else if(facy <= facx && facy <= facz) facx= facz= facy;
226 else if(facz <= facy && facz <= facx) facy= facx= facz;
227 }
228 else
229 {
230 facx= 100./(xmax - xmin);
231 facy= facx;
232 facz= facx;
233 }
234
235 cx= (xmin + xmax)*0.5;
236 cy= (ymin + ymax)*0.5;
237 cz= (zmin + zmax)*0.5;
238 }
239
240 ifscale= IDM_NOSCALE;
241 return 0;
242 }
243
244 /***********************************************************************
245 * function vcur88
246 ***********************************************************************/
vcur88(void)247 int vcur88(void)
248 {
249 extern FR_DOUBLEAY x;
250 extern FR_DOUBLEAY y;
251 extern FR_DOUBLEAY z;
252
253 extern FR_DOUBLE xmin,xmax,ymin,ymax,zmin,zmax;
254
255 extern FR_INT4 ndim,nkp;
256 extern int ifvcur;
257
258 FR_INT4 i;
259
260 if(ndim == 2L)
261 {
262 xmin= x[1];
263 xmax= x[1];
264 ymin= y[1];
265 ymax= y[1];
266
267 for(i= 1L; i <= nkp; i++)
268 {
269 if( x[i] < xmin) xmin= x[i];
270 if( x[i] > xmax) xmax= x[i];
271 if( y[i] < ymin) ymin= y[i];
272 if( y[i] > ymax) ymax= y[i];
273 }
274 }
275 else
276 {
277 xmin= x[1];
278 xmax= x[1];
279 ymin= y[1];
280 ymax= y[1];
281 zmin= z[1];
282 zmax= z[1];
283
284 for(i= 1L; i <= nkp; i++)
285 {
286 if( x[i] < xmin) xmin= x[i];
287 if( x[i] > xmax) xmax= x[i];
288 if( y[i] < ymin) ymin= y[i];
289 if( y[i] > ymax) ymax= y[i];
290 if( z[i] < zmin) zmin= z[i];
291 if( z[i] > zmax) zmax= z[i];
292 }
293 }
294
295 ifvcur= 1;
296 return 0;
297 }
298
299