/*********************************************************************** * * ***** *** *** * * * * * * * * *** *** * * * * * * * ***** *** *** * * 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. ***********************************************************************/ /*********************************************************************** * Z88V * 29.7.2002 Rieg ***********************************************************************/ /*********************************************************************** * Fuer UNIX ***********************************************************************/ #ifdef FR_UNIX #include #include /* FILE,fclose,printf */ #include /* strcpy */ #endif /*********************************************************************** * Functions ***********************************************************************/ int who88v(void); int dyn88v(void); int ale88v(int); int FR_GETC(void); int g1i188(void); int g2i188(void); int g3i188(void); int g4i188(void); int g5i188(void); int g1i288(void); int g2i288(void); int g1i388(void); int vend88(int); void stop88v(void); int lan88v(void); void clr88(void); /*********************************************************************** * Globale Variable ***********************************************************************/ FILE *fdatei,*fdyn,*fwlo; /* ** fdatei= z88ni.txt,z88i1.txt,z88i2.txt,z88i3.txt ** fdyn = z88.dyn ** fwlo = z88e.log */ char cdyn[8] = "z88.dyn"; char clog[9] = "z88v.log"; FR_INT4AY jtyp; FR_INT4AY jzeile; FR_INT4AY ifrei; FR_INT4 IDYNMEM,LANG; FR_INT4 MAXSE,MAXESS,MAXKSS,MAXAN; FR_INT4 MAXGS,MAXKOI,MAXK,MAXE,MAXNFG,MAXNEG,MAXSOR,MAXPUF; FR_INT4 MFACCOMMON,MAXGP; FR_INT4 ndim,nkp,ne,nfg,neg,kflag,niflag,ibflag,ipflag,nrb; FR_INT4 iwarn,izeile,iruni1,ispann,ifnii1; char cdatei[10]; /*********************************************************************** * Start Z88V ***********************************************************************/ int main(void) { extern FR_INT4 MAXSE,MAXESS,MAXKSS,MAXAN; extern FR_INT4 MAXGS,MAXKOI,MAXK,MAXE,MAXNFG,MAXNEG,MAXSOR,MAXPUF; extern FR_INT4 MFACCOMMON,MAXGP; extern FR_INT4 LANG; FR_INT4 isumn= 0,isumf= 0,isumi1=0,isumi2=0,isumx= 0,isump= 0; int jfile,ier,iret; iruni1= 0; /* Check Z88I1.TXT gelaufen ? ja = 1 */ ispann= 0; /* Spannungsfile noetig ? ja = 1 */ ifnii1= 0; /* Vorwahl fuer Z88I1.TXT, Z88NI.TXT = 1 */ /*--------------------------------------------------------------------------- * Die Sprache feststellen *--------------------------------------------------------------------------*/ LANG = 0; iret= lan88v(); if(iret != 0) { ale88v(iret); stop88v(); } /*--------------------------------------------------------------------------- * dyn88e starten: anfordern dynamic memory *--------------------------------------------------------------------------*/ iret= dyn88v(); if(iret != 0) { ale88v(iret); stop88v(); } LnextFile:; /*--------------------------------------------------------------------------- * who88v starten: Ueberschrift *--------------------------------------------------------------------------*/ who88v(); iwarn= 0; if(LANG == 1) { printf(" 1 --> Datei der Allgemeine Eingaben Z88I1.TXT\n"); printf(" 2 --> Datei der Randbedingungen Z88I2.TXT\n"); printf(" 3 --> Parameterfile fuer den Spannungsprozessor Z88I3.TXT\n"); printf(" 4 --> Parameterfile fuer den Iterationssolver Z88I4.TXT\n"); printf(" 5 --> Netzgenerator- Eingabefile Z88NI.TXT\n"); printf(" 6 --> Speicher-Steuerdatei Z88.DYN\n"); printf(" 9 --> Beende Z88V\n\n"); printf(" Ihre Wahl: "); } if(LANG == 2) { printf(" 1 --> general inputfile Z88I1.TXT\n"); printf(" 2 --> constraints file Z88I2.TXT\n"); printf(" 3 --> stress flag file Z88I3.TXT\n"); printf(" 4 --> control file for the iteration solver Z88I4.TXT\n"); printf(" 5 --> net generator inputfile Z88NI.TXT\n"); printf(" 6 --> memory definition file Z88.DYN\n"); printf(" 9 --> exit Z88V\n\n"); printf(" your choice: "); } /********************************************************************** * Oeffnen des gewuenschten Files **********************************************************************/ do { jfile= FR_GETC(); if(jfile == 5) { ifnii1= 1; strcpy(cdatei,"z88ni.txt"); fdatei= fopen(cdatei,"r"); if(fdatei == NULL) vend88(3); } else if (jfile == 1) { ifnii1= 0; strcpy(cdatei,"z88i1.txt"); fdatei= fopen(cdatei,"r"); if(fdatei == NULL) vend88(3); } else if (jfile == 2) { strcpy(cdatei,"z88i2.txt"); fdatei= fopen(cdatei,"r"); if(fdatei == NULL) vend88(3); } else if (jfile == 3) { strcpy(cdatei,"z88i3.txt"); fdatei= fopen(cdatei,"r"); if(fdatei == NULL) vend88(3); } else if (jfile == 4) { strcpy(cdatei,"z88i4.txt"); fdatei= fopen(cdatei,"r"); if(fdatei == NULL) vend88(3); } else if (jfile == 6) { strcpy(cdatei,"z88.dyn"); } else if (jfile == 9) { stop88v(); } else { if(LANG == 1) printf("Falsche Auswahl --> neue Taste: "); if(LANG == 2) printf("wrong choice --> once again: "); } } while(!(jfile == 5 || jfile == 1 || jfile == 2 || jfile == 4 || jfile == 3 || jfile == 6 || jfile == 9)); if(fdatei != NULL) rewind(fdatei); if(LANG == 1) printf("File %s geoeffnet ..\n",cdatei); if(LANG == 2) printf("file %s opened ..\n",cdatei); /********************************************************************** * je nach Wahl des Files Aktionen einleiten: **********************************************************************/ /*--------------------------------------------------------------------- * Z88NI.TXT und Z88I1.TXT *--------------------------------------------------------------------*/ if(jfile == 5 || jfile == 1) { /*===================================================================== * 1. Eingabegruppe *====================================================================*/ if(LANG == 1) printf("Checken der 1. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 1st input group ..\n"); ier= g1i188(); if (ier != 0) vend88(ier); /*===================================================================== * 2. Eingabegruppe *====================================================================*/ if(LANG == 1) printf("Checken der 2. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 2nd input group ..\n"); ier= g2i188(); if (ier != 0) vend88(ier); /*===================================================================== * 3. Eingabegruppe *====================================================================*/ if(LANG == 1) printf("Checken der 3. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 3rd input group ..\n"); ier= g3i188(); if (ier != 0) vend88(ier); /*===================================================================== * 4. Eingabegruppe *====================================================================*/ if(LANG == 1) printf("Checken der 4. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 4th input group ..\n"); ier= g4i188(); if (ier != 0) vend88(ier); if(ifnii1 == 0) iruni1= 1; /*===================================================================== * 5. Eingabegruppe, falls Z88NI.TXT *====================================================================*/ if(ifnii1 == 1) { if(LANG == 1) printf("Checken der 5. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 5th input group ..\n"); ier= g5i188(); if (ier != 0) vend88(ier); } } /*--------------------------------------------------------------------- * Z88I2.TXT *--------------------------------------------------------------------*/ else if (jfile == 2) { /*===================================================================== * 1. Eingabegruppe *====================================================================*/ if(iruni1 == 0) { if(LANG == 1) { printf("Bitte erst File Z88I1.TXT checken...\n"); printf("Weiter mit 1: "); } if(LANG == 2) { printf("please check file Z88I1.TXT first...\n"); printf("continue with 1: "); } FR_GETC(); goto LnextFile; } if(LANG == 1) printf("Checken der 1. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 1st input group ..\n"); ier= g1i288(); if (ier != 0) vend88(ier); /*===================================================================== * 2. Eingabegruppe *====================================================================*/ if(LANG == 1) printf("Checken der 2. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 2nd input group ..\n"); ier= g2i288(); if (ier != 0) vend88(ier); } /*--------------------------------------------------------------------- * Z88I3.TXT *--------------------------------------------------------------------*/ else if (jfile == 3) { if(iruni1 == 0) { if(LANG == 1) { printf("Bitte erst File Z88I1.TXT checken...\n"); printf("Weiter mit 1: "); } if(LANG == 2) { printf("please check file Z88I1.TXT first...\n"); printf("continue with 1: "); } FR_GETC(); goto LnextFile; } if(LANG == 1) printf("Checken der 1. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 1st input group ..\n"); ier= g1i388(); if (ier != 0) vend88(ier); } /*--------------------------------------------------------------------- * Z88I4.TXT *--------------------------------------------------------------------*/ else if (jfile == 4) { if(LANG == 1) printf("Checken der 1. Eingabegruppe ..\n"); if(LANG == 2) printf("checking 1st input group ..\n"); ier= g1i488(); if (ier != 0) vend88(ier); } /*--------------------------------------------------------------------- * Z88.DYN *--------------------------------------------------------------------*/ else if (jfile == 6) { clr88(); if(LANG == 1) { printf("\n\n\nDynamischen Memorybedarf fuer Z88-Module\n"); printf( "----------------------------------------\n\n"); } if(LANG == 2) { printf("\n\n\nDynamic Memory Needs for Z88 Programs\n"); printf( "-------------------------------------\n\n"); } /*---------------------------------------------------------------------- * Bildschirm loeschen + Ueberschrift *---------------------------------------------------------------------*/ if(MAXSE <= 0 || MAXESS <= 0 || MAXKSS <= 0 || MAXAN <= 0) { if(LANG == 1) printf("### Irgendein Wert in Gruppe NET <= 0..Stop\n"); if(LANG == 2) printf("### some value in group NET <= 0..stop\n"); vend88(2); } if(MAXGS <= 0 || MAXKOI <= 0 || MAXK <= 0 || MAXE <= 0 || MAXNFG <= 0 || MAXNEG <= 0) { if(LANG == 1) printf("### Irgendein Wert in Gruppe COMMON <= 0..Stop\n"); if(LANG == 2) printf("### some value in group COMMON <= 0..stop\n"); vend88(2); } if(MFACCOMMON <= 0 || MAXGP <= 0) { if(LANG == 1) printf("### Irgendein Wert in Gruppe PLOT <= 0..Stop\n"); if(LANG == 2) printf("### some value in group PLOT <= 0..stop\n"); vend88(2); } /*---------------------------------------------------------------------- * auswerten.. *---------------------------------------------------------------------*/ if(LANG == 1) printf("Z88.DYN definiert momentan folgende Speicherbedarfe:\n\n"); if(LANG == 2) printf("Z88.DYN currently defines the following memory needs:\n\n"); /*=====================================================================* * Z88F *=====================================================================*/ /* gs */ isumf = MAXGS * sizeof(FR_DOUBLE); /* rs,fak,ip */ isumf+= MAXNFG * (sizeof(FR_DOUBLE)*2 + sizeof(FR_INT4)); /* koi */ isumf+= MAXKOI * sizeof(FR_INT4); /* x,y,z,ifrei,ioffs */ isumf+= MAXK * (sizeof(FR_DOUBLE)*3 + sizeof(FR_INT4)*2); /* koffs,ityp */ isumf+= MAXE * (sizeof(FR_INT4)*2); /* emod,rnue,qpara,riyy,eyy,rizz,ezz,rit,wt,ivon,ibis,intord */ isumf+= MAXNEG * (sizeof(FR_DOUBLE)*9 + sizeof(FR_INT4)*3); isumf= isumf/1048576; printf(" Z88F : %12ld MegaBytes\n",isumf); /*=====================================================================* * Z88I1 *=====================================================================*/ isumi1 = (MAXSOR+1)*sizeof(struct FR_SIJ); /* IJ */ isumi1+= 3*(MAXK+1) *sizeof(FR_DOUBLE); /* x,y,z */ isumi1+= 3*(MAXNEG+1)*sizeof(FR_DOUBLE); /* emod, rnue, qpara */ isumi1+= (MAXNFG+1)*sizeof(FR_INT4); /* ip */ isumi1+= (MAXSOR+1)*sizeof(FR_INT4); /* iez */ isumi1+= (MAXKOI+1)*sizeof(FR_INT4); /* koi */ isumi1+= 2*(MAXK+1) *sizeof(FR_INT4); /* ifrei, ioffs */ isumi1+= 2*(MAXE+1) *sizeof(FR_INT4); /* koffs, ityp */ isumi1+= 3*(MAXNEG+1)*sizeof(FR_INT4); /* ivon,ibis,intord */ isumi1+= 6*(MAXNEG+1)*sizeof(FR_DOUBLE); /* riyy,eyy,rizz,ezz,rit,wt */ isumi1+= (MAXPUF+1)*sizeof(FR_INT4); /* kc */ isumi1/= 1048576; printf(" Z88I1 : %12ld MegaBytes\n",isumi1); /*=====================================================================* * Z88I2 *=====================================================================*/ isumi2 = (MAXGS+1) *sizeof(FR_DOUBLE); /* GS */ isumi2+= 7*(MAXNFG+1)*sizeof(FR_DOUBLE); /* rs,fak,xi,xa,v,pk,zz*/ isumi2+= 3*(MAXK+1) *sizeof(FR_DOUBLE); /* x,y,z */ isumi2+= 3*(MAXNEG+1)*sizeof(FR_DOUBLE); /* emod, rnue, qpara */ isumi2+= (MAXNFG+1)*sizeof(FR_INT4); /* ip */ isumi2+= (MAXGS+1) *sizeof(FR_INT4); /* iez */ isumi2+= (MAXKOI+1)*sizeof(FR_INT4); /* koi */ isumi2+= 2*(MAXK+1) *sizeof(FR_INT4); /* ifrei, ioffs */ isumi2+= 2*(MAXE+1) *sizeof(FR_INT4); /* koffs, ityp */ isumi2+= 3*(MAXNEG+1)*sizeof(FR_INT4); /* ivon,ibis,intord */ isumi2+= 6*(MAXNEG+1)*sizeof(FR_DOUBLE); /*riyy,eyy,rizz,ezz,rit,wt*/ isumi2/= 1048576; /* in MegaByte */ printf(" Z88I2 -S: %12ld MegaBytes\n",isumi2); isumi2+= (MAXGS+1) *sizeof(FR_DOUBLE) /1048576; /* CI */ printf(" Z88I2 -C: %12ld MegaBytes\n",isumi2); /*=====================================================================* * Z88X *=====================================================================*/ /* x,y,z,ifrei,ioffs */ isumx+= MAXK * (sizeof(FR_DOUBLE)*3 + sizeof(FR_INT4)*2); /* wert,nkn,ifg,irflag */ isumx+= MAXNFG * (sizeof(FR_DOUBLE) + sizeof(FR_INT4)*3); /* koi */ isumx+= MAXKOI * sizeof(FR_INT4); /* koffs,ityp,itypfe,jel,iel,kel */ isumx+= MAXE * (sizeof(FR_INT4)*6); /* emod,rnue,qpara,riyy,eyy,rizz,ezz,rit,wt,ivon,ibis,intord */ isumx+= MAXNEG * (sizeof(FR_DOUBLE)*9 + sizeof(FR_INT4)*3); isumx= isumx/1048576; printf(" Z88X : %12ld MegaBytes\n",isumx); /*=====================================================================* * Z88N *=====================================================================*/ isumn = MAXSE * (sizeof(FR_DOUBLE)*3 + sizeof(FR_INT4));; isumn+= MAXESS * (sizeof(FR_DOUBLE) + sizeof(FR_INT4)*MAXAN + sizeof(FR_INT4)*25 + sizeof(char)*3); isumn+= MAXKSS * (sizeof(FR_DOUBLE)*3); isumn+= MAXNEG * (sizeof(FR_DOUBLE)*2 + sizeof(FR_INT4)*5); isumn= isumn/1048576; printf(" Z88N : %12ld MegaBytes\n",isumn); /*=====================================================================* * Z88P *=====================================================================*/ isump = MAXK * MFACCOMMON * (sizeof(FR_DOUBLE)*6 + sizeof(FR_INT4)*2); isump+= MAXE * MFACCOMMON * sizeof(FR_INT4)*2; isump+= MAXKOI * MFACCOMMON * sizeof(FR_INT4); isump+= MAXGP * (sizeof(FR_DOUBLE)*4 + sizeof(FR_INT4)*2); isump= isump/1048576; printf(" Z88P : %12ld MegaBytes\n\n",isump); if(LANG == 1) { printf("Stellen Sie sicher, dass der virtuelle Speicher Ihres Computers\n"); printf("den hoechsten Wert abdeckt. Sonst Werte in Z88.DYN erniedrigen\n"); } if(LANG == 2) { printf("make sure that virtual memory of your computer covers the\n"); printf("highest value. otherwise decrease values in file Z88.DYN\n\n"); } } /* Ende Z88.DYN */ /********************************************************************** * Ende Z88V ohne Fehler **********************************************************************/ vend88(0); goto LnextFile; return (0); }