MNQM.C
资源名称:C.rar [点击查看]
上传用户:qq5388545
上传日期:2022-07-04
资源大小:29849k
文件大小:7k
源码类别:

界面编程

开发平台:

C/C++

  1. #include "string.h"
  2. #include "alloc.h"
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. #include "io.h"
  6. int nelement,nnode,nsum_node;
  7. struct elems
  8. {
  9. int nedge;
  10. float x[4],y[4];
  11. float s11[4],s22[4],s12[4];
  12. }*elem_stress;
  13. void main(argc,argv)
  14.   int argc; char *argv[];
  15.  {
  16.  FILE *fs,*fc,*fj;
  17.  int i,j,nelement,nnode,l,have=0,num,numk,numl,fast=0,ielement,nmat,gap=0;
  18.  char str[100],coname[80],cname[80],sname[80],str1[20];
  19.  float y1,z1;
  20.  float *coora[2];
  21.  int *element[4];
  22.  struct coors{
  23.     int numj;
  24.     float y,z;
  25. /*    float s11,s22,s12;*/
  26.     }*coor_stress;
  27.  if(argc<4)
  28. {
  29. for(i=0;i<3;i++)
  30.  {
  31.  switch(i)
  32. {
  33. case 0:strcpy(str1,"control");break;
  34. case 1:strcpy(str1,"element");break;
  35. case 2:strcpy(str1,"stress");break;
  36. }
  37.  for(;;)
  38. {
  39. /*/gotoxy(wherex()-15,wherey()-1);*/
  40. printf("input %s data filename (<CR> TO QUIT):",str1);
  41. gets(str);
  42. if(str[0]=='')
  43. /*/exit(0);*/
  44. return;
  45. else if(access(str,0)==0)
  46.   {
  47. if(i!=2) break;
  48.   else
  49. {
  50. /*/gotoxy(wherex()-15,wherey());*/
  51. printf("               ");
  52. break;
  53. }
  54.   }
  55. else printf("afile not found!");
  56. }
  57.  switch(i)
  58. {
  59. case 0:strcpy(coname,str);break;
  60. case 1:strcpy(cname,str);break;
  61. case 2:strcpy(sname,str);break;
  62. }
  63.  }
  64. }
  65.  else
  66. {
  67. strcpy(coname,argv[1]);
  68. strcpy(cname,argv[2]);
  69. strcpy(sname,argv[3]);
  70. }
  71. /*/ clrscr();*/
  72.  /*read nnodem,nelement*/
  73.  if((fj=fopen(coname,"r"))==NULL)
  74. {
  75. printf("aopen failed");
  76. exit(0);
  77. }
  78.  fscanf(fj,"%d%d",&nnode,&nelement);
  79.  fclose(fj);
  80.  if((fj=fopen(cname,"r"))==NULL) /*cooresponding node and element file*/
  81. {
  82. printf("aopen failed");
  83. exit(0);
  84. }
  85.   if((fc=fopen(cname,"r"))==NULL) /*corradate file*/
  86. {
  87. printf("aopen failed");
  88. exit(0);
  89. }
  90.  if((fs=fopen(sname,"r"))==NULL) /*stress file*/
  91. {
  92. printf("aopen failed");
  93. exit(0);
  94. }
  95.  /*allocate memory*/
  96.  fgets(str,100,fj);
  97.  fscanf(fj,"%d",&nsum_node);
  98.  fgets(str,100,fj);
  99.  for(i=0;i<2;i++)
  100. {
  101. if((coora[i]=(float *)malloc(sizeof(float)*nsum_node))!=NULL)
  102. fast=1;
  103. else
  104. {
  105. printf("antoo many node; Do you want to continue(y/n)");
  106. if((getchar())=='y')
  107. fast=0;
  108. else
  109. exit(0);
  110. }
  111. }
  112.  if(fast)
  113. {
  114. printf("nreading cooradation information......");
  115. for(i=0;i<nsum_node;i++)
  116. {
  117. float y1,z1;
  118. if(fscanf(fj,"%d",&num)==EOF)
  119. {
  120. break;
  121. }
  122. fgets(str,30,fj);
  123. fscanf(fj,"%f%f",&y1,&z1);
  124. coora[0][i]=y1;coora[1][i]=z1;
  125. /*              printf(" %d, %.5f, %.5fn",i,coora[0][i],coora[1][i]);*/
  126. fgets(str,100,fj);
  127. }
  128. }
  129.  if(!fast)
  130. {
  131. if((coor_stress=(struct coors *)malloc(sizeof(struct coors)*nnode))==NULL)
  132. {printf("anot enough memory (coor_stress)");
  133.  exit(0);
  134. }
  135. }
  136.  for(i=0;i<4;i++)
  137.  if((element[i]=(int *)malloc(sizeof(int)*nelement))==NULL)
  138. {printf("anot enough memory (element %d)",i);
  139.  exit(0);
  140.  }
  141.   nnode=0;
  142. if(fast)
  143. {
  144. fscanf(fj,"%d",&ielement);
  145. fscanf(fj,"%d",&ielement);
  146. fscanf(fj,"%d",&nmat);
  147. fgets(str,100,fj);
  148. for(i=0;i<nmat;i++)     /*nmat number of material class*/
  149. {
  150. printf("nreading material %d information of group 1",i+1);
  151. for(j=0;j<3;j++)
  152. fgets(str,100,fj);
  153. }
  154. printf("nreading element information of group 1");
  155. for(i=0;i<ielement+4;i++)
  156. {
  157. fgets(str,100,fj);
  158. }
  159. fscanf(fj,"%d",&ielement);
  160. if(ielement==14)        /*exist gap element*/
  161. {
  162. gap=1;
  163. printf("nreading gap data......");
  164. fscanf(fj,"%d",&ielement);
  165. fgets(str,100,fj);
  166. for(i=0;i<ielement+6;i++)
  167. fgets(str,100,fj);
  168. }
  169. if(gap)
  170. fscanf(fj,"%d",&ielement);
  171. fscanf(fj,"%d",&ielement);
  172. for(i=0;i<8;i++)
  173. fgets(str,100,fj);
  174. }
  175. else
  176. {
  177. rewind(fj);
  178. fgets(str,100,fj);
  179. fscanf(fj,"%d",&ielement);
  180. fgets(str,100,fj);
  181. for(i=0;i<ielement+1;i++)
  182. fgets(str,100,fj);
  183. fscanf(fj,"%d",&ielement);
  184. fscanf(fj,"%d",&ielement);
  185. fscanf(fj,"%d",&nmat);
  186. fgets(str,100,fj);
  187. for(i=0;i<nmat;i++)     /*nmat number of material class*/
  188. for(j=0;j<3;j++)
  189. fgets(str,100,fj);
  190. for(i=0;i<ielement+4;i++)
  191. fgets(str,100,fj);
  192. fscanf(fj,"%d",&ielement);
  193. fscanf(fj,"%d",&ielement);
  194. fgets(str,100,fj);
  195. for(i=0;i<ielement+6;i++)
  196. fgets(str,100,fj);
  197. fscanf(fj,"%d",&ielement);
  198. fscanf(fj,"%d",&ielement);
  199. for(i=0;i<8;i++)
  200. fgets(str,100,fj);
  201. }
  202.   if(ielement!=nelement)
  203. {
  204. printf("anlining element number error!");
  205. exit(0);
  206. }
  207.   printf("nreading element information of group 2");
  208.   for(ielement=0;ielement<nelement;ielement++)
  209.   {
  210.    if(fscanf(fj,"%d",&i)==EOF) break;
  211.    for(i=0;i<4;i++)
  212. {
  213. fscanf(fj,"%d",&element[i][ielement]);
  214. if(!fast)
  215.   {
  216.   coor_stress[nnode].numj=element[i][ielement];
  217.   have=0;
  218.   /*decide the existance  this nodes cooradates:YES:have=1;NO: have=0*/
  219.   for(l=0;l<nnode;l++)
  220. {
  221.  numk=(coor_stress[nnode].numj);
  222.  numl=(coor_stress[l].numj);
  223.  if(numk==numl)
  224.    {
  225.     have=1;
  226.     break;
  227.     }
  228.  }
  229.   /*if no this node's  cooradates,then search and record it*/
  230.   if(!have)
  231.       {
  232.       for(;;)
  233.   {
  234.   /*read node */
  235. fgets(str,100,fc);
  236. fgets(str,100,fc);
  237.   if(fscanf(fc,"%d",&num)==EOF)
  238. {
  239. rewind(fc);
  240. fgets(str,100,fc);
  241. fgets(str,100,fc);
  242. fscanf(fc,"%d",&num);
  243. }
  244.  /*decide if needed*/
  245.  if(num==coor_stress[nnode].numj)
  246.    {
  247.    fgets(str,30,fc);
  248.    fscanf(fc,"%f%f",&y1,&z1);
  249. /*   printf(" %d, %.5f, %.5fn",coor_stress[nnode].numj,y1,z1);*/
  250.    (coor_stress[nnode].y)=y1;(coor_stress[nnode].z)=z1;
  251.    fgets(str,100,fc);
  252.    nnode++;
  253.    break;
  254.    }
  255. /*skip the rest string*/
  256.  else fgets(str,100,fc);
  257.  }/*end search*/
  258.        }/*end record*/
  259.       }
  260.   }/*end of the current element*/
  261.    fgets(str,100,fj);
  262.    }/*end of all element*/
  263.  /*printf("%d %d",nnode,ielement);
  264.  getch();                         */
  265.  fclose(fj);
  266.  fclose(fc);
  267.  if((elem_stress=(struct elems *)malloc(sizeof(struct elems)*nelement))==NULL)
  268. {printf("annot enough memory");
  269.  exit(0);
  270.  }
  271.  rewind(fs);
  272.  numk=0;
  273.  printf("nsearching stress data.....");
  274.  for(;;)
  275. {
  276. fgets(str,100,fs);
  277. if(stricmp(str,"               Sigma-Intn")==0)
  278. numk++;
  279. if(numk==2) break;
  280. }
  281.   fgets(str,100,fs);
  282.   printf("nreading stress data......");
  283.  for(numk=0;numk<nelement;numk++)
  284. {
  285. if(element[2][numk]==element[3][numk]) have=3;
  286. else have=4;
  287. elem_stress[numk].nedge=have;
  288. for(i=0;i<have;i++)
  289. {
  290. int inode,in;
  291. inode=element[i][numk];
  292. if(!fast)
  293.   {
  294.   for(in=0;in<nnode;in++)
  295. {
  296. if(inode==coor_stress[in].numj)
  297. {
  298. elem_stress[numk].x[i]=coor_stress[in].y;
  299. elem_stress[numk].y[i]=coor_stress[in].z;
  300. break;
  301. }
  302. }
  303.     }
  304. else
  305.    {
  306.     elem_stress[numk].x[i]=coora[0][inode-1];
  307.     elem_stress[numk].y[i]=coora[1][inode-1];
  308.    }
  309. {
  310. printf(" %d %d",numk,elem_stress[numk].nedge);
  311. printf(" %.2f %.2f",elem_stress[numk].x[i],elem_stress[numk].y[i]);
  312.  }
  313. fscanf(fs,"%d",&numl);
  314. if(numl!=numk+1)
  315. {
  316. printf("anstress data file read error!");
  317. exit(0);
  318. }
  319. fgets(str,9,fs);
  320. fscanf(fs,"%f%f",&y1,&z1);
  321. elem_stress[numk].s11[i]=y1;
  322. elem_stress[numk].s22[i]=z1;
  323. printf(" %f %f",elem_stress[numk].s11[i],elem_stress[numk].s22[i]);
  324. fscanf(fs,"%f%f",&y1,&z1);
  325. elem_stress[numk].s12[i]=z1;
  326. printf(" %f",elem_stress[numk].s12[i]);
  327. fgets(str,100,fs);
  328. fgets(str,100,fs);
  329. printf("n");
  330. }
  331. }
  332.  fclose(fs);
  333.  if((fj=fopen("test.dat","wb"))==NULL)
  334. {
  335. printf("aopen failed");
  336. exit(0);
  337. }
  338.  fwrite(&nelement,sizeof(int),1,fj);
  339.  fwrite(elem_stress,sizeof(struct elems)*nelement,1,fj);
  340.  fclose(fj);
  341.  if(!fast)
  342. free((void *)elem_stress);
  343.  else
  344. {
  345. for(i=0;i<2;i++)
  346. free((void *)coora[i]);
  347. }
  348.  for(i=0;i<4;i++)
  349. free((void *)element[i]);
  350.  free((void *)coor_stress);
  351.  }