Doing Nastran Aero

19 views
Skip to first unread message

clarkbr...@gmail.com

unread,
Mar 30, 2026, 1:12:04 PM (4 days ago) Mar 30
to pyNastran Discuss
Steve,
I have been chasing SOL 144 for several years now. This semester I implemented W2GJ the downwash matrix in the input. I use it for the static downwash caused by camber. It's a struggle to figure out the aero numbering scheme.
I am using pyNastran v 1.4.1 and MSC Nastran 2021.1
I finally got MSC Nastran to run. I have CAERO1s for surfaces and CAERO2 for the fuselage.
I wrote the W2GJ matrix with add_dmij for surfaces CAERO1s and add_dmiji for the slender body CAERO2s.
read_op2 dies with
File "C:\Users\clark\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\pyNastran\op2\op2_interface\read_matrix_matpool.py", line 164, in read_matpool_result
    raise NotImplementedError(code)
NotImplementedError: (514, 5, 578)
My log file contains
30-Mar-2026 10:42:06 AM - get_results - INFO - op2_filename = '../YA-9/Nastranrundir/YA-9staticAero.op2'
30-Mar-2026 10:42:06 AM - get_results - DEBUG - mode='msc' version=''
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'PVT0'     (PARAM cards)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'CSTM'     (coordinate transforms)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'GPL'      (grid point list)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'GPDT'     (grid point locations)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'EPT'      (property cards)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'MPT'      (material cards)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'GEOM2'    (element cards)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'GEOM3'    (constraint cards)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'GEOM4'    (load cards)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'GEOM1'    (grid/coord cards)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'BGPDT'    (grid points in cid=0 frame)
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'CASECC'   (case control)
30-Mar-2026 10:42:06 AM - get_results - WARNING - nwords_to_lsem=1000 nwords_to_lsem//4=250
30-Mar-2026 10:42:06 AM - get_results - WARNING - nwords_to_lsem=1000 nwords_to_lsem//4=250
30-Mar-2026 10:42:06 AM - get_results - WARNING - nwords_to_lsem=1000 nwords_to_lsem//4=250
30-Mar-2026 10:42:06 AM - get_results - DEBUG -   table_name=b'MATPOOL'  (DMIG matrices)
30-Mar-2026 10:42:06 AM - get_results - WARNING - limiting n=3288 to 2000

I have come to understand the downwash matrix W2GJ (& others) are in this class of DMIG matrixes. It feels like W2GJ is in the op2 and pynastran isn't ready to read W2GJ.
I tried skip_undefined_matrices = True but this didn't prevent it.
Can you help me understand how to keep moving on this?
Sincerely,
Clark

Steven Doyle

unread,
Mar 30, 2026, 2:36:39 PM (4 days ago) Mar 30
to pynastra...@googlegroups.com
I’d have to see an example. I’m not sure why Nastran sometimes writes those matrices and sometimes not.

To figure out the numbering scheme, try “bdf export_caero_mes fem.bdf”. That will make cquad4s and loads for the w2gj in degrees.

--
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 visit https://groups.google.com/d/msgid/pynastran-discuss/f224d3c6-fa64-4b86-90d8-38145750f9adn%40googlegroups.com.

clarkbr...@gmail.com

unread,
Mar 30, 2026, 4:51:07 PM (3 days ago) Mar 30
to pyNastran Discuss
Steve,
I poked the Python line in read_matpool_result( ) and figured out that code isn't present for DMIJ or DMIJI. These are the bulk cards used for entering W2GJ. I added (wow, Python libs are writeable!)  these lines to read_matpool_result after the elif for code 414...
    elif code == (514, 5, 578):
        # C:\NASA\m4\formats\git\examples\pyNastran_examples\demo_sort2_post_m2\hd15305.op2
        op2_reader.log.warning('  skipping MATPOOL-DMIJ')
    elif code == (614, 6, 579):
        # C:\NASA\m4\formats\git\examples\pyNastran_examples\demo_sort2_post_m2\hd15305.op2
        op2_reader.log.warning('  skipping MATPOOL-DMIJI')
This succeeded in getting op2 reader through the whole file.
I don't think I need to recover DMIJ or DMIJI.
wrt to  "bdf export_caero_mes fem.bdf"
I don't get the context for doing that. I don't find a hit in the pyNastran readthedocs.
Sincerely,
Clark

Steven Doyle

unread,
Mar 30, 2026, 10:07:28 PM (3 days ago) Mar 30
to pynastra...@googlegroups.com
It’s bdf export_caero_mesh*

There’s a series of command line tools and the names are generally self-explanatory, so renumber, equivalence, etc. It’s the tools in bdf/mesh_utils.

It reads the bdf and writes the caero boxes as quads. That’s the order. If you’re on use DMI, it’s 1-N and if it’s DMIJ, it’s caero id +Ni, similar to how an AESURF/AELIST is done.

Steven Doyle

unread,
Mar 30, 2026, 10:51:05 PM (3 days ago) Mar 30
to pynastra...@googlegroups.com
How does a DMIJI work? That’s for the CAERO2, correct? I’ve never actually seen one…

clarkbr...@gmail.com

unread,
Apr 1, 2026, 11:42:03 AM (2 days ago) Apr 1
to pyNastran Discuss
BLUF After showing my DMIJI, I pose my real problem at the end.
Re DMIJI
My slender body CAERO2
$aeroFuselage slender body
CAERO2     19501   19502              20       9   19503   19504       1
              0.      0.      0.    53.5
Its DMIJ parts. CAERO2 entries follow all CAERO1 in W2GJ
DMIJ        W2GJ       0       9       1       1       0               1
DMIJ        W2GJ       1       0           15525       0.1429167
...
DMIJ        W2GJ       1       0           17524       0      0.
DMIJ        W2GJ       1       0           19501       0      0.
DMIJ        W2GJ       1       0           19503       0      0.
DMIJ        W2GJ       1       0           19505       0      0.
DMIJ        W2GJ       1       0           19507       0      0.
DMIJ        W2GJ       1       0           19509       0      0.
DMIJ        W2GJ       1       0           19511       0      0.
DMIJ        W2GJ       1       0           19513       0      0.
DMIJ        W2GJ       1       0           19515       0      0.
DMIJ        W2GJ       1       0           19517       0      0.
Then DMIJI is for the interference body parts
$ DMIJI Matrix W2GJ
DMIJI       W2GJ       0       9       1       1       0               1
DMIJI       W2GJ       1       0           19520       0      0.
DMIJI       W2GJ       1       0           19521       0      0.
DMIJI       W2GJ       1       0           19522       0      0.
DMIJI       W2GJ       1       0           19523       0      0.
DMIJI       W2GJ       1       0           19524       0      0.
DMIJI       W2GJ       1       0           19525       0      0.
DMIJI       W2GJ       1       0           19526       0      0.
DMIJI       W2GJ       1       0           19527       0      0.
DMIJI       W2GJ       1       0           19528       0      0.
DMIJI       W2GJ       1       0           19529       0      0.
DMIJI       W2GJ       1       0           19530       0      0.

So let me bury my current problem down here in the bottom of this.
I finally, by guessmanship, hit upon the correct syntax.
Once W2GJ is in the deck, you get gripes that the Case Control called for several other matrices
but they were not present. It's warnings. They are WKK, WTFACT and FA2J. Minimal entries for these are
DMIJ        FA2J       0       9       1       1       0               1
DMIJ        FA2J       1       0           15525       0      0.
DMIK         WKK       0       9       1       0                       1
DMIK         WKK       1       0           15525       0      0.
DMIK      WTFACT       0       9       1       0                       1
DMIK      WTFACT       1       0           15525       0      0.
I tried to follow the FSW example problem, but it uses DMI for all these, so it wasn't much help.
So my problem:
With W2GJ syntactically accepted in the deck, the pressures and forces don't change from it not
in the deck.
I am befuddled. It was a lot of work to get here, but it doesn't seem to be applied.
Ideas? Ever done W2GJ?
Clark

Steven Doyle

unread,
Apr 1, 2026, 4:51:12 PM (2 days ago) Apr 1
to pynastra...@googlegroups.com
I’ve done W2GJ for CAERO1, but never with CAERO2. I’ll take a look at that model.

For W2GJ, you’d use a DMI or DMIJ (aero boxes are the j-set, so DMI-J). It’s just the slope of the camber line at the midpoint??? of the caero box. Because CAERO2 are not lifting, I’d assume they aren’t in W2GJ. The only difference between the DMI and DMIJ is the index numbering.

Do not use a default WKK. It’s a matrix of 0s that corrects your theoretical force/moments to 0. A default FA2J is fine. I’m also not clear on the difference between WKK and WTFACT. I thought they were the same thing…

Steven Doyle

unread,
Apr 1, 2026, 4:54:15 PM (2 days ago) Apr 1
to pynastra...@googlegroups.com
W2GJ only affects static aero as well.

clarkbr...@gmail.com

unread,
Apr 2, 2026, 1:52:50 PM (14 hours ago) Apr 2
to pyNastran Discuss
I'm still trying test cases, but...
Re It’s just the slope of the camber line at the midpoint??? of the caero box.
Yes the Aeroelastic Analysis User’s Guide explains it that way. Small angles etc are involved.
Re WKK etc
I backed out of putting them in since I convinced myself the warnings were warnings.
CAERO2s are not as nice as CAERO1s. Their solution values are source strengths and they don't provide lift or pressures. The lifting body DOFs are in W2GJ and it seems one might put downwashes on them. Their interference bodies are also in W2GJ but you have to make entries for them via DMIJI. I plan to only put 0.0s on the lifting body and the interference body.
I complained earlier that I was following the FSW example problem (CH 7 of the Aero Guide) from long long ago. It has only CAERO1s and no CAERO2s. My gripe was it used plain DMIs for those matrices, which still seems to be legal, but uses equation numbers, not user panel numbers. The DMIJ, DMIK, DMIG all seem to be [deleted]. They are in the QRG, [deleted]. Ooops. Ch 7 Sweptback Wing example uses DMIJs. I need to go study that now.
Quickly browsing that example problem, the DMIJ W2GJ cards all hit dof 3 on each of the rows. I hit dof 0 because... 
I'll study this and try a few things and report back.
Clark

clarkbr...@gmail.com

unread,
Apr 2, 2026, 4:30:08 PM (11 hours ago) Apr 2
to pyNastran Discuss
I think I got it fixed now. The W2GJs seem to be applied. The 0 deg AOA now has pressures.
Re " Quickly browsing that example problem, the DMIJ W2GJ cards all hit dof 3 on each of the rows. I hit dof 0 because..."
Yep, if I put the W2GJs on dof 3, it seems to work.
$ DMIJ Matrix W2GJ

DMIJ        W2GJ       0       9       1       1       0               1
DMIJ        W2GJ       1       0           15573       3   .0399
DMIJ        W2GJ       1       0           15574       3 .111475
DMIJ        W2GJ       1       0           15575       3   .1365
...
Clark
Reply all
Reply to author
Forward
0 new messages