ansys / pymapdl

Pythonic interface to MAPDL
https://mapdl.docs.pyansys.com
MIT License
433 stars 121 forks source link

Retreiving section ID, data and material data from rst file #209

Closed Roehrich closed 4 years ago

Roehrich commented 4 years ago

Hi,

I was able to read nodal stresses of layered SHELL elements without any problems from a rst file. Really great! Is there a possibility for postprocessing purpose to get as well the corresponding section ID? I saw that load_elements from the _binary_reader should be able to get this but the data is currently skipped. There is a working alternative to read the data from the .cdb file. But for that I would need to write a cdb file from Workbench - the dat file seems to be not readable. To get all the data from rst file would be a much nicer approach I think. Further I would need to read the section data and the corresponding material data to be able to perform the postprocessing. I was not able to find a way for that - is there a possibility?

Thanks a lot for your help and the great work!

akaszynski commented 4 years ago

Nice source diving to see that I'm skipping the section data. I can add that in. Would you mind posting a result file here so I can include it for my unit testing? The smaller the better, and if you wouldn't mind including the expected output from MAPDL that would be helpful as well.

Roehrich commented 4 years ago

Thanks for your reply! I will send the data on Monday.

Roehrich commented 4 years ago

Hi, find attached a very small rst file, the corresponding input file as well as the expected output from MAPDL. Please let me know if you need any additional information. SHELL281.zip

akaszynski commented 4 years ago

Thanks for the sample file, it's exactly what I need to work on this.

ANSYS really buries the material properties and doesn't label everything. Still, making progress, and I should have something in a few days.

Roehrich commented 4 years ago

Hi, perfect - thanks for your efforts!

akaszynski commented 4 years ago

I've gotten the material properties working. There was enough information in the ANSYS header files included in the install that I could interpret the results for all material properties:

rst = pyansys.read_binary('file.rst')
rst.materials
{1: {'EX': 40000000000.0,
  'EY': 10000000000.0,
  'EZ': 10000000000.0,
  'NUXY': 0.07500000000000001,
  'NUYZ': 0.30000000000000004,
  'NUXZ': 0.07500000000000001,
  'GXY': 5000000000.0,
  'GYZ': 5000000000.0,
  'GXZ': 5000000000.0,
  'PRXY': 0.30000000000000004,
  'PRYZ': 0.30000000000000004,
  'PRXZ': 0.30000000000000004},
 2: {'EX': 40000000000.0,
  'EY': 10000000000.0,
  'EZ': 10000000000.0,
  'NUXY': 0.07500000000000001,
  'NUYZ': 0.30000000000000004,
  'NUXZ': 0.07500000000000001,
  'GXY': 5000000000.0,
  'GYZ': 5000000000.0,
  'GXZ': 5000000000.0,
  'PRXY': 0.30000000000000004,
  'PRYZ': 0.30000000000000004,
  'PRXZ': 0.30000000000000004}}

However, it's a different story for the section data. Here's the raw output I've been able to read in:

for i, item in enumerate(rst.section_data[3]): print('%3d' % i, item)
  0 2.0
  1 538976288.0
  2 538976288.0
  3 0.003
  4 3.0
  5 9.0
  6 3.0
  7 1.0
  8 1.0
  9 0.0
 10 0.7825633252851375
 11 -1.103929041252917e-18
 12 0.6265587724551406
 13 1.0
 14 0.0
 15 0.0
 16 0.0
 17 0.0
 18 0.0
 19 0.0
 20 0.0
 21 0.0
 22 0.0
 23 1.0
 24 1.0
 25 1.0
 26 1.0
 27 0.0
 28 0.0
 29 0.001
 30 2.0
 31 0.0
 32 3.0
 33 0.001
 34 2.0
 35 45.0
 36 3.0
 37 0.001
 38 2.0
 39 -45.0
 40 3.0
 41 2.0
 42 2.0
 43 2.0
 44 2.0
 45 2.0
 46 2.0
 47 2.0
 48 2.0
 49 2.0
 50 1.0
 51 1.0
 52 1.0
 53 2.0
 54 2.0
 55 2.0
 56 3.0
 57 3.0
 58 3.0
 59 0.0
 60 0.0
 61 0.0
 62 45.0
 63 45.0
 64 45.0
 65 -45.0
 66 -45.0
 67 -45.0
 68 0.1111111111111111
 69 0.4444444444444444
 70 0.1111111111111111
 71 0.1111111111111111
 72 0.4444444444444444
 73 0.1111111111111111
 74 0.1111111111111111
 75 0.4444444444444444
 76 0.1111111111111111
 77 -1.0
 78 -0.6666666666666666
 79 -0.3333333333333333
 80 -0.3333333333333333
 81 0.0
 82 0.3333333333333333
 83 0.3333333333333333
 84 0.6666666666666666
 85 1.0
 86 -2.2205146933576494e-17
 87 0.5438245756189379
 88 0.784905128619397
 89 0.784905128619397
 90 0.7491814833845594
 91 0.5729093986365412
 92 0.5729093986365411
 93 0.3384154725112908
 94 -1.3372214807262066e-16
 95 -9.962450570801805e-18
 96 0.38281646048078116
 97 0.6298052964038664
 98 0.6298052964038664
 99 0.8837920249365444
100 0.8687141075226417
101 0.8687141075226417
102 0.5470920816260001
103 -1.4634568481518775e-17
104 0.0

Here's what I've been able to interpret so far:

# sec[3] # total thickness
# sec[4] # number of layers (?)
# sec[5] # total integration points (?)
# ...
# sec[29] # start of a layer (thickness)
# - MatID
# - Ori. Angle
# - Num Intg.
# sec[33] # start of another layer
# sec[37] # start of another layer

These indices probably only work for this section type (which I'm not sure where it's defined in the section data). Will these work for you? I'd really like to list the section data as a dictionary as with the result data, but there's no information in the header files about how the section data is written out.

Roehrich commented 4 years ago

Great work - Thanks a lot for the tremendous effort! I had some problems compiling the code but now it's working perfectly. Do you have an idea if the failure critieria data for the materials (see tblist,fcli,... in MAPDL.inp) could be accessed, too?