查看: 81|回复: 0|关注: 0

[未答复] 这是死循环吗?FORTRAN语言程序,主要内容是把ANSYS生成的 .out文件转成Matlab可以读取的 .txt文件

[复制链接]

新手

8 麦片

财富积分


050


4

主题

12

帖子

0

最佳答案
发表于 7 天前 | 显示全部楼层 |阅读模式
这是个FORTRAN语言程序,主要内容是把ANSYS生成的 .out文件转成Matlab可以读取的 .txt文件。

但是我一运行这程序就停不下来了。。。。是进入死循环了吗?????我该咋办?怎么修改呢。。。无从下手

这个程序我是在《在Ansys和matlab中实现单元刚度矩阵等数据共享的方法研究》这篇论文里看到的,完完全全抄下来的,但是却运行不出结果,好奇怪啊!!
这篇论文在豆瓣上有。

程序用到的源文件cp.out在本文附录里。

  1. function ret = read_ansys()
  2. close all;clear all;clc;
  3. fid = fopen( 'F:\ANSYS working directory\cp3.out','r');
  4. %打开ansys软件文件储存目录中的cp3.out文件
  5. while 1    %不知道是不是这里死循环了???
  6.     dummy = fgetl(fid);
  7.     if isempty(dummy) && ischar(dummy)
  8.         t = deblank(strtrim(dummy));
  9.     else
  10.         continue;
  11.     end     %去除cp3.out中的空格
  12.     if length(t) > 28 && strcmp(t(1:28),'STIFFNESS MATRIX FOR ELEMENT') == 1
  13.         ne = str2num(t(30:end));
  14.         [K{ne}] = readMK(fid);%disp('I got K it');
  15.     end
  16.     if length(t) > 23 && strcmp(t(1:23),'MASS MATRIX FOR ELEMENT') == 1
  17.         ne = str2num(t(30:end));
  18.         [M{ne}] = readMK(fid);%disp('I got M it');
  19.     end
  20.     if length(t) >= 13 && strcmp(t(1:13),'Solution is done!') == 1
  21.         disp('finished');
  22.         break;
  23.     end
  24.     if length(t) >= 26 && strcmp(t(1:26),'FINISH SOLUTION PROCESSING') == 1
  25.         disp('finished');
  26.         break;
  27.     end
  28. end     %end of while
  29. fclose(fid);
  30. %去除cp3.out中英文注释
  31. fout = fopen( 'F:\ANSYS working directory\D1.txt','w');
  32. NE = max(size(M));
  33. for ne = 1:NE
  34.     D = M{ne};
  35.     [m,n] = size(D);
  36.     for i = 1:1:m
  37.         for j = 1:1:n
  38.             if j == n   %如果一行个数达到n则换行,否则空格
  39.                 fprintf(fid,'%8.7E\n',D(i,j));
  40.             else
  41.                 fprintf(fid,'%8.7E, ',D(i,j));
  42.             end
  43.         end %end of n
  44.     end %end of m
  45. end %end of ne
  46. %把质量矩阵写入fid文件

  47. for ne = 1:NE
  48.     F = K{ne};
  49.     [mm,nn] = size(F)
  50.     for i = 1:1:mm
  51.         for j = 1:1:nn
  52.             if j == nn   %如果一行个数达到n则换行,否则空格
  53.                 fprintf(fid,'%8.7E\n',F(i,j));
  54.             else
  55.                 fprintf(fid,'%8.7E, ',F(i,j));
  56.             end
  57.         end %end of nn
  58.     end %end of mm
  59. end %end of ne
  60. %把刚度矩阵写入fid文件

  61. fclose(fout);
  62. end
  63. %
  64. %
  65. function[MK] = readMK(fin)
  66.     MK = zeros(8,8);
  67.     for I=1:8
  68.         dummy = fgetl(fin);%first row
  69.         data = str2num(dummy);
  70.         MK(I,1:6) = data(2:7);
  71.         dummy = fgetl(fin);%second row
  72.         data = str2num(dummy);
  73.         MK(I,7:8) = data(1:2);
  74.         %注意数组data和MK中元素排列方式异同,data数组代表out文件中数据
  75.     end
  76.     %MK数组便是要写入D1.txt文件中的部分内容,它是8*8矩阵,代表质量或刚度矩阵
  77. return
  78. end

复制代码

cp3.rar

541.08 KB, 下载次数: 0

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表