📄 mnqm.c
字号:
#include "string.h"
#include "alloc.h"
#include "stdio.h"
#include "stdlib.h"
#include "io.h"
int nelement,nnode,nsum_node;
struct elems
{
int nedge;
float x[4],y[4];
float s11[4],s22[4],s12[4];
}*elem_stress;
void main(argc,argv)
int argc; char *argv[];
{
FILE *fs,*fc,*fj;
int i,j,nelement,nnode,l,have=0,num,numk,numl,fast=0,ielement,nmat,gap=0;
char str[100],coname[80],cname[80],sname[80],str1[20];
float y1,z1;
float *coora[2];
int *element[4];
struct coors{
int numj;
float y,z;
/* float s11,s22,s12;*/
}*coor_stress;
if(argc<4)
{
for(i=0;i<3;i++)
{
switch(i)
{
case 0:strcpy(str1,"control");break;
case 1:strcpy(str1,"element");break;
case 2:strcpy(str1,"stress");break;
}
for(;;)
{
/*/gotoxy(wherex()-15,wherey()-1);*/
printf("input %s data filename (<CR> TO QUIT):",str1);
gets(str);
if(str[0]=='\0')
/*/exit(0);*/
return;
else if(access(str,0)==0)
{
if(i!=2) break;
else
{
/*/gotoxy(wherex()-15,wherey());*/
printf(" ");
break;
}
}
else printf("\afile not found!");
}
switch(i)
{
case 0:strcpy(coname,str);break;
case 1:strcpy(cname,str);break;
case 2:strcpy(sname,str);break;
}
}
}
else
{
strcpy(coname,argv[1]);
strcpy(cname,argv[2]);
strcpy(sname,argv[3]);
}
/*/ clrscr();*/
/*read nnodem,nelement*/
if((fj=fopen(coname,"r"))==NULL)
{
printf("\aopen failed");
exit(0);
}
fscanf(fj,"%d%d",&nnode,&nelement);
fclose(fj);
if((fj=fopen(cname,"r"))==NULL) /*cooresponding node and element file*/
{
printf("\aopen failed");
exit(0);
}
if((fc=fopen(cname,"r"))==NULL) /*corradate file*/
{
printf("\aopen failed");
exit(0);
}
if((fs=fopen(sname,"r"))==NULL) /*stress file*/
{
printf("\aopen failed");
exit(0);
}
/*allocate memory*/
fgets(str,100,fj);
fscanf(fj,"%d",&nsum_node);
fgets(str,100,fj);
for(i=0;i<2;i++)
{
if((coora[i]=(float *)malloc(sizeof(float)*nsum_node))!=NULL)
fast=1;
else
{
printf("\a\ntoo many node; Do you want to continue(y/n)");
if((getchar())=='y')
fast=0;
else
exit(0);
}
}
if(fast)
{
printf("\nreading cooradation information......");
for(i=0;i<nsum_node;i++)
{
float y1,z1;
if(fscanf(fj,"%d",&num)==EOF)
{
break;
}
fgets(str,30,fj);
fscanf(fj,"%f%f",&y1,&z1);
coora[0][i]=y1;coora[1][i]=z1;
/* printf(" %d, %.5f, %.5f\n",i,coora[0][i],coora[1][i]);*/
fgets(str,100,fj);
}
}
if(!fast)
{
if((coor_stress=(struct coors *)malloc(sizeof(struct coors)*nnode))==NULL)
{printf("\anot enough memory (coor_stress)");
exit(0);
}
}
for(i=0;i<4;i++)
if((element[i]=(int *)malloc(sizeof(int)*nelement))==NULL)
{printf("\anot enough memory (element %d)",i);
exit(0);
}
nnode=0;
if(fast)
{
fscanf(fj,"%d",&ielement);
fscanf(fj,"%d",&ielement);
fscanf(fj,"%d",&nmat);
fgets(str,100,fj);
for(i=0;i<nmat;i++) /*nmat number of material class*/
{
printf("\nreading material %d information of group 1",i+1);
for(j=0;j<3;j++)
fgets(str,100,fj);
}
printf("\nreading element information of group 1");
for(i=0;i<ielement+4;i++)
{
fgets(str,100,fj);
}
fscanf(fj,"%d",&ielement);
if(ielement==14) /*exist gap element*/
{
gap=1;
printf("\nreading gap data......");
fscanf(fj,"%d",&ielement);
fgets(str,100,fj);
for(i=0;i<ielement+6;i++)
fgets(str,100,fj);
}
if(gap)
fscanf(fj,"%d",&ielement);
fscanf(fj,"%d",&ielement);
for(i=0;i<8;i++)
fgets(str,100,fj);
}
else
{
rewind(fj);
fgets(str,100,fj);
fscanf(fj,"%d",&ielement);
fgets(str,100,fj);
for(i=0;i<ielement+1;i++)
fgets(str,100,fj);
fscanf(fj,"%d",&ielement);
fscanf(fj,"%d",&ielement);
fscanf(fj,"%d",&nmat);
fgets(str,100,fj);
for(i=0;i<nmat;i++) /*nmat number of material class*/
for(j=0;j<3;j++)
fgets(str,100,fj);
for(i=0;i<ielement+4;i++)
fgets(str,100,fj);
fscanf(fj,"%d",&ielement);
fscanf(fj,"%d",&ielement);
fgets(str,100,fj);
for(i=0;i<ielement+6;i++)
fgets(str,100,fj);
fscanf(fj,"%d",&ielement);
fscanf(fj,"%d",&ielement);
for(i=0;i<8;i++)
fgets(str,100,fj);
}
if(ielement!=nelement)
{
printf("\a\nlining element number error!");
exit(0);
}
printf("\nreading element information of group 2");
for(ielement=0;ielement<nelement;ielement++)
{
if(fscanf(fj,"%d",&i)==EOF) break;
for(i=0;i<4;i++)
{
fscanf(fj,"%d",&element[i][ielement]);
if(!fast)
{
coor_stress[nnode].numj=element[i][ielement];
have=0;
/*decide the existance this nodes cooradates:YES:have=1;NO: have=0*/
for(l=0;l<nnode;l++)
{
numk=(coor_stress[nnode].numj);
numl=(coor_stress[l].numj);
if(numk==numl)
{
have=1;
break;
}
}
/*if no this node's cooradates,then search and record it*/
if(!have)
{
for(;;)
{
/*read node */
fgets(str,100,fc);
fgets(str,100,fc);
if(fscanf(fc,"%d",&num)==EOF)
{
rewind(fc);
fgets(str,100,fc);
fgets(str,100,fc);
fscanf(fc,"%d",&num);
}
/*decide if needed*/
if(num==coor_stress[nnode].numj)
{
fgets(str,30,fc);
fscanf(fc,"%f%f",&y1,&z1);
/* printf(" %d, %.5f, %.5f\n",coor_stress[nnode].numj,y1,z1);*/
(coor_stress[nnode].y)=y1;(coor_stress[nnode].z)=z1;
fgets(str,100,fc);
nnode++;
break;
}
/*skip the rest string*/
else fgets(str,100,fc);
}/*end search*/
}/*end record*/
}
}/*end of the current element*/
fgets(str,100,fj);
}/*end of all element*/
/*printf("%d %d",nnode,ielement);
getch(); */
fclose(fj);
fclose(fc);
if((elem_stress=(struct elems *)malloc(sizeof(struct elems)*nelement))==NULL)
{printf("\a\nnot enough memory");
exit(0);
}
rewind(fs);
numk=0;
printf("\nsearching stress data.....");
for(;;)
{
fgets(str,100,fs);
if(stricmp(str," Sigma-Int\n")==0)
numk++;
if(numk==2) break;
}
fgets(str,100,fs);
printf("\nreading stress data......");
for(numk=0;numk<nelement;numk++)
{
if(element[2][numk]==element[3][numk]) have=3;
else have=4;
elem_stress[numk].nedge=have;
for(i=0;i<have;i++)
{
int inode,in;
inode=element[i][numk];
if(!fast)
{
for(in=0;in<nnode;in++)
{
if(inode==coor_stress[in].numj)
{
elem_stress[numk].x[i]=coor_stress[in].y;
elem_stress[numk].y[i]=coor_stress[in].z;
break;
}
}
}
else
{
elem_stress[numk].x[i]=coora[0][inode-1];
elem_stress[numk].y[i]=coora[1][inode-1];
}
{
printf(" %d %d",numk,elem_stress[numk].nedge);
printf(" %.2f %.2f",elem_stress[numk].x[i],elem_stress[numk].y[i]);
}
fscanf(fs,"%d",&numl);
if(numl!=numk+1)
{
printf("\a\nstress data file read error!");
exit(0);
}
fgets(str,9,fs);
fscanf(fs,"%f%f",&y1,&z1);
elem_stress[numk].s11[i]=y1;
elem_stress[numk].s22[i]=z1;
printf(" %f %f",elem_stress[numk].s11[i],elem_stress[numk].s22[i]);
fscanf(fs,"%f%f",&y1,&z1);
elem_stress[numk].s12[i]=z1;
printf(" %f",elem_stress[numk].s12[i]);
fgets(str,100,fs);
fgets(str,100,fs);
printf("\n");
}
}
fclose(fs);
if((fj=fopen("test.dat","wb"))==NULL)
{
printf("\aopen failed");
exit(0);
}
fwrite(&nelement,sizeof(int),1,fj);
fwrite(elem_stress,sizeof(struct elems)*nelement,1,fj);
fclose(fj);
if(!fast)
free((void *)elem_stress);
else
{
for(i=0;i<2;i++)
free((void *)coora[i]);
}
for(i=0;i<4;i++)
free((void *)element[i]);
free((void *)coor_stress);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -