/*********************************************************************** * * ***** *** *** * * * * * * * * *** *** * * * * * * * ***** *** *** * * A FREE Finite Elements Analysis Program in ANSI C for the UNIX OS. * * Composed and edited and copyright by * Professor Dr.-Ing. Frank Rieg, University of Bayreuth, Germany * * eMail: * frank.rieg@uni-bayreuth.de * dr.frank.rieg@t-online.de * * V10.0 December 12, 2001 * * Z88 should compile and run under any UNIX OS and Motif 2.0. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ***********************************************************************/ /*********************************************************************** * diese compilerunit vc88 fuer UNIX enthaelt: * vu2b88 * vu3b88 * vv2b88 * vv3b88 * vsca88 * vcur88 * * 23.3.2002 Rieg ***********************************************************************/ /***************************************************************************** * UNIX *****************************************************************************/ #ifdef FR_UNIX #include #include /* FR_FABS,FR_SIN,FR_COS */ #endif /*********************************************************************** * function vu2b88 ***********************************************************************/ int vu2b88(void) { extern FR_DOUBLEAY x; extern FR_DOUBLEAY y; extern FR_DOUBLEAY z; extern FR_DOUBLE facx,facy,facz,cx,cy,cz,fxcor; extern FR_INT4AY kx; extern FR_INT4AY ky; extern FR_INT4 nkp; extern int ifansi; extern int IW_DRAWAR,IH_DRAWAR; FR_DOUBLE fx1,fx2,fy1,fy2; FR_INT4 i; fx1= IW_DRAWAR*0.005; fx2= IW_DRAWAR*0.5; fy1= IH_DRAWAR*0.005; fy2= IH_DRAWAR*0.5; if(ifansi== IDM_XY) { for(i= 1; i <= nkp; i++) { kx[i]= (FR_INT4) (fx1 * (x[i] -cx) *facx*fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * (y[i] -cy) *facy - fy2); } } else if(ifansi== IDM_XZ) { for(i= 1; i <= nkp; i++) { kx[i]= (FR_INT4) (fx1 * (x[i] -cx) *facx*fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * (z[i] -cz) *facz - fy2); } } else if(ifansi== IDM_YZ) { for(i= 1; i <= nkp; i++) { kx[i]= (FR_INT4) (fx1 * (y[i] -cy) *facy*fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * (z[i] -cz) *facz - fy2); } } return 0; } /*********************************************************************** * function vu3b88 ***********************************************************************/ int vu3b88(void) { extern FR_DOUBLEAY x; extern FR_DOUBLEAY y; extern FR_DOUBLEAY z; extern FR_DOUBLE facx,facy,facz,cx,cy,cz,rotx,roty,rotz,fxcor; extern FR_INT4AY kx; extern FR_INT4AY ky; extern FR_INT4 nkp; extern int IW_DRAWAR, IH_DRAWAR; FR_DOUBLE gx,gy,gz,hx,hy,hz,wx,wy,wz,sa,sb,sc,sd,se,sf,sg,sh,si,fpi; FR_DOUBLE fx1,fx2,fy1,fy2; FR_INT4 i; fx1= IW_DRAWAR*0.005; fx2= IW_DRAWAR*0.5; fy1= IH_DRAWAR*0.005; fy2= IH_DRAWAR*0.5; fpi= 0.0174533; wx= rotx*fpi; wy= roty*fpi; wz= rotz*fpi; sa= FR_COS(wy) * FR_COS(wz); sb= FR_COS(wy) * FR_SIN(wz); sc= -FR_SIN(wy); sd= FR_SIN(wx) * FR_SIN(wy) * FR_COS(wz) - FR_COS(wx) * FR_SIN(wz); se= FR_SIN(wx) * FR_SIN(wy) * FR_SIN(wz) + FR_COS(wx) * FR_COS(wz); sf= FR_SIN(wx) * FR_COS(wy); sg= FR_COS(wx) * FR_SIN(wy) * FR_COS(wz) + FR_SIN(wx) * FR_SIN(wz); sh= FR_COS(wx) * FR_SIN(wy) * FR_SIN(wz) - FR_SIN(wx) * FR_COS(wz); si= FR_COS(wx) * FR_COS(wy); for(i= 1; i <= nkp; i++) { gx= (x[i] - cx) * facx; gy= (y[i] - cy) * facy; gz= (z[i] - cz) * facz; hx= gx * sa + gy * sb + gz * sc; hy= gx * sd + gy * se + gz * sf; hz= gx * sg + gy * sh + gz * si; kx[i]= (FR_INT4) (fx1 * ((hx - hy) * 0.866) * fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * ((hx + hy) * 0.500 +hz) - fy2); } return 0; } /******************* ab hier verformt *********************************/ /*********************************************************************** * function vv2b88 ***********************************************************************/ int vv2b88(void) { extern FR_DOUBLEAY x; extern FR_DOUBLEAY y; extern FR_DOUBLEAY z; extern FR_DOUBLEAY ux; extern FR_DOUBLEAY uy; extern FR_DOUBLEAY uz; extern FR_DOUBLE facx,facy,facz,cx,cy,cz,fux,fuy,fuz,fxcor; extern FR_INT4AY kx; extern FR_INT4AY ky; extern FR_INT4 nkp; extern int IW_DRAWAR, IH_DRAWAR; extern int ifansi; FR_DOUBLE fx1,fx2,fy1,fy2; FR_INT4 i; fx1= IW_DRAWAR*0.005; fx2= IW_DRAWAR*0.5; fy1= IH_DRAWAR*0.005; fy2= IH_DRAWAR*0.5; if(ifansi== IDM_XY) { for(i= 1; i <= nkp; i++) { kx[i]= (FR_INT4) (fx1 * ( (x[i] +fux* ux[i] )-cx) *facx*fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * ( (y[i] +fuy* uy[i] )-cy) *facy - fy2); } } else if(ifansi== IDM_XZ) { for(i= 1; i <= nkp; i++) { kx[i]= (FR_INT4) (fx1 * ( (x[i] +fux* ux[i] )-cx) *facx*fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * ( (z[i] +fuz* uz[i] )-cz) *facz - fy2); } } else if(ifansi== IDM_YZ) { for(i= 1; i <= nkp; i++) { kx[i]= (FR_INT4) (fx1 * ( (y[i] +fuy* uy[i] )-cy) *facy*fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * ( (z[i] +fuz* uz[i] )-cz) *facz - fy2); } } return 0; } /*********************************************************************** * function vv3b88 ***********************************************************************/ int vv3b88(void) { extern FR_DOUBLEAY x; extern FR_DOUBLEAY y; extern FR_DOUBLEAY z; extern FR_DOUBLEAY ux; extern FR_DOUBLEAY uy; extern FR_DOUBLEAY uz; extern FR_DOUBLE facx,facy,facz,cx,cy,cz,rotx,roty,rotz,fux,fuy,fuz,fxcor; extern FR_INT4AY kx; extern FR_INT4AY ky; extern FR_INT4 nkp; extern int IW_DRAWAR, IH_DRAWAR; FR_DOUBLE gx,gy,gz,hx,hy,hz,wx,wy,wz,sa,sb,sc,sd,se,sf,sg,sh,si,fpi; FR_DOUBLE fx1,fx2,fy1,fy2; FR_INT4 i; fx1= IW_DRAWAR*0.005; fx2= IW_DRAWAR*0.5; fy1= IH_DRAWAR*0.005; fy2= IH_DRAWAR*0.5; fpi= 0.0174533; wx= rotx*fpi; wy= roty*fpi; wz= rotz*fpi; sa= FR_COS(wy) * FR_COS(wz); sb= FR_COS(wy) * FR_SIN(wz); sc= -FR_SIN(wy); sd= FR_SIN(wx) * FR_SIN(wy) * FR_COS(wz) - FR_COS(wx) * FR_SIN(wz); se= FR_SIN(wx) * FR_SIN(wy) * FR_SIN(wz) + FR_COS(wx) * FR_COS(wz); sf= FR_SIN(wx) * FR_COS(wy); sg= FR_COS(wx) * FR_SIN(wy) * FR_COS(wz) + FR_SIN(wx) * FR_SIN(wz); sh= FR_COS(wx) * FR_SIN(wy) * FR_SIN(wz) - FR_SIN(wx) * FR_COS(wz); si= FR_COS(wx) * FR_COS(wy); for(i= 1; i <= nkp; i++) { gx= (x[i] + fux * ux[i] - cx) * facx; gy= (y[i] + fuy * uy[i] - cy) * facy; gz= (z[i] + fuz * uz[i] - cz) * facz; hx= gx * sa + gy * sb + gz * sc; hy= gx * sd + gy * se + gz * sf; hz= gx * sg + gy * sh + gz * si; kx[i]= (FR_INT4) (fx1 * ((hx - hy) * 0.866) * fxcor + fx2); ky[i]= (FR_INT4)-(fy1 * ((hx + hy) * 0.500 +hz) - fy2); } return 0; } /*********************************************************************** * function vsca88 ***********************************************************************/ int vsca88(void) { extern FR_DOUBLEAY x; extern FR_DOUBLEAY y; extern FR_DOUBLEAY z; extern FR_DOUBLE facx,facy,facz,cx,cy,cz; extern FR_DOUBLE xmin,xmax,ymin,ymax,zmin,zmax; extern FR_INT4 ndim,nkp; extern int ifscale; FR_DOUBLE eps= 1e-10; FR_INT4 i; if(ndim == 2) { xmin= x[1]; xmax= x[1]; ymin= y[1]; ymax= y[1]; for(i= 1; i <= nkp; i++) { if( x[i] < xmin) xmin= x[i]; if( x[i] > xmax) xmax= x[i]; if( y[i] < ymin) ymin= y[i]; if( y[i] > ymax) ymax= y[i]; } if(FR_FABS(ymax - ymin) > eps) { facx= 100./(xmax - xmin); facy= 100./(ymax - ymin); if(facx > facy) facx= facy; else facy= facx; facz= 0.; } else { facx= 100./(xmax - xmin); facy= facx; facz= 0.; } cx= (xmin + xmax)*0.5; cy= (ymin + ymax)*0.5; cz= 0.; } else { xmin= x[1]; xmax= x[1]; ymin= y[1]; ymax= y[1]; zmin= z[1]; zmax= z[1]; for(i= 1; i <= nkp; i++) { if( x[i] < xmin) xmin= x[i]; if( x[i] > xmax) xmax= x[i]; if( y[i] < ymin) ymin= y[i]; if( y[i] > ymax) ymax= y[i]; if( z[i] < zmin) zmin= z[i]; if( z[i] > zmax) zmax= z[i]; } if(FR_FABS(ymax -ymin) > eps && FR_FABS(zmax - zmin) > eps) { facx= 100./(xmax - xmin); facy= 100./(ymax - ymin); facz= 100./(zmax - zmin); if (facx <= facy && facx <= facz) facy= facz= facx; else if(facy <= facx && facy <= facz) facx= facz= facy; else if(facz <= facy && facz <= facx) facy= facx= facz; } else { facx= 100./(xmax - xmin); facy= facx; facz= facx; } cx= (xmin + xmax)*0.5; cy= (ymin + ymax)*0.5; cz= (zmin + zmax)*0.5; } ifscale= IDM_NOSCALE; return 0; } /*********************************************************************** * function vcur88 ***********************************************************************/ int vcur88(void) { extern FR_DOUBLEAY x; extern FR_DOUBLEAY y; extern FR_DOUBLEAY z; extern FR_DOUBLE xmin,xmax,ymin,ymax,zmin,zmax; extern FR_INT4 ndim,nkp; extern int ifvcur; FR_INT4 i; if(ndim == 2) { xmin= x[1]; xmax= x[1]; ymin= y[1]; ymax= y[1]; for(i= 1; i <= nkp; i++) { if( x[i] < xmin) xmin= x[i]; if( x[i] > xmax) xmax= x[i]; if( y[i] < ymin) ymin= y[i]; if( y[i] > ymax) ymax= y[i]; } } else { xmin= x[1]; xmax= x[1]; ymin= y[1]; ymax= y[1]; zmin= z[1]; zmax= z[1]; for(i= 1; i <= nkp; i++) { if( x[i] < xmin) xmin= x[i]; if( x[i] > xmax) xmax= x[i]; if( y[i] < ymin) ymin= y[i]; if( y[i] > ymax) ymax= y[i]; if( z[i] < zmin) zmin= z[i]; if( z[i] > zmax) zmax= z[i]; } } ifvcur= 1; return 0; }