missing node stress when using read_op2()

88 views
Skip to first unread message

josh beal

unread,
Sep 26, 2022, 4:07:57 PM9/26/22
to pyNastran Discuss
Hello, I'm wondering if anyone can help me figure something out.

When I read in my op2 file with pyNastrans's read_op2(), I can see that I have an op2_results ctetra stress dataframe, a displacement dataframe, and a grid_point_force dataframe. Now, with my grid_point_force df, I see I have 10 nodes per ElementID, but when I open up my stress dataframe, I only see stress for 4 nodes (plus a centroid) per ElementID. I know I should have stress values for all 10 points, so I'm confused why I cannot view the stress for these other 6 nodes. Is there a parameter I need to adjust in read_op2() in order to read additional data? Any help here would be much appreciated. Thanks

Tom De Weer

unread,
Sep 27, 2022, 7:43:52 AM9/27/22
to pynastra...@googlegroups.com
Hi Josh,

In Finite Element Analysis, stresses are usually computed at the Gauss points and then (in a postprocessing step) extrapolated to the nodes. A CTETRA10 element is a second order element with 10 nodes but (due to nice Gaussian integration properties) only requires four integration points for exact integration. Therefore, what you're seeing in the op2 file are most likely the stresses defined at those four Gauss points. If you want to get the stresses at the nodes, you'll need to extrapolate from those (which incurs additional error). I'm also not sure if stress (or strain) is continuous along element boundaries for CTETRA10 elements (for CTETRA4 elements stress is constant so it surely isn't), which might be another reason why Nastran gives you the well-defined stresses at the Gauss points instead of the nodes.

Hopefully this helps!

Kind regards,
Tom

Op ma 26 sep. 2022 om 22:07 schreef josh beal <beal...@gmail.com>:
Hello, I'm wondering if anyone can help me figure something out.

When I read in my op2 file with pyNastrans's read_op2(), I can see that I have an op2_results ctetra stress dataframe, a displacement dataframe, and a grid_point_force dataframe. Now, with my grid_point_force df, I see I have 10 nodes per ElementID, but when I open up my stress dataframe, I only see stress for 4 nodes (plus a centroid) per ElementID. I know I should have stress values for all 10 points, so I'm confused why I cannot view the stress for these other 6 nodes. Is there a parameter I need to adjust in read_op2() in order to read additional data? Any help here would be much appreciated. Thanks

--
You received this message because you are subscribed to the Google Groups "pyNastran Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pynastran-disc...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pynastran-discuss/ee0bb95e-5f86-40cd-b73e-5d8778a43034n%40googlegroups.com.

josh beal

unread,
Sep 27, 2022, 8:24:46 AM9/27/22
to pyNastran Discuss
Thanks a lot, Tom! Then it sounds like the op2 i'm trying to read in contains stresses that were extrapolated (for the other 6 nodes) in a postprocessing step, but pyNastran doesn't read them in because the Gauss points are sufficient for integration/calculations.. If I'm way off here, please let me know. Once again, thanks for the help!

Tom De Weer

unread,
Sep 27, 2022, 11:01:59 AM9/27/22
to pynastra...@googlegroups.com
Hi Josh,

Which stresses the op2 contains is defined by the input file you gave Nastran. I'd guess pyNastran correctly reads in your op2 and what you see are the stresses at the Gauss points (since there are only 4) but I can't say without looking at the input file. If you want to look for yourself: look at the STRESS keyword in the case control deck and compare it to Nastran's documentation. If it's something like STRESS(GAUSS) = ALL then I'm quite sure the op2 contains the stresses at the Gauss points.

Hope that helps,
Tom

Op di 27 sep. 2022 om 14:24 schreef josh beal <beal...@gmail.com>:

Paul Blelloch

unread,
Sep 27, 2022, 11:14:27 AM9/27/22
to pynastra...@googlegroups.com
I think that this also depends on what version of Nastran you're using.  Looking at the Simcenter Nastran QRG, it doesn't appear that the GAUSS option is supported, so if you're getting that you must be using MSC.  I believe that the default in both MSC and Simcenter Nastran is to provide stresses at the 4 corners of a CTETRA element, no matter how many mid-side nodes are defined.  The easy way to check is to print the result to the .f06 file (no PLOT qualifier), in which case it will be clearly labeled.  The numbers in the .op2 file should match those.

Steven Doyle

unread,
Sep 27, 2022, 11:23:16 AM9/27/22
to pynastra...@googlegroups.com
For a CTETRA, so 4 or 10 nodes, the stress will be at the centroid and the 4 corner points.  That might change depending on the GAUSS flag, but I haven’t checked.  Midside nodes and gauss points may be interpolated from the corners if you’re interested in the result.

The results should match exactly with what is in the F06.  The real answer is because Nastran is weird sometimes.

Steve

On Tue, Sep 27, 2022 at 8:02 AM Tom De Weer <tom.d...@gmail.com> wrote:

josh beal

unread,
Sep 28, 2022, 8:22:16 AM9/28/22
to pyNastran Discuss
I'll check that out, Tom.. Thanks again!

josh beal

unread,
Sep 28, 2022, 8:22:50 AM9/28/22
to pyNastran Discuss
Great.. Thanks for the additional tip here, Paul!

josh beal

unread,
Sep 28, 2022, 8:24:23 AM9/28/22
to pyNastran Discuss
Yes, it seems the input file contains stress values for all nodes, but pyNastran.read_op2() only reads in the 4 corners plus the centroid. I'll see what I can do with this GAUSS flag.
Reply all
Reply to author
Forward
0 new messages