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