勤杂工 发表于 2014-4-3 15:10:12

提取ansys单元刚度矩阵

因研究需要,试图从ansys中提取刚度矩阵。参照王新敏老师编写的《ANSYS工程结构数值分析》,在命令流中加入/debug语句即可以将所有单元的刚度矩阵输出到自定义输出文件elemstiff.txt之中。    /solu    /output,elemstiff,txt    /debug,-1,,,1   solve    /output然而elemstiff.txt里面并非只是单元刚度矩阵的数值,还有很多文字信息。如下图所示,只有红色框内是第1个单元的刚度矩阵,以下为其它单元的刚度阵。这种情况与很久以前我尝试进行SAP90结果文件后处理类似,那时是用C实现的,现在改用C#。显然,C#的string使得读取字符串、识别和删除子字符串、字符串与数字转换等操作相比于C/C++变得容易多了。选择C#也使得非专业的程序写手只能苟安于Windows平台的Visual Studio了。      //单元刚度矩阵提取   public void ReadStiffness()   {         string filename = workpath + "elemstiff.txt";         StreamReader rd = new StreamReader(filename);         while (!rd.EndOfStream)         {            string tmp = rd.ReadLine();            int s = tmp.IndexOf("STIFFNESS MATRIX FOR ELEMENT"; // 寻找含子字符串的一行文字            double[,] k = new double;            int enumber = 0;            if (s == 6) // 子字符串的起始位置为6,这当然是观察到单元刚度矩阵部分的特征            {             string ss = tmp.Remove(0, 34); //去掉文件部分,34是子字符串结束的位置,识别后即可去掉,仅留下单元号。             enumber = int.Parse(ss); //单元号转为整数             for (int i = 0; i < 6; i++) //读接下来的6行矩阵数值             {               tmp = rd.ReadLine();               tmp = tmp.Remove(0, 4); //去除前4位子串               for (int j = 0; j < 6; j++) // 逐一提取当前行矩阵元素数值               {                  int pos = tmp.IndexOf('E'); //从字符串中寻找字符'E',这是每个矩阵元素的特征                  string substring = tmp.Substring(0, pos + 4);   //提取当前字符串中第1个数值                  k = double.Parse(substring);                  tmp = tmp.Remove(0, pos + 4); //去掉当前字符串中第1个数值               }            }             //单元刚度矩阵赋值             foreach (Stage istage in stages)             {               foreach (Element iele in istage.element)               {                  if (iele.nNumber == enumber)                  {                     iele.GetStiffness(k, 6, 6);    //将刚度矩阵传递给单元对象。当然,这里只是简陋地假定刚度阵是6×6的,其实是可以在读取时就确定刚度阵的维数的。限于时间,没有理会这个问题。                     goto EXIT;                  }               }             }            EXIT:             continue;            }         }         rd.Close();         return;   }

纯彩春丘 发表于 2014-4-25 09:30:46

谢谢分享~

鲁志立 发表于 2014-5-5 22:33:54

非常好1
页: [1]
查看完整版本: 提取ansys单元刚度矩阵